{"version":3,"sources":["webpack:///js/entry.b2293883c5a18e5bdfd4.js","webpack:///./src/module/analytics/geo/geo.country.view.regions.fix.json","webpack:///./src/model/api.model.ts","webpack:///./src/entry.ts","webpack:///./src/entry/prod.ts","webpack:///./node_modules/@angularclass/bootloader/esm/index.js","webpack:///./node_modules/@angularclass/hmr/dist/index.js","webpack:///./node_modules/@angularclass/hmr/dist/helpers.js","webpack:///./node_modules/ngx-virtual-scroller/dist/virtual-scroller.js","webpack:///./node_modules/@angularclass/hmr/dist/experimental.js","webpack:///./node_modules/@angularclass/hmr/dist/hmr.js","webpack:///./node_modules/angular2-flash-messages/module/index.js","webpack:///./node_modules/angular2-flash-messages/module/module.js","webpack:///./node_modules/angular2-flash-messages/module/flash-messages.component.js","webpack:///./node_modules/angular2-flash-messages/module/flash-message.js","webpack:///./src/module/account/account.view.html","webpack:///./src/module/account/account.view.scss","webpack:///./src/module/account/subscriptions/account.subscriptions.view.ts","webpack:///./src/module/account/subscriptions/account.subscriptions.view.html","webpack:///./src/module/account/invoices/account.invoices.view.ts","webpack:///./src/module/account/invoices/account.invoices.view.html","webpack:///./src/module/account/details/account.details.view.html","webpack:///./src/module/account/payments/account.payments.view.html","webpack:///./src/module/analytics/component/date-range-picker/daterangepicker.component.ts","webpack:///./src/module/form/check/check.buttons.component.html","webpack:///./src/module/form/check/check.buttons.component.scss","webpack:///./src/module/form/dropdown/dropdown.component.html","webpack:///./src/module/form/dropdown/dropdown.component.scss","webpack:///./src/module/form/dropdown/list/dropdown.list.component.html","webpack:///./src/module/form/dropdown/list/dropdown.list.component.scss","webpack:///./src/module/form/grid/image/image.grid.component.html","webpack:///./src/module/form/grid/image/image.grid.component.scss","webpack:///./src/module/form/input/editable.input.component.scss","webpack:///./src/module/form/list/data/data.list.component.html","webpack:///./src/module/form/list/data/data.list.component.scss","webpack:///./src/module/form/pagination/buttons/pagination.buttons.component.html","webpack:///./src/module/form/pagination/buttons/pagination.buttons.component.scss","webpack:///./src/module/form/pagination/bar/pagination.bar.component.html","webpack:///./src/module/form/pagination/bar/pagination.bar.component.scss","webpack:///./src/module/form/rangeslider/rangeslider.component.scss","webpack:///./src/module/form/singlechoice/singlechoice.input.component.html","webpack:///./src/module/form/singlechoice/singlechoice.input.component.scss","webpack:///./src/module/form/upload/file/upload.file.component.html","webpack:///./src/module/form/upload/file/upload.file.component.scss","webpack:///./src/module/form/upload/image/upload.image.component.html","webpack:///./src/module/form/upload/image/upload.image.component.scss","webpack:///./src/module/analytics/audience/audience.view.component.html","webpack:///./src/module/analytics/albums/albums.view.component.html","webpack:///./src/module/analytics/albums/album.details.view.component.html","webpack:///./src/module/analytics/content/content.view.component.html","webpack:///./src/module/analytics/content/content.details.view.component.html","webpack:///./src/module/analytics/dashboard/dashboard.view.component.html","webpack:///./src/module/analytics/top-content/top-content.view.component.html","webpack:///./src/module/analytics/geo/geo.view.component.html","webpack:///./src/module/analytics/geo/geo.country.view.component.html","webpack:///./src/module/analytics/technology/technology.view.component.html","webpack:///./src/module/analytics/realtime/realtime.view.component.html","webpack:///./src/module/analytics/QOS/QOS.view.component.html","webpack:///./src/module/analytics/playback-experience/playback-experience.list.view.component.html","webpack:///./src/module/analytics/playback-experience/playback-experience.details.view.component.html","webpack:///./src/module/analytics/errors/errors.view.component.html","webpack:///./src/module/analytics/errors/errors.view.component.scss","webpack:///./src/module/analytics/real-time-marketing/real-time-marketing.view.component.html","webpack:///./src/module/analytics/real-time-marketing/real-time-marketing.view.component.scss","webpack:///./src/module/analytics/content-insights/content-insights.view.component.html","webpack:///./src/module/analytics/content-insights/content-insights.view.component.scss","webpack:///./src/module/analytics/flexmodel/flexmodel.view.component.html","webpack:///./src/module/analytics/flexmodel/flexmodel.view.component.scss","webpack:///./src/module/analytics/flexmodel/data ^\\.\\/.*\\.json$","webpack:///./src/module/analytics/flexmodel/data/clickstream.json","webpack:///./src/module/analytics/flexmodel/data/gaming.json","webpack:///./src/module/analytics/flexmodel/data/qoe.json","webpack:///./src/module/analytics/flexmodel/data/telemetry.json","webpack:///./src/module/analytics/flexmodel/flexmodelsetup.view.component.html","webpack:///./src/module/analytics/flexmodel/flexmodelsetup.view.component.scss","webpack:///./src/module/analytics/heartbeat/heartbeat.view.component.html","webpack:///./src/module/analytics/heartbeat/panicdashboard.view.component.html","webpack:///./src/module/analytics/heartbeat/warroom.view.component.html","webpack:///./src/module/analytics/info/info.view.component.html","webpack:///./node_modules/@tweenjs/tween.js/src/Tween.js","webpack:///(webpack)/node_modules/process/browser.js","webpack:///./src/module/virtual/dropdown/component/popup/virtual.dropdown.popup.component.html","webpack:///./src/module/virtual/dropdown/component/popup/virtual.dropdown.popup.component.scss","webpack:///./src/module/virtual/dropdown/component/virtual.dropdown.component.html","webpack:///./src/module/virtual/dropdown/component/virtual.dropdown.component.scss","webpack:///./src/module/analytics/st/component/view/st.view.component.html","webpack:///./src/module/analytics/st/component/view/st.view.component.scss","webpack:///./src/module/analytics/st/raport/stRaport.view.component.html","webpack:///./src/module/virtual/list/component/virtual.list.component.html","webpack:///./src/module/virtual/list/component/virtual.list.component.scss","webpack:///./src/module/analytics/sampled-traffic/component/criteria/sampled-traffic.criteria.component.html","webpack:///./src/module/analytics/sampled-traffic/component/criteria/sampled-traffic.criteria.component.scss","webpack:///./src/module/analytics/sampled-traffic/component/geo/sampled-traffic.geo.component.html","webpack:///./src/module/analytics/sampled-traffic/component/geo/sampled-traffic.geo.component.scss","webpack:///./src/module/analytics/sampled-traffic/component/history/sampled-traffic.history.component.html","webpack:///./src/module/analytics/sampled-traffic/component/history/sampled-traffic.history.component.scss","webpack:///./src/module/analytics/sampled-traffic/component/summary/sampled-traffic.summary.component.html","webpack:///./src/module/analytics/sampled-traffic/component/summary/sampled-traffic.summary.component.scss","webpack:///./src/module/analytics/sampled-traffic/component/tags/sampled-traffic.tags.component.html","webpack:///./src/module/analytics/sampled-traffic/component/tags/sampled-traffic.tags.component.scss","webpack:///./src/module/analytics/sampled-traffic/component/view/sampled-traffic.view.component.html","webpack:///./src/module/analytics/sampled-traffic/component/view/sampled-traffic.view.component.scss","webpack:///./src/module/sidebar/item/sidebar.item.component.html","webpack:///./src/module/sidebar/item/sidebar.item.component.scss","webpack:///./src/module/sidebar/sidebar.component.html","webpack:///./src/module/sidebar/sidebar.component.scss","webpack:///./src/module/header/index.ts","webpack:///./src/module/header/header.component.ts","webpack:///./src/module/password-change/password-change.view.html","webpack:///./src/module/colorpicker/component/colorpicker.component.html","webpack:///./src/module/colorpicker/component/colorpicker.component.scss","webpack:///./src/module/colorpicker/component/dialog/colorpicker.dialog.component.html","webpack:///./src/module/colorpicker/component/dialog/colorpicker.dialog.component.scss","webpack:///./src/module/colorpicker/component/sample/colorpicker.sample.component.html","webpack:///./src/module/colorpicker/component/sample/colorpicker.sample.component.scss","webpack:///./src/module/colorpicker/component/text/colorpicker.text.component.html","webpack:///./src/module/colorpicker/component/text/colorpicker.text.component.scss","webpack:///./src/module/player/modules/builder/component/player/player.builder.player.component.html","webpack:///./src/module/player/modules/builder/component/player/player.builder.player.component.scss","webpack:///./src/module/player/modules/builder/component/view/player.builder.view.component.html","webpack:///./src/module/player/modules/builder/component/view/player.builder.view.component.scss","webpack:///./src/module/player/modules/builder/modules/@common/docs/component/player.builder.docs.component.html","webpack:///./src/module/player/modules/builder/modules/@common/docs/component/player.builder.docs.component.scss","webpack:///./src/module/player/modules/builder/modules/branding/component/player.builder.branding.component.html","webpack:///./src/module/player/modules/builder/modules/branding/component/player.builder.branding.component.scss","webpack:///./src/module/player/modules/builder/modules/end-splash/component/player.builder.end-splash.component.html","webpack:///./src/module/player/modules/builder/modules/features/component/player.builder.features.component.html","webpack:///./src/module/player/modules/builder/modules/general/component/player.builder.general.component.html","webpack:///./src/module/player/modules/builder/modules/@common/icon/component/select/player.builder.icon.select.component.html","webpack:///./src/module/player/modules/builder/modules/icons/component/player.builder.icons.component.html","webpack:///./src/module/player/modules/builder/modules/playback/component/player.builder.playback.component.html","webpack:///./src/module/player/modules/builder/modules/theme/component/player.builder.theme.component.html","webpack:///./node_modules/ng2-codemirror/lib/codemirror.module.js","webpack:///./src/module/player/modules/embedcode/component/player.embed.code.component.html","webpack:///./src/module/player/modules/embedcode/component/player.embed.code.component.scss","webpack:///./src/module/player/modules/embeder/component/player.embeder.view.component.html","webpack:///./src/module/player/modules/embeder/component/player.embeder.view.component.scss","webpack:///./src/module/player/modules/legacy/configurator/component/preview/video/player.configurator.preview.video.provider.json","webpack:///./src/module/player/modules/legacy/configurator/component/form/groups/player.configurator.form.groups.html","webpack:///./src/module/player/modules/legacy/configurator/component/form/groups/player.configurator.form.groups.scss","webpack:///./src/module/player/modules/legacy/configurator/component/form/inputs/docsLink/docsLink.component.html","webpack:///./src/module/player/modules/legacy/configurator/component/form/inputs/docsLink/docsLink.component.scss","webpack:///./src/module/player/modules/legacy/configurator/component/form/inputs/player.configurator.form.inputs.html","webpack:///./src/module/player/modules/legacy/configurator/component/form/inputs/player.configurator.form.inputs.scss","webpack:///./src/module/player/modules/legacy/configurator/component/form/player.configurator.form.html","webpack:///./src/module/player/modules/legacy/configurator/component/form/player.configurator.form.scss","webpack:///./src/module/player/modules/legacy/configurator/component/preview/player.configurator.preview.html","webpack:///./src/module/player/modules/legacy/configurator/component/preview/player.configurator.preview.scss","webpack:///./src/module/player/modules/legacy/configurator/component/view/player.configurator.view.html","webpack:///./src/module/player/modules/legacy/configurator/component/view/player.configurator.view.scss","webpack:///./src/module/player/modules/list/component/player.list.view.component.html","webpack:///./src/module/player/modules/list/component/player.list.view.component.scss","webpack:///./src/module/player/modules/versions/component/player.versions.view.component.html","webpack:///./src/module/player/modules/versions/component/player.versions.view.component.scss","webpack:///./src/module/products/view/products.view.component.ts","webpack:///./src/module/products/view/products.view.component.html","webpack:///./src/module/products/view/products.view.component.scss","webpack:///./node_modules/braintree-web-drop-in/dist/browser/dropin.js","webpack:///./src/module/subscription/subscription.view.component.html","webpack:///./src/module/content/content.component.html","webpack:///./src/module/login/login.view.html","webpack:///./src/module/spinner/component/spinner.component.html","webpack:///./src/module/spinner/component/spinner.component.scss","webpack:///./src/app/index.ts","webpack:///./src/app/app.component.ts","webpack:///./src/service/view.service.ts","webpack:///./src/app/app.spinner.component.ts","webpack:///./assets/i18n (pl|en)\\.json","webpack:///./assets/i18n/account/details/en.json","webpack:///./assets/i18n/account/details/pl.json","webpack:///./assets/i18n/account/en.json","webpack:///./assets/i18n/account/invoices/en.json","webpack:///./assets/i18n/account/invoices/pl.json","webpack:///./assets/i18n/account/payments/en.json","webpack:///./assets/i18n/account/payments/pl.json","webpack:///./assets/i18n/account/pl.json","webpack:///./assets/i18n/account/subscriptions/en.json","webpack:///./assets/i18n/account/subscriptions/pl.json","webpack:///./assets/i18n/analytics/QOS/en.json","webpack:///./assets/i18n/analytics/QOS/pl.json","webpack:///./assets/i18n/analytics/albums/en.json","webpack:///./assets/i18n/analytics/albums/pl.json","webpack:///./assets/i18n/analytics/audience/en.json","webpack:///./assets/i18n/analytics/audience/pl.json","webpack:///./assets/i18n/analytics/content/en.json","webpack:///./assets/i18n/analytics/content/pl.json","webpack:///./assets/i18n/analytics/dashboard/en.json","webpack:///./assets/i18n/analytics/dashboard/pl.json","webpack:///./assets/i18n/analytics/geo/en.json","webpack:///./assets/i18n/analytics/geo/pl.json","webpack:///./assets/i18n/analytics/heartbeat/en.json","webpack:///./assets/i18n/analytics/heartbeat/pl.json","webpack:///./assets/i18n/analytics/info/en.json","webpack:///./assets/i18n/analytics/info/pl.json","webpack:///./assets/i18n/analytics/realtime/en.json","webpack:///./assets/i18n/analytics/realtime/pl.json","webpack:///./assets/i18n/analytics/sampled-traffic/en.json","webpack:///./assets/i18n/analytics/sampled-traffic/pl.json","webpack:///./assets/i18n/analytics/st-raport/en.json","webpack:///./assets/i18n/analytics/st-raport/pl.json","webpack:///./assets/i18n/analytics/tag-service/en.json","webpack:///./assets/i18n/analytics/tag-service/pl.json","webpack:///./assets/i18n/analytics/technology/en.json","webpack:///./assets/i18n/analytics/technology/pl.json","webpack:///./assets/i18n/analytics/top-content/en.json","webpack:///./assets/i18n/analytics/top-content/pl.json","webpack:///./assets/i18n/components/en.json","webpack:///./assets/i18n/components/pl.json","webpack:///./assets/i18n/contact/en.json","webpack:///./assets/i18n/contact/pl.json","webpack:///./assets/i18n/content/en.json","webpack:///./assets/i18n/content/pl.json","webpack:///./assets/i18n/login/en.json","webpack:///./assets/i18n/login/pl.json","webpack:///./assets/i18n/password-change/en.json","webpack:///./assets/i18n/password-change/pl.json","webpack:///./assets/i18n/player/en.json","webpack:///./assets/i18n/player/pl.json","webpack:///./assets/i18n/products/en.json","webpack:///./assets/i18n/products/pl.json","webpack:///./assets/i18n/products/plan-carrousel/en.json","webpack:///./assets/i18n/products/plan-carrousel/pl.json","webpack:///./assets/i18n/subscription/en.json","webpack:///./assets/i18n/subscription/pl.json","webpack:///./node_modules/angular2-flash-messages/module/flash-messages.service.js","webpack:///./src/service/cookie.service.ts","webpack:///./src/module/modal/alert.modal.component.ts","webpack:///./src/service/url.service.ts","webpack:///./src/module/modal/input.modal.component.ts","webpack:///./src/module/modal/modal.model.ts","webpack:///./src/module/modal/password-change.modal.component.ts","webpack:///./src/module/modal/prompt.modal.component.ts","webpack:///./src/module/modal/gdpr.info.modal.component.ts","webpack:///./src/module/sidebar/item/sidebar.item.component.ts","webpack:///./src/module/sidebar/sidebar.component.ts","webpack:///./src/module/sidebar/sidebar.module.ts","webpack:///./src/module/header/header.service.ts","webpack:///./node_modules/ng2-codemirror/lib/index.js","webpack:///./src/service/buyCookie.service.ts","webpack:///./src/app/app.config.ts","webpack:///./src/service/auth.service.ts","webpack:///./src/module/modal/modal.service.ts","webpack:///./node_modules/angular-l10n/modules/angular-l10n.es5.js","webpack:///./node_modules/@angular/animations/@angular/animations.es5.js","webpack:///./node_modules/@angular/animations/@angular/animations/browser.es5.js","webpack:///./node_modules/@angular/platform-browser/@angular/platform-browser/animations.es5.js","webpack:///./node_modules/ngx-chips/node_modules/tslib/tslib.es6.js","webpack:///./node_modules/ng2-material-dropdown/fesm5/ng2-material-dropdown.js","webpack:///./node_modules/ngx-chips/esm5/ngx-chips.js","webpack:///./src/module/analytics/sampled-traffic/model/sampled-traffc.model.util.ts","webpack:///./node_modules/@bradmax/player-util/dist/es/config/merger.js","webpack:///./src/util/coercion.ts","webpack:///./src/app/app.localization.ts","webpack:///./src/module/form/dropdown/dropdown.model.ts","webpack:///./src/components/to.top.component.ts","webpack:///./src/components/index.ts","webpack:///./src/service/auth.guard.service.ts","webpack:///./src/app/shared/shared.module.ts","webpack:///./src/module/account/account.view.ts","webpack:///./src/service/braintree.service.ts","webpack:///./src/module/account/subscriptions/account.subscriptions.resolver.ts","webpack:///./src/module/account/subscriptions/paymentPicker.modal.ts","webpack:///./src/module/account/invoices/account.invoices.resolver.ts","webpack:///./src/service/country.service.ts","webpack:///./src/util/regex.util.ts","webpack:///./src/service/validation.service.ts","webpack:///./src/module/account/details/account.details.view.ts","webpack:///./src/module/account/details/account.details.resolver.ts","webpack:///./src/module/account/details/input.component.ts","webpack:///./src/module/account/payments/account.payments.view.ts","webpack:///./src/module/account/payments/account.payments.resolver.ts","webpack:///./src/module/account/payments/account.payments.guard.ts","webpack:///./src/module/account/account.module.ts","webpack:///./src/module/analytics/component/charts/chart.component.config.ts","webpack:///./src/module/analytics/component/charts/chart.scale.helper.ts","webpack:///./src/module/analytics/component/charts/chart.component.ts","webpack:///./src/module/analytics/component/charts/chart.realtime.component.ts","webpack:///./src/module/analytics/component/charts/chart.granularity.component.ts","webpack:///./src/module/analytics/component/charts/chart.categories.component.ts","webpack:///./src/module/analytics/component/charts/chart.picker.component.ts","webpack:///./src/module/analytics/component/charts/chart.module.ts","webpack:///./src/module/form/check/check.buttons.component.ts","webpack:///./src/module/form/directive/floatOnly.directive.ts","webpack:///./src/module/form/directive/integerOnly.directive.ts","webpack:///./src/module/form/search/search.component.ts","webpack:///./src/module/form/dropdown/list/dropdown.list.pipe.ts","webpack:///./src/module/form/dropdown/dropdown.animation.ts","webpack:///./src/module/form/dropdown/dropdown.component.ts","webpack:///./src/module/form/dropdown/list/dropdown.list.component.ts","webpack:///./src/module/form/grid/image/image.grid.component.ts","webpack:///./src/module/form/input/editable.input.component.ts","webpack:///./src/module/form/list/data/data.list.component.ts","webpack:///./src/util/math.util.ts","webpack:///./src/module/form/pagination/pagination.service.ts","webpack:///./src/module/form/pagination/buttons/pagination.buttons.component.ts","webpack:///./src/module/form/pagination/bar/pagination.bar.component.ts","webpack:///./src/module/form/pagination/size/pagination.size.component.ts","webpack:///./src/module/form/rangeslider/rangeslider.component.ts","webpack:///./src/module/form/singlechoice/singlechoice.input.component.ts","webpack:///./src/module/form/switch/switch.component.ts","webpack:///./src/module/form/upload/file/upload.file.service.ts","webpack:///./src/module/form/upload/file/upload.file.component.ts","webpack:///./src/module/form/upload/image/upload.image.service.ts","webpack:///./src/module/form/upload/image/upload.image.component.ts","webpack:///./src/module/form/form.module.ts","webpack:///./src/service/analytics/base.service.ts","webpack:///./src/service/analytics.service.ts","webpack:///./src/service/export.service.ts","webpack:///./src/module/analytics/service/usersAndViewsVSTime.service.ts","webpack:///./src/module/analytics/audience/audience.view.component.ts","webpack:///./src/module/analytics/audience/audience.module.ts","webpack:///./src/module/virtual/dropdown/model/virtual.dropdown.model.ts","webpack:///./src/module/analytics/component/pager/pager.component.ts","webpack:///./src/module/analytics/component/pager/pager.module.ts","webpack:///./src/service/analytics/media.service.ts","webpack:///./src/service/analytics/album.service.ts","webpack:///./src/service/analytics/tag.service.ts","webpack:///./src/service/analytics/existing.tag.selector.service.ts","webpack:///./src/util/date.util.ts","webpack:///./src/module/analytics/albums/albums.view.component.ts","webpack:///./src/module/analytics/albums/album.details.view.component.ts","webpack:///./src/module/analytics/albums/album.details.resolver.ts","webpack:///./src/module/analytics/albums/albums.module.ts","webpack:///./src/module/analytics/content/content.view.component.ts","webpack:///./src/service/analytics/pages.service.ts","webpack:///./src/module/analytics/sampled-traffic/model/sampled-traffic.filters.ts","webpack:///./src/module/analytics/sampled-traffic/service/google.geo.regions.fix.service.ts","webpack:///./src/module/analytics/sampled-traffic/service/sampled-traffic.api.service.ts","webpack:///./src/module/analytics/content/content.details.view.component.ts","webpack:///./src/module/analytics/content/content.details.resolver.ts","webpack:///./src/module/analytics/content/content.module.ts","webpack:///./src/service/player.service.ts","webpack:///./src/module/analytics/dashboard/dashboard.view.component.ts","webpack:///./src/module/analytics/component/heatmap/heatmap.component.ts","webpack:///./src/module/analytics/dashboard/dashboard.module.ts","webpack:///./src/module/analytics/top-content/top-content.view.component.ts","webpack:///./src/module/analytics/top-content/top-content.module.ts","webpack:///./node_modules/ng2-google-charts/google-charts-loader.service.js","webpack:///./node_modules/ng2-google-charts/google-chart/chart-html-tooltip.js","webpack:///./node_modules/ng2-google-charts/google-chart/google-chart.component.js","webpack:///./node_modules/ng2-google-charts/google-chart/chart-mouse-event.js","webpack:///./node_modules/ng2-google-charts/google-charts.module.js","webpack:///./src/module/analytics/geo/geo.view.component.ts","webpack:///./src/module/analytics/geo/geo.country.view.component.ts","webpack:///./src/module/analytics/geo/geo.module.ts","webpack:///./src/module/analytics/technology/technology.view.component.ts","webpack:///./src/module/analytics/technology/technology.module.ts","webpack:///./src/module/analytics/realtime/realtime.view.component.ts","webpack:///./src/module/analytics/realtime/realtime.module.ts","webpack:///./src/module/analytics/QOS/QOS.view.component.ts","webpack:///./src/module/analytics/component/charts/stackedhorizontalchart.component.ts","webpack:///./src/module/analytics/QOS/QOS.module.ts","webpack:///./src/module/analytics/playback-experience/playback-experience.list.view.component.ts","webpack:///./src/module/analytics/playback-experience/playback-experience.details.view.component.ts","webpack:///./src/module/analytics/playback-experience/playback-experience.module.ts","webpack:///./src/module/analytics/errors/errors.view.component.ts","webpack:///./src/module/analytics/errors/errors.module.ts","webpack:///./src/module/analytics/real-time-marketing/real-time-marketing.view.component.ts","webpack:///./src/module/analytics/real-time-marketing/real-time-marketing.module.ts","webpack:///./src/module/analytics/content-insights/content-insights.view.component.ts","webpack:///./src/module/analytics/content-insights/content-insights.module.ts","webpack:///./src/module/analytics/flexmodel/flexmodel.view.component.ts","webpack:///./src/module/analytics/flexmodel/flexmodelsetup.view.component.ts","webpack:///./src/module/analytics/flexmodel/flexmodel.module.ts","webpack:///./src/module/analytics/heartbeat/heartbeat.view.component.ts","webpack:///./src/module/analytics/heartbeat/panicdashboard.view.component.ts","webpack:///./src/module/analytics/heartbeat/warroom.view.component.ts","webpack:///./src/module/analytics/heartbeat/heartbeat.module.ts","webpack:///./src/module/analytics/info/info.view.component.ts","webpack:///./src/module/analytics/info/info.module.ts","webpack:///./src/module/virtual/dropdown/component/popup/virtual.dropdown.popup.component.ts","webpack:///./src/module/colorpicker/colorpicker.model.ts","webpack:///./src/module/virtual/dropdown/component/virtual.dropdown.component.ts","webpack:///./src/module/virtual/dropdown/pipe/virtual.dropdown.filter.pipe.ts","webpack:///./src/module/virtual/dropdown/pipe/virtual.dropdown.list.pipe.ts","webpack:///./src/module/virtual/dropdown/virtual.dropdown.module.ts","webpack:///./src/module/pipe/camelCaseToSpace/camelCaseToSpace.pipe.ts","webpack:///./src/module/pipe/camelCaseToSpace/camelCaseToSpace.module.ts","webpack:///./src/module/pipe/capitalizeFirst/capitalize.first.pipe.ts","webpack:///./src/module/pipe/capitalizeFirst/capitalize.first.module.ts","webpack:///./src/module/analytics/st/component/geo-picker/geo.picker.component.ts","webpack:///./src/module/analytics/st/component/report-type-picker/report.picker.component.ts","webpack:///./src/module/analytics/st/service/prefixed.tags.service.ts","webpack:///./src/module/analytics/st/component/view/st.view.component.ts","webpack:///./src/module/analytics/st/raport/stRaport.view.component.ts","webpack:///./src/module/analytics/st/st.module.ts","webpack:///./src/module/virtual/list/component/virtual.list.component.ts","webpack:///./src/module/virtual/list/virtual.list.module.ts","webpack:///./src/module/analytics/sampled-traffic/service/sampled-traffic.geo.service.ts","webpack:///./src/module/analytics/sampled-traffic/pipe/tag.prefix.pipe.ts","webpack:///./src/module/analytics/sampled-traffic/service/sampled-traffic.params.service.ts","webpack:///./src/module/analytics/sampled-traffic/service/sampled-traffic.tags.service.ts","webpack:///./src/module/analytics/sampled-traffic/component/criteria/sampled-traffic.criteria.component.ts","webpack:///./src/module/analytics/sampled-traffic/component/geo/sampled-traffic.geo.component.ts","webpack:///./src/module/analytics/sampled-traffic/component/history/sampled-traffic.history.component.ts","webpack:///./src/module/analytics/sampled-traffic/component/summary/sampled-traffic.summary.component.ts","webpack:///./src/module/analytics/sampled-traffic/component/tags/sampled-traffic.tags.component.ts","webpack:///./src/module/analytics/sampled-traffic/service/sampled-traffic.api.filters.service.ts","webpack:///./src/module/analytics/sampled-traffic/component/view/sampled-traffic.view.component.ts","webpack:///./src/module/analytics/sampled-traffic/service/sampled-traffic.default.params.guard.ts","webpack:///./src/module/analytics/sampled-traffic/service/sampled-traffic.resolve.query.region.service.ts","webpack:///./src/module/analytics/sampled-traffic/service/sampled-traffic.resolve.query.tags.service.ts","webpack:///./src/module/analytics/sampled-traffic/sampled-traffic.module.ts","webpack:///./src/module/analytics/analytics.module.ts","webpack:///./src/module/modal/close.modal.button.component.ts","webpack:///./src/service/password-change.service.ts","webpack:///./src/module/password-change/password-change.view.ts","webpack:///./src/module/password-change/password-change.module.ts","webpack:///./src/module/modal/modal.module.ts","webpack:///./src/module/player/modules/builder/model/player.builder.model.ts","webpack:///./src/module/colorpicker/service/colorpicker.service.ts","webpack:///./src/module/colorpicker/service/colorpicker.data.service.ts","webpack:///./src/module/colorpicker/component/colorpicker.component.ts","webpack:///./src/module/colorpicker/component/dialog/colorpicker.dialog.component.ts","webpack:///./src/module/colorpicker/component/sample/colorpicker.sample.component.ts","webpack:///./src/module/colorpicker/component/text/colorpicker.text.component.ts","webpack:///./src/module/colorpicker/directive/colorpicker.dialog.directive.ts","webpack:///./src/module/colorpicker/directive/colorpicker.slider.directive.ts","webpack:///./src/module/colorpicker/directive/colorpicker.text.directive.ts","webpack:///./src/module/colorpicker/colorpicker.module.ts","webpack:///./src/module/player/modules/builder/service/data/player.builder.data.diff.service.ts","webpack:///./src/module/player/modules/builder/player.builder.module.ts","webpack:///./src/module/player/modules/embeder/component/player.embeder.view.component.ts","webpack:///./src/module/player/modules/builder/service/player.builder.video.service.ts","webpack:///./src/module/player/modules/builder/service/player.builder.data.service.ts","webpack:///./src/module/player/modules/builder/component/@core/abstract.player.builder.data.component.ts","webpack:///./src/module/player/modules/builder/component/player/player.builder.player.component.ts","webpack:///./src/module/player/service/player.list.data.service.ts","webpack:///./src/module/player/modules/builder/service/player.builder.modal.service.ts","webpack:///./src/module/player/modules/builder/component/view/player.builder.view.component.ts","webpack:///./src/module/player/modules/builder/model/player.builder.tokens.ts","webpack:///./src/module/player/modules/builder/service/player.builder.docs.service.ts","webpack:///./src/module/player/modules/builder/modules/@common/docs/component/player.builder.docs.component.ts","webpack:///./src/module/player/modules/builder/modules/@common/docs/player.builder.docs.module.ts","webpack:///./src/module/player/modules/builder/modules/branding/component/player.builder.branding.component.ts","webpack:///./src/module/player/modules/builder/modules/branding/player.builder.branding.module.ts","webpack:///./src/module/player/modules/builder/modules/end-splash/component/player.builder.end-splash.component.ts","webpack:///./src/module/player/modules/builder/modules/end-splash/player.builder.end-splash.module.ts","webpack:///./src/module/player/modules/builder/modules/features/component/player.builder.features.component.ts","webpack:///./src/module/player/modules/builder/modules/features/player.builder.features.module.ts","webpack:///./src/module/player/modules/builder/modules/@common/locales/pipe/player.builder.locales.name.pipe.ts","webpack:///./src/module/player/modules/builder/modules/@common/locales/pipe/player.builder.locales.pipe.module.ts","webpack:///./src/module/player/modules/builder/modules/general/component/player.builder.general.component.ts","webpack:///./src/module/player/modules/builder/modules/general/player.builder.general.module.ts","webpack:///./src/module/clipboard/clipboard.service.ts","webpack:///./src/module/pipe/charCode/char.code.pipe.ts","webpack:///./src/module/pipe/charCode/char.code.module.ts","webpack:///./src/module/pipe/objectKeys/object.keys.pipe.ts","webpack:///./src/module/pipe/objectKeys/object.keys.module.ts","webpack:///./src/module/player/modules/builder/modules/@common/icon/component/select/player.builder.icon.select.component.ts","webpack:///./src/module/player/modules/builder/modules/@common/icon/pipe/player.builder.icon.svg.href.pipe.ts","webpack:///./src/module/player/modules/builder/modules/@common/icon/pipe/player.builder.icon.font.link.pipe.ts","webpack:///./src/module/player/modules/builder/modules/@common/icon/player.builder.icon.module.ts","webpack:///./src/module/player/modules/builder/modules/icons/component/player.builder.icons.component.ts","webpack:///./src/module/player/modules/builder/modules/icons/player.builder.icons.module.ts","webpack:///./src/module/player/modules/builder/modules/playback/component/player.builder.playback.component.ts","webpack:///./src/module/player/modules/builder/modules/playback/player.builder.playback.module.ts","webpack:///./src/module/player/modules/builder/modules/theme/component/player.builder.theme.component.ts","webpack:///./src/module/player/modules/builder/modules/theme/player.builder.theme.module.ts","webpack:///./src/module/player/modules/builder/service/guard/player.builder.activate.guard.ts","webpack:///./src/module/player/modules/builder/service/guard/player.builder.deactivate.guard.ts","webpack:///./src/module/player/modules/builder/service/resolve/http/player.builder.docs.links.resolve.service.ts","webpack:///./src/module/player/modules/builder/service/resolve/http/player.builder.media.resolve.service.ts","webpack:///./src/util/url.util.ts","webpack:///./src/module/player/modules/builder/service/resolve/js/player.builder.js.resolve.service.ts","webpack:///./src/module/pipe/sanitize/sanitize.html.pipe.ts","webpack:///./src/module/pipe/sanitize/sanitize.src.pipe.ts","webpack:///./src/module/pipe/sanitize/sanitize.style.pipe.ts","webpack:///./src/module/pipe/sanitize/sanitize.pipe.module.ts","webpack:///./src/module/player/modules/embedcode/component/player.embed.code.component.ts","webpack:///./src/module/player/modules/embedcode/player.embed.code.module.ts","webpack:///./src/module/player/modules/embeder/service/player.embeder.service.ts","webpack:///./src/module/player/modules/legacy/configurator/model/player.configurator.model.ts","webpack:///./src/module/player/modules/embeder/service/player.embeder.resolver.ts","webpack:///./src/module/player/modules/embeder/player.embeder.module.ts","webpack:///./src/module/player/modules/legacy/configurator/component/preview/video/player.configurator.preview.video.service.ts","webpack:///./src/module/player/modules/legacy/configurator/model/player.configurator.parser.ts","webpack:///./src/module/player/player.module.ts","webpack:///./src/module/player/modules/legacy/configurator/service/player.configurator.service.ts","webpack:///./src/module/player/modules/legacy/configurator/component/form/groups/player.configurator.form.groups.ts","webpack:///./src/module/player/modules/legacy/configurator/component/form/inputs/docsLink/docsLink.component.ts","webpack:///./src/module/player/modules/legacy/configurator/component/form/inputs/player.configurator.form.inputs.ts","webpack:///./src/module/player/modules/legacy/configurator/component/form/player.configurator.form.ts","webpack:///./src/module/player/modules/legacy/configurator/service/player.configurator.save.service.ts","webpack:///./src/module/player/modules/legacy/configurator/component/preview/video/player.configurator.preview.video.ts","webpack:///./src/module/player/modules/legacy/configurator/component/preview/player.configurator.preview.ts","webpack:///./src/module/player/modules/legacy/configurator/component/view/player.configurator.view.ts","webpack:///./src/module/player/modules/legacy/configurator/service/guard/player.configurator.deactivate.guard.ts","webpack:///./src/module/player/modules/legacy/configurator/service/resolve/player.configurator.resolve.config.ts","webpack:///./src/module/player/modules/legacy/configurator/service/resolve/player.configurator.resolve.defaults.ts","webpack:///./src/module/player/modules/legacy/configurator/service/resolve/player.configurator.resolve.sources.ts","webpack:///./src/module/player/modules/legacy/configurator/service/guard/player.configurator.activate.guard.ts","webpack:///./src/module/player/modules/legacy/configurator/player.configurator.module.ts","webpack:///./src/module/player/modules/list/pipe/player.list.sort.pipe.ts","webpack:///./src/module/player/modules/list/component/player.list.view.component.ts","webpack:///./src/module/player/modules/list/directive/download.player.js.v2.directive.ts","webpack:///./src/module/player/modules/list/player.list.module.ts","webpack:///./src/module/player/modules/versions/component/player.versions.view.component.ts","webpack:///./src/module/player/modules/versions/service/player.versions.resolver.ts","webpack:///./src/module/player/modules/versions/player.versions.module.ts","webpack:///./src/module/player/service/player.list.resolve.service.ts","webpack:///./src/module/products/service/account.products.resolver.service.ts","webpack:///./src/module/products/service/products.resolver.service.ts","webpack:///./src/module/products/products.module.ts","webpack:///./src/module/subscription/subscription.guard.ts","webpack:///./src/module/subscription/subscription.view.component.ts","webpack:///./src/module/subscription/subscription.resolver.ts","webpack:///./src/module/subscription/subscription.module.ts","webpack:///./src/service/login.service.ts","webpack:///./src/module/content/content.config.ts","webpack:///./src/module/content/content.component.ts","webpack:///./src/module/content/content.resolver.ts","webpack:///./src/module/content/content.module.ts","webpack:///./src/module/login/login.view.ts","webpack:///./src/module/login/service/can.activete.login.guard.ts","webpack:///./src/module/login/service/can.deactivete.login.guard.ts","webpack:///./src/module/login/login.module.ts","webpack:///./src/module/spinner/component/spinner.component.ts","webpack:///./src/module/spinner/spinner.module.ts","webpack:///./src/app/app.module.ts","webpack:///./src/service/localstorage.service.ts","webpack:///./src/module/modal/terms.modal.component.ts","webpack:///./src/module/header/header.module.ts","webpack:///./src/module/header/header.menu.component.ts","webpack:///./src/module/header/header.burger.component.ts","webpack:///./src/module/modal/modal.component.ts","webpack:///./src/service/exception.service.ts","webpack:///./node_modules/ng2-codemirror/lib/codemirror.component.js","webpack:///./src/service/sidebar.service.ts","webpack:///./src/service/api.service.ts","webpack:///./node_modules/angular2-flash-messages/index.js","webpack:///./src/service/product.service.ts","webpack:///./src/util/dom.util.ts","webpack:///./src/service/user.service.ts","webpack:///./src/service/payments.service.ts","webpack:///./src/service/subscription.service.ts","webpack:///./src/service/account.service.ts","webpack:///./src/module/modal/abstract.modal.component.ts","webpack:///./src/module/player/model/player.model.ts","webpack:///./node_modules/@angular/forms/@angular/forms.es5.js","webpack:///./src/service/tab.service.ts"],"names":["webpackJsonp","106","module","exports","107","reducingMappings","CD","CD-KG","CD-KL","CD-MN","CD-KS","CD-KC","CD-KE","CD-LO","CD-SA","CD-IT","CD-HU","CD-TO","CD-BU","CD-NU","CD-MO","CD-SU","CD-EQ","CD-TU","CD-TA","CD-HL","CD-LU","CD-HK","CN","CN-NM","CN-GX","CN-XZ","CN-NX","CN-XJ","CN-BJ","CN-TJ","CN-SH","CN-CQ","CN-HE","CN-SX","CN-LN","CN-JL","CN-HL","CN-JS","CN-ZJ","CN-AH","CN-FJ","CN-JX","CN-SD","CN-HA","CN-HB","CN-HN","CN-GD","CN-HI","CN-SC","CN-GZ","CN-YN","CN-SN","CN-GS","CN-QH","CN-TW","CN-HK","CN-MO","CZ","CZ-31","CZ-64","CZ-41","CZ-52","CZ-51","CZ-80","CZ-71","CZ-53","CZ-32","CZ-20","CZ-42","CZ-63","CZ-72","CZ-10","LU","LU-CL","LU-DI","LU-RD","LU-VD","LU-WI","LU-EC","LU-GR","LU-RM","LU-CA","LU-ES","LU-LU","LU-ME","sharingMapping","FR","FR-ARA","FR-BFC","FR-BRE","FR-COR","FR-CVL","FR-HDF","FR-GES","FR-IDF","FR-OCC","FR-NAQ","FR-NOR","FR-PAC","FR-PDL","IE","IE-C","IE-L","IE-M","IE-U","skippingSet","AS","BM","CI","CK","HK","KE","MP","MV","NC","OM","PF","PM","PS","RS","SG","SJ","TJ","TK","TV","TW","VI","WF","108","133","__webpack_exports__","__webpack_require__","isPlayerV2","d","api_version","isPlayerReadResponseV2","1336","1337","main","Object","platform_browser_dynamic_es5","bootstrapModule","app_module","defineProperty","value","core_es5","document","readyState","addEventListener","1338","__export","m","p","hasOwnProperty","1339","identity","val","bootloader","before","after","__domReadyHandler","removeEventListener","_main","createNewHosts","cmps","components","Array","prototype","map","call","componentNode","removeOldHost","newNode","style","display","currentDisplay","parentNode","removeChild","e","createElement","tagName","insertBefore","forEach","removeNgStyles","docHead","head","_styles","querySelectorAll","slice","filter","innerText","indexOf","el","getInputValues","_inputs","input","setInputValues","inputs","length","i","dispatchEvent","CustomEvent","detail","createInputTransfer","134","core_1","core_2","common_1","common_2","tween","VirtualScrollerComponent","element","renderer","zone","changeDetectorRef","platformId","scrollThrottlingTime","scrollDebounceTime","scrollAnimationTime","scrollbarWidth","scrollbarHeight","checkResizeInterval","resizeBypassRefreshThreshold","modifyOverflowStyleOfParentScroll","stripedTable","this","window","executeRefreshOutsideAngularZone","_enableUnequalChildrenSizes","useMarginInsteadOfTranslate","ssrViewportWidth","ssrViewportHeight","_bufferAmount","_checkResizeInterval","_items","compareItems","item1","item2","update","EventEmitter","vsUpdate","change","vsChange","start","vsStart","end","vsEnd","calculatedScrollbarWidth","calculatedScrollbarHeight","padding","previousViewPort","cachedPageSize","previousScrollNumberElements","isAngularUniversalSSR","isPlatformServer","horizontal","resetWrapGroupDimensions","get","pageInfo","startIndex","endIndex","scrollStartPosition","scrollEndPosition","maxScrollPosition","startIndexWithBuffer","endIndexWithBuffer","enumerable","configurable","set","minMeasuredChildWidth","undefined","minMeasuredChildHeight","Math","max","enableUnequalChildrenSizes","_scrollThrottlingTime","updateOnScrollFunction","_scrollDebounceTime","_this","onScroll","debounce","refresh_internal","throttleTrailing","addScrollEventHandlers","_horizontal","updateDirection","revertParentOverscroll","scrollElement","getScrollElement","oldParentScrollOverflow","y","x","_parentScroll","nativeElement","ngOnInit","ngOnDestroy","removeScrollEventHandlers","ngOnChanges","changes","indexLengthChanged","cachedItemsLength","items","firstRun","previousValue","ngDoCheck","refresh","invalidateAllCachedMeasurements","wrapGroupDimensions","maxChildSizePerWrapGroup","numberOfKnownWrapGroupChildSizes","sumOfKnownWrapGroupChildWidths","sumOfKnownWrapGroupChildHeights","invalidateCachedMeasurementForItem","item","index","invalidateCachedMeasurementAtIndex","cachedMeasurement","childWidth","childHeight","scrollInto","alignToBeginning","additionalOffset","animationMilliseconds","animationCompletedCallback","scrollToIndex","maxRetries","retryIfNeeded","dimensions","calculateDimensions","desiredStartIndex","min","itemCount","scrollToIndex_internal","scroll","calculatePadding","wrapGroupsPerPage","_childScrollDim","scrollToPosition","scrollPosition","getElementsOffset","animationRequest","currentTween","stop","setProperty","_scrollType","tweenConfigObj","newTween","Tween","to","easing","Easing","Quadratic","Out","onUpdate","data","isNaN","onStop","cancelAnimationFrame","animate","time","runOutsideAngular","requestAnimationFrame","checkScrollElementResized","sizeChanged","boundingRect","getBoundingClientRect","previousScrollBoundingRect","widthChange","abs","width","heightChange","height","_invisiblePaddingProperty","_offsetType","_pageOffsetType","_marginDir","_translateDir","func","wait","throttled","result","apply","arguments","timeout","_arguments","setTimeout","clearTimeout","itemsArrayModified","refreshCompletedCallback","maxRunTimes","viewport","calculateViewport","startChanged","endChanged","scrollLengthChanged","scrollLength","paddingChanged","scrollPositionChanged","setStyle","invisiblePaddingElementRef","contentElementRef","headerElementRef","containerOffset","offset","clientHeight","changeEventArg","handleChanged","viewPortItems","emit","markForCheck","run","parentScroll","Window","scrollingElement","documentElement","body","disposeScrollHandler","listen","disposeResizeHandler","checkScrollElementResizedTimer","setInterval","clearInterval","containerElementRef","elementClientRect","scrollClientRect","left","top","countItemsPerWrapGroup","round","ssrChildHeight","ssrChildWidth","propertyName","children","childrenLength","firstOffset","getScrollStartPosition","windowScrollValue","oldWrapGroupDimensions","itemsPerWrapGroup","wrapGroupIndex","oldWrapGroupDimension","itemsChanged","arrayStartIndex","offsetHeight","offsetWidth","clientWidth","defaultChildWidth","defaultChildHeight","viewportWidth","viewportHeight","content","itemsPerRow","ceil","itemsPerCol","scrollOffset","maxWidthForWrapGroup","maxHeightForWrapGroup","sumOfVisibleMaxWidths","sumOfVisibleMaxHeights","child","clientRect","oldValue","maxVisibleWidthForWrapGroup","scrollOffsetToRemove","maxVisibleHeightForWrapGroup","averageChildWidth","averageChildHeight","itemsPerPage","pageCount_fractional","numberOfWrapGroups","defaultScrollLengthPerWrapGroup","numUnknownChildSizes","childSize","viewportLength","arrayStartIndexWithBuffer","startingWrapGroupIndex","floor","calculatePageInfo","scrollPercentage","totalScrolledLength","startingArrayIndex_fractional","maxStart","bufferBoundary","arrayEndIndex","endIndexWithinWrapGroup","bufferSize","bufferAmount","newPadding","newScrollLength","decorators","type","Component","args","selector","exportAs","template","host","[class.horizontal]","[class.vertical]","[class.selfScroll]","styles","ctorParameters","ElementRef","Renderer2","NgZone","ChangeDetectorRef","Inject","PLATFORM_ID","Optional","propDecorators","Input","Output","ViewChild","read","ContentChild","VirtualScrollerModule","NgModule","declarations","imports","CommonModule","1340","__getInputValues","inputTagName","toLowerCase","inputType","inputId","id","inputName","name","inputValue","inputChildNodes","childNodes","inputSelected","Boolean","selected","elementStore","tag","checked","options","option","__setInputValues","$inputs","store","getAttribute","querySelector","select_1","storedOption","j","__createInputTransfer","1341","hmrModule","MODULE_REF","MODULE","CONFIG","MODULE_CONFIG","instance","status","err","outdatedModules","dependencies","destroy","OnInit","OnStatus","OnCheck","OnDecline","OnDestroy","AfterDestroy","1342","module_1","FlashMessagesModule","flash_messages_service_1","FlashMessagesService","1343","flash_messages_component_1","FlashMessagesComponent","providers","1344","flash_message_1","_flashMessagesService","_cdRef","_defaults","text","cssClass","messages","classes","_grayOut","show","bind","grayOut","defaults","attrname","message","FlashMessage","push","detectChanges","_remove","msg","1345","nextId","1346","1347","1348","$","AccountSubscriptionsView","__WEBPACK_IMPORTED_MODULE_0__angular_core__","__WEBPACK_IMPORTED_MODULE_1__angular_router__","__WEBPACK_IMPORTED_MODULE_2_angular_l10n__","__WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__","__WEBPACK_IMPORTED_MODULE_4__service_payments_service__","n","__WEBPACK_IMPORTED_MODULE_5__service_subscription_service__","__WEBPACK_IMPORTED_MODULE_6__service_tab_service__","__WEBPACK_IMPORTED_MODULE_7__service_user_service__","__WEBPACK_IMPORTED_MODULE_8__service_view_service__","__WEBPACK_IMPORTED_MODULE_9__service_product_service__","__WEBPACK_IMPORTED_MODULE_10__modal_modal_service__","__extends","extendStatics","setPrototypeOf","__proto__","b","__","constructor","create","__decorate","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","__metadata","k","v","metadata","_super","route","tabService","userService","productService","paymentsService","subscriptionService","modal","view","flashMessagesService","locale","translation","cdr","showPaymentsModal","showSpinner","subscribe","account","accountProducts","accountPaymentMethods","addAdditionalProperties","braintreeClientToken","bt_client_token","onNavigatedTo","ngAfterViewInit","tooltip","onPaymentsModalClosed","calcViewsUsagePerc","viewsMade","viewsSize","results","plan","some","pm","token","bt_pm_token","payment_method","total","base_price","net","current_views","base_views_size","usage_unit_price","usage_unit_size","usage_count","current_total","_a","_b","_c","_d","_e","_f","_g","_h","_j","_k","_l","_m","1349","1350","AccountInvoicesView","__WEBPACK_IMPORTED_MODULE_4__service_user_service__","__WEBPACK_IMPORTED_MODULE_5__service_tab_service__","__WEBPACK_IMPORTED_MODULE_6__service_payments_service__","__WEBPACK_IMPORTED_MODULE_7__modal_modal_service__","payments","transactionOnEdit","transactionDetails","transactionsList","count","DataTable","order","onSaveEdit","form","valid","accountId","updateInvoice","invoice","transaction","translate","error","editTransaction","JSON","parse","stringify","terms","showTermsForEdit","prompt","label","fa","close","click","showReceiptDetails","receipt","changeDetection","OnPush","1351","1352","1353","1354","DateRangePickerComponent","__WEBPACK_IMPORTED_MODULE_1_angular_l10n__","__WEBPACK_IMPORTED_MODULE_2_daterangepicker__","__WEBPACK_IMPORTED_MODULE_3_moment__","__WEBPACK_IMPORTED_MODULE_3_moment___default","enable","showIcon","opens","selectionChanged","defaultOptions","getDefaultSettings","startDate","endDate","range","toString","getDateRangePickerLocale","pickerJQuery","picker","daterangepicker","dateChangedCallback","remove","last7days","last30days","lastmonth","currentmonth","currentweek","lastweek","sod","clone","startOf","som","sow","showDropdowns","ranges","subtract","endOf","format","buttonClasses","applyClass","cancelClass","showCustomRangeLabel","linkedCalendars","autoApply","alwaysShowCalendars","maxDate","getCurrentLanguage","localeData","a","cancelLabel","applyLabel","longDateFormat","separator","weekLabel","customRangeLabel","firstDay","firstDayOfWeek","daysOfWeek","weekdaysMin","monthNames","monthsShort","String","1355","1356","1357","1358","1359","1360","1361","1362","1363","1364","1365","1366","1367","1368","1369","1370","1371","1372","1373","1374","1375","1376","1377","1378","1379","1380","1381","1382","1383","1384","1385","1386","1387","1388","1389","1390","1391","1392","1393","1394","1395","1396","1397","1398","1399","webpackContext","req","webpackContextResolve","Error","./clickstream.json","./gaming.json","./qoe.json","./telemetry.json","keys","resolve","1400","fields","typeName","aggregable","1401","1402","1403","1404","1405","1406","1407","1408","1409","1410","process","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_Group","_tweens","_tweensAddedDuringUpdate","getAll","tweenId","removeAll","add","getId","preserve","tweenIds","TWEEN","now","_isPlaying","Group","_nextId","hrtime","self","performance","Date","getTime","object","group","_object","_valuesStart","_valuesEnd","_valuesStartRepeat","_duration","_repeat","_repeatDelayTime","_yoyo","_reversed","_delayTime","_startTime","_easingFunction","Linear","None","_interpolationFunction","Interpolation","_chainedTweens","_onStartCallback","_onStartCallbackFired","_onUpdateCallback","_onRepeatCallback","_onCompleteCallback","_onStopCallback","_group","_id","isPlaying","properties","duration","parseFloat","property","concat","stopChainedTweens","Infinity","numChainedTweens","delay","amount","repeat","times","repeatDelay","yoyo","easingFunction","interpolation","interpolationFunction","chain","onStart","callback","onRepeat","onComplete","elapsed","charAt","isFinite","tmp","In","InOut","Cubic","Quartic","Quintic","Sinusoidal","cos","PI","sin","Exponential","pow","Circular","sqrt","Elastic","Back","s","Bounce","f","fn","Utils","Bezier","pw","bn","Bernstein","CatmullRom","p0","p1","t","fc","Factorial","p2","p3","v0","v1","t2","root","1411","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queue","queueIndex","drainQueue","len","Item","array","noop","nextTick","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","1412","1413","1414","1415","1416","1417","1418","1419","1420","1421","1422","1423","1424","1425","1426","1427","1428","1429","1430","1431","1432","1433","1434","1435","1436","1437","1438","1439","__WEBPACK_IMPORTED_MODULE_0__header_component__","__WEBPACK_IMPORTED_MODULE_3__header_model__","o","__WEBPACK_IMPORTED_MODULE_5__header_service__","1440","HeaderComponent","__WEBPACK_IMPORTED_MODULE_1__service_view_service__","__WEBPACK_IMPORTED_MODULE_2__service_sidebar_service__","sidebar","resizeStream$","onBurgerClick","active","openDefault","class","1441","1442","1443","1444","1445","1446","1447","1448","1449","1450","1451","1452","1453","1454","1455","1456","1457","1458","1459","1460","1461","1462","1463","1464","1465","1466","codemirror_component_1","CodemirrorModule","CodemirrorComponent","1467","1468","1469","1470","1471","dataReportErrors","dataProvider","source","url","contentType","bitrate","splashImages","mediaDetails","tags","genres","descriptionLong","descriptionShort","year","mediaCast","directors","1472","1473","1474","1475","1476","1477","1478","1479","1480","1481","1482","1483","1484","1485","1486","1487","1488","ProductsView","__WEBPACK_IMPORTED_MODULE_4__service_account_service__","__WEBPACK_IMPORTED_MODULE_5__service_buyCookie_service__","__WEBPACK_IMPORTED_MODULE_6__service_subscription_service__","__WEBPACK_IMPORTED_MODULE_9__modal_modal_service__","router","user","accountService","buyCookie","products","accountProductsIds","_i","ap","product_plan","buyCookiePlan","buyCookieProdId","plans","pp","onPlanSelect","isPlanSelectedForAccount","planId","productId","prod","checkPlan","onPlanContact","open","is_contact_required","checkAccount","handleError","details","company_name","getSubscriptionOrders","subscriptionOrderId","askToReuse","createSubscriptionOrderAction","accountDetailsInvalidAction","createSubscriptionOrder","navigate","spinner","cancelSubscriptionOrder","erase","1489","1490","1491","global","require","u","code","1","loadStylesheet","loadScript","./load-script","./load-stylesheet","2","__importDefault","mod","__esModule","default","PromiseGlobal","promise_polyfill_1","Promise","promise-polyfill","3","scriptLoadPromise","stringifiedOptions","forceScriptReload","scriptPromiseCache","script","attrs","dataAttributes","container","src","async","crossorigin","setAttribute","promise_1","reject","appendChild","clearCache","./lib/promise","4","stylesheet","href","firstChild","5","./dist/load-script","6","ua","navigator","userAgent","test","7","8","isEdge","isSamsung","isDuckDuckGo","isOpera","isSilk","./is-duckduckgo","./is-edge","./is-opera","./is-samsung","./is-silk","9","10","11","12","isIE11","./is-ie11","13","14","15","16","17","isGoogleSearchApp","isIos","./is-ios","18","isWebkit","webkitRegexp","isIosChrome","isFacebook","isIosFirefox","./is-ios-firefox","19","isIosGoogleSearchApp","./is-ios-google-search-app","20","isIosWebview","statusBarVisible","statusbar","visible","./is-ios-webview","21","22","23","24","25","isUnsupportedIosChrome","match","parseInt","MINIMUM_SUPPORTED_CHROME_IOS_VERSION","isOperaMini","isAndroidWebview","androidWebviewRegExp","isAndroid","isOldSamsungBrowserOrSamsungWebview","isChrome","isSamsungBrowser","./is-android","./is-chrome","26","./dist/is-android","27","./dist/is-chrome-os","28","./dist/is-chrome","29","./dist/is-edge","30","./dist/is-firefox","31","./dist/is-ie","32","./dist/is-ie10","33","./dist/is-ie9","34","./dist/is-ios-safari","35","./dist/is-ios-webview","36","./dist/is-ios-wkwebview","37","./dist/is-ios","38","./dist/is-samsung","39","./dist/supports-popups","40","_classesOf","className","trim","split","toAdd","classname","join","toRemove","toggle","adding","41","_events","event","eventCallbacks","indexOfCallback","splice","_emit","hasListener","createChild","ChildObject","42","GlobalPromise","ExtendedPromise","_promise","_resolveFunction","_rejectFunction","_onResolve","onResolve","defaultOnResolve","_onReject","onReject","defaultOnReject","shouldCatchExceptions","catch","_resetState","setPromise","PromiseClass","suppressUnhandledPromiseMessage","all","allSettled","race","arg","then","isFulfilled","_setResolved","argForResolveFunction","_setRejected","isResolved","isRejected","43","set_attributes_1","default_attributes_1","assign_1","iframe","config","assign","defaultAttributes","setAttributes","./lib/assign","./lib/default-attributes","./lib/set-attributes","44","objs","obj","45","frameBorder","allowtransparency","scrolling","46","attributes","removeAttribute","47","uuid","replace","random","48","deferred","console","log","49","called","50","promiseOrCallback","promise","51","wrapPromise","pop","once_1","deferred_1","promise_or_callback_1","wrapPrototype","ignoreMethods","includePrivateMethods","transformPrivateMethods","getOwnPropertyNames","method","isNotPrivateMethod","isNonConstructorFunction","isNotAnIgnoredMethod","original","./lib/deferred","./lib/once","./lib/promise-or-callback","52","ApplePay","_instantiatedWithClient","useDeferredClient","_client","client","_createPromise","createPromise","_setMerchantIdentifier","BraintreeError","analytics","errors","methods","convertMethodsToError","_waitForClient","applePayConfig","getConfiguration","gatewayConfiguration","applePayWeb","merchantIdentifier","writable","createPaymentRequest","paymentRequest","_createPaymentRequestSynchronously","applePay","countryCode","currencyCode","merchantCapabilities","supportedNetworks","network","performValidation","validationURL","applePayWebSession","validationUrl","domainName","location","hostname","displayName","request","endpoint","_meta","response","sendEvent","APPLE_PAY_MERCHANT_VALIDATION_FAILED","originalError","APPLE_PAY_MERCHANT_VALIDATION_NETWORK","APPLE_PAY_VALIDATION_URL_REQUIRED","tokenize","applePaymentToken","paymentData","btoa","applePayCards","APPLE_PAY_TOKENIZATION","APPLE_PAY_PAYMENT_TOKEN_REQUIRED","teardown","../lib/analytics","../lib/braintree-error","../lib/convert-methods-to-error","../lib/methods","../lib/promise","./errors","@braintree/wrap-promise","53","APPLE_PAY_NOT_ENABLED","types","MERCHANT","NETWORK","54","basicComponentVerification","verify","authorization","applePayInstance","createDeferredClient","debug","assetsUrl","createAssetsUrl","VERSION","../lib/basic-component-verification","../lib/create-assets-url","../lib/create-deferred-client","./apple-pay","55","isIe","isIe9","@braintree/browser-detection/is-ie","@braintree/browser-detection/is-ie9","56","Client","configuration","configurationJSON","CLIENT_MISSING_GATEWAY_CONFIGURATION","isVerifiedDomain","CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN","_request","_configuration","_clientApiBaseUrl","clientApiUrl","graphQL","_graphQL","GraphQL","formatRequestError","requestError","CLIENT_REQUEST_TIMEOUT","CLIENT_AUTHORIZATION_INVALID","CLIENT_AUTHORIZATION_INSUFFICIENT","CLIENT_RATE_LIMITED","CLIENT_GATEWAY_NETWORK","convertToBraintreeError","CLIENT_REQUEST_ERROR","httpStatus","getAuthorizationHeadersForGraphQL","Authorization","authorizationFingerprint","Braintree-Version","BRAINTREE_VERSION","getGatewayConfiguration","createAuthorizationData","addMetadata","GRAPHQL_URLS","assets","FRAUDNET_FNCLS","FRAUDNET_SOURCE","FRAUDNET_URL","cachedClients","initialize","clientInstance","authData","CLIENT_INVALID_AUTHORIZATION","isDebug","_findOrCreateFraudnetJSON","clientMetadataId","additionalData","parameters","rda_tenant","mid","merchantId","pieces","component","cid","substr","fp","bu","requestPromise","optionName","api","baseUrl","requestOptions","shouldCollectData","creditCards","collectDeviceData","CLIENT_OPTION_REQUIRED","analyticsMetadata","CLIENT_OPTION_INVALID","environment","clientSdkMetadata","platform","integration","sessionId","headers","sendAnalyticsEvent","kind","resolvedData","CLIENT_GRAPHQL_REQUEST_ERROR","_httpStatus","nonce","toJSON","getVersion","../lib/add-metadata","../lib/assets","../lib/assign","../lib/constants","../lib/convert-to-braintree-error","../lib/create-authorization-data","../lib/deferred","../lib/is-verified-domain","../lib/once","./constants","./get-configuration","./request","./request/graphql","57","58","INTERNAL","59","configUrl","reqOptions","merchantAppId","constants","PLATFORM","sdkVersion","SOURCE","INTEGRATION","integrationType","braintreeLibraryVersion","BRAINTREE_LIBRARY_VERSION","configVersion","isDateStringBeforeOrOn","date","features","tokenizationKey","errorTemplate","authorizationType","../lib/is-date-string-before-or-on","@braintree/uuid","60","sharedErrors","INSTANTIATION_OPTION_REQUIRED","../lib/errors","./client","61","requestShouldRetry","TCP_PRECONNECT_BUG_STATUS_CODE","graphQLRequestShouldRetryWithClientApi","errorClass","extensions","_requestWithRetry","tcpRetryCount","cb","resBody","ajaxRequest","parsedBody","xhr","getRequestObject","isGraphQLRequest","Content-Type","GraphQLRequest","DefaultRequest","getUrl","getBody","getMethod","getHeaders","querystring","queryify","isXHRAvailable","onreadystatechange","parseBody","responseText","adaptResponseBody","determineStatus","MAX_TCP_RETRYCOUNT","onload","onerror","onprogress","ontimeout","requestOpenError","headerKey","setRequestHeader","send","prepBody","isAvailable","../../lib/assign","../../lib/querystring","./default-request","./graphql/request","./parse-body","./prep-body","./xhr","62","_url","_data","_method","_headers","63","64","configurationResponseAdapter","responseBody","ctx","adaptConfigurationResponseBody","errorResponseAdapter","clientConfiguration","analyticsUrl","venmo","supportedFeatures","_config","feature","braintreeApi","mapCardTypes","supportedCardBrands","cardTypeTransforms","ideal","kount","kountMerchantId","creditCard","challenges","challenge","supportedCardTypes","threeDSecureEnabled","threeDSecure","googlePay","androidPay","enabled","googleAuthorizationFingerprint","googleAuthorization","paypalClientId","payWithVenmo","accessToken","paypal","paypalEnabled","currencyIsoCode","unionPay","merchantAccountId","visaCheckout","apikey","apiKey","encryptionKey","externalClientId","masterpass","merchantCheckoutId","usBankAccount","routeId","plaid","publicKey","plaidPublicKey","cardTypes","cardTypeTransformMap","reduce","acc","AMERICAN_EXPRESS","DISCOVER","INTERNATIONAL_MAESTRO","JCB","MASTERCARD","SOLO","UK_MAESTRO","UNION_PAY","VISA","ELO","HIPER","HIPERCARD","DINERS","../../../../lib/assign","./error","65","creditCardTokenizationResponseAdapter","adaptTokenizeCreditCardResponseBody","regulationEnvironment","tokenizeCreditCard","lastTwo","last4","binData","BIN_DATA_MAP","consumed","description","cardholderName","expirationMonth","expirationYear","bin","cardType","CARD_BRAND_MAP","brandCode","lastFour","threeDSecureInfo","authenticationInsight","customerAuthenticationRegulationEnvironment","AUTHENTICATION_INSIGHT_MAP","YES","NO","UNKNOWN","PSDTWO","66","userErrorResponseAdapter","errorWithClassResponseAdapter","fieldErrors","buildFieldErrors","getLegacyMessage","inputPath","addFieldError","errorDetail","fieldError","legacyCode","inputField","field","candidate","67","query","CONFIGURATION_QUERY","operationName","68","createMutation","hasAuthenticationInsight","mutation","createCreditCardTokenizationBody","cc","billingAddress","expDate","expirationDate","variables","number","cvv","authenticationInsightInput","addValidationRule","validate","creditCardTokenization","69","containsDisallowedlistedKeys","disallowedInputPaths","accumulator","browserDetection","tokenize_credit_cards","getGraphQLEndpoint","featureEnabled","path","getClientApiPath","_isGraphQLEnabled","pathParts","../../browser-detection","70","clientApiPath","_clientSdkMetadata","_sendAnalyticsEvent","Function","_generator","generators","_adapter","adapters","isGraphQLError","parsedResponse","formatBodyKeys","originalBody","camelCaseKey","snakeCaseToCamelCase","creditCardTokenizationBodyGenerator","configurationBodyGenerator","payment_methods/credit_cards","formattedBody","generatedBody","../../../lib/assign","../../../lib/snake-case-to-camel-case","../../constants","./adapters/configuration","./adapters/credit-card-tokenization","./generators/configuration","./generators/credit-card-tokenization","71","isAjaxAvailable","ajaxIsAvaliable","isHTTP","getUserAgent","JSONPDriver","AJAXDriver","toUpperCase","../../lib/once","./ajax-driver","./get-user-agent","./is-http","./jsonp-driver","72","protocol","73","_removeScript","_createScriptTag","callbackName","done","_cleanupGlobal","_","_setupTimeout","timeouts","_setupGlobalCallback","getElementsByTagName","74","75","76","XMLHttpRequest","XDomainRequest","77","GOOGLE_PAYMENT_NOT_ENABLED","GOOGLE_PAYMENT_GATEWAY_ERROR","GOOGLE_PAYMENT_UNSUPPORTED_VERSION","78","GooglePayment","_useDeferredClient","_googlePayVersion","googlePayVersion","_googleMerchantId","googleMerchantId","_isUnsupportedGooglePayAPIVersion","applyDefaultsToPaymentMethodConfiguration","merchantSubmittedPaymentMethod","defaultPaymentMethod","parameter","find","generateGooglePayConfiguration","CREATE_PAYMENT_DATA_REQUEST_METHODS","_getDefaultConfig","_defaultConfig","_createV1PaymentDataRequest","paymentDataRequest","defaultConfig","overrideCardNetworks","cardRequirements","allowedCardNetworks","defaultConfigCardNetworks","_createV2PaymentDataRequest","allowedPaymentMethods","paymentMethod","createPaymentDataRequest","overrides","_createPaymentDataRequestSyncronously","createPaymentDataRequestMethod","parseResponse","payload","rawResponse","apiVersion","paymentMethodData","tokenizationData","paymentMethodToken","paypalAccounts","androidPayCards","isNetworkTokenized","../lib/find","../lib/generate-google-pay-configuration","79","./google-payment","80","attributeValidationError","attribute","allowedAttributes","_isValid","HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED","HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED","../../lib/braintree-error","../shared/constants","../shared/errors","81","useMin","componentId","../../lib/use-min","82","_isUserFocusableElement","hasSoftwareKeyboard","userFocusableTagNames","unfocusedInputTypes","_createNavigationHelper","direction","numberOfElementsInForm","directions","BACK","checkIndexBounds","indexChange","FORWARD","_findFirstFocusableElement","elementsInForm","elementsIndex","navigationDirections","focusIntercept","findParentTags","removeExtraFocusElements","checkoutForm","onRemoveFocusIntercepts","elements","reverse","matchFocusElement","createFocusChangeHandler","hostedFieldsId","callbacks","currentIndex","targetElement","navHelper","sourceElement","getElementById","forms","onTriggerInputFocus","focus","../shared/browser-detection","../shared/find-parent-tags","../shared/focus-intercept","83","allowedStyles","computedStyles","substring","position","getComputedStyle","84","createInputEventHandler","eventData","merchantPayload","emittedBy","containerElement","classList","externalClasses","FOCUSED","isFocused","VALID","isValid","INVALID","isPotentiallyValid","_state","cards","isVisibleEnough","node","boundingBox","verticalMidpoint","horizontalMidpoint","innerHeight","right","bottom","innerWidth","HostedFields","failureTimeout","clientConfig","hostedFieldsUrl","frameReadyPromiseResolveFunctions","frameReadyPromises","_merchantConfigurationOptions","_clientPromise","composeUrl","_injectedNodes","_destructor","Destructor","_fields","getCardTypes","_bus","Bus","channel","verifyDomain","targetFrames","registerFunctionForTeardown","externalContainer","internalContainer","frame","frameReadyPromise","allowedFields","HOSTED_FIELDS_INVALID_FIELD_KEY","nodeType","HOSTED_FIELDS_INVALID_FIELD_SELECTOR","fieldSelector","fieldContainer","fieldKey","HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME","shadow","isShadowElement","transformToSlot","maxlength","HOSTED_FIELDS_FIELD_PROPERTY_INVALID","minlength","iFramer","defaultIFrameStyle","iframeTitle","addTargetFrame","injectFrame","_setupLabelFocus","frameElement","isEmpty","isIE","getStylesFromClass","events","REMOVE_FOCUS_INTERCEPTS","destroyFocusIntercept","TRIGGER_FOCUS_CHANGE","focusChange","targetType","READY_FOR_CLIENT","reply","CARD_FORM_ENTRY_HAS_BEGUN","BIN_AVAILABLE","INTEGRATION_TIMEOUT_MS","formatMerchantConfigurationForIframes","_cleanUpFocusIntercepts","FRAME_READY","INPUT_EVENT","parent","methodNames","formattedConfig","findRootNode","triggerFocus","labels","rootNode","arr","_getAnyFieldContainer","found","iframeContainer","_attachInvalidFieldContainersToError","invalidFieldKeys","invalidFields","getChallenges","getSupportedCardTypes","TOKENIZATION_REQUEST","addClass","ADD_CLASS","HOSTED_FIELDS_FIELD_NOT_PRESENT","HOSTED_FIELDS_FIELD_INVALID","removeClass","REMOVE_CLASS","attributeErr","SET_ATTRIBUTE","setMonthOptions","errorMessage","merchantOptions","select","SET_MONTH_OPTIONS","setMessage","SET_MESSAGE","REMOVE_ATTRIBUTE","setPlaceholder","placeholder","clear","CLEAR_FIELD","fieldConfig","TRIGGER_INPUT_FOCUS","scrollIntoView","getState","../../lib/analytics","../../lib/constants","../../lib/convert-methods-to-error","../../lib/create-assets-url","../../lib/create-deferred-client","../../lib/destructor","../../lib/errors","../../lib/find-root-node","../../lib/is-verified-domain","../../lib/methods","../../lib/promise","../../lib/shadow","../shared/get-card-types","./attribute-validation-error","./compose-url","./focus-change","./get-styles-from-class","./inject-frame","@braintree/class-list","@braintree/event-emitter","@braintree/iframer","framebus","85","focusHandler","frameType","clearboth","fragment","createDocumentFragment","focusInterceptBefore","generate","focusInterceptAfter","86","HOSTED_FIELDS_TIMEOUT","supportsInputFormatting","./external/hosted-fields","./shared/errors","restricted-input/supports-input-formatting","87","isChromeOS","isChromeIos","isIe10","isFirefox","@braintree/browser-detection/is-android","@braintree/browser-detection/is-chrome","@braintree/browser-detection/is-chrome-os","@braintree/browser-detection/is-edge","@braintree/browser-detection/is-firefox","@braintree/browser-detection/is-ie10","@braintree/browser-detection/is-ios","@braintree/browser-detection/is-ios-webview","88","enumerate","maxExpirationYearAge","externalEvents","FOCUS","BLUR","EMPTY","NOT_EMPTY","VALIDITY_CHANGE","CARD_TYPE_CHANGE","defaultMaxLengths","postalCode","border","float","tokenizationErrorCodes","81724","HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE","81736","HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED","aria-invalid","aria-required","disabled","autocompleteMappings","cardholder-name","credit-card-number","expiration","expiration-month","expiration-year","postal-code","../../lib/enumerate","89","HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR","CUSTOMER","HOSTED_FIELDS_FAILED_TOKENIZATION","HOSTED_FIELDS_FIELDS_EMPTY","HOSTED_FIELDS_FIELDS_INVALID","90","parents","91","handler","focusInterceptStyles","opacity","blur","idString","focusInputs","idComponents","hasBTPrefix","isAllowedType","isValidDirection","./browser-detection","92","creditCardType","card","credit-card-type","93","jsonClone","authAttrs","./create-authorization-data","./json-clone","94","clientInstanceOrPromise","timestamp","timestampInPromise","ANALYTICS_PREFIX","isAsync","ANALYTICS_REQUEST_TIMEOUT_MS","./add-metadata","./promise","95","@braintree/asset-loader/load-script","96","assignPolyfill","destination","assignNormalized","_assign","97","INCOMPATIBLE_VERSIONS","INVALID_USE_OF_INTERNAL_FUNCTION","./braintree-error","98","functions","finish","remaining","./once","99","findRootError","./enumerate","100","CLIENT_API_URLS","production","sandbox","ASSETS_URLS","BUS_CONFIGURATION_REQUEST_EVENT","101","methodName","METHOD_CALLED_AFTER_TEARDOWN","102","originalErr","btErrorObject","103","104","_isTokenizationKey","str","_parseTokenizationKey","tokens","parsedClientToken","parsedTokenizationKey","atob","../lib/vendor/polyfill","105","braintree","CLIENT_SCRIPT_FAILED_TO_LOAD","./assets","_teardownRegistry","_isTearingDown","batchExecuteFunctions","./batch-execute-functions","values","prefix","enumeration","109","110","111","112","_validateFrameConfiguration","REQUIRED_CONFIG_KEYS","FrameService","_serviceId","_options","dispatchFrameUrl","openFrameUrl","state","_setBusEvents","Popup","PopupBridge","Modal","isHTTPS","dispatchFrameReadyHandler","DISPATCH_FRAME_READY","_writeDispatchFrame","frameName","DISPATCH_FRAME_NAME","frameSrc","_dispatchFrame","aria-hidden","DISPATCH_FRAME_CLASS","DISPATCH_FRAME_REPORT","res","_frame","_getFrameForEnvironment","isFrameClosed","_cleanupFrame","FRAME_SERVICE_FRAME_OPEN_FAILED_IE_BUG","FRAME_SERVICE_FRAME_OPEN_FAILED","_pollForPopupClose","redirect","createHandler","beforeClose","beforeFocus","createNoopHandler","isClosed","_popupInterval","FRAME_SERVICE_FRAME_CLOSED","POPUP_POLL_INTERVAL","usePopup","supportsPopups","popupBridgeExists","popupBridge","initOptions","../../braintree-error","../../is-https","../shared/events","./../../assign","./strategies/modal","./strategies/popup","./strategies/popup-bridge","113","frameService","./frame-service","114","_closed","_container","ELEMENT_STYLES","margin","outline","zIndex","background","iframerConfig","isIosWKWebview","_lockScrolling","_el","overflow","-webkit-overflow-scrolling","_unlockScrolling","redirectUrl","_savedBodyProperties","overflowStyle","positionStyle","scrollTo","doc","pageXOffset","scrollLeft","clientLeft","pageYOffset","scrollTop","clientTop","../../../assign","../../shared/browser-detection","115","popupDismissed","../../../braintree-error","../../shared/errors","116","calculatePosition","userDefinedPosition","size","DEFAULT_POPUP_HEIGHT","DEFAULT_POPUP_WIDTH","POPUP_BASE_OPTIONS","../../../shared/constants","./position","117","composeOptions","closed","./compose-options","118","center","outerHeight","screenY","screenTop","outerWidth","screenX","screenLeft","windowMetric","popupMetric","119","@braintree/browser-detection/is-ios-wkwebview","@braintree/browser-detection/supports-popups","120","POPUP_CLOSE_TIMEOUT","121","122","../../enumerate","123","generateTokenizationParameters","basicTokenizationParameters","gateway","braintree:merchantId","braintree:apiVersion","braintree:sdkVersion","braintree:metadata","paypalPaymentMethod","androidPayConfiguration","apiVersionMinor","allowedAuthMethods","tokenizationSpecification","braintree:authorizationFingerprint","merchantInfo","purchase_context","purchase_units","payee","client_id","recurring_payment","braintree:paypalClientId","paymentMethodTokenizationParameters","tokenizationType","./assign","124","win","125","convertDateStringToDate","dateString","splitDate","firstDate","secondDate","126","127","stripSubdomains","domain","mainDomain","parser","legalHosts","paypal.com","braintreepayments.com","braintreegateway.com","braintree-api.com","128","129","130","131","PromisePolyfill","@braintree/extended-promise","132","_notEmpty","_isArray","hasQueryParams","toReturn","keyValue","parts","decodeURIComponent","params","namespace","encodeURIComponent","getShadowHost","styleNode","shadowHost","slotName","slot","slotProvider","sheet","insertRule","./find-root-node","snakeString","135","136","atobPolyfill","base64String","b1","b2","b3","b4","base64Matcher","RegExp","characters","fromCharCode","atobNormalized","_atob","137","PAYPAL_NOT_ENABLED","PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED","PAYPAL_ACCOUNT_TOKENIZATION_FAILED","PAYPAL_FLOW_FAILED","PAYPAL_FLOW_OPTION_REQUIRED","PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED","PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED","PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED","PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED","PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS","PAYPAL_INVALID_PAYMENT_OPTION","138","PayPalCheckout","_initialize","isSupported","./paypal-checkout","139","_merchantAccountId","_autoSetDataUserIdToken","autoSetDataUserIdToken","REQUIRED_PARAMS_FOR_START_VAULT_INITIATED_CHECKOUT","_authorizationInformation","fingerprint","environmentNoNetwork","_setupError","_frameServicePromise","_setupFrameService","frameServicePromise","timeoutRef","_assetsUrl","_isDebug","_loadingFrameUrl","service","_frameService","createPayment","FLOW_ENDPOINTS","flow","_createPaymentResource","paymentResource","agreementSetup","tokenId","intentFromCreatePayment","offerCredit","_formatPaymentResourceData","intent","startVaultInitiatedCheckout","missingRequiredParam","_vaultInitiatedCheckoutInProgress","param","_addModalBackdrop","_waitForVaultInitiatedCheckoutDependencies","frameCommunicationPromise","startVaultInitiatedCheckoutPromise","returnUrl","_constructVaultCheckutUrl","cancelUrl","_createFrameServiceCallback","_removeModalBackdrop","optOutOfModalBackdrop","_modalBackdrop","focusVaultInitiatedCheckoutWindow","closeVaultInitiatedCheckoutWindow","tokenizePayment","paymentToken","payerID","PayerID","paymentID","paymentId","tokenizationError","serviceId","tokenizeOptions","shouldVault","billingToken","ecToken","payerId","shippingOptionsId","vault","_formatTokenizeData","_formatTokenizePayload","creditFinancingOffered","getClientId","clientId","loadPayPalSDK","idPromise","loadPromise","userIdToken","_paypalScript","currency","_attachPreloadPixel","firstElementChild","subdomain","preloadOptions","client-id","user-id-token","offerPaypalCredit","experienceProfile","brandName","localeCode","noShipping","enableShippingAddress","addressOverride","shippingAddressEditable","landingPageType","shippingOptions","requestBillingAgreement","lineItems","vaultInitiatedCheckoutPaymentMethodToken","shippingAddressOverride","billingAgreementDetails","shippingAddress","billingAgreementDescription","_riskCorrelationId","riskCorrelationId","correlationId","isTokenizationKey","isVaultFlow","paypalAccount","billingAgreementToken","unilateral","unvettedMerchant","payerInfo","shippingOptionId","cobrandedCardLabel","../lib/frame-service/external","../lib/querystring","../lib/use-min","../paypal/shared/constants","140","LANDING_FRAME_NAME","checkout","141","BaseFramework","_createOptions","setUpEventListeners","THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED","verifyCard","privateOptions","formattedOptions","_checkForVerifyCardError","_verifyCardInProgress","_formatVerifyCardOptions","_formatLookupData","_performLookup","lookup","threeDSecureVersion","_onLookupComplete","initializeChallengeWithLookupResponse","_resetVerificationState","_checkForFrameworkSpecificVerifyCardErrors","_presentChallenge","prepareLookup","_verifyCardPromisePlus","lookupError","analyticsMessage","THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR","THREEDS_LOOKUP_VALIDATION_ERROR","THREEDS_LOOKUP_ERROR","errorOption","THREEDS_AUTHENTICATION_IN_PROGRESS","THREEDS_MISSING_VERIFY_CARD_OPTION","lookupResponse","_lookupPaymentMethod","_handleLookupResponse","liabilityShifted","liabilityShiftPossible","challengeShouldBePresented","acsUrl","_formatAuthResponse","verificationDetails","_handleV1AuthResponse","authResponse","auth_response","success","cancelVerifyCard","THREEDS_NO_VERIFICATION_PAYLOAD","_setupV1Bus","parentURL","bus","authenticationCompleteBaseUrl","pareq","termUrl","md","parentUrl","AUTHENTICATION_COMPLETE","handleAuthResponse","_setupV1Iframe","showLoader","_v1Bus","_setupV1Elements","_v1Iframe","_teardownV1Elements","_onV1Keyup","../../../lib/analytics","../../../lib/braintree-error","../../../lib/constants","../../../lib/is-verified-domain","../../../lib/promise","../../../lib/use-min","../../shared/constants","../../shared/events","142","Bootstrap3ModalFramework","SongbirdFramework","_createV1IframeModalElement","innerHTML","_createCardinalConfigurationOptions","setupOptions","payment","framework","./songbird","143","CardinalModalFramework","addCloseButton","cardinalSDKConfig","displayExitButton","144","LegacyFramework","InlineIframeFramework","legacy","cardinal-modal","bootstrap3-modal","inline-iframe","./bootstrap3-modal","./cardinal-modal","./inline-iframe","./legacy","145","AUTHENTICATION_IFRAME_AVAILABLE","next","_addV1IframeToPage","_v1Modal","_setupFrameworkSpecificListeners","setCardinalListener","_onInlineSetup","htmlTemplate","hasError","paymentType","mode","THREEDS_INLINE_IFRAME_DETAILS_INCORRECT","../../../lib/enumerate","146","transformV1CustomerBillingAddress","customer","line1","streetAddress","line2","extendedAddress","city","locality","region","countryCodeAlpha2","_createIframe","_handleAuthResponse","removeFrame","addFrame","modifiedOptions","../../../lib/deferred","./base","147","_useV1Fallback","_clientMetadata","requestedThreeDSecureVersion","_getDfReferenceIdPromisePlus","setupSongbird","_cardinalEvents","extractAddressData","line3","SONGBIRD_UI_EVENTS","LOOKUP_COMPLETE","CUSTOMER_CANCELED","getDfReferenceId","dfReferenceId","_triggerCardinalBinProcess","clientMetadata","initiateV1Fallback","errorType","_removeSongbirdListeners","_songbirdPromise","issuerStartTime","Cardinal","trigger","binResults","issuerDeviceDataCollectionTimeElapsed","issuerDeviceDataCollectionResult","Status","transformBillingAddress","additionalInformation","billingPhoneNumber","phoneNumber","billingGivenName","givenName","billingSurname","surname","transformShippingAddress","_createV1IframeModal","closeHandler","THREEDS_CARDINAL_SDK_CANCELED","btn","backdrop","_handleAuthResponseFromV1Fallback","_presentChallengeWithV1Fallback","startTime","_v2SetupFailureReason","_loadCardinalScript","_configureCardinalSdk","setupStartTime","THREEDS_CARDINAL_SDK_SETUP_FAILED","_songbirdSetupTimeoutReference","threeDSConfig","jwt","cardinalAuthenticationJWT","cardinalConfiguration","eventName","_createPaymentsSetupCompleteCallback","configure","setup","cardinalDeviceDataCollectionTimeElapsed","_createPaymentsValidatedCallback","paymentSettings","logging","loggingEnabled","level","displayLoading","scriptSource","CARDINAL_SCRIPT_SOURCE","isProduction","THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED","_performJWTValidation","rawCardinalSDKVerificationData","cancelCode","Payment","ExtendedData","ChallengeCancel","paymentMethodNonce","formattedResponse","THREEDS_JWT_AUTHENTICATION_FAILED","validatedJwt","formattedError","ActionCode","ErrorNumber","THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT","THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT","THREEDS_CARDINAL_SDK_BAD_CONFIG","THREEDS_CARDINAL_SDK_BAD_JWT","THREEDS_CARDINAL_SDK_ERROR","ErrorDescription","onLookupComplete","ignoreOnLookupCompleteRequirement","email","mobilePhoneNumber","requiresUserAuthentication","transactionId","continue","AcsUrl","Payload","OrderDetails","TransactionId","additionalInfo","accountType","challengeRequested","dataOnlyRequested","exemptionRequested","cardAdd","cardAddChallengeRequested","verifyCardError","THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT","../../../lib/assets","../../../lib/convert-to-braintree-error","148","ThreeDSecure","Framework","FRAMEWORKS","_framework","./frameworks","149","getFramework","gwConfig","THREEDS_NOT_ENABLED","THREEDS_CAN_NOT_USE_TOKENIZATION_KEY","THREEDS_HTTPS_REQUIRED","THREEDS_NOT_ENABLED_FOR_V2","THREEDS_UNRECOGNIZED_VERSION","../lib/is-https","./external/three-d-secure","150","151","THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN","152","153","VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN","VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND","VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR","154","VaultManager","./vault-manager","155","formatPaymentMethodPayload","formattedPaymentMethod","hasSubscription","fetchPaymentMethods","defaultFirst","paymentMethodsPayload","paymentMethods","deletePaymentMethod","singleUseTokenId","156","venmo_desktop_1","./venmo-desktop","157","VENMO_PAYMENT_CONTEXT_STATUS_QUERY","LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY","UPDATE_PAYMENT_CONTEXT_QUERY","LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY","CREATE_PAYMENT_CONTEXT_QUERY","LEGACY_CREATE_PAYMENT_CONTEXT_QUERY","158","__assign","framebus_1","iframer_1","uuid_1","events_1","queries_1","VenmoDesktop","isHidden","profileId","paymentMethodUsage","shouldUseLegacyQRCodeMutation","frameUrl","apiRequest","alertBox","VENMO_DESKTOP_IFRAME_READY","VENMO_DESKTOP_REQUEST_NEW_QR_CODE","startPolling","launchDesktopFlow","launchDesktopPromiseRejectFunction","removeListeners","VENMO_DESKTOP_CUSTOMER_CANCELED","customerCancelledHandler","VENMO_DESKTOP_AUTHORIZATION_COMPLETED","completedHandler","VENMO_DESKTOP_UNKNOWN_ERROR","unknownErrorHandler","allowUIToHandleError","reason","updateVenmoDesktopPaymentContext","setAlert","venmoContextId","triggerCompleted","triggerRejected","hideDesktopFlow","VENMO_DESKTOP_CLOSED_FROM_PARENT","displayError","VENMO_DESKTOP_DISPLAY_ERROR","displayQRCode","VENMO_DESKTOP_DISPLAY_QR_CODE","authorize","VENMO_DESKTOP_AUTHORIZE","authorizing","VENMO_DESKTOP_AUTHORIZING","createVenmoDesktopPaymentContext","expiresIn","expiresAt","createdAt","expiredTime","pollForStatusChange","username","userName","paymentMethodId","lookupVenmoDesktopPaymentContext","newStatus","textContent","createPaymentContextFromGraphqlLegacyQRCodeMutation","createVenmoQRCodePaymentContext","venmoQRCodePaymentContext","createPaymentContextFromGraphQL","customerClient","merchantProfileId","createVenmoPaymentContext","venmoPaymentContext","context","additionalOptions","./queries","159","VENMO_INVALID_PROFILE_ID","deepLinkReturnUrl","VENMO_INVALID_DEEP_LINK_RETURN_URL","VENMO_NOT_ENABLED","Venmo","isBrowserSupported","supportsVenmo","./shared/supports-venmo","./venmo","160","doesNotSupportWindowOpenInIos","isIosSafari","isFacebookOwnedBrowserOnAndroid","@braintree/browser-detection/is-ios-safari","@braintree/browser-detection/is-samsung","161","DOCUMENT_VISIBILITY_CHANGE_EVENT_DELAY","DEFAULT_PROCESS_RESULTS_DELAY","VENMO_APP_OR_MOBILE_AUTH_URL","VENMO_MOBILE_APP_AUTH_ONLY_URL","VENMO_WEB_LOGIN_URL","162","VENMO_TOKENIZATION_REQUEST_ACTIVE","VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE","VENMO_APP_FAILED","VENMO_APP_CANCELED","VENMO_CANCELED","VENMO_CUSTOMER_CANCELED","VENMO_NETWORK_ERROR","VENMO_DESKTOP_CANCELED","VENMO_TOKENIZATION_CANCELED_BY_MERCHANT","VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED","VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR","VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED","VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED","VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT","VENMO_MOBILE_POLLING_TOKENIZATION_FAILED","VENMO_TOKENIZATION_FAILED","163","VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT","164","getVenmoUrl","useAllowDesktopWebLogin","venmoConstants","mobileWebFallBack","165","merchantAllowsReturningToNewBrowserTab","merchantAllowsWebviews","merchantAllowsDesktopBrowsers","isMobileDevice","isAndroidChrome","isMobileDeviceThatSupportsReturnToSameTab","isKnownUnsupportedMobileBrowser","allowDesktop","allowNewBrowserTab","allowWebviews","166","openPopup","checkForStatusChange","cancelTokenization","venmoUrl","popupLocation","centeredPopupDimensions","assetsBaseUrl","POPUP_HEIGHT","POPUP_WIDTH","frameServiceInstance","ELEMENT_IDS","continueButton","cancelButton","closeBackdrop","getElementStyles","backdropStyles","backdropHidden","backdropContainerStyles","backdropContainer","cancelButtonStyles","continueButtonStyles","messageStyles","instructionStyles","instructions","buildAndStyleElements","backdropStylesElement","backdropDiv","backDropContentContainer","venmoLogoDiv","venmoMessageDiv","instructionsDiv","alreadyRenderedBackdrop","venmoLogo","VENMO_LOGO_SVG","CONTINUE_OR_CANCEL_INSTRUCTIONS","runWebLogin","../../lib/frame-service/external","167","_allowDesktopWebLogin","allowDesktopWebLogin","_mobileWebFallBack","_allowNewBrowserTab","_allowWebviews","_allowDesktop","_useRedirectForIOS","useRedirectForIOS","_profileId","_displayName","_deepLinkReturnUrl","_ignoreHistoryChanges","ignoreHistoryChanges","_paymentMethodUsage","_shouldUseLegacyFlow","_requireManualReturn","requireManualReturn","_useDesktopQRFlow","_isDesktop","_useAllowDesktopWebLogin","_cannotHaveReturnUrls","inIframe","_allowAndroidRecreation","allowAndroidRecreation","_maxRetryCount","_shouldCreateVenmoPaymentContext","hasTokenizationResult","createVenmoDesktop","venmoDesktopInstance","_venmoDesktopInstance","_mobilePollingInterval","DEFAULT_MOBILE_POLLING_INTERVAL","_mobilePollingExpiresThreshold","DEFAULT_MOBILE_EXPIRING_THRESHOLD","analyticsCategory","_mobilePollingContextEnvironment","_createVenmoPaymentContext","getFragmentParameters","hash","keyValuesArray","parsedParams","decodedKey","resourceId","formatUserName","formatTokenizePayload","formattedPayload","paymentContextId","documentVisibilityChangeEventName","visibilityChange","hidden","msHidden","webkitHidden","isIosWebviewInDeepLinkReturnUrlFlow","graphqlQueries","cancelIfTokenizationInProgress","refreshIn","_refreshPaymentContextTimeout","_tokenizationInProgress","_venmoPaymentContextStatus","_venmoPaymentContextId","appSwitch","_shouldUseRedirectStrategy","currentUrl","venmoConfiguration","braintreeData","resource_id","_shouldIncludeReturnUrls","braintree_merchant_id","braintree_access_token","braintree_environment","braintree_sdk_data","_hasTokenizationResult","venmoSuccess","venmoError","venmoCancel","tokenizationPromise","_tokenizeForDesktopQRFlow","_tokenizeWebLoginWithRedirect","_tokenizeForMobileWithManualReturn","_tokenizeForMobileWithHashChangeListeners","_removeVisibilityEventListener","_tokenizePromise","_cancelMobilePaymentContext","_cancelVenmoDesktopContext","_checkPaymentContextStatusAndProcessResult","_queryPaymentContextStatus","retryCount","networkError","resultStatus","_pollForStatusChange","_mobilePollingContextExpiresIn","completeFlow","processHashChangeFlowResults","_previousHash","resultProcessingInProgress","visibilityChangeListenerTimeout","_onHashChangeListener","newURL","_visibilityChangeListener","processResultsDelay","errorCode","_clearFragmentParameters","history","replaceState","pushState","../lib/in-iframe","../lib/snake-case-to-camel-case","./external/","./external/queries","./shared/browser-detection","./shared/constants","./shared/get-venmo-url","./shared/web-login-backdrop","168","findType","customCards","getAllCardTypes","testOrder","clone_1","getCardPosition","ignoreErrorForNotExisting","cardNumber","is_valid_input_type_1","isValidInputType","cardConfiguration","add_matching_cards_to_results_1","addMatchingCardsToResults","bestMatch","find_best_match_1","findBestMatch","cardNames","DINERS_CLUB","UNIONPAY","MAESTRO","MIR","ORIGINAL_TEST_ORDER","getTypeInfo","removeCard","addCard","existingCardPosition","updateCard","updates","originalObject","clonedCard","changeOrder","currentPosition","resetModifications","./lib/add-matching-cards-to-results","./lib/card-types","./lib/clone","./lib/find-best-match","./lib/is-valid-input-type","169","patternLength","patterns","pattern","matches_1","matches","clonedCardConfiguration","isArray","matchStrength","./clone","./matches","170","visa","niceType","gaps","lengths","mastercard","american-express","diners-club","discover","jcb","unionpay","maestro","elo","mir","hiper","hipercard","171","172","hasEnoughResultsToDetermineBestMatch","numberOfResultsWithMaxStrengthProperty","Number","173","174","matchesRange","maxLengthToCheck","integerRepresentationOfCardNumber","matchesPattern","175","Framebus","is_not_string_1","subscription_args_invalid_1","broadcast_1","package_payload_1","send_message_1","constants_1","DefaultPromise","origin","limitBroadcastToFramesArray","isDestroyed","hasAdditionalChecksForOnListeners","include","childWindow","childWindows","namespaceEvent","isntString","packagePayload","targetFramesAsWindows","sendMessage","broadcast","emitAsPromise","originalHandler","subscriptionArgsInvalid","passesVerifyDomainCheck","hasMatchingTargetFrame","subscribers","listener","subscriberList","checkOrigin","HTMLIFrameElement","contentWindow","matchingFrame","postMessageOrigin","merchantHost","./lib/broadcast","./lib/constants","./lib/is-not-string","./lib/package-payload","./lib/send-message","./lib/subscription-args-invalid","176","attach_1","attach","./framebus","./lib/attach","177","isAttached","message_1","onmessage","detach","./message","178","broadcastToChildWindows","./broadcast","179","frameToBroadcastTo","postMessage","has_opener_1","hasOpener","opener","frames","./has-opener","180","181","dispatch","182","183","184","unpack_payload_1","unpackPayload","dispatch_1","broadcast_to_child_windows_1","./broadcast-to-child-windows","./dispatch","./is-not-string","./unpack-payload","185","packaged","subscribe_replier_1","subscribeReplier","./subscribe-replier","186","187","replier","replyOriginHandler","../framebus","188","189","replyOrigin_1","replySource_1","replyEvent_1","replyData","replyPayload","./package-payload","190","191","setImmediate","finallyConstructor","TypeError","thisArg","_handled","_value","_deferreds","doResolve","handle","_immediateFn","onFulfilled","onRejected","ret","newValue","finale","_unhandledRejectionFn","Handler","ex","setTimeoutFunc","prom","warn","timers","192","isKitKatWebview","UA","KITKAT_WEBVIEW_REGEX","isChromeOs","isIE9","193","device_1","./lib/device","194","./dist/supports-input-formatting","195","clearImmediate","Timeout","clearFn","_clearFn","immediateIds","nextImmediateId","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","process/browser.js","196","paymentOptionIDs","paypalCredit","paymentMethodTypes","analyticsKinds","CreditCard","PayPalAccount","ApplePayCard","VenmoAccount","AndroidPayCard","paymentMethodCardTypes","Visa","MasterCard","American Express","Diners Club","Discover","UnionPay","Maestro","Elo","Hiper","Hipercard","configurationCardTypes","master-card","dependencySetupStates","DONE","FAILED","INITIALIZING","NOT_ENABLED","NO_PAYMENT_METHOD_ERROR","DEVELOPER_MISCONFIGURATION_MESSAGE","CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT","CHECKOUT_JS_SOURCE","GOOGLE_PAYMENT_SOURCE","PAYPAL_CHECKOUT_SCRIPT_ID","GOOGLE_PAYMENT_SCRIPT_ID","DATA_COLLECTOR_SCRIPT_ID","STYLESHEET_ID","197","DropinModel","componentID","merchantConfiguration","isGuestCheckout","dependencyStates","ASYNC_DEPENDENCIES","dependencyKey","_shouldIncludeDependency","failedDependencies","_setupComplete","isInShadowDom","getPaymentOption","paymentOption","isPaymentOptionEnabled","SheetView","paymentSheetViews","isEnabled","ID","DropinError","canShowVaultedPaymentMethodType","paymentMethodType","VAULTED_PAYMENT_METHOD_TYPES_THAT_SHOULD_BE_HIDDEN","vaultManager","paymentOptionsViewID","DEFAULT_PAYMENT_OPTION_PRIORITY","NON_PAYMENT_OPTION_DEPENDENCIES","dep","dependencyReadyInterval","vaultManagerInstance","_vaultManager","_getSupportedPaymentOptions","paymentOptions","supportedPaymentOptions","getVaultedPaymentMethods","_paymentMethods","_paymentMethodIsRequestable","confirmDropinReady","isPaymentMethodRequestable","addPaymentMethod","changeActivePaymentMethod","removePaymentMethod","paymentMethodLocation","refreshPaymentMethods","_activePaymentMethod","changeActiveView","paymentViewID","previousViewId","_activePaymentViewId","newViewId","removeActivePaymentMethod","setPaymentMethodRequestable","isRequestable","selectPaymentOption","enableEditMode","_isInEditMode","disableEditMode","isInEditMode","confirmPaymentMethodDeletion","_paymentMethodWaitingToBeDeleted","paymentOptionPriority","_shouldEmitRequestableEvent","requestableStateHasNotChanged","selectedPaymentMethod","nonceHasNotChanged","_paymentMethodRequestableNonce","shouldEmitEvent","paymentMethodRequestableResponse","paymentMethodIsSelected","getPaymentMethods","getActivePaymentMethod","hasPaymentMethods","getInitialViewId","getActivePaymentViewId","reportAppSwitchPayload","appSwitchPayload","reportAppSwitchError","sheetId","appSwitchError","hasAtLeastOneAvailablePaymentOption","asyncDependencyReady","asyncDependencyFailed","cancelInitialization","reportError","clearError","preventUserAction","allowUserAction","deleteVaultedPaymentMethod","cancelDeleteVaultedPaymentMethod","showDefaultPaymentMethodFirst","_getSupportedPaymentMethods","vaulted","supportedPaymentMethods","promises","pos","./lib/analytics","./lib/dropin-error","./lib/is-guest-checkout","./views/payment-options-view","./views/payment-sheet-views","braintree-web/vault-manager","198","Dropin","_componentID","_dropinWrapper","_merchantConfiguration","HAS_RAW_PAYMENT_DATA","rawPaymentData","deviceData","MainView","paymentMethodsViewID","translations","isUtf8","sanitizeHtml","DataCollector","PASS_THROUGH_EVENTS","UPDATABLE_CONFIGURATION_OPTIONS","UPDATABLE_CONFIGURATION_OPTIONS_THAT_REQUIRE_UNVAULTED_PAYMENT_METHODS_TO_BE_REMOVED","localizedStrings","localizedHTML","_strings","en","endingIn","stringKey","stringValue","_model","_injectStylesheet","_disableErroredPaymentMethods","_handleAppSwitch","_setUpDependenciesAndViews","updateConfiguration","_threeDSecure","_mainView","getView","_removeUnvaultedPaymentMethods","_navigateToInitialView","getAvailablePaymentOptions","clearSelectedPaymentMethod","showLoadingIndicator","hideLoadingIndicator","_setUpDataCollector","dataCollector","_dataCollector","braintreeWebError","_setUpThreeDSecure","model","strings","primaryView","setPrimaryView","_supportsPaymentOption","paymentMethodOptionsElements","getOptionsElements","div","clickHandler","errorMessageDiv","_sendVaultedPaymentMethodAppearAnalyticsEvents","typesThatSentAnEvent","requestPaymentMethod","_shouldPerformThreeDSecureVerification","newPayload","getDeviceData","_removeStylesheet","loadStylesheetOptions","teardownError","_removeDropinWrapper","./dropin-model","./lib/data-collector","./lib/is-utf-8","./lib/sanitize-html","./lib/three-d-secure","./translations","./views/main-view","./views/payment-methods-view","@braintree/asset-loader","199","setAnalyticsIntegration","dropinVersion","createFromScriptTag","./dropin","./lib/create-from-script-tag","braintree-web/client","200","addSelectionEventHandler","keyCode","201","_millisToSeconds","millis","analyticsRequest","braintreeClientVersion","../constants","./polyfill","202","203","204","injectHiddenInput","addCompositeKeyValuePairToObject","decomposedKeys","topLevelKey","kebabCaseToCamelCase","deserialize","createFunction","scriptTag","createOptions","findParentForm","preventDefault","WHITELISTED_DATA_ATTRIBUTES","compositeKey","requestPaymentError","submit","./analytics","./dropin-error","./find-parent-form","./kebab-case-to-camel-case","205","braintreeWebVersion","_instance","206","isBraintreeWebError","_braintreeWebError","207","nodeName","208","209","210","characterSet","211","kebab","shift","part","212","213","214","string","215","cssText","216","PASSTHROUGH_EVENTS","merchantProvidedData","verifyOptions","acsWindowSize","braintree-web/three-d-secure","217","onTransitionEnd","transitionEventListener","218","219","payingWith","chooseAnotherWayToPay","chooseAWayToPay","otherWaysToPay","edit","doneEditing","editPaymentMethods","CreditCardDeleteConfirmationMessage","PayPalAccountDeleteConfirmationMessage","VenmoAccountDeleteConfirmationMessage","genericDeleteConfirmationMessage","deleteCancelButton","deleteConfirmationButton","fieldEmptyForCvv","fieldEmptyForExpirationDate","fieldEmptyForCardholderName","fieldTooLongForCardholderName","fieldEmptyForNumber","fieldEmptyForPostalCode","fieldInvalidForCardholderName","fieldInvalidForCvv","fieldInvalidForExpirationDate","fieldInvalidForNumber","fieldInvalidForPostalCode","genericError","hostedFieldsTokenizationFailOnDuplicateError","hostedFieldsFailedTokenizationError","hostedFieldsFieldsInvalidError","hostedFieldsTokenizationNetworkErrorError","hostedFieldsTokenizationCvvVerificationFailedError","paypalButtonMustBeUsed","paypalAccountTokenizationFailedError","paypalFlowFailedError","paypalTokenizationRequestActiveError","venmoCanceledError","vaultManagerPaymentMethodDeletionError","venmoAppFailedError","unsupportedCardTypeError","applePayTokenizationError","applePayActiveCardError","cardholderNameLabel","cardNumberLabel","cvvLabel","cvvThreeDigitLabelSubheading","cvvFourDigitLabelSubheading","cardholderNamePlaceholder","expirationDateLabel","expirationDateLabelSubheading","expirationDatePlaceholder","postalCodeLabel","saveCardLabel","payWithCard","Apple Pay","Card","PayPal","PayPal Credit","Google Pay","220","221","222","223","224","225","226","227","228","229","230","231","232","233","234","235","236","237","fiveCharacterLocales","ar_EG","cs_CZ","da_DK","de_DE","el_GR","en_AU","en_GB","en_IN","en_US","es_ES","es_XC","fi_FI","fr_CA","fr_FR","fr_XC","he_IL","hu_HU","id_ID","it_IT","ja_JP","ko_KR","nl_NL","no_NO","pl_PL","pt_BR","pt_PT","ru_RU","sk_SK","sv_SE","th_TH","zh_CN","zh_HK","zh_TW","zh_XC","twoCharacterLocaleAliases","ar","cs","da","de","es","fi","fr","it","hu","ja","ko","nl","no","pl","pt","ru","sk","sv","th","zh","./ar_EG","./cs_CZ","./da_DK","./de_DE","./el_GR","./en_AU","./en_GB","./en_IN","./en_US","./es_ES","./es_XC","./fi_FI","./fr_CA","./fr_FR","./fr_XC","./he_IL","./hu_HU","./id_ID","./it_IT","./ja_JP","./ko_KR","./nl_NL","./no_NO","./pl_PL","./pt_BR","./pt_PT","./ru_RU","./sk_SK","./sv_SE","./th_TH","./zh_CN","./zh_HK","./zh_TW","./zh_XC","238","239","240","241","242","243","244","245","246","247","248","249","250","251","252","253","254","BaseView","getPaymentMethod","activeMethodView","onSelection","../lib/dropin-error","255","DeleteConfirmationView","_yesButton","_noButton","_messageBox","applyPaymentMethod","identifier","secondaryIdentifier","messageText","../lib/add-selection-event-handler","./base-view","256","dependenciesInitializing","prefixShowClass","sheetViews","PaymentMethodsView","PaymentOptionsView","supportsFlexbox","paymentOptionsView","_hasMultiplePaymentOptions","_views","sheetContainer","sheetErrorText","disableWrapper","lowerContainer","loadingContainer","dropinContainer","showSheetError","hideSheetError","paymentSheetViewIDs","ids","sheetViewKey","PaymentSheetView","paymentSheetView","mainView","addView","paymentMethodsViews","deleteConfirmationView","toggleAdditionalOptions","_onChangeActiveView","activePaymentView","openConfirmPaymentMethodDeletionDialog","cancelVaultedPaymentMethodDeletion","startVaultedPaymentMethodDeletion","finishVaultedPaymentMethodDeletion","_sendToDefaultView","secondaryViewId","showToggle","hideToggle","sheetViewID","isPaymentSheetView","genericErrorMessage","viewNames","teardownPromises","preselectVaultedPaymentMethod","../lib/supports-flexbox","../lib/wait","./delete-confirmation-view","./payment-methods-view","./payment-options-view","./payment-sheet-views","257","PaymentMethodView","endingInText","html","_selectDelete","_choosePaymentMethod","checkMark","setActive","isActive","258","PAYMENT_METHOD_TYPE_TO_TRANSLATION_STRING","views","_headingLabel","_editButton","_addPaymentMethod","_changeActivePaymentMethodView","_removePaymentMethod","_getPaymentMethodString","paymentMethodTypeString","paymentMethodView","previousActiveMethodView","./payment-method-view","259","paymentOptionID","_addPaymentOption","paymentSource","_generateOptionLabel","paymentSourceString","260","ApplePayView","btApplePay","applePayConfiguration","applePaySessionVersion","buttonDiv","onclick","_showPaymentSheet","buttonStyle","session","_sessionInProgress","ApplePaySession","onvalidatemerchant","validationData","completeMerchantValidation","validationErr","abort","onpaymentauthorized","completePayment","STATUS_SUCCESS","tokenizeErr","STATUS_FAILURE","oncancel","begin","applePayBrowserSupported","applePayEnabled","supportsVersion","canMakePayments","../../lib/dropin-error","../../lib/is-https","../base-view","braintree-web/apple-pay","261","BasePayPalView","paypalScriptLoadInProgressPromise","btPaypal","READ_ONLY_CONFIGURATION_OPTIONS","setupComplete","asyncDependencyTimeoutHandler","isCredit","_isPayPalCredit","paypalType","paypalConfiguration","dropinWrapperId","paypalInstance","checkoutJSConfiguration","buttonSelector","commit","onAuthorize","shouldNotVault","vaultPayPal","tokenizePayload","onError","funding","disallowed","FUNDING","CREDIT","Button","render","merchantPayPalConfig","viewID","log-level","logLevel","../../lib/browser-detection","../../translations","braintree-web/paypal-checkout","262","CardView","isCardViewElement","activeId","activeElement","camelCaseToKebabCase","capitalize","normalizeStyles","transformedKeyName","addBullets","bulletCharacter","generateCardNumberPlaceholder","four","hostedFields","transitionHelper","cvvFieldGroup","postalCodeFieldGroup","hfOptions","cardholderNameGroup","cardIcons","hasCardholderName","cardholderNameRequired","required","_generateHostedFieldsOptions","_hideUnsupportedCardIcons","hasCVV","saveCardInput","cardNumberIcon","cardNumberIconSvg","cvvIcon","cvvIconSvg","cvvLabelDescriptor","allowVaultCardOverride","vaultCard","hostedFieldsInstance","_onBlurEvent","_onCardTypeChangeEvent","_onFocusEvent","_onNotEmptyEvent","_onValidityChangeEvent","_sendRequestableEvent","_isTokenizing","_validateForm","hasCVVChallenge","hasPostalCodeChallenge","_getFieldContainer","font-size","font-family","color",":focus","::-webkit-input-placeholder",":-moz-placeholder","::-moz-placeholder",":-ms-input-placeholder ","input::-ms-clear","_hasCustomCVVPlaceholder","showFieldErrors","showFieldError","transitionCallback","_shouldVault","fieldsToTokenize","clearFieldsAfterTokenization","fieldGroup","hideFieldError","_shouldApplyFieldEmptyError","_isCardTypeSupported","cardNumberHrefLink","cvvHrefLink","cvvDescriptor","cvvPlaceholder","numberFieldGroup","paymentMethodCardType","cardIcon","configurationCardType","disabledByMerchant","fieldId","../../lib/is-utf-8","../../lib/transition-helper","braintree-web/hosted-fields","263","GooglePayView","createPaymentsClient","google","PaymentsClient","btGooglePay","buttonOptions","googlePayConfiguration","buttonType","button","onClick","googlePayInstance","paymentsClient","createButton","loadPaymentData","reportedError","statusCode","isReadyToPay","braintree-web/google-payment","264","./apple-pay-view","./card-view","./google-pay-view","./paypal-credit-view","./paypal-view","./venmo-view","265","PayPalCreditView","./base-paypal-view","266","PayPalView","267","VenmoView","btVenmo","venmoInstance","_isIgnorableError","braintree-web/venmo","1492","1493","1494","1495","1496","1497","1498","__WEBPACK_IMPORTED_MODULE_0__app_component__","__WEBPACK_IMPORTED_MODULE_2__app_model__","1499","AppComponent","__WEBPACK_IMPORTED_MODULE_0__service_view_service__","__WEBPACK_IMPORTED_MODULE_1__angular_core__","onResize","calculateSize","initViewService","init","ViewService","__WEBPACK_IMPORTED_MODULE_2_rxjs_Subject__","injector","heartbeatMode","bodySpinnerSource","resizeSource","onPostMessage","bradmaxPath","navigateByUrl","routerSubscription","unsubscribe","bodySpinnerStream$","asObservable","routerSub","navigationInterceptor","checkIfAppInIframe","customColorPalettePattern","injectCustomColorPalette","scriptElement","spinnerActive","errorInfo","formatPageTitle","getViewport","vp","checkIfHeartBeatMode","checkIfBetaMode","betaPattern","setHeartBeatMode","_mode","1500","__WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__","__WEBPACK_IMPORTED_MODULE_2__service_view_service__","AppSpinner","deg","timer","bodySpinnerSubscription","spinnerData","check","subscription","interval","rotation","rotate","[class.active]","1501","./account/details/en.json","./account/details/pl.json","./account/en.json","./account/invoices/en.json","./account/invoices/pl.json","./account/payments/en.json","./account/payments/pl.json","./account/pl.json","./account/subscriptions/en.json","./account/subscriptions/pl.json","./analytics/QOS/en.json","./analytics/QOS/pl.json","./analytics/albums/en.json","./analytics/albums/pl.json","./analytics/audience/en.json","./analytics/audience/pl.json","./analytics/content/en.json","./analytics/content/pl.json","./analytics/dashboard/en.json","./analytics/dashboard/pl.json","./analytics/geo/en.json","./analytics/geo/pl.json","./analytics/heartbeat/en.json","./analytics/heartbeat/pl.json","./analytics/info/en.json","./analytics/info/pl.json","./analytics/realtime/en.json","./analytics/realtime/pl.json","./analytics/sampled-traffic/en.json","./analytics/sampled-traffic/pl.json","./analytics/st-raport/en.json","./analytics/st-raport/pl.json","./analytics/tag-service/en.json","./analytics/tag-service/pl.json","./analytics/technology/en.json","./analytics/technology/pl.json","./analytics/top-content/en.json","./analytics/top-content/pl.json","./components/en.json","./components/pl.json","./contact/en.json","./contact/pl.json","./content/en.json","./content/pl.json","./login/en.json","./login/pl.json","./password-change/en.json","./password-change/pl.json","./player/en.json","./player/pl.json","./products/en.json","./products/pl.json","./products/plan-carrousel/en.json","./products/plan-carrousel/pl.json","./subscription/en.json","./subscription/pl.json","1502","ACCOUNT_DETAILS","TITLE","DATA_ERROR","FORM","SUBTITLE_1","SUBTITLE_2","LABEL","FIRST_NAME","LAST_NAME","EMAIL","AGREE_FOR_NEWSLETTER","COMPANY","COUNTRY","STATE","CITY","ADDRESS","POSTAL_CODE","PHONE_NUMBER","TAX_NO","PLACEHOLDER","VALIDATION_ERROR","REQUIRED","INVALID_FIELD","SUBMIT_SUCCESS","BUTTON","SAVE","EDIT","CANCEL","UPDATE","CONTINUE","CLOSE","CHANGE_PASSWORD","MESSAGE","ACCOUNT_READY","PAY_VALID","PAY_INVALID","1503","1504","ACCOUNT","SUBTITLE","DETAILS","PAYMENTS","SUBSCRIPTIONS","INVOICES","1505","ACCOUNT_INVOICES","EDIT_SUCCESS","EDIT_ERROR","MORE_DETAILS","AGREEMENT","TEXT","NOT_AVAILABLE","DESCRIPTION","BASE_PRICE","TOTAL","EXPORT_PDF","TAX","PHONE","CREATED","PLAN_NAME","STATUS","SELECTED_INVOICE","INVOICE_NOT_READY","AGREE","NOT_AGREE","1506","1507","ACC_PAY","MAKE_DEFAULT","CONFIRM_DELETE","DELETE_SUCCESS","DELETE_ERROR","ACTIVE","DEFAULT","EXPIRES","UPDATED","CVV","EXP_DATE","NAME","DELETE","1508","1509","1510","ACCOUNT_SUBS","ERROR_UPDATE_PM","SUCCESS_UPDATE_PM","INACTIVE","CREATED_AT","UPDATED_AT","NEXT_BILLING","PER_MONTH","INCLUDED_VIEWS","INCLUDED_VIEWS_USAGE","USAGE_PRICE","VIEWS","CURRENT_TOTAL","CHANGE_PM","CANCEL_PLAN","PM_MODAL","SUBMIT_BUTTON","1511","1512","QOS","AUDIENCE","SELECTED_CONTENR","WORD","POSITION","STREAMS","STREAMS_APROX_NOTE","WATCHING_USERS_PER_SEC","WATCHING_USERS_PER_MIN","NO_DATA","1513","1514","ANALYTICS_ALBUMS","TOP_LIST","TOP_LIST_HEADER","FILTERS","FILTERS_TITLE","FILTERS_ARTIST","FILTERS_TAGS","TOP_LIST_COLUMN","ITEMS_IN_COLLECTION","SUMMARY","COMPLETE_VIEWS","USERS","ALBUM_DETAIL_HEADER","ALBUM_ITEM_STATS_HEADER","ITEM_STATS_COLUMN","DURATION","STATS_GROUP","WATCHING_TIME","AVG_WATCHING_TIME","ALBUM_DETAILS_BUTTON","DETAILS_VIEW","CHART_TITLE","BOX_VIEWS","BOX_COMPLETE_VIEWS","BOX_USERS","BOX_WATCHING_TIME","META_HEADER","META_REL_ID","META_ADDED_AT","ITEM_STATS_HEADER","ITEM_STATS_COL","ITEM_VIEWS","1515","1516","ANALYTICS_AUDIENCE","HEADER","VIEWS_PER_USER","IN_SELECTED_PERIOD","FOR_CURR_ACCOUNTING_MONTH","FOR_PREV_ACCOUNTING_MONTH","VIEWS_OPEN_PERIOD","VIEWS_PREVIOUS_PERIOD","SUBHEADER","HOUR","DAY","MONTH","WEEK","YEAR","TODAY","YESTERDAY","LAST","1517","1518","ANALYTICS_CONTENT","SEARCH","ANALYTICS_CONTENT_DETAILS","STATS_HISTORY","METADATA","ENGAGEMENT_RATE","RELATED_ID","TAGS","TOTAL_VIEWS","TOTAL_USERS","ENG_RATE_LIVE_STREAM_CLOCK_TYPE_WALL","ENG_RATE_LIVE_STREAM_CLOCK_TYPE_CONTENT","ENG_RATE_SUMMARY_TOTAL_WATCHING_TIME","ENG_RATE_SUMMARY_AVG_WATCHING_TIME","1519","1520","ANALYTICS_DASHBOARD","DESKTOP_VS_MOBILE","USERS_IN_MONTH","VIEWS_IN_MONTH","LAST_30D","CHART_LAST_48H","CHART_LAST_48H_SUB","CHART_LAST_30D","CHART_LAST_30D_SUB","TOP_MEDIA_30D","TOP_MEDIA_24H","TOP_MEDIA_24H_SUB","HEATMAP","HEATMAP_SUB","TOP_MEDIA_TABLE","1521","1522","ANALYTICS_GEO","MAP","REGION","ANALYTICS_GEO_COUNTRY","TYPE","REGIONS","CITIES","1523","1524","HEARTBEAT","MOBILE_VIEWS","DESKTOP_VIEWS","TABLET_VIEWS","MOBILE","DESKTOP","TABLET","CURRENT","AVG","NETWORK_STATUS","ERROR_RATE","BROWSERS_ERROR_RATE","OS_ERROR_RATE","MATERIAL","SERVICES","FAILRUES","STARTUP","REBUFFER","QUALITY","BROWSER","OS","1525","1526","ANALYTICS_INFO","CLIENT_TOKEN","DESC","DOC_LINK_TEXT","1527","1528","ANALYTICS_REALTIME","TOP_CONTENT","LAST_HOUR","LAST_MINUTE","1529","1530","ANALYTICS_SAMPLED_TRAFFIC","VIEW","CRITERIA","DATE_RANGE","SELECT","DISABLED","SELECTED_CRITERIA","HISTORY","EXPORT_TO_CSV","GRANULARITY","GEOLOCATION","TOTAL_PERCENT","BACK_TO_WORLD","BACK_TO_COUNTRY","LIST","COUNTRIES","PROVINCES","NODATA","TAG","VALUE","LOADING","--HEADER","--INFO","NOTE","--PLACEHOLDER","--SUBPAGES","SUBPAGE","--SUBTITLES","VIEWS_AND_USERS_HISTORY","MAP_VIEWS","DETAILS_GEOLOCATION","VIEWS_PER_GENDER","VIEWS_PER_AGE_SEGMENT","--WORD","REPORT_TYPE","GRANULARITY_SELECTION","DATE_RANGE_SELECTION","GEO_SELECTION","COUNTRY_SELECTION","REGION_SELECTION","CITY_SELECTION","REGION_DISABLED","CITY_DISABLED","TAG_SELECTION","GENDER_SELECTION","DEMOGRAPHY_SELECTION","AGE_RANGE_SELECTION","MALE","FEMALE","OTHER","UNDEFINED","GENERATE","NO_DATA_FOR_TAGS_LIST","--REPORT_TYPE","REPORT","GENDER","AGE","--GEO_GRANULARITY","1531","1532","ANALYTICS_ST_RAPORT","INFO","SUBPAGES","SUBTITLES","GEO_GRANULARITY","1533","1534","ANALYTICS_TAG_SERVICE","SELECT_EXISTING_TIP","INITIAL_PLACEHOLDER","1535","1536","ANALYTICS_TECHNOLOGY","DEVICES","BROWSERS","LABEL_TOTAL_VIEWS","TABLE","1537","1538","ANALYTICS_TOPCONTENT","ALL_TIME","24H","7D","30D","365D","1539","1540","DATERANGEPICKER","RANGE","LAST_7DAYS","LAST_30DAYS","LAST_MONTH","CURRENT_MONTH","CURRENT_WEEK","LAST_WEEK","APPLY","CUSTOM_RANGE","WEEKS","1541","1542","CONTACT","ERROR","THANKS","P1","P2","SEND","AGAIN","1543","1544","MENU","USER","LOGOUT","MAIN","PRODUCTS","ANALYTICS","DASHBOARD","REALTIME","CONTENT","SELECTED_CONTENT","GEO","GEO_COUNTRY","TECHNOLOGY","ALBUMS","PLAYER_CONFIG","UPLOAD","MEDIA","SETTINGS","CHANGELOG","HELP","DOCS","TUTORIAL","PLAYERS_PLUGINS_DOCS","TERMS_AND_CONDITIONS","EU_FUNDS","MODAL","ASK","GDPR_INFO","1545","1546","LOGIN","COMPANY_NAME","NOT_A_MEMBER","FORGOT_PASSWORD","REMEMBER_ME","ON","OFF","SIGN_ME_IN","PASSWORD","COPYRIGHT","1547","1548","PASSWORD_CHANGE","SUCCESS","FIELD_REQUIRED","MIN_LEN_8_CHARACTERS","PASSWORDS_DIFFER","FIELD","OLD_PASSWORD","NEW_PASSWORD","NEW_PASSWORD_REPEAT","1549","1550","PLAYER","TOTAL_COUNT","SELECTED_COUNT","SEE_DOCS","ADD","CLONE","GET_ZIP","SEE_VER","GO_EMBEDER","COLUMN","INPUT","DUPLICATE","TOO_BIG_LOGO","PUBLISH","COLOR_RESET","BASE","COLOR","SAVE_CHANGES","DONT_SAVE","LINK","EMBEDER","PANEL_TITLE","PLAYER_INFO","PREVIEW","PLAYER_NAME","COPY_TO_CLIPBOARD","TOGGLE_OPTIONAL","DOWNLOAD_ZIP","WIDTH","HEIGHT","MEDIAURL","MEDIAURL2","SPLASHIMAGEURL","ADSVMAPURL","ADSPREROLLVASTURL","VERSIONS","CHANGES_SAVED_NOTIFICATION","DOC","ZIP","EMBED","1551","CODE","1552","CREATE_NEW","ACCOUNT_INVALID","SUBSCRIPTION_REUSE","DEFAULT_ERROR","1553","1554","PLAN_CARROUSEL","RECOMMENDED","VIEWS_INC","ESTIMATED","CURRENT_PLAN","EXTRA","STATS","ADS","DRM","BASIC","FULL","VIDEO","BUY","USED","1555","1556","SUBSCRIPTION","NAV_PLAYER","NEXT","PREVIOUS","SUBMIT","ACCEPT","NOT_ACCEPT","STEPS","STEP_1","SECTION_1","SECTION_2","STEP_2","BODY","1557","Injectable","CookieService","write","days","setTime","expires","toUTCString","cookie","nameEQ","ca","AlertModalComponent","__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__","__WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__","sanitizer","UrlService","apiUrl","bradmaxAdminConfig","file","staticFilesBaseUrl","getSignUpPage","defaultSignInUrl","signInUrl","getPasswordResetPage","defaultUrl","passwordResetUrl","termsPageUrl","docsPageUrl","tutorialPageUrl","InputModalComponent","inputDefaultValue","input_1","formatNgClass","onKeyupEnter","buttons","ModalType","PasswordChangeModalComponent","__WEBPACK_IMPORTED_MODULE_1__abstract_modal_component__","PromptModalComponent","GdprInfoModalComponent","common_es5","router_es5","angular_l10n_es5","modal_service","sidebar_item_component_SidebarItemComponent","SidebarItemComponent","onCollapse","checkRouteTree","isParent","checkIfIsParent","routeTree","createUrlTree","formatRoute","getCssClass","isHiddenWhenNotActive","isAvailableInDifferentPlan","isSubMenuActive","collapsed","hasVisibleChild","isCurrentUrlMatchingWithSegmentPatterns","showInfoAboutAvaliabilityInOtherPlan","w","gtag","LeadBooster","activate","segments","parseUrl","routeSeg","urlSeg","[class.collapse-open]","[class.nohovericon]","[class.checked]","[class.disabled]","outputs","Default","url_service","view_service","sidebar_service","sidebar_component___decorate","sidebar_component___metadata","sidebar_component_SidebarComponent","SidebarComponent","isAppInIframe","footMenu","icon","openIcon","externalUrl","documentationPage","tutorialPage","playersPluginsDocumentationPage","termsPage","openStream$","updateStream$","closeStream$","renderAt","si","[class.with-header]","sidebar_module_SidebarModule","sidebar_module___decorate","SidebarModule","HeaderService","__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__","menuSubject","menuStream$","menu","lastMenuData","codemirror_module_1","initBuyCookieService","BuyCookieService","__WEBPACK_IMPORTED_MODULE_0__angular_router__","__WEBPACK_IMPORTED_MODULE_2__cookie_service__","wasRedirected","routerInterceptor","AppConfig","AppConfigData","languages","language","country","AuthService","__WEBPACK_IMPORTED_MODULE_1__cookie_service__","__WEBPACK_IMPORTED_MODULE_2__localstorage_service__","localStorage","isLoggedIn","LOCAL_STORAGE_TOKEN_KEY_OLD","LOCAL_STORAGE_TOKEN_KEY","defaultUrlCache","sanitizeUrl","redirectUrlCache","password","ModalService","__WEBPACK_IMPORTED_MODULE_2__alert_modal_component__","__WEBPACK_IMPORTED_MODULE_3__input_modal_component__","__WEBPACK_IMPORTED_MODULE_4__modal_model__","__WEBPACK_IMPORTED_MODULE_5__password_change_modal_component__","__WEBPACK_IMPORTED_MODULE_6__prompt_modal_component__","__WEBPACK_IMPORTED_MODULE_7__gdpr_info_modal_component__","__WEBPACK_IMPORTED_MODULE_8__terms_modal_component__","closedSource","createSource","closeSource","createStream$","closedStream$","alert","closeOnBackdropClick","gdprInfo","header","inputLabel","passwordChange","inputData","validateLocaleNumber","digits","MIN_VALUE","MAX_VALUE","defaultLocale","NUMBER_REGEXP","InjectorRef","LocaleService","decimalCode","DecimalCode","formControl","getDefaultLocale","getRegExp","parsedValue","minValue","maxValue","TranslationService","Localization","LocalizationModule","__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__","__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_toPromise__","__WEBPACK_IMPORTED_MODULE_4_rxjs_add_observable_merge__","__WEBPACK_IMPORTED_MODULE_5__angular_http__","__WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_map__","__WEBPACK_IMPORTED_MODULE_7__angular_common__","__WEBPACK_IMPORTED_MODULE_8__angular_forms__","__generator","verb","step","op","ops","trys","g","sent","throw","return","Symbol","iterator","LocaleConfig","languageCodes","storageIsDisabled","sessionStorage","LocaleConfigAPI","addLanguage","languageCode","textDirection","addLanguages","languageCodes_1","disableStorage","setCookieExpiration","cookiesExpirationDays","useLocalStorage","useSessionStorage","defineLanguage","defineDefaultLocale","scriptCode","numberingSystem","calendar","defineCurrency","__awaiter$1","P","generator","fulfilled","rejected","LocaleStorage","BrowserStorage","hasCookie","cookieEnabled","hasStorage","Storage","getLocalStorage","getSessionStorage","getCookie","setLocalStorage","setSessionStorage","setCookie","getItem","exec","setItem","DefaultLocale","parseValue","build","search","codes","__awaiter","storage","languageCodeChanged","defaultLocaleChanged","currencyCodeChanged","loadTranslation","addConfiguration","initStorage","initDefaultLocale","initLanguage","initCurrency","getAvailableLanguages","getLanguageDirection","matchLanguage","getCurrentCountry","getCurrentScript","getCurrentLocale","getCurrentNumberingSystem","getCurrentCalendar","getCurrentCurrency","setCurrentLanguage","sendLanguageEvents","sendTranslationEvents","setDefaultLocale","sendDefaultLocaleEvents","setCurrentCurrency","sendCurrencyEvents","browserLanguage","getBrowserLanguage","matchedLanguages","TranslationConfig","translationData","localeAsLanguage","keySeparator","i18nPlural","IntlAPI","hasDateTimeFormat","hasIntl","Intl","hasNumberFormat","hasCollator","TranslationConfigAPI","addTranslation","addProvider","dataFormat","addWebAPIProvider","addCustomProvider","useLocaleAsLanguage","setMissingValue","missingValue","setMissingKey","missingKey","setComposedKeySeparator","disableI18nPlural","TranslationProvider","getTranslation","HttpTranslationProvider","http","json","TranslationHandler","lang","DefaultTranslationHandler","handleMissingValue","handleArgs","TEMPLATE_REGEXP","parsedKey","replacer","LoadingMode","Direct","Async","ServiceState","isReady","isLoading","isWaiting","__awaiter$2","translationProvider","translationHandler","translationChanged","translationError","serviceState","loadingMode","getLanguage","keys_1","translateKey","translateAsync","observer","complete","translateI18nPlural","getValue","sequences","keyText","keyNumber","translateNumber","NumberFormat","toPromise","releaseTranslation","sequencesOfTranslationData","provider","merge","addData","sendEvents","Translation","paramSubscriptions","cancelParamSubscriptions","NumberCode","numberCodes","num","toUnicode","toChar","toHex","charCodeAt","hex","decimalCodes","minusSign","decimalSeparator","thousandSeparator","localeValue","unicodeChars","characters_1","char","charCode","NaN","minInt","minFraction","maxFraction","NUMBER_FORMAT_REGEXP","zero","nine","LocaleValidation","parseNumber","Collator","compare","key1","key2","extension","usage","sensitivity","value1","value2","addExtension","sort","list","keyName","sortAsync","keyNames","collator","searchAsync","valueLength","sLength","TranslatePipe","transform","pure","LocaleDatePipe","LocaleDecimalPipe","LocalePercentPipe","LocaleCurrencyPipe","symbolDisplay","BFS","getTargetNode","walk","iNode","depth","nodeToDepthIncrease","MAX_DEPTH","isTargetNode","isValidNode","nodeValue","attr","SELECTOR","BaseDirective","subscriptions","TEXT_MUTATION_CONFIG","subtree","characterData","renderNode","getKey","getAttributes","addTextListener","valueAttribute","innerHTMLProperty","replaceText","replaceAttributes","removeTextListener","cancelSubscriptions","getAttributesData","getAttributesKeys","keys_2","getValues","setText","setValue","MutationObserver","textObserver","mutations","observe","disconnect","getText","targetAttr","TranslateDirective","l10nTranslate","LocaleDateDirective","defaultPattern","localeDatePipe","l10nDate","localeDate","LocaleDecimalDirective","localeDecimalPipe","l10nDecimal","localeDecimal","LocalePercentDirective","localePercentPipe","l10nPercent","localePercent","LocaleCurrencyDirective","localeCurrencyPipe","symbol","l10nCurrency","localeCurrency","LocaleNumberValidatorDirective","validator","provide","useExisting","multi","l10nValidateNumber","TranslationModule","forRoot","ngModule","useClass","localeStorage","forChild","LocaleValidationModule","343","definitions","timings","sequence","steps","animations_es5_state","animations_es5_keyframes","transition","stateChangeExpr","expr","animation","scheduleMicroTask","optimizeGroupPlayer","players","NoopAnimationPlayer","AnimationGroupPlayer","normalizeKeyframes","driver","normalizer","keyframes","preStyles","postStyles","normalizedKeyframes","previousOffset","previousKeyframe","kf","isSameOffset","normalizedKeyframe","prop","normalizedProp","normalizedValue","normalizePropertyName","ɵPRE_STYLE","AUTO_STYLE","normalizeStyleValue","listenOnPlayer","player","copyAnimationEvent","totalTime","onDone","onDestroy","phaseName","makeAnimationEvent","triggerName","fromState","toState","getOrSetAsInMap","defaultValue","Map","parseTimelineCommand","command","separatorPos","resolveTimingValue","_convertTimeValueToMS","unit","ONE_SECOND","resolveTiming","allowNegativeValues","parseTimeExpression","exp","regex","delayMatch","easingVal","containsErrors","copyObj","normalizedStyles","copyStyles","readPrototype","setStyles","camelProp","dashCaseToCamelCase","eraseStyles","normalizeAnimationEntry","validateStyleParams","extractStyleParams","varName","PARAM_REGEX","lastIndex","interpolateParams","localVal","iteratorToArray","DASH_CASE_REGEXP","allowPreviousPlayerStylesMerge","visitDslNode","visitor","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","parseTransitionExpr","transitionValue","expressions","parseInnerTransitionStr","eventStr","parseAnimationAlias","makeLambdaFromStates","isFullAnyStateExpr","ANY_STATE","alias","lhs","rhs","LHS_MATCH_BOOLEAN","TRUE_BOOLEAN_VALUES","has","FALSE_BOOLEAN_VALUES","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","buildAnimationAst","browser_es5_AnimationAstBuilderVisitor","normalizeSelector","hasAmpersand","SELF_TOKEN","SELF_TOKEN_REGEX","ENTER_TOKEN_REGEX","ENTER_SELECTOR","LEAVE_TOKEN_REGEX","LEAVE_SELECTOR","NG_TRIGGER_SELECTOR","NG_ANIMATING_SELECTOR","normalizeParams","consumeOffset","styleTuple","isObject","constructTimingAst","makeTimingAst","strValue","ast","dynamic","normalizeAnimationOptions","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","buildAnimationTimelines","rootElement","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","roundOffset","decimalPoints","mult","flattenStyles","allStyles","allProperties","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","timelines","queriedElements","oneOrMoreTransitionsMatch","matchFns","currentState","nextState","buildTrigger","AnimationTrigger","createFallbackTransition","states","AnimationTransitionFactory","matchers","queryCount","depCount","balanceProperties","deleteOrUnsetInMap","currentValues","delete","normalizeTriggerValue","isElementNode","isTriggerEventValid","cloakElement","cloakAndComputeStyles","elementPropsMap","defaultStyle","cloakVals","valuesMap","failedElements","props","computeStyle","REMOVAL_FLAG","NULL_REMOVED_QUERIED_STATE","createIsRootFilterFn","nodes","isRoot","nodeSet","Set","knownRootContainer","containsClass","contains","CLASSES_CACHE_KEY","getBodyNode","removeNodesAfterAnimationDone","engine","processLeaveNode","flattenGroupPlayers","finalPlayers","_flattenGroupPlayersRecur","objEquals","k1","k2","replacePostStylesAsPre","allPreStyleElements","allPostStyleElements","postEntry","preEntry","_computeStyle","supportsWebAnimations","Element","issueAnimationCommand","resolveElementFromTarget","parseTriggerCallbackName","dotIndex","instantiateSupportedAnimationDriver","WebAnimationsDriver","browser_es5_NoopAnimationDriver","instantiateDefaultStyleNormalizer","browser_es5_WebAnimationsStyleNormalizer","instantiateRendererFactory","AnimationRendererFactory","tslib_es6___extends","__read","__spread","onEscape","hide","arrowKeysHandler","matchingFn","targetValue","displayBy","ngx_chips_isObject","listenerType","action","condition","isGeoCountryItem","isGeoRegionItem","mergeDeep","merger_isObject","sourceValue","coerceNumberProperty","fallbackValue","_isNumberValue","coerceBooleanProperty","initLocalization","localizationConfig","load","forms_es5","http_es5","platform_browser_es5","tslib_es6","AnimationBuilder","AnimationFactory","_onDoneFns","_onStartFns","_onDestroyFns","_started","_destroyed","_finished","parentPlayer","_onFinish","hasStarted","play","triggerMicrotask","_onStart","pause","restart","reset","setPosition","getPosition","_players","doneCount","destroyCount","startCount","_onDestroy","timeAtPosition","beforeDestroy","_contains","elm1","elm2","_matches","_query","proto","fn_1","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","elm","matchesElement","containsElement","invokeQuery","NoopAnimationDriver","previousPlayers","AnimationDriver","NOOP","SUBSTITUTION_EXPR_START","AnimationAstBuilderVisitor","AnimationAstBuilderContext","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","currentTime","transitions","def","stateDef_1","styleAst","astParams","containsDynamicStyles","missingSubs_1","params_1","stylesObj_1","sub","missingSubsArr","furthestTime","innerAst","timingAst","currentAnimateTimings","styleMetadata","styleMetadata_1","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","collectedEasing","styleData","styleMap","endTime","tuple","collectedEntry","updateCollectedStyle","totalKeyframesWithOffsets","offsets","offsetsOutOfOrder","keyframesOutOfRange","style$$1","offsetVal","generatedOffset","limit","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","includeSelf","optional","originalSelector","currentTransition","ElementInstructionMap","_map","consume","append","existingInstructions","AnimationTimelineContext","currentTimeline","timeline","containsAnimation","tl","allowOnlyTimelineStyles","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","delayNextStep","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","getCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","currentQueryIndex","parentContext","maxTime","currentStaggerTime","startingTime","_driver","initialTimeline","browser_es5_TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate_1","_copyOptions","oldParams_1","params_2","newTime","fork","updatedTimings","builder","browser_es5_SubTimelineBuilder","stretchStartingKeyframe","TimelineBuilder","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_localTimelineStyles","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","getFinalKeyframe","details0","details1","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","SubTimelineBuilder","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","oldOffset","timeAtKeyframe","AnimationStyleNormalizer","Animation","_animationAst","buildTimelines","destinationStyles","dest","NoopAnimationStyleNormalizer","userProvidedProperty","normalizedProperty","WebAnimationsStyleNormalizer","strVal","DIMENSIONAL_PROP_MAP","valAndSuffixMatch","EMPTY_OBJECT","_triggerName","_stateStyles","buildStyles","stateName","backupStateStyler","stateStyler","backupStyles","currentOptions","nextOptions","transitionAnimationParams","currentAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","queriedElementsList","AnimationStateStyles","defaultParams","combinedParams","styleObj_1","transitionFactories","fallbackTransition","matchTransition","matchStyles","EMPTY_INSTRUCTION_MAP","browser_es5_TimelineAnimationEngine","TimelineAnimationEngine","_normalizer","_animations","_playersById","register","_buildPlayer","autoStylesMap","inst","_getPlayer","baseEvent","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","namespaceId","setForRemoval","hasAnimation","removedBeforeQueried","StateValue","isObj","absorbOptions","oldParams_2","DEFAULT_STATE_VALUE","DELETED_STATE_VALUE","AnimationTransitionNamespace","hostElement","_engine","_triggers","_queue","_elementListeners","_hostClassName","phase","triggersWithStates","statesByElement","NG_TRIGGER_CLASSNAME","afterFlush","_getTrigger","defaultToFallback","browser_es5_TransitionAnimationPlayer","playersOnElement","playersByElement","queued","isFallbackTransition","totalQueuedPlayers","index_1","fromStyles_1","toStyles_1","deregister","stateMap","entry","clearElementCache","elementPlayers","_destroyInnerNodes","innerNs","namespacesByHostElement","removeNode","doNotRecurse","childElementCount","triggerStates","players_1","markElementAsRemoved","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","triggers","visitedTriggers_1","elementStates","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","destroyed","markedForDestroy","d0","d1","elementContainsData","containsData","browser_es5_TransitionAnimationEngine","TransitionAnimationEngine","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","collectedEnterElements","collectedLeaveElements","onRemovalComplete","ns","createNamespace","_balanceNamespaceList","collectEnterElement","nextNamespace","registerTrigger","_fetchNamespace","afterFlushAnimationsDone","markElementAsDisabled","_buildInstruction","subTimelines","whenRenderingDone","flush","cleanupFns","_flushAnimations","quietFns_1","skippedPlayers","skippedPlayersMap","queuedInstructions","disabledElementsSet","nodesThatAreDisabled","bodyNode","allEnterNodes","allLeaveNodes","leaveNodesWithoutAnimations","allPlayers","erroneousTransitions","stringMap","setVal_1","setVal","errors_1","enterNodesWithoutAnimations","allPreviousPlayersMap","sortedParentElements","unshift","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","postStylesMap","preStylesMap","post","pre","rootPlayers","subPlayers","innerPlayer","_buildAnimation","setRealPlayer","parentHasPriority","parentPlayers","playersForElement","queriedPlayerResults","queriedInnerElements","queriedPlayers","activePlayers","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation_1","targetNameSpaceId","targetTriggerName","timelineInstruction","realPlayer","getRealPlayer","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","wrappedPlayer","TransitionAnimationPlayer","_player","_containsRealPlayer","_queuedCallbacks","_queueEvent","AnimationEngine","_triggerCache","_transitionEngine","_timelineEngine","cacheKey","onInsert","onRemove","disableAnimations","disable","eventPhase","WebAnimationsPlayer","_initialized","previousStyles","currentSnapshot","_delay","_preparePlayerBeforeStart","previousStyleProps","startingKeyframe_1","missingStyleProps_1","self_1","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","cancel","fill","playerOptions","previousWebAnimationPlayers","animations_es5_BrowserAnimationBuilder","BrowserAnimationBuilder","rootRenderer","_nextAnimationId","typeData","encapsulation","_renderer","createRenderer","animations_es5_BrowserAnimationFactory","BrowserAnimationFactory","RendererAnimationPlayer","_command","_listen","delegate","_zone","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","BaseAnimationRenderer","animations_es5_AnimationRenderer","_scheduleCountTask","Zone","current","scheduleListenerCallback","destroyNode","createComment","createText","newChild","refChild","oldChild","selectRootElement","selectorOrNode","nextSibling","flags","removeStyle","AnimationRenderer","factory","countId","animations_es5_InjectableAnimationEngine","InjectableAnimationEngine","SHARED_ANIMATION_PROVIDERS","useFactory","deps","BROWSER_ANIMATIONS_PROVIDERS","BROWSER_NOOP_ANIMATIONS_PROVIDERS","BrowserAnimationsModule","NoopAnimationsModule","DropdownListDirection","dist","angular2_flash_messages","to_top_component_ViewToTop","ViewToTop","data-click","VIEW_COMPONENTS","auth_service","auth_guard_service___decorate","auth_guard_service_AuthGuard","AuthGuard","auth","canActivate","logged","shared_module___decorate","SHARED_MODULES","shared_module_SharedModule","SharedModule","payments_service","subscription_service","product_service","tab_service","account_view___decorate","account_view___metadata","account_view_AccountView","AccountView","configureTabs","onNavigatedTo$","tabId","selectTab","tabs","tab","currentTabIndex","subscriptionTab","detailsTab","receiptsTab","paymentsTab","onTabClick","tabIndex","account_subscriptions_view","Observable","account_service","exception_service","api_service","braintree_service___extends","braintree_service___decorate","braintree_service___metadata","braintree_service_BraintreeService","BraintreeService","exception","getClientToken","user_service","account_subscriptions_resolver___decorate","account_subscriptions_resolver___metadata","account_subscriptions_resolver_AccountSubscriptionsResolver","AccountSubscriptionsResolver","bt","flatMap","accountResponse","btClientToken","of","forkJoin","getProductsForAccount","paymentPicker_modal___decorate","paymentPicker_modal___metadata","STYLES","paymentPicker_modal_PaymentMethodsPickerModal","PaymentMethodsPickerModal","onPaymentNonceReceived","onCloseModal","braintreeDropInReady","(click)","account_invoices_view","account_invoices_resolver___decorate","account_invoices_resolver___metadata","account_invoices_resolver_AccountInvoicesResolver","AccountInvoicesResolver","getPaymentTransactions","Subject","country_service___extends","country_service___decorate","country_service___metadata","country_service_CountryService","CountryService","getCountries","resolveSource","countries","RegexExpressions","emailRegex","validation_service_ValidationService","ValidationService","isValidEmail","account_details_view___extends","account_details_view___decorate","account_details_view___metadata","account_details_view_AccountDetailsView","AccountDetailsView","formBuilder","userLoading","companyDetailsLoading","showUserForm","showCompanyForm","canValidate","emailErr","validateEmail","userFormEditMode","detailsFormEditMode","setAccountUserForm","setAccountDetailsForm","clearUserRemoteErrors","clearDetailsRemoteErrors","accountUserForm","accountDetailsForm","updateAccountDetails","onUserEditModeChange","onDetailsEditModeChange","onUserFormSubmit","updatedUserDetails","onAccountDetailsFormSubmit","userRequest","first_name","controls","last_name","has_gdpr_info_shown","hasGdprInfoShown","has_agree_for_newsletter","updateUser","mapUserRemoteErrors","accountRequest","address","tax_no","phone_number","postal_code","updateAccount","mapDetailsRemoteErrors","firstName","lastName","compose","hasAgreeForNewsletter","statusChanges","companyName","globalErrors","userFormRemoteErrors","detailsFormRemoteErrors","onPasswordChangeClick","_o","_p","account_details_resolver___decorate","account_details_resolver___metadata","account_details_resolver_AccountDetailsResolver","AccountDetailsResolver","input_component___decorate","input_component___metadata","input_component_ExtendedInput","ExtendedInput","labelText","genericErrorMessages","unknown","errorMessageToDisplay","remoteError","inputErrors","customError","account_payments_view___extends","account_payments_view___decorate","account_payments_view___metadata","account_payments_view_AccountPaymentsView","AccountPaymentsView","braintreeOnTeardown","onCardEditSubmit","paymentOnEdit","loading","account_payments_resolver___decorate","account_payments_resolver___metadata","account_payments_resolver_AccountPaymentsResolver","AccountPaymentsResolver","account_payments_guard___decorate","account_payments_guard___metadata","account_payments_guard_AccountPaymentsGuard","AccountPaymentsGuard","canDeactivate","account_module___decorate","AccountRoutes","redirectTo","pathMatch","LOCAL_PROVIDERS","COMP","account_module_AccountModule","AccountModule","entryComponents","bootstrap","moment","moment_default","ChartConfig","ChartConfigData","datasetColors","chart_model","chart_scale_helper___decorate","chart_scale_helper_ChartScaleHelper","ChartScaleHelper","getScaleStep","scaleUnit","dateDiff","diff","getScaleStepAlt","dataLength","getTimeScaleUnit","granularity","startDay","endDay","getDateFormatForScaleUnit","getPointThickness","pointsAmount","getLineThickness","formatTooltipDateLabel","labelToFormat","toDate","isAfter","formatScaleDateLabel","dateFormat","removeFirstAndLastDate","scale","ticks","makeTickLabelSamplingCallback","singleElementWidth","samplesNum","chart_component___decorate","chart_component___metadata","__param","paramIndex","decorator","chart_component_ChartComponent","ChartComponent","timeScaleHelper","pointRadius","chartHeight","fontColor","gridColor","onChartClicked","onChartHovered","isAfterViewInit","createChart","chartData","destroyChart","chartInstance","setChartSettingsAndOptions","conf","chartType","chartOptions","chartLabels","datasets","Chart","canvasElement","getContext","onChartTypeChange","setLineChartOptions","setLineChartSettings","setLineTimeChartOptions","setLineTimeChartSettings","setBarChartOptions","setBarChartSettings","setHorizontalBarChartOptions","setPieChartOptions","setPieChartSettings","getColor","dataAmount","getDataLength","colors","chartItem","pointBorderColor","parseRgbaStr","backgroundColor","rgba","borderColor","pointBackgroundColor","pointHoverBackgroundColor","pointHoverBorderColor","cubicInterpolationMode","lineTension","pointHoverRadius","pointBorderWidth","borderWidth","hoverBackgroundColor","hoverBorderColor","optionsSettings","maintainAspectRatio","hover","scales","xAxes","suggestedMin","gridLines","yAxes","tooltips","displayColors","bodySpacing","datasetIndex","yLabel","toFixed","legend","scaleStep","xLabel","displayFormats","minute","hour","day","month","unitStepSize","attachWeekends","stacked","chartStacked","autoSkip","dataset","meta","currentValue","colour","alpha","weekends","isBefore","annotations","formatWeekendAnnotation","toISOString","annotation","drawTime","xMin","xMax","xScaleID","Moment","useValue","chart_realtime_component___decorate","chart_realtime_component___metadata","chart_realtime_component___param","chart_realtime_component_ChartRealtimeComponent","ChartRealtimeComponent","chartScaleHelper","chart_granularity_component___decorate","chart_granularity_component___metadata","chart_granularity_component_ChartGranularityComponent","ChartGranularityComponent","btnSize","onTypeChange","hourOption","dayOption","weekOption","monthOption","yearOption","hourEnable","dayEnable","weekEnable","monthEnable","yearEnable","setAvailableTypes","setStates","onGranularityTypeChange","activeType","hideAllOptions","every","ele","showAllOptions","enableAllOptions","disabledTypes","disableAllOptions","chart_categories_component___decorate","chart_categories_component___metadata","chart_categories_component___param","chart_categories_component_ChartCategoriesComponent","ChartCategoriesComponent","chart_picker_component___decorate","chart_picker_component___metadata","chart_picker_component_ChartPickerComponent","ChartPickerComponent","chartTypeChanged","lineOption","lineTimeOption","barOption","pieOption","doughnutOption","setActiveChartTypes","chartTypes","daterangepicker_component","chart_module___decorate","chart_module_COMP","chart_module_ChartModule","ChartModule","check_buttons_component___decorate","check_buttons_component___metadata","check_buttons_component_CheckButtonsComponent","CheckButtonsComponent","valueChange","iconMapKeys","iconMap","idx","floatOnly_directive___decorate","floatOnly_directive___metadata","floatOnly_directive_InputFloatOnlyDirective","InputFloatOnlyDirective","floatonly","onlyDecimalNumberKey","which","(keypress)","integerOnly_directive___decorate","integerOnly_directive___metadata","integerOnly_directive_InputIntegerOnlyDirective","InputIntegerOnlyDirective","integeronly","onlyNumberKey","SearchComponentMode","dom_util","dropdown_list_pipe___decorate","dropdown_list_pipe_DropdownListPipe","DropdownListPipe","ShadowAnimation","boxShadow","dropdown_component___decorate","dropdown_component___metadata","dropdown_component_DropdownComponent","DropdownComponent","dirValue","down","onSelect","selectedItem","documentClick","Node","isDescendant","stopPropagation","documentScroll","getIcoCssClasses","onToggle","listItem","[class.up]","[class.down]","(document:click)","(document:scroll)","animations","viewProviders","dropdown_list_component___decorate","dropdown_list_component___metadata","dropdown_list_component_DropdownListComponent","DropdownListComponent","pipe","selectedListIdx","up","initTimer","iconClasses","documentKeyDown","arrowUp","arrowDown","enter","(document:keydown)","image_grid_component___decorate","image_grid_component_ImageGridComponent","ImageGridComponent","getImageClass","editable_input_component___decorate","editable_input_component___metadata","editable_input_component_EditableInputComponent","EditableInputComponent","floatOnly","integerOnly","isOver","activeChange","blurChange","keyupChange","enterUpChange","escapeUpChange","minSize","keyup","keyupEnter","keyupEscape","over","out","[class.on]","[class.off]","[class.over]","data_list_component___decorate","data_list_component___metadata","data_list_component_DataListComponent","DataListComponent","columns","addValue","formatResult","MathUtil","truncUp","trunc","v2","pagination_service___decorate","pagination_service___metadata","pagination_service_PaginationService","PaginationService","showSubject","emitSubject","resetSubject","showStream$","emitStream$","resetStream$","actual","pagination_buttons_component___decorate","pagination_buttons_component___metadata","pagination_buttons_component_PaginationButtonsComponent","PaginationButtonsComponent","dropdownMode","showPrevBtn","showNextBtn","showPrevPortionBtn","showNextPortionBtn","collectPageData","checkButtons","take","checkSize","ngAfterViewChecked","portion","btns","hostW","total_1","dropdownOn","beforeDropdownWidth","dropdownOff","dropdownModel","dropdownSelectPage","page","prevPage","newActive","prevPortion","nextPage","nextPortion","pagesData","changed","pb","ppb","npb","nb","[class.dropdownMode]","pagination_bar_component___decorate","pagination_bar_component___metadata","pagination_bar_component_PaginationBarComponent","PaginationBarComponent","formatActivePage","pagination_size_component___decorate","pagination_size_component___metadata","pagination_size_component_PaginationSizeComponent","PaginationSizeComponent","onChange","rangeslider_component___decorate","rangeslider_component___metadata","rangeslider_component_RangesliderComponent","RangesliderComponent","showLabels","onBlur","onMouseUp","ngChange","ngBlur","ngMouseUp","search_component___decorate","search_component___metadata","SearchComponentState","ng2_material_dropdown__a","search_component_SearchComponent","SearchComponent","showClear","tabindex","autofocus","modelChange","onChoose","onEnter","modes","preloader","notfound","dropdownFocus","selectedResult","NORMAL_STATE","isFirstChange","firstModel","CHOOSE_STATE","searchKill","blurKill","scrollTickId","onSearchNotFound","onSearchFound","onSearchSuccess","onSearchFail","ngStateClass","ngIcon","isOpen","checkUp","LIVE_SEARCH","searchStart","clearTimer","ngEnter","ngChoose","ngArrowUp","ngArrowDown","searchTimer","bcr","vph","[class.dropup]","[class.dropdown]","[class.open]","singlechoice_input_component___decorate","singlechoice_input_component___metadata","singlechoice_input_component_SinglechoiceInputComponent","SinglechoiceInputComponent","isItemChecked","switch_component___decorate","switch_component___metadata","switch_component_SwitchComponent","SwitchComponent","checkedChange","[class.large]","[class.medium]","[class.small]","[class.xsmall]","upload_file_service___decorate","upload_file_service___metadata","upload_file_service_UploadFileService","UploadFileService","loadedFile","reader","readSubject","addFile","readStream$","readFile","FileReader","readAsDataURL","upload_file_component___decorate","upload_file_component___metadata","upload_file_component_UploadFileComponent","UploadFileComponent","fileChange","isDragOver","onDragOver","onDragLeave","onDrop","dataTransfer","files","onBrowse","browse","onFileBrowse","previewData","fileData","preview","fileMessage","[class.hover]","(dragover)","(dragleave)","(drop)","upload_image_service___decorate","upload_image_service___metadata","upload_image_service_UploadImageService","UploadImageService","addBase64","base64","resampleSubject","resampleStream$","resample","imageData","percentValue","minWidth","minHeight","image","canvas","percent","newW","newH","drawImage","toDataURL","upload_image_component___decorate","upload_image_component___metadata","upload_image_component_UploadImageComponent","UploadImageComponent","imageChange","resampleSizeValue","maxSizeCallback","originalImageData","originalImageWidth","onResampleImage","onResamplePreview","imageFileSize","getImageFileSize","removeOnImageLoadListener","naturalWidth","sizeExceed","maxWidth","maxHeight","naturalHeight","maxFileSize","dataStr","form_module___decorate","form_module_FormComponentsModule","FormComponentsModule","base_service___extends","base_service___decorate","base_service___metadata","base_service_BaseService","BaseService","urlService","initDateRange","alignPeriodRange","granularityAny","prepareTsperiodParams","iter","nextDate","unix","tsPeriods","convertTimestampRangesIntoTimestampPeriods","tsPeriods_1","tsperiod","first","last","currPeriod","safeEncodeUriComponentForDjango","analytics_service___extends","analytics_service___decorate","analytics_service_AnalyticsService","AnalyticsService","getDashboardData","today","getAudienceHistoryForRange","getAudienceSummaryForRange","granularityForHistory","isEngagementRateEnabled","getTechnologyStatsForRange","getTechnologyStatsFor24h","getUsersAndViews","usersData","usersLabels","viewsData","viewsLabels","data_1","rec","users","from","usersChartData","viewsChartData","getGeoCountriesStats","getGeoRegionsStats","getGeoCitiesStats","getRealtimeTopViewedMediaMetadataList","pagingOptions","getRealtimeAccountViewersNum","getRealtimeMediaViewersNum","mediaMaterialId","getGoogleMapsApiKey","client_token","export_service___decorate","export_service___metadata","export_service_ExportService","ExportService","removeOldExportLinksFromDocument","linksToRemove","exportFileFromJs","exportFileName","strData","exportLink","usersAndViewsVSTime_service___decorate","usersAndViewsVSTime_service___metadata","usersAndViewsVSTime_service_UsersAndViewsVsTimeService","UsersAndViewsVsTimeService","activeChartType","granularityTypes","activeGranularity","chartDataChange","loadData","getChartDataChanges","onDateRangeChange","onGranularityChange","exportDataToCsv","linesNum","line","audience_view_component___extends","audience_view_component___decorate","audience_view_component___metadata","audience_view_component_AnalyticsAudienceView","AnalyticsAudienceView","chartService","analyticsService","exportService","getDateRangeSelection","monthlyStats","summary","viewsPerUser","avgWatchingTime","loadMonthlyStats","loadLastAccountingPeriodsStats","loadSummaryStats","onDateRangeChanged","setDateRangeSelection","calcViewsUsagePercent","chartDataExportCsv","monthlyStatsExportCsv","watching_time","currMonthStartDate","tableStartDate","newMonthlyStats","product","usage_stats","currentAccountingBaseViewsSize","currentAccountingPeriodViews","currentAccountingPeriodFromDate","currentAccountingPeriodToDate","lastAccountingBaseViewsSize","lastAccountingPeriodViews","lastAccountingPeriodFromDate","lastAccountingPeriodToDate","audience_module___decorate","audience_module_routes","audience_module_AnalyticsAudienceModule","AnalyticsAudienceModule","operators","ng2_material_dropdown_Ng2DropdownButton","Ng2DropdownButton","onMenuToggled","showCaret","toggleMenu","KEYS","BACKSPACE","PREV","ENTER","ESCAPE","onSwitchNext","state$$1","onSwitchPrev","onBackspace","onItemClicked","ACTIONS","ng2_material_dropdown_Ng2DropdownState","Ng2DropdownState","onItemSelected","onItemDestroyed","_selectedItem","unselect","ng2_material_dropdown_DropdownStateService","DropdownStateService","menuState","isVisible","dropdownState","ng2_material_dropdown_Ng2MenuItem","Ng2MenuItem","preventClose","$event","invokeElementMethod","ng2_material_dropdown_Ng2DropdownMenu","Ng2DropdownMenu","focusFirstElement","appendToBody","arrowHandler","handleKeypress","dc","wd","updatePosition","updateOnChange","toArray","getMenuElement","calcPositionOffset","supportPageOffset","isCSS1Compat","compatMode","applyOffset","marginFromBottom","marginFromRight","windowScrollHeight","scrollY","windowScrollWidth","scrollX","marginRight","setElementStyle","elem","ng2_material_dropdown_Ng2Dropdown","Ng2Dropdown","dynamicUpdate","onShow","onHide","newSelectedItem","scrollListener","ng2_material_dropdown_Ng2DropdownModule","Ng2DropdownModule","ngx_chips_escape","HighlightPipe","KEYDOWN","KEYUP","ACTIONS_KEYS","SWITCH_PREV","SWITCH_NEXT","TAB","KEY_PRESS_ACTIONS","DragProvider","dragging","dropping","setDraggedItem","setData","getDraggedItem","getData","setSender","sender","setReceiver","receiver","onTagDropped","indexDragged","indexDropped","onDragEnd","onRemoveRequested","onAddingRequested","setState","tagInput","separatorKeys","separatorKeyCodes","maxItems","secondaryPlaceholder","validators","asyncValidators","onlyFromAutocomplete","errorMessages","theme","onTextChangeDebounce","inputClass","clearOnBlur","hideForm","addOnBlur","addOnPaste","pasteSplitPattern","blinkIfDupe","removable","editable","allowDupes","modelAsStrings","trimTags","ripple","dragZone","onRemoving","onAdding","identifyBy","animationDuration","leave","dropdown","showDropdownIfEmpty","minimumTextLength","limitItemsTo","keepOpen","OptionsProvider","setOptions","TagInputAccessor","_onChangeCallback","onTouched","_onTouchedCallback","writeValue","registerOnChange","registerOnTouched","getItemValue","fromDropdown","getItemDisplay","getItemsWithout","ngx_chips_TagInputForm","TagInputForm","onSubmit","onFocus","onKeyup","onKeydown","inputTextChange","setValidators","setAsyncValidators","firstChange","isInputFocused","getErrorMessages","hasErrors","dirty","getElementPosition","parentElement","onKeyDown","inputText","onKeyUp","defaults$1","ngx_chips_TagInputDropdown","TagInputDropdown","ngx_chips_TagInputComponent","_autocompleteItems","maxItemsReached","getFormValue","hasMinimumText","getMatchingItems","hasItems","isDisabled","shouldShow","shouldHide","autocompleteObservable","getItemsFromObservable","setItems","requestAdding","createTagModel","resetItems","setLoadingState","subscribeFn","populateItems","KEEP_OPEN","onTextChange","inputForm","onWindowBlur","formValue","dupesAllowed","autocompleteItems","hasValue","templates","TagRipple","borderRadius","ngx_chips_navigator","vendor","ngx_chips_TagComponent","TagComponent","cdRef","onTagEdited","editing","rippleState","readonly","move","moving","keydown","blink","toggleEditMode","activateEditMode","onBlurred","getDisplayValue","hasRipple","getContentEditableText","setContentEditableText","storeNewValue","isDeleteIconVisible","getContentEditable","canAddTag","CUSTOM_ACCESSOR","DragEvent","defaults$2","TagInputComponent","dragProvider","onAdd","onPaste","onValidationError","inputTextValue","appendTag","createTag","isTagValid","fromAutocomplete","dupe","findDupe","isFromAutocomplete","assertions","onPasteCallback","requests","resetInput","clipboardData","setInputValue","setUpKeypressListeners","setupSeparatorKeysListener","setUpInputKeydownListeners","observers","setUpTextChangeSubscriber","setUpOnBlurSubscriber","setUpOnPasteListener","statusChanges$","isProgressBarVisible$","setAnimationMetadata","removeItem","giveupFocus","addItem","selectItem","selectedTag","fireEvents","handleKeydown","shiftKey","moveToTag","isFirstTag","isLastTag","onFormSubmit","_a_1","emitEvent","getControl","applyFocus","displayAutocomplete","hasCustomTemplate","menuTemplate","onDragStarted","isDropping","isReceiver","onTagBlurred","changedElement","trackBy","updateEditedTag","isLast","isFirst","getTagIndex","getTagAtIndex","findIndex","appendItem","statusUpdate","useSeparatorKeys","hasKeyCode","hasKey","isIMEProcessing","valueChanges","filterFn","animationMetadata","descendants","tabindexAttr","DeleteIconComponent","optionsProvider","TagInputModule","withDefaults","VirtualDropdownListDirection","pager_component___extends","pager_component___decorate","pager_component___metadata","pager_component_PagerComponent","PagerComponent","pageChanged","lastPage","pagesVisibleLow","pagesVisibleHigh","pagesVisibleNum","totalItems","pageSize","pagesVisibleRange","onPageChange","pager_module___decorate","pager_module_COMP","pager_module_PagerModule","PagerModule","media_service___extends","media_service___decorate","media_service_MediaService","MediaService","getMediaMetadataList","searchOptions","getTopViewedMediaMetadataList","getMediaViewsHistory","response_1","getMediaStatsHistory","hasNotEmptyUsersStats","response_2","series","getMediaStatsSummaryForRange","getMediaMetadata","mediaMetadataMaterialId","getMediaEngagementRate","liveStreamClockType","is_live_stream","views_timestamps","rangeFrom","rangeTo","album_service___extends","album_service___decorate","album_service_AlbumService","AlbumService","getTopViewedForRange","filters","prepareParamsForTopList","getTopCompletlyViewedForRange","getQueryParamsList","page_size","getAlbumStatsHistory","collectionId","completeViewsData","commonLabels","complete_views","getAlbumStatsSummary","getAlbumItemsReport","AlbumReportsFilters","tag_service___extends","tag_service___assign","tag_service___decorate","tag_service_TagService","TagService","findTags","records","prefixes","total_records","existing_tag_selector_service___decorate","existing_tag_selector_service___metadata","existing_tag_selector_service_ExistingTagSelectorService","ExistingTagSelectorService","tagService","selectedTagsList","changeDetectionEmitter","loadingEmitter","onTagSearch","onTagAdding","tagSelectorAvailableItems","tagNorm","date_util_DateUtil","DateUtil","unixToDate","dateToUnix","dmyObject","addLeadZeroes","getDate","getMonth","getFullYear","unixToTimeString","unixToDateString","zeroesCount","unixDiffInDays","unix1","unix2","unixDay","unixAddDays","setDate","unixSubtractDays","daysInUnix","weeksInUnix","weeks","unixIsBetweenDates","rangeMin","rangeMax","unixDayOfWeek","dow","getDay","daysInMonth","setDateStartOfDay","setHours","formatDuration","totalSeconds","hours","minutes","seconds","albums_view_component___extends","albums_view_component___decorate","albums_view_component___metadata","albums_view_component_AnalyticsAlbumsView","AnalyticsAlbumsView","mediaAnalyticsService","albumService","existingTagSelector","MEDIA_PREVIEW_VIEWS_HISTORY_DAYS","TOP_LIST_TYPE_ITEM_VIEWS","TOP_LIST_TYPE_COMPLETE_VIEWS","selectedCollectionItemsPaging","areUsersInItems","collectionMetadataList","hasCollectionMetadataListUsersStats","collectionMetadataByCollectionId","collectionMetadataTotalNum","topListPagingOptions","topListType","selectedCollectionMetadata","collectionItemsStats","hasUsersInCollectionItemsStats","dateUtil","selectMediaMetadata","collection_id","loadHistoryStatsForSelectedCollection","loadItemsStatsForSelectedCollection","previewHistoryStats","watchingTime","stats","material_id","avgtime","prepareDateRangeForTopLists","accountCreatedAtTs","getPageReportFilters","onTopListData","hasUsersStats","mcm","collection","itemsNum","collection_items_num","mediaViews","collectionViews","collectionUsers","records_1","mm","isMediaMetadataSelected","onSearchKeyPress","onColumnHeaderClick","selectedTopListType","onTopListPageChanged","onTagAdd","_event","onTagRemove","onSelectedCollectionItemsListPageChanged","fromPos","toPos","album_details_view_component___extends","album_details_view_component___decorate","album_details_view_component___metadata","album_details_view_component_AnalyticsAlbumDetailsView","AnalyticsAlbumDetailsView","historyStats","totalMediaViewsInRange","totalCollectionViewsInRange","totalCollectionUsersInRange","totalAvgWatchingTime","selectedMediaStats","hasUsersInCollectionItemStats","collectionItemStats","routeSubscription","onInitialAlbumItemsReportLoad","onAlbumItemsReport","collectionMetadata","itemStats","mediaStatsList","mediaStatsByMaterialId","loadAlbumItemsReport","fieldsForSummary","selectMediaStats","materialId","loadHistoryStatsForSelectedMedia","isMediaStatsSelected","engagementRateStats","col","onPageChanged","album_details_resolver___decorate","album_details_resolver___metadata","album_details_resolver_AnalyticsAlbumDetailsResolver","AnalyticsAlbumDetailsResolver","DEFAULT_RANDE_FOR_ITEMS_REPORT","albums_module___decorate","albums_module_routes","albums_module_AnalyticsAlbumsModule","AnalyticsAlbumsModule","content_view_component___extends","content_view_component___decorate","content_view_component___metadata","content_view_component_AnalyticsContentView","AnalyticsContentView","mediaMetadataList","mediaMetadataByMaterialId","mediaMetadataTotalNum","sort_by","sort_dir","selectedMediaMetadata","columnName","pages_service___extends","pages_service___decorate","pages_service___metadata","pages_service_PagesService","PagesService","getReferrerHistoryForRange","listOfItems","getReferrerHistoryForPeriod","period","getReferrerUsersAndViews","getTopSources","getTopSubpages","getAudienceHistoryForPeriod","data_2","getUsersAndViewsHistoryReport","data_3","getUsersAndViewsSummaryReport","tsRangeParam","getGeoReport","listOfCountries","listOfRegions","listOfCities","regionCode","getDemSexReport","getDemAgeReport","getTopViewedTagsReport","tagsMaxNum","nowTs","loaded_at","PageReportFilters","geoCountryCode","geoRegionId","demSex","demAgeFrom","demAgeTo","sampled_traffic_filters___extends","SampledTrafficFilters","other","dateRange","geo_country_view_regions_fix","google_geo_regions_fix_service___decorate","google_geo_regions_fix_service_GoogleGeoRegionsFixService","GoogleGeoRegionsFixService","regions","reduceRegions","sharedRegions","totalViews","regName","subdiv_code","codeSrc","codesTrg","codesTrg_1","data_4","codeTrg","operators_map","sampled_traffic_api_service___extends","sampled_traffic_api_service___decorate","sampled_traffic_api_service___metadata","sampled_traffic_api_service_SampledTrafficApiService","SampledTrafficApiService","fix","usersAndViewsHistory","parseUsersAndViewsHistory","usersAndViewsSummary","parseUsersAndViewsSummary","geoReport","parseGeoRecord","summary_users","summary_views","mapItems","listItems","country_views","country_users","country_code","viewsShare","usersShare","resolution","region_views","region_users","regionId","subdivCode","topViewedTags","parseTopViewedTags","_prefixAndValue","_isPrefixed","content_details_view_component___extends","content_details_view_component___decorate","content_details_view_component___metadata","content_details_view_component_AnalyticsContentDetailsView","AnalyticsContentDetailsView","sampledTrafficApi","MAX_TOP_TAGS_FOR_MEDIA","hasTvMetrics","tvStatsLoading","engagementRateSummary","topViews","totalWatchingTime","totalViewsInRange","totalUsersInRange","engagementRateLiveStreamClockType","mediaMetadata","loadTagsGroups","topViewedTagsSub","resp","tagsByPrefix","viewsPerTag","viewsPerPrefix","sufix","tagGroups","sufixes","sufixes_1","freq","frequency","serie","loadTotalUsersInRange","loadEngRateData","fixUsersRoundingTotal","onEngRateStatsData","updateTvStatisticsFromEngRate","unitLen","updateTvMetrics","groupInto15minPeriods","newValues","newLabels","tvStatsAmrChart","totalEngPoints","usersPerEngPoing","tvStatsAvgReachChart","totalReach","tvStatsCumReachChart","tvStatsAmr","tvStatsAvgReach","tvStatsCumReach","newVals","periodInSec","unitInSec","unitRemainter","nextVal","timeIter","loadTvMetrics","dateIter","engDataObs","periodEnd","obs","resps","exportTvMetricsToCsv","dates","amr","avgReach","cumReach","changeEngRateLiveStreamClockType","clockType","content_details_resolver___decorate","content_details_resolver___metadata","content_details_resolver_AnalyticsContentDetailsResolver","AnalyticsContentDetailsResolver","content_module___decorate","content_module_routes","content_module_AnalyticsContentModule","AnalyticsContentModule","Rx","player_service___extends","player_service___decorate","player_service___metadata","player_service_PlayerService","PlayerService","readPlayerSubject","readPlayer","playerId","createPlayer","updatePlayer","deletePlayer","defaultPlayer","listPlayers","detailed","listBuilds","generateBuild","dashboard_view_component___extends","dashboard_view_component___decorate","dashboard_view_component___metadata","dashboard_view_component_AnalyticsDashboardView","AnalyticsDashboardView","viewService","playerService","HEATMAP_DEFAULT_RANGE_SCOPE","hpicersize","showButtons","showWelcomeBox","dropdownHeatMap","devices","desktopPerc","otherPerc","last30d","audienceHistory30d","audienceHistory48h","loadHeatMap","loadingData","loadDataProcessDeviceTypes","device_types","last_30d","loadDataProcessAudienceHistory30d","audience_history","loadDataProcessAudienceHistory48h","last_48h","topMedia30d","top_media","topMedia24h","last_24h","deviceTypes","desktopViews","deviceTypes_1","device_type","yesterdayData","yesterdayRecords","yesterdayRecords_1","todayRecords","todayData","validDataTs","todayRecords_1","_opt","_range","dropdownHeatMapSelectedValue","onDateHeatMapRangeChanged","dropdownHeatMapSelect","onChangeRange","monthDay","getUTCDate","getUTCMonth","curDate","dayNames","heatMapGranularity","heatMapHeaders","weeksViewsArray","weeksUsersArray","heatMapRowDescriptors","_viewsData","_usersData","dayInd","monthLabel","headerLabel","getUTCDay","heatMapViewsData","heatMapUsersData","askForNewPlayer","addNewPlayer","conf_json","addNewSub","gotoConfigurator","defaultPrevented","stopImmediatePropagation","heatmap_component___decorate","heatmap_component___metadata","heatmap_component_HeatmapComponent","HeatmapComponent","DEFAULT_ROW_TITLE_WIDTH","DEFAULT_ROW_SPACING","minVal","maxVal","squareResize","incDate","_res","Granularity","beginDate","dataField","dataRow","nlCounter","_rowCounter","rowsForDisplay","ColorSchema","ShowBorder","Data","_maxValue","colCounter","info","componentWidth","spacing","squareWidth","Event","dashboard_module___decorate","dashboard_module_routes","dashboard_module_AnalyticsDashboardModule","AnalyticsDashboardModule","top_content_view_component___extends","top_content_view_component___decorate","top_content_view_component___metadata","top_content_view_component_AnalyticsTopContentView","AnalyticsTopContentView","LAST_HOURS_SELECTED_FOR_SCOPE_DEFAULT_VALUE","PAST_TIMESTAMP","topMediaList","topMediaListTotalLength","topMediaListHasUsersStats","lastHoursSelectedForScope","media","hasTopMediaListUsersStats","topMediaList_1","onLastHoursSelectedChange","top_content_module___decorate","top_content_module_routes","top_content_module_AnalyticsTopContentModule","AnalyticsTopContentModule","google_charts_loader_service_GoogleChartsLoaderService","GoogleChartsLoaderService","localeId","chartPackage","AnnotationChart","AreaChart","Bar","BarChart","BubbleChart","Calendar","CandlestickChart","ColumnChart","ComboChart","PieChart","Gantt","Gauge","GeoChart","Histogram","Line","LineChart","OrgChart","Sankey","Scatter","ScatterChart","SteppedAreaChart","Table","Timeline","TreeMap","WordTree","googleScriptLoadingNotifier","googleScriptIsLoading","loadGoogleChartsScript","initializer","packages","mapsApiKey","charts","loaded","defer","ChartHTMLTooltip","tooltipDOMElement","PIXELS","getDOMElement","google_chart_component_GoogleChartComponent","GoogleChartComponent","loaderService","chartSelect","chartReady","chartError","mouseOver","mouseOut","wrapper","getChartType","visualization","ChartWrapper","unregisterChartEvents","setDataTable","dataTable","registerChartWrapperEvents","reformat","redraw","draw","formatters","formatterConfig","formatterConstructor","formatterOptions","formatter","getDataTable","getSelectorBySeriesType","seriesType","bars","haxis","area","getSeriesByColumn","column","role","getColumnRole","getColumnType","getBoundingBoxForItem","cli","row","box","getBoundingBox","getValueAtPosition","getColumnTypeAtPosition","getColumnLabelAtPosition","getColumnLabel","getHTMLTooltip","tooltipER","parseMouseEvent","columnType","columnLabel","registerChartEvents","chart","getChart","getChartLayoutInterface","selection","getSelection","selectedRowValues","selectedRowFormattedValues","numberOfColumns","getNumberOfColumns","getFormattedValue","chart_mouse_event___extends","ChartMouseEvent","google_charts_module_Ng2GoogleChartsModule","MouseOverEvent","ChartMouseOverEvent","ChartMouseOutEvent","Ng2GoogleChartsModule","geo_view_component___extends","geo_view_component___decorate","geo_view_component___metadata","geo_view_component_AnalyticsGeoView","AnalyticsGeoView","total_items","viewsTotal","geoStats","views_share","geoStatsForPage","colorAxis","mapChartData","itemsFrom","itemsTo","onMapRegionClick","selectedCountryCode","geo_country_view_component___extends","geo_country_view_component___decorate","geo_country_view_component___metadata","geo_country_view_component_AnalyticsGeoCountryView","AnalyticsGeoCountryView","SCOPE_TYPE_REGIONS","SCOPE_TYPE_CITIES","MAX_CITIES_ON_MAP","scopeType","mapColorRange","initialLoadData","regionsMapChartFix","mapChartRegionsReducingMappings","mapChartRegionsSharingSet","mapChartRegionsSkippingsSet","loadDataForRegions","loadDataForCities","makeRegionDataForMapChart","reduceRegionsForMapChart","makeSharedRegionsDataForMapChart","data_5","data_6","mapChartResolution","loadDataUpdateModelOnDataLoad","data_7","data_8","displayMode","onScopeTypeChange","geo_module___decorate","geo_module_routes","geo_module_AnalyticsGeoModule","AnalyticsGeoModule","technology_view_component___extends","technology_view_component___decorate","technology_view_component___metadata","technology_view_component_AnalyticsTechnologyView","AnalyticsTechnologyView","deviceTableStats","osTableStats","browserTableStats","topDeviceChartData","topDeviceChartLabels","topBrowserChartData","topBrowserChartLabels","topOsChartData","topOsChartLabels","iconClassForDeviceType","0","makeHiddenSeriesMapForQuickSearch","series_1","recObj","shouldBeHidden","onUserAction","hiddenChartSeriesForDeviceTypeLabels","hiddenChartSeriesForBrowserFamilyLabels","hiddenChartSeriesForOsFamilyLabels","processDeviceTypeData","processOsFamilyData","os_family","processBrowserFamilyData","browser_family","processDeviceTypeDataForCharts","account_history","top_history","topBrowserFamilyChartData","processBrowserFamilyDataForCharts","topOsFamilyChartData","processOsFamilyDataForCharts","deviceType","deviceType_1","iconClass","device_type_name","bgColorHex","result_1","rgbArr","minPos","osFamily","osFamily_1","os_family_name","result_2","browserFamily","browserFamily_1","browser_family_name","result_3","buildDataStructForChartAndInitWithAccountHistory","accountHistory","accountData","accountHistory_1","topHistory","topHistory_1","itemHistory","itemData","topHistory_2","topHistory_3","technology_module___decorate","technology_module_routes","technology_module_AnalyticsTechnologyModule","AnalyticsTechnologyModule","realtime_view_component___extends","realtime_view_component___decorate","realtime_view_component___metadata","realtime_view_component_AnalyticsRealtimeView","AnalyticsRealtimeView","REFRESH_DATA_PERIOD","audienceMinutesChart","audienceSecondsChart","audienceWatchingUsersNum","topMediaListLoading","topMediaListPagingOptions","selectedMediaMinutesChart","selectedMediaSecondsChart","updateNum","updateDataTimer","updateData","generateInitialData","dataForSeconds","loadTopMediaList","updateAudienceData","updateSelectedMediaStats","samples","lastMinuteSum","samples_1","chartPushValue","viewers_num","samples_2","watchingUsers","loadSelectedMediaStats","onTopMediaListPageChange","lastVal","realtime_module___decorate","realtime_module_routes","realtime_module_AnalyticsRealtimeModule","AnalyticsRealtimeModule","QOS_view_component___extends","QOS_view_component___decorate","QOS_view_component___metadata","QOS_view_component_QOSView","QOSView","stackedData","sum","previewFilledStats","topic","loadMockData","stackedhorizontalchart_component___decorate","stackedhorizontalchart_component___metadata","stackedhorizontalchart_component_HorizontalStackedChartComponent","HorizontalStackedChartComponent","xLabels","QOS_module___decorate","QOS_module_routes","QOS_module_AnalyticsQOSModule","AnalyticsQOSModule","playback_experience_list_view_component___extends","playback_experience_list_view_component___decorate","playback_experience_list_view_component___metadata","playback_experience_list_view_component_PlaybackExperienceListView","PlaybackExperienceListView","playbacksDb","generateMockData","columnsAverage","media_duration","playback_coverage","mediaList","usersUuids","generateUuid","envs","generateEnvs","userPos","playbackRatio","watchDuration","coverageStr","coverage","playback_id","user_id","start_time","media_type","media_id","media_title","device_browser","device_os","isp","cdn","duration_total","duration_count","media_duration_total","media_duration_count","playback_coverage_total","playback_coverage_count","cmp","pageIdx","playbacks","playback_experience_details_view_component___extends","playback_experience_details_view_component___decorate","playback_experience_details_view_component___metadata","playback_experience_details_view_component_PlaybackExperienceDetailsView","PlaybackExperienceDetailsView","playbackStartDate","bitrateHistogramLabels","bitrateHistogramData","playbackHistory","vt","avgkbps","walltime","wt","formatWallTime","getHours","getMinutes","getSeconds","getMilliseconds","playback_experience_module___decorate","playback_experience_module_routes","playback_experience_module_AnalyticsPlaybackExperienceModule","AnalyticsPlaybackExperienceModule","errors_view_component___extends","errors_view_component___decorate","errors_view_component___metadata","errors_view_component_ErrorsView","ErrorsView","filterDropdownOs","markSelected","filterDropdownBrowser","filterDropdownDevice","filterDropdownTags","filterDropdownAppVersion","filterDropdownPlayer","filterDropdownIsp","filterDropdownCdn","errorsHistoryData","errorsHistoryLabels","setMinutes","setSeconds","setMilliseconds","errors72hNorm","posWithOffset","errorsGroupedData","errorsGroupedLabels","groupedByDropdown","errorsDb","error_id","media_id_title","onErrorItemClick","selectedError","isErrorSelected","errors_module___decorate","errors_module_routes","errors_module_AnalyticsErrorsModule","AnalyticsErrorsModule","real_time_marketing_view_component___extends","real_time_marketing_view_component___decorate","real_time_marketing_view_component___metadata","real_time_marketing_view_component_RealTimeMarketingView","RealTimeMarketingView","campaigns","skiJumpsData","totalUsers","contents","generateDatesForChart","winterOlympicsData","contentsDb","momentStartTime","hoursNum","startTs","h","hm","real_time_marketing_module___decorate","real_time_marketing_module_routes","real_time_marketing_module_AnalyticsRealTimeMarketingModule","AnalyticsRealTimeMarketingModule","content_insights_view_component___extends","content_insights_view_component___decorate","content_insights_view_component___metadata","content_insights_view_component_ContentInsightsView","ContentInsightsView","viewsByMediaTypeData","viewsByMediaTypeLabels","vodViewsByGenresData","vodViewsByGenresLabels","tvViewsByGenresData","tvViewsByGenresLabels","timeRangeDropdown","addedIntoSystem","content_insights_module___decorate","content_insights_module_routes","content_insights_module_AnalyticsContentInsightsModule","AnalyticsContentInsightsModule","flexmodel_view_component___extends","flexmodel_view_component___decorate","flexmodel_view_component___metadata","flexmodel_view_component_FlexModelView","FlexModelView","filterDropdownTimeScope","hasSeparatorBelow","filterDropdownGeoCountry","filterDropdownGeoRegion","filterDropdownGeoCity","filterDropdownDemographyAgeFrom","filterDropdownDemographyAgeTo","filterDropdownDemographySex","isPanelOpen","panelId","timeSeries","metricsDropdown","metricDropdown","tableDimDropdown","tableCols","tableRows","tableData","tableMetricsDropdown","categoriesSeries","categoriesDimDropdown","defaultColor","datalessRegionColor","onTogglePanel","flexmodelsetup_view_component___extends","flexmodelsetup_view_component___decorate","flexmodelsetup_view_component___metadata","flexmodelsetup_view_component_FlexModelSetupView","FlexModelSetupView","fieldTypeDropdown","addFieldDropdown","loadPredefinedJson","modelAsJson","addParentsToModel","loadDimensions","metricsByType","loadMetrics","nn","dims","Date range","aggrMetrics","datapointCountMetrics","countMetrics","aggrMetricsList","countMetricsList","aggr","datapoint","exportToJson","loadJsonClick","handleJsonInput","fileTobeRead","fileReader","loadJson","readAsText","modelJson","flexmodel_module___decorate","flexmodel_module_routes","flexmodel_module_AnalyticsFlexmodelModule","AnalyticsFlexmodelModule","heartbeat_view_component___extends","heartbeat_view_component___decorate","heartbeat_view_component___metadata","heartbeat_view_component_HeartbeatViewComponent","HeartbeatViewComponent","_option","panicdashboard_view_component___extends","panicdashboard_view_component___decorate","panicdashboard_view_component___metadata","panicdashboard_view_component_PanicDashboardViewComponent","PanicDashboardViewComponent","pagesService","leftChartHeight","rightPanelHeight","activeGeoType","selectedCountry","getScreenSize","divOSERTable","scrollHeight","divBrowserERTable","loadMapData","loadCountriesList","loadMaterialER","loadOSER","lodadBrowserER","material_error_rate","error_rate","os_error_rate","os","browser_error_rate","countriesList","parseGeoData","geoData","geoDataTable","statValue","flag","datadata","_i_1","data0","data1","data2","data3","data4","data5","previous","avg","all24hErrorRate","browser24hErrorRate","OS24hErrorRate","onShowHeartbeat","warroom_view_component___extends","warroom_view_component___decorate","warroom_view_component___metadata","warroom_view_component_WarroomViewComponent","WarroomViewComponent","NUMBER_OF_TOP_MATERIAL_CHARTS","LENGTH_OF_TOP_METERIAL_BUFFER","SEC","MIN","REFRESH_24_DATA_PERIOD","techChartHeight","topMatChartHeight","todaysViews","todaysUsers","yesterdayUsers","yesterdayViews","viewsPerUsers24","avgWatchingTime24","loadStats","endMoment","beginMoment","chartDataDevice","chartLabelsDevice","chartDataBrowser","chartLabelsBrowser","chartDataOs","chartLabelsOs","chartbgcolor","chartlbcolor","chdata","colorArrToRgbaStr","colorArr","heartbeat_module___decorate","heartbeat_module_routes","heartbeat_module_AnalyticsHeartbeatModule","AnalyticsHeartbeatModule","info_view_component___extends","info_view_component___decorate","info_view_component___metadata","info_view_component_AnalyticsInfoView","AnalyticsInfoView","clientToken","info_module___decorate","info_module_routes","info_module_AnalyticsInfoModule","AnalyticsInfoModule","virtual_scroller","virtual_dropdown_popup_component___decorate","virtual_dropdown_popup_component___metadata","virtual_dropdown_popup_component_VirtualDropdownPopupComponent","VirtualDropdownPopupComponent","scrolledToEnd","selectFromTemplate","emitSelected","itemHeigth","virtualScroller","preSelectedUpIndex","findPreSelectedIndex","preSelectedItem","preSelectedDownIndex","resetScroll","emitScrolledToEnd","trackGeoListItem","_index","uid","iconNgClass","itemNgClass","fetch","updateVieportItems","viewportItems","KeyboardEvent","ColorpickerPosition","virtual_dropdown_component___decorate","virtual_dropdown_component___metadata","virtual_dropdown_component_selector","virtual_dropdown_component_VirtualDropdownComponent","VirtualDropdownComponent","searchValueChange","filterValueChange","searchValue","filterValue","withSearch","searchPlaceholder","removeSelectedFromList","withFilter","filterPlaceholder","filterByKey","$ub","findSelectedByValue","popup","emitSearchValueChange","handleFilterValueChange","_from","MouseEvent","virtual_dropdown_filter_pipe___decorate","virtual_dropdown_filter_pipe_VirtualDropdownFilterPipe","VirtualDropdownFilterPipe","virtual_dropdown_list_pipe___decorate","virtual_dropdown_list_pipe_VirtualDropdownRemoveSelectedPipe","VirtualDropdownRemoveSelectedPipe","virtual_dropdown_module___decorate","virtual_dropdown_module_VirtualDropdownModule","VirtualDropdownModule","camelCaseToSpace_pipe___decorate","camelCaseToSpace_pipe_CamelCaseToSpacePipe","CamelCaseToSpacePipe","REGEXP","camelCaseToSpace_module___decorate","camelCaseToSpace_module_CamelCaseToSpaceModule","CamelCaseToSpaceModule","capitalize_first_pipe___decorate","capitalize_first_pipe_CapitalizeFirstPipe","CapitalizeFirstPipe","_exponent","capitalize_first_module___decorate","capitalize_first_module_CapitalizeFirstModule","CapitalizeFirstModule","geo_model","geo_picker_component___decorate","geo_picker_component___metadata","geo_picker_component_GeoPickerComponent","GeoPickerComponent","geoTypeChanged","regionOption","cityOption","setActiveGeoGranularityTypes","onGeoGranularityTypeChange","reportType","report_model","report_picker_component___decorate","report_picker_component___metadata","report_picker_component_ReportPickerComponent","ReportPickerComponent","reportTypeChanged","reportOption","geolocationOption","tagOption","genderOption","ageOption","setActiveReportTypes","onReportTypeChange","reportTypes","prefixed_tags_service___assign","prefixed_tags_service___decorate","prefixed_tags_service___metadata","prefixed_tags_service_PrefixedTagsService","PrefixedTagsService","PAGE_SIZE","ALL_LABEL","LOADING_LABEL","EMPTY_LABEL","PREFIX_SEPARATOR","selectedTags","pages","fetch$","data$ub","parseData","fetch$ub","fetchList","recList","recList_1","initDropdownModel","fullprefix","emptyDropdownItem","dropdownItem","tagData","searchtext","tagModel","startIdx","markDropdownModel","recs","updateDropdownModel","modelIndex","newItem","record","recordIndex","stopIdx","partial","hasSuffix","st_view_component___extends","st_view_component___decorate","st_view_component___metadata","st_view_component_AnalyticsSTView","AnalyticsSTView","prefixedTagsService","MAP_REGIONS_SKIP_SET","MAP_COLOR_RANGE","PAGER","GEO_GRANULARITY_TYPES","GRANULARITY_TYPES","REPORT_TYPE_REPORT","REPORT_TYPE_GEO","REPORT_TYPE_TAGS","REPORT_TYPES","activeReportType","countries$","regions$","cities$","selectedRegion","selectedCity","isCountrySelectorVisible","isRegionSelectorVisible","isCitySelectorVisible","isLoadingCountry","isLoadingRegion","isLoadingCity","isSearchingTags","fetchPages","loadingTags$ub","listOfCountries$ub","formatGeoDropdown","listOfRegions$ub","listOfCities$ub","report$ub","fetchData","onGranularitySelect","_activeReportType","onGeoTypeChanged","_geoType","prefixedTagSelect","prefixedTagReset","prefixedScrollEnd","pages_1","prefixedSearch","onValueChangeTag","onSelectCountry","onSelectRegion","onSelectCity","onResetCountry","onResetRegion","onResetCity","_page","onCountryTableRowClick","selectCountryByCode","exportCsv","csvFilename","csvData","countries_1","tasks","loadUsersAndViewsHistoryReport","loadSummaryData","loadGeolocationData","loadTopViewedTagsReport","updateGeolocationData","mapDataTable","countries_2","regions_1","updateSummaryData","chartUsersViewsHistory","chartLabelsReport","tagsDataTable","raportItems","stRaport_view_component___extends","stRaport_view_component___decorate","stRaport_view_component___metadata","stRaport_view_component_AnalyticsSTRaportView","AnalyticsSTRaportView","geoGranularityTypes","isBetaMode","chartDemSex","chartDemAge","regionsList","citiesList","demographyAgeFrom","demographyAgeTo","age","ageStr","selectedAgeFrom","selectedAgeTo","demographySexList","selectedSex","demographySexToChartMetaMap","","buildDropdownList","loadDataForReport","selectedCountryItem","onDropdownSelectAgeFrom","onDropdownSelectAgeTo","onDropdownSelectSex","loadDataForGeolocation","geoRegionsMapChartFix","loadDemSexReport","demographySexStats","sex_stats","sexChartInfo","mapSexStrToChartInfo","sex","loadDemAgeReport","demographyAgeStats","barThickness","age_stats","age_from","age_to","sexStr","sumItemTitles","st_module___decorate","st_module_routes","st_module_AnalyticsSTModule","AnalyticsSTModule","virtual_list_component___decorate","virtual_list_component___metadata","virtual_list_component_selector","virtual_list_component_VirtualListComponent","VirtualListComponent","scrollerStart","scrollerEnd","scrollerChange","scrollerUpdate","listHeight","itemHeight","showTopGradient","handleListVieportUpdate","listViewportItems","handleListVieportChange","topGrad","handleListVieportStart","handleListVieportEnd","virtual_list_module___decorate","virtual_list_module_VirtualListModule","VirtualListModule","sampled_traffc_model","sampled_traffic_geo_service___decorate","sampled_traffic_geo_service___metadata","sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService","AnalyticsSampledTrafficGeoService","isValidCountryCode","_countryCodes","countryNameByCode","_countries","regionNameById","regionCodeById","cached","tag_prefix_pipe___decorate","tag_prefix_pipe___metadata","tag_prefix_pipe_TagPrefixPipe","TagPrefixPipe","lowercase","capitalizeFirst","camelCaseToSpace","sampled_traffic_params_service___assign","sampled_traffic_params_service___decorate","sampled_traffic_params_service___metadata","sampled_traffic_params_service_AnalyticsSampledTrafficParamsService","AnalyticsSampledTrafficParamsService","geo","defaultGranularity","redirectCounter","queryParams","queryParamsHandling","analyticsSampledTrafficRoute","replaceUrl","isRangeKey","isGranularityKey","isGeolocationKey","isTagsKey","isKey","formatUserDateRange","formatGeolocation","formatGranularity","formatTags","parseDateRange","raw_range","raw_range_array","unix_range_array","moment_range_array","isSameOrAfter","parseGranularity","parseGeo","raw_geo","raw_geo_array","_regionId","parseTagIds","raw_tags","raw_tags_array","redirectIfNeeded","queryParamMap","needRedirect","fixedParams","geolocation","sampled_traffic_tags_service___assign","sampled_traffic_tags_service___decorate","sampled_traffic_tags_service___metadata","sampled_traffic_tags_service_AnalyticsSampledTrafficTagsService","AnalyticsSampledTrafficTagsService","tagPrefix","handleTagSearch","searchChipsByText","selectedChips","prefixedTagsData","prefixedTagsData$ub","parsePrefixedTagsData","fetchPrefixedTags$","fetchPrefixedTags$ub","fetchPrefixedTagsList","idsToValues","formatChip","resolveFromQueryParams","needFetch","alreadySelected","this_1","tags_1","tid","tags_2","searchTagsByIds","rec_ids","tagToChip","prefixedTagData","fetchPrefixedTags","initVirtualDropdownModel","emptyVirtualDropdownItem","virtualDropdownItem","markVirtualDropdownModel","updateVirtualDropdownModel","hasPrefix","sampled_traffic_criteria_component___extends","sampled_traffic_criteria_component___decorate","sampled_traffic_criteria_component___metadata","sampled_traffic_criteria_component_AnalyticsSampledTrafficCriteriaComponent","AnalyticsSampledTrafficCriteriaComponent","RANGE_PICKER_OPTIONS","dateRangeChange","geolocationChange","tagsChange","countriesDropdown$","regionsDropdown$","citiesDropdown$","_countryCode","fetchRegions","countries$ub","tag$ub","regions$ub","handleDateRangeChanged","handleSelectCountry","emitGeolocation","handleSelectRegion","handleResetCountry","handleResetRegion","handleTagAdd","_item","selectedTagRecords","handleTagRemove","_tag","handlePrefixedTagSelect","handlePrefixedTagScrollEnd","handlePrefixedTagSearch","sampled_traffic_geo_component___extends","sampled_traffic_geo_component___assign","sampled_traffic_geo_component___decorate","sampled_traffic_geo_component___metadata","sampled_traffic_geo_component_AnalyticsSampledTrafficGeoComponent","AnalyticsSampledTrafficGeoComponent","LIST_MIN_WIDTH_PX","CHART_ASPECT_RATIO","CHART_TEXT_STYLE","fontName","fontSize","CHART_OPTIONS","keepAspectRatio","textStyle","selectable","showListTopGradient","updateSizes","rect","updateChartSize","redrawChart","handleGoogleChartReady","handleGoogleChartError","handleGoogleChartSelect","compareListItems","trackListItem","handleSelectListItem","handleBackClick","region_1","chartWidthRatio","chartWidth","sampled_traffic_history_component___extends","sampled_traffic_history_component___decorate","sampled_traffic_history_component___metadata","sampled_traffic_history_component_AnalyticsSampledTrafficHistoryComponent","AnalyticsSampledTrafficHistoryComponent","save","GRANULARITY_DATA","CHART_GRID_COLOR","CHART_FONT_COLOR","CHART_DATA_COLORS","granularityData","trackHistoryGranularity","handleGranularityChange","sampled_traffic_summary_component___extends","sampled_traffic_summary_component___decorate","sampled_traffic_summary_component___metadata","sampled_traffic_summary_component_AnalyticsSampledTrafficSummaryComponent","AnalyticsSampledTrafficSummaryComponent","SUMMARY_ITEMS","i10n","layoutDirection","updateLayoutToSize","trackSummaryItem","sampled_traffic_tags_component___extends","sampled_traffic_tags_component___decorate","sampled_traffic_tags_component___metadata","sampled_traffic_tags_component_AnalyticsSampledTrafficTagsComponent","AnalyticsSampledTrafficTagsComponent","fetchMore","isFetching","sampled_traffic_api_filters_service___decorate","sampled_traffic_api_filters_service___metadata","sampled_traffic_api_filters_service_AnalyticsSampledTrafficApiFiltersService","AnalyticsSampledTrafficApiFiltersService","parseQueryParams","parsedRange","setUnixDateRangeSelection","getUnixDateRangeSelection","parsedGranularity","parsedGeo","parsedTagIds","parsedTags","sampled_traffic_view_component___extends","sampled_traffic_view_component___assign","sampled_traffic_view_component___decorate","sampled_traffic_view_component___metadata","sampled_traffic_view_component_AnalyticsSampledTrafficViewComponent","AnalyticsSampledTrafficViewComponent","LIST_ITEM_HEIGHT_PX","MAX_TOP_TAGS","isLoadingCriteria","isLoadingSummary","isLoadingTags","isLoadingHistory","isLoadingGeo","isFetchingTags","paramMap","reloadDateCountryTags","historyChart","summaryData","tagsData","responses","parseTagRecords","moreTags$ub","handleDateRangeChange","handleGeolocationChange","handleTagsChange","handleGeoSelect","handleGeoChartError","handleFetchTags","fromIndex","fromPage","summaryViews","sampled_traffic_default_params_guard___decorate","sampled_traffic_default_params_guard___metadata","sampled_traffic_default_params_guard_AnalyticsSampledTrafficDefaultParamsGuard","AnalyticsSampledTrafficDefaultParamsGuard","sampled_traffic_resolve_query_region_service___decorate","sampled_traffic_resolve_query_region_service___metadata","sampled_traffic_resolve_query_region_service_AnalyticsSampledTrafficResolveQueryRegionService","AnalyticsSampledTrafficResolveQueryRegionService","sampled_traffic_resolve_query_tags_service___decorate","sampled_traffic_resolve_query_tags_service___metadata","sampled_traffic_resolve_query_tags_service_AnalyticsSampledTrafficResolveQueryTagsService","AnalyticsSampledTrafficResolveQueryTagsService","sampled_traffic_module___decorate","sampled_traffic_module_routes","_region","_tags","runGuardsAndResolvers","sampled_traffic_module_AnalyticsSampledTrafficModule","AnalyticsSampledTrafficModule","analytics_module___decorate","AnalyticsRoutes","loadChildren","analytics_module_AnalyticsModule","AnalyticsModule","header_module","modal_component","alert_modal_component","close_modal_button_component___decorate","close_modal_button_component___metadata","close_modal_button_component_STYLES","close_modal_button_component_ModalCloseButtonComponent","ModalCloseButtonComponent","prompt_modal_component","input_modal_component","password_change_modal_component","gdpr_info_modal_component","terms_modal_component","password_change_service___extends","password_change_service___decorate","password_change_service___metadata","password_change_service_PasswordChangeService","PasswordChangeService","oldPassword","newPassword","old_password","new_password","password_change_view___decorate","password_change_view___metadata","password_change_view_PasswordChangeView","PasswordChangeView","passwordChangeError","onSuccess","clearRemoteErrors","remoteErrorsOldPassword","remoteErrorsNewPassword","minLength","newPasswordRepeat","matchingPasswords","passwordKey","passwordConfirmationKey","passwordInput","passwordConfirmationInput","setErrors","notEquivalent","onPasswordChangeFormSubmit","password_change_module___decorate","password_change_module_PasswordChangeModule","PasswordChangeModule","modal_module___decorate","modal_module_ModalModule","ModalModule","player_model","ColorpickerHsva","ColorpickerHsla","l","ColorpickerRgba","ColorpickerSliderPosition","ColorpickerSliderDimension","ColorpickerFormat","PlayerBuilderRouteGroup","colorpicker_service___decorate","colorpicker_service___metadata","colorpicker_service_ColorpickerService","ColorpickerService","closeSubject","hsla2hsva","hsla","hsva2hsla","hsva","rgbaToHsva","hsvaToRgba","q","stringToHsva","colorString","stringParsers","re","execResult","outputFormat","hslaText","denormalizeRGBA","hexText","shorten","colorpicker_data_service___decorate","colorpicker_data_service___metadata","colorpicker_data_service_ColorpickerDataService","ColorpickerDataService","formatValue","initialized","updateSubject","colorCache","sliderDimMax","slider","setSaturation","rg","setLightness","setHue","setAlpha","setR","setG","setB","setSaturationAndBrightness","rgX","rgY","setColorFromString","resetColor","hueRgba","rgbaText","alphaSliderColor","hueSliderColor","colorpicker_component___decorate","colorpicker_component___metadata","colorpicker_component_ColorpickerComponent","ColorpickerComponent","startsWith","colorpicker_dialog_component___decorate","colorpicker_dialog_component___metadata","colorpicker_dialog_component_ColorpickerDialogComponent","ColorpickerDialogComponent","arrowTop","positionValue","dialogArrowSize","dialogArrowOffset","openColorPicker","closeColorPicker","onDocumentMouseDown","trg","toElement","directiveElementRef","setDialogPosition","setDialog","directiveInstance","positionOffset","positionRelativeToArrow","getPropertyValue","boxDirective","createBox","boxParent","[style.top.px]","[style.left.px]","[style.width.px]","[style.height.px]","(window:resize)","(window:scroll)","(document:mousedown)","colorpicker_sample_component___decorate","colorpicker_sample_component___metadata","colorpicker_sample_component_ColorpickerSampleComponent","ColorpickerSampleComponent","colorpicker_text_component___decorate","colorpicker_text_component___metadata","colorpicker_text_component_ColorpickerTextComponent","ColorpickerTextComponent","formatPolicy","colorpicker_dialog_directive___decorate","colorpicker_dialog_directive___metadata","colorpicker_dialog_directive_ColorpickerDirective","ColorpickerDirective","resolver","viewRef","created","dialog","createComponent","resolveComponentFactory","colorpicker_slider_directive___decorate","colorpicker_slider_directive___metadata","colorpicker_slider_directive_ColorpickerSliderDirective","ColorpickerSliderDirective","listenerMove","listenerStop","setCursor","getX","getY","pageX","touches","pageY","(mousedown)","(touchstart)","colorpicker_text_directive___decorate","colorpicker_text_directive_ColorpickerTextDirective","ColorpickerTextDirective","changeInput","numeric","(input)","colorpicker_module___decorate","colorpicker_module_ColorpickerModule","ColorpickerModule","PlayerBuilderRoute","PlayerBuilderRouteData","PlayerBuilderCanLeaveModalAnswer","DiffType","player_builder_data_diff_service___decorate","player_builder_module__a","player_builder_module__b","player_builder_module__c","player_builder_module__d","player_builder_module__e","player_builder_module__f","player_builder_module__g","player_builder_module__h","EmbedCodeType","player_builder_data_diff_service_PlayerBuilderDataDiffService","PlayerBuilderDataDiffService","isFunction","isDate","isValue","obj1","obj2","compareValues","filterChanged","filtered","okey","oval","updated","deleted","unchanged","filteredObj_1","player_builder_video_service___assign","player_builder_video_service___decorate","player_builder_video_service___metadata","player_builder_video_service_PlayerBuilderVideoService","PlayerBuilderVideoService","seekValue","currentDuration","$player","modules","JavascriptApi","HtmlSkin","skin","splash","qualitySelectionEnabled","bradmax","showSkinOnInit","seekEnd","seekStart","seek","addOnce","player_builder_data_service___assign","player_builder_data_service___decorate","player_builder_data_service___metadata","player_builder_data_service_PlayerBuilderDataService","PlayerBuilderDataService","video","cp","skinIconFontVariationSettings","hasAdsSupport","buildName","savedBuildName","formCache","formData","formSub","player$","event$","resource","RESOURCE","defaultSettings","videoSeek","variable","videoPlayerSub","videoPlayer$","videoPlayerSkin","videoPlayerJsApi","playerLocales","locales","skinless","skinElement","updatedAt","publishedAt","buildId","savedData","parseResponseData","created_at","updated_at","latest_webbuild","plugin","skinDefault","themes","savedSkin","isSkinSvg","svg","isSkinFont","font","resetPlayer","isDirty","setMute","mute","setVolume","volume","pip","pictureInPictureButtonVisible","casting","videoCastEnabled","fullscreen","fullscreenEnabled","playbackRate","playbackRateEnabled","contextmenu","contextMenuDisabled","quality","endSplash","set_color","skinColor","updateBrand","updateSkinIconFontVariationSettings","save$","formatDataToSave","publish$","userAdsSupportEnabled","AdvertisementDataProvider","FreeWheel","formVariable","compareWithVariable","skinName","_key","variation","fnt","cfg","readPlugins","plugins","writePlayer","writePlugin","deletePlugin","brand","logoFile","logoLink","logoLinkTarget","logoAutohide","logoXPosition","logoYPosition","logoVisibleDuringAdPlayback","activeColor","skinCssVarColor","oldThemeColor","skinThemeDefaultColor","userColor","compareColors","cssMainColor","writeSkinColor","resetColorToThemeDefault","skinFont","skinState","skinIcoPrefix","skinStateIcon","mapStateIconIdsToArray","skinIconFont","skinIcon","quanteecStreamboost","firstColor","secondColor","c1","c2","abstract_player_builder_data_component___decorate","abstract_player_builder_data_component___metadata","abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent","AbstractPlayerBuilderDataComponent","SWITCH_LABEL_ENABLED","SWITCH_LABEL_INJECT_LEFT","SWITCH_LABEL_INJECT_RIGHT","SWITCH_LABEL_SHOW","SWITCH_LABEL_ON","SWITCH_LABEL_SIZE","SWITCH_SIZE","routeSub","onRouteDataChange","dataSub","onUserBuildChange","onVideoPlayer","videoEventSub","videoEvent$","onVideoEvent","player_builder_player_component___decorate","player_builder_player_component___metadata","player_builder_player_component_PlayerBuilderPlayerComponent","PlayerBuilderPlayerComponent","elementRef","api_model","player_list_data_service___decorate","player_list_data_service___metadata","player_list_data_service_PlayerListDataService","PlayerListDataService","stream","player_builder_modal_service___decorate","player_builder_modal_service___metadata","player_builder_modal_service_PlayerBuilderModalService","PlayerBuilderModalService","askToPublish","askToSave","player_builder_view_component___decorate","player_builder_view_component___metadata","player_builder_view_component___param","player_builder_view_component_PlayerBuilderViewComponent","PlayerBuilderViewComponent","flash","TABS","general","core","playback","icons","branding","endsplash","SUCCESS_FLASH_CONFIG","WARN_FLASH_CONFIG","RATIO_CLASSES","withHeader","previewHeight","previewCss","previewResizeActive","previewResizeY","previewResizeH","onDataChange","playerDataSub","readPlayer$","showPlayersMenu","saveSub","formatDate","uts","formatTime","canLeave$","answer","clickSave","saved","publish","published","cnf","skinDisabled","handlePreviewResize","clientY","previewComponent","handlePreviewAspect","aspect","PointerEvent","Document","player_builder_tokens_PLAYER_JS_SRC","player_builder_tokens_PLAYER_CDN_URL","PLAYER_DOCS_URL","PLAYER_DOCS_LINKS_URL","PLAYER_SKIN_MEDIA_URL","player_builder_docs_service___decorate","player_builder_docs_service_PlayerBuilderDocsService","PlayerBuilderDocsService","LINKS","player_builder_docs_component___extends","player_builder_docs_component___decorate","player_builder_docs_component___metadata","player_builder_docs_component___param","player_builder_docs_component_PlayerBuilderDocsComponent","PlayerBuilderDocsComponent","docs","player_builder_docs_module___decorate","player_builder_docs_module_COMP","player_builder_docs_module_PlayerBuilderDocsModule","PlayerBuilderDocsModule","player_builder_branding_component___extends","player_builder_branding_component___decorate","player_builder_branding_component___metadata","player_builder_branding_component_PlayerBuilderBrandingComponent","PlayerBuilderBrandingComponent","onTooBigLogo","limitWidth","limitHeight","limitFileSize","player_builder_branding_module___decorate","PlayerBuilderBrandingRoutes","player_builder_branding_module_COMP","player_builder_branding_module_PlayerBuilderBrandingModule","PlayerBuilderBrandingModule","player_builder_end_splash_component___extends","player_builder_end_splash_component___decorate","player_builder_end_splash_component___metadata","player_builder_end_splash_component_PlayerBuilderEndSplashComponent","PlayerBuilderEndSplashComponent","ENDSPLASHED","formatImageSrc","bypassSecurityTrustUrl","player_builder_end_splash_module___decorate","PlayerBuilderEndSplashRoutes","player_builder_end_splash_module_COMP","player_builder_end_splash_module_PlayerBuilderEndSplashModule","PlayerBuilderEndSplashModule","player_builder_features_component___extends","player_builder_features_component___decorate","player_builder_features_component_PlayerBuilderFeaturesComponent","PlayerBuilderFeaturesComponent","player_builder_features_module___decorate","PlayerBuilderGeneralRoutes","player_builder_features_module_COMP","player_builder_features_module_PlayerBuilderFeaturesModule","PlayerBuilderFeaturesModule","player_builder_locales_name_pipe___decorate","player_builder_locales_name_pipe_PlayerBuilderLocalesNamePipe","PlayerBuilderLocalesNamePipe","player_builder_locales_pipe_module___decorate","PIPES","player_builder_locales_pipe_module_PlayerBuilderLocalesPipeModule","PlayerBuilderLocalesPipeModule","player_builder_general_component___extends","player_builder_general_component___decorate","player_builder_general_component_PlayerBuilderGeneralComponent","PlayerBuilderGeneralComponent","player_builder_general_module___decorate","player_builder_general_module_PlayerBuilderGeneralRoutes","player_builder_general_module_COMP","player_builder_general_module_PlayerBuilderGeneralModule","PlayerBuilderGeneralModule","clipboard_service___decorate","clipboard_service___metadata","clipboard_service___param","clipboard_service_ClipboardService","ClipboardService","copy","textOrTextarea","textArea","asText","asTextArea","HTMLTextAreaElement","execCommand","char_code_pipe___decorate","char_code_pipe_CharCodePipe","CharCodePipe","char_code_module___decorate","char_code_module_CharCodePipeModule","CharCodePipeModule","object_keys_pipe___decorate","object_keys_pipe_ObjectKeysPipe","ObjectKeysPipe","object_keys_module___decorate","object_keys_module_ObjectKeysPipeModule","ObjectKeysPipeModule","player_builder_icon_select_component___decorate","player_builder_icon_select_component___metadata","player_builder_icon_select_component_PlayerBuilderIconSelectComponent","PlayerBuilderIconSelectComponent","_label","_OPTIONS","_disabled","formatText","fontOrIcon","emitOptionById","optionById","OPTIONS","player_builder_icon_svg_href_pipe___decorate","player_builder_icon_svg_href_pipe___metadata","player_builder_icon_svg_href_pipe___param","player_builder_icon_svg_href_pipe_PlayerBuilderIconSvgHrefPipe","PlayerBuilderIconSvgHrefPipe","skinStateIcoPrefix","player_builder_icon_font_link_pipe___decorate","player_builder_icon_font_link_pipe___metadata","player_builder_icon_font_link_pipe___param","player_builder_icon_font_link_pipe_PlayerBuilderIconFontLinkPipe","PlayerBuilderIconFontLinkPipe","player_builder_icon_module___decorate","player_builder_icon_module_COMP","player_builder_icon_module_PlayerBuilderIconModule","PlayerBuilderIconModule","player_builder_icons_component___extends","player_builder_icons_component___assign","player_builder_icons_component___decorate","player_builder_icons_component___metadata","player_builder_icons_component_PlayerBuilderIconsComponent","PlayerBuilderIconsComponent","clipboard","fonts","svgs","activeIconFont","emitVariation","skinIconFontVariation","copyLink","player_builder_icons_module___decorate","PlayerBuilderThemeRoutes","player_builder_icons_module_COMP","player_builder_icons_module_PlayerBuilderIconsModule","PlayerBuilderIconsModule","player_builder_playback_component___extends","player_builder_playback_component___decorate","player_builder_playback_component_PlayerBuilderPlaybackComponent","PlayerBuilderPlaybackComponent","player_builder_playback_module___decorate","PlayerBuilderPlaybackRoutes","player_builder_playback_module_COMP","player_builder_playback_module_PlayerBuilderPlaybackModule","PlayerBuilderPlaybackModule","player_builder_theme_component___extends","player_builder_theme_component___decorate","player_builder_theme_component___metadata","player_builder_theme_component_PlayerBuilderThemeComponent","PlayerBuilderThemeComponent","TEXT_FONTS","SKIN_THEMES","fontById","player_builder_theme_module___decorate","player_builder_theme_module_PlayerBuilderThemeRoutes","player_builder_theme_module_COMP","player_builder_theme_module_PlayerBuilderThemeModule","PlayerBuilderThemeModule","player_builder_activate_guard___decorate","player_builder_activate_guard___metadata","player_builder_activate_guard_PlayerBuilderActivateGuard","PlayerBuilderActivateGuard","gotoPlayers","configurator","player_builder_deactivate_guard___decorate","player_builder_deactivate_guard_PlayerBuilderDeactivateGuard","PlayerBuilderDeactivateGuard","_currentRoute","_currentState","_nextState","player_builder_docs_links_resolve_service___decorate","player_builder_docs_links_resolve_service___metadata","player_builder_docs_links_resolve_service___param","player_builder_docs_links_resolve_service_PlayerBuilderDocksLinksResolveService","PlayerBuilderDocksLinksResolveService","docks","_route","player_builder_media_resolve_service___decorate","player_builder_media_resolve_service___metadata","player_builder_media_resolve_service___param","player_builder_media_resolve_service_PlayerBuilderMediaResolveService","PlayerBuilderMediaResolveService","UrlUtil","base","endsWith","urls","player_builder_js_resolve_service___decorate","player_builder_js_resolve_service___metadata","player_builder_js_resolve_service___param","player_builder_js_resolve_service_PlayerBuilderJsResolveService","PlayerBuilderJsResolveService","PLAYER_CDN_URL","PLAYER_JS_SRC","headScripts","charset","player_builder_module___decorate","player_builder_module_LOCAL_PROVIDERS","player_builder_module_COMP","PlayerBuilderRoutes","bxplayer","docksLink","player_builder_module_PlayerBuilderModule","PlayerBuilderModule","lib","sanitize_html_pipe___decorate","sanitize_html_pipe___metadata","sanitize_html_pipe_SanitizeHtmlPipe","SanitizeHtmlPipe","bypassSecurityTrustHtml","sanitize_src_pipe___decorate","sanitize_src_pipe___metadata","sanitize_src_pipe_SanitizeSrcPipe","SanitizeSrcPipe","bypassSecurityTrustResourceUrl","sanitize_style_pipe___decorate","sanitize_style_pipe___metadata","sanitize_style_pipe_SanitizeStylePipe","SanitizeStylePipe","bypassSecurityTrustStyle","sanitize_pipe_module___decorate","sanitize_pipe_module_PIPES","sanitize_pipe_module_SanitizePipeModule","SanitizePipeModule","zip","player_embed_code_component___decorate","player_embed_code_component___metadata","player_embed_code_component_PlayerBuilderEmbedCodeComponent","PlayerBuilderEmbedCodeComponent","CODEMIRROR_CONFIG","readOnly","lineWrapping","lineNumbers","lineWiseCopyCut","indentUnit","previewScale","playerData","mediaUrls","splashImageUrl","adsVmapUrl","adsPrerollVastUrl","jsFrameCachBuster","playerIframeUrl","playerScriptUrl","playerId_1","embedcode","embed_player_page_url","player_js_url","iframeSrc","handleScriptFrameLoad","jsFrame","createplayer","scriptConfig","timeOffset","vast","codeToString","copyToClipboard","lineSeparator","iframeEmbedCode","scriptEmbedCodeDiv","scriptEmbedCodeScript","updateJsFrameCachBuster","formMediaUrlsChange","addMedia","canAddMedia","formMediaUrls","removeMedia","player_embed_code_module___decorate","PlayerEmbedCodeRoutes","player_embed_code_module_COMP","player_embed_code_module_PlayerEmbedCodeModule","PlayerEmbedCodeModule","player_embeder_service___decorate","player_embeder_service_PlayerEmbederService","PlayerEmbederService","player_embeder_view_component___extends","player_embeder_view_component___decorate","player_embeder_view_component___metadata","BsplayerName","player_embeder_view_component_PlayerEmbederView","PlayerEmbederView","showOptional","modelMandatoryNames","modelOptionalNames","modelAdsFieldsNames","modelFieldsCellWidth","mediaUrl","mediaUrl2","selectedType","IFRAME","embedCodeType","codemirrorConfig","embedCodeString","onTranslationChanged","has_ads_support","updateModelCache","DYNAMIC","onDropdownSelect","clearModelCache","toggleOptional","previewDynamic","formatTypeLabel","formatTypeIconNgClass","modelCache","generateIframeEmbedCode","generateDynamicEmbedCode","URL","playerModel","embedCodeHtml","JSON_ESCAPED_CONFIG","navigationBack","back","player_embeder_resolver___decorate","player_embeder_resolver___metadata","player_embeder_resolver_PlayerEmbederResolver","PlayerEmbederResolver","embeder","PlayerEmbederResolver_1","PLAYER_MODEL_CACHE_LIVETIME","player_embeder_module___decorate","PlayerEmbederRoutes","player_embeder_module_LOCAL_PROVIDERS","player_embeder_module_COMP","player_embeder_module_PlayerEmbederModule","PlayerEmbederModule","sidebar_module","HaxeTypes","PlayerConfiguratorPreviewState","player_configurator_parser_PlayerConfiguratorParser","PlayerConfiguratorParser","updateConfigWithColorScheme","colorScheme","withDefault","schemeNames","findRGB","fixForSkinMainColorBackwardCompatibility","bs","SkinAndColor","advance","populateConfigWithPlayerData","flat","flattenObject","flatKey","updateConfigByPath","addValueAttribute","config_1","mapGroups","nameMap","isAdvanceGroup","checkIfIsAdvanceGroup","isAdvance","advanceValue","getGroupAdvanceValue","isFormGroups","hasGrandChild","isForm","parseOutput","output","$lvl","resolveDependencies","config_2","multichoice","setKeyVal","mainConfig","resolveConfig","config_3","resolveDependency","getAdvanceGroupValue","updateAdvanceValue","rgbs","config_4","findPluginByName","findConfigByName","searchPath","config_5","mainConfig_1","objectPath","Bool","player_configurator_preview_video_service___decorate","player_configurator_preview_video_service___metadata","player_module__a","player_configurator_preview_video_service_PlayerConfiguratorPreviewVideoService","PlayerConfiguratorPreviewVideoService","enableSkinAutohide","playerStates","playerStateSource","mediaDuration","mediaPlayed","onVideoCurrentTimeChange","playerState","onVideoPlaying","middle","onVideoComplete","playerStateStream$","onRoutingChange","sb","findConfigValueByName","changeShareButtons","con","defaultColorSchemeCache","zebra","playerName","updateColorScheme","changePlayerState","changeSkinAutohide","searchName","skinConfig_getColorScheme","changeColor","force","skinConfig_updateColorBase","skinConfig_updateColorScheme","skinConfig_setPlayerState","skinConfig_disableAutohide","skinConfig_editShareButtons","endSplashName","shareButtons","skinConfig_editEndSplash","changeVolume","changeSkin","changeLogoFile","logo","logoImage","dispatchSkinConfigEditLogoEvent","changeLogoLink","link","changeLogoTarget","logoTarget","changeLogoXPosition","xPos","changeLogoYPosition","yPos","changeLogoAutohide","autohide","changeEndSplash","scheme","withColors","changePictureInPictureButtonVisibility","changeVideoCastEnabled","vol","skinConfig_updatePictureInPictureButtonVisible","skinConfig_updateVideoCastEnabled","skinConfig_editLogo","player_configurator_service___decorate","player_configurator_service___metadata","player_configurator_service_PlayerConfiguratorViewService","PlayerConfiguratorViewService","tickSubject","tickStream$","updateAt","playerConfig","configCacheSub","tick","playerDefaults","updateCaches","configCache","checkSkinColorReset","resetColorScheme","updatePlayerWithColorScheme","updateConfig","updatePreview","updateAdvanceGroupHidden","findConfigByPath","askSkinColorReset","askSkinColorResetCloseSub","configCacheSubscription","askSkinColorResetCloseSubscription","c_1","updatePlayerWithBaseColor","configColorScheme","player_configurator_form_groups___decorate","player_configurator_form_groups___metadata","player_configurator_form_groups_PlayerConfiguratorFormGroups","PlayerConfiguratorFormGroups","groups","advanceChange","state_1","updateAdvanceChange","ok","getInputNgClass","tree","activateSwitchModel","docsLink_component___extends","docsLink_component___decorate","docsLink_component___metadata","docsLink_component_DocsLinkComponent","DocsLinkComponent","player_configurator_form_inputs___decorate","player_configurator_form_inputs___metadata","player_configurator_form_inputs_PlayerConfiguratorFormInputs","PlayerConfiguratorFormInputs","dataDelimiter","hxType","showCursorWhenSelecting","matchBrackets","matchTags","showTrailingSpace","autoCloseBrackets","autoCloseTags","gutters","lint","resizeSubscription","tickSubscription","onResetData","onChangeData","RGB","baseColorPlugin","baseColorValue","formatCodeValue","pretty","getDropdownModel","stringToArray","getRadioIconMap","embed","mail","facebook","twitter","linkedin","isFull","isSmall","arrayToString","getImageGridUrlParser","[class.form-group-inputs-full]","[class.form-group-inputs-small]","[class.hidden]","player_configurator_form___decorate","player_configurator_form___metadata","player_configurator_form_PlayerConfiguratorForm","PlayerConfiguratorForm","player_configurator_save_service___decorate","player_configurator_save_service___metadata","player_configurator_save_service_PlayerConfiguratorSaveService","PlayerConfiguratorSaveService","configService","ask","savedSub","showError","askPublish","onYes","player_configurator_preview_video___decorate","player_configurator_preview_video___metadata","player_configurator_preview_video_PlayerConfiguratorPreviewVideo","PlayerConfiguratorPreviewVideo","resize","player_configurator_preview___extends","player_configurator_preview___decorate","player_configurator_preview___metadata","player_configurator_preview_PlayerConfiguratorPreview","PlayerConfiguratorPreview","handlePlayerState","foot","bodySize","saveChanges","setPlayerState","player_configurator_view___decorate","player_configurator_view___metadata","player_configurator_view_PlayerConfiguratorViewComponent","PlayerConfiguratorViewComponent","colorpickers","parseSidebar","outlet","parseRoutes","routeConfig","mapRoutes","initialNavigation","routes","mapSidebar","noHoverIcon","mapSidebarName","mapSidebarIcon","player_configurator_deactivate_guard___decorate","player_configurator_deactivate_guard___metadata","player_configurator_deactivate_guard_PlayerConfiguratorCanDeactivateService","PlayerConfiguratorCanDeactivateService","currentRoute","player_configurator_resolve_config___decorate","player_configurator_resolve_config___metadata","player_configurator_resolve_config_PlayerConfiguratorResolveConfig","PlayerConfiguratorResolveConfig","readedPlayer","player_configurator_resolve_defaults___decorate","player_configurator_resolve_defaults___metadata","player_configurator_resolve_defaults_PlayerConfiguratorResolveDefaults","PlayerConfiguratorResolveDefaults","player_configurator_resolve_sources___decorate","player_configurator_resolve_sources___metadata","player_configurator_resolve_sources_PlayerConfiguratorResolveSources","PlayerConfiguratorResolveSources","playersPath","playersExtension","actualPlayer","subject","loadNext","cacheBuster","exist","player_configurator_activate_guard___decorate","player_configurator_activate_guard___metadata","player_configurator_activate_guard_PlayerConfiguratorActivateGuard","PlayerConfiguratorActivateGuard","gotoBuilder","player_configurator_module___decorate","PlayerConfiguratorRoutes","playerSources","player_configurator_module_LOCAL_PROVIDERS","player_configurator_module_COMP","player_configurator_module_PlayerConfiguratorModule","PlayerConfiguratorModule","player_list_sort_pipe___decorate","player_list_sort_pipe_SortPlayerListPipe","SortPlayerListPipe","aa","by","bb","player_list_view_component___extends","player_list_view_component___decorate","player_list_view_component___metadata","player_list_view_component_PlayerListViewComponent","PlayerListViewComponent","embederService","isV2","sortModel","cellClass","col-lg-5","col-md-4","col-sm-4","col-xs-12","cell","cell-name","col-lg-1","col-xs-6","cell-created","cell-updated","col-md-12","col-sm-12","cell-buttons","isAnyItemSelected","selectedItemCount","selectedItems","resizeSub","listSub","cloneSub","deleteSub","onItemClickSelect","isAnySelected","selectedCount","formatSortIconObject","fa-sort","askClone","updateSelectedItems","cloneSelected","clonned","fetchPlayersPipe","askDelete","deleteSelected","askNew","addNew","setUpEmbeder","download_player_js_v2_directive___decorate","download_player_js_v2_directive___metadata","download_player_js_v2_directive_DownloadPlayerJsV2Directive","DownloadPlayerJsV2Directive","mime","working","fetchSub","blobUrl","revokeObjectURL","responseType","Blob","blob","createObjectURL","reclick","e1","evt","createEvent","initMouseEvent","e2","player_list_module___decorate","PlayerListRoutes","player_list_module_COMP","player_list_module_PlayerListModule","PlayerListModule","player_versions_view_component___extends","player_versions_view_component___decorate","player_versions_view_component___metadata","player_versions_view_component_PlayerVersionsView","PlayerVersionsView","EMBED_CODE_LINK","unixMs","formatDaysAgo","daysAgo","formatAttr","playerVersions","player_versions_resolver___decorate","player_versions_resolver___metadata","player_versions_resolver_PlayerVersionsResolver","PlayerVersionsResolver","player_versions_module___decorate","PlayerVersionsRoutes","player_versions_module_LOCAL_PROVIDERS","player_versions_module_COMP","player_versions_module_PlayerVersionsModule","PlayerVersionsModule","player_list_resolve_service___decorate","player_list_resolve_service___metadata","player_list_resolve_service_PlayerListResolveService","PlayerListResolveService","player_module___decorate","PlayerRoutes","playersList","player_module_LOCAL_PROVIDERS","player_module_PlayerModule","PlayerModule","account_products_resolver_service___decorate","account_products_resolver_service___metadata","account_products_resolver_service_AccountProductsResolverService","AccountProductsResolverService","products_resolver_service___decorate","products_resolver_service___metadata","products_resolver_service_ProductsResolverService","ProductsResolverService","getProducts","products_view_component","products_module___decorate","products_module_routes","products_module_ProductsModule","ProductsModule","subscription_guard___decorate","subscription_guard___metadata","subscription_guard_SubscriptionGuard","SubscriptionGuard","subscriptionId","braintreeIntegration","buyCookie_service","subscription_view_component___extends","subscription_view_component___decorate","subscription_view_component___metadata","subscription_view_component_SubscriptionView","SubscriptionView","braintreeIsReady","paymentError","subscriptionError","currentStep","subscriptionFinished","termsAccepted","SubscriptionView_1","resolverSubscription","isPaidPlan","subscriptionOrder","gross","setupBrainTree","paramsSubscription","modalSubscription","goToProductsView","goToAccountView","goToPlayerView","goToStep","stepId","showTermsAndConditions","onPaymentFormSubmit","threeDSecureParameters","paymentErrorMessage","braintreeNonce","finishSubscription","accept","bt_payment_method_nonce","finishSubscriptionOrder","showThanks","dropinInstance","subscription_resolver___decorate","subscription_resolver___metadata","subscription_resolver_SubscriptionResolver","SubscriptionResolver","getSubscriptionOrder","getBraintreeClientToken","subscription_module___decorate","subscription_module_routes","subscription_module_SubscriptionModule","SubscriptionModule","header_service","login_service___extends","login_service___decorate","login_service___metadata","login_service_LoginService","LoginService","login","fail","urlPath","access_token","logout","logoutSuccess","isMobile","ContentConfig","ContentConfigData","mobile","alt","content_model","content_component___decorate","content_component___metadata","content_component___param","content_component_ContentComponent","ContentComponent","setHeaderLabel","analyticsMenu","hasStatsModule","isBeta","setupDefault","userDataChanged","showGdprInfo","moduleName","statsModules","[class.out]","[class.in]","content_resolver___decorate","content_resolver___metadata","content_resolver_ContentResolver","ContentResolver","content_content_module___decorate","content_content_module_routes","content_module_ContentModule","ContentModule","login_view___extends","login_view___decorate","login_view___metadata","login_view_LoginView","LoginView","rememberMe","currentYear","accessTokenMatch","redirectUrlMatch","initAfterBackRedirectionComplete","initWithDebouncer","autologinWithAccessTokenFromUrl","loginSucceed","loginFail","rememberMeChange","checkAutocomplete","rememberMeLabel","autocomplete","can_activete_login_guard___decorate","can_activete_login_guard___metadata","can_activete_login_guard___param","can_activete_login_guard_CanActivateLogin","CanActivateLogin","rel","can_deactivete_login_guard___decorate","can_deactivete_login_guard___metadata","can_deactivete_login_guard___param","can_deactivete_login_guard_CanDeactivateLogin","CanDeactivateLogin","_component","login_module___decorate","login_module_routes","login_module_LoginModule","LoginModule","spinner_component___decorate","spinner_component___metadata","spinner_component_SpinnerComponent","SpinnerComponent","bodySpinnerSub","spinner_module___decorate","spinner_module_SpinnerModule","SpinnerModule","cookie_service","localstorage_service","app","app_config","app_model","app_localization___decorate","app_localization___metadata","app_localization___param","app_localization_LocalizationConfig","LocalizationConfig","langs","jsonCtx","availableTranslations","tc","providerName","filename","trans","app_module_AppModule","app_module___decorate","app_module___metadata","AppModule","appRef","hmrOnInit","restoreInputValues","hmrOnDestroy","cmpLocation","disposeOldHosts","hmrAfterDestroy","enableTracing","344","LocalStorageService","345","TermsModalComponent","346","HeaderModule","__WEBPACK_IMPORTED_MODULE_0__angular_common__","__WEBPACK_IMPORTED_MODULE_2__angular_router__","__WEBPACK_IMPORTED_MODULE_3__sidebar_sidebar_module__","__WEBPACK_IMPORTED_MODULE_4____","__WEBPACK_IMPORTED_MODULE_5__header_burger_component__","__WEBPACK_IMPORTED_MODULE_6__header_menu_component__","347","HeaderMenuComponent","__WEBPACK_IMPORTED_MODULE_3__header_service__","__WEBPACK_IMPORTED_MODULE_4__util_dom_util__","closeAll","onDocumentClick","348","BurgerComponent","349","ModalComponent","__WEBPACK_IMPORTED_MODULE_2__modal_model__","__WEBPACK_IMPORTED_MODULE_3__modal_service__","ExceptionService","__WEBPACK_IMPORTED_MODULE_0_rxjs_add_operator_map__","__WEBPACK_IMPORTED_MODULE_2__angular_http__","__WEBPACK_IMPORTED_MODULE_3__auth_service__","__WEBPACK_IMPORTED_MODULE_4__view_service__","access","isSendingReport","groupCollapsed","print","groupEnd","stackTrace","stack","350","forms_1","CodeMirror","cursorActivity","codemirrorInit","fromTextArea","updateValue","NG_VALUE_ACCESSOR","forwardRef","351","SidebarService","__WEBPACK_IMPORTED_MODULE_2__model_api_model__","__WEBPACK_IMPORTED_MODULE_3__module_player_model_player_model__","openSubject","cache","playersMenuData","playerListRoute","v1plublished","zip_url","v2plublished","BradmaxApi","__WEBPACK_IMPORTED_MODULE_3__angular_http__","__WEBPACK_IMPORTED_MODULE_4__auth_service__","__WEBPACK_IMPORTED_MODULE_5__exception_service__","__WEBPACK_IMPORTED_MODULE_6__url_service__","__WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_catch__","formatUrl","put","urlWithoutQuery","paramsFromQuery","concatParams","parsedError","ProductService","__WEBPACK_IMPORTED_MODULE_1__angular_http__","__WEBPACK_IMPORTED_MODULE_3__api_service__","lastUsageStats","updateProductPlanPaymentMethod","productPlanId","client_plan_id","bt_pm_nonce","DOMUtil","UserService","__WEBPACK_IMPORTED_MODULE_3_rxjs_BehaviorSubject__","__WEBPACK_IMPORTED_MODULE_4_rxjs_Subject__","__WEBPACK_IMPORTED_MODULE_5__api_service__","__WEBPACK_IMPORTED_MODULE_6__auth_service__","__WEBPACK_IMPORTED_MODULE_7__exception_service__","__WEBPACK_IMPORTED_MODULE_8__url_service__","__WEBPACK_IMPORTED_MODULE_9_moment__","__WEBPACK_IMPORTED_MODULE_9_moment___default","dateRangeSelection","startDateTs","endDateTs","mapUserResponseToUser","notifyUserDataChanged","company","statsModulesByKeys","userResponse","default_account","company_name_cache","stats_modules","areTechStatsEnabled","areMediaStatsEnabled","areAdsStatsEnabled","areGeoStatsEnabled","PaymentsService","__WEBPACK_IMPORTED_MODULE_4__exception_service__","updatePaymentMethod","SubscriptionService","SubscriptionStatuses","AccountService","__WEBPACK_IMPORTED_MODULE_3_rxjs_Subject__","__WEBPACK_IMPORTED_MODULE_4__api_service__","__WEBPACK_IMPORTED_MODULE_5__auth_service__","__WEBPACK_IMPORTED_MODULE_6__exception_service__","__WEBPACK_IMPORTED_MODULE_7__url_service__","accountDetails","isAccountDetailsValidForPayments","owner","AbstractModalComponent","PlayerRoute","PlayerRouteParam","PlayerRouteData","isEmptyInputValue","isPresent","toObservable","__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__","_executeValidators","control","_executeAsyncValidators","_mergeErrors","arrayOfErrors","_isAndroid","__WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__","normalizeValidator","normalizeAsyncValidator","unimplemented","_buildValueString","_extractId","valueString","_buildValueString$1","_extractId$1","controlPath","setUpControl","_throwError","valueAccessor","Validators","asyncValidator","composeAsync","viewToModelUpdate","markAsDirty","emitModelToViewChange","markAsTouched","emitModelEvent","setDisabledState","registerOnDisabledChange","_rawValidators","registerOnValidatorChange","updateValueAndValidity","_rawAsyncValidators","cleanUpControl","_noControlError","_clearChangeFns","setUpFormContainer","messageEnd","composeValidators","composeAsyncValidators","isPropertyUpdated","viewModel","isBuiltInAccessor","BUILTIN_ACCESSORS","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","DefaultValueAccessor","_find","delimiter","FormGroup","FormArray","at","coerceToValidator","coerceToAsyncValidator","_hasInvalidParent","FormGroupName","FormGroupDirective","FormArrayName","AbstractControlDirective","AbstractFormGroupDirective","CheckboxControlValueAccessor","ControlContainer","COMPOSITION_BUFFER_MODE","NgControl","NgControlStatus","NgControlStatusGroup","NgForm","NgModel","NgModelGroup","RadioControlValueAccessor","FormControlDirective","FormControlName","NgSelectOption","SelectControlValueAccessor","SelectMultipleControlValueAccessor","CheckboxRequiredValidator","EmailValidator","MaxLengthValidator","MinLengthValidator","PatternValidator","RequiredValidator","FormBuilder","AbstractControl","FormControl","NG_ASYNC_VALIDATORS","NG_VALIDATORS","FormsModule","ReactiveFormsModule","InternalFormsSharedModule","REACTIVE_DRIVEN_DIRECTIVES","SHARED_FORM_DIRECTIVES","TEMPLATE_DRIVEN_DIRECTIVES","CHECKBOX_VALUE_ACCESSOR","DEFAULT_VALUE_ACCESSOR","AbstractControlStatus","ngControlStatusHost","formDirectiveProvider","formControlBinding","modelGroupProvider","NgNoValidate","NUMBER_VALUE_ACCESSOR","NumberValueAccessor","RADIO_VALUE_ACCESSOR","RadioControlRegistry","RANGE_VALUE_ACCESSOR","RangeValueAccessor","formControlBinding$1","controlNameBinding","formDirectiveProvider$1","formArrayNameProvider","formGroupNameProvider","SELECT_VALUE_ACCESSOR","NgSelectMultipleOption","SELECT_MULTIPLE_VALUE_ACCESSOR","CHECKBOX_REQUIRED_VALIDATOR","EMAIL_VALIDATOR","MAX_LENGTH_VALIDATOR","MIN_LENGTH_VALIDATOR","PATTERN_VALIDATOR","REQUIRED_VALIDATOR","__WEBPACK_IMPORTED_MODULE_0_tslib__","__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__","__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__","invalid","pending","pristine","touched","untouched","getError","EMAIL_REGEXP","requiredTrue","requiredLength","actualLength","maxLength","nullValidator","regexStr","requiredPattern","actualValue","presentValidators","observables","_elementRef","(change)","(blur)","_compositionMode","_composing","_handleInput","_compositionStart","_compositionEnd","(compositionstart)","(compositionend)","_parent","_accessors","accessor","_isSameGroup","fireUncheck","controlPair","_control","_registry","_injector","_checkName","_fn","formControlName","_throwNameError","_optionMap","_idCounter","_compareWith","_getOptionId","_getOptionValue","_registerOption","compareWith","_element","_select","_setElementValue","ngValue","optionSelectedStateSetter","ids_1","opt","_setSelected","selectedOptions","_checkParentType","addFormGroup","formDirective","removeFormGroup","getFormGroup","_validators","_asyncValidators","cd","_cd","[class.ng-untouched]","[class.ng-touched]","[class.ng-pristine]","[class.ng-dirty]","[class.ng-valid]","[class.ng-invalid]","[class.ng-pending]","_onCollectionChange","_pristine","_touched","_onDisabledChange","_status","_errors","_valueChanges","_statusChanges","newValidator","clearValidators","clearAsyncValidators","opts","onlySelf","markAsUntouched","_forEachChild","_updateTouched","markAsPristine","_updatePristine","markAsPending","_updateValue","_updateAncestors","changeFn","setParent","patchValue","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","_updateTreeValidity","ctrl","_allControlsDisabled","_asyncValidationSubscription","_updateControlsErrors","_initObservables","_anyControlsHaveStatus","_anyControls","_anyControlsDirty","_anyControlsTouched","_isBoxedValue","formState","_registerOnCollectionChange","_onChange","_applyFormState","emitViewToModelChange","_setUpControls","registerControl","addControl","removeControl","setControl","controlName","_checkAllValuesPresent","_throwIfControlMissing","getRawValue","_reduceChildren","_reduceValue","initValue","_registerControl","insert","removeAt","resolvedPromise","_submitted","ngSubmit","_findContainer","updateModel","onReset","resetForm","(submit)","(reset)","FormErrorExamples","formGroupName","formArrayName","ngModelGroup","ngModelWithFormGroup","TemplateDrivenErrors","modelParentException","formGroupNameException","missingNameException","modelGroupParentException","resolvedPromise$1","_registered","_checkForErrors","_setUpControl","_updateDisabled","_isStandalone","_setUpStandalone","standalone","disabledValue","ReactiveErrors","controlParentException","ngModelGroupException","missingFormException","groupParentException","arrayParentException","disabledAttrWarning","_isControlChanged","directives","_checkFormPresent","_updateValidators","_updateDomValue","_updateRegistrations","addFormArray","removeFormArray","getFormArray","newCtrl","_oldForm","sync","_added","_required","[attr.required]","_enabled","_createValidator","_validator","[attr.minlength]","[attr.maxlength]","[attr.pattern]","controlsConfig","extra","_reduceControls","_createControl","controlConfig","novalidate","TabService","navigatedTo"],"mappings":"AAAAA,cAAc,IAERC,IACA,SAAUC,EAAQC,KAMlBC,IACA,SAAUF,EAAQC,GCVxBD,EAAAC,SAAkBE,kBAAoBC,IAAMC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,SAAgVC,IAAOC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,SAAgiBC,IAAOC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,OAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,QAAAC,QAAA,SAA+NC,IAAOC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,OAAAC,QAAA,SAAqLC,gBAAmBC,IAAMC,UAAA,eAAAC,UAAA,eAAAC,UAAA,QAAAC,UAAA,QAAAC,UAAA,QAAAC,UAAA,eAAAC,UAAA,sBAAAC,UAAA,QAAAC,UAAA,eAAAC,UAAA,sBAAAC,UAAA,eAAAC,UAAA,QAAAC,UAAA,SAAySC,IAAOC,QAAA,wCAAAC,QAAA,gGAAAC,QAAA,iDAAAC,QAAA,2BAAmPC,aAAgBC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,KDgB34DC,IACA,SAAUpI,EAAQC,KASlBoI,IACA,SAAUrI,EAAQsI,EAAqBC,GAE7C,YEuIO,SAAAC,GAAoBC,GAAoB,MAAY,OAALA,GAAa,eAAiBA,IAAuB,MAAlBA,EAAEC,YA4BpF,QAAAC,GAAgCF,GAAsC,MAAOD,GAAWC,GA5B/FH,EAAA,EAAAE,EAAAF,EAAA,EAAAK,GF9HMC,KACA,SAAU5I,EAAQC,EAASsI,GGtChCvI,EAAOC,QAAUsI,EAAQ,OHgDpBM,KACA,SAAU7I,EAAQsI,EAAqBC,GAE7C,YI9CO,SAAAO,KACJ,MAAOC,QAAAC,EAAA,KAAyBC,gBAAgBC,EAAA,GJ8CnDH,OAAOI,eAAeb,EAAqB,cAAgBc,OAAO,GAGlE,IAAIC,GAAWd,EAAoB,GAG/BS,EAA+BT,EAAoB,KAmBnDW,EAAaX,EAAoB,II9ErCD,GAAA,KAAAQ,EAUAC,OAAAM,EAAA,kBCPO,SAAAP,GACP,OAAAQ,SAAAC,YACA,cACAD,SAAAE,iBAAA,8BAAuE,MAAAV,MACvE,MACA,mBACA,eACA,QACAA,MDAWA,IJoFLW,KACA,SAAUzJ,EAAQC,EAASsI,GAEjC,YMjGA,SAAAmB,GAAAC,GACA,OAAAC,KAAAD,GAAA1J,EAAA4J,eAAAD,KAAA3J,EAAA2J,GAAAD,EAAAC,IAEAb,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAE9CM,EAASnB,EAAQ,OACjBmB,EAASnB,EAAQ,OACjBmB,EAASnB,EAAQ,QNwGXuB,KACA,SAAU9J,EAAQC,EAASsI,GAEjC,YOhHA,SAAAwB,GAAAC,GACA,MAAAA,GAEA,QAAAC,GAAAnB,EAAAoB,EAAAC,GAUA,QAAAC,KACAd,SAAAe,oBAAA,mBAAAD,GACAD,EAAArB,EAAAoB,EAAAX,KAXA,mBAAAT,GAAA,CACA,GAAAwB,GAAAxB,MACAoB,GAAApB,EAAAoB,OACAC,EAAArB,EAAAqB,MACArB,EAAAwB,EAEAJ,KAAAH,EACAI,KAAAJ,CACA,IAAAR,GAAAD,SAAAC,UAKA,QAAAA,GACA,cACAD,SAAAE,iBAAA,mBAAAY,EACA,MACA,mBACA,eACA,QACAD,EAAArB,EAAAoB,EAAAX,MAKA,QAAAgB,GAAAC,GACA,GAAAC,GAAAC,MAAAC,UAAAC,IAAAC,KAAAL,EAAA,SAAAM,GAMA,QAAAC,KACAC,EAAAC,MAAAC,QAAAC,CACA,KACAC,EAAAC,YAAAP,GAEA,MAAAQ,KAVA,GAAAN,GAAA1B,SAAAiC,cAAAT,EAAAU,SACAJ,EAAAN,EAAAM,WACAD,EAAAH,EAAAC,MAAAC,OAUA,OATAF,GAAAC,MAAAC,QAAA,OACAE,EAAAK,aAAAT,EAAAF,GAQAC,GAEA,mBACAN,EAAAiB,QAAA,SAAAX,GAAqD,MAAAA,QAKrD,QAAAY,KACA,GAAAC,GAAAtC,SAAAuC,KACAC,EAAAF,EAAAG,iBAAA,QACArB,OAAAC,UAAAqB,MAAAnB,KAAAiB,GAEAG,OAAA,SAAAhB,GAAkC,WAAAA,EAAAiB,UAAAC,QAAA,SAClCvB,IAAA,SAAAwB,GAA4B,MAAAR,GAAAP,YAAAe,KAI5B,QAAAC,KACA,GAAAC,GAAAhD,SAAAyC,iBAAA,QAEA,OADArB,OAAAC,UAAAqB,MAAAnB,KAAAyB,GACA1B,IAAA,SAAA2B,GAAwC,MAAAA,GAAAnD,QAIxC,QAAAoD,GAAAF,GACA,GAAAG,GAAAnD,SAAAyC,iBAAA,QACAO,IAAAG,EAAAC,SAAAJ,EAAAI,SACAJ,EAAAZ,QAAA,SAAAtC,EAAAuD,GACA,GAAAP,GAAAK,EAAAE,EACAP,GAAAhD,QACAgD,EAAAQ,cAAA,GAAAC,aAAA,SAAuDC,OAAAV,EAAAhD,WAGvDkD,EAAAI,OAAA,GAKA,QAAAK,KACA,GAAAT,GAAAD,GACA,mBACA,MAAAG,GAAAF,IAvFAvD,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IA6B9CnJ,EAAAgK,aAsBAhK,EAAAsK,iBAUAtK,EAAA0L,iBAOA1L,EAAAoM,iBAcApM,EAAAuM,iBAQAvM,EAAA8M,uBPyHMC,IACA,SAAUhN,EAAQC,EAASsI,GAEjC,YQtNAQ,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,GAC9C,IAAA6D,GAAa1E,EAAQ,GACrB2E,EAAa3E,EAAQ,GACrB4E,EAAe5E,EAAQ,GACvB6E,EAAe7E,EAAQ,GACvB8E,EAAY9E,EAAQ,MACpB+E,EAAA,WACA,QAAAA,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GACAC,KAAAd,UACAc,KAAAb,WACAa,KAAAZ,OACAY,KAAAX,oBACAW,KAAAC,cACAD,KAAAE,kCAAA,EACAF,KAAAG,6BAAA,EACAH,KAAAI,6BAAA,EACAJ,KAAAK,iBAAA,KACAL,KAAAM,kBAAA,KACAN,KAAAO,cAAA,EACAP,KAAAP,oBAAA,IACAO,KAAAH,6BAAA,EACAG,KAAAQ,qBAAA,IACAR,KAAAS,UACAT,KAAAU,aAAA,SAAAC,EAAAC,GAAqD,MAAAD,KAAAC,GACrDZ,KAAAa,OAAA,GAAAjC,GAAAkC,aACAd,KAAAe,SAAA,GAAAnC,GAAAkC,aACAd,KAAAgB,OAAA,GAAApC,GAAAkC,aACAd,KAAAiB,SAAA,GAAArC,GAAAkC,aACAd,KAAAkB,MAAA,GAAAtC,GAAAkC,aACAd,KAAAmB,QAAA,GAAAvC,GAAAkC,aACAd,KAAAoB,IAAA,GAAAxC,GAAAkC,aACAd,KAAAqB,MAAA,GAAAzC,GAAAkC,aACAd,KAAAsB,yBAAA,EACAtB,KAAAuB,0BAAA,EACAvB,KAAAwB,QAAA,EACAxB,KAAAyB,oBACAzB,KAAA0B,eAAA,EACA1B,KAAA2B,6BAAA,EACA3B,KAAA4B,sBAAA9C,EAAA+C,iBAAAvC,GACAU,KAAAT,qBAAA,mBAAAA,EAAA,EACAS,KAAAR,mBAAA,mBAAAA,EAAA,EACA,qBACAQ,KAAAP,uBAEA,qBACAO,KAAAN,kBAEA,qBACAM,KAAAL,mBAEA,qBACAK,KAAAJ,uBAEA,qBACAI,KAAAH,gCAEAG,KAAAF,mCAAA,EACA,sBACAE,KAAAF,qCAEAE,KAAAD,cAAA,EACA,sBACAC,KAAAD,gBAEAC,KAAA8B,YAAA,EACA9B,KAAA+B,2BAk6BA,MAh6BArH,QAAAI,eAAAmE,EAAA3C,UAAA,gBACA0F,IAAA,WACA,GAAAC,GAAAjC,KAAAyB,oBACA,QACAS,WAAAD,EAAAC,YAAA,EACAC,SAAAF,EAAAE,UAAA,EACAC,oBAAAH,EAAAG,qBAAA,EACAC,kBAAAJ,EAAAI,mBAAA,EACAC,kBAAAL,EAAAK,mBAAA,EACAC,qBAAAN,EAAAM,sBAAA,EACAC,mBAAAP,EAAAO,oBAAA,IAGAC,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAAmE,EAAA3C,UAAA,8BACA0F,IAAA,WACA,MAAAhC,MAAAG,6BAEAwC,IAAA,SAAA5H,GACAiF,KAAAG,8BAAApF,IAGAiF,KAAAG,4BAAApF,EACAiF,KAAA4C,0BAAAC,GACA7C,KAAA8C,2BAAAD,KAEAJ,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAAmE,EAAA3C,UAAA,gBACA0F,IAAA,WACA,MAAAe,MAAAC,IAAAhD,KAAAO,cAAAP,KAAAiD,2BAAA,MAEAN,IAAA,SAAA5H,GACAiF,KAAAO,cAAAxF,GAEA0H,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAAmE,EAAA3C,UAAA,wBACA0F,IAAA,WACA,MAAAhC,MAAAkD,uBAEAP,IAAA,SAAA5H,GACAiF,KAAAkD,sBAAAnI,EACAiF,KAAAmD,0BAEAV,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAAmE,EAAA3C,UAAA,sBACA0F,IAAA,WACA,MAAAhC,MAAAoD,qBAEAT,IAAA,SAAA5H,GACAiF,KAAAoD,oBAAArI,EACAiF,KAAAmD,0BAEAV,YAAA,EACAC,cAAA,IAEAzD,EAAA3C,UAAA6G,uBAAA,WACA,GAAAE,GAAArD,IACAA,MAAAR,mBACAQ,KAAAsD,SAAAtD,KAAAuD,SAAA,WACAF,EAAAG,kBAAA,IACaxD,KAAAR,oBAEbQ,KAAAT,qBACAS,KAAAsD,SAAAtD,KAAAyD,iBAAA,WACAJ,EAAAG,kBAAA,IACaxD,KAAAT,sBAGbS,KAAAsD,SAAA,WACAD,EAAAG,kBAAA,KAIA9I,OAAAI,eAAAmE,EAAA3C,UAAA,uBACA0F,IAAA,WACA,MAAAhC,MAAAQ,sBAEAmC,IAAA,SAAA5H,GACAiF,KAAAQ,uBAAAzF,IAGAiF,KAAAQ,qBAAAzF,EACAiF,KAAA0D,2BAEAjB,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAAmE,EAAA3C,UAAA,SACA0F,IAAA,WACA,MAAAhC,MAAAS,QAEAkC,IAAA,SAAA5H,GACAA,IAAAiF,KAAAS,SAGAT,KAAAS,OAAA1F,MACAiF,KAAAwD,kBAAA,KAEAf,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAAmE,EAAA3C,UAAA,cACA0F,IAAA,WACA,MAAAhC,MAAA2D,aAEAhB,IAAA,SAAA5H,GACAiF,KAAA2D,YAAA5I,EACAiF,KAAA4D,mBAEAnB,YAAA,EACAC,cAAA,IAEAzD,EAAA3C,UAAAuH,uBAAA,WACA,GAAAC,GAAA9D,KAAA+D,kBACAD,IAAA9D,KAAAgE,0BACAF,EAAAlH,MAAA,cAAAoD,KAAAgE,wBAAAC,EACAH,EAAAlH,MAAA,cAAAoD,KAAAgE,wBAAAE,GAEAlE,KAAAgE,4BAAAnB,IAEAnI,OAAAI,eAAAmE,EAAA3C,UAAA,gBACA0F,IAAA,WACA,MAAAhC,MAAAmE,eAEAxB,IAAA,SAAA5H,GACA,GAAAiF,KAAAmE,gBAAApJ,EAAA,CAGAiF,KAAA6D,yBACA7D,KAAAmE,cAAApJ,EACAiF,KAAA0D,wBACA,IAAAI,GAAA9D,KAAA+D,kBACA/D,MAAAF,mCAAAgE,IAAA9D,KAAAd,QAAAkF,gBACApE,KAAAgE,yBAAgDE,EAAAJ,EAAAlH,MAAA,cAAAqH,EAAAH,EAAAlH,MAAA,eAChDkH,EAAAlH,MAAA,cAAAoD,KAAA8B,WAAA,iBACAgC,EAAAlH,MAAA,cAAAoD,KAAA8B,WAAA,oBAGAW,YAAA,EACAC,cAAA,IAEAzD,EAAA3C,UAAA+H,SAAA,WACArE,KAAA0D,0BAEAzE,EAAA3C,UAAAgI,YAAA,WACAtE,KAAAuE,4BACAvE,KAAA6D,0BAEA5E,EAAA3C,UAAAkI,YAAA,SAAAC,GACA,GAAAC,GAAA1E,KAAA2E,oBAAA3E,KAAA4E,MAAAvG,MACA2B,MAAA2E,kBAAA3E,KAAA4E,MAAAvG,MACA,IAAAwG,IAAAJ,EAAAG,QAAAH,EAAAG,MAAAE,eAAA,IAAAL,EAAAG,MAAAE,cAAAzG,MACA2B,MAAAwD,iBAAAkB,GAAAG,IAEA5F,EAAA3C,UAAAyI,UAAA,WACA/E,KAAA2E,oBAAA3E,KAAA4E,MAAAvG,SACA2B,KAAA2E,kBAAA3E,KAAA4E,MAAAvG,OACA2B,KAAAwD,kBAAA,KAGAvE,EAAA3C,UAAA0I,QAAA,WACAhF,KAAAwD,kBAAA,IAEAvE,EAAA3C,UAAA2I,gCAAA,WACAjF,KAAAkF,qBACAC,4BACAC,iCAAA,EACAC,+BAAA,EACAC,gCAAA,GAEAtF,KAAA4C,0BAAAC,GACA7C,KAAA8C,2BAAAD,GACA7C,KAAAwD,kBAAA,IAEAvE,EAAA3C,UAAAiJ,mCAAA,SAAAC,GACA,GAAAxF,KAAAiD,2BAAA,CACA,GAAAwC,GAAAzF,KAAA4E,OAAA5E,KAAA4E,MAAA9G,QAAA0H,EACAC,IAAA,GACAzF,KAAA0F,mCAAAD,OAIAzF,MAAA4C,0BAAAC,GACA7C,KAAA8C,2BAAAD,EAEA7C,MAAAwD,kBAAA,IAEAvE,EAAA3C,UAAAoJ,mCAAA,SAAAD,GACA,GAAAzF,KAAAiD,2BAAA,CACA,GAAA0C,GAAA3F,KAAAkF,oBAAAC,yBAAAM,EACAE,KACA3F,KAAAkF,oBAAAC,yBAAAM,OAAA5C,KACA7C,KAAAkF,oBAAAE,iCACApF,KAAAkF,oBAAAG,gCAAAM,EAAAC,YAAA,EACA5F,KAAAkF,oBAAAI,iCAAAK,EAAAE,aAAA,OAIA7F,MAAA4C,0BAAAC,GACA7C,KAAA8C,2BAAAD,EAEA7C,MAAAwD,kBAAA,IAEAvE,EAAA3C,UAAAwJ,WAAA,SAAAN,EAAAO,EAAAC,EAAAC,EAAAC,OACA,KAAAH,IAA0CA,GAAA,OAC1C,KAAAC,IAA0CA,EAAA,OAC1C,KAAAC,IAA+CA,MAAApD,QAC/C,KAAAqD,IAAoDA,MAAArD,GACpD,IAAA4C,GAAAzF,KAAA4E,MAAA9G,QAAA0H,IACA,IAAAC,GAGAzF,KAAAmG,cAAAV,EAAAM,EAAAC,EAAAC,EAAAC,IAEAjH,EAAA3C,UAAA6J,cAAA,SAAAV,EAAAM,EAAAC,EAAAC,EAAAC,GACA,GAAA7C,GAAArD,SACA,KAAA+F,IAA0CA,GAAA,OAC1C,KAAAC,IAA0CA,EAAA,OAC1C,KAAAC,IAA+CA,MAAApD,QAC/C,KAAAqD,IAAoDA,MAAArD,GACpD,IAAAuD,GAAA,EACAC,EAAA,WAEA,KADAD,GACA,EAIA,YAHAF,GACAA,IAIA,IAAAI,GAAAjD,EAAAkD,sBACAC,EAAAzD,KAAA0D,IAAA1D,KAAAC,IAAAyC,EAAA,GAAAa,EAAAI,UAAA,EACA,IAAArD,EAAA5B,iBAAAS,aAAAsE,EAIA,YAHAN,GACAA,IAIA7C,GAAAsD,uBAAAlB,EAAAM,EAAAC,EAAA,EAAAK,GAEArG,MAAA2G,uBAAAlB,EAAAM,EAAAC,EAAAC,EAAAI,IAEApH,EAAA3C,UAAAqK,uBAAA,SAAAlB,EAAAM,EAAAC,EAAAC,EAAAC,OACA,KAAAH,IAA0CA,GAAA,OAC1C,KAAAC,IAA0CA,EAAA,OAC1C,KAAAC,IAA+CA,MAAApD,QAC/C,KAAAqD,IAAoDA,MAAArD,IACpDoD,MAAApD,KAAAoD,EAAAjG,KAAAP,oBAAAwG,CACA,IAAAK,GAAAtG,KAAAuG,sBACAK,EAAA5G,KAAA6G,iBAAApB,EAAAa,GAAAN,CACAD,KACAa,GAAAN,EAAAQ,kBAAAR,EAAAtG,KAAA+G,kBAEA/G,KAAAgH,iBAAAJ,EAAAX,EAAAC,IAEAjH,EAAA3C,UAAA0K,iBAAA,SAAAC,EAAAhB,EAAAC,GACA,GAAA7C,GAAArD,SACA,KAAAiG,IAA+CA,MAAApD,QAC/C,KAAAqD,IAAoDA,MAAArD,IACpDoE,GAAAjH,KAAAkH,oBACAjB,MAAApD,KAAAoD,EAAAjG,KAAAP,oBAAAwG,CACA,IACAkB,GADArD,EAAA9D,KAAA+D,kBAMA,IAJA/D,KAAAoH,eACApH,KAAAoH,aAAAC,OACArH,KAAAoH,iBAAAvE,KAEAoD,EAGA,MAFAjG,MAAAb,SAAAmI,YAAAxD,EAAA9D,KAAAuH,YAAAN,OACAjH,MAAAwD,kBAAA,EAAA0C,EAGA,IAAAsB,IAA8BP,eAAAnD,EAAA9D,KAAAuH,cAC9BE,EAAA,GAAAzI,GAAA0I,MAAAF,GACAG,IAAiBV,kBAAiChB,GAClD2B,OAAA5I,EAAA6I,OAAAC,UAAAC,KACAC,SAAA,SAAAC,GACAC,MAAAD,EAAAhB,kBAGA5D,EAAAlE,SAAAmI,YAAAxD,EAAAT,EAAAkE,YAAAU,EAAAhB,gBACA5D,EAAAG,kBAAA,MAEA2E,OAAA,WACAC,qBAAAjB,KAEAjG,QACAmH,EAAA,SAAAC,GACA,GAAAb,EAAA,aAIA,GADAA,EAAA5G,OAAAyH,GACAd,EAAAP,mBAEA,WADA5D,GAAAG,kBAAA,EAAA0C,EAGA7C,GAAAjE,KAAAmJ,kBAAA,WACApB,EAAAqB,sBAAAH,MAGAA,KACArI,KAAAoH,aAAAK,GAEAxI,EAAA3C,UAAAmM,0BAAA,WACA,GACAC,GADAC,EAAA3I,KAAA+D,mBAAA6E,uBAEA,IAAA5I,KAAA6I,2BAGA,CACA,GAAAC,GAAA/F,KAAAgG,IAAAJ,EAAAK,MAAAhJ,KAAA6I,2BAAAG,OACAC,EAAAlG,KAAAgG,IAAAJ,EAAAO,OAAAlJ,KAAA6I,2BAAAK,OACAR,GAAAI,EAAA9I,KAAAH,8BAAAoJ,EAAAjJ,KAAAH,iCALA6I,IAAA,CAOAA,KACA1I,KAAA6I,2BAAAF,EACAA,EAAAK,MAAA,GAAAL,EAAAO,OAAA,GACAlJ,KAAAwD,kBAAA,KAIAvE,EAAA3C,UAAAsH,gBAAA,WACA5D,KAAA8B,YACA9B,KAAAmJ,0BAAA,QACAnJ,KAAAoJ,YAAA,aACApJ,KAAAqJ,gBAAA,cACArJ,KAAA+G,gBAAA,aACA/G,KAAAsJ,WAAA,cACAtJ,KAAAuJ,cAAA,aACAvJ,KAAAuH,YAAA,eAGAvH,KAAAmJ,0BAAA,SACAnJ,KAAAoJ,YAAA,YACApJ,KAAAqJ,gBAAA,cACArJ,KAAA+G,gBAAA,cACA/G,KAAAsJ,WAAA,aACAtJ,KAAAuJ,cAAA,aACAvJ,KAAAuH,YAAA,cAGAtI,EAAA3C,UAAAiH,SAAA,SAAAiG,EAAAC,GACA,GAAAC,GAAA1J,KAAAyD,iBAAA+F,EAAAC,GACAE,EAAA,WACAD,EAAA,SACAA,EAAAE,MAAA5J,KAAA6J,WAKA,OAHAF,GAAA,kBACAD,EAAA,UAEAC,GAEA1K,EAAA3C,UAAAmH,iBAAA,SAAA+F,EAAAC,GACA,GAAAK,OAAAjH,GACA8G,EAAA,WACA,GAAAtG,GAAArD,KACA+J,EAAAF,SACAC,KAGAL,GAAA,EACAD,EAAAI,MAAAvG,EAAA0G,GAGAD,EAAAE,WAAA,WACAF,MAAAjH,GACA2G,EAAAI,MAAAvG,EAAA0G,IACiBN,IASjB,OANAE,GAAA,kBACAG,IACAG,aAAAH,GACAA,MAAAjH,KAGA8G,GAEA1K,EAAA3C,UAAAkH,iBAAA,SAAA0G,EAAAC,EAAAC,GAKA,GAAA/G,GAAArD,SACA,KAAAmK,IAAkDA,MAAAtH,QAClD,KAAAuH,IAAqCA,EAAA,GACrCpK,KAAAZ,KAAAmJ,kBAAA,WACAC,sBAAA,WACA0B,GACA7G,EAAAtB,0BAEA,IAAAsI,GAAAhH,EAAAiH,oBACAC,EAAAL,GAAAG,EAAAnI,aAAAmB,EAAA5B,iBAAAS,WACAsI,EAAAN,GAAAG,EAAAlI,WAAAkB,EAAA5B,iBAAAU,SACAsI,EAAAJ,EAAAK,eAAArH,EAAA5B,iBAAAiJ,aACAC,EAAAN,EAAA7I,UAAA6B,EAAA5B,iBAAAD,QACAoJ,EAAAP,EAAAjI,sBAAAiB,EAAA5B,iBAAAW,qBAAAiI,EAAAhI,oBAAAgB,EAAA5B,iBAAAY,mBAAAgI,EAAA/H,oBAAAe,EAAA5B,iBAAAa,iBAcA,IAbAe,EAAA5B,iBAAA4I,EACAI,GACApH,EAAAlE,SAAA0L,SAAAxH,EAAAyH,2BAAA1G,cAAAf,EAAA8F,0BAAAkB,EAAAK,aAAA,MAEAC,IACAtH,EAAAjD,4BACAiD,EAAAlE,SAAA0L,SAAAxH,EAAA0H,kBAAA3G,cAAAf,EAAAiG,WAAAe,EAAA7I,QAAA,OAGA6B,EAAAlE,SAAA0L,SAAAxH,EAAA0H,kBAAA3G,cAAA,YAAAf,EAAAkG,cAAA,IAAAc,EAAA7I,QAAA,OACA6B,EAAAlE,SAAA0L,SAAAxH,EAAA0H,kBAAA3G,cAAA,kBAAAf,EAAAkG,cAAA,IAAAc,EAAA7I,QAAA,SAGA6B,EAAA2H,iBAAA,CACA,GAAA/D,GAAA5D,EAAAU,mBAAAV,EAAAkE,aACA0D,EAAA5H,EAAA6D,oBACAgE,EAAAnI,KAAAC,IAAAiE,EAAAoD,EAAA7I,QAAAyJ,EAAA5H,EAAA2H,iBAAA5G,cAAA+G,aAAA,EACA9H,GAAAlE,SAAA0L,SAAAxH,EAAA2H,iBAAA5G,cAAA,YAAAf,EAAAkG,cAAA,IAAA2B,EAAA,OACA7H,EAAAlE,SAAA0L,SAAAxH,EAAA2H,iBAAA5G,cAAA,kBAAAf,EAAAkG,cAAA,IAAA2B,EAAA,OAEA,GAAAE,GAAAb,GAAAC,GACAtJ,MAAAmJ,EAAAnI,WACAd,IAAAiJ,EAAAlI,SACAD,WAAAmI,EAAAnI,WACAC,SAAAkI,EAAAlI,SACAC,oBAAAiI,EAAAjI,oBACAC,kBAAAgI,EAAAhI,kBACAE,qBAAA8H,EAAA9H,qBACAC,mBAAA6H,EAAA7H,mBACAF,kBAAA+H,EAAA/H,uBACiBO,EACjB,IAAA0H,GAAAC,GAAAI,EAAA,CACA,GAAAS,GAAA,WAkBA,GAhBAhI,EAAAiI,cAAAjB,EAAA9H,sBAAA,GAAA8H,EAAA7H,oBAAA,EAAAa,EAAAuB,MAAAjH,MAAA0M,EAAA9H,qBAAA8H,EAAA7H,mBAAA,MACAa,EAAAxC,OAAA0K,KAAAlI,EAAAiI,eACAjI,EAAAtC,SAAAwK,KAAAlI,EAAAiI,eACAf,IACAlH,EAAAnC,MAAAqK,KAAAH,GACA/H,EAAAlC,QAAAoK,KAAAH,IAEAZ,IACAnH,EAAAjC,IAAAmK,KAAAH,GACA/H,EAAAhC,MAAAkK,KAAAH,KAEAb,GAAAC,KACAnH,EAAAhE,kBAAAmM,eACAnI,EAAArC,OAAAuK,KAAAH,GACA/H,EAAApC,SAAAsK,KAAAH,IAEAhB,EAAA,EAEA,WADA/G,GAAAG,kBAAA,EAAA2G,EAAAC,EAAA,EAGAD,IACAA,IAGA9G,GAAAnD,iCACAmL,IAGAhI,EAAAjE,KAAAqM,IAAAJ,OAGA,CACA,GAAAjB,EAAA,IAAAK,GAAAE,GAEA,WADAtH,GAAAG,kBAAA,EAAA2G,EAAAC,EAAA,EAGAD,IACAA,UAMAlL,EAAA3C,UAAAyH,iBAAA,WACA,MAAA/D,MAAA0L,uBAAAC,QAAA1Q,SAAA2Q,kBAAA3Q,SAAA4Q,iBAAA5Q,SAAA6Q,KAAA9L,KAAA0L,cAAA1L,KAAAd,QAAAkF,eAEAnF,EAAA3C,UAAAoH,uBAAA,WACA,GAAAL,GAAArD,IACA,KAAAA,KAAA4B,sBAAA,CAGA,GAAAkC,GAAA9D,KAAA+D,kBACA/D,MAAAuE,4BACAvE,KAAAZ,KAAAmJ,kBAAA,WACAlF,EAAAqI,uBAAAC,SACAtI,EAAA0I,qBAAA1I,EAAAlE,SAAA6M,OAAA,kBAAA3I,EAAAC,UACAD,EAAA4I,qBAAA5I,EAAAlE,SAAA6M,OAAA,kBAAA3I,EAAAC,YAGAD,EAAA0I,qBAAA1I,EAAAlE,SAAA6M,OAAAlI,EAAA,SAAAT,EAAAC,UACAD,EAAA7C,qBAAA,IACA6C,EAAA6I,+BAAAC,YAAA,WAAoF9I,EAAAoF,6BAAqCpF,EAAA7C,4BAKzHvB,EAAA3C,UAAAiI,0BAAA,WACAvE,KAAAkM,gCACAE,cAAApM,KAAAkM,gCAEAlM,KAAA+L,uBACA/L,KAAA+L,uBACA/L,KAAA+L,yBAAAlJ,IAEA7C,KAAAiM,uBACAjM,KAAAiM,uBACAjM,KAAAiM,yBAAApJ,KAGA5D,EAAA3C,UAAA4K,kBAAA,WACA,GAAAlH,KAAA4B,sBACA,QAEA,IAAAsJ,GAAA,CAIA,IAHAlL,KAAAqM,qBAAArM,KAAAqM,oBAAAjI,gBACA8G,GAAAlL,KAAAqM,oBAAAjI,cAAApE,KAAAoJ,cAEApJ,KAAA0L,aAAA,CACA,GAAA5H,GAAA9D,KAAA+D,mBACAuI,EAAAtM,KAAAd,QAAAkF,cAAAwE,wBACA2D,EAAAzI,EAAA8E,uBACA5I,MAAA8B,WACAoJ,GAAAoB,EAAAE,KAAAD,EAAAC,KAGAtB,GAAAoB,EAAAG,IAAAF,EAAAE,IAEAzM,KAAA0L,uBAAAC,UACAT,GAAApH,EAAA9D,KAAAuH,cAGA,MAAA2D,IAEAjM,EAAA3C,UAAAoQ,uBAAA,WACA,GAAA1M,KAAA4B,sBACA,MAAAmB,MAAA4J,MAAA3M,KAAA8B,WAAA9B,KAAAM,kBAAAN,KAAA4M,eAAA5M,KAAAK,iBAAAL,KAAA6M,cAEA,IAAAC,GAAA9M,KAAA8B,WAAA,yBACAiL,GAAA/M,KAAAqM,qBAAArM,KAAAqM,oBAAAjI,eAAApE,KAAA+K,kBAAA3G,eAAA2I,SACAC,EAAAD,IAAA1O,OAAA,CACA,QAAA2O,EACA,QAIA,KAFA,GAAAC,GAAAF,EAAA,GAAAD,GACAnD,EAAA,EACAA,EAAAqD,GAAAC,IAAAF,EAAApD,GAAAmD,MACAnD,CAEA,OAAAA,IAEA1K,EAAA3C,UAAA4Q,uBAAA,WACA,GAAAC,OAAAtK,EAIA,OAHA7C,MAAA0L,uBAAAC,UACAwB,EAAAlN,OAAAD,KAAAqJ,kBAEA8D,GAAAnN,KAAA+D,mBAAA/D,KAAAuH,cAAA,GAEAtI,EAAA3C,UAAAyF,yBAAA,WACA,GAAAqL,GAAApN,KAAAkF,mBAEA,IADAlF,KAAAiF,kCACAjF,KAAAiD,4BAAAmK,GAAA,IAAAA,EAAAhI,iCAIA,OADAiI,GAAArN,KAAA0M,yBACAY,EAAA,EAAoCA,EAAAF,EAAAjI,yBAAA9G,SAAyEiP,EAAA,CAC7G,GAAAC,GAAAH,EAAAjI,yBAAAmI,EACA,IAAAC,KAAA3I,OAAA2I,EAAA3I,MAAAvG,OAAA,CAGA,GAAAkP,EAAA3I,MAAAvG,SAAAgP,EACA,MAIA,QAFAG,IAAA,EACAC,EAAAJ,EAAAC,EACAhP,EAAA,EAA2BA,EAAA+O,IAAuB/O,EAClD,IAAA0B,KAAAU,aAAA6M,EAAA3I,MAAAtG,GAAA0B,KAAA4E,MAAA6I,EAAAnP,IAAA,CACAkP,GAAA,CACA,OAGAA,MACAxN,KAAAkF,oBAAAE,iCACApF,KAAAkF,oBAAAG,gCAAAkI,EAAA3H,YAAA,EACA5F,KAAAkF,oBAAAI,iCAAAiI,EAAA1H,aAAA,EACA7F,KAAAkF,oBAAAC,yBAAAmI,GAAAC,MAIAtO,EAAA3C,UAAAiK,oBAAA,WACA,GAAAzC,GAAA9D,KAAA+D,kBAEA/D,MAAAuB,0BAAAwB,KAAAC,IAAAD,KAAA0D,IAAA3C,EAAA4J,aAAA5J,EAAAqH,aADA,IACAnL,KAAAuB,2BACAvB,KAAAsB,yBAAAyB,KAAAC,IAAAD,KAAA0D,IAAA3C,EAAA6J,YAAA7J,EAAA8J,YAFA,IAEA5N,KAAAsB,yBACA,IAIAwF,GACA+G,EACAC,EANAC,EAAAjK,EAAA6J,aAAA3N,KAAAN,gBAAAM,KAAAsB,2BAAAtB,KAAA8B,WAAA,EAHA,KAIAkM,EAAAlK,EAAA4J,cAAA1N,KAAAL,iBAAAK,KAAAuB,4BAAAvB,KAAA8B,WAJA,GAIA,IACAmM,EAAAjO,KAAAqM,qBAAArM,KAAAqM,oBAAAjI,eAAApE,KAAA+K,kBAAA3G,cACAiJ,EAAArN,KAAA0M,wBAIA,IAAA1M,KAAA4B,sBAAA,CACAmM,EAAA/N,KAAAK,iBACA2N,EAAAhO,KAAAM,kBACAuN,EAAA7N,KAAA6M,cACAiB,EAAA9N,KAAA4M,cACA,IAAAsB,GAAAnL,KAAAC,IAAAD,KAAAoL,KAAAJ,EAAAF,GAAA,GACAO,EAAArL,KAAAC,IAAAD,KAAAoL,KAAAH,EAAAF,GAAA,EACAhH,GAAA9G,KAAA8B,WAAAoM,EAAAE,MAEA,IAAApO,KAAAiD,2BAqBA,CACA,GAAAoL,GAAAvK,EAAA9D,KAAAuH,cAAAvH,KAAAyB,iBAAAzB,KAAAyB,iBAAAD,QAAA,GACAiM,EAAAzN,KAAAyB,iBAAAc,sBAAA,EACA+K,EAAAvK,KAAAoL,KAAAV,EAAAJ,GACAiB,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,CACA3H,GAAA,CACA,QAAAxI,GAAA,EAA2BA,EAAA2P,EAAAlB,SAAA1O,SAA6BC,EAAA,GACxDmP,CACA,IAAAiB,GAAAT,EAAAlB,SAAAzO,GACAqQ,EAAAD,EAAA9F,uBAGA,IAFA0F,EAAAvL,KAAAC,IAAAsL,EAAAK,EAAA3F,OACAuF,EAAAxL,KAAAC,IAAAuL,EAAAI,EAAAzF,QACAuE,EAAAJ,GAAA,GACA,GAAAuB,GAAA5O,KAAAkF,oBAAAC,yBAAAmI,EACAsB,OACA5O,KAAAkF,oBAAAE,iCACApF,KAAAkF,oBAAAG,gCAAAuJ,EAAAhJ,YAAA,EACA5F,KAAAkF,oBAAAI,iCAAAsJ,EAAA/I,aAAA,KAEA7F,KAAAkF,oBAAAE,gCACA,IAAAR,GAAA5E,KAAA4E,MAAAjH,MAAA8P,EAAAJ,EAAAI,EAQA,IAPAzN,KAAAkF,oBAAAC,yBAAAmI,IACA1H,WAAA0I,EACAzI,YAAA0I,EACA3J,SAEA5E,KAAAkF,oBAAAG,gCAAAiJ,EACAtO,KAAAkF,oBAAAI,iCAAAiJ,EACAvO,KAAA8B,WAAA,CACA,GAAA+M,GAAA9L,KAAA0D,IAAA6H,EAAAvL,KAAAC,IAAA+K,EAAAS,EAAA,GACA,IAAAH,EAAA,GACA,GAAAS,GAAA/L,KAAA0D,IAAA4H,EAAAQ,EACAA,IAAAC,EACAT,GAAAS,EAEAN,GAAAK,EACAA,EAAA,GAAAd,GAAAS,KACA1H,MAGA,CACA,GAAAiI,GAAAhM,KAAA0D,IAAA8H,EAAAxL,KAAAC,IAAAgL,EAAAS,EAAA,GACA,IAAAJ,EAAA,GACA,GAAAS,GAAA/L,KAAA0D,IAAA4H,EAAAU,EACAA,IAAAD,EACAT,GAAAS,EAEAL,GAAAM,EACAA,EAAA,GAAAf,GAAAS,KACA3H,IAGAwG,EACAgB,EAAA,EACAC,EAAA,GAGA,GAAAS,GAAAhP,KAAAkF,oBAAAG,+BAAArF,KAAAkF,oBAAAE,iCACA6J,EAAAjP,KAAAkF,oBAAAI,gCAAAtF,KAAAkF,oBAAAE,gCACAyI,GAAA7N,KAAA4F,YAAAoJ,GAAAjB,EACAD,EAAA9N,KAAA6F,aAAAoJ,GAAAjB,EACAhO,KAAA8B,WACAiM,EAAAS,IACA1H,GAAA/D,KAAAoL,MAAAJ,EAAAS,GAAAX,IAIAG,EAAAS,IACA3H,GAAA/D,KAAAoL,MAAAH,EAAAS,GAAAX,QA5FA,CACA,GAAAG,EAAAlB,SAAA1O,OAAA,GACA2B,KAAA4F,YAAA5F,KAAA6F,eACA7F,KAAA4C,uBAAAmL,EAAA,IACA/N,KAAA4C,sBAAAmL,IAEA/N,KAAA8C,wBAAAkL,EAAA,IACAhO,KAAA8C,uBAAAkL,GAGA,IAAAU,GAAAT,EAAAlB,SAAA,GACA4B,EAAAD,EAAA9F,uBACA5I,MAAA4C,sBAAAG,KAAA0D,IAAAzG,KAAA4C,sBAAA+L,EAAA3F,OACAhJ,KAAA8C,uBAAAC,KAAA0D,IAAAzG,KAAA8C,uBAAA6L,EAAAzF,QAEA2E,EAAA7N,KAAA4F,YAAA5F,KAAA4C,uBAAAmL,EACAD,EAAA9N,KAAA6F,aAAA7F,KAAA8C,wBAAAkL,CACA,IAAAE,GAAAnL,KAAAC,IAAAD,KAAAoL,KAAAJ,EAAAF,GAAA,GACAO,EAAArL,KAAAC,IAAAD,KAAAoL,KAAAH,EAAAF,GAAA,EACAhH,GAAA9G,KAAA8B,WAAAoM,EAAAE,EA6EA,GAAA1H,GAAA1G,KAAA4E,MAAAvG,OACA6Q,EAAA7B,EAAAvG,EACAqI,EAAAzI,EAAAwI,EACAE,EAAArM,KAAAoL,KAAAzH,EAAA2G,GACA3C,EAAA,EACA2E,EAAArP,KAAA8B,WAAA+L,EAAAC,CACA,IAAA9N,KAAAiD,2BAAA,CAEA,OADAqM,GAAA,EACAhR,EAAA,EAA2BA,EAAA8Q,IAAwB9Q,EAAA,CACnD,GAAAiR,GAAAvP,KAAAkF,oBAAAC,yBAAA7G,IAAA0B,KAAAkF,oBAAAC,yBAAA7G,GAAA0B,KAAA+G,gBACAwI,GACA7E,GAAA6E,IAGAD,EAGA5E,GAAA3H,KAAA4J,MAAA2C,EAAAD,OAGA3E,GAAA0E,EAAAC,CAEArP,MAAAgL,mBACAN,GAAA1K,KAAAgL,iBAAA5G,cAAA+G,aAEA,IAAAqE,GAAAxP,KAAA8B,WAAAiM,EAAAC,CAEA,QACAtH,YACA2G,oBACAvG,oBACAoI,eACAC,uBACAvJ,WAAAiI,EACAhI,YAAAiI,EACApD,eACA8E,iBACAlN,kBAXAS,KAAAC,IAAA0H,EAAA8E,EAAA,KAcAvQ,EAAA3C,UAAAuK,iBAAA,SAAA4I,EAAAnJ,GACA,OAAAA,EAAAI,UACA,QAEA,IAAA2I,GAAA/I,EAAAtG,KAAA+G,iBACA2I,EAAA3M,KAAA4M,MAAAF,EAAAnJ,EAAA+G,oBAAA,CACA,KAAArN,KAAAiD,2BACA,MAAAoM,GAAAK,CAIA,QAFAJ,GAAA,EACA3F,EAAA,EACArL,EAAA,EAAuBA,EAAAoR,IAA4BpR,EAAA,CACnD,GAAAiR,GAAAvP,KAAAkF,oBAAAC,yBAAA7G,IAAA0B,KAAAkF,oBAAAC,yBAAA7G,GAAA0B,KAAA+G,gBACAwI,GACA5F,GAAA4F,IAGAD,EAIA,MADA3F,IAAA5G,KAAA4J,MAAA2C,EAAAD,IAGApQ,EAAA3C,UAAAsT,kBAAA,SAAA3I,EAAAX,GACA,GAAAuJ,GAAA,CACA,IAAA7P,KAAAiD,2BAIA,OAHAmM,GAAArM,KAAAoL,KAAA7H,EAAAI,UAAAJ,EAAA+G,mBACAyC,EAAA,EACAT,EAAA/I,EAAAtG,KAAA+G,iBACAzI,EAAA,EAA2BA,EAAA8Q,IAAwB9Q,EAAA,CACnD,GAAAiR,GAAAvP,KAAAkF,oBAAAC,yBAAA7G,IAAA0B,KAAAkF,oBAAAC,yBAAA7G,GAAA0B,KAAA+G,gBAOA,IALA+I,GADAP,GAIAF,EAEApI,EAAA6I,EAAA,CACAD,EAAAvR,EAAA8Q,CACA,YAKAS,GAAA5I,EAAAX,EAAAoE,YAEA,IAAAqF,GAAAhN,KAAA0D,IAAA1D,KAAAC,IAAA6M,EAAAvJ,EAAA6I,qBAAA,GAAA7I,EAAA6I,sBAAA7I,EAAA4I,aACAc,EAAA1J,EAAAI,UAAAJ,EAAA4I,aAAA,EACAzB,EAAA1K,KAAA0D,IAAA1D,KAAA4M,MAAAI,GAAAC,EAEA,IADAvC,KAAAnH,EAAA+G,kBACArN,KAAAD,aAAA,CACA,GAAAkQ,GAAA,EAAA3J,EAAA+G,iBACAI,GAAAwC,GAAA,IACAxC,EAAA1K,KAAAC,IAAAyK,IAAAwC,EAAA,IAGA,GAAAC,GAAAnN,KAAAoL,KAAA4B,GAAAzJ,EAAA4I,aAAA,EACAiB,GAAAD,EAAA,GAAA5J,EAAA+G,iBACA8C,GAAA,IACAD,GAAA5J,EAAA+G,kBAAA8C,GAEAjI,MAAAuF,KACAA,EAAA,GAEAvF,MAAAgI,KACAA,EAAA,GAEAzC,EAAA1K,KAAA0D,IAAA1D,KAAAC,IAAAyK,EAAA,GAAAnH,EAAAI,UAAA,GACAwJ,EAAAnN,KAAA0D,IAAA1D,KAAAC,IAAAkN,EAAA,GAAA5J,EAAAI,UAAA,EACA,IAAA0J,GAAApQ,KAAAqQ,aAAA/J,EAAA+G,iBAGA,QACAnL,WAAAuL,EACAtL,SAAA+N,EACA3N,qBALAQ,KAAA0D,IAAA1D,KAAAC,IAAAyK,EAAA2C,EAAA,GAAA9J,EAAAI,UAAA,GAMAlE,mBALAO,KAAA0D,IAAA1D,KAAAC,IAAAkN,EAAAE,EAAA,GAAA9J,EAAAI,UAAA,GAMAtE,oBAAA6E,EACA5E,kBAAA4E,EAAAX,EAAAkJ,eACAlN,kBAAAgE,EAAAhE,oBAGArD,EAAA3C,UAAAgO,kBAAA,WACA,GAAAhE,GAAAtG,KAAAuG,sBACA2E,EAAAlL,KAAAkH,oBACA9E,EAAApC,KAAAkN,wBACA9K,GAAAkE,EAAAoE,aAAAQ,KAAAlL,KAAA0L,uBAAAC,SACAvJ,EAAAkE,EAAAoE,aAGAtI,GAAA8I,EAEA9I,EAAAW,KAAAC,IAAA,EAAAZ,EACA,IAAAH,GAAAjC,KAAA4P,kBAAAxN,EAAAkE,GACAgK,EAAAtQ,KAAA6G,iBAAA5E,EAAAM,qBAAA+D,GACAiK,EAAAjK,EAAAoE,YACA,QACAxI,WAAAD,EAAAC,WACAC,SAAAF,EAAAE,SACAI,qBAAAN,EAAAM,qBACAC,mBAAAP,EAAAO,mBACAhB,QAAAuB,KAAA4J,MAAA2D,GACA5F,aAAA3H,KAAA4J,MAAA4D,GACAnO,oBAAAH,EAAAG,oBACAC,kBAAAJ,EAAAI,kBACAC,kBAAAL,EAAAK,oBAGArD,EAAAuR,aACSC,KAAA7R,EAAA8R,UAAAC,OACTC,SAAA,qCACAC,SAAA,kBACAC,SAAA,4JACAC,MACAC,qBAAA,aACAC,mBAAA,cACAC,qBAAA,iBAEAC,QAAA,68BAIAlS,EAAAmS,eAAA,WAA2D,QAClDX,KAAA7R,EAAAyS,aACAZ,KAAA7R,EAAA0S,YACAb,KAAA7R,EAAA2S,SACAd,KAAA7R,EAAA4S,oBACAf,KAAA/V,OAAA8V,aAA6BC,KAAA7R,EAAA6S,OAAAd,MAAA9R,EAAA6S,iBAC7BjB,SAAA5N,GAAA2N,aAAgCC,KAAA7R,EAAA+S,WAA2BlB,KAAA7R,EAAA6S,OAAAd,MAAA,4CAC3DF,SAAA5N,GAAA2N,aAAgCC,KAAA7R,EAAA+S,WAA2BlB,KAAA7R,EAAA6S,OAAAd,MAAA,0CAC3DF,SAAA5N,GAAA2N,aAAgCC,KAAA7R,EAAA+S,WAA2BlB,KAAA7R,EAAA6S,OAAAd,MAAA,2CAC3DF,SAAA5N,GAAA2N,aAAgCC,KAAA7R,EAAA+S,WAA2BlB,KAAA7R,EAAA6S,OAAAd,MAAA,sCAC3DF,SAAA5N,GAAA2N,aAAgCC,KAAA7R,EAAA+S,WAA2BlB,KAAA7R,EAAA6S,OAAAd,MAAA,uCAC3DF,SAAA5N,GAAA2N,aAAgCC,KAAA7R,EAAA+S,WAA2BlB,KAAA7R,EAAA6S,OAAAd,MAAA,2CAC3DF,SAAA5N,GAAA2N,aAAgCC,KAAA7R,EAAA+S,WAA2BlB,KAAA7R,EAAA6S,OAAAd,MAAA,oDAC3DF,SAAA5N,GAAA2N,aAAgCC,KAAA7R,EAAA+S,WAA2BlB,KAAA7R,EAAA6S,OAAAd,MAAA,yDAC3DF,SAAA5N,GAAA2N,aAAgCC,KAAA7R,EAAA+S,WAA2BlB,KAAA7R,EAAA6S,OAAAd,MAAA,qCAEpE1R,EAAA2S,gBACA1R,mCAA8CuQ,KAAA7R,EAAAiT,QAC9C5O,6BAAwCwN,KAAA7R,EAAAiT,QACxCzR,8BAAyCqQ,KAAA7R,EAAAiT,QACzC/R,oCAA+C2Q,KAAA7R,EAAAiT,QAC/C9R,eAA0B0Q,KAAA7R,EAAAiT,QAC1BnS,iBAA4B+Q,KAAA7R,EAAAiT,QAC5BlS,kBAA6B8Q,KAAA7R,EAAAiT,QAC7BjM,aAAwB6K,KAAA7R,EAAAiT,QACxBhM,cAAyB4K,KAAA7R,EAAAiT,QACzBhF,gBAA2B4D,KAAA7R,EAAAiT,QAC3BjF,iBAA4B6D,KAAA7R,EAAAiT,QAC5BxR,mBAA8BoQ,KAAA7R,EAAAiT,QAC9BvR,oBAA+BmQ,KAAA7R,EAAAiT,QAC/BxB,eAA0BI,KAAA7R,EAAAiT,QAC1BpS,sBAAiCgR,KAAA7R,EAAAiT,QACjChS,+BAA0C4Q,KAAA7R,EAAAiT,QAC1CtS,uBAAkCkR,KAAA7R,EAAAiT,QAClCrS,qBAAgCiR,KAAA7R,EAAAiT,QAChCjS,sBAAiC6Q,KAAA7R,EAAAiT,QACjCjN,QAAmB6L,KAAA7R,EAAAiT,QACnBnR,eAA0B+P,KAAA7R,EAAAiT,QAC1B/P,aAAwB2O,KAAA7R,EAAAiT,QACxBnG,eAA0B+E,KAAA7R,EAAAiT,QAC1BhR,SAAoB4P,KAAA7R,EAAAkT,SACpB/Q,WAAsB0P,KAAA7R,EAAAkT,SACtB9Q,SAAoByP,KAAA7R,EAAAkT,SACpB7Q,WAAsBwP,KAAA7R,EAAAkT,SACtB5Q,QAAmBuP,KAAA7R,EAAAkT,SACnB3Q,UAAqBsP,KAAA7R,EAAAkT,SACrB1Q,MAAiBqP,KAAA7R,EAAAkT,SACjBzQ,QAAmBoP,KAAA7R,EAAAkT,SACnB/G,oBAA+B0F,KAAA7R,EAAAmT,UAAApB,MAAA,WAA4CqB,KAAApT,EAAAyS,eAC3EvG,6BAAwC2F,KAAA7R,EAAAmT,UAAApB,MAAA,oBAAqDqB,KAAApT,EAAAyS,eAC7FrG,mBAA8ByF,KAAA7R,EAAAqT,aAAAtB,MAAA,UAA8CqB,KAAApT,EAAAyS,eAC5EhF,sBAAiCoE,KAAA7R,EAAAqT,aAAAtB,MAAA,aAAiDqB,KAAApT,EAAAyS,gBAElFpS,IAEArN,GAAAqN,0BACA,IAAAiT,GAAA,WACA,QAAAA,MAWA,MATAA,GAAA1B,aACSC,KAAA7R,EAAAuT,SAAAxB,OACT/e,SAAAqN,GACAmT,cAAAnT,GACAoT,SAAAtT,EAAAuT,kBAIAJ,EAAAd,eAAA,WAAwD,UACxDc,IAEAtgB,GAAAsgB,yBR6NMK,KACA,SAAU5gB,EAAQC,EAASsI,GAEjC,YS1sCA,SAAAsY,KACA,GAAAvU,GAAAhD,SAAAyC,iBAAA,0BAEA,OADArB,OAAAC,UAAAqB,MAAAnB,KAAAyB,GACA1B,IAAA,SAAA2B,GACA,GAAAuU,GAAAvU,EAAAf,QAAAuV,cACAC,EAAAzU,EAAAuS,KACAmC,EAAA1U,EAAA2U,IAAA,gBAAA3U,GAAA2U,GAAA3U,EAAA2U,GAAA,KACAC,EAAA5U,EAAA6U,MAAA,gBAAA7U,GAAA6U,KAAA7U,EAAA6U,KAAA,KACAC,EAAA9U,EAAAnD,OAAA,gBAAAmD,GAAAnD,MAAAmD,EAAAnD,MAAA,KACAkY,EAAA/U,EAAAgV,WACAC,EAAAC,QAAAlV,EAAAmV,UACAC,GACAC,IAAAd,EACAhC,KAAA,KACAoC,GAAAD,EACAG,KAAAD,EACA/X,MAAA,GACAyY,SAAA,EACAC,WAEA,cAAAhB,GAAA,aAAAA,EAAA,CAEA,GADAa,EAAA,KAAAX,EACA,UAAAF,EAEA,MADAa,GAAA,MAAAN,EACAM,CAEA,QAAAX,GACA,eACA,YAGA,MAFAW,GAAA,QAAAH,EACAG,EAAA,MAAAN,EACAM,CACA,aACA,aACA,aACA,YACA,QAEA,MAAAA,QAGA,eAAAb,EAAA,CACA,GAAAS,GAAA7W,MAAAC,UAAAqB,MAAAnB,KAAAyW,GACAQ,EAAAP,EAAA3W,IAAA,SAAAmX,EAAApV,GACA,OAAwBvD,MAAA2Y,EAAA,MAAAL,SAAAD,QAAAM,EAAA,YAGxB,OADAJ,GAAA,QAAAG,EACAH,EAEA,MAAAA,KAUA,QAAAK,GAAAC,GACA,GAAAxV,GAAAnD,SAAAyC,iBAAA,kBACAkW,GAAAvW,QAAA,SAAAwW,EAAAvV,GACA,aAAAuV,EAAAN,KAAA,aAAAM,EAAAN,IACA,aAAAM,EAAAN,KAAA,aAAAM,EAAApD,MAAA,UAAAoD,EAAApD,KASA,aAAAoD,EAAA1W,QAAAuV,eACA,UAAAmB,EAAApD,MAAA,WAAAoD,EAAApD,MAAA,WAAAoD,EAAApD,MAAA,UAAAoD,EAAApD,KAIA,UAAAoD,EAAAhB,IAAA,OAAAgB,EAAAd,MACAc,EAAA9Y,MAAAsD,SACAD,EAAAE,IACAF,EAAAE,GAAAnB,QAAAuV,gBAAAmB,EAAAN,KACA,aAAAM,EAAAN,KAAAnV,EAAAE,GAAAwV,aAAA,UAAAD,EAAApD,MACA,gBAAArS,GAAAE,GAAAuU,IAAAzU,EAAAE,GAAAuU,GAAAxU,QACA,gBAAAD,GAAAE,GAAAwV,aAAA,SACA1V,EAAAE,GAAAwV,aAAA,QAAAzV,SACAD,EAAAE,GAAA,MAAAuV,EAAA9Y,MACAqD,EAAAE,GAAAC,cAAA,GAAAC,aAAA,SAA0EC,OAAAL,EAAAE,GAAA,cAG1E,CACA,GAAAsS,GAAA,SACA,OAAAiD,EAAAhB,GAAA,IAAAgB,EAAAhB,GAAA,eAAAgB,EAAAN,IAAA,UAAAM,EAAApD,KAAA,UACA,OAAAoD,EAAAd,KAAA,UAAAc,EAAAd,KAAA,SACA7T,EAAAjE,SAAA6Q,KAAAiI,cAAAnD,EACA1R,IAAA2U,EAAA9Y,MAAAsD,SACAa,EAAA,MAAA2U,EAAA9Y,MACAmE,EAAAX,cAAA,GAAAC,aAAA,SAAwEC,OAAAS,EAAA,mBAjCxE,CACA,GAAA0R,GAAA,gBAAAiD,EAAAhB,GAAA,IAAAgB,EAAAhB,GAAA,cAAAgB,EAAApD,KAAA,aAAAoD,EAAAd,KAAA,UAAAc,EAAAd,KAAA,SACA,WAAAc,EAAA9Y,MAAA,KACAmE,EAAAjE,SAAA6Q,KAAAiI,cAAAnD,EACA1R,IAAAkU,QAAAS,EAAA,WACA3U,EAAA,kBACAA,EAAAX,cAAA,GAAAC,aAAA,SAAoEC,OAAAS,EAAA,gBAgCpE,eAAA2U,EAAAN,IAAA,CACA,GAAAS,GAAA,IACA,WAAAH,EAAAhB,IAAA,OAAAgB,EAAAd,MACA3U,EAAAE,IAAAF,EAAAE,GAAAnB,QAAAuV,gBAAAmB,EAAAN,KAAA,gBAAAnV,GAAAE,GAAAuU,IAAAzU,EAAAE,GAAAuU,GAAAxU,QACA,gBAAAD,GAAAE,GAAAwV,aAAA,SAAA1V,EAAAE,GAAAwV,aAAA,QAAAzV,SACA2V,EAAA5V,EAAAE,QAGA,CACA,GAAAsS,GAAA,iBAAAiD,EAAAhB,GAAA,IAAAgB,EAAAhB,GAAA,YAAAgB,EAAAd,KAAA,UAAAc,EAAAd,KAAA,SACA7T,EAAAjE,SAAA6Q,KAAAiI,cAAAnD,EACA1R,KACA8U,EAAA9U,GAGA8U,GACAH,EAAAJ,QAAApW,QAAA,SAAA4W,EAAAC,GACA,GAAAR,GAAAM,EAAAD,cAAA,iBAAAE,EAAAlZ,MAAA,KACA2Y,KACAM,EAAAd,WAAAgB,IACA,gBAAAF,GAAAd,WAAAgB,GAAA,OAAAF,EAAAd,WAAAgB,GAAA,MAAA7V,SACAqV,EAAAM,EAAAd,WAAAgB,IAEAR,GAAAO,EAAAZ,WACAK,EAAA,oBACAA,EAAAnV,cAAA,GAAAC,aAAA,SAAuEC,OAAAiV,EAAA,kBAQvE,QAAAS,KACA,GAAAP,GAAApB,GACA,mBACA,MAAAmB,GAAAC,IAlJAlZ,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IA6D9CnJ,EAAA4gB,mBAiFA5gB,EAAA+hB,mBAOA/hB,EAAAuiB,yBT2tCMC,KACA,SAAUziB,EAAQC,EAASsI,GAEjC,YU32CA,SAAAma,GAAAC,EAAAC,EAAAC,GAkCA,WAjCA,KAAAA,IAA4BA,EAAA5iB,EAAA6iB,eAC5BF,EAAA,MACAA,EAAA,aACAD,EAAAI,SAAA9iB,EAAA6iB,cAAA,SACAF,EAAA,UACAD,EAAAI,SAAA9iB,EAAA6iB,cAAA,QAAAF,EAAA,UAGAD,EAAAI,SAAA9iB,EAAA6iB,cAAA,WACAF,EAAA,mBAAAI,GACAL,EAAAI,SAAA9iB,EAAA6iB,cAAA,UAAAE,KAGAL,EAAAI,SAAA9iB,EAAA6iB,cAAA,UACAF,EAAA,mBAAAK,EAAAC,GACAP,EAAAI,SAAA9iB,EAAA6iB,cAAA,SAAAG,EAAAC,KAGAP,EAAAI,SAAA9iB,EAAA6iB,cAAA,YACAF,EAAA,qBAAAO,GACAR,EAAAI,SAAA9iB,EAAA6iB,cAAA,WAAAK,KAGAP,EAAA,qBAAAV,GACAS,EAAAI,SAAA9iB,EAAA6iB,cAAA,YACAH,EAAAI,SAAA9iB,EAAA6iB,cAAA,WAAAZ,GAEAS,EAAAS,UACAT,EAAAI,SAAA9iB,EAAA6iB,cAAA,eACAH,EAAAI,SAAA9iB,EAAA6iB,cAAA,cAAAZ,MAIAS,EA3CA5Z,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA6iB,eACAO,OAAA,YACAC,SAAA,cACAC,QAAA,aACAC,UAAA,eACAC,UAAA,eACAC,aAAA,mBAsCAzjB,EAAAyiB,aV23CMiB,KACA,SAAU3jB,EAAQC,EAASsI,GAEjC,YW36CAQ,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,GAC9C,IAAAwa,GAAerb,EAAQ,KACvBtI,GAAA4jB,oBAAAD,EAAAC,mBACA,IAAAC,GAA+Bvb,EAAQ,IACvCtI,GAAA8jB,qBAAAD,EAAAC,sBXk7CMC,KACA,SAAUhkB,EAAQC,EAASsI,GAEjC,YYz7CAQ,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,GAC9C,IAAA6D,GAAa1E,EAAQ,GACrB4E,EAAe5E,EAAQ,GACvB0b,EAAiC1b,EAAQ,MACzCub,EAA+Bvb,EAAQ,KACvCsb,EAAA,WACA,QAAAA,MAEA,MAAAA,KAEAA,GAAAhF,aACKC,KAAA7R,EAAAuT,SAAAxB,OACL0B,SAAAvT,EAAAwT,cACAF,cAAAwD,EAAAC,wBACAjkB,SAAAgkB,EAAAC,wBACAC,WAAAL,EAAAC,0BAIAF,EAAApE,eAAA,WAAkD,UAClDxf,EAAA4jB,uBZg8CMO,KACA,SAAUpkB,EAAQC,EAASsI,GAEjC,Yav9CAQ,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,GAC9C,IAAA6D,GAAa1E,EAAQ,GACrB8b,EAAsB9b,EAAQ,MAC9Bub,EAA+Bvb,EAAQ,KACvC2b,EAAA,WACA,QAAAA,GAAAI,EAAAC,GACAlW,KAAAiW,wBACAjW,KAAAkW,SACAlW,KAAAmW,WACAC,KAAA,kBACAC,SAAA,IAEArW,KAAAsW,YACAtW,KAAAuW,QAAA,GACAvW,KAAAwW,UAAA,EACAxW,KAAAiW,sBAAAQ,KAAAzW,KAAAyW,KAAAC,KAAA1W,MACAA,KAAAiW,sBAAAU,QAAA3W,KAAA2W,QAAAD,KAAA1W,MA4BA,MA1BA6V,GAAAvZ,UAAA+H,SAAA,aACAwR,EAAAvZ,UAAAma,KAAA,SAAAL,EAAA3C,GACA,GAAApQ,GAAArD,SACA,KAAAyT,IAAiCA,KACjC,IAAAmD,IACA9M,QAAA,KACAuM,SAAA,GAEA,QAAAQ,KAAApD,GACAmD,EAAAC,GAAApD,EAAAoD,EAEA,IAAAC,GAAA,GAAAd,GAAAe,aAAAX,EAAAQ,EAAAP,SACArW,MAAAsW,SAAAU,KAAAF,GACA9W,KAAAkW,OAAAe,gBACAhX,OAAA+J,WAAA,WACA3G,EAAA6T,QAAAJ,GACAzT,EAAA6S,OAAAe,iBACSL,EAAA9M,UAET+L,EAAAvZ,UAAAqa,QAAA,SAAA5b,OACA,KAAAA,IAA+BA,GAAA,GAC/BiF,KAAAwW,SAAAzb,GAEA8a,EAAAvZ,UAAA4a,QAAA,SAAAJ,GACA9W,KAAAsW,SAAAtW,KAAAsW,SAAA1Y,OAAA,SAAAuZ,GAA6D,MAAAA,GAAAtE,KAAAiE,EAAAjE,MAE7DgD,IAEAA,GAAArF,aACKC,KAAA7R,EAAA8R,UAAAC,OACLC,SAAA,iBACAE,SAAA,wUAIA+E,EAAAzE,eAAA,WAAqD,QAChDX,KAAAgF,EAAAC,uBACAjF,KAAA7R,EAAA4S,qBAEL5f,EAAAikB,0Bb89CMuB,KACA,SAAUzlB,EAAQC,EAASsI,GAEjC,Yc1hDAQ,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,GAC9C,IAAAgc,GAAA,WACA,QAAAA,GAAAX,EAAAC,GACArW,KAAA6S,GAAAkE,EAAAM,SACArX,KAAAoW,KAAA,eACApW,KAAAqW,SAAA,GACArW,KAAAoW,OACApW,KAAAqW,WAEA,MAAAU,KAEAA,GAAAM,OAAA,EACAzlB,EAAAmlB,gBdiiDMO,KACA,SAAU3lB,EAAQC,Ge/iDxBD,EAAAC,QAAA,gxBfqjDM2lB,KACA,SAAU5lB,EAAQC,GgBtjDxBD,EAAAC,QAAA,gJhB4jDM4lB,KACA,SAAU7lB,EAAQsI,EAAqBC,GAE7C,cAC4B,SAASud,GAAmCvd,EAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOyd,IACvH,IAAIC,GAA8Czd,EAAoB,GAClE0d,EAAgD1d,EAAoB,GACpE2d,EAA6C3d,EAAoB,GACjE4d,EAAwD5d,EAAoB,IAE5E6d,GADgE7d,EAAoB8d,EAAEF,GAC5B5d,EAAoB,KAC9E+d,EAA8D/d,EAAoB,IAClFge,EAAqDhe,EAAoB,IACzEie,EAAsDje,EAAoB,GAC1Eke,EAAsDle,EAAoB,IAC1Eme,EAAyDne,EAAoB,IAC7Eoe,EAAsDpe,EAAoB,IAC/Fqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IiBnkD1GhC,EAAA,SAAAkC,GAOI,QAAAlC,GACYmC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACDC,EACAC,EACAC,GAZX,GAAAnX,GAaIuW,EAAApd,KAAAwD,KAAMsa,EAAQC,IAAYva,IjBulD1B,OiBnmDQqD,GAAAwW,QACAxW,EAAAyW,aACAzW,EAAA0W,cACA1W,EAAA2W,iBACA3W,EAAA4W,kBACA5W,EAAA6W,sBACA7W,EAAA8W,QACA9W,EAAA+W,OACA/W,EAAAgX,uBACDhX,EAAAiX,SACAjX,EAAAkX,cACAlX,EAAAmX,MAhBXnX,EAAAoX,mBAAoB,EACpBpX,EAAAqX,aAAc,EAkBVrX,EAAKwW,MAAM5R,KAAK0S,UACZ,SAAC1S,GACOA,GAAQA,EAAK2S,UACbvX,EAAKwX,gBAAkB5S,EAAK2S,QAAQ,GACpCvX,EAAKyX,sBAAwB7S,EAAK2S,QAAQ,GAC1CvX,EAAK0X,0BACkB,MAAnB9S,EAAK2S,QAAQ,KACbvX,EAAK2X,qBAAuB/S,EAAK2S,QAAQ,GAAGK,oBjB8kDrD5X,EiB3mD+BkV,EAAAb,EAAAkC,GAkC1ClC,EAAApb,UAAA+H,SAAA,WACIrE,KAAK8Z,WAAWoB,cAAc,IAGlCxD,EAAApb,UAAA6e,gBAAA,WACqB1D,EAAE,2BACb2D,WAGV1D,EAAApb,UAAA+e,sBAAA,WACIrb,KAAKya,mBAAoB,GAG7B/C,EAAApb,UAAAgf,mBAAA,SAAmBC,EAAmBC,GAClC,GAAI7R,GAAS,CASb,OAPI6R,GAAY,IACZ7R,EAAS,IAAM4R,EAAYC,GAG3B7R,EAAS,MACTA,EAAS,KAENA,GAGH+N,EAAApb,UAAAye,wBAAR,cAAA1X,GAAArD,IACQA,MAAK6a,iBACL7a,KAAK6a,gBAAgBY,QAAQpe,QAAQ,SAACqe,GAElCrY,EAAKyX,sBAAsBW,QAAQE,KAAK,SAACC,GACrC,MAAIA,GAAGC,OAASH,EAAKI,cACjBJ,EAAKK,eAAiBH,GACf,IAIf,IAAII,GAAQN,EAAKO,WAAWC,GAE5B,IAAIR,EAAKS,cAAgB,EACrB,GAAIT,EAAKU,gBAAkB,GACvB,GAAIV,EAAKS,cAAgBT,EAAKU,iBACvBV,EAAKW,iBAAiBH,IAAM,GAAKR,EAAKY,gBAAkB,EAAG,CAC9D,GAAIC,IAAeb,EAAKS,cAAgBT,EAAKU,iBAAmBV,EAAKY,gBAAkB,CACvFN,IAASO,EAAcb,EAAKW,iBAAiBH,SAIjD,IAAIR,EAAKW,iBAAiBH,IAAM,GAAKR,EAAKY,gBAAkB,EAAG,CAC3D,GAAIC,GAAcb,EAAKS,cAAgBT,EAAKY,gBAAkB,CAC9DN,IAASO,EAAcb,EAAKW,iBAAiBH,IAGzDR,EAAKc,cAAgBR,IjBskDjC,IAAIS,GAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CiBnkDpD,OA1Fa1F,GAAwBqB,GAPpCre,OAAAid,EAAA,YACG/G,SAAU,wBACVE,SAAU5W,EAAQ,MAClBiX,QACK,yEjByqDDqI,EAAW,qBiB9pDkB,mBjB8pDYiD,MiB9pDZ,KAAd7E,EAAA,GAAAA,EAAA,IAAc6E,GAAA/hB,OACC,mBADDgiB,MACC,KAAVxE,EAAA,GAAAA,EAAA,IAAUwE,GAAAhiB,OACE,mBADFiiB,MACE,KAAXxE,EAAA,GAAAA,EAAA,IAAWwE,GAAAjiB,OACM,mBADNkiB,MACM,KAAdvE,EAAA,GAAAA,EAAA,IAAcuE,GAAAliB,OACE,mBADFmiB,MACE,KAAf9E,EAAA,GAAAA,EAAA,IAAe8E,GAAAniB,OACQ,mBADRoiB,MACQ,KAAnB7E,EAAA,GAAAA,EAAA,IAAmB6E,GAAApiB,OACrB,mBADqBqiB,MACrB,KAAZzE,EAAA,GAAAA,EAAA,IAAYyE,GAAAriB,OACF,mBADEsiB,MACF,KAAX5E,EAAA,GAAAA,EAAA,IAAW4E,GAAAtiB,OACyB,mBADzBuiB,MACyB,KAApBnF,EAAA,sBAAAA,EAAA,uBAAoBmF,GAAAviB,OACtB,mBADsBwiB,MACtB,KAAbrF,EAAA,GAAAA,EAAA,IAAaqF,GAAAxiB,OACU,mBADVyiB,MACU,KAAlBtF,EAAA,GAAAA,EAAA,IAAkBsF,GAAAziB,OACT,mBADS0iB,MACT,KAAjBzF,EAAA,mBAAAA,EAAA,oBAAiByF,GAAA1iB,UAnBxBgd,IAAiCG,EAAA,KjB4qDjBrb,KAAKvC,EAAqBC,EAAoB,MAIrEmjB,KACA,SAAU1rB,EAAQC,GkB5sDxBD,EAAAC,QAAA,myLlBktDM0rB,KACA,SAAU3rB,EAAQsI,EAAqBC,GAE7C,cAC4B,SAASud,GAAmCvd,EAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOsjB,IACvH,IAAI5F,GAA8Czd,EAAoB,GAClE0d,EAAgD1d,EAAoB,GACpE2d,EAA6C3d,EAAoB,GACjE4d,EAAwD5d,EAAoB,IAE5EsjB,GADgEtjB,EAAoB8d,EAAEF,GAChC5d,EAAoB,IAC1EujB,EAAqDvjB,EAAoB,IACzEwjB,EAA0DxjB,EAAoB,IAC9EyjB,EAAqDzjB,EAAoB,IAC9Fqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,ImB7tD1G6D,EAAA,SAAA3D,GAKI,QAAA2D,GACYxD,EACAF,EACAC,EACAO,EACAG,EACAP,EACAE,EACDG,EACAC,EACAqD,GAVX,GAAAva,GAWIuW,EAAApd,KAAAwD,KAAMsa,EAAQC,IAAYva,InB+uD1B,OmBzvDQqD,GAAA0W,cACA1W,EAAAwW,QACAxW,EAAAyW,aACAzW,EAAAgX,uBACAhX,EAAAmX,MACAnX,EAAA4W,kBACA5W,EAAA8W,QACD9W,EAAAiX,SACAjX,EAAAkX,cACAlX,EAAAua,WAbXva,EAAAwa,kBAAmD,KACnDxa,EAAAya,mBAAgD,KAe5Cza,EAAKwW,MAAM5R,KAAK0S,UAAU,SAAC1S,GACnBA,GAAQA,EAAK2S,UACbvX,EAAK0a,iBAAmB9V,EAAK2S,QAEzBvX,EAAK0a,iBAAiBC,MAAQ,IAC9B3a,EAAKya,mBAAqBza,EAAK0a,iBAAiBtC,QAAQ,OnBwuD7DpY,EmB/vD0BkV,EAAAgF,EAAA3D,GA6BrC2D,EAAAjhB,UAAA+H,SAAA,WACIrE,KAAK8Z,WAAWoB,cAAc,GACVzD,EAAE,wCACb2D,WAGbmC,EAAAjhB,UAAA6e,gBAAA,WAEI1D,EAAE,eAAewG,WAAYC,QAAW,EAAG,YAGxCX,EAAAjhB,UAAA6hB,WAAP,SAAkBC,GAAlB,GAAA/a,GAAArD,IAGQoe,GAAKC,OAASre,KAAK+Z,YAAYuE,WAAate,KAAK6d,mBACjD7d,KAAKia,gBAAgBsE,cAAcve,KAAK+Z,YAAYuE,UAAWte,KAAK6d,kBAAkBW,SAAS7D,UAC3F,SAAC1S,GAEG5E,EAAK0a,iBAAiBtC,QAAQE,KAAK,SAAC8C,EAAiChZ,GACjE,SAAIgZ,EAAYD,SAAYC,EAAYD,QAAQ3L,IAAM5K,EAAK4K,MACvDxP,EAAK0a,iBAAiBtC,QAAQhW,GAAO+Y,QAAUvW,GACxC,KAIf5E,EAAKgX,qBAAqB5D,KAAKpT,EAAKkX,YAAYmE,UAAU,0CACpDrI,SAAU,gBAAiBvM,QAAS,MAC1CzG,EAAKwa,kBAAoB,KACzBxa,EAAKmX,IAAIhP,gBAEb,SAACmT,GACGtb,EAAKgX,qBAAqB5D,KAAKpT,EAAKkX,YAAYmE,UAAU,wCACpDrI,SAAU,gBAAiBvM,QAAS,SAKnDyT,EAAAjhB,UAAAsiB,gBAAP,SAAuBH,GACnBze,KAAK6d,kBAAoBgB,KAAKC,MAAMD,KAAKE,UAAUN,IAC/CA,GAAeze,KAAK6d,oBACpB7d,KAAK6d,kBAAkBmB,OAAQ,IAGhCzB,EAAAjhB,UAAA2iB,iBAAP,cAAA5b,GAAArD,IAkBI,OAjBAA,MAAKma,MAAM+E,OAAOlf,KAAKua,YAAYmE,UAAU,6CACzCS,MAAOnf,KAAKua,YAAYmE,UAAU,iCAAkCU,GAAI,QACxEC,OAAO,EAAMC,MAAO,WACZjc,EAAKwa,oBACLxa,EAAKwa,kBAAkBmB,OAAQ,GACnC3b,EAAKmX,IAAIhP,kBAIb2T,MAAOnf,KAAKua,YAAYmE,UAAU,qCAClCU,GAAI,MAAOC,OAAO,EAAMC,MAAO,WACvBjc,EAAKwa,oBACLxa,EAAKwa,kBAAkBmB,OAAQ,GACnC3b,EAAKmX,IAAIhP,oBAIV,GAGJ+R,EAAAjhB,UAAAijB,mBAAP,SAA0BC,GACS,MAA3Bxf,KAAK8d,oBAA8B0B,EAAQ3M,IAAM7S,KAAK8d,mBAAmBjL,KACzE7S,KAAK8d,mBAAqB0B,EAC1Bxf,KAAK6d,kBAAoB,MAE7B7d,KAAKwa,IAAIhP,enB0tDb,IAAIiR,GAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,CmBxtD5C,OApGaK,GAAmBxE,GAL/Bre,OAAAid,EAAA,YACG/G,SAAU,mBACVE,SAAU5W,EAAQ,MAClBulB,gBAAiB9H,EAAA,wBAAwB+H,SnBq0DrClG,EAAW,qBmB7zDqB,mBnB6zDSiD,MmB7zDT,KAAXe,EAAA,GAAAA,EAAA,IAAWf,GAAA/hB,OACH,mBADGgiB,MACH,KAAd9E,EAAA,GAAAA,EAAA,IAAc8E,GAAAhiB,OACC,mBADDiiB,MACC,KAAVc,EAAA,GAAAA,EAAA,IAAUd,GAAAjiB,OACoB,mBADpBkiB,MACoB,KAApB9E,EAAA,sBAAAA,EAAA,uBAAoB8E,GAAAliB,OACpB,mBADoBmiB,MACpB,KAAjBlF,EAAA,mBAAAA,EAAA,oBAAiBkF,GAAAniB,OACU,mBADVoiB,MACU,KAAfY,EAAA,GAAAA,EAAA,IAAeZ,GAAApiB,OACb,mBADaqiB,MACb,KAAZY,EAAA,GAAAA,EAAA,IAAYZ,GAAAriB,OACC,mBADDsiB,MACC,KAAbnF,EAAA,GAAAA,EAAA,IAAamF,GAAAtiB,OACU,mBADVuiB,MACU,KAAlBpF,EAAA,GAAAA,EAAA,IAAkBoF,GAAAviB,OACN,mBADMwiB,MACN,KAAfQ,EAAA,GAAAA,EAAA,IAAeR,GAAAxiB,UAf3B6iB,IAA4B1F,EAAA,KnBy0DZrb,KAAKvC,EAAqBC,EAAoB,MAIrEylB,KACA,SAAUhuB,EAAQC,GoBl2DxBD,EAAAC,QAAA,g1TpBw2DMguB,KACA,SAAUjuB,EAAQC,GqBz2DxBD,EAAAC,QAAA,+iRrB+2DMiuB,KACA,SAAUluB,EAAQC,GsBh3DxBD,EAAAC,QAAA,stPtBs3DMkuB,KACA,SAAUnuB,EAAQsI,EAAqBC,GAE7C,cAC4B,SAASud,GAAmCvd,EAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO8lB,IACvH,IAAIpI,GAA8Czd,EAAoB,GAClE8lB,EAA6C9lB,EAAoB,GACjE+lB,EAAgD/lB,EAAoB,KAEpEgmB,GADwDhmB,EAAoB8d,EAAEiI,GACvC/lB,EAAoB,KAC3DimB,EAA+CjmB,EAAoB8d,EAAEkI,GAC1F3H,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuBt3D1GqG,EAAA,SAAAnG,GAcC,QAAAmG,GAAmBzF,EAA8BC,GAAjD,GAAAlX,GACCuW,EAAApd,KAAAwD,KAAMsa,EAAQC,IAAYva,IvBw3DpB,OuBz3DYqD,GAAAiX,SAA8BjX,EAAAkX,cAbxClX,EAAA+c,QAAkB,EAClB/c,EAAAgd,SAA0B,QAE1Bhd,EAAA2F,MAAQ,QACR3F,EAAAid,MAAQ,OAEPjd,EAAAkd,iBAAmB,GAAI5I,GAAA,avBg4DnBtU,EuBv4D+BkV,EAAAwH,EAAAnG,GAkB7CmG,EAAAzjB,UAAA+H,SAAA,WAEC,GAAImc,GAAiBxgB,KAAKygB,oBAE1B,IAAKzgB,KAAKyT,QAEH,CAGN,GAAIA,GAAUzT,KAAKyT,OACnBzT,MAAKyT,QAAU+M,CACf,KAAI,GAAI/G,KAAKhG,GACZzT,KAAKyT,QAAQgG,GAAKhG,EAAQgG,OAP3BzZ,MAAKyT,QAAU+M,CAWZxgB,MAAKyT,QAAQiN,WAAa1gB,KAAKyT,QAAQkN,UAC1C3gB,KAAK4gB,MAAQ5gB,KAAKyT,QAAQiN,UAAUG,WAAa,MAAQ7gB,KAAKyT,QAAQkN,QAAQE,YAG1E7gB,KAAKyT,QAAQ6G,SACjBta,KAAKyT,QAAQ6G,OAASta,KAAK8gB,6BAG7Bf,EAAAzjB,UAAA6e,gBAAA,WACCnb,KAAK+gB,aAAetJ,EAAEzX,KAAKghB,OAAO5c,eACT,MAArBpE,KAAK+gB,cACR/gB,KAAK+gB,aAAaE,gBAAgBjhB,KAAKyT,QAASzT,KAAKkhB,oBAAoBxK,KAAK1W,QAGhF+f,EAAAzjB,UAAAgI,YAAA,WAC0B,MAArBtE,KAAK+gB,cACR/gB,KAAK+gB,aAAa9Y,KAAK,mBAAmBkZ,UAG5CpB,EAAAzjB,UAAA4kB,oBAAA,SAAoBhgB,EAAsBE,EAAoB+d,GAC7Dnf,KAAKugB,iBAAiBhV,MAAMrK,EAAOE,KAG5B2e,EAAAzjB,UAAAmkB,mBAAR,WvB82DO,GAAIhE,GuB72DN2E,EAAoBphB,KAAKua,YAAYmE,UAAU,oCAC/C2C,EAAqBrhB,KAAKua,YAAYmE,UAAU,qCAChD4C,EAAoBthB,KAAKua,YAAYmE,UAAU,oCAC/C6C,EAAuBvhB,KAAKua,YAAYmE,UAAU,uCAClD8C,EAAsBxhB,KAAKua,YAAYmE,UAAU,sCACjD+C,EAAmBzhB,KAAKua,YAAYmE,UAAU,mCAE9CpjB,EAAI6kB,MACJuB,EAAMpmB,EAAEqmB,QAAQC,QAAQ,OACxBC,EAAMvmB,EAAEqmB,QAAQC,QAAQ,SACxBE,EAAMxmB,EAAEqmB,QAAQC,QAAQ,OAI5B,QACCG,eAAe,EACfC,QAAMvF,KACLA,EAAC2E,IAAaM,EAAIC,QAAQM,SAAS,EAAG,QAAS3mB,GAC/CmhB,EAACgF,IACAC,EAAIC,QAAQM,SAAS,EAAE,QAAQL,QAAQ,QACvCtmB,EAAEqmB,QAAQM,SAAS,EAAE,QAAQC,MAAM,SAEpCzF,EAAC+E,IAAeM,EAAKJ,GACrBjF,EAAC4E,IAAcK,EAAIC,QAAQM,SAAS,GAAI,QAAS3mB,GACjDmhB,EAAC6E,IACAI,EAAIC,QAAQM,SAAS,EAAG,SAASL,QAAQ,SACzCtmB,EAAEqmB,QAAQM,SAAS,EAAG,SAASC,MAAM,UAEtCzF,EAAC8E,IAAgBM,EAAKH,GvB22DVjF,GuBz2DbiE,UAAWgB,EAAIC,QAAQM,SAAS,GAAI,QAAQE,OAAO,KACnDxB,QAASe,EAAIS,OAAO,KACpB7B,MAAO,OACP8B,eAAgB,cAChBC,WAAY,cACZC,YAAa,cACbC,sBAAsB,EACtBC,iBAAiB,EACjBC,WAAW,EACXC,qBAAqB,EACrBC,QAASrnB,IAIHykB,EAAAzjB,UAAAwkB,yBAAR,WAEC,GAAIxG,IAAUta,KAAKsa,OAAOsI,sBAAwB,MAAMlQ,cACpDmQ,EAAa1C,EAAA2C,EAAOD,WAAWvI,EACnC,QACCyI,YAAa/iB,KAAKua,YAAYmE,UAAU,gCACxCsE,WAAYhjB,KAAKua,YAAYmE,UAAU,+BACvCyD,OAAQU,EAAWI,eAAe,KAClCC,UAAW,IACXC,UAAWnjB,KAAKua,YAAYmE,UAAU,8BACtC0E,iBAAkBpjB,KAAKua,YAAYmE,UAAU,sCAC7C2E,SAAUR,EAAWS,iBACrBC,WAAYV,EAAWW,cACvBC,WAAYZ,EAAWa,evB22DtB,IAAIjH,GAAIC,EAAIC,EAAIC,CuBx2DpB,OArHU7D,IAARre,OAAAid,EAAA,SvBg+DM6B,EAAW,cAAepG,UAC3B2M,EAAyBzjB,UAAW,aAAU,IuBh+D3Cyc,GAARre,OAAAid,EAAA,SvBm+DM6B,EAAW,cAAemK,SAC3B5D,EAAyBzjB,UAAW,eAAY,IuBn+D7Cyc,GAARre,OAAAid,EAAA,SvBs+DM6B,EAAW,cuBt+DQ,mBvBs+DeiD,MuBt+Df,KAARwD,EAAA,UAAAA,EAAA,WAAQxD,GAAA/hB,SvBu+DpBqlB,EAAyBzjB,UAAW,cAAW,IuBt+D5Cyc,GAARre,OAAAid,EAAA,SvBy+DM6B,EAAW,cAAe9e,SAC3BqlB,EAAyBzjB,UAAW,YAAS,IuBz+D1Cyc,GAARre,OAAAid,EAAA,SvB4+DM6B,EAAW,cAAe9e,SAC3BqlB,EAAyBzjB,UAAW,YAAS,IuB3+DzCyc,GAATre,OAAAid,EAAA,UvB8+DM6B,EAAW,cAAe9e,SAC3BqlB,EAAyBzjB,UAAW,uBAAoB,IuB7+DzCyc,GAApBre,OAAAid,EAAA,WAAU,UvBg/DJ6B,EAAW,cuBh/DqB,mBvBg/DEkD,MuBh/DF,KAAV/E,EAAA,YAAAA,EAAA,aAAU+E,GAAAhiB,SvBi/DjCqlB,EAAyBzjB,UAAW,aAAU,IuB1/DxCyjB,EAAwBhH,GAXpCre,OAAAid,EAAA,YACA/G,SAAU,oBACVE,SAAU,8cvBygEH0I,EAAW,qBuBl/DsB,mBvBk/DQmD,MuBl/DR,KAAbqD,EAAA,GAAAA,EAAA,IAAarD,GAAAjiB,OAAwC,mBAAxCkiB,MAAwC,KAAlBoD,EAAA,GAAAA,EAAA,IAAkBpD,GAAAliB,UAdpEqlB,IAAiCC,EAAA,KvBsgEjBxjB,KAAKvC,EAAqBC,EAAoB,MAIrE0pB,KACA,SAAUjyB,EAAQC,GwBviExBD,EAAAC,QAAA,iNxB6iEMiyB,KACA,SAAUlyB,EAAQC,GyB9iExBD,EAAAC,QAAA,koCzBojEMkyB,KACA,SAAUnyB,EAAQC,G0BrjExBD,EAAAC,QAAA,u7B1B2jEMmyB,KACA,SAAUpyB,EAAQC,G2B5jExBD,EAAAC,QAAA,kpC3BkkEMoyB,KACA,SAAUryB,EAAQC,G4BnkExBD,EAAAC,QAAA,klB5BykEMqyB,KACA,SAAUtyB,EAAQC,G6B1kExBD,EAAAC,QAAA,+nD7BglEMsyB,KACA,SAAUvyB,EAAQC,G8BjlExBD,EAAAC,QAAA,kK9BulEMuyB,KACA,SAAUxyB,EAAQC,G+BxlExBD,EAAAC,QAAA,27B/B8lEMwyB,KACA,SAAUzyB,EAAQC,GgC/lExBD,EAAAC,QAAA,q9ChCqmEMyyB,KACA,SAAU1yB,EAAQC,GiCtmExBD,EAAAC,QAAA,4vBjC4mEM0yB,KACA,SAAU3yB,EAAQC,GkC7mExBD,EAAAC,QAAA,0ClCmnEM2yB,KACA,SAAU5yB,EAAQC,GmCpnExBD,EAAAC,QAAA,yzCnC0nEM4yB,KACA,SAAU7yB,EAAQC,GoC3nExBD,EAAAC,QAAA,iSpCioEM6yB,KACA,SAAU9yB,EAAQC,GqCloExBD,EAAAC,QAAA,werCwoEM8yB,KACA,SAAU/yB,EAAQC,GsCzoExBD,EAAAC,QAAA,sGtC+oEM+yB,KACA,SAAUhzB,EAAQC,GuChpExBD,EAAAC,QAAA,w9GvCspEMgzB,KACA,SAAUjzB,EAAQC,GwCvpExBD,EAAAC,QAAA,6SxC6pEMizB,KACA,SAAUlzB,EAAQC,GyC9pExBD,EAAAC,QAAA,sOzCoqEMkzB,KACA,SAAUnzB,EAAQC,G0CrqExBD,EAAAC,QAAA,8d1C2qEMmzB,KACA,SAAUpzB,EAAQC,G2C5qExBD,EAAAC,QAAA,qnD3CkrEMozB,KACA,SAAUrzB,EAAQC,G4CnrExBD,EAAAC,QAAA,07B5CyrEMqzB,KACA,SAAUtzB,EAAQC,G6C1rExBD,EAAAC,QAAA,4rE7CgsEMszB,KACA,SAAUvzB,EAAQC,G8CjsExBD,EAAAC,QAAA,mlS9CusEMuzB,KACA,SAAUxzB,EAAQC,G+CxsExBD,EAAAC,QAAA,6zT/C8sEMwzB,KACA,SAAUzzB,EAAQC,GgD/sExBD,EAAAC,QAAA,unXhDqtEMyzB,KACA,SAAU1zB,EAAQC,GiDttExBD,EAAAC,QAAA,uhOjD4tEM0zB,KACA,SAAU3zB,EAAQC,GkD7tExBD,EAAAC,QAAA,i9gBlDmuEM2zB,KACA,SAAU5zB,EAAQC,GmDpuExBD,EAAAC,QAAA,6pbnD0uEM4zB,KACA,SAAU7zB,EAAQC,GoD3uExBD,EAAAC,QAAA,slQpDivEM6zB,KACA,SAAU9zB,EAAQC,GqDlvExBD,EAAAC,QAAA,unFrDwvEM8zB,KACA,SAAU/zB,EAAQC,GsDzvExBD,EAAAC,QAAA,49GtD+vEM+zB,KACA,SAAUh0B,EAAQC,GuDhwExBD,EAAAC,QAAA,unNvDswEMg0B,KACA,SAAUj0B,EAAQC,GwDvwExBD,EAAAC,QAAA,ylNxD6wEMi0B,KACA,SAAUl0B,EAAQC,GyD9wExBD,EAAAC,QAAA,m6GzDoxEMk0B,KACA,SAAUn0B,EAAQC,G0DrxExBD,EAAAC,QAAA,k1a1D2xEMm0B,KACA,SAAUp0B,EAAQC,G2D5xExBD,EAAAC,QAAA,umL3DkyEMo0B,KACA,SAAUr0B,EAAQC,G4DnyExBD,EAAAC,QAAA,izb5DyyEMq0B,KACA,SAAUt0B,EAAQC,G6D1yExBD,EAAAC,QAAA,y6D7DgzEMs0B,KACA,SAAUv0B,EAAQC,G8DjzExBD,EAAAC,QAAA,6sQ9DuzEMu0B,KACA,SAAUx0B,EAAQC,G+DxzExBD,EAAAC,QAAA,wgE/D8zEMw0B,KACA,SAAUz0B,EAAQC,GgE/zExBD,EAAAC,QAAA,orPhEq0EMy0B,KACA,SAAU10B,EAAQC,GiEt0ExBD,EAAAC,QAAA,42EjE40EM00B,KACA,SAAU30B,EAAQC,GkE70ExBD,EAAAC,QAAA,w17BlEm1EM20B,KACA,SAAU50B,EAAQC,GmEp1ExBD,EAAAC,QAAA,w/CnE01EM40B,KACA,SAAU70B,EAAQC,EAASsI,GoEr1EjC,QAAAusB,GAAAC,GACA,MAAAxsB,GAAAysB,EAAAD,IAEA,QAAAC,GAAAD,GACA,GAAA7T,GAAAtW,EAAAmqB,EACA,MAAA7T,EAAA,GACA,SAAA+T,OAAA,uBAAAF,EAAA,KACA,OAAA7T,GAbA,GAAAtW,IACAsqB,qBAAA,KACAC,gBAAA,KACAC,aAAA,KACAC,mBAAA,KAWAP,GAAAQ,KAAA,WACA,MAAAvsB,QAAAusB,KAAA1qB,IAEAkqB,EAAAS,QAAAP,EACAh1B,EAAAC,QAAA60B,EACAA,EAAA5T,GAAA,MpEi2EMsU,KACA,SAAUx1B,EAAQC,GqEt3ExBD,EAAAC,UAAmB6e,KAAA,YAAAsC,KAAA,mBAAAqU,SAAwDrU,KAAA,OAAAtC,KAAA,OAAA4W,SAAA,OAAAD,SAAyDrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,MAAAtC,KAAA,QAA4BsC,KAAA,MAAAtC,KAAA,WAA+BsC,KAAA,cAAAtC,KAAA,WAAuCsC,KAAA,SAAAtC,KAAA,OAAA4W,SAAA,SAAAD,SAA6DrU,KAAA,OAAAtC,KAAA,WAAgCsC,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,UAAAtC,KAAA,WAAmCsC,KAAA,cAAAtC,KAAA,aAAyCsC,KAAA,gBAAAtC,KAAA,OAAA4W,SAAA,gBAAAD,SAA2ErU,KAAA,UAAAtC,KAAA,WAAmCsC,KAAA,eAAAtC,KAAA,WAAwCsC,KAAA,aAAAtC,KAAA,mBAA8CsC,KAAA,YAAAtC,KAAA,aAAA4W,SAAA,QAAAD,SAAqErU,KAAA,UAAAtC,KAAA,WAAmCsC,KAAA,WAAAtC,KAAA,iBAA0CsC,KAAA,eAAAtC,KAAA,WAAwCsC,KAAA,OAAAtC,KAAA,SAA8BsC,KAAA,WAAAtC,KAAA,OAAA6W,YAAA,IAAoDvU,KAAA,gBAAAtC,KAAA,OAAA4W,SAAA,eAAAD,SAA0ErU,KAAA,aAAAtC,KAAA,WAAsCsC,KAAA,YAAAtC,KAAA,WAAqCsC,KAAA,cAAAtC,KAAA,iBAA6CsC,KAAA,eAAAtC,KAAA,MAAA6W,YAAA,IAAuDvU,KAAA,YAAAtC,KAAA,QAAA6W,YAAA,WrE43E9oCC,KACA,SAAU51B,EAAQC,GsE73ExBD,EAAAC,UAAmB6e,KAAA,YAAAsC,KAAA,WAAAqU,SAAgDrU,KAAA,OAAAtC,KAAA,OAAA4W,SAAA,OAAAD,SAAyDrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,MAAAtC,KAAA,QAA4BsC,KAAA,MAAAtC,KAAA,aAAiCsC,KAAA,OAAAtC,KAAA,OAAA4W,SAAA,OAAAD,SAAyDrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,OAAAtC,KAAA,iBAAsCsC,KAAA,QAAAtC,KAAA,OAAA4W,SAAA,YAAAD,SAA+DrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,YAAAtC,KAAA,aAAuCsC,KAAA,WAAAtC,KAAA,OAAA6W,YAAA,IAAoDvU,KAAA,cAAAtC,KAAA,OAAA6W,YAAA,IAAuDvU,KAAA,YAAAtC,KAAA,OAAA6W,YAAA,IAAqDvU,KAAA,YAAAtC,KAAA,OAAA6W,YAAA,MAAuD7W,KAAA,YAAAsC,KAAA,eAAAqU,SAAoDrU,KAAA,OAAAtC,KAAA,OAAA4W,SAAA,OAAAD,SAAyDrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,MAAAtC,KAAA,QAA4BsC,KAAA,MAAAtC,KAAA,aAAiCsC,KAAA,OAAAtC,KAAA,OAAA4W,SAAA,OAAAD,SAAyDrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,OAAAtC,KAAA,iBAAsCsC,KAAA,QAAAtC,KAAA,OAAA4W,SAAA,YAAAD,SAA+DrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,YAAAtC,KAAA,aAAuCsC,KAAA,QAAAtC,KAAA,QAAA6W,YAAA,IAAkDvU,KAAA,WAAAtC,KAAA,ctEm4EpqC+W,KACA,SAAU71B,EAAQC,GuEp4ExBD,EAAAC,UAAmB6e,KAAA,YAAAsC,KAAA,iBAAAqU,SAAsDrU,KAAA,OAAAtC,KAAA,OAAA4W,SAAA,OAAAD,SAAyDrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,MAAAtC,KAAA,QAA4BsC,KAAA,MAAAtC,KAAA,aAAiCsC,KAAA,aAAAtC,KAAA,OAAA4W,SAAA,aAAAD,SAAqErU,KAAA,kBAAAtC,KAAA,OAAA6W,YAAA,IAA2DvU,KAAA,kBAAAtC,KAAA,OAAA6W,YAAA,MAA6DvU,KAAA,OAAAtC,KAAA,OAAA4W,SAAA,OAAAD,SAAyDrU,KAAA,UAAAtC,KAAA,QAAA6W,YAAA,IAAoDvU,KAAA,MAAAtC,KAAA,WAA+BsC,KAAA,MAAAtC,KAAA,aAAiCsC,KAAA,QAAAtC,KAAA,OAAA4W,SAAA,QAAAD,SAA2DrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,WAAAtC,KAAA,OAAA6W,YAAA,IAAoDvU,KAAA,OAAAtC,KAAA,mBAAwCsC,KAAA,SAAAtC,KAAA,OAAA4W,SAAA,SAAAD,SAA6DrU,KAAA,OAAAtC,KAAA,WAAgCsC,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,UAAAtC,KAAA,WAAmCsC,KAAA,cAAAtC,KAAA,eAA2CA,KAAA,YAAAsC,KAAA,yBAAAqU,SAA8DrU,KAAA,OAAAtC,KAAA,OAAA4W,SAAA,OAAAD,SAAyDrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,MAAAtC,KAAA,QAA4BsC,KAAA,MAAAtC,KAAA,aAAiCsC,KAAA,OAAAtC,KAAA,OAAA4W,SAAA,OAAAD,SAAyDrU,KAAA,MAAAtC,KAAA,WAA+BsC,KAAA,MAAAtC,KAAA,aAAiCsC,KAAA,WAAAtC,KAAA,aAAA4W,SAAA,QAAAD,SAAoErU,KAAA,UAAAtC,KAAA,QAAA6W,YAAA,IAAoDvU,KAAA,OAAAtC,KAAA,SAA8BsC,KAAA,WAAAtC,KAAA,OAAA6W,YAAA,IAAoDvU,KAAA,mBAAAtC,KAAA,OAAA6W,YAAA,IAA4DvU,KAAA,cAAAtC,KAAA,OAAA6W,YAAA,IAAuDvU,KAAA,cAAAtC,KAAA,QAAA6W,YAAA,IAAwDvU,KAAA,aAAAtC,KAAA,QAAA6W,YAAA,MAAyDvU,KAAA,QAAAtC,KAAA,OAAA4W,SAAA,QAAAD,SAA2DrU,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,WAAAtC,KAAA,OAAA6W,YAAA,IAAoDvU,KAAA,OAAAtC,KAAA,mBAAwCsC,KAAA,SAAAtC,KAAA,OAAA4W,SAAA,SAAAD,SAA6DrU,KAAA,OAAAtC,KAAA,WAAgCsC,KAAA,KAAAtC,KAAA,WAA8BsC,KAAA,UAAAtC,KAAA,WAAmCsC,KAAA,cAAAtC,KAAA,gBvE04E3gEgX,KACA,SAAU91B,EAAQC,GwE34ExBD,EAAAC,UAAmB6e,KAAA,YAAAsC,KAAA,uBAAAqU,SAA4DrU,KAAA,SAAAtC,KAAA,WAAkCsC,KAAA,aAAAtC,KAAA,WAAsCsC,KAAA,WAAAtC,KAAA,WAAoCsC,KAAA,WAAAtC,KAAA,iBAA0CsC,KAAA,mBAAAtC,KAAA,QAAA6W,YAAA,IAA6DvU,KAAA,SAAAtC,KAAA,aAAA4W,SAAA,eAAAD,SAAyErU,KAAA,YAAAtC,KAAA,WAAqCsC,KAAA,UAAAtC,KAAA,QAAA6W,YAAA,IAAoDvU,KAAA,OAAAtC,KAAA,SAA8BsC,KAAA,WAAAtC,KAAA,OAAA6W,YAAA,IAAoDvU,KAAA,WAAAtC,KAAA,QAAA6W,YAAA,IAAqDvU,KAAA,cAAAtC,KAAA,QAAA6W,YAAA,IAAwDvU,KAAA,kBAAAtC,KAAA,MAAA6W,YAAA,QAA8D7W,KAAA,YAAAsC,KAAA,kBAAAqU,SAAuDrU,KAAA,WAAAtC,KAAA,WAAoCsC,KAAA,eAAAtC,KAAA,WAAwCsC,KAAA,aAAAtC,KAAA,WAAsCsC,KAAA,aAAAtC,KAAA,iBAA4CsC,KAAA,qBAAAtC,KAAA,iBAAoDsC,KAAA,gBAAAtC,KAAA,WAAyCsC,KAAA,iBAAAtC,KAAA,QAAuCsC,KAAA,YAAAtC,KAAA,QAAkCsC,KAAA,qBAAAtC,KAAA,iBAAoDsC,KAAA,SAAAtC,KAAA,aAAA4W,SAAA,cAAAD,SAAwErU,KAAA,YAAAtC,KAAA,WAAqCsC,KAAA,UAAAtC,KAAA,QAAA6W,YAAA,IAAoDvU,KAAA,OAAAtC,KAAA,SAA8BsC,KAAA,WAAAtC,KAAA,OAAA6W,YAAA,IAAoDvU,KAAA,WAAAtC,KAAA,QAAA6W,YAAA,IAAqDvU,KAAA,cAAAtC,KAAA,QAAA6W,YAAA,IAAwDvU,KAAA,kBAAAtC,KAAA,MAAA6W,YAAA,IAA0DvU,KAAA,iBAAAtC,KAAA,QAAA6W,YAAA,IAA2DvU,KAAA,cAAAtC,KAAA,aAAA4W,SAAA,cAAAD,SAA6ErU,KAAA,YAAAtC,KAAA,WAAqCsC,KAAA,cAAAtC,KAAA,WAAuCsC,KAAA,aAAAtC,KAAA,MAAA6W,YAAA,IAAqDvU,KAAA,YAAAtC,KAAA,MAAA6W,YAAA,IAAoDvU,KAAA,aAAAtC,KAAA,MAAA6W,YAAA,IAAqDvU,KAAA,mBAAAtC,KAAA,MAAA6W,YAAA,WxEi5Et3DI,KACA,SAAU/1B,EAAQC,GyEl5ExBD,EAAAC,QAAA,uiWzEw5EM+1B,KACA,SAAUh2B,EAAQC,G0Ez5ExBD,EAAAC,QAAA,omH1E+5EMg2B,KACA,SAAUj2B,EAAQC,G2Eh6ExBD,EAAAC,QAAA,ywC3Es6EMi2B,KACA,SAAUl2B,EAAQC,G4Ev6ExBD,EAAAC,QAAA,gyZ5E66EMk2B,KACA,SAAUn2B,EAAQC,G6E96ExBD,EAAAC,QAAA,4oY7Eo7EMm2B,KACA,SAAUp2B,EAAQC,G8Er7ExBD,EAAAC,QAAA,+nC9E27EMo2B,KACA,SAAUr2B,EAAQC,EAASsI,I+E57EjC,SAAA+tB,GAAA,GAAAC,GAAAC,EAUAC,EAAA,WACApoB,KAAAqoB,WACAroB,KAAAsoB,4BAGAF,GAAA9rB,WACAisB,OAAA,WAEA,MAAA7tB,QAAAusB,KAAAjnB,KAAAqoB,SAAA9rB,IAAA,SAAAisB,GACA,MAAAxoB,MAAAqoB,QAAAG,IACG9R,KAAA1W,QAIHyoB,UAAA,WAEAzoB,KAAAqoB,YAIAK,IAAA,SAAA1pB,GAEAgB,KAAAqoB,QAAArpB,EAAA2pB,SAAA3pB,EACAgB,KAAAsoB,yBAAAtpB,EAAA2pB,SAAA3pB,GAIAmiB,OAAA,SAAAniB,SAEAgB,MAAAqoB,QAAArpB,EAAA2pB,eACA3oB,MAAAsoB,yBAAAtpB,EAAA2pB,UAIA9nB,OAAA,SAAAyH,EAAAsgB,GAEA,GAAAC,GAAAnuB,OAAAusB,KAAAjnB,KAAAqoB,QAEA,QAAAQ,EAAAxqB,OACA,QASA,KANAiK,MAAAzF,KAAAyF,IAAAwgB,EAAAC,MAMAF,EAAAxqB,OAAA,IACA2B,KAAAsoB,2BAEA,QAAAhqB,GAAA,EAAkBA,EAAAuqB,EAAAxqB,OAAqBC,IAAA,CAEvC,GAAAU,GAAAgB,KAAAqoB,QAAAQ,EAAAvqB,GAEAU,KAAA,IAAAA,EAAA6B,OAAAyH,KACAtJ,EAAAgqB,YAAA,EAEAJ,SACA5oB,MAAAqoB,QAAAQ,EAAAvqB,KAKAuqB,EAAAnuB,OAAAusB,KAAAjnB,KAAAsoB,0BAGA,UAKA,IAAAQ,GAAA,GAAAV,EAEAU,GAAAG,MAAAb,EACAU,EAAAI,QAAA,EACAJ,EAAAzR,OAAA,WACA,MAAAyR,GAAAI,WAMA,sCAAAjB,EAAAkB,OACAL,EAAAC,IAAA,WACA,GAAAzgB,GAAA2f,EAAAkB,QAGA,YAAA7gB,EAAA,GAAAA,EAAA,QAIA,8BACAzF,KAAAumB,KAAAC,iBACAxmB,KAAAumB,KAAAC,YAAAN,IAGAD,EAAAC,IAAAK,KAAAC,YAAAN,IAAArS,KAAA0S,KAAAC,iBAGAxmB,KAAAymB,KAAAP,IACAD,EAAAC,IAAAO,KAAAP,IAIAD,EAAAC,IAAA,WACA,UAAAO,OAAAC,WAKAT,EAAAphB,MAAA,SAAA8hB,EAAAC,GACAzpB,KAAA0pB,QAAAF,EACAxpB,KAAA2pB,gBACA3pB,KAAA4pB,cACA5pB,KAAA6pB,sBACA7pB,KAAA8pB,UAAA,IACA9pB,KAAA+pB,QAAA,EACA/pB,KAAAgqB,qBAAAnnB,GACA7C,KAAAiqB,OAAA,EACAjqB,KAAAgpB,YAAA,EACAhpB,KAAAkqB,WAAA,EACAlqB,KAAAmqB,WAAA,EACAnqB,KAAAoqB,WAAA,KACApqB,KAAAqqB,gBAAAvB,EAAAjhB,OAAAyiB,OAAAC,KACAvqB,KAAAwqB,uBAAA1B,EAAA2B,cAAAH,OACAtqB,KAAA0qB,kBACA1qB,KAAA2qB,iBAAA,KACA3qB,KAAA4qB,uBAAA,EACA5qB,KAAA6qB,kBAAA,KACA7qB,KAAA8qB,kBAAA,KACA9qB,KAAA+qB,oBAAA,KACA/qB,KAAAgrB,gBAAA,KACAhrB,KAAAirB,OAAAxB,GAAAX,EACA9oB,KAAAkrB,IAAApC,EAAAzR,UAIAyR,EAAAphB,MAAApL,WACAqsB,MAAA,WACA,MAAA3oB,MAAAkrB,KAGAC,UAAA,WACA,MAAAnrB,MAAAgpB,YAGArhB,GAAA,SAAAyjB,EAAAC,GAQA,MANArrB,MAAA4pB,WAAAwB,MAEAvoB,KAAAwoB,IACArrB,KAAA8pB,UAAAuB,GAGArrB,MAIAqrB,SAAA,SAAAjxB,GAEA,MADA4F,MAAA8pB,UAAA1vB,EACA4F,MAGAkB,MAAA,SAAAoH,GAEAtI,KAAAirB,OAAAvC,IAAA1oB,MAEAA,KAAAgpB,YAAA,EAEAhpB,KAAA4qB,uBAAA,EAEA5qB,KAAAoqB,eAAAvnB,KAAAyF,EAAA,gBAAAA,GAAAwgB,EAAAC,MAAAuC,WAAAhjB,KAAAwgB,EAAAC,MACA/oB,KAAAoqB,YAAApqB,KAAAmqB,UAEA,QAAAoB,KAAAvrB,MAAA4pB,WAAA,CAGA,GAAA5pB,KAAA4pB,WAAA2B,YAAAlvB,OAAA,CAEA,OAAA2D,KAAA4pB,WAAA2B,GAAAltB,OACA,QAIA2B,MAAA4pB,WAAA2B,IAAAvrB,KAAA0pB,QAAA6B,IAAAC,OAAAxrB,KAAA4pB,WAAA2B,QAMA1oB,KAAA7C,KAAA0pB,QAAA6B,KAKAvrB,KAAA2pB,aAAA4B,GAAAvrB,KAAA0pB,QAAA6B,GAEAvrB,KAAA2pB,aAAA4B,YAAAlvB,SAAA,IACA2D,KAAA2pB,aAAA4B,IAAA,GAGAvrB,KAAA6pB,mBAAA0B,GAAAvrB,KAAA2pB,aAAA4B,IAAA,GAIA,MAAAvrB,OAIAqH,KAAA,WAEA,MAAArH,MAAAgpB,YAIAhpB,KAAAirB,OAAA9J,OAAAnhB,MACAA,KAAAgpB,YAAA,EAEA,OAAAhpB,KAAAgrB,iBACAhrB,KAAAgrB,gBAAAhrB,KAAA0pB,SAGA1pB,KAAAyrB,oBACAzrB,MAXAA,MAeAoB,IAAA,WAGA,MADApB,MAAAa,OAAA6qB,KACA1rB,MAIAyrB,kBAAA,WAEA,OAAAntB,GAAA,EAAAqtB,EAAA3rB,KAAA0qB,eAAArsB,OAAgEC,EAAAqtB,EAAsBrtB,IACtF0B,KAAA0qB,eAAApsB,GAAA+I,QAKAoiB,MAAA,SAAAA,GAEA,MADAzpB,MAAAirB,OAAAxB,EACAzpB,MAGA4rB,MAAA,SAAAC,GAGA,MADA7rB,MAAAmqB,WAAA0B,EACA7rB,MAIA8rB,OAAA,SAAAC,GAGA,MADA/rB,MAAA+pB,QAAAgC,EACA/rB,MAIAgsB,YAAA,SAAAH,GAGA,MADA7rB,MAAAgqB,iBAAA6B,EACA7rB,MAIAisB,KAAA,SAAAA,GAGA,MADAjsB,MAAAiqB,MAAAgC,EACAjsB,MAIA4H,OAAA,SAAAskB,GAGA,MADAlsB,MAAAqqB,gBAAA6B,EACAlsB,MAIAmsB,cAAA,SAAAC,GAGA,MADApsB,MAAAwqB,uBAAA4B,EACApsB,MAIAqsB,MAAA,WAGA,MADArsB,MAAA0qB,eAAA7gB,UACA7J,MAIAssB,QAAA,SAAAC,GAGA,MADAvsB,MAAA2qB,iBAAA4B,EACAvsB,MAIAgI,SAAA,SAAAukB,GAGA,MADAvsB,MAAA6qB,kBAAA0B,EACAvsB,MAIAwsB,SAAA,SAAAD,GAGA,MADAvsB,MAAA8qB,kBAAAyB,EACAvsB,MAIAysB,WAAA,SAAAF,GAGA,MADAvsB,MAAA+qB,oBAAAwB,EACAvsB,MAIAmI,OAAA,SAAAokB,GAGA,MADAvsB,MAAAgrB,gBAAAuB,EACAvsB,MAIAa,OAAA,SAAAyH,GAEA,GAAAijB,GACAmB,EACA3xB,CAEA,IAAAuN,EAAAtI,KAAAoqB,WACA,UAGA,IAAApqB,KAAA4qB,wBAEA,OAAA5qB,KAAA2qB,kBACA3qB,KAAA2qB,iBAAA3qB,KAAA0pB,SAGA1pB,KAAA4qB,uBAAA,GAGA8B,GAAApkB,EAAAtI,KAAAoqB,YAAApqB,KAAA8pB,UACA4C,EAAA,IAAA1sB,KAAA8pB,WAAA4C,EAAA,IAAAA,EAEA3xB,EAAAiF,KAAAqqB,gBAAAqC,EAEA,KAAAnB,IAAAvrB,MAAA4pB,WAGA,OAAA/mB,KAAA7C,KAAA2pB,aAAA4B,GAAA,CAIA,GAAArqB,GAAAlB,KAAA2pB,aAAA4B,IAAA,EACAnqB,EAAApB,KAAA4pB,WAAA2B,EAEAnqB,aAAA/E,OAEA2D,KAAA0pB,QAAA6B,GAAAvrB,KAAAwqB,uBAAAppB,EAAArG,IAKA,qBAGAqG,EADA,MAAAA,EAAAurB,OAAA,UAAAvrB,EAAAurB,OAAA,GACAzrB,EAAAoqB,WAAAlqB,GAEAkqB,WAAAlqB,IAKA,qBACApB,KAAA0pB,QAAA6B,GAAArqB,GAAAE,EAAAF,GAAAnG,IAWA,GAJA,OAAAiF,KAAA6qB,mBACA7qB,KAAA6qB,kBAAA7qB,KAAA0pB,QAAAgD,GAGA,IAAAA,EAAA,CAEA,GAAA1sB,KAAA+pB,QAAA,GAEA6C,SAAA5sB,KAAA+pB,UACA/pB,KAAA+pB,SAIA,KAAAwB,IAAAvrB,MAAA6pB,mBAAA,CAMA,GAJA,gBAAA7pB,MAAA4pB,WAAA2B,KACAvrB,KAAA6pB,mBAAA0B,GAAAvrB,KAAA6pB,mBAAA0B,GAAAD,WAAAtrB,KAAA4pB,WAAA2B,KAGAvrB,KAAAiqB,MAAA,CACA,GAAA4C,GAAA7sB,KAAA6pB,mBAAA0B,EAEAvrB,MAAA6pB,mBAAA0B,GAAAvrB,KAAA4pB,WAAA2B,GACAvrB,KAAA4pB,WAAA2B,GAAAsB,EAGA7sB,KAAA2pB,aAAA4B,GAAAvrB,KAAA6pB,mBAAA0B,GAkBA,MAdAvrB,MAAAiqB,QACAjqB,KAAAkqB,WAAAlqB,KAAAkqB,eAGArnB,KAAA7C,KAAAgqB,iBACAhqB,KAAAoqB,WAAA9hB,EAAAtI,KAAAgqB,iBAEAhqB,KAAAoqB,WAAA9hB,EAAAtI,KAAAmqB,WAGA,OAAAnqB,KAAA8qB,mBACA9qB,KAAA8qB,kBAAA9qB,KAAA0pB,UAGA,EAIA,OAAA1pB,KAAA+qB,qBAEA/qB,KAAA+qB,oBAAA/qB,KAAA0pB,QAGA,QAAAprB,GAAA,EAAAqtB,EAAA3rB,KAAA0qB,eAAArsB,OAAkEC,EAAAqtB,EAAsBrtB,IAGxF0B,KAAA0qB,eAAApsB,GAAA4C,MAAAlB,KAAAoqB,WAAApqB,KAAA8pB,UAGA,UAMA,WAMAhB,EAAAjhB,QAEAyiB,QAEAC,KAAA,SAAA9Q,GAEA,MAAAA,KAMA3R,WAEAglB,GAAA,SAAArT,GAEA,MAAAA,MAIA1R,IAAA,SAAA0R,GAEA,MAAAA,IAAA,EAAAA,IAIAsT,MAAA,SAAAtT,GAEA,OAAAA,GAAA,KACA,GAAAA,KAGA,MAAAA,KAAA,QAMAuT,OAEAF,GAAA,SAAArT,GAEA,MAAAA,QAIA1R,IAAA,SAAA0R,GAEA,QAAAA,MAAA,GAIAsT,MAAA,SAAAtT,GAEA,OAAAA,GAAA,KACA,GAAAA,MAGA,KAAAA,GAAA,GAAAA,IAAA,KAMAwT,SAEAH,GAAA,SAAArT,GAEA,MAAAA,UAIA1R,IAAA,SAAA0R,GAEA,YAAAA,SAIAsT,MAAA,SAAAtT,GAEA,OAAAA,GAAA,KACA,GAAAA,SAGA,KAAAA,GAAA,GAAAA,MAAA,KAMAyT,SAEAJ,GAAA,SAAArT,GAEA,MAAAA,YAIA1R,IAAA,SAAA0R,GAEA,QAAAA,UAAA,GAIAsT,MAAA,SAAAtT,GAEA,OAAAA,GAAA,KACA,GAAAA,UAGA,KAAAA,GAAA,GAAAA,QAAA,KAMA0T,YAEAL,GAAA,SAAArT,GAEA,SAAA1W,KAAAqqB,IAAA3T,EAAA1W,KAAAsqB,GAAA,IAIAtlB,IAAA,SAAA0R,GAEA,MAAA1W,MAAAuqB,IAAA7T,EAAA1W,KAAAsqB,GAAA,IAIAN,MAAA,SAAAtT,GAEA,YAAA1W,KAAAqqB,IAAArqB,KAAAsqB,GAAA5T,MAMA8T,aAEAT,GAAA,SAAArT,GAEA,WAAAA,EAAA,EAAA1W,KAAAyqB,IAAA,KAAA/T,EAAA,IAIA1R,IAAA,SAAA0R,GAEA,WAAAA,EAAA,IAAA1W,KAAAyqB,IAAA,MAAA/T,IAIAsT,MAAA,SAAAtT,GAEA,WAAAA,EACA,EAGA,IAAAA,EACA,GAGAA,GAAA,KACA,GAAA1W,KAAAyqB,IAAA,KAAA/T,EAAA,GAGA,MAAA1W,KAAAyqB,IAAA,OAAA/T,EAAA,OAMAgU,UAEAX,GAAA,SAAArT,GAEA,SAAA1W,KAAA2qB,KAAA,EAAAjU,MAIA1R,IAAA,SAAA0R,GAEA,MAAA1W,MAAA2qB,KAAA,KAAAjU,MAIAsT,MAAA,SAAAtT,GAEA,OAAAA,GAAA,MACA,IAAA1W,KAAA2qB,KAAA,EAAAjU,KAAA,GAGA,IAAA1W,KAAA2qB,KAAA,GAAAjU,GAAA,GAAAA,GAAA,KAMAkU,SAEAb,GAAA,SAAArT,GAEA,WAAAA,EACA,EAGA,IAAAA,EACA,GAGA1W,KAAAyqB,IAAA,MAAA/T,EAAA,IAAA1W,KAAAuqB,IAAA,GAAA7T,EAAA,KAAA1W,KAAAsqB,KAIAtlB,IAAA,SAAA0R,GAEA,WAAAA,EACA,EAGA,IAAAA,EACA,EAGA1W,KAAAyqB,IAAA,MAAA/T,GAAA1W,KAAAuqB,IAAA,GAAA7T,EAAA,IAAA1W,KAAAsqB,IAAA,GAIAN,MAAA,SAAAtT,GAEA,WAAAA,EACA,EAGA,IAAAA,EACA,GAGAA,GAAA,EAEAA,EAAA,GACA,GAAA1W,KAAAyqB,IAAA,MAAA/T,EAAA,IAAA1W,KAAAuqB,IAAA,GAAA7T,EAAA,KAAA1W,KAAAsqB,IAGA,GAAAtqB,KAAAyqB,IAAA,OAAA/T,EAAA,IAAA1W,KAAAuqB,IAAA,GAAA7T,EAAA,KAAA1W,KAAAsqB,IAAA,KAMAO,MAEAd,GAAA,SAAArT,GAEA,GAAAoU,GAAA,OAEA,OAAApU,OAAAoU,EAAA,GAAApU,EAAAoU,IAIA9lB,IAAA,SAAA0R,GAEA,GAAAoU,GAAA,OAEA,SAAApU,MAAAoU,EAAA,GAAApU,EAAAoU,GAAA,GAIAd,MAAA,SAAAtT,GAEA,GAAAoU,GAAA,SAEA,QAAApU,GAAA,KACAA,MAAAoU,EAAA,GAAApU,EAAAoU,GAAA,GAGA,KAAApU,GAAA,GAAAA,IAAAoU,EAAA,GAAApU,EAAAoU,GAAA,KAMAC,QAEAhB,GAAA,SAAArT,GAEA,SAAAqP,EAAAjhB,OAAAimB,OAAA/lB,IAAA,EAAA0R,IAIA1R,IAAA,SAAA0R,GAEA,MAAAA,GAAA,OACA,OAAAA,IACIA,EAAA,OACJ,QAAAA,GAAA,UAAAA,EAAA,IACIA,EAAA,SACJ,QAAAA,GAAA,WAAAA,EAAA,MAEA,QAAAA,GAAA,YAAAA,EAAA,SAKAsT,MAAA,SAAAtT,GAEA,MAAAA,GAAA,GACA,GAAAqP,EAAAjhB,OAAAimB,OAAAhB,GAAA,EAAArT,GAGA,GAAAqP,EAAAjhB,OAAAimB,OAAA/lB,IAAA,EAAA0R,EAAA,SAQAqP,EAAA2B,eAEAH,OAAA,SAAA5Q,EAAAD,GAEA,GAAAne,GAAAoe,EAAArb,OAAA,EACA0vB,EAAAzyB,EAAAme,EACAnb,EAAAyE,KAAA4M,MAAAoe,GACAC,EAAAlF,EAAA2B,cAAAwD,MAAA3D,MAEA,OAAA7Q,GAAA,EACAuU,EAAAtU,EAAA,GAAAA,EAAA,GAAAqU,GAGAtU,EAAA,EACAuU,EAAAtU,EAAApe,GAAAoe,EAAApe,EAAA,GAAAA,EAAAyyB,GAGAC,EAAAtU,EAAApb,GAAAob,EAAApb,EAAA,EAAAhD,IAAAgD,EAAA,GAAAyvB,EAAAzvB,IAIA4vB,OAAA,SAAAxU,EAAAD,GAOA,OALAd,GAAA,EACAX,EAAA0B,EAAArb,OAAA,EACA8vB,EAAAprB,KAAAyqB,IACAY,EAAAtF,EAAA2B,cAAAwD,MAAAI,UAEA/vB,EAAA,EAAiBA,GAAA0Z,EAAQ1Z,IACzBqa,GAAAwV,EAAA,EAAA1U,EAAAzB,EAAA1Z,GAAA6vB,EAAA1U,EAAAnb,GAAAob,EAAApb,GAAA8vB,EAAApW,EAAA1Z,EAGA,OAAAqa,IAIA2V,WAAA,SAAA5U,EAAAD,GAEA,GAAAne,GAAAoe,EAAArb,OAAA,EACA0vB,EAAAzyB,EAAAme,EACAnb,EAAAyE,KAAA4M,MAAAoe,GACAC,EAAAlF,EAAA2B,cAAAwD,MAAAK,UAEA,OAAA5U,GAAA,KAAAA,EAAApe,IAEAme,EAAA,IACAnb,EAAAyE,KAAA4M,MAAAoe,EAAAzyB,GAAA,EAAAme,KAGAuU,EAAAtU,GAAApb,EAAA,EAAAhD,MAAAoe,EAAApb,GAAAob,GAAApb,EAAA,GAAAhD,GAAAoe,GAAApb,EAAA,GAAAhD,GAAAyyB,EAAAzvB,IAIAmb,EAAA,EACAC,EAAA,IAAAsU,EAAAtU,EAAA,GAAAA,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAAAqU,GAAArU,EAAA,IAGAD,EAAA,EACAC,EAAApe,IAAA0yB,EAAAtU,EAAApe,GAAAoe,EAAApe,GAAAoe,EAAApe,EAAA,GAAAoe,EAAApe,EAAA,GAAAyyB,EAAAzyB,GAAAoe,EAAApe,IAGA0yB,EAAAtU,EAAApb,IAAA,KAAAob,EAAApb,GAAAob,EAAApe,EAAAgD,EAAA,EAAAhD,EAAAgD,EAAA,GAAAob,EAAApe,EAAAgD,EAAA,EAAAhD,EAAAgD,EAAA,GAAAyvB,EAAAzvB,IAMA2vB,OAEA3D,OAAA,SAAAiE,EAAAC,EAAAC,GAEA,OAAAD,EAAAD,GAAAE,EAAAF,GAIAF,UAAA,SAAArW,EAAA1Z,GAEA,GAAAowB,GAAA5F,EAAA2B,cAAAwD,MAAAU,SAEA,OAAAD,GAAA1W,GAAA0W,EAAApwB,GAAAowB,EAAA1W,EAAA1Z,IAIAqwB,UAAA,WAEA,GAAA7L,IAAA,EAEA,iBAAA9K,GAEA,GAAA6V,GAAA,CAEA,IAAA/K,EAAA9K,GACA,MAAA8K,GAAA9K,EAGA,QAAA1Z,GAAA0Z,EAAmB1Z,EAAA,EAAOA,IAC1BuvB,GAAAvvB,CAIA,OADAwkB,GAAA9K,GAAA6V,EACAA,MAMAS,WAAA,SAAAC,EAAAC,EAAAI,EAAAC,EAAAJ,GAEA,GAAAK,GAAA,IAAAF,EAAAL,GACAQ,EAAA,IAAAF,EAAAL,GACAQ,EAAAP,GAGA,UAAAD,EAAA,EAAAI,EAAAE,EAAAC,IAFAN,EAAAO,KAEA,EAAAR,EAAA,EAAAI,EAAA,EAAAE,EAAAC,GAAAC,EAAAF,EAAAL,EAAAD,KASA,SAAAS,GAKE/G,SAECrlB,MAFQslB,EAAA,WACX,MAAAW,IACGlf,MAAAhY,EAAAs2B,MAAAv2B,EAAAC,QAAAu2B,Q/E+8E0B3rB,KAAK5K,EAASsI,EAAoB,QAIzDg1B,KACA,SAAUv9B,EAAQC,GgFh2GxB,QAAAu9B,KACA,SAAAvI,OAAA,mCAEA,QAAAwI,KACA,SAAAxI,OAAA,qCAsBA,QAAAyI,GAAAC,GACA,GAAAC,IAAAvlB,WAEA,MAAAA,YAAAslB,EAAA,EAGA,KAAAC,IAAAJ,IAAAI,IAAAvlB,WAEA,MADAulB,GAAAvlB,WACAA,WAAAslB,EAAA,EAEA,KAEA,MAAAC,GAAAD,EAAA,GACK,MAAAryB,GACL,IAEA,MAAAsyB,GAAA/yB,KAAA,KAAA8yB,EAAA,GACS,MAAAryB,GAET,MAAAsyB,GAAA/yB,KAAAwD,KAAAsvB,EAAA,KAMA,QAAAE,GAAAC,GACA,GAAAC,IAAAzlB,aAEA,MAAAA,cAAAwlB,EAGA,KAAAC,IAAAN,IAAAM,IAAAzlB,aAEA,MADAylB,GAAAzlB,aACAA,aAAAwlB,EAEA,KAEA,MAAAC,GAAAD,GACK,MAAAxyB,GACL,IAEA,MAAAyyB,GAAAlzB,KAAA,KAAAizB,GACS,MAAAxyB,GAGT,MAAAyyB,GAAAlzB,KAAAwD,KAAAyvB,KAYA,QAAAE,KACAC,GAAAC,IAGAD,GAAA,EACAC,EAAAxxB,OACAyxB,EAAAD,EAAArE,OAAAsE,GAEAC,GAAA,EAEAD,EAAAzxB,QACA2xB,KAIA,QAAAA,KACA,IAAAJ,EAAA,CAGA,GAAA9lB,GAAAulB,EAAAM,EACAC,IAAA,CAGA,KADA,GAAAK,GAAAH,EAAAzxB,OACA4xB,GAAA,CAGA,IAFAJ,EAAAC,EACAA,OACAC,EAAAE,GACAJ,GACAA,EAAAE,GAAAtkB,KAGAskB,IAAA,EACAE,EAAAH,EAAAzxB,OAEAwxB,EAAA,KACAD,GAAA,EACAJ,EAAA1lB,IAiBA,QAAAomB,GAAAZ,EAAAa,GACAnwB,KAAAsvB,MACAtvB,KAAAmwB,QAYA,QAAAC,MAhKA,GAOAb,GACAG,EARAzH,EAAAt2B,EAAAC,YAgBA,WACA,IAEA29B,EADA,kBAAAvlB,YACAA,WAEAmlB,EAEK,MAAAlyB,GACLsyB,EAAAJ,EAEA,IAEAO,EADA,kBAAAzlB,cACAA,aAEAmlB,EAEK,MAAAnyB,GACLyyB,EAAAN,KAuDA,IAEAS,GAFAC,KACAF,GAAA,EAEAG,GAAA,CAyCA9H,GAAAoI,SAAA,SAAAf,GACA,GAAA3e,GAAA,GAAAtU,OAAAwN,UAAAxL,OAAA,EACA,IAAAwL,UAAAxL,OAAA,EACA,OAAAC,GAAA,EAAuBA,EAAAuL,UAAAxL,OAAsBC,IAC7CqS,EAAArS,EAAA,GAAAuL,UAAAvL,EAGAwxB,GAAA9Y,KAAA,GAAAkZ,GAAAZ,EAAA3e,IACA,IAAAmf,EAAAzxB,QAAAuxB,GACAP,EAAAW,IASAE,EAAA5zB,UAAAmP,IAAA,WACAzL,KAAAsvB,IAAA1lB,MAAA,KAAA5J,KAAAmwB,QAEAlI,EAAAqI,MAAA,UACArI,EAAAsI,SAAA,EACAtI,EAAAuI,OACAvI,EAAAwI,QACAxI,EAAAyI,QAAA,GACAzI,EAAA0I,YAIA1I,EAAA2I,GAAAR,EACAnI,EAAA4I,YAAAT,EACAnI,EAAA6I,KAAAV,EACAnI,EAAA8I,IAAAX,EACAnI,EAAA+I,eAAAZ,EACAnI,EAAAgJ,mBAAAb,EACAnI,EAAA1c,KAAA6kB,EACAnI,EAAAiJ,gBAAAd,EACAnI,EAAAkJ,oBAAAf,EAEAnI,EAAAmJ,UAAA,SAAAre,GAAqC,UAErCkV,EAAAoJ,QAAA,SAAAte,GACA,SAAA6T,OAAA,qCAGAqB,EAAAqJ,IAAA,WAA2B,WAC3BrJ,EAAAsJ,MAAA,SAAAC,GACA,SAAA5K,OAAA,mCAEAqB,EAAAwJ,MAAA,WAA4B,WhFk3GtBC,KACA,SAAU//B,EAAQC,GiF1iHxBD,EAAAC,QAAA,ukCjFgjHM+/B,KACA,SAAUhgC,EAAQC,GkFjjHxBD,EAAAC,QAAA,wtFlFujHMggC,KACA,SAAUjgC,EAAQC,GmFxjHxBD,EAAAC,QAAA,y6DnF8jHMigC,KACA,SAAUlgC,EAAQC,GoF/jHxBD,EAAAC,QAAA,4oDpFqkHMkgC,KACA,SAAUngC,EAAQC,KAMlBmgC,KACA,SAAUpgC,EAAQC,KAMlBogC,KACA,SAAUrgC,EAAQC,GqFplHxBD,EAAAC,QAAA,w3crF0lHMqgC,KACA,SAAUtgC,EAAQC,GsF3lHxBD,EAAAC,QAAA,slStFimHMsgC,KACA,SAAUvgC,EAAQC,GuFlmHxBD,EAAAC,QAAA,+qlBvFwmHMugC,KACA,SAAUxgC,EAAQC,GwFzmHxBD,EAAAC,QAAA,2jCxF+mHMwgC,KACA,SAAUzgC,EAAQC,GyFhnHxBD,EAAAC,QAAA,igBzFsnHMygC,KACA,SAAU1gC,EAAQC,G0FvnHxBD,EAAAC,QAAA,6oM1F6nHM0gC,KACA,SAAU3gC,EAAQC,G2F9nHxBD,EAAAC,QAAA,s8J3FooHM2gC,KACA,SAAU5gC,EAAQC,G4FroHxBD,EAAAC,QAAA,woK5F2oHM4gC,KACA,SAAU7gC,EAAQC,G6F5oHxBD,EAAAC,QAAA,yqM7FkpHM6gC,KACA,SAAU9gC,EAAQC,G8FnpHxBD,EAAAC,QAAA,k9C9FypHM8gC,KACA,SAAU/gC,EAAQC,G+F1pHxBD,EAAAC,QAAA,oa/FgqHM+gC,KACA,SAAUhhC,EAAQC,GgGjqHxBD,EAAAC,QAAA,8lBhGuqHMghC,KACA,SAAUjhC,EAAQC,GiGxqHxBD,EAAAC,QAAA,m+CjG8qHMihC,KACA,SAAUlhC,EAAQC,GkG/qHxBD,EAAAC,QAAA,giHlGqrHMkhC,KACA,SAAUnhC,EAAQC,GmGtrHxBD,EAAAC,QAAA,iqOnG4rHMmhC,KACA,SAAUphC,EAAQC,GoG7rHxBD,EAAAC,QAAA,irHpGmsHMohC,KACA,SAAUrhC,EAAQC,GqGpsHxBD,EAAAC,QAAA,uuKrG0sHMqhC,KACA,SAAUthC,EAAQC,GsG3sHxBD,EAAAC,QAAA,qqDtGitHMshC,KACA,SAAUvhC,EAAQC,GuGltHxBD,EAAAC,QAAA,+oJvGwtHMuhC,KACA,SAAUxhC,EAAQC,GwGztHxBD,EAAAC,QAAA,+XxG+tHMwhC,KACA,SAAUzhC,EAAQC,GyGhuHxBD,EAAAC,QAAA,+yEzGsuHMyhC,KACA,SAAU1hC,EAAQsI,EAAqBC,GAE7C,Y0GzuHA,IAAAo5B,GAAAp5B,EAAA,KAAAA,GAAAE,EAAAH,EAAA,mCAAAq5B,GAAA,OAAAC,IAAAr5B,EAAA,KAAAA,EAAA,KAAAA,EAAA,MAAAA,GAAA8d,EAAAub,EAAAr5B,GAAAs5B,EAAAD,EAAA,kBAAAr5B,EAAAE,EAAAH,EAAA,iCAAAs5B,GAAA,mBAAAE,IAAAv5B,EAAA,KAAAA,EAAA,KAAAA,GAAAE,EAAAH,EAAA,iCAAAw5B,GAAA,K1GiwHMC,KACA,SAAU/hC,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO05B,IAC9E,IAAIhc,GAA8Czd,EAAoB,GAClE05B,EAAsD15B,EAAoB,IAC1E25B,EAAyD35B,EAAoB,IAClG6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2G9vH1Gia,EAAA,WAIC,QAAAA,GAAmBvZ,EACR0Z,EACAtZ,GAFX,GAAAnX,GAAArD,IAAmBA,MAAAoa,OACRpa,KAAA8zB,UACA9zB,KAAAwa,MACVxa,KAAKoa,KAAK2Z,cAAcpZ,UAAU,WAAM,MAAAtX,GAAKmX,IAAIhP,iBAGlDmoB,EAAAr3B,UAAA03B,cAAA,SAAcC,GACC,GAAVA,EACHj0B,KAAK8zB,QAAQI,cAEbl0B,KAAK8zB,QAAQzU,Q3GmwHZ,IAAI5C,GAAIC,EAAIC,C2GjwHhB,OAhBagX,GAAe5a,GAX3Bre,OAAAid,EAAA,YACA/G,SAAU,SACVG,MAAQojB,MAAS,iBACjBrjB,SAAU,wHACVK,QACC,6HAED/S,QAAS,UACTqhB,gBAAiB9H,EAAA,wBAAwB+H,S3GgyHlClG,EAAW,qB2GzxHkB,mB3GyxHYiD,M2GzxHZ,KAAXmX,EAAA,GAAAA,EAAA,IAAWnX,GAAA/hB,OACF,mBADEgiB,MACF,KAAdmX,EAAA,GAAAA,EAAA,IAAcnX,GAAAhiB,OACD,mBADCiiB,MACD,KAAjBhF,EAAA,mBAAAA,EAAA,oBAAiBgF,GAAAjiB,UANrBi5B,O3GsyHPS,KACA,SAAUziC,EAAQC,KAMlByiC,KACA,SAAU1iC,EAAQC,G4Gh0HxBD,EAAAC,QAAA,+jH5Gs0HM0iC,KACA,SAAU3iC,EAAQC,G6Gv0HxBD,EAAAC,QAAA,mR7G60HM2iC,KACA,SAAU5iC,EAAQC,G8G90HxBD,EAAAC,QAAA,uT9Go1HM4iC,KACA,SAAU7iC,EAAQC,G+Gr1HxBD,EAAAC,QAAA,y3B/G21HM6iC,KACA,SAAU9iC,EAAQC,GgH51HxBD,EAAAC,QAAA,09oBhHk2HM8iC,KACA,SAAU/iC,EAAQC,GiHn2HxBD,EAAAC,QAAA,6HjHy2HM+iC,KACA,SAAUhjC,EAAQC,GkH12HxBD,EAAAC,QAAA,gyBlHg3HMgjC,KACA,SAAUjjC,EAAQC,GmHj3HxBD,EAAAC,QAAA,otDnHu3HMijC,KACA,SAAUljC,EAAQC,GoHx3HxBD,EAAAC,QAAA,uyFpH83HMkjC,KACA,SAAUnjC,EAAQC,GqH/3HxBD,EAAAC,QAAA,mFrHq4HMmjC,KACA,SAAUpjC,EAAQC,GsHt4HxBD,EAAAC,QAAA,01CtH44HMojC,KACA,SAAUrjC,EAAQC,GuH74HxBD,EAAAC,QAAA,0hIvHm5HMqjC,KACA,SAAUtjC,EAAQC,GwHp5HxBD,EAAAC,QAAA,8iOxH05HMsjC,KACA,SAAUvjC,EAAQC,GyH35HxBD,EAAAC,QAAA,yMzHi6HMujC,KACA,SAAUxjC,EAAQC,G0Hl6HxBD,EAAAC,QAAA,0P1Hw6HMwjC,KACA,SAAUzjC,EAAQC,G2Hz6HxBD,EAAAC,QAAA,42G3H+6HMyjC,KACA,SAAU1jC,EAAQC,G4Hh7HxBD,EAAAC,QAAA,wW5Hs7HM0jC,KACA,SAAU3jC,EAAQC,G6Hv7HxBD,EAAAC,QAAA,80B7H67HM2jC,KACA,SAAU5jC,EAAQC,G8H97HxBD,EAAAC,QAAA,29R9Ho8HM4jC,KACA,SAAU7jC,EAAQC,G+Hr8HxBD,EAAAC,QAAA,koG/H28HM6jC,KACA,SAAU9jC,EAAQC,GgI58HxBD,EAAAC,QAAA,ychIk9HM8jC,KACA,SAAU/jC,EAAQC,GiIn9HxBD,EAAAC,QAAA,4lHjIy9HM+jC,KACA,SAAUhkC,EAAQC,GkI19HxBD,EAAAC,QAAA,y3ElIg+HMgkC,KACA,SAAUjkC,EAAQC,GmIj+HxBD,EAAAC,QAAA,g+GnIu+HMikC,KACA,SAAUlkC,EAAQC,EAASsI,GAEjC,YoIz+HAQ,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,GAC9C,IAAA6D,GAAa1E,EAAQ,GACrB4E,EAAe5E,EAAQ,GACvB47B,EAA6B57B,EAAQ,KAIrC67B,EAAA,WACA,QAAAA,MAEA,MAAAA,KAEAA,GAAAvlB,aACKC,KAAA7R,EAAAuT,SAAAxB,OACL0B,SACAvT,EAAAwT,cAEAF,cACA0jB,EAAAE,qBAEApkC,SACAkkC,EAAAE,yBAKAD,EAAA3kB,eAAA,WAA+C,UAC/Cxf,EAAAmkC,oBpIg/HME,KACA,SAAUtkC,EAAQC,GqI7gIxBD,EAAAC,QAAA,68OrImhIMskC,KACA,SAAUvkC,EAAQC,GsIphIxBD,EAAAC,QAAA,4qNtI0hIMukC,KACA,SAAUxkC,EAAQC,GuI3hIxBD,EAAAC,QAAA,mwIvIiiIMwkC,KACA,SAAUzkC,EAAQC,GwIliIxBD,EAAAC,QAAA,k3BxIwiIMykC,KACA,SAAU1kC,EAAQC,GyIziIxBD,EAAAC,SAAkBonB,OAAA,QAAAsd,kBAAA,EAAAC,eAA0DjG,MAAA,iBAAAjF,SAAA,GAAAmL,SAAkDC,IAAA,sDAAAC,YAAA,QAAA1tB,MAAA,KAAAE,OAAA,IAAAytB,QAAA,SAA6HC,eAAmBH,IAAA,oDAAAztB,MAAA,IAAAE,OAAA,MAAmF2tB,cAAkBC,MAAA,uFAAAC,SAA0GhkB,KAAA,WAAkBA,KAAA,cAAmBikB,gBAAA,8hBAAAC,iBAAA,yGAAAC,KAAA,KAAAC,WAAA,qHAAAC,WAAA,iBAA81B9G,MAAA,iBAAAjF,SAAA,MAAAmL,SAAqDC,IAAA,wDAA4DG,eAAmBH,IAAA,8DAAAztB,MAAA,IAAAE,OAAA,QAAiGonB,MAAA,oBAAAjF,SAAA,MAAAmL,SAAwDC,IAAA,wDAA4DG,eAAmBH,IAAA,iEAAAztB,MAAA,KAAAE,OAAA,QAAqGonB,MAAA,kBAAAjF,SAAA,MAAAmL,SAAsDC,IAAA,wDAA4DG,eAAmBH,IAAA,8DAAAztB,MAAA,KAAAE,OAAA,SAAmGonB,MAAA,SAAAjF,SAAA,MAAAmL,SAA6CC,IAAA,wDAA4DG,eAAmBH,IAAA,sDAAAztB,MAAA,KAAAE,OAAA,QAA0FonB,MAAA,uBAAAjF,SAAA,OAAAmL,SAA4DC,IAAA,wDAA4DG,eAAmBH,IAAA,oEAAAztB,MAAA,IAAAE,OAAA,QAAuGonB,MAAA,4BAAAjF,SAAA,GAAAmL,SAA6DC,IAAA,wDAA4DG,eAAmBH,IAAA,4DAAAztB,MAAA,KAAAE,OAAA,SAAiGonB,MAAA,6BAAAjF,SAAA,MAAAmL,SAAiEC,IAAA,wDAA4DG,eAAmBH,IAAA,4DAAAztB,MAAA,KAAAE,OAAA,SAAiGonB,MAAA,yBAAAjF,SAAA,MAAAmL,SAA6DC,IAAA,wDAA4DG,eAAmBH,IAAA,4DAAAztB,MAAA,KAAAE,OAAA,SAAiGonB,MAAA,iBAAAjF,SAAA,WAAAmL,SAA0DC,IAAA,wDAA4DG,eAAmBH,IAAA,8DAAAztB,MAAA,KAAAE,OAAA,UzI+iI/yGmuB,KACA,SAAU1lC,EAAQC,G0IhjIxBD,EAAAC,QAAA,2hD1IsjIM0lC,KACA,SAAU3lC,EAAQC,G2IvjIxBD,EAAAC,QAAA,gjE3I6jIM2lC,KACA,SAAU5lC,EAAQC,G4I9jIxBD,EAAAC,QAAA,8I5IokIM4lC,KACA,SAAU7lC,EAAQC,G6IrkIxBD,EAAAC,QAAA,oJ7I2kIM6lC,KACA,SAAU9lC,EAAQC,G8I5kIxBD,EAAAC,QAAA,ymO9IklIM8lC,KACA,SAAU/lC,EAAQC,G+InlIxBD,EAAAC,QAAA,umD/IylIM+lC,KACA,SAAUhmC,EAAQC,GgJ1lIxBD,EAAAC,QAAA,sFhJgmIMgmC,KACA,SAAUjmC,EAAQC,GiJjmIxBD,EAAAC,QAAA,8IjJumIMimC,KACA,SAAUlmC,EAAQC,GkJxmIxBD,EAAAC,QAAA,0rDlJ8mIMkmC,KACA,SAAUnmC,EAAQC,GmJ/mIxBD,EAAAC,QAAA,23EnJqnIMmmC,KACA,SAAUpmC,EAAQC,GoJtnIxBD,EAAAC,QAAA,qQpJ4nIMomC,KACA,SAAUrmC,EAAQC,GqJ7nIxBD,EAAAC,QAAA,4jCrJmoIMqmC,KACA,SAAUtmC,EAAQC,GsJpoIxBD,EAAAC,QAAA,uiMtJ0oIMsmC,KACA,SAAUvmC,EAAQC,GuJ3oIxBD,EAAAC,QAAA,ghLvJipIMumC,KACA,SAAUxmC,EAAQC,GwJlpIxBD,EAAAC,QAAA,y4DxJwpIMwmC,KACA,SAAUzmC,EAAQC,GyJzpIxBD,EAAAC,QAAA,6nEzJ+pIMymC,KACA,SAAU1mC,EAAQsI,EAAqBC,GAE7C,cAC4B,SAASud,GAAmCvd,EAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOq+B,IACvH,IAAI3gB,GAA8Czd,EAAoB,GAClE0d,EAAgD1d,EAAoB,GACpE2d,EAA6C3d,EAAoB,GACjE4d,EAAwD5d,EAAoB,IAE5Eq+B,GADgEr+B,EAAoB8d,EAAEF,GAC7B5d,EAAoB,KAC7Es+B,EAA2Dt+B,EAAoB,KAC/Eu+B,EAA8Dv+B,EAAoB,IAClFie,EAAsDje,EAAoB,GAC1Eke,EAAsDle,EAAoB,IAC1Ew+B,EAAqDx+B,EAAoB,IAC9Fqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0J5qI1G4e,EAAA,SAAA1e,GAIC,QAAA0e,GACQhe,EACAC,EACCV,EACA8e,EACAC,EACAC,EACAze,EACAC,EACAH,EACAC,EACA2e,GAXT,GAAAz1B,GAYCuW,EAAApd,KAAAwD,KAAMsa,EAAQC,IAAYva,I1JwrIpB,O0JnsICqD,GAAAiX,SACAjX,EAAAkX,cACClX,EAAAwW,QACAxW,EAAAs1B,SACAt1B,EAAAu1B,OACAv1B,EAAAw1B,iBACAx1B,EAAA+W,OACA/W,EAAAgX,uBACAhX,EAAA6W,sBACA7W,EAAA8W,QACA9W,EAAAy1B,Y1JyrIKz1B,E0JxsImBkV,EAAA+f,EAAA1e,GAmBjC0e,EAAAh8B,UAAA+H,SAAA,cAAAhB,GAAArD,IACCA,MAAK6Z,MAAM5R,KAAK0S,UAAU,SAAAvgB,GACzBiJ,EAAK01B,SAAW3+B,EAAE2+B,SAAStd,QAC3BpY,EAAK21B,qBACL,KAAe,GAAAC,GAAA,EAAAxc,EAAAriB,EAAEygB,gBAAgBY,QAAlBwd,EAAAxc,EAAApe,OAAA46B,IAAyB,CAAnC,GAAIC,GAAEzc,EAAAwc,EACV51B,GAAK21B,mBAAmBE,EAAGC,aAAatmB,KAAM,EAG/C,GAAIumB,GAAgB/1B,EAAKy1B,UAAU9mB,MACnC,IAAqB,MAAjBonB,EAAuB,CAG1B,IAAc,GADVC,GAAkB,KACR3c,EAAA,EAAAC,EAAAtZ,EAAK01B,SAALrc,EAAAC,EAAAte,OAAAqe,IACb,IAAc,GADNnhB,GAACohB,EAAAD,GACKE,EAAA,EAAAC,EAAAthB,EAAE+9B,MAAF1c,EAAAC,EAAAxe,OAAAue,IAAS,CAAnB,GAAI2c,GAAE1c,EAAAD,EACT,IAAG2c,EAAG1mB,IAAMumB,EAAe,CAC1BC,EAAkB99B,EAAEsX,EACpB,QAIHxP,EAAKm2B,aAAaH,EAAiBD,OAKtCd,EAAAh8B,UAAA6e,gBAAA,WACqB1D,EAAE,wCACb2D,WAGVkd,EAAAh8B,UAAAm9B,yBAAA,SAAyBC,GACxB,MAAQA,KAAU15B,MAAKg5B,oBAGxBV,EAAAh8B,UAAAk9B,aAAA,SAAaG,EAAmBD,GAC/B,IAAiB,GAAAT,GAAA,EAAAxc,EAAAzc,KAAK+4B,SAALE,EAAAxc,EAAApe,OAAA46B,IAAe,CAA3B,GAAIW,GAAInd,EAAAwc,EACZ,IAAIW,EAAK/mB,IAAM8mB,EAAW,CACzB,IAAiB,GAAAjd,GAAA,EAAAC,EAAAid,EAAKN,MAAL5c,EAAAC,EAAAte,OAAAqe,IAAY,CAAxB,GAAIhB,GAAIiB,EAAAD,EACZ,IAAIhB,EAAK7I,KAAO6mB,EAAQ,CACvB15B,KAAK65B,UAAUne,EACf,QAGF,SAKH4c,EAAAh8B,UAAAw9B,cAAA,SAAcJ,GAEbz5B,OAAO85B,KAAK,2CAA4C,WAGjDzB,EAAAh8B,UAAAu9B,UAAR,SAAkBne,GAAlB,GAAArY,GAAArD,IACC,IAAI0b,EAAKse,oBAER,WADAh6B,MAAK85B,cAAcpe,EAAK7I,GAGzB7S,MAAK64B,eAAe72B,IAAIhC,KAAK44B,KAAKta,WAAW3D,UAC5C,SAAAvB,GAAK,MAAA/V,GAAK42B,aAAa7gB,EAAGsC,IAC1B,SAAAze,GAAK,MAAAoG,GAAK62B,iBAGJ5B,EAAAh8B,UAAA29B,aAAR,SAAqBnX,EAAoBpH,GAAzC,GAAArY,GAAArD,IACK8iB,GAAEqX,SAAWrX,EAAEqX,QAAQC,cAAgBp6B,KAAK44B,KAAKta,UACpDte,KAAKka,oBAAoBmgB,sBAAsBr6B,KAAK44B,KAAKta,WAAW3D,UAAU,SAAAvgB,GAC7E,GAAIkgC,GAA8B,IAClC,IAAIlgC,EAAE4jB,MAAQ,EACb,IAAiB,GAAAib,GAAA,EAAAxc,EAAAriB,EAAEqhB,QAAFwd,EAAAxc,EAAApe,OAAA46B,IAAW,CAAvB,GAAIzzB,GAAIiX,EAAAwc,EACZ,IAAIzzB,EAAK2zB,eAAiBzd,EAAK7I,GAAI,CAClCynB,EAAsB90B,EAAKqN,EAC3B,QAKyB,OAAxBynB,EACHj3B,EAAKk3B,WAAW7e,EAAM4e,GAEtBj3B,EAAKm3B,8BAA8B9e,EAAK7I,KACvC,SAAA5V,GAAK,MAAAoG,GAAK62B,gBAEbl6B,KAAKy6B,4BAA4B/e,EAAK7I,KAGhCylB,EAAAh8B,UAAAk+B,8BAAR,SAAsCd,GAAtC,GAAAr2B,GAAArD,IACKA,MAAK44B,KAAKta,WACbte,KAAKka,oBAAoBwgB,wBAAwB16B,KAAK44B,KAAKta,UAAWob,GAAQ/e,UAC7E,SAAAvgB,GAAK,MAAAiJ,GAAKs1B,OAAOgC,UAAU,QAAS,eAAgBvgC,EAAEyY,MACtD,SAAA5V,GAAK,MAAAoG,GAAK62B,iBAGL5B,EAAAh8B,UAAAm+B,4BAAR,SAAoCf,GAApC,GAAAr2B,GAAArD,IACCA,MAAKoa,KAAKwgB,SAAQ,GAClB56B,KAAKma,MAAM+E,OAAOlf,KAAKua,YAAYmE,UAAU,sCAE3CS,MAAOnf,KAAKua,YAAYmE,UAAU,uBAAwBU,GAAI,QAC9DC,OAAO,EAAMC,MAAO,WAAM,MAAAjc,GAAKs1B,OAAOgC,UAAU,QAAS,UAAW,WAAajf,KAAMge,QAEvFva,MAAOnf,KAAKua,YAAYmE,UAAU,0BAA2BU,GAAI,QAASC,OAAO,MAK5EiZ,EAAAh8B,UAAAi+B,WAAR,SAAmB7e,EAAmB4e,GAAtC,GAAAj3B,GAAArD,IACCA,MAAKoa,KAAKwgB,SAAQ,GAClB56B,KAAKma,MAAM+E,OAAOlf,KAAKua,YAAYmE,UAAU,uCAAyC3L,KAAM2I,EAAK3I,SAE/FoM,MAAOnf,KAAKua,YAAYmE,UAAU,4BAA6BU,GAAI,QACnEC,OAAO,EAAMC,MAAO,WAAM,MAAAjc,GAAKs1B,OAAOgC,UAAU,QAAS,eAAgBL,OAEzEnb,MAAOnf,KAAKua,YAAYmE,UAAU,8BAA+BU,GAAI,OACrEC,OAAO,EAAMC,MAAO,WACfjc,EAAKu1B,KAAKta,WACbjb,EAAK6W,oBAAoB2gB,wBAAwBx3B,EAAKu1B,KAAKta,UAAWgc,GACpE3f,UACD,SAAAvB,GAAO/V,EAAKy1B,UAAUgC,QAASz3B,EAAKm3B,8BAA8B9e,EAAK7I,KACvE,SAAA5V,GAAK,MAAAoG,GAAK62B,mBAGb/a,MAAOnf,KAAKua,YAAYmE,UAAU,0BAA2BU,GAAI,QACjEC,OAAO,EAAMC,MAAO,WAAM,MAAAjc,GAAKy1B,UAAUgC,aAKpCxC,EAAAh8B,UAAA49B,YAAR,WACCl6B,KAAKoa,KAAKwgB,SAAQ,GAClB56B,KAAKqa,qBAAqB5D,KAAKzW,KAAKua,YAAYmE,UAAU,mCACvDrI,SAAU,kB1JirIX,IAAIoG,GAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,C0J/qIhD,OAtJamb,GAAYvf,GANxBre,OAAAid,EAAA,YACA/G,SAAU,gBACVE,SAAU5W,EAAQ,MAClBiX,QAASjX,EAAQ,OACjBulB,gBAAiB9H,EAAA,wBAAwB+H,S1J+0IlClG,EAAW,qB0Jx0IW,mB1Jw0ImBiD,M0Jx0InB,KAAb5E,EAAA,GAAAA,EAAA,IAAa4E,GAAA/hB,OACU,mBADVgiB,MACU,KAAlB7E,EAAA,GAAAA,EAAA,IAAkB6E,GAAAhiB,OACT,mBADSiiB,MACT,KAAd/E,EAAA,GAAAA,EAAA,IAAc+E,GAAAjiB,OACP,mBADOkiB,MACP,KAANhF,EAAA,GAAAA,EAAA,IAAMgF,GAAAliB,OACG,mBADHmiB,MACG,KAAX1E,EAAA,GAAAA,EAAA,IAAW0E,GAAAniB,OACa,mBADboiB,MACa,KAAdyb,EAAA,GAAAA,EAAA,IAAczb,GAAApiB,OACb,mBADaqiB,MACb,KAAX3E,EAAA,GAAAA,EAAA,IAAW2E,GAAAriB,OACyB,mBADzBsiB,MACyB,KAApBlF,EAAA,sBAAAA,EAAA,uBAAoBkF,GAAAtiB,OACF,mBADEuiB,MACF,KAAnBwb,EAAA,GAAAA,EAAA,IAAmBxb,GAAAviB,OACrB,mBADqBwiB,MACrB,KAAZwb,EAAA,GAAAA,EAAA,IAAYxb,GAAAxiB,OACQ,mBADRyiB,MACQ,KAAhBqb,EAAA,GAAAA,EAAA,IAAgBrb,GAAAziB,UAfxB49B,IAAqBzgB,EAAA,K1Jm1ILrb,KAAKvC,EAAqBC,EAAoB,MAIrE6gC,KACA,SAAUppC,EAAQC,G2J52IxBD,EAAAC,QAAA,m+J3Jk3IMopC,KACA,SAAUrpC,EAAQC,G4Jn3IxBD,EAAAC,QAAA,slK5Jy3IMqpC,KACA,SAAUtpC,EAAQC,EAASsI,I6J13IjC,SAAAghC,GAAA,GAAAC,MAAA,SAAApN,GAAwEp8B,EAAAC,QAAAm8B,KAA0R,WAAuC,kBAAmB,QAAA3U,GAAAnc,EAAA+a,EAAAyW,GAAkB,QAAA+E,GAAAl1B,EAAAyvB,GAAgB,IAAA/V,EAAA1Z,GAAA,CAAU,IAAArB,EAAAqB,GAAA,CAAU,GAAA6a,GAAA,kBAAAgiB,KAA0C,KAAApN,GAAA5U,EAAA,MAAgBgiB,GAAC78B,GAAA,EAAO,IAAA88B,EAAA,MAAAA,GAAA98B,GAAA,EAAoB,IAAAwkB,GAAA,GAAA8D,OAAA,uBAAAtoB,EAAA,IAA8C,MAAAwkB,GAAAuY,KAAA,mBAAAvY,EAAkC,GAAAvnB,GAAAyc,EAAA1Z,IAAY1M,WAAYqL,GAAAqB,GAAA,GAAA9B,KAAAjB,EAAA3J,QAAA,SAAAwnB,GAAoD,MAAAoa,GAAjBv2B,EAAAqB,GAAA,GAAA8a,IAAiBA,IAAe7d,IAAA3J,QAAAwnB,EAAAnc,EAAA+a,EAAAyW,GAAsB,MAAAzW,GAAA1Z,GAAA1M,QAAoB,OAAAwpC,GAAA,kBAAAD,MAAA78B,EAAA,EAAkDA,EAAAmwB,EAAApwB,OAAWC,IAAAk1B,EAAA/E,EAAAnwB,GAAY,OAAAk1B,GAAS,MAAApa,OAAckiB,GAAA,SAAAH,EAAAxpC,EAAAC,GAC71B,YACA8I,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA2pC,eAAA3pC,EAAA4pC,eAAA,EACA,IAAAA,GAAAL,EAAA,gBACAvpC,GAAA4pC,YACA,IAAAD,GAAAJ,EAAA,oBACAvpC,GAAA2pC,mBAEGE,gBAAA,EAAAC,oBAAA,IAAwCC,GAAA,SAAAR,EAAAxpC,EAAAC,GAC3C,YACA,IAAAgqC,GAAA57B,WAAA47B,iBAAA,SAAAC,GACA,MAAAA,MAAAC,WAAAD,GAA4CE,QAAAF,GAE5CnhC,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAoqC,kBAAA,EACA,IAAAC,GAAAL,EAAAT,EAAA,qBACAa,EAEA,mBAAAE,iBAAAD,EAAAF,OACAnqC,GAAAoqC,kBAEGG,mBAAA,MAAuBC,GAAA,SAAAjB,EAAAxpC,EAAAC,GAC1B,YAGA,SAAA4pC,GAAA/nB,GACA,GAAA4oB,GACAC,EAAAzd,KAAAE,UAAAtL,EACA,KAAAA,EAAA8oB,oBACAF,EAAAG,EAAAF,IAEA,MAAAD,EAGA,IAAAI,GAAAxhC,SAAAiC,cAAA,UACAw/B,EAAAjpB,EAAAkpB,mBACAC,EAAAnpB,EAAAmpB,WAAA3hC,SAAAuC,IAuBA,OAtBAi/B,GAAAI,IAAAppB,EAAAopB,IACAJ,EAAA5pB,GAAAY,EAAAZ,IAAA,GACA4pB,EAAAK,OAAA,EACArpB,EAAAspB,aACAN,EAAAO,aAAA,iBAAAvpB,EAAAspB,aAEAriC,OAAAusB,KAAAyV,GAAAr/B,QAAA,SAAA4b,GACAwjB,EAAAO,aAAA,QAAA/jB,EAAA,GAAAyjB,EAAAzjB,MAEAojB,EAAA,GAAAY,GAAAjB,cAAA,SAAA9U,EAAAgW,GACAT,EAAAthC,iBAAA,kBACA+rB,EAAAuV,KAEAA,EAAAthC,iBAAA,mBACA+hC,EAAA,GAAAtW,OAAAnT,EAAAopB,IAAA,uBAEAJ,EAAAthC,iBAAA,mBACA+hC,EAAA,GAAAtW,OAAAnT,EAAAopB,IAAA,oBAEAD,EAAAO,YAAAV,KAEAD,EAAAF,GAAAD,EACAA,EApCA,GAAAY,GAAA9B,EAAA,iBACAqB,IAqCAhB,GAAA4B,WAAA,WACAZ,MAEA7qC,EAAAC,QAAA4pC,IAEG6B,gBAAA,IAAkBC,GAAA,SAAAnC,EAAAxpC,EAAAC,GACrB,YACA,IAAAqrC,GAAA9B,EAAA,gBACAxpC,GAAAC,QAAA,SAAA6hB,GACA,GAAA8pB,GAAAtiC,SAAA8Y,cAAA,cAAAN,EAAA+pB,KAAA,KACA,IAAAD,EACA,MAAAN,GAAAjB,cAAA9U,QAAAqW,EAEAA,GAAAtiC,SAAAiC,cAAA,OACA,IAAA0/B,GAAAnpB,EAAAmpB,WAAA3hC,SAAAuC,IAWA,OAVA+/B,GAAAP,aAAA,oBACAO,EAAAP,aAAA,mBACAO,EAAAP,aAAA,OAAAvpB,EAAA+pB,MACAD,EAAAP,aAAA,KAAAvpB,EAAAZ,IACA+pB,EAAAa,WACAb,EAAAx/B,aAAAmgC,EAAAX,EAAAa,YAGAb,EAAAO,YAAAI,GAEAN,EAAAjB,cAAA9U,QAAAqW,MAGGF,gBAAA,IAAkBK,GAAA,SAAAvC,EAAAxpC,EAAAC,GACrBD,EAAAC,QAAAupC,EAAA,wBAEGwC,qBAAA,IAAuBC,GAAA,SAAAzC,EAAAxpC,EAAAC,GAC1B,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,UACA,WAAAC,KAAAH,SAGII,GAAA,SAAA9C,EAAAxpC,EAAAC,GACJ,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,UACA,QAAAC,KAAAH,SAGIK,GAAA,SAAA/C,EAAAxpC,EAAAC,GACJ,YACA,IAAAusC,GAAAhD,EAAA,aACAiD,EAAAjD,EAAA,gBACAkD,EAAAlD,EAAA,mBACAmD,EAAAnD,EAAA,cACAoD,EAAApD,EAAA,YACAxpC,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,aACA,IAAAF,EAAA//B,QAAA,gBAAA+/B,EAAA//B,QAAA,UACAqgC,EAAAN,IACAO,EAAAP,IACAQ,EAAAR,IACAS,EAAAT,IACAU,EAAAV,OAGGW,kBAAA,EAAAC,YAAA,GAAAC,aAAA,GAAAC,eAAA,GAAAC,YAAA,KAAoFC,GAAA,SAAA1D,EAAAxpC,EAAAC,GACvF,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,WACA,IAAAF,EAAA//B,QAAA,qBAGIghC,IAAA,SAAA3D,EAAAxpC,EAAAC,GACJ,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,WACA,IAAAF,EAAA//B,QAAA,eAGIihC,IAAA,SAAA5D,EAAAxpC,EAAAC,GACJ,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,UACA,WAAAC,KAAAH,SAGImB,IAAA,SAAA7D,EAAAxpC,EAAAC,GACJ,YACA,IAAAqtC,GAAA9D,EAAA,YACAxpC,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,WACA,IAAAF,EAAA//B,QAAA,SAAAmhC,EAAApB,MAGGqB,YAAA,KAAeC,IAAA,SAAAhE,EAAAxpC,EAAAC,GAClB,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,WACA,IAAAF,EAAA//B,QAAA,iBAGIshC,IAAA,SAAAjE,EAAAxpC,EAAAC,GACJ,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,WACA,IAAAF,EAAA//B,QAAA,mBAGIuhC,IAAA,SAAAlE,EAAAxpC,EAAAC,GACJ,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,WACA,IAAAF,EAAA//B,QAAA,gBAGIwhC,IAAA,SAAAnE,EAAAxpC,EAAAC,GACJ,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,UACA,SAAAC,KAAAH,SAGI0B,IAAA,SAAApE,EAAAxpC,EAAAC,GACJ,YAEA,SAAA4tC,GAAA3B,GACA,gBAAAG,KAAAH,GAFA,GAAA4B,GAAAtE,EAAA,WAIAxpC,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,UACA0B,EAAA5B,IAAA2B,EAAA3B,MAGG6B,WAAA,KAAcC,IAAA,SAAAxE,EAAAxpC,EAAAC,GACjB,YAIA,SAAAguC,GAAA/B,GACA,MAAAgC,GAAA7B,KAAAH,GAEA,QAAAiC,GAAAjC,GACA,MAAAA,GAAA//B,QAAA,YAEA,QAAAiiC,GAAAlC,GACA,MAAAA,GAAA//B,QAAA,WAVA,GAAA2hC,GAAAtE,EAAA,YACA6E,EAAA7E,EAAA,oBACA0E,EAAA,SAUAluC,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,UACA0B,EAAA5B,IACA+B,EAAA/B,KACAiC,EAAAjC,KACAmC,EAAAnC,KACAkC,EAAAlC,MAGG6B,WAAA,GAAAO,mBAAA,KAAoCC,IAAA,SAAA/E,EAAAxpC,EAAAC,GACvC,YACA,IAAA6tC,GAAAtE,EAAA,YACAgF,EAAAhF,EAAA,6BACAxpC,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,YACA0B,EAAA5B,OAEAsC,EAAAtC,IAIA,6BAAAG,KAAAH,OAKG6B,WAAA,GAAAU,6BAAA,KAA8CC,IAAA,SAAAlF,EAAAxpC,EAAAC,GACjD,YACA,IAAA0uC,GAAAnF,EAAA,mBACAxpC,GAAAC,QAAA,SAAAisC,EAAA0C,GAKA,MAJAA,OACA,KAAAA,EACAA,EACAtgC,OAAAugC,UAAAC,QACAH,EAAAzC,IAAA0C,KAGGG,mBAAA,KAAsBC,IAAA,SAAAxF,EAAAxpC,EAAAC,GACzB,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,UACA,oBAAAC,KAAAH,SAGI+C,IAAA,SAAAzF,EAAAxpC,EAAAC,GACJ,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,WACA,IAAAF,EAAA//B,QAAA,UACA,IAAA+/B,EAAA//B,QAAA,YACA,IAAA+/B,EAAA//B,QAAA,cAGI+iC,IAAA,SAAA1F,EAAAxpC,EAAAC,GACJ,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,UACA,kBAAAC,KAAAH,SAGIiD,IAAA,SAAA3F,EAAAxpC,EAAAC,GACJ,YACAD,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,WACA,IAAAF,EAAA//B,QAAA,eAGIijC,IAAA,SAAA5F,EAAAxpC,EAAAC,GACJ,YAQA,SAAAovC,GAAAnD,GACAA,KAAA59B,OAAA69B,UAAAC,SACA,IAAAkD,GAAApD,EAAAoD,MAAA,iBACA,SAAAA,GAGAC,SAAAD,EAAA,OACAE,EAEA,QAAAC,GAAAvD,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,UACAF,EAAA//B,QAAA,iBAEA,QAAAujC,GAAAxD,GACA,GAAAyD,GAAA,kBAEA,OADAzD,MAAA59B,OAAA69B,UAAAC,YACAwD,EAAA1D,KACAyD,EAAAtD,KAAAH,KAAAuD,EAAAvD,KAAAQ,EAAAR,IAIA,QAAA2D,GAAA3D,GACA,OAAA4D,EAAA5D,KAAA6D,EAAA7D,IAAA,WAAAG,KAAAH,GA7BA,GAAAsD,GAAA,GACAI,EAAApG,EAAA,gBACA6E,EAAA7E,EAAA,oBACAmF,EAAAnF,EAAA,oBACAsG,EAAAtG,EAAA,eACAuG,EAAAvG,EAAA,gBACAkD,EAAAlD,EAAA,kBAyBAxpC,GAAAC,QAAA,SAAAisC,GAEA,MADAA,MAAA59B,OAAA69B,UAAAC,YACAuC,EAAAzC,IACAmC,EAAAnC,IACAwD,EAAAxD,IACAuD,EAAAvD,IACAmD,EAAAnD,IACA2D,EAAA3D,OAGG8D,eAAA,EAAAC,cAAA,EAAApD,kBAAA,EAAAyB,mBAAA,GAAAS,mBAAA,GAAA/B,eAAA,KAAmHkD,IAAA,SAAA1G,EAAAxpC,EAAAC,GACtHD,EAAAC,QAAAupC,EAAA,uBAEG2G,oBAAA,IAAsBC,IAAA,SAAA5G,EAAAxpC,EAAAC,GACzBD,EAAAC,QAAAupC,EAAA,yBAEG6G,sBAAA,IAAwBC,IAAA,SAAA9G,EAAAxpC,EAAAC,GAC3BD,EAAAC,QAAAupC,EAAA,sBAEG+G,mBAAA,IAAqBC,IAAA,SAAAhH,EAAAxpC,EAAAC,GACxBD,EAAAC,QAAAupC,EAAA,oBAEGiH,iBAAA,KAAoBC,IAAA,SAAAlH,EAAAxpC,EAAAC,GACvBD,EAAAC,QAAAupC,EAAA,uBAEGmH,oBAAA,KAAuBC,IAAA,SAAApH,EAAAxpC,EAAAC,GAC1BD,EAAAC,QAAAupC,EAAA,kBAEGqH,eAAA,KAAkBC,IAAA,SAAAtH,EAAAxpC,EAAAC,GACrBD,EAAAC,QAAAupC,EAAA,oBAEGuH,iBAAA,KAAoBC,IAAA,SAAAxH,EAAAxpC,EAAAC,GACvBD,EAAAC,QAAAupC,EAAA,mBAEGyH,gBAAA,KAAmBC,IAAA,SAAA1H,EAAAxpC,EAAAC,GACtBD,EAAAC,QAAAupC,EAAA,0BAEG2H,uBAAA,KAA0BC,IAAA,SAAA5H,EAAAxpC,EAAAC,GAC7BD,EAAAC,QAAAupC,EAAA,2BAEG6H,wBAAA,KAA2BC,IAAA,SAAA9H,EAAAxpC,EAAAC,GAC9BD,EAAAC,QAAAupC,EAAA,6BAEG+H,0BAAA,KAA6BC,IAAA,SAAAhI,EAAAxpC,EAAAC,GAChCD,EAAAC,QAAAupC,EAAA,mBAEGiI,gBAAA,KAAmBC,IAAA,SAAAlI,EAAAxpC,EAAAC,GACtBD,EAAAC,QAAAupC,EAAA,uBAEGmI,oBAAA,KAAuBC,IAAA,SAAApI,EAAAxpC,EAAAC,GAC1BD,EAAAC,QAAAupC,EAAA,4BAEGqI,yBAAA,KAA4BC,IAAA,SAAAtI,EAAAxpC,EAAAC,GAC/B,YAGA,SAAA8xC,GAAAxkC,GACA,MAAAA,GAAAykC,UAAAC,OAAAC,MAAA,OAEA,QAAAnb,GAAAxpB,GAEA,OADA4kC,MACA7K,EAAA,EAAoBA,EAAApvB,UAAAxL,OAAuB46B,IAC3C6K,EAAA7K,EAAA,GAAApvB,UAAAovB,EAEA/5B,GAAAykC,UAAAD,EAAAxkC,GACAtB,OAAA,SAAAmmC,GAAsC,WAAAD,EAAAhmC,QAAAimC,KACtCvY,OAAAsY,GACAE,KAAA,KAGA,QAAA7iB,GAAAjiB,GAEA,OADA+kC,MACAhL,EAAA,EAAoBA,EAAApvB,UAAAxL,OAAuB46B,IAC3CgL,EAAAhL,EAAA,GAAApvB,UAAAovB,EAEA/5B,GAAAykC,UAAAD,EAAAxkC,GACAtB,OAAA,SAAAmmC,GAAsC,WAAAE,EAAAnmC,QAAAimC,KACtCC,KAAA,KAGA,QAAAE,GAAAhlC,EAAA6kC,EAAAI,GACAA,EACAzb,EAAAxpB,EAAA6kC,GAGA5iB,EAAAjiB,EAAA6kC,GA/BArpC,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAsyC,OAAAtyC,EAAAuvB,OAAAvvB,EAAA82B,QAAA,GAcA92B,EAAA82B,MAUA92B,EAAAuvB,SASAvvB,EAAAsyC,cAEIE,IAAA,SAAAjJ,EAAAxpC,EAAAC,GACJ,YACA,IAAAkP,GAAA,WACA,QAAAA,KACAd,KAAAqkC,WA2CA,MAzCAvjC,GAAAxE,UAAAs0B,GAAA,SAAA0T,EAAA/X,GACAvsB,KAAAqkC,QAAAC,GACAtkC,KAAAqkC,QAAAC,GAAAttB,KAAAuV,GAGAvsB,KAAAqkC,QAAAC,IAAA/X,IAGAzrB,EAAAxE,UAAAy0B,IAAA,SAAAuT,EAAA/X,GACA,GAAAgY,GAAAvkC,KAAAqkC,QAAAC,EACA,IAAAC,EAAA,CAGA,GAAAC,GAAAD,EAAAzmC,QAAAyuB,EACAgY,GAAAE,OAAAD,EAAA,KAEA1jC,EAAAxE,UAAAooC,MAAA,SAAAJ,GAEA,OADA3zB,MACAsoB,EAAA,EAAwBA,EAAApvB,UAAAxL,OAAuB46B,IAC/CtoB,EAAAsoB,EAAA,GAAApvB,UAAAovB,EAEA,IAAAsL,GAAAvkC,KAAAqkC,QAAAC,EACAC,IAGAA,EAAAlnC,QAAA,SAAAkvB,GACAA,EAAA3iB,UAAA,GAAA+G,MAGA7P,EAAAxE,UAAAqoC,YAAA,SAAAL,GACA,GAAAC,GAAAvkC,KAAAqkC,QAAAC,EACA,SAAAC,GAGAA,EAAAlmC,OAAA,GAEAyC,EAAA8jC,YAAA,SAAAC,GACAA,EAAAvoC,UAAA5B,OAAAoe,OAAAhY,EAAAxE,WACAuc,YAAAgsB,KAGA/jC,IAEAnP,GAAAC,QAAAkP,OAEIgkC,IAAA,SAAA3J,EAAAxpC,EAAAC,GACJ,YACA,IAAAmzC,GAAA,mBAAA7I,SACAA,QACA,KACA8I,EAAA,WACA,QAAAA,GAAAvxB,GACA,GAAApQ,GAAArD,IACA,sBAAAyT,GAEA,YADAzT,KAAAilC,SAAA,GAAAD,GAAA9I,QAAAzoB,GAGAzT,MAAAilC,SAAA,GAAAD,GAAA9I,QAAA,SAAAhV,EAAAgW,GACA75B,EAAA6hC,iBAAAhe,EACA7jB,EAAA8hC,gBAAAjI,IAEAzpB,QACAzT,KAAAolC,WAAA3xB,EAAA4xB,WAAAL,EAAAM,iBACAtlC,KAAAulC,UAAA9xB,EAAA+xB,UAAAR,EAAAS,gBACAT,EAAAU,sBAAAjyB,IACAzT,KAAAilC,SAAAU,MAAA,cAMA3lC,KAAA4lC,cAwGA,MAtGAZ,GAAAM,iBAAA,SAAA37B,GACA,MAAAq7B,GAAA9I,QAAAhV,QAAAvd,IAEAq7B,EAAAS,gBAAA,SAAA7wB,GACA,MAAAowB,GAAA9I,QAAAgB,OAAAtoB,IAEAowB,EAAAa,WAAA,SAAAC,GACAd,EAAA9I,QAAA4J,GAEAd,EAAAU,sBAAA,SAAAjyB,GACA,MAAAA,GAAAjY,eAAA,mCACA4X,QAAAK,EAAAsyB,iCAEA3yB,QAAA4xB,EAAAe,kCAIAf,EAAAgB,IAAA,SAAAr1B,GACA,MAAAq0B,GAAA9I,QAAA8J,IAAAr1B,IAEAq0B,EAAAiB,WAAA,SAAAt1B,GACA,MAAAq0B,GAAA9I,QAAA+J,WAAAt1B,IAEAq0B,EAAAkB,KAAA,SAAAv1B,GACA,MAAAq0B,GAAA9I,QAAAgK,KAAAv1B,IAEAq0B,EAAA9H,OAAA,SAAAiJ,GACA,MAAAnB,GAAA9I,QAAAgB,OAAAiJ,IAEAnB,EAAA9d,QAAA,SAAAif,GACA,MAAAnB,GAAA9I,QAAAhV,QAAAif,IAEAnB,EAAA1oC,UAAA8pC,KAAA,WAGA,OAFA3pB,GACA9L,KACAsoB,EAAA,EAAwBA,EAAApvB,UAAAxL,OAAuB46B,IAC/CtoB,EAAAsoB,GAAApvB,UAAAovB,EAEA,QAAAxc,EAAAzc,KAAAilC,UAAAmB,KAAAx8B,MAAA6S,EAAA9L,IAEAq0B,EAAA1oC,UAAAqpC,MAAA,WAGA,OAFAlpB,GACA9L,KACAsoB,EAAA,EAAwBA,EAAApvB,UAAAxL,OAAuB46B,IAC/CtoB,EAAAsoB,GAAApvB,UAAAovB,EAEA,QAAAxc,EAAAzc,KAAAilC,UAAAU,MAAA/7B,MAAA6S,EAAA9L,IAEAq0B,EAAA1oC,UAAA4qB,QAAA,SAAAif,GACA,GAAA9iC,GAAArD,IACA,OAAAA,MAAAqmC,YACArmC,MAEAA,KAAAsmC,eACAtB,EAAA9I,QAAAhV,UACAkf,KAAA,WACA,MAAA/iC,GAAA+hC,WAAAe,KAEAC,KAAA,SAAAG,GACAljC,EAAA6hC,iBAAAqB,KAEAZ,MAAA,SAAA/wB,GACAvR,EAAAuiC,cACAviC,EAAA65B,OAAAtoB,KAEA5U,OAEAglC,EAAA1oC,UAAA4gC,OAAA,SAAAiJ,GACA,GAAA9iC,GAAArD,IACA,OAAAA,MAAAqmC,YACArmC,MAEAA,KAAAwmC,eACAxB,EAAA9I,QAAAhV,UACAkf,KAAA,WACA,MAAA/iC,GAAAkiC,UAAAY,KAEAC,KAAA,SAAAz8B,GACAtG,EAAAijC,eACAjjC,EAAA6hC,iBAAAv7B,KAEAg8B,MAAA,SAAA/wB,GACA,MAAAvR,GAAA8hC,gBAAAvwB,KAEA5U,OAEAglC,EAAA1oC,UAAAspC,YAAA,WACA5lC,KAAAqmC,aAAA,EACArmC,KAAAymC,YAAA,EACAzmC,KAAA0mC,YAAA,GAEA1B,EAAA1oC,UAAAgqC,aAAA,WACAtmC,KAAAqmC,aAAA,EACArmC,KAAAymC,YAAA,EACAzmC,KAAA0mC,YAAA,GAEA1B,EAAA1oC,UAAAkqC,aAAA,WACAxmC,KAAAqmC,aAAA,EACArmC,KAAAymC,YAAA,EACAzmC,KAAA0mC,YAAA,GAEA1B,EAAA9I,QAAA6I,EACAC,IAEArzC,GAAAC,QAAAozC,OAEI2B,IAAA,SAAAxL,EAAAxpC,EAAAC,GACJ,YACA,IAAAg1C,GAAAzL,EAAA,wBACA0L,EAAA1L,EAAA,4BACA2L,EAAA3L,EAAA,eACAxpC,GAAAC,QAAA,SAAA6hB,OACA,KAAAA,IAA6BA,KAC7B,IAAAszB,GAAA9rC,SAAAiC,cAAA,UACA8pC,EAAAF,EAAAG,UAAmCJ,EAAAK,kBAAAzzB,EASnC,OARAuzB,GAAApqC,OAAA,gBAAAoqC,GAAApqC,QACAkqC,EAAAG,OAAAF,EAAAnqC,MAAAoqC,EAAApqC,aACAoqC,GAAApqC,OAEAgqC,EAAAO,cAAAJ,EAAAC,GACAD,EAAAjzB,aAAA,QACAizB,EAAAl0B,GAAAk0B,EAAAh0B,MAEAg0B,KAGGK,eAAA,GAAAC,2BAAA,GAAAC,uBAAA,KAA0EC,IAAA,SAAApM,EAAAxpC,EAAAC,GAC7E,YAGA,SAAAq1C,GAEAjuB,GAEA,OADAwuB,MACAvO,EAAA,EAAoBA,EAAApvB,UAAAxL,OAAuB46B,IAC3CuO,EAAAvO,EAAA,GAAApvB,UAAAovB,EAUA,OARAuO,GAAAnqC,QAAA,SAAAoqC,GACA,gBAAAA,IAGA/sC,OAAAusB,KAAAwgB,GAAApqC,QAAA,SAAA4b,GACAD,EAAAC,GAAAwuB,EAAAxuB,OAGAD,EAjBAte,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAq1C,WAAA,GAkBAr1C,EAAAq1C,cAEIS,IAAA,SAAAvM,EAAAxpC,EAAAC,GACJ,YACA8I,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAs1C,sBAAA,GACAt1C,EAAAs1C,mBACArK,IAAA,cACA8K,YAAA,EACAC,mBAAA,EACAC,UAAA,WAGIC,IAAA,SAAA3M,EAAAxpC,EAAAC,GACJ,YAGA,SAAAu1C,GAAAjoC,EAEA6oC,GACA,OAAA9uB,KAAA8uB,GACA,GAAAA,EAAAvsC,eAAAyd,GAAA,CACA,GAAAle,GAAAgtC,EAAA9uB,EACA,OAAAle,EACAmE,EAAA8oC,gBAAA/uB,GAGA/Z,EAAA89B,aAAA/jB,EAAAle,IAZAL,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAu1C,kBAAA,GAgBAv1C,EAAAu1C,qBAEIc,IAAA,SAAA9M,EAAAxpC,EAAAC,GACJ,YAEA,SAAAs2C,KACA,6CAAAC,QAAA,iBAAAhvB,GACA,GAAAC,GAAA,GAAArW,KAAAqlC,SAAA,CAGA,QAFA,MAAAjvB,EAAAC,EAAA,EAAAA,EAAA,GAEAyH,SAAA,MAIAlvB,EAAAC,QAAAs2C,OAEIG,IAAA,SAAAlN,EAAAxpC,EAAAC,GACJ,YAEA,SAAA02C,GAAAta,GACA,kBAEA,OADArd,MACAsoB,EAAA,EAAwBA,EAAApvB,UAAAxL,OAAuB46B,IAC/CtoB,EAAAsoB,GAAApvB,UAAAovB,EAEAjvB,YAAA,WACA,IACAgkB,EAAApkB,UAAA,GAAA+G,GAEA,MAAAiE,GAEA2zB,QAAAC,IAAA,8BACAD,QAAAC,IAAA5zB,KAGS,IAjBTla,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAoB9CnJ,EAAA02C,gBAEIG,IAAA,SAAAtN,EAAAxpC,EAAAC,GACJ,YAEA,SAAAk/B,GAAA9C,GACA,GAAA0a,IAAA,CACA,mBAEA,OADA/3B,MACAsoB,EAAA,EAAwBA,EAAApvB,UAAAxL,OAAuB46B,IAC/CtoB,EAAAsoB,GAAApvB,UAAAovB,EAEAyP,KACAA,GAAA,EACA1a,EAAApkB,UAAA,GAAA+G,KAVAjW,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAc9CnJ,EAAAk/B,YAEI6X,IAAA,SAAAxN,EAAAxpC,EAAAC,GACJ,YAGA,SAAAg3C,GAAAC,EAAAtc,GACA,IAAAA,EACA,MAAAsc,EAEAA,GAAAzC,KAAA,SAAAn+B,GAAkC,MAAAskB,GAAA,KAAAtkB,KAA+B09B,MAAA,SAAA/wB,GAAwB,MAAA2X,GAAA3X,KANzFla,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAQ9CnJ,EAAAg3C,yBAEIE,IAAA,SAAA3N,EAAAxpC,EAAAC,GACJ,YAIA,SAAAm3C,GAAA/a,GAEA,kBAEA,OADArd,MACAsoB,EAAA,EAAwBA,EAAApvB,UAAAxL,OAAuB46B,IAC/CtoB,EAAAsoB,GAAApvB,UAAAovB,EAEA,IAAA1M,EAUA,OARA,kBADA5b,KAAAtS,OAAA,KAEAkuB,EAAA5b,EAAAq4B,MACAzc,EAAA0c,EAAAnY,KAAAoY,EAAAZ,SAAA/b,KAMA4c,EAAAP,kBAAA5a,EAAApkB,MAAA5J,KAAA2Q,GAAA4b,IApBA,GAAA2c,GAAA/N,EAAA,kBACA8N,EAAA9N,EAAA,cACAgO,EAAAhO,EAAA,4BAqBA4N,GAAAK,cAAA,SAAApwB,EAAAvF,OACA,KAAAA,IAA6BA,KAC7B,IAAA41B,GAAA51B,EAAA41B,kBACAC,GAAA,IAAA71B,EAAA81B,uBAkBA,OAjBA7uC,QAAA8uC,oBAAAxwB,EAAA1c,WAAAsB,OAAA,SAAA6rC,GACA,GAAAC,GACAC,EAAA,gBAAAF,GACA,kBAAAzwB,GAAA1c,UAAAmtC,GACAG,GAAA,IAAAP,EAAAvrC,QAAA2rC,EAOA,OALAC,KADAJ,GAIA,MAAAG,EAAA9c,OAAA,GAEAgd,GAAAD,GAAAE,IAEAvsC,QAAA,SAAAosC,GACA,GAAAI,GAAA7wB,EAAA1c,UAAAmtC,EACAzwB,GAAA1c,UAAAmtC,GAAAV,EAAAc,KAEA7wB,GAEArnB,EAAAC,QAAAm3C,IAEGe,iBAAA,GAAAC,aAAA,GAAAC,4BAAA,KAAmEC,IAAA,SAAA9O,EAAAxpC,EAAAC,GACtE,YAmDA,SAAAs4C,GAAAz2B,GACAzT,KAAAmqC,wBAAA/2B,SAAAK,EAAA22B,mBACApqC,KAAAqqC,QAAA52B,EAAA62B,OACAtqC,KAAAuqC,eAAA92B,EAAA+2B,cAEAxqC,KAAAqqC,SACArqC,KAAAyqC,yBAvDA,GAAAC,GAAAvP,EAAA,0BACAwP,EAAAxP,EAAA,oBACAyP,EAAAzP,EAAA,YACAe,EAAAf,EAAA,kBACA0P,EAAA1P,EAAA,kBACA2P,EAAA3P,EAAA,mCACA4N,EAAA5N,EAAA,0BAqDA+O,GAAA5tC,UAAAyuC,eAAA,WACA,MAAA/qC,MAAAqqC,QACAnO,EAAAhV,UAGAlnB,KAAAuqC,eAAAnE,KACA,SAAAkE,GACAtqC,KAAAqqC,QAAAC,EAEAtqC,KAAAyqC,0BACK/zB,KAAA1W,QAILkqC,EAAA5tC,UAAAmuC,uBAAA,WACA,GAAAO,GACAhrC,KAAAqqC,QAAAY,mBAAAC,qBAAAC,WAEAH,IAcAtwC,OAAAI,eAAAkF,KAAA,sBACAjF,MAAAiwC,EAAAI,mBACA1oC,cAAA,EACA2oC,UAAA,KAyDAnB,EAAA5tC,UAAAgvC,qBAAA,SAAAC,GACA,MAAAvrC,MAAAmqC,wBACAnqC,KAAAwrC,mCAAAD,GAGAvrC,KAAA+qC,iBAAA3E,KACA,WACA,MAAApmC,MAAAwrC,mCAAAD,IACK70B,KAAA1W,QAILkqC,EAAA5tC,UAAAkvC,mCAAA,SACAD,GAEA,GAAAE,GACAzrC,KAAAqqC,QAAAY,mBAAAC,qBAAAC,YACAv0B,GACA80B,YAAAD,EAAAC,YACAC,aAAAF,EAAAE,aACAC,qBAAAH,EAAAG,uBAAA,eACAC,kBAAAJ,EAAAI,kBAAAtvC,IAAA,SAAAuvC,GACA,qBAAAA,EAAA,aAAAA,IAIA,OAAApxC,QAAAusC,UAAyBrwB,EAAA20B,IA6CzBrB,EAAA5tC,UAAAyvC,kBAAA,SAAAt4B,GACA,GAAA2V,GAAAppB,IAEA,OAAAyT,MAAAu4B,cAMAhsC,KAAA+qC,iBACA3E,KAAA,WACA,GAAA6F,IACAC,cAAAz4B,EAAAu4B,cACAG,WAAA14B,EAAA04B,YAAAlsC,OAAAmsC,SAAAC,SACAjB,mBACA33B,EAAA23B,oBAAAhiB,EAAAgiB,mBAOA,OAJA,OAAA33B,EAAA64B,cACAL,EAAAK,YAAA74B,EAAA64B,aAGAljB,EAAAihB,QAAAkC,SACA9C,OAAA,OACA+C,SAAA,yBACAvkC,MACAwkC,OAAkBjW,OAAA,aAClByV,0BAIA7F,KAAA,SAAAsG,GAGA,MAFA/B,GAAAgC,UAAAvjB,EAAAihB,QAAA,wCAEAnO,EAAAhV,QAAAwlB,KAEA/G,MAAA,SAAA/wB,GAGA,MAFA+1B,GAAAgC,UAAAvjB,EAAAihB,QAAA,qCAEA,yBAAAz1B,EAAAymB,KACAa,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAAgC,qCAAAn8B,KACA4qB,KAAAuP,EAAAgC,qCAAAvR,KACAvkB,QAAA8zB,EAAAgC,qCAAA91B,QACAqjB,SACA0S,cAAAj4B,EAAAulB,QAAA0S,kBAMA3Q,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAAkC,sCAAAr8B,KACA4qB,KAAAuP,EAAAkC,sCAAAzR,KACAvkB,QAAA8zB,EAAAkC,sCAAAh2B,QACAqjB,SACA0S,cAAAj4B,QAtDAsnB,EAAAgB,OACA,GAAAwN,GAAAE,EAAAmC,qCAuGA7C,EAAA5tC,UAAA0wC,SAAA,SAAAv5B,GACA,GAAA2V,GAAAppB,IAEA,OAAAyT,GAAAoI,MAMA7b,KAAA+qC,iBACA3E,KAAA,WACA,MAAAhd,GAAAihB,QAAAkC,SACA9C,OAAA,OACA+C,SAAA,uCACAvkC,MACAwkC,OACAjW,OAAA,aAEAyW,kBAAAvyC,OAAAusC,UAA6CxzB,EAAAoI,OAE7CqxB,YAAAC,KAAAtuB,KAAAE,UAAAtL,EAAAoI,MAAAqxB,qBAKA9G,KAAA,SAAAsG,GAGA,MAFA/B,GAAAgC,UAAAvjB,EAAAihB,QAAA,+BAEAnO,EAAAhV,QAAAwlB,EAAAU,cAAA,MAEAzH,MAAA,SAAA/wB,GAGA,MAFA+1B,GAAAgC,UAAAvjB,EAAAihB,QAAA,4BAEAnO,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAAyC,uBAAA58B,KACA4qB,KAAAuP,EAAAyC,uBAAAhS,KACAvkB,QAAA8zB,EAAAyC,uBAAAv2B,QACAqjB,SACA0S,cAAAj4B,QAnCAsnB,EAAAgB,OACA,GAAAwN,GAAAE,EAAA0C,oCAqDApD,EAAA5tC,UAAAixC,SAAA,WAGA,MAFAzC,GAAA9qC,KAAA6qC,EAAAX,EAAA5tC,YAEA4/B,EAAAhV,WAGAv1B,EAAAC,QAAAm3C,EAAAK,cAAAc,KAEGsD,mBAAA,GAAAC,yBAAA,GAAAC,kCAAA,IAAAC,iBAAA,IAAAC,iBAAA,IAAAC,WAAA,GAAAC,0BAAA,KAA6KC,IAAA,SAAA5S,EAAAxpC,EAAAC,GAChL,YAuBA,IAAA84C,GAAAvP,EAAA,yBAEAxpC,GAAAC,SACAo8C,uBACAv9B,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,wBACAvkB,QAAA,+CAEAi2B,mCACAt8B,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,oCACAvkB,QAAA,0DAEAg2B,uCACAr8B,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,wCACAvkB,QAAA,oEAEA81B,sCACAn8B,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,uCACAvkB,QACA,kFAEAw2B,kCACA78B,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,mCACAvkB,QAAA,iDAEAu2B,wBACA58B,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,yBACAvkB,QAAA,sEAIG22B,yBAAA,KAA4BW,IAAA,SAAAjT,EAAAxpC,EAAAC,GAC/B,YA4BA,SAAAknB,GAAArF,GAGA,MAAA46B,GACAC,QACAv7B,KAJA,YAKAu3B,OAAA72B,EAAA62B,OACAiE,cAAA96B,EAAA86B,gBAEAnI,KAAA,WACA,GAAAoI,GACAhE,EAAAiE,EACA31B,QACAy1B,cAAA96B,EAAA86B,cACAjE,OAAA72B,EAAA62B,OACAoE,MAAAj7B,EAAAi7B,MACAC,UAAAC,EAAA91B,OAAArF,EAAA86B,eACAx7B,KAhBA,cAkBAqzB,KAAA,SAAAkE,GACA,MAAAA,GAAAW,mBAAAC,qBAAAC,aAMAR,EAAAgC,UAAArC,EAAA,wBAEAA,GAPApO,EAAAgB,OACA,GAAAwN,GAAAE,EAAAoD,yBAYA,OAHAv6B,GAAA+2B,gBACAgE,EAAA,GAAAtE,GAAAz2B,GAEAA,EAAA22B,kBAQAoE,EAPAhE,EAAApE,KAAA,SAAAkE,GAGA,MAFAkE,GAAAnE,QAAAC,EAEAkE,MA3DA,GAAAtE,GAAA/O,EAAA,eACAwP,EAAAxP,EAAA,oBACAuP,EAAAvP,EAAA,0BACAkT,EAAAlT,EAAA,uCACAyT,EAAAzT,EAAA,4BACAsT,EAAAtT,EAAA,iCACAe,EAAAf,EAAA,kBACAyP,EAAAzP,EAAA,YAEA4N,EAAA5N,EAAA,0BA0DAxpC,GAAAC,SACAknB,OAAAiwB,EAAAjwB,GAKA+1B,QAjEA,YAoEGrB,mBAAA,GAAAsB,sCAAA,GAAArB,yBAAA,GAAAsB,2BAAA,IAAAC,gCAAA,IAAApB,iBAAA,IAAAqB,cAAA,GAAApB,WAAA,GAAAC,0BAAA,KAA+OoB,IAAA,SAAA/T,EAAAxpC,EAAAC,GAClP,YAEA,IAAAu9C,GAAAhU,EAAA,sCACAiU,EAAAjU,EAAA,sCAEAxpC,GAAAC,SACAu9C,OACAC,WAGGC,qCAAA,GAAAC,sCAAA,KAAiFC,IAAA,SAAApU,EAAAxpC,EAAAC,GACpF,YAgDA,SAAA49C,GAAAC,GACA,GAAAC,GAAAxE,CAOA,IALAuE,QAEAC,EAAA7wB,KAAAE,UAAA0wB,KACAvE,EAAAuE,EAAAvE,sBAGA,SAAAR,GAAAE,EAAA+E,qCA8BA,KA3BA,wCAAAtyC,QAAA,SAAAkuB,GACA,GACAA,IAAA2f,KACA0E,EAAA1E,EAAA3f,IAEA,SAAAmf,IACAj6B,KAAAm6B,EAAAiF,4CAAAp/B,KACA4qB,KAAAuP,EAAAiF,4CAAAxU,KACAvkB,QAAAyU,EAAA,yCAUAvrB,KAAAirC,iBAAA,WACA,MAAApsB,MAAAC,MAAA4wB,IAGA1vC,KAAA8vC,SAAAvD,EACAvsC,KAAA+vC,eAAA/vC,KAAAirC,mBAEAjrC,KAAAgwC,kBAAA9E,EAAA+E,aAAA,OAEA/E,EAAAgF,QAAA,CACA,IAAAN,EAAA1E,EAAAgF,QAAAzZ,KACA,SAAAiU,IACAj6B,KAAAm6B,EAAAiF,4CAAAp/B,KACA4qB,KAAAuP,EAAAiF,4CAAAxU,KACAvkB,QAAA,iDAIA9W,MAAAmwC,SAAA,GAAAC,IACAF,QAAAhF,EAAAgF,WAiUA,QAAAG,GAAA17B,EAAAC,GACA,GAAA07B,EAoBA,KAlBA,IAAA37B,EACA27B,EAAA,GAAA5F,GAAAE,EAAA2F,wBACG,MAAA57B,EACH27B,EAAA,GAAA5F,GAAAE,EAAA4F,8BACG,MAAA77B,EACH27B,EAAA,GAAA5F,GAAAE,EAAA6F,mCACG,MAAA97B,EACH27B,EAAA,GAAA5F,GAAAE,EAAA8F,qBACG/7B,GAAA,IACH27B,EAAA,GAAA5F,GAAAE,EAAA+F,yBACGh8B,EAAA,KAAAA,GAAA,OACH27B,EAAAM,EAAAh8B,GACAnE,KAAAm6B,EAAAiG,qBAAApgC,KACA4qB,KAAAuP,EAAAiG,qBAAAxV,KACAvkB,QAAA8zB,EAAAiG,qBAAA/5B,WAIAw5B,EAIA,MAHAA,GAAAnW,QAAAmW,EAAAnW,YACAmW,EAAAnW,QAAA2W,WAAAn8B,EAEA27B,EA+CA,QAAAS,GAAAtB,GAIA,OACAuB,cAAA,WAHAvB,EAAAwB,0BAAAxB,EAAAlB,eAIA2C,oBAAAC,GA9eA,GAAAA,GAAAhW,EAAA,eAAAgW,kBAEAf,EAAAjV,EAAA,qBACAoR,EAAApR,EAAA,aACAyU,EAAAzU,EAAA,6BACAuP,EAAAvP,EAAA,0BACAyV,EAAAzV,EAAA,qCACAiW,EAAAjW,EAAA,uBAAA8P,iBACAoG,EAAAlW,EAAA,oCACAmW,EAAAnW,EAAA,uBACAe,EAAAf,EAAA,kBACA4N,EAAA5N,EAAA,2BACArK,EAAAqK,EAAA,eACAmN,EAAAnN,EAAA,mBACA8L,EAAA9L,EAAA,iBAAA8L,OACA0D,EAAAxP,EAAA,oBACAyP,EAAAzP,EAAA,YACA0T,EAAA1T,EAAA,oBAAA0T,QACA0C,EAAApW,EAAA,oBAAAoW,aACA1G,EAAA1P,EAAA,kBACA2P,EAAA3P,EAAA,mCACAqW,EAAArW,EAAA,iBACAsW,EAAAtW,EAAA,oBAAAsW,eACAC,EAAAvW,EAAA,oBAAAuW,gBACAC,EAAAxW,EAAA,oBAAAwW,aAEAC,IA0EApC,GAAAqC,WAAA,SAAAp+B,GACA,GAAAq+B,GAAAC,EACAlJ,EAAA+I,EAAAn+B,EAAA86B,cAEA,IAAA1F,EAGA,MAFA8B,GAAAgC,UAAA9D,EAAA,6BAEAA,CAGA,KACAkJ,EAAAV,EAAA59B,EAAA86B,eACG,MAAA35B,GACH,MAAAsnB,GAAAgB,OACA,GAAAwN,GAAAE,EAAAoH,+BAoBA,MAhBAnJ,GAAAuI,EAAAW,GAAA3L,KAAA,SAAAqJ,GASA,MARAh8B,GAAAi7B,QACAe,EAAAwC,SAAA,GAGAxC,EAAAlB,cAAA96B,EAAA86B,cAEAuD,EAAA,GAAAtC,GAAAC,KAKAmC,EAAAn+B,EAAA86B,eAAA1F,EAEA8B,EAAAgC,UAAA9D,EAAA,kCAEAA,EACAzC,KAAA,SAAAkE,GAGA,MAFAK,GAAAgC,UAAAmF,EAAA,gCAEAxH,IAEA3E,MAAA,SAAA/wB,GAGA,aAFAg9B,GAAAn+B,EAAA86B,eAEArS,EAAAgB,OAAAtoB,MAKA46B,EAAApS,WAAA,WACAwU,MAGApC,EAAAlzC,UAAA41C,0BAAA,SAAAC,GACA,GACAnL,GAAAoL,EAAAnB,EAAAoB,EADAt0C,EAAA9C,SAAA8Y,cAAA,iBAAA09B,EAAA,KAGA1zC,KACAA,EAAA9C,SAAA6Q,KAAAqxB,YAAAliC,SAAAiC,cAAA,WACAa,EAAA0S,KAAA,mBACA1S,EAAAi/B,aAAA,QAAAyU,IAGAzK,EAAAhnC,KAAAirC,mBACAmH,GACAE,WAAA,UACAC,IAAAvL,EAAAkE,qBAAAsH,YAEAvB,EAAAjK,EAAAiK,yBAEAA,GACAA,EAAApN,MAAA,KAAAxmC,QAAA,SAAAo1C,GACA,GAAAC,GAAAD,EAAA5O,MAAA,IAEA,iBAAA6O,EAAA,IAAAA,EAAAr0C,OAAA,IACA+zC,EAAAO,IAAAD,EAAA,MAKAL,GACAtkB,EAAAokB,EAAAS,OAAA,MACAC,GAAAT,EACAU,IAAA,EACAjlB,EAAA6jB,GAEA3zC,EAAAqY,KAAAyI,KAAAE,UAAAszB,IA6FA7C,EAAAlzC,UAAAiwC,QAAA,SAAA94B,EAAA8Y,GACA,GAAAnD,GAAAppB,KACA+yC,EAAA,GAAA7W,GAAA,SAAAhV,EAAAgW,GACA,GAAA8V,GAAAC,EAAAC,EAAAC,EACAC,EAAAhgC,QACA,iCAAAK,EAAA+4B,UACApjB,EAAA6hB,mBAAAC,qBAAAmI,YACAC,kBAWA,IARA,eAAA7/B,EAAAw/B,MACAx/B,EAAAg2B,OAEOh2B,EAAA+4B,WACPwG,EAAA,oBAFAA,EAAA,kBAMAA,EACA,SAAAtI,IACAj6B,KAAAm6B,EAAA2I,uBAAA9iC,KACA4qB,KAAAuP,EAAA2I,uBAAAlY,KACAvkB,QAAAk8B,EAAA,uCAiBA,IAZAC,EADA,OAAAx/B,GACAA,EAAAw/B,IAEA,YAGAE,GACA1J,OAAAh2B,EAAAg2B,OACAyG,QAAA9mB,EAAA+mB,SACArmC,QAAA2J,EAAA3J,QACA6P,SAAAyP,EAAA2mB,eAAAyD,mBAGA,cAAAP,EACAC,EAAA9pB,EAAA4mB,kBAEAmD,EAAAlrC,KAAAqpC,EAAAloB,EAAA2mB,eAAAt8B,EAAAxL,UACK,mBAAAgrC,EAsBL,SAAAvI,IACAj6B,KAAAm6B,EAAA6I,sBAAAhjC,KACA4qB,KAAAuP,EAAA6I,sBAAApY,KACAvkB,QAAA,2BAxBAo8B,GACA3B,EAAAnoB,EAAA2mB,eAAA7E,qBAAAwI,aACAjgC,EAAA+4B,SAAA,GACA2G,EAAA1J,OAAA,OACA0J,EAAAlrC,KAAAg/B,GAEA0M,mBACAC,SAAAxqB,EAAA2mB,eAAAyD,kBAAAI,SACApd,OAAApN,EAAA2mB,eAAAyD,kBAAAhd,OACAqd,YAAAzqB,EAAA2mB,eAAAyD,kBAAAK,YACAC,UAAA1qB,EAAA2mB,eAAAyD,kBAAAM,UACApjB,QAAAme,IAGAp7B,EAAAxL,MAGAkrC,EAAAY,QAAAhD,EACA3nB,EAAA2mB,gBAUAoD,EAAA1c,IAAAyc,EAAAz/B,EAAA+4B,SACA2G,EAAAa,mBAAA,SAAAC,GACAtJ,EAAAgC,UAAAvjB,EAAA6qB,IAGA7qB,EAAA0mB,SAAAqD,EAAA,SAAAv+B,EAAA3M,EAAA0M,GACA,GAAAu/B,GAAA5D,CAIA,QAFAA,EAAAD,EAAA17B,EAAAC,QAGAsoB,GAAAoT,GAKA,eAAA2C,GAAAhrC,EAAA2iC,WACA1N,GACA0T,EAAA3oC,EAAA2iC,QACAn6B,KAAAm6B,EAAAuJ,6BAAA1jC,KACA4qB,KAAAuP,EAAAuJ,6BAAA9Y,KACAvkB,QAAA8zB,EAAAuJ,6BAAAr9B,YAOAo9B,EAAAjN,GAA6BmN,YAAAz/B,GAAsB1M,GAGnDmrC,GACAc,EAAAb,aACAa,EAAAb,YAAAh1C,OAAA,IAEA+qB,EAAA8oB,0BAAAgC,EAAAb,YAAA,GAAAgB,OAEA7C,EAAAhW,YACAqB,IAAA8U,EACApV,mBAAA,SAGArV,GAAAgtB,OAIA,yBAAA3nB,IACAA,EAAAuE,EAAAwX,EAAA/b,QAEAwmB,GACA3M,KAAA,SAAAsG,GACAngB,EAAA,KAAAmgB,IAAA0H,eAEAzO,MAAA,SAAA/wB,GACA,GAAAD,GAAAC,KAAAulB,SAAAvlB,EAAAulB,QAAA2W,UAEAvkB,GAAA3X,EAAA,KAAAD,MAMAo+B,GAiCAvD,EAAAlzC,UAAAg4C,OAAA,WACA,MAAAt0C,MAAAirC,oBAiBAuE,EAAAlzC,UAAAi4C,WAAA,WACA,MAAA1F,IAeAW,EAAAlzC,UAAAixC,SAAAxE,EAAA,WACA,GAAA3f,GAAAppB,IAKA,cAHA4xC,GAAAxoB,EAAA6hB,mBAAAsD,eACAzD,EAAA1hB,EAAAyhB,EAAA2E,EAAAlzC,YAEA4/B,EAAAhV,YAaAv1B,EAAAC,QAAA49C,IAEGgF,sBAAA,GAAAhH,mBAAA,GAAAiH,gBAAA,GAAAC,gBAAA,GAAAjH,yBAAA,GAAAkH,mBAAA,IAAAjH,kCAAA,IAAAkH,oCAAA,IAAAC,mCAAA,IAAAC,kBAAA,IAAAC,4BAAA,IAAApH,iBAAA,IAAAqH,cAAA,IAAApH,iBAAA,IAAAqH,cAAA,GAAApH,WAAA,GAAAqH,sBAAA,GAAAC,YAAA,GAAAC,oBAAA,GAAAtH,0BAAA,KAA0euH,IAAA,SAAAla,EAAAxpC,EAAAC,GAC7e,YAEAD,GAAAC,SACAu/C,kBAAA,mBAGImE,IAAA,SAAAna,EAAAxpC,EAAAC,GACJ,YA8BA,IAAA84C,GAAAvP,EAAA,yBAEAxpC,GAAAC,SACAi+C,6CACAp/B,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,+CAEAkY,wBACA9iC,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,0BAEAoY,uBACAhjC,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,yBAEAsU,sCACAl/B,KAAAi6B,EAAAuD,MAAAsH,SACAla,KAAA,uCACAvkB,QAAA,iCAEAk7B,8BACAvhC,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,+BACAvkB,QACA,uFAEA65B,wBACAlgC,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,yBACAvkB,QAAA,4CAEAy5B,wBACA9/B,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,yBACAvkB,QAAA,0CAEA+5B,sBACApgC,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,uBACAvkB,QAAA,0CAEAq9B,8BACA1jC,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,+BACAvkB,QAAA,0CAEA45B,qBACAjgC,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,sBACAvkB,QAAA,kEAEA25B,mCACAhgC,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,oCACAvkB,QAAA,uDAEA05B,8BACA//B,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,+BACAvkB,QACA,qIAIG22B,yBAAA,KAA4B+H,IAAA,SAAAra,EAAAxpC,EAAAC,GAC/B,YAeA,SAAAq5C,GAAA8G,GACA,UAAA7V,GAAA,SAAAhV,EAAAgW,GACA,GAAAuS,GAAA/S,EAAA+Y,EAAAC,EACA5B,EAAA5L,IACAsL,GACAmC,cAAA11C,OAAAmsC,SAAAr7B,KACA6iC,SAAAgC,EAAAC,SACAC,WAAAF,EAAA/G,QACArY,OAAAof,EAAAG,OACAlC,YAAA+B,EAAAI,YACAC,gBAAAL,EAAAI,YACAlC,YAGApX,GAAAqV,EAAArV,MACA+Y,EAAA1D,EAAA0D,UAEA/Y,EAAA+P,MAAA+G,EACA9W,EAAAwZ,wBAAAN,EAAAO,0BACAzZ,EAAA0Z,cAAA,IAEAV,GACAjf,IAAAgf,EACAhM,OAAA,MACAxhC,KAAAy0B,GAGAA,EAAAuU,0BAAAc,EAAA7B,SACAmG,EAAAtE,EAAA7B,QAAAoG,KAAAnF,KACAuE,EAAAxF,QAAA,GAAAE,IACAF,SACAzZ,IAAAsb,EAAA7B,QAAAzZ,IACA8f,UAAA,qBAKAb,EAAA/7B,SAAA65B,GACK9W,EAAA8Z,kBACLd,EAAAxF,QAAA,GAAAE,IACAF,SACAzZ,IAAA8a,EAAAQ,EAAA2B,aACA6C,UAAA,oBAIAb,EAAA/7B,SAAA65B,GAeAjH,EAAAmJ,EAAA,SAAA9gC,EAAA83B,EAAA/3B,GACA,GAAA8hC,EAEA,IAAA7hC,EAoBA,MAlBA6hC,GADA,MAAA9hC,EACAi2B,EAAA6F,kCACS,MAAA97B,EACTi2B,EAAA4F,6BAEA5F,EAAA+F,2BAGAzT,GACA,GAAAwN,IACAj6B,KAAAgmC,EAAAhmC,KACA4qB,KAAAob,EAAApb,KACAvkB,QAAA2/B,EAAA3/B,QACAqjB,SACA0S,cAAAj4B,KAQA66B,IACAiH,kBAAAha,EAAA8Z,gBACA,mBACA,eACAvF,yBAAAvU,EAAAuU,yBACAuC,oBACAtI,qBAAAwB,GAGAxlB,EAAAuoB,OA7GA,GAAA/E,GAAAvP,EAAA,0BACAe,EAAAf,EAAA,kBACA4N,EAAA5N,EAAA,2BACAoR,EAAApR,EAAA,aACA+M,EAAA/M,EAAA,mBACAya,EAAAza,EAAA,oBACAyP,EAAAzP,EAAA,YACAiV,EAAAjV,EAAA,qBACAoW,EAAApW,EAAA,oBAAAoW,aACA8E,EAAAlb,EAAA,sCAEAgW,EAAAhW,EAAA,eAAAgW,iBAuGAx/C,GAAAC,SACAq5C,iBAAAlC,EAAAkC,MAGGwC,yBAAA,GAAAkH,mBAAA,IAAAgC,qCAAA,IAAA/I,iBAAA,IAAAqH,cAAA,GAAApH,WAAA,GAAAsH,YAAA,GAAAC,oBAAA,GAAAwB,kBAAA,GAAA9I,0BAAA,KAAwO+I,IAAA,SAAA1b,EAAAxpC,EAAAC,GAC3O,YAsCA,SAAAknB,GAAArF,GACA,MAAAA,GAAA86B,cAWAiB,EAAAqC,WAAAp+B,GAVAyoB,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAqmC,EAAAC,8BAAAtmC,KACA4qB,KAAAyb,EAAAC,8BAAA1b,KACAvkB,QACA,oEA3CA,GAAA4zB,GAAAvP,EAAA,0BACAqU,EAAArU,EAAA,YAEAe,EAAAf,EAAA,kBACA4N,EAAA5N,EAAA,2BACA2b,EAAA3b,EAAA,gBA8CAxpC,GAAAC,SACAknB,OAAAiwB,EAAAjwB,GAKA+1B,QAvDA,YA0DGpB,yBAAA,GAAAuJ,gBAAA,IAAApJ,iBAAA,IAAAqJ,WAAA,GAAAnJ,0BAAA,KAAgHoJ,IAAA,SAAA/b,EAAAxpC,EAAAC,GACnH,YAcA,SAAAulD,GAAAxiC,GACA,OAAAA,OAAAyiC,EAGA,QAAAC,GAAAvrC,GACA,GAAAwrC,IACAxrC,EAAA7D,MACA6D,EAAA8+B,QACA9+B,EAAA8+B,OAAA,IACA9+B,EAAA8+B,OAAA,GAAA2M,YACAzrC,EAAA8+B,OAAA,GAAA2M,WAAAD,UAEA,mBAAAA,GAAA,aAAAA,EAGA,QAAAE,GAAA/jC,EAAAgkC,EAAAC,GACA,GAAA/iC,GAAAgjC,EAAAC,EAAA9rC,EAAA29B,EAAAsK,EAAA8D,EACAphB,EAAAhjB,EAAAgjB,IACAyZ,EAAAz8B,EAAAy8B,QACApmC,EAAA2J,EAAA3J,QACA4c,EAAAoxB,EAAAC,mBACAxrB,EAAAmrB,EACAM,EAAA5kC,QACA88B,KAAA8H,iBAAAvhB,EAAAhjB,EAAAxL,MAGAwL,GAAAsgC,QAAA9M,GACKgR,eAAA,oBACLxkC,EAAAsgC,SAIA6D,EADAI,EACA,GAAAE,GAAAzkC,GAEA,GAAA0kC,GAAA1kC,GAGAgjB,EAAAmhB,EAAAQ,SACAtsC,EAAA8rC,EAAAS,UACA5O,EAAAmO,EAAAU,YACAvE,EAAA6D,EAAAW,aAEA,QAAA9O,IACAhT,EAAA+hB,EAAAC,SAAAhiB,EAAA3qB,GACAA,EAAA,MAGA4sC,EACAhyB,EAAAiyB,mBAAA,WACA,OAAAjyB,EAAAxrB,WAAA,CAIA,OAAAwrB,EAAA/R,QAAAqjC,EAQA,aAHAvkC,GAAAy8B,YACAsH,GAAA/jC,EAAAgkC,EAAAC,EASA,IAJAG,EAAAe,EAAAlyB,EAAAmyB,cACAlB,EAAAC,EAAAkB,kBAAAjB,IACAljC,EAAAijC,EAAAmB,gBAAAryB,EAAA/R,OAAAkjC,KAEA,KAAAljC,EAAA,KACA,GACAqjC,GACAX,EAAAQ,GAKA,aAHApkC,GAAAy8B,YACAsH,GAAA/jC,EAAAgkC,EAAAC,EAKA,IAAAD,EAAAuB,GAAA7B,EAAAxiC,GAIA,MAHA8iC,SACAD,GAAA/jC,EAAAgkC,EAAAC,EAIAnrB,GAAAorB,GAAA,aAAAhjC,GAAA,SAEA4X,GAAA,KAAAorB,EAAAhjC,MAIAlB,EAAAsgC,UACAtd,EAAA+hB,EAAAC,SAAAhiB,EAAAsd,IAGArtB,EAAAuyB,OAAA,WACA1sB,EAAA,KAAAqsB,EAAAlyB,EAAAmyB,cAAAnyB,EAAA/R,SAGA+R,EAAAwyB,QAAA,WAGA3sB,EAAA,mBAIA7F,EAAAyyB,WAAA,aAEAzyB,EAAA0yB,UAAA,WACA7sB,EAAA,oBAIA,KACA7F,EAAAqT,KAAA0P,EAAAhT,GAAA,GACG,MAAA4iB,GAOH,IAAArB,EACA,KAAAqB,EAOA,cAJA5lC,GAAAy8B,YAEAsH,GAAA/jC,EAAAgkC,EAAAC,GAKAhxB,EAAA5c,UAEA4uC,GACAh+C,OAAAusB,KAAA8sB,GAAA12C,QAAA,SAAAi8C,GACA5yB,EAAA6yB,iBAAAD,EAAAvF,EAAAuF,KAIA,KACA5yB,EAAA8yB,KAAAC,EAAAhQ,EAAA39B,IACG,MAAA7O,KAKH,QAAAsvC,GAAA94B,EAAAikC,GACAF,EAAA/jC,EAAA,EAAAikC,GAjKA,GAAAc,GAAArd,EAAA,yBACA8L,EAAA9L,EAAA,oBAAA8L,OACAwS,EAAAte,EAAA,eACAyd,EAAAzd,EAAA,gBACA2c,EAAA3c,EAAA,SACAud,EAAAZ,EAAA4B,YACAxB,EAAA/c,EAAA,qBACAgd,EAAAhd,EAAA,qBAEA6d,EAAA,EACA5B,EAAA,GA0JAzlD,GAAAC,SACA26C,aAGGoN,mBAAA,GAAAC,wBAAA,IAAAC,oBAAA,GAAAC,oBAAA,GAAAC,eAAA,GAAAC,cAAA,GAAAC,QAAA,KAA8IC,IAAA,SAAA/e,EAAAxpC,EAAAC,GACjJ,YAEA,SAAAumD,GAAA1kC,GACAzT,KAAAm6C,KAAA1mC,EAAAgjB,IACAz2B,KAAAo6C,MAAA3mC,EAAAxL,KACAjI,KAAAq6C,QAAA5mC,EAAAg2B,OACAzpC,KAAAs6C,SAAA7mC,EAAAsgC,QAGAoE,EAAA77C,UAAA87C,OAAA,WACA,MAAAp4C,MAAAm6C,MAGAhC,EAAA77C,UAAA+7C,QAAA,WACA,MAAAr4C,MAAAo6C,OAGAjC,EAAA77C,UAAAg8C,UAAA,WACA,MAAAt4C,MAAAq6C,SAGAlC,EAAA77C,UAAAi8C,WAAA,WACA,MAAAv4C,MAAAs6C,UAGAnC,EAAA77C,UAAAw8C,kBAAA,SAAAjB,GACA,MAAAA,IAGAM,EAAA77C,UAAAy8C,gBAAA,SAAApkC,GACA,MAAAA,IAGAhjB,EAAAC,QAAAumD,OAEIoC,IAAA,SAAApf,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,QAAA,WACA,MAAAqO,QAAA69B,UAAAC,gBAGIyc,IAAA,SAAArf,EAAAxpC,EAAAC,GACJ,YAuDA,SAAA6oD,GAAAC,EAAAC,GASA,MANAD,GAAAzyC,OAAAyyC,EAAA9P,OACAgQ,EAAAF,EAAAC,GAEAE,EAAAH,GAMA,QAAAE,GAAA9uC,EAAA6uC,GACA,GACAjO,GADA+C,EAAA3jC,EAAA7D,KAAA6yC,mBA8IA,OA3IApO,IACAgH,YAAAjE,EAAAiE,YAAAhhC,cACAu9B,aAAAR,EAAAQ,aACAtB,UAAAc,EAAAd,UACAhE,WACAlU,IAAAgZ,EAAAsL,cAEAvI,WAAA/C,EAAA+C,WACAwI,MAAA,OAGAvL,EAAAwL,oBACAvO,EAAAwD,SACAzZ,IAAAkkB,EAAAxK,SAAA+K,QAAAzkB,IACA8f,SAAA9G,EAAAwL,kBAAA1+C,IAAA,SAAA4+C,GACA,MAAAA,GAAAzoC,kBAKA+8B,EAAA2L,eACA1O,EAAA0O,aAAA3L,EAAA2L,cAGA3L,EAAAtE,cACAuB,EAAAvB,YAAAsE,EAAAtE,YACAuB,EAAAvB,YAAAU,kBAAAwP,EACA5L,EAAAtE,YAAAmQ,oBACAC,EAAApQ,mBAGAuB,GAAAvB,YAAAmQ,qBAGA7L,EAAA+L,QACA9O,EAAA8O,MAAA/L,EAAA+L,OAGA/L,EAAAgM,QACA/O,EAAA+O,OACAC,gBAAAjM,EAAAgM,MAAAjJ,aAIA/C,EAAAkM,YACAjP,EAAAkP,WAAAnM,EAAAkM,WAAAC,WAAAr/C,IAAA,SACAs/C,GAEA,MAAAA,GAAAnpC,gBAGAg6B,EAAA2G,aACAyI,mBAAAT,EACA5L,EAAAkM,WAAAL,oBACAC,EAAAI,aAGAjP,EAAAqP,oBAAAtM,EAAAkM,WAAAI,oBACArP,EAAAsP,aAAAvM,EAAAkM,WAAAK,eAEAtP,EAAAkP,cACAlP,EAAA2G,aACAyI,uBAEApP,EAAAqP,qBAAA,GAGAtM,EAAAwM,YACAvP,EAAAwP,YACA5P,YAAAmD,EAAAwM,UAAA3P,YACA6P,SAAA,EACAzI,YAAAjE,EAAAwM,UAAAvI,YAAAhhC,cACA0pC,+BACA3M,EAAAwM,UAAAI,oBACAC,eAAA7M,EAAAwM,UAAAK,eACAzQ,kBAAAwP,EACA5L,EAAAwM,UAAAX,oBACAC,EAAAU,aAKAxM,EAAAuL,QACAtO,EAAA6P,cACA/J,WAAA/C,EAAAuL,MAAAxI,WACAgK,YAAA/M,EAAAuL,MAAAwB,YACA9I,YAAAjE,EAAAuL,MAAAtH,YAAAhhC,gBAIA+8B,EAAAgN,QACA/P,EAAAgQ,eAAA,EACAhQ,EAAA+P,OAAAxV,KAA+BwI,EAAAgN,QAC/B/P,EAAA+P,OAAAE,gBAAAjQ,EAAA+P,OAAA9Q,aACAe,EAAA+P,OAAA/I,YAAAhH,EAAA+P,OAAA/I,YAAAhhC,oBAEAg6B,GAAA+P,OAAA9Q,cAEAe,EAAAgQ,eAAA,EAGAjN,EAAAmN,WACAlQ,EAAAkQ,UACAT,SAAA,EACAU,kBAAApN,EAAAmN,SAAAC,oBAIApN,EAAAqN,eACApQ,EAAAoQ,cACAC,OAAAtN,EAAAqN,aAAAE,OACAC,cAAAxN,EAAAqN,aAAAG,cACAC,iBAAAzN,EAAAqN,aAAAI,iBACApB,mBAAAT,EACA5L,EAAAqN,aAAAxB,oBACAC,EAAAuB,gBAKArN,EAAA0N,aACAzQ,EAAAyQ,YACAC,mBAAA3N,EAAA0N,WAAAC,mBACAvR,kBAAAwP,EACA5L,EAAA0N,WAAA7B,oBACAC,EAAA4B,cAKA1N,EAAA4N,gBACA3Q,EAAA2Q,eACAC,QAAA7N,EAAA4N,cAAAC,QACAC,OACAC,UAAA/N,EAAA4N,cAAAI,kBAKA/Q,EAGA,QAAA2O,GAAAqC,EAAAC,GACA,MAAAD,GAAAE,OAAA,SAAAC,EAAAptC,GACA,MAAAktC,GAAAniD,eAAAiV,GACAotC,EAAAryB,OAAAmyB,EAAAltC,IAGAotC,OAzNA,GAAAhD,GAAA1f,EAAA,WACA8L,EAAA9L,EAAA,0BAAA8L,OAGAsU,GACAI,YACAmC,iBAAA,mBACAC,SAAA,WACAC,sBAAA,UACAC,IAAA,MACAC,WAAA,aACAC,KAAA,OACAC,WAAA,aACAC,UAAA,WACAC,KAAA,OACAC,IAAA,MACAC,MAAA,QACAC,UAAA,aAEAtT,aACAmT,KAAA,OACAJ,WAAA,aACAH,SAAA,WACAD,iBAAA,OACAE,sBAAA,UACAO,IAAA,OAEAzB,cACAwB,KAAA,OACAJ,WAAA,aACAH,SAAA,WACAD,iBAAA,oBAEA7B,WACAqC,KAAA,OACAJ,WAAA,aACAH,SAAA,WACAD,iBAAA,OACAE,sBAAA,UACAO,IAAA,OAEApB,YACAmB,KAAA,OACAJ,WAAA,SACAH,SAAA,WACAD,iBAAA,OACAY,OAAA,SACAV,sBAAA,UACAC,IAAA,OA6KAtsD,GAAAC,QAAA6oD,IAEGkE,yBAAA,GAAAC,UAAA,KAAyCC,IAAA,SAAA1jB,EAAAxpC,EAAAC,GAC5C,YA+BA,SAAAktD,GAAApE,GASA,MANAA,GAAAzyC,OAAAyyC,EAAA9P,OACAmU,EAAArE,GAEAG,EAAAH,GAMA,QAAAqE,GAAAjzC,GACA,GAIA4gC,GAAAsS,EAJA/2C,EAAA6D,EAAA7D,KAAAg3C,mBACAtD,EAAA1zC,EAAA0zC,WACAuD,EAAAvD,EAAAwD,MAAAxD,EAAAwD,MAAAvM,OAAA,QACAwM,EAAAzD,EAAAyD,OA0DA,OAvDAA,MAEA,aACA,QACA,kBACA,aACA,UACA,WACA/hD,QAAA,SAAA4b,GACAmmC,EAAAnmC,GACAmmC,EAAAnmC,GAAAomC,EAAAD,EAAAnmC,IAEAmmC,EAAAnmC,GAAA,aAIA,+CAAA5b,QAAA,SAAA4b,GACAmmC,EAAAnmC,KACAmmC,EAAAnmC,GAAA,cAKAyzB,GACA2G,cAEA+L,UACAE,UAAA,EACAC,YAAAL,EAAA,aAAAA,EAAA,GACA7K,MAAApsC,EAAA4T,MACAse,SACAqlB,eAAA7D,EAAA6D,eACAC,gBAAA9D,EAAA8D,gBACAC,eAAA/D,EAAA+D,eACAC,IAAAhE,EAAAgE,KAAA,GACAC,SAAAC,EAAAlE,EAAAmE,YAAA,UACAC,SAAApE,EAAAwD,OAAA,GACAD,WAEAzuC,KAAA,aACAuvC,iBAAA,QAKA/3C,EAAAg4C,wBACAjB,EACA/2C,EAAAg4C,sBAAAC,4CACAxT,EAAA2G,YAAA,GAAA4M,uBACAjB,sBACAmB,EAAAnB,IACAA,EAAAtsC,gBAIAg6B,EAvGA,GAAAmO,GAAA1f,EAAA,WAEA0kB,GAEA/B,iBAAA,mBACAY,OAAA,WACAX,SAAA,WACAQ,IAAA,MACAC,MAAA,QACAC,UAAA,YACAT,sBAAA,UACAC,IAAA,MACAC,WAAA,aACAE,WAAA,UACAC,UAAA,WACAC,KAAA,QAIAe,GACAe,IAAA,MACAC,GAAA,KACAC,QAAA,WAGAH,GACAI,OAAA,OAgFA5uD,GAAAC,QAAAktD,IAEGF,UAAA,KAAa4B,IAAA,SAAArlB,EAAAxpC,EAAAC,GAChB,YAEA,SAAAipD,GAAAH,GACA,GACApD,GACAoD,EAAA9P,QACA8P,EAAA9P,OAAA,IACA8P,EAAA9P,OAAA,GAAA2M,YACAmD,EAAA9P,OAAA,GAAA2M,WAAAD,UAaA,OAXA,eAAAA,EACAmJ,EAAA/F,GACGpD,EACHoJ,EAAAhG,IAGA/7B,OAAc7H,QAAA,4CACd6pC,gBAOA,QAAAD,GAAAhG,GACA,OACA/7B,OAAY7H,QAAA4jC,EAAA9P,OAAA,GAAA9zB,SACZ6pC,gBAIA,QAAAF,GAAA/F,GACA,GAAAiG,GAAAC,EAAAlG,EAAA9P,OAEA,YAAA+V,EAAAtiD,QACYsgB,OAAS7H,QAAA4jC,EAAA9P,OAAA,GAAA9zB,WAIrB6H,OAAY7H,QAAA+pC,EAAAF,IACZA,eAIA,QAAAC,GAAAhW,GACA,GAAA+V,KASA,OAPA/V,GAAAvtC,QAAA,SAAAshB,GACAA,EAAA44B,YAAA54B,EAAA44B,WAAAuJ,WAGAC,EAAApiC,EAAA44B,WAAAuJ,UAAAnjD,MAAA,GAAAghB,EAAAgiC,KAGAA,EAGA,QAAAI,GAAAD,EAAAE,EAAAL,GACA,GAAAM,GACAC,EAAAF,EAAAzJ,WAAA2J,WACAC,EAAAL,EAAA,EAEA,QAAAA,EAAAziD,OAOA,WANAsiD,GAAA3pC,MACAqkB,KAAA6lB,EACAE,MAAAD,EACArqC,QAAAkqC,EAAAlqC,SAMA6pC,GAAAtjD,QAAA,SAAAgkD,GACAA,EAAAD,QAAAD,IACAF,EAAAI,KAIAJ,IACAA,GAAkBG,MAAAD,EAAAR,gBAClBA,EAAA3pC,KAAAiqC,IAGAF,EAAAD,EAAAnjD,MAAA,GAAAqjD,EAAAC,EAAAN,aAGA,QAAAE,GAAAjW,GAOA,OALA+Q,WAAA,0BAGA/Q,EAAA,GAAAwW,OAKAzvD,EAAAC,QAAAipD,OAEIyG,IAAA,SAAAnmB,EAAAxpC,EAAAC,GACJ,YAkFA,SAAA69C,KACA,OACA8R,MAAAC,EACAC,cAAA,uBAnFA,GAAAD,GACA,2yCAsFA7vD,GAAAC,QAAA69C,OAEIiS,IAAA,SAAAvmB,EAAAxpC,EAAAC,GACJ,YAIA,SAAA+vD,GAAA3a,GACA,GAAA4a,GAAA5a,EAAA4a,yBACAC,EAAA,8DAuCA,OArCAD,KACAC,GAAA,8DAGAA,GACA,sXAuBAD,IACAC,GACA,yHAKAA,GAAA,QAKA,QAAAC,GAAAh2C,EAAA2H,GACA,GAAAsuC,GAAAj2C,EAAA6vC,WACAqG,EAAAD,KAAAC,eACAC,EAAAF,KAAAG,eACAzC,EACAsC,MAAAtC,iBAAAwC,KAAApe,MAAA,QAAAD,QACA8b,EACAqC,MAAArC,gBAAAuC,KAAApe,MAAA,QAAAD,QACAue,GACAjkD,OACAy9C,YACAyG,OAAAL,KAAAK,OACA3C,kBACAC,iBACA2C,IAAAN,KAAAM,IACA7C,eAAAuC,KAAAvC,gBAEA/rC,YAgBA,OAZAA,GAAAmuC,2BACAO,EAAAG,4BACAzF,kBAAA/wC,EAAA+wC,oBAIAmF,IACAG,EAAAjkD,MAAAy9C,WAAAqG,kBAGAG,EAAAjkD,MAAAqkD,EAAAz2C,EAAAq2C,EAAAjkD,OAEAikD,EAGA,QAAAI,GAAAz2C,EAAA5N,GACA,GAAAskD,EA0BA,OAvBA12C,GAAA6vC,YACA7vC,EAAA6vC,WAAAloC,SACA,iBAAA3H,GAAA6vC,WAAAloC,QAAA+uC,SAEAA,EAAA12C,EAAA6vC,WAAAloC,QAAA+uC,SAEA12C,EAAAmlC,0BAAAnlC,EAAA0qC,iBACA1qC,EAAAmlC,yBAEAuR,GAAA,EACG12C,EAAA0qC,kBACHgM,GAAA,GAGA,iBAAAA,KACAtkD,EAAAuV,QAAAwzB,GAEAub,YAEAtkD,EAAAuV,UAIAvV,EAGA,QAAAukD,GAAA32C,GACA,GAAA2H,IACAmuC,yBAAAxuC,QACAtH,EAAAm0C,uBAAAn0C,EAAA+wC,mBAIA,QACA0E,MAAAI,EAAAluC,GACA0uC,UAAAL,EAAAh2C,EAAA2H,GACAguC,cAAA,sBA1HA,GAAAxa,GAAA9L,EAAA,0BAAA8L,MA8HAt1C,GAAAC,QAAA6wD,IAEG9D,yBAAA,KAA4B+D,IAAA,SAAAvnB,EAAAxpC,EAAAC,GAC/B,YAWA,SAAAw+C,GAAApJ,GACAhnC,KAAAk7C,QAAAlU,EAAAkJ,QA0CA,QAAAyS,GAAA72C,GACA,MAAA82C,GAAAjnC,KAAA,SAAAsL,GAKA,WAAApkB,KAJAokB,EAAA4c,MAAA,KAAA+Z,OAAA,SAAAiF,EAAA5pC,GACA,MAAA4pC,MAAA5pC,IACKnN,KAxDL,GAAAg3C,GAAA3nB,EAAA,2BAEAob,GACAwM,sBAAA,+BACAtT,cAAA,iBAGAmT,GAAA,wCAMAxS,GAAA9zC,UAAA0mD,mBAAA,WACA,MAAAhjD,MAAAk7C,QAAAzkB,KAGA2Z,EAAA9zC,UAAA07C,iBAAA,SAAAvhB,EAAA3qB,GACA,GAAAm3C,GACAC,EAAAljD,KAAAmjD,iBAAA1sB,EAEA,UAAAz2B,KAAAojD,sBAAAF,GAAAJ,EAAA1T,WAIA6T,EAAAjjD,KAAAk7C,QAAA3E,SAAA56B,KAAA,SAAAw/B,GACA,MAAA5E,GAAA4E,KAAA+H,KAGAP,EAAA72C,IAIAm3C,IAGA7S,EAAA9zC,UAAA6mD,iBAAA,SAAA1sB,GACA,GAAAysB,GAEAG,EAAA5sB,EAAAoN,MADA,kBAOA,OAJAwf,GAAAhlD,OAAA,IACA6kD,EAAAG,EAAA,GAAAxf,MAAA,SAGAqf,GAGA9S,EAAA9zC,UAAA8mD,kBAAA,WACA,MAAAhwC,SAAApT,KAAAk7C,UAaAvpD,EAAAC,QAAAw+C,IAEGkT,0BAAA,KAA6BC,IAAA,SAAApoB,EAAAxpC,EAAAC,GAChC,YAsBA,SAAAsmD,GAAAzkC,GACA,GAAA+vC,GAAA/vC,EAAAy8B,QAAAiT,iBAAA1vC,EAAAgjB,IAEAz2B,MAAAmwC,SAAA18B,EAAAy8B,QACAlwC,KAAAo6C,MAAA3mC,EAAAxL,KACAjI,KAAAq6C,QAAA5mC,EAAAg2B,OACAzpC,KAAAs6C,SAAA7mC,EAAAsgC,QACA/zC,KAAAyjD,oBACAjtB,OAAA/iB,EAAAkG,SAAA6c,OACAqd,YAAApgC,EAAAkG,SAAAk6B,YACAC,UAAArgC,EAAAkG,SAAAm6B,WAEA9zC,KAAA0jD,oBAAAjwC,EAAAugC,oBAAA2P,SAAArnD,UAEA0D,KAAA4jD,WAAAC,EAAAL,GACAxjD,KAAA8jD,SAAAC,EAAAP,GAEAxjD,KAAA0jD,oBAAA,gBAmFA,QAAAM,GAAA1M,EAAA2M,GACA,OAAA3M,GAAA2M,EAAArZ,OAAA,GAAA9zB,QAGA,QAAAotC,GAAAC,GACA,GAAAr4C,KAcA,OAZApR,QAAAusB,KAAAk9B,GAAA9mD,QAAA,SAAA4b,GACA,GAAAmrC,GAAAC,EAAAprC,EAEA,iBAAAkrC,GAAAlrC,GACAnN,EAAAs4C,GAAAF,EAAAC,EAAAlrC,IACK,gBAAAkrC,GAAAlrC,GACLnN,EAAAs4C,GAAAzgC,OAAAwgC,EAAAlrC,IAEAnN,EAAAs4C,GAAAD,EAAAlrC,KAIAnN,EA3IA,GAAAqlC,GAAAhW,EAAA,mBAAAgW,kBAEAlK,EAAA9L,EAAA,uBAAA8L,OACAod,EAAAlpB,EAAA,yCAEAmpB,EAAAnpB,EAAA,yCACA2jB,EAAA3jB,EAAA,uCAEAopB,EAAAppB,EAAA,8BACAsf,EAAAtf,EAAA,4BAEA0oB,GACAW,+BAAAF,EACA7U,cAAA8U,GAEAR,GACAS,+BAAA1F,EACArP,cAAAgL,EAuBAvC,GAAA57C,UAAA87C,OAAA,WACA,MAAAp4C,MAAAmwC,SAAA6S,sBAGA9K,EAAA57C,UAAA+7C,QAAA,WACA,GAAAoM,GAAAP,EAAAlkD,KAAAo6C,OACAsK,EAAA1kD,KAAA4jD,WAAAa,GACA34C,EAAAm7B,GACK0M,kBAAA3zC,KAAAyjD,oBACLiB,EAGA,OAAA7lC,MAAAE,UAAAjT,IAGAosC,EAAA57C,UAAAg8C,UAAA,WACA,cAGAJ,EAAA57C,UAAAi8C,WAAA,WACA,GAAAhK,GAAAwF,CAeA,OAbA/zC,MAAAo6C,MAAAnJ,0BACAjxC,KAAA0jD,oBAAA,qCACAnV,EAAAvuC,KAAAo6C,MAAAnJ,2BAEAjxC,KAAA0jD,oBAAA,4BACAnV,EAAAvuC,KAAAo6C,MAAA5D,iBAGAzC,GACA/C,cAAA,UAAAzC,EACA2C,oBAAAC,GAGAlK,KAAkBjnC,KAAAs6C,SAAAvG,IAGlBmE,EAAA57C,UAAAw8C,kBAAA,SAAAjB,GACA,MAAA73C,MAAA8jD,SAAAjM,EAAA73C,OAGAk4C,EAAA57C,UAAAy8C,gBAAA,SACAjI,EACAmT,GAEA,GAAAtvC,GAAA2iC,CA+BA,OA7BA,OAAAxG,GACAwG,EACA2M,EAAArZ,QACAqZ,EAAArZ,OAAA,IACAqZ,EAAArZ,OAAA,GAAA2M,YACA0M,EAAArZ,OAAA,GAAA2M,WAAAD,WAGA3iC,EADAsvC,EAAAh8C,OAAAg8C,EAAArZ,OACA,IACK,eAAA0M,EACL,IACK,kBAAAA,EACL,IACK,mBAAAA,EACL,IACK0M,EAAA1M,EAAA2M,GACL,IAEA,KAKAtvC,EAHGm8B,GACH,IAKA9wC,KAAA0jD,oBAAA,kBAAA5S,GACA9wC,KAAA0jD,oBAAA,4BAAA/uC,GAEAA,GAyBAhjB,EAAAC,QAAAsmD,IAEGyM,sBAAA,GAAAC,wCAAA,IAAAC,kBAAA,GAAAC,2BAAA,GAAAC,sCAAA,GAAAC,6BAAA,GAAAC,wCAAA,KAA4OC,IAAA,SAAA/pB,EAAAxpC,EAAAC,GAC/O,YASA,SAAAuzD,KAKA,MAJA,OAAAC,IACAA,IAAAC,KAAA,cAAArnB,KAAAsnB,OAGAF,EAZA,GAAAA,GACAt0B,EAAAqK,EAAA,kBACAoqB,EAAApqB,EAAA,kBACAqqB,EAAArqB,EAAA,iBACAmqB,EAAAnqB,EAAA,oBACAkqB,EAAAlqB,EAAA,YAUAxpC,GAAAC,QAAA,SAAA6hB,EAAAikC,GACAA,EAAA5mB,EAAA4mB,GAAAiM,SAAArnD,WACAmX,EAAAg2B,QAAAh2B,EAAAg2B,QAAA,OAAAgc,cACAhyC,EAAA3J,QAAA,MAAA2J,EAAA3J,QAAA,IAAA2J,EAAA3J,QACA2J,EAAAxL,KAAAwL,EAAAxL,SAEAk9C,IACAK,EAAAjZ,QAAA94B,EAAAikC,GAEA6N,EAAAhZ,QAAA94B,EAAAikC,MAIGgO,iBAAA,IAAAC,gBAAA,GAAAC,mBAAA,GAAAC,YAAA,GAAAC,iBAAA,KAAiGC,IAAA,SAAA5qB,EAAAxpC,EAAAC,GACpG,YAEAD,GAAAC,QAAA,WACA,gBAAAqO,OAAAmsC,SAAA4Z,eAGIC,IAAA,SAAA9qB,EAAAxpC,EAAAC,GACJ,YAOA,SAAAs0D,GAAAzpB,GACAA,KAAA1/B,YACA0/B,EAAA1/B,WAAAC,YAAAy/B,GAIA,QAAA0pB,GAAA1vB,EAAA2vB,GACA,GAAA3pB,GAAAxhC,SAAAiC,cAAA,UACAmpD,GAAA,CAuBA,OArBA5pB,GAAAI,IAAApG,EACAgG,EAAAK,OAAA,EACAL,EAAAyc,QAAA,WACAj5C,OAAAmmD,IAA0BtvC,QAAA,QAAAnC,OAAA,OAG1B8nB,EAAAwc,OAAAxc,EAAAkc,mBAAA,WACA0N,GAKArmD,KAAA9E,YACA,WAAA8E,KAAA9E,YACA,aAAA8E,KAAA9E,aAEAmrD,GAAA,EACA5pB,EAAAwc,OAAAxc,EAAAkc,mBAAA,OAIAlc,EAGA,QAAA6pB,GAAAF,GACA,UACAnmD,QAAAmmD,GACG,MAAAG,GACHtmD,OAAAmmD,GAAA,MAIA,QAAAI,GAAA18C,EAAAs8C,GACAK,EAAAL,GAAAp8C,WAAA,WACAy8C,EAAAL,GAAA,KAEAnmD,OAAAmmD,IACAznC,MAAA,UACAhK,QAAA,IAGA1U,OAAAmmD,GAAA,WACAE,EAAAF,KAEGt8C,GAGH,QAAA48C,GAAAjqB,EAAAlQ,EAAA65B,GACAnmD,OAAAmmD,GAAA,SAAA1Z,GACA,GAAA/3B,GAAA+3B,EAAA/3B,QAAA,IACAC,EAAA,KACA3M,EAAA,WAEAykC,GAAA/3B,OAEAA,GAAA,KAAAA,EAAA,IACAC,EAAA83B,EAEAzkC,EAAAykC,EAGA4Z,EAAAF,GACAF,EAAAzpB,GAEAxyB,aAAAw8C,EAAAL,IACA75B,EAAA3X,EAAA3M,EAAA0M,IAIA,QAAA43B,GAAA94B,EAAA8Y,GACA,GAAAkQ,GACA2pB,EAAA,iBAAAle,IAAAC,QAAA,SACA1R,EAAAhjB,EAAAgjB,IACAiG,EAAAjpB,EAAAxL,KACAwhC,EAAAh2B,EAAAg2B,OACA3/B,EAAA2J,EAAA3J,OAEA2sB,GAAA+hB,EAAAC,SAAAhiB,EAAAiG,GACAjG,EAAA+hB,EAAAC,SAAAhiB,GACA4jB,QAAA5Q,EACAld,SAAA65B,IAGA3pB,EAAA0pB,EAAA1vB,EAAA2vB,GACAM,EAAAjqB,EAAAlQ,EAAA65B,GACAI,EAAA18C,EAAAs8C,GAEA5oD,IACAA,EAAAvC,SAAA0rD,qBAAA,YAGAnpD,EAAA2/B,YAAAV,GA1GA,GAAAj/B,GACA0qC,EAAA/M,EAAA,mBACAqd,EAAArd,EAAA,yBACAsrB,IA0GA90D,GAAAC,SACA26C,aAGGqN,wBAAA,IAAAhD,kBAAA,KAAiDgQ,IAAA,SAAAzrB,EAAAxpC,EAAAC,GACpD,YAEAD,GAAAC,QAAA,SAAAka,GACA,IACAA,EAAA+S,KAAAC,MAAAhT,GACG,MAAA7O,IAIH,MAAA6O,SAGI+6C,IAAA,SAAA1rB,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,QAAA,SAAA63C,EAAA39B,GACA,mBAAA29B,GACA,SAAA7iB,OAAA,0BAOA,OAJA,QAAA6iB,EAAA/2B,eAAA,MAAA5G,IACAA,EAAA,gBAAAA,KAAA+S,KAAAE,UAAAjT,IAGAA,QAGIg7C,IAAA,SAAA3rB,EAAAxpC,EAAAC,GACJ,YAOA,SAAAmmD,KACA,MAAAW,GACA,GAAAz4C,QAAA8mD,eACA,GAAA9mD,QAAA+mD,eARA,GAAAtO,GACA,mBAAAz4C,SACAA,OAAA8mD,gBACA,uBAAA9mD,QAAA8mD,cAQAp1D,GAAAC,SACA8nD,YAAAhB,EACAX,yBAGIkP,IAAA,SAAA9rB,EAAAxpC,EAAAC,GACJ,YAeA,IAAA84C,GAAAvP,EAAA,yBAEAxpC,GAAAC,SACAs1D,4BACAz2C,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,6BACAvkB,QAAA,gDAEAqwC,8BACA9rB,KAAA,+BACAvkB,QACA,oEACArG,KAAAi6B,EAAAuD,MAAAqS,SAEA8G,oCACA/rB,KAAA,qCACA5qB,KAAAi6B,EAAAuD,MAAAC,aAIGT,yBAAA,KAA4B4Z,IAAA,SAAAlsB,EAAAxpC,EAAAC,GAC/B,YA+CA,SAAA01D,GAAA7zC,GAQA,GAPAzT,KAAAuqC,eAAA92B,EAAA+2B,cACAxqC,KAAAqqC,QAAA52B,EAAA62B,OACAtqC,KAAAunD,mBAAA9zC,EAAA22B,kBAEApqC,KAAAwnD,kBAAA/zC,EAAAg0C,kBAAA,EACAznD,KAAA0nD,kBAAAj0C,EAAAk0C,iBAEA3nD,KAAA4nD,oCACA,SAAAld,IACArP,KAAAuP,EAAAwc,mCAAA/rB,KACAvkB,QACA,yDACA9W,KAAAwnD,kBACA,iGACA/2C,KAAAm6B,EAAAwc,mCAAA32C,OA+SA,QAAAo3C,GACAC,EACAC,GAEArtD,OAAAusB,KAAA8gC,GAAA1qD,QAAA,SAAA2qD,GACA,gBAAAD,GAAAC,GACAF,EAAAE,GAAA/gB,KAEA8gB,EAAAC,GACAF,EAAAE,IAGAF,EAAAE,GACAF,EAAAE,IACAD,EAAAC,KAzXA,GAAArd,GAAAxP,EAAA,oBACA8L,EAAA9L,EAAA,iBAAA8L,OACA6D,EAAA3P,EAAA,mCACA8sB,EAAA9sB,EAAA,eACA+sB,EAAA/sB,EAAA,4CACAuP,EAAAvP,EAAA,0BACAyP,EAAAzP,EAAA,YACA0P,EAAA1P,EAAA,kBACAe,EAAAf,EAAA,kBACA4N,EAAA5N,EAAA,2BAEAgtB,GACA7sB,EAAA,8BACAK,EAAA,8BAoDA2rB,GAAAhrD,UAAAyuC,eAAA,WACA,MAAA/qC,MAAAqqC,QACAnO,EAAAhV,UAGAlnB,KAAAuqC,eAAAnE,KACA,SAAAkE,GACAtqC,KAAAqqC,QAAAC,GACK5zB,KAAA1W,QAILsnD,EAAAhrD,UAAAsrD,kCAAA,WAGA,QAAA5nD,KAAAwnD,oBAAAW,KAGAb,EAAAhrD,UAAA8rD,kBAAA,WASA,MARApoD,MAAAqoD,iBACAroD,KAAAqoD,eAAAH,EACAloD,KAAAqqC,QAAAY,mBACAjrC,KAAAwnD,kBACAxnD,KAAA0nD,oBAIA1nD,KAAAqoD,gBAGAf,EAAAhrD,UAAAgsD,4BAAA,SACAC,GAEA,GAAAC,GAAAxoD,KAAAooD,oBACAK,EACAF,EAAAG,kBACAH,EAAAG,iBAAAC,oBACAC,EACAJ,EAAAE,iBAAAC,oBACAA,EAAAF,GAAAG,CAQA,OANAL,GAAAthB,KAAgCuhB,EAAAD,GAIhCA,EAAAG,iBAAAC,sBAEAJ,GAGAjB,EAAAhrD,UAAAusD,4BAAA,SACAN,GAEA,GAAAC,GAAAxoD,KAAAooD,mBAqBA,OAnBAG,GAAAO,uBACAP,EAAAO,sBAAAzrD,QAAA,SAAA0rD,GACA,GAAAhB,GAAAE,EACAO,EAAAM,sBACA,OACAC,EAAAt4C,KAGAs3C,IACAF,EACAkB,EACAhB,KAMAQ,EAAAthB,KAAgCuhB,EAAAD,IA0EhCjB,EAAAhrD,UAAA0sD,yBAAA,SAAAC,GACA,MAAAjpD,MAAAunD,mBAIAvnD,KAAA+qC,iBAAA3E,KACA,WACA,MAAApmC,MAAAkpD,sCAAAD,IACKvyC,KAAA1W,OANLA,KAAAkpD,sCAAAD,IAUA3B,EAAAhrD,UAAA4sD,sCAAA,SACAD,GAEA,GAAAV,GAAAthB,KAAoCgiB,GACpCv4B,EAAA1wB,KAAAwnD,kBACA2B,EACAhB,EAAAz3B,EAOA,OALAia,GAAAgC,UACA3sC,KAAAuqC,eACA,mBAAA7Z,EAAA,6BAGA1wB,KAAAmpD,GAAAZ,IAmCAjB,EAAAhrD,UAAA8sD,cAAA,SAAA1c,GACA,GAAAtjB,GAAAppB,IAEA,OAAAk8B,GAAAhV,UACAkf,KAAA,WACA,GAAAijB,GACAC,EACA,IAAA5c,EAAA6c,WACA7c,EAAA8c,kBAAAC,iBAAA5tC,MACA6wB,EAAAgd,mBAAA7tC,MACAooC,EAAAplC,KAAAC,MAAAwqC,GACA3qC,EAAAslC,EAAAtlC,KAEA,OAAAA,GACAud,EAAAgB,OAAAve,IAGAgsB,EAAAgC,UACAvjB,EAAAmhB,eACA,0CAGA0Z,EAAA0F,gBACAN,EAAApF,EAAA0F,eAAA,GACAhf,EAAAgC,UACAvjB,EAAAmhB,eACA,iDAGArO,EAAAhV,SACAmtB,MAAAgV,EAAAhV,MACA5jC,KAAA44C,EAAA54C,KACA8uC,YAAA8J,EAAA9J,gBAGA8J,EAAApF,EAAA2F,gBAAA,GACAjf,EAAAgC,UACAvjB,EAAAmhB,eACA,yDAGArO,EAAAhV,SACAmtB,MAAAgV,EAAAhV,MACA5jC,KAAA44C,EAAA54C,KACA8uC,YAAA8J,EAAA9J,YACAplB,SACAylB,SAAAyJ,EAAAlvB,QAAAylB,SACAG,SAAAsJ,EAAAlvB,QAAA4lB,SACAb,QAAAmK,EAAAlvB,QAAA+kB,QACA2K,mBAAAR,EAAAlvB,QAAA0vB,mBACAlK,IAAA0J,EAAAlvB,QAAAwlB,KAEAP,QAAAiK,EAAAjK,cAGAzZ,MAAA,SAAAhnB,GAMA,MALAgsB,GAAAgC,UACAvjB,EAAAmhB,eACA,uCAGArO,EAAAgB,OACA,GAAAwN,IACArP,KAAAuP,EAAAuc,6BAAA9rB,KACAvkB,QAAA8zB,EAAAuc,6BAAArwC,QACArG,KAAAm6B,EAAAuc,6BAAA12C,KACA0pB,SACA0S,cAAAluB,SAmBA2oC,EAAAhrD,UAAAixC,SAAA,WAGA,MAFAzC,GAAA9qC,KAAA6qC,EAAAyc,EAAAhrD,YAEA4/B,EAAAhV,WAsBAv1B,EAAAC,QAAAm3C,EAAAK,cAAAke,KAEG9Z,mBAAA,GAAAkH,gBAAA,GAAAjH,yBAAA,GAAAC,kCAAA,IAAAoc,cAAA,IAAAC,2CAAA,IAAApc,iBAAA,IAAAC,iBAAA,IAAAC,WAAA,GAAAC,0BAAA,KAAiQkc,IAAA,SAAA7uB,EAAAxpC,EAAAC,GACpQ,YAgIA,SAAAknB,GAAArF,GAGA,MAAA46B,GACAC,QACAv7B,KAJA,aAKAu3B,OAAA72B,EAAA62B,OACAiE,cAAA96B,EAAA86B,gBAEAnI,KAAA,WACA,GAAAoE,GAAA91B,CA0BA,OAxBA81B,GAAAiE,EACA31B,QACAy1B,cAAA96B,EAAA86B,cACAjE,OAAA72B,EAAA62B,OACAoE,MAAAj7B,EAAAi7B,MACAC,UAAAC,EAAA91B,OAAArF,EAAA86B,eACAx7B,KAjBA,eAmBAqzB,KAAA,SAAAkE,GACA,GAAAmF,GAAAnF,EAAAW,kBAGA,OADAx3B,GAAA62B,SACAmF,EAAAvE,qBAAAgR,WAMA5R,EALApO,EAAAgB,OACA,GAAAwN,GAAAE,EAAAsc,+BAOAzzC,EAAA+2B,gBACA91B,EAAA,GAAA4yC,GAAA7zC,GAEAA,EAAA22B,kBAQA11B,EAPA81B,EAAApE,KAAA,SAAAkE,GAGA,MAFA51B,GAAA21B,QAAAC,EAEA51B,MAlKA,GAAA4yC,GAAAnsB,EAAA,oBACAuP,EAAAvP,EAAA,0BACAe,EAAAf,EAAA,kBACAyT,EAAAzT,EAAA,4BACAsT,EAAAtT,EAAA,iCACAkT,EAAAlT,EAAA,uCACA4N,EAAA5N,EAAA,2BAEAyP,EAAAzP,EAAA,WAkKAxpC,GAAAC,SACAknB,OAAAiwB,EAAAjwB,GAKA+1B,QAzKA,YA4KGC,sCAAA,GAAArB,yBAAA,GAAAsB,2BAAA,IAAAC,gCAAA,IAAApB,iBAAA,IAAAC,WAAA,GAAAoc,mBAAA,GAAAnc,0BAAA,KAA8Noc,IAAA,SAAA/uB,EAAAxpC,EAAAC,GACjO,YAMA,SAAAu4D,GAAAC,EAAArvD,GACA,GAAA6Z,EAsBA,OApBAy1C,GAAA7uD,eAAA4uD,GAOG,MAAArvD,GAAAuvD,EAAAF,EAAArvD,KACH6Z,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA2f,0CAAA95C,KACA4qB,KAAAuP,EAAA2f,0CAAAlvB,KACAvkB,QACA,UACA/b,EACA,yBACAqvD,EACA,kBAfAx1C,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA4f,sCAAA/5C,KACA4qB,KAAAuP,EAAA4f,sCAAAnvB,KACAvkB,QACA,QAAAszC,EAAA,mDAeAx1C,EAGA,QAAA01C,GAAAF,EAAArvD,GACA,iBAAAsvD,EAAAD,GACA,gBAAArvD,IAAA,gBAAAA,GACG,YAAAsvD,EAAAD,KACH,SAAAzmC,OAAA5oB,IAAA,UAAA4oB,OAAA5oB,IAlCA,GAAA2vC,GAAAvP,EAAA,6BACAyP,EAAAzP,EAAA,oBACAkvB,EAAAlvB,EAAA,uBAAAkvB,iBAsCA14D,GAAAC,QAAAu4D,IAEGM,4BAAA,GAAAC,sBAAA,GAAAC,mBAAA,KAA8EC,IAAA,SAAAzvB,EAAAxpC,EAAAC,GACjF,YAEA,IAAAgkD,GAAAza,EAAA,uBACA0vB,EAAA1vB,EAAA,oBAEAxpC,GAAAC,QAAA,SAAA+8C,EAAAmc,EAAA7Y,GACA,MACAtD,GACA,QACAiH,EAAA/G,QACA,4BACAgc,EAAA5Y,GACA,SACA6Y,KAIGC,oBAAA,IAAAL,sBAAA,KAAiDM,IAAA,SAAA7vB,EAAAxpC,EAAAC,GACpD,YAmBA,SAAAq5D,GAAA/rD,GACA,MAAA4jD,GAAAoI,sBAOAC,EAAArtD,QAAAoB,EAAA/B,UAAA,GACAiuD,EAAAttD,QAAAoB,EAAAuR,MAAA,EALA,WAAAvR,EAAAuR,KASA,QAAA46C,GAAAC,EAAAC,GACA,OAAAD,GACA,IAAAE,GAAAC,KACA,OACAC,iBAAA,SAAAjmD,GACA,MAAAA,GAAA,GAEAkmD,aAAA,EAEA,KAAAH,GAAAI,QACA,OACAF,iBAAA,SAAAjmD,GACA,MAAAA,GAAA8lD,EAAA,GAEAI,YAAA,GAKA,SAGA,QAAAE,GAAAC,GACA,GAAAC,GAAA7sD,CAEA,KACA6sD,EAAA,EACAA,EAAAD,EAAAztD,OACA0tD,IAIA,GAFA7sD,EAAA4sD,EAAAC,GAEAd,EAAA/rD,GACA,MAAAA,EAIA,aAnEA,GAAAssD,GAAArwB,EAAA,uBAAA6wB,qBACAlJ,EAAA3nB,EAAA,+BACA8wB,EAAA9wB,EAAA,6BACA+wB,EAAA/wB,EAAA,8BACAgwB,GAAA,6BAGAC,GACA,SACA,SACA,QACA,SACA,WACA,QACA,OAwDAz5D,GAAAC,SACAu6D,yBAAA,SAAAC,EAAAC,GACA,GAAAC,GAAAjwD,MAAAC,UAAAqB,MAAAnB,KAAA4vD,EAAAE,WACAT,EAAAS,GACAT,EAAAS,EAAAC,YAIAlvD,QAAA,SAAAa,GACAA,GAIA+tD,EAAAO,kBAAAtuD,EAAA4V,aAAA,QACAu4C,EAAAnuD,EAAA4V,aAAA,UAKA24C,yBAAA,SAAAC,EAAAC,GACA,gBAAA1kD,GACA,GAAA2kD,GAAAC,EAAAT,EAAAU,EACAC,EAAA9xD,SAAA+xD,eACA,MAAA/kD,EAAAm5C,MAAA,IAAAn5C,EAAAqjD,UAAA,IAAAoB,EAGA,IAAAK,EAAA,CAMA,GAFAX,EAAAF,EAAAa,EAAA,WAEA9xD,SAAAgyD,MAAA5uD,OAAA,IAAA+tD,EAGA,WAFAO,GAAAN,yBAKAD,MAAAzuD,MAAAnB,KAAA4vD,EAAAE,UACAM,EAAAR,EAAAtuD,QAAAivD,GACAD,EAAAzB,EAAApjD,EAAAqjD,UAAAc,EAAA/tD,OAEA,IAEA,GADAuuD,GAAAE,EAAAnB,YACAmB,EAAApB,iBAAAkB,GACA,MAEAC,GAAAT,EAAAQ,UACO3B,EAAA4B,GAEPZ,GAAAO,kBAAAK,EAAA/4C,aAAA,OACA64C,EAAAO,oBACAL,EAAA/4C,aAAA,wBAGA+4C,EAAAM,cAMGC,8BAAA,GAAA1C,sBAAA,GAAA2C,6BAAA,GAAAC,4BAAA,KAAyHC,IAAA,SAAApyB,EAAAxpC,EAAAC,GAC5H,YAEA,IAAA47D,GAAAryB,EAAA,uBAAAqyB,aAEA77D,GAAAC,QAAA,SAAAykB,GACA,GAEAo3C,GAFAvuD,EAAAjE,SAAAiC,cAAA,SACAiU,IA0BA,OAvBA,MAAAkF,EAAA,KACAA,IAAAq3C,UAAA,IAGAxuD,EAAAykC,UAAAttB,EACAnX,EAAAtC,MAAAC,QAAA,kBACAqC,EAAAtC,MAAA+wD,SAAA,mBACAzuD,EAAAtC,MAAA4P,KAAA,sBACAtN,EAAAtC,MAAA6P,IAAA,sBACAxR,SAAA6Q,KAAAqxB,YAAAj+B,GAEAuuD,EAAAxtD,OAAA2tD,iBAAA1uD,GAEAsuD,EAAAnwD,QAAA,SAAAT,GACA,GAAA7B,GAAA0yD,EAAA7wD,EAEA7B,KACAoW,EAAAvU,GAAA7B,KAIAE,SAAA6Q,KAAA9O,YAAAkC,GAEAiS,KAGGu5C,sBAAA,KAAyBmD,IAAA,SAAA1yB,EAAAxpC,EAAAC,GAC5B,YAuTA,SAAAk8D,GAAA1mC,GACA,gBAAA2mC,GACA,GAAA3M,GACA4M,EAAAD,EAAAC,gBACAC,EAAAD,EAAAC,UACArxB,EAAAxV,EAAA6mC,GAAAC,gBAEAxzD,QAAAusB,KAAA+mC,EAAA5mC,QAAA/pB,QAAA,SAAA4b,GACA+0C,EAAA5mC,OAAAnO,GAAA2jB,UAAAxV,EAAAnO,GAAAi1C,mBAGA9M,EAAA4M,EAAA5mC,OAAA6mC,GAEAE,EAAAjqB,OACAtH,EACAgZ,EAAAwY,gBAAAC,QACAjN,EAAAkN,WAEAH,EAAAjqB,OAAAtH,EAAAgZ,EAAAwY,gBAAAG,MAAAnN,EAAAoN,SACAL,EAAAjqB,OACAtH,EACAgZ,EAAAwY,gBAAAK,SACArN,EAAAsN,oBAIA1uD,KAAA2uD,QACAC,MAAAZ,EAAAY,MACAxnC,OAAA4mC,EAAA5mC,QAGApnB,KAAA0kC,MAAAqpB,EAAAt9C,KAAAu9C,IAIA,QAAAa,GAAAC,GACA,GAAAC,GAAAD,EAAAlmD,wBACAomD,EAAAjsD,KAAA4M,MAAAo/C,EAAA7lD,OAAA,GACA+lD,EAAAlsD,KAAA4M,MAAAo/C,EAAA/lD,MAAA,EAEA,OACA+lD,GAAAtiD,KACAxM,OAAAivD,YAAAF,GACA/zD,SAAA4Q,gBAAAV,aAAA6jD,IACAD,EAAAI,MAAAF,GACAF,EAAAK,OAAAJ,GACAD,EAAAviD,MACAvM,OAAAovD,WAAAJ,GACAh0D,SAAA4Q,gBAAA+B,YAAAqhD,GAUA,QAAAK,GAAA77C,GACA,GAAA87C,GAAAC,EAAA7gB,EAAAsD,EAAAwd,EACArmC,EAAAppB,KACAonB,KACAsoC,KACAC,KACA7E,EAAA5iB,GAuBA,IArBAloC,KAAA4vD,8BAAA3oB,KAAgDxzB,GAEhDA,EAAA62B,QACAklB,EAAA/7C,EAAA62B,OAAAW,mBACA0D,EAAA6gB,EAAAtkB,qBAAAyD,UACAsD,EAAAud,EAAAvd,UAEAtD,EAAAC,EAAA91B,OAAArF,EAAA86B,eACA0D,EAAA7+B,QAAAK,EAAAw+B,UAGAjyC,KAAA6vD,eAAAphB,EAAA31B,QACAwxB,OAAA72B,EAAA62B,OACAiE,cAAA96B,EAAA86B,cACAG,MAAAuD,EACAtD,YACA57B,KAAA,kBAGA08C,EAAAK,EAAAnhB,EAAAmc,EAAA7Y,IAEAx+B,EAAA2T,QAAA,IAAA1sB,OAAAusB,KAAAxT,EAAA2T,QAAA/oB,OACA,SAAAqsC,IACAj6B,KAAAqmC,EAAAC,8BAAAtmC,KACA4qB,KAAAyb,EAAAC,8BAAA1b,KACAvkB,QAAA,gEAIAhW,GAAAtE,KAAAwD,MAEAA,KAAA+vD,kBACA/vD,KAAAgwD,YAAA,GAAAC,GACAjwD,KAAAkwD,QAAA9oC,EACApnB,KAAA2uD,QACAvnC,UACAwnC,MAAAuB,EAAA,KAGAnwD,KAAAowD,KAAA,GAAAC,IACAC,QAAAxF,EACAyF,aAAA3gB,EACA4gB,kBAGAxwD,KAAAgwD,YAAAS,4BAAA,WACArnC,EAAAgnC,KAAA7iB,aAIA95B,EAAA62B,OAMAK,EAAAgC,UACA3sC,KAAA6vD,eACA,oCAPAllB,EAAAgC,UACA3sC,KAAA6vD,eACA,oDASAn1D,OAAAusB,KAAAxT,EAAA2T,QAAA/pB,QACA,SAAA4b,GACA,GAAAmoC,GAAAsP,EAAAC,EAAAC,EAAAC,CAEA,KAAAjb,EAAAkb,cAAAt1D,eAAAyd,GACA,SAAAyxB,IACAj6B,KAAAm6B,EAAAmmB,gCAAAtgD,KACA4qB,KAAAuP,EAAAmmB,gCAAA11B,KACAvkB,QAAA,IAAAmC,EAAA,2BAaA,IATAmoC,EAAA3tC,EAAA2T,OAAAnO,GAGAy3C,EAAAtP,EAAAxkB,WAAAwkB,EAAAxwC,SAEA,gBAAA8/C,KACAA,EAAAz1D,SAAA8Y,cAAA28C,KAGAA,GAAA,IAAAA,EAAAM,SACA,SAAAtmB,IACAj6B,KAAAm6B,EAAAqmB,qCAAAxgD,KACA4qB,KAAAuP,EAAAqmB,qCAAA51B,KACAvkB,QAAA8zB,EAAAqmB,qCAAAn6C,QACAqjB,SACA+2B,cAAA9P,EAAAxwC,SACAugD,eAAA/P,EAAAxkB,UACAw0B,SAAAn4C,IAGO,IACPy3C,EAAA38C,cAAA,8BAEA,SAAA22B,IACAj6B,KAAAm6B,EAAAymB,qCAAA5gD,KACA4qB,KAAAuP,EAAAymB,qCAAAh2B,KACAvkB,QAAA8zB,EAAAymB,qCAAAv6C,QACAqjB,SACA+2B,cAAA9P,EAAAxwC,SACAugD,eAAA/P,EAAAxkB,UACAw0B,SAAAn4C,IAcA,IATA03C,EAAAD,EAEAY,EAAAC,gBAAAZ,KACAA,EAAAW,EAAAE,gBACAb,EACA,iBAIAvP,EAAAqQ,WAAA,gBAAArQ,GAAAqQ,UACA,SAAA/mB,IACAj6B,KAAAm6B,EAAA8mB,qCAAAjhD,KACA4qB,KAAAuP,EAAA8mB,qCAAAr2B,KACAvkB,QAAA,4CACAqjB,SACAi3B,SAAAn4C,IAKA,IAAAmoC,EAAAuQ,WAAA,gBAAAvQ,GAAAuQ,UACA,SAAAjnB,IACAj6B,KAAAm6B,EAAA8mB,qCAAAjhD,KACA4qB,KAAAuP,EAAA8mB,qCAAAr2B,KACAvkB,QAAA,4CACAqjB,SACAi3B,SAAAn4C,IAKA23C,GAAAgB,GACAnhD,KAAAwI,EACAlG,KAAA,0BAAAkG,EACArc,MAAAg5C,EAAAic,mBACAvhC,MACA8wB,EAAA0Q,aACA,8BAAAlc,EAAAkb,cAAA73C,GAAAkG,QAEAnf,KAAAowD,KAAA2B,eAAAnB,GAEA5wD,KAAA+vD,eAAA/4C,KAAApN,MACA5J,KAAA+vD,eACAiC,EAAAlH,EAAA8F,EAAAD,EAAA,WACAvnC,EAAA+jC,MAAAl0C,MAIAjZ,KAAAiyD,iBAAAh5C,EAAAy3C,GACAtpC,EAAAnO,IACAi5C,aAAAtB,EACA1C,iBAAAwC,GAEAG,EAAA,GAAA30B,GAAA,SAAAhV,GACAwoC,EAAAz2C,GAAAiO,IAEAyoC,EAAA34C,KAAA65C,GAEA7wD,KAAA2uD,OAAAvnC,OAAAnO,IACAk5C,SAAA,EACA3D,SAAA,EACAE,oBAAA,EACAJ,WAAA,EACA1xB,UAAA8zB,GAGA1mD,WAAA,WASA84C,EAAAsP,QAAAtP,EAAA3kB,UACAyyB,EAAA/zB,IAAA,cACA7yB,WAAA,WACA4mD,EAAA/zB,IAAA4yB,GACW,IAEXmB,EAAA/zB,IAAA4yB,GAEO,IACF/4C,KAAA1W,OAGLA,KAAA4vD,8BAAAz+C,QACAzW,OAAAusB,KAAAjnB,KAAA4vD,8BAAAz+C,QAAA9T,QAAA,SACAuT,GAEA,GAAA+yB,GAAAva,EAAAwmC,8BAAAz+C,OAAAP,EAEA,iBAAA+yB,KACAva,EAAAwmC,8BAAAz+C,OAAAP,GACAyhD,EAAA1uB,MAKA3jC,KAAAowD,KAAAx/B,GAAA0hC,EAAAC,wBAAA,SAAAtqD,GACAuqD,EAAAvqD,KAAA4K,MAGA7S,KAAAowD,KAAAx/B,GACA0hC,EAAAG,qBACAC,EAAAjG,yBAAA3B,GACAuB,wBAAA,SAAAntD,GACAkqB,EAAAgnC,KAAA7kD,KAAA+mD,EAAAC,yBACA1/C,GAAA3T,KAGAguD,oBAAA,SAAAyF,GACAvpC,EAAA+jC,MAAAwF,OAKA3yD,KAAAowD,KAAAx/B,GAAA0hC,EAAAM,iBAAA,SAAAC,GACAzpC,EAAAymC,eAAAzpB,KAAA,SAAAkE,GACAuoB,EAAAvoB,OAIAtqC,KAAAowD,KAAAx/B,GAAA0hC,EAAAQ,0BAAA,WACAnoB,EAAAgC,UAAAvjB,EAAAymC,eAAA,iCAGA7vD,KAAAowD,KAAAx/B,GAAA0hC,EAAAS,cAAA,SAAApT,GACAv2B,EAAAsb,MAAA,gBACAib,UAIA4P,EAAAvlD,WAAA,WACA2gC,EAAAgC,UACAvjB,EAAAymC,eACA,uCAEAzmC,EAAAsb,MAAA,YACGsuB,GAEH92B,EAAA8J,IAAA2pB,GAAAvpB,KAAA,SAAA3qB,GACA,GAAAo3C,GAAAp3C,EAAA,EAEAxR,cAAAslD,GACAsD,EACAI,EAAA7pC,EAAAwmC,gCAGAxmC,EAAA8pC,0BAEA9pC,EAAAsb,MAAA,WAGA1kC,KAAAowD,KAAAx/B,GAAA0hC,EAAAa,YAAA,SAAAlrD,EAAA4qD,GACAnD,EAAAznD,EAAAm5C,OAAAyR,KAGA7yD,KAAAowD,KAAAx/B,GAAA0hC,EAAAc,YAAAtF,EAAA1mC,GAAA1Q,KAAA1W,OAEAA,KAAAgwD,YAAAS,4BAAA,WACA,GAAAv8C,GAAA46C,EAAAuE,CAEA,KAAAn/C,EAAA,EAAeA,EAAAkV,EAAA2mC,eAAA1xD,OAAgC6V,IAC/C46C,EAAA1lC,EAAA2mC,eAAA77C,GACAm/C,EAAAvE,EAAA/xD,WAEAs2D,EAAAr2D,YAAA8xD,GAEAX,EAAAhtC,OACAkyC,EACAzd,EAAAwY,gBAAAC,QACAzY,EAAAwY,gBAAAK,QACA7Y,EAAAwY,gBAAAG,SAKAvuD,KAAAgwD,YAAAS,4BAAA,WACA+B,MAGAxyD,KAAAgwD,YAAAS,4BAAA,WACA,GAAA6C,GAAAzoB,EAAAykB,EAAAhzD,WAAAkvB,OACAqf,EAAA/pC,EAAAxE,WAGAwuC,GAAA1hB,EAAAkqC,KAu0BA,QAAAL,GAAAjsB,GACA,GAAAusB,GAAAtsB,KAAiCD,EAQjC,OANAusB,GAAAnsC,OAAA6f,KAAoCssB,EAAAnsC,QACpC1sB,OAAAusB,KAAAssC,EAAAnsC,QAAA/pB,QAAA,SAAA+jD,GACAmS,EAAAnsC,OAAAg6B,GAAAna,KAA6CssB,EAAAnsC,OAAAg6B,UAC7CmS,GAAAnsC,OAAAg6B,GAAAxkB,YAGA22B,EAh/CA,GAAAtsB,GAAA9L,EAAA,oBAAA8L,OACA2H,EAAAzT,EAAA,+BACAyU,EAAAzU,EAAA,gCACA80B,EAAA90B,EAAA,wBACAgzB,EAAAhzB,EAAA,yBACAy2B,EAAAz2B,EAAA,sBACAk1B,EAAAl1B,EAAA,YACAsT,EAAAtT,EAAA,oCACAuP,EAAAvP,EAAA,6BACA20B,EAAA30B,EAAA,iBACAk3B,EAAAl3B,EAAA,2BACAya,EAAAza,EAAA,uBACAyP,EAAAzP,EAAA,oBACA63B,EACA73B,EAAA,uBAAA63B,uBACA9qB,EAAA/M,EAAA,mBACA+wB,EAAA/wB,EAAA,8BACA2nB,EAAA3nB,EAAA,+BACAm3B,EAAA1c,EAAA0c,OACAxxD,EAAAq6B,EAAA,4BACA62B,EAAA72B,EAAA,kBACAwP,EAAAxP,EAAA,uBACA21B,EAAAlb,EAAAkb,cACAjmB,EAAA1P,EAAA,qBACAm2B,EAAAn2B,EAAA,oBACAq4B,EAAAr4B,EAAA,4BACA2P,EAAA3P,EAAA,sCACA2b,EAAA3b,EAAA,oBACAg1B,EAAAh1B,EAAA,4BACAgvB,EAAAhvB,EAAA,gCACAe,EAAAf,EAAA,qBACA4N,EAAA5N,EAAA,2BACAu3B,EAAAv3B,EAAA,kBACAq3B,EAAAr3B,EAAA,6BAAApmB,OAmoBAjU,GAAA8jC,YAAA0qB,GAEAA,EAAAhzD,UAAA21D,iBAAA,SAAAxhD,EAAAmsB,GASA,QAAA62B,KACArqC,EAAA+jC,MAAA18C,GATA,GAAAijD,GAAAp1D,EACA8qB,EAAAppB,KACA2zD,EAAAH,EAAA52B,EAEA,UAAAA,EAAA/pB,GAAA,CA2BA,IAlBA6gD,EAAAr3D,MAAAC,UAAAqB,MAAAnB,KACAvB,SAAAyC,iBAAA,cAAAk/B,EAAA/pB,GAAA,OAEA8gD,IAAA14D,WAEAy4D,IAAAloC,OACAnvB,MAAAC,UAAAqB,MAAAnB,KACAm3D,EAAAj2D,iBAAA,cAAAk/B,EAAA/pB,GAAA,SAKA6gD,IAAAloC,OAAA0gC,EAAAtvB,EAAA,UAEA82B,IAAA91D,OAAA,SAAAuhB,EAAA1Z,EAAAmuD,GACA,MAAAA,GAAA91D,QAAAqhB,KAAA1Z,IAGAnH,EAAA,EAAaA,EAAAo1D,EAAAr1D,OAAmBC,IAChCo1D,EAAAp1D,GAAAnD,iBAAA,QAAAs4D,GAAA,EAGAzzD,MAAAgwD,YAAAS,4BAAA,WACA,IAAAnyD,EAAA,EAAeA,EAAAo1D,EAAAr1D,OAAmBC,IAClCo1D,EAAAp1D,GAAAtC,oBAAA,QAAAy3D,GAAA,OAKAnE,EAAAhzD,UAAAu3D,sBAAA,WACA,GAAAzqC,GAAAppB,IAEA,OAAAtF,QAAAusB,KAAAjnB,KAAAkwD,SAAAtS,OAAA,SAAAkW,EAAA1S,GACA,MAAA0S,IAAA1qC,EAAA8mC,QAAA9O,GAAA8M,kBACG,OAGHoB,EAAAhzD,UAAA42D,wBAAA,WACA,GAAAa,GAAA3H,CAEAnxD,UAAAgyD,MAAA5uD,OAAA,EACA2B,KAAAowD,KAAA7kD,KAAA+mD,EAAAC,0BAEAwB,EAAA/zD,KAAA6zD,wBACAzH,EAAAF,EAAA6H,EAAA,WAEA3H,EACAsG,EAAAvG,yBACAC,EACA,SAAAv5C,GACA7S,KAAAowD,KAAA7kD,KAAA+mD,EAAAC,yBACA1/C,QAES6D,KAAA1W,OAGTA,KAAAowD,KAAA7kD,KAAA+mD,EAAAC,2BAKAjD,EAAAhzD,UAAA03D,qCAAA,SAAAp/C,GAGAA,EAAAulB,SACAvlB,EAAAulB,QAAA85B,kBACAr/C,EAAAulB,QAAA85B,iBAAA51D,OAAA,IAKAuW,EAAAulB,QAAA+5B,iBACAt/C,EAAAulB,QAAA85B,iBAAA52D,QACA,SAAA+jD,GACAxsC,EAAAulB,QAAA+5B,cAAA9S,GAAAphD,KAAAkwD,QAAA9O,GAAA8M,kBACKx3C,KAAA1W,SAcLsvD,EAAAhzD,UAAA63D,cAAA,WACA,MAAAn0D,MAAA6vD,eAAAzpB,KAAA,SAAAkE,GACA,MAAAA,GAAAW,mBAAAC,qBAAA0Q,cAcA0T,EAAAhzD,UAAA83D,sBAAA,WACA,MAAAp0D,MAAA6vD,eAAAzpB,KAAA,SAAAkE,GAgBA,MAfAA,GACAW,mBACAC,qBAAAmI,YAAAyI,mBAAAv/C,IAAA,SACAqjD,GAEA,qBAAAA,EAIA,aAGAA,OAqBA0P,EAAAhzD,UAAAixC,SAAA,WACA,GAAAnkB,GAAAppB,IAEA,WAAAk8B,GAAA,SAAAhV,EAAAgW,GACA9T,EAAA4mC,YAAAziB,SAAA,SAAA34B,GACA+1B,EAAAgC,UACAvjB,EAAAymC,eACA,2CAGAj7C,EACAsoB,EAAAtoB,GAEAsS,SAkKAooC,EAAAhzD,UAAA0wC,SAAA,SAAAv5B,GACA,GAAA2V,GAAAppB,IAMA,OAJAyT,KACAA,MAGA,GAAAyoB,GAAA,SAAAhV,EAAAgW,GACA9T,EAAAgnC,KAAA7kD,KAAA+mD,EAAA+B,qBAAA5gD,EAAA,SAAAi5B,GACA,GAAA93B,GAAA83B,EAAA,GACA2c,EAAA3c,EAAA,EAEA93B,IACAwU,EAAA4qC,qCAAAp/C,GACAsoB,EAAA,GAAAwN,GAAA91B,KAEAsS,EAAAmiC,QAqBAiG,EAAAhzD,UAAAg4D,SAAA,SAAAlT,EAAArd,GACA,GAAAnvB,EA2BA,OAzBAk8C,GAAAt1D,eAAA4lD,GASGphD,KAAAkwD,QAAA10D,eAAA4lD,GAUHphD,KAAAowD,KAAA7kD,KAAA+mD,EAAAiC,WACAnT,QACArd,cAXAnvB,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA4pB,gCAAA/jD,KACA4qB,KAAAuP,EAAA4pB,gCAAAn5B,KACAvkB,QACA,wBACAsqC,EACA,yEAfAxsC,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA6pB,4BAAAhkD,KACA4qB,KAAAuP,EAAA6pB,4BAAAp5B,KACAvkB,QACA,IACAsqC,EACA,mFAkBAxsC,EACAsnB,EAAAgB,OAAAtoB,GAGAsnB,EAAAhV,WAsBAooC,EAAAhzD,UAAAo4D,YAAA,SAAAtT,EAAArd,GACA,GAAAnvB,EA2BA,OAzBAk8C,GAAAt1D,eAAA4lD,GASGphD,KAAAkwD,QAAA10D,eAAA4lD,GAUHphD,KAAAowD,KAAA7kD,KAAA+mD,EAAAqC,cACAvT,QACArd,cAXAnvB,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA4pB,gCAAA/jD,KACA4qB,KAAAuP,EAAA4pB,gCAAAn5B,KACAvkB,QACA,6BACAsqC,EACA,yEAfAxsC,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA6pB,4BAAAhkD,KACA4qB,KAAAuP,EAAA6pB,4BAAAp5B,KACAvkB,QACA,IACAsqC,EACA,qFAkBAxsC,EACAsnB,EAAAgB,OAAAtoB,GAGAsnB,EAAAhV,WAsCAooC,EAAAhzD,UAAA0gC,aAAA,SAAAvpB,GACA,GAAAmhD,GAAAhgD,CAkCA,OAhCAk8C,GAAAt1D,eAAAiY,EAAA2tC,OASGphD,KAAAkwD,QAAA10D,eAAAiY,EAAA2tC,QAUHwT,EAAAzK,EAAA12C,EAAA22C,UAAA32C,EAAA1Y,OAEA65D,EACAhgD,EAAAggD,EAEA50D,KAAAowD,KAAA7kD,KAAA+mD,EAAAuC,eACAzT,MAAA3tC,EAAA2tC,MACAgJ,UAAA32C,EAAA22C,UACArvD,MAAA0Y,EAAA1Y,SAjBA6Z,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA4pB,gCAAA/jD,KACA4qB,KAAAuP,EAAA4pB,gCAAAn5B,KACAvkB,QACA,6BACArD,EAAA2tC,MACA,yEAfAxsC,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA6pB,4BAAAhkD,KACA4qB,KAAAuP,EAAA6pB,4BAAAp5B,KACAvkB,QACA,IACArD,EAAA2tC,MACA,yFAyBAxsC,EACAsnB,EAAAgB,OAAAtoB,GAGAsnB,EAAAhV,WA4BAooC,EAAAhzD,UAAAw4D,gBAAA,SAAArhD,GACA,GAEAshD,GAFA3rC,EAAAppB,KACAg1D,EAAAh1D,KAAA4vD,8BAAAxoC,MASA,OANA4tC,GAAAvV,gBAEGuV,EAAAvV,gBAAAwV,SACHF,EAAA,oDAFAA,EAAA,4DAKAA,EACA74B,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAA8mB,qCAAAjhD,KACA4qB,KAAAuP,EAAA8mB,qCAAAr2B,KACAvkB,QAAAi+C,KAKA,GAAA74B,GAAA,SAAAhV,GACAkC,EAAAgnC,KAAA7kD,KAAA+mD,EAAA4C,kBAAAzhD,EAAAyT,MA0BAooC,EAAAhzD,UAAA64D,WAAA,SAAA1hD,GACAzT,KAAAowD,KAAA7kD,KAAA+mD,EAAA8C,aACAhU,MAAA3tC,EAAA2tC,MACAtqC,QAAArD,EAAAqD,WAyBAw4C,EAAAhzD,UAAA0rC,gBAAA,SAAAv0B,GACA,GAAAmhD,GAAAhgD,CAiCA,OA/BAk8C,GAAAt1D,eAAAiY,EAAA2tC,OASGphD,KAAAkwD,QAAA10D,eAAAiY,EAAA2tC,QAUHwT,EAAAzK,EAAA12C,EAAA22C,WAEAwK,EACAhgD,EAAAggD,EAEA50D,KAAAowD,KAAA7kD,KAAA+mD,EAAA+C,kBACAjU,MAAA3tC,EAAA2tC,MACAgJ,UAAA32C,EAAA22C,aAhBAx1C,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA4pB,gCAAA/jD,KACA4qB,KAAAuP,EAAA4pB,gCAAAn5B,KACAvkB,QACA,gCACArD,EAAA2tC,MACA,yEAfAxsC,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA6pB,4BAAAhkD,KACA4qB,KAAAuP,EAAA6pB,4BAAAp5B,KACAvkB,QACA,IACArD,EAAA2tC,MACA,0FAwBAxsC,EACAsnB,EAAAgB,OAAAtoB,GAGAsnB,EAAAhV,WAaAooC,EAAAhzD,UAAAg5D,eAAA,SAAAlU,EAAAmU,GACA,MAAAv1D,MAAAg9B,cACAokB,QACAgJ,UAAA,cACArvD,MAAAw6D,KAsBAjG,EAAAhzD,UAAAk5D,MAAA,SAAApU,GACA,GAAAxsC,EA0BA,OAxBAk8C,GAAAt1D,eAAA4lD,GASGphD,KAAAkwD,QAAA10D,eAAA4lD,GAUHphD,KAAAowD,KAAA7kD,KAAA+mD,EAAAmD,aACArU,UAVAxsC,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA4pB,gCAAA/jD,KACA4qB,KAAAuP,EAAA4pB,gCAAAn5B,KACAvkB,QACA,iBACAsqC,EACA,yEAfAxsC,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA6pB,4BAAAhkD,KACA4qB,KAAAuP,EAAA6pB,4BAAAp5B,KACAvkB,QACA,IACAsqC,EACA,qFAiBAxsC,EACAsnB,EAAAgB,OAAAtoB,GAGAsnB,EAAAhV,WAwBAooC,EAAAhzD,UAAA6wD,MAAA,SAAA/L,GACA,GAAAxsC,GACA8gD,EAAA11D,KAAAkwD,QAAA9O,EAuCA,OArCA0P,GAAAt1D,eAAA4lD,GASGphD,KAAAkwD,QAAA10D,eAAA4lD,IAUHsU,EAAAxD,aAAA/E,QAEAntD,KAAAowD,KAAA7kD,KAAA+mD,EAAAqD,qBACAvU,UAGA0B,EAAArjB,SAIAz1B,WAAA,WACA6kD,EAAA6G,EAAAxH,mBACAwH,EAAAxH,iBAAA0H,kBAn6CA,IA84CAhhD,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA4pB,gCAAA/jD,KACA4qB,KAAAuP,EAAA4pB,gCAAAn5B,KACAvkB,QACA,iBACAsqC,EACA,yEAfAxsC,EAAA,GAAA81B,IACAj6B,KAAAm6B,EAAA6pB,4BAAAhkD,KACA4qB,KAAAuP,EAAA6pB,4BAAAp5B,KACAvkB,QACA,IACAsqC,EACA,qFA8BAxsC,EACAsnB,EAAAgB,OAAAtoB,GAGAsnB,EAAAhV,WAcAooC,EAAAhzD,UAAAu5D,SAAA,WACA,MAAA71D,MAAA2uD,QAoBAh9D,EAAAC,QAAAm3C,EAAAK,cAAAkmB,KAEGwG,sBAAA,GAAAnc,mBAAA,GAAA8Q,4BAAA,GAAAsL,sBAAA,IAAAC,qCAAA,IAAAC,8BAAA,IAAAC,mCAAA,IAAAC,uBAAA,IAAAC,mBAAA,IAAAC,2BAAA,IAAAC,+BAAA,IAAAC,oBAAA,IAAAC,oBAAA,IAAAC,mBAAA,IAAArJ,8BAAA,GAAA1C,sBAAA,GAAAC,mBAAA,GAAA0C,6BAAA,GAAAC,4BAAA,GAAAoJ,2BAAA,GAAAC,+BAAA,GAAAC,gBAAA,GAAAC,iBAAA,GAAAC,0BAAA,GAAAC,iBAAA,GAAAC,wBAAA,GAAAC,2BAAA,GAAAC,qBAAA,GAAAtgB,kBAAA,GAAA9I,0BAAA,GAAAqpB,SAAA,MAA80BC,IAAA,SAAAj8B,EAAAxpC,EAAAC,GACj1B,YAEA,IAAAq6D,GAAA9wB,EAAA,6BACAqwB,EAAArwB,EAAA,uBAAA6wB,oBAEAr6D,GAAAC,QAAA,SAAAihB,EAAA+9C,EAAAh0B,EAAAy6B,GACA,GAAAC,GAAA1G,EAAA98C,aAAA,QACAyjD,EAAAt8D,SAAAiC,cAAA,OACAs6D,EAAAv8D,SAAAw8D,yBACAC,EAAAzL,EAAA0L,SACA9kD,EACAykD,EACA9L,EAAAC,KACA4L,GAEAO,EAAA3L,EAAA0L,SACA9kD,EACAykD,EACA9L,EAAAI,QACAyL,EAYA,OATAE,GAAA36D,MAAA44D,MAAA,OAEAgC,EAAAr6B,YAAAu6B,GACAF,EAAAr6B,YAAAyzB,GACA4G,EAAAr6B,YAAAy6B,GACAJ,EAAAr6B,YAAAo6B,GAEA36B,EAAAO,YAAAq6B,IAEA5G,EAAA2G,MAGG7M,sBAAA,GAAA4C,4BAAA,KAAwDuK,IAAA,SAAA18B,EAAAxpC,EAAAC,GAC3D,YAsSA,SAAAknB,GAAArF,GACA,MAAA46B,GACAC,QACAv7B,KAAA,gBACAw7B,cAAA96B,EAAA86B,cACAjE,OAAA72B,EAAA62B,SAEAlE,KAAA,WACA,GAAAyN,GAAA,GAAAyb,GAAA77C,EAEA,WAAAyoB,GAAA,SAAAhV,EAAAgW,GACA2W,EAAAjjB,GAAA,mBACA1J,EAAA2sB,KAEAA,EAAAjjB,GAAA,qBACAsM,EAAA,GAAAwN,GAAAE,EAAAktB,8BAlTA,GAAAxI,GAAAn0B,EAAA,4BACAkT,EAAAlT,EAAA,uCACAyP,EAAAzP,EAAA,mBACA48B,EAAA58B,EAAA,8CACA4N,EAAA5N,EAAA,2BACAuP,EAAAvP,EAAA,0BACAe,EAAAf,EAAA,iBAkTAxpC,GAAAC,SAyCAmmE,0BACAj/C,OAAAiwB,EAAAjwB,GAKA+1B,QAhWA,YAmWGC,sCAAA,GAAArB,yBAAA,GAAAG,iBAAA,IAAAoqB,2BAAA,GAAAC,kBAAA,GAAAnqB,0BAAA,GAAAoqB,6CAAA,MAA2NC,IAAA,SAAAh9B,EAAAxpC,EAAAC,GAC9N,YAOA,SAAAs5D,KACA,MAAA3pB,MAAA62B,KAAA34B,IAGA,QAAA44B,KACA,MAAA52B,MAAAhC,IAVA,GAAA8B,GAAApG,EAAA,2CACAi9B,EAAAj9B,EAAA,6CACAsE,EAAAtE,EAAA,uCACAsG,EAAAtG,EAAA,yCAUAxpC,GAAAC,SACAwgE,KAAAj3B,EAAA,sCACAgD,OAAAhD,EAAA,wCACAiU,MAAAjU,EAAA,uCACAm9B,OAAAn9B,EAAA,wCACAoG,YACA62B,aACAC,cACAE,UAAAp9B,EAAA,2CACAsE,QACAa,aAAAnF,EAAA,+CACA+vB,yBAGGsN,0CAAA,GAAAC,yCAAA,GAAAC,4CAAA,GAAAC,uCAAA,GAAAC,0CAAA,GAAAvpB,qCAAA,GAAAwpB,uCAAA,GAAAvpB,sCAAA,GAAAwpB,sCAAA,GAAAC,8CAAA,KAAobC,IAAA,SAAA79B,EAAAxpC,EAAAC,GACvb,YAEA,IAAAqnE,GAAA99B,EAAA,uBACAyP,EAAAzP,EAAA,YAGAya,GACA/G,QAHA,SAIAqqB,qBAAA,GACAC,gBACAC,MAAA,QACAC,KAAA,OACAC,MAAA,QACAC,UAAA,WACAC,gBAAA,iBACAC,iBAAA,kBAEAC,mBACAtX,OAAA,GACAuX,WAAA,EACAzX,eAAA,EACAzC,gBAAA,EACAC,eAAA,EACA2C,IAAA,GAEA+L,iBACAC,QAAA,kCACAI,QAAA,kCACAF,MAAA,iCAEAvC,sBACAP,KAAA,SACAG,QAAA,SAEAiG,oBACA+H,OAAA,OACA5wD,MAAA,OACAE,OAAA,OACA2wD,MAAA,QAEAC,wBACAC,MAAAnvB,EAAAovB,6CAIAC,MAAArvB,EAAAsvB,oDAEA1M,eACA,kBACA,kBACA,0BACA,2BACA,kBACA,qBACA,qBACA,yBACA,8BACA,qBACA,aACA,aACA,QACA,YACA,OACA,cACA,YACA,mBACA,eACA,aACA,eACA,0BACA,oBACA,0BACA,yBACA,uBACA,cACA,iBACA,cACA,SACA,aACA,eACA,gBACA,cACA,UACA,UACA,UACA,cACA,gBACA,iBACA,eACA,aACA,cACA,cAEAsD,eACAtR,gBACAzsC,KAAA,kBACAoM,MAAA,mBAEAijC,QACArvC,KAAA,qBACAoM,MAAA,sBAEAkjC,KACAtvC,KAAA,MACAoM,MAAA,OAEA+iC,gBACAnvC,KAAA,aACAoM,MAAA,mBAEAsgC,iBACA1sC,KAAA,mBACAoM,MAAA,oBAEAugC,gBACA3sC,KAAA,kBACAoM,MAAA,mBAEAw6C,YACA5mD,KAAA,cACAoM,MAAA,gBAGAkrC,mBACA8P,eAAA,UACAC,gBAAA,UACAC,SAAA,UACA9E,YAAA,UAEA+E,sBACAC,kBAAA,UACAC,qBAAA,YACAC,WAAA,SACAC,mBAAA,eACAC,kBAAA,cACAtY,IAAA,SACAuY,cAAA,uBAIAhlB,GAAA0c,OAAA2G,GAEA,YACA,0BACA,gBACA,4BACA,cACA,gBACA,cACA,cACA,mBACA,mBACA,eACA,0BACA,gBACA,cACA,oBACA,uBACA,uBACA,sBACA,mBAEA,kBAGAtnE,EAAAC,QAAAgkD,IAEGilB,sBAAA,IAAAhtB,WAAA,KAAwCitB,IAAA,SAAA3/B,EAAAxpC,EAAAC,GAC3C,YAsCA,IAAA84C,GAAAvP,EAAA,4BAEAxpC,GAAAC,SACAkmE,uBACArnD,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,wBACAvkB,QAAA,sDAEAi6C,iCACAtgD,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,mCAEA41B,sCACAxgD,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,uCACAvkB,QAAA,iDAEAu6C,sCACA5gD,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,uCACAvkB,QAAA,gDAEA29C,6BACAhkD,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,+BAEAm5B,iCACA/jD,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,mCAEA0/B,0CACAtqD,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,2CACAvkB,QAAA,0CAEAkjD,8CACAvpD,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,+CACAvkB,QAAA,4DAEAojD,oDACAzpD,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,qDACAvkB,QAAA,gDAEAmkD,mCACAxqD,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,oCACAvkB,QAAA,+CAEAokD,4BACAzqD,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,6BACAvkB,QAAA,4DAEAqkD,8BACA1qD,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,+BACAvkB,QACA,+EAEA0zC,uCACA/5C,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,yCAEAkvB,2CACA95C,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,6CAEAq2B,sCACAjhD,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,2CAIGovB,4BAAA,KAA+B2Q,IAAA,SAAAjgC,EAAAxpC,EAAAC,GAClC,YAEA,SAAAs6D,GAAAhtD,EAAAqU,GAIA,IAHA,GAAA8/C,GAAAn0D,EAAAnC,WACAs+D,KAEA,MAAAhI,GACA,MAAAA,EAAAl2D,SAAAk2D,EAAAl2D,QAAAuV,gBAAAa,GACA8nD,EAAArkD,KAAAq8C,GAGAA,IAAAt2D,UAGA,OAAAs+D,GAGA1pE,EAAAC,QAAAs6D,OAEIoP,IAAA,SAAAngC,EAAAxpC,EAAAC,GACJ,YAEA,IAAAkxD,GAAA3nB,EAAA,uBACAgzB,EAAAhzB,EAAA,yBACAya,EAAAza,EAAA,eACA21B,EAAAp2D,OAAAusB,KAAA2uB,EAAAkb,eACAtF,EAAA5V,EAAAoW,qBAEAC,GACA0L,SAAA,SAAAjL,EAAAj8C,EAAA66C,EAAAiQ,GACA,GAAAr9D,GAAAjD,SAAAiC,cAAA,SACAs+D,GACA5B,OAAA,kBACA/8D,QAAA,mBACAqM,OAAA,iBACAsD,KAAA,kBACAivD,QAAA,eACA9N,SAAA,sBACAlhD,IAAA,kBACAzD,MAAA,iBAOA,OAJA85C,GAAAoI,uBACApI,EAAAyV,aACAzV,EAAAsP,QAMAl0D,EAAA8+B,aAAA,sBACA9+B,EAAA8+B,aAAA,sBACA9+B,EAAA8+B,aAAA,2BAAAsuB,GACAptD,EAAA8+B,aAAA,sBAAAvsB,GACAvS,EAAA8+B,aACA,KACA,MAAAvsB,EAAA,IAAA66C,EAAA,IAAAoB,GAEAxuD,EAAA8+B,aACA,QACAne,KAAAE,UAAAy8C,GACArzB,QAAA,SAAqB,IACrBA,QAAA,WAGAgmB,EAAAzlC,IAAAxqB,EAAA,mBAEAA,EAAA/C,iBAAA,iBAAAmpC,GACAi3B,EAAAj3B,GAWAwe,EAAAoI,uBACAhtD,EAAAw9D,SAIAx9D,GArCAjD,SAAAw8D,0BAuCA1iD,QAAA,SAAA4mD,GACA,GAAAC,EAEAD,GAIAC,GAAA3gE,SAAA+xD,eAAA2O,KAHAC,EAAA3gE,SAAAyC,iBAAA,8BACAk+D,KAAAj+D,MAAAnB,KAAAo/D,IAKAA,EAAAv+D,QAAA,SAAAyxD,GAEAA,GACA,IAAAA,EAAAkC,UACA/E,EAAAO,kBAAAsC,EAAAh7C,aAAA,QAEAg7C,EAAA/xD,WAAAC,YAAA8xD,MAIAtC,kBAAA,SAAAmP,GACA,GAAAE,GAAAC,EAAAC,EAAAC,CAEA,SAAAL,IAIAE,EAAAF,EAAA93B,MAAA,OAEAg4B,EAAAx9D,OAAA,KAIAy9D,EAAA,OAAAD,EAAA,GACAE,EAAAjL,EAAAhzD,QAAA+9D,EAAA,OACAG,EACAH,EAAA,KAAArQ,EAAAC,MACAoQ,EAAA,KAAArQ,EAAAI,QAEAx4C,QAAA0oD,GAAAC,GAAAC,MAIArqE,GAAAC,QAAAq6D,IAEGgQ,sBAAA,GAAAhnB,cAAA,GAAA+hB,wBAAA,KAAqEkF,IAAA,SAAA/gC,EAAAxpC,EAAAC,GACxE,YAEA,IAAAuqE,GAAAhhC,EAAA,mBAEAxpC,GAAAC,QAAA,SAAAwwD,GACA,GAAA3mC,GAAA0gD,EAAA/Z,EAYA,OAVA3mC,GAAApe,QAAA,SAAA++D,GAKA,eAAAA,EAAA3rD,OACA2rD,EAAA3rD,KAAA,iBAIAgL,KAGG4gD,mBAAA,MAAuBC,IAAA,SAAAnhC,EAAAxpC,EAAAC,GAC1B,YAMA,SAAA0/C,GAAA7B,EAAAxnC,GACA,GAAAgR,GACAyjB,EAAAz0B,EAAAs0D,EAAAt0D,MACAu0D,EAAAnrB,EAAA5B,EAAAlB,eAAA7R,MACA+P,EAAA8vB,EAAA9sB,EAAA+D,kBAEA9W,GAAAwZ,wBAAAN,EAAAO,yBAEA,KAAAl9B,IAAAyjB,GAAA+P,MACA/P,EAAA+P,MAAAjxC,eAAAyd,KACAwzB,EAAAxzB,GAAAyjB,EAAA+P,MAAAxzB,GAYA,OARAyjB,GAAA+P,QAEA+vB,EAAAhmB,gBACA9Z,EAAA8Z,gBAAAgmB,EAAAhmB,gBAEA9Z,EAAAuU,yBAAAurB,EAAAvrB,yBAGAvU,EA1BA,GAAA2U,GAAAlW,EAAA,+BACAohC,EAAAphC,EAAA,gBACAya,EAAAza,EAAA,cA2BAxpC,GAAAC,QAAA0/C,IAEG2D,cAAA,IAAAwnB,8BAAA,IAAAC,eAAA,MAAuEC,IAAA,SAAAxhC,EAAAxpC,EAAAC,GAC1E,YAMA,SAAAoiD,GAAA4oB,EAAA3oB,EAAA1nB,GACA,GAAAswC,GAAAvzC,KAAAP,KAEA,OAAAmT,GAAAhV,QAAA01C,GACAx2B,KAAA,SAAAkE,GACA,GAAAwyB,GAAAxzC,KAAAP,MACA0mB,EAAAnF,EAAAW,mBACAsB,EAAAjC,EAAAwF,SACArZ,EAAAgZ,EAAAvE,qBAAAP,UAAAlU,IACAxuB,GACA0iC,YAEAsJ,KAAA2B,EAAAmnB,iBAAA9oB,EACA+oB,QACAj6D,KAAA4M,MAAAmtD,EAAA,OACA/5D,KAAA4M,MAAAktD,EAAA,KACAA,cAKAtwB,IAEA9V,MACAgT,OAAA,OACAxhC,KAAAqpC,EAAA7B,EAAAxnC,GACA6B,QAAA8rC,EAAAqnB,8BAEA1wC,KAGAoZ,MAAA,SAAA/wB,GAOA2X,GACAA,EAAA3X,KA3CA,GAAAsnB,GAAAf,EAAA,aACAya,EAAAza,EAAA,eACAmW,EAAAnW,EAAA,iBA8CAxpC,GAAAC,SACA+6C,UAAAqH,KAGGkpB,iBAAA,GAAAjoB,cAAA,IAAAkoB,YAAA,MAAsDC,IAAA,SAAAjiC,EAAAxpC,EAAAC,GACzD,YAEA,IAAA4pC,GAAAL,EAAA,sCAEAxpC,GAAAC,SACA4pC,gBAGG6hC,sCAAA,IAAwCC,IAAA,SAAAniC,EAAAxpC,EAAAC,GAC3C,YAKA,SAAA2rE,GAAAC,GACA,GAAAl/D,GAAAk4B,EAAAvd,CAEA,KAAA3a,EAAA,EAAaA,EAAAuL,UAAAxL,OAAsBC,IAAA,CACnCk4B,EAAA3sB,UAAAvL,EACA,KAAA2a,IAAAud,GACAA,EAAAh7B,eAAAyd,KACAukD,EAAAvkD,GAAAud,EAAAvd,IAKA,MAAAukD,GAfA,GAAAC,GACA,kBAAA/iE,QAAAusC,OAAAvsC,OAAAusC,OAAAs2B,CAiBA5rE,GAAAC,SACAq1C,OAAAw2B,EACAC,QAAAH,QAGII,IAAA,SAAAxiC,EAAAxpC,EAAAC,GACJ,YAOA,SAAAy8C,GAAA56B,GACA,GAAA62B,GAAAiE,EAAAx7B,CAEA,OAAAU,IAWAV,EAAAU,EAAAV,KACAu3B,EAAA72B,EAAA62B,OACAiE,EAAA96B,EAAA86B,cAEAjE,GAAAiE,EAYAA,GAAAjE,EAAAiK,eAAA1F,EAiBA3S,EAAAhV,UAhBAgV,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAqmC,EAAA8mB,sBAAAntD,KACA4qB,KAAAyb,EAAA8mB,sBAAAviC,KACAvkB,QACA,mBACAwzB,EAAAiK,aACA,SACAxhC,EACA,aACA87B,EACA,qDAvBA3S,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAqmC,EAAAC,8BAAAtmC,KACA4qB,KAAAyb,EAAAC,8BAAA1b,KAGAvkB,QAAA,iDAAA/D,EAAA,QArBAmpB,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAqmC,EAAA+mB,iCAAAptD,KACA4qB,KAAAyb,EAAA+mB,iCAAAxiC,KACAvkB,QACA,oEAdA,GAAA4zB,GAAAvP,EAAA,qBACAe,EAAAf,EAAA,aACA2b,EAAA3b,EAAA,YACA0T,EAAA,QAoDAl9C,GAAAC,SACA08C,OAAAD,KAGGyvB,oBAAA,GAAAjwB,WAAA,IAAAsvB,YAAA,MAAsDY,IAAA,SAAA5iC,EAAAxpC,EAAAC,GACzD,YAIA,SAAA4K,GAAAwxB,EAAAzB,GACA,IAAAyB,EAAA3vB,QAGA2vB,IACAzB,EAAA,OAEAyB,EAAAzB,GATA,GAAAuE,GAAAqK,EAAA,SAaAxpC,GAAAC,QAAA,SAAAosE,EAAAtmB,GAYA,QAAAumB,GAAArpD,GACA,GAAAA,EAGA,WAFA2X,GAAA3X,EAMA,MADAspD,GAAA,IAEA3xC,EAAA,MApBA,GAAAjuB,GACAD,EAAA2/D,EAAA3/D,OACA6/D,EAAA7/D,EACAkuB,EAAAuE,EAAA4mB,EAEA,QAAAr5C,EAGA,WAFAkuB,GAAA,KAkBA,KAAAjuB,EAAA,EAAaA,EAAAD,EAAYC,IACzB9B,EAAAwhE,EAAA1/D,GAAA2/D,MAIGE,SAAA,MAAaC,IAAA,SAAAjjC,EAAAxpC,EAAAC,GAChB,YAWA,SAAA84C,GAAAj3B,GACA,IAAAi3B,EAAAuD,MAAAzyC,eAAAiY,EAAAhD,MACA,SAAAmW,OAAAnT,EAAAhD,KAAA,wBAGA,KAAAgD,EAAA4nB,KACA,SAAAzU,OAAA,uBAGA,KAAAnT,EAAAqD,QACA,SAAA8P,OAAA,0BAGA5mB,MAAA+S,KAAA,iBAMA/S,KAAAq7B,KAAA5nB,EAAA4nB,KAMAr7B,KAAA8W,QAAArD,EAAAqD,QAMA9W,KAAAyQ,KAAAgD,EAAAhD,KAMAzQ,KAAAm6B,QAAA1mB,EAAA0mB,QA9CA,GAAA8+B,GAAA99B,EAAA,cAiDAuP,GAAApuC,UAAA5B,OAAAoe,OAAA8N,MAAAtqB,WACAouC,EAAApuC,UAAAuc,YAAA6xB,EAcAA,EAAAuD,MAAAgrB,GACA,WACA,WACA,UACA,WACA,YAGAvuB,EAAA2zB,cAAA,SAAAzpD,GACA,MACAA,aAAA81B,IACA91B,EAAAulB,SACAvlB,EAAAulB,QAAA0S,cAEAnC,EAAA2zB,cAAAzpD,EAAAulB,QAAA0S,eAGAj4B,GAGAjjB,EAAAC,QAAA84C,IAEG4zB,cAAA,MAAkBC,KAAA,SAAApjC,EAAAxpC,EAAAC,GACrB,YAEA,IAGA4sE,IACAC,WAAA,uCACAC,QAAA,gDAGAC,GACAF,WAAA,sCACAC,QAAA,uCAGAntB,GACAktB,WAAA,6CACAC,QAAA,qDAGA/sE,GAAAC,SACAmrE,iBAAAlnB,OACAonB,6BAAA,IACA0B,cACAH,kBACA9sB,gBAAA,mBACAD,eAAA,gDACAE,aAAA,kCACAitB,gCAAA,4BACArtB,eACAyhB,uBAAA,IACAnkB,QA7BA,SA8BAmH,YAAA,SACAD,OAAA,SACAF,SA/BA,MAgCAM,0BAAA,6BAGI0oB,KAAA,SAAA1jC,EAAAxpC,EAAAC,GACJ,YAEA,IAAA84C,GAAAvP,EAAA,qBACA2b,EAAA3b,EAAA,WAEAxpC,GAAAC,QAAA,SAAA8iB,EAAA4+C,GACAA,EAAAj2D,QAAA,SAAAyhE,GACApqD,EAAAoqD,GAAA,WACA,SAAAp0B,IACAj6B,KAAAqmC,EAAAioB,6BAAAtuD,KACA4qB,KAAAyb,EAAAioB,6BAAA1jC,KACAvkB,QAAAgoD,EAAA,4CAMGhB,oBAAA,GAAAjwB,WAAA,MAAsCmxB,KAAA,SAAA7jC,EAAAxpC,EAAAC,GACzC,YAIA,SAAAg/C,GAAAquB,EAAAC,GACA,MAAAD,aAAAv0B,GACAu0B,EAGA,GAAAv0B,IACAj6B,KAAAyuD,EAAAzuD,KACA4qB,KAAA6jC,EAAA7jC,KACAvkB,QAAAooD,EAAApoD,QACAqjB,SACA0S,cAAAoyB,KAZA,GAAAv0B,GAAAvP,EAAA,oBAiBAxpC,GAAAC,QAAAg/C,IAEGktB,oBAAA,KAAuBqB,KAAA,SAAAhkC,EAAAxpC,EAAAC,GAC1B,YAIA,SAAAg9C,GAAAL,GACA,MAAAowB,GAAAF,WAHA,GAAAE,GAAAxjC,EAAA,eAAAwjC,WAOAhtE,GAAAC,SACAknB,OAAA81B,KAGGqG,cAAA,MAAkBmqB,KAAA,SAAAjkC,EAAAxpC,EAAAC,GACrB,YAKA,SAAAytE,GAAAC,GACA,kDAAAthC,KAAAshC,GAGA,QAAAC,GAAA/oB,GACA,GAAAgpB,GAAAhpB,EAAA3S,MAAA,KACA6P,EAAA8rB,EAAA,EAGA,QACAhtB,WAHAgtB,EAAA7hE,MAAA,GAAAqmC,KAAA,KAIA0P,eAIA,QAAArC,GAAA9C,GACA,GAAAkxB,GAAAC,EACAz3D,GACAy0B,SACA+Y,UAAA,GAqBA,OAlBA4pB,GAAA9wB,IACAmxB,EAAAH,EAAAhxB,GACAtmC,EAAAyrC,YAAAgsB,EAAAhsB,YACAzrC,EAAAy0B,MAAA8Z,gBAAAjI,EACAtmC,EAAAwtC,UACA+oB,EAAAkB,EAAAhsB,aACA,cACAgsB,EAAAltB,WACA,iCAEAitB,EAAA5gD,KAAAC,MAAA6gD,EAAApxB,IACAtmC,EAAAyrC,YAAA+rB,EAAA/rB,YACAzrC,EAAAy0B,MAAAuU,yBACAwuB,EAAAxuB,yBACAhpC,EAAAwtC,UAAAgqB,EAAAhqB,UACAxtC,EAAAioC,QAAAuvB,EAAAvvB,SAGAjoC,EA3CA,GAAA03D,GAAAxkC,EAAA,0BAAAwkC,KACAnB,EAAArjC,EAAA,oBAAAqjC,eA6CA7sE,GAAAC,QAAAy/C,IAEGsD,mBAAA,IAAAirB,yBAAA,MAAoDC,KAAA,SAAA1kC,EAAAxpC,EAAAC,GACvD,YASA,SAAA68C,GAAAh7B,GACA,GAAAo1B,GAAA3M,EAAAhV,SAEA,OAAAzT,GAAA62B,OACApO,EAAAhV,QAAAzT,EAAA62B,SAGArqC,OAAA6/D,WAAA7/D,OAAA6/D,UAAAx1B,SACAzB,EAAA2I,EACAhW,YACAqB,IAAAppB,EAAAk7B,UAAA,QAAAE,EAAA,sBAEAlJ,MAAA,SAAA/wB,GACA,MAAAsnB,GAAAgB,OACA,GAAAwN,IACAj6B,KAAAqmC,EAAAipB,6BAAAtvD,KACA4qB,KAAAyb,EAAAipB,6BAAA1kC,KACAvkB,QAAAggC,EAAAipB,6BAAAjpD,QACAqjB,SACA0S,cAAAj4B,SAOAi0B,EAAAzC,KAAA,WACA,MAAAnmC,QAAA6/D,UAAAx1B,OAAAuE,YACA3S,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAqmC,EAAA8mB,sBAAAntD,KACA4qB,KAAAyb,EAAA8mB,sBAAAviC,KACAvkB,QACA,mBACA7W,OAAA6/D,UAAAx1B,OAAAuE,QACA,SACAp7B,EAAAV,KACA,aACA87B,EACA,qDAKA5uC,OAAA6/D,UAAAx1B,OAAAxxB,QACAy1B,cAAA96B,EAAA86B,cACAG,MAAAj7B,EAAAi7B,WArDA,GAAAhE,GAAAvP,EAAA,qBACAe,EAAAf,EAAA,aACAqW,EAAArW,EAAA,YACA2b,EAAA3b,EAAA,YAEA0T,EAAA,QAqDAl9C,GAAAC,SACAknB,OAAA21B,KAGGuxB,WAAA,GAAAlC,oBAAA,GAAAjwB,WAAA,IAAAsvB,YAAA,MAAoEzrE,KAAA,SAAAypC,EAAAxpC,EAAAC,GACvE,YAEAD,GAAAC,QAAA,SAAAo8B,GACA,kBAEA,GAAArd,GAAA9G,SAEAG,YAAA,WACAgkB,EAAApkB,MAAA,KAAA+G,IACK,UAID9e,KAAA,SAAAspC,EAAAxpC,EAAAC,GACJ,YAIA,SAAAq+D,KACAjwD,KAAAigE,qBAEAjgE,KAAAkgE,gBAAA,EALA,GAAAC,GAAAhlC,EAAA,4BAQA80B,GAAA3zD,UAAAm0D,4BAAA,SAAAziC,GACA,kBAAAA,IACAhuB,KAAAigE,kBAAAjpD,KAAAgX,IAIAiiC,EAAA3zD,UAAAixC,SAAA,SAAAhhB,GACA,GAAAvsB,KAAAkgE,eAGA,WAFA3zC,GAAA,GAAA3F,OAAA,sCAKA5mB,MAAAkgE,gBAAA,EAEAC,EACAngE,KAAAigE,kBACA,SAAArrD,GACA5U,KAAAigE,qBACAjgE,KAAAkgE,gBAAA,EAEA,kBAAA3zC,IACAA,EAAA3X,IAEK8B,KAAA1W,QAILrO,EAAAC,QAAAq+D,IAEGmQ,4BAAA,KAA+BrmE,KAAA,SAAAohC,EAAAxpC,EAAAC,GAClC,YAEA,SAAAqnE,GAAAoH,EAAAC,GAGA,MAFAA,GAAA,MAAAA,EAAA,GAAAA,EAEAD,EAAAziB,OAAA,SAAA2iB,EAAAxlE,GAGA,MAFAwlE,GAAAxlE,GAAAulE,EAAAvlE,EAEAwlE,OAIA5uE,EAAAC,QAAAqnE,OAEIuH,KAAA,SAAArlC,EAAAxpC,EAAAC,GACJ,YAuBA,IAAA84C,GAAAvP,EAAA,oBAEAxpC,GAAAC,SACAisE,kCACAptD,KAAAi6B,EAAAuD,MAAAsH,SACAla,KAAA,oCAEA0b,+BACAtmC,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,iCAEAuiC,uBACAntD,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,yBAEA0kC,8BACAtvD,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,+BACAvkB,QAAA,gDAEAioD,8BACAtuD,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,mCAIGyiC,oBAAA,KAAuB2C,KAAA,SAAAtlC,EAAAxpC,EAAAC,GAC1B,YAEAD,GAAAC,QAAA,SAAAsN,GACA,KAAAA,EAAAnC,YACAmC,IAAAnC,UAGA,OAAAmC,SAGIwhE,KAAA,SAAAvlC,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,QAAA,SAAAu+B,EAAAlX,EAAAle,GACA,GAAAuD,EAEA,KAAAA,EAAA,EAAaA,EAAA6xB,EAAA9xB,OAAkBC,IAC/B,GAAA6xB,EAAA7xB,GAAA9C,eAAAyd,IAAAkX,EAAA7xB,GAAA2a,KAAAle,EACA,MAAAo1B,GAAA7xB,EAIA,mBAGIqiE,KAAA,SAAAxlC,EAAAxpC,EAAAC,GACJ,YAoBA,SAAAw+B,MAEA,QAAAwwC,GAAAntD,GACA,IAAAA,EACA,SAAAmT,OAAA,kCASA,IANAi6C,EAAAxjE,QAAA,SAAA4b,GACA,IAAAxF,EAAAjY,eAAAyd,GACA,SAAA2N,OAAA,iBAAA3N,EAAA,wBAIA,WAAA+kB,KAAAvqB,EAAAV,MACA,SAAA6T,OAAA,uCAIA,QAAAk6C,GAAArtD,GACAmtD,EAAAntD,GAEAzT,KAAA+gE,WAAA74B,IAAAC,QAAA,SAEAnoC,KAAAghE,UACAjuD,KAAAU,EAAAV,KAAA,IAAA/S,KAAA+gE,WACAE,iBAAAxtD,EAAAwtD,iBACAC,aAAAztD,EAAAytD,aACAh4D,OAAAuK,EAAAvK,OACAF,MAAAyK,EAAAzK,MACAyD,IAAAgH,EAAAhH,IACAD,KAAAiH,EAAAjH,MAEAxM,KAAAmhE,MAAA1tD,EAAA0tD,UAEAnhE,KAAAowD,KAAA,GAAAC,IAAuBC,QAAAtwD,KAAA+gE,aACvB/gE,KAAAohE,gBArDA,GAAAC,GAAAlmC,EAAA,sBACAmmC,EAAAnmC,EAAA,6BACAomC,EAAApmC,EAAA,sBACAk1B,EAAAl1B,EAAA,YACAm3B,EAAAn3B,EAAA,oBACAyP,EAAAzP,EAAA,oBACAya,EAAAza,EAAA,uBACA+M,EAAA/M,EAAA,mBACAy2B,EAAAz2B,EAAA,sBACAuP,EAAAvP,EAAA,yBACA2nB,EAAA3nB,EAAA,+BACAqmC,EAAArmC,EAAA,kBACA8L,EAAA9L,EAAA,kBAAA8L,OACA23B,EACAzjC,EAAA,mBAAAyjC,gCAEAiC,GAAA,yCAwCAC,GAAAxkE,UAAAu1C,WAAA,SAAAtlB,GACA,GAAAk1C,GAAA,WACAl1C,IACAvsB,KAAAowD,KAAAr/B,IAAAuhC,EAAAoP,qBAAAD,IACG/qD,KAAA1W,KAEHA,MAAAowD,KAAAx/B,GAAA0hC,EAAAoP,qBAAAD,GACAzhE,KAAA2hE,uBAGAb,EAAAxkE,UAAAqlE,oBAAA,WACA,GAAAC,GAAAhsB,EAAAisB,oBAAA,IAAA7hE,KAAA+gE,WACAe,EAAA9hE,KAAAghE,SAAAC,gBAEAjhE,MAAA+hE,eAAAnQ,GACAoQ,eAAA,EACAjvD,KAAA6uD,EACAtxC,MAAAsxC,EACA/kC,IAAAilC,EACA3tC,MAAAyhB,EAAAqsB,qBACA/4D,OAAA,EACAF,MAAA,EACApM,OACA+wD,SAAA,WACAnhD,KAAA,aAIAvR,SAAA6Q,KAAAqxB,YAAAn9B,KAAA+hE,iBAGAjB,EAAAxkE,UAAA8kE,cAAA,WACAphE,KAAAowD,KAAAx/B,GACA0hC,EAAA4P,sBACA,SAAAC,EAAAtP,GACA7yD,KAAA+qB,qBACA/qB,KAAA+qB,oBAAAvuB,KAAA,KAAA2lE,EAAAvtD,IAAAutD,EAAA9Y,SAEArpD,KAAAoiE,OAAA/iD,QAEArf,KAAA+qB,oBAAA,KAEA8nC,GACAA,KAEKn8C,KAAA1W,OAGLA,KAAAowD,KAAAx/B,GACAguC,EACA,SAAA/L,GACAA,EAAA7yD,KAAAmhE,QACKzqD,KAAA1W,QAIL8gE,EAAAxkE,UAAAy9B,KAAA,SAAAtmB,EAAA8Y,GACA,GAAA5N,EAOA,IALAlL,QACAzT,KAAAoiE,OAAApiE,KAAAqiE,wBAAA5uD,GAEAzT,KAAAoiE,OAAAvwB,WAAAtlB,KAEAvsB,KAAAoiE,iBAAAd,IAAA,CASA,GALAr6B,EAAAjnC,KAAAmhE,MAAA1tD,EAAA0tD,OAEAnhE,KAAA+qB,oBAAAwB,EACAvsB,KAAAoiE,OAAAroC,OAEA/5B,KAAAsiE,gBAaA,MAZAtiE,MAAAuiE,qBACAh2C,IAEA5N,EAAA,GAAA+rB,GADAoY,EAAAsP,SAAAoP,YAEA52B,EAAA43B,uCAGA53B,EAAA63B,iCAEAl2C,EAAA5N,IAKA3e,MAAA0iE,uBAGA5B,EAAAxkE,UAAAqmE,SAAA,SAAAlsC,GACAz2B,KAAAoiE,SAAApiE,KAAAsiE,iBACAtiE,KAAAoiE,OAAAO,SAAAlsC,IAIAqqC,EAAAxkE,UAAA+iB,MAAA,WACArf,KAAAsiE,iBACAtiE,KAAAoiE,OAAA/iD,SAIAyhD,EAAAxkE,UAAA6wD,MAAA,WACAntD,KAAAsiE,iBACAtiE,KAAAoiE,OAAAjV,SAIA2T,EAAAxkE,UAAAsmE,cAAA,SAAAnvD,GAGA,MAFAA,UAGA4L,MAAA,WACA5L,EAAAovD,aACApvD,EAAAovD,cAGA7iE,KAAAqf,SACK3I,KAAA1W,MACLmtD,MAAA,WACA15C,EAAAqvD,aACArvD,EAAAqvD,cAGA9iE,KAAAmtD,SACKz2C,KAAA1W,QAIL8gE,EAAAxkE,UAAAymE,kBAAA,WACA,OACA1jD,MAAA+Q,EACA+8B,MAAA/8B,IAIA0wC,EAAAxkE,UAAAixC,SAAA,WACAvtC,KAAAqf,QACArf,KAAA+hE,eAAAhlE,WAAAC,YAAAgD,KAAA+hE,gBACA/hE,KAAA+hE,eAAA,KACA/hE,KAAAuiE,iBAGAzB,EAAAxkE,UAAAgmE,cAAA,WACA,aAAAtiE,KAAAoiE,QAAApiE,KAAAoiE,OAAAY,YAGAlC,EAAAxkE,UAAAimE,cAAA,WACAviE,KAAAoiE,OAAA,KACAh2D,cAAApM,KAAAijE,gBACAjjE,KAAAijE,eAAA,MAGAnC,EAAAxkE,UAAAomE,mBAAA,WAeA,MAdA1iE,MAAAijE,eAAA92D,YACA,WACAnM,KAAAsiE,kBACAtiE,KAAAuiE,gBACAviE,KAAA+qB,qBACA/qB,KAAA+qB,oBACA,GAAA2f,GAAAE,EAAAs4B,+BAIKxsD,KAAA1W,MACL41C,EAAAutB,qBAGAnjE,KAAAijE,gBAGAnC,EAAAxkE,UAAA+lE,wBAAA,SAAA5uD,GACA,GAAA2vD,GAAAtgB,EAAAugB,iBACAC,EAAAlwD,QAAAnT,OAAAsjE,aAEAC,EAAAv8B,KAA6BjnC,KAAAghE,SAAAvtD,EAE7B,OAAA6vD,GACA,GAAAhC,GAAAkC,GACGJ,EACH,GAAA/B,GAAAmC,GAGA,GAAAjC,GAAAiC,IAGA7xE,EAAAC,QAAAkvE,IAEG2C,wBAAA,GAAA5e,kBAAA,IAAA6e,iBAAA,IAAAtW,8BAAA,IAAA1C,sBAAA,IAAAC,mBAAA,IAAAgZ,mBAAA,IAAAC,iBAAA,GAAAC,qBAAA,IAAAC,qBAAA,IAAAC,4BAAA,IAAA7M,qBAAA,GAAAtgB,kBAAA,GAAAugB,SAAA,MAAkV6M,KAAA,SAAA7oC,EAAAxpC,EAAAC,GACrV,YAEA,IAAAkvE,GAAA3lC,EAAA,kBAEAxpC,GAAAC,SACAknB,OAAA,SAAArF,EAAA8Y,GACA,GAAA03C,GAAA,GAAAnD,GAAArtD,EAEAwwD,GAAApyB,WAAA,WACAtlB,EAAA03C,SAKGC,kBAAA,MAAsBC,KAAA,SAAAhpC,EAAAxpC,EAAAC,GACzB,YAmBA,SAAAw+B,MAEA,QAAAmxC,GAAA9tD,GACAzT,KAAAokE,QAAA,KACApkE,KAAAoiE,OAAA,KACApiE,KAAAghE,SAAAvtD,MACAzT,KAAAqkE,WAAArkE,KAAAghE,SAAApkC,WAAA3hC,SAAA6Q,KAvBA,GAAA8lD,GAAAz2B,EAAA,sBACA8L,EAAA9L,EAAA,mBAAA8L,OACA6b,EAAA3nB,EAAA,kCAEAmpC,GACA3W,SAAA,QACAlhD,IAAA,EACAD,KAAA,EACA4iD,OAAA,EACA5tD,QAAA,EACA+iE,OAAA,EACA3K,OAAA,EACA4K,QAAA,OACAC,OAAA,MACAC,WAAA,UAYAnD,GAAAjlE,UAAAu1C,WAAAzhB,EAEAmxC,EAAAjlE,UAAAy9B,KAAA,WACA,GAAA4qC,IACA9nC,IAAA78B,KAAAghE,SAAAE,aACAnuD,KAAA/S,KAAAghE,SAAAjuD,KACA80B,UAAA,MACA3+B,OAAA,OACAF,MAAA,OACApM,MAAAqqC,KAAoBq9B,GACpBh0C,MAAA,iBAGAwyB,GAAArjB,SAGAqjB,EAAA8hB,mBACA5kE,KAAA6kE,iBAEAF,EAAA/nE,UAGAoD,KAAA8kE,IAAA7pE,SAAAiC,cAAA,OAEA+pC,EAAAjnC,KAAA8kE,IAAAloE,MAAA0nE,GACAp7D,OAAA,OACAF,MAAA,OACA+7D,SAAA,OACAC,6BAAA,UAGAhlE,KAAAoiE,OAAAxQ,EAAA+S,GACA3kE,KAAA8kE,IAAA3nC,YAAAn9B,KAAAoiE,SAEApiE,KAAA8kE,IAAA9kE,KAAAoiE,OAAAxQ,EAAA+S,GAEA3kE,KAAAokE,SAAA,EAEApkE,KAAAqkE,WAAAlnC,YAAAn9B,KAAA8kE,MAGAvD,EAAAjlE,UAAA6wD,MAAA/8B,EAEAmxC,EAAAjlE,UAAA+iB,MAAA,WACArf,KAAAqkE,WAAArnE,YAAAgD,KAAA8kE,KACA9kE,KAAAoiE,OAAA,KACApiE,KAAAokE,SAAA,EACAthB,EAAA8hB,kBACA5kE,KAAAilE,oBAIA1D,EAAAjlE,UAAA0mE,SAAA,WACA,MAAA5vD,SAAApT,KAAAokE,UAGA7C,EAAAjlE,UAAAqmE,SAAA,SAAAuC,GACAllE,KAAAoiE,OAAAvlC,IAAAqoC,GAGA3D,EAAAjlE,UAAA2oE,iBAAA,WACAhqE,SAAA6Q,KAAAlP,MAAAmoE,SAAA/kE,KAAAmlE,qBAAAC,cACAnqE,SAAA6Q,KAAAlP,MAAA+wD,SAAA3tD,KAAAmlE,qBAAAE,cACAplE,OAAAqlE,SACAtlE,KAAAmlE,qBAAA34D,KACAxM,KAAAmlE,qBAAA14D,WAEAzM,MAAAmlE,sBAGA5D,EAAAjlE,UAAAuoE,eAAA,WACA,GAAAU,GAAAtqE,SAAA4Q,eAGA7L,MAAAmlE,sBACA34D,MAAAvM,OAAAulE,aAAAD,EAAAE,aAAAF,EAAAG,YAAA,GACAj5D,KAAAxM,OAAA0lE,aAAAJ,EAAAK,YAAAL,EAAAM,WAAA,GACAT,cAAAnqE,SAAA6Q,KAAAlP,MAAAmoE,SACAM,cAAApqE,SAAA6Q,KAAAlP,MAAA+wD,UAEA1yD,SAAA6Q,KAAAlP,MAAAmoE,SAAA,SACA9pE,SAAA6Q,KAAAlP,MAAA+wD,SAAA,QACA1tD,OAAAqlE,SAAA,MAGA3zE,EAAAC,QAAA2vE,IAEGuE,kBAAA,GAAAC,iCAAA,IAAA7O,qBAAA,KAAkF8O,KAAA,SAAA7qC,EAAAxpC,EAAAC,GACrF,YAKA,SAAAw+B,MAEA,QAAAkxC,GAAA7tD,GACAzT,KAAAokE,QAAA,KACApkE,KAAAghE,SAAAvtD,EAPA,GAAAi3B,GAAAvP,EAAA,4BACAyP,EAAAzP,EAAA,sBASAmmC,GAAAhlE,UAAAu1C,WAAA,SAAAtlB,GACA,GAAAnD,GAAAppB,IAEAC,QAAAsjE,YAAA92C,WAAA,SAAA7X,EAAAy0C,GACA,GAAA4c,IAAA5c,IAAAz0C,CAIA,IAFAwU,EAAAg7C,SAAA,EAEAxvD,GAAAqxD,EAIA,WAFA15C,GAAA,GAAAme,GAAAE,EAAAs4B,4BAKA32C,GAAA,KAAA88B,KAIAiY,EAAAhlE,UAAAy9B,KAAA,SAAAtmB,GACA,GAAAgjB,EAEAhjB,SACAgjB,EAAAhjB,EAAAytD,cAAAlhE,KAAAghE,SAAAE,aAEAlhE,KAAAokE,SAAA,EACAnkE,OAAAsjE,YAAAxpC,KAAAtD,IAGA6qC,EAAAhlE,UAAA6wD,MAAA/8B,EAEAkxC,EAAAhlE,UAAA+iB,MAAA+Q,EAEAkxC,EAAAhlE,UAAA0mE,SAAA,WACA,MAAA5vD,SAAApT,KAAAokE,UAGA9C,EAAAhlE,UAAAqmE,SAAA,SAAAuC,GACAllE,KAAA+5B,MAAamnC,aAAAgE,KAGbvzE,EAAAC,QAAA0vE,IAEG4E,2BAAA,GAAAC,sBAAA,MAAwDC,KAAA,SAAAjrC,EAAAxpC,EAAAC,GAC3D,YAKA,SAAAy0E,GAAA51D,EAAA61D,EAAAC,GACA,gBAAAD,EACAA,EAGA3Y,EAAAl9C,GAAA81D,GARA,GAAA3wB,GAAAza,EAAA,6BACAwyB,EAAAxyB,EAAA,aAUAxpC,GAAAC,QAAA,SAAA6hB,GACA,GAAAvK,GAAAuK,EAAAvK,QAAA0sC,EAAA4wB,qBACAx9D,EAAAyK,EAAAzK,OAAA4sC,EAAA6wB,oBACAh6D,EAAA45D,EAAA,MAAA5yD,EAAAhH,IAAAvD,GACAsD,EAAA65D,EAAA,OAAA5yD,EAAAjH,KAAAxD,EAEA,QACA4sC,EAAA8wB,mBACA,UAAAx9D,EACA,SAAAF,EACA,OAAAyD,EACA,QAAAD,GACAw3B,KAAA,QAGG2iC,4BAAA,IAAAC,aAAA,MAAiDC,KAAA,SAAA1rC,EAAAxpC,EAAAC,GACpD,YAIA,SAAAw+B,MAEA,QAAAixC,GAAA5tD,GACAzT,KAAAoiE,OAAA,KACApiE,KAAAghE,SAAAvtD,MAEAzT,KAAA+5B,OARA,GAAA+sC,GAAA3rC,EAAA,oBAWAkmC,GAAA/kE,UAAAu1C,WAAAzhB,EAEAixC,EAAA/kE,UAAAy9B,KAAA,WACA/5B,KAAAoiE,OAAAniE,OAAA85B,KACA/5B,KAAAghE,SAAAE,aACAlhE,KAAAghE,SAAAjuD,KACA+zD,EAAA9mE,KAAAghE,YAIAK,EAAA/kE,UAAA6wD,MAAA,WACAntD,KAAAoiE,OAAAjV,SAGAkU,EAAA/kE,UAAA+iB,MAAA,WACArf,KAAAoiE,OAAA2E,QAGA/mE,KAAAoiE,OAAA/iD,SAGAgiD,EAAA/kE,UAAA0mE,SAAA,WACA,OAAAhjE,KAAAoiE,QAAAhvD,QAAApT,KAAAoiE,OAAA2E,SAGA1F,EAAA/kE,UAAAqmE,SAAA,SAAAuC,GACAllE,KAAAoiE,OAAAh2B,SAAA5O,KAAA0nC,GAGAvzE,EAAAC,QAAAyvE,IAEG2F,oBAAA,MAAwBC,KAAA,SAAA9rC,EAAAxpC,EAAAC,GAC3B,YAEA,SAAA6a,GAAAvD,GAKA,MAAAg+D,GAHAjnE,OAAAknE,aAAAlsE,SAAA4Q,gBAAAV,aAGAjC,EAFA,MAAAjJ,OAAAmnE,QAAAnnE,OAAAonE,UAAApnE,OAAAmnE,SAKA,QAAA56D,GAAAxD,GAIA,MAAAk+D,GAHAjnE,OAAAqnE,YAAArsE,SAAA4Q,gBAAA+B,YAGA5E,EAFA,MAAA/I,OAAAsnE,QAAAtnE,OAAAunE,WAAAvnE,OAAAsnE,SAKA,QAAAL,GAAAO,EAAAC,EAAAx8D,GACA,OAAAu8D,EAAAC,GAAA,EAAAx8D,EAGAvZ,EAAAC,SACA6a,MACAD,OACA06D,eAGIS,KAAA,SAAAxsC,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA6tC,MAAAtE,EAAA,uCACAypC,eAAAzpC,EAAA,iDACAi3B,KAAAj3B,EAAA,sCACAkoC,eAAAloC,EAAA,mDAGGkU,qCAAA,GAAAypB,sCAAA,GAAA8O,gDAAA,GAAAC,+CAAA,KAAsLC,KAAA,SAAA3sC,EAAAxpC,EAAAC,GACzL,YAEAD,GAAAC,SACAiwE,oBAAA,WACAI,qBAAA,2BACAyE,mBAAA,uBACAD,oBAAA,IACAD,qBAAA,IACArD,oBAAA,IACA4E,oBAAA,UAGIC,KAAA,SAAA7sC,EAAAxpC,EAAAC,GACJ,YAWA,IAAA84C,GAAAvP,EAAA,wBAEAxpC,GAAAC,SACAsxE,4BACAzyD,KAAAi6B,EAAAuD,MAAAsH,SACAla,KAAA,6BACAvkB,QAAA,iDAEA2rD,iCACAhyD,KAAAi6B,EAAAuD,MAAAsH,SACAla,KAAA,kCACAvkB,QAAA,yBAEA0rD,wCACA/xD,KAAAi6B,EAAAuD,MAAAsH,SACAla,KAAA,yCACAvkB,QACA,2MAIG2sD,wBAAA,KAA2BwE,KAAA,SAAA9sC,EAAAxpC,EAAAC,GAC9B,YAEA,IAAAqnE,GAAA99B,EAAA,kBAEAxpC,GAAAC,QAAAqnE,GACA,gDACA,mBAGGiP,kBAAA,MAAsBC,KAAA,SAAAhtC,EAAAxpC,EAAAC,GACzB,YAKA,SAAAw2E,GAAA34B,EAAAwZ,GACA,GAAAtvC,GAAA81B,EAAA+D,kBACA60B,GACAC,QAAA,YACAC,uBAAA94B,EAAAvE,qBAAAsH,WACAg2B,uBAAA,KACAC,uBAAA55B,EACA65B,qBAAA7pD,KAAAE,WACAyX,OAAA7c,EAAA6c,OACAqd,YAAAl6B,EAAAk6B,YACAC,UAAAn6B,EAAAm6B,UACApjB,QAAAme,EACA+E,SAAAj6B,EAAAi6B,WAIA,OAAA3M,MAAkBohC,EAAApf,GAnBlB,GAAApa,GAAA,SACA5H,EAAA9L,EAAA,YAAA8L,MAqBAt1C,GAAAC,QAAA,SAAA69C,EAAAgY,EAAAE,GACA,GAAA1/C,GAAA0gE,EACAC,EAAAn5B,EAAAvE,qBAAAgR,WACAxI,EACA,eAAAjE,EAAAvE,qBAAAwI,YACA,aACA,MAiGA,OA/FA,KAAA+T,GACAx/C,GACAshD,WAAA,EACAsf,gBAAA,EACAn1B,cACAoV,wBAEAr4C,KAAA,OACA4hC,YACAy2B,oBAAA,6BACAngB,oBAAAigB,EAAA/8B,kBAAAtvC,IACA,SAAA6/D,GACA,MAAAA,GAAA3W,iBAIAsjB,2BACAt4D,KAAA,kBACA4hC,WAAA+1B,EAAA34B,GACAu5B,qCACAJ,EAAAxsB,qCAOAuL,IACA1/C,EAAAghE,cACAz2B,WAAAmV,IAIAihB,EAAAtsB,iBACAqsB,GACAl4D,KAAA,SACA4hC,YAEA62B,kBACAC,iBAEAC,OACAC,UAAAT,EAAAtsB,gBAEAgtB,mBAAA,MAMAP,2BACAt4D,KAAA,kBACA4hC,WAAA+1B,EAAA34B,GACA85B,2BAAAX,EAAAtsB,mBAKAr0C,EAAA6gD,sBAAA9xC,KAAA2xD,MAGA1gE,GACAyrC,cACAoV,uBAAA,yBACA0gB,qCACAC,iBAAA,kBACAp3B,WAAA+1B,EAAA34B,GACAu5B,qCACAJ,EAAAxsB,kCAGAsM,kBACAC,oBAAAigB,EAAA/8B,kBAAAtvC,IACA,SAAA6/D,GACA,MAAAA,GAAA3W,kBAMA,qBAAAhW,EAAAiH,oBACAzuC,EAAAuhE,oCAAAn3B,WACA,uBACA5C,EAAAlB,eAGAoZ,IACA1/C,EAAAuqC,WAAAmV,GAGAF,IACAx/C,EAAAshD,WAAA9B,IAIAx/C,KAGGyhE,WAAA,KAAcC,KAAA,SAAAxuC,EAAAxpC,EAAAC,GACjB,YAEAD,GAAAC,QAAA,SAAAg4E,GACAA,KAAA3pE,MAEA,KACA,MAAA2pE,GAAAxgD,OAAAwgD,EAAAn9D,IACG,MAAAxP,GACH,gBAII4sE,KAAA,SAAA1uC,EAAAxpC,EAAAC,GACJ,YAEA,SAAAk4E,GAAAC,GACA,GAAAC,GAAAD,EAAAlmC,MAAA,IAEA,WAAAva,MAAA0gD,EAAA,GAAAA,EAAA,GAAAA,EAAA,IAGA,QAAA3zB,GAAA4zB,EAAAC,GACA,MACAJ,GAAAG,IAAAH,EAAAI,GAIAv4E,EAAAC,QAAAykD,OAEI8zB,KAAA,SAAAhvC,EAAAxpC,EAAAC,GACJ,YAEA,SAAA4vE,GAAAxb,GAGA,kBAFAA,KAAA/lD,OAAAmsC,SAAA4Z,UAKAr0D,EAAAC,SACA4vE,gBAGI4I,KAAA,SAAAjvC,EAAAxpC,EAAAC,GACJ,YAUA,SAAAy4E,GAAAC,GACA,MAAAA,GAAAzmC,MAAA,KAAAlmC,OAAA,GAAAqmC,KAAA,KAGA,QAAA4L,GAAAnZ,GACA,GAAA8zC,EAIA,OAFA9zC,KAAA/jB,gBAEA,UAAAsrB,KAAAvH,KAIA+zC,KAAAvvE,SAAAiC,cAAA,KACAstE,EAAAhtC,KAAA/G,EACA8zC,EAAAF,EAAAG,EAAAn+B,UAEAo+B,EAAAjvE,eAAA+uE,IAzBA,GAAAC,GACAC,GACAC,aAAA,EACAC,wBAAA,EACAC,uBAAA,EACAC,oBAAA,EAuBAl5E,GAAAC,QAAAg+C,OAEIk7B,KAAA,SAAA3vC,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,QAAA,SAAAmJ,GACA,MAAA8jB,MAAAC,MAAAD,KAAAE,UAAAhkB,UAGIgwE,KAAA,SAAA5vC,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,QAAA,SAAA61C,GACA,MAAA/sC,QAAAusB,KAAAwgB,GAAA7pC,OAAA,SAAAqb,GACA,wBAAAwuB,GAAAxuB,WAII+xD,KAAA,SAAA7vC,EAAAxpC,EAAAC,GACJ,YAEA,SAAAk/B,GAAA9C,GACA,GAAA0a,IAAA,CAEA,mBACAA,IACAA,GAAA,EACA1a,EAAApkB,MAAA,KAAAC,aAKAlY,EAAAC,QAAAk/B,OAEIm6C,KAAA,SAAA9vC,EAAAxpC,EAAAC,GACJ,YAEA,IAAAs5E,GAAA/vC,EAAA,oBACA6J,EAAA7J,EAAA,+BAGAa,EAAA,mBAAAE,iBAAAgvC,CAEAlmC,GAAAe,iCAAA,EACAf,EAAAa,WAAA7J,GAEArqC,EAAAC,QAAAoqC,IAEGmvC,8BAAA,GAAAhvC,mBAAA,MAAwDivC,KAAA,SAAAjwC,EAAAxpC,EAAAC,GAC3D,YAEA,SAAAy5E,GAAA5jC,GACA,GAAAxuB,EAEA,KAAAA,IAAAwuB,GACA,GAAAA,EAAAjsC,eAAAyd,GACA,QAIA,UAIA,QAAAqyD,GAAAvwE,GACA,MACAA,IACA,gBAAAA,IACA,gBAAAA,GAAAsD,QACA,mBAAA3D,OAAA4B,UAAAukB,SAAArkB,KAAAzB,KACA,EAKA,QAAAwwE,GAAA90C,GAGA,MAFAA,MAAAx2B,OAAAmsC,SAAA5O,KAEA,KAAAQ,KAAAvH,GAGA,QAAA3X,GAAA2X,GACA,GAAA8qB,EAIA,OAFA9qB,MAAAx2B,OAAAmsC,SAAA5O,KAEA+tC,EAAA90C,IAIA8qB,EAAA9qB,EAAAoN,MAAA,YACA0d,IAAApZ,QAAA,WAAAtE,MAAA,KAEA0d,EAAA3D,OAAA,SAAA4tB,EAAAC,GACA,GAAAC,GAAAD,EAAA5nC,MAAA,KACA5qB,EAAA0yD,mBAAAD,EAAA,IACA3wE,EAAA4wE,mBAAAD,EAAA,GAIA,OAFAF,GAAAvyD,GAAAle,EAEAywE,WAMA,QAAAzsD,GAAA6sD,EAAAC,GACA,GAAApyD,GAAAC,EAAAne,EACAgmD,IAEA,KAAAhmD,IAAAqwE,GACAA,EAAApwE,eAAAD,KAIAme,EAAAkyD,EAAArwE,GAIAke,EAFAoyD,EACAP,EAAAM,GACAC,EAAA,KAEAA,EAAA,IAAAtwE,EAAA,IAGAA,EAEA,gBAAAme,GACA6nC,EAAAvqC,KAAA+H,EAAArF,EAAAD,IAEA8nC,EAAAvqC,KAAA80D,mBAAAryD,GAAA,IAAAqyD,mBAAApyD,IAIA,OAAA6nC,GAAAvd,KAAA,KAGA,QAAAyU,GAAAhiB,EAAAm1C,GASA,MARAn1C,MAAA,GAEA,MAAAm1C,GAAA,gBAAAA,IAAAP,EAAAO,KACAn1C,IAAA,IAAAA,EAAA34B,QAAA,YACA24B,IAAA,IAAAA,EAAA34B,QAAA,YACA24B,GAAA1X,EAAA6sD,IAGAn1C,EAGA9kC,EAAAC,SACAktB,QACAC,YACA05B,WACA8yB,uBAGIvxE,KAAA,SAAAmhC,EAAAxpC,EAAAC,GACJ,YAQA,SAAA2/D,GAAAryD,GAGA,MAFAA,GAAAs0D,EAAAt0D,GAEA,wBAAAA,EAAA2hB,WAGA,QAAAkrD,GAAA7sE,GAGA,MAFAA,GAAAs0D,EAAAt0D,GAEAqyD,EAAAryD,GAIAA,EAAA6R,KAHA,KAMA,QAAAygD,GAAAtyD,EAAAiS,GACA,GAAA66D,GAAAxY,EAAAt0D,GAAA6U,cAAA,SACAk4D,EAAAF,EAAA7sE,GACAgtE,EAAA,eAAAhkC,IACAikC,EAAAlxE,SAAAiC,cAAA,QACAkvE,EAAAnxE,SAAAiC,cAAA,MAmBA,OAjBAivE,GAAAnvC,aAAA,OAAAkvC,GACAhtE,EAAAi+B,YAAAgvC,GAEAC,EAAApvC,aAAA,OAAAkvC,GACAD,EAAA9uC,YAAAivC,GAEAj7D,IACA66D,IACAA,EAAA/wE,SAAAiC,cAAA,SACAgC,EAAAi+B,YAAA6uC,IAGAA,EAAAK,MAAAC,WACA,oBAAAJ,EAAA,SAA6C/6D,EAAA,OAI7CogD,EAAA0a,GACAza,EAAA4a,EAAAj7D,GAGAi7D,EAlDA,GAAAlkC,GAAA/M,EAAA,mBACAq4B,EAAAr4B,EAAA,mBAoDAxpC,GAAAC,SACA2/D,kBACAwa,gBACAva,qBAGG+a,mBAAA,IAAA31B,kBAAA,KAA4Cj4C,KAAA,SAAAw8B,EAAAxpC,EAAAC,GAC/C,YAEAD,GAAAC,QAAA,SAAA46E,GACA,WAAAA,EAAA1uE,QAAA,KACA0uE,EAGAA,EAAA95D,cAAAy1B,QAAA,mBAAAlH,GACA,MAAAA,GAAA,GAAAwkB,sBAIIgnB,KAAA,SAAAtxC,EAAAxpC,EAAAC,GACJ,YAEA,SAAAi5D,GAAA5Y,GACA,MAAAA,GAAA,UAGAtgD,EAAAC,QAAAi5D,OAEI6hB,KAAA,SAAAvxC,EAAAxpC,EAAAC,GACJ,YAOA,SAAA+6E,GAAAC,GACA,GAAA9pD,GAAAnK,EAAAQ,EAAA0zD,EAAAC,EAAAC,EAAAC,EAAA1uE,EACA2uE,EAAA,GAAAC,QACA,+FAEAC,EACA,oEACAxjE,EAAA,EAEA,KAAAsjE,EAAAjvC,KAAA4uC,GACA,SAAAhmD,OAAA,0DAGAtoB,GAAA,CACA,IACAuuE,EAAAM,EAAArvE,QAAA8uE,EAAAjgD,OAAAruB,MACAwuE,EAAAK,EAAArvE,QAAA8uE,EAAAjgD,OAAAruB,MACAyuE,EAAAI,EAAArvE,QAAA8uE,EAAAjgD,OAAAruB,MACA0uE,EAAAG,EAAArvE,QAAA8uE,EAAAjgD,OAAAruB,MAEAwkB,GAAA,GAAA+pD,IAAA,EAAAC,GAAA,IACAn0D,GAAA,GAAAm0D,IAAA,EAAAC,GAAA,KACA5zD,GAAA,EAAA4zD,IAAA,KAAAC,EAEArjE,GACAga,OAAAypD,aAAAtqD,IACAnK,EAAAgL,OAAAypD,aAAAz0D,GAAA,KACAQ,EAAAwK,OAAAypD,aAAAj0D,GAAA,UACG7a,EAAAsuE,EAAAvuE,OAEH,OAAAsL,GAhCA,GAAA0jE,GAAA,kBAAA1N,WAAAgN,CAmCAh7E,GAAAC,SACA+tE,KAAA,SAAAiN,GACA,MAAAS,GAAA7wE,KAAAyD,OAAA2sE,IAEAU,MAAAX,QAGIY,KAAA,SAAApyC,EAAAxpC,EAAAC,GACJ,YAiCA,IAAA84C,GAAAvP,EAAA,yBAEAxpC,GAAAC,SACA47E,oBACA/8D,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,qBACAvkB,QAAA,4CAEA22D,mCACAh9D,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,oCACAvkB,QACA,iPAEA42D,oCACAj9D,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,qCACAvkB,QAAA,6CAEA62D,oBACAl9D,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,qBACAvkB,QAAA,qCAEA82D,6BACAn9D,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,8BACAvkB,QAAA,+CAEA+2D,sDACAp9D,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,wDAEAyyC,oDACAr9D,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,qDACAvkB,QAAA,+DAEAi3D,yDACAt9D,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,0DACAvkB,QACA,uGAEAk3D,gDACAv9D,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,iDACAvkB,QAAA,oDAEAm3D,mDACAx9D,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,oDACAvkB,QAAA,iDAEAo3D,+BACAz9D,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,gCACAvkB,QAAA,0CAIG22B,yBAAA,KAA4B0gC,KAAA,SAAAhzC,EAAAxpC,EAAAC,GAC/B,YAoCA,SAAAknB,GAAArF,GAGA,MAAA46B,GACAC,QACAv7B,KAJA,kBAKAu3B,OAAA72B,EAAA62B,OACAiE,cAAA96B,EAAA86B,gBAEAnI,KAAA,WAGA,MAFA,IAAAgoC,GAAA36D,GAEA46D,YAAA56D,KAWA,QAAA66D,KACA,SAtDA,GAAAjgC,GAAAlT,EAAA,uCACA4N,EAAA5N,EAAA,2BACAizC,EAAAjzC,EAAA,oBAuDAxpC,GAAAC,SACAknB,OAAAiwB,EAAAjwB,GACAw1D,cAKAz/B,QA7DA,YAgEGC,sCAAA,GAAAy/B,oBAAA,IAAAzgC,0BAAA,KAA8F0gC,KAAA,SAAArzC,EAAAxpC,EAAAC,GACjG,YA2NA,SAAAw8E,GAAA36D,GACAzT,KAAAyuE,mBAAAh7D,EAAAopC,kBAKA78C,KAAA0uE,wBAAAt7D,QAAAK,EAAAk7D,wBA/NA,GAAAhkC,GAAAxP,EAAA,oBACA8L,EAAA9L,EAAA,iBAAA8L,OACAwH,EAAAtT,EAAA,iCACAyT,EAAAzT,EAAA,4BACAe,EAAAf,EAAA,kBACA6J,EAAA7J,EAAA,+BACA4N,EAAA5N,EAAA,2BACAuP,EAAAvP,EAAA,0BACAyV,EAAAzV,EAAA,qCACAyP,EAAAzP,EAAA,YACAya,EAAAza,EAAA,8BACA8oC,EAAA9oC,EAAA,iCACAkW,EAAAlW,EAAA,oCACA0P,EAAA1P,EAAA,kBACA0vB,EAAA1vB,EAAA,kBACA2P,EAAA3P,EAAA,mCACAqd,EAAArd,EAAA,sBAEA63B,EAAA73B,EAAA,oBAAA63B,uBAEA4b,GACA,SACA,WACA,2CA2MAR,GAAA9xE,UAAA+xE,YAAA,SAAA56D,GACA,GAAAuzB,EAyDA,OAvDAvzB,GAAA62B,QACAtD,EAAAvzB,EAAA62B,OAAAW,mBACAjrC,KAAA6uE,2BACAC,YAAA9nC,EAAAiK,yBACAyC,YAAA1M,EAAAkE,qBAAAwI,eAGA1M,EAAAqK,EAAA59B,EAAA86B,eACAvuC,KAAA6uE,2BACAC,YAAA9nC,EAAAtK,MAAAuU,yBACAyC,YAAA1M,EAAA0M,cAIA1zC,KAAA6vD,eAAAphB,EACA31B,QACAy1B,cAAA96B,EAAA86B,cACAjE,OAAA72B,EAAA62B,OACAoE,MAAAj7B,EAAAi7B,MACAC,UAAAC,EAAA91B,OAAArF,EAAA86B,eACAx7B,KAAA,oBAEAqzB,KACA,SAAAkE,GAmBA,MAlBAtqC,MAAA+vC,eAAAzF,EAAAW,mBAKAjrC,KAAAyuE,qBACAzuE,KAAA+vC,eAAA7E,qBAAAwR,eAIA,IADA18C,KAAA+vC,eAAA7E,qBAAAuR,OACAsyB,uBAEA/uE,KAAAgvE,YAAA,GAAAtkC,GACAE,EAAA6iC,oCANAztE,KAAAgvE,YAAA,GAAAtkC,GAAAE,EAAA4iC,qBAWAxtE,KAAAgvE,YACA9yC,EAAAgB,OAAAl9B,KAAAgvE,cAGArkC,EAAAgC,UAAArC,EAAA,+BACAtqC,KAAAivE,qBAAAjvE,KAAAkvE,mBAAA5kC,GAEAA,IACO5zB,KAAA1W,OAKPyT,EAAA62B,OACAtqC,KAAA6vD,eAAAzpB,KACA,WACA,MAAApmC,OACO0W,KAAA1W,OAIPk8B,EAAAhV,QAAAlnB,OAGAouE,EAAA9xE,UAAA4yE,mBAAA,SAAA5kC,GACA,GAAA6kC,GAAA,GAAAnqC,GACAgC,EAAAsD,EAAAW,mBACAmkC,EAAAplE,WAAA,WACA2gC,EAAAgC,UAAArC,EAAA,2CACA6kC,EAAAjyC,OACA,GAAAwN,GACAE,EAAAkjC,sDAGG9a,EA8BH,OA5BAhzD,MAAAqvE,WACAroC,EAAAkE,qBAAAuR,OAAA9N,UAAA,cACA3uC,KAAAsvE,SAAAtoC,EAAAiL,QAEAjyC,KAAAuvE,iBACAvvE,KAAAqvE,WACA,6BACAxkB,EAAA7qD,KAAAsvE,UACA,QAEArL,EAAAnrD,QAEA/F,KAAA,yBACAkuD,iBACAjhE,KAAAqvE,WACA,uBACAxkB,EAAA7qD,KAAAsvE,UACA,QACApO,aAAAlhE,KAAAuvE,kBAEA,SAAAC,GACAxvE,KAAAyvE,cAAAD,EACAvlE,aAAAmlE,GAEAD,EAAAjoD,WACKxQ,KAAA1W,OAGLmvE,GAkJAf,EAAA9xE,UAAAozE,cAAA,SAAAj8D,GACA,MAAAA,IAAAmiC,EAAA+5B,eAAAn0E,eAAAiY,EAAAm8D,OAMAjlC,EAAAgC,UAAA3sC,KAAA6vD,eAAA,iCAEA7vD,KAAA6vE,uBAAAp8D,GAAA2yB,KAAA,SAAAsG,GASA,MANA,aAAAj5B,EAAAm8D,KACAljC,EAAAojC,gBAAA5K,YAAAjkC,MAAA,aAEAyL,EAAAqjC,eAAAC,WAbA9zC,EAAAgB,OACA,GAAAwN,GAAAE,EAAAgjC,+BAmBAQ,EAAA9xE,UAAAuzE,uBAAA,SAAAp8D,EAAAuzB,GACA,GAAA5d,GAAAppB,KACAwsC,EAAA,iBAAAoJ,EAAA+5B,eAAAl8D,EAAAm8D,KAUA,cARA5vE,MAAAiwE,wBAEAjpC,SAEA,IAAAvzB,EAAAy8D,aACAvlC,EAAAgC,UAAA3sC,KAAA6vD,eAAA,kCAGA7vD,KAAA6vD,eACAzpB,KAAA,SAAAkE,GACA,MAAAA,GACAiC,SACAC,WACA/C,OAAA,OACAxhC,KAAAmhB,EAAA+mD,2BAAA18D,EAAAuzB,KAEAZ,KAAA,SAAAn+B,GAGA,MAFAmhB,GAAA6mD,wBAAAx8D,EAAA28D,OAEAnoE,MAGA09B,MAAA,SAAA/wB,GACA,GAAAD,EAEA,OAAAyU,GAAA4lD,YACA9yC,EAAAgB,OAAA9T,EAAA4lD,cAGAr6D,EAAAC,EAAAulB,SAAAvlB,EAAAulB,QAAA2W,WAEA,MAAAn8B,EACAunB,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAAsjC,8BAAAz9D,KACA4qB,KAAAuP,EAAAsjC,8BAAA7yC,KACAvkB,QAAA8zB,EAAAsjC,8BAAAp3D,QACAqjB,SACA0S,cAAAj4B,MAMAsnB,EAAAgB,OACA0T,EAAAh8B,GACAnE,KAAAm6B,EAAA+iC,mBAAAl9D,KACA4qB,KAAAuP,EAAA+iC,mBAAAtyC,KACAvkB,QAAA8zB,EAAA+iC,mBAAA72D,eAmCAs3D,EAAA9xE,UAAA+zE,4BAAA,SAAA58D,GACA,GAAA68D,GACAlnD,EAAAppB,IAEA,OAAAA,MAAAuwE,mCACA5lC,EAAAgC,UACA3sC,KAAA6vD,eACA,yEAGA3zB,EAAAgB,OACA,GAAAwN,GACAE,EAAAqjC,sDAKAW,EAAAvxE,QAAA,SAAAmzE,GACA/8D,EAAAjY,eAAAg1E,KACAF,EAAAE,KAIAF,EACAp0C,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAAijC,qDAAAp9D,KACA4qB,KAAAuP,EAAAijC,qDAAAxyC,KACAvkB,QAAA,kBAAAw5D,EAAA,mBAKAtwE,KAAAuwE,mCAAA,EACAvwE,KAAAywE,kBAAAh9D,GAEAA,EAAAwzB,KAAqBxzB,GACrBm8D,KAAA,aAGAjlC,EAAAgC,UACA3sC,KAAA6vD,eACA,uDAGA7vD,KAAA0wE,6CACAtqC,KAAA,WACA,GAAAuqC,GAAA,GAAA3rC,GACA4rC,EAAAxnD,EACAymD,uBAAAp8D,GACAo9D,UAAAznD,EAAA0nD,0BAAA,kBACAC,UAAA3nD,EAAA0nD,0BAAA,kBAEA1qC,KAAA,SAAAsG,GACA,GAAAw4B,GAAAx4B,EAAAojC,gBAAA5K,WAIA,OAFA97C,GAAAqmD,cAAA9M,SAAAuC,GAEAyL,GAQA,OALAvnD,GAAAqmD,cAAA11C,QAEA3Q,EAAA4nD,4BAAAL,IAGAC,IAEAjrC,MAAA,SAAA/wB,GAIA,MAHAwU,GAAAmnD,mCAAA,EACAnnD,EAAA6nD,uBAEA,+BAAAr8D,EAAAymB,MACAsP,EAAAgC,UACAvjB,EAAAymC,eACA,oEAGA3zB,EAAAgB,OACA,GAAAwN,GACAE,EAAAojC,mDAKA5kD,EAAAqmD,eACArmD,EAAAqmD,cAAApwD,QAIAzK,EAAAymB,MACAzmB,EAAAymB,KAAAv9B,QAAA,uCAEA6sC,EAAAgC,UACAvjB,EAAAymC,eACA,uEAGA3zB,EAAAgB,OACA,GAAAwN,IACArP,KAAAuP,EAAAmjC,wDACA1yC,KACA5qB,KAAAm6B,EAAAmjC,wDACAt9D,KACAqG,QACA8zB,EAAAmjC,wDACAj3D,QACAqjB,SACA0S,cAAAj4B,OAMAsnB,EAAAgB,OAAAtoB,MAEAwxB,KAAA,SAAAsG,GASA,MARAtjB,GAAAqmD,cAAApwD,QACA+J,EAAAmnD,mCAAA,EACAnnD,EAAA6nD,uBACAtmC,EAAAgC,UACAvjB,EAAAymC,eACA,yDAGA3zB,EAAAhV,QAAAwlB,QAIA0hC,EAAA9xE,UAAAm0E,kBAAA,SAAAh9D,GACAA,EAAAy9D,wBAIAlxE,KAAAmxE,iBACAnxE,KAAAmxE,eAAAl2E,SAAAiC,cAAA,OACA8C,KAAAmxE,eAAAn0C,aACA,wDACA,GAEAh9B,KAAAmxE,eAAAv0E,MAAA+wD,SAAA,QACA3tD,KAAAmxE,eAAAv0E,MAAA6P,IAAA,EACAzM,KAAAmxE,eAAAv0E,MAAAwyD,OAAA,EACApvD,KAAAmxE,eAAAv0E,MAAA4P,KAAA,EACAxM,KAAAmxE,eAAAv0E,MAAAuyD,MAAA,EACAnvD,KAAAmxE,eAAAv0E,MAAA6nE,OAAA,KACAzkE,KAAAmxE,eAAAv0E,MAAA8nE,WAAA,QACA1kE,KAAAmxE,eAAAv0E,MAAA6+D,QAAA,MACAz7D,KAAAmxE,eAAAh2E,iBACA,QACA,WACA6E,KAAAoxE,qCACO16D,KAAA1W,QAIP/E,SAAA6Q,KAAAqxB,YAAAn9B,KAAAmxE,kBAGA/C,EAAA9xE,UAAA20E,qBAAA,WACAjxE,KAAAmxE,gBAAAnxE,KAAAmxE,eAAAp0E,YAIAiD,KAAAmxE,eAAAp0E,WAAAC,YAAAgD,KAAAmxE,iBAYA/C,EAAA9xE,UAAA+0E,kCAAA,WAQA,MAPArxE,MAAAuwE,mCACA5lC,EAAAgC,UACA3sC,KAAA6vD,eACA,oEAIA7vD,KAAA0wE,6CAAAtqC,KACA,WACApmC,KAAAyvE,cAAApwD,SACK3I,KAAA1W,QAaLouE,EAAA9xE,UAAA80E,kCAAA,WACA,MAAApxE,MAAA0wE,6CAAAtqC,KACA,WACApmC,KAAAyvE,cAAAtiB,SACKz2C,KAAA1W,QAILouE,EAAA9xE,UAAA00E,4BAAA,SACAL,GAEA,GAAAvnD,GAAAppB,IAKA,iBAAA4U,EAAAy0C,GACAz0C,EACA+7D,EAAAzzC,OAAAtoB,GACKy0C,IACLjgC,EAAAqmD,cAAA9M,SAAAv5C,EAAAmmD,kBACAnmD,EACAkoD,iBACAC,aAAAloB,EAAAxtC,MACA21D,QAAAnoB,EAAAooB,QACAC,UAAAroB,EAAAsoB,YAEAvrC,KAAA,SAAA+7B,GACAwO,EAAAzpD,QAAAi7C,KAEAx8B,MAAA,SAAAisC,GACAjB,EAAAzzC,OAAA00C,QAMAxD,EAAA9xE,UAAAo0E,2CACA,WACA,GAAAtnD,GAAAppB,IAEA,OAAAA,MAAA6vD,eAAAzpB,KAAA,WACA,MAAAhd,GAAA6lD,wBAIAb,EAAA9xE,UAAAw0E,0BAAA,SAAAlP,GACA,GAAAiQ,GAAA7xE,KAAAyvE,cAAA1O,UAEA,OACA/gE,MAAAqvE,WACA,SACAzN,EACA/W,EAAA7qD,KAAAsvE,UACA,iBACAuC,GAiCAzD,EAAA9xE,UAAAg1E,gBAAA,SAAAQ,GACA,GAEAzoB,GAFAjgC,EAAAppB,KACA+xE,GAAA,EAEAt+D,GACAm8D,KACAkC,EAAAE,eAAAF,EAAAJ,UACA,QACA,WACAtB,OAAA0B,EAAA1B,QAAApwE,KAAAiwE,yBAEArE,GAEAqG,QAAAH,EAAAP,aACAS,aAAAF,EAAAE,aACAE,QAAAJ,EAAAN,QACAG,UAAAG,EAAAJ,UACAS,kBAAAL,EAAAK,kBAcA,OAXAL,GAAAt2E,eAAA,WACAu2E,EAAAD,EAAAM,OAGA3+D,EAAA2+D,MAAAL,EAEApnC,EAAAgC,UACA3sC,KAAA6vD,eACA,wCAGA7vD,KAAA6vD,eACAzpB,KAAA,SAAAkE,GACA,MAAAA,GAAAiC,SACAC,SAAA,kCACA/C,OAAA,OACAxhC,KAAAmhB,EAAAipD,oBAAA5+D,EAAAm4D,OAGAxlC,KAAA,SAAAsG,GAcA,MAbA2c,GAAAjgC,EAAAkpD,uBAAA5lC,GAEA/B,EAAAgC,UACAvjB,EAAAymC,eACA,wCAEAxG,EAAAkpB,wBACA5nC,EAAAgC,UACAvjB,EAAAymC,eACA,mCAIAxG,IAEA1jB,MAAA,SAAA/wB,GACA,MAAAwU,GAAA4lD,YACA9yC,EAAAgB,OAAA9T,EAAA4lD,cAGArkC,EAAAgC,UACAvjB,EAAAymC,eACA,uCAGA3zB,EAAAgB,OACA0T,EAAAh8B,GACAnE,KAAAm6B,EAAA8iC,mCAAAj9D,KACA4qB,KAAAuP,EAAA8iC,mCAAAryC,KACAvkB,QAAA8zB,EAAA8iC,mCAAA52D,eAuBAs3D,EAAA9xE,UAAAk2E,YAAA,WACA,MAAAxyE,MAAA6vD,eAAAzpB,KAAA,SAAAkE,GACA,MAAAA,GAAAW,mBAAAC,qBAAAuR,OAAAg2B,YAiEArE,EAAA9xE,UAAAo2E,cAAA,SAAAj/D,GACA,GAAAk/D,GAAA91C,EACA+1C,EAAA,GAAA5tC,GACArI,EAAAlpB,KAAAkpB,mBACAk2C,EACAl2C,EAAA,kBAAAA,EAAA,qBAmFA,OAjFAk2C,KACAA,EACA7yE,KAAA6uE,0BAAAC,aACA9uE,KAAA6uE,0BAAAC,YAAAjrC,MAAA,SAGA7jC,KAAA8yE,cAAA73E,SAAAiC,cAAA,UASAuW,EAAAwzB,MAGA7qC,WAAA,WAEAqX,SAEAA,GAAAkpB,eAOAlpB,EAAA2+D,MACA3+D,EAAA28D,OAAA38D,EAAA28D,QAAA,YAEA38D,EAAA28D,OAAA38D,EAAA28D,QAAA,YACA38D,EAAAs/D,SAAAt/D,EAAAs/D,UAAA,OAGAl2C,EAAA,iCACA78B,KAAA8yE,cAAA75B,OAAA,WACA25B,EAAA1rD,WAGAxsB,OAAAusB,KAAA0V,GAAAt/B,QACA,SAAA+sD,GACApqD,KAAA8yE,cAAA91C,aACA,QAAAotB,EAAAjiB,QAAA,cACAxL,EAAAytB,KAEK1zC,KAAA1W,OAIL2yE,EADAl/D,EAAA,aACAyoB,EAAAhV,QAAAzT,EAAA,cAEAzT,KAAAwyE,cAGAG,EAAAvsC,KACA,SAAAvzB,GACAY,EAAA,aAAAZ,EAEA7S,KAAA0uE,yBAAAmE,IACA7yE,KAAA8yE,cAAA91C,aAAA,qBAAA61C,GAGA7yE,KAAAgzE,qBACAngE,KACAggE,cACAhnD,OAAA8Q,EAAA9Q,OACAknD,SAAAt/D,EAAAs/D,SACAvgC,WAAA/+B,EAAA,kBAIAzT,KAAA8yE,cAAAj2C,IAAA2b,EAAAC,SAAA5b,EAAAppB,GACAxY,SAAAuC,KAAAJ,aACA4C,KAAA8yE,cACA73E,SAAAuC,KAAAy1E,oBAEKv8D,KAAA1W,OAGL4yE,EAAAxsC,KACA,WACA,MAAApmC,OACK0W,KAAA1W,QAILouE,EAAA9xE,UAAA02E,oBAAA,SAAAv/D,GACA,GAAA84B,GACA15B,EAAAY,EAAAZ,GACAggE,EAAAp/D,EAAAo/D,YACAriD,EAAAxwB,KAAA6uE,0BAAAn7B,YACAw/B,EAAA,eAAA1iD,EAAA,cACAiG,EAvlCA,oDAulCA0R,QAAA,QAAiD+qC,GACjDC,GACAC,YAAAvgE,EACAwgE,gBAAAR,EAGAp/D,GAAAoY,SACAsnD,EAAAtnD,OAAApY,EAAAoY,QAEApY,EAAAs/D,WACAI,EAAAJ,SAAAt/D,EAAAs/D,UAEAt/D,EAAA++B,aACA2gC,EAAA,eAAA1/D,EAAA++B,YAGAjG,EAAA,GAAAwa,gBACAxa,EAAAxS,KAAA,MAAAye,EAAAC,SAAAhiB,EAAA08C,IACA5mC,EAAAiN,QAGA40B,EAAA9xE,UAAA6zE,2BAAA,SACA18D,EACAuzB,GAEA,GAAA/tB,GACAiyB,EAAAlrC,KAAA+vC,eAAA7E,qBAIAklC,EAAA38D,EAAA28D,OACAN,GAGAe,UAAA7pC,EAAA6pC,WAAA,2CACAE,UAAA/pC,EAAA+pC,WAAA,2CACAuC,mBAAA,IAAA7/D,EAAAy8D,YACArzB,kBAAA78C,KAAAyuE,mBACA8E,mBACAC,UAAA//D,EAAA64B,aAAApB,EAAAuR,OAAAnQ,YACAmnC,WAAAhgE,EAAA6G,OACAo5D,aAAAjgE,EAAAkgE,uBAAA9yD,WACA+yD,iBAAA,IAAAngE,EAAAogE,wBACAC,gBAAArgE,EAAAqgE,iBAEAC,gBAAAtgE,EAAAsgE,gBAGA,iBAAAtgE,EAAAm8D,KAAA,CACAE,EAAAjkD,OAAApY,EAAAoY,OACAikD,EAAAnzB,gBAAAlpC,EAAAs/D,SACAjD,EAAAkE,wBAAAvgE,EAAAugE,wBAEA5D,IAIA,YAAAA,IACAA,EAAA,QAEAN,EAAAM,UAGA38D,EAAAjY,eAAA,eACAs0E,EAAAmE,UAAAxgE,EAAAwgE,WAGAxgE,EAAAjY,eAAA,8CACAs0E,EAAAoE,yCACAzgE,EAAAygE,0CAGAzgE,EAAAjY,eAAA,qBACAs0E,EAAAiE,gBAAAtgE,EAAAsgE,gBAGA,KAAA96D,IAAAxF,GAAA0gE,wBACA1gE,EAAA0gE,wBAAA34E,eAAAyd,KACA62D,EAAA72D,GAAAxF,EAAA0gE,wBAAAl7D,GAIAxF,GAAAjY,eAAA,6BACAs0E,EAAAsE,wBAAA3gE,EAAA2gE,6BAGAtE,GAAAuE,gBAAA5gE,EAAA0gE,wBAEA1gE,EAAA6gE,8BACAxE,EAAAvwB,YAAA9rC,EAAA6gE,4BAcA,OALAt0E,MAAAu0E,mBAAA9gE,EAAA+gE,kBACA/gE,EAAA+gE,oBACA1E,EAAA2E,cAAAz0E,KAAAu0E,oBAGAzE,GAGA1B,EAAA9xE,UAAA+1E,oBAAA,SAAA5+D,EAAAm4D,GACA,GAAA9wB,GAAA96C,KAAA+vC,eACA7E,EAAA4P,EAAA5P,qBACAwpC,EACA,qBAAA55B,EAAApE,kBACAi+B,EAAA,UAAAlhE,EAAAm8D,KACA6E,EACAz0E,KAAAu0E,oBAAA3I,EAAAoG,cAAApG,EAAAqG,QACAhqE,GACA2sE,eACAH,gBACAhhE,SACA+uC,SAAAmyB,IAAAD,GAAAjhE,EAAA2+D,QAsBA,OAjBAuC,GACA1sE,EAAA2sE,cAAAC,sBAAAjJ,EAAAoG,cAEA/pE,EAAA2sE,cAAArD,aAAA3F,EAAA+F,UACA1pE,EAAA2sE,cAAA1C,QAAAtG,EAAAsG,QACAjqE,EAAA2sE,cAAAE,WACA5pC,EAAAuR,OAAAs4B,iBAEAthE,EAAA28D,SACAnoE,EAAA2sE,cAAAxE,OAAA38D,EAAA28D,SAIApwE,KAAAyuE,qBACAxmE,EAAA40C,kBAAA78C,KAAAyuE,oBAGAxmE,GAGAmmE,EAAA9xE,UAAAg2E,uBAAA,SAAA5lC,GACA,GAAA2c,GACAzuC,IA4BA,OA1BA8xB,GAAAid,iBACA/uC,EAAA8xB,EAAAid,eAAA,IAGAN,GACAhV,MAAAz5B,EAAAy5B,MACAla,WACA1pB,KAAAmK,EAAAnK,MAGAmK,EAAAuf,SAAAvf,EAAAuf,QAAA66C,YACA3rB,EAAAlvB,QAAAvf,EAAAuf,QAAA66C,WAGAp6D,EAAAuf,SAAAvf,EAAAuf,QAAAo4C,yBACAlpB,EAAAkpB,uBAAA33D,EAAAuf,QAAAo4C,wBAGA33D,EAAAuf,SAAAvf,EAAAuf,QAAA86C,mBACA5rB,EAAA4rB,iBAAAr6D,EAAAuf,QAAA86C,kBAGAr6D,EAAAuf,SAAAvf,EAAAuf,QAAA+6C,qBACA7rB,EAAA6rB,mBAAAt6D,EAAAuf,QAAA+6C,oBAGA7rB,GAeA+kB,EAAA9xE,UAAAixC,SAAA,WACA,GAAAnkB,GAAAppB,IAQA,OANA8qC,GAAA9qC,KAAA6qC,EAAAujC,EAAA9xE,YAEA0D,KAAA8yE,eAAA9yE,KAAA8yE,cAAA/1E,YACAiD,KAAA8yE,cAAA/1E,WAAAC,YAAAgD,KAAA8yE,eAGA9yE,KAAAivE,qBACAtpC,MAAA,cAGAS,KAAA,WACA,MAAAhd,GAAAqmD,cAIArmD,EAAAqmD,cAAAliC,WAHArR,EAAAhV,aAOAv1B,EAAAC,QAAAm3C,EAAAK,cAAAglC,KAEG5gC,mBAAA,GAAAkH,gBAAA,GAAAjH,yBAAA,GAAAkH,mBAAA,IAAAjH,kCAAA,IAAAkH,oCAAA,IAAA7F,2BAAA,IAAA8F,mCAAA,IAAA7F,gCAAA,IAAAmmC,gCAAA,IAAAxnC,iBAAA,IAAAC,iBAAA,IAAAwnC,qBAAA,IAAAC,iBAAA,IAAAC,6BAAA,IAAAznC,WAAA,IAAAs9B,8BAAA,GAAAr9B,0BAAA,KAA8fynC,KAAA,SAAAp6C,EAAAxpC,EAAAC,GACjgB,YAEAD,GAAAC,SACA4jF,mBAAA,yBACA7F,gBACA8F,SAAA,0BACArD,MAAA,iCAIIsD,KAAA,SAAAv6C,EAAAxpC,EAAAC,GACJ,YAuBA,SAAA+jF,GAAAliE,GACA3S,EAAAtE,KAAAwD,MAEAA,KAAAqqC,QAAA52B,EAAA62B,OACAtqC,KAAAuqC,eAAA92B,EAAA+2B,cACAxqC,KAAA41E,eAAAniE,EAEAzT,KAAAqqC,SACArqC,KAAAsvE,SAAAtvE,KAAAqqC,QAAAY,mBAAAgH,QACAjyC,KAAAqvE,WACArvE,KAAAqqC,QAAAY,mBAAAC,qBAAAyD,YAEA3uC,KAAAsvE,SAAAl8D,QAAAK,EAAAw+B,SACAjyC,KAAAqvE,WAAA57D,EAAAk7B,WAEA3uC,KAAAqvE,WAAArvE,KAAAqvE,WAAA,QAAAxgC,EApCA,GAAA5H,GAAA9L,EAAA,uBAAA8L,OACA0D,EAAAxP,EAAA,0BACAuP,EAAAvP,EAAA,gCACAe,EAAAf,EAAA,wBACAyU,EAAAzU,EAAA,mCACA6J,EAAA7J,EAAA,+BACAr6B,EAAAq6B,EAAA,4BACAyP,EAAAzP,EAAA,uBACAy2B,EAAAz2B,EAAA,sBACAk1B,EAAAl1B,EAAA,YACAya,EAAAza,EAAA,0BACA+M,EAAA/M,EAAA,mBACAm3B,EAAAn3B,EAAA,uBACA0vB,EAAA1vB,EAAA,wBACAyjC,EACAzjC,EAAA,0BAAAyjC,gCAEA/vB,EAAA,QAsBA/tC,GAAA8jC,YAAA+wC,GAEAA,EAAAr5E,UAAAyuC,eAAA,WACA,MAAA/qC,MAAAqqC,QACAnO,EAAAhV,UAGAlnB,KAAAuqC,eAAAnE,KACA,SAAAkE,GACAtqC,KAAAqqC,QAAAC,GACK5zB,KAAA1W,QAIL21E,EAAAr5E,UAAAu5E,oBAAA,WACA,SAAAnrC,GAAAE,EAAAkrC,2CAGAH,EAAAr5E,UAAAy5E,WAAA,SAAAtiE,EAAAuiE,GACA,GAAAC,GAAAt3D,EACAyK,EAAAppB,IAMA,OAJAg2E,UAEAr3D,EAAA3e,KAAAk2E,yBAAAziE,EAAAuiE,IAGA95C,EAAAgB,OAAAve,IAGA3e,KAAAm2E,uBAAA,EAEAF,EAAAj2E,KAAAo2E,yBAAA3iE,GAEAzT,KAAAq2E,kBAAAJ,GACA7vC,KAAA,SAAAn+B,GAMA,MALA0iC,GAAAgC,UACAvjB,EAAAmhB,eACA,4CAGAnhB,EAAAktD,eAAAL,EAAA5hC,MAAApsC,KAEAm+B,KAAA,SAAAsG,GAOA,MANA/B,GAAAgC,UACAvjB,EAAAmhB,eACA,gDACAmC,EAAA6pC,OAAAC,qBAGAptD,EAAAqtD,kBAAA/pC,EAAAupC,KAEA7vC,KAAA,SAAAsG,GACA,MAAAtjB,GAAAstD,sCACAhqC,EACAupC,KAGA7vC,KAAA,SAAAijB,GAQA,MAPAjgC,GAAAutD,0BAEAhsC,EAAAgC,UACAvjB,EAAAmhB,eACA,8CAGA8e,IAEA1jB,MAAA,SAAA/wB,GAQA,MAPAwU,GAAAutD,0BAEAhsC,EAAAgC,UACAvjB,EAAAmhB,eACA,2CAGArO,EAAAgB,OAAAtoB,OAIA+gE,EAAAr5E,UAAAs6E,2CACA,WACA,SAAAlsC,GAAAE,EAAAkrC,2CAGAH,EAAAr5E,UAAAu6E,kBAAA,WACA,SAAAnsC,GAAAE,EAAAkrC,2CAGAH,EAAAr5E,UAAAw6E,cAAA,WACA,SAAApsC,GAAAE,EAAAkrC,2CAGAH,EAAAr5E,UAAAq6E,wBAAA,WACA32E,KAAAm2E,uBAAA,EACAn2E,KAAA+2E,uBAAA,MAGApB,EAAAr5E,UAAAg6E,eAAA,SAAAjiC,EAAApsC,GACA,GAAAmhB,GAAAppB,KACAy2B,EAAA,mBAAA4d,EAAA,wBAEA,OAAAr0C,MAAA+qC,iBAAA3E,KAAA,WACA,MAAAhd,GAAAihB,QACAkC,SACAC,SAAA/V,EACAgT,OAAA,OACAxhC,SAEA09B,MAAA,SAAA/wB,GACA,GAEAoiE,GAFAriE,EAAAC,KAAAulB,SAAAvlB,EAAAulB,QAAA2W,WACAmmC,EAAA,gDAeA,OAZA,OAAAtiE,GACAqiE,EAAApsC,EAAAssC,8CACAD,GAAA,QACS,MAAAtiE,GACTqiE,EAAApsC,EAAAusC,gCACAF,GAAA,QAEAD,EAAApsC,EAAAwsC,qBAGAzsC,EAAAgC,UAAAvjB,EAAAmhB,eAAA0sC,GAEA/6C,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAumE,EAAAvmE,KACA4qB,KAAA27C,EAAA37C,KACAvkB,QAAAkgE,EAAAlgE,QACAqjB,SACA0S,cAAAj4B,WAQA+gE,EAAAr5E,UAAA45E,yBAAA,SACAziE,EACAuiE,GAEA,GAAAqB,EAEA,YAAAr3E,KAAAm2E,sBACA,GAAAzrC,GAAAE,EAAA0sC,qCACG7jE,EAAA4gC,MAEA5gC,EAAAoY,SACHwrD,EAAA,aAFAA,EAAA,UAKAA,IACAA,EAAAr3E,KAAA42E,2CACAnjE,EACAuiE,IAIAqB,EACA,GAAA3sC,IACAj6B,KAAAm6B,EAAA2sC,mCAAA9mE,KACA4qB,KAAAuP,EAAA2sC,mCAAAl8C,KACAvkB,QAAA,mCAAAugE,EAAA,MAIA,OAGA1B,EAAAr5E,UAAAo6E,sCAAA,SACAc,EACA/jE,GAEA,GAAA2V,GAAAppB,IAaA,OAXAyT,SAEAzT,KAAAy3E,qBAAAD,EAAAzuB,cAKA3/B,EAAA2tD,uBACA3tD,EAAA2tD,wBAAA,GAAA/xC,GACA5b,EAAAsuD,sBAAAF,EAAA/jE,GAEA2V,EAAA2tD,uBAAA3wC,KAAA,SAAAijB,GAYA,MAXA1e,GAAAgC,UACAvjB,EAAAmhB,eACA,sDACA5mB,OAAA0lC,EAAAsuB,mBAEAhtC,EAAAgC,UACAvjB,EAAAmhB,eACA,6DACA5mB,OAAA0lC,EAAAuuB,yBAGAvuB,KAIAssB,EAAAr5E,UAAAo7E,sBAAA,SACAF,EACA/jE,GAEA,GAGA0mB,GAHA09C,EAAAzkE,QACAokE,EAAAjB,QAAAiB,EAAAjB,OAAAuB,OAIAntC,GAAAgC,UACA3sC,KAAAuqC,eACA,wDACA5mB,OAAAk0D,IAGAA,EACA73E,KAAA62E,kBAAAW,EAAA/jE,IAEA0mB,EAAAn6B,KAAA+3E,oBACAP,EAAAzuB,cACAyuB,EAAAx3B,kBAEA7lB,EAAA69C,oBAAAR,EAAAx3B,iBAEAhgD,KAAA+2E,uBAAA7vD,QAAAiT,KAIAw7C,EAAAr5E,UAAAm6E,kBAAA,SAAA/pC,GAIA,MAHA1sC,MAAAy3E,qBAAA/qC,EAAAqc,cACA/oD,KAAA+2E,uBAAA,GAAA/xC,GAEA9I,EAAAhV,QAAAwlB,IAGAipC,EAAAr5E,UAAAy7E,oBAAA,SACAhvB,EACA/I,GAEA,OACA3L,MAAA0U,EAAA1U,MACA5jC,KAAAs4C,EAAAt4C,KACA2uC,QAAA2J,EAAA3J,QACAjlB,QAAA4uB,EAAA5uB,QACAolB,YACAwJ,EAAAxJ,aACAwJ,EAAAxJ,YAAApX,QAAA,WACAwvC,iBAAA33B,KAAA23B,iBACAC,uBACA53B,KAAA43B,uBACA53B,iBAAA+I,EAAA/I,mBAIA21B,EAAAr5E,UAAA85E,yBAAA,SAAA3iE,GACA,MAAAwzB,MAAkBxzB,IAGlBkiE,EAAAr5E,UAAA+5E,kBAAA,SAAA5iE,GACA,GAAAxL,IACA4jB,OAAApY,EAAAoY,OAGA,OAAAqQ,GAAAhV,QAAAjf,IAGA0tE,EAAAr5E,UAAA27E,sBAAA,SAAAhwE,GACA,GAAAiwE,GAAAr5D,KAAAC,MAAA7W,EAAAkwE,cAEAD,GAAAE,QACAp4E,KAAA+2E,uBAAA7vD,QACAlnB,KAAA+3E,oBACAG,EAAAnvB,cACAmvB,EAAAl4B,mBAIAk4B,EAAAl4B,kBACAk4B,EAAAl4B,iBAAA43B,uBAEA53E,KAAA+2E,uBAAA7vD,QACAlnB,KAAA+3E,oBACA/3E,KAAAy3E,qBACAS,EAAAl4B,mBAIAhgD,KAAA+2E,uBAAA75C,OACA,GAAAwN,IACAj6B,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,wBACAvkB,QAAAohE,EAAAv5D,MAAA7H,YAMA6+D,EAAAr5E,UAAA+7E,iBAAA,WACA,GAAA3rC,GAAAsT,CAIA,OAFAhgD,MAAAm2E,uBAAA,EAEAn2E,KAAAy3E,sBAMAz3B,EAAAhgD,KAAAy3E,qBAAAz3B,iBAEAtT,EAAAzF,KAAsBjnC,KAAAy3E,sBACtBG,uBACA53B,KAAA43B,uBACAD,iBAAA33B,KAAA23B,iBACAK,oBACAh4B,KAAAg4B,sBAGA97C,EAAAhV,QAAAwlB,IAfAxQ,EAAAgB,OACA,GAAAwN,GAAAE,EAAA0tC,mCAiBA3C,EAAAr5E,UAAAi8E,YAAA,SAAA9kE,GACA,GAAAqnC,GAAA96C,KAAAqqC,QAAAY,mBACAutC,EAAAv4E,OAAAmsC,SAAA5O,KAAAqG,MAAA,QACA2zC,EAAA/jE,EAAA+jE,eACAlnB,EAAApoB,IACAuwC,EAAA,GAAApoB,IACAC,UACAC,aAAA3gB,IAEA8oC,EACA14E,KAAAqvE,WACA,mEACAvD,mBAAAxb,GACA,GAqBA,OAnBAmoB,GAAA7nD,GAAAguC,EAAA,SAAA/L,GACAA,GACA/X,sBACAzG,MAAA5gC,EAAA4gC,MACAyjC,OAAAN,EAAAM,OACAa,MAAAnB,EAAAmB,MACAC,QACApB,EAAAoB,QACA,2BACA/pC,EACA,qCACAi9B,mBAAA4M,GACAG,GAAArB,EAAAqB,GACAC,UAAAN,MAIAC,EAAA7nD,GAAA0hC,EAAAymB,wBAAAtlE,EAAAulE,oBAEAP,GAGA9C,EAAAr5E,UAAA28E,eAAA,SAAAxlE,GACA,GAAAgjB,GACAz2B,KAAAqvE,WACA,kCACAxkB,EAAA7qD,KAAAsvE,UACA,oBACA77D,EAAAylE,UASA,OARAtnB,IACA/0B,IAAApG,EACAvtB,OAzYA,IA0YAF,MAzYA,IA0YA+J,KAAA6iC,EAAA4/B,mBAAA,IAAAx1E,KAAAm5E,OAAA7oB,QACAhgC,MAAA,mCAMAqlD,EAAAr5E,UAAA88E,iBAAA,SAAA3lE,GACAzT,KAAAm5E,OAAAn5E,KAAAu4E,YAAA9kE,GACAzT,KAAAq5E,UAAAr5E,KAAAi5E,eAAAxlE,IAGAkiE,EAAAr5E,UAAAg9E,oBAAA,WACAt5E,KAAAm5E,SACAn5E,KAAAm5E,OAAA5rC,WACAvtC,KAAAm5E,OAAA,MAGAn5E,KAAAq5E,WAAAr5E,KAAAq5E,UAAAt8E,aACAiD,KAAAq5E,UAAAt8E,WAAAC,YAAAgD,KAAAq5E,WACAr5E,KAAAq5E,UAAA,MAGAr5E,KAAAu5E,aACAt+E,SAAAe,oBAAA,QAAAgE,KAAAu5E,YACAv5E,KAAAu5E,WAAA,OAIA5D,EAAAr5E,UAAAixC,SAAA,WAKA,MAJA5C,GAAAgC,UAAA3sC,KAAAuqC,eAAA,qCAEAvqC,KAAAs5E,sBAEAp9C,EAAAhV,WAGAv1B,EAAAC,QAAA+jF,IAEG6D,yBAAA,GAAA70B,sBAAA,GAAA80B,+BAAA,GAAAC,yBAAA,IAAAC,kCAAA,IAAAC,uBAAA,IAAAC,uBAAA,IAAAC,yBAAA,IAAA3T,sBAAA,IAAA4T,sBAAA,IAAA9iB,2BAAA,GAAAkU,8BAAA,GAAAjU,qBAAA,GAAAtgB,kBAAA,GAAAugB,SAAA,MAA4Z6iB,KAAA,SAAA7+C,EAAAxpC,EAAAC,GAC/Z,YAOA,SAAAqoF,GAAAxmE,GACAymE,EAAA19E,KAAAwD,KAAAyT,GAHA,GAAAymE,GAAA/+C,EAAA,aAMA8+C,GAAA39E,UAAA5B,OAAAoe,OACAohE,EAAA59E,WAEAuc,YAAAqhE,IAIAD,EAAA39E,UAAA69E,4BAAA,SACApzC,GAEA,GAAA5sB,GAAAlf,SAAAiC,cAAA,MA0BA,OAxBAid,GAAAigE,UACA,8kBAmBAjgE,EACApG,cAAA,iDACAopB,YAAA4J,GAEA5sB,GAGA8/D,EAAA39E,UAAA+9E,oCACA,SAAAC,GACA,GAAA7mE,GACAymE,EAAA59E,UAAA+9E,oCAAA79E,KACAwD,KACAs6E,EAKA,OAFA7mE,GAAA8mE,QAAAC,UAAA,aAEA/mE,GAGA9hB,EAAAC,QAAAqoF,IAEGQ,aAAA,MAAiBC,KAAA,SAAAv/C,EAAAxpC,EAAAC,GACpB,YAIA,SAAA+oF,GAAAlnE,GACAymE,EAAA19E,KAAAwD,KAAAyT,GAHA,GAAAymE,GAAA/+C,EAAA,aAMAw/C,GAAAr+E,UAAA5B,OAAAoe,OAAAohE,EAAA59E,WACAuc,YAAAqhE,IAGAS,EAAAr+E,UAAA69E,4BAAA,SACApzC,GAEA,GAAA5sB,GAAAlf,SAAAiC,cAAA,OACA09E,EAAAxnE,QACApT,KAAA41E,gBACA51E,KAAA41E,eAAAiF,mBACA76E,KAAA41E,eAAAiF,kBAAAN,SACAv6E,KAAA41E,eAAAiF,kBAAAN,QAAAO,kBA8DA,OA3DA3gE,GAAAigE,UACA,yyBAiDAQ,IACAzgE,EAAApG,cACA,6CACAnX,MAAAC,QAAA,QAEAsd,EACApG,cAAA,iDACAopB,YAAA4J,GAEA5sB,GAGAxoB,EAAAC,QAAA+oF,IAEGF,aAAA,MAAiBM,KAAA,SAAA5/C,EAAAxpC,EAAAC,GACpB,YAEA,IAAAopF,GAAA7/C,EAAA,YACAw/C,EAAAx/C,EAAA,oBACA8+C,EAAA9+C,EAAA,sBACA8/C,EAAA9/C,EAAA,kBAEAxpC,GAAAC,SACAspF,OAAAF,EACAG,iBAAAR,EACAS,mBAAAnB,EACAoB,gBAAAJ,KAGGK,qBAAA,IAAAC,mBAAA,IAAAC,kBAAA,IAAAC,WAAA,MAAqFC,KAAA,SAAAvgD,EAAAxpC,EAAAC,GACxF,YAOA,SAAAqpF,GAAAxnE,GACAymE,EAAA19E,KAAAwD,KAAAyT,GANA,GAAAymE,GAAA/+C,EAAA,cACAuP,EAAAvP,EAAA,gCACAyP,EAAAzP,EAAA,uBACA89B,EAAA99B,EAAA,yBAMA8/C,GAAA3+E,UAAA5B,OAAAoe,OAAAohE,EAAA59E,WACAuc,YAAAqhE,IAGAe,EAAA3oB,OAAA2G,GACA,mCACA,4BAGAgiB,EAAA3+E,UAAAu5E,oBAAA,SAAAhjB,GACAqnB,EAAA59E,UAAAu5E,oBAAAr5E,KAAAwD,KAAA6yD,GAEA7yD,KAAA4wB,GACAqqD,EAAA3oB,OAAAqpB,gCACA,SAAAtyB,EAAAuyB,GACA/oB,EAAA,kCAAAxJ,EAAAuyB,MAKAX,EAAA3+E,UAAA+9E,oCAAA,SACAC,GAEA,GAAA7mE,GACAymE,EAAA59E,UAAA+9E,oCAAA79E,KACAwD,KACAs6E,EAKA,OAFA7mE,GAAA8mE,QAAAC,UAAA,SAEA/mE,GAGAwnE,EAAA3+E,UAAAu/E,mBAAA,WACA77E,KAAA0kC,MACAu2C,EAAA3oB,OAAAqpB,iCAEAz8E,QAAAc,KAAA87E,UAEA,eAMAb,EAAA3+E,UAAAy/E,iCAAA,WACA/7E,KAAAg8E,oBAAA,kBAAAh8E,KAAAi8E,eAAAvlE,KAAA1W,QAGAi7E,EAAA3+E,UAAA2/E,eAAA,SACAC,EACA/hD,EACAjT,EACAgW,GAEA,GAAAN,GAAAu/C,CAYA,IAVAD,GAAA/hD,EAEG,QAAAA,EAAAiiD,YACHD,GAAA,EAEA,aAAAhiD,EAAAlyB,KAAAo0E,MAAA,WAAAliD,EAAAlyB,KAAAo0E,OAEAF,GAAA,GANAA,GAAA,EASAA,EAGA,WAFAj/C,GAAA,GAAAwN,GAAAE,EAAA0xC,yCAKA1/C,GAAA3hC,SAAAiC,cAAA,OACA0/B,EAAAw9C,UAAA8B,EAEA,aAAA/hD,EAAAlyB,KAAAo0E,MACAz/C,EAAAhgC,MAAAC,QAAA,OACA5B,SAAA6Q,KAAAqxB,YAAAP,GACA1V,KACG,WAAAiT,EAAAlyB,KAAAo0E,MACHr8E,KAAA0kC,MACAu2C,EAAA3oB,OAAAqpB,iCAEAz8E,QAAA09B,GAEA,WACA1V,OAMAv1B,EAAAC,QAAAqpF,IAEGxB,+BAAA,GAAA8C,yBAAA,IAAApW,sBAAA,IAAAsU,aAAA,MAA0G+B,KAAA,SAAArhD,EAAAxpC,EAAAC,GAC7G,YAKA,SAAAopF,GAAAvnE,GACAkiE,EAAAn5E,KAAAwD,KAAAyT,GAJA,GAAAkiE,GAAAx6C,EAAA,UACAmN,EAAAnN,EAAA,wBAMA6/C,GAAA1+E,UAAA5B,OAAAoe,OAAA68D,EAAAr5E,WACAuc,YAAAmiE,IAGAA,EAAA1+E,UAAAu5E,oBAAA,aAIAmF,EAAA1+E,UAAAmgF,kCAAA,SACAC,GAcA,MAZAA,GAAA16B,eAAA26B,MAAAD,EAAA16B,eAAA46B,cACAF,EAAA16B,eAAA66B,MAAAH,EAAA16B,eAAA86B,gBACAJ,EAAA16B,eAAA+6B,KAAAL,EAAA16B,eAAAg7B,SACAN,EAAA16B,eAAAmf,MAAAub,EAAA16B,eAAAi7B,OACAP,EAAA16B,eAAAtW,YACAgxC,EAAA16B,eAAAk7B,wBACAR,GAAA16B,eAAA46B,oBACAF,GAAA16B,eAAA86B,sBACAJ,GAAA16B,eAAAg7B,eACAN,GAAA16B,eAAAi7B,aACAP,GAAA16B,eAAAk7B,kBAEAR,GAGA1B,EAAA1+E,UAAA6gF,cAAA,SAAA1pE,GACA,GAAA2V,GAAAppB,IAWA,OATAA,MAAAo5E,kBACA/kC,MAAA5gC,EAAA4gC,MACAmjC,eAAA/jE,EAAA+jE,eACA0B,WAAAzlE,EAAAylE,WACAF,mBAAA,SAAA/wE,GACAmhB,EAAAg0D,oBAAAn1E,EAAAwL,MAIAzT,KAAAq5E,WAGA2B,EAAA1+E,UAAA8gF,oBAAA,SAAAn1E,EAAAwL,GACAzT,KAAAm5E,OAAA5rC,WAEA95B,EAAA4pE,cAGA/0C,EACA,WACAtoC,KAAAi4E,sBAAAhwE,IACKyO,KAAA1W,UAILg7E,EAAA1+E,UAAAs6E,2CACA,SAAAnjE,GACA,GAAA4jE,EAQA,OANA,kBAAA5jE,GAAA6pE,SACAjG,EAAA,uBACK,kBAAA5jE,GAAA4pE,cACLhG,EAAA,0BAGAA,GAGA2D,EAAA1+E,UAAA85E,yBAAA,SAAA3iE,GACA,GAAA8pE,GAAA5H,EAAAr5E,UAAA85E,yBAAA55E,KACAwD,KACAyT,EAOA,OAJA8pE,GAAAD,SAAAh1C,EAAA70B,EAAA6pE,UACAC,EAAAF,YAAA/0C,EAAA70B,EAAA4pE,aACAE,EAAArE,YAAA,IAAAzlE,EAAAylE,WAEAqE,GAGAvC,EAAA1+E,UAAA+5E,kBAAA,SAAA5iE,GACA,GAAA2V,GAAAppB,IAEA,OAAA21E,GAAAr5E,UAAA+5E,kBACA75E,KAAAwD,KAAAyT,GACA2yB,KAAA,SAAAn+B,GAOA,MANAwL,GAAAipE,UAAAjpE,EAAAipE,SAAA16B,iBACA/5C,EAAAy0E,SAAAtzD,EAAAqzD,kCACAhpE,EAAAipE,WAIAz0E,KAIA+yE,EAAA1+E,UAAAu6E,kBAAA,SACAW,EACA/jE,GAEAA,EAAA6pE,SACA,KACAt9E,KAAAm9E,eACAjE,WAAAzlE,EAAAylE,WACA1B,iBAAAjB,OACAliC,MAAAmjC,EAAAzuB,cAAA1U,MACAgpC,YAAA5pE,EAAA4pE,gBAKA1rF,EAAAC,QAAAopF,IAEGwC,wBAAA,IAAAC,SAAA,MAAyCC,KAAA,SAAAviD,EAAAxpC,EAAAC,GAC5C,YAgCA,SAAAsoF,GAAAzmE,GACAkiE,EAAAn5E,KAAAwD,KAAAyT,GAEAzT,KAAA29E,gBAAA,EACA39E,KAAA49E,iBACAC,6BAAA,IACA/nC,WAAAD,EAAA,IAAAhH,GAEA7uC,KAAA89E,6BAAA,GAAA94C,GACAhlC,KAAA+9E,cAAAtqE,GACAzT,KAAAg+E,mBAsyBA,QAAAC,GAAAznD,EAAAxd,EAAAsnD,GACAtnD,EAAAsnD,EAAA,SAAA9pC,EAAAomD,cACA5jE,EAAAsnD,EAAA,SAAA9pC,EAAAsmD,gBACA9jE,EAAAsnD,EAAA,SAAA9pC,EAAA0nD,MACAllE,EAAAsnD,EAAA,QAAA9pC,EAAAwmD,SACAhkE,EAAAsnD,EAAA,SAAA9pC,EAAAymD,OACAjkE,EAAAsnD,EAAA,cAAA9pC,EAAAmjC,WACA3gD,EAAAsnD,EAAA,eAAA9pC,EAAA0mD,kBAr1BA,GAAAvH,GAAAx6C,EAAA,UACA8L,EAAA9L,EAAA,uBAAA8L,OACAqB,EAAAnN,EAAA,yBACAuP,EAAAvP,EAAA,gCACAyV,EAAAzV,EAAA,2CACAwP,EAAAxP,EAAA,0BACAqW,EAAArW,EAAA,uBACAyP,EAAAzP,EAAA,uBACA89B,EAAA99B,EAAA,0BACAya,EAAAza,EAAA,0BACAe,EAAAf,EAAA,wBACA6J,EAAA7J,EAAA,+BAEA63B,EACA73B,EAAA,0BAAA63B,uBACAnd,EAAA1a,EAAA,0BAAA0a,SACAhH,EAAA,SAEAsvC,GACA,WACA,YAKA,kBACA,mBACA,oBAgBAjE,GAAA59E,UAAA5B,OAAAoe,OAAA68D,EAAAr5E,WACAuc,YAAAqhE,IAGAA,EAAA5nB,OAAA2G,GAEA,kBACA,oBACA,WACA,YACA,kBACA,mBACA,qBAEA,uBAGAihB,EAAA59E,UAAAu5E,oBAAA,SAAAhjB,GACA7yD,KAAA4wB,GAAAspD,EAAA5nB,OAAA8rB,gBAAA,SAAAn2E,EAAA2zE,GACA/oB,EAAA,kBAAA5qD,EAAA2zE,KAEA57E,KAAA4wB,GAAAspD,EAAA5nB,OAAA+rB,kBAAA,WACAxrB,EAAA,uBAEA7yD,KAAA4wB,GAAAspD,EAAA5nB,OAAA,uBACAO,EAAA,gCAEA7yD,KAAA4wB,GAAAspD,EAAA5nB,OAAA,wBACAO,EAAA,iCAEA7yD,KAAA4wB,GAAAspD,EAAA5nB,OAAA,8BACAO,EAAA,wCAEA7yD,KAAA4wB,GAAAspD,EAAA5nB,OAAA,+BACAO,EAAA,uCAEA7yD,KAAA4wB,GAAAspD,EAAA5nB,OAAA,gCACAO,EAAA,yCAIAqnB,EAAA59E,UAAAw6E,cAAA,SAAArjE,GACA,GAAAxL,GAAAg/B,KAAsBxzB,GACtB2V,EAAAppB,IAEA,OAAAA,MAAAs+E,mBACAl4C,KAAA,SAAAvzB,GACA5K,EAAAs2E,cAAA1rE,IAEAuzB,KAAA,WACA,MAAAhd,GAAAo1D,2BAAA/qE,EAAAksC,OAEAha,MAAA,cAIAS,KAAA,WACA,MAAAhd,GAAA2hB,mBAEA3E,KAAA,WAMA,MALAn+B,GAAAw2E,eAAAr1D,EAAAw0D,gBACA31E,EAAAgpC,yBACA7nB,EAAAihB,QAAAY,mBAAAgG,yBACAhpC,EAAAiuC,wBAAA,iBAAArH,EAEA5mC,KAIAiyE,EAAA59E,UAAAo6E,sCAAA,SACAc,EACA/jE,GAEA,MAAAzT,MAAA+9E,gBAAA33C,KACA,WACA,MAAAuvC,GAAAr5E,UAAAo6E,sCAAAl6E,KACAwD,KACAw3E,EACA/jE,IAEKiD,KAAA1W,QAILk6E,EAAA59E,UAAAoiF,mBAAA,SAAAC,GACA3+E,KAAA29E,gBAAA,EACA39E,KAAA4+E,2BACAj0C,EAAAgC,UACA3sC,KAAAuqC,eACA,8BAAAo0C,GAGA3+E,KAAA6+E,kBACA7+E,KAAA6+E,iBAAA33D,WAIAgzD,EAAA59E,UAAAkiF,2BAAA,SAAA7+B,GACA,GAAAv2B,GAAAppB,KACA8+E,EAAAx1D,KAAAP,KAEA,OAAA42B,GAKA1/C,OAAA8+E,SAAAC,QAAA,cAAAr/B,GAAAvZ,KAAA,SACA64C,GAEA71D,EAAAw0D,gBAAAsB,sCACA51D,KAAAP,MAAA+1D,EACA11D,EAAAw0D,gBAAAuB,iCACAF,KAAAG,SATAljD,EAAAhV,WAaAgzD,EAAA59E,UAAA+iF,wBAAA,SACAC,EACAt9B,GAUA,MARAA,KAEAi8B,EAAAj8B,EAAAs9B,EAAA,WACAA,EAAAC,mBAAAv9B,EAAAw9B,YACAF,EAAAG,iBAAAz9B,EAAA09B,UACAJ,EAAAK,eAAA39B,EAAA49B,SAGAN,GAGApF,EAAA59E,UAAAujF,yBAAA,SACAP,GAEA,GAAAjL,GAAAiL,EAAAjL,eASA,OAPAA,KAEA4J,EAAA5J,EAAAiL,EAAA,kBAEAA,GAAAjL,iBAGAiL,GAGApF,EAAA59E,UAAA69E,4BAAA,SAAApzC,GACA,GAAA5sB,GAAAlf,SAAAiC,cAAA,MAUA,OARAid,GAAAigE,UACA,wFAGAjgE,EACApG,cAAA,wDACAopB,YAAA4J,GAEA5sB,GAGA+/D,EAAA59E,UAAAwjF,qBAAA,SAAA/4C,GAMA,QAAAg5C,KACA5lE,EAAApd,WAAAC,YAAAmd,GACAiP,EAAAivD,iBAAAztC,EAAAo1C,+BACA/kF,SAAAe,oBAAA,QAAAotB,EAAAmwD,YACAnwD,EAAAmwD,WAAA,KATA,GAAAp/D,GAAAna,KAAAm6E,4BAAApzC,GACAk5C,EAAA9lE,EAAApG,cAAA,6CACAmsE,EAAA/lE,EAAApG,cAAA,yCACAqV,EAAAppB,IAgCA,OAvBAA,MAAAu5E,WAAA,SAAAt8E,GACA,WAAAA,EAAAgc,KAIAkB,EAAApd,YAKAgjF,KAGAE,GACAA,EAAA9kF,iBAAA,QAAA4kF,GAGAG,GACAA,EAAA/kF,iBAAA,QAAA4kF,GAGA9kF,SAAAE,iBAAA,QAAA6E,KAAAu5E,YAEAp/D,GAGA+/D,EAAA59E,UAAAu/E,mBAAA,WACA5gF,SAAA6Q,KAAAqxB,YAAAn9B,KAAA87E,WAGA5B,EAAA59E,UAAA6jF,kCAAA,SACAl4E,GAEAjI,KAAAs5E,sBACAt5E,KAAA87E,SAAA/+E,WAAAC,YAAAgD,KAAA87E,UACA97E,KAAAi4E,sBAAAhwE,IAGAiyE,EAAA59E,UAAA8jF,gCAAA,SACA5I,GAEA,GAAApuD,GAAAppB,IAEAA,MAAAo5E,kBACA5B,iBACA0B,YAAA,EACAF,mBAAA,SAAA/wE,GACAmhB,EAAA+2D,kCAAAl4E,MAGAjI,KAAA87E,SAAA97E,KAAA8/E,qBAAA9/E,KAAAq5E,WACAr5E,KAAA67E,sBAGA3B,EAAA59E,UAAAyhF,cAAA,SAAAzD,GACA,GAAAlxD,GAAAppB,KACAqgF,EAAA/2D,KAAAP,KAEA,OAAA/oB,MAAA6+E,iBACA7+E,KAAA6+E,kBAGAvE,QAEAt6E,KAAA6+E,iBAAA,GAAA75C,GACAhlC,KAAAsgF,sBAAA,iBAEAl3D,EACAm3D,oBAAAjG,GACAl0C,KAAA,WACA,MAAAnmC,QAAA8+E,SAQA31D,EAAAo3D,uBACAlG,eACAmG,eAAAJ,KATAj3D,EAAAk3D,sBAAA,8BAEApkD,EAAAgB,OACA,GAAAwN,GAAAE,EAAA81C,uCASA/6C,MAAA,SAAA/wB,GACA,GAAA+J,GAAAiyB,EAAAh8B,GACAnE,KAAAm6B,EAAA81C,kCAAAjwE,KACA4qB,KAAAuP,EAAA81C,kCAAArlD,KACAvkB,QAAA8zB,EAAA81C,kCAAA5pE,SAGAsS,GAAA00D,6BAAA5gD,OAAAve,GAEA1e,OAAAgK,aAAAmf,EAAAu3D,gCACAh2C,EAAAgC,UACAvjB,EAAAihB,QACA,iDAEAjhB,EAAAs1D,mBACA,6BAAAt1D,EAAAk3D,yBAIAtgF,KAAA6+E,mBAGA3E,EAAA59E,UAAAkkF,sBAAA,SAAAx5C,GACA,GAAA5d,GAAAppB,IAEA,OAAAA,MAAA+qC,iBACA3E,KAAA,WAIA,MAFAhd,GAAAihB,QAAAY,mBAAAC,qBAAA8Q,eAIA5V,KAAA,SAAAw6C,GACA,GAAAC,GAAAD,EAAAE,0BACAxG,EAAAtzC,EAAAszC,aACAmG,EAAAz5C,EAAAy5C,eACAM,EACA33D,EAAAixD,oCAAAC,EAEA6D,GAAA9gF,QAAA,SAAA2jF,GACA53D,EAAA4yD,oBAAAgF,EAAA,WACA53D,EAAAsb,MAAAw1C,EAAA5nB,OAAA0uB,EAAAv7B,oBAGAr8B,EAAA4yD,oBACA,yBACA5yD,EAAA63D,wCAGA73D,EAAA2yD,mCAEA97E,OAAA8+E,SAAAmC,UAAAH,GAEA9gF,OAAA8+E,SAAAoC,MAAA,QACAN,QAGAz3D,EAAAw0D,gBAAAwD,wCACA93D,KAAAP,MAAA03D,EAEAr3D,EAAA4yD,oBACA,qBACA5yD,EAAAi4D,sCAGA17C,MAAA,SAAA/wB,GAGA,MAFAwU,GAAAk3D,sBAAA,qCAEApkD,EAAAgB,OAAAtoB,MAIAslE,EAAA59E,UAAA0/E,oBAAA,SAAAgF,EAAAtpC,GACA13C,KAAAg+E,gBAAAhnE,KAAAgqE,GACA/gF,OAAA8+E,SAAAnuD,GAAAowD,EAAAtpC,IAGAwiC,EAAA59E,UAAAy/E,iCAAA,aAIA7B,EAAA59E,UAAA+9E,oCAAA,SACAC,GAEA,GAAAyG,GAAAzG,EAAAO,sBACAyG,EAAAP,EAAAxG,WAmBA,QAjBAwG,EAAAQ,SAAAjH,EAAAkH,iBACAT,EAAAQ,SACAE,MAAA,YAIAV,EAAAxG,WAEA+G,EAAA9lF,eAAA,oBACAulF,EAAAxG,QAAAmH,eACAJ,EAAAI,gBAEAJ,EAAA9lF,eAAA,uBACAulF,EAAAxG,QAAAO,kBACAwG,EAAAxG,mBAGAiG,GAGA7G,EAAA59E,UAAAikF,oBAAA,SAAAjG,GACA,GAAAlxD,GAAAppB,KACA2hF,EAAA/rC,EAAAgsC,uBAAAljB,OAEA,OAAA1+D,MAAA+qC,iBACA3E,KAAA,WACA,GAAAy7C,GAEA,eADAz4D,EAAAihB,QAAAY,mBAAAC,qBAAAwI,WAeA,OAZAtqB,GAAAu3D,+BAAA1gF,OAAA+J,WAAA,WACA2gC,EAAAgC,UACAvjB,EAAAihB,QACA,kDAEAjhB,EAAAs1D,mBAAA,+BACOpE,EAAAxwE,SAAAkpD,GAEP6uB,IACAF,EAAA/rC,EAAAgsC,uBAAAnjB,YAGAjtB,EAAAhW,YAAgCqB,IAAA8kD,MAEhCh8C,MAAA,SAAA/wB,GAGA,MAFAwU,GAAAk3D,sBAAA,6BAEApkD,EAAAgB,OACA0T,EACAh8B,EACAg2B,EAAAk3C,6CAMA5H,EAAA59E,UAAA2kF,qCAAA,WACA,GAAA73D,GAAAppB,IAEA,iBAAAiI,GACAmhB,EAAA00D,6BAAA52D,QAAAjf,EAAA6rC,WAEA7zC,OAAAgK,aAAAmf,EAAAu3D,gCACAh2C,EAAAgC,UACAvjB,EAAAmhB,eACA,oDAGAnhB,EAAAy1D,iBAAA33D,YAIAgzD,EAAA59E,UAAAgiF,iBAAA,WACA,MAAAt+E,MAAA89E,8BAGA5D,EAAA59E,UAAAylF,sBAAA,SACAC,EACAnB,GAEA,GAAAz3D,GAAAppB,KACAq0C,EAAAr0C,KAAAy3E,qBAAApjC,MACA5d,EACA,mBAAA4d,EAAA,wCACA4tC,EACAD,GACAA,EAAAE,SACAF,EAAAE,QAAAC,cACAH,EAAAE,QAAAC,aAAAC,eAoBA,OAlBAH,KAGAt3C,EAAAgC,UACA3sC,KAAAuqC,eACA,6DAAA03C,GAhdA,OAmdAA,GACAjiF,KAAA0kC,MAAAw1C,EAAA5nB,OAAA+rB,oBAIA1zC,EAAAgC,UACA3sC,KAAAuqC,eACA,mEAGAvqC,KAAA+qC,iBACA3E,KAAA,WACA,MAAAhd,GAAAihB,QAAAkC,SACA9C,OAAA,OACA+C,SAAA/V,EACAxuB,MACA44E,MACAwB,mBAAAhuC,OAIAjO,KAAA,SAAAsG,GACA,GAAAqc,GAAArc,EAAAqc,eAAA3/B,EAAAquD,qBACA6K,EAAAl5D,EAAA2uD,oBACAhvB,EACArc,EAAAsT,iBAUA,OAPAsiC,GAAAN,+BACAA,EACAr3C,EAAAgC,UACAvjB,EAAAihB,QACA,qEAGAnO,EAAAhV,QAAAo7D,KAEA38C,MAAA,SAAA/wB,GACA,GAAA+J,GAAA,GAAA+rB,IACAj6B,KAAAm6B,EAAA23C,kCAAA9xE,KACA4qB,KAAAuP,EAAA23C,kCAAAlnD,KACAvkB,QAAA8zB,EAAA23C,kCAAAzrE,QACAqjB,SACA0S,cAAAj4B,IASA,OALA+1B,GAAAgC,UACAvjB,EAAAihB,QACA,mEAGAnO,EAAAgB,OAAAve,MAIAu7D,EAAA59E,UAAA+kF,iCAAA,WACA,GAAAj4D,GAAAppB,IAaA,iBAAAiI,EAAAu6E,GACA,GAAAC,EAEA,IAAAr5D,EAAAu0D,eASA,WALAhzC,GAAAgC,UACAvjB,EAAAmhB,eACA,uGAYA,IANAI,EAAAgC,UACAvjB,EAAAmhB,eACA,6DACAtiC,EAAAy6E,WAAAhwE,gBAGA0W,EAAA2tD,uBAKA,WAJA3tD,GAAAs1D,mBACA,mCAAAz2E,EAAA06E,YAMA,QAAA16E,EAAAy6E,YAEA,cACA,eACA,cACAt5D,EACA24D,sBAAA95E,EAAAu6E,GACAp8C,KAAA,SAAAz8B,GACAyf,EAAA2tD,uBAAA7vD,QAAAvd,KAEAg8B,MAAA,SAAA/wB,GACAwU,EAAA2tD,uBAAA75C,OAAAtoB,IAEA,MAEA,aAOA,OANA+1B,EAAAgC,UACAvjB,EAAAmhB,eACA,uDACAtiC,EAAA06E,aAGA16E,EAAA06E,aACA,WACA,WACAF,EAAA,GAAA/3C,GACAE,EAAAg4C,oCAEA,MACA,YACA,WACA,WACAH,EAAA,GAAA/3C,GACAE,EAAAi4C,uCAEA,MACA,YACA,WACAJ,EAAA,GAAA/3C,GACAE,EAAAk4C,gCAEA,MACA,YACA,WACAL,EAAA,GAAA/3C,GACAE,EAAAm4C,6BAEA,MACA,YAIAp4C,EAAAgC,UACAvjB,EAAAmhB,eACA,6CAEAk4C,EAAA,GAAA/3C,GACAE,EAAAo1C,8BAEA,MACA,SACAyC,EAAA,GAAA/3C,GACAE,EAAAo4C,4BAIAP,EAAAtoD,SACA0S,eACAxR,KAAApzB,EAAA06E,YACApjC,YAAAt3C,EAAAg7E,mBAIA75D,EAAA2tD,uBAAA75C,OAAAulD,MAQAvI,EAAA59E,UAAA45E,yBAAA,SACAziE,EACAuiE,GAEA,MAAAL,GAAAr5E,UAAA45E,yBAAA15E,KACAwD,KACAyT,EACAuiE,IAIAkE,EAAA59E,UAAAs6E,2CACA,SAAAnjE,EAAAuiE,GACA,GAAAqB,EASA,OANA,kBAAA5jE,GAAAyvE,kBACAlN,EAAAmN,oCAEA9L,EAAA,gCAGAA,GAGA6C,EAAA59E,UAAA85E,yBAAA,SAAA3iE,GACA,GAAA8pE,GAAA5H,EAAAr5E,UAAA85E,yBAAA55E,KACAwD,KACAyT,GAEA6rE,EAAA/B,EAAA+B,yBAoBA,OAlBAA,GAAAt/E,KAAAq/E,wBACAC,EACA7rE,EAAAuuC,gBAEAs9B,EAAAt/E,KAAA6/E,yBAAAP,GAEA7rE,EAAAyvE,mBACA3F,EAAA2F,iBAAA56C,EAAA70B,EAAAyvE,mBAEAzvE,EAAA2vE,QACA9D,EAAA8D,MAAA3vE,EAAA2vE,OAEA3vE,EAAA4vE,oBACA/D,EAAA+D,kBAAA5vE,EAAA4vE,mBAGA9F,EAAA+B,wBAEA/B,GAGArD,EAAA59E,UAAAm6E,kBAAA,SACAe,EACA/jE,GAEA,GAAA2V,GAAAppB,IAEA,OAAA21E,GAAAr5E,UAAAm6E,kBACAj6E,KAAAwD,KAAAw3E,GACApxC,KAAA,SAAAsG,GACA,UAAAxQ,GAAA,SAAAhV,EAAAgW,GAOA,QAAA0+C,KACA10D,EAAAwlB,GALAA,EAAA42C,2BAAAlwE,QACAs5B,EAAA6pC,QAAA7pC,EAAA6pC,OAAAuB,QAOA1uD,EAAA2tD,uBAAApxC,MAAAzI,GAIAzpB,EAAAyvE,iBACAzvE,EAAAyvE,iBAAAx2C,EAAAkvC,GAEAxyD,EAAAsb,MAAAw1C,EAAA5nB,OAAA8rB,gBAAA1xC,EAAAkvC,QAMA1B,EAAA59E,UAAAu6E,kBAAA,SAAAW,GAGA,GAAAx3E,KAAA29E,iBAAAnG,EAAAjB,OAAAgN,cAGA,WAFAvjF,MAAAogF,gCAAA5I,EAAAjB,OAMAt2E,QAAA8+E,SAAAyE,SACA,OAEAC,OAAAjM,EAAAjB,OAAAuB,OACA4L,QAAAlM,EAAAjB,OAAAoC,QAGAgL,cAAqBC,cAAApM,EAAAjB,OAAAgN,kBAKrBrJ,EAAA59E,UAAA+5E,kBAAA,SAAA5iE,GACA,GAAA2V,GAAAppB,IAEA,OAAA21E,GAAAr5E,UAAA+5E,kBACA75E,KAAAwD,KAAAyT,GACA2yB,KAAA,SAAAn+B,GA0BA,MAzBAA,GAAA47E,eAAApwE,EAAA6rE,sBAEA7rE,EAAAqwE,cACA77E,EAAA67E,YAAArwE,EAAAqwE,aAEArwE,EAAAswE,qBACA97E,EAAA87E,mBAAAtwE,EAAAswE,oBAEAtwE,EAAAuwE,oBACA/7E,EAAA+7E,kBAAAvwE,EAAAuwE,mBAEAvwE,EAAAwwE,qBACAh8E,EAAAg8E,mBAAAxwE,EAAAwwE,oBAEAxwE,EAAAksC,MACA13C,EAAA03C,IAAAlsC,EAAAksC,KAGA,MAAAlsC,EAAAywE,UACAj8E,EAAAi8E,QAAAzwE,EAAAywE,SAEA,MAAAzwE,EAAA0wE,4BACAl8E,EAAAi8E,QAAAzwE,EAAA0wE,2BAGA/6D,EAAA0tD,cAAA7uE,MAIAiyE,EAAA59E,UAAA+7E,iBAAA,SAAA+L,GACA,GAAAh7D,GAAAppB,IAEA,OAAA21E,GAAAr5E,UAAA+7E,iBACA77E,KAAAwD,MACAomC,KAAA,SAAAsG,GASA,MARAtjB,GAAA2tD,yBACAqN,EACAA,GACA,GAAA15C,GAAAE,EAAAy5C,0CAEAj7D,EAAA2tD,uBAAA75C,OAAAknD,IAGA13C,KAIAwtC,EAAA59E,UAAAsiF,yBAAA,WACA5+E,KAAAg+E,gBAAA3gF,QAAA,SAAA2jF,GACA/gF,OAAA8+E,SAAAhuD,IAAAiwD,KAGAhhF,KAAAg+E,oBAGA9D,EAAA59E,UAAAixC,SAAA,WAUA,MATAttC,QAAA8+E,UACA/+E,KAAA4+E,2BAQAjJ,EAAAr5E,UAAAixC,SAAA/wC,KAAAwD,OAaArO,EAAAC,QAAAsoF,IAEGV,yBAAA,GAAA8K,sBAAA,GAAA3/B,sBAAA,GAAA80B,+BAAA,GAAAC,yBAAA,IAAA6K,0CAAA,IAAA/G,wBAAA,IAAAjB,yBAAA,IAAA3C,uBAAA,IAAAE,yBAAA,IAAA3T,sBAAA,IAAAsX,SAAA,IAAAtS,8BAAA,KAAoXqZ,KAAA,SAAArpD,EAAAxpC,EAAAC,GACvX,YA0XA,SAAA6yF,GAAAhxE,GACA,GAAA2V,GAAAppB,KACA0kF,EAAAC,EAAAlxE,EAAA+mE,UAEA15E,GAAAtE,KAAAwD,MAEAA,KAAA4kF,WAAA,GAAAF,GAAAjxE,GACAzT,KAAA4kF,WAAA/O,oBAAA,WACAzsD,EAAAsb,MAAA96B,MAAAwf,EAAAvf,aAhYA,GAAAk/B,GAAA5N,EAAA,2BACA0P,EAAA1P,EAAA,qBACA2P,EAAA3P,EAAA,sCACAr6B,EAAAq6B,EAAA,4BACAwpD,EAAAxpD,EAAA,eAgYAr6B,GAAA8jC,YAAA6/C,GAwNAA,EAAAnoF,UAAAy5E,WAAA,SAAAtiE,GACA,GAAAuiE,EAQA,OANAh2E,MAAA2kC,YAAA,qBACAqxC,GACAmN,mCAAA,IAIAnjF,KAAA4kF,WAAA7O,WAAAtiE,EAAAuiE,IA0BAyO,EAAAnoF,UAAAo6E,sCAAA,SACAc,GAMA,MAJA,gBAAAA,KACAA,EAAA34D,KAAAC,MAAA04D,IAGAx3E,KAAA4kF,WAAAlO,sCAAAc,IA2BAiN,EAAAnoF,UAAAw6E,cAAA,SAAArjE,GACA,MAAAzT,MAAA4kF,WAAA9N,cAAArjE,GAAA2yB,KAAA,SAAAn+B,GACA,MAAA4W,MAAAE,UAAA9W,MAqFAw8E,EAAAnoF,UAAA+7E,iBAAA,WACA,MAAAr4E,MAAA4kF,WAAAvM,oBAeAoM,EAAAnoF,UAAAixC,SAAA,WACA,GAAA+lB,GAAAzoB,EAAA45C,EAAAnoF,WAAAkvB,OACAqf,EAAA/pC,EAAAxE,WAKA,OAFAwuC,GAAA9qC,KAAAszD,GAEAtzD,KAAA4kF,WAAAr3C,YAGA57C,EAAAC,QAAAm3C,EAAAK,cAAAq7C,KAEGzuB,qCAAA,IAAAO,oBAAA,IAAAsuB,eAAA,IAAA5tB,2BAAA,GAAAnpB,0BAAA,KAA+Ig3C,KAAA,SAAA3pD,EAAAxpC,EAAAC,GAClJ,YAoHA,SAAAknB,GAAArF,GAGA,MAAA46B,GACAC,QACAv7B,KAJA,YAKAu3B,OAAA72B,EAAA62B,OACAiE,cAAA96B,EAAA86B,gBAEAnI,KAAA,WACA,GAAAuI,GAAAC,EAAA91B,OAAArF,EAAA86B,eACAisC,EAAAuK,EAAAtxE,GACA+2B,EAAAiE,EACA31B,QACAy1B,cAAA96B,EAAA86B,cACAjE,OAAA72B,EAAA62B,OACAoE,MAAAj7B,EAAAi7B,MACAC,YACA57B,KAjBA,cAmBAqzB,KAAA,SAAAkE,GACA,GAAA3rB,GAAAkjE,EACA76C,EAAAsD,EAAAW,mBACA+5C,EAAAh+C,EAAAkE,oBAgCA,OA9BAz3B,GAAA62B,SAEA06C,EAAAjpC,sBACAp9B,EAAAisB,EAAAq6C,qBAGA,qBAAAj+C,EAAA0P,oBACA/3B,EAAAisB,EAAAs6C,sCAGArD,EAAA,eAAAmD,EAAAtxC,YAEAmuC,IAAArgB,MACA7iD,EAAAisB,EAAAu6C,wBAIA,WAAA3K,GAEAwK,EAAAhpC,cACAgpC,EAAAhpC,aAAA8kC,4BAGAn2C,EAAAgC,UACAl5B,EAAA62B,OACA,0EAEA3rB,EAAAisB,EAAAw6C,4BAGAzmE,EACAud,EAAAgB,OAAA,GAAAwN,GAAA/rB,KAGAgsB,EAAAgC,UAAAl5B,EAAA62B,OAAA,8BAEAA,KAEA51B,EAAA,GAAA+vE,IACAn6C,OAAA72B,EAAA62B,OACAqE,YACAnE,gBACAg3C,eAAA/tE,EAAA+tE,eACA3G,kBAAApnE,EAAAonE,kBACAL,aAGA,OAAA/mE,GAAA62B,OACAE,EAAApE,KAAA,WACA,MAAA1xB,KAIAA,IAIA,QAAAqwE,GAAAtxE,GACA,GAAAid,GAAA/M,OAAAlQ,EAAAid,SAAA,GAEA,KAAAA,GAAA,MAAAA,EACA,cAGA,QAAAA,GACA,QACA,uBACA,sBACA,0BACA,wBACA,uBACA,qBACA,SACA,SAAAga,IACArP,KAAAuP,EAAAy6C,6BAAAhqD,KACA5qB,KAAAm6B,EAAAy6C,6BAAA50E,KACAqG,QACA,YACArD,EAAAid,QACA,sHAzNA,GAAA+zD,GAAAtpD,EAAA,6BACAqmC,EAAArmC,EAAA,mBAAAqmC,QACAnzB,EAAAlT,EAAA,uCACAsT,EAAAtT,EAAA,iCACAyT,EAAAzT,EAAA,4BACAuP,EAAAvP,EAAA,0BACAwP,EAAAxP,EAAA,oBACAyP,EAAAzP,EAAA,mBAEAe,EAAAf,EAAA,kBACA4N,EAAA5N,EAAA,0BAoNAxpC,GAAAC,SACAknB,OAAAiwB,EAAAjwB,GAKA+1B,QA5NA,YA+NGrB,mBAAA,GAAAsB,sCAAA,GAAArB,yBAAA,GAAAsB,2BAAA,IAAAC,gCAAA,IAAAs2C,kBAAA,IAAA13C,iBAAA,IAAA23C,4BAAA,IAAAttB,kBAAA,IAAAnqB,0BAAA,KAA4R03C,KAAA,SAAArqD,EAAAxpC,EAAAC,GAC/R,YAEAD,GAAAC,SACA4jF,mBAAA,+BACAoM,wBACAnjB,WAAA,4DACAC,QAAA,uEAII+mB,KAAA,SAAAtqD,EAAAxpC,EAAAC,GACJ,YA+CA,IAAA84C,GAAAvP,EAAA,4BAEAxpC,GAAAC,SACAqzF,qBACAx0E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,sBACAvkB,QAAA,+CAEAouE,sCACAz0E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,uCACAvkB,QAAA,+DAEAquE,wBACA10E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,yBACAvkB,QAAA,6BAEAsuE,4BACA30E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,6BACAvkB,QACA,yIAEAuuE,8BACA50E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,gCAEAqlD,mCACAjwE,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,oCACAvkB,QAAA,mEAEAgrE,yCACArxE,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,0CACAvkB,QAAA,uDAEA8rE,qCACAnyE,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,sCACAvkB,QAAA,kDAEA+rE,wCACApyE,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,yCACAvkB,QAAA,4CAEAgsE,iCACAryE,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,kCACAvkB,QACA,+EAEAisE,8BACAtyE,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,+BACAvkB,QACA,6EAEAksE,4BACAvyE,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,6BACAvkB,QACA,qFAEAkpE,+BACAvvE,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,gCACAvkB,QAAA,qBAEAutE,0CACA5zE,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,2CACAvkB,QAAA,+CAEAwgE,oCACA7mE,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,qCACAvkB,QACA,wEAEAygE,oCACA9mE,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,sCAEAknD,mCACA9xE,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,oCACAvkB,QAAA,6DAEAogE,+CACAzmE,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,gDACAvkB,QACA,qGAEAqgE,iCACA1mE,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,kCACAvkB,QACA,6FAEAsgE,sBACA3mE,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,uBACAvkB,QAAA,oDAEAwlE,yCACA7rE,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,0CACAvkB,QACA,sFAEAwhE,iCACA7nE,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,kCACAvkB,QAAA,sCAEA4uE,4CACAj1E,KAAAi6B,EAAAuD,MAAAsH,SACAla,KAAA,6CACAvkB,QAAA,2CAEAg/D,0CACArlE,KAAAi6B,EAAAuD,MAAAsH,SACAla,KAAA,2CACAvkB,QAAA,iDAIG2zC,4BAAA,KAA+Bk7B,KAAA,SAAAxqD,EAAAxpC,EAAAC,GAClC,YAEA,IAAAqnE,GAAA99B,EAAA,sBAEAxpC,GAAAC,QAAAqnE,GAAA,8CAEG4B,sBAAA,MAA0B+qB,KAAA,SAAAzqD,EAAAxpC,EAAAC,GAC7B,YAUA,IAAA84C,GAAAvP,EAAA,yBAEAxpC,GAAAC,SACAi0F,iEACAp1E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,kEACAvkB,QACA,oFAEAgvE,8CACAr1E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,gDAEA0qD,mDACAt1E,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,wDAIGoS,yBAAA,KAA4Bu4C,KAAA,SAAA7qD,EAAAxpC,EAAAC,GAC/B,YAsBA,SAAAknB,GAAArF,GACA,GAAAV,GAAA,eAEA,OAAAs7B,GACAC,QACAv7B,OACAu3B,OAAA72B,EAAA62B,OACAiE,cAAA96B,EAAA86B,gBAEAnI,KAAA,WACA,UAAA6/C,IACAz7C,cAAAiE,EAAA31B,QACAy1B,cAAA96B,EAAA86B,cACAjE,OAAA72B,EAAA62B,OACAoE,MAAAj7B,EAAAi7B,MACAC,UAAAC,EAAA91B,OAAArF,EAAA86B,eACAx7B,aAhCA,GAAAs7B,GAAAlT,EAAA,uCACAsT,EAAAtT,EAAA,iCACAyT,EAAAzT,EAAA,4BACA8qD,EAAA9qD,EAAA,mBAEA4N,EAAA5N,EAAA,0BAiCAxpC,GAAAC,SACAknB,OAAAiwB,EAAAjwB,GAKA+1B,QAxCA,YA2CGC,sCAAA,GAAAC,2BAAA,IAAAC,gCAAA,IAAAk3C,kBAAA,IAAAp4C,0BAAA,KAA+Jq4C,KAAA,SAAAhrD,EAAAxpC,EAAAC,GAClK,YAmCA,SAAAq0F,GAAAxyE,GACAzT,KAAAuqC,eAAA92B,EAAA+2B,cA+IA,QAAA47C,GAAAr9B,GACA,GAAAs9B,IACAhyC,MAAA0U,EAAA1U,MACAtY,QAAAgtB,EAAAhtB,QACA5B,QAAA4uB,EAAA5uB,QACAmsD,gBAAAv9B,EAAAu9B,gBACA71E,KAAAs4C,EAAAt4C,KAWA,OARAs4C,GAAAxJ,cACA8mC,EAAA9mC,YAAAwJ,EAAAxJ,aAGAwJ,EAAA3J,UACAinC,EAAAjnC,QAAA2J,EAAA3J,SAGAinC,EAlMA,GAAA17C,GAAAxP,EAAA,oBACAuP,EAAAvP,EAAA,0BACAyP,EAAAzP,EAAA,YACA2P,EAAA3P,EAAA,mCACA0P,EAAA1P,EAAA,kBACAe,EAAAf,EAAA,kBACA4N,EAAA5N,EAAA,0BAgDA8qD,GAAA3pF,UAAAiqF,oBAAA,SAAA9yE,GACA,GAAA+yE,EAMA,OAJA/yE,SAEA+yE,GAAA,IAAA/yE,EAAA+yE,aAAA,IAEAxmF,KAAAuqC,eACAnE,KAAA,SAAAkE,GACA,MAAAA,GAAAiC,SACAC,SAAA,kBACA/C,OAAA,MACAxhC,MACAu+E,oBAIApgD,KACA,SAAAqgD,GAMA,MALA97C,GAAAgC,UACA3sC,KAAAuqC,eACA,iDAGAk8C,EAAAC,eAAAnqF,IACA6pF,IAEO1vE,KAAA1W,QAiBPimF,EAAA3pF,UAAAqqF,oBAAA,SAAAtE,GACA,MAAAriF,MAAAuqC,eAAAnE,KAAA,SAAAkE,GAIA,MAFA,iBAAAA,EAAAW,mBAAAyL,kBAUApM,EACAiC,SACA0G,IAAA,aACAhrC,MACAs5C,MA1GA,wLA2GAY,WACAjkD,OACA0oF,iBAAAvE,IAGA5gC,cAAA,2CAGArb,KAAA,WACAuE,EAAAgC,UACArC,EACA,mDAKA3E,MAAA,SAAAhnB,GACA,GACA8jE,GADA51C,EAAAluB,EAAAwb,QAAA0S,aAuCA,OApCAlC,GAAAgC,UACArC,EACA,8CAIAuC,EAAA,IACA,cAAAA,EAAA,GAAA0K,WAAAD,aAEAmrC,EAAA,GAAA/3C,IACAj6B,KAAAm6B,EAAAk7C,6CAAAr1E,KACA4qB,KAAAuP,EAAAk7C,6CAAAzqD,KACAvkB,QACA,8CACAurE,EACA,wBACAloD,SACA0S,oBAKA41C,IACAA,EAAA,GAAA/3C,IACAj6B,KAAAm6B,EAAAm7C,kDAAAt1E,KACA4qB,KAAAuP,EAAAm7C,kDAAA1qD,KACAvkB,QACA,mHACAurE,EACA,KACAloD,SACA0S,oBAKA3Q,EAAAgB,OAAAulD,KApEAvmD,EAAAgB,OACA,GAAAwN,GACAE,EAAAi7C,qEAuGAI,EAAA3pF,UAAAixC,SAAA,WAGA,MAFAzC,GAAA9qC,KAAA6qC,EAAAo7C,EAAA3pF,YAEA4/B,EAAAhV,WAGAv1B,EAAAC,QAAAm3C,EAAAK,cAAA68C,KAEGz4C,mBAAA,GAAAC,yBAAA,GAAAC,kCAAA,IAAAC,iBAAA,IAAAC,iBAAA,IAAAC,WAAA,IAAAC,0BAAA,KAA8K+4C,KAAA,SAAA1rD,EAAAxpC,EAAAC,GACjL,YACA,IAAAgqC,GACA57B,WAAA47B,iBACA,SAAAC,GACA,MAAAA,MAAAC,WAAAD,GAA0CE,QAAAF,IAE1CirD,EAAAlrD,EAAAT,EAAA,mBACAxpC,GAAAC,QAAA,SAAA6hB,GAEA,MADA,IAAAqzE,GAAA/qD,QAAAtoB,GACAo+B,gBAGGk1C,kBAAA,MAAsBC,KAAA,SAAA7rD,EAAAxpC,EAAAC,GACzB,YACA8I,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAq1F,mCACAr1F,EAAAs1F,0CACAt1F,EAAAu1F,6BACAv1F,EAAAw1F,oCACAx1F,EAAAy1F,6BACAz1F,EAAA01F,wCACA,GACA11F,EAAA01F,oCACA,oRACA11F,EAAAy1F,6BACA,4PACAz1F,EAAAw1F,oCACA,8KACAx1F,EAAAu1F,6BACA,8KACAv1F,EAAAs1F,0CACA,kKACAt1F,EAAAq1F,mCACA,4SAEIM,KAAA,SAAApsD,EAAAxpC,EAAAC,GACJ,YACA,IAAA41F,GACAxnF,WAAAwnF,UACA,WAWA,MAVAA,GACA9sF,OAAAusC,QACA,SAAAxY,GACA,OAAAZ,GAAAvvB,EAAA,EAAA0Z,EAAAnO,UAAAxL,OAAgDC,EAAA0Z,EAAO1Z,IAAA,CACvDuvB,EAAAhkB,UAAAvL,EACA,QAAA/C,KAAAsyB,GACAnzB,OAAA4B,UAAAd,eAAAgB,KAAAqxB,EAAAtyB,KAAAkzB,EAAAlzB,GAAAsyB,EAAAtyB,IAEA,MAAAkzB,IAEA+4D,EAAA59E,MAAA5J,KAAA6J,YAEA+xB,EACA57B,WAAA47B,iBACA,SAAAC,GACA,MAAAA,MAAAC,WAAAD,GAA0CE,QAAAF,GAE1CnhC,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,GAC9C,IAAA0sF,GAAA7rD,EAAAT,EAAA,aACAusD,EAAA9rD,EAAAT,EAAA,uBACAwsD,EAAA/rD,EAAAT,EAAA,oBACAysD,EAAAzsD,EAAA,oBACA0sD,EAAA1sD,EAAA,aAGA2sD,EAAA,WACA,QAAAA,GAAAr0E,GACAzT,KAAA+nF,UAAA,EACA/nF,KAAAwwB,IAAA/c,EAAAigC,YACA1zC,KAAA6S,GAAA80E,EAAA5rD,UACA/7B,KAAAgoF,UAAAv0E,EAAAu0E,UACAhoF,KAAAssC,YAAA74B,EAAA64B,YACAtsC,KAAAioF,mBAAAx0E,EAAAw0E,mBACAjoF,KAAAkoF,+BAAAloF,KAAAioF,kBACA,IAAAE,GAAA10E,EAAAgjB,IAAA,IAAAz2B,KAAAwwB,IAAA,IAAAxwB,KAAA6S,EACA7S,MAAAy4E,IAAA,GAAAgP,GAAA1rD,SACAu0B,QAAAtwD,KAAA6S,GACA09C,aAAA98C,EAAA88C,eAEAvwD,KAAAooF,WAAA30E,EAAA20E,WACApoF,KAAA2sC,UAAAl5B,EAAAk5B,UACA3sC,KAAAk8B,QAAAzoB,EAAAyoB,QACAl8B,KAAAqoF,SAAAptF,SAAAiC,cAAA,OACA8C,KAAAqoF,SAAArrD,aAAA,wBAAAh9B,KAAA6S,IACA7S,KAAAqoF,SAAArrD,aAAA,gBACAh9B,KAAAqoF,SAAAzrF,MAAA+wD,SAAA,QACA3tD,KAAAqoF,SAAAzrF,MAAAC,QAAA,OACAmD,KAAAqoF,SAAAzrF,MAAAsM,OAAA,MACAlJ,KAAAqoF,SAAAzrF,MAAAoM,MAAA,MACAhJ,KAAAqoF,SAAAzrF,MAAAmoE,SAAA,SACA/kE,KAAAqoF,SAAAzrF,MAAA6nE,OAAA,IACAzkE,KAAA+mC,OAAA2gD,EAAA3rD,SACAc,IAAAsrD,EACAp1E,KAAA,uBACAnW,OACAC,QAAA,OACA8wD,SAAA,QACAlhD,IAAA,IACA2iD,OAAA,IACAD,MAAA,IACA3iD,KAAA,IACAtD,OAAA,OACAF,MAAA,OACAy7D,OAAA,WAEAn0C,MAAA,kBAkVA,MA/UAw3D,GAAAxrF,UAAAu1C,WAAA,WACA,GAAAxuC,GAAArD,IACA,WAAAA,MAAAk8B,QAAA,SAAAhV,GACA7jB,EAAAo1E,IAAA7nD,GAAAg3D,EAAAU,2BAAA,WACAphE,EAAA7jB,KAEAA,EAAAo1E,IAAA7nD,GAAAg3D,EAAAW,kCAAA,WACAllF,EAAAspC,UAAA,oDACAtpC,EAAAmlF,iBAEAvtF,SAAA6Q,KAAAqxB,YAAA95B,EAAA0jC,QACA9rC,SAAA6Q,KAAAqxB,YAAA95B,EAAAglF,aAGAP,EAAAxrF,UAAAmsF,kBAAA,WACA,GAAAplF,GAAArD,IACAA,MAAA+nF,UAAA,CACA,IAAAl/C,GAAA,GAAA7oC,MAAAk8B,QAAA,SAAAhV,EAAAgW,GACA75B,EAAAqlF,mCAAAxrD,CACA,IAAAyrD,GAAA,WAEAtlF,EAAAo1E,IAAA1nD,IACA62D,EAAAgB,gCACAC,GAEAxlF,EAAAo1E,IAAA1nD,IACA62D,EAAAkB,sCACAC,GAEA1lF,EAAAo1E,IAAA1nD,IACA62D,EAAAoB,4BACAC,IAIAA,EAAA,SAAAr0E,GACA+zE,IACAtlF,EAAAspC,UAAA,wCACAzP,GACAgsD,sBAAA,EACAC,OAAA,gBACAv0E,SAGAi0E,EAAA,WACAF,IACAtlF,EAAA+lF,iCAAA,YACA/lF,EAAAspC,UACA,4DAEAzP,GACAgsD,sBAAA,EACAC,OAAA,uBAGAJ,EAAA,SAAA1/B,GACAs/B,IACAzhE,EAAAmiC,GAEAhmD,GAAAo1E,IAAA7nD,GACAg3D,EAAAgB,gCACAC,GAEAxlF,EAAAo1E,IAAA7nD,GACAg3D,EAAAkB,sCACAC,GAEA1lF,EAAAo1E,IAAA7nD,GAAAg3D,EAAAoB,4BAAAC,IAMA,OAJAjpF,MAAA+mC,OAAAnqC,MAAAC,QAAA,QACAmD,KAAAqpF,SAAA,kDACArpF,KAAA+mC,OAAAomB,QACAntD,KAAAwoF,eACA3/C,EACAzC,KAAA,SAAAz8B,GAGA,aAFAtG,GAAAimF,qBACAjmF,GAAAqlF,mCACA/+E,IAEAg8B,MAAA,SAAA/wB,GAGA,aAFAvR,GAAAimF,qBACAjmF,GAAAqlF,mCACArlF,EAAA64B,QAAAgB,OAAAtoB,MAGAkzE,EAAAxrF,UAAAitF,iBAAA,SAAA5/E,GACA,GAAAtG,GAAArD,IACAA,MAAA+nF,UAGA/9E,WAAA,WACA3G,EAAAo1E,IAAAltE,KAAAq8E,EAAAkB,sCAAAn/E,IAvIA,MA0IAm+E,EAAAxrF,UAAAktF,gBAAA,SAAA50E,GACA5U,KAAA0oF,oCACA1oF,KAAA0oF,mCAAA9zE,IAGAkzE,EAAAxrF,UAAAmtF,gBAAA,WACAzpF,KAAAqpF,SAAA,IACArpF,KAAA+mC,OAAAnqC,MAAAC,QAAA,OACAmD,KAAAy4E,IAAAltE,KAAAq8E,EAAA8B,kCACA1pF,KAAA+nF,UAAA,GAEAD,EAAAxrF,UAAAqtF,aAAA,SAAA7yE,GACA9W,KAAA+nF,WAGA/nF,KAAAy4E,IAAAltE,KAAAq8E,EAAAgC,6BACA9yE,YAEA9W,KAAAqpF,SAAAvyE,KAEAgxE,EAAAxrF,UAAAutF,cAAA,SAAAh3E,EAAA2/B,GACAxyC,KAAA+nF,WAGA/nF,KAAAy4E,IAAAltE,KAAAq8E,EAAAkC,+BACAj3E,KACA2/B,eAEAxyC,KAAAqpF,SAAA,8CAEAvB,EAAAxrF,UAAAytF,UAAA,WACA/pF,KAAA+nF,WAGA/nF,KAAAy4E,IAAAltE,KAAAq8E,EAAAoC,yBACAhqF,KAAAqpF,SAAA,8BAEAvB,EAAAxrF,UAAA2tF,YAAA,WACAjqF,KAAA+nF,WAGA/nF,KAAAy4E,IAAAltE,KAAAq8E,EAAAsC,2BACAlqF,KAAAqpF,SAAA,iCAEAvB,EAAAxrF,UAAAksF,aAAA,WACA,GAAAnlF,GAAArD,IACA,OAAAA,MAAAmqF,mCACA/jD,KAAA,SAAAz8B,GACA,GAAAygF,GACA,GAAA9gE,MAAA3f,EAAA0gF,WAAA9gE,UACA,GAAAD,MAAA3f,EAAA2gF,WAAA/gE,UACAghE,EAAAjhE,KAAAP,MAAAqhE,CAEA,OADA/mF,GAAAwmF,cAAAlgF,EAAAkJ,GAAAlJ,EAAA6oC,YACAnvC,EAAAmnF,oBAAA7gF,EAAAgL,OAAA41E,KAEAnkD,KAAA,SAAAz8B,GACA,GAAAA,EAAA,CAMA,GAAA8gF,GAAA9gF,EAAA+gF,UAAA,EACAD,GAAA,IAAAA,EAAAtiD,QAAA,QACA9kC,EAAAkmF,kBACAlH,mBAAA14E,EAAAghF,gBACAF,WACAzV,UAAArrE,EAAAqrE,UACAniE,GAAAxP,EAAAimF,gBAAA,QAGA3jD,MAAA,SAAA/wB,GACAA,EAAAs0E,uBAIA7lF,EAAAspC,UAAA,0CACAtpC,EAAAmmF,gBAAA50E,OAGAkzE,EAAAxrF,UAAAkuF,oBAAA,SAAA71E,EAAA41E,GACA,GAAAlnF,GAAArD,IACA,OAAAA,MAAAspF,eAGAhgE,KAAAP,MAAAwhE,EACAvqF,KAAAopF,iCAAA,WAAAhjD,KAAA,WAGA,MAFA/iC,GAAAsmF,aAAA,wBACAtmF,EAAAspC,UAAA,oDACAtpC,EAAA64B,QAAAgB,QACAgsD,sBAAA,EACAC,OAAA,cAIAnpF,KAAA4qF,mCAAAxkD,KAAA,SAAAsG,GACA,IAAArpC,EAAAimF,iBAAA58C,EACA,MAAArpC,GAAA64B,QAAAhV,SAEA,IAAA2jE,GAAAn+C,EAAA/3B,MACA,IAAAk2E,IAAAl2E,EAKA,OAJAA,EAAAk2E,EACAxnF,EAAAspC,UACA,wCAAAh4B,EAAAjC,eAEAiC,GACA,cAIA,KACA,eACA,aACA,eACA,GAAAmC,GACA,aAAAnC,EACA,iCACA,sBAGA,OAFAtR,GAAAsmF,aAAA7yE,GAEAzT,EAAA64B,QAAAgB,QACAgsD,sBAAA,EACAC,OAAAx0E,GAEA,eACAtR,EAAA4mF,aACA,MACA,gBAEA,MADA5mF,GAAA0mF,YACA1mF,EAAA64B,QAAAhV,QAAAwlB,GAMA,UAAArpC,GAAA64B,QAAA,SAAAhV,EAAAgW,GACAlzB,WAAA,WACA3G,EACAmnF,oBAAA71E,EAAA41E,GACAnkD,KAAAlf,GACAye,MAAAzI,IAvRA,SA8NAl9B,KAAAk8B,QAAAhV,WA8DA4gE,EAAAxrF,UAAAixC,SAAA,WACAvtC,KAAAy4E,IAAAlrC,WACAvtC,KAAA+mC,OAAAhqC,YACAiD,KAAA+mC,OAAAhqC,WAAAC,YAAAgD,KAAA+mC,QAEA/mC,KAAAqoF,SAAAtrF,YACAiD,KAAAqoF,SAAAtrF,WAAAC,YAAAgD,KAAAqoF,WAGAP,EAAAxrF,UAAA+sF,SAAA,SAAAvyE,GACA9W,KAAAqoF,SAAAzrF,MAAAC,QAAAia,EAAA,eACA9W,KAAAqoF,SAAAyC,YAAAh0E,GAEAgxE,EAAAxrF,UAAAyuF,oDACA,SAAA3a,GACA,MAAApwE,MAAAooF,WAAAP,EAAAP,qCACAppF,OACAw1C,YAAA1zC,KAAAwwB,IACA4/C,YAEOhqC,KAAA,SAAAsG,GACP,MAAAA,GACAs+C,gCAAAC,6BAGAnD,EAAAxrF,UAAA4uF,gCAAA,SAAA9a,GACA,GAAAlyE,IACAkyE,SACA6X,mBAAAjoF,KAAAioF,mBACAkD,eAAA,UAQA,OANAnrF,MAAAgoF,YACA9pF,EAAAktF,kBAAAprF,KAAAgoF,WAEAhoF,KAAAssC,cACApuC,EAAAouC,YAAAtsC,KAAAssC,aAEAtsC,KAAAooF,WAAAP,EAAAR,8BACAnpF,UACKkoC,KAAA,SAAAsG,GACL,MAAAA,GAAA2+C,0BAAAC,uBAGAxD,EAAAxrF,UAAA6tF,iCAAA,WACA,GAAA9mF,GAAArD,IAIA,QAHAA,KAAAkoF,8BACAloF,KAAA+qF,oDAAA,gBACA/qF,KAAAkrF,gCAAA,iBACA9kD,KAAA,SAAAmlD,GACAloF,EAAAimF,eAAAiC,EAAA14E,EACA,IAAA2/B,GAAAnvC,EAAA2kF,WAAAuD,EAAA/4C,UACA,QACA3/B,GAAA04E,EAAA14E,GACA8B,OAAA42E,EAAA52E,OACA69B,aACA83C,UAAAiB,EAAAjB,UACAD,UAAAkB,EAAAlB,cAIAvC,EAAAxrF,UAAA8sF,iCAAA,SACAz0E,EACA62E,GAKA,OAHA,KAAAA,IACAA,OAEAxrF,KAAAspF,eACA,MAAAtpF,MAAAk8B,QAAAhV,SAEA,IAAAjf,IACA/J,MAAAspF,GACS30E,GAAA7S,KAAAspF,eAAA30E,UACT62E,IAGAjqC,EAAAvhD,KAAAkoF,8BACAL,EAAAT,oCACAS,EAAAV,4BACA,OAAAnnF,MAAAooF,WAAA7mC,EAAAt5C,GAAAm+B,KAAA,eAIA0hD,EAAAxrF,UAAAsuF,iCAAA,WACA,IAAA5qF,KAAAspF,eACA,MAAAtpF,MAAAk8B,QAAAhV,SAEA,IAAAq6B,GAAAvhD,KAAAkoF,8BACAL,EAAAX,0CACAW,EAAAZ,kCACA,OAAAjnF,MAAAooF,WAAA7mC,GACA1uC,GAAA7S,KAAAspF,iBACKljD,KAAA,SAAAsG,GACL,MAAAA,GAAAoiB,QAGAg5B,IAEAl2F,GAAAmqC,QAAA+rD,IAEGnkB,mBAAA,IAAA8nB,YAAA,IAAAv0B,qBAAA,GAAAtgB,kBAAA,GAAAugB,SAAA,MAAmGu0B,KAAA,SAAAvwD,EAAAxpC,EAAAC,GACtG,YAkEA,SAAAknB,GAAArF,GAGA,MAAA46B,GACAC,QACAv7B,KAJA,QAKAu3B,OAAA72B,EAAA62B,OACAiE,cAAA96B,EAAA86B,gBAEAnI,KAAA,WACA,GAAAoE,GAAA91B,CAEA,OAAAjB,GAAAu0E,WAAA,gBAAAv0E,GAAAu0E,UACA9rD,EAAAgB,OACA,GAAAwN,GAAAE,EAAA+gD,2BAKAl4E,EAAAm4E,mBACA,gBAAAn4E,GAAAm4E,kBAEA1vD,EAAAgB,OACA,GAAAwN,GAAAE,EAAAihD,sCAIArhD,EAAAiE,EACA31B,QACAy1B,cAAA96B,EAAA86B,cACAjE,OAAA72B,EAAA62B,OACAoE,MAAAj7B,EAAAi7B,MACAC,UAAAC,EAAA91B,OAAArF,EAAA86B,eACAx7B,KAhCA,UAkCAqzB,KAAA,SAAAkE,GACA,GAAAmF,GAAAnF,EAAAW,kBAIA,OAFAx3B,GAAA62B,SAEAmF,EAAAvE,qBAAAqR,aAIAjS,EAHApO,EAAAgB,OAAA,GAAAwN,GAAAE,EAAAkhD,sBAMAr4E,EAAA+2B,gBACA91B,EAAA,GAAAq3E,GAAAt4E,GAEAk3B,EAAAgC,UAAAnC,EAAA,qBAEAA,EAAApE,KAAA,WACA,MAAA1xB,QA6BA,QAAAs3E,GAAAv4E,GACA,MAAAw4E,GAAAD,mBAAAv4E,GAlJA,GAAAk3B,GAAAxP,EAAA,oBACAkT,EAAAlT,EAAA,uCACAsT,EAAAtT,EAAA,iCACAyT,EAAAzT,EAAA,4BACAyP,EAAAzP,EAAA,mBACA4N,EAAA5N,EAAA,2BACAuP,EAAAvP,EAAA,0BACA4wD,EAAA5wD,EAAA,WACAe,EAAAf,EAAA,kBACA8wD,EAAA9wD,EAAA,0BA4IAxpC,GAAAC,SACAknB,OAAAiwB,EAAAjwB,GACAkzE,qBAKAn9C,QAlJA,YAqJGrB,mBAAA,GAAAsB,sCAAA,GAAArB,yBAAA,GAAAsB,2BAAA,IAAAC,gCAAA,IAAApB,iBAAA,IAAAqqB,kBAAA,IAAAi0B,0BAAA,IAAAC,UAAA,IAAAr+C,0BAAA,KAAkRs+C,KAAA,SAAAjxD,EAAAxpC,EAAAC,GACrR,YASA,SAAAyvC,KACA,MACAE,MAAAthC,OAAA69B,UAAAC,UAAArrB,cAAA5U,QAAA,SAIA,QAAAuuF,KACA,QAAA5sD,MAIAa,MAAAgsD,KAGA,QAAAC,KACA,GAAA1uD,GAAA59B,OAAA69B,UAAAC,UAAArrB,aAGA,OAAAmrB,GAAA//B,QAAA,cAAA+/B,EAAA//B,QAAA,cAIAyjC,MAIA1D,EAAA//B,QAAA,cAAA+/B,EAAA//B,QAAA,iBASA,QAAAgiC,KACA,MAAAL,MAAAgC,IA3CA,GAAAF,GAAApG,EAAA,2CACAsG,EAAAtG,EAAA,0CACAsE,EAAAtE,EAAA,uCACAmxD,EAAAnxD,EAAA,8CACAmF,EAAAnF,EAAA,+CACAiD,EAAAjD,EAAA,0CAyCAxpC,GAAAC,SACA2vC,YACAF,mBACAI,WACAhC,QACAK,cACA1B,YACAkuD,cACAhsD,eACAisD,kCACAF,mCAGG7zB,0CAAA,GAAAC,yCAAA,GAAAK,sCAAA,GAAA0zB,6CAAA,GAAAzzB,8CAAA,GAAA0zB,0CAAA,KAAgRC,KAAA,SAAAvxD,EAAAxpC,EAAAC,GACnR,YAUAD,GAAAC,SACA+6F,uCAAA,IACAC,8BAAA,IACAC,6BAAA,wCACAC,+BAAA,uCACAC,oBAAA,yCAGIC,KAAA,SAAA7xD,EAAAxpC,EAAAC,GACJ,YAgCA,IAAA84C,GAAAvP,EAAA,4BAEAxpC,GAAAC,SACAk6F,mBACAr7E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,oBACAvkB,QAAA,2CAEAm2E,mCACAx8E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,oCACAvkB,QAAA,2CAEAo2E,uCACAz8E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,wCACAvkB,QAAA,gCAEAq2E,kBACA18E,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,mBACAvkB,QAAA,oCAEAs2E,oBACA38E,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,qBACAvkB,QAAA,yCAEAu2E,gBACA58E,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,iBACAvkB,QACA,qEAEAw2E,yBACA78E,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,0BACAvkB,QAAA,sCAEAy2E,qBACA98E,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,sBACAvkB,QAAA,2CAEA02E,wBACA/8E,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,yBACAvkB,QACA,yEAEA22E,yCACAh9E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,0CACAvkB,QAAA,wDAEAkyE,6BACAv4E,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,8BACAvkB,QAAA,qDAEA42E,2CACAj9E,KAAAi6B,EAAAuD,MAAAE,QACA9S,KAAA,4CACAvkB,QAAA,4DAEA62E,iDACAl9E,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,kDACAvkB,QAAA,+CAEA82E,2CACAn9E,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,4CACAvkB,QAAA,+CAEA+2E,4CACAp9E,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,6CACAvkB,QAAA,wCAEAg3E,2CACAr9E,KAAAi6B,EAAAuD,MAAA+sB,SACA3/B,KAAA,4CACAvkB,QAAA,sDAEAi3E,0CACAt9E,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,2CACAvkB,QAAA,mCAEA60E,0BACAl7E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,2BACAvkB,QAAA,gCAEA+0E,oCACAp7E,KAAAi6B,EAAAuD,MAAAC,SACA7S,KAAA,qCACAvkB,QAAA,0CAEAk3E,2BACAv9E,KAAAi6B,EAAAuD,MAAAqS,QACAjlB,KAAA,4BACAvkB,QAAA,kCAIG2zC,4BAAA,KAA+BwjC,KAAA,SAAA9yD,EAAAxpC,EAAAC,GAClC,YACA8I,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAo3F,4BACAp3F,EAAA22F,kCACA32F,EAAA83F,iCACA93F,EAAA02F,2BACA12F,EAAAk4F,8BACAl4F,EAAAg4F,4BACAh4F,EAAAg3F,gCACAh3F,EAAAk3F,sCACAl3F,EAAAs4F,0BACAt4F,EAAAo4F,wBACAp4F,EAAAs8F,0CACA,GACAt8F,EAAAs8F,sCACA,wCACAt8F,EAAAo4F,wBAAA,0BACAp4F,EAAAs4F,0BAAA,4BACAt4F,EAAAk3F,sCACA,wCACAl3F,EAAAg3F,gCAAA,kCACAh3F,EAAAg4F,4BAAA,8BACAh4F,EAAAk4F,8BAAA,gCACAl4F,EAAA02F,2BAAA,6BACA12F,EAAA83F,iCAAA,mCACA93F,EAAA22F,kCAAA,oCACA32F,EAAAo3F,4BAAA,mCAEImF,KAAA,SAAAhzD,EAAAxpC,EAAAC,GACJ,YAGA,SAAAw8F,GAAA36E,GACA,MAAAA,GAAA46E,wBACAC,EAAAvB,oBAEAt5E,EAAA86E,kBACAD,EAAAzB,6BAEAyB,EAAAxB,+BATA,GAAAwB,GAAAnzD,EAAA,cAYAxpC,GAAAC,QAAAw8F,IAEGn5C,cAAA,MAAkBu5C,KAAA,SAAArzD,EAAAxpC,EAAAC,GACrB,YAIA,SAAAo6F,GAAAv4E,GACA,GAAAg7E,GACAC,EACAC,EACAptD,EAAAuhB,EAAAvhB,YACAqtD,EAAArtD,GAAAuhB,EAAArjB,QACAovD,EAAAttD,GAAAuhB,EAAArhB,WACAqtD,EACAhsC,EAAAwpC,eAAAuC,EACAE,EACAjsC,EAAAhjB,eACAgjB,EAAAypC,mCACAzpC,EAAA1kB,WAoBA,OAlBA3qB,SAEAk7E,GAAA,IAAAl7E,EAAAu7E,aACAP,GAAAh7E,EAAAjY,eACA,uBAEAiY,EAAAw7E,mBAQAP,GAAAj7E,EAAAjY,eAAA,kBACAiY,EAAAy7E,eAGAH,OAKAL,IACA5rC,EAAAzhB,oBAAAyhB,EAAAxiB,mBAKAsuD,EAIAH,EAIAG,EAHAE,EAJAH,IA9CA,GAAA7rC,GAAA3nB,EAAA,sBAwDAxpC,GAAAC,SACAo6F,wBAGG/vB,sBAAA,MAA0BkzB,KAAA,SAAAh0D,EAAAxpC,EAAAC,GAC7B,YAyBA,SAAAw9F,GAAA37E,GACA,GACA47E,GAAA57E,EAAA47E,qBACAC,EAAA77E,EAAA67E,mBACAC,EAAA97E,EAAA87E,SACA5gD,EAAAl7B,EAAAk7B,UACAD,EAAAj7B,EAAAi7B,QAAA,EACA8gD,EAAAC,IACAC,EAAA/gD,EAAA,QAAAE,EAAA,OAEA,WAAA3S,GAAA,SAAAhV,EAAAgW,GACA+mC,EAAAnrD,QAEA/F,KAZA,uBAaAkuD,iBACAyuB,EAAA,kBAAA7kC,EAAAnc,GAAA,QACAwyB,aACAwuB,EAAA,uBAAA7kC,EAAAnc,GAAA,QACAjiC,IAAA+iF,EAAA/iF,IACAD,KAAAgjF,EAAAhjF,KACAtD,OAAAymF,EACA3mF,MAAA4mF,GAEA,SAAAC,GACA50F,SACA+xD,eAAA8iC,EAAAC,gBACA50F,iBAAA,mBACA00F,EAAA1iC,UAEAlyD,SACA+xD,eAAA8iC,EAAAE,cACA70F,iBAAA,mBACA00F,EAAAxwE,QACAiwE,IACAW,MAEAJ,EAAA91D,QAAoC,SAAAnlB,GAGpCA,EACAsoB,EAAAtoB,GAEAy6E,EALA,GAMAjpD,KAAAlf,GACAye,MAAAzI,GAEA2yD,EAAAxwE,QACA4wE,MAEAJ,EAAAltB,SAAA4sB,OAMA,QAAAE,KAMA,OACAhjF,IALA1J,KAAA4J,OAAA1M,OAAAknE,YAAAwoB,GAAA,GAAA1vF,OAAAonE,UAMA76D,KAJAzJ,KAAA4J,OAAA1M,OAAAqnE,WAAAsoB,GAAA,GAAA3vF,OAAAunE,YAQA,QAAAyoB,KACAh1F,SAAA+xD,eAAA,8BAAAmB,UAAAzlC,IAAA,UAGA,QAAAwnE,KACA,GAAAC,IACA,IAAAL,EAAAM,eAAA,KACA,iBACA,IACA,IAAAN,EAAA5P,SAAA,KACA,mBACA,sBACA,UACA,WACA,aACA,eACA,kCACA,KAEAmQ,GACA,IAAAP,EAAAQ,kBAAA,KACA,iBACA,yBACA,2BACA,uBACA,eACA,gBACA,0BACA,KAGAC,GACA,IAAAT,EAAAE,aAAA,KACA,gBACA,gBACA,+DACA,sBACA,oBACA,mBACA,qBACA,sBACA,iCACA,gBACA,kBACA,oBACA,KAGAQ,GACA,IAAAV,EAAAC,eAAA,KACA,gBACA,gBACA,uBACA,uBACA,gBACA,+DACA,sBACA,oBACA,mBACA,kBACA,oBACA,KAGAU,GACA,IAAAX,EAAAh5E,QAAA,KACA,+DACA,sBACA,oBACA,mBACA,qBACA,sBACA,kBACA,oBACA,KAGA45E,GACA,IAAAZ,EAAAa,aAAA,KACA,+DACA,sBACA,oBACA,mBACA,qBACA,sBACA,kBACA,oBACA,gBACA,IAWA,OARAR,GAAA3kE,OACA6kE,EACAE,EACAC,EACAC,EACAC,GAGA1sD,KAAA,MAGA,QAAA4sD,KACA,GACAC,GACAC,EACAC,EACAC,EACAC,EACAC,EACAnB,EACAC,EARAmB,EAAAl2F,SAAA+xD,eAAA8iC,EAAA5P,SAUA,IAAAiR,EAGA,WAFAA,GAAAhjC,UAAAhtC,OAAA,SAIA0vE,GAAA51F,SAAAiC,cAAA,SACA4zF,EAAA71F,SAAAiC,cAAA,OACA6zF,EAAA91F,SAAAiC,cAAA,OACA8zF,EAAA/1F,SAAAiC,cAAA,OACA+zF,EAAAh2F,SAAAiC,cAAA,OACAg0F,EAAAj2F,SAAAiC,cAAA,OACA6yF,EAAA90F,SAAAiC,cAAA,UACA8yF,EAAA/0F,SAAAiC,cAAA,UAEA2zF,EAAAh+E,GAAA,qCACAg+E,EAAAzW,UAAA8V,IAEAY,EAAAj+E,GAAAi9E,EAAA5P,SAEA6Q,EAAAl+E,GAAAi9E,EAAAQ,kBAEAU,EAAAn+E,GAAAi9E,EAAAsB,UACAJ,EAAA5W,UAAAiX,EAEAJ,EAAAp+E,GAAAi9E,EAAAh5E,QACAm6E,EAAApzF,UAAA,6BAEAqzF,EAAAr+E,GAAAi9E,EAAAa,aACAO,EAAArzF,UAAAyzF,EAEAvB,EAAAl9E,GAAAi9E,EAAAC,eACAA,EAAAlyF,UAAA,mBAEAmyF,EAAAn9E,GAAAi9E,EAAAE,aACAA,EAAAnyF,UAAA,iBAEA5C,SAAAuC,KAAA2/B,YAAA0zD,GACAE,EAAA5zD,YAAA6zD,GACAD,EAAA5zD,YAAA8zD,GACAF,EAAA5zD,YAAA+zD,GACAH,EAAA5zD,YAAA4yD,GACAgB,EAAA5zD,YAAA6yD,GACAc,EAAA3zD,YAAA4zD,GACA91F,SAAA6Q,KAAAqxB,YAAA2zD,GAcA,QAAAS,GAAA99E,GAGA,MAFAm9E,KAEAxB,EAAA37E,GAvQA,GAAAwwD,GAAA9oC,EAAA,oCACA0vB,EAAA1vB,EAAA,qBACAe,EAAAf,EAAA,qBAEA0T,EAAA,SACAwiD,EACA,grFACAC,EACA,8GAEA1B,EAAA,IACAD,EAAA,IACAG,GACA5P,SAAA,6BACAkQ,eAAA,oCACAE,kBAAA,2BACAN,aAAA,4BACAD,eAAA,8BACAj5E,QAAA,gBACA65E,aAAA,qBACAS,UAAA,kBAsPAz/F,GAAAC,SACA2/F,cACAnC,YACAQ,cACAD,kBAGG6B,mCAAA,IAAAh7B,oBAAA,IAAAzL,oBAAA,MAAuF0mC,KAAA,SAAAt2D,EAAAxpC,EAAAC,GAC1F,YA+CA,SAAAm6F,GAAAt4E,GACA,GAAA2V,GAAAppB,IAEAA,MAAA0xF,sBAAAj+E,EAAAk+E,uBAAA,EACA3xF,KAAA4xF,mBAAAn+E,EAAA86E,oBAAA,EACAvuF,KAAAuqC,eAAA92B,EAAA+2B,cACAxqC,KAAA6xF,qBAAA,IAAAp+E,EAAAw7E,mBACAjvF,KAAA8xF,gBAAA,IAAAr+E,EAAAy7E,cACAlvF,KAAA+xF,eAAA,IAAAt+E,EAAAu7E,aACAhvF,KAAAgyF,oBAAA,IAAAv+E,EAAAw+E,kBACAjyF,KAAAkyF,WAAAz+E,EAAAu0E,UACAhoF,KAAAmyF,aAAA1+E,EAAA64B,YACAtsC,KAAAoyF,mBAAA3+E,EAAAm4E,kBACA5rF,KAAAqyF,sBAAA5+E,EAAA6+E,qBACAtyF,KAAAuyF,qBAAA9+E,EAAAw0E,oBAAA,IAAAxiC,cACAzlD,KAAAwyF,sBAAAxyF,KAAAuyF,oBACAvyF,KAAAyyF,sBAAA,IAAAh/E,EAAAi/E,oBACA1yF,KAAA2yF,kBACA3yF,KAAA+xF,eAAA/xF,KAAA4yF,eAAA5yF,KAAA0xF,sBACA1xF,KAAA6yF,yBACA7yF,KAAA0xF,uBAAA1xF,KAAA4yF,aACA5yF,KAAA8yF,sBAAAC,KAAA/yF,KAAAyyF,qBACAzyF,KAAAgzF,yBAAA,IAAAv/E,EAAAw/E,uBACAjzF,KAAAkzF,eAAA,EAEAlzF,KAAAmzF,iCACAnzF,KAAA8yF,wBAAA9yF,KAAAwyF,qBAEA7nD,EAAAgC,UACA3sC,KAAAuqC,eACA,iCAAA5mB,OAAAvQ,QAAApT,KAAA+xF,iBAUA/xF,KAAAozF,wBACAzoD,EAAAgC,UACA3sC,KAAAuqC,eACA,qCAEGvqC,KAAA2yF,kBACH3yF,KAAAuqC,eAAAvqC,KAAAuqC,eAAAnE,KAAA,SAAAkE,GACA,GAAAtD,GAAAsD,EAAAW,mBAAAC,oBAEA,OAAAmoD,IACA58D,IACAuQ,EAAA2H,UACA,QACAE,EACA,iCACA6E,YACA,eAAA1M,EAAA0M,YAAA,uBACAs0C,UAAA5+D,EAAA8oE,YAAAlrD,EAAAuV,aAAA/J,WACAy1C,mBAAA7+D,EAAAmpE,oBACAjmD,YAAAljB,EAAA+oE,aACAj2D,UACAksD,WAAA,SAAA7mC,EAAAt5C,GACA,MAAAqiC,GACAiC,SACA0G,IAAA,aACAhrC,MACAs5C,QACAY,UAAAl6C,KAGAm+B,KAAA,SAAAsG,GACA,MAAAA,GAAAzkC,QAGA0kC,UAAA,SAAAq0C,GACAr2C,EAAAgC,UAAAvjB,EAAAmhB,eAAAy2C,IAEAzwB,aAAA3gB,IAEAxJ,KAAA,SAAAktD,GAOA,MANAlqE,GAAAmqE,sBAAAD,EACA3oD,EAAAgC,UACAvjB,EAAAmhB,eACA,gCAGAD,IAEA3E,MAAA,WAOA,MANAgF,GAAAgC,UACAvjB,EAAAmhB,eACA,mCAEAnhB,EAAAupE,mBAAA,EAEAroD,MAGGtqC,KAAAmzF,mCAIHnzF,KAAAwzF,uBAAAC,EACAzzF,KAAA0zF,+BAAAC,EAEA3zF,KAAAuqC,eAAAvqC,KAAAuqC,eAAAnE,KAAA,SAAAkE,GACA,GAAAspD,GAAAxqE,EAAA0pE,sBACA,gBACA,yBACA9rD,EAAAsD,EAAAW,mBAAAC,oBAIA,OAFA9hB,GAAAyqE,iCAAA7sD,EAAA0M,YAAA+R,cAEAr8B,EACA0qE,2BAAAxpD,GACAlE,KAAA,WAMA,MALAuE,GAAAgC,UACAvjB,EAAAmhB,eACA,SAAAqpD,EAAA,cAGAtpD,IAEA3E,MAAA,SAAA/wB,GAMA,MALA+1B,GAAAgC,UACAvjB,EAAAmhB,eACA,SAAAqpD,EAAA,iBAGA13D,EAAAgB,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAA8iD,0CAAAj9E,KACA4qB,KAAAuP,EAAA8iD,0CAAAryD,KACAvkB,QAAA8zB,EAAA8iD,0CAAA52E,QACAqjB,SACA0S,cAAAj4B,WAk/BA,QAAAm/E,GAAAC,GACA,GAAAC,IAAAD,GAAA/zF,OAAAmsC,SAAA4nD,KAAAtmC,UAAA,IAAA7pB,MAAA,KAEAqwD,EAAAD,EAAAr2C,OAAA,SAAA4tB,EAAAC,GACA,GAAAC,GAAAD,EAAA5nC,MAAA,KAKAswD,EAAAxoB,mBAAAD,EAAA,IAAAvjC,QAAA,UACAlvB,EAAAorC,EAAA8vC,GACAp5F,EAAA4wE,mBAAAD,EAAA,GAIA,OAFAF,GAAAvyD,GAAAle,EAEAywE,MAOA,OAJA0oB,GAAAE,aACAF,EAAArhF,GAAAqhF,EAAAE,YAGAF,EAGA,QAAAG,GAAA5J,GAKA,MAJAA,MAAA,GAIA,IAAAA,EAAAtiD,QAAA,QAGA,QAAAmsD,GAAAjrC,GACA,GAAAkrC,IACAlgD,MAAAgV,EAAAg5B,mBACA5xE,KAAA,eACA0pB,SACAswD,SAAA4J,EAAAhrC,EAAAohC,UACA+J,iBAAAnrC,EAAAx2C,IAWA,OAPAw2C,GAAA2rB,YACAuf,EAAAp6D,QAAA66C,UAAA3rB,EAAA2rB,UACAuf,EAAAp6D,QAAA66C,UAAA0V,SAAA2J,EACAhrC,EAAA2rB,UAAA0V,WAIA6J,EAIA,QAAAE,KACA,GAAAC,EAWA,YATA,KAAAz0F,OAAAhF,SAAA05F,OAEAD,EAAA,uBACG,KAAAz0F,OAAAhF,SAAA25F,SACHF,EAAA,yBACG,KAAAz0F,OAAAhF,SAAA45F,eACHH,EAAA,0BAGAA,EAGA,QAAAI,KAIA,MACA70F,QAAA69B,UAAA8V,UACA,mBAAA5V,KAAA/9B,OAAA69B,UAAA8V,UAjvCA,GAAAjJ,GAAAxP,EAAA,oBACA6wD,EAAA7wD,EAAA,2BACA2nB,EAAA3nB,EAAA,8BACAya,EAAAza,EAAA,sBACAyP,EAAAzP,EAAA,mBACAqd,EAAArd,EAAA,sBACAyU,EAAAzU,EAAA,6BACA0P,EAAA1P,EAAA,kBACA2P,EAAA3P,EAAA,mCACA4N,EAAA5N,EAAA,2BACAuP,EAAAvP,EAAA,0BACA43D,EAAA53D,EAAA,oBACAe,EAAAf,EAAA,kBACA6J,EAAA7J,EAAA,+BACAizD,EAAAjzD,EAAA,0BACAo2D,EAAAp2D,EAAA,+BAAAo2D,YACAltC,EAAAlpB,EAAA,mCAMAk4D,EAAAl4D,EAAA,eACA45D,EAAA55D,EAAA,sBAEA0T,EAAA,SACA4kD,EAAA,IACAE,EAAA,GAkKA5H,GAAAzvF,UAAAw3F,2BAAA,SACAxpD,EACA0qD,GAEA,GACAnsD,GADAzf,EAAAppB,IAGA,OAAAA,MAAAmzF,kCAKAtqD,EADA7oC,KAAAwyF,qBACAloD,EACAiC,SACA0G,IAAA,aACAhrC,MACAs5C,MAAAwzC,EAAAzN,oCACAnlC,WACAjkD,OACAw1C,YAAA1zC,KAAA6zF,iCACAzjB,OAAA,oBAKAhqC,KAAA,SAAAsG,GACA,MAAAA,GACAzkC,KAAA+iF,gCAAAC,4BAGA3gD,EACAiC,SACA0G,IAAA,aACAhrC,MACAs5C,MAAAwzC,EAAA1N,6BACAllC,WACAjkD,OACA+pF,mBAAAjoF,KAAAuyF,oBACAniB,OAAA,WACA+a,eAAA,aACA7+C,YAAAtsC,KAAAmyF,kBAKA/rD,KAAA,SAAAsG,GACA,MAAAA,GAAAzkC,KAAAojF,0BAAAC,sBAIAziD,EAAAzC,KAAA,SAAAmlD,GACA,GAAAhB,GAAA,GAAAjhE,MAAAiiE,EAAAlB,WAAA,GAAA/gE,MAAAiiE,EAAAjB,WACA2K,EAAA,MAAA1K,CAKAtgF,cAAAmf,EAAA8rE,+BACA9rE,EAAA8rE,8BAAAlrF,WAAA,WACAof,EAAA+rE,yBAGA/rE,EAAA0qE,2BAAAxpD,GAAA,IACK2qD,GAELD,GAAA5rE,EAAA+rE,0BAIA/rE,EAAAgsE,2BAAA7J,EAAA52E,OACAyU,EAAAisE,uBAAA9J,EAAA14E,OA9DAqpB,EAAAhV,WAkEA6kE,EAAAzvF,UAAAg5F,UAAA,SAAA7+D,GACAz2B,KAAAoyF,mBACA0C,KACAnqD,EAAAgC,UACA3sC,KAAAuqC,eACA,qCAGAtqC,OAAAmsC,SAAA5O,KAAA/G,GAEAx2B,OAAAsjE,aACA,kBAAAtjE,QAAAsjE,YAAAxpC,MAEA4Q,EAAAgC,UACA3sC,KAAAuqC,eACA,sCAEAtqC,OAAAsjE,YAAAxpC,KAAAtD,KAEAkU,EAAAgC,UAAA3sC,KAAAuqC,eAAA,iCACAtqC,OAAA85B,KAAAtD,KAGAkU,EAAAgC,UAAA3sC,KAAAuqC,eAAA,iCAGAuY,EAAAupC,iCACArsF,KAAAu1F,6BAEAt1F,OAAAmsC,SAAA5O,KAAA/G,EAEAx2B,OAAA85B,KAAAtD,KAKAs1D,EAAAzvF,UAAA87C,OAAA,WACA,MAAAp4C,MAAAuqC,eAAAnE,KACA,SAAAkE,GACA,GAAAmF,GAAAnF,EAAAW,mBACA2gC,KACA4pB,EACAx1F,KAAAoyF,oBACAnyF,OAAAmsC,SAAA5O,KAAA2K,QAAAloC,OAAAmsC,SAAA4nD,KAAA,IACAyB,EAAAhmD,EAAAvE,qBAAAqR,aACA/I,EAAA/D,EAAA+D,kBACAgJ,EAAAi5C,EAAAj5C,YACAk5C,GACAjpD,OACA/b,QAAA8iB,EAAAsC,WACAjC,YAAAL,EAAAK,YACAD,SAAAJ,EAAAI,SACAE,UAAAN,EAAAM,WAkDA,OA9CA9zC,MAAAsvE,SAAA7/B,EAAAwC,QACAjyC,KAAAqvE,WAAA5/B,EAAAvE,qBAAAyD,UAEA6mD,IAAArtD,QAAA,UAGAnoC,KAAAq1F,yBACAr1F,KAAAwyF,qBAKAh2C,GAAA,SAAAx8C,KAAAq1F,uBAEAzpB,EAAA+pB,YAAA31F,KAAAq1F,wBAIAr1F,KAAA41F,4BACA51F,KAAA6yF,2BACA2C,EACAx1F,KAAAqvE,WAAA,QAAAxgC,EAAA,6BAGA+8B,EAAA,aAAA4pB,EAAA,kBACA5pB,EAAA,YAAA4pB,EAAA,iBACA5pB,EAAA,WAAA4pB,EAAA,kBAEA5pB,EAAA,oBACAA,EAAA,mBACAA,EAAA,mBAGA5rE,KAAAgzF,wBAGApnB,EAAAqnB,uBAAA,EAFArnB,EAAAqnB,uBAAA,EAKArnB,EAAA/tC,GAAA59B,OAAA69B,UAAAC,UACA6tC,EAAAiqB,sBACA71F,KAAAkyF,YAAAuD,EAAAjjD,WACAo5B,EAAAkqB,uBAAAt5C,EACAovB,EAAAmqB,sBAAAN,EAAA/hD,YACAk4B,EAAAoqB,mBAAA7oD,KAAAtuB,KAAAE,UAAA22E,IAGAtH,GACAC,wBAAAruF,KAAA6yF,yBACAtE,kBAAAvuF,KAAA4xF,qBAEA,IACAp5C,EAAAz5B,UAAA6sD,IAEKl1D,KAAA1W,QAYL+rF,EAAAzvF,UAAA0vF,mBAAA,WACA,MAAAA,uBACAiD,mBAAAjvF,KAAA6xF,oBACA3C,cAAAlvF,KAAA8xF,eACA9C,aAAAhvF,KAAA+xF,iBAYAhG,EAAAzvF,UAAA82F,sBAAA,WACA,MAAApzF,MAAAi2F,0BAKAlK,EAAAzvF,UAAA25F,uBAAA,SAAAjC,GACA,GAAApoB,GAAAmoB,EAAAC,EAEA,YAEA,MADApoB,EAAAsqB,cAAAtqB,EAAAuqB,YAAAvqB,EAAAwqB,cAKArK,EAAAzvF,UAAAs5F,yBAAA,WAIA,QAAA51F,KAAAoyF,qBASApyF,KAAA8yF,uBAGA/G,EAAAzvF,UAAAs2F,WAAA,WACA,QAAA9vC,EAAArjB,SAAAqjB,EAAAvhB,cAyCAwqD,EAAAzvF,UAAA0wC,SAAA,SAAAv5B,GACA,GACA4iF,GADAjtE,EAAAppB,IAKA,OAFAyT,UAEA,IAAAzT,KAAAm1F,wBACAj5D,EAAAgB,OACA,GAAAwN,GAAAE,EAAAqiD,qCAIAjtF,KAAAm1F,yBAAA,EAUAkB,EATAr2F,KAAA2yF,kBASA3yF,KAAAs2F,0BAAA7iF,GACGzT,KAAA6yF,yBAWH7yF,KAAAu2F,gCACGv2F,KAAA8yF,sBAcH9yF,KAAAw2F,qCAaAx2F,KAAAy2F,0CAAAhjF,GAGA4iF,EACAjwD,KAAA,SAAAijB,GACA,MAAAjgC,GAAAmhB,eACAnE,KAAA,SAAAkE,GACA,MAAAlhB,GAAA0qE,2BAAAxpD,KAEAlE,KAAA,WAGA,MAFAhd,GAAA+rE,yBAAA,EAEAb,EAAAjrC,OAGA1jB,MAAA,SAAA/wB,GACA,MAAAwU,GAAAmhB,eACAnE,KAAA,SAAAkE,GACA,MAAAlhB,GAAA0qE,2BAAAxpD,KAEAlE,KAAA,WAGA,MAFAhd,GAAA+rE,yBAAA,EAEAj5D,EAAAgB,OAAAtoB,SAiCAm3E,EAAAzvF,UAAAgzF,mBAAA,WACA,MAAAtvF,MAAAm1F,yBAMAn1F,KAAA02F,iCAMA12F,KAAA22F,kBACA32F,KAAA22F,iBAAAz5D,OACA,GAAAwN,GAAAE,EAAA6iD,0CAIAvxD,EAAA8J,KACAhmC,KAAA42F,8BACA52F,KAAA62F,gCAnBA36D,EAAAgB,OACA,GAAAwN,GAAAE,EAAAsiD,yCAsBAnB,EAAAzvF,UAAAi6F,8BAAA,WACA,GAAAntE,GAAAppB,IAKA,OAHA2qC,GAAAgC,UAAAvjB,EAAAmhB,eAAA,kCACAvqC,KAAA22F,iBAAA,GAAA3xD,GAEAhlC,KAAAo4C,SAAAhS,KAAA,SAAA3P,GA+BA,MA9BA86D,IACAlC,qBACAjmE,EAAA0tE,2CAAApgF,KAAA0S,GACAkmE,mBAAAlmE,EAAAkmE,mBAAA54E,KAAA0S,GACAmmE,SAAA94D,EACAkY,UAAAvlB,EAAAimD,WACA3gC,MAAAtlB,EAAAkmD,WAEAlpC,KAAA,SAAAijB,GAMA,MALA1e,GAAAgC,UACAvjB,EAAAmhB,eACA,oCAGAnhB,EAAAutE,iBAAAzvE,SACAm7D,mBAAAh5B,EAAAshC,gBACAF,SAAAphC,EAAAqhC,SACA1V,UAAA3rB,EAAA2rB,UACAniE,GAAAuW,EAAAisE,2BAGA1vD,MAAA,SAAA/wB,GAMA,MALA+1B,GAAAgC,UACAvjB,EAAAmhB,eACA,oCAGAnhB,EAAAutE,iBAAAz5D,OAAAtoB,KAGAwU,EAAAutE,oBAIA5K,EAAAzvF,UAAAy6F,2BAAA,SAAAlkF,GACA,GAAAuW,GAAAppB,IAEA,OAAAA,MAAAuqC,eACAnE,KAAA,SAAAkE,GACA,GAAAiX,GAAAn4B,EAAAopE,qBACAuC,EAAA7N,0CACA6N,EAAA9N,kCAEA,OAAA38C,GAAAiC,SACA0G,IAAA,aACAhrC,MACAs5C,QACAY,WACAtvC,WAKAuzB,KAAA,SAAAsG,GACA,MAAAA,GAAAzkC,KAAA6mD,QAWAi9B,EAAAzvF,UAAAw6F,2CAAA,SACAE,GAEA,GAAA5tE,GAAAppB,IAEA,OAAAopB,GACA2tE,2BAAA3tE,EAAAisE,wBACA1vD,MAAA,SAAAsxD,GACA,MAAA/6D,GAAAgB,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAA2iD,oBAAA98E,KACA4qB,KAAAuP,EAAA2iD,oBAAAlyD,KACAvkB,QAAA8zB,EAAA2iD,oBAAAz2E,QACAqjB,QAAA88D,OAIA7wD,KAAA,SAAA0oB,GACA,GAAAooC,GAAApoC,EAAAn6C,MAEA,IAAAuiF,IAAA9tE,EAAAgsE,2BAQA,OAPAhsE,EAAAgsE,2BAAA8B,EAEAvsD,EAAAgC,UACAvjB,EAAAmhB,eACA,0CAGA2sD,GACA,eACA,MAAAh7D,GAAAhV,QAAA4nC,EACA,gBACA,MAAA5yB,GAAAgB,OACA,GAAAwN,GAAAE,EAAA0iD,yBAEA,cACA,MAAApxD,GAAAgB,OACA,GAAAwN,GAAAE,EAAAojD,4BAMA,UAAA9xD,GAAA,SAAAhV,EAAAgW,GACA,MAAA85D,GAAA5tE,EAAA8pE,gBACA8D,IAEA5tE,EACA0tE,2CAAAE,GACA5wD,KAAAlf,GACAye,MAAAzI,IAGAA,EAAA,GAAAwN,GAAAE,EAAAojD,iCAKAjC,EAAAzvF,UAAA66F,qBAAA,WACA,GAAA/tE,GAAAppB,IAEA,OAAAspB,MAAAP,MAAAK,EAAAguE,+BACAl7D,EAAAgB,OACA,GAAAwN,GAAAE,EAAAkjD,4CAIA9tF,KAAA+2F,2BAAA/2F,KAAAq1F,wBACA1vD,MAAA,SAAAsxD,GACA,MAAA/6D,GAAAgB,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAA+iD,gDAAAl9E,KACA4qB,KAAAuP,EAAA+iD,gDAAAtyD,KACAvkB,QACA8zB,EAAA+iD,gDAAA72E,QACAqjB,SACA0S,cAAAoqD,QAKA7wD,KAAA,SAAA0oB,GACA,GAAA+7B,GAAA/7B,EAAAn6C,MAEA,IAAAk2E,IAAAzhE,EAAAgsE,2BASA,OARAhsE,EAAAgsE,2BAAAvK,EAEAlgD,EAAAgC,UACAvjB,EAAAmhB,eACA,8CACAsgD,EAAAn4E,eAGAm4E,GACA,cACA,aACA,eACA,MAAA3uD,GAAAgB,OACA,GAAAwN,GACAE,EAAA,qCAAAigD,IAGA,gBACA,MAAA3uD,GAAAhV,QAAA4nC,GASA,UAAA5yB,GAAA,SAAAhV,EAAAgW,GACAlzB,WAAA,WACAof,EAAA+tE,uBAAA/wD,KAAAlf,GAAAye,MAAAzI,IACS9T,EAAAoqE,6BAKTzH,EAAAzvF,UAAAk6F,mCAAA,WACA,GAAAptE,GAAAppB,IAkCA,OAhCA2qC,GAAAgC,UACA3sC,KAAAuqC,eACA,sCAGAvqC,KAAAo3F,+BACA9tE,KAAAP,MAAA/oB,KAAA0zF,+BACA1zF,KAAA22F,iBAAA,GAAA3xD,GAEAhlC,KAAAm3F,uBACA/wD,KAAA,SAAAijB,GACA1e,EAAAgC,UACAvjB,EAAAmhB,eACA,wCAGAnhB,EAAAutE,iBAAAzvE,SACAm7D,mBAAAh5B,EAAAshC,gBACAF,SAAAphC,EAAAqhC,SACA1V,UAAA3rB,EAAA2rB,UACAniE,GAAAuW,EAAAisE,2BAGA1vD,MAAA,SAAA/wB,GACA+1B,EAAAgC,UACAvjB,EAAAmhB,eACA,wCAGAnhB,EAAAutE,iBAAAz5D,OAAAtoB,KAGA5U,KAAAo4C,SAAAhS,KAAA,SAAA3P,GAGA,MAFArN,GAAAksE,UAAA7+D,GAEArN,EAAAutE,oBAIA5K,EAAAzvF,UAAAi5F,2BAAA,WACA,QAAAzyC,EAAArjB,WAIA,IAAAz/B,KAAA4xF,oBAIA5xF,KAAAgyF,qBAGAjG,EAAAzvF,UAAAm6F,0CAAA,SAAAhjF,GAaA,QAAA4jF,GAAArD,GACA,GAAAr1E,EAEAyK,GACAkuE,6BAAAtD,GACAruD,MAAA,SAAA/wB,GACA+J,EAAA/J,IAEAwxB,KAAA,SAAA+7B,GAEA/4C,EAAAipE,uBACApyF,OAAAmsC,SAAA4nD,OAAA5qE,EAAAmuE,gBAEAt3F,OAAAmsC,SAAA4nD,KAAA5qE,EAAAmuE,eAEAnuE,EAAAstE,iCAEA/3E,EACAyK,EAAAutE,iBAAAz5D,OAAAve,GAEAyK,EAAAutE,iBAAAzvE,QAAAi7C,SAEA/4C,GAAAutE,mBAlCA,GACAa,GAAAC,EADAruE,EAAAppB,IAGA,OAAAA,MAAAozF,wBACApzF,KAAAs3F,gCAGA3sD,EAAAgC,UAAA3sC,KAAAuqC,eAAA,+BACAvqC,KAAA22F,iBAAA,GAAA3xD,GAEAhlC,KAAAu3F,cAAAt3F,OAAAmsC,SAAA4nD,KA8BAh0F,KAAA03F,sBAAA,SAAAz6F,GACA,GAAA+2F,GAAA/2F,EAAA06F,OAAA9zD,MAAA,OAEAza,GAAA6sE,uBAAAjC,KAIAwD,GAAA,EACAvtF,aAAAwtF,GACAJ,EAAArD,KAGA/zF,OAAA9E,iBAAA,aAAA6E,KAAA03F,uBAAA,GAKA13F,KAAA43F,0BAAA,WACA,GAAAhsE,GACAnY,EAAAokF,qBAAAjiD,EAAAg3C,6BAEA3sF,QAAAhF,SAAA05F,QACA6C,IACAC,EAAAztF,WAAAqtF,EAAAzrE,KAKA5rB,KAAAo4C,SAAAhS,KAAA,SAAA3P,GAWA,MAVArN,GAAAksE,UAAA7+D,GAGAzsB,WAAA,WACA/J,OAAAhF,SAAAE,iBACAs5F,IACArrE,EAAAwuE,4BAEKhiD,EAAA+2C,wCAELvjE,EAAAutE,qBAIA5K,EAAAzvF,UAAAg6F,0BAAA,WACA,GAAAltE,GAAAppB,IAkDA,OAhDA2qC,GAAAgC,UAAA3sC,KAAAuqC,eAAA,gCAEAvqC,KAAA22F,iBAAA,GAAA3xD,GAEAhlC,KAAAuqC,eACAnE,KAAA,WACA,MAAAhd,GAAAmqE,sBAAA9K,sBAEAriD,KAAA,SAAAijB,GACAjgC,EAAAmqE,sBAAA9J,kBAEA9+C,EAAAgC,UACAvjB,EAAAmhB,eACA,kCAGAnhB,EAAAutE,iBAAAzvE,QAAAmiC,KAEA1jB,MAAA,SAAA/wB,GAUA,GATA+1B,EAAAgC,UACAvjB,EAAAmhB,eACA,kCAGAnhB,EAAAmqE,uBACAnqE,EAAAmqE,sBAAA9J,kBAGA70E,GAAA,sBAAAA,EAAAu0E,OAKA,WAJA//D,GAAAutE,iBAAAz5D,OACA,GAAAwN,GAAAE,EAAA4iD,wBAMApkE,GAAAutE,iBAAAz5D,OACA,GAAAwN,IACAj6B,KAAAm6B,EAAAo+C,4BAAAv4E,KACA4qB,KAAAuP,EAAAo+C,4BAAA3tD,KACAvkB,QAAA8zB,EAAAo+C,4BAAAlyE,QACAqjB,SACA0S,cAAAj4B,QAMA5U,KAAA22F,kBAGA5K,EAAAzvF,UAAAs6F,4BAAA,WACA,GAAAxtE,GAAAppB,IAEA,OAAAA,MAAAuqC,eAAAnE,KAAA,SAAAkE,GACA,GAAAiX,EAEA,OAAAn4B,GAAAisE,wBACA9zC,EAAAn4B,EAAAopE,qBACAuC,EAAA3N,oCACA2N,EAAA5N,6BAEA78C,EAAAiC,SACA0G,IAAA,aACAhrC,MACAs5C,QACAY,WACAjkD,OACA2U,GAAAuW,EAAAisE,uBACA1gF,OAAA,iBAOAunB,EAAAhV,aAIA6kE,EAAAzvF,UAAAu6F,2BAAA,WACA,GAAAztE,GAAAppB,IAEA,OAAAA,MAAAuqC,eAAAnE,KAAA,WAKA,MAJAhd,GAAAmqE,uBACAnqE,EAAAmqE,sBAAAnK,iCAAA,YAGAltD,EAAAhV,aAgBA6kE,EAAAzvF,UAAAixC,SAAA,WACA,GAAAnkB,GAAAppB,IAIA,OAFAA,MAAA02F,iCAEA12F,KAAAuqC,eAAAnE,KACA,WACAhd,EAAAmqE,uBACAnqE,EAAAmqE,sBAAAhmD,WAGAtjC,aAAAmf,EAAA8rE,+BACA9rE,EAAAwtE,8BAEA9rD,EAAA9qC,KAAA6qC,EAAAkhD,EAAAzvF,aACKoa,KAAA1W,QAIL+rF,EAAAzvF,UAAAo6F,+BAAA,WACAz2F,OAAAjE,oBAAA,aAAAgE,KAAA03F,uBACAz3F,OAAAhF,SAAAe,oBACAy4F,IACAz0F,KAAA43F,iCAGA53F,MAAA43F,gCACA53F,MAAA03F,uBAeA3L,EAAAzvF,UAAAg7F,6BAAA,SAAAtD,GACA,GAAA5qE,GAAAppB,KACA4rE,EAAAmoB,EAAAC,EAKA,WAAA93D,GAAA,SAAAhV,EAAAgW,GACA9T,EAAAopE,qBA+BK5mB,EAAAsqB,cACLvrD,EAAAgC,UACAvjB,EAAAmhB,eACA,kCAGArjB,EAAA0kD,IACKA,EAAAuqB,YACLxrD,EAAAgC,UAAAvjB,EAAAmhB,eAAA,gCACArN,EACA,GAAAwN,IACAj6B,KAAAm6B,EAAAuiD,iBAAA18E,KACA4qB,KAAAuP,EAAAuiD,iBAAA9xD,KACAvkB,QAAA8zB,EAAAuiD,iBAAAr2E,QACAqjB,SACA0S,eACA/1B,QAAA60D,mBAAAC,EAAA7W,cACA15B,KAAAuwC,EAAAksB,gBAKKlsB,EAAAwqB,aACLzrD,EAAAgC,UAAAvjB,EAAAmhB,eAAA,iCACArN,EAAA,GAAAwN,GAAAE,EAAAwiD,uBAGAziD,EAAAgC,UACAvjB,EAAAmhB,eACA,yCAEArN,EAAA,GAAAwN,GAAAE,EAAAyiD,kBA7DAjkE,EACA+tE,uBACA/wD,KAAA,SAAAijB,GAMA,MALA1e,GAAAgC,UACAvjB,EAAAmhB,eACA,+DAGArjB,GACAm7D,mBAAAh5B,EAAAshC,gBACAF,SAAAphC,EAAAqhC,SACA1V,UAAA3rB,EAAA2rB,UACAniE,GAAAuW,EAAAisE,2BAGA1vD,MAAA,SAAA/wB,GAEAA,EAAAnE,OAAAm6B,EAAAijD,2CAAAp9E,MAGAysB,EAAAtoB,GAGA+1B,EAAAgC,UACAvjB,EAAAmhB,eACA,6DAGArjB,EAAA0kD,KAoCAxiD,EAAA2uE,8BAIAhM,EAAAzvF,UAAAy7F,yBAAA,WACA/3F,KAAAqyF,uBAKA,kBAAApyF,QAAA+3F,QAAAC,cACAh4F,OAAAmsC,SAAA4nD,MAEAgE,QAAAE,aAEA,GACAj4F,OAAAmsC,SAAA5O,KAAA7/B,MAAA,EAAAsC,OAAAmsC,SAAA5O,KAAA1/B,QAAA,QAoFAnM,EAAAC,QAAAm3C,EAAAK,cAAA2iD,KAEGv+C,mBAAA,GAAAC,yBAAA,GAAAC,kCAAA,IAAAyqD,mBAAA,IAAApjD,4BAAA,IAAApH,iBAAA,IAAAC,iBAAA,IAAAwnC,qBAAA,IAAAgjB,kCAAA,IAAAC,cAAA,IAAAC,qBAAA,IAAAC,6BAAA,IAAAC,qBAAA,IAAAvgC,kBAAA,IAAAwgC,yBAAA,IAAAvM,0BAAA,IAAAwM,8BAAA,IAAAvtB,8BAAA,GAAAr9B,0BAAA,KAA8gB6qD,KAAA,SAAAx9D,EAAAxpC,EAAAC,GACjhB,YA+CA,SAAAgnG,GAAAh5C,GACA,MAAAi5C,GAAAj5C,IAAAlC,EAAAkC,GAEA,QAAAk5C,KACA,MAAAC,GAAAx8F,IAAA,SAAAqjD,GAA8C,MAAAo5C,GAAAr3E,MAAAi3E,EAAAh5C,MAE9C,QAAAq5C,GAAAlmF,EAAAmmF,OACA,KAAAA,IAA+CA,GAAA,EAC/C,IAAAvrC,GAAAorC,EAAAj7F,QAAAiV,EACA,KAAAmmF,IAAA,IAAAvrC,EACA,SAAA/mC,OAAA,IAAA7T,EAAA,kCAEA,OAAA46C,GAEA,QAAAwO,GAAAg9B,GACA,GAAA19E,KACA,KAAA29E,EAAAC,iBAAAF,GACA,MAAA19E,EAEA,QAAA09E,EAAA96F,OACA,MAAAy6F,IAEAC,GAAA17F,QAAA,SAAAuiD,GACA,GAAA05C,GAAAV,EAAAh5C,EACA25C,GAAAC,0BAAAL,EAAAG,EAAA79E,IAEA,IAAAg+E,GAAAC,EAAAC,cAAAl+E,EACA,OAAAg+E,IACAA,GAEAh+E,EA5EA,GAAA+rE,GAAAxnF,WAAAwnF,UAAA,WASA,MARAA,GAAA9sF,OAAAusC,QAAA,SAAAxY,GACA,OAAAZ,GAAAvvB,EAAA,EAAA0Z,EAAAnO,UAAAxL,OAAgDC,EAAA0Z,EAAO1Z,IAAA,CACvDuvB,EAAAhkB,UAAAvL,EACA,QAAA/C,KAAAsyB,GAAAnzB,OAAA4B,UAAAd,eAAAgB,KAAAqxB,EAAAtyB,KACAkzB,EAAAlzB,GAAAsyB,EAAAtyB,IAEA,MAAAkzB,IAEA+4D,EAAA59E,MAAA5J,KAAA6J,YAEA6zC,EAAAviB,EAAA,oBACAo+D,EAAAp+D,EAAA,uCACAi+D,EAAAj+D,EAAA,6BACAu+D,EAAAv+D,EAAA,yBACA69D,EAAA79D,EAAA,eACA09D,KACAe,GACAt7C,KAAA,OACAJ,WAAA,aACAJ,iBAAA,mBACA+7C,YAAA,cACA97C,SAAA,WACAE,IAAA,MACA67C,SAAA,WACAC,QAAA,UACAx7C,IAAA,MACAy7C,IAAA,MACAx7C,MAAA,QACAC,UAAA,aAEAw7C,GACAL,EAAAt7C,KACAs7C,EAAA17C,WACA07C,EAAA97C,iBACA87C,EAAAC,YACAD,EAAA77C,SACA67C,EAAA37C,IACA27C,EAAAE,SACAF,EAAAG,QACAH,EAAAr7C,IACAq7C,EAAAI,IACAJ,EAAAp7C,MACAo7C,EAAAn7C,WAEAs6C,EAAAC,EAAAr3E,MAAAs4E,EAiCA99B,GAAA+9B,YAAA,SAAAt6C,GACA,MAAAo5C,GAAAr3E,MAAAi3E,EAAAh5C,KAEAuc,EAAAg+B,WAAA,SAAApnF,GACA,GAAA46C,GAAAsrC,EAAAlmF,EACAgmF,GAAAt0D,OAAAkpB,EAAA,IAEAwO,EAAAi+B,QAAA,SAAApzD,GACA,GAAAqzD,GAAApB,EAAAjyD,EAAAv2B,MAAA,EACAooF,GAAA7xD,EAAAv2B,MAAAu2B,GACA,IAAAqzD,GACAtB,EAAA/hF,KAAAgwB,EAAAv2B,OAGA0rD,EAAAm+B,WAAA,SAAA16C,EAAA26C,GACA,GAAAC,GAAA3B,EAAAj5C,IAAAlC,EAAAkC,EACA,KAAA46C,EACA,SAAA5zE,OAAA,IAAAg5B,EAAA,uDAEA,IAAA26C,EAAA9pF,MAAA+pF,EAAA/pF,OAAA8pF,EAAA9pF,KACA,SAAAmW,OAAA,mCAEA,IAAA6zE,GAAAzB,EAAAr3E,MAAA64E,EACAC,GAAAjT,OAAqCiT,GAAAF,GACrC1B,EAAA4B,EAAAhqF,MAAAgqF,GAEAt+B,EAAAu+B,YAAA,SAAA3nF,EAAA46C,GACA,GAAAgtC,GAAA1B,EAAAlmF,EACAgmF,GAAAt0D,OAAAk2D,EAAA,GACA5B,EAAAt0D,OAAAkpB,EAAA,EAAA56C,IAEAopD,EAAAy+B,mBAAA,WACA7B,EAAAC,EAAAr3E,MAAAs4E,GACApB,MAEA18B,EAAAluB,MAAA2rD,EACAjoG,EAAAC,QAAAuqE,IAEG0+B,sCAAA,IAAAC,mBAAA,IAAAC,cAAA,IAAAC,wBAAA,IAAAC,4BAAA,MAA+IC,KAAA,SAAA//D,EAAAxpC,EAAAC,GAClJ,YAKA,SAAA4nG,GAAAL,EAAAG,EAAA79E,GACA,GAAAnd,GAAA68F,CACA,KAAA78F,EAAA,EAAeA,EAAAg7F,EAAA8B,SAAA/8F,OAAuCC,IAAA,CACtD,GAAA+8F,GAAA/B,EAAA8B,SAAA98F,EACA,IAAAg9F,EAAAC,QAAApC,EAAAkC,GAAA,CAGA,GAAAG,GAAAxC,EAAAr3E,MAAA23E,EAEA6B,GADA9+F,MAAAo/F,QAAAJ,GACA13E,OAAA03E,EAAA,IAAAh9F,OAGAslB,OAAA03E,GAAAh9F,OAEA86F,EAAA96F,QAAA88F,IACAK,EAAAE,cAAAP,GAEA1/E,EAAAzE,KAAAwkF,EACA,SAtBA9gG,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA4nG,8BAAA,EACA,IAAAR,GAAA79D,EAAA,WACAmgE,EAAAngE,EAAA,YAsBAvpC,GAAA4nG,8BAEGmC,UAAA,IAAAC,YAAA,MAA8BC,KAAA,SAAA1gE,EAAAxpC,EAAAC,GACjC,YACA,IAAA8rD,IACAo+C,MACAC,SAAA,OACAtrF,KAAA,OACA2qF,UAAA,GACAY,MAAA,QACAC,SAAA,UACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGA21B,YACAH,SAAA,aACAtrF,KAAA,aACA2qF,WAAA,qDACAY,MAAA,QACAC,SAAA,IACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGA41B,oBACAJ,SAAA,mBACAtrF,KAAA,mBACA2qF,UAAA,OACAY,MAAA,MACAC,SAAA,IACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGA61B,eACAL,SAAA,cACAtrF,KAAA,cACA2qF,WAAA,mBACAY,MAAA,MACAC,SAAA,UACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGA81B,UACAN,SAAA,WACAtrF,KAAA,WACA2qF,UAAA,mBACAY,MAAA,QACAC,SAAA,OACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGA+1B,KACAP,SAAA,MACAtrF,KAAA,MACA2qF,UAAA,uBACAY,MAAA,QACAC,SAAA,aACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGAg2B,UACAR,SAAA,WACAtrF,KAAA,WACA2qF,UACA,KACA,UACA,cACA,cACA,cACA,cACA,eACA,QACA,gBACA,cACA,gBACA,SACA,KACA,KACA,MACA,gBACA,gBACA,WACA,KACA,KACA,KACA,YACA,YACA,YACA,YAEAY,MAAA,QACAC,SAAA,mBACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGAi2B,SACAT,SAAA,UACAtrF,KAAA,UACA2qF,UACA,QACA,aACA,gBACA,gBACA,OACA,GACA,GACA,GAEAY,MAAA,QACAC,SAAA,yBACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGAk2B,KACAV,SAAA,MACAtrF,KAAA,MACA2qF,UACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,gBACA,cACA,OACA,OACA,QACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,gBACA,eACA,gBAEAY,MAAA,QACAC,SAAA,IACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGAm2B,KACAX,SAAA,MACAtrF,KAAA,MACA2qF,WAAA,YACAY,MAAA,QACAC,SAAA,aACA5gE,MACAtoB,KAAA,OACAwzD,KAAA,IAGAo2B,OACAZ,SAAA,QACAtrF,KAAA,QACA2qF,UAAA,sDACAY,MAAA,QACAC,SAAA,IACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAGAq2B,WACAb,SAAA,YACAtrF,KAAA,YACA2qF,UAAA,QACAY,MAAA,QACAC,SAAA,IACA5gE,MACAtoB,KAAA,MACAwzD,KAAA,IAIA50E,GAAAC,QAAA8rD,OAEIm/C,KAAA,SAAA1hE,EAAAxpC,EAAAC,GACJ,YAGA,SAAA+vB,GAAA64E,GACA,MAAAA,GAGA37E,KAAAC,MAAAD,KAAAE,UAAAy7E,IAFA,KAJA9/F,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA+vB,UAAA,GAOA/vB,EAAA+vB,aAEIm7E,KAAA,SAAA3hE,EAAAxpC,EAAAC,GACJ,YAGA,SAAAmrG,GAAAthF,GACA,GAAAuhF,GAAAvhF,EAAA7d,OAAA,SAAA+L,GAAmF,MAAAA,GAAA+xF,gBAA+Br9F,MAMlH,OAAA2+F,GAAA,GACAA,IAAAvhF,EAAApd,OAEA,QAAAs7F,GAAAl+E,GACA,MAAAshF,GAAAthF,GAGAA,EAAAmiC,OAAA,SAAA67C,EAAA9vF,GACA,MAAA8vF,GAOAwD,OAAAxD,EAAAiC,eAAAuB,OAAAtzF,EAAA+xF,eACA/xF,EAEA8vF,EATA9vF,IAJA,KAdAjP,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA+nG,kBAAA,GA6BA/nG,EAAA+nG,qBAEIuD,KAAA,SAAA/hE,EAAAxpC,EAAAC,GACJ,YAGA,SAAAynG,GAAAF,GACA,sBAAAA,gBAAAx1E,QAHAjpB,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAynG,qBAAA,GAIAznG,EAAAynG,wBAEI8D,KAAA,SAAAhiE,EAAAxpC,EAAAC,GACJ,YAMA,SAAAwrG,GAAAjE,EAAA1yF,EAAAzD,GACA,GAAAq6F,GAAA15E,OAAAld,GAAApI,OACAu0C,EAAAumD,EAAAvmD,OAAA,EAAAyqD,GACAC,EAAAp8D,SAAA0R,EAAA,GAGA,OAFAnsC,GAAAy6B,SAAAvd,OAAAld,GAAAmsC,OAAA,EAAAA,EAAAv0C,QAAA,IACA2E,EAAAk+B,SAAAvd,OAAA3gB,GAAA4vC,OAAA,EAAAA,EAAAv0C,QAAA,IACAi/F,GAAA72F,GACA62F,GAAAt6F,EAEA,QAAAu6F,GAAApE,EAAAkC,GAEA,MADAA,GAAA13E,OAAA03E,GACAA,EAAA3tC,UAAA,EAAAyrC,EAAA96F,UACA86F,EAAAzrC,UAAA,EAAA2tC,EAAAh9F,QAEA,QAAAk9F,GAAApC,EAAAkC,GACA,MAAAh/F,OAAAo/F,QAAAJ,GACA+B,EAAAjE,EAAAkC,EAAA,GAAAA,EAAA,IAEAkC,EAAApE,EAAAkC,GApBA3gG,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA2pG,YAAA,GAqBA3pG,EAAA2pG,eAEIiC,KAAA,SAAAriE,EAAAxpC,EAAAC,GACJ,YACA8I,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA6rG,aAAA,EACA,IAAAC,GAAAviE,EAAA,uBACAwiE,EAAAxiE,EAAA,mCACAyiE,EAAAziE,EAAA,mBACA0iE,EAAA1iE,EAAA,yBACA2iE,EAAA3iE,EAAA,sBACA4iE,EAAA5iE,EAAA,mBACA6iE,EAAA,mBAAA/9F,SACAA,OAAAi8B,QACAuhE,EAAA,WACA,QAAAA,GAAAhqF,OACA,KAAAA,IAAiCA,MACjCzT,KAAAi+F,OAAAxqF,EAAAwqF,QAAA,IACAj+F,KAAAswD,QAAA78C,EAAA68C,SAAA,GACAtwD,KAAAuwD,aAAA98C,EAAA88C,aAQAvwD,KAAAwwD,aAAA/8C,EAAA+8C,iBACAxwD,KAAAk+F,4BAAA9qF,QAAAK,EAAA+8C,cACAxwD,KAAAm+F,aAAA,EACAn+F,KAAAoxB,aACApxB,KAAAo+F,kCAAAhrF,QAAApT,KAAAuwD,cAAAvwD,KAAAk+F,6BAkOA,MAhOAT,GAAA53D,WAAA,SAAA7J,GACAyhE,EAAAvhE,QAAAF,GAEAyhE,EAAAzkF,OAAA,SAAAvF,GACA,UAAAgqF,GAAAhqF,IAEAgqF,EAAAnhG,UAAAy1D,eAAA,SAAAnB,GACA5wD,KAAAk+F,6BAGAl+F,KAAAwwD,aAAAx5C,KAAA45C,IAEA6sC,EAAAnhG,UAAA+hG,QAAA,SAAAC,GACA,aAAAA,IAGA,MAAAA,EAAA3yF,SAGA2yF,EAAAzlF,cAAAylF,EAAA3yF,SAGAoyF,EAAAQ,aAAAvnF,KAAAsnF,IACA,MAEAb,EAAAnhG,UAAA0c,OAAA,SAAAvF,GACA,MAAAgqF,GAAAzkF,OAAAvF,IAEAgqF,EAAAnhG,UAAAiP,KAAA,SAAAy1E,EAAA/4E,EAAA4qD,GACA,GAAA7yD,KAAAm+F,YACA,QAEA,IAAAF,GAAAj+F,KAAAi+F,MAEA,IADAjd,EAAAhhF,KAAAw+F,eAAAxd,IACA,EAAA0c,EAAAe,YAAAzd,GACA,QAEA,OAAA0c,EAAAe,YAAAR,GACA,QAEA,mBAAAh2F,KACA4qD,EAAA5qD,EACAA,MAAApF,GAEA,IAAAwmD,IAAA,EAAAw0C,EAAAa,gBAAA1d,EAAAid,EAAAh2F,EAAA4qD,EACA,SAAAxJ,IAGArpD,KAAAk+F,4BACAl+F,KAAA2+F,wBAAAthG,QAAA,SAAAuzD,IACA,EAAAktC,EAAAc,aAAAhuC,EAAAvH,EAAA40C,MAIA,EAAAL,EAAAiB,WAAAx1C,GACA40C,SACArtC,MAAA3wD,OAAAwM,KAAAxM,OAAAmpB,QAGA,IAEAq0E,EAAAnhG,UAAAwiG,cAAA,SAAA9d,EAAA/4E,GACA,GAAA5E,GAAArD,IACA,WAAAy9F,GAAAvhE,QAAA,SAAAhV,EAAAgW,GACA75B,EAAAkI,KAAAy1E,EAAA/4E,EAAA,SAAAohD,GACAniC,EAAAmiC,MAGAnsB,EAAA,GAAAtW,OAAA,2BAAA4E,OAAAw1D,EAAA,UAIAyc,EAAAnhG,UAAAs0B,GAAA,SAAAowD,EAAA+d,GACA,GAAA/+F,KAAAm+F,YACA,QAGA,IAAA/0E,GAAAppB,KACAi+F,EAAAj+F,KAAAi+F,OACA1iC,EAAAwjC,CAEA,OADA/d,GAAAhhF,KAAAw+F,eAAAxd,KACA,EAAA2c,EAAAqB,yBAAAhe,EAAAzlB,EAAA0iC,KAGAj+F,KAAAo+F,oCAEA7iC,EAAA,WAEA,OADA5qD,MACAsoB,EAAA,EAAgCA,EAAApvB,UAAAxL,OAAuB46B,IACvDtoB,EAAAsoB,GAAApvB,UAAAovB,EAGA7P,GAAA61E,wBAAAj/F,WAAAi+F,SAIA70E,EAAA81E,uBAAAl/F,WAAAw2B,SAGAuoE,EAAAn1F,UAAA,GAAA+G,KAIA3Q,KAAAoxB,UAAApa,MACAgqE,YACAzlB,UACAwjC,oBAEAhB,EAAAoB,YAAAlB,GAAAF,EAAAoB,YAAAlB,OACAF,EAAAoB,YAAAlB,GAAAjd,GAAA+c,EAAAoB,YAAAlB,GAAAjd,OACA+c,EAAAoB,YAAAlB,GAAAjd,GAAAhqE,KAAAukD,IACA,IAEAkiC,EAAAnhG,UAAAy0B,IAAA,SAAAiwD,EAAA+d,GACA,GAAAxjC,GAAAwjC,CACA,IAAA/+F,KAAAm+F,YACA,QAEA,IAAAn+F,KAAAuwD,aACA,OAAAjyD,GAAA,EAA2BA,EAAA0B,KAAAoxB,UAAA/yB,OAA2BC,IAAA,CACtD,GAAA8gG,GAAAp/F,KAAAoxB,UAAA9yB,EACA8gG,GAAAL,sBACAxjC,EAAA6jC,EAAA7jC,SAIAylB,EAAAhhF,KAAAw+F,eAAAxd,EACA,IAAAid,GAAAj+F,KAAAi+F,MACA,OAAAN,EAAAqB,yBAAAhe,EAAAzlB,EAAA0iC,GACA,QAEA,IAAAoB,GAAAtB,EAAAoB,YAAAlB,IAAAF,EAAAoB,YAAAlB,GAAAjd,EACA,KAAAqe,EACA,QAEA,QAAA/gG,GAAA,EAAuBA,EAAA+gG,EAAAhhG,OAA2BC,IAClD,GAAA+gG,EAAA/gG,KAAAi9D,EAEA,MADA8jC,GAAA56D,OAAAnmC,EAAA,IACA,CAGA,WAEAm/F,EAAAnhG,UAAAixC,SAAA,WACA,IAAAvtC,KAAAm+F,YAAA,CAGAn+F,KAAAm+F,aAAA,CACA,QAAA7/F,GAAA,EAAuBA,EAAA0B,KAAAoxB,UAAA/yB,OAA2BC,IAAA,CAClD,GAAA8gG,GAAAp/F,KAAAoxB,UAAA9yB,EACA0B,MAAA+wB,IAAAquE,EAAApe,UAAAoe,EAAA7jC,SAEAv7D,KAAAoxB,UAAA/yB,OAAA,IAEAo/F,EAAAnhG,UAAA2iG,wBAAA,SAAAhB,GACA,OAAAj+F,KAAAuwD,cAIAvwD,KAAAs/F,YAAArB,IAEAR,EAAAnhG,UAAAqiG,sBAAA,WACA,MAAA3+F,MAAAk+F,4BAGAl+F,KAAAwwD,aACAj0D,IAAA,SAAAq0D,GAMA,MAAAA,aAAA2uC,mBACA3uC,EAAA4uC,cAEA5uC,IAEAhzD,OAAA,SAAAgsE,GAKA,MAAAA,SAGA6zB,EAAAnhG,UAAA4iG,uBAAA,SAAA1oE,GACA,IAAAx2B,KAAAk+F,4BAEA,QAEA,IAAAuB,GAAAz/F,KAAA2+F,wBAAA12C,KAAA,SAAA2I,GACA,MAAAA,KAAAp6B,GAEA,OAAApjB,SAAAqsF,IAEAhC,EAAAnhG,UAAAgjG,YAAA,SAAAI,GACA,GAAAC,GACA78E,EAAA7nB,SAAAiC,cAAA,IAYA,OAXA4lB,GAAA0a,KAAA4O,SAAA5O,KAEAmiE,EADA,WAAA78E,EAAAkjC,SACAljC,EAAA/R,KAAAo3B,QAAA,YAEA,UAAArlB,EAAAkjC,SACAljC,EAAA/R,KAAAo3B,QAAA,WAGArlB,EAAA/R,KAEA+R,EAAAkjC,SAAA,KAAA25C,IACAD,IAGA1/F,KAAAuwD,cACAvwD,KAAAuwD,aAAAmvC,IAIAjC,EAAAnhG,UAAAkiG,eAAA,SAAAxd,GACA,MAAAhhF,MAAAswD,QAGA,GAAA9kC,OAAAxrB,KAAAswD,QAAA,KAAA9kC,OAAAw1D,GAFAA,GAIAyc,EAAAvhE,QAAA8hE,EACAP,IAEA7rG,GAAA6rG,aAEGmC,kBAAA,IAAAC,kBAAA,IAAAC,sBAAA,IAAAC,wBAAA,IAAAC,qBAAA,IAAAC,kCAAA,MAAiKC,KAAA,SAAA/kE,EAAAxpC,EAAAC,GACpK,YACA,IAAAuuG,GAAAhlE,EAAA,gBACAssD,EAAAtsD,EAAA,eACA,EAAAglE,EAAAC,UACAzuG,EAAAC,QAAA61F,EAAAgW,WAEG4C,aAAA,IAAAC,eAAA,MAAoCC,KAAA,SAAAplE,EAAAxpC,EAAAC,GACvC,YAKA,SAAAwuG,KACAI,GAAA,mBAAAvgG,UAGAugG,GAAA,EACAvgG,OAAA9E,iBAAA,UAAAslG,EAAAC,WAAA,IAIA,QAAAC,KACAH,GAAA,EACAvgG,OAAAjE,oBAAA,UAAAykG,EAAAC,WAAA,GAfAhmG,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA+uG,OAAA/uG,EAAAwuG,WAAA,EACA,IAAAK,GAAAtlE,EAAA,aACAqlE,GAAA,CAQA5uG,GAAAwuG,SAMAxuG,EAAA+uG,WAGGC,YAAA,MAAgBC,KAAA,SAAA1lE,EAAAxpC,EAAAC,GACnB,YAKA,SAAAkvG,GAAAz3C,EAAA40C,EAAAznE,GACA,OAAAl4B,GAAAy/F,EAAAQ,aAAAlgG,OAAA,EAAqDC,GAAA,EAAQA,IAAA,CAC7D,GAAAggG,GAAAP,EAAAQ,aAAAjgG,EACAggG,GAAAv3B,OACAg3B,EAAAQ,aAAA95D,OAAAnmC,EAAA,GAEAk4B,IAAA8nE,IACA,EAAAV,EAAAiB,WAAAx1C,GACA40C,SACArtC,MAAA0tC,EAAA7xF,OAbA/R,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAkvG,4BAAA,EACA,IAAAlD,GAAAziE,EAAA,eACA4iE,EAAA5iE,EAAA,cAeAvpC,GAAAkvG,4BAEGC,cAAA,IAAA9rD,cAAA,MAAoC+rD,KAAA,SAAA7lE,EAAAxpC,EAAAC,GACvC,YAIA,SAAAitG,GAAAx1C,EAAA51C,GACA,GACAwtF,GADA3iG,EAAA,EAEA2/F,EAAAxqF,EAAAwqF,OAAArtC,EAAAn9C,EAAAm9C,KACA,KAgBA,IAfAA,EAAAswC,YAAA73C,EAAA40C,IACA,EAAAkD,EAAAC,WAAAxwC,MAAAywC,OAAA50F,MAAAxM,OAAAwM,KACAoyF,EAAAx1C,GACA40C,SACArtC,QAAAywC,OAAA50F,MAWAw0F,EAAArwC,EAAA0wC,OAAAhjG,IACAugG,EAAAx1C,GACA40C,SACArtC,MAAAqwC,IAEA3iG,IAGA,MAAAioD,KA/BA7rD,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAitG,cAAA,EACA,IAAAsC,GAAAhmE,EAAA,eAiCAvpC,GAAAitG,cAEG0C,eAAA,MAAmBC,KAAA,SAAArmE,EAAAxpC,EAAAC,GACtB,YACA8I,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAutG,YAAAvtG,EAAA2sG,aAAA3sG,EAAA0uE,WAAA,GACA1uE,EAAA0uE,OAAA,eACA1uE,EAAA2sG,gBACA3sG,EAAAutG,oBAEIsC,KAAA,SAAAtmE,EAAAxpC,EAAAC,GACJ,YAIA,SAAA8vG,GAAAzD,EAAA35D,EAAAr8B,EAAA4qD,EAAA51D,GACA,GAAA8gG,EAAAoB,YAAAlB,IAGAF,EAAAoB,YAAAlB,GAAA35D,GAAA,CAGA,GAAA3zB,KACA1I,IACA0I,EAAAqG,KAAA/O,GAEA4qD,GACAliD,EAAAqG,KAAA67C,EAEA,QAAAv0D,GAAA,EAAmBA,EAAAy/F,EAAAoB,YAAAlB,GAAA35D,GAAAjmC,OAAmDC,IACtEy/F,EAAAoB,YAAAlB,GAAA35D,GAAAhmC,GAAAsL,MAAA3M,EAAA0T,IAlBAjW,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA8vG,aAAA,EACA,IAAA3D,GAAA5iE,EAAA,cAmBAvpC,GAAA8vG,aAEGzsD,cAAA,MAAkB0sD,KAAA,SAAAxmE,EAAAxpC,EAAAC,GACrB,YAGA,SAAAwvG,GAAAxwC,GACA,MAAAA,GAAAnkD,MAAAmkD,IAGA,MAAAA,EAAAywC,SAGAzwC,EAAAywC,SAAAzwC,IAGA,IAAAA,EAAAywC,OAAAt6B,SAZArsE,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAwvG,cAAA,GAgBAxvG,EAAAwvG,iBAEIQ,KAAA,SAAAzmE,EAAAxpC,EAAAC,GACJ,YAGA,SAAA6sG,GAAAn/B,GACA,sBAAAA,GAHA5kE,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA6sG,eAAA,GAIA7sG,EAAA6sG,kBAEIoD,KAAA,SAAA1mE,EAAAxpC,EAAAC,GACJ,YAOA,SAAA8uG,GAAAzjG,GACA,OAAAygG,EAAAe,YAAAxhG,EAAAgL,MAAA,CAGA,GAAAohD,IAAA,EAAAy4C,EAAAC,eAAA9kG,EACA,IAAAosD,EAAA,CAGA,GAAAphD,GAAAohD,EAAA0E,UACA8E,EAAAxJ,EAAAwJ,OACA,EAAAmvC,EAAAN,UAAA,IAAAr4C,EAAA/kB,MAAAr8B,EAAA4qD,EAAA51D,IACA,EAAA+kG,EAAAN,UAAAzkG,EAAAghG,OAAA50C,EAAA/kB,MAAAr8B,EAAA4qD,EAAA51D,IACA,EAAAglG,EAAAnB,yBAAA7jG,EAAAgL,KAAAohD,EAAA40C,OAAAhhG,EAAAu5B,UAlBA97B,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA8uG,cAAA,EACA,IAAAhD,GAAAviE,EAAA,mBACA2mE,EAAA3mE,EAAA,oBACA6mE,EAAA7mE,EAAA,cACA8mE,EAAA9mE,EAAA,+BAeAvpC,GAAA8uG,cAEGwB,+BAAA,IAAAC,aAAA,IAAAC,kBAAA,IAAAC,mBAAA,MAAiGC,KAAA,SAAAnnE,EAAAxpC,EAAAC,GACpG,YAKA,SAAA8sG,GAAAp6D,EAAA25D,EAAAh2F,EAAA4qD,GACA,GAAA0vC,GACAl5C,GACA/kB,QACA25D,SAEA,mBAAAprC,KACAxJ,EAAAwJ,OAAA,EAAA2vC,EAAAC,kBAAA5vC,EAAAorC,IAEA50C,EAAA0E,UAAA9lD,CACA,KACAs6F,EAAAxE,EAAAz9B,OAAAzhD,KAAAE,UAAAsqC,GAEA,MAAApsD,GACA,SAAA2pB,OAAA,8BAAA4E,OAAAvuB,EAAA6Z,UAEA,MAAAyrF,GApBA7nG,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA8sG,mBAAA,EACA,IAAA8D,GAAArnE,EAAA,uBACA4iE,EAAA5iE,EAAA,cAmBAvpC,GAAA8sG,mBAEGzpD,cAAA,IAAAytD,sBAAA,MAA4CC,KAAA,SAAAxnE,EAAAxpC,EAAAC,GAC/C,YAMA,SAAAgtG,GAAAhuC,EAAAvH,EAAA40C,GACA,IACArtC,EAAAswC,YAAA73C,EAAA40C,GAEA,MAAAt/E,KATAjkB,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAgtG,gBAAA,GAYAhtG,EAAAgtG,mBAEIgE,KAAA,SAAAznE,EAAAxpC,EAAAC,GACJ,YAQA,SAAA6wG,GAAAz0E,EAAAiwE,GAEA,QAAA4E,GAAA56F,EAAA66F,GACA90E,EAAA/lB,EAAA66F,GACArb,EAAAgW,SAAAzkF,QACAilF,WACSltE,IAAAmX,EAAA26D,GALT,GAAA36D,IAAA,EAAAy/C,EAAA5rD,UAUA,OAHA0rD,GAAAgW,SAAAzkF,QACAilF,WACKrtE,GAAAsX,EAAA26D,GACL36D,EAlBA,GAAAtM,GAAA57B,WAAA47B,iBAAA,SAAAC,GACA,MAAAA,MAAAC,WAAAD,GAA4CE,QAAAF,GAE5CnhC,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA6wG,qBAAA,EACA,IAAAhb,GAAAtsD,EAAA,eACAwsD,EAAA/rD,EAAAT,EAAA,mBAcAvpC,GAAA6wG,qBAEGM,cAAA,IAAAnsD,kBAAA,KAAuCosD,KAAA,SAAA7nE,EAAAxpC,EAAAC,GAC1C,YAIA,SAAAotG,GAAA16D,EAAAtW,EAAAiwE,GACA,WAAAP,EAAAe,YAAAn6D,KAGA,kBAAAtW,KAGA,EAAA0vE,EAAAe,YAAAR,IAVAvjG,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAotG,4BAAA,EACA,IAAAtB,GAAAviE,EAAA,kBAUAvpC,GAAAotG,4BAEGoD,kBAAA,MAAsBa,KAAA,SAAA9nE,EAAAxpC,EAAAC,GACzB,YAKA,SAAAmwG,GAAA9kG,GACA,GAAAosD,EACA,IAAApsD,EAAAgL,KAAAtK,MAAA,EAAAogG,EAAAz9B,OAAAjiE,UAAA0/F,EAAAz9B,OACA,QAEA,KACAjX,EAAAxqC,KAAAC,MAAA7hB,EAAAgL,KAAAtK,MAAAogG,EAAAz9B,OAAAjiE,SAEA,MAAAuW,GACA,SAEA,GAAAy0C,EAAAwJ,MAAA,CACA,GAAAqwC,GAAAjmG,EAAAghG,OACAkF,EAAAlmG,EAAAu5B,OACA4sE,EAAA/5C,EAAAwJ,KACAxJ,GAAAwJ,MAAA,SAAAwwC,GACA,GAAAF,EAAA,CAGA,GAAAG,IAAA,EAAAzF,EAAAa,gBAAA0E,EAAAF,EAAAG,EACAC,IAGAH,EAAAjC,YAAAoC,EAAAJ,KAGA,MAAA75C,GA9BA3uD,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAAmwG,kBAAA,EACA,IAAAhE,GAAA5iE,EAAA,eACA0iE,EAAA1iE,EAAA,oBA6BAvpC,GAAAmwG,kBAEG9sD,cAAA,IAAAsuD,oBAAA,MAA0CC,KAAA,SAAAroE,EAAAxpC,EAAAC,GAY7C,QAAAu9B,KACA,SAAAvI,OAAA,mCAEA,QAAAwI,KACA,SAAAxI,OAAA,qCAsBA,QAAAyI,GAAAC,GACA,GAAAC,IAAAvlB,WAEA,MAAAA,YAAAslB,EAAA,EAGA,KAAAC,IAAAJ,IAAAI,IAAAvlB,WAEA,MADAulB,GAAAvlB,WACAA,WAAAslB,EAAA,EAEA,KAEA,MAAAC,GAAAD,EAAA,GACK,MAAAryB,GACL,IAEA,MAAAsyB,GAAA/yB,KAAA,KAAA8yB,EAAA,GACS,MAAAryB,GAET,MAAAsyB,GAAA/yB,KAAAwD,KAAAsvB,EAAA,KAMA,QAAAE,GAAAC,GACA,GAAAC,IAAAzlB,aAEA,MAAAA,cAAAwlB,EAGA,KAAAC,IAAAN,IAAAM,IAAAzlB,aAEA,MADAylB,GAAAzlB,aACAA,aAAAwlB,EAEA,KAEA,MAAAC,GAAAD,GACK,MAAAxyB,GACL,IAEA,MAAAyyB,GAAAlzB,KAAA,KAAAizB,GACS,MAAAxyB,GAGT,MAAAyyB,GAAAlzB,KAAAwD,KAAAyvB,KAYA,QAAAE,KACAC,GAAAC,IAGAD,GAAA,EACAC,EAAAxxB,OACAyxB,EAAAD,EAAArE,OAAAsE,GAEAC,GAAA,EAEAD,EAAAzxB,QACA2xB,KAIA,QAAAA,KACA,IAAAJ,EAAA,CAGA,GAAA9lB,GAAAulB,EAAAM,EACAC,IAAA,CAGA,KADA,GAAAK,GAAAH,EAAAzxB,OACA4xB,GAAA,CAGA,IAFAJ,EAAAC,EACAA,OACAC,EAAAE,GACAJ,GACAA,EAAAE,GAAAtkB,KAGAskB,IAAA,EACAE,EAAAH,EAAAzxB,OAEAwxB,EAAA,KACAD,GAAA,EACAJ,EAAA1lB,IAiBA,QAAAomB,GAAAZ,EAAAa,GACAnwB,KAAAsvB,MACAtvB,KAAAmwB,QAYA,QAAAC,MAhKA,GAOAb,GACAG,EARAzH,EAAAt2B,EAAAC,YAgBA,WACA,IAEA29B,EADA,kBAAAvlB,YACAA,WAEAmlB,EAEK,MAAAlyB,GACLsyB,EAAAJ,EAEA,IAEAO,EADA,kBAAAzlB,cACAA,aAEAmlB,EAEK,MAAAnyB,GACLyyB,EAAAN,KAuDA,IAEAS,GAFAC,KACAF,GAAA,EAEAG,GAAA,CAyCA9H,GAAAoI,SAAA,SAAAf,GACA,GAAA3e,GAAA,GAAAtU,OAAAwN,UAAAxL,OAAA,EACA,IAAAwL,UAAAxL,OAAA,EACA,OAAAC,GAAA,EAAuBA,EAAAuL,UAAAxL,OAAsBC,IAC7CqS,EAAArS,EAAA,GAAAuL,UAAAvL,EAGAwxB,GAAA9Y,KAAA,GAAAkZ,GAAAZ,EAAA3e,IACA,IAAAmf,EAAAzxB,QAAAuxB,GACAP,EAAAW,IASAE,EAAA5zB,UAAAmP,IAAA,WACAzL,KAAAsvB,IAAA1lB,MAAA,KAAA5J,KAAAmwB,QAEAlI,EAAAqI,MAAA,UACArI,EAAAsI,SAAA,EACAtI,EAAAuI,OACAvI,EAAAwI,QACAxI,EAAAyI,QAAA,GACAzI,EAAA0I,YAIA1I,EAAA2I,GAAAR,EACAnI,EAAA4I,YAAAT,EACAnI,EAAA6I,KAAAV,EACAnI,EAAA8I,IAAAX,EACAnI,EAAA+I,eAAAZ,EACAnI,EAAAgJ,mBAAAb,EACAnI,EAAA1c,KAAA6kB,EACAnI,EAAAiJ,gBAAAd,EACAnI,EAAAkJ,oBAAAf,EAEAnI,EAAAmJ,UAAA,SAAAre,GAAqC,UAErCkV,EAAAoJ,QAAA,SAAAte,GACA,SAAA6T,OAAA,qCAGAqB,EAAAqJ,IAAA,WAA2B,WAC3BrJ,EAAAsJ,MAAA,SAAAC,GACA,SAAA5K,OAAA,mCAEAqB,EAAAwJ,MAAA,WAA4B,eAExBgyE,KAAA,SAAAtoE,EAAAxpC,EAAAC,IACJ,SAAA8xG,IAAyB,WACzB,YAKA,SAAAC,GAAAp3E,GACA,GAAA1T,GAAA7Y,KAAA6Y,WACA,OAAA7Y,MAAAomC,KACA,SAAArrC,GAEA,MAAA8d,GAAAqO,QAAAqF,KAAA6Z,KAAA,WACA,MAAArrC,MAGA,SAAAouF,GAEA,MAAAtwE,GAAAqO,QAAAqF,KAAA6Z,KAAA,WAEA,MAAAvtB,GAAAqkB,OAAAisD,OAMA,QAAAljD,GAAA2tB,GAEA,UADA5zD,MACA,SAAAknB,EAAAgW,GAeA,QAAAilC,GAAA7jE,EAAA3C,GACA,GAAAA,IAAA,gBAAAA,IAAA,kBAAAA,IAAA,CACA,GAAAyqC,GAAAzqC,EAAAyqC,IACA,sBAAAA,GAaA,WAZAA,GAAA5pC,KACAb,EACA,SAAAA,GACAwmE,EAAA7jE,EAAA3C,IAEA,SAAAsB,GACA0T,EAAArS,IAAyBqW,OAAA,WAAAw0E,OAAAlsF,GACzB,KAAAihE,GACAh3C,EAAAvW,KAOAA,EAAArS,IAAiBqW,OAAA,YAAA5Z,MAAAY,GACjB,KAAAuiE,GACAh3C,EAAAvW,GAnCA,IAAAijD,OAAA,KAAAA,EAAAv1D,OACA,MAAA6+B,GACA,GAAA0mE,iBACAhwC,GACA,IACAA,EACA,kEAIA,IAAAjjD,GAAAtU,MAAAC,UAAAqB,MAAAnB,KAAAo3D,EACA,QAAAjjD,EAAAtS,OAAA,MAAA6oB,MA4BA,QA3BAg3C,GAAAvtD,EAAAtS,OA2BAC,EAAA,EAAmBA,EAAAqS,EAAAtS,OAAiBC,IACpC6jE,EAAA7jE,EAAAqS,EAAArS,MASA,QAAAm9F,GAAAv3F,GACA,MAAAkP,SAAAlP,OAAA,KAAAA,EAAA7F,QAGA,QAAA+xB,MAGA,QAAA1Z,GAAAsX,EAAA61E,GACA,kBACA71E,EAAApkB,MAAAi6F,EAAAh6F,YAQA,QAAAqyB,GAAAlO,GACA,KAAAhuB,eAAAk8B,IACA,SAAA0nE,WAAA,uCACA,sBAAA51E,GAAA,SAAA41E,WAAA,iBAEA5jG,MAAA2uD,OAAA,EAEA3uD,KAAA8jG,UAAA,EAEA9jG,KAAA+jG,WAAAlhG,GAEA7C,KAAAgkG,cAEAC,EAAAj2E,EAAAhuB,MAGA,QAAAkkG,GAAA96E,EAAAkf,GACA,SAAAlf,EAAAulC,QACAvlC,IAAA26E,MAEA,QAAA36E,EAAAulC,OAEA,WADAvlC,GAAA46E,WAAAhtF,KAAAsxB,EAGAlf,GAAA06E,UAAA,EACA5nE,EAAAioE,aAAA,WACA,GAAAzsD,GAAA,IAAAtuB,EAAAulC,OAAArmB,EAAA87D,YAAA97D,EAAA+7D,UACA,WAAA3sD,EAEA,YADA,IAAAtuB,EAAAulC,OAAAznC,EAAAgW,GAAAoL,EAAAO,QAAAzf,EAAA26E,OAGA,IAAAO,EACA,KACAA,EAAA5sD,EAAAtuB,EAAA26E,QACK,MAAA9mG,GAEL,WADAigC,GAAAoL,EAAAO,QAAA5rC,GAGAiqB,EAAAohB,EAAAO,QAAAy7D,KAIA,QAAAp9E,GAAAkC,EAAAm7E,GACA,IAEA,GAAAA,IAAAn7E,EACA,SAAAw6E,WAAA,4CACA,IACAW,IACA,gBAAAA,IAAA,kBAAAA,IACA,CACA,GAAAn+D,GAAAm+D,EAAAn+D,IACA,IAAAm+D,YAAAroE,GAIA,MAHA9S,GAAAulC,OAAA,EACAvlC,EAAA26E,OAAAQ,MACAC,GAAAp7E,EAEO,sBAAAgd,GAEP,WADA69D,GAAAvtF,EAAA0vB,EAAAm+D,GAAAn7E,GAIAA,EAAAulC,OAAA,EACAvlC,EAAA26E,OAAAQ,EACAC,EAAAp7E,GACG,MAAAnsB,GACHigC,EAAA9T,EAAAnsB,IAIA,QAAAigC,GAAA9T,EAAAm7E,GACAn7E,EAAAulC,OAAA,EACAvlC,EAAA26E,OAAAQ,EACAC,EAAAp7E,GAGA,QAAAo7E,GAAAp7E,GACA,IAAAA,EAAAulC,QAAA,IAAAvlC,EAAA46E,WAAA3lG,QACA69B,EAAAioE,aAAA,WACA/6E,EAAA06E,UACA5nE,EAAAuoE,sBAAAr7E,EAAA26E,SAKA,QAAAzlG,GAAA,EAAA2xB,EAAA7G,EAAA46E,WAAA3lG,OAA+CC,EAAA2xB,EAAS3xB,IACxD4lG,EAAA96E,IAAA46E,WAAA1lG,GAEA8qB,GAAA46E,WAAA,KAMA,QAAAU,GAAAN,EAAAC,EAAAx7D,GACA7oC,KAAAokG,YAAA,kBAAAA,KAAA,KACApkG,KAAAqkG,WAAA,kBAAAA,KAAA,KACArkG,KAAA6oC,UASA,QAAAo7D,GAAAj2E,EAAA5E,GACA,GAAAi9B,IAAA,CACA,KACAr4B,EACA,SAAAjzB,GACAsrD,IACAA,GAAA,EACAn/B,EAAAkC,EAAAruB,KAEA,SAAAouF,GACA9iC,IACAA,GAAA,EACAnpB,EAAA9T,EAAA+/D,MAGG,MAAAwb,GACH,GAAAt+C,EAAA,MACAA,IAAA,EACAnpB,EAAA9T,EAAAu7E,IA/IA,GAAAC,GAAA56F,UAmJAkyB,GAAA5/B,UAAA,eAAA+nG,GACA,MAAArkG,MAAAomC,KAAA,KAAAi+D,IAGAnoE,EAAA5/B,UAAA8pC,KAAA,SAAAg+D,EAAAC,GAEA,GAAAQ,GAAA,GAAA7kG,MAAA6Y,YAAAuX,EAGA,OADA8zE,GAAAlkG,KAAA,GAAA0kG,GAAAN,EAAAC,EAAAQ,IACAA,GAGA3oE,EAAA5/B,UAAA,QAAAqnG,EAEAznE,EAAA8J,IAAA,SAAA4tB,GACA,UAAA13B,GAAA,SAAAhV,EAAAgW,GASA,QAAAilC,GAAA7jE,EAAA3C,GACA,IACA,GAAAA,IAAA,gBAAAA,IAAA,kBAAAA,IAAA,CACA,GAAAyqC,GAAAzqC,EAAAyqC,IACA,sBAAAA,GAQA,WAPAA,GAAA5pC,KACAb,EACA,SAAAA,GACAwmE,EAAA7jE,EAAA3C,IAEAuhC,GAKAvsB,EAAArS,GAAA3C,EACA,KAAAuiE,GACAh3C,EAAAvW,GAEO,MAAAg0F,GACPznE,EAAAynE,IA5BA,IAAAlJ,EAAA7nC,GACA,MAAA12B,GAAA,GAAA0mE,WAAA,gCAGA,IAAAjzF,GAAAtU,MAAAC,UAAAqB,MAAAnB,KAAAo3D,EACA,QAAAjjD,EAAAtS,OAAA,MAAA6oB,MA2BA,QA1BAg3C,GAAAvtD,EAAAtS,OA0BAC,EAAA,EAAmBA,EAAAqS,EAAAtS,OAAiBC,IACpC6jE,EAAA7jE,EAAAqS,EAAArS,OAKA49B,EAAA+J,aAEA/J,EAAAhV,QAAA,SAAAnsB,GACA,MAAAA,IAAA,gBAAAA,MAAA8d,cAAAqjB,EACAnhC,EAGA,GAAAmhC,GAAA,SAAAhV,GACAA,EAAAnsB,MAIAmhC,EAAAgB,OAAA,SAAAniC,GACA,UAAAmhC,GAAA,SAAAhV,EAAAgW,GACAA,EAAAniC,MAIAmhC,EAAAgK,KAAA,SAAA0tB,GACA,UAAA13B,GAAA,SAAAhV,EAAAgW,GACA,IAAAu+D,EAAA7nC,GACA,MAAA12B,GAAA,GAAA0mE,WAAA,iCAGA,QAAAtlG,GAAA,EAAA2xB,EAAA2jC,EAAAv1D,OAAqCC,EAAA2xB,EAAS3xB,IAC9C49B,EAAAhV,QAAA0sC,EAAAt1D,IAAA8nC,KAAAlf,EAAAgW,MAMAhB,EAAAioE,aAEA,kBAAAT,IACA,SAAA11E,GAEA01E,EAAA11E,KAEA,SAAAA,GACA42E,EAAA52E,EAAA,IAGAkO,EAAAuoE,sBAAA,SAAA7vF,GACA,mBAAA2zB,mBACAA,QAAAu8D,KAAA,wCAAAlwF,IAIAjjB,EAAAC,QAAAsqC,IAEC1/B,KAAAwD,QAAaxD,KAAAwD,KAAAm7B,EAAA,UAAAuoE,gBACXqB,OAAA,MAAaC,KAAA,SAAA7pE,EAAAxpC,EAAAC,GAChB,YAyBA,SAAA4vC,GAAA3D,GACA,OAAA4D,EAAA5D,MAAA//B,QAAA,cAEA,QAAAmnG,GAAApnE,GAEA,WADA,KAAAA,IAAwBA,EAAAqnE,GACxB3jE,EAAA1D,IAAAsnE,EAAAnnE,KAAAH,GAGA,QAAAgxD,GAAAhxD,GAEA,WADA,KAAAA,IAAwBA,EAAAqnE,IACxB3jE,EAAA1D,IAAAunE,EAAAvnE,KAAA4D,EAAA5D,GAGA,QAAA6D,GAAA7D,GAEA,WADA,KAAAA,IAAwBA,EAAAqnE,GACxB,iBAAAlnE,KAAAH,IAAA2D,EAAA3D,GAvCAnjC,OAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,IAC9CnJ,EAAA6tC,MAAA7tC,EAAAyzG,MAAAzzG,EAAA8vC,iBAAA9vC,EAAAi9F,gBAAAj9F,EAAAqzG,oBAAA,EAEA,IAAAC,GAAA,mBAAAjlG,SACAA,OAAA69B,WACA79B,OAAA69B,UAAAC,UAIAwD,EAAApG,EAAA,2CAEAiqE,EAAAjqE,EAAA,6CAEAsG,EAAAtG,EAAA,0CAEAsE,EAAAtE,EAAA,sCACAvpC,GAAA6tC,OAEA,IAAA4lE,GAAAlqE,EAAA,sCACAvpC,GAAAyzG,OAIA,IAAAF,GAAA,uCAQAvzG,GAAAqzG,kBAKArzG,EAAAi9F,kBAKAj9F,EAAA8vC,qBAEG82B,0CAAA,GAAAC,yCAAA,GAAAC,4CAAA,GAAAppB,sCAAA,GAAAwpB,sCAAA,KAA0NwsC,KAAA,SAAAnqE,EAAAxpC,EAAAC,GAC7N,YACA,IAAA2zG,GAAApqE,EAAA,eACAxpC,GAAAC,QAAA,WAEA,UAAA2zG,EAAA7jE,uBAGG8jE,eAAA,MAAmBC,KAAA,SAAAtqE,EAAAxpC,EAAAC,GACtBD,EAAAC,QAAAupC,EAAA,sCAEGuqE,mCAAA,MAAuCC,KAAA,SAAAxqE,EAAAxpC,EAAAC,IAC1C,SAAA8xG,EAAAkC,IAAwC,WAkBxC,QAAAC,GAAAhzF,EAAAizF,GACA9lG,KAAAkrB,IAAArY,EACA7S,KAAA+lG,SAAAD,EAnBA,GAAAz1E,GAAA8K,EAAA,sBAAA9K,SACAzmB,EAAA+5C,SAAArnD,UAAAsN,MACAjM,EAAAtB,MAAAC,UAAAqB,MACAqoG,KACAC,EAAA,CAIAr0G,GAAAoY,WAAA,WACA,UAAA67F,GAAAj8F,EAAApN,KAAAwN,WAAA/J,OAAA4J,WAAAI,eAEArY,EAAAua,YAAA,WACA,UAAA05F,GAAAj8F,EAAApN,KAAA2P,YAAAlM,OAAA4J,WAAAuC,gBAEAxa,EAAAqY,aACArY,EAAAwa,cAAA,SAAAtC,GAA2CA,EAAAuV,SAM3CwmF,EAAAvpG,UAAA4pG,MAAAL,EAAAvpG,UAAA6pG,IAAA,aACAN,EAAAvpG,UAAA+iB,MAAA,WACArf,KAAA+lG,SAAAvpG,KAAAyD,OAAAD,KAAAkrB,MAIAt5B,EAAAw0G,OAAA,SAAA5gG,EAAA6gG,GACAp8F,aAAAzE,EAAA8gG,gBACA9gG,EAAA+gG,aAAAF,GAGAz0G,EAAA40G,SAAA,SAAAhhG,GACAyE,aAAAzE,EAAA8gG,gBACA9gG,EAAA+gG,cAAA,GAGA30G,EAAA60G,aAAA70G,EAAAqiC,OAAA,SAAAzuB,GACAyE,aAAAzE,EAAA8gG,eAEA,IAAAD,GAAA7gG,EAAA+gG,YACAF,IAAA,IACA7gG,EAAA8gG,eAAAt8F,WAAA,WACAxE,EAAAkhG,YACAlhG,EAAAkhG,cACKL,KAKLz0G,EAAA8xG,aAAA,kBAAAA,KAAA,SAAA11E,GACA,GAAAnb,GAAAozF,IACAt1F,IAAA9G,UAAAxL,OAAA,IAAAV,EAAAnB,KAAAqN,UAAA,EAkBA,OAhBAm8F,GAAAnzF,IAAA,EAEAwd,EAAA,WACA21E,EAAAnzF,KAGAlC,EACAqd,EAAApkB,MAAA,KAAA+G,GAEAqd,EAAAxxB,KAAA,MAGA5K,EAAAg0G,eAAA/yF,MAIAA,GAGAjhB,EAAAg0G,eAAA,kBAAAA,KAAA,SAAA/yF,SACAmzF,GAAAnzF,MAECrW,KAAAwD,QAAaxD,KAAAwD,KAAAm7B,EAAA,UAAAuoE,aAAAvoE,EAAA,UAAAyqE,kBACXe,qBAAA,IAAA5B,OAAA,MAAsC6B,KAAA,SAAAzrE,EAAAxpC,EAAAC,GACzC,YAEAD,GAAAC,SACAi1G,kBACAzqC,KAAA,OACA3f,OAAA,SACAqqD,aAAA,eACAr7D,SAAA,WACAuP,MAAA,QACAiB,UAAA,aAEA8qD,oBACA3qC,KAAA,aACA3f,OAAA,gBACAqqD,aAAA,gBACAr7D,SAAA,eACAuP,MAAA,eACAiB,UAAA,kBAEA+qD,gBACAC,WAAA,OACAC,cAAA,SACAC,aAAA,WACAC,aAAA,QACAC,eAAA,aAEAC,wBACAC,KAAA,OACAC,WAAA,cACAC,mBAAA,mBACAC,cAAA,cACAC,SAAA,WACA1pD,IAAA,MACA2pD,SAAA,WACAC,QAAA,UACAC,IAAA,MACAC,MAAA,QACAC,UAAA,aAEAC,wBACAnM,KAAA,OACAoM,cAAA,aACA/L,mBAAA,mBACAC,cAAA,WACAC,SAAA,WACAC,IAAA,MACAC,SAAA,WACAC,QAAA,UACAC,IAAA,MACAE,MAAA,QACAC,UAAA,aAEAuL,uBACAC,KAAA,OACAC,OAAA,SACAC,aAAA,eACAC,YAAA,eAEA39D,QACA49D,wBAAA,kCACAC,mCAAA,yEAEAxrC,6BAAA,IACAF,iBAAA,cACA2rC,qCAAA,IACAC,mBAAA,oDACAC,sBAAA,wCACA5yD,YAAA,UACA6yD,0BAAA,0CACAC,yBAAA,yCACAC,yBAAA,yCACAC,cAAA,oCAGIC,KAAA,SAAA9tE,EAAAxpC,EAAAC,GACJ,YAgCA,SAAAs3G,GAAAz1F,GAiBA,IAhBAzT,KAAA2zD,SAAAlgD,EAAAmpB,UACA58B,KAAAmpG,YAAA11F,EAAA01F,YACAnpG,KAAAopG,sBAAA31F,EAAA21F,sBACAppG,KAAAqpG,kBAAA51F,EAAA62B,QACAtqC,KAAAspG,iBAAAC,EAAA3rD,OAAA,SAAA5hC,EAAAwtF,GAKA,MAJAxpG,MAAAypG,yBAAAD,KACAxtF,EAAAwtF,GAAArB,EAAAG,cAGAtsF,GACGtF,KAAA1W,UAEHA,KAAA0pG,sBACA1pG,KAAAghE,SAAAvtD,EACAzT,KAAA2pG,gBAAA,EAEA3pG,KAAA2zD,SAAA52D,YACAiD,KAAA2zD,SAAA3zD,KAAA2zD,SAAA52D,UAEAiD,MAAA4pG,cAAA,wBAAA5pG,KAAA2zD,SAAA9yC,WAEA/f,EAAAtE,KAAAwD,MA8XA,QAAA6pG,GAAAC,EAAAr2F,GACA,MAAAs2F,GAAAD,EAAAr2F,GAAA2yB,KAAA,SAAAgyC,GACA,OACAA,UACAvlE,GAAAg0F,EAAAiD,MAKA,QAAAC,GAAAD,EAAAr2F,GACA,GAAAu2F,GAAAC,EAAApD,EAAAiD,GAEA,OAAAE,GAIAA,EAAAE,WACA5/D,OAAA72B,EAAA62B,OACA8+D,sBAAA31F,EAAA21F,wBACGzjE,MAAA,SAAAhnB,GAIH,MAHA4pB,SAAA5pB,MAAAqrF,EAAAG,GAAA,oDACA5hE,QAAA5pB,SAEAud,EAAAhV,SAAA,KAVAgV,EAAAgB,OAAA,GAAAktE,GAAA,6DAcA,QAAAC,GAAAC,GACA,MAAAA,KAAA,IAAAC,EAAAzsG,QAAAwsG,GA9cA,GAAA3/D,GAAAxP,EAAA,mBACAivE,EAAAjvE,EAAA,sBACAr6B,EAAAq6B,EAAA,4BACAya,EAAAza,EAAA,eACA4rE,EAAAnxD,EAAAmxD,mBACAF,EAAAjxD,EAAAixD,iBACAsB,EAAAvyD,EAAAuyD,sBACAkB,EAAAluE,EAAA,2BACAe,EAAAf,EAAA,iBACA8uE,EAAA9uE,EAAA,+BACAqvE,EAAArvE,EAAA,+BACAsvE,EAAAtvE,EAAA,gCAAAgvE,GAEAI,GACAxD,EAAAt7D,SACAs7D,EAAA9qD,UACA8qD,EAAA/rD,OAEA0vD,GACA7D,EAAAzqC,KACAyqC,EAAApqD,OACAoqD,EAAAC,aACAD,EAAA7rD,MACA6rD,EAAAp7D,SACAo7D,EAAA5qD,WAEA0uD,GAAA,gCACApB,EAAAmB,EAAAl/E,OAAAm/E,EA4BA7pG,GAAA8jC,YAAAskE,GAEAA,EAAA5sG,UAAAu1C,WAAA,WACA,GAAA+4D,GACAxhF,EAAAppB,KACA6qG,EAAA1+F,YAAA,WACA,IAAAy+F,IAAAxhF,GAAAkgF,iBACA,GAAAlgF,EAAAkgF,iBAAAsB,KAAAzC,EAAAG,aACA,MAIAl8F,eAAAy+F,GAEAzhF,EAAAsb,MAAA,2BAzCA,IA4CA,OAAA8lE,GAAA1xF,QACAwxB,OAAAlhB,EAAA43C,SAAA12B,SACGlE,KAAA,SAAA0kE,GAGH,MAFA1hF,GAAA2hF,cAAAD,EAEA1hF,EAAA4hF,4BAAA5hF,EAAA43C,YACG56B,KAAA,SAAA6kE,GAGH,MAFA7hF,GAAA8hF,wBAAAD,EAEA7hF,EAAA+hF,6BACG/kE,KAAA,SAAAsgD,GACHt9D,EAAAgiF,gBAAA1kB,EACAt9D,EAAAiiF,4BAAAjiF,EAAAgiF,gBAAA/sG,OAAA,KAIA6qG,EAAA5sG,UAAAgvG,mBAAA,WACAtrG,KAAA2pG,gBAAA,GAGAT,EAAA5sG,UAAAivG,2BAAA,WACA,MAAAn4F,SAAApT,KAAAqrG,8BAGAnC,EAAA5sG,UAAAkvG,iBAAA,SAAAziD,GACA/oD,KAAAorG,gBAAAp0F,KAAA+xC,GACA/oD,KAAA0kC,MAAA,mBAAAqkB,GACA/oD,KAAAyrG,0BAAA1iD,IAGAmgD,EAAA5sG,UAAAovG,oBAAA,SAAA3iD,GACA,GAAA4iD,GAAA3rG,KAAAorG,gBAAAttG,QAAAirD,IAEA,IAAA4iD,IAIA3rG,KAAAorG,gBAAA3mE,OAAAknE,EAAA,GACA3rG,KAAA0kC,MAAA,sBAAAqkB,KAGAmgD,EAAA5sG,UAAAsvG,sBAAA,WACA,GAAAxiF,GAAAppB,IAEA,OAAAopB,GAAA+hF,2BAAA/kE,KAAA,SAAAsgD,GACAt9D,EAAAgiF,gBAAA1kB,EAEAt9D,EAAAsb,MAAA,4BAIAwkE,EAAA5sG,UAAAmvG,0BAAA,SAAA1iD,GACA/oD,KAAA6rG,qBAAA9iD,EACA/oD,KAAA0kC,MAAA,4BAAAqkB,IAGAmgD,EAAA5sG,UAAAwvG,iBAAA,SAAAC,GACA,GAAAC,GAAAhsG,KAAAisG,oBAEAjsG,MAAAisG,qBAAAF,EACA/rG,KAAA0kC,MAAA,oBACAsnE,iBACAE,UAAAH,KAIA7C,EAAA5sG,UAAA6vG,0BAAA,WACAnsG,KAAA6rG,qBAAA,KACA7rG,KAAA0kC,MAAA,6BACA1kC,KAAAosG,6BACAC,eAAA,KAIAnD,EAAA5sG,UAAAgwG,oBAAA,SAAAP,GACA/rG,KAAA0kC,MAAA,yBACAolE,cAAAiC,KAIA7C,EAAA5sG,UAAAiwG,eAAA,WACA5hE,EAAAgC,UAAA3sC,KAAAghE,SAAA12B,OAAA,oBACAtqC,KAAAwsG,eAAA,EACAxsG,KAAA0kC,MAAA,mBAGAwkE,EAAA5sG,UAAAmwG,gBAAA,WACAzsG,KAAAwsG,eAAA,EACAxsG,KAAA0kC,MAAA,oBAGAwkE,EAAA5sG,UAAAowG,aAAA,WACA,MAAAt5F,SAAApT,KAAAwsG,gBAGAtD,EAAA5sG,UAAAqwG,6BAAA,SAAA5jD,GACA/oD,KAAA4sG,iCAAA7jD,EACA/oD,KAAA0kC,MAAA,+BAAAqkB,IAGAmgD,EAAA5sG,UAAAmtG,yBAAA,SAAAxwF,GACA,YAAAA,GAIA,QAAAjZ,KAAAopG,sBAAAhtC,KACA,aAEG,KAAAp8D,KAAAopG,sBAAAnwF,GAGH,QAGA,OAAA0xF,GAAA7sG,QAAAmb,IAAA,IAOAjZ,KAAAopG,sBAAAyD,sBAIA7sG,KAAAopG,sBAAAyD,sBAAA/uG,QAAAmb,IAAA,EAIAyxF,EAAA5sG,QAAAmb,IAAA,IAGAiwF,EAAA5sG,UAAAwwG,4BAAA,SAAAr5F,GACA,GAAAs5F,GAAA/sG,KAAAurG,+BAAA93F,EAAA44F,cACAh4D,EAAA5gC,EAAAu5F,uBAAAv5F,EAAAu5F,sBAAA34D,MACA44D,EAAA54D,IAAAr0C,KAAAktG,8BAEA,SAAAltG,KAAA2pG,kBAQAoD,KAAAt5F,EAAA44F,eAAAY,KAOA/D,EAAA5sG,UAAA8vG,4BAAA,SAAA34F,GACA,GAAA05F,GAAAntG,KAAA8sG,4BAAAr5F,GACA25F,GACAC,wBAAAj6F,QAAAK,EAAAu5F,uBACAv8F,KAAAgD,EAAAhD,KAGAzQ,MAAAqrG,4BAAA53F,EAAA44F,cAEA54F,EAAA44F,cACArsG,KAAAktG,+BAAAz5F,EAAAu5F,uBAAAv5F,EAAAu5F,sBAAA34D,YAEAr0C,MAAAktG,+BAGAC,IAIA15F,EAAA44F,cACArsG,KAAA0kC,MAAA,2BAAA0oE,GAEAptG,KAAA0kC,MAAA,gCAIAwkE,EAAA5sG,UAAAgxG,kBAAA,WAKA,MAAAttG,MAAAorG,gBAAAztG,SAGAurG,EAAA5sG,UAAAixG,uBAAA,WACA,MAAAvtG,MAAA6rG,sBAGA3C,EAAA5sG,UAAAkxG,kBAAA,WACA,MAAAxtG,MAAAstG,oBAAAjvG,OAAA,GAGA6qG,EAAA5sG,UAAAmxG,iBAAA,WACA,MAAAztG,MAAAkrG,wBAAA7sG,OAAA,EACAosG,EAGAzqG,KAAAkrG,wBAAA,IAGAhC,EAAA5sG,UAAAoxG,uBAAA,WACA,MAAA1tG,MAAAisG,sBAGA/C,EAAA5sG,UAAAqxG,uBAAA,SAAAtkD,GACArpD,KAAA4tG,iBAAAvkD,GAGA6/C,EAAA5sG,UAAAuxG,qBAAA,SAAAC,EAAAnvF,GACA3e,KAAA+tG,gBACAl7F,GAAAi7F,EACAnvF,UAIAuqF,EAAA5sG,UAAA0xG,oCAAA,WACA,GACA1vG,GADA8qB,EAAAppB,IAGA,KAAA1B,EAAA,EAAaA,EAAA0B,KAAAkrG,wBAAA7sG,OAAyCC,IACtD,GAAA8qB,EAAAkgF,iBAAAtpG,KAAAkrG,wBAAA5sG,MAAA6pG,EAAAC,KACA,QAIA,WAGAc,EAAA5sG,UAAA2xG,qBAAA,SAAAh1F,GACAjZ,KAAAspG,iBAAArwF,GAAAkvF,EAAAC,MAGAc,EAAA5sG,UAAA4xG,sBAAA,SAAAz6F,GACAzT,KAAA0pG,mBAAAluG,eAAAiY,EAAA2G,QAGApa,KAAA0pG,mBAAAj2F,EAAA2G,MAAA3G,EAAAkL,MACA3e,KAAAspG,iBAAA71F,EAAA2G,MAAA+tF,EAAAE,SAGAa,EAAA5sG,UAAA6xG,qBAAA,SAAAxvF,GACA3e,KAAA0kC,MAAA,uBAAA/lB,IAGAuqF,EAAA5sG,UAAA8xG,YAAA,SAAAzvF,GACA3e,KAAA0kC,MAAA,gBAAA/lB,IAGAuqF,EAAA5sG,UAAA+xG,WAAA,WACAruG,KAAA0kC,MAAA,iBAGAwkE,EAAA5sG,UAAAgyG,kBAAA,WACAtuG,KAAA0kC,MAAA,sBAGAwkE,EAAA5sG,UAAAiyG,gBAAA,WACAvuG,KAAA0kC,MAAA,oBAGAwkE,EAAA5sG,UAAAkyG,2BAAA,WACA,GAEA7vF,GAFAyK,EAAAppB,KACA6oC,EAAA3M,EAAAhV,SAWA,OARAlnB,MAAA0kC,MAAA,qCAEAtb,EAAAigF,kBACAxgE,EAAA7oC,KAAA+qG,cAAApkB,oBAAA3mF,KAAA4sG,iCAAAv4D,OAAA1O,MAAA,SAAA/wB,GACA+J,EAAA/J,KAIAi0B,EAAAzC,KAAA,WAGA,aAFAhd,GAAAwjF,iCAEAxjF,EAAAwiF,0BACGxlE,KAAA,WACHhd,EAAAqjF,kBACArjF,EAAAsb,MAAA,qCAAA/lB,MAIAuqF,EAAA5sG,UAAAmyG,iCAAA,WACAzuG,KAAA0kC,MAAA,4CAEA1kC,MAAA4sG,kCAGA1D,EAAA5sG,UAAA6uG,yBAAA,WACA,GAAA/hF,GAAAppB,IAEA,OAAAopB,GAAAigF,gBACAntE,EAAAhV,YAGAkC,EAAA2hF,cAAAxkB,qBACAC,cAAA,IAAAxmF,KAAAopG,sBAAAsF,gCACGtoE,KAAA,SAAAsgD,GACH,MAAAt9D,GAAAulF,4BAAAjoB,GAAAnqF,IAAA,SAAAwsD,GAGA,MAFAA,GAAA6lD,SAAA,EAEA7lD,MAEGpjB,MAAA,WACH,MAAAzJ,GAAAhV,eAIAgiF,EAAA5sG,UAAAqyG,4BAAA,SAAAjoB,GACA,GAAAmoB,GAAA7uG,KAAAkrG,wBAAAttD,OAAA,SAAAztB,EAAAlX,GACA,GAAAqxF,GAAAvD,EAAA9tF,EAMA,OAJAoxF,GAAAC,IACAn6E,EAAAnZ,KAAAszF,GAGAn6E,MAGA,OAAAu2D,GAAA9oF,OAAA,SAAAmrD,GACA,MAAA8lD,GAAA/wG,QAAAirD,EAAAt4C,OAAA,KAIAy4F,EAAA5sG,UAAA0uG,4BAAA,SAAAv3F,GACA,GAEAq7F,GAFA1lF,EAAAppB,KACA6sG,EAAAp5F,EAAA21F,sBAAAyD,uBAAAnC,CAGA,MAAAmC,YAAAxwG,QACA,SAAA+tG,GAAA,0CAgBA,OAZAyC,KAAAjvG,OAAA,SAAA4H,EAAAupG,GAA6E,MAAAlC,GAAA/uG,QAAA0H,KAAAupG,IAE7ED,EAAAjC,EAAAtwG,IAAA,SAAAutG,GACA,MAAAD,GAAAC,EAAAr2F,GAAA2yB,KAAA,SAAAz8B,GAKA,MAJAA,GAAAyuE,UACAhvD,EAAAkgF,iBAAA3/F,EAAAkJ,IAAAs1F,EAAAI,aAGA5+F,MAIAuyB,EAAA8J,IAAA8oE,GAAA1oE,KAAA,SAAAz8B,GAKA,MAJAA,KAAA/L,OAAA,SAAA4H,GACA,MAAAA,GAAA4yE,UAGA,IAAAzuE,EAAAtL,OACA69B,EAAAgB,OAAA,GAAAktE,GAAA,wCAGAzgG,EAAApN,IAAA,SAAAiJ,GAAuC,MAAAA,GAAAqN,QAmCvClhB,EAAAC,QAAAs3G,IAEGj0D,cAAA,IAAA+5D,kBAAA,IAAAC,qBAAA,IAAAC,0BAAA,IAAA7xE,gBAAA,IAAA8xE,+BAAA,IAAAC,8BAAA,IAAAn4C,2BAAA,GAAAo4C,8BAAA,MAAwPC,KAAA,SAAAn0E,EAAAxpC,EAAAC,GAC3P,YA2aA,SAAA29G,GAAA97F,GACAzT,KAAAqqC,QAAA52B,EAAA62B,OACAtqC,KAAAwvG,aAAAtnE,IACAloC,KAAAyvG,eAAAx0G,SAAAiC,cAAA,OACA8C,KAAAyvG,eAAA58F,GAAA,sBAAA7S,KAAAwvG,aACAxvG,KAAAyvG,eAAAzyE,aAAA,+BACAh9B,KAAAyvG,eAAA7yG,MAAAC,QAAA,OACAmD,KAAAyvG,eAAA9rE,UAAA,oBACA3jC,KAAA0vG,uBAAAj8F,EAAA21F,sBAEAtoG,EAAAtE,KAAAwD,MAmlBA,QAAAomF,GAAAr9B,GACA,GAAAs9B,IACAhyC,MAAA0U,EAAA1U,MACAla,QAAA4uB,EAAA5uB,QACA1pB,KAAAs4C,EAAAt4C,KAgCA,OA7BA,OAAAs4C,EAAA6lD,UACAvoB,EAAAuoB,QAAA7lD,EAAA6lD,SAGA7lD,EAAAt4C,OAAAmlC,EAAAmxD,mBAAA3qC,OACAiqB,EAAA9mC,YAAAwJ,EAAAxJ,aAGAwJ,EAAAt4C,OAAAk/F,KACAtpB,EAAAlsD,QAAAy1E,eAAA7mD,EAAA6mD,gBAGA,iBAAA7mD,GAAA6uB,yBACAyO,EAAA1O,iBAAA5uB,EAAA4uB,iBACA0O,EAAAzO,uBAAA7uB,EAAA6uB,wBAGA7uB,EAAA/I,mBACAqmC,EAAArmC,iBAAA+I,EAAA/I,kBAGA+I,EAAA8mD,aACAxpB,EAAAwpB,WAAA9mD,EAAA8mD,YAGA9mD,EAAA3J,UACAinC,EAAAjnC,QAAA2J,EAAA3J,SAGAinC,EA1iCA,GAAAp/C,GAAA9L,EAAA,gBAAA8L,OACA0D,EAAAxP,EAAA,mBACAgzB,EAAAhzB,EAAA,yBACAya,EAAAza,EAAA,eACAivE,EAAAjvE,EAAA,sBACA+tE,EAAA/tE,EAAA,kBACAr6B,EAAAq6B,EAAA,4BACAqW,EAAArW,EAAA,2BAEA20E,EAAA30E,EAAA,qBACA40E,EAAA50E,EAAA,gCAAAgvE,GACAtD,EAAAjxD,EAAAixD,iBACAmJ,EAAA70E,EAAA,kBAAA60E,aACAC,EAAA90E,EAAA,kBACA+M,EAAA/M,EAAA,mBACAe,EAAAf,EAAA,iBACA+0E,EAAA/0E,EAAA,uBACAg1E,EAAAh1E,EAAA,wBACAspD,EAAAtpD,EAAA,wBACAiO,EAAAjO,EAAA,2BAAAiO,cAKAgnE,GACA,mBACA,2BACA,6BACA,wBAGA,oBACA,YACA,sBACA,aACA,aACA,0BACA,gBACA,sBAGA,wBACA,kCACA,kCAEAC,GACAxJ,EAAApqD,OACAoqD,EAAAC,aACAD,EAAAp7D,SACAo7D,EAAA5qD,UACA,gBAEAq0D,GACAzJ,EAAApqD,OACAoqD,EAAAC,aACAD,EAAAp7D,SACAo7D,EAAA5qD,WAEA0zD,IAGAA,GAAA/5D,EAAAmxD,mBAAA9qD,YAAA,EACA0zD,EAAA/5D,EAAAmxD,mBAAAt7D,WAAA,EAwXA3qC,EAAA8jC,YAAA2qE,GAEAA,EAAAjzG,UAAA+xE,YAAA,SAAA9hD,GACA,GAAAgkF,GAAAC,EACApnF,EAAAppB,KACA48B,EAAAxT,EAAAsmF,uBAAA9yE,WAAAxT,EAAAsmF,uBAAA9+F,QAEA,OAAAgsB,GAKGxT,EAAAsmF,uBAAA9yE,WAAAxT,EAAAsmF,uBAAA9+F,UACH+5B,EAAAgC,UAAAvjB,EAAAihB,QAAA,2BACA9d,GAAA,GAAA69E,GAAA,gEAKA,gBAAAxtE,KACAA,EAAA3hC,SAAA8Y,cAAA6oB,IAGAA,GAAA,IAAAA,EAAAo0B,SAOAp0B,EAAAw9C,UAAAx2C,QACA+G,EAAAgC,UAAAvjB,EAAAihB,QAAA,2BACA9d,GAAA,GAAA69E,GAAA,8EAMAhhF,EAAAqnF,SAAAxpE,KAA2B+oE,EAAAU,IAC3BtnF,EAAAsmF,uBAAAp1F,SACAi2F,EAAAP,EAAA5mF,EAAAsmF,uBAAAp1F,SAAA01F,EAAA5mF,EAAAsmF,uBAAAp1F,OAAAupB,MAAA,SAEAza,EAAAqnF,SAAAxpE,EAAA7d,EAAAqnF,SAAAF,IAGAN,MAEA7mF,EAAAqnF,SAAAE,SAAAvnF,EAAAqnF,SAAAE,SAAAxoE,QAAA,WAGA/e,EAAAsmF,uBAAAM,cACAt1G,OAAAusB,KAAAmC,EAAAsmF,uBAAAM,cAAA3yG,QAAA,SAAA4b,GACAmQ,EAAAqnF,SAAAx3F,GAAAi3F,EAAA9mF,EAAAsmF,uBAAAM,aAAA/2F,MAIAu3F,EAAA91G,OAAAusB,KAAAmC,EAAAqnF,UAAA7yD,OAAA,SAAAj0C,EAAAinG,GACA,GAAAC,GAAAznF,EAAAqnF,SAAAG,EAEA,OAAAjnG,GAAAw+B,QAAA+kC,OAAA,KAAoC0jC,EAAA,KAAmB,KAAAC,IA5dvD,q2ZA+dAznF,EAAAqmF,eAAAr1B,UA9dA,0u0CA8dAo2B,EACA5zE,EAAAO,YAAA/T,EAAAqmF,gBAEArmF,EAAA0nF,OAAA,GAAA5H,IACA5+D,OAAAlhB,EAAAihB,QACAzN,YACAusE,YAAA//E,EAAAomF,aACApG,sBAAAhgF,EAAAsmF,yBAGAtmF,EAAA2nF,wBAEA3nF,GAAA0nF,OAAAj/D,aAAAzL,KAAA,WA4BA,MA3BAhd,GAAA0nF,OAAAlgF,GAAA,gCAAAhc,GACAwU,EAAAqmF,eAAAr1B,UAAA,GACAzvC,EAAAgC,UAAAvjB,EAAAihB,QAAA,cACA9d,EAAA3X,KAGAwU,EAAA0nF,OAAAlgF,GAAA,oCACAxH,EAAA0nF,OAAA9C,uCACArjE,EAAAgC,UAAAvjB,EAAAihB,QAAA,YACAjhB,EAAA4nF,gCAEA5nF,EAAA6nF,mBAEA7nF,EAAA0nF,OAAAxF,qBAEA/+E,EAAA,KAAAnD,IAEAA,EAAA0nF,OAAA3C,qBAAA,GAAA/D,GAAA,0CAIAgG,EAAA/yG,QAAA,SAAA2jF,GACA53D,EAAA0nF,OAAAlgF,GAAAowD,EAAA,SAAA18C,GACAlb,EAAAsb,MAAAs8C,EAAA18C,OAIAlb,EAAA8nF,+BACGvrE,MAAA,SAAA/wB,GACHwU,EAAAmkB,WAAAnH,KAAA,WACA7Z,EAAA3X,SAjFA+1B,EAAAgC,UAAAvjB,EAAAihB,QAAA,2BACA9d,GAAA,GAAA69E,GAAA,8EAjBAz/D,EAAAgC,UAAAvjB,EAAAihB,QAAA,2BACA9d,GAAA,GAAA69E,GAAA,qCAiHAmF,EAAAjzG,UAAA60G,oBAAA,SAAA5lF,EAAAtS,EAAAle,GACA,GAAAqf,EAEA,SAAAi2F,EAAAvyG,QAAAytB,GAAA,CAIA,oBAAAA,EAKA,YAJAvrB,KAAAoxG,eACApxG,KAAAoxG,cAAAD,oBAAAl4F,EAAAle,GAMAqf,GAAApa,KAAAqxG,UAAAC,QAAA/lF,GAEAnR,IAIAA,EAAA+2F,oBAAAl4F,EAAAle,IAEA,IAAAu1G,EAAAxyG,QAAAytB,KAIAvrB,KAAAuxG,+BAAA,SAAAxoD,GACA,MAAAA,GAAAt4C,OAAAmlC,EAAAmxD,mBAAAx7E,KAEAvrB,KAAAwxG,6BAqBAjC,EAAAjzG,UAAAm1G,2BAAA,WACA,MAAAzxG,MAAA8wG,OAAA5F,yBA2BAqE,EAAAjzG,UAAAo1G,2BAAA,WAIA,GAHA1xG,KAAAuxG,iCACAvxG,KAAA8wG,OAAA3E,4BAEA,IAAAnsG,KAAA8wG,OAAAxD,oBAAAjvG,OAGA,WAFA2B,MAAAwxG,wBAKAxxG,MAAAqxG,UAAAM,uBAEA3xG,KAAA8wG,OAAAlF,wBAAAxlE,KAAA,WACApmC,KAAAwxG,yBACAxxG,KAAAqxG,UAAAO,wBACGl7F,KAAA1W,QAGHuvG,EAAAjzG,UAAAu1G,oBAAA,WACA,GAAAzoF,GAAAppB,KACAgnC,EAAAC,KAAwB7d,EAAAsmF,uBAAAoC,eAA8CxnE,OAAAlhB,EAAAihB,SAEtErqC,MAAA+xG,eAAA,GAAA5B,GAAAnpE,GAEAhnC,KAAA+xG,eAAAlgE,aAAAzL,KAAA,WACAhd,EAAA0nF,OAAA7C,qBAAA,mBACGtoE,MAAA,SAAA/wB,GACHwU,EAAA0nF,OAAA3C,qBAAA,GAAA/D,IACAtzF,QAAA,mCACAk7F,kBAAAp9F,QAKA26F,EAAAjzG,UAAA21G,mBAAA,WACA,GAAA7oF,GAAAppB,IAEAA,MAAAoxG,cAAA,GAAA3sB,GAAAzkF,KAAAqqC,QAAArqC,KAAA8wG,QAEA9wG,KAAAoxG,cAAAv/D,aAAAzL,KAAA,WACAhd,EAAA0nF,OAAA7C,qBAAA,kBACGtoE,MAAA,SAAA/wB,GACHwU,EAAA0nF,OAAA3C,qBAAA,GAAA/D,IACAtzF,QAAA,8BACAk7F,kBAAAp9F,QAKA26F,EAAAjzG,UAAA40G,2BAAA,WACAlxG,KAAA0vG,uBAAAoC,eACA9xG,KAAA6xG,sBAGA7xG,KAAA0vG,uBAAA1zD,cACAh8C,KAAAiyG,qBAGAjyG,KAAAqxG,UAAA,GAAAvB,IACAxlE,OAAAtqC,KAAAqqC,QACAnrC,QAAAc,KAAAyvG,eACAyC,MAAAlyG,KAAA8wG,OACAqB,QAAAnyG,KAAAywG,YAIAlB,EAAAjzG,UAAAi1G,+BAAA,SAAA3zG,GACAA,KAAA,WAAkC,UAElCoC,KAAA8wG,OAAAxD,oBAAAjwG,QAAA,SAAA0rD,GACAnrD,EAAAmrD,OAAA6lD,SACA5uG,KAAA8wG,OAAApF,oBAAA3iD,IAEGryC,KAAA1W,QAGHuvG,EAAAjzG,UAAAk1G,uBAAA,WACAxxG,KAAAqxG,UAAAe,YAAAjI,KAAA4F,IAMA/vG,KAAA8wG,OAAAtD,qBAIAxtG,KAAAqxG,UAAAgB,eAAAryG,KAAA8wG,OAAArD,sBAGA8B,EAAAjzG,UAAAg2G,uBAAA,SAAAxI,GACA,WAAA9pG,KAAA8wG,OAAA5F,wBAAAptG,QAAAgsG,IAGAyF,EAAAjzG,UAAA00G,8BAAA,WACA,GAAAuB,GACA7I,EAAAhvG,OAAAusB,KAAAjnB,KAAA8wG,OAAApH,mBAEA,KAAAA,EAAArrG,SAIAk0G,EAAAvyG,KAAAqxG,UAAAmB,qBAEA9I,EAAArsG,QAAA,SAAAstF,GACA,GAAAzrF,GAAAqzG,EAAA5nB,GACA8nB,EAAAvzG,EAAAuzG,IACAC,EAAAxzG,EAAAwzG,aACA/zF,EAAA3e,KAAA8wG,OAAApH,mBAAA/e,GACAgoB,EAAAF,EAAA1+F,cAAA,sCAEAo6C,GAAAzlC,IAAA+pF,EAAA,sBACAA,EAAAz2G,oBAAA,QAAA02G,GACAC,EAAAv4B,UAAAxkC,EAAAhL,OAAA69D,mCACAlgE,QAAA5pB,UACGjI,KAAA1W,SAGHuvG,EAAAjzG,UAAAs2G,+CAAA,WACA,GAAAt0G,GAAAmS,EACAoiG,KACAnsB,EAAA1mF,KAAA8wG,OAAA1F,eAEA,KAAA9sG,EAAA,EAAaA,EAAAooF,EAAAroF,OAA2BC,KACxCmS,EAAAi2E,EAAApoF,GAAAmS,OAEAoiG,KAMAA,EAAApiG,IAAA,EAEAk6B,EAAAgC,UAAA3sC,KAAAqqC,QAAA,WAAAuL,EAAAoxD,eAAAv2F,GAAA,aAIA8+F,EAAAjzG,UAAA20G,iBAAA,WACAjxG,KAAA8wG,OAAA/C,gBACA/tG,KAAAqxG,UAAAgB,eAAAryG,KAAA8wG,OAAA/C,eAAAl7F,IACA7S,KAAA8wG,OAAA1C,YAAApuG,KAAA8wG,OAAA/C,eAAApvF,QACG3e,KAAA8wG,OAAAlD,iBACH5tG,KAAA8wG,OAAAtF,iBAAAxrG,KAAA8wG,OAAAlD,kBAEA5tG,KAAA4yG,kDA6EArD,EAAAjzG,UAAAw2G,qBAAA,SAAAr/F,GAQA,GAAA2V,GAAAppB,IAIA,OAFAyT,SAEAzT,KAAAqxG,UAAAyB,uBAAA1sE,KAAA,SAAAijB,GACA,MAAAjgC,GAAA2pF,uCAAA1pD,IACAjgC,EAAAioF,UAAAM,uBAEAvoF,EAAAgoF,cAAA9iE,OAAA+a,EAAA51C,EAAAuoC,cAAA5V,KAAA,SAAA4sE,GAQA,MAPA3pD,GAAAhV,MAAA2+D,EAAA3+D,MACAgV,EAAAsuB,iBAAAq7B,EAAAr7B,iBACAtuB,EAAAuuB,uBAAAo7B,EAAAp7B,uBACAvuB,EAAArJ,iBAAAgzD,EAAAhzD,iBAEA52B,EAAAioF,UAAAO,uBAEAvoD,IACO1jB,MAAA,SAAA/wB,GAGP,MAFAwU,GAAAsoF,6BAEAtoF,EAAA0nF,OAAAlF,wBAAAxlE,KAAA,WAGA,MAFAhd,GAAAioF,UAAAO,uBAEA11E,EAAAgB,OAAA,GAAAktE,IACAtzF,QAAA,0EACAk7F,kBAAAp9F,UAMAy0C,IACGjjB,KAAA,SAAAijB,GAKH,MAJAjgC,GAAA2oF,iBACA1oD,EAAAwmD,WAAAzmF,EAAA2oF,eAAAkB,iBAGA5pD,IACGjjB,KAAA,SAAAijB,GACH,MAAA+8B,GAAA/8B,MAIAkmD,EAAAjzG,UAAAy2G,uCAAA,SAAA1pD,GACA,QAAArpD,KAAAoxG,gBAIA,MAAA/nD,EAAAsuB,mBAIAtuB,EAAA54C,OAAAmlC,EAAAmxD,mBAAA3qC,MAIA/S,EAAA54C,OAAAmlC,EAAAmxD,mBAAA9qD,YAAA,IAAAoN,EAAAlvB,QAAA0vB,sBAOA0lD,EAAAjzG,UAAA42G,kBAAA,WACA,GAAA31E,GAAAtiC,SAAA+xD,eAAApX,EAAAozD,cAEAzrE,IACAA,EAAAxgC,WAAAC,YAAAugC,IAIAgyE,EAAAjzG,UAAAy0G,kBAAA,WACA,GAAApiE,GACAwkE,GACAtgG,GAAA+iC,EAAAozD,cAGA/tG,UAAA+xD,eAAApX,EAAAozD,iBAEAr6D,EAAA3uC,KAAAqqC,QAAAY,mBAAAC,qBAAAyD,UACAwkE,EAAA31E,KAAAmR,EAAA,oCAEA3uC,KAAA8wG,OAAAlH,gBAIAuJ,EAAAv2E,UAAA58B,KAAA8wG,OAAAn9C,UAGAniB,EAAAjW,eAAA43E,KASA5D,EAAAjzG,UAAAixC,SAAA,WACA,GAAA6lE,GACAvqE,EAAA3M,EAAAhV,UACAkC,EAAAppB,IAkCA,OAhCAA,MAAAkzG,oBAEAlzG,KAAAqxG,WACAxoE,EAAAzC,KAAA,WACA,MAAAhd,GAAAioF,UAAA9jE,WAAA5H,MAAA,SAAA/wB,GACAw+F,EAAAx+F,MAKA5U,KAAA+xG,gBACAlpE,EAAAzC,KAAA,WACA,MAAApmC,MAAA+xG,eAAAxkE,WAAA5H,MAAA,SAAAhnB,GACAy0F,EAAA,GAAAhJ,IACAtzF,QAAA,+CACAk7F,kBAAArzF,OAGKjI,KAAA1W,OAGLA,KAAAoxG,eACAvoE,EAAAzC,KAAA,WACA,MAAApmC,MAAAoxG,cAAA7jE,WAAA5H,MAAA,SAAAhnB,GACAy0F,EAAA,GAAAhJ,IACAtzF,QAAA,0CACAk7F,kBAAArzF,OAGKjI,KAAA1W,OAGL6oC,EAAAzC,KAAA,WACA,MAAAhd,GAAAiqF,yBACGjtE,KAAA,WACH,MAAAgtE,GACAl3E,EAAAgB,OAAAk2E,GAGAl3E,EAAAhV,aASAqoF,EAAAjzG,UAAAivG,2BAAA,WACA,MAAAvrG,MAAA8wG,OAAAvF,8BAGAgE,EAAAjzG,UAAA+2G,qBAAA,WAGA,MAFArzG,MAAAyvG,eAAA1yG,WAAAC,YAAAgD,KAAAyvG,gBAEAvzE,EAAAhV,WA0CAv1B,EAAAC,QAAAw3C,EAAAmmE,KAEGt6D,cAAA,IAAAq+D,iBAAA,IAAAtE,kBAAA,IAAA5nE,eAAA,IAAAmsE,uBAAA,IAAAtE,qBAAA,IAAAuE,iBAAA,IAAAn2E,gBAAA,IAAAo2E,sBAAA,IAAAC,uBAAA,IAAAC,iBAAA,IAAAC,oBAAA,IAAAC,+BAAA,IAAAC,0BAAA,EAAA98C,wBAAA,GAAAC,2BAAA,GAAArgB,kBAAA,GAAA9I,0BAAA,KAAybimE,KAAA,SAAA54E,EAAAxpC,EAAAC,GAC5b,YAujBA,SAAAknB,GAAArF,GACA,MAAAA,GAAA86B,cAIAjE,EAAAxxB,QACAy1B,cAAA96B,EAAA86B,gBACG5I,MAAA,SAAA/wB,GACH,MAAAsnB,GAAAgB,OAAA,GAAAktE,IACAtzF,QAAA,uCACAk7F,kBAAAp9F,OAEGwxB,KAAA,SAAA0L,GASH,MARAA,GAAAkiE,EAAAliE,GAEA,qBAAAA,EAAA7G,mBAAAyL,kBACA/L,EAAAgC,UAAAmF,EAAA,4BAEAnH,EAAAgC,UAAAmF,EAAA,wBAGA,GAAA5V,GAAA,SAAAhV,EAAAgW,GACA,GAAAqyE,IACAnG,sBAAA31F,EACA62B,OAAAwH,IACOu8B,YAAA,SAAAz5D,EAAAF,GACP,GAAAE,EAGA,WAFAsoB,GAAAtoB,EAKAsS,GAAAxS,SA9BAwnB,EAAAgB,OAAA,GAAAktE,GAAA,uCAoCA,QAAA4J,GAAAliE,GACA,GAAArC,GAAAqC,EAAA7G,kBAUA,OARAwE,GAAA+D,kBAAAK,YAAA+B,EAAAI,YACAvG,EAAA+D,kBAAAyC,gBAAAL,EAAAI,YACAvG,EAAA+D,kBAAAygE,cAAAplE,EAEAiD,EAAA7G,iBAAA,WACA,MAAAwE,IAGAqC,EA/fA,GAAAy9D,GAAAp0E,EAAA,YACAmP,EAAAnP,EAAA,wBACA+4E,EAAA/4E,EAAA,gCACAya,EAAAza,EAAA,eACAwP,EAAAxP,EAAA,mBACAivE,EAAAjvE,EAAA,sBACAe,EAAAf,EAAA,iBACA4N,EAAA5N,EAAA,2BAEA0T,EAAA,QA0fAqlE,GAAAp7F,EAAA,mBAAA7d,oBAAA8Y,cAAA,gDAEApiB,EAAAC,SACAknB,OAAAiwB,EAAAjwB,GAKA+1B,aAGGoG,cAAA,IAAAk/D,WAAA,IAAAnF,kBAAA,IAAAoF,+BAAA,IAAAnF,qBAAA,IAAA5xE,gBAAA,IAAAyQ,0BAAA,GAAAumE,uBAAA,KAA8LC,KAAA,SAAAn5E,EAAAxpC,EAAAC,GACjM,YAEA,SAAA2iH,GAAAr1G,EAAAsK,GACAtK,EAAA/D,iBAAA,QAAAqO,GACAtK,EAAA/D,iBAAA,iBAAAmpC,GACA,KAAAA,EAAAkwE,SACAhrG,MAKA7X,EAAAC,QAAA2iH,OAEIE,KAAA,SAAAt5E,EAAAxpC,EAAAC,GACJ,YAMA,SAAA8iH,GAAAC,GACA,MAAA5xG,MAAA4M,MAAAglG,EAAA,KAGA,QAAA3gE,GAAA1J,EAAA2J,EAAA1nB,GACA,GAAAkjB,GAAAnF,EAAAW,mBACA2pE,EAAAtqE,EAAAwF,SACA+sB,EAAA63C,EAAAprF,KAAAP,OACA0N,EAAAgZ,EAAAvE,qBAAAP,UAAAlU,IACAxuB,GACA0iC,YACAsJ,KAAA2B,EAAAmnB,iBAAA9oB,EACA4oB,cAEApwB,MAAAgD,EAAA+D,kBACA0C,wBAAA2+D,EAGA,sBAAAplE,EAAAiH,kBACAzuC,EAAAuuC,gBAAA/G,EAAAlB,cAEAtmC,EAAAgpC,yBAAApyB,KAAAC,MAAA6gD,EAAAlwB,EAAAlB,gBAAA0C,yBAGA2jE,GACAn+E,MACAgT,OAAA,OACAxhC,OACA6B,QAAA8rC,EAAAqnB,8BACG1wC,GAjCH,GAAAozC,GAAAxkC,EAAA,cAAAwkC,KACA/pB,EAAAza,EAAA,gBACA05E,EAAA15E,EAAA,wBAAA0T,OAkCAl9C,GAAAC,SACA+6C,UAAAqH,KAGG8gE,eAAA,IAAAC,aAAA,IAAAV,uBAAA,KAA8DW,KAAA,SAAA75E,EAAAxpC,EAAAC,GACjE,YAIA,SAAA2rE,GAAAC,GACA,GAAAl/D,GAAAk4B,EAAAvd,CAEA,KAAA3a,EAAA,EAAaA,EAAAuL,UAAAxL,OAAsBC,IAAA,CACnCk4B,EAAA3sB,UAAAvL,EACA,KAAA2a,IAAAud,GACAA,EAAAh7B,eAAAyd,KACAukD,EAAAvkD,GAAAud,EAAAvd,IAKA,MAAAukD,GAdA,GAAAC,GAAA,kBAAA/iE,QAAAusC,OAAAvsC,OAAAusC,OAAAs2B,CAiBA5rE,GAAAC,SACAq1C,OAAAw2B,EACAC,QAAAH,QAGI03C,KAAA,SAAA95E,EAAAxpC,EAAAC,GACJ,YAEA,IAAAw9C,GAAAjU,EAAA,uCACAm9B,EAAAn9B,EAAA,uCAEAxpC,GAAAC,SACAw9C,QACAkpB,YAGGO,uCAAA,GAAAvpB,sCAAA,KAAmF4lE,KAAA,SAAA/5E,EAAAxpC,EAAAC,GACtF,YAiCA,SAAAujH,GAAApiG,EAAAhY,EAAAqjB,GACA,GAAAlgB,GAAAkgB,EAAArK,cAAA,UAAAhB,EAAA,KAEA7U,KACAA,EAAAjD,SAAAiC,cAAA,SACAgB,EAAAuS,KAAA,SACAvS,EAAA6U,OACAqL,EAAA+e,YAAAj/B,IAGAA,EAAAnD,QAGA,QAAAq6G,GAAA3tE,EAAAxuB,EAAAle,GACA,GAAAs6G,GAAAp8F,EAAA4qB,MAAA,KACAyxE,EAAAC,EAAAF,EAAA,GAEA,KAAAA,EAAAh3G,OACAopC,EAAA6tE,GAAAE,EAAAz6G,IAEA0sC,EAAA6tE,GAAA7tE,EAAA6tE,OACAF,EAAA3tE,EAAA6tE,GAAAD,EAAA13G,MAAA,GAAAqmC,KAAA,KAAAjpC,IAIA,QAAAy6G,GAAAz6G,GACA,IACA,MAAA8jB,MAAAC,MAAA/jB,GACG,MAAAkC,GACH,MAAAlC,IAIA,QAAAm5G,GAAAuB,EAAAC,GACA,GAAAnnE,GAAA3R,EAAA+4E,EAAAv3F,CAEA,IAAAs3F,EAAA,CAMA,KAFAnnE,EAAAmnE,EAAA5hG,aAAA,wCAGA,SAAAs2F,GAAA,2EAQA,IALAxtE,EAAA3hC,SAAAiC,cAAA,OACA0/B,EAAA/pB,GAAA,oBAAAq1B,MAEA9pB,EAAA6pC,EAAA2tD,eAAAF,IAGA,SAAAtL,GAAA,4CAGAhsF,GAAAjjB,iBAAA,kBAAAmpC,GACAA,EAAAuxE,mBAGAH,EAAA34G,WAAAK,aAAAw/B,EAAA84E,GAEAC,GACApnE,gBACA3R,aAGAk5E,EAAAz4G,QAAA,SAAA04G,GACA,GAAAh7G,GAAA26G,EAAA5hG,aAAA,QAAAiiG,EAEA,OAAAh7G,GAIAq6G,EAAAO,EAAAI,EAAAh7G,KAGA06G,EAAAE,GAAAvvE,KAAA,SAAA1xB,GACAi2B,EAAAgC,UAAAj4B,EAAA21B,QAAA,+BACAjsB,EAAAjjB,iBAAA,oBACAuZ,EAAAo+F,qBAAA,SAAAkD,EAAA3sD,GACA2sD,IAIAb,EAAA,uBAAA9rD,EAAAhV,MAAAj2B,GAEAirC,EAAAwmD,YACAsF,EAAA,cAAA9rD,EAAAwmD,WAAAzxF,GAGAA,EAAA63F,iBAzHA,GAAAtrE,GAAAxP,EAAA,eACA8sB,EAAA9sB,EAAA,sBACA+M,EAAA/M,EAAA,mBACAivE,EAAAjvE,EAAA,kBACAo6E,EAAAp6E,EAAA,8BACA26E,GACA,SACA,0BAEA,uBACA,wBAKA,sBACA,+BACA,uBACA,gCAEA,gBACA,kBACA,cACA,2BAEA,uBACA,yBACA,qBACA,kCAmGAnkH,GAAAC,QAAAsiH,IAEGgC,cAAA,IAAAC,iBAAA,IAAAC,qBAAA,IAAAC,6BAAA,IAAAz/D,kBAAA,KAAsH0/D,KAAA,SAAAn7E,EAAAxpC,EAAAC,IACzH,SAAAspC,IAAmB,WACnB,YAOA,SAAAi1E,GAAAnpE,GACAhnC,KAAAk7C,QAAAlU,EANA,GAAA4O,GAAAza,EAAA,gBACAwP,EAAAxP,EAAA,eACAqW,EAAArW,EAAA,2BACAe,EAAAf,EAAA,YAMAg1E,GAAA7zG,UAAAu1C,WAAA,WACA,GAAAzoB,GAAAppB,IAEA,OAAAk8B,GAAAhV,UAAAkf,KAAA,WACA,GAAAmwE,EAEA,OAAAr7E,GAAA4kC,WAAA5kC,EAAA4kC,UAAAgyC,cACA51E,EAAAhV,WAGAqvF,EAAAntF,EAAA8xB,QAAA5Q,OAAAiK,aAEA/C,EAAAhW,YACAqB,IAAA,uCAAA05E,EAAA,4BACA1jG,GAAA+iC,EAAAmzD,8BAEG3iE,KAAA,WACH,MAAAlL,GAAA4kC,UAAAgyC,cAAAh5F,OAAAsQ,EAAA8xB,WACG9U,KAAA,SAAA1xB,GACH0U,EAAAotF,UAAA9hG,IACGixB,MAAA,SAAA/wB,GACH+1B,EAAAgC,UAAAvjB,EAAA8xB,QAAA5Q,OAAA,+BAGAlhB,EAAAof,IAAA5zB,MAIAu7F,EAAA7zG,UAAAksC,IAAA,SAAA1xB,GACAyxB,QAAAC,IAAA1xB,IAGAq5F,EAAA7zG,UAAA22G,cAAA,WACA,MAAAjzG,MAAAw2G,UAIAx2G,KAAAw2G,UAAA3G,WAHA,IAMAM,EAAA7zG,UAAAixC,SAAA,WACA,MAAAvtC,MAAAw2G,UAIAx2G,KAAAw2G,UAAAjpE,WAHArR,EAAAhV,WAMAv1B,EAAAC,QAAAu+G,IAEC3zG,KAAAwD,QAAaxD,KAAAwD,SAAA,KAAAk7B,IAAA,mBAAA9R,WAAA,mBAAAnpB,qBACX60G,eAAA,IAAAoB,cAAA,IAAA/4C,YAAA,IAAA22C,0BAAA,IAAiF2C,KAAA,SAAAt7E,EAAAxpC,EAAAC,GACpF,YAEA,SAAA8kH,GAAA9hG,GACA,yBAAAA,EAAA7B,KAGA,QAAAq3F,GAAAx1F,GACA5U,KAAA+S,KAAA,cAGA/S,KAAA8W,QADA,gBAAAlC,GACAA,EAEAA,EAAAkC,QAGA4/F,EAAA9hG,GACA5U,KAAA22G,mBAAA/hG,EAEA5U,KAAA22G,mBAAA/hG,EAAAo9F,kBAIA5H,EAAA9tG,UAAA5B,OAAAoe,OAAA8N,MAAAtqB,WACA8tG,EAAA9tG,UAAAuc,YAAAuxF,EAEAz4G,EAAAC,QAAAw4G,OAEIwM,KAAA,SAAAz7E,EAAAxpC,EAAAC,GACJ,YAEA,SAAAgkH,GAAA12G,GACA,GAAAnC,GAAAmC,EAAAnC,UAEA,OAAAA,IAAA,SAAAA,EAAA85G,SAIAjB,EAAA74G,GAHAA,EAMApL,EAAAC,SACAgkH,uBAGIkB,KAAA,SAAA37E,EAAAxpC,EAAAC,GACJ,YAEA,IAAA+tE,GAAAxkC,EAAA,cAAAwkC,IAEAhuE,GAAAC,QAAA,SAAA04C,GACA,GAAA2G,GACAxB,EAAAnF,EAAAW,kBAEA,4BAAAwE,EAAAiH,sBACAzF,EAAApyB,KAAAC,MAAA6gD,EAAAlwB,EAAAlB,gBAAA0C,4BAEA,IAAAA,EAAAnzC,QAAA,oBAMGi3G,aAAA,MAAiBgC,KAAA,SAAA57E,EAAAxpC,EAAAC,IACpB,SAAAspC,IAAmB,WACnB,YAEA,SAAAsmC,KACA,iBAAAtmC,EAAAkR,SAAA4Z,SAGAr0D,EAAAC,SACA4vE,aAGChlE,KAAAwD,QAAaxD,KAAAwD,SAAA,KAAAk7B,IAAA,mBAAA9R,WAAA,mBAAAnpB,wBACV+2G,KAAA,SAAA77E,EAAAxpC,EAAAC,IACJ,SAAAspC,IAAmB,WACnB,YAEAvpC,GAAAC,QAAA,SAAAg4E,GAGA,MAFAA,MAAA1uC,EAEA9nB,QAAAw2D,EAAA3uE,SAAAg8G,cAAA,UAAArtC,EAAA3uE,SAAAg8G,aAAAvkG,kBAGClW,KAAAwD,QAAaxD,KAAAwD,SAAA,KAAAk7B,IAAA,mBAAA9R,WAAA,mBAAAnpB,wBACVi3G,KAAA,SAAA/7E,EAAAxpC,EAAAC,GACJ,YAEA,SAAA2jH,GAAA4B,GACA,GAAAzrC,GAAAyrC,EAAAtzE,MAAA,IAMA,QALA6nC,EAAA0rC,SAKA5rF,OAJAkgD,EAAAnvE,IAAA,SAAA86G,GACA,MAAAA,GAAA1qF,OAAA,GAAA84B,cAAA4xD,EAAA3pD,UAAA,MAGA1pB,KAAA,IAGAryC,EAAAC,QAAA2jH,OAEI+B,KAAA,SAAAn8E,EAAAxpC,EAAAC,IACJ,SAAAspC,IAAmB,WACnB,YAKA,SAAAykC,GAAAiN,GACA,GAAA9pD,GAAAnK,EAAAQ,EAAA0zD,EAAAC,EAAAC,EAAAC,EAAA1uE,EACA2uE,EAAA,GAAAC,QAAA,+FACAC,EAAA,oEACAxjE,EAAA,EAEA,KAAAsjE,EAAAjvC,KAAA4uC,GACA,SAAAhmD,OAAA,0DAGAtoB,GAAA,CACA,IACAuuE,EAAAM,EAAArvE,QAAA8uE,EAAAjgD,OAAAruB,MACAwuE,EAAAK,EAAArvE,QAAA8uE,EAAAjgD,OAAAruB,MACAyuE,EAAAI,EAAArvE,QAAA8uE,EAAAjgD,OAAAruB,MACA0uE,EAAAG,EAAArvE,QAAA8uE,EAAAjgD,OAAAruB,MAEAwkB,GAAA,GAAA+pD,IAAA,EAAAC,GAAA,IACAn0D,GAAA,GAAAm0D,IAAA,EAAAC,GAAA,KACA5zD,GAAA,EAAA4zD,IAAA,KAAAC,EAEArjE,GAAAga,OAAAypD,aAAAtqD,IAAAnK,EAAAgL,OAAAypD,aAAAz0D,GAAA,KAAAQ,EAAAwK,OAAAypD,aAAAj0D,GAAA,UACG7a,EAAAsuE,EAAAvuE,OAEH,OAAAsL,GA1BA,GAAA0jE,GAAA,kBAAAnyC,GAAAykC,KAAAzkC,EAAAykC,MA6BAhuE,GAAAC,SACA+tE,KAAA,SAAAiN,GACA,MAAAS,GAAA7wE,KAAA0+B,EAAA0xC,IAEAU,MAAA3N,KAGCnjE,KAAAwD,QAAaxD,KAAAwD,SAAA,KAAAk7B,IAAA,mBAAA9R,WAAA,mBAAAnpB,wBACVs3G,KAAA,SAAAp8E,EAAAxpC,EAAAC,IACJ,SAAAspC,IAAmB,WACnB,YAEA,IAAAgB,GAAAhB,EAAAgB,SAAAf,EAAA,mBAEAxpC,GAAAC,QAAAsqC,IAEC1/B,KAAAwD,QAAaxD,KAAAwD,SAAA,KAAAk7B,IAAA,mBAAA9R,WAAA,mBAAAnpB,qBACXk8B,mBAAA,MAAuBq7E,KAAA,SAAAr8E,EAAAxpC,EAAAC,GAC1B,YAEAD,GAAAC,QAAA,SAAA6lH,GACA,sBAAAA,GACA,GAGAA,EACAtvE,QAAA,aACAA,QAAA,mBAGIuvE,KAAA,SAAAv8E,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,QAAA,WACA,GAAAmM,GAAA9C,SAAAiC,cAAA,MAcA,QAXA,WACA,QACA,OACA,MACA,IAGAG,QAAA,SAAAijE,GACAviE,EAAAnB,MAAA+6G,SAAAr3C,EAVA,oBAaAltD,QAAArV,EAAAnB,MAAAyB,cAGIu5G,KAAA,SAAAz8E,EAAAxpC,EAAAC,GACJ,YAYA,SAAA6yF,GAAAn6C,EAAA4nE,GACAlyG,KAAAqqC,QAAAC,EACAtqC,KAAA8wG,OAAAoB,EACAlyG,KAAAk7C,QAAAjU,KAA0BirE,EAAA9I,sBAAAptD,cAb1B,GAAA/U,GAAA9L,EAAA,YAAA8L,OACA+U,EAAA7gB,EAAA,gCAGA08E,GACA,oBACA,8BACA,6BASApzB,GAAAnoF,UAAAu1C,WAAA,WACA,GAAAzoB,GAAAppB,KACAyT,GACA62B,OAAAtqC,KAAAqqC,QACA3Z,QAAA,EAOA,OAJA1wB,MAAAk7C,QAAA2/B,oBACApnE,EAAAonE,kBAAA76E,KAAAk7C,QAAA2/B,mBAGA7+B,EAAAljC,OAAArF,GAAA2yB,KAAA,SAAA1xB,GACA0U,EAAAotF,UAAA9hG,EAEAmjG,EAAAx6G,QAAA,SAAA2jF,GACA53D,EAAAotF,UAAA5lF,GAAAowD,EAAA,SAAA18C,GACAlb,EAAA0nF,OAAApsE,MAAA,OAAAs8C,EAAA18C,UAMAmgD,EAAAnoF,UAAAgyC,OAAA,SAAA+a,EAAAyuD,GACA,GAAAC,GAAA9wE,GACApb,OAAA7rB,KAAAk7C,QAAArvB,QACGisF,GACHzjE,MAAAgV,EAAAhV,MACAsL,IAAA0J,EAAAlvB,QAAAwlB,IAIAujC,iBAAA,SAAAj7E,EAAA2zE,GACAA,MAOA,OAHAm8B,GAAAz4B,sBAAAy4B,EAAAz4B,0BACAy4B,EAAAz4B,sBAAA04B,cAAAD,EAAAz4B,sBAAA04B,eAlDA,KAoDAh4G,KAAAw2G,UAAAzgC,WAAAgiC,IAGAtzB,EAAAnoF,UAAA60G,oBAAA,SAAAl4F,EAAAle,GACAiF,KAAAk7C,QAAAjiC,GAAAle,GAGA0pF,EAAAnoF,UAAAixC,SAAA,WACA,MAAAvtC,MAAAw2G,UAAAjpE,YAGA57C,EAAAC,QAAA6yF,IAEG/a,WAAA,IAAAuuC,+BAAA,MAAkDC,KAAA,SAAA/8E,EAAAxpC,EAAAC,GACrD,YAIA,SAAAm2F,GAAA7oF,GACA,QAAAA,IAIA,SAAAA,EAAAtC,MAAAC,SAIAkrF,EAAA7oF,EAAAnC,aAGA,QAAAo7G,GAAAj5G,EAAA4N,EAAAyf,GAOA,QAAA6rF,GAAA9zE,GACAA,EAAAx3B,mBACA5N,EAAAlD,oBAAA,gBAAAo8G,GACA7rF,KATA,GAAAu2B,EAAA1T,SAAA24C,EAAA7oF,GAGA,WAFAqtB,IAYArtB,GAAA/D,iBAAA,gBAAAi9G,GA5BA,GAAAt1D,GAAA3nB,EAAA,sBA+BAxpC,GAAAC,SACAumH,qBAGGl8C,sBAAA,MAA0Bo8C,KAAA,SAAAl9E,EAAAxpC,EAAAC,GAC7B,YAIA,SAAAg6B,GAAAtjB,GAGA,MAFAA,MAAA,EAEA,GAAA4zB,GAAA,SAAAhV,GACAjnB,OAAA+J,WAAAkd,EAAA5e,KANA,GAAA4zB,GAAAf,EAAA,YAUAxpC,GAAAC,SACAg6B,WAGGuxC,YAAA,MAAgBm7C,KAAA,SAAAn9E,EAAAxpC,EAAAC,GACnB,YAEAD,GAAAC,SACA2mH,WAAA,iCACAC,sBAAA,sBACAC,gBAAA,mBACAC,eAAA,iBACAC,KAAA,QACAC,YAAA,KACAC,mBAAA,kBACAC,oCAAA,gFACAC,uCAAA,2CACAC,sCAAA,sEACAC,iCAAA,kCACAC,mBAAA,QACAC,yBAAA,MACAC,iBAAA,gCACAC,4BAAA,oCACAC,4BAAA,+BACAC,8BAAA,4CACAC,oBAAA,kBACAC,wBAAA,4BACAC,8BAAA,6BACAC,mBAAA,wBACAC,8BAAA,kCACAC,sBAAA,wBACAC,0BAAA,0BACAC,aAAA,wBACAC,6CAAA,mDACAC,oCAAA,wCACAC,+BAAA,wCACAC,0CAAA,uCACAC,mDAAA,oEACAC,uBAAA,mCACAC,qCAAA,wDACAC,sBAAA,wDACAC,qCAAA,sCACAC,mBAAA,8FACAC,uCAAA,qCACAC,oBAAA,kCACAC,yBAAA,gDACAC,0BAAA,2EACAC,wBAAA,0CACAC,oBAAA,mBACAC,gBAAA,cACAC,SAAA,WACAC,6BAAA,YACAC,4BAAA,YACAC,0BAAA,mBACAC,oBAAA,wBACAC,8BAAA,UACAC,0BAAA,eACAC,gBAAA,gBACAC,cAAA,cACAC,YAAA,6BACA/K,SAAA,sCACAgL,YAAA,YACA5vB,MAAA,SACA6vB,KAAA,UACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,oBACAE,SAAA,YACAD,cAAA,eACAI,IAAA,OACAC,MAAA,SACAC,UAAA,aACAR,WAAA,cACAD,KAAA,QACAtpD,IAAA,OACA4pD,QAAA,WACAD,SAAA,kBAIIoU,KAAA,SAAA7gF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,kCACAC,sBAAA,4BACAC,gBAAA,uBACAC,eAAA,sBACAC,KAAA,UACAC,YAAA,SACAC,mBAAA,yBACAC,oCAAA,kFACAC,uCAAA,8CACAC,sCAAA,4EACAC,iCAAA,gDACAC,mBAAA,SACAC,yBAAA,YACAC,iBAAA,mBACAC,4BAAA,oCACAC,4BAAA,gCACAC,8BAAA,0DACAC,oBAAA,iBACAC,wBAAA,oCACAC,8BAAA,yCACAC,mBAAA,sCACAC,8BAAA,6CACAC,sBAAA,gCACAC,0BAAA,6CACAC,aAAA,gCACAC,6CAAA,yDACAC,oCAAA,mDACAC,+BAAA,mDACAC,0CAAA,uCACAC,mDAAA,wFACAC,uBAAA,uDACAC,qCAAA,4DACAC,sBAAA,mEACAC,qCAAA,6CACAC,mBAAA,uJACAC,uCAAA,0DACAC,oBAAA,wDACAC,yBAAA,4DACAC,0BAAA,4EACAC,wBAAA,yDACAC,oBAAA,uBACAC,gBAAA,cACAC,SAAA,UACAC,6BAAA,cACAC,4BAAA,cACAC,0BAAA,uBACAC,oBAAA,2BACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,2BACAC,cAAA,eACAC,YAAA,kBACA/K,SAAA,uCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIqU,KAAA,SAAA9gF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,iCACAC,sBAAA,gCACAC,gBAAA,8BACAC,eAAA,2BACAC,KAAA,UACAC,YAAA,SACAC,mBAAA,0BACAC,oCAAA,iFACAC,uCAAA,mDACAC,sCAAA,iFACAC,iCAAA,2DACAC,mBAAA,WACAC,yBAAA,OACAC,iBAAA,mCACAC,4BAAA,kCACAC,4BAAA,uCACAC,8BAAA,kDACAC,oBAAA,8BACAC,wBAAA,kCACAC,8BAAA,qCACAC,mBAAA,mCACAC,8BAAA,+BACAC,sBAAA,oCACAC,0BAAA,oCACAC,aAAA,sBACAC,6CAAA,mEACAC,oCAAA,oCACAC,+BAAA,oCACAC,0CAAA,2BACAC,mDAAA,8EACAC,uBAAA,yDACAC,qCAAA,qEACAC,sBAAA,kEACAC,qCAAA,oDACAC,mBAAA,qJACAC,uCAAA,kDACAC,oBAAA,6CACAC,yBAAA,mDACAC,0BAAA,kFACAC,wBAAA,qDACAC,oBAAA,wBACAC,gBAAA,aACAC,SAAA,eACAC,6BAAA,YACAC,4BAAA,YACAC,0BAAA,wBACAC,oBAAA,aACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,aACAC,cAAA,WACAC,YAAA,0BACA/K,SAAA,oCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,OACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIsU,KAAA,SAAA/gF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,+BACAC,sBAAA,wCACAC,gBAAA,iCACAC,eAAA,2BACAC,KAAA,SACAC,YAAA,SACAC,mBAAA,6BACAC,oCAAA,2EACAC,uCAAA,uCACAC,sCAAA,oFACAC,iCAAA,qDACAC,mBAAA,YACAC,yBAAA,UACAC,iBAAA,4CACAC,4BAAA,iCACAC,4BAAA,8CACAC,8BAAA,sEACAC,oBAAA,6BACAC,wBAAA,mCACAC,8BAAA,gDACAC,mBAAA,uCACAC,8BAAA,mCACAC,sBAAA,mCACAC,0BAAA,mCACAC,aAAA,sCACAC,6CAAA,2EACAC,oCAAA,kEACAC,+BAAA,kEACAC,0CAAA,iDACAC,mDAAA,oHACAC,uBAAA,oEACAC,qCAAA,+FACAC,sBAAA,2FACAC,qCAAA,6DACAC,mBAAA,mLACAC,uCAAA,4EACAC,oBAAA,sDACAC,yBAAA,qFACAC,0BAAA,gHACAC,wBAAA,kEACAC,oBAAA,0BACAC,gBAAA,eACAC,SAAA,mBACAC,6BAAA,cACAC,4BAAA,cACAC,0BAAA,0BACAC,oBAAA,aACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,eACAC,cAAA,kBACAC,YAAA,mBACA/K,SAAA,4CACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIuU,KAAA,SAAAhhF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,+BACAC,sBAAA,qCACAC,gBAAA,0BACAC,eAAA,wBACAC,KAAA,cACAC,YAAA,QACAC,mBAAA,+BACAC,oCAAA,2EACAC,uCAAA,6CACAC,sCAAA,uFACAC,iCAAA,yDACAC,mBAAA,UACAC,yBAAA,WACAC,iBAAA,2CACAC,4BAAA,gCACAC,4BAAA,4CACAC,8BAAA,oFACAC,oBAAA,2BACAC,wBAAA,uCACAC,8BAAA,iDACAC,mBAAA,+CACAC,8BAAA,4CACAC,sBAAA,4CACAC,0BAAA,kDACAC,aAAA,qCACAC,6CAAA,uEACAC,oCAAA,8CACAC,+BAAA,8CACAC,0CAAA,kCACAC,mDAAA,0FACAC,uBAAA,oEACAC,qCAAA,mFACAC,sBAAA,sEACAC,qCAAA,iEACAC,mBAAA,4LACAC,uCAAA,iEACAC,oBAAA,gDACAC,yBAAA,oEACAC,0BAAA,4FACAC,wBAAA,sEACAC,oBAAA,uBACAC,gBAAA,iBACAC,SAAA,0BACAC,6BAAA,YACAC,4BAAA,YACAC,0BAAA,uBACAC,oBAAA,mBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,uBACAC,cAAA,oBACAC,YAAA,mBACA/K,SAAA,sCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIwU,KAAA,SAAAjhF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,gCACAC,sBAAA,4BACAC,gBAAA,sBACAC,eAAA,oBACAC,KAAA,OACAC,YAAA,OACAC,mBAAA,uBACAC,oCAAA,gEACAC,uCAAA,wCACAC,sCAAA,8EACAC,iCAAA,uDACAC,mBAAA,SACAC,yBAAA,SACAC,iBAAA,sBACAC,4BAAA,+BACAC,4BAAA,kCACAC,8BAAA,oDACAC,oBAAA,yBACAC,wBAAA,2BACAC,8BAAA,oCACAC,mBAAA,wBACAC,8BAAA,gCACAC,sBAAA,gCACAC,0BAAA,6BACAC,aAAA,mDACAC,6CAAA,sDACAC,oCAAA,2CACAC,+BAAA,2CACAC,0CAAA,mCACAC,mDAAA,qEACAC,uBAAA,uDACAC,qCAAA,oEACAC,sBAAA,+DACAC,qCAAA,uDACAC,mBAAA,kMACAC,uCAAA,qDACAC,oBAAA,kDACAC,yBAAA,2DACAC,0BAAA,qFACAC,wBAAA,iDACAC,oBAAA,kBACAC,gBAAA,cACAC,SAAA,MACAC,6BAAA,aACAC,4BAAA,aACAC,0BAAA,kBACAC,oBAAA,cACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,WACAC,cAAA,YACAC,YAAA,gBACA/K,SAAA,mCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,OACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIyU,KAAA,SAAAlhF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,gCACAC,sBAAA,4BACAC,gBAAA,sBACAC,eAAA,oBACAC,KAAA,OACAC,YAAA,OACAC,mBAAA,uBACAC,oCAAA,gEACAC,uCAAA,wCACAC,sCAAA,8EACAC,iCAAA,uDACAC,mBAAA,SACAC,yBAAA,SACAC,iBAAA,gCACAC,4BAAA,+BACAC,4BAAA,kCACAC,8BAAA,oDACAC,oBAAA,yBACAC,wBAAA,2BACAC,8BAAA,oCACAC,mBAAA,kCACAC,8BAAA,gCACAC,sBAAA,gCACAC,0BAAA,6BACAC,aAAA,mCACAC,6CAAA,6DACAC,oCAAA,+CACAC,+BAAA,+CACAC,0CAAA,mCACAC,mDAAA,gFACAC,uBAAA,uDACAC,qCAAA,oEACAC,sBAAA,+DACAC,qCAAA,uDACAC,mBAAA,wJACAC,uCAAA,iEACAC,oBAAA,kDACAC,yBAAA,2DACAC,0BAAA,qFACAC,wBAAA,iDACAC,oBAAA,kBACAC,gBAAA,cACAC,SAAA,gBACAC,6BAAA,aACAC,4BAAA,aACAC,0BAAA,kBACAC,oBAAA,cACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,WACAC,cAAA,YACAC,YAAA,gBACA/K,SAAA,mCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,OACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAII0U,KAAA,SAAAnhF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,gCACAC,sBAAA,4BACAC,gBAAA,sBACAC,eAAA,oBACAC,KAAA,OACAC,YAAA,OACAC,mBAAA,uBACAC,oCAAA,gEACAC,uCAAA,wCACAC,sCAAA,8EACAC,iCAAA,uDACAC,mBAAA,SACAC,yBAAA,SACAC,iBAAA,sBACAC,4BAAA,+BACAC,4BAAA,kCACAC,8BAAA,oDACAC,oBAAA,yBACAC,wBAAA,2BACAC,8BAAA,oCACAC,mBAAA,wBACAC,8BAAA,gCACAC,sBAAA,gCACAC,0BAAA,6BACAC,aAAA,mDACAC,6CAAA,sDACAC,oCAAA,+CACAC,+BAAA,+CACAC,0CAAA,mCACAC,mDAAA,yEACAC,uBAAA,uDACAC,qCAAA,oEACAC,sBAAA,+DACAC,qCAAA,uDACAC,mBAAA,mLACAC,uCAAA,qDACAC,oBAAA,kDACAC,yBAAA,2DACAC,0BAAA,qFACAC,wBAAA,yDACAC,oBAAA,kBACAC,gBAAA,cACAC,SAAA,MACAC,6BAAA,aACAC,4BAAA,aACAC,0BAAA,kBACAC,oBAAA,cACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,WACAC,cAAA,YACAC,YAAA,gBACA/K,SAAA,mCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,OACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAII2U,KAAA,SAAAphF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,gCACAC,sBAAA,4BACAC,gBAAA,sBACAC,eAAA,oBACAC,KAAA,OACAC,YAAA,OACAC,mBAAA,uBACAC,oCAAA,gEACAC,uCAAA,wCACAC,sCAAA,8EACAC,iCAAA,uDACAC,mBAAA,SACAC,yBAAA,SAEAC,iBAAA,yBACAC,4BAAA,sCACAC,4BAAA,qCACAE,oBAAA,iCACAC,wBAAA,iCACAC,8BAAA,qCACAC,mBAAA,mCACAC,8BAAA,qCACAC,sBAAA,iCACAC,0BAAA,iCACAP,8BAAA,oDACAQ,aAAA,mCACAC,6CAAA,6DACAC,oCAAA,+CACAG,mDAAA,gFACAD,0CAAA,mCACAD,+BAAA,+CACAG,uBAAA,uDACAC,qCAAA,oEACAC,sBAAA,+DACAC,qCAAA,uDACAK,0BAAA,qFACAC,wBAAA,iDACAJ,uCAAA,8CACAD,mBAAA,wJACAE,oBAAA,mDACAC,yBAAA,4DAEAG,oBAAA,kBACAC,gBAAA,cACAC,SAAA,MACAC,6BAAA,aACAC,4BAAA,aACAE,oBAAA,kBACAC,8BAAA,UACAF,0BAAA,kBACAG,0BAAA,QACAC,gBAAA,cACAC,cAAA,YACAC,YAAA,gBAEA/K,SAAA,mCACAiL,KAAA,OACAC,OAAA,SACAC,gBAAA,gBACAH,YAAA,YACAI,aAAA,aACAhwB,MAAA,QACA0b,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAGI4U,KAAA,SAAArhF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,8BACAC,sBAAA,iCACAC,gBAAA,4BACAC,eAAA,uBACAC,KAAA,SACAC,YAAA,QACAC,mBAAA,wBACAC,oCAAA,4EACAC,uCAAA,6CACAC,sCAAA,0FACAC,iCAAA,kDACAC,mBAAA,WACAC,yBAAA,WACAC,iBAAA,oBACAC,4BAAA,sCACAC,4BAAA,iDACAC,8BAAA,0EACAC,oBAAA,uBACAC,wBAAA,8BACAC,8BAAA,oDACAC,mBAAA,uCACAC,8BAAA,wCACAC,sBAAA,qCACAC,0BAAA,iCACAC,aAAA,yBACAC,6CAAA,iEACAC,oCAAA,iDACAC,+BAAA,iDACAC,0CAAA,oCACAC,mDAAA,2FACAC,uBAAA,yDACAC,qCAAA,2EACAC,sBAAA,uEACAC,qCAAA,uDACAC,mBAAA,uKACAC,uCAAA,6DACAC,oBAAA,sEACAC,yBAAA,8DACAC,0BAAA,wFACAC,wBAAA,0DACAC,oBAAA,mCACAC,gBAAA,oBACAC,SAAA,MACAC,6BAAA,cACAC,4BAAA,cACAC,0BAAA,mCACAC,oBAAA,uBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,gBACAC,cAAA,kBACAC,YAAA,oBACA/K,SAAA,sCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,UACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAII6U,KAAA,SAAAthF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,8BACAC,sBAAA,2BACAC,gBAAA,+BACAC,eAAA,uBACAC,KAAA,SACAC,YAAA,QACAC,mBAAA,yBACAC,oCAAA,4EACAC,uCAAA,sDACAC,sCAAA,yFACAC,iCAAA,iDACAC,mBAAA,WACAC,yBAAA,WACAC,iBAAA,kBACAC,4BAAA,oCACAC,4BAAA,2CACAC,8BAAA,0EACAC,oBAAA,qBACAC,wBAAA,4BACAC,8BAAA,oDACAC,mBAAA,yCACAC,8BAAA,0CACAC,sBAAA,uCACAC,0BAAA,mCACAC,aAAA,4BACAC,6CAAA,iEACAC,oCAAA,8CACAC,+BAAA,8CACAC,0CAAA,oCACAC,mDAAA,8FACAC,uBAAA,yDACAC,qCAAA,+EACAC,sBAAA,uEACAC,qCAAA,sDACAC,mBAAA,+KACAC,uCAAA,4DACAC,oBAAA,iEACAC,yBAAA,qEACAC,0BAAA,wFACAC,wBAAA,4DACAC,oBAAA,mCACAC,gBAAA,oBACAC,SAAA,MACAC,6BAAA,cACAC,4BAAA,cACAC,0BAAA,mCACAC,oBAAA,uBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,gBACAC,cAAA,kBACAC,YAAA,oBACA/K,SAAA,yCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,UACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAII8U,KAAA,SAAAvhF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,iCACAC,sBAAA,2BACAC,gBAAA,oBACAC,eAAA,oBACAC,KAAA,UACAC,YAAA,SACAC,mBAAA,sBACAC,oCAAA,mFACAC,uCAAA,iDACAC,sCAAA,kFACAC,iCAAA,8CACAC,mBAAA,UACAC,yBAAA,SACAC,iBAAA,mBACAC,4BAAA,yCACAC,4BAAA,4BACAC,8BAAA,mDACAC,oBAAA,eACAC,wBAAA,oBACAC,8BAAA,0CACAC,mBAAA,iCACAC,8BAAA,0CACAC,sBAAA,oCACAC,0BAAA,kCACAC,aAAA,mCACAC,6CAAA,oDACAC,oCAAA,sCACAC,+BAAA,sCACAC,0CAAA,gCACAC,mDAAA,0EACAC,uBAAA,yCACAC,qCAAA,+DACAC,sBAAA,2EACAC,qCAAA,4CACAC,mBAAA,6IACAC,uCAAA,sDACAC,oBAAA,2CACAC,yBAAA,uDACAC,0BAAA,wEACAC,wBAAA,6CACAC,oBAAA,sBACAC,gBAAA,gBACAC,SAAA,oBACAC,6BAAA,kBACAC,4BAAA,kBACAC,0BAAA,sBACAC,oBAAA,sBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,cACAC,cAAA,kBACAC,YAAA,iBACA/K,SAAA,kCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,SACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAII+U,KAAA,SAAAxhF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,+BACAC,sBAAA,oCACAC,gBAAA,8BACAC,eAAA,2BACAC,KAAA,WACAC,YAAA,UACAC,mBAAA,iCACAC,oCAAA,+EACAC,uCAAA,8CACAC,sCAAA,mGACAC,iCAAA,oDACAC,mBAAA,UACAC,yBAAA,YACAC,iBAAA,oBACAC,4BAAA,mCACAC,4BAAA,6CACAC,8BAAA,yEACAC,oBAAA,uBACAC,wBAAA,4BACAC,8BAAA,uDACAC,mBAAA,2CACAC,8BAAA,4CACAC,sBAAA,uCACAC,0BAAA,mCACAC,aAAA,2CACAC,6CAAA,2EACAC,oCAAA,sDACAC,+BAAA,sDACAC,0CAAA,+BACAC,mDAAA,mGACAC,uBAAA,4DACAC,qCAAA,kFACAC,sBAAA,+EACAC,qCAAA,uDACAC,mBAAA,oMACAC,uCAAA,0DACAC,oBAAA,6DACAC,yBAAA,+EACAC,0BAAA,oGACAC,wBAAA,oEACAC,oBAAA,+BACAC,gBAAA,kBACAC,SAAA,sBACAC,6BAAA,eACAC,4BAAA,eACAC,0BAAA,+BACAC,oBAAA,oBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,cACAC,cAAA,uBACAC,YAAA,kBACA/K,SAAA,0CACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIgV,KAAA,SAAAzhF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,iCACAC,sBAAA,oCACAC,gBAAA,8BACAC,eAAA,2BACAC,KAAA,WACAC,YAAA,UACAC,mBAAA,iCACAC,oCAAA,+EACAC,uCAAA,8CACAC,sCAAA,kGACAC,iCAAA,0DACAC,mBAAA,UACAC,yBAAA,YACAC,iBAAA,qCACAC,4BAAA,oCACAC,4BAAA,8CACAC,8BAAA,0EACAC,oBAAA,wBACAC,wBAAA,6BACAC,8BAAA,oDACAC,mBAAA,wCACAC,8BAAA,0CACAC,sBAAA,oCACAC,0BAAA,gCACAC,aAAA,2BACAC,6CAAA,4EACAC,oCAAA,0CACAC,+BAAA,0CACAC,0CAAA,4BACAC,mDAAA,sFACAC,uBAAA,yDACAC,qCAAA,uEACAC,sBAAA,oEACAC,qCAAA,uDACAC,mBAAA,uLACAC,uCAAA,0DACAC,oBAAA,kEACAC,yBAAA,sEACAC,0BAAA,sFACAC,wBAAA,0EACAC,oBAAA,+BACAC,gBAAA,kBACAC,SAAA,UACAC,6BAAA,eACAC,4BAAA,eACAC,0BAAA,+BACAC,oBAAA,oBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,cACAC,cAAA,uBACAC,YAAA,kBACA/K,SAAA,0CACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIiV,KAAA,SAAA1hF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,+BACAC,sBAAA,oCACAC,gBAAA,8BACAC,eAAA,2BACAC,KAAA,WACAC,YAAA,UACAC,mBAAA,iCACAC,oCAAA,iFACAC,uCAAA,+CACAC,sCAAA,mGACAC,iCAAA,0DACAC,mBAAA,UACAC,yBAAA,YACAC,iBAAA,qCACAC,4BAAA,oCACAC,4BAAA,8CACAC,8BAAA,0EACAC,oBAAA,wBACAC,wBAAA,6BACAC,8BAAA,oDACAC,mBAAA,wCACAC,8BAAA,0CACAC,sBAAA,oCACAC,0BAAA,gCACAC,aAAA,2BACAC,6CAAA,4EACAC,oCAAA,0CACAC,+BAAA,0CACAC,0CAAA,4BACAC,mDAAA,sFACAC,uBAAA,yDACAC,qCAAA,uEACAC,sBAAA,oEACAC,qCAAA,uDACAC,mBAAA,uLACAC,uCAAA,0DACAC,oBAAA,kEACAC,yBAAA,sEACAC,0BAAA,sFACAC,wBAAA,0EACAC,oBAAA,+BACAC,gBAAA,kBACAC,SAAA,UACAC,6BAAA,eACAC,4BAAA,eACAC,0BAAA,+BACAC,oBAAA,oBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,cACAC,cAAA,uBACAC,YAAA,kBACA/K,SAAA,uCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIkV,KAAA,SAAA3hF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,kCACAC,sBAAA,6BACAC,gBAAA,oBACAC,eAAA,oBACAC,KAAA,QACAC,YAAA,OACAC,mBAAA,oBACAC,oCAAA,+DACAC,uCAAA,sCACAC,sCAAA,gFACAC,iCAAA,4CACAC,mBAAA,QACAC,yBAAA,QACAC,iBAAA,4CACAC,4BAAA,kCACAC,4BAAA,8BACAC,8BAAA,gDACAC,oBAAA,sBACAC,wBAAA,uBACAC,8BAAA,2BACAC,mBAAA,uBACAC,8BAAA,+BACAC,sBAAA,+BACAC,0BAAA,oBACAC,aAAA,6BACAC,6CAAA,uCACAC,oCAAA,uCACAC,+BAAA,uCACAC,0CAAA,6BACAC,mDAAA,gEACAC,uBAAA,oDACAC,qCAAA,qDACAC,sBAAA,gDACAC,qCAAA,oCACAC,mBAAA,2HACAC,uCAAA,kDACAC,oBAAA,gDACAC,yBAAA,gDACAC,0BAAA,yEACAC,wBAAA,wCACAC,oBAAA,gBACAC,gBAAA,aACAC,SAAA,wBACAC,6BAAA,YACAC,4BAAA,YACAC,0BAAA,gBACAC,oBAAA,mBACAC,8BAAA,UACAC,0BAAA,SACAC,gBAAA,QACAC,cAAA,oBACAC,YAAA,2BACA/K,SAAA,uCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,UACAC,gBAAA,iBACAC,aAAA,aACAtU,mBAAA,gBACAE,SAAA,YACAD,cAAA,cACAI,IAAA,OACAC,MAAA,SACAC,UAAA,aACAR,WAAA,YACAD,KAAA,OACAtpD,IAAA,OACA4pD,QAAA,WACAD,SAAA,kBAIImV,KAAA,SAAA5hF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,mCACAC,sBAAA,iCACAC,gBAAA,2BACAC,eAAA,uBACAC,KAAA,cACAC,YAAA,OACAC,mBAAA,8BACAC,oCAAA,oEACAC,uCAAA,4CACAC,sCAAA,8EACAC,iCAAA,uCACAC,mBAAA,QACAC,yBAAA,SACAC,iBAAA,kCACAC,4BAAA,gCACAC,4BAAA,oCACAC,8BAAA,gEACAC,oBAAA,sBACAC,wBAAA,+BACAC,8BAAA,yCACAC,mBAAA,oCACAC,8BAAA,mCACAC,sBAAA,gCACAC,0BAAA,mCACAC,aAAA,gCACAC,6CAAA,0DACAC,oCAAA,8CACAC,+BAAA,8CACAC,0CAAA,gCACAC,mDAAA,qFACAC,uBAAA,qDACAC,qCAAA,iEACAC,sBAAA,mEACAC,qCAAA,sDACAC,mBAAA,oKACAC,uCAAA,wDACAC,oBAAA,0DACAC,yBAAA,oEACAC,0BAAA,sEACAC,wBAAA,0DACAC,oBAAA,sBACAC,gBAAA,aACAC,SAAA,MACAC,6BAAA,eACAC,4BAAA,eACAC,0BAAA,sBACAC,oBAAA,iBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,eACAC,cAAA,iBACAC,YAAA,4CACA/K,SAAA,+BACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,SACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIoV,KAAA,SAAA7hF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,oCACAC,sBAAA,+BACAC,gBAAA,wBACAC,eAAA,2BACAC,KAAA,OACAC,YAAA,UACAC,mBAAA,yBACAC,oCAAA,6EACAC,uCAAA,wCACAC,sCAAA,4EACAC,iCAAA,+CACAC,mBAAA,WACAC,yBAAA,QACAC,iBAAA,qBACAC,4BAAA,uCACAC,4BAAA,sCACAC,8BAAA,qDACAC,oBAAA,0BACAC,wBAAA,0BACAC,8BAAA,sCACAC,mBAAA,iCACAC,8BAAA,uCACAC,sBAAA,+BACAC,0BAAA,4BACAC,aAAA,mCACAC,6CAAA,6EACAC,oCAAA,8CACAC,+BAAA,8CACAC,0CAAA,uCACAC,mDAAA,6EACAC,uBAAA,sDACAC,qCAAA,uEACAC,sBAAA,qEACAC,qCAAA,+CACAC,mBAAA,sIACAC,uCAAA,sDACAC,oBAAA,0DACAC,yBAAA,4DACAC,0BAAA,wFACAC,wBAAA,4DACAC,oBAAA,qBACAC,gBAAA,cACAC,SAAA,MACAC,6BAAA,YACAC,4BAAA,YACAC,0BAAA,qBACAC,oBAAA,sBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,WACAC,cAAA,eACAC,YAAA,qBACA/K,SAAA,2CACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIqV,KAAA,SAAA9hF,EAAAxpC,EAAAC,GAEJ,YAEA,IAAAq1C,GAAA9L,EAAA,iBAAA8L,OAEAi2E,GACAC,MAAAhiF,EAAA,WACAiiF,MAAAjiF,EAAA,WACAkiF,MAAAliF,EAAA,WACAmiF,MAAAniF,EAAA,WACAoiF,MAAApiF,EAAA,WACAqiF,MAAAriF,EAAA,WACAsiF,MAAAtiF,EAAA,WACAuiF,MAAAviF,EAAA,WACAwiF,MAAAxiF,EAAA,WACAyiF,MAAAziF,EAAA,WACA0iF,MAAA1iF,EAAA,WACA2iF,MAAA3iF,EAAA,WACA4iF,MAAA5iF,EAAA,WACA6iF,MAAA7iF,EAAA,WACA8iF,MAAA9iF,EAAA,WACA+iF,MAAA/iF,EAAA,WACAgjF,MAAAhjF,EAAA,WACAijF,MAAAjjF,EAAA,WACAkjF,MAAAljF,EAAA,WACAmjF,MAAAnjF,EAAA,WACAojF,MAAApjF,EAAA,WACAqjF,MAAArjF,EAAA,WACAsjF,MAAAtjF,EAAA,WACAujF,MAAAvjF,EAAA,WACAwjF,MAAAxjF,EAAA,WACAyjF,MAAAzjF,EAAA,WACA0jF,MAAA1jF,EAAA,WACA2jF,MAAA3jF,EAAA,WACA4jF,MAAA5jF,EAAA,WACA6jF,MAAA7jF,EAAA,WACA8jF,MAAA9jF,EAAA,WACA+jF,MAAA/jF,EAAA,WACAgkF,MAAAhkF,EAAA,WACAikF,MAAAjkF,EAAA,YAGAkkF,GACAC,GAAApC,EAAAC,MACAoC,GAAArC,EAAAE,MACAoC,GAAAtC,EAAAG,MACAoC,GAAAvC,EAAAI,MACAv/G,GAAAm/G,EAAAK,MACA7M,GAAAwM,EAAAS,MACA+B,GAAAxC,EAAAU,MACA+B,GAAAzC,EAAAY,MACA8B,GAAA1C,EAAAc,MACAnrG,GAAAqqG,EAAAkB,MACAyB,GAAA3C,EAAAmB,MACAyB,GAAA5C,EAAAiB,MACA4B,GAAA7C,EAAAoB,MACA0B,GAAA9C,EAAAqB,MACA0B,GAAA/C,EAAAsB,MACA0B,GAAAhD,EAAAuB,MACA0B,GAAAjD,EAAAwB,MACA0B,GAAAlD,EAAA0B,MACAyB,GAAAnD,EAAA2B,MACAyB,GAAApD,EAAA4B,MACAyB,GAAArD,EAAA6B,MACAyB,GAAAtD,EAAA8B,MACAyB,GAAAvD,EAAA+B,MAGAttH,GAAAC,SACAytH,4BACAnC,uBACAlN,aAAA/oE,KAAyBo4E,EAAAnC,MAItBxoE,gBAAA,IAAAgsE,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,IAAAC,UAAA,MAAgfC,KAAA,SAAAznF,EAAAxpC,EAAAC,GACnf,YAEAD,GAAAC,SACA2mH,WAAA,yCACAC,sBAAA,sCACAC,gBAAA,gCACAC,eAAA,4BACAC,KAAA,WACAC,YAAA,OACAC,mBAAA,+BACAC,oCAAA,sFACAC,uCAAA,4CACAC,sCAAA,2EACAC,iCAAA,qDACAC,mBAAA,UACAC,yBAAA,UACAC,iBAAA,kBACAC,4BAAA,gCACAC,4BAAA,gCACAC,8BAAA,2EACAC,oBAAA,qBACAC,wBAAA,kBACAC,8BAAA,qCACAC,mBAAA,uCACAC,8BAAA,oCACAC,sBAAA,mCACAC,0BAAA,uBACAC,aAAA,gDACAC,6CAAA,uEACAC,oCAAA,mCACAC,+BAAA,mCACAC,0CAAA,2BACAC,mDAAA,iFACAC,uBAAA,0DACAC,qCAAA,0EACAC,sBAAA,sEACAC,qCAAA,mDACAC,mBAAA,2KACAC,uCAAA,yDACAC,oBAAA,uDACAC,yBAAA,mEACAC,0BAAA,6FACAC,wBAAA,8DACAC,oBAAA,oBACAC,gBAAA,kBACAC,SAAA,MACAC,6BAAA,YACAC,4BAAA,YACAC,0BAAA,oBACAC,oBAAA,mBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,MACAC,cAAA,cACAC,YAAA,qBACA/K,SAAA,8CACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIib,KAAA,SAAA1nF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,0BACAC,sBAAA,kBACAC,gBAAA,gBACAC,eAAA,WACAC,KAAA,KACAC,YAAA,KACAC,mBAAA,UACAC,oCAAA,2DACAC,uCAAA,oCACAC,sCAAA,8CACAC,iCAAA,iBACAC,mBAAA,QACAC,yBAAA,KACAC,iBAAA,gBACAC,4BAAA,iBACAC,4BAAA,sBACAC,8BAAA,4BACAC,oBAAA,eACAC,wBAAA,iBACAC,8BAAA,oBACAC,mBAAA,oBACAC,8BAAA,eACAC,sBAAA,gBACAC,0BAAA,eACAC,aAAA,iBACAC,6CAAA,oCACAC,oCAAA,sBACAC,+BAAA,sBACAC,0CAAA,yBACAC,mDAAA,yCACAC,uBAAA,8BACAC,qCAAA,uCACAC,sBAAA,kCACAC,qCAAA,yBACAC,mBAAA,yFACAC,uCAAA,8BACAC,oBAAA,oCACAC,yBAAA,uCACAC,0BAAA,gDACAC,wBAAA,qCACAC,oBAAA,YACAC,gBAAA,QACAC,SAAA,MACAC,6BAAA,OACAC,4BAAA,OACAC,0BAAA,YACAC,oBAAA,OACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,OACAC,cAAA,SACAC,YAAA,UACA/K,SAAA,+BACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,MACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,qBAIIkb,KAAA,SAAA3nF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,0BACAC,sBAAA,oBACAC,gBAAA,UACAC,eAAA,UACAC,KAAA,KACAC,YAAA,KACAC,mBAAA,UACAC,oCAAA,+DACAC,uCAAA,yCACAC,sCAAA,gDACAC,iCAAA,oBACAC,mBAAA,KACAC,yBAAA,KACAC,iBAAA,cACAC,4BAAA,cACAC,4BAAA,oBACAC,8BAAA,6BACAC,oBAAA,aACAC,wBAAA,eACAC,8BAAA,0BACAC,mBAAA,sBACAC,8BAAA,oBACAC,sBAAA,sBACAC,0BAAA,qBACAC,aAAA,oBACAC,6CAAA,mCACAC,oCAAA,uBACAC,+BAAA,uBACAC,0CAAA,0BACAC,mDAAA,wCACAC,uBAAA,gCACAC,qCAAA,6CACAC,sBAAA,yCACAC,qCAAA,4BACAC,mBAAA,yEACAC,uCAAA,gCACAC,oBAAA,2BACAC,yBAAA,sCACAC,0BAAA,qDACAC,wBAAA,kCACAC,oBAAA,YACAC,gBAAA,QACAC,SAAA,MACAC,6BAAA,QACAC,4BAAA,QACAC,0BAAA,YACAC,oBAAA,MACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,OACAC,cAAA,QACAC,YAAA,SACA/K,SAAA,kCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,KACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIImb,KAAA,SAAA5nF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,gCACAC,sBAAA,gCACAC,gBAAA,yBACAC,eAAA,wBACAC,KAAA,WACAC,YAAA,QACAC,mBAAA,0BACAC,oCAAA,yEACAC,uCAAA,8CACAC,sCAAA,6FACAC,iCAAA,4DACAC,mBAAA,YACAC,yBAAA,cACAC,iBAAA,kBACAC,4BAAA,0BACAC,4BAAA,qCACAC,8BAAA,wDACAC,oBAAA,qBACAC,wBAAA,uBACAC,8BAAA,gCACAC,mBAAA,qCACAC,8BAAA,gCACAC,sBAAA,+BACAC,0BAAA,6BACAC,aAAA,wCACAC,6CAAA,2DACAC,oCAAA,iDACAC,+BAAA,iDACAC,0CAAA,oCACAC,mDAAA,wFACAC,uBAAA,0DACAC,qCAAA,wFACAC,sBAAA,4EACAC,qCAAA,+CACAC,mBAAA,yLACAC,uCAAA,2DACAC,oBAAA,gDACAC,yBAAA,kEACAC,0BAAA,qGACAC,wBAAA,2DACAC,oBAAA,mBACAC,gBAAA,cACAC,SAAA,MACAC,6BAAA,cACAC,4BAAA,cACAC,0BAAA,mBACAC,oBAAA,cACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,WACAC,cAAA,gBACAC,YAAA,oBACA/K,SAAA,sCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIob,KAAA,SAAA7nF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,gCACAC,sBAAA,8BACAC,gBAAA,qBACAC,eAAA,uBACAC,KAAA,QACAC,YAAA,SACAC,mBAAA,0BACAC,oCAAA,8EACAC,uCAAA,6CACAC,sCAAA,kFACAC,iCAAA,2DACAC,mBAAA,SACAC,yBAAA,QACAC,iBAAA,gCACAC,4BAAA,sBACAC,4BAAA,+BACAC,8BAAA,8CACAC,oBAAA,kBACAC,wBAAA,sBACAC,8BAAA,8CACAC,mBAAA,wCACAC,8BAAA,qCACAC,sBAAA,qCACAC,0BAAA,qCACAC,aAAA,yBACAC,6CAAA,uEACAC,oCAAA,6CACAC,+BAAA,6CACAC,0CAAA,+BACAC,mDAAA,kFACAC,uBAAA,sDACAC,qCAAA,mDACAC,sBAAA,2CACAC,qCAAA,iEACAC,mBAAA,8IACAC,uCAAA,kDACAC,oBAAA,sCACAC,yBAAA,oDACAC,0BAAA,wEACAC,wBAAA,yDACAC,oBAAA,sBACAC,gBAAA,aACAC,SAAA,MACAC,6BAAA,YACAC,4BAAA,YACAC,0BAAA,sBACAC,oBAAA,aACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,aACAC,cAAA,aACAC,YAAA,iBACA/K,SAAA,oCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,OACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIqb,KAAA,SAAA9nF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,mDACAC,sBAAA,iCACAC,gBAAA,2BACAC,eAAA,yBACAC,KAAA,SACAC,YAAA,SACAC,mBAAA,yBACAC,oCAAA,qFACAC,uCAAA,qCACAC,sCAAA,8EACAC,iCAAA,6CACAC,mBAAA,SACAC,yBAAA,OACAC,iBAAA,iBACAC,4BAAA,uBACAC,4BAAA,0CACAC,8BAAA,mEACAC,oBAAA,eACAC,wBAAA,sBACAC,8BAAA,0DACAC,mBAAA,6CACAC,8BAAA,uCACAC,sBAAA,kCACAC,0BAAA,mCACAC,aAAA,mCACAC,6CAAA,6DACAC,oCAAA,+CACAC,+BAAA,+CACAC,0CAAA,gCACAC,mDAAA,8FACAC,uBAAA,mDACAC,qCAAA,oEACAC,sBAAA,4EACAC,qCAAA,0DACAC,mBAAA,qKACAC,uCAAA,sDACAC,oBAAA,+DACAC,yBAAA,gEACAC,0BAAA,sFACAC,wBAAA,iDACAC,oBAAA,mCACAC,gBAAA,cACAC,SAAA,eACAC,6BAAA,YACAC,4BAAA,YACAC,0BAAA,mCACAC,oBAAA,gBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,eACAC,cAAA,eACAC,YAAA,eACA/K,SAAA,mDACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIsb,KAAA,SAAA/nF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,gCACAC,sBAAA,kCACAC,gBAAA,+BACAC,eAAA,yBACAC,KAAA,SACAC,YAAA,YACAC,mBAAA,4BACAC,oCAAA,kEACAC,uCAAA,0CACAC,sCAAA,yFACAC,iCAAA,yDACAC,mBAAA,WACAC,yBAAA,UACAC,iBAAA,mBACAC,4BAAA,mCACAC,4BAAA,6CACAC,8BAAA,gEACAC,oBAAA,sBACAC,wBAAA,6BACAC,8BAAA,0CACAC,mBAAA,uCACAC,8BAAA,sCACAC,sBAAA,iCACAC,0BAAA,iCACAC,aAAA,mBACAC,6CAAA,oEACAC,oCAAA,8CACAC,+BAAA,8CACAC,0CAAA,iCACAC,mDAAA,yFACAC,uBAAA,yDACAC,qCAAA,mEACAC,sBAAA,4DACAC,qCAAA,6DACAC,mBAAA,8KACAC,uCAAA,+DACAC,oBAAA,4DACAC,yBAAA,wDACAC,0BAAA,kFACAC,wBAAA,0DACAC,oBAAA,4BACAC,gBAAA,mBACAC,SAAA,MACAC,6BAAA,cACAC,4BAAA,cACAC,0BAAA,4BACAC,oBAAA,qBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,MACAC,cAAA,gBACAC,YAAA,kCACA/K,SAAA,kCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,SACAC,OAAA,SACAC,gBAAA,oBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,YACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIub,KAAA,SAAAhoF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,kCACAC,sBAAA,oCACAC,gBAAA,8BACAC,eAAA,6BACAC,KAAA,SACAC,YAAA,YACAC,mBAAA,4BACAC,oCAAA,uEACAC,uCAAA,wCACAC,sCAAA,6EACAC,iCAAA,8CACAC,mBAAA,WACAC,yBAAA,WACAC,iBAAA,oBACAC,4BAAA,kCACAC,4BAAA,0CACAC,8BAAA,+DACAC,oBAAA,uBACAC,wBAAA,8BACAC,8BAAA,+CACAC,mBAAA,yCACAC,8BAAA,sCACAC,sBAAA,sCACAC,0BAAA,mCACAC,aAAA,qCACAC,6CAAA,oEACAC,oCAAA,mDACAC,+BAAA,mDACAC,0CAAA,iCACAC,mDAAA,8FACAC,uBAAA,qDACAC,qCAAA,gEACAC,sBAAA,uDACAC,qCAAA,0DACAC,mBAAA,sKACAC,uCAAA,gEACAC,oBAAA,2DACAC,yBAAA,+DACAC,0BAAA,mFACAC,wBAAA,yDACAC,oBAAA,4BACAC,gBAAA,mBACAC,SAAA,MACAC,6BAAA,cACAC,4BAAA,cACAC,0BAAA,4BACAC,oBAAA,mBACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,gBACAC,cAAA,iBACAC,YAAA,mBACA/K,SAAA,oCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,SACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIwb,KAAA,SAAAjoF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,qCACAC,sBAAA,gCACAC,gBAAA,yBACAC,eAAA,wBACAC,KAAA,WACAC,YAAA,SACAC,mBAAA,0BACAC,oCAAA,sFACAC,uCAAA,sCACAC,sCAAA,mFACAC,iCAAA,sDACAC,mBAAA,SACAC,yBAAA,UACAC,iBAAA,4BACAC,4BAAA,yCACAC,4BAAA,+BACAC,8BAAA,8DACAC,oBAAA,iBACAC,wBAAA,2BACAC,8BAAA,oCACAC,mBAAA,iCACAC,8BAAA,8CACAC,sBAAA,4BACAC,0BAAA,gCACAC,aAAA,qCACAC,6CAAA,uEACAC,oCAAA,2DACAC,+BAAA,2DACAC,0CAAA,gCACAC,mDAAA,8FACAC,uBAAA,sDACAC,qCAAA,kEACAC,sBAAA,+DACAC,qCAAA,oDACAC,mBAAA,mJACAC,uCAAA,uDACAC,oBAAA,8DACAC,yBAAA,gFACAC,0BAAA,2EACAC,wBAAA,sDACAC,oBAAA,sBACAC,gBAAA,cACAC,SAAA,6BACAC,6BAAA,YACAC,4BAAA,YACAC,0BAAA,sBACAC,oBAAA,gCACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,SACAC,cAAA,kBACAC,YAAA,6BACA/K,SAAA,0CACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAIIyb,KAAA,SAAAloF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,mCACAC,sBAAA,4BACAC,gBAAA,uBACAC,eAAA,qBACAC,KAAA,UACAC,YAAA,SACAC,mBAAA,yBACAC,oCAAA,gFACAC,uCAAA,8CACAC,sCAAA,yEACAC,iCAAA,wDACAC,mBAAA,SACAC,yBAAA,YACAC,iBAAA,mBACAC,4BAAA,qCACAC,4BAAA,+BACAC,8BAAA,2DACAC,oBAAA,iBACAC,wBAAA,eACAC,8BAAA,wCACAC,mBAAA,sCACAC,8BAAA,+CACAC,sBAAA,gCACAC,0BAAA,wBACAC,aAAA,qCACAC,6CAAA,6DACAC,oCAAA,wCACAC,+BAAA,wCACAC,0CAAA,kCACAC,mDAAA,iFACAC,uBAAA,0DACAC,qCAAA,gEACAC,sBAAA,mEACAC,qCAAA,yCACAC,mBAAA,4JACAC,uCAAA,yDACAC,oBAAA,0DACAC,yBAAA,+DACAC,0BAAA,+EACAC,wBAAA,wDACAC,oBAAA,sBACAC,gBAAA,cACAC,SAAA,MACAC,6BAAA,cACAC,4BAAA,cACAC,0BAAA,sBACAC,oBAAA,4BACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,MACAC,cAAA,eACAC,YAAA,kBACA/K,SAAA,+BACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,QACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAII0b,KAAA,SAAAnoF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,gCACAC,sBAAA,iCACAC,gBAAA,2BACAC,eAAA,wBACAC,KAAA,QACAC,YAAA,QACAC,mBAAA,0BACAC,oCAAA,uEACAC,uCAAA,uCACAC,sCAAA,qFACAC,iCAAA,gEACAC,mBAAA,SACAC,yBAAA,UACAC,iBAAA,kBACAC,4BAAA,2BACAC,4BAAA,gCACAC,8BAAA,8DACAC,oBAAA,qBACAC,wBAAA,yBACAC,8BAAA,yCACAC,mBAAA,yCACAC,8BAAA,8BACAC,sBAAA,kCACAC,0BAAA,0BACAC,aAAA,mBACAC,6CAAA,kEACAC,oCAAA,2CACAC,+BAAA,2CACAC,0CAAA,4BACAC,mDAAA,qFACAC,uBAAA,6DACAC,qCAAA,8DACAC,sBAAA,2DACAC,qCAAA,+CACAC,mBAAA,kJACAC,uCAAA,mDACAC,oBAAA,oDACAC,yBAAA,0DACAC,0BAAA,8EACAC,wBAAA,0DACAC,oBAAA,wBACAC,gBAAA,aACAC,SAAA,MACAC,6BAAA,cACAC,4BAAA,cACAC,0BAAA,wBACAC,oBAAA,eACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,aACAC,cAAA,aACAC,YAAA,kBACA/K,SAAA,mCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,OACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAII2b,KAAA,SAAApoF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,iCACAC,sBAAA,2BACAC,gBAAA,wBACAC,eAAA,wBACAC,KAAA,QACAC,YAAA,YACAC,mBAAA,uBACAC,oCAAA,sEACAC,uCAAA,kDACAC,sCAAA,wEACAC,iCAAA,qDACAC,mBAAA,SACAC,yBAAA,KACAC,iBAAA,2BACAC,4BAAA,8BACAC,4BAAA,yBACAC,8BAAA,uCACAC,oBAAA,kBACAC,wBAAA,+BACAC,8BAAA,8BACAC,mBAAA,+BACAC,8BAAA,6BACAC,sBAAA,2BACAC,0BAAA,4BACAC,aAAA,iCACAC,6CAAA,mDACAC,oCAAA,8CACAC,+BAAA,8CACAC,0CAAA,yCACAC,mDAAA,kFACAC,uBAAA,6CACAC,qCAAA,+DACAC,sBAAA,yDACAC,qCAAA,0DACAC,mBAAA,4JACAC,uCAAA,+CACAC,oBAAA,iCACAC,yBAAA,8CACAC,0BAAA,+EACAC,wBAAA,wDACAC,oBAAA,oBACAC,gBAAA,cACAC,SAAA,MACAC,6BAAA,WACAC,4BAAA,WACAC,0BAAA,oBACAC,oBAAA,aACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,eACAC,cAAA,aACAC,YAAA,kCACA/K,SAAA,oCACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,OACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAII4b,KAAA,SAAAroF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,wBACAC,sBAAA,aACAC,gBAAA,SACAC,eAAA,SACAC,KAAA,KACAC,YAAA,KACAC,mBAAA,SACAC,oCAAA,gDACAC,uCAAA,4BACAC,sCAAA,qCACAC,iCAAA,eACAC,mBAAA,KACAC,yBAAA,KACAC,iBAAA,UACAC,4BAAA,WACAC,4BAAA,YACAC,8BAAA,mBACAC,oBAAA,WACAC,wBAAA,WACAC,8BAAA,YACAC,mBAAA,UACAC,8BAAA,WACAC,sBAAA,SACAC,0BAAA,WACAC,aAAA,aACAC,6CAAA,oBACAC,oCAAA,gBACAC,+BAAA,gBACAC,0CAAA,YACAC,mDAAA,wBACAC,uBAAA,kBACAC,qCAAA,0BACAC,sBAAA,wBACAC,qCAAA,mBACAC,mBAAA,qDACAC,uCAAA,gBACAC,oBAAA,sBACAC,yBAAA,kBACAC,0BAAA,6BACAC,wBAAA,4BACAC,oBAAA,QACAC,gBAAA,KACAC,SAAA,MACAC,6BAAA,QACAC,4BAAA,QACAC,0BAAA,QACAC,oBAAA,OACAC,8BAAA,QACAC,0BAAA,MACAC,gBAAA,OACAC,cAAA,OACAC,YAAA,QACA/K,SAAA,4BACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,IACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,KACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,WAII6b,KAAA,SAAAtoF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,0BACAC,sBAAA,YACAC,gBAAA,SACAC,eAAA,SACAC,KAAA,KACAC,YAAA,KACAC,mBAAA,SACAC,oCAAA,uDACAC,uCAAA,gCACAC,sCAAA,yCACAC,iCAAA,eACAC,mBAAA,KACAC,yBAAA,KACAC,iBAAA,kBACAC,4BAAA,UACAC,4BAAA,YACAC,8BAAA,qBACAC,oBAAA,SACAC,wBAAA,WACAC,8BAAA,WACAC,mBAAA,WACAC,8BAAA,UACAC,sBAAA,SACAC,0BAAA,UACAC,aAAA,UACAC,6CAAA,iBACAC,oCAAA,gBACAC,+BAAA,gBACAC,0CAAA,cACAC,mDAAA,wBACAC,uBAAA,qBACAC,qCAAA,0BACAC,sBAAA,yBACAC,qCAAA,oBACAC,mBAAA,mDACAC,uCAAA,kBACAC,oBAAA,uBACAC,yBAAA,oBACAC,0BAAA,gCACAC,wBAAA,0BACAC,oBAAA,QACAC,gBAAA,KACAC,SAAA,MACAC,6BAAA,SACAC,4BAAA,SACAC,0BAAA,QACAC,oBAAA,MACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,OACAC,cAAA,MACAC,YAAA,cACA/K,SAAA,+BACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,MACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,WACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,iBAII8b,KAAA,SAAAvoF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,0BACAC,sBAAA,WACAC,gBAAA,SACAC,eAAA,SACAC,KAAA,KACAC,YAAA,KACAC,mBAAA,SACAC,oCAAA,qDACAC,uCAAA,iCACAC,sCAAA,wCACAC,iCAAA,cACAC,mBAAA,KACAC,yBAAA,KACAC,iBAAA,YACAC,4BAAA,SACAC,4BAAA,WACAC,8BAAA,qBACAC,oBAAA,QACAC,wBAAA,UACAC,8BAAA,YACAC,mBAAA,WACAC,8BAAA,UACAC,sBAAA,SACAC,0BAAA,WACAC,aAAA,aACAC,6CAAA,kBACAC,oCAAA,cACAC,+BAAA,cACAC,0CAAA,YACAC,mDAAA,sBACAC,uBAAA,oBACAC,qCAAA,yBACAC,sBAAA,wBACAC,qCAAA,oBACAC,mBAAA,qDACAC,uCAAA,gBACAC,oBAAA,uBACAC,yBAAA,oBACAC,0BAAA,gCACAC,wBAAA,2BACAC,oBAAA,QACAC,gBAAA,KACAC,SAAA,SACAC,6BAAA,SACAC,4BAAA,SACAC,0BAAA,QACAC,oBAAA,MACAC,8BAAA,UACAC,0BAAA,QACAC,gBAAA,OACAC,cAAA,OACAC,YAAA,SACA/K,SAAA,6BACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,KACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,OACAE,SAAA,MACAD,cAAA,MACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,WAII+b,KAAA,SAAAxoF,EAAAxpC,EAAAC,GACJ,YAEAD,GAAAC,SACA2mH,WAAA,wBACAC,sBAAA,WACAC,gBAAA,SACAC,eAAA,SACAC,KAAA,KACAC,YAAA,KACAC,mBAAA,SACAC,oCAAA,kDACAC,uCAAA,6BACAC,sCAAA,qCACAC,iCAAA,eACAC,mBAAA,KACAC,yBAAA,KACAC,iBAAA,WACAC,4BAAA,WACAC,4BAAA,YACAC,8BAAA,mBACAC,oBAAA,SACAC,wBAAA,WACAC,8BAAA,YACAC,mBAAA,UACAC,8BAAA,WACAC,sBAAA,SACAC,0BAAA,WACAC,aAAA,aACAC,6CAAA,qBACAC,oCAAA,gBACAC,+BAAA,gBACAC,0CAAA,YACAC,mDAAA,wBACAC,uBAAA,wBACAC,qCAAA,wBACAC,sBAAA,uBACAC,qCAAA,mBACAC,mBAAA,qDACAC,uCAAA,gBACAC,oBAAA,qBACAC,yBAAA,kBACAC,0BAAA,6BACAC,wBAAA,4BACAC,oBAAA,QACAC,gBAAA,KACAC,SAAA,OACAC,6BAAA,QACAC,4BAAA,QACAC,0BAAA,QACAC,oBAAA,OACAC,8BAAA,QACAC,0BAAA,MACAC,gBAAA,OACAC,cAAA,MACAC,YAAA,QACA/K,SAAA,6BACAgL,YAAA,YACA5vB,MAAA,QACA6vB,KAAA,IACAC,OAAA,SACAC,gBAAA,gBACAC,aAAA,aACAtU,mBAAA,mBACAE,SAAA,KACAD,cAAA,cACAI,IAAA,MACAC,MAAA,QACAC,UAAA,YACAR,WAAA,aACAD,KAAA,OACAtpD,IAAA,MACA4pD,QAAA,UACAD,SAAA,WAIIgc,KAAA,SAAAzoF,EAAAxpC,EAAAC,GACJ,YAQA,SAAAiyH,GAAApwG,GACAA,QAEAwzB,EAAAjnC,KAAAyT,GATA,GAAAwzB,GAAA9L,EAAA,iBAAA8L,OACAknB,EAAAhzB,EAAA,yBACAivE,EAAAjvE,EAAA,uBACAyP,EAAAzP,EAAA,gBAAAyP,OACA1O,EAAAf,EAAA,iBAQA0oF,GAAAvnH,UAAA0wD,eAAA,SAAAn6C,GACA,MAAA7S,MAAAd,QAEAc,KAAAd,QAAA6U,cAAA,uBAAAlB,EAAA,MAFsB,MAKtBgxG,EAAAvnH,UAAAw2G,qBAAA,WACA,MAAA52E,GAAAgB,OAAA,GAAAktE,GAAAx/D,EAAA49D,2BAGAqb,EAAAvnH,UAAAwnH,iBAAA,WACA,MAAA9jH,MAAA+jH,kBAAA/jH,KAAA+jH,iBAAAh7D,eAGA86D,EAAAvnH,UAAA0nH,YAAA,aAEAH,EAAAvnH,UAAAixC,SAAA,WACA,MAAArR,GAAAhV,WAGA28F,EAAAvnH,UAAAgyG,kBAAA,WACAtuG,KAAAd,SACAivD,EAAAzlC,IAAA1oB,KAAAd,QAAA,4BAGAc,KAAAkyG,MAAA5D,qBAGAuV,EAAAvnH,UAAAiyG,gBAAA,WACAvuG,KAAAd,SACAivD,EAAAhtC,OAAAnhB,KAAAd,QAAA,4BAGAc,KAAAkyG,MAAA3D,mBAGA58G,EAAAC,QAAAiyH,IAEG/O,eAAA,IAAApgE,gBAAA,IAAAuvE,sBAAA,IAAAr2E,iBAAA,IAAAopB,wBAAA,KAAiHktD,KAAA,SAAA/oF,EAAAxpC,EAAAC,GACpH,YAMA,SAAAuyH,KACAN,EAAAj6G,MAAA5J,KAAA6J,WAEA7J,KAAAquE,cAPA,GAAAw1C,GAAA1oF,EAAA,eACAo5E,EAAAp5E,EAAA,sCACA4rE,EAAA5rE,EAAA,gBAAA4rE,kBAQAod,GAAA7nH,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WACA6nH,EAAA7nH,UAAAuc,YAAAsrG,EACAA,EAAAha,GAAAga,EAAA7nH,UAAA6tG,GAAA,sBAEAga,EAAA7nH,UAAA+xE,YAAA,WACAruE,KAAAokH,WAAApkH,KAAAgtD,eAAA,4BACAhtD,KAAAqkH,UAAArkH,KAAAgtD,eAAA,2BACAhtD,KAAAskH,YAAAtkH,KAAAgtD,eAAA,gCAEAunD,EAAAv0G,KAAAokH,WAAA,WACApkH,KAAAkyG,MAAA1D,8BACG93F,KAAA1W,OACHu0G,EAAAv0G,KAAAqkH,UAAA,WACArkH,KAAAkyG,MAAAzD,oCACG/3F,KAAA1W,QAGHmkH,EAAA7nH,UAAAioH,mBAAA,SAAAx7D,GACA,GAAAy7D,GAAAC,EACAC,EAAA1kH,KAAAmyG,QAAAppD,EAAAt4C,KAAA,4BAEA,IAAAi0G,EAAA,CACA,OAAA37D,EAAAt4C,MACA,IAAAs2F,GAAA3qC,KACAooD,EAAAz7D,EAAA5uB,QAAA4lB,SACA0kE,EAAA17D,EAAA5uB,QAAAylB,SACA6kE,EAAAzkH,KAAAmyG,QAAAsS,KACA,MACA,KAAA1d,GAAAtqD,OACA+nE,EAAAz7D,EAAA5uB,QAAAipD,KACA,MACA,KAAA2jB,GAAA/rD,MACAwpE,EAAAz7D,EAAA5uB,QAAAswD,SAMAi6B,IAAAv8E,QAAA,iBAAqDq8E,GACrDC,IACAC,IAAAv8E,QAAA,0BAAgEs8E,QAGhEC,GAAA1kH,KAAAmyG,QAAA8G,gCAEAj5G,MAAAskH,YAAAzmH,UAAA6mH,GAGAP,EAAA7nH,UAAA0nH,YAAA,WACA/jH,OAAAuI,sBAAA,WACAxI,KAAAokH,WAAAj3D,SACGz2C,KAAA1W,QAGHrO,EAAAC,QAAAuyH,IAEGrP,eAAA,IAAA6P,qCAAA,IAAAC,cAAA,MAA8EC,KAAA,SAAA1pF,EAAAxpC,EAAAC,GACjF,YAkBA,SAAAk+G,KACA+T,EAAAj6G,MAAA5J,KAAA6J,WAEA7J,KAAA8kH,yBAAA,EAEA9kH,KAAAquE,cAiYA,QAAAhqB,GAAAx2B,GACA,MAAAA,GAAAnb,cAAAy1B,QAAA,mBAAA7sC,GACA,MAAAA,GAAA,GAAAmqD,gBAIA,QAAAs/D,GAAAhhF,GACA,wBAAAA,EA7ZA,GAAA4G,GAAAxP,EAAA,oBACA6rE,EAAA7rE,EAAA,gBAAA6rE,eACA6c,EAAA1oF,EAAA,eACAgzB,EAAAhzB,EAAA,yBACA6pF,EAAA7pF,EAAA,yBACA8pF,EAAA9pF,EAAA,0BACA+pF,EAAA/pF,EAAA,0BACAgpF,EAAAhpF,EAAA,8BACAo5E,EAAAp5E,EAAA,sCACAe,EAAAf,EAAA,kBACA1xB,EAAA0xB,EAAA,eACAgqF,EAAAhqF,EAAA,2BAEAutE,EAAAvtE,EAAA,gBAAAutE,qCACAD,EAAAttE,EAAA,gBAAAyP,OAAA69D,kCAUAqH,GAAAxzG,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WACAwzG,EAAAxzG,UAAAuc,YAAAi3F,EAEAA,EAAAxzG,UAAA+xE,YAAA,WACA,GAAA+2C,EAEAplH,MAAAqlH,2BAAArlH,KAAAkyG,MAAAhH,wBAAA7sG,OAAA,EAEA2B,KAAAslH,UAEAtlH,KAAAulH,eAAAvlH,KAAAgtD,eAAA,mBACAhtD,KAAAwlH,eAAAxlH,KAAAgtD,eAAA,oBAEAhtD,KAAAkkC,OAAAlkC,KAAAgtD,eAAA,UACAhtD,KAAAylH,eAAAzlH,KAAAgtD,eAAA,mBACAhtD,KAAA0lH,eAAA1lH,KAAAgtD,eAAA,mBAEAhtD,KAAA2lH,iBAAA3lH,KAAAgtD,eAAA,qBACAhtD,KAAA4lH,gBAAA5lH,KAAAd,QAAA6U,cAAA,qBAEA/T,KAAAmlH,oBAEAnlH,KAAAkyG,MAAAthF,GAAA,yBAAA5wB,KAAA4xG,qBAAAl7F,KAAA1W,OAEAA,KAAAkyG,MAAAthF,GAAA,gBAAA5wB,KAAA6lH,eAAAnvG,KAAA1W,OACAA,KAAAkyG,MAAAthF,GAAA,eAAA5wB,KAAA8lH,eAAApvG,KAAA1W,OACAA,KAAAkyG,MAAAthF,GAAA,oBAAA5wB,KAAAsuG,kBAAA53F,KAAA1W,OACAA,KAAAkyG,MAAAthF,GAAA,kBAAA5wB,KAAAuuG,gBAAA73F,KAAA1W,OAEAA,KAAA+lH,oBAAArrH,OAAAusB,KAAA+9F,GAAApnE,OAAA,SAAAooE,EAAAC,GACA,GAAAC,GAAAC,CAkBA,QAhBA,IAAAnmH,KAAAkyG,MAAAhH,wBAAAptG,QAAAmoH,KACAC,EAAAlB,EAAAiB,GAEAE,EAAA,GAAAD,IACAhnH,QAAAc,KAAAgtD,eAAAk5D,EAAA/b,IACAic,SAAApmH,KACAkyG,MAAAlyG,KAAAkyG,MACA5nE,OAAAtqC,KAAAsqC,OACA6nE,QAAAnyG,KAAAmyG,UAEAgU,EAAAt0E,aAEA7xC,KAAAqmH,QAAAF,GACAH,EAAAhvG,KAAAmvG,EAAAhc,KAGA6b,GACGtvG,KAAA1W,UAEHA,KAAAsmH,oBAAA,GAAArB,IACA/lH,QAAAc,KAAAd,QACAgzG,MAAAlyG,KAAAkyG,MACA5nE,OAAAtqC,KAAAsqC,OACA6nE,QAAAnyG,KAAAmyG,UAEAnyG,KAAAqmH,QAAArmH,KAAAsmH,qBAEAtmH,KAAAumH,uBAAA,GAAApC,IACAjlH,QAAAc,KAAAgtD,eAAA,uBACAklD,MAAAlyG,KAAAkyG,MACAC,QAAAnyG,KAAAmyG,UAEAnyG,KAAAqmH,QAAArmH,KAAAumH,wBAEAhS,EAAAv0G,KAAAkkC,OAAAlkC,KAAAwmH,wBAAA9vG,KAAA1W,OAEAA,KAAAkyG,MAAAthF,GAAA,uCACAnnB,EAAAmiB,MAAA88E,GAAAtiE,KAAA,WACA,GAAAvzB,GAAAoyG,EAAA9a,EAKAnqG,MAAAkyG,MAAA1E,sBACA36F,EAAA7S,KAAAkyG,MAAAzE,oBAGAztG,KAAAqyG,eAAAx/F,IACK6D,KAAA1W,QACF0W,KAAA1W,OAEHA,KAAAkyG,MAAAthF,GAAA,mBAAA5wB,KAAAymH,oBAAA/vG,KAAA1W,OAEAA,KAAAkyG,MAAAthF,GAAA,uCACA,GAAA81F,GAAA1mH,KAAAsxG,QAAAtxG,KAAAkyG,MAAAxE,yBAEAgZ,IAAA,kBAAAA,GAAAva,2BACAua,EAAAva,6BAEGz1F,KAAA1W,OAEHA,KAAAkyG,MAAAthF,GAAA,iBAAA5wB,KAAAusG,eAAA71F,KAAA1W,OAEAA,KAAAkyG,MAAAthF,GAAA,kBAAA5wB,KAAAysG,gBAAA/1F,KAAA1W,OAEAA,KAAAkyG,MAAAthF,GAAA,+BAAA5wB,KAAA2mH,uCAAAjwG,KAAA1W,OACAA,KAAAkyG,MAAAthF,GAAA,qCAAA5wB,KAAA4mH,mCAAAlwG,KAAA1W,OACAA,KAAAkyG,MAAAthF,GAAA,oCAAA5wB,KAAA6mH,kCAAAnwG,KAAA1W,OACAA,KAAAkyG,MAAAthF,GAAA,qCAAA5wB,KAAA8mH,mCAAApwG,KAAA1W,OAEAA,KAAAqlH,6BACAD,EAAA,GAAAF,IACA56E,OAAAtqC,KAAAsqC,OACAprC,QAAAc,KAAAgtD,eAAAk4D,EAAA/a,IACAic,SAAApmH,KACAkyG,MAAAlyG,KAAAkyG,MACAC,QAAAnyG,KAAAmyG,UAGAnyG,KAAAqmH,QAAAjB,IAGAplH,KAAA+mH,sBAGAjX,EAAAxzG,UAAAmqH,oBAAA,SAAAx+G,GACA,GAAA4K,GAAA5K,EAAAikG,UACAwa,EAAA1mH,KAAAsxG,QAAAz+F,EAEAA,KAAAoyG,EAAA9a,IACAh8C,EAAAzlC,IAAA1oB,KAAAsmH,oBAAA1pF,UAAA,6BACAuxB,EAAAhtC,OAAAnhB,KAAAulH,eAAA,6BAEA97G,EAAAmiB,MAAA,GAAAwa,KAAA,WACA+nB,EAAAzlC,IAAA1oB,KAAAulH,eAAA,4BACK7uG,KAAA1W,OACLmuD,EAAAhtC,OAAAnhB,KAAAsmH,oBAAA1pF,UAAA,6BACA58B,KAAAsxG,QAAAz+F,GAAAixG,oBACA9jH,KAAAkyG,MAAA9F,6BACAC,eAAA,KAKAqa,EAAA1C,eAGAlU,EAAAxzG,UAAA+pH,QAAA,SAAAjsG,GACApa,KAAAslH,OAAAlrG,EAAA+vF,IAAA/vF,GAGA01F,EAAAxzG,UAAAg1G,QAAA,SAAAz+F,GACA,MAAA7S,MAAAslH,OAAAzyG,IAGAi9F,EAAAxzG,UAAA+1G,eAAA,SAAAx/F,EAAAm0G,GACA,GAAAj+D,EAEAt/C,GAAAmiB,MAAA,GAAAwa,KAAA,WACApmC,KAAAd,QAAAykC,UAAAohF,EAAAlyG,GACAm0G,GACA74D,EAAAzlC,IAAA1oB,KAAAd,QAAA6lH,EAAAiC,KAEGtwG,KAAA1W,OAEHA,KAAAoyG,YAAApyG,KAAAsxG,QAAAz+F,GACA7S,KAAAkyG,MAAApG,iBAAAj5F,IAEA,IAAA7S,KAAA+lH,oBAAAjoH,QAAA+U,GACA7S,KAAAkyG,MAAA5E,oBAAAjvG,OAAA,GAAA2B,KAAAsxG,QAAA4T,EAAA/a,IACAnqG,KAAAinH,aAEAjnH,KAAAknH,aAEGr0G,IAAAoyG,EAAA9a,IACHnqG,KAAAinH,aAEAjnH,KAAAgtD,eAAA,mBAAA7vB,YAAAn9B,KAAAgtD,eAAA,aACGn6C,IAAAqyG,EAAA/a,IACHnqG,KAAAknH,aAGAlnH,KAAAmlH,iBACAnlH,KAAAd,QAAA89B,aAAA,gCAGA+rB,EAAA/oD,KAAAoyG,YAAA0R,mBAEA9jH,KAAAkyG,MAAA9F,6BACAC,cAAAj5F,QAAA21C,IAAA/oD,KAAAkyG,MAAAxF,gBACAj8F,KAAAs4C,KAAAt4C,KACAu8F,sBAAAjkD,IAGA/oD,KAAAkyG,MAAA7D,cAGAyB,EAAAxzG,UAAAw2G,qBAAA,WAGA,MAFA9yG,MAAAsxG,QAAAtxG,KAAAkyG,MAAAxE,0BAEAoF,uBAAA1sE,KAAA,SAAAijB,GAGA,MAFA1e,GAAAgC,UAAA3sC,KAAAsqC,OAAA,0BAAA08D,EAAA39C,EAAA54C,OAEA44C,GACG3yC,KAAA1W,OAAA2lC,MAAA,SAAA/wB,GAGH,MAFA+1B,GAAAgC,UAAA3sC,KAAAsqC,OAAA,gCAEApO,EAAAgB,OAAAtoB,IACG8B,KAAA1W,QAGH8vG,EAAAxzG,UAAAs1G,qBAAA,WACAzjD,EAAAhtC,OAAAnhB,KAAA4lH,gBAAA,qBACAz3D,EAAAzlC,IAAA1oB,KAAA4lH,gBAAA,oBACAz3D,EAAAzlC,IAAA1oB,KAAA2lH,iBAAA,qBAGA7V,EAAAxzG,UAAAq1G,qBAAA,WACAxjD,EAAAzlC,IAAA1oB,KAAA4lH,gBAAA,qBACAz3D,EAAAhtC,OAAAnhB,KAAA4lH,gBAAA,oBACAz3D,EAAAhtC,OAAAnhB,KAAA2lH,iBAAA,qBAGA7V,EAAAxzG,UAAAkqH,wBAAA,WACA,GAAAW,GACAC,GAAA,IAAApnH,KAAA+lH,oBAAAjoH,QAAAkC,KAAAoyG,YAAAjI,GAEAnqG,MAAAknH,aAEAlnH,KAAAqlH,2BAKG+B,EACH,IAAApnH,KAAAkyG,MAAA5E,oBAAAjvG,OACA2B,KAAAqyG,eAAA6S,EAAA/a,KAEAnqG,KAAAqyG,eAAA4S,EAAA9a,GAAA+a,EAAA/a,IACAnqG,KAAAknH,cAGA/4D,EAAAzlC,IAAA1oB,KAAAd,QAAA6lH,EAAAG,EAAA/a,MAZAgd,EAAAnnH,KAAA+lH,oBAAA,GAEA53D,EAAAzlC,IAAA1oB,KAAAd,QAAA6lH,EAAAoC,IACAnnH,KAAAkyG,MAAApG,iBAAAqb,KAaArX,EAAAxzG,UAAA2qH,WAAA,WACAjnH,KAAAkyG,MAAAxF,iBAGAv+C,EAAAhtC,OAAAnhB,KAAAkkC,OAAA,oBACAiqB,EAAAzlC,IAAA1oB,KAAA0lH,eAAA,sBAGA5V,EAAAxzG,UAAA4qH,WAAA,WACA/4D,EAAAzlC,IAAA1oB,KAAAkkC,OAAA,oBACAiqB,EAAAhtC,OAAAnhB,KAAA0lH,eAAA,qBAGA5V,EAAAxzG,UAAAupH,eAAA,SAAAlnG,GACA,GAAAo2C,GACAsyD,EAAArnH,KAAAmyG,QAAA4H,YAGAhlD,GADA/0D,KAAAmyG,QAAA32G,eAAAmjB,GACA3e,KAAAmyG,QAAAxzF,GACGA,GAAA,gBAAAA,GAAA0c,KACHr7B,KAAAmyG,QAAA9tD,EAAA1lC,EAAA0c,MAAA,UAAAgsF,EACG,mBAAA1oG,EACH8pF,EAEA4e,EAGAl5D,EAAAzlC,IAAA1oB,KAAA4lH,gBAAA,8BACA5lH,KAAAwlH,eAAAprC,UAAArlB,GAGA+6C,EAAAxzG,UAAAwpH,eAAA,WACA33D,EAAAhtC,OAAAnhB,KAAA4lH,gBAAA,+BAGA9V,EAAAxzG,UAAAk2G,mBAAA,WACA,MAAAxyG,MAAAslH,OAAA7xG,QAAA64C,UAGAwjD,EAAAxzG,UAAAgyG,kBAAA,WACAngD,EAAAhtC,OAAAnhB,KAAAylH,eAAA,qBAGA3V,EAAAxzG,UAAAiyG,gBAAA,WACApgD,EAAAzlC,IAAA1oB,KAAAylH,eAAA,qBAGA3V,EAAAxzG,UAAAixC,SAAA,WACA,GAAA5uB,GACA2oG,EAAA5sH,OAAAusB,KAAAjnB,KAAAslH,QACAiC,EAAAD,EAAA/qH,IAAA,SAAA6d,GACA,MAAApa,MAAAslH,OAAAlrG,GAAAmzB,WAAA5H,MAAA,SAAA/wB,GACA+J,EAAA/J,KAEG8B,KAAA1W,MAEH,OAAAk8B,GAAA8J,IAAAuhF,GAAAnhF,KAAA,WACA,MAAAznB,GACAud,EAAAgB,OAAAve,GAGAud,EAAAhV,aAIA4oF,EAAAxzG,UAAAiwG,eAAA,WACAvsG,KAAAqyG,eAAAryG,KAAAsmH,oBAAAnc,IACAnqG,KAAAsmH,oBAAA/Z,iBACAvsG,KAAAknH,aAEAlnH,KAAAkyG,MAAA9F,6BACAC,eAAA,KAIAyD,EAAAxzG,UAAAmwG,gBAAA,WACA,GAAA1jD,EAEA/oD,MAAA8lH,iBACA9lH,KAAAsmH,oBAAA7Z,kBACAzsG,KAAAinH,aAEAl+D,EAAA/oD,KAAAoyG,YAAA0R,mBAEA9jH,KAAAkyG,MAAA9F,6BACAC,cAAAj5F,QAAA21C,GACAt4C,KAAAs4C,KAAAt4C,KACAu8F,sBAAAjkD,KAIA+mD,EAAAxzG,UAAAqqH,uCAAA,SAAA59D,GACA/oD,KAAAumH,uBAAAhC,mBAAAx7D,GACA/oD,KAAAqyG,eAAAryG,KAAAumH,uBAAApc,KAGA2F,EAAAxzG,UAAAsqH,mCAAA,WACA5mH,KAAAqyG,eAAAryG,KAAAsmH,oBAAAnc,KAGA2F,EAAAxzG,UAAAuqH,kCAAA,WACA7mH,KAAAd,QAAAykC,UAAA,GACA3jC,KAAA2xG,wBAGA7B,EAAAxzG,UAAAwqH,mCAAA,SAAAnoG,GACA,GAAAyK,GAAAppB,IAWA,OATAA,MAAAsmH,oBAAA1a,wBAEAjtF,GAAA3e,KAAAkyG,MAAA5E,oBAAAjvG,OAAA,GACA2B,KAAAkyG,MAAA3F,iBACAvsG,KAAA6lH,eAAA,2CAEA7lH,KAAA+mH,qBAGA,GAAA7qF,GAAA,SAAAhV,GACAzd,EAAAmiB,MAAA,KAAAwa,KAAA,WAEAhd,EAAAwoF,uBACA1qF,SAKA4oF,EAAAxzG,UAAAyqH,mBAAA,WACA,GAAArgC,GAAA1mF,KAAAkyG,MAAA5E,oBACAka,GAAA,IAAAxnH,KAAAkyG,MAAA9I,sBAAAoe,6BAEA9gC,GAAAroF,OAAA,EACAmpH,GACA78E,EAAAgC,UAAA3sC,KAAAsqC,OAAA,0BAEAtqC,KAAAkyG,MAAAzG,0BAAA/kB,EAAA,KAEA1mF,KAAAqyG,eAAAryG,KAAAsmH,oBAAAnc,IAEGnqG,KAAAqlH,2BACHrlH,KAAAqyG,eAAA6S,EAAA/a,IAEAnqG,KAAAqyG,eAAAryG,KAAA+lH,oBAAA,KAaAp0H,EAAAC,QAAAk+G,IAEGgF,eAAA,IAAA6P,qCAAA,IAAAn3E,mBAAA,IAAAI,iBAAA,IAAA65E,0BAAA,IAAAC,cAAA,IAAA9C,cAAA,IAAA+C,6BAAA,IAAAC,yBAAA,IAAAC,yBAAA,IAAAC,wBAAA,IAAA9wD,wBAAA,KAA4T+wD,KAAA,SAAA5sF,EAAAxpC,EAAAC,GAC/T,YAWA,SAAAo2H,KACAnE,EAAAj6G,MAAA5J,KAAA6J,WAEA7J,KAAAquE,cAZA,GAAA1jC,GAAAxP,EAAA,oBACA0oF,EAAA1oF,EAAA,eACAgzB,EAAAhzB,EAAA,yBACAya,EAAAza,EAAA,gBAEAo5E,EAAAp5E,EAAA,qCAUA6sF,GAAA1rH,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WACA0rH,EAAA1rH,UAAAuc,YAAAmvG,EAEAA,EAAA1rH,UAAA+xE,YAAA,WACA,GAAA45C,GACAC,EAbA,uwBAcA5gB,EAAA1xD,EAAA0xD,uBACAP,EAAAnxD,EAAAmxD,kBAeA,QAbA/mG,KAAAd,QAAAjE,SAAAiC,cAAA,OACA8C,KAAAd,QAAAykC,UAAA,mBACA3jC,KAAAd,QAAA89B,aAAA,gBACAh9B,KAAAd,QAAA89B,aAAA,iBAEAu3E,EAAAv0G,KAAAd,QAAA,WACAc,KAAAkyG,MAAAxF,eACA1sG,KAAAmoH,gBAEAnoH,KAAAooH,wBAEG1xG,KAAA1W,OAEHA,KAAA+oD,cAAAt4C,MACA,IAAAs2F,GAAAt7D,SACAy8E,IAAA//E,QAAA,yBACAA,QAAA,kBACAA,QAAA,UAAAnoC,KAAAmyG,QAAA,cACAhqE,QAAA,gBACA,MACA,KAAA4+D,GAAA3qC,KACA6rD,EAAAjoH,KAAAmyG,QAAAxB,SAAAxoE,QAAA,yBAA0EnoC,KAAA+oD,cAAA5uB,QAAA4lB,UAC1EmoE,IAAA//E,QAAA,iBAAAm/D,EAAAtnG,KAAA+oD,cAAA5uB,QAAAylB,WACAzX,QAAA,2CACAA,QAAA,UAAA8/E,GACA9/E,QAAA,aAAAnoC,KAAAmyG,QAAAnyG,KAAA+oD,cAAA5uB,QAAAylB,UACA,MACA,KAAAmnD,GAAA9qD,UACAisE,IAAA//E,QAAA,0BACAA,QAAA,kBACAA,QAAA,UAAAnoC,KAAAmyG,QAAA,eACAhqE,QAAA,gBACA,MACA,KAAA4+D,GAAAtqD,OACAyrE,IAAA//E,QAAA,uBACAA,QAAA,kBACAA,QAAA,UAAAnoC,KAAA+oD,cAAA5uB,QAAAipD,OACAj7C,QAAA,aAAAnoC,KAAAmyG,QAAA0J,OACA,MACA,KAAA9U,GAAA/rD,MACAktE,IAAA//E,QAAA,sBACAA,QAAA,kBACAA,QAAA,UAAAnoC,KAAA+oD,cAAA5uB,QAAAswD,UACAtiD,QAAA,aAAAnoC,KAAAmyG,QAAApmB,OAMA/rF,KAAAd,QAAAk7E,UAAA8tC,EACAloH,KAAAqoH,UAAAroH,KAAAd,QAAA6U,cAAA,uCAGAi0G,EAAA1rH,UAAAgsH,UAAA,SAAAC,GAEAv+G,WAAA,WACAmkD,EAAAjqB,OAAAlkC,KAAAd,QAAA,2BAAAqpH,IACG7xG,KAAA1W,MAAA,IAGHgoH,EAAA1rH,UAAAiwG,eAAA,WACAp+C,EAAAzlC,IAAA1oB,KAAAqoH,UAAA,oBACAroH,KAAA+oD,cAAAu9B,iBACAn4B,EAAAzlC,IAAA1oB,KAAAd,QAAA,+BAIA8oH,EAAA1rH,UAAAmwG,gBAAA,WACAt+C,EAAAhtC,OAAAnhB,KAAAqoH,UAAA,oBACAl6D,EAAAhtC,OAAAnhB,KAAAd,QAAA,+BAGA8oH,EAAA1rH,UAAAixC,SAAA,WACAvtC,KAAAd,QAAAnC,YACAiD,KAAAd,QAAAnC,WAAAC,YAAAgD,KAAAd,UAIA8oH,EAAA1rH,UAAA8rH,qBAAA,WACApoH,KAAA+oD,cAAA6lD,SACAjkE,EAAAgC,UAAA3sC,KAAAsqC,OAAA,WAAAsL,EAAAoxD,eAAAhnG,KAAA+oD,cAAAt4C,MAAA,WAGAzQ,KAAAkyG,MAAAzG,0BAAAzrG,KAAA+oD,gBAGAi/D,EAAA1rH,UAAA6rH,cAAA,WACAnoH,KAAAkyG,MAAAvF,6BAAA3sG,KAAA+oD,gBAGAp3D,EAAAC,QAAAo2H,IAEGlT,eAAA,IAAA6P,qCAAA,IAAAn3E,mBAAA,IAAAo3E,cAAA,IAAA5tD,wBAAA,KAAgIwxD,KAAA,SAAArtF,EAAAxpC,EAAAC,GACnI,YAkBA,SAAAqzH,KACApB,EAAAj6G,MAAA5J,KAAA6J,WAEA7J,KAAAquE,cAnBA,GAAAw1C,GAAA1oF,EAAA,eACA6sF,EAAA7sF,EAAA,yBACAivE,EAAAjvE,EAAA,uBACAgzB,EAAAhzB,EAAA,yBACAyP,EAAAzP,EAAA,gBAAAyP,OACA1O,EAAAf,EAAA,kBACAo5E,EAAAp5E,EAAA,sCAEAstF,GACAxhB,WAAA,OACAC,cAAA,SACAC,aAAA,YACAE,eAAA,aACAD,aAAA,QASA6d,GAAA3oH,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WACA2oH,EAAA3oH,UAAAuc,YAAAosG,EACAA,EAAA9a,GAAA8a,EAAA3oH,UAAA6tG,GAAA,UAEA8a,EAAA3oH,UAAA+xE,YAAA,WACAruE,KAAA0oH,SACA1oH,KAAA48B,UAAA58B,KAAAgtD,eAAA,qBACAhtD,KAAA2oH,cAAA3oH,KAAAgtD,eAAA,iBACAhtD,KAAA4oH,YAAA5oH,KAAAgtD,eAAA,gBAEAhtD,KAAAkyG,MAAAthF,GAAA,mBAAA5wB,KAAA6oH,kBAAAnyG,KAAA1W,OACAA,KAAAkyG,MAAAthF,GAAA,4BAAA5wB,KAAA8oH,+BAAApyG,KAAA1W,OACAA,KAAAkyG,MAAAthF,GAAA,wBAAA5wB,KAAA4rG,sBAAAl1F,KAAA1W,OAEAA,KAAA4rG,wBAEA5rG,KAAAkyG,MAAA9I,sBAAAoB,eACAxqG,KAAAkyG,MAAAthF,GAAA,sBAAA5wB,KAAA+oH,qBAAAryG,KAAA1W,OAEAu0G,EAAAv0G,KAAA4oH,YAAA,WACA5oH,KAAAkyG,MAAAxF,eACA1sG,KAAAkyG,MAAAzF,kBAEAzsG,KAAAkyG,MAAA3F,kBAEK71F,KAAA1W,OAELmuD,EAAAhtC,OAAAnhB,KAAA4oH,YAAA,sBAIA3D,EAAA3oH,UAAA6vG,0BAAA,WACAnsG,KAAA+jH,mBAGA/jH,KAAA+jH,iBAAAuE,WAAA,GACAtoH,KAAA+jH,iBAAA,KACA51D,EAAAzlC,IAAA1oB,KAAA2oH,cAAA,0CAGA1D,EAAA3oH,UAAA0sH,wBAAA,WACA,GAAApY,GAAAqY,CAEA,OAAAjpH,MAAA+jH,kBAIAnT,EAAA6X,EAAAzoH,KAAA+jH,iBAAAh7D,cAAAt4C,MACAw4G,EAAAjpH,KAAAmyG,QAAAvB,GAEA5wG,KAAAmyG,QAAAoG,WAAApwE,QAAA,oBAA2D8gF,IAN3D,IASAhE,EAAA3oH,UAAAiwG,eAAA,WACAp+C,EAAAzlC,IAAA1oB,KAAA48B,UAAA,2BAEA58B,KAAA4oH,YAAAxuC,UAAAp6E,KAAAmyG,QAAA+G,mBACAl5G,KAAA2oH,cAAAvuC,UAAAp6E,KAAAmyG,QAAA0G,mBAEA74G,KAAA0oH,MAAArrH,QAAA,SAAA+c,GACAA,EAAAmyF,oBAIA0Y,EAAA3oH,UAAAmwG,gBAAA,WACAt+C,EAAAhtC,OAAAnhB,KAAA48B,UAAA,2BAEA58B,KAAA4oH,YAAAxuC,UAAAp6E,KAAAmyG,QAAAwG,KACA34G,KAAA2oH,cAAAvuC,UAAAp6E,KAAAgpH,0BAEAhpH,KAAA0oH,MAAArrH,QAAA,SAAA+c,GACAA,EAAAqyF,qBAIAwY,EAAA3oH,UAAAusH,kBAAA,SAAA9/D,GACA,GAAAmgE,GAAA,GAAAlB,IACA9V,MAAAlyG,KAAAkyG,MACAnpD,gBACAze,OAAAtqC,KAAAsqC,OACA6nE,QAAAnyG,KAAAmyG,SAGAnyG,MAAAkyG,MAAA7I,iBAAArpG,KAAA48B,UAAAa,aACAz9B,KAAA0oH,MAAA,GAAAn7E,WACAvtC,KAAA0oH,MAAA1/E,OAGAhpC,KAAA48B,UAAAa,WACAz9B,KAAA48B,UAAAx/B,aAAA8rH,EAAAhqH,QAAAc,KAAA48B,UAAAa,YAEAz9B,KAAA48B,UAAAO,YAAA+rF,EAAAhqH,SAGAc,KAAA0oH,MAAA1xG,KAAAkyG,IAGAjE,EAAA3oH,UAAAysH,qBAAA,SAAAhgE,GACA,GAAAzqD,EAEA,KAAAA,EAAA,EAAaA,EAAA0B,KAAA0oH,MAAArqH,OAAuBC,IACpC,GAAA0B,KAAA0oH,MAAApqH,GAAAyqD,kBAAA,CACA/oD,KAAA0oH,MAAApqH,GAAAivC,WACAvtC,KAAA2oH,cAAAvuC,UAAA,SACAp6E,KAAA0oH,MAAAjkF,OAAAnmC,EAAA,EACA,SAKA2mH,EAAA3oH,UAAAwsH,+BAAA,SAAA//D,GACA,GAAAzqD,GACA6qH,EAAAnpH,KAAA+jH,gBAEA,KAAAzlH,EAAA,EAAaA,EAAA0B,KAAA0oH,MAAArqH,OAAuBC,IACpC,GAAA0B,KAAA0oH,MAAApqH,GAAAyqD,kBAAA,CACA/oD,KAAA+jH,iBAAA/jH,KAAA0oH,MAAApqH,GACA0B,KAAA2oH,cAAAvuC,UAAAp6E,KAAAgpH,yBACA,OAIAG,GACAA,EAAAb,WAAA,GAEAtoH,KAAA+jH,iBAAAuE,WAAA,GACAn6D,EAAAhtC,OAAAnhB,KAAA2oH,cAAA,yCAGA1D,EAAA3oH,UAAAw2G,qBAAA,WACA,OAAA9yG,KAAA+jH,kBAAA/jH,KAAAkyG,MAAAxF,eACAxwE,EAAAgB,OAAA,GAAAktE,GAAAx/D,EAAA49D,0BAGAtsE,EAAAhV,QAAAlnB,KAAA+jH,iBAAAh7D,gBAGAk8D,EAAA3oH,UAAAsvG,sBAAA,WACA,GAAAttG,GACAooF,EAAA1mF,KAAAkyG,MAAA5E,mBAQA,KANAttG,KAAA0oH,MAAArrH,QAAA,SAAA+c,GACAA,EAAAmzB,aAGAvtC,KAAA0oH,SAEApqH,EAAAooF,EAAAroF,OAAA,EAAqCC,GAAA,EAAQA,IAC7C0B,KAAA6oH,kBAAAniC,EAAApoF,KAIA3M,EAAAC,QAAAqzH,IAEGnQ,eAAA,IAAA6P,qCAAA,IAAAV,sBAAA,IAAAr2E,iBAAA,IAAAg3E,cAAA,IAAAwE,wBAAA,IAAApyD,wBAAA,KAAoLqyD,KAAA,SAAAluF,EAAAxpC,EAAAC,GACvL,YAUA,SAAAszH,KACArB,EAAAj6G,MAAA5J,KAAA6J,WAEA7J,KAAAquE,cAXA,GAAA1jC,GAAAxP,EAAA,oBACAo5E,EAAAp5E,EAAA,sCACA0oF,EAAA1oF,EAAA,eAEA0rE,EAAA1rE,EAAA,gBAAA0rE,gBAUAqe,GAAA5oH,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WACA4oH,EAAA5oH,UAAAuc,YAAAqsG,EACAA,EAAA/a,GAAA+a,EAAA5oH,UAAA6tG,GAAA,UAEA+a,EAAA5oH,UAAA+xE,YAAA,WACAruE,KAAA48B,UAAA58B,KAAAgtD,eAAA,6BACAhtD,KAAAssD,YAEAtsD,KAAAkyG,MAAAhH,wBAAA7tG,QAAA,SAAAisH,GACAtpH,KAAAupH,kBAAAD,IACG5yG,KAAA1W,QAGHklH,EAAA5oH,UAAAitH,kBAAA,SAAAD,GACA,GAAAE,GACA/W,EAAAx3G,SAAAiC,cAAA,OACAgrH,EAxBA,0SAyBAxV,EAAA,WACA1yG,KAAAomH,SAAA/T,eAAAiX,GACAtpH,KAAAkyG,MAAA5F,oBAAAgd,GACA3+E,EAAAgC,UAAA3sC,KAAAsqC,OAAA,YAAAu8D,EAAAyiB,KACG5yG,KAAA1W,KAMH,QAJAyyG,EAAA9uE,UAAA,sCAAA2lF,EACA7W,EAAAz1E,aAAA,gBACAy1E,EAAAz1E,aAAA,iBAEAssF,GACA,IAAAziB,GAAAp7D,SACA+9E,EAAAxpH,KAAAmyG,QAAA,aACA+V,IAAA//E,QAAA,wBACA,MACA,KAAA0+D,GAAAzqC,KACAotD,EAAAxpH,KAAAmyG,QAAAyJ,KACAsM,IAAA//E,QAAA,0BACA+/E,IAAA//E,QAAA,yCACA,MACA,KAAA0+D,GAAA5qD,UACAutE,EAAAxpH,KAAAmyG,QAAA,cACA+V,IAAA//E,QAAA,yBACA,MACA,KAAA0+D,GAAApqD,OACA+sE,EAAAxpH,KAAAmyG,QAAA0J,OACAqM,IAAA//E,QAAA,sBACA,MACA,KAAA0+D,GAAAC,aACA0iB,EAAAxpH,KAAAmyG,QAAA,iBACA+V,IAAA//E,QAAA,4BACA,MACA,KAAA0+D,GAAA7rD,MACAwuE,EAAAxpH,KAAAmyG,QAAApmB,MACAm8B,IAAA//E,QAAA,sBAMA+/E,IAAA//E,QAAA,iBAAAnoC,KAAAypH,qBAAAD,IACAtB,IAAA//E,QAAA,iBAAAqhF,GACAtB,IAAA//E,QAAA,kBAEAsqE,EAAAr4B,UAAA8tC,EAEA3T,EAAA9B,EAAAC,GAEA1yG,KAAA48B,UAAAO,YAAAs1E,GACAzyG,KAAAssD,SAAAg9D,IACA7W,MACAC,iBAIAwS,EAAA5oH,UAAAmtH,qBAAA,SAAAC,GACA,MAAA1pH,MAAAmyG,QAAAoG,WAAApwE,QAAA,oBAA2DuhF,IAG3D/3H,EAAAC,QAAAszH,IAEGpQ,eAAA,IAAA6P,qCAAA,IAAAn3E,mBAAA,IAAAo3E,cAAA,MAAqG+E,KAAA,SAAAxuF,EAAAxpC,EAAAC,IACxG,SAAAspC,IAAmB,WACnB,YAYA,SAAA0uF,KACA/F,EAAAj6G,MAAA5J,KAAA6J,WAXA,GAAAo9B,GAAA9L,EAAA,oBAAA8L,OACA48E,EAAA1oF,EAAA,gBACA0uF,EAAA1uF,EAAA,2BACAivE,EAAAjvE,EAAA,0BACAqmC,EAAArmC,EAAA,sBACAe,EAAAf,EAAA,qBACA0rE,EAAA1rE,EAAA,mBAAA0rE,gBAQA+iB,GAAAttH,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WACAstH,EAAAttH,UAAAuc,YAAA+wG,EACAA,EAAAzf,GAAAyf,EAAAttH,UAAA6tG,GAAAtD,EAAAp7D,SAEAm+E,EAAAttH,UAAAu1C,WAAA,WACA,GAAAzoB,GAAAppB,IAOA,OALAopB,GAAA0gG,sBAAA7iF,KAAwC7d,EAAA8oF,MAAA9I,sBAAA39D,UACxCriB,EAAA2gG,uBAAA3gG,EAAA0gG,sBAAAC,wBAdA,QAgBA3gG,GAAA0gG,sBAAAC,uBAEAF,EAAA/wG,QAA4BwxB,OAAAtqC,KAAAsqC,SAAoBlE,KAAA,SAAAoI,GAChDplB,EAAA4gG,UAAA5gG,EAAA4jC,eAAA,oBAEA5jC,EAAAolB,mBAEAplB,EAAA4gG,UAAAC,QAAA7gG,EAAA8gG,kBAAAxzG,KAAA0S,GACAA,EAAA4gG,UAAAptH,MAAA,2BAAAwsB,EAAA8oF,MAAA9I,sBAAA39D,SAAA0+E,aAAA,QAEA/gG,EAAA8oF,MAAAjE,qBAAA2b,EAAAzf,MACGxkE,MAAA,SAAA/wB,GACHwU,EAAA8oF,MAAAhE,uBACA9zF,KAAAgP,EAAA+gF,GACAxrF,MAAA,GAAAyrF,GAAAx1F,QAKAg1G,EAAAttH,UAAA4tH,kBAAA,WACA,GACA39E,GAAA69E,EADAhhG,EAAAppB,IAGA,QAAAA,KAAAqqH,qBAIArqH,KAAAqqH,oBAAA,EAEA99E,EAAAvsC,KAAAwuC,iBAAAlD,qBAAAtrC,KAAA8pH,sBAAAv+E,gBACA6+E,EAAA,GAAAlvF,GAAAovF,gBAAAlhG,EAAA2gG,uBAAAx9E,GAEA69E,EAAAG,mBAAA,SAAAjmF,GACAlb,EAAAolB,iBAAAzC,mBACAC,cAAA1H,EAAA0H,cACAM,YAAAljB,EAAA0gG,sBAAAx9E,cACKlG,KAAA,SAAAokF,GACLJ,EAAAK,2BAAAD,KACK7kF,MAAA,SAAA+kF,GACLthG,EAAA8oF,MAAA9D,YAAAsc,GACAthG,EAAAihG,oBAAA,EACAD,EAAAO,WAIAP,EAAAQ,oBAAA,SAAAtmF,GACAlb,EAAAolB,iBAAAxB,UACAnxB,MAAAyoB,EAAAi2C,QAAA1+D,QACKuqB,KAAA,SAAAijB,GACLjgC,EAAAihG,oBAAA,EACAD,EAAAS,gBAAA3vF,EAAAovF,gBAAAQ,gBACAzhE,EAAAumD,eAAAtrE,EAAAi2C,QACAnxD,EAAA8oF,MAAA1G,iBAAAniD,KACK1jB,MAAA,SAAAolF,GACL3hG,EAAA8oF,MAAA9D,YAAA2c,GACA3hG,EAAAihG,oBAAA,EACAD,EAAAS,gBAAA3vF,EAAAovF,gBAAAU,mBAIAZ,EAAAa,SAAA,WACA7hG,EAAAihG,oBAAA,GAGAD,EAAAc,SAEA,IAGAtB,EAAAttH,UAAA60G,oBAAA,SAAAl4F,EAAAle,GACAiF,KAAA8pH,sBAAA7wG,GAAAle,GAGA6uH,EAAA1f,UAAA,SAAAz2F,GACA,GAGA03G,GAHAjgF,EAAAz3B,EAAA62B,OAAAW,mBAAAC,qBACAkgF,EAAAlgF,EAAAC,aAAA/3B,QAAAK,EAAA21F,sBAAA39D,UACAs+E,EAAAt2G,EAAA21F,sBAAA39D,UAAAh4B,EAAA21F,sBAAA39D,SAAAs+E,sBAKA,OAFAA,MA/FA,EAiGAqB,GAIAD,EAAAjwF,EAAAovF,iBAAA9oD,YAEA2pD,GAIAjwF,EAAAovF,gBAAAe,gBAAAtB,GAIA7tF,EAAAhV,QAAA9T,QAAA8nB,EAAAovF,gBAAAgB,oBAPApvF,EAAAhV,SAAA,IANAgV,EAAAhV,SAAA,IAgBAv1B,EAAAC,QAAAg4H,IAECptH,KAAAwD,QAAaxD,KAAAwD,SAAA,KAAAk7B,IAAA,mBAAA9R,WAAA,mBAAAnpB,qBACX4kD,kBAAA,IAAAlL,mBAAA,IAAA4xE,yBAAA,IAAAC,qBAAA,IAAAh1D,oBAAA,IAAAi1D,eAAA,IAAAC,0BAAA,KAA2KC,KAAA,SAAAxwF,EAAAxpC,EAAAC,IAC9K,SAAAspC,IAAmB,WACnB,YAmBA,SAAA0wF,KACA/H,EAAAj6G,MAAA5J,KAAA6J,WAlBA,GAeAgiH,GAfAlhF,EAAAxP,EAAA,uBACA8L,EAAA9L,EAAA,oBAAA8L,OACA6b,EAAA3nB,EAAA,+BACA0oF,EAAA1oF,EAAA,gBACA2wF,EAAA3wF,EAAA,iCACAivE,EAAAjvE,EAAA,0BACAya,EAAAza,EAAA,mBACAqW,EAAArW,EAAA,2BACA60E,EAAA70E,EAAA,sBAAA+hF,qBACAhhF,EAAAf,EAAA,qBAGA4wF,GAAA,uBASAH,GAAAtvH,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WAEAsvH,EAAAtvH,UAAAu1C,WAAA,WAsFA,QAAAu8D,GAAAx5F,GACAo3G,EACA5iG,EAAA8oF,MAAA9D,YAAAx5F,IAEAwU,EAAA8oF,MAAAhE,uBACA9zF,KAAAgP,EAAA+gF,GACAxrF,MAAA/J,IAEA3K,aAAAgiH,IA7FA,GAAAA,GACAC,EAAA94G,QAAApT,KAAAmsH,iBACAH,GAAA,EACA5iG,EAAAppB,KACAosH,EAAAF,EAAA,wBACAG,EAAArsH,KAAAkyG,MAAA9I,sBAAAgjB,GACAE,EAAA,uBAAAtsH,KAAAkyG,MAAA/I,WAWA,OATAnpG,MAAAqsH,oBAAAplF,KAAsColF,GAEtCJ,EAAAjiH,WAAA,WACAof,EAAA8oF,MAAAhE,uBACA9zF,KAAAgP,EAAA+gF,GACAxrF,MAAA,GAAAyrF,GAAA,+CA1BA,KA8BA0hB,EAAAhzG,QAA0BwxB,OAAAtqC,KAAAsqC,SAAoBlE,KAAA,SAAAmmF,GAC9C,GAAAC,GACAC,EAAA,sCACA/4E,EAAA,eAAAtqB,EAAAkhB,OAAAW,mBAAAC,qBAAAwI,YAAA,uBACAp5B,EAAA8O,EAAA8oF,MAAA9I,sBAAA9uF,MAyDA,OAvDA8O,GAAAmjG,iBAEAnjG,EAAAijG,oBAAAn8C,YAAA98D,QAAA84G,GACAM,GACAh8F,IAAAkjB,EACA92C,MAAAwsB,EAAAijG,oBAAAlC,gBACAuC,OAAAtjG,EAAAijG,oBAAAK,OACAnyC,QAAA,WACA,MAAAgyC,GAAA78C,cAAAtmD,EAAAijG,qBAAA1mF,MAAAyoE,IAEAue,YAAA,SAAA1kH,GAKA,GAAA2kH,GAAAxjG,EAAAijG,oBAAAj6C,QAAA,IAAAhpD,EAAAijG,oBAAAj6C,MAAAy6C,WAMA,OAJAD,KACA3kH,EAAAmqE,OAAA,GAGAm6C,EAAAj7C,gBAAArpE,GAAAm+B,KAAA,SAAA0mF,GACAF,GAAA,UAAAxjG,EAAAijG,oBAAAz8C,MAAAxmD,EAAA8oF,MAAA7I,kBACAyjB,EAAAle,SAAA,GAEAxlF,EAAA8oF,MAAA1G,iBAAAshB,KACSnnF,MAAAyoE,IAET2e,QAAA3e,GAGA9zF,OAAA01F,KACA5mF,EAAAijG,oBAAA/xG,SACAkyG,EAAAlyG,UAEAkyG,EAAAQ,SACAC,eAGAvyH,OAAAusB,KAAAiU,EAAAuhB,OAAAywE,SAAA7vH,QAAA,SAAA4b,GACA,WAAAA,GAAA,WAAAA,GAGAuzG,EAAAQ,QAAAC,WAAAj2G,KAAAkkB,EAAAuhB,OAAAywE,QAAAj0G,MAGAizG,GACAO,EAAA,6CACAD,EAAA5vH,MAAAuiB,MAAA,UAEAqtG,EAAAQ,QAAAC,WAAAj2G,KAAAkkB,EAAAuhB,OAAAywE,QAAAC,QAGAV,EAAAH,EAAA,IAAAG,EAEAvxF,EAAAuhB,OAAA2wE,OAAAC,OAAAb,EAAAC,GAAArmF,KAAA,WACAhd,EAAA8oF,MAAAjE,qBAAAme,GACAJ,GAAA,EACA/hH,aAAAgiH,OAEGtmF,MAAAyoE,IAeHwd,EAAAtvH,UAAAw2G,qBAAA,WAGA,MAFA9yG,MAAAkyG,MAAA9D,YAAA,0BAEAyV,EAAAvnH,UAAAw2G,qBAAAt2G,KAAAwD,OAGA4rH,EAAAtvH,UAAA60G,oBAAA,SAAAl4F,EAAAle,IACA,IAAAgxH,EAAAjuH,QAAAmb,KACAjZ,KAAAqsH,oBAAApzG,GAAAle,IAIA6wH,EAAA1hB,UAAA,SAAAz2F,GACA,GAAAy3B,GAAAz3B,EAAA62B,OAAAW,mBAAAC,qBACAoiF,EAAA75G,EAAA21F,sBAAA3sD,QAAAhpC,EAAA21F,sBAAAtC,YAEA,OAAA57D,GAAAwR,cAIAoG,EAAA1T,SAAA0T,EAAAwV,UACA3tB,EAAAgC,UAAAl5B,EAAA62B,OAAA72B,EAAA85G,OAAA,sCAEArxF,EAAAhV,SAAA,IAGAgU,EAAAuhB,QAAAvhB,EAAAuhB,OAAA2wE,OACAlxF,EAAAhV,SAAA,GAGA2kG,IAIAA,EAAAr6E,EAAAhW,YACAqB,IAAA+Y,EAAA+yD,mBACA91F,GAAA+iC,EAAAizD,0BACAlsE,gBACA6wF,YAAAF,EAAAG,UAnJA,UAqJGrnF,KAAA,WACH,MAAAlK,GAAAhV,SAAA,KACGye,MAAA,WACH,MAAAzJ,GAAAhV,SAAA,KACGkf,KAAA,SAAAz8B,GAGH,MAFAkiH,GAAA,KAEA3vF,EAAAhV,QAAAvd,MA9BAuyB,EAAAhV,SAAA,IAoCAv1B,EAAAC,QAAAg6H,IAECpvH,KAAAwD,QAAaxD,KAAAwD,SAAA,KAAAk7B,IAAA,mBAAA9R,WAAA,mBAAAnpB,qBACX4kD,kBAAA,IAAAiR,sBAAA,IAAAnc,mBAAA,IAAA+zE,8BAAA,IAAAnC,yBAAA,IAAA/0D,oBAAA,IAAAm3D,qBAAA,IAAAlC,eAAA,IAAA3X,0BAAA,EAAA8Z,gCAAA,MAA0QC,KAAA,SAAA1yF,EAAAxpC,EAAAC,GAC7Q,YAsBA,SAAAk8H,KACAjK,EAAAj6G,MAAA5J,KAAA6J,WAmlBA,QAAAkkH,KACA,GAAAC,GAAA/yH,SAAAgzH,eAAAhzH,SAAAgzH,cAAAp7G,EAGA,OAFA5X,UAAAgzH,wBAAA1uB,qBAAA,IAAAyuB,EAAAlwH,QAAA,0BAKA,QAAAowH,GAAAzW,GACA,MAAAA,GAAAtvE,QAAA,2BAAAz1B,cAGA,QAAAy7G,GAAA1W,GACA,MAAAA,GAAA,GAAAhyD,cAAAgyD,EAAA7kE,OAAA,GAGA,QAAAw7E,GAAAj9G,GACAzW,OAAAusB,KAAA9V,GAAA9T,QAAA,SAAAT,GACA,GAAAyxH,GAAAH,EAAAtxH,EAEAuU,GAAAk9G,GAAAl9G,EAAAvU,KAIA,QAAA0xH,GAAAlsE,GACA,GAAAmsE,GAAAte,IAAA,OAEA,OAAA5zG,OAAA+lD,EAAA,GAAApe,KAAAuqF,GAGA,QAAAC,KACA,GAAAC,GAAAH,EAAA,EAEA,QAAAG,SAAAzqF,KAAA,KAxoBA,GAAAiD,GAAA9L,EAAA,oBAAA8L,OAEA48E,EAAA1oF,EAAA,gBACAgzB,EAAAhzB,EAAA,yBACAya,EAAAza,EAAA,mBACAivE,EAAAjvE,EAAA,0BACAuzF,EAAAvzF,EAAA,+BACA80E,EAAA90E,EAAA,sBACAwzF,EAAAxzF,EAAA,+BACAe,EAAAf,EAAA,qBAIA08E,GACA,QAEA,qBACA,eAOAiW,GAAAxxH,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WACAwxH,EAAAxxH,UAAAuc,YAAAi1G,EACAA,EAAA3jB,GAAA2jB,EAAAxxH,UAAA6tG,GAAAv0D,EAAAixD,iBAAAzqC,KAEA0xD,EAAAxxH,UAAAu1C,WAAA,WACA,GAAA+8E,GAAAC,EAAAC,EACAC,EAAA/uH,KAAAgtD,eAAA,+BACAgiE,EAAAhvH,KAAAgtD,eAAA,kBAqDA,OAhDAhtD,MAAAkyG,MAAA9I,sBAAAhtC,OAAA,IAAAp8D,KAAAkyG,MAAA9I,sBAAAhtC,KACAp8D,KAAAopG,sBAAAppG,KAAAkyG,MAAA9I,sBAAAhtC,KAEAp8D,KAAAopG,yBAEAppG,KAAAopG,sBAAAh3B,MAAApyE,KAAAopG,sBAAAh3B,UACApyE,KAAAivH,kBAAA77G,QAAApT,KAAAopG,sBAAA5pD,gBACAx/C,KAAAkvH,uBAAAlvH,KAAAivH,oBAAA,IAAAjvH,KAAAopG,sBAAA5pD,eAAA2vE,SACAL,EAAA9uH,KAAAovH,+BAEAJ,EAAA50C,UAnCA,qzEAoCAp6E,KAAAqvH,4BAEArvH,KAAAsvH,OAAAR,EAAA1nG,OAAAi7B,IACAriD,KAAAuvH,cAAAvvH,KAAAgtD,eAAA,mBACAhtD,KAAAwvH,eAAAxvH,KAAAgtD,eAAA,oBACAhtD,KAAAyvH,kBAAAzvH,KAAAgtD,eAAA,wBACAhtD,KAAA0vH,QAAA1vH,KAAAgtD,eAAA,YACAhtD,KAAA2vH,WAAA3vH,KAAAgtD,eAAA,gBACAhtD,KAAA4vH,mBAAA5vH,KAAAgtD,eAAA,wBACAhtD,KAAA2gD,eAEA3gD,KAAAivH,mBACAF,EAAAhyH,WAAAC,YAAA+xH,GAGA/uH,KAAAsvH,SACAV,EAAA5uH,KAAAgtD,eAAA,mBACA4hE,EAAA7xH,WAAAC,YAAA4xH,IAGAE,EAAA1nG,OAAAuyC,aACAk1D,EAAA7uH,KAAAgtD,eAAA,2BACA6hE,EAAA9xH,WAAAC,YAAA6xH,IAGA7uH,KAAAkyG,MAAA7I,kBAAA,IAAArpG,KAAAopG,sBAAAh3B,MAAAy9C,wBACA1hE,EAAAhtC,OAAAnhB,KAAAgtD,eAAA,8CAOA,IAAAhtD,KAAAopG,sBAAAh3B,MAAA09C,YACA9vH,KAAAuvH,cAAA/7G,SAAA,GAGAk7G,EAAA51G,OAAAg2G,GAAA1oF,KAAA,SAAA2pF,GACA/vH,KAAA+vH,uBACA/vH,KAAA+vH,qBAAAn/F,GAAA,OAAA5wB,KAAAgwH,aAAAt5G,KAAA1W,OACAA,KAAA+vH,qBAAAn/F,GAAA,iBAAA5wB,KAAAiwH,uBAAAv5G,KAAA1W,OACAA,KAAA+vH,qBAAAn/F,GAAA,QAAA5wB,KAAAkwH,cAAAx5G,KAAA1W,OACAA,KAAA+vH,qBAAAn/F,GAAA,WAAA5wB,KAAAmwH,iBAAAz5G,KAAA1W,OACAA,KAAA+vH,qBAAAn/F,GAAA,iBAAA5wB,KAAAowH,uBAAA15G,KAAA1W,OAEA63G,EAAAx6G,QAAA,SAAA2jF,GACAhhF,KAAA+vH,qBAAAn/F,GAAAowD,EAAA,SAAA18C,GACAtkC,KAAAkyG,MAAAxtE,MAAA,QAAAs8C,EAAA18C,IACO5tB,KAAA1W,QACF0W,KAAA1W,OAELA,KAAAkyG,MAAAjE,qBAAA6f,EAAA3jB,KACGzzF,KAAA1W,OAAA2lC,MAAA,SAAA/wB,GACH5U,KAAAkyG,MAAAhE,uBACA9zF,KAAApa,KAAAmqG,GACAxrF,MAAA/J,KAEG8B,KAAA1W,QAGH8tH,EAAAxxH,UAAA+zH,sBAAA,WACArwH,KAAAswH,eACAtwH,KAAAkyG,MAAA9F,6BACAC,cAAArsG,KAAAuwH,gBACA9/G,KAAAmlC,EAAAmxD,mBAAA3qC,QAKA0xD,EAAAxxH,UAAA8yH,6BAAA,WACA,GAAAxzE,GAAA57C,KAAAsqC,OAAAW,mBAAAC,qBAAA0Q,WACA40E,GAAA,IAAA50E,EAAA99C,QAAA,OACA2yH,GAAA,IAAA70E,EAAA99C,QAAA,eACAmrD,EAAAjpD,KAAAopG,sBAAAngD,UACAx1C,GACA62B,OAAAtqC,KAAAsqC,OACAljB,QACAo4B,gBACA5iB,UAAA58B,KAAA0wH,mBAAA,mBACAn7D,YAAAv1D,KAAAmyG,QAAAiJ,2BAEAh5D,QACAxlB,UAAA58B,KAAA0wH,mBAAA,UACAn7D,YAAAi5D,KAEAtsE,gBACAtlB,UAAA58B,KAAA0wH,mBAAA,cACAn7D,YAAAv1D,KAAAmyG,QAAAoJ,2BAEAl5D,KACAzlB,UAAA58B,KAAA0wH,mBAAA,OACAn7D,YAAA+4D,EAAA,IAEA30D,YACA/8B,UAAA58B,KAAA0wH,mBAAA,iBAGAv/G,QACAjT,OACAyyH,YAAA,OACAC,cAAA,oJACAC,MAAA,QAEAC,UACAD,MAAA,SAEAE,+BACAF,MAAA,WAEAG,qBACAH,MAAA,WAEAI,sBACAJ,MAAA,WAEAK,2BACAL,MAAA,WAEAM,oBACAN,MAAA,gBAiBA,OAZA7wH,MAAAivH,yBACAx7G,GAAA2T,OAAAo4B,eAGAgxE,SACA/8G,GAAA2T,OAAAi7B,IAGAouE,SACAh9G,GAAA2T,OAAAuyC,WAGA1Q,GAEAA,EAAA7hC,SACA6hC,EAAA7hC,OAAAi7B,SAAA,KAAA4G,EAAA7hC,OAAAi7B,IAAAkT,cACAv1D,KAAAoxH,0BAAA,GAGA12H,OAAAusB,KAAAgiC,EAAA7hC,QAAA/pB,QAAA,SAAA+jD,GACA,YAAAA,GAAA,eAAAA,IAAA,OAAA6H,EAAA7hC,OAAAg6B,GAGA,kBAFA3tC,GAAA2T,OAAAg6B,EAKA3tC,GAAA2T,OAAAg6B,IAIAna,EAAAxzB,EAAA2T,OAAAg6B,GAAA6H,EAAA7hC,OAAAg6B,IACAxwC,SAAA6C,EAAA2T,OAAAg6B,GAAAxwC,cAKAq4C,EAAA93C,QACAzW,OAAAusB,KAAAgiC,EAAA93C,QAAA9T,QAAA,SAAAT,GACA,cAAAqsD,EAAA93C,OAAAvU,cACA6W,GAAAtC,OAAAvU,GAGO,gBAAAqsD,GAAA93C,OAAAvU,QAEP6W,EAAAtC,OAAAvU,GAAAqsD,EAAA93C,OAAAvU,KAKAwxH,EAAAnlE,EAAA93C,OAAAvU,IACA6W,EAAAtC,OAAAvU,GAAA6W,EAAAtC,OAAAvU,WAEAqqC,GAAAxzB,EAAAtC,OAAAvU,GAAAqsD,EAAA93C,OAAAvU,OAIA6W,GA5CmBA,GA+CnBq6G,EAAAxxH,UAAAi0H,cAAA,SAAAc,GACA,GAAAj1D,GAAAxc,EAAAuhB,EACA3S,GAAA,EACA1S,EAAA97C,KAAAsqC,OAAAW,mBAAAC,qBAAAmI,YAAAyI,kBAEA,SAAA97C,KAAA+vH,uBAIA5uD,EAAAnhE,KAAA+vH,qBAAAl6D,WAEAn7D,OAAAusB,KAAAk6C,EAAA/5C,QAAA/pB,QAAA,SAAA4b,GACA,GAAAmoC,GAAA+f,EAAA/5C,OAAAnO,IAEAo4G,GAAA7iE,KAMApN,EAAA+Q,QACAnyD,KAAAkvH,wBAAA,mBAAAj2G,GAGAu1C,GAAA,EAEA6iE,GACArxH,KAAAsxH,eAAAr4G,EAAAjZ,KAAAmyG,QAAA,gBAAAgc,EAAAl1G,MALAu1C,GAAA,EAQKpN,EAAAoN,UACLA,GAAA,EAEA6iE,GACArxH,KAAAsxH,eAAAr4G,EAAAjZ,KAAAmyG,QAAA,kBAAAgc,EAAAl1G,QAGGvC,KAAA1W,OAEHmhE,EAAA/5C,OAAAg7B,OAAAoM,UACA4N,EAAA+E,EAAAvS,MAAA,GACAhP,EAAAwc,GAAAxmB,EAAAqyD,uBAAA7rC,EAAA3rD,MACAmvC,IAAA,IAAA9D,EAAAh+C,QAAA8hD,KAGA4O,GAAA,EAEA6iE,GACArxH,KAAAsxH,eAAA,SAAAtxH,KAAAmyG,QAAAyI,4BAKApsD,IAGAs/D,EAAAxxH,UAAAwnH,iBAAA,WAGA,GAFA9jH,KAAAuwH,gBAGA,OACA9/G,KAAAmlC,EAAAmxD,mBAAA3qC,OAKA0xD,EAAAxxH,UAAA0wC,SAAA,WACA,GAAAukF,GACAnoG,EAAAppB,KACAmhE,EAAA/3C,EAAA2mG,qBAAAl6D,WACAic,GACAM,MAAApyE,KAAAwxH,eAKA,OAFAxxH,MAAAkyG,MAAA7D,aAEAruG,KAAAuwH,eAAA,KAOAvwH,KAAAkvH,wBAAA/tD,EAAA/5C,OAAAo4B,gBAAA2hB,EAAA/5C,OAAAo4B,eAAA2S,UACA2f,EAAA2/C,iBAAA/2H,OAAAusB,KAAAk6C,EAAA/5C,QAAAxpB,OAAA,SAAAwjD,GACA,yBAAAA,KAIAh4B,EAAAknG,eAAA,EAEAlnG,EAAA2mG,qBAAA/iF,SAAA8kC,GAAA1rC,KAAA,SAAAijB,GAaA,OAZA,IAAAjgC,EAAAggF,sBAAAsoB,8BAGAh3H,OAAAusB,KAAAk6C,EAAA/5C,QAAA/pB,QAAA,SAAA+jD,GACAh4B,EAAA2mG,qBAAAv6D,MAAApU,KAIAh4B,EAAAooG,iBACAnoE,EAAAulD,SAAA,GAGA,GAAA1yE,GAAA,SAAAhV,GACAqqG,EAAA,WAGAvnH,WAAA,WACAof,EAAA8oF,MAAA1G,iBAAAniD,GACAniC,EAAAmiC,GACA8E,EAAAhtC,OAAAiI,EAAAlqB,QAAA,+BACS,IAGTyvH,EAAAxW,gBAAA/uF,EAAAlqB,QAAA,aAAAqyH,GAEAvnH,WAAA,WACAof,EAAAmlF,kBACAnlF,EAAAknG,eAAA,GACO16E,EAAA8yD,sCAEPv6C,EAAAzlC,IAAAU,EAAAlqB,QAAA,kCAEGymC,MAAA,SAAA/wB,GASH,MARAwU,GAAAknG,eAAA,EAKAlnG,EAAA8oF,MAAA9D,YAAAx5F,GACAwU,EAAAmlF,kBAEAryE,EAAAgB,OAAA,GAAAktE,IACAtzF,QAAA8+B,EAAAhL,OAAA49D,wBACAwJ,kBAAAp9F,SA1DAwU,EAAA8oF,MAAA9D,YAAA,kCACAhlF,EAAAmlF,kBAEAryE,EAAAgB,OAAA,GAAAktE,GAAAx0D,EAAAhL,OAAA49D,4BA4DAslB,EAAAxxH,UAAAg1H,eAAA,SAAAlwE,EAAA2T,GACA,GAAA9T,GACA0wE,EAAA3xH,KAAAgtD,eAAAkhE,EAAA9sE,GAAA,gBACAljD,EAAAyzH,EAAA59G,cAAA,QAEA/T,MAAA2gD,YAAAnlD,eAAA4lD,KACAphD,KAAA2gD,YAAAS,GAAAphD,KAAAgtD,eAAAkhE,EAAA9sE,GAAA,iBAGA+M,EAAAzlC,IAAAipG,EAAA,0CAEA1wE,EAAAjhD,KAAA2gD,YAAAS,GACAH,EAAAm5B,UAAArlB,EAEA72D,EACAA,EAAA8+B,aAAA,oBAEAh9B,KAAA+vH,qBAAA/yF,cACAokB,QACAgJ,UAAA,eACArvD,OAAA,IAEAiF,KAAA+vH,qBAAA56D,YACA/T,QACAtqC,QAAAi+C,MAKA+4D,EAAAxxH,UAAAs1H,eAAA,SAAAxwE,GACA,GAAAuwE,GAAA3xH,KAAAgtD,eAAAkhE,EAAA9sE,GAAA,gBACAljD,EAAAyzH,EAAA59G,cAAA,QAEA/T,MAAA2gD,YAAAnlD,eAAA4lD,KACAphD,KAAA2gD,YAAAS,GAAAphD,KAAAgtD,eAAAkhE,EAAA9sE,GAAA,iBAGA+M,EAAAhtC,OAAAwwG,EAAA,0CAEAzzH,EACAA,EAAA8pC,gBAAA,iBAEAhoC,KAAA+vH,qBAAA/nF,iBACAoZ,QACAgJ,UAAA,iBAEApqD,KAAA+vH,qBAAA56D,YACA/T,QACAtqC,QAAA,OAKAg3G,EAAAxxH,UAAAixC,SAAA,WACA,MAAAvtC,MAAA+vH,qBAAAxiF,YAGAugF,EAAAxxH,UAAAk1H,aAAA,WACA,OAAAxxH,KAAAkyG,MAAA7I,iBAAArpG,KAAAuvH,cAAA/7G,SAGAs6G,EAAAxxH,UAAAo0H,mBAAA,SAAAtvE,GAOA,MAJA,eAAAA,IACAA,EAAA,mBAGAphD,KAAAgtD,eAAA5L,EAAA,gBAAArtC,cAAA,kCAGA+5G,EAAAxxH,UAAA0zH,aAAA,SAAA1rF,GACA,GAAA8c,GAAA9c,EAAAld,OAAAkd,EAAA2pB,WACA0jE,EAAA3xH,KAAAgtD,eAAAkhE,EAAA5pF,EAAA2pB,WAAA,eAEAE,GAAAhtC,OAAAwwG,EAAA,2CAEAvwE,EAAAsN,oBACA1uD,KAAA4xH,eAAAttF,EAAA2pB,WAGAjuD,KAAA6xH,4BAAAvtF,EAAA2pB,UAAA7M,GACAphD,KAAAsxH,eAAAhtF,EAAA2pB,UAAAjuD,KAAAmyG,QAAA,gBAAAgc,EAAA7pF,EAAA2pB,aACG7M,EAAA+Q,SAAA/Q,EAAAoN,QAEA,WAAAlqB,EAAA2pB,WAAAjuD,KAAA8xH,qBAAAxtF,EAAAsqB,MAAA,KACH5uD,KAAAsxH,eAAA,SAAAtxH,KAAAmyG,QAAAyI,0BAFA56G,KAAAsxH,eAAAhtF,EAAA2pB,UAAAjuD,KAAAmyG,QAAA,kBAAAgc,EAAA7pF,EAAA2pB,aAKAjuD,KAAAkyG,MAAAxtE,MAAA,YAAAJ,GAEAt6B,WAAA,WAIAhK,KAAA6xH,4BAAAvtF,EAAA2pB,UAAA7M,IACAphD,KAAAsxH,eAAAhtF,EAAA2pB,UAAAjuD,KAAAmyG,QAAA,gBAAAgc,EAAA7pF,EAAA2pB,cAEGv3C,KAAA1W,MAAA,MAGH8tH,EAAAxxH,UAAA2zH,uBAAA,SAAA3rF,GACA,GAAAsb,GACAmyE,EAAA,iBACAC,EAAA,eACAC,EAAAjyH,KAAAmyG,QAAA+I,6BACAgX,EAAA5D,EAAA,GACA6D,EAAAnyH,KAAAgtD,eAAA,qBAEA,KAAA1oB,EAAAsqB,MAAAvwD,QACAuhD,EAAAtb,EAAAsqB,MAAA,GAAAn+C,KACAshH,EAAA,SAAAnyE,EACA,qBAAAA,IACAoyE,EAAA,gBACAC,EAAAjyH,KAAAmyG,QAAAgJ,4BACA+W,EAAA5D,EAAA,IAGAngE,EAAAzlC,IAAAypG,EAAA,iDAEAhkE,EAAAhtC,OAAAgxG,EAAA,gDAMA,WAAA7tF,EAAA2pB,WAAAjuD,KAAA8xH,qBAAAxtF,EAAAsqB,MAAA,KACA5uD,KAAA4xH,eAAAttF,EAAA2pB,WAGAjuD,KAAAyvH,kBAAAzyF,aAAA,aAAA+0F,GAEA/xH,KAAAsvH,SACAtvH,KAAA2vH,WAAA3yF,aAAA,aAAAg1F,GACAhyH,KAAA4vH,mBAAAx1C,UAAA63C,EAEAjyH,KAAAoxH,0BACApxH,KAAA+vH,qBAAA/yF,cACAokB,MAAA,MACAgJ,UAAA,cACArvD,MAAAm3H,KAKAlyH,KAAAkyG,MAAAxtE,MAAA,sBAAAJ,IAGAwpF,EAAAxxH,UAAA4zH,cAAA,SAAA5rF,GACA,GAAAqtF,GAAA3xH,KAAAgtD,eAAAkhE,EAAA5pF,EAAA2pB,WAAA,eAEAE,GAAAzlC,IAAAipG,EAAA,2CAEA3xH,KAAAkyG,MAAAxtE,MAAA,aAAAJ,IAGAwpF,EAAAxxH,UAAA6zH,iBAAA,SAAA7rF,GACAtkC,KAAA4xH,eAAAttF,EAAA2pB,WAEAjuD,KAAAkyG,MAAAxtE,MAAA,gBAAAJ,IAGAwpF,EAAAxxH,UAAA8zH,uBAAA,SAAA9rF,GACA,GAAAkqB,GACApN,EAAA9c,EAAAld,OAAAkd,EAAA2pB,UAGAO,GADA,WAAAlqB,EAAA2pB,WAAA3pB,EAAAsqB,MAAA,GACAxN,EAAAoN,SAAAxuD,KAAA8xH,qBAAAxtF,EAAAsqB,MAAA,IAEAxN,EAAAoN,QAGAL,EAAAjqB,OAAAkd,EAAAxkB,UAAA,+BAAA4xB,GAEApN,EAAAsN,oBACA1uD,KAAA4xH,eAAAttF,EAAA2pB,WAGAjuD,KAAAqwH,wBAEArwH,KAAAkyG,MAAAxtE,MAAA,sBAAAJ,IAGAwpF,EAAAxxH,UAAAw2G,qBAAA,WAGA,MAFA9yG,MAAAsuG,oBAEAtuG,KAAAgtC,YAGA8gF,EAAAxxH,UAAA0nH,YAAA,WACAhkH,KAAA+vH,uBAIA/lH,WAAA,WACAhK,KAAAivH,kBACAjvH,KAAA+vH,qBAAA5iE,MAAA,kBAEAntD,KAAA+vH,qBAAA5iE,MAAA,WAEGz2C,KAAA1W,MAAA,IAEHA,KAAAqwH,0BAGAvC,EAAAxxH,UAAA+yH,0BAAA,WACA,GAAAvzE,GAAA97C,KAAAsqC,OAAAW,mBAAAC,qBAAAmI,YAAAyI,kBAEAphD,QAAAusB,KAAA2uB,EAAAqyD,wBAAA5qG,QAAA,SAAA+0H,GACA,GAAAC,GACAC,EAAA18E,EAAAqyD,uBAAAmqB,IAEA,IAAAt2E,EAAAh+C,QAAAw0H,KACAD,EAAAryH,KAAAgtD,eAAAolE,EAAA,cACAjkE,EAAAzlC,IAAA2pG,EAAA,sBAEG37G,KAAA1W,QAGH8tH,EAAAxxH,UAAAw1H,qBAAA,SAAA11D,GACA,GAAAxc,GAAAwc,KAAA3rD,KACA6hH,EAAA18E,EAAAqyD,uBAAAroD,EAGA,YAFA5/C,KAAAsqC,OAAAW,mBAAAC,qBAAAmI,YAAAyI,mBAEAh+C,QAAAw0H,IAGAxE,EAAA5jB,UAAA,SAAAz2F,GACA,GAAAy3B,GAAAz3B,EAAA62B,OAAAW,mBAAAC,qBACAqnF,GAAA,IAAA9+G,EAAA21F,sBAAAhtC,IAEA,OAAAlgC,GAAAhV,SAAAqrG,GAAArnF,EAAAmI,YAAAyI,mBAAAz9C,OAAA,IAGAyvH,EAAAxxH,UAAAu1H,4BAAA,SAAAW,EAAApxE,GACA,QAAAA,EAAA+Q,YAIA,mBAAAqgE,IAAAxyH,KAAAkvH,yBAIAnB,MAsCAp8H,EAAAC,QAAAk8H,IAEGjpE,kBAAA,IAAAlL,mBAAA,IAAA4xE,yBAAA,IAAAkH,qBAAA,IAAAj8D,oBAAA,IAAAk8D,8BAAA,IAAAjH,eAAA,IAAAz0D,wBAAA,GAAA27D,8BAAA,KAA4OC,KAAA,SAAAz3F,EAAAxpC,EAAAC,IAC/O,SAAAspC,IAAmB,WACnB,YAWA,SAAA23F,KACAhP,EAAAj6G,MAAA5J,KAAA6J,WAmHA,QAAAipH,GAAAxoF,GACA,UAAApP,GAAA63F,OAAAn1G,SAAAq1B,IAAA+/E,gBACAt/E,YAAA,eAAApJ,EAAAW,mBAAAC,qBAAAwI,YAAA,sBA/HA,GAAAzM,GAAA9L,EAAA,oBAAA8L,OACA48E,EAAA1oF,EAAA,gBACA83F,EAAA93F,EAAA,gCACAivE,EAAAjvE,EAAA,0BACAya,EAAAza,EAAA,mBACAqW,EAAArW,EAAA,2BACAe,EAAAf,EAAA,qBACAwP,EAAAxP,EAAA,sBAMA03F,GAAAv2H,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WACAu2H,EAAAv2H,UAAAuc,YAAAg6G,EACAA,EAAA1oB,GAAA0oB,EAAAv2H,UAAA6tG,GAAAv0D,EAAAixD,iBAAA5qD,UAEA42E,EAAAv2H,UAAAu1C,WAAA,WACA,GACAqhF,GAAAzrE,EAAAjV,EADAppB,EAAAppB,IAyBA,OAtBAopB,GAAA+pG,uBAAAlsF,KAAyC7d,EAAA8oF,MAAA9I,sBAAAntD,WACzCwL,EAAAr+B,EAAA+pG,uBAAA1rE,iBACAjV,EAAAppB,EAAA+pG,uBAAA3gF,WAEA0gF,EAAAjsF,GACAmsF,WAAA,SACGhqG,EAAA+pG,uBAAAE,QACHC,QAAA,SAAAhvF,GACAA,EAAAuxE,iBAEAzsF,EAAAklF,oBAEAllF,EAAA4jB,WAAA5G,KAAA,WACAhd,EAAAmlF,6BAKAnlF,GAAA+pG,uBAAA1rE,uBACAr+B,GAAA+pG,uBAAA3gF,iBACAppB,GAAA+pG,uBAAAE,OAEAJ,EAAAn6G,QACAwxB,OAAAlhB,EAAAkhB,OACAmd,mBACAE,iBAAAnV,IACGpM,KAAA,SAAAmtF,GACHnqG,EAAAmqG,oBACAnqG,EAAAoqG,eAAAV,EAAA1pG,EAAAkhB,UACGlE,KAAA,WACHhd,EAAA4jC,eAAA,qBAEA7vB,YAAA/T,EAAAoqG,eAAAC,aAAAP,IAEA9pG,EAAA8oF,MAAAjE,qBAAA4kB,EAAA1oB,MACGxkE,MAAA,SAAA/wB,GACHwU,EAAA8oF,MAAAhE,uBACA9zF,KAAAgP,EAAA+gF,GACAxrF,MAAA,GAAAyrF,GAAAx1F,QAKAi+G,EAAAv2H,UAAA0wC,SAAA,WACA,GAEA4iE,GAFAxmF,EAAAppB,KACAuoD,EAAAn/B,EAAAmqG,kBAAAvqE,yBAAA5/B,EAAA+pG,uBAGA,OAAA/pG,GAAAoqG,eAAAE,gBAAAnrE,GAAAniB,KAAA,SAAA8G,GAGA,MAFA0iE,GAAA1iE,EAEA9jB,EAAAmqG,kBAAAnqE,cAAAlc,KACG9G,KAAA,SAAA0mF,GACHA,EAAAld,iBACAxmF,EAAA8oF,MAAA1G,iBAAAshB,KACGnnF,MAAA,SAAA/wB,GACH,GAAA++G,GAAA/+G,CAEA,wBAAAA,EAAAg/G,WACArrF,QAAA5pB,MAAA/J,GACA++G,EAAA,qBACK,iBAAA/+G,EAAAg/G,WAGL,WAFAjpF,GAAAgC,UAAAvjB,EAAAkhB,OAAA,qCAGK11B,GAAAg/G,YACLjpF,EAAAgC,UAAAvjB,EAAAkhB,OAAA,oCAGAlhB,EAAA8oF,MAAA9D,YAAAulB,MAIAd,EAAAv2H,UAAA60G,oBAAA,SAAAl4F,EAAAle,GACAiF,KAAAmzH,uBAAAl6G,GAAAle,GAGA83H,EAAA3oB,UAAA,SAAAz2F,GAGA,MAFAA,GAAA62B,OAAAW,mBAAAC,qBAEAgR,YAAA9oC,QAAAK,EAAA21F,sBAAAntD,WAIA/f,EAAAhV,UAAAkf,KAAA,WACA,MAAAlL,GAAA63F,QAAA73F,EAAA63F,OAAAn1G,UAAAsd,EAAA63F,OAAAn1G,SAAAq1B,KAAA/X,EAAA63F,OAAAn1G,SAAAq1B,IAAA+/E,eAOA92F,EAAAhV,UANAsqB,EAAAhW,YACA3oB,GAAA+iC,EAAAkzD,yBACAjsE,IAAA+Y,EAAAgzD,0BAKGxiE,KAAA,WAGH,MAFA0sF,GAAAr/G,EAAA62B,QAEAupF,cACA/qE,uBAAA,6BAEG1iB,KAAA,SAAAsG,GACH,MAAAt5B,SAAAs5B,EAAA/iC,UAnBAuyB,EAAAhV,SAAA,IA6BAv1B,EAAAC,QAAAihI,IAECr2H,KAAAwD,QAAaxD,KAAAwD,SAAA,KAAAk7B,IAAA,mBAAA9R,WAAA,mBAAAnpB,qBACX4kD,kBAAA,IAAAiR,sBAAA,IAAAnc,mBAAA,IAAA4xE,yBAAA,IAAA/0D,oBAAA,IAAAi1D,eAAA,IAAA3X,0BAAA,EAAAggB,+BAAA,KAA6MC,KAAA,SAAA54F,EAAAxpC,EAAAC,GAChN,YAEA,IAAAi1G,GAAA1rE,EAAA,mBAAA0rE,iBAEAl9F,IAEAA,GAAAk9F,EAAAp7D,UAAAtQ,EAAA,oBACAxxB,EAAAk9F,EAAAzqC,MAAAjhC,EAAA,eACAxxB,EAAAk9F,EAAA5qD,WAAA9gB,EAAA,qBACAxxB,EAAAk9F,EAAApqD,QAAAthB,EAAA,iBACAxxB,EAAAk9F,EAAAC,cAAA3rE,EAAA,wBACAxxB,EAAAk9F,EAAA7rD,OAAA7f,EAAA,gBAEAxpC,EAAAC,QAAA+X,IAEGk7C,kBAAA,IAAAmvE,mBAAA,IAAAC,cAAA,IAAAC,oBAAA,IAAAC,uBAAA,IAAAC,gBAAA,IAAAC,eAAA,MAAyJC,KAAA,SAAAn5F,EAAAxpC,EAAAC,GAC5J,YAOA,SAAA2iI,KACA3I,EAAAhiH,MAAA5J,KAAA6J,WAEA7J,KAAAmsH,iBAAA,EARA,GAAAllF,GAAA9L,EAAA,oBAAA8L,OACA/K,EAAAf,EAAA,qBACA0rE,EAAA1rE,EAAA,mBAAA0rE,iBACA+kB,EAAAzwF,EAAA,qBAQAo5F,GAAAj4H,UAAA5B,OAAAoe,OAAA8yG,EAAAtvH,WACAi4H,EAAAj4H,UAAAuc,YAAA07G,EACAA,EAAApqB,GAAAoqB,EAAAj4H,UAAA6tG,GAAAtD,EAAAC,aAEAytB,EAAArqB,UAAA,SAAAz2F,GACA,MAAAA,GAAA21F,sBAAAtC,aAIA8kB,EAAA1hB,UAAAjjE,GACAsmF,OAAAgH,EAAApqB,IACG12F,IALHyoB,EAAAhV,SAAA,IAOAv1B,EAAAC,QAAA2iI,IAEG1vE,kBAAA,IAAAlL,mBAAA,IAAA6c,oBAAA,IAAAg+D,qBAAA,MAA8FC,KAAA,SAAAt5F,EAAAxpC,EAAAC,GACjG,YAOA,SAAA8iI,KACA9I,EAAAhiH,MAAA5J,KAAA6J,WANA,GAAAo9B,GAAA9L,EAAA,oBAAA8L,OACA/K,EAAAf,EAAA,qBACA0rE,EAAA1rE,EAAA,mBAAA0rE,iBACA+kB,EAAAzwF,EAAA,qBAMAu5F,GAAAp4H,UAAA5B,OAAAoe,OAAA8yG,EAAAtvH,WACAo4H,EAAAp4H,UAAAuc,YAAA67G,EACAA,EAAAvqB,GAAAuqB,EAAAp4H,UAAA6tG,GAAAtD,EAAApqD,OAEAi4E,EAAAxqB,UAAA,SAAAz2F,GACA,MAAAA,GAAA21F,sBAAA3sD,OAIAmvE,EAAA1hB,UAAAjjE,GACAsmF,OAAAmH,EAAAvqB,IACG12F,IALHyoB,EAAAhV,SAAA,IAQAv1B,EAAAC,QAAA8iI,IAEG7vE,kBAAA,IAAAlL,mBAAA,IAAA6c,oBAAA,IAAAg+D,qBAAA,MAA8FG,KAAA,SAAAx5F,EAAAxpC,EAAAC,GACjG,YASA,SAAAgjI,KACA/Q,EAAAj6G,MAAA5J,KAAA6J,WARA,GAAAo9B,GAAA9L,EAAA,oBAAA8L,OACA48E,EAAA1oF,EAAA,gBACA05F,EAAA15F,EAAA,uBACAivE,EAAAjvE,EAAA,0BACAe,EAAAf,EAAA,qBACA0rE,EAAA1rE,EAAA,mBAAA0rE,gBAMA+tB,GAAAt4H,UAAA5B,OAAAoe,OAAA+qG,EAAAvnH,WACAs4H,EAAAt4H,UAAAuc,YAAA+7G,EACAA,EAAAzqB,GAAAyqB,EAAAt4H,UAAA6tG,GAAAtD,EAAA7rD,MAEA45E,EAAAt4H,UAAAu1C,WAAA,WACA,GAAAzoB,GAAAppB,KACAy1F,EAAAxuD,KAAoC7d,EAAA8oF,MAAA9I,sBAAApuD,OAA2C1Q,OAAAtqC,KAAAsqC,QAE/E,OAAAuqF,GAAA/7G,OAAA28E,GAAArvD,KAAA,SAAA0uF,GAGA,MAFA1rG,GAAA0rG,gBAEA1rG,EAAA0rG,cAAA1hC,wBAIAhqE,EAAA0rG,cAAA9nF,WAAA5G,KAAA,SAAAijB,GACAjgC,EAAA8oF,MAAAvE,uBAAAtkD,KACK1jB,MAAA,SAAA/wB,GACLwU,EAAA2rG,kBAAAngH,IAGAwU,EAAA8oF,MAAArE,qBAAAhH,EAAA7rD,MAAApmC,KATAsnB,EAAAhV,YAWGkf,KAAA,WACHhd,EAAA4jC,eAAA,gBAEA7xD,iBAAA,iBAAAmpC,GAKA,MAJAA,GAAAuxE,iBAEAzsF,EAAAklF,oBAEAllF,EAAA0rG,cAAA9nF,WAAA5G,KAAA,SAAAijB,GACAjgC,EAAA8oF,MAAA1G,iBAAAniD,KACO1jB,MAAA,SAAAolF,GACP3hG,EAAA2rG,kBAAAhK,IAIA3hG,EAAA8oF,MAAA9D,YAAA2c,KACO3kF,KAAA,WACPhd,EAAAmlF,sBAIAnlF,EAAA8oF,MAAAjE,qBAAA2mB,EAAAzqB,MACGxkE,MAAA,SAAA/wB,GACHwU,EAAA8oF,MAAAhE,uBACA9zF,KAAAgP,EAAA+gF,GACAxrF,MAAA,GAAAyrF,GAAAx1F,QAKAggH,EAAAt4H,UAAAy4H,kBAAA,SAAAp2G,GAIA,6BAAAA,EAAA0c,MAAA,2BAAA1c,EAAA0c,MAGAu5F,EAAA1qB,UAAA,SAAAz2F,GAIA,MAHAA,GAAA62B,OAAAW,mBAAAC,qBACAqR,cAAAnpC,QAAAK,EAAA21F,sBAAApuD,OAMA9e,EAAAhV,QAAA2tG,EAAA7oC,mBAAAv4E,EAAA21F,sBAAApuD,QAHA9e,EAAAhV,SAAA,IAMAv1B,EAAAC,QAAAgjI,IAEG/vE,kBAAA,IAAAlL,mBAAA,IAAA4xE,yBAAA,IAAA/0D,oBAAA,IAAAi1D,eAAA,IAAAuJ,sBAAA,WAAoJ,e7J+3I1Hx4H,KAAK5K,EAASsI,EAAoB,OAIzD+6H,KACA,SAAUtjI,EAAQC,G8J125BxBD,EAAAC,QAAA,qggB9Jg35BMsjI,KACA,SAAUvjI,EAAQC,KAMlBujI,KACA,SAAUxjI,EAAQC,G+Jx35BxBD,EAAAC,QAAA,m8B/J835BMwjI,KACA,SAAUzjI,EAAQC,GgK/35BxBD,EAAAC,QAAA,i0FhKq45BMyjI,KACA,SAAU1jI,EAAQC,GiKt45BxBD,EAAAC,QAAA,44CjK445BM0jI,KACA,SAAU3jI,EAAQC,GkK745BxBD,EAAAC,QAAA,s5BlKm55BM2jI,KACA,SAAU5jI,EAAQsI,EAAqBC,GAE7C,YmKt55BA,IAAAs7H,GAAAt7H,EAAA,KAAAA,GAAAE,EAAAH,EAAA,gCAAAu7H,GAAA,OAAAC,IAAAv7H,EAAA,KAAAA,EAAA,KAAAA,GAAA8d,EAAAy9G,GAAAv7H,EAAA,KAAAA,EAAA,OnK265BMw7H,KACA,SAAU/jI,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO07H,IAC9E,IAAIC,GAAsD17H,EAAoB,IAC1E27H,EAA8C37H,EAAoB,GACvF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IoKh75B1Gi8G,EAAA,WAMC,QAAAA,GAAoBv7G,GAAApa,KAAAoa,OAJWu7G,EAAAr5H,UAAAw5H,SAAA,WAC9B91H,KAAKoa,KAAK27G,gBpKw75BR,IAAIt5G,EoKn75BR,OANgC1D,IAA9Bre,OAAAm7H,EAAA,cAAa,iBpK475BPr8G,EAAW,cAAemqC,UAC1BnqC,EAAW,wBACXA,EAAW,wBAAqB,KACjCm8G,EAAar5H,UAAW,WAAY,MoKj85B9Bq5H,EAAY58G,GANxBre,OAAAm7H,EAAA,YACAjlH,SAAU,gBACVE,SAAU,qGACV2O,gBAAiBo2G,EAAA,wBAAwBn2G,SpK285BlClG,EAAW,qBoKl85BmB,mBpKk85BWiD,MoKl85BX,KAAXm5G,EAAA,GAAAA,EAAA,IAAWn5G,GAAA/hB,UANzBi7H,OpKi95BPt2F,GACA,SAAU1tC,EAAQsI,EAAqBC,GAE7C,YqK185BO,SAAA87H,GAAyBnoG,GAC/B,MAAO,YAAM,MAAAA,GAAEooG,QrK085BiBh8H,EAAuB,EAAI+7H,EAC7B97H,EAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOi8H,IAC9E,IAAIv+G,GAA8Czd,EAAoB,GAClE0d,EAAgD1d,EAAoB,GACpEi8H,EAA6Cj8H,EAAoB,IAEtF6e,GAD0E7e,EAAoB8d,EAAEm+G,GAClFn2H,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,IAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqKn95B1Gw8G,EAAA,WA4BC,QAAAA,GAAoBE,GAApB,GAAA/yH,GAAArD,IAAoBA,MAAAo2H,WAxBpBp2H,KAAAq2H,eAAgB,EAYNr2H,KAAAs2H,kBAAoB,GAAIH,GAAA,QAGxBn2H,KAAAu2H,aAAe,GAAIJ,GAAA,QA6NtBn2H,KAAAw2H,cAAgB,SAAClyF,GACpBA,GAASA,EAAMr8B,MAAQq8B,EAAMr8B,KAAKwuH,aACpCpzH,EAAKs1B,OAAO+9F,cAAcpyF,EAAMr8B,KAAKwuH,cA3NvC/7H,OAAAI,eAAYo7H,EAAA55H,UAAA,arKk95BLqG,IqKl95BP,SAAsBkrB,GACU,MAA3B7tB,KAAK22H,oBAA4B32H,KAAK22H,mBAAmBC,cAC7D52H,KAAK22H,mBAAqB9oG,GrKq95BpBprB,YAAY,EACZC,cAAc,IqKj95BrBwzH,EAAA55H,UAAA25H,KAAA,cAAA5yH,GAAArD,IACCA,MAAK62H,mBAAqB72H,KAAKs2H,kBAAkBQ,eACjD92H,KAAK+zB,cAAgB/zB,KAAKu2H,aAAaO,eACvC92H,KAAK+1H,gBACL/1H,KAAK24B,OAAS34B,KAAKo2H,SAASp0H,IAAI4V,EAAA,GAChC5X,KAAK+2H,UAAY/2H,KAAK24B,OAAO25B,OAC3B33C,UAAU,SAAC2pB,GAAuB,MAAAjhC,GAAK2zH,sBAAsB1yF,KAG/DrkC,OAAOjE,oBAAoB,UAAWgE,KAAKw2H,eACxCx2H,KAAKi3H,sBACPh3H,OAAO9E,iBAAiB,UAAW6E,KAAKw2H,cAKzC,IAAIU,GAA4Bj3H,OAAOmsC,SAAS5O,KAAKyD,MAAM,4CACxDi2F,KAA8Bj8H,SAAS+xD,eAAe,yBACxDhtD,KAAKm3H,yBAAyBD,EAA0B,KAI1DhB,EAAA55H,UAAA66H,yBAAA,SAAyBpkH,GACxB,GAAI5B,GAAiB,IAoErB,IAnEW,SAAR4B,EACF5B,EAAS,ilFAiCQ,WAAR4B,EACT5B,EAAS,6eAWQ,UAAR4B,EACT5B,EAAS,qqCAiBTo3B,QAAQu8D,KAAK,uEAAyE/xF,GAGzE,OAAX5B,EAAiB,CACnB,GAAIimH,GAAgBn8H,SAASiC,cAAc,QAC3Ck6H,GAAcp6F,aAAa,KAAM,wBACjCo6F,EAAch9C,UAAYjpE,EAC1BlW,SAASuC,KAAK2/B,YAAYi6F,KAK5BlB,EAAA55H,UAAAy5H,cAAA,WACC,GAAI/0H,IAAS,CACThB,MAAKkJ,QAAUjO,SAAS4Q,gBAAgBV,eAC3CnL,KAAKkJ,OAASjO,SAAS4Q,gBAAgBV,aACvCnK,GAAS,GAENhB,KAAKgJ,OAAS/N,SAAS4Q,gBAAgB+B,cAC1C5N,KAAKgJ,MAAQ/N,SAAS4Q,gBAAgB+B,YACtC5M,GAAS,GAGI,GAAVA,GACHhB,KAAKu2H,aAAa36C,MAAO5yE,MAAOhJ,KAAKgJ,MAAOE,OAAQjO,SAAS4Q,gBAAgBV,gBA+B/E+qH,EAAA55H,UAAAs+B,QAAA,SAAQnkB,GACPzW,KAAKq3H,cAAgB5gH,EACrBzW,KAAKs2H,kBAAkB16C,MAAOnlE,KAAMzW,KAAKq3H,iBAE1CnB,EAAA55H,UAAAqiB,MAAA,SAAM24G,GACLt3H,KAAKq3H,eAAgB,EACrBr3H,KAAKs2H,kBAAkB16C,MAAOnlE,KAAMzW,KAAKq3H,cAAe14G,MAAO24G,KAGhEpB,EAAA55H,UAAAi7H,gBAAA,WrKw35BO,IqKx35BS,GAAAnhH,MAAA6iB,EAAA,EAAAA,EAAApvB,UAAAxL,OAAA46B,IAAA7iB,EAAA6iB,GAAApvB,UAAAovB,EACf,OAAgB,OAAR7iB,GAA+B,GAAfA,EAAK/X,OAAe,YAAc+X,EAAK4tB,KAAK,QAErEkyF,EAAA55H,UAAAk7H,YAAA,WACC,GAAIC,IAAOzuH,MAAO,EAAGE,OAAQ,EAgB7B,YAdgC,KAArBjJ,OAAOovD,YACjBooE,EAAGzuH,MAAQ/I,OAAOovD,WAClBooE,EAAGvuH,OAASjJ,OAAOivD,iBAEwB,KAA5Bj0D,SAAS4Q,qBAC0B,KAAxC5Q,SAAS4Q,gBAAgB+B,aACQ,GAAxC3S,SAAS4Q,gBAAgB+B,aAC5B6pH,EAAGzuH,MAAQ/N,SAAS4Q,gBAAgB+B,YACpC6pH,EAAGvuH,OAASjO,SAAS4Q,gBAAgBV,eAGrCssH,EAAGzuH,MAAQ/N,SAAS0rD,qBAAqB,QAAQ,GAAG/4C,YACpD6pH,EAAGvuH,OAASjO,SAAS0rD,qBAAqB,QAAQ,GAAGx7C,cAE/CssH,GAGAvB,EAAA55H,UAAA06H,sBAAR,SAA8B/5H,GACzBA,YAAa2a,GAAA,GAChB5X,KAAK46B,SAAQ,GACV39B,YAAa2a,GAAA,GAChB5X,KAAK46B,SAAQ,GACV39B,YAAa2a,GAAA,GAChB5X,KAAK46B,SAAQ,GACV39B,YAAa2a,GAAA,GAChB5X,KAAK46B,SAAQ,IAGRs7F,EAAA55H,UAAA26H,mBAAP,WACC,GAAIttH,IAAS,CACb,KACCA,EAAU1J,OAAOmpB,OAASnpB,OAAOwM,IAChC,MAAOxP,GACR0M,GAAS,EAEV,MAAOA,IAGDusH,EAAA55H,UAAAo7H,qBAAP,WACC,MAAO13H,MAAKq2H,eAGNH,EAAA55H,UAAAq7H,gBAAP,WACC,GAAMC,GAAc,cACpB,OAAOl9H,QAAAid,EAAA,cAAeigH,EAAY55F,KAAK/9B,OAAOmsC,SAAS5O,OAGjD04F,EAAA55H,UAAAu7H,iBAAP,SAAwBC,GACvB93H,KAAKq2H,cAAgByB,ErKu35BnB,IAAIr7G,EqK925BR,OArPay5G,GAAWn9G,GADvBre,OAAAid,EAAA,crKum6BO6B,EAAW,qBqK1k6BoB,mBrK0k6BUiD,MqK1k6BV,KAAR9E,EAAA,UAAAA,EAAA,WAAQ8E,GAAA/hB,UA5B1Bw7H,OrK+m6BP6B,KACA,SAAUpmI,EAAQsI,EAAqBC,GAE7C,YAEqB,IAAIyd,GAA8Czd,EAAoB,GAClE89H,EAAgD99H,EAAoB,GAEpE+9H,GADwD/9H,EAAoB8d,EAAEggH,GACxB99H,EAAoB,KAC/F6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,KsKzl6B1G,WAWC,QAAAw+G,GAAoB99G,EAA2BI,EAAgCrb,GAA3Da,KAAAoa,OAA2Bpa,KAAAwa,MAAgCxa,KAAAb,WAP/Ea,KAAAi0B,QAAS,EAETj0B,KAAAm4H,IAAM,EACNn4H,KAAAo4H,MAAQ,GAMRF,EAAA57H,UAAA+H,SAAA,cAAAhB,GAAArD,IACCA,MAAKq4H,wBAA0Br4H,KAAKoa,KAAKy8G,mBAAmBl8G,UAAU,SAAC29G,GAClEj1H,EAAK4wB,QAAUqkG,EAAY7hH,MAAQpT,EAAKi0H,WAAagB,EAAY35G,QACpEtb,EAAK4wB,OAASqkG,EAAY7hH,KAC1BpT,EAAKi0H,UAAYgB,EAAY35G,MAC7Btb,EAAKk1H,QACLl1H,EAAKmX,IAAIhP,mBAKZ0sH,EAAA57H,UAAAgI,YAAA,WACCtE,KAAKi0B,QAAS,EACVj0B,KAAKq4H,yBACRr4H,KAAKq4H,wBAAwBzB,cAC9B52H,KAAKu4H,SAGNL,EAAA57H,UAAA6e,gBAAA,WACCnb,KAAKu4H,SAGNL,EAAA57H,UAAAi8H,MAAA,cAAAl1H,GAAArD,IACKA,MAAKi0B,OACRj0B,KAAKw4H,aAAeR,EAAA,WAAWS,SAASz4H,KAAKo4H,OAAOz9G,UAAU,WAAM,MAAAtX,GAAKq1H,aACjE14H,KAAKw4H,cACbx4H,KAAKw4H,aAAa5B,eAGpBsB,EAAA57H,UAAAo8H,SAAA,WACoB,MAAf14H,KAAK24H,SACR34H,KAAKm4H,KAAO,EACRn4H,KAAKm4H,IAAM,MACdn4H,KAAKm4H,IAAM,GACZn4H,KAAKb,SAAS69B,aAAah9B,KAAK24H,OAAOv0H,cAAe,YAAa,UAAYpE,KAAKm4H,IAAM,ctK4n6BzF,IAAI17G,GAAIC,EAAIC,EAAIC,CsKzq6BE7D,IAApBre,OAAAid,EAAA,WAAU,UtK4q6BJ6B,EAAW,csK5q6BqB,mBtK4q6BEiD,MsK5q6BF,KAAV9E,EAAA,YAAAA,EAAA,aAAU8E,GAAA/hB,StK6q6BjCw9H,EAAW57H,UAAW,aAAU,IsK/q6B1B47H,EAAUn/G,GAJtBre,OAAAid,EAAA,YACA/G,SAAU,UAAWG,MAAQ6nH,iBAAkB,UAC/Cn5G,gBAAiB9H,EAAA,wBAAwB+H,OAAQ5O,SAnBvC,w1BAmBuDK,QAVtD,qXtKis6BJqI,EAAW,qBsK1q6BmB,mBtK0q6BWkD,MsK1q6BX,KAAXu7G,EAAA,GAAAA,EAAA,IAAWv7G,GAAAhiB,OAAgC,mBAAhCiiB,MAAgC,KAAjBhF,EAAA,mBAAAA,EAAA,oBAAiBgF,GAAAjiB,OAA6B,mBAA7BkiB,MAA6B,KAATjF,EAAA,WAAAA,EAAA,YAASiF,GAAAliB,UAXtFw9H,OtK8r6BPW,KACA,SAAUlnI,EAAQC,EAASsI,GuKns6BjC,QAAAusB,GAAAC,GACA,MAAAxsB,GAAAysB,EAAAD,IAEA,QAAAC,GAAAD,GACA,GAAA7T,GAAAtW,EAAAmqB,EACA,MAAA7T,EAAA,GACA,SAAA+T,OAAA,uBAAAF,EAAA,KACA,OAAA7T,GAjEA,GAAAtW,IACAu8H,4BAAA,KACAC,4BAAA,KACAC,oBAAA,KACAC,6BAAA,KACAC,6BAAA,KACAC,6BAAA,KACAC,6BAAA,KACAC,oBAAA,KACAC,kCAAA,KACAC,kCAAA,KACAC,0BAAA,KACAC,0BAAA,KACAC,6BAAA,KACAC,6BAAA,KACAC,+BAAA,KACAC,+BAAA,KACAC,8BAAA,KACAC,8BAAA,KACAC,gCAAA,KACAC,gCAAA,KACAC,0BAAA,KACAC,0BAAA,KACAC,gCAAA,KACAC,gCAAA,KACAC,2BAAA,KACAC,2BAAA,KACAC,+BAAA,KACAC,+BAAA,KACAC,sCAAA,KACAC,sCAAA,KACAC,gCAAA,KACAC,gCAAA,KACAC,kCAAA,KACAC,kCAAA,KACAC,iCAAA,KACAC,iCAAA,KACAC,kCAAA,KACAC,kCAAA,KACAC,uBAAA,KACAC,uBAAA,KACAC,oBAAA,KACAC,oBAAA,KACAC,oBAAA,KACAC,oBAAA,KACAC,kBAAA,KACAC,kBAAA,KACAC,4BAAA,KACAC,4BAAA,KACAC,mBAAA,KACAC,mBAAA,KACAC,qBAAA,KACAC,qBAAA,KACAC,oCAAA,KACAC,oCAAA,KACAC,yBAAA,KACAC,yBAAA,KAWA51G,GAAAQ,KAAA,WACA,MAAAvsB,QAAAusB,KAAA1qB,IAEAkqB,EAAAS,QAAAP,EACAh1B,EAAAC,QAAA60B,EACAA,EAAA5T,GAAA,MvKmw6BMypH,KACA,SAAU3qI,EAAQC,GwK506BxBD,EAAAC,SAAkB2qI,iBAAmBC,MAAA,kBAAAC,WAAA,yFAAAC,MAAwIC,WAAA,eAAAC,WAAA,kBAAAC,OAAoEC,WAAA,aAAAC,UAAA,YAAAC,MAAA,QAAAC,qBAAA,uBAAAC,QAAA,UAAAC,QAAA,UAAAC,MAAA,QAAAC,KAAA,OAAAC,QAAA,UAAAC,YAAA,cAAAC,aAAA,eAAAC,OAAA,0BAAsSC,aAAgBZ,WAAA,kBAAAC,UAAA,iBAAAC,MAAA,aAAAE,QAAA,eAAAC,QAAA,sBAAAC,MAAA,aAAAC,KAAA,YAAAC,QAAA,mCAAAC,YAAA,qBAAAC,aAAA,eAAAC,OAAA,0BAAkUE,kBAAqBC,SAAA,yBAAAnvE,QAAA,gBAAAovE,cAAA,4BAAyGC,eAAA,sBAAuCC,QAAWC,KAAA,OAAAC,KAAA,OAAAC,OAAA,SAAAC,OAAA,SAAAC,SAAA,WAAAC,MAAA,QAAAC,gBAAA,UAAiIC,SAAYC,cAAA,mFAAAtB,QAAA,yEAAAuB,UAAA,qCAAAC,YAAA,6CxKk16BhqCC,KACA,SAAUhtI,EAAQC,GyKn16BxBD,EAAAC,SAAkB2qI,iBAAmBC,MAAA,kBAAAC,WAAA,yFAAAC,MAAwIC,WAAA,aAAAC,WAAA,kBAAAC,OAAkEC,WAAA,aAAAC,UAAA,YAAAC,MAAA,QAAAC,qBAAA,uBAAAC,QAAA,UAAAC,QAAA,UAAAC,MAAA,QAAAC,KAAA,OAAAC,QAAA,UAAAC,YAAA,cAAAC,aAAA,eAAAC,OAAA,0BAAsSC,aAAgBZ,WAAA,kBAAAC,UAAA,iBAAAC,MAAA,aAAAE,QAAA,eAAAC,QAAA,sBAAAC,MAAA,aAAAC,KAAA,YAAAC,QAAA,mCAAAC,YAAA,qBAAAC,aAAA,eAAAC,OAAA,0BAAkUE,kBAAqBC,SAAA,yBAAAnvE,QAAA,gBAAAovE,cAAA,4BAAyGC,eAAA,sBAAuCC,QAAWC,KAAA,OAAAC,KAAA,OAAAC,OAAA,SAAAC,OAAA,SAAAC,SAAA,WAAAC,MAAA,QAAAC,gBAAA,UAAiIC,SAAYC,cAAA,mFAAAtB,QAAA,yEAAAuB,UAAA,qCAAAC,YAAA,6CzKy16B9pCE,KACA,SAAUjtI,EAAQC,G0K116BxBD,EAAAC,SAAkBitI,SAAWrC,MAAA,sBAAAsC,SAAA,2EAAAC,SAA+HvC,MAAA,WAAkBwC,UAAaxC,MAAA,sBAA6ByC,eAAkBzC,MAAA,oBAA2B0C,UAAa1C,MAAA,kB1Kg26B5Q2C,KACA,SAAUxtI,EAAQC,G2Kj26BxBD,EAAAC,SAAkBwtI,kBAAoB5C,MAAA,cAAAsC,SAAA,cAAAP,SAA0Dc,aAAA,2BAAAC,WAAA,kCAAAC,aAAA,+CAAAC,WAAoKlkG,EAAA,oBAAAK,EAAA,wBAAA8jG,KAAA,8EAAwInmE,MAAA,+BAAAomE,cAAA,iBAAwE7C,OAAU8C,YAAA,cAAAC,WAAA,aAAAC,MAAA,QAAAC,WAAA,gBAAAxC,QAAA,UAAAW,KAAA,OAAAR,OAAA,UAAAsC,IAAA,MAAAC,MAAA,QAAAC,QAAA,UAAAC,UAAA,eAAAC,OAAA,SAAAC,iBAAA,2BAAAC,kBAAA,kFAAwYtC,QAAWuC,MAAA,UAAAC,UAAA,oB3Ku26B32BC,KACA,SAAU7uI,EAAQC,G4Kx26BxBD,EAAAC,SAAkBwtI,kBAAoB5C,MAAA,cAAAsC,SAAA,cAAAP,SAA0Dc,aAAA,2BAAAC,WAAA,kCAAAC,aAAA,+CAAAC,WAAoKlkG,EAAA,oBAAAK,EAAA,wBAAA8jG,KAAA,8EAAwInmE,MAAA,6BAAAomE,cAAA,iBAAsE7C,OAAU8C,YAAA,cAAAC,WAAA,aAAAC,MAAA,QAAAC,WAAA,gBAAAxC,QAAA,UAAAW,KAAA,OAAAR,OAAA,UAAAsC,IAAA,MAAAC,MAAA,QAAAC,QAAA,UAAAC,UAAA,eAAAC,OAAA,SAAAC,iBAAA,2BAAAC,kBAAA,kFAAwYtC,QAAWuC,MAAA,UAAAC,UAAA,oB5K826Bz2BE,KACA,SAAU9uI,EAAQC,G6K/26BxBD,EAAAC,SAAkB8uI,SAAWlE,MAAA,6BAAA+B,SAAgDjlE,MAAA,4CAAA+lE,aAAA,sCAAAsB,aAAA,4BAAAC,eAAA,uDAAAC,eAAA,0BAAAC,aAAA,kCAAuT1D,OAAU2D,OAAA,SAAAxyE,MAAA,QAAAE,QAAA,UAAAuyE,QAAA,WAA0EnE,OAAUG,MAAA,QAAAiE,QAAA,aAAAhB,QAAA,aAAAiB,QAAA,aAAAC,IAAA,MAAAC,SAAA,kBAAAC,KAAA,OAAAjD,SAAA,WAAAF,OAAA,SAAA99E,IAAA,OAAgM29E,QAAWE,KAAA,OAAAqD,OAAA,SAAAtD,KAAA,OAAAE,OAAA,a7Kq36BvqBqD,KACA,SAAU5vI,EAAQC,G8Kt36BxBD,EAAAC,SAAkB8uI,SAAWlE,MAAA,6BAAA+B,SAAgDjlE,MAAA,4CAAA+lE,aAAA,sCAAAsB,aAAA,4BAAAC,eAAA,uDAAAC,eAAA,0BAAAC,aAAA,kCAAuT1D,OAAU2D,OAAA,SAAAxyE,MAAA,QAAAE,QAAA,UAAAuyE,QAAA,WAA0EnE,OAAUG,MAAA,QAAAiE,QAAA,aAAAhB,QAAA,aAAAiB,QAAA,aAAAC,IAAA,MAAAC,SAAA,kBAAAC,KAAA,OAAAjD,SAAA,WAAAF,OAAA,SAAA99E,IAAA,OAAgM29E,QAAWE,KAAA,OAAAqD,OAAA,SAAAtD,KAAA,OAAAE,OAAA,a9K436BvqBsD,KACA,SAAU7vI,EAAQC,G+K736BxBD,EAAAC,SAAkBitI,SAAWrC,MAAA,sBAAAsC,SAAA,2EAAAC,SAA+HvC,MAAA,WAAkBwC,UAAaxC,MAAA,sBAA6ByC,eAAkBzC,MAAA,oBAA2B0C,UAAa1C,MAAA,kB/Km46B5QiF,KACA,SAAU9vI,EAAQC,GgLp46BxBD,EAAAC,SAAkB8vI,cAAgBlF,MAAA,mBAAA+B,SAAsCjlE,MAAA,8DAAAqoE,gBAAA,kDAAAC,kBAAA,wCAAqM/E,OAAUkE,OAAA,SAAAc,SAAA,WAAAC,WAAA,aAAAC,WAAA,aAAAC,aAAA,kBAAApC,WAAA,aAAAqC,UAAA,YAAAC,eAAA,iBAAAC,qBAAA,cAAAC,YAAA,cAAAC,MAAA,QAAAC,cAAA,gBAAAlpI,GAAA,iBAAAsmI,cAAA,iBAAwX3B,QAAWwE,UAAA,YAAAC,YAAA,UAA+CC,UAAajG,MAAA,0BAAAkG,cAAA,kBAAAxE,OAAA,ahL046BhtByE,KACA,SAAUhxI,EAAQC,GiL346BxBD,EAAAC,SAAkB8vI,cAAgBlF,MAAA,mBAAA+B,SAAsCjlE,MAAA,8DAAAqoE,gBAAA,kDAAAC,kBAAA,wCAAqM/E,OAAUkE,OAAA,SAAAc,SAAA,WAAAC,WAAA,aAAAC,WAAA,aAAAC,aAAA,kBAAApC,WAAA,aAAAqC,UAAA,YAAAC,eAAA,iBAAAC,qBAAA,cAAAC,YAAA,cAAAC,MAAA,QAAAC,cAAA,gBAAAlpI,GAAA,iBAAAsmI,cAAA,iBAAwX3B,QAAWwE,UAAA,YAAAC,YAAA,UAA+CC,UAAajG,MAAA,0BAAAkG,cAAA,kBAAAxE,OAAA,ajLi56BhtB0E,KACA,SAAUjxI,EAAQC,GkLl56BxBD,EAAAC,SAAkBixI,KAAOrG,MAAA,kBAAAsG,SAAA,WAAAD,IAAA,MAAAE,iBAAA,mBAAAC,MAA0GC,SAAA,WAAAzG,MAAA,QAAA0G,QAAA,UAAAC,mBAAA,qBAAAC,uBAAA,8BAAAC,uBAAA,+BAAkN9E,SAAY+E,QAAA,gDlLw56B3VC,KACA,SAAU5xI,EAAQC,GmLz56BxBD,EAAAC,SAAkBixI,KAAOrG,MAAA,kBAAAsG,SAAA,WAAAD,IAAA,MAAAE,iBAAA,mBAAAC,MAA0GC,SAAA,WAAAzG,MAAA,QAAA0G,QAAA,UAAAC,mBAAA,qBAAAC,uBAAA,8BAAAC,uBAAA,+BAAkN9E,SAAY+E,QAAA,gDnL+56B3VE,KACA,SAAU7xI,EAAQC,GoLh66BxBD,EAAAC,SAAkB6xI,kBAAoBC,UAAYlH,MAAA,qBAAAmH,gBAAA,aAAAC,QAAA,UAAAC,cAAA,QAAAC,eAAA,SAAAC,aAAA,OAAAC,iBAA2KxH,MAAA,QAAAyH,oBAAA,iBAAAC,QAAA,qBAAA7B,MAAA,mBAAA8B,eAAA,2BAAAC,MAAA,mBAAuLC,oBAAA,gBAAAC,wBAAA,mBAAAC,mBAAyGtB,SAAA,MAAA94B,GAAA,KAAAqyB,MAAA,QAAAgI,SAAA,SAAAC,YAAA,qBAAApC,MAAA,aAAA+B,MAAA,QAAAM,cAAA,OAAAC,kBAAA,kBAAmMC,qBAAA,gBAAuCC,cAAiBrI,MAAA,4BAAAsI,YAAA,sBAAAC,UAAA,mBAAAC,mBAAA,mBAAAC,UAAA,kBAAAC,kBAAA,qBAAAC,YAAA,aAAAC,YAAA,UAAAC,cAAA,WAAAC,kBAAA,cAAAC,gBAAwVtC,SAAA,MAAA94B,GAAA,KAAAqyB,MAAA,QAAAgI,SAAA,SAAAC,YAAA,0BAAAe,WAAA,QAAApB,MAAA,QAAAM,cAAA,OAAAC,kBAAA,mBAAyMrB,QAAA,sBpLs66BnxCmC,KACA,SAAU9zI,EAAQC,GqLv66BxBD,EAAAC,SAAkB6xI,kBAAoBC,UAAYlH,MAAA,qBAAAmH,gBAAA,aAAAC,QAAA,UAAAC,cAAA,QAAAC,eAAA,SAAAC,aAAA,OAAAC,iBAA2KxH,MAAA,QAAAyH,oBAAA,iBAAAC,QAAA,qBAAA7B,MAAA,mBAAA8B,eAAA,2BAAAC,MAAA,mBAAuLC,oBAAA,gBAAAC,wBAAA,mBAAAC,mBAAyGtB,SAAA,MAAA94B,GAAA,KAAAqyB,MAAA,QAAAgI,SAAA,SAAAC,YAAA,qBAAApC,MAAA,aAAA+B,MAAA,QAAAM,cAAA,OAAAC,kBAAA,kBAAmMC,qBAAA,gBAAuCC,cAAiBrI,MAAA,4BAAAsI,YAAA,sBAAAC,UAAA,mBAAAC,mBAAA,mBAAAC,UAAA,kBAAAC,kBAAA,qBAAAC,YAAA,aAAAC,YAAA,UAAAC,cAAA,WAAAC,kBAAA,cAAAC,gBAAwVtC,SAAA,MAAA94B,GAAA,KAAAqyB,MAAA,QAAAgI,SAAA,SAAAC,YAAA,0BAAAe,WAAA,QAAApB,MAAA,QAAAM,cAAA,OAAAC,kBAAA,mBAAyMrB,QAAA,sBrL666BnxCoC,KACA,SAAU/zI,EAAQC,GsL966BxBD,EAAAC,SAAkB+zI,oBAAsBnJ,MAAA,uBAAAoJ,QAAyCtqG,EAAA,8BAAAK,EAAA,qBAAAS,EAAA,WAAyE8nG,SAAYE,MAAA,QAAA/B,MAAA,QAAAwD,eAAA,iBAAAlB,kBAAA,8BAAAmB,mBAAA,sBAA8JC,0BAAA,+BAAAC,0BAAA,gCAAAC,kBAAA,cAAAC,sBAAA,kBAAAC,WAAiN7qG,EAAA,2CAAAK,EAAA,0BAAAS,EAAA,qBAAAkB,EAAA,iBAAAI,EAAA,8BAAAE,EAAA,qCAAqMolG,MAASoD,KAAA,OAAAC,IAAA,MAAAC,MAAA,QAAAC,KAAA,OAAAC,KAAA,OAAApC,MAAA,QAAA/B,MAAA,QAAAoE,MAAA,QAAAC,UAAA,YAAAC,KAAA,WtLo76B7tBC,KACA,SAAUj1I,EAAQC,GuLr76BxBD,EAAAC,SAAkB+zI,oBAAsBnJ,MAAA,uBAAAoJ,QAAyCtqG,EAAA,8BAAAK,EAAA,qBAAAS,EAAA,WAAyE8nG,SAAYE,MAAA,QAAA/B,MAAA,QAAAwD,eAAA,iBAAAlB,kBAAA,8BAAAmB,mBAAA,sBAA8JC,0BAAA,+BAAAC,0BAAA,gCAAAC,kBAAA,cAAAC,sBAAA,kBAAAC,WAAiN7qG,EAAA,2CAAAK,EAAA,0BAAAS,EAAA,qBAAAkB,EAAA,iBAAAI,EAAA,8BAAAE,EAAA,qCAAqMolG,MAASoD,KAAA,OAAAC,IAAA,MAAAC,MAAA,QAAAC,KAAA,OAAAC,KAAA,OAAApC,MAAA,QAAA/B,MAAA,QAAAoE,MAAA,QAAAC,UAAA,YAAAC,KAAA,WvL276B7tBE,KACA,SAAUl1I,EAAQC,GwL576BxBD,EAAAC,SAAkBk1I,mBAAqBtK,MAAA,sBAAAoJ,QAAwCtqG,EAAA,gBAAAK,EAAA,kBAAAS,EAAA,gBAAAkB,EAAA,cAA+E6oG,WAAc7qG,EAAA,iBAAAK,EAAA,gBAAAS,EAAA,eAAAkB,EAAA,mBAAkF0lG,MAASoB,MAAA,QAAA/B,MAAA,QAAA7F,MAAA,QAAAuK,OAAA,SAAAvC,SAAA,YAAwF9G,aAAgBqJ,OAAA,8CAAsDzD,QAAA,oBAA8B0D,2BAA8BxK,MAAA,8BAAAoJ,QAAgDqB,cAAA,gBAAAC,SAAA,mBAAAC,gBAAA,mBAAkGnE,MAASoE,WAAA,qBAAAtF,WAAA,oBAAAuF,KAAA,OAAAC,YAAA,QAAAC,YAAA,QAAAzB,mBAAA,qBAAA0B,qCAAA,kBAAAC,wCAAA,eAAAC,qCAAA,sBAAAC,mCAAA,oBxLk86BtnBC,KACA,SAAUj2I,EAAQC,GyLn86BxBD,EAAAC,SAAkBk1I,mBAAqBtK,MAAA,sBAAAoJ,QAAwCtqG,EAAA,gBAAAK,EAAA,kBAAAS,EAAA,gBAAAkB,EAAA,cAA+E6oG,WAAc7qG,EAAA,iBAAAK,EAAA,gBAAAS,EAAA,eAAAkB,EAAA,mBAAkF0lG,MAASoB,MAAA,QAAA/B,MAAA,QAAA7F,MAAA,QAAAuK,OAAA,SAAAvC,SAAA,YAAwF9G,aAAgBqJ,OAAA,8CAAsDzD,QAAA,oBAA8B0D,2BAA8BxK,MAAA,8BAAAoJ,QAAgDqB,cAAA,gBAAAC,SAAA,mBAAAC,gBAAA,mBAAkGnE,MAASoE,WAAA,qBAAAtF,WAAA,oBAAAuF,KAAA,OAAAC,YAAA,QAAAC,YAAA,QAAAzB,mBAAA,qBAAA0B,qCAAA,kBAAAC,wCAAA,eAAAC,qCAAA,sBAAAC,mCAAA,oBzLy86BtnBE,KACA,SAAUl2I,EAAQC,G0L186BxBD,EAAAC,SAAkBk2I,qBAAuBtL,MAAA,wBAAA0H,SAA2C6D,kBAAA,oBAAAC,eAAA,iBAAAC,eAAA,iBAAAC,SAAA,mBAAyItC,QAAWuC,eAAA,YAAAC,mBAAA,2CAAAC,eAAA,qBAAAC,mBAAA,0BAAAC,cAAA,uBAAAC,cAAA,kBAAAC,kBAAA,yBAAAC,QAAA,kBAAAC,YAAA,4CAA6XC,iBAAoB3F,SAAA,UAAA94B,GAAA,KAAAqyB,MAAA,QAAA6F,MAAA,Y1Lg96BnnBwG,KACA,SAAUl3I,EAAQC,G2Lj96BxBD,EAAAC,SAAkBk2I,qBAAuBtL,MAAA,wBAAA0H,SAA2C6D,kBAAA,oBAAAC,eAAA,iBAAAC,eAAA,iBAAAC,SAAA,mBAAyItC,QAAWuC,eAAA,YAAAC,mBAAA,2CAAAC,eAAA,qBAAAC,mBAAA,0BAAAC,cAAA,uBAAAC,cAAA,kBAAAC,kBAAA,yBAAAC,QAAA,kBAAAC,YAAA,4CAA6XC,iBAAoB3F,SAAA,UAAA94B,GAAA,KAAAqyB,MAAA,QAAA6F,MAAA,Y3Lu96BnnByG,KACA,SAAUn3I,EAAQC,G4Lx96BxBD,EAAAC,SAAkBm3I,eAAiBvM,MAAA,kBAAAoJ,QAAoCoD,IAAA,MAAAjK,QAAA,WAAgCiE,MAAS7F,QAAA,UAAA8L,OAAA,SAAA5G,MAAA,QAAA+B,MAAA,UAAuE8E,uBAA0B1M,MAAA,8BAAA2M,MAA8CC,QAAA,UAAAC,OAAA,UAAsCrG,MAASiG,OAAA,SAAA5L,KAAA,W5L896BxSiM,KACA,SAAU33I,EAAQC,G6L/96BxBD,EAAAC,SAAkBm3I,eAAiBvM,MAAA,kBAAAoJ,QAAoCoD,IAAA,MAAAjK,QAAA,WAAgCiE,MAAS7F,QAAA,UAAA8L,OAAA,SAAA5G,MAAA,QAAA+B,MAAA,UAAuE8E,uBAA0B1M,MAAA,8BAAA2M,MAA8CC,QAAA,UAAAC,OAAA,UAAsCrG,MAASiG,OAAA,SAAA5L,KAAA,W7Lq+6BxSkM,KACA,SAAU53I,EAAQC,G8Lt+6BxBD,EAAAC,SAAkB43I,WAAaxG,MAAQyG,aAAA,eAAAC,cAAA,gBAAAC,aAAA,eAAAC,OAAA,SAAAC,QAAA,UAAAC,OAAA,SAAAC,QAAA,UAAAC,IAAA,UAAAC,eAAA,iBAAAC,WAAA,aAAAC,oBAAA,sBAAAC,cAAA,gBAAAC,SAAA,YAAAC,SAAA,WAAAC,SAAA,WAAAC,QAAA,SAAAC,SAAA,WAAAC,QAAA,UAAAvgC,GAAA,KAAAqyB,MAAA,QAAAW,QAAA,UAAA8L,OAAA,SAAA0B,QAAA,UAAAC,GAAA,S9L4+6BjCC,KACA,SAAUl5I,EAAQC,G+L7+6BxBD,EAAAC,SAAkB43I,WAAaxG,MAAQyG,aAAA,eAAAC,cAAA,gBAAAC,aAAA,eAAAC,OAAA,SAAAC,QAAA,UAAAC,OAAA,SAAAC,QAAA,UAAAC,IAAA,UAAAC,eAAA,iBAAAC,WAAA,aAAAC,oBAAA,sBAAAC,cAAA,gBAAAC,SAAA,YAAAC,SAAA,WAAAC,SAAA,WAAAC,QAAA,SAAAC,SAAA,WAAAC,QAAA,UAAAvgC,GAAA,KAAAqyB,MAAA,QAAAW,QAAA,UAAA8L,OAAA,SAAA0B,QAAA,UAAAC,GAAA,S/Lm/6BjCE,KACA,SAAUn5I,EAAQC,GgMp/6BxBD,EAAAC,SAAkBm5I,gBAAkBvO,MAAA,mBAAAwO,cAA2CxO,MAAA,mCAAAyO,KAAA,2JAAAC,cAAA,mDhM0/6BzEC,KACA,SAAUx5I,EAAQC,GiM3/6BxBD,EAAAC,SAAkBm5I,gBAAkBvO,MAAA,mBAAAwO,cAA2CxO,MAAA,mCAAAyO,KAAA,2JAAAC,cAAA,mDjMig7BzEE,KACA,SAAUz5I,EAAQC,GkMlg7BxBD,EAAAC,SAAkBy5I,oBAAsB7O,MAAA,uBAAAsG,SAAA,WAAAwI,YAAA,cAAAvI,iBAAA,mBAAAC,MAA+HC,SAAA,WAAAzG,MAAA,QAAA0G,QAAA,UAAAC,mBAAA,qBAAAC,uBAAA,8BAAAC,uBAAA,8BAAAl5B,GAAA,KAAAk3B,KAAA,OAAA+C,MAAA,QAAAmH,UAAA,YAAAC,YAAA,eAA8SjN,SAAY+E,QAAA,gDlMwg7B3dmI,KACA,SAAU95I,EAAQC,GmMzg7BxBD,EAAAC,SAAkBy5I,oBAAsB7O,MAAA,uBAAAsG,SAAA,WAAAwI,YAAA,cAAAvI,iBAAA,mBAAAC,MAA+HC,SAAA,WAAAzG,MAAA,QAAA0G,QAAA,UAAAC,mBAAA,qBAAAC,uBAAA,8BAAAC,uBAAA,8BAAAl5B,GAAA,KAAAk3B,KAAA,OAAA+C,MAAA,QAAAmH,UAAA,YAAAC,YAAA,eAA8SjN,SAAY+E,QAAA,gDnM+g7B3doI,KACA,SAAU/5I,EAAQC,GoMhh7BxBD,EAAAC,SAAkB+5I,2BAA6BC,MAAQpP,MAAA,8BAAqCqP,UAAarP,MAAA,WAAAsP,YAAiCjP,MAAA,aAAAkP,OAAA,qBAAkD5O,SAAYN,MAAA,UAAAkP,OAAA,kBAA4C9C,QAAWpM,MAAA,SAAAkP,OAAA,gBAAAC,SAAA,wBAA4EpI,SAAY/G,MAAA,UAAAkP,OAAA,eAAyC1E,MAASxK,MAAA,cAAAkP,OAAA,gBAA8C7H,SAAYE,MAAA,QAAA/B,MAAA,QAAAwD,eAAA,iBAAAlB,kBAAA,8BAAAmB,mBAAA,qBAAAmG,kBAAA,kCAAmNC,SAAY1P,MAAA,iBAAA2P,cAAA,iBAAAC,aAAyEhG,KAAA,OAAAC,IAAA,MAAAE,KAAA,OAAAD,MAAA,QAAAE,KAAA,SAAuE6F,aAAgB7P,MAAA,cAAA4H,MAAA,QAAA/B,MAAA,QAAAiK,cAAA,UAAAtD,KAAuFuD,cAAA,oBAAAC,gBAAA,uBAA4EC,MAASC,UAAA,UAAAC,UAAA,UAA2CC,OAAA,2CAAoDvF,MAAS7K,MAAA,kBAAAqQ,IAAA,MAAAC,MAAA,QAAAzK,MAAA,QAAAiK,cAAA,UAAAM,OAAA,0CAAAG,QAAA,eAA2KC,YAAa1xG,EAAA,WAAAK,EAAA,GAAAS,EAAA,UAAmC6wG,UAAWrH,OAAA,cAAAsH,KAAA,qDAAkFC,iBAAkBN,IAAA,oBAAyBO,cAAenK,SAAA,WAAAoK,QAAA,OAAAhL,MAAA,QAAA+B,MAAA,SAAuEkJ,eAAgBC,wBAAA,0BAAAC,UAAA,cAAAC,oBAAA,wBAAAC,iBAAA,mBAAAC,sBAAA,wBAAAtG,KAAA,QAAgOuG,UAAWC,YAAA,OAAAC,sBAAA,cAAAC,qBAAA,aAAAC,cAAA,cAAAC,kBAAA,UAAAC,iBAAA,SAAAC,eAAA,OAAAC,gBAAA,uBAAAC,cAAA,sBAAAC,cAAA,OAAAC,iBAAA,SAAAC,qBAAA,aAAAC,oBAAA,YAAAC,KAAA,OAAAC,OAAA,SAAAC,MAAA,QAAAC,UAAA,YAAAC,SAAA,kBAAAxL,QAAA,UAAAjB,MAAA,QAAAwK,IAAA,MAAAkC,sBAAA,iCAAomBC,iBAAkBC,OAAA,SAAA5C,YAAA,cAAAhF,KAAA,OAAA6H,OAAA,SAAAC,IAAA,OAA0FC,qBAAsBnG,OAAA,SAAA5L,KAAA,WpMsh7B1+EgS,KACA,SAAU19I,EAAQC,GqMvh7BxBD,EAAAC,SAAkB+5I,2BAA6BnP,MAAA,6BAAAqP,UAAiDrP,MAAA,WAAAsP,YAAiCjP,MAAA,aAAAkP,OAAA,qBAAkD5O,SAAYN,MAAA,UAAAkP,OAAA,kBAA4C9C,QAAWpM,MAAA,SAAAkP,OAAA,gBAAAC,SAAA,wBAA4EpI,SAAY/G,MAAA,UAAAkP,OAAA,eAAyC1E,MAASxK,MAAA,cAAAkP,OAAA,gBAA8C7H,SAAYE,MAAA,QAAA/B,MAAA,QAAAwD,eAAA,iBAAAlB,kBAAA,8BAAAmB,mBAAA,qBAAAmG,kBAAA,kCAAmNC,SAAY1P,MAAA,iBAAA2P,cAAA,iBAAAC,aAAyEhG,KAAA,OAAAC,IAAA,MAAAE,KAAA,OAAAD,MAAA,QAAAE,KAAA,SAAuE6F,aAAgB7P,MAAA,cAAA4H,MAAA,QAAA/B,MAAA,QAAAiK,cAAA,UAAAtD,KAAuFuD,cAAA,oBAAAC,gBAAA,uBAA4EC,MAASC,UAAA,UAAAC,UAAA,UAA2CC,OAAA,2CAAoDvF,MAAS7K,MAAA,OAAAqQ,IAAA,MAAAC,MAAA,QAAAzK,MAAA,QAAAiK,cAAA,UAAAM,OAAA,0CAAAG,QAAA,eAAgKC,YAAa1xG,EAAA,WAAAK,EAAA,GAAAS,EAAA,UAAmC6wG,UAAWrH,OAAA,cAAAsH,KAAA,qDAAkFC,iBAAkBN,IAAA,oBAAyBO,cAAenK,SAAA,WAAAoK,QAAA,OAAAhL,MAAA,QAAA+B,MAAA,SAAuEkJ,eAAgBC,wBAAA,0BAAAC,UAAA,cAAAC,oBAAA,wBAAAC,iBAAA,mBAAAC,sBAAA,wBAAAtG,KAAA,QAAgOuG,UAAWC,YAAA,OAAAC,sBAAA,cAAAC,qBAAA,aAAAC,cAAA,cAAAC,kBAAA,UAAAC,iBAAA,SAAAC,eAAA,OAAAC,gBAAA,uBAAAC,cAAA,sBAAAC,cAAA,OAAAC,iBAAA,SAAAC,qBAAA,aAAAC,oBAAA,YAAAC,KAAA,OAAAC,OAAA,SAAAC,MAAA,QAAAC,UAAA,YAAAC,SAAA,kBAAAxL,QAAA,UAAAjB,MAAA,QAAAwK,IAAA,MAAAkC,sBAAA,iCAAomBC,iBAAkBC,OAAA,SAAA5C,YAAA,cAAAhF,KAAA,OAAA6H,OAAA,SAAAC,IAAA,OAA0FC,qBAAsBnG,OAAA,SAAA5L,KAAA,WrM6h7Bt9EiS,KACA,SAAU39I,EAAQC,GsM9h7BxBD,EAAAC,SAAkB29I,qBAAuB/S,MAAA,6BAAAoJ,QAA+CtqG,EAAA,WAAAK,EAAA,GAAAS,EAAA,UAAmCozG,MAAS5J,OAAA,cAAAsH,KAAA,qDAAkFxP,aAAgBmP,IAAA,oBAAyB4C,UAAaxM,SAAA,WAAAoK,QAAA,OAAAhL,MAAA,QAAA+B,MAAA,SAAuEsL,WAAcnC,wBAAA,0BAAAC,UAAA,cAAAC,oBAAA,wBAAAC,iBAAA,mBAAAC,sBAAA,wBAAAtG,KAAA,QAAgOrE,MAAS6K,YAAA,OAAAC,sBAAA,cAAAC,qBAAA,aAAAC,cAAA,cAAAC,kBAAA,UAAAC,iBAAA,SAAAC,eAAA,OAAAC,gBAAA,uBAAAC,cAAA,sBAAAC,cAAA,OAAAC,iBAAA,SAAAC,qBAAA,aAAAC,oBAAA,YAAAC,KAAA,OAAAC,OAAA,SAAAC,MAAA,QAAAC,UAAA,YAAAC,SAAA,kBAAAxL,QAAA,UAAAjB,MAAA,QAAAwK,IAAA,MAAAkC,sBAAA,iCAAomBlB,aAAgBoB,OAAA,SAAA5C,YAAA,cAAAhF,KAAA,OAAA6H,OAAA,SAAAC,IAAA,OAA0FQ,iBAAoB1G,OAAA,SAAA5L,KAAA,QAAgC6G,SAAYE,MAAA,QAAA/B,MAAA,QAAAwD,eAAA,iBAAAlB,kBAAA,8BAAAmB,mBAAA,qBAAAmG,kBAAA,qCtMoi7Bl1C2D,KACA,SAAUj+I,EAAQC,GuMri7BxBD,EAAAC,SAAkB29I,qBAAuB/S,MAAA,6BAAAoJ,QAA+CtqG,EAAA,WAAAK,EAAA,GAAAS,EAAA,UAAmCozG,MAAS5J,OAAA,cAAAsH,KAAA,qDAAkFxP,aAAgBmP,IAAA,oBAAyB4C,UAAaxM,SAAA,WAAAoK,QAAA,OAAAhL,MAAA,QAAA+B,MAAA,SAAuEsL,WAAcnC,wBAAA,0BAAAC,UAAA,cAAAC,oBAAA,wBAAAC,iBAAA,mBAAAC,sBAAA,wBAAAtG,KAAA,QAAgOrE,MAAS6K,YAAA,OAAAC,sBAAA,cAAAC,qBAAA,aAAAC,cAAA,cAAAC,kBAAA,UAAAC,iBAAA,SAAAC,eAAA,OAAAC,gBAAA,uBAAAC,cAAA,sBAAAC,cAAA,OAAAC,iBAAA,SAAAC,qBAAA,aAAAC,oBAAA,YAAAC,KAAA,OAAAC,OAAA,SAAAC,MAAA,QAAAC,UAAA,YAAAC,SAAA,kBAAAxL,QAAA,UAAAjB,MAAA,QAAAwK,IAAA,MAAAkC,sBAAA,iCAAomBlB,aAAgBoB,OAAA,SAAA5C,YAAA,cAAAhF,KAAA,OAAA6H,OAAA,SAAAC,IAAA,OAA0FQ,iBAAoB1G,OAAA,SAAA5L,KAAA,QAAgC6G,SAAYE,MAAA,QAAA/B,MAAA,QAAAwD,eAAA,iBAAAlB,kBAAA,8BAAAmB,mBAAA,qBAAAmG,kBAAA,qCvM2i7Bl1C4D,KACA,SAAUl+I,EAAQC,GwM5i7BxBD,EAAAC,SAAkBk+I,uBAAyBC,oBAAA,qDAAArS,YAAA,sBAAAsS,oBAAA,0BxMkj7BrCC,KACA,SAAUt+I,EAAQC,GyMnj7BxBD,EAAAC,SAAkBk+I,uBAAyBC,oBAAA,qDAAArS,YAAA,sBAAAsS,oBAAA,0BzMyj7BrCE,KACA,SAAUv+I,EAAQC,G0M1j7BxBD,EAAAC,SAAkBu+I,sBAAwB3T,MAAA,yBAAA4T,QAAA,UAAAxF,GAAA,oBAAAyF,SAAA,WAAAC,kBAAA,cAAAC,OAA+I3F,GAAA,KAAAvI,MAAA,QAAAsI,QAAA,WAA8CpM,SAAY+E,QAAA,gD1Mgk7B7OkN,KACA,SAAU7+I,EAAQC,G2Mjk7BxBD,EAAAC,SAAkBu+I,sBAAwB3T,MAAA,yBAAA4T,QAAA,UAAAxF,GAAA,oBAAAyF,SAAA,WAAAC,kBAAA,cAAAC,OAA+I3F,GAAA,KAAAvI,MAAA,QAAAsI,QAAA,WAA8CpM,SAAY+E,QAAA,gD3Muk7B7OmN,KACA,SAAU9+I,EAAQC,G4Mxk7BxBD,EAAAC,SAAkB8+I,sBAAwBlU,MAAA,iCAAAoJ,QAAmDtqG,EAAA,gBAAAK,EAAA,kBAAAS,EAAA,gBAAAkB,EAAA,cAA+E6oG,WAAc7qG,EAAA,iBAAAK,EAAA,gBAAAS,EAAA,eAAAkB,EAAA,mBAAkF0lG,MAASoB,MAAA,QAAA/B,MAAA,QAAA7F,MAAA,QAAAuK,OAAA,SAAAvC,SAAA,WAAAuJ,qBAAA,sBAAA4C,SAAA,WAAA1N,SAAA,MAAAmD,KAAA,OAAAwK,MAAA,MAAAC,KAAA,KAAAC,MAAA,MAAAC,OAAA,QAA0OzN,QAAA,sB5M8k7Bzf0N,KACA,SAAUr/I,EAAQC,G6M/k7BxBD,EAAAC,SAAkB8+I,sBAAwBlU,MAAA,iCAAAoJ,QAAmDtqG,EAAA,gBAAAK,EAAA,kBAAAS,EAAA,gBAAAkB,EAAA,cAA+E6oG,WAAc7qG,EAAA,iBAAAK,EAAA,gBAAAS,EAAA,eAAAkB,EAAA,mBAAkF0lG,MAASoB,MAAA,QAAA/B,MAAA,QAAA7F,MAAA,QAAAuK,OAAA,SAAAvC,SAAA,WAAAuJ,qBAAA,sBAAA4C,SAAA,WAAA1N,SAAA,MAAAmD,KAAA,OAAAwK,MAAA,MAAAC,KAAA,KAAAC,MAAA,MAAAC,OAAA,QAA0OzN,QAAA,sB7Mql7Bzf2N,KACA,SAAUt/I,EAAQC,G8Mtl7BxBD,EAAAC,SAAkBs/I,iBAAmBC,OAASC,WAAA,cAAAC,YAAA,eAAAC,WAAA,aAAAC,cAAA,gBAAAC,aAAA,eAAAC,UAAA,aAAwK5U,OAAUqB,OAAA,SAAAwT,MAAA,QAAAnL,KAAA,OAAAoL,aAAA,gBAA8E3O,MAASuD,KAAA,OAAAqL,MAAA,QAAAjL,KAAA,W9M4l7BjTkL,KACA,SAAUlgJ,EAAQC,G+M7l7BxBD,EAAAC,SAAkBs/I,iBAAmBC,OAASC,WAAA,iBAAAC,YAAA,kBAAAC,WAAA,kBAAAC,cAAA,kBAAAC,aAAA,kBAAAC,UAAA,mBAA8L5U,OAAUqB,OAAA,SAAAwT,MAAA,WAAAnL,KAAA,UAAAoL,aAAA,iBAAqF3O,MAASuD,KAAA,OAAAqL,MAAA,QAAAjL,KAAA,W/Mmm7B9UmL,KACA,SAAUngJ,EAAQC,GgNpm7BxBD,EAAAC,SAAkBmgJ,SAAWvV,MAAA,aAAA+B,SAAgCyT,MAAA,8DAAAC,QAAgFzV,MAAA,+BAAA0V,GAAA,wDAAAC,GAAA,qBAA6HpU,QAAWM,MAAA,QAAA+T,KAAA,OAAAC,MAAA,yBAA8D3U,aAAgB2D,KAAA,OAAArE,MAAA,QAAAuB,QAAA,gChN0m7B7V+T,KACA,SAAU3gJ,EAAQC,GiN3m7BxBD,EAAAC,SAAkBmgJ,SAAWvV,MAAA,aAAA+B,SAAgCyT,MAAA,8DAAAC,QAAgFzV,MAAA,+BAAA0V,GAAA,wDAAAC,GAAA,qBAA6HpU,QAAWM,MAAA,QAAA+T,KAAA,OAAAC,MAAA,yBAA8D3U,aAAgB2D,KAAA,OAAArE,MAAA,QAAAuB,QAAA,gCjNin7B7VgU,KACA,SAAU5gJ,EAAQC,GkNln7BxBD,EAAAC,SAAkByvI,KAAA,kCAAAmR,MAAiDC,MAAQ5T,QAAA,UAAA6T,OAAA,WAAuCC,MAAStR,KAAA,aAAAuR,SAAA,WAAA/T,SAAqDwC,KAAA,UAAApC,cAAA,gBAAAF,QAAA,UAAAG,SAAA,WAAAF,SAAA,YAAiH6T,WAAcxR,KAAA,YAAAyR,UAAA,YAAAC,SAAA,WAAAjQ,SAAA,WAAAwI,YAAA,cAAA0H,QAAA,UAAAC,iBAAA,mBAAAC,IAAA,MAAAC,YAAA,mBAAAC,WAAA,aAAAvQ,IAAA,MAAAwQ,OAAA,SAAA7J,UAAA,WAAAgG,KAAA,QAAuT8D,cAAA,eAAAC,OAAA,SAAAC,MAAA,QAAAC,SAAA,WAAAC,UAAA,YAAAC,MAAwHtS,KAAA,OAAAuS,KAAA,uBAAAC,SAAA,kBAAAC,qBAAA,qCAAoIC,qBAAA,eAAAC,SAAA,aAA8DC,OAAUvB,QAAUwB,IAAA,4CAAA9zF,IAAA,UAAAC,GAAA,QAA8E8zF,UAAA,45UlNwn7B5/BC,KACA,SAAUziJ,EAAQC,GmNzn7BxBD,EAAAC,SAAkByvI,KAAA,kCAAAmR,MAAiDC,MAAQ5T,QAAA,UAAA6T,OAAA,WAAuCC,MAAStR,KAAA,aAAAuR,SAAA,WAAA/T,SAAqDwC,KAAA,UAAApC,cAAA,gBAAAF,QAAA,UAAAG,SAAA,WAAAF,SAAA,YAAiH6T,WAAcxR,KAAA,YAAAyR,UAAA,YAAAC,SAAA,WAAAjQ,SAAA,WAAAwI,YAAA,cAAA0H,QAAA,UAAAC,iBAAA,mBAAAC,IAAA,MAAAC,YAAA,mBAAAC,WAAA,aAAAvQ,IAAA,MAAAwQ,OAAA,SAAA7J,UAAA,WAAAgG,KAAA,QAAuT8D,cAAA,eAAAC,OAAA,SAAAC,MAAA,QAAAC,SAAA,WAAAC,UAAA,YAAAC,MAAwHtS,KAAA,OAAAuS,KAAA,uBAAAC,SAAA,kBAAAC,qBAAA,qCAAoIC,qBAAA,eAAAC,SAAA,aAA8DC,OAAUvB,QAAUwB,IAAA,4CAAA9zF,IAAA,UAAAC,GAAA,QAA8E8zF,UAAA,45UnN+n7B5/BE,KACA,SAAU1iJ,EAAQC,GoNho7BxBD,EAAAC,SAAkB0iJ,OAAS9X,MAAA,QAAA+X,aAAA,eAAAhW,SAAyDiW,aAAA,uFAAwDC,gBAAA,sHAAqL5X,OAAU6X,aAAeC,GAAA,cAAAC,IAAA,qBAA6CC,WAAA,UAAuBnX,aAAgBV,MAAA,gBAAA8X,SAAA,YAA8CrmF,SAAYgkF,KAAA,wBAAAqC,SAAA,oBAA6DC,UAAA,epNso7B/hBC,KACA,SAAUrjJ,EAAQC,GqNvo7BxBD,EAAAC,SAAkB0iJ,OAAS9X,MAAA,QAAA+X,aAAA,eAAAhW,SAAyDiW,aAAA,+EAAwCC,gBAAA,uHAA8L5X,OAAU6X,aAAeC,GAAA,kBAAAC,IAAA,qBAAiDC,WAAA,eAA4BnX,aAAgBV,MAAA,cAAA8X,SAAA,SAAyCrmF,SAAYgkF,KAAA,4BAAAqC,SAAA,uBAAoEC,UAAA,qBrN6o7BniBE,KACA,SAAUtjJ,EAAQC,GsN9o7BxBD,EAAAC,SAAkBsjJ,iBAAmB3W,SAAW4W,QAAA,8BAAuCnD,OAAUoD,eAAA,0BAAAC,qBAAA,6CAAAC,iBAAA,8CAA+KvX,QAAWC,KAAA,QAAcuX,OAAUC,aAAA,eAAAC,aAAA,eAAAC,oBAAA,uBAAwGhY,aAAgB8X,aAAA,eAAAC,aAAA,eAAAC,oBAAA,uBAAwGlZ,MAAA,qBtNop7B7gBmZ,KACA,SAAUhkJ,EAAQC,GuNrp7BxBD,EAAAC,SAAkBsjJ,iBAAmB3W,SAAW4W,QAAA,8BAAuCnD,OAAUoD,eAAA,0BAAAC,qBAAA,6CAAAC,iBAAA,8CAA+KvX,QAAWC,KAAA,QAAcuX,OAAUC,aAAA,eAAAC,aAAA,eAAAC,oBAAA,uBAAwGhY,aAAgB8X,aAAA,eAAAC,aAAA,eAAAC,oBAAA,uBAAwGlZ,MAAA,qBvN2p7B7gBoZ,KACA,SAAUjkJ,EAAQC,GwN5p7BxBD,EAAAC,SAAkBikJ,QAAUpJ,MAAQ5P,MAAA,6BAAAiZ,YAAA,gBAAAC,eAAA,iBAAAC,SAAA,oBAAAjY,QAA8IkY,IAAA,aAAAC,MAAA,YAAA5U,OAAA,SAAA6U,QAAA,UAAAC,QAAA,WAAAC,WAAA,iBAAApY,KAAA,QAA8IqY,QAAWjV,KAAA,OAAAS,WAAA,aAAAC,WAAA,cAAkEkS,OAAUgC,KAAOrQ,OAAA,kCAAA2Q,MAAA,OAAAN,IAAA,SAAA/X,OAAA,WAA4FoD,QAAWsE,OAAA,wCAAAxlF,IAAA,MAAAC,GAAA,MAAuEm2F,WAAc5Q,OAAA,sCAAAxlF,IAAA,MAAAC,GAAA,QAAuE7rC,QAAWqoH,MAAA,sBAAA4Z,aAAA,0MAAoMxC,OAA4DjC,OAAShU,MAAQyB,KAAA,mEAAAr/E,IAAA,iBAAAC,GAAA,OAA4Gq2F,SAAYjX,KAAA,8FAAAr/E,IAAA,sBAAAC,GAAA,0BAA+Js2F,aAAgBC,KAAA,8FAA6FC,MAAA,kEAA0Ez2F,IAAA,aAAAC,GAAA,mBAAkDy2F,cAAiBrX,KAAA,oFAAAzB,KAAA,sBAAA+Y,UAAA,wBAAA7Y,OAAA,WAA+K0V,MAASnU,KAAA,8BAAAuX,KAAA,uBAAkEC,SAAYza,MAAA,8BAAA0a,aAAqDC,YAAA,cAAAza,KAAA,gBAAA0a,QAAA,WAAuEC,YAAA,cAAAC,kBAAA,+BAAAC,iBAAA,uDAAAC,aAAA,sDAAA/rF,KAAA,OAAA8qF,OAAsPpN,MAAQtM,MAAA,kBAAAiQ,OAAA,2CAA6E2K,OAAU5a,MAAA,yBAAAa,YAAA,gCAA8Ega,QAAW7a,MAAA,0BAAAa,YAAA,iCAAgFia,UAAa9a,MAAA,YAAAa,YAAA,iCAAkEka,WAAc/a,MAAA,6CAAAa,YAAA,0EAA4IlB,OAAUK,MAAA,cAAAa,YAAA,yCAA4E8G,UAAa3H,MAAA,iBAAAa,YAAA,mCAAyEma,gBAAmBhb,MAAA,mBAAAa,YAAA,uCAA+EvzB,IAAO0yB,MAAA,KAAAa,YAAA,iDAA2Eoa,YAAejb,MAAA,eAAAa,YAAA,0BAA8Dqa,mBAAsBlb,MAAA,uBAAAa,YAAA,gCAA4Esa,UAAaC,2BAAA,qBAAA1Z,SAA6DjlE,MAAA,uCAA8C09E,MAASkB,IAAA,gBAAAC,IAAA,WAAAC,MAAA,kBxNkq7BjsGC,KACA,SAAU1mJ,EAAQC,GyNnq7BxBD,EAAAC,SAAkBikJ,QAAUpJ,MAAQ5P,MAAA,qBAAAiZ,YAAA,sBAAAC,eAAA,qBAAAC,SAAA,sBAAAjY,QAAkJkY,IAAA,aAAAC,MAAA,SAAA5U,OAAA,OAAA6U,QAAA,cAAAC,QAAA,SAAAC,WAAA,gBAAApY,KAAA,UAA4IqY,QAAWjV,KAAA,aAAAS,WAAA,SAAAC,WAAA,QAA8DkS,OAAUgC,KAAOrQ,OAAA,0BAAA2Q,MAAA,QAAAN,IAAA,QAAA/X,OAAA,WAAoFoD,QAAWsE,OAAA,mCAAAxlF,IAAA,MAAAC,GAAA,OAAmEm2F,WAAc5Q,OAAA,sCAAAxlF,IAAA,MAAAC,GAAA,SAAwE7rC,QAAWqoH,MAAA,eAAA4Z,aAAA,sNAAqMxC,OAAgEjC,OAAShU,KAAA,0EAAgF0Y,SAAYjX,KAAA,8FAAAr/E,IAAA,uBAAAC,GAAA,gCAAsKs2F,aAAgBC,KAAA,mHAAkHC,MAAA,2EAAoFz2F,IAAA,eAAAC,GAAA,iBAAiDy2F,cAAiBrX,KAAA,6FAAAzB,KAAA,sBAAA+Y,UAAA,oBAAA7Y,OAAA,YAAqL0V,MAASnU,KAAA,8BAAAuX,KAAA,uBAAkEC,SAAYza,MAAA,mCAAA0a,aAA0DC,YAAA,SAAAza,KAAA,eAAA4b,KAAA,gBAAAlB,QAAA,kBAA+FC,YAAA,cAAAC,kBAAA,kCAAAC,iBAAA,yDAAAC,aAAA,gEAAA/rF,KAAA,OAAA8qF,OAAqQpN,MAAQtM,MAAA,qBAAAiQ,OAAA,wBAA6D2K,OAAU5a,MAAA,oCAAAa,YAAA,2CAAoGga,QAAW7a,MAAA,mCAAAa,YAAA,0CAAkGia,UAAa9a,MAAA,SAAAa,YAAA,8BAA4Dka,WAAc/a,MAAA,+BAAAa,YAAA,kFAAsIlB,OAAUK,MAAA,QAAAa,YAAA,gCAA6D8G,UAAa3H,MAAA,eAAAa,YAAA,kCAAsEma,gBAAmBhb,MAAA,eAAAa,YAAA,gCAAoEvzB,IAAO0yB,MAAA,KAAAa,YAAA,mDAA6Eoa,YAAejb,MAAA,eAAAa,YAAA,0BAA8Dqa,mBAAsBlb,MAAA,uBAAAa,YAAA,gCAA4Esa,UAAaC,2BAAA,0BAAA1Z,SAAkEjlE,MAAA,2BAAkC09E,MAASkB,IAAA,eAAAC,IAAA,UAAAC,MAAA,qBzNyq7BttGG,KACA,SAAU5mJ,EAAQC,G0N1q7BxBD,EAAAC,SAAkBghJ,UAAYpW,MAAA,eAAAsC,SAAA,yDAAAf,QAAqG39E,IAAA,MAAAg+E,SAAA,WAAAoa,WAAA,aAAAta,OAAA,UAA8EK,SAAYka,gBAAA,+EAAAC,mBAAA,oFAAmKC,cAAA,uE1Ngr7B1XC,KACA,SAAUjnJ,EAAQC,G2Njr7BxBD,EAAAC,SAAkBghJ,UAAYpW,MAAA,eAAAsC,SAAA,yDAAAf,QAAqG39E,IAAA,OAAYm+E,SAAYka,gBAAA,mF3Nur7BrJI,KACA,SAAUlnJ,EAAQC,G4Nxr7BxBD,EAAAC,SAAkBknJ,gBAAkBzW,MAAA,QAAA0W,YAAA,cAAAC,UAAA,cAAA1S,MAAA,QAAAsQ,KAAA,OAAAqC,UAAA,YAAAC,aAAA,eAAAC,OAAmKC,MAAA,aAAAC,IAAA,iBAAAC,IAAA,cAAAtc,OAAyEuc,MAAA,uBAAAC,KAAA,uBAA4DxZ,OAAUuZ,MAAA,sBAAAC,KAAA,sBAA0DC,OAAUF,MAAA,sBAAAC,KAAA,uBAA2Dzb,QAAW2b,IAAA,MAAA3H,QAAA,aAAAhI,QAAA,UAAA4P,KAAA,mB5N8r7B1dC,KACA,SAAUjoJ,EAAQC,G6N/r7BxBD,EAAAC,SAAkBknJ,gBAAkBzW,MAAA,QAAA0W,YAAA,cAAAC,UAAA,cAAA1S,MAAA,QAAAsQ,KAAA,OAAAqC,UAAA,YAAAC,aAAA,eAAAC,OAAmKC,MAAA,aAAAC,IAAA,iBAAAC,IAAA,cAAAtc,OAAyEuc,MAAA,uBAAAC,KAAA,uBAA4DxZ,OAAUuZ,MAAA,sBAAAC,KAAA,sBAA0DC,OAAUF,MAAA,sBAAAC,KAAA,uBAA2Dzb,QAAW2b,IAAA,MAAA3H,QAAA,aAAAhI,QAAA,UAAA4P,KAAA,mB7Nqs7B1dE,KACA,SAAUloJ,EAAQC,G8Nts7BxBD,EAAAC,SAAkBkoJ,cAAgBtd,MAAA,eAAA+B,SAAkC0T,QAAUzV,MAAA,6BAAA0V,GAAA,iHAA0JnU,QAAWgc,WAAA,oBAAAC,KAAA,OAAAC,SAAA,WAAAC,OAAA,qBAAAjc,KAAA,OAAAkc,OAAA,UAAAC,WAAA,iBAAiKC,OAAUC,QAAU9d,MAAA,uBAAAsC,SAAA,2BAAAyb,WAAkF/d,MAAA,sBAA6Bge,WAAche,MAAA,kBAAAsC,SAAA,+CAAmF2b,QAAWje,MAAA,mBAAAsC,SAAA,qCAAAyb,WAAwF/d,MAAA,iBAAAsC,SAAA,sCAAyE0b,WAAche,MAAA,mBAAAsC,SAAA,4DAAiGjC,OAAUK,QAAA,UAAAC,QAAA,UAAAC,MAAA,QAAAC,KAAA,OAAAC,QAAA,UAAAC,YAAA,cAAAC,aAAA,eAAAC,OAAA,0BAAsLsW,sBAAyBvX,MAAA,uBAAAke,KAAA,6q5BAAo3jB7d,OAAw2VvhG,EAAA,oBAAAK,EAAA,yBAAoDq2G,MAAA,qD9N4s7Bt37B2I,KACA,SAAUhpJ,EAAQC,G+N7s7BxBD,EAAAC,SAAkBkoJ,cAAgBtd,MAAA,uBAAA+B,SAA0C0T,QAAUzV,MAAA,6BAAA0V,GAAA,iHAA0JnU,QAAWgc,WAAA,oBAAAC,KAAA,OAAAC,SAAA,WAAAC,OAAA,qBAAAjc,KAAA,OAAAkc,OAAA,UAAAC,WAAA,iBAAiKC,OAAUC,QAAU9d,MAAA,uBAAAsC,SAAA,2BAAAyb,WAAkF/d,MAAA,sBAA6Bge,WAAche,MAAA,kBAAAsC,SAAA,+CAAmF2b,QAAWje,MAAA,mBAAAsC,SAAA,qCAAAyb,WAAwF/d,MAAA,iBAAAsC,SAAA,sCAAyE0b,WAAche,MAAA,mBAAAsC,SAAA,4DAAiGjC,OAAUK,QAAA,UAAAC,QAAA,UAAAC,MAAA,QAAAC,KAAA,OAAAC,QAAA,UAAAC,YAAA,cAAAC,aAAA,eAAAC,OAAA,0BAAsLsW,sBAAyBvX,MAAA,uBAAAke,KAAA,6q5BAAo3jB7d,OAAw2VvhG,EAAA,oBAAAK,EAAA,yBAAoDq2G,MAAA,qD/Nmt7B937BzxC,IACA,SAAU5uG,EAAQC,EAASsI,GAEjC,YgOrt7BAQ,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,GAC9C,IAAA6D,GAAa1E,EAAQ,GACrBwb,EAAA,WACA,QAAAA,MAEA,MAAAA,KAEAA,GAAAlF,aACKC,KAAA7R,EAAAg8I,aAGLllI,EAAAtE,eAAA,WAAmD,UACnDxf,EAAA8jB,wBhO4t7BMmrF,IACA,SAAUlvG,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO4gJ,IAC9E,IAAIljI,GAA8Czd,EAAoB,GACvF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GiOhv7BhEyhI,EAAA,mBAAAA,MAwBA,MAtBCA,GAAAv+I,UAAAw+I,MAAA,SAAM/nI,EAAchY,EAAsBggJ,OAAA,KAAAA,MAAA,GACzC,IAAIzkG,GAAO,GAAIhtB,KACfgtB,GAAK0kG,QAAQ1kG,EAAK/sB,UAAoB,GAAPwxH,EAAY,GAAK,GAAK,IACrD,IAAIE,GAAU,aAAe3kG,EAAK4kG,aAClCjgJ,UAASkgJ,OAASpoI,EAAO,IAAMhY,EAAQkgJ,EAAU,YAGlDJ,EAAAv+I,UAAA0V,KAAA,SAAKe,GAEJ,IAAK,GADDqoI,GAASroI,EAAO,IAAKsoI,EAAKpgJ,SAASkgJ,OAAOt3G,MAAM,KAC3CvlC,EAAI,EAAGA,EAAI+8I,EAAGh9I,OAAQC,IAAK,CAEnC,IADA,GAAI6a,GAAIkiI,EAAG/8I,GACW,KAAf6a,EAAEwT,OAAO,IACfxT,EAAIA,EAAEu0C,UAAU,EAAGv0C,EAAE9a,OACtB,IAAyB,GAArB8a,EAAErb,QAAQs9I,GACb,MAAOjiI,GAAEu0C,UAAU0tF,EAAO/8I,OAAQ8a,EAAE9a,QAEtC,MAAO,OAGRw8I,EAAAv+I,UAAAw+B,MAAA,SAAM/nB,GACL/S,KAAK86I,MAAM/nI,EAAM,IAAK,IAtBX8nI,EAAa9hI,GADzBre,OAAAid,EAAA,eACYkjI,OjOqx7BP75C,IACA,SAAUrvG,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOqhJ,IAC9E,IAAI3jI,GAA8Czd,EAAoB,GAClEqhJ,EAA0DrhJ,EAAoB,IAC9EshJ,EAA0DthJ,EAAoB,IACnGqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IkOjy7B1G4hI,EAAA,SAAA1hI,GACC,QAAA0hI,GAAmBG,GAAnB,GAAAp4I,GACCuW,EAAApd,KAAAwD,OAAOA,IlO8y7BD,OkO/y7BYqD,GAAAo4I,YlO+y7BLp4I,EkOhz7B0BkV,EAAA+iI,EAAA1hI,ElOkz7BrC,IAAI6C,EkO9y7BR,OAJa6+H,GAAmBviI,GAL/Bre,OAAAid,EAAA,YACA/G,SAAU,wBACVE,SATU,mIASMK,QANL,iNAOXsO,gBAAiB9H,EAAA,wBAAwB+H,SlO2z7BlClG,EAAW,qBkOxz7BwB,mBlOwz7BMiD,MkOxz7BN,KAAZ8+H,EAAA,GAAAA,EAAA,IAAY9+H,GAAA/hB,UAD9B4gJ,IAA4BE,EAAA,IlOk07BnC77G,GACA,SAAUhuC,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOyhJ,IAC9E,IAAI/jI,GAA8Czd,EAAoB,GACvF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,ImOz17B1GgiI,EAAA,WAEC,QAAAA,MAkFD,MA9ECA,GAAAp/I,UAAA22C,IAAA,SAAIxc,GACH,GAAIklH,GAAiB,mCAOrB,OANI17I,SAAUA,OAAO27I,oBAAsB37I,OAAO27I,mBAAmBD,SACpEA,EAAS17I,OAAO27I,mBAAmBD,QAEI,KAApCA,EAAOhvH,OAAOgvH,EAAOt9I,OAAS,KACjCs9I,GAAU,KAEJA,EAASllH,GAGjBilH,EAAAp/I,UAAAu/I,KAAA,SAAKplH,GAEJ,GAEIyc,IAFsBjzC,QAAUA,OAAO27I,oBAAsB37I,OAAO27I,mBAAmBE,oBACxF77I,OAAO27I,mBAAmBE,mBACP,GAOtB,OANI77I,SAAUA,OAAO27I,oBAAsB37I,OAAO27I,mBAAmBE,oBAA8C,GAAvBrlH,EAAI34B,QAAQ,UACvGo1C,EAAUjzC,OAAO27I,mBAAmBE,oBAEhC5oG,EAAQ70C,OAAS,GAA6C,KAAtC60C,EAAQvmB,OAAOumB,EAAQ70C,OAAS,KAC5D60C,GAAW,KAELA,EAAUzc,GAGlBilH,EAAAp/I,UAAAy/I,cAAA,WAEC,GAAIC,GAAmB,kCAMvB,OALI/7I,SAAUA,OAAOmsC,UAAansC,OAAOmsC,SAAS5O,KAAK1/B,QAAQ,YAAc,IAC5Ek+I,EAAmB,mCAEJ/7I,QAAUA,OAAO27I,oBAAsB37I,OAAO27I,mBAAmBK,UAC9Eh8I,OAAO27I,mBAAmBK,UAAYD,GAI1CN,EAAAp/I,UAAA4/I,qBAAA,WAEC,GAAIC,GAAa,0CAMjB,OALIl8I,SAAUA,OAAOmsC,UAAansC,OAAOmsC,SAAS5O,KAAK1/B,QAAQ,YAAc,IAC5Eq+I,EAAa,2CAEEl8I,QAAUA,OAAO27I,oBAAsB37I,OAAO27I,mBAAmBQ,iBAC9En8I,OAAO27I,mBAAmBQ,iBAAmBD,GAIjDzhJ,OAAAI,eAAI4gJ,EAAAp/I,UAAA,anOm17BG0F,ImOn17BP,WAEC,GAAIm6I,GAAa,iCAMjB,OALIl8I,SAAUA,OAAOmsC,UAAansC,OAAOmsC,SAAS5O,KAAK1/B,QAAQ,YAAc,IAC5Eq+I,EAAa,kCAEEl8I,QAAUA,OAAO27I,oBAAsB37I,OAAO27I,mBAAmBS,aAC9Ep8I,OAAO27I,mBAAmBS,aAAeF,GnOq17BtC15I,YAAY,EACZC,cAAc,ImOl17BrBhI,OAAAI,eAAI4gJ,EAAAp/I,UAAA,qBnOq17BG0F,ImOr17BP,WAIC,MAFgB/B,SAAUA,OAAO27I,oBAAsB37I,OAAO27I,mBAAmBU,YAC9Er8I,OAAO27I,mBAAmBU,YAFZ,oCnO017BX75I,YAAY,EACZC,cAAc,ImOr17BrBhI,OAAAI,eAAI4gJ,EAAAp/I,UAAA,gBnOw17BG0F,ImOx17BP,WAIC,MAFgB/B,SAAUA,OAAO27I,oBAAsB37I,OAAO27I,mBAAmBW,gBAC9Et8I,OAAO27I,mBAAmBW,gBAFZ,qFnO617BX95I,YAAY,EACZC,cAAc,ImOx17BrBhI,OAAAI,eAAI4gJ,EAAAp/I,UAAA,mCnO217BG0F,ImO317BP,WAIC,MAFgB/B,SAAUA,OAAO27I,oBAAsB37I,OAAO27I,mBAAmBU,YAC9Er8I,OAAO27I,mBAAmBU,YAFZ,wEnOg27BX75I,YAAY,EACZC,cAAc,ImOh77BTg5I,EAAU3iI,GADtBre,OAAAid,EAAA,cnOq77BO6B,EAAW,yBmOp77BNkiI,OnO677BPl6C,IACA,SAAU7vG,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOuiJ,IAC9E,IAAI7kI,GAA8Czd,EAAoB,GAClEqhJ,EAA0DrhJ,EAAoB,IAC9EshJ,EAA0DthJ,EAAoB,IACnGqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IoO967B1G8iI,EAAA,SAAA5iI,GAKC,QAAA4iI,GAAmBf,GAAnB,GAAAp4I,GACCuW,EAAApd,KAAAwD,OAAOA,IpOg87BD,OoOj87BYqD,GAAAo4I,YpOi87BLp4I,EoOt87B0BkV,EAAAikI,EAAA5iI,GASxC4iI,EAAAlgJ,UAAA+H,SAAA,WACIrE,KAAKy8I,oBACPz8I,KAAKjF,MAAQiF,KAAKy8I,oBAIpBD,EAAAlgJ,UAAA6e,gBAAA,WACC,GAAGnb,KAAKy8I,kBAAmB,CAC1B,GAAMC,GAA0B18I,KAAK9B,MAAMkG,aAC3C4F,YAAW,WACV0yI,EAAMvvF,QACNuvF,EAAMznF,UACJ,KAILunF,EAAAlgJ,UAAAqgJ,cAAA,SAAc18D,GACb,GAAI1pE,KACJ,IAAmB,MAAf0pE,EAAI1pE,QACP,IAAK,GAAIjY,GAAI,EAAGA,EAAI2hF,EAAI1pE,QAAQlY,OAAQC,IACvCiY,EAAQ0pE,EAAI1pE,QAAQjY,KAAM,CAC5B,OAAOiY,IAGRimI,EAAAlgJ,UAAAsgJ,aAAA,WACC,IAAe,GAAA3jH,GAAA,EAAAxc,EAAAzc,KAAK68I,QAAL5jH,EAAAxc,EAAApe,OAAA46B,IAAc,CAAzB,GAAIgnD,GAAGxjE,EAAAwc,EACO,OAAbgnD,EAAI3gE,QACP2gE,EAAI3gE,MAAMtf,KAAKjF,OACfiF,KAAKqf,WAKRm9H,EAAAlgJ,UAAAgjB,MAAA,SAAM2gE,GACY,MAAbA,EAAI3gE,OACP2gE,EAAI3gE,MAAMtf,KAAKjF,OACZklF,EAAI5gE,OAAsB,GAAb4gE,EAAI5gE,OACpBrf,KAAKqf,QpO877BJ,IAAI5C,GAAIC,CoO577BZ,OA7C0B3D,IAAxBre,OAAAid,EAAA,WAAU,cpO4+7BJ6B,EAAW,coO5+7BwB,mBpO4+7BDiD,MoO5+7BC,KAAV9E,EAAA,YAAAA,EAAA,aAAU8E,GAAA/hB,SpO6+7BpC8hJ,EAAoBlgJ,UAAW,YAAS,IoOh/7BlCkgJ,EAAmBzjI,GAL/Bre,OAAAid,EAAA,YACA/G,SAAU,wBACVE,SAtCU,mfAsCMK,QAxBL,gsCAyBXsO,gBAAiB9H,EAAA,wBAAwB+H,SpOy/7BlClG,EAAW,qBoOl/7BwB,mBpOk/7BMkD,MoOl/7BN,KAAZ6+H,EAAA,GAAAA,EAAA,IAAY7+H,GAAAhiB,UAL9B8hJ,IAA4BhB,EAAA,IpOgg8BnC/5C,IACA,SAAU9vG,EAAQsI,EAAqBC,GAE7C,YqO5i8BAA,GAAAE,EAAAH,EAAA,qBAAA6iJ,IAAA,IAAYA,IAAZ,SAAYA,GACXA,IAAA,iBACAA,IAAA,mBACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,mCAEAA,IAAA,iBACAA,IAAA,oCARWA,YrO4j8BNn7C,IACA,SAAUhwG,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO8iJ,IAC9E,IAAIplI,GAA8Czd,EAAoB,GAClE8iJ,EAA0D9iJ,EAAoB,IACnGqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IsOtk8B1GqjI,EAAA,SAAAnjI,GACI,QAAAmjI,KtO+k8BI,MsO9k8BAnjI,GAAApd,KAAAwD,OAAOA,KAEf,MAJkDuY,GAAAwkI,EAAAnjI,GAArCmjI,EAA4BhkI,GAPxCre,OAAAid,EAAA,YACG/G,SAAU,wBACVE,SAVO,0MAWPK,QANS,0JAOTsO,gBAAiB9H,EAAA,wBAAwB+H,StO4l8BrClG,EAAW,yBsOzl8BNujI,IAAqCC,EAAA,ItOkm8B5Cp7C,IACA,SAAUjwG,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOgjJ,IAC9E,IAAItlI,GAA8Czd,EAAoB,GAClEqhJ,EAA0DrhJ,EAAoB,IAC9EshJ,EAA0DthJ,EAAoB,IACnGqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuO9l8B1GujI,EAAA,SAAArjI,GAEC,QAAAqjI,GAAmBxB,GAAnB,GAAAp4I,GACCuW,EAAApd,KAAAwD,OAAOA,IvO+m8BD,OuOhn8BYqD,GAAAo4I,YvOgn8BLp4I,EuOln8B2BkV,EAAA0kI,EAAArjI,GAMzCqjI,EAAA3gJ,UAAAqgJ,cAAA,SAAc18D,GACb,GAAI1pE,KACJ,IAAmB,MAAf0pE,EAAI1pE,QACP,IAAK,GAAIjY,GAAI,EAAGA,EAAI2hF,EAAI1pE,QAAQlY,OAAQC,IACvCiY,EAAQ0pE,EAAI1pE,QAAQjY,KAAM,CAC5B,OAAOiY,IAGR0mI,EAAA3gJ,UAAAgjB,MAAA,SAAM2gE,GACY,MAAbA,EAAI3gE,OACP2gE,EAAI3gE,QACD2gE,EAAI5gE,OAAsB,GAAb4gE,EAAI5gE,OACpBrf,KAAKqf,QvO+m8BJ,IAAI5C,EuO7m8BR,OApBawgI,GAAoBlkI,GALhCre,OAAAid,EAAA,YACA/G,SAAU,yBACVE,SAvCU,6SAuCMK,QA7BL,+mCA8BXsO,gBAAiB9H,EAAA,wBAAwB+H,SvO0o8BlClG,EAAW,qBuOto8BwB,mBvOso8BMiD,MuOto8BN,KAAZ8+H,EAAA,GAAAA,EAAA,IAAY9+H,GAAA/hB,UAF9BuiJ,IAA6BzB,EAAA,IvOip8BpC35C,IACA,SAAUlwG,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOijJ,IAC9E,IAAIvlI,GAA8Czd,EAAoB,GAClEqhJ,EAA0DrhJ,EAAoB,IAC9EshJ,EAA0DthJ,EAAoB,IACnGqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IwOpr8B1GwjI,EAAA,SAAAtjI,GAEC,QAAAsjI,GAAmBzB,GAAnB,GAAAp4I,GACCuW,EAAApd,KAAAwD,OAAOA,IxOis8BD,OwOls8BYqD,GAAAo4I,YxOks8BLp4I,EwOps8B6BkV,EAAA2kI,EAAAtjI,GAM3CsjI,EAAA5gJ,UAAAqgJ,cAAA,SAAc18D,GACb,GAAI1pE,KACJ,IAAmB,MAAf0pE,EAAI1pE,QACP,IAAK,GAAIjY,GAAI,EAAGA,EAAI2hF,EAAI1pE,QAAQlY,OAAQC,IACvCiY,EAAQ0pE,EAAI1pE,QAAQjY,KAAM,CAC5B,OAAOiY,IAGR2mI,EAAA5gJ,UAAAgjB,MAAA,SAAM2gE,GACY,MAAbA,EAAI3gE,OACP2gE,EAAI3gE,QACD2gE,EAAI5gE,OAAsB,GAAb4gE,EAAI5gE,OACpBrf,KAAKqf,QxOis8BJ,IAAI5C,EwO/r8BR,OApBaygI,GAAsBnkI,GALlCre,OAAAid,EAAA,YACA/G,SAAU,yBACVE,SA9BU,uKA8BMK,QAxBL,qyBAyBXsO,gBAAiB9H,EAAA,wBAAwB+H,SxO4t8BlClG,EAAW,qBwOxt8BwB,mBxOwt8BMiD,MwOxt8BN,KAAZ8+H,EAAA,GAAAA,EAAA,IAAY9+H,GAAA/hB,UAF9BwiJ,IAA+B1B,EAAA,IxOmu8BtCl5C,IACA,SAAU3wG,EAAQsI,EAAqBC,GAE7C,YAGA,IAAIijJ,GAAajjJ,EAAoB,GAGjCc,EAAWd,EAAoB,GAG/BkjJ,EAAaljJ,EAAoB,GAGjCmjJ,EAAmBnjJ,EAAoB,GAGvCojJ,EAAgBpjJ,EAAoB,IAGpC6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IyOjw8B1G6jI,EAAA,WASC,QAAAC,GAAoBt+I,EACXy5B,EACAxe,EACAK,GAHWxa,KAAAd,UACXc,KAAA24B,SACA34B,KAAAma,QACAna,KAAAwa,MAPTxa,KAAAy9I,WAAa,GAAIziJ,GAAA,aASjBwiJ,EAAAlhJ,UAAA+H,SAAA,cAAAhB,GAAArD,IACCA,MAAK22H,mBAAqB32H,KAAK24B,OAAO25B,OAAO33C,UAAU,WAAM,MAAAtX,GAAKq6I,oBAGnEF,EAAAlhJ,UAAAgI,YAAA,WACKtE,KAAK22H,oBAAoB32H,KAAK22H,mBAAmBC,eAGtD4mB,EAAAlhJ,UAAAkI,YAAA,SAAYC,GACPA,EAAQjJ,eAAe,WAC1BwE,KAAK29I,SAAW39I,KAAK49I,gBAAgB59I,KAAKkyG,OACtClyG,KAAK29I,WACR39I,KAAKd,QAAQkF,cAAc+pD,UAAUzlC,IAAI,WACzC1oB,KAAK09I,kBAEkB,MAApB19I,KAAKkyG,MAAMr4F,QACd7Z,KAAK69I,UAAY79I,KAAK24B,OAAOmlH,cAAc99I,KAAKkyG,MAAMr4F,OACtD7Z,KAAK09I,oBAKRF,EAAAlhJ,UAAAyhJ,YAAA,WACC,MAAkB,OAAd/9I,KAAKkyG,OAAqC,MAApBlyG,KAAKkyG,MAAMr4F,MAC7B,MACA,MAAI2R,OAAKxrB,KAAKkyG,MAAMr4F,QAG7B2jI,EAAAlhJ,UAAA0hJ,YAAA,WACC,MAAGh+I,MAAKkyG,OAASlyG,KAAKkyG,MAAM+rC,sBACpB,yBAELj+I,KAAKkyG,OAASlyG,KAAKkyG,MAAMgsC,2BACpB,8BAED,IAGRV,EAAAlhJ,UAAA6hJ,gBAAA,WACC,IAAIn+I,KAAK29I,WAAa39I,KAAKkyG,MAC1B,OAAO,CAGR,IAAGlyG,KAAKkyG,MAAM+rC,wBAA0Bj+I,KAAKkyG,MAAMj+E,OAClD,OAAO,CAGR,IAAGj0B,KAAKkyG,MAAMksC,UACb,OAAO,CAIR,KAAgB,GADZC,IAAkB,EACNplH,EAAA,EAAAxc,EAAAzc,KAAKkyG,MAAMjqG,KAAXgxB,EAAAxc,EAAApe,OAAA46B,IAAiB,CAA7B,GAAIzzB,GAAIiX,EAAAwc,EACPzzB,GAAKy4I,wBAAyBj+I,KAAKs+I,wCAAwC94I,EAAKqU,SACnFwkI,GAAkB,GAIpB,MAAOA,IAGDb,EAAAlhJ,UAAAiiJ,qCAAP,cAAAl7I,GAAArD,KAEKw+I,EAASv+I,MACVu+I,GAAEC,MACJD,EAAEC,KAAK,QAAS,gCAEjBz+I,KAAKma,MAAM+E,OAAO,6HAEjBC,MAAO,aAAcC,GAAI,gBAAiB7I,SAAU,kBACpD8I,OAAO,EACPC,MAAO,WACN,GAAIk/H,GAASv+I,MACVu+I,GAAEC,MACJD,EAAEC,KAAK,QAAS,qCAEjBp7I,EAAKs1B,OAAOgC,UAAU,QAAS,gBAIhCxb,MAAO,kBAAmBC,GAAI,WAAY7I,SAAU,kBACpD8I,OAAO,EACPC,MAAO,WACN,GAAIk/H,GAASv+I,MACVu+I,GAAEC,MACJD,EAAEC,KAAK,QAAS,kCAEdD,GAAKA,EAAEE,aACTF,EAAEE,YAAY1/D,QAAQ,WAIvB7/D,MAAO,QAASC,GAAI,QAAS7I,SAAU,kBAAmB8I,OAAO,MAI5Dm+H,EAAAlhJ,UAAAshJ,gBAAR,SAAwBxjJ,GAA2B,MAAY,OAALA,GAAuB,MAAVA,EAAE6N,MAEjEu1I,EAAAlhJ,UAAAohJ,eAAR,WACC,GAAIiB,IAAW,CACX3+I,MAAK29I,UAAY39I,KAAKkyG,MAAMjqG,MAC/B02I,EAAW3+I,KAAKkyG,MAAMr4F,OAAS7Z,KAAK24B,OAAO4vF,SAASvoH,KAAK24B,OAAOmlH,cAAqB99I,KAAKkyG,MAAMr4F,QAAQ,GACxG7Z,KAAKkyG,MAAMksC,WAAaO,GACI,MAAlB3+I,KAAK69I,YACfc,EAAW3+I,KAAKs+I,wCAAwCt+I,KAAKkyG,MAAMr4F,QAEhE7Z,KAAKkyG,MAAMj+E,QAAU0qH,IACxB3+I,KAAKkyG,MAAMj+E,OAAS0qH,EACpB3+I,KAAKwa,IAAIhP,iBAIHgyI,EAAAlhJ,UAAAgiJ,wCAAR,SAAgDzkI,GAC/C,GAAI+kI,GAAW5+I,KAAK24B,OAAOkmH,SAAS7+I,KAAK24B,OAAOlC,KAAKxH,KAAKliB,SAASqwI,EAAA,GAAgBwB,QAEnF,IAAG/kI,EAAMxb,QAAUugJ,EAASvgJ,OAC3B,OAAO,CAGR,KAAI,GAAIC,GAAI,EAAGA,EAAIub,EAAMxb,OAAQC,IAAK,CACrC,GAAIwgJ,GAAWjlI,EAAMvb,GACjBygJ,EAASH,EAAStgJ,GAAG4kD,IAGzB,KAAuB,gBAAb47F,IAAgD,MAAvBA,EAASnyH,OAAO,KAGhDmyH,IAAaC,EACf,OAAO,EAIT,OAAO,EzOov8BL,IAAItiI,GAAIC,EAAIC,EAAIC,CyOlv8BpB,OApJa4gI,GAAoBzkI,GAhBhCre,OAAAM,EAAA,YACA4V,SAAU,sBACVG,MACC6nH,iBAAkB,gBAClBomB,wBAAyB,0BACzBC,sBAAuB,qBACvBC,kBAAmB,iBACnBC,mBAAoB,mBAErBruI,SAAU5W,EAAQ,MAElBiX,QAASjX,EAAQ,OACjBkE,QAAS,SACTghJ,SAAU,cACV3/H,gBAAiBzkB,EAAA,wBAAwBqkJ,UzOy58BlC7lI,EAAW,qByO948BqB,mBzO848BSiD,MyO948BT,KAAVzhB,EAAA,YAAAA,EAAA,aAAUyhB,GAAA/hB,OAChB,mBADgBgiB,MAChB,KAAN0gI,EAAA,GAAAA,EAAA,IAAM1gI,GAAAhiB,OACK,mBADLiiB,MACK,KAAZ2gI,EAAA,GAAAA,EAAA,IAAY3gI,GAAAjiB,OACG,mBADHkiB,MACG,KAAjB5hB,EAAA,mBAAAA,EAAA,oBAAiB4hB,GAAAliB,UAZnB8iJ,MzO858BT8B,EAAcplJ,EAAoB,IAGlCqlJ,EAAerlJ,EAAoB,IAGnCslJ,EAAkBtlJ,EAAoB,IAGtCqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF6mI,EAAgCz/I,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DsmI,EAAgC1/I,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0O388B1GimI,EAAA,SAAA/lI,GAgCC,QAAAgmI,GACQtlI,EACAC,EACCC,EACAg1D,EACA/4C,EACArc,GANT,GAAA/W,GAOCuW,EAAApd,KAAAwD,KAAMsa,EAAQC,IAAYva,I1Oi98BpB,O0Ov98BCqD,GAAAiX,SACAjX,EAAAkX,cACClX,EAAAmX,MACAnX,EAAAmsE,UACAnsE,EAAAozB,MACApzB,EAAA+W,OAnCT/W,EAAAw8I,eAAyB,EAGzBx8I,EAAAy8I,WACC/sI,KAAM1P,EAAKkX,YAAYmE,UAAU,uBACjCqhI,KAAM,cACNC,SAAU,qBACV/3I,OAEE8K,KAAM1P,EAAKkX,YAAYmE,UAAU,uBACjCuhI,YAAa58I,EAAKozB,IAAIypH,oBAGtBntI,KAAM1P,EAAKkX,YAAYmE,UAAU,2BACjCuhI,YAAa58I,EAAKozB,IAAI0pH,eAGtBptI,KAAM1P,EAAKkX,YAAYmE,UAAU,uCACjCuhI,YAAa58I,EAAKozB,IAAI2pH,oCAIxBrtI,KAAM1P,EAAKkX,YAAYmE,UAAU,kCACjCqhI,KAAM,mBACNE,YAAa58I,EAAKozB,IAAI4pH,YAatBh9I,EAAKmsE,QAAQ8wE,YAAY3lI,UAAU,SAAC1S,GAAuB,MAAA5E,GAAKoT,KAAKxO,KACrE5E,EAAKmsE,QAAQ+wE,cAAc5lI,UAAU,WAAM,MAAAtX,GAAKmX,IAAIhP,iBACpDnI,EAAKmsE,QAAQgxE,aAAa7lI,UAAU,WAAM,MAAAtX,GAAKgc,UAC/Chc,EAAKw8I,cAAgBx8I,EAAK+W,KAAK68G,qB1O688BlB5zH,E0Ox/8BuBkV,EAAAqnI,EAAAhmI,GA8CrCgmI,EAAAtjJ,UAAAma,KAAA,SAAKxO,GACe,GAAfjI,KAAKi0B,QAAkBj0B,KAAK+S,MAAQ9K,EAAK8K,MAAQ/S,KAAKygJ,UAAYx4I,EAAKw4I,WAC1EzgJ,KAAKi0B,QAAS,EACdj0B,KAAK+S,KAAO9K,EAAK8K,KACjB/S,KAAKkyG,MAAQjqG,EAAKrD,MAClB5E,KAAKygJ,SAAWx4I,EAAKw4I,SACrBzgJ,KAAKwa,IAAIhP,iBAIXo0I,EAAAtjJ,UAAA+iB,MAAA,WACoB,GAAfrf,KAAKi0B,SACRj0B,KAAKi0B,QAAS,EACdj0B,KAAK+S,KAAO,KACZ/S,KAAKkyG,MAAQ,KACblyG,KAAKwa,IAAIhP,iBAIXo0I,EAAAtjJ,UAAAmhJ,WAAA,SAAWn/I,GACN0B,KAAKkyG,OACRlyG,KAAKkyG,MAAM70G,QAAQ,SAACqjJ,GAAoB,MAAAA,GAAGtC,UAAasC,EAAG3tI,OAASzU,EAAEyU,OACnE/S,KAAK8/I,UACR9/I,KAAK8/I,SAASziJ,QAAQ,SAACqjJ,GAClBA,EAAG3tI,OAASzU,EAAEyU,KACjB2tI,EAAGtC,WAAasC,EAAGtC,UAEnBsC,EAAGtC,WAAY,I1O688BhB,IAAI3hI,GAAIC,EAAIC,EAAIC,EAAIC,EAAIC,C0O188B5B,OA5Ea8iI,GAAgBH,GAN5B/kJ,OAAAM,EAAA,YACA4V,SAAU,UAAWG,MAAQojB,MAAS,UAAWykG,iBAAkB,SAAU+nB,sBAAuB,kBACpG7vI,SAAU5W,EAAQ,MAClBiX,QAASjX,EAAQ,OACjBulB,gBAAiBzkB,EAAA,wBAAwB0kB,S1Ogi9BlCggI,EAA6B,qB0O7/8BP,mB1O6/8BqCjjI,M0O7/8BrC,KAAb4gI,EAAA,GAAAA,EAAA,IAAa5gI,GAAA/hB,OACU,mBADVgiB,MACU,KAAlB2gI,EAAA,GAAAA,EAAA,IAAkB3gI,GAAAhiB,OACR,mBADQiiB,MACR,KAAjB3hB,EAAA,mBAAAA,EAAA,oBAAiB2hB,GAAAjiB,OACC,mBADDkiB,MACC,KAAd4iI,EAAA,GAAAA,EAAA,IAAc5iI,GAAAliB,OACR,mBADQmiB,MACR,KAAVyiI,EAAA,GAAAA,EAAA,IAAUziI,GAAAniB,OACE,mBADFoiB,MACE,KAAXyiI,EAAA,GAAAA,EAAA,IAAWziI,GAAApiB,UAtCdklJ,IAAyBvC,EAAA,E1Oqi9BPnjJ,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO2mJ,IACnG,IAAIC,GAA6B7gJ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G2O9i9BhEwnI,EAAA,mBAAAE,MAA6B,MAAhBA,GAAaD,GALzBnmJ,OAAAM,EAAA,WACAqX,SAAU+qI,EAAA,EAAcD,EAAA,aAAcE,EAAA,GACtCjrI,cAAeutI,EAAkBpC,GACjC3rJ,SAAU+tJ,MAEEmB,O3Ouk9BPn+C,IACA,SAAUhxG,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO8mJ,IAC9E,IAAIppI,GAA8Czd,EAAoB,GAClE8mJ,EAA6C9mJ,EAAoB,IAEtF6e,GAD0E7e,EAAoB8d,EAAEgpI,GAClFhhJ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,IAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4O1l9B1GqnI,EAAA,WAMC,QAAAA,KAHU/gJ,KAAAihJ,YAAc,GAAID,GAAA,QAI3BhhJ,KAAKkhJ,YAAclhJ,KAAKihJ,YAAYnqB,eAOtC,MAJCiqB,GAAAzkJ,UAAA6kJ,KAAA,SAAKl5I,GACJjI,KAAKohJ,aAAen5I,EACpBjI,KAAKihJ,YAAYrlE,KAAK3zE,IAZX84I,EAAahoI,GADzBre,OAAAid,EAAA,c5O0m9BO6B,EAAW,yB4Ozm9BNunI,O5Okn9BPn+C,IACA,SAAUjxG,EAAQC,EAASsI,GAEjC,Y6O7n9BAQ,QAAAI,eAAAlJ,EAAA,cAA8CmJ,OAAA,GAC9C,IAAAsmJ,GAA0BnnJ,EAAQ,KAClCtI,GAAAmkC,iBAAAsrH,EAAAtrH,gBACA,IAAAD,GAA6B57B,EAAQ,IACrCtI,GAAAokC,oBAAAF,EAAAE,qB7Ooo9BMgtE,IACA,SAAUrxG,EAAQsI,EAAqBC,GAE7C,Y8Oro9BO,SAAAonJ,GAA8BnG,GACpC,MAAO,YAAM,MAAAA,GAAOllB,Q9Oqo9BYh8H,EAAuB,EAAIqnJ,EAC7BpnJ,EAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOsnJ,IAC9E,IAAIC,GAAgDtnJ,EAAoB,GACpE27H,EAA8C37H,EAAoB,GAClEunJ,EAAgDvnJ,EAAoB,KACzF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8O7o9B1G6nI,EAAA,WAcC,QAAAA,GAAoBnrB,GAAAp2H,KAAAo2H,WANbp2H,KAAAy2B,IAAM,kBACLz2B,KAAA+S,KAAO,sBAGP/S,KAAA0hJ,eAAyB,EAIjCH,EAAAjlJ,UAAA25H,KAAA,cAAA5yH,GAAArD,IACCA,MAAK+2H,UAAY/2H,KAAKo2H,SAASp0H,IAAIw/I,EAAA,GAAQlvF,OAAO33C,UAAU,SAAA1d,GAAK,MAAAoG,GAAKs+I,kBAAkB1kJ,MAGzFskJ,EAAAjlJ,UAAA0V,KAAA,WACC,GAAkB,MAAdhS,KAAKjF,MAAe,CACvB,GAAIuD,GAAmB,KACnB6a,EAAInZ,KAAKo2H,SAASp0H,IAAIy/I,EAAA,GAAezvI,KAAKhS,KAAK+S,KAC1C,OAALoG,IACH7a,EAAI4iC,SAAS/nB,IACL,MAAL7a,GAAc4J,MAAM5J,KACvB0B,KAAKjF,MAAQmmC,SAAS/nB,IAExB,MAAOnZ,MAAKjF,OAGbwmJ,EAAAjlJ,UAAAw+B,MAAA,WACmB,MAAd96B,KAAKjF,QACRiF,KAAKo2H,SAASp0H,IAAIy/I,EAAA,GAAe3mH,MAAM96B,KAAK+S,MAC5C/S,KAAKjF,MAAQ,OAIPwmJ,EAAAjlJ,UAAAqlJ,kBAAR,SAA0Br9G,GACzB,GAAIA,YAAiBk9G,GAAA,GAAyC,GAAtBxhJ,KAAK0hJ,eAAyC,MAAf1hJ,KAAKgS,OAG3E,MAFAhS,MAAK0hJ,eAAgB,MACrB1hJ,MAAKo2H,SAASp0H,IAAIw/I,EAAA,GAAQ7mH,UAAU36B,KAAKy2B,OAK3C/7B,OAAAI,eAAYymJ,EAAAjlJ,UAAA,a9O0o9BLqG,I8O1o9BP,SAAsBkrB,GACU,MAA3B7tB,KAAK22H,oBAA4B32H,KAAK22H,mBAAmBC,cAC7D52H,KAAK22H,mBAAqB9oG,G9O6o9BpBprB,YAAY,EACZC,cAAc,GAElB,IAAI+Z,E8O9o9BR,OAnDa8kI,GAAgBxoI,GAD5Bre,OAAAm7H,EAAA,c9Oqs9BOr8G,EAAW,qB8Otr9BoB,mB9Osr9BUiD,M8Otr9BV,KAARo5G,EAAA,UAAAA,EAAA,WAAQp5G,GAAA/hB,UAd1B6mJ,O9O6s9BPt+C,IACA,SAAUtxG,EAAQsI,EAAqBC,GAE7C,Y+Ozt9BAA,GAAAE,EAAAH,EAAA,qBAAA2nJ,KAAA1nJ,EAAAE,EAAAH,EAAA,qBAAA4nJ,IAAA,IAAAlqI,GAAAzd,EAAA,GAGW0nJ,EAAY,GAAIjqI,GAAA,eAAe,cAc7BkqI,GACZC,WAAY,MACZ/lH,SACCgmH,SAAU,KACVC,QAAS,MAEVlsI,WACC,cACA,gBACA,8BACA,wBACA,yBACA,yBACA,yBACA,2BACA,0BACA,4BACA,sBACA,2BACA,uBACA,6BACA,sBACA,4BACA,8BACA,4BACA,kCACA,8BACA,gBACA,mBACA,eACA,iBACA,qBACA,gCACA,2B/Ogu9BImsB,GACA,SAAUtwC,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOgoJ,IAC9E,IAAItqI,GAA8Czd,EAAoB,GAClEgoJ,EAAgDhoJ,EAAoB,KACpEioJ,EAAsDjoJ,EAAoB,KAC/F6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IgP3x9B1GuoI,EAAA,WAgDC,QAAAA,GAAoBG,EAA2CjH,GAA3Cn7I,KAAAoiJ,eAA2CpiJ,KAAAm7I,SANvDn7I,KAAAqiJ,YAAa,EAGbriJ,KAAAsiJ,4BAA8B,QAC9BtiJ,KAAAuiJ,wBAA0B,SAzClC7nJ,OAAAI,eAAImnJ,EAAA3lJ,UAAA,chPoy9BG0F,IgPpy9BP,WAEC,MAAOhC,MAAKwiJ,iBAAmB,uBhPqy9BzB7/I,IgPny9BP,SAAe5H,GACdiF,KAAKwiJ,gBAAkBxiJ,KAAKyiJ,YAAY1nJ,IhPqy9BlC0H,YAAY,EACZC,cAAc,IgPny9BrBhI,OAAAI,eAAImnJ,EAAA3lJ,UAAA,ehPsy9BG0F,IgPny9BP,WACC,MAAOhC,MAAK0iJ,kBhPqy9BN//I,IgPzy9BP,SAAgB5H,GACfiF,KAAK0iJ,iBAAmB1iJ,KAAKyiJ,YAAY1nJ,IhP2y9BnC0H,YAAY,EACZC,cAAc,IgPty9BrBhI,OAAAI,eAAImnJ,EAAA3lJ,UAAA,UhPyy9BG0F,IgPzy9BP,WAEC,MADAhC,MAAKqiJ,WAA4B,MAAdriJ,KAAK6b,MACjB7b,KAAKqiJ,YhP2y9BN5/I,YAAY,EACZC,cAAc,IgPzy9BrBhI,OAAAI,eAAImnJ,EAAA3lJ,UAAA,ShP4y9BG0F,IgPty9BP,WACC,GAAI2H,GAAS3J,KAAKoiJ,aAAapwI,KAAKhS,KAAKuiJ,wBAOzC,OALI54I,KACHA,EAAS3J,KAAKm7I,OAAOnpI,KAAKhS,KAAKsiJ,8BAGhC34I,EAASA,GAAkB,MhPuy9BrBhH,IgPpz9BP,SAAU+W,GACT1Z,KAAK44B,KAAO,KACZ54B,KAAK2iJ,SAAW,KAChB3iJ,KAAKoiJ,aAAatH,MAAM96I,KAAKuiJ,wBAAyB7oI,IhPsz9BhDjX,YAAY,EACZC,cAAc,IgPjy9BrBu/I,EAAA3lJ,UAAAk5D,MAAA,WACCx1D,KAAK44B,KAAO,KACZ54B,KAAK2iJ,SAAW,KAChB3iJ,KAAKoiJ,aAAatnH,MAAM96B,KAAKuiJ,yBAC7BviJ,KAAKm7I,OAAOrgH,MAAM96B,KAAKsiJ,8BAGxBL,EAAA3lJ,UAAAmmJ,YAAA,SAAYhsH,GAGX,MAFIA,IAAOA,EAAIp4B,OAAS,GAAyB,GAApBo4B,EAAI34B,QAAQ,OACxC24B,EAAMA,EAAIi3B,UAAU,IACdj3B,EhPoy9BL,IAAIha,GAAIC,CgPly9BZ,OA9DaulI,GAAWlpI,GADvBre,OAAAid,EAAA,chPo29BO6B,EAAW,qBgPnz9BmC,mBhPmz9BLiD,MgPnz9BK,KAAnB0lI,EAAA,GAAAA,EAAA,IAAmB1lI,GAAA/hB,OAA+B,mBAA/BgiB,MAA+B,KAAbwlI,EAAA,GAAAA,EAAA,IAAaxlI,GAAAhiB,UAhDxEunJ,OhP429BP9/G,GACA,SAAUxwC,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO2oJ,IAC9E,IAAIjrI,GAA8Czd,EAAoB,GAClE8mJ,EAA6C9mJ,EAAoB,IAEjE2oJ,GADqD3oJ,EAAoB8d,EAAEgpI,GACpB9mJ,EAAoB,MAC3E4oJ,EAAuD5oJ,EAAoB,KAC3E6oJ,EAA6C7oJ,EAAoB,KACjE8oJ,EAAiE9oJ,EAAoB,KACrF+oJ,EAAwD/oJ,EAAoB,KAC5EgpJ,EAA2DhpJ,EAAoB,KAC/EipJ,EAAuDjpJ,EAAoB,KAChG6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IiPz39B1GkpI,EAAA,WASC,QAAAA,KAJA5iJ,KAAAojJ,aAAe,GAAIpC,GAAA,QACXhhJ,KAAAqjJ,aAAe,GAAIrC,GAAA,QACnBhhJ,KAAAsjJ,YAAc,GAAItC,GAAA,QAGzBhhJ,KAAKujJ,cAAgBvjJ,KAAKqjJ,aAAavsB,eACvC92H,KAAKwgJ,aAAexgJ,KAAKsjJ,YAAYxsB,eACrC92H,KAAKwjJ,cAAgBxjJ,KAAKojJ,aAAatsB,eA2FzC,MAxFC8rB,GAAAtmJ,UAAAmnJ,MAAA,SAAMv7B,GACLloH,KAAKqjJ,aAAaznE,MACjBnrE,KAAMsyI,EAAA,EAAUU,MAChBC,sBAAsB,EACtBhxG,UAAWmwG,EAAA,EACX36B,KAAMA,KAIR06B,EAAAtmJ,UAAA4iB,OAAA,SAAOgpG,EAAc20B,GACpB78I,KAAKqjJ,aAAaznE,MACjBnrE,KAAMsyI,EAAA,EAAU7jI,OAChBwkI,sBAAsB,EACtBhxG,UAAWuwG,EAAA,EACX/6B,KAAMA,EACN20B,QAASA,KAIX+F,EAAAtmJ,UAAA0iB,MAAA,SAAMsR,EAAe43F,EAAc20B,GAClC78I,KAAKqjJ,aAAaznE,MACjBnrE,KAAMsyI,EAAA,EAAU7jI,OAChBwkI,sBAAsB,EACtBhxG,UAAWywG,EAAA,EACX7yH,MAAOA,EACP43F,KAAMA,EACN20B,QAASA,KAIX+F,EAAAtmJ,UAAAqnJ,SAAA,SAAUz7B,GACTloH,KAAKqjJ,aAAaznE,MACjBnrE,KAAMsyI,EAAA,EAAU7jI,OAChBwkI,sBAAsB,EACtBhxG,UAAWwwG,EAAA,EACXh7B,KAAMA,KAIR06B,EAAAtmJ,UAAA4B,MAAA,SAAM0lJ,EAAgBzkI,EAAe09H,EAAwBJ,OAAA,KAAAA,MAAA,MAC5Dz8I,KAAKqjJ,aAAaznE,MACjBnrE,KAAMsyI,EAAA,EAAU7kJ,MAChBwlJ,sBAAsB,EACtBhxG,UAAWowG,EAAA,EACX56B,KAAM07B,EACNC,WAAY1kI,EACZs9H,kBAAmBA,EACnBI,QAASA,KAIX+F,EAAAtmJ,UAAAwc,OAAA,SAAOo5F,GACNA,EAAMzhG,KAAOsyI,EAAA,EAAU5oI,MACvBna,KAAKqjJ,aAAaznE,KAAKs2B,IAsBxB0wC,EAAAtmJ,UAAA+iB,MAAA,WACCrf,KAAKsjJ,YAAY1nE,KAAK,OAGvBgnE,EAAAtmJ,UAAAwnJ,eAAA,WACC9jJ,KAAKqjJ,aAAaznE,MACjBnrE,KAAMsyI,EAAA,EAAUe,eAChBJ,sBAAsB,EACtBhxG,UAAWswG,EAAA,EACXnG,WACAkH,UAAW,QApGDnB,EAAY7pI,GADxBre,OAAAid,EAAA,cjP+89BO6B,EAAW,yBiP989BNopI,OjPu99BPxmH,EACA,SAAUzqC,EAAQsI,EAAqBC,GAE7C,YkPxk4BA,SAAA8pJ,GAAAC,EAAAC,EAAAC,OACA,KAAAD,IAA+BA,EAAAjnD,OAAAinD,eAC/B,KAAAC,IAA+BA,EAAAlnD,OAAAknD,UAC/B,IAEqBC,GACAC,EAHA/pI,EAAAgqI,EAAAtiJ,IAAAuiJ,GACAC,EAAAF,EAAAtiJ,IAAAyiJ,EAGrB,iBAAAC,GACA,SAAAA,EAAA3pJ,OAAA,IAAA2pJ,EAAA3pJ,MACA,WAKA,IAJAqpJ,GAAA9pI,EAAAqqI,qBACAN,EAAAG,EAAAI,UAAAX,GACAG,EAAA9pI,EAAAqqI,oBAEAN,EAAArmH,KAAA0mH,EAAA3pJ,OAAA,CACA,GAA6B8pJ,GAAAL,EAAA1lI,MAAA4lI,EAAA3pJ,MAC7B,cAAA8pJ,KAAAX,GAEAY,UACAzmI,OAAA,IAIA,MAAAwmI,KAAAV,GAEAY,UACA1mI,OAAA,IAIA,KAGA,OACA8D,QACA9D,OAAA,KAv8FAnkB,EAAAE,EAAAH,EAAA,qBAAAsqJ,KAAArqJ,EAAAE,EAAAH,EAAA,qBAAA+qJ,KAAA9qJ,EAAAE,EAAAH,EAAA,qBAAAgrJ,KAAA/qJ,EAAAE,EAAAH,EAAA,qBAAAirJ,KAAA,IAAAvtI,GAAAzd,EAAA,GAAA8mJ,EAAA9mJ,EAAA,IAAAirJ,GAAAjrJ,EAAA8d,EAAAgpI,GAAA9mJ,EAAA,IAAAkrJ,GAAAlrJ,EAAA8d,EAAAmtI,GAAAjrJ,EAAA,MAAAmrJ,GAAAnrJ,EAAA8d,EAAAotI,GAAAlrJ,EAAA,MAAAorJ,GAAAprJ,EAAA8d,EAAAqtI,GAAAnrJ,EAAA,IAAAqrJ,EAAArrJ,EAAA,KAAAsrJ,GAAAtrJ,EAAA8d,EAAAutI,GAAArrJ,EAAA,IAAAurJ,EAAAvrJ,EAAA,GAAAqe,EAAAvY,WAAAuY,WAAA,WACA,GAAAC,GAAA9d,OAAA+d,iBACUC,uBAAgBrc,QAAA,SAAAjC,EAAAue,GAAsCve,EAAAse,UAAAC,IAChE,SAAAve,EAAAue,GAAyB,OAAApd,KAAAod,KAAAnd,eAAAD,KAAAnB,EAAAmB,GAAAod,EAAApd,IACzB,iBAAAnB,EAAAue,GAEA,QAAAC,KAAuB5Y,KAAA6Y,YAAAze,EADvBoe,EAAApe,EAAAue,GAEAve,EAAAkC,UAAA,OAAAqc,EAAAje,OAAAoe,OAAAH,IAAAC,EAAAtc,UAAAqc,EAAArc,UAAA,GAAAsc,QAGA8sI,EAAA1lJ,WAAA0lJ,aAAA,SAAA7hD,EAAA/3F,GAGA,QAAA65I,GAAA3tI,GAAsB,gBAAA0B,GAAsB,MAAAksI,IAAA5tI,EAAA0B,KAC5C,QAAAksI,GAAAC,GACA,GAAA93H,EAAA,SAAA61E,WAAA,kCACA,MAAAr9C,GAAA,IACA,GAAAx4B,EAAA,EAAA9pB,IAAAwqB,EAAAxqB,EAAA,EAAA4hJ,EAAA,YAAAA,EAAA,uBAAAp3H,IAAAjyB,KAAAyH,EAAA4hJ,EAAA,KAAAx/F,KAAA,MAAA53B,EAEA,QADAxqB,EAAA,EAAAwqB,IAAAo3H,GAAA,EAAAp3H,EAAA1zB,QACA8qJ,EAAA,IACA,cAAAp3H,EAAAo3H,CAAuC,MACvC,QAAkC,MAAlCt/F,GAAApnC,SAA2CpkB,MAAA8qJ,EAAA,GAAAx/F,MAAA,EAC3C,QAAAE,EAAApnC,QAAkClb,EAAA4hJ,EAAA,GAAWA,GAAA,EAAU,SACvD,QAAAA,EAAAt/F,EAAAu/F,IAAA98G,MAAyCud,EAAAw/F,KAAA/8G,KAAc,SACvD,SACA,GAAAva,EAAA83B,EAAAw/F,OAAAt3H,IAAApwB,OAAA,GAAAowB,IAAApwB,OAAA,UAAAwnJ,EAAA,QAAAA,EAAA,KAA6Gt/F,EAAA,CAAO,UACpH,OAAAs/F,EAAA,MAAAp3H,GAAAo3H,EAAA,GAAAp3H,EAAA,IAAAo3H,EAAA,GAAAp3H,EAAA,KAAgF83B,EAAApnC,MAAA0mI,EAAA,EAAiB,OACjG,OAAAA,EAAA,IAAAt/F,EAAApnC,MAAAsP,EAAA,IAAwD83B,EAAApnC,MAAAsP,EAAA,GAAgBA,EAAAo3H,CAAQ,OAChF,GAAAp3H,GAAA83B,EAAApnC,MAAAsP,EAAA,IAA8C83B,EAAApnC,MAAAsP,EAAA,GAAgB83B,EAAAu/F,IAAA9uI,KAAA6uI,EAAgB,OAC9Ep3H,EAAA,IAAA83B,EAAAu/F,IAAA98G,MACAud,EAAAw/F,KAAA/8G,KAAiC,UAEjC68G,EAAA/5I,EAAAtP,KAAAqnG,EAAAt9C,GACS,MAAAtpD,GAAY4oJ,GAAA,EAAA5oJ,GAAagH,EAAA,EAAS,QAAU8pB,EAAAU,EAAA,EACrD,KAAAo3H,EAAA,QAAAA,GAAA,EAAmC,QAAS9qJ,MAAA8qJ,EAAA,GAAAA,EAAA,UAAAx/F,MAAA,GAvB5C,GAAwGt4B,GAAA9pB,EAAAwqB,EAAAu3H,EAAxGz/F,GAAapnC,MAAA,EAAA8mI,KAAA,WAA6B,KAAAx3H,EAAA,QAAAA,GAAA,EAA0B,OAAAA,GAAA,IAAes3H,QAAAD,OACnF,OAAAE,IAAgBpqE,KAAA+pE,EAAA,GAAAO,MAAAP,EAAA,GAAAQ,OAAAR,EAAA,IAAqD,kBAAAS,UAAAJ,EAAAI,OAAAC,UAAA,WAAoE,MAAArmJ,QAAegmJ,GAqCxJ1B,EAAA,WAIA,QAAAA,GAAAluB,GACAp2H,KAAAo2H,WACAkuB,EAAAluB,SAAAp2H,KAAAo2H,SAUA,MAHAkuB,GAAAtiJ,IAAA,SAAA6Z,GACA,MAAA7b,MAAAo2H,SAAAp0H,IAAA6Z,IAEAyoI,IAEAA,GAAA9zI,aACKC,KAAOkH,EAAA,aAKZ2sI,EAAAlzI,eAAA,WAA0C,QACrCX,KAAOkH,EAAA,WAEZ,IAAA2uI,GAAA,WACA,QAAAA,KACAtmJ,KAAAumJ,iBACAvmJ,KAAAwmJ,mBAAA,EACAxmJ,KAAAoiJ,cAAA,EACApiJ,KAAAymJ,gBAAA,EAEA,MAAAH,KAEAA,GAAA91I,aACKC,KAAOkH,EAAA,aAKZ2uI,EAAAl1I,eAAA,WAA2C,SAC3C,IAAAs1I,GAAA,WAIA,QAAAA,GAAAj3G,GACAzvC,KAAAyvC,gBAoFA,MA7EAi3G,GAAApqJ,UAAAqqJ,YAAA,SAAAC,EAAAC,GAGA,WAFA,KAAAA,IAAuCA,EAAA,OACvC7mJ,KAAAyvC,cAAA82G,cAAAvvI,MAA+CqkB,KAAAurH,EAAAt7F,UAAAu7F,IAC/C7mJ,MAMA0mJ,EAAApqJ,UAAAwqJ,aAAA,SAAAP,GACA,OAAAttH,GAAA,EAAA8tH,EAAAR,EAAyDttH,EAAA8tH,EAAA1oJ,OAA6B46B,IAAA,CACtF,GAAA2tH,GAAAG,EAAA9tH,EACAj5B,MAAAyvC,cAAA82G,cAAAvvI,MAAmDqkB,KAAAurH,EAAAt7F,UAAA,QAEnD,MAAAtrD,OAKA0mJ,EAAApqJ,UAAA0qJ,eAAA,WAEA,MADAhnJ,MAAAyvC,cAAA+2G,mBAAA,EACAxmJ,MAMA0mJ,EAAApqJ,UAAA2qJ,oBAAA,SAAAlM,GAEA,MADA/6I,MAAAyvC,cAAAy3G,sBAAAnM,EACA/6I,MAKA0mJ,EAAApqJ,UAAA6qJ,gBAAA,WAEA,MADAnnJ,MAAAyvC,cAAA2yG,cAAA,EACApiJ,MAKA0mJ,EAAApqJ,UAAA8qJ,kBAAA,WAEA,MADApnJ,MAAAyvC,cAAAg3G,gBAAA,EACAzmJ,MAMA0mJ,EAAApqJ,UAAA+qJ,eAAA,SAAAT,GAEA,MADA5mJ,MAAAyvC,cAAAm3G,eACA5mJ,MAUA0mJ,EAAApqJ,UAAAgrJ,oBAAA,SAAAV,EAAAl7G,EAAA67G,EAAAC,EAAAC,GAMA,MALAznJ,MAAAyvC,cAAAm3G,eACA5mJ,KAAAyvC,cAAA/D,cACA1rC,KAAAyvC,cAAA83G,aACAvnJ,KAAAyvC,cAAA+3G,kBACAxnJ,KAAAyvC,cAAAg4G,WACAznJ,MAMA0mJ,EAAApqJ,UAAAorJ,eAAA,SAAA/7G,GAEA,MADA3rC,MAAAyvC,cAAA9D,eACA3rC,MAEA0mJ,KAEAiB,EAAA,SAAA9jD,EAAA95F,EAAA69I,EAAAC,GACA,WAAAD,MAAA1rH,UAAA,SAAAhV,EAAAgW,GACA,QAAA4qH,GAAA/sJ,GAAmC,IACnC6qJ,EAAAiC,EAAAjsE,KAAA7gF,IAEA,MAAAkC,GACAigC,EAAAjgC,IAEA,QAAA8qJ,GAAAhtJ,GAAkC,IAClC6qJ,EAAAiC,EAAA,MAAA9sJ,IAEA,MAAAkC,GACAigC,EAAAjgC,IAEA,QAAA2oJ,GAAAj8I,GAA+BA,EAAA08C,KAAAn/B,EAAAvd,EAAA5O,OAAA,GAAA6sJ,GAAA,SAAA1gI,GAAiEA,EAAAvd,EAAA5O,SAAyBqrC,KAAA0hH,EAAAC,GACzHnC,GAAAiC,IAAAj+I,MAAAi6F,EAAA95F,QAAA6xE,WAOAosE,EAAA,WACA,QAAAA,MAqBA,MAXAA,GAAA1rJ,UAAA0V,KAAA,SAAAe,KAUAi1I,EAAA1rJ,UAAAw+I,MAAA,SAAA/nI,EAAAhY,KACAitJ,IAEAA,GAAAx3I,aACKC,KAAOkH,EAAA,aAKZqwI,EAAA52I,eAAA,WAA4C,SAC5C,IAAA62I,GAAA,WAIA,QAAAA,GAAAx4G,GACAzvC,KAAAyvC,gBACAzvC,KAAAkoJ,UAAA,mBAAApqH,sBAAAqqH,cACAnoJ,KAAAooJ,WAAA,mBAAAC,SA2GA,MArGAJ,GAAA3rJ,UAAA0V,KAAA,SAAAe,GACA,MAAA40I,GAAA3nJ,SAAA,qBACA,GAAAjF,EACA,OAAA2qJ,GAAA1lJ,KAAA,SAAAyc,GAaA,MAZA1hB,GAAA,KACAiF,KAAAyvC,cAAA+2G,oBACAxmJ,KAAAyvC,cAAA2yG,cAAApiJ,KAAAooJ,WACArtJ,EAAAiF,KAAAsoJ,gBAAAv1I,GAEA/S,KAAAyvC,cAAAg3G,gBAAAzmJ,KAAAooJ,WACArtJ,EAAAiF,KAAAuoJ,kBAAAx1I,GAEA/S,KAAAkoJ,YACAntJ,EAAAiF,KAAAwoJ,UAAAz1I,MAGA,EAAAhY,QASAktJ,EAAA3rJ,UAAAw+I,MAAA,SAAA/nI,EAAAhY,GACA,MAAA4sJ,GAAA3nJ,SAAA,qBACA,MAAA0lJ,GAAA1lJ,KAAA,SAAAyc,GAYA,MAXAzc,MAAAyvC,cAAA+2G,oBACAxmJ,KAAAyvC,cAAA2yG,cAAApiJ,KAAAooJ,WACApoJ,KAAAyoJ,gBAAA11I,EAAAhY,GAEAiF,KAAAyvC,cAAAg3G,gBAAAzmJ,KAAAooJ,WACApoJ,KAAA0oJ,kBAAA31I,EAAAhY,GAEAiF,KAAAkoJ,WACAloJ,KAAA2oJ,UAAA51I,EAAAhY,KAGA,QAQAktJ,EAAA3rJ,UAAAgsJ,gBAAA,SAAAv1I,GACA,MAAAqvI,cAAAwG,QAAA71I,IAMAk1I,EAAA3rJ,UAAAisJ,kBAAA,SAAAx1I,GACA,MAAA0zI,gBAAAmC,QAAA71I,IAMAk1I,EAAA3rJ,UAAAksJ,UAAA,SAAAz1I,GACA,GAAyBpJ,GAAA,IAIzB,OAHA,mBAAA1O,YACA0O,EAAA,GAAAujE,QAAA,WAAuCpB,mBAAA/4D,GAAA,YAAuC81I,KAAA5tJ,SAAAkgJ,SAE9ExxI,IAAA,SAOAs+I,EAAA3rJ,UAAAmsJ,gBAAA,SAAA11I,EAAAhY,GACAqnJ,aAAA0G,QAAA/1I,EAAAhY,IAOAktJ,EAAA3rJ,UAAAosJ,kBAAA,SAAA31I,EAAAhY,GACA0rJ,eAAAqC,QAAA/1I,EAAAhY,IAOAktJ,EAAA3rJ,UAAAqsJ,UAAA,SAAA51I,EAAAhY,GACA,GAAyBkgJ,GAAA,EACzB,UAAAj7I,KAAAyvC,cAAAy3G,sBAAA,CACA,GAA6BhlG,GAAA,GAAA54B,KAC7B44B,GAAA84F,QAAA94F,EAAA34B,UACA,GAAAvpB,KAAAyvC,cAAAy3G,sBAAA,WACAjM,EAAA,aAAwB/4F,EAAAg5F,cAExB,mBAAAjgJ,YACAA,SAAAkgJ,OAAApoI,EAAA,IAAAhY,EAAAkgJ,EAAA,aAGAgN,IAEAA,GAAAz3I,aACKC,KAAOkH,EAAA,aAKZswI,EAAA72I,eAAA,WAA6C,QACxCX,KAAA61I,IAEL,IAAAyC,GAAA,WACA,QAAAA,MAwFA,MAtFAruJ,QAAAI,eAAAiuJ,EAAAzsJ,UAAA,SAIA0F,IAAA,WACA,MAAAhC,MAAA+jG,QAMAphG,IAAA,SAAAyhJ,GACApkJ,KAAA+jG,OAAAqgD,EACApkJ,KAAAgpJ,cAEAvmJ,YAAA,EACAC,cAAA,IAUAqmJ,EAAAzsJ,UAAA2sJ,MAAA,SAAArC,EAAAl7G,EAAA67G,EAAAC,EAAAC,GACAznJ,KAAA4mJ,eACA5mJ,KAAAunJ,aACAvnJ,KAAA0rC,cACA1rC,KAAAwnJ,kBACAxnJ,KAAAynJ,UACA,IAAyB1sJ,KACzBA,GAAAic,KAAA4vI,GACA7rJ,EAAAic,KAAAuwI,EAAA,IAAAA,EAAA,IACAxsJ,EAAAic,KAAA00B,EAAA,IAAAA,EAAA,IAEA3wC,EAAAic,KAAAwwI,GAAAC,EAAA,SACA1sJ,EAAAic,KAAAwwI,EAAA,OAAAA,EAAA,IACAzsJ,EAAAic,KAAAywI,EAAA,OAAAA,EAAA,IACAznJ,KAAA+jG,OAAAhpG,EAAAipC,KAAA,KAKA+kH,EAAAzsJ,UAAA0sJ,WAAA,WACA,GAAAhpJ,KAAAjF,MAAA,CACA,GAA6BA,GAAAiF,KAAAjF,MAEA0K,EAAA1K,EAAAmuJ,OAAA,KAC7B,QAAAzjJ,EAAA,CACA,GAAiC8xC,GAAAx8C,EAAA2yD,UAAAjoD,EAAA,GAAAo+B,MAAA,IACjC,QAAA0T,EAAAl5C,QACA,OACA,MAAAk5C,EAAA,GACAv3C,KAAAwnJ,gBAAAjwG,EAAA,GAEA,MAAAA,EAAA,KACAv3C,KAAAynJ,SAAAlwG,EAAA,GAEA,MACA,SACAv3C,KAAAwnJ,gBAAAjwG,EAAA,GACAv3C,KAAAynJ,SAAAlwG,EAAA,GAIAx8C,IAAA2yD,UAAA,EAAAjoD,GAEA,GAA6B0jJ,GAAApuJ,EAAA8oC,MAAA,IAC7B,QAAAslH,EAAA9qJ,QACA,OACA2B,KAAA4mJ,aAAAuC,EAAA,EACA,MACA,QACAnpJ,KAAA4mJ,aAAAuC,EAAA,GACAnpJ,KAAA0rC,YAAAy9G,EAAA,EACA,MACA,SACAnpJ,KAAA4mJ,aAAAuC,EAAA,GACAnpJ,KAAAunJ,WAAA4B,EAAA,GACAnpJ,KAAA0rC,YAAAy9G,EAAA,MAKAJ,KAEAK,EAAA,SAAAvlD,EAAA95F,EAAA69I,EAAAC,GACA,WAAAD,MAAA1rH,UAAA,SAAAhV,EAAAgW,GACA,QAAA4qH,GAAA/sJ,GAAmC,IACnC6qJ,EAAAiC,EAAAjsE,KAAA7gF,IAEA,MAAAkC,GACAigC,EAAAjgC,IAEA,QAAA8qJ,GAAAhtJ,GAAkC,IAClC6qJ,EAAAiC,EAAA,MAAA9sJ,IAEA,MAAAkC,GACAigC,EAAAjgC,IAEA,QAAA2oJ,GAAAj8I,GAA+BA,EAAA08C,KAAAn/B,EAAAvd,EAAA5O,OAAA,GAAA6sJ,GAAA,SAAA1gI,GAAiEA,EAAAvd,EAAA5O,SAAyBqrC,KAAA0hH,EAAAC,GACzHnC,GAAAiC,IAAAj+I,MAAAi6F,EAAA95F,QAAA6xE,WAGA2oE,EAAA,WAKA,QAAAA,GAAA90G,EAAA45G,GACArpJ,KAAAyvC,gBACAzvC,KAAAqpJ,UACArpJ,KAAAspJ,oBAAA,GAAuC3xI,GAAA,cAAY,GACnD3X,KAAAupJ,qBAAA,GAAwC5xI,GAAA,cAAY,GACpD3X,KAAAwpJ,oBAAA,GAAuC7xI,GAAA,cAAY,GACnD3X,KAAAypJ,gBAAA,GAAmCzI,GAAA,QACnChhJ,KAAAokJ,cAAA,GAAA2E,GAyRA,MApRAxE,GAAAjoJ,UAAAotJ,iBAAA,WACA,UAAAhD,GAAA1mJ,KAAAyvC,gBAKA80G,EAAAjoJ,UAAA2uC,iBAAA,WACA,MAAAjrC,MAAAyvC,eAKA80G,EAAAjoJ,UAAA25H,KAAA,WACA,MAAAmzB,GAAAppJ,SAAA,qBACA,MAAA0lJ,GAAA1lJ,KAAA,SAAAyc,GACA,OAAAA,EAAA0C,OACA,gBAAAnf,KAAA2pJ,cACA,QAWA,MAVAltI,GAAAwpI,OACAjmJ,KAAAyvC,cAAAm3G,cAAA5mJ,KAAAyvC,cAAA/D,YACA1rC,KAAA4pJ,oBAEA5pJ,KAAAyvC,cAAAm3G,cACA5mJ,KAAA6pJ,eAEA7pJ,KAAAyvC,cAAA9D,cACA3rC,KAAA8pJ,gBAEA,SAQAvF,EAAAjoJ,UAAAytJ,sBAAA,WACA,MAAA/pJ,MAAAyvC,cAAA82G,cAAAhqJ,IAAA,SAAAwlJ,GAAyE,MAAAA,GAAA1mH,QAMzEkpH,EAAAjoJ,UAAA0tJ,qBAAA,SAAApD,GAGA,WAFA,KAAAA,IAAsCA,EAAA5mJ,KAAAokJ,cAAAwC,cACb5mJ,KAAAiqJ,cAAArD,GACzB,GAAAt7F,WAKAi5F,EAAAjoJ,UAAAsmB,mBAAA,WACA,MAAA5iB,MAAAokJ,cAAAwC,cAKArC,EAAAjoJ,UAAA4tJ,kBAAA,WACA,MAAAlqJ,MAAAokJ,cAAA14G,YACA1rC,KAAAokJ,cAAA14G,YAEA,IAKA64G,EAAAjoJ,UAAA6tJ,iBAAA,WACA,MAAAnqJ,MAAAokJ,cAAAmD,WACAvnJ,KAAAokJ,cAAAmD,WAEA,IAKAhD,EAAAjoJ,UAAA8tJ,iBAAA,WAIA,MAHyBpqJ,MAAAokJ,cAAA14G,YACzB1rC,KAAAokJ,cAAAwC,aAAA,IAAA5mJ,KAAAokJ,cAAA14G,YACA1rC,KAAAokJ,cAAAwC,cAMArC,EAAAjoJ,UAAA+tJ,0BAAA,WACA,MAAArqJ,MAAAokJ,cAAAoD,gBACAxnJ,KAAAokJ,cAAAoD,gBAEA,IAKAjD,EAAAjoJ,UAAAguJ,mBAAA,WACA,MAAAtqJ,MAAAokJ,cAAAqD,SACAznJ,KAAAokJ,cAAAqD,SAEA,IAKAlD,EAAAjoJ,UAAAqoJ,iBAAA,WACA,MAAA3kJ,MAAAokJ,cAAArpJ,OAKAwpJ,EAAAjoJ,UAAAiuJ,mBAAA,WACA,MAAAvqJ,MAAA2rC,cAMA44G,EAAAjoJ,UAAAkuJ,mBAAA,SAAA5D,GACA5mJ,KAAAokJ,cAAAwC,kBACA5mJ,KAAAokJ,cAAA6E,MAAArC,GACA5mJ,KAAAqpJ,QAAAvO,MAAA,gBAAA96I,KAAAokJ,cAAArpJ,OACAiF,KAAAyqJ,qBACAzqJ,KAAA0qJ,0BAWAnG,EAAAjoJ,UAAAquJ,iBAAA,SAAA/D,EAAAl7G,EAAA67G,EAAAC,EAAAC,GACAznJ,KAAAokJ,cAAAwC,iBACA5mJ,KAAAokJ,cAAA14G,gBACA1rC,KAAAokJ,cAAAmD,eACAvnJ,KAAAokJ,cAAAoD,oBACAxnJ,KAAAokJ,cAAAqD,cACAznJ,KAAAokJ,cAAA6E,MAAArC,EAAAl7G,EAAA67G,EAAAC,EAAAC,GACAznJ,KAAAqpJ,QAAAvO,MAAA,gBAAA96I,KAAAokJ,cAAArpJ,OACAiF,KAAA4qJ,0BACA5qJ,KAAA0qJ,0BAOAnG,EAAAjoJ,UAAAuuJ,mBAAA,SAAAl/G,GACA3rC,KAAA2rC,kBACA3rC,KAAA2rC,eACA3rC,KAAAqpJ,QAAAvO,MAAA,WAAA96I,KAAA2rC,cACA3rC,KAAA8qJ,uBAMAvG,EAAAjoJ,UAAAqtJ,YAAA,WACA,MAAAP,GAAAppJ,SAAA,qBACA,GAAAokJ,GAAAz4G,CACA,OAAA+5G,GAAA1lJ,KAAA,SAAAyc,GACA,OAAAA,EAAA0C,OACA,OACA,MAAAnf,MAAAokJ,cAAArpJ,OAAA,MACA,EAAAiF,KAAAqpJ,QAAAr3I,KAAA,iBACA,QACAoyI,EAAA3nI,EAAAwpI,OACA7B,IACApkJ,KAAAokJ,cAAArpJ,MAAAqpJ,GAEA3nI,EAAA0C,MAAA,CACA,QACA,aAAAnf,KAAA2rC,cAAA,MACA,EAAA3rC,KAAAqpJ,QAAAr3I,KAAA,YACA,QACA25B,EAAAlvB,EAAAwpI,OACAt6G,IACA3rC,KAAA2rC,gBAEAlvB,EAAA0C,MAAA,CACA,wBAQAolI,EAAAjoJ,UAAAutJ,aAAA,WACA,IAAA7pJ,KAAAokJ,cAAAwC,aAAA,CACA,GAA6BmE,GAAA/qJ,KAAAgrJ,qBACAC,IAC7BF,KACAE,EAAAjrJ,KAAAiqJ,cAAAc,IAEAA,GAAAE,EAAA5sJ,OAAA,EACA2B,KAAAokJ,cAAA6E,MAAA8B,GAGA/qJ,KAAAokJ,cAAA6E,MAAAjpJ,KAAAyvC,cAAAm3G,cAEA5mJ,KAAAqpJ,QAAAvO,MAAA,gBAAA96I,KAAAokJ,cAAArpJ,OAEAiF,KAAAyqJ,sBAKAlG,EAAAjoJ,UAAAstJ,kBAAA,WACA5pJ,KAAAokJ,cAAArpJ,QACAiF,KAAAokJ,cAAA6E,MAAAjpJ,KAAAyvC,cAAAm3G,aAAA5mJ,KAAAyvC,cAAA/D,YAAA1rC,KAAAyvC,cAAA83G,WAAAvnJ,KAAAyvC,cAAA+3G,gBAAAxnJ,KAAAyvC,cAAAg4G,UACAznJ,KAAAqpJ,QAAAvO,MAAA,gBAAA96I,KAAAokJ,cAAArpJ,QAEAiF,KAAA4qJ,2BAKArG,EAAAjoJ,UAAAwtJ,aAAA,WACA,MAAA9pJ,KAAA2rC,eACA3rC,KAAA2rC,aAAA3rC,KAAAyvC,cAAA9D,aACA3rC,KAAAqpJ,QAAAvO,MAAA,WAAA96I,KAAA2rC,eAEA3rC,KAAA8qJ,sBAKAvG,EAAAjoJ,UAAA0uJ,mBAAA,WACA,GAAyBD,GAAA,IAIzB,IAHA,mBAAAjtH,sBAAAikH,WACAgJ,EAAAjtH,UAAAikH,UAEA,MAAAgJ,EAAA,CACA,GAA6BtlJ,GAAAslJ,EAAAjtJ,QAAA,MAC7B,GAAA2H,IACAslJ,IAAAr9F,UAAA,EAAAjoD,IAGA,MAAAslJ,IAMAxG,EAAAjoJ,UAAA2tJ,cAAA,SAAArD,GAIA,MAHyB5mJ,MAAAyvC,cAAA82G,cAAA3oJ,OAAA,SAAAmkJ,GACzB,MAAAA,GAAA1mH,MAAAurH,KAOArC,EAAAjoJ,UAAAmuJ,mBAAA,WACAzqJ,KAAAspJ,oBAAA/9I,KAAAvL,KAAAokJ,cAAAwC,eAKArC,EAAAjoJ,UAAAsuJ,wBAAA,WACA5qJ,KAAAupJ,qBAAAh+I,KAAAvL,KAAAokJ,cAAArpJ,QAKAwpJ,EAAAjoJ,UAAAwuJ,mBAAA,WACA9qJ,KAAAwpJ,oBAAAj+I,KAAAvL,KAAA2rC,eAKA44G,EAAAjoJ,UAAAouJ,sBAAA,WAEA1qJ,KAAAypJ,gBAAA7tE,QAEA2oE,IAEAA,GAAA/zI,aACKC,KAAOkH,EAAA,aAKZ4sI,EAAAnzI,eAAA,WAA4C,QACvCX,KAAA61I,IACA71I,KAAAu3I,KAELzD,EAAA3yI,gBACA03I,sBAA6B74I,KAAOkH,EAAA,SACpC4xI,uBAA8B94I,KAAOkH,EAAA,SACrC6xI,sBAA6B/4I,KAAOkH,EAAA,SAEpC,IAAAuzI,GAAA,WACA,QAAAA,KACAlrJ,KAAAmrJ,mBACAnrJ,KAAA8V,aACA9V,KAAAorJ,kBAAA,EACAprJ,KAAAqrJ,aAAA,IACArrJ,KAAAsrJ,YAAA,EAEA,MAAAJ,KAEAA,GAAA16I,aACKC,KAAOkH,EAAA,aAKZuzI,EAAA95I,eAAA,WAAgD,SAIhD,IAAAm6I,GAAA,WACA,QAAAA,MAoBA,MAfAA,GAAAC,kBAAA,WACA,MAAAxrJ,MAAAyrJ,SAAAC,KAAAlwJ,eAAA,mBAKA+vJ,EAAAI,gBAAA,WACA,MAAA3rJ,MAAAyrJ,SAAAC,KAAAlwJ,eAAA,iBAKA+vJ,EAAAK,YAAA,WACA,MAAA5rJ,MAAAyrJ,SAAAC,KAAAlwJ,eAAA,aAEA+vJ,IAEAA,GAAAE,QAAA,gBAAAC,aACA,IAAAG,GAAA,WAIA,QAAAA,GAAAp8G,GACAzvC,KAAAyvC,gBA+EA,MAxEAo8G,GAAAvvJ,UAAAwvJ,eAAA,SAAAlF,EAAArsI,GAIA,MAHAva,MAAAyvC,cAAA07G,gBAAAvE,OACA,KAAA5mJ,KAAAyvC,cAAA07G,gBAAAvE,GACAlsJ,OAAAusC,UAAkCjnC,KAAAyvC,cAAA07G,gBAAAvE,GAAArsI,KAClCva,MAOA6rJ,EAAAvvJ,UAAAyvJ,YAAA,SAAAzrF,EAAA0rF,GAGA,WAFA,KAAAA,IAAoCA,EAAA,QACpChsJ,KAAAyvC,cAAA35B,UAAAkB,MAA2CrG,MAAQF,KAAA,SAAA6vD,SAAA0rF,gBACnDhsJ,MAOA6rJ,EAAAvvJ,UAAA2vJ,kBAAA,SAAA/oG,EAAA8oG,GAGA,WAFA,KAAAA,IAAoCA,EAAA,QACpChsJ,KAAAyvC,cAAA35B,UAAAkB,MAA2CrG,MAAQF,KAAA,SAAAyyC,OAAA8oG,gBACnDhsJ,MAMA6rJ,EAAAvvJ,UAAA4vJ,kBAAA,SAAAv7I,GAEA,MADA3Q,MAAAyvC,cAAA35B,UAAAkB,MAA2CrG,SAC3C3Q,MAKA6rJ,EAAAvvJ,UAAA6vJ,oBAAA,WAEA,MADAnsJ,MAAAyvC,cAAA27G,kBAAA,EACAprJ,MAMA6rJ,EAAAvvJ,UAAA8vJ,gBAAA,SAAArxJ,GAEA,MADAiF,MAAAyvC,cAAA48G,aAAAtxJ,EACAiF,MAMA6rJ,EAAAvvJ,UAAAgwJ,cAAA,SAAArzI,GAEA,MADAjZ,MAAAyvC,cAAA88G,WAAAtzI,EACAjZ,MAMA6rJ,EAAAvvJ,UAAAkwJ,wBAAA,SAAAnB,GAEA,MADArrJ,MAAAyvC,cAAA47G,eACArrJ,MAKA6rJ,EAAAvvJ,UAAAmwJ,kBAAA,WAEA,MADAzsJ,MAAAyvC,cAAA67G,YAAA,EACAtrJ,MAEA6rJ,KAMAa,EAAA,WACA,QAAAA,MAaA,MADAA,GAAApwJ,UAAAqwJ,eAAA,SAAA5K,EAAApxI,KACA+7I,IAEAA,GAAAl8I,aACKC,KAAOkH,EAAA,aAKZ+0I,EAAAt7I,eAAA,WAAkD,SAClD,IAAAw7I,GAAA,WAIA,QAAAA,GAAAC,GACA7sJ,KAAA6sJ,OAmBA,MAZAD,GAAAtwJ,UAAAqwJ,eAAA,SAAA5K,EAAApxI,GACA,GAAyB8lB,GAAA,EACzB,QAAA9lB,EAAAF,MACA,aACAgmB,GAAA9lB,EAAAuyC,KAAA6+F,CACA,MACA,SACAtrH,GAAA9lB,EAAA2vD,OAAAyhF,EAAA,IAAApxI,EAAAq7I,WAEA,MAAAhsJ,MAAA6sJ,KAAA7qJ,IAAAy0B,GACAl6B,IAAA,SAAA4lE,GAAiC,MAAAA,GAAA2qF,UAEjCF,IAEAA,GAAAp8I,aACKC,KAAOkH,EAAA,aAKZi1I,EAAAx7I,eAAA,WAAsD,QACjDX,KAAO60I,EAAA,IAMZ,IAAAyH,GAAA,WACA,QAAAA,MAmBA,MADAA,GAAAzwJ,UAAA0sJ,WAAA,SAAA9lG,EAAAjqC,EAAAle,EAAA4V,EAAAq8I,KACAD,IAEAA,GAAAv8I,aACKC,KAAOkH,EAAA,aAKZo1I,EAAA37I,eAAA,WAAiD,SACjD,IAAA67I,GAAA,WAIA,QAAAA,GAAAx9G,GACAzvC,KAAAyvC,gBA0CA,MAhCAw9G,GAAA3wJ,UAAA0sJ,WAAA,SAAA9lG,EAAAjqC,EAAAle,EAAA4V,EAAAq8I,GACA,aAAAjyJ,EACAiF,KAAAktJ,mBAAAhqG,GAEAvyC,EACA3Q,KAAAmtJ,WAAApyJ,EAAA4V,GAEA5V,GAMAkyJ,EAAA3wJ,UAAA4wJ,mBAAA,SAAAhqG,GACA,aAAAljD,KAAAyvC,cAAA48G,aACArsJ,KAAAyvC,cAAA48G,aAGAnpG,GAOA+pG,EAAA3wJ,UAAA6wJ,WAAA,SAAApyJ,EAAA4V,GACA,GAAyBy8I,GAAA,uBACzB,OAAAryJ,GAAAotC,QAAAilH,EAAA,SAAA1/F,EAAA2/F,GACA,GAA6BC,GAAA38I,EAAA08I,EAC7B,iBAAAC,IAAA5/F,KAGAu/F,IAEAA,GAAAz8I,aACKC,KAAOkH,EAAA,aAKZs1I,EAAA77I,eAAA,WAAwD,QACnDX,KAAAy6I,IAEL,IAAAqC,KACAA,GAAAC,OAAA,EACAD,EAAAE,MAAA,EACAF,IAAAC,QAAA,SACAD,IAAAE,OAAA,OACA,IAAAC,KACAA,GAAAC,QAAA,EACAD,EAAAE,UAAA,EACAF,EAAAG,UAAA,EACAH,IAAAC,SAAA,UACAD,IAAAE,WAAA,YACAF,IAAAG,WAAA,WACA,IAAAC,GAAA,SAAAjqD,EAAA95F,EAAA69I,EAAAC,GACA,WAAAD,MAAA1rH,UAAA,SAAAhV,EAAAgW,GACA,QAAA4qH,GAAA/sJ,GAAmC,IACnC6qJ,EAAAiC,EAAAjsE,KAAA7gF,IAEA,MAAAkC,GACAigC,EAAAjgC,IAEA,QAAA8qJ,GAAAhtJ,GAAkC,IAClC6qJ,EAAAiC,EAAA,MAAA9sJ,IAEA,MAAAkC,GACAigC,EAAAjgC,IAEA,QAAA2oJ,GAAAj8I,GAA+BA,EAAA08C,KAAAn/B,EAAAvd,EAAA5O,OAAA,GAAA6sJ,GAAA,SAAA1gI,GAAiEA,EAAAvd,EAAA5O,SAAyBqrC,KAAA0hH,EAAAC,GACzHnC,GAAAiC,IAAAj+I,MAAAi6F,EAAA95F,QAAA6xE,WAGAopE,EAAA,WAOA,QAAAA,GAAA1qI,EAAAm1B,EAAAs+G,EAAAC,GACAhuJ,KAAAsa,SACAta,KAAAyvC,gBACAzvC,KAAA+tJ,sBACA/tJ,KAAAguJ,qBACAhuJ,KAAAiuJ,mBAAA,GAAsCt2I,GAAA,cAAY,GAClD3X,KAAAkuJ,iBAAA,GAAoCv2I,GAAA,cAAY,GAIhD3X,KAAAmrJ,mBACAnrJ,KAAAmuJ,aAAAT,EAAAG,UAwOA,MAnOA7I,GAAA1oJ,UAAAotJ,iBAAA,WACA,UAAAmC,GAAA7rJ,KAAAyvC,gBAKAu1G,EAAA1oJ,UAAA2uC,iBAAA,WACA,MAAAjrC,MAAAyvC,eAKAu1G,EAAA1oJ,UAAA25H,KAAA,WACA,MAAA63B,GAAA9tJ,SAAA,qBACA,GAAAqD,GAAArD,IACA,OAAA0lJ,GAAA1lJ,KAAA,SAAAyc,GACA,OAAAA,EAAA0C,OACA,OAEA,SAAAnf,KAAAsa,OAAA27G,OACA,QAWA,MATAx5G,GAAAwpI,OACAjmJ,KAAAyvC,cAAA35B,UAAAzX,OAAA,EACA2B,KAAAouJ,YAAAb,EAAAE,MAGAztJ,KAAAouJ,YAAAb,EAAAC,OAGAxtJ,KAAAsa,OAAAmvI,gBAAA9uI,UAAA,WAA2EtX,EAAAomJ,qBAC3E,EAAAzpJ,KAAAypJ,kBACA,QAEA,MADAhtI,GAAAwpI,QACA,SAQAjB,EAAA1oJ,UAAA+xJ,YAAA,WACA,MAAAruJ,MAAA+hJ,UAQAiD,EAAA1oJ,UAAAoiB,UAAA,SAAAuI,EAAAtW,EAAAq8I,GAIA,OAHA,KAAAr8I,IAA8BA,EAAA,UAC9B,KAAAq8I,IAA8BA,EAAAhtJ,KAAA+hJ,UAE9B/hJ,KAAAmuJ,cAAAT,EAAAC,QACA,MAAA1mI,EACA,IAAA5qB,MAAAo/F,QAAAx0E,GAAA,CAEA,OAD6Bhf,MAC7BgxB,EAAA,EAAAq1H,EAAArnI,EAA2CgS,EAAAq1H,EAAAjwJ,OAAoB46B,IAAA,CAC/D,GAAAhgB,GAAAq1I,EAAAr1H,EACAhxB,GAAAgR,GAAAjZ,KAAAuuJ,aAAAt1I,EAAAtI,EAAAq8I,GAEA,MAAA/kJ,GAEA,MAAAjI,MAAAuuJ,aAAAtnI,EAAAtW,EAAAq8I,IAQAhI,EAAA1oJ,UAAAkyJ,eAAA,SAAAvnI,EAAAtW,EAAAq8I,GACA,GAAA3pJ,GAAArD,IAEA,YADA,KAAAgtJ,IAA8BA,EAAAhtJ,KAAA+hJ,UACfoD,EAAA,WAAUrsI,OAAA,SAAA21I,GACzB,GAA6BpuF,GAAAh9D,EAAAqb,UAAAuI,EAAAtW,EAAAq8I,EAC7ByB,GAAA7yE,KAAAvb,GACAouF,EAAAC,cASA1J,EAAA1oJ,UAAAiyJ,aAAA,SAAAt1I,EAAAtI,EAAAq8I,GACA,aAAA/zI,GAAA,IAAAA,EACA,KAEAjZ,KAAAyvC,cAAA67G,YAAA,SAAAzC,KAAA5vI,GACAjZ,KAAA2uJ,oBAAA11I,EAAAtI,EAAAq8I,GAEAhtJ,KAAA4uJ,SAAA31I,EAAAtI,EAAAq8I,IAQAhI,EAAA1oJ,UAAAsyJ,SAAA,SAAA31I,EAAAtI,EAAAq8I,GACA,GAAyB9pG,GAAAjqC,EACAle,EAAA,IACzB,IAAAiF,KAAAmrJ,gBAAA6B,GAAA,CACA,GAA6BzyI,GAAAva,KAAAmrJ,gBAAA6B,GAEA6B,EAAA51I,EAAA4qB,MAAA7jC,KAAAyvC,cAAA47G,aAC7B,IACApyI,EAAA41I,EAAAz3C,QACA78F,EAAAtB,IAAA,gBAAAsB,GAAAtB,KACAsB,IAAAtB,UAEa41I,EAAAxwJ,OAAA,EACbtD,GAAAwf,EAAAtB,IAAAsB,EAAAva,KAAAyvC,cAAA88G,YAEA,MAAAvsJ,MAAAguJ,mBAAAhF,WAAA9lG,EAAAjqC,EAAAle,EAAA4V,EAAAq8I,IAQAhI,EAAA1oJ,UAAAqyJ,oBAAA,SAAA11I,EAAAtI,EAAAq8I,GACA,GAAyB8B,GAAA71I,EAAAkvB,QAAA,YACzB2mH,KAAAlrH,MACA,IAAyBmrH,GAAAzjI,WAAArS,EAEzB,OADAA,KAAAkvB,QAAA,OAAAnoC,KAAAgvJ,gBAAAD,IACA91I,EAAAkvB,QAAA2mH,EAAA9uJ,KAAA4uJ,SAAAE,EAAAn+I,EAAAq8I,KAMAhI,EAAA1oJ,UAAA0yJ,gBAAA,SAAAD,GACA,IAAA7mJ,MAAA6mJ,IAAAxD,EAAAI,kBAAA,CAEA,MAD6B,IAAAD,MAAAuD,aAAAjvJ,KAAA+hJ,UAAA5/H,OAAA4sI,GAG7B,MAAAA,GAAAluI,YAKAmkI,EAAA1oJ,UAAAmtJ,gBAAA,WACA,MAAAqE,GAAA9tJ,SAAA,qBACA,GAAA+hJ,EACA,OAAA2D,GAAA1lJ,KAAA,SAAAyc,GACA,OAAAA,EAAA0C,OACA,OAIA,MAHA4iI,GAAA/hJ,KAAAyvC,cAAA27G,iBAEAprJ,KAAAsa,OAAA8vI,mBADApqJ,KAAAsa,OAAAsI,qBAEA,MAAAm/H,MAAA/hJ,KAAA+hJ,UAAA,KACA/hJ,KAAAouJ,aAAAb,EAAAE,OAAA,MACA,EAAAztJ,KAAA2sJ,eAAA5K,GAAAmN,YACA,QAEA,MADAzyI,GAAAwpI,QACA,IACA,QACAjmJ,KAAAmrJ,mBACAnrJ,KAAAmrJ,gBAAApJ,GAAA/hJ,KAAAyvC,cAAA07G,gBAAApJ,GACA/hJ,KAAAmvJ,mBAAApN,GACAtlI,EAAA0C,MAAA,CACA,wBASA6lI,EAAA1oJ,UAAAqwJ,eAAA,SAAA5K,GACA,GAAA1+I,GAAArD,IACA,OAAemlJ,GAAA,WAAUrsI,OAAA,SAAA21I,GACzBprJ,EAAA8nJ,mBACA9nJ,EAAA8qJ,aAAAT,EAAAE,SAEA,QAD6BwB,MAC7Bn2H,EAAA,EAAAxc,EAAApZ,EAAAosC,cAAA35B,UAAgEmjB,EAAAxc,EAAApe,OAAgB46B,IAAA,CAChF,GAAAo2H,GAAA5yI,EAAAwc,EACAm2H,GAAAp4I,KAAA3T,EAAA0qJ,oBAAApB,eAAA5K,EAAAsN,EAAA1+I,OAGYw0I,EAAA,WAAUmK,MAAA1lJ,MAAau7I,EAAA,WAAUiK,GAAAz0I,UAAA,SAAA1S,GAC7C5E,EAAAksJ,QAAAtnJ,EAAA85I,IACa,SAAApjI,GAEbtb,EAAA6qJ,iBAAA3iJ,KAAAoT,GACAtb,EAAA8rJ,mBAAApN,GACA0M,EAAA7yE,KAAA,MACA6yE,EAAAC,YACa,WACbrrJ,EAAA8rJ,mBAAApN,GACA0M,EAAA7yE,KAAA,MACA6yE,EAAAC,gBASA1J,EAAA1oJ,UAAAizJ,QAAA,SAAAtnJ,EAAA85I,GACA/hJ,KAAAmrJ,gBAAApJ,OAAA,KAAA/hJ,KAAAmrJ,gBAAApJ,GACArnJ,OAAAusC,UAA8BjnC,KAAAmrJ,gBAAApJ,GAAA95I,MAM9B+8I,EAAA1oJ,UAAA6yJ,mBAAA,SAAApN,GACA/hJ,KAAAmuJ,aAAAT,EAAAC,QACA3tJ,KAAA+hJ,WACA/hJ,KAAAwvJ,cAKAxK,EAAA1oJ,UAAAkzJ,WAAA,WAEAxvJ,KAAAiuJ,mBAAA1iJ,KAAAvL,KAAA+hJ,WAEAiD,IAEAA,GAAAx0I,aACKC,KAAOkH,EAAA,aAKZqtI,EAAA5zI,eAAA,WAAiD,QAC5CX,KAAA8zI,IACA9zI,KAAAy6I,IACAz6I,KAAAi8I,IACAj8I,KAAAs8I,KAEL/H,EAAApzI,gBACAq8I,qBAA4Bx9I,KAAOkH,EAAA,SACnCu2I,mBAA0Bz9I,KAAOkH,EAAA,SAKjC,IAAA83I,GAAA,WAKA,QAAAA,GAAAl1I,EAAAlb,OACA,KAAAkb,IAAqCA,EAAA+pI,EAAAtiJ,IAAAgjJ,GACrC,IAAA3hJ,GAAArD,IACAA,MAAAua,cACAva,KAAAX,oBACAW,KAAA0vJ,sBACA1vJ,KAAAgtJ,KAAAhtJ,KAAAua,YAAA8zI,cAEAruJ,KAAA0vJ,mBAAA14I,KAAAhX,KAAAua,YAAA0zI,mBAAAtzI,UAAA,SAAAonI,GACA1+I,EAAA2pJ,KAAAjL,EAEA1+I,EAAAhE,mBACAgE,EAAAhE,kBAAAmM,kBAcA,MAPAikJ,GAAAnzJ,UAAAqzJ,yBAAA,WACA3vJ,KAAA0vJ,mBAAAryJ,QAAA,SAAAm7H,OACA,KAAAA,GACAA,EAAA5B,iBAIA64B,IAEAA,GAAAj/I,aACKC,KAAOkH,EAAA,aAKZ83I,EAAAr+I,eAAA,WAA0C,QACrCX,KAAAu0I,IACAv0I,KAAOkH,EAAA,oBAMZ,IAAAstI,GAAA,SAAArrI,GAOA,QAAAqrI,GAAA3qI,EAAAC,EAAAlb,OACA,KAAAib,IAAgCA,EAAAgqI,EAAAtiJ,IAAAuiJ,QAChC,KAAAhqI,IAAqCA,EAAA+pI,EAAAtiJ,IAAAgjJ,GACrC,IAAA3hJ,GAAAuW,EAAApd,KAAAwD,KAAAua,EAAAlb,IAAAW,IAsBA,OArBAqD,GAAAiX,SACAjX,EAAAkX,cACAlX,EAAAhE,oBACAgE,EAAA+gJ,cAAA/gJ,EAAAiX,OAAAqqI,mBAEAthJ,EAAAqsJ,mBAAA14I,KAAA3T,EAAAiX,OAAAivI,qBAAA5uI,UAAA,SAAAypI,GACA/gJ,EAAA+gJ,gBAEA/gJ,EAAAhE,mBACAgE,EAAAhE,kBAAAmM,kBAGAnI,EAAA0vE,SAAA1vE,EAAAiX,OAAAiwI,qBAEAlnJ,EAAAqsJ,mBAAA14I,KAAA3T,EAAAiX,OAAAkvI,oBAAA7uI,UAAA,SAAAo4D,GACA1vE,EAAA0vE,WAEA1vE,EAAAhE,mBACAgE,EAAAhE,kBAAAmM,kBAGAnI,EAEA,MAjCAkV,GAAA0sI,EAAArrI,GAiCAqrI,GACCwK,EACDxK,GAAAz0I,aACKC,KAAOkH,EAAA,aAKZstI,EAAA7zI,eAAA,WAA2C,QACtCX,KAAA8zI,IACA9zI,KAAAu0I,IACAv0I,KAAOkH,EAAA,oBAKZ,IAAAi4I,GAAA,WAIA,QAAAA,GAAAt1I,GACAta,KAAAsa,SA2DA,MAzDA5f,QAAAI,eAAA80J,EAAAtzJ,UAAA,eAIA0F,IAAA,WAEA,OAD6B6tJ,MACKC,EAAA,EAAYA,GAAA,EAAUA,IACxDD,EAAA74I,KAAAhX,KAAA+vJ,UAAAD,EAAAjvI,YAEA,IAAA0qI,EAAAI,kBACA,OAAsCmE,GAAA,EAAYA,GAAA,EAAUA,IAC5DD,EAAAC,GAAA9vJ,KAAA+vJ,UAAA,GAAArE,MAAAuD,aAAAjvJ,KAAAsa,OAAAqqI,oBAAAxiI,OAAA2tI,GAGA,OAAAD,IAEAptJ,YAAA,EACAC,cAAA,IAOAktJ,EAAAtzJ,UAAAwiB,MAAA,SAAA+O,KAMA+hI,EAAAtzJ,UAAAsoJ,UAAA,SAAAX,KAKA2L,EAAAtzJ,UAAA0zJ,OAAA,SAAA30D,GACA,MAAAA,GAAAlzD,QAAA,kBAA6C,SAAAlH,GAC7C,MAAAtd,QAAAypD,aAAAlsC,SAAAD,EAAAkH,QAAA,mBAOAynH,EAAAtzJ,UAAAyzJ,UAAA,SAAA52I,GACA,YAAAnZ,KAAAiwJ,MAAA92I,EAAA+2I,WAAA,KAMAN,EAAAtzJ,UAAA2zJ,MAAA,SAAAl1J,GACA,GAAyBo1J,GAAAp1J,EAAA8lB,SAAA,IAAA4kC,aAGzB,OADA0qG,GAAA,OAAAv9G,OAAA,IAAAu9G,EAAA9xJ,QAAA8xJ,GAGAP,IAEAA,GAAAp/I,aACKC,KAAOkH,EAAA,aAKZi4I,EAAAx+I,eAAA,WAAyC,QACpCX,KAAA8zI,IAEL,IAAAE,GAAA,SAAA7qI,GAKA,QAAA6qI,GAAAnqI,GACA,GAAAjX,GAAAuW,EAAApd,KAAAwD,KAAAsa,IAAAta,IAEA,OADAqD,GAAAiX,SACAjX,EAuJA,MA9JAkV,GAAAksI,EAAA7qI,GASAlf,OAAAI,eAAA2pJ,EAAAnoJ,UAAA,gBAIA0F,IAAA,WACA,GAA6BouJ,IAC7BC,UAAArwJ,KAAA+vJ,UAAA,KACAO,iBAAAtwJ,KAAA+vJ,UAAA,KACAQ,kBAAAvwJ,KAAA+vJ,UAAA,KAEA,IAAAxE,EAAAI,kBAAA,CAIA,OAFiC6E,GAAA,GAAA9E,MAAAuD,aAAAjvJ,KAAAsa,OAAAqqI,oBAAAxiI,QADA,QAEAsuI,KACKnyJ,EAAA,EAAUA,GAAA,EAAQA,IACxDmyJ,EAAAz5I,KAAAhX,KAAA+vJ,UAAAS,EAAA7jI,OAAAruB,IAQA8xJ,GADA,WAAAK,EAAA,eAAAA,EAAA,IAEAJ,UAAAI,EAAA,GACAH,iBAAAG,EAAA,GACAF,kBAAAE,EAAA,IAGAA,EAAA,IAAAzwJ,KAAA+vJ,UAAA,GAAArE,MAAAuD,aAAAjvJ,KAAAsa,OAAAqqI,oBAAAxiI,OAAA,KAEAkuI,UAAAI,EAAA,GACAH,iBAAAG,EAAA,GACAF,kBAAAE,EAAA,IAGA,WAAAA,EAAA,IAEAJ,UAAAI,EAAA,GACAH,iBAAAG,EAAA,GACAF,kBAAAE,EAAA,KAKAJ,UAAAI,EAAA,GACAH,iBAAAG,EAAA,GACAF,kBAAAE,EAAA,IAIA,MAAAL,IAEA3tJ,YAAA,EACAC,cAAA,IAMA+hJ,EAAAnoJ,UAAAwiB,MAAA,SAAA+O,GAIA,OAHyB9yB,GAAA,GACAq1J,EAAApwJ,KAAAowJ,aACAjjF,EAAAt/C,EAAAgW,MAAA,IACzB5K,EAAA,EAAAy3H,EAAAvjF,EAAmDl0C,EAAAy3H,EAAAryJ,OAA0B46B,IAAA,CAC7E,GAAA03H,GAAAD,EAAAz3H,GAC6B23H,EAAA5wJ,KAAA+vJ,UAAAY,GACAlrJ,EAAAzF,KAAA6vJ,YAAA/xJ,QAAA8yJ,EAC7B,QAAAnrJ,EACA1K,GAAA0K,MAEA,IAAAmrJ,GAAAR,EAAAC,UACAt1J,GAAA,QAEA,IAAA61J,GAAAR,EAAAE,iBAGA,IAAAM,GAAAR,EAAAG,kBACA,QAGA,OAAAM,KANA91J,GAAA,KASA,MAAAuwB,YAAAvwB,IAMA0pJ,EAAAnoJ,UAAAsoJ,UAAA,SAAAX,GACA,GAAyB6M,GAAA,EACAC,EAAA,EACAC,EAAA,CACzB,IAAA/M,EAAA,CACA,GAA6BgN,GAAA,+BACAvlF,EAAAu4E,EAAAhjH,MAAAgwH,EAC7B,OAAAvlF,IACA,MAAAA,EAAA,KACAolF,EAAA5vH,SAAAwqC,EAAA,KAEA,MAAAA,EAAA,KACAqlF,EAAA7vH,SAAAwqC,EAAA,KAEA,MAAAA,EAAA,KACAslF,EAAA9vH,SAAAwqC,EAAA,MAIA,GAOyB2vB,GAPAg1D,EAAArwJ,KAAAowJ,aAAAC,UACAa,EAAAlxJ,KAAA6vJ,YAAA,GACAS,EAAAtwJ,KAAAowJ,aAAAE,iBACAC,EAAAvwJ,KAAAowJ,aAAAG,kBACAY,EAAAnxJ,KAAA6vJ,YAAA,EAkCzB,OA7BAx0D,GADA01D,EAAA,GAAAC,EAAA,EACA,IACAX,EACA,KAAAa,EAAA,IAAAC,EAAAZ,EACA,KAAqBO,EAAA,OACrBR,EACA,IAAAY,EAAA,IAAAC,EACA,KAAqBJ,EAAA,IAAAC,EACrB,KAEA,GAAAD,GAAAC,EAAA,EAEA,IACAX,EACA,KAAAa,EAAA,IAAAC,EAAAZ,EACA,KAAqBO,EAAA,OACrBR,EACA,KAAAY,EAAA,IAAAC,EACA,KAAqBJ,EAAA,IAAAC,EACrB,KAIA,IACAX,EACA,KAAAa,EAAA,IAAAC,EAAAZ,EACA,KAAqBO,EAAA,MAErBz1D,EAAAr7F,KAAAgwJ,OAAA30D,GACyB,GAAAnuB,QAAAmuB,IAGzBopD,GACCmL,EACDnL,GAAAj0I,aACKC,KAAOkH,EAAA,aAKZ8sI,EAAArzI,eAAA,WAA0C,QACrCX,KAAA8zI,IAEL,IAAA6M,GAAA,WAIA,QAAAA,GAAA5M,GACAxkJ,KAAAwkJ,cAYA,MANA4M,GAAA90J,UAAA+0J,YAAA,SAAAxjI,GACA,UAAAA,EACA,KAEA7tB,KAAAwkJ,YAAA1lI,MAAA+O,IAEAujI,IAEAA,GAAA5gJ,aACKC,KAAOkH,EAAA,aAKZy5I,EAAAhgJ,eAAA,WAA+C,QAC1CX,KAAAg0I,IAEL,IAAA6M,GAAA,WAKA,QAAAA,GAAAh3I,EAAAC,GACAva,KAAAsa,SACAta,KAAAua,cAyIA,MAhIA+2I,GAAAh1J,UAAAi1J,QAAA,SAAAC,EAAAC,EAAAC,EAAAj+I,GAEA,OADA,KAAAA,IAAiCA,GAAYk+I,MAAA,OAAAC,YAAA,aAC7CrG,EAAAK,cACA,QAEA,IAAyBiG,GAAA7xJ,KAAAua,YAAAmE,UAAA8yI,GACAM,EAAA9xJ,KAAAua,YAAAmE,UAAA+yI,GACAn3I,EAAAta,KAAA+xJ,aAAA/xJ,KAAAsa,OAAA8vI,mBAAAsH,EACzB,WAAAhG,MAAA4F,SAAAh3I,EAAA7G,GAAA89I,QAAAM,EAAAC,IAUAR,EAAAh1J,UAAA01J,KAAA,SAAAC,EAAAC,EAAAh0I,EAAAwzI,EAAAj+I,GACA,GAAApQ,GAAArD,IAGA,YAFA,KAAAke,IAA+BA,EAAA,WAC/B,KAAAzK,IAAiCA,GAAYk+I,MAAA,OAAAC,YAAA,YAC7CK,GAAAC,GAAA3G,EAAAK,eAGAqG,EAAAD,KAAA,SAAAR,EAAAC,GACA,MAAApuJ,GAAAkuJ,QAAAC,EAAAU,GAAAT,EAAAS,GAAAR,EAAAj+I,KAEA,QAAAyK,GACA+zI,EAAA1lG,UAEA0lG,GARAA,GAkBAX,EAAAh1J,UAAA61J,UAAA,SAAAF,EAAAC,EAAAh0I,EAAAwzI,EAAAj+I,GACA,GAAApQ,GAAArD,IAEA,YADA,KAAAyT,IAAiCA,GAAYk+I,MAAA,OAAAC,YAAA,YAC9BzM,EAAA,WAAUrsI,OAAA,SAAA21I,GACzBA,EAAA7yE,KAAAv4E,EAAA2uJ,KAAAC,EAAAC,EAAAh0I,EAAAwzI,EAAAj+I,IACAg7I,EAAAC,cAUA4C,EAAAh1J,UAAA4sJ,OAAA,SAAAr7H,EAAAokI,EAAAG,EAAA3+I,GACA,GAAApQ,GAAArD,IAEA,QADA,KAAAyT,IAAiCA,GAAYk+I,MAAA,YAC7CM,IAAAG,GAAA,IAAAvkI,GAAA,MAAAA,IAAA09H,EAAAK,cACA,MAAAqG,EAEA,IAAyB33I,GAAAta,KAAAsa,OAAA8vI,mBACAiI,EAAA,GAAA3G,MAAA4F,SAAAh3I,EAAA7G,EAWzB,OAVyBw+I,GAAAr0J,OAAA,SAAAqb,GAEzB,OAD6B66C,IAAA,EACKx1D,EAAA,EAAUA,EAAA8zJ,EAAA/zJ,OAAqBC,IACjE,GAAA+E,EAAA49B,MAAAhoB,EAAAm5I,EAAA9zJ,IAAAuvB,EAAAwkI,GAAA,CACAv+F,GAAA,CACA,OAGA,MAAAA,MAWAw9F,EAAAh1J,UAAAg2J,YAAA,SAAAzkI,EAAAokI,EAAAG,EAAA3+I,GACA,GAAApQ,GAAArD,IAEA,YADA,KAAAyT,IAAiCA,GAAYk+I,MAAA,WAC9BxM,EAAA,WAAUrsI,OAAA,SAAA21I,GACzBA,EAAA7yE,KAAAv4E,EAAA6lJ,OAAAr7H,EAAAokI,EAAAG,EAAA3+I,IACAg7I,EAAAC,cAQA4C,EAAAh1J,UAAAy1J,aAAA,SAAAz3I,EAAAo3I,GAIA,MAHAA,KACAp3I,IAAA,MAAAo3I,GAEAp3I,GAQAg3I,EAAAh1J,UAAA2kC,MAAA,SAAAhoB,EAAA4U,EAAAwkI,GACA,GAAyBt3J,GAAAiF,KAAAua,YAAAmE,UAAAzF,GACAs5I,EAAAx3J,EAAAsD,OACAm0J,EAAA3kI,EAAAxvB,MACzB,IAAAm0J,EAAAD,EACA,QAEA,IAAAC,GAAAD,EACA,UAAAF,EAAAd,QAAAx2J,EAAA8yB,EAGA,QADyBimC,IAAA,EACKx1D,EAAA,EAAUA,EAAAi0J,GAAAC,EAAA,GAAiCl0J,IAAA,CACzE,GAA6BghE,GAAAvkE,EAAA63C,OAAAt0C,EAAAk0J,EAC7B,OAAAH,EAAAd,QAAAjyF,EAAAzxC,GAAA,CACAimC,GAAA,CACA,QAGA,MAAAA,IAEAw9F,IAEAA,GAAA9gJ,aACKC,KAAOkH,EAAA,aAKZ25I,EAAAlgJ,eAAA,WAAuC,QAClCX,KAAA8zI,IACA9zI,KAAAu0I,IAwKL,IAAAyN,GAAA,WAIA,QAAAA,GAAAl4I,GACAva,KAAAua,cAWA,MAHAk4I,GAAAn2J,UAAAo2J,UAAA,SAAAz5I,EAAA+zI,EAAAr8I,GACA,MAAA3Q,MAAAua,YAAAmE,UAAAzF,EAAAtI,EAAAq8I,IAEAyF,IAEAA,GAAAjiJ,aACKC,KAAOkH,EAAA,KAAIhH,OAChBoC,KAAA,YACA4/I,MAAA,MAMAF,EAAArhJ,eAAA,WAA4C,QACvCX,KAAAu0I,IAEL,IAAA4N,GAAA,WACA,QAAAA,MAmBA,MAXAA,GAAAt2J,UAAAo2J,UAAA,SAAA33J,EAAAqpJ,EAAA/oD,GAEA,OADA,KAAAA,IAAiCA,EAAA,kBACjC,KAAA+oD,EACA,WACA,IAAAmH,EAAAC,oBAAA,CAEA,MAD6B,IAAqBhG,GAAA,SAAQpB,GAC1DsO,UAAA33J,EAAAsgG,GAGA,MAAAtgG,IAEA63J,IAEAA,GAAApiJ,aACKC,KAAOkH,EAAA,KAAIhH,OAChBoC,KAAA,aACA4/I,MAAA,MAMAC,EAAAxhJ,eAAA,WAA6C,SAC7C,IAAAyhJ,GAAA,WACA,QAAAA,MAkBA,MAVAA,GAAAv2J,UAAAo2J,UAAA,SAAA33J,EAAAqpJ,EAAAH,GACA,YAAAG,EACA,WACA,IAAAmH,EAAAI,kBAAA,CAEA,MAD6B,IAAwBnG,GAAA,YAAWpB,GAChEsO,UAAA33J,EAAAkpJ,GAGA,MAAAlpJ,IAEA83J,IAEAA,GAAAriJ,aACKC,KAAOkH,EAAA,KAAIhH,OAChBoC,KAAA,gBACA4/I,MAAA,MAMAE,EAAAzhJ,eAAA,WAAgD,SAChD,IAAA0hJ,GAAA,WACA,QAAAA,MAkBA,MAVAA,GAAAx2J,UAAAo2J,UAAA,SAAA33J,EAAAqpJ,EAAAH,GACA,YAAAG,EACA,WACA,IAAAmH,EAAAI,kBAAA,CAEA,MAD6B,IAAwBnG,GAAA,YAAWpB,GAChEsO,UAAA33J,EAAAkpJ,GAGA,MAAAlpJ,IAEA+3J,IAEAA,GAAAtiJ,aACKC,KAAOkH,EAAA,KAAIhH,OAChBoC,KAAA,gBACA4/I,MAAA,MAMAG,EAAA1hJ,eAAA,WAAgD,SAChD,IAAA2hJ,GAAA,WACA,QAAAA,MAqBA,MAXAA,GAAAz2J,UAAAo2J,UAAA,SAAA33J,EAAAqpJ,EAAArxE,EAAAigF,EAAA/O,GAEA,OADA,KAAA+O,IAAuCA,GAAA,OACvC,KAAA5O,OAAA,KAAArxE,EACA,WACA,IAAAw4E,EAAAI,kBAAA,CAEA,MAD6B,IAAyBnG,GAAA,aAAYpB,GAClEsO,UAAA33J,EAAAg4E,EAAAigF,EAAA/O,GAGA,MAAAlpJ,GAAA,IAAAg4E,GAEAggF,IAEAA,GAAAviJ,aACKC,KAAOkH,EAAA,KAAIhH,OAChBoC,KAAA,iBACA4/I,MAAA,MAMAI,EAAA3hJ,eAAA,WAAiD,SAMjD,IAAA6hJ,GAAA,WACA,QAAAA,MAiEA,MA1DAA,GAAAC,cAAA,SAAAv/F,GACA,MAAA3zD,MAAAmzJ,KAAAx/F,IAMAs/F,EAAAE,KAAA,SAAAx/F,GACA,GACyBy/F,GADAtjI,KAEAujI,EAAA,EACAC,EAAA,CAEzB,KADAxjI,EAAA9Y,KAAA28C,GACA7jC,EAAAzxB,OAAA,GAAAg1J,GAAArzJ,KAAAuzJ,WAAA,CAEA,GADAH,EAAAtjI,EAAAsnF,QACAp3G,KAAAwzJ,aAAAJ,GACA,MAAAA,EAEA,IAAAC,EAAArzJ,KAAAuzJ,WAAA,MAAAH,EAAAlgJ,WACA,OAAA+lB,GAAA,EAAAxc,EAAA22I,EAAAlgJ,WAAuD+lB,EAAAxc,EAAApe,OAAgB46B,IAAA,CACvE,GAAAvqB,GAAA+N,EAAAwc,EACAj5B,MAAAyzJ,YAAA/kJ,IACAohB,EAAA9Y,KAAAtI,GAIA,KAAA4kJ,IACAD,IACAC,EAAAxjI,EAAAzxB,QAGA,MAAAs1D,IAMAs/F,EAAAO,aAAA,SAAA1kG,GACA,gBAAAA,GACA,GAAAA,EAAAkC,UACA,MAAAlC,EAAA4kG,WACA,IAAA5kG,EAAA4kG,UAAA9vH,QAOAqvH,EAAAQ,YAAA,SAAA3kG,GACA,YAAAA,GAAA,GAAAA,EAAAkC,UAAAlC,EAAA/mB,WACA,OAAA9O,GAAA,EAAAxc,EAAAqyC,EAAA/mB,WAAkD9O,EAAAxc,EAAApe,OAAgB46B,IAAA,CAClE,GAAA06H,GAAAl3I,EAAAwc,EACA,IAAAj5B,KAAA4zJ,SAAA51H,KAAA21H,EAAA5gJ,MACA,SAGA,UAEAkgJ,IAEAA,GAAAW,SAAA,yBACAX,EAAAM,UAAA,EAIA,IAAAM,GAAA,WAKA,QAAAA,GAAA91J,EAAAoB,GACAa,KAAAjC,KACAiC,KAAAb,WACAa,KAAA+nC,cACA/nC,KAAA8zJ,iBACA9zJ,KAAA+zJ,sBAAqCC,SAAA,EAAAC,eAAA,GACrCj0J,KAAA4zJ,SAAA,SA2LA,MAtLAC,GAAAv3J,UAAA6e,gBAAA,WACAnb,KAAAjC,IAAAiC,KAAAjC,GAAAqG,gBACApE,KAAAd,QAAAc,KAAAjC,GAAAqG,cACApE,KAAAk0J,WAAAjB,EAAAC,cAAAlzJ,KAAAd,SACAc,KAAAm0J,SACAn0J,KAAAo0J,gBACAp0J,KAAAq0J,kBACAr0J,KAAAmhF,UAOA0yE,EAAAv3J,UAAAkI,YAAA,SAAAC,GACAzE,KAAAiZ,MACA,MAAAjZ,KAAA0zJ,WAAA,IAAA1zJ,KAAA0zJ,YACA1zJ,KAAAs0J,eACAt0J,KAAAiZ,IAAAjZ,KAAAs0J,eAEAt0J,KAAAu0J,oBACAv0J,KAAAiZ,IAAAjZ,KAAAu0J,oBAGAv0J,KAAAw0J,eAEAx0J,KAAA+nC,WAAA1pC,OAAA,GACA2B,KAAAy0J,qBAMAZ,EAAAv3J,UAAAgI,YAAA,WACAtE,KAAA00J,qBACA10J,KAAA20J,uBAMAd,EAAAv3J,UAAA6kF,MAAA,aAKA0yE,EAAAv3J,UAAA6rC,QAAA,aAKA0rH,EAAAv3J,UAAAk4J,YAAA,aAKAX,EAAAv3J,UAAAm4J,kBAAA,aAIAZ,EAAAv3J,UAAAs4J,kBAAA,WAGA,OAFyB3tI,GAAAjnB,KAAA60J,oBACA5sJ,KACzBgxB,EAAA,EAAA67H,EAAA7tI,EAAuCgS,EAAA67H,EAAAz2J,OAAoB46B,IAAA,CAC3D,GAAAhgB,GAAA67I,EAAA77H,EACAhxB,GAAAgR,GAAAjZ,KAAA+0J,UAAA97I,GAEA,MAAAhR,IAKA4rJ,EAAAv3J,UAAAu4J,kBAAA,WACA,MAAA70J,MAAA+nC,WAAAxrC,IAAA,SAAAo3J,GAAoD,MAAAA,GAAA16I,OAOpD46I,EAAAv3J,UAAAy4J,UAAA,SAAA9tI,KAKA4sI,EAAAv3J,UAAA04J,QAAA,SAAAj6J,GACAA,IACAiF,KAAA0zJ,WAAA1zJ,KAAAiZ,KACAjZ,KAAA00J,qBACA10J,KAAAb,SAAA81J,SAAAj1J,KAAAk0J,WAAAl0J,KAAA0zJ,UAAAvrH,QAAAnoC,KAAAiZ,IAAAle,IACAiF,KAAAq0J,mBAEAr0J,KAAAs0J,eACAt0J,KAAAb,SAAA69B,aAAAh9B,KAAAd,QAAA,QAAAnE,GAEAiF,KAAAu0J,mBACAv0J,KAAAb,SAAAmI,YAAAtH,KAAAd,QAAA,YAAAnE,KAQA84J,EAAAv3J,UAAA6qC,cAAA,SAAAl/B,GACA,OAAAgxB,GAAA,EAAAxc,EAAAzc,KAAA+nC,WAA8C9O,EAAAxc,EAAApe,OAAgB46B,IAAA,CAC9D,GAAA06H,GAAAl3I,EAAAwc,EACAj5B,MAAAb,SAAA69B,aAAAh9B,KAAAd,QAAAy0J,EAAA5gJ,KAAA9K,EAAA0rJ,EAAA16I,QAMA46I,EAAAv3J,UAAA+3J,gBAAA,WACA,GAAAhxJ,GAAArD,IACA,oBAAAk1J,oBACAl1J,KAAAm1J,aAAA,GAAAD,kBAAA,SAAAE,GACA/xJ,EAAA6wJ,WAAAjB,EAAAC,cAAA7vJ,EAAAnE,SACAmE,EAAA8wJ,SACA9wJ,EAAAmxJ,gBAEAx0J,KAAAm1J,aAAAE,QAAAr1J,KAAAk0J,WAAAl0J,KAAA+zJ,wBAMAF,EAAAv3J,UAAAo4J,mBAAA,eACA,KAAA10J,KAAAm1J,cACAn1J,KAAAm1J,aAAAG,cAMAzB,EAAAv3J,UAAAi5J,QAAA,WAEA,MADAv1J,MAAA0zJ,UAAA,MAAA1zJ,KAAAk0J,WAAAl0J,KAAAk0J,WAAA,aACAl0J,KAAA0zJ,UAAA1zJ,KAAA0zJ,UAAA9vH,OAAA,IAKAiwH,EAAAv3J,UAAA63J,OAAA,WACAn0J,KAAAd,QAAAgU,WAAA7U,OAAA,EACA2B,KAAAiZ,IAAAjZ,KAAAu1J,UAEAv1J,KAAAs0J,eACAt0J,KAAAiZ,IAAAjZ,KAAAs0J,eAEAt0J,KAAAu0J,oBACAv0J,KAAAiZ,IAAAjZ,KAAAu0J,oBAMAV,EAAAv3J,UAAA83J,cAAA,WACA,GAAAp0J,KAAAd,QAAA6oC,WACA,OAAA9O,GAAA,EAAAxc,EAAAzc,KAAAd,QAAA6oC,WAA0D9O,EAAAxc,EAAApe,OAAgB46B,IAAA,CAC1E,GAAA06H,GAAAl3I,EAAAwc,EACA,IAAAj5B,KAAA4zJ,SAAA51H,KAAA21H,EAAA5gJ,MAEA,OADqCA,GAAA4gJ,EAAA5gJ,KAAA6/B,OAAA,GACrCl2B,EAAA,EAAAC,EAAA3c,KAAAd,QAAA6oC,WAAkErrB,EAAAC,EAAAte,OAAgBqe,IAAA,CAClF,GAAA84I,GAAA74I,EAAAD,EACA,IAAAwwD,QAAA,IAAAn6D,EAAA,KAAAirB,KAAAw3H,EAAAziJ,OACA/S,KAAA+nC,WAAA/wB,MAAkDjE,OAAAkG,IAAAu8I,EAAAz6J,WAUlD84J,EAAAv3J,UAAAq4J,oBAAA,WACA30J,KAAA8zJ,cAAAz2J,QAAA,SAAAm7H,OACA,KAAAA,GACAA,EAAA5B,iBAIAi9B,IAEAA,GAAAjiJ,gBACA0iJ,iBAAwB7jJ,KAAOkH,EAAA,MAAKhH,MAAA,WACpC4jJ,oBAA2B9jJ,KAAOkH,EAAA,MAAKhH,MAAA,eAEvC,IAAA8kJ,GAAA,SAAA77I,GAOA,QAAA67I,GAAAl7I,EAAAxc,EAAAoB,GACA,GAAAkE,GAAAuW,EAAApd,KAAAwD,KAAAjC,EAAAoB,IAAAa,IAIA,OAHAqD,GAAAkX,cACAlX,EAAAtF,KACAsF,EAAAlE,WACAkE,EA+DA,MA1EAkV,GAAAk9I,EAAA77I,GAaAlf,OAAAI,eAAA26J,EAAAn5J,UAAA,iBAKAqG,IAAA,SAAAipE,GACA5rE,KAAA4rE,UAEAnpE,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAA26J,EAAAn5J,UAAA,aAKAqG,IAAA,SAAAipE,GACA5rE,KAAA4rE,UAEAnpE,YAAA,EACAC,cAAA,IAKA+yJ,EAAAn5J,UAAA6kF,MAAA,WACA,GAAA99E,GAAArD,IACAA,MAAAmoC,UACAnoC,KAAA8zJ,cAAA98I,KAAAhX,KAAAua,YAAA0zI,mBAAAtzI,UAAA,WAA2FtX,EAAA8kC,cAK3FstH,EAAAn5J,UAAA6rC,QAAA,WACAnoC,KAAAw0J,cACAx0J,KAAAy0J,qBAKAgB,EAAAn5J,UAAAk4J,YAAA,WACAx0J,KAAAiZ,KACAjZ,KAAAg1J,QAAAh1J,KAAA+0J,UAAA/0J,KAAAiZ,OAMAw8I,EAAAn5J,UAAAm4J,kBAAA,WACA,GAAAz0J,KAAA+nC,WAAA1pC,OAAA,GACA,GAA6B4oB,GAAAjnB,KAAA60J,mBAC7B70J,MAAAmnC,cAAAnnC,KAAA+0J,UAAA9tI,MAOAwuI,EAAAn5J,UAAAy4J,UAAA,SAAA9tI,GACA,MAAAjnB,MAAAua,YAAAmE,UAAAuI,EAAAjnB,KAAA4rE,SAEA6pF,GACC5B,EACD4B,GAAAjlJ,aACKC,KAAOkH,EAAA,UAAShH,OACrBC,SAAA,kCAMA6kJ,EAAArkJ,eAAA,WAAiD,QAC5CX,KAAAu0I,IACAv0I,KAAOkH,EAAA,aACPlH,KAAOkH,EAAA,aAEZ89I,EAAA7jJ,gBACA8jJ,gBAAuBjlJ,KAAOkH,EAAA,QAC9B+G,YAAmBjO,KAAOkH,EAAA,QAE1B,IAAAg+I,GAAA,SAAA/7I,GAOA,QAAA+7I,GAAAr7I,EAAAvc,EAAAoB,GACA,GAAAkE,GAAAuW,EAAApd,KAAAwD,KAAAjC,EAAAoB,IAAAa,IAMA,OALAqD,GAAAiX,SACAjX,EAAAtF,KACAsF,EAAAlE,WACAkE,EAAAuyJ,eAAA,aACAvyJ,EAAAwyJ,eAAA,GAAAjD,GACAvvJ,EA8DA,MA3EAkV,GAAAo9I,EAAA/7I,GAeAlf,OAAAI,eAAA66J,EAAAr5J,UAAA,YAKAqG,IAAA,SAAA04F,GACAr7F,KAAAq7F,WAEA54F,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAA66J,EAAAr5J,UAAA,cAKAqG,IAAA,SAAA04F,GACAr7F,KAAAq7F,WAEA54F,YAAA,EACAC,cAAA,IAKAizJ,EAAAr5J,UAAA6kF,MAAA,WACA,GAAA99E,GAAArD,IACAA,MAAAmoC,UACAnoC,KAAA8zJ,cAAA98I,KAAAhX,KAAAsa,OAAAivI,qBAAA5uI,UAAA,WAAwFtX,EAAA8kC,cAKxFwtH,EAAAr5J,UAAA6rC,QAAA,WACAnoC,KAAAw0J,cACAx0J,KAAAy0J,qBAKAkB,EAAAr5J,UAAAk4J,YAAA,WACAx0J,KAAAiZ,KACAjZ,KAAAg1J,QAAAh1J,KAAA+0J,UAAA/0J,KAAAiZ,OAMA08I,EAAAr5J,UAAAm4J,kBAAA,WACAz0J,KAAA+nC,WAAA1pC,OAAA,GACA2B,KAAAmnC,cAAAnnC,KAAA40J,sBAOAe,EAAAr5J,UAAAy4J,UAAA,SAAA9tI,GACA,MAAAjnB,MAAA61J,eAAAnD,UAAAzrI,EAAAjnB,KAAAsa,OAAAqqI,mBAAA3kJ,KAAAq7F,SAAAr7F,KAAA41J,iBAEAD,GACC9B,EACD8B,GAAAnlJ,aACKC,KAAOkH,EAAA,UAAShH,OACrBC,SAAA,8BAMA+kJ,EAAAvkJ,eAAA,WAAkD,QAC7CX,KAAA8zI,IACA9zI,KAAOkH,EAAA,aACPlH,KAAOkH,EAAA,aAEZg+I,EAAA/jJ,gBACAkkJ,WAAkBrlJ,KAAOkH,EAAA,QACzBo+I,aAAoBtlJ,KAAOkH,EAAA,QAE3B,IAAAq+I,GAAA,SAAAp8I,GAOA,QAAAo8I,GAAA17I,EAAAvc,EAAAoB,GACA,GAAAkE,GAAAuW,EAAApd,KAAAwD,KAAAjC,EAAAoB,IAAAa,IAKA,OAJAqD,GAAAiX,SACAjX,EAAAtF,KACAsF,EAAAlE,WACAkE,EAAA4yJ,kBAAA,GAAApD,GACAxvJ,EA8DA,MA1EAkV,GAAAy9I,EAAAp8I,GAcAlf,OAAAI,eAAAk7J,EAAA15J,UAAA,eAKAqG,IAAA,SAAAshJ,GACAjkJ,KAAAikJ,UAEAxhJ,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAAk7J,EAAA15J,UAAA,iBAKAqG,IAAA,SAAAshJ,GACAjkJ,KAAAikJ,UAEAxhJ,YAAA,EACAC,cAAA,IAKAszJ,EAAA15J,UAAA6kF,MAAA,WACA,GAAA99E,GAAArD,IACAA,MAAAmoC,UACAnoC,KAAA8zJ,cAAA98I,KAAAhX,KAAAsa,OAAAivI,qBAAA5uI,UAAA,WAAwFtX,EAAA8kC,cAKxF6tH,EAAA15J,UAAA6rC,QAAA,WACAnoC,KAAAw0J,cACAx0J,KAAAy0J,qBAKAuB,EAAA15J,UAAAk4J,YAAA,WACAx0J,KAAAiZ,KACAjZ,KAAAg1J,QAAAh1J,KAAA+0J,UAAA/0J,KAAAiZ,OAMA+8I,EAAA15J,UAAAm4J,kBAAA,WACAz0J,KAAA+nC,WAAA1pC,OAAA,GACA2B,KAAAmnC,cAAAnnC,KAAA40J,sBAOAoB,EAAA15J,UAAAy4J,UAAA,SAAA9tI,GACA,MAAAjnB,MAAAi2J,kBAAAvD,UAAAzrI,EAAAjnB,KAAAsa,OAAAqqI,mBAAA3kJ,KAAAikJ,SAEA+R,GACCnC,EACDmC,GAAAxlJ,aACKC,KAAOkH,EAAA,UAAShH,OACrBC,SAAA,oCAMAolJ,EAAA5kJ,eAAA,WAAqD,QAChDX,KAAA8zI,IACA9zI,KAAOkH,EAAA,aACPlH,KAAOkH,EAAA,aAEZq+I,EAAApkJ,gBACAskJ,cAAqBzlJ,KAAOkH,EAAA,QAC5Bw+I,gBAAuB1lJ,KAAOkH,EAAA,QAE9B,IAAAy+I,GAAA,SAAAx8I,GAOA,QAAAw8I,GAAA97I,EAAAvc,EAAAoB,GACA,GAAAkE,GAAAuW,EAAApd,KAAAwD,KAAAjC,EAAAoB,IAAAa,IAKA,OAJAqD,GAAAiX,SACAjX,EAAAtF,KACAsF,EAAAlE,WACAkE,EAAAgzJ,kBAAA,GAAAvD,GACAzvJ,EA8DA,MA1EAkV,GAAA69I,EAAAx8I,GAcAlf,OAAAI,eAAAs7J,EAAA95J,UAAA,eAKAqG,IAAA,SAAAshJ,GACAjkJ,KAAAikJ,UAEAxhJ,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAAs7J,EAAA95J,UAAA,iBAKAqG,IAAA,SAAAshJ,GACAjkJ,KAAAikJ,UAEAxhJ,YAAA,EACAC,cAAA,IAKA0zJ,EAAA95J,UAAA6kF,MAAA,WACA,GAAA99E,GAAArD,IACAA,MAAAmoC,UACAnoC,KAAA8zJ,cAAA98I,KAAAhX,KAAAsa,OAAAivI,qBAAA5uI,UAAA,WAAwFtX,EAAA8kC,cAKxFiuH,EAAA95J,UAAA6rC,QAAA,WACAnoC,KAAAw0J,cACAx0J,KAAAy0J,qBAKA2B,EAAA95J,UAAAk4J,YAAA,WACAx0J,KAAAiZ,KACAjZ,KAAAg1J,QAAAh1J,KAAA+0J,UAAA/0J,KAAAiZ,OAMAm9I,EAAA95J,UAAAm4J,kBAAA,WACAz0J,KAAA+nC,WAAA1pC,OAAA,GACA2B,KAAAmnC,cAAAnnC,KAAA40J,sBAOAwB,EAAA95J,UAAAy4J,UAAA,SAAA9tI,GACA,MAAAjnB,MAAAq2J,kBAAA3D,UAAAzrI,EAAAjnB,KAAAsa,OAAAqqI,mBAAA3kJ,KAAAikJ,SAEAmS,GACCvC,EACDuC,GAAA5lJ,aACKC,KAAOkH,EAAA,UAAShH,OACrBC,SAAA,oCAMAwlJ,EAAAhlJ,eAAA,WAAqD,QAChDX,KAAA8zI,IACA9zI,KAAOkH,EAAA,aACPlH,KAAOkH,EAAA,aAEZy+I,EAAAxkJ,gBACA0kJ,cAAqB7lJ,KAAOkH,EAAA,QAC5B4+I,gBAAuB9lJ,KAAOkH,EAAA,QAE9B,IAAA6+I,GAAA,SAAA58I,GAOA,QAAA48I,GAAAl8I,EAAAvc,EAAAoB,GACA,GAAAkE,GAAAuW,EAAApd,KAAAwD,KAAAjC,EAAAoB,IAAAa,IAKA,OAJAqD,GAAAiX,SACAjX,EAAAtF,KACAsF,EAAAlE,WACAkE,EAAAozJ,mBAAA,GAAA1D,GACA1vJ,EA+DA,MA3EAkV,GAAAi+I,EAAA58I,GAcAlf,OAAAI,eAAA07J,EAAAl6J,UAAA,gBAKAqG,IAAA,SAAAshJ,GACAjkJ,KAAAikJ,UAEAxhJ,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAA07J,EAAAl6J,UAAA,kBAKAqG,IAAA,SAAAshJ,GACAjkJ,KAAAikJ,UAEAxhJ,YAAA,EACAC,cAAA,IAKA8zJ,EAAAl6J,UAAA6kF,MAAA,WACA,GAAA99E,GAAArD,IACAA,MAAAmoC,UACAnoC,KAAA8zJ,cAAA98I,KAAAhX,KAAAsa,OAAAivI,qBAAA5uI,UAAA,WAAwFtX,EAAA8kC,aACxFnoC,KAAA8zJ,cAAA98I,KAAAhX,KAAAsa,OAAAkvI,oBAAA7uI,UAAA,WAAuFtX,EAAA8kC,cAKvFquH,EAAAl6J,UAAA6rC,QAAA,WACAnoC,KAAAw0J,cACAx0J,KAAAy0J,qBAKA+B,EAAAl6J,UAAAk4J,YAAA,WACAx0J,KAAAiZ,KACAjZ,KAAAg1J,QAAAh1J,KAAA+0J,UAAA/0J,KAAAiZ,OAMAu9I,EAAAl6J,UAAAm4J,kBAAA,WACAz0J,KAAA+nC,WAAA1pC,OAAA,GACA2B,KAAAmnC,cAAAnnC,KAAA40J,sBAOA4B,EAAAl6J,UAAAy4J,UAAA,SAAA9tI,GACA,MAAAjnB,MAAAy2J,mBAAA/D,UAAAzrI,EAAAjnB,KAAAsa,OAAAqqI,mBAAA3kJ,KAAAsa,OAAAiwI,qBAAAvqJ,KAAA02J,OAAA12J,KAAAikJ,SAEAuS,GACC3C,EACD2C,GAAAhmJ,aACKC,KAAOkH,EAAA,UAAShH,OACrBC,SAAA,sCAMA4lJ,EAAAplJ,eAAA,WAAsD,QACjDX,KAAA8zI,IACA9zI,KAAOkH,EAAA,aACPlH,KAAOkH,EAAA,aAEZ6+I,EAAA5kJ,gBACA+kJ,eAAsBlmJ,KAAOkH,EAAA,QAC7Bi/I,iBAAwBnmJ,KAAOkH,EAAA,QAC/B++I,SAAgBjmJ,KAAOkH,EAAA,QAsDvB,IAAAk/I,GAAA,WACA,QAAAA,KACA72J,KAAAkkJ,UAAAjnD,OAAAinD,UACAlkJ,KAAAmkJ,UAAAlnD,OAAAknD,UAsCA,MApCAzpJ,QAAAI,eAAA+7J,EAAAv6J,UAAA,sBAMAqG,IAAA,SAAAshJ,GACAjkJ,KAAAikJ,UAEAxhJ,YAAA,EACAC,cAAA,IAEAhI,OAAAI,eAAA+7J,EAAAv6J,UAAA,wBAKAqG,IAAA,SAAAshJ,GACAjkJ,KAAAikJ,UAEAxhJ,YAAA,EACAC,cAAA,IAKAm0J,EAAAv6J,UAAA+H,SAAA,WACArE,KAAA82J,UAAA9S,EAAAhkJ,KAAAikJ,OAAAjkJ,KAAA8kJ,UAAA9kJ,KAAAkkJ,UAAAlkJ,KAAA+kJ,UAAA/kJ,KAAAmkJ,YAMA0S,EAAAv6J,UAAAkmD,SAAA,SAAAkiG,GACA,MAAA1kJ,MAAA82J,UAAApS,IAEAmS,IAEAA,GAAArmJ,aACKC,KAAOkH,EAAA,UAAShH,OACrBC,SAAA,+IAGAkF,YACAihJ,QAAAtR,EAAA,cAAAuR,YAAAt8J,OAAAid,EAAA,6BAAAk/I,KAAAI,OAAA,QAOAJ,EAAAzlJ,eAAA,qBACAylJ,EAA4BjlJ,gBAC5BslJ,qBAAAzmJ,KAA8BkH,EAAO,QACrCqsI,uBAAyBvzI,KAAAkH,EAAO,QAChCmtI,WAAkBr0I,KAAOkH,EAAA,QACzBotI,WAAAt0I,KAAAkH,EAAA,QAKA,IAAAw/I,IAAA,WAIA,QAAAA,GAAA/gC,GACAp2H,KAAAo2H,WAyDC,MAjDD+gC,GAAAC,QAA+B,SAAAv7I,GAE/B,WADA,KAAAA,WAEAw7I,SAAAF,EACArhJ,WACAwuI,EACAgC,EACA/B,GAEAwS,QAAA/O,EACiBsP,SAAAz7I,EAAA07I,eAAAtP,GAEjBiD,EACAlG,GAEA+R,QAAArK,EACiB4K,SAAAz7I,EAAAkyI,qBAAAnB,IAGjBmK,QAAAhK,EACAuK,SAAAz7I,EAAAmyI,oBAAAf,MAUAkK,EAAAK,SAA+B,SAAY37I,GAE3C,WADA,KAAAA,WAEAw7I,SAAAF,EACArhJ,WACAwuI,EACA4G,EACAlG,GAEA+R,QAAArK,EACiB4K,SAAAz7I,EAAAkyI,qBAAAnB,IAGjBmK,QAAAhK,EACAuK,SAAAz7I,EAAAmyI,oBAAAf,MAKCkK,IAEDA,IAAY3mJ,aACZC,KAAAkH,EAAA,SAAAhH,OACAyB,cACAqgJ,EACAgD,GAEA7jK,SACA6gK,EACAgD,OAOA0B,GAAK/lJ,eAAqB,mBACxBX,KAAA6zI,IAKF,IAAAY,IAAA,WAIA,QAAAA,GAAA9uB,GACAp2H,KAAAo2H,WAyDC,MAjDD8uB,GAAAkS,QAA+B,SAAYv7I,GAE3C,WADA,KAAAA,WAEAw7I,SAAAnS,EACApvI,WACAwuI,EACAgC,EACA/B,GAEAwS,QAAA/O,EACiBsP,SAAAz7I,EAAA07I,eAAAtP,GAEjBiD,EACAlG,GAEA+R,QAAArK,EACiB4K,SAAAz7I,EAAAkyI,qBAAAnB,IAGjBmK,QAAAhK,EACAuK,SAAAz7I,EAAAmyI,oBAAAf,MAUA/H,EAAAsS,SAA+B,SAAY37I,GAE3C,WADA,KAAAA,WAEAw7I,SAAAnS,EACApvI,WACAwuI,EACA4G,EACAlG,GAEA+R,QAAArK,EACiB4K,SAAAz7I,EAAAkyI,qBAAAnB,IAGjBmK,QAAAhK,EACAuK,SAAAz7I,EAAAmyI,oBAAAf,MAKC/H,IAEDA,IAAY10I,aACZC,KAAAkH,EAAA,SAAAhH,OACAyB,cACAwgJ,EACAC,EACAC,EACAC,EACA4C,EACAK,EACAI,EACAI,GAEAnkJ,SACA8kJ,IAEAvlK,SACAulK,GACAvE,EACAC,EACAC,EACAC,EACA4C,EACAK,EACAI,EACAI,OAOAtR,GAAK9zI,eAAqB,mBACxBX,KAAA6zI,IAKF,IAAAmT,IAAA,WACA,QAAAA,MAYC,MANDA,GAAAL,QAAA,WACA,OACAC,SAAAI,EACA3hJ,WAAA2uI,EAAA2M,KAGCqG,IAEDA,IAAYjnJ,aACZC,KAAAkH,EAAA,SAAAhH,OACAyB,cACAykJ,GAEAjlK,SACAilK,OAOAY,GAAArmJ,eAAA,sBlPoj+BMsmJ,IACA,SAAU/lK,EAAQsI,EAAqBC,GAE7C,YmPhlkCA,SAAA8kF,GAAYjsE,EAAA4kJ,GACZ,OAAAlnJ,KAAA,EAAAsC,OAAA4kJ,cAAAlkJ,YAkDA,QAAApL,GAAAuvJ,EAAAzmJ,GAEA,WADY,KAAZA,IAAYA,EAAA,OACZV,KAAA,EAAAU,SAAAymJ,WA6EA,QAAAC,GAAAC,EAAArkJ,GAEA,WADY,KAAZA,IAAYA,EAAA,OACZhD,KAAA,EAAAqnJ,QAAArkJ,WA8CA,QAAA7W,GAAY4iE,GACZ,OAAA/uD,KAAA,EAAAU,OAAAquD,EAAAt0D,OAAA,MAsDA,QAAA6sJ,GAAYhlJ,EAAA5B,EAAAsC,GACZ,OAAAhD,KAAA,EAAAsC,OAAA5B,SAAAsC,WAiDA,QAAAukJ,GAAYF,GACZ,OAAArnJ,KAAA,EAAAqnJ,SAgIA,QAAAG,GAAAC,EAA6BJ,EAAArkJ,GAE7B,WADY,KAAZA,IAAYA,EAAA,OACZhD,KAAA,EAAA0nJ,KAAAD,EAAAE,UAAAN,EAAArkJ;;;;;;;;;AAkWA,QAAA4kJ,GAAA3gH,GACAxb,QAAAhV,QAAA,MAAAkf,KAAAsR;;;;;;;;;;;;;;;;;;;;;;;;;;AC97BA,QAAA4gH,GAAAC,GACA,OAAAA,EAAAl6J,QACA,OACA,UAAAm6J,GACA,QACA,MAAAD,GAAA,EACA,SACA,UAAAE,IAAAF,IAGA,QAAAG,GAAAC,EAA+BC,EAAgB15J,EAAA25J,EAAAC,EAAAC,OAC/C,KAAAD,IAAgCA,UAChC,KAAAC,SACA,IAAAnuH,MACAouH,KACAC,GAAA,EACAC,EAAA,IA+BA,IA9BAL,EAAAx7J,QAAA,SAAA87J,GACA,GAAAjuJ,GAAAiuJ,EAAA,OACAC,EAAAluJ,GAAA+tJ,EACAI,EAAAD,GAAAF,KACAx+J,QAAAusB,KAAAkyI,GAAA97J,QAAA,SAAAi8J,GACA,GAAAC,GAAAD,EACAE,EAAAL,EAAAG,EACA,eAAAA,EAEA,OADAC,EAAAX,EAAAa,sBAAAF,EAAA3uH,GACA4uH,GACA,IAAAE,IACAF,EAAAV,EAAAQ,EACA,MACA,KAAAK,IACAH,EAAAT,EAAAO,EACA,MACA,SACAE,EACAZ,EAAAgB,oBAAAN,EAAAC,EAAAC,EAAA5uH,GAISyuH,EAAAE,GAAAC,IAETJ,GACAJ,EAAAhiJ,KAAAqiJ,GAEAH,EAAAG,EACKJ,EAAA/tJ,IAEL0/B,EAAAvsC,OAAA,CAEA,SAAAuoB,OAAA,sDAAAgkB,EAAA5G,KADA,UAGA,MAAAg1H,GAEA,QAAAa,GAAAC,EAAA94E,EAAA18C,EAAA/X,GACA,OAAAy0D,GACA,YACA84E,EAAAxtI,QAAA,iBAAAC,GAAA+X,GAAAy1H,EAAAz1H,EAAA,QAAAw1H,EAAAE,aACA,MACA,YACAF,EAAAG,OAAA,iBAAA1tI,GAAA+X,GAAAy1H,EAAAz1H,EAAA,OAAAw1H,EAAAE,aACA,MACA,eACAF,EAAAI,UAAA,iBAAA3tI,GAAA+X,GAAAy1H,EAAAz1H,EAAA,UAAAw1H,EAAAE,eAIA,QAAAD,GAAA98J,EAAAk9J,EAAAH,GACA,GAAA11H,GAAA81H,EAAAn9J,EAAAiC,QAAAjC,EAAAo9J,YAAAp9J,EAAAq9J,UAAAr9J,EAAAs9J,QAAAJ,GAAAl9J,EAAAk9J,cAAAt3J,IAAAm3J,EAAA/8J,EAAA+8J,aACA/xJ,EAAAhL,EAAA,KAIA,OAHA,OAAAgL,IACAq8B,EAAA,MAAAr8B,GAEAq8B,EAEA,QAAA81H,GAAAl7J,EAA+Bm7J,EAAgBC,EAAAC,EAAAJ,EAAAH,GAG/C,WAFA,KAAAG,IAA+BA,EAAA,QACnB,KAAZH,IAAYA,EAAA,IACZ96J,UAAAm7J,cAAAC,YAAAC,UAAAJ,YAAAH,aAEA,QAAAQ,GAAAj+J,EAAA0c,EAAAwhJ,GACA,GAAA1/J,EAaA,OAZAwB,aAAAm+J,MACA3/J,EAAAwB,EAAAyF,IAAAiX,KAEA1c,EAAAoG,IAAAsW,EAAAle,EAAA0/J,IAIA1/J,EAAAwB,EAAA0c,MAEAle,EAAAwB,EAAA0c,GAAAwhJ,GAGA1/J,EAEA,QAAA4/J,GAAAC,GACA,GAAAC,GAAAD,EAAA98J,QAAA,IAGA,QAFA88J,EAAAltG,UAAA,EAAAmtG,GACAD,EAAAhoH,OAAAioH,EAAA,IA+FA,QAAAC,GAAA//J,GACA,mBAAAA,GACA,MAAAA,EACA,IAAAwgG,GAAAxgG,EAAAkmC,MAAA,oBACA,QAAAs6D,KAAAl9F,OAAA,EACA,EACA08J,EAAAzvI,WAAAiwE,EAAA,IAAAA,EAAA,IAEA,QAAAw/D,GAAAhgK,EAAAigK,GACA,OAAAA,GACA,QACA,MAAAjgK,GAAAkgK,EACA,SACA,MAAAlgK,IAGA,QAAAmgK,GAAAtD,EAAAhtH,EAAAuwH,GACA,MAAAvD,GAAAp8J,eAAA,YACAo8J,EACAwD,EAAAxD,EAAAhtH,EAAAuwH,GAEA,QAAAC,GAAAC,EAAAzwH,EAAAuwH,GACA,GACA9vI,GADAiwI,EAAA,2EAEA1vI,EAAA,EACAhkB,EAAA,EACA,oBAAAyzJ,GAAA,CACA,GAAA9/D,GAAA8/D,EAAAp6H,MAAAq6H,EACA,WAAA//D,EAEA,MADA3wD,GAAA5zB,KAAoB,8BAAAqkJ,EAAA,kBACpBhwI,SAAA,EAAAO,MAAA,EAAAhkB,OAAA,GAEAyjB,GAAA0vI,EAAAzvI,WAAAiwE,EAAA,IAAAA,EAAA,GACA,IAAAggE,GAAAhgE,EAAA,EACA,OAAAggE,IACA3vI,EAAAmvI,EAAAh4J,KAAA4M,MAAA2b,WAAAiwI,IAAAhgE,EAAA,IAEA,IAAAigE,GAAAjgE,EAAA,EACAigE,KACA5zJ,EAAA4zJ,OAIAnwI,GAAAgwI,CAEA,KAAAF,EAAA,CACA,GAAAM,IAAA,EACAv5J,EAAA0oC,EAAAvsC,MACAgtB,GAAA,IACAuf,EAAA5zB,KAAA,oEACAykJ,GAAA,GAEA7vI,EAAA,IACAgf,EAAA5zB,KAAA,iEACAykJ,GAAA,GAEAA,GACA7wH,EAAAnG,OAAAviC,EAAA,gCAAAm5J,EAAA,iBAGA,OAAAhwI,WAAAO,QAAAhkB,UAEA,QAAA8zJ,GAAAj0H,EAAA+1B,GAGA,WAFA,KAAAA,UACA9iE,OAAAusB,KAAAwgB,GAAApqC,QAAA,SAAAi8J,GAAA97F,EAAA87F,GAAA7xH,EAAA6xH,KACA97F,EAEA,QAAA4wD,GAAAj9G,GACA,GAAAwqJ,KAOA,OANAt/J,OAAAo/F,QAAAtqF,GACAA,EAAA9T,QAAA,SAAA4K,GAAA,MAAA2zJ,GAAA3zJ,GAAA,EAAA0zJ,KAGAC,EAAAzqJ,GAAA,EAAAwqJ,GAEAA,EAEA,QAAAC,GAAAzqJ,EAAA0qJ,EAAiCr+F,GAEjC,OADA,KAAAA,UACAq+F,EAIA,OAAAvC,KAAAnoJ,GACAqsD,EAAA87F,GAAAnoJ,EAAAmoJ,OAIAoC,GAAAvqJ,EAAAqsD,EAEA,OAAAA,GAEA,QAAAs+F,GAAA58J,EAAAiS,GACAjS,EAAA,OACAxE,OAAAusB,KAAA9V,GAAA9T,QAAA,SAAAi8J,GACA,GAAAyC,GAAAC,EAAA1C,EACSp6J,GAAAtC,MAAAm/J,GAAA5qJ,EAAAmoJ,KAIT,QAAA2C,GAAA/8J,EAAAiS,GACAjS,EAAA,OACAxE,OAAAusB,KAAA9V,GAAA9T,QAAA,SAAAi8J,GACA,GAAAyC,GAAAC,EAAA1C,EACSp6J,GAAAtC,MAAAm/J,GAAA,KAIT,QAAAG,GAAApE,GACA,MAAAz7J,OAAAo/F,QAAAq8D,GACA,GAAAA,EAAAz5J,OACey5J,EAAQ,GACvBD,EAAAC,GAEAA,EAEA,QAAAqE,GAAAphK,EAAA0Y,EAAAm3B,GACA,GAAAghC,GAAAn4D,EAAAm4D,WACA2vB,EAAA6gE,EAAArhK,EACAwgG,GAAAl9F,QACAk9F,EAAAl+F,QAAA,SAAAg/J,GACAzwF,EAAApwE,eAAA6gK,IACAzxH,EAAA5zB,KAAA,+CAAAqlJ,EAAA,kCAMA,QAAAD,GAAArhK,GACA,GAAA6wE,KACA,oBAAA7wE,GAAA,CAGA,IAFA,GAAAY,GAAAZ,EAAA8lB,WACAogB,MAAA,GACAA,EAAAq7H,GAAAzT,KAAAltJ,IACAiwE,EAAA50D,KAAAiqB,EAAA,GAEAq7H,IAAAC,UAAA,EAEA,MAAA3wF,GAEA,QAAA4wF,GAAAzhK,EAAA6wE,EAAAhhC,GACA,GAAAf,GAAA9uC,EAAA8lB,WACAy+C,EAAAz1B,EAAA1B,QAAAm0H,GAAA,SAAA/1G,EAAA81G,GACA,GAAAI,GAAA7wF,EAAAywF,EAMK,OAJLzwF,GAAApwE,eAAA6gK,KACAzxH,EAAA5zB,KAAA,kDAAAqlJ,GACAI,EAAA,IAEKA,EAAA57I,YAGL,OAAAy+C,IAAAz1B,EAAA9uC,EAAAukE,EAEA,QAAAo9F,GAAArW,GAGA,IAFA,GAAAzyF,MACApuD,EAAA6gJ,EAAAzqE,QACAp2E,EAAA6gD,MACAuN,EAAA58C,KAAAxR,EAAAzK,OACAyK,EAAA6gJ,EAAAzqE,MAEA,OAAAhoB,GAGA,QAAAooG,GAAA99J,GACA,MAAAA,GAAAiqC,QAAAw0H,GAAA,WAEA,OADArhK,MACA29B,EAAA,EAAAA,EAAApvB,UAAAxL,OAAA46B,IACA39B,EAAA29B,GAAApvB,UAAAovB,EAEK,OAAA39B,GAAA,GAAAmqD,gBAGL,QAAAm3G,GAAAvxI,EAAAO,GACA,WAAAP,GAAA,IAAAO,EAEA,QAAAixI,GAAAC,EAAAhuG,EAAAy8B,GACA,OAAAz8B,EAAAr+C,MACA,OACA,MAAAqsJ,GAAAC,aAAAjuG,EAAAy8B,EACA,QACA,MAAAuxE,GAAAE,WAAAluG,EAAAy8B,EACA,QACA,MAAAuxE,GAAAG,gBAAAnuG,EAAAy8B,EACA,QACA,MAAAuxE,GAAAI,cAAApuG,EAAAy8B,EACA,QACA,MAAAuxE,GAAAK,WAAAruG,EAAAy8B,EACA,QACA,MAAAuxE,GAAAM,aAAAtuG,EAAAy8B,EACA,QACA,MAAAuxE,GAAAO,eAAAvuG,EAAAy8B,EACA,QACA,MAAAuxE,GAAAQ,WAAAxuG,EAAAy8B,EACA,QACA,MAAAuxE,GAAAS,eAAAzuG,EAAAy8B,EACA,QACA,MAAAuxE,GAAAU,kBAAA1uG,EAAAy8B,EACA,SACA,MAAAuxE,GAAAW,gBAAA3uG,EAAAy8B,EACA,SACA,MAAAuxE,GAAAY,WAAA5uG,EAAAy8B,EACA,SACA,MAAAuxE,GAAAa,aAAA7uG,EAAAy8B,EACA,SACA,SAAA3kE,OAAA,8CAAAkoC,EAAAr+C,OAgBA,QAAAmtJ,GAAqBC,EAAAjzH,GACrB,GAAAkzH,KASA,OARA,gBAAAD,GACA,EACAh6H,MAAA,WACAxmC,QAAA,SAAAiiE,GAAA,MAAAy+F,GAAAz+F,EAAAw+F,EAAAlzH,KAGAkzH,EAAA9mJ,KAAA,GAEA8mJ,EAQA,QAAAC,GAAAC,EAAAF,EAAAlzH,GACA,KAAAozH,EAAA,KACAA,EAAAC,EAAAD,EAAApzH,GAEA,IAAA3J,GAAA+8H,EAAA/8H,MAAA,0CACA,UAAAA,KAAA5iC,OAAA,EAEA,MADAusC,GAAA5zB,KAAA,uCAAAgnJ,EAAA,sBACAF,CAEA,IAAqBxD,GAAAr5H,EAAA,GACA/d,EAAA+d,EAAA,GACrBs5H,EAAAt5H,EAAA,EACA68H,GAAA9mJ,KAAqBknJ,EAAA5D,EAAAC,GACrB,IAAA4D,GAAA7D,GAAA8D,IAAA7D,GAAA6D,EACA,MAAAl7I,EAAA,IAAAi7I,GACAL,EAAA9mJ,KAAAknJ,EAAA3D,EAAAD,IAQA,QAAA2D,GAAAI,EAAAzzH,GACA,OAAAyzH,GACA,aACA,iBACA,cACA,iBACA,SAEA,MADAzzH,GAAA5zB,KAAA,+BAAAqnJ,EAAA,sBACA,UAcA,QAAAH,GAAqBI,EAAAC,GACrB,GAAqBC,GAAAC,GAAAC,IAAAJ,IAAAK,GAAAD,IAAAJ,GACrBM,EAAAH,GAAAC,IAAAH,IAAAI,GAAAD,IAAAH,EACA,iBAAAjE,EAAyBC,GACzB,GAAyBsE,GAAAP,GAAAF,IAAAE,GAAAhE,EACzBwE,EAAAP,GAAAH,IAAAG,GAAAhE,CAOA,QANAsE,GAAAL,GAAA,iBAAAlE,KACAuE,EAAAvE,EAAAmE,GAAAC,IAAAJ,GAAAK,GAAAD,IAAAJ,KAEAQ,GAAAF,GAAA,iBAAArE,KACAuE,EAAAvE,EAAAkE,GAAAC,IAAAH,GAAAI,GAAAD,IAAAH,IAEAM,GAAAC,GAiBA,QAAAC,GAAeplJ,EAAAixB,GACf,UAAAo0H,KAAA/V,MAAAtvI,EAAAixB,GA4bA,QAAAq0H,GAAqBruJ,GACrB,GAAAsuJ,KAAAtuJ,EAAAizB,MAAA,WAAAokB,KAAA,SAAApsC,GAAA,MAAAA,IAAAsjJ,IASA,OARAD,KACAtuJ,IAAAu3B,QAAAi3H,GAAA,KAEAxuJ,IAAAu3B,QAAAk3H,GAAAC,IACAn3H,QAAAo3H,GAAAC,IACAr3H,QAAA,OAAAs3H,IACAt3H,QAAA,iBAAAlH,GAAA,MAAAw+H,IAAA,IAAAx+H,EAAA2R,OAAA,KACAzK,QAAA,cAAAu3H,KACA9uJ,EAAAsuJ,GAMA,QAAAS,GAAAl4H,GACA,MAAAA,GAAAi0H,EAAAj0H,GAAA,KAwBA,QAAAm4H,GAAAzuJ,GACA,mBAAAA,GACA,WACA,IAAAjG,GAAA,IACA,IAAA7O,MAAAo/F,QAAAtqF,GACAA,EAAA9T,QAAA,SAAAwiK,GACA,GAAAC,EAAAD,IAAiCA,EAAArkK,eAAA,WACjC,GAAAisC,GAAA,CACAv8B,GAAAogB,WAAAmc,EAAA,cACAA,GAAA,cAIA,IAAAq4H,EAAA3uJ,IAAyBA,EAAA3V,eAAA,WACzB,GAAAisC,GAAA,CACAv8B,GAAAogB,WAAAmc,EAAA,cACAA,GAAA,OAEA,MAAAv8B,GAMA,QAAA40J,GAAA/kK,GACA,OAAAsB,MAAAo/F,QAAA1gG,IAAA,gBAAAA,GAOA,QAAAglK,GAAqBhlK,EAAA6vC,GACrB,GAAAgtH,GAAA,IACA,IAAA78J,EAAAS,eAAA,YACAo8J,EAAA,MAEA,IAAyB,gBAAzB78J,GAAyB,CACzB,GAAAswB,GAAwC6vI,EAAE,EAAAtwH,GAAAvf,QAC1C,OAAA20I,GAAA,QAEA,GAAqBC,GAAA,CAErB,IADAA,EAAAp8H,MAAA,OAAAloB,KAAA,SAAAjC,GAAA,WAAAA,EAAAiT,OAAA,SAAAjT,EAAAiT,OAAA,KACA,CACA,GAAAuzI,GAAAF,EAAA,OAGA,OAFAE,GAAAC,SAAA,EACAD,EAAAD,WACA,EAGA,MADArI,MAAAsD,EAAA+E,EAAAr1H,GACAo1H,EAAApI,EAAAvsI,SAAAusI,EAAAhsI,MAAAgsI,EAAAhwJ,QAMA,QAAAw4J,GAAA3sJ,GAUA,MATAA,IACAA,EAAAioJ,EAAAjoJ,GACAA,EAAA,SACAA,EAAA,OAAAksJ,EAAAlsJ,EAAA,UAIAA,KAEAA,EAQA,QAAAusJ,GAAY30I,EAAAO,EAAAhkB,GACZ,OAAAyjB,WAAAO,QAAAhkB;;;;;;;AAoBA,QAAAy4J,GAA4BnhK,EAAe25J,EAAAyH,EAAAC,EAAAl1I,EAAAO,EAAAhkB,EAAA44J,GAG3C,WAFA,KAAA54J,MAAiC,UACjC,KAAA44J,OAAA,IAEA/vJ,KAAA,EACAvR,UACA25J,YACAyH,gBACAC,iBACAl1I,WACAO,QACAouI,UAAA3uI,EAAAO,EAAAhkB,SAAA44J,eAsEA,QAAAC,GAAA9H,EAAoC+H,EAAAR,EAAqBS,EAAAC,EAAAntJ,EAAAotJ,EAAAj2H,GAIzD,WAHA,KAAA+1H,IAAiCA,UACjC,KAAAC,IAA4BA,UAC5B,KAAAh2H,WACA,GAAAk2H,KAAAC,eAAApI,EAAA+H,EAAAR,EAAAS,EAAAC,EAAAntJ,EAAAotJ,EAAAj2H,GAg3BA,QAAAo2H,GAAA91J,EAAA+1J,OACqB,KAArBA,IAAqBA,EAAA,EACrB,IAAAC,GAAAn+J,KAAAyqB,IAAA,GAAAyzI,EAAA,EACA,OAAAl+J,MAAA4J,MAAAzB,EAAAg2J,KAOA,QAAAC,GAAqBjjK,EAAAkjK,GACrB,GACAC,GADqBlwJ,IAWrB,OATAjT,GAAAb,QAAA,SAAAwe,GACA,MAAAA,GACAwlJ,KAAA3mK,OAAmDusB,KAAAm6I,GACnDC,EAAAhkK,QAAA,SAAAi8J,GAAAnoJ,EAAAmoJ,GAAAK,MAGAiC,EAAA,KAAAzqJ,KAGAA;;;;;;;AA6JA,QAAAmwJ,GAAApiK,EAAAm7J,EAAAC,EAAAC,EAAAgH,EAAAC,EAAAC,EAAAC,EAAAC,EAAArB,EAAAC,EAAA31H,GACA,OACAn6B,KAAA,EACAvR,UACAm7J,cACAkH,sBACAjH,YACAkH,aACAjH,UACAkH,WACAC,YACAC,kBACArB,gBACAC,iBACA31H,UAyFA,QAAAg3H,GAAAC,EAAwCC,EAAAC,GACxC,MAAAF,GAAAlmJ,KAAA,SAAAqS,GAAA,MAAAA,GAAA8zI,EAAAC;;;;;;;AAsDA,QAAAC,GAAAjvJ,EAAAmtJ,GACA,UAAA+B,IAAAlvJ,EAAAmtJ,GA4DA,QAAAgC,IAAqB7H,EAAA8H,GAWrB,UAAAC,IAAA/H,GAPA5pJ,KAAA,EACA2nJ,WAHqB3nJ,KAAA,EAAAqnJ,SAAArkJ,QAAA,MAIrB4uJ,UALqB,SAAiB/H,EAAAC,GAAA,WAMtC9mJ,QAAA,KACA6uJ,WAAA,EACAC,SAAA,GAEAJ,GAQA,QAAAK,IAAA/6H,EAAA+pH,EAAAC,GACAhqH,EAAAjsC,eAAAg2J,GACA/pH,EAAAjsC,eAAAi2J,KACAhqH,EAAAgqH,GAAAhqH,EAAA+pH,IAGA/pH,EAAAjsC,eAAAi2J,KACAhqH,EAAA+pH,GAAA/pH,EAAAgqH,IA0oDA,QAAAgR,IAAqBlmK,EAAA0c,EAAAle,GACrB,GAAA2nK,EACA,IAAAnmK,YAAAm+J,MAEA,GADAgI,EAAAnmK,EAAAyF,IAAAiX,GACA,CACA,GAAAypJ,EAAArkK,OAAiC,CACjC,GAAAoH,GAAAi9J,EAAA5kK,QAAA/C,EACA2nK,GAAAj+H,OAAAh/B,EAAA,GAEA,GAAAi9J,EAAArkK,QACA9B,EAAAomK,OAAA1pJ,QAMA,IADAypJ,EAAAnmK,EAAA0c,GACA,CACA,GAAAypJ,EAAArkK,OAAiC,CACjC,GAAAoH,GAAAi9J,EAAA5kK,QAAA/C,EACA2nK,GAAAj+H,OAAAh/B,EAAA,GAEA,GAAAi9J,EAAArkK,cACA9B,GAAA0c,GAIA,MAAAypJ,GAMA,QAAAE,IAAA7nK,GAIA,aAAAA,IAAA,KAMA,QAAA8nK,IAAA/zG,GACA,MAAAA,IAAA,IAAAA,EAAA,SAMA,QAAAg0G,IAAA9hF,GACA,eAAAA,GAAA,QAAAA,EAOA,QAAA+hF,IAAqB7jK,EAAAnE,GACrB,GAAA6T,GAAA1P,EAAAtC,MAAAC,OAEA,OADAqC,GAAAtC,MAAAC,QAAA,MAAA9B,IAAA,OACA6T,EASA,QAAAo0J,IAAqBrK,EAAArsG,EAAA22G,EAAAC,GACrB,GAAAC,KACA72G,GAAAjvD,QAAqB,SAAA6B,GAAA,MAAAikK,GAAAnsJ,KAAA+rJ,GAAA7jK,KACrB,IAAqBkkK,GAAA,GAAA1I,KACrB2I,IACAJ,GAAA5lK,QAAyB,SAAAimK,EAAApkK,GACzB,GAAAiS,KACAmyJ,GAAAjmK,QAAA,SAA6Bi8J,GAC7B,GAAAv+J,GAAAoW,EAAAmoJ,GAAAX,EAAA4K,aAAArkK,EAAAo6J,EAAA4J,EAGAnoK,IAAA,GAAAA,EAAAsD,SACAa,EAAAskK,IAAAC,GACAJ,EAAArsJ,KAAA9X,MAGKkkK,EAAAzgK,IAAAzD,EAAAiS,IAIL,IAAA7S,GAAA,CAEA,OADAguD,GAAAjvD,QAAA,SAAA6B,GAAA,MAAA6jK,IAAA7jK,EAAAikK,EAAA7kK,SACA8kK,EAAAC,GAMA,QAAAK,IAAqBC,GACrB,GAEAC,GAFqBC,EAAA,GAAAC,KAAAH,GACAI,EAAA,GAAAD,IAerB,OAbAF,GAAA,SAAA90G,GACA,OAAAA,IAEA+0G,EAAAnF,IAAA5vG,EAAA/xD,gBAEAgnK,EAAArF,IAAA5vG,EAAA/xD,eAEA6mK,EAAA90G,EAAA/xD,cACAgnK,EAAAr7I,IAAAomC,IACA,KAYA,QAAAk1G,IAAA9kK,EAAAykC,GACA,GAAAzkC,EAAAivD,UACA,MAAAjvD,GAAAivD,UAAA81G,SAAAtgI,EAGA,IAAAptB,GAAArX,EAAAglK,GACA,OAAA3tJ,MAAAotB,GAQA,QAAA2wB,IAAAp1D,EAAAykC,GACA,GAAAzkC,EAAAivD,UACAjvD,EAAAivD,UAAAzlC,IAAAib,OAEA,CACA,GAAAptB,GAAArX,EAAAglK,GACA3tJ,KACAA,EAAArX,EAAAglK,QAEA3tJ,EAAAotB,IAAA,GAQA,QAAA+wB,IAAAx1D,EAAAykC,GACA,GAAAzkC,EAAAivD,UACAjvD,EAAAivD,UAAAhtC,OAAAwiB,OAEA,CACA,GAAAptB,GAAArX,EAAAglK,GACA3tJ,UACAA,GAAAotB,IAOA,QAAAwgI,MACA,yBAAAlpK,UACAA,SAAA6Q,KAEA,KAQA,QAAAs4J,IAAAC,EAAAnlK,EAAqDq5J,GACrDD,EAAAC,GAAA0B,OAAA,iBAAAoK,GAAAC,iBAAAplK,KAMA,QAAAqlK,IAAqBhM,GACrB,GAAAiM,KAEA,OADAC,IAAAlM,EAAAiM,GACAA,EAOA,QAAAC,IAA0BlM,EAAUiM,GACpC,OAAyBlmK,GAAA,EAAAA,EAAAi6J,EAAAl6J,OAAAC,IAAA,CACzB,GAAAw7J,GAA8BvB,EAAAj6J,EAC9Bw7J,aAAArB,IACAgM,GAAA3K,EAAAvB,QAAAiM,GAGAA,EAAAxtJ,KAAA,IASA,QAAA0tJ,IAAmB5hJ,EAAEnK,GACrB,GAAqBgsJ,GAAAjqK,OAAAusB,KAAAnE,GACrB8hJ,EAAAlqK,OAAAusB,KAAAtO,EACA,IAAAgsJ,EAAAtmK,QAAAumK,EAAAvmK,OACA,QACA,QAAyBC,GAAA,EAAAA,EAAAqmK,EAAAtmK,OAAAC,IAAA,CACzB,GAAAg7J,GAAAqL,EAAArmK,EACA,KAAAqa,EAAAnd,eAAA89J,IAAAx2I,EAAAw2I,KAAA3gJ,EAAA2gJ,GACA,SAEA,SAQA,QAAAuL,IAAqB3lK,EAAA4lK,EAAAC,GACrB,GAAAC,GAAAD,EAAA/iK,IAAA9C,EACA,KAAA8lK,EACA,QACA,IAAAC,GAAAH,EAAA9iK,IAAA9C,EAQA,OAPA+lK,GACAD,EAAA3nK,QAAA,SAAA4K,GAAA,SAAAygB,IAAAzgB,KAGA68J,EAAAniK,IAAAzD,EAAA8lK,GAEAD,EAAApC,OAAAzjK,IACA,EA2YA,QAAAgmK,IAAAhmK,EAAAo6J,GACA,MAAAr5J,QAAA2tD,iBAAA1uD,GAAAo6J,GAsEA,QAAA6L,MACA,yBAAAC,UAAA,2BAAA9oK,UAAA,QChlJA,QAAA+oK,IAAAlmK,EAAAD,EAAA2T,EAAA+nJ,EAAAjqJ,GACA,MAAAxR,GAAAmI,YAAApI,EAAA,KAAA2T,EAAA,IAAA+nJ,EAAAjqJ,GA6XA,QAAA20J,IAAAtsJ,GACA,OAAAA,GACA,WACA,MAAA/d,UAAA6Q,IACA,gBACA,MAAA7Q,SACA,cACA,MAAAgF,OACA,SACA,MAAA+Y,IAOA,QAAAusJ,IAAqBlL,GACrB,GAAqBmL,GAAAnL,EAAAv8J,QAAA,IAGrB,QAFqBu8J,EAAA3sG,UAAA,EAAA83G,GACrBnL,EAAAznH,OAAA4yH,EAAA,IAkCA,QAAQC,MACR,MAAAN,MACA,GAAAO,IAEA,GAAAC,IAKA,QAAAC,MACA,UAAAC,IAQA,QAAAC,IAAA3mK,EAAAklK,EAAAjlK,GACA,UAAA2mK,IAAA5mK,EAAAklK,EAAAjlK,GCxmBA,QAAA4mK,IAAA5rK,EAAAue,GAEA,QAAAC,KAAA5Y,KAAA6Y,YAAAze,EADAoe,GAAApe,EAAmBue,GAEnBve,EAAAkC,UAAA,OAAAqc,EAAAje,OAAAoe,OAAAH,IAAAC,EAAAtc,UAAAqc,EAAArc,UAAA,GAAAsc,IAuCA,QAAAwwI,IAAAvlD,EAAA95F,EAAA69I,EAAAC,GACA,WAAAD,MAAA1rH,UAAmC,SAAMhV,EAAAgW,GACzC,QAAA4qH,GAAA/sJ,GAAkC,IAAM6qJ,EAAAiC,EAAAjsE,KAAA7gF,IAAiC,MAAEkC,GAAAigC,EAAYjgC,IACvF,QAAA8qJ,GAAAhtJ,GAA+B,IAAA6qJ,EAAAiC,EAAA,MAAA9sJ,IAAA,MAAAkC,GAAAigC,EAAAjgC,IAC/B,QAAA2oJ,GAAAj8I,KAAA08C,KAAAn/B,EAAAvd,EAAA5O,OAAA,GAAA6sJ,GAAA,SAAA1gI,KAAAvd,EAAA5O,SAAAqrC,KAAA0hH,EAAAC,GACKnC,GAAAiC,IAAAj+I,MAAAi6F,EAAA95F,QAAA6xE,UAIL,QAAA8pE,IAAa7hD,EAAA/3F,GAGb,QAAA65I,GAAA3tI,GAAA,gBAAA0B,GAAA,MAAAksI,IAAA5tI,EAAA0B,KACA,QAAAksI,GAAAC,GACA,GAAA93H,EAAA,SAAA61E,WAAA,kCACA,MAAAr9C,GAAA,IACA,GAAAx4B,EAAA,EAAA9pB,IAAAwqB,EAAA,EAAAo3H,EAAA,GAAA5hJ,EAAA,OAAA4hJ,EAAA,GAAA5hJ,EAAA,SAAAwqB,EAAAxqB,EAAA,SAAAwqB,EAAAjyB,KAAAyH,GAAA,GAAAA,EAAA23E,SAAAntD,IAAAjyB,KAAAyH,EAAA4hJ,EAAA,KAAAx/F,KAAA,MAAA53B,EAEA,QADAxqB,EAAA,EAAAwqB,IAAAo3H,GAAA,EAAAA,EAAA,GAAAp3H,EAAA1zB,QACA8qJ,EAAA,IACA,cAAAp3H,EAAkCo3H,CAAA,MAClC,QAAkC,MAAlCt/F,GAAApnC,SAAkCpkB,MAAW8qJ,EAAA,GAAUx/F,MAAA,EACvD,QAAAE,EAAApnC,QAAAlb,EAAA4hJ,EAAyC,GAAAA,GAAA,EAAc,SACvD,QAAAA,EAAAt/F,EAAAu/F,IAAA98G,MAAAud,EAAAw/F,KAAA/8G,KAAA,SACA,SACA,GAAAva,EAAA83B,EAAAw/F,OAAAt3H,IAAApwB,OAAA,GAAAowB,IAAApwB,OAAA,MAAgF,IAAhFwnJ,EAAgF,IAAwB,IAAxBA,EAAiB,IAAO,CAAAt/F,EAAA,WACxG,OAAAs/F,EAAA,MAAAp3H,GAAAo3H,EAAA,GAAAp3H,EAAwD,IAAAo3H,EAAA,GAAAp3H,EAAgB,KAAQ83B,EAAApnC,MAAO0mI,EAAA,SACvF,OAAAA,EAAA,IAAAt/F,EAAApnC,MAA8CsP,EAAA,IAAA83B,EAAApnC,MAAgBsP,EAAA,GAAAA,EAAAo3H,CAAgB,OAC9E,GAAAp3H,GAAA83B,EAAApnC,MAAAsP,EAAA,IAAA83B,EAAApnC,MAAAsP,EAAA,GAAA83B,EAAAu/F,IAAA9uI,KAAA6uI,EAAA,OACAp3H,EAAA,IAAA83B,EAAAu/F,IAAiC98G,MACjCud,EAAAw/F,KAAA/8G,KAAA,UAES68G,EAAA/5I,EAAYtP,KAAAqnG,EAAat9C,GAClC,MAAAtpD,GAAA4oJ,GAAA,EAAA5oJ,GAAmCgH,EAAA,EAAS,QAAA8pB,EAAAU,EAAA,EAC5C,KAAAo3H,EAAA,QAAAA,GAAA,UAAA9qJ,MAAA8qJ,EAAA,GAAAA,EAAA,UAAAx/F,MAAA,GAvBA,GAAqEt4B,GAAA9pB,EAAAwqB,EAAAu3H,EAArEz/F,GAAApnC,MAAgB,EAAA8mI,KAAA,gBAAAx3H,EAAA,QAAAA,GAAA,EAAqD,OAAAA,GAAA,IAAAs3H,QAAAD,OACrE,OAAAE,IAAApqE,KAAsB+pE,EAAA,GAAAO,MAAAP,EAAsB,GAAAQ,OAAAR,EAAqB,IAAG,kBAAAS,UAAAJ,EAAAI,OAAAC,UAAA,iBAAArmJ,QAAAgmJ,EAyCpE,QAAAigB,IAAAzyI,EAAAxb,GACA,GAAA1c,GAAA,kBAAA8qJ,SAAA5yH,EAAA4yH,OAAAC,SACA,KAAA/qJ,EAAA,MAAAk4B,EACA,IAAApa,GAAAnc,EAAAqB,EAAAhD,EAAAkB,KAAAg3B,GAAA8rF,IACA,KACA,eAAAtnG,QAAA,MAAAoB,EAAA9a,EAAAs9E,QAAAv1B,MAAAi5D,EAAAtoG,KAAAoC,EAAAre,OAEA,MAAA4jB,GAAA1hB,GAAA0hB,SACA,QACA,IACAvF,MAAAitC,OAAA/qD,EAAAgD,EAAA,SAAAhD,EAAAkB,KAAA8B,GAEA,WAAArB,EAAA,KAAAA,GAAA0hB,OAEA,MAAA2gG,GAGA,QAAA4mD,MACA,OAAA5mD,MAAAhhH,EAAA,EAAAA,EAAAuL,UAAAxL,OAAAC,IACAghH,IAAA9zF,OAAAy6I,GAAAp8J,UAAAvL,IACA,OAAAghH,GC5BA,QAAA6mD,MACAnmK,KAAAomK,OAsBA,QAAAC,IAAA/hI,IACA,OAAAxmC,QAAAwmC,EAAAkwE,UAAA,GACAlwE,EAAAuxE,iBCoBA,QAAAywD,IAAAvrK,EAAAie,GACA,GAAAutJ,GAAAvtJ,EAAAhZ,KAAAwmK,WAAA3lJ,UACA,OAAA0lJ,MACA7zJ,cACA5U,QAAA/C,EAAA2X,gBAAA,EAYA,QAAA+zJ,IAAAh/H,GACA,MAAAA,KAAA/sC,OAAA+sC,GAkDA,QAAAz7B,IAAA06J,EAAAC,EAA+BC,GAE/B,OADA,KAAAA,OAAA,IACA5mK,KAAAoxB,UAAA51B,eAAAkrK,GACA,SAAA9/I,OAAA,iCAEAggJ,IAGA5mK,KAAAoxB,UAAAs1I,GAAA1vJ,KAAA2vJ,GCnOO,QAAAE,IAAuCntJ,GAAwB,QAAUA,GAAI,eAAkBA,GzP652DtG,QAASotJ,IAAgBptJ,GAAK,QAASA,GAAK,eAAiBA,IAAK,YAAcA,IAAK,cAAgBA,G0P952DrG,QAASqtJ,IAAA/tJ,EAAQwd,GACjB,MAAAwwI,IAAAhuJ,IAAAguJ,GAAAxwI,IAEA97B,OAAAusB,KAAAuP,GACAn5B,QAAA,SAAAoc,GACA,GAAAR,GAAAQ,EACAwtJ,EAAAzwI,EAAAvd,GACAstJ,EAAAvtJ,EAAAC,EACA5c,OAAAo/F,QAAA8qE,IAAAlqK,MAAAo/F,QAAAwrE,GACAjuJ,EAAiBC,GAAAstJ,EAAQ/6I,OAAAy7I,GACzBD,GAAAT,IAAAS,GAAAC,GACAjuJ,EAAAC,GAAA8tJ,GAAArsK,OAAAusC,OAAAvsC,OAAAoe,OAAA,MAAAytJ,GAAAU,GAEKjuJ,EAAAC,GAAAguJ,IAELjuJ,GAbAwd,E1P8q7DA,Q2P/q7DiD0wI,IAAAnsK,EAAAosK,GAEhD,WADsB,KAAtBA,IAA+BA,EAAgB,GAC/CC,GAAArsK,GAAAkiG,OAAAliG,GAAAosK,E3Pir7DD,Q2P3q7DCC,IAAcrsK,GACd,OAAAmN,MAAAojB,WAAAvwB,MAAAmN,MAAA+0F,OAAAliG,I3P6q7DD,Q2Pxq7DCssK,IAAwBtsK,GACxB,aAAAA,GAAA,GAAAA,GAAA,Q3PinrED,Q4PxnrECusK,IAAaC,GACb,wBAAAA,GAAAC,Q5PmxkCD,GAAIxsK,IAAWd,EAAoB,GAG/ButK,GAAYvtK,EAAoB,GAGhCwtK,GAAWxtK,EAAoB,GAG/BytK,GAAuBztK,EAAoB,IAG3C0tK,GAAY1tK,EAAoB,ImPtvkCpC2tK,GAAA,WACA,QAAAA,MAQC,MADDA,GAAAvrK,UAAA2sJ,MAAA,SAAAmP,KACCyP,KASDC,GAAA,WACA,QAAAA,MASC,MADDA,GAAAxrK,UAAAwc,OAAA,SAAA5Z,EAAAuU,KACCq0J,KAKDnO,GAAA,IAm4BAnB,GAAA,WACA,QAAAA,KACAx4J,KAAA+nK,cACA/nK,KAAAgoK,eACAhoK,KAAAioK,iBACAjoK,KAAAkoK,UAAA,EACAloK,KAAAmoK,YAAA,EACAnoK,KAAAooK,WAAA,EACApoK,KAAAqoK,aAAA,KACAroK,KAAAg6J,UAAA,EAkGC,MA7FDxB,GAAAl8J,UAAAgsK,UAAA,WACAtoK,KAAAooK,YACApoK,KAAAooK,WAAA,EACApoK,KAAA+nK,WAAA1qK,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAA+nK,gBAOAvP,EAAAl8J,UAAAgwB,QAAA,SAAA0B,GAAAhuB,KAAAgoK,YAAAhxJ,KAAAgX,IAKAwqI,EAAAl8J,UAAA29J,OAAA,SAAAjsI,GAAAhuB,KAAA+nK,WAAA/wJ,KAAAgX,IAKAwqI,EAAAl8J,UAAA49J,UAAA,SAAAlsI,GAAAhuB,KAAAioK,cAAAjxJ,KAAAgX,IAIAwqI,EAAAl8J,UAAAisK,WAAA,iBAAAvoK,MAAAkoK,UAIA1P,EAAAl8J,UAAA25H,KAAA,aAIAuiC,EAAAl8J,UAAAksK,KAAA,WACAxoK,KAAAuoK,eACAvoK,KAAAyoK,mBACAzoK,KAAA0oK,YAEA1oK,KAAAkoK,UAAA,GAKA1P,EAAAl8J,UAAAmsK,iBAAA,WACA,GAAAplK,GAAArD,IACAq4J,GAAA,iBAAAh1J,GAAAilK,eAKA9P,EAAAl8J,UAAAosK,SAAA,WACA1oK,KAAAgoK,YAAA3qK,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAAgoK,gBAKAxP,EAAAl8J,UAAAqsK,MAAA,aAIAnQ,EAAAl8J,UAAAssK,QAAA,aAIApQ,EAAAl8J,UAAA2hE,OAAA,WAAAj+D,KAAAsoK,aAIA9P,EAAAl8J,UAAAyY,QAAA,WACA/U,KAAAmoK,aACAnoK,KAAAmoK,YAAA,EACAnoK,KAAAuoK,cACAvoK,KAAA0oK,WAEA1oK,KAAAi+D,SACAj+D,KAAAioK,cAAA5qK,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAAioK,mBAMAzP,EAAAl8J,UAAAusK,MAAA,aAKArQ,EAAAl8J,UAAAwsK,YAAA,SAAAvtK,KAIAi9J,EAAAl8J,UAAAysK,YAAA,qBACCvQ,KASDC,GAAA,WAIA,QAAAA,GAAAuQ,GACA,GAAA3lK,GAAArD,IACAA,MAAAgpK,WACAhpK,KAAA+nK,cACA/nK,KAAAgoK,eACAhoK,KAAAooK,WAAA,EACApoK,KAAAkoK,UAAA,EACAloK,KAAAmoK,YAAA,EACAnoK,KAAAioK,iBACAjoK,KAAAqoK,aAAA,KACAroK,KAAAg6J,UAAA,CACA,IAAAiP,GAAA,EACAC,EAAA,EACAC,EAAA,EACAntJ,EAAAhc,KAAAgpK,SAAA3qK,MACA,IAAA2d,EACAq8I,EAAA,iBAAAh1J,GAAAilK,cAGAtoK,KAAAgpK,SAAA3rK,QAAA,SAAAy8J,GACAA,EAAAuO,aAAAhlK,EACAy2J,EAAAG,OAAA,aACAgP,GAAAjtJ,GACA3Y,EAAAilK,cAGAxO,EAAAI,UAAA,aACAgP,GAAAltJ,GACA3Y,EAAA+lK,eAGAtP,EAAAxtI,QAAA,aACA68I,GAAAntJ,GACA3Y,EAAAqlK,eAKA1oK,KAAAg6J,UAAAh6J,KAAAgpK,SAAAprH,OAAA,SAAAt1C,EAAAwxJ,GAAA,MAAA/2J,MAAAC,IAAAsF,EAAAwxJ,EAAAE,YAAA,GAuIC,MAlIDvB,GAAAn8J,UAAAgsK,UAAA,WACAtoK,KAAAooK,YACApoK,KAAAooK,WAAA,EACApoK,KAAA+nK,WAAA1qK,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAA+nK,gBAMAtP,EAAAn8J,UAAA25H,KAAA,WAAAj2H,KAAAgpK,SAAA3rK,QAAA,SAAAy8J,GAAA,MAAAA,GAAA7jC,UAKAwiC,EAAAn8J,UAAAgwB,QAAA,SAAA0B,GAAAhuB,KAAAgoK,YAAAhxJ,KAAAgX,IAIAyqI,EAAAn8J,UAAAosK,SAAA,WACA1oK,KAAAuoK,eACAvoK,KAAAgoK,YAAA3qK,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAAgoK,eACAhoK,KAAAkoK,UAAA,IAOAzP,EAAAn8J,UAAA29J,OAAA,SAAAjsI,GAAAhuB,KAAA+nK,WAAA/wJ,KAAAgX,IAKAyqI,EAAAn8J,UAAA49J,UAAA,SAAAlsI,GAAAhuB,KAAAioK,cAAAjxJ,KAAAgX,IAIAyqI,EAAAn8J,UAAAisK,WAAA,iBAAAvoK,MAAAkoK,UAIAzP,EAAAn8J,UAAAksK,KAAA,WACAxoK,KAAAqoK,cACAroK,KAAAi2H,OAEAj2H,KAAA0oK,WACA1oK,KAAAgpK,SAAA3rK,QAAA,SAAAy8J,GAAA,MAAAA,GAAA0O,UAKA/P,EAAAn8J,UAAAqsK,MAAA,WAAA3oK,KAAAgpK,SAAA3rK,QAAA,SAAAy8J,GAAA,MAAAA,GAAA6O,WAIAlQ,EAAAn8J,UAAAssK,QAAA,WAAA5oK,KAAAgpK,SAAA3rK,QAAA,SAAAy8J,GAAA,MAAAA,GAAA8O,aAIAnQ,EAAAn8J,UAAA2hE,OAAA,WACAj+D,KAAAsoK,YACAtoK,KAAAgpK,SAAA3rK,QAAA,SAAAy8J,GAAA,MAAAA,GAAA77F,YAKAw6F,EAAAn8J,UAAAyY,QAAA,WAAA/U,KAAAopK,cAIA3Q,EAAAn8J,UAAA8sK,WAAA,WACAppK,KAAAmoK,aACAnoK,KAAAmoK,YAAA,EACAnoK,KAAAsoK,YACAtoK,KAAAgpK,SAAA3rK,QAAA,SAAAy8J,GAAsD,MAAAA,GAAa/kJ,YACnE/U,KAAAioK,cAAA5qK,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAAioK,mBAMAxP,EAAAn8J,UAAAusK,MAAA,WACA7oK,KAAAgpK,SAAA3rK,QAAA,SAAAy8J,GAAA,MAAAA,GAAA+O,UACA7oK,KAAAmoK,YAAA,EACAnoK,KAAAooK,WAAA,EACApoK,KAAAkoK,UAAA,GAMAzP,EAAyBn8J,UAAAwsK,YAAA,SAAAvtK,GACzB,GAAA8tK,GAAA9tK,EAAAyE,KAAAg6J,SACAh6J,MAAAgpK,SAAA3rK,QAA6B,SAAAy8J,GAC7B,GAAAnsG,GAAAmsG,EAAAE,UAAAj3J,KAAA0D,IAAA,EAAA4iK,EAAAvP,EAAAE,WAAA,CACSF,GAAAgP,YAAAn7G,MAMT8qG,EAAyBn8J,UAAAysK,YAAA,WACzB,GAAAtiK,GAAA,CAKA,OAJAzG,MAAAgpK,SAAA3rK,QAA6B,SAAAy8J,GAC7B,GAAAv+J,GAAAu+J,EAAAiP,aACStiK,GAAA1D,KAAA0D,IAAAlL,EAAAkL,KAETA,GAEA/L,OAAAI,eAAA29J,EAAAn8J,UAAA,WAIA0F,IAAA,iBAAAhC,MAAAgpK,UACAvmK,YAAA,EACKC,cAAA,IAKL+1J,EAAAn8J,UAAAgtK,cAAA,WACAtpK,KAAAu4J,QAAAl7J,QAAA,SAAAy8J,GACAA,EAAAwP,eACAxP,EAAAwP,mBAIC7Q,KASDiB,GAAA,ICnpCA6P,GAAA,SAAAC,EAAAC,GAAA,OAA6C,GAC7CC,GAAA,SAAAxqK,EAAA0R,GAAA,UACA+4J,GAAA,SAAAzqK,EAAA0R,EAAAqmJ,GACA,SAEA,uBAAAmO,SAAA,CAGA,GADAmE,GAAA,SAAAC,EAAAC,GAAA,MAAAD,GAAAvF,SAAAwF,IACArE,QAAA9oK,UAAAi/F,QACAmuE,GAAA,SAAAxqK,EAAA0R,GAAA,MAAA1R,GAAAq8F,QAAA3qF,QAEA,CACA,GAAAg5J,IAAAxE,QAAA9oK,UACAutK,GAAAD,GAAAE,iBAAAF,GAAAG,oBAAAH,GAAAI,mBACAJ,GAAAK,kBAAAL,GAAAM,qBACAL,MACAH,GAAA,SAAAxqK,EAAA0R,GAAA,MAAAi5J,IAAAjgK,MAAA1K,GAAA0R,MAGA+4J,GAAA,SAAAzqK,EAAA0R,EAAAqmJ,GACA,GAAAx7I,KACA,IAAAw7I,EACAx7I,EAAAzE,KAAApN,MAAA6R,EAAAvc,EAAAxB,iBAAAkT,QAEA,CACA,GAAAu5J,GAAAjrK,EAAA6U,cAAAnD,EACAu5J,IACA1uJ,EAAAzE,KAAAmzJ,GAGA,MAAA1uJ,IAGA,GAAA2uJ,IAAAV,GACAW,GAAAd,GACAe,GAAAX,GAWAhE,GAAA,WACA,QAAA4E,MAgBC,MAdDA,GAAAjuK,UAAA8tK,eAAA,SAAAlrK,EAAA0R,GACA,MAAAw5J,IAAAlrK,EAAA0R,IAEA25J,EAAAjuK,UAAA+tK,gBAAA,SAAAb,EAAAC,GAAA,MAAAY,IAAAb,EAAAC,IACAc,EAAAjuK,UAAAilD,MAAA,SAAAriD,EAAA0R,EAAAqmJ,GACA,MAAAqT,IAAAprK,EAAA0R,EAAAqmJ,IAEAsT,EAAAjuK,UAAAinK,aAAA,SAAArkK,EAAAo6J,EAAAmB,GACA,MAAAA,IAAA,IAEA8P,EAAAjuK,UAAA+L,QAAyC,SAAAnJ,EAAsB25J,EAAAxtI,EAAAO,EAAAhkB,EAAA4iK,GAE/D,WADmB,KAAnBA,IAAsCA,MACtC,GAAAhS,KAEC+R,KAKDE,GAAA,WACA,QAAAA,MAEC,MAAAA,KAEDA,IAAAC,KAAA,GAAA/E;;;;;;;AAQA,GAAA1K,IAAA,IAKAqE,GAAA,YACAE,GAAA,YAEAC,GAAA,cAEAC,GAAA,gBAgIApD,GAAA,GAAApvF,QAAAy9F,oBAAA,KAoCAhO,GAAA,gBAoDAyB,GAAA,IA0DAK,GAAA,GAAAqF,IACArF,IAAA/1I,IAAA,QACA+1I,GAAA/1I,IAAA,IACA,IAAAi2I,IAAA,GAAAmF,IACAnF,IAAAj2I,IAAA,SACAi2I,GAAAj2I,IAAA;;;;;;;AA4BA,GAAAy2I,IAAA,QACAC,GAAA,GAAAlyF,QAAA,KAAAiyF,GAAA,YAUAI,GAAA,GAAAryF,QADA,SACA,KAEAmyF,GAAA,GAAAnyF,QADA,SACA,KAEA8xF,GAAA,WACA,QAAA4L,MA8aC,MAvaDA,GAAyBtuK,UAAA2sJ,MAAA,SAAAtvI,EAAAixB,GACzB,GAAA2gD,GAAA,GAAAs/E,IAAAjgI,EAEA,OADA5qC,MAAA8qK,8BAAAv/E,GACAsxE,EAAA78J,KAAAk8J,EAAAviJ,GAAA4xE,IAMAq/E,EAAAtuK,UAAAwuK,8BAAA,SAAAv/E,GACAA,EAAAw/E,qBAnBI,GAoBJx/E,EAAAy/E,mBACAz/E,EAAAy/E,gBArBI,OAsBJz/E,EAAA0/E,YAAA,GAOAL,EAAAtuK,UAAAygK,aAAA,SAAApjJ,EAAA4xE,GACA,GAAAloF,GAAArD,KACyBsiK,EAAA/2E,EAAA+2E,WAAA,EACAC,EAAAh3E,EAAAg3E,SAAA,EACAJ,KACzB+I,IAsBA,OArBAvxJ,GAAAg+I,YAAAt6J,QAAA,SAAA8tK,GAEA,GADA9nK,EAAAynK,8BAAAv/E,GACA,GAAA4/E,EAAA16J,KAAiC,CACjC,GAAiC26J,GAAA,EACjCr4J,EAAAq4J,EAAAr4J,IACAA,GAAA8wB,MAAA,WAAAxmC,QAAA,SAAA2a,GACAozJ,EAAAr4J,KAAAiF,EACiBmqJ,EAAAnrJ,KAAA3T,EAAA25J,WAAAoO,EAAA7/E,MAEjB6/E,EAAAr4J,WAEA,IAAiC,GAAjCo4J,EAAA16J,KAAiC,CACjC,GAAAwnJ,GAAA50J,EAAA45J,gBAAA,EAAA1xE,EACA+2E,IAAArK,EAAAqK,WACAC,GAAAtK,EAAAsK,SACA2I,EAAAl0J,KAAAihJ,OAGA1sE,GAAA3gD,OAAA5zB,KAAA,8EAIAvG,KAAA,EACAsC,KAAA4G,EAAA5G,KAAAovJ,SAAA+I,cAAA5I,aAAAC,WACA9uJ,QAAA,OAQAm3J,EAAyBtuK,UAAA0gK,WAAA,SAAArjJ,EAAA4xE,GACzB,GAAyB8/E,GAAArrK,KAAAs9J,WAAA3jJ,EAAAxI,OAAAo6E,GACzB+/E,EAAA3xJ,EAAAlG,SAAAkG,EAAAlG,QAAAm4D,QAAA,IACA,IAAAy/F,EAAAE,sBAA6B,CAC7B,GAA6BC,GAAA,GAAA1H,KAC7B2H,EAAAH,KAaA,IAZAD,EAAAl6J,OAAA9T,QAAA,SAAAtC,GACA,GAAA+kK,EAAA/kK,GAAqC,CACrC,GAAA2wK,GAAA,CACAhxK,QAAAusB,KAAAykJ,GAAAruK,QAAA,SAAAi8J,GACA8C,EAAAsP,EAAApS,IAAAj8J,QAAA,SAAAsuK,GACAF,EAAAjwK,eAAAmwK,IACAH,EAAA9iJ,IAAAijJ,UAMAH,EAAAjlG,KAAiC,CACjC,GAAAqlG,GAAAlP,EAAA8O,EAAAnrG,SACAkrB,GAAA3gD,OAAA5zB,KAAA,UAAA2C,EAAA5G,KAAA,iFAAA64J,EAAA5nI,KAAA,QAGA,OACAvzB,KAAA,EACAsC,KAAA4G,EAAA5G,KACAnW,MAAAyuK,EACA53J,QAAA63J,GAAA1/F,OAAA0/F,GAAA,OAQAV,EAAAtuK,UAAA2gK,gBAAA,SAAAtjJ,EAAA4xE,GACAA,EAAA+2E,WAAA,EACA/2E,EAAAg3E,SAAyB,CACzB,IAAyBnK,GAAAyE,EAAA78J,KAAAk8J,EAAAviJ,EAAAy+I,WAAA7sE,EAEzB,QACA96E,KAAA,EACA4xJ,SAHAzE,EAAAjkJ,EAAAw+I,KAAA5sE,EAAA3gD,QAIAwtH,YACAkK,WAAA/2E,EAAA+2E,WACAC,SAAAh3E,EAAAg3E,SACA9uJ,QAAA2sJ,EAAAzmJ,EAAAlG,WAQAm3J,EAAAtuK,UAAA4gK,cAAA,SAAAvjJ,EAAA4xE,GACA,GAAAloF,GAAArD,IACA,QACAyQ,KAAA,EACAqnJ,MAAAn+I,EAAAm+I,MAAAv7J,IAAA,SAAAsxB,GAAA,MAAAgvI,GAAAx5J,EAAAwqB,EAAA09D,KACA93E,QAAA2sJ,EAAAzmJ,EAAAlG,WAQAm3J,EAAAtuK,UAAA6gK,WAAA,SAAAxjJ,EAAA4xE,GACA,GAAAloF,GAAArD,KACyBirK,EAAA1/E,EAAA0/E,YACAY,EAAA,EACzB/T,EAAAn+I,EAAAm+I,MAAAv7J,IAAA,SAAAqpJ,GACAr6D,EAAA0/E,YAA6BA,CAC7B,IAAAa,GAAAjP,EAAAx5J,EAAAuiJ,EAAAr6D,EAES,OADTsgF,GAAA9oK,KAAAC,IAAA6oK,EAAAtgF,EAAA0/E,aACSa,GAGT,OADAvgF,GAAA0/E,YAAAY,GAEAp7J,KAAA,EACAqnJ,QACArkJ,QAAA2sJ,EAAAzmJ,EAAAlG,WAQAm3J,EAAyBtuK,UAAA8gK,aAAA,SAAAzjJ,EAAA4xE,GACzB,GAAAwgF,GAAAhM,EAAApmJ,EAAAi+I,QAAArsE,EAAA3gD,OACA2gD,GAAAygF,sBAAyBD,CACzB,IAAyBV,GACzBY,EAAAtyJ,EAAAxI,OAAAwI,EAAAxI,OAAAvU,KACA,OAAAqvK,EAAAx7J,KACA46J,EAAArrK,KAAAq9J,eAAA,EAAA9xE,OAEA,CACA,GAA6B2gF,GAAAvyJ,EAAA,OAC7Bw4C,GAAA,CACA,KAAA+5G,EAAA,CACA/5G,GAAA,CACA,IAAAg6G,KACAJ,GAAAnkK,SACAukK,EAAA,OAAAJ,EAAAnkK,QAEAskK,EAAAtvK,EAAAuvK,GAEA5gF,EAAA0/E,aAA6Bc,EAAA1gJ,SAAA0gJ,EAAAngJ,KAC7B,IAAAwgJ,GAAApsK,KAAAs9J,WAAA4O,EAAA3gF,EACA6gF,GAAAC,YAAAl6G,EACAk5G,EAAAe,EAGA,MADA7gF,GAAAygF,sBAAA,MAEAv7J,KAAA,EACAmnJ,QAAAmU,EACAnvK,MAAAyuK,EACA53J,QAAA,OAQAm3J,EAAyBtuK,UAAAghK,WAAA,SAAA3jJ,EAAA4xE,GACzB,GAAA20E,GAAAlgK,KAAAssK,cAAA3yJ,EAAA4xE,EAEA,OADAvrF,MAAAusK,kBAAArM,EAAA30E,GACA20E,GAOA0K,EAAyBtuK,UAAAgwK,cAAA,SAAA3yJ,EAAA4xE,GACzB,GAAAp6E,KACA9U,OAAAo/F,QAAA9hF,EAAAxI,QACAwI,EAAA,OAAAtc,QAAA,SAAAwiK,GACsC,gBAAtCA,GACAA,GAAAlG,GACAxoJ,EAAA6F,KAAA,GAGAu0E,EAAA3gD,OAAA5zB,KAAA,mCAAA6oJ,EAAA,oBAIA1uJ,EAAA6F,KAAA,KAKA7F,EAAA6F,KAAA2C,EAAAxI,OAEA,IAAyBo6J,IAAA,EACzBiB,EAAA,IAoBA,OAnBAr7J,GAAA9T,QAAA,SAAAovK,GACA,GAAA3M,EAAA2M,GAAiC,CACjC,GAAiCC,GAAA,EACjC9kK,EAAA8kK,EAAA,MAKA,IAJA9kK,IACA4kK,EAAA,QACAE,GAAA,SAEAnB,EACA,OAAyCjS,KAAAoT,GAAA,CACzC,GAAA3xK,GAAA2xK,EAAApT,EACA,IAAAv+J,EAAA8lB,WAAA/iB,QAtjBA,OAsjBA,GACAytK,GAAA,CACA,aAOA96J,KAAA,EACAU,SACAvJ,OAAA4kK,EACAthK,OAAAyO,EAAAzO,OAAAqgK,wBACA93J,QAAA,OAQAm3J,EAAyBtuK,UAAAiwK,kBAAA,SAAArM,EAAA30E,GACzB,GAAyBqsE,GAAArsE,EAAAygF,sBACAW,EAAAphF,EAAA0/E,YACzB5qF,EAAAkL,EAAA0/E,WACArT,IAAAv3E,EAAA,IACAA,GAAAu3E,EAAAvsI,SAAAusI,EAAAhsI,OAEAs0I,EAAA/uJ,OAAA9T,QAAA,SAAAuvK,GACA,gBAAAA,IAEAlyK,OAAAusB,KAAA2lJ,GAA+BvvK,QAAE,SAAAi8J,GACjC,GAAiC0R,GAAAz/E,EAAAy/E,gBAAAz/E,EAAA,sBACAshF,EAAA7B,EAAA1R,GACjCwT,GAAA,CACAD,KACAxsF,GAAAssF,GAAAtsF,GAAAwsF,EAAAxsF,WACAssF,GAAAE,EAAAF,UACAphF,EAAA3gD,OAAA5zB,KAAA,qBAAAsiJ,EAAA,uCAAAuT,EAAAxsF,UAAA,YAAAwsF,EAAAF,QAAA,4EAAAtsF,EAAA,YAAAssF,EAAA,OACAG,GAAA,GAKAzsF,EAAAwsF,EAAAxsF,WAEAysF,IACA9B,EAAA1R,IAAAj5E,YAAAssF,YAEAphF,EAAA93E,SACA0oJ,EAAAyQ,EAAAtT,GAAA/tE,EAAA93E,QAAA83E,EAAA3gD,aAUAggI,EAAAtuK,UAAA+gK,eAAA,SAAA1jJ,EAAA4xE,GACA,GAAAloF,GAAArD,KACAkgK,GAAAzvJ,KAAA,EAAAU,UAAAsC,QAAA,KACA,KAAA83E,EAAAygF,sBAEA,MADAzgF,GAAA3gD,OAAA5zB,KAAA,4DACAkpJ,CAEA,IACyB6M,GAAA,EACAC,KACAC,GAAA,EACAC,GAAA,EACAjU,EAAA,EACIJ,EAAAl/I,EAAAm+I,MAAAv7J,IAAA,SAAA4U,GAC7B,GAA6Bg8J,GAAA9pK,EAAAipK,cAAAn7J,EAAAo6E,GACA6hF,EAAA,MAAAD,EAAAjiK,OAAAiiK,EAAAjiK,OAAA00J,EAAAuN,EAAAh8J,QAC7BjG,EAAA,CASS,OART,OAAAkiK,IACAL,IACA7hK,EAAAiiK,EAAAjiK,OAAAkiK,GAEAF,KAAAhiK,EAAA,GAAAA,EAAA,EACA+hK,KAAA/hK,EAAA+tJ,EACAA,EAAA/tJ,EACA8hK,EAAAh2J,KAAA9L,GACSiiK,GAETD,IACA3hF,EAAA3gD,OAAA5zB,KAAA,+DAEAi2J,GACA1hF,EAAA3gD,OAAA5zB,KAAA,uDAEA,IAAyB3Y,GAAAsb,EAAAm+I,MAAAz5J,OACzBgvK,EAAA,CACAN,GAAA,GAAAA,EAAA1uK,EACAktF,EAAA3gD,OAAA5zB,KAAA,yEAEA,GAAA+1J,IACAM,EAhCyB,GAgCzBhvK,EAAA,GAEA,IAAyBivK,GAAAjvK,EAAA,EACA4sK,EAAA1/E,EAAA0/E,YACAe,EAAAzgF,EAAA,sBACzBgiF,EAAAvB,EAAA3gJ,QAUA,OATAwtI,GAAAx7J,QAAA,SAA6B87J,EAAA76J,GAC7B,GAA6B4M,GAAAmiK,EAAA,EAAA/uK,GAAAgvK,EAAA,EAAAD,EAAA/uK,EAAA0uK,EAAA1uK,GAC7BkvK,EAAAtiK,EAAAqiK,CACAhiF,GAAA0/E,cAAAe,EAAApgJ,MAAA4hJ,EACAxB,EAAA3gJ,SAAAmiJ,EACAnqK,EAAAkpK,kBAAApT,EAAA5tE,GACA4tE,EAAAjuJ,SACSg1J,EAAA/uJ,OAAA6F,KAAAmiJ,KAET+G,GAOA0K,EAAAtuK,UAAAihK,eAAA,SAAA5jJ,EAAA4xE,GACA,OACA96E,KAAA,EACA2nJ,UAAAyE,EAAA78J,KAAAk8J,EAAAviJ,EAAAy+I,WAAA7sE,GACA93E,QAAA2sJ,EAAAzmJ,EAAAlG,WAQAm3J,EAAAtuK,UAAAkhK,kBAAA,SAAA7jJ,EAAA4xE,GAEA,MADAA,GAAAg3E,YAEA9xJ,KAAA,EACAgD,QAAA2sJ,EAAAzmJ,EAAAlG,WAQAm3J,EAAAtuK,UAAAmhK,gBAAA,SAAA9jJ,EAAA4xE,GACA,OACA96E,KAAA,GACA2nJ,UAAAp4J,KAAAu9J,eAAA5jJ,EAAAy+I,UAAA7sE,GACA93E,QAAA2sJ,EAAAzmJ,EAAAlG,WAQAm3J,EAAyBtuK,UAAAohK,WAAA,SAAA/jJ,EAAA4xE,GACzB,GAAyBkiF,GAAAliF,EAAsC,qBAC/D93E,EAAAkG,EAAAlG,WACA83E,GAAA+2E,aACA/2E,EAAAmiF,aAAA/zJ,CACA,IAAA8C,GAAAwiJ,EAAAtlJ,EAAA/I,YAAA6L,EAAA,GAAAkxJ,EAAAlxJ,EAAA,EACA8uE,GAAAw/E,qBACA0C,EAAApvK,OAAAovK,EAAA,IAAA78J,IACA4pJ,EAAuBjvE,EAAEy/E,gBAAAz/E,EAAAw/E,wBACzB,IAAA3S,GAAAyE,EAAA78J,KAAAk8J,EAAAviJ,EAAAy+I,WAAA7sE,EAGA,OAFAA,GAAAmiF,aAAA,KACAniF,EAAAw/E,qBAAA0C,GAEAh9J,KAAA,GACAG,WACA08J,MAAA75J,EAAA65J,OAAA,EACAM,WAAAn6J,EAAAm6J,SAAAD,cAAAvV,YACAyV,iBAAAl0J,EAAA/I,SACA6C,QAAA2sJ,EAAAzmJ,EAAAlG,WAQAm3J,EAAAtuK,UAAAqhK,aAAA,SAAAhkJ,EAAA4xE,GACAA,EAAAmiF,cACAniF,EAAA3gD,OAAA5zB,KAAA,+CAEA,IAAa4gJ,GAAwC,SAAxCj+I,EAAAi+I,SACbvsI,SAAA,EAAAO,MAAA,EAAAhkB,OAAA,QACAszJ,EAAAvhJ,EAAAi+I,QAAArsE,EAAA3gD,QAAA,EACA,QACAn6B,KAAA,GACA2nJ,UAAAyE,EAAA78J,KAAAk8J,EAAAviJ,EAAAy+I,WAAA7sE,GAAAqsE,UACAnkJ,QAAA,OAGCm3J,KAyBDC,GAAA,WAIA,QAAAA,GAAAjgI,GACA5qC,KAAA4qC,SACA5qC,KAAAsiK,WAAA,EACAtiK,KAAAuiK,SAAA,EACAviK,KAAA8tK,kBAAA,KACA9tK,KAAA0tK,aAAA,KACA1tK,KAAA+qK,qBAAA,KACA/qK,KAAAgsK,sBAAA,KACAhsK,KAAAirK,YAAA,EACAjrK,KAAAgrK,mBACAhrK,KAAAyT,QAAA,KAEC,MAAAo3J,MA0HDkD,GAAA,WACA,QAAAA,KACA/tK,KAAAguK,KAAA,GAAAtT,KAqCC,MA/BDqT,GAAyBzxK,UAAA2xK,QAAA,SAAA/uK,GACzB,GAAAyxF,GAAA3wF,KAAAguK,KAAAhsK,IAAA9C,EAOA,OANAyxF,GACA3wF,KAAAguK,KAAArL,OAAAzjK,GAGAyxF,KAEAA,GAOAo9E,EAAyBzxK,UAAA4xK,OAAA,SAAAhvK,EAAAyxF,GACzB,GAAAw9E,GAAAnuK,KAAAguK,KAAAhsK,IAAA9C,EACAivK,IACAnuK,KAAAguK,KAAArrK,IAAAzD,EAAAivK,MAEAA,EAAAn3J,KAAApN,MAAAukK,EAAAx9E,IAMAo9E,EAAAzxK,UAAAoiK,IAAA,SAAAx/J,GAAA,MAAAc,MAAAguK,KAAAtP,IAAAx/J,IAIA6uK,EAAAzxK,UAAAk5D,MAAA,WAAAx1D,KAAAguK,KAAAx4G,SACCu4G,KA2BDjN,GAAA,WACA,QAAAA,MA4VC,MA/UDA,GAAgCxkK,UAAaykK,eAAA,SAAApI,EAAA+H,EAAAR,EAAAS,EAAAC,EAAAntJ,EAAAotJ,EAAAj2H,OAC7C,KAAAA,UACAi2H,EAAyBA,GAAA,GAAAkN,GACzB,IAAAxiF,GAAA,GAAA6iF,IAAAzV,EAAA+H,EAAAG,EAAAj2H,KACA2gD,GAAA93E,UACA83E,EAAA8iF,gBAAAvS,WAAA6E,GAAA,KAAAp1E,EAAA3gD,OAAAn3B,GACAopJ,EAAA78J,KAAAkgK,EAAA30E,EAEA,IAAAm2E,GAAAn2E,EAAAm2E,UAAA9jK,OAAA,SAAA0wK,GAAA,MAAAA,GAAAC,qBACA,IAAA7M,EAAArjK,QAA6B3D,OAAAusB,KAAA25I,GAAAviK,OAAA,CAC7B,GAAAmwK,GAAA9M,IAAArjK,OAAA,EACAmwK,GAAAC,2BACAD,EAAA1S,WAAA8E,GAAA,KAAAr1E,EAAA3gD,OAAAn3B,GAGA,MAAAiuJ,GAAArjK,OAAAqjK,EAAAnlK,IAAA,SAAA+xK,GAAA,MAAAA,GAAAvN,oBACAV,EAAAK,WAAA,aAOAI,EAAAxkK,UAAAygK,aAAA,SAAAmD,EAAA30E,KAQAu1E,EAAAxkK,UAAA0gK,WAAA,SAAAkD,EAAA30E,KAQAu1E,EAAAxkK,UAAA2gK,gBAAA,SAAAiD,EAAA30E,KAQAu1E,EAAyBxkK,UAAAkhK,kBAAA,SAAA0C,EAAA30E,GACzB,GAAAmjF,GAAAnjF,EAAAs1E,gBAAAoN,QAAA1iF,EAAArsF,QACA,IAAAwvK,EAA6B,CAC7B,GAA6BC,GAAApjF,EAAAqjF,iBAAA1O,EAAAzsJ,SACA4sE,EAAAkL,EAAA8iF,gBAAApD,YAC7B0B,EAAA3sK,KAAA6uK,sBAAAH,EAAAC,IAAA,QACAtuF,IAAAssF,GAGAphF,EAAAujF,yBAAAnC,GAGAphF,EAAAwjF,aAAA7O,GAOAY,EAAyBxkK,UAAAmhK,gBAAA,SAAAyC,EAAA30E,GACzB,GAAAojF,GAAApjF,EAAAqjF,iBAAA1O,EAAAzsJ,QACAk7J,GAAAG,2BACA9uK,KAAAu9J,eAAA2C,EAAA9H,UAAAuW,GACApjF,EAAAujF,yBAAAH,EAAAN,gBAAApD,aACA1/E,EAAAwjF,aAAA7O,GAQAY,EAAyBxkK,UAAAuyK,sBAAA,SAAAl+E,EAAApF,EAAA93E,GACzB,GAAyB4sE,GAAAkL,EAAA8iF,gBAAApD,YACzBY,EAAAxrF,EAGyBh1D,EAAA,MAAA5X,EAAA4X,SAAAyvI,EAAArnJ,EAAA4X,UAAA,KACzBO,EAAA,MAAAnY,EAAAmY,MAAAkvI,EAAArnJ,EAAAmY,OAAA,IAQA,OAPA,KAAAP,GACAslE,EAAAtzF,QAAiC,SAAA2xK,GACjC,GAAAC,GAAA1jF,EAAA2jF,4BAAAF,EAAA3jJ,EAAAO,EACAigJ,GACa9oK,KAAAC,IAAA6oK,EAAAoD,EAAA5jJ,SAAA4jJ,EAAArjJ,SAGbigJ,GAOA/K,EAAAxkK,UAAAihK,eAAA,SAAA2C,EAAA30E,GACAA,EAAA4jF,cAAAjP,EAAAzsJ,SAAA,GACAopJ,EAAA78J,KAAAkgK,EAAA9H,UAAA7sE,GACAA,EAAAwjF,aAAA7O,GAOAY,EAAAxkK,UAAA4gK,cAAA,SAAAgD,EAAA30E,GACA,GAAAloF,GAAArD,KACyBovK,EAAA7jF,EAAA6jF,gBACAz0H,EAAA4wC,EACzB93E,EAAAysJ,EAAAzsJ,OACA,IAAAA,MAAAm4D,QAAAn4D,EAAAmY,SACA+uB,EAAA4wC,EAAAqjF,iBAAAn7J,GACAknC,EAAAm0H,2BACA,MAAAr7J,EAAAmY,OAAA,CACA,GAAA+uB,EAAAo0H,aAAAt+J,OACAkqC,EAAA0zH,gBAAAgB,wBACA10H,EAAAo0H,aAAAO,GAEA,IAAA1jJ,GAAAkvI,EAAArnJ,EAAAmY,MACA+uB,GAAA40H,cAAA3jJ,GAGAs0I,EAAApI,MAAAz5J,SACA6hK,EAAApI,MAAAz6J,QAAA,SAAAwwB,GAAA,MAAAgvI,GAAAx5J,EAAAwqB,EAAA8sB,KAEAA,EAAA0zH,gBAAAmB,wBAIA70H,EAAAy0H,mBACAz0H,EAAAm0H,4BAGAvjF,EAAAwjF,aAAA7O,GAOAY,EAAAxkK,UAAA6gK,WAAA,SAAA+C,EAAA30E,GACA,GAAAloF,GAAArD,KACyByvK,KACA5D,EAAAtgF,EAAA8iF,gBAAApD,YACzBr/I,EAAAs0I,EAAAzsJ,SAAAysJ,EAAAzsJ,QAAAmY,MAAAkvI,EAAAoF,EAAAzsJ,QAAAmY,OAAA,CACAs0I,GAAApI,MAAAz6J,QAAA,SAA6BwwB,GAC7B,GAAA8gJ,GAAApjF,EAAAqjF,iBAAA1O,EAAAzsJ,QACAmY,IACA+iJ,EAAAY,cAAA3jJ,GAEAixI,EAAAx5J,EAAAwqB,EAAA8gJ,GACA9C,EAAA9oK,KAAAC,IAAA6oK,EAAA8C,EAAAN,gBAAApD,aACSwE,EAAAz4J,KAAA23J,EAAAN,mBAKToB,EAAApyK,QAAA,SAAAixK,GAAA,MAAA/iF,GAAA8iF,gBAAAqB,6BAAApB,KACA/iF,EAAAujF,yBAAAjD,GACAtgF,EAAAwjF,aAAA7O,GAOAY,EAAAxkK,UAAAqzK,aAAA,SAAAzP,EAAA30E,GACA,KAAA40E,QAA6B,CAC7B,GAA6BF,GAAA,EAAAA,QAE7B,OAAA/E,GADA3vE,EAAA3f,OAAA4wF,EAAAyD,EAAA10E,EAAA3f,OAAA2f,EAAA3gD,QAAAq1H,EACA10E,EAAA3gD,QAGA,OAAAvf,SAAA60I,EAAA70I,SAAAO,MAAAs0I,EAAAt0I,MAAAhkB,OAAAs4J,EAAAt4J,SAQAk5J,EAAyBxkK,UAAA8gK,aAAA,SAAA8C,EAAA30E,GACzB,GAAyBqsE,GAAArsE,EAAAygF,sBAAAhsK,KAAA2vK,aAAAzP,EAAAtI,QAAArsE,GACzB+iF,EAAA/iF,EAAA8iF,eACAzW,GAAAhsI,QACA2/D,EAAAqkF,cAAAhY,EAAAhsI,OACA0iJ,EAAAe,wBAEA,IAAAlC,GAAAjN,EAAAtjK,KACA,IAAAuwK,EAAA18J,KACAzQ,KAAAq9J,eAAA8P,EAAA5hF,IAGAA,EAAAqkF,cAAAhY,EAAyCvsI,UACzCrrB,KAAAs9J,WAAA,EAAA/xE,GACA+iF,EAAAkB,yBAEAjkF,EAAAygF,sBAAA,KACAzgF,EAAAwjF,aAAA7O,GAOAY,EAAyBxkK,UAAAghK,WAAA,SAAA4C,EAAA30E,GACzB,GAAyB+iF,GAAA/iF,EAAA8iF,gBACzBzW,EAAArsE,EAAA,uBAGAqsE,GAAA0W,EAAAuB,4BAAAxxK,QACAiwK,EAAAwB,cAEA,IAAAloK,GAAAgwJ,KAAAhwJ,QAAAs4J,EAAAt4J,MACAs4J,GAAAmM,YACAiC,EAAAyB,eAAAnoK,GAGA0mK,EAAAxS,UAAAoE,EAAA/uJ,OAAAvJ,EAAA2jF,EAAA3gD,OAAA2gD,EAAA93E,SAEA83E,EAAAwjF,aAAA7O,GAOAY,EAAyBxkK,UAAA+gK,eAAA,SAAA6C,EAAA30E,GACzB,GAAyBygF,GAAAzgF,EAAA,sBACAlL,EAAAkL,EAAA,gBAAAlgE,SACAA,EAAA2gJ,EAAA3gJ,SACAsjJ,EAAApjF,EAAAqjF,mBACzBoB,EAAArB,EAAAN,eACA2B,GAAApoK,OAAAokK,EAAApkK,OACAs4J,EAAA/uJ,OAAA9T,QAA2B,SAAEuoJ,GAC7B,GAAA16I,GAAA06I,EAAA16I,QAAA,CACA8kK,GAAAC,YAAA/kK,EAAAmgB,GACA2kJ,EAAAlU,UAAAlW,EAAAz0I,OAAAy0I,EAAAh+I,OAAA2jF,EAAA3gD,OAAA2gD,EAAA93E,SACSu8J,EAAAR,0BAITjkF,EAAA8iF,gBAAAqB,6BAAAM,GAGAzkF,EAAAujF,yBAAAzuF,EAAAh1D,GACAkgE,EAAAwjF,aAAA7O,GAOAY,EAAAxkK,UAAAohK,WAAA,SAAAwC,EAAA30E,GACA,GAAAloF,GAAArD,KAGyBqgF,EAAAkL,EAAA8iF,gBAAiCpD,YACjCx3J,EAAAysJ,EAAAzsJ,YACzBmY,EAAAnY,EAAAmY,MAAAkvI,EAAArnJ,EAAAmY,OAAA,CACAA,KAAA,IAAA2/D,EAAAwjF,aAAAt+J,MACA,GAAA4vE,GAAAkL,EAAA8iF,gBAAAwB,4BAAAxxK,UACAktF,EAAA8iF,gBAAAgB,wBACA9jF,EAAAwjF,aAAAO,GAEA,IAAyBzD,GAAAxrF,EACzB6vF,EAAA3kF,EAAA++E,YAAApK,EAAAtvJ,SAAAsvJ,EAAA2N,iBAAA3N,EAAAoN,MAAApN,EAAAyN,cAAAl6J,EAAAm6J,SAAAriF,EAAA3gD,OACA2gD,GAAA4kF,kBAAyBD,EAAA7xK,MACzB,IAAA+xK,GAAA,IACAF,GAAA7yK,QAAA,SAAA6B,EAAAZ,GACAitF,EAAA8kF,kBAA6B/xK,CAC7B,IAAAqwK,GAAApjF,EAAAqjF,iBAAA1O,EAAAzsJ,QAAAvU,EACA0sB,IACA+iJ,EAAAY,cAAA3jJ,GAEA1sB,IAAAqsF,EAAArsF,UACAkxK,EAAAzB,EAAAN,iBAEAxR,EAAAx5J,EAAA68J,EAAA9H,UAAAuW,GAIAA,EAAAN,gBAA6BmB,uBAC7B,IAAA7C,GAAAgC,EAAAN,gBAAApD,WACSY,GAAA9oK,KAAAC,IAAA6oK,EAAAc,KAETphF,EAAA8kF,kBAAA,EACA9kF,EAAA4kF,kBAAA,EACA5kF,EAAAujF,yBAAAjD,GACAuE,IACA7kF,EAAA8iF,gBAAAqB,6BAAAU,GACA7kF,EAAA8iF,gBAAAgB,yBAEA9jF,EAAAwjF,aAAA7O,GAOAY,EAAyBxkK,UAAAqhK,aAAA,SAAAuC,EAAA30E,GACzB,GAAyB+kF,GAAA/kF,EAAA,cACAijF,EAAAjjF,EAAA8iF,gBACAzW,EAAAsI,EAAAtI,QACAvsI,EAAAtoB,KAAAgG,IAAA6uJ,EAAAvsI,UACAklJ,EAAAllJ,GAAAkgE,EAAA4kF,kBAAA,GACAvkJ,EAAAP,EAAAkgE,EAAA8kF,iBAEzB,QADAzY,EAAAvsI,SAAA,YAAAusI,EAAAhwJ,QAEA,cACAgkB,EAAA2kJ,EAAA3kJ,CACA,MACA,YACAA,EAAA0kJ,EAAAE,mBAGA,GAAAlC,GAAA/iF,EAAA8iF,eACAziJ,IACA0iJ,EAAAiB,cAAA3jJ,EAEA,IAAA6kJ,GAAAnC,EAAArD,WACApO,GAAA78J,KAAAkgK,EAAA9H,UAAA7sE,GACAA,EAAAwjF,aAAA7O,EAKAoQ,EAAAE,mBACAhC,EAAAvD,YAAAwF,GAAAjC,EAAAnuF,UAAAiwF,EAAAjC,gBAAAhuF,YAECygF,KAEDwO,MACAlB,GAAA,WASA,QAAAA,GAAAsC,EAAAxxK,EAAA2hK,EAAAj2H,EAAA82H,EAAAiP,GACA3wK,KAAA0wK,UACA1wK,KAAAd,UACAc,KAAA6gK,kBACA7gK,KAAA4qC,SACA5qC,KAAA0hK,YACA1hK,KAAAswK,cAAA,KACAtwK,KAAAgsK,sBAAA,KACAhsK,KAAA+uK,aAAAO,GACAtvK,KAAAovK,gBAAA,EACApvK,KAAAyT,WACAzT,KAAAqwK,kBAAA,EACArwK,KAAAmwK,kBAAA,EACAnwK,KAAAwwK,mBAAA,EACAxwK,KAAAquK,gBAAAsC,GAAA,GAAAC,IAAA1xK,EAAA,GACAwiK,EAAA1qJ,KAAAhX,KAAAquK,iBAiJC,MA/ID3zK,QAAAI,eAAAszK,EAAA9xK,UAAA,UAIA0F,IAAA,iBAAAhC,MAAAyT,QAAAm4D,QACAnpE,YAAA,EACKC,cAAA,IAOL0rK,EAAA9xK,UAAA6yK,cAAA,SAAA17J,EAAAo9J,GACA,GAAAxtK,GAAArD,IACA,IAAAyT,EAAA,CAEA,GAAyBq9J,GAAA,EACzBC,EAAA/wK,KAAAyT,OAEA,OAAAq9J,EAAAzlJ,WACA,EAAAA,SAAAyvI,EAAAgW,EAAAzlJ,WAEA,MAAAylJ,EAAAllJ,QACAmlJ,EAAAnlJ,MAAAkvI,EAAAgW,EAAAllJ,OAEA,IAAAolJ,GAAAF,EAAAllG,MACA,IAAAolG,EAAA,CACA,GAAAC,GAAAF,EAAA,MACAE,KACAA,EAAAjxK,KAAAyT,QAAAm4D,WAEAlxE,OAAAusB,KAAA+pJ,GAAA3zK,QAAA,SAAA0V,GACA89J,GAAAI,EAAAz1K,eAAAuX,KACAk+J,EAAAl+J,GAAAypJ,EAAAwU,EAAAj+J,GAAAk+J,EAAA5tK,EAAAunC,cAQAwjI,EAAyB9xK,UAAA40K,aAAA,WACzB,GAAAz9J,KACA,IAAAzT,KAAAyT,QAAA,CACA,GAAA09J,GAAAnxK,KAAAyT,QAAAm4D,MACA,IAAAulG,EAAA,CACA,GAAAC,GAAA39J,EAAA,SACA/Y,QAAAusB,KAAAkqJ,GAAA9zK,QAAA,SAAA0V,GAAAq+J,EAAAr+J,GAAAo+J,EAAAp+J,MAGA,MAAAU,IAQA26J,EAAA9xK,UAAiCsyK,iBAAgB,SAAAn7J,EAAAvU,EAAAmyK,OAC1B,KAAvB59J,IAAyBA,EAAA,KACzB,IAAyBuF,GAAA9Z,GAAAc,KAAAd,QACzBqsF,EAAA,GAAA6iF,GAAApuK,KAAA0wK,QAAA13J,EAAAhZ,KAAA6gK,gBAAA7gK,KAAA4qC,OAAA5qC,KAAA0hK,UAAA1hK,KAAAquK,gBAAAiD,KAAAt4J,EAAAq4J,GAAA,GASA,OARA9lF,GAAAwjF,aAAA/uK,KAAA+uK,aACAxjF,EAAAygF,sBAAAhsK,KAAAgsK,sBACAzgF,EAAA93E,QAAAzT,KAAAkxK,eACA3lF,EAAA4jF,cAAA17J,GACA83E,EAAA8kF,kBAAArwK,KAAAqwK,kBACA9kF,EAAA4kF,kBAAAnwK,KAAAmwK,kBACA5kF,EAAA+kF,cAAAtwK,KACAA,KAAAovK,kBACA7jF,GAMA6iF,EAAA9xK,UAAAwyK,yBAAA,SAAAuC,GAIA,MAHArxK,MAAA+uK,aAAAO,GACAtvK,KAAAquK,gBAAAruK,KAAAquK,gBAAAiD,KAAAtxK,KAAAd,QAAAmyK,GACArxK,KAAA0hK,UAAA1qJ,KAAAhX,KAAAquK,iBACAruK,KAAAquK,iBAQAD,EAAyB9xK,UAAA4yK,4BAAA,SAAAF,EAAA3jJ,EAAAO,GACzB,GAAA2lJ,IACAlmJ,SAAA,MAAAA,IAAA2jJ,EAAA3jJ,SACAO,MAAA5rB,KAAAquK,gBAAApD,aAAA,MAAAr/I,IAAA,GAAAojJ,EAAApjJ,MACAhkB,OAAA,IAEA4pK,EAAA,GAAAC,IAAAzC,EAAA9vK,QAAA8vK,EAAAnW,UAAAmW,EAAA1O,cAAA0O,EAAAzO,eAAAgR,EAAAvC,EAAA0C,wBAEA,OADA1xK,MAAA0hK,UAAA1qJ,KAAAw6J,GACAD,GAMAnD,EAAA9xK,UAAAszK,cAAA,SAAAtnK,GACAtI,KAAAquK,gBAAA4B,YAAAjwK,KAAAquK,gBAAAhjJ,SAAA/iB,IAMA8lK,EAAA9xK,UAAAizK,cAAA,SAAA3jJ,GAEAA,EAAA,GACA5rB,KAAAquK,gBAAAkB,cAAA3jJ,IAYAwiJ,EAAyB9xK,UAAAguK,YAAA,SAAA15J,EAAAi9J,EAAAP,EAAAK,EAAAC,EAAAhjI,GACzB,GAAAnvB,KAIA,IAHAkyJ,GACAlyJ,EAAAzE,KAAAhX,KAAAd,SAEA0R,EAAAvS,OAA6B,GAC7B,GAA6B44J,GAAA,GAAAqW,EAC7BhhH,EAAAtsD,KAAA0wK,QAAAnvH,MAAAvhD,KAAAd,QAAA0R,EAAAqmJ,EACA,KAAAqW,IACAhhH,IAAA3uD,MAAA,EAAA2vK,IAEA7xJ,EAAAzE,KAAApN,MAAA6R,EAAA6wC,GAKA,MAHAshH,IAAA,GAAAnyJ,EAAApd,QACAusC,EAAA5zB,KAAA,WAAA62J,EAAA,4CAAAA,EAAA,uDAEApyJ,GAEC2yJ,KAEDwC,GAAA,WAMA,QAAAe,GAAAzyK,EAAAmhF,EAAAuxF,GACA5xK,KAAAd,UACAc,KAAAqgF,YACArgF,KAAA4xK,+BACA5xK,KAAAqrB,SAAA,EACArrB,KAAA6xK,qBACA7xK,KAAA8xK,oBACA9xK,KAAA+xK,WAAA,GAAArX,KACA16J,KAAAgyK,iBACAhyK,KAAAiyK,kBACAjyK,KAAAkyK,aACAlyK,KAAAmyK,0BAAA,KACAnyK,KAAA4xK,+BACA5xK,KAAA4xK,6BAAA,GAAAlX,MAEA16J,KAAAoyK,qBAAA13K,OAAAoe,OAAA9Y,KAAAkyK,cACAlyK,KAAAqyK,sBAAAryK,KAAA4xK,6BAAA5vK,IAAA9C,GACAc,KAAAqyK,wBACAryK,KAAAqyK,sBAAAryK,KAAAoyK,qBACApyK,KAAA4xK,6BAAAjvK,IAAAzD,EAAAc,KAAAoyK,uBAEApyK,KAAAsyK,gBAsPC,MAjPDX,GAAAr1K,UAAAiyK,kBAAA,WACA,OAAAvuK,KAAA+xK,WAAAxrG,MACA,OACA,QACA,QACA,MAAAvmE,MAAA6vK,4BAAAxxK,OAAA,CACA,SACA,WAMAszK,EAAAr1K,UAAAuzK,0BAAA,iBAAAn1K,QAAAusB,KAAAjnB,KAAA8xK,mBACAp3K,OAAAI,eAAA62K,EAAAr1K,UAAA,eAIA0F,IAAA,iBAAAhC,MAAAqgF,UAAArgF,KAAAqrB,UACA5oB,YAAA,EACKC,cAAA,IAMLivK,EAAAr1K,UAAAizK,cAAA,SAAA3jJ,GAKA,GAAA2mJ,GAAA,GAAAvyK,KAAA+xK,WAAAxrG,MAAA7rE,OAAAusB,KAAAjnB,KAAAiyK,gBAAA5zK,MACA2B,MAAAqrB,UAAAknJ,GACAvyK,KAAAiwK,YAAAjwK,KAAAirK,YAAAr/I,GACA2mJ,GACAvyK,KAAAqvK,yBAIArvK,KAAAqgF,WAAAz0D,GAQA+lJ,EAAAr1K,UAAAg1K,KAAA,SAAApyK,EAAA+rK,GAEA,MADAjrK,MAAAwvK,wBACA,GAAAmC,GAAAzyK,EAAA+rK,GAAAjrK,KAAAirK,YAAAjrK,KAAA4xK,+BAKAD,EAAAr1K,UAAAg2K,cAAA,WACAtyK,KAAA8xK,mBACA9xK,KAAA6xK,kBAAA7xK,KAAA8xK,kBAEA9xK,KAAA8xK,iBAAA9xK,KAAA+xK,WAAA/vK,IAAAhC,KAAAqrB,UACArrB,KAAA8xK,mBACA9xK,KAAA8xK,iBAAAp3K,OAAAoe,OAAA9Y,KAAAkyK,cACAlyK,KAAA+xK,WAAApvK,IAAA3C,KAAAqrB,SAAArrB,KAAA8xK,oBAMAH,EAAAr1K,UAAAwzK,aAAA,WACA9vK,KAAAqrB,UAjoBA,EAkoBArrB,KAAAsyK,iBAMAX,EAAAr1K,UAAA2zK,YAAA,SAAA3nK,GACAtI,KAAAwvK,wBACAxvK,KAAAqrB,SAAA/iB,EACAtI,KAAAsyK,iBAOAX,EAAAr1K,UAAAk2K,aAAA,SAAAlZ,EAAAv+J,GACAiF,KAAAoyK,qBAAA9Y,GAAAv+J,EACAiF,KAAAqyK,sBAAA/Y,GAAoCv+J,EACpCiF,KAAAgyK,cAAA1Y,IAAAhxJ,KAAAtI,KAAAirK,YAAAlwK,UAKA42K,EAAAr1K,UAAAmyK,wBAAA,iBAAAzuK,MAAAmyK,4BAAAnyK,KAAA8xK,kBAKAH,EAAAr1K,UAAAyzK,eAAA,SAAAnoK,GACA,GAAAvE,GAAArD,IACA4H,KACA5H,KAAA6xK,kBAAA,OAAAjqK,GAQAlN,OAAAusB,KAAAjnB,KAAAqyK,uBAAAh1K,QAAA,SAAAi8J,GACAj2J,EAAA6uK,UAAA5Y,GAAAj2J,EAAAgvK,sBAAqD/Y,IAAAK,GAC5Ct2J,EAAAyuK,iBAAAxY,GAAAK,KAET35J,KAAAmyK,0BAAAnyK,KAAA8xK,kBASAH,EAAAr1K,UAAAw/J,UAAA,SAAA59J,EAAA0J,EAAAgjC,EAAAn3B,GACA,GAAApQ,GAAArD,IACA4H,KACA5H,KAAA6xK,kBAAA,OAAAjqK,EAEA,IAAyBgkE,GAAAn4D,KAAAm4D,WACzBz6D,EAAAgwJ,EAAAjjK,EAAA8B,KAAAqyK,sBACA33K,QAAAusB,KAAA9V,GAA2B9T,QAAE,SAAAi8J,GAC7B,GAAA39J,GAAA6gK,EAAArrJ,EAAAmoJ,GAAA1tF,EAAAhhC,EACAvnC,GAAA4uK,eAAA3Y,GAAA39J,EACA0H,EAAA+uK,qBAAA52K,eAAA89J,KACAj2J,EAAA6uK,UAAA5Y,GAAAj2J,EAAAgvK,sBAAA72K,eAAA89J,GACoBj2J,EAAAgvK,sBAAU/Y,GAC9BK,IAESt2J,EAAAmvK,aAAAlZ,EAAA39J,MAMTg2K,EAAAr1K,UAAAkzK,sBAAA,WACA,GAAAnsK,GAAArD,KACyBmR,EAAAnR,KAAAiyK,eACzB3O,EAAA5oK,OAAAusB,KAAA9V,EACA,IAAAmyJ,EAAAjlK,SAEA2B,KAAAiyK,kBACA3O,EAAAjmK,QAAA,SAA6Bi8J,GAC7B,GAAA39J,GAAAwV,EAAAmoJ,EACSj2J,GAAAyuK,iBAAAxY,GAAA39J,IAETjB,OAAAusB,KAAAjnB,KAAAoyK,sBAAA/0K,QAAA,SAAAi8J,GACAj2J,EAAAyuK,iBAAAt2K,eAAA89J,KACAj2J,EAAAyuK,iBAAAxY,GAAAj2J,EAAA+uK,qBAAA9Y,QAOAqY,EAAAr1K,UAAA+yK,sBAAA,WACA,GAAAhsK,GAAArD,IACAtF,QAAAusB,KAAAjnB,KAAAoyK,sBAA6B/0K,QAAA,SAAAi8J,GAC7B,GAAA39J,GAAA0H,EAAA+uK,qBAAA9Y,EACAj2J,GAAA4uK,eAAA3Y,GAAA39J,EACS0H,EAAAmvK,aAAAlZ,EAAA39J,MAMTg2K,EAAAr1K,UAAAm2K,iBAAA,iBAAAzyK,MAAA+xK,WAAA/vK,IAAAhC,KAAAqrB,WACA3wB,OAAAI,eAAA62K,EAAAr1K,UAAA,cAIA0F,IAAA,WACA,GAAgCopB,KAChC,QAAAkuI,KAAAt5J,MAAA8xK,iBACA1mJ,EAAApU,KAAAsiJ,EAES,OAAAluI,IAET3oB,YAAA,EACKC,cAAA,IAMLivK,EAAAr1K,UAAAozK,6BAAA,SAAApB,GACA,GAAAjrK,GAAArD,IACAtF,QAAAusB,KAAAqnJ,EAA6B0D,eAAA30K,QAAA,SAAAi8J,GAC7B,GAA6BoZ,GAAArvK,EAAA2uK,cAAA1Y,GAC7BqZ,EAAArE,EAAA0D,cAAA1Y,KACAoZ,GAAAC,EAAArqK,KAAAoqK,EAAApqK,OACAjF,EAAAmvK,aAAAlZ,EAAAqZ,EAAA53K,UAOA42K,EAAAr1K,UAAAykK,eAAA,WACA,GAAA19J,GAAArD,IACAA,MAAAwvK,uBACA,IAAyBlP,GAAA,GAAAwD,KACAvD,EAAA,GAAAuD,KACA3xG,EAAA,IAAAnyD,KAAA+xK,WAAAxrG,MAAA,IAAAvmE,KAAAqrB,SACzBunJ,IACA5yK,MAAA+xK,WAAA10K,QAA6B,SAAAw1K,EAAAvqK,GAC7B,GAAAwqK,GAAAlX,EAAAiX,GAAA,EACAn4K,QAAAusB,KAAA6rJ,GAAiCz1K,QAAA,SAAAi8J,GACjC,GAA6Bv+J,GAAU+3K,EAAAxZ,EACvCv+J,IAAA2+J,GACA4G,EAAA53I,IAAA4wI,GAEAv+J,GAAA4+J,IACA4G,EAAA73I,IAAA4wI,KAGAnnG,IACA2gH,EAAA,OAAAxqK,EAAAjF,EAAAgoB,UAESunJ,EAAA57J,KAAA87J,IAET,IAAyBC,GAAAzS,EAAA/5F,KAAAm2F,EAAA4D,EAAAjgG,aACzB2yG,EAAAzS,EAAAh6F,KAAAm2F,EAAA6D,EAAAlgG,YAEA,IAAAlO,EAAA,CACA,GAA6B8gH,GAAAL,EAAA,GAC7BM,EAAAxX,EAAAuX,EACAA,GAAA,SACAC,EAAA,SACAN,GAAAK,EAAAC,GAEA,MAAA7S,GAAArgK,KAAAd,QAAA0zK,EAAAG,EAAAC,EAAAhzK,KAAAqrB,SAAArrB,KAAAqgF,UAAArgF,KAAA4H,QAAA,IAEC+pK,KAEGF,GAAiB,SAAA73J,GAUrB,QAAAu5J,GAAAj0K,EAAA25J,EAAkDyH,EAAAC,EAAA3I,EAAkCwb,OACpF,KAAAA,OAAA,EACA,IAAA/vK,GAAAuW,EAAApd,KAAAwD,KAAAd,EAAA04J,EAAAhsI,QAAA5rB,IAOA,OANAqD,GAAAnE,UACAmE,EAAAw1J,YACAx1J,EAAAi9J,gBACAj9J,EAAAk9J,iBACAl9J,EAAA+vK,yBAAyBA,EACzB/vK,EAAAu0J,SAAAvsI,SAAAusI,EAAAvsI,SAAAO,MAAAgsI,EAAAhsI,MAAAhkB,OAAAgwJ,EAAAhwJ,QACAvE,EAsDE,MAxEFukK,IAAA,EAAAuL,EAAAv5J,GAuBAu5J,EAAA72K,UAAAiyK,kBAAA,iBAAAvuK,MAAA64J,UAAAx6J,OAAA,GAIA80K,EAAuB72K,UAAEykK,eAAA,WACzB,GAAAlI,GAAA74J,KAAA64J,UACAp8I,EAAAzc,KAAA43J,QAAAhsI,EAAAnP,EAAAmP,MAAAP,EAAA5O,EAAA4O,SAAAzjB,EAAA6U,EAAA7U,MACA,IAAA5H,KAAAozK,0BAA6BxnJ,EAAA,CAC7B,GAA6BynJ,MACArZ,EAAA3uI,EAAAO,EAC7B0nJ,EAAA1nJ,EAAAouI,EAEAuZ,EAAA3X,EAAA/C,EAAA,MACA0a,GAAA,SACAF,EAAAr8J,KAA6Bu8J,EAC7B,IAAAC,GAAA5X,EAAA/C,EAAA,MACA2a,GAAA,OAAAxS,EAAAsS,GACAD,EAAAr8J,KAAAw8J,EAiBA,QADgClG,GAAEzU,EAAUx6J,OAAY,EACvBC,EAAA,EAAAA,GAAAgvK,EAAAhvK,IAAA,CACjC,GAAiC66J,GAAAyC,EAAA/C,EAAAv6J,IAAA,GACAm1K,EAAAta,EAAA,OACjCua,EAAA9nJ,EAAA6nJ,EAAApoJ,CACA8tI,GAAA,OAAA6H,EAAA0S,EAAA1Z,GACAqZ,EAAAr8J,KAAAmiJ,GAGA9tI,EAAA2uI,EACApuI,EAAA,EACAhkB,EAAA,GACAixJ,EAAAwa,EAEA,MAAAhT,GAAArgK,KAAAd,QAAA25J,EAAA74J,KAAAsgK,cAAAtgK,KAAAugK,eAAAl1I,EAAAO,EAAAhkB,GAAA,IAEEurK,GACFvC,IA0FA+C,IArDA,WAKA,QAAAC,GAAAlD,EAAAxyK,GACA8B,KAAA0wK,SACA,IAAA9lI,MACAs1H,EAAAnB,EAAA7gK,EAAA0sC,EACA,IAAAA,EAAAvsC,OAAA,CACA,GAAA02D,GAAA,iCAAAnqB,EAAA5G,KAAA,KACA,UAAApd,OAAAmuC,GAEA/0D,KAAA6zK,cAAA3T,EAUA0T,EAAAt3K,UAAuBw3K,eAAE,SAAA50K,EAAAyhK,EAAAoT,EAAAtgK,EAAAotJ,GACzB,GAAyB3/J,GAAA7E,MAAAo/F,QAAAklE,GAAAvyC,EAAAuyC,GAAA,EACAqT,EAAA33K,MAAAo/F,QAAAs4E,GAAA3lD,EAAA2lD,GAAA,EACzBnpI,IACAi2H,GAAyBA,GAAA,GAAAkN,GACzB,IAAApkK,GAAA82J,EAAAzgK,KAAA0wK,QAAAxxK,EAAAc,KAAA6zK,cAAA3yK,EAAA8yK,EAAAvgK,EAAAotJ,EAAAj2H,EACA,IAAAA,EAAAvsC,OAA2B,CAC3B,GAAA02D,GAAA,+BAAAnqB,EAAA5G,KAAA,KACA,UAAApd,OAAAmuC,GAEA,MAAAprD,OAoBA,WACA,QAAAgqK,MAEC,MAAAA,OAqBG9N,IAhBJ,WACA,QAAAoO,MAEAA,EAAA33K,UAAAm9J,sBAAA,SAAA3sJ,EAAA89B,GAAA,MAAA99B,IACAmnK,EAAA33K,UAAAs9J,oBAAA,SAAAsa,EAAAC,EAAAp5K,EAAA6vC,GACA,MAAA7vC,OAWqB,SAAA6e,GAErB,QAAAw6J,KACA,cAAAx6J,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KAiCC,MAnCD4nK,IAAA,EAAAwM,EAAAx6J,GASAw6J,EAAA93K,UAAAm9J,sBAAA,SAAA3sJ,EAAA89B,GACA,MAAAoxH,GAAAlvJ,IASAsnK,EAAyB93K,UAAAs9J,oBAAA,SAAAsa,EAAAC,EAAAp5K,EAAA6vC,GACzB,GAAyBowH,GAAA,GACzBqZ,EAAAt5K,EAAA8lB,WAAA+iB,MACA,IAAA0wI,GAAAH,IAAA,IAAAp5K,GAAA,MAAAA,EACA,mBAAAA,GACAigK,EAAA,SAEA,CACA,GAAAuZ,GAAAx5K,EAAAkmC,MAAA,yBACAszI,IAAA,GAAAA,EAAA,GAAAl2K,QACAusC,EAAA5zB,KAAA,uCAAAk9J,EAAA,IAAAn5K,GAIA,MAAAs5K,GAAArZ,GAECoZ,GACDT,KACAW,GAMA,SAAqBrtJ,GACrB,GAAA1qB,KAEA,OADA0qB,GAAA5pB,QAAA,SAAA4b,GAAA,MAAA1c,GAAA0c,IAAA,IACA1c,GATA,iUACAsnC,MAAA,MAwDA2wI,MACApS,GAAA,WAMA,QAAAA,GAAAqS,EAAAvU,EAAAwU,GACA10K,KAAAy0K,eACAz0K,KAAAkgK,MACAlgK,KAAA00K,eA6DC,MAtDDtS,GAAA9lK,UAAA2kC,MAAA,SAAA6gI,EAAAC,GACA,MAAAH,GAAA5hK,KAAAkgK,IAAAmC,SAAAP,EAAAC,IAQAK,EAAyB9lK,UAAAq4K,YAAA,SAAAC,EAAAhpG,EAAAhhC,GACzB,GAAyBiqI,GAAA70K,KAAA00K,aAAA,KACAI,EAAA90K,KAAA00K,aAAAE,GACzBG,EAAAF,IAAAF,YAAA/oG,EAAAhhC,KACA,OAAAkqI,KAAAH,YAAA/oG,EAAAhhC,GAAAmqI,GAYA3S,EAAyB9lK,UAAA2sJ,MAAA,SAAA0P,EAAAz5J,EAAA4iK,EAAAC,EAAAiT,EAAAC,EAAApU,GACzB,GAAyBj2H,MACAsqI,EAAAl1K,KAAAkgK,IAAAzsJ,SAAAzT,KAAAkgK,IAAAzsJ,QAAAm4D,QAAA4oG,GACAW,EAAAH,KAAAppG,QAAA4oG,GACAY,EAAAp1K,KAAA20K,YAAA7S,EAAAqT,EAAAvqI,GACAyqI,EAAAJ,KAAArpG,QAAA4oG,GACAc,EAAAt1K,KAAA20K,YAAA5S,EAAAsT,EAAAzqI,GACA+2H,EAAA,GAAAmC,KACAyR,EAAA,GAAA7a,KACA8a,EAAA,GAAA9a,KACA+a,EAAwB,SAAxB1T,EACA2T,GAAA9pG,OAAAlxE,OAAAusC,UAAAiuI,EAAAG,IACzB3T,EAAAjB,EAAA9H,EAAAz5J,EAAAc,KAAAkgK,IAAA9H,UAAAgd,EAAAE,EAAAI,EAAA7U,EAAAj2H,EACA,IAAAA,EAAAvsC,OACA,MAAAijK,GAAApiK,EAAAc,KAAAy0K,aAAA3S,EAAAC,EAAA0T,EAAAL,EAAAE,QAAAC,EAAAC,EAAA5qI,EAEA82H,GAAArkK,QAAA,SAA6BmxK,GAC7B,GAA6BrE,GAAAqE,EAAAtvK,QAC7B6zK,EAAAvY,EAAsD+a,EAAApL,KACtDqE,GAAAlO,cAA6BjjK,QAAA,SAAAi8J,GAAA,MAAAyZ,GAAAzZ,IAAA,GAC7B,IAAA0Z,GAAAxY,EAAuDgb,EAAArL,KACvDqE,GAAAjO,eAAAljK,QAAA,SAAAi8J,GAAA,MAAA0Z,GAAA1Z,IAAA,IACA6Q,IAAAjrK,GACAyiK,EAAAj5I,IAAAyhJ,IAGA,IAAAwL,GAAAjZ,EAAAiF,EAAAthG,SACA,OAAAihG,GAAApiK,EAAAc,KAAAy0K,aAAA3S,EAAAC,EAAA0T,EAAAL,EAAAE,EAAA5T,EAAAiU,EAAAJ,EAAAC,IAECpT,KAWDwT,GAAA,WAKA,QAAAA,GAAAzkK,EAAA0kK,GACA71K,KAAAmR,SACAnR,KAAA61K,gBA8BC,MAvBDD,GAAyBt5K,UAAAq4K,YAAA,SAAA/oG,EAAAhhC,GACzB,GAAyBg2H,MACzBkV,EAAApa,EAAA17J,KAAA61K,cAmBA,OAlBAn7K,QAAAusB,KAAA2kD,GAA2BvuE,QAAE,SAAA4b,GAC7B,GAAAle,GAAA6wE,EAAA3yD,EACA,OAAAle,IACA+6K,EAAA78J,GAAAle,KAGAiF,KAAAmR,cAAA9T,QAAA,SAAAtC,GACA,GAAiC,gBAAjCA,GAAiC,CACjC,GAAAg7K,GAAA,CACAr7K,QAAAusB,KAAA8uJ,GAAqC14K,QAAA,SAAAi8J,GACrC,GAAA39J,GAAAo6K,EAAAzc,EACA39J,GAAA0C,OAAA,IACA1C,EAAA6gK,EAAA7gK,EAAAm6K,EAAAlrI,IAEiBg2H,EAAAtH,GAAA39J,OAIjBilK,GAECgV,KAqBD3T,GAAA,WAKA,QAAAA,GAAAlvJ,EAAAmtJ,GACA,GAAA78J,GAAArD,IACAA,MAAA+S,OACA/S,KAAAkgK,MACAlgK,KAAAg2K,uBACAh2K,KAAAmiK,UACAjC,EAAAiC,OAAA9kK,QAAA,SAAA6iK,GACA,GAAA2V,GAAA3V,EAAAzsJ,SAAAysJ,EAAAzsJ,QAAAm4D,UACSvoE,GAAA8+J,OAAAjC,EAAAntJ,MAAA,GAAA6iK,IAAA1V,EAAAtjK,MAAAi5K,KAETrT,GAAAxiK,KAAAmiK,OAAA,YACAK,GAAAxiK,KAAAmiK,OAAA,aACAjC,EAAAgL,YAAA7tK,QAAA,SAAA6iK,GACS78J,EAAA2yK,oBAAAh/J,KAAA,GAAAorJ,IAAArvJ,EAAAmtJ,EAAA78J,EAAA8+J,WAETniK,KAAAi2K,mBAAA/T,GAAAnvJ,EAAA/S,KAAAmiK,QA4BC,MA1BDznK,QAAAI,eAAAmnK,EAAA3lK,UAAA,mBAIA0F,IAAA,iBAAAhC,MAAAkgK,IAAAoC,WAAA,GACA7/J,YAAA,EACKC,cAAA,IAOLu/J,EAAA3lK,UAAyB45K,gBAAA,SAAApU,EAAAC,GAEzB,MADA/hK,MAAAg2K,oBAAA/tH,KAAA,SAAAl6B,GAAA,MAAAA,GAAAkT,MAAA6gI,EAAAC,MACA,MAQAE,EAAA3lK,UAAA65K,YAAA,SAAArU,EAAAl2F,EAAAhhC,GACA,MAAA5qC,MAAAi2K,mBAAAtB,YAAA7S,EAAAl2F,EAAAhhC,IAECq3H,KA2CGmU,GAAA,GAAArI,IACJsI,GAAA,WAKA,QAAAC,GAAA5F,EAAA6F,GACAv2K,KAAA0wK,UACA1wK,KAAAu2K,cACAv2K,KAAAw2K,eACAx2K,KAAAy2K,gBACAz2K,KAAAu4J,WAsJC,MA/ID+d,GAAyBh6K,UAAAo6K,SAAA,SAAA7jK,EAAA8G,GACzB,GAAyBixB,MACzBs1H,EAAAnB,EAAAplJ,EAAAixB,EACA,IAAAA,EAAAvsC,OACA,SAAAuoB,OAAA,8DAAAgkB,EAAA5G,KAAA,MAGAhkC,MAAAw2K,YAAA3jK,GAAAqtJ,GASAoW,EAAyBh6K,UAAAq6K,aAAA,SAAAr4K,EAAAw6J,EAAAC,GACzB,GAAyB75J,GAAAZ,EAAAY,QACzB25J,EAAAH,EAAA14J,KAAA0wK,QAAA1wK,KAAAu2K,YAAAr3K,EAAAZ,EAAAu6J,UAAAC,EAAAC,EACA,OAAA/4J,MAAA0wK,QAAAroK,QAAAnJ,EAAA25J,EAAAv6J,EAAA+sB,SAAA/sB,EAAAstB,MAAAttB,EAAAsJ,YAQA0uK,EAAAh6K,UAAAwc,OAAA,SAAAjG,EAAA3T,EAAAuU,GACA,GAAApQ,GAAArD,SACuB,KAAvByT,IAAyBA,KACzB,IAEyBk9E,GAFA/lD,KACAs1H,EAAAlgK,KAAAw2K,YAAA3jK,GAEzB+jK,EAAA,GAAAlc,IAYA,IAXAwF,GACAvvE,EAAA8vE,EAAAzgK,KAAA0wK,QAAAxxK,EAAAghK,QAAAzsJ,EAAA2iK,GAAAxrI,GACA+lD,EAAAtzF,QAAiC,SAAAw5K,GACjC,GAAA1lK,GAAAqpJ,EAA6Doc,EAAAC,EAAA33K,WAChD23K,GAAAtW,eAAAljK,QAAA,SAAAi8J,GAAA,MAAAnoJ,GAAAmoJ,GAAA,WAIb1uH,EAAA5zB,KAAA,uEACA25E,MAEA/lD,EAAAvsC,OACA,SAAAuoB,OAAA,+DAAAgkB,EAAA5G,KAAA,MAEA4yI,GAAAv5K,QAAA,SAAA8T,EAAAjS,GACSxE,OAAAusB,KAAA9V,GAAA9T,QAAA,SAAAi8J,GAAAnoJ,EAAAmoJ,GAAAj2J,EAAAqtK,QAAAnN,aAAArkK,EAAAo6J,EAAAK,OAET,IAA6BpB,GAAA5nE,EAAAp0F,IAAA,SAAA+B,GAC7B,GAAA6S,GAAAylK,EAA2C50K,IAAA1D,EAAAY,QAClC,OAAAmE,GAAAszK,aAAAr4K,KAAA6S,KAET2oJ,EAAAxB,EAAAC,EAIA,OAHAv4J,MAAAy2K,aAAA5jK,GAAAinJ,EACAA,EAAAI,UAAA,iBAAA72J,GAAA0R,QAAAlC,KACA7S,KAAAu4J,QAAAvhJ,KAAA8iJ,GACAA,GAMAwc,EAAyBh6K,UAAAyY,QAAA,SAAAlC,GACzB,GAAAinJ,GAAA95J,KAAA82K,WAAAjkK,EACAinJ,GAAA/kJ,gBACA/U,MAAAy2K,aAAyB5jK,EACzB,IAAApN,GAAAzF,KAAAu4J,QAAAz6J,QAAAg8J,EACAr0J,IAAA,GACAzF,KAAAu4J,QAAA9zH,OAAAh/B,EAAA,IAOA6wK,EAAyBh6K,UAAAw6K,WAAA,SAAAjkK,GACzB,GAAAinJ,GAAA95J,KAAAy2K,aAAA5jK,EACA,KAAAinJ,EACA,SAAAlzI,OAAA,oDAAA/T,EAEA,OAAAinJ,IASAwc,EAAAh6K,UAAA0P,OAAA,SAAA6G,EAAA3T,EAAA8hF,EAAAz0D,GAEA,GAAAwqJ,GAAA3c,EAAAl7J,EAAA,SAEA,OADA26J,GAAA75J,KAA4B82K,WAAAjkK,GAAAmuE,EAAA+1F,EAAAxqJ,GAC5B,cASA+pJ,EAAAh6K,UAAAs+J,QAAA,SAAA/nJ,EAAA3T,EAAA07J,EAAAjqJ,GACA,eAAAiqJ,EAEA,WADA56J,MAAA02K,SAAA7jK,EAAAlC,EAAA,GAGA,cAAAiqJ,EAA6B,CAC7B,GAAAnnJ,GAAA9C,EAAA,MAEA,YADA3Q,MAAA8Y,OAAAjG,EAAA3T,EAAAuU,GAGA,GAAAqmJ,GAAA95J,KAAA82K,WAAAjkK,EACA,QAAA+nJ,GACA,WACAd,EAAA0O,MACA,MACA,aACA1O,EAAA6O,OACA,MACA,aACA7O,EAAA+O,OACA,MACA,eACA/O,EAAA8O,SACA,MACA,cACA9O,EAAA77F,QACA,MACA,YACA67F,EAAA7jC,MACA,MACA,mBACA6jC,EAAAgP,YAAAx9I,WAAA3a,EAAA,IACA,MACA,eACA3Q,KAAA+U,QAAAlC,KAICyjK,KAaDU,MACAC,IACAC,YAAA,GACAC,cAAA,KACAC,cAAA,EACAC,sBAAA,GAEA5T,IACAyT,YAAA,GACAC,cAAA,KACAC,cAAA,EACAC,sBAAA,GAEA7T,GAAA,eACA8T,GAAA,WAIA,QAAAA,GAAAp5K,GACA,GAAAq5K,GAAAr5K,KAAA1C,eAAA,SACAT,EAAAw8K,EAAAr5K,EAAA,MAAAA,CAEA,IADA8B,KAAAjF,MAAA6nK,GAAA7nK,GACAw8K,EAAA,CACA,GAAA9jK,GAAAioJ,EAAAx9J,SACAuV,GAAA,MACAzT,KAAAyT,cAGAzT,MAAAyT,UAEAzT,MAAAyT,QAAAm4D,SACA5rE,KAAAyT,QAAAm4D,WA0BC,MAvBDlxE,QAAAI,eAAAw8K,EAAAh7K,UAAA,UAIA0F,IAAA,iBAAAhC,MAAAyT,QAAA,QACAhR,YAAA,EACKC,cAAA,IAML40K,EAAAh7K,UAAyBk7K,cAAA,SAAA/jK,GACzB,GAAAu9J,GAAAv9J,EAAAm4D,MACA,IAAAolG,EAAA,CACA,GAAAyG,GAAAz3K,KAAAyT,QAAA,MACA/Y,QAAAusB,KAAA+pJ,GAAA3zK,QAAA,SAAAi8J,GACA,MAAAme,EAAAne,KACAme,EAAAne,GAAA0X,EAAA1X,QAKCge,KAGDI,GAAA,GAAAJ,IADA,QAEAK,GAAA,GAAAL,IAAA,WACAM,GAAA,WAMA,QAAAA,GAAA/kK,EAAAglK,EAAAC,GACA93K,KAAA6S,KACA7S,KAAA63K,cACA73K,KAAA83K,UACA93K,KAAAu4J,WACAv4J,KAAA+3K,aACA/3K,KAAAg4K,UACAh4K,KAAAi4K,kBAAA,GAAAvd,KACA16J,KAAAk4K,eAAA,UAAArlK,EACAyhD,GAAAujH,EAAA73K,KAAAk4K,gBAgYC,MAvXDN,GAAAt7K,UAAA0P,OAAA,SAAA9M,EAAA6T,EAAAolK,EAAA5rJ,GACA,GAAAlpB,GAAArD,IACA,KAAAA,KAAA+3K,UAAAv8K,eAAAuX,GACA,SAAA6T,OAAA,oDAAAuxJ,EAAA,oCAAAplK,EAAA,oBAEA,UAAAolK,GAAA,GAAAA,EAAA95K,OACA,SAAAuoB,OAAA,8CAAA7T,EAAA,6CAEA,KAAA+vJ,GAAAqV,GACA,SAAAvxJ,OAAA,yCAAAuxJ,EAAA,gCAAAplK,EAAA,sBAEA,IAAyBqe,GAAYopI,EAAAx6J,KAAAi4K,kBAAA/4K,MACrC+I,GAAA8K,OAAAolK,QAAA5rJ,WACA6E,GAAApa,KAAuB/O,EACvB,IAAAmwK,GAAA5d,EAAAx6J,KAAA83K,QAAAO,gBAAAn5K,KAMA,OALAk5K,GAAA58K,eAAAuX,KACAuhD,GAAAp1D,EA7gFA,cA8gFAo1D,GAAAp1D,EAAAo5K,cAAAvlK,GACAqlK,EAAArlK,GAAA,MAEA,WAIA1P,EAAAy0K,QAAAS,WAAiC,WACjC,GAAA9yK,GAAA2rB,EAAAtzB,QAAAmK,EACAxC,IAAA,GACA2rB,EAAAqT,OAAAh/B,EAAA,GAEApC,EAAA00K,UAAAhlK,UACAqlK,GAAArlK,OAUA6kK,EAAAt7K,UAAAo6K,SAAA,SAAA3jK,EAAAmtJ,GACA,OAAAlgK,KAAA+3K,UAAAhlK,KAKA/S,KAAA+3K,UAAAhlK,GAAAmtJ,GACA,IAOA0X,EAAyBt7K,UAAAk8K,YAAA,SAAAzlK,GACzB,GAAAisE,GAAAh/E,KAAA+3K,UAAAhlK,EACA,KAAAisE,EACA,SAAAp4D,OAAA,mCAAA7T,EAAA,6BAEA,OAAAisE,IASA44F,EAAAt7K,UAAA0iF,QAAA,SAAA9/E,EAAAm7J,EAAAt/J,EAAA09K,GACA,GAAAp1K,GAAArD,SACyB,KAAzBy4K,IAAyBA,GAAA,EACzB,IAAyBz5F,GAAAh/E,KAAiBw4K,YAAAne,GACjBP,EAAA,GAAA4e,IAAA14K,KAAA6S,GAAAwnJ,EAAAn7J,GACzBk5K,EAAAp4K,KAAA83K,QAAAO,gBAAAr2K,IAAA9C,EACAk5K,KACA9jH,GAAAp1D,EAxkFA,cAykFAo1D,GAAAp1D,EAAAo5K,cAAAje,GACAr6J,KAAA83K,QAAAO,gBAAA11K,IAAAzD,EAAAk5K,MAEA,IAAyB9d,GAAA8d,EAAA/d,GACAE,EAAA,GAAA+c,IAAAv8K,EAMzB,MALAA,KAAAS,eAAA,WACA8+J,GACAC,EAAAid,cAAAld,EAAA7mJ,SAEA2kK,EAAA/d,GAAAE,EACAD,GAGA,GAAAA,IAAAqd,GACA,MAAA7d,OAHAQ,GAAAod,EAYA,IA9HA,SAuHAnd,EAAAx/J,OAOAu/J,EAAAv/J,QAAAw/J,EAAAx/J,MAAA,CAmBA,GAAA49K,GAAAne,EAAAx6J,KAAA83K,QAAAc,iBAAA15K,KACAy5K,GAAAt7K,QAAA,SAAAy8J,GAKAA,EAAAod,aAAA7zK,EAAAwP,IAAAinJ,EAAAO,gBAAAP,EAAA+e,QACA/e,EAAA/kJ,WAGA,IAAyBkjJ,GAAAj5E,EAAAk3F,gBAAA5b,EAAAv/J,MAAAw/J,EAAAx/J,OACzB+9K,GAAA,CACA,KAAA7gB,EAAA,CACA,IAAAwgB,EACA,MACAxgB,GAAAj5E,EAAAi3F,mBACA6C,GAAA,EAuBA,MArBA94K,MAAA83K,QAAAiB,qBACA/4K,KAAAg4K,OAAAhhK,MAAA9X,UAAAm7J,cAAApC,aAAAqC,YAAAC,UAAAT,SAAAgf,yBACAA,IACAxkH,GAAAp1D,EArOA,qBAsOA46J,EAAAxtI,QAAA,WAAAooC,GAAAx1D,EAtOA,wBAwOA46J,EAAAG,OAAA,WACA,GAAAx0J,GAAApC,EAAAk1J,QAAAz6J,QAAAg8J,EACAr0J,IAAA,GACApC,EAAAk1J,QAAA9zH,OAAAh/B,EAAA,EAEA,IAAA8yJ,GAAAl1J,EAAAy0K,QAAAc,iBAAA52K,IAAA9C,EACA,IAAAq5J,EAAA,CACA,GAAAygB,GAAAzgB,EAAAz6J,QAAAg8J,EACAkf,IAAA,GACAzgB,EAAA9zH,OAAAu0I,EAAA,MAIAh5K,KAAAu4J,QAAAvhJ,KAAA8iJ,GACA6e,EAAA3hK,KAAA8iJ,GACAA,EAvDA,IAAA4K,GAAApK,EAAiC1uF,OAAA2uF,EAAA3uF,QAAA,CACjC,GAAiChhC,MACAquI,EAAAj6F,EAAAm3F,YAAA7b,EAAAv/J,MAAAu/J,EAAA1uF,OAAAhhC,GACjCsuI,EAAAl6F,EAAAm3F,YAAA5b,EAAAx/J,MAAAw/J,EAAA3uF,OAAAhhC,EACAA,GAAAvsC,OACA2B,KAAA83K,QAAA1pE,YAAAxjE,GAGA5qC,KAAA83K,QAAAS,WAAA,WACAtc,EAAA/8J,EAAA+5K,GACqBnd,EAAA58J,EAAAg6K,OAmDrBtB,EAAAt7K,UAAA68K,WAAA,SAAApmK,GACA,GAAA1P,GAAArD,WACAA,MAAA+3K,UAAAhlK,GACA/S,KAAA83K,QAAAO,gBAAAh7K,QAAA,SAAA+7K,EAAAl6K,SAAAk6K,GAAArmK,KACA/S,KAAAi4K,kBAAA56K,QAAA,SAAA+zB,EAAAlyB,GACSmE,EAAA40K,kBAAAt1K,IAAAzD,EAAAkyB,EAAAxzB,OAAA,SAAAy7K,GAAA,MAAAA,GAAAtmK,cAOT6kK,EAAAt7K,UAAAg9K,kBAAA,SAAAp6K,GACAc,KAAA83K,QAAAO,gBAAA1V,OAAAzjK,GACAc,KAAAi4K,kBAAyBtV,OAAAzjK,EACzB,IAAAq6K,GAAAv5K,KAAA83K,QAAAc,iBAAA52K,IAAA9C,EACAq6K,KACAA,EAAAl8K,QAAA,SAAAy8J,GAAA,MAAAA,GAAA/kJ,YACA/U,KAAA83K,QAAAc,iBAAAjW,OAAAzjK,KASA04K,EAAAt7K,UAAAk9K,mBAAA,SAAA9Y,EAAAn1E,EAAAljF,GACA,GAAAhF,GAAArD,SACA,KAAAqI,OAAA,GACArI,KAAA83K,QAAAnf,OAAAp3G,MAAAm/G,EAAAjB,IAAA,GAAApiK,QAAA,SAAA8sK,GACA,GAAA9hK,GAAA27J,GAAiCmG,EAAA9mK,EAAA60K,gBAAA,CACjC,GAAAuB,GAAAp2K,EAAAy0K,QAAA4B,wBAAA13K,IAAAmoK,EAEAsP,IACAA,EAAAE,WAAAxP,EAAA5+E,GAAA,GAEAloF,EAAAs2K,WAAAxP,EAAA5+E,GAAA,OAGAloF,GAAAi2K,kBAAAnP,MAUAyN,EAAAt7K,UAAAq9K,WAAA,SAAAz6K,EAAAqsF,EAAAquF,GACA,GAAAv2K,GAAArD,KACAqkK,EAAArkK,KAAA83K,SACA8B,GAAA16K,EAAA26K,mBACA75K,KAAAw5K,mBAAAt6K,EAAAqsF,GAAA,EAEA,IAAAuuF,GAAAzV,EAAAgU,gBAAAr2K,IAAA9C,EACA,IAAA46K,EAA2B,CAC3B,GAAAC,KAWA,IAVAr/K,OAAAusB,KAAA6yJ,GAAAz8K,QAAA,SAAAg9J,GAGA,GAAAh3J,EAAA00K,UAAmC1d,GAAE,CACrC,GAAAP,GAAAz2J,EAAA27E,QAAA9/E,EAAAm7J,EA7PA,QA6PA,EACAP,IACAigB,EAAA/iK,KAAA8iJ,MAIAigB,EAAA17K,OAGA,MAFAgmK,GAAA2V,qBAAAh6K,KAAA6S,GAAA3T,GAAA,EAAmEqsF,OACnE+sE,GAAAyhB,GAAA9f,OAAA,iBAAAoK,GAAAC,iBAAAplK,KAMA,GAAA+6K,IAAA,CACA,IAAA5V,EAAA6V,gBAA6B,CAC7B,GAAAC,GAAA9V,EAAA9L,QAAAl6J,OAAAgmK,EAAA+V,wBAAAp4K,IAAA9C,KAKA,IAAAi7K,KAAA97K,OACA47K,GAAA,MAIA,KADA,GAAA5mH,GAAAn0D,EACAm0D,IAAqCt2D,YAAA,CACrC,GAAAs9K,GAAAhW,EAAAgU,gBAAAr2K,IAAAqxD,EACA,IAAAgnH,EAAA,CACAJ,GAAA,CACA,SASA,GAAA7oJ,GAAApxB,KAAAi4K,kBAAAj2K,IAAA9C,EACA,IAAAkyB,EAAA,CACA,GAAAkpJ,GAAA,GAAAxW,IACA1yI,GAAA/zB,QAAA,SAAiC+hG,GACjC,GAAAi7D,GAAAj7D,EAAArsF,IACA,KAAAunK,EAAA5b,IAAArE,GAAA,CAEAigB,EAAiC5xJ,IAAA2xI,EACjC,IAAiCr7E,GAAA37E,EAAA00K,UAAA1d,GACApC,EAAAj5E,EAAAi3F,mBACAsE,EAAAlW,EAAAgU,gBAAAr2K,IAAA9C,GACAo7J,EAAAigB,EAAAlgB,IAAAqd,GACAnd,EAAA,GAAiB+c,IAhTlD,QAiTAxd,EAAA,GAAA4e,IAAAr1K,EAAAwP,GAAAwnJ,EAAAn7J,EACAmE,GAAAy0K,QAAAiB,qBACA11K,EAAA20K,OAAAhhK,MACA9X,UACAm7J,cACApC,aACAqC,YACAC,UACAT,SACiBgf,sBAAA,OAMjBmB,EACA5V,EAAA2V,qBAAAh6K,KAAA6S,GAAA3T,GAAA,EAAAqsF,IAKA84E,EAAAkU,WAAA,iBAAAl1K,GAAAi2K,kBAAAp6K,KACAmlK,EAAAmW,uBAAAt7K,GACAmlK,EAAAoW,mBAAAv7K,EAAAqsF,KAQAqsF,EAAAt7K,UAAAo+K,WAAA,SAAAx7K,EAAAm0D,GAAAiB,GAAAp1D,EAAAc,KAAAk4K,iBAKAN,EAAAt7K,UAAAq+K,uBAAA,SAAAC,GACA,GAAAv3K,GAAArD,KACA2wF,IA4BA,OA3BA3wF,MAAAg4K,OAAA36K,QAA2B,SAAEg8K,GAC7B,GAAAvf,GAAAuf,EAAAvf,MACA,KAAAA,EAAA+gB,UAAA,CAEA,GAA6B37K,GAAAm6K,EAAAn6K,QAC7BkyB,EAAA/tB,EAAA40K,kBAAAj2K,IAAA9C,EACAkyB,IACAA,EAAA/zB,QAAA,SAAA+hG,GACA,GAAAA,EAAArsF,MAAyCsmK,EAAAhf,YAAA,CACzC,GAAA0c,GAAA3c,EAAAl7J,EAAAm6K,EAAAhf,YAAAgf,EAAA/e,UAAAv/J,MAAAs+K,EAAA9e,QAAAx/J,MACA,SAAA6/K,EACA/gB,EAAAwf,EAAAvf,OAAA16D,EAAA+4E,MAAApB,EAAA33E,EAAA7yE,aAIAutI,EAAAghB,iBACAz3K,EAAAy0K,QAAAS,WAAA,WAGiBze,EAAA/kJ,YAIjB47E,EAAA35E,KAAAqiK,MAGAr5K,KAAAg4K,UACArnF,EAAAqhE,KAAA,SAAAlvI,EAAAnK,GAGA,GAA6BoiK,GAAAj4J,EAAAm1I,WAAAiI,IAAAqC,SAC7ByY,EAAAriK,EAAAs/I,WAAAiI,IAAAqC,QACA,WAAAwY,GAAA,GAAAC,EACAD,EAAAC,EAES33K,EAAAy0K,QAAAnf,OAAA0R,gBAAAvnJ,EAAA5jB,QAAAyZ,EAAAzZ,SAAA,QAOT04K,EAAAt7K,UAA2CyY,QAAA,SAAoBw2E,GAC/DvrF,KAAAu4J,QAAAl7J,QAAA,SAAA9B,GAAA,MAAAA,GAAAwZ,YACA/U,KAAAw5K,mBAAAx5K,KAAA63K,YAAAtsF,IAMAqsF,EAAyBt7K,UAAA2+K,oBAAA,SAAA/7K,GACzB,GAAAg8K,IAAA,CAKA,OAJAl7K,MAAAi4K,kBAAAvZ,IAAAx/J,KACAg8K,GAAA,GACAA,IACAl7K,KAAAg4K,OAAA/vH,KAAA,SAAAoxH,GAAA,MAAAA,GAAAn6K,eAAAg8K,GAGCtD,KAEDuD,GAAA,WAKA,QAAAC,GAAAziB,EAAA4d,GACAv2K,KAAA24J,SACA34J,KAAAu2K,cACAv2K,KAAAu4J,WACAv4J,KAAAq7K,gBAAA,GAAA3gB,KACA16J,KAAA44K,iBAAA,GAAAle,KACA16J,KAAAo6K,wBAAA,GAAA1f,KACA16J,KAAAq4K,gBAAA,GAAA3d,KACA16J,KAAAs7K,cAAA,GAAAxX,KACA9jK,KAAAk6K,gBAAA,EACAl6K,KAAA+4K,mBAAA,EACA/4K,KAAAu7K,oBACAv7K,KAAAw7K,kBACAx7K,KAAAy7K,aACAz7K,KAAA07K,iBACA17K,KAAA05K,wBAAA,GAAAhf,KACA16J,KAAA27K,0BACA37K,KAAA47K,0BACA57K,KAAA67K,kBAAA,SAAA38K,EAAAqsF,KAi1BC,MA10BD6vF,GAAA9+K,UAAAm+K,mBAAA,SAAAv7K,EAAAqsF,GAAAvrF,KAAA67K,kBAAA38K,EAAAqsF,IACA7wF,OAAAI,eAAAsgL,EAAA9+K,UAAA,iBAIA0F,IAAA,WACA,GAAAu2J,KAQS,OAPTv4J,MAAAw7K,eAAAn+K,QAAA,SAAAy+K,GACAA,EAAAvjB,QAAAl7J,QAAA,SAAAy8J,GACAA,EAAA+e,QACAtgB,EAAAvhJ,KAAA8iJ,OAISvB,GAET91J,YAAA,EACKC,cAAA,IAOL04K,EAAyB9+K,UAAAy/K,gBAAA,SAAA7E,EAAAW,GACzB,GAAAiE,GAAA,GAAAlE,IAAAV,EAAAW,EAAA73K,KAgBA,OAfA63K,GAAA96K,WACAiD,KAAAg8K,sBAAAF,EAAAjE,IAMA73K,KAAAq7K,gBAAA14K,IAAAk1K,EAAAiE,GAMA97K,KAAAi8K,oBAAApE,IAEA73K,KAAAu7K,iBAAArE,GAAA4E,GAOAV,EAAyB9+K,UAAA0/K,sBAAA,SAAAF,EAAAjE,GACzB,GAAAvK,GAAAttK,KAAAw7K,eAAAn9K,OAAA,CACA,IAAAivK,GAAA,GAEA,OADgCx5G,IAAE,EACDx1D,EAAAgvK,EAAAhvK,GAAA,EAAAA,IAAA,CACjC,GAAA49K,GAAAl8K,KAAAw7K,eAAAl9K,EACA,IAAA0B,KAAA24J,OAAA0R,gBAAA6R,EAAArE,eAAA,CACA73K,KAAAw7K,eAAA/2I,OAAAnmC,EAAA,IAAAw9K,GACAhoH,GAAA,CACA,QAGAA,GACA9zD,KAAAw7K,eAAA/2I,OAAA,IAAAq3I,OAIA97K,MAAAw7K,eAAAxkK,KAAA8kK,EAGA,OADA97K,MAAA05K,wBAAA/2K,IAAAk1K,EAAAiE,GACAA,GAOAV,EAAyB9+K,UAAAo6K,SAAA,SAAAQ,EAAAW,GACzB,GAAAiE,GAAA97K,KAAAu7K,iBAAArE,EAIA,OAHA4E,KACAA,EAAA97K,KAAA+7K,gBAAA7E,EAAAW,IAEAiE,GAQAV,EAAyB9+K,UAAA6/K,gBAAA,SAAAjF,EAAAnkK,EAAAisE,GACzB,GAAA88F,GAAA97K,KAAAu7K,iBAAArE,EACA4E,MAAApF,SAAA3jK,EAAAisE,IACAh/E,KAAAk6K,mBAQAkB,EAAA9+K,UAAAyY,QAAA,SAAAmiK,EAAA3rF,GACA,GAAAloF,GAAArD,IACA,IAAAk3K,EAAA,CAEA,GAAA4E,GAAA97K,KAAAo8K,gBAAAlF,EACAl3K,MAAAu4K,WAAA,WACAl1K,EAAAq2K,wBAAA/W,OAAAmZ,EAAAjE,mBACAx0K,GAAAk4K,iBAA6BrE,EAC7B,IAAAzxK,GAAApC,EAAAm4K,eAAA19K,QAAAg+K,EACAr2K,IAAA,GACApC,EAAAm4K,eAAA/2I,OAAAh/B,EAAA,KAGAzF,KAAAq8K,yBAAA,iBAAAP,GAAA/mK,QAAAw2E,OAMA6vF,EAAA9+K,UAAA8/K,gBAAA,SAAAvpK,GAAA,MAAA7S,MAAAu7K,iBAAA1oK,IAQAuoK,EAAA9+K,UAAA0iF,QAAA,SAAAk4F,EAAAh4K,EAAA6T,EAAAhY,GACA,QAAA8nK,GAAA3jK,KACAc,KAAAo8K,gBAAAlF,GAAAl4F,QAAA9/E,EAAA6T,EAAAhY,IACA,IAWAqgL,EAAA9+K,UAAAo+K,WAAA,SAAAxD,EAAAh4K,EAAAm0D,EAAAj2D,GACA,GAAAylK,GAAA3jK,GAAA,CAIA,GAAAi7B,GAAAj7B,EAAAskK,GACArpI,MAAAg9I,gBACAh9I,EAAAg9I,eAAA,GAKAD,GACAl3K,KAAAo8K,gBAAAlF,GAAAwD,WAAAx7K,EAAAm0D,GAGAj2D,GACA4C,KAAAi8K,oBAAA/8K,KAOAk8K,EAAA9+K,UAAA2/K,oBAAA,SAAA/8K,GAAAc,KAAA27K,uBAAA3kK,KAAA9X,IAMAk8K,EAAA9+K,UAAAggL,sBAAA,SAAAp9K,EAAAnE,GACAA,EACAiF,KAAAs7K,cAAA5c,IAAAx/J,KACAc,KAAAs7K,cAAA5yJ,IAAAxpB,GACAo1D,GAAAp1D,EA7pBA,wBAgqBAc,KAAAs7K,cAAA5c,IAAAx/J,KACAc,KAAAs7K,cAAA3Y,OAAAzjK,GACAw1D,GAAAx1D,EAlqBA,yBA4qBAk8K,EAAA9+K,UAAAq9K,WAAA,SAAAzC,EAAAh4K,EAAAqsF,EAAAquF,GACA,IAAA/W,GAAA3jK,GAEA,WADAc,MAAAy6K,mBAAAv7K,EAAAqsF,EAGA,IAAAuwF,GAAA5E,EAAAl3K,KAAAo8K,gBAAAlF,GAAA,IACA4E,GACAA,EAAAnC,WAAAz6K,EAAAqsF,EAAAquF,GAGA55K,KAAAg6K,qBAAA9C,EAAAh4K,GAAA,EAAAqsF,IAUA6vF,EAAA9+K,UAAA09K,qBAAA,SAAA9C,EAAAh4K,EAAAk4K,EAAA7rF,GACAvrF,KAAA47K,uBAAA5kK,KAAA9X,GACAA,EAAAskK,KACA0T,cACAC,cAAA5rF,EAAA6rF,eACAC,sBAAA,IAWA+D,EAAA9+K,UAAA0P,OAAA,SAAAkrK,EAAAh4K,EAAA6T,EAAAolK,EAAA5rJ,GACA,MAAAs2I,IAAA3jK,GACAc,KAAAo8K,gBAAAlF,GAAAlrK,OAAA9M,EAAA6T,EAAAolK,EAAA5rJ,GAEA,cAOA6uJ,EAAA9+K,UAAAigL,kBAAA,SAAAlD,EAAAmD,GACA,MAAAnD,GAAAphB,WAAAhP,MAAAjpJ,KAAA24J,OAAA0gB,EAAAn6K,QAAAm6K,EAAA/e,UAAAv/J,MAAAs+K,EAAA9e,QAAAx/J,MAAAs+K,EAAA/e,UAAA7mJ,QAAA4lK,EAAA9e,QAAA9mJ,QAAA+oK,IAMApB,EAAA9+K,UAAAk+K,uBAAA,SAAAtsH,GACA,GAAA7qD,GAAArD,KACAssD,EAAAtsD,KAAA24J,OAAAp3G,MAAA2M,EAAAuxG,IAAA,EACAnzG,GAAAjvD,QAAA,SAA6B6B,GAC7B,GAAAq5J,GAAAl1J,EAAAu1K,iBAAA52K,IAAA9C,EACAq5J,IACAA,EAAAl7J,QAAA,SAAAy8J,GAIAA,EAAA+e,OACA/e,EAAAghB,kBAAA,EAGAhhB,EAAA/kJ,WAIA,IAAAqkK,GAAA/1K,EAAAg1K,gBAAAr2K,IAAA9C,EACAk6K,IACA1+K,OAAAusB,KAAAmyJ,GAAA/7K,QAAA,SAAAg9J,GAAA,MAAA+e,GAAA/e,GAAAsd,OAGA,GAAA33K,KAAAo6K,wBAAA7zG,OAEAja,EAAAtsD,KAAA24J,OAAAp3G,MAAA2M,EAAAwxG,IAAA,GACApzG,EAAAjuD,QACAiuD,EAAAjvD,QAAA,SAAiC6B,GACjC,GAAAq5J,GAAAl1J,EAAA+2K,wBAAAp4K,IAAA9C,EACAq5J,IACAA,EAAAl7J,QAAA,SAAAy8J,GAAA,MAAAA,GAAA77F,eAQAm9G,EAAA9+K,UAAAmgL,kBAAA,WACA,GAAAp5K,GAAArD,IACA,WAAAk8B,SAAA,SAAAhV,GACA,GAAA7jB,EAAAk1J,QAAAl6J,OACA,MAAAi6J,GAAAj1J,EAAAk1J,SAAA0B,OAAA,iBAAA/yI,MAGAA,QAQAk0J,EAAA9+K,UAAAgoK,iBAAA,SAAAplK,GACA,GAAAmE,GAAArD,KACAm6B,EAAAj7B,EAAAskK,GACA,IAAArpI,KAAAg9I,cAAA,CAGA,GADAj4K,EAAAskK,IAAAyT,GACA98I,EAAA+8I,YAAA,CACAl3K,KAAAw6K,uBAAiCt7K,EACjC,IAAA48K,GAAA97K,KAAAo8K,gBAAAjiJ,EAAA+8I,YACA4E,IACAA,EAAAxC,kBAAAp6K,GAGAc,KAAAy6K,mBAAAv7K,EAAAi7B,EAAAg9I,eAEAn3K,KAAA24J,OAAAyR,eAAAlrK,EAryBA,yBAsyBAc,KAAAs8K,sBAAAp9K,GAAA,GAEAc,KAAA24J,OAAAp3G,MAAAriD,EAxyBA,wBAwyBA,GAAA7B,QAAA,SAAAyxD,GACSzrD,EAAAi5K,sBAAAp9K,GAAA,MAOTk8K,EAAA9+K,UAAAogL,MAAA,SAAA9B,GACA,GAAAv3K,GAAArD,SACyB,KAAzB46K,IAAyBA,GAAA,EACzB,IAAAriB,KAKA,IAJAv4J,KAAAq7K,gBAAA90G,OACAvmE,KAAAq7K,gBAAAh+K,QAAA,SAAAy+K,EAAA58K,GAAA,MAAAmE,GAAA24K,sBAAAF,EAAA58K,KACAc,KAAAq7K,gBAAA7lH,SAEAx1D,KAAAw7K,eAAAn9K,SACA2B,KAAA+4K,oBAA6B/4K,KAAA47K,uBAAAv9K,QAAA,CAC7B,GAAAs+K,KACA,KACApkB,EAAAv4J,KAAA48K,iBAAAD,EAAA/B,GAEA,QACA,OAAAt8K,GAAA,EAAAA,EAAAq+K,EAAAt+K,OAAAC,IACAq+K,EAAAr+K,UAKA,QAAiCA,GAAA,EAAAA,EAAA0B,KAAA47K,uBAAAv9K,OAAAC,IAAA,CACjC,GAAAY,GAAAc,KAAA47K,uBAAAt9K,EACA0B,MAAAskK,iBAAAplK,GAQA,GALAc,KAAA+4K,mBAAA,EACA/4K,KAAA27K,uBAAAt9K,OAAA,EACA2B,KAAA47K,uBAAAv9K,OAAA,EACA2B,KAAAy7K,UAAAp+K,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAAy7K,aACAz7K,KAAA07K,cAAAr9K,OAAA,CAIA,GAAAw+K,GAAA78K,KAAA07K,aACA17K,MAAA07K,iBACAnjB,EAAAl6J,OACAi6J,EAAAC,GAAA0B,OAAA,WAAA4iB,EAAAx/K,QAAA,SAAA2wB,GAAA,MAAAA,SAGA6uJ,EAAAx/K,QAAA,SAAA2wB,GAAA,MAAAA,SAQAotJ,EAAA9+K,UAAA8xG,YAAA,SAAAxjE,GACA,SAAAhkB,OAAA,kFAAAgkB,EAAA5G,KAAA,QAOAo3I,EAAA9+K,UAAAsgL,iBAAA,SAAAD,EAAA/B,GACA,GAAAv3K,GAAArD,KACyBw8K,EAAA,GAAAzO,IACA+O,KACAC,EAAA,GAAAriB,KACAsiB,KACArb,EAAA,GAAAjH,KACAoK,EAAA,GAAApK,KACAqK,EAAA,GAAArK,KACzBuiB,EAAA,GAAAnZ,IACA9jK,MAAAs7K,cAAAj+K,QAAA,SAAAyxD,GACAmuH,EAA6Bv0J,IAAAomC,EAE7B,QADgCouH,GAAY75K,EAAAs1J,OAAAp3G,MAAAuN,EAv3B5C,sBAu3B6E,GAC7ExwD,EAAA,EAAAA,EAAA4+K,EAAA7+K,OAAAC,IACA2+K,EAAAv0J,IAAAw0J,EAAA5+K,KAUA,QAPyB6+K,GAAAhZ,KACzBiZ,EAAAp9K,KAAA27K,uBAAAt9K,OACA2B,KAAA27K,uBAAA/9K,OAAA8lK,GAAA1jK,KAAA27K,4BAKAr9K,EAAA,EAAAA,EAAA8+K,EAAA/+K,OAAAC,IACAg2D,GAAA8oH,EAAA9+K,GA5yGA,WAgzGA,QAFyB++K,MACGC,EAAY,GAAAxZ,KACXxlK,EAAA,EAAAA,EAAA0B,KAAA47K,uBAAAv9K,OAAAC,IAAA,CAC7B,GAA6BY,GAAAc,KAAA47K,uBAAAt9K,GAC7B67B,EAAAj7B,EAAAskK,GACArpI,MAAAg9I,gBACA7iH,GAAAp1D,EAnzGA,YAozGAm+K,EAAArmK,KAAA9X,GACAi7B,EAAAi9I,cACAkG,EAAA50J,IAAAxpB,IAIAy9K,EAAA3lK,KAAA,WACAomK,EAAA//K,QAAA,SAAA6B,GAAA,MAAAw1D,IAAAx1D,EA5zGA,cA6zGAm+K,EAAAhgL,QAAA,SAAA6B,GACAw1D,GAAAx1D,EA7zGA,YA8zGamE,EAAAihK,iBAAAplK,MAKb,QAFyBq+K,MACGC,KACCl/K,EAAA0B,KAAAw7K,eAAAn9K,OAAA,EAAAC,GAAA,EAAAA,IAAA,CAC7B0B,KAAAw7K,eAAAl9K,GACAq8K,uBAAiCC,GAAAv9K,QAAA,SAAAg8K,GACjC,GAAAvf,GAAAuf,EAAAvf,MACAyjB,GAAAvmK,KAA+B8iJ,EAC/B,IAAA56J,GAAAm6K,EAAAn6K,OACA,KAAAi+K,IAAA95K,EAAAs1J,OAAA0R,gBAAA8S,EAAAj+K,GAEA,WADA46J,GAAA/kJ,SAGA,IAAAi6J,GAAA3rK,EAAAk5K,kBAAAlD,EAAAmD,EACA,IAAAxN,EAAApkI,QAAAokI,EAAApkI,OAAAvsC,OAEA,WADAm/K,GAAAxmK,KAAAg4J,EAKA,IAAAqK,EAAAP,qBAIA,MAHAhf,GAAAxtI,QAAA,iBAAkD2vI,GAAA/8J,EAAA8vK,EAAAxN,cAClD1H,EAAAI,UAAA,iBAAA4B,GAAA58J,EAAA8vK,EAAAvN,gBACAqb,GAAA9lK,KAAA8iJ,EAQAkV,GAAAtN,UAAArkK,QAAA,SAAAmxK,GAAA,MAAAA,GAAAkD,yBAAA,IACA8K,EAAAtO,OAAiChvK,EAAA8vK,EAAatN,UAC9C,IAAAkL,IAAAoC,cAAAlV,SAAA56J,UACA89K,GAAAhmK,KAAA41J,GACAoC,EAAArN,gBAAAtkK,QAAA,SAAA6B,GAAA,MAAAs7J,GAAAmH,EAAAziK,MAAA8X,KAAA8iJ,KACAkV,EAAA1O,cAAqCjjK,QAAA,SAAAogL,EAAAv+K,GACrC,GAAAokK,GAAA5oK,OAAAusB,KAAAw2J,EACA,IAAAna,EAAAjlK,OAAA,CACA,GAAAq/K,GAAA5Y,EAAA9iK,IAAA9C,EACAw+K,IACA5Y,EAAAniK,IAAAzD,EAAAw+K,EAAA,GAAA5Z,MAEAR,EAAAjmK,QAAA,SAAAi8J,GAAA,MAAAokB,GAAAh1J,IAAA4wI,QAGA0V,EAAAzO,eAAqCljK,QAAA,SAAAogL,EAAAv+K,GACrC,GAAqCokK,GAAA5oK,OAAAusB,KAAAw2J,GACrCE,EAAA5Y,EAAA/iK,IAAA9C,EACAy+K,IACA5Y,EAAApiK,IAAAzD,EAAAy+K,EAAA,GAAA7Z,MAEiBR,EAAAjmK,QAAA,SAAAi8J,GAAA,MAAAqkB,GAAAj1J,IAAA4wI,SAIjB,GAAAkkB,EAA6Bn/K,OAAA,CAC7B,GAAAu/K,KACAJ,GAAAngL,QAAA,SAAA2xK,GACA4O,EAAA5mK,KAAA,IAAAg4J,EAAA3U,YAAA,yBACa2U,EAAA,OAAA3xK,QAAA,SAAAshB,GAAA,MAAAi/J,GAAA5mK,KAAA,KAAA2H,EAAA,UAEb4+J,EAAAlgL,QAAA,SAAAy8J,GAAA,MAAAA,GAAA/kJ,YACA/U,KAAAouG,YAAAwvE,GAOA,OAD4BC,GAAY,GAAA/Z,KACXxlK,EAAA,EAAAA,EAAA8+K,EAAA/+K,OAAAC,IAAA,CAC7B,GAAAY,GAAAk+K,EAAA9+K,EACAk+K,GAAA9d,IAAAx/J,IACA2+K,EAAAn1J,IAAAxpB,GAGA,GAAyB4+K,GAAA,GAAApjB,KACzBqjB,IACAf,GAA2B3/K,QAAE,SAAAg8K,GAC7B,GAAAn6K,GAAAm6K,EAAAn6K,OACAs9K,GAAA9d,IAAAx/J,KACA6+K,EAAAC,QAAA9+K,GACAmE,EAAA46K,sBAAA5E,EAAAvf,OAAAod,YAAAmC,EAAArK,YAAA8O,MAGAhB,EAAAz/K,QAA6B,SAAAy8J,GAC7B,GAA6B56J,GAAA46J,EAAA56J,OAC7BmE,GAAA66K,oBAAAh/K,GAAA,EAAA46J,EAAAod,YAAApd,EAAAO,YAAA,MACAh9J,QAAA,SAAA8gL,GACA3jB,EAAAsjB,EAAA5+K,MAAA8X,KAAAmnK,GACaA,EAAAppK,aAUb,IAAAqpK,GAAAf,EAAAz/K,OAAA,SAAAkxD,GACS,MAAA+1G,IAAA/1G,EAAAg2G,EAAAC,KAGTtoJ,EAAAumJ,GAAAhjK,KAAA24J,OAAA2kB,EAAAvY,EAAApL,IAAA0kB,EAAA5hK,EAAA,EAAAA,GAAA,GACApf,QAAA,SAAAyxD,GACA+1G,GAAA/1G,EAAAg2G,EAAAC,IACAqZ,EAAApnK,KAAA83C,IAIA,IAAAwvH,IAAAxZ,EAAAv+F,KACAy8F,GAAAhjK,KAAA24J,OAAAklB,EAAA/Y,EAAApL,KACA,GAAAgB,OAAA,EACA0jB,GAAA/gL,QAA6B,SAAAyxD,GAC7B,GAA6ByvH,GAAAF,EAAAr8K,IAAA8sD,GAC7B0vH,EAAAF,EAAiDt8K,IAAA8sD,EACxCuvH,GAAA17K,IAAAmsD,EAAAp0D,OAAAusC,UAAAs3I,EAAAC,KAET,IAAyBC,MACzBC,IACA1B,GAAA3/K,QAAA,SAAAg8K,GACA,GAAAn6K,GAAAm6K,EAAAn6K,QAAA46J,EAAAuf,EAAAvf,OAAAkV,EAAAqK,EAAArK,WAGA,IAAAwN,EAAA9d,IAAAx/J,GAAA,CACA,GAAA+9K,EAAAve,IAAAx/J,GAEA,WADA49K,GAAA9lK,KAAA8iJ,EAGA,IAAA6kB,GAAAt7K,EAAAu7K,gBAAA9kB,EAAAod,YAAAlI,EAAA8O,EAAAf,EAAAuB,EAAAD,EACAvkB,GAAA+kB,cAAiCF,EAEjC,QADoCG,GAAY,KACXxgL,EAAA,EAAAA,EAAAy/K,EAAA1/K,OAAAC,IAAA,CACrC,GAAA+0D,GAAA0qH,EAAAz/K,EACA,IAAA+0D,IAAAn0D,EACA,KACA,IAAAmE,EAAAs1J,OAAA0R,gBAAAh3G,EAAAn0D,GAAA,CACA4/K,EAAAzrH,CACA,QAGA,GAAAyrH,EAAqC,CACrC,GAAAC,GAAA17K,EAAAu1K,iBAAA52K,IAAA88K,EACAC,MAAA1gL,SACAy7J,EAAAuO,aAAA/P,EAAAymB,IAEAjC,EAAA9lK,KAAA8iJ,OAGA2kB,GAAAznK,KAAA8iJ,OAIAmC,GAAA/8J,EAAA8vK,EAA8CxN,YAC9C1H,EAAAI,UAAA,iBAAA4B,GAAA58J,EAAA8vK,EAAAvN,YAIAid,EAAA1nK,KAAA8iJ,GACAmjB,EAAAve,IAAAx/J,IACA49K,EAAA9lK,KAAA8iJ,KAKA4kB,EAAArhL,QAAA,SAAAy8J,GAGA,GAAAklB,GAAAjC,EAAA/6K,IAAA83J,EAAA56J,QACA,IAAA8/K,GAAiCA,EAAA3gL,OAAA,CACjC,GAAAsgL,GAAArmB,EAAA0mB,EACAllB,GAAA+kB,cAAAF,MAMA7B,EAAAz/K,QAAA,SAAAy8J,GACAA,EAAAuO,aACAvO,EAAAuO,aAAAnO,UAAA,iBAAAJ,GAAA/kJ,YAGA+kJ,EAAA/kJ,WAMA,QAA6BzW,GAAA,EAAAA,EAAA++K,EAAAh/K,OAAAC,IAAA,CAC7B,GAA6BY,GAAAm+K,EAAA/+K,GAC7B67B,EAAAj7B,EAAAskK,GAKA,IAJA9uG,GAAAx1D,EAhgHA,aAogHAi7B,MAAAi9I,aAAA,CAEA,GAAA7e,KAIA,IAAAoJ,EAA+Bp7F,KAAE,CACjC,GAAA04G,GAAAtd,EAAA3/J,IAAA9C,EACA+/K,MAAA5gL,QACAk6J,EAAAvhJ,KAAApN,MAAA2uJ,EAAA0mB,EAGA,QADoCC,GAAYl/K,KAAA24J,OAAAp3G,MAAAriD,EAAiCwgK,IAAA,GAC5CxrJ,EAAA,EAAAA,EAAAgrK,EAAA7gL,OAAA6V,IAAA,CACrC,GAAAirK,GAAAxd,EAAA3/J,IAAAk9K,EAAAhrK,GACAirK,MAAA9gL,QACAk6J,EAAAvhJ,KAAApN,MAAA2uJ,EAAA4mB,IAIA,GAAAC,GAAA7mB,EAAA36J,OAAA,SAAArC,GAAA,OAAAA,EAAAs/K,WACAuE,GAAA/gL,OACA+lK,GAAApkK,KAAAd,EAAAkgL,GAGAp/K,KAAAskK,iBAAAplK,IAcA,MAVAm+K,GAAAh/K,OAAA,EACAogL,EAAAphL,QAAA,SAAAy8J,GACAz2J,EAAAk1J,QAAAvhJ,KAAA8iJ,GACAA,EAAAG,OAAA,WACAH,EAAA/kJ,SACA,IAAAtP,GAAApC,EAAAk1J,QAAAz6J,QAAAg8J,EACaz2J,GAAAk1J,QAAA9zH,OAAAh/B,EAAA,KAEJq0J,EAAA0O,SAETiW,GAOArD,EAAyB9+K,UAAA2+K,oBAAA,SAAA/D,EAAAh4K,GACzB,GAAyBg8K,IAAA,EACzB/gJ,EAAAj7B,EAAAskK,GASA,OARArpI,MAAAg9I,gBACA+D,GAAA,GACAl7K,KAAA44K,iBAAAla,IAAAx/J,KACAg8K,GAAA,GACAl7K,KAAAo6K,wBAAA1b,IAAAx/J,KACAg8K,GAAA,GACAl7K,KAAAq4K,gBAAA3Z,IAAAx/J,KACAg8K,GAAA,GACAl7K,KAAAo8K,gBAAAlF,GAAA+D,oBAAA/7K,IAAAg8K,GAMAE,EAAA9+K,UAAAi8K,WAAA,SAAAhsJ,GAAAvsB,KAAAy7K,UAAAzkK,KAAAuV,IAKA6uJ,EAAA9+K,UAAA+/K,yBAAA,SAAA9vJ,GAAAvsB,KAAA07K,cAAA1kK,KAAAuV,IASA6uJ,EAAyB9+K,UAAA4hL,oBAAA,SAAAh/K,EAAAmgL,EAAAnI,EAAA7c,EAAAilB,GACzB,GAAA/mB,KACA,IAAA8mB,EAA6B,CAC7B,GAAAE,GAAAv/K,KAAAo6K,wBAAAp4K,IAAA9C,EACAqgL,KACAhnB,EAAAgnB,OAGA,CACA,GAAAhG,GAAAv5K,KAAA44K,iBAAA52K,IAAA9C,EACA,IAAAq6K,EAA+B,CAC/B,GAAAiG,IAAAF,GAtnCA,QAsnCAA,CACA/F,GAAAl8K,QAAA,SAAAy8J,GACAA,EAAA+e,SAEA2G,GAAA1lB,EAAAO,iBAEiB9B,EAAAvhJ,KAAA8iJ,MAajB,OATAod,GAAA7c,KACA9B,IAAA36J,OAAA,SAAAk8J,GACA,QAAAod,MAAApd,EAAAod,gBAEA7c,MAAAP,EAAAO,gBAKA9B,GAQA6iB,EAAA9+K,UAAA2hL,sBAAA,SAAA/G,EAAAlI,EAAA8O,GACA,GAAAz6K,GAAArD,KACyBq6J,EAAA2U,EAAA3U,YACzBqG,EAAAsO,EAAA9vK,QAGyBugL,EAAAzQ,EAAAzN,wBAAA1+J,GAAAq0K,EACzBwI,EAAA1Q,EAAAzN,wBAAA1+J,GAAAw3J,CACA2U,GAAAtN,UAA6BnlK,IAAA,SAAAojL,GAC7B,GAA6BzgL,GAAAygL,EAAAzgL,QACAmgL,EAAAngL,IAAAwhK,EACAnI,EAAAiC,EAAAsjB,EAAA5+K,KAC7BmE,GAAA66K,oBAAAh/K,EAAAmgL,EAAAI,EAAAC,EAAA1Q,EAAAzU,SACAl9J,QAAiC,SAAAy8J,GACjC,GAAA8lB,GAAA9lB,EAAA+lB,eACAD,GAAAtW,eACAsW,EAAAtW,gBAEAxP,EAAA/kJ,UACawjJ,EAAAvhJ,KAAA8iJ,OAKbmC,EAAAyE,EAAAsO,EAAAxN,aAWA4Z,EAAA9+K,UAAAsiL,gBAAA,SAAA1H,EAAAlI,EAAA8O,EAAAf,EAAAuB,EAAAD,GACA,GAAAh7K,GAAArD,KACyBq6J,EAAA2U,EAAA3U,YACzBqG,EAAAsO,EAAA9vK,QAGyB4gL,KACAC,EAAA,GAAAjc,KACAkc,EAAA,GAAAlc,KACImc,EAAAjR,EAAAtN,UAAAnlK,IAAA,SAAAojL,GAC7B,GAAAzgL,GAAAygL,EAAAzgL,OACA6gL,GAAAr3J,IAAAxpB,EAEA,IAAAi7B,GAAAj7B,EAAAskK,GACA,IAAArpI,GAA2BA,EAAAk9I,qBAC3B,UAA2B7e,GAC3B,IAA6B6mB,GAAAngL,IAAAwhK,EAC7B8J,EAAmCjG,IAA4BuZ,EAAA97K,IAAA9C,IAAA83K,IAC/Dz6K,IAAA,SAAAhB,GAAA,MAAAA,GAAAskL,mBACAjiL,OAAA,SAAArC,GAKA,GAAAg+B,GAAA,CACa,SAAAA,EAAAr6B,SAAAq6B,EAAAr6B,cAEgB45J,EAAAwlB,EAAAt8K,IAAA9C,GACA65J,EAAAslB,EAAAr8K,IAAA9C,GACA25J,EAAAH,EAAAr1J,EAAAs1J,OAAAt1J,EAAAkzK,YAAAr3K,EAAAygL,EAAA9mB,UAAAC,EAAAC,GAC7Be,EAAAz2J,EAAAszK,aAAAgJ,EAAA9mB,EAAA2R,EAMA,IAHAmV,EAAAnf,aAAAuc,GACAiD,EAAAt3J,IAAAxpB,GAEAmgL,EAAiC,CACjC,GAAAa,GAAA,GAAAxH,IAAAxB,EAAA7c,EAAAn7J,EACAghL,GAAArB,cAAA/kB,GACAgmB,EAAA9oK,KAAAkpK,GAES,MAAApmB,IAETgmB,GAAAziL,QAAA,SAAAy8J,GACAU,EAAAn3J,EAAA+2K,wBAAuCtgB,EAAA56J,YAAA8X,KAAA8iJ,GAC9BA,EAAAG,OAAA,iBAAAwI,IAAAp/J,EAAA+2K,wBAAAtgB,EAAA56J,QAAA46J,OAETimB,EAAyB1iL,QAAA,SAAA6B,GAAA,MAAAo1D,IAAAp1D,EAnsHzB,iBAosHA,IAAA46J,GAAAxB,EAAA2nB,EAQA,OAPAnmB,GAAAI,UAAA,WACA6lB,EAAA1iL,QAAA,SAAA6B,GAAA,MAAAw1D,IAAAx1D,EAtsHA,kBAusHS48J,EAAA4E,EAAAsO,EAAAvN,YAITue,EAAA3iL,QAAA,SAAA6B,GAAAs7J,EAAAuiB,EAAA79K,MAAA8X,KAAA8iJ,KACAA,GAQAshB,EAAA9+K,UAAAq6K,aAAA,SAAA3H,EAAAnW,EAAA2R,GACA,MAAA3R,GAAAx6J,OAAA,EACA2B,KAAA24J,OAAAtwJ,QAAA2mK,EAAA9vK,QAAA25J,EAAAmW,EAAA3jJ,SAAA2jJ,EAAApjJ,MAAAojJ,EAAApnK,OAAA4iK,GAIA,GAAAhS,KAEC4iB,KAED1C,GAAA,WAMA,QAAAyH,GAAAjJ,EAAA7c,EAAAn7J,GACAc,KAAAk3K,cACAl3K,KAAAq6J,cACAr6J,KAAAd,UACAc,KAAAogL,QAAA,GAAA5nB,IACAx4J,KAAAqgL,qBAAA,EACArgL,KAAAsgL,oBACAtgL,KAAAmoK,YAAA,EACAnoK,KAAA86K,kBAAA,EAmIC,MAjIDpgL,QAAAI,eAAAqlL,EAAA7jL,UAAA,UAIA0F,IAAA,qBAAAhC,KAAAqgL,qBACA59K,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAqlL,EAAA7jL,UAAA,aAIA0F,IAAA,iBAAAhC,MAAAmoK,YACA1lK,YAAA,EACKC,cAAA,IAMLy9K,EAAA7jL,UAAAuiL,cAAA,SAAA/kB,GACA,GAAAz2J,GAAArD,IACAA,MAAAqgL,sBAEArgL,KAAAogL,QAAAtmB,EACAp/J,OAAAusB,KAAAjnB,KAAAsgL,kBAAAjjL,QAAA,SAAA86K,GACS90K,EAAAi9K,iBAAAnI,GAAA96K,QAAA,SAAAkvB,GAAA,MAAAstI,GAAAC,EAAAqe,MAAAt1K,GAAA0pB,OAETvsB,KAAAsgL,oBACAtgL,KAAAqgL,qBAAA,IAKAF,EAAA7jL,UAAAujL,cAAA,iBAAA7/K,MAAAogL,SAMAD,EAAA7jL,UAAAikL,YAAA,SAAAxtK,EAAAwZ,GACAiuI,EAAAx6J,KAAAsgL,iBAAAvtK,MAAAiE,KAAAuV,IAMA4zJ,EAAA7jL,UAAA29J,OAAA,SAAAjsI,GACAhuB,KAAA64K,QACA74K,KAAAugL,YAAA,OAAAvyJ,GAEAhuB,KAAAogL,QAAAnmB,OAAAjsI,IAMAmyJ,EAAA7jL,UAAAgwB,QAAA,SAAA0B,GACAhuB,KAAA64K,QACA74K,KAAAugL,YAAA,QAAAvyJ,GAEAhuB,KAAAogL,QAAA9zJ,QAAA0B,IAMAmyJ,EAAA7jL,UAAA49J,UAAA,SAAAlsI,GACAhuB,KAAA64K,QACA74K,KAAAugL,YAAA,UAAAvyJ,GAEAhuB,KAAAogL,QAAAlmB,UAAAlsI,IAKAmyJ,EAAA7jL,UAAA25H,KAAA,WAAAj2H,KAAAogL,QAAAnqD,QAIAkqD,EAAA7jL,UAAAisK,WAAA,kBAAAvoK,KAAA64K,QAAA74K,KAAAogL,QAAA7X,cAIA4X,EAAA7jL,UAAAksK,KAAA,YAAAxoK,KAAA64K,QAAA74K,KAAAogL,QAAA5X,QAIA2X,EAAA7jL,UAAAqsK,MAAA,YAAA3oK,KAAA64K,QAAA74K,KAAAogL,QAAAzX,SAIAwX,EAAA7jL,UAAAssK,QAAA,YAAA5oK,KAAA64K,QAAA74K,KAAAogL,QAAAxX,WAIAuX,EAAA7jL,UAAA2hE,OAAA,WAAAj+D,KAAAogL,QAAAniH,UAIAkiH,EAAA7jL,UAAAyY,QAAA,WACA/U,KAAAmoK,YAAA,EACAnoK,KAAAogL,QAAArrK,WAKAorK,EAAA7jL,UAAAusK,MAAA,YAAA7oK,KAAA64K,QAAA74K,KAAAogL,QAAAvX,SAKAsX,EAAA7jL,UAAAwsK,YAAA,SAAAvtK,GACAyE,KAAA64K,QACA74K,KAAAogL,QAAAtX,YAAAvtK,IAMA4kL,EAAA7jL,UAAAysK,YAAA,iBAAA/oK,MAAA64K,OAAA,EAAA74K,KAAAogL,QAAArX,eACAruK,OAAAI,eAAAqlL,EAAA7jL,UAAA,aAIA0F,IAAA,iBAAAhC,MAAAogL,QAAApmB,WACAv3J,YAAA,EACKC,cAAA,IAEJy9K,KA4HDjc,GAAA,YAuIAsc,GAAA,WAKA,QAAAA,GAAA7nB,EAAAC,GACA,GAAAv1J,GAAArD,IACAA,MAAAygL,iBACAzgL,KAAA67K,kBAAA,SAAqC38K,EAAAqsF,KACrCvrF,KAAA0gL,kBAAA,GAAmCvF,IAAuBxiB,EAAAC,GAC1D54J,KAAA2gL,gBAAA,GAAAtK,IAAA1d,EAAAC,GACA54J,KAAA0gL,kBAAA7E,kBAAA,SAAA38K,EAAAqsF,GAAA,MAAAloF,GAAAw4K,kBAAA38K,EAAAqsF,IA2HC,MAjHDi1F,GAAAlkL,UAAyB6/K,gBAAA,SAAArxH,EAAAosH,EAAAW,EAAA9kK,EAAA4G,GACzB,GAAyBinK,GAAA91H,EAAA,IAAA/3C,EACzBisE,EAAAh/E,KAAAygL,cAAAG,EACA,KAAA5hG,EAAA,CACA,GAA6Bp0C,MAC7Bs1H,EAAAnB,EAAA,EAAAn0H,EACA,IAAAA,EAAAvsC,OACA,SAAAuoB,OAAA,0BAAA7T,EAAA,0DAAA63B,EAAA5G,KAAA,SAEAg7C,GAAAgjF,EAAAjvJ,EAAAmtJ,GACAlgK,KAAAygL,cAAAG,GAAA5hG,EAEAh/E,KAAA0gL,kBAAAvE,gBAAAjF,EAAAnkK,EAAAisE,IAOAwhG,EAAAlkL,UAAAo6K,SAAA,SAAAQ,EAAAW,GACA73K,KAAA0gL,kBAAAhK,SAAAQ,EAAAW,IAOA2I,EAAAlkL,UAAAyY,QAAA,SAAAmiK,EAAA3rF,GACAvrF,KAAA0gL,kBAAA3rK,QAAAmiK,EAAA3rF,IASAi1F,EAAAlkL,UAAAukL,SAAA,SAAA3J,EAAAh4K,EAAAm0D,EAAAj2D,GACA4C,KAAA0gL,kBAAAhG,WAAAxD,EAAAh4K,EAAAm0D,EAAAj2D,IAQAojL,EAAAlkL,UAAAwkL,SAAA,SAAA5J,EAAAh4K,EAAAqsF,GACAvrF,KAAA0gL,kBAAA/G,WAAAzC,EAAAh4K,EAAAqsF,IAOAi1F,EAAAlkL,UAAAykL,kBAAA,SAAA7hL,EAAA8hL,GACAhhL,KAAA0gL,kBAAApE,sBAAAp9K,EAAA8hL,IASAR,EAAAlkL,UAAA2rB,QAAA,SAAAivJ,EAAAh4K,EAAAqsB,EAAAxwB,GACA,QAAAwwB,EAAAoB,OAAA,IACA,GAAAlQ,GAAAk+I,EAA6BpvI,GAAA1Y,EAAA4J,EAAA,GAAAkqJ,EAAAlqJ,EAAA,GAC7B9L,EAAA,CACA3Q,MAAA2gL,gBAAA/lB,QAAA/nJ,EAAA3T,EAAAynK,EAAAh2J,OAGA3Q,MAAA0gL,kBAAA1hG,QAAAk4F,EAAAh4K,EAAAqsB,EAAAxwB,IAWAylL,EAAAlkL,UAAA0P,OAAA,SAAAkrK,EAAAh4K,EAAA8hF,EAAAigG,EAAA10J,GAEA,QAAAy0D,EAAAr0D,OAAA,IACA,GAAAlQ,GAAAk+I,EAAA35E,GAAAnuE,EAAA4J,EAAA,GAAAkqJ,EAAAlqJ,EAAA,EACA,OAAAzc,MAAA2gL,gBAAA30K,OAAA6G,EAAA3T,EAAAynK,EAAAp6I,GAEA,MAAAvsB,MAAA0gL,kBAAA10K,OAAAkrK,EAAAh4K,EAAA8hF,EAAAigG,EAAA10J,IAMAi0J,EAAAlkL,UAAAogL,MAAqC,SAAA9B,OACrC,KAAAA,OAAA,GACA56K,KAAA0gL,kBAAAhE,MAAA9B,IAEAlgL,OAAAI,eAAA0lL,EAAAlkL,UAAA,WAIA0F,IAAA,WACA,MAAAhC,MAAA0gL,kBAAqC,QAC5Bl1J,OAAAxrB,KAAA2gL,gBAAA,UAETl+K,YAAA,EACKC,cAAA,IAKL89K,EAAAlkL,UAAAmgL,kBAAA,iBAAAz8K,MAAA0gL,kBAAAjE,qBACC+D,KASDU,GAAA,WAOA,QAAAA,GAAAhiL,EAAyC25J,EAAAplJ,EAAA+2J,OACzC,KAAAA,SACA,IAAAnnK,GAAArD,IACAA,MAAAd,UACAc,KAAA64J,YACA74J,KAAAyT,UACAzT,KAAAwqK,kBACAxqK,KAAA+nK,cACA/nK,KAAAgoK,eACAhoK,KAAAioK,iBACAjoK,KAAAmhL,cAAA,EACAnhL,KAAAooK,WAAA,EACApoK,KAAAkoK,UAAA,EACAloK,KAAAmoK,YAAA,EACAnoK,KAAAsI,KAAA,EACAtI,KAAAqoK,aAAA,KACAroK,KAAAohL,kBACAphL,KAAAqhL,mBACArhL,KAAA8pB,UAAArW,EAAA,SACAzT,KAAAshL,OAAA7tK,EAAA,SACAzT,KAAAsI,KAAAtI,KAAA8pB,UAAA9pB,KAAAshL,OACA1kB,EAAA58J,KAAA8pB,UAAA9pB,KAAAshL,SACA9W,EAAAntK,QAAA,SAAAy8J,GACA,GAAA3oJ,GAAA2oJ,EAAAunB,eACa3mL,QAAAusB,KAAA9V,GAAA9T,QAAA,SAAAi8J,GAAA,MAAAj2J,GAAA+9K,eAAA9nB,GAAAnoJ,EAAAmoJ,OA6MZ,MAtMD4nB,GAAA5kL,UAAAgsK,UAAA,WACAtoK,KAAAooK,YACApoK,KAAAooK,WAAA,EACApoK,KAAA+nK,WAAA1qK,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAA+nK,gBAMAmZ,EAAA5kL,UAAA25H,KAAA,WACAj2H,KAAA22K,eACA32K,KAAAuhL,6BAKAL,EAAA5kL,UAAAq6K,aAAA,WACA,GAAAtzK,GAAArD,IACA,KAAAA,KAAAmhL,aAAA,CAEAnhL,KAAAmhL,cAAyB,CACzB,IAAyBtoB,GAAA74J,KAAA64J,UAAAt8J,IAAA,SAAA4U,GAAA,MAAAyqJ,GAAAzqJ,GAAA,KACzBqwK,EAAA9mL,OAAAusB,KAAAjnB,KAAAohL,eACA,IAAAI,EAA6BnjL,OAAA,CAC7B,GAA6BojL,GAAA5oB,EAAA,GAC7B6oB,IAOA,IANAF,EAAAnkL,QAAA,SAAAi8J,GACAmoB,EAAAjmL,eAAA89J,IACAooB,EAAA1qK,KAAAsiJ,GAEamoB,EAAAnoB,GAAAj2J,EAAA+9K,eAAA9nB,KAEbooB,EAAiCrjL,OASjC,OARAsjL,GAAA3hL,KAQA1B,EAAA,EAAAA,EAAAu6J,EAAAx6J,OAAAC,KAPA,WACA,GAAA66J,GAAAN,EAAAv6J,EACAojL,GAAArkL,QAAA,SAAAi8J,GACqBH,EAAAG,GAAA4L,GAAAyc,EAAAziL,QAAAo6J,QASrBt5J,KAAAogL,QAAApgL,KAAA4hL,qBAAA5hL,KAAAd,QAAA25J,EAAA74J,KAAAyT,SACAzT,KAAA6hL,eAAAhpB,EAAAx6J,OAAAw6J,IAA6Dx6J,OAAA,MAC7D2B,KAAAogL,QAAAjlL,iBAAA,0BAAAkI,GAAAilK,gBAKA4Y,EAAA5kL,UAAAilL,0BAAA,WAEAvhL,KAAAshL,OACAthL,KAAA8hL,uBAGA9hL,KAAAogL,QAAAzX,SAUAuY,EAAA5kL,UAAAslL,qBAAA,SAAA1iL,EAAA25J,EAAAplJ,GAGA,MAAAvU,GAAA,QAAA25J,EAAAplJ,IAEA/Y,OAAAI,eAAAomL,EAAA5kL,UAAA,aAIA0F,IAAA,iBAAAhC,MAAAogL,SACA39K,YAAA,EACKC,cAAA,IAMLw+K,EAAA5kL,UAAAgwB,QAAA,SAAA0B,GAAAhuB,KAAAgoK,YAAAhxJ,KAAAgX,IAKAkzJ,EAAA5kL,UAAA29J,OAAA,SAAAjsI,GAAAhuB,KAAA+nK,WAAA/wJ,KAAAgX,IAKAkzJ,EAAA5kL,UAAA49J,UAAA,SAAAlsI,GAAAhuB,KAAAioK,cAAAjxJ,KAAAgX,IAIAkzJ,EAAA5kL,UAAAksK,KAAA,WACAxoK,KAAA22K,eACA32K,KAAAuoK,eACAvoK,KAAAgoK,YAAA3qK,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAAgoK,eACAhoK,KAAAkoK,UAAA,GAEAloK,KAAAogL,QAAA5X,QAKA0Y,EAAA5kL,UAAAqsK,MAAA,WACA3oK,KAAAi2H,OACAj2H,KAAAogL,QAAAzX,SAKAuY,EAAA5kL,UAAA2hE,OAAA,WACAj+D,KAAAi2H,OACAj2H,KAAAsoK,YACAtoK,KAAAogL,QAAAniH,UAKAijH,EAAA5kL,UAAAusK,MAAA,WACA7oK,KAAA8hL,uBACA9hL,KAAAmoK,YAAA,EACAnoK,KAAAooK,WAAA,EACApoK,KAAAkoK,UAAA,GAKAgZ,EAAA5kL,UAAAwlL,qBAAA,WACA9hL,KAAAogL,SACApgL,KAAAogL,QAAA2B,UAMAb,EAAA5kL,UAAAssK,QAAA,WACA5oK,KAAA6oK,QACA7oK,KAAAwoK,QAKA0Y,EAAA5kL,UAAAisK,WAAA,iBAAAvoK,MAAAkoK,UAIAgZ,EAAA5kL,UAAAyY,QAAA,WACA/U,KAAAmoK,aACAnoK,KAAAmoK,YAAA,EACAnoK,KAAA8hL,uBACA9hL,KAAAsoK,YACAtoK,KAAAioK,cAAA5qK,QAAA,SAAA2wB,GAAA,MAAAA,OACAhuB,KAAAioK,mBAOAiZ,EAAA5kL,UAAAwsK,YAAA,SAAAvtK,GAAAyE,KAAAogL,QAAAnV,YAAA1vK,EAAAyE,KAAAsI,MAIA44K,EAAA5kL,UAAAysK,YAAA,iBAAA/oK,MAAAogL,QAAAnV,YAAAjrK,KAAAsI,MACA5N,OAAAI,eAAAomL,EAAA5kL,UAAA,aAIA0F,IAAA,iBAAAhC,MAAAshL,OAAAthL,KAAA8pB,WACArnB,YAAA,EACKC,cAAA,IAKLw+K,EAAA5kL,UAAAgtK,cAAA,WACA,GAAAjmK,GAAArD,KACAmR,IACAnR,MAAAuoK,cACA7tK,OAAAusB,KAAAjnB,KAAA6hL,gBAAAxkL,QAAA,SAAAi8J,GACA,UAAAA,IACAnoJ,EAAAmoJ,GACAj2J,EAAA+kK,UAAA/kK,EAAAw+K,eAAAvoB,GAAA4L,GAAA7hK,EAAAnE,QAAAo6J,MAIAt5J,KAAAqhL,gBAAAlwK,GAEC+vK,KAiBDxb,GAAA,WACA,QAAAA,MAuDC,MAhDDA,GAAAppK,UAAA8tK,eAAA,SAAAlrK,EAAA0R,GACA,MAAAw5J,IAAAlrK,EAAA0R,IAOA80J,EAAAppK,UAAA+tK,gBAAA,SAAAb,EAAAC,GAAA,MAAAY,IAAAb,EAAAC,IAOA/D,EAAAppK,UAAAilD,MAAA,SAAAriD,EAAA0R,EAAAqmJ,GACA,MAAAqT,IAAAprK,EAAA0R,EAAAqmJ,IAQAyO,EAAAppK,UAAAinK,aAAA,SAAArkK,EAAAo6J,EAAAmB,GACA,MAAAx6J,QAAA2tD,iBAAA1uD,GAAAo6J,IAWAoM,EAAAppK,UAAA+L,QAAyC,SAAAnJ,EAAsB25J,EAAAxtI,EAAAO,EAAAhkB,EAAA4iK,OACtC,KAAzBA,IAAyBA,KACzB,IAAyBwX,GAAA,GAAAp2J,EAAqB,kBAC9Cq2J,GAAA52J,WAAAO,QAAAo2J,OAGAp6K,KACAq6K,EAAA,OAAAr6K,EAEA,IAAAs6K,GAAA1X,EAAA5sK,OAAA,SAAAk8J,GAAA,MAAAA,aAAAonB,KACA,WAAAA,IAAAhiL,EAAA25J,EAAAopB,EAAAC,IAECxc,KClvJGyc,GAAiB,SAAAvoK,GAMrB,QAAAwoK,GAAAC,EAAA98G,GACA,GAAAliE,GAAAuW,EAAApd,KAAAwD,WACAqD,GAAAi/K,iBAAA,CACA,IAAAC,IACA1vK,GAAA,IACA2vK,cAAAxnL,GAAA,kBAAAuvB,KACApZ,UACAlJ,MAAAmwJ,cAGA,OADA/0J,GAAAo/K,UAAAJ,EAAAK,eAAAn9G,EAAAz5D,KAAAy2K,GACAl/K,EAaE,MA5BFukK,IAAA,EAAAwa,EAAAxoK,GAqBAwoK,EAAyB9lL,UAAA2sJ,MAAA,SAAAmP,GACzB,GAAAvlJ,GAAA7S,KAAAsiL,iBAAAzhK,UACA7gB,MAAAsiL,kBACA,IAAAjJ,GAAAh9K,MAAAo/F,QAAA28D,GAAAP,EAAAO,IAEA,OADAiN,IAAmBrlK,KAAAyiL,UAAA,KAAA5vK,EAAA,YAAuBwmK,IAC1C,GAAAsJ,IAAA9vK,EAAA7S,KAAAyiL,YAEEL,GACFva,GACAsa,IAAwB3xK,aACxBC,KAAAzV,GAAA,aAKAmnL,GAAY/wK,eAAmB,mBAC1BX,KAAAzV,GAAgC,mBACnCyV,SAAA5N,GAAA2N,aAAAC,KAAAzV,GAAA,OAAA2V,MAAAg3J,GAAA,OAEF,IAAIgb,IAAiB,SAAA/oK,GAMrB,QAAAgpK,GAAA13J,EAAAu3J,GACA,GAAAp/K,GAAAuW,EAAApd,KAAAwD,WAGA,OAFAqD,GAAA6nB,MACA7nB,EAAAo/K,YACAp/K,EAUE,MAnBFukK,IAAA,EAAAgb,EAAAhpK,GAgBAgpK,EAAAtmL,UAAAwc,OAAA,SAAA5Z,EAAAuU,GACA,UAAAovK,IAAA7iL,KAAAkrB,IAAAhsB,EAAAuU,MAAAzT,KAAAyiL,YAEEG,GACF9a,IACA+a,GAAA,WAOA,QAAAA,GAAAhwK,EAAA3T,EAAAuU,EAAAgvK,GACAziL,KAAA6S,KACA7S,KAAAd,UACAc,KAAAyiL,YACAziL,KAAAqoK,aAAA,KACAroK,KAAAkoK,UAAA,EACAloK,KAAAg6J,UAAA,EACAh6J,KAAA8iL,SAAA,SAAArvK,GAiFC,MA1EDovK,GAAAvmL,UAAAymL,QAAA,SAAA/hG,EAAAz0D,GACA,MAAAvsB,MAAAyiL,UAAAz2K,OAAAhM,KAAAd,QAAA,KAAAc,KAAA6S,GAAA,IAAAmuE,EAAAz0D,IAOAs2J,EAAAvmL,UAAAwmL,SAAA,SAAAloB,GAEA,OADAjqJ,MACAsoB,EAAA,EAAAA,EAAApvB,UAAAxL,OAAA46B,IACAtoB,EAAAsoB,EAAA,GAAApvB,UAAAovB,EAEA,OAAAosI,IAAArlK,KAAAyiL,UAAAziL,KAAAd,QAAAc,KAAA6S,GAAA+nJ,EAAAjqJ,IAMAkyK,EAAAvmL,UAAA29J,OAAA,SAAAjsI,GAAAhuB,KAAA+iL,QAAA,OAAA/0J,IAKA60J,EAAAvmL,UAAAgwB,QAAA,SAAA0B,GAAAhuB,KAAA+iL,QAAA,QAAA/0J,IAKA60J,EAAAvmL,UAAA49J,UAAA,SAAAlsI,GAAAhuB,KAAA+iL,QAAA,UAAA/0J,IAIA60J,EAAAvmL,UAAA25H,KAAA,WAAAj2H,KAAA8iL,SAAA,SAIAD,EAAAvmL,UAAAisK,WAAA,iBAAAvoK,MAAAkoK,UAIA2a,EAAAvmL,UAAAksK,KAAA,WACAxoK,KAAA8iL,SAAA,QACA9iL,KAAAkoK,UAAA,GAKA2a,EAAAvmL,UAAAqsK,MAAA,WAAA3oK,KAAA8iL,SAAA,UAIAD,EAAAvmL,UAAAssK,QAAA,WAAA5oK,KAAA8iL,SAAA,YAIAD,EAAAvmL,UAAA2hE,OAAA,WAAAj+D,KAAA8iL,SAAA,WAIAD,EAAAvmL,UAAAyY,QAAA,WAAA/U,KAAA8iL,SAAA,YAIAD,EAAAvmL,UAAAusK,MAAA,WAAA7oK,KAAA8iL,SAAA,UAKAD,EAAAvmL,UAAAwsK,YAAA,SAAAvtK,GAAAyE,KAAA8iL,SAAA,cAAAvnL,IAIAsnL,EAAAvmL,UAAAysK,YAAA,qBACC8Z,KAsBD9c,GAAA,WAMA,QAAAA,GAAAid,EAAA3e,EAAA4e,GACAjjL,KAAAgjL,WACAhjL,KAAAqkK,SACArkK,KAAAijL,QACAjjL,KAAAkjL,WAAA,EACAljL,KAAAmjL,aAAA,EACAnjL,KAAAojL,6BACApjL,KAAAqjL,eAAA,GAAA3oB,KACA16J,KAAAsjL,cAAA,EACAjf,EAAAwX,kBAAA,SAAA38K,EAAA8jL,GAKAA,KAAAjmL,WAAAmC,IACA8jL,EAAAhmL,YAAAkC,EAAAnC,WAAAmC,IA+FC,MAtFD6mK,GAAAzpK,UAAAomL,eAAA,SAAA7K,EAAApnK,GACA,GAAApN,GAAArD,KAIAgjL,EAAAhjL,KAAAgjL,SAAAN,eAAA7K,EAAApnK,EACA,MAAAonK,GAA6BpnK,KAAAxI,MAAAwI,EAAAxI,KAAA,YAC7B,GAAA9I,GAAAa,KAAAqjL,eAAArhL,IAAAghL,EAMA,OALA7jL,KACAA,EAAA,GAAAokL,IAPA,GAOAP,EAAAhjL,KAAAqkK,QAEArkK,KAAAqjL,eAAA1gL,IAAAqgL,EAAA7jL,IAEAA,EAEA,GAAyB2rD,GAAAr6C,EAAAoC,GACzBqkK,EAAAzmK,EAAAoC,GAAA,IAAA7S,KAAAkjL,UAKA,OAJAljL,MAAAkjL,aACAljL,KAAAqkK,OAAAqS,SAAyBQ,EAAAW,GACzBpnK,EAAsDxI,KAAA,UACnC5K,QAAA,SAAA2hF,GAAiB,MAAA37E,GAAAghK,OAAA8X,gBAAArxH,EAAAosH,EAAAW,EAAA74F,EAAAjsE,KAAAisE,KACpC,GAAAwkG,IAAAxjL,KAAAk3K,EAAA8L,EAAAhjL,KAAAqkK,SAKA0B,EAAAzpK,UAAA4uH,MAAA,WACAlrH,KAAAsjL,gBACAtjL,KAAAgjL,SAAA93D,OACAlrH,KAAAgjL,SAAA93D,SAMA66C,EAAAzpK,UAAAmnL,mBAAA,WACA,GAAApgL,GAAArD,IACA0jL,MAAAC,QAAAtrB,kBAAA,sDAAAh1J,GAAA8/K,kBAQApd,EAAAzpK,UAAAsnL,yBAAA,SAAA5lK,EAAAgQ,EAAA/lB,GACA,GAAA5E,GAAArD,IACA,IAAAge,GAAA,GAAAA,EAAAhe,KAAAmjL,aAEA,WADAnjL,MAAAijL,MAAAx3K,IAAA,iBAAAuiB,GAAA/lB,IAGA,IAAAjI,KAAAojL,0BAAA/kL,QACA69B,QAAAhV,QAAA,MAAAkf,KAAA,WACA/iC,EAAA4/K,MAAAx3K,IAAA,WACApI,EAAA+/K,0BAAA/lL,QAAA,SAAAuvK,IAEqB5+I,EADrB4+I,EAAA,IAAAA,EAAA,MAGiBvpK,EAAA+/K,iCAIjBpjL,KAAAojL,0BAAApsK,MAAAgX,EAAA/lB,KAKA89J,EAAAzpK,UAAA8E,IAAA,WACA,GAAAiC,GAAArD,IACAA,MAAAsjL,gBAGA,GAAAtjL,KAAAsjL,eACAtjL,KAAAijL,MAAA16K,kBAAA,WACAlF,EAAAogL,qBACapgL,EAAAghK,OAAAqY,MAAAr5K,EAAA8/K,gBAGbnjL,KAAAgjL,SAAA5hL,KACApB,KAAAgjL,SAAA5hL,OAMA2kK,EAAAzpK,UAAAmgL,kBAAA,iBAAAz8K,MAAAqkK,OAAAoY,qBACC1W,IAEDA,IAAYv1J,aACZC,KAAAzV,GAAA,aAKA+qK,GAAY30J,eAAgB,WAAG,QAC1BX,KAAOzV,GAAmB,mBAC1ByV,KAAO+vK,KACV/vK,KAAAzV,GAAA,SAEF,IAAAuoL,IAAA,WAMA,QAAAA,GAAArM,EAAA8L,EAAA3e,GACArkK,KAAAk3K,cACAl3K,KAAAgjL,WACAhjL,KAAAqkK,SACArkK,KAAA6jL,YAAA7jL,KAAAgjL,SAAAa,YAAA,SAAA7rK,GAAA,MAAAgrK,GAAAa,YAAA7rK,IAAA,KAoKC,MAlKDtd,QAAAI,eAAAyoL,EAAAjnL,UAAA,QAIA0F,IAAA,iBAAAhC,MAAAgjL,SAAA/6K,MACAxF,YAAA,EACKC,cAAA,IAKL6gL,EAAAjnL,UAAAyY,QAAA,WACA/U,KAAAqkK,OAAAtvJ,QAAA/U,KAAAk3K,YAAAl3K,KAAAgjL,UACAhjL,KAAAgjL,SAAAjuK,WAOAwuK,EAAAjnL,UAAAY,cAAA,SAAA6V,EAAA84D,GACA,MAAA7rE,MAAAgjL,SAAA9lL,cAAA6V,EAAA84D,IAMA03G,EAAAjnL,UAAAwnL,cAAA,SAAA/oL,GAAA,MAAAiF,MAAAgjL,SAAAc,cAAA/oL,IAKAwoL,EAAAjnL,UAAAynL,WAAA,SAAAhpL,GAAA,MAAAiF,MAAAgjL,SAAAe,WAAAhpL,IAMAwoL,EAAAjnL,UAAA6gC,YAAA,SAAAk2B,EAAA2wH,GACAhkL,KAAAgjL,SAAA7lJ,YAAAk2B,EAAA2wH,GACAhkL,KAAAqkK,OAAAwc,SAAA7gL,KAAAk3K,YAAA8M,EAAA3wH,GAAA,IAQAkwH,EAAAjnL,UAAAc,aAAA,SAAAi2D,EAAA2wH,EAAAC,GACAjkL,KAAAgjL,SAAA5lL,aAAAi2D,EAAA2wH,EAAAC,GACAjkL,KAAAqkK,OAAAwc,SAAA7gL,KAAAk3K,YAAA8M,EAAA3wH,GAAA,IAOAkwH,EAAAjnL,UAAAU,YAAA,SAAAq2D,EAAA6wH,GACAlkL,KAAAqkK,OAAAyc,SAAA9gL,KAAAk3K,YAAAgN,EAAAlkL,KAAAgjL,WAMAO,EAAAjnL,UAAA6nL,kBAAA,SAAAC,GAAA,MAAApkL,MAAAgjL,SAAAmB,kBAAAC,IAKAb,EAAAjnL,UAAAS,WAAA,SAAA+xD,GAAA,MAAA9uD,MAAAgjL,SAAAjmL,WAAA+xD,IAKAy0H,EAAAjnL,UAAA+nL,YAAA,SAAAv1H,GAAA,MAAA9uD,MAAAgjL,SAAAqB,YAAAv1H,IAQAy0H,EAAAjnL,UAAA0gC,aAAA,SAAAj/B,EAAAgV,EAAAhY,EAAA8wE,GACA7rE,KAAAgjL,SAAAhmJ,aAAAj/B,EAAAgV,EAAAhY,EAAA8wE,IAQA03G,EAAAjnL,UAAA0rC,gBAAA,SAAAjqC,EAAAgV,EAAA84D,GACA7rE,KAAAgjL,SAAAh7I,gBAAAjqC,EAAAgV,EAAA84D,IAOA03G,EAAAjnL,UAAAg4D,SAAA,SAAAv2D,EAAAgV,GAAA/S,KAAAgjL,SAAA1uH,SAAAv2D,EAAAgV,IAMAwwK,EAAAjnL,UAAAo4D,YAAA,SAAA32D,EAAAgV,GAAA/S,KAAAgjL,SAAAtuH,YAAA32D,EAAAgV,IAQAwwK,EAAAjnL,UAAAuO,SAAA,SAAA9M,EAAAnB,EAAA7B,EAAAupL,GACAtkL,KAAAgjL,SAAAn4K,SAAA9M,EAAAnB,EAAA7B,EAAAupL,IAQAf,EAAAjnL,UAAAioL,YAAA,SAAAxmL,EAAAnB,EAAA0nL,GACAtkL,KAAAgjL,SAAAuB,YAAAxmL,EAAAnB,EAAA0nL,IAQAf,EAAAjnL,UAAAgL,YAAA,SAAAvJ,EAAAgV,EAAAhY,GAlRA,KAmRAgY,EAAA4Z,OAAA,IAlRA,cAkRA5Z,EACA/S,KAAA+gL,kBAAAhjL,IAAAhD,GAGAiF,KAAAgjL,SAAA17K,YAAAvJ,EAAAgV,EAAAhY,IAQAwoL,EAAAjnL,UAAA24J,SAAA,SAAAnmG,EAAA/zD,GAAAiF,KAAAgjL,SAAA/tB,SAAAnmG,EAAA/zD,IAOAwoL,EAAAjnL,UAAA0P,OAAA,SAAAgN,EAAAgoE,EAAAz0D,GACA,MAAAvsB,MAAAgjL,SAAAh3K,OAAAgN,EAAAgoE,EAAAz0D,IAOAg3J,EAAAjnL,UAAAykL,kBAAA,SAAA7hL,EAAAnE,GACAiF,KAAAqkK,OAAA0c,kBAAA7hL,EAAAnE,IAECwoL,KAEGC,GAAiB,SAAA5pK,GAQrB,QAAA4qK,GAAAC,EAAAvN,EAAA8L,EAAA3e,GACA,GAAAhhK,GAAAuW,EAAApd,KAAAwD,KAAAk3K,EAAA8L,EAAA3e,IAAArkK,IAGA,OAFAqD,GAAAohL,UACAphL,EAAA6zK,cACA7zK,EA+CC,MA1DDukK,IAAA,EAAA4c,EAAA5qK,GAmBA4qK,EAAAloL,UAAAgL,YAAA,SAAAvJ,EAAAgV,EAAAhY,GAvUA,KAwUAgY,EAAA4Z,OAAA,GACA,KAAA5Z,EAAA4Z,OAAA,IAxUA,cAwUA5Z,GACAhY,MAAA8H,KAAA9H,KAAsDA,EACtDiF,KAAA+gL,kBAAAhjL,EAAA,IAGAiC,KAAAqkK,OAAAp8I,QAAAjoB,KAAAk3K,YAAAn5K,EAAAgV,EAAA6/B,OAAA,GAAA73C,GAIAiF,KAAAgjL,SAAA17K,YAAAvJ,EAAAgV,EAAAhY,IASAypL,EAAAloL,UAAA0P,OAAA,SAAAgN,EAAAgoE,EAAAz0D,GACA,GAAAlpB,GAAArD,IACA,IA7VA,KA6VAghF,EAAAr0D,OAA6B,IAC7B,GAA6BztB,GAAAomK,GAAAtsJ,GACAjG,EAAAiuE,EAAApuC,OAAA,GAC7BulI,EAAA,EAMA,OAtWA,KAmWAplK,EAAA4Z,OAAA,KACAlQ,EAAA8oJ,GAAAxyJ,KAAA0J,EAAA,GAAA07J,EAAA17J,EAAA,IAEAzc,KAAAqkK,OAA+Br4J,OAAEhM,KAAAk3K,YAAAh4K,EAAA6T,EAAAolK,EAAA,SAAA7zI,GACjC,GAAAogJ,GAAA,WACarhL,GAAAohL,QAAAb,yBAAAc,EAAAn4J,EAAA+X,KAGb,MAAAtkC,MAAAgjL,SAAAh3K,OAAAgN,EAAAgoE,EAAAz0D,EACA,IAAA9P,IAEC+nK,GACDjB,IAkCIoB,GAAiB,SAAA/qK,GAMrB,QAAAgrK,GAAAjsB,EAAAC,GACA,MAAAh/I,GAAApd,KAAAwD,KAAA24J,EAAAC,IAAA54J,KAEE,MARF4nK,IAAA,EAAAgd,EAAAhrK,GAQEgrK,GACFpE,GACAmE,IAAwBn0K,aACxBC,KAAAzV,GAAA,aAKA2pL,GAA8BvzK,eAAA,mBACzBX,KAAOg6J,KACVh6J,KAAAkjK,KA0BF,IAAAkR,MACK9tB,QAAU8Q,GAAAvQ,SAAyB6qB,KACnCprB,QAAU4c,GAAgBmR,WAAYlf,KAC3C7O,QAAAypB,GAAiBlpB,SAAAqtB,KACjB5tB,QAAA/7J,GAAA,iBACA8pL,WAAehf,GACfif,MAAApd,GAAA,EAAA6Y,GAAAxlL,GAAA,UAOAgqL,KACAjuB,QAAA0T,GAAAqa,WAAArf,KACAj6I,OAAAq5J,IAKAI,KAAAluB,QAAA0T,GAAAnT,SAAAqO,KAAAn6I,OAAAq5J,IAWAK,GAAA,WACA,QAAAA,MAEC,MAAAA,KAEDA,IAAY10K,aACZC,KAAAzV,GAA0B,SAAA2V,OAC1B/e,SAAA+1K,GAAA,GACa7xJ,UAAIkvK,OAMjBE,GAAA9zK,eAAA,oBAIA,IAAA+zK,IAAA,WACA,QAAAA,MAEC,MAAAA,KAEDA,IAAY30K,aACZC,KAAAzV,GAA0B,SAAA2V,OAC1B/e,SAAA+1K,GAAA,GACa7xJ,UAAImvK,OAMjBE,GAAA/zK,eAAA;;;;;;;;;;;;;;;;;;;;;ArP26wCA,G6PxmyCAg0K,I7PwmyCIhoC,GAAaljJ,EAAoB,GAGjCmrL,GAAOnrL,EAAoB,MAI3BmjJ,GAAmBnjJ,EAAoB,GAGvCorL,GAA0BprL,EAAoB,IAI9CijJ,GAAajjJ,EAAoB,GAGjC6e,GAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G8PlnyChEmsK,GAAA,WAAwB,QAACC,MAAA,M9PwnyCrBA,G8PloyCHzsK,I9PmoyCOre,O8PloyCJM,GAAuB,YAC1B4V,SAAM,c9PmoyCKG,M8PjoyCV00K,aAAS,aACTtxJ,MAAA,8DAEDrjB,SAAA,iCACC2O,gBAAAzkB,GAAA,wBAAA0kB,UAEsB8lK,MCTvBE,IACCH,I/PspyCEI,GAAezrL,EAAoB,IAGnC0rL,GAAiC5lL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,GAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IgQ7pyCzGmsK,GAA6D,WhQmqyC1D,QgQnqyCiBC,GAAAC,EAAiBptJ,GAAU34B,KAAA+lL,KAAMA,EAAY/lL,KAAA24B,ShQuqyC9DmtJ,EgQnqyCExpL,UAAU0pL,YAAM,SAAAnsK,EAAAsnD,GhQoqyCd,QgQnqyCLnhE,KAAA+lL,KAAOE,SAERjmL,KAAA+lL,KAAQ7gH,YAAK/D,EAAA1qC,IACb8R,QAAKu8D,KAAO,mDAAoB9kG,KAAA+lL,KAAA7gH,YAAA,MAChCllE,KAAA24B,OAAYgC,UAAC,WACb,GAZW,IAAAle,GAAAC,CAaZ,OhQqqyCGopK,GgQnryCHF,IhQoryCOlrL,OAAOM,GAAqB,cgQnryCvBwe,GAaZ,wCAAAiD,MAAA,KAAAkpK,GAAA,GAAAA,GAAA,IAAAlpK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAhiB,UAADorL,MhQ8qyCII,GAA4BlmL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GiQjsyC/D+sK,IACAze,GAAY,EACZvqB,GAAW,aACVsqB,GAAA,aAOF2e,GAAA,WAA4B,QAACC,MAAA,MjQqsyCzBA,GiQ1syCHH,IjQ2syCOxrL,OiQ1syCPM,GAAU,WACVqX,SAAU8zK,IACTv0L,SAAAu0L,OAE0BE,MjQgtyCxBC,GAAmBpsL,EAAoB,IAGvCqsL,GAAuBrsL,EAAoB,IAG3CssL,GAAkBtsL,EAAoB,IAGtCusL,GAAcvsL,EAAoB,IAGlCqe,GAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF8tK,GAA2B1mL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DutK,GAA2B3mL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IkQ1uyCzEktK,GAAA,SAAYhtK,GlQkvyCzC,QkQ9uyCAitK,GAKIluJ,EAAAne,EAAMV,EAAQQ,EAAYC,GALV,GAAAlX,GAAMuW,EAANpd,KAAcwD,KAAAsa,EAAAC,IAAAva,IASjC,OARWqD,GAAAs1B,OAAGA,EACJt1B,EAAAmX,MACAnX,EAAAyW,aACAzW,EAAAiX,SAEPjX,EAAKkX,YAAaA,EAClBlX,EAAKyjL,gBACLzjL,EAAKyW,WAAWitK,eAAEpsK,UAAA,SAAAqsK,GAAA,MAAA3jL,GAAA4jL,UAAAD,KlQ+uyClB3jL,EAAM4jL,UAAU,GkQ9uyCnB5jL,EATDkV,GAAAsuK,EAAoBjtK,GlQ0vyCpBitK,EkQ/uyCAvqL,UAUC2qL,UAAA,SAAAD,GATG,GAAI3jL,GAAMrD,IlQgvyCVA,MkQ/uyCIknL,KAAI7pL,QAAU,SAAO8pL,EAAA1hL,GACjB0hL,EAAIt0K,IAAMm0K,GACVG,EAAAlzJ,QAAK,EACR5wB,EAAA+jL,gBAAA3hL,GAGF0hL,EAAAlzJ,QAAA,IAENj0B,KAAAwa,IAAAhP,gBlQivyCDq7K,EkQ9uyCQvqL,UAAAwqL,cAAuB,WlQ+uyC3B,GkQ9uyCIO,IACAx0K,GAAA,EACAohB,QAAO,EACP3D,MAAOtwB,KAACua,YAASmE,UAAW,+BAC9B7E,OAAA,oCAEEytK,GACAz0K,GAAA,EACAohB,QAAO,EACP3D,MAAOtwB,KAACua,YAASmE,UAAW,yBAC9B7E,OAAA,8BAEE0tK,GACA10K,GAAA,EACAohB,QAAO,EACP3D,MAAOtwB,KAACua,YAASmE,UAAW,0BAC9B7E,OAAA,+BAEE2tK,GACA30K,GAAA,EACAohB,QAAO,EACP3D,MAAOtwB,KAACua,YAASmE,UAAW,0BAC9B7E,OAAA,8BAEL7Z,MAAAknL,MAAAI,EAAAD,EAAAE,EAAAC,IlQgvyCDX,EkQ7uyCYvqL,UAACmrL,WAAmB,SAAQC,GAChC1nL,KAAAonL,iBAAOM,IAEX1nL,KAAKonL,gBAAaM,ElQ8uyClB1nL,KkQ7uyCIknL,KAAI7pL,QAAS,SAAM8pL,GACpBA,EAAAlzJ,QAAA,IAEHj0B,KAAKknL,KAAAQ,GAAezzJ,QAAM,EAC7Bj0B,KAAA24B,OAAAgC,SAAA36B,KAAAknL,KAAAQ,GAAA7tK,QAhEQ,IAAA4C,GAAAC,EAAWC,EAAAC,EAAAC,CAAS,OlQgzyC7BgqK,GkQtzyCHH,IlQuzyCOhsL,OkQtzyCJM,GAAU,YACV4V,SAAU,eACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OACnBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWinK,GAiEZ,wCAAAlqK,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA8pK,GAAA,GAAAA,GAAA,IAAA9pK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAniB,UAADmsL,IAjEwBxpC,GAAA,GlQ8zyCpBsqC,GAA6BztL,EAAoB,MAGjD0tL,GAAa1tL,EAAoB,GAIjC2tL,GAAkB3tL,EAAoB,IAGtC4tL,GAAoB5tL,EAAoB,IAGxC6tL,GAAc7tL,EAAoB,IAGlColJ,GAAcplJ,EAAoB,IAGlC8tL,GAA+BhoL,MAAQA,KAAKuY,WAAc,WAC1D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFqvK,GAAgCjoL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D8uK,GAAgCloL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,ImQ12yCpEyuK,GAAA,SAAAvuK,GnQq3yClC,QmQn3yCAwuK,GAMIrC,EAAAl5B,EAAUw7B,EAAQ1vJ,EAAWlC,GALnB,GAAApzB,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IAM9B,OALaqD,GAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,YACAhlL,EAAAs1B,OAAGA,EnQo3yCbt1B,EAAMozB,IAAMA,EmQl3yCfpzB,EAPD2kL,GACcI,EAEAxuK,GnQy3yCdwuK,EmQl3yCW9rL,UAAAgsL,eAAW,SAAAhqK,GACrB,MAAA1E,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,oBAbQ,IAAA7B,GAAAC,EAAAC,EAAgBC,EAAAC,CAAS,OnQk4yClCurK,GmQn4yCHH,InQo4yCOvtL,OAAOM,GAAqB,cmQn4yCvBktL,GAcZ,wCAAAzrK,MAAA,KAAAkpK,GAAA,GAAAA,GAAA,IAAAlpK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAgrJ,GAAA,GAAAA,GAAA,IAAAhrJ,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAmrK,GAAA,GAAAA,GAAA,IAAAnrK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,UAAD0tL,IAd6BL,GAAA,GnQ24yCzBQ,GAAeruL,EAAoB,GAGnCsuL,GAA6CxoL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DqvK,GAA6CzoL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IoQl5yCtGgvK,GAGY,WpQy5yCZ,QoQ55yCoBC,GAAuB/tK,EAAAge,EAAAG,EAAA9e,EAAA2uK,GAC/B5oL,KAAA4a,UACA5a,KAAA44B,OACA54B,KAAA+4B,WACA/4B,KAAAia,gBAAoBA,EAAKja,KAAA4oL,KpQ+5yCrCD,EoQ93yCCrsL,UAAA4qB,QAAA,SAAArN,EAAAsnD,GAxBG,GAAI99D,GAAKrD,IpQw5yCT,IoQv5yCY,MAAPA,KAAA44B,KAAOta,UpQy5yCZ,MoQr5yCIte,MAAI4a,QAAA5Y,IAAiChC,KAAA44B,KAAAta,WAAAuqK,QAAc,SAAMC,GAEzD,GAAIC,GAAUnB,GAAiB,WAAAoB,GAAA,KpQq5yC/B,OoQp5yCyB,OAArB3lL,EAAAu1B,KAAOta,UAEPyqK,GACAD,EAAgB3uJ,UACnB4uJ,EAAA1lL,EAAAulL,GAAAN,eAAAjlL,EAAAu1B,KAAAta,YAWFspK,GAAA,WAAAqB,SAAArB,GAAA,WAAAoB,GAAAF,GAAAzlL,EAAA01B,SAAAmwJ,sBAAA7lL,EAAAu1B,KAAAta,UAAA,GAAAjb,EAAA4W,gBAAAqzF,kBAAAjqG,EAAAu1B,KAAAta,WAAAyqK,MAtCE,IAAAtsK,GAAAC,EAAAC,EAAAC,EAAAC,CAwCZ,OpQ44yCG8rK,GoQr7yCHH,IpQs7yCO9tL,OAAOM,GAAqB,coQr7yCvBytL,GAwCZ,wCAAAhsK,MAAA,KAAAorK,GAAA,GAAAA,GAAA,IAAAprK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA6pK,GAAA,GAAAA,GAAA,IAAA7pK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA0pK,GAAA,GAAAA,GAAA,IAAA1pK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAsrK,SAAAtrK,GAAAniB,UAADiuL,MpQq5yCIQ,GAAkCnpL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DgwK,GAAkCppL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqQ77yCtG2vK,IrQk8yCA,gJqQ/7yCA,iCACA,8HACA,wDACA,qHACA,qGACA,uCACF,2BAgBEC,GAAyC,WrQo7yCzC,QqQp7yCmBC,GAAsB/uK,GAJzCxa,KAAAwa,MACAxa,KAAAwpL,uBAAmB,GAAAxuL,IAAe,aAClCgF,KAAAypL,aAAe,GAAAzuL,IAAA,aACfgF,KAAAi0B,QAAA,EAC8Cj0B,KAAA0pL,sBAAA,ErQ27yC9CH,EqQx7yCuBjtL,UAAUgjB,MAAU,SAAQriB,GAC9B,GAAb+C,KAAKi0B,QAAQh3B,EAAA0mC,UAAA7lC,QAAA,eACpBkC,KAAAqf,SrQ07yCDkqK,EqQv7yCuBjtL,UAAM+iB,MAAA,WACP,GAAdrf,KAAKi0B,SACLj0B,KAAKi0B,QAAA,EACLj0B,KAAKypL,aAAIl+K,OACZvL,KAAAwa,IAAAhP,gBAjBI,IAAAiR,EAmBZ,OrQy7yCG8sK,GqQr9yCHJ,IrQs9yCOzuL,OqQr9yCJM,GAAmB,YACnB4V,SAAQ,UACRG,MAAQ6nH,iBAAM,SAAA+wD,UAAA,wBACd74K,SAhBM,85BAiBNK,OAAAk4K,GACA5pK,gBAASzkB,GAA0B,wBAAA0kB,OACnCthB,QAAS,gBAAC,UACZghJ,SAAA,2CACWgqC,GAmBZ,wCAAA3sK,MAAA,KAAAzhB,GAAA,mBAAAA,GAAA,oBAAAyhB,GAAA/hB,UAAD6uL,MrQ+8yCIK,GAAwB1vL,EAAoB,MAG5C2vL,GAAwC7pL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACvG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D0wK,GAAwC9pL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACjF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IsQvgzCtGqwK,GAAwE,WtQ6gzCxE,QsQ7gzCoBC,GAAiBpxJ,EAAAhb,GAAU5d,KAAA44B,OAA8B54B,KAAA4d,WtQihzC7EosK,EsQ9gzCkB1tL,UAAa4qB,QAAI,SAAArN,EAAAsnD,GtQ+gzC/B,GsQ9gzCW,MAAPnhE,KAAA44B,KAAOta,UAId,MAAAte,MAAA4d,SAAAqsK,uBAAAjqL,KAAA44B,KAAAta,WAVQ,IAAA7B,GAAAC,CAWZ,OtQ8gzCGstK,GsQ1hzCHH,ItQ2hzCOnvL,OAAOM,GAAqB,csQ1hzCvB8uL,GAWZ,wCAAArtK,MAAA,KAAA8rK,GAAA,GAAAA,GAAA,IAAA9rK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA4pK,GAAA,GAAAA,GAAA,IAAA5pK,GAAAhiB,UAADsvL,MtQ2hzCIE,GAAUhwL,EAAoB,IAI9BiwL,GAA6BnqL,MAAQA,KAAKuY,WAAc,WACxD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFwxK,GAA8BpqL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DixK,GAA8BrqL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuQxjzCtE4wK,GAAA,SAAA1wK,GvQokzChC,QuQ/jzCA2wK,GAMIxE,EAAAl5B,EAAMw7B,EAAY1vJ,EAASlC,GALjB,GAAApzB,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IAM9B,OALaqD,GAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,YACAhlL,EAAAs1B,OAAGA,EvQgkzCbt1B,EAAMozB,IAAMA,EuQ9jzCfpzB,EAPD8mL,GACcI,EAEA3wK,GvQqkzCd2wK,EuQ/jzCAjuL,UAWCkuL,aAAA,WAVG,GAAInnL,GAACrD,IAUR,OATGA,MAAAyqL,cAAU,GAAAP,IAAC,QvQgkzCXtwK,EuQ9jzCQtd,UAAK0V,KAAYxV,KAAAwD,KAAS,aAAA2a,UAAA,SAAA+xB,GAC1BrpC,EAAKqnL,UAAAh+I,EAETrpC,EAAAonL,cAAW7uG,KAAAlvC,IAGf,SAAY/tB,GAAA,MAActb,GAAAonL,cAAe9rK,UAAA,iBAAAtb,GAAAonL,cAAA/7B,aAC5C1uJ,KAAAyqL,cAAA3zD,eAzBQ,IAAAr6G,GAAAC,EAAAC,EAAcC,EAAAC,CAAS,OvQulzChC0tK,GuQxlzCHH,IvQylzCO1vL,OAAOM,GAAqB,cuQxlzCvBqvL,GA0BZ,wCAAA5tK,MAAA,KAAAkpK,GAAA,GAAAA,GAAA,IAAAlpK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAgrJ,GAAA,GAAAA,GAAA,IAAAhrJ,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAmrK,GAAA,GAAAA,GAAA,IAAAnrK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,UAAD6vL,IA1B2BxC,GAAA,GCb3B4C,GAAA,WAKA,QAACA,MAAA,MxQ2mzCGA,GwQ7mzCWC,WAAA,WACV,gKACJD,KCADE,GAAA,WAIA,QAACC,MAAA,MzQmnzCGA,GyQrnzCWC,aAAiB,SAAahwL,GACxC,QAAA4vL,GAAAC,aAAA5sJ,KAAAjjC,IACJ+vL,KzQ2nzCGvrC,GAAerlJ,EAAoB,IAGnCojJ,GAAgBpjJ,EAAoB,IAGpC8wL,GAAkChrL,MAAQA,KAAKuY,WAAc,WAC7D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFqyK,GAAmCjrL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D8xK,GAAmClrL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC5E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0QjozClEyxK,GAAA,SAAAvxK,G1QkpzCpC,Q0QhnzCHwxK,GAeCC,EAAYxxK,EAAEW,EAAWJ,EAAMC,EAO/BF,EAAAwe,EAAAze,EAAAwwK,EAAApwK,EAAAC,EAAAqe,EAAAhe,EAAAd,GAtBmB,GAAAzW,GAAAuW,EAAWpd,KAAXwD,KAAAsa,EAAwBC,EAAAC,IAAAxa,IAsB3C,OArBQqD,GAAAgoL,YAAqBA,EACrBhoL,EAAAwW,QACAxW,EAAAmX,IAAIA,EAEJnX,EAAA+W,OACA/W,EAAAgX,qBAAmBA,EACnBhX,EAAA8W,MAAMA,EACN9W,EAAAs1B,SACDt1B,EAAA6W,oBAAyBA,EACzB7W,EAAAqnL,YACArnL,EAAAiX,SACAjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,KAAOA,EACPv1B,EAAAuX,QAAUA,EA9ClBvX,EAAAyW,WAAWA,EACXzW,EAAAioL,aAAA,EAEAjoL,EAAAkoL,uBAAoB,EACpBloL,EAAAmoL,cAAe,EAMfnoL,EAAAooL,iBAA2B,EAW3BpoL,EAAAqoL,aAAgB,E1QgpzCTroL,E0Q/ozCNsoL,UAECC,cAAAvoL,EAAAkX,YAAAmE,UAAA,uDAAA0iC,MAAA,WAGF/9C,EAAAwoL,kBAAmB,EAEnBxoL,EAAAyoL,qBAAqB,EAoBpBzoL,EAAKq2B,OAAAm3H,IACLxtJ,EAAK0oL,qBAEL1oL,EAAK2oL,wBACL3oL,EAAK4oL,wB1QynzCC5oL,EAAM6oL,2B0QxnzCZ7oL,EAtBD2nL,GAAoBI,EAEWxxK,G1Q+ozC5BwxK,E0QznzCH9uL,UAiBC+H,SAAA,WAhBA,GAAIhB,GAACrD,IAILA,MAAK8Z,WAAKoB,cAAgB,GACzBlb,KAAK6rL,kBACF7rL,KAAKmsL,gBAACnL,UACThhL,KAAK8rL,qBACF9rL,KAACosL,mBAAoBpL,U1QunzCnBhhL,K0QtnzCLw4H,aAAex4H,KAAA6Z,MAAO+xD,OAAQjxD,UAAA,SAAAixD,GAE9BvoE,EAAIq2B,QAAWkyC,EAAE,KAChBvoE,EAAKq2B,SACLr2B,EAAK+oL,mBAAApL,UACL39K,EAAAgpL,2B1QynzCAjB,E0QpnzCS9uL,UAAAgwL,qBAAA,SAAAprL,GACVA,EACAlB,KAAAmsL,gBAAA/rK,UAIApgB,KAAKmsL,gBAAAnL,UACLhhL,KAAKisL,wBACLjsL,KAAA+rL,uB1QsnzCCX,E0QlnzCS9uL,UAAAiwL,wBAAA,SAAArrL,GACVA,EACAlB,KAAAosL,mBAAAhsK,UAIApgB,KAAKosL,mBAAApL,UACLhhL,KAAKksL,2BACLlsL,KAAAgsL,0B1QonzCCZ,E0Q/mzCG9uL,UAAAkwL,iBAAwB,WAC7BxsL,KAAKisL,wBACLjsL,KAAI0rL,aAAK,EACR1rL,KAAKmsL,gBAAc9tK,QACnBre,KAAKsrL,aAAA,EACLtrL,KAAKmsL,gBAAAnL,UACLhhL,KAAAysL,uB1QknzCCrB,E0Q7mzCG9uL,UAAAowL,2BAA2B,WAChC1sL,KAAKksL,2BACLlsL,KAAI0rL,aAAK,EACR1rL,KAAKosL,mBAAA/tK,QACLre,KAAKurL,uBAAmB,EACxBvrL,KAAKosL,mBAAApL,UACLhhL,KAAAqsL,yB1QgnzCCjB,E0Q7mzCH9uL,UAiCCmwL,mBAAA,WAhCA,GAAIppL,GAAArD,KACH2sL,GACAC,WAAW5sL,KAAKmsL,gBAAgBU,SAAsB,WAAA9xL,MACtD+xL,UAAW9sL,KAACmsL,gBAAgBU,SAAuB,UAAA9xL,MACnDqoF,MAAApjF,KAAAmsL,gBAA0BU,SAAK,MAAA9xL,MAC/BgyL,oBAAA/sL,KAA0B44B,KAAKo0J,iBAC9BC,yBAAAjtL,KAAAmsL,gBAAAU,SAAA,yBAAA9xL,M1Q+mzCIiF,M0Q3mzCJ44B,KAAKs0J,WAAAP,GAAqBhyK,UACpB,SAAY+xB,GAInBrpC,EAAAgX,qBAAW5D,KAAApT,EAAAkX,YAAAmE,UAAA,wCAAArI,SAAA,gBAAAvM,QAAA,O1QwmzCH,S0QvmzCE6U,GAERA,EAAKisB,QACLvnC,EAAA8pL,oBAAAxuK,EAAAisB,QAKDvnC,EAAK8oL,gBAAc/rK,SACnB/c,EAAKioL,aAAI,EAEVjoL,EAAAmX,IAAAhP,gB1QqmzCQ,W0QnmzCPnI,EAAKioL,aAAI,EAETjoL,EAAAmX,IAAAhP,kB1QsmzCA4/K,E0QnmzCH9uL,UA+DC+vL,qBAAA,WA9DA,GAAIhpL,GAAArD,KACHotL,GACAC,QAAMrtL,KAAKosL,mBAAmBS,SAAiB,QAAK9xL,MACpDgiF,KAAA/8E,KAAAosL,mBAAmBS,SAAmB,KAAS9xL,MAC/Cq/B,aAAap6B,KAAAosL,mBAAmBS,SAAwB,aAAA9xL,MAGxDuyL,OAAOttL,KAAMosL,mBAAmBS,SAAU,OAAS9xL,M1QkmzC1CinJ,Q0QjmzCkD,WAAxDhiJ,KAAKosL,mBAAmBS,SAAoB,QAAA9xL,MAC/CiF,KAAAosL,mBAAmBS,SAA4B,QAAA9xL,MAAA,KAC/CwyL,aAAavtL,KAAKosL,mBAAmBS,SAAwB,aAAA9xL,MAC7DyyL,YAAYxtL,KAAAosL,mBAAmBS,SAAuB,YAAA9xL,MACrDomE,MAAAnhE,KAAAosL,mBAAAS,SAAA,MAAA9xL,MAEDiF,MAAK44B,KAAAta,W1QkmzCIte,K0Q/lzCP4a,QAAK6yK,cAAAztL,KAAqB44B,KACzBta,UAAK8uK,GAAsBzyK,UAAA,SAAA+xB,GAK5BrpC,EAAIgX,qBAAoB5D,KAAMpT,EAAMkX,YAAAmE,UAAA,wCAAArI,SAAA,gBAAAvM,QAAA,MACnCzG,EAAKq2B,QAAMr2B,EAAOq2B,OAAK,G1Q2lzCTr2B,EAAM8W,M0Q1lzCnB+E,OAAO7b,EAAKkX,YAAYmE,UAAU,2CAClCS,MAAI9b,EAASkX,YAAUmE,UAAA,mCACvBU,GAAA,QAAa7I,SAAO,kB1Q2lzCC8I,O0QxlzCpB,EAAKC,MAAA,WACLjc,EAAAm3B,8BAAAn3B,EAAAq2B,WAIDva,MAAI9b,EAAOkX,YAAUmE,UAAA,gC1QylzCAU,G0QxlzCpB,MAAK7I,SAAS,kBAAI8I,OAAA,EAAAC,MAAA,WAClBjc,EAAAq2B,OAAAm3H,S1Q6lzCO,S0QvlzCLlyI,GACLtb,EAAIkoL,uBAAc,EAEjB5sK,EAAKisB,QACLvnC,EAAAqqL,uBAAA/uK,EAAAisB,QAMDvnC,EAAK+oL,mBAAmBhsK,SAGzB/c,EAAAmX,IAAAhP,gB1QmlzCW,W0QhlzCVnI,EAAKkoL,uBAAmB,EAExBloL,EAAAmX,IAAAhP,kB1QmlzCD4/K,E0QhlzCH9uL,UAiBCk+B,8BAAA,SAAAd,GAhBA,GAAIr2B,GAAKrD,IACRA,MAAK44B,KAAKta,YACVte,KAAKoa,KAAAwgB,SAAA,G1QilzCI56B,K0Q/kzCPka,oBAAkBwgB,wBAAO16B,KAAA44B,KAAAta,UAAAob,GAAA/e,UAAA,SAAA1S,GACzB5E,EAAK+W,KAAAwgB,SAAO,GAGbv3B,EAAAs1B,OAACgC,UAAK,uBAAA1yB,EAAA4K,M1Q8kzCK,S0Q7kzCF8L,GACR4pB,QAAK5pB,MAAK,8BAAeA,GAIzBtb,EAAA+W,KAAAwgB,SAAA,O1Q8kzCDwwJ,E0Q1kzCH9uL,UAeCyvL,mBAAA,WAdA,GAAI1oL,GAACrD,I1Q2kzCCA,M0Q1kzCLmsL,gBAAkBnsL,KAAKqrL,YAAmC5hK,OAC1DmjK,YAAY5sL,KAAK44B,KAAK+0J,WACtBb,WAAY9sL,KAAK44B,KAACg1J,U1Q2kzCTxqG,O0QzkzCRpjF,KAAK44B,KAAAwqD,MAAAqkF,GAAa,WAAAomB,SAChB7tL,KAAA4rL,iBAEDqB,0BAAAjtL,KAAA44B,KAAAk1J,yB1Q2kzCG9tL,K0QxkzCJmsL,gBAAK4B,cAAwBpzK,UAAA,WAE7BtX,EAAAwoL,iBAAA,aAAAxoL,EAAA8oL,gBAAAx3K,U1Q0kzCAy2K,E0QvkzCH9uL,UAeC0vL,sBAAA,WAdA,GAAI3oL,GAAKrD,IACRA,MAAK4a,kB1QwkzCI5a,K0QvkzCRosL,mBAAoBpsL,KAAOqrL,YAAY5hK,OACvC2Q,cAAcp6B,KAAA4a,QAAQozK,aACtBV,QAASttL,KAAK4a,QAAQA,QAAQuf,QAAUn6B,KAAK4a,QAAQA,QAAQuf,QAAQmzJ,OAAS,MAC9EtrC,SAAOhiJ,KAAK4a,QAAQA,QAAQuf,QAAUn6B,KAAK4a,QAAQA,QAAQuf,QAAQ6nH,QAAY,WAC/EjlE,MAAO/8E,KAAK4a,QAAQA,QAAQuf,QAAUn6B,KAAK4a,QAAQA,QAAQuf,QAAQ4iD,KAAO,MAC1E5b,MAAOnhE,KAAG4a,QAAKA,QAAQuf,QAAen6B,KAAG4a,QAAKA,QAAQuf,QAAQgnC,MAAQ,KACtEksH,SAAArtL,KAAc4a,QAAKA,QAAQuf,QAAQn6B,KAAU4a,QAAKA,QAAQuf,QAAQkzJ,QAAQ,MAC1EE,aAAcvtL,KAAK4a,QAAQA,QAAQuf,QAAUn6B,KAAK4a,QAAQA,QAAQuf,QAAQozJ,aAAc,KACtFC,aAAAxtL,KAAA4a,gBAAAuf,QAAAn6B,KAAA4a,gBAAAuf,QAAAqzJ,YAAA,S1QykzCExtL,K0QvkzCLosL,mBAAK2B,cAA2BpzK,UAAA,WAC9BtX,EAAAyoL,oBAAA,aAAAzoL,EAAA+oL,mBAAAz3K,U1Q0kzCDy2K,E0QvkzCH9uL,UA0BC6wL,oBAAA,SAAAhrH,GAvBA,GAAI9+D,GAAKrD,IACRmiE,KACAniE,KAAKisL,wBACLjsL,KAAAiuL,aAAiB,GAAO5xL,O1QskzCf3B,O0QrkzCRusB,KAAIk7C,GAAK9kE,QAAA,SAAoB4b,GAC5B5V,EAAI6qL,sBAAuB7qL,EAAA6qL,qBAAA1yL,eAAAyd,GAC1B5c,MAAIo/F,QAAKt5B,EAAQlpD,I1QskzCCkpD,E0QrkzCjBlpD,GAAI5b,QAAK,SAAAuX,GAERvR,EAAI6qL,uBACH7qL,EAAK6qL,qBAAqBj1K,G1QqkzCC5V,E0QpkzCxB6qL,qBAAqBj1K,GAAA5V,EAAA6qL,qBAAAj1K,G1QqkzCS,eAAiBrE,E0QlkzCnDvR,EAAA6qL,qBAAAj1K,GAAArE,KAIHvR,EAAA6qL,qBAAAj1K,GAAAkpD,EAAAlpD,GAGC5V,EAAA4qL,aAAAj3K,KAAAmrD,EAAAlpD,Q1QwkzCFmyK,E0QpkzCH9uL,UA0BCoxL,uBAAA,SAAAvrH,GAvBA,GAAI9+D,GAAKrD,IACRmiE,KACAniE,KAAKksL,2BACLlsL,KAAAiuL,aAAiB,GAAO5xL,O1QmkzCf3B,O0QlkzCRusB,KAAIk7C,GAAK9kE,QAAA,SAAA4b,GACR5V,EAAI8qL,yBAAuB9qL,EAAA8qL,wBAAA3yL,eAAAyd,GAC1B5c,MAAIo/F,QAAKt5B,EAAQlpD,I1QmkzCCkpD,E0QlkzCjBlpD,GAAI5b,QAAK,SAAAuX,GAERvR,EAAI8qL,0BACH9qL,EAAK8qL,wBAAwBl1K,G1QkkzCF5V,E0QjkzC1B8qL,wBAAKl1K,G1QkkzCyB5V,EAAM8qL,wBAAwBl1K,GAAO,eAAiBrE,E0Q/jzCtFvR,EAAA8qL,wBAAAl1K,GAAArE,KAIHvR,EAAA8qL,wBAAAl1K,GAAAkpD,EAAAlpD,GAGC5V,EAAA4qL,aAAAj3K,KAAAmrD,EAAAlpD,Q1QqkzCFmyK,E0QhkzCK9uL,UAAAsvL,cAAA,SAAkBzyK,GACzB,MAAA0xK,IAAAE,aAAA5xK,EAAApe,OAAA,MAAA6wL,eAAAvtK,OAAA,K1QkkzCE+sK,E0Q/jzCG9uL,UAAoB2vL,sBAAG,W1QgkzCtBjsL,K0Q/jzCLkuL,sBACA9qG,MAAA,KACAwpG,WAAW,KACXE,UAAA,KACAC,oBAAA,KACCE,yBAAA,O1QkkzCA7B,E0Q9jzCG9uL,UAAA4vL,yBAA0B,W1Q+jzCzBlsL,K0Q9jzCLmuL,yBACAd,QAAM,KACNtwG,KAAA,KACA3iD,aAAa,KACb4nH,QAAA,KACAurC,aAAa,KACbC,YAAW,KACXrsH,MAAM,KACLmsH,OAAA,O1QikzCAlC,E0Q7jzCS9uL,UAAc8xL,sBAAG,WAC5BpuL,KAAAma,MAAA2pI,iBAzWW,IAAArnI,GAAAC,EAAAC,EAAAC,EAAkBC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAixK,EAAAC,CAAS,O1Qy6zCpClD,G0Ql7zCHH,I1Qm7zCOvwL,O0Ql7zCPM,GAAU,YACV4V,SAAU,kBACVE,SAAA5W,EAAiB,MACjBulB,gBAAQzkB,GAAA,wBAAA0kB,O1Qm7zCGvO,Q0Qj7zCV,mEAEA/S,QAAA,6EACW8sL,GA0WZ,wCAAAzuK,MAAA,KAAAgrJ,GAAA,aAAAA,GAAA,cAAAhrJ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA3hB,GAAA,mBAAAA,GAAA,oBAAA2hB,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2iI,GAAA,GAAAA,GAAA,IAAA3iI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyoK,GAAA,sBAAAA,GAAA,uBAAAzoK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAqgI,GAAA,GAAAA,GAAA,IAAArgI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAupK,GAAA,GAAAA,GAAA,IAAAvpK,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAqtK,SAAArtK,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAmgI,GAAA,GAAAA,GAAA,IAAAngI,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAkgI,GAAA,GAAAA,GAAA,IAAAlgI,GAAAziB,OAAA,mBAAA0iB,MAAA,KAAAmrK,GAAA,GAAAA,GAAA,IAAAnrK,GAAA1iB,OAAA,mBAAA2zL,MAAA,KAAAxG,GAAA,GAAAA,GAAA,IAAAwG,GAAA3zL,OAAA,mBAAA4zL,MAAA,KAAA7H,GAAA,GAAAA,GAAA,IAAA6H,GAAA5zL,UAAD0wL,IA1W+B/tC,GAAA,G1Q07zC3BkxC,GAAuCvuL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Do1K,GAAuCxuL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2Q98zCtG+0K,GAAgF,W3Qs9zChF,Q2Qt9zCoBC,GAAuB9zK,EAAAge,EAAA8xJ,GAAU1qL,KAAA4a,UAA2B5a,KAAA44B,OAA8B54B,KAAA0qL,Y3Q29zC9GgE,E2Qx9zCkBpyL,UAAa4qB,QAAI,SAAArN,EAAAsnD,G3Qy9zC/B,G2Qx9zCW,MAAPnhE,KAAA44B,KAAOta,UAKd,MAAAspK,IAAA,WAAAqB,SAAAjpL,KAAA4a,QAAA5Y,IAAAhC,KAAA44B,KAAAta,WAAAte,KAAA0qL,UAAAF,gBAXQ,IAAA/tK,GAAAC,EAAAC,CAYZ,O3Qu9zCG+xK,G2Qp+zCHH,I3Qq+zCO7zL,OAAOM,GAAqB,c2Qp+zCvBwzL,GAYZ,wCAAA/xK,MAAA,KAAAorK,GAAA,GAAAA,GAAA,IAAAprK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA2tK,SAAA3tK,GAAAjiB,UAADg0L,M3Qg+zCIC,GAA8B3uL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dw1K,GAA8B5uL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4Qx9zCtGm1K,GAAoB,W5Q69zCpB,Q4Q79zCoBC,GAAAv0K,GAnBpBva,KAAAua,YAAsBA,EAatBva,KAAA+uL,UAAA,G5Qs+zCI/uL,K4Qr+zCAgvL,sBACA7/D,SAASnvH,KAAKua,YAAYmE,UAAU,0CACpC28E,QAASr7F,KAAKua,YAAYmE,UAAU,yCACtCuwK,QAAAjvL,KAAAua,YAAAmE,UAAA,0C5Qw+zCFowK,E4Qp+zCAxyL,UAgCCkI,YAAA,SAAAC,GA/BG,GAAIpB,GAACrD,I5Qs+zCL,I4Qp+zCAA,KAAKkvL,sBAAgB,GACjBlvL,KAAA0rL,Y5Qm+zCJ,CAEA,G4Ql+zCI1rL,KAAKmvL,YAER,YADGnvL,KAAAkvL,sBAAOlvL,KAAAmvL,YAIX,IAAIvkJ,GAAQ5qC,KAAAovL,WACRxkJ,K5Qk+zCAlwC,O4Qh+zCIusB,KAAI2jB,GAAKjvB,KAAW,SAAS1C,G5Qi+zC7B,M4Qh+zCI5V,GAAKgsL,aAAAhsL,EAAqBgsL,YAAQp2K,IAClC5V,EAAA6rL,sBAAY7rL,EAAAgsL,YAAAp2K,IACf,KAGG5V,EAAK2rL,qBAAqB/1K,KAC1B5V,EAAA6rL,sBAAY7rL,EAAA2rL,qBAAA/1K,IACf,KAMDjZ,KAAKkvL,uBAAkD,KAA1BlvL,KAAKkvL,wBACrClvL,KAAAkvL,sBAAAlvL,KAAAgvL,qBAAA,WAnDT,IAAAvyK,EAsDH,O5Q+9zCGkyK,KACIj0L,OAAOM,GAAgB,SACvB4zL,GAA2B,cAAejrK,S4Qrh0C9CmrK,EAAAxyL,UAAA,oB5Quh0CAqyL,IACIj0L,OAAOM,GAAgB,SACvB4zL,GAA2B,cAAel0L,S4Qvh0C9Co0L,EAAAxyL,UAAA,sB5Qyh0CAqyL,IACIj0L,OAAOM,GAAgB,SACvB4zL,GAA2B,cAAex7K,U4Qzh0C9C07K,EAAAxyL,UAAA,sB5Q2h0CAqyL,IACIj0L,OAAOM,GAAgB,SACvB4zL,GAA2B,cAAel0L,S4Q3h0C9Co0L,EAAAxyL,UAAA,sB5Q6h0CAqyL,IACIj0L,OAAOM,GAAgB,SACvB4zL,GAA2B,cAAejrK,S4Q7h0C9CmrK,EAAAxyL,UAAA,sB5Q+h0CAqyL,IACIj0L,OAAOM,GAAgB,SACvB4zL,GAA2B,cAAejrK,S4Q7i0CrCmrK,EAAaxyL,UAAA,mB5Q+i0CtBwyL,E4Q7j0CHH,I5Q8j0COj0L,O4Q7j0CJM,GAAU,YACV4V,SAAU,iBAWZE,SAAA,klBACW89K,GAwDZ,wCAAAnyK,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,UAADo0L,M5Qwg0CIQ,GAAmCtvL,MAAQA,KAAKuY,WAAc,WAC9D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF22K,GAAoCvvL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Do2K,GAAoCxvL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC7E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6Qzk0CjE+1K,GAAA,SAAA71K,G7Qsl0CrC,Q6Qjl0CA81K,GAWI71K,EAAMC,EAAQG,EASjBF,EAAAI,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAnBW,GAAAnX,GAAKuW,EAAApd,KAAgBwD,KAAAsa,EAAAC,IAAAva,IAmBhC,OAlBWqD,GAAAwW,QACAxW,EAAAyW,aACAzW,EAAA4W,kBACA5W,EAAA0W,YAAmBA,EACnB1W,EAAA8W,QACA9W,EAAA+W,OACD/W,EAAAgX,qBAAqBA,EACrBhX,EAAAiX,SACAjX,EAAAkX,YAAsBA,EAZjClX,EAAAmX,MAeInX,EAAKssL,qBAAqB,E7Qil0C1BtsL,E6Qhl0CIwW,MAAQ5R,KAAI0S,UAAK,SAAS1S,GACtBA,GAAKA,EAAA2S,UACLvX,EAAIqjF,eAAez+E,EAAA2S,QAAA,GACf3S,EAAI2S,QAAC,KACZvX,EAAA2X,qBAAA/S,EAAA2S,QAAA,GAAAK,oBAER5X,EApBDisL,GACYI,EAEA91K,G7Qom0CZ81K,E6Qhl0CoBpzL,UAAA+H,SAAiB,WACpCrE,KAAA8Z,WAAAoB,cAAA,I7Qkl0CDw0K,E6Qhl0CapzL,UAAeszL,iBAAA,WACpB5vL,KAAK6vL,gBACL7vL,KAAK6vL,cAAIC,SAAgB,EAC5B9vL,KAAAwa,IAAAvD,iBAlCI,IAAAwF,GAAAC,EAAAC,EAAAC,EAAmBC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAS,O7Qsn0CrCwyK,G6Q1n0CHH,I7Q2n0CO70L,O6Q1n0CJM,GAAU,YACV4V,SAAU,mBACZE,SAAA5W,EAAA,QACWs1L,GAoCZ,wCAAA/yK,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA+pK,GAAA,GAAAA,GAAA,IAAA/pK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA2pK,GAAA,GAAAA,GAAA,IAAA3pK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2rK,GAAA,GAAAA,GAAA,IAAA3rK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAuoK,GAAA,sBAAAA,GAAA,uBAAAvoK,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAqgI,GAAA,GAAAA,GAAA,IAAArgI,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAogI,GAAA,GAAAA,GAAA,IAAApgI,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAliB,GAAA,mBAAAA,GAAA,oBAAAkiB,GAAAxiB,UAADg1L,IApCgCryC,GAAA,G7Qko0C5B0yC,GAAwC/vL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACvG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D42K,GAAwChwL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACjF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8Qpp0CtGu2K,GAEY,W9Q2p0CZ,Q8Q7p0CoBC,GAAuBt1K,EAAAge,EAAAhb,EAAAgrK,GAC/B5oL,KAAA4a,UACA5a,KAAA44B,OACC54B,KAAA4d,SAAoBA,EAAK5d,KAAA4oL,K9Qgq0CtCsH,E8Qlo0CC5zL,UAAA4qB,QAAA,SAAArN,EAAAsnD,GA1BG,GAAI99D,GAAKrD,I9Q8p0CT,I8Q7p0CW,MAAPA,KAAA44B,KAAOta,U9Q+p0CX,M8Qxp0CIte,MAAI4a,QAAA5Y,IAAiChC,KAAA44B,KAAAta,WAAAuqK,QAAc,SAAMC,GAEzD,GAAIC,GAAUnB,GAAiB,WAAAoB,GAAA,K9Qwp0C/B,O8Qvp0CyB,OAArB3lL,EAAAu1B,KAAOta,UAEPyqK,GACAD,EAAgB3uJ,UACnB4uJ,EAAA1lL,EAAAulL,GAAAN,eAAAjlL,EAAAu1B,KAAAta,YAUFspK,GAAA,WAAAqB,SAAArB,GAAA,WAAAoB,GAAAF,GAAAzlL,EAAAua,SAAA0vF,kBAAAjqG,EAAAu1B,KAAAta,WAAAyqK,MAlCE,IAAAtsK,GAAAC,EAAAC,EAAAC,CAoCZ,O9Qgp0CGszK,G8Qrr0CHH,I9Qsr0COr1L,OAAOM,GAAqB,c8Qrr0CvBg1L,GAoCZ,wCAAAvzK,MAAA,KAAAorK,GAAA,GAAAA,GAAA,IAAAprK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA2pK,GAAA,GAAAA,GAAA,IAAA3pK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAurK,SAAAvrK,GAAAliB,UAADw1L,M9Qyp0CIC,GAAqCnwL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dg3K,GAAqCpwL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC9E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+Qxs0CtG22K,GAAA,WAAgB,QAACC,MAOpB,M/Qus0CGA,G+Qzs0CgBh0L,UAAAi0L,cAAA,SAAA79I,EAAA74B,EAAAsnD,GACf,U/Q2s0CDmvH,E+Qpt0CHH,I/Qqt0COz1L,OAAOM,GAAqB,c+Qpt0CvBo1L,GASZ,yBAADE,M/Qgu0CIE,GAA6BxwL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GgRvt0C/Dq3K,KACEvtI,KAAM,gBAAWxQ,UAAWi1I,GAAwC,EAAAzgK,SAAAtM,QAAA8tK,MACpExlI,KAAM,UAAUxQ,UAAWy4I,GAAEjkK,SAAAtM,QAAqB6zK,MACpDvrI,KAAA,WAAAxQ,UAAAk3I,GAAA,EAAA1iK,SAAAtM,QAAAmvK,MAEC7mI,KAAA,WACAxQ,UAAW+8I,GACXvoK,SAAAtM,QAAgBq1K,IAChBM,eAAAF,MAGCntI,KAAM,WAAIxQ,UAAYk3I,GAA8B,EAAA1iK,SAAAtM,QAAAmvK,MACpD7mI,KAAM,GAAIwtI,WAAY,UAAWC,UAAE,SACpCztI,KAAA,KAAAwtI,WAAA,YAGDE,IACAlI,GACA+F,GACA1E,GACAkG,GACAxJ,GAAA,EACAH,GAAA,EACA+J,GACA9J,GAAc,EACbC,GAAA,GAGDqK,IACAjK,GACAuE,GACAvB,GAAmB,EACnB6F,GACA9H,GAAa,EACbkH,GACCvF,IAmBFwH,GAAA,WAA6B,QAACC,MAAA,MhRot0C1BA,GgRru0CHP,IhRsu0CO91L,OgRru0CPM,GAAS,WhRsu0CEqX,SgRpu0CVq1J,GAAY,EACZ0e,GACA3e,GAAA,oBACApqB,GAAsB,EACtBD,GAAA,EAAAoa,SAAAi5B,KAEDr+K,aAAAy+K,GACAG,gBAEIH,GAEJ/6K,UAAS86K,GAAIjzL,QACb/L,QAASi/L,GACRI,WAAArK,OAC2BmK,MhRyu0CzBG,GAASh3L,EAAoB,IAC7Bi3L,GAA8Bj3L,EAAoB8d,EAAEk5K,IiRvz0C3CE,GAAA,GAAoCp2L,IAAA,+BAChDq2L,IjR4z0CGC,gBiR1z0CD,GAAI,GAAI,MACR,GAAG,GAAK,KACR,IAAK,IAAK,IACV,IAAK,GAAG,IACR,IAAG,IAAK,MACR,EAAE,IAAK,MACP,GAAG,IAAK,MACR,IAAI,EAAG,KACP,GAAG,IAAM,MACT,IAAK,GAAG,MACT,cjRg00CEC,GAAcr3L,EAAoB,KAIlCs3L,GAAiCxxL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GkRp10ChEq4K,GAAA,WAuKA,QAACC,MAAA,MlRor0CGA,GkRx10CmBp1L,UAAAq1L,aAAA,SAAAzwL,EAAAE,EAAAwwL,GACrB,GAAIC,GACAnxK,EAAyBxf,EAAIygB,QACjChB,EAAQvf,EAASugB,OlRy10CX,QkRx10CLiwK,GlRy10CS,IkRv10CR,SACAC,EAAMlxK,EAAAmxK,KAAApxK,EAAA,YACP,MlRw10CS,KkRv10CR,OACAmxK,EAAMlxK,EAAAuB,MAAA,OAAA4vK,KAAApxK,EAAAkB,QAAA,eACP,MlRw10CS,KkRv10CR,QACAiwK,EAAMlxK,EAAAuB,MAAA,OAAA4vK,KAAApxK,EAAAkB,QAAA,gBACP,MlRw10CS,KkRv10CR,OACAiwK,EAAMlxK,EAAAuB,MAAA,OAAA4vK,KAAApxK,EAAAkB,QAAA,eACP,MlRw10CS,SkRt10CRiwK,EAAMlxK,EAAAuB,MAAA,OAAA4vK,KAAApxK,EAAAkB,QAAA,eAIR,MAAA7e,MAAA4J,MAAAklL,EAAA,IlRw10CEH,EkRr10CUp1L,UAAMy1L,gBAAgB,SAAAC,GAClC,MAAAjvL,MAAA4J,MAAAqlL,EAAA,IlRu10CEN,EkRn10CUp1L,UAAO21L,iBAAa,SAAA/wL,EAAAE,EAAA8wL,GlRo10C1B,GkRn10CL9wL,EAAA0wL,KAAO5wL,EAAS,YAEb,cACJ,IAAIixL,GAAwBjxL,EAAIygB,QAAQC,QAAY,OAEhDwwK,EAAOhxL,EAAKugB,QAAQO,MAAE,MlRk10CpB,OkRj10CLkwK,GAAON,KAAAK,EAAO,aAEJ,OACVC,EAAON,KAAAK,EAAQ,aAEZ,QACW,SAAdD,GAAcE,EAAAN,KAAAK,EAAAvwK,QAAA,kBAER,OACP,OlRg10CE8vK,EkR700CUp1L,UAAE+1L,0BAAA,SAAAr3B,GlR800CR,OkR700CLA,GlR800CS,IkR700CR,SACD,MAAW,UlR800CF,KkR700CR,OACD,MAAU,OlR800CD,KkR700CR,MlR+00CQ,IkR700CR,OACD,MAAK,QlR800CI,KkR700CR,QACD,MAAW,UlR800CF,KkR700CR,OACD,YlR800CS,SkR500CT,iBlRg10CC02B,EkR300CEp1L,UAAiBg2L,kBAAA,SAAAC,GlR400Cf,MkR300CLA,GAAS,GACD,EACT,GlR600CEb,EkRz00CEp1L,UAAiBk2L,iBAAA,SAAAD,GlR000Cf,MkRz00CLA,GAAS,GACD,EACT,GlR200CEb,EkRv00CMp1L,UAAAm2L,uBAAsB,SAAAC,EAAAxxL,EAAAE,EAAA8wL,GAC9B,GAAI52L,GAAG61L,KAASuB,ElRw00CV,KkRv00CLp3L,EAAAkzD,UAEE,MAAKkkI,ElRu00CF,IkRt00CLxxL,GAASE,GAAOA,EAAA0wL,KAAA5wL,EAAe,YAE5B,MAAe5F,GAAA6mB,OAAA,cACnB,IAAAwwK,ElRs00CM,QkRr00CLT,GlRs00CS,IkRr00CR,OACD,MAAU52L,GAAA6mB,OAAA,OlRs00CD,KkRr00CR,MACD,MAAW7mB,GAAA6mB,OAAA,KlRs00CF,KkRr00CR,OAGD,MlRm00CawwK,GkRr00CPr3L,EAAAqmB,QAAWO,MAAM,QAAQ0wK,QAAMxxL,EAAO,OAC3CA,EAAQ+gB,OAAO,MAAM7mB,EAAGqmB,QAAQO,MAAO,QAAAC,OAAA,MACnC7mB,EAAO6mB,OAAA,YAAAwwK,ClRs00CH,KkRr00CR,QAGD,MlRm00CaA,GkRr00CPr3L,EAAAqmB,QAAWO,MAAM,SAAQ0wK,QAAMxxL,EAAQ,OAC5CA,EAAQ+gB,OAAO,MAAM7mB,EAAGqmB,QAAQO,MAAO,SAAAC,OAAA,MAC7B7mB,EAAA6mB,OAAA,YAAAwwK,ClRs00CF,KkRr00CR,OAGD,MlRm00CaA,GkRr00CPr3L,EAAAqmB,QAAWO,MAAM,QAAQ0wK,QAAMxxL,EAAO,OAC3CA,EAAQ+gB,OAAO,MAAM7mB,EAAGqmB,QAAQO,MAAO,QAAAC,OAAA,MAC/B7mB,EAAA6mB,OAAO,YAAcwwK,CAC9B,eAAAD,KlRw00CChB,EkRp00CMp1L,UAAAu2L,qBAAc,SAAA1zK,EAAA2zK,EAAArtL,EAAAiuD,GACtB,GAAIp4D,GAAG61L,KAAShyK,ElRq00CV,KkRp00CL7jB,EAAAkzD,UAEG,MAAervC,EACnB,IAAIymI,GAAK5lJ,KAAI+xL,gBAAmBr+H,EAAMr1D,OlRo00ChC,IkRn00CLoH,EAAI,GAAOA,EAAUiuD,EAAIr1D,OAAY,GlRo00C5B,GkRn00CRq1D,EAAOr1D,OAAK,GAAAoH,EAAAmgJ,EAAA,EACb,gBAGC,IAAAlyF,EAAYr1D,OAAA,EACV,WAEJ,OADoB/C,GAAC6mB,OAAA2wK,IlRq00CnBpB,EkRj00CQp1L,UAAYy2L,uBAAM,SAAAC,GAC3BA,EAAMC,MAAM50L,OAAS,IACrB20L,EAAMC,MAAM,GAAK,KACjBD,EAAAC,MAAAD,EAAAC,MAAA50L,OAAA,UlRo00CCqzL,EkR5z0CWp1L,UAAS42L,8BAAgD,SAAAC,GAqBtE,MAnBK,UAAah0K,EAAS1Z,EAAMiuD,GAGhC,GAAI0/H,GAAUrwL,KAAMoL,KAAKnO,KAAOgJ,MAASmqL,GAItCH,EAAQt/H,GAAKA,EAAAr1D,OAAA,EAAA+0L,GAAA1/H,EAAAr1D,OAAA,IlR4z0CP,OkR3z0CR20L,GAAQ,KACRA,EAAA,GAEGjwL,KAAmB4M,MAAKlK,EAAOutL,IAChBjwL,KAAA4M,OAAAlK,EAAkB,GAAAutL,GAEpC7zK,EAED,KlR0z0CCuyK,EkR990CHF,IACY92L,OAAAM,GAuKZ,eAAD02L,MlR8z0CI2B,GAA8BrzL,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dk6K,GAA8BtzL,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtG65K,GAAWvzL,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GAC1D,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,KmRn80C1DE,GACS,WnR080CN,QmR380CiBC,GAAsBn5K,EAAAo5K,EAAA5sJ,GACjChnC,KAAAwa,MACqBxa,KAAA4zL,gBAAwBA,EAzB7C5zL,KAAAgnC,SAIAhnC,KAAA6zL,YAAsB,EAMtB7zL,KAAA8zL,YAAiB,QACjB9zL,KAAA+zL,UAAoB,KACpB/zL,KAAAg0L,UAAA,qBAECh0L,KAAAsxL,cAAc,KACdtxL,KAAAi0L,eAA2C,GAAIj5L,IAAA,aAMjDgF,KAAAk0L,eAAe,GAAYl5L,IAAM,aAKxCgF,KAAAm0L,iBAAA,EnRq90CER,EmRl90CGr3L,UAAe6e,gBAAQ,WAC5Bnb,KAAKm0L,iBAAc,EACnBn0L,KAAAo0L,enRo90CET,EmRj90COr3L,UAAAkI,YAAe,SAAAC,GACvBzE,KAAKm0L,kBACH1vL,EAAmB,eAA6B5B,IAAxB4B,EAAmB,WAA0C,MAAxBA,EAAmB,WnRk90CpEA,EmRj90CJ,eAAY5B,IAAA4B,EAAA,iBAAAA,EAAA,WAChBzE,KAAAq0L,YACLr0L,KAAAo0L,enRo90CAT,EmRh90CGr3L,UAAegI,YAAA,WACpBtE,KAAAs0L,gBnRk90CEX,EmR980COr3L,UAAAg4L,aAAe,WACvBt0L,KAAKu0L,eAELv0L,KAAAu0L,cAAAx/K,WnRg90CC4+K,EmR580CQr3L,UAAS83L,YAAA,WnR680Cb,GmR580CLp0L,KAAAq0L,UnR480CK,CmRx80CNr0L,KAAKs0L,eAGLt0L,KAAIw0L,4BnRy80CE,ImRx80CLC,IACAhkL,KAAc,YAAPzQ,KAAE00L,UAAiB,OAAA10L,KAAA00L,UAC1BjhL,QAAMzT,KAAA20L,anRy80CG1sL,MmRv80CRyrD,OAAQ1zD,KAAE40L,YACVC,SAAA70L,KAAAq0L,WAKFr0L,MAAAu0L,cAAA,GAAAO,OAAA90L,KAAA+0L,cAAA3wL,cAAA4wL,WAAA,MAAAP,KnRw80CEd,EmRr80CGr3L,UAAY24L,kBAAU,SAAAP,GAC3B10L,KAAK00L,UAAWA,EAChB10L,KAAAo0L,enRu80CET,EmRn80CMr3L,UAAKk4L,2BAAW,WnRo80ClB,OmRn80CLx0L,KAAK00L,WnRo80CI,ImRn80CR,OACA10L,KAAKk1L,sBACLl1L,KAAAm1L,sBACD,MnRo80CS,KmRn80CR,WACAn1L,KAAKo1L,0BACLp1L,KAAAq1L,0BACD,MnRo80CS,KmRn80CR,MACAr1L,KAAKs1L,qBACLt1L,KAAAu1L,qBACD,MnRo80CS,KmRn80CR,gBACAv1L,KAAKw1L,+BACLx1L,KAAAu1L,qBAKD,MnRg80CS,KmR/70CR,WACAv1L,KAAKy1L,qBACLz1L,KAAA01L,qBACD,MnRg80CS,SmR970CRntJ,QAAMu8D,KAAA,yDnRm80CN6uF,EmR970COr3L,UAAAq5L,SAAa,SAAAr3L,GnR+70ChB,MmR970CL0B,MAAAsxL,cACUtxL,KAACsxL,cAAOhzL,EAAe0B,KAAGsxL,cAAYjzL,QACjD2B,KAAAgnC,OAAAsqJ,cAAAhzL,EAAA0B,KAAAgnC,OAAAsqJ,cAAAjzL,SnRg80CEs1L,EmR770CGr3L,UAAA64L,qBAA2B,WAChCn1L,KAAAq1L,4BnR+70CE1B,EmR770CHr3L,UAgCC+4L,yBAAA,WA/BA,GAAIhyL,GAAArD,KACA41L,EAAW51L,KAAO61L,enR870ChB71L,MmR570CLq0L,UAAUh3L,QAAQ,SAASmI,EAAOC,GAClC,GAAIqwL,GAASzyL,EAA6BsyL,SAAKlwL,GAE5CswL,EAAQvwL,CAC2B,iBAA/BuwL,GAAQC,kBAAoD,GAA7BD,EAAyBC,iBAAIl4L,QAAA,WAClEg4L,EAAAzyL,EAAA4yL,aAAAF,EAAAC,kBAAAr4L,MAAA,MAEDo4L,EAAUG,gBAAc7yL,EAAS8yL,KAACL,EAAW,IAC7CC,EAAUK,YAAA/yL,EAAoB8yL,KAAGL,EAAO,GACxCC,EAAUM,qBAAmB,OAC7BN,EAAUC,iBAAA3yL,EAAyB8yL,KAAGL,EAAS,GAC/CC,EAAUO,0BAAwBjzL,EAAS8yL,KAACL,EAAY,GAGxDC,EAAGQ,sBAA0BlzL,EAAA8yL,KAAaL,EAAA,QACf,KAA1BC,EAAiB/T,OACjB+T,EAAA/T,OAAAv8K,EAAA,IAEDswL,EAAUS,uBAAgB,WAC1BT,EAAUU,YAAA,EACVV,EAAUW,iBAAmB,EAE7BX,EAAUY,iBAAkB,EAE5BZ,EAAUa,YAAcvzL,EAAKuwL,gBAAgBpB,iBAAiBoD,GAC9DG,EAAUlC,YAAcxwL,EAAKuwL,gBAAYtB,kBAAAsD,GAEvCG,EAAAlC,YAAAxwL,EAAAwwL,enRy70CDF,EmRt70CHr3L,UAYCi5L,oBAAA,WAXA,GAAIlyL,GAACrD,InRu70CCA,MmRr70CLq0L,UAAUh3L,QAAQ,SAASmI,EAAOC,GAClC,GAAIqwL,GAASzyL,EAA4BsyL,SAAKlwL,GAC9CswL,EAAUvwL,CACVuwL,GAAUG,gBAAc7yL,EAAS8yL,KAACL,EAAW,IAC7CC,EAAUK,YAAA/yL,EAAoB8yL,KAAGL,EAAS,GAC1CC,EAAUc,qBAAmBxzL,EAAS8yL,KAACL,EAAW,IAElDC,EAAUe,iBAAgBzzL,EAAA8yL,KAAAL,EAAA,GACxBC,EAAAa,YAAA,KnRu70CDjD,EmRp70CHr3L,UAiBCo5L,oBAAA,WAhBG,GAAGryL,GAAKrD,InRq70CL,ImRp70CQ,MAAPA,KAAAq0L,WAAO,GAAAr0L,KAAAq0L,UAAAh2L,OnRo70CR,CmRj70CA,GAAA03L,GAAU/1L,KAAAq0L,UAAqB,EAC/B0B,GAAUG,mBACVH,EAAUK,eACVL,EAAUc,wBACVd,EAAUe,oBAChBf,EAAKa,aAAkB,GnRq70CjB52L,KmRp70CLq0L,UAAU,GAAGpsL,KAAK5K,QAAQ,SAAQmI,EAAAC,GAClC,GAAAqwL,GAAUzyL,EAAAsyL,SAAgBlwL,EAC1BswL,GAAUG,gBAAgBl/K,KAAC3T,EAAS8yL,KAACL,EAAY,KACjDC,EAAUK,YAAAp/K,KAAA3T,EAAqB8yL,KAAKL,EAAS,IAC7CC,EAAUc,qBAAqB7/K,KAAC3T,EAAS8yL,KAACL,EAAY,KACpDC,EAAAe,iBAAA9/K,KAAA3T,EAAA8yL,KAAAL,EAAA,QnRu70CDnC,EmRn70CEr3L,UAAe44L,oBAA6B,WnRo70C1C,GmRn70CL6B,IACAC,qBAAO,EnRo70CEC,OmRl70CR56G,KAAA,UnRq70CQ66G,QACIC,QmRl70CXlE,OAASmE,aAAE,GnRo70CQC,WmRl70ClBx6L,SAAA,KnRs70CUy6L,QmRl70CXz6L,SAAS,EACRo2L,OAAAmE,aAAA,MnRs70CMG,UmRl70CRl7G,KAAA,SACAm7G,eAAc,EACdC,YAAW,EnRo70CC9qI,WACIr8B,MmRl70Cd,SAAUlV,EAAAnT,GACV,UnRo70CckX,MmRj70Cd,SAAa/D,EAAMnT,GACnB,GAAG0B,GAAQ,IAAM1B,EAAK4sL,SAAOz5K,EAAQs8K,cAAWv4K,MAAW,InRk70CzC,ImRj70CjB/D,EAAOu8K,QAAmC,gBAAAv8K,GAAAu8K,OAAA,CAE1ChuL,GADUyR,EAAIu8K,OACdC,QAAA,OAEAjuL,IAAAyR,EAAAu8K,MAED,OAAAhuL,MnRs70CMkuL,QmRj70CRlqI,SAAU,SACV+F,WAIe,OAAhB1zD,KAAA+zL,YACAgD,EAAgBG,OAAOI,MAAM,GAAGrE,MAAMc,UAAY/zL,KAAK+zL,UACvDgD,EAAgBG,OAAOC,MAAM,GAAClE,MAAAc,UAAiB/zL,KAAA+zL,UAC/CgD,EAAAc,OAAAnkI,OAAAqgI,UAAA/zL,KAAA+zL,WAGD/zL,KAAA20L,aAAAoC,GnRk70CEpD,EmRh70CHr3L,UAuEC84L,wBAAA,WAtEA,GAAI/xL,GAAKrD,InRi70CH,ImRh70CE,MAAPA,KAAA0gB,WAAO,MAAA1gB,KAAA2gB,QnRg70CF,CmR760CN,GAAIixK,GAAY5xL,KAAK4zL,gBAAgB3B,iBAAiBjyL,KAAC0gB,UAAe1gB,KAAC2gB,QAAS3gB,KAASkyL,aACrF4F,EAAU93L,KAAO4zL,gBAAgBjC,aAAC3xL,KAAA0gB,UAA0B1gB,KAAA2gB,QAAWixK,GAEvEkB,EAAA9yL,KAA4C4zL,gBAAAvB,0BAAAT,GAC/CmF,GACAC,qBAAO,EnR+60CEC,OmR760CR56G,KAAA,UnRg70CQk7G,UmR760CRl7G,KAAA,SACAm7G,eAAc,EACdC,YAAW,EnR+60CC9qI,WACIr8B,MmR960Cd,SAASlV,EAAOnT,GnR+60CE,MmR960CjB5E,GAAAsd,QACStd,EAAAuwL,gBAAAnB,uBAAAr3K,EAAA,GAAA28K,OAAA10L,EAAAqd,UAAArd,EAAAsd,QAAAtd,EAAA6uL,aACV,InRg70Cc/yK,MmR560Cd,SAAa/D,EAAKnT,GAClB,UAAAA,EAAA4sL,SAAAz5K,EAAAs8K,cAAAv4K,MAAA,KAAA/D,EAAAu8K,UnRg70CMT,QACIC,QmR360CX1mL,KAAA,OnR660CmB4mL,WmR360ClBx6L,SAAA,GnR860CkByL,MACI0vL,gBmRx60CrBC,OAAMnF,EACNoF,KAAKpF,EACLqF,IAAKrF,EACLsF,MAAMtF,EACN57J,KAAA47J,GAED93B,KAAA42B,EACAyG,aAAAP,KnR460CUR,QmRx60CXz6L,SAAS,EACRo2L,OAAAmE,aAAA,MnR460CMS,QmRx60CRlqI,SAAA,UAGe,OAAhB3tD,KAAAg0L,YACA+C,EAAgBG,OAAOC,MAAM,GAAGE,UAASxmE,MAAK7wH,KAAOg0L,UACrD+C,EAAAG,OAAAI,MAAA,GAAAD,WAAAxmE,MAAA7wH,KAAAg0L,YAEgB,MAAhBh0L,KAAA+zL,YACAgD,EAAgBG,OAAOC,MAAM,GAAGlE,OAAMc,UAAY/zL,KAAK+zL,WACvDgD,EAAgBG,OAAOI,MAAM,GAAGrE,MAAEc,UAAgB/zL,KAAA+zL,UAClDgD,EAAAc,OAAAnkI,QAAAqgI,UAAA/zL,KAAA+zL,YAED/zL,KAAKs4L,eAAevB,GACpB/2L,KAAA20L,aAAAoC,InR260CEpD,EmRz60CHr3L,UAoDCg5L,mBAAA,WAnDA,GAAIjyL,GAAKrD,InR060CH,ImRz60CE,MAAPA,KAAA0gB,WAAO,MAAA1gB,KAAA2gB,QnRy60CF,CmRt60CN,GAAIixK,GAAU5xL,KAAO4zL,gBAAgB3B,iBAACjyL,KAAA0gB,UAA0B1gB,KAAW2gB,QAAA3gB,KAAAkyL,aACvEY,EAAY9yL,KAAK4zL,gBAAgBvB,0BAAqBT,GAGzDmF,GADG/2L,KAAe4zL,gBAA4B7B,gBAAA/xL,KAAA61L,kBAE9CmB,qBAAU,EnRw60CDO,UmRt60CRl7G,KAAA,SACAm7G,eAAc,EACdC,YAAW,EnRw60CC9qI,WACIr8B,MmRv60Cd,SAASlV,EAAOnT,GnRw60CE,MmRv60CjB5E,GAAAsd,QACEtd,EAAAuwL,gBACMnB,uBAACxqL,EAAAyrD,OAAAt4C,EAAA,GAAA3V,OAAApC,EAAAqd,UAAArd,EAAAsd,QAAAtd,EAAA6uL,aACV,MnR260CMgF,QACIC,QmRt60CXoB,WAASv4L,KAAIq0L,UAAS,GAAKpsL,KAAE5J,OAAA,IAAA2B,KAAAw4L,cAC7BnB,WAAOx6L,SAAA,GnRw60CYo2L,OmRt60ClBwF,UAAU,EnRw60CYlsK,SmRv60CrB,SAAYpN,EAAA1Z,EAAgBiuD,GAC5B,MAAArwD,GAAAuwL,gBAAAf,qBAAA1zK,EAAA2zK,EAAArtL,EAAAiuD,OnR260CS4jI,QmRt60CXz6L,SAAS,EACRo2L,OAAAmE,aAAA,MnR060CMS,QmRt60CRlqI,SAAA,WAIF3tD,MAAIs4L,eAAcvB,GACD,MAAhB/2L,KAAA+zL,YACAgD,EAAgBG,OAAOI,MAAM,GAAGrE,MAAMc,UAAY/zL,KAAK+zL,UACvDgD,EAAgBG,OAAOC,MAAM,GAAClE,MAAAc,UAAiB/zL,KAAA+zL,UAC/CgD,EAAAc,OAAAnkI,OAAAqgI,UAAA/zL,KAAA+zL,WAGD/zL,KAAA20L,aAAAoC,InRu60CEpD,EmRp60CEr3L,UAAek5L,6BAA4B,WnRq60CzC,GmRp60CLuB,IACAC,qBAAU,EnRq60CDO,UmRn60CRl7G,KAAA,SACAm7G,eAAc,EACdC,YAAA,GnRs60CQP,QACIC,QmRn60CXoB,WAASv4L,KAAIq0L,UAAS,GAAKpsL,KAAE5J,OAAA,IAAA2B,KAAAw4L,cAC7BnB,WAAOx6L,SAAA,GnRq60CYo2L,OmRn60ClBwF,UAAA,KnRu60CUnB,QmRn60CXz6L,SAAS,EACRo2L,OAAAmE,aAAA,MnRu60CMS,QmRn60CRlqI,SAAA,UAIe,OAAhB3tD,KAAA+zL,YACAgD,EAAgBG,OAAOI,MAAM,GAAGrE,MAAMc,UAAY/zL,KAAK+zL,UACvDgD,EAAgBG,OAAOC,MAAM,GAAClE,MAAAc,UAAiB/zL,KAAA+zL,UAC/CgD,EAAAc,OAAAnkI,OAAAqgI,UAAA/zL,KAAA+zL,WAGD/zL,KAAA20L,aAAAoC,GnRo60CEpD,EmRj60CSr3L,UAAwBm5L,mBAAA,WnRk60C7B,GmRj60CLhiL,IACAujL,qBAAU,EnRk60CDO,UmRh60CRC,eAAc,EACdC,YAAW,EnRk60CC9qI,WACIxtC,MmRj60Cd,SAAW/D,EAAQnT,GACnB,GAAIywL,GAAOzwL,EAAQ4sL,SAAMz5K,EAAWs8K,cAChCiB,EAAKD,EAAQjsJ,MAAM/xC,OAAAusB,KAAAyxK,EAAAjsJ,OAAA,IACnBzwB,EAAA28K,EAAY38K,MACZ48K,EAAaF,EAAUzwL,KAAEmT,EAAA3V,MAE7B,OAAAmzL,GAAA,KADOttK,YAAsBstK,EAAa58K,EAAK,KAAA47K,QAAA,IAC/C,MnRm60CctnK,MmRj60Cd,SAAYlV,EAAOnT,GACnB,MAAAA,GAAAyrD,OAAAt4C,EAAA,GAAA3V,UnRq60CMoyL,QmRh60CRlqI,SAAA,UAIc,OAAf3tD,KAAA+zL,YACAtgL,EAAAokL,OAAAnkI,QAAAqgI,UAAA/zL,KAAA+zL,YAED/zL,KAAA20L,aAAAlhL,GnRk60CEkgL,EmR/50CQr3L,UAASu5L,cAAkB,WnRg60C/B,OAAK71L,KmR/50CNq0L,WAA+B,OAAhBr0L,KAAGq0L,eAA2CxxL,KAAnB7C,KAACq0L,WAA8Br0L,KAAKq0L,UAASh2L,QAAA,IAC3F2B,KAASq0L,UAAA,GAAApsL,MAAA,OAAAjI,KAAAq0L,UAAA,QAAAxxL,KAAA7C,KAAAq0L,UAAA,GACC,EACXr0L,KAAAq0L,UAAA,GAAApsL,KAAA5J,QnRi60CEs1L,EmR950CKr3L,UAAU65L,KAAO,SAAc0C,EAAQC,GAC9C,cAAAD,EAAArtK,OAAAstK,GAAA90J,KAAA,UnRg60CE2vJ,EmR750CIr3L,UAAQ25L,aAAgB,SAAApoK,GAE9B,MADAA,KAAAsa,QAAc,YAAU,IACxBta,EAAAgW,MAAA,KAAAtnC,IAAA+uB,anR+50CEqoK,EmR550COr3L,UAASg8L,eAAoB,SAAMvB,GnR650CtC,GmR550CL/2L,KAAI0gB,WAAa1gB,KAAE2gB,UAAiC,QAAlB3gB,KAAAkyL,aAAkB,OAAAlyL,KAAAkyL,aAAA,CnR850C3C,ImR750CT,GAAA6G,MAAmBpV,EAAG3jL,KAAS0gB,UAAaiB,QAC3CgiK,EAASwU,IAAK,GAAAa,SAAah5L,KAAG2gB,UAC3Bo4K,EAAA/hL,KAAc2sK,EAAGhiK,QAAAw2K,KAAA,GnR850CZ,KmR550CR,GADDc,MACK36L,EAAK,EAAAA,EAAAy6L,EAAa16L,OAAUC,IACd,YAAjB0B,KAAA00L,UnR650CeuE,EmR150CXjiL,KAAWhX,KAAKk5L,wBAAsBH,EAAAz6L,GAAAqjB,QAAAC,QAAA,cAAA5hB,KAAAkyL,YACtC6G,EAASz6L,GAAGoqB,IAAI,EAAG,KAAK9G,QAAM,OAE1Bm3K,EAAKz6L,GAAAoqB,IAAS,EAAI,KAAKxG,MAAA,SACT,OAAtBliB,KAAA00L,WAIFuE,EAAgBjiL,KAAAhX,KAAak5L,wBAAYH,EAAsBz6L,GAAAqjB,QAAWC,QAAE,OAAau3K,cAACJ,EAAAz6L,GAAAoqB,IAAA,OAAA9G,QAAA,OAAAu3K,eAC1FpC,GAAAqC,YAAAC,SAAA,qBAAAJ,iBnRy50CCtF,EmRr50COr3L,UAAY48L,wBAAyB,SAAUI,EAAAC,GACxD,OAAAD,OAAAC,OAAA9oL,KAAA,MAAA+oL,SAAA,WAAAtD,gBAAAl2L,KAAAg0L,WAheQ,IAAAv3K,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAieT,OnRu50CGi2K,KACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cAAe54L,SmRz31CxCi5L,EAAAr3L,UAAA,sBnR231CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cmR731Ca,mBAAA72K,EAAA,mBAAApgB,gBAAAogB,GAAA/hB,SACtCi5L,EAAAr3L,UAAA,oBnR831CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cmRh41CD,mBAAA52K,EAAA,mBAAArgB,gBAAAqgB,GAAAhiB,SACxBi5L,EAAAr3L,UAAA,sBnRi41CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cmRn41CJ,mBAAA32K,MAAA,KAAA40K,GAAA,WAAAA,GAAA,YAAA50K,GAAAjiB,SACrBi5L,EAAAr3L,UAAA,oBnRo41CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cAAe3vK,SmRp41CxCgwK,EAAAr3L,UAAA,sBnRs41CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cmRx41CO,mBAAA12K,OAAA,KAAAu0K,GAAAruK,GAAAquK,GAAAruK,GAAA22K,SAAA78K,GAAAliB,SAChCi5L,EAAAr3L,UAAA,oBnRy41CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cmR341CK,mBAAAz2K,OAAA,KAAAs0K,GAAAruK,GAAAquK,GAAAruK,GAAA22K,SAAA58K,GAAAniB,SAC9Bi5L,EAAAr3L,UAAA,kBnR441CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cmR941CI,mBAAAx2K,MAAA,KAAAy0K,GAAA,iBAAAA,GAAA,kBAAAz0K,GAAApiB,SAC7Bi5L,EAAAr3L,UAAA,sBnR+41CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cAAelgL,UmRh51CxCugL,EAAAr3L,UAAA,uBnRk51CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cAAe54L,SmRn51CxCi5L,EAAAr3L,UAAA,oBnRq51CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cAAe3vK,SmRt51CxCgwK,EAAAr3L,UAAA,oBnRw51CN+2L,IACI34L,OAAOM,GAAgB,SACvBs4L,GAA2B,cAAej3L,QmRx51CvCs3L,EAAAr3L,UAAA,wBnR051CP+2L,IACI34L,OAAOM,GAAiB,UACxBs4L,GAA2B,cmR551C0H,mBAAAv2K,MAAA,KAAA/hB,GAAA,cAAAA,GAAA,eAAA+hB,GAAAriB,SAClJi5L,EAAAr3L,UAAA,yBnR651CP+2L,IACI34L,OAAOM,GAAiB,UACxBs4L,GAA2B,cmR/51CkD,mBAAAt2K,MAAA,KAAAhiB,GAAA,cAAAA,GAAA,eAAAgiB,GAAAtiB,SAEzCi5L,EAAAr3L,UAAA,yBnR+51CxC+2L,IACI34L,OAAOM,GAAoB,WAAG,UAAYgX,KAAMhX,GmRh61CG,anRi61CnDs4L,GAA2B,cmRj61CmC,mBAAAr2K,MAAA,KAAAjiB,GAAA,YAAAA,GAAA,aAAAiiB,GAAAviB,SAnBzDi5L,EAAcr3L,UAAA,wBnRs71CvBq3L,EmR371CHN,InR471CO34L,OmR371CPM,GAAiB,YACjB4V,SAAU,QACVE,SAAS,0PACRgF,YAAAihJ,QAAAq6B,GAAAsI,SAAArI,IAAAI,MnR671CM8B,GAAQ,EAAG74L,OAAOM,GAAiB,QAAGo2L,KmR571CjCkC,GAmeZ,wCAAAp2K,MAAA,KAAAliB,GAAA,mBAAAA,GAAA,oBAAAkiB,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAs0K,SAAAt0K,GAAAziB,OAAA,mBAAA0iB,MAAA,KAAAm0K,GAAA,kBAAAA,GAAA,mBAAAn0K,GAAA1iB,UAADi5L,MnRi+0CIgG,GAAuC35L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DwgL,GAAuC55L,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGmgL,GAAoC75L,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GACnF,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,KoRz71C1DsG,GACS,WpR+71CN,QoRh81CiBC,GAAsBv/K,EAAAw/K,EAAAhzJ,GACjChnC,KAAAwa,MACqBxa,KAAAg6L,iBAAwBA,EArB7Ch6L,KAAAgnC,SAGAhnC,KAAA6zL,YAAuB,EACvB7zL,KAAA00L,UAAiB,OACjB10L,KAAA+zL,UAAiB,KACjB/zL,KAAAg0L,UAAW,KAGVh0L,KAAA8zL,YAAc,QAEd9zL,KAAAi0L,eAA2C,GAAIj5L,IAAA,aAMjDgF,KAAAk0L,eAAe,GAAYl5L,IAAM,aAKxCgF,KAAAm0L,iBAAA,EpR081CE4F,EoRv81CGz9L,UAAuB6e,gBAAA,WAC5Bnb,KAAKm0L,iBAAc,EACnBn0L,KAAAo0L,epRy81CE2F,EoRt81COz9L,UAAekI,YAAA,SAAAC,GACvBzE,KAAKm0L,kBACH1vL,EAAmB,eAA6B5B,IAAxB4B,EAAmB,WAA0C,MAAxBA,EAAmB,WpRu81CpEA,EoRt81CJ,eAAY5B,IAAA4B,EAAA,iBAAAA,EAAA,WAChBzE,KAAAq0L,YACLr0L,KAAAo0L,epRy81CA2F,EoRr81CiBz9L,UAACgI,YAAA,WACpBtE,KAAAs0L,gBpRu81CEyF,EoRn81COz9L,UAAeg4L,aAAA,WACvBt0L,KAAKu0L,eAELv0L,KAAAu0L,cAAAx/K,WpRq81CCglL,EoRj81CiBz9L,UAAA83L,YAAA,WpRk81Cb,GoRj81CLp0L,KAAAq0L,UpRi81CK,CoR771CNr0L,KAAKs0L,eAGLt0L,KAAIw0L,4BpR871CE,IoR771CLC,IACAhkL,KAAc,YAAPzQ,KAAE00L,UAAiB,OAAA10L,KAAA00L,UAC1BjhL,QAAMzT,KAAA20L,apR871CG1sL,MoR571CRyrD,OAAQ1zD,KAAE40L,YACVC,SAAA70L,KAAAq0L,WAKFr0L,MAAAu0L,cAAA,GAAAO,OAAA90L,KAAA+0L,cAAA3wL,cAAA4wL,WAAA,MAAAP,KpR671CEsF,EoR171Cez9L,UAAU24L,kBAAA,SAAAP,GAC3B10L,KAAK00L,UAAWA,EAChB10L,KAAAo0L,epR471CE2F,EoRx71CWz9L,UAAWk4L,2BAAA,WpRy71ClB,OoRx71CLx0L,KAAK00L,WpRy71CI,IoRx71CR,OACA10L,KAAKk1L,sBACLl1L,KAAAm1L,sBACD,MpRy71CS,KoRx71CR,MACAn1L,KAAKs1L,qBACLt1L,KAAAu1L,qBAED,MpRw71CS,SoRt71CRhtJ,QAAMu8D,KAAA,yDpR271CNi1F,EoRx61CFz9L,UAAA64L,qBAAA,WAZA,GAAI9xL,GAACrD,IpRs71CCA,MoRp71CLq0L,UAAUh3L,QAAQ,SAAOmI,EAAAC,GACzB,GAAIqwL,GAASzyL,EAA6B2jC,OAAKsqJ,cAAA7rL,GAC/CswL,EAAUvwL,CACVuwL,GAAUG,gBAAc7yL,EAAS8yL,KAACL,EAAW,IAC7CC,EAAUK,YAAA/yL,EAAoB8yL,KAAGL,EAAS,GAC1CC,EAAUc,qBAAmBxzL,EAAS8yL,KAACL,EAAW,IAElDC,EAAUe,iBAAgBzzL,EAAA8yL,KAAAL,EAAA,GAC1BC,EAAUa,YAAc,EACtBb,EAAAlC,YAAAxwL,EAAAwwL,epRs71CDkG,EoRv61CFz9L,UAAAi5L,oBAAA,WAXA,GAAIlyL,GAACrD,IpRo71CCA,MoRl71CLq0L,UAAUh3L,QAAQ,SAAOmI,EAAAC,GACzB,GAAIqwL,GAASzyL,EAA4B2jC,OAAKsqJ,cAAA7rL,GAC9CswL,EAAUvwL,CACVuwL,GAAUG,gBAAc7yL,EAAS8yL,KAACL,EAAW,IAC7CC,EAAUK,YAAA/yL,EAAoB8yL,KAAGL,EAAS,GAC1CC,EAAUc,qBAAmBxzL,EAAS8yL,KAACL,EAAW,IAElDC,EAAUe,iBAAgBzzL,EAAA8yL,KAAAL,EAAA,GACxBC,EAAAa,YAAA,KpRo71CDmD,EoRh71CiBz9L,UAA6B44L,oBAAA,WpRi71C1C,GoRh71CL6B,IACAC,qBAAgB,EAChB5+B,WAAO,EpRi71CE6+B,OoR/61CR56G,KAAA,UpRk71CQ66G,QACIC,QACQE,WoR/61ClBx6L,SAAA,GpRk71CkBo2L,OoR/61ClBwF,UAAU,EACVlsK,SAAAvsB,KAAAg6L,iBAAA9G,8BAAA,OpRm71CUoE,QoR/61CXz6L,SAAS,EACRo2L,OAAAmE,aAAA,MpRm71CMG,UoR/61CRl7G,KAAA,SACAm7G,eAAc,EACdC,YAAA,GpRk71CQI,QoR/61CRh7L,SAAA,GAIe,OAAhBmD,KAAA+zL,YACAgD,EAAgBG,OAAOI,MAAM,GAAGrE,MAAMc,UAAY/zL,KAAK+zL,UACvDgD,EAAAG,OAAAC,MAAA,GAAAlE,MAAAc,UAAA/zL,KAAA+zL,WAEgB,MAAhB/zL,KAAAg0L,YACA+C,EAAAG,OAAAC,MAAA,GAAAE,UAAAxmE,MAAA7wH,KAAAg0L,WAGDh0L,KAAA20L,aAAAoC,GpRg71CEgD,EoR761CiBz9L,UAA4Bg5L,mBAAA,WpR861CzC,GoR761CLyB,IACAC,qBAAgB,EAChB5+B,WAAU,EpR861CDm/B,UoR561CRl7G,KAAA,SACAm7G,eAAc,EACdC,YAAW,EpR861CC9qI,WACIr8B,MoR761Cd,SAAUlV,EAAAnT,GACV,YpRi71CMivL,QACIC,QoR561CXoB,QAASv4L,KAAIq0L,UAAS,GAAKpsL,KAAE5J,OAAA,GAC7Bg5L,WAAOx6L,SAAA,GpR861CYo2L,OoR561ClBwF,UAAA,KpRg71CUnB,QoR561CXz6L,SAAS,EACRo2L,OAAAmE,aAAA,MpRg71CMS,QoR561CRh7L,SAAA,GAGFmD,MAAA20L,aAAAoC,GpR+61CEgD,EoR561CiBz9L,UAASu5L,cAAc,WpR661CpC,OAAK71L,KoR561CNq0L,WAA+B,OAAhBr0L,KAAGq0L,eAA2CxxL,KAAnB7C,KAACq0L,WAA8Br0L,KAAKq0L,UAASh2L,QAAA,IAC3F2B,KAASq0L,UAAA,GAAApsL,MAAA,OAAAjI,KAAAq0L,UAAA,QAAAxxL,KAAA7C,KAAAq0L,UAAA,GACC,EACXr0L,KAAAq0L,UAAA,GAAApsL,KAAA5J,QpR861CE07L,EoR361Cez9L,UAAO65L,KAAY,SAAU0C,EAAQC,GACtD,cAAAD,EAAArtK,OAAAstK,GAAA90J,KAAA,UpR661CE+1J,EoR161CYz9L,UAAc25L,aAAE,SAAApoK,GAE9B,MADAA,KAAAsa,QAAc,YAAU,IACxBta,EAAAgW,MAAA,KAAAtnC,IAAA+uB,YAzNQ,IAAA7O,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CA0NT,OpR461CG08K,KACIj/L,OAAOM,GAAgB,SACvB4+L,GAAoC,cAAel/L,SoRvo2CjDq/L,EAAAz9L,UAAA,sBpRyo2CNq9L,IACIj/L,OAAOM,GAAgB,SACvB4+L,GAAoC,coR3o2CI,mBAAAn9K,EAAA,mBAAApgB,gBAAAogB,GAAA/hB,SACtCq/L,EAAAz9L,UAAA,oBpR4o2CNq9L,IACIj/L,OAAOM,GAAgB,SACvB4+L,GAAoC,coR9o2CV,mBAAAl9K,EAAA,mBAAArgB,gBAAAqgB,GAAAhiB,SACxBq/L,EAAAz9L,UAAA,sBpR+o2CNq9L,IACIj/L,OAAOM,GAAgB,SACvB4+L,GAAoC,coRjp2CJ,mBAAAj9K,MAAA,KAAA40K,GAAA,WAAAA,GAAA,YAAA50K,GAAAjiB,SAC9Bq/L,EAAAz9L,UAAA,oBpRkp2CNq9L,IACIj/L,OAAOM,GAAgB,SACvB4+L,GAAoC,cAAel/L,SoRnp2CjDq/L,EAAAz9L,UAAA,oBpRqp2CNq9L,IACIj/L,OAAOM,GAAgB,SACvB4+L,GAAoC,cAAel/L,SoRtp2CjDq/L,EAAAz9L,UAAA,oBpRwp2CNq9L,IACIj/L,OAAOM,GAAgB,SACvB4+L,GAAoC,cAAej2K,SoRvp2ChDo2K,EAAAz9L,UAAA,sBpRyp2CPq9L,IACIj/L,OAAOM,GAAiB,UACxB4+L,GAAoC,coR1p2CwB,mBAAAh9K,MAAA,KAAA5hB,GAAA,cAAAA,GAAA,eAAA4hB,GAAAliB,SACzDq/L,EAAAz9L,UAAA,yBpR2p2CPq9L,IACIj/L,OAAOM,GAAiB,UACxB4+L,GAAoC,coR7p2CyC,mBAAA/8K,MAAA,KAAA7hB,GAAA,cAAAA,GAAA,eAAA6hB,GAAAniB,SAEzCq/L,EAAAz9L,UAAA,yBpR6p2CxCq9L,IACIj/L,OAAOM,GAAoB,WAAG,UAAYgX,KAAMhX,GAAqB,aACrE4+L,GAAoC,coR/p2C0B,mBAAA98K,MAAA,KAAA9hB,GAAA,YAAAA,GAAA,aAAA8hB,GAAApiB,SAfzDq/L,EAAsBz9L,UAAA,wBpRgr2C/By9L,EoRrr2CHJ,IpRsr2COj/L,OoRrr2CPM,GAAU,YACV4V,SAAU,iBACVE,SAAS,mOACRgF,YAAAihJ,QAAAq6B,GAAAsI,SAAArI,IAAAI,MpRur2CMoI,GAAiC,EAAGn/L,OAAOM,GAAiB,QAAGo2L,KoRtr2C1DwI,GA4NZ,wCAAA78K,MAAA,KAAA/hB,GAAA,mBAAAA,GAAA,oBAAA+hB,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAy0K,SAAAz0K,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAs0K,GAAA,kBAAAA,GAAA,mBAAAt0K,GAAAviB,UAADq/L,MpRk+1CIE,GAA0Cj6L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D8gL,GAA0Cl6L,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqRnq2CzGygL,GAA0C,WrRwq2CvC,QqRxq2CiBC,GAAsB5/K,GApBjCxa,KAAAwa,IAAMA,EAIAxa,KAAAogB,QAAO,EAEZpgB,KAAAq6L,QAAA,KAEVr6L,KAAAs6L,aAAsB,GAAMt/L,IAAA,aAC5BgF,KAAAu6L,YAAqB,EACrBv6L,KAAAw6L,WAAU,EACVx6L,KAAAy6L,YAAW,EACXz6L,KAAA06L,aAAsB,EAEtB16L,KAAA26L,YAAsB,EACtB36L,KAAA46L,YAAqB,EACrB56L,KAAA66L,WAAU,EACV76L,KAAA86L,YAAW,EACX96L,KAAA+6L,aAAsB,EAEyB/6L,KAAAg7L,YAAA,ErRwr2C5CZ,EqRrr2CoB99L,UAAGkI,YAAA,SAAAC,GACzBzE,KAAKi7L,oBACLj7L,KAAKk7L,YACLl7L,KAAAwa,IAAAhP,gBrRur2CE4uL,EqRpr2CiB99L,UAAW6+L,wBAAA,SAAA1qL,GAC7BzQ,KAAKo7L,aAAa3qL,IAClBzQ,KAAIo7L,WAAK3qL,EACRzQ,KAAKs6L,cACNt6L,KAAAs6L,aAAA/uL,KAAAvL,KAAAo7L,crRur2CChB,EqRtp2CF99L,UAAA2+L,kBAAA,WA5BA,GAAI53L,GAACrD,IACLA,MAAIq7L,iBACHr7L,KAAKiuC,OrRor2CIjuC,KqRnr2CRiuC,MAAAqtJ,MAAa,SAAAC,GrRor2CD,OqRnr2CXA,GrRor2Ce,IqRnr2Cd,MAED,MADCl4L,GAAAm4L,kBACU,CrRor2CI,KqRnr2Cd,OACAn4L,EAAMk3L,YAAA,CACP,MrRor2Ce,KqRnr2Cd,MACAl3L,EAAMm3L,WAAA,CACP,MrRor2Ce,KqRnr2Cd,OACAn3L,EAAMo3L,YAAA,CACP,MrRor2Ce,KqRnr2Cd,QACAp3L,EAAMq3L,aAAA,CACP,MrRor2Ce,KqRnr2Cd,OACAr3L,EAAMs3L,YAAA,EAKN,YrRur2CFP,EqRtp2CF99L,UAAA4+L,UAAA,WA5BA,GAAI73L,GAACrD,IACLA,MAAIy7L,mBACHz7L,KAAK07L,erRor2CI17L,KqRnr2CR07L,cAAaJ,MAAA,SAAAC,GrRor2CD,OqRnr2CXA,GrRor2Ce,IqRnr2Cd,MAED,MADCl4L,GAAAs4L,qBACU,CrRor2CI,KqRnr2Cd,OACAt4L,EAAMu3L,YAAA,CACP,MrRor2Ce,KqRnr2Cd,MACAv3L,EAAMw3L,WAAA,CACP,MrRor2Ce,KqRnr2Cd,OACAx3L,EAAMy3L,YAAA,CACP,MrRor2Ce,KqRnr2Cd,QACAz3L,EAAM03L,aAAA,CACP,MrRor2Ce,KqRnr2Cd,OACA13L,EAAM23L,YAAA,EAKN,YrRur2CFZ,EqRlr2CgB99L,UAAM++L,eAAA,WACxBr7L,KAAKu6L,YAAY,EACjBv6L,KAAKw6L,WAAU,EACfx6L,KAAKy6L,YAAW,EAChBz6L,KAAK06L,aAAa,EAClB16L,KAAA26L,YAAA,GrRor2CEP,EqRjr2CoB99L,UAACk/L,eAAA,WACvBx7L,KAAKu6L,YAAY,EACjBv6L,KAAKw6L,WAAU,EACfx6L,KAAKy6L,YAAW,EAChBz6L,KAAK06L,aAAa,EAClB16L,KAAA26L,YAAA,GrRmr2CEP,EqRhr2CgB99L,UAAMq/L,kBAAA,WACxB37L,KAAK46L,YAAY,EACjB56L,KAAK66L,WAAU,EACf76L,KAAK86L,YAAW,EAChB96L,KAAK+6L,aAAa,EAClB/6L,KAAAg7L,YAAA,GrRkr2CEZ,EqR/q2CoB99L,UAACm/L,iBAAA,WACvBz7L,KAAK46L,YAAY,EACjB56L,KAAK66L,WAAU,EACf76L,KAAK86L,YAAW,EAChB96L,KAAK+6L,aAAa,EAClB/6L,KAAAg7L,YAAA,EAjIQ,IAAAv+K,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAmIT,OrRgr2CGm9K,KACIv/L,OAAOM,GAAgB,SACvBk/L,GAAuC,cqRrz2Cd9mL,UACvBgnL,EAAA99L,UAAA,iBrRsz2CN29L,IACIv/L,OAAOM,GAAgB,SACvBk/L,GAAuC,cqRxz2CP,mBAAAz9K,EAAA,mBAAApgB,gBAAAogB,GAAA/hB,SAC9B0/L,EAAA99L,UAAA,gBrRyz2CN29L,IACIv/L,OAAOM,GAAgB,SACvBk/L,GAAuC,cqR3z2CC,mBAAAx9K,EAAA,mBAAArgB,gBAAAqgB,GAAAhiB,SACtC0/L,EAAA99L,UAAA,wBrR4z2CN29L,IACIv/L,OAAOM,GAAgB,SACvBk/L,GAAuC,cqR9z2CT,mBAAAv9K,MAAA,KAAA40K,GAAA,iBAAAA,GAAA,kBAAA50K,GAAAjiB,SACtB0/L,EAAA99L,UAAA,qBrR+z2CZ29L,IACIv/L,OAAOM,GAAgB,OAAG,QAC1Bk/L,GAAuC,cqRj02CH,mBAAAt9K,MAAA,KAAA20K,GAAA,aAAAA,GAAA,cAAA30K,GAAAliB,SAEjC0/L,EAAA99L,UAAA,kBrRi02CP29L,IACIv/L,OAAOM,GAAiB,UACxBk/L,GAAuC,cqRn02C8C,mBAAAr9K,MAAA,KAAA7hB,GAAA,cAAAA,GAAA,eAAA6hB,GAAAniB,SARhF0/L,EAAyB99L,UAAA,uBrR602ClC89L,EqR/22CHH,IrRg32COv/L,OqR/22CPM,GAAU,YACV4V,SAAU,oBA4BVE,SAAQ,ojDrRq12CGK,QqRn12CV,yDAEW+oL,GAqIZ,wCAAAp9K,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAAD0/L,MrRut2CIwB,GAAyC57L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DyiL,GAAyC77L,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGoiL,GAAsC97L,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GACrF,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,KsR912C1DuI,GAC2C,WtRo22CxC,QsRr22CiBC,GAAsBxhL,EAAAw/K,EAAAhzJ,GACjChnC,KAAAwa,MACqBxa,KAAAg6L,iBAAwBA,EApB7Ch6L,KAAAgnC,SAGAhnC,KAAA6zL,YAAiB,EACjB7zL,KAAA+zL,UAAiB,KACjB/zL,KAAAg0L,UAAW,KAGVh0L,KAAA8zL,YAAc,QAEd9zL,KAAAi0L,eAA2C,GAAIj5L,IAAA,aAMjDgF,KAAAk0L,eAAe,GAAYl5L,IAAM,aAKxCgF,KAAAm0L,iBAAA,EtR822CE6H,EsR322CkB1/L,UAAQ6e,gBAAA,WAC5Bnb,KAAKm0L,iBAAc,EACnBn0L,KAAAo0L,etR622CE4H,EsR122CO1/L,UAAekI,YAAA,SAAAC,GACvBzE,KAAKm0L,kBACJ1vL,EAAgB,eAAA5B,IAAA4B,EAAA,iBAAAA,EAAA,WAChBzE,KAAKq0L,YACLr0L,KAAAo0L,etR622CA4H,EsRz22CkB1/L,UAAAgI,YAAA,WACpBtE,KAAAs0L,gBtR222CE0H,EsRv22CO1/L,UAAeg4L,aAAA,WACvBt0L,KAAKu0L,eAELv0L,KAAAu0L,cAAAx/K,WtRy22CCinL,EsRr22CiB1/L,UAAA83L,YAAA,WtRs22Cb,GsRr22CLp0L,KAAAq0L,UtRq22CK,CsRj22CNr0L,KAAKs0L,eAGLt0L,KAAIw0L,4BtRk22CE,IsRj22CLC,IACAhkL,KAAA,MACAgD,QAAMzT,KAAA20L,atRk22CG1sL,MsRh22CRyrD,OAAQ1zD,KAAE40L,YACVC,SAAA70L,KAAAq0L,WAKFr0L,MAAAu0L,cAAA,GAAAO,OAAA90L,KAAA+0L,cAAA3wL,cAAA4wL,WAAA,MAAAP,KtRi22CEuH,EsR712CG1/L,UAAqBk4L,2BAAA,WAC1Bx0L,KAAKs1L,qBACLt1L,KAAAu1L,uBtR+12CEyG,EsRj12CF1/L,UAAAi5L,oBAAA,WAXA,GAAIlyL,GAACrD,ItR812CCA,MsR512CLq0L,UAAUh3L,QAAQ,SAAOmI,EAAAC,GACzB,GAAIqwL,GAASzyL,EAA4B2jC,OAAKsqJ,cAAA7rL,GAC9CswL,EAAUvwL,CACVuwL,GAAUG,gBAAc7yL,EAAS8yL,KAACL,EAAW,IAC7CC,EAAUK,YAAA/yL,EAAoB8yL,KAAGL,EAAS,GAC1CC,EAAUc,qBAAmBxzL,EAAS8yL,KAACL,EAAW,IAElDC,EAAUe,iBAAgBzzL,EAAA8yL,KAAAL,EAAA,GACxBC,EAAAa,YAAA,KtR812CDoF,EsR112CiB1/L,UAA4Bg5L,mBAAA,WtR212CzC,GsR112CLyB,IACAC,qBAAgB,EAChB5+B,WAAU,EtR212CDm/B,UsRz12CRl7G,KAAA,SACAm7G,eAAc,EACdC,YAAW,EtR212CC9qI,WACIr8B,MsR112Cd,SAAUlV,EAAAnT,GACV,YtR812CMivL,QACIC,QsRz12CXoB,QAASv4L,KAAIq0L,UAAS,GAAKpsL,KAAE5J,OAAA,GAC7Bg5L,WAAOx6L,SAAA,GtR212CYo2L,OsRz12ClBwF,UAAA,KtR612CUnB,QsRz12CXz6L,SAAS,EACRo2L,OAAAmE,aAAA,MtR612CMS,QsRz12CRh7L,SAAA,GAGFmD,MAAA20L,aAAAoC,GtR412CEiF,EsRz12CiB1/L,UAASu5L,cAAkB,WtR012CxC,OAAK71L,KsRz12CNq0L,WAA+B,OAAhBr0L,KAAGq0L,eAA2CxxL,KAAnB7C,KAACq0L,WAA8Br0L,KAAKq0L,UAASh2L,QAAA,IAC3F2B,KAASq0L,UAAA,GAAApsL,MAAA,OAAAjI,KAAAq0L,UAAA,QAAAxxL,KAAA7C,KAAAq0L,UAAA,GACC,EACXr0L,KAAAq0L,UAAA,GAAApsL,KAAA5J,QtR212CE29L,EsRx12Ce1/L,UAAc65L,KAAO,SAAS0C,EAAOC,GACtD,cAAAD,EAAArtK,OAAAstK,GAAA90J,KAAA,UtR012CEg4J,EsRv12CY1/L,UAAgB25L,aAAA,SAAApoK,GAE9B,MADAA,KAAAsa,QAAc,YAAU,IACxBta,EAAAgW,MAAA,KAAAtnC,IAAA+uB,YA1IQ,IAAA7O,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CA2IT,OtRy12CG4+K,KACIlhM,OAAOM,GAAgB,SACvB6gM,GAAsC,cAAenhM,SsRr+2CnDshM,EAAA1/L,UAAA,sBtRu+2CNs/L,IACIlhM,OAAOM,GAAgB,SACvB6gM,GAAsC,csRz+2CE,mBAAAp/K,EAAA,mBAAApgB,gBAAAogB,GAAA/hB,SACtCshM,EAAA1/L,UAAA,oBtR0+2CNs/L,IACIlhM,OAAOM,GAAgB,SACvB6gM,GAAsC,csR5+2CZ,mBAAAn/K,EAAA,mBAAArgB,gBAAAqgB,GAAAhiB,SACxBshM,EAAA1/L,UAAA,sBtR6+2CNs/L,IACIlhM,OAAOM,GAAgB,SACvB6gM,GAAsC,cAAenhM,SsR9+2CnDshM,EAAA1/L,UAAA,oBtRg/2CNs/L,IACIlhM,OAAOM,GAAgB,SACvB6gM,GAAsC,cAAenhM,SsRj/2CnDshM,EAAA1/L,UAAA,oBtRm/2CNs/L,IACIlhM,OAAOM,GAAgB,SACvB6gM,GAAsC,cAAel4K,SsRl/2ClDq4K,EAAA1/L,UAAA,sBtRo/2CPs/L,IACIlhM,OAAOM,GAAiB,UACxB6gM,GAAsC,csRr/2CsB,mBAAAl/K,MAAA,KAAA3hB,GAAA,cAAAA,GAAA,eAAA2hB,GAAAjiB,SACzDshM,EAAA1/L,UAAA,yBtRs/2CPs/L,IACIlhM,OAAOM,GAAiB,UACxB6gM,GAAsC,csRx/2CuC,mBAAAj/K,MAAA,KAAA5hB,GAAA,cAAAA,GAAA,eAAA4hB,GAAAliB,SAEzCshM,EAAA1/L,UAAA,yBtRw/2CxCs/L,IACIlhM,OAAOM,GAAoB,WAAG,UAAYgX,KAAMhX,GAAqB,aACrE6gM,GAAsC,csR1/2CwB,mBAAAh/K,MAAA,KAAA7hB,GAAA,YAAAA,GAAA,aAAA6hB,GAAAniB,SAdzDshM,EAAwB1/L,UAAA,wBtR0g3CjC0/L,EsR/g3CHJ,ItRgh3COlhM,OsR/g3CPM,GAAU,YACV4V,SAAU,mBACVE,SAAS,mOACRgF,YAAAihJ,QAAAq6B,GAAAsI,SAAArI,IAAAI,MtRih3CMqK,GAAmC,EAAGphM,OAAOM,GAAiB,QAAGo2L,KsRhh3C5DyK,GA6IZ,wCAAA/+K,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA00K,SAAA10K,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAu0K,GAAA,kBAAAA,GAAA,mBAAAv0K,GAAAtiB,UAADshM,MtR242CIC,GAAqCj8L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D8iL,GAAqCl8L,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC9E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuRv/2CzGyiL,GAA0C,WvR4/2CvC,QuR5/2CiBC,GAAsB5hL,GAdjCxa,KAAAwa,IAAMA,EAGNxa,KAAAogB,QAAoB,EAEnBpgB,KAAAumE,KAAA,KAEVvmE,KAAAq8L,iBAA4B,GAAArhM,IAAA,aAC5BgF,KAAAs8L,YAAA,EACAt8L,KAAAu8L,gBAA0B,EAC1Bv8L,KAAAw8L,WAAqB,EACrBx8L,KAAAy8L,WAAA,EAG8Cz8L,KAAA08L,gBAAA,EvRug3C3CN,EuRpg3CG9/L,UAAsBkI,YAAA,SAAAC,GAC3BzE,KAAK28L,sBACL38L,KAAAwa,IAAAhP,gBvRsg3CE4wL,EuRng3Ce9/L,UAAK24L,kBAAmB,SAAgBP,GACxDA,GAAK10L,KAAao7L,YAAUp7L,KAAAq8L,mBAC5Br8L,KAAKo7L,WAAA1G,EACL10L,KAAKq8L,iBAAgB9wL,KAAGmpL,GACxB10L,KAAAwa,IAAAhP,iBvRsg3CC4wL,EuR/92CF9/L,UAAAqgM,oBAAA,WAnCA,GAAIt5L,GAACrD,IACLA,MAAKs8L,YAAA,EACLt8L,KAAKu8L,gBAAiB,EACtBv8L,KAAKw8L,WAAY,EACjBx8L,KAAKy8L,WAAA,EAELz8L,KAAI08L,gBAAe,EAClB18L,KAAK48L,YvRmg3CI58L,KuRlg3CR48L,WAAQtB,MAAO,SAAAvgM,GvRmg3CH,OuRlg3CXA,GvRmg3Ce,IuRlg3Cd,MAID,MAHCsI,GAAKi5L,YAAY,EACjBj5L,EAAKm5L,WAAY,EACjBn5L,EAAAo5L,WAAa,GACH,CvRmg3CI,KuRlg3Cd,OACAp5L,EAAMi5L,YAAA,CACP,MvRmg3Ce,KuRlg3Cd,WACAj5L,EAAMk5L,gBAAA,CACP,MvRmg3Ce,KuRlg3Cd,MACAl5L,EAAMm5L,WAAA,CACP,MvRmg3Ce,KuRlg3Cd,MvRqg3Cc,IuRlg3Cd,WACAn5L,EAAMo5L,WAAA,EAKN,WAEJz8L,KAAAwa,IAAAhP,eAjEQ,IAAAiR,GAAAC,EAAAC,EAAAC,EAAAC,CAkET,OvRog3CGo/K,KACIvhM,OAAOM,GAAgB,SACvBkhM,GAAkC,cuRxk3CT9oL,UACvBgpL,EAAA9/L,UAAA,iBvRyk3CN2/L,IACIvhM,OAAOM,GAAgB,SACvBkhM,GAAkC,cuR3k3CH,mBAAAz/K,EAAA,mBAAApgB,gBAAAogB,GAAA/hB,SAC7B0hM,EAAA9/L,UAAA,qBvR4k3CN2/L,IACIvhM,OAAOM,GAAgB,SACvBkhM,GAAkC,cuR9k3CV,mBAAAx/K,MAAA,KAAA60K,GAAA,WAAAA,GAAA,YAAA70K,GAAAhiB,SACtB0hM,EAAA9/L,UAAA,qBvR+k3CN2/L,IACIvhM,OAAOM,GAAgB,SACvBkhM,GAAkC,cuRjl3CP,mBAAAv/K,MAAA,KAAA40K,GAAA,aAAAA,GAAA,cAAA50K,GAAAjiB,SAExB0hM,EAAA9/L,UAAA,evRil3CP2/L,IACIvhM,OAAOM,GAAiB,UACxBkhM,GAAkC,cuRnl3C2C,mBvRml3CpBt/K,MuRnl3CoB,KAAA5hB,GAAA,cAAAA,GAAA,eAAA4hB,GAAAliB,SANxE0hM,EAAoB9/L,UAAA,2BvR2l3C7B8/L,EuRjo3CHH,IvRko3COvhM,OuRjo3CPM,GAAU,YACV4V,SAAU,eAgCVE,SAAQ,w7CvRmm3CGK,QuRjm3CV,yDAEW+qL,GAmEZ,wCAAAr/K,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,UAAD0hM,MvRui3CIS,GAA4B3iM,EAAoB,MAGhD4iM,GAA2B98L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GwRnp3C/D2jL,IACArJ,GACAoG,GACAK,GACA4B,GACAI,GACCU,GAAA,GAYFG,GAAA,WAA2B,QAACC,MAAA,MxRyp3CxBA,GwRnq3CHH,IxRoq3COpiM,OwRnq3CPM,GAAS,WxRoq3CEqX,SwRlq3CVq1J,GAAY,EACZvqB,GAAA,aACAE,GAAW,EACXoqB,GAAA,aAEDr1J,aAAS2qL,GACRnrM,QAAAmrM,MACyBE,MxR0q3CvBC,GAAsCl9L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D+jL,GAAsCn9L,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC/E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IyR/r3CzG0jL,GAAA,WzRms3CG,QyRrs3CHC,KAEiBr9L,KAAAs9L,YAAA,GAAAtiM,IAAA,aA4BjB,MzR0q3CGqiM,GAAsB/gM,UAAUyjJ,KAAO,SAAUv6I,GyRns3CnD,GAAIiX,GACA9gB,EAAK,IACW,OAAnBqE,KAAKu9L,cACFv9L,KAAGu9L,YAAQ7iM,OAAYusB,KAAQjnB,KAAKw9L,SACxC,IAAIC,GAAMz9L,KAAEu9L,YAAAz/L,QAAA0H,EAGZ,OAFCi4L,IAAG,IACOhhL,OAAAzc,KAAAw9L,QAAAx9L,KAAAu9L,YAAAE,MAAA,EAAX9hM,EAAW8gB,GACX9gB,GzRss3CE0hM,EyRns3CgB/gM,UAAMgjB,MAAA,SAAA9Z,GzRos3ClB,GyRns3CS,MAAdxF,KAAIjF,MAAgB,CAEpB,GAAI0iM,GAAMz9L,KAAEjF,MAAA+C,QAAA0H,EACXi4L,IAAK,EzRms3COz9L,KAAKjF,MAAM0pC,OAAOg5J,EAAK,GyR/r3ChCz9L,KAACjF,MAAAic,KAAYxR,GACjBxF,KAAAs9L,YAAA/xL,KAAAvL,KAAAjF,SzRos3CCsiM,EyRhs3CgB/gM,UAAQisH,SAAY,SAAA/iH,GACtC,MAAAxF,MAAAjF,MAAA+C,QAAA0H,IAAA,GzRks3CE63L,EyR/u3CHH,IzRgv3COxiM,OyR/u3CPM,GAAU,YACV4V,SAAS,gBACTxS,QAAS,OAAC,QAAc,mBACxBghJ,SAAA,eACA3/H,gBAAUzkB,GAAyC,wBAAA0kB,OACnD5O,SAAS5W,EAAQ,MAChBiX,QAAAjX,EAAA,SAEWijM,GAqCZ,yBAADE,MzRit3CIK,GAAkC19L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DukL,GAAkC39L,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0R5v3CzGkkL,GAAA,W1Rgw3CG,Q0Rlw3CMC,KAEQ79L,KAAA89L,WAAA,EAUjB,M1Ryv3CGD,G0Rhw3CiBvhM,UAAAyhM,qBAAA,SAAAz5J,G1Riw3Cb,I0Rhw3CLtkC,KAAA89L,UACG,QACJ,IAAIltC,GAAYtsH,EAAM,MAAQA,EAAK05J,MAAK15J,EAAWkwE,O1Riw3C7C,S0Rhw3CO,IAAZo8C,GAAaA,EAAA,KAAAA,EAAA,IAAAA,EAAA,M1Row3CZ8sC,IACIhjM,OAAOM,GAAgB,SACvB2iM,GAA+B,cAAejjM,S0Rjx3CzCmjM,EAAuBvhM,UAAA,oB1Rmx3ChCuhM,E0Rzx3CHH,I1R0x3COhjM,O0Rzx3CPM,GAAU,YACV4V,SAAM,uB1R0x3CKG,M0Rxx3CVktL,aAAA,kCAEWN,GAcZ,yBAADE,M1Rmx3CIK,GAAoCl+L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D+kL,GAAoCn+L,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC7E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2Rpy3CzG0kL,GAAA,W3Rwy3CG,Q2R1y3CMC,KAEQr+L,KAAAs+L,aAAA,EAOjB,M3Roy3CGD,G2Rxy3CmB/hM,UAAAiiM,cAAA,SAAAj6J,G3Ryy3Cf,O2Rxy3CLtkC,KAAAs+L,cAED,GAAAh6J,EAAAssH,UAAA,GAAAtsH,EAAAssH,SAAA,KAAAtsH,EAAAssH,UAAA,IAAAtsH,EAAAssH,UAAA,K3R0y3CEstC,IACIxjM,OAAOM,GAAgB,SACvBmjM,GAAiC,cAAezjM,S2Rtz3C3C2jM,EAAyB/hM,UAAA,sB3Rwz3ClC+hM,E2R9z3CHH,I3R+z3COxjM,O2R9z3CPM,GAAU,YACV4V,SAAM,yB3R+z3CKG,M2R7z3CVktL,aAAA,2BAEWE,GAWZ,yBAADE,O3R4z3CA,S6P303CoCjZ,GAAOA,IAAA,eAA/BA,EAAqBA,EAAA,MAAc,M7P803C5CA,KAA0BA,OAG7B,I4R503CAoZ,I5R403CIC,GAAWvkM,EAAoB,IAG/BwkM,GAAiC1+L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G6Rv13ChEulL,GAAA,WAMA,QAACC,MAAA,M7Ru13CGA,G6R313CUtiM,UAAQo2J,UAAA,SAAA33J,EAAAsY,G7R413Cd,M6R313CO,OAAZA,EACMtY,EACNA,EAAA6C,OAAA,SAAAU,GAAA,MAAAA,GAAAvD,OAAAsY,EAAAtY,S7R613CC6jM,E6Rp23CHF,IAEYhkM,OAAAM,GAMZ,OAAA+X,KAAA,sBAAD6rL,MCLCC,GAAAnkM,OAAKM,GAAW,4BAChBN,OAAAM,GAAA,OAAM,SAAUN,OAAIM,GAAA,QAAM8jM,UAAW,yCACrCpkM,OAAAM,GAAA,kBAAWN,OAAAM,GAAsB,QAAA8jM,UAAA,UACjCpkM,OAAAM,GAAA,YAAW,qBAAsBN,OAAAM,GAAA,SAAQ,kBACvCN,OAAAM,GAAA,iCAAAN,OAAAM,GAAA,8B9R823CC+jM,GAAiC/+L,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D4lL,GAAiCh/L,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+R/03CzGulL,GAAuC,W/Ru13CpC,Q+Rv13CiBC,GAAmBhgM,GAXvCc,KAAAd,QAASA,EAITc,KAAAi0B,QAAQ,EACRj0B,KAAAm/L,SAAS/Z,GACTplL,KAAAsrD,UAAW85H,GAAIga,KACfp/L,KAAAq/L,SAAW,GAAGrkM,IAAI,aAEVgF,KAAAs9L,YAAa,GAAAtiM,IAAA,aAEsBgF,KAAAqT,SAAA,E/Rg23CxC6rL,E+R713CU5iM,UAAAkI,YAAuB,SAASC,G/Rk23CtC,G+Rj23CLA,EAAKjJ,eAAgB,UAAYwE,KAAKkyG,MAAA7zG,OAAA,IACtC2B,KAAKq6D,SAAAr6D,KAAekyG,MAAK7zG,OAAW,EACpC2B,KAAAs/L,aAAAt/L,KAAAkyG,MAAAlyG,KAAAqT,WAGA5O,EAAKjJ,eAAa,iBAAAwE,KAAAjF,OAAA,OAAAiF,KAAAkyG,MAAA,CAClBlyG,KAAKqT,SAAW,C/R613CP,K+R513CR,GAAI/U,GAAK,EAAAmwB,EAAMzuB,KAAKkyG,MAAK7zG,OAAUC,EAAImwB,EAAAnwB,I/R613C3B,G+R513CX0B,KAAKjF,cAAaiF,KAAAkyG,MAAA5zG,GAAAvD,MAAA,CAClBiF,KAAAqT,SAAM/U,CACN,OAGF0B,KAAAs/L,aAAAt/L,KAAAkyG,MAAAlyG,KAAAqT,Y/R+13CC6rL,E+Rz13CO5iM,UAAcijM,cAAiB,SAAQtiM,GAC3C,G/Ry13CK+C,K+Rz13CLi0B,QAAA,MAAAh3B,GAAqB,MAAbA,EAAA+b,QAAkB/b,EAAQ+b,iBAAuBwmL,QAC7Df,GAAQ,EAAAgB,aAAiBz/L,KAAEd,QAAAkF,cAAAnH,EAAA+b,UAC3BylL,GAAoB,EAAAiB,gBAAAziM,GACpB+C,KAAAi0B,QAAA,I/R413CCirK,E+Rx13CO5iM,UAAcqjM,eAAA,WACR,GAAd3/L,KAAKi0B,SACNj0B,KAAAi0B,QAAA,I/R013CEirK,EAAkB5iM,UAAUsjM,iBAAmB,SAAUpsK,G+Rv13C3D,GAAA/W,EACA,OAAAA,QAAA+W,EAAAusH,OAAA,EAAAtjI,G/R013CEyiL,E+Rv13CY5iM,UAAKujM,SAAgB,WACnC7/L,KAAAi0B,QAAAj0B,KAAAq6D,WAAAr6D,KAAAi0B,Q/Ry13CEirK,E+Rt13CG5iM,UAAe24D,OAAS,SAAA6qI,GAC7B9/L,KAAKs/L,aAAeQ,EACpB9/L,KAAKi0B,QAAA,EACLj0B,KAAKs9L,YAAS/xL,KAAKu0L,EAAK/kM,OACxBiF,KAAAq/L,SAAA9zL,KAAAvL,KAAAs/L,cA/DW,IAAA7iL,EAgEZ,O/Rw13CGyiL,G+Rh73CHH,I/Ri73COrkM,O+Rh73CPM,GAAoB,YACpB4V,SAAM,W/Ri73CKG,M+R/63CV6nH,iBAAc,SACdmnE,aAAc,yBACdC,eAAA,2BACAC,mBAAmB,wBACnBC,oBAAA,oB/Rk73CU9hM,Q+R/63CV,YACA,QACA,QACA,QACA,YAEDghJ,SAAU,0BACVtuI,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAA6B,OAC7BimM,YAAatB,IACbuB,eAAezB,IACdl/K,gBAAAzkB,GAAA,wBAAA0kB,SAEWs/K,GAgEZ,wCAAAviL,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,UAADwkM,M/Ru33CImB,GAAsCrgM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DknL,GAAsCtgM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC/E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IgS573CzG6mL,GAAuE,WhSo83CpE,QgSp83CiBC,GAAsBC,EAAAthM,GAAUa,KAAAygM,OAPpDzgM,KAAAb,WACAa,KAAA0gM,iBAAe,EAM6D1gM,KAAAq/L,SAAA,GAAArkM,IAAA,ahS083CzEwlM,EgSx83CgBlkM,UAAI6e,gBAAwB,WAC7Cnb,KAAKsrD,WAAS85H,GAAmBub,GhSy83CxB3gM,KAAKb,SAAS0L,SAAS7K,KAAKiyJ,KAAK7tJ,cAAe,OAAUpE,KAAKiyJ,KAAK7tJ,cAAcwE,wBAA8B,OAAK,MgSr83C/H5I,KAAAb,SAAA0L,SAAA7K,KAAAiyJ,KAAA7tJ,cAAA,kBhSy83CEo8L,EgSt83CgBlkM,UAAQgI,YAAA,WACV,MAAftE,KAAK4gM,WACF5gM,KAAC4gM,UAAYhqE,cACjB52H,KAAA4gM,UAAA,MhSw83CEJ,EgSn83CclkM,UAAK24D,OAAA,SAAAzvD,GACrBxF,KAAKqT,SAAS7N,EACdxF,KAAAq/L,SAAA9zL,KAAAvL,KAAAqT,WhSq83CEmtL,EAAsBlkM,UAAUukM,YAAc,SAAUrtK,GgSn83CrC,GAAA/W,EAA4B,OAAAA,QAAA+W,EAAAusH,OAAA,EAAAtjI,GhSu83C/C+jL,EgSp83CFlkM,UAAQwkM,gBAAkB,SAAC7jM,GhSs83CrB,OgSr83CNwhM,GAAe,EAAAiB,gBAAAziM,GACdA,EAAKgc,KhSq83CI,IgSp83CR,UACAjZ,KAAA+gM,SACD,MhSq83CS,KgSp83CR,YACA/gM,KAAAghM,WACD,MhSq83CS,KgSp83CR,QACAhhM,KAAAihM,OACD,MhSq83CS,SgSn83CT,ShSw83CCT,EgSn83COlkM,UAAmBykM,QAAA,WAC3B/gM,KAAK0gM,gBAAkB,EhSo83Cd1gM,KAAK0gM,kBgSj83Cf1gM,KAAA0gM,gBAAA1gM,KAAAkyG,MAAA7zG,OAAA,GhSq83CEmiM,EgSl83COlkM,UAAkB0kM,UAAW,WACrChhM,KAAK0gM,gBAAkB1gM,KAAAkyG,MAAA7zG,OAAA,EhSm83Cd2B,KAAK0gM,kBgSh83Cf1gM,KAAA0gM,gBAAA,GhSo83CEF,EgSj83CgBlkM,UAAQ2kM,MAAK,WhSk83CzB,GgSj83CO,MAAZjhM,KAAIkyG,OAAiC,MAAflyG,KAAAqT,UAAsBrT,KAAK0gM,iBAAU,GAC3D,GAAI97L,GAAQ5E,KAAKygM,KAAK/tC,UAAC1yJ,KAAAkyG,MAAkBlyG,KAAAqT,SACzCrT,MAAAi1D,OAAArwD,EAAA5E,KAAA0gM,mBAjEiB,IAAAjkL,GAAAC,EAAAC,CAmEnB,OhSm83CG0jL,KACI3lM,OAAOM,GAAoB,WAAG,QAC9BslM,GAAmC,cgSxg4CN,mBAAA7jL,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAPxB8lM,EAAqBlkM,UAAA,ehSih4C9BkkM,EgS5h4CHH,IhS6h4CO3lM,OgS5h4CPM,GAAU,YACV4V,SAAO,gBACPG,MAAQmwL,qBAAqB,2BAC7B9iM,QAAS,YAAY,oBACrBghJ,SAAA,YACA3/H,gBAAUzkB,GAAyC,wBAAA0kB,OACnD5O,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAA6B,OAC5BimM,YAAAtB,MAEWyB,GA0EZ,wCAAA5jL,MAAA,KAAAiiL,SAAAjiL,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA3hB,GAAA,WAAAA,GAAA,YAAA2hB,GAAAjiB,UAAD8lM,MhS893CIW,GAAmCnhM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GiS9j4ChEgoL,GAAA,WjSkk4CI,QiS3i4CAC,KACHrhM,KAAAjF,MAAA,GAaAiF,KAAAs9L,YAAA,GAAAtiM,IAAA,mBjSii4CGqmM,GAAmB/kM,UAAUglM,cAAgB,SAAUvmM,GiS3i4CnD,GAAA0hB,EjS6i4CA,OiS5i4CKA,MACDA,EAAAzc,KAAA+S,KAAU,IAAKhY,IAAS,EjS6i4CxB0hB,EiS5i4CF,OAAAzc,KAAAjF,SACL0hB,GjS8i4CD4kL,EiS3i4CiB/kM,UAAIg3H,QAAA,SAAA33H,GACjBqE,KAAKjF,MAAAY,EACRqE,KAAAs9L,YAAA/xL,KAAAvL,KAAAjF,QjS6i4CDsmM,EiSjl4CHF,IjSkl4COzmM,OiSjl4CPM,GAAsB,YACtB4V,SAAU,aACVE,SAAS5W,EAAQ,MACjBiX,QAAQjX,EAAA,OjSkl4CGkE,QiShl4CV,OACA,QACA,SACA,YACA,ejSml4CUghJ,SiShl4CV,eAEA3/H,gBAAAzkB,GAAA,wBAAA0kB,UAsBF2hL,MjSmk4CIE,GAAuCvhM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DooL,GAAuCxhM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IkSji4CzG+nL,GAAuE,WlSqi4CpE,QkSri4CiBC,GAAmBviM,EAAAqb,GAAUxa,KAAAb,SAAsBA,EAvBvEa,KAAAwa,IAAMA,EACNxa,KAAAi0B,QAAiE,EACjEj0B,KAAAyQ,KAAK,OAKLzQ,KAAAjF,MAAA,GACAiF,KAAA2hM,WAAW,EACX3hM,KAAA4hM,aAA2B,EAC3B5hM,KAAA2xD,UAA2B,KAC3B3xD,KAAAyxD,UAAS,KAETzxD,KAAA6hM,QAAA,EACQ7hM,KAAAs9L,YAAY,GAAGtiM,IAAI,aACnBgF,KAAA8hM,aAAc,GAAI9mM,IAAY,aAC9BgF,KAAA0yD,YAAa,GAAI13D,IAAY,aAC7BgF,KAAA+hM,WAAW,GAAG/mM,IAAI,aAClBgF,KAAAgiM,YAAa,GAAGhnM,IAAI,aACpBgF,KAAAiiM,cAAc,GAAGjnM,IAAI,aACrBgF,KAAAkiM,eAAa,GAAAlnM,IAAA,aAGuDgF,KAAAmiM,QAAA,GlSyj4CzET,EkStj4CUplM,UAAekI,YAAY,SAAQC,GlSuj4CzC,GkStj4CLA,EAAQjJ,eAAc,UAAaiJ,EAAIjJ,eAAU,gBlSuj4CxC,GkStj4CRqyB,GAAE7tB,KAAKjF,OAAWiF,KAAGjF,MAAK,IAAAsD,OAAkB,EAExC2B,KAAKu1D,YAAav1D,KAAAu1D,YAAAl3D,OAAA,MACtBwvB,IAAKA,GAAI7tB,KAAIumE,OAEVvmE,KAAKumE,KAAA14C,EAAA7tB,KAAemiM,QAAAt0K,EAAA7tB,KAAAmiM,SACxBniM,KAAAwa,IAAAhP,iBlSuj4CCk2L,EkSnj4CSplM,UAAcy9B,KAAQ,WACjC/5B,KAAK9B,MAAIkG,cAAe+oD,QACxBntD,KAAAwa,IAAAhP,gBlSqj4CEk2L,EkSlj4CiBplM,UAAO6wD,MAAA,SAAAlwD,GACX,GAAd+C,KAAKi0B,SACLj0B,KAAKi0B,QAAI,EAETj0B,KAAKwa,IAAAhP,eACLxL,KAAK8hM,aAAYv2L,KAAKvL,KAAEi0B,QACxBj0B,KAAA0yD,YAAAnnD,MAAAxQ,MAAAiF,KAAAjF,MAAAy7B,OAAAv5B,MlSoj4CCykM,EkShj4CiBplM,UAAMo/D,KAAA,SAAAz+D,GACV,GAAd+C,KAAKi0B,SACLj0B,KAAKi0B,QAAI,EACTj0B,KAAKwa,IAAAhP,eACLxL,KAAK8hM,aAAWv2L,KAAOvL,KAAKi0B,QAC5Bj0B,KAAA+hM,WAAAx2L,MAAAxQ,MAAAiF,KAAAjF,MAAAy7B,OAAAv5B,MlSmj4CCykM,EkS/i4CeplM,UAAY8lM,MAAO,SAAOnlM,GAC3C+C,KAAAgiM,YAAAz2L,MAAAxQ,MAAAiF,KAAAjF,MAAAy7B,OAAAv5B,KlSij4CEykM,EkS9i4CiBplM,UAAO+lM,WAAY,SAAaplM,GACnD+C,KAAAiiM,cAAA12L,MAAAxQ,MAAAiF,KAAAjF,MAAAy7B,OAAAv5B,KlSgj4CEykM,EkS7i4CiBplM,UAAQgmM,YAAY,SAAarlM,GACpD+C,KAAAkiM,eAAA32L,MAAAxQ,MAAAiF,KAAAjF,MAAAy7B,OAAAv5B,KlS+i4CEykM,EkS5i4CeplM,UAAU0E,OAAO,WAClChB,KAAAs9L,YAAA/xL,KAAAvL,KAAAjF,QlS8i4CE2mM,EkS3i4CSplM,UAAkB+iB,MAAG,WAChCrf,KAAA9B,MAAAkG,cAAAs3D,QlS6i4CEgmI,EkS1i4CiBplM,UAAIimM,KAAA,WACR,GAAdviM,KAAK6hM,SACN7hM,KAAA6hM,QAAA,IlS4i4CEH,EkSzi4CiBplM,UAAKkmM,IAAA,WACT,GAAdxiM,KAAK6hM,SACN7hM,KAAA6hM,QAAA,GA1FmB,IAAAplL,GAAAC,EAAAC,CA2FpB,OlS2i4CG4kL,KACI7mM,OAAOM,GAAoB,WAAG,SAC9BwmM,GAAoC,ckSxo4CL,mBAAA/kL,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAF1BgnM,EAAsBplM,UAAA,gBlS4o4C/BolM,EkSrr4CHH,IlSsr4CO7mM,OkSrr4CPM,GAAU,YACV4V,SAAM,iBlSsr4CKG,MkSpr4CV0xL,aAAa,SACbC,cAAc,UACdC,eAAA,UlSur4CU7xL,SkSrr4CV,ojBAQDK,QAAQjX,EAAA,OlSsr4CGkE,QkSpr4CV,SACA,OACA,QACA,OACA,cACA,WACA,eACA,YACA,cACA,YACA,alSur4CUghJ,SkSpr4CV,eACA,cACA,aACA,cACA,gBACA,iBACA,eAEA3/H,gBAAAzkB,GAAA,wBAAA0kB,SAEW8hL,GA6FZ,wCAAA9kL,MAAA,KAAA1hB,GAAA,WAAAA,GAAA,YAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA3hB,GAAA,mBAAAA,GAAA,oBAAA2hB,GAAAjiB,UAADgnM,MlS+l4CIkB,GAAkC5iM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DypL,GAAkC7iM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,ImSls4CtGopL,GAAuC,WnSus4CvC,QmSvs4CoBC,GAAmB7jM,GApB1Cc,KAAAd,QAAOA,EAaIc,KAAAuiM,MAAA,EASVviM,KAAAs9L,YAAA,GAAAtiM,IAAA,anS0s4CEN,OAAOI,emSzt4CVioM,EAAAzmM,UAAA,SnS0t4CO0F,ImSzt4CN,WACA,MAAAhC,MAAA+jG,QnS2t4CMphG,ImSju4CN,SAAWhH,GACL,MAALA,GAAeA,EAAA0C,OAAY,IACxB2B,KAACgjM,QAAatoM,OAAAusB,KAAAtrB,EAAA,KAClBqE,KAAA+jG,OAAApoG,GnSmu4CM8G,YAAY,EmSnu4ClBC,cAAA,InSsu4CEqgM,EmSjs4CWzmM,UAAMijM,cAAoB,SAAMtiM,GACxC,MAAJA,GAAI,MAAAA,EAAA+b,QAAQ/b,EAAA+b,iBAAkBwmL,QAC7Bf,GAAY,EAAAgB,aAAAz/L,KAAAd,QAAAkF,cAAAnH,EAAA+b,QnSks4CAhZ,KAAK+5B,OmS/r4ClB/5B,KAAAqf,UAgCF0jL,EAACzmM,UAAAy9B,KAAA,aAeDgpK,EAACzmM,UAAA+iB,MAAA,aAOD0jL,EAACzmM,UAAA2mM,SAAA,SAAAvpL,KAKDqpL,EAACzmM,UAAA4mM,aAAA,SAAAv5L,IAnHW,IAAA8S,EAoHZ,OnSkp4CGsmL,GmS9x4CHH,InS+x4COloM,OmS9x4CJM,GAAqB,YACrB4V,SAOC,YACDG,QAEHD,SAAS5W,EAAQ,MACdiX,QAAQjX,EAAA,OnSux4CAkE,QmSpx4CV,SnSux4CUghJ,SmSlx4CV,iBAGWyjD,GAoHZ,wCAAApmL,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,UAADqoM,MC/IAI,GAAA,WAaA,QAACA,MAAA,MpS2y4CGA,GoStz4CFC,QAAa,SAAYvpI,GACzB,MAAAA,GAAA,QAAAA,EAAA,GAAAA,GpSwz4CEspI,EoStz4CFE,MAAU,SAAOxpI,GACjB,WpSwz4CEspI,EoStz4CF18L,IAAS,SAAYsoB,EAAIu0K,GACzB,MAAAv0K,GAAAu0K,EAAAv0K,EAAAu0K,GpSwz4CEH,EoStz4CFngM,IAAS,SAAY+rB,EAAIu0K,GACzB,MAAAv0K,GAAAu0K,EAAAv0K,EAAAu0K,GACDH,KpS4z4CGI,GAAiCvjM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DoqL,GAAiCxjM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqS9z4CzG+pL,GAAA,WrSm04CG,QqSv04CHC,KACA1jM,KAAA2jM,YAAc,GAAIzZ,IAAA,QAClBlqL,KAAA4jM,YAAY,GAAG1Z,IAAI,QAGlBlqL,KAAK6jM,aAAc,GAAK3Z,IAAY,QACpClqL,KAAK8jM,YAAc9jM,KAAK2jM,YAAY7sE,eACpC92H,KAAK+jM,YAAY/jM,KAAO4jM,YAAC9sE,eACzB92H,KAAAgkM,aAAAhkM,KAAA6jM,aAAA/sE,eAmBD,MrSoz4CG4sE,GqSr04CWpnM,UAAKma,KAAA,SAAAxO,GAClBjI,KAAAkyG,MAAajqG,EACbsgC,QAAKu8D,KAAA,cAAsB78F,GAC3BjI,KAAA2jM,YAAA/nH,KAAA57E,KAAAkyG,QrSu04CEwxF,EqSr04CYpnM,UAAUiP,KAAA,WACV,MAAbvL,KAAAkyG,QACA3pE,QAAKu8D,KAAA,cAAsB9kG,KAAMkyG,OACjClyG,KAAA4jM,YAAAhoH,KAAA57E,KAAAkyG,SrSw04CCwxF,EqSr04CYpnM,UAAUusK,MAAA,WACZ,MAAX7oK,KAAKkyG,QACLlyG,KAAAkyG,MAAQ+xF,OAAK,EACb17J,QAAKu8D,KAAA,gBACL9kG,KAAA6jM,aAAAjoH,WrSw04CC8nH,EqS124CHH,IrS224CO7oM,OAAOM,GAAqB,cqS124CvBwoM,GAmCZ,yBAADE,MrS+04CIQ,GAA2ClkM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D+qL,GAA2CnkM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IsS314CzG0qL,GAA2G,WtSk24CxG,QsSl24CiBC,GAAmBnlM,EAAAsb,EAAAg1D,GAAUxvE,KAAAd,QAAsBA,EAAUc,KAAAwa,MAjBjFxa,KAAAwvE,UAGWxvE,KAAAskM,cAAe,EAGlBtkM,KAAAygC,SAAA,EACAzgC,KAAAukM,aAAc,EACdvkM,KAAAwkM,aAAA,EACAxkM,KAAAykM,oBAAqB,EAQkFzkM,KAAA0kM,oBAAA,EtS624C5GL,EsSr24CF/nM,UAAA+H,SAAA,WALA,GAAIhB,GAACrD,IACLA,MAAK2kM,kBACL3kM,KAAI4kM,eACY,MAAf5kM,KAAK4gM,WACF5gM,KAAC4gM,UAAYhqE,cACjB52H,KAAA4gM,UAAAhZ,GAAA,WAAAxvD,MAAA,GAAAysE,KAAA,GAAAlqL,UAAA,iBAAAtX,GAAAyhM,etS624CET,EsSx24CF/nM,UAAAyoM,mBAAA,WAHA,GAAI1hM,GAAKrD,IACO,OAAfA,KAAK4gM,WACF5gM,KAAC4gM,UAAYhqE,cACjB52H,KAAA4gM,UAAAhZ,GAAA,WAAAxvD,MAAA,GAAAysE,KAAA,GAAAlqL,UAAA,iBAAAtX,GAAAyhM,etS824CET,EsS524CoB/nM,UAAIgI,YAAA,WACV,MAAftE,KAAK4gM,WACF5gM,KAAC4gM,UAAYhqE,cACjB52H,KAAA4gM,UAAA,MtS824CEyD,EsS324CoB/nM,UAAEusK,MAAA,WACvB7oK,KAAKwvE,QAAQ0iC,QACblyG,KAAKwvE,QAAQ0iC,MAAM8yF,QAAQ9jM,MAAM,EACjClB,KAAAwvE,QAAA0iC,MAAA8yF,QAAAf,OAAA,GAEDjkM,KAAK2kM,kBACL3kM,KAAK4kM,eACL5kM,KAAK8kM,YACL9kM,KAAAwa,IAAAhP,gBtS624CE64L,EsS124CqB/nM,UAAAwoM,UAAA,WtS224CjB,GsS124CiB,MAAtB9kM,KAAIilM,KAAuB,CAC3B,GAAIC,GAAMllM,KAAOd,QAACkF,cAAmBwE,wBAAWI,MAAcm8L,EAAA,CAC9DnlM,MAAIilM,KAAA5nM,QAAQ,SAAKsb,GAAA,MAAAwsL,IAAAxsL,EAAAvU,cAAAwE,wBAAAI,QAChBm8L,EAAKD,EtS224COllM,KsS124CJolM,WAAQD,GACXD,EAAAllM,KAAaqlM,qBACnBrlM,KAAAslM,cAEDtlM,KAAKygC,SAAI,EACTzgC,KAAAwa,IAAAhP,gBtS424CE64L,EsSz24CkB/nM,UAAK8oM,WAAA,SAAAppL,GtS624CnB,GsS524CNhc,KAAKskM,cAAA,EACLtkM,KAAKqlM,oBAAmBrpL,EACxBhc,KAAIulM,iBACiB,MAApBvlM,KAAKwvE,QAAQ0iC,MtS024CJ,IsSz24CR,GAAK5zG,GAAA,EAAAA,EAAA0B,KAAcwvE,QAAM0iC,MAAQ8yF,QAAMhpL,MAAO1d,IAC/C0B,KAAAulM,cAAAvuL,MAAAjc,MAAAuD,EAAA,EAAA6gB,MAAA,YAAA7gB,EAAA,MtS424CC+lM,EsSz24CkB/nM,UAAMgpM,YAAA,WAC1BtlM,KAAKskM,cAAA,EACLtkM,KAAKqlM,oBAAmBx0C,IACxB7wJ,KAAAulM,kBtS224CElB,EsSz24CoB/nM,UAAEkpM,mBAAA,SAAAC,GACvBzlM,KAAIwvE,QAAK0iC,OACRlyG,KAAKwvE,QAAQ0iC,MAAM+xF,QAASwB,EAAK1qM,QACjCiF,KAAKwvE,QAAQ0iC,MAAM+xF,OAACwB,EAAA1qM,MACpBiF,KAAKwvE,QAAAjkE,OACLvL,KAAA4kM,iBtS624CAP,EsSx24CoB/nM,UAAEopM,SAAA,WtSy24ClB,GsSx24CL1lM,KAAIwvE,QAAS0iC,MAAO,CACpB,GAAIyzF,GAAS3lM,KAAQwvE,QAAQ0iC,MAAM+xF,OAAS,CAC3C0B,IAAK3lM,KAAawvE,QAAC0iC,MAAA8yF,QAAA9jM,OAChBlB,KAAK4lM,cACR5lM,KAAKwvE,QAAQ0iC,MAAM+xF,QAAS0B,IAC5B3lM,KAAKwvE,QAAQ0iC,MAAM+xF,OAAC0B,EACpB3lM,KAAKwvE,QAAAjkE,OACLvL,KAAA4kM,kBtS424CAP,EsSv24CoB/nM,UAAEupM,SAAA,WtSw24ClB,GsSv24CL7lM,KAAIwvE,QAAS0iC,MAAO,CACpB,GAAIyzF,GAAY3lM,KAAKwvE,QAAQ0iC,MAAM+xF,OAAQ,CAC1C0B,GAAK3lM,KAAWwvE,QAAG0iC,MAAA8yF,QAAAhpL,OAChBhc,KAAK8lM,cACR9lM,KAAKwvE,QAAQ0iC,MAAM+xF,QAAS0B,IAC5B3lM,KAAKwvE,QAAQ0iC,MAAM+xF,OAAC0B,EACpB3lM,KAAKwvE,QAAAjkE,OACLvL,KAAA4kM,kBtS224CAP,EsSt24CoB/nM,UAAUspM,YAAA,WACZ,MAAnB5lM,KAAKwvE,QAAQ0iC,QACblyG,KAAKwvE,QAAQ0iC,MAAM8yF,QAAQf,SAC3BjkM,KAAKwvE,QAAA0iC,MAAA8yF,QAAkB9jM,MAAAlB,KAAAwvE,QAAA0iC,MAAA8yF,QAAA9jM,MAAAlB,KAAAwvE,QAAA0iC,MAAA8yF,QAAAz+H,KACvBvmE,KAAK2kM,kBACL3kM,KAAK4kM,eACL5kM,KAAAsf,MAAAtf,KAAA+lM,UAAA,MtSy24CC1B,EsSt24CoB/nM,UAAUwpM,YAAA,WACZ,MAAnB9lM,KAAKwvE,QAAQ0iC,QACblyG,KAAKwvE,QAAQ0iC,MAAM8yF,QAAQf,SAC3BjkM,KAAKwvE,QAAA0iC,MAAA8yF,QAAkB9jM,MAAAlB,KAAAwvE,QAAA0iC,MAAA8yF,QAAA9jM,MAAAlB,KAAAwvE,QAAA0iC,MAAA8yF,QAAAz+H,KACvBvmE,KAAK2kM,kBACL3kM,KAAK4kM,eACL5kM,KAAAsf,MAAAtf,KAAA+lM,UAAA,MtSy24CC1B,EsSr24CoB/nM,UAAEgjB,MAAA,SAAAmmL,GACvBzlM,KAAIwvE,QAAQ0iC,OACN,MAALuzF,IACAzlM,KAAKwvE,QAAQ0iC,MAAM+xF,OAACwB,EACpBzlM,KAAKwvE,QAAAjkE,OACLvL,KAAA4kM,iBtSy24CAP,EsSp24CoB/nM,UAAEqoM,gBAAA,WtSq24ClB,GsSp24CL3kM,KAAKwvE,QAAA0iC,MAAe,CACpBlyG,KAAK+lM,aACL/lM,KAAKwvE,QAAQ0iC,MAAM8yF,QAAQz+H,KAAM48H,GAAG18L,IAASzG,KAAOwvE,QAAM0iC,MAAQ3rC,KAAMvmE,KAAKwvE,QAAQ0iC,MAAAlvG,KACrFhD,KAAKwvE,QAAQ0iC,MAAM8yF,QAAQ3mM,OAAK8kM,GAAAC,QAAApjM,KAAAwvE,QAAA0iC,MAAAl2F,MAAAhc,KAAAwvE,QAAA0iC,MAAA3rC,MtSq24CvBvmE,KsSp24CRwvE,QAAS0iC,MAAI8yF,QAAKhpL,MAEnBmnL,GAAa18L,IAAIzG,KAACwvE,QAAQ0iC,MAAM8yF,QAAQz+H,KAAWvmE,KAAKwvE,QAAQ0iC,MAAM8yF,QAAQ9jM,MAAOlB,KAAGwvE,QAAA0iC,MAAA8yF,QAAA3mM,OtSo24C/E,KsSn24CR,GAAKC,GAAA0B,KAASwvE,QAAQ0iC,MAAM8yF,QAAC9jM,MAAA5C,EAAA0B,KAAAwvE,QAAA0iC,MAAA8yF,QAAAhpL,MAAA1d,IAC9B0B,KAAA+lM,UAAA/uL,KAAA1Y,EAAA,KtSs24CC+lM,EsSj24CoB/nM,UAAEsoM,aAAA,WtSk24ClB,GsSj24CL5kM,KAAIwvE,QAAO0iC,MAAS,CAEpB,GAAI8zF,IAAU,EACVC,EAAKjmM,KAAAwvE,QAAW0iC,MAAQ+xF,OAAA,CAC3BjkM,MAAKukM,aAAc0B,IACnBjmM,KAAAukM,YAAe0B,EACfD,GAAA,EAGD,IAAIE,GAAKlmM,KAAAwvE,QAAA0iC,MAAkB8yF,QAASf,OAAA,CACnCjkM,MAAKykM,oBAAqByB,IAC1BlmM,KAAAykM,mBAAeyB,EACfF,GAAA,EAID,IAAIG,GAAKnmM,KAAAwvE,QAAA0iC,MAAkB8yF,QAAS9jM,MAAAlB,KAAAwvE,QAAA0iC,MAAA8yF,QAAAz+H,KAAAvmE,KAAAwvE,QAAA0iC,MAAA8yF,QAAA3mM,MACnC2B,MAAK0kM,oBAAqByB,IAC1BnmM,KAAA0kM,mBAAeyB,EACfH,GAAA,EAGD,IAAII,GAAKpmM,KAAAwvE,QAAW0iC,MAAQ+xF,OAAAjkM,KAAAwvE,QAAA0iC,MAAA8yF,QAAA3mM,MAC3B2B,MAAKwkM,aAAc4B,IACnBpmM,KAAAwkM,YAAe4B,EACfJ,GAAA,GAGAA,GACDhmM,KAAAwa,IAAAhP,gBAxLsB,IAAAiR,GAAAC,EAAAC,EAAAC,CA0LxB,OtS614CGsnL,KACIxpM,OAAOM,GAAuB,cAAG,UACjCmpM,GAAwC,csSzh5CK,mBAAA1nL,MAAA,KAAAzhB,GAAA,WAAAA,GAAA,YAAAyhB,GAAA/hB,SA+CrB2pM,EAAA/nM,UAAA,etS4+4C5B4nM,IACIxpM,OAAOM,GAAuB,cAAG,iBACjCmpM,GAAwC,cAAexgJ,UACvDwgJ,GAAwC,wBACxCA,GAAwC,wBsSr+4C9C,KA7DWE,EAA0B/nM,UAAA,kBtSoi5CnC+nM,EsS5i5CHH,ItS6i5COxpM,OsS5i5CJM,GAAU,YACb4V,SAAQ,kBACRG,MAAAs1L,uBAAiB,gBACd5mL,gBAAUzkB,GAA8C,wBAAA0kB,OAC3D5O,SAAS5W,EAAQ,MAChBiX,QAAAjX,EAAA,SAEWiqM,GA6LZ,wCAAAznL,MAAA,KAAA1hB,GAAA,YAAAA,GAAA,aAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA3hB,GAAA,mBAAAA,GAAA,oBAAA2hB,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA6mL,SAAA7mL,GAAAliB,UAAD2pM,MtSs34CIiC,GAAuCtmM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DmtL,GAAuCvmM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuS5j5CzG8sL,GAE+B,WvSik5C5B,QuSnk5CHC,GAYCj3H,EAAAh1D,GAXO,GAAAnX,GAAOrD,IACNA,MAAAwvE,QAAsBA,EAC9BxvE,KAAKwa,MvSok5CCxa,KuSnk5CLwvE,QAAQs0H,YAACnpL,UAAe,WACtBtX,EAAAmX,IAAAhP,iBvSqk5CGxL,KuSlk5CLwvE,QAAQw0H,aAAYrpL,UAAI,WACV,MAAbtX,EAAKw5I,SACNx5I,EAASw5I,QAAAgsB,QACPxlK,EAAAmX,IAAAhP,iBvSqk5CD9Q,OAAOI,euSlk5CV2rM,EAAAnqM,UAAA,oBvSmk5CO0F,IuSlk5CN,WACA,OAAAhC,KAAAwvE,QAAA0iC,MAAA+xF,OAAA,GAAAjkM,KAAAwvE,QAAA0iC,MAAA3rC,MvSok5CM9jE,YAAY,EuSpk5ClBC,cAAA,IvSuk5CEhI,OAAOI,euSrk5CV2rM,EAAAnqM,UAAA,iBvSsk5CO0F,IuSrk5CN,WACA,GAAA0X,GAAQ1Z,KAAG0mM,iBAAmB1mM,KAAOwvE,QAAK0iC,MAAK3rC,IAC/C,OAAA7sD,GAAA1Z,KAAAwvE,QAAA0iC,MAAAl2F,MAAAtC,EAAA1Z,KAAAwvE,QAAA0iC,MAAAl2F,OvSuk5CMvZ,YAAY,EuSvk5ClBC,cAAA,IvS0k5CEhI,OAAOI,euSxk5CV2rM,EAAAnqM,UAAA,oBvSyk5CO0F,IuSxk5CN,WACA,MAAAmhM,IAAAC,QAAApjM,KAAAwvE,QAAA0iC,MAAAl2F,MAAAhc,KAAAwvE,QAAA0iC,MAAA3rC,OvS0k5CM9jE,YAAY,EuS1k5ClBC,cAAA,GA3BsC,IAAA+Z,GAAAC,EAAAC,CA6BvC,OvS4k5CG2pL,KACI5rM,OAAOM,GAAoB,WAAGopM,IAC9BmC,GAAoC,cuS3m5CgC,mBAAA9pL,MAAA,KAAA2nL,SAAA3nL,GAAA/hB,SAF/D+rM,EAAsBnqM,UAAA,kBvS+m5C/BmqM,EuSrn5CHH,IvSsn5CO5rM,OuSrn5CPM,GAAU,YACV4V,SAAU,iBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW6mL,GA+BZ,wCAAA7pL,MAAA,KAAA+mL,SAAA/mL,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA3hB,GAAA,mBAAAA,GAAA,oBAAA2hB,GAAAjiB,UAAD+rM,MvS8l5CIE,GAAwC3mM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACvG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DwtL,GAAwC5mM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACjF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IwStn5CzGmtL,GAA8C,WxS4n5C3C,QwS5n5CiBC,GAA0Bt3H,GAJ9CxvE,KAAAwvE,QAAMA,EAKLxvE,KAAKwxB,IAAK4zJ,GAAGub,GxS8n5CP3gM,KwS7n5CLkyG,QACEn3G,MAAO,GAAIokB,MAAO,iBAClBpkB,MAAO,GAAIokB,MAAO,iBAClBpkB,MAAO,GAAGokB,MAAO,iBAClBpkB,MAAA,IAAAokB,MAAA,kBxSgo5CA2nL,EwS5n5CexqM,UAAayqM,SAAE,SAAAzoM,GACZ,MAAnB0B,KAAKwvE,QAAQ0iC,QACblyG,KAAKwvE,QAAQ0iC,MAAK3rC,KAAGrlC,SAAA5iC,EAAAvD,OACrBiF,KAAKwvE,QAAQq5F,QACb7oK,KAAAwvE,QAAAjkE,QApBU,IAAAkR,EAsBZ,OxS8n5CGqqL,GwSnq5CHH,IxSoq5COjsM,OwSnq5CPM,GAAU,YACV4V,SAAA,kBACA6O,gBAAUzkB,GAAA,wBAAA0kB,OACV5O,SAAQ,wFxSoq5CGK,QACI,kVwS1p5CHy1L,GAsBZ,wCAAAnqL,MAAA,KAAAgnL,SAAAhnL,GAAA/hB,UAADosM,MxSop5CIE,GAAoChnM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D6tL,GAAoCjnM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC7E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IySvq5CzGwtL,GAAA,WzS2q5CG,QySrr5CHC,KAC+BnnM,KAAAonM,YAAW,EAK1CpnM,KAAAq6D,UAAW,EACXr6D,KAAAs9L,YAAa,GAAAtiM,IAAuB,aACpCgF,KAAAqnM,OAAS,GAAGrsM,IAAI,aAEAgF,KAAAsnM,UAAA,GAAAtsM,IAAA,azSkr5CbmsM,EyS/q5CW7qM,UAAMirM,SAAA,SAAAxsM,GACnBiF,KAAKjF,QACLiF,KAAAs9L,YAAA1hH,KAAA57E,KAAAjF,QzSir5CEosM,EyS9q5CW7qM,UAAMkrM,OAAA,SAAAzsM,GACnBiF,KAAKjF,MAAOA,EACZiF,KAAAqnM,OAAA97L,KAAAvL,KAAAjF,QzSgr5CEosM,EyS7q5CW7qM,UAAMmrM,UAAA,SAAA1sM,GACnBiF,KAAKjF,QACLiF,KAAAsnM,UAAA/7L,KAAAvL,KAAAjF,OA1BmB,IAAA0hB,EA2BpB,OzS+q5CGuqL,KACItsM,OAAOM,GAAoB,WAAG,SAC9BisM,GAAiC,cyS5s5CF,mBAAAxqL,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAEPysM,EAAA7qM,UAAA,gBzS4s5C5B0qM,IACItsM,OAAOM,GAAsB,aAAG,kBAChCisM,GAAiC,cAAevsM,SySlt5C3CysM,EAAoB7qM,UAAA,mBzSot5C7B6qM,EySru5CHH,IzSsu5COtsM,OySru5CPM,GAAuB,YACvB4V,SAAS,cACTxS,QAAS,QAAC,MAAe,aAAU,aAAY,YAC/CghJ,SAAU,cAAE,sBzSsu5CDtuI,SySru5CT,6XASFK,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SAEWunL,GA6BZ,yBAADE,MzS8s5CIO,GAA+B1nM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DuuL,GAA+B3nM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACxE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,KAM1G,S4Rlw5CkC8kL,GAAOA,IAAA,iBAAQA,IAAA,mBAArCA,EAAmBA,EAA+B,8BAC9DA,KAA+DA,OAA/D,IAAAoJ,K5Ruw5CA,S4Rvw5CmCA,GAAcA,IAAA,+BAArCA,EAAoBA,EAA+B,gCAE/DA,KAAWA,O5Ryw5CX,IA47DIC,I4R/m9CAC,GACQ,W5R4t5CR,Q4R7t5CmBC,GAAA7oM,EAAmBC,GAC9Ba,KAAAd,QAAQA,EA1BnBc,KAAAb,SAASA,EACTa,KAAAgoM,WAAY,EACZhoM,KAAAioM,UAAY,EAGZjoM,KAAAkoM,WAAY,EAKZloM,KAAA+5B,MAAA,EACA/5B,KAAAmoM,YAAW,GAAIntM,IAAmB,aAClCgF,KAAAooM,SAAU,GAAIptM,IAAY,aAClBgF,KAAAqoM,QAAS,GAAIrtM,IAAY,aACzBgF,KAAAqnM,OAAQ,GAAArsM,IAAoB,aAM5BgF,KAAAsoM,MAAA9J,GACAx+L,KAAAuoM,WAAW,EACXvoM,KAAAwoM,UAAA,EACAxoM,KAAAyoM,eAAc,EAIlBzoM,KAAK0oM,eAAQ,EACb1oM,KAAKmhE,MAAOymI,GAAiBe,aAChC3oM,KAAAq8E,KAAAr8E,KAAAsoM,MAAA/xD,M5R4u5CEwxD,E4Rzu5CUzrM,UAAAkI,YAAuB,SAAEC,GACpCA,EAAIjJ,eAAiB,WACpBiJ,EAAe,MAAAmkM,kBACZ5oM,KAAA6oM,WAAiB7oM,KAAAkyG,OACF,MAAlBztG,EAAc,MAAAm0L,cAAqC,IAAZn0L,EAAY,MAAAm0L,aAClD54L,KAAKmhE,OAAQymI,GAAqBe,eACnC3oM,KAAAmhE,MAAAymI,GAAAe,cAEC3oM,KAAKmhE,OAAQymI,GAAqBkB,eACnC9oM,KAAAmhE,MAAAymI,GAAAkB,gB5R8u5CAf,E4Rzu5CUzrM,UAACgI,YAAA,WACbtE,KAAKqf,QACLrf,KAAK+oM,aACL/oM,KAAKgpM,WACJ9gM,MAAOlI,KAAAipM,eACJhpM,OAACmI,qBAAmBpI,KAAAipM,cACrBjpM,KAAAipM,aAAAp4C,K5R2u5CDk3C,E4Rxu5CGzrM,UAAiB4sM,iBAAG,WACzBlpM,KAAK0oM,gBAAgB,EACrB1oM,KAAKwoM,UAAU,EACfxoM,KAAAyb,QAAA,M5R0u5CEssL,E4Rvu5CGzrM,UAAiB6sM,cAAA,SAAAlhM,GACtBjI,KAAKwoM,UAAU,EACfxoM,KAAAyb,QAAAxT,G5Ryu5CE8/L,E4Rtu5CGzrM,UAAiB8sM,gBAAE,WACxBppM,KAAK0oM,eAAiB,EACtB1oM,KAAKuoM,WAAS,EACdvoM,KAAA4G,U5Rwu5CEmhM,E4Rru5CUzrM,UAAC+sM,aAAA,WACbrpM,KAAAqf,S5Ruu5CE0oL,EAAgBzrM,UAAUgtM,aAAe,W4Rru5C3B,GAAA7sL,EAAuD,OAAAA,QAAAmrL,GAAA5nM,KAAAmhE,SAAA,EAAA1kD,G5Ryu5CrEsrL,EAAgBzrM,UAAUitM,OAAS,W4Rxu5C3B,GAAA9sL,EAA6B,OAAAA,QAAAzc,KAAA+/I,OAAA,EAAAtjI,G5R4u5CrCsrL,E4R3u5CHzrM,UAUCsK,OAAA,WATA,GAAIvD,GAAKrD,IACO,IAAfA,KAAIwpM,QACHthM,MAAKlI,KAAAipM,gB5R4u5COjpM,K4R3u5CXipM,aAAOhpM,OAAAuI,sBAA0B,WACjCvI,OAAKmI,qBAAmB/E,EAAA4lM,cACxB5lM,EAAK4lM,aAAUp4C,IACbxtJ,EAAAomM,c5Rgv5CH1B,E4R3u5COzrM,UAASirM,SAAO,SAAAxsM,GACxBiF,KAAKkyG,OAAQn3G,IACbiF,KAAIkyG,MAASn3G,EACZiF,KAAKq8E,MAAOmiH,GAAMjoD,OAElBv2I,KAAK+5B,MAAA,EACL/5B,KAAAmoM,YAAA58L,KAAAvL,KAAAkyG,QACKlyG,KAAAq8E,MAAamiH,GAAAz3D,QAAA/mI,KAAAq8E,MAAAmiH,GAAAkL,cAClB1pM,KAAK+oM,aACL/oM,KAAA2pM,iB5R+u5CA5B,E4R1u5CHzrM,UAiBCkrM,OAAA,SAAAvqM,GAhBA,GAAAoG,GAAArD,IAEAy+L,IAAsB,EAAMiB,gBAACziM,GAE7B+C,KAAIqnM,OAAK97L,KAAAvL,KAAUkyG,OACX,MAAPlyG,KAAA6oM,YAAO,MAAA7oM,KAAAkyG,QAGRlyG,KAAIgpM,WACE,GAALhpM,KAAK+5B,O5Rwu5CI/5B,K4Rvu5CR4pM,WAAahiB,GAAG,WAAAxvD,MAAA,KAAAz9G,UAAA,WAChBtX,EAAK2lM,WACJ3lM,EAAKolM,eACNplM,EAAKmyD,QACHnyD,EAAAolM,eAAA,O5R2u5CFV,E4Rtu5CFzrM,UAAAutM,QAAQ,SAAA5sM,GACRwhM,GAA0B,EAAEiB,gBAAeziM,GAC1C+C,KAAK0oM,gBAAc,GAAa,GAAL1oM,KAAKwpM,QAAiBxpM,KAAAyb,QACjDzb,KAAA8pM,SAAA9pM,KAAAyb,QAAAzb,KAAA0oM,iBAEA1oM,KAAAqoM,QAAA98L,KAAAvL,KAAAkyG,Q5R0u5CC61F,E4Rtu5COzrM,UAAYytM,UAAS,SAAc9sM,GAC3C,MAAA+C,KAAAiyJ,MAAwB,MAAxBjyJ,KAAA0oM,gBAA2B,MAAA1oM,KAAAyb,SAAAzb,KAAAyb,QAAApd,OAAA,IAE3BogM,GAA0B,EAACiB,gBAAAziM,GAC1B+C,KAAK0oM,eAAiB,GAEnB1oM,KAAC0oM,iBAEL1oM,KAAAb,SAAAmI,YAAAtH,KAAAiyJ,KAAA7tJ,cAAA,YAAApE,KAAAiyJ,KAAA7tJ,cAAAwhE,WAAA,M5Rsu5CCmiI,E4Rlu5COzrM,UAAY0tM,YAAS,SAAc/sM,GAC3C,MAAA+C,KAAAiyJ,MAAwB,MAAxBjyJ,KAAA0oM,gBAA2B,MAAA1oM,KAAAyb,SAAAzb,KAAAyb,QAAApd,OAAA,IAE3BogM,GAA0B,EAAAiB,gBAAaziM,GACtC+C,KAAK0oM,eAAiB1oM,KAAAyb,QAAApd,OAAA,GAEnB2B,KAAC0oM,iBAEL1oM,KAAAb,SAAAmI,YAAAtH,KAAAiyJ,KAAA7tJ,cAAA,YAAApE,KAAAiyJ,KAAA7tJ,cAAAwhE,WAAA,M5Rku5CCmiI,E4R/t5CHzrM,UAQCqtM,YAAA,WAPA,GAAItmM,GAACrD,I5Rgu5CCA,M4R/t5CLiqM,YAAKriB,GAAa,WAAAxvD,MAAA,KAAAz9G,UAAA,WAClBtX,EAAK0lM,aACL1lM,EAAKmlM,UAAO,EAEZnlM,EAAK02B,KAAA12B,EAAYklM,UAAUllM,EAAOg5E,MAAAh5E,EAAAilM,MAAAoB,YAChCrmM,EAAA8kM,YAAA58L,KAAAlI,EAAA6uG,U5Riu5CD61F,E4R7t5COzrM,UAAWysM,WAAa,WACf,MAAjB/oM,KAAKiqM,aAAuBjqM,KAAGiqM,YAAAljI,QAC5B/mE,KAACiqM,YAAcrzE,cACnB52H,KAAAiqM,YAAA,M5R+t5CElC,E4R5t5COzrM,UAAU0sM,SAAa,WACf,MAAhBhpM,KAAK4pM,YAAsB5pM,KAAG4pM,WAAA7iI,QAC3B/mE,KAAC4pM,WAAahzE,cAClB52H,KAAA4pM,WAAA,M5R8t5CE7B,E4R3t5CUzrM,UAAMwtM,SAAA,SAAAtkM,GACT,MAARA,IACmB,MAAlBxF,KAAKkjM,eACFljM,KAACkyG,MAASlyG,KAAKkjM,aAAM19L,IACzBxF,KAAAooM,SAAA78L,KAAA/F,IAEDxF,KAAKqf,QACFrf,KAAAyoM,eAAA,G5R6t5CDV,E4R1t5CQzrM,UAAGk5D,MAAA,WACbx1D,KAAKmhE,MAAQymI,GAAUe,aACvB3oM,KAAKkyG,UAAArvG,GACL7C,KAAKmoM,YAAS58L,KAAKvL,KAAKkyG,OACxBlyG,KAAKooM,SAAQ78L,KAAAvL,KAAAkyG,OACblyG,KAAAqf,S5R4t5CE0oL,E4Rzt5COzrM,UAAa+iB,MAAE,WAClB,GAALrf,KAAK+5B,OACL/5B,KAAKyoM,eAAa,EAClBzoM,KAAK+5B,MAAM,EACX/5B,KAAKwpM,QAAS,EACdxpM,KAAKuoM,WAAW,EAChBvoM,KAAKwoM,UAAU,EACfxoM,KAAKyb,QAAU,KACfzb,KAAA6oM,eAAAhmM,K5R4t5CCklM,E4Rxt5CQzrM,UAAYmtM,QAAC,WACvB,GAAIS,GAAMlqM,KAAAd,QAAakF,cAAcwE,wBACjCuhM,EAAMlvM,SAAI6Q,KAAUX,YACxBnL,MAAA2gM,GAAAuJ,EAAA96I,QAAA86I,EAAAhhM,QAAA,GAAAihM,GAAA,EA7MmB,IAAA1tL,GAAAC,EAAAC,EAAAC,CA+MpB,O5Ryt5CG8qL,KACIhtM,OAAOM,GAAoB,WAAG,SAC9B2sM,GAA4B,c4R165CG,mBAAAlrL,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAEnBqtM,EAAAzrM,UAAA,gB5R065ChBorM,IACIhtM,OAAOM,GAAoB,WAAG,QAC9B2sM,GAA4B,c4R565CC,mBAAAjrL,MAAA,KAAA1hB,GAAA,YAAAA,GAAA,aAAA0hB,GAAAhiB,SAjBxBqtM,EAAezrM,UAAA,e5R+75CxByrM,E4Rx85CHL,I5Ry85COhtM,O4Rx85CJM,GAAU,YACV4V,SAAO,mBACPG,MAAQq5L,iBAAE,KAAIC,mBAAiB,MAAAC,eAAA,OAAApK,oBAAA,YAClCpvL,SA9CC,sxCA8CgCK,QAnB/B,g8B5R495CS/S,Q4Rx85CV,eAAY,OAAY,yDACzB,WAAU,aACTghJ,SAAA,+CAEWuoD,GA8NZ,wCAAAhrL,MAAA,KAAA3hB,GAAA,YAAAA,GAAA,aAAA2hB,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA5hB,GAAA,WAAAA,GAAA,YAAA4hB,GAAAliB,UAADqtM,M5Riv5CIwC,GAA2CvqM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DoxL,GAA2CxqM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0Svg6CzG+wL,GAAA,W1S2g6CG,Q0S7g6COC,KAEO1qM,KAAAs9L,YAAA,GAAAtiM,IAAA,aAUjB,M1Sog6CG0vM,G0S3g6CmBpuM,UAAKquM,cAAA,SAAAnlM,GAC1B,MAAAxF,MAAAjF,OAAAyK,G1S6g6CEklM,E0S1g6CqBpuM,UAAQyqM,SAAK,SAAAvhM,EAAA4a,GACpCpgB,KAAKjF,MAAA,EAAiByK,EAAK,KAC3BxF,KAAAs9L,YAAA/xL,KAAAvL,KAAAjF,Q1S4g6CEwvM,IACI7vM,OAAOM,GAAgB,SACvBwvM,GAAwC,c0S5h6CzB7mL,SACb+mL,EAAApuM,UAAA,e1S6h6CNiuM,IACI7vM,OAAOM,GAAgB,SACvBwvM,GAAwC,c0S/h6CxB7mL,SACd+mL,EAAApuM,UAAA,gB1Sgi6CNiuM,IACI7vM,OAAOM,GAAgB,SACvBwvM,GAAwC,c0Sli6CjB7mL,SACpB+mL,EAAApuM,UAAA,gB1Smi6CPiuM,IACI7vM,OAAOM,GAAiB,UACxBwvM,GAAwC,cAAe9vM,S0S1i6ClDgwM,EAA0BpuM,UAAA,sB1S4i6CnCouM,E0Slj6CHH,I1Smj6CO7vM,O0Slj6CPM,GAAU,YACV4V,SAAU,qBACVE,SAAS5W,EAAQ,MAChBiX,QAAAjX,EAAA,SAEWswM,GAiBZ,yBAADE,M1Swi6CIE,GAA+B5qM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DyxL,GAA+B7qM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACxE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2S7/5CzGoxL,GAA0C,W3Sgi6CvC,Q2Shi6CiBC,GAAsBvwL,GAL1Cxa,KAAAwa,IAAIA,EAGJxa,KAAAumE,KAAA,SAE+CvmE,KAAAgrM,cAAA,GAAAhwM,IAAA,a3Sqi6C5C+vM,E2Sji6COzuM,UAAAkI,YAAwB,SAACC,I3Ski6CxBA,E2Sji6CNjJ,eAAQ,YACRiJ,EAAQjJ,eAAe,aACvBiJ,EAAQjJ,eAAe,SACvBiJ,EAAQjJ,eAAe,cAE1BiJ,EAASjJ,eAAe,gBACxBwE,KAAAwa,IAAAhP,gB3Smi6CCu/L,E2S/h6COzuM,UAAQujM,SAAA,WAChB7/L,KAAAq6D,WAGDr6D,KAAKgrM,cAAIz/L,MAAevL,KAAAwT,SACxBxT,KAAAwa,IAAAhP,gBA7BW,IAAAiR,EA8BZ,O3Sgi6CGsuL,G2S/k6CHH,I3Sgl6COlwM,O2S/k6CPM,GAAkB,YAClB4V,SAAM,S3Sgl6CKG,M2S9k6CV44K,UAAA,aACAxqC,mBAAmB,WACnBD,kBAAiB,UACjB+rD,gBAAgB,mBAChBC,iBAAiB,oBACjBC,gBAAgB,mBAChBC,iBAAA,qBAEDt6L,SAjDE,yPAkDFK,QA7CA,wsDA8CA/S,QAAS,UAAC,WAAgB,iCAC1BghJ,SAAA,iBACC3/H,gBAAAzkB,GAAA,wBAAA0kB,SACWmrL,GA8BZ,wCAAApuL,MAAA,KAAAzhB,GAAA,mBAAAA,GAAA,oBAAAyhB,GAAA/hB,UAADqwM,M3Syj6CIM,GAAkCrrM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DkyL,GAAkCtrM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4Shp6CzG6xL,GAAA,W5Sqp6CG,Q4Srp6CHC,KAgCQ,GAAAnoM,GAAArD,I5Sun6CDA,M4Stn6CNyrM,WAAS,WACRpoM,EAAKqoM,SACLroM,EAAI4E,KAAK5E,EAAAqoM,OAAW/hM,OACnBtG,EAAKsoM,aACNtoM,EAAKsoM,YAAc/vH,KAAAv4E,EAAA4E,MACnB5E,EAAAqoM,OAAA,OAgCF,M5S0l6CGF,G4S7p6CYlvM,UAACsvM,QAAA,SAAA79K,EAAAtB,GACfzsB,KAAK+U,UACL/U,KAAK2rM,YAAc,GAAIzhB,IAAa,QACpClqL,KAAK6rM,YAAY7rM,KAAA2rM,YAAU70E,eAC3B92H,KAAK6rM,YAASlxL,UAAA,SAAA1S,GAAA,MAAAwkB,GAAAxkB,KACdjI,KAAK67I,KAAA9tH,EACL/tB,KAAA8rM,Y5S+p6CEN,E4S5p6CWlvM,UAAEwvM,SAAA,WACd9rM,KAAK67I,OACL77I,KAAK0rM,OAAO,GAAAK,YACZ/rM,KAAK0rM,OAAOvwM,iBAAc,OAAW6E,KAAAyrM,YAAA,GACrCzrM,KAAA0rM,OAAAM,cAAAhsM,KAAA67I,Q5S+p6CC2vD,E4S3p6COlvM,UAAeyY,QAAI,WACV,MAAjB/U,KAAK2rM,aACF3rM,KAAC2rM,YAAc/0E,cACnB52H,KAAK2rM,YAAc,KACnB3rM,KAAK6rM,YAAY,KACjB7rM,KAAK67I,KAAO,KACZ77I,KAAIiI,KAAK,KACI,MAAZjI,KAAK0rM,SACL1rM,KAAK0rM,OAAO/gF,QACZ3qH,KAAA0rM,OAAA1vM,oBAAA,OAAAgE,KAAAyrM,c5S8p6CCD,E4Sps6CHH,I5Sqs6CO3wM,OAAOM,GAAqB,c4Sps6CvBswM,GA8EZ,yBAADE,M5S8n6CIS,GAAoCjsM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D8yL,GAAoClsM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC7E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6S3r6CtGyyL,GAAiD,W7Sis6CjD,Q6Sjs6CoBC,GAAmBjtM,EAAAqwE,EAAAh1D,GAAUxa,KAAAb,WAAoCa,KAAAwvE,QAAsBA,EAR9GxvE,KAAAwa,MAGAxa,KAAAqsM,WAAa,GAAArxM,IAAM,aAK+FgF,KAAAssM,YAAA,E7Sws6C/GF,E6Sts6Cc9vM,UAAUgI,YAAA,WAC1BtE,KAAAwvE,QAAAz6D,W7Sws6CEq3L,E6Srs6CF9vM,UAAAiwM,WAAQ,SAAmBtvM,GAG3B,MAFAwhM,IAAuB,EAAAiB,gBAAAziM,GACvB+C,KAAAssM,YAAa,GACb,G7Sus6CEF,E6Sps6CF9vM,UAAAkwM,YAAQ,SAAmBvvM,GAG3B,MAFAwhM,IAAwB,EAAAiB,gBAAAziM,GACxB+C,KAAAssM,YAAa,GACb,G7Sss6CEF,E6Sns6CF9vM,UAAAmwM,OAAQ,SAAiBxvM,GAIzB,MAHAwhM,IAAuB,EAAKiB,gBAAcziM,GACzCA,GAAKA,EAAAyvM,cAAUzvM,EAAAyvM,aAAuBC,OAAK1vM,EAAAyvM,aAAAC,MAAAtuM,OAAA,GAC5C2B,KAAO4rM,QAAM3uM,EAAAyvM,aAAAC,MAAAnnM,KAAA,KACb,G7Sqs6CE4mM,E6Sls6CF9vM,UAAAswM,SAAQ,SAAmB3vM,G7Sos6CrB,G6Sns6CNwhM,GAAe,EAAAiB,gBAAAziM,IACd+C,KAAK6sM,OAGN,KAAO,IAAMjmL,OAAA,gDACb,O7S+r6CU5mB,MAAK6sM,OAAOzoM,cAAckb,S6S/r6CpC,G7Sos6CE8sL,E6Sjs6Ca9vM,UAASwwM,aAAO,W7Sks6CrB9sM,K6Sjs6CN6sM,QAAY7sM,KAAA6sM,OAAAzoM,eAA6BpE,KAAC6sM,OAAAzoM,cAAAuoM,OAC7C3sM,KAAK6sM,OAAQzoM,cAAYuoM,MAAAtuM,OAAmB,GAC7C2B,KAAA4rM,QAAA5rM,KAAA6sM,OAAAzoM,cAAAuoM,MAAAnnM,KAAA,K7Sms6CE4mM,E6Shs6Ca9vM,UAASwkL,SAAO,WAC9B9gL,KAAK6sM,QAAS7sM,KAAA6sM,OAAYzoM,eACvBpE,KAACb,SAAQmI,YAAUtH,KAAA6sM,OAAAzoM,cAAA,cACvBpE,KAAKwvE,QAAAz6D,UACL/U,KAAA+sM,YAAA,O7Sks6CEX,E6Shs6CH9vM,UAECsvM,QAAA,SAAA/vD,GADA,GAAIx4I,GAAQrD,IACZA,MAAAwvE,QAAAo8H,QAAA/vD,EAAA,SAAA5zI,GAAA,MAAA5E,GAAA0pM,YAAA9kM,M7Sks6CEmkM,E6S/r6Cc9vM,UAAKywM,YAAA,SAAA9kM,GACrBjI,KAAIgtM,SAAK/kM,EACM,MAAdjI,KAAKgtM,S7Sgs6CIhtM,KAAKb,SAASm1D,SAASt0D,KAAKitM,QAAQ7oM,cAAe,W6S7r6CzDpE,KAACb,SAAWu1D,YAAG10D,KAAcitM,QAAA7oM,cAAA,WACjCpE,KAAKktM,YAAI,cACTltM,KAAKwa,IAAAhP,eACLxL,KAAAqsM,WAAA9gM,KAAAtD,GA/DoB,IAAAwU,GAAAC,EAAAC,EAAAC,EAAAC,CAgErB,O7Sis6CGovL,KACIvxM,OAAOM,GAAoB,WAAG,UAC9BkxM,GAAiC,c6Snw6CA,mBAAAzvL,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAClB0xM,EAAA9vM,UAAA,iB7Sow6CnB2vM,IACIvxM,OAAOM,GAAoB,WAAG,WAC9BkxM,GAAiC,c6Stw6CE,mBAAAxvL,MAAA,KAAA1hB,GAAA,YAAAA,GAAA,aAAA0hB,GAAAhiB,SAP9B0xM,EAAmB9vM,UAAA,kB7S+w6C5B8vM,E6S9x6CHH,I7S+x6COvxM,O6S9x6CJM,GAAuB,YACvB4V,SAAM,c7S+x6CEG,M6S7x6CPo8L,gBAAc,aACdC,aAAa,qBACbC,cAAU,sBACbC,SAAA,kBAEDluD,SAAA,cACGghD,eAAUmL,IAEVz6L,SAAS5W,EAAQ,MACnBiX,QAAAjX,EAAA,SAEWgyM,GAsEZ,wCAAAvvL,MAAA,KAAA3hB,GAAA,WAAAA,GAAA,YAAA2hB,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2uL,SAAA3uL,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,UAAD0xM,M7S8t6CImB,GAAmCvtM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Do0L,GAAmCxtM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC5E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8S/y6CzG+zL,GAAA,W9Soz6CG,Q8Spz6CHC,KAyFQ,GAAArqM,GAAArD,I9S6t6CDA,M8S5t6CNyrM,WAAS,WACRpoM,EAAKqoM,SACLroM,EAAI4E,KAAK5E,EAAAqoM,OAAW/hM,OACnBtG,EAAKsoM,aACNtoM,EAAKsoM,YAAc/vH,KAAAv4E,EAAA4E,MACnB5E,EAAAqoM,OAAA,OAEF,M9S8t6CGgC,G8S5z6CapxM,UAAAqxM,UAAA,SAAAC,EAAAnhL,GACfzsB,KAAK+U,UACL/U,KAAK2rM,YAAc,GAAIzhB,IAAa,QACpClqL,KAAK6rM,YAAY7rM,KAAA2rM,YAAU70E,eAC3B92H,KAAK6rM,YAAOlxL,UAAO,SAAA1S,GAAA,MAAAwkB,GAAAxkB,KACnBjI,KAAKiI,KAAA2lM,EACL5tM,KAAK2rM,YAAS/vH,KAAK57E,KAAAiI,MACnBjI,KAAA0rM,OAAA,M9S8z6CEgC,E8S3z6CapxM,UAAAsvM,QAAA,SAAA79K,EAAAtB,GACfzsB,KAAK+U,UACL/U,KAAK2rM,YAAc,GAAIzhB,IAAa,QACpClqL,KAAK6rM,YAAY7rM,KAAA2rM,YAAU70E,eAC3B92H,KAAK6rM,YAASlxL,UAAA,SAAA1S,GAAA,MAAAwkB,GAAAxkB,KACdjI,KAAK67I,KAAA9tH,EACL/tB,KAAA8rM,Y9S6z6CE4B,E8S1z6CapxM,UAAAwvM,SAAA,WACd9rM,KAAK67I,OACL77I,KAAK0rM,OAAO,GAAAK,YACZ/rM,KAAK0rM,OAAOvwM,iBAAc,OAAW6E,KAAAyrM,YAAA,GACrCzrM,KAAA0rM,OAAAM,cAAAhsM,KAAA67I,Q9S6z6CC6xD,E8Szz6COpxM,UAAeyY,QAAI,WACV,MAAjB/U,KAAK2rM,aACF3rM,KAAC2rM,YAAc/0E,cACnB52H,KAAK2rM,YAAc,KACnB3rM,KAAI6rM,YAAK,KACa,MAArB7rM,KAAK6tM,iBACF7tM,KAAC6tM,gBAAkBj3E,cACvB52H,KAAK6tM,gBAAkB,KACvB7tM,KAAK8tM,gBAAY,KACjB9tM,KAAK67I,KAAO,KACZ77I,KAAIiI,KAAK,KACI,MAAZjI,KAAK0rM,SACL1rM,KAAK0rM,OAAO/gF,QACZ3qH,KAAA0rM,OAAA1vM,oBAAA,OAAAgE,KAAAyrM,aAEDzrM,KAAA0rM,OAAA,M9S2z6CEgC,E8Szz6CHpxM,UAwCCyxM,SAAA,SAAAC,EAAAC,EAAAC,EAAAC,GAxC2B,GAAA9qM,GAAArD,SAClB,KAALiuM,IAAwBA,EAAI,GACV,MAArBjuM,KAAK6tM,iBACF7tM,KAAC6tM,gBAAkBj3E,cACvB52H,KAAK6tM,gBAAkB,GAAI3jB,IAAiB,QAC5ClqL,KAAI8tM,gBAAmC9tM,KAAA6tM,gBAAqB/2E,cAC5D,IAAAs3E,GAAYnzM,SAAGiC,cAAS,MAkCxB,O9Syx6CMkxM,G8Szz6CLn1J,OAAU,SAAWh8C,GACrB,GAAIoxM,GAAOpzM,SAAGiC,cAAmB,UAC7BoxM,EAAQL,EAAc,IACtBM,EAAQH,EAAMplM,MAAQslM,EAAW,EACjCE,EAAQJ,EAAIplM,MAAIslM,EAAA,CACR,OAAXJ,IACGK,IAAaL,EAAIA,EAAAK,GACT,MAAXJ,IAEGK,EAAMA,EAAQL,EAAYA,EAAEK,GAC/BJ,EAAIplM,MAAMolM,EAAQllM,OACjBklM,EAAMplM,MAAMulM,IACZH,EAAMllM,QAAQqlM,EAAKH,EAAAplM,MACnBolM,EAAAplM,MAAAulM,GAGAH,EAAMllM,OAASslM,IACfJ,EAAMplM,OAASwlM,EAAKJ,EAAAllM,OACpBklM,EAAAllM,OAAAslM,GAGFH,EAAOrlM,MAAMolM,EAAQplM,MACrBqlM,EAAOnlM,OAASklM,EAACllM,MACjB,IAAIyxC,GAAG0zJ,EAAArZ,WAAA,KACNr6I,IACGA,EAAI8zJ,UAAUL,EAAA,EAAS,EAAGA,EAAAplM,MAAAolM,EAAAllM,OAC9B,IAAIjB,GAAKomM,EAAAK,WACRrrM,GAAKwqM,iBAELxqM,EAAAwqM,gBAAAjyH,KAAA3zE,IAEFmmM,EAAAvxK,IAAYmxK,EACZhuM,KAAA8tM,iB9S0z6CEJ,E8S556CHH,I9S656CO7yM,OAAOM,GAAqB,c8S556CvBwyM,GA2GZ,yBAADE,M9Syz6CIiB,GAAqC3uM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dw1L,GAAqC5uM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC9E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+Sz46CzGm1L,GAA4E,W/S+46CzE,Q+S/46CiBC,GAAmB3vM,EAAAqwE,EAAAh1D,GAAUxa,KAAAb,WAAqCa,KAAAwvE,QAAsBA,EAjB5GxvE,KAAAwa,MAIAxa,KAAA+uM,YAAa,GAAK/zM,IAAC,aACnBgF,KAAAssM,YAAW,EACXtsM,KAAA+tM,UAAA,EAMA/tM,KAAAgvM,kBAAqC,IAK2EhvM,KAAAivM,gBAAA,GAAAj0M,IAAA,a/Sy56C7G8zM,E+Sp56CFxyM,UAAA6e,gBAAA,WAFA,GAAI9X,GAAKrD,IACK,OAAbA,KAAKguM,WACNhuM,KAAAwvE,QAAAm+H,UAAA3tM,KAAAguM,UAAA,SAAA/lM,GAAA,MAAA5E,GAAA0pM,YAAA9kM,M/Sy56CE6mM,E+St56CWxyM,UAAUgI,YAAA,WACvBtE,KAAAwvE,QAAAz6D,W/Sw56CE+5L,E+Sr56CFxyM,UAAOiwM,WAAC,SAAmBtvM,GAG3B,MAFAwhM,IAAuB,EAAAiB,gBAAAziM,GACvB+C,KAAAssM,YAAa,GACb,G/Su56CEwC,E+Sp56CFxyM,UAAOkwM,YAAC,SAAmBvvM,GAG3B,MAFAwhM,IAAwB,EAAAiB,gBAAAziM,GACxB+C,KAAAssM,YAAa,GACb,G/Ss56CEwC,E+Sn56CFxyM,UAAOmwM,OAAC,SAAkBxvM,GAI1B,MAHAwhM,IAAuB,EAAKiB,gBAAcziM,GACzCA,GAAKA,EAAAyvM,cAAUzvM,EAAAyvM,aAAuBC,OAAK1vM,EAAAyvM,aAAAC,MAAAtuM,OAAA,GAC5C2B,KAAO4rM,QAAM3uM,EAAAyvM,aAAAC,MAAAnnM,KAAA,KACb,G/Sq56CEspM,E+Sl56CGxyM,UAAoByqM,SAAK,SAAA9pM,GAK9B,MAJA+C,MAAKkvM,kBAAkB,KACvBlvM,KAAKmvM,mBAAoB,KACzBnvM,KAAKgvM,kBAAY,IACjBhvM,KAAA4sM,SAAa3vM,IACb,G/So56CE6xM,E+Sj56CFxyM,UAAOswM,SAAC,SAAmB3vM,G/Sm56CrB,G+Sl56CNwhM,GAAe,EAAAiB,gBAAAziM,IACd+C,KAAK6sM,OAGN,KAAO,IAAMjmL,OAAA,gDACb,O/S846CU5mB,MAAK6sM,OAAOzoM,cAAckb,S+S946CpC,G/Sm56CEwvL,E+Sh56CaxyM,UAASwwM,aAAO,W/Si56CrB9sM,K+Sh56CN6sM,QAAY7sM,KAAA6sM,OAAAzoM,eAA6BpE,KAAG6sM,OAAAzoM,cAAAuoM,OAC/C3sM,KAAK6sM,OAAQzoM,cAAYuoM,MAAAtuM,OAAmB,GAC5C2B,KAAA4rM,QAAA5rM,KAAA6sM,OAAAzoM,cAAAuoM,MAAAnnM,KAAA,K/Sm56CCspM,E+S/46CexyM,UAAKwkL,SAAA,WACtB9gL,KAAKguM,UAAA,KACLhuM,KAAKkvM,kBAAkB,KACvBlvM,KAAKmvM,mBAAoB,KACzBnvM,KAAIgvM,kBAAoB,IACvBhvM,KAAK6sM,QAAS7sM,KAAA6sM,OAAYzoM,eACvBpE,KAACb,SAAQmI,YAAUtH,KAAA6sM,OAAAzoM,cAAA,cACvBpE,KAAKwvE,QAAAz6D,UACL/U,KAAK+sM,YAAI,MACT/sM,KAAAwa,IAAAhP,gB/Si56CEsjM,E+S146CFxyM,UAAA8yM,gBAAA,SAAAnB,GAJA,GAAI5qM,GAACrD,IACLA,MAAIgvM,kBAAqBf,EACxBjuM,KAAKkuM,UAAQluM,KAASmuM,W/Sg56CbnuM,K+S/46CPwvE,QAAAu+H,SAAU/tM,KAACkvM,kBAAsBlvM,KAAAgvM,kBAAmBhvM,KAAAkuM,SAAAluM,KAAAmuM,WACvDxzL,UAAA,SAAA1S,GAAA,MAAA5E,GAAA0pM,YAAA9kM,M/Si56CE6mM,E+S946CGxyM,UAAoB+yM,kBAAa,SAAApB,GACtCjuM,KAAKgvM,kBAAkBf,CACvB,IAAI1yM,GAAI0yM,EAAC,G/S+46CH,I+S946CS,MAAdjuM,KAAKmvM,oBAA8BnvM,KAAKkuM,SAAE,CAC1C,GAAI1vD,GAACx+I,KAASmvM,mBAAqB5zM,EAAC,CACpCyE,MAAAb,SAAA0L,SAAA7K,KAAAitM,QAAA7oM,cAAA,SAAAo6I,EAAAx+I,KAAAkuM,SAAAluM,KAAAkuM,SAAA1vD,GAAA,UAEAx+I,MAAAb,SAAA0L,SAAA7K,KAAAitM,QAAA7oM,cAAA,iB/Sk56CC0qM,E+S746CFxyM,UAAAsvM,QAAA,SAAA/vD,GADA,GAAIx4I,GAAQrD,IACZA,MAAAwvE,QAAAo8H,QAAA/vD,EAAA,SAAA5zI,GAAA,MAAA5E,GAAA0pM,YAAA9kM,M/Si56CE6mM,E+Sx26CFxyM,UAAAywM,YAAA,SAAA9kM,GAtCA,GAAI5E,GAAArD,KACAsvM,EAAAtvM,KAAAuvM,iBAAqCtnM,GAErCunM,EAA2B,IAC/BxvM,MAAIb,SAAQu1D,YAAM10D,KAAAitM,QAAA7oM,cAAA,WACjB,MAAA6D,I/S+46CSunM,E+S746CRxvM,KAA4Bb,SAAA6M,OAAAhM,KAAAitM,QAAA7oM,cAAA,kBAE5BorM,IAC2B,MAA1BnsM,EAAK8rM,qBACF9rM,EAAA8rM,mBAAmB9rM,EAAA4pM,QAAA7oM,cAAAqrM,aACvB,IAAIC,IAAK,CACRrsM,GAAAssM,UAAkBtsM,EAAA4pM,QAAA7oM,cAAAqrM,aAAApsM,EAAAssM,WAClBD,GAAA,GAEArsM,EAAAusM,WAAkBvsM,EAAA4pM,QAAA7oM,cAAAyrM,cAAAxsM,EAAAusM,YAClBF,GAAA,GAEArsM,EAAAysM,aAAkBR,EAAAjsM,EAAAysM,cAClBJ,GAAA,GAEAA,GACArsM,EAAKy9K,WACLz9K,EAAA4rM,gBAAA1jM,MAAAokM,SAAAtsM,EAAAssM,SAAAC,UAAAvsM,EAAAusM,UAAAE,YAAAzsM,EAAAysM,gBAEe,MAAdzsM,EAAK2qM,U/S846Ca3qM,EAAMlE,SAASm1D,SAASjxD,EAAM4pM,QAAQ7oM,cAAe,W+S346CxEf,EAAKlE,SAAAu1D,YAAuBrxD,EAAA4pM,QAAA7oM,cAAmB,WAC/Cf,EAAAgsM,kBAAAhsM,EAAA2rM,uBAIHhvM,KAAKb,SAAS69B,aAAQh9B,KAAAitM,QAAA7oM,cAAA,MAAA6D,GACtBjI,KAAIguM,UAAK/lM,EACiB,MAAzBjI,KAAKkvM,oBACFlvM,KAACkvM,kBAAuBjnM,GAC5BjI,KAAA+uM,YAAAxjM,KAAAtD,I/S+46CE6mM,E+S546CaxyM,UAAAizM,iBAAA,SAAAtnM,GACf,GACG8nM,GAAO9nM,C/S646CJ,I+S546CE,MAAP8nM,EACA,MAHU,EAMX,IACGhhG,GAAGghG,EAAQjyM,QADJ,W/S646CJ,Q+S346CE,GAAPixG,EARU,EAYXhsG,KAAAoL,KAAA,KAAA4hM,EAAA1xM,QAAA0wG,EANU,WAMV1wG,UAlJoB,IAAAoe,GAAAC,EAAAC,EAAAC,EAAAC,CAmJrB,O/S446CG8xL,KACIj0M,OAAOM,GAAoB,WAAG,UAC9B4zM,GAAkC,c+Sji7CD,mBAAAnyL,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAClBo0M,EAAAxyM,UAAA,iB/Ski7CnBqyM,IACIj0M,OAAOM,GAAoB,WAAG,WAC9B4zM,GAAkC,c+Spi7CC,mBAAAlyL,MAAA,KAAA1hB,GAAA,YAAAA,GAAA,aAAA0hB,GAAAhiB,SAjB9Bo0M,EAAoBxyM,UAAA,kB/Suj7C7BwyM,E+Stk7CHH,I/Suk7COj0M,O+Stk7CPM,GAAU,YACV4V,SAAM,e/Suk7CKG,M+Srk7CVo8L,gBAAc,aACdC,aAAa,qBACbC,cAAU,sBACVC,SAAA,kBAEDlvM,QAAS,YAAC,WAAe,WAAkB,kDAC3CghJ,SAAA,cAAgB,mBAChBghD,eAAUqN,IACV38L,SAAS5W,EAAQ,MAChBiX,QAAAjX,EAAA,SAEW00M,GAmKZ,wCAAAjyL,MAAA,KAAA3hB,GAAA,WAAAA,GAAA,YAAA2hB,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA6wL,SAAA7wL,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,UAADo0M,M/S066CIkB,GAA0BhwM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzF,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GgT/h7ChE62L,GAAA,WAAoC,QAACC,MAAA,MhTwj7CjCA,GgT3m7CHF,IhT4m7COt1M,OgT3m7CPM,GAAS,WhT4m7CEqX,SgT1m7CV8qI,GAAW,aACXsqB,GAAA,aAED3xJ,WAAY2tL,IhT4m7CDrxL,cgT1m7CVgsL,GAAmBR,GACnBqB,GAAesB,GAAA5B,GACfmM,GACArJ,GACAyF,GACAY,GACAtB,GACApC,GACAyC,GACAzJ,GACAyR,GAAiB1C,GACjBrJ,GACA1B,GACAqJ,IhT6m7CUzZ,iBgT1m7CV8Z,GACA7L,GAAAsB,GACAkB,GACAyF,GACAY,GACAtB,GACApC,GACAyC,GACAzJ,GACAyR,GAAiB1C,GACjBrJ,GACA1B,IhT6m7CUxvM,SgT1m7CVwsM,GAAeR,GACfkN,GACA7L,GACAwC,GACAyF,GACAY,GACAtB,GACApJ,GACAyR,GAAiB1C,GACjBrJ,GACA1B,GACAqJ,OAEkCyF,MhTkn7ChCC,GAA0BnwM,MAAQA,KAAKuY,WAAc,WACrD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFw3L,GAA2BpwM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Di3L,GAA2BrwM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IiTzr7CzE42L,GAAA,SAAA12L,GjTqs7C7B,QiThs7CH22L,GAOCxqB,EAAAl5B,EAAAw7B,EAAgB1vJ,EAAE63K,EAAiB53K,GANzB,GAAAv1B,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAA63K,IAAAxwM,IAO3B,OANUqD,GAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,YACAhlL,EAAAs1B,SACAt1B,EAAAmtM,WAAiBA,EAR5BntM,EAAAu1B,OjT0s7COv1B,EAAM6uL,YAAc,MiThs7C1B7uL,EARD8sM,GACWI,EAEA32L,GjTws7CR22L,EiThs7CEj0M,UAASm0M,cAAA,SAAA7vL,GjTis7CP,GiThs7CJjX,IACA+W,UAASE,EAAMF,UAAQiB,QACvBhB,QAAAC,EAAAD,QAAAgB,QAMF,OADAhY,GAAOgX,QAAOhX,EAAAgX,QAAA+H,IAAA,OACd/e,GjT+r7CE4mM,EiT5r7CGj0M,UAAWo0M,iBAAgB,SAAehwL,EAAQC,EAAAuxK,GjT6r7CjD,GiT3r7CO,QAAZA,GAAqC,OAAfA,EACtBxxK,EAAUA,EAAQkB,QAAQ,OAG1BjB,EAAUA,EAAQiB,QAAO,OACzBjB,IAAA+H,IAAA,WAGA,CAGA,GAAAioL,GAAqBze,CACrBxxK,GAAUA,EAAQkB,QAAQ+uL,GAG1BhwL,EAAUA,EAAQiB,QAAO+uL,GACzBhwL,IAAA+H,IAAA,EAAAioL,KjTur7CCJ,EiThr7CFj0M,UAAYs0M,sBAAkB,SAAAlwL,EAAAC,EAAAuxK,GAC9BxxK,EAAUA,EAAQiB,QAElBhB,EAAKA,EAAAgB,QAGL3hB,KAAI0wM,iBAAkBhwL,EAAQC,EAAAuxK,EjTgr7CxB,KiT/q7CN,GAAIlwK,GAAsB,GAAA3lB,OAC1Bw0M,EAAWnwL,EAGVmwL,EAAI7X,SAAgBr4K,IAAY,CAChC,GAAAmwL,GAAcD,EAAElvL,OAEhBmvL,GAAOpoL,IAAM,EAAAwpK,GACblwK,EAAOhL,MAAA65L,EAASE,OAAAD,EAAAC,SAChBF,EAAAC,EjT8q7CK,IiTtq7CD,GADDE,GAAShxM,KAAIixM,2CAAgBjvL,GACjC4pD,EAAqB,GAAAvvE,OAAZ48B,EAAA,EAAQi4K,EAAAF,EAAA/3K,EAAAi4K,EAAA7yM,OAAA46B,IAAA,CAChB,GAAAk4K,GAAYD,EAAaj4K,EACzB2yC,GAAA50D,KAAA,cAAAm6L,EAAAC,MAAA,IAAAD,EAAAE,KAAA,IAAAF,EAAAvrD,MAGD,MAAAh6E,IjTuq7CE2kI,EiTpq7CEj0M,UAAY20M,2CAAA,SAAAjvL,GjTuq7CV,IiTpq7CL,GAFGrY,MACJ2nM,EAAgB,KACXviG,EAAO,EAAAA,EAAO/sF,EAAO3jB,OAAU0wG,IAAO,CAC1C,GAAI+iF,GAAA9vK,EAAU+sF,GAAS,GAAE/sF,EAAA+sF,GAAA,EACX,QAAbuiG,GjTqq7CYA,GiTnq7CXF,MAAMpvL,EAAO+sF,GAAM,GACnBsiG,KAAMrvL,EAAI+sF,GAAA,GACT62C,KAAAksC,GAEFnoL,EAAAqN,KAAAs6L,IACAA,EAAa1rD,MAAAksC,GjTsq7CDwf,GiTpq7CXF,MAAMpvL,EAAO+sF,GAAM,GACnBsiG,KAAMrvL,EAAI+sF,GAAA,GACT62C,KAAAksC,GAEFnoL,EAAAqN,KAAAs6L,IAEAA,EAAAD,KAAArvL,EAAA+sF,GAAA,GAGF,MAAAplG,IjTwq7CE4mM,EiTnq7CIj0M,UAASi1M,gCAAA,SAAAjyI,GAEf,MADAA,IAAO,GACPwM,mBAAAxM,EAAAn3B,QAAA,YAAAA,QAAA,aAnHW,IAAA1rB,GAAAC,EAAWC,EAAAC,EAAAC,EAAAC,CAAS,OjTyx7C7ByzL,GiT1x7CHH,IjT2x7CO11M,OAAOM,GAAqB,ciT1x7CvBq1M,GAoHZ,wCAAA5zL,MAAA,KAAAkpK,GAAA,GAAAA,GAAA,IAAAlpK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAgrJ,GAAA,GAAAA,GAAA,IAAAhrJ,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAmrK,GAAA,GAAAA,GAAA,IAAAnrK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,UAAD61M,IApHwBxoB,GAAA,GjTky7CpBypB,GAA+BxxM,MAAQA,KAAKuY,WAAc,WAC1D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF64L,GAAgCzxM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GkTny7C1Bs4L,GAAA,SAAA93L,GlT2y7ClC,QAAS+3L,KkT5/6CZ,cAAA/3L,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KA/SqC,MAAtCwxM,IAAAG,EAAA/3L,GlT8y7CI+3L,EkT3y7CGr1M,UAAWs1M,iBAAA,SAAAtzL,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAID,IAAIuzL,GAAA1gB,OAAoBvvK,QAAA,OACpB6oK,EAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,gCACCuzL,EAAAd,MAMf,OlTmy7CMn3L,GkTxy7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlTwy7CE66E,EkTly7CGr1M,UAAWw1M,2BAAA,SAAApxL,EAAAC,EAAAuxK,EAAA5zK,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,WAGA4zK,IACAA,EAAAlyL,KAAAkyL,YAKD,IAAItmH,GAAA5rE,KAAa4wM,sBAAOlwL,EAAeC,EAAAuxK,GACnCzH,EAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,+BAC8BstD,EAAA5nC,KAAA,IAM5C,OlTwx7CMpqB,GkT7x7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlT6x7CE66E,EkTvx7CGr1M,UAAWy1M,2BAAA,SAAArxL,EAAAC,EAAAqxL,EAAA1zL,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,WAGDoC,EAAUA,EAAQiB,QAClBhB,EAAIA,EAAAgB,QACHqwL,GACAhyM,KAAA0wM,iBAAAhwL,EAAAC,EAAAqxL,EAGD,IAAIvnB,GAAS,GAAAP,IAAc,QACvB9iK,EAAS,aACZpnB,MAAA44B,KAAUq5K,4BACV7qL,GAAA,iBAED,IAAAqP,GAAA,YAAUnY,EAAI,sCAC8B8I,EAAA,cAAA1G,EAAAqwL,OAAA,IAAApwL,EAAAowL,MAU5C,OlT2w7CMn3L,GkTpx7CJtd,UAAY0V,KAAKxV,KAAAwD,KAASy2B,GAAM9b,UAAO,SAAA+xB,GACtCA,GAAaA,EAAMruC,OAAY,EAC/BosL,EAAA7uG,KAAAlvC,EAAA,IAEA+9I,EAAA7uG,KAAA,OAIH,SAAOj9D,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlTqx7CE66E,EkTjx7CGr1M,UAAW41M,2BAAA,SAAAxxL,EAAAC,EAAAuxK,EAAA5zK,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAKD,IAAIstD,GAAA5rE,KAAa4wM,sBAAOlwL,EAAeC,EAAAuxK,GACnCzH,EAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,oCACoBstD,EAAA5nC,KAAA,IAMlC,OlTww7CMpqB,GkT7w7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlT6w7CE66E,EkT1w7CGr1M,UAAW61M,yBAAA,SAAAzxL,EAAApC,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAGD,IAAImsK,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,+CACoBoC,EAAAqwL,OAAAlwL,WAAA,KAAAH,EAAAqwL,OAAA,OAAAlwL,WAAA,OAMlC,OlTmw7CMjH,GkTxw7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlTww7CE66E,EkTnw7CEr1M,UAAgB81M,iBAAW,SAAQ1xL,EAAAC,EAAAuxK,EAAA5zK,GACvC,GAAImsK,GAAC,GAAAP,IAAoC,OAuBzC,OlT6u7CMlqL,MkTnw7CJ8xM,2BAAiDpxL,EAAAC,EAAAuxK,EAAA5zK,GACjD3D,UAAI,SAAwC1S,GlTww7CpC,IkTnw7CH,GAJDoqM,IAA6BpqM,QAAGkX,MAAA,SAChCmzL,KACAC,GAA6BtqM,QAAGkX,MAAA,SAEpCqzL,KAASv5K,EAAG,EAAAw5K,EAAAxqM,EAAAgxB,EAAAw5K,EAAAp0M,OAAA46B,IAAA,CACX,GAAAy5K,GAAUD,EAAKx5K,EACfo5K,GAAUpqM,KAAK+O,KAAKsU,WAAWonL,EAAIC,QACnCJ,EAAAtqM,KAAY+O,KAAKsU,WAAAonL,EAAOhqF,QACxB4pF,EAAYt7L,KAAKm6K,GAAAruK,EAAOiuL,KAAK2B,EAAIE,MAAMzZ,eACvCqZ,EAAAx7L,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAGD,GAAI0Z,IAAmB5qM,KAAMoqM,EAAW3+I,OAAQ4+I,GAEhDQ,GAAoB7qM,KAAAsqM,EAAgB7+I,OAAA8+I,EAEpC/nB,GAAM7uG,MAAKi3H,EAAAC,KAGb,SAAOn0L,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlTgw7CE66E,EkT7v7CGr1M,UAAWy2M,qBAAA,SAAAryL,EAAAC,EAAArC,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,WAIDoC,EAAUA,EAAQiB,QAAQC,QAAQ,OAGlCjB,EAAUA,EAAQgB,QAAOC,QAAK,OAG9BjB,EAAUA,EAAM+H,IAAA,MAChB,IAAAkjD,KAEAA,GAAI50D,KAAA,WAAoB0J,EAAAqwL,OAAc,IAACpwL,EAAAowL,OACvC,IAAItmB,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,0BACZstD,EAAmC5nC,KAAA,IAMrC,OlTgv7CMpqB,GkTrv7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlTqv7CE66E,EkTlv7CGr1M,UAAW02M,mBAAA,SAAAtyL,EAAAC,EAAA+qB,EAAAptB,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,WAIDoC,EAAUA,EAAQiB,QAAQC,QAAQ,OAGlCjB,EAAUA,EAAQgB,QAAOC,QAAK,OAG9BjB,EAAUA,EAAM+H,IAAA,MAChB,IAAAkjD,KAEAA,GAAI50D,KAAA,WAAoB0J,EAAAqwL,OAAc,IAACpwL,EAAAowL,OACvC,IAAItmB,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,0BACZotB,EAAkC,WAAAkgC,EAAA5nC,KAAA,IAMpC,OlTqu7CMpqB,GkT1u7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlT0u7CE66E,EkTvu7CGr1M,UAAW22M,kBAAA,SAAAvyL,EAAAC,EAAA+qB,EAAAptB,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,WAIDoC,EAAUA,EAAQiB,QAAQC,QAAQ,OAGlCjB,EAAUA,EAAQgB,QAAOC,QAAK,OAG9BjB,EAAUA,EAAM+H,IAAA,MAChB,IAAAkjD,KAEAA,GAAI50D,KAAA,WAAoB0J,EAAAqwL,OAAc,IAACpwL,EAAAowL,OACvC,IAAItmB,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,0BACZotB,EAAgC,SAAAkgC,EAAA5nC,KAAA,IAMlC,OlT0t7CMpqB,GkT/t7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlT+t7CE66E,EkT5t7CGr1M,UAAW42M,sCAAA,SAAAC,EAAA70L,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAID,IAAAstD,KlT2t7CM,KkT1t7CL,GAAI3yD,KAAMk6L,GAAiB,CAC3B,GAAIx3M,GAAIw3M,EAAel6L,EACf,QAAPtd,GAAwB,KAANA,GAClBiwE,EAAA50D,KAAAiC,EAAA,IAAA6yD,mBAAAnwE,IAIF,GAAI8uL,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,wCACkCstD,EAAA5nC,KAAA,IAMhD,OlTmt7CMpqB,GkTxt7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlTwt7CE66E,EkTrt7CGr1M,UAAW82M,6BAAA,SAAA90L,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAID,IAAImsK,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,iCAOd,OlT6s7CM1E,GkTlt7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlTkt7CE66E,EkT/s7CGr1M,UAAW+2M,2BAAA,SAAAC,EAAAh1L,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAID,IAAImsK,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,6BACgBte,KAAAuxM,gCAAA+B,GAAA,cAM9B,OlTus7CM15L,GkT5s7CJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlT4s7CE66E,EkTzs7CKr1M,UAAAi3M,oBAAA,WACP,iDlT2s7CE5B,EkTxs7CGr1M,UAAWgsL,eAAA,SAAAhqK,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAGD,IAAImsK,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,yBAOd,OlTis7CM1E,GkTts7CJtd,UAAa0V,KAAKxV,KAACwD,KAASy2B,GAAA9b,UAAc,SAAA+xB,GAE3C+9I,EAAM7uG,KAAKlvC,EAAA8mK,eAEZ,SAAO70L,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBlTss7CE66E,EkTr/7CHF,IACY/2M,OAAAM,GA+SZ,eAAD22M,IA/S6BrB,IlT4/7CzBmD,GAA6BzzM,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Ds6L,GAA6B1zM,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,ImT9h8CzGi6L,GAAA,WAEA,QAACC,MAiCD,MnTig8CGA,GmT/h8CEt3M,UAAgBu3M,iCAAG,WnTii8CjB,ImT/h8CL,GADDC,MACMx1M,EAAG,EAAAA,EAAQrD,SAAM6Q,KAAQiB,SAAI1O,OAAAC,IAAA,CAClC,GAAG0Z,GAAG/c,SAAO6Q,KAAQiB,SAAOzO,EACb,MAAd0Z,EAAA7a,SAAsB,KAAA6a,EAAAlE,aAAA,qBACtBggM,EAAA98L,KAAAgB,GnTki8CI,ImT/h8CL,GAAA1Z,GAAS,EAAAA,EAAKw1M,EAAYz1M,OAAAC,IAC1BrD,SAAA6Q,KAAA9O,YAAA82M,EAAAx1M,KnTki8CCs1M,EmT9h8CGt3M,UAAAy3M,iBAAkC,SAACC,EAAAC,GAIxCj0M,KAAI6zM,kCACJ,IAAAK,GAAiBj5M,SAAOiC,cAAK,IAC7Bg3M,GAAWt3M,MAAM6+D,QAAQ,IACzBy4I,EAAWt3M,MAAMC,QAAQ,OACzBq3M,EAAWt3M,MAAA+wD,SAAa,WACxBumJ,EAAWl3K,aAAa,+BAA4B/8B,OAAAktC,KAAA8mK,IACpDC,EAAWl3K,aAAa,WAAAg3K,GACxBE,EAAWl3K,aAAY,mBAAe,KACtCk3K,EAAS95H,UAAK45H,EAGd/4M,SAAA6Q,KAAWqxB,YAAQ+2K,GACnBA,EAAA50L,SnT2h8CEs0L,EmThk8CHH,InTik8CO/4M,OAAOM,GAAqB,cmThk8CvB04M,GAqCZ,yBAADE,MnTmi8CIO,GAA0Cn0M,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dg7L,GAA0Cp0M,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IoTzj8CzG26L,GAA6C,WpTgk8C1C,QoThk8CiBC,GAAyB9kI,GAX7CxvE,KAAAwvE,UAEAxvE,KAAA20L,aAAgC,KAChC30L,KAAA48L,YAAA,WAA6B,OAE7B58L,KAAAu0M,gBAAgB,WAChBv0M,KAAAw0M,kBAAqC,OAMpCx0M,KAAKy0M,kBAAkB,MACvBz0M,KAAA00M,gBAAA,GAAAxqB,IAAA,QpTuk8CEoqB,EoTtj8CFh4M,UAAAq4M,SAAA,WAdA,GAAItxM,GAACrD,IACLA,MAAKq0L,UAAQ,KpTsk8CPr0L,KoTpk8CJwvE,QAAK4iI,iBAAgBpyM,KAA6B0gB,UAAA1gB,KAAA2gB,QAAA3gB,KAAAy0M,mBAAA95L,UAAA,SAAA1S,GAClD5E,EAAKgxL,UAAU,GAAKh4L,OACpBgH,EAAKgxL,UAAUr9K,KAAK/O,EAAK,GAAGA,MAC5B5E,EAAKgxL,UAAAr9K,KAAc/O,EAAM,GAAEA,MAE3B5E,EAAKuxL,YAAA3sL,EAAgB,GAAKyrD,OAE3BrwD,EAAAqxM,gBAAM94H,KAAAv4E,EAAAgxL,YpTmk8CE,SoTlk8CC11K,GAER4pB,QAAA5pB,MAAA,8BAAAA,MpTok8CA21L,EoThk8CUh4M,UAAgBs4M,oBAAe,WAC3C,MAAA50M,MAAA00M,gBAAA59E,gBpTkk8CEw9E,EoT/j8CqBh4M,UAAK24L,kBAAA,SAAAxkL,GAC5BzQ,KAAAu0M,gBAAA9jM,GpTik8CE6jM,EoT9j8CqBh4M,UAAGu4M,kBAAA,SAAAj0L,GAC1B5gB,KAAK0gB,UAAUE,EAAQ,GAGvB5gB,KAAK2gB,QAAUC,EAAA,GACf5gB,KAAK0gB,UAAQkB,QAAQ,OACrB5hB,KAAG2gB,QAAKiB,QAAS,OACb5hB,KAAK0gB,WAAA1gB,KAAiB2gB,SAAU3gB,KAAA0gB,UAAAqwL,QAAA/wM,KAAA2gB,QAAAowL,SACnC/wM,KAAAy0M,kBAAA,QAEDz0M,KAAA20M,YpT8j8CEL,EoT3j8CoBh4M,UAAGw4M,oBAAY,SAAA5iB,GACrClyL,KAAKy0M,kBAAWviB,EAChBlyL,KAAA20M,YpT6j8CEL,EoT1j8CkBh4M,UAAay4M,gBAAkB,WACnD,GAAIC,GAAWh1M,KAAC40L,YAAA50L,KAAA40L,YAAAv2L,OAAA,EACZsL,EAAS,GACTsrM,EAAA,GACDniB,EAAM,kBACkB,QAA1B9yL,KAAAy0M,mBAA0B,QAAAz0M,KAAAy0M,kBAC1B3hB,EAAA,aACuB,SAAvB9yL,KAAUy0M,kBACV3hB,EAAA,UACoB,QAApB9yL,KAAUy0M,oBACV3hB,EAAA,QAMDnpL,GAAS,sBpTyj8CH,KoTxj8CL,GAAIrL,GAAG,EAAGA,EAAC02M,EAAA12M,IACX22M,EAAI,IAAS9jB,KAAcnxL,KAAO40L,YAAQt2L,IAAA6jB,OAAA2wK,GAAA,KAC1CmiB,GAASj1M,KAAKq0L,UAAU,GAAGpsL,KAAK3J,GAAK,IAErC22M,GAAMj1M,KAAQq0L,UAAC,GAAApsL,KAAA3J,GAAA,OACfqL,GAAAsrM,CAED,OAAAtrM,GAzFW,IAAA8S,EA0FZ,OpTyj8CG63L,GoTpp8CHH,IpTqp8COz5M,OAAOM,GAAqB,coTpp8CvBo5M,GA0FZ,wCAAA33L,MAAA,KAAAi1L,SAAAj1L,GAAA/hB,UAAD45M,MpTkk8CIY,GAAqCl1M,MAAQA,KAAKuY,WAAc,WAChE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFu8L,GAAsCn1M,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dg8L,GAAsCp1M,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC/E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqT/p8C/D27L,GAAA,SAAAz7L,GrT2q8CvC,QqTvp8CH07L,GAQCC,EAAcC,EAkBdx7L,EAAAM,EAAAC,EAAAqe,EAAA68K,EAAAj7L,GA1BkB,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IACnDqD,GAAAkyM,eACAlyM,EAAAmyM,mBACAnyM,EAAA2W,eAAqBA,EACrB3W,EAAAiX,SACAjX,EAAAkX,YAAiBA,EAChBlX,EAAAu1B,OACAv1B,EAAAoyM,cAAsBA,EAG9BpyM,EAAImX,IAAQA,CACZ,IAAAoG,GAAKvd,EAAYu1B,KAAC88K,uBAelB,OAdAryM,GAAKkyM,aAAa70L,UAAUE,EAAMF,UAClCrd,EAAKkyM,aAAY50L,QAAMC,EAAAD,QAGvBtd,EAAKsyM,gBrTqp8CCtyM,EqTpp8CLuyM,SACAltF,MAAO,EACPiqF,MAAA,EACAkD,aAAA,KACCC,gBAAA,MrTsp8CIzyM,EAAMkyM,aAAaX,sBAAsBj6L,UAAU,SAAU1S,GAAQ,MAAO5E,GAAMmX,IAAIhP,iBqTjp8C5FnI,EA1BD6xM,GAAmBI,EACX17L,GrT6q8CL07L,EqThp8CGh5M,UAAmB+H,SAAA,WACxBrE,KAAK+1M,mBACL/1M,KAAKg2M,iCACLh2M,KAAKu1M,aAAAZ,WACL30M,KAAKi2M,mBACLj2M,KAAAwa,IAAAhP,gBrTkp8CE8pM,EqT7o8CgBh5M,UAAA45M,mBAAyB,SAAAt1L,GAC3C5gB,KAAKu1M,aAAKV,kBAAsBj0L,GAChC5gB,KAAK44B,KAAAu9K,sBAAmBv1L,EAAA,GAAAgB,QAAA,OAAAhB,EAAA,GAAAgB,QAAA,QACxB5hB,KAAKi2M,mBACLj2M,KAAAwa,IAAAhP,gBrT+o8CE8pM,EqT5o8Cah5M,UAAA85M,sBAAA,SAAA76L,EAAAC,GAEf,GAAI7R,GAAS,CAQb,OAPC6R,GAAY,IACZ7R,EAAA,IAAA4R,EAAAC,GAGA7R,EAAS,MACTA,EAAA,KAEDA,GrT4o8CE2rM,EqTzo8Cch5M,UAAY+5M,mBAAmB,WAC/C,GAAIpuM,GAAAjI,KAAAu1M,aAAiBR,kBrT0o8CXf,EqTzo8CI,oBAAqBh0M,KAAOu1M,aAAc70L,UAAYyB,OAAC,YAGhE,IAAAniB,KAAAu1M,aAAc50L,QAAiBwB,OAAA,YAAsB,MAAAniB,KAAAu1M,aAAAd,kBAAA,MAC1Dz0M,MAAAy1M,cAAA1B,iBAAAC,EAAA/rM,IrTyo8CEqtM,EqTto8COh5M,UAAgBg6M,sBAAwB,WrTuo8C3C,IqTto8CLt2M,KAAM21M,cAAA31M,KAAA21M,aAAAt3M,OAAA,EACN,2DrT2o8CK,KqTpo8CL,GrTio8CS21M,GqTto8CI,oBAAqBh0M,KAAO21M,aAAc31M,KAAA21M,aAAet3M,OAAA,GAAAi4C,KAAAn0B,OAAA,YAGnE,IAAOniB,KAAA21M,aAAA,GAAsBr/J,KAACn0B,OAAA,2BAClCla,EAAS,uBACJ3J,EAAG,EAAGA,EAAK0B,KAAA21M,aAAgBt3M,OAAAC,IAAA,CAC/B,GAAIo0M,GAAI1yM,KAAM21M,aAAUr3M,GACpB22M,EAAK,IAAIvC,EAAQp8J,KAAKn0B,OAAA,kBAC1B8yL,IAASvC,EAAIC,MAAQ,IAErBsC,GAAQvC,EAAKhqF,MAAA,OACbzgH,GAAAgtM,EAIDj1M,KAAAy1M,cAAA1B,iBAAAC,EAAA/rM,IrTmo8CEqtM,EqThn8CFh5M,UAAA25M,iBAAA,WAhBA,GAAI5yM,GAACrD,IrTko8CCA,MqT/n8CJw1M,iBAAazD,2BAA+B/xM,KAAAu1M,aAAA70L,UAAA1gB,KAAAu1M,aAAA50L,QAAA3gB,KAAAu1M,aAAAd,mBAAA95L,UAAA,SAAA1S,GAC5C5E,EAAKuyM,QAAQltF,MAAQp9F,WAAWrjB,EAAKygH,OACrCrlH,EAAKuyM,QAAQjD,MAAArnL,WAAmBrjB,EAAC0qM,OACjCtvM,EAAGuyM,QAAKC,aAAmB,KAC1BxyM,EAAKuyM,QAAQjD,MAAA,IAEbtvM,EAAGuyM,QAASC,aAACxyM,EAAAuyM,QAA2BltF,MAAArlH,EAAAuyM,QAAAjD,MACvCtvM,EAAKu1B,KAAAq5K,4BACL5uM,EAAAuyM,QAAAE,gBAAAxqL,WAAArjB,EAAAsuM,eAAAlzM,EAAAuyM,QAAAjD,QAIDtvM,EAAAmX,IAAAhP,kBrTgo8CD8pM,EqT3m8CFh5M,UAAAy5M,iBAAA,WAjBA,GAAI1yM,GAAArD,KACAw2M,EAAiBrlB,OAAmBvvK,QAAQ,SAC5C60L,EAAiBD,EAAC70L,QAA0BM,SAAC,WrT8n8C3CjiB,MqT3n8CJw1M,iBAAe1D,2BAAA2E,EAAAD,EAAA,SAAA77L,UAAA,SAAA1S,GACfA,EAAIskD,SrT6n8CI,KqT5n8CH,GAALmqJ,MAASz9K,EAAG,EAAAw5K,EAAAxqM,EAAAgxB,EAAAw5K,EAAAp0M,OAAA46B,IAAA,CACX,GAAAy5K,GAAAD,EAAgBx5K,ErT6n8CLy9K,GqT5n8CJ1/L,MACNs/B,KAAK66I,GAAWruK,EAAAiuL,KAAA2B,EAAAE,MAChBD,MAAOD,EAAIC,MACTjqF,MAAAgqF,EAAAhqF,QAGJrlH,EAAKsyM,aAAIe,EACPrzM,EAAAmX,IAAAhP,kBrT+n8CF8pM,EqT3l8CFh5M,UAAA05M,+BAAA,WAhCA,GAAI3yM,GAAArD,IAEiB,OAApBA,KAAK44B,KAAAta,WrT6n8CIte,KqT5n8CPga,eAAUkvK,sBAAkClpL,KAAA44B,KAAAta,UAFpB,GAGxB3D,UAAgB,SAAA1S,GrT6n8CL,IqT7n8CN,GAAIgxB,GAAG,EAAAxc,EAAAxU,EAAAwT,QAAAwd,EAAAxc,EAAApe,OAAA46B,IAAA,CACX,GAAIy5K,GAAKj2L,EAAAwc,EACC,IAATy5K,EAAAiE,QAAS9jM,IAAA6/L,EAAAkE,cAITlE,EAAAkE,YAAKv4M,OAAA,IACLgF,EAAKwzM,+BAA+BnE,EAAIt2L,gBACxC/Y,EAAKyzM,6BAA+BpE,EAAGkE,YAAA,GAAMluF,MAC7CrlH,EAAK0zM,gCAAgC5lB,GAAOruK,EAAAiuL,KAAK2B,EAAIkE,YAAc,GAAGhE,MAItEvvM,EAAK2zM,8BAA8B7lB,GAAiBruK,EAAEiuL,KAAA2B,EAAAkE,YAAA,GAAAjvM,IACtDtE,EAAA2zM,8BAAA/0L,SAAA,UAGAywL,EAAAkE,YAAKv4M,OAAA,IACLgF,EAAK4zM,4BAA4BvE,EAAIt2L,gBACrC/Y,EAAK6zM,0BAA4BxE,EAAGkE,YAAA,GAAMluF,MAC1CrlH,EAAK8zM,6BAA6BhmB,GAAOruK,EAAAiuL,KAAK2B,EAAIkE,YAAc,GAAGhE,MAInEvvM,EAAK+zM,2BAA2BjmB,GAAiBruK,EAAEiuL,KAAA2B,EAAAkE,YAAA,GAAAjvM,IACnDtE,EAAA+zM,2BAAAn1L,SAAA,cAnLM,IAAAxF,GAAAC,EAAAC,EAAAC,EAAAC,EAAqBC,EAAAC,EAAAC,CAAS,OrT8y8CvCs4L,GqTtz8CHH,IrTuz8COz6M,OqTtz8CPM,GAAU,YACV4V,SAAU,0BACVE,SAAQ5W,EAAA,MrTuz8CGiX,QqTrz8CV,yDAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACW01L,GAwLZ,wCAAA34L,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAg1L,SAAAh1L,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA6pK,GAAA,GAAAA,GAAA,IAAA7pK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA42L,SAAA52L,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAhiB,GAAA,mBAAAA,GAAA,oBAAAgiB,GAAAtiB,UAAD46M,IAxLkCj4D,GAAA,GrT8z8C9Bg6D,GAA8Br3M,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GsTx08C/Dk+L,KACCp0J,KAAA,GAAAxQ,UAAA2iK,KAsBFkC,GAAA,WAAuC,QAACC,MAAA,MtTs08CpCA,GsT118CHH,ItT218CO38M,OsT118CPM,GAAS,WtT218CEqX,SsTz18CVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAA8/C,IACX7vC,GAAA,YACAwoC,GACAjT,ItT418CU5qL,csTz18CVijM,ItT418CUv/L,WsTz18CV47L,GACA2C,GACA7tB,GAAA,MAEqCgxB,MhEtBvCh/L,GAAA,SAAApe,EAAAue,GAIA,OAHAH,GAAU9d,OAAgB+d,iBAC1BC,uBAAyBrc,QAAA,SAAAjC,EAAAue,GAAAve,EAAAse,UAAAC,IACzB,SAAAve,EAAAue,GAAA,OAAApd,KAAAod,KAAAnd,eAAAD,KAAAnB,EAAAmB,GAAAod,EAAApd,MACAnB,EAAAue,ItP+i9CI8+L,GAAYv9M,EAAoB,IuP3j9CpCw9M,GAAA,WACA,QAAAC,GAAAz4M,GACAc,KAAAd,UACAc,KAAA43M,cAAA,GAAA58M,IAAA,aACAgF,KAAA63M,WAAA,EA2CC,MApCDF,GAAAr7M,UAAAw7M,WAKA,WACA93M,KAAA43M,cAAArsM,MAAA,IAOAosM,EAAAr7M,UAAAysK,YAKA,WACA,MAAA/oK,MAAAd,QAAAkF,cAAAwE,yBAEA+uM,EAAgBnnM,aAChBC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,sBACAO,QAAA,s2BACiBL,SAAI,wzBAIrB6mM,EAAgBvmM,eAAU,WAAG,QACvBX,KAAAzV,GAAA,cAEN28M,EAAA/lM,gBACAgmM,gBAAuBnnM,KAAOzV,GAAO,SACrC68M,YAAApnM,KAAAzV,GAAA,SAEC28M,KAODI,IACAC,UAAA,EACAC,KAAA,GACAj+D,KAAA,GACAk+D,MAAA,GACAC,OAAA,IAQAC,GAAA,SAAA3yM,EAAAb,EAAAyzM,GACA5yM,EAAAb,EAAAvG,OAAA,GACAg6M,EAAApjJ,OAAArwD,EAAAa,EAAA,QASA6yM,GAAA,SAAA7yM,EAAAb,EAAAyzM,GACA5yM,EAAA,GACA4yM,EAAApjJ,OAAArwD,EAAAa,EAAA,QASA8yM,GAAA,SAAA9yM,EAAAb,EAAAyzM,GACA5yM,EAAAb,EAAAvG,OAAA,EACAg6M,EAAApjJ,OAAArwD,EAAAa,EAAA,OAGA4yM,EAAApjJ,OAAArwD,EAAA,QAgBA4zM,GAAA,SAAA/yM,EAAAb,EAAAyzM,GACA,MAAAA,GAAA/Y,aAAA+Y,EAAA/Y,aAAAhgL,YAAAzc,IAEI41M,IAAE5Q,MACFA,GAAEkQ,GAAAC,WAAAO,GACF1Q,GAAEkQ,GAAAE,MAAAK,GACFzQ,GAAEkQ,GAAA/9D,MAAAo+D,GACFvQ,GAAEkQ,GAAAG,OAAAM,GACF3Q,GAAEkQ,GAAAI,QAAAhyC,GACN0hC,IAgBA6Q,GAAA,WACA,QAAAC,KACA34M,KAAA44M,eAAA,GAAiC59M,IAAY,aAC7CgF,KAAAw4M,cAAA,GAAAx9M,IAAmC,aACnCgF,KAAA64M,gBAAA,GAAA79M,IAAA,aAgDC,MA9CDN,QAAAI,eAAA69M,EAAAr8M,UAAA,gBACA0F,IAKA,WACS,MAAAhC,MAAA84M,eAETr2M,YAAA,EACKC,cAAA,IAQLi2M,EAAAr8M,UAAA24D,OAMA,SAAAzvD,EAAAjH,OACA,KAAAA,OAAA,GACAyB,KAAA84M,cAAAtzM,EACAjH,GAAAiH,IAGAA,EAAA2nD,QACAntD,KAAA44M,eAAArtM,KAAA/F,KAOAmzM,EAAAr8M,UAAAy8M,SAKA,WACA/4M,KAAA84M,kBAAAj2M,IAEC81M,KAODK,GAAA,WACA,QAAAC,KACAj5M,KAAAk5M,WACAC,WAAA,EACAt4L,SAGA,WACA,WAAA7gB,KAAAm5M,UAAA,qBAGAn5M,KAAAo5M,cAAA,GAAAV,IAKC,MAHDO,GAAgBzoM,aAChBC,KAAAzV,GAAA,aAECi+M,KAODI,GAAA,WACA,QAAAC,GAAAjB,EAAAn5M,EAAAC,GACAa,KAAAmhE,MAAAk3I,EACAr4M,KAAAd,UACAc,KAAAb,WAKAa,KAAAu5M,cAAA,EAmFC,MA9EDD,GAAgBh9M,UAAAgI,YAGhB,WACAtE,KAAAmhE,MAAAi4I,cAAAP,gBAAAttM,KAAAvL,OAEAtF,OAAAI,eAAAw+M,EAAAh9M,UAAA,cACA0F,IAKA,WACS,MAAAhC,aAAAmhE,MAAAi4I,cAAA9Z,cAET78L,YAAA,EACKC,cAAA,IAQL42M,EAAAh9M,UAAA24D,OAMA,SAAAukJ,GACAx5M,KAAAmhE,MAAAi4I,cAAAnkJ,OAAAj1D,MAAA,GACAw5M,IACAA,EAAA9Z,kBACA8Z,EAAA3jG,mBAQAyjG,EAAAh9M,UAAAgjB,MAKA,WACAtf,KAAAmhE,MAAAi4I,cAAAZ,cAAAjtM,KAAAvL,OAMAs5M,EAAAh9M,UAAA6wD,MAIA,WACAntD,KAAAb,SAAAs6M,oBAAAz5M,KAAAd,QAAAkF,cAAA2I,SAAA,aAEAusM,EAAgB9oM,aAChBC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,gBACAO,QAAA,umBACiBL,SAAI,gQAIrBwoM,EAAgBloM,eAAA,mBACPX,KAAOuoM,KACPvoM,KAAOzV,GAAQ,aAClByV,KAAAzV,GAAA,YAENs+M,EAAA1nM,gBACA2nM,eAA0B9oM,KAAAzV,GAAO,QACjCD,QAAA0V,KAAAzV,GAAA,SAECs+M,KAODI,GAAA,WACA,QAAAC,GAAAtB,EAAAn5M,EAAAC,GACAa,KAAAmhE,MAAAk3I,EACAr4M,KAAAd,UACAc,KAAAb,WAIAa,KAAAgJ,MAAA,EAKAhJ,KAAA45M,mBAAA,EAIA55M,KAAA65M,cAAA,EAIA75M,KAAAykE,OAAA,IACAzkE,KAAAoxB,WACA0oL,iBAAAj3M,GACAk3M,mBAAAl3M,IAkQC,MAxPD82M,GAAAr9M,UAAAma,KAOA,SAAAk3C,EAAAwyG,OACuB,KAAvBA,IAAyBA,GAAA,EACzB,IAAyB65C,GAAA,mBAAA/+M,uBAAA4H,GACzBo3M,EAAA,mBAAAh6M,mBAAA4C,EACA7C,MAAAmhE,MAAA+3I,UAAAC,YAEAn5M,KAAAoxB,UAAA2oL,eAAA/5M,KAAAb,SAAA6M,OAAAguM,EAAAluM,KAAA,UAAA9L,KAAA+5M,eAAArjM,KAAA1W,OACAA,KAAAoxB,UAAA0oL,aAAA95M,KAAAb,SAAA6M,OAAAiuM,EAAA,UAAA5zC,KAGArmK,KAAAmhE,MAAA+3I,UAAAC,WAAA,EACAxrJ,GACA3tD,KAAAk6M,eAAAvsJ,EAAAwyG,IAQAw5C,EAAAr9M,UAAA8pK,KAKA,WACApmK,KAAAmhE,MAAA+3I,UAAAC,WAAA,EAEAn5M,KAAAmhE,MAAAi4I,cAAAL,WAEA/4M,KAAAoxB,UAAA0oL,cAAA95M,KAAAoxB,UAAA0oL,eACA95M,KAAAoxB,UAAA2oL,gBAAA/5M,KAAAoxB,UAAA2oL,kBASAJ,EAAAr9M,UAAA49M,eAOA,SAAAvsJ,EAAAwyG,GACAngK,KAAA2tD,WACA3tD,KAAAm6M,eAAAh6C,IAQAw5C,EAAAr9M,UAAAy9M,eAMA,SAAAP,GACA,GAAyBvgM,GAAAugM,EAAAhlG,QACA5vG,EAAA5E,KAAA4E,MAAAw1M,UACzB30M,EAAAb,EAAA9G,QAAAkC,KAAAmhE,MAAAi4I,cAAA9Z,aACAmZ,IAAAj9M,eAAAyd,IAGAw/L,GAAAx/L,GAAAzc,KAAAwD,KAAAyF,EAAAb,EAAA5E,KAAAmhE,MAAAi4I,gBAMAO,EAAAr9M,UAAA+9M,eAIA,WACA,MAAAr6M,MAAAd,QAAAkF,cAAA2I,SAAA,IAOA4sM,EAAAr9M,UAAAg+M,mBAKA,SAAA3sJ,GACA,GAAyBssJ,GAAA,mBAAAh6M,mBAAA4C,GACzBm3M,EAAA,mBAAA/+M,uBAAA4H,EACA,IAAAo3M,GAAAD,GAAArsJ,EAAA,CAGA,GAAyBzuD,GAAAc,KAAAq6M,iBACAE,MAAA13M,KAAAo3M,EAAAz0I,YACAg1I,EAAA,gBAAAR,EAAAS,YAAA,IACzBv2M,EAAAq2M,EAAAN,EAAAz0I,YAAAg1I,EACAR,EAAAnuM,gBAAyB45D,WAAAu0I,EAAAluM,KAAA25D,WACzBxhE,EAAAs2M,EAAAN,EAAAt0I,YAAA60I,EACAR,EAAAnuM,gBAAA+5D,UAAAo0I,EAAAluM,KAAA85D,UACAnpD,EAAAzc,KAAA06M,YAAyB/sJ,EAAAlhD,KAAAzM,KAAA65M,aAAA51M,EAAA,WAAA0pD,EAAAnhD,KAAAtI,EAAA,QAAAuI,EAAAgQ,EAAAhQ,IAAAD,EAAAiQ,EAAAjQ,KACAoB,EAAA1O,EAAA0O,YACAzC,EAAAjM,EAAAiM,aACAwvM,EAAAz5K,SAAAz0B,GAAAtB,GAAAnL,KAAA65M,aAAA,EAAA51M,EAAA,IACA22M,EAAA15K,SAAA10B,GAAAoB,EACAitM,EAAAZ,EAAA/qJ,YAAA+qJ,EAAAa,QACzBC,EAAAd,EAAA5qJ,WAAA4qJ,EAAAe,OAIA,IAHAL,GAAAE,IACApuM,EAAAy0B,SAAAz0B,EAAA07B,QAAA,UAAAh9B,EAAA,MAEAyvM,GAA6BG,EAAA,CAC7B,GAAAE,GAAAL,EAAAG,EAAA,EACAvuM,GAAA00B,SAAA10B,EAAA27B,QAAA,UAAA8yK,EAAA,KAEA,OAAAxuM,MAAAD,UAOAmtM,EAAiBr9M,UAAAo+M,YAKjB,SAAAjuM,EAAAD,GACA,IAAAxM,KAAAkL,OACA,OAAAuB,MAAAD,OAEA,IAAAtB,GAAAlL,KAAAkL,OAAA24B,MAAA,IAMA,OALA34B,GAAA,KACAA,EAAA,QAEAuB,EAAAy0B,SAAAz0B,EAAA07B,QAAA,UAAAjH,SAAAh2B,EAAA,SACAsB,EAAA00B,SAAgB10B,EAAA27B,QAAA,UAAAjH,SAAAh2B,EAAA,UAChBuB,MAAAD,SAKAmtM,EAAgBr9M,UAAA+H,SAGhB,WACA,GAAA21M,GAAA,mBAAA/+M,uBAAA4H,EACA7C,MAAA65M,cAEAG,EAAAluM,KAAAqxB,YAAAn9B,KAAAd,QAAAkF,gBAOAu1M,EAAkBr9M,UAAA69M,eAIlB,SAAAh6C,OACuB,KAAvBA,IAAyBA,GAAA,EACzB,IAAyBjhK,GAAAc,KAAAq6M,iBACzB1sJ,EAAA3tD,KAAAs6M,mBAAAt6M,KAAA2tD,SACAA,KACA3tD,KAAAb,SAAA+7M,gBAAAh8M,EAAA,MAAAyuD,EAAAlhD,IAAAoU,YACA7gB,KAAAb,SAAA+7M,gBAAAh8M,EAAA,OAAAyuD,EAAAnhD,KAAAqU,aAGA7gB,KAAA45M,mBACA55M,KAAA4E,MAAAwsM,QACApxM,KAAAmhE,MAAAi4I,cAAA9Z,cACAt/L,KAAAmhE,MAAAi4I,cAAAnkJ,OAAAj1D,KAAA4E,MAAAwsM,OAAA,IAMAuI,EAAgBr9M,UAAAgI,YAGhB,WACA,GAAA62M,GAAAn7M,KAAAd,QAAAkF,aACA+2M,GAAAp+M,WAAAC,YAAAm+M,GACAn7M,KAAAoxB,UAAA2oL,gBACA/5M,KAAAoxB,UAAA2oL,kBAGAJ,EAAgBnpM,aAChBC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,oBACAO,QAAA,yqBACAL,SAAA,wlBACAqvL,YACAnhH,EAA4B,QACA+4E,EAAK,UAAWn7J,GAAOC,QAAA,QAAA4+D,QAAA,EAAAvyD,OAAA,IAAAF,MAAA,OACvB+uJ,EAAU,SAAAn7J,GAAAC,QAAA,OAAA4+D,QAAA,EAAAsJ,SAAA,SAAA77D,OAAA,EAAAF,MAAA,KACtCivJ,EAAuC,qBACvC5vJ,EAAA,gBAAAzL,GAAA6+D,QAAA,EAAAvyD,OAAA,IAAAF,MAAA,SAEAivJ,EAAuC,qBACvC5vJ,EAAA,iBAAAzL,GAAA6+D,QAAA,EAAAzyD,MAAA,EAAAE,OAAA,SAGA81E,EAA4B,WAC5Bi5E,EAAuC,qBACvC5vJ,EAAoC,gBAAO2vJ,GACPp7J,GAAO6+D,QAAA,EAAAvwD,OAAA,IAC3CtO,GAAA6+D,QAAA,EAAAvwD,OAAA,SAGA+sJ,EAAuC,qBACvC5vJ,EAAoC,iBAAO2vJ,GACPp7J,GAAO6+D,QAAA,EAAAvwD,OAAA,IACPtO,GAAO6+D,QAAA,GAAAvwD,OAAA,KAC3CtO,GAAA6+D,QAAA,EAAAvwD,OAAA,gBAQAyuM,EAAgBvoM,eAAA,mBACPX,KAAOuoM,KACPvoM,KAAOzV,GAAQ,aAClByV,KAAAzV,GAAA,YAEN2+M,EAAmB/nM,gBACnB5I,QAAAyH,KAAAzV,GAAsC,QACtC4+M,oBAA2BnpM,KAAAzV,GAAO,QAClCkQ,SAAAuF,KAA0BzV,GAAO,QACjC6+M,eAA2BppM,KAAAzV,GAAO,QAClCypE,SAAmBh0D,KAAOzV,GAAA,QAC1B4J,QAAA6L,KAAAzV,GAAA,gBAAA2V,MAAA0oM,OAECM,KAODyB,GAAA,WACA,QAAAC,GAAAhD,GACAr4M,KAAAmhE,MAAAk3I,EACAr4M,KAAAs7M,eAAA,EAEAt7M,KAAAw4M,cAAA,GAAAx9M,IAAkC,aAClCgF,KAAA44M,eAA0B,GAAA59M,IAAY,aACtCgF,KAAAu7M,OAAA,GAA0BvgN,IAAA,aAC1BgF,KAAAw7M,OAAA,GAAAxgN,IAAA,aAsHC,MAjHDqgN,GAAgB/+M,UAAA+H,SAGhB,WACA,GAAAhB,GAAArD,IACAA,MAAAmhE,MAAAi4I,cAAAZ,cAAA79L,UAAA,SAAAnV,GACAnC,EAAAm1M,cAAAjtM,KAAA/F,GACAA,EAAA+zM,cAGSl2M,EAAA+iK,KAAA5pK,KAAA6G,KAETrD,KAAAqzH,QACArzH,KAAAqzH,OAAAukF,cAAAj9L,UAAA,WACatX,EAAAy0M,eAGb93M,KAAAmhE,MAAAi4I,cAAAR,eAAAj+L,UAAA,SAAAnV,GACSnC,EAAAu1M,eAAArtM,KAAA/F,KAETxF,KAAAmhE,MAAAi4I,cAA6BP,gBAAAl+L,UAAA,SAAAnV,GAC7B,GAA6Bi2M,GAC7B72M,EAAAvB,EAAA89I,KAAAv8I,MAAAw1M,SACA50M,KAAAnC,EAAA89D,MAAAi4I,cAAA9Z,eAGAj8L,EAAA89I,KAAAy4D,oBACA6B,EAAAj2M,IAAAZ,EAAA,IAAAA,EAAAvG,OAAA,EAAAuG,EAAA,GAAAA,EAAA,IAESvB,EAAA89D,MAAAi4I,cAAAnkJ,OAAAwmJ,OASTJ,EAAA/+M,UAAAw7M,WAMA,SAAAnqJ,OACA,KAAAA,MAAA3tD,KAAAqzH,OAAA01C,eACA/oK,KAAAmhE,MAAA+3I,UAAAC,UAAAn5M,KAAAomK,OAAApmK,KAAAyW,KAAAk3C,IAOA0tJ,EAAA/+M,UAAA8pK,KAKA,WACApmK,KAAAmhJ,KAAAilB,OACApmK,KAAAw7M,OAAAjwM,KAAAvL,OAQAq7M,EAAA/+M,UAAAma,KAMA,SAAAk3C,OACA,KAAAA,MAAA3tD,KAAAqzH,OAAA01C,eACA/oK,KAAAmhJ,KAAA1qI,KAAAk3C,EAAA3tD,KAAAs7M,eACAt7M,KAAAu7M,OAAAhwM,KAAAvL,OAMAq7M,EAAA/+M,UAAAo/M,eAIA,WACA17M,KAAAqzH,QAAArzH,KAAAs7M,eACAt7M,KAAAmhJ,KAAA+4D,eAAAl6M,KAAAqzH,OAAA01C,eAAA,IAGAsyC,EAAgB7qM,aAChBC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,eACAE,SAAA,uKACiBgF,WAAIkjM,QAIrBqC,EAAgBjqM,eAAA,mBACVX,KAAAuoM,MAENqC,EAAAzpM,gBACAyhH,SAAkB5iH,KAAOzV,GAAY,aAAA2V,MAAS+mM,MAC9Cv2D,OAAA1wI,KAAAzV,GAAkC,aAAK2V,MAAE+oM,MACzC4B,gBAA2B7qM,KAAOzV,GAAA,QAClCw9M,gBAA4B/nM,KAAAzV,GAAO,SACnC49M,iBAA2BnoM,KAAAzV,GAAQ,SACnCugN,SAAoB9qM,KAAOzV,GAAA,SAC3BwgN,SAAA/qM,KAAAzV,GAAmC,SACnC0gN,iBAAAjrM,KAAAzV,GAAA,aAAA2V,MAAA,oBAEC0qM,KAODM,GAAA,WACA,QAAAC,MAqBC,MAnBDA,GAAgBprM,aAChBC,KAAAzV,GAAA,SAAA2V,OACA/e,SACwBynN,GACA3B,GACAgC,GACxB0B,IAEAhpM,cACwBgpM,GACA/B,GACA3B,GACxBgC,IAEArnM,SACA8qI,GAAA,kBAICy+D,KCxvBDC,GAAA,SAAAhuL,GAAA,MAAAA,GAAAsa,QAAA,kCACA2zK,GAAA,WACA,QAAAA,MAcC,MAZDA,GAAAx/M,UAAAo2J,UAAA,SAAA33J,EAAAorC,GACA,IAAAA,EAAAvC,OACA,MAAA7oC,EAEA,KACA,GAAAugK,GAAA,GAAApuF,QAAA,IAAA2uI,GAAA11K,GAAA,QACA,OAAAprC,GAAAotC,QAAAmzH,EAAA,aAEA,MAAAr+J,GACA,MAAAlC,KAGC+gN,IAEDA,IAAYtrM,aACZC,KAAAzV,GAAA,KAAA2V,OACaoC,KAAI,eAGjB,IAEAgpM,IAAA,UACAC,GAAA,QAEAC,IACA36E,OAAA,SACA46E,YAAA,cACAC,YAAA,cACAC,IAAA,OAEAC,IACAn+K,EAAA+9K,GAAA36E,OACAn+F,GAAA84K,GAAAC,YACA34K,GAAA04K,GAAAE,YACAt9K,EAAAo9K,GAAAG,KAKAE,GAAA,WACA,QAAAA,KACAt8M,KAAAmhE,OACAo7I,UAAA,EACAC,UAAA,EACA/2M,UAAA5C,IAuCC,MApCDy5M,GAAAhgN,UAAAmgN,eAAA,SAAAn4K,EAAA/wB,GACA+wB,EAAAooK,aAAAgQ,QAZA,OAYA79L,KAAAE,UAAAxL,KAEA+oM,EAAAhgN,UAAAqgN,eAAA,SAAAr4K,GACA,GAAAr8B,GAAAq8B,EAAAooK,aAAAkQ,QAfA,OAgBA,KACA,MAAA/9L,MAAAC,MAAA7W,GAEA,MAAAwU,GACA,SAGA6/L,EAAAhgN,UAAAugN,UAAA,SAAAC,GACA98M,KAAA88M,UAEAR,EAAAhgN,UAAAygN,YAAA,SAAAC,GACAh9M,KAAAg9M,YAEAV,EAAAhgN,UAAA2gN,aAAA,SAAA1pM,EAAA2pM,EAAAC,GACAn9M,KAAAo9M,YACAp9M,KAAA88M,OAAAO,kBAAA9pM,EAAA2pM,GACAl9M,KAAAg9M,SAAAM,mBAAA,EAAA/pM,EAAA4pM,IAEAb,EAAAhgN,UAAAihN,SAAqC,SAAAlF,GACrCr4M,KAAAmhE,MAAAzmE,OAAAusC,UAAAjnC,KAAAmhE,MAAAk3I,IAEAiE,EAAAhgN,UAAAu5D,SAAA,SAAA58C,GACA,MAAAA,GAAAjZ,KAAAmhE,MAAAloD,GAAAjZ,KAAAmhE,OAEAm7I,EAAAhgN,UAAA8gN,UAAA,WACAp9M,KAAAu9M,UACAhB,UAAA,EACAC,UAAA,EACS/2M,UAAA5C,MAGRy5M,IAEDA,IAAY9rM,aACZC,KAAAzV,GAAA,YAEA,IAAA4b,KACA4mM,UACAC,iBACAC,qBACAC,SAAAjyL,IACA6pC,YA1EA,QA2EAqoJ,qBA1EA,kBA2EAC,cACAC,mBACAC,sBAAyB,EACzBC,iBACAC,MAAA,GACAC,qBAAA,IACAtrM,QAAA,KACAurM,WAAA,GACAC,aAAA,EACAC,UAAA,EACAC,WAAA,EACAC,YAAA,EACAC,kBAAA,IACAC,aAAA,EACAC,WAAA,EACAC,UAAA,EACAC,YAAA,EACAC,gBAAA,EACAC,UAAA,EACAC,QAAA,EACAr3B,SAAA,GACA1G,SAAA,EACAg+B,SAAA,GACAC,eAAAp8M,GACAq8M,aAAAr8M,GACA2jK,UAAA,UACA24C,WAAA,QACAC,mBACAne,MAAA,QACAoe,MAAA,UAGAC,UACA94C,UAAA,UACA24C,WAAA,QACAtF,cAAA,EACA3uM,OAAA,OACA0uM,mBAAA,EACA2F,qBAAA,EACAC,kBAAA,EACAC,aAAA/zL,IACAg0L,UAAA,EACApE,eAAA,EACA72I,OAAA,IACK6hG,gBASLq5C,GAAA,WACA,QAAAA,MAMC,MAJDA,GAAArjN,UAAAsjN,WAAA,SAAAnsM,GACAksM,EAAA/oM,SAAA4mM,SAAA9iN,OAAAusC,UAA4DrwB,GAAA4mM,SAAA/pM,EAAA+pM,UAC5DmC,EAAA/oM,SAAA0oM,SAAA5kN,OAAAusC,UAAArwB,GAAA0oM,SAAA7rM,EAAA6rM,WAECK,IAEDA,IAAS/oM,SAAQA,EAIjB,IAAAipM,IAAA,WACA,QAAAA,KACA7/M,KAAAS,UACAT,KAAAwmK,UAAAm5C,GAAA/oM,SAAA4mM,SAAAh3C,UACAxmK,KAAAm/M,WAAAQ,GAAA/oM,SAAA4mM,SAAA2B,WAsCC,MApCDzkN,QAAAI,eAAA+kN,EAAAvjN,UAAA,SACA0F,IAAA,WACS,MAAAhC,MAAAS,QAETkC,IAAA,SAAAiC,GACA5E,KAAAS,OAAAmE,EACS5E,KAAA8/M,kBAAA9/M,KAAAS,SAETgC,YAAA,EACKC,cAAA,IAELm9M,EAAAvjN,UAAAyjN,UAAA,WACA//M,KAAAggN,sBAEAH,EAAAvjN,UAAA2jN,WAAA,SAAAr7M,GACA5E,KAAAS,OAAAmE,OAEAi7M,EAAAvjN,UAAA4jN,iBAAA,SAAAlyL,GACAhuB,KAAA8/M,kBAAA9xL,GAEA6xL,EAAAvjN,UAAA6jN,kBAAA,SAAAnyL,GACAhuB,KAAAggN,mBAAAhyL,GAEA6xL,EAAAvjN,UAAA8jN,aAAsC,SAAA56M,EAAsB66M,OAC5D,KAAAA,OAAA,EACA,IAAA90L,GAAe80L,GAAQrgN,KAAAs/M,SAAAt/M,KAAAs/M,SAAAH,WAAAn/M,KAAAm/M,UACvB,OAAA14C,IAAAjhK,KAAA+lB,GAAA/lB,GAEAq6M,EAAAvjN,UAAAgkN,eAAsC,SAAA96M,EAAsB66M,OAC5D,KAAAA,OAAA,EACA,IAAA90L,GAAe80L,GAAQrgN,KAAAs/M,SAAAt/M,KAAAs/M,SAAA94C,UAAAxmK,KAAAwmK,SACvB,OAAAC,IAAAjhK,KAAA+lB,GAAA/lB,GAEAq6M,EAAAvjN,UAAAikN,gBAAA,SAAA96M,GACA,MAAAzF,MAAA4E,MAAAhH,OAAA,SAAA4H,EAAAmoD,GAAA,MAAAA,KAAAloD,KAECo6M,IAEDA,IAAAjuM,gBACA40J,YAAoB/1J,KAAAzV,GAAO,QAC3BmkN,aAAA1uM,KAAAzV,GAAA,QAYA,IAAAwlN,IAAA,WACA,QAAAC,KACAzgN,KAAA0gN,SAAA,GAA0B1lN,IAAY,aACtCgF,KAAAqnM,OAAA,GAAArsM,IAA2B,aAC3BgF,KAAA2gN,QAAA,GAA2B3lN,IAAA,aAC3BgF,KAAA4gN,QAAA,GAAA5lN,IAA6B,aAC7BgF,KAAA6gN,UAAA,GAAA7lN,IAAmC,aACnCgF,KAAA8gN,gBAAA,GAAA9lN,IAAA,aACAgF,KAAA69M,cACA79M,KAAA89M,mBACA99M,KAAAioM,SAAA,GACAjoM,KAAAq6D,UAAwB,EACxBr6D,KAAAwF,KAAA,GAAAiiK,IAAA,aAAA1sK,MAAA,GAAAs/D,SAAAr6D,KAAAq6D,WAkFC,MAhFD3/D,QAAAI,eAAA2lN,EAAAnkN,UAAA,aACA0F,IAAA,WACS,MAAAhC,MAAAwF,KAAAzK,OAET4H,IAAA,SAAAyT,GACApW,KAAAwF,KAAAyvJ,SAAA7+I,GACSpW,KAAA8gN,gBAAAv1M,KAAA6K,IAET3T,YAAA,EACKC,cAAA,IAEL+9M,EAAAnkN,UAAA+H,SAAA,WACArE,KAAAwF,KAAAu7M,cAAA/gN,KAAA69M,YACA79M,KAAAwF,KAAAw7M,mBAAwBhhN,KAAA89M,iBACxB99M,KAAAoe,KAAA,GAAAqpJ,IAAA,WACSjiK,KAAAxF,KAAAwF,QAGTi7M,EAAAnkN,UAAAkI,YAAA,SAAAC,GACAA,EAAA,WAAAA,EAAA,SAAAw8M,cACAx8M,EAAA,SAAAm0L,aACA54L,KAAAoe,KAAAyuK,SAAA,KAAA7L,UAGAhhL,KAAAoe,KAAAyuK,SAAA,KAAAzsK,WAIA1lB,OAAAI,eAAA2lN,EAAAnkN,UAAA,SACA0F,IAAA,WACS,MAAAhC,MAAAoe,KAAApc,IAAA,SAETS,YAAA,EACKC,cAAA,IAEL+9M,EAAAnkN,UAAA4kN,eAAA,WACA,GAAA37I,GAAA,mBAAAtqE,uBAAA4H,EACA,SAAA0iE,KAAA0oD,gBAAAjuH,KAAA9B,MAAAkG,eAEAq8M,EAAAnkN,UAAA6kN,iBAAA,SAAA7qM,GACA,GAAAjT,GAAArD,IACA,OAAAtF,QAAAusB,KAAA3Q,GACA1Y,OAAA,SAAAgX,GAAiC,MAAAvR,GAAAtI,MAAsBohF,SAAEvnE,KACzDrY,IAAA,SAAAqY,GAAA,MAAA0B,GAAA1B,MAEA6rM,EAAAnkN,UAAA8kN,UAAA,WACA,GAAA1kM,GAAA1c,KAAAoe,KAAAijM,EAAA3kM,EAAA2kM,MAAAtmN,EAAA2hB,EAAA3hB,MAAAsjB,EAAA3B,EAAA2B,KACA,OAAAgjM,IAAAtmN,EAAAyK,OAAA6Y,GAEAoiM,EAAAnkN,UAAA6wD,MAAA,WACAntD,KAAA9B,MAAAkG,cAAA+oD,SAEAszJ,EAAAnkN,UAAAo/D,KAAA,WACA17D,KAAA9B,MAAAkG,cAAAs3D,QAEA+kJ,EAAAnkN,UAAAglN,mBAAA,WACA,MAAAthN,MAAA9B,MAAAkG,cAAAwE,yBAEA63M,EAAAnkN,UAAAyY,QAAA,WACA,GAAA7W,GAAA8B,KAAA9B,MAAAkG,aACAlG,GAAAqjN,cAAAvkN,YAAAkB,IAEAuiN,EAAAnkN,UAAAklN,UAAA,SAAAhI,GAMA,MALAx5M,MAAAyhN,UAAAzhN,KAAAjF,YACA,UAAAy+M,EAAAvgM,MACAjZ,KAAAi2G,OAAAujG,GACAx5M,KAAAyhN,UAAA,IAEAzhN,KAAA6gN,UAAAt1M,KAAAiuM,IAEAiH,EAAAnkN,UAAAolN,QAAA,SAAAlI,GAEA,MADAx5M,MAAAyhN,UAAAzhN,KAAAjF,YACAiF,KAAA4gN,QAAAr1M,KAAAiuM,IAEAiH,EAAAnkN,UAAA25G,OAAA,SAAAujG,GACAA,EAAA3jG,iBACA71G,KAAAoe,KAAAC,OACAre,KAAA0gN,SAAAn1M,KAAAiuM,IAGCiH,IAEDD,IAAYhwM,aACZC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,iBACAO,QAAA,g9JACaL,SAAI,owBAGjB0vM,GAAkB5uM,gBAClB8uM,WAAgBjwM,KAAOzV,GAAM,SAC7BqsM,SAAiB52L,KAAAzV,GAAO,SACxB2lN,UAAiBlwM,KAAOzV,GAAA,SACxB4lN,UAAAnwM,KAAmBzV,GAAO,SAC1B6lN,YAAApwM,KAAyBzV,GAAO,SAChC8lN,kBAAqBrwM,KAAOzV,GAAO,SACnCu6D,cAAoB9kD,KAAOzV,GAAK,QAChC6iN,aAAAptM,KAAyBzV,GAAO,QAChC8iN,kBAAwBrtM,KAAAzV,GAAO,QAC/B4X,UAAAnC,KAAoBzV,GAAO,QAC3BmjN,aAAkB1tM,KAAOzV,GAAK,QAC9BitM,WAAkBx3L,KAAOzV,GAAA,QACzBq/D,WAAe5pD,KAAOzV,GAAA,QACtBkD,QAAAuS,KAAmBzV,GAAO,UAAO2V,MAAA,WACjC8wM,YAAAhxM,KAAAzV,GAAA,QAEA,IAAI2mN,IAAAjnN,OAAAM,GAAgB,6BAAA2kN,IAAA/oM,SAAA0oM,WACpBsC,GAAA,WACA,QAAAC,GAAAzrF,GACA,GAAA/yH,GAAArD,IACAA,MAAAo2H,WACAp2H,KAAAkL,QAAA,GAAAy2M,KAAAz2M,OACAlL,KAAA45M,mBAAA,GAAA+H,KAAA/H,kBACA55M,KAAAu/M,qBAAA,GAAAoC,KAAApC,oBACAv/M,KAAAw/M,mBAAA,GAAAmC,KAAAnC,kBACAx/M,KAAAy/M,cAAA,GAAAkC,KAAAlC,aACAz/M,KAAAwmK,WAAA,GAAAm7C,KAAAn7C,UACAxmK,KAAAm/M,YAAA,GAAAwC,KAAAxC,WACAn/M,KAAAsmK,YAAA,GAAAq7C,KAAAr7C,WACAtmK,KAAA65M,cAAA,GAAA8H,KAAA9H,aACA75M,KAAA0/M,UAAA,GAAAiC,KAAAjC,SACA1/M,KAAAs7M,eAAA,GAAAqG,KAAArG,cACAt7M,KAAAykE,QAAA,GAAAk9I,KAAAl9I,OACAzkE,KAAA4E,SACA5E,KAAAw9M,SAAAx9M,KAAAo2H,SAAAp0H,IAAA8/M,IACA9hN,KAAA+hN,sBACA/hN,KAAAyW,KAAA,WACA,GAAAurM,GAAA3+M,EAAAm6M,SAAA54M,MAAAvG,SAAAgF,EAAAm6M,SAAAG,SACA5iN,EAAAsI,EAAA4+M,eACAC,EAAAnnN,EAAA6oC,OAAAvlC,QAAAgF,EAAAm8M,kBACA7xJ,EAAAtqD,EAAAgjE,oBACAzhE,EAAAvB,EAAA8+M,iBAAApnN,GACAqnN,EAAAx9M,EAAAvG,OAAA,EACA0pF,GAAA,IAAA1kF,EAAA81M,UACAoG,EAAAl8M,EAAAk8M,qBAAA6C,IAAArnN,EACAsnN,EAAAh/M,EAAAm6M,SAAAx8B,QACAshC,EAAAv6H,IAAAq6H,GAAAF,GAAA3C,GACAgD,EAAAl/M,EAAA81M,YAAAiJ,CACA,OAAA/+M,GAAAm/M,wBAAAN,EACA7+M,EAAAo/M,uBAAA1nN,IAEAsI,EAAAk8M,sBAAAxkN,GAAAinN,GAAAK,EACAh/M,EAAAi8M,SAAAl5C,QAEA/iK,EAAAq/M,SAAA99M,QACA09M,EACAj/M,EAAAi8M,SAAA7oM,KAAAk3C,GAEA40J,GACAl/M,EAAA+iK,UAGApmK,KAAA2iN,cAAA,SAAAn9M,GAAA,MAAA4jJ,IAAA/lJ,MAAA,qBACA,GAAAkQ,EACA,OAAAmyI,IAAA1lJ,KAAA,SAAA0c,GACA,OAAAA,EAAAyC,OACA,OAEA,MADA5L,GAAAvT,KAAA4iN,eAAAp9M,IACA,EAAAxF,KAAAw9M,SAAAF,mBAAA,EAAA/pM,GAAAoyB,MAAA,cACA,QAEA,MADAjpB,GAAAupI,QACA,SAIAjmJ,KAAA6iN,WAAA,WACAx/M,EAAAuB,UAEA5E,KAAAyiN,uBAAA,SAAArsM,GACA/S,EAAAy/M,iBAAA,EACA,IAAAC,GAAA,SAAA96M,GACA5E,EAAAy/M,iBAAA,GACAE,cAAA/6M,GACA5E,EAAAq/M,SAAAr/M,EAAA8+M,iBAAA/rM,IACA/S,EAAAuB,MAAAvG,OACAgF,EAAAi8M,SAAA7oM,KAAApT,EAAAgjE,qBAGAhjE,EAAAi8M,SAAAl5C,OAGA/iK,GAAAm/M,uBAAsBpsM,GACtBqqL,KAAA/lM,OAAA+8M,GAAA,UACA98L,UAAAooM,EAAA,iBAAA1/M,GAAAy/M,iBAAA,MA+HC,MA5HDpoN,QAAAI,eAAA+mN,EAAAvlN,UAAA,qBACA0F,IAAA,WACA,GAAAqB,GAAArD,KACA4E,EAAA5E,KAAA+hN,kBACA,OAAAn9M,GAGAA,EAAArI,IAAA,SAAAiJ,GACA,sBAAAA,IAAAkX,OAAArZ,EAAAmjK,WAAAhhK,EAAAkX,EAAArZ,EAAA87M,YAAA35M,EAAAkX,GAAAlX,CACa,IAAAkX,SAGb/Z,IAAA,SAAAiC,GACS5E,KAAA+hN,mBAAAn9M,GAETnC,YAAA,EACKC,cAAA,IAELm/M,EAAAvlN,UAAA+H,SAAA,WACA,GAAAhB,GAAArD,IACAA,MAAAw4M,gBAAA79L,UAAA,SAAAnV,GACSnC,EAAAs/M,cAAAn9M,KAETxF,KAAAw7M,SAAA7gM,UAAA3a,KAAA6iN,WACA,IACAI,GAAAjjN,KAAA0/M,QACA1/M,MAAAw9M,SACA0F,aACApsF,eACA2pE,KAAA/lM,OAAA+8M,GAAA,cALA,KAKA/8M,OAAA+8M,GAAA,iBAAA18M,GACA,WAAAkoN,GACAloN,EAAAsD,OAAA,KAIAsc,UAAA3a,KAAAyW,OAEAorM,EAAAvlN,UAAA49M,eAAA,WACA,GAAAvsJ,GAAA3tD,KAAAw9M,SAAA2F,UAAA7B,oBACAthN,MAAAs/M,SAAAn+D,KAAA+4D,eAAAvsJ,EAAA3tD,KAAAs7M,gBAEA5gN,OAAAI,eAAA+mN,EAAAvlN,UAAA,aACA0F,IAAA,WACS,MAAAhC,MAAAs/M,SAAAn+D,KAAAhgF,MAAA+3I,UAAAC,WAET12M,YAAA,EACKC,cAAA,IAELm/M,EAAAvlN,UAAAk/M,OAAA,WACA,MAAAx7M,MAAAs/M,SAAA9D,QAEAqG,EAAAvlN,UAAAk8M,cAAA,WACA,MAAAx4M,MAAAs/M,SAAA9G,eAEA99M,OAAAI,eAAA+mN,EAAAvlN,UAAA,gBACA0F,IAAA,WACS,MAAAhC,MAAAs/M,SAAAn+D,KAAAhgF,MAAAi4I,cAAA9Z,cAET78L,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA+mN,EAAAvlN,UAAA,SACA0F,IAAA,WACS,MAAAhC,MAAAs/M,SAAAn+D,KAAAhgF,OAET1+D,YAAA,EACKC,cAAA,IAELm/M,EAAAvlN,UAAA8pK,KAAA,WACApmK,KAAA6iN,aACA7iN,KAAAs/M,SAAAl5C,QAEAy7C,EAAAvlN,UAAAo/M,eAAA,WACA17M,KAAAm5M,WAAAn5M,KAAAs7M,eAGAt7M,KAAAk6M,kBAEA2H,EAAAvlN,UAAA8mN,aAAA,WACApjN,KAAAs/M,SAAAl5C,QAEAy7C,EAAAvlN,UAAA2lN,aAAA,WACA,GAAAoB,GAAArjN,KAAAw9M,SAAA6F,SACA,OAAAA,KAAAxiM,WAAA+iB,OAAA,IAEAi+K,EAAAvlN,UAAA+pE,kBAAA,WACA,MAAArmE,MAAAw9M,SAAA2F,UAAA7B,sBAEAO,EAAAvlN,UAAAsmN,eAAA,SAAAp9M,GACA,GAAA3I,GAAA,gBAAA2I,GAAAzK,MAAAyK,EAAAzK,MAAAyK,EAAAzK,MAAAiF,KAAAwmK,WACAzrK,EAA+B,gBAA/ByK,GAA+BzK,MAAsByK,EAAAzK,MAAAyK,EAAAzK,MAAAiF,KAAAm/M,WACrD,OAAAzkN,QAAAusC,UAAAzhC,EAAAzK,OAAA2hB,OAAA1c,KAAAw9M,SAAAh3C,WAAA3pK,EAAA6f,EAAA1c,KAAAw9M,SAAA2B,YAAApkN,EAAA2hB,GACA,IAAAA,IAEAmlM,EAAAvlN,UAAA6lN,iBAAA,SAAApnN,GACA,GAAAsI,GAAArD,IACA,KAAAjF,IAAAiF,KAAAu/M,oBACA,QAEA,IAAA+D,GAAAtjN,KAAAw9M,SAAAoB,UACA,OAAA5+M,MAAAujN,kBAAA3lN,OAAA,SAAA4H,GACA,GAAAg+M,IAAAF,GAAAjgN,EAAAm6M,SAAA1mL,KAAAnb,KAAA,SAAApI,GACA,GAAA4rM,GAAA97M,EAAAm6M,SAAA2B,UAEa,QADb,gBAAA5rM,GAAA2+F,MAAA3+F,EAAA2+F,MAAA3+F,EAAA2+F,MAAAitG,MACa35M,EAAAnC,EAAA87M,aAEJ,OAAA97M,GAAAijK,WAAAvrK,EAAAyK,KAAA,IAAAg+M,KAGT3B,EAAAvlN,UAAAomN,SAAA,SAAA99M,GACA5E,KAAA4E,QAAAjH,MAAA,EAAAqC,KAAAy/M,cAAA76M,EAAAvG,SAEAwjN,EAAAvlN,UAAA0mN,cAAA,SAAA/6M,GACA,GAAA5E,GAAArD,IAKA,OAJAA,MAAAujN,kBAAAt7M,EAAA1L,IAAA,SAAAiJ,GACA,sBAAAA,IAAAkX,OAAArZ,EAAAmjK,WAAAhhK,EAAAkX,EAAArZ,EAAA87M,YAAA35M,EAAAkX,GAAAlX,CACS,IAAAkX,KAET1c,MAEA6hN,EAAAvlN,UAAAwmN,gBAAA,SAAAzK,GAEA,MADAr4M,MAAAw9M,SAAA5vD,UAAAyqD,EACAr4M,MAEC6hN,IAEDD,IAAYpxM,aACZC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,qBACaE,SAAI,+3BAGjB8wM,GAAYxwM,eAAW,mBACrBX,KAAAzV,GAAA,YAEF4mN,GAAyBhwM,gBACzB0tM,WAAmB7uM,KAAAzV,GAAO,UAAA2V,MAAeyqM,MACzCqI,YAAgBhzM,KAAOzV,GAAO,gBAAA2V,MAAA3V,GAAA,eAC9BkQ,SAAAuF,KAAAzV,GAAkC,QAClC4+M,oBAAAnpM,KAA6BzV,GAAO,QACpCukN,sBAAA9uM,KAAgCzV,GAAO,QACvCwnN,yBAA2B/xM,KAAOzV,GAAO,QACzCwkN,oBAAsB/uM,KAAOzV,GAAO,QACpCykN,eAAmBhvM,KAAOzV,GAAO,QACjCwrK,YAAoB/1J,KAAAzV,GAAO,QAC3BmkN,aAAoB1uM,KAAOzV,GAAA,QAC3BsrK,aAAA71J,KAAsBzV,GAAO,QAC7B6+M,eAAkBppM,KAAOzV,GAAO,QAChC0kN,WAAAjvM,KAAuBzV,GAAO,QAC9BsgN,gBAAuB7qM,KAAAzV,GAAO,QAC9BypE,SAAAh0D,KAAAzV,GAAkC,QAClCuoN,oBAAwB9yM,KAAOzV,GAAA,QAC/B0gN,iBAAsBjrM,KAAOzV,GAAY,aAAA2V,MAAA,mBACzCyyM,eAAA3yM,KAAAzV,GAAA,aAAA2V,MAAA,iBAEA,IAAA+yM,IAAA,WACA,QAAAA,KACA1jN,KAAAmhE,MAAA,OAEC,MAAAuiJ,KAEDA,IAAKlzM,aACLC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,aACAO,QAAA,oaACAL,SAAA,gEACAqvL,YACAnhH,EAAwB,OACA+4E,EAAU,OAAAn7J,GAAAoM,MAAA,EAAAyyD,QAAA,KAClCw8F,EAAmC,mBACnC5vJ,EAAgC,IAAO2vJ,GACPp7J,GAAO6+D,QAAA,EAAAvwD,OAAA,EAAAlC,MAAA,MAAA26M,aAAwC,SAC/C/mN,GAAO6+D,QAAA,EAAAvwD,OAAA,GAAAlC,MAAA,QACvCpM,GAAA6+D,QAAA,GAAAvwD,OAAA,EAAAlC,MAAA,OAAA26M,aAAA,qBAOAD,GAAA9xM,gBACAuvD,QAAA1wD,KAAAzV,GAAA,QAEA,IAAA4oN,IAAA,mBAAA3jN,eAAA69B,WACAC,UAAA,SACA8lL,OAAA,cAEIpiL,GAAA,SAAAzD,KAAY4lL,GAAA7lL,YAAA,aAAAC,KAAA4lL,GAAAC,QAChBC,GAAA,WACA,QAAAC,GAAA7kN,EAAAC,EAAA6kN,GACAhkN,KAAAd,UACAc,KAAAb,WACAa,KAAAgkN,QACAhkN,KAAAq6D,UAAA,EACAr6D,KAAAq/L,SAAA,GAA4BrkM,IAAA,aAC5BgF,KAAA8gL,SAAA,GAA0B9lL,IAAY,aACtCgF,KAAAqnM,OAAA,GAAArsM,IAA6B,aAC7BgF,KAAAwhN,UAAA,GAAAxmN,IAA+B,aAC/BgF,KAAAikN,YAAA,GAAAjpN,IAAA,aACAgF,KAAAkkN,SAAA,EACAlkN,KAAAmkN,YAAA,OAsIC,MApIDzpN,QAAAI,eAAAipN,EAAAznN,UAAA,YACA0F,IAAA,WACS,sBAAAhC,MAAAkyG,QAAA,IAAAlyG,KAAAkyG,MAAA,UAETzvG,YAAA,EACKC,cAAA,IAELqhN,EAAAznN,UAAA24D,OAAA,SAAAukJ,GACAx5M,KAAAokN,UAAApkN,KAAAq6D,WAGAm/I,GACAA,EAAA9Z,kBAEA1/L,KAAAmtD,QACAntD,KAAAq/L,SAAA9zL,KAAAvL,KAAAkyG,SAEA6xG,EAAAznN,UAAA6kB,OAAA,SAAAq4L,GACAA,EAAA9Z,kBACA1/L,KAAA8gL,SAAAv1K,KAAAvL,OAEA+jN,EAAAznN,UAAA6wD,MAAA,WACAntD,KAAAd,QAAAkF,cAAA+oD,SAEA42J,EAAAznN,UAAA+nN,KAAA,WACArkN,KAAAskN,QAAA,GAEAP,EAAAznN,UAAAioN,QAAA,SAAAjgL,GACA,GAAAtkC,KAAAkkN,SACA,QAAA5/K,EAAAkwE,QACA,MAAAx0G,MAAAysG,gBAAAnoE,OAIAtkC,MAAAwhN,UAAAj2M,MAAA+4B,QAAA4tE,MAAAlyG,KAAAkyG,SAGA6xG,EAAAznN,UAAAkoN,MAAA,WACA,GAAAr2J,GAAAnuD,KAAAd,QAAAkF,cAAA+pD,SACAA,GAAAzlC,IAAA,SACA1e,WAAA,iBAAAmkD,GAAAhtC,OAAA,eAEA4iM,EAAAznN,UAAAmoN,eAAA,WACA,GAAAzkN,KAAA2+M,SACA,MAAA3+M,MAAAkkN,YAAArhN,GAAA7C,KAAA0kN,oBAGAX,EAAAznN,UAAAqoN,UAAA,SAAArgL,GACA,GAAAtkC,KAAA2+M,SAAA,CAGA3+M,KAAAysG,iBACA,IAAA1xG,GAAAupC,EAAAtrB,OAAAnb,UACA8L,EAAA,gBAAA3J,MAAAkyG,MACAn3G,EACAL,OAAAusC,UAAAjnC,KAAAkyG,OAAAx1F,OAAA1c,KAAAwmK,WAAAzrK,EAAA2hB,GACA1c,MAAAqnM,OAAA97L,KAAA5B,EACA,IAAA+S,KAEAqnM,EAAAznN,UAAAsoN,gBAAA,SAAAp/M,GACA,sBAAAA,OAAAxF,KAAAwmK,YAEA9rK,OAAAI,eAAAipN,EAAAznN,UAAA,mBACA0F,IAAA,WACS,OAAAhC,KAAAokN,WAAApkN,KAAAkkN,SAAAziL,IAAAzhC,KAAA6kN,WAETpiN,YAAA,EACKC,cAAA,IAELqhN,EAAAznN,UAAAmwG,gBAAA,SAAA+sG,GACA,GAAArrJ,GAAAnuD,KAAAd,QAAAkF,cAAA+pD,UACAjwD,EAAA8B,KAAA8kN,wBAGA,IAFA9kN,KAAAkkN,SAAA,EACA/1J,EAAAhtC,OAAA,iBACAjjB,EAEA,WADA8B,MAAA+kN,uBAAA/kN,KAAAkyG,MAGAlyG,MAAAglN,cAAA9mN,GACA8B,KAAAgkN,MAAA/sM,gBACAuiM,GACAA,EAAA3jG,kBAGAkuG,EAAAznN,UAAA2oN,oBAAA,WACA,OAAAjlN,KAAAokN,WAAApkN,KAAAq6D,UAAAr6D,KAAA0+M,YAAA1+M,KAAAkkN,SAEAH,EAAAznN,UAAAwoN,uBAAA,WACA,GAAA5mN,GAAA8B,KAAAklN,oBACA,OAAAhnN,KAAAL,UAAA+lC,OAAA,IAEAmgL,EAAAznN,UAAAyoN,uBAAA,SAAA7yG,GACA,GAAAh0G,GAAA8B,KAAAklN,qBACAnqN,EAAAiF,KAAA4kN,gBAAA1yG,EACAh0G,GAAAL,UAAA9C,GAEAgpN,EAAAznN,UAAAooN,iBAAA,WACA1kN,KAAAd,QAAAkF,cAAA+pD,UACAzlC,IAAA,gBACA1oB,KAAAkkN,SAAA,GAEAH,EAAAznN,UAAA0oN,cAAA,SAAA9mN,GACA,GAAAmF,GAAArD,IASA,KARA,SAAAuT,GACA,sBAAAA,GACAA,IAAArV,EACAqV,EAAAlQ,EAAAmjK,aAAAtoK,GAKA8B,KAAAkyG,OAAA,CAGA,GAAAA,GAAA,gBAAAlyG,MAAAkyG,MACAh0G,GACAwe,GACiBjX,MAAAzF,KAAAyF,OACjBiX,EAAA1c,KAAAm/M,YAVA,WACA,MAAA97M,GAAA6uG,MAAA7uG,EAAA87M,cAAA97M,EAAA6uG,MAAA7uG,EAAAmjK,cAUAxmK,KAAAkyG,MAAAlyG,KAAAm/M,YACAjhN,EAAAwe,EAAA1c,KAAAwmK,WAAAtoK,EAAAwe,EACA1c,MAAAmlN,UAAAjzG,GACAlyG,KAAAikN,YAAA14M,MAAAgI,IAAA2+F,EAAAzsG,MAAAzF,KAAAyF,QAGAzF,KAAA+kN,uBAAA/kN,KAAAkyG,MAEA,IAAAx1F,KAEAqnM,EAAAznN,UAAA4oN,mBAAA,WACA,MAAAllN,MAAAd,QAAAkF,cAAA2P,cAAA,sBAECgwM,IAEDD,IAAYtzM,aACZC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,MACAE,SAAA,o9CACaK,QAAI,0nBAGjB2yM,GAAY1yM,eAAa,mBACpBX,KAAOzV,GAAS,aAChByV,KAAOzV,GAAA,YACVyV,KAAAzV,GAAA,qBAEF8oN,GAAsBlyM,gBACtBsgG,QAAAzhG,KAAmBzV,GAAO,QAC1B0jN,YAAkBjuM,KAAOzV,GAAK,QAC9B2jN,WAAkBluM,KAAOzV,GAAA,QACzB8V,WAAmBL,KAAAzV,GAAO,QAC1BwrK,YAAoB/1J,KAAAzV,GAAO,QAC3BmkN,aAAe1uM,KAAOzV,GAAO,QAC7ByK,QAAAgL,KAAmBzV,GAAO,QAC1B6pN,YAAkBp0M,KAAOzV,GAAK,QAC9Bq/D,WAAmB5pD,KAAAzV,GAAO,QAC1BmqN,YAAkB10M,KAAOzV,GAAA,QACzBqkM,WAAkB5uL,KAAOzV,GAAA,SACzB8lL,WAAgBrwK,KAAOzV,GAAM,SAC7BqsM,SAAA52L,KAAmBzV,GAAO,SAC1BwmN,YAAA/wM,KAAqBzV,GAAO,SAC5BipN,cAAgBxzM,KAAOzV,GAAA,SACvBspN,SAAgB7zM,KAAOzV,GAAS,YAAA2V,MAAA,kBAChCouM,SAAiBtuM,KAAAzV,GAAO,UAAA2V,MAAY+yM,MACpCa,UAAA9zM,KAAAzV,GAAA,aAAA2V,MAAA,wBAEA,IAAIwvL,KACJnhH,EAAQ,aACR+4E,EAAA,KAAAn7J,GACS6+D,QAAA,KAETs8F,EAAA,MAAAn7J,GACS6+D,QAAA,KAETw8F,EAAmB,UACnB5vJ,EAAgB,cAAO2vJ,GACPp7J,GAAO6+D,QAAA,EAAAvwD,OAAA,EAAAwnJ,UAAA,yBACP91J,GAAO6+D,QAAA,GAAAvwD,OAAA,GAAAwnJ,UAAA,0BACP91J,GAAO6+D,QAAA,GAAAvwD,OAAA,GAAAwnJ,UAAA,wBACP91J,GAAO6+D,QAAA,IAAAvwD,OAAA,IAAAwnJ,UAAA,wBACvB91J,GAAA6+D,QAAA,EAAAvwD,OAAA,EAAAwnJ,UAAA,6BAGAuF,EAAmB,UACnB5vJ,EAAgB,cAAO2vJ,GACPp7J,GAAO6+D,QAAA,EAAAi3F,UAAA,gBAAAxnJ,OAAA,IACPtO,GAAO6+D,QAAA,EAAAi3F,UAAA,oBAAAxnJ,OAAA,KACvBtO,GAAA6+D,QAAA,EAAAi3F,UAAA,mBAAAxnJ,OAAA,YAMAk6M,IADA,OAAAC,WAEAtuD,QAAA0Q,GAAiB,kBACjBzQ,YAAAt8J,OAAAM,GAAA,6BAAA8mN,MACA7qD,OAAA,IAEIquD,GAAA5qN,OAAAM,GAAiB,6BAAA2kN,IAAA/oM,SAAA4mM,WACjBsE,GAAS,SAAAloM,GAEb,QAAA2rM,GAAApmN,EAAAqmN,GACA,GAAAniN,GAAAuW,EAAApd,KAAAwD,WAkHA,OAjHAqD,GAAAlE,WACAkE,EAAAmiN,eACAniN,EAAAo6M,eAAA,GAAA6H,KAAA7H,cACAp6M,EAAAq6M,mBAAA,GAAA4H,KAAA5H,kBACAr6M,EAAAkyD,aAAA,GAAA+vJ,KAAA/vJ,YACAlyD,EAAAu6M,sBAAA,GAAA0H,KAAA1H,qBACAv6M,EAAAs6M,UAAA,GAAA2H,KAAA3H,SACAt6M,EAAAw6M,YAAA,GAAAyH,KAAAzH,WACAx6M,EAAAy6M,iBAAA,GAAAwH,KAAAxH,gBACAz6M,EAAA06M,sBAAA,GAAAuH,KAAAvH,qBACA16M,EAAA26M,eAAA,GAAAsH,KAAAtH,cACA36M,EAAA46M,OAAA,GAAAqH,KAAArH,MACA56M,EAAA66M,sBAAA,GAAAoH,KAAApH,qBACA76M,EAAAuP,SAAA,GAAA0yM,KAAA1yM,QACAvP,EAAA86M,YAAA,GAAAmH,KAAAnH,WACA96M,EAAA+6M,aAAA,GAAAkH,KAAAlH,YACA/6M,EAAAg7M,UAAA,GAAAiH,KAAAjH,SACAh7M,EAAAi7M,WAAA,GAAAgH,KAAAhH,UACAj7M,EAAAk7M,YAAA,GAAA+G,KAAA/G,WACAl7M,EAAAm7M,mBAAA,GAAA8G,KAAA9G,kBACAn7M,EAAAo7M,aAAA,GAAA6G,KAAA7G,YACAp7M,EAAAq7M,WAAA,GAAA4G,KAAA5G,UACAr7M,EAAAs7M,UAAA,GAAA2G,KAAA3G,SACAt7M,EAAAu7M,YAAA,GAAA0G,KAAA1G,WACAv7M,EAAAw7M,gBAAA,GAAAyG,KAAAzG,eACAx7M,EAAAy7M,UAAA,GAAAwG,KAAAxG,SACAz7M,EAAA07M,QAAA,GAAAuG,KAAAvG,OACA17M,EAAA4kM,UAAA,GAAAqd,KAAA59B,SACArkL,EAAA29K,SAAA,GAAAskC,KAAAtkC,QACA39K,EAAA27M,UAAA,GAAAsG,KAAAtG,SACA37M,EAAA47M,YAAA,GAAAqG,KAAArG,WACA57M,EAAA67M,UAAA,GAAAoG,KAAApG,SACA77M,EAAA+7M,mBAA0B,GAAAkG,KAAYlG,kBACtC/7M,EAAAoiN,MAAA,GAAAzqN,IAA6B,aAC7BqI,EAAAy9K,SAAA,GAA6B9lL,IAAA,aAC7BqI,EAAAg8L,SAAA,GAA4BrkM,IAAY,aACxCqI,EAAAs9M,QAAA,GAA2B3lN,IAAY,aACvCqI,EAAAgkM,OAAA,GAAArsM,IAAiC,aACjCqI,EAAA6/M,aAA4B,GAAAloN,IAAY,aACxCqI,EAAAqiN,QAAA,GAAA1qN,IAAsC,aACtCqI,EAAAsiN,kBAAgC,GAAA3qN,IAAY,aAC5CqI,EAAA4gN,YAAA,GAAAjpN,IAAA,aACAqI,EAAAuqJ,WAAA,EACAvqJ,EAAA+tB,WAAA1U,KAAoCA,EAAAq/L,OAAAr/L,EAAAs/L,OAAYt/L,GAChDrZ,EAAAy9M,gBAAA,GAAA9lN,IAAA,aACAqI,EAAAuiN,eAAA,GACAviN,EAAAunC,UACAvnC,EAAAwiN,UAAA,SAAmCtyM,EAAA9N,OACnC,KAAAA,MAAApC,EAAAuB,MAAAvG,OACA,IAAAuG,GAAAvB,EAAAuB,MACAstG,EAAA7uG,EAA0Bw7M,eAAQtrM,EAAAlQ,EAAA87M,YAAA5rM,CAClClQ,GAAAuB,MAAAshK,GAAAthK,EAAAjH,MAAA,EAAA8H,IACAysG,GACAttG,EAAAjH,MAAA8H,EAAAb,EAAAvG,UAEAgF,EAAAyiN,UAAA,SAAA5zG,GACA,GAAAtuE,GAAA,SAAAjoC,EAAAsd,GACA,sBAAAtd,KAAAioC,OAAAjoC,EAAAsd,GAEA,OAAAve,QAAAusC,UAAA,gBAAAirE,SAAAx1F,OAAArZ,EAAAmjK,WAAAnjK,EAAAy7M,SAAAl7K,EAAAsuE,EAAA7uG,EAAAmjK,WAAAt0D,EAAAx1F,EAAArZ,EAAA87M,YAAA97M,EAAAy7M,SAAAl7K,EAAAsuE,EAAA7uG,EAAA87M,YAAAjtG,EAAAx1F,GACA,IAAAA,IAEArZ,EAAA0iN,WAAA,SAAAxyM,EAAAyyM,OACA,KAAAA,OAAA,EACA,IAAA1mB,GAAAj8L,EAAAi8M,SAAAj8M,EAAAi8M,SAAAhgB,iBAAAz8L,GACA9H,EAAAsI,EAAAi9M,eAAA/sM,GAAAqwB,MACA,IAAA07J,IAAA0mB,IAAAjrN,EACA,QAEA,IAAAkrN,GAAA5iN,EAAA6iN,SAAA3yM,EAAAyyM,EACA,KAAA3iN,EAAAu7M,YAAAqH,GAAA5iN,EAAAo7M,YAAA,CACA,GAAAvsG,GAAA7uG,EAAAyzB,KAAAmxB,KAAA,SAAAziD,GACiB,MAAAnC,GAAA+8M,aAAA56M,EAAA0sG,SAAA7uG,EAAA+8M,aAAA6F,IAEjB/zG,IACAA,EAAAsyG,QAGA,GAAA2B,GAAAH,GAAA3iN,EAAA06M,qBACAqI,IACAH,GAAA5iN,EAAAu7M,YACAv7M,EAAA2+M,gBACA,IAAA3+M,EAAA06M,qBAEA,OAAAqI,GAAAxoN,OAAAwV,SAAA/U,SAAA+nN,EAAA/nN,QAEAgF,EAAAgjN,gBAAA,SAAAp+M,GAAA,MAAAmhJ,IAAA/lJ,MAAA,qBACA,GACAkyJ,GAAmBn/I,EAAWkwM,EAAAC,EAD9BljN,EAAArD,IAEA,OAAA0lJ,IAAA1lJ,KAAA,SAAA0c,GAqBa,MApBb64I,GAAA,WACA,GAAAnjG,GAAAh/C,QAAA,OAAAozM,eACAA,EAAAp0J,EAAA,qBAAAnqD,EAAAu+M,cACA/1M,EAAA2hD,EAAA,mBACA,OAAAo0J,GAAA5J,QAAAnsM,IAAA,IAEA2F,EAAAm/I,IACA+wD,EAAAlwM,EACAytB,MAAA7jC,KAAAw+M,mBACAjiN,IAAA,SAAAiJ,GACA,GAAA+N,GAAAlQ,EAAAyiN,UAAAtgN,EAEiB,OADjBnC,GAAAojN,cAAAlzM,EAAAlQ,EAAAmjK,YACiBnjK,EAAAi6M,mBAAA,EAAA/pM,KAEjBgzM,EAAA,iBAAAv8M,YAAA,iBAAA3G,GAAAojN,cAAA,UACAvqL,QAAA8J,IAAAsgL,GAAAlgL,KAAA,WACA/iC,EAAAqiN,QAAAn6M,KAAA6K,GACiBmwM,MAEjB5gL,MAAA4gL,IACa,QAGbljN,CACA,IAAAqZ,GAyaC,MA9hBDspJ,IAAAu/C,EAAA3rM,GAuHAlf,OAAAI,eAAAyqN,EAAAjpN,UAAA,aACA0F,IAAA,WACS,MAAAhC,MAAA4lN,gBAETjjN,IAAA,SAAAyT,GACApW,KAAA4lN,eAAAxvM,EACSpW,KAAA8gN,gBAAAv1M,KAAA6K,IAET3T,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAyqN,EAAAjpN,UAAA,gBACA0F,IAAA,WACS,WAAAhC,KAAAioM,SAAA,SAETxlM,YAAA,EACKC,cAAA,IAEL6iN,EAAAjpN,UAAA6e,gBAAA,WACA,GAAA9X,GAAArD,IACAA,MAAA0mN,yBACA1mN,KAAA2mN,6BACA3mN,KAAA4mN,6BACA5mN,KAAAkjN,aAAA2D,UAAAxoN,QACA2B,KAAA8mN,6BAEA9mN,KAAAo+M,aAAAp+M,KAAAs+M,YACAt+M,KAAA+mN,wBAEA/mN,KAAAu+M,YACAv+M,KAAAgnN,sBAEA,IAAAC,GAA4BjnN,KAAAmjN,UAAA/kM,KAAA2vK,aAC5Bk5B,GAAAxmB,KAAA/lM,OAAA+8M,GAAA,iBAAA9iM,GAAA,kBAAAA,KAAAgG,UAAA,WACStX,EAAAunC,OAAAvnC,EAAA8/M,UAAAhC,iBAAA99M,EAAA26M,iBAETh+M,KAAAknN,sBAAAD,EAAAxmB,KAAA/lM,OAAA+8M,GAAA,cAAA9iM,GACS,kBAAAA,GAAAtR,EAAAuqJ,aAET5tJ,KAAAq+M,UACAr+M,KAAAmjN,UAAApuM,WAGAwwM,EAAAjpN,UAAA+H,SAAA,eACAxB,KAAA7C,KAAA29M,UACA39M,KAAA4E,OACA5E,KAAA4E,MAAAvG,OAAA2B,KAAA29M,WAEA39M,KAAA29M,SAAA39M,KAAA4E,MAAAvG,OACAkqC,QAAAu8D,KAt8BA,2EAw8BA9kG,KAAA2+M,UAAA3+M,KAAA+9M,sBAAA/9M,KAAA2+M,SACA3+M,KAAAmnN,wBAEA5B,EAAAjpN,UAAA+gN,kBAAA,SAAA9pM,EAAA9N,GACA,GAAApC,GAAArD,IACA,WAAAk8B,SAAA,SAAAhV,GACA,GAAA67L,GAAA,SAAA7wG,GACA7uG,EAAA+jN,WAAAl1G,EAAAzsG,GACAyhB,EAAA3T,GAEAlQ,GAAA47M,WACA57M,EAAA47M,WAA0B1rM,GAC1BktL,KAAA/lM,OAAA+8M,GAAA,UACS98L,UAAAooM,KAAAxvM,MAGTgyM,EAAAjpN,UAAAghN,kBAAA,SAAA0I,EAAAzyM,EAAA9N,EAAA4hN,GACA,GAAAhkN,GAAArD,IACA,WAAAk8B,SAAA,SAAAhV,EAAAgW,GACA,GAAA6lL,GAAA,SAAA7wG,GACA,MAAA7uG,GACAikN,QAAAtB,EAAA9zG,EAAAzsG,EAAA4hN,GACAjhL,KAAAlf,GACAye,MAAAzI,GAEA,OAAA75B,GAAA67M,SACA77M,EAAA67M,SAA0B3rM,GAC1BktL,KAAA/lM,OAAA+8M,GAAA,UACS98L,UAAAooM,EAAA7lL,GAAA6lL,EAAAxvM,MAGTgyM,EAAAjpN,UAA8BirN,WAAa,SAAA/hN,EAAA+F,OAC3C,KAAAA,OAAA,GACA/F,GAAA,gBAAAA,MAAA,UACAxF,KAAAwnN,cAAAhiN,IAGAxF,KAAAwnN,YAAAhiN,EACA+F,GACAvL,KAAAq/L,SAAA9zL,KAAA/F,KAGA+/M,EAAAjpN,UAAAmrN,WAAA,SAAAzmI,EAAAw4H,GACA,GAAAn2M,GAAArD,IACAA,MAAAoxB,UAAA4vD,GAAA3jF,QAAA,SAAA+hG,GAAA,MAAAA,GAAA5iG,KAAA6G,EAAAm2M,MAEA+L,EAAAjpN,UAAAorN,cAAA,SAAAz/M,GACA,GAAAq8B,GAAAr8B,EAAAq8B,MACArrB,EAAAqrB,EAAAkwE,SAAAlwE,EAAA05J,MACA2pB,EAAArjL,EAAAqjL,WAAA,CACA,QAAAtL,GAAApjM,IACA,IAAAgjM,IAAA36E,OACA,GAAAthI,KAAAwnN,aAAAxnN,KAAA0+M,UAAA,CACA,GAAAj5M,GAAAzF,KAAA4E,MAAA9G,QAAAkC,KAAAwnN,YACAxnN,MAAAq9M,kBAAAr9M,KAAAwnN,YAAA/hN,GAEA,KACA,KAAAw2M,IAAAC,YACAl8M,KAAA4nN,UAAA3/M,EAAAiqG,MAn/BA,OAo/BA,MACA,KAAA+pG,IAAAE,YACAn8M,KAAA4nN,UAAA3/M,EAAAiqG,MAv/BA,OAw/BA,MACA,KAAA+pG,IAAAG,IACA,GAAAuL,EAAA,CACA,GAAA3nN,KAAA6nN,WAAA5/M,EAAAiqG,OACA,MAEAlyG,MAAA4nN,UAAA3/M,EAAAiqG,MA7/BA,YA+/BA,CACA,GAAAlyG,KAAA8nN,UAAA7/M,EAAAiqG,SAAAlyG,KAAAghL,SAAAhhL,KAAAgiN,iBACA,MAEAhiN,MAAA4nN,UAAA3/M,EAAAiqG,MApgCA,QAsgCA,KACA,SACA,OAEA5tE,EAAAuxE,kBAEA0vG,EAAejpN,UAASyrN,aAAA,WACxB,MAAA3+D,IAAAppJ,SAAA,qBACA,GAAAgoN,EACA,OAAAtiE,IAAA1lJ,KAAA,SAAA0c,GACA,OAAAA,EAAAyC,OACA,OAEA,MADAzC,GAAAqpI,KAAA/uI,MAAA,UACA,EAAAhX,KAAAs9M,mBAAA,EAAAt9M,KAAAqjN,WACA,QAEA,MADA3mM,GAAAupI,QACA,IACA,QAEA,MADA+hE,GAAAtrM,EAAAupI,QACA,EACA,wBAKAs/D,EAAAjpN,UAAAmqN,cAAmC,SAAkB1rN,EAAAktN,OACrD,KAAAA,OAAA,GACAjoN,KAAAkoN,aACAjzD,SAAAl6J,GAAAktN,eAEA1C,EAAAjpN,UAAA4rN,WAAA,WACA,MAAAloN,MAAAmjN,UAAA,OAEAoC,EAAAjpN,UAAA6wD,MAAoC,SAAAg7J,EAAoBC,OACxD,KAAAD,OAA6C,OAC7C,KAAAC,OAAA,GACApoN,KAAAwlN,aAAA3vJ,SAAA,cAGA71D,KAAAunN,eAAA1kN,IAAA,GACAslN,IACAnoN,KAAAmjN,UAAAh2J,QACAntD,KAAA2gN,QAAAp1M,KAAAvL,KAAAqjN,cAGAkC,EAAAjpN,UAAAo/D,KAAA,WACA17D,KAAA+/M,YACA//M,KAAAqnM,OAAA97L,KAAAvL,KAAAqjN,YAEAkC,EAAAjpN,UAAA8kN,UAAA,WACA,MAAAphN,MAAAmjN,WAAAnjN,KAAAmjN,UAAA/B,aAEAmE,EAAAjpN,UAAA4kN,eAAA,WACA,MAAAlhN,MAAAmjN,WAAAnjN,KAAAmjN,UAAAjC,kBAEAqE,EAAAjpN,UAAA+rN,kBAAA,WACA,GAAAv3M,GAAA9Q,KAAAyjN,UAAAzjN,KAAAyjN,UAAArS,UAAAvuM,GACAylN,EAAAtoN,KAAAs/M,UAAAt/M,KAAAs/M,SAAAmE,UACAzjN,KAAAs/M,SAAAmE,UAAArS,UAAAvuM,EACA,OAAAuQ,SAAAtC,OAAAw3M,IAEA5tN,OAAAI,eAAAyqN,EAAAjpN,UAAA,mBACA0F,IAAA,WACA,WAAAa,KAAA7C,KAAA29M,UACS39M,KAAA4E,MAAAvG,QAAA2B,KAAA29M,UAETl7M,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAyqN,EAAAjpN,UAAA,aACA0F,IAAA,WACA,GAAAoc,GAAApe,KAAAmjN,UAAApoN,KACS,OAAAqjB,KAAArjB,MAAA,IAET0H,YAAA,EACKC,cAAA,IAEL6iN,EAAAjpN,UAAAisN,cAAA,SAAAjkL,EAAA/wB,EAAA9N,GACA6+B,EAAAo7J,iBACA,IAAAl6L,IAAApG,KAAAY,KAAAg/M,SAAAzrM,MAAA9N,QACAzF,MAAAwlN,aAAA3I,UAAA78M,MACAA,KAAAwlN,aAAA/I,eAAoCn4K,EAAA9+B,GACpCxF,KAAAwlN,aAAAjI,UAAAhB,UAAA,EAAA92M,WAEA8/M,EAAAjpN,UAAAiwM,WAAoC,SAAiBjoK,EAAA7+B,GACrDzF,KAAAwlN,aAAAjI,UAAAf,UAAA,IACAx8M,KAAAwlN,aAAAzI,YAAA/8M,MACAskC,EAAAuxE,kBAEA0vG,EAAAjpN,UAAA2gN,aAAA,SAAA34K,EAAA7+B,GACA,GAAAD,GAAAxF,KAAAwlN,aAAA7I,eAAAr4K,EACA9+B,MAAApG,OAAAY,KAAAg/M,WAGAh/M,KAAAwlN,aAAAvI,aAAAz3M,EAAA+N,IAAA/N,EAAAC,SACA6+B,EAAAuxE,iBACAvxE,EAAAo7J,oBAEA6lB,EAAAjpN,UAAAksN,WAAA,WACA,GAAAC,GAAAzoN,KAAAwlN,aAAAxI,WAAAh9M,KACAwoN,EAAAxoN,KAAAwlN,aAAA3vJ,SAAA,WACA,OAAAziD,SAAAq1M,GAAAD,IAEAjD,EAAAjpN,UAAAosN,aAAA,SAAAC,EAAAljN,GACAzF,KAAA4E,MAAAa,GAAAkjN,EACA3oN,KAAA07D,QAEA6pJ,EAAAjpN,UAAAssN,QAAA,SAAAnjN,EAAAD,GACA,MAAAA,GAAAxF,KAAAm/M,aAEAoG,EAAAjpN,UAAAusN,gBAAA,SAAAnsM,GACA,GAAAnJ,GAAAmJ,EAAAnJ,GAAAmJ,GAAAjX,KACAzF,MAAAikN,YAAA14M,KAAAgI,IAEAgyM,EAAAjpN,UAAAsrN,UAAA,SAAApiN,EAAA8lD,GACA,GAAAw9J,GAAA9oN,KAAA8nN,UAAAtiN,GACAujN,EAAA/oN,KAAA6nN,WAAAriN,EAGA,IA7nCA,SA2nCA8lD,GAAAw9J,GA1nCA,SA2nCAx9J,GAAAy9J,EAGA,WADA/oN,MAAAmtD,OAAA,EAGA,IAAAjiD,GAjoCA,SAioCAogD,EAAA,KACA7lD,EAAAzF,KAAAgpN,YAAAxjN,GAAA0F,EACAqI,EAAAvT,KAAAipN,cAAAxjN,EACA,OAAA8N,GAAA0hD,OAAAz4D,KAAA+W,IAEAgyM,EAAAjpN,UAAAurN,WAAA,SAAAriN,GACA,MAAAxF,MAAA82B,KAAAs6K,MAAAl/F,QAAA1sG,GAEA+/M,EAAAjpN,UAAAwrN,UAAA,SAAAtiN,GACA,MAAAxF,MAAA82B,KAAAu6K,KAAAn/F,QAAA1sG,GAEA+/M,EAAAjpN,UAAA0sN,YAAA,SAAAxjN,GAEA,MADAxF,MAAA82B,KAAAsjL,UACA8O,UAAA,SAAA31M,GAAA,MAAAA,GAAA2+F,QAAA1sG,KAEA+/M,EAAAjpN,UAAA2sN,cAAA,SAAAxjN,GAEA,MADAzF,MAAA82B,KAAAsjL,UACA30M,IAEA8/M,EAAAjpN,UAAA8qN,WAAA,SAAA7zM,EAAA9N,GACAzF,KAAA4E,MAAA5E,KAAAugN,gBAAA96M,GACAzF,KAAAwnN,cAAAj0M,GACAvT,KAAAunN,eAAA1kN,IAAA,GAEA7C,KAAAmtD,OAAA,MACAntD,KAAA8gL,SAAAv1K,KAAAgI,IAEAgyM,EAAAjpN,UAAAgrN,QAAA,SAAAtB,EAAAxgN,EAAAC,EAAA4hN,GACA,GAAAhkN,GAAArD,SACA,KAAAgmN,OAAA,EACA,IAAAnpN,GAAAmD,KAAAsgN,eAAA96M,GACA+N,EAAAvT,KAAA8lN,UAAAtgN,EAIA,OAHAwgN,IACAhmN,KAAAymN,cAAAzmN,KAAAogN,aAAA56M,GAAA,IAEA,GAAA02B,SAAA,SAAAhV,EAAAgW,GACA,GAAA2rI,GAAA,WACAxlK,EAAAojN,cAAA,IACAY,EACAhkN,EAAA8pD,OAAA,MAGA9pD,EAAA8pD,OAAA,MAEAjmC,EAAArqB,IAEAssN,EAAA,WACA9lN,EAAAwiN,UAAAtyM,EAAA9N,GACApC,EAAAoiN,MAAAl6M,KAAAgI,GACAlQ,EAAAi8M,WAGAj8M,EAAAi8M,SAAAl5C,OACA/iK,EAAAi8M,SAAAC,qBACAl8M,EAAAi8M,SAAA7oM,SAGA9B,EAAAtR,EAAA8/M,UAAA/kM,KAAAzJ,OACAoxM,EAAA1iN,EAAA0iN,WAAAxyM,EAAAyyM,GACAL,EAAA,WAEA,MADAtiN,GAAAsiN,kBAAAp6M,KAAAgI,GACA2pB,IAEA,cAAAvoB,GAAAoxM,EAEA,MADAoD,KACAtgD,GAEA,gBAAAl0J,IAAAoxM,EAEA,MADAl9C,KACA88C,GAEA,gBAAAhxM,EAAA,CAEA,MADAtR,GAAA8/M,UAAA/kM,KAAA2vK,cAEA0S,KAAA/lM,OAAA+8M,GAAA,iBAAA2R,GAAA,kBAAAA,IAAA1uN,OAAA+8M,GAAA,UACA98L,UAAA,SAAAyuM,GACA,UAAAA,GAAArD,GACAoD,IACAjiM,KAGAy+L,UAMAJ,EAAAjpN,UAAAqqN,2BAAA,WACA,GAAAtjN,GAAArD,KACAqpN,EAAArpN,KAAA09M,kBAAAr/M,OAAA,GAAA2B,KAAAy9M,cAAAp/M,OAAA,EACA+gG,EAAA,SAAAo6G,GACA,GAAA8P,GAAAjmN,EAAAq6M,kBAAA5/M,QAAA07M,EAAAhlG,UAAA,EACA+0G,EAAAlmN,EAAAo6M,cAAA3/M,QAAA07M,EAAAvgM,MAAA,EACAuwM,EAAA,MAAAhQ,EAAAhlG,SACA80G,GAAAC,IAAAC,KACAhQ,EAAA3jG,iBACAxyG,EAAAi6M,mBAAwC,EAAEj6M,EAAAggN,WAC1C19K,MAAA,eAGA35B,IAAAxP,KAAAwD,KAAA+7M,GAAA38G,EAAAiqH,IAEA9D,EAAAjpN,UAAAoqN,uBAAA,WACA,GAAArjN,GAAArD,KACAo/F,EAAA,SAAAo6G,IACA,KAAAA,EAAAhlG,SAAA,IAAAglG,EAAAhlG,WAEAnxG,EAAAggN,WACAhgN,EAAAuB,MAAAvG,QACAgF,EAAAyzB,KAAAu6K,KAAAp8I,OAAAz4D,KAAA6G,EAAAyzB,KAAAu6K,MAGArlM,IAAAxP,KAAAwD,KAAA+7M,GAAA38G,IAEAmmH,EAAAjpN,UAAAsqN,2BAAA,WACA,GAAAvjN,GAAArD,IACAA,MAAAmjN,UAAAtC,UAAAlmM,UAAA,SAAA2pB,GACAjhC,EAAAokN,WAAA,UAAAnjL,GACA,cAAAA,EAAArrB,KAAA,KAAA5V,EAAAggN,UAAAz/K,QACAU,EAAAuxE,oBAIA0vG,EAAAjpN,UAAA0qN,qBAAA,WACA,GAAA3jN,GAAArD,KACA9B,EAAA8B,KAAAmjN,UAAAjlN,MAAAkG,aACApE,MAAAb,SAAA6M,OAAA9N,EAAA,iBAAAomC,GAGS,MAFTjhC,GAAAgjN,gBAAA/hL,GACAA,EAAAuxE,kBACS,KAGT0vG,EAAAjpN,UAAAwqN,0BAAA,WACA,GAAAzjN,GAAArD,IACAA,MAAAmjN,UAAA/kM,KACAqrM,aACAhpB,KAAA/lM,OAAA+8M,GAAA,cAAAz3M,KAAAk+M,uBACAvjM,UAAA,SAAA5f,GACSsI,EAAA6/M,aAAA33M,KAAAxQ,EAAAyK,SAGT+/M,EAAAjpN,UAAAyqN,sBAAA,WACA,GAAA1jN,GAAArD,KACA0pN,EAAA,WAEA,QADArmN,EAAAi8M,UAAAj8M,EAAAi8M,SAAAnG,YACA91M,EAAAggN,WAEArjN,MAAAmjN,UACA9b,OACA5G,KAAA/lM,OAAA+8M,GAAA,mBAAA/8M,OAAA+8M,GAAA,QAAAiS,IACA/uM,UAAA,WACA,GAAAkuJ,GAAA,iBAAAxlK,GAAAojN,cAAA,IACA,IAAApjN,EAAAi7M,UACA,MAAAj7M,GACAi6M,mBAAA,EAAAj6M,EAAAggN,cAAAxgN,IAAA,GACAujC,KAAAyiI,GACAljI,MAAAkjI,EAESA,QAGT08C,EAAAjpN,UAAA4pN,SAAA,SAAA3yM,EAAA4yM,GACA,GAAA9iN,GAAArD,KACAm/M,EAAAgH,EAAAnmN,KAAAs/M,SAAAH,WAAAn/M,KAAAm/M,WACAtsM,EAAAU,EAAA4rM,EACA,OAAAn/M,MAAA4E,MAAAqjD,KAAA,SAAAziD,GAAA,MAAAnC,GAAA+8M,aAAA56M,KAAAqN,KAEA0yM,EAAAjpN,UAAA6qN,qBAAA,WACAnnN,KAAA2pN,mBACA5uN,MAAA,KACA6wE,OAAAlxE,OAAAusC,UAAAjnC,KAAAo/M,qBAGCmG,GACD1F,GACAiC,IAAYtxM,aACZC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,YACAkF,WAAAsvM,IACAj0M,QAAA,goTACAL,SAAA,m9FACaqvL,WAAIA,OAGjB2hB,GAAY1wM,eAAY,mBACnBX,KAAAzV,GAAsB,YACzByV,KAAA6rM,MAEFwF,GAAuBlwM,gBACvB6rM,gBAAAhtM,KAA2BzV,GAAO,QAClC0iN,oBAA4BjtM,KAAAzV,GAAO,QACnCu6D,cAAA9kD,KAAAzV,GAAqC,QACrC4iN,uBAAyBntM,KAAAzV,GAAO,QAChC2iN,WAAAltM,KAAoBzV,GAAO,QAC3B6iN,aAAAptM,KAAyBzV,GAAO,QAChC8iN,kBAAArtM,KAA8BzV,GAAO,QACrC+iN,uBAA8BttM,KAAAzV,GAAO,QACrCgjN,gBAAsBvtM,KAAAzV,GAAO,QAC7BijN,QAAAxtM,KAAAzV,GAAqC,QACrCkjN,uBAAwBztM,KAAAzV,GAAO,QAC/B4X,UAAAnC,KAAoBzV,GAAO,QAC3BmjN,aAAqB1tM,KAAAzV,GAAO,QAC5BojN,cAAkB3tM,KAAOzV,GAAO,QAChCqjN,WAAmB5tM,KAAAzV,GAAO,QAC1BsjN,YAAoB7tM,KAAAzV,GAAO,QAC3BujN,aAAA9tM,KAA2BzV,GAAO,QAClCwjN,oBAA4B/tM,KAAAzV,GAAO,QACnCyjN,cAAmBhuM,KAAOzV,GAAK,QAC/B0jN,YAAkBjuM,KAAOzV,GAAK,QAC9B2jN,WAAAluM,KAAoBzV,GAAO,QAC3B4jN,aAAAnuM,KAAwBzV,GAAO,QAC/B6jN,iBAAyBpuM,KAAAzV,GAAO,QAChC8jN,WAAmBruM,KAAAzV,GAAO,QAC1BymN,YAAgBhxM,KAAOzV,GAAO,QAC9B+jN,SAAAtuM,KAAkBzV,GAAO,QACzBitM,WAAiBx3L,KAAOzV,GAAK,QAC7BgmL,UAAkBvwK,KAAAzV,GAAO,QACzBgkN,WAAAvuM,KAAoBzV,GAAO,QAC3BikN,aAAkBxuM,KAAOzV,GAAK,QAC9BkkN,WAAAzuM,KAAAzV,GAAkC,QAClCokN,oBAAsB3uM,KAAAzV,GAAQ,QAC9ByqN,QAAAh1M,KAAkBzV,GAAO,SACzB8lL,WAAkBrwK,KAAOzV,GAAA,SACzBqkM,WAAiB5uL,KAAOzV,GAAM,SAC9B2lN,UAAgBlwM,KAAOzV,GAAM,SAC7BqsM,SAAA52L,KAAsBzV,GAAO,SAC7BkoN,eAAiBzyM,KAAOzV,GAAQ,SAChC0qN,UAAAj1M,KAAAzV,GAAkC,SAClC2qN,oBAA4Bl1M,KAAAzV,GAAQ,SACpCipN,cAAkBxzM,KAAOzV,GAAA,SACzBskN,WAAmB7uM,KAAAzV,GAAO,aAAA2V,MAAeixM,MACzC6B,YAAmBhzM,KAAOzV,GAAS,gBAAA2V,MAAS3V,GAAgB,aAAA4uN,aAAA,MAC5DzG,YAAc1yM,KAAOzV,GAAY,UAAA2V,MAAS6vM,MAC1C1pL,OAAArmB,KAAAzV,GAAgC,aAAA2V,MAAQmzM,MACxChD,kBAAsBrwM,KAAOzV,GAAA,SAC7B6uN,eAAAp5M,KAAAzV,GAAA,YAAA2V,MAAA,mBAEA,IAAAm5M,IAAA,WACA,QAAAA,MAEC,MAAAA,KAEDA,IAAYt5M,aACZC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,cACAE,SAAA,2gBACaK,QAAI,q1LAGjB,IAAA44M,IAAA,GAAApK,IACAqK,GAAA,WACA,QAAAA,MAKC,MAHDA,GAAAC,aAAA,SAAAx2M,GACAs2M,GAAAnK,WAAAnsM,IAECu2M,IAEDA,IAAYx5M,aACZC,KAAAzV,GAAA,SAAA2V,OACA0B,SACoB8qI,GAAA,aACAsqB,GAAW,oBACXA,GAAA,YACpBk0C,IAEAvpM,cACA0vM,GACoBgI,GACAtJ,GACpBsD,GACoBhI,GACpB8F,GACA8B,IAEA9xN,SACAkwN,GACoBgI,GACAtJ,GACpBsD,GACoBhI,GACpB8F,GACA8B,IAEA5tM,WACAwmM,IACAvlD,QAAA0Q,GAAA,wBAAAiyB,UAAA,OxPi2+CA,IuTjzhDAwwB,IvTizhDIC,GAA6BnqN,MAAQA,KAAKuY,WAAc,WACxD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFwxM,GAA8BpqN,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DixM,GAA8BrqN,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IwT7yhDtE4wM,GAAA,SAAA1wM,GxTmzhDhC,QwTxyhDH2wM,GACCjwM,EAAAC,GADkB,GAAAlX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAKvC,OALgDqD,GAAAiX,SANvCjX,EAAAkX,YAAcA,EAQvBlX,EAAKmnN,YAAa,GAAAxvN,IAAA,aAClBqI,EAAKonN,SAAA,EACLpnN,EAAKqnN,gBAAgB,ExT2yhDfrnN,EAAMsnN,iBAAmB,EwT1yhD/BtnN,EALD8mN,GAAmBI,EAA8B3wM,GxTkzhD9C2wM,EwTzyhDOjuN,UAAAkI,YAAyB,aACjCxE,KAAK4qN,iBAAoB5qN,KAAA4qN,gBAAA,KACzB5qN,KAAA4qN,gBAAA,GAMD5qN,KAAKyqN,SAAA1nN,KAAeoL,KAAGnO,KAAK6qN,WAAY7qN,KAAM8qN,UAC9C9qN,KAAK0qN,gBAAgB1qN,KAAOylM,KAAK1iM,KAAO4M,MAAM3P,KAAK4qN,gBAAgB,GACnE5qN,KAAG2qN,iBAAoB3qN,KAAIylM,KAAE1iM,KAAA4M,MAAA3P,KAAA4qN,gBAAA,GAC5B5qN,KAAK0qN,gBAAkB,IACvB1qN,KAAK0qN,gBAAgB,EACrB1qN,KAAA2qN,iBAAA5nN,KAAA0D,IAAAzG,KAAAyqN,SAAAzqN,KAAA4qN,kBAEA5qN,KAAK2qN,iBAAmB3qN,KAAKyqN,WAC7BzqN,KAAK2qN,iBAAkB3qN,KAAKyqN,SAC5BzqN,KAAA0qN,gBAAA3nN,KAAAC,IAAA,EAAAhD,KAAAyqN,SAAAzqN,KAAA4qN,gBAAA,IAGD5qN,KAAI+qN,kBAAW,GAAA1uN,MxTqyhDT,KwTpyhDL,GAAKd,GAAAyE,KAAA0qN,gBAA0BnvN,GAAAyE,KAAA2qN,iBAAApvN,IAC/ByE,KAAA+qN,kBAAA/zM,KAAAzb,IxTuyhDCgvN,EwTnyhDGjuN,UAAgB0uN,aAAO,SAAAvlB,GAC5BzlM,KAAAwqN,YAAAj/M,KAAAk6L,GA9CQ,IAAAhpL,GAAAC,CAD0B,OxTq1hDhC0tM,KACI1vN,OAAOM,GAAgB,SACvBqvN,GAA2B,cwTt1hDZptH,SACbstH,EAAAjuN,UAAA,exTu1hDN8tN,IACI1vN,OAAOM,GAAgB,SACvBqvN,GAA2B,cAAeptH,SwTx1hDxCstH,EAAAjuN,UAAA,mBxT01hDN8tN,IACI1vN,OAAOM,GAAgB,SACvBqvN,GAA2B,cAAeptH,SwT31hDxCstH,EAAAjuN,UAAA,qBxT61hDN8tN,IACI1vN,OAAOM,GAAgB,SACvBqvN,GAA2B,cAAeptH,SwT91hDvCstH,EAAAjuN,UAAA,0BxTg2hDP8tN,IACI1vN,OAAOM,GAAiB,UACxBqvN,GAA2B,cAAe3vN,SwTv2hDrC6vN,EAAcjuN,UAAA,sBxTy2hDvBiuN,EwT53hDHH,IxT63hDO1vN,OwT53hDPM,GAAiB,YACjB4V,SAAU,QAYVE,SAAQ,uexTk3hDGK,QwTh3hDV,2CACA,+BAEWk5M,GAgDZ,wCAAA5tM,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,UAAD6vN,IAhD2BltE,GAAA,GxTy3hDvB4tE,GAA2BjrN,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GyT14hD/D8xM,IACCZ,IAYFa,GAAA,WAA2B,QAACC,MAAA,MzT24hDxBA,GyTr5hDHH,IzTs5hDOvwN,OyTr5hDPM,GAAS,WzTs5hDEqX,SyTp5hDVq1J,GAAY,EACZvqB,GAAA,aACAE,GAAW,EACXoqB,GAAA,aAEDr1J,aAAS84M,GACRt5N,QAAAs5N,MACyBE,MzT45hDvBC,GAA2BrrN,MAAQA,KAAKuY,WAAc,WACtD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF0yM,GAA4BtrN,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G0Tj6hD9BmyM,GAAA,SAAA3xM,G1Ty6hD9B,QAAS4xM,K0T9qhDZ,cAAA5xM,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KA3PiC,MAAlCqrN,IAAAG,EAAA5xM,G1T46hDI4xM,E0T16hDGlvN,UAAWmvN,qBAAA,SAAAC,EAAAptM,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAID,IAAAstD,K1Ty6hDM,K0Tx6hDL,GAAI3yD,KAAMyyM,GAAiB,CAC3B,GAAI/vN,GAAI+vN,EAAezyM,EACf,QAAPtd,GAAwB,KAANA,GAClBiwE,EAAA50D,KAAAiC,EAAA,IAAA6yD,mBAAAnwE,IAIF,GAAI8uL,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,oBACZstD,EAAA5nC,KAAmC,IAMrC,O1Ti6hDMpqB,G0Tt6hDJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB1Ts6hDE00F,E0Tn6hDGlvN,UAAWqvN,8BAAA,SAAAjrM,EAAAC,EAAAwyL,EAAA70L,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAMAqC,GAAAowL,OAAYrwL,EAAeqwL,QAFX,QAGhBrwL,EAAUA,EAAQiB,QAAQC,QAAQ,OAGlCjB,EAAUA,EAAQgB,QAAOC,QAAK,OAC9BjB,IAAA+H,IAAA,OAID,IAAAkjD,KAEAA,GAAK50D,KAAO,WAAI0J,EAAeqwL,OAAA,IAAApwL,EAAAowL,O1T45hDzB,K0T35hDL,GAAI93L,KAAMk6L,GAAiB,CAC3B,GAAIx3M,GAAIw3M,EAAel6L,EACf,QAAPtd,GAAwB,KAANA,GAClBiwE,EAAA50D,KAAAiC,EAAA,IAAA6yD,mBAAAnwE,IAIF,GAAI8uL,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,+BACgCstD,EAAA5nC,KAAA,IAM9C,O1To5hDMpqB,G0Tz5hDJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB1Ty5hDE00F,E0Tr5hDGlvN,UAAWsvN,qBAAA,SAAAtY,EAAA5yL,EAAAC,EAAAuxK,EAAA5zK,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAKD,IAAIstD,GAAA5rE,KAAa4wM,sBAAOlwL,EAAeC,EAAAuxK,GACnCzH,EAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,oBACZte,KAAAuxM,gCAA0C+B,GAAA,YAAA1nI,EAAA5nC,KAAA,IAc5C,O1To4hDMpqB,G0Tj5hDJtd,UAAa0V,KAA+BxV,KAAIwD,KAAMy2B,GAAK9b,UAAW,SAAC+xB,G1To5hD/D,I0Tj5hDH,GAFD6lK,IAA6BtqM,QAAGkX,MAAA,SAEpCqzL,KAASv5K,EAAG,EAAA4yL,EAAAn/K,EAAAzT,EAAA4yL,EAAAxtN,OAAA46B,IAAA,CACX,GAAAy5K,GAAUmZ,EAAU5yL,EACpBs5K,GAAAtqM,KAAY+O,KAAKsU,WAAAonL,EAAOhqF,QACxB8pF,EAAAx7L,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAIF1O,EAAM7uG,MAAK3zE,KAAAsqM,EAAa7+I,OAAO8+I,KAEhC,SAAO7zL,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB1Tg5hDE00F,E0T54hDGlvN,UAAWwvN,qBAAA,SAAAxY,EAAA5yL,EAAAC,EAAAuxK,EAAA5zK,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAKD,IAAIstD,GAAA5rE,KAAa4wM,sBAAOlwL,EAAeC,EAAAuxK,GACnCzH,EAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,oBACZte,KAAAuxM,gCAA0C+B,GAAA,YAAA1nI,EAAA5nC,KAAA,IA2B5C,O1T82hDMpqB,G0Tx4hDJtd,UAAa0V,KAA+BxV,KAAIwD,KAAMy2B,GAAK9b,UAAW,SAAC+xB,G1T84hD/D,I0Tx4hDH,GALD6lK,IAAwCtqM,QAAUkX,MAAO,SACzDkzL,GAA6BpqM,QAAGkX,MAAA,SAChCqzL,KACAuZ,GAAgB,EAEpBpwN,EAAgB,EAAPs9B,EAAG,EAAA+yL,EAAAt/K,EAAAzT,EAAA+yL,EAAA3tN,OAAA46B,IAAA,CACX,GAAAy5K,GAAUsZ,EAAU/yL,EACpBs5K,GAAGtqM,KAAW+O,KAAKsU,WAAAonL,EAAAhqF,QAClB,SAAMgqF,IACN/2M,EAAA2vB,WAAeonL,EAAKC,OACpBN,EAASpqM,KAAG+O,KAAArb,GACXA,EAAA,IACAowN,GAAA,IAGD1Z,EAAApqM,KAAA+O,KAAA,MAEDw7L,EAAAx7L,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAGD,GAAA8yB,GAAaF,GAAwB1Z,EAAQE,IAAeA,EAE7D9nB,GAAM7uG,MAAKqwI,SAAAv4J,OAAoB8+I,KAEhC,SAAO7zL,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB1Tw4hDE00F,E0Tp4hDGlvN,UAAW4vN,6BAAA,SAAA5Y,EAAA5yL,EAAAC,EAAAqxL,EAAA1zL,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,WAGDoC,EAAUA,EAAQiB,QAClBhB,EAAIA,EAAAgB,QACHqwL,GACAhyM,KAAA0wM,iBAAAhwL,EAAAC,EAAAqxL,EAGD,IAAIvnB,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,oBACZte,KAAAuxM,gCAA0C+B,GAAA,sBAAA5yL,EAAAqwL,OAAA,IAAApwL,EAAAowL,MAU5C,O1Tw3hDMn3L,G0Tj4hDJtd,UAAY0V,KAAKxV,KAAAwD,KAASy2B,GAAM9b,UAAO,SAAA+xB,GACtCA,GAAaA,EAAMruC,OAAY,EAC/BosL,EAAA7uG,KAAAlvC,EAAA,IAEA+9I,EAAA7uG,KAAA,OAIH,SAAOj9D,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB1Tk4hDE00F,E0T/3hDGlvN,UAAW6vN,iBAAA,SAAAC,EAAA9tM,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAGD,IAAImsK,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,oBACZte,KAAAuxM,gCAAuB6a,EAMzB,O1Tw3hDMxyM,G0T73hDJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAA9b,UAAA,SAAA+xB,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB1T63hDE00F,E0Tz3hDGlvN,UAAW+vN,uBAAA,SAAA/Y,EAAA5yL,EAAAC,EAAArC,EAAAguM,GACfhuM,IACAA,EAAAte,KAAA44B,KAAAta,WAIDoC,EAAUA,EAAQiB,QAClBhB,EAAKA,EAAAgB,QAGL3hB,KAAI0wM,iBAAYhwL,EAAAC,EAAA,MAChB,IAAAirD,KACAA,GAAI50D,KAAA,WAAqB0J,EAAAqwL,OAAA,IAAApwL,EAAAowL,QACxBub,GACA1gJ,EAAA50D,KAAA,QAAAs1M,EAGD,IAAI7hC,GAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,oBACZte,KAAAuxM,gCAAa+B,GAAA,oBAAA1nI,EAAA5nC,KAAA,IAqDf,O1T+zhDMpqB,G0Tn3hDJtd,UAAa0V,KAA+BxV,KAAIwD,KAAMy2B,GAAK9b,UAAE,SAAA+xB,GAC7D,GAAI6lK,IAA6BtqM,QAAGkX,MAAA,2BAChCqzL,KACA9d,EAAW,M1Tq3hDP,K0Tj3hDPhoJ,EAAAg8E,MAEA,WADA+hE,GAAO7uG,KAAA,K1To3hDA,IAAIlvC,E0Th3hDRisJ,KAAS4zB,gBACT7/K,EAAS8/K,kBACR9/K,EAAS8/K,iBAAiBnuN,OAAM,GAEhCquC,EAAS8/K,iBAAGnuN,QAAYquC,EAASg8E,MAAArqH,OAAiB,CACtD,GAAIouN,GAAUt7B,GAAOruK,EAAAiuL,KAAKrkK,EAAS8/K,iBAAiB,IAKpDE,EAAYv7B,GAAWruK,EAAAiuL,KAAArkK,EAAA8/K,iBAAA9/K,EAAA8/K,iBAAAnuN,OAAA,GACvBq2L,GAAY,WACZh0K,EAAU+rM,EAEV9rM,EAAS+rM,C1T22hDE,K0T12hDV,GAAA39G,GAAU,EAAIA,EAAMriE,EAAAg8E,MAAWrqH,OAAS0wG,IACxCwjG,EAAAtqM,KAAY+O,KAAKsU,WAAAohB,EAAYg8E,MAAA3Z,KAC7ByjG,EAAAx7L,KAAAm6K,GAAAruK,EAAAiuL,KAAArkK,EAAA8/K,iBAAAz9G,IAAAoqF,mB1T+2hDU,K0T12hDV,GADD9tK,GAAeqhB,EAASisJ,KAAAttK,SACnB0jF,EAAM,EAAAA,EAAUriE,EAASg8E,MAAMrqH,OAAO0wG,IAAA,CAC1C,GAAApzG,GAAU2vB,WAAUohB,EAAKg8E,MAAA3Z,GAEzBwjG,GAAStqM,KAAG+O,KAAKrb,EACjB,IAAAwjB,GAAYpc,KAAK4M,MAAMo/F,EAAC1jF,EAAAqhB,EAAAg8E,MAAArqH,QAAA,GACxBm0M,GAAAx7L,KAAAmI,G1T42hDMsrK,E0Tx2hDA7uG,MACP3zE,MAAAsqM,GAAW7+I,OAAW8+I,EACtB9xL,UAAWA,EAAWC,UACtB+zK,UAAUA,EAAQxC,YAxCL,OAyCXxlJ,cAIL,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB1Tw2hDE00F,E0TnmiDHF,IACY5wN,OAAAM,GA2PZ,eAADwwN,IA3PyBlb,I1T0miDrBqc,GAA2B3sN,MAAQA,KAAKuY,WAAc,WACtD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFg0M,GAA4B5sN,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G2TzoiD9ByzM,GAAA,SAAAjzM,G3TipiD9B,QAASkzM,K2T5hiDZ,cAAAlzM,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KArHiC,MAAlC2sN,IAAAG,EAAAlzM,G3TopiDIkzM,E2TjpiDGxwN,UAAWywN,qBAAA,SAAAnsM,EAAAosM,EAAA7Z,EAAA70L,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAED,IAAIstD,GAAA5rE,KAAaitN,wBAAcrsM,EAAQosM,EAAA7Z,GAEvC18K,GADU,GAAcyzJ,IAAU,QAC3B,YAAM5rK,EAAIuC,WAAM,yCAAA+qD,EAAA5nC,KAAA,KACvB,OAAApqB,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAAy2B,I3TmpiDEq2L,E2ThpiDGxwN,UAAW4wN,8BAAA,SAAAtsM,EAAAosM,EAAA7Z,EAAA70L,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAED,IAAIstD,GAAA5rE,KAAaitN,wBAAcrsM,EAAQosM,EAAA7Z,GAEvC18K,GADU,GAAcyzJ,IAAU,QAC3B,YAAM5rK,EAAIuC,WAAM,mDAAA+qD,EAAA5nC,KAAA,KACvB,OAAApqB,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAAy2B,I3TkpiDEq2L,E2T/oiDMxwN,UAAK2wN,wBAAqB,SAAArsM,EAAAosM,EAAA7Z,GAElC,GAAI/5L,GAAApZ,KAASywM,cAAoB7vL,GACjCgrD,EAAY,GAAAvvE,MAOZ,OANAuvE,GAAM50D,KAAG,WAAcoC,EAAAsH,UAAQqwL,OAAAlwL,WAAsB,IAAAzH,EAAAuH,QAAAowL,OAAAlwL,YACrD+qD,EAAGA,EAAApgD,OAAkBwhM,EAAMG,sBACd,OAAZha,IACAvnI,EAAO50D,KAAK,QAAAm8L,EAAe1N,MAC3B75H,EAAA50D,KAAA,aAAAm8L,EAAAia,YAEDxhJ,G3TgpiDEkhJ,E2T5oiDGxwN,UAAW+wN,qBAAA,SAAAC,EAAA5sM,EAAAC,EAAAuxK,EAAA5zK,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAKD,IAAIstD,GAAA5rE,KAAa4wM,sBAAOlwL,EAAeC,EAAAuxK,GACnCzH,EAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,oBACZte,KAAAuxM,gCAAoB+b,GAAA,kBAAA1hJ,EAAA5nC,KAAA,IA6BtB,O3T4miDMpqB,G2TxoiDJtd,UAAI0V,KAAAxV,KAAiBwD,KAA+By2B,GAAQ9b,UAAS,SAAA+xB,G3T+oiD7D,I2TxoiDH,GAND6gL,IAAgDtlN,QAASkX,MAAA,mBACzDozL,GAAwCtqM,QAAUkX,MAAO,oBACzDkzL,GAAYpqM,QAAqBkX,MAAA,SACjCquM,KACAzB,GAAgB,EAEpBpwN,EAAgB,EAAPs9B,EAAG,EAAA4yL,EAAAn/K,EAAAzT,EAAA4yL,EAAAxtN,OAAA46B,IAAA,CACX,GAAAy5K,GAAAmZ,EAAkB5yL,EAClBs0L,GAAetlN,KAAK+O,KAAAsU,WAAeonL,EAAQ+a,iBAC3Clb,EAAGtqM,KAAW+O,KAAKsU,WAAAonL,EAAAhqF,QAClB,SAAMgqF,IACN/2M,EAAA2vB,WAAeonL,EAAKC,OACpBN,EAASpqM,KAAG+O,KAAArb,GACXA,EAAA,IACAowN,GAAA,IAGD1Z,EAAApqM,KAAA+O,KAAA,MAEDw2M,EAAAx2M,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAGD,GAAA8yB,GAAaF,GAAwB1Z,EAAQE,EAAegb,IAAChb,EAAAgb,EAE9D9iC,GAAM7uG,MAAKqwI,SAAAv4J,OAAoB85J,KAEhC,SAAO7uM,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB3TwoiDEg2F,E2TpoiDGxwN,UAAWoxN,qBAAA,SAAAJ,EAAA5sM,EAAAC,EAAAqxL,EAAA5qL,EAAA9I,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,WAGA0zL,GACAhyM,KAAA0wM,iBAAAhwL,EAAAC,EAAAqxL,GAEA5qL,IACAA,GAAA,kCAGD,IAAIqjK,GAAM,GAAcP,IAAY,QACnCzzJ,EAAA,YAAAnY,EAA8B,oBAAsBte,KAAGuxM,gCAAc+b,GACrE,4BAA8B5sM,EAAAqwL,OAAA,IAAApwL,EAAAowL,OAC/B,WAAM3pL,EAAI4c,KAAA,IAOV,O3T4niDMpqB,G2TjoiDJtd,UAAa0V,KAAKxV,KAACwD,KAAUy2B,GAAG9b,UAAA,SAAA+xB,GAEjC+9I,EAAM7uG,KAAKlvC,EAAA,KAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB3TioiDEg2F,E2T9niDGxwN,UAAWqxN,oBAAA,SAAAL,EAAA5sM,EAAAC,EAAArC,GACfA,IACAA,EAAAte,KAAA44B,KAAAta,UAKD,IAAIlF,GAAApZ,KAAAywM,eAAoB/vL,YAAeC,Y3T6niD7B8V,G2T5niDA,GAAcyzJ,IAAY,QAC/B,YAAgB5rK,EAAW,oBAAqBte,KAAGuxM,gCAAW+b,GAAA,yBACnEl0M,EAAOsH,UAAAqwL,OAAMlwL,WAAI,IAAKzH,EAACuH,QAAAowL,OAAAlwL,WACvB,OAAAjH,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAAy2B,I3T6niDEq2L,E2TlviDHF,IACYlyN,OAAAM,GAqHZ,eAAD8xN,IArHyBxc,IAuHzBsd,GAAA,WAgBA,QAACA,MAAA,M3TmniDGA,G2T9niDuBtxN,UAAA6wN,mBAAA,WAEzB,GAAGxjN,KAQH,OAPa,QAAZ3J,KAAMoW,MAAyB,IAAnBpW,KAAkBoW,MAC9BzM,EAAAqN,KAAA80D,mBAAA,oBAAAA,mBAAA9rE,KAAAoW,OAEApW,KAAA82B,MAAY92B,KAAA82B,KAAAz4B,OAAmB,GAC/BsL,EAAAqN,KAAA80D,mBAAA,oBAAAA,mBAAA9rE,KAAA82B,KAAAkN,KAAA,OAGDr6B,GACDikN,K3TkoiDGC,GAAyB7tN,MAAQA,KAAKuY,WAAc,WACpD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFk1M,GAAwB9tN,MAAQA,KAAKwnF,UAAa9sF,OAAOusC,QAAU,SAASxY,GAC5E,IAAK,GAAIZ,GAAGvvB,EAAI,EAAG0Z,EAAInO,UAAUxL,OAAQC,EAAI0Z,EAAG1Z,IAAK,CACjDuvB,EAAIhkB,UAAUvL,EACd,KAAK,GAAI/C,KAAKsyB,GAAOnzB,OAAO4B,UAAUd,eAAegB,KAAKqxB,EAAGtyB,KACzDkzB,EAAElzB,GAAKsyB,EAAEtyB,IAEjB,MAAOkzB,IAEPs/L,GAA0B/tN,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzF,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G4TtxiDhC40M,GAAA,SAAAp0M,G5T6xiD5B,QAASq0M,K4T/viDZ,cAAAr0M,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KA9B+B,MAAhC6tN,IAAAI,EAAAr0M,G5TgyiDIq0M,E4T7xiDK3xN,UAAA4xN,SAAU,SAAA5vM,EAAClI,GAClB,MAAAwD,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,uBAAAte,KAAAuxM,gCAAAn7L,K5T+xiDE63M,E4T7xiDqE3xN,UAAA21J,KAAA,SAAmB3zI,EAAA4qI,EAAAu8C,EAAA2nB,OAAE,KAAA3nB,MAAA,UAC5E,KAAV2nB,IAAUA,EAAA,KAChB,IAAIz8M,K5TuyiDE,O4TtyiDA,OAAL80L,GAAUv9L,MAAQu9L,IACf90L,EAAAqG,KAAS,QAAQyuL,GACV,MAAV2nB,GAAUllN,MAAaklN,IACpBz8M,EAAAqG,KAAU,aAAYo2M,GACzB,QAAUlkE,IAAQA,EAAK9yI,MACpBzF,EAAKqG,KAAI,QAAWhX,KAACuxM,gCAAUroD,EAAA9yI,OAClC,OAAS8yI,IAAQA,EAAOljC,KAEzBr1G,EAAOqG,KAAA,OAAAkyI,EAAUljC,IAAAhiF,KAAA,MACfpqB,EAAKtd,UAAA0V,KAAAxV,KAAGwD,KAAC,YAAiBse,EAAA,uBAAA3N,EAAAqzB,KAAA,MAC1By8J,KAAM/lM,OAAS+8M,GAAY,KAAK,SAAW3gL,G5T8xiDnC,G4T7xiDPwpC,GAAOxpC,GAAcA,EAACq3L,SAAar3L,EAAAq3L,QAAA9vN,OAAA,GAAAy4B,EAAAq3L,QAAA,GAAA56M,KAAAujB,EAAAq3L,QAAA,GAAA56M,IAAAzV,QAAA,QACjCg5B,EAAKq3L,QAAA,GAAA56M,IAAAswB,MAAA,QACR,IACG,OAAAiqL,OAAAh3L,GAAAwpC,e5TgyiDH2tJ,E4T7xiDyB3xN,UAAA8xN,SAAA,SAAQ9vM,EAAAmnL,EAAA2nB,G5TgyiD7B,W4ThyiD+B,KAAA3nB,MAAA,OAC9B,KAAP2nB,IAAiBA,EAAC,IAChBxzM,EAAKtd,UAAA0V,KAAAxV,KAAGwD,KAAC,YAA0Bse,EAAK,2BAC1CmiL,KAAA/lM,OAAA+8M,GAAA,cAAA3gL,GAAA,MAAAA,GAAAv6B,IAAA,SAAAkyB,GAAA,OAAAg3K,OAAA2nB,YAAAe,QAAA1/L,EAAA4xC,OAAAguJ,cAAA5/L,EAAAzS,MAAAskD,OAAA7xC,EAAA6xC,c5TgyiDE2tJ,E4T9ziDHF,IACYrzN,OAAAM,GA8BZ,eAADizN,IA9BuB3d,I5Tq0iDnBge,GAA4CtuN,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dm1M,GAA4CvuN,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6T70iDzG80M,GAGS,W7To1iDN,Q6Tt1iDMC,GAAiB71L,EAAA81L,EAAAn0M,EAAAF,GACjBra,KAAA44B,OACA54B,KAAA0uN,WAAWA,EACX1uN,KAAAua,cAfTva,KAAAqa,qBAAgCA,EAChCra,KAAA2uN,oBACA3uN,KAAA4uN,uBAAqB,GAAA5zN,IAAwB,aAIpCgF,KAAA6uN,eAAc,GAAK7zN,IAAkB,aACrCgF,KAAA8uN,YAAc9uN,KAAKkpJ,OAAIxyI,KAAK1W,MASpCA,KAAK+uN,YAAQ/uN,KAAA0oB,IAAAhS,KAAA1W,MACbA,KAAA6oK,Q7T61iDE4lD,E6Tj1iDFnyN,UAAA4sJ,OAAA,SAAA9yI,GATA,GAAI/S,GAACrD,I7T61iDC,O6T51iDNA,MAAA6uN,eAAYtjN,MAAW,GACrBvL,KACA0uN,WAAAR,SAAAluN,KAAI44B,KAAAta,UAAoBlI,GAEvBqqL,KAAK/lM,OAAA+8M,GAAoB,KAAK,SAAExvM,GAAA,MAAA5E,GAAA2rN,0BAAA/mN,IAAAvN,OAAA+8M,GAAA,qBAChCp0M,EAAKwrN,eAAAtjN,MAAA,GAELlI,EAAAurN,uBAAArjN,W7T21iDDkjN,E6Tt1iDoBnyN,UAAAosB,IAAA,SAAAnV,G7Tu1iDhB,G6Tt1iDLA,GAAOA,EAAAxY,MACP,MAAA6sL,IAAA,WAAAoB,GAAAz1K,E7Tw1iDK,K6Tp1iDLA,EACA,MAAAq0K,IAAA,WAAAoB,GAAA,KAKD,IAAIimC,GAAK17M,EAAAb,a7Tk1iDH,I6Tj1iDL1S,KAAcgvN,0B7Tk1iDL,I6Tl1iDJ,GAAK/1L,GAAA,EAAAxc,EAAAzc,KAAAgvN,0BAAA/1L,EAAAxc,EAAApe,OAAA46B,IAAA,CACT,GAAIxK,GAAEhS,EAAAwc,E7Tm1iDM,I6Tl1iDXxK,EAAA/b,eAAOu8M,EACP,MAAArnC,IAAA,WAAAoB,GAAAv6J,GAOH,MADAzuB,MAAAqa,qBAAO5D,KAAUzW,KAAIua,YAAMmE,UAAA,8CAAArI,SAAA,gBAAAvM,QAAA,MAC3B89K,GAAA,WAAAoB,GAAA,O7Tk1iDEylC,E6T/0iDmBnyN,UAAMusK,MAAA,WAC3B7oK,KAAA2uN,oBA9DW,IAAAlyM,GAAAC,EAAAC,EAAAC,CA+DZ,O7Ti1iDG6xM,G6Tj5iDHH,I7Tk5iDO5zN,OAAOM,GAAqB,c6Tj5iDvBuzN,GA+DZ,wCAAA9xM,MAAA,KAAA8rK,GAAA,GAAAA,GAAA,IAAA9rK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAsxM,SAAAtxM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA0oK,GAAA,sBAAAA,GAAA,uBAAA1oK,GAAAliB,UAAD+zN,MCnEAS,GAAA,WAuFA,QAACC,MAAA,MApFUA,GAAAC,WAAP,SAAkBre,GAAsB,MAAO,IAAIznL,MAAY,IAAXynL,IAC7Coe,EAAAE,WAAP,SAAiB/4K,GAAU,MAAAvzC,MAAA4M,MAAA2mC,EAAA/sB,UAAA,M9T+5iD3B4lM,E8T95iDIG,UAAO,SAAAh5K,G9T+5iDP,O8T75iDI6hJ,IAAKg3B,EAAEI,cAASj5K,EAAek5K,UAAK3uM,YACpCu3K,MAAM+2B,EAASI,eAAcj5K,EAAKm5K,WAAc,GAAA5uM,YAClDqW,KAAAi4L,EAAAI,cAAAj5K,EAAAo5K,cAAA7uM,c9Ti6iDNsuM,E8T75iDIQ,iBAAc,SAAK9yJ,GACtB,MAAAs0H,IAAAruK,EAAAiuL,KAAAl0I,GAAA16C,OAAA,Q9T+5iDDgtM,E8T55iDIS,iBAAc,SAAK/yJ,GACtB,MAAAs0H,IAAAruK,EAAAiuL,KAAAl0I,GAAA16C,OAAA,M9T85iDDgtM,E8Th5iDkCI,cAAA,SAAAjwJ,EAAAuwJ,G9Tk5iD9B,Q8Tj5iDoB,KAApBA,IAAoBA,EAAW,GAAKvwJ,EAAGjhE,OAAUwxN,GAACvwJ,EAAU,IAACA,CAChE,OAAAA,I9To5iDD6vJ,E8T94iDIW,eAAmB,SAAaC,EAAIC,GACvC,MAAAjtN,MAAA4J,OAAAojN,EAAAC,GAAAb,EAAAc,U9Tg5iDDd,E8T14iDQe,YAAa,SAAYnf,EAAMh2D,GACnC,GAAApxI,GAAO,GAAQ2f,MAAc,IAAPynL,EAEzB,OADGpnM,GAAOwmN,QAAQxmN,EAAC6lN,UAAkBz0E,GACrCo0E,EAAAE,WAAA1lN,IAEMwlN,EAAAiB,iBAAP,SAA8Brf,EAAYh2D,GAAY,MAAGg2D,GAASoe,EAAWkB,WAAAt1E,IACtEo0E,EAAAkB,WAAW,SAAlBt1E,GAAgC,MAAYA,GAASo0E,EAAac,SAC3Dd,EAAAmB,YAAA,SAAPC,GAA0B,MAA6B,GAAfA,EAA4BpB,EAAAc,S9T24iDpEd,E8T14iDQqB,mBAAgB,SAAWzf,EAAS0f,EAAAC,G9T24iDxC,Q8T34iD0C3f,EAAOoe,EAAME,WAAAoB,OACb1f,EAAOoe,EAAME,WAAAqB,K9Tg5iD3DvB,E8T54iDQwB,cAAe,SAAW5f,GAC9B,GAAA6f,GAAUzB,EAASC,WAAOre,GAAA8f,QAC7B,WAAAD,EAAA,EAAAA,GAMMzB,EAAA2B,YAAA,SAAP55L,EAAyBkhK,GAAoB,MAAK,IAAA9uK,MAAY4N,EAAMkhK,EAAI,GAAAo3B,WACjEL,EAAA4B,kBAAP,SAAsBz6K,GAAoB,MAApBA,GAAoB06K,SAAA,SAAA16K,G9Ty4iD1C64K,E8Tx4iDO8B,eAAO,SAAiBC,G9Ty4iD3B,G8Tx4iDe,gBAAJA,GACV,SAGDA,GAAYnuN,KAAK4M,MAAMuhN,EACvB,IAAIC,GAAOpuN,KAAG4M,MAAKuhN,EAAmB,MAClCE,EAAUruN,KAAA4M,MAAYuhN,EAAM,SAE7BG,EAASH,EAAE,E9Tu4iDd,O8Tt4iDIC,GAAO,EACVA,EAAA,KAAAC,EAAA,IAEGA,EAAO,EACVA,EAAA,KAAAC,EAAA,IAEJA,EAAA,KACLlC,EAAAc,QAAC,MAAAd,K9T64iDGmC,GAAmCtxN,MAAQA,KAAKuY,WAAc,WAC9D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF24M,GAAoCvxN,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Do4M,GAAoCxxN,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC7E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+T99iDjE+3M,GAAA,SAAA73M,G/T2+iDrC,Q+Tv9iDH83M,GAQCp3M,EAAMC,EAAQo3M,EA+BdC,EAAAlD,EAAA91L,EAAApe,EAAAq3M,GAvCkB,GAAAxuN,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAuCvC,OAtCSqD,GAAAiX,SACAjX,EAAAkX,cACAlX,EAAAsuN,wBACAtuN,EAAAuuN,eACAvuN,EAAAqrN,WAAiBA,EAChBrrN,EAAAu1B,OACAv1B,EAAAmX,MA1BXnX,EAAAwuN,sBACAxuN,EAAAyuN,iCAAmC,GACnCzuN,EAAA0uN,yBAAA,aA2BC1uN,EAAK2uN,6BAA6B,iB/T09iD5B3uN,E+Tz9iDL4uN,+BACAxsB,KAAA,EACA2nB,UAAS,EACTxoN,SACCstN,iBAAA,GAEF7uN,EAAK8uN,uBAAA,KACL9uN,EAAK+uN,qCAAmC,EACxC/uN,EAAKgvN,iCAA+B,GAAA33D,KACpCr3J,EAAKivN,2BAAuB,E/T09iDtBjvN,E+Tz9iDLkvN,sBACA9sB,KAAA,EACC2nB,UAAA,I/T29iDI/pN,E+Tz9iDL2pN,SACC52M,KAAA,MAGF/S,EAAKmvN,YAAAnvN,EAAA0uN,yBACL1uN,EAAKovN,2BAA4B,KACjCpvN,EAAKqvN,qBAAA,KAGLrvN,EAAKsvN,gCAAoB,EAGzBtvN,EAAKuvN,SAAA1D,GACL7rN,EAAKwuN,oBAAoBjD,uBAAQj0M,UAAA,iBAAAtX,GAAAmX,IAAAhP,iB/Tq9iD3BnI,EAAMwuN,oBAAoBhpD,Q+Tp9iDhCxlK,EAvCDiuN,GAAmBI,EAET93M,G/T4/iDP83M,E+Tp9iDcp1N,UAAA+H,SAAA,WAChBrE,KAAA20M,Y/Ts9iDE+c,E+Tn9iDMp1N,UAAAu2N,oBAAoC,SAAAvF,GAE3CttN,KAAAyyN,4BAAOzyN,KAAAyyN,2BAAAK,eAAAxF,IAKRttN,KAAKyyN,2BAAAzyN,KAAAqyN,iCAAwCrwN,IAAAsrN,GAC7CttN,KAAK+yN,wCACL/yN,KAAAgzN,wC/Tk9iDEtB,E+Th9iDHp1N,UAqBCy2N,sCAAA,WApBA,GAAI1vN,GAAOrD,KACP2gB,EAASwwK,OAAmBvvK,QAAS,OACrClB,EAAWC,EAA0BgB,QAAAM,SAAAjiB,KAAA8xN,iCAAA,OAKzC9xN,MAAKizN,oBAAa,K/T88iDZjzN,K+T78iDJ4xN,aAAUvE,qBAAyErtN,KAAAyyN,2BAAAK,cAAApyM,EAAAC,EAHhF,OAIHhG,UAAK,SAAA1S,G/T88iDG5E,E+T78iDP4vN,qBACAhrN,KAAMA,EAAEgkN,OACRv4J,OAAAzrD,EAAWyrD,OACXhzC,UAASA,EACTC,QAASA,EACT+zK,UAAW,WACVxC,YAXC,OAcD7uL,EAAAmX,IAAAhP,kB/T+8iDFkmN,E+T58iDHp1N,UA0CC02N,oCAAA,WAzCA,GAAI3vN,GAACrD,IAELA,MAAI0yN,qBAAU,IACd,IAAI/xM,GAASwwK,OAAmBvvK,QAAS,OACrClB,EAACC,EAAAgB,QAAAM,SAAkCjiB,KAAK8xN,iCAAA,OAC5C9xN,MAAKiyN,8BAA8BxsB,KAAK,EACxCzlM,KAAKiyN,8BAAartN,S/T48iDZ5E,K+T38iDJ4xN,aAAUjE,oBAAU3tN,KAAAyyN,2BAAAK,cAAApyM,EAAAC,GACpBhG,UAAK,SAAA1S,GACL5E,EAAIsvN,gCAAW,C/Tk9iDP,K+T58iDJ,GALA/tN,MACA+oD,EAAA,EACAulK,EAAe,KACfpd,EAAa,KACbptF,EAAQ,KACZiqF,EAAe,KAAP15K,EAAG,EAAAxc,EAAAxU,EAAAkrN,MAAAl6L,EAAAxc,EAAApe,OAAA46B,IAAA,CACV,GAAAy5K,GAAQj2L,EAAAwc,EACRyvF,GAAAp9F,WAAeonL,EAAAhqF,OACfwqG,EAAe5nM,WAASonL,EAAM6D,eAC9BT,EAAmBptF,EAAI,EAAOwqG,EAAAxqG,EAAA,KAC9BiqF,EAAGrnL,WAAWonL,EAAAC,OACbA,EAAK,IACLtvM,EAAAsvN,gCAAA,G/T88iDU/tN,E+T38iDVoS,MACA+3F,IAAAphD,EACAylK,YAAW1gB,EAAK0gB,YAChB9iM,MAAAoiL,EAAUpiL,MACVjF,SAAOqnL,EAAKrnL,SACZq9F,MAAOA,EACPiqF,MAAMA,EACNrqM,KAAA4qN,EACEG,QAAAvd,IAEHnoJ,IAGDtqD,EAAK4uN,8BAA6BrtN,MAASA,EAC3CvB,EAAKqvN,qBAAmB9tN,EAAAjH,MAAA,EAAA0F,EAAA4uN,8BAAA7E,WACtB/pN,EAAAmX,IAAAhP,kB/T68iDFkmN,E+Tt8iDKp1N,UAAAg3N,4BAAA,W/Tu8iDD,O+Tr8iDL5yM,UAASywK,GAAMruK,EAAGiuL,KAAA/wM,KAAQ44B,KAAO26L,oBAChC5yM,QAAAwwK,OAAAvvK,QAAA,U/Ty8iDA8vM,E+Tr8iDWp1N,UAAIk3N,qBAAsB,WACvC,GAAA7pN,GAAW,GAAGikN,GAGd,OAFAjkN,GAAOyM,KAAOpW,KAAKgtN,QAAA52M,KACnBzM,EAAOmtB,KAAO92B,KAAA6xN,oBAAAlD,iBACdhlN,G/Tu8iDE+nN,E+Tp8iDcp1N,UAACm3N,cAAA,SAAAxrN,G/Tu8iDX,I+Tr8iDF,GADAkmN,MACJuF,GAAe,EAAPz6L,EAAG,EAAAxc,EAAAxU,EAAAkmN,QAAAl1L,EAAAxc,EAAApe,OAAA46B,IAAA,CACV,GAAI06L,GAAMl3M,EAAAwc,GACTy5K,GACAogB,cAAWa,EAAAC,WAAgBd,cAC3BxiM,MAAAqjM,EAAUC,WAAItjM,MACdujM,SAAUF,EAAEG,qBACZC,WAAAzoM,WAAiBqoM,EAAUjrG,OAC3BsrG,gBAAiB1oM,WAAWqoM,EAAIlG,gBAC/BwG,gBAAA3oM,WAAAqoM,EAAAhhB,OAEFwb,GAAOn3M,KAAA07L,GACNA,EAAAuhB,gBAAqB,IACrBP,GAAA,GAIF1zN,KAAKoyN,oCAAiCsB,EACtC1zN,KAAKmyN,uBAAAhE,EACLnuN,KAAKsyN,2BAAArqN,EAAgComN,cACrCruN,KAAcqyN,iCAAA,GAAA33D,I/Tq8iDR,K+Tr8iDF,GAAIh+I,GAAE,EAAAw3M,EAAA/F,EAAAzxM,EAAAw3M,EAAA71N,OAAAqe,IAAA,CACT,GAAIy3M,GAACD,EAAAx3M,EACL1c,MAAAqyN,iCAAA1vN,IAAAwxN,EAAArB,cAAAqB,GAKDn0N,KAAIwa,IAAIhP,eACuB,MAA9BxL,KAAKyyN,4BAAkE,MAAzCzyN,KAAAmyN,wBAAyCnyN,KAAAmyN,uBAAA9zN,OAAA,GACvE2B,KAAA6yN,oBAAA7yN,KAAAmyN,uBAAA,GAAAW,gB/Tq8iDCpB,E+Tl8iDHp1N,UAkBCq4M,SAAA,WAhBA,GAAItxM,GAACrD,IAGLA,MAAImyN,uBAAa,IACjB,IAAIvxM,GAAO5gB,KAAGszN,8BAEXtG,EAAKhtN,KAAAwzN,sBACPxzN,MAAKwyN,aAAaxyN,KAAA+xN,yB/T+7iDT/xN,K+T97iDR4xN,aAAK7E,qBAAoBnsM,EAAAosM,EAAAhtN,KAAAuyN,sBAAA53M,UAAA,SAAA1S,GACvB5E,EAAAowN,cAAAxrN,K/Tk8iDMjI,K+T/7iDR4xN,aAAK1E,8BAAoBtsM,EAAAosM,EAAAhtN,KAAAuyN,sBAAA53M,UAAA,SAAA1S,GACvB5E,EAAAowN,cAAAxrN,M/Tm8iDFypN,E+T77iDKp1N,UAAiB83N,wBAAK,SAAgCtB,GAC7D,MAAAA,IAAA9yN,KAAAyyN,4BAAAzyN,KAAAyyN,2BAAAK,kB/T+7iDEpB,E+T57iDmBp1N,UAAa+3N,iBAAM,SAAAp3N,GAGlC,KAFCA,EAAIu3G,SAAIv3G,EAAA+gM,SAGdh+L,KAAKuyN,qBAAW9sB,KAAA,EAChBzlM,KAAA20M,a/T87iDC+c,E+T17iDcp1N,UAAGg4N,oBAAoB,SAAAC,GACvCv0N,KAAKwyN,YAAA+B,EACLv0N,KAAKuyN,qBAAW9sB,KAAA,EAChBzlM,KAAA20M,Y/T47iDE+c,E+Tz7iDGp1N,UAAqBk4N,qBAAY,SAAA/uB,GACtCzlM,KAAKuyN,qBAAW9sB,OAChBzlM,KAAA20M,Y/T27iDE+c,E+Tx7iDcp1N,UAAAm4N,SAAA,SAAAC,GAChB10N,KAAA20M,Y/T07iDE+c,E+Tv7iDcp1N,UAAAq4N,YAAA,SAAAD,GAChB10N,KAAA20M,Y/Ty7iDE+c,E+Tt7iDGp1N,UAAAs4N,yCAA0C,SAAAnvB,GAC/CzlM,KAAIiyN,8BAA4BxsB,MAChC,IAAIovB,IAAQpvB,EAAU,GAAKzlM,KAAAiyN,8BAA8B7E,UACrD0H,EAACD,EAAA70N,KAAoBiyN,8BAAQ7E,SACjCptN,MAAK0yN,qBAAmB1yN,KAAAiyN,8BAAArtN,MAAAjH,MAAAk3N,EAAAC,GACxB90N,KAAAwa,IAAAhP,eA7PW,IAAAiR,GAAAC,EAAAC,EAAAC,EAAmBC,EAAAC,EAAAC,EAAAC,CAAS,O/TsrjDrC00M,G+TnsjDHH,I/TosjDO72N,O+TnsjDPM,GAAU,YACV4V,SAAU,wBACVE,SAAA5W,EAAiB,MACjBkmM,iB/TosjDWjvL,Q+TlsjDV,4CACA,0DACA,wDACA,2CACA,yEAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACW8xM,GA8PZ,wCAAA/0M,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4uM,SAAA5uM,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAiwM,SAAAjwM,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAmxM,SAAAnxM,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA/hB,GAAA,mBAAAA,GAAA,oBAAA+hB,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAwxM,SAAAxxM,GAAAtiB,UAADg3N,IA9PgCr0E,GAAA,G/T2sjD5B03E,GAA0C/0N,MAAQA,KAAKuY,WAAc,WACrE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFo8M,GAA2Ch1N,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D67M,GAA2Cj1N,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IgU3tjD3Dw7M,GAAA,SAAAt7M,GhUwujD3C,QgUjtjDHu7M,GAQOt7M,EAAQS,EAAAC,EAkCdo3M,EAAAC,EAAAh5L,EAAA68K,EAAAj7L,GA1CmB,GAAAnX,GAAKuW,EAAApd,KAAgBwD,KAAAsa,EAAAC,IAAAva,IAC/BqD,GAAAwW,MAAMA,EACNxW,EAAAiX,SACAjX,EAAAkX,cACAlX,EAAAsuN,wBACAtuN,EAAAuuN,aAAiBA,EAChBvuN,EAAAu1B,OACAv1B,EAAAoyM,cAAsBA,EAtBjCpyM,EAAAmX,MACAnX,EAAAu5L,YAAA,WAAkD,OAyBjDv5L,EAAImxM,kBAAkB,MACtB,IAAI5zL,GAAOvd,EAAGu1B,KAAM88K,wBAChB/0L,EAASC,EAAGD,QACZD,EAAWE,EAAoBF,SA4BnC,OhUurjDMrd,GgUhtjDL+xN,cACAntN,KAAM,KACNyrD,OAAA,KACAhzC,UAASA,EACTC,QAASA,EACT+zK,UAAW,WACVxC,YAPe,OAUjB7uL,EAAKgyN,uBAAA,KACLhyN,EAAKiyN,4BAA8B,KACnCjyN,EAAKkyN,4BAA4B,KACjClyN,EAAKmyN,qBAAqB,KAC1BnyN,EAAKoyN,mBAAA,KAELpyN,EAAKqyN,+BAA2B,EAChCryN,EAAKsyN,oBAAgB,KhU+sjDftyN,EgU9sjDL8vM,eACA1N,KAAA,EACC2nB,UAAA,IAKF/pN,EAAKuvN,SAAA1D,GhU4sjDC7rN,EAAMuyN,kBAAoBvyN,EAAMwW,MAAM5R,KAAK0S,UAAU,SAAU1S,GAAQ,MAAO5E,GAAMwyN,8BAA8B5tN,EAAK2S,WgU3sjD7HvX,EA1CD0xN,GAAoBI,EAGVv7M,GhUqvjDPu7M,EgU3sjDM74N,UAAiBgI,YAAA,WACxBtE,KAAK41N,mBACN51N,KAAA41N,kBAAAh/F,ehU6sjDEu+F,EgU1sjDmB74N,UAAG+H,SAAA,WACxBrE,KAAAwa,IAAAhP,gBhU4sjDE2pN,EgUzsjDG74N,UAA0Bw5N,mBAAW,SAAA7tN,GAC1CjI,KAAK+1N,mBAAoB9tN,EAAA2rN,WAEzB5zN,KAAKstN,aAAArlN,EAAA2rN,WAA6Bd,cAClC9yN,KAAI01N,+BAA6B,ChU2sjD3B,KgUzsjDF,GADAM,GAAQ,GAAA35N,OACZ0yG,EAAe,EAAP91E,EAAG,EAAAxc,EAAAxU,EAAAkrN,MAAAl6L,EAAAxc,EAAApe,OAAA46B,IAAA,CACV,GAAIy5K,GAAKj2L,EAAGwc,GACRyvF,EAAQp9F,WAAWonL,EAAIhqF,OACvBiqF,EAAArnL,WAAeonL,EAAAC,OACfugB,EAAe5nM,WAASonL,EAAM6D,eAC/BT,EAAWptF,EAAA,EAAAwqG,EAAAxqG,EAAA,IACbiqF,GAAK,IACL3yM,KAAA01N,+BAAA,GhU2sjDQM,EgUxsjDFh/M,MACL+3F,MACAqkH,YAAW1gB,EAAK0gB,YAChB9iM,MAAAoiL,EAAUpiL,MACVjF,SAAOqnL,EAAKrnL,SACZq9F,MAAOA,EACPiqF,MAAMA,EACNrqM,KAAA4qN,EACCG,QAAAvd,IAEH/mG,IAGD/uG,KAAK21N,oBAAiBK,EAGtBh2N,KAAKi2N,eAAAD,EAAyBr4N,MAAO,EAAgBqC,KAAAmzM,cAAAia,WACrDptN,KAAck2N,uBAAK,GAAAx7D,IhUssjDb,KgUtsjDF,GAAIh+I,GAAE,EAAAC,EAAA3c,KAAA21N,oBAAAj5M,EAAAC,EAAAte,OAAAqe,IAAA,CACT,GAAIy3M,GAACx3M,EAAAD,EACL1c,MAAAk2N,uBAAAvzN,IAAAwxN,EAAAf,YAAAe,GAGDn0N,KAAAwa,IAAAhP,gBhUusjDE2pN,EgUpsjDG74N,UAAyBu5N,8BAAA,SAAA5tN,GAC9BjI,KAAK81N,mBAAW7tN,GAChBjI,KAAA20M,YhUssjDEwgB,EgU5rjDF74N,UAAA65N,qBAAA,WAPA,GAAI9yN,GAAQrD,KACR4gB,EAAO5gB,KAAG44B,KAAM88K,wBAChB/0L,EAASC,EAAGD,QACZD,EAACE,EAAaF,ShUqsjDZ1gB,MgUpsjDJ4xN,aAAUjE,oBAAU3tN,KAAAstN,aAAA5sM,EAAAC,GACpBhG,UAAK,SAAA1S,GACH5E,EAAAyyN,mBAAA7tN,MhUusjDFktN,EgU5qjDF74N,UAAAq4M,SAAA,WAtBA,GAAItxM,GAACrD,IAGLA,MAAKo1N,aAAantN,KAAA,KhUksjDZjI,KgUhsjDJ4xN,aAAKvE,qBAAyBrtN,KAAO+1N,mBAAAjD,cAAA9yN,KAAAo1N,aAAA10M,UAAA1gB,KAAAo1N,aAAAz0M,QAAA3gB,KAAAo1N,aAAAljC,aAAAv3K,UAAA,SAAA1S,GACrC5E,EAAK+xN,aAAantN,KAAMA,EAAGgkN,OAC3B5oN,EAAK+xN,aAAI1hK,OAAezrD,EAAAyrD,OACtBrwD,EAAAmX,IAAAhP,gBAIJ,IAAI4qN,IAAc,gBAAqB,iBAAK,gBhU+rjDtCp2N,MgU7rjDJ4xN,aAAKlE,qBAAyB1tN,KAAA+1N,mBAAuBjD,cAAA9yN,KAAAo1N,aAAA10M,UAAA1gB,KAAAo1N,aAAAz0M,QAAA3gB,KAAAo1N,aAAAljC,YAAAkkC,GAAAz7M,UAAA,SAAA1S,GACrD5E,EAAKgyN,uBAAA/pM,WAA8BrjB,EAAWygH,OAC9CrlH,EAAKiyN,4BAA8BhqM,WAAWrjB,EAAIwlN,gBAClDpqN,EAAKkyN,4BAA6BttN,EAAA,MAAAqjB,WAAArjB,EAA+B0qM,OAAI,KAErEtvM,EAAKmyN,qBAAmBnyN,EAAAiyN,4BAAA,EAAAhqM,WAAArjB,EAAAsuM,eAAAlzM,EAAAiyN,4BAAA,KACtBjyN,EAAAmX,IAAAhP,kBhU+rjDF2pN,EgU1rjDM74N,UAAuB+5N,iBAAK,SAAmBC,GAEtDt2N,KAAAy1N,oBAAOz1N,KAAAy1N,mBAAArC,aAAAkD,IAKRt2N,KAAKy1N,mBAAAz1N,KAAAk2N,uBAAmCl0N,IAAAs0N,GACxCt2N,KAAAu2N,qChUyrjDEpB,EgUtrjDoB74N,UAAKk6N,qBAA6B,SAAApD,GACxD,MAAAA,IAAApzN,KAAAy1N,oBAAAz1N,KAAAy1N,mBAAArC,gBhUwrjDE+B,EgUvojDF74N,UAAAi6N,iCAAA,WA7CA,GAAGlzN,GAAMrD,IhUsrjDH,IgUrrjDLA,KAAAy1N,mBhUqrjDK,CgUjrjDN,GAAI70M,GAAO5gB,KAAG44B,KAAM88K,wBAChB/0L,EAASC,EAAGD,QACZD,EAAWE,EAAwBF,UAGnCwxK,EAAClyL,KAAAo1N,aAA2Bp1N,KAAAo1N,aAAAljC,YAAA,KAEhClyL,MAAKizN,oBAAsB,KhUkrjDrBjzN,KgUhrjDH2xN,sBAAW7F,qBAAS9rN,KAAAy1N,mBAAArC,YAAA1yM,EAAAC,EAAAuxK,GACrBv3K,UAAK,SAAA1S,GhUirjDG5E,EgUhrjDP4vN,qBACAhrN,KAAMA,EAAEgkN,OACRv4J,OAAAzrD,EAAWyrD,OACXhzC,UAASA,EACTC,QAASA,EACT+zK,UAAW,WACVxC,eAGD7uL,EAAAmX,IAAAhP,iBAIFxL,KAAK44B,KAAAq5K,4BAELjyM,KAAKy2N,oBAAsB,KhU6qjDlBz2N,KgU3qjDN2xN,sBAAWtF,uBAASrsN,KAAAy1N,mBAAArC,YAAA1yM,EAAAC,GAErBhG,UAAK,SAAA1S,GAGL5E,EAAIozN,oBAAKxuN,EACR5E,EAAKozN,sBACLpzN,EAAAozN,wBAGApzN,EAAAmX,IAAAhP,oBhU2qjDF2pN,EgUtqjDgB74N,UAAcw4M,oBAAY,SAAA5iB,GAC5ClyL,KAAKo1N,aAAWljC,cAChBlyL,KAAK20M,WACL30M,KAAAu2N,oChUwqjDEpB,EgUrqjDgB74N,UAAY24L,kBAAU,SAAAP,GACxC10L,KAAKo1N,aAAW1gC,YAChB10L,KAAA20M,YhUuqjDEwgB,EgUpqjDgB74N,UAAY45M,mBAAS,SAAAt1L,GACvC5gB,KAAKo1N,aAAa10M,UAAUE,EAAQ,GACpC5gB,KAAKo1N,aAAKz0M,QAAAC,EAAsB,GAChC5gB,KAAK44B,KAAAu9K,sBAAWv1L,EAAA,GAAAgB,QAAA,OAAAhB,EAAA,GAAAgB,QAAA,QAChB5hB,KAAK20M,WACL30M,KAAKu2N,mCACLv2N,KAAAm2N,wBhUsqjDEhB,EgUnqjDc74N,UAAe+5M,mBAAG,WAClC,GAAIpuM,GAAAjI,KAAA+0M,kBhUoqjDMf,EgUnqjDI,iBAAqBh0M,KAAO+1N,mBAAmBjD,cAAQ,IAAa9yN,KAAAo1N,aAAc10M,UAAOyB,OAAA,YAElG,IAAAniB,KAAAo1N,aAAcz0M,QAAiBwB,OAAA,YAAsB,MAAAniB,KAAAo1N,aAAAljC,YAAA,MAC1DlyL,MAAAy1M,cAAA1B,iBAAAC,EAAA/rM,IhUoqjDEktN,EgUjqjDkB74N,UAAYy4M,gBAAe,WAC/C,GAAIC,GAAWh1M,KAACo1N,aAAA1hK,OAAA1zD,KAAAo1N,aAAA1hK,OAAAr1D,OAAA,EACZsL,EAAS,GACTsrM,EAAA,GACDniB,EAAM,kBACkB,QAA1B9yL,KAAAo1N,aAAaljC,aAAa,QAAAlyL,KAAAo1N,aAAAljC,YAC1BY,EAAA,aACuB,SAAvB9yL,KAAUo1N,aAAaljC,YACvBY,EAAA,UACoB,QAApB9yL,KAAUo1N,aAAUljC,cACpBY,EAAA,OAID,IAAAkQ,GAAa,GAAA3mM,MACb2mM,GAAehsL,KAAA,OhUkqjDT,KgUlqjDF,GAAIiiB,GAAG,EAAAxc,EAAAzc,KAAAo1N,aAAAntN,KAAAgxB,EAAAxc,EAAApe,OAAA46B,IAAA,CACV,GAAAy9L,GAAQj6M,EAAKwc,EACb+pK,GAAAhsL,KAAA0/M,EAAAv3M,OAIDxV,GAASq5L,EAAKh/J,KAAG,KAAW,MhUiqjDtB,KgUhqjDL,GAAI1lC,GAAG,EAAGA,EAAC02M,EAAA12M,IAAO,CAClB22M,EAAe,IAAA9jB,KAAKnxL,KAAAo1N,aAAL1hK,OAAAp1D,IAAA6jB,OAAsB2wK,GAAE,GhUiqjD9B,KgUjqjDL,GAAIp2K,GAAG,EAAAC,EAAA3c,KAAAo1N,aAAAntN,KAAAyU,EAAAC,EAAAte,OAAAqe,IAAA,CACV,GAAIg6M,GAAK/5M,EAAGD,EACZu4L,IAAA,IAAAyhB,EAAAzuN,KAAA3J,GAGD22M,GAAM,OACNtrM,GAAAsrM,EAED,MAAAtrM,IhUkqjDEwrN,EgU/pjDiB74N,UAAYq6N,cAAA,SAAAlxB,GAC/BzlM,KAAImzM,cAAe1N,KAAKA,CACxB,IAAIovB,IAAQpvB,EAAU,GAAKzlM,KAAAmzM,cAAcia,UACrC0H,EAACD,EAAiB70N,KAAKmzM,cAAAia,SAC3BptN,MAAKi2N,eAAgBj2N,KAAG21N,oBAAAh4N,MAAAk3N,EAAAC,GACxB90N,KAAAwa,IAAAhP,eAlSW,IAAAiR,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAyBC,EAAAC,CAAS,OhUo8jD3Cm4M,GgUl9jDHH,IhUm9jDOt6N,OgUl9jDPM,GAAU,YACV4V,SAAU,+BACVE,SAAA5W,EAAiB,MACjBkmM,iBhUm9jDWjvL,QgUj9jDV,wDACA,wCACA,8CACA,yDACA,yDACA,8EAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWu1M,GAmSZ,wCAAAx4M,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2uM,SAAA3uM,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAgwM,SAAAhwM,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA42L,SAAA52L,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAhiB,GAAA,mBAAAA,GAAA,oBAAAgiB,GAAAtiB,UAADy6N,IAnSsC93E,GAAA,GhU09jDlCu5E,GAAqC52N,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dy9M,GAAqC72N,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC9E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IiU9+jDzGo9M,GACQ,WjUo/jDL,QiUr/jDiBC,GAA0BnF,EAAAh5L,GACtC54B,KAAA4xN,aAAiBA,EAHzB5xN,KAAA44B,OAG8B54B,KAAAg3N,+BAAA,GjUy/jD3BD,EiUr/jD+Bz6N,UAAO4qB,QAAc,SAAErN,EAAAsnD,GACxD,GAAImsJ,GAAazzM,EAAA+xD,OAAA,YjUs/jDX,KiUr/jDL0hJ,EAEG,OAAK,CjUq/jDH,IiUp/jDQ,MAAbttN,KAAA44B,KAAOta,UAEJ,OAAK,CACT,IAAIsC,GAAO5gB,KAAG44B,KAAK88K,wBACf/0L,EAAS,KACVD,EAAS,IASZ,OARQ,OAAPE,GACAD,EAASC,EAAGD,QACZD,EAAAE,EAAAF,YAEAC,EAASwwK,OAAmBvvK,QAAS,OACrClB,EAAAC,EAAAgB,QAAAM,SAAAjiB,KAAAg3N,+BAAA,SAGDh3N,KAAA4xN,aAAAjE,oBAAAL,EAAA5sM,EAAAC,GA5BW,IAAAlE,GAAAC,CA6BZ,OjUq/jDGq6M,GiUnhkDHH,IjUohkDOl8N,OAAOM,GAAqB,ciUnhkDvB67N,GA6BZ,wCAAAp6M,MAAA,KAAAowM,SAAApwM,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,UAADq8N,MjU8/jDIE,GAA4Bj3N,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GkUlhkD/D89M,KACEh0K,KAAM,GAAAxQ,UAAe++K,KACtBvuK,KAAA,gBAAAxQ,UAAAwiL,GAAAhuM,SAAAtM,QAAAk8M,MA2BFK,GAAA,WAAqC,QAACC,MAAA,MlUihkDlCA,GkU1ikDHH,IlU2ikDOv8N,OkU1ikDPM,GAAS,WlU2ikDEqX,SkUzikDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAA0/D,IACXzvD,GAAA,YACAwoC,GACAjT,GACAgtB,GACAmB,IlU4ikDU/4M,ckUzikDVq/M,GACAyD,IlU4ikDUp/M,WkUzikDV47L,GACA6Z,GACAsB,GACAmB,GACAQ,OAEmC4I,MlUijkDjCC,GAAoCr3N,MAAQA,KAAKuY,WAAc,WAC/D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF0+M,GAAqCt3N,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dm+M,GAAqCv3N,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC9E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,ImUnmkDhE89M,GAAA,SAAA59M,GnU6mkDtC,QmUjmkDH69M,GAKCn9M,EAAMC,EAAQo3M,EAiBd/4L,EAAApe,GAtBkB,GAAAnX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAsBvC,OArBSqD,GAAAiX,SACAjX,EAAAkX,cACAlX,EAAAsuN,sBAAiBA,EAChBtuN,EAAAu1B,OAfXv1B,EAAAmX,MAkBCnX,EAAKyuN,iCAAyB,GAC9BzuN,EAAKq0N,kBAAA,KACLr0N,EAAKs0N,0BAA0B,GAAAj9D,KAC/Br3J,EAAKu0N,sBAAgB,EnUkmkDfv0N,EmUjmkDLqoN,eACAt1M,KAAA,KACAyhN,QAAQ,KACRC,SAAO,MACPryB,KAAA,EACC2nB,UAAA,IAKF/pN,EAAK00N,sBAAW,KnU+lkDV10N,EAAMuvN,SAAW1D,GmU9lkDvB7rN,EAtBDg0N,GAAmBI,EAET79M,GnUqnkDP69M,EmU9lkDcn7N,UAAA+H,SAAA,WAChBrE,KAAA20M,YnUgmkDE8iB,EmU7lkDMn7N,UAAAu2N,oBAA+B,SAAAyD,GAEtCt2N,KAAA+3N,uBAAO/3N,KAAA+3N,sBAAA3E,aAAAkD,IAKRt2N,KAAK+3N,sBAAA/3N,KAAA23N,0BAAmC31N,IAAAs0N,GACxCt2N,KAAAu2N,qCnU4lkDEkB,EmUjjkDFn7N,UAAAi6N,iCAAA,WAxCA,GAAIlzN,GAAOrD,KACP2gB,EAASwwK,OAAmBvvK,QAAS,OACrClB,EAAWC,EAA0BgB,QAAAM,SAAAjiB,KAAA8xN,iCAAA,OAKzC9xN,MAAKizN,oBAAsB,KnUwlkDrBjzN,KmUtlkDH2xN,sBAAW7F,qBAAS9rN,KAAA+3N,sBAAA3E,YAAA1yM,EAAAC,EAJlB,OAKHhG,UAAK,SAAA1S,GnUulkDG5E,EmUtlkDP4vN,qBACAhrN,KAAMA,EAAEgkN,OACRv4J,OAAAzrD,EAAWyrD,OACXhzC,UAASA,EACTC,QAASA,EACT+zK,UAAW,WACVxC,YAZC,OAeF7uL,EAAAmX,IAAAhP,iBAIFxL,KAAK44B,KAAAq5K,4BAELjyM,KAAKy2N,oBAAsB,KnUmlkDlBz2N,KmUjlkDN2xN,sBAAWtF,uBAASrsN,KAAA+3N,sBAAA3E,YAAA1yM,EAAAC,GAErBhG,UAAK,SAAA1S,GAGL5E,EAAIozN,oBAAKxuN,EACR5E,EAAKozN,sBACLpzN,EAAAozN,wBAGApzN,EAAAmX,IAAAhP,mBnUilkDFisN,EmU1jkDFn7N,UAAAq4M,SAAA,WAhBA,GAAItxM,GAACrD,IACLA,MAAK03N,kBAAA,KnU4kkDC13N,KmU3kkDL2xN,sBAAsBlG,qBAAgBzrN,KAAA0rN,eAAA/wM,UAAA,SAAA1S,GACtC5E,EAAKq0N,kBAAAzvN,EAAwBkmN,QAC7B9qN,EAAKu0N,sBAAA3vN,EAA4BomN,cACjChrN,EAAcs0N,0BAAY,GAAZj9D,InU4kkDL,KmU5kkDL,GAAIzhI,GAAE,EAAAxc,EAAAxU,EAAAkmN,QAAAl1L,EAAAxc,EAAApe,OAAA46B,IAAA,CACT,GAAAk7L,GAAK13M,EAAAwc,EACL51B,GAAAs0N,0BAAAh1N,IAAAwxN,EAAAf,YAAAe,GAKD9wN,EAAImX,IAAIhP,eACuB,MAA9BnI,EAAK00N,uBAA2D,MAAlC10N,EAAAq0N,mBAAkCr0N,EAAAq0N,kBAAAr5N,OAAA,GAChEgF,EAAAwvN,oBAAAxvN,EAAAq0N,kBAAA,GAAAtE,gBnU6kkDAqE,EmUxkkDKn7N,UAAoB83N,wBAA2B,SAAKhB,GAC3D,MAAAA,IAAApzN,KAAA+3N,uBAAA/3N,KAAA+3N,sBAAA3E,gBnU0kkDEqE,EmUvkkDmBn7N,UAAa+3N,iBAAM,SAAAp3N,GAGlC,KAFCA,EAAIu3G,SAAIv3G,EAAA+gM,SAGdh+L,KAAK0rN,cAAWjmB,KAAA,EAChBzlM,KAAA20M,anUykkDC8iB,EmUrkkDMn7N,UAAcg4N,oBAAuB,SAAA0D,GAE5Ch4N,KAAK0rN,cAAcmM,SAAWG,EAC9Bh4N,KAAA0rN,cAAAoM,SAAA,QAAA93N,KAAA0rN,cAAAoM,SAAA,cAGA93N,KAAK0rN,cAAcmM,QAAQG,EAC3Bh4N,KAAA0rN,cAAAoM,SAAA,OAGD93N,KAAK0rN,cAAWjmB,KAAA,EAChBzlM,KAAA20M,YnUqkkDE8iB,EmUlkkDGn7N,UAAqBq6N,cAAK,SAAAlxB,GAC/BzlM,KAAK0rN,cAAWjmB,OAChBzlM,KAAA20M,WAjJW,IAAAl4L,GAAAC,EAAAC,EAAAC,EAAoBC,CAAS,OnUstkDtC46M,GmUlukDHH,InUmukDO58N,OmUlukDPM,GAAU,YACV4V,SAAU,yBACVE,SAAA5W,EAAiB,MACjBkmM,iBnUmukDWjvL,QmUjukDV,oCACA,2DACA,wDACA,4CAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACW63M,GAkJZ,wCAAA96M,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4uM,SAAA5uM,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2rK,GAAA,GAAAA,GAAA,IAAA3rK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,UAAD+8N,IAlJiCp6E,GAAA,GnU0ukD7B46E,GAA2Bj4N,MAAQA,KAAKuY,WAAc,WACtD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFs/M,GAA4Bl4N,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D++M,GAA4Bn4N,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IoUvvkDxE0+M,GAAA,SAAAx+M,GpUswkD9B,QoUpwkDHy+M,GAQCtyC,EAAAl5B,EAAMw7B,EAAU1vJ,EAAE63K,EAAmB53K,EAAAre,GAP3B,GAAAlX,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAA63K,EAAA53K,IAAA54B,IAQ3B,OAPUqD,GAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,YACAhlL,EAAAs1B,SACAt1B,EAAAmtM,WAAiBA,EACjBntM,EAAAu1B,OpUqwkDJv1B,EAAMkX,YAAcA,EoUnwkD1BlX,EATD40N,GACWI,EAEAz+M,GpU4wkDRy+M,EoUjwkDM/7N,UAAKg8N,2BAAqB,SAAAh6M,EAAAsC,EAAAsiC,GAClC,GAAI9pC,GAAGpZ,KAAGywM,cAAW7vL,GACnB6V,EAAA,YACAnY,EAAAuC,WACA,6CACAzH,EAAAsH,UAAWqwL,OAAKlwL,WAAA,IAAAzH,EAAAuH,QAAAowL,OAAAlwL,WAAA,UACNqiC,CACZ,OAAAljD,MAAAu4N,YAAA9hM,IpUmwkDE4hM,EoUhwkDE/7N,UAAck8N,4BAA6B,SAAWl6M,EAAOm6M,EAAaz9D,EAAE93G,GAChF,GAAA0oB,GAAY5rE,KAAA4wM,sBAAmB6nB,EAAA/3M,UAA0B+3M,EAAA93M,QAAAq6I,EAEzDpvF,GAAO50D,KAAG,iBAAW80D,mBAAA5oB,GpUgwkDf,IoU/vkDJzsB,GAAA,YACAnY,EAAAuC,WACF,mCAA6B+qD,EAAA5nC,KAAA,IAC7B,OAAAhkC,MAAAu4N,YAAA9hM,IpUiwkDE4hM,EoU/vkDH/7N,UA4BCo8N,yBAAA,SAAAp6M,EAAAsC,EAAAo6I,EAAA93G,GAzBA,GAAI7/C,GAAArD,KACAyqL,EAAC,GAAAP,IAA4B,OAwBjC,OpUsukDMlqL,MoU7vkDJw4N,4BAAoBl6M,EAAAsC,EAAAo6I,EAAA93G,GAEpBvoC,UAAI,SAAwC1S,GpUiwkDpC,IoU5vkDH,GAJDoqM,IAA6BpqM,QAAGkX,MAAA9b,EAAAkX,YAAA,qDAChC+3L,KACAC,GAA6BtqM,QAAGkX,MAAA9b,EAAAkX,YAAA,qDAEpCi4L,KAASv5K,EAAG,EAAAw5K,EAAAxqM,EAAAgxB,EAAAw5K,EAAAp0M,OAAA46B,IAAA,CACX,GAAAy5K,GAAUD,EAAKx5K,EACfo5K,GAAUpqM,KAAK+O,KAAKsU,WAAWonL,EAAIC,QACnCJ,EAAAtqM,KAAY+O,KAAKsU,WAAAonL,EAAOhqF,QACxB4pF,EAAYt7L,KAAKm6K,GAAAruK,EAAOiuL,KAAK2B,EAAIE,MAAMzZ,eACvCqZ,EAAAx7L,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAGD,GAAI0Z,IAAmB5qM,KAAMoqM,EAAW3+I,OAAQ4+I,GAEhDQ,GAAoB7qM,KAAAsqM,EAAgB7+I,OAAA8+I,EAEpC/nB,GAAM7uG,MAAKi3H,EAAAC,KAGZ,SAAOn0L,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACrC+7B,EAAA3zD,gBpUyvkDEuhG,EoUtvkDM/7N,UAAKq8N,cAAqB,SAAAr6M,EAAAsC,EAAAsiC,EAAAuiJ,EAAA2nB,GAClC,GAAIh0M,GAAGpZ,KAAEywM,cAAW7vL,GACjB6V,EAAA,YACAnY,EAAAuC,WACA,+CACAzH,EAAAsH,UAAAqwL,OAAiBlwL,WAAO,IAAAzH,EAAAuH,QAAAowL,OAAAlwL,WACxB,kBAAgBqiC,EAChB,SAAAuiJ,EAAgB5kL,WACnB,cAAYusM,EAAiBvsM,UAC7B,OAAA7gB,MAAAu4N,YAAA9hM,IpUwvkDE4hM,EoUnvkDM/7N,UAAKs8N,eAAqB,SAAAt6M,EAAAsC,EAAAsiC,EAAAuiJ,EAAA2nB,GAClC,GAAIh0M,GAAGpZ,KAAGywM,cAAW7vL,GAClB6V,EAAA,YACAnY,EAAAuC,WACA,iDACAzH,EAAAsH,UAAWqwL,OAAIlwL,WAAA,IAAAzH,EAAAuH,QAAAowL,OAAAlwL,WACf,SAAWqiC,EACX,SAAAuiJ,EAAgB5kL,WACnB,cAAYusM,EAAiBvsM,UAC7B,OAAA7gB,MAAAu4N,YAAA9hM,IpUqvkDE4hM,EoUlvkDM/7N,UAAKw1M,2BAAqB,SAAAxzL,EAAAsC,EAAAsiC,GAClC,GAAI9pC,GAAGpZ,KAAGywM,cAAW7vL,GACnB6V,EAAA,YACAnY,EAAAuC,WACA,8CACAzH,EAAAsH,UAAWqwL,OAAKlwL,WAAA,IAAAzH,EAAAuH,QAAAowL,OAAAlwL,WAAA,UACNqiC,CACZ,OAAAljD,MAAAu4N,YAAA9hM,IpUovkDE4hM,EoUjvkDE/7N,UAAcu8N,4BAA6B,SAAWv6M,EAAOm6M,EAAaz9D,EAAE93G,GAChF,GAAA0oB,GAAY5rE,KAAA4wM,sBAA4B6nB,EAAO/3M,UAAC+3M,EAAA93M,QAAAq6I,EAChDpvF,GAAO50D,KAAG,QAAW80D,mBAAA5oB,GpUkvkDf,IoUjvkDJzsB,GAAA,YACAnY,EAAAuC,WACF,oCAA6B+qD,EAAA5nC,KAAA,IAC7B,OAAAhkC,MAAAu4N,YAAA9hM,IpUmvkDE4hM,EoUjvkDH/7N,UA2BC81M,iBAAA,SAAA9zL,EAAAsC,EAAAo6I,EAAA93G,GAxBA,GAAI7/C,GAAArD,KACAyqL,EAAC,GAAAP,IAA4B,OAuBjC,OpUytkDMlqL,MoU/ukDJ64N,4BAAoBv6M,EAAAsC,EAAAo6I,EAAA93G,GACpBvoC,UAAI,SAAwC1S,GpUovkDpC,IoU/ukDH,GAJDoqM,IAA6BpqM,QAAGkX,MAAA9b,EAAAkX,YAAA,qDAChC+3L,KACAC,GAA6BtqM,QAAGkX,MAAA9b,EAAAkX,YAAA,qDAEpCi4L,KAASv5K,EAAG,EAAA6/L,EAAA7wN,EAAAgxB,EAAA6/L,EAAAz6N,OAAA46B,IAAA,CACX,GAAAy5K,GAAUomB,EAAK7/L,EACfo5K,GAAUpqM,KAAK+O,KAAKsU,WAAWonL,EAAIC,QACnCJ,EAAAtqM,KAAY+O,KAAKsU,WAAAonL,EAAOhqF,QACxB4pF,EAAYt7L,KAAKm6K,GAAAruK,EAAOiuL,KAAK2B,EAAIE,MAAMzZ,eACvCqZ,EAAAx7L,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAGD,GAAI0Z,IAAmB5qM,KAAMoqM,EAAW3+I,OAAQ4+I,GAEhDQ,GAAoB7qM,KAAAsqM,EAAgB7+I,OAAA8+I,EAEpC/nB,GAAM7uG,MAAKi3H,EAAAC,KAGZ,SAAOn0L,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACrC+7B,EAAA3zD,gBpU4ukDEuhG,EoU1ukDH/7N,UAiCCy8N,8BAAA,SAAAz6M,EAAAsC,EAAAo6I,EAAAgyD,GA9BC,GAAI3pN,GAAMrD,KACV4rE,EAAS5rE,KAAO4wM,sBAAehwL,EAAAF,UAAsBE,EAAAD,QAAAq6I,EAErDpvF,GAAOA,EAAGpgD,OAAWwhM,EAAAG,qBpUwukDhB,IoUvukDH12L,GAAA,YACAnY,EAAAuC,WAEE,kCAAoB+qD,EAAe5nC,KAAA,KACnCymJ,EAAgB,GAAEP,IAAU,OAsBjC,OpUitkDMlqL,MoUtukDHu4N,YAAa9hM,GAA+B9b,UAAU,SAAO1S,GpU2ukDtD,IoUtukDF,GAJDoqM,IAA6BpqM,QAAGkX,MAAA9b,EAAAkX,YAAA,qDAChC+3L,KACAC,GAA6BtqM,QAAGkX,MAAA9b,EAAAkX,YAAA,qDAEpCi4L,KAASv5K,EAAG,EAAA+/L,EAAA/wN,EAAAgxB,EAAA+/L,EAAA36N,OAAA46B,IAAA,CACX,GAAAy5K,GAAUsmB,EAAK//L,EACfo5K,GAAUpqM,KAAK+O,KAAKsU,WAAWonL,EAAIC,QACnCJ,EAAAtqM,KAAY+O,KAAKsU,WAAAonL,EAAOhqF,QACxB4pF,EAAYt7L,KAAKm6K,GAAAruK,EAAOiuL,KAAK2B,EAAIE,MAAMzZ,eACvCqZ,EAAAx7L,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAGD,GAAI0Z,IAAmB5qM,KAAMoqM,EAAW3+I,OAAQ4+I,GAEhDQ,GAAoB7qM,KAAAsqM,EAAgB7+I,OAAA8+I,EAErC/nB,GAAM7uG,MAAKi3H,EAAAC,KAGX,SAAOn0L,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACtC+7B,EAAA3zD,gBpUmukDEuhG,EoUhukDO/7N,UAAK28N,8BAAqB,SAAA36M,EAAAsC,EAAAosM,GAClC,GAAI5zM,GAAApZ,KAAAywM,cAAe7vL,GACfs4M,EAAU,aAAc9/M,EAAAsH,UAAAqwL,OAAA,IAAA33L,EAAAuH,QAAAowL,OAC5BnlI,GAASstJ,EAETttJ,GAAOA,EAAGpgD,OAAWwhM,EAAAG,qBpUgukDhB,IoU/tkDH12L,GAAA,YACAnY,EAAAuC,WAEE,kCAAoB+qD,EAAe5nC,KAAA,KACnCymJ,EAAgB,GAAEP,IAAU,OAiBjC,OpU8skDMlqL,MoU9tkDHu4N,YAAa9hM,GAAC9b,UAAA,SAAA1S,GACd,GAAI0qM,GAAQ,EACTjqF,EAAQ,CACVzgH,IAAQA,EAAA5J,SACRs0M,EAAQrnL,WAAWrjB,EAAK,GAAG0qM,OAC3BjqF,EAAAp9F,WAAArjB,EAAA,GAAAygH,QpUgukDM+hE,EoU7tkDC7uG,MACP+2H,MAAOA,EACLjqF,WAKL,SAAO/pG,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACrC+7B,EAAA3zD,gBpU4tkDEuhG,EoUztkDM/7N,UAAK68N,aAAqB,SAAA76M,EAAAsC,EAAAosM,GAClC,GAAI5zM,GAAApZ,KAAAywM,cAAe7vL,GACfs4M,EAAU,WAAc9/M,EAAAsH,UAAAqwL,OAAA,IAAA33L,EAAAuH,QAAAowL,OAC5BnlI,GAASstJ,EAETttJ,GAAOA,EAAGpgD,OAAWwhM,EAAGG,qBACxB,IAAI12L,GAAA,YAAoBnY,EAAAuC,WAAe,8BAAA+qD,EAAA5nC,KAAA,KACnCymJ,EAAgB,GAAEP,IACrB,OAQD,OpUgtkDMlqL,MoUvtkDJu4N,YAAa9hM,GAAK9b,UAAO,SAAA1S,GAE1BwiL,EAAM7uG,KAAK3zE,IAIZ,SAAO0W,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBpUqtkDEuhG,EoUltkDK/7N,UAAG88N,gBAAwB,WAElC,MAAAp5N,MAAAu4N,YADO,0BpUqtkDLF,EoUjtkDK/7N,UAAG+8N,cAAwB,SAAC3tL,GACnC,GAAAjV,GAAO,yBAAsBiV,EAAA,SAC7B,OAAA1rC,MAAAu4N,YAAA9hM,IpUmtkDE4hM,EoUhtkDK/7N,UAAGg9N,aAAuB,SAACC,GAClC,GAAA9iM,GAAO,wBAAsB8iM,EAAA,OAC7B,OAAAv5N,MAAAu4N,YAAA9hM,IpUktkDE4hM,EoU/skDM/7N,UAAKk9N,gBAAqB,SAAAl7M,EAAAsC,EAAAosM,GAClC,GAAI5zM,GAAApZ,KAAAywM,cAAe7vL,GACfs4M,EAAU,WAAc9/M,EAAAsH,UAAAqwL,OAAA,IAAA33L,EAAAuH,QAAAowL,OAC5BnlI,GAASstJ,EAETttJ,GAAOA,EAAGpgD,OAAWwhM,EAAGG,qBACxB,IAAI12L,GAAA,YAAoBnY,EAAAuC,WAAe,kCAAA+qD,EAAA5nC,KAAA,KACnCymJ,EAAgB,GAAEP,IACrB,OAQD,OpUsskDMlqL,MoU7skDJu4N,YAAa9hM,GAAK9b,UAAO,SAAA1S,GAE1BwiL,EAAM7uG,KAAK3zE,IAIZ,SAAO0W,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBpU2skDEuhG,EoUxskDM/7N,UAAKm9N,gBAAqB,SAAAn7M,EAAAsC,EAAAosM,GAClC,GAAI5zM,GAAApZ,KAAAywM,cAAe7vL,GACfs4M,EAAU,WAAc9/M,EAAAsH,UAAAqwL,OAAA,IAAA33L,EAAAuH,QAAAowL,OAC5BnlI,GAASstJ,EAETttJ,GAAOA,EAAGpgD,OAAWwhM,EAAGG,qBACxB,IAAI12L,GAAA,YAAoBnY,EAAAuC,WAAe,kCAAA+qD,EAAA5nC,KAAA,KACnCymJ,EAAgB,GAAEP,IACrB,OAQD,OpU+rkDMlqL,MoUtskDJu4N,YAAa9hM,GAAK9b,UAAO,SAAA1S,GAE1BwiL,EAAM7uG,KAAK3zE,IAIZ,SAAO0W,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBpUoskDEuhG,EoUjskDM/7N,UAAKo9N,uBAAqB,SAAAp7M,EAAAsC,EAAAosM,EAAA2M,GAClC,GAAIvgN,GAAApZ,KAAAywM,cAAe7vL,GACfs4M,EAAU,WAAc9/M,EAAAsH,UAAAqwL,OAAA,IAAA33L,EAAAuH,QAAAowL,OAC5BnlI,GAAYstJ,EACZttJ,GAAM50D,KAAG,aAAc2iN,GAEvB/tJ,EAAOA,EAAGpgD,OAAWwhM,EAAGG,qBACxB,IAAI12L,GAAA,YAAoBnY,EAAAuC,WAAe,0CAAA+qD,EAAA5nC,KAAA,KACnCymJ,EAAgB,GAAEP,IACrB,OAQD,OpUwrkDMlqL,MoU/rkDJu4N,YAAa9hM,GAAK9b,UAAO,SAAA1S,GAE1BwiL,EAAM7uG,KAAK3zE,IAIZ,SAAO0W,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gBpU6rkDEuhG,EoU1rkDK/7N,UAAQi8N,YAAA,SAAA9hM,GACf,GACAg0J,GAAM,GAAIP,IAAS,OAanB,OpU8qkDMtwK,GoUzrkDJtd,UAAW0V,KAAIxV,KAAAwD,KAASy2B,EAHtB,MAG+B9b,UAAA,SAAA+xB,GpU0rkDzB,GoUzrkDPA,GAAYA,EAASjxB,QpU2rkDV,IoU1rkDP,GAAJm+M,IAAiB,GAAAtwM,OAAAC,UAAS,IAAlB0P,EAAK,EAAAxc,EAAAiwB,EAAAjxB,QAAAwd,EAAAxc,EAAApe,OAAA46B,IAAA,CACZ,GAAAogJ,GAAM58J,EAASwc,EACfogJ,GAAAwgD,UAAAD,EAIHnvC,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,eAxTW,IAAAr6G,GAAAC,EAAYC,EAAAC,EAAAC,EAAAC,EAAAC,CAAS,OpUm/kD9Bs7M,GoUp/kDHH,IpUq/kDOx9N,OAAOM,GAAqB,coUp/kDvBm9N,GAyTZ,wCAAA17M,MAAA,KAAAkpK,GAAA,GAAAA,GAAA,IAAAlpK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAgrJ,GAAA,GAAAA,GAAA,IAAAhrJ,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAmrK,GAAA,GAAAA,GAAA,IAAAnrK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAsgI,GAAA,GAAAA,GAAA,IAAAtgI,GAAAriB,UAAD29N,IAzTyB/nB,IA2TzBwpB,GAAA,WAgCA,QAACA,MAAA,MpUkqkDGA,GoUzrkDoBx9N,UAAG6wN,mBAAA,WAEzB,GAAGxjN,KAoBH,OAnBa,QAAZ3J,KAAM+5N,gBAAkD,IAAzB/5N,KAAA+5N,oBAA0D,KAAxB/5N,KAAA+5N,gBACjEpwN,EAAAqN,KAAA80D,mBAAA,8BAAAA,mBAAA9rE,KAAA+5N,iBAEA/5N,KAAAg6N,YAAY,GACZrwN,EAAAqN,KAAA80D,mBAAA,2BAAA9rE,KAAAg6N,aAEY,OAAZh6N,KAAM82B,MAAM92B,KAAkB82B,KAACz4B,OAAA,GAC/BsL,EAAAqN,KAAA80D,mBAAA,oBAAAA,mBAAA9rE,KAAA82B,KAAAkN,KAAA,OAEAhkC,KAAAi6N,OAAY,GACZtwN,EAAAqN,KAAA80D,mBAAA,sBAAA9rE,KAAAi6N,QAEY,OAAZj6N,KAAAk6N,YACAvwN,EAAAqN,KAAA80D,mBAAA,0BAAA9rE,KAAAk6N,YAEY,OAAZl6N,KAAAm6N,UACAxwN,EAAAqN,KAAA80D,mBAAA,wBAAA9rE,KAAAm6N,UAGDxwN,GACDmwN,KpU6rkDGM,GAAqCp6N,MAAQA,KAAKuY,WAAc,WAChE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QqU5ilD5CyhN,GAAA,SAAAzgN,GrUkjlDvC,QqUljlDJygN,KAUC,GAAAh3N,GAA6B,OAAvBuW,GAAuBA,EAAAhQ,MAAA5J,KAAA6J,YAAA7J,IAgB7B,OAfAqD,GAAA42N,OAAA,KACA52N,EAAA62N,WAA0B,KrU0ilDnB72N,EAAM82N,SAAW,KqU5hlDxB92N,EA1B0C,MAA3C+2N,IAAAC,EAAAzgN,GrUyjlDIygN,EqU1ilDW/9N,UAAAw1L,KAAA,SAAAwoC,GrU2ilDP,MqU1ilDDA,IAGHC,UAAWv6N,KAAEu6N,UAAKl8N,QAAei8N,EAAMC,UAAWl8N,QAAA2B,KAAAu6N,UAAA,IAAAD,EAAAC,UAAA,IAAAv6N,KAAAu6N,UAAA,IAAAD,EAAAC,UAAA,GAClDroC,YAAAlyL,KAAgBkyL,aAAKooC,EAAkBpoC,YACvC6nC,eAAa/5N,KAAK+5N,gBAAqBO,EAAAP,eAEvCC,YAAWh6N,KAAKg6N,aAAgBM,EAAKN,YACrCljM,KAAA92B,KAAA82B,KAAAz4B,QAAAi8N,EAAAxjM,KAAAz4B,QAAA,IAAA2B,KAAA82B,KAAAl5B,OAAA,SAAA6wB,GAAA,WAAA6rM,EAAAxjM,KAAAh5B,QAAA2wB,KAAApwB,SAPCk8N,WAAA,EAAAroC,aAAA,EAAA6nC,gBAAA,EAAAC,aAAA,EAAAljM,MAAA,IAjBsCujM,GrUqklDzCP,IAIEU,GAA+BtgO,EAAoB,KAInDugO,GAA6Cz6N,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GsUvllDhEshN,GAAA,WAwDA,QAACC,MAAA,MtUsilDGA,GsU3llDuCr+N,UAAAs+N,QAAA,SAAAlvL,EAAAzjC,GACzC,GAAI0B,KtU4llDE,IsU3llDL+hC,IAAc8uL,IAAiC,iBAC/C7wN,EAAA3J,KAAA66N,cAAAnvL,EAAAzjC,OACA,IAAAyjC,IAAc8uL,IAAiC,eAC/C7wN,EAAA3J,KAAA86N,cAAApvL,EAAAzjC,OACA,IAAIyjC,IAAe8uL,IAAA,atU+llDV,IsU9llDJ,GAALO,GAAkB,EAAP9hM,EAAG,EAAAw5K,EAAAxqM,EAAAgxB,EAAAw5K,EAAAp0M,OAAA46B,IAAA,CACb,GAAAy5K,GAAUD,EAAIx5K,EACd8hM,IAAA75L,SAAAwxK,EAAAhqF,OAED/+G,EAAAqN,MAAA00B,EAAAqvL,QtUimlDS,KsUhmlDJ,GAAMt+M,GAAG,EAAAq8M,EAAA7wN,EAAAwU,EAAAq8M,EAAAz6N,OAAAoe,IAAA,CACb,GAAMi2L,GAAAomB,EAAar8M,GACnBu+M,EAAatoB,EAAAz1H,OAASg+I,YAAavoB,EAAQz1H,OAACg+I,YAAAvoB,EAAAz1H,OAAAlqE,IAC5CpJ,GAAAqN,MAAAgkN,EAAA95L,SAAAwxK,EAAAhqF,SAIF,MADA/+G,GAAOq0K,SAAO,mBACdr0K,GtUkmlDEgxN,EsU/llDyCr+N,UAAAw+N,cAAA,SAAApvL,EAAAzjC,GtUimlDrC,IsUhmlDD,GAAL0B,MAAWsvB,EAAG,EAAA+/L,EAAA/wN,EAAAgxB,EAAA+/L,EAAA36N,OAAA46B,IAAA,CACb,GAAMy5K,GAAAsmB,EAAa//L,GACfiiM,EAASxoB,EAAIz1H,OAAAg+I,WtUimlDR,IsUhmlDRC,IAASV,IAAA,eAAA9uL,GtUomlDD,IsUjmlDJ,GAALyvL,GAA2BX,GAAR,eAAQ9uL,GAAEwvL,GAAlBz+M,EAAI,EAAA2+M,EAAAD,EAAA1+M,EAAA2+M,EAAA/8N,OAAAoe,IAAA,CACd,GAAA4e,GAAW+/L,EAAQ3+M,EACnB9S,GAAAqN,MAAAqkB,EAAAt4B,KAAA4M,MAAAuxB,SAAAwxK,EAAAhqF,OAAAyyG,EAAA98N,WAGF,MAAAsL,ItUmmlDEgxN,EsUhmlDWr+N,UAAAu+N,cAAA,SAAAnvL,EAAAzjC,GtUkmlDP,IsUjmlDD,GAAL3M,MAAW29B,EAAG,EAAAoiM,EAAApzN,EAAAgxB,EAAAoiM,EAAAh9N,OAAA46B,IAAA,CACb,GAAMy5K,GAAA2oB,EAAapiM,GACbiiM,EAAUxoB,EAACz1H,OAAOg+I,YACpBK,EAASJ,IAAQV,IAAA,iBAAA9uL,GAAA8uL,GAAA,iBAAA9uL,GAAAwvL,IAClBI,KAAWhgO,KACbA,EAAAggO,GAAA,GAEDhgO,EAAAggO,GAAAhgO,EAAAggO,GAAAp6L,SAAAwxK,EAAAhqF,OAED,GAAA/+G,KtUkmlDM,KsUjmlDL,GAAA0xB,KAAa//B,GACbqO,EAAAqN,MAAAqkB,EAAA//B,EAAA+/B,IAED,OAAA1xB,ItUmmlDEgxN,EsU1plDHF,IACY//N,OAAAM,GAwDZ,eAAD2/N,MtUymlDIY,GAAgBrhO,EAAoB,IAIpCshO,GAAyCx7N,MAAQA,KAAKuY,WAAc,WACpE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF6iN,GAA0Cz7N,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DsiN,GAA0C17N,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuU5qlD5DiiN,GAAA,SAAA/hN,GvU2rlD1C,QuUzrlDHgiN,GASO71C,EAAMl5B,EAAMw7B,EAAW1vJ,EAAQ63K,EAAY53K,EAAKijM,GAR5C,GAAAx4N,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAA63K,EAAA53K,IAAA54B,IAS3B,OARUqD,GAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,YACAhlL,EAAAs1B,SACAt1B,EAAAmtM,WAAiBA,EACnBntM,EAAAu1B,OvU0rlDFv1B,EAAMw4N,IAAMA,EuUvrlDlBx4N,EAVDm4N,GAC4BI,EAGHhiN,GvUgslDtBgiN,EuUlrlDFt/N,UAAAw/N,qBAAA,SAAA9O,GALA,GAAM3pN,GAAMrD,KACZ4rE,EAAO5rE,KAAA4wM,sBAA4Bzf,GAAYruK,EAAAiuL,KAAKic,EAAKuN,UAAS,IAAAppC,GAAAruK,EAAAiuL,KAAAic,EAAkCuN,UAAY,IAAOvN,EAAA96B,aAAA1mK,OAAAwhM,EAAAG,qBvUyrlDjH,OuUxrlDJvzM,GACAtd,UAAA0V,KAAAxV,KAAAwD,KAAI,YAAAA,KAAQ44B,KAAIta,UAAK,kCAAmCstD,EAAS5nC,KACjE,MACFy8J,KAAA/lM,OAAA6gO,GAAA,cAAA7uL,GAAA,MAAArpC,GAAA04N,0BAAA/O,EAAAtgL,OvUwrlDEkvL,EuUrrlD4Ct/N,UAAUy/N,0BAA2G,SAAA/O,EAAAtgL,GvU0rlD7J,IuUtrlDD,GAHC2lK,IAA6BpqM,QAAGkX,MAAA,SAChCmzL,KACAC,GAA6BtqM,QAAGkX,MAAA,SACtCqzL,KAAS/1L,EAAG,EAAAovM,EAAAn/K,EAAAjwB,EAAAovM,EAAAxtN,OAAAoe,IAAA,CACX,GAAAi2L,GAAUmZ,EAAUpvM,EACpB41L,GAAUpqM,KAAK+O,KAAKsU,WAAWonL,EAAIC,QACnCJ,EAAAtqM,KAAY+O,KAAKsU,WAAAonL,EAAOhqF,QACxB4pF,EAAYt7L,KAAKm6K,GAAAruK,EAAOiuL,KAAK2B,EAAIE,MAAMzZ,eACvCqZ,EAAAx7L,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,evU4rlDK,IuUprlDL,GANK0Z,IAAmB5qM,KAAMoqM,EAAW3+I,OAAQ4+I,GAE5CQ,GAAQ7qM,KAAgBsqM,EAAA7+I,OAAgB8+I,GAExCvqM,GAAQ4qM,EAAkCC,GAChDje,KACC57J,EAAS,EAAIA,EAAKhxB,EAAK5J,OAAM46B,IACxB47J,EAAS79K,KAAK/O,EAAGgxB,GAAMhxB,KAC7B,IAAMyrD,GAAAzrD,EAAc,GAAAyrD,MAKpB,QAAAw+H,YAJkB86B,EAAA96B,YAIlBxxK,UAHgBywK,GAAOruK,EAAAiuL,KAAKic,EAAQuN,UAAY,IAGhD55M,QADSwwK,GAAWruK,EAAAiuL,KAAEic,EAASuN,UAAA,IAC/BtyN,OAAAyrD,SAAAmhI,avUqrlDE+mC,EuU3qlDFt/N,UAAA0/N,qBAAA,SAAAhP,GANA,GAAM3pN,GAAMrD,KAEZ4rE,GAAO,aAAUohJ,EAAAuN,UAAkB,OAAgBvN,EAAMuN,UAAS,IAAA/uM,OAAAwhM,EAAAG,qBvUkrlD5D,OuUjrlDJvzM,GACAtd,UAAA0V,KAAAxV,KAAAwD,KAAI,YAAAA,KAAQ44B,KAAIta,UAAK,kCAAmCstD,EACvD5nC,KAAA,MACHy8J,KAAA/lM,OAAA6gO,GAAA,cAAA7uL,GAAA,MAAArpC,GAAA44N,0BAAAvvL,OvUirlDEkvL,EuU9qlDct/N,UAAe2/N,0BAAE,SAAAvvL,GvU+qlD3B,GuU9qlDLA,GAAcA,EAAAruC,OAAW,CACzB,GAAMs0M,GAAQrnL,WAAWohB,EAAS,GAAGimK,OACrCjqF,EAASp9F,WAAOohB,EAAK,GAAAg8E,MACrB,QAAAiqF,QAAAjqF,QAAAmtF,aAAAntF,EAAAiqF,GAED,OAAAA,MAAA,EAAAjqF,MAAA,EAAAmtF,aAAA,IvUgrlDE+lB,EuUtqlDFt/N,UAAA4/N,UAAA,SAAAlP,GANA,GAAM3pN,GAAQrD,KACR4gB,EAAM5gB,KAAIywM,cAAWzwM,KAAM44B,KAAA88K,yBACjC9pI,GAAO,WAAMhrD,EAAIF,UAAYqwL,OAAA,IAAgBnwL,EAAMD,QAAAowL,QAASvlL,OAAAwhM,EAAAG,qBvU8qlDtD,OuU7qlDJvzM,GACAtd,UAAA0V,KAAAxV,KAAAwD,KAAI,YAAAA,KAAQ44B,KAAIta,UAAK,8BAAiCstD,EACrD5nC,KAAA,MACHy8J,KAAA/lM,OAAA6gO,GAAA,cAAA7uL,GAAA,MAAArpC,GAAA84N,eAAAzvL,EAAAsgL,OvU6qlDE4O,EuU1qlDoBt/N,UAAW6/N,eAAiB,SAAOzvL,EAAAsgL,GACzD,GAAMoP,GAAgB9wM,WAAWohB,EAASkpK,QAAQjD,OAC5C0pB,EAAe/wM,WAAAohB,EAAoBkpK,QAAAltF,OACnCmtF,EAAYumB,EAAO,EAAeC,EAAOD,EAAe,KAExDxmB,GAAqCjD,MAACypB,EAAqB1zG,MAAA2zG,EAAAxmB,gBAE7DymB,IAAS,UAAkD,SvUyqlDzD,IuUxqlDL5vL,EAAMg+I,UAAiC,CvU0qlD9B,IuUzqlDJ,GAAL6xC,MAAW9/M,EAAA,EAAOC,EAAAgwB,EAAAg+I,UAAAjuK,EAAAC,EAAAre,OAAAoe,IAAA,CACjB,GAAMulI,GAAAtlI,EAAaD,GACb+/M,EAAgBlxM,WAAW02H,EAAQt5B,OACzC+zG,EAAenxM,WAAgB02H,EAAA2wD,MAC/B2pB,GAAStlN,MAAMgrI,UAAA06E,aAAAF,IvU0qlDHD,EuUzqlDNvlN,MACLvR,MAAO82N,EAAQl+N,OAAQ,EACvB8gB,MAAO6iI,UAAajvI,KACpB21G,MAAO8zG,EACP7pB,MAAA8pB,EACA/wL,YAAas2G,UAAgB06E,aAC7BC,WAAaH,EAAgBH,EAAiB,IAC5CO,WAAAH,EAAAL,EAAA,MAGJ,OAAAS,WAAA,YAAA5/I,OAAA,KAAA24H,UAAA0mB,WAAAC,avU2qlDK,GuUvqlDL7vL,EAAMkuL,QAA+B,CvUyqlD5B,IuUxqlDJ,GAAL2B,MAAW5/M,EAAM,EAAAC,EAAA8vB,EAAAkuL,QAAAj+M,EAAAC,EAAAve,OAAAse,IAAA,CAChB,GAAMsgE,GAAArgE,EAAYD,GACZmgN,EAAexxM,WAAW2xD,EAAOyrC,OACvCq0G,EAAezxM,WAAA2xD,EAAA01H,MvUyqlDH4pB,GuUxqlDNvlN,MACLvR,MAAO82N,EAAOl+N,OAAW,EACzB8gB,MAAO89D,SAAYlqE,KACnB21G,MAAOo0G,EACPnqB,MAAAoqB,EACArxL,YAAUshL,EAAO+M,eACjBiD,SAAU//I,EAAEA,OAAOpqE,GACnBoqN,WAAYhgJ,EAACA,OAAYg+I,YAAGh+I,EAAiBA,OAAGg+I,YAAAh+I,SAAAlqE,KAChD4pN,WAAaG,EAAeT,EAAiB,IAC3CO,WAAAG,EAAAX,EAAA,MAGJ,OAAAS,WAAA,YAAA5/I,OAAA+vI,EAAA+M,eAAAnkB,UAAA0mB,SAAAt8N,KAAA67N,IAAAjB,QAAA5N,EAAA+M,eAAArtL,EAAAkuL,SAAA2B,aAID,OAAAM,WAAA,YAAA5/I,OAAA,KAAA24H,UAAA0mB,WAAAC,evUwqlDEX,EuU9plDFt/N,UAAA4gO,cAAA,SAAAlQ,EAAAvnB,EAAAqlB,GANA,GAAMznN,GAAQrD,KACR4gB,EAAM5gB,KAAIywM,cAAWzwM,KAAM44B,KAAA88K,yBACjC9pI,GAAO,WAAMhrD,EAAIF,UAAsBqwL,OAAA,IAAgBnwL,EAAMD,QAAAowL,OAAS,QAAAtL,EAAA,aAAAqlB,GAA0Ct/L,OAAOwhM,EAAWG,qBvUsqlD5H,OuUrqlDJvzM,GACAtd,UAAA0V,KAAAxV,KAAAwD,KAAI,YAAAA,KAAQ44B,KAAIta,UAAK,0CACpBstD,EAAA5nC,KAAA,MACHy8J,KAAA/lM,OAAA6gO,GAAA,cAAA7uL,GAAA,MAAArpC,GAAA85N,mBAAAzwL,OvUqqlDEkvL,EuUlqlDKt/N,UAAA6gO,mBAAA,SAAAzwL,GvUmqlDD,OuUjqlDL+4J,KAAA/4J,EAAW+4J,KACX2nB,UAAS1gL,EAAS0gL,UvUmqlDTe,QuUlqlDFzhL,EAAAyhL,QAAkB5xN,IAAE,SAAU6c,GACpC,GAAMgkN,GAAchkN,EAAA7F,IAAAswB,MAAgB,KACpCw5L,EAAO,IAAAD,EAAA/+N,MvUmqlDK,QuUjqlDXsvD,SAAQv0C,EAAAu0C,SACR2S,OAAO+8J,EAAcD,EAAiB,GAAK,KAC3CriO,MAAOsiO,EAAGD,EAAA,GAAAhkN,EAAA7F,IACVA,IAAK6F,EAAE7F,IACPm1G,MAAAxnF,SAAe9nB,EAAAsvG,OACdi0G,WAAA9rE,OAGFw9D,cAAA3hL,EAAA2hL,eA7JS,IAAA5xM,GAAAC,EAAAC,EAAAC,EAAAC,EAAwBC,EAAAC,CAAS,OvUm0lD1C6+M,GuUp0lDHH,IvUq0lDO/gO,OAAOM,GAAqB,cuUp0lDvB0gO,GAgKZ,wCAAAj/M,MAAA,KAAAkpK,GAAA,GAAAA,GAAA,IAAAlpK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAgrJ,GAAA,GAAAA,GAAA,IAAAhrJ,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAmrK,GAAA,GAAAA,GAAA,IAAAnrK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA29M,SAAA39M,GAAAriB,UAADkhO,IAhKqCtrB,IvU40lDjCgtB,GAA4Ct9N,MAAQA,KAAKuY,WAAc,WACvE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF2kN,GAA6Cv9N,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DokN,GAA6Cx9N,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IwU10lDzD+jN,GAAA,SAAA7jN,GxU01lD7C,QwUn0lDH8jN,GAQO7jN,EAAQS,EAAAC,EAyCdo3M,EAAA/4L,EAAA+kM,EAAAloB,EAAAj7L,GAjDmB,GAAAnX,GAAKuW,EAAApd,KAAgBwD,KAAAsa,EAAAC,IAAAva,IAC/BqD,GAAAwW,MAAMA,EACNxW,EAAAiX,SACAjX,EAAAkX,cACAlX,EAAAsuN,sBAAiBA,EAChBtuN,EAAAu1B,OACAv1B,EAAAs6N,oBACAt6N,EAAAoyM,cAAsBA,EAxBhBpyM,EAAAmX,MAIjBnX,EAAAu6N,uBAA0C,IAC1Cv6N,EAAAu5L,YAAA,WAAkD,OAuBjDv5L,EAAImxM,kBAAkB,MACtB,IAAI5zL,GAAOvd,EAAGu1B,KAAM88K,wBAChB/0L,EAASC,EAAGD,QACZD,EAAWE,EAAoBF,UACnCwxK,EAAiBxxK,EAASqwL,QAAApwL,EAAAowL,OAAA,YAkC1B,OAjCA1tM,GAAKw6N,cAAc,EAEnBx6N,EAAKy6N,gBAAe,ExUo0lDdz6N,EwUn0lDL+xN,cACAntN,KAAM,KACNyrD,OAAA,KACAhzC,UAASA,EACTC,QAASA,EACT+zK,UAAW,WACVxC,exUq0lDI7uL,EwUl0lDL06N,uBACAC,SAAA,KACCC,kBAAA,MAGF56N,EAAK66N,kBAAoB,KAGzB76N,EAAK86N,kBAAA,KAGL96N,EAAK+6N,kCAAoB,OAEzB/6N,EAAKuvN,SAAA1D,GxU6zlDC7rN,EwU5zlDLuyN,kBAAqBvyN,EAAKwW,MAAO5R,KAAI0S,UAAA,SAAA1S,GACrC5E,EAAGg7N,cAAKp2N,EAAc2S,QAAA,GACrBvX,EAAKg7N,cAAY9R,gBAAQlpN,EAAAu1B,KAAAq5K,4BACzB5uM,EAAAw6N,cAAA,GAEDx6N,EAAKsxM,WACHtxM,EAAAi7N,mBACHj7N,EAjDDi6N,GAAoBI,EAGV9jN,GxU62lDP8jN,EwU7wlDFphO,UAAAgiO,eAAA,WA9CA,GAAIj7N,GAAMrD,KACVpC,EAAW,GAAIy8N,GACfz8N,GAAOk5B,MAAA,OAAiB92B,KAACq+N,cAAajL,aAEtCx1N,EAAI28N,WAAgBv6N,KAAGo1N,aAAK10M,UAAkBqwL,OAAA/wM,KAAco1N,aAAWz0M,QAAKowL,OxU4zlDtE,IwU3zlDLwtB,GAAOv+N,KAAI29N,kBAAAT,cAAAt/N,EAAA,EAAAoC,KAAA49N,wBAAAjjN,WxU4zlDFihE,KwU1zlDR,SAAI4iJ,GxU8zlDQ,IwU3zlDR,GAFAC,GAAc,GAAI/jE,KAClBgkE,EAAc,GAAGhkE,KACrBikE,EAAe,GAAAjkE,KAAPzhI,EAAG,EAAAxc,EAAA+hN,EAAArQ,QAAAl1L,EAAAxc,EAAApe,OAAA46B,IAAA,CACV,GAAMy5K,GAAKj2L,EAAGwc,GACVyyC,EAAMgnI,EAAGn/L,IAAOswB,MAAE,KAClBy8B,EAAQoL,EAAG,GACZkzJ,EAAM,EACRlzJ,GAAKrtE,OAAU,IACfugO,EAAAlzJ,EAAA,IAEA+yJ,EAAa//D,IAAIp+F,KACjBm+J,EAAA97N,IAAe29D,MACfq+J,EAAAh8N,IAAA29D,EAAA,IAEDm+J,EAAAz8N,IAAes+D,GAAUtpD,KAAE4nN,GAC3BD,EAAeh8N,IAAI29D,EAAMq+J,EAAW38N,IAAAs+D,GAAAoyI,EAAAhqF,OACpCg2G,EAAA/7N,IAAA+vM,EAAAn/L,IAAAm/L,EAAAhqF,OAID,GAAAm2G,GAAa,GAAOxiO,MxU0zlDRoiO,GwUzzlDRphO,QAAQ,SAAYyhO,EAAAx+J,GxU0zlDR,GwUzzlDdw+J,EAAmBzgO,OAAA,ExU0zlDD,IwU1zlDd,GAAM46B,GAAK,EAAA8lM,EAAAD,EAAA7lM,EAAA8lM,EAAA1gO,OAAA46B,IAAA,CACd,GAAM2lM,GAAOG,EAAQ9lM,GACrB+lM,EAAU,IAAKN,EAAA18N,IAAAs+D,EAAA,IAAAs+J,GAAAD,EAAA38N,IAAAs+D,ExU2zlDMu+J,GwU1zlDd7nN,MACNspD,OAAOA,EACPs+J,QACEK,UAAAD,OAMN37N,EAAKw7N,UAAIA,EACTx7N,EAAAmX,IAAAhP,eACA+yN,EAAA3nG,kBxU6zlDA8mG,EwUxzlDMphO,UAAiBgI,YAAA,WACxBtE,KAAK41N,mBACN51N,KAAA41N,kBAAAh/F,exU0zlDE8mG,EwUvzlDsBphO,UAAA+H,SAAA,WACxBrE,KAAAwa,IAAAhP,gBxUyzlDEkyN,EwUvxlDFphO,UAAAq4M,SAAA,WA/BA,GAAItxM,GAACrD,IAELA,MAAKo1N,aAAAntN,KAAA,KxUuzlDCjI,KwUrzlDH2xN,sBAAW7F,qBAAS9rN,KAAAq+N,cAAAjL,YAAApzN,KAAAo1N,aAAA10M,UAAA1gB,KAAAo1N,aAAAz0M,QAAA3gB,KAAAo1N,aAAAljC,aACpBv3K,UAAK,SAAa1S,GAClB5E,EAAK+xN,aAAantN,KAAMA,EAAGgkN,OAG3B5oN,EAAI+xN,aAAe1hK,OAAAzrD,EAAAyrD,MxUqzlDZ,KwUpzlDH,GAAJqnK,GAAiB,EAAT9hM,EAAK,EAAAxc,EAAAxU,EAAAgkN,OAAAhzL,EAAAxc,EAAApe,OAAA46B,IAAA,CACZ,GAAGimM,GAAMziN,EAAKwc,ExUqzlDJ,IwUpzlDA,SAATimM,EAAA//M,MxUuzlDS,IwUrzlDN,GAAKzC,GAAA,EAAAC,EAAAuiN,EAAAj3N,KAAAyU,EAAAC,EAAAte,OAAAqe,IAAA,CACR,GAAAhD,GAAAiD,EAAUD,EACVq+M,IAAArhN,GAIFrW,EAAG66N,kBAAsBnD,EAExB9yN,EAAIgkN,OAAC5tN,OAAA,GACLgF,EAAA87N,wBAGD97N,EAAAmX,IAAAhP,iBAGFxL,KAAK44B,KAAAq5K,2BACLjyM,KAAAo/N,mBxUozlDC1B,EwU9ylDMphO,UAAyB+iO,sBAAmB,WACnDr/N,KAAKk+N,kBAAoBl+N,KAAKm+N,oBAC9Bn+N,KAAAk+N,kBAAAl+N,KAAAm+N,oBxUizlDCT,EwUhylDFphO,UAAA8iO,gBAAA,WAZA,GAAI/7N,GAACrD,IAELA,MAAKy2N,oBAAsB,KxU6ylDrBz2N,KwU3ylDH2xN,sBAAWtF,uBAASrsN,KAAAq+N,cAAAjL,YAAApzN,KAAAo1N,aAAA10M,UAAA1gB,KAAAo1N,aAAAz0M,QAAA,KAAA3gB,KAAAo+N,mCACpBzjN,UAAK,SAAA1S,GACL5E,EAAGi8N,mBAAmBr3N,GACrB5E,EAAKw6N,cACLx6N,EAAAk8N,gCAGDl8N,EAAAmX,IAAAhP,kBxU6ylDDkyN,EwU/xlDFphO,UAAA6iO,sBAAA,WAVA,GAAI97N,GAACrD,IxU2ylDCA,MwUxylDJ2xN,sBAAsBzF,6BAA0BlsN,KAAAq+N,cAAAjL,YAAApzN,KAAAo1N,aAAA10M,UAAA1gB,KAAAo1N,aAAAz0M,QAAA3gB,KAAAo1N,aAAAljC,aAAAv3K,UAAA,SAAA1S,GAChD5E,EAAK86N,kBAAA7yM,WAAwBrjB,EAAA0qM,OAC7BtvM,EAAGg8N,wBACFh8N,EAAKw6N,cACLx6N,EAAAk8N,gCAEAl8N,EAAAmX,IAAAhP,kBxU2ylDDkyN,EwUvylDsBphO,UAAQgjO,mBAAA,SAAAr3N,GxUyylD1B,GwUtylDNjI,KAAIy2N,oBAAKxuN,EACRjI,KAAKy2N,oBAQL,CACAz2N,KAAa+9N,sBAAKC,SAAS,IxUmylDlB,KwUnylDL,GAAK/kM,GAAA,EAAAxc,EAAAxU,EAAAykC,SAAAg8E,MAAAzvF,EAAAxc,EAAApe,OAAA46B,IAAA,CACR,GAAIvf,GAAA+C,EAAAwc,EACJvf,GAAG4R,WAAM5R,IACgC,MAAxC1Z,KAAK+9N,sBAAsBC,UAAah+N,KAAA+9N,sBAAAC,SAAAtkN,KACxC1Z,KAAA+9N,sBAAAC,SAAAtkN,GAKF,GAAI8lN,GAAC,CxUyylDI,IwUvylDTx/N,KAAG+9N,sBAAmBE,kBAAuB,EAE5Cj+N,KAAAq+N,cAAe9R,gBAAStkN,EAAkBykC,SAAS8/K,kBAASvkN,EAAiBykC,SAAG8/K,iBAAAnuN,OAAA,EAChFmhO,EAAAv3N,EAAAykC,SAAA8/K,iBAAA,GAAAvkN,EAAAykC,SAAA8/K,iBAAA,GAEAxsN,KAAUq+N,cAAKhzM,SAAc,GAAYpjB,EAAKykC,SAASg8E,MAAMrqH,OAAW,IACxEmhO,EAAAx/N,KAAAq+N,cAAAhzM,UAAApjB,EAAAykC,SAAAg8E,MAAArqH,OAAA,IAIAmhO,EAAQ,ExU8xlDI,IwU7xlDX,GAAKzwH,GAAG,EAAAA,EAAW9mG,EAAKykC,SAASg8E,MAAMrqH,OAAM,EAAA0wG,IAAA,CAC7C,GAAIr1F,GAAC4R,WAAArjB,EAAAykC,SAAsBg8E,MAAA3Z,GAC3B/uG,MAAA+9N,sBAAAE,mBAAAvkN,EAAA8lN,OA9BFx/N,MAAKy2N,uBACLz2N,KAAK+9N,sBAAsBC,SAAA,KAC3Bh+N,KAAA+9N,sBAAAE,kBAAA,MxU8zlDCP,EwU5xlDOphO,UAAwBijO,8BAA6B,WAC7Dv/N,KAAAy2N,qBAAOz2N,KAAAy2N,oBAAAxuN,MAAAjI,KAAAy2N,oBAAAxuN,KAAA,IAAAjI,KAAAy2N,oBAAAxuN,KAAA,GAAAA,MAGRjI,KAAAy/N,gBAAAz/N,KAAAy2N,oBAAAxuN,KAAA,GAAAA,KAAAjI,KAAAy2N,oBAAA/1M,UAAA1gB,KAAAy2N,oBAAA91M,UxU8xlDE+8M,EwU3xlDEphO,UAAAmjO,gBAAA,SAAAp/J,EAAC3/C,EAAAC,GAGL,GAAIlE,GAAAzc,KAAA0/N,sBAAkBr/J,EAAA3/C,EAAAC,GAAAg/M,EAAAljN,EAAA,GAAAmjN,EAAAnjN,EAAA,GACpBojN,IAEC53N,KAAK03N,EAAEpjO,IAAA,SAAuBmd,GAAA,MAAAA,GAAA,KAC9ByF,MAAA,0BAKC2gN,EAAgBH,EAAG/hL,OAAc,SAAW96B,EAACnK,GAAA,MAAAmK,GAAiBnK,GAAG,GACjEonN,EAAAD,EAAuB,EAAA9/N,KAAAm+N,kBAAA2B,EAAA,EACzBE,IAEC/3N,KAAK03N,EAAEpjO,IAAA,SAAemd,GAAA,MAAA3W,MAAA4J,MAAA+M,EAAAqmN,KACtB5gN,MAAA,kBAKE8gN,EAAA,EACFC,IxUuxlDWj4N,KwUrxlDV03N,EAAUpjO,IAAI,SAAYmd,GAEzB,MADDumN,IAAOl9N,KAAW4J,MAAA+M,EAAAqmN,KAGnB5gN,MAAA,oBxUwxlDGnf,MwUpxlDJmgO,YACAl4N,KAAM43N,EACNnsK,OAAAksK,EACAlrC,UAAW,WACXxC,YAAW,OACXxxK,UAASA,EACVC,WxUsxlDK3gB,KwUpxlDJogO,iBACAn4N,KAAM+3N,EACNtsK,OAAAksK,EACAlrC,UAAW,WACXxC,YAAW,OACXxxK,UAASA,EACVC,WxUsxlDK3gB,KwUpxlDJqgO,iBACAp4N,KAAMi4N,EACNxsK,OAAAksK,EACAlrC,UAAW,WACXxC,YAAW,OACXxxK,UAASA,EACVC,YxUuxlDC+8M,EwUnxlD8BphO,UAA8BojO,sBAAA,SAAAr/J,EAAA3/C,EAAAC,GAC9D,GAAI2/M,MAAcV,KACdW,EAAY5/M,EAAOowL,OAASrwL,EAAWqwL,OACvCyvB,EAAWngK,EAAOhiE,OAAAkiO,EAAAlgK,EAAAhiE,OAAA,IxUqxlDhB,IwUlxlDLmiO,EADc,IAEd,OAAAF,EAAAV,ExUuxlDK,KwUjxlDL,GAHGa,GAAY,EACZC,EAAQ,EACZC,EAAWjgN,EAAMiB,QAChBpmB,EAAO,EAAIA,EAAA8kE,EAAUhiE,OAAA9C,IxUoxlDZ,IwUnxlDTmlO,GAAArgK,EAAiB9kE,GACjBklO,GAAMD,EACLC,GAXa,KAYbA,GAZa,IAabH,EAAOtpN,KAAK0pN,GACZA,EAAU,EACVd,EAAS5oN,KAAM2pN,EAAExnC,eACjBwnC,EAAAj4M,IAAA,aAOF,OAJC+3M,GAAa,IACbH,EAAAtpN,KAAU0pN,GACVd,EAAA5oN,KAAA2pN,EAAAxnC,iBAEDmnC,EAAAV,IxUmxlDElC,EwUhxlDgBphO,UAAcw4M,oBAAY,SAAA5iB,GAC5ClyL,KAAKo1N,aAAWljC,cAChBlyL,KAAA20M,YxUkxlDE+oB,EwU/wlDgBphO,UAAY24L,kBAAU,SAAAP,GACxC10L,KAAKo1N,aAAW1gC,YAChB10L,KAAA20M,YxUixlDE+oB,EwU9wlDgBphO,UAAY45M,mBAAS,SAAAt1L,GACvC5gB,KAAKo1N,aAAa10M,UAAUE,EAAQ,GACpC5gB,KAAKo1N,aAAKz0M,QAAAC,EAAsB,GAChC5gB,KAAG44B,KAAKu9K,sBAAsBv1L,EAAI,GAAKgB,QAAA,OAAahB,EAAO,GAAKgB,QAAK,QACpE5hB,KAAKo1N,aAAa10M,WAAW1gB,KAAGo1N,aAAOz0M,SAAA3gB,KAAAo1N,aAAA10M,UAAAqwL,QAAA/wM,KAAAo1N,aAAAz0M,QAAAowL,SACvC/wM,KAAAo1N,aAAAljC,YAAA,QAEDlyL,KAAK20M,WACL30M,KAAAs+N,kBxUgxlDEZ,EwU7wlDcphO,UAAkB+5M,mBAAA,WAClC,GAAIpuM,GAAAjI,KAAA+0M,kBxU8wlDMf,EwU7wlDI,iBAAqBh0M,KAAOq+N,cAAcjL,YAAa,IAAApzN,KAAYo1N,aAAY10M,UAAUyB,OAAA,YAElG,IAAAniB,KAAAo1N,aAAcz0M,QAAiBwB,OAAA,YAAsB,MAAAniB,KAAAo1N,aAAAljC,YAAA,MAC1DlyL,MAAAy1M,cAAA1B,iBAAAC,EAAA/rM,IxU8wlDEy1N,EwU3wlDkBphO,UAAay4M,gBAAc,WAC/C,GAAIC,GAAWh1M,KAACo1N,aAAA1hK,OAAA1zD,KAAAo1N,aAAA1hK,OAAAr1D,OAAA,EACZsL,EAAS,GACTsrM,EAAA,GACDniB,EAAM,kBACkB,QAA1B9yL,KAAAo1N,aAAaljC,aAAa,QAAAlyL,KAAAo1N,aAAAljC,YAC1BY,EAAA,aACuB,SAAvB9yL,KAAUo1N,aAAaljC,YACvBY,EAAA,UACoB,QAApB9yL,KAAUo1N,aAAUljC,cACpBY,EAAA,QAMDnpL,GAAS,gBxU0wlDH,KwUzwlDL,GAAIrL,GAAG,EAAGA,EAAC02M,EAAA12M,IACX22M,EAAI,IAAS9jB,KAAcnxL,KAAQo1N,aAAU1hK,OAAQp1D,IAAA6jB,OAAA2wK,GAAA,KAErDmiB,GAAMj1M,KAAQo1N,aAACntN,KAAA,GAAAA,KAAA3J,GAAA,OACfqL,GAAAsrM,CAED,OAAAtrM,IxU0wlDE+zN,EwUvulDFphO,UAAAskO,cAAA,WAhCA,GAAIv9N,GAACrD,IACLA,MAAK89N,gBAAgB,EAErB99N,KAAIwa,IAAAhP,cxU2wlDE,KwU1wlDN,GAAImV,GAAQ3gB,KAAOo1N,aAAaz0M,QAC5BkgN,EAAU7gO,KAAMo1N,aAAA10M,UAAAiB,QAEpBm/M,KACCD,EAAI9vB,OAAYpwL,EAASowL,QAAY,CACrC,GAAGgwB,GAAUF,EAASl/M,QAAQ+G,IAAM,OAAE,EACrCq4M,GAAShwB,OAAUpwL,EAAQowL,SAC3BgwB,EAAApgN,EAAAgB,QAMD,IAAAq/M,GAAUhhO,KAAK2xN,sBAAMtF,uBAAArsN,KAAAq+N,cAAAjL,YAAAyN,EAAAE,EAAA,aAAA3vB,OACrB0vB,GAAW9pN,KAAAgqN,GACXH,EAAAE,EAAAp/M,QxUowlDKimK,GwUlwlDW,WAAAqB,SAAAr/K,MAAAg+K,GAAA,WAAAk5C,GAAA1vB,QAAAz2L,UAAA,SAAAsmN,GxUowlDP,IwUlwlDR,GADDt3N,MACcrL,EAAA,EAAAA,EAAqB2iO,EAArB5iO,OAAQC,IxUmwlDT,IwUnwlDR,GAAK26B,GAAA,EAAAxc,EAAAwkN,EAAA3iO,GAAA2J,KAAA,GAAAA,KAAAgxB,EAAAxc,EAAApe,OAAA46B,IAAA,CACR,GAAAvf,GAAO+C,EAAIwc,EACXtvB,GAAAqN,KAAA0C,GAIFrW,EAAKy6N,gBAAgB,EACrBz6N,EAAKo8N,gBAAgB91N,EAAGtG,EAAA+xN,aAAA10M,UAAArd,EAAA+xN,aAAAz0M,SACvBtd,EAAAmX,IAAAhP,kBxUqwlDAkyN,EwUjwlDcphO,UAAA4kO,qBAAA,WAChB,GAAIv3N,GAAS,GACTsrM,EAAA,EAMJtrM,IAAS,kCxUkwlDH,KwU7vlDL,GAJGw3N,GAAMnhO,KAAKmgO,WAAWzsK,OACtB0tK,EAAAphO,KAAWmgO,WAAKl4N,KAAA,GAAAA,KAChBo5N,EAAWrhO,KAAKogO,gBAAgBn4N,KAAK,GAAGA,KAC5Cq5N,EAAWthO,KAAMqgO,gBAAep4N,KAAI,GAAAA,KAC/B3J,EAAG,EAAGA,EAAC6iO,EAAA9iO,OAAOC,IAClB22M,EAAI,IAAS9jB,KAAgBgwC,EAAK7iO,IAAA6jB,OATzB,oBASyB,KAClC8yL,GAASmsB,EAAI9iO,GAACs5L,QAAM,GAAS,IAC7Bqd,GAASlyM,KAAK4J,MAAM00N,EAAS/iO,IAAM,IAEnC22M,GAAMlyM,KAAQ4J,MAAC20N,EAAAhjO,IAAA,OACfqL,GAAAsrM,CAGD,IAAIjB,GAAe,4BAA+Bh0M,KAAEq+N,cAAQjL,YAAA,IAAApzN,KAAAo1N,aAAA10M,UAAAyB,OAAA,kBAC5DniB,MAAAy1M,cAAA1B,iBAAAC,EAAArqM,IxU6vlDE+zN,EwU1vlDGphO,UAAAilO,iCAA8C,SAAAC,GACnDxhO,KAAKo+N,kCAAkBoD,EACvBxhO,KAAAo/N,kBA/cW,IAAA3iN,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAA2BC,EAAAC,CAAS,OxU4smD7C0gN,GwUztmDHH,IxU0tmDO7iO,OwUztmDPM,GAAU,YACV4V,SAAU,iCACVE,SAAA5W,EAAiB,MACjBkmM,iBxU0tmDWjvL,QwUxtmDV,yDAEDsO,gBAAWzkB,GAAA,wBAAA0kB,OxU0tmDA5J,WwUxtmDV4kN,GACAiB,MAEW6B,GAgdZ,wCAAA/gN,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2uM,SAAA3uM,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA6+M,SAAA7+M,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA42L,SAAA52L,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAhiB,GAAA,mBAAAA,GAAA,oBAAAgiB,GAAAtiB,UAADgjO,IAhdwCrgF,GAAA,GxUiumDpCokF,GAAuCzhO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DsoN,GAAuC1hO,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IyU9vmDzGioN,GAAoB,WzUqwmDjB,QyUrwmDiBC,GAAAjQ,EAAmC/4L,GAC/C54B,KAAA2xN,sBAAiBA,EAAK3xN,KAAA44B,OzUwwmD3BgpM,EyUpwmD6BtlO,UAAO4qB,QAAc,SAAArN,EAAAsnD,GACpD,GAAIm1J,GAAWz8M,EAAA+xD,OAAA,UzUqwmDT,SyUpwmDL0qJ,IAGa,MAAbt2N,KAAA44B,KAAOta,WAKRspK,GAAA,WAAAqB,SAAAjpL,KAAA2xN,sBAAAxF,iBAAAmK,KAjBW,IAAA75M,GAAAC,CAkBZ,OzUkwmDGklN,GyUrxmDOH,IzUsxmDH/mO,OAAOM,GAAqB,cyUrxmDvB0mO,GAkBZ,wCAAAjlN,MAAA,KAAA8uM,SAAA9uM,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,UAADknO,MzU2wmDIC,GAA6B7hO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G0UzxmD/D0oN,KACE5+K,KAAM,GAAAxQ,UAAe8kL,KACtBt0K,KAAA,cAAAxQ,UAAA+qL,GAAAv2M,SAAAtM,QAAA+mN,MAwBFI,GAAA,WAAsC,QAACC,MAAA,M1UuxmDnCA,G0U7ymDHH,I1U8ymDOnnO,O0U7ymDPM,GAAS,W1U8ymDEqX,S0U5ymDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAsqE,IACXr6D,GAAA,YACAwoC,GACAjT,GACAmuB,I1U+ymDU/4M,c0U5ymDVolN,GACAiG,I1U+ymDU3nN,W0U5ymDV47L,GACA6Z,GACAoW,OAEoCK,M1UozmDlCC,GAAK/nO,EAAoB,IAIzBgoO,GAA4BliO,MAAQA,KAAKuY,WAAc,WACvD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFupN,GAA6BniO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DgpN,GAA6BpiO,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2U91mDvE2oN,GAAA,SAAAzoN,G3U22mD/B,Q2Ur2mDH0oN,GAMC3pM,EAAAotJ,EAAMl5B,EAAMw7B,EAAM5xJ,GALR,GAAApzB,GAAMuW,EAANpd,KAAcwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IAMxB,OALUqD,GAAAs1B,SACAt1B,EAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,UAAeA,EAPlBhlL,EAAAozB,M3U82mDDpzB,EAAMk/N,kBAAoB,GAAIN,IAAoB,oBAAEp/N,I2Ur2mD1DQ,EAPD6+N,GACWI,EAEA1oN,G3U42mDRlf,OAAOI,e2Un3mDVwnO,EAAgChmO,UAAA,e3Uo3mDzB0F,IAAK,WAAc,MAAOhC,MAAKuiO,kBAAkBzrG,gBACjDr0H,YAAY,E2Ur3mDgDC,cAAA,I3Uw3mDhEhI,OAAOI,e2Uv3mDVwnO,EAAiChmO,UAAA,gB3Uw3mD1B0F,IAAK,WAAc,MAAOhC,MAAKuiO,kBAAkB3zE,YACjDnsJ,YAAY,E2Uz3mD6CC,cAAA,I3U43mD7D4/N,E2Uh3mDHhmO,UAeCkmO,WAAA,SAAAlkN,EAAAmkN,GAdA,GAAIp/N,GAAArD,KACAyqL,EAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,YACbmkN,CAWD,O3Uq2mDM7oN,G2U92mDJtd,UAAY0V,KAAExV,KAAAwD,KAAAy2B,GAAA9b,UAAA,SAAA+xB,GACbA,IACAA,EAAAmtL,WAAA,GAAAvwM,OAAAC,UAAA,KAEDlmB,EAAAk/N,kBAAmB3mJ,KAAUlvC,GAE9B+9I,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB3U82mDEwrG,E2U52mDKhmO,UAAAomO,aAAY,SAACpkN,EAAcoI,GAClC,MAAA9M,GAAAtd,UAAAwc,OAAAtc,KAAAwD,KAAA,YAAAse,EAAA,WAAAoI,I3U82mDE47M,E2U52mDKhmO,UAAAqmO,aAAY,SAACrkN,EAAcmkN,EAAS/7M,GAC3C,MAAA9M,GAAAtd,UAAAuE,OAAArE,KAAAwD,KAAA,YAAAse,EAAA,YAAAmkN,EAAA/7M,I3U82mDE47M,E2U52mDKhmO,UAAAsmO,aAAY,SAACtkN,EAAcmkN,GAClC,MAAA7oN,GAAAtd,UAAAqmK,OAAAnmK,KAAAwD,KAAA,YAAAse,EAAA,YAAAmkN,I3U82mDEH,E2U32mDKhmO,UAAAumO,cAAU,WACjB,MAAAjpN,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,qC3U62mDEsiO,E2U32mDQhmO,UAAEwmO,YAAkB,SAAAxkN,GAC9B,GAAIoI,IAAAq8M,SAAoB,KACpBt4C,EAAM,GAAcP,IAAY,QACpCzzJ,EAAA,YAAUnY,EAAI,UAcd,O3U81mDM1E,G2Uz2mDJtd,UAAY0V,KAAIxV,KAAAwD,KAASy2B,EAAS/P,GAAA/L,UAAA,SAAA+xB,G3U02mD1B,G2Uz2mDPA,GAAYA,EAASjxB,Q3U22mDV,I2U12mDN,GAALm+M,IAAkB,GAAAtwM,OAAAC,UAAS,IAAlB0P,EAAK,EAAAxc,EAAAiwB,EAAAjxB,QAAAwd,EAAAxc,EAAApe,OAAA46B,IAAA,CACb,GAAAogJ,GAAM58J,EAASwc,EACfogJ,GAAAwgD,UAAAD,EAIHnvC,EAAM7uG,KAAKlvC,IAEZ,SAAO/tB,GAAc,MAAA8rK,GAAe9rK,UAAA,iBAAA8rK,GAAA/7B,aACpC+7B,EAAA3zD,gB3U02mDEwrG,E2Ux2mDKhmO,UAAA0mO,WAAU,SAAC1kN,EAAcmkN,GAChC,MAAA7oN,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,YAAAmkN,EAAA,gB3U02mDEH,E2Ux2mDKhmO,UAAA2mO,cAAY,SAAC3kN,EAAcmkN,GAClC,MAAA7oN,GAAAtd,UAAAwc,OAAAtc,KAAAwD,KAAA,YAAAse,EAAA,YAAAmkN,EAAA,uBApEW,IAAAhmN,GAAAC,EAAAC,EAAaC,EAAAC,CAAS,O3U+6mD/BylN,G2Uh7mDHH,I3Ui7mDOznO,OAAOM,GAAqB,c2Uh7mDvBonO,GAsEZ,wCAAA3lN,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAipK,GAAA,GAAAA,GAAA,IAAAjpK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA+qJ,GAAA,GAAAA,GAAA,IAAA/qJ,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAkrK,GAAA,GAAAA,GAAA,IAAAlrK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,UAAD4nO,IAtE0Bv6C,GAAA,G3Uw7mDtBm7C,GAAsCljO,MAAQA,KAAKuY,WAAc,WACjE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFuqN,GAAuCnjO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DgqN,GAAuCpjO,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4Un8mD9D2pN,GAAA,SAAAzpN,G5Ug9mDxC,Q4Ut7mDH0pN,GASChpN,EAAYC,EAAaqe,EAAC48K,EA2C1B+tB,EAAA5qM,EAAAxe,EAAAqpN,EAAAhpN,GApDkB,GAAAnX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAoDvC,OAnDSqD,GAAAiX,SACCjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,OACAv1B,EAAAmyM,mBACAnyM,EAAAkgO,cACAlgO,EAAAs1B,SACAt1B,EAAA8W,QACA9W,EAAAmgO,cAAsBA,EAjCjCngO,EAAAmX,MAQAnX,EAAAogO,4BAAkB,EA4BjBpgO,EAAKqgO,WAAW,KAChBrgO,EAAKsgO,aAAc,EACnBtgO,EAAKugO,gBAAe,EACpBvgO,EAAKwgO,gBAAgB,GAAKxnO,OAAM,GAChCgH,EAAKwgO,gBAAgB7sN,MAAMjc,OAAQ,EAAEokB,MAAO,iBAC5C9b,EAAKwgO,gBAAgB7sN,MAAMjc,MAAO,EAAGokB,MAAO,gBAC5C9b,EAAKwgO,gBAAgB7sN,MAAMjc,MAAO,EAAEokB,MAAO,gBAC3C9b,EAAKwgO,gBAAgB7sN,MAAMjc,MAAO,GAAIokB,MAAO,kBAC7C9b,EAAKwgO,gBAAgB7sN,MAAMjc,MAAO,GAAIokB,MAAO,kBAC7C9b,EAAKwgO,gBAAgB7sN,MAAMjc,MAAO,GAAIokB,MAAO,kBAG7C9b,EAAKwgO,gBAAU7sN,MAAAjc,MAAA,GAAAokB,MAAA,kB5Us7mDT9b,E4Ur7mDLuyM,S5Us7mDSkuB,S4Up7mDRC,YAAW,KACXC,UAAA,M5Uu7mDQC,S4Up7mDRv7G,MAAO,KACPiqF,MAAA,O5Uw7mDItvM,E4Un7mDL6gO,oBACAj8N,KAAM,KACNyrD,OAAA,KACAhzC,UAAS,KACTC,QAAS,KACT+zK,UAAW,WACVxC,YAAA,O5Uq7mDI7uL,E4Ul7mDL8gO,oBACAl8N,KAAM,KACNyrD,OAAA,KACAhzC,UAAS,KACTC,QAAS,KACT+zK,UAAW,WACVxC,YAAA,QACF7uL,EApDD6/N,GAAmBI,EAGR1pN,G5Us+mDR0pN,E4Ul7mDchnO,UAAA+H,SAAA,WAChBrE,KAAK20M,WACL30M,KAAAokO,YAAApkO,KAAAyjO,8B5Uo7mDEH,E4U55mDFhnO,UAAAq4M,SAAA,WArBA,GAAItxM,GAACrD,IAELA,MAAKqkO,aAAc,E5Uk7mDbrkO,K4Uj7mDLwjO,cAAKV,YAAkB9iO,KAAK44B,KAAKta,WAAW3D,UAAK,SAAY1S,GAC7D5E,EAAKugO,eAAmB,GAAD37N,EAAC+V,QAAA3a,EAAAkgO,YAAAtsG,qBACtB5zH,EAAAmX,IAAAhP,iB5Um7mDGxL,K4Uh7mDLw1M,iBAAa5D,mBAAej3L,UAAA,SAA2B1S,GACvD5E,EAAKuyM,QAAQkuB,QAAQzgO,EAAQihO,2BAAwBr8N,EAAQ2tM,QAAQ2uB,cACrElhO,EAAKuyM,QAAQquB,QAAQv7G,MAAQp9F,WAAWrjB,EAAK2tM,QAAQ4uB,SAAS97G,OAE9DrlH,EAAKuyM,QAAAquB,QAAAtxB,MAAqBrnL,WAAKrjB,EAAA2tM,QAAA4uB,SAAA7xB,OAC/BtvM,EAAK6gO,mBAAqB7gO,EAAKohO,kCAAkCx8N,EAAKy8N,iBAAiBF,UAEvFnhO,EAAK8gO,mBAAmB9gO,EAAAshO,kCAA2B18N,EAAAy8N,iBAAAE,UACnDvhO,EAAKwhO,YAAc58N,EAAK68N,UAAUN,SAASrW,QAE3C9qN,EAAK0hO,YAAc98N,EAAK68N,UAACE,SAAA7W,QACzB9qN,EAAKghO,aAAI,EACPhhO,EAAAmX,IAAAhP,kB5Ug7mDD83N,E4U56mD2BhnO,UAAAgoO,2BAAA,SAAAW,G5Uo7mDvB,I4U56mDF,GAPHt7N,IACAq6N,UAAW,KACVD,YAAA,MAGEhJ,EAAY,EACZmK,EAAA,EACIzoN,EAAG,EAAA0oN,EAAAF,EAAAxoN,EAAA0oN,EAAA9mO,OAAAoe,IAAA,CACV,GAAAi2L,GAAUyyB,EAAc1oN,EACxBs+M,IAAOzvM,WAAgBonL,EAAAhqF,OAFT,IAGbgqF,EAAA0yB,cACAF,EAAA55M,WAAAonL,EAAAhqF,QAWF,MAPCqyG,GAAO,IAGPpxN,EAAOo6N,YAAY,IAAQmB,EAAOnK,EAClCpxN,EAAAq6N,UAAA,IAAAr6N,EAAAo6N,aAGDp6N,G5U06mDE25N,E4Uv6mDiChnO,UAAAmoO,kCAAA,SAAAtW,G5Uw6mD7B,G4Uv6mDLxkN,IACA1B,KAAM,KACNyrD,OAAA,KACAhzC,UAAS,KACTC,QAAS,KACT+zK,UAAW,WACVxC,YAAA,M5Uy6mDI,I4Ur6mDY,GAAjBi8B,EAAO9vN,OAGP,MAFAsL,GAAO1B,QACP0B,EAAO+pD,UACP/pD,C5U06mDK,K4Up6mDD,GAHD0oM,IAAwCpqM,QAAUkX,MAAO,SACzDozL,GAA2BtqM,QAAAkX,MAAA,SAE/Bu0C,KAASj3C,EAAG,EAAAy3M,EAAA/F,EAAA1xM,EAAAy3M,EAAA71N,OAAAoe,IAAA,CACX,GAAAi2L,GAAUwhB,EAAUz3M,EACpB41L,GAAUpqM,KAAK+O,KAAKsU,WAAWonL,EAAIC,QACnCJ,EAAOtqM,KAAK+O,KAAAsU,WAAOonL,EAAKhqF,QACxBh1D,EAAA18C,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAQD,MALAxvL,GAAO1B,MAAMoqM,EAAUE,GACvB5oM,EAAO+pD,OAASA,EAChB/pD,EAAO+W,UAAUywK,GAAOruK,EAAAiuL,KAAKod,EAAQ,GAAAvb,MAErCjpM,EAAOgX,QAAOwwK,GAAAruK,EAAAiuL,KAAAod,IAAA9vN,OAAA,GAAAu0M,MACdjpM,G5Uo6mDE25N,E4Uj6mDiChnO,UAAAqoO,kCAAA,SAAAxW,G5Uk6mD7B,G4Uj6mDLxkN,IACA1B,KAAM,KACNyrD,OAAA,KACAhzC,UAAS,KACTC,QAAS,KACT+zK,UAAW,WACVxC,YAAA,O5Um6mDI,I4U/5mDY,IAAjBi8B,EAAO9vN,OAGP,MAFAsL,GAAO1B,QACP0B,EAAO+pD,UACP/pD,C5Uw6mDK,K4U/5mDD,GANJ07N,IACAp9N,QACAkX,MAAM,kBACN6iK,MAAA,EACCgU,iBAAA,qBAEFsvC,EAAgBnX,EAAAxwN,MAAA,MAAP8e,EAAG,EAAA8oN,EAAAD,EAAA7oN,EAAA8oN,EAAAlnO,OAAAoe,IAAA,CACX,GAAAi2L,GAAA6yB,EAAwB9oN,EACxB4oN,GAAAp9N,KAAA+O,KAAAsU,WAAAonL,EAAAhqF,Q5U06mDK,I4U55mDD,GAXD88G,GAAsCrX,EAAAxwN,MAAA,IACzC8nO,GACAx9N,QACAkX,MAAM,cACN6iK,MAAA,EACCgU,iBAAA,qBAKE0vC,GAA2B,GAAAp8M,OAAAC,UAAA,SAC/BmqC,KAASh3C,EAAG,EAAAipN,EAAAH,EAAA9oN,EAAAipN,EAAAtnO,OAAAqe,IAAA,CACX,GAAIg2L,GAAMizB,EAAYjpN,GACtB/gB,EAAU+2M,EAAKE,KAAK8yB,EAAKp6M,WAAAonL,EAAAhqF,OAAA,IACzB+8G,GAAOx9N,KAAK+O,KAAArb,GACZ+3D,EAAA18C,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAQD,MALAxvL,GAAO1B,MAAMw9N,EAAUJ,GACvB17N,EAAO+pD,OAASA,EAChB/pD,EAAO+W,UAAUywK,GAAOruK,EAAAiuL,KAAKy0B,EAAa,GAAA5yB,MAE1CjpM,EAAOgX,QAAOwwK,GAAAruK,EAAAiuL,KAAAy0B,IAAAnnO,OAAA,GAAAu0M,MACdjpM,G5U45mDE25N,E4Uz5mDMhnO,UAAS8nO,YAAA,SAAAwB,GACjB,GAKIC,GALAvqO,EAAG61L,OACHzvK,EAAMpmB,EAAEqmB,QAAQC,QAAQ,OACxBE,EAAsCxmB,EAACqmB,QAAAC,QAAA,O5U65mDrC,I4Ux5mDN5hB,KAAA8lO,6BAAoBF,EACpBC,GAAQ/jN,EAAMJ,GACbkkN,GAAQ,E5Uu5mDC,O4Ut5mDRA,G5Uu5mDY,I4Ut5mDX,GACAC,GAAMnkN,EAAAC,QAAAM,SAAA,UAAA3mB,EACP,M5Uu5mDY,S4Ur5mDZuqO,GAAAnkN,EAAAC,QAAAM,SAAA2jN,EAAA,QAAAhkN,QAAA,QAAAtmB,EAAAqmB,QAAAM,SAAA,UAAAC,MAAA,SAIFliB,KAAA+lO,0BAAAF,I5Uu5mDEvC,E4Up5mDiBhnO,UAAQ0pO,sBAAA,SAAAnpN,GAC3B7c,KAAAokO,YAAAvnN,EAAA9hB,Q5Us5mDEuoO,E4Un5mDehnO,UAAM2pO,cAAA,SAAAL,GACvB5lO,KAAAokO,YAAAwB,I5Uq5mDEtC,E4U5ymDFhnO,UAAAypO,0BAAA,SAAAnlN,GAtGA,GAAMvd,GAAArD,KACFyjB,GAAa,MAAS,MAAO,MAAO,MAAE,iDACtC/C,EAAM,GAAU4I,MAAA1I,EAAS,OACzBu3K,EAAAz3K,EAAWmwM,SACXqV,EAAQxlN,EAAUylN,aAAgB,EAClC/tC,EAAO13K,EAAU0lN,cAAc,EAC/BlvM,EAAAxW,EAAcgvM,cAElB2W,GADkB,GAAI/8M,MAAC4N,EAAUkhK,EAAC,GAAAo3B,UAC1B,GAAQlmM,MAAA5I,GAEhB2lN,GAAKlW,QAAWzvM,EAAM8uM,WAEtBxvN,KAAIqjB,UAAY80K,IAAMz3K,EAAMylN,aAAY,EAAM/tC,MAAM13K,EAAO0lN,cAAAlvM,KAAAxW,EAAAgvM,cAC3D,IAAI4W,IAAC,MAAkB,MAAG,MAAM,wBAChCtmO,MAAKumO,mBAAqB,MAC1BvmO,KAAIwmO,eAAsB,IAC1B,IAAIC,GAEAC,CACJ1mO,MAAK2mO,sBAAwB,GAAEtqO,OAAA,E5Ui5mDzB,K4Uh5mDL,GAAK48B,GAAA,EAAAA,EAAA,EAAAA,IACLj5B,KAAK2mO,sBAAC3vN,KAAAsvN,EAAAnuC,MACNA,EAAmB,IACnBA,EAAA,E5Um5mDK,I4Uh5mDLv3K,EAAK,MAAAA,EAAkB,GAAG,IAAO,WACjC5gB,KAAKumO,mBAAqB,OAC1BvmO,KAAKwmO,eAAiB,GAAInqO,OAAM,E5Ui5mDvB,K4Uh5mDR,GAAK48B,GAAA,EAAAA,EAAA,GAAeA,IACpBj5B,KAAAwmO,eAAAxvN,KAAAiiB,EAAApY,WAAA,O5Um5mDI7gB,K4U74mDJw1M,iBAAiBpD,iBAAkBxxL,EAAA,GAAAgB,QAAA,OAAAhB,EAAA,GAAAgB,QAAA,OAAA5hB,KAAAumO,oBAAA5rN,UAAA,SAAA1S,GAAA,GAAC2+N,GAAA3+N,EAAA,GAAAA,UAMhC4+N,EAAW5+N,EAAA,GAAAA,UAEf6+N,EAAA,CACAL,GAAkB,GAAIpqO,OAAM,GAC5BqqO,EAAiB,GAAKrqO,OAAK,E5U04mDnB,K4Uz4mDP,GAAA48B,GAAA,EAAAA,EAAgB,EAAKA,IACrBwtM,EAAgBzvN,KAAK,GAAI3a,OAAM,IAC/BqqO,EAAA1vN,KAAA,GAAA3a,OAAA,GAGD,IAAI0qO,IAAc,EACdC,EAAK,E5Uy4mDD,I4Uv4mDe,OAAtB3jO,EAAKkjO,mBAA4B,C5Uw4mDtB,I4Ut4mDV,GAAAttM,GAAU,EAAAA,EAAQ2tM,EAAWvoO,OAAC46B,IAC9BotM,EAAQ,GAAA/8M,MAAQ5I,GAChB2lN,EAAIlW,QAAUkW,EAAA7W,UAAAv2L,GAAE6tM,EAAS,IAEzBA,EAAW,GACXZ,EAAUG,EAAOF,aACZ,GAAJW,IACCC,GAAaV,EAAQD,cAAe,GACpCW,EAAWV,EAAUD,cAAa,EAClCY,EAAcX,EAAAY,YAAmBpmN,WAAc,IAAI4C,EAAS4iN,EAAAD,eAAyB,IAAAC,EAAA3W,cAAA7uM,WACrFmmN,EAAAvjN,EAAA4iN,EAAAD,eAAA,IAAAC,EAAA3W,cAAA7uM,YAAwBmmN,EAAA,IAK1BP,EAAgBK,GAAQ9vN,MAAMmhL,IAAK6uC,EAAajsO,MAAO6rO,EAAW3tM,KAClEytM,EAASI,GAAA9vN,MAAAmhL,IAAA6uC,EAAAjsO,MAAA8rO,EAAA5tM,KAET6tM,GAGDzjO,GAAAmjO,eAAuB,GAAGnqO,OAAA,GAC1BuqO,EAAa,GAAIvqO,OAAM,GAMvBwqO,EAAW,GAAMxqO,OAAK,E5Ui4mDX,K4Uh4mDV,GAAK48B,GAAI,EAAEA,EAAMwtM,EAAKpoO,OAAoB46B,I5Ui4mD5B,I4Uh4mDb,GAAIhc,GAAM,EAACA,EAAAwpN,EAAAxtM,GAAA56B,OAAA4e,IAAO,GAALgc,GAEb51B,EAAUmjO,eAAMxvN,KAAAyvN,EAA8BxtM,GAAChc,GAAAk7K,KAC/CyuC,EAAW5vN,KAAKyvN,EAAgBxtM,GAAIhc,GAAIliB,OACxC8rO,EAAA7vN,KAAA0vN,EAAAztM,GAAAhc,GAAAliB,OAKHsI,EAAK6jO,iBAAmBN,EAExBvjO,EAAK8jO,iBAAmBN,EAExBxjO,EAAAmX,IAAAhP,kB5Ug4mDA83N,E4Ul3mDDhnO,UAAA8qO,gBAAA,WATA,GAAI/jO,GAAOrD,I5U63mDNA,MAAKma,M4U13mDRjc,MAAO8B,KAAKua,YAAYmE,UAAU,gCAAkC1e,KAAAua,YAAgBmE,UAAI,iCACxFS,MAAOnf,KAAAua,YAAamE,UAAK,6BAAuBU,GAAA,QAAAC,OAAA,EAChDC,MAAA,SAAAvM,GAAA,MAAA1P,GAAAgkO,aAAAt0N,MAGDoM,MAAAnf,KAAeua,YAAEmE,UAAA,gCAAAU,GAAA,MAAAC,OAAA,IAClB,kB5U23mDCikN,E4Ul3mDDhnO,UAAA+qO,aAAA,SAAAt0N,GANA,GAAI1P,GAAKrD,I5U03mDJ,I4Uz3mDyC,MAA7CA,KAAM44B,KAAAta,UAA6C,CACnD,GAAIiuB,IAAUx5B,KAAQA,EAAAu0N,UAAa,KAAAjtO,YAAA,I5U03mD3B2F,M4Uz3mDNunO,UAAYvnO,KAAKwjO,cACjBd,aAAU1iO,KAAA44B,KAAsBta,UAAKiuB,GACvC5xB,UAAA,SAAApf,GAAA,MAAA8H,GAAAmkO,iBAAAjsO,EAAAsX,Q5U43mDAywN,E4Ux3mDWhnO,UAAgBkrO,iBAAE,SAAA/E,EAAAxlO,GAC7BA,IAAEA,EAAAwqO,mBACFxqO,EAAE44G,iBACF54G,EAAEyqO,2BACFzqO,EAAAyiM,mBAED1/L,KAAA24B,OAAOgC,UAAA,iBAAA8nM,IApYG,IAAAhmN,GAAAC,EAAAC,EAAAG,EAAAC,EAAsBC,EAAAE,EAAAC,EAAAC,CAAS,O5UgwnDxCkmN,G4U5wnDHH,I5U6wnDOzoO,O4U5wnDPM,GAAU,YACV4V,SAAU,2BACVE,SAAQ5W,EAAA,M5U6wnDGiX,Q4U3wnDV,wDACA,wDACA,2CACA,+CACA,kDAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACW0jN,GAsYZ,wCAAA3mN,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4rK,GAAA,GAAAA,GAAA,IAAA5rK,GAAAjiB,OAAA,mBAAAoiB,MAAA,KAAA40L,SAAA50L,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAwiI,GAAA,GAAAA,GAAA,IAAAxiI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAogI,GAAA,GAAAA,GAAA,IAAApgI,GAAAtiB,OAAA,mBAAAwiB,MAAA,KAAAogI,GAAA,GAAAA,GAAA,IAAApgI,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAklN,SAAAllN,GAAAziB,OAAA,mBAAA0iB,MAAA,KAAApiB,GAAA,mBAAAA,GAAA,oBAAAoiB,GAAA1iB,UAAD4oO,IAtYmCjmF,GAAA,G5UoxnD/BsqF,GAAgC3nO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DwuN,GAAgC5nO,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6UnnnDzGmuN,GAAiC,W7UunnD9B,Q6UvnnDiBC,GAAa/pO,GAhDjCiC,KAAAjC,KACAiC,KAAA+nO,wBAAiC,GACjC/nO,KAAAgoO,oBAAa,GACbhoO,KAAAioO,OAAS,IA+CRjoO,KAAAkoO,OAAA,I7U4nnDEJ,E6UtonDGxrO,UAAew5H,SAAA,SAAAxxF,GACpBtkC,KAAAmoO,gBAaDL,EAACxrO,UAAA+H,SAAA,a7U6nnDEyjO,E6U1nnDSxrO,UAAS8rO,QAAa,SAAEnvM,GACnC,GAAIovM,GAAC,GAAQ/+M,MAAKtpB,KAAOqjB,S7U4nnDnB,O6U1nnDNglN,GAAIlY,QAAKkY,EAAA7Y,UAAoBv2L,GAChB,OAAZj5B,KAAAsoO,YACGD,EAAIlC,aAAKtlN,WACZ,KAAMwnN,EAAKjC,cAAc,GAAAvlN,WACzB,IAAAwnN,EAAA3Y,cAAA7uM,WAAA,KACD,I7U6nnDEinN,E6U1nnDWxrO,UAAOkI,YAAU,WAC9BxE,KAAIqjB,SAAyC,GAAAiG,MAAAtpB,KAAAuoO,UAAArxM,KAAAl3B,KAAAuoO,UAAAnwC,MAAAp4L,KAAAuoO,UAAApwC,IAC7C,IAAIqwC,GACAC,EACAC,EAAW,EAEXC,EAAC,CAEL3oO,MAAK4oO,eAAc,GAAAvsO,OAAY,GAC/B2D,KAAK42L,YAAK,aAAU52L,KAAA6oO,YAAE7oO,KAAK8oO,aAEvB9oO,KAAK42L,YAAW,OACJ,QAAf52L,KAAAsoO,YACAI,EAAA,GAEsB,OAAnB1oO,KAAKsoO,cAEPI,EADY,MAAZ1oO,KAAA+oO,KACA/oO,KAAA+oO,KAAA1qO,OAAA,EAEA,EAIF,IAAI2qO,GAAUjmO,KAAAC,IAAU4G,MAAA7G,KAAW/C,KAAA+oO,KAGnC/oO,MAAIkoO,OAAUc,EAAKnoN,UACnB,IAAIooN,GAAa,C7UwnnDX,I6UvnnDM,MAAXjpO,KAAK+oO,K7UwnnDI,I6UtnnDR,GAAI9vM,GAAA,EAAAA,EAAcj5B,KAAG+oO,KAAA1qO,OAAA46B,IACN,GAAdgwM,IACAR,EAAA,GAAApsO,OAAA,IAIDmsO,GAAaztO,MAAAiF,KAAW+oO,KAAA9vM,GAAA+vM,EAAAE,KAAAlpO,KAAA+oO,KAAA9vM,GAAApY,YAExB4nN,EAAAzxN,KAAawxN,KACbS,EACcP,EAAE,IACfO,EAAK,EACLjpO,KAAA4oO,eAAc5xN,KAAAyxN,GACdE,IAKH3oO,MAAAmoO,gB7UonnDEL,E6UhnnDQxrO,UAAA6rO,aAA4B,W7UinnDhC,G6UhnnDE,MAAPnoO,KAAA4oO,gBAAO,GAAA5oO,KAAA4oO,eAAAvqO,QAAA,GAAA2B,KAAA4oO,eAAA,GAAAvqO,O7UmnnDF,I6U9mnDL2B,KAAImpO,eAAgBnpO,KAAAjC,GAAAqG,cAAwBwE,wBAACI,KAC7C,IAAI6qN,GAAU7zN,KAAK4oO,eAAA,GAAAvqO,OACf+qO,EAACppO,KAAc+nO,wBAAuB/nO,KAAQgoO,mBAClDhoO,MAAAqpO,aAAArpO,KAAAmpO,eAAAC,GAAAvV,E7UinnDK,M6U/mnDL52N,KAjHF,IAAAwf,GAAAC,CAoHA,O7UgnnDGirN,KACIjtO,OAAOM,GAAgB,SACvB4sO,GAA6B,cAAevrO,Q6UnunDnDyrO,EAAAxrO,UAAA,kB7UqunDGqrO,IACIjtO,OAAOM,GAAgB,SACvB4sO,GAA6B,c6UvunDrBvrO,QAGfyrO,EAAAxrO,UAAA,e7UsunDGqrO,IACIjtO,OAAOM,GAAgB,SACvB4sO,GAA6B,cAAejkN,S6UrunDnDmkN,EAAAxrO,UAAA,sB7UuunDGqrO,IACIjtO,OAAOM,GAAgB,SACvB4sO,GAA6B,c6UzunDrBvrO,QAGfyrO,EAAAxrO,UAAA,e7UwunDGqrO,IACIjtO,OAAOM,GAAgB,SACvB4sO,GAA6B,cAAejkN,S6UvunDnDmkN,EAAAxrO,UAAA,sB7UyunDGqrO,IACIjtO,OAAOM,GAAgB,SACvB4sO,GAA6B,cAAex0N,U6UxunDnD00N,EAAAxrO,UAAA,qB7U0unDGqrO,IACIjtO,OAAOM,GAAgB,SACvB4sO,GAA6B,cAAeltO,S6UzunDnDotO,EAAAxrO,UAAA,oB7U2unDGqrO,IACIjtO,OAAOM,GAAuB,cAAG,iBAAkB,WACnD4sO,GAA6B,cAAejkL,UAC5CikL,GAA6B,qBAA8E,mBAAhDnrN,EAAsB,mBAAV6sN,QAAyBA,QAAyB7sN,GAAM/hB,SAC/HktO,GAA6B,wB6U7unDnC,KA1CWE,EAAgBxrO,UAAA,iB7UyxnDzBwrO,E6U36nDHH,I7U46nDOjtO,O6U36nDPM,GAAoB,YACpB4V,SAAQ,W7U46nDGO,Q6U16nDV,yCA6IAL,SAAA,68GACW82N,GAuIZ,wCAAAlrN,MAAA,KAAA1hB,GAAA,YAAAA,GAAA,aAAA0hB,GAAAhiB,UAADotO,M7UiqnDIyB,GAA+BvpO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G8Uj7nD/DowN,KACCtmL,KAAA,GAAAxQ,UAAA2wL,KAsBFoG,GAAA,WAAwC,QAACC,MAAA,M9U+6nDrCA,G8Un8nDHH,I9Uo8nDO7uO,O8Un8nDPM,GAAS,W9Uo8nDEqX,S8Ul8nDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAgyE,IACX/hE,GAAA,YACAwoC,GACAjT,I9Uq8nDU5qL,c8Ul8nDVixN,GACAwE,I9Uq8nDU/xN,W8Ul8nDV47L,GACA2wB,OAEsCqH,M9U08nDpCC,GAAwC3pO,MAAQA,KAAKuY,WAAc,WACnE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFgxN,GAAyC5pO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DywN,GAAyC7pO,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+U9+nD7DowN,GAAA,SAAAlwN,G/Uw/nDzC,Q+Ux+nDHmwN,GAKCzvN,EAAYC,EAAco3M,EAgB1B/4L,EAAApe,GArBkB,GAAAnX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAqBvC,OApBSqD,GAAAiX,SACCjX,EAAAkX,cACDlX,EAAAsuN,sBAAiBA,EAChBtuN,EAAAu1B,OAnBXv1B,EAAAmX,MACAnX,EAAAyuN,iCAAA,GACAzuN,EAAA2mO,4CAAmC,IAoBlC3mO,EAAK4mO,eAAe,UACpB5mO,EAAK6mO,aAAA,KACL7mO,EAAKs0N,0BAA4B,GAAAj9D,KACjCr3J,EAAK8mO,wBAAyB,EAC9B9mO,EAAK+mO,2BAAgB,E/U2+nDf/mO,E+U1+nDL8vM,eACA1N,KAAA,EACC2nB,UAAA,IAGF/pN,EAAKgnO,0BAA4BhnO,EAAC2mO,4CAGlC3mO,EAAK00N,sBAAW,K/Uw+nDV10N,EAAMuvN,SAAW1D,G+Uv+nDvB7rN,EArBDsmO,GAAmBI,EAERnwN,G/U6/nDRmwN,E+Uv+nDcztO,UAAA+H,SAAA,WAChBrE,KAAA20M,Y/Uy+nDEo1B,E+Ut+nDMztO,UAAqBu2N,oBAAU,SAAsByD,GAE5Dt2N,KAAA+3N,uBAAO/3N,KAAA+3N,sBAAA3E,aAAAkD,IAKRt2N,KAAK+3N,sBAAA/3N,KAAA23N,0BAAmC31N,IAAAs0N,GACxCt2N,KAAAu2N,qC/Uq+nDEwT,E+U17nDFztO,UAAAi6N,iCAAA,WAxCA,GAAIlzN,GAAOrD,KACP2gB,EAASwwK,OAAmBvvK,QAAS,OACrClB,EAAWC,EAA0BgB,QAAAM,SAAAjiB,KAAA8xN,iCAAA,OAKzC9xN,MAAKizN,oBAAsB,K/Ui+nDrBjzN,K+U/9nDH2xN,sBAAW7F,qBAAS9rN,KAAA+3N,sBAAA3E,YAAA1yM,EAAAC,EAJlB,OAKHhG,UAAK,SAAA1S,G/Ug+nDG5E,E+U/9nDP4vN,qBACAhrN,KAAMA,EAAEgkN,OACRv4J,OAAAzrD,EAAWyrD,OACXhzC,UAASA,EACTC,QAASA,EACT+zK,UAAW,WACVxC,YAZC,OAeF7uL,EAAAmX,IAAAhP,iBAIFxL,KAAK44B,KAAAq5K,4BAELjyM,KAAKy2N,oBAAsB,K/U49nDlBz2N,K+U19nDN2xN,sBAAWtF,uBAASrsN,KAAA+3N,sBAAA3E,YAAA1yM,EAAAC,GAErBhG,UAAK,SAAA1S,GAGL5E,EAAIozN,oBAAKxuN,EACR5E,EAAKozN,sBACLpzN,EAAAozN,wBAGApzN,EAAAmX,IAAAhP,mB/U09nDFu+N,E+Ux7nDFztO,UAAAq4M,SAAA,WA3BA,GAAItxM,GAAOrD,KACP2gB,EAAS3gB,KAAOqqO,0BAAC,EAAAl5C,OAAAvvK,QAAA,OAAAuvK,OAClBzwK,EAAK,IAEPA,GADA1gB,KAAAqqO,0BAA4B,EAC5B1pN,EAAAgB,QAAAM,SAAAjiB,KAAAqqO,0BAAA,SAEAl5C,GAAAruK,EAAAiuL,KAAA/wM,KAAAiqO,gBAKDjqO,KAAKkqO,aAAA,K/Um9nDClqO,K+Ul9nDL2xN,sBAAoBhG,8BAAajrM,EAAAC,EAAA3gB,KAAAmzM,eAAAx4L,UAAA,SAAA1S,GACjC5E,EAAK6mO,aAAAjiO,EAAAkmN,QACL9qN,EAAK8mO,wBAAyBliO,EAAGomN,cACjChrN,EAAK+mO,2BAA4B,EACjC/mO,EAAcs0N,0BAAY,GAAZj9D,I/Um9nDL,K+Un9nDL,GAAIzhI,GAAE,EAAAxc,EAAAxU,EAAAkmN,QAAAl1L,EAAAxc,EAAApe,OAAA46B,IAAA,CACT,GAAAk7L,GAAK13M,EAAAwc,EACL51B,GAAAs0N,0BAAAh1N,IAAAwxN,EAAAmW,MAAAlX,YAAAe,EAAAmW,OAKDjnO,EAAImX,IAAIhP,eACuB,MAA9BnI,EAAK00N,uBAA+C,MAAtB10N,EAAgB6mO,cAAmB7mO,EAAA6mO,aAAA7rO,OAAA,GACjEgF,EAAAwvN,oBAAAxvN,EAAA6mO,aAAA,GAAAI,MAAAlX,gB/Uo9nDA2W,E+U/8nDiBztO,UAAAiuO,0BAAA,SAAAL,GACnB,GAAGvgO,IAAA,C/Ug9nDG,I+U/8nDLugO,E/Ug9nDS,I+Uh9nDL,GAAIjxM,GAAG,EAAAuxM,EAAAN,EAAAjxM,EAAAuxM,EAAAnsO,OAAA46B,IAAA,CACV,GAAGy5K,GAAC83B,EAAoBvxM,E/Ui9nDZ,I+Uh9nDX,SAASy5K,IAAKA,EAAAC,MAAA,GACdhpM,GAAM,CACN,QAIH,MAAAA,I/Uk9nDEogO,E+U/8nDgBztO,UAAS83N,wBAA2B,SAAKhB,GAC3D,MAAAA,IAAApzN,KAAA+3N,uBAAA/3N,KAAA+3N,sBAAA3E,gB/Ui9nDE2W,E+U98nDeztO,UAAAmuO,0BAA2B,SAAAtZ,GAC3CA,GAAKnxN,KAAAqqO,4BACLrqO,KAAKqqO,0BAAuBlZ,EAC5BnxN,KAAKmzM,cAAW1N,KAAA,EAChBzlM,KAAA20M,a/Ui9nDCo1B,E+U78nDiBztO,UAAWq6N,cAAC,SAAAlxB,GAC/BzlM,KAAKmzM,cAAW1N,OAChBzlM,KAAA20M,WA7JW,IAAAl4L,GAAAC,EAAAC,EAAAC,EAAAC,CAAgC,O/U6moDzCktN,G+UxnoDHH,I/UynoDOlvO,O+UxnoDPM,GAAU,YACV4V,SAAU,6BACVE,SAAA5W,EAAiB,MACjBkmM,iB/UynoDWjvL,Q+UvnoDV,wDACA,qEACA,4CAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWmqN,GA8JZ,wCAAAptN,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4uM,SAAA5uM,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2rK,GAAA,GAAAA,GAAA,IAAA3rK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,UAADqvO,IA9JoC1sF,GAAA,G/UgooDhCqtF,GAAiC1qO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GgVpooD/DuxN,KACCznL,KAAA,GAAAxQ,UAAAo3L,KAsBFc,GAAA,WAAyC,QAACC,MAAA,MhVkooDtCA,GgVtpoDHH,IhVupoDOhwO,OgVtpoDPM,GAAS,WhVupoDEqX,SgVrpoDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAmzE,IACXljE,GAAA,YACAwoC,GACAjT,GACAmuB,IhVwpoDU/4M,cgVrpoDV03N,IhVwpoDUh0N,WgVrpoDV47L,GACA6Z,OAEuCsf,MCzCzCC,GAAA,WACA,QAAAC,GAAAC,GACAhrO,KAAAirO,cACAC,gBAAA,kBACAC,UAAA,YACAC,IAAA,MACAC,SAAA,YACAC,YAAA,YACAC,SAAA,WACAC,iBAAA,YACAC,YAAA,YACAC,WAAA,YACAC,SAAA,YACAC,MAAA,QACAC,MAAA,QACAC,SAAA,WACAC,UAAA,YACAC,KAAA,OACAC,UAAA,YACAvxE,IAAA,MACAwxE,SAAA,WACAC,OAAA,SACAC,QAAA,UACAC,aAAA,YACAC,iBAAA,YACAC,MAAA,QACAC,SAAA,WACAC,QAAA,UACAC,SAAA,YAEA1sO,KAAA2sO,4BAAA,GAAA3xO,IAAA,aACAgF,KAAA4sO,uBAAA,EACA5sO,KAAAgrO,WAkEC,MAhEDD,GAAAzuO,UAAAkrK,KAAA,SAAAktB,EAAA13I,GACA,GAAA35C,GAAArD,IACA,WAAAk8B,SAAA,SAAqChV,EAAAgW,OACrC,KAAAhW,IAAoCA,EAAAy8B,SAAArnD,eACpC,KAAA4gC,MAAAymB,SAAArnD,WACA+G,EAAAwpO,yBAAAzmM,KAAA,WACA,GAAA0mM,IACAC,UAAA1pO,EAAA4nO,aAAAv2C,IACA3yC,SAAA1+I,EAAA2nO,SACAz+M,SAAArF,EAEA81B,KACA8vL,EAAAE,WAAAhwL,GAEa+1E,OAAAk6G,OAAAzlE,KAAA,OAAwBslE,KAC5BnnM,MAAA,SAAA/wB,GAAA,MAAAsoB,UAGT6tM,EAAAzuO,UAAAuwO,uBAAA,WACA,GAAAxpO,GAAArD,IACA,WAAAk8B,SAAA,SAAqChV,EAAAgW,GAGrC,OAFA,KAAAhW,IAAoCA,EAAAy8B,SAAArnD,eACpC,KAAA4gC,MAAAymB,SAAArnD,WACA,mBAAAy2H,gBAAAk6G,OACA/lN,QAEA,IAAA7jB,EAAAupO,sBAoBAvpO,EAAAspO,4BAAAhyN,UAAA,SAAAuyN,GACAA,EACAhmN,IAGAgW,UAzBA,CACA75B,EAAAupO,uBAAA,CACA,IAAAnwM,GAAAxhC,SAAAiC,cAAA,SACAu/B,GAAAhsB,KAAA,kBACAgsB,EAAAI,IAAA,2CACAJ,EAAAK,OAAA,EACAL,EAAA0wM,OAAA,EACA1wM,EAAAwc,OAAA,WACA51C,EAAAupO,uBAAA,EACAvpO,EAAAspO,4BAAAphO,MAAA,GACA2b,KAEAuV,EAAAyc,QAAA,WACA71C,EAAAupO,uBAAA,EACAvpO,EAAAspO,4BAAAphO,MAAA,GACA2xB,KAEAjiC,SAAA0rD,qBAAA,WAAAxpB,YAAAV,OAcAsuM,EAAgBv6N,aAChBC,KAAAzV,GAAA,aAGA+vO,EAAS35N,eAAgC,WAAO,QAC1CX,SAAA5N,GAAA2N,aAAAC,KAAAzV,GAAA,OAAA2V,MAAA3V,GAAA,gBAEL+vO,KCnGDqC,GAAA,WACA,QAAAA,GAAArvO,GACAiC,KAAAqtO,kBAAAtvO,EAUC,MARDqvO,GAAA9wO,UAAAwsK,YAAA,SAAA5kK,EAAAD,GACAjE,KAAAqtO,kBAAAjpO,cAAAxH,MAAA4P,KAAAtI,EAAAkpO,EAAAE,OACAttO,KAAAqtO,kBAAAjpO,cAAAxH,MAAA6P,IAAAxI,EAAAmpO,EAAAE,QAEAF,EAAA9wO,UAAAixO,cAAA,WACA,MAAAvtO,MAAAqtO,mBAEAD,EAAAE,OAAA,KACCF,KCTDI,GAAA,WACA,QAAAC,GAAA1vO,EAAA2vO,GACA1tO,KAAAjC,KACAiC,KAAA0tO,gBACA1tO,KAAA2tO,YAAA,GAA8B3yO,IAAY,aAC1CgF,KAAA4tO,WAAA,GAA8B5yO,IAAA,aAC9BgF,KAAA6tO,WAAA,GAA6B7yO,IAAY,aACzCgF,KAAA8tO,UAAA,GAA4B9yO,IAAY,aACxCgF,KAAA+tO,SAAA,GAAA/yO,IAAA,aAmPC,MAjPDyyO,GAAAnxO,UAAAkI,YAAA,SAAAC,GACA,GAAApB,GAAArD,IAEA,IAAAyE,EAAA,MACA,IAAAzE,KAAAiI,KACA,MAEAjI,MAAAyT,QAAAzT,KAAAiI,KAAAwL,QACAzT,KAAA0tO,cAAAlmE,KAAAxnK,KAAAiI,KAAAysL,UAAA10L,KAAAiI,KAAA+0C,QAAA5W,KAAA,eACAvjC,KAAAQ,EAAA2qO,SAAA3qO,EAAA2qO,QAAAC,iBAAA5qO,EAAA4E,KAAAysL,UACArxL,EAAA2qO,QAAA,GAAAj7G,QAAAm7G,cAAAC,aAAA9qO,EAAA4E,OAGA5E,EAAA+qO,wBACA/qO,EAAA2qO,QAAAK,aAAAhrO,EAAA4E,KAAAqmO,WACAjrO,EAAA2qO,QAAApuB,WAAAv8M,EAAAoQ,UAEApQ,EAAAkrO,6BACAlrO,EAAAmrO,WACanrO,EAAAorO,aAIbhB,EAAAnxO,UAAAmyO,OAAA,WACAzuO,KAAAwuO,WACAxuO,KAAAguO,QAAAU,KAAA1uO,KAAAjC,GAAAqG,cAAA2P,cAAA,SAQA05N,EAAAnxO,UAAAkyO,SAGA,WACA,GAAAxuO,KAAAiI,UAGApF,KAAA7C,KAAAiI,KAAA0mO,WACA,OAAA11M,GAAA,EAAAxc,EAAAzc,KAAAiI,KAAA0mO,WAAA11M,EAAAxc,EAAApe,OAAA46B,IAKA,OAJA21M,GAAAnyN,EAAAwc,GACA41M,EAAA97G,OAAAm7G,cAAAU,EAAAn+N,MACAq+N,EAAAF,EAAAn7N,QACAs7N,EAAA,GAAAF,GAAAC,GACApyN,EAAA,EAAAC,EAAAiyN,EAAA5rC,QAAAtmL,EAAAC,EAAAte,OAAAqe,IAAA,CACA,GAAAg6M,GAAA/5M,EAAAD,EACAqyN,GAAA5sN,OAAAniB,KAAAguO,QAAAgB,eAAAtY,KAKA+W,EAAAnxO,UAAA2yO,wBAAA,SAAAC,GASA,OAPAC,KAAA,YACAC,MAAA,gBACAn6B,KAAA,cACApd,OAAA,iBACAw3C,KAAA,eAEAH,IAiBAzB,EAAAnxO,UAAAgzO,kBAOA,SAAAC,GAGA,OAFAtjB,GAAA,EACAqiB,EAAAtuO,KAAAguO,QAAgCgB,eAChC1wO,EAAAixO,EAAA,EAAAjxO,GAAA,EAAAA,IAAA,CACA,GAAAkxO,GAAAlB,EAAAmB,cAAAnxO,GACAmS,EAAA69N,EAAAoB,cAAApxO,EACA,UAAAkxO,GAAA,WAAA/+N,GACAw7M,IAGA,MAAAA,IAEAwhB,EAAAnxO,UAA2BqzO,sBAAA,SAAAnqO,GAC3B,GAAAupD,IAAAtiD,IAAA,EAAAD,KAAA,EAAAxD,MAAA,EAAAE,OAAA,EACA,IAAAlJ,KAAA4vO,IAAA,CACA,GAAAL,GAAA/pO,EAAA+pO,OACAtjB,EAAAjsN,KAAAsvO,kBAAAC,GAEAM,GADArqO,EAAAqqO,IACArqO,EAAAqqO,KACAX,EAAAlvO,KAAAyT,QAAAy7N,UAIA,IAHAlvO,KAAAyT,QAAAw4M,QAAAjsN,KAAAyT,QAAAw4M,WAAAjsN,KAAAyT,QAAAw4M,UAAAx7M,OACAy+N,EAAAlvO,KAAAyT,QAAAw4M,UAAAx7M,MAEAy+N,EAAA,CACA,GAAAt+N,GAAA5Q,KAAAivO,wBAAAC,EACA,IAAAt+N,EAAA,CACAA,IAAAu3B,QAAA,KAAA8jL,EAAA,IAAA9jL,QAAA,KAAAonM,EAAA,IAAApnM,QAAA,KAAA0nM,EAAA,GACA,IAAAC,GAAA9vO,KAAA4vO,IAAAG,eAAAn/N,EACAk/N,KACA/gL,EAAA+gL,KAKA,MAAA/gL,IAEA0+K,EAAAnxO,UAAA0zO,mBAAA,SAAAriL,GACA,cAAAA,EAAAkiL,IACA,KAEA7vO,KAAAguO,QAAAgB,eACApgF,SAAAjhG,EAAAkiL,IAAAliL,EAAA4hL,SAGA9B,EAAAnxO,UAAA2zO,wBAAA,SAAAtiL,GAGA,MAFA3tD,MAAAguO,QAAAgB,eACAU,cAAA/hL,EAAA4hL,SAAA,IAGA9B,EAAAnxO,UAAA4zO,yBAAA,SAAAviL,GAGA,MAFA3tD,MAAAguO,QAAAgB,eACAmB,eAAAxiL,EAAA4hL,SAAA,IAGA9B,EAAAnxO,UAA4B8zO,eAAU,WACtC,GAAAC,GAAmB,GAAAr1O,IAAgB,WAAAgF,KAAAjC,GAAAqG,cAAA2P,cAAA,iCACnC,WAAAq5N,IAAAiD,IAEA5C,EAAAnxO,UAAAg0O,gBAAA,SAAA9qO,GAQA,OANAmoD,SAAAnoD,EACAupD,YAAA/uD,KAAA2vO,sBAAAnqO,GACAzK,MAAAiF,KAAAgwO,mBAAAxqO,GACA+qO,WAAAvwO,KAAAiwO,wBAAAzqO,GACAgrO,YAAAxwO,KAAAkwO,yBAAA1qO,KAIAioO,EAAAnxO,UAAA8xO,sBAAA,WACAr7G,OAAAm7G,cAAA57K,OAAArhC,mBAAAjxB,KAAAguO,UAEAP,EAAAnxO,UAAAm0O,oBAAA,WACA,GAAAptO,GAAArD,IACA,IAAAA,KAAA8tO,UAAAjnB,UAAAxoN,OAAA,GACA,GAAAqyO,GAAA1wO,KAAAguO,QAAA2C,UACA3wO,MAAA4vO,IAAAc,EAAAE,0BACA79G,OAAAm7G,cAAA57K,OAAAzhC,YAAA6/M,EAAA,uBAAAlrO,GACA,GAAA8+B,GAAAjhC,EAAAitO,gBAAA9qO,EACA8+B,GAAAlpB,QAAA/X,EAAA+sO,iBACa/sO,EAAAyqO,UAAAviO,KAAA+4B,KAGb,GAAAtkC,KAAA+tO,SAAAlnB,UAAAxoN,OAAA,GACA,GAAAqyO,GAAA1wO,KAAAguO,QAAA2C,UACA3wO,MAAA4vO,IAAAc,EAAAE,0BACA79G,OAAAm7G,cAAA57K,OAAAzhC,YAAA6/M,EAAA,sBAAAlrO,GACA,GAAA8+B,GAAAjhC,EAAAitO,gBAAA9qO,EACanC,GAAA0qO,SAAAxiO,KAAA+4B,OAIbmpM,EAAAnxO,UAAAiyO,2BAAA,WACA,GAAAlrO,GAAArD,IACA+yH,QAAAm7G,cAAA57K,OAAmCzhC,YAAA7wB,KAAAguO,QAAyB,mBAC5D3qO,EAAAuqO,WAAAriO,MAAAuL,QAAA,gBACSzT,EAAAotO,wBAET19G,OAAAm7G,cAAA57K,OAAAzhC,YAAA7wB,KAAAguO,QAAA,iBAAArvN,GACStb,EAAAwqO,WAAAtiO,KAAAoT,KAETo0G,OAAAm7G,cAAA57K,OAAAzhC,YAAA7wB,KAAAguO,QAAA,oBACA,GAAA1pM,GACAusM,EAAAxtO,EAAA2qO,QAAAE,cAAA4C,eAAA,EACA,QAAAjuO,KAAAguO,EAAA,CACA,GAAAE,MACAC,IACA,WAAAH,EAAAhB,IAGA,OAFAvB,GAAAjrO,EAAA2qO,QAAAgB,eACAiC,EAAmC3C,EAAA4C,qBACnC5yO,EAAA,EAAAA,EAAA2yO,EAAA3yO,IACAyyO,EAAA/5N,KAAAs3N,EAAA1/E,SAAAiiF,EAAAhB,IAAAvxO,IACA0yO,EAAAh6N,KAAAs3N,EAAA6C,kBAAAN,EAAAhB,IAAAvxO,GAGAme,IACA3F,QAAA,SACA+4N,IAAAgB,EAAAhB,IACqBN,OAAAsB,EAAAtB,QAErB9yN,EAAA,kBAAAs0N,EACAt0N,EAAA,2BAAAu0N,EANA1sM,EAOA7nB,MAGA6nB,IACAxtB,QAAA,WACA+4N,IAAA,KACAN,OAAA,KACAwB,qBACAC,8BAGA3tO,GAAAsqO,YAAApiO,KAAA+4B,EACS,IAAA7nB,MAGTgxN,EAAgBj9N,aAChBC,KAAAzV,GAAA,UAAA2V,OACAC,SAAA,eACAE,SAAA,cACiB2O,gBAAIzkB,GAAA,wBAAA0kB,WAIrB+tN,EAAgBr8N,eAAa,mBACpBX,KAAOzV,GAAA,aACVyV,KAAAq6N,MAEN2C,EAAyB77N,gBACzB3J,OAAAwI,KAAwBzV,GAAO,QAC/B4yO,aAAwBn9N,KAAOzV,GAAA,SAC/B6yO,aAAyBp9N,KAAAzV,GAAO,SAChC2yO,cAAuBl9N,KAAOzV,GAAM,SACpC8yO,YAAsBr9N,KAAOzV,GAAM,SACnC+yO,WAAAt9N,KAAAzV,GAAA,UAECyyO,KC9PD2D,GAAApxO,WAAAuY,WAAA,WACA,GAAAC,GAAU9d,OAAgB+d,iBAC1BC,uBAAyBrc,QAAA,SAAAjC,EAAAue,GAAAve,EAAAse,UAAAC,IACzB,SAAAve,EAAAue,GAAA,OAAApd,KAAAod,KAAAnd,eAAAD,KAAAnB,EAAAmB,GAAAod,EAAApd,IACA,iBAAAnB,EAAAue,GAEA,QAAAC,KAAA5Y,KAAA6Y,YAAAze,EADAoe,EAAApe,EAAuBue,GAEvBve,EAAAkC,UAAA,OAAAqc,EAAAje,OAAAoe,OAAAH,IAAAC,EAAAtc,UAAAqc,EAAArc,UAAA,GAAAsc,QAGAy4N,GAAA,WACA,QAAAA,MAEC,MAAAA,MCVDC,IDmBa,SAAA13N,GAEb,QAAA23N,KACA,cAAA33N,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KAFAoxO,GAAAG,EAAA33N,IAKAy3N,IAKa,SAAAz3N,GAEb,QAAA43N,KACA,cAAA53N,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KAFAoxO,GAAAI,EAAA53N,IAK+By3N,IAElB,SAAAz3N,GAEb,QAAA63N,KACA,cAAA73N,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KAFAoxO,GAAAK,EAAA73N,IAK8By3N,IC5C9B,WACA,QAAAK,MAiBC,MAfDA,GAAgBlhO,aAChBC,KAAAzV,GAAA,SAAA2V,OACAyB,cACAo7N,IAEA13N,WACAg1N,IAEAl5O,SACA47O,QAKAkE,EAAAtgO,eAAA,qBACCsgO,MrViopDGC,GAAgC3xO,MAAQA,KAAKuY,WAAc,WAC3D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFg5N,GAAiC5xO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dy4N,GAAiC7xO,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IsV5opDpEo4N,GAAA,SAAAl4N,GtVsppDlC,QsVtopDHm4N,GAOCz3N,EAAMC,EAAQkc,EAAAkC,EAAYC,EAY1B48K,EAAAh7L,GAnBkB,GAAAnX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAChCqD,GAAAiX,SACCjX,EAAAkX,YAAeA,EACflX,EAAAozB,IAAMA,EACNpzB,EAAAs1B,SACAt1B,EAAAu1B,OACAv1B,EAAAmyM,iBAAsBA,EAjB/BnyM,EAAAmX,MACAnX,EAAAoxM,kBAA4C,MAC5CpxM,EAAAmxM,kBAAoB,OAkBnBnxM,EAAIqxL,UAAa,UACjB,IAAA9zK,GAAKvd,EAAYu1B,KAAK88K,uBAStB,OARAryM,GAAKqd,UAAUE,EAAMF,UAErBrd,EAAKsd,QAAAC,EAAcD,QACnBtd,EAAKghO,aAAa,EtVwopDZhhO,EsVvopDL8vM,eACA1N,KAAA,EACA2nB,UAAW,GACV4kB,YAAA,GACF3uO,EAnBDsuO,GAAmBI,EAEVn4N,GtV2ppDNm4N,EsVvopDWz1O,UAAG+H,SAAA,WAChBrE,KAAA20M,YtVyopDEo9B,EsVvopDHz1O,UAgDCq4M,SAAA,WA/CA,GAAItxM,GAACrD,IAGLA,MAAKqkO,aAAA,EtVsopDCrkO,KsVpopDLw1M,iBAAkBzC,qBAAC/yM,KAAA0gB,UAAA1gB,KAAA2gB,SAAAhG,UAAA,SAAA1S,GtVsopDV,IsVropDL,GAAJgqO,GAAe,EAAPh5M,EAAG,EAAAw5K,EAAAxqM,EAAAgxB,EAAAw5K,EAAAp0M,OAAA46B,IAAA,CACV,GAAAy5K,GAAUD,EAAIx5K,EACdg5M,IAAA/wM,SAAAwxK,EAAAhqF,OtVyopDQ,IsVpopDL,GADAwpH,MACJnjI,EAAe,EAAPtyF,EAAG,EAAAq8M,EAAA7wN,EAAAwU,EAAAq8M,EAAAz6N,OAAAoe,IAAA,CACV,GAAIi2L,GAAKomB,EAAGr8M,GACTisG,EAAMxnF,SAAAwxK,EAAAhqF,MAET3Z,IAAA,EtVoopDYmjI,EsVnopDNl7N,MACL+3F,IAAKA,EACL2Z,QACAypH,YAAa,IAAOzpH,EAAAupH,EAClBjwF,QAAA0wD,EAAA1wD,UAKJ3+I,EAAK6uO,WACL7uO,EAAK+uO,gBAAkBF,EAAKv0O,MAAA,EAAA0F,EAAA8vM,cAAAia,WAC5B/pN,EAAK8vM,cAAc1N,KAAA,EAGnBpiM,EAAI8vM,cAAY6+B,YAAAE,EAAA7zO,MtVgopDP,IsV/npDRg2L,IACAK,UAAW,WACX45C,UAAQ,GAAKjyO,OACb2gD,OAAO35C,EAAGmyM,iBAAkBjC,sBAC3B9/L,SAAA4+N,WAAAv8C,QAAA,uBAGFzB,GAAei6C,UAAAt3N,MAAA,mBtV+npDN,KsV/npDL,GAAI0F,GAAG,EAAAs8M,EAAA/wN,EAAAyU,EAAAs8M,EAAA36N,OAAAqe,IAAA,CACV,GAAAg2L,GAAUsmB,EAAAt8M,EACV23K,GAAAi6C,UAAAt3N,MAAA07L,EAAA1wD,QAAA06E,aAAAx7L,SAAAwxK,EAAAhqF,SAEDrlH,EAAKivO,aAAcj+C,EACnBhxL,EAAKghO,aAAI,EACPhhO,EAAAmX,IAAAhP,kBtVkopDDumO,EsV7npDOz1O,UAAU45M,mBAAuB,SAAWqkB,GACpDv6N,KAAA0gB,UAAOqwL,QAAAwpB,EAAA,GAAAxpB,QAAA/wM,KAAA2gB,QAAAowL,QAAAwpB,EAAA,GAAAxpB,SAIR/wM,KAAK0gB,UAAU65M,EAAY,GAAC34M,QAAQ,OACpC5hB,KAAK2gB,QAAK45M,EAAA,GAAA34M,QAA0B,OACpC5hB,KAAK44B,KAAAu9K,sBAAWn2M,KAAA0gB,UAAA1gB,KAAA2gB,SAChB3gB,KAAA20M,atV8npDEo9B,EsV3npDGz1O,UAAkBq6N,cAAQ,SAAAlxB,GAC/BzlM,KAAImzM,cAAa1N,KAASA,CAC1B,IAAI8sC,IAAU9sC,EAAS,GAAGzlM,KAAKmzM,cAAcia,UACzColB,EAACD,EAAkBvyO,KAAKmzM,cAAeia,SAC3CptN,MAAAoyO,gBAAApyO,KAAAkyO,SAAAv0O,MAAA40O,EAAAC,ItV6npDET,EsV1npDGz1O,UAAiBm2O,iBAAM,SAAkBx1O,GtV2npDxC,GsV1npDLA,EAAA8zO,mBAAuB9zO,EAAA8zO,kBAAK1yO,OAAqB,GACjD,GAAIq0O,GAAkBz1O,EAAA8zO,kBAAsB,GAAKr+N,aACjD1S,MAAA24B,OAAAgC,UAAA,0BAAA+3M,KAlHU,IAAAj2N,GAAAC,EAAAC,EAAgBC,EAAAC,EAAAC,EAAAC,CAAS,OtVgvpDlCg1N,GsV5vpDHH,ItV6vpDOl3O,OsV5vpDPM,GAAU,YACV4V,SAAU,qBACVE,SAAQ5W,EAAA,MtV6vpDGiX,QsV3vpDV,wDACA,wDACA,0EACA,0CACA,sHAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWmyN,GAoHZ,wCAAAp1N,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA2iI,GAAA,GAAAA,GAAA,IAAA3iI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA40L,SAAA50L,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA/hB,GAAA,mBAAAA,GAAA,oBAAA+hB,GAAAriB,UAADq3O,IApH6B10F,GAAA,GtVowpDzBs1F,GAAwC3yO,MAAQA,KAAKuY,WAAc,WACnE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFg6N,GAAyC5yO,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dy5N,GAAyC7yO,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuVtxpD7Do5N,GAAA,SAAAl5N,GvVgypDzC,QuVrwpDHm5N,GAOCz4N,EAAYC,EAAcV,EAAA4c,EA0B1BmC,EAAA48K,EAAAh7L,GAjCkB,GAAAnX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAChCqD,GAAAiX,SACCjX,EAAAkX,YAAqBA,EACrBlX,EAAAwW,QACAxW,EAAAozB,IAAIA,EACJpzB,EAAAu1B,OACAv1B,EAAAmyM,iBAAsBA,EA9B/BnyM,EAAAmX,MACAnX,EAAA2vO,mBAA2B,UAC3B3vO,EAAA4vO,kBAA2B,SAK3B5vO,EAAA6vO,kBAAqC,GACrC7vO,EAAAoxM,kBAA4C,MAC5CpxM,EAAAmxM,kBAAoB,OAwBnBnxM,EAAIqxL,UAAa,UACjB,IAAA9zK,GAAKvd,EAAYu1B,KAAK88K,uBACtBryM,GAAKqd,UAAUE,EAAMF,UAErBrd,EAAKsd,QAAAC,EAAcD,QACnBtd,EAAKghO,aAAa,EvV0wpDZhhO,EuVzwpDL8vM,eACA1N,KAAA,EACA2nB,UAAW,GACV4kB,YAAA,GAEF3uO,EAAK8vO,UAAA9vO,EAAiB2vO,mBAEtB3vO,EAAK+vO,eAAa,UAAU,WvVywpDtB/vO,EuVxwpDLwW,MAAK+xD,OAAAjxD,UAAkB,SAAW+3L,GAElCrvM,EAAKqoC,YAAAgnK,EAAkBhnK,YACrBroC,EAAAgwO,mBAIH,IAAAC,GAAKp5O,EAAkC,IAGvC,OAFAmJ,GAAKkwO,gCAA4BD,EAAmBxhP,iBACpDuR,EAAKmwO,0BAA2BF,EAAGl8O,evVswpD7BiM,EAAMowO,4BAA8BH,EAAmB96O,YuVrwpD7D6K,EAjCDsvO,GAAmBI,EAGVn5N,GvVsypDNm5N,EuVrwpDkBz2O,UAAG+H,SAAA,WACvBrE,KAAAqzO,mBvVuwpDEN,EuVlwpDcz2O,UAAU+2O,gBAAA,WAET,MAAhBrzO,KAAKkyO,WACLlyO,KAAKkyO,YACLlyO,KAAA20M,avVowpDCo+B,EuVhwpDiBz2O,UAAKq4M,SAAA,WAGxB30M,KAAIqkO,aAAK,EACRrkO,KAAA0rC,cAKA1rC,KAAKmzO,WAAAnzO,KAAkBgzO,mBACvBhzO,KAAA0zO,qBAEA1zO,KAAA2zO,sBvVgwpDCZ,EuV5vpDez2O,UAAas3O,0BAAA,SAAAlB,EAAAzqO,GAE9B,GAAG0B,GAAA,GAAAtN,MvV4vpDG,IuV3vpDLq2O,IAAc1yO,MAAAuzO,gCACd5pO,EAAA3J,KAAA6zO,yBAAAnB,EAAAzqO,OACA,IAAAyqO,IAAc1yO,MAAAwzO,0BACd7pO,EAAA3J,KAAA8zO,iCAAApB,EAAAzqO,OACA,IAAIyqO,IAAe1yO,MAAAyzO,4BAAA,CvV+vpDV,IuV9vpDL,GAAJ1Y,GAAe,EAAP9hM,EAAG,EAAAw5K,EAAAxqM,EAAAgxB,EAAAw5K,EAAAp0M,OAAA46B,IAAA,CACV,GAAAy5K,GAAUD,EAAIx5K,EACd8hM,IAAA75L,SAAAwxK,EAAAhqF,OAED/+G,EAAAqN,MAAA07N,EAAA3X,QvViwpDS,KuVhwpDL,GAAIt+M,GAAG,EAAAq8M,EAAA7wN,EAAAwU,EAAAq8M,EAAAz6N,OAAAoe,IAAA,CACV,GAAIi2L,GAAAomB,EAAar8M,GACjBu+M,EAAatoB,EAAAz1H,OAASg+I,YAAavoB,EAAQz1H,OAACg+I,YAAAvoB,EAAAz1H,OAAAlqE,IAC5CpJ,GAAAqN,MAAAgkN,EAAA95L,SAAAwxK,EAAAhqF,SAMF,MADA/+G,GAAOq0K,SAAO,mBACdr0K,GvVgwpDEopO,EuV7vpDez2O,UAAaw3O,iCAAA,SAAApB,EAAAzqO,GvV+vpDxB,IuV9vpDF,GAAJ0B,GAAe,GAAAtN,OAAP48B,EAAG,EAAA+/L,EAAA/wN,EAAAgxB,EAAA+/L,EAAA36N,OAAA46B,IAAA,CACV,GAAIy5K,GAAAsmB,EAAa//L,GACdiiM,EAASxoB,EAAIz1H,OAAKg+I,WvV+vpDZ,IuV9vpDRC,IAASl7N,MAAAwzO,0BAAAd,GvVkwpDD,IuV/vpDL,GAAJvX,GAAwBn7N,KAARwzO,0BAAAd,GAAAxX,GAARz+M,EAAI,EAAA2+M,EAAAD,EAAA1+M,EAAA2+M,EAAA/8N,OAAAoe,IAAA,CACX,GAAA4e,GAAW+/L,EAAQ3+M,EACnB9S,GAAAqN,MAAAqkB,EAAAt4B,KAAA4M,MAAAuxB,SAAAwxK,EAAAhqF,OAAAyyG,EAAA98N,WAGF,MAAAsL,IvViwpDEopO,EuV9vpDSz2O,UAAAu3O,yBAAA,SAAAnB,EAAAzqO,GvVgwpDL,IuV/vpDF,GAAJ3M,MAAQ29B,EAAG,EAAAoiM,EAAApzN,EAAAgxB,EAAAoiM,EAAAh9N,OAAA46B,IAAA,CACV,GAAIy5K,GAAA2oB,EAAapiM,GACbiiM,EAAUxoB,EAACz1H,OAAOg+I,YACnBK,EAASJ,IAAQl7N,MAAAuzO,gCAAAb,GAAA1yO,KAAAuzO,gCAAAb,GAAAxX,IACjBI,KAAWhgO,KACbA,EAAAggO,GAAA,GAEDhgO,EAAAggO,GAAAhgO,EAAAggO,GAAAp6L,SAAAwxK,EAAAhqF,OAGD,GAAA/+G,GAAY,GAAItN,MvV+vpDV,KuV9vpDL,GAAAg/B,KAAa//B,GACbqO,EAAAqN,MAAAqkB,EAAA//B,EAAA+/B,IAGD,OAAA1xB,IvV+vpDEopO,EuVltpDFz2O,UAAAo3O,mBAAA,WA1CA,GAAIrwO,GAACrD,IvV8vpDCA,MuV7vpDLw1M,iBAAIxC,mBAA2BhzM,KAAA0gB,UAAY1gB,KAAc2gB,QAAA3gB,KAAA0rC,aAAA/wB,UAAA,SAAA1S,GvVgwpDhD,IuV5vpDL,GADAyqO,GAAervO,EAAAqoC,YAAA+Z,cACnBwsL,EAAe,EAAPh5M,EAAG,EAAA86M,EAAA9rO,EAAAgxB,EAAA86M,EAAA11O,OAAA46B,IAAA,CACV,GAAAy5K,GAAUqhC,EAAI96M,EACdg5M,IAAA/wM,SAAAwxK,EAAAhqF,OvVgwpDQ,IuV3vpDL,GADAwpH,MACJnjI,EAAe,EAAPtyF,EAAG,EAAAu3N,EAAA/rO,EAAAwU,EAAAu3N,EAAA31O,OAAAoe,IAAA,CACV,GAAIi2L,GAAKshC,EAAGv3N,GACTisG,EAAMxnF,SAAAwxK,EAAAhqF,MAET3Z,IAAA,EvV2vpDYmjI,EuV1vpDNl7N,MACL+3F,IAAKA,EACL2Z,QACAypH,YAAU,IAAWzpH,EAAAupH,EACnBl/N,KAAA2/L,EAAAz1H,OAAAlqE,OAQJ,GAAAkhO,GAAoBvB,IAAArvO,GAAAowO,4BAAA,uBvVsvpDXpwO,GuVrvpDRivO,cACA59C,UAAW,WACX45C,UAAQjrO,EAAKuwO,0BAAiBlB,EAAqBzqO,GACnD+0C,OAAO35C,EAAEmyM,iBAAAjC,sBvVsvpDG9/L,SuVpvpDX4+N,WAAYv8C,OAAAzyL,EAAA+vO,eACZvW,WAAQoX,EACRh3J,OAAAy1J,IAIArvO,EAAA6wO,8BAAAhC,MvVuvpDDa,EuV1spDFz2O,UAAAq3O,kBAAA,WAzCA,GAAItwO,GAACrD,IvVqvpDCA,MuVnvpDLw1M,iBAAkBvC,kBAACjzM,KAAA0gB,UAAA1gB,KAAA2gB,QAAA3gB,KAAA0rC,aAAA/wB,UAAA,SAAA1S,GvVqvpDV,IuVpvpDL,GAAJgqO,GAAe,EAAPh5M,EAAG,EAAAk7M,EAAAlsO,EAAAgxB,EAAAk7M,EAAA91O,OAAA46B,IAAA,CACV,GAAAy5K,GAAUyhC,EAAIl7M,EACdg5M,IAAA/wM,SAAAwxK,EAAAhqF,OvVwvpDQ,IuVnvpDL,GADAwpH,MACJnjI,EAAe,EAAPtyF,EAAG,EAAA23N,EAAAnsO,EAAAwU,EAAA23N,EAAA/1O,OAAAoe,IAAA,CACV,GAAIi2L,GAAK0hC,EAAG33N,GACTisG,EAAMxnF,SAAAwxK,EAAAhqF,MAET3Z,IAAA,EvVmvpDYmjI,EuVlvpDNl7N,MACL+3F,IAAKA,EACL2Z,QACAypH,YAAc,IAAKzpH,EAAAupH,EACjBl/N,KAAA2/L,EAAA31H,KAAAhqE,OvVqvpDK,GuVhvpDRshL,IACAK,UAAW,WACX45C,UAAQ,GAAKjyO,OACb2gD,OAAO35C,EAAEmyM,iBAAAjC,sBvVivpDG9/L,SuV/upDX4+N,WAAav8C,OAAAzyL,EAAS+vO,eACtBiB,YAAY,UACZp3J,OAAA55E,EAAAqoC,YAAA+Z,eAIF4uI,GAAei6C,UAAAt3N,MAAI,OAAQ,SvVgvpDlB,KuVhvpDL,GAAI0F,GAAG,EAAAC,EAAA1U,EAAAtK,MAAA,EAAA0F,EAAA6vO,mBAAAx2N,EAAAC,EAAAte,OAAAqe,IAAA,CACV,GAAAg2L,GAAU/1L,EAAAD,EACV23K,GAAAi6C,UAAAt3N,MAAA07L,EAAA31H,KAAAhqE,KAAAmuB,SAAAwxK,EAAAhqF,SAEDrlH,EAAKivO,aAAAj+C,EACHhxL,EAAA6wO,8BAAAhC,MvVmvpDDa,EuV/upDcz2O,UAAS43O,8BAAA,SAAAhC,GACzBlyO,KAAKkyO,WACLlyO,KAAKoyO,gBAAkBF,EAAKv0O,MAAA,EAAAqC,KAAAmzM,cAAAia,WAC5BptN,KAAKmzM,cAAc1N,KAAA,EAEnBzlM,KAAKmzM,cAAc6+B,YAAME,EAAA7zO,OACzB2B,KAAKqkO,aAAI,EACTrkO,KAAAwa,IAAAhP,gBvVgvpDEunO,EuV5upDiBz2O,UAAU45M,mBAAoB,SAAUqkB,GAC1Dv6N,KAAA0gB,UAAOqwL,QAAAwpB,EAAA,GAAAxpB,QAAA/wM,KAAA2gB,QAAAowL,QAAAwpB,EAAA,GAAAxpB,SAIR/wM,KAAK0gB,UAAU65M,EAAY,GAAC34M,QAAQ,OACpC5hB,KAAK2gB,QAAK45M,EAAA,GAAA34M,QAA0B,OACpC5hB,KAAK44B,KAAAu9K,sBAAWn2M,KAAA0gB,UAAA1gB,KAAA2gB,SAChB3gB,KAAA20M,avV6upDEo+B,EuV1upDiBz2O,UAAAg4O,kBAAA,SAAA7lN,GACnBzuB,KAAKmzO,UAAW1kN,EAChBzuB,KAAA20M,YvV4upDEo+B,EuVzupDiBz2O,UAAWq6N,cAAC,SAAAlxB,GAC/BzlM,KAAImzM,cAAa1N,KAASA,CAC1B,IAAI8sC,IAAU9sC,EAAS,GAAGzlM,KAAKmzM,cAAcia,UACzColB,EAACD,EAAkBvyO,KAAKmzM,cAAeia,SAC3CptN,MAAAoyO,gBAAApyO,KAAAkyO,SAAAv0O,MAAA40O,EAAAC,GAhRW,IAAA/1N,GAAAC,EAAAC,EAAAC,EAAAC,EAAuBC,EAAAC,CAAS,OvV4/pDzCg2N,GuVvgqDHH,IvVwgqDOl4O,OuVvgqDPM,GAAU,YACV4V,SAAU,qBACVE,SAAQ5W,EAAA,MvVwgqDGiX,QuVtgqDV,wDACA,wDACA,0EACA,sHAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWmzN,GAiRZ,wCAAAp2N,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA0iI,GAAA,GAAAA,GAAA,IAAA1iI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA40L,SAAA50L,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA/hB,GAAA,mBAAAA,GAAA,oBAAA+hB,GAAAriB,UAADq4O,IAjRoC11F,GAAA,GvV+gqDhCk3F,GAAyBv0O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxF,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GwVzhqD/Do7N,KACEtxL,KAAM,GAAAxQ,UAAco/L,KACrB5uL,KAAA,eAAAxQ,UAAAogM,KAwBF2B,GAAA,WAAkC,QAACC,MAAA,MxVuhqD/BA,GwV7iqDHH,IxV8iqDO75O,OwV7iqDPM,GAAS,WxV8iqDEqX,SwV5iqDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAg9E,IACX/sE,GAAA,YACAwoC,GACAjT,GACAgtB,GACAmB,GACAmmB,IxV+iqDUl/N,cwV5iqDV0/N,GACAgB,IxV+iqDUh9N,WwV5iqDV47L,OAEgCgjC,MxVojqD9BC,GAAuC30O,MAAQA,KAAKuY,WAAc,WAClE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFg8N,GAAwC50O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACvG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dy7N,GAAwC70O,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACjF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IyVtlqD7Do7N,GAAA,SAAAl7N,GzVgmqDzC,QyVtkqDHm7N,GAKCz6N,EAAYC,EAAci7L,EA8B1B58K,EAAApe,GAnCkB,GAAAnX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAChCqD,GAAAiX,SACAjX,EAAAkX,cACClX,EAAAmyM,iBAAiBA,EACjBnyM,EAAAu1B,OAtBTv1B,EAAAmX,MACAnX,EAAAoxM,kBAA4C,MAC5CpxM,EAAAmxM,kBAAoB,OAuBnBnxM,EAAIqxL,UAAa,UACjB,IAAA9zK,GAAKvd,EAAYu1B,KAAK88K,uBA2BtB,OA1BAryM,GAAKqd,UAAUE,EAAMF,UAErBrd,EAAKsd,QAAAC,EAAgBD,QACrBtd,EAAK2xO,oBACL3xO,EAAK4xO,gBAEL5xO,EAAK6xO,qBACL7xO,EAAK8xO,sBACL9xO,EAAK+xO,wBACL/xO,EAAKgyO,uBACLhyO,EAAKiyO,yBACLjyO,EAAKkyO,kBACLlyO,EAAKmyO,oBAELnyO,EAAKghO,aAAA,EzVskqDChhO,EyVrkqDLoyO,wBACAC,EAAK,cACLp6M,EAAK,aACLK,EAAK,YACLS,EAAK,YACLkB,EAAK,aACLI,EAAK,gBACLE,EAAK,SACLK,EAAK,eACLC,EAAK,YACJW,EAAA,iBACFx7B,EAnCDsxO,GAAmBI,EAEXn7N,GzVymqDLm7N,EyVrkqDcz4O,UAAA+H,SAAA,WAChBrE,KAAA20M,YzVukqDEogC,EyVpkqDcz4O,UAAAq5O,kCAAA,SAAA1pB,GzVskqDV,IyVrkqDF,GAAJtiN,MAAQsvB,EAAG,EAAA28M,EAAA3pB,EAAAhzL,EAAA28M,EAAAv3O,OAAA46B,IAAA,CACV,GAAIy5K,GAAMkjC,EAAY38M,GAClB48M,EAAAnjC,EAGDojC,GAAe,CzVukqDT,IyVtkqDRD,EAAAlhJ,SACAmhJ,GAAA,GAMAD,EAAIppM,MzVgkqDQ,IyV/jqDX,GAAIhzB,KAAAo8N,GAAOppM,UACuB,KAAjCopM,EAAcppM,MAAGhzB,GAAOk7E,QAAgB,OAAAkhJ,EAAAppM,MAAAhzB,GAAAk7E,SACxCmhJ,EAAAD,EAAAppM,MAAAhzB,GAAAk7E,OAKFmhJ,KACAnsO,EAAA+oM,EAAAvzL,QAAA,GAIF,MAAAxV,IzV+jqDEorO,EyVxgqDFz4O,UAAAq4M,SAAA,SAAAohC,GArDgB,GAAA1yO,GAAArD,SAEZ,KAAA+1O,OAA4C,EAChD,IAAIC,GAAuC,KACvCC,EAA+C,KAC/CC,EAAoB,IAExBl2O,MAAGqkO,aAAc,EAGhB0R,IACAC,EAAuCh2O,KAAG21O,kCAAK31O,KAAkCm1O,oBACjFc,EAA0Cj2O,KAAA21O,kCAAuC31O,KAAAq1O,qBACjFa,EAAAl2O,KAAA21O,kCAAA31O,KAAAu1O,iBzV4jqDKv1O,KyVvjqDLw1M,iBAAKtD,2BAAwBlyM,KAAA0gB,UAA2B1gB,KAAA2gB,QAAY3gB,KAASy0M,mBAAA95L,UAAA,SAAA1S,GAC7E5E,EAAK2xO,iBAAe3xO,EAAK8yO,sBAAyBluO,EAAAm9N,YAAkBxvB,SACpEvyM,EAAK4xO,aAAA5xO,EAAoB+yO,oBAAKnuO,EAAAouO,UAA8BzgC,SAG5DvyM,EAAI6xO,kBAAqB7xO,EAAKizO,yBAAAruO,EAA+BsuO,eAAK3gC,QAClE,IAAIu/B,GAAA9xO,EAAyBmzO,+BAAQvuO,EAAAwuO,gBAAuCxuO,EAAAm9N,YAAsBsR,aAC9FC,EAA2BtzO,EAACuzO,kCAAkC3uO,EAAAwuO,gBAAsBxuO,EAAUsuO,eAAaG,aAE5GG,EAAcxzO,EAAAyzO,6BAAA7uO,EAAAwuO,gBAAAxuO,EAAAouO,UAAAK,YzVqjqDR,IyVpjqDRX,EAAe,CzVqjqDH,IyVrjqDR,GAAI98M,GAAG,EAAAxc,EAAA04N,EAAAltO,KAAAgxB,EAAAxc,EAAApe,OAAA46B,IAAA,CACV,GAAIy5K,GAAMj2L,EAAGwc,EACby5K,GAAA/9G,OAAA+9G,EAAAvzL,OAAAuzL,EAAAvzL,QAAA62N,GzVujqDW,IyVtjqDR,GAAIt5N,GAAG,EAAAC,EAAAg6N,EAAA1uO,KAAAyU,EAAAC,EAAAte,OAAAqe,IAAA,CACV,GAAIg2L,GAAM/1L,EAAGD,EACbg2L,GAAA/9G,OAAA+9G,EAAAvzL,OAAAuzL,EAAAvzL,QAAA82N,GzVwjqDW,IyVvjqDR,GAAIr5N,GAAG,EAAAC,EAAAg6N,EAAA5uO,KAAA2U,EAAAC,EAAAxe,OAAAue,IAAA,CACV,GAAI81L,GAAM71L,EAAGD,EACb81L,GAAA/9G,OAAA+9G,EAAAvzL,OAAAuzL,EAAAvzL,QAAA+2N,IAKF7yO,EAAK8xO,mBAAoBA,EAAGltO,KAE5B5E,EAAK+xO,qBAAsBD,EAAAzhL,OAC3BrwD,EAAKgyO,oBAAqBsB,EAAG1uO,KAE7B5E,EAAKiyO,sBAAiBqB,EAA0BjjL,OAChDrwD,EAAKkyO,eAAgBsB,EAAG5uO,KAExB5E,EAAKmyO,iBAAmBqB,EAACnjL,OAEzBrwD,EAAKghO,aAAI,EACPhhO,EAAAmX,IAAAhP,kBzVojqDDupO,EyV/iqDcz4O,UAAA65O,sBAAA,SAAAY,GzVkjqDV,IyV9iqDF,GADAptO,MACJoxN,EAAe,EAAP9hM,EAAG,EAAA+9M,EAAAD,EAAA99M,EAAA+9M,EAAA34O,OAAA46B,IAAA,CACV,GAAIy5K,GAAKskC,EAAY/9M,GACrByvF,EAAUxnF,SAAUwxK,EAAAhqF,MAAA,GACpBqyG,IAAaryG,CAEb,IAAAuuH,GAAYj3O,KAAAy1O,uBAAA/iC,EAAA0yB,YzV8iqDHz7N,GyV7iqDRqN,MACAjE,KAAK2/L,EAAEwkC,iBACPxuH,QACAuuH,UAAUA,GAAI,GACdE,WAAW,GACThF,YAAA,IzVgjqDE,GyV3iqDLpX,EAAe,EzV4iqDN,IyV5iqDL,GAAIt+M,GAAG,EAAA26N,EAAAztO,EAAA8S,EAAA26N,EAAA/4O,OAAAoe,IAAA,CACV,GAAIi2L,GAAA0kC,EAAc36N,EAClBi2L,GAAAy/B,YAAA,IAAAz/B,EAAAhqF,MAAAqyG,EzV+iqDIpxN,EyV1iqDLqoJ,KAAQ,SAAUlvI,EAACnK,GACjB,MAAAA,GAAA+vG,MAAA5lG,EAAA4lG,OzV4iqDG,KyVviqDL,GAAIpqH,GAAA,EAAMA,EAAGqL,EAAAtL,OAAgBC,IAAA,CAC7B,GAAA+4O,GAAUhmD,GAAmBC,eAAWhzL,EAAQ,GAAK+yL,GAAcC,cAAgBjzL,OACnFsL,GAAArL,GAAA64O,WAAA,IAAAn3O,KAAAiwJ,MAAAonF,EAAA,MAAAr3O,KAAAiwJ,MAAAonF,EAAA,MAAAr3O,KAAAiwJ,MAAAonF,EAAA,MAGD,MAAA1tO,IzVwiqDEorO,EyVriqDcz4O,UAAA2zJ,MAAA,SAAA3xJ,EAAAg5O,GAChB,GAAG3tO,GAAG,EzVyiqDA,KyVxiqDLrL,IACAqL,EAAArL,EAAAuiB,SAAA,KAEAlX,EAAStL,OAAMi5O,GACf3tO,EAAA,IAAAA,CAED,OAAAA,IzVuiqDEorO,EyVniqDcz4O,UAAA85O,oBAAA,SAAAmB,GzVsiqDV,IyVliqDF,GADA5tO,MACJoxN,EAAe,EAAP9hM,EAAG,EAAAu+M,EAAAD,EAAAt+M,EAAAu+M,EAAAn5O,OAAA46B,IAAA,CACV,GAAIy5K,GAAK8kC,EAAYv+M,GACrByvF,EAAUxnF,SAAUwxK,EAAAhqF,MAAA,GAEpBqyG,IAAYryG,EzVkiqDH/+G,EyVjiqDRqN,MACAjE,KAAK2/L,EAAE+kC,eACP/uH,QACEypH,YAAA,IzVoiqDE,GyV/hqDLpX,EAAe,EzVgiqDN,IyVhiqDL,GAAIt+M,GAAG,EAAAi7N,EAAA/tO,EAAA8S,EAAAi7N,EAAAr5O,OAAAoe,IAAA,CACV,GAAIi2L,GAAAglC,EAAcj7N,EAClBi2L,GAAAy/B,YAAA,IAAAz/B,EAAAhqF,MAAAqyG,EASF,MzV0hqDMpxN,GyV9hqDLqoJ,KAAQ,SAAUlvI,EAACnK,GACjB,MAAAA,GAAA+vG,MAAA5lG,EAAA4lG,QAGH/+G,GzV+hqDEorO,EyV3hqDcz4O,UAAAg6O,yBAAA,SAAAqB,GzV8hqDV,IyV1hqDF,GADAhuO,MACJoxN,EAAe,EAAP9hM,EAAG,EAAA2+M,EAAAD,EAAA1+M,EAAA2+M,EAAAv5O,OAAA46B,IAAA,CACV,GAAIy5K,GAAKklC,EAAgB3+M,GACzByvF,EAAUxnF,SAAUwxK,EAAAhqF,MAAA,GAEpBqyG,IAAYryG,EzV0hqDH/+G,EyVzhqDRqN,MACAjE,KAAK2/L,EAAEmlC,oBACPnvH,QACEypH,YAAA,IzV4hqDE,GyVvhqDLpX,EAAe,EzVwhqDN,IyVxhqDL,GAAIt+M,GAAG,EAAAq7N,EAAAnuO,EAAA8S,EAAAq7N,EAAAz5O,OAAAoe,IAAA,CACV,GAAIi2L,GAAAolC,EAAcr7N,EAClBi2L,GAAAy/B,YAAA,IAAAz/B,EAAAhqF,MAAAqyG,EASF,MzVkhqDMpxN,GyVthqDLqoJ,KAAQ,SAAUlvI,EAACnK,GACjB,MAAAA,GAAA+vG,MAAA5lG,EAAA4lG,QAGH/+G,GzVuhqDEorO,EyVphqDWz4O,UAAAy7O,iDAAA,SAAAC,GzV+hqDP,IyVnhqDF,GAXHruO,IACA1B,KAAM,GAAE5L,OACPq3D,OAAA,GAAAr3D,QAID47O,GACAhwO,KAAK,GAAE5L,OACP8iB,MAAMnf,KAAKua,YAAAmE,UAAA,0CACXsjK,MAAM,EACLrtF,QAAA,GACM17D,EAAG,EAAAi/M,EAAAF,EAAA/+M,EAAAi/M,EAAA75O,OAAA46B,IAAA,CACV,GAAAy5K,GAAAwlC,EAAsBj/M,EACtBg/M,GAAOhwO,KAAO+O,KAAKkqB,SAAAwxK,EAAMhqF,MAAM,KAC/B/+G,EAAA+pD,OAAA18C,KAAAm6K,GAAAruK,EAAAiuL,KAAA2B,EAAAE,MAAAzZ,eAID,MADAxvL,GAAO1B,KAAA+O,KAAOihO,GACdtuO,GzVohqDEorO,EyVhhqDgBz4O,UAAAk6O,+BAAA,SAAiDwB,EAAgBG,GzVkhqD7E,IyV/gqDF,GAAJxuO,GAAuB3J,KAAA+3O,iDAAAC,GAAf/+M,EAAA,EAAAm/M,EAAWD,EAAAl/M,EAAAm/M,EAAA/5O,OAAA46B,IAAA,CzVqhqDT,IyV/gqDL,GALAo/M,GAAWD,EAAAn/M,GACdq/M,GACArwO,KAAK,GAAE5L,OACN8iB,MAAAk5N,EAAAnB,kBAEMz6N,EAAG,EAAAC,EAAA27N,EAAArgJ,QAAAv7E,EAAAC,EAAAre,OAAAoe,IAAA,CACV,GAAAi2L,GAASh2L,EAAID,EACb67N,GAAArwO,KAAA+O,KAAAkqB,SAAAwxK,EAAAhqF,MAAA,KAGD/+G,EAAA1B,KAAA+O,KAAAshO,GAGD,MAAA3uO,IzV+gqDEorO,EyV3gqDgBz4O,UAAAs6O,kCAAgD,SAACoB,EAAgBG,GzV6gqD7E,IyV1gqDF,GAAJxuO,GAAuB3J,KAAA+3O,iDAAAC,GAAf/+M,EAAA,EAAAs/M,EAAWJ,EAAAl/M,EAAAs/M,EAAAl6O,OAAA46B,IAAA,CzVghqDT,IyV1gqDL,GALAo/M,GAAWE,EAAAt/M,GACdq/M,GACArwO,KAAK,GAAE5L,OACN8iB,MAAAk5N,EAAAR,qBAEMp7N,EAAG,EAAAC,EAAA27N,EAAArgJ,QAAAv7E,EAAAC,EAAAre,OAAAoe,IAAA,CACV,GAAAi2L,GAASh2L,EAAID,EACb67N,GAAArwO,KAAA+O,KAAAkqB,SAAAwxK,EAAAhqF,MAAA,KAGD/+G,EAAA1B,KAAA+O,KAAAshO,GAGD,MAAA3uO,IzV0gqDEorO,EyVtgqDgBz4O,UAAAw6O,6BAAA,SAAiDkB,EAAgBG,GzVwgqD7E,IyVrgqDF,GAAJxuO,GAAuB3J,KAAA+3O,iDAAAC,GAAf/+M,EAAA,EAAAu/M,EAAWL,EAAAl/M,EAAAu/M,EAAAn6O,OAAA46B,IAAA,CzV2gqDT,IyVrgqDL,GALAo/M,GAAWG,EAAAv/M,GACdq/M,GACArwO,KAAK,GAAE5L,OACN8iB,MAAAk5N,EAAAZ,gBAEMh7N,EAAG,EAAAC,EAAA27N,EAAArgJ,QAAAv7E,EAAAC,EAAAre,OAAAoe,IAAA,CACV,GAAAi2L,GAASh2L,EAAID,EACb67N,GAAArwO,KAAA+O,KAAAkqB,SAAAwxK,EAAAhqF,MAAA,KAGD/+G,EAAA1B,KAAA+O,KAAAshO,GAGD,MAAA3uO,IzVqgqDEorO,EyVjgqDiBz4O,UAAU45M,mBAAoB,SAAUqkB,GAC1Dv6N,KAAA0gB,UAAOqwL,QAAAwpB,EAAA,GAAAxpB,QAAA/wM,KAAA2gB,QAAAowL,QAAAwpB,EAAA,GAAAxpB,SAIR/wM,KAAK0gB,UAAU65M,EAAY,GAAC34M,QAAQ,OACpC5hB,KAAK2gB,QAAK45M,EAAA,GAAA34M,QAA0B,OACpC5hB,KAAK44B,KAAAu9K,sBAAen2M,KAAA0gB,UAAA1gB,KAAA2gB,SACpB3gB,KAAA20M,UAAA,KzVkgqDEogC,EyV9/pDMz4O,UAAqBw4M,oBAAa,SAAA5iB,GACzClyL,KAAAy0M,mBAAOviB,IAIRlyL,KAAKy0M,kBAAeviB,EACpBlyL,KAAA20M,UAAA,IAtXW,IAAAl4L,GAAAC,EAAAC,EAAAC,EAAAC,CAAgC,OzVs3qDzCk4N,GyV93qDHH,IzV+3qDOl6O,OyV93qDPM,GAAU,YACV4V,SAAU,4BACVE,SAAQ5W,EAAA,MzV+3qDGiX,QyV73qDV,yDAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWm1N,GAuXZ,wCAAAp4N,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA+0L,SAAA/0L,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2rK,GAAA,GAAAA,GAAA,IAAA3rK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,UAADq6O,IAvXoC13F,GAAA,GzVs4qDhCo7F,GAAgCz4O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G0Vz5qD/Ds/N,KACCx1L,KAAA,GAAAxQ,UAAAoiM,KAoBF6D,GAAA,WAAyC,QAACC,MAAA,M1Vu5qDtCA,G0Vz6qDHH,I1V06qDO/9O,O0Vz6qDPM,GAAS,W1V06qDEqX,S0Vx6qDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAkhF,IACXjxE,GAAA,YACAwoC,GACAjT,I1V26qDU5qL,c0Vx6qDV0iO,I1V26qDUh/N,W0Vx6qDV47L,OAEuCknC,M1Vg7qDrCC,GAAqC74O,MAAQA,KAAKuY,WAAc,WAChE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFkgO,GAAsC94O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D2/N,GAAsC/4O,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC/E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2Vz8qD/Ds/N,GAAA,SAAAp/N,G3Vk9qDvC,Q2V57qDHq/N,GAKC3+N,EAAMC,EAAQi7L,EAsBd58K,EAAApe,GA3BkB,GAAAnX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IA2BvC,OA1BOqD,GAAAiX,SACAjX,EAAAkX,cACClX,EAAAmyM,iBAAiBA,EACjBnyM,EAAAu1B,OAzBTv1B,EAAAmX,MACAnX,EAAA61O,oBAAyB,IA2BxB71O,EAAK4mO,eAAA,UACL5mO,EAAK81O,sBAAyBlxO,QAASyrD,WACvCrwD,EAAK+1O,sBAAwBnxO,QAAKyrD,WAElCrwD,EAAKg2O,yBAAoB,EACzBh2O,EAAK6mO,aAAA,KACL7mO,EAAK8mO,wBAAsB,KAC3B9mO,EAAKi2O,qBAAA,EACLj2O,EAAKs0N,0BAA4B,GAAAj9D,K3V67qD3Br3J,E2V57qDLk2O,2BACA9zC,KAAA,EACC2nB,UAAA,IAGF/pN,EAAKm2O,2BAA8BvxO,QAASyrD,WAC5CrwD,EAAKo2O,2BAA6BxxO,QAAAyrD,WAElCrwD,EAAK00N,sBAAc,KACnB10N,EAAKq2O,UAAA,EACLr2O,EAAKs2O,gBAAWxtO,YAAS,iBAAA9I,GAAAu2O,cAAAv2O,EAAA61O,qB3V27qDnB71O,EAAMuvN,SAAW1D,G2V17qDvB7rN,EA3BDw1O,GAAmBI,EAEXr/N,G3Vs9qDLq/N,E2V17qDc38O,UAAA+H,SAAA,WAChBrE,KAAA20M,Y3V47qDEskC,E2Vz7qDM38O,UAAiBgI,YAAA,WACxBtE,KAAA25O,kBACAvtO,cAAKpM,KAAA25O,iBACL35O,KAAA25O,gBAAA,O3V47qDCV,E2Vx7qDG38O,UAAuBq4M,SAAQ,WACpC30M,KAAKm5O,sBAAwBlxO,QAASyrD,WAEtC1zD,KAAIo5O,sBAAsBnxO,QAAAyrD,U3Vw7qDpB,K2Vv7qDL,GAAKp1D,GAAA,EAAAA,EAAA,GAAAA,IACL0B,KAAKm5O,qBAAqBzlL,OAAO18C,KAAK,MAAQ,GAAK1Y,GAAK,QACxD0B,KAAAo5O,qBAAA1lL,OAAA18C,KAAA,SAAA1Y,GAAA,O3Vy7qDK0B,M2Vt7qDLm5O,qBAAWlxO,KAAA+O,MACX/O,KAAKjI,KAAE65O,oBAAgB,IACrB16N,MAAA,kBAGH,IAAI26N,GAAC95O,KAAqB65O,oBAAU,G3Vs7qD9B75O,M2Vr7qDLo5O,qBAAoBnxO,KAAA+O,MACpB/O,KAAK6xO,EACH36N,MAAA,mBAGHnf,KAAK+5O,mBACL/5O,KAAAwa,IAAAhP,gB3Vs7qDEytO,E2Vn7qDe38O,UAAAs9O,WAAA,WACjB55O,KAAK05O,YACL15O,KAAGg6O,qBACFh6O,KAAK05O,UAAA,IAAkB,GACvB15O,KAAA+5O,mBAED/5O,KAAKi6O,2BACLj6O,KAAAwa,IAAAhP,gB3Vq7qDEytO,E2Vz5qDF38O,UAAA09O,mBAAA,WAzBA,GAAG32O,GAAMrD,I3Vo7qDEA,M2Vn7qDNm5O,sBACAn5O,KAAKm5O,qBAAqBlxO,MACa,GAAvCjI,KAAKm5O,qBAAqBlxO,KAAK5J,QACY,GAA3C2B,KAAKm5O,qBAAqBlxO,KAAK,GAAAA,KAAM5J,QACE,GAAvC2B,KAAKo5O,qBAAqBnxO,KAAK5J,QAC5B,GAAP2B,KAAOo5O,qBAAAnxO,KAAA,GAAAA,KAAA5J,Q3Vs7qDF2B,K2Vl7qDLw1M,iBAAQpC,+BAAqBz4L,UAAA,SAAA1S,G3Vm7qDpB,G2Vj7qDR5E,EAAIq2O,UAAU,IAAK,G3Vo7qDP,I2Vl7qDR,GADAQ,GAAA72O,EAAgB+1O,qBAAEnxO,KAAA,GAAAA,KAAAtK,QACtBw8O,EAAa,EAAJlhN,EAAA,EAAAmhN,EAAAF,EAAAjhN,EAAAmhN,EAAA/7O,OAAA46B,IAAA,CAERkhN,GADAC,EAAkBnhN,GAGnB51B,EAAAg3O,eAAAh3O,EAAA81O,qBAAAp2O,KAAAoL,KAAAgsO,EAAA,KAGD92O,EAAKg2O,yBAAoBpxO,EAAAqyO,YAAsB,EAAKryO,EAAAqyO,YAAA,EAEpDj3O,EAAKg3O,eAAIh3O,EAAe+1O,qBAAA/1O,EAAAg2O,0BACtBh2O,EAAAmX,IAAAhP,kB3Vm7qDDytO,E2Vr5qDF38O,UAAA29O,yBAAA,WA1BA,GAAG52O,GAAMrD,I3Vi7qDEA,M2Vh7qDNw5O,2BACAx5O,KAAK+3N,uBACL/3N,KAAKw5O,0BAA0BvxO,MACa,GAA5CjI,KAAKw5O,0BAA0BvxO,KAAK5J,QACY,GAAhD2B,KAAKw5O,0BAA0BvxO,KAAK,GAAAA,KAAM5J,QACE,GAA5C2B,KAAKy5O,0BAA0BxxO,KAAK5J,QACjC,GAAP2B,KAAOy5O,0BAAAxxO,KAAA,GAAAA,KAAA5J,Q3Vm7qDF2B,K2V/6qDLw1M,iBAAQnC,2BAAqBrzM,KAAA+3N,sBAAA3E,aAAAz4M,UAAA,SAAA1S,G3Vg7qDpB,G2V96qDR5E,EAAIq2O,UAAU,IAAK,G3Vi7qDP,I2V/6qDR,GADAQ,GAAA72O,EAAgBo2O,0BAAExxO,KAAA,GAAAA,KAAAtK,QACtBw8O,EAAa,EAAJlhN,EAAA,EAAAshN,EAAAL,EAAAjhN,EAAAshN,EAAAl8O,OAAA46B,IAAA,CAERkhN,GADAI,EAAkBthN,GAGnB51B,EAAAg3O,eAAAh3O,EAAAm2O,0BAAAz2O,KAAAoL,KAAAgsO,EAAA,KAGD,GAAAK,GAAmBvyO,EAACqyO,YAAK,EAAAryO,EAAAqyO,YAA2B,CAEpDj3O,GAAKg3O,eAAIh3O,EAAeo2O,0BAAAe,GACtBn3O,EAAAmX,IAAAhP,kB3Vg7qDDytO,E2V56qDG38O,UAAAm+O,uBAA6C,WAClDz6O,KAAKw5O,2BAA6BvxO,QAASyrD,WAE3C1zD,KAAIy5O,2BAAsBxxO,QAAAyrD,U3V46qDpB,K2V36qDL,GAAKp1D,GAAA,EAAAA,EAAA,GAAAA,IACL0B,KAAKw5O,0BAA0B9lL,OAAO18C,KAAK,MAAQ,GAAK1Y,GAAK,QAC7D0B,KAAAy5O,0BAAA/lL,OAAA18C,KAAA,SAAA1Y,GAAA,O3V66qDK0B,M2V16qDLw5O,0BAAWvxO,KAAoB+O,MAC/B/O,KAAKjI,KAAE65O,oBAAgB,IACrB16N,MAAA,kBAGH,IAAI26N,GAAC95O,KAAA65O,oBAAoC,G3V06qDnC75O,M2Vz6qDLy5O,0BAAoBxxO,KAAA+O,MACpB/O,KAAK6xO,EACH36N,MAAA,mBAGHnf,KAAAwa,IAAAhP,gB3V06qDEytO,E2Vv6qDY38O,UAAc+9O,eAAK,SAAA3J,EAAA/0O,GACjC,GAAAu+O,GAAaxJ,EAAGzoO,KAAA,GAAAA,IAChBiyO,GAAQ9iI,QACR8iI,EAAMljO,KAAQrb,G3Vw6qDR+0O,EAAMzoO,O2Vt6qDVA,KAAKiyO,EACJ/6N,MAAA,oB3V06qDD85N,E2Vp5qDF38O,UAAAy9O,iBAAA,WAlBA,GAAI12O,GAACrD,IAELA,MAAKs5O,qBAAiB,E3Vu6qDhBt5O,K2Vt6qDLw1M,iBAAiBtC,sCAAgBlzM,KAAAu5O,2BAAA5+N,UAAA,SAAA1S,GACjC5E,EAAK6mO,aAAAjiO,EAAAkmN,QACL9qN,EAAK8mO,wBAAyBliO,EAAGomN,cACjChrN,EAAcs0N,0BAAY,GAAZj9D,I3Vu6qDL,K2Vv6qDL,GAAIzhI,GAAE,EAAAxc,EAAAxU,EAAAkmN,QAAAl1L,EAAAxc,EAAApe,OAAA46B,IAAA,CACT,GAAAk7L,GAAK13M,EAAAwc,EACL51B,GAAAs0N,0BAAAh1N,IAAAwxN,EAAAmW,MAAAlX,YAAAe,EAAAmW,OAI8B,MAA9BjnO,EAAK00N,uBAA+C,MAAtB10N,EAAgB6mO,cAAmB7mO,EAAA6mO,aAAA7rO,OAAA,GACjEgF,EAAAwvN,oBAAAxvN,EAAA6mO,aAAA,GAAAI,MAAAlX,aAGD/vN,EAAKi2O,qBAAmB,EACtBj2O,EAAAmX,IAAAhP,kB3Vu6qDDytO,E2Vn6qDG38O,UAAAo+O,yBAAsC,SAAAj1C,GAC3CzlM,KAAKu5O,0BAAmB9zC,OACxBzlM,KAAA+5O,oB3Vq6qDEd,E2Vl6qDgB38O,UAAS83N,wBAA2B,SAAKhB,GAC3D,MAAAA,IAAApzN,KAAA+3N,uBAAA/3N,KAAA+3N,sBAAA3E,gB3Vo6qDE6lB,E2Vj6qDM38O,UAAAu2N,oBAA+B,SAAAyD,GAEtCt2N,KAAA+3N,uBAAO/3N,KAAA+3N,sBAAA3E,aAAAkD,IAKRt2N,KAAK+3N,sBAAwB/3N,KAAC23N,0BAAA31N,IAAAs0N,GAC9Bt2N,KAAAy6O,2B3Vg6qDExB,E2V75qDc38O,UAAWq+O,QAAG,SAAA/mL,G3V85qDxB,M2V75qDLA,IAAY,GAALA,EAAKv1D,OAGbu1D,IAAAv1D,OAAA,GAFC,M3Vi6qDC46O,E2V55qDc38O,UAAAu9O,oBAAA,SAAA5pN,G3V85qDV,I2V55qDL,GADDtmB,MACCrL,EAAO,EAAKA,EAAG2xB,EAAA3xB,IACfqL,EAAAqN,KAAA,EAED,OAAArN,GAhPW,IAAA8S,GAAAC,EAAAC,EAAAC,EAAAC,CAA8B,O3V+orDvCo8N,G2V1prDHH,I3V2prDOp+O,O2V1prDPM,GAAU,YACV4V,SAAU,0BACVE,SAAQ5W,EAAA,M3V2prDGiX,Q2VzprDV,wDACA,iGACA,2CACA,wEAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWq5N,GAiPZ,wCAAAt8N,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA+0L,SAAA/0L,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2rK,GAAA,GAAAA,GAAA,IAAA3rK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,UAADu+O,IAjPkC57F,GAAA,G3VkqrD9Bu9F,GAA8B56O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G4VlrrD/DyhO,KACC33L,KAAA,GAAAxQ,UAAAsmM,KAqBF8B,GAAA,WAAuC,QAACC,MAAA,M5VgrrDpCA,G4VnsrDHH,I5VosrDOlgP,O4VnsrDPM,GAAS,W5VosrDEqX,S4VlsrDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAqjF,IACXpzE,GAAA,YACAwoC,GACAkb,GACAnuB,I5VqsrDU5qL,c4VlsrDV4mO,I5VqsrDUljO,W4VlsrDV47L,OAEqCqpC,M5V0srDnCC,GAAgCh7O,MAAQA,KAAKuY,WAAc,WAC3D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFqiO,GAAiCj7O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D8hO,GAAiCl7O,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6VlurD7EyhO,GAAA,SAAAvhO,G7V4urDzB,Q6VlurDHwhO,GAQC7lC,EAAAoc,EAA0Br3M,EAAAC,EAiC1Bqe,EAAApe,GAxCO,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IAwC/C,OAvCOqD,GAAAkyM,eAEAlyM,EAAAsuN,sBAAqBA,EACrBtuN,EAAAiX,SACCjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,OAgBRv1B,EAAKmX,M7VmtrDCnX,E6VltrDLg4O,a7VmtrDSC,I6VltrDR,GAAErzO,OACAlN,MAAO,GAAI81H,MAAO,qBAAoB53G,IAAK,iBAC3Cle,MAAO,GAAG81H,MAAO,mBAAmB53G,IAAK,gBACzCle,MAAO,EAAE81H,MAAO,kBAAE53G,IAAqB,iBACzCle,MAAA,GAAA81H,MAAA,oBAAA53G,IAAA,aAIF5V,EAAK4vN,oBAAqB,KAE1B5vN,EAAKk4O,mBAAS,K7VitrDRl4O,E6VhtrDJ4pO,SACAuO,MAAM,YACNA,MAAM,YACNA,MAAM,aACNA,MAAA,YACFn4O,EAzCD23O,GACgDI,EACxCxhO,G7V0vrDLwhO,E6VhtrDE9+O,UAAC+H,SAAc,WACnBrE,KAAAy7O,gBAGDL,EAAC9+O,UAAAgI,YAAA,a7VitrDE82O,E6V/srDH9+O,UAAAm/O,aAqBC,WApBA,GAAIp4O,GAAOrD,KACP2gB,EAASwwK,OAAmBvvK,QAAS,OAErClB,EAACC,EAAAgB,QAAsBM,SAAA,U7V+srDrBjiB,M6V7srDH2xN,sBAAW/F,qBAAS,aAAAlrM,EAAAC,EAAA,OACrBhG,UAAU,SAAQ1S,GAClBA,EAAKA,KAAKkX,MAAO,QAEjBlX,EAAIA,KAAC+5K,MAAA,E7V6srDG3+K,E6V5srDP4vN,qBACAhrN,MAAMA,EAAMA,MACZyrD,OAAAzrD,EAAWyrD,OACXhzC,UAASA,EACTC,QAASA,EACT+zK,UAAW,WACVxC,YAAA,OAGD7uL,EAAAmX,IAAAhP,iBAhFQ,IAAAiR,GAAOC,EAAAC,EAAAC,EAAAC,EAAAC,CAAS,O7V+xrDzBs+N,G6V1yrDHH,I7V2yrDOvgP,O6V1yrDPM,GAAoB,YACpB4V,SAAU,WACVE,SAAQ5W,EAAA,M7V2yrDGiX,Q6VzyrDV,wDACA,iGACA,2CACA,wEAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWw7N,GAkFZ,wCAAAz+N,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6uM,SAAA7uM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAAD0gP,IAlFoB/9F,GAAA,G7VkzrDhBq+F,GAA+C17O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DuiO,GAA+C37O,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACxF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8VnvrDzGkiO,GAAA,W9VuvrDG,Q8VtvrDIC,KACL77O,KAAA87O,SAAA,uDAGF,MARSD,GAAAv/O,UAAA+H,SAAA,a9V8vrDNq3O,IACIhhP,OAAOM,GAAgB,SACvB2gP,GAA4C,cAAejhP,S8VlwrDtDmhP,EAA+Bv/O,UAAA,kB9VowrDxCu/O,E8Vj2rDOH,I9Vk2rDHhhP,O8Vj2rDPM,GAAU,YACV4V,SAAU,2BA0FTE,SAAA,iqEACW6qO,GAUZ,yBAADE,M9VswrDIE,GAAyB/7O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxF,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G+Vl2rD/D4iO,KACC94L,KAAA,GAAAxQ,UAAAyoM,KAwBFc,GAAA,WAAkC,QAACC,MAAA,M/Vg2rD/BA,G+Vt3rDHH,I/Vu3rDOrhP,O+Vt3rDPM,GAAS,W/Vu3rDEqX,S+Vr3rDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAwkF,IACXv0E,GAAA,YACAwoC,GACAkb,GACAnuB,I/Vw3rDU5qL,c+Vr3rDV+oO,GACAS,I/Vw3rDU9lO,W+Vr3rDV47L,GACA2C,GACAkX,OAEgC2wB,M/V63rD9BC,GAAqDn8O,MAAQA,KAAKuY,WAAc,WAChF,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFwjO,GAAsDp8O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DijO,GAAsDr8O,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC/F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IgWz5rD1D4iO,GAAA,SAAA1iO,GhWm6rD5C,QgW35rDA2iO,GAQUhnC,EAAQoc,EAoBjBr3M,EAAAC,EAAAqe,EAAApe,GA3BU,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IA2BlD,OA1BUqD,GAAAkyM,eAEAlyM,EAAAsuN,sBAAqBA,EACrBtuN,EAAAiX,SACCjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,OAIRv1B,EAAKmX,MAELnX,EAAKuvN,SAAW1D,GAChB7rN,EAAKm5O,YAAan5O,EAAGo5O,mBhWu5rDrBp5O,EgWt5rDQqoN,eACAt1M,KAAA,KACAyhN,QAAQ,KACRC,SAAO,MACPryB,KAAA,EACA2nB,UAAO,GACTpxM,MAAA3Y,EAAAm5O,YAAAn+O,QhWw5rDNgF,EgWt5rDQq5O,gBACArxN,SAAA,KACAsxN,eAAA,KACNC,kBAAA,MhWw5rDFv5O,EAAMo4O,egWt5rDTp4O,EA5BD84O,GAEWI,EAEA3iO,GhWi7rDX2iO,EgWt5rDoBjgP,UAAAmgP,iBAAA,WhWq8rDhB,IgWr5rDI,GA/CAI,KACCpsO,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,OAAOjF,SAAU,OAClD5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,MAAAjF,SAAU,OAC3C5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,SAAQjF,SAAU,OACnD5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,OAAOjF,SAAU,OAClD5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,MAAMjF,SAAU,OACjD5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,OAAAjF,SAAW,OAC5C5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,UAAOjF,SAAc,OACtD5a,KAAK,OAAOoC,GAAG,UAAWyd,MAAM,MAAAjF,SAAY,OAC5C5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,WAAAjF,SAAqB,mBACrD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAgBjF,SAAU,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAAjF,SAAuB,mBACvD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,kBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,kBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAgBjF,SAAU,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAAjF,SAAuB,mBACvD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,kBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,wBAAwBjF,SAAE,kBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAgBjF,SAAU,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAAjF,SAAA,mBAChC5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,8BAAmBjF,SAAgB,iBACnE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,QAAAjF,SAAiB,kBACjD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,gBAAAjF,SAA2B,kBAC3D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,4BAA0BjF,SAAA,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAgBjF,SAAU,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,iBAAejF,SAAU,kBACzD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,cAAejF,SAAU,kBACzD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,cAAAjF,SAAqB,mBACrD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,oBAAqBjF,SAAU,mBAC/D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAAjF,SAAA,mBAChC5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,4CAAsCjF,SAAU,gBAChF5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,qCAA4BjF,SAAe,mBAC3E5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,iBAAiBjF,SAAU,iBAC3D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,gBAAcjF,SAAU,kBACxD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,aAAAjF,SAAuB,mBACvD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,wBAAyBjF,SAAE,mBAC3D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,gBAAAjF,SAAyB,mBACzD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,wBAAoBjF,SAAc,kBACrE5a,KAAA,MAAAoC,GAAA,UAAAyd,MAAA,SAAAjF,SAAA,iBAGFyxN,KACIx+O,EAAA,EAAWA,EAAK,IAAKA,IACxBw+O,EAAA9lO,KAAAhX,KAAA+8O,ehW05rDD,KgWn5rDI,GAHAC,GAAAh9O,KAAYi9O,eACZ58J,EAAYt9E,KAAA4M,OAAA,GAAA2Z,OAAAC,UAAA,KAChB5f,KACQrL,EAAA,EAAOA,EAAK,KAAGA,IAAQ,CAC3B,GAAI4+O,GAAU,KAAA5+O,EAAUw+O,EAAaz+O,OACjCmyB,EAAAwsN,EAAAE,EAAqBF,EAAA3+O,QACrB8+O,EAA+B,MAAd3sN,EAAI40M,YAAoB,EAAQ,IACjDkF,EAAAuS,EAAgB,IAAAv+O,EAAau+O,EAASx+O,QACtC++O,EAAcD,GAAI,IAAAp6O,KAAAqlC,SAAA,IAAArlC,KAAAqlC,SAAA,GAAArlC,KAAAqlC,UACnBi1M,EAAc,GhWo5rDjB,IgWn5rDI/S,EAAIj/M,SAAW,GACf,GAAAiyN,GAAaH,EAAep6O,KAAMqlC,QAClCg1M,GAAeE,EAAWhT,EAAOj/M,SACpCgyN,GAAA,IAAAC,GAAA1lD,QAAA,GhWq5rDDjuL,EgWn5rDIqN,MACAumO,YAASv9O,KAAA+8O,eACTS,QAAAV,EAAYI,GACZO,WAAUp9J,EACVh1D,SAAU+xN,EACVM,WAAUpT,EAAQ75N,KAClBktO,SAAArT,EAAaz3N,GACb+qO,YAAAtT,EAAgBh6M,MAChBqsN,eAAArS,EAAmBj/M,SACnBuxN,kBAAiBS,EACjBjY,YAAA50M,EAAgB40M,YAChByY,eAAertN,EAAAqtN,eACfC,UAASttN,EAAGstN,UACZC,IAAKvtN,EAAIutN,IACVC,IAAAxtN,EAAAwtN,MAGN39J,GAAAt9E,KAAA4M,MAAA,IAAA5M,KAAAqlC,UAEJ,MAAAz+B,IhWo5rDD4yO,EgWj5rDkBjgP,UAAA2gP,aAAA,WACd,GAAID,KAuCP,OAtCGA,GAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAAQC,UAAW,aAAcC,IAAK,QAASC,IAAK,UAClGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,OAAAC,UAAW,aAAWC,IAAc,QAAKC,IAAS,UAChGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,UAAQC,UAAW,aAAiBC,IAAE,QAAYC,IAAE,UAClGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,OAAQC,UAAW,aAAcC,IAAK,QAAQC,IAAK,UACjGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,OAAQC,IAAK,UAClGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,UAAUC,UAAW,aAAcC,IAAK,OAASC,IAAK,UACpGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,QAASC,IAAK,UACnGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,UAAQC,UAAW,aAAiBC,IAAE,QAAYC,IAAE,UAClGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,OAAQC,UAAW,aAAcC,IAAK,QAAQC,IAAK,UAEjGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAAUC,UAAW,aAAcC,IAAA,OAAYC,IAAE,UAC/FhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAAUC,UAAW,QAASC,IAAK,QAAQC,IAAK,UAE9FhB,EAAKhmO,MAAMouN,YAAa,KAAAyY,eAAU,SAAgBC,UAAU,QAAWC,IAAA,OAAiBC,IAAE,UAC1FhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,OAAQC,IAAK,UACtGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,UAAUC,UAAW,aAAcC,IAAK,OAAQC,IAAK,UACvGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,aAAaC,IAAK,OAAQC,IAAK,UACtGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,YAAaC,IAAE,OAAWC,IAAE,UACnGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAUC,IAAK,OAAQC,IAAK,UAEnGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAAC,IAAc,OAAKC,IAAQ,UAClGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,SAAUC,IAAK,UACxGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,UAAUC,UAAW,aAAcC,IAAK,SAAUC,IAAK,UACzGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,aAAaC,IAAK,SAAUC,IAAK,UACxGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,YAAaC,IAAE,SAAaC,IAAE,UACrGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAUC,IAAK,SAAUC,IAAK,UAErGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAAC,IAAc,SAAKC,IAAU,UACpGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,WAAYC,IAAK,UAC1GhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,UAAUC,UAAW,aAAeC,IAAA,WAAiBC,IAAA,UAEvGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAAC,IAAc,WAAYC,IAAK,UACtGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,QAASC,IAAK,UACvGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,UAAUC,UAAW,aAAcC,IAAK,QAAQC,IAAK,UACvGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,aAAaC,IAAK,OAAQC,IAAK,UACtGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,YAAaC,IAAE,SAAaC,IAAE,UACrGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAUC,IAAK,SAASC,IAAK,UACpGhB,EAAAhmO,MAAYouN,YAAA,SAAAyY,eAAA,SAAAC,UAAA,SAAAC,IAAA,QAAAC,IAAA,UACfhB,GhW84rDDT,EgW34rDWjgP,UAAAygP,aAAuC,WhW44rD9C,MgW34rDI,uCAAsC50M,QAAY,OAAC,SAAAhvB,GACpD,MAAApW,MAAA4M,MAAA,GAAA5M,KAAAqlC,UAAAvnB,SAAA,OhW84rDP07N,EgWz4rDoBjgP,UAAiBm/O,aAAG,WACpC,GAAGt5K,GAAKniE,KAAAw8O,YAAkB7+O,OhW04rD1B,IgWz4rDIqC,KAAI0rN,cAAYt1M,KAAA,CAChB,GAAGA,GAAMpW,KAAA0rN,cAAAt1M,KAAA1D,aACTyvD,KhW04rDA,KgWz4rDI,GAAI4sC,GAAM,EAAIA,EAAC/uG,KAAAw8O,YAAiBn+O,OAAA0wG,IAAA,CAChC,GAAA2jG,GAAS1yM,KAAIw8O,YAAKztI,EhW04rDlB,KgWz4rDI,GAAIt1F,KAAKi5L,IACS,KAAdA,EAAIj5L,GAAK,IAAK/G,cAAA5U,QAAAsY,IACjB+rD,EAAAnrD,KAAA07L,IAOb1yM,KAAI0rN,cAAc1vM,MAAKmmD,EAAA9jE,MhW84rDvB,KgWv4rDI,GANA4/O,GAAiB,EACjBC,EAAA,EACAC,EAAuB,EACvBC,EAAuB,EACvBC,EAA0B,EAC9BC,EAAyB,EACjBvvI,EAAM,EAAIA,EAAK5sC,EAAA9jE,OAAA0wG,IAAA,CACnB,GAAG2jG,GAAIvwI,EAAA4sC,EACH2jG,GAAArnL,WACA4yN,GAAkBvrC,EAAErnL,SACvB6yN,GAAA,GAEGxrC,EAAAiqC,iBACAwB,GAAwBzrC,EAAEiqC,eAC7ByB,GAAA,GAEG1rC,EAAAkqC,mBAAuBtxN,WAAIonL,EAAWkqC,qBACtCyB,GAA2B/yN,WAAEonL,EAAAkqC,mBAChC0B,GAAA,GhW+4rDL,GALAt+O,KgWv4rDQ08O,gBACArxN,SAAA6yN,EAAiBD,EAAuBC,EAAoB,KAC5DvB,eAAiByB,EAAGD,EAA2BC,EAA0B,KAC/ExB,kBAAA0B,GAAAD,EAAAC,GAAA1mD,QAAA,QAIE53L,KAAI0rN,cAAemM,QAAA,CACnB,GAAIA,GAAM73N,KAAA0rN,cAAqBmM,QAC3B0mB,EAAK,SAAQz7N,EAAKnK,GhWs4rDlB,MgWr4rDImK,GAAA+0M,GAAUl/M,EAAAk/M,IACb,EACG/0M,EAAO+0M,GAAEl/M,EAAAk/M,GACZ,EAEH,EAE6B,QAA3B73N,KAAG0rN,cAAmBoM,WhWu4rDtBymB,EgWt4rDI,SAAKz7N,EAAQnK,GhWu4rDb,MgWt4rDImK,GAAA+0M,GAASl/M,EAAAk/M,GACZ,EACG/0M,EAAO+0M,GAAGl/M,EAAAk/M,IACb,EAEH,IAGT11J,EAAA6vF,KAAAusF,GAID,GAAIzzB,GAAW9qN,KAAK0rN,cAAe0B,UAC/BoxB,GAAUx+O,KAAM0rN,cAAcjmB,KAAE,GAAUqlB,CACjD9qN,MAAAy+O,UAAAt8K,EAAAxkE,MAAA6gP,IAAA1zB,IhWu4rDDyxB,EgWp4rDgCjgP,UAAY+3N,iBAAA,SAAAp3N,GAG/B,KAFFA,EAAIu3G,SAAIv3G,EAAA+gM,SAGXh+L,KAAK0rN,cAAcjmB,KAAC,EACvBzlM,KAAAy7O,iBhWs4rDLc,EgWl4rD0BjgP,UAAOg4N,oBAAgB,SAAA0D,GAEzCh4N,KAAK0rN,cAAcmM,SAAWG,EACjCh4N,KAAA0rN,cAAAoM,SAAA,QAAA93N,KAAA0rN,cAAAoM,SAAA,cAGG93N,KAAK0rN,cAAcmM,QAAQG,EAC9Bh4N,KAAA0rN,cAAAoM,SAAA,OAGD93N,KAAK0rN,cAAcjmB,KAAC,EACvBzlM,KAAAy7O,gBhWk4rDDc,EgW/3rD2BjgP,UAAQq6N,cAAA,SAAAlxB,GAC/BzlM,KAAK0rN,cAAcjmB,KAACA,EACvBzlM,KAAAy7O,eAtRQ,IAAAh/N,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAmC,OhWwpsD5Cy/N,GgWpqsDHH,IhWqqsDO1hP,OgWpqsDJM,GAAU,YACV4V,SAAU,gCACVE,SAAQ5W,EAAA,MhWqqsDAiX,QgWnqsDJ,wDACA,iGACA,2CACA,uEACH,kHAEHsO,gBAAAzkB,GAAA,wBAAA0kB,SACW28N,GAuRZ,wCAAA5/N,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6uM,SAAA7uM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAAD6hP,IAvRuCl/F,GAAA,GhW4qsDnCqhG,GAAwD1+O,MAAQA,KAAKuY,WAAc,WACnF,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF+lO,GAAyD3+O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DwlO,GAAyD5+O,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClG,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IiWrrsDvDmlO,GAAA,SAAAjlO,GjW+rsD/C,QiWvrsDAklO,GAQUvpC,EAAmBoc,EA0B5Br3M,EAAAC,EAAAqe,EAAApe,GAjCU,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IACxCqD,GAAAkyM,eAEAlyM,EAAAsuN,sBAAqBA,EACrBtuN,EAAAiX,SACCjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,OAIRv1B,EAAKmX,MACLnX,EAAKuvN,SAAA1D,GAEL7rN,EAAK07O,kBAAA,GAAsBz1N,MAAI,cAC/BjmB,EAAK27O,wBAAyB,WAAM,uBAA6B,YAAY,YAAc,YAAa,aACxG37O,EAAK47O,uBAAkB9/N,MAAA,qBAAAlX,MAAA,0CjWmrsDvB5E,EiWlrsDM67O,kBACAzuO,KAAM,oBAAe0uO,GAAS,UAAU/kP,EAAA,IAASglP,QAAM,IAAMjrN,MAAA,UAAiB4rH,KAAA,eAC9EtvI,KAAM,UAAW0uO,GAAI,UAAW/kP,EAAG,IAAKglP,QAAS,KAAKjrN,MAAM,WAAW4rH,KAAK,mBAC5EtvI,KAAM,UAAW0uO,GAAI,UAAW/kP,EAAG,IAAKglP,QAAS,IAAIjrN,MAAO,UAAW4rH,KAAM,eAC7EtvI,KAAM,UAAW0uO,GAAI,UAAW/kP,EAAG,IAAKglP,QAAS,KAAKjrN,MAAM,WAAW4rH,KAAK,mBAC5EtvI,KAAM,UAAW0uO,GAAI,UAAW/kP,EAAG,IAAKglP,QAAS,IAAEjrN,MAAM,UAAM4rH,KAAY,eAC3EtvI,KAAM,UAAU0uO,GAAI,UAAY/kP,EAAE,MAAMglP,QAAS,KAAMjrN,MAAM,WAAW4rH,KAAK,mBAC7EtvI,KAAM,SAAS0uO,GAAI,UAAW/kP,EAAG,KAAOglP,QAAS,KAAMjrN,MAAM,UAAU4rH,KAAM,oBAC7EtvI,KAAM,UAAW0uO,GAAI,UAAW/kP,EAAG,IAAKglP,QAAQ,KAAKjrN,MAAM,WAAW4rH,KAAK,mBAC3EtvI,KAAM,UAAW0uO,GAAI,UAAW/kP,EAAG,IAAAglP,QAAQ,IAASjrN,MAAM,UAAM4rH,KAAY,eAC5EtvI,KAAM,UAAW0uO,GAAA,UAAe/kP,EAAE,OAASglP,QAAQ,KAACjrN,MAAY,WAAK4rH,KAAA,mBACzEtvI,KAAA,MAAA0uO,GAAA,UAAA/kP,EAAA,EAAAglP,QAAA,EAAAjrN,MAAA,WAAA4rH,KAAA,kBjWqrsDF,KiWnrsDI,GAAJs/F,GAAoC,EAA5BpmN,EAAI,EAAAxc,EAAApZ,EAAA67O,gBAAAjmN,EAAAxc,EAAApe,OAAA46B,IAAA,CACR,GAAAzzB,GAAQiX,EAAIwc,EACZomN,IAAU75O,EAAKpL,EAClBoL,EAAA85O,GAAAj8O,EAAAk8O,eAAA,GAAAj2N,MAAAjmB,EAAA07O,kBAAAx1N,UAAA,IAAA81N,IACJ,MAAAh8O,GAlCDq7O,GAEWI,EAGAllO,GjWmtsDXklO,EiWnrsDoBxiP,UAAAijP,eAAoB,SAAcD,GACrD,MAAApwB,IAAAK,cAAA,GAAA+vB,EAAAE,YAAA,IAAAtwB,GAAAK,cAAA,GAAA+vB,EAAAG,cAAA,IAAAvwB,GAAAK,cAAA,GAAA+vB,EAAAI,cAAA,IAAA38O,KAAA4M,MAAA2vO,EAAAK,kBAAA,MAIDb,EAACxiP,UAAA+H,SAAA,aAGDy6O,EAACxiP,UAAAgI,YAAA,YArDQ,IAAAmY,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAsC,OjWwusD/CgiO,GiW5vsDHH,IjW6vsDOjkP,OiW5vsDJM,GAAU,YACV4V,SAAU,mCACVE,SAAQ5W,EAAA,MjW6vsDAiX,QiW3vsDJ,wDACA,iGACA,uEACA,sEACA,gEACA,gEACA,+DACA,kEACA,0FACA,mEACA,2KACA,8EACH,8GAEHsO,gBAAAzkB,GAAA,wBAAA0kB,SACWk/N,GAsDZ,wCAAAniO,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6uM,SAAA7uM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAADokP,IAtD0CzhG,GAAA,GjWowsDtCuiG,GAAyC5/O,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GkW9xsD/DymO,KACE38L,KAAM,GAAAxQ,UAAY4pM,KACnBp5L,KAAA,WAAAxQ,UAAAmsM,KAwBFiB,GAAA,WAAiD,QAACC,MAAA,MlW4xsD9CA,GkWlzsDMH,IlWmzsDFllP,OkWlzsDPM,GAAS,WlWmzsDEqX,SkWjzsDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAqoF,IACXp4E,GAAA,YACAwoC,GACAkb,GACAnuB,IlWozsDU5qL,ckWjzsDVkqO,GACAuC,IlWozsDU/oO,WkWjzsDV47L,GACA2C,GACAkX,OAE+Cw0B,MlWyzsD7CC,GAAmChgP,MAAQA,KAAKuY,WAAc,WAC9D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFqnO,GAAoCjgP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D8mO,GAAoClgP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC7E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,ImW51sD1EymO,GAAA,SAAAvmO,GnWu2sD5B,QmWh1sDAwmO,GAQI7qC,EAAMoc,EAAoBr3M,EAuD7BC,EAAAqe,EAAApe,GA9DU,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IACxCqD,GAAAkyM,eAEAlyM,EAAAsuN,sBAAqBA,EACrBtuN,EAAAiX,SACCjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,OAIRv1B,EAAKmX,MAGLnX,EAAKuvN,SAAA1D,GACL7rN,EAAKg9O,mBAAqBtlP,MAAK,EAAKokB,MAAK,mBAAwBpkB,MAAI,EAAAokB,MAAU,UAAOmhO,cAAU,IAAiBvlP,MAAG,EAAKokB,MAAK,YAAgBpkB,MAAE,EAAAokB,MAAa,QAAOpkB,MAAU,EAAAokB,MAAO,QAAUmhO,cAAW,IAAWvlP,MAAG,EAAKokB,MAAK,UAAOpkB,MAAA,EAAkBokB,MAAG,kBAAiBpkB,MAAS,EAACokB,MAAQ,cAAgBpkB,MAAE,EAAOokB,MAAG,eAC7T9b,EAAKk9O,wBAAyBxlP,MAAQ,EAAEokB,MAAO,oBAAqBpkB,MAAO,EAAEokB,MAAS,SAAEmhO,cAAoB,IAASvlP,MAAO,EAAEokB,MAAQ,UAAGmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,OAAApkB,MAAA,EAAAokB,MAAA,qBAAApkB,MAAA,EAAAokB,MAAA,UAAApkB,MAAA,EAAAokB,MAAA,SAAApkB,MAAA,EAAAokB,MAAA,cAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,aAAApkB,MAAA,GAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,cAAApkB,MAAA,GAAAokB,MAAA,WAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,UACzI9b,EAAKm9O,uBAAuBzlP,MAAQ,EAAEokB,MAAO,YAAApkB,MAAA,EAA2BokB,MAAI,UAASmhO,cAAM,IAAcvlP,MAAY,EAACokB,MAAO,WAC7H9b,EAAKo9O,qBAAwB1lP,MAAK,EAAAokB,MAAU,8BAA8BpkB,MAAO,EAAAokB,MAAW,aAAamhO,cAAa,IAAUvlP,MAAE,EAAOokB,MAAI,YAAiBpkB,MAAO,EAACokB,MAAG,kBAAyBpkB,MAAG,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,aAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,EAAAokB,MAAA,gBAAAmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,gBAAApkB,MAAA,GAAAokB,MAAA,QAAApkB,MAAA,GAAAokB,MAAA,SAAApkB,MAAA,GAAAokB,MAAA,UAAApkB,MAAA,GAAAokB,MAAA,aAAApkB,MAAA,GAAAokB,MAAA,cAAApkB,MAAA,GAAAokB,MAAA,aAAApkB,MAAA,GAAAokB,MAAA,gBAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,SACrM9b,EAAKq9O,2BAAyB3lP,MAAU,EAAAokB,MAAO,YAAcpkB,MAAU,EAAAokB,MAAO,UAAYmhO,cAAa,IAAOvlP,MAAQ,EAAEokB,MAAO,UAAapkB,MAAM,EAAGokB,MAAO,UAAEpkB,MAAgB,EAAAokB,MAAA,WAC9K9b,EAAKs9O,uBAAsB5lP,MAAU,EAAAokB,MAAO,aAAgBpkB,MAAQ,EAAEokB,MAAO,WAAYmhO,cAAc,IAAQvlP,MAAM,EAAGokB,MAAO,cAAEpkB,MAAqB,EAACokB,MAAQ,gBAC/J9b,EAAKu9O,oBAAsB7lP,MAAO,EAAGokB,MAAO,eAAepkB,MAAM,EAAGokB,MAAO,aAASmhO,cAAkB,IAAQvlP,MAAK,EAAKokB,MAAE,qBAA4BpkB,MAAG,EAAKokB,MAAK,2BAA8BpkB,MAAO,EAAAokB,MAAU,kBAAApkB,MAAA,EAAAokB,MAAA,oBAAApkB,MAAA,EAAAokB,MAAA,kBAAApkB,MAAA,EAAAokB,MAAA,aAAApkB,MAAA,EAAAokB,MAAA,SAAApkB,MAAA,EAAAokB,MAAA,SAAApkB,MAAA,GAAAokB,MAAA,mBAGlN9b,EAAKw9O,oBAAoB9lP,MAAA,EAAAokB,MAAA,gBAAApkB,MAAA,EAAAokB,MAAA,MAAAmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,SAAAmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,UnWy0sDzB9b,EmWx0sDOy9O,oBACJ74O,QAAAkX,MAAA,WAGH9b,EAAI09O,sBACJ,IAAIh4N,GAAA,GAAUO,KACdP,GAAIi4N,WAAW,GACfj4N,EAAIk4N,WAAA,GACJl4N,EAAIm4N,gBAAgB,EnW00sDpB,KmWv0sDI,GAFAxgO,GAAA,GAAgB4I,MAAKP,EAAIQ,UAAY,QACzC43N,GAAiB,SAAc,IAAM,EAAG,GAAI,qLACpC7iP,EAAA,EAAAA,EAAA6iP,EAAsB9iP,OAAUC,IAAA,CACpC,GAAA8iP,IAAK9iP,GAAoBoiB,EAAU8+N,WAAC,IAAc2B,EAAgB9iP,MAClEgF,GAAKy9O,kBAAY,GAAU74O,KAAA+O,KAASmqO,EAAcC,GAClD,IAAAhnP,GAAK,GAAAkvB,MAAA5I,EAAoB6I,UAAO,KAAAjrB,EAAe,IAClD+E,GAAA09O,oBAAA/pO,KAAA5c,EAAA++L,eAuBJ,MnWkzsDG91L,GmWr0sDOg+O,oBACLp5O,MAAA,UAAAkX,MAAA,WnWu0sDF9b,EmWr0sDQi+O,qBACN,yBAGFj+O,EAAKk+O,oBAAgBxmP,MAAA,EAAgBokB,MAAG,MAAAmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,OAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,eAAApkB,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,QACxC9b,EAAKm+O,SAAAn+O,EAAgBo5O,mBnWq0sDrBp5O,EmWp0sDQqoN,eACAt1M,KAAA,KACAyhN,QAAQ,KACRC,SAAO,MACPryB,KAAA,EACA2nB,UAAO,GACPpxM,MAAA3Y,EAAWm+O,SAAAnjP,OACXqiB,UAASywK,KAAOzwK,GAClBC,QAAAwwK,KAAApoK,InWs0sDN1lB,EAAMo4O,emWp0sDTp4O,EA/DD28O,GACmDI,EACxCxmO,GnWo4sDXwmO,EmWp0sDQ9jP,UAAYmgP,iBAAA,WnWm3sDhB,ImWn0sDI,GA/CAI,KACCpsO,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,OAAOjF,SAAU,OAClD5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,MAAAjF,SAAU,OAC3C5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,SAAQjF,SAAU,OACnD5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,OAAOjF,SAAU,OAClD5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,MAAMjF,SAAU,OACjD5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,OAAAjF,SAAW,OAC5C5a,KAAK,OAAQoC,GAAG,UAAWyd,MAAM,UAAOjF,SAAc,OACtD5a,KAAK,OAAOoC,GAAG,UAAWyd,MAAM,MAAAjF,SAAY,OAC5C5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,WAAAjF,SAAqB,mBACrD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAgBjF,SAAU,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAAjF,SAAuB,mBACvD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,kBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,kBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,mBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAgBjF,SAAU,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAAjF,SAAuB,mBACvD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAuBjF,SAAU,kBACjE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,wBAAwBjF,SAAE,kBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAgBjF,SAAU,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAAjF,SAAA,mBAChC5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,8BAAmBjF,SAAgB,iBACnE5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,QAAAjF,SAAiB,kBACjD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,gBAAAjF,SAA2B,kBAC3D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,4BAA0BjF,SAAA,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,eAAgBjF,SAAU,mBAC1D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,iBAAejF,SAAU,kBACzD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,cAAejF,SAAU,kBACzD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,cAAAjF,SAAqB,mBACrD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,oBAAqBjF,SAAU,mBAC/D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,sBAAAjF,SAAA,mBAChC5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,4CAAsCjF,SAAU,gBAChF5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,qCAA4BjF,SAAe,mBAC3E5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,iBAAiBjF,SAAU,iBAC3D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,gBAAcjF,SAAU,kBACxD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,aAAAjF,SAAuB,mBACvD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,wBAAyBjF,SAAE,mBAC3D5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,gBAAAjF,SAAyB,mBACzD5a,KAAK,MAAOoC,GAAG,UAAWyd,MAAM,wBAAoBjF,SAAc,kBACrE5a,KAAA,MAAAoC,GAAA,UAAAyd,MAAA,SAAAjF,SAAA,iBAGFyxN,KACIx+O,EAAA,EAAWA,EAAK,IAAKA,IACxBw+O,EAAA9lO,KAAAhX,KAAA+8O,enWw0sDD,KmWj0sDI,GAHAC,GAAAh9O,KAAYi9O,eACZ58J,EAAYt9E,KAAA4M,OAAA,GAAA2Z,OAAAC,UAAA,KAChB5f,KACQrL,EAAA,EAAOA,EAAK,KAAGA,IAAQ,CAC3B,GAAI4+O,GAAU,KAAA5+O,EAAUw+O,EAAaz+O,OACjCmyB,EAAKwsN,EAAGE,EAAaF,EAAM3+O,QAC/BisO,EAAYuS,EAAA,IAAAv+O,EAAAu+O,EAAAx+O,OnWk0sDZsL,GmWj0sDIqN,MACAyqO,SAASzhP,KAAA+8O,eACTS,QAAMV,EAASI,GACf50O,KAAA+3E,EACAq9J,WAAApT,EAAgB75N,KAChBixO,eAAgBpX,EAAMh6M,MAAQ,KAAAg6M,EAAAz3N,GAAA,IAC9B8pO,eAAgBrS,EAACj/M,SACjB+5M,YAAA50M,EAAgB40M,YAChByY,eAAertN,EAAAqtN,eACfC,UAASttN,EAAGstN,UACZC,IAAKvtN,EAAIutN,IACVC,IAAAxtN,EAAAwtN,MAGN39J,GAAAt9E,KAAA4M,MAAA,IAAA5M,KAAAqlC,UAEJ,MAAAz+B,InWk0sDDy2O,EmW/zsDQ9jP,UAAU2gP,aAAA,WACd,GAAID,KAuCP,OAtCGA,GAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAAQC,UAAW,aAAcC,IAAK,QAASC,IAAK,UAClGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,OAAAC,UAAW,aAAWC,IAAc,QAAKC,IAAS,UAChGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,UAAQC,UAAW,aAAiBC,IAAE,QAAYC,IAAE,UAClGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,OAAQC,UAAW,aAAcC,IAAK,QAAQC,IAAK,UACjGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,OAAQC,IAAK,UAClGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,UAAUC,UAAW,aAAcC,IAAK,OAASC,IAAK,UACpGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,QAASC,IAAK,UACnGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,UAAQC,UAAW,aAAiBC,IAAE,QAAYC,IAAE,UAClGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,OAAQC,UAAW,aAAcC,IAAK,QAAQC,IAAK,UAEjGhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAAUC,UAAW,aAAcC,IAAA,OAAYC,IAAE,UAC/FhB,EAAKhmO,MAAMouN,YAAa,KAAMyY,eAAgB,SAAUC,UAAW,QAASC,IAAK,QAAQC,IAAK,UAE9FhB,EAAKhmO,MAAMouN,YAAa,KAAAyY,eAAU,SAAgBC,UAAU,QAAWC,IAAA,OAAiBC,IAAE,WAC1FhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,OAAQC,IAAK,UACtGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,UAAUC,UAAW,aAAcC,IAAK,OAAQC,IAAK,UACvGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,aAAaC,IAAK,OAAQC,IAAK,UACtGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,YAAaC,IAAE,OAAWC,IAAE,UACnGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAUC,IAAK,OAAQC,IAAK,UAEnGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAAC,IAAc,OAAKC,IAAQ,UAClGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,SAAUC,IAAK,UACxGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,UAAUC,UAAW,aAAcC,IAAK,SAAUC,IAAK,UACzGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,aAAaC,IAAK,SAAUC,IAAK,UACxGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,YAAaC,IAAE,SAAaC,IAAE,UACrGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAUC,IAAK,SAAUC,IAAK,UAErGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAAC,IAAc,SAAKC,IAAU,UACpGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,WAAYC,IAAK,UAC1GhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,UAAUC,UAAW,aAAeC,IAAA,WAAiBC,IAAA,UAEvGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAAC,IAAc,WAAYC,IAAK,UACtGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAASC,UAAW,aAAcC,IAAK,QAASC,IAAK,UACvGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,UAAUC,UAAW,aAAcC,IAAK,QAAQC,IAAK,UACvGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,aAAaC,IAAK,OAAQC,IAAK,UACtGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,YAAaC,IAAE,SAAaC,IAAE,UACrGhB,EAAKhmO,MAAMouN,YAAa,SAAUyY,eAAgB,SAAUC,UAAW,SAAUC,IAAK,SAASC,IAAK,UACpGhB,EAAAhmO,MAAYouN,YAAA,SAAAyY,eAAA,SAAAC,UAAA,SAAAC,IAAA,QAAAC,IAAA,UACfhB,GnW4zsDDoD,EmWzzsDW9jP,UAAAygP,aAAA,WnW0zsDP,MmWzzsDI,uCAAsC50M,QAAY,OAAC,SAAAhvB,GACpD,MAAApW,MAAA4M,MAAA,GAAA5M,KAAAqlC,UAAAvnB,SAAA,OnW4zsDPu/N,EmWvzsDW9jP,UAASm/O,aAAiB,WACjC,GAAGt5K,GAAKniE,KAAAwhP,SAAc7jP,OnWwzsDtB,ImWvzsDIqC,KAAI0rN,cAAYt1M,KAAA,CAChB,GAAGA,GAAMpW,KAAA0rN,cAAAt1M,KAAA1D,aACTyvD,KnWwzsDA,KmWvzsDI,GAAI4sC,GAAM,EAAIA,EAAC/uG,KAASwhP,SAAKnjP,OAAA0wG,IAAA,CAC7B,GAAA2jG,GAAS1yM,KAAIwhP,SAAKzyI,EnWwzsDlB,KmWvzsDI,GAAIt1F,KAAKi5L,IACS,KAAdA,EAAIj5L,GAAK,IAAK/G,cAAA5U,QAAAsY,IACjB+rD,EAAAnrD,KAAA07L,InW6zsDb,GmWtzsDA1yM,KAAG0rN,cAAK1vM,MAAcmmD,EAAO9jE,OACzB2B,KAAI0rN,cAAemM,QAAA,CACnB,GAAIA,GAAM73N,KAAA0rN,cAAqBmM,QAC3B0mB,EAAK,SAAQz7N,EAAKnK,GnWszsDlB,MmWrzsDImK,GAAA+0M,GAAUl/M,EAAAk/M,IACb,EACG/0M,EAAO+0M,GAAEl/M,EAAAk/M,GACZ,EAEH,EAE6B,QAA3B73N,KAAG0rN,cAAmBoM,WnWuzsDtBymB,EmWtzsDI,SAAKz7N,EAAQnK,GnWuzsDb,MmWtzsDImK,GAAA+0M,GAASl/M,EAAAk/M,GACZ,EACG/0M,EAAO+0M,GAAGl/M,EAAAk/M,IACb,EAEH,IAGT11J,EAAA6vF,KAAAusF,GAID,GAAIzzB,GAAW9qN,KAAK0rN,cAAe0B,UAC/BoxB,GAAUx+O,KAAI0rN,cAAejmB,KAAO,GAAGqlB,CAC9C9qN,MAAA4qC,OAAAu3B,EAAAxkE,MAAA6gP,IAAA1zB,InWuzsDDs1B,EmWpzsDQ9jP,UAAiB+3N,iBAAmB,SAAAp3N,GAG/B,KAFFA,EAAIu3G,SAAIv3G,EAAA+gM,SAGXh+L,KAAK0rN,cAAcjmB,KAAC,EACvBzlM,KAAAy7O,iBnWszsDL2E,EmWlzsDO9jP,UAAKg4N,oBAAyB,SAAY0D,GAEzCh4N,KAAK0rN,cAAcmM,SAAWG,EACjCh4N,KAAA0rN,cAAAoM,SAAA,QAAA93N,KAAA0rN,cAAAoM,SAAA,cAGG93N,KAAK0rN,cAAcmM,QAAQG,EAC9Bh4N,KAAA0rN,cAAAoM,SAAA,OAGD93N,KAAK0rN,cAAcjmB,KAAC,EACvBzlM,KAAAy7O,gBnWkzsDD2E,EmW/ysDS9jP,UAAAq6N,cAA0B,SAAAlxB,GAC/BzlM,KAAK0rN,cAAcjmB,KAACA,EACvBzlM,KAAAy7O,gBnWizsDD2E,EmW9ysDS9jP,UAAAqlP,iBAAqB,SAAAn8O,GAC7BxF,KAAA4hP,cAAAp8O,GnWgzsDD46O,EmW7ysDW9jP,UAAOulP,gBAAe,SAAa1tB,GAC7C,aAAAA,GAAA,MAAAn0N,KAAA4hP,eAAAztB,EAAAstB,UAAAzhP,KAAA4hP,cAAAH,SAzSQ,IAAAhlO,GAAAC,EAAUC,EAAAC,EAAAC,EAAAC,CAAS,OnWyltD5BsjO,GmW/ltDHH,InWgmtDOvlP,OmW/ltDJM,GAAuB,YACvB4V,SAAU,cACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OACnBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWwgO,GA0SZ,wCAAAzjO,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6uM,SAAA7uM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAAD0lP,IA1SuB/iG,GAAA,GnWumtDnBykG,GAA4B9hP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GoWpntD/D2oO,KACC7+L,KAAA,GAAAxQ,UAAAytM,KAuBF6B,GAAA,WAAqC,QAACC,MAAA,MpWkntDlCA,GoWvotDHH,IpWwotDOpnP,OoWvotDPM,GAAS,WpWwotDEqX,SoWtotDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAuqF,IACXt6E,GAAA,YACAwoC,GACAkb,GACAnuB,IpWyotDU5qL,coWtotDV+tO,IpWyotDUrqO,WoWtotDV47L,GACA2C,GACAkX,OAEmC02B,MpW8otDjCC,GAAgDliP,MAAQA,KAAKuY,WAAc,WAC3E,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFupO,GAAiDniP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DgpO,GAAiDpiP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqW9qtD/D2oO,GAAA,SAAAzoO,GrWyrtDvC,QqWjrtDA0oO,GAQI/sC,EAAcoc,EAgDjBr3M,EAAAC,EAAAqe,EAAApe,GAvDU,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IACxCqD,GAAAkyM,eAEAlyM,EAAAsuN,sBAAqBA,EACrBtuN,EAAAiX,SACCjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,OAIRv1B,EAAKmX,MAGLnX,EAAKuvN,SAAS1D,GACd7rN,EAAIk/O,YACJ,IAAAC,IAAmB,EAAC,+WrW4qtDpBn/O,GqW3qtDIk/O,UAAMvrO,MACNjE,KAAM,YACNzK,KAAA,WACAyyN,WAAY,KACZ0nB,WAAW,KACXC,UAAS,mErW4qtDT1qJ,SqW1qtDIt3E,UAASywK,KAAO,cAChBxwK,QAAOwwK,KAAgB,cAAMzoK,IAAa85N,EAACnkP,OAAA,SAC3C4J,OAAQkX,MAAK,QAAAlX,KAAAu6O,IAChB9uL,OAAArwD,EAAAs/O,sBAAAxxD,KAAA,cAAAqxD,EAAAnkP,UAIL,IAAAukP,IAAoB,4dAyBvB,OrWkptDGv/O,GqW1qtDIk/O,UAAMvrO,MACNjE,KAAM,kBACNzK,KAAA,WACAyyN,WAAY,KACZ0nB,WAAW,KACXC,UAAS,qHrW2qtDT1qJ,SqWzqtDIt3E,UAASywK,KAAO,cAChBxwK,QAAOwwK,KAAgB,cAAMzoK,IAAAk6N,EAAoBvkP,OAAA,SACjD4J,OAAQkX,MAAK,QAAAlX,KAAA26O,IAChBlvL,OAAArwD,EAAAs/O,sBAAAxxD,KAAA,cAAAyxD,EAAAvkP,WAKLgF,EAAKw/O,WAAax/O,EAAGo5O,mBrWyqtDrBp5O,EqWxqtDQqoN,eACAt1M,KAAA,KACAyhN,QAAQ,KACRC,SAAO,MACPryB,KAAA,EACA2nB,UAAO,EACTpxM,MAAA3Y,EAAAw/O,WAAAxkP,QrW0qtDNgF,EAAMo4O,eqWxqtDTp4O,EAxDD6+O,GAEWI,EAEA1oO,GrW+ttDX0oO,EqWxqtDwBhmP,UAAAqmP,sBAAA,SAAAG,EAAAC,GrW2qtDpB,IqWxqtDQ,GAFAp5O,MACJq5O,EAAgC,IAArBF,EAAgB/xC,OACnBkyC,EAAK,EAAAA,EAAAF,EAAOE,IAAA,CAChB,GAAAC,GAAO/xD,KAAe6xD,EACzBr5O,GAAAqN,KAAAksO,EAAAx6N,IAAAu6N,EAAA,SAAA9pD,eAER,MAAAxvL,IrW0qtDD24O,EqWvqtDiBhmP,UAAAmgP,iBAAA,WAUhB,QARSnsN,MAAO,wCAAyC4G,KAAA,KAAY7L,SAAK,KAAMyL,KAAA,gDACvExG,MAAO,4BAA6B4G,KAAA,KAAY7L,SAAK,KAAMyL,KAAA,gJAC3DxG,MAAO,gBAAiB4G,KAAM,KAAM7L,SAAU,KAAMyL,KAAI,mGACzDxG,MAAO,kBAAkB4G,KAAM,KAAA7L,SAAc,KAASyL,KAAA,iJACtDxG,MAAM,WAAA4G,KAAkB,KAAM7L,SAAM,KAAYyL,KAAK,kFACxDxG,MAAA,iBAAA4G,KAAA,KAAA7L,SAAA,KAAAyL,KAAA,8IrW2qtDNwrN,EqWpqtDoBhmP,UAAWm/O,aAAQ,WACnC,GAAGt5K,GAAKniE,KAAA6iP,WAAcllP,OrWqqtDtB,IqWpqtDIqC,KAAI0rN,cAAYt1M,KAAA,CAChB,GAAGA,GAAMpW,KAAA0rN,cAAAt1M,KAAA1D,aACTyvD,KrWqqtDA,KqWpqtDI,GAAI4sC,GAAM,EAAIA,EAAC/uG,KAAU6iP,WAAMxkP,OAAA0wG,IAAA,CAC/B,GAAA2jG,GAAS1yM,KAAI6iP,WAAK9zI,ErWqqtDlB,KqWpqtDI,GAAIt1F,KAAKi5L,IACS,KAAdA,EAAIj5L,GAAK,IAAK/G,cAAA5U,QAAAsY,IACjB+rD,EAAAnrD,KAAA07L,IrW0qtDb,GqWnqtDA1yM,KAAG0rN,cAAK1vM,MAAcmmD,EAAO9jE,OACzB2B,KAAI0rN,cAAemM,QAAA,CACnB,GAAIA,GAAM73N,KAAA0rN,cAAqBmM,QAC3B0mB,EAAK,SAAQz7N,EAAKnK,GrWmqtDlB,MqWlqtDImK,GAAA+0M,GAAUl/M,EAAAk/M,IACb,EACG/0M,EAAO+0M,GAAEl/M,EAAAk/M,GACZ,EAEH,EAE6B,QAA3B73N,KAAG0rN,cAAmBoM,WrWoqtDtBymB,EqWnqtDI,SAAKz7N,EAAQnK,GrWoqtDb,MqWnqtDImK,GAAA+0M,GAASl/M,EAAAk/M,GACZ,EACG/0M,EAAO+0M,GAAGl/M,EAAAk/M,IACb,EAEH,IAGT11J,EAAA6vF,KAAAusF,GAID,GAAIzzB,GAAW9qN,KAAK0rN,cAAe0B,UAC/BoxB,GAASx+O,KAAO0rN,cAAajmB,KAAE,GAAUqlB,CAChD9qN,MAAA0iP,SAAAvgL,EAAAxkE,MAAA6gP,IAAA1zB,IrWoqtDDw3B,EqWjqtDyBhmP,UAAa+3N,iBAAM,SAAAp3N,GAG/B,KAFFA,EAAIu3G,SAAIv3G,EAAA+gM,SAGXh+L,KAAK0rN,cAAcjmB,KAAC,EACvBzlM,KAAAy7O,iBrWmqtDL6G,EqW/ptDYhmP,UAAcg4N,oBAAuB,SAAA0D,GAEzCh4N,KAAK0rN,cAAcmM,SAAWG,EACjCh4N,KAAA0rN,cAAAoM,SAAA,QAAA93N,KAAA0rN,cAAAoM,SAAA,cAGG93N,KAAK0rN,cAAcmM,QAAQG,EAC9Bh4N,KAAA0rN,cAAAoM,SAAA,OAGD93N,KAAK0rN,cAAcjmB,KAAC,EACvBzlM,KAAAy7O,gBrW+ptDD6G,EqW5ptDsBhmP,UAAQq6N,cAAK,SAAAlxB,GAC/BzlM,KAAK0rN,cAAcjmB,KAACA,EACvBzlM,KAAAy7O,eAlKQ,IAAAh/N,GAAAC,EAAAC,EAAAC,EAAAC,EAAqBC,CAAS,OrWi0tDvCwlO,GqWv0tDHH,IrWw0tDOznP,OqWv0tDJM,GAAU,YACV4V,SAAU,2BACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OACnBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW0iO,GAoKZ,wCAAA3lO,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6uM,SAAA7uM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAAD4nP,IApKkCjlG,GAAA,GrW+0tD9B8lG,GAAyCnjP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GsW51tD/DgqO,KACClgM,KAAA,GAAAxQ,UAAA2vM,KAuBFgB,GAAA,WAAgD,QAACC,MAAA,MtW01tD7CA,GsW/2tDMH,ItWg3tDFzoP,OsW/2tDPM,GAAS,WtWg3tDEqX,SsW92tDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAA4rF,IACX37E,GAAA,YACAwoC,GACAkb,GACAnuB,ItWi3tDU5qL,csW92tDViwO,ItWi3tDUvsO,WsW92tDV47L,GACA2C,GACAkX,OAE8C+3B,MtWs3tD5CC,GAA6CvjP,MAAQA,KAAKuY,WAAc,WACxE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF4qO,GAA8CxjP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DqqO,GAA8CzjP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuWv5tDjEgqO,GAAA,SAAA9pO,GvWi6tDrC,QuWl5tDA+pO,GAQIpuC,EAAcoc,EAqCjBr3M,EAAAC,EAAAqe,EAAApe,GA5CU,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IA4ClD,OA3CUqD,GAAAkyM,eAEAlyM,EAAAsuN,sBAAqBA,EACrBtuN,EAAAiX,SACCjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,OAIRv1B,EAAKmX,MAELnX,EAAKuvN,SAAA1D,GvW84tDL7rN,EuW74tDOugP,uBACL37O,MAAA,UAAAkX,MAAA,YvW+4tDF9b,EuW74tDQwgP,wBACN,qBvW+4tDFxgP,EuW74tDOygP,uBACL77O,MAAA,8CAAAkX,MAAA,cvW+4tDF9b,EuW74tDK0gP,wBACH,mJvW+4tDF1gP,EuW74tDO2gP,sBACL/7O,MAAA,kDAAAkX,MAAA,cvW+4tDF9b,EuW74tDM4gP,uBACJ,6NAKF5gP,EAAK6gP,oBAAkBnpP,MAAA,EAAAokB,MAAmB,WAAAmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,cAAApkB,MAAA,EAAAokB,MAAA,eAAApkB,MAAA,EAAAokB,MAAA,cAAApkB,MAAA,EAAAokB,MAAA,aAC1C9b,EAAKw/O,WAAax/O,EAAGo5O,mBvW24tDrBp5O,EuW14tDQqoN,eACAt1M,KAAA,KACAyhN,QAAQ,KACRC,SAAO,MACPryB,KAAA,EACA2nB,UAAO,GACTpxM,MAAA3Y,EAAAw/O,WAAAxkP,QvW44tDNgF,EAAMo4O,euW14tDTp4O,EA7CDkgP,GACmDI,EACxC/pO,GvWw7tDX+pO,EuW14tDiBrnP,UAAAmgP,iBAAA,WAehB,QAbQ5pO,GAAG,QAASyd,MAAM,iBAAAjF,SAAuB,KAAY84N,gBAAK,aAAgBz7H,MAAc,MAAOiqF,MAAO,QACtG9/L,GAAG,QAASyd,MAAM,sBAAAjF,SAA4B,MAAY84N,gBAAK,aAAgBz7H,MAAc,MAAOiqF,MAAO,QAC3G9/L,GAAG,QAASyd,MAAM,2BAA2BjF,SAAU,KAAO84N,gBAAiB,aAAaz7H,MAAO,MAAOiqF,MAAO,QACjH9/L,GAAG,QAASyd,MAAM,4BAA4BjF,SAAQ,KAAA84N,gBAAgB,aAAqBz7H,MAAO,MAAOiqF,MAAO,QAChH9/L,GAAG,QAASyd,MAAM,kBAAAjF,SAAA,KAAgC84N,gBAAiB,aAAgBz7H,MAAA,MAAciqF,MAAO,QACxG9/L,GAAG,QAASyd,MAAM,+BAA6BjF,SAAK,KAAe84N,gBAAe,aAAcz7H,MAAO,KAAOiqF,MAAA,OAC9G9/L,GAAG,QAASyd,MAAM,gBAAAjF,SAAoB,KAAa84N,gBAAI,aAAgBz7H,MAAc,MAAWiqF,MAAO,QACvG9/L,GAAG,QAASyd,MAAM,mBAAAjF,SAAA,KAAmC84N,gBAAiB,aAAez7H,MAAC,KAAYiqF,MAAO,OACzG9/L,GAAG,QAASyd,MAAM,kCAAiCjF,SAAK,KAAA84N,gBAA8B,aAAcz7H,MAAO,KAAKiqF,MAAE,OAClH9/L,GAAG,QAASyd,MAAM,oBAAqBjF,SAAU,KAAO84N,gBAAiB,aAAaz7H,MAAO,MAAOiqF,MAAO,QAC9G9/L,GAAA,QAAAyd,MAAA,sBAAAjF,SAAA,KAAA84N,gBAAA,aAAAz7H,MAAA,MAAAiqF,MAAA,SvW84tDNgxC,EuWv4tDoBrnP,UAAWm/O,aAAQ,WACnC,GAAGt5K,GAAKniE,KAAA6iP,WAAcllP,OvWw4tDtB,IuWv4tDIqC,KAAI0rN,cAAYt1M,KAAA,CAChB,GAAGA,GAAMpW,KAAA0rN,cAAAt1M,KAAA1D,aACTyvD,KvWw4tDA,KuWv4tDI,GAAI4sC,GAAM,EAAIA,EAAC/uG,KAAU6iP,WAAMxkP,OAAA0wG,IAAA,CAC/B,GAAA2jG,GAAS1yM,KAAI6iP,WAAK9zI,EvWw4tDlB,KuWv4tDI,GAAIt1F,KAAKi5L,IACS,KAAdA,EAAIj5L,GAAK,IAAK/G,cAAA5U,QAAAsY,IACjB+rD,EAAAnrD,KAAA07L,IvW64tDb,GuWt4tDA1yM,KAAG0rN,cAAK1vM,MAAcmmD,EAAO9jE,OACzB2B,KAAI0rN,cAAemM,QAAA,CACnB,GAAIA,GAAM73N,KAAA0rN,cAAqBmM,QAC3B0mB,EAAK,SAAQz7N,EAAKnK,GvWs4tDlB,MuWr4tDImK,GAAA+0M,GAAUl/M,EAAAk/M,IACb,EACG/0M,EAAO+0M,GAAEl/M,EAAAk/M,GACZ,EAEH,EAE6B,QAA3B73N,KAAG0rN,cAAmBoM,WvWu4tDtBymB,EuWt4tDI,SAAKz7N,EAAQnK,GvWu4tDb,MuWt4tDImK,GAAA+0M,GAASl/M,EAAAk/M,GACZ,EACG/0M,EAAO+0M,GAAGl/M,EAAAk/M,IACb,EAEH,IAGT11J,EAAA6vF,KAAAusF,GAID,GAAIzzB,GAAW9qN,KAAK0rN,cAAe0B,UAC/BoxB,GAASx+O,KAAO0rN,cAAajmB,KAAE,GAAUqlB,CAChD9qN,MAAA0iP,SAAAvgL,EAAAxkE,MAAA6gP,IAAA1zB,IvWu4tDD64B,EuWp4tDyBrnP,UAAa+3N,iBAAM,SAAAp3N,GAG/B,KAFFA,EAAIu3G,SAAIv3G,EAAA+gM,SAGXh+L,KAAK0rN,cAAcjmB,KAAC,EACvBzlM,KAAAy7O,iBvWs4tDLkI,EuWl4tDYrnP,UAAcg4N,oBAAuB,SAAA0D,GAEzCh4N,KAAK0rN,cAAcmM,SAAWG,EACjCh4N,KAAA0rN,cAAAoM,SAAA,QAAA93N,KAAA0rN,cAAAoM,SAAA,cAGG93N,KAAK0rN,cAAcmM,QAAQG,EAC9Bh4N,KAAA0rN,cAAAoM,SAAA,OAGD93N,KAAK0rN,cAAcjmB,KAAC,EACvBzlM,KAAAy7O,gBvWk4tDDkI,EuW/3tDSrnP,UAAqBq6N,cAAK,SAAAlxB,GAC/BzlM,KAAK0rN,cAAcjmB,KAACA,EACvBzlM,KAAAy7O,eAzJQ,IAAAh/N,GAAAC,EAAAC,EAAAC,EAAmBC,EAAAC,CAAS,OvW2huDrC6mO,GuWjiuDHH,IvWkiuDO9oP,OuWjiuDJM,GAAU,YACV4V,SAAU,wBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OACnBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW+jO,GA2JZ,wCAAAhnO,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6uM,SAAA7uM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAADipP,IA3JgCtmG,GAAA,GvWyiuD5B+mG,GAAsCpkP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GwWrjuD/DirO,KACCnhM,KAAA,GAAAxQ,UAAAgxM,KAuBFY,GAAA,WAA8C,QAACC,MAAA,MxWmjuD3CA,GwWxkuDMH,IxWykuDF1pP,OwWxkuDPM,GAAS,WxWykuDEqX,SwWvkuDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAA6sF,IACX58E,GAAA,YACAwoC,GACAkb,GACAnuB,IxW0kuDU5qL,cwWvkuDVsxO,IxW0kuDU5tO,WwWvkuDV47L,GACA2C,GACAkX,OAE4Cg5B,MxW+kuD1CC,GAAsCxkP,MAAQA,KAAKuY,WAAc,WACjE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF6rO,GAAuCzkP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DsrO,GAAuC1kP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IyW/muDvEirO,GAAA,SAAA/qO,GzWynuD/B,QyWpluDHgrO,GAQCrvC,EAAMoc,EAAoBr3M,EAuF1BC,EAAAqe,EAAApe,GA9FO,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IACxCqD,GAAAkyM,eAEAlyM,EAAAsuN,sBAAqBA,EACrBtuN,EAAAiX,SACCjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,OAGRv1B,EAAKmX,MAELnX,EAAKwhP,0BAA4B9pP,MAAG,EAAOokB,MAAA,gBAAoBpkB,MAAU,EAAAokB,MAAO,cAAWmhO,cAAoB,EAACwE,mBAAiB,IAAa/pP,MAAQ,EAAEokB,MAAO,MAAM2lO,mBAAkB,IAAW/pP,MAAA,EAAAokB,MAAa,aAAepkB,MAAO,EAAEokB,MAAQ,aAAapkB,MAAO,EAAAokB,MAAA,YAAwBpkB,MAAK,EAAKokB,MAAE,aAAoBpkB,MAAK,EAAKokB,MAAE,aAAepkB,MAAA,EAAAokB,MAAA,cACtV9b,EAAKg9O,mBAAqBtlP,MAAK,EAAKokB,MAAK,mBAAwBpkB,MAAI,EAAAokB,MAAU,UAAOmhO,cAAU,IAAiBvlP,MAAG,EAAKokB,MAAK,YAAgBpkB,MAAE,EAAAokB,MAAa,QAAOpkB,MAAU,EAAAokB,MAAO,QAAUmhO,cAAW,IAAWvlP,MAAG,EAAKokB,MAAK,UAAOpkB,MAAA,EAAkBokB,MAAG,kBAAiBpkB,MAAS,EAACokB,MAAQ,cAAgBpkB,MAAE,EAAOokB,MAAG,eAC7T9b,EAAKk9O,wBAAyBxlP,MAAQ,EAAEokB,MAAO,oBAAqBpkB,MAAO,EAAEokB,MAAS,SAAEmhO,cAAoB,IAASvlP,MAAO,EAAEokB,MAAQ,UAAGmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,OAAApkB,MAAA,EAAAokB,MAAA,qBAAApkB,MAAA,EAAAokB,MAAA,UAAApkB,MAAA,EAAAokB,MAAA,SAAApkB,MAAA,EAAAokB,MAAA,cAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,aAAApkB,MAAA,GAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,cAAApkB,MAAA,GAAAokB,MAAA,WAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,UACzI9b,EAAKm9O,uBAAuBzlP,MAAQ,EAAEokB,MAAO,YAAApkB,MAAA,EAA2BokB,MAAI,UAASmhO,cAAM,IAAcvlP,MAAY,EAACokB,MAAO,WAC7H9b,EAAKo9O,qBAAwB1lP,MAAK,EAAAokB,MAAU,8BAA8BpkB,MAAO,EAAAokB,MAAW,aAAamhO,cAAa,IAAUvlP,MAAE,EAAOokB,MAAI,YAAiBpkB,MAAO,EAACokB,MAAG,kBAAyBpkB,MAAG,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,aAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,EAAAokB,MAAA,gBAAAmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,gBAAApkB,MAAA,GAAAokB,MAAA,QAAApkB,MAAA,GAAAokB,MAAA,SAAApkB,MAAA,GAAAokB,MAAA,UAAApkB,MAAA,GAAAokB,MAAA,aAAApkB,MAAA,GAAAokB,MAAA,cAAApkB,MAAA,GAAAokB,MAAA,aAAApkB,MAAA,GAAAokB,MAAA,gBAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,SACrM9b,EAAKq9O,2BAAyB3lP,MAAU,EAAAokB,MAAO,YAAcpkB,MAAU,EAAAokB,MAAO,UAAYmhO,cAAa,IAAOvlP,MAAQ,EAAEokB,MAAO,UAAapkB,MAAM,EAAGokB,MAAO,UAAEpkB,MAAgB,EAAAokB,MAAA,WAE9K9b,EAAKs9O,uBAAsB5lP,MAAU,EAAAokB,MAAO,aAAgBpkB,MAAQ,EAAEokB,MAAO,WAAYmhO,cAAc,IAAQvlP,MAAM,EAAGokB,MAAO,cAAEpkB,MAAqB,EAACokB,MAAQ,gBAC/J9b,EAAKu9O,oBAAsB7lP,MAAO,EAAGokB,MAAO,eAAepkB,MAAM,EAAGokB,MAAO,aAASmhO,cAAkB,IAAQvlP,MAAK,EAAKokB,MAAE,qBAA4BpkB,MAAG,EAAKokB,MAAK,2BAA8BpkB,MAAO,EAAAokB,MAAU,kBAAApkB,MAAA,EAAAokB,MAAA,oBAAApkB,MAAA,EAAAokB,MAAA,kBAAApkB,MAAA,EAAAokB,MAAA,aAAApkB,MAAA,EAAAokB,MAAA,SAAApkB,MAAA,EAAAokB,MAAA,SAAApkB,MAAA,GAAAokB,MAAA,mBAElN9b,EAAKw9O,oBAAA9lP,MAA6B,EAAAokB,MAAS,gBAAepkB,MAAO,EAAEokB,MAAM,MAAAmhO,cAAkB,IAAavlP,MAAK,EAAGokB,MAAM,SAASmhO,cAAY,IAASvlP,MAAM,EAAAokB,MAAS,SAAS,EAAGpkB,MAAM,EAAAokB,MAAU,UAC/L9b,EAAK0hP,2BAA4BhqP,MAAO,EAAEokB,MAAM,QAAQpkB,MAAA,EAAAokB,MAAA,iBAAAmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,EAAAokB,MAAA,aAAApkB,MAAA,EAAAokB,MAAA,oBAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,EAAAokB,MAAA,uBAAApkB,MAAA,GAAAokB,MAAA,iBAAApkB,MAAA,GAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,WAAApkB,MAAA,GAAAokB,MAAA,WAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,WAAApkB,MAAA,GAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,YAAApkB,MAAA,GAAAokB,MAAA,kBAAApkB,MAAA,GAAAokB,MAAA,aAAApkB,MAAA,GAAAokB,MAAA,eACxD9b,EAAK2hP,0BAA0BjqP,MAAO,EAAEokB,MAAM,QAE9C9b,EAAK4hP,wBAAAlqP,MAAkC,EAAEokB,MAAM,QAC/C9b,EAAK6hP,kCAAkCnqP,OAAQ,EAAEokB,MAAM,MAAQpkB,MAAO,EAAEokB,MAAM,IAAImhO,cAAY,IAASvlP,MAAI,EAAKokB,MAAI,MAASpkB,MAAI,EAAKokB,MAAI,MAASpkB,MAAI,EAAKokB,MAAK,MAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAQ,GAAAokB,MAAU,OAAMpkB,MAAM,GAAAokB,MAAa,OACl3B9b,EAAK8hP,gCAAgCpqP,OAAS,EAAAokB,MAAM,OAAUpkB,MAAO,EAAEokB,MAAM,MAAQpkB,MAAA,EAAYokB,MAAK,MAAIpkB,MAAS,EAAAokB,MAAM,MAASpkB,MAAA,EAAAokB,MAAA,MAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,OAAApkB,MAAA,GAAAokB,MAAA,KAAAmhO,cAAA,IAElIj9O,EAAK+hP,8BAAiBrqP,MAAA,EAAAokB,MAAA,SAAApkB,MAAA,EAAAokB,MAAA,OAAAmhO,cAAA,IAAAvlP,MAAA,EAAAokB,MAAA,UACtB9b,EAAIgiP,czW6kuDE,KyW5kuDL,GAAIC,GAAC,EAAYA,EAAQ,EAAGA,IAC5BjiP,EAAAgiP,YAAAC,IAAA,CA8DD,OzWghuDMjiP,GyW3kuDLkiP,YzW4kuDSt9O,OyW1kuDPA,MAAQ,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAC,IAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAK,KAAK,KAAK,KAAK,KAAK,KAAKkX,MAAM,UACrKlX,MAAA,4JAAAkX,MAAA,UAEDu0C,QAAW,2BAAiB,2BAAM,gxBAClChzC,UAAUywK,MAAQ,KAAO,GAAG,KAC5BxwK,QAAWwwK,MAAW,aACtBuD,UAAa,WACZxC,YAAA,OAGF7uL,EAAKmiP,kBAAmBzqP,MAAQ,EAAEokB,MAAO,kCAAkCpkB,MAAQ,EAAEokB,MAAO,UAAWpkB,MAAQ,EAAEokB,MAAO,UAAWpkB,MAAQ,EAAEokB,MAAO,sBAAuBpkB,MAAQ,EAAEokB,MAAO,eAAgBpkB,MAAQ,EAAEokB,MAAO,sBAAuBpkB,MAAQ,EAAEokB,MAAO,sBAAuBpkB,MAAQ,EAAEokB,MAAO,sBAAuBpkB,MAAQ,EAAEokB,MAAO,wBAAyBpkB,MAAQ,EAAEokB,MAAO,gBAAiBpkB,MAAS,GAAEokB,MAAO,cAAepkB,MAAS,GAAEokB,MAAO,eAAgBpkB,MAAS,GAAEokB,MAAO,gBACre9b,EAAKoiP,iBAAoB1qP,MAAM,EAAGokB,MAAO,iCAAkCpkB,MAAK,EAAGokB,MAAO,UAAUpkB,MAAS,EAAGokB,MAAM,UAAYpkB,MAAM,EAAGokB,MAAO,sBAAoBpkB,MAAU,EAAAokB,MAAO,eAAoBpkB,MAAO,EAAEokB,MAAA,sBAA2BpkB,MAAO,EAAAokB,MAAA,sBAAmBpkB,MAAA,EAAAokB,MAAA,sBAAApkB,MAAA,EAAAokB,MAAA,wBAAApkB,MAAA,EAAAokB,MAAA,gBAAApkB,MAAA,GAAAokB,MAAA,cAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,gBACzQ9b,EAAKqiP,mBAAa3qP,MAAc,EAAAokB,MAAA,cAAoBpkB,MAAA,EAAAokB,MAA0B,OAAApkB,MAAiB,EAAAokB,MAAA,YAAmBpkB,MAAA,EAAeokB,MAAE,QAAYpkB,MAAQ,EAAMokB,MAAE,QAAiBpkB,MAAC,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,gBAAApkB,MAAA,EAAAokB,MAAA,mBACjL9b,EAAKsiP,WAAa,aAAO,mBAA2B,yBAAC,6FACrDtiP,EAAKuiP,WAAY,gCzW2kuDXviP,EyW1kuDJwiP,YACA,IAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QACtD,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,QACtD,KAAM,MAAM,MAAM,KAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IACtD,4DAGFxiP,EAAKyiP,uBAAmB/qP,MAAA,EAAAokB,MAAA,iCAAApkB,MAAA,EAAAokB,MAAA,UAAApkB,MAAA,EAAAokB,MAAA,UAAApkB,MAAA,EAAAokB,MAAA,sBAAApkB,MAAA,EAAAokB,MAAA,eAAApkB,MAAA,EAAAokB,MAAA,sBAAApkB,MAAA,EAAAokB,MAAA,sBAAApkB,MAAA,EAAAokB,MAAA,sBAAApkB,MAAA,EAAAokB,MAAA,wBAAApkB,MAAA,EAAAokB,MAAA,gBAAApkB,MAAA,GAAAokB,MAAA,cAAApkB,MAAA,GAAAokB,MAAA,eAAApkB,MAAA,GAAAokB,MAAA,gBzW0kuDlB9b,EyWzkuDL0iP,kBzW0kuDS99O,OyWxkuDNkX,MAAQ,0BAA2BlX,MAAQ,KAAO,MAAO,MAAO,MAAO,KAAK,MAAO,MAAO,MAAO,KAAO,SACxGkX,MAAQ,0BAA0BlX,MAAQ,KAAO,KAAO,KAAO,KAAO,KAAO,IAAO,KAAO,KAAO,KAAO,QAC1GkX,MAAA,yBAAAlX,MAAA,8DAEDyrD,QAAA,uJAGFrwD,EAAK2iP,wBAAejrP,MAAA,EAAAokB,MAAA,qBAAApkB,MAAA,EAAAokB,MAAA,OAAApkB,MAAA,EAAAokB,MAAA,YAAApkB,MAAA,EAAAokB,MAAA,QAAApkB,MAAA,EAAAokB,MAAA,QAAApkB,MAAA,EAAAokB,MAAA,WAAApkB,MAAA,EAAAokB,MAAA,gBAAApkB,MAAA,EAAAokB,MAAA,mBzWykuDd9b,EyWxkuDLivO,cACA59C,UAAa,WzWykuDJ45C,YyWvkuDP,UAAW,sBACX,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,OAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAC7I,KAAM,OAAS,KAAM,QAAS,KAAM,OAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAC7I,KAAM,QAAS,KAAM,OAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,OAAS,KAAM,QAAS,KAAM,QAC7I,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAC7I,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,MAAS,KAAM,QAAS,KAAM,QAC7I,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAC7I,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAC7I,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAC7I,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAAS,KAAM,QAC7I,KAAM,QAAS,KAAM,QAAS,KAAM,QAAM,0FAC3C,uCAEDtxL,OAAS,0CzWykuDAvpC,SACI4+N,WyWvkuDXv8C,QAAA,sBAEDmwD,aAAA,UACAC,oBAAA,YAEF7iP,EA/FDmhP,GACgDI,EACxChrO,GAiGRgrO,EAACtoP,UAAA+H,SAAA,aAGDugP,EAACtoP,UAAAgI,YAAA,azWwkuDEsgP,EyWrkuDGtoP,UAAY6pP,cAAiB,SAAYb,GAC9CtlP,KAAAqlP,YAAAC,IAAAtlP,KAAAqlP,YAAAC,GA/IW,IAAA7oO,GAAAC,EAAAC,EAAaC,EAAAC,EAAAC,CAAS,OzWutuD/B8nO,GyW7tuDHH,IzW8tuDO/pP,OyW7tuDPM,GAAU,YACV4V,SAAU,iBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWglO,GAgJZ,wCAAAjoO,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6uM,SAAA7uM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAADkqP,IAhJ0BvnG,GAAA,GzWquuDtB+oG,GAA2CpmP,MAAQA,KAAKuY,WAAc,WACtE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFytO,GAA4CrmP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DktO,GAA4CtmP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0WxvuDlE6sO,GAAA,SAAA3sO,G1WkwuDpC,Q0WzvuDH4sO,GAQCjxC,EAAcoc,EAmBdlc,EAAAn7L,EAAAC,EAAAqe,EAAApe,GA1BO,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IA0B/C,OAzBOqD,GAAAkyM,eACClyM,EAAAsuN,wBACDtuN,EAAAoyM,cAAqBA,EACrBpyM,EAAAiX,SACCjX,EAAAkX,YAAiBA,EACjBlX,EAAAu1B,OAGRv1B,EAAKmX,M1WwvuDCnX,E0WvvuDJojP,oBACA1rP,MAAO,SAAOokB,MAAO,WACrBpkB,MAAO,MAAOokB,MAAO,QACrBpkB,MAAO,QAAQokB,MAAO,UACtBpkB,MAAO,OAAQokB,MAAO,SACtBpkB,MAAO,OAAQokB,MAAO,SACtBpkB,MAAO,OAAQokB,MAAO,SACtBpkB,MAAO,OAAAokB,MAAc,SACrBpkB,MAAO,eAAcokB,MAAO,iBAC5BpkB,MAAA,aAAAokB,MAAA,e1WyvuDI9b,E0WvvuDJqjP,mBACA3rP,MAAO,EAAGokB,MAAO,oBACjBpkB,MAAA,EAAAokB,MAAA,mB1WyvuDI9b,EAAMsjP,mBAAmB,O0WtvuD/BtjP,EA3BD+iP,GACgDI,EACxC5sO,G1WkxuDL4sO,E0WrvuDWlqP,UAAWqqP,mBAAe,SAAA5zO,GACvC/S,KAAKkyG,MAAArzF,KAAWC,MAAQD,KAAAE,UAAe7kB,EAAgB,WAAA6Y,EAAA,WACvD/S,KAAK4mP,YAAA/nO,KAAkBE,UAAW/e,KAACkyG,MAAA,QACnClyG,KAAK6mP,kBAAkB7mP,KAAAkyG,OACvBlyG,KAAKsG,WAAatG,KAAG8mP,eAAiB9mP,KAAKkyG,OAC3ClyG,KAAK+mP,cAAgB/mP,KAAGgnP,YAAAhnP,KAAAkyG,OACxBlyG,KAAAwa,IAAAhP,gB1WuvuDEg7O,E0WpvuDSlqP,UAAAuqP,kBAAA,SAAA30I,G1W0vuDL,IALA,G0WpvuDLjjF,IACAxe,KAAM,YACL2W,OAAA8qF,GAEFpiF,GAAYb,GACXa,EAAYzxB,QAAM,CAClB,GAAG2Z,GAAE8X,EAAQsnF,O1WqvuDJ,I0WpvuDRp/F,EAAAoP,O1WqvuDY,I0WrvuDR,GAAI6R,GAAE,EAAAxc,EAAAzE,EAAAoP,OAAA6R,EAAAxc,EAAApe,OAAA46B,IAAA,CACT,GAAGguN,GAAMxqO,EAAGwc,EACZguN,GAAA5zL,OAAWr7C,EACX8X,EAAA9Y,KAAAiwO,M1W0vuDDT,E0WpvuDSlqP,UAAAwqP,eAAA,SAAA50I,G1W6vuDL,IARA,G0WpvuDLg1I,IACCC,cAAA,GAEDl4N,GACAxe,KAAM,YACL2W,OAAA8qF,GAEFpiF,GAAYb,GACXa,EAAYzxB,QAAM,CAClB,GAAG2Z,GAAE8X,EAAQsnF,O1WqvuDJ,I0WpvuDRp/F,EAAAoP,O1WqvuDY,I0WrvuDR,GAAK6R,GAAA,EAAAxc,EAAAzE,EAAAoP,OAAA6R,EAAAxc,EAAApe,OAAA46B,IAAA,CACR,GAAAlL,GAAMtR,EAAKwc,EACXnJ,GAAA9Y,KAAA+W,G1WwvuDO,G0WrvuDR/V,EAAAjF,MAAkB,QAAPiF,EAAEvH,MAAK,cAAAuH,EAAAvH,MAAA,aAAAuH,EAAAvH,OAAAuH,EAAAsP,WAAA,CAClB,GAAGvU,GAAEiF,EAAMjF,IACViF,GAAAq7C,QAASr7C,EAAAq7C,OAAOhsC,WAChBtU,EAAAiF,EAAAq7C,OAAAhsC,SAAA,IAAAtU,GAEDm0O,EAAAn0O,IAAA,GAGF,GAAApJ,GAAajP,OAACusB,KAAAigO,EAEd,OADAv9O,GAAOqoJ,OACProJ,G1WuvuDE68O,E0WpvuDalqP,UAAU0qP,YAAA,SAAA90I,G1W6vuDnB,I0W5vuDN,GAAIk1I,MACAC,KAEAC,KACHr4N,GACAxe,KAAM,YACL2W,OAAA8qF,GAEFpiF,GAAYb,GACXa,EAAYzxB,QAAM,CAClB,GAAG2Z,GAAE8X,EAAQsnF,O1WovuDJ,I0WnvuDRp/F,EAAAoP,O1WovuDY,I0WpvuDR,GAAK6R,GAAA,EAAAxc,EAAAzE,EAAAoP,OAAA6R,EAAAxc,EAAApe,OAAA46B,IAAA,CACR,GAAAlL,GAAMtR,EAAKwc,EACXnJ,GAAA9Y,KAAA+W,G1W0vuDO,G0WvvuDR/V,EAAAjF,MAAA,aAAAiF,EAAAvH,MACA42O,EAAArwO,KAAAgB,EAAAjF,MAEAiF,EAAAjF,MAAkB,QAAPiF,EAAEvH,MAAK,cAAAuH,EAAAvH,MAAA,aAAAuH,EAAAvH,OAAAuH,EAAAsP,WAAA,CAClB,GAAGvU,GAAEiF,EAAMjF,IACViF,GAAAq7C,QAASr7C,EAAAq7C,OAAOhsC,WAChBtU,EAAAiF,EAAAq7C,OAAAhsC,SAAA,IAAAtU,GAEDu0O,EAAAv0O,IAAA,E1WsvuDQ,G0WpvuDRiF,EAAAjF,MAAQiF,EAAIsP,WAAM,CAClB,GAAGvU,GAAEiF,EAAMjF,IACViF,GAAAq7C,QAASr7C,EAAAq7C,OAAOhsC,WAChBtU,EAAAiF,EAAAq7C,OAAAhsC,SAAA,IAAAtU,GAEDq0O,EAAAr0O,IAAA,GAIF,GAAAw0O,GAAsB7sP,OAACusB,KAAAmgO,EAEvBG,GAAIv1F,MACJ,IAAAw1F,GAAuB9sP,OAACusB,KAAAqgO,EAUxB,OARAE,GAAAx1F,OAEAq1F,EAAar1F,QAEZy1F,KAAOF,EACPvpO,MAAAwpO,EACCE,UAAAL,I1WovuDAb,E0W/uuDElqP,UAAiBqrP,aAAA,WAErB3nP,KAAAy1M,cAAA1B,iBADmB,0BACnB/zM,KAAA4mP,c1WivuDEJ,E0W7uuDOlqP,UAAesrP,cAAA,WACxB3sP,SAAA+xD,eAAA,0BAAA1tC,S1W+uuDEknO,E0W7uuDHlqP,UAUCurP,gBAAA,SAAAl7C,GARA,GAAItpM,GAAArD,KAGA8nP,EAAan7C,EAAI,GACrBo7C,EAAiB,GAAGh8C,W1W2uuDdg8C,G0W1uuDA9uM,OAAS,SAAWh8C,GACxBoG,EAAA2kP,SAAAD,EAAAp+O,SAEFo+O,EAAAE,WAAAH,I1W4uuDEtB,E0WzuuDElqP,UAAA0rP,SAAA,SAAAE,G1W0uuDE,I0WxuuDLloP,KAAAkyG,MAAArzF,KAAAC,MAAAopO,G1W2uuDK,M0W1uuDLjrP,GAEA,WADAwmJ,OAAA,2BAAOxmJ,GAIR+C,KAAK4mP,YAAAsB,EACLloP,KAAK6mP,kBAAkB7mP,KAAAkyG,OACvBlyG,KAAKsG,WAAatG,KAAG8mP,eAAiB9mP,KAAKkyG,OAC3ClyG,KAAK+mP,cAAgB/mP,KAAGgnP,YAAAhnP,KAAAkyG,OACxBlyG,KAAAwa,IAAAhP,eArLW,IAAAiR,GAAAC,EAAAC,EAAAC,EAAkBC,EAAAC,EAAAC,CAAS,O1Wi6uDpCypO,G0Wv6uDHH,I1Ww6uDO3rP,O0Wv6uDPM,GAAU,YACV4V,SAAU,sBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW4mO,GAsLZ,wCAAA7pO,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6uM,SAAA7uM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAg3L,SAAAh3L,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA/hB,GAAA,mBAAAA,GAAA,oBAAA+hB,GAAAriB,UAAD8rP,IAtL+BnpG,GAAA,G1W+6uD3B8qG,GAA+BnoP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G2Wp7uD/DgvO,KACEllM,KAAM,GAAAxQ,UAASiyM,KAChBzhM,KAAA,QAAAxQ,UAAA6zM,KA0BF8B,GAAA,WAAwC,QAACC,MAAA,M3Wk7uDrCA,G2W18uDHH,I3W28uDOztP,O2W18uDPM,GAAS,W3W28uDEqX,S2Wz8uDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAA4wF,IACX3gF,GAAA,YACAwoC,GACAjT,GACAgtB,GACAmB,GACAmmB,I3W48uDUl/N,c2Wz8uDVuyO,GACA4B,I3W48uDUzwO,W2Wz8uDV47L,GACA2C,GACAkX,OAEsC+8B,M3Wi9uDpC9oG,GAAkBtlJ,EAAoB,IAGtCquP,GAAsCvoP,MAAQA,KAAKuY,WAAc,WACjE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF4vO,GAAuCxoP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DqvO,GAAuCzoP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4W5gvD9DgvO,GAAA,SAAA9uO,G5WqhvDxC,Q4WnhvDH+uO,GAQChwN,EAAY7E,EAAE1Z,EAAYE,EAC1BC,EAAAC,GARO,GAAAnX,GAAMuW,EAANpd,KAAcwD,KAAAsa,EAAAC,IAAAva,IAQrB,OAPOqD,GAAAs1B,OAAOA,EACPt1B,EAAAywB,UAEAzwB,EAAA+W,KAAMA,EACN/W,EAAAiX,SACCjX,EAAAkX,YAAsBA,E5WmhvDxBlX,EAAMmX,IAAMA,E4WjhvDlBnX,EATDklP,GACQI,EAIA/uO,G5WwhvDL+uO,E4WjhvDUrsP,UAAiBi/M,OAAE,SAAaqtC,GAC5C5oP,KAAK24B,OAAKgC,UAAA,QAAqB,YAAE,YAAAiuN,IACjC5oP,KAAKoa,KAAAy9G,kBAAgB,GACrB73H,KAAA8zB,QAAAzU,QAjBW,IAAA5C,GAAAC,EAAAC,EAAAC,EAAAC,EAAsBC,CAAS,O5WqivDxC6rO,G4W1ivDHH,I5W2ivDO9tP,O4W1ivDPM,GAAU,YACV4V,SAAU,iBACVE,SAAA5W,EAAiB,MAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW+oO,GAkBZ,wCAAAhsO,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA8iI,GAAA,GAAAA,GAAA,IAAA9iI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4iI,GAAA,GAAAA,GAAA,IAAA5iI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAADiuP,IAlBmCtrG,GAAA,G5WkjvD/BwrG,GAA2C7oP,MAAQA,KAAKuY,WAAc,WACtE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFkwO,GAA4C9oP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D2vO,GAA4C/oP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6WxjvDzDsvO,GAAA,SAAApvO,G7WskvD7C,Q6W9hvDHqvO,GAWOC,EAAQ1zC,EACdmc,EAAAh5L,EAAA7E,EAAA1Z,EAAAE,EAAAC,EAAAC,GAXO,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAA0BC,IAAAva,IAWjC,OAVOqD,GAAA6lP,eACA7lP,EAAAmyM,mBACAnyM,EAAAsuN,sBAAcA,EACdtuN,EAAAs1B,OAAOA,EACPt1B,EAAAywB,UAEAzwB,EAAA+W,KAAMA,EACN/W,EAAAiX,SACCjX,EAAAkX,YAAsBA,EA9C/BlX,EAAAmX,MACAnX,EAAA8lP,gBAAgB,MAMhB9lP,EAAA+lP,iBAAiB,MAOT/lP,EAAA+vO,eAAoC,UAAU,WAE9C/vO,EAAAgmP,cAAe,S7WikvDhBhmP,EAAMimP,gBAAkB,M6WjivD9BjmP,EAZDwlP,GACQI,EAEArvO,G7W6ivDLqvO,E6WjjvDF3sP,UAAAitP,cAAA,WALA,GAAIlmP,GAACrD,I7WwjvDCA,M6WvjvDQmpP,kBAAKlpP,OAAkBivD,aAAclvD,KAAAwpP,aAAoBplP,cAAeqlP,aAClFzpP,KAAC0pP,kBAAoBtlP,cAAOqlP,aAAkB,KAAW,EAAI,IAAC5oO,WAAA,KAClE7gB,KAAAopP,kBAAmBnpP,OAAKivD,YAAc,IAAEruC,WAAI,KAC5C7W,WAAW,WAAQ3G,EAAKsmP,eAAkB,IAC1C3/O,WAAA,WAAA3G,EAAAmX,IAAAhP,gBAAA,K7WyjvDEy9O,E6WzivDmB3sP,UAAA6e,gBAAA,WACrBnb,KAAAupP,iB7W2ivDEN,E6WxivDkB3sP,UAAA+H,SAAA,WAEpBrE,KAAKy7O,eACLz7O,KAAK4pP,oBACL5pP,KAAK6pP,iBACL7pP,KAAK8pP,WACL9pP,KAAA+pP,kB7WyivDEd,E6WtivDsB3sP,UAAOutP,eAAS,WACxC7pP,KAAKgqP,oBAAoB,GAAK3tP,OAAC,E7WuivDzB,K6WtivDL,GAAK48B,GAAA,EAAAA,EAAA,GAAAA,I7WuivDIj5B,K6WrivDPgqP,oBAAmBhzO,MAAKnE,IAAW,EAALomB,EAAK,GAAQpY,WAC3CyP,MAAA,YAAkBvtB,KAAE4M,MAAA,IAAA5M,KAAAqlC,UAAAvnB,WACtBopO,WAAA,GAAAhxN,K7WwivDCgwN,E6WpivDmB3sP,UAAawtP,SAAA,WAClC9pP,KAAKkqP,cAAc,GAAK7tP,OAAM,E7WqivDxB,K6WpivDL,GAAK48B,GAAA,EAAAA,EAAa,EAACA,I7WqivDVj5B,K6WnivDPkqP,cAAYlzO,MAAUmzO,GAAC,SAAiB,EAAJlxN,GAAMpY,WAC5CopO,WAAAlnP,KAAA4M,MAAA,IAAA5M,KAAAqlC,UAAAvnB,WAAA,O7WsivDCooO,E6WlivDqB3sP,UAAOytP,eAAS,WACvC/pP,KAAKoqP,mBAAmB,GAAK/tP,OAAC,E7WmivDxB,K6WlivDL,GAAK48B,GAAA,EAAAA,EAAA,EAAAA,I7WmivDIj5B,K6WjivDPoqP,mBAAiBpzO,MAAUuZ,QAAS,WAAgB,EAAV0I,GAAWpY,WACvDopO,WAAAlnP,KAAA4M,MAAA,IAAA5M,KAAAqlC,UAAAvnB,WAAA,O7WoivDCooO,E6WthvDF3sP,UAAAstP,kBAAA,WAVA,GAAIvmP,GAACrD,IAELA,MAAKqqP,cAAa,K7WiivDZrqP,K6WhivDLkpP,aAAK9vB,kBAAqBz+M,UAAa,SAAM1S,GAG7C5E,EAAAgnP,cAAWhnP,EAAQinP,aAASriP,GAC5B+B,WAAK,WAAc3G,EAAAmX,IAAAhP,gBAAA,IAEjBnI,EAAAsmP,iB7WgivDDV,E6W1hvDqB3sP,UAAOqtP,YAAA,WAC9B,GAEIrW,GAACp5O,EAA8B,IAEnC8F,MAAIyzO,4BAAsBH,EAA4B96O,WAEtD,IAAIy7O,GANqB,MAMGj0O,MAAAyzO,4BAAA,uBAC5BzzO,MAAIuqP,QAAA,GAAeluP,OAAI,EACvB,IAAAmuP,GAAmB,GAAAnuP,OAAS,EAC5BmuP,GAAaxzO,MAAK,kBAElB,IAAIyzO,GAAA,C7WuhvDE,KACI,I6WrhvDP,GAAAxxN,GAAS,EAAGA,EAAKj5B,KAAMqqP,cAAahsP,OAAO46B,IAC3CwxN,EAAY1nP,KAAK4J,MAAsB,IAAf5J,KAACqlC,UACzBoiN,EAAaxzO,MAAKhX,KAAEqqP,cAASpxN,GAAAl+B,MAAA0vP,I7WshvDlBzqP,KAAKuqP,Q6WrhvDGvzO,MAAOgrI,SACXjvI,KAAM/S,KAAKqqP,cAAcpxN,GAAI9Z,MAC7Bkc,KAAAr7B,KAAAqqP,cAAApxN,GAAAl+B,OAEL2vP,KAAK,uBAAe1qP,KAAAqqP,cAAApxN,GAAAl+B,MAAA2X,cAC9Bg2G,MAAA+hI,G7WuhvDO,I6WnhvDiB,OAAxBzqP,KAAKspP,gBAAuB,CAG5BtpP,KAAKuqP,QAAU,GAAIluP,OAAM,E7WkhvDd,K6WjhvDV,GAAA48B,GAAS,EAAGA,EAAK,IAAMA,IACvBwxN,EAAY1nP,KAAK4J,MAAY,IAAT5J,KAAOqlC,U7WkhvDbpoC,KAAKuqP,Q6WjhvDAvzO,MAAEgrI,SACNjvI,KAAM,YAAakmB,EAAApY,WACnBwa,KAAApC,EAAApY,YAEN6pO,KAAK,YACdhiI,MAAA+hI,KAKJ,MAAK5tO,I7WihvDC7c,K6WhhvDLsyO,cAEA59C,UAAQ,WACR13I,OAAAh9C,KAAWw1M,iBAAYjC,sBACvB+6B,UAASkc,E7WghvDA/2O,S6W9gvDRyiL,gBAAY,UACZm8C,WAAAv8C,OAAA91L,KAAAozO,iBAIiB,OAAlBpzO,KAAKspP,kBACLtpP,KAAKsyO,aAAa7+N,QAAQopN,WAAaoX,EACvCj0O,KAAIsyO,aAAK7+N,QAAiBwpE,OAAQj9E,KAAAspP,gBACf,QAAlBtpP,KAAKqpP,gBACLrpP,KAAAsyO,aAAA7+N,QAAA4gO,YAAA,a7WkhvDA4U,E6Wr7uDF3sP,UAAAm/O,aAAA,W7W27uDM,I6W5gvDL,GALGp4O,GAAOrD,KACP2gB,EAASwwK,OAAmBvvK,QAAS,OACrClB,EAASC,EAAWgB,QAAEM,SAAA,WACtByxC,EAAQ,GAAGr3D,OAAI,GACnBsuP,EAAe,GAAItuP,OAAK,GACvB48B,EAAS,EAAIA,EAAK,EAAAA,IAClB0xN,EAAA3zO,KAAA,GAAA3a,OAAA,G7W8gvDK2D,M6W1gvDH2xN,sBAAW/F,qBAAS,aAAAlrM,EAAAC,EAAA,OACrBhG,UAAU,SAAQ1S,GAIlBA,EAAKA,KAAIkX,MAAQ,O7WwgvDT,K6WvgvDP,GAAA8Z,GAAO,EAAMA,EAAGhxB,EAAQyrD,OAAGr1D,OAAA46B,IAAA,CAC3By6B,EAAK18C,KAAIiiB,EAAEpY,W7WwgvDA,K6WvgvDV,GAAA+pO,GAAS,EAAIA,EAAK,EAAKA,IACvBD,EAAAC,GAAA5zO,KAAAjU,KAAA4M,MAAA,IAAA5M,KAAAqlC,WAIF,GAAIyiN,GAAQnwP,OAAOusC,UAAUh/B,EAAKA,MAC9B6iP,EAAQpwP,OAAOusC,UAAUh/B,EAAKA,MAC9B8iP,EAAQrwP,OAAOusC,UAAUh/B,EAAKA,MAC9B+iP,EAAQtwP,OAAOusC,UAAUh/B,EAAKA,MAC9BgjP,EAAQvwP,OAAOusC,UAAUh/B,EAAKA,MAClCijP,EAAUxwP,OAAGusC,UAAYh/B,OACzB6iP,GAAM7iP,KAAO0iP,EAAS,GACtBI,EAAM9iP,KAAO0iP,EAAS,GACtBK,EAAM/iP,KAAO0iP,EAAS,GACtBM,EAAMhjP,KAAO0iP,EAAS,GACtBO,EAAMjjP,KAAO0iP,EAAK,GAElBG,EAAI9oE,MAAS,CACb,IAAA3hH,GAAS,GAAOhkE,OAAO,EACvBgkE,GAAO3lE,OAASusC,UAAQ0jN,EAAC,G7WwgvDjB,K6WrgvDP,GAFGrP,GAAMj7K,EAAMziB,OAAO,SAAOutM,EAAAxnE,GAAA,MAAAA,IAAAwnE,IAC9BC,EAAS9P,EAAMj7K,EAAMhiE,OACpB46B,EAAU,EAAEA,EAAKhxB,EAAKyrD,OAAAr1D,OAAA46B,IACtB0xN,EAAA,GAAA3zO,KAAAo0O,EAIDP,GAAK5iP,KAAA0iP,EAAe,G7WogvDZtnP,E6WngvDPgoP,iBAEApjP,MAAM6iP,EAAQD,GACdn3L,SACAhzC,UAASA,EAETC,QAASA,EACT+zK,UAAW,OACVxC,YAAA,O7WmgvDM7uL,E6WhgvDPioP,qBACArjP,MAAMijP,EAAQH,EAAAC,GACdt3L,SACAhzC,UAASA,EAETC,QAASA,EACT+zK,UAAW,OACXxC,YAAA,O7WigvDO7uL,E6W9/uDPkoP,gBACAtjP,MAAMijP,EAAQD,EAAAD,GACdt3L,SACAhzC,UAASA,EAETC,QAASA,EACT+zK,UAAW,OACXxC,YAAA,OAMA7uL,EAAAmX,IAAAhP,kBAUJy9O,EAAC3sP,UAAAgI,YAAA,a7Wo/uDE2kP,E6Wh/uDoB3sP,UAASkvP,gBAAa,WAC5CxrP,KAAK24B,OAAKgC,UAAA,QAAiB,YAAO,cAClC36B,KAAKoa,KAAAy9G,kBAAsB,GAC3B73H,KAAA8zB,QAAAI,e7Wk/uDE+0N,E6W/+uD0B3sP,UAAAguP,aAAA,SAAAlwM,GAC5B,GAAIzwC,E7Wg/uDE,I6W/+uDU,GAAfywC,EAAA/7C,OACA,QAAAtD,MAAA,GAAAokB,MAAA,IAEDxV,GAAO,GAAMtN,OAAO,GACpBsN,EAAKqN,MAASjc,MAAK,MAASokB,MAAM,O7Wg/uD5B,K6W/+uDL,GAAK8Z,GAAC,EAAMA,EAAImhB,EAAQ/7C,OAAO46B,IAEV,MAApBmhB,EAAOnhB,GAAMoC,KACb1xB,EAAAqN,MAAAjc,MAAAq/C,EAAAnhB,GAAAoC,KAAAlc,MAAAi7B,EAAAnhB,GAAAlmB,OAEsB,MAAfqnC,EAAMnhB,GAAEpmB,IACflJ,EAAAqN,MAAAjc,MAAAq/C,EAAAnhB,GAAApmB,GAAAsM,MAAAi7B,EAAAnhB,GAAAlmB,MAGF,OAAApJ,GA/Q+B,IAAA8S,GAAAC,EAAAC,EAAAC,EAAAE,EAAAC,EAAAC,EAAAC,EAAAC,CAtBgB,O7WsxvD7C4rO,KACIpuP,OAAOM,GAAoB,WAAG,qBAC9B+tP,GAAyC,cAAeruP,S6WjwvDpCuuP,EAAA3sP,UAAA,4B7WmwvDxBwsP,IACIpuP,OAAOM,GAAoB,WAAG,gBAC9B+tP,GAAyC,cAAeruP,S6WpwvDrCuuP,EAAA3sP,UAAA,uB7WswvDvBwsP,IACIpuP,OAAOM,GAAoB,WAAG,eAC9B+tP,GAAyC,cAAeruP,S6WrwvD/DuuP,EAAA3sP,UAAA,sB7WuwvDGwsP,IACIpuP,OAAOM,GAAuB,cAAG,iBACjC+tP,GAAyC,cAAeplM,UACxDolM,GAAyC,wBACzCA,GAAyC,wB6W/vvD/C,KAvCWE,EAA2B3sP,UAAA,sB7WwyvDpC2sP,E6WhzvDHH,I7WizvDOpuP,O6WhzvDPM,GAAU,YACV4V,SAAU,uBACVE,SAAQ5W,EAAA,M7WizvDGiX,Q6W/yvDV,IAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWqpO,GAuSZ,wCAAAtsO,MAAA,KAAA27M,SAAA37M,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAg1L,SAAAh1L,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4uM,SAAA5uM,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAliB,OAAA,mBAAAoiB,MAAA,KAAA0iI,GAAA,GAAAA,GAAA,IAAA1iI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAwiI,GAAA,GAAAA,GAAA,IAAAxiI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAqgI,GAAA,GAAAA,GAAA,IAAArgI,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAogI,GAAA,GAAAA,GAAA,IAAApgI,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAliB,GAAA,mBAAAA,GAAA,oBAAAkiB,GAAAxiB,UAADuuP,IAvSwC5rG,GAAA,G7WwzvDpCouG,GAAoCzrP,MAAQA,KAAKuY,WAAc,WAC/D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF8yO,GAAqC1rP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DuyO,GAAqC3rP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC9E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8Wt0vDhEkyO,GAAA,SAAAhyO,G9Wo1vDtC,Q8W5xvDHiyO,GAUCt2C,EAAc58K,EAAA7E,EAAY1Z,EA6B1Bo7L,EAAAl7L,EAAAC,EAAAC,GAtCO,GAAAnX,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAAwCC,IAAAva,IAsC/C,OArCOqD,GAAAkyM,aAAMA,EACNlyM,EAAAs1B,OAAOA,EACPt1B,EAAAywB,UACAzwB,EAAA+W,OAEA/W,EAAAmyM,iBAAqBA,EACrBnyM,EAAAiX,SACCjX,EAAAkX,YAAsBA,EAhE/BlX,EAAAmX,MACAnX,EAAAyoP,8BAAgC,GAEhCzoP,EAAA0oP,8BAAU,GACV1oP,EAAA2oP,IAAM,IAEN3oP,EAAA4oP,IAAA,IACA5oP,EAAA61O,oBAAsB,IACtB71O,EAAA6oP,uBAAyB,IACzB7oP,EAAA8oP,gBAAiB,QACjB9oP,EAAA+oP,kBAAkB,OAyBlB/oP,EAAA8lP,gBAA0B,QAC1B9lP,EAAAgpP,YAAsB,IACtBhpP,EAAAipP,YAAc,IACdjpP,EAAAkpP,eAAyB,IACzBlpP,EAAAmpP,eAAe,IACfnpP,EAAAopP,gBAAiB,IA2BhBppP,EAAKqpP,kBAAA,IACLrpP,EAAKg2O,yBAAyB,EAC9Bh2O,EAAK81O,sBAAyBlxO,QAASyrD,WAOvCrwD,EAAK+1O,sBAAyBnxO,QAAOyrD,WACrCrwD,EAAKm2O,0BAA4B,GAAIn9O,OAAM,GAC3CgH,EAAKo2O,0BAA4B,GAAAp9O,OAAS,GAG1CgH,EAAK00N,sBAAA,GAA4B17N,OAAI,GACrCgH,EAAKs0N,0BAA0B,GAAKj9D,KACpCr3J,EAAK8mO,wBAAoB,KACzB9mO,EAAK6mO,aAAA,KACL7mO,EAAKi2O,qBAAA,E9WiyvDCj2O,E8WhyvDLk2O,2BACA9zC,KAAA,EACC2nB,UAAA/pN,EAAA0oP,+BAGF1oP,EAAKq2O,UAAA,EAELr2O,EAAKs2O,gBAAaxtO,YAAA,WAA+B,MAAC9I,GAACu2O,cAASv2O,EAAS61O,qB9W+xvD/D71O,EAAMkyM,aAAaX,sBAAsBj6L,UAAU,SAAU1S,GAAQ,MAAO5E,GAAMmX,IAAIhP,iB8W9xvD5FnI,EAvCDooP,GACQI,EAEAjyO,G9Wq0vDLiyO,E8Wz2vDGvvP,UAAsBitP,cAAe,WAC1CvpP,KAAKmsP,gBAAiBppP,KAAG4M,OAAU1P,OAAEivD,YAAkB,KAAM,GAAGruC,WAAK,KACrE7gB,KAAKosP,kBAAkBrpP,KAAK4M,OAAO1P,OAAOivD,aAAiB,GAAsB,GAAnBlvD,KAAG8rP,gCAAgB9rP,KAAA8rP,+BAAAjrO,WAAA,KACjF7gB,KAAAmpP,gBAAApmP,KAAA4M,OAAA1P,OAAAivD,YAAA,OAAAruC,WAAA,M9W22vDEgrO,E8WnyvDGvvP,UAAsB+H,SAAQ,WACnCrE,KAAKmsP,gBAAiBppP,KAAG4M,OAAU1P,OAAEivD,YAAkB,KAAM,GAAKruC,WAAQ,KAC1E7gB,KAAKosP,kBAAkBrpP,KAAK4M,OAAO1P,OAAOivD,aAAiB,GAAsB,GAAhBlvD,KAAA8rP,gCAAgB9rP,KAAA8rP,+BAAAjrO,WAAA,KAEjF7gB,KAAKmpP,gBAAWpmP,KAAA4M,OAAA1P,OAAAivD,YAAA,OAAAruC,WAAA,KAChB7gB,KAAK20M,WACL30M,KAAA2sP,a9WoyvDEd,E8WjyvDMvvP,UAAiBgI,YAAA,WACxBtE,KAAA25O,kBACAvtO,cAAKpM,KAAA25O,iBACL35O,KAAA25O,gBAAA,O9WoyvDCkS,E8WhyvDGvvP,UAAoBq4M,SAAW,WACpC30M,KAAKm5O,sBAAwBlxO,QAASyrD,WAEtC1zD,KAAIo5O,sBAAsBnxO,QAAAyrD,U9WgyvDpB,K8W/xvDL,GAAKp1D,GAAA,EAAAA,EAAA,GAAAA,IACL0B,KAAKm5O,qBAAqBzlL,OAAO18C,KAAK,MAAQ,GAAK1Y,GAAK0B,KAAKisP,KAC7DjsP,KAAAo5O,qBAAA1lL,OAAA18C,KAAA,SAAA1Y,GAAA0B,KAAAgsP,I9WiyvDKhsP,M8W9xvDLm5O,qBAAWlxO,KAAA+O,MACX/O,KAAKjI,KAAE65O,oBAAgB,IACrB16N,MAAA,kBAGH,IAAI26N,GAAC95O,KAAqB65O,oBAAU,G9W8xvD9B75O,M8W7xvDLo5O,qBAAoBnxO,KAAA+O,MACpB/O,KAAK6xO,EACH36N,MAAA,mBAGHnf,KAAK+5O,mBACL/5O,KAAAwa,IAAAhP,gB9W8xvDEqgP,E8WlqvDFvvP,UAAAqwP,UAAA,WAzHA,GAAItpP,GAAOrD,KACP2gB,EAASwwK,OAAmBvvK,QAAS,OAErClB,EAACC,EAAiBgB,QAAAM,SAAA,Q9W4xvDhBjiB,M8W1xvDJw1M,iBAAG1D,2BAAApxL,EAAAC,EAAA,OAAAhG,UAAA,SAAA1S,G9W2xvDK,I8WzxvDP5E,EAAKipP,YAAcrkP,EAAK,GAAG0qM,MAC3BtvM,EAAKgpP,YAAcpkP,EAAG,GAAKygH,MAC3BrlH,EAAKkpP,eAAiBtkP,EAAK,GAAG0qM,MAC9BtvM,EAAAmpP,eAAAvkP,EAAA,GAAAygH,MACD,MAAKjsG,IACHpZ,EAAAmX,IAAAhP,iB9W6xvDExL,K8WzxvDHw1M,iBAAgB1D,2BAAapxL,EAAAC,EAAA,QAAAhG,UAAA,SAAA1S,GAC7B,GAAIw9N,GAAA,GAAgBppO,OAAI,GACxBgpO,EAAmB,GAAIhpO,OAAc,EACrCgH,GAAKuxL,YAAY,GAAIv4L,OAA6B,GAClDgH,EAAKgxL,UAAY,GAAIh4L,M9W0xvDd,K8WzxvDN,GAAA48B,GAAU,EAAAA,EAAKhxB,EAAQ5J,OAAQ,EAAA46B,IAC/BwsM,EAAAzuN,KAAc/O,EAAKgxB,GAAKyvF,OAExB28G,EAAcruN,KAAI/O,EAAAgxB,EAAAhxB,EAAA5J,OAAA,GAAAqqH,OACjBzvF,EAAI,GAAC,EACL51B,EAAAuxL,YAAA59K,OAAA/O,EAAA5J,OAAA,EAAA46B,GAAApY,WAAA,KAEAxd,EAAAuxL,YAAA59K,KAAA,IAGF3T,GAAKgxL,UAAUr9K,MAAM/O,KAAMw9N,EAAAtmN,MAAe,UAE1C9b,EAAKgxL,UAAIr9K,MAAY/O,KAAGo9N,EAAAlmN,MAAA,cACtB9b,EAAAmX,IAAAhP,gBAIL,IAAIohP,GAAWz7D,OAAoBvvK,QAAC,QAChCirO,EAACD,EAAiBjrO,QAAAM,SAAA,GAA2B,O9WuxvD3CjiB,M8WrxvDJw1M,iBAAKzD,2BAAoC86C,EAAcD,EAAW,QAAUjyO,UAAG,SAAW1S,GAC1F5E,EAAKopP,gBAAiBxvJ,OAAG3xE,WAAOrjB,EAAWygH,OAAKp9F,WAAiBrjB,EAAA0qM,QAAW9xL,WAE5Exd,EAAAqpP,kBAAAzvJ,OAAA3xE,WAAArjB,EAAAsuM,eAAAjrL,WAAArjB,EAAA0qM,QAAA9xL,YAIF,IAAIi1K,GAACzE,GAAsBC,aAC3BtxL,MAAK8sP,gBAAiB,GAAGzwP,OACzB2D,KAAK+sP,kBAAmB,GAAI1wP,OAA4B,GACxD2D,KAAKgtP,iBAAkB,GAAG3wP,OAC1B2D,KAAKitP,mBAAkB,GAA4B5wP,OAAC,GACpD2D,KAAKktP,YAAa,GAAG7wP,OAErB2D,KAAKmtP,cAAgB,GAAC9wP,OAAA,G9WkxvDhB2D,K8WhxvDLw1M,iBAAsBrD,yBAAA06C,GAAAlyO,UAAA,SAAA1S,GACtB,GAAImlP,GACAC,EAEHC,CACAF,GAAe,GAAI/wP,OAAM,GACzBgxP,EAAa,GAAMhxP,OAAG,GAEtBixP,EAAS,GAAEjxP,OAAQ,E9W+wvDX,K8W7wvDP,GAAA48B,GAAA,EAAaA,EAAKhxB,EAAAm9N,YAAexvB,QAAKv3M,OAAO46B,IAC7Cm0N,EAAap2O,KAAK,QAAQ8+K,EAAO78J,EAAK68J,EAAOz3L,QAAQ,GAAG,IAAIy3L,EAAO78J,EAAK68J,EAAOz3L,QAAQ,GAAG,IAAIy3L,EAAO78J,EAAK68J,EAAOz3L,QAAQ,GAAG,SAC5HgvP,EAAYr2O,KAAK,QAAW8+K,EAAC78J,EAAW68J,EAAOz3L,QAAC,OAAAy3L,EAAA78J,EAAA68J,EAAAz3L,QAAA,OAAAy3L,EAAA78J,EAAA68J,EAAAz3L,QAAA,UAChDivP,EAAKt2O,KAAA/O,EAAAm9N,YAAuBxvB,QAAK38K,GAAAyvF,OACjCrlH,EAAA0pP,kBAAA/1O,KAAA/O,EAAAm9N,YAAAxvB,QAAA38K,GAAAi+M,iBAGD7zO,GAAKypP,gBAAgB,GAAKzwP,O9W6wvDlBgH,E8W5wvDPypP,gBAAkB91O,MAClBk/K,gBAAck3D,EACdh3D,YAAai3D,EACXplP,KAAAqlP,IAIHF,EAAe,GAAI/wP,OAAM,GACzBgxP,EAAa,GAAMhxP,OAAG,GAEtBixP,EAAS,GAAEjxP,OAAQ,E9W0wvDX,K8WzwvDP,GAAA48B,GAAA,EAAaA,EAAKhxB,EAAIsuO,eAAC3gC,QAAkBv3M,OAAY46B,IACrDm0N,EAAap2O,KAAK3T,EAAKkqP,kBAAkBz3D,EAAO78J,EAAK68J,EAAOz3L,QAAS,KACrEgvP,EAAYr2O,KAAK3T,EAAAkqP,kBAAyBz3D,EAAO78J,EAAE68J,EAAAz3L,QAAA,IACnDivP,EAAKt2O,KAAA/O,EAAAsuO,eAAwB3gC,QAAK38K,GAAAyvF,OAClCrlH,EAAA4pP,mBAAAj2O,KAAA/O,EAAAsuO,eAAA3gC,QAAA38K,GAAA4+M,oBAGDx0O,GAAK2pP,iBAAiB,GAAK3wP,O9WywvDnBgH,E8WxwvDP2pP,iBAAkBh2O,MAClBk/K,gBAAck3D,EACdh3D,YAAai3D,EACXplP,KAAAqlP,IAIHF,EAAe,GAAI/wP,OAAM,GACzBgxP,EAAa,GAAMhxP,OAAG,GAEtBixP,EAAS,GAAEjxP,OAAQ,E9WswvDX,K8WrwvDP,GAAA48B,GAAA,EAAaA,EAAKhxB,EAAIouO,UAACzgC,QAAiBv3M,OAAQ46B,IAChDm0N,EAAap2O,KAAK3T,EAAKkqP,kBAAkBz3D,EAAO78J,EAAK68J,EAAOz3L,QAAS,KACrEgvP,EAAYr2O,KAAK3T,EAAAkqP,kBAAsBz3D,EAAO78J,EAAA68J,EAAAz3L,QAAA,IAC9CivP,EAAKt2O,KAAA/O,EAAAouO,UAAmBzgC,QAAK38K,GAASyvF,OACtCrlH,EAAA8pP,cAAAn2O,KAAA/O,EAAAouO,UAAAzgC,QAAA38K,GAAAw+M,eAGDp0O,GAAK6pP,YAAY,GAAK7wP,O9WqwvDdgH,E8WpwvDP6pP,YAAAl2O,MACAk/K,gBAAck3D,EACdh3D,YAAai3D,EACXplP,KAAAqlP,IAIFjqP,EAAAmX,IAAAhP,kB9WqwvDDqgP,E8WjwvDavvP,UAAUixP,kBAAgB,SAAMC,EAAU10D,GACzD,cAAA00D,EAAA,OAAAA,EAAA,OAAAA,EAAA,OAAA10D,EAAA,K9WmwvDE+yD,E8WhwvDevvP,UAAAs9O,WAAA,WACjB55O,KAAK05O,YACL15O,KAAGg6O,qBACFh6O,KAAK05O,UAAA,IAAkB,GACvB15O,KAAA+5O,mBAEA/5O,KAAK05O,UAAY,QACjB15O,KAAA2sP,W9WkwvDK,K8W9vvDL,GAAK1zN,GAAA,EAAAA,EAAAj5B,KAAAkqO,aAA8B7rO,OAAA46B,IAEnCj5B,KAAAi6O,yBAAAj6O,KAAAkqO,aAAAjxM,GAAAqxM,MAAAlX,YAEDpzN,MAAAwa,IAAAhP,gB9W+vvDEqgP,E8WjuvDFvvP,UAAA09O,mBAAA,WAzBA,GAAG32O,GAAMrD,I9W4vvDEA,M8W3vvDNm5O,sBACAn5O,KAAKm5O,qBAAqBlxO,MACa,GAAvCjI,KAAKm5O,qBAAqBlxO,KAAK5J,QACY,GAA3C2B,KAAKm5O,qBAAqBlxO,KAAK,GAAAA,KAAM5J,QACE,GAAvC2B,KAAKo5O,qBAAqBnxO,KAAK5J,QAC5B,GAAP2B,KAAOo5O,qBAAAnxO,KAAA,GAAAA,KAAA5J,Q9W8vvDF2B,K8W3vvDLw1M,iBAAQpC,+BAAqBz4L,UAAA,SAAA1S,G9W4vvDpB,G8WzvvDR5E,EAAIq2O,UAAU,IAAK,G9W4vvDP,I8W1vvDR,GADAQ,GAAA72O,EAAgB+1O,qBAAEnxO,KAAA,GAAAA,KAAAtK,QACtBw8O,EAAa,EAAJ19N,EAAA,EAAA29N,EAAAF,EAAAz9N,EAAA29N,EAAA/7O,OAAAoe,IAAA,CAER09N,GADAC,EAAkB39N,GAGnBpZ,EAAAg3O,eAAAh3O,EAAA81O,qBAAAp2O,KAAAoL,KAAAgsO,EAAA,KAGD92O,EAAKg2O,yBAAoBpxO,EAAAqyO,YAAsB,EAAKryO,EAAAqyO,YAAA,EAEpDj3O,EAAKg3O,eAAIh3O,EAAe+1O,qBAAA/1O,EAAAg2O,0BACtBh2O,EAAAmX,IAAAhP,kB9W2vvDDqgP,E8W7tvDFvvP,UAAA29O,yBAAA,SAAAhhN,GA1BA,GAAG51B,GAAMrD,I9WyvvDEA,M8WxvvDNw5O,0BAA2BvgN,IAC3Bj5B,KAAK+3N,sBAAA9+L,IACLj5B,KAAKw5O,0BAA0BvgN,GAAIhxB,MACa,GAAhDjI,KAAKw5O,0BAA0BvgN,GAAIhxB,KAAK5J,QACY,GAApD2B,KAAKw5O,0BAA0BvgN,GAAIhxB,KAAK,GAAAA,KAAM5J,QACE,GAAhD2B,KAAKy5O,0BAA0BxgN,GAAIhxB,KAAK5J,QACrC,GAAP2B,KAAOy5O,0BAAAxgN,GAAAhxB,KAAA,GAAAA,KAAA5J,Q9W2vvDF2B,K8WxvvDLw1M,iBAAQnC,2BAAqBrzM,KAAA+3N,sBAAA9+L,GAAAm6L,aAAAz4M,UAAA,SAAA1S,G9WyvvDpB,G8WvvvDR5E,EAAIq2O,UAAU,IAAK,G9W0vvDP,I8WxvvDR,GADAQ,GAAA72O,EAAgBo2O,0BAAExgN,GAAAhxB,KAAA,GAAAA,KAAAtK,QACtBw8O,EAAa,EAAJ19N,EAAA,EAAA89N,EAAAL,EAAAz9N,EAAA89N,EAAAl8O,OAAAoe,IAAA,CAER09N,GADAI,EAAkB99N,GAInBpZ,EAAAg3O,eAAAh3O,EAAAm2O,0BAAAvgN,GAAAl2B,KAAAoL,KAAAgsO,EAAA,KAGD,GAAAK,GAAmBvyO,EAACqyO,YAAK,EAAAryO,EAAAqyO,YAA+B,CAExDj3O,GAAKg3O,eAAIh3O,EAAeo2O,0BAAAxgN,GAAAuhN,GACtBn3O,EAAAmX,IAAAhP,kB9WwvvDDqgP,E8W3tvDFvvP,UAAAy9O,iBAAA,WAzBA,GAAI12O,GAACrD,IAELA,MAAKs5O,qBAAiB,E9WqvvDhBt5O,K8WpvvDLw1M,iBAAiBtC,sCAAgBlzM,KAAAu5O,2BAAA5+N,UAAA,SAAA1S,GACjC5E,EAAK6mO,aAAAjiO,EAAAkmN,QACL9qN,EAAK8mO,wBAAyBliO,EAAGomN,cACjChrN,EAAcs0N,0BAAY,GAAZj9D,I9WqvvDL,K8WrvvDL,GAAIj+I,GAAE,EAAAC,EAAAzU,EAAAkmN,QAAA1xM,EAAAC,EAAAre,OAAAoe,IAAA,CACT,GAAA03M,GAAKz3M,EAAAD,EACLpZ,GAAAs0N,0BAAAh1N,IAAAwxN,EAAAmW,MAAAlX,YAAAe,EAAAmW,O9WuvvDQ,I8W5uvDR,GAAIrxM,GAAC,EAAAA,EAAA51B,EAAA6mO,aAA4B7rO,OAAA46B,IACjC51B,EAAAwvN,oBAAA55L,EAAA51B,EAAA6mO,aAAAjxM,GAAAqxM,MAAAlX,YAGD/vN,GAAKi2O,qBAAmB,EACtBj2O,EAAAmX,IAAAhP,kB9W8uvDDqgP,E8W1uvDMvvP,UAAAu2N,oBAAsC,SAAK55L,EAAAq9L,G9W2uvD7C,I8WzuvDLt2N,KAAA+3N,sBAAOzB,IAAAt2N,KAAA+3N,sBAAAzB,GAAAlD,aAAAkD,E9WyuvDF,C8WpuvDNt2N,KAAK+3N,sBAAiBzB,GAAKt2N,KAAa23N,0BAAa31N,IAAAs0N,E9WwuvD/C,K8WvuvDL,GAAKs0B,GAAA,EAAAA,EAAA5qP,KAAsBkqO,aAAM7rO,OAAausP,IAC9C5qP,KAAAy6O,uBAAAz6O,KAAAkqO,aAAA0gB,GAAAtgB,MAAAlX,e9W0uvDCy4B,E8WtuvDGvvP,UAAAm+O,uBAA0C,SAAWxhN,GAC1Dj5B,KAAKw5O,0BAA0BvgN,IAAOhxB,QAASyrD,WAE/C1zD,KAAIy5O,0BAAsBxgN,IAAAhxB,QAAAyrD,U9WsuvDpB,K8WruvDL,GAAKp1D,GAAA,EAAAA,EAAA,GAAAA,IACL0B,KAAKw5O,0BAA0BvgN,GAAIy6B,OAAO18C,KAAK,MAAQ,GAAK1Y,GAAK0B,KAAKisP,KACtEjsP,KAAAy5O,0BAAAxgN,GAAAy6B,OAAA18C,KAAA,SAAA1Y,GAAA0B,KAAAgsP,I9WuuvDKhsP,M8WpuvDLw5O,0BAAWvgN,GAAoBhxB,KAAG+O,MAClC/O,KAAKjI,KAAE65O,oBAAgB,IACrB16N,MAAA,kBAGH,IAAI26N,GAAC95O,KAAA65O,oBAAwC,G9WouvDvC75O,M8WnuvDLy5O,0BAAoBxgN,GAAAhxB,KAAA+O,MACpB/O,KAAK6xO,EACH36N,MAAA,mBAGHnf,KAAAwa,IAAAhP,gB9WouvDEqgP,E8WjuvDYvvP,UAAa+9O,eAAM,SAAA3J,EAAA/0O,GACjC,GAAAu+O,GAAaxJ,EAAGzoO,KAAA,GAAAA,IAChBiyO,GAAQ9iI,QACR8iI,EAAMljO,KAAQrb,G9WkuvDR+0O,EAAMzoO,O8WhuvDVA,KAAKiyO,EACJ/6N,MAAA,oB9WouvDD0sO,E8WhuvDcvvP,UAAAu9O,oBAAA,SAAA5pN,G9WkuvDV,I8WhuvDL,GADDtmB,MACCrL,EAAO,EAAKA,EAAG2xB,EAAA3xB,IACfqL,EAAAqN,KAAA,EAED,OAAArN,I9WkuvDEkiP,E8W/tvDUvvP,UAAUkvP,gBAAsB,WAC5CxrP,KAAK24B,OAAKgC,UAAA,QAAiB,YAAO,cAClC36B,KAAKoa,KAAAy9G,kBAAsB,GAC3B73H,KAAA8zB,QAAAI,cAtZD,IAAAzX,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAtByC,O9W8owDtC0uO,KACIhxP,OAAOM,GAAuB,cAAG,iBACjC2wP,GAAkC,cAAehoM,UACjDgoM,GAAkC,wBAClCA,GAAkC,wB8WxnwDxC,KA1BWE,EAAoBvvP,UAAA,sB9WopwD7BuvP,E8W5pwDHH,I9W6pwDOhxP,O8W5pwDPM,GAAU,YACV4V,SAAU,gBACVE,SAAQ5W,EAAA,M9W6pwDGiX,Q8W3pwDV,IAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWisO,GA6aZ,wCAAAlvO,MAAA,KAAA43L,SAAA53L,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA6iI,GAAA,GAAAA,GAAA,IAAA7iI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2iI,GAAA,GAAAA,GAAA,IAAA3iI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA60L,SAAA70L,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAugI,GAAA,GAAAA,GAAA,IAAAvgI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAsgI,GAAA,GAAAA,GAAA,IAAAtgI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAhiB,GAAA,mBAAAA,GAAA,oBAAAgiB,GAAAtiB,UAADmxP,IA7aiCxuG,GAAA,G9WoqwD7BowG,GAA+BztP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G+W7qwD/Ds0O,KACExqM,KAAM,GAAAxQ,UAAAg2M,KACNxlM,KAAM,iBAAWxQ,UAAWs2M,KAC7B9lM,KAAA,UAAAxQ,UAAAk5M,KA0BF+B,GAAA,WAAwC,QAACC,MAAA,M/W2qwDrCA,G+WnswDHH,I/WoswDO/yP,O+WnswDPM,GAAS,W/WoswDEqX,S+WlswDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAk2F,IACXjmF,GAAA,YACAwoC,GACAjT,GACAs0C,I/WqswDUl/N,c+WlswDVs2O,GACAM,GACA4C,I/WqswDU91O,W+WlswDV47L,GACA0mB,GACA7M,GACAlX,OAEsCu5C,M/W0swDpCC,GAAiC7tP,MAAQA,KAAKuY,WAAc,WAC5D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFk1O,GAAkC9tP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D20O,GAAkC/tP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IgX7uwDnEs0O,GAAA,SAAAp0O,GhXsvwDnC,QgXnvwDHq0O,GAMC3zO,EAAMC,EAAQi7L,EACdhF,EAAA53K,EAAApe,GAPkB,GAAAnX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAOvC,OANOqD,GAAAiX,SACAjX,EAAAkX,cACAlX,EAAAmyM,mBACCnyM,EAAAmtM,WAAiBA,EACjBntM,EAAAu1B,OhXqvwDFv1B,EAAMmX,IAAMA,EgXnvwDlBnX,EAPDwqP,GAAmBI,EAEXr0O,GhX2vwDLq0O,EgXnvwDW3xP,UAAG+H,SAAA,WAChBrE,KAAA20M,YhXqvwDEs5C,EgXnvwDH3xP,UAKCq4M,SAAA,WAJA,GAAItxM,GAACrD,IhXovwDCA,MgXnvwDLw1M,iBAAgBltB,iBAAQ3tK,UAAA,SAAA1S,GACxB5E,EAAK6qP,YAAIjmP,EACP5E,EAAAmX,IAAAhP,iBApBQ,IAAAiR,GAAAC,EAAAC,EAAAC,EAAiBC,EAAAC,CAAS,OhX2wwDnCmxO,GgXpxwDHH,IhXqxwDOpzP,OgXpxwDPM,GAAU,YACV4V,SAAU,sBACVE,SAAQ5W,EAAA,MhXqxwDGiX,QgXnxwDV,0EACA,iFAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWquO,GAsBZ,wCAAAtxO,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA+0L,SAAA/0L,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA0iI,GAAA,GAAAA,GAAA,IAAA1iI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAADuzP,IAtB8B5wG,GAAA,GhX4xwD1B8wG,GAA0BnuP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzF,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GiXjzwD/Dg1O,KACClrM,KAAA,GAAAxQ,UAAAs7M,KAqBFK,GAAA,WAAmC,QAACC,MAAA,MjX+ywDhCA,GiXl0wDHH,IjXm0wDOzzP,OiXl0wDPM,GAAS,WjXm0wDEqX,SiXj0wDVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAA42F,IACX3mF,GAAA,YACAwoC,IjXo0wDU79L,ciXj0wDV47O,IjXo0wDUl4O,WiXj0wDV47L,GACA2C,GACA7tB,GAAA,MAEiC8nE,MjXy0wD/BC,GAAmBr0P,EAAoB,KAIvCs0P,GAA+CxuP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dq1O,GAA+CzuP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACxF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IkX72wD1G9I,GAAA,yBAoBC89O,GAC8B,WlX+1wD3B,QkX/1wDKC,GAAsBn0O,GAnBCxa,KAAAwa,MACZxa,KAAA4Q,YACA5Q,KAAA4uP,cAAe,GAAA5zP,IAAqC,aAC9DgF,KAAAqT,SAAA,GAAArY,IAAsC,aAEtCgF,KAAA6uP,mBAAqB7uP,KAAA8uP,aAAAp4O,KAAA1W,MACrBA,KAAA0uC,MAAA,KAcJ1uC,KAAA+uP,WAAA,GlXu2wDFr0P,OAAOI,ekX92wDV6zP,EAAkCryP,UAAA,clX+2wD3B0F,IkX/2wD6B,WAAU,MAAOhC,MAAQ4E,MlXg3wDjC7B,KAAKC,IAAI,EAAGhD,KAAK4E,MAAMvG,OAAS2B,KAAK+uP,YAA/C,GACXtsP,YAAY,EkXj3wDqFC,cAAA,IlXo3wDrGisP,EkX12wDuBryP,UAAU6e,gBAAY,WAC9Cnb,KAAAgvP,iBAAOhvP,KAAAs/L,cAERt/L,KAAAgvP,gBAAAlpP,WAAA9F,KAAAs/L,cAAA,GAAAt/L,KAAA+uP,WAAA,MlX42wDEJ,EkXx2wDuBryP,UAAAwkM,gBAAiB,SAAA7jM,GlXy2wDpC,GkXx2wDL+C,KAAA4E,OAAO5E,KAAAgvP,gBlX22wDF,OkXx2wDL/xP,EAAKgc,KlXy2wDI,IkXx2wDR,UACAwlL,GAA2B,EAAAiB,gBAAKziM,EAChC,IAAIgyP,GAAkBjvP,KAAMkvP,sBlXy2wDhB,IkXx2wDJ,IAAPD,EACG,MACJjvP,MAAKmvP,gBAAkBnvP,KAAC4E,MAAAqqP,EAAA,GACxBjvP,KAAKwa,IAAAhP,eACLxL,KAAAgvP,gBAAMlpP,WAAA9F,KAAAmvP,iBAAA,GAAAnvP,KAAA+uP,WAAA,EACP,MlXy2wDS,KkXx2wDR,YACAtwD,GAA0B,EAAGiB,gBAAKziM,EAClC,IAAImyP,GAAoBpvP,KAAKkvP,sBlXy2wDjB,IkXx2wDXE,IAAOpvP,KAAA4E,MAAAvG,OAAA,EACJ,MACJ2B,MAAKmvP,gBAAkBnvP,KAAC4E,MAAAwqP,EAAA,GACxBpvP,KAAKwa,IAAAhP,eACLxL,KAAAgvP,gBAAMlpP,WAAA9F,KAAAmvP,iBAAA,GAAAnvP,KAAA+uP,WAAA,EACP,MlXy2wDS,KkXx2wDR,QACAtwD,GAAuB,EAAKiB,gBAAeziM,GAC1C+C,KAAKU,aAAcV,KAAKmvP,gBAAiBnvP,KAAAs/L,eACtCt/L,KAACqT,SAAA9H,KAAkBvL,KAAImvP,iBAC3BnvP,KAAAmvP,gBAAM,IACP,MlXy2wDS,SkXv2wDT,SlX22wDCR,EkXv2wDuBryP,UAAA+yP,YAAA,WAAErvP,KAAAgvP,iBAE3BhvP,KAAAgvP,gBAAA7oP,cAAA,WlX02wDEwoP,EkXv2wDqBryP,UAAWwyP,aAAa,SAAAtpP,GAC9CxF,KAAKU,aAAc8E,EAAMxF,KAAAs/L,eAC1Bt/L,KAAAqT,SAAA9H,KAAA/F,IAIDmpP,EAAAryP,UAAAgzP,kBAAA,SAAiB51O,GAAc1Z,KAAE4uP,cAAqCrjP,KAAKmO,IAC3Ei1O,EAAAryP,UAAAizP,iBAAA,SAA6DC,EAAIhqP,GAAY,MAAOA,GAAKiqP,KAEzFd,EAAAryP,UAAAoE,aAAA,SAAmCoiB,EAAAnK,GAAA,MAAAmK,GAAA2sO,MAAA92O,EAAA82O,KlXq2wDhCd,EAA8BryP,UAAUozP,YAAc,SAAUl8N,GkXr2wD5B,GAAA/W,EAA6D,eAAA+W,MAAAusH,MAAAtjI,OAAA+W,EAAAusH,OAAA,EAAAtjI,GAAA,MlXy2wDjGkyO,EAA8BryP,UAAUqzP,YAAc,SAAUnqP,GkXt2wDlE,GAAAiX,ElXw2wDM,OkXv2wDLjX,IAAUiX,GACV49C,SAAU,SAAW70D,MAAOA,EAAAoqP,SAAmBpqP,EAAIoqP,MAAK9/D,QlXw2wD3Cz8K,YAAa7N,IAAUxF,KAAKs/L,eAAe95L,EAAKiqP,MAAQzvP,KAAKs/L,aAAamwD,KAAiB,gBAAkBjqP,IAAQA,EAAK86O,ckXt2wDvI7jO,EAAC,mBAAoBjX,IAAAxF,KAAAmvP,kBAAiC3pP,EAAKiqP,MAAAzvP,KAAAmvP,gBAAiBM,IlXy2wDnEhzO,EkXx2wDT,mBAAC,qBAAAjX,QAAAs/O,kBACFroO,GALC,MlX+2wDCkyO,EkXv2wDwBryP,UAACuzP,mBAAA,SAAAjrP,GAC3B5E,KAAK8vP,cAAgBlrP,EACrB5E,KAAAwa,IAAAhP,gBlXy2wDEmjP,EkX/1wDFryP,UAAA4yP,qBAAA,WAPA,GAAI7rP,GAAMrD,KACN0Z,EAAE,CAMN,OALE1Z,MAAGmvP,gBACJz1O,EAAA1Z,KAAA4E,MAAAskN,UAAA,SAAA5qN,GAAA,MAAAA,GAAAmxP,MAAApsP,EAAA8rP,gBAAAM,MACIzvP,KAAKs/L,eACT5lL,EAAA1Z,KAAA4E,MAAAskN,UAAA,SAAA5qN,GAAA,MAAAA,GAAAmxP,MAAApsP,EAAAi8L,aAAAmwD,OAED/1O,EAtGqB,IAAA+C,GAAAC,EAAAC,EAAAC,CAuGtB,OlX02wDG4xO,KACI9zP,OAAOM,GAAsB,aAAG,SAChCyzP,GAA4C,ckXn9wDA/zP,SACzCi0P,EAAAryP,UAAA,mBlXo9wDPkyP,IACI9zP,OAAOM,GAAiB,UACxByzP,GAA4C,cAAe/zP,SkXr9wDxDi0P,EAAAryP,UAAA,wBlXu9wDPkyP,IACI9zP,OAAOM,GAAiB,UACxByzP,GAA4C,ckXz9wDoB/zP,SAG9Di0P,EAAAryP,UAAA,mBlXw9wDNkyP,IACI9zP,OAAOM,GAAgB,SACvByzP,GAA4C,ckX19wDrB9qO,SACrBgrO,EAAAryP,UAAA,gBlX29wDNkyP,IACI9zP,OAAOM,GAAgB,SACvByzP,GAA4C,cAAe/zP,SkX59wDzDi0P,EAAAryP,UAAA,qBlX89wDNkyP,IACI9zP,OAAOM,GAAgB,SACvByzP,GAA4C,ckXh+wD+D,mBAAAhyO,MAAA,KAAAzhB,GAAA,aAAAA,GAAA,cAAAyhB,GAAA/hB,SACzGi0P,EAAAryP,UAAA,uBlXi+wDNkyP,IACI9zP,OAAOM,GAAgB,SACvByzP,GAA4C,ckXn+wDZpyP,QAE9BsyP,EAAAryP,UAAA,gBlXm+wDNkyP,IACI9zP,OAAOM,GAAgB,SACvByzP,GAA4C,cAAe/zP,SkXh+wD7Bi0P,EAAAryP,UAAA,uBlXk+wDlCkyP,IACI9zP,OAAOM,GAAoB,WAAGuzP,GAA2C,0BACzEE,GAA4C,ckXp+wDoC,mBAAA/xO,MAAA,KAAA6xO,GAAA,0BAAAA,GAAA,2BAAA7xO,GAAAhiB,SAcvFi0P,EAAAryP,UAAA,0BlXw9wDGkyP,IACI9zP,OAAOM,GAAuB,cAAG,oBAAqB,WACtDyzP,GAA4C,cAAe9qM,UAC3D8qM,GAA4C,qBAA8F,mBAAhE9xO,EAA8B,mBAAlBozO,gBAAiCA,gBAAiCpzO,GAAMjiB,SAC9J+zP,GAA4C,wBkX57wDlD,KA/DWE,EAA6BryP,UAAA,wBlX6/wDtCqyP,EkXngxDHH,IlXogxDO9zP,OkXngxDPM,GAAQ,YACR4V,SAAUA,GACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW+uO,GAyGZ,wCAAA7xO,MAAA,KAAA5hB,GAAA,mBAAAA,GAAA,oBAAA4hB,GAAAliB,UAADi0P,OlXm6wDA,SuTvhxD2CzkC,GAAMA,IAAA,eAArCA,EAA4BA,EAAA,MAAa,MAKnDA,YvTyhxDF,ImX5gxDA8lC,InX4gxDIC,GAAyCjwP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D82O,GAAyClwP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IoXxhxD1Gy2O,GAAA,mBAwCCC,GAE4B,WpXu/wDzB,QoXx/wDKC,GAAsB71O,EAAAtb,GACrBc,KAAAwa,MAzCsBxa,KAAAd,QAAQA,EACpBc,KAAA4Q,SAAWu/O,GACXnwP,KAAAs9L,YAAW,GAAItiM,IAAoC,aACnDgF,KAAAqT,SAAA,GAAarY,IAAO,aACpBgF,KAAA4uP,cAAA,GAAoB5zP,IAAI,aACxBgF,KAAAswP,kBAAoB,GAAIt1P,IAAA,aAElCgF,KAAAuwP,kBAAqB,GAAAv1P,IAAA,aAGrBgF,KAAA0uC,MAAoB,KACpB1uC,KAAAjF,MAAA,KACAiF,KAAAwwP,YAA6B,KAE7BxwP,KAAAywP,YAAa,KAEbzwP,KAAA+uP,WAAY,GAEsB/uP,KAAAsrD,UAAU4+J,GAAS9qB,KACrDp/L,KAAA0wP,YAAA,EAEA1wP,KAAA2wP,kBAAA,gBACkC3wP,KAAA4wP,wBAAmB,EACrD5wP,KAAA6wP,YAAA,EACA7wP,KAAA8wP,kBAA0C,gBAEX9wP,KAAA+wP,YAAW,QACtB/wP,KAAAq6D,UAAS,EAejCr6D,KAAAi0B,QAAA,EpX8gxDFv5B,OAAOI,eoX5hxDeu1P,EAAqC/zP,UAAK,WpX6hxD5D0F,IAAK,WAAc,MAAOhC,MAAKsrD,YAAc4+J,GAA6BvpB,IAC1El+L,YAAY,EoX9hxDkFC,cAAA,IpXiixDlGhI,OAAOI,eoXhixDiBu1P,EAAuC/zP,UAAK,apXiixDhE0F,IAAK,WAAc,MAAOhC,MAAKsrD,YAAc4+J,GAA6B9qB,MAC1E38L,YAAY,EoXlixDwFC,cAAA,IpXqixDxG2tP,EoXngxDF/zP,UAAA+H,SAAA,WAlBA,GAAIhB,GAAMrD,IACTA,MAAKyX,IAAa,IAAVzX,KAAOyX,EAAEsvD,SpXuhxDR/mE,KoXthxDPgxP,IAAAhxP,KAAUyX,EAAAq/G,eACVn8G,WpXuhxDWihE,KoXrhxDV,SAAUh3E,GACVvB,EAAKuB,QACLvB,EAAM4tP,oBAAkB,KACvB5tP,EAAKuB,OAAWvB,EAAKuB,MAAMvG,OAAS,EACpCgF,EAAAg3D,SAAAh3D,EAAAuB,MAAAvG,OAAA,EAEAgF,EAAAg3D,UAAA,EAEAh3D,EAAK6tP,OACL7tP,EAAA6tP,MAAA12O,IAAAhP,eAEDnI,EAAAmX,IAAAhP,oBpX0hxDF6kP,EoXrhxDiB/zP,UAASkI,YAAW,SAAWC,GAC5C,OAALzE,KAAK4E,QAAmB,SAACH,IAAe,SAAAA,KACxCzE,KAAAixP,oBAAA,gBpXwhxDCZ,EoXphxDkB/zP,UAASgI,YAAc,WACjC,MAATtE,KAAKgxP,KAAkB,GAAHhxP,KAAGgxP,IAAAjqL,QACpB/mE,KAAIgxP,IAAGp6H,cAIX52H,KAAAgxP,IAAA,MpXmhxDEX,EoX/gxDiB/zP,UAASijM,cAAc,SAActiM,GACnD,GpX+gxDK+C,KoX/gxDLi0B,QAAA,MAAAh3B,GAAqB,MAAbA,EAAA+b,QAAkB/b,EAAQ+b,iBAAuBwmL,QAEzDf,GAAgB,EAAAgB,aAAAz/L,KAAAd,QAAAkF,cAAAnH,EAAA+b,UACpBhZ,KAAKi0B,QAAI,EACTj0B,KAAAwa,IAAAhP,iBpXihxDC6kP,EoX5gxDiB/zP,UAAMqjM,eAAA,WACV,GAAd3/L,KAAKi0B,SACLj0B,KAAKi0B,QAAI,EACTj0B,KAAAwa,IAAAhP,iBpX+gxDC6kP,EoX3gxDqB/zP,UAAU4nC,OAAO,WACxC,GAAIphB,IAAI9iB,KAACq6D,WAAcr6D,KAAAi0B,MACtBj0B,MAAKi0B,SAAWnR,IAChB9iB,KAAKi0B,OAAInR,EACT9iB,KAAAwa,IAAAhP,iBpX8gxDC6kP,EoXtgxDkB/zP,UAAA24D,OAAA,SAAAzvD,GACpBxF,KAAKi0B,QAAA,EACLj0B,KAAKywP,YAAI,KAGTzwP,KAAKwa,IAAAhP,eACLxL,KAAKs9L,YAAS/xL,KAAU/F,EAACA,EAAAzK,MAAA,MACzBiF,KAAAqT,SAAA9H,KAAA/F,IpXsgxDE6qP,EoXlgxDsC/zP,UAAA60P,sBAAA,SAAAl0P,GACxC,GAAMc,GAAId,EAAG+b,OACTU,EAAE3b,EAAIA,EAAKhD,MAAA,IACd2e,IAAA1Z,KAAOwwP,aAAA92O,IAER1Z,KAAKswP,kBAAa/kP,KAAAmO,GACjB1Z,KAAKkxP,OACLlxP,KAAAkxP,MAAA7B,gBAKFgB,EAAA/zP,UAAAgzP,kBAAA,SAAA51O,GAAA1Z,KAAgC4uP,cAAArjP,KAAAmO,IpXigxD7B22O,EoXhgxDsC/zP,UAAA80P,wBAAA,SAAAn0P,GACxC,GAAMc,GAAId,EAAG+b,OACTU,EAAE3b,EAAIA,EAAKhD,MAAA,IACd2e,IAAA1Z,KAAOywP,aAAA/2O,IAER1Z,KAAKywP,YAAI/2O,EACT1Z,KAAKwa,IAAChP,eACLxL,KAAKkxP,OACLlxP,KAAAkxP,MAAA7B,gBpXmgxDCgB,EoX//wDa/zP,UAAA20P,oBAAA,SAAAI,GpXggxDT,GoX//wDLrxP,KAAA4E,MpXigxDK,IoX//wDL,GAAItG,GAAK,EAAAmwB,EAAKzuB,KAAK4E,MAAKvG,OAASC,EAAKmwB,EAAEnwB,IpXggxD/B,GoX//wDR0B,KAAKjF,QAAAiF,KAAe4E,MAAKtG,GAAAvD,MAAS,CAClCiF,KAAKs/L,aAAIt/L,KAAe4E,MAAAtG,GACxB0B,KAAAwa,IAAMhP,cACN,QA1JmB,IAAAiR,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CA8JtB,OpXggxDGmzO,KACIv1P,OAAOM,GAAsB,aAAG,SAChCk1P,GAAsC,cAAex1P,SoX/pxDlD21P,EAAA/zP,UAAA,mBpXiqxDP2zP,IACIv1P,OAAOM,GAAiB,UACxBk1P,GAAsC,cAAex1P,SoXlqxDlD21P,EAAA/zP,UAAA,sBpXoqxDP2zP,IACIv1P,OAAOM,GAAiB,UACxBk1P,GAAsC,cAAex1P,SoXrqxDlD21P,EAAA/zP,UAAA,mBpXuqxDP2zP,IACIv1P,OAAOM,GAAiB,UACxBk1P,GAAsC,cAAex1P,SoXxqxDlD21P,EAAA/zP,UAAA,wBpX0qxDP2zP,IACIv1P,OAAOM,GAAiB,UACxBk1P,GAAsC,cAAex1P,SoX3qxDlD21P,EAAA/zP,UAAA,4BpX6qxDP2zP,IACIv1P,OAAOM,GAAiB,UACxBk1P,GAAsC,cAAex1P,SoX7qxDnD21P,EAAA/zP,UAAA,4BpX+qxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,coXjrxDfvsO,SAErB0sO,EAAA/zP,UAAA,gBpXirxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,coXnrxDO,mBAAAzzO,MAAA,KAAAwlN,GAAA,iBAAAA,GAAA,kBAAAxlN,GAAA/hB,SAC3C21P,EAAA/zP,UAAA,YpXorxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,coXtrxDXx1P,SACzB21P,EAAA/zP,UAAA,gBpXurxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,cAAevsO,SoXxrxDnD0sO,EAAA/zP,UAAA,sBpX0rxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,cAAevsO,SoX1rxDnD0sO,EAAA/zP,UAAA,sBpX4rxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,cAAex1P,SoX7rxDnD21P,EAAA/zP,UAAA,qBpX+rxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,coXjsxDqE,mBAAAxzO,MAAA,KAAA1hB,GAAA,aAAAA,GAAA,cAAA0hB,GAAAhiB,SACzG21P,EAAA/zP,UAAA,uBpXksxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,cAAex1P,SoXlsxDjB21P,EAAA/zP,UAAA,oBpXosxDxC2zP,IACIv1P,OAAOM,GAAsB,aAAG,qBAAsBN,OAAOM,GAAgB,SAC7Ek1P,GAAsC,cAAex1P,SoXrsxDnD21P,EAAA/zP,UAAA,qBpXusxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,cAAex1P,SoXvsxDnD21P,EAAA/zP,UAAA,4BpXysxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,cAAex1P,SoX1sxDjB21P,EAAA/zP,UAAA,iCpX4sxDxC2zP,IACIv1P,OAAOM,GAAsB,aAAG,qBAAsBN,OAAOM,GAAgB,SAC7Ek1P,GAAsC,cAAex1P,SoX7sxDnD21P,EAAA/zP,UAAA,qBpX+sxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,cAAex1P,SoXhtxDnD21P,EAAA/zP,UAAA,4BpXktxDN2zP,IACIv1P,OAAOM,GAAgB,SACvBk1P,GAAsC,cAAex1P,SoXltxDpB21P,EAAA/zP,UAAA,sBpXotxDrC2zP,IACIv1P,OAAOM,GAAsB,aAAG,kBAAmBN,OAAOM,GAAgB,SAC1Ek1P,GAAsC,cAAex1P,SoXrtxD/B21P,EAAA/zP,UAAA,mBpXutxD1B2zP,IACIv1P,OAAOM,GAAsB,aAAG,gBAChCk1P,GAAsC,coXztxDDx1P,SACnB21P,EAAA/zP,UAAA,iBpX0txDtB2zP,IACIv1P,OAAOM,GAAsB,aAAG,YAChCk1P,GAAsC,cAAex1P,QACrDw1P,GAAsC,yBoX5txDlBG,EAAA/zP,UAAA,gBpX8txDxB2zP,IACIv1P,OAAOM,GAAsB,aAAG,cAChCk1P,GAAsC,cAAex1P,QACrDw1P,GAAsC,yBoX3txDHG,EAAA/zP,UAAA,kBpX6txDvC2zP,IACIv1P,OAAOM,GAAoB,WAAG0zP,IAC9BwB,GAAsC,coX/txD0C,mBAAAvzO,MAAA,KAAA+xO,SAAA/xO,GAAAjiB,SA8CvF21P,EAAA/zP,UAAA,gBpXmrxDG2zP,IACIv1P,OAAOM,GAAuB,cAAG,kBAAmB,WACpDk1P,GAAsC,cAAevsM,UACrDusM,GAAsC,qBAAwF,mBAA1DtzO,EAA2B,mBAAf00O,aAA8BA,aAA8B10O,GAAMliB,SAClJw1P,GAAsC,wBoXhrxD5C,KAGDG,EAAA/zP,UAAA,sBpX+qxDG2zP,IACIv1P,OAAOM,GAAuB,cAAG,mBACjCk1P,GAAsC,cAAevsM,UACrDusM,GAAsC,wBACtCA,GAAsC,wBoX9qxD5C,KAjGWG,EAAwB/zP,UAAA,uBpXixxDjC+zP,EoXvxxDHJ,IpXwxxDOv1P,OoXvxxDPM,GAAQ,YACR4V,SAAUu/O,GACVr/O,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWwwO,GA+JZ,wCAAArzO,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,YAAAA,GAAA,aAAA8hB,GAAApiB,UAAD21P,MpXgoxDIkB,GAA2CvxP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GqX5yxDhEo4O,GAAA,WAgBA,QAACC,MAAA,MrXkyxDGA,GqX/yxDkBn1P,UAAUo2J,UAAa,SAAKx0J,EAAA+a,EAAAle,GrXgzxD1C,OqX/yxDLmD,GAAOA,EAAMG,OAAA,IAAA4a,IAAAle,EAENmD,GAERnD,EAA2B,gBAAZA,GAAcA,EAAuB2X,cAAA3X,EAC1CmD,EAAMN,OAAA,SAAAU,GrX8yxDN,MqX7yxDR2a,KAAO3a,KAEN,gBAAAA,GAAA2a,GAAA3a,EAAA2a,GAAAvG,cAAApU,EAAA2a,IAAAnb,QAAA/C,IAAA,MrXizxDD02P,EqX/zxDCF,IAEQ72P,OAAAM,GAAA,OAgBZ+X,KAAA,2BAAD0+O,MrXqzxDIC,GAAyC1xP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GsXz0xDhEu4O,GAAA,WAMA,QAACC,MAAA,MtXy0xDGA,GsX90xDuEt1P,UAAAo2J,UAAgB,SAAA33J,EAAAsY,EAAAgnD,GtXg1xDnF,WsX/0xDQ,KAAVA,IAAsBA,GAAQ,GACjCA,GAAa,MAAAhnD,EACPtY,EACPA,EAAA6C,OAAA,SAAAU,GAAA,MAAAA,GAAAvD,OAAAsY,EAAAtY,StXg1xDE62P,EsXv1xDQF,IAECh3P,OAAAM,GAAA,OAAA+X,KAMZ,mCAAD6+O,MtXu1xDIC,GAAsC7xP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GuXz0xDhE04O,GAAA,WAAqC,QAACC,MAAA,MvXq1xDlCA,GuX12xDHF,IvX22xDOn3P,OuX12xDPM,GAAS,WvX22xDEqX,SuXz2xDV8qI,GAAA,aACAoxG,GAAA,uBAIDz4O,avXy2xDW1D,cuXv2xDVg+O,GACA1B,GACAiD,GACAH,IvX02xDU5/P,SuXv2xDVw+P,IvX02xDUp/D,iBuXv2xDVo/D,OAEmC2B,MvX+2xDjCC,GAAoChyP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GwX94xDhE64O,GAAA,WxXk5xDI,QwXh5xDcC,KAKjBlyP,KAAAmyP,OAAA,iBxX84xDGD,GwXh5xDW51P,UAAao2J,UAAQ,SAAMx0J,GACxC,MAAAA,GAAAiqC,QAAAnoC,KAAAmyP,OAAA,SAAAlxN,GAAA,UAAAA,KxXk5xDEixN,EwXx5xDHF,IACYt3P,OAAAM,GAMZ,OAAA+X,KAAA,sBAADm/O,MxXy5xDIE,GAAsCpyP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GyX/5xDhEi5O,GAAA,WAAsC,QAACC,MAAA,MzXs6xDnCA,GyX16xDHF,IzX26xDO13P,OyX16xDPM,GAAe,WACfoX,cAAU6/O,IACTrgQ,SAAAqgQ,OACoCK,MzXi7xDlCC,GAAoCvyP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G0Xx7xDhEo5O,GAAA,WAMA,QAACC,MAAA,M1Xw7xDGA,G0X57xDOn2P,UAAAo2J,UAAA,SAAA33J,EAAA23P,G1X67xDH,M0X57xDL33P,GACMA,EAAM4xB,OAAA,GAAA84B,cAAA1qD,EAAA4C,MAAA,GACb5C,G1X87xDE03P,E0Xr8xDHF,IAEY73P,OAAAM,GAMZ,OAAA+X,KAAA,qBAAD0/O,M1Xq8xDIE,GAAsC3yP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G2X58xDhEw5O,GAAA,WAAqC,QAACC,MAAA,M3Xm9xDlCA,G2Xv9xDHF,I3Xw9xDOj4P,O2Xv9xDPM,GAAe,WACfoX,cAAUogP,IACT5gQ,SAAA4gQ,OACmCK,M3X89xDjCC,GAAY54P,EAAoB,MAIhC64P,GAAmC/yP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D45O,GAAmChzP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC5E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4Xh8xDzGu5O,GAA0C,W5Xq8xDvC,Q4Xr8xDiBC,GAAsB14O,GAdjCxa,KAAAwa,IAAMA,EACNxa,KAAAogB,QAAQ,EACRpgB,KAAAq6D,UAAkB,EAClBr6D,KAAA20F,QAAA,EACA30F,KAAAw0M,kBAAiC,OAAU,UAC3Cx0M,KAAAo7L,WAAyB,SAExBp7L,KAAAumE,KAAA,KAEVvmE,KAAAmzP,eAAwB,GAAMn4P,IAAA,aAC9BgF,KAAAozP,cAAsB,EAKrBpzP,KAAAqzP,YAAA,E5Xg9xDEH,E4X58xDG52P,UAAAkI,YAA+B,SAAAC,GACpCzE,KAAKszP,+BACLtzP,KAAAwa,IAAAhP,gB5X88xDE0nP,E4X38xDY52P,UAASi3P,2BAAmB,SAAgBC,GACzDA,GAAKxzP,KAAao7L,YAAWp7L,KAAAmzP,iBAC7BnzP,KAAKo7L,WAAAo4D,EACLxzP,KAAKmzP,eAAI5nP,KAAeioP,GACxBxzP,KAAAwa,IAAAhP,iB5X88xDC0nP,E4X38xDH52P,UAoBCg3P,6BAAA,WAnBA,GAAIjwP,GAACrD,IACLA,MAAKozP,cAAa,EAElBpzP,KAAIqzP,YAAK,EACRrzP,KAAKw0M,kB5X28xDIx0M,K4X18xDRw0M,iBAAelZ,MAAA,SAAAvgM,G5X28xDH,O4Xz8xDXA,G5X08xDe,I4Xz8xDd,SACAsI,EAAM+vP,cAAA,CACP,M5X08xDe,K4Xz8xDd,OACA/vP,EAAMgwP,YAAA,EAKN,WAEJrzP,KAAAwa,IAAAhP,eAnDQ,IAAAiR,GAAAC,EAAAC,EAAAC,EAAAC,CAoDT,O5X28xDGk2O,KACIr4P,OAAOM,GAAgB,SACvBg4P,GAAgC,c4XjgyDP5/O,UACvB8/O,EAAA52P,UAAA,iB5XkgyDNy2P,IACIr4P,OAAOM,GAAgB,SACvBg4P,GAAgC,cAAe5/O,U4XngyD7C8/O,EAAA52P,UAAA,mB5XqgyDNy2P,IACIr4P,OAAOM,GAAgB,SACvBg4P,GAAgC,c4XvgyDN5/O,UACxB8/O,EAAA52P,UAAA,iB5XwgyDNy2P,IACIr4P,OAAOM,GAAgB,SACvBg4P,GAAgC,c4X1gyDkC,mB5X0gyDXv2O,E4X1gyDW,mBAAApgB,gBAAAogB,GAAA/hB,SAChEw4P,EAAA52P,UAAA,2B5X2gyDNy2P,IACIr4P,OAAOM,GAAgB,SACvBg4P,GAAgC,c4X7gyDa,mBAAAt2O,MAAA,KAAAo2O,GAAA,oBAAAA,GAAA,qBAAAp2O,GAAAhiB,SAC3Cw4P,EAAA52P,UAAA,qB5X8gyDNy2P,IACIr4P,OAAOM,GAAgB,SACvBg4P,GAAgC,c4XhhyDL,mBAAAr2O,MAAA,KAAAm2O,GAAA,aAAAA,GAAA,cAAAn2O,GAAAjiB,SAExBw4P,EAAA52P,UAAA,e5XghyDPy2P,IACIr4P,OAAOM,GAAiB,UACxBg4P,GAAgC,c4XlhyD6D,mBAAAp2O,MAAA,KAAA5hB,GAAA,cAAAA,GAAA,eAAA4hB,GAAAliB,SARxFw4P,EAAkB52P,UAAA,yB5X4hyD3B42P,E4XjjyDHH,I5XkjyDOr4P,O4XjjyDPM,GAAsB,YACtB4V,SAAU,aAiBVE,SAAU,21BACTK,YACW6hP,GAqDZ,wCAAAn2O,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,UAADw4P,M5Xo/xDIO,GAAev5P,EAAoB,MAInCw5P,GAAsC1zP,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Du6O,GAAsC3zP,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC/E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6XthyDzGk6O,GAA0C,W7X2hyDvC,Q6X3hyDiBC,GAAsBr5O,GAdjCxa,KAAAwa,IAAMA,EAGNxa,KAAAogB,QAAoB,EAEnBpgB,KAAAumE,KAAA,KAEVvmE,KAAA8zP,kBAA6B,GAAC94P,IAAA,aAC9BgF,KAAA+zP,cAAA,EACA/zP,KAAAg0P,mBAA2B,EAC3Bh0P,KAAAi0P,WAAY,EACZj0P,KAAAk0P,cAAqB,EAIpBl0P,KAAAm0P,WAAA,E7XqiyDEN,E6XjiyDGv3P,UAAuBkI,YAAA,SAAAC,GAC5BzE,KAAKo0P,uBACLp0P,KAAAwa,IAAAhP,gB7XmiyDEqoP,E6XhiyDgBv3P,UAAK+3P,mBAAmB,SAAiBb,GAC1DA,GAAKxzP,KAAao7L,YAAWp7L,KAAA8zP,oBAC7B9zP,KAAKo7L,WAAAo4D,EACLxzP,KAAK8zP,kBAAkBvoP,KAACioP,GACxBxzP,KAAAwa,IAAAhP,iB7XmiyDCqoP,E6X5/xDFv3P,UAAA83P,qBAAA,WAnCA,GAAI/wP,GAACrD,IACLA,MAAK+zP,cAAA,EACL/zP,KAAKg0P,mBAAkB,EACvBh0P,KAAKi0P,WAAY,EACjBj0P,KAAKk0P,cAAY,EAEjBl0P,KAAIm0P,WAAK,EACRn0P,KAAKs0P,a7XgiyDIt0P,K6X/hyDRs0P,YAAah5D,MAAE,SAAAvgM,G7XgiyDH,O6X1hyDXA,G7X2hyDe,I6X1hyDd,SACAsI,EAAM0wP,cAAA,CACP,M7X2hyDe,K6X1hyDd,cACA1wP,EAAM2wP,mBAAA,CACP,M7X2hyDe,K6X1hyDd,SACA3wP,EAAM6wP,cAAA,CACP,M7X2hyDe,K6X1hyDd,MACA7wP,EAAM8wP,WAAA,CACP,M7X2hyDe,K6X1hyDd,OACA9wP,EAAM4wP,WAAA,EAKN,WAEJj0P,KAAAwa,IAAAhP,eAnEQ,IAAAiR,GAAAC,EAAAC,EAAAC,EAAAC,CAoET,O7X4hyDG62O,KACIh5P,OAAOM,GAAgB,SACvB24P,GAAmC,c6XlmyDVvgP,UACvBygP,EAAAv3P,UAAA,iB7XmmyDNo3P,IACIh5P,OAAOM,GAAgB,SACvB24P,GAAmC,c6XrmyDF,mBAAAl3O,EAAA,mBAAApgB,gBAAAogB,GAAA/hB,SAC/Bm5P,EAAAv3P,UAAA,sB7XsmyDNo3P,IACIh5P,OAAOM,GAAgB,SACvB24P,GAAmC,c6XxmyDV,mBAAAj3O,MAAA,KAAA+2O,GAAA,YAAAA,GAAA,aAAA/2O,GAAAhiB,SACvBm5P,EAAAv3P,UAAA,qB7XymyDNo3P,IACIh5P,OAAOM,GAAgB,SACvB24P,GAAmC,c6X3myDR,mBAAAh3O,MAAA,KAAA82O,GAAA,aAAAA,GAAA,cAAA92O,GAAAjiB,SAExBm5P,EAAAv3P,UAAA,e7X2myDPo3P,IACIh5P,OAAOM,GAAiB,UACxB24P,GAAmC,c6X7myD6C,mB7X6myDtB/2O,M6X7myDsB,KAAA5hB,GAAA,cAAAA,GAAA,eAAA4hB,GAAAliB,SAN3Em5P,EAAqBv3P,UAAA,4B7XqnyD9Bu3P,E6XzpyDHH,I7X0pyDOh5P,O6XzpyDPM,GAAU,YACV4V,SAAU,qBAgCVE,SAAU,kpDACTK,YACWwiP,GAqEZ,wCAAA92O,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,UAADm5P,M7X6jyDI5qE,GAAW/uL,EAAoB,IAI/B8uL,GAAK9uL,EAAoB,IAIzBq6P,GAAkCv0P,MAAQA,KAAKwnF,UAAa9sF,OAAOusC,QAAU,SAASxY,GACtF,IAAK,GAAIZ,GAAGvvB,EAAI,EAAG0Z,EAAInO,UAAUxL,OAAQC,EAAI0Z,EAAG1Z,IAAK,CACjDuvB,EAAIhkB,UAAUvL,EACd,KAAK,GAAI/C,KAAKsyB,GAAOnzB,OAAO4B,UAAUd,eAAegB,KAAKqxB,EAAGtyB,KACzDkzB,EAAElzB,GAAKsyB,EAAEtyB,IAEjB,MAAOkzB,IAEP+lO,GAAoCx0P,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dq7O,GAAoCz0P,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC7E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8XrpyDzGg7O,GAC+B,W9X6pyD5B,Q8X7pyDMC,GAAAjmC,GAvBA1uN,KAAA0uN,WAAYA,EASJ1uN,KAAA40P,UAAY,GACZ50P,KAAA60P,UAAA,MACA70P,KAAA80P,cAAc,aACd90P,KAAA+0P,YAAA,MAQT/0P,KAAAg1P,iBAAmB,IAItBh1P,KAAAi1P,aAAA,GAAAv6F,K9XqqyDFhgK,OAAOI,e8X3ryDV65P,EAAmCr4P,UAAE,W9X4ryD9B0F,IAAK,WAAc,QAAShC,KAAKiI,MACjCxF,YAAY,E8X7ryDkBC,cAAA,I9XgsyDlChI,OAAOI,e8X/ryDV65P,EAAAr4P,UAAA,oB9XgsyDO0F,I8X/ryDN,WACA,GAAI80B,KAEJ,OADA92B,MAAAi1P,aAAY53P,QAAA,SAAAqc,GAAA,MAAAod,GAAA9f,KAAA0C,KACZod,G9XisyDMr0B,YAAY,E8XjsyDlBC,cAAA,I9XosyDEiyP,E8XhryDcr4P,UAAO24D,OAAU,SAAAqL,EAAA4oF,GAChCA,GAAKA,EAAa7qJ,OAAU,E9XiryDnB2B,KAAKi1P,aAAatyP,IAAI29D,EAAQ4oF,G8X9qyDxClpJ,KAAAi1P,aAAAtyF,OAAAriG,IAIDq0L,EAAAr4P,UAAA8xN,SAAA,WAAoB,MAA4BpuN,MAAOiI,KAAUjI,KAAEiI,KAAKgf,WAExE0tO,EAAAr4P,UAAAvB,MAAA,SAAMulE,GAAgB,MAAsBtgE,MAAciI,KAAQjI,KAACiI,KAAOjG,IAAKs+D,GAAQ,MAEvFq0L,EAAAr4P,UAAAszP,MAAA,SAAKtvL,EAAiB40L,EAAwBhsG,GAAAlpJ,KAAAm1P,OAAAv5K,MAAAtb,SAAA40L,QAAAhsG,Y9X6qyD3CyrG,E8X7qyDHr4P,UAiCC25H,KAAA,SAAA33G,EAAA9D,GAhCA,GAAInX,GAAQrD,I9X8qyDNA,M8X7qyDJo1P,QAAKp1P,KAAA0uN,WAAAN,SAAA9vM,GACLmiL,KAAA/lM,OAAU+8M,GAAA,oBACV98L,WACAihE,KAAK,SAAE9kD,GAAW,MAAKzzB,GAAA4E,KAAQ5E,EAAMgyP,UAAMv+N,IAC3CnY,MAAA,SAAUA,GAAM,MAAA4pB,SAAI5pB,MAAYA,IAC9B+vI,SAAA,iBAAAl0I,GAAAhP,kBAEHxL,KAAKm1P,SACLn1P,KAAAm1P,OAAA,GAAAlzB,IAAA,uB9X+qyDKjiO,K8X7qyDJs1P,SACAt1P,KAAAm1P,OAAAr+H,eAGC2pE,KAAA/lM,OAAa+8M,GAAiB,QAAE,SAAY/9L,GAAK,QAAIA,KAAArW,EAAA4E,MAAA5E,EAAA4E,KAAAy2J,IAAAhlJ,EAAA4mD,UAAA5lE,OAAA+8M,GAAA,mBAAA/8M,OAAA+8M,GAAA,oBAAA/wL,G9X8qyD9C,M8X7qyDP6hB,SAAKmG,MAAQ,iBAAahoB,EAAO45C,QAAQ55C,QACzCrjB,EAAI4E,KAAAjG,IAAA0kB,EAAe45C,QAAAwvH,SAAA,EACnBt1K,EAAAhP,eACE9Q,OACAuuL,GAAA,UAAIviK,EAAAwuO,MAAA34P,IAAA,SAAAkpM,GAAA,MAAApiM,GAAAkyP,UAAAj3O,EAAAmnL,EAAA/+K,MACH+5K,KAAK/lM,OAAK+8M,GAAgB,gBAC1Bp0M,EAAI4E,KAAAjG,IAAA0kB,EAAe45C,QAAAwvH,SAAA,EAEnBt1K,EAAAhP,qBAIJmP,WACAihE,KAAK,SAAEliE,GAAC,MAAI6uB,SAAOmG,MAAM,gBAAGh1B,IAC5BiF,MAAA,SAAU1hB,GAAA,MAAMsrC,SAAI5pB,MAAA1hB,IAClByxJ,SAAA,iBAAAl0I,GAAAhP,mB9X0qyDFmpP,E8XtqyDcr4P,UAAQyY,QAAS,WACnB,MAAb/U,KAAKo1P,SAAsB,GAAHp1P,KAAGo1P,QAAAruL,QACxB/mE,KAACo1P,QAAUx+H,cAEf52H,KAAIo1P,QAAK,KACM,MAAdp1P,KAAKs1P,UAAuB,GAAHt1P,KAAGs1P,SAAAvuL,QACzB/mE,KAACs1P,SAAW1+H,cAEhB52H,KAAIs1P,SAAW,KACF,MAAZt1P,KAAKm1P,QAAqB,GAAHn1P,KAAGm1P,OAAApuL,QACvB/mE,KAACm1P,OAASv+H,cACd52H,KAAAm1P,OAAA,M9XsqyDER,E8XnqyDer4P,UAAmC+4P,UAAA,SAAAG,G9XsqyD9C,I8XpqyDD,GAALtjJ,GADIk8G,EAA8B,GAAA1zD,KACvBzhI,EAAG,EAAAw8N,EAAAD,EAAAv8N,EAAAw8N,EAAAp3P,OAAA46B,IAAA,CACL,GAAAy5K,GAAA+iD,EAAAx8N,GACRqnC,EAAaoyI,EAAApyI,OAAA+tJ,EAAoB3b,EAAA2b,cAAAF,EAAAzb,EAAAyb,OACjCj8G,GAAMlyG,KAAA01P,mBACN,IAAIC,GAAa,GAAGr1L,EAAQtgE,KAAQg1P,gB9XqqyD3B,I8XnqyDR3mC,EAAcF,EAAM9vN,O9XoqyDR,I8XnqyDX,GAAKoH,GAAM,EAAKA,EAAA4oN,EAAkB5oN,IAClCysG,EAAAl7F,KAAAhX,KAAA41P,kBAAAD,EAAAlwP,Q9XuqyDW,K8XnqyDX,GAAKA,GAAM,EAAKA,EAAA4oN,EAAuB5oN,IACvCysG,EAAAl7F,KAAAhX,KAAA61P,aAAAF,EAAAxnC,EAAA1oN,GAAAoN,GAAAs7M,EAAA1oN,GAAA8N,KAGF,IAAMkE,GAAA,GAAQwqN,IAAY,gBAAA/vH,GAC1B7+F,EAAa6+F,EAAQ,EACrBk8G,GAAAzrN,IAAA29D,YAAAtkD,MAAAqyM,EAAA52M,IAAAy6F,QAAA7+F,WAAA61I,QAAA9yI,KAAA,GAAA87F,MAAA,MAAA49E,SAAA,IAED,MAAAs+B,I9XqqyDEumC,E8XnqyDHr4P,UA8BCi5P,UAAA,SAAAj3O,EAAAmnL,EAAA/+K,GA7BA,GAAMrjB,GAAMrD,KACNsgE,EAAA55C,EAAa45C,OACbq1L,EAAU,GAAKr1L,EAAStgE,KAAQg1P,iBAChCc,EAAU91P,KAAGiI,KAAIjG,IAAOs+D,GACxBy1L,EAAWrvO,EAAAwiI,OACX8sG,EAAWD,EAAU13P,OAAU,EAACy3P,EAAQ5sG,OAAOh3C,MAAW4jJ,EAAC5jJ,MAEjE+jJ,EAAYlzP,KAAAC,IAAA,EAAAD,KAAkB0D,IAAAqvP,EAAS95O,MAAUypL,EAAKzlM,KAAA40P,W9XmqyDhD,O8XlqyDJ50P,MACAk2P,kBAAAJ,EAAAG,GAAU,GAGTx1D,KAAM/lM,OAAI+8M,GAAuB,WAAI,WAAE,MAAAp0M,GAAAqrN,WAAAz8D,KAAA3zI,GAAAlI,KAAAu/O,EAAA,IAAAI,GAAAtwD,EAAA,EAAApiM,EAAAuxP,aAAAl6P,OAAA+8M,GAAA,qBAAA56L,GAAA,MAAAxZ,GAAA6yP,kBAAAJ,EAAAG,GAAA,KAAAv7P,OAAA+8M,GAAA,cAAA0+C,G9XgqyDhC,G8X/pyDAA,KAAAhoC,QAAA9vN,OAAA,GACN,GAAIoe,GAAIpZ,EAAE+yP,oBAAAD,EAAAH,EAAAC,EAAAN,GAAApqP,EAAAkR,EAAAlR,KAAA2mG,EAAAz1F,EAAAy1F,KACT3mG,KACCwqP,EAAQ13P,OAAW,GACnBy3P,EAAQ5sG,OAAO9yI,KAAK2/O,EACpBD,EAAA5sG,OAAAh3C,UAEA4jJ,EAAQ5sG,OAAO9yI,KAAK,GACpB0/O,EAAQ5sG,OAAKh3C,MAAS,KACtB4jJ,EAAA5jJ,SAED4jJ,EAAAr+O,EAAAmkE,KAAAs2B,IAIF,MAAAikJ,O9XkqyDDxB,E8X9pyDMr4P,UAAQ85P,oBAAA,SAAAnuP,EAAeiqG,EAAA+jJ,EAAAN,GAC/B,GAAiBtnC,IAANpmN,EAAMq4D,OAAAr4D,EAAAomN,eAAAF,EAAAlmN,EAAAkmN,QAEb5iN,GAAK,C9X8pyDH,I8X7pyDG,MAAR2mG,GAA8B,IAAjBjqG,EAAAw9L,KAAoB,CACjCvzF,EAAKlyG,KAAI01P,mB9X8pyDA,K8X7pyDR,GAAIjwP,GAAS,EAAAA,EAAS4oN,EAAA5oN,IACrBA,IAAM0oN,GACNj8G,EAAAl7F,KAAAhX,KAAA61P,aAAAF,EAAAxnC,EAAA1oN,GAAAoN,GAAAs7M,EAAA1oN,GAAA8N,MAEA2+F,EAAAl7F,KAAAhX,KAAA41P,kBAAAD,EAAAlwP,GAGF8F,IAAA,E9XmqyDK,I8X7pyDL,GAHG8qP,GACAC,EACJC,EACCC,EAAa,EAAAA,EAAsBroC,EAAK9vN,OAAAm4P,IACxCH,EAAWG,EAAcP,EAAW,EACnC/jJ,GAAWmkJ,IAAYnkJ,I9X8pyDLA,E8X7pyDdmkJ,IACA,SAAQnkJ,GAAAmkJ,IACNnkJ,EAAMmkJ,GAAYzG,OAElB19I,EAACmkJ,GAAiBzG,MAAC9/D,UACxB59E,EAAMmkJ,GAAYzG,MAAK9/D,SAAQ,EAC/B59E,EAAAmkJ,GAAazG,MAAY,WACnB19I,GAAOmkJ,GAASzG,MACtB2G,EAAOtuP,EAAOkmN,QAACqoC,GACfF,EAAMt2P,KAAA61P,aAAkBF,EAAYY,EAAA1jP,GAAA0jP,EAAAhjP,KACpC2+F,EAAMmkJ,GAAY5G,IAAK6G,EAAG7G,IAC1Bv9I,EAAMmkJ,GAAYl3O,MAAQm3O,EAAQn3O,MAClC+yF,EAAAmkJ,GAAet7P,MAAAu7P,EAAAv7P,MACfu7P,EAAS,KACTC,EAAO,KACPhrP,GAAA,EAIH,QAAAA,OAAA2mG,U9X8pyDEyiJ,E8X3pyDcr4P,UAAW45P,kBAAY,SAAAJ,EAAAG,EAAAnmE,G9XgqyDjC,I8X3pyDL,GAJKimE,GAAQD,EAAW5sG,OAAS9yI,KAC5B87F,EAAO6jJ,EAAY13P,OAAQ,EAAKy3P,EAAE5sG,OAAWh3C,MAAK4jJ,EAAW5jJ,MAC/DukJ,EAAO1zP,KAAM0D,IAAAqvP,EAAA95O,MAAAi6O,EAAAj2P,KAAA40P,WACjBrpP,GAAS,EACH8qP,EAAOJ,EAAe,EAAAI,GAAiBI,EAAWJ,IACtDnkJ,EAAMmkJ,IAAiB,SAAWnkJ,GAAAmkJ,IAAQnkJ,EAAAmkJ,GAAAzG,QAAA19I,EAAAmkJ,GAAAzG,MAAA9/D,UAC1C59E,EAAMmkJ,GAAYzG,MAAK9/D,QAAWA,EAClC59E,EAAImkJ,GAAQl3O,MAAA2wK,EAAA9vL,KAAA80P,cAAA90P,KAAA+0P,YACZxpP,GAAA,EAWF,OARCA,KACCwqP,EAAQ13P,OAAY,EACpBy3P,EAAA5sG,OAAAh3C,QAEA4jJ,EAAA5jJ,QAED4jJ,EAAAr+O,EAAAmkE,KAAAs2B,IAEDx3G,OAAAsuL,GAAA,W9X8pyDE2rE,E8X3pyDgBr4P,UAAOu5P,aAAY,SAAQF,EAAkBlG,EAAAl8O,EAAAmjP,GAC/D,GAAMC,KAAMpjP,GAAY,IAAZA,EAAAzV,QAAE63P,GACVh6P,EAAA44P,IAAW9E,MAAAtwO,MAAA5L,EAAAxY,MAAAwY,GAAAmjP,EAQf,OAPCC,IACCh7P,EAAIwjB,QACDxjB,EAAAwjB,MAAYxjB,EAAAwjB,MAAAxhB,MAAAg4P,EAAAt3P,SAChB1C,EAAAZ,MAAAwY,GAEA5X,EAAAZ,MAAA,GAAA46P,EAAApiP,EAED5X,G9X+pyDEg5P,E8X5pyDUr4P,UAAas5P,kBAAmB,SAAMD,EAAAlwP,G9X6pyD5C,M8X5pyDLzF,MAAO61P,aAAKF,EAAWlwP,EAAA,MACvB0Z,MAAOnf,KAAE+0P,YACRnF,OAAA9/D,SAAA,EAAA2V,KAAA1iM,KAAA4M,MAAAlK,EAAAzF,KAAA40P,e9X+pyDAD,E8X3pyDcr4P,UAAUo5P,kBAAgB,WAC1C,QAAAjG,KAAA,EAAAtwO,MAAAnf,KAAA60P,UAAA95P,MAAA,OA5OW,IAAA0hB,EA6OZ,O9X6pyDGk4O,G8X34yDHH,I9X44yDO95P,OAAOM,GAAqB,c8X34yDvBy5P,GA6OZ,wCAAAh4O,MAAA,KAAAuxM,SAAAvxM,GAAA/hB,UAADi6P,M9XsqyDIiC,GAA+B52P,MAAQA,KAAKuY,WAAc,WAC1D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFi+O,GAAgC72P,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D09O,GAAgC92P,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+Xh6yDrEq9O,GAAA,SAAAn9O,G/Xi7yDjC,Q+X33yDHo9O,GAaC18O,EAAAC,EAAc2uO,EAAYx6B,EAC1BuoC,EAAAr+N,EAAA48K,EAAAqc,EAAAr3M,EAAAi7L,GAbO,GAAApyM,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAa5B,OAZOqD,GAAAiX,SACAjX,EAAAkX,YAAYA,EACZlX,EAAA6lP,eACA7lP,EAAAqrN,aACCrrN,EAAA4zP,oBAAiBA,EACjB5zP,EAAAu1B,OACAv1B,EAAAmyM,iBAAmBA,EACnBnyM,EAAAwuN,oBAAsBA,EACtBxuN,EAAAmX,MA9DAnX,EAAAoyM,gBACApyM,EAAA6zP,qBAAmBh9P,EAAsB,KAAA1B,YACzC6K,EAAA8zP,iBAAmB,UAAW,WAE9B9zP,EAAA+zP,OAAA3xD,KAAA,EAAA2nB,UAAoD,GAAQ4kB,YAAU,GACtE3uO,EAAAg0P,uBAA6C,OAAO,UAEpDh0P,EAAAi0P,mBAAiC,OACjCj0P,EAAAk0P,mBAA8B,SAC9Bl0P,EAAAm0P,gBAAgB,cAChBn0P,EAAAo0P,iBAAgB,OAEzBp0P,EAAAq0P,cAAgBr0P,EAAGk0P,mBAAKl0P,EAAmBm0P,gBAAAn0P,EAAAo0P,kBAC3Cp0P,EAAAs0P,iBAAoCt0P,EAASk0P,mBAC7Cl0P,EAAAgmP,cAAA,SAEShmP,EAAAoxM,kBAAiB,MACjBpxM,EAAAu0P,WAAW,GAAI31B,IAAwC,gBAAA5+N,EAAKqyP,qBAC5DryP,EAAAw0P,SAAU,GAAI51B,IAAe,gBAAyB5+N,EAAKqyP,qBAEpEryP,EAAAy0P,QAAA,GAAA71B,IAAoD,gBAAA5+N,EAAAqyP,qBACpDryP,EAAAimP,gBAAA,KACAjmP,EAAAqvO,oBAAqC,KACrCrvO,EAAA00P,eAA8B,KAE9B10P,EAAA20P,aAAA,KACA30P,EAAA40P,0BAA0B,EAC1B50P,EAAA60P,yBAAwB,EAExB70P,EAAA80P,uBAAwB,EACxB90P,EAAA+0P,kBAAkB,EAClB/0P,EAAAg1P,iBAAgB,EAYhBh1P,EAAAi1P,eAAe,EAOPj1P,EAAAk1P,iBAAiB,E/Xm6yDlBl1P,EAAMm1P,WAAa,GAAI10F,K+Xn5yD7BzgK,EAdDuzP,GACQI,EAC+Bp9O,G/Xm6yDpCo9O,E+Xr5yDH16P,UAwBC+H,SAAA,WAvBA,GAAIhB,GAACrD,I/Xs5yDCA,M+Xr5yDJy4P,eAAUz4P,KAAW6xN,oBAAAhD,eACrBl0M,UAAK,SAAejB,GACpBrW,EAAKk1P,gBAAkB7+O,EACrBrW,EAAAmX,IAAAhP,iBAGJxL,KAAKo4P,kBAAkB,E/Xq5yDjBp4P,K+Xp5yDJ04P,mBAAW14P,KAASkpP,aAAA9vB,kBACpBz+M,UAAK,SAAA1S,GACL5E,EAAM+0P,kBAAiB,CACvB,IAAA1tE,GAAKrnL,EAAes1P,kBAAiB1wP,EACrC5E,GAAKimP,gBAAA5+D,GAAgCA,EAAArsL,OAAAqsL,EAAA,QACrCrnL,EAAK40P,0BAA2B,EAChC50P,EAAKu0P,WAAIh8K,KAAY8uG,GACnBrnL,EAAAmX,IAAAhP,iBAIJxL,KAAKi3P,oBAAiBhhI,KAAKj2H,KAAA44B,KAAAta,UAAwBte,KAAAwa,KACnDxa,KAAKu6N,UAAAv6N,KAAA44B,KAAoB88K,wBAEzB11M,KAAKk2M,oBAAoBl2M,KAAKu6N,UAAG75M,UAAA1gB,KAAAu6N,UAAA55M,UACjC3gB,KAAA6xN,oBAAAhpD,S/Xm5yDEmuF,E+Xh5yDG16P,UAAAgI,YAA8B,WACnCtE,KAAIi3P,oBAAKliP,UAA+F,MAAxB/U,KAAK04P,oBAAiC,GAAH14P,KAAG04P,mBAAA3xL,QAAK/mE,KAAC04P,mBAAqB9hI,cACjJ52H,KAAI04P,mBAAqB,KAAyE,MAAtB14P,KAAK44P,kBAA+B,GAAH54P,KAAG44P,iBAAA7xL,QAAK/mE,KAAC44P,iBAAmBhiI,cACzI52H,KAAI44P,iBAAoB,KAAuE,MAArB54P,KAAK64P,iBAA8B,GAAH74P,KAAG64P,gBAAA9xL,QAAK/mE,KAAC64P,gBAAkBjiI,cACrI52H,KAAI64P,gBAAmB,KAAqE,MAApB74P,KAAKy4P,gBAA6B,GAAHz4P,KAAGy4P,eAAA1xL,QAAK/mE,KAACy4P,eAAiB7hI,cACjI52H,KAAIy4P,eAAkB,KAAuD,MAAfz4P,KAAK84P,WAAwB,GAAH94P,KAAG84P,UAAA/xL,QAAK/mE,KAAC84P,UAAYliI,cAC7G52H,KAAA84P,UAAA,M/X45yDE9B,E+Xz5yDG16P,UAAiBw4M,oBAAe,SAAA5iB,GACrClyL,KAAKy0M,kBAAYviB,EACjBlyL,KAAA+4P,a/X25yDE/B,E+Xx5yDG16P,UAAiB08P,oBAAc,SAAAxzP,GACpCxF,KAAKy0M,kBAAYjvM,EAAAzK,MACjBiF,KAAA+4P,a/X05yDE/B,E+Xv5yDG16P,UAAgB+3P,mBAAqB,SAAA4E,GAC1Cj5P,KAAI23P,iBAAKsB,EACRj5P,KAAK23P,kBAAoB33P,KAAKy3P,kBAC9Bz3P,KAAA6xN,oBAAAhpD,QAED7oK,KAAA+4P,a/Xy5yDE/B,E+Xt5yDG16P,UAAgB48P,iBAAS,SAAAC,GAC9Bn5P,KAAKqpP,cAAY8P,EACjBn5P,KAAA+4P,a/Xw5yDE/B,E+Xr5yDG16P,UAAgB88P,kBAAA,SAAAnxP,EAAAzC,GACrByC,EAAKoL,SAAA7N,EACLxF,KAAKi3P,oBAAYhiM,OAAAhtD,EAAAq4D,OAAA96D,EAAAzK,OACjBiF,KAAA+4P,a/Xu5yDE/B,E+Xp5yDY16P,UAAO+8P,iBAAoB,SAAYpxP,GACrD,GAAIiqG,GAAQjqG,EAAOihJ,OAAGh3C,MAAAjqG,EAAAihJ,OAAAh3C,MAAAjqG,EAAAiqG,KACtBjqG,GAAKihJ,OAAA9yI,KAAa,GAClBnO,EAAKoL,SAAA6+F,GAAoB,IAAOA,GAAKA,EAAQ,GAAM,KACnDlyG,KAAKi3P,oBAAYhiM,OAAAhtD,EAAAq4D,OAAA,MACjBtgE,KAAA+4P,a/Xs5yDE/B,E+Xn5yDM16P,UAAAg9P,kBAAqB,SAAArxP,EAAAq8B,GAC7B,GAAMpjC,GAAQojC,EAAMpjC,MAAOE,EAAMkjC,EAAGljC,IAChC8wG,EAAKjqG,EAAUihJ,OAAKh3C,MAAIjqG,EAAAihJ,OAAAh3C,MAAAjqG,EAAAiqG,KAC3BlyG,MAAKw4P,WAAWjyL,KAAO,GACpBvmE,KAAEw4P,WAAAhjM,O/Xq5yDA,K+Xn5yDJ,GADFl6D,GACKgD,EAAK4C,EAAI5C,GAAA8C,EAAA9C,IACbhD,EAAI42G,EAAI5zG,GACPhD,EAAIs0P,QAA6B,IAA5Bt0P,EAAUs0P,MAAM9/D,SACrB9vL,KAAAw4P,WAAA9vO,IAAAptB,EAAAs0P,MAAAnqD,K/Xs5yDI,I+Xn5yDLzlM,KAAMw4P,WAAyBjyL,KAAC,GAChC,GAAIgzL,KACJv5P,MAAKw4P,WAAWn7P,QAAQ,SAAA9B,GAAA,MAAAg+P,GAAAviP,KAAAzb,KACxByE,KAAKw4P,WAAAhjM,QACLx1D,KAAAi3P,oBAAArH,MAAA3nP,EAAAq4D,OAAAi5L,EAAAtxP,EAAAihJ,OAAA9yI,Q/Xs5yDC4gP,E+Xl5yDG16P,UAAAk9P,eAA+B,SAAavxP,EAAMmO,GACvDpW,KAAAi3P,oBAAArH,MAAA3nP,EAAAq4D,QAAA,GAAAlqD,I/Xo5yDE4gP,E+Xj5yDG16P,UAAYm9P,iBAAA,SAAA/kC,GACjB10N,KAAA+4P,a/Xm5yDE/B,E+Xj5yDH16P,UAoBCo9P,gBAAA,SAAAl0P,GAnBA,GAAInC,GAACrD,IACLA,MAAK0yO,oBAAsBltO,EAAAzK,MAC3BiF,KAAK+3P,eAAA,KACL/3P,KAAKk4P,wBAAwD,OAAhCl4P,KAAK0yO,oBAClC1yO,KAAKm4P,sBAAmBn4P,KAAAk4P,yBAAqB,OAAAl4P,KAAA+3P,eAC7C/3P,KAAK63P,SAAQj8K,KAAK57E,KAAK01P,qBACvB11P,KAAK83P,QAAIl8K,KAAA57E,KAAc01P,qBACvB11P,KAAIwa,IAAKhP,eACoB,OAA5BxL,KAAK0yO,sBACL1yO,KAAKq4P,iBAAkB,EACvBr4P,KAAIwa,IAAKhP,eAAiF,MAAtBxL,KAAK44P,kBAA4B54P,KAAG44P,iBAAA7xL,QACpG/mE,KAAC44P,iBAAmBhiI,c/Xm5yDf52H,K+Xl5yDP44P,iBAAU54P,KAAUkpP,aAAA7vB,cAAA7zN,EAAAzK,OACpB4f,UAAK,SAAc1S,GACnB5E,EAAKw0P,SAAAj8K,KAAAv4E,EAAkBs1P,kBAAM1wP,IAC7B5E,EAAKg1P,iBAAkB,EACrBh1P,EAAAmX,IAAAhP,kBAGLxL,KAAA+4P,a/Xo5yDE/B,E+Xl5yDH16P,UAkBCq9P,eAAA,SAAAn0P,GAjBA,GAAInC,GAACrD,IACLA,MAAK+3P,eAAAvyP,EAAqBzK,MAC1BiF,KAAKm4P,sBAAoB,OAAAn4P,KAAA+3P,eACzB/3P,KAAKg4P,aAAa,KAClBh4P,KAAK83P,QAAIl8K,KAAA57E,KAAc01P,qBACvB11P,KAAIwa,IAAKhP,eACa,OAArBxL,KAAK+3P,iBACL/3P,KAAKs4P,eAAgB,EACrBt4P,KAAIwa,IAAKhP,eAA8E,MAArBxL,KAAK64P,iBAA2B74P,KAAG64P,gBAAA9xL,QACjG/mE,KAAC64P,gBAAkBjiI,c/Xo5yDd52H,K+Xn5yDP64P,gBAAU74P,KAACkpP,aAAS5vB,aAAAt5N,KAAA+3P,gBACpBp9O,UAAK,SAAa1S,GAClB5E,EAAKy0P,QAAAl8K,KAAav4E,EAAGs1P,kBAAM1wP,IAC3B5E,EAAKi1P,eAAgB,EACnBj1P,EAAAmX,IAAAhP,kBAGLxL,KAAA+4P,a/Xq5yDE/B,E+Xl5yDG16P,UAAes9P,aAAW,SAAAp0P,GAC/BxF,KAAKg4P,aAAIxyP,EAAezK,MACxBiF,KAAKwa,IAAAhP,eACLxL,KAAA+4P,a/Xo5yDE/B,E+Xj5yDG16P,UAAeu9P,eAAQ,WAC5B75P,KAAKspP,gBAAA,KACLtpP,KAAK0yO,oBAAsB,KAC3B1yO,KAAK+3P,eAAe,KACpB/3P,KAAKg4P,aAAA,KACLh4P,KAAKk4P,wBAAwD,OAAhCl4P,KAAK0yO,oBAClC1yO,KAAKm4P,sBAAmBn4P,KAAAk4P,yBAAqB,OAAAl4P,KAAA+3P,eAC7C/3P,KAAK63P,SAAQj8K,KAAK57E,KAAK01P,qBACvB11P,KAAK83P,QAAIl8K,KAAA57E,KAAc01P,qBACvB11P,KAAKwa,IAAAhP,eACLxL,KAAA+4P,a/Xm5yDE/B,E+Xh5yDG16P,UAAiBw9P,cAAK,WAC3B95P,KAAK+3P,eAAe,KACpB/3P,KAAKg4P,aAAA,KACLh4P,KAAKm4P,uBAAkB,EACvBn4P,KAAK83P,QAAIl8K,KAAA57E,KAAc01P,qBACvB11P,KAAKwa,IAAAhP,eACLxL,KAAA+4P,a/Xk5yDE/B,E+X/4yDG16P,UAAey9P,YAAK,WACzB/5P,KAAKg4P,aAAI,KACTh4P,KAAKwa,IAAAhP,eACLxL,KAAA+4P,a/Xi5yDE/B,E+X94yDQ16P,UAAA45M,mBAAiC,SAAUwe,GACrD10N,KAAK44B,KAAAu9K,sBAAsBue,EAAA,GAAAA,EAAuB,IAClD10N,KAAKu6N,UAAYv6N,KAAA44B,KAAA88K,wBACjB11M,KAAA+4P,a/Xg5yDE/B,E+X74yDS16P,UAAOq6N,cAAM,SAAAqjC,GACxBh6P,KAAAo3P,MAAA3xD,KAAAu0D,G/X+4yDEhD,E+X54yDM16P,UAAc29P,uBAAwB,SAAAvnD,GACxC,OAALA,GAAK,eAAwBA,IAC7B1yM,KAAAk6P,oBAAAxnD,EAAAhnK,c/X+4yDCsrN,E+X34yDO16P,UAAAm2O,iBAA8B,SAAAr4L,GAEb,OAAzBp6C,KAAK0yO,qBACL1yO,KAAAk6P,oBAAA9/M,EAAA22L,kBAAA,K/X64yDCimB,E+Xz4yDG16P,UAAYm4N,SAAA,SAAAC,GACjB10N,KAAA+4P,a/X24yDE/B,E+Xx4yDG16P,UAAYq4N,YAAA,SAAAD,GACjB10N,KAAA+4P,a/X04yDE/B,E+Xv4yDG16P,UAAc69P,UAAA,WACnBn6P,KAAAy1M,cAAA1B,iBAAA/zM,KAAAo6P,YAAAp6P,KAAAq6P,U/Xy4yDErD,E+Xt4yDQ16P,UAASo5P,kBAAqB,WACxC,QAAAjG,KAAA,EAAAtwO,MAAA,MAAApkB,MAAA,Q/Xw4yDEi8P,E+Xr4yDU16P,UAAOk3N,qBAAoB,WACvC,GAAA7pN,GAAO,GAAAmwN,GAQP,OAPAnwN,GAAIowN,eAAmB/5N,KAAK0yO,oBACN,OAArB1yO,KAAA+3P,iBACDpuP,EAAWqwN,YAAQ94L,SAAAlhC,KAAoB+3P,iBACvCpuP,EAAOmtB,KAAM92B,KAAGi3P,oBAAKtoC,iBAAAnjM,OAAAxrB,KAAA6xN,oBAAAlD,kBACrBhlN,EAAOswN,OAAA,KACPtwN,EAAOuwN,WAAW,KAClBvwN,EAAOwwN,SAAO,KACdxwN,G/Xu4yDEqtP,E+Xp4yDI16P,UAAiB49P,oBAAsB,SAAAxuN,GAC7C,GAAIg/I,GAAS1qL,KAAK43P,WAAMhpG,U/Xq4yDlB,I+Xp4yDe,OAApB87B,E/Xq4yDS,I+Xr4yDJ,GAAIjuK,GAAA,EAAO69O,EAAA5vE,EAAAjuK,EAAA69O,EAAAj8P,OAAAoe,IAAA,CACf,GAAIulI,GAAQs4G,EAAU79O,EACrBulI,GAAKjnJ,QAAA2wC,IACL1rC,KAAKspP,gBAAgBtnG,EACrBhiJ,KAAA05P,gBAAA13G,M/X04yDDg1G,E+Xp4yDU16P,UAAgCq8P,kBAAoB,SAAAv+M,GAChE,GAAIzwC,GAAM3J,KAAM01P,mB/Xq4yDV,I+Xp4yDS,GAAdt7M,EAAA/7C,OACA,MAAAsL,E/Xs4yDK,K+Xp4yDL,GAAKsvB,GAAC,EAAMA,EAAImhB,EAAQ/7C,OAAO46B,IAEX,MAAnBmhB,EAAOnhB,GAAKoC,KACZ1xB,EAAAqN,MAAAy4O,IAAAx2N,EAAAl+B,MAAAq/C,EAAAnhB,GAAAoC,KAAAlc,MAAAi7B,EAAAnhB,GAAAlmB,OAEuB,MAAhBqnC,EAAKnhB,GAAKpmB,IACjBlJ,EAAAqN,MAAAy4O,IAAAx2N,EAAAl+B,MAAAq/C,EAAAnhB,GAAApmB,GAAAsM,MAAAi7B,EAAAnhB,GAAAlmB,MAGF,OAAApJ,I/Xq4yDEqtP,E+Xn4yDH16P,UAoBCy8P,UAAA,WAnBA,GAAM11P,GAA2BrD,KAC7Bu6P,IACHv6P,MAAK23P,kBAAW33P,KAAAu3P,oBAChBgD,EAAMvjP,KAAKhX,KAAKw6P,kCAChBD,EAAAvjP,KAAAhX,KAAAy6P,oBACKz6P,KAAK23P,kBAAM33P,KAAmBw3P,gBACnC+C,EAAAvjP,KAAAhX,KAAA06P,wBAGAH,EAAMvjP,KAAKhX,KAAKw6P,kCAChBD,EAAMvjP,KAAKhX,KAAKy6P,mBAChBF,EAAAvjP,KAAAhX,KAAA26P,4BAGe,MAAf36P,KAAK84P,WAAwB,GAAH94P,KAAG84P,UAAA/xL,QAE1B/mE,KAAC84P,UAAYliI,c/Xm4yDX52H,K+Xl4yDJ84P,UAAKp+P,OAAAuuL,GAAY,UAACsxE,GAClB95D,KAAA/lM,OAAU+8M,GAAU,cAAC,MACvB98L,UAAA,iBAAAtX,GAAAmX,IAAAhP,kB/Xo4yDEwrP,E+Xl4yDH16P,UAMCo+P,oBAAA,WAJA,GAAAr3P,GAAYrD,I/Xk4yDN,O+Xj4yDJA,MACAkpP,aAAA/vB,aAAIn5N,KAAA44B,KAAAta,UAAQte,KAAAu6N,UAAKv6N,KAAAwzN,wBAEnB/yB,KAAA/lM,OAAA+8M,GAAA,cAAAxvM,GAAA,MAAA5E,GAAAu3P,sBAAA3yP,O/Xi4yDE+uP,E+X93yDG16P,UAAes+P,sBAAa,SAAA3yP,GACjCjI,KAAIwqP,aAAgB,GAACnuP,OAAQ,EAE7B,IAAIw+P,KAAK,SAAmB,S/X83yDtB,I+X73yD4B,OAAjC76P,KAAI0yO,oBAAuC,CAC3C,GAAIhoD,GAAWziL,EAAKyiL,SACpB1qL,MAAKo3P,MAAM3xD,KAAA,EACXzlM,KAAgBo3P,MAAAplB,YAAAtnD,EAAArsL,M/X83yDP,K+X93yDJ,GAAIoe,GAAG,EAAAq+O,EAAApwE,EAAAjuK,EAAAq+O,EAAAz8P,OAAAoe,IAAA,CACX,GAAIi2L,GAAKooD,EAAar+O,GAClBisG,EAAQp9F,WAAWonL,EAAIhqF,OAC3BiqF,EAAYrnL,WAAWonL,EAAAC,MACvBkoD,GAAK7jP,MAAa07L,EAAK1wD,QAAA06E,aAAAh0G,I/X+3yDX1oH,K+X93yDXwqP,aAAWxzO,MACXmI,MAAAuzL,EAAW1wD,QAAMjvI,KACjB24B,YAAMgnK,EAAA1wD,QAAA06E,aACNguB,KAAK,uBAAOh4C,EAAA1wD,QAAA06E,aAAAhqN,cACZg2G,MAAOA,EACLiqF,eAGJ,CACA,GAAIioB,GAAO3yN,EAAQ2yN,OACnB56N,MAAKo3P,MAAM3xD,KAAA,EACXzlM,KAAgBo3P,MAAAplB,YAAApX,EAAAv8N,M/Xg4yDP,K+Xh4yDJ,GAAIqe,GAAG,EAAAq+O,EAAAngC,EAAAl+M,EAAAq+O,EAAA18P,OAAAqe,IAAA,CACX,GAAIg2L,GAAKqoD,EAAGr+O,GACRgsG,EAAQp9F,WAAWonL,EAAIhqF,OAC3BiqF,EAAYrnL,WAAWonL,EAAAC,MACvBkoD,GAAK7jP,MAAa07L,EAAKz1H,OAAAg+I,YAAAvyG,I/Xi4yDX1oH,K+Xh4yDXwqP,aAAWxzO,MACXmI,MAAMuzL,EAAAz1H,OAAWlqE,KACjB23O,KAAK,YACLhiI,MAAOA,EACLiqF,WAML3yM,KAAKg7P,kBAAe1vO,WAAArjB,EAAA2tM,QAAAltF,OAAAp9F,WAAArjB,EAAA2tM,QAAAjD,Q/X+3yDd3yM,K+X93yDLsyO,cAEA59C,UAAQ,WACR13I,OAAAh9C,KAAWw1M,iBAAYjC,sBACvB+6B,UAASusB,E/X83yDApnP,S+X53yDR4+N,WAAAv8C,OAAA91L,KAAAm3P,mBAIyB,OAA1Bn3P,KAAK0yO,sBACL1yO,KAAKsyO,aAAa7+N,QAAQopN,WAAc78N,KAAA0yO,sBAAoB1yO,MAAAk3P,qBAAA,wBAC5Dl3P,KAAIsyO,aAAK7+N,QAAiBwpE,OAAQj9E,KAAA0yO,oBACf,QAAlB1yO,KAAKqpP,gBACLrpP,KAAAsyO,aAAA7+N,QAAA4gO,YAAA,a/Xg4yDA2iB,E+X53yDH16P,UAWCk+P,+BAAA,WAVA,GAAAn3P,GAAYrD,I/X63yDN,O+X53yDJA,MACAkpP,aAAAnwB,8BAAc/4N,KAAA44B,KAAAta,UAAAte,KAAAu6N,UAAAv6N,KAAAy0M,kBAAAz0M,KAAAwzN,wBACb/yB,KAAK/lM,OAAA+8M,GAAsB,KAAG,SAASxvM,GACvC5E,EAAK43P,uBAAsB,GAAQ5+P,M/X43yD5B,K+X33yDN,GAAI48B,GAAC,EAAAA,EAAAhxB,EAAA5J,OAAuB46B,IAC7B51B,EAAK43P,uBAA2BjkP,KAAC/O,EAAOgxB,GAAAhxB,KAGxC5E,GAAA63P,kBAAAjzP,EAAA,GAAAyrD,W/X43yDDsjM,E+Xz3yDH16P,UAUCq+P,wBAAA,WATA,GAAMt3P,GAAArD,I/X23yDA,O+Xz3yDJA,MACAkpP,aAAAxvB,uBAAK15N,KAAS44B,KAAAta,UAAAte,KAAAu6N,UAAAv6N,KAAAwzN,uBAFJ,KAGT/yB,KAAK/lM,OAAA+8M,GAAqB,cAAQxvM,GAClC5E,EAAK83P,cAAelzP,EAAAkmN,QACpB9qN,EAAK+zP,MAAM3xD,KAAA,EAEXpiM,EAAA+zP,MAAAplB,YAAA/pO,EAAAkmN,QAAA9vN,W/X03yDD24P,E+Xv3yDH16P,UAKCm+P,gBAAA,WAJA,GAAAp3P,GAAYrD,I/Xw3yDN,O+Xv3yDJA,MACAkpP,aAAAjwB,8BAAmBj5N,KAAA44B,KAAIta,UAACte,KAAAu6N,UAAuBv6N,KAAOwzN,wBAExD/yB,KAAA/lM,OAAA+8M,GAAA,cAAAxvM,GAAA,MAAA5E,GAAA23P,kBAAA/yP,EAAAygH,MAAAzgH,EAAA0qM,W/Xu3yDEqkD,E+Xp3yDI16P,UAAgB0+P,kBAAqB,SAAQtyI,EAAKiqF,GACxD,GAAIkD,GAAelD,EAAA,EAAAjqF,EAAAiqF,EAAA,I/Xq3yDb3yM,M+Xp3yDLo7P,cACE9qO,MAAOtwB,KAAKua,YAAYmE,UAAU,qCAAsCxF,KAAMlZ,KAAKua,YAAYmE,UAAU,iDAAkD3jB,MAAO43M,EAAO5yD,KAAM,oBAAAlvB,MAA2B,gCAC1MvgG,MAAOtwB,KAAKua,YAAYmE,UAAU,qCAAAxF,KAA4ClZ,KAAGua,YAAWmE,UAAY,iDAAU3jB,MAAgD2tH,EAAOq3B,KAAE,0BAAoBlvB,MAAiB,iCACjNvgG,MAAAtwB,KAAAua,YAAAmE,UAAA,8CAAAxF,KAAAlZ,KAAAua,YAAAmE,UAAA,iDAAA3jB,MAAA86M,EAAA91D,KAAA,kBAAAlvB,MAAA,mC/Xu3yDAn2H,OAAOI,e+Xp3yDVk8P,EAAA16P,UAAA,e/Xq3yDO0F,I+Xp3yDN,WACA,GAAMd,GAAMlB,KAAKu6N,UAAU75M,UAAQyB,OAAO,YAC1C/gB,EAAOpB,KAAAu6N,UAAc55M,QAAKwB,OAAA,WAC1B,qBAAAniB,KAAA23P,iBAAA,IAAAz2P,EAAA,IAAAE,EAAA,OAAApB,KAAAy0M,kBAAA,Q/Xs3yDMhyM,YAAY,E+Xt3yDlBC,cAAA,I/Xy3yDEhI,OAAOI,e+Xv3yDVk8P,EAAA16P,UAAA,W/Xw3yDO0F,I+Xv3yDN,WACA,GAAIgzM,GAAWh1M,KAACk7P,kBAAAl7P,KAAAk7P,kBAAA78P,OAAA,EACZsL,EAAS,GACTsrM,EAAA,GACAniB,EAAM,kBACiB,QAA1B9yL,KAAAy0M,mBAA0B,QAAAz0M,KAAAy0M,kBAC1B3hB,EAAA,aACuB,SAAvB9yL,KAAUy0M,kBACV3hB,EAAA,UACoB,QAApB9yL,KAAUy0M,oBACV3hB,EAAA,OAGD,IAAAkQ,GAAa,GAAA3mM,MACb2mM,GAAgBhsL,KAAA,O/Xy3yDN,K+Xz3yDL,GAAIyF,GAAG,EAAAC,EAAA1c,KAAAi7P,uBAAAx+O,EAAAC,EAAAre,OAAAoe,IAAA,CACX,GAAAi6M,GAAQh6M,EAAKD,EACbumL,GAAAhsL,KAAA0/M,EAAAv3M,OAGDxV,GAAUq5L,EAAOh/J,KAAG,KAAW,M/Xy3yDrB,K+Xx3yDT,GAAI1lC,GAAG,EAAGA,EAAG02M,EAAA12M,IAAO,CACpB22M,EAAgB,IAAA9jB,KAAKnxL,KAAAk7P,kBAAL58P,IAAA6jB,OAAA2wK,GAA6B,G/Xy3yDhC,K+Xz3yDR,GAAIn2K,GAAG,EAAAC,EAAA5c,KAAAi7P,uBAAAt+O,EAAAC,EAAAve,OAAAse,IAAA,CACX,GAAI+5M,GAAK95M,EAAGD,EACZs4L,IAAA,IAAAyhB,EAAAzuN,KAAA3J,GAED22M,GAAM,OACNtrM,GAAAsrM,EAED,MAAAtrM,I/X23yDMlH,YAAY,E+X33yDlBC,cAAA,GA1eW,IAAA+Z,GAAAC,EAAAC,EAAeC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAS,O/Xy2zDjC85O,G+X/2zDHH,I/Xg3zDOn8P,O+X/2zDPM,GAAU,YACV4V,SAAU,oBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWo3O,GA4eZ,wCAAAr6O,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAy7M,SAAAz7M,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAoxM,SAAApxM,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA63O,SAAA73O,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA20L,SAAA30L,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAwxM,SAAAxxM,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAjiB,GAAA,mBAAAA,GAAA,oBAAAiiB,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAy2L,SAAAz2L,GAAAxiB,UAADs8P,IA5e4B35G,GAAA,G/Xu3zDxBg+G,GAAqCr7P,MAAQA,KAAKuY,WAAc,WAChE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF0iP,GAAsCt7P,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DmiP,GAAsCv7P,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC/E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IgY13zD/D8hP,GAAA,SAAA5hP,GhYs4zDvC,QgYz1zDF6hP,GAUAvS,EAAcx6B,EAAY91L,EAwF1Bte,EAAAC,EAAAi7L,EAAAqc,EAAAr3M,EAAAJ,GAlGoB,GAAA/W,GAAAuW,EAAYpd,KAAZwD,KAAAsa,EAA0BC,IAAAva,IAChCqD,GAAA6lP,eACC7lP,EAAAqrN,WAAiBA,EAClBrrN,EAAAu1B,KAAMA,EACNv1B,EAAAiX,SACCjX,EAAAkX,cACAlX,EAAAmyM,iBAAmBA,EACnBnyM,EAAAwuN,oBAAsBA,EACtBxuN,EAAAmX,IAAIA,EA9BZnX,EAAA+W,OACA/W,EAAAixP,aAAA,SAA+B,cAAS,QAcxCjxP,EAAAs0P,iBAAmB,SACnBt0P,EAAAq4P,qBAAoC,OAAU,UAEtDr4P,EAAAgmP,cAAgB,SAChBhmP,EAAAmxM,kBAAqC,OAErCnxM,EAAAoxM,kBAAmB,MAalBpxM,EAAKs4P,YAAa,EAClBt4P,EAAKs4P,WAAat4P,EAAG+W,KAAAu9G,kBhY+1zDft0H,EgY91zDL8vM,eACA1N,KAAA,EACA2nB,UAAW,GACV4kB,YAAA,GhYg2zDI3uO,EgY51zDLu4P,aACA3zP,KAAM,KACLyrD,OAAA,GAAAr3D,QhY81zDIgH,EgY51zDLw4P,aACA5zP,KAAM,KACLyrD,OAAA,GAAAr3D,QAGFgH,EAAKgnP,cAAgB,KACrBhnP,EAAKy4P,cAAiB38O,MAAO,MAAOpkB,MAAO,OAC3CsI,EAAK04P,aAAA58O,MAAsB,MAAKpkB,MAAA,OAChCsI,EAAKqvO,oBAAsB,KAC3BrvO,EAAKimP,gBAAiB,KACtBjmP,EAAK00P,eAAe,KACpB10P,EAAK20P,aAAA,KACL30P,EAAK60P,yBAAwB,EAC7B70P,EAAK80P,uBAAwB,EAC7B90P,EAAK40P,0BAA0B,EAC/B50P,EAAK+vO,eAAA,UAA2B,WAEhC/vO,EAAKowO,4BAAsB,KAE3BpwO,EAAKk3N,UAAAl3N,EAAiBu1B,KAAM88K,wBAC5BryM,EAAK24P,qBACL34P,EAAI44P,kBhY01zDE,KgYz1zDL,GAAIC,GAAM,EAAGA,GAAQ,IAACA,IAAA,CACtB,GAAAC,GAAKD,EAAA,EACL74P,GAAK24P,kBAAgBhlP,MAAMmI,MAAOg9O,EAAQphQ,MAAOmhQ,IACjD74P,EAAA44P,gBAAAjlP,MAAAmI,MAAAg9O,EAAAphQ,MAAAmhQ,IAgDD,MA9CA74P,GAAK24P,kBAAgB,GAAK3oP,UAAW,EACrChQ,EAAK44P,gBAAe,KAAG5oP,UAAK,EAC5BhQ,EAAK+4P,gBAAgB/4P,EAAK24P,kBAAoB,GAE9C34P,EAAKg5P,cAAAh5P,EAAsB44P,gBAAC,KAC5B54P,EAAKi5P,qBACLj5P,EAAKi5P,kBAAkBtlP,MAAMmI,MAAO,MAAKpkB,MAAA,IACzCsI,EAAKi5P,kBAAkBtlP,MAAMmI,MAAO9b,EAAKkX,YAA6B,gBAAM,GAAuB,oBAAQ,KAAE,KAASxf,MAAO,IAC7HsI,EAAKi5P,kBAAkBtlP,MAAMmI,MAAO9b,EAAKkX,YAA6B,gBAAM,GAAuB,oBAAQ,KAAU,OAAExf,MAAQ,IAC/HsI,EAAKi5P,kBAActlP,MAAKmI,MAAA9b,EAAkBkX,YAAG,kDAAAxf,MAAA,IAE7CsI,EAAKk5P,YAAAl5P,EAAAi5P,kBAA8B,GhYw1zD7Bj5P,EgYv1zDLm5P,6BhYw1zDSlhQ,GgYt1zDR6jB,MAAA9b,EAAAkX,YAAuC,iDACvC27K,gBAAa,uBACbE,YAAA,sBhYy1zDQroK,GgYt1zDR5O,MAAA9b,EAAAkX,YAAyC,mDACzC27K,gBAAa,yBACbE,YAAA,wBhYy1zDQ5iK,GgYt1zDRrU,MAAA9b,EAAAkX,YAAyC,kDACzC27K,gBAAa,yBACbE,YAAA,wBhYy1zDQqmE,IgYt1zDRt9O,MAAA9b,EAAAkX,YAAwC,sDACxC27K,gBAAa,wBACbE,YAAA,wBAKF/yL,EAAK83P,cAAa,KhYs1zDZ93P,EgYr1zDL6lP,aAAK9vB,kBAAqBz+M,UAAA,SAAwB1S,GAClD5E,EAAKgnP,cAAehnP,EAAIq5P,kBAAkBz0P,GAC1C5E,EAAKimP,gBAAAjmP,EAAwBgnP,eAAQhnP,EAAAgnP,cAAAhsP,OAAAgF,EAAAgnP,cAAA,QACrChnP,EAAK40P,0BAAmB,EACtB50P,EAAAmX,IAAAhP,iBAIHnI,EAAKwuN,oBAAoBjD,uBAAQj0M,UAAA,iBAAAtX,GAAAmX,IAAAhP,iBhYo1zD3BnI,EAAMwuN,oBAAoBhpD,QgYn1zDhCxlK,EAlGAg4P,GAAoBI,EAEL7hP,GhYs7zDb6hP,EgYn1zDGn/P,UAAoB+H,SAAc,WACvCrE,KAAKk2M,oBAAmBl2M,KAAAu6N,UAAA75M,UAAA1gB,KAAAu6N,UAAA55M,UACxB3gB,KAAAwa,IAAAhP,gBhYq1zDEiwP,EgYl1zDen/P,UAAAk3N,qBAAoB,WAErC,GAAA7pN,GAAO,GAAAmwN,GAUP,OATAnwN,GAAGowN,eAAmB/5N,KAAK0yO,oBACL,OAArB1yO,KAAA+3P,iBACApuP,EAAAqwN,YAAA94L,SAAAlhC,KAAA+3P,iBAEDpuP,EAAOmtB,KAAM92B,KAAG6xN,oBAAuBlD,iBACvChlN,EAAOswN,OAAAj6N,KAAau8P,YAAKxhQ,MACzB4O,EAAOuwN,WAAWl6N,KAAKo8P,gBAAcrhQ,MAErC4O,EAAOwwN,SAAOn6N,KAAAq8P,cAAAthQ,MACd4O,GhYk1zDE8xP,EgY/0zDGn/P,UAAoBw4M,oBAAY,SAAA5iB,GACrClyL,KAAKy0M,kBAAoBviB,EACzBlyL,KAAA28P,qBhYi1zDElB,EgY90zDGn/P,UAAmB+3P,mBAAkB,SAAA4E,GAQhCj5P,KAAG23P,iBAAKsB,EAEQ,QAAzBj5P,KAAK23P,kBACL33P,KAAA6xN,oBAAAhpD,QAED7oK,KAAA28P,qBhYw0zDElB,EgYr0zDgBn/P,UAAG48P,iBAAS,SAAAC,GAC9Bn5P,KAAKqpP,cAAA8P,EACLn5P,KAAA28P,qBhYu0zDElB,EgYp0zDGn/P,UAAoBm9P,iBAAA,SAAA/kC,GACzB10N,KAAA28P,qBhYs0zDElB,EgYjzzDFn/P,UAAAo9P,gBAAA,SAAAkD,GAlBA,GAAIv5P,GAACrD,IACLA,MAAK0yO,oBAAsBkqB,EAAA7hQ,MAC3BiF,KAAK+3P,eAAA,KACL/3P,KAAKk4P,wBAAwD,OAAhCl4P,KAAK0yO,oBAElC1yO,KAAIm4P,sBAAwBn4P,KAAKk4P,yBAAK,OAAAl4P,KAAA+3P,eACnB,OAAlB/3P,KAAK0yO,oBhYo0zDI1yO,KgYn0zDRkpP,aAAK7vB,cAAsBujC,EAAA7hQ,OAAA4f,UAAA,SAAA1S,GAC3B5E,EAAK00P,eAAc,KACnB10P,EAAAy4P,YAAWz4P,EAAQq5P,kBAASz0P,GAC1B+B,WAAA,WAAA3G,EAAAmX,IAAAhP,gBAAA,OAGHxL,KAAK+3P,eAAkB,KACvB/3P,KAAK87P,cAAiB38O,MAAO,MAAOpkB,MAAO,OAC3CiF,KAAA+7P,aAAA58O,MAAA,MAAApkB,MAAA,QAGDiF,KAAA28P,qBhYq0zDElB,EgYrzzDFn/P,UAAAq9P,eAAA,SAAAjlC,GAbA,GAAIrxN,GAACrD,IACLA,MAAK+3P,eAAArjC,EAA8B,MACnC10N,KAAIm4P,sBAAyB,OAAAn4P,KAAA+3P,eACV,OAAlBrjC,EAAK,MhYo0zDI10N,KgYn0zDRkpP,aAAK5vB,aAAkB5E,EAAA,OAAkB/5M,UAAM,SAAA1S,GAC/C5E,EAAK04P,WAAY14P,EAAOq5P,kBAACz0P,GACzB5E,EAAA20P,aAAW,KACThuP,WAAA,WAAA3G,EAAAmX,IAAAhP,gBAAA,OAGHxL,KAAK+7P,aAAe58O,MAAK,MAAApkB,MAAA,OACzBiF,KAAAg4P,aAAA,MAEDh4P,KAAA28P,qBhYs0zDElB,EgYn0zDMn/P,UAAAugQ,wBAAA,SAAAnqD,GACPA,IACA1yM,KAAKo8P,gBAAiB1pD,EACtB1yM,KAAA28P,sBhYs0zDClB,EgYl0zDMn/P,UAAAwgQ,sBAAA,SAAApqD,GACPA,IACA1yM,KAAKq8P,cAAA3pD,EACL1yM,KAAA28P,sBhYq0zDClB,EgYj0zDMn/P,UAAAygQ,oBAAA,SAAArqD,GACPA,IACA1yM,KAAKu8P,YAAA7pD,EACL1yM,KAAA28P,sBhYo0zDClB,EgYh0zDGn/P,UAAoBs9P,aAAA,SAAAllC,GACzB10N,KAAA28P,qBhYk0zDElB,EgY/zzDQn/P,UAAA45M,mBAAuC,SAAIwe,GACrD10N,KAAK44B,KAAAu9K,sBAAsBue,EAAA,GAAAA,EAAuB,IAClD10N,KAAKu6N,UAAAv6N,KAAiB44B,KAAG88K,wBACzB11M,KAAA28P,qBhYi0zDElB,EgY9zzDgBn/P,UAAQq6N,cAAM,SAAAqjC,GAChCh6P,KAAAmzM,cAAA1N,KAAAu0D,GhYg0zDEyB,EgY7zzDen/P,UAAK29P,uBAAuB,SAAAvnD,GACvC,OAALA,GAAK,eAAwBA,IAC7B1yM,KAAAk6P,oBAAAxnD,EAAAhnK,chYg0zDC+vN,EgY5zzDMn/P,UAAmBm2O,iBAAW,SAAAr4L,GAGZ,OAAzBp6C,KAAK0yO,qBACL1yO,KAAAk6P,oBAAA9/M,EAAA22L,kBAAA,KhY6zzDC0qB,EgYzzzDGn/P,UAAoBm4N,SAAA,SAAAC,GACzB10N,KAAA28P,qBhY2zzDElB,EgYxzzDGn/P,UAAoBq4N,YAAA,SAAAD,GACzB10N,KAAA28P,qBhY0zzDElB,EgYvzzDMn/P,UAAkB49P,oBAAM,SAAAxuN,GhYwzzD1B,GgYvzzDU,OAAf1rC,KAAeqqP,chYwzzDN,IgYxzzDL,GAAI5tO,GAAG,EAAAC,EAAA1c,KAAAqqP,cAAA5tO,EAAAC,EAAAre,OAAAoe,IAAA,CACV,GAAGi2L,GAAIh2L,EAAKD,EACXi2L,GAAI33M,QAAC2wC,IACL1rC,KAAKspP,gBAAgB52C,EACrB1yM,KAAA05P,gBAAAhnD,MhY6zzDD+oD,EgYvzzD0Bn/P,UAAAogQ,kBAAA,SAAAtiN,GAC5B,GAAIzwC,EhYwzzDE,IgYvzzDU,GAAfywC,EAAA/7C,OACA,QAAAtD,MAAA,GAAAokB,MAAA,IAEDxV,GAAO,GAAMtN,OAAO,GACpBsN,EAAKqN,MAASmI,MAAK,MAASpkB,MAAM,MhYwzzD5B,KgYvzzDL,GAAKk+B,GAAC,EAAMA,EAAImhB,EAAQ/7C,OAAO46B,IAEV,MAApBmhB,EAAOnhB,GAAMoC,KACb1xB,EAAAqN,MAAAjc,MAAAq/C,EAAAnhB,GAAAoC,KAAAlc,MAAAi7B,EAAAnhB,GAAAlmB,OAEsB,MAAfqnC,EAAMnhB,GAAEpmB,IACflJ,EAAAqN,MAAAjc,MAAAq/C,EAAAnhB,GAAApmB,GAAAsM,MAAAi7B,EAAAnhB,GAAAlmB,MAGF,OAAApJ,IhYwzzDE8xP,EgYjvzDFn/P,UAAA0gQ,uBAAA,WAnEA,GAAG35P,GAAKrD,IhYszzDF,IgYrzzDuB,OAA5BA,KAAIyzO,4BAAwB,CAC5B,GAAIwpB,GAAC/iQ,EAA8B,IACnC8F,MAAAyzO,4BAAAwpB,EAAAzkQ,YhYuzzDKwH,KgYjzzDLkpP,aAAK/vB,aAAmBn5N,KAAO44B,KAAEta,UAAAte,KAAAu6N,UAAAv6N,KAAAwzN,wBAAA74M,UAAA,SAAA1S,GACjC5E,EAAImnP,aAAiB,GAAAnuP,OAAS,EAE9B,IAAIw+P,KAAK,SAAmB,ShYizzDnB,IgYhzzDkC,OAA1Cx3P,EAAIqvO,oBAAuC,CAC3C,GAAAhoD,GAAKziL,EAAcyiL,SACnBrnL,GAAK8vM,cAAc1N,KAAA,EACnBpiM,EAAgB8vM,cAAA6+B,YAAAtnD,EAAArsL,MhYizzDJ,KgYjzzDP,GAAIoe,GAAG,EAAA69O,EAAA5vE,EAAAjuK,EAAA69O,EAAAj8P,OAAAoe,IAAA,CACX,GAAIi2L,GAAK4nD,EAAa79O,GAClBisG,EAAQp9F,WAAWonL,EAAIhqF,OAC3BiqF,EAAYrnL,WAAYonL,EAAAC,MACxBkoD,GAAK7jP,MAAa07L,EAAI1wD,QAAC06E,aAAAh0G,IhYkzzDRrlH,EgYjzzDdmnP,aAAWxzO,MACXmI,MAAAuzL,EAAW1wD,QAAMjvI,KACjB24B,YAAMgnK,EAAA1wD,QAAA06E,aACNguB,KAAK,uBAAOh4C,EAAA1wD,QAAA06E,aAAAhqN,cACZg2G,MAAOA,EACLiqF,eAGJ,CACA,GAAAioB,GAAK3yN,EAAa2yN,OAClBv3N,GAAK8vM,cAAc1N,KAAA,EACnBpiM,EAAe8vM,cAAA6+B,YAAApX,EAAAv8N,MhYmzzDH,KgYnzzDR,GAAIqe,GAAG,EAAAq+O,EAAAngC,EAAAl+M,EAAAq+O,EAAA18P,OAAAqe,IAAA,CACV,GAAIg2L,GAAKqoD,EAAGr+O,GACRgsG,EAAQp9F,WAAWonL,EAAIhqF,OAC3BiqF,EAAYrnL,WAAYonL,EAAAC,MACxBkoD,GAAK7jP,MAAa07L,EAAIz1H,OAACg+I,YAAAvyG,IhYozzDRrlH,EgYnzzDdmnP,aAAYxzO,MACZmI,MAAMuzL,EAAAz1H,OAAWlqE,KACjB23O,KAAK,YACLhiI,MAAOA,EACLiqF,WAMLtvM,EAAK23P,kBAAe1vO,WAAArjB,EAAA2tM,QAAAltF,OAAAp9F,WAAArjB,EAAA2tM,QAAAjD,QhYkzzDXtvM,EgYjzzDRivO,cAEA59C,UAAQ,WACR13I,OAAA35C,EAAWmyM,iBAAYjC,sBACvB+6B,UAASusB,EhYizzDGpnP,SgY/yzDX4+N,WAAAv8C,OAAAzyL,EAAA+vO,iBAIyB,OAA1B/vO,EAAKqvO,sBACLrvO,EAAKivO,aAAa7+N,QAAQopN,WAAax5N,EAACqvO,sBAAoBrvO,GAAAowO,4BAAA,wBAC5DpwO,EAAIivO,aAAK7+N,QAAiBwpE,OAAQ55E,EAAAqvO,oBACf,QAAlBrvO,EAAKgmP,gBACLhmP,EAAAivO,aAAA7+N,QAAA4gO,YAAA,YAIAhxO,EAAAmX,IAAAhP,kBhYizzDDiwP,EgYnyzDFn/P,UAAAk+P,+BAAA,WAVA,GAAIn3P,GAACrD,IhY+yzDCA,MgY7yzDJkpP,aAAKnwB,8BAA0D/4N,KAAA44B,KAAAta,UAAAte,KAAAu6N,UAAAv6N,KAAAy0M,kBAAAz0M,KAAAwzN,wBAAA74M,UAAA,SAAA1S,GAC/D5E,EAAK43P,uBAAsB,GAAQ5+P,MhY8yzD3B,KgY7yzDP,GAAI48B,GAAC,EAAAA,EAAAhxB,EAAA5J,OAAuB46B,IAC5B51B,EAAA43P,uBAAAjkP,KAAA/O,EAAAgxB,GAAAhxB,KAED5E,GAAK63P,kBAAmBjzP,EAAA,GAAAyrD,OAExBrwD,EAAAmX,IAAAhP,kBhY+yzDAiwP,EgYtxzDFn/P,UAAA4gQ,iBAAA,WArBA,GAAI75P,GAACrD,IhY6yzDCA,MgY3yzDJkpP,aAAK1vB,gBAAqBx5N,KAAI44B,KAAgBta,UAAAte,KAAAu6N,UAAAv6N,KAAAwzN,wBAAA74M,UAAA,SAAA1S,GAC9C5E,EAAIu4P,YAAAloM,OAAqB,GAAAr3D,MhYizzDjB,KgY5yzDJ,GAJH8gQ,IACAjnE,gBAAiB,GAAA75L,OACjB+5L,YAAU,GAAe/5L,OACxB4L,KAAA,GAAA5L,QACMogB,EAAG,EAAAC,EAAAzU,EAAAm1P,UAAA3gP,EAAAC,EAAAre,OAAAoe,IAAA,CACV,GAAIi2L,GAAAh2L,EAAAD,GACJ4gP,EAAmBh6P,EAAAi6P,qBAAqB5qD,EAAA6qD,IACxCJ,GAAmBjnE,gBAAgBl/K,KAACqmP,EAAannE,iBACjDinE,EAAmB/mE,YAAUp/K,KAAAqmP,EAAoBjnE,aACjD+mE,EAAiBl1P,KAAM+O,KAAKsU,WAAConL,EAAahqF,QAC1CrlH,EAAAu4P,YAAAloM,OAAA18C,KAAAqmP,EAAAl+O,OAGD9b,EAAKu4P,YAAY3zP,KAAK,GAAK5L,OAC3BgH,EAAKu4P,YAAA3zP,KAAiB+O,KAACmmP,GACvB95P,EAAK23P,kBAAkB1vO,WAACrjB,EAAA2tM,QAAAltF,OAAAp9F,WAAArjB,EAAA2tM,QAAAjD,QACvBtvM,EAAAmX,IAAAhP,kBhY8yzDDiwP,EgYxxzDFn/P,UAAAkhQ,iBAAA,WAlBA,GAAIn6P,GAACrD,IhY4yzDCA,MgY1yzDJkpP,aAAKzvB,gBAAuBz5N,KAAK44B,KAAwBta,UAAAte,KAAAu6N,UAAAv6N,KAAAwzN,wBAAA74M,UAAA,SAAA1S,GACzD5E,EAAKw4P,YAAY5zP,KAAM,GAAG5L,OAC1BgH,EAAIw4P,YAAAnoM,OAAqB,GAAAr3D,MhYizzDjB,KgY3yzDJ,GALHohQ,IACAvnE,gBAAgB,WAChBwnE,aAAU,GACVz1P,KAAK,GAAE5L,OACN8iB,MAAA9b,EAAAkX,YAAA,uDACMkC,EAAG,EAAAC,EAAAzU,EAAA01P,UAAAlhP,EAAAC,EAAAre,OAAAoe,IAAA,CACV,GAAAi2L,GAAAh2L,EAAAD,EACAghP,GAAiBx1P,KAAM+O,KAAKsU,WAAKonL,EAAQhqF,QACzCrlH,EAAAw4P,YAAAnoM,OAAA18C,KAAA07L,EAAAkrD,SAAA,KAAAlrD,EAAAmrD,QAEDx6P,EAAKw4P,YAAA5zP,KAAiB+O,KAACymP,GACvBp6P,EAAK23P,kBAAkB1vO,WAACrjB,EAAA2tM,QAAAltF,OAAAp9F,WAAArjB,EAAA2tM,QAAAjD,QACvBtvM,EAAAmX,IAAAhP,kBhY8yzDDiwP,EgYlyzDFn/P,UAAAq+P,wBAAA,WARA,GAAMt3P,GAAArD,IhY6yzDAA,MgY1yzDJkpP,aAAKxvB,uBAA6B15N,KAAA44B,KAAAta,UAAAte,KAAAu6N,UAAAv6N,KAAAwzN,uBAFlB,KAEkB74M,UAAA,SAAA1S,GAClC5E,EAAK83P,cAAclzP,EAAOkmN,QAC1B9qN,EAAK8vM,cAAc1N,KAAA,EACnBpiM,EAAK8vM,cAAI6+B,YAAe/pO,EAAAkmN,QAAA9vN,OACvBgF,EAAAmX,IAAAhP,kBhY6yzDDiwP,EgYzyzDMn/P,UAAgBqgQ,kBAAc,WAChC,UAAL38P,KAAK23P,kBACL33P,KAAKw6P,iCACLx6P,KAAAy6P,mBAC8B,eAAzBz6P,KAAA23P,iBACL33P,KAAAg9P,0BASAh9P,KAAKw6P,iCACLx6P,KAAKy6P,kBACLz6P,KAAA26P,4BhYuyzDCc,EgYnyzDen/P,UAACghQ,qBAA6B,SAAAQ,GhYoyzDzC,MgYnyzDLA,KAAO99P,MAAKw8P,4BACZx8P,KAAAw8P,4BAAAsB,GAED99P,KAAAw8P,4BAAA,KhYqyzDEf,EgY5xzDFn/P,UAAAm+P,gBAAA,WANA,GAAIp3P,GAACrD,IhYoyzDCA,MgYlyzDJkpP,aAAKjwB,8BAAmCj5N,KAAO44B,KAAAta,UAAAte,KAAAu6N,UAAAv6N,KAAAwzN,wBAAA74M,UAAA,SAAA1S,GAC/C5E,EAAK23P,kBAAkB/yP,EAACygH,MAAAzgH,EAAA0qM,OAExBtvM,EAAAmX,IAAAhP,kBhYoyzDAiwP,EgYhyzDiBn/P,UAAQ0+P,kBAAY,SAAmBtyI,EAAMiqF,GAChE,GAAIorD,GAAgB/9P,KAAKua,YAA6B,+CAElDs7L,EAAelD,EAAA,EAAAjqF,EAAAiqF,EAAA,IhYgyzDb3yM,MgY/xzDLo7P,cACC9qO,MAAOytO,EAAqB,MAAGhjQ,MAAO43M,EAAOz5L,KAAM6kP,EAAiC,kBAAGh+G,KAAM,oBAAAlvB,MAA2B,gCACxHvgG,MAAOytO,EAAc,MAAAhjQ,MAAiB2tH,EAAOxvG,KAAE6kP,EAAkC,kBAAAh+G,KAAA,0BAA4BlvB,MAAiB,iCAC9HvgG,MAAAytO,EAAA,eAAAhjQ,MAAA86M,EAAA38L,KAAA6kP,EAAA,kBAAAh+G,KAAA,kBAAAlvB,MAAA,kCAvfS,IAAAp0G,GAAAC,EAAAC,EAAAC,EAAAC,EAAqBC,EAAAC,EAAAC,EAAAC,CAAS,OhY0x0DvCw+O,GgYty0DHH,IhYuy0DO5gQ,OgYty0DPM,GAAU,YACV4V,SAAU,2BACVE,SAAQ5W,EAAA,MhYuy0DGiX,QgYry0DV,wDACA,uHACA,mDACA,4CACA,2DAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACW67O,GAyfZ,wCAAA9+O,MAAA,KAAA27M,SAAA37M,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAsxM,SAAAtxM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4rK,GAAA,GAAAA,GAAA,IAAA5rK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA40L,SAAA50L,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAyxM,SAAAzxM,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAhiB,GAAA,mBAAAA,GAAA,oBAAAgiB,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAsiI,GAAA,GAAAA,GAAA,IAAAtiI,GAAAviB,UAAD+gQ,IAzfkCp+G,GAAA,GhY8y0D9B2gH,GAAwBh+P,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACvF,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GiYr00D/D6kP,KACE/6M,KAAM,GAAAxQ,UAAQ8oN,KACft4M,KAAA,OAAAxQ,UAAAqkN,KAoCFmH,GAAA,WAAiC,QAACC,MAAA,MjYi00D9BA,GiYn20DHH,IjYo20DOtjQ,OiYn20DPM,GAAS,WjYo20DEqX,SiYl20DVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAymG,IACXx2F,GAAA,YACAwoC,GACAjT,GACAgtB,GACAmB,GACAmmB,GACA+gB,GACAO,GACAd,IjYq20DU1/O,ciYl20DVopP,GAEAzE,GACAnD,GACAX,IjYo20DUn9O,WiYj20DV47L,GAEA0mB,GACA/jB,GACAma,GACAR,GACA0mC,OAE+ByJ,MjYw20D7BC,GAAqCp+P,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DilP,GAAqCr+P,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC9E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IkYt60D1G4kP,GAAA,eAmBCC,GAC8B,WlYu50D3B,QkYv50DKC,GAAsBhkP,GAnBCxa,KAAAwa,MAEZxa,KAAA4Q,SAAA0tP,GACAt+P,KAAAy+P,cAAc,GAAIzjQ,IAAY,aAC9BgF,KAAA0+P,YAAc,GAAG1jQ,IAAI,aACrBgF,KAAA2+P,eAAiB,GAAI3jQ,IAAA,aAG/BgF,KAAA4+P,eAAgB,GAAA5jQ,IAAA,aAChBgF,KAAA6+P,WAAa,GAKa7+P,KAAA8+P,WAAA,GAM9B9+P,KAAA++P,iBAAA,ElYi60DFP,EkY950DGliQ,UAAoB0iQ,wBAAM,SAAAp6P,GAC/B5E,KAAKi/P,kBAAoBr6P,EACzB5E,KAAK4+P,eAAIrzP,KAAevL,KAAAi/P,mBACxBj/P,KAAAwa,IAAAhP,gBlYg60DEgzP,EkY750DcliQ,UAAM4iQ,wBAAwB,SAAA56N,GAC9C,GAAI66N,GAAK76N,EAAAliC,oBAA4B,CACpCpC,MAAK++P,iBAAkBI,IACvBn/P,KAAK++P,gBAAkBI,EACvBn/P,KAAAwa,IAAAhP,gBAEDxL,KAAA2+P,eAAApzP,KAAA+4B,IAGDk6N,EAAAliQ,UAAA8iQ,uBAAA,SAAqB96N,GAAsBtkC,KAAKy+P,cAAgBlzP,KAAC+4B,IlY650D9Dk6N,EAAqBliQ,UAAU+iQ,qBAAuB,SAAU/6N,GAAStkC,KAAK0+P,YAAYnzP,KAAK+4B,GkYn80D5E,IAAA7nB,GAAAC,CAwCtB,OlY650DG0hP,KACI1jQ,OAAOM,GAAsB,aAAG,SAChCqjQ,GAAkC,cAAe3jQ,SkYr80D9C8jQ,EAAAliQ,UAAA,mBlYu80DP8hQ,IACI1jQ,OAAOM,GAAiB,UACxBqjQ,GAAkC,cAAe3jQ,SkYx80D9C8jQ,EAAAliQ,UAAA,wBlY080DP8hQ,IACI1jQ,OAAOM,GAAiB,UACxBqjQ,GAAkC,cAAe3jQ,SkY380D9C8jQ,EAAAliQ,UAAA,sBlY680DP8hQ,IACI1jQ,OAAOM,GAAiB,UACxBqjQ,GAAkC,cAAe3jQ,SkY980D9C8jQ,EAAAliQ,UAAA,yBlYg90DP8hQ,IACI1jQ,OAAOM,GAAiB,UACxBqjQ,GAAkC,cAAe3jQ,SkYh90D/C8jQ,EAAAliQ,UAAA,yBlYk90DN8hQ,IACI1jQ,OAAOM,GAAgB,SACvBqjQ,GAAkC,ckYp90DU,mBAAA5hP,MAAA,KAAAzhB,GAAA,aAAAA,GAAA,cAAAyhB,GAAA/hB,SAC1C8jQ,EAAAliQ,UAAA,uBlYq90DN8hQ,IACI1jQ,OAAOM,GAAgB,SACvBqjQ,GAAkC,cAAe3jQ,SkYt90D/C8jQ,EAAAliQ,UAAA,qBlYw90DN8hQ,IACI1jQ,OAAOM,GAAgB,SACvBqjQ,GAAkC,cAAe3jQ,SkYz90D/C8jQ,EAAAliQ,UAAA,qBlY290DN8hQ,IACI1jQ,OAAOM,GAAgB,SACvBqjQ,GAAkC,ckY790DnBhiQ,QACbmiQ,EAAAliQ,UAAA,gBlY890DN8hQ,IACI1jQ,OAAOM,GAAgB,SACvBqjQ,GAAkC,cAAe16M,WkY/90D/C66M,EAAAliQ,UAAA,uBlYi+0DN8hQ,IACI1jQ,OAAOM,GAAgB,SACvBqjQ,GAAkC,cAAe16M,WkYj+0DrB66M,EAAAliQ,UAAA,oBlYm+0DhC8hQ,IACI1jQ,OAAOM,GAAsB,aAAG,sBAChCqjQ,GAAkC,cAAe3jQ,SkYp/0D5C8jQ,EAAoBliQ,UAAA,0BlYs/0D7BkiQ,EkY5/0DHJ,IlY6/0DO1jQ,OkY5/0DPM,GAAQ,YACR4V,SAAU0tP,GACVxtP,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW2+O,GAyCZ,wCAAA3hP,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,UAAD8jQ,MlY290DIc,GAAkCt/P,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GmYz/0DhEmmP,GAAA,WAAiC,QAACC,MAAA,MnYkg1D9BA,GmYth1DHF,InYuh1DO5kQ,OmYth1DPM,GAAS,WnYuh1DEqX,SmYrh1DV8qI,GAAA,aACAoxG,GAAA,uBAIDz4O,anYqh1DW1D,cmYjh1DVmsP,InYoh1DU3sQ,SmYjh1DV2sQ,InYoh1DUvtE,iBmYjh1DVutE,OAE+BiB,MnYyh1D7BC,GAAuBvlQ,EAAoB,KAI3CwlQ,GAA0C1/P,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DumP,GAA0C3/P,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IoY1i1DzGkmP,GAC4B,WpYgj1DzB,QoYhj1DMC,GAAmB3K,GANXl1P,KAAAk1P,MAAOA,EAOnBl1P,KAAA46N,QAAA,GAAAlgE,KAGLmlG,EAAAvjQ,UAAAwjQ,mBAAA,SAAkBp0N,GAAmB,MAAA1rC,MAAA+/P,cAAAjiQ,QAAA4tC,IAAA,GpYij1DlCm0N,EoYhj1D8BvjQ,UAAK0jQ,kBAAO,SAASt0N,GACrD,GAAIs2G,GAAOhiJ,KAAAigQ,WAAAh4M,KAAA,SAAA9uC,GAAA,MAAAA,GAAAkiB,OAAAqQ,GpYij1DL,OoYhj1DLs2G,GACUA,EAACjvI,KACZ,MpYkj1DE8sP,EoY/i1D8BvjQ,UAAC4jQ,eAAoB,SAAYx0N,EAAesxL,GAChF,GAAIpC,GAAQ56N,KAAA46N,QAAAl8D,IAAAhzH,GAAA1rC,KAAA46N,QAAA54N,IAAA0pC,GAAA,IpYgj1DN,KoY/i1DLkvL,EACK,MAAM,KACZ,IAAI39I,GAAQ29I,EAAA3yK,KAAA,SAAA9uC,GAAA,MAAAA,GAAAtG,KAAAmqN,GpYgj1DN,OoY/i1DL//I,GACUA,EAAClqE,KACZ,MpYij1DE8sP,EoY9i1D8BvjQ,UAAC6jQ,eAAoB,SAAYz0N,EAAesxL,GAChF,GAAIpC,GAAQ56N,KAAA46N,QAAAl8D,IAAAhzH,GAAA1rC,KAAA46N,QAAA54N,IAAA0pC,GAAA,IpY+i1DN,KoY9i1DLkvL,EACK,MAAM,KACZ,IAAA39I,GAAY29I,EAAQ3yK,KAAA,SAAA9uC,GAAA,MAAAA,GAAAtG,KAAAmqN,GpYgj1Dd,OoY/i1DNz0L,SAAMC,IAAMy0C,GACXA,EACUA,EAAClqE,KACZ,MpYgj1DE8sP,EoYni1DFvjQ,UAAAs7P,WAAA,WAVA,GAAIv0P,GAAKrD,IpY+i1DH,OoY9i1DLA,MAAAigQ,WACUvlQ,OAAOsuL,GAAA,IAAAhpL,KAAeigQ,YAC/BjgQ,KACAk1P,MAAA97B,kBAEC34B,KAAK/lM,OAAA+8M,GAAuB,iBAAA/9L,GAAA,QAAAA,IAAAhf,OAAA+8M,GAAA,cAAA/sB,GAC5BrnL,EAAK48P,WAAav1E,EAElBrnL,EAAA08P,cAAA18P,EAAA48P,WAAA1jQ,IAAA,SAAA4c,GAAA,MAAAA,GAAAkiB,KAAAoqB,oBpY8i1DDo6M,EoYji1DFvjQ,UAAAu7P,SAAA,SAAAnsN,GATA,GAAIroC,GAAKrD,IpY4i1DH,IoY3i1DLA,KAAM46N,QAASl8D,IAAIhzH,GAAa,CAChC,GAAI00N,GAAQpgQ,KAAA46N,QAAA54N,IAAA0pC,EpY4i1DH,IoY3i1DR00N,EACD,MAAA1lQ,QAAAsuL,GAAA,IAAAo3E,GpY6i1DK,MoY3i1DJpgQ,MACAk1P,MAAA77B,cAAA3tL,GAEF+0J,KAAA/lM,OAAA+8M,GAAA,cAAAmjB,GAAA,MAAAv3N,GAAAu3N,QAAAj4N,IAAA+oC,EAAAkvL,MA/DW,IAAAn+M,EA8EZ,OpY6h1DGojP,GoY5m1DSH,IpY6m1DLhlQ,OAAOM,GAAqB,coY5m1DvB2kQ,GA8EZ,wCAAAljP,MAAA,KAAA27M,SAAA37M,GAAA/hB,UAADmlQ,MpYsi1DIQ,GAA8BrgQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DknP,GAA8BtgQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqY9n1DzG6mP,GACiC,WrYoo1D9B,QqYpo1DMC,GAAAC,EAAwBC,EAAAC,GACxB3gQ,KAAAygQ,YACAzgQ,KAAA0gQ,gBAAgBA,EACpB1gQ,KAAA2gQ,mBrYso1DFH,EqYno1DQlkQ,UAAIo2J,UAAiB,SAAQx0J,GrYoo1DjC,IqYno1DLA,GAAa,gBAAAA,MAAAG,OAAA,EACd,MAAQH,ErYoo1DF,QqYno1DLA,GrYoo1DS,IqYno1DR,MACD,gBrYoo1DS,SqYlo1DT,MAAA8B,MAAA0gQ,gBAAAhuG,UAAA1yJ,KAAAygQ,UAAA/tG,UAAA1yJ,KAAA2gQ,iBAAAjuG,UAAAx0J,MAhBU,IAAAue,GAAAC,EAAAC,CAmBZ,OrYoo1DG6jP,GqYzp1DHH,IrY0p1DO3lQ,OAAOM,GAAe,OAAK+X,KAAM,cqYxp1D5ButP,GAmBZ,wCAAA7jP,MAAA,KAAA0gI,GAAA,eAAAA,GAAA,gBAAA1gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA81O,SAAA91O,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAs1O,SAAAt1O,GAAAjiB,UAAD8lQ,MrY6o1DII,GAA2C5gQ,MAAQA,KAAKwnF,UAAa9sF,OAAOusC,QAAU,SAASxY,GAC/F,IAAK,GAAIZ,GAAGvvB,EAAI,EAAG0Z,EAAInO,UAAUxL,OAAQC,EAAI0Z,EAAG1Z,IAAK,CACjDuvB,EAAIhkB,UAAUvL,EACd,KAAK,GAAI/C,KAAKsyB,GAAOnzB,OAAO4B,UAAUd,eAAegB,KAAKqxB,EAAGtyB,KACzDkzB,EAAElzB,GAAKsyB,EAAEtyB,IAEjB,MAAOkzB,IAEPoyO,GAA6C7gQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D0nP,GAA6C9gQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IsYvp1DzGqnP,GAG+C,WtYmq1D5C,QsYrq1DMC,GAAcroO,EAAAC,EAAAqoO,GACdjhQ,KAAA24B,SACA34B,KAAA44B,OAPA54B,KAAAihQ,MAEDjhQ,KAAAkhQ,mBAAoB,MAMvBlhQ,KAAAmhQ,gBAAA,EtYyq1DFH,EsYvq1DkD1kQ,UAAAq+B,SAAA,SAAAymO,EAAkDC,GAEtG,WAD4B,KAA5BA,IAA4BA,EAAgC,SAC5DrhQ,KAAA24B,OAAAgC,SAAA2mO,IAAAF,cAAAC,sBAAAE,YAAA,KAGDP,EAAA1kQ,UAAAklQ,WAAA,SAAA/nP,GAAA,MA7BK,MA6BgCA,GACrCunP,EAAA1kQ,UAAAmlQ,iBAAA,SAAiBhoP,GAAa,MA7BT,MA6BkCA,GACvDunP,EAAA1kQ,UAAAolQ,iBAAA,SAAuBjoP,GAAO,MA7Bf,MA6BkCA,GACjDunP,EAAA1kQ,UAAAqlQ,UAAA,SAAeloP,GAAI,MApBpB,MAoB6CA,GAE5CunP,EAAA1kQ,UAAAslQ,MAAA,SAAAnoP,GAAA,MAAAzZ,MAAAwhQ,WAAA/nP,IAAAzZ,KAAAyhQ,iBAAAhoP,IAAAzZ,KAAA0hQ,iBAAAjoP,IAAAzZ,KAAA2hQ,UAAAloP,ItYsq1DGunP,EAAqC1kQ,UAAUulQ,oBAAsB,WsYrq1DvE,GAAMplP,GACN89M,EAASv6N,KAAC44B,KAAA88K,uBACV,OAAAj5L,QAAA,EAAA89M,EAAA75M,UAAAqwL,OAAA,IAAAwpB,EAAA55M,QAAAowL,OAAAt0L,GtYwq1DEukP,EAAqC1kQ,UAAUwlQ,kBAAoB,SAAUp2N,EAAasxL,GsYnq1D5F,GAAIvgN,GAAEC,EAAAC,CtYqq1DA,OsYpq1DL+uB,IAAUsxL,GACLvgN,KAAWA,EAAA,EAAAivB,EAAA,IAAAsxL,EAAAvgN,GAChBivB,GACDhvB,KAAUA,EAAY,EAAE,GAAGgvB,EAAAhvB,IAC3BC,OAAA,KAAAA,ItYsq1DEqkP,EAAqC1kQ,UAAUylQ,kBAAoB,SAAU7vE,GsYnq1D/E,GAAAz1K,EACA,OAAAA,QAAA,EAAAy1K,EAAAz1K,GtYsq1DEukP,EAAqC1kQ,UAAU0lQ,WAAa,SAAUlrO,GsYnq1DxE,GAAIra,GAAEC,CtYqq1DA,OsYpq1DLoa,IACDra,KAAUA,EAAa,EAAEqa,EAAGkN,KAAA,KAAAvnB,IAC5BC,OAAA,KAAAA,ItYsq1DEskP,EsYnq1DyB1kQ,UAAA2lQ,eAAA,SAAA1lQ,GtYoq1DrB,IsYlq1DLA,EAAAmiK,IA9DG,KA+DH,WAED,IAAIwjG,GAAO3lQ,EAASyF,IAjEhB,ItYou1DE,IsYjq1DO,gBAALkgQ,IAAKA,EAAA7jQ,OAAA,EACZ,WAED,IAAI8jQ,GAAgBD,EAAYr+N,MAAE,ItYkq1D5B,IsYhq1DO,IAAZs+N,EAAY9jQ,OACZ,WAED,IAAI+jQ,EtYiq1DE,KsY/p1DLA,GAAAlhO,SAAAihO,EAAA,IAAAjhO,SAAAihO,EAAA,KtYkq1DK,MsYhq1DLxjP,GACA,YtYkq1DK,GsY/p1DLyjP,EAAY,GAAAA,EAAA,GACZ,WAED,IAAIC,EtYgq1DE,KsY9p1DLA,GAAAlxE,GAAAruK,EAAAiuL,KAAAqxD,EAAA,IAAAjxE,GAAAruK,EAAAiuL,KAAAqxD,EAAA,KtYiq1DK,MsY/p1DLzjP,GACA,YtYiq1DK,MsY9p1DL0jP,GAAY,GAAA7zM,WAAA6zM,EAAA,GAAA7zM,UAIZ6zM,EAAY,GAAAC,cAAAD,EAAA,IACZ,MAGDriQ,KAAA44B,KAAOu9K,sBAAiBksD,EAAA,GAAAA,EAAA,IACxBD,GARC,MtYsq1DCpB,EsY3p1D+B1kQ,UAAGimQ,iBAAA,SAAAhmQ,GtY4p1D9B,OsY3p1DLA,EAAKyF,IA1Gc,MA2GnB,IAAK,OAAO,MAAO,MACnB,KAAK,MAAO,MAAC,KACb,KAAK,OAAQ,MAAC,MACd,KAAK,QAAQ,MAAO,OACpB,YAAS,MAAW,MACpB,uBtY8p1DCg/P,EsY1p1DuB1kQ,UAAAkmQ,SAAA,SAAAjmQ,GtY2p1DnB,IsYzp1DLA,EAAAmiK,IArHa,KAsHb,WAED,IAAI+jG,GAAOlmQ,EAAOyF,IAxHJ,ItYkx1DR,IsYxp1DO,gBAALygQ,GACP,WAED,IAAMC,GAAcD,EAAA5+N,MAAgB,KAC9B6H,EAAYg3N,EAAc,GAAArkQ,OAAa,EAAAqkQ,EAAmB,GAAK,KACrEC,EAASD,EAASrkQ,OAAA,EAAAqkQ,EAAA,OtYyp1DZ,OsYxp1DDC,IACAj3N,YAAWA,EAAEsxL,SAAC97L,SAAAyhO,KAQnBj3N,gBtYmp1DEs1N,EsYhp1DwB1kQ,UAAAsmQ,YAAA,SAAArmQ,GtYip1DpB,IsY/o1DLA,EAAAmiK,IApIH,KAqIG,WAED,IAAImkG,GAAOtmQ,EAAQyF,IAvIrB,ItYux1DQ,IsY9o1DO,gBAAL6gQ,GACP,WAED,IAAIC,GAAeD,EAAWh/N,MAAE,ItY+o1D1B,OsY7o1DO,IAAZi/N,EAAYzkQ,OACZ,KAEDykQ,EAAAvmQ,IAAA,SAAAkyB,GAAA,MAAAyS,UAAAzS,KAAA7wB,OAAA,SAAAU,GAAA,MAAAsuB,UAAAtuB,MAAA,KtY+o1DE0iQ,EsY5j1DF1kQ,UAAAymQ,iBAAA,SAAAC,GAhFA,GAAA3/P,GAAYrD,ItY8o1DN,OsY7o1DJA,MACAihQ,IAAArJ,aAECn3D,KAAI/lM,OAAA+8M,GAAqB,sBtY8o1DlB,IsYro1DF,GADDwrD,IAA6C,EACjDC,KAAWjqO,EAAG,EAAAxc,EAAAumP,EAAA/7O,KAAAgS,EAAAxc,EAAApe,OAAA46B,IAAA,CACb,GAAIhgB,GAAKwD,EAAAwc,EACR51B,GAAAu+P,MAAY3oP,KACbiqP,EAAAjqP,GAAA+pP,EAAAhhQ,IAAAiX,IAGW5V,EAAA4+P,eAAAe,KAGXE,EAAYtC,MAAQsC,EAAA7/P,EAAAw+P,uBACpBoB,GAAA,GAIiB5/P,EAAAk/P,iBAAAS,KAGjBE,EAAYtC,MAAQsC,EAAA7/P,EAAA0+P,kBAAA1+P,EAAA69P,qBACpB+B,GAAA,EAID,IAAIE,GAAc9/P,EAAAm/P,SAAAQ,EtY+n1DX,IsY9n1DNG,GAKA,GAAMA,EAAcz3N,aAA0C,KAAvCy3N,EAAYz3N,YAA4B,CAC/D,GAAMA,IAAa,GAAIy3N,EAAAz3N,aAAmB+Z,cACtCqO,EAAQzwD,EAAA49P,IAAAnB,mBAAAp0N,EAEXooB,KACAovM,EAAYtC,MAAQsC,EAAA7/P,EAAAy+P,kBAAA,OACpBmB,GAAA,QATDC,GAAYtC,MAAQsC,EAAA7/P,EAAAy+P,kBAAA,OACpBmB,GAAA,CtY4o1DM,OsY9n1DI5/P,GAAAu/P,YAAAI,KAGVE,EAAYtC,MAAQsC,EAAA7/P,EAAA2+P,WAAA,OACpBiB,GAAA,GAMAA,GAEC5/P,EAAK89P,gBAAS,IACd99P,EAAKs3B,SAAAuoO,EAAkB,IACvB7/P,EAAA89P,mBAEA54N,QAAA5pB,MAAA,0EAGDjkB,OAAAsuL,GAAA,UAID3lL,EAAA89P,gBAAU,EAEVzmQ,OAAAsuL,GAAA,YAlOQ,IAAAvsK,GAAAC,EAAAC,CAqOZ,OtYin1DGqkP,GsYv11DSH,ItYw11DLnmQ,OAAOM,GAAqB,csYv11DvB8lQ,GAqOZ,wCAAArkP,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAijP,SAAAjjP,GAAAjiB,UAADsmQ,MtY0n1DIoC,GAAyCpjQ,MAAQA,KAAKwnF,UAAa9sF,OAAOusC,QAAU,SAASxY,GAC7F,IAAK,GAAIZ,GAAGvvB,EAAI,EAAG0Z,EAAInO,UAAUxL,OAAQC,EAAI0Z,EAAG1Z,IAAK,CACjDuvB,EAAIhkB,UAAUvL,EACd,KAAK,GAAI/C,KAAKsyB,GAAOnzB,OAAO4B,UAAUd,eAAegB,KAAKqxB,EAAGtyB,KACzDkzB,EAAElzB,GAAKsyB,EAAEtyB,IAEjB,MAAOkzB,IAEP40O,GAA2CrjQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DkqP,GAA2CtjQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuYp01DzG6pP,GAGS,WvY601DN,QuY/01DMC,GAAiB5qO,EAAA81L,EAAA+0C,EAAA73L,GACjB5rE,KAAA44B,OACA54B,KAAA0uN,aACA1uN,KAAAyjQ,YA/BAzjQ,KAAA4rE,OAASA,EACT5rE,KAAA40P,UAAS,GAIT50P,KAAAgB,OAAA,GAAAhG,IAAuB,aAGhCgF,KAAA0jQ,gBAAsC1jQ,KAAC2jQ,kBAAAjtP,KAAA1W,MACvCA,KAAA4jQ,iBAQS5jQ,KAAAu4P,iBAAgB,EACRv4P,KAAAg1P,iBAAgB,IAChBh1P,KAAA80P,cAAc,aAa1B90P,KAAA+0P,YAAA,MvYy11DFr6P,OAAOI,euY521DV0oQ,EAA8DlnQ,UAAkB,sBvY621DzE0F,IAAK,WAAc,SAAUwpB,OAAOxrB,KAAK4jQ,cAAcrnQ,IAAI,SAAU4c,GAAK,OAAUtG,GAAIsG,EAAEtG,GAAIU,IAAK4F,EAAE5F,SACrG9Q,YAAY,EuY921DiGC,cAAA,IvYi31DjHhI,OAAOI,euY/21DV0oQ,EAA4DlnQ,UAAA,sBvYg31DrD0F,IAAK,WAAc,QAAShC,KAAK6jQ,kBACjCphQ,YAAY,EuYj31DyCC,cAAA,IvYo31DzD8gQ,EuY7z1DFlnQ,UAAA25H,KAAA,WAnCA,GAAI5yH,GAACrD,IAmCL,OvY+z1DMA,MuYj21DJ8jQ,oBAAK9jQ,KAAA0uN,WAAYN,SAAMpuN,KAAA44B,KAAAta,WACvBmiL,KAAA/lM,OAAU+8M,GAAA,oBACV98L,WACAihE,KAAK,SAAE9kD,GAAW,MAAKzzB,GAAAwgQ,iBAAoBxgQ,EAAA0gQ,sBAAAjtO,IAC3CnY,MAAA,SAAUA,GAAM,MAAA4pB,SAAK5pB,MAAOA,IAC1B+vI,SAAA,iBAAArrJ,GAAArC,OAAAuK,UAGHvL,KAAKgkQ,qBACLhkQ,KAAAgkQ,mBAAA,GAAA/hC,IAAA,uBvYk21DKjiO,KuY/11DJikQ,qBACAjkQ,KAAAgkQ,mBAAQltI,eAIP2pE,KAAK/lM,OAAA+8M,GAAyB,iBAAQ/9L,GAAU,QAAKA,KAAArW,EAAAwgQ,kBAAAxgQ,EAAAwgQ,iBAAAnlG,IAAAhlJ,EAAA4mD,UAAA5lE,OAAA+8M,GAAA,mBAAA/8M,OAAA+8M,GAAA,oBAAA/wL,GvY811D9C,MuY711DPrjB,GAAKwgQ,iBAAc7hQ,IAAA0kB,EAAA45C,QAAAwvH,SAAA,EACnBzsL,EAAArC,OAAOuK,OACL7Q,OACAuuL,GAAA,UAAIviK,EAAAwuO,MAAA34P,IAAA,SAAAkpM,GAAA,MAAApiM,GAAA6gQ,sBAAAz+D,EAAA/+K,MACH+5K,KAAK/lM,OAAA+8M,GAAqB,KAAI,WAC9Bp0M,EAAKwgQ,iBAAc7hQ,IAAA0kB,EAAA45C,QAAAwvH,SAAA,EAEnBzsL,EAAArC,OAAAuK,aAKJoP,WACAgE,MAAA,SAAU1hB,GAAA,MAAMsrC,SAAK5pB,MAAM1hB,IACzByxJ,SAAA,iBAAArrJ,GAAArC,OAAAuK,UAEJvL,KAAAgB,QvYy11DEwiQ,EuYt11D0BlnQ,UAAYyY,QAAK,WACnB,MAAzB/U,KAAK8jQ,qBAAkC,GAAH9jQ,KAAG8jQ,oBAAA/8L,QACpC/mE,KAAC8jQ,oBAAsBltI,cAE3B52H,KAAI8jQ,oBAAK,KACkB,MAA1B9jQ,KAAKikQ,sBAAmC,GAAHjkQ,KAAGikQ,qBAAAl9L,QACrC/mE,KAACikQ,qBAAuBrtI,cAE5B52H,KAAIikQ,qBAAuB,KACF,MAAxBjkQ,KAAKgkQ,oBAAiC,GAAHhkQ,KAAGgkQ,mBAAAj9L,QACnC/mE,KAACgkQ,mBAAqBptI,cAC1B52H,KAAAgkQ,mBAAA,MvYs11DER,EuYn11DsBlnQ,UAAAusK,MAAA,WACxB7oK,KAAA4jQ,kBvYq11DEJ,EuYl11D0BlnQ,UAAU6nQ,YAAiB,SAAKn+I,GvYm11DtD,MuYl11DLA,IAAU,IAAHA,EAAG3nH,QAAA2B,KAAA4jQ,eAAA,IAAA5jQ,KAAA4jQ,cAAAvlQ,OAEX2B,KAAA4jQ,cAAAhmQ,OAAA,SAAAub,GAAA,MAAA6sG,GAAAloH,QAAAqb,EAAAtG,KAAA,IAAAtW,IAAA,SAAA4c,GAAA,MAAAA,GAAA5F,UvYo11DEiwP,EuYj11D6BlnQ,UAAA8nQ,WAAkB,SAAAvnQ,EAAA9B,EAAA8X,EAAAU,GACjD,GAAIqgD,GAAG/2D,EAAQgnC,MAAS7jC,KAAGg1P,iBvYk11DrB,OuYj11DLphM,IAAOA,EAAEv1D,OAAS,GAClBxB,QAAA,GAAAmD,KAAAyjQ,UAAA/wG,UAAA9+F,EAAA,IAAA5zD,KAAAg1P,iBAAAphM,EAAA,GAAA74D,QAAA8X,KAAAU,QAED1W,QAAAmD,KAAAyjQ,UAAA/wG,UAAA71J,GAAA9B,QAAA8X,KAAAU,QvYm11DEiwP,EuY/x1DFlnQ,UAAA+nQ,uBAAA,SAAArB,GAhDA,GAAM3/P,GAAOrD,KAET82B,EAAO92B,KAAA4rE,OAAAg3L,YAAAI,EvYg11DL,KuY901DLlsO,EACA,WAED,IAAMwtO,MACFC,IvY+01DE,IAAMvkQ,KAAK4jQ,euY901DL5jQ,KAAG4jQ,cAAAvlQ,OAAA,EvYw11DL,IuYx11DJ,GAALmmQ,GAAkBxkQ,KAAPi5B,EAAG,EAAAwrO,EAAA3tO,EAAAmC,EAAAwrO,EAAApmQ,OAAA46B,IAAA,CvYy11DD,GAAIyrO,GuYz11DND,EAAGxrO,IAET,SAAKyrO,GACRF,EAAAZ,cAAqB37M,KAAK,SAAA9uC,GAAA,MAAAA,GAAApe,QAAA2pQ,IAC1BH,EAAAvtP,KAAA0tP,GAEAJ,EAAAttP,KAAA0tP,IACDA,OvYu11DQ,KuYr11DJ,GAAMjoP,GAAG,EAAAkoP,EAAA7tO,EAAAra,EAAAkoP,EAAAtmQ,OAAAoe,IAAA,CACb,GAAAioP,GAAUC,EAAKloP,EAAK6nP,GAAAttP,KAAA0tP,GvYy11DhB,MuYp11DLJ,GAAOjmQ,OAAK,EAEF,KACT2B,KACA4kQ,gBAAAN,GAEC7jE,KAAM/lM,OAAM+8M,GAAa,cAAA+mB,GACzB,GAAM9rB,GAAA8rB,EAAUrQ,QACV02C,EAAAnyD,EAAYn2M,IAAG,SAAY6c,GAAA,MAAGA,GAAAvG,IvYm11D7B,IuYh11DUikB,EAAMl5B,OAAM,SAAA8mQ,GAAA,WAAAG,EAAA/mQ,QAAA4mQ,KACtBrmQ,OAAgD,GvYi11D5C,IuYh11DL,GAAL+iQ,MAAWnoO,EAAG,EAAAxc,EAAAumP,EAAA/7O,KAAAgS,EAAAxc,EAAApe,OAAA46B,IAAA,CACb,GAAIhgB,GAAKwD,EAAAwc,EACR51B,GAAAuoE,OAAYg2L,MAAO3oP,KACpBmoP,EAAAnoP,GAAA+pP,EAAAhhQ,IAAAiX,IAGD,MADA5V,GAAAuoE,OAAYjxC,SAAAyoO,MAAAhC,EAAA/9P,EAAAuoE,OAAAo2L,WAAA6C,KACZ,KAID,MAFAxhQ,GAAAugQ,cAAYvgQ,EAAAugQ,cAAAp4O,OAAAgzM,EAAArQ,QAAA5xN,IAAA,SAAAkyB,GAAA,MAAAprB,GAAAyhQ,UAAAr2O,MAEZ,SAMJ+0O,EAAAlnQ,UAAA8xN,SAAA,iBAAgBpuN,MAA0C6jQ,iBAAY7jQ,KAAA6jQ,iBAAwB58O,WAE9Fu8O,EAAAlnQ,UAAAyoQ,gBAAiB,SAAjBzkM,GAAkC,MAAsBtgE,MAAA6jQ,iBAAuB7jQ,KAAA6jQ,iBAA0B7hQ,IAAMs+D,GAAE,MAIzGkjM,EAAAlnQ,UAAA0oQ,kBAAA,SAAR1kM,EAA8B40L,EAAqBhsG,GAAAlpJ,KAAAgkQ,mBAAApoL,MAAAtb,SAAA40L,QAAAhsG,YvYy01DhDs6G,EuYx01DkDlnQ,UAAAynQ,sBAAA,SAAAvO,GvY201D9C,IuYz01DD,GAALtjJ,GADIk8G,EAA8B,GAAA1zD,KACvBzhI,EAAG,EAAAw8N,EAAAD,EAAAv8N,EAAAw8N,EAAAp3P,OAAA46B,IAAA,CACL,GAAAy5K,GAAA+iD,EAAAx8N,GACRqnC,EAAaoyI,EAAApyI,OAAA+tJ,EAAyB3b,EAAO2b,cAACF,EAAAzb,EAAAyb,OAC9Cj8G,GAAMlyG,KAAAilQ,yBAA8B3kM,EACpC,IAAIq1L,GAAa,GAAGr1L,EAAQtgE,KAAQg1P,gBvY001D3B,IuYx01DR3mC,EAAcF,EAAM9vN,OvYy01DR,IuYx01DX,GAAKoH,GAAM,EAAKA,EAAA4oN,EAAA5oN,IAChBysG,EAAAl7F,KAAAhX,KAAAklQ,yBAAAvP,EAAAlwP,QvY401DW,KuYx01DX,GAAKA,GAAM,EAAKA,EAAA4oN,EAAoB5oN,IACpCysG,EAAAl7F,KAAAhX,KAAAmlQ,oBAAAxP,EAAAxnC,EAAA1oN,GAAAoN,GAAAs7M,EAAA1oN,GAAAoN,GAAAs7M,EAAA1oN,GAAA8N,KAGF,IAAMkE,GAAA,GAAQwqN,IAAY,gBAAA/vH,GAC1B7+F,EAAa6+F,EAAQ,EACrBk8G,GAAAzrN,IAAA29D,YAAAtkD,MAAAqyM,EAAA52M,IAAAy6F,QAAA7+F,WAAA61I,QAAA9yI,KAAA,GAAA87F,MAAA,MAAA49E,SAAA,IAED,MAAAs+B,IvY001DEo1C,EuY1y1DFlnQ,UAAA4nQ,sBAAA,SAAAz+D,EAAA/+K,GA7BA,GAAMrjB,GAAMrD,KACNsgE,EAAA55C,EAAa45C,OACbq1L,EAAU,GAAKr1L,EAAAtgE,KAAiBg1P,iBAChCc,EAAU91P,KAAG6jQ,iBAAW7hQ,IAAAs+D,GACxBy1L,EAAWrvO,EAAAwiI,OACX8sG,EAAWD,EAAU13P,OAAU,EAACy3P,EAAQ5sG,OAAOh3C,MAAW4jJ,EAAC5jJ,MAEjE+jJ,EAAYlzP,KAAAC,IAAA,EAAAD,KAAA0D,IAAwBqvP,EAAQ95O,MAAEypL,EAAUzlM,KAAK40P,WvYw01DvD,OuYv01DJ50P,MACAolQ,yBAAAtP,EAAUG,GAAM,GAGfx1D,KAAM/lM,OAAI+8M,GAAuB,WAAI,WAAE,MAAAp0M,GAAAqrN,WAAAz8D,KAAA5uJ,EAAAu1B,KAAAta,WAAAlI,KAAAu/O,EAAA,IAAAI,GAAAtwD,EAAA,EAAApiM,EAAAuxP,aAAAl6P,OAAA+8M,GAAA,qBAAA56L,GAAA,MAAAxZ,GAAA+hQ,yBAAAtP,EAAAG,GAAA,KAAAv7P,OAAA+8M,GAAA,cAAA0+C,GvYq01DhC,GuYp01DAA,KAAAhoC,QAAA9vN,OAAA,GACN,GAAIoe,GAAIpZ,EAAEgiQ,2BAAAlP,EAAAH,EAAAC,EAAAN,GAAApqP,EAAAkR,EAAAlR,KAAA2mG,EAAAz1F,EAAAy1F,KACT3mG,KACCwqP,EAAQ13P,OAAW,GACnBy3P,EAAQ5sG,OAAO9yI,KAAK2/O,EACpBD,EAAA5sG,OAAAh3C,UAEA4jJ,EAAQ5sG,OAAO9yI,KAAK,GACpB0/O,EAAQ5sG,OAAKh3C,MAAS,KACtB4jJ,EAAA5jJ,SAED4jJ,EAAAr+O,EAAAmkE,KAAAs2B,IAIF,MAAAikJ,OvYu01DDqN,EuYn01DclnQ,UAAA+oQ,2BAAe,SAAAp9P,EAAiBiqG,EAAA+jJ,EAAAN,GAChD,GAAIr1L,GAAOr4D,EAAMq4D,OAAA+tJ,EAAApmN,EAAAomN,cAAAF,EAAAlmN,EAAAkmN,QAEb5iN,GAAK,CvYm01DH,IuYl01DG,MAAR2mG,GAAa,IAAAjqG,EAAAw9L,KAAA,CACbvzF,EAAKlyG,KAAIilQ,yBAAmB3kM,EvYm01DnB,KuYl01DR,GAAI76D,GAAS,EAAAA,EAAS4oN,EAAA5oN,IACrBA,IAAM0oN,GACNj8G,EAAAl7F,KAAAhX,KAAAmlQ,oBAAAxP,EAAAxnC,EAAA1oN,GAAAoN,GAAAs7M,EAAA1oN,GAAAoN,GAAAs7M,EAAA1oN,GAAA8N,MAEA2+F,EAAAl7F,KAAAhX,KAAAklQ,yBAAAvP,EAAAlwP,GAGF8F,IAAA,EvYw01DK,IuYl01DL,GAHG8qP,GACAC,EACJC,EACCC,EAAa,EAAAA,EAAsBroC,EAAK9vN,OAAAm4P,IACxCH,EAAWG,EAAcP,EAAW,EACnC/jJ,GAAWmkJ,IAAYnkJ,IvYm01DLA,EuYl01DdmkJ,IACA,SAAQnkJ,GAAAmkJ,IACNnkJ,EAAMmkJ,GAAYzG,OAElB19I,EAACmkJ,GAAiBzG,MAAC9/D,UACxB59E,EAAMmkJ,GAAYzG,MAAK9/D,SAAQ,EAC/B59E,EAAAmkJ,GAAazG,MAAY,WACnB19I,GAAOmkJ,GAASzG,MACtB2G,EAAOtuP,EAAOkmN,QAACqoC,GACfF,EAAMt2P,KAAAmlQ,oBAA6BxP,EAACY,EAAA1jP,GAAA0jP,EAAA1jP,GAAA0jP,EAAAhjP,KACpC2+F,EAAMmkJ,GAAY5G,IAAK6G,EAAG7G,IAC1Bv9I,EAAMmkJ,GAAYl3O,MAAQm3O,EAAQn3O,MAClC+yF,EAAAmkJ,GAAet7P,MAAAu7P,EAAAv7P,MACfu7P,EAAS,KACTC,EAAO,KACPhrP,GAAA,EAIH,QAAAA,OAAA2mG,UvYm01DEsxJ,EuYh01D+BlnQ,UAAM8oQ,yBAAA,SAAAtP,EAAAG,EAAAnmE,GvYq01DjC,IuYh01DL,GAJKimE,GAAQD,EAAW5sG,OAAS9yI,KAC5B87F,EAAO6jJ,EAAY13P,OAAQ,EAAKy3P,EAAE5sG,OAAWh3C,MAAK4jJ,EAAW5jJ,MAC/DukJ,EAAO1zP,KAAM0D,IAAAqvP,EAAA95O,MAAAi6O,EAAAj2P,KAAA40P,WACjBrpP,GAAS,EACH8qP,EAAOJ,EAAe,EAAAI,GAAiBI,EAAWJ,IACtDnkJ,EAAMmkJ,IAAiB,SAAWnkJ,GAAAmkJ,IAAQnkJ,EAAAmkJ,GAAAzG,QAAA19I,EAAAmkJ,GAAAzG,MAAA9/D,UAC1C59E,EAAMmkJ,GAAYzG,MAAK9/D,QAAWA,EAClC59E,EAAImkJ,GAAQl3O,MAAA2wK,EAAA9vL,KAAA80P,cAAA90P,KAAA+0P,YACZxpP,GAAA,EAWF,OARCA,KACCwqP,EAAQ13P,OAAY,EACpBy3P,EAAA5sG,OAAAh3C,QAEA4jJ,EAAA5jJ,QAED4jJ,EAAAr+O,EAAAmkE,KAAAs2B,IAEDx3G,OAAAsuL,GAAA,WvYm01DEw6E,EuYh01D+BlnQ,UAAI6oQ,oBAA0B,SAAAxP,EAAAlG,EAAA58O,EAAAU,EAAAmjP,GAC/D,GAAM4O,KAAM/xP,GAAK,IAALA,EAAAzV,QAAA63P,GAERh6P,EAAAynQ,IAAW3T,MAAAtwO,MAAA5L,EAAAxY,MAAA8X,GAAA6jP,EASf,OARC4O,IACC3pQ,EAAIwjB,QAEDxjB,EAAAwjB,MAAWxjB,EAAAwjB,MAAAxhB,MAAAg4P,EAAAt3P,SACf1C,EAAAZ,MAAA8X,GAEAlX,EAAAZ,MAAA8X,EAEDlX,GvYk01DE6nQ,EuY/z1D6BlnQ,UAAC4oQ,yBAA8B,SAAAvP,EAAAlwP,GvYg01DxD,MuY/z1DLzF,MAAOmlQ,oBAAgBxP,EAAAlwP,EAAAorJ,IAAA,MACvB1xI,MAAOnf,KAAE+0P,YACRnF,OAAA9/D,SAAA,EAAA2V,KAAA1iM,KAAA4M,MAAAlK,EAAAzF,KAAA40P,eAMK4O,EAAAlnQ,UAAA2oQ,yBAAR,SAAiE9lP,GAAW,QAACswO,KAAe,EAACtwO,MAASnf,KAACyjQ,UAAa/wG,UAAKvzI,GAASpkB,MAAO,QAEjIyoQ,EAAAlnQ,UAAAsoQ,gBAAR,SAAgC5+I,GAAsB,MAAYhmH,MAAA0uN,WAAez8D,KAAKjyJ,KAAM44B,KAAMta,WAAa0nG,IAAEA,GAAA,EAAAA,EAAA3nH,SAEzGmlQ,EAAAlnQ,UAAAwoQ,UAAA,SAARvxP,GAAA,MAAsCvT,MAAAokQ,WAAA7wP,QAAAV,GAAAU,EAAAV,GAAAU,QvY2z1DnCiwP,EuY9y1DFlnQ,UAAAqnQ,kBAAA,SAAAvtP,GAZA,GAAI/S,GAACrD,IvY8z1DC,OuY7z1DNA,MAAKu4P,iBAAc,EACnBv4P,KAAAgB,OAAYuK,OACVvL,KAEA0uN,WAAAz8D,KAAAjyJ,KAAA44B,KAAIta,WAAiBlI,KAAKA,IAEzBqqL,KAAK/lM,OAAA+8M,GAAkB,KAAM,SAAAxvM,GAAA,MAAAA,GAAAkmN,QAAA5xN,IAAA,SAAAkyB,GAAA,MAAAprB,GAAAyhQ,UAAAr2O,OAAA/zB,OAAA+8M,GAAA,qBAC7Bp0M,EAAKk1P,iBAAc,EAEnBl1P,EAAArC,OAAAuK,UA3UQ,IAAAkR,GAAAC,EAAAC,EAAAC,CA8WZ,OvYwx1DG4mP,GuYvo2DSH,IvYwo2DL3oQ,OAAOM,GAAqB,cuYvo2DvBsoQ,GA8WZ,wCAAA7mP,MAAA,KAAA8rK,GAAA,GAAAA,GAAA,IAAA9rK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAsxM,SAAAtxM,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4jP,SAAA5jP,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAmkP,SAAAnkP,GAAAliB,UAAD8oQ,MvYiy1DI+B,GAAgDvlQ,MAAQA,KAAKuY,WAAc,WAC3E,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF4sP,GAAiDxlQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DqsP,GAAiDzlQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IwYjr2D5CgsP,GAAA,SAAA9rP,GxY6r2D1D,QwYrp2DH+rP,GAOerrP,EAAYC,EAC1BhH,EAAAiH,EAAAymP,GAPO,GAAA59P,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAO5B,OANOqD,GAAAiX,SACAjX,EAAAkX,YAAuCA,EACtClX,EAAAkQ,MACAlQ,EAAAmX,MA3CAnX,EAAA49P,MAEU59P,EAAAuiQ,sBAAsBtlP,MAAA,QAAAI,UAAgC,KAAAC,QAAA,MACtDtd,EAAAwiQ,gBAAiB,GAAG7qQ,IAAI,aACxBqI,EAAAyiQ,kBAAiB,GAAA9qQ,IAA4B,aAEvDqI,EAAA0iQ,WAAA,GAAA/qQ,IAAyB,aACzBqI,EAAA2iQ,mBAAmB,GAAI/jC,IAAwC,gBAAA5+N,EAAKqyP,qBACpEryP,EAAA4iQ,iBAAkB,GAAIhkC,IAAe,gBAAyB5+N,EAAKqyP,qBAGnEryP,EAAA6iQ,gBAAgB,GAAAjkC,IAAA,gBAAA5+N,EAAAqyP,qBAiBzBryP,EAAAy7P,WAAA,GACAz7P,EAAAg1P,iBAAgB,EAERh1P,EAAAi1P,eAA8B,EAC9Bj1P,EAAA8iQ,aAA2B,KxY6q2D5B9iQ,EAAMs/P,UAAY,KwY/p2DxBt/P,EARDkiQ,GAAAI,EAK+C/rP,GxYqq2D5Clf,OAAOI,ewYps2Da6qQ,EAAoBrpQ,UAAA,axYqs2DpCqG,IwYps2DN,SAAUie,GAAEA,IAEZ5gB,KAAK4lQ,qBAAqBllP,UAAUywK,GAAOruK,EAAAiuL,KAAKnwL,EAAQ,IACxD5gB,KAAK4lQ,qBAAmBjlP,QAAAwwK,GAAAruK,EAAAiuL,KAAAnwL,EAAA,IACxB5gB,KAAAwa,IAAAhP,iBxYus2DM/I,YAAY,EwYvs2DlBC,cAAA,IxY0s2DEhI,OAAOI,ewYts2DV6qQ,EAA+CrpQ,UAAA,exYus2DxC0F,IwYxs2DP,WAAgC,MAAShC,MAAAmmQ,cxYys2DlCxjQ,IAAK,SAAU+W,GAAK1Z,KAAKmmQ,aAAezsP,EAAG1Z,KAAKomQ,gBAChD3jQ,YAAY,EwY1s2D8DC,cAAA,IxY6s2D9EhI,OAAOI,ewYxs2DV6qQ,EAAyCrpQ,UAAA,YxYys2DlC0F,IwY1s2DP,WAA6B,MAAShC,MAAA2iQ,WxY2s2D/BhgQ,IAAK,SAAU+W,GAAK1Z,KAAK2iQ,UAAYjpP,EAAG1Z,KAAKwa,IAAIhP,gBACjD/I,YAAY,EwY5s2D4DC,cAAA,IxY+s2D5EijQ,EwYlr2DFrpQ,UAAA+H,SAAA,WAJA,GAAIhB,GAACrD,IxYwr2DCA,MwYvr2DJqmQ,aAAYrmQ,KAAMihQ,IAAArJ,aACfj9O,WAASihE,KAAS,SAAM8uG,GAAA,MAAArnL,GAAA2iQ,mBAAApqL,KAAAv4E,EAAAs1P,kBAAAjuE,OxYwr2DvB1qL,KwYvr2DJsmQ,OAAStmQ,KAAGuT,IAAM0iH,OACpBt7G,WAAAihE,KAAA,iBAAAv4E,GAAAmX,IAAAhP,mBxYyr2DEm6P,EwYtr2D8BrpQ,UAAagI,YAAS,WAAc,MAAZtE,KAAKsmQ,QAAqB,GAAHtmQ,KAAGsmQ,OAAAv/L,QAAK/mE,KAACsmQ,OAAS1vI,cACjG52H,KAAKsmQ,OAAI,KACTtmQ,KAAIuT,IAAKwB,UAA6E,MAAlB/U,KAAKqmQ,cAA2B,GAAHrmQ,KAAGqmQ,aAAAt/L,QAAK/mE,KAACqmQ,aAAezvI,cACzH52H,KAAIqmQ,aAAe,KAA6D,MAAhBrmQ,KAAKumQ,YAAyB,GAAHvmQ,KAAGumQ,WAAAx/L,QAAK/mE,KAACumQ,WAAa3vI,cACjH52H,KAAAumQ,WAAA,MAIDZ,EAAArpQ,UAAAkqQ,uBAAA,SAAoBliO,GAA0BtkC,KAAA6lQ,gBAAAt6P,KAAA+4B,IxY2r2D3CqhO,EwY1r2D4BrpQ,UAAAmqQ,oBAAA,SAAAjhQ,GAC9BxF,KAAK0rC,YAAWlmC,EAAKzK,MACrBiF,KAAKg9N,SAAA,KACLh9N,KAAKimQ,iBAAgBrqL,KAAK57E,KAAK01P,qBAC/B11P,KAAKkmQ,gBAAgBtqL,KAAG57E,KAAA01P,qBACxB11P,KAAKwa,IAAAhP,eACLxL,KAAK0mQ,kBACL1mQ,KAAAomQ,gBxY4r2DET,EwYzr2DyBrpQ,UAAAqqQ,mBAAA,SAAAnhQ,GAC3BxF,KAAKg9N,SAAAx3N,EAAgBzK,MACrBiF,KAAKkmQ,gBAAgBtqL,KAAG57E,KAAA01P,qBACxB11P,KAAKwa,IAAAhP,eACLxL,KAAA0mQ,mBxY2r2DEf,EwYxr2DsBrpQ,UAAAsqQ,mBAAA,WACxB5mQ,KAAK0rC,YAAW,KAChB1rC,KAAKg9N,SAAA,KACLh9N,KAAKimQ,iBAAgBrqL,KAAK57E,KAAK01P,qBAC/B11P,KAAKkmQ,gBAAgBtqL,KAAG57E,KAAA01P,qBACxB11P,KAAKwa,IAAAhP,eACLxL,KAAA0mQ,mBxY0r2DEf,EwYvr2DmBrpQ,UAAAuqQ,kBAAA,WACrB7mQ,KAAKg9N,SAAA,KACLh9N,KAAKkmQ,gBAAgBtqL,KAAG57E,KAAA01P,qBACxB11P,KAAKwa,IAAAhP,eACLxL,KAAA0mQ,mBxYyr2DEf,EwYpr2D4BrpQ,UAAAwqQ,aAAoB,SAAAC,GAClD/mQ,KAAA+lQ,WAAAx6P,KAAAvL,KAAAuT,IAAAyzP,qBxYsr2DErB,EwYnr2D4BrpQ,UAAA2qQ,gBAAoB,SAAAC,GAClDlnQ,KAAA+lQ,WAAAx6P,KAAAvL,KAAAuT,IAAAyzP,qBxYqr2DErB,EwY/q2DmCrpQ,UAAU6qQ,wBAAwB,SAAAl/P,EAAAzC,GxYir2DjE,GwYhr2DNyC,EAAIoL,SAASpL,EAAAiqG,OAAc,IAAQjqG,GAAKiqG,MAAMjqG,EAASiqG,MAAA,SACR,IAA9ClyG,KAAMuT,IAAGqwP,cAAW9lQ,QAAS0H,EAAOzK,OAAe,CACnD,GAAIwY,IAAKtL,EAAAq4D,OAAkB,GAAKr4D,EAAKq4D,OAAAtgE,KAAcuT,IAAEyhP,iBAAiB,IAAUxvP,EAAG2Z,KACnFnf,MAAKuT,IAAAqwP,cAAgB5sP,KAAKhX,KAAIuT,IAAA6wP,WAAkB7wP,EAAE/N,EAAAzK,MAAAyK,EAAAzK,MAAAwY,IAClDvT,KAAA+lQ,WAAAx6P,KAAAvL,KAAAuT,IAAAyzP,sBxYkr2DCrB,EwY9q2DarpQ,UAAc8qQ,2BAAA,SAAAn/P,EAAAq8B,GxYmr2DvB,IwY9q2DJ,GADFhpC,GAHM4F,EAAQojC,EAAMpjC,MAAOE,EAAMkjC,EAAGljC,IAC9B8wG,EAAUjqG,EAAGihJ,OAAiBh3C,MAACjqG,EAAAihJ,OAAAh3C,MAAAjqG,EAAAiqG,MACjCsmJ,EAAE,GAAA10F,KAEDxlK,EAAK4C,EAAI5C,GAAA8C,EAAA9C,IACbhD,EAAI42G,EAAI5zG,GACPhD,EAAAs0P,QAA6B,IAAlBt0P,EAAIs0P,MAAE9/D,SACjB0oE,EAAA9vO,IAAAptB,EAAAs0P,MAAAnqD,KxYir2DI,IwY9q2DL+yD,EAAWjyL,KAAqB,GAChC,GAAAgzL,KACAf,GAAWn7P,QAAQ,SAAA9B,GAAA,MAAAg+P,GAAAviP,KAAAzb,KACnBi9P,EAAShjM,QACTx1D,KAAAuT,IAAAyxP,kBAAA/8P,EAAAq4D,OAAAi5L,EAAAtxP,EAAAihJ,OAAA9yI,QAOMuvP,EAAArpQ,UAAA+qQ,wBAAR,SAAgCp/P,EAACmO,GAAApW,KAAkBuT,IAAIyxP,kBAAgB/8P,EAAKq4D,QAAW,GAAElqD,IAEjFuvP,EAAArpQ,UAAAoqQ,gBAAR,WAAA1mQ,KAAA8lQ,kBAAAv6P,MAAAmgC,YAAA1rC,KAAA0rC,YAAAsxL,SAAAh9N,KAAAg9N,YxY0q2DG2oC,EwY7p2DFrpQ,UAAA8pQ,aAAA,WAZA,GAAI/iQ,GAAMrD,IACTA,MAAA0rC,cAGD1rC,KAAKq4P,iBAAkB,EACvBr4P,KAAIwa,IAAKhP,eAA+D,MAAhBxL,KAAKumQ,YAAsBvmQ,KAAGumQ,WAAAx/L,QAClF/mE,KAACumQ,WAAa3vI,cxY4q2DZ52H,KwY3q2DJumQ,WAAUvmQ,KAAAihQ,IAACpJ,SAAS73P,KAAA0rC,aACpB/wB,UAAK,SAAA1S,GACL5E,EAAK4iQ,iBAAerqL,KAAGv4E,EAAMs1P,kBAAA1wP,IAC7B5E,EAAKg1P,iBAAkB,EACrBh1P,EAAAmX,IAAAhP,mBxY8q2DFm6P,EwY1q2D6DrpQ,UAACq8P,kBAAA,SAAAv+M,GAChE,GAAIzwC,GAAM3J,KAAM01P,mBxY2q2DV,IwY1q2DS,GAAdt7M,EAAA/7C,OACA,MAAAsL,ExY4q2DK,KwY1q2DL,GAAIsvB,GAAM,EAAAA,EAAImhB,EAAS/7C,OAAM46B,IAE5B,QAAOmhB,GAAOnhB,IAASmhB,EAAOnhB,GAAKoC,KACnC1xB,EAAAqN,MAAAy4O,IAAAx2N,EAAAl+B,MAAAq/C,EAAAnhB,GAAAoC,KAAAlc,MAAAi7B,EAAAnhB,GAAAlmB,OAEA,MAAYqnC,GAAOnhB,IAASmhB,EAAEnhB,GAAQpmB,IACtClJ,EAAAqN,MAAAy4O,IAAAx2N,EAAAl+B,MAAAq/C,EAAAnhB,GAAApmB,GAAAsM,MAAAi7B,EAAAnhB,GAAAlmB,MAGF,OAAApJ,IxY2q2DEg8P,EAAyCrpQ,UAAUo5P,kBAAoB,WAAc,QAAUjG,KAAM,EAAGtwO,MAAO,MAAOpkB,MAAO,OwYv12DtH,IAAA0hB,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAJmD,OxY612D1DyoP,KACI9qQ,OAAOM,GAAiB,UACxByqQ,GAA8C,cAAe/qQ,SwY112D1DirQ,EAAArpQ,UAAA,0BxY412DPkpQ,IACI9qQ,OAAOM,GAAiB,UACxByqQ,GAA8C,cAAe/qQ,SwY712D1DirQ,EAAArpQ,UAAA,4BxY+12DPkpQ,IACI9qQ,OAAOM,GAAiB,UACxByqQ,GAA8C,cAAe/qQ,SwY112D3DirQ,EAAArpQ,UAAA,qBxY412DNkpQ,IACI9qQ,OAAOM,GAAgB,SACvByqQ,GAA8C,cAAe/qQ,SwY712D3DirQ,EAAArpQ,UAAA,qBxY+12DNkpQ,IACI9qQ,OAAOM,GAAgB,SACvByqQ,GAA8C,cwYj22DvB,mBxYi22D8ChpP,MwYj22D9C,KxYi22D0DgjP,GwYj22D1D,eAAaA,GAAb,gBAAahjP,GAAA/hB,QxYk22DpC+qQ,GAA8C,qBwY712DpD,mBAAA/oP,MAAA,KAAA+iP,GAAA,eAAAA,GAAA,gBAAA/iP,GAAAhiB,UAGDirQ,EAAArpQ,UAAA,kBxY412DGkpQ,IACI9qQ,OAAOM,GAAgB,SACvByqQ,GAA8C,cAAe9hP,QAC7D8hP,GAA8C,qBAAsB9hP,UwY312D3EgiP,EAAArpQ,UAAA,oBxY612DGkpQ,IACI9qQ,OAAOM,GAAgB,SACvByqQ,GAA8C,cAAexoK,QAC7DwoK,GAA8C,qBwYh22D0BxoK,UA1BnE0oK,EAAwCrpQ,UAAA,iBxY432DjDqpQ,EwYl42DOH,IxYm42DH9qQ,OwYl42DPM,GAAU,YACV4V,SAAU,2BACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW+lP,GAoLZ,wCAAA9oP,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0mP,SAAA1mP,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA6iP,SAAA7iP,GAAAriB,UAADirQ,IApLqDtoH,GAAA,GxY842DjDiqH,GAA2CtnQ,MAAQA,KAAKuY,WAAc,WACtE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF2uP,GAA0CvnQ,MAAQA,KAAKwnF,UAAa9sF,OAAOusC,QAAU,SAASxY,GAC9F,IAAK,GAAIZ,GAAGvvB,EAAI,EAAG0Z,EAAInO,UAAUxL,OAAQC,EAAI0Z,EAAG1Z,IAAK,CACjDuvB,EAAIhkB,UAAUvL,EACd,KAAK,GAAI/C,KAAKsyB,GAAOnzB,OAAO4B,UAAUd,eAAegB,KAAKqxB,EAAGtyB,KACzDkzB,EAAElzB,GAAKsyB,EAAEtyB,IAEjB,MAAOkzB,IAEP+4O,GAA4CxnQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DquP,GAA4CznQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IyY162DjDguP,GAAA,SAAA9tP,GzYq72DrD,QyYl52DH+tP,GAQertP,EAAWC,EACzBxc,EAAAyc,EAAAmwB,EAAAs2N,GARO,GAAA59P,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAQ5B,OAPOqD,GAAAiX,SACCjX,EAAAkX,YAAcA,EACdlX,EAAAtF,GAAGA,EACHsF,EAAAmX,MACAnX,EAAAsnC,UAAsCA,EAvCtCtnC,EAAA49P,MAEQ59P,EAAAukQ,kBAAkB,IAClBvkQ,EAAAwkQ,mBAA8C,KAC9CxkQ,EAAAykQ,kBAAuCC,SAAA,gBAAAC,SAAA,IzY072DjD3kQ,EyYz72DN4kQ,eACAC,iBAAa,EACb71B,WAAAv8C,QAAiB,UAAa,YAC9BI,gBAAA,cACAgwD,oBAAc,UACdD,aAAU,cACVpuD,QAASswE,UAAWZ,MAAElkQ,EAASykQ,kBAAiBj3I,MAAO,UACtDz1G,SAAA+sP,UAAAZ,MAAAlkQ,EAAAykQ,kBAAAj3I,MAAA,WAGiBxtH,EAAAgQ,SAAU,GAAGrY,IAAI,aAE3BqI,EAAAwqO,WAAa,GAAG7yO,IAAA,aAEhBqI,EAAAy7P,WAAW,GACXz7P,EAAAqoC,YAA0B,KAGFroC,EAAA25N,SAAU,KAK3C35N,EAAA+kQ,YAAA,EzYi72DO/kQ,EAAMglQ,qBAAsB,EyYn62DlChlQ,EATDikQ,GAAAK,EAKS/tP,GAQT+tP,EAAArrQ,UAAA6e,gBAAA,WAAkCnb,KAAAsoQ,ezYm62D/BX,EyYl62DyBrrQ,UAAUkI,YAAW,SAAcC,GACxD,OAALzE,KAAKiI,OAAa,QAAAxD,IAAA,YAAAA,KAClBzE,KAAA45O,czYq62DC+tB,EyYj62DmBrrQ,UAAAgI,YAAA,WACrBtE,KAAKq0L,UAAY,KACjBr0L,KAAKu8N,UAAA,KACLv8N,KAAKi/P,kBAAmB,KACxBj/P,KAAKqoQ,qBAAkB,EACvBroQ,KAAA68N,WAAA,MzYm62DE8qC,EyY/52DyBrrQ,UAAegsQ,YAAA,WzYg62DpC,GyY/52DLtoQ,KAAMjC,IAAYiC,KAAIjC,GAAAqG,cAA8B,CACpD,GAAMmkQ,GAAKvoQ,KAAOjC,GAAGqG,cAAawE,wBAC9BI,EAAOu/P,EAAKA,EAAMv/P,MAAQ6nJ,GAC7B7nJ,KAASd,MAAAc,IACRhJ,KAAKwoQ,gBAAgBx/P,KACrBhJ,KAAKwa,IAAAhP,eACLxL,KAAAyoQ,iBAOJd,EAAArrQ,UAAA0jQ,kBAAA,SAAet0N,GAAqB,MAAoB1rC,MAAAihQ,IAAOjB,kBAASt0N,IAExEi8N,EAAArrQ,UAAA4jQ,eAAA,SAAAx0N,EAAuBsxL,GAAuB,MAAAh9N,MAAAihQ,IAAAf,eAAAx0N,EAAAsxL,IzY652D3C2qC,EyY552DiBrrQ,UAAAosQ,uBAAA,SAAAh0C,GACnB10N,KAAKsoQ,cACLtoQ,KAAAwa,IAAAhP,gBAIDm8P,EAAArrQ,UAAAqsQ,uBAAuB,SAAvBrkO,GAA+CtkC,KAAA6tO,WAAAtiO,KAAA+4B,IzY252D5CqjO,EyY152D4BrrQ,UAAAssQ,wBAAA,SAAAtkO,GzY252DxB,GyY152DE,WAAPA,EAAAxtB,QzY052DK,CyYx52DN,GAAI/b,GAAKupC,EAAAysM,kBAAyB,EzY252D5B,IyY152DL/wO,KAAA0rC,cAAO3wC,GAAAiF,KAAAg9N,WAAAjiO,EzY052DF,CyYx52DN,GAAIyK,GAACxF,KAASu8N,UAAWt0K,KAAA,SAAAvuC,GAAA,MAAAotJ,IAAAptJ,KAAAujN,aAAAliO,EAAA2e,EAAAgyB,cAAA3wC,GACzBiF,MAAAqT,SAAA9H,KAAA/F,MAMDmiQ,EAAArrQ,UAAAusQ,iBAAA,SAAc/lP,EAAcnK,GAAE,MAAqBmK,GAAA3D,QAAYxG,EAAAwG,OAE/DwoP,EAAArrQ,UAAAwsQ,cAAA,SAAAtZ,EAAAhqP,GAA0C,MAAAA,GAAA2Z,OzYs52DvCwoP,EyYr52D6BrrQ,UAAA0iQ,wBAAA,SAAAp6P,GAC/B5E,KAAKi/P,kBAAmBr6P,EACxB5E,KAAAwa,IAAAhP,gBzYu52DEm8P,EyYp52DoBrrQ,UAAsB4iQ,wBAAE,SAAA56N,GAC9C,GAAI66N,GAAK76N,EAAAliC,oBAAgC,CACxCpC,MAAKqoQ,qBAAsBlJ,IAC3Bn/P,KAAKqoQ,oBAAmBlJ,EACxBn/P,KAAAwa,IAAAhP,iBzYu52DCm8P,EyYn52DuBrrQ,UAAAysQ,qBAAA,SAAAvjQ,GACzBxF,KAAAqT,SAAA9H,KAAA/F,IzYq52DEmiQ,EyYl52DuBrrQ,UAAA0sQ,gBAAA,WACzBhpQ,KAAAqT,SAAA9H,KAAA,OzYo52DEo8P,EyY922DFrrQ,UAAAs9O,WAAA,WAjCA,GAAIv2O,GAACrD,IACLA,MAAKooQ,WAAuB,MAAVpoQ,KAAKg9N,SACvBh9N,KAAI68N,WAAY78N,KAAKiI,KAAK40N,UAC1B,IAAIyR,GAAYtuO,KAAKiI,KAAKq0N,SAEtBC,EAAOv8N,KAAAiI,KAAes0N,SzYg52DpB,IyY/42DLv8N,KAAM0rC,aAA+B1rC,KAAKg9N,SAAS,CzYg52D1C,GyY/42DRisC,GAAYjpQ,KAAAiI,KAAUs0N,UACpBv8N,KAAKiI,KAAAs0N,UAAAt0K,KAAA,SAAA3pD,GAAA,MAAAwoK,IAAAxoK,MAAAotC,cAAAroC,EAAAqoC,aAAAptC,EAAA0+N,WAAA35N,EAAA25N,WACF,IAELsR,GADA26B,GAAgBjpQ,KAAKiI,KAACq0N,SACtBt8N,KAAAiI,KAAAq0N,SAAA1+N,OAAA,SAAA4H,EAAAC,GAAA,WAAAA,GAAAD,EAAA,KAAAyjQ,EAAAhsC,cAEAqR,EAAA,IAGA/R,EADAv8N,KAAAiI,KAAYs0N,UACZv8N,KAAAiI,KAAAs0N,UAAA3+N,OAAA,SAAAU,GAAA,MAAAwoK,IAAAxoK,MAAAotC,cAAAroC,EAAAqoC,aAAAptC,EAAA0+N,WAAA35N,EAAA25N,czYs52DIh9N,KyYh52DLq0L,WACAK,UAAQ,WACR13I,OAAAh9C,KAAS2qC,UAAA4oK,sBACT+6B,UAASA,EACT76N,QAAA8zP,MAAAvnQ,KAAAioQ,eAAAprC,WAAA78N,KAAA68N,cAEA78N,KAAKiI,KAAAg1E,SACLj9E,KAAAq0L,UAAA5gL,QAAAwpE,OAAAj9E,KAAAiI,KAAAg1E,QAEDj9E,KAAKu8N,UAAIA,EACTv8N,KAAKwa,IAAAhP,eACLxL,KAAAyoQ,ezYk52DEd,EyY/42DgCrrQ,UAASksQ,gBAAc,SAAAx/P,GACzD,GAAMkgQ,GAAkBnmQ,KAAK4M,MAAS,KAAH3G,GAAGhJ,KAAgB4nQ,kBAAA,OAClDuB,EAAKpmQ,KAAU4M,MAAQ3G,EAASkgQ,EzYg52D9B,OyY/42DLlpQ,MAAKq0L,UAAU5gL,QAAQzK,OAAQmgQ,IAC/BnpQ,KAAKq0L,UAAU5gL,QAAQzK,MAAMmgQ,EAC7BnpQ,KAAAq0L,UAAY5gL,QAAAvK,OAAAnG,KAAA4M,MAAAw5P,EAAAnpQ,KAAA6nQ,qBACZ,IzYm52DCF,EyY942D8BrrQ,UAAUmsQ,YAAA,WACzCzoQ,KAAK0wO,OAAY1wO,KAAG0wO,MAAA1C,SACpBhuO,KAAA0wO,MAAAjC,SAhKQ,IAAAhyN,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAhB8C,OzYkk3DrDuqP,KACI9sQ,OAAOM,GAAiB,UACxBysQ,GAAyC,cAAe/sQ,SyYnj3DrDitQ,EAAArrQ,UAAA,mBzYqj3DPkrQ,IACI9sQ,OAAOM,GAAiB,UACxBysQ,GAAyC,cAAe/sQ,SyYrj3DtDitQ,EAAArrQ,UAAA,qBzYuj3DNkrQ,IACI9sQ,OAAOM,GAAgB,SACvBysQ,GAAyC,cAAe/sQ,SyYxj3DtDitQ,EAAArrQ,UAAA,qBzY0j3DNkrQ,IACI9sQ,OAAOM,GAAgB,SACvBysQ,GAAyC,cyY5j3Dd,mBzY4j3DqChrP,MyY5j3DrC,KAAAgjP,GAAA,eAAAA,GAAA,gBAAAhjP,GAAA/hB,SACzBitQ,EAAArrQ,UAAA,oBzY6j3DNkrQ,IACI9sQ,OAAOM,GAAgB,SACvBysQ,GAAyC,cAAe9jP,SyY9j3DtDgkP,EAAArrQ,UAAA,sBzYgk3DNkrQ,IACI9sQ,OAAOM,GAAgB,SACvBysQ,GAAyC,cAAexqK,SyYjk3DtD0qK,EAAArrQ,UAAA,mBzYmk3DNkrQ,IACI9sQ,OAAOM,GAAgB,SACvBysQ,GAAyC,cyYrk3DzB,mBAAA/qP,MAAA,KAAA+iP,GAAA,SAAAA,GAAA,UAAA/iP,GAAAhiB,SAEUitQ,EAAArrQ,UAAA,ezYqk3D9BkrQ,IACI9sQ,OAAOM,GAAsB,aAAG,oBAChCysQ,GAAyC,cAAe/sQ,SyY/j3D9BitQ,EAAArrQ,UAAA,qBzYik3D9BkrQ,IACI9sQ,OAAOM,GAAoB,WAAGwyO,IAC9Bi6B,GAAyC,cyYnk3DqB,mBAAA9qP,MAAA,KAAA6wN,SAAA7wN,GAAAjiB,SA8BrEitQ,EAAArrQ,UAAA,gBzYui3DGkrQ,IACI9sQ,OAAOM,GAAuB,cAAG,iBACjCysQ,GAAyC,cAAe9jN,UACxD8jN,GAAyC,wBACzCA,GAAyC,wBAAqB,KyY1m3DzDE,EAAmCrrQ,UAAA,oBzY4m3D5CqrQ,EyYrn3DOH,IzYsn3DH9sQ,OyYrn3DPM,GAAU,YACV4V,SAAU,sBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OACjBulB,gBAAWzkB,GAAA,wBAAA0kB,OzYsn3DA5J,WyYpn3DV47L,MAEW+1D,GAkLZ,wCAAA7qP,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,YAAAA,GAAA,aAAA8hB,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA/hB,GAAA,mBAAAA,GAAA,oBAAA+hB,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAA00L,SAAA10L,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAA2iP,SAAA3iP,GAAAviB,UAADitQ,IAlLgDtqH,GAAA,GzY6n3D5C+rH,GAA+CppQ,MAAQA,KAAKuY,WAAc,WAC1E,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFywP,GAAgDrpQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DkwP,GAAgDtpQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0Yjp3D7C6vP,GAAA,SAAA3vP,G1Y2p3DzD,Q0Y1n3DH4vP,GAOelvP,EAAYC,EAC1BC,EAAAymP,EAAAwI,GAPO,GAAApmQ,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAO5B,OANOqD,GAAAiX,SACCjX,EAAAkX,YAAsBA,EACtBlX,EAAAmX,MACAnX,EAAA49P,IAAIA,EApCJ59P,EAAAomQ,OACApmQ,EAAAqmQ,kBAAmB,4BAA2B,QAC9CrmQ,EAAAsmQ,iBAAmB,2BACnBtmQ,EAAAumQ,iBAAiB,yBAEPvmQ,EAAAwmQ,oBAAkB,kBAAkC,IAAC,KAE/DxmQ,EAAA6uL,YAAa,GAAGl3L,IAAA,aAChBqI,EAAAy7P,WAAW,GACXz7P,EAAAqoC,YAA0B,KAkBnCroC,EAAA25N,SAAA,K1Y6o3DO35N,EAAMymQ,mB0Yjo3DZzmQ,EARD+lQ,GAAAI,EAK4B5vP,G1Yuo3DzBlf,OAAOI,e0Ylp3DV0uQ,EAA+CltQ,UAAA,Q1Ymp3DxC0F,I0Yjq3DP,WAAwB,MAAAhC,MAAAo6C,O1Ykq3DjBz3C,I0Yjq3DN,SAAUvI,G1Yoq3DA,G0Ynq3DV4F,KAAKo6C,MAAAhgD,EACL4F,KAAK8pQ,mBAEJ9pQ,KAAgBo6C,M1Yiq3DH,I0Yjq3DR,GAAOnhB,GAAA,EAAAxc,EAAAzc,KAAA0pQ,iBAAAzwO,EAAAxc,EAAApe,OAAA46B,IAAA,CACX,GAAM+sH,GAAIvpI,EAAGwc,GAET64J,EAAI9xL,KAAKo6C,MAAAz5B,QAAAmxK,KAAA9xL,KAAAo6C,MAAA15B,UAAAslI,GAAA,EACZ8rC,IAAK,GACN9xL,KAAA8pQ,gBAAA9yP,KAAAgvI,GAGFhmJ,KAAAwa,IAAAhP,gB1Ykq3DM/I,YAAY,E0Ylq3DlBC,cAAA,IAmBD8mQ,EAAAltQ,UAAAytQ,wBAAA,SAAwBva,EAAAhqP,GAAmC,MAAKgqP,GAAYhqP,GAE5EgkQ,EAAAltQ,UAAA0tQ,wBAAA,SAAA93E,GAAAlyL,KAAAkyL,YAAA3mL,KAAA2mL,I1Ykp3DGs3E,E0Yjp3D8BltQ,UAAa69P,UAAa,WAC1Dn6P,KAAAypQ,KAAA11D,iBAAA/zM,KAAAo6P,YAAAp6P,KAAAq6P,U1Ymp3DE3/P,OAAOI,e0Yjp3DV0uQ,EAAAltQ,UAAA,e1Ykp3DO0F,I0Yjp3DN,WAQA,iCAPYhC,KAAKiI,KAAKyY,UAAQyB,OAAO,YAOrC,IANMniB,KAAWiI,KAAE0Y,QAAKwB,OAAW,YAMnC,KALeniB,KAAA0rC,aAAuB1rC,KAAAg9N,SACnCh9N,KAAEihQ,IAAKjB,kBAAWhgQ,KAAA0rC,aAAA,IAAA1rC,KAAAihQ,IAAAf,eAAAlgQ,KAAA0rC,YAAA1rC,KAAAg9N,UACnBh9N,KAAE0rC,YACA1rC,KAAAihQ,IAASjB,kBAAiBhgQ,KAAK0rC,aAC5B,UAAA7H,MAAA,KAAAG,KAA2B,KAClC,OAAAhkC,KAAAiI,KAAAiqL,YAAA,Q1Ymp3DMzvL,YAAY,E0Ynp3DlBC,cAAA,I1Ysp3DEhI,OAAOI,e0Ypp3DV0uQ,EAAAltQ,UAAA,W1Yqp3DO0F,I0Ypp3DN,WACA,GAAIgzM,GAAWh1M,KAACiI,KAAAyrD,OAAA1zD,KAAAiI,KAAAyrD,OAAAr1D,OAAA,EACZsL,EAAS,GACTsrM,EAAA,GACAniB,EAAW,kBACY,QAA1B9yL,KAAAiI,KAAUiqL,aAAgB,QAAAlyL,KAAAiI,KAAAiqL,YAC1BY,EAAA,aACuB,SAAvB9yL,KAAUiI,KAAGiqL,YACbY,EAAA,UACoB,QAApB9yL,KAAUiI,KAAGiqL,cACbY,EAAA,OAGD,IAAAkQ,GAAa,GAAA3mM,MACb2mM,GAAgBhsL,KAAA,O1Ysp3DN,K0Ytp3DL,GAAIiiB,GAAG,EAAAxc,EAAAzc,KAAAiI,KAAA4sL,SAAA57J,EAAAxc,EAAApe,OAAA46B,IAAA,CACX,GAAAy9L,GAAQj6M,EAAKwc,EACb+pK,GAAAhsL,KAAA0/M,EAAAv3M,OAGDxV,GAAUq5L,EAAOh/J,KAAG,KAAW,M1Ysp3DrB,K0Yrp3DT,GAAI1lC,GAAG,EAAGA,EAAG02M,EAAA12M,IAAO,CACpB22M,EAAgB,IAAA9jB,KAAKnxL,KAAKiI,KAAQyrD,OAAlBp1D,IAAA6jB,OAAA2wK,GAAoB,G1Ysp3DvB,K0Ytp3DR,GAAIp2K,GAAG,EAAAC,EAAA3c,KAAAiI,KAAA4sL,SAAAn4K,EAAAC,EAAAte,OAAAqe,IAAA,CACX,GAAIg6M,GAAK/5M,EAAGD,EACZu4L,IAAA,IAAAyhB,EAAAzuN,KAAA3J,GAED22M,GAAM,OACNtrM,GAAAsrM,EAED,MAAAtrM,I1Ywp3DMlH,YAAY,E0Yxp3DlBC,cAAA,GApFS,IAAA+Z,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAPkD,O1Yuv3DzDssP,KACI3uQ,OAAOM,GAAiB,UACxBsuQ,GAA6C,cAAe5uQ,S0Yhv3D1D8uQ,EAAAltQ,UAAA,sB1Ykv3DN+sQ,IACI3uQ,OAAOM,GAAgB,SACvBsuQ,GAA6C,cAAe5uQ,S0Ynv3D1D8uQ,EAAAltQ,UAAA,qB1Yqv3DN+sQ,IACI3uQ,OAAOM,GAAgB,SACvBsuQ,GAA6C,cAAe3lP,S0Ytv3D1D6lP,EAAAltQ,UAAA,sB1Ywv3DN+sQ,IACI3uQ,OAAOM,GAAgB,SACvBsuQ,GAA6C,cAAersK,S0Yxv3DnEusK,EAAAltQ,UAAA,mB1Y0v3DG+sQ,IACI3uQ,OAAOM,GAAgB,SACvBsuQ,GAA6C,c0Y5v3DxC,mB1Y4v3D+D7sP,M0Y5v3D/D,K1Y4v3D2EgjP,G0Y5v3D3E,cAAYA,GAAZ,eAAYhjP,GAAA/hB,Q1Y6v3DjB4uQ,GAA6C,qB0Yhv3DnD,mBAAA5sP,MAAA,KAAA+iP,GAAA,cAAAA,GAAA,eAAA/iP,GAAAhiB,UA1BW8uQ,EAAuCltQ,UAAA,a1Y4w3DhDktQ,E0Ylx3DOH,I1Ymx3DH3uQ,O0Ylx3DPM,GAAU,YACV4V,SAAU,0BACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW4pP,GA6FZ,wCAAA3sP,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA8iP,SAAA9iP,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA42L,SAAA52L,GAAAriB,UAAD8uQ,IA7FoDnsH,GAAA,G1Y0x3DhD4sH,GAA+CjqQ,MAAQA,KAAKuY,WAAc,WAC1E,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFsxP,GAAgDlqQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D+wP,GAAgDnqQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2Y9y3D7C0wP,GAAA,SAAAxwP,G3Yqz3DzD,Q2Yly3DHywP,GAMe/vP,EAAYC,EAC1Bxc,EAAAyc,GANO,GAAAnX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAM5B,OALOqD,GAAAiX,SACCjX,EAAAkX,YAAcA,EACdlX,EAAAtF,GAAGA,EArBHsF,EAAAmX,M3Yyz3DFnX,E2Yxz3DJinQ,gBACArxP,IAAK,QAASsxP,KAAM,QAASxvQ,MAAO,EAAGqkB,GAAI,gBAC3CnG,IAAK,QAAAsxP,KAAc,QAAQxvQ,MAAA,EAAAqkB,GAAgB,UAC5CnG,IAAA,eAAAsxP,KAAA,iBAAAxvQ,MAAA,EAAAqkB,GAAA,QAWF/b,EAAAmnQ,gBAAa,S3Ygz3DNnnQ,EAAMoT,MAAO,E2Yvy3DnBpT,EAPD4mQ,GAAAI,EAI+BzwP,G3Y6y3D5Blf,OAAOI,e2Y1z3DsBuvQ,EAAA/tQ,UAAA,Q3Y2z3DzBqG,I2Y1z3DN,SAAgBvI,G3Y2z3DN,I2Y3z3DL,GAAO6+B,GAAA,EAAAxc,EAAAzc,KAAAsqQ,cAAArxO,EAAAxc,EAAApe,OAAA46B,IAAA,CACX,GAAI36B,GAAEme,EAAGwc,EAAO36B,GAAE2a,MAAK7e,KACvBkE,EAAAvD,MAAAX,EAAAkE,EAAA2a,MAEDjZ,KAAAyqQ,sB3Y8z3DMhoQ,YAAY,E2Y9z3DlBC,cAAA,I3Yi03DE2nQ,E2Ynz3DwB/tQ,UAAA6e,gBAAA,WAC1Bnb,KAAAyqQ,sB3Yqz3DEJ,E2Yhz3D4B/tQ,UAA6BmuQ,mBAAA,WAC3D,GAAIrmQ,GAAcpE,KAAAjC,GAAAqG,a3Yiz3DZ,I2Yhz3DLA,E3Ygz3DK,C2Y7y3DO,GAAZpE,KAAKyW,OACLzW,KAAKyW,MAAI,EACTzW,KAAAwa,IAAAvD,gBAGD,IAAIsxP,GAACnkQ,EAAkBwE,uBAEvB5I,MAAKwqQ,gBAAYjC,EAAAv/P,MAAA,EAAAu/P,EAAAr/P,OAAA,eACjBlJ,KAAKyW,MAAI,EACTzW,KAAAwa,IAAAhP,iB3Y+y3DE6+P,EAAwC/tQ,UAAUouQ,iBAAmB,SAAUlb,EAAQhqP,GAAQ,MAAOgqP,GAAShqP,EAAK+kQ,K2Yx13DnF,IAAA9tP,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CARwB,O3Yk23DzDotP,KACIxvQ,OAAOM,GAAsB,aAAG,uBAChCmvQ,GAA6C,cAAexmP,S2Y113D1D0mP,EAAA/tQ,UAAA,0B3Y413DN4tQ,IACIxvQ,OAAOM,GAAgB,SACvBmvQ,GAA6C,c2Y913D/B,mB3Y813DsD1tP,M2Y913DtD,K3Y813DkEgjP,G2Y913DlE,aAAWA,GAAX,cAAWhjP,GAAA/hB,Q3Y+13DzByvQ,GAA6C,qB2Y113DnD,mBAAAztP,MAAA,KAAA+iP,GAAA,aAAAA,GAAA,cAAA/iP,GAAAhiB,UAkBD2vQ,EAAA/tQ,UAAA,a3Y003DG4tQ,IACIxvQ,OAAOM,GAAuB,cAAG,iBACjCmvQ,GAA6C,cAAexmN,UAC5DwmN,GAA6C,wBAC7CA,GAA6C,wBAAqB,K2Y/23D7DE,EAAuC/tQ,UAAA,2B3Yi33DhD+tQ,E2Yv33DOH,I3Yw33DHxvQ,O2Yv33DPM,GAAU,YACV4V,SAAU,0BACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWyqP,GAoDZ,wCAAAxtP,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,YAAAA,GAAA,aAAA6hB,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,UAAD2vQ,IApDoDhtH,GAAA,G3Y+33DhDstH,GAA4C3qQ,MAAQA,KAAKuY,WAAc,WACvE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFgyP,GAA6C5qQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DyxP,GAA6C7qQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4Yj53DhDoxP,GAAA,SAAAlxP,G5Yw53DtD,Q4Y343DHmxP,GAIezwP,EAAYC,GAHnB,GAAAlX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAI5B,OAHOqD,GAAAiX,SAbWjX,EAAAkX,YAAYA,EAEtBlX,EAAA2nQ,UAAU,GAAMhwQ,IAAA,aAEhBqI,EAAAy7P,WAAa,G5Yw53Dfz7P,EAAM4nQ,YAAa,E4Y543DzB5nQ,EALDsnQ,GAAAI,EAEuCnxP,G5Yk53DpClf,OAAOI,e4Yt53DViwQ,EAAsDzuQ,UAAS,c5Yu53DxD0F,IAAK,WAAc,MAAOhC,MAAK8+P,YAAc/7P,KAAK0D,IAAI,GAAIzG,KAAKiI,KAAKkmN,QAAQ9vN,QAAU,KACtFoE,YAAY,E4Yx53D0EC,cAAA,IAW7FqoQ,EAAAzuQ,UAAA+iQ,qBAAA,SAA6D/6N,GAAItkC,KAASgrQ,UAAUpvL,KAAMt3C,IAE1FymO,EAAAzuQ,UAAAusQ,iBAAA,SAAc/lP,EAAcnK,GAAE,MAA4BmK,GAAAvP,MAAYoF,EAAApF,K5Yg53DnEw3P,EAAqCzuQ,UAAUwsQ,cAAgB,SAAUtZ,EAAQhqP,GAAQ,MAAOA,GAAK+N,I4Yt63D9F,IAAAkJ,GAAAC,EAAAC,EAAAC,CAF+C,O5Y063DtDguP,KACIlwQ,OAAOM,GAAiB,UACxB6vQ,GAA0C,cAAenwQ,S4Yx63DvDqwQ,EAAAzuQ,UAAA,oB5Y063DNsuQ,IACIlwQ,OAAOM,GAAgB,SACvB6vQ,GAA0C,cAAenwQ,S4Y363DvDqwQ,EAAAzuQ,UAAA,qB5Y663DNsuQ,IACIlwQ,OAAOM,GAAgB,SACvB6vQ,GAA0C,c4Y/63Dd,mBAAApuP,MAAA,KAAAgjP,GAAA,qBAAAA,GAAA,sBAAAhjP,GAAA/hB,SAC1BqwQ,EAAAzuQ,UAAA,e5Yg73DNsuQ,IACIlwQ,OAAOM,GAAgB,SACvB6vQ,GAA0C,cAAenwQ,S4Yj73DvDqwQ,EAAAzuQ,UAAA,qB5Ym73DNsuQ,IACIlwQ,OAAOM,GAAgB,SACvB6vQ,GAA0C,c4Yr73Df,mB5Yq73DsCnuP,M4Yr73DtC,KAAA+iP,GAAA,eAAAA,GAAA,gBAAA/iP,GAAAhiB,SAPtBqwQ,EAAoCzuQ,UAAA,oB5Y873D7CyuQ,E4Yp83DOH,I5Yq83DHlwQ,O4Yp83DPM,GAAU,YACV4V,SAAU,uBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWmrP,GA0BZ,wCAAAluP,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,UAADqwQ,IA1BiD1tH,GAAA,G5Y483D7C6tH,GAAkDlrQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D+xP,GAAkDnrQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6Yp93DzG0xP,GAGgD,W7Yy93D7C,Q6Y393DMC,GAAiBzyO,EAAAgzC,EAAAr4D,GACjBvT,KAAA44B,KAAMA,EACN54B,KAAA4rE,OAAGA,EACP5rE,KAAAuT,M7Y693DF83P,E6Y193DkB/uQ,UAAwBgvQ,iBAAA,SAAA/uQ,GAE5C,GAAMywN,GAAA,GAAcqN,IAChBkxC,EAAavrQ,KAAE4rE,OAAAq2L,eAAA1lQ,E7Y093Db,I6Yz93DLgvQ,EACAv+C,EAAKuN,UAAKgxC,EACVvrQ,KAAA44B,KAAA4yO,0BAAAD,EAAA,GAAAA,EAAA,QACA,CACA,GAAA3qP,GAAQ5gB,KAAS44B,KAAI6yO,2BACrBz+C,GAAAuN,WAAA35M,EAAAF,UAAAE,EAAAD,SAGD,GAAA+qP,GAAwB1rQ,KAAA4rE,OAAA22L,iBAAoBhmQ,EAE5CywN,GAAM96B,YAAiBw5E,GAAqB1rQ,KAAA4rE,OAAAs1L,kBAC5C,IAAIyK,GAAW3rQ,KAAE4rE,OAAA42L,SAAAjmQ,EAChBovQ,IACA3+C,EAAM+M,eAAkB4xC,EAAEjgO,YACzBigO,EAAQ3uC,SAMRhQ,EAAAgN,YAAA2xC,EAAA3uC,SAEAhQ,EAAAgN,YAAA,MAGDhN,EAAA+M,eAAA,KAGD/M,EAAMl2L,OACN,IAAI80O,GAAc5rQ,KAAE4rE,OAAAg3L,YAAArmQ,E7Yq93Dd,I6Yp93DLqvQ,EAAgB,CAChB,GAAAC,GAAe7rQ,KAAAuT,IAAW4wP,YAAYyH,EACtC5+C,GAAAl2L,KAAA+0O,IAAAtvQ,IAAA,SAAAkyB,GAAA,MAAAA,GAAA5N,gBAMD,MAAAmsM,GAnDW,IAAAvwM,GAAAC,EAAAC,CAqDZ,O7Yi93DG0uP,G6Yvg4DSH,I7Ywg4DLxwQ,OAAOM,GAAqB,c6Yvg4DvBmwQ,GAqDZ,wCAAA1uP,MAAA,KAAA8rK,GAAA,GAAAA,GAAA,IAAA9rK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAqkP,SAAArkP,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4mP,SAAA5mP,GAAAjiB,UAAD2wQ,M7Y093DIS,GAA4C9rQ,MAAQA,KAAKuY,WAAc,WACvE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFmzP,GAA2C/rQ,MAAQA,KAAKwnF,UAAa9sF,OAAOusC,QAAU,SAASxY,GAC/F,IAAK,GAAIZ,GAAGvvB,EAAI,EAAG0Z,EAAInO,UAAUxL,OAAQC,EAAI0Z,EAAG1Z,IAAK,CACjDuvB,EAAIhkB,UAAUvL,EACd,KAAK,GAAI/C,KAAKsyB,GAAOnzB,OAAO4B,UAAUd,eAAegB,KAAKqxB,EAAGtyB,KACzDkzB,EAAElzB,GAAKsyB,EAAEtyB,IAEjB,MAAOkzB,IAEPu9O,GAA6ChsQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D6yP,GAA6CjsQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8Yjh4DhDwyP,GAAA,SAAAtyP,G9Yii4DtD,Q8Yvg4DHuyP,GAUe7xP,EAAYC,EAC1BC,EAAAX,EAAAo5B,EAAAra,EAAAgzC,EAAAhuE,GAVO,GAAAyF,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAU5B,OATOqD,GAAAiX,SACCjX,EAAAkX,YAAsBA,EACtBlX,EAAAmX,IAAKA,EACLnX,EAAAwW,QACAxW,EAAA4vC,IAAIA,EACJ5vC,EAAAu1B,KAAMA,EACNv1B,EAAAuoE,SAhCAvoE,EAAAzF,SAEQyF,EAAA+oQ,oBAAkB,GAEnC/oQ,EAAAgpQ,aAAA,GACAhpQ,EAAAipQ,mBAAmB,EACnBjpQ,EAAAkpQ,kBAAgB,EAChBlpQ,EAAAmpQ,eAAgB,EAChBnpQ,EAAAopQ,kBAAmB,EAQnBppQ,EAAAqpQ,cAAc,E9Ygi4DPrpQ,EAAMspQ,gBAAiB,E8Y7g4D7BtpQ,EAXDyoQ,GAAAK,EAKSvyP,G9Ysh4DNlf,OAAOI,e8Yhi4DVqxQ,EAAmD7vQ,UAAK,a9Yii4DjD0F,IAAK,WAAc,MAAOhC,MAAKssQ,mBAAqBtsQ,KAAKusQ,kBAAoBvsQ,KAAKwsQ,eAAiBxsQ,KAAKysQ,kBAAoBzsQ,KAAK0sQ,cACjIjqQ,YAAY,E8Yli4D4HC,cAAA,I9Ysi4D5IypQ,E8Yz+3DF7vQ,UAAA+H,SAAA,WA1CA,GAAIhB,GAAQrD,I9Yqh4DNA,M8Yph4DJo1P,QAEAp1P,KAAA6Z,MAAAmpP,cAICviE,KAAM/lM,OAAO+8M,GAAa,KAAK,SAASm1D,GAAA,MAAAvpQ,GAAAzF,OAAA0tQ,iBAAAsB,KAAAlyQ,OAAA+8M,GAAA,iBAAA1pL,GAAA,QAAAA,IAAArzB,OAAA+8M,GAAA,mBAAA/8M,OAAA+8M,GAAA,oBAAAuV,GACxC,GAAMl7B,GAAAk7B,EAAAl7B,KAAAzuL,EAAwB2pN,SAC9B6/C,EAAyB/6E,EAAAyoC,WAAAzoC,EAAsBioC,gBAAAjoC,EAAAh7J,I9Ysh4DxC,O8Yrh4DPzzB,GAAKipQ,kBAAmBO,EACxBxpQ,EAAKkpQ,iBAAgBM,GAAsB/6E,EAAAI,aAAAJ,EAAAkoC,YAC3C32N,EAAKmpQ,cAAgBK,EACrBxpQ,EAAKopQ,iBAAeI,GAAsB/6E,EAAAI,aAAAJ,EAAAkoC,YAC1C32N,EAAKqpQ,aAAIG,EACTxpQ,EAAAmX,IAAOhP,eAOL9Q,OAAKuuL,GAAA,UAAIvuL,OAAAsuL,GAAA,IAAAgkC,GAAa3pN,EAAGopQ,iBAAoBppQ,EAAG4vC,IAAA6oL,qBAA4B9O,GAAWtyN,OAAEsuL,GAAY,IAAE3lL,EAAOypQ,cAAczpQ,EAAEkpQ,iBAAwBlpQ,EAAI4vC,IAAC+oL,qBAAAhP,GAAAtyN,OAAAsuL,GAAA,IAAA3lL,EAAA0pQ,aAAA1pQ,EAAAqpQ,aAAArpQ,EAAA4vC,IAAAipL,UAAAlP,GAAAtyN,OAAAsuL,GAAA,IAAA3lL,EAAAknP,SAAAlnP,EAAAmpQ,cAAAnpQ,EAAA4vC,IAAAiqL,cAAAlQ,EAAA,EAAA3pN,EAAAgpQ,cAAA3xQ,OAAAsuL,GAAA,IAAA3lL,EAAA2pQ,WAE9JvsE,KAAA/lM,OAAA+8M,GAAA,cAAAw1D,GAAA,OAAAjgD,QAAAigD,EAAA,GAAAH,aAAAG,EAAA,GAAAF,YAAAE,EAAA,GAAA1iB,QAAA0iB,EAAA,GAAAD,SAAAC,EAAA,UAEAtyP,W9Yyg4DQihE,KAAM,S8Yzg4DLn/D,GAER,GAAAuwM,GAAYvwM,EAAGuwM,QAAQ8/C,EAAArwP,EAAAqwP,aAAAC,EAAAtwP,EAAAswP,YAAAxiB,EAAA9tO,EAAA8tO,QAAAyiB,EAAAvwP,EAAAuwP,QACvB3pQ,GAAK2pN,UACL3pN,EAAK0pQ,YAAYA,EACjB1pQ,EAAKypQ,aAAUA,EACfzpQ,EAAAknP,QAAgBA,EAChByiB,EAAK7+C,QAAW9qN,EAAQ6pQ,gBAACF,EAAA7+C,QAAA9qN,EAAA0pQ,YAAArkJ,OACzBrlH,EAAK2pQ,WACL3pQ,EAAKipQ,mBAAmB,EACxBjpQ,EAAKkpQ,kBAAgB,EACrBlpQ,EAAKmpQ,eAAgB,EACrBnpQ,EAAKopQ,kBAAe,EACpBppQ,EAAKqpQ,cAAI,EACTrpQ,EAAAmX,IAAAhP,mB9Y4g4DD2gQ,E8Yvg4D+B7vQ,UAAQgI,YAAe,WAAe,MAAbtE,KAAKo1P,SAAsB,GAAHp1P,KAAGo1P,QAAAruL,QAAK/mE,KAACo1P,QAAUx+H,cACrG52H,KAAIo1P,QAAK,KAA0E,MAAjBp1P,KAAKmtQ,aAA0B,GAAHntQ,KAAGmtQ,YAAApmM,QAAK/mE,KAACmtQ,YAAcv2I,cAErH52H,KAAKmtQ,YAAc,KACnBntQ,KAAKgtN,QAAA,KACLhtN,KAAK+sQ,YAAY,KACjB/sQ,KAAK8sQ,aAAe,KACpB9sQ,KAAKuqP,QAAQ,KAEbvqP,KAAKgtQ,SAAA,KACLhtQ,KAAKssQ,mBAAmB,EACxBtsQ,KAAKusQ,kBAAgB,EACrBvsQ,KAAKwsQ,eAAgB,EACrBxsQ,KAAKysQ,kBAAe,EAEpBzsQ,KAAK0sQ,cAAc,EACnB1sQ,KAAA2sQ,gBAAA,G9Y0g4DER,E8Yvg4D8B7vQ,UAAU8wQ,sBAAU,SAAA9oO,GACpDtkC,KAAK44B,KAAAu9K,sBAA2B7xK,EAAC,GAAAA,EAAA,IACjCtkC,KAAA4rE,OAAAjxC,SAAA36B,KAAA4rE,OAAAi2L,wB9Yyg4DEsK,E8Ytg4D+B7vQ,UAAA+wQ,wBAAmC,SAAWpwQ,GAC/E+C,KAAA4rE,OAAAjxC,SAAA36B,KAAA4rE,OAAAk2L,kBAAA7kQ,EAAAyuC,YAAAzuC,EAAA+/N,Y9Ywg4DEmvC,E8Yrg4D2B7vQ,UAAA0tQ,wBAAA,SAAA93E,GAC7BlyL,KAAKysQ,kBAAmB,EACxBzsQ,KAAKwa,IAAAhP,eACLxL,KAAA4rE,OAAAjxC,SAAA36B,KAAA4rE,OAAAm2L,kBAAA7vE,K9Yug4DEi6E,E8Ypg4D+B7vQ,UAAUgxQ,iBAAU,SAAKx2O,GAC1D92B,KAAA4rE,OAAAjxC,SAAA36B,KAAA4rE,OAAAo2L,WAAAlrO,EAAAv6B,IAAA,SAAAkyB,GAAA,MAAAA,GAAA5b,Q9Ysg4DEs5P,E8Yng4DyB7vQ,UAAAixQ,gBAAA,SAAA/nQ,GAC1BshK,GAAYthK,GACZxF,KAAA4rE,OAAAjxC,SAAA36B,KAAA4rE,OAAAk2L,kBAAAt8P,EAAAkmC,YAAAlmC,EAAAw3N,WACKn2D,GAAgBrhK,GACrBxF,KAAA4rE,OAAAjxC,SAAA36B,KAAA4rE,OAAAk2L,kBAAAt8P,EAAAkmC,YAAA,OAEC1rC,KAAKgtN,QAAO+M,gBAAqB/5N,KAAAgtN,QAAAgN,Y9Ysg4DrBh6N,KAAK4rE,OAAOjxC,SAAS36B,KAAK4rE,OAAOk2L,kBAAkB9hQ,KAAKgtN,QAAQ+M,eAAgB,O8Yng4D7F/5N,KAAA4rE,OAAAjxC,SAAA36B,KAAA4rE,OAAAk2L,kBAAA,a9Ywg4DCqK,E8Ypg4DmB7vQ,UAAAkxQ,oBAAA,SAAA7uP,GACrB4pB,QAAA5pB,U9Ysg4DEwtP,E8Y/+3DF7vQ,UAAAmxQ,gBAAA,SAAAnpO,GApBA,GAAIjhC,GAAKrD,I9Yqg4DH,MAAIA,K8Ypg4DN2sQ,iBACmB,IAAnBroO,EAAMniC,UACNmiC,EAAMniC,WAAYnC,KAAKgtQ,SAAS7+C,QAAA9vN,OAAa,GAChDimC,EAAOniC,UAAAnC,KAAAgtQ,SAAA3+C,e9Yig4DF,C8Y//3DN,GAAMq/C,GAAW1tQ,KAAKgtQ,SAAM7+C,QAAY9vN,OAEpCsvQ,EAAC5qQ,KAAc4M,MAAO+9P,EAAC1tQ,KAAAqsQ,cAAA,CAC3BrsQ,MAAK2sQ,gBAAgB,EACrB3sQ,KAAIwa,IAAKhP,eACS,MAAjBxL,KAAKmtQ,aAA0B,GAAHntQ,KAAGmtQ,YAAApmM,QAC5B/mE,KAACmtQ,YAAcv2I,c9Yog4Db52H,K8Yng4DJmtQ,YAAUntQ,KAAAizC,IAAAiqL,cAAAl9N,KAAAgtN,QAAA2gD,EAAA3tQ,KAAAqsQ,cACV1xP,W9Yog4DQihE,K8Yng4DP,SAAK4iJ,GACLn7N,EAAK2pQ,SAAA7+C,QAAiB9qN,EAAM2pQ,SAAA7+C,QAAA3iM,OAAAnoB,EAAA6pQ,gBAAA1uC,EAAArQ,QAAA9qN,EAAA0pQ,YAAArkJ,QAC5BrlH,EAAKspQ,gBAAgB,EACrBtpQ,EAAAmX,IAAAhP,oB9Yug4DD2gQ,EAAqC7vQ,UAAU4wQ,gBAAkB,SAAU/+C,EAASy/C,GAAgB,MAAOz/C,GAAQ5xN,IAAI,SAAU6c,GAAK,MAAQ2yP,OAA4C3yP,GAAKujN,WAAavjN,EAAEsvG,MAAQklJ,EAAgB,Q8Yhp4DzO,IAAAnxP,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CArByD,O9Yuq4DtDgvP,KACItxQ,OAAOM,GAAsB,aAAG,oBAChCixQ,GAA0C,cAAevxQ,QACzDuxQ,GAA0C,yB8Y1q4DrCE,EAAoC7vQ,UAAA,kB9Y4q4D7C6vQ,E8Yvr4DOH,I9Ywr4DHtxQ,O8Yvr4DPM,GAAU,YACV4V,SAAU,uBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OACjBulB,gBAAWzkB,GAAA,wBAAA0kB,O9Ywr4DA5J,W8Ytr4DV4kN,GACAiB,GACAyvC,MAEWa,GAoKZ,wCAAAxvP,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA3hB,GAAA,mBAAAA,GAAA,oBAAA2hB,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA8+M,SAAA9+M,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAgkP,SAAAhkP,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAouP,SAAApuP,GAAAtiB,UAADyxQ,IApKiD9uH,GAAA,G9Y+r4D7CwwH,GAAmD7tQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D00P,GAAmD9tQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC5F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+Y7t4DzGq0P,GACqD,W/Yiu4DlD,Q+Yju4DMC,GAA4CpiM,GAChD5rE,KAAA4rE,S/Ymu4DFoiM,E+Yhu4DkC1xQ,UAAM0pL,YAAe,SAAAnsK,EAAA80C,GACzD,MAAA3uD,MAAA4rE,OAAAm3L,iBAAAlpP,EAAAmpP,eARW,IAAAvmP,EASZ,O/Yku4DGuxP,G+Y5u4DSH,I/Y6u4DLnzQ,OAAOM,GAAqB,c+Y5u4DvB8yQ,GASZ,wCAAArxP,MAAA,KAAAskP,SAAAtkP,GAAA/hB,UAADszQ,M/Y2u4DIC,GAA2DjuQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1H,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D80P,GAA2DluQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpG,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IgZvv4DzGy0P,GAE+C,WhZ2v4D5C,QgZ5v4DMC,GAA4CxiM,EAAAq1L,GAC5CjhQ,KAAA4rE,OAAGA,EACP5rE,KAAAihQ,MhZ8v4DFmN,EgZ3v4DqC9xQ,UAAe4qB,QAAA,SAAArN,EAAA80C,GACtD,GAAAsyM,GAASjhQ,KAAG4rE,OAAU42L,SAAA3oP,EAAWmpP,chZ4v4D3B,OgZ3v4DH/B,IAASA,EAAAv1N,YACT1rC,KAAKihQ,IAAApJ,SAAAoJ,EAAAv1N,aACR,KAZW,IAAAjvB,GAAAC,CAcZ,OhZ4v4DG0xP,GgZ3w4DSH,IhZ4w4DLvzQ,OAAOM,GAAqB,cgZ3w4DvBkzQ,GAcZ,wCAAAzxP,MAAA,KAAAskP,SAAAtkP,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAkjP,SAAAljP,GAAAhiB,UAAD0zQ,MhZqw4DIC,GAAyDruQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dk1P,GAAyDtuQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClG,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IiZzx4DzG60P,GACgD,WjZ6x4D7C,QiZ7x4DMC,GAAuCj7P,GAC3CvT,KAAAuT,MjZ+x4DFi7P,EiZ5x4DqClyQ,UAAM4qB,QAAe,SAAArN,EAAA80C,GAC5D,MAAA3uD,MAAAuT,IAAA8wP,uBAAAxqP,EAAAmpP,eARW,IAAAvmP,EAUZ,OjZ6x4DG+xP,GiZxy4DSH,IjZyy4DL3zQ,OAAOM,GAAqB,ciZxy4DvBszQ,GAUZ,wCAAA7xP,MAAA,KAAA8mP,SAAA9mP,GAAA/hB,UAAD8zQ,MjZsy4DIC,GAAqCzuQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GkZ1x4DnDkoP,IAAiB,uCAC7BoN,KAECxrN,KAAA,GACAxQ,UAAWw5N,GACXlmF,aAAS+nF,IlZ4z4DH7mP,SkZ1z4DLynP,QAAOR,GACPS,MAAAL,IAEDM,sBAAA,8BA2CFC,GAAA,WAA6C,QAACC,MAAA,MlZsx4D1CA,GkZ9z4DKN,IlZ+z4DD/zQ,OkZ9z4DPM,GAAS,WlZ+z4DEqX,SkZ7z4DVq1J,GAAY,EACZ0e,GACAjpC,GAAA,aACAE,GAAsB,EACtBD,GAAW,EAAAoa,SAAAk3G,IACX1xE,GACAgtB,GACAsnB,GACA+gB,GACAO,GACA2M,GACAhR,GAAA,sBACAuD,IlZg04DU1/O,ckZ7z4DVmuP,GACA2L,GACAxG,GACA0E,GACAU,GACAvB,GACA7B,IlZg04DU5xP,WkZ7z4DVqnI,GAAA,cACAq1G,GACAP,GACAsO,GACAnoC,GACApK,GACAu1C,GACA3D,GACAmB,GACAgN,GACAI,GACAI,OAE2CQ,MlZq04DzCC,GAA+BhvQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GmZl44D/D61P,KACE/rN,KAAM,WAAUgsN,aAAc,WAAM,MAAA33D,OACpCr0J,KAAM,SAASgsN,aAAc,WAAE,MAAM/3C,OACrCj0K,KAAM,UAAWgsN,aAAc,WAAE,MAAMntC,OACvC7+K,KAAM,YAAagsN,aAAc,WAAE,MAAMzlC,OACzCvmL,KAAM,cAAOgsN,aAAc,WAAM,MAAAtkC,OACjC1nL,KAAM,MAAAgsN,aAAc,WAAc,MAAMz6B,OACxCvxL,KAAM,aAAYgsN,aAAc,WAAM,MAAAv2B,OACtCz1L,KAAM,WAAOgsN,aAAc,WAAM,MAAAp0B,OACjC53L,KAAM,MAAAgsN,aAAqB,WAAc,MAAEjzB,OAC3C/4L,KAAM,sBAAsBgsN,aAAE,WAAM,MAAApvB,OACpC58L,KAAM,SAAAgsN,aAAuB,WAAc,MAAAltB,OAC3C9+L,KAAM,sBAAoBgsN,aAAc,WAAM,MAAA7rB,OAC9CngM,KAAM,mBAAagsN,aAAc,WAAM,MAAA5qB,OACvCphM,KAAM,YAAQgsN,aAAc,WAAM,MAAA7mB,OAClCnlM,KAAM,OAAAgsN,aAAa,WAAc,MAAM7gB,OACvCnrM,KAAM,YAAagsN,aAAc,WAAM,MAAAhR,OACvCh7M,KAAM,YAAAgsN,aAAmB,WAAc,MAAMvhB,OAC7CzqM,KAAM,kBAAgBgsN,aAAa,WAAiB,MAAEJ,OACtD5rN,KAAM,GAAIwtI,WAAY,YAAaC,UAAE,SACtCztI,KAAA,KAAAwtI,WAAA,cAOFy+E,GAAA,WAA+B,QAACC,MAAA,MnZs54D5BA,GmZ354DHJ,InZ454DOt0Q,OmZ354DPM,GAAS,WnZ454DEqX,SmZ154DV+qI,GAAA,EAAAoa,SAAAy3G,QAE6BG,MnZk64D3BC,GAAgBn1Q,EAAoB,KAGpCo1Q,GAAkBp1Q,EAAoB,KAGtCq1Q,GAAwBr1Q,EAAoB,KAG5Cs1Q,GAA2CxvQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dq2P,GAA2CzvQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IoZt+4DzGg2P,IACA,mEACC,6BAWDC,GAAwC,WpZk+4DrC,QoZl+4DgBC,GAAqBpgM,GAAIxvE,KAAAwvE,UADhC,GAAA/yD,EAEZ,OpZq+4DGmzP,GoZ/+4DHJ,IpZg/4DO90Q,OoZ/+4DPM,GAAU,YACV4V,SAAO,qBACPG,MAAQojB,MAAI,cAAAw1J,UAAA,mBACZ74K,SAAQ,GACRK,OAAAu+P,GACCjwP,gBAAAzkB,GAAA,wBAAA0kB,SAEW+vP,GAEZ,wCAAAhzP,MAAA,KAAA6gI,GAAA,GAAAA,GAAA,IAAA7gI,GAAA/hB,UAADk1Q,MpZo/4DIC,GAAyB31Q,EAAoB,KAG7C41Q,GAAwB51Q,EAAoB,KAG5C61Q,GAAkC71Q,EAAoB,KAGtD81Q,GAA4B91Q,EAAoB,KAGhD+1Q,GAAwB/1Q,EAAoB,KAG5Cg2Q,GAAqClwQ,MAAQA,KAAKuY,WAAc,WAChE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFu3P,GAAsCnwQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dg3P,GAAsCpwQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC/E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqZ3h5D/D22P,GAAA,SAAAz2P,GrZsi5DvC,QqZni5DA02P,GAKIvqF,EAAMl5B,EAAMw7B,EAAM1vJ,EAAWlC,GALX,GAAApzB,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IAMtC,OALaqD,GAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,YACAhlL,EAAAs1B,OAAGA,ErZqi5Dbt1B,EAAMozB,IAAMA,EqZni5DfpzB,EAND6sQ,GAAsBI,EAGR12P,GrZyi5Dd02P,EqZni5DsBh0Q,UAAcwnJ,eAAa,SAAcysH,EAAcC,GACzE,GAAAvoQ,IAAYwoQ,aAAOF,EAAqBG,aAAEF,EAC7C,OAAAxwQ,MAAA8Y,OAAA,gBAAA7Q,GAdQ,IAAAwU,GAAAC,EAAAC,EAAAC,EAAAC,CAA8B,OrZoj5DvCyzP,GqZrj5DHH,IrZsj5DOz1Q,OAAOM,GAAqB,cqZrj5DvBo1Q,GAeZ,wCAAA3zP,MAAA,KAAAkpK,GAAA,GAAAA,GAAA,IAAAlpK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAgrJ,GAAA,GAAAA,GAAA,IAAAhrJ,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAmrK,GAAA,GAAAA,GAAA,IAAAnrK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,UAAD41Q,IAfkCvoF,GAAA,GrZ6j5D9B4oF,GAAmC3wQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dw3P,GAAmC5wQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC5E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IsZvj5DzGm3P,GACS,WtZik5DN,QsZlk5DiBC,GAAAzlF,EAAwBvnC,EAAAtpI,EAAAoe,EAAAve,EAAAE,EAAAV,EAAA8e,EAAA8iH,GACnCz7I,KAAAqrL,YAAcA,EACdrrL,KAAA8jJ,eAAsBA,EACtB9jJ,KAAAwa,IAAIA,EACJxa,KAAA44B,OACD54B,KAAAqa,uBACCra,KAAAua,YAAqBA,EACrBva,KAAA6Z,MAAMA,EACP7Z,KAAA24B,OAASA,EAfT34B,KAAAy7I,YACAz7I,KAAA+wQ,qBAAgB,EAIjB/wQ,KAAA8vL,SAAS,EAWf9vL,KAAKgxQ,UAAA,GAAAh2Q,IAAoB,aACzBgF,KAAAixQ,oBtZuk5DEH,EsZrk5DGx0Q,UAAA20Q,kBAA6B,WAClCjxQ,KAAKkxQ,2BACLlxQ,KAAAmxQ,4BtZuk5DEL,EsZpk5DUx0Q,UAAK+H,SAAkB,WtZqk5D7BrE,KsZpk5DLoe,KAAApe,KAAaqrL,YAAK5hK,OAClB8mP,aAAc,GAAI9oG,GAAA,WAAWt4C,UAC7BqhJ,aAAA,GAAiB/oG,GAAO,WAAAomB,SAAWpmB,GAAS,WAAAt4C,SAAWs4C,GAAU,WAAA2pG,UAAW,MAC1EC,mBAAA,GAAA5pG,GAAA,WAAAomB,SAAApmB,GAAA,WAAAt4C,SAAAs4C,GAAA,WAAA2pG,UAAA,QAEAt6G,UAAA92J,KAAAsxQ,kBAAA,sCtZuk5DDR,EsZpk5DKx0Q,UAAiBg1Q,kBAAA,SAAAC,EAAAC,GtZqk5DlB,MsZpk5DL,UAAI/nP,GACJ,GAAIgoP,GAAAhoP,EAAAojK,SAA4B0kF,GAC5BG,EAAwBjoP,EAAAojK,SAAA2kF,EtZqk5DnB,IsZpk5DRC,EAAO12Q,QAAA22Q,EAAqC32Q,MAC5C,MAAA22Q,GAAAC,WAAAC,eAAA,MtZwk5DAd,EsZpk5DHx0Q,UA8BCu1Q,2BAAA,WA7BA,GAAIxuQ,GAAQrD,IACZA,MAAI8vL,SAAS,CAGb,IAAI1oK,GAACpnB,KAAAoe,KAAiBrjB,KAEtBiF,MAAKixQ,oBAELjxQ,KAAKwa,IAAAhP,etZik5DCxL,KsZ/j5DJ8jJ,eAAeA,eAAM18H,EAAAmpP,YAAAnpP,EAAAopP,aAAA71P,UAAA,SAAAy9D,GACrB/0E,EAAKysL,SAAI,EACTzsL,EAAKmX,IAAAhP,eACLnI,EAAK2tQ,UAAAzlQ,OAKNlI,EAAAgX,qBAAW5D,KAAApT,EAAAkX,YAAAmE,UAAA,oCAAArI,SAAA,gBAAAvM,QAAA,OtZ4j5DH,SsZ3j5DF6U,GACLtb,EAAGysL,SAAY,EACdnxK,EAAKisB,QAAAjsB,EAAAisB,OAAuB6lO,cAAgB9xP,EAAAisB,OAAa6lO,aAAApyQ,SACzDgF,EAAA6tQ,wBAAAvyP,EAAAisB,OAAA6lO,cAEA9xP,EAAKisB,QAAAjsB,EAAAisB,OAAuB8lO,cAAgB/xP,EAAAisB,OAAa8lO,aAAAryQ,SACzDgF,EAAA8tQ,wBAAAxyP,EAAAisB,OAAA8lO,cAGDrtQ,EAAAmX,IAAAhP,iBAxES,IAAAiR,GAAAC,EAAAC,EAAAC,EAAkBC,EAAAC,EAAAC,EAAAC,EAAAC,CA0E9B,OtZ4j5DG6zP,GsZ5o5DHH,ItZ6o5DOj2Q,OsZ5o5DPM,GAAU,YACV4V,SAAU,uBACVE,SAAA5W,EAAiB,MACjBulB,gBAAUzkB,GAAY,wBAAA0kB,OACrB0/H,SAAA,eACWwxH,GA0EZ,wCAAAn0P,MAAA,KAAAgrJ,GAAA,aAAAA,GAAA,cAAAhrJ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2zP,SAAA3zP,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA3hB,GAAA,mBAAAA,GAAA,oBAAA2hB,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2rK,GAAA,GAAAA,GAAA,IAAA3rK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyoK,GAAA,sBAAAA,GAAA,uBAAAzoK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAugI,GAAA,GAAAA,GAAA,IAAAvgI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAqgI,GAAA,GAAAA,GAAA,IAAArgI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAogI,GAAA,GAAAA,GAAA,IAAApgI,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAA0qJ,GAAA,GAAAA,GAAA,IAAA1qJ,GAAAviB,UAADo2Q,MtZ0k5DIgB,GAAqC9xQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GuZpp5DhE24P,GAAA,WAAoC,QAACC,MAAA,MvZgq5DjCA,GuZ5q5DHF,IvZ6q5DOp3Q,OuZ5q5DJM,GAAS,WvZ6q5DDqX,SuZ3q5DJ+zK,GACA/oC,GAAY,EACZD,GAAW,EACXqqB,GAAA,YAAoBA,GAAA,qBAExBr1J,cAAey+P,IACf7/E,iBAAY6/E,IACZ/6P,WAAUu6P,IACZz+Q,SAAAi/Q,OACkCmB,MvZwr5DhCC,GAA2BjyQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GwZjq5DhE84P,GAAA,WAA2B,QAACC,MAAA,MxZmr5DxBA,GwZht5DHF,IxZit5DOv3Q,OwZht5DPM,GAAU,WACVqX,SAAAo1J,GAAc,YAAAtqB,GAAA,aAAA40H,IxZit5DH3/P,cwZ/s5DVk9P,GAAA,EACAK,GACAJ,GAAA,EACAM,GAAmB,EAGnBC,GAAA,EACAC,GAAsB,EACtBC,GAAmB,EACnBC,GAAA,GxZgt5DUj/E,iBwZ7s5DVs+E,GAAA,EACAK,GACAJ,GAAA,EACAM,GAAmB,EAGnBC,GAAA,EACAC,GAAsB,EACtBC,GAAmB,EACnBC,GAAA,GAEDn6P,WAAUwnI,GAAA,GACT1rJ,SAAA09Q,GAAA,MACyB6C,MxZmt5DvBC,GAAel4Q,EAAoB,ImX9v5DtCm4Q,GAAA,WnXkw5DG,QmXlw5DgBA,GAASpvB,EAAAp1N,EAAAnU,EAAAoJ,GAAS9iB,KAAAijP,IAAkBjjP,KAAA6tB,IAAkB7tB,KAAA0Z,IAAc1Z,KAAA8iB,IACvF,MAAAuvP,MAEAC,GAAA,WnXyw5DG,QmXzw5DgBA,GAASrvB,EAAAp1N,EAAA0kP,EAAAzvP,GAAS9iB,KAAAijP,IAAkBjjP,KAAA6tB,IAAkB7tB,KAAAuyQ,IAAcvyQ,KAAA8iB,IACvF,MAAAwvP,MAEAE,GAAA,WnXgx5DG,QmXhx5DgBA,GAASp5P,EAAA4sI,EAAArtI,EAAAmK,GAAS9iB,KAAAoZ,IAAkBpZ,KAAAgmJ,IAAkBhmJ,KAAA2Y,IAAc3Y,KAAA8iB,IACvF,MAAA0vP,MAEAC,GAAA,WnXux5DG,QmXvx5DgBA,GAASxvB,EAAAp1N,EAAAnU,EAAAoJ,GAAS9iB,KAAAijP,IAAkBjjP,KAAA6tB,IAAkB7tB,KAAA0Z,IAAc1Z,KAAA8iB,IACvF,MAAA2vP,MAEAC,GAAA,WnX8x5DG,QmX9x5DgBA,GAASzvB,EAAAp1N,EAAAnU,EAAAoJ,GAAS9iB,KAAAijP,IAAkBjjP,KAAA6tB,IAAkB7tB,KAAA0Z,IAAc1Z,KAAA8iB,IACvF,MAAA4vP,OnXuy5DD,SmXry5DkC1iB,GAAOA,IAAA,iBAAMA,IAAA,eAAKA,IAAA,aAAQA,IAAA,mBAAhDA,EAAmBA,EAAA,OAAqC,aACpEA,KAAiDA,OAAjD,IAAA2iB,KnX4y5DA,SmX5y5DgCA,GAAKA,IAAA,aAAMA,IAAA,eAA/BA,EAAiBA,EAAA,KAAoB,WnXgz5D9CA,KAAsBA,OAGzB,IyZr05DAC,IzZq05DIC,GAAkC7yQ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D05P,GAAkC9yQ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0Zn05DzGq5P,GAAA,W1Zy05DG,Q0Z305DKC,KAGPhzQ,KAAKizQ,aAAe,GAAIhxC,IAAC,QACzBjiO,KAAAwgJ,aAAAxgJ,KAAAizQ,aAAAn8I,eAiLD,M1Z0p5DGk8I,G0Zx05DG12Q,UAAkB+iB,MAAM,WAC7Brf,KAAAizQ,aAAAr3L,KAAA,O1Z005DEo3L,E0Zv05DW12Q,UAAY42Q,UAAY,SAAUC,GAC/C,GAAIlwB,GAAClgP,KAAQ0D,IAAA0sQ,EAAAlwB,EAAA,GAAAp1N,EAAA9qB,KAAA0D,IAAA0sQ,EAAAtlP,EAAA,GAAA0kP,EAAAxvQ,KAAA0D,IAAA0sQ,EAAAZ,EAAA,GAAAzvP,EAAA/f,KAAA0D,IAAA0sQ,EAAArwP,EAAA,E1Zw05DP,I0Zv05DL,IAAAyvP,EACA,OAAAtvB,IAAAp1N,EAAA,EAAAnU,EAAA,EAAAoJ,IAEA,IAAApJ,GAAO64P,EAAK1kP,GAAI,EAAG9qB,KAAKgG,IAAK,EAAIwpQ,EAAK,IAAM,CAC5C,QAAAtvB,IAAAp1N,EAAA,GAAAnU,EAAA64P,GAAA74P,MAAAoJ,M1Z205DCkwP,E0Zv05DY12Q,UAAW82Q,UAAY,SAAOC,GAC5C,GAAIpwB,GAACowB,EAAQpwB,EAAAp1N,EAAAwlP,EAAAxlP,EAAAnU,EAAA25P,EAAA35P,EAAAoJ,EAAAuwP,EAAAvwP,C1Zw05DP,I0Zv05DL,IAAApJ,EACA,UAAA44P,IAAArvB,EAAA,IAAAngO,EACA,IAAW,IAAX+K,GAAW,IAAAnU,EACX,UAAA44P,IAAArvB,EAAA,IAAAngO,EAEA,IAAAyvP,GAAO74P,GAAI,EAAAmU,GAAA,CACX,WAAAykP,IAAArvB,EAAAvpO,EAAAmU,GAAA,EAAA9qB,KAAAgG,IAAA,EAAAwpQ,EAAA,IAAAA,EAAAzvP,I1Z405DCkwP,E0Zx05DW12Q,UAAYg3Q,WAAa,SAAUn9E,GAChD,GAGWtoK,GAHPzU,EAAGrW,KAAG0D,IAAK0vL,EAAO/8K,EAAG,GAAI4sI,EAAGjjJ,KAAG0D,IAAK0vL,EAAOnwC,EAAG,GAAGrtI,EAAA5V,KAAA0D,IAAA0vL,EAAAx9K,EAAA,GAAAmK,EAAA/f,KAAA0D,IAAA0vL,EAAArzK,EAAA,GACjD9f,EAAYD,KAAcC,IAAGoW,EAAG4sI,EAAIrtI,GAAAlS,EAAA1D,KAAA0D,IAAA2S,EAAA4sI,EAAArtI,GAEpCsqO,EAAIpyF,IAAMn3I,EAAI1W,EACd5I,EAAG4I,EAAOyD,C1Zy05DR,I0Zv05DNonB,EAAY,IAAR7qB,EAAW,EAAE5I,EAAA4I,EAChBA,IAAMyD,EACNw8O,EAAA,MACA,C1Zw05DS,O0Zv05DRjgP,G1Zw05DY,I0Zv05DVoW,GACD6pO,GAAAj9F,EAAMrtI,GAAAve,GAAA4rJ,EAAArtI,EAAA,IACP,M1Zw05DY,K0Zv05DVqtI,GACDi9F,GAAAtqO,EAAMS,GAAAhf,EAAA,CACP,M1Zw05DY,K0Zv05DVue,GACDsqO,GAAA7pO,EAAM4sI,GAAA5rJ,EAAA,EAGR6oP,GAAA,EAGD,UAAAovB,IAAApvB,EAAAp1N,EAAAnU,EAAAoJ,I1Zw05DEkwP,E0Zr05DY12Q,UAAWi3Q,WAAa,SAAUF,GAChD,GAAIpwB,GAAYowB,EAAKpwB,EAACp1N,EAAcwlP,EAAGxlP,EAAWnU,EAAI25P,EAAA35P,EAAAoJ,EAAAuwP,EAAAvwP,EAElD1J,EAAIy3I,IAAK7K,EAAA6K,IAAOl4I,EAAMk4I,IACtBvyJ,EAAIyE,KAAK4M,MAAK,EAAAszO,GACdl1N,EAAQ,EAAJk1N,EAAM3kP,EACV/C,EAAIme,GAAK,EAAImU,GACb2lP,EAAI95P,GAAK,EAAIqU,EAAEF,GAEnBY,EAAQ/U,GAAK,GAAE,EAAAqU,GAAAF,E1Zo05DT,Q0Zn05DLvvB,EAAM,G1Zo05DG,I0Zp05DA,GAAM8a,EAAIM,EAAGssI,EAAIv3H,EAAG9V,EAAApd,CAC7B,M1Zw05DS,K0Zx05DA,GAAM6d,EAAIo6P,EAAGxtH,EAAItsI,EAAGf,EAAApd,CAC7B,M1Z405DS,K0Z505DA,GAAM6d,EAAI7d,EAAGyqJ,EAAItsI,EAAGf,EAAA8V,CAC7B,M1Zg15DS,K0Zh15DA,GAAMrV,EAAI7d,EAAGyqJ,EAAIwtH,EAAG76P,EAAAe,CAC7B,M1Zo15DS,K0Zp15DA,GAAMN,EAAIqV,EAAGu3H,EAAIzqJ,EAAGod,EAAAe,CAC7B,M1Zw15DS,K0Zx15DA,GAAMN,EAAIM,EAAGssI,EAAIzqJ,EAAGod,EAAA66P,EAI9B,UAAAhB,IAAAp5P,EAAA4sI,EAAArtI,EAAAmK,I1Z415DEkwP,E0Zz15DE12Q,UAAgBm3Q,aAAA,SAAAC,G1Z015Dd,G0Zz15DLC,KAECC,GAAA,4F1Z015DY90P,M0Zz15DX,SAAW+0P,GAIX,UAAArB,IAAAtxO,SAAA2yO,EAAA,QAAA3yO,SAAA2yO,EAAA,QAAA3yO,SAAA2yO,EAAA,QAAA3rQ,MAAAojB,WAAAuoP,EAAA,OAAAvoP,WAAAuoP,EAAA,QAIDD,GAAA,0F1Zu15DY90P,M0Zt15DX,SAAW+0P,GAIX,UAAAvB,IAAApxO,SAAA2yO,EAAA,QAAA3yO,SAAA2yO,EAAA,QAAA3yO,SAAA2yO,EAAA,QAAA3rQ,MAAAojB,WAAAuoP,EAAA,OAAAvoP,WAAAuoP,EAAA,QAIDD,GAAA,qD1Zo15DY90P,M0Zn15DX,SAAW+0P,GAIX,UAAArB,IAAAtxO,SAAA2yO,EAAA,WAAA3yO,SAAA2yO,EAAA,WAAA3yO,SAAA2yO,EAAA,iBAIDD,GAAA,4C1Zi15DY90P,M0Zh15DX,SAAW+0P,GAIX,UAAArB,IAAAtxO,SAAA2yO,EAAA,GAAAA,EAAA,WAAA3yO,SAAA2yO,EAAA,GAAAA,EAAA,WAAA3yO,SAAA2yO,EAAA,GAAAA,EAAA,gBAIHH,GAAuBA,EAAKhhQ,aAC5B,IAAA2gQ,GAAS,I1Z805DH,K0Z705DL,GAAIp6P,KAAA06P,G1Z805DK,G0Z705DRA,EAAan4Q,eAAcyd,GAAK,CAChC,GAAIuxD,GAAQmpM,EAAe16P,GACvBgoB,EAAOupC,EAAAopM,GAAA/qH,KAAA6qH,GAAA7iJ,EAAA5vF,GAAAupC,EAAA1rD,MAAAmiB,E1Z805DC,I0Z705DX4vF,EAMA,MALCA,aAAY2hJ,IACZa,EAAArzQ,KAAAszQ,WAAAziJ,GACIA,YAAkByhJ,MACtBe,EAAArzQ,KAAAkzQ,UAAAriJ,IAEDwiJ,EAIH,MAAAA,I1Zg15DEL,E0Z705DY12Q,UAAEw3Q,aAAA,SAAAT,EAAAS,G1Z805DV,G0Z705DLT,EAAAvwP,EAAQ,E1Z805DC,O0Z705DRgxP,G1Z805DY,I0Z705DX,OACA,GAAIX,GAAAnzQ,KAAWozQ,UAAIC,GAEnBU,EAAc,GAAGzB,IAAgBvvQ,KAAG4J,MAAoB,IAAVwmQ,EAAO,GAAGpwQ,KAAU4J,MAAU,IAAHwmQ,EAAGtlP,GAAa9qB,KAAI4J,MAAA,IAAAwmQ,EAAAZ,GAAAxvQ,KAAA4J,MAAA,IAAAwmQ,EAAArwP,GAAA,IAC9F,eAAAixP,EAAA9wB,EAAA,IAAA8wB,EAAAlmP,EAAA,KAAAkmP,EAAAxB,EAAA,KAAAwB,EAAAjxP,EAAA,G1Z605DY,S0Z305DX,GAAAqzK,GAAOn2L,KAAOg0Q,gBAAkBh0Q,KAAKuzQ,WAAUF,GAChD,eAAAl9E,EAAA/8K,EAAA,IAAA+8K,EAAAnwC,EAAA,IAAAmwC,EAAAx9K,EAAA,IAAA5V,KAAA4J,MAAA,IAAAwpL,EAAArzK,GAAA,Y1Zg15DQ,Q0Z705DRgxP,G1Z805DY,I0Z705DX,OACA,GAAIX,GAAAnzQ,KAAWozQ,UAAIC,GAEnBU,EAAa,GAAGzB,IAAmBvvQ,KAAA4J,MAAoB,IAAVwmQ,EAAO,GAAWpwQ,KAAK4J,MAAK,IAAAwmQ,EAAAtlP,GAAA9qB,KAAA4J,MAAA,IAAAwmQ,EAAAZ,GAAAxvQ,KAAA4J,MAAA,IAAAwmQ,EAAArwP,GAAA,IAC1E,OAAW,OAAAixP,EAAA9wB,EAAA,IAAA8wB,EAAAlmP,EAAA,KAAAkmP,EAAAxB,EAAA,I1Z605DC,K0Z505DX,OACA,GAAAp8E,GAAOn2L,KAASg0Q,gBAAeh0Q,KAAMuzQ,WAASF,GAC/C,cAAAl9E,EAAA/8K,EAAA,IAAA+8K,EAAAnwC,EAAA,IAAAmwC,EAAAx9K,EAAA,G1Z605DY,S0Z305DZ,MAAA3Y,MAAAi0Q,QAAAj0Q,KAAAg0Q,gBAAAh0Q,KAAAuzQ,WAAAF,O1Zg15DAL,E0Z505D4B12Q,UAAA23Q,QAAA,SAAe99E,EAAA+9E,OAC/B,KAAVA,IAAmBA,GAAW,EAElC,IAAID,GAAO,KAAW,GAAG,GAAK99E,EAAS/8K,GAAK,GAAO+8K,EAAGnwC,GAAK,EAAOmwC,EAAGx9K,GAAIkI,SAAU,IAAA+xB,OAAK,EAGxF,OAFCshO,IAAUD,EAAM,KAAUA,EAAG,IAAUA,EAAG,KAAWA,EAAA,IAAAA,EAAA,KAAAA,EAAA,KACtDA,EAAc,IAACA,EAAa,GAACA,EAAA,GAAAA,EAAA,IAC7BA,EAAAvhQ,e1Z605DEsgQ,E0Z105DS12Q,UAAA03Q,gBAAgC,SAC1C79E,GAED,UAAAq8E,IAAAzvQ,KAAA4J,MAAA,IAAAwpL,EAAA/8K,GAAArW,KAAA4J,MAAA,IAAAwpL,EAAAnwC,GAAAjjJ,KAAA4J,MAAA,IAAAwpL,EAAAx9K,GAAAw9K,EAAArzK,I1Z005DEkwP,E0Zlg6DHH,I1Zmg6DOn4Q,OAAOM,GAAqB,c0Zlg6DvB83Q,GAwLZ,yBAADE,M1Zk15DImB,GAAuCn0Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dg7P,GAAuCp0Q,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2Zn/5DzG26P,GAA8C,W3Z0/5D3C,Q2Z1/5DgBC,GAA2B9kM,GAb9CxvE,KAAAwvE,UAUAxvE,KAAAu0Q,YAAc5B,GAIb3yQ,KAAKw0Q,aAAa,EAClBx0Q,KAAKy0Q,cAAgB,GAAIxyC,IAAC,QAC1BjiO,KAAAugJ,cAAAvgJ,KAAAy0Q,cAAA39I,e3Z8/5DEw9I,E2Z3/5DOh4Q,UAAmB25H,KAAE,SAAApF,EAAA1uG,G3Z4/5DxB,G2Z1/5Dc,GAAnBniB,KAAKw0Q,YAAc,CACnBx0Q,KAAK6wH,QACL7wH,KAAK00Q,WAAS7jJ,EAAO,GAErB7wH,KAAImiB,OAAOA,CACX,IAAIkxP,GAAIrzQ,KAAKwvE,QAAIikM,aAAA5iJ,E3Z2/5DJ7wH,MAAKqzQ,K2Z1/5DR,OAATA,E3Z0/5DwBA,E2Zt/5DpB,GAAehB,IAAI,SACxBryQ,KAAK20Q,aAAa,GAAAjC,IAAiC,IAAK,aAExD1yQ,KAAK40Q,OAAS,GAAAnC,IAAA,SAEdzyQ,KAAKa,SACLb,KAAAw0Q,aAAA,I3Zy/5DCF,E2Zr/5Dch4Q,UAAQu4Q,cAAqB,SAAAl5Q,GAC7C,GAAIw3Q,GAAKnzQ,KAAKwvE,QAAU4jM,UAAApzQ,KAAAqzQ,KACxBF,GAAKtlP,EAAIlyB,EAAG+d,EAAK/d,EAAAm5Q,GACjB90Q,KAAKqzQ,KAAMrzQ,KAAGwvE,QAAA0jM,UAAAC,GACdnzQ,KAAAa,U3Zu/5DEyzQ,E2Zp/5Dch4Q,UAAQy4Q,aAAoB,SAACp5Q,GAC7C,GAAIw3Q,GAAKnzQ,KAAKwvE,QAAU4jM,UAAApzQ,KAAAqzQ,KACxBF,GAAKZ,EAAI52Q,EAAG+d,EAAK/d,EAAAm5Q,GACjB90Q,KAAKqzQ,KAAMrzQ,KAAGwvE,QAAA0jM,UAAAC,GACdnzQ,KAAAa,U3Zs/5DEyzQ,E2Zn/5DiBh4Q,UAAU04Q,OAAA,SAAAr5Q,GAC7BqE,KAAKqzQ,KAAApwB,EAAStnP,EAAA+d,EAAA/d,EAAAm5Q,GACd90Q,KAAAa,U3Zq/5DEyzQ,E2Zl/5DiBh4Q,UAAU24Q,SAAA,SAAAt5Q,GAC7BqE,KAAKqzQ,KAAAvwP,EAASnnB,EAAA+d,EAAA/d,EAAAm5Q,GACd90Q,KAAAa,U3Zo/5DEyzQ,E2Zj/5Dch4Q,UAAQ44Q,KAAW,SAAWv5Q,GAC9C,GAAIw6L,GAAKn2L,KAAKwvE,QAAU+jM,WAAAvzQ,KAAAqzQ,KACxBl9E,GAAK/8K,EAAIzd,EAAG+d,EAAK/d,EAAAm5Q,GACjB90Q,KAAKqzQ,KAAMrzQ,KAAGwvE,QAAA8jM,WAAAn9E,GACdn2L,KAAAa,U3Zm/5DEyzQ,E2Zh/5Dch4Q,UAAQ64Q,KAAW,SAAWx5Q,GAC9C,GAAIw6L,GAAKn2L,KAAKwvE,QAAU+jM,WAAAvzQ,KAAAqzQ,KACxBl9E,GAAKnwC,EAAIrqJ,EAAG+d,EAAK/d,EAAAm5Q,GACjB90Q,KAAKqzQ,KAAMrzQ,KAAGwvE,QAAA8jM,WAAAn9E,GACdn2L,KAAAa,U3Zk/5DEyzQ,E2Z/+5Dch4Q,UAAQ84Q,KAAW,SAAWz5Q,GAC9C,GAAIw6L,GAAKn2L,KAAKwvE,QAAU+jM,WAAAvzQ,KAAAqzQ,KACxBl9E,GAAKx9K,EAAIhd,EAAG+d,EAAK/d,EAAAm5Q,GACjB90Q,KAAKqzQ,KAAMrzQ,KAAGwvE,QAAA8jM,WAAAn9E,GACdn2L,KAAAa,U3Zi/5DEyzQ,E2Z9+5DiBh4Q,UAAU+4Q,2BAAC,SAAA15Q,GAC9BqE,KAAKqzQ,KAAKxlP,EAAIlyB,EAAIkyB,EAAIlyB,EAAI25Q,IAC1Bt1Q,KAAKqzQ,KAAA35P,EAAS/d,EAAA+d,EAAA/d,EAAA45Q,IACdv1Q,KAAAa,U3Zg/5DEyzQ,E2Z7+5Dch4Q,UAAQk5Q,mBAAoB,SAAAz6Q,GAC5C,GAAIs4Q,GAAIrzQ,KAAKwvE,QAAIikM,aAAA14Q,EACP,QAATs4Q,IACGrzQ,KAACqzQ,KAASA,GACdrzQ,KAAAa,U3Z++5DEyzQ,E2Z5+5DGh4Q,UAAwBm5Q,WAAY,WACzCz1Q,KAAAw1Q,mBAAAx1Q,KAAA00Q,a3Z8+5DEJ,E2Z3+5D+Bh4Q,UAAQuE,OAAc,WACvD,GAAIsyQ,GAAwBnzQ,KAAKwvE,QAAQ4jM,UAAApzQ,KAAeqzQ,MACpDl9E,EAAOn2L,KACRwvE,QAAKwkM,gBAAQh0Q,KAAgBwvE,QAAK+jM,WAAQvzQ,KAAWqzQ,OAEpDqC,EAAS11Q,KAAGwvE,QAAIwkM,gBAAqBh0Q,KAAOwvE,QAAO+jM,WAAS,GAAKlB,IAAkBryQ,KACtFqzQ,KAAKpwB,EAAK,EAAC,EAAK,IACjBjjP,MAAK+zQ,SAAW,GAAIzB,IAAgBvvQ,KAAK4J,MAAiB,IAAVwmQ,EAAI,GAAYpwQ,KAAC4J,MAAmB,IAATwmQ,EAAKtlP,GAAU9qB,KAAE4J,MAAA,IAAAwmQ,EAAAZ,GAAAxvQ,KAAA4J,MAAA,IAAAwmQ,EAAArwP,GAAA,KAC5F9iB,KAAK21Q,SAAU,GAAKnD,IAAgBr8E,EAAK/8K,EAAC+8K,EAAAnwC,EAAAmwC,EAAAx9K,EAAA5V,KAAA4J,MAAA,IAAAwpL,EAAArzK,GAAA,KAE1C9iB,KAAKi0Q,QAAAj0Q,KAAAwvE,QAAmBykM,QAAS99E,GACjCn2L,KAAK41Q,iBAAiB,OAASz/E,EAAO/8K,EAAE,IAAM+8K,EAAGnwC,EAAQ,IAAImwC,EAAMx9K,EAAA,IAEnE3Y,KAAI61Q,eAAiB,OAASH,EAASt8P,EAAC,IAAAs8P,EAAA1vH,EAAA,IAAA0vH,EAAA/8P,EAAA,IACzB,IAAd3Y,KAAKmiB,QAASniB,KAAAqzQ,KAAAvwP,EAAA,GAEX9iB,KAACmiB,SAELniB,KAAK6wH,MAAM7wH,KAAOwvE,QAAAskM,aAAA9zQ,KAA0BqzQ,KAAMrzQ,KAAKu0Q,YAAUv0Q,KAAAmiB,SAIjEniB,KAAK40Q,OAAA,GAAanC,IAA2BzyQ,KAAEqzQ,KAAO,EAAKrzQ,KAAK20Q,aAAI1xB,EAAA,EAAAjjP,KAAAqzQ,KAAAxlP,EAAA7tB,KAAA20Q,aAAA9mP,EAAA,KAAA7tB,KAAAqzQ,KAAA35P,GAAA1Z,KAAA20Q,aAAAj7P,EAAA,EAAA1Z,KAAAqzQ,KAAAvwP,EAAA9iB,KAAA20Q,aAAA7xP,EAAA,GACpE9iB,KAAAy0Q,cAAA74L,MAAAz5D,OAAAniB,KAAAmiB,OAAA0uG,MAAA7wH,KAAA6wH,QAnIW,IAAAp0G,EAoIZ,O3Zm+5DG63P,G2Zxm6DHH,I3Zym6DOz5Q,OAAOM,GAAqB,c2Zxm6DvBo5Q,GAoIZ,wCAAA33P,MAAA,KAAAs2P,SAAAt2P,GAAA/hB,UAAD45Q,M3Z4+5DIwB,GAAoC91Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D28P,GAAoC/1Q,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC7E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4Z3l6DzGs8P,GAAgD,W5Zim6D7C,Q4Zjm6DHC,GAEChuQ,GAFmB,GAAA5E,GAAArD,IAFpBA,MAAAiI,OAGCjI,KAAKs9L,YAAK,GAAatiM,IAAY,aACnCgF,KAAAiI,KAAAs4I,cAAA5lI,UAAA,SAAA9Z,GAAA,MAAAwC,GAAAi6L,YAAA/xL,KAAA1K,EAAAgwH,S5Zqm6DEn2H,OAAOI,e4Zno6DSm7Q,EAAA35Q,UAAA,S5Zoo6DZqG,I4Zno6DN,SAAS+W,G5Zoo6DC,G4Zno6DT,MAAAA,E5Zmo6DS,C4Zjo6DV,GAAIyI,GAAEwwP,GAAexiH,GACpBz2I,GAAAw8P,WAAS,K5Zoo6DI/zP,E4Zno6DHwwP,GAAiBxiH,IAC3Bz2I,EAAMw8P,WAAG,O5Zoo6DI/zP,E4Zno6DHwwP,GAAiBQ,KAC3Bz5P,EAAMw8P,WAAG,SAGN/zP,EAASwwP,GAAiBx8E,MAC7Bn2L,KAAKiI,KAAKka,QAASA,IAEnBniB,KAAAiI,KAAAka,UAIAniB,KAAKiI,KAAKusQ,YAIVx0Q,KAAAiI,KAAAutQ,mBAAA97P,GAHA1Z,KAAAiI,KAAAguH,KAAAv8G,EAAA1Z,KAAAiI,KAAAka,U5Zoo6DK1f,YAAY,E4Zho6DlBC,cAAA,GA1BW,IAAA+Z,EAiCZ,O5Z6n6DGw5P,G4Zzq6DHH,I5Z0q6DOp7Q,O4Zzq6DPM,GAAU,YACV4V,SAAQ,eACRG,MAAQojB,MAAS,eACjB/1B,QAAS,SACTghJ,SAAU,eACVtuI,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAgB,OAChBkmM,eAAei0E,IACd50P,gBAAAzkB,GAAA,wBAAA0kB,SAEWq2P,GAiCZ,wCAAAt5P,MAAA,KAAA43P,SAAA53P,GAAA/hB,UAADu7Q,M5Z+o6DIE,GAA2Cn2Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dg9P,GAA2Cp2Q,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6Zpq6DzG28P,GAE4B,W7Zyq6DzB,Q6Z3q6DHC,GAICruQ,EAAAuS,EAAAtb,GAJkB,GAAAmE,GAAArD,IACXA,MAAAiI,OACCjI,KAAAwa,MAXTxa,KAAAd,QAAUA,EACVc,KAAApD,OAAA6P,IAAa,EAAGD,KAAA,EAAAxD,MAAA,IAAoBE,OAAA,IAAAykD,SAAA,QAAA4oN,SAAA,GAG5Bv2Q,KAAAw2Q,cAAexmB,GACfhwP,KAAAy2Q,gBAAiB,GAOxBz2Q,KAAK02Q,kBAAmB,GACxB12Q,KAAAiI,KAAAs4I,cAAA5lI,UAAA,iBAAAtX,GAAAmX,IAAAhP,iB7Zkr6DE8qQ,E6Z/q6DqBh6Q,UAAA+H,SAAA,WACvBrE,KAAA22Q,mB7Zir6DEL,E6Z9q6DqBh6Q,UAACgH,SAAA,WACxBtD,KAAA42Q,oB7Zgr6DEN,E6Z7q6D4Bh6Q,UAASu6Q,oBAAwB,SAAMvyO,GACrE,GAAIwyO,GAAC,aAAAxyO,IAAQA,EAAAyyO,UAAkBzyO,EAAQyyO,UAAazyO,EAAMtrB,M7Z8q6D/CylL,I6Z7q6Dc,EAAAgB,aAAAz/L,KAAoBd,QAAAkF,cAAe0yQ,IAC3DxyO,EAAKtrB,QAAAhZ,KAAmBg3Q,oBAAA5yQ,eACxBpE,KAAA42Q,oB7Zgr6DCN,E6Z5q6DqBh6Q,UAAKw5H,SAAO,WACV,UAAxB91H,KAAKpD,MAAA+wD,UACN3tD,KAAAi3Q,qB7Z8q6DEX,E6Z3q6DoBh6Q,UAAW46Q,UAAC,SAAAxiQ,EAAAsyB,GAClChnC,KAAKm3Q,kBAAmBziQ,EAExB1U,KAAKg3Q,oBAAStiQ,EAAAxV,Q7Z2q6DRc,K6Z1q6DLgnC,QACA2mB,SAAAqiM,GAAiB9oL,OACjBkwM,eAAc,EACdtD,aAAAnB,GAA8BxiH,IAC7BknH,yBAAA,GAGS,MAAVrwO,IACkB,MAAjBA,EAAK99B,SACLlJ,KAAApD,MAAAsM,OAAA89B,EAAA99B,QAEY,MAAZ89B,EAAK2mB,WACF3tD,KAAAgnC,OAAO2mB,SAAc3mB,EAAQ2mB,UACpB,MAAZ3mB,EAAKowO,iBACFp3Q,KAAAgnC,OAAOowO,eAAoBpwO,EAAAowO,gBAClB,MAAZpwO,EAAK8sO,eACF9zQ,KAAAgnC,OAAO8sO,aAAA9sO,EAA2B8sO,cACzB,MAAZ9sO,EAAKqwO,0BACNr3Q,KAAAgnC,OAAAqwO,wBAAArwO,EAAAqwO,0BAGAr3Q,KAAKgnC,OAAAqwO,0BACNr3Q,KAAA02Q,kBAAA,I7Z0q6DEJ,E6Zvq6Dch6Q,UAAAq6Q,gBAAA,WACf32Q,KAAKyW,OACLzW,KAAKyW,MAAA,EACLzW,KAAAi3Q,sB7Z0q6DCX,E6Ztq6DgBh6Q,UAAAs6Q,iBAAA,WAClB52Q,KAAKyW,MAAK,EACVzW,KAAAiI,KAAAunE,QAAAnwD,S7Zwq6DEi3P,E6Zrq6Dch6Q,UAAA26Q,kBAAmC,W7Zwq6D7C,I6Zvq6DN,GAAInoN,GAAA9uD,KAAUg3Q,oBAAoB5yQ,cAAAupD,EAAA,SAClC5wD,EAAgB,KACJ,OAAX+xD,GAAmC,SAAjBA,EAAA3xD,UAClBwwD,EAAI1tD,OAAa2tD,iBAAYkB,GAAUwoN,iBAAS,YAClC,WAAb3pN,GAAkB,OAAA5wD,IACfA,EAAa+xD,GACV,UAANnB,IAEDmB,IAAA/xD,UAED,IAAIw6Q,GAAa,I7Zsq6DX,I6Zrq6DO,UAAZ5pN,EAAoB,CACpB4pN,EAAcv3Q,KAAKw3Q,UAAIx3Q,KAAAg3Q,oBAAA5yQ,eAAA,GACT,OAAbrH,IAEGA,EAAY+xD,EAChB,IAAI2oN,GAAUz3Q,KAAGw3Q,UAAaz6Q,GAAM,EACpCiD,MAAKpD,MAAM6P,IAAI8qQ,EAAe9qQ,IAAKgrQ,EAAGhrQ,IACtCzM,KAAApD,MAAA4P,KAAA+qQ,EAAA/qQ,KAAAirQ,EAAAjrQ,SAEA+qQ,GAAcv3Q,KAAGw3Q,UAAax3Q,KAAIg3Q,oBAAA5yQ,eAAA,GAClCpE,KAAKpD,MAAM6P,IAAI8qQ,EAAe9qQ,IAC9BzM,KAAKpD,MAAM4P,KAAA+qQ,EAAmB/qQ,KAC9BxM,KAAApD,MAAA+wD,SAAA,OAGA3tD,MAAKgnC,OAAM2mB,UAAOqiM,GAA0BxjP,MAAQxM,KAAAgnC,OAAAowO,gBACpDp3Q,KAAKpD,MAAM6P,KAAI8qQ,EAAeruQ,OAAQlJ,KAAKgnC,OAAAowO,eAAgB,IAAAp3Q,KAAA02Q,kBAC3D12Q,KAAApD,MAAA4P,MAAAxM,KAAApD,MAAAoM,MAAAhJ,KAAAy2Q,iBAGKz2Q,KAAKgnC,OAAI2mB,UAAeqiM,GAAcvjP,KAAAzM,KAAgBgnC,OAAAowO,gBAC3Dp3Q,KAAKpD,MAAM6P,KAAIzM,KAAQpD,MAACsM,OAAOlJ,KAAAy2Q,gBAC/Bz2Q,KAAKpD,MAAM4P,MAAQxM,KAAGgnC,OAAKowO,eAAiB,IAAAG,EAAAvuQ,MAAAhJ,KAAA02Q,kBAC5C12Q,KAAApD,MAAA25Q,SAAAv2Q,KAAApD,MAAAsM,OAAA,GAGKlJ,KAAKgnC,OAAI2mB,UAAIqiM,GAA2B5gM,QAAApvD,KAAgBgnC,OAAAowO,gBAC7Dp3Q,KAAKpD,MAAM6P,KAAI8qQ,EAAgBruQ,OAAAlJ,KAAcy2Q,gBAC7Cz2Q,KAAKpD,MAAM4P,MAAQxM,KAAGgnC,OAAKowO,eAAiB,IAAAG,EAAAvuQ,MAAAhJ,KAAA02Q,kBAC5C12Q,KAAApD,MAAA25Q,SAAAv2Q,KAAApD,MAAAsM,OAAA,GAGKlJ,KAAKgnC,OAAO2mB,UAAKqiM,GAAA9oL,QACtBlnE,KAAKpD,MAAM6P,KAAO,IAClBzM,KAAApD,MAAA4P,KAAA,GAGKxM,KAAKgnC,OAAIowO,iBACdp3Q,KAAKpD,MAAM6P,KAAI8qQ,EAAgBruQ,OAASlJ,KAAKgnC,OAAAowO,eAAgB,IAAAp3Q,KAAA02Q,kBAC7D12Q,KAAApD,MAAA4P,MAAA+qQ,EAAAvuQ,MAAAhJ,KAAAy2Q,iBAGDz2Q,KAAAwa,IAAAhP,gB7Ziq6DE8qQ,E6Z9p6DqBh6Q,UAAAm5Q,WAAA,WACvBz1Q,KAAKiI,KAAAwtQ,aACLz1Q,KAAA42Q,oB7Zgq6DEN,E6Z7p6DKh6Q,UAAAk7Q,UAAA,SAAAt4Q,EAAAgM,G7Z8p6DD,O6Z5p6DLuB,IAAIvN,EAAS0J,wBAAwB6D,KAAKvB,EAAWjL,OAAE0lE,YAAmB,GAC1En5D,KAAKtN,EAAS0J,wBAAY4D,MAAAtB,EAAAjL,OAAAulE,YAAA,GAC1Bx8D,MAAM9J,EAASyO,YACdzE,OAAAhK,EAAAwO,cApJS,IAAA+O,GAAAC,EAAAC,CAsJZ,O7Z+p6DG25P,G6Zp06DHH,I7Zq06DOz7Q,O6Zp06DPM,GAAU,YACV4V,SAAM,sB7Zq06DKG,M6Zn06DV2mQ,iBAAiB,YACjBC,kBAAkB,aAClBC,mBAAmB,cACnBC,oBAAmB,eACnBC,kBAAmB,aACnBC,kBAAA,aACAC,uBAAA,+BAGDlnQ,SAAS5W,EAAQ,MAChBiX,QAAAjX,EAAA,SACWk8Q,GAsJZ,wCAAA35P,MAAA,KAAA43P,SAAA53P,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA3hB,GAAA,YAAAA,GAAA,aAAA2hB,GAAAjiB,UAAD47Q,M7Zqr6DI2B,GAA2Cj4Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D8+P,GAA2Cl4Q,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8Z516DzGy+P,GAA+E,W9Zi26D5E,Q8Zj26DHC,GAECnwQ,EAAAuS,GAFkB,GAAAnX,GAAArD,IAAsCA,MAAAiI,OACxDjI,KAAKwa,IAAKA,EACVxa,KAAAiI,KAAAs4I,cAAA5lI,UAAA,iBAAAtX,GAAAmX,IAAAhP,iBAJW,GAAAiR,GAAAC,CAMZ,O9Zo26DG07P,G8Zj36DHH,I9Zk36DOv9Q,O8Zj36DPM,GAAU,YACV4V,SAAA,qBACA6O,gBAAUzkB,GAA8C,wBAAA0kB,OACxD5O,SAAS5W,EAAQ,MAChBiX,QAAAjX,EAAA,SAEWg+Q,GAMZ,wCAAAz7P,MAAA,KAAA43P,SAAA53P,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,UAAD09Q,M9Zk36DIC,GAAyCr4Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dk/P,GAAyCt4Q,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+Z736DzG6+P,GAA8E,W/Zk46D3E,Q+Zl46DHC,GAECvwQ,EAAAuS,GAFkB,GAAAnX,GAAArD,IAAqCA,MAAAiI,OACvDjI,KAAKwa,IAAKA,EACVxa,KAAAiI,KAAAs4I,cAAA5lI,UAAA,iBAAAtX,GAAAmX,IAAAhP,iB/Zs46DEgtQ,E+Zn46DkBl8Q,UAAUm8Q,aAAgB,WAI9C,MAHAz4Q,MAAIiI,KAAKka,QAAWniB,KAAKiI,KAAKka,OAAS,GAAK,EACxB,IAAnBniB,KAAKiI,KAAKka,QAASniB,KAAAiI,KAAAorQ,KAAAvwP,EAAA,GACpB9iB,KAAOiI,KAAKka,SACZniB,KAAAiI,KAAAka,OAXW,IAAA1F,GAAAC,CAYZ,O/Zq46DG87P,G+Zx56DHH,I/Zy56DO39Q,O+Zx56DPM,GAAU,YACV4V,SAAA,mBACA6O,gBAAUzkB,GAA4C,wBAAA0kB,OACtD5O,SAAS5W,EAAQ,MAChBiX,QAAAjX,EAAA,SAEWo+Q,GAYZ,wCAAA77P,MAAA,KAAA43P,SAAA53P,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,UAAD89Q,M/Zm56DIE,GAA2C14Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Du/P,GAA2C34Q,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Igap66DzGk/P,GAE2C,Whay66DxC,Qga366DHC,GAMC35Q,EAAA+I,EAAA6wQ,EAAAC,GANkB,GAAA11Q,GAAOrD,IACjBA,MAAAd,UACAc,KAAAiI,OACAjI,KAAA84Q,WACR94Q,KAAK+4Q,QAAUA,EACf/4Q,KAAKg5Q,SAAK,EACVh5Q,KAAAiI,KAAAunE,QAAAgxE,aAAA7lI,UAAA,iBAAAtX,GAAAgc,Uha866DEw5P,Ega366DWv8Q,UAAAgI,YAAA,WACbtE,KAAAqf,Sha666DEw5P,Ega166Dev8Q,UAAEg3H,QAAA,WAClBtzH,KAAKg5Q,Uha266DIh5Q,Kga166DPi5Q,OAAAj5Q,KAAA+4Q,QACAG,gBAASl5Q,KAAA84Q,SAAAK,wBAAA9C,KACP3hQ,SACS,MAAZ1U,KAAKi5Q,SACLj5Q,KAAKi5Q,OAAO/B,UAAQl3Q,MAAA2tD,SAAAqiM,GAAA9oL,OAAA4sM,aAAAnB,GAAAxiH,MACpBnwJ,KAAAg5Q,SAAA,Kha866DAH,Egaz66Dcv8Q,UAAS+iB,MAAA,WACX,GAAbrf,KAAKg5Q,SACFh5Q,KAAC+4Q,QAAU53P,SACfnhB,KAAAg5Q,SAAA,EAjCW,IAAAv8P,GAAAC,EAAAC,EAAAC,CAkCZ,Oha266DGi8P,Gga/86DHH,Ihag96DOh+Q,OAAOM,GAAoB,YAAK4V,SAAU,gBAAiBG,MAAQ44K,UAAW,ega986DzEgvF,GAkCZ,wCAAAl8P,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA23P,SAAA33P,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA3hB,GAAA,0BAAAA,GAAA,2BAAA2hB,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA5hB,GAAA,kBAAAA,GAAA,mBAAA4hB,GAAAliB,UAADm+Q,Mhao76DIO,GAA2Cp5Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DigQ,GAA2Cr5Q,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iia586DzG4/P,GAAkC,Wjag96D/B,Qiah96DHC,GAGCx7Q,GAHmB,GAAAsF,GAAErD,IALtBA,MAAAjC,KAMCiC,KAAKukG,SAAA,GAAevpG,IAAuB,aAC3CgF,KAAKw5Q,aAAe,SAAAl1O,GAAM,MAAIjhC,GAAKghN,KAAG//K,IACtCtkC,KAAAy5Q,aAAA,iBAAAp2Q,GAAAgE,Qjao96DEkyQ,Eiaj96DmBj9Q,UAAAo9Q,UAAc,SAAap1O,GAChD,GAAIp7B,GAAQlJ,KAAKjC,GAAGqG,cAAcsJ,aAC9B1E,EAAQhJ,KAAKjC,GAAGqG,cAAcuJ,YAC9BzJ,EAAInB,KAAKC,IAAI,EAAGD,KAAK0D,IAAIzG,KAAK25Q,KAAKr1O,GAAQt7B,IAE3C/E,EAAIlB,KAAIC,IAAK,EAAAD,KAAA0D,IAASzG,KAAQ45Q,KAAIt1O,GAAKp7B,QAC7BrG,KAAb7C,KAAKs1Q,SAAkCzyQ,KAAd7C,KAAGu1Q,Ijai96DnBv1Q,Kiah96DDukG,SAAQh5F,MAAKsiB,EAAA3pB,EAAS8E,EAAQ0Q,EAAI,EAAAzV,EAAKiF,EAASosQ,IAAAt1Q,KAAAs1Q,IAAAC,IAAAv1Q,KAAAu1Q,UACtC1yQ,KAAb7C,KAAAs1Q,SAAuCzyQ,KAAhB7C,KAAQu1Q,Ijai96D3Bv1Q,KAAKukG,SAASh5F,MAAOmO,EAAGzV,EAAIiF,EAAQ4rQ,GAAI90Q,KAAKu1Q,Mia986DvDv1Q,KAAAukG,SAAAh5F,MAAAmO,EAAAxV,EAAA8E,EAAA8rQ,GAAA90Q,KAAAs1Q,Ojak96DEiE,Eia/86DqBj9Q,UAAA+nN,KAAA,SAAA//K,GACvBA,EAAKuxE,iBACL71G,KAAA05Q,UAAAp1O,Ijai96DEi1O,Eia986DoBj9Q,UAAA4E,MAAA,SAAAojC,GACtBtkC,KAAA05Q,UAASp1O,GACTrpC,SAASE,iBAAiB,YAAa6E,KAAKw5Q,cAC5Cv+Q,SAASE,iBAAiB,YAAW6E,KAAKw5Q,cAC1Cv+Q,SAASE,iBAAiB,UAAU6E,KAAMy5Q,cAC1Cx+Q,SAAAE,iBAAA,WAAA6E,KAAAy5Q,ejag96DEF,Eia786DOj9Q,UAAoB+K,KAAW,WACxCpM,SAASe,oBAAoB,YAAagE,KAAKw5Q,cAC/Cv+Q,SAASe,oBAAoB,YAAWgE,KAAKw5Q,cAC7Cv+Q,SAASe,oBAAoB,UAAUgE,KAAMy5Q,cAC7Cx+Q,SAAAe,oBAAA,WAAAgE,KAAAy5Q,eja+86DEF,Eia586DiBj9Q,UAAcq9Q,KAAG,SAAcr1O,Gja686D5C,Wia586DKzhC,KAARyhC,EAAQu1O,MAAcv1O,EAAAu1O,MAAqBv1O,EAAOw1O,QAAG,GAAOD,OAC/D75Q,KAAAjC,GAAAqG,cAAAwE,wBAAA4D,KAAAvM,OAAAulE,aja886DE+zM,Eia386DiBj9Q,UAAcs9Q,KAAG,SAAct1O,Gja486D5C,Wia386DKzhC,KAARyhC,EAAQy1O,MAAcz1O,EAAAy1O,MAAqBz1O,EAAMw1O,QAAS,GAACC,OAC9D/5Q,KAAAjC,GAAAqG,cAAAwE,wBAAA6D,IAAAxM,OAAA0lE,YAzDW,IAAAlpD,EA0DZ,Oja686DG88P,Giajh7DHH,Ijakh7DO1+Q,Oiajh7DPM,GAAoB,YACpB4V,SAAM,Wjakh7DKG,Miahh7DVipQ,cAAc,gBACdC,eAAA,iBAED77Q,QAAS,SAAC,MAAW,OACpBghJ,SAAA,cAEWi6H,GA0DZ,wCAAA58P,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,UAAD6+Q,Mja896DIW,GAAyCl6Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gkati7DhE+gQ,GAAA,Wla0i7DI,Qkahi7DHC,KAYAp6Q,KAAAukG,SAAA,GAAAvpG,IAAA,mBlauh7DGo/Q,Gkahi7Dc99Q,UAAW+9Q,YAAA,SAAAt/Q,Glaii7DrB,Okahi7DA8H,KAAL7C,KAAK80Q,GACL90Q,KAAAukG,SAAAh5F,KAAAxQ,OACA,CACA,GAAIu/Q,GAAOhvP,WAAYvwB,IACtBmN,MAAKoyQ,IAAcA,GAAK,GAAWA,GAAWt6Q,KAAE80Q,IAChD90Q,KAAAukG,SAAAh5F,MAAAmO,EAAA4gQ,EAAAxF,GAAA90Q,KAAA80Q,Olaqi7DAsF,Ekaxj7DHF,Ilayj7DOx/Q,Okaxj7DPM,GAAkB,YAClB4V,SAAQ,SACRG,MAAQwpQ,UAAS,oCACjBn8Q,QAAS,OAAC,MACTghJ,SAAA,eAiBFg7H,Mla+i7DII,GAAiCx6Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gma1i7DhEqhQ,GAAA,WAAiC,QAACC,MAAA,Mnayj7D9BA,Gmajl7DHF,Inakl7DO9/Q,Omajl7DPM,GAAS,Wnakl7DEqX,Smahl7DV8qI,GAAA,cnaml7DUrnI,Wmahl7DVi9P,Inaml7DU/hF,iBmahl7DVglF,GACAK,Inaml7DUjkQ,cmahl7DV4jQ,GACAK,GACAuC,GACAuB,GACAb,GACAf,GACAJ,Inaml7DUvmR,Smahl7DVokR,OAE+B0E,Onayl7DjC,SyZ1n7DC9H,GACAA,EAAA,YACAA,EAAA,cAHWA,EAAA,aAMZA,KASCA,OATD,IAAA+H,KzZ2n7DA,SyZ1n7DCA,GACAA,EAAA,kBACAA,EAAA,oBACAA,EAAA,cACAA,EAAA,cACAA,EAAA,oBACAA,EAAA,oBAPWA,EAAA,uBAWZA,KAKCA,OALD,IAAAC,KzZ0n7DA,SyZzn7DCA,GACAA,EAAA,oBACAA,EAAA,sBACAA,EAAA,aAAa,eAJFA,EAAA,aAOZA,KAAYA,OAAZ,IAAAC,KzZ0n7DA,SyZzn7DCA,GACAA,EAAA,YACAA,EAAA,cAHWA,EAAA,ezZ8n7DTA,KAAqCA,O0Pvp7DjC,I0KCPC,I1KDO9zG,GAAA,SAAAv/H,GAAA,MAAAA,IAAA,gBAAAA,I1P6r7DHszO,GAA+C/6Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,IAIhE,Soans7DC0hQ,GACAA,EAAA,kBACAA,EAAA,kBACAA,EAAA,kBAJIA,EAAQ,uBAcbA,Ypa4r7DA,Iqa5s7D+CE,IAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GCkB/CC,GFFAC,GAAA,WAwHA,QAACC,MAAA,MArHAA,GAAAp/Q,UAAAq/Q,WAAA,SAAiBz3Q,GAAmB,MAA6C,sBAAtCxJ,OAAO4B,UAAUukB,SAASrkB,KAAO0H,IAC5Ew3Q,EAAAp/Q,UAAAm/F,QAAA,SAAav3F,GAAe,MAA6C,mBAAtCxJ,OAAO4B,UAAUukB,SAASrkB,KAAM0H,IACnEw3Q,EAAAp/Q,UAAAs/Q,OAAQ,SAAR13Q,GAAe,MAAyD,kBAAxCxJ,OAAO4B,UAAOukB,SAAUrkB,KAAS0H,IACjEw3Q,EAAAp/Q,UAAAwjK,SAAA,SAAc57J,GAA6C,MAA8C,oBAAtCxJ,OAAK4B,UAAWukB,SAAUrkB,KAAA0H,IAE7Fw3Q,EAAAp/Q,UAAAu/Q,QAAA,SAAmC33Q,GAAE,OAAgBlE,KAAA8/J,SAAA57J,KAAAlE,KAAAy7F,QAAAv3F,Ipa4r7DlDw3Q,Eoa1r7DuBp/Q,UAASC,IAAA,SAAgBu/Q,EAAEC,Gpa2r7D9C,Goa1r7DL/7Q,KAAA27Q,WAAMG,IAAA97Q,KAAA27Q,WAAAI,GACN,yDpa4r7DK,Ioazr7DL/7Q,KAAA67Q,QAAOC,IAAA97Q,KAAA67Q,QAAAE,Gpa0r7DE,Ooaxr7DRtrQ,KAAMzQ,KAAIg8Q,cAAeF,EAAMC,GAC9B9zQ,SAAApF,KAAAi5Q,EAAAC,EAAAD,EAIH,IAAAhqF,Epayr7DM,Koaxr7DL,GAAI74K,KAAK6iQ,Gpayr7DA,Ioaxr7DR97Q,KAAA27Q,WAASG,EAAA7iQ,Ipawr7DD,Coarr7DT,GAAI64I,OAASjvJ,OACEA,KAAdk5Q,EAAA9iQ,KACA64I,EAAAiqH,EAAA9iQ,IACY64K,IAAYA,MAEzBA,EAAA74K,GAAAjZ,KAAAzD,IAAAu/Q,EAAA7iQ,GAAA64I,Gpa4r7DK,Ioa1r7DL,GAAI74I,KAAK8iQ,GACR/7Q,KAAA27Q,WAASI,EAAA9iQ,SAAApW,KAAAivL,EAAA74K,KAEG64K,IAAYA,MAEzBA,EAAA74K,GAAAjZ,KAAAzD,QAAAsG,GAAAk5Q,EAAA9iQ,IAED,OAAA64K,Ipa8r7DE4pF,Eoa3r7DuBp/Q,UAAUi1J,QAAU,SAAGuqH,EAAAC,GAChD,MAAA/7Q,MAAAi8Q,cAAAj8Q,KAAAzD,IAAAu/Q,EAAAC,Kpa6r7DEL,Eoa1r7D+Cp/Q,UAAA2/Q,cAAA,SAAAzoP,Gpa2r7D3C,GAAI0oP,OAAWr5Q,Goa1r7DrB2hQ,EAAexkQ,Ipamu7DT,KAAK,GAAIm8Q,Koanu7DA3oP,IACJ,SAAW2oP,GACb,GAAAC,GAAA5oP,EAAA2oP,GACF1rQ,EAAM2rQ,EAAgB3rQ,KAAAxI,EAAAm0Q,EAAAn0Q,KAC5BgR,EAAQkjQ,Cpa2r7DC,Qoa1r7DR1rQ,Gpa2r7DY,Ioa1r7DXqqQ,IAAK9B,Qpa+r7DM,Ioa3r7DX8B,IAAKuB,QAAUH,IACfA,MACAA,EAAMjjQ,GAAAhR,CACP,Mpa6r7DY,Koa5r7DX6yQ,IAAMwB,Qpa8r7DK,Ioa5r7DXxB,IAAMyB,UACP,Kpa6r7DY,Soa5r7DIL,IACTA,KACN,IAAIM,GAAWhY,EAAIyX,cAAWG,Epa8r7Df,Qoa7r7DKv5Q,IAAnB25Q,EAAyB,CACzB,GAAIv1P,GAAKvsB,OAASusB,KAAGu1P,EACpBv1P,GAAI5oB,OAAO,GACW,gBAAjBm+Q,KACS,MAAZv1P,EAAA,GACAi1P,EAAAjjQ,GAAAgO,EAAA1qB,IAAA,SAAAkd,GAAA,MAAA+iQ,GAAA/iQ,KAEAyiQ,EAAAjjQ,GAAAujQ,MAMNL,EAED,OAAAD,Ipaqs7DER,Eoals7DqBp/Q,UAAA0/Q,cAAA,SAAAnqH,EAAAC,Gpams7DjB,Moals7DLD,KAAOC,EACPgpH,GAAAyB,UAEAv8Q,KAAA47Q,OAAO/pH,IAAS7xJ,KAAU47Q,OAAA9pH,IAAAD,EAAAtoI,YAAAuoI,EAAAvoI,UAC1BuxP,GAAAyB,cAEO15Q,KAAPgvJ,EACAipH,GAAAwB,YAEOz5Q,KAAPivJ,EACAgpH,GAAA9B,QAED8B,GAAAuB,Spaos7DEX,Eoalr7DFp/Q,UAAAyqK,UAAA,SAAA/tJ,EAAAwd,GAbA,GAAMnzB,GAAQrD,KACV8/J,EAAU,SAAWr4H,GAAC,MAASA,IAAO,gBAAAA,Gpais7DpC,Ooajs7DsCq4H,GAAO9mJ,IAAO8mJ,EAAAtpI,Ipams7DpD97B,Ooajs7DLusB,KAAMuP,GAAWn5B,QAAS,SAAM4b,GAChC,GAAMguJ,GAAczwI,EAAOvd,GACvBstJ,EAAcvtJ,EAAAC,EACjB5c,OAAMo/F,QAAQ8qE,IAAYlqK,MAAOo/F,QAAWwrE,Gpaks7DhCjuJ,Eoajs7DJC,GAASstJ,EAAY/6I,OAAIy7I,GACjCnH,EAAcyG,IAAezG,EAAOmH,Gpaks7DxBjuJ,EAAOC,GAAO5V,EAAM0jK,UAAUrsK,OAAOusC,OAAOvsC,OAAOoe,OAAO,MAAOytJ,GAAcU,Goa/r7D1FjuJ,EAAAC,GAAAguJ,IAEHjuJ,GAXWwd,Gpa8s7DTklP,Eoa3z7DHX,IACYrgR,OAAAM,GAwHZ,eAAD0gR,Mpa0s7DIe,GAAyCz8Q,MAAQA,KAAKwnF,UAAa9sF,OAAOusC,QAAU,SAASxY,GAC7F,IAAK,GAAIZ,GAAGvvB,EAAI,EAAG0Z,EAAInO,UAAUxL,OAAQC,EAAI0Z,EAAG1Z,IAAK,CACjDuvB,EAAIhkB,UAAUvL,EACd,KAAK,GAAI/C,KAAKsyB,GAAOnzB,OAAO4B,UAAUd,eAAegB,KAAKqxB,EAAGtyB,KACzDkzB,EAAElzB,GAAKsyB,EAAEtyB,IAEjB,MAAOkzB,IAEPiuP,GAA2C18Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DujQ,GAA2C38Q,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iuatz7DzGkjQ,GACqB,Wva0z7DlB,Qua1z7DMC,GAAYz9Q,GAlBbY,KAAAZ,KAAOA,EAOPY,KAAAk7C,WACAl7C,KAAA88Q,UAAA,KAEA98Q,KAAA+8Q,gBAAclsH,IACd7wJ,KAAAg9Q,QAAS,GAAI/6C,IAAe,gBAA8B,MAQ7DjiO,KAAAw5M,OAAA,GAAAyoB,IAAA,sBvai07DFvnO,OAAOI,euax27DV+hR,EAAAvgR,UAAA,Ovay27DO0F,Iuax27DN,Wvay27DU,Muax27DThC,MAAOg9Q,QAAKjiR,OAAciF,KAAAg9Q,QAAQjiR,MAAAkiR,SAAcj9Q,KAAAg9Q,QAAAjiR,MAAAkiR,QAAAC,cvay27D5Bl9Q,KAAKg9Q,QAAQjiR,MAAMkiR,QAAQC,cuat27DhD,Mva027DMz6Q,YAAY,Eua127DlBC,cAAA,Iva827DEhI,OAAOI,eua727DV+hR,EAAAvgR,UAAA,Qva827DO0F,Iua727DN,Wva827DU,Mua727DThC,MAAOg9Q,QAAKjiR,OAAciF,KAAAg9Q,QAAQjiR,MAASkiR,SAAAj9Q,KAAAg9Q,QAAAjiR,MAAAkiR,QAAAE,Sva827DvBn9Q,KAAKg9Q,QAAQjiR,MAAMkiR,QAAQE,Sua327DhD,Mva+27DM16Q,YAAY,Eua/27DlBC,cAAA,Ivam37DEhI,OAAOI,eual37DV+hR,EAA2DvgR,UAAU,sBvam37D9D0F,IAAK,WAAc,QAAShC,KAAKo9Q,QAASp9Q,KAAKo9Q,KAAKj8M,MAAMk8M,OAAO5mQ,KAAKrV,KACtEqB,YAAY,Euap37DkFC,cAAA,Ivau37DlGhI,OAAOI,euap37DV+hR,EAAAvgR,UAAA,Uvaq37DO0F,Iuap37DN,WAGA,MAFC,2BAAoBhC,MAAAk7C,UAAwB,IAAAl7C,KAAAk7C,QAAAoiO,+BAClCt9Q,MAACk7C,QAAQoiO,wBACpBt9Q,KAAAk7C,Svas37DMv4C,IAAK,SAAUwW,GAAKnZ,KAAKk7C,QAAUuhO,MAA0Cz8Q,KAAKk7C,QAAS/hC,IAC3F1W,YAAY,Eua537DsEC,cAAA,Ivai47DtFhI,OAAOI,euax37DV+hR,EAAwDvgR,UAAA,avay37DjD0F,Iua137DP,WAA4B,MAAShC,MAAAqkE,Yva237D9B1hE,IAAK,SAAUwW,GAAKnZ,KAAKqkE,WAAalrD,GACtC1W,YAAY,Eua537DmCC,cAAA,Ivai47DnDhI,OAAOI,euav37DV+hR,EAA8EvgR,UAAgB,Wvaw37DvF0F,IAAK,WAAc,MAAOhC,MAAKg9Q,QAAQlmJ,gBACvCr0H,YAAY,Euaz37D4EC,cAAA,Iva437D5FhI,OAAOI,eua337DV+hR,EAA2EvgR,UAAiB,Uva437DrF0F,IAAK,WAAc,MAAOhC,MAAKw5M,OAAO1iF,gBACtCr0H,YAAY,Eua737DyEC,cAAA,Ivag47DzFhI,OAAOI,eua937DV+hR,EAA6DvgR,UAAI,ava+37D1D0F,IAAK,WAAc,MAAOhC,MAAKizC,IAAMjzC,KAAKizC,IAAIsB,iBAAe1xC,IAC7DJ,YAAY,Euah47DyEC,cAAA,Ivam47DzFm6Q,Eua117DFvgR,UAAAwc,OAAA,WAlCA,GAAIzV,GAAQrD,IACZA,MAAK+U,UACJ/U,KAAA48B,WAAO58B,KAAAgnC,QAAAu2O,QAAAzjH,OAAAhhJ,Qvag47DF9Y,Kua737DLZ,KAAImJ,kBAAA,Wva837DK,Uua537DFlF,GAAS2jC,OAAOw2O,cACtB,IAAA1jH,GAAYyjH,QAAMzjH,OAAQhhJ,OAAAzV,EAAAu5B,UAAAv5B,EAAA2jC,Ovay47Dd,Quax47DZ3jC,EAAK25Q,QAAQphM,KAAAk+E,GACbz2J,EAAK4vC,IAAIvqB,IAAI,qBAAqB,SAACzrB,GAAI,MAAAoG,GAAKm2M,OAAO59H,KAAM3+E,KACzDoG,EAAK4vC,IAAIvqB,IAAI,oBAAoB,SAAEzrB,GAAC,MAAIoG,GAAIm2M,OAAO59H,KAAK3+E,KACxDoG,EAAK4vC,IAAIvqB,IAAI,8BAA6BzrB,GAAA,MAAOoG,GAAKm2M,OAAA59H,KAAA3+E,KACtDoG,EAAK4vC,IAAIvqB,IAAI,qCAAgCzrB,GAACoG,EAAI05Q,gBAAY9/Q,EAAAgL,KAAOojB,SAAEhoB,EAAAm2M,OAAA59H,KAAA3+E,KACvEoG,EAAK4vC,IAAIvqB,IAAI,+BAAuB,SAAKzrB,GAAA,MAAKoG,GAAOm2M,OAAZ59H,KAAqB3+E,KAC9DoG,EAAK4vC,IAAIvqB,IAAI,+BAA6BzrB,GAAA,MAAKoG,GAAAm2M,OAAK59H,KAAM3+E,KAC1DoG,EAAK4vC,IAAIvqB,IAAI,4BAA2B,SAACzrB,GAAI,MAAAoG,GAAKm2M,OAAO59H,KAAO3+E,KAChEoG,EAAK4vC,IAAIvqB,IAAI,0BAA2B,SAAAzrB,GAAK,MAAAoG,GAAKm2M,OAAO59H,KAAK3+E,KAC9DoG,EAAK4vC,IAAIvqB,IAAI,0BAAyB,SAACzrB,GAAI,MAAAoG,GAAKm2M,OAAO59H,KAAO3+E,KAC9DoG,EAAA4vC,IAAQvqB,IAAK,wBAAW,SAAAzrB,GAAA,MAAAoG,GAAAm2M,OAAA59H,KAAA3+E,KACvBoG,EAAUy5Q,Wva837DK,Iua737Dd,MACAz5Q,EAAMo6Q,SACP,MACA,ava837De,Qua537Ddp6Q,EAAMq6Q,avai47DA,Mua937DRzgR,GACAsrC,QAAQ5pB,MAAM,8BAA8B1hB,GAC5CsrC,QAAQmG,MAAM,+BAAgCrrC,EAAE2jC,QAChDuB,QAAAmG,MAAA,iCAAArrC,EAAA+5Q,Uvak47DAP,Eual37DFvgR,UAAAyY,QAAA,WAXA,GAAI1R,GAACrD,IACLA,MAAI+8Q,gBAAkBlsH,IACX,MAAV7wJ,KAAKg9Q,QAAKjiR,OAAkBwiR,QAAAzjH,OAAA/kJ,Sva+37DnB/U,Kua937DRZ,KAAImJ,kBAAA,Wva+37DQ,Iua737DXg1Q,QAAAzjH,OAAA/kJ,QAAA1R,EAAA25Q,QAAAjiR,Ovag47DW,Mua/37DXkC,GACAsrC,QAAA5pB,MAAA,+BAAA1hB,MAIH+C,KAAAg9Q,QAAAphM,KAAA,Ovai47DEihM,Eua727DFvgR,UAAAqhR,KAAA,SAAAlvP,GAjBA,GAAIprB,GAAKrD,IACRA,MAAA88Q,YAAOruP,IAERzuB,KAAK88Q,UAAWruP,EACfzuB,KAAKizC,Kvag47DIjzC,Kua/37DRZ,KAAAmJ,kBAAsB,Wvag47DV,Oua/37DXlF,EAAUy5Q,Wvag47DK,Iua/37Dd,MACAz5Q,EAAMo6Q,SACP,Mvag47De,Kua/37Dd,QACAp6Q,EAAMq6Q,iBvau47DRb,Eua137DFvgR,UAAAohR,UAAA,WAJA,GAAIr6Q,GAAMrD,IACTA,MAAAizC,MAEDjzC,KAAKizC,IAAI0qO,KAAA,GACT39Q,KAAAizC,IAAA2qO,QAAA,iCAAAr3N,GAAA,MAAAljD,GAAA4vC,IAAA01H,Yvai47DEk0G,Eua137DFvgR,UAAAmhR,QAAA,WAJA,GAAIp6Q,GAAMrD,IACTA,MAAAizC,MAAO/qC,MAAAlI,KAAA+8Q,mBAER/8Q,KAAKizC,IAAI0qO,KAAA39Q,KAAQ+8Q,iBACjB/8Q,KAAAizC,IAAA2qO,QAAA,iCAAAr3N,GAAA,MAAAljD,GAAA4vC,IAAAu1H,UA9HW,IAAA/rJ,EAgIZ,Ovag47DGogQ,Guajg8DHH,Ivakg8DOhiR,OAAOM,GAAqB,cuajg8DvB2hR,GAgIZ,wCAAAlgQ,MAAA,KAAAzhB,GAAA,QAAAA,GAAA,SAAAyhB,GAAA/hB,UAADmiR,Mvay47DIgB,GAAwC79Q,MAAQA,KAAKwnF,UAAa9sF,OAAOusC,QAAU,SAASxY,GAC5F,IAAK,GAAIZ,GAAGvvB,EAAI,EAAG0Z,EAAInO,UAAUxL,OAAQC,EAAI0Z,EAAG1Z,IAAK,CACjDuvB,EAAIhkB,UAAUvL,EACd,KAAK,GAAI/C,KAAKsyB,GAAOnzB,OAAO4B,UAAUd,eAAegB,KAAKqxB,EAAGtyB,KACzDkzB,EAAElzB,GAAKsyB,EAAEtyB,IAEjB,MAAOkzB,IAEPqvP,GAA0C99Q,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D2kQ,GAA0C/9Q,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iwa//7DzGskQ,GAI+B,Wxaug8D5B,Qwa1g8DMC,GAAiBrlP,EAAAslP,EAAApsF,EAAAqsF,EAAAlrO,GACjBjzC,KAAA44B,KAAKA,EACL54B,KAAAk+Q,QACAl+Q,KAAA8xL,KAAEA,EACF9xL,KAAAm+Q,GAAGA,EAdZn+Q,KAAAizC,MAeKjzC,KAAAo+Q,8BAAA,Kxa6g8DF1jR,OAAOI,ewa3g8DVmjR,EAA+C3hR,UAAkB,yBxa4g8D1D0F,IAAK,WAAc,MAAOhC,MAAK44B,KAAKylP,iBACpC57Q,YAAY,Ewa7g8D8CC,cAAA,Ixagh8D9DhI,OAAOI,ewa9g8DVmjR,EAA8C3hR,UAAS,Wxa+g8DhD0F,IAAK,WAAc,MAAOhC,MAAKs+Q,WAAat+Q,KAAKu+Q,gBAAkBv+Q,KAAKw+Q,YAAc3/P,KAAKE,UAAU/e,KAAKy+Q,WAC1Gh8Q,YAAY,Ewahh8DyGC,cAAA,Ixamh8DzHhI,OAAOI,ewalh8DVmjR,EAAwF3hR,UAAe,Kxamh8DhG0F,IAAK,WAAc,MAAOhC,MAAK0+Q,QAAQ5nJ,gBACvCr0H,YAAY,Ewaph8DsFC,cAAA,Ixauh8DtGhI,OAAOI,ewath8DVmjR,EAAiF3hR,UAAU,gBxauh8DpF0F,IAAK,WAAc,MAAOhC,MAAKk+Q,MAAMS,SACrCl8Q,YAAY,Ewaxh8DwEC,cAAA,Ixa2h8DxFhI,OAAOI,ewa1h8DVmjR,EAAqF3hR,UAAG,exa2h8DjF0F,IAAK,WAAc,MAAOhC,MAAKk+Q,MAAMU,QACrCn8Q,YAAY,Ewa5h8DqEC,cAAA,Ixa+h8DrFhI,OAAOI,ewa9h8DVmjR,EAA4E3hR,UAAW,Yxa+h8DhF0F,IAAK,WAAc,MAAOu7Q,SAAQ/rG,QAAQqtG,UAC1Cp8Q,YAAY,Ewahi8DoEC,cAAA,Ixami8DpFhI,OAAOI,ewali8DVmjR,EAA2F3hR,UAAA,Wxami8DpF0F,IAAK,WAAc,MAAOhC,MAAK8+Q,SAASC,iBACxCt8Q,YAAY,Ewapi8D0FC,cAAA,Ixaui8D1GhI,OAAOI,ewati8DVmjR,EAAuC3hR,UAAS,Wxaui8DzC0F,IAAK,WAAc,MAAOu7Q,SAAQ/rG,QAAQqtG,SAASnuP,SACnDjuB,YAAY,Ewaxi8DuCC,cAAA,IAM1Du7Q,EAAA3hR,UAAA0iR,UAAA,SAAAvwP,GAAAzuB,KAAAk+Q,MAAAP,KAAAlvP,Ixasi8DGwvP,Ewath8DF3hR,UAAA25H,KAAA,WAfA,GAAI5yH,GAAQrD,IACZA,MAAK0+Q,QAAM,GAAMz8C,IAAgB,gBAAQjiO,KAACghI,SAC1ChhI,KAAKk+Q,MAAMl3O,OAAAhnC,KAAcghI,QAAKi+I,SAC7Bj/Q,KAAKk/Q,iBAAel/Q,KAAWk/Q,eAAGn4M,QAC/B/mE,KAACk/Q,eAAiBtoJ,cxaui8DhB52H,Kwati8DJk/Q,eAAUl/Q,KAACm/Q,aACXxkQ,UAAK,SAAepf,GACpB8H,EAAK+7Q,gBAAgB7jR,GAAIA,EAAK0hR,SAAQ1hR,EAAK0hR,QAAQE,SAAC5hR,EAAA0hR,QAAkBE,SAAQ,KAC9E95Q,EAAIg8Q,iBAAoB9jR,GAAEA,EAAA0hR,SAAA1hR,EAAA0hR,QAAAC,cAAA3hR,EAAA0hR,QAAAC,cAAA,KACzB75Q,EAAK+7Q,kBACL/7Q,EAAIi8Q,cAAej8Q,EAAA+7Q,gBAAA5tG,QAAA+tG,UAClBl8Q,EAAKm8Q,UACLn8Q,EAAA+7Q,gBAAAK,YAAAtxN,UAAAzlC,IAAA,Yxa2i8DFu1P,Ewari8DS3hR,UAAmByY,QAAK,WAClC/U,KAAKk/Q,iBAAel/Q,KAAWk/Q,eAAGn4M,QAC/B/mE,KAACk/Q,eAAiBtoJ,cACtB52H,KAAKk/Q,eAAgB,KACrBl/Q,KAAKk+Q,MAAAnpQ,UACL/U,KAAKsqF,cAAYznF,GACjB7C,KAAK0/Q,cAAW78Q,GAChB7C,KAAK2/Q,gBAAY98Q,GACjB7C,KAAKse,cAAUzb,GACf7C,KAAK4/Q,YAAS/8Q,GACd7C,KAAKs+Q,cAAAz7Q,GACL7C,KAAKu+Q,mBAAe17Q,GACpB7C,KAAK0+Q,QAAS,KACd1+Q,KAAKw+Q,UAAY,KACjBx+Q,KAAK6/Q,UAAA,KACL7/Q,KAAKo/Q,gBAAgB,KACrBp/Q,KAAKq/Q,iBAAA,KACLr/Q,KAAAo+Q,8BAAA,Mxaui8DEH,Ewapi8DmB3hR,UAASwjR,kBAAA,SAAAthD,GAC9Bx+N,KAAKse,UAAUkgN,EAAO5jN,QACtB5a,KAAK4/Q,QAASphD,EAAG3rN,GACjB7S,KAAKsqF,UAAYk0I,EAAKuhD,WAEtB//Q,KAAK0/Q,UAAYlhD,EAAKwhD,WACtBhgR,KAAKs+Q,UAAA9/C,EAAiBzrN,KAEtB/S,KAAMu+Q,eAA2C//C,EAAMzrN,IACvD,IAAIu0N,GAAYzoN,KAAGC,MAAK0/M,EAAA8I,UAExBtnO,MAAK2/Q,YAAcnhD,EAACyhD,gBAAAzhD,EAAAyhD,gBAAAF,WAAA,KAEpB//Q,KAAM6/Q,YACK,SACLv4C,KAEAtnO,KAAA6/Q,UAA6CpvQ,KAAS62N,EAAC72N,KAC/C,YACC62N,KAETtnO,KAAA6/Q,UAA2CnvP,QAAQ42M,EAAA52M,QAC7C,UACN42M,KAEAtnO,KAAA6/Q,UAA8C5hE,MAAAqpB,EAAWrpB,MAChD,aACCqpB,KAEVtnO,KAAA6/Q,UAA4CZ,SAAS33C,EAAA23C,SAC9C,WACP33C,KAEAtnO,KAAK6/Q,UAAQK,OAAU54C,EAAQ44C,OAErC,IAAMjiE,GAAAj+M,KAAW6/Q,UAAG5hE,MAAAj+M,KAAA6/Q,UAAA5hE,MAAAj+M,KAASghI,QAACi9E,MAC1BkiE,EAAItC,MAA4D79Q,KAAY8+Q,SAAOsB,OAAAniE,IAEjFl+D,EAAA89H,MAA4CsC,EAAUpgI,MACxDsgI,EAAWrgR,KAAE6/Q,UAAAZ,UAAAj/Q,KAAA6/Q,UAAAZ,SAAA7B,KAAAp9Q,KAAA6/Q,UAAAZ,SAAA7B,KAAA,IAChBiD,IAECA,EAAStgI,OAERA,EADA//I,KAAIsgR,UAAUH,EAAApgI,OAAA//I,KAAAsgR,UAAAD,EAAKtgI,OACnBwgI,IAAA1C,MAAAsC,EAAApgI,KAAAwgI,IAAAF,EAAAtgI,KAAAwgI,MAEIvgR,KAAKwgR,WAAML,EAAApgI,OAAA//I,KAAAwgR,WAAKH,EAAYtgI,OAChC0gI,KAAA5C,MAAAsC,EAAApgI,KAAA0gI,KAAAJ,EAAAtgI,KAAA0gI,OACqC5C,MAAAwC,EAAAtgI,Mxa8h8DlC,Iwa1h8DLq9H,GAAEiD,EAEGxC,MAAgE92G,GAAAo5G,EAAAE,IAAAtgI,SAAA89H,MAAAsC,GACrElB,EAAEj/Q,KAAA6/Q,UAAAZ,SAGGpB,MAA+C92G,GAAA82G,MAAA79Q,KAAAghI,QAAAi+I,UAAAj/Q,KAAA6/Q,UAAAZ,WAAA7B,SAAAS,MAAA79Q,KAAAghI,QAAAi+I,UAAA7B,SACpDqB,GACA/tP,QAAM1wB,KAAK6/Q,UAAUnvP,QAAY1wB,KAAA6/Q,UAAgBnvP,QAAM1wB,KAAQghI,QAAItwG,QACnEjgB,KAAKzQ,KAAA6/Q,UAAApvQ,KAAAzQ,KAAA6/Q,UAAApvQ,KAAAzQ,KAAAghI,QAAAvwH,KACLwtM,QACAghE,SAAQA,EACRiB,OAAAlgR,KAAA6/Q,UAAAK,OAAAlgR,KAAA6/Q,UAAAK,OAAAlgR,KAAAghI,QAAAk/I,OAEDlgR,MAAKw+Q,UAAW3/P,KAAAE,UAAS0/P,GACzBz+Q,KAAKy+Q,SAAWA,EAChBz+Q,KAAA0gR,exayh8DEzC,Ewath8De3hR,UAAAusK,MAAA,WAChB7oK,KAAA2gR,UAED3gR,KAAKy+Q,SAAW5/P,KAAGC,MAAA9e,KAAAw+Q,WACnBx+Q,KAAA0gR,gBxawh8DEzC,Ewarh8DkB3hR,UAAKokR,YAAkB,WAC3C1gR,KAAIk+Q,MAAKl3O,OAAAhnC,KAAgBy+Q,SAAEQ,SAC1Bj/Q,KAAKq/Q,mBACLr/Q,KAAKq/Q,iBAAiBuB,QAAA5gR,KAAU6gR,MAChC7gR,KAAAq/Q,iBAAAyB,UAAA9gR,KAAA+gR,SAEA/gR,KAAKo/Q,kBACLp/Q,KAAKo/Q,gBAAgBK,YAAYtxN,UAAKhtC,OAAA,QACtCnhB,KAAKo/Q,gBAAgB5tG,QAAQwvG,IAAAhhR,KAAQihR,+BACrCjhR,KAAKo/Q,gBAAgB5tG,QAAQ0vG,QAAAlhR,KAAWmhR,kBACxCnhR,KAAKo/Q,gBAAgB5tG,QAAQ4vG,WAAAphR,KAAaqhR,mBAC1CrhR,KAAKo/Q,gBAAgB5tG,QAAQ8vG,aAAYthR,KAAKuhR,qBAC9CvhR,KAAKo/Q,gBAAgB5tG,QAAQgwG,YAAYxhR,KAACyhR,qBAC1CzhR,KAAKo/Q,gBAAgB5tG,QAAQkwG,QAAA1hR,KAAUs9Q,yBACvCt9Q,KAAKo/Q,gBAAgB5tG,QAAAmwG,UAAe3hR,KAAA2hR,WACpC3hR,KAAAo/Q,gBAAAwC,UAAA5hR,KAAA6hR,YAED7hR,KAAK8hR,cACL9hR,KAAK+hR,sCACL/hR,KAAAk+Q,MAAAplQ,Uxauh8DEmlQ,Ewaph8Dc3hR,UAAoC0lR,MAAK,Wxaqh8DnD,Mwaph8DLhiR,MAAAizC,IAAW0vL,aAAK3iO,KAAAse,UAAA,GAAAte,KAAA4/Q,SAChBvlR,YAAW,IACX0Y,KAAA/S,KAAWs+Q,UACVh3C,UAAAtnO,KAAAiiR,sBAKKhE,EAAA3hR,UAAA4lR,SAAA,WAAR,MAAAliR,MAAAizC,IAAAgwL,cAAAjjO,KAAAse,UAAA,GAAAte,KAAA4/Q,Uxamh8DG3B,Ewalh8DiB3hR,UAAS2lR,iBAAA,WAE5B,GAAIlnR,GAAKiF,KAAAy+Q,QACK,IAAbz+Q,KAAKmiR,wBACLpnR,EAAMmlR,OAAOkC,2BAAkB,EAC/BrnR,EAAAmlR,OAAAmC,WAAA,EAID,IAAMC,GAAAvnR,EAAmBkkR,SAMnBsD,EAAqB1E,MAA0C79Q,KAACghI,QAAAi+I,UAAA7B,KAAAS,MAAA79Q,KAAA8+Q,SAAAsB,OAAApgR,KAAAwiR,aAGhEvD,EAA2Cj/Q,KAAA8xL,KAAAvgC,QAAA+wH,EAAAC,GAChDt6Q,GACAyoB,QAAM1wB,KAAKghI,QAAQtwG,QACnBjgB,KAAKzQ,KAAMghI,QAACvwH,KACZwtM,MAAAj+M,KAAQwiR,SACRvD,SAAQA,EACPiB,OAAAnlR,EAAAmlR,OAWF,OAPUrhQ,MAAQE,UAAA9W,EAAA,SAAAw6Q,EAAA1nR,Gxaug8DR,Gwatg8DD,MAAPA,Exawg8DQ,Mwatg8DRA,IAAoB,gBAAHA,IAAGA,EAAAsD,OAAA,EACdtD,EAAM6oC,OACX7oC,KAKIkjR,EAAA3hR,UAAAgkR,UAAU,SAAlB5mQ,GAAwE,MAAmC,OAAaA,IAEhHukQ,EAAA3hR,UAAAkkR,WAAA,SAAA9mQ,GAAA,MAAmC,QAA3CA,Ixaqg8DGukQ,Ewapg8DmB3hR,UAAEylR,oCAAA,SAAAW,Gxaqg8DjB,Gwapg8DO,MAAZA,EAAiB,Cxaqg8DR,Gwapg8DRC,GAAM3iR,KAAC85J,OAAWsjH,MAAMp9Q,KAAI85J,OAAAsjH,KAAAr9H,MAAA,QAAA//I,MAAA85J,OAAAsjH,KAAAr9H,KAC1B//I,KAAK85J,OAAAsjH,KAAAr9H,KAAA0gI,KACR,IACAiC,GAAAC,KAAAD,UAAAC,EAAAD,UAAA,KAED,GAAIz7P,GAAKy7P,EAAUhoR,OAAAusB,KAAAy7P,KAClBz7P,GAAK5oB,OAAA,Exaqg8DI2B,Kwapg8DPo+Q,8BAASn3P,EACT1qB,IAAI,SAAOkd,GAAA,UAAAA,EAAA,KAAAipQ,EAAAjpQ,Kxaqg8DCuqB,KAAK,Mwalg8DpBhkC,KAAAo+Q,8BAAA,Mxasg8DE1jR,OAAOI,ewang8DVmjR,EAAoF3hR,UAAY,Yxaog8DzF0F,Iwarg8DP,WAA6D,MAAIhC,MAAK0+Q,SAAa1+Q,KAAM0+Q,QAAE3jR,MAAAiF,KAAA0+Q,QAAA3jR,MAAAiF,KAAAghI,Sxasg8DpFr+H,IAAK,SAAUsF,GAAQjI,KAAK0+Q,QAAQ9iM,KAAK3zE,IACzCxF,YAAY,Ewavg8DwEC,cAAA,Ixa0g8DxFhI,OAAOI,ewa9/7DVmjR,EAA4E3hR,UAAK,Uxa+/7D1E0F,Iwaxg8DP,WAAoD,MAAAhC,MAAAy+Q,SAAAz+Q,KAAAy+Q,SAAAQ,SAAA,Mxayg8D7Ct8Q,Iwaxg8DN,SAASigR,GACR5iR,KAAKk+Q,QAEAl+Q,KAAKk+Q,MAAGl3O,OAAK47O,EACnB,IAAI7nR,GAAMiF,KAAAy+Q,QACT1jR,KAEDiF,KAAAy+Q,SAAAZ,MAAA9iR,GAAAkkR,SAAApB,MAAA9iR,EAAAkkR,SAAA2D,Oxayg8DMngR,YAAY,Ewazg8DlBC,cAAA,IAIDu7Q,EAAY3hR,UAAAkmO,WAAA,SAAAvpN,GAAA,MAAOjZ,MAAA85J,QAAA7gJ,IAAAjZ,MAAA85J,OAAA95J,KAAA85J,OAAA7gJ,GAAAjZ,KAAAghI,QAAAi+I,SAAAhmQ,Ixayg8DhBve,OAAOI,ewang8DVmjR,EAAwE3hR,UAAK,Wxaog8DtE0F,Iwa1g8DP,WAAgD,MAAAhC,MAAAy+Q,SAAAz+Q,KAAAy+Q,SAAAyB,OAAA,Mxa2g8DzCv9Q,Iwa1g8DN,SAAWigR,GACX,GAAI7nR,GAAMiF,KAAAy+Q,QACT1jR,KAEDiF,KAAAy+Q,SAAAZ,MAAA9iR,GAAAmlR,OAAArC,MAAA9iR,EAAAmlR,OAAA0C,Oxa4g8DMngR,YAAY,Ewa5g8DlBC,cAAA,IAIOu7Q,EAAA3hR,UAAAumR,YAAR,SAA6B5pQ,GAAyC,SAASjZ,KAAA8iR,SAAA7pQ,IAAAjZ,MAAA8iR,UAAA9iR,KAAA8iR,QAAA7pQ,Ixa4g8D5EglQ,EAAyB3hR,UAAUymR,YAAc,SAAU9pQ,EAAKle,Gwa5g8DgB,GAAI0hB,EAA6Bzc,MAAA85J,QAAAr9I,OAAAxD,GAAAle,EAAA0hB,Ixagh8DjHwhQ,EAAyB3hR,UAAU0mR,YAAc,SAAU/pQ,EAAKle,Gwa/g8DQ,GAAI0hB,EAA8Bzc,MAAA8iR,SAAArmQ,OAAAxD,GAAAle,EAAA0hB,IAO7GwhQ,EAAI3hR,UAAA2mR,aAAA,SAAAhqQ,SAAQjZ,MAAA8iR,QAAA7pQ,Ixa6g8DTve,OAAOI,ewa5g8DVmjR,EAAiD3hR,UAAY,Yxa6g8DtD0F,Iwa9g8DP,WAAuB,MAAShC,MAAAwiO,WAAY,axa+g8DrC7/N,Iwa/g8DoF,SAAS+W,GAAO1Z,KAAG+iR,YAAA,WAAArpQ,OAAA,IAAA1Z,KAAA6gR,Oxagh8DnG7gR,KAAK6gR,MAAO,IAChBp+Q,YAAY,Ewajh8D2FC,cAAA,Ixaoh8D3GhI,OAAOI,ewa/g8DVmjR,EAA6C3hR,UAAU,Qxagh8DhD0F,Iwajh8DP,WAAmB,MAAShC,MAAAwiO,WAAY,Sxakh8DjC7/N,Iwalh8DwE,SAAK+W,GAAA1Z,KAAgB+iR,YAAY,OAAErpQ,GAAA1Z,KAAAq/Q,kBxamh8DvGr/Q,KAAKq/Q,iBAAiBuB,QAAQlnQ,IAClCjX,YAAY,Ewaph8D+FC,cAAA,Ixauh8D/GhI,OAAOI,ewanh8DVmjR,EAA8C3hR,UAAY,Uxaoh8DnD0F,Iwarh8DP,WAAoB,MAAShC,MAAAwiO,WAAY,Wxash8DlC7/N,Iwath8D2E,SAAK+W,GAAA1Z,KAAgB+iR,YAAY,SAAIrpQ,GAAA1Z,KAAAq/Q,kBxauh8D5Gr/Q,KAAKq/Q,iBAAiByB,UAAUpnQ,IACpCjX,YAAY,Ewaxh8DoGC,cAAA,Ixa2h8DpHhI,OAAOI,ewath8DVmjR,EAAqD3hR,UAAY,Uxauh8D1D0F,Iwaxh8DP,WAAoB,MAAShC,MAAAwiO,WAAY,Wxayh8DlC7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,SAAUrpQ,GAAI1Z,KAAKk+Q,MAAMplQ,UAC9DrW,YAAY,Ewa1h8D0DC,cAAA,Ixa6h8D1EhI,OAAOI,ewazh8DVmjR,EAAoD3hR,UAAW,Sxa0h8DxD0F,Iwa3h8DP,WAAmB,MAAShC,MAAAwiO,WAAY,Uxa4h8DjC7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,QAASrpQ,GAAI1Z,KAAKk+Q,MAAMplQ,UAC7DrW,YAAY,Ewa7h8DwDC,cAAA,Ixagi8DxEhI,OAAOI,ewa5h8DVmjR,EAAwD3hR,UAAY,axa6h8D7D0F,Iwa9h8DP,WAAuB,MAAShC,MAAAwiO,WAAY,cxa+h8DrC7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,YAAarpQ,GAAI1Z,KAAKk+Q,MAAMplQ,UACjErW,YAAY,Ewahi8DgEC,cAAA,Ixami8DhFhI,OAAOI,ewa9h8DVmjR,EAAuD3hR,UAAA,kBxa+h8DhD0F,Iwahi8DP,WAA6B,MAAShC,MAAAwiO,WAAY,mBxaii8D3C7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,iBAAkB17G,GAAsB3tJ,IAAK1Z,KAAKk+Q,MAAMplQ,UAC7FrW,YAAY,Ewali8DkGC,cAAA,Ixaqi8DlHhI,OAAOI,ewa5h8DVmjR,EAAsE3hR,UAAA,iCxa6h8D/D0F,Iwali8DP,WAA4C,MAAAhC,MAAAwiO,WAAA,kCxami8DrC7/N,Iwali8DN,SAAK+W,GACL1Z,KAAKgjR,YAAY,mBAAA37G,GAAiC3tJ,IAClD1Z,KAAI+iR,YAAK,gCAAe17G,GAAA3tJ,IAAE1Z,KAAKo/Q,iBAC/Bp/Q,KAAAo/Q,gBAAA5tG,QAAAwvG,IAAAtnQ,Ixaqi8DMjX,YAAY,Ewari8DlBC,cAAA,Ixawi8DEhI,OAAOI,ewa9h8DVmjR,EAAyD3hR,UAAA,oBxa+h8DlD0F,Iwari8DP,WAA+B,MAAAhC,MAAAwiO,WAAA,qBxasi8DxB7/N,Iwari8DN,SAAK+W,GACL1Z,KAAKgjR,YAAY,UAAA37G,GAAc3tJ,IAC/B1Z,KAAKgjR,YAAY,aAAA37G,GAAoB3tJ,IACrC1Z,KAAI+iR,YAAK,mBAAe17G,GAAA3tJ,IAAE1Z,KAAKo/Q,iBAC/Bp/Q,KAAAo/Q,gBAAA5tG,QAAA0vG,QAAAxnQ,Ixawi8DMjX,YAAY,Ewaxi8DlBC,cAAA,Ixa2i8DEhI,OAAOI,ewati8DVmjR,EAA0D3hR,UAAA,qBxaui8DnD0F,Iwaxi8DP,WAAgC,MAAShC,MAAAwiO,WAAY,sBxayi8D9C7/N,Iwazi8DwH,SAAK+W,GAAA1Z,KAAgB+iR,YAAQ,oBAAgB17G,GAAA3tJ,IAAA1Z,KAAAo/Q,iBxa0i8DjKp/Q,KAAKo/Q,gBAAgB5tG,QAAQ4vG,WAAW1nQ,IAC5CjX,YAAY,Ewa3i8DyJC,cAAA,Ixa8i8DzKhI,OAAOI,ewazi8DVmjR,EAA6D3hR,UAAA,uBxa0i8DtD0F,Iwa3i8DP,WAAkC,OAAShC,KAAAwiO,WAAY,wBxa4i8DhD7/N,Iwa5i8D6H,SAAK+W,GAAA1Z,KAAgB+iR,YAAQ,uBAAkB17G,GAAA3tJ,IAAA1Z,KAAAo/Q,iBxa6i8DxKp/Q,KAAKo/Q,gBAAgB5tG,QAAQgwG,aAAa9nQ,IAC9CjX,YAAY,Ewa9i8DgKC,cAAA,Ixaij8DhLhI,OAAOI,ewa7i8DVmjR,EAA4D3hR,UAAA,uBxa8i8DrD0F,Iwa/i8DP,WAAkC,MAAShC,MAAAwiO,WAAY,wBxagj8DhD7/N,Iwahj8D4H,SAAK+W,GAAA1Z,KAAgB+iR,YAAQ,sBAAkB17G,GAAA3tJ,IAAA1Z,KAAAo/Q,iBxaij8DvKp/Q,KAAKo/Q,gBAAgB5tG,QAAQ8vG,aAAa5nQ,IAC9CjX,YAAY,Ewalj8D+JC,cAAA,Ixaqj8D/KhI,OAAOI,ewahj8DVmjR,EAAgE3hR,UAAA,2Bxaij8DzD0F,Iwalj8DP,WAAsC,MAAShC,MAAAwiO,WAAY,4Bxamj8DpD7/N,Iwanj8DoI,SAAK+W,GAAA1Z,KAAgB+iR,YAAQ,0BAAa17G,GAAA3tJ,IAAA1Z,KAAAo/Q,iBxaoj8D1Kp/Q,KAAKo/Q,gBAAgB5tG,QAAQkwG,QAAQhoQ,IACzCjX,YAAY,Ewarj8DkKC,cAAA,Ixawj8DlLhI,OAAOI,ewapj8DVmjR,EAAiF3hR,UAAA,oBxaqj8D1E0F,Iwatj8DP,WAAuD,MAAShC,MAAAwiO,WAAY,qBxauj8DrE7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,mBAAoBrpQ,GAAI1Z,KAAKk+Q,MAAMplQ,UACxErW,YAAY,Ewaxj8DuGC,cAAA,Ixa2j8DvHhI,OAAOI,ewavj8DVmjR,EAAkE3hR,UAAA,8Bxawj8D3D0F,Iwazj8DP,WAAwC,MAAShC,MAAAwiO,WAAY,+Bxa0j8DtD7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,6BAA8B77G,GAAqBxtJ,IAAK1Z,KAAKk+Q,MAAMplQ,UACxGrW,YAAY,Ewa3j8DwHC,cAAA,Ixa8j8DxIhI,OAAOI,ewazj8DVmjR,EAAwD3hR,UAAY,axa0j8D7D0F,Iwa3j8DP,WAAuB,MAAShC,MAAAwiO,WAAY,cxa4j8DrC7/N,Iwa5j8DgF,SAAK+W,GAAA1Z,KAAgB+iR,YAAQ,YAAerpQ,GAAA1Z,KAAAo/Q,iBxa6j8DxHp/Q,KAAKo/Q,gBAAgB5tG,QAAQmwG,UAAUjoQ,IAC3CjX,YAAY,Ewa9j8DgHC,cAAA,Ixaik8DhIhI,OAAOI,ewa5j8DVmjR,EAAgD3hR,UAAY,Yxa6j8DrD0F,Iwa9j8DP,WAAsB,MAAShC,MAAAwiO,WAAY,axa+j8DpC7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,WAAYrpQ,GAAI1Z,KAAK8hR,eAC1Dr/Q,YAAY,Ewahk8D6DC,cAAA,Ixamk8D7EhI,OAAOI,ewa/j8DVmjR,EAAgD3hR,UAAY,Yxagk8DrD0F,Iwajk8DP,WAAsB,MAAShC,MAAAwiO,WAAY,axakk8DpC7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,WAAYrpQ,GAAI1Z,KAAK8hR,eAC1Dr/Q,YAAY,Ewank8D6DC,cAAA,Ixask8D7EhI,OAAOI,ewalk8DVmjR,EAAsD3hR,UAAA,kBxamk8D/C0F,Iwapk8DP,WAA4B,MAAShC,MAAAwiO,WAAY,mBxaqk8D1C7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,iBAAkBrpQ,GAAI1Z,KAAK8hR,eAChEr/Q,YAAY,Ewatk8DyEC,cAAA,Ixayk8DzFhI,OAAOI,ewark8DVmjR,EAAqD3hR,UAAA,gBxask8D9C0F,Iwavk8DP,WAA2B,MAAShC,MAAAwiO,WAAY,iBxawk8DzC7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,eAAgB17G,GAAsB3tJ,IAAK1Z,KAAK8hR,eACrFr/Q,YAAY,Ewazk8D6FC,cAAA,Ixa4k8D7GhI,OAAOI,ewaxk8DVmjR,EAA+D3hR,UAAA,iBxayk8DxD0F,Iwa1k8DP,WAAqC,MAAShC,MAAAwiO,WAAY,kBxa2k8DnD7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,gBAAiBrpQ,GAAI1Z,KAAK8hR,eAC/Dr/Q,YAAY,Ewa5k8DiFC,cAAA,Ixa+k8DjGhI,OAAOI,ewa3k8DVmjR,EAA+D3hR,UAAA,iBxa4k8DxD0F,Iwa7k8DP,WAAqC,MAAShC,MAAAwiO,WAAY,kBxa8k8DnD7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,gBAAiBrpQ,GAAI1Z,KAAK8hR,eAC/Dr/Q,YAAY,Ewa/k8DiFC,cAAA,Ixakl8DjGhI,OAAOI,ewa9k8DVmjR,EAAoE3hR,UAAA,+Bxa+k8D7D0F,Iwahl8DP,WAA0C,MAAShC,MAAAwiO,WAAY,gCxail8DxD7/N,IAAK,SAAU+W,GAAK1Z,KAAK+iR,YAAY,8BAA+B17G,GAAsB3tJ,IAAK1Z,KAAK8hR,eACpGr/Q,YAAY,Ewall8D2HC,cAAA,Ixaql8D3Iu7Q,Ewall8DgE3hR,UAAAwlR,YAAA,Wxaml8D5D,Gwall8DLoB,IACAC,SAAUnjR,KAAKmjR,SACfC,SAAApjR,KAAcojR,SACdC,eAAcrjR,KAAKqjR,eACnBC,aAAatjR,KAAMsjR,aACnBC,cAAevjR,KAAKujR,cACpBC,cAAAxjR,KAAAwjR,cACCC,4BAAAzjR,KAAAyjR,4BACwBzjR,MAAKo/Q,iBAC/Bp/Q,KAAAo/Q,gBAAA5tG,QAAA0xG,Uxaql8DExoR,OAAOI,ewatk8DVmjR,EAAyD3hR,UAAU,Qxauk8D5D0F,Iwanl8DP,WAA+B,MAAAhC,MAAAwiO,WAAA,Sxaol8DxB7/N,Iwanl8DN,SAAM+W,GACN,GAAMgqQ,GAAa1jR,KAAG2jR,gBAClBC,EAAgB5jR,KAAC6jR,sBACjBC,EAAM,IACT9jR,MAAA+jR,cAAYL,EAAYE,KACrBE,EAAYJ,GAChB1jR,KAAK+iR,YAAU,OAAAlF,MAAA79Q,KAAAo9Q,KAAA1jQ,IACdoqQ,IACG9jR,KAAC6hR,UAAAiC,GACL9jR,KAAK+hR,sCACL/hR,KAAAk+Q,MAAAplQ,Uxaql8DMrW,YAAY,Ewarl8DlBC,cAAA,Ixawl8DEhI,OAAOI,ewatl8DVmjR,EAA8E3hR,UAAW,Yxaul8DlF0F,IAAK,WAAc,MAAOhC,MAAKo9Q,KAAOp9Q,KAAKo9Q,KAAKrqQ,KAAO/S,KAAKghI,QAAQi+I,SAAS7B,KAAKrqQ,MAClFtQ,YAAY,Ewaxl8DyGC,cAAA,Ixa2l8DzHhI,OAAOI,ewa1l8DVmjR,EAAA3hR,UAAA,mBxa2l8DO0F,Iwa1l8DN,Wxa2l8DU,Mwa3l8DgBhC,MAAAo/Q,gBAA+Dp/Q,KAACo/Q,gBAAA5tG,QAAAwyG,eAC1F,Mxa8l8DMvhR,YAAY,Ewa9l8DlBC,cAAA,Ixaim8DEhI,OAAOI,ewahm8DVmjR,EAAA3hR,UAAA,yBxaim8DO0F,Iwahm8DN,WACA,MAAAhC,MAAA8+Q,SAAAsB,OAAApgR,KAAAwiR,UAAA3xJ,Oxakm8DMpuH,YAAY,Ewalm8DlBC,cAAA,Ixaqm8DEhI,OAAOI,ewa/l8DVmjR,EAAyD3hR,UAAW,axagm8D7D0F,Iwarm8DP,WAAuB,MAAAhC,MAAAo9Q,MAAAp9Q,KAAAo9Q,KAAAvsJ,MAAA7wH,KAAAo9Q,KAAAvsJ,MAAA7wH,KAAA2jR,iBxasm8DhBhhR,Iwarm8DN,SAAS+W,GACR1Z,KAAA+jR,cAAOrqQ,EAAA1Z,KAAA6jR,wBAER7jR,KAAAikR,eAAAvqQ,Ixaum8DMjX,YAAY,Ewavm8DlBC,cAAA,IAGOu7Q,EAAA3hR,UAAA4nR,yBAAe,WAAalkR,KAAAikR,eAAAjkR,KAAA6jR,wBxawm8DjC5F,Ewavm8De3hR,UAAQ2nR,eAAA,SAAApzJ,GACzB7wH,KAAI+iR,YAAK,OAAelF,MAAA79Q,KAAAo9Q,MAAAvsJ,WAAE7wH,KAAKo/Q,iBAC/Bp/Q,KAAAo/Q,gBAAAwC,UAAA/wJ,Ixa0m8DEn2H,OAAOI,ewavm8DVmjR,EAAuE3hR,UAAU,Yxawm8D1E0F,Iwazm8DP,WAAiD,MAAIhC,MAAKo9Q,MAAOp9Q,KAAAo9Q,KAAAqD,KAAAzgR,KAAAo9Q,KAAAqD,KAAAzgR,KAASghI,QAAKi+I,SAAM7B,KAAEqD,Mxa0m8DhF99Q,IAAK,SAAU89Q,GAAQzgR,KAAKo9Q,KAAOS,MAAyC79Q,KAAKo9Q,MAAQqD,KAAMA,KAC/Fh+Q,YAAY,Ewa3m8DuEC,cAAA,Ixa8m8DvFhI,OAAOI,ewa3m8DVmjR,EAAuD3hR,UAAQ,iBxa4m8DxD0F,Iwa7m8DP,WAA4B,MAAoB,OAAXhC,KAAAmkR,UAAWnkR,KAAAmkR,SAAAv0B,Oxa8m8DzCjtP,IAAK,SAAU+W,GAAK1Z,KAAKmkR,SAAWtG,MAAyC79Q,KAAKmkR,UAAYv0B,MAAOl2O,KACrGjX,YAAY,Ewa/m8D8DC,cAAA,Ixakn8D9EhI,OAAOI,ewahn8DVmjR,EAAgD3hR,UAAY,sBxain8DrD0F,IAAK,WAAc,MAAOhC,MAAK8+Q,SAASsB,OAAOpgR,KAAKwiR,UAAU/B,KAAK5jP,KACnEp6B,YAAY,Ewaln8D8DC,cAAA,Ixaqn8D9EhI,OAAOI,ewann8DVmjR,EAA8B3hR,UAAuB,axaon8D9C0F,IAAK,WAAc,MAAOhC,MAAKo/Q,gBAAkBp/Q,KAAKo/Q,gBAAgBj+M,MAAQ,MAC9E1+D,YAAY,Ewarn8DiEC,cAAA,Ixawn8DjFhI,OAAOI,ewavn8DVmjR,EAAsD3hR,UAAS,mBxawn8DxD0F,IAAK,WAAc,MAAOhC,MAAKokR,UAAU9jN,QACzC79D,YAAY,Ewazn8D4CC,cAAA,Ixa4n8D5DhI,OAAOI,ewa3n8DVmjR,EAA+C3hR,UAAgB,sBxa4n8DxD0F,IAAK,WAAc,MAAOhC,MAAKo/Q,gBAAgBiF,eAC/C5hR,YAAY,Ewa7n8D4DC,cAAA,Ixago8D5EhI,OAAOI,ewa/n8DVmjR,EAAoF3hR,UAAO,iBxago8DpF0F,IAAK,WAAc,MAAOhC,MAAKokR,UAAUrkI,MACzCt9I,YAAY,Ewajo8DwEC,cAAA,Ixaoo8DxFhI,OAAOI,ewalo8DVmjR,EAAsC3hR,UAAqB,qBxamo8DpD0F,IAAK,WAAc,MAAOhC,MAAKskR,cAAc7zQ,MAC7ChO,YAAY,Ewapo8DwCC,cAAA,Ixauo8DxDhI,OAAOI,ewato8DVmjR,EAAqC3hR,UAAuB,oBxauo8DrD0F,IAAK,WAAc,MAAOhC,MAAKukR,uBAAuBvkR,KAAKskR,gBAC3D7hR,YAAY,Ewaxo8D+DC,cAAA,Ixa2o8D/EhI,OAAOI,ewazo8DVmjR,EAAwD3hR,UAAU,kBxa0o8D3D0F,IAAK,WAAc,SAAShC,KAAKo9Q,OAAUp9Q,KAAKo9Q,KAAKr9H,OAAO//I,KAAKwgR,WAAWxgR,KAAKo9Q,KAAKr9H,OACtFt9I,YAAY,Ewa3o8DgGC,cAAA,Ixa8o8DhHhI,OAAOI,ewa5o8DVmjR,EAA6F3hR,UAAA,Yxa6o8DtF0F,Iwa9o8DP,WAAqE,MAAIhC,MAAKo9Q,KAAOr9H,Mxa+o8D9Ep9I,IAAK,SAAUo9I,GAAQ//I,KAAKo9Q,KAAOS,MAAyC79Q,KAAKo9Q,MAAQr9H,KAAMA,KAC/Ft9I,YAAY,Ewahp8D2FC,cAAA,Ixamp8D3GhI,OAAOI,ewahp8DVmjR,EAAA3hR,UAAA,gBxaip8DO0F,Iwahp8DN,Wxaip8DU,Mwahp8DPhC,MAAKo9Q,MAAUp9Q,KAAIo9Q,KAAAr9H,MAAA,QAAA//I,MAAAo9Q,KAAAr9H,KACnB//I,KAAAo9Q,KAAUr9H,KAAK0gI,Kxaip8DF,Qwahp8DPzgR,MAAAghI,QAAQi+I,SAAc7B,KAAKr9H,KAChC//I,KAAKghI,QAAAi+I,SAAA7B,KAAAr9H,KAAA0gI,KACT,Mxakp8DMh+Q,YAAY,Ewalp8DlBC,cAAA,Ixaqp8DEhI,OAAOI,ewahp8DVmjR,EAA2D3hR,UAAQ,qBxaip8D5D0F,Iwarp8DP,WAAgC,aAAAhC,KAAAwkR,cAAAxkR,KAAAwkR,aAAA50B,Oxasp8DzBjtP,Iwarp8DN,SAAU+W,GAAc1Z,KAAAwkR,eAExBxkR,KAAAykR,UAAAhE,KAAA5C,MAAA79Q,KAAAwkR,cAAA50B,MAAAl2O,Oxawp8DMjX,YAAY,Ewaxp8DlBC,cAAA,Ixa2p8DEhI,OAAOI,ewazp8DVmjR,EAAA3hR,UAAA,0Bxa0p8DO0F,Iwazp8DN,WACA,GAAAm+Q,GAAYngR,KAAW8+Q,SAAAsB,OAAgBpgR,KAAIwiR,SAC3C,OAAAxiR,MAAAwgR,WAAAL,EAAApgI,MAAAogI,EAAApgI,KAAA0gI,KAAA5jP,IAAA,Mxa2p8DMp6B,YAAY,Ewa3p8DlBC,cAAA,Ixa8p8DEhI,OAAOI,ewaxp8DVmjR,EAAA3hR,UAAA,yBxayp8DO0F,Iwaxp8DN,Wxayp8DU,Mwaxp8DPhC,MAAKwkR,cAAaxkR,KAASwkR,aAAA9B,UAC3B1iR,KAAAwkR,aAAe9B,Uxayp8DF,Qwaxp8DP1iR,MAAAghI,QAAQi+I,SAAc7B,KAAKr9H,KAChC//I,KAAKghI,QAAAi+I,SAAA7B,KAAAr9H,KAAA0gI,KAAAiC,UACT,Mxa0p8DM//Q,Iwapq8DN,SAAa+/Q,GACb,GAAI3iI,IAAQ0gI,KAAA5C,MAAU79Q,KAAIwkR,cAAS9B,UAAA7E,MAAA79Q,KAAAwkR,aAAA9B,eACnC1iR,MAAKo9Q,KAAAS,MAA8C79Q,KAAAo9Q,MAAWr9H,SAC9D//I,KAAA+hR,oCAAAhiI,EAAA0gI,KAAAiC,Yxasq8DMjgR,YAAY,Ewatq8DlBC,cAAA,Ixayq8DEhI,OAAOI,ewa1p8DVmjR,EAAuD3hR,UAAA,iBxa2p8DhD0F,Iwa/p8DP,WAA4B,MAAAhC,MAAA6iR,YAAA,8BAAA7iR,KAAA6iR,YAAA,cxagq8DrBlgR,Iwa/p8DN,SAAK+W,GACL1Z,KAAKgjR,YAAY,4BAAa37G,GAA0B3tJ,IACxD1Z,KAAAgjR,YAAA,YAAA37G,GAAA3tJ,Kxaiq8DMjX,YAAY,Ewajq8DlBC,cAAA,Ixaoq8DEhI,OAAOI,ewa/p8DVmjR,EAA+C3hR,UAAA,Sxagq8DxC0F,Iwajq8DP,WAAoB,MAAShC,MAAA6iR,YAAY,kBxakq8DlClgR,IAAK,SAAU+W,GAAK1Z,KAAKgjR,YAAY,gBAAiB37G,GAAsB3tJ,KAC5EjX,YAAY,Ewanq8DmEC,cAAA,Ixasq8DnFhI,OAAOI,ewajq8DVmjR,EAAkD3hR,UAAW,Yxakq8DtD0F,Iwanq8DP,WAAuB,MAAShC,MAAA6iR,YAAY,axaoq8DrClgR,IAAK,SAAU+W,GAAK1Z,KAAKgjR,YAAY,WAAY37G,GAAsB3tJ,KACvEjX,YAAY,Ewarq8DiEC,cAAA,Ixawq8DjFhI,OAAOI,ewanq8DVmjR,EAAkD3hR,UAAA,Yxaoq8D3C0F,Iwarq8DP,WAAuB,MAAShC,MAAA6iR,YAAY,oBxasq8DrClgR,IAAK,SAAU+W,GAAK1Z,KAAKgjR,YAAY,kBAAmB37G,GAAsB3tJ,KAC9EjX,YAAY,Ewavq8DwEC,cAAA,Ixa0q8DxFhI,OAAOI,ewa/p8DVmjR,EAAkD3hR,UAAW,Yxagq8DtD0F,Iwavq8DP,WAAuB,OAAAhC,KAAA6iR,YAAA,axawq8DhBlgR,Iwavq8DN,SAAK+W,GACL1Z,KAAKgjR,YAAE,YAAA37G,GAAA3tJ,IACNA,Exawq8Da1Z,KAAKo/Q,gBAAgBK,YAAYtxN,UAAUzlC,IAAI,Qwarq8D7D1oB,KAAAo/Q,gBAAAK,YAAAtxN,UAAAhtC,OAAA,Sxayq8DM1e,YAAY,Ewazq8DlBC,cAAA,Ixa4q8DEhI,OAAOI,ewavq8DVmjR,EAAkD3hR,UAAA,Yxawq8D3C0F,Iwazq8DP,WAAuB,MAAShC,MAAA6iR,YAAA,mBxa0q8DzBlgR,Iwa1q8D2B,SAAK+W,GAAYA,Exa2q8DxC1Z,KAAKgjR,YAAY,iBAAkB37G,GAAsB3tJ,IAEzD1Z,KAAKijR,aAAa,kBAAmBjjR,KAAK0kR,oBAAsBhrQ,GACpEjX,YAAY,Ewa9q8DsJC,cAAA,Ixair8DtKhI,OAAOI,ewa7q8DVmjR,EAA6D3hR,UAAA,uBxa8q8DtD0F,Iwa/q8DP,WAAkC,MAAShC,MAAA6iR,YAAA,wBxagr8DpClgR,Iwahr8DsC,SAAK+W,GAAYA,Exair8DnD1Z,KAAKgjR,YAAY,sBAAuB37G,GAAsB3tJ,IAE9D1Z,KAAKijR,aAAa,wBACtBxgR,YAAY,Ewapr8D6IC,cAAA,Ixaur8D7JhI,OAAOI,ewalr8DVmjR,EAAkD3hR,UAAA,Yxamr8D3C0F,Iwapr8DP,WAAuB,MAAShC,MAAA6iR,YAAA,mBxaqr8DzBlgR,Iwarr8D2B,SAAK+W,GAAYA,Exasr8DxC1Z,KAAKgjR,YAAY,iBAAkB37G,GAAsB3tJ,IAEzD1Z,KAAKijR,aAAa,mBACtBxgR,YAAY,Ewazr8DwHC,cAAA,Ixa4r8DxIu7Q,Ewavr8DiB3hR,UAAaynR,cAAY,SAAAY,EAAAC,GAC5C,GAAMC,GAAK7kR,KAAKm+Q,GAAG1K,aAAakR,GAChCG,EAAS9kR,KAAEm+Q,GAAK1K,aAAYmR,EAC5B,OAAAC,GAAA5hC,IAAA6hC,EAAA7hC,GAAA4hC,EAAAh3P,IAAAi3P,EAAAj3P,GAAAg3P,EAAAnrQ,IAAAorQ,EAAAprQ,GAAAmrQ,EAAA/hQ,IAAAgiQ,EAAAhiQ,Gxayr8DEm7P,Ewatr8DuB3hR,UAAAioR,uBAAA,SAAArmR,GACzB,GACAsH,GADIkU,Ixawr8DE,Kwatr8DL,GAAIT,KAAO/a,GACV,QAAA+a,IAEDzT,EAAItH,EAAQ+a,GACX,MAAOzT,Gxaur8DKkU,EAAE1C,KAAKxR,EAAKqN,Iwapr8DzB6G,IAAA8R,OAAAxrB,KAAAukR,uBAAA/+Q,IAED,OAAAkU,GArgBW,IAAA+C,GAAAC,EAAAC,EAAAC,EAAAC,CAugBZ,Oxaur8DGohQ,Gwa/r9DHH,Ixags9DOpjR,OAAOM,GAAqB,cwa/r9DvB+iR,GAugBZ,wCAAAthQ,MAAA,KAAA8rK,GAAA,GAAAA,GAAA,IAAA9rK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAkgQ,SAAAlgQ,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA8+P,SAAA9+P,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAm2P,SAAAn2P,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAwlN,SAAAxlN,GAAAniB,UAADujR,Mxags8DI8G,GAAqD/kR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D4rQ,GAAqDhlR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC9F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iyajs9DzGurQ,GAGgC,Wzass9D7B,Qyaxs9DKC,GAA8Bj9Q,EAAAuS,EAAAX,GAC3B7Z,KAAAiI,OACAjI,KAAAwa,IAAKA,EAlBTxa,KAAA6Z,QACA7Z,KAAAmlR,sBAAwBv0P,GAAK,UAAIG,IAAU,YAC3C/wB,KAAAolR,0BAA4Bx0P,GAAI,SAAEG,IAAa,UAC/C/wB,KAAAqlR,2BAA0Bz0P,GAAA,cAAgBG,IAAW,YACrD/wB,KAAAslR,mBAAsB10P,GAAE,UAAWG,IAAO,UAC1C/wB,KAAAulR,iBAAoB30P,GAAA,KAASG,IAAA,OAC7B/wB,KAAAwlR,kBAAc,SAahBxlR,KAAAylR,YAAA,Qzait9DFP,Eyans9DF5oR,UAAA+H,SAAA,WAXA,GAAIhB,GAACrD,Izagt9DCA,Mya/s9DJ0lR,SAAU1lR,KAAA6Z,MAAC5R,KACR0S,UAAU,SAAUvgB,GAAC,MAAAiJ,GAAAsiR,kBAAAvrR,Kzagt9DpB4F,Kya/s9DJ4lR,QAAK5lR,KAAAiI,KAAAwP,EACLgpL,KAAA/lM,OAAU+8M,GAAK,cAAK,MACjB98L,UAAA,SAAiBvgB,GAAK,MAAKiJ,GAAAwiR,kBAAYzrR,Kzagt9DtC4F,Kya/s9DJk/Q,eAAKl/Q,KAAAiI,KAAAk3Q,aACL1+E,KAAA/lM,OAAU+8M,GAAK,cAAK,MACjB98L,UAAA,SAAoBvgB,GAAK,MAACiJ,GAAWyiR,cAAA1rR,Kzagt9DpC4F,Kya/s9DJ+lR,cAAK/lR,KAAAiI,KAAA+9Q,YACLvlF,KAAA/lM,OAAU+8M,GAAK,cAAK,MACtB98L,UAAA,SAAAvgB,GAAA,MAAAiJ,GAAA4iR,aAAA7rR,Mzait9DE8qR,Eya9s9D0B5oR,UAAAgI,YAAA,WAC5BtE,KAAK0lR,SAAQ9uJ,cACb52H,KAAK4lR,QAAAhvJ,cACL52H,KAAKk/Q,eAActoJ,cACnB52H,KAAA+lR,cAAAnvJ,ezagt9DEsuJ,Eya7s9D6B5oR,UAAOqpR,kBAAA,SAAAvrR,GACrCwgR,GAAsB+C,OAAAvjR,IACtB4F,KAAAiI,KAAA+2Q,UAAA5kR,EAAAwgR,GAAA+C,OAED39Q,KAAAwa,IAAAhP,gBAIS05Q,EAAA5oR,UAAAupR,kBAAV,SAAwBt/N,GAA6BvmD,KAAAwa,IAAAhP,gBza4s9DlD05Q,Eya3s9DmB5oR,UAAAwpR,cAAA,SAAAhsH,GAErB95J,KAAK85J,OAAIA,EACT95J,KAAAwa,IAAAhP,gBza4s9DE05Q,Eyazs9D6B5oR,UAAC2pR,aAAA,SAAA3hP,Gza0s9D1B,Gya1s9D4BA,GAAO,QAAAA,Gza4s9DnC,Oya1s9DLA,EAAK7zB,MACL,IAAK,oBAAU,Kza2s9DN,Kya3s9DQ,WAA0BzQ,KAAAwa,IAAMvD,eACjD,Mza6s9DS,Sya7s9DyBjX,KAAAwa,IAAMhP,gBAhErB,IAAAiR,GAAAC,EAAAC,CAoErB,Oza+s9DGuoQ,Gyapx9DSH,Izaqx9DLrqR,OAAOM,GAAoB,YAAK4V,SAAU,iCyapx9D5Bo0Q,GAoErB,wCAAAvoQ,MAAA,KAAAuhQ,SAAAvhQ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAjiB,UAADwqR,Mzawt9DIgB,GAA8ClmR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D+sQ,GAA8CnmR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0a1x9DzG0sQ,GAGyC,W1a8x9DtC,Q0ahy9DMC,GAAsBC,EAAAzsQ,EAAAqkQ,GACtBl+Q,KAAAsmR,WAAKA,EACLtmR,KAAA6Z,QAER7Z,KAAAk+Q,Q1aiy9DExjR,OAAOI,e0axy9DVurR,EAAsC/pR,UAAc,U1ayy9D7C0F,IAAK,WAAc,MAAOhC,MAAKsmR,WAAWliR,cAAcwE,wBAAwBM,QAChFzG,YAAY,E0a1y9DkEC,cAAA,I1a6y9DlF2jR,E0a3x9DF/pR,UAAA+H,SAAA,WARA,GAAIhB,GAAOrD,I1aqy9DLA,M0apy9DJ6Z,MAAA5R,KACA0S,UAAI,SAAAvgB,GACHwgR,GAAoBrkP,eAAAn8B,K1aqy9DTiJ,E0apy9DV66Q,MAAAl3O,QACCzQ,aAAAn8B,EAAAwgR,GAAArkP,mB1ayy9DH8vP,E0any9DqB/pR,UAAY6e,gBAAc,WACjDnb,KAAKk+Q,MAAMthP,UAAS58B,KAAA85J,OAAA11J,cACpBpE,KAAAk+Q,MAAAplQ,U1aqy9DEutQ,E0aly9DmB/pR,UAAAgI,YAAA,WACrBtE,KAAAk+Q,MAAAnpQ,UA7BoB,IAAA0H,GAAAC,EAAAC,EAAAC,CAgCrB,O1aky9DGspQ,KACIxrR,OAAOM,GAAoB,WAAG,UAC9BmrR,GAA2C,c0ap09DV,mBAAA1pQ,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAF5B2rR,EAA4B/pR,UAAA,iB1aw09DrC+pR,E0a909DHH,I1a+09DOxrR,O0a909DPM,GAAU,YACV4V,SAAU,wBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWymQ,GAkCZ,wCAAAzpQ,MAAA,KAAA1hB,GAAA,YAAAA,GAAA,aAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAggQ,SAAAhgQ,GAAAliB,UAAD2rR,M1aoz9DIE,GAAYrsR,EAAoB,KAGhCssR,GAAuCxmR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DqtQ,GAAuCzmR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2a919DzGgtQ,GAE0B,W3aq29DvB,Q2at29DMC,GAAsBn3M,EAAA52C,GACtB54B,KAAAwvE,UAJDxvE,KAAA44B,KAAMA,EAKT54B,KAAA4mR,OAAA,GAAA3kD,IAAA,sB3ay29DF0kD,E2ah29DFrqR,UAAAszP,MAAA,WANA,GAAIvsP,GAAKrD,I3aw29DH,O2av29DI,OAATA,KAAA44B,KAAOta,UACG5jB,OAACsuL,GAAQ,UAClBhpL,KACAwvE,QAAAszJ,YAAA9iO,KAAI44B,KAAAta,WAENmiL,KAAA/lM,OAAA+8M,GAAA,cAAAr+L,GAAA,MAAA/V,GAAAujR,OAAAhrM,KAAAxiE,O3au29DE1e,OAAOI,e2a919DV6rR,EAAArqR,UAAA,K3a+19DO0F,I2a919DN,WACA,MAAAhC,MAAA4mR,OAAA9vJ,gB3ag29DMr0H,YAAY,E2ah29DlBC,cAAA,GA3BW,IAAA+Z,GAAAC,CA6BZ,O3ak29DGiqQ,G2ah49DHH,I3ai49DO9rR,OAAOM,GAAqB,c2ah49DvByrR,GA6BZ,wCAAAhqQ,MAAA,KAAA4lN,SAAA5lN,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,UAADisR,M3a229DIE,GAA2C7mR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D0tQ,GAA2C9mR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACpF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4a/49DzGqtQ,GAE4B,W5aq59DzB,Q4at59DMC,GAA+BzsQ,EAAAJ,GAC/Bna,KAAAua,YAAmBA,EACvBva,KAAAma,Q5aw59DF6sQ,E4an49DF1qR,UAAA2qR,aAAA,WAlBA,GAAA5jR,GAAWrD,I5au59DL,O4at59DL,IAAAiiO,IAAyB,oBAAAzuM,G5au59DhB,Q4at59DNlU,GAAQwD,GACV0Q,EAAEooD,KAAA94D,GACF0Q,EAAAk7H,W5a+59DQ,MAPArrJ,GAAM8W,M4at59Dd+E,OAAO7b,EAAKkX,YAAYmE,UAAU,sCAClCS,MAAI9b,EAAAkX,YAAoBmE,UAAQ,mCAC9BU,GAAA,cAAAC,OAAA,EAAAC,MAAA,iBAAAA,IAAA,MAEFH,MAAI9b,EAAOkX,YAAamE,UAAO,kCAC5BU,GAAA,MAAAC,OAAA,EAAAC,MAAA,iBAAAA,IAAA,Q5ay59DSs3G,Y4at59DN,WACLvzH,EAAA8W,MAAAkF,a5a259DD2nQ,E4az39DF1qR,UAAA4qR,UAAA,WA5BA,GAAA7jR,GAAWrD,I5au59DL,O4at59DL,IAAAiiO,IAAkD,oBAAAzuM,G5au59DzC,Q4at59DNlU,GAAQwD,GACV0Q,EAAEooD,KAAA94D,GACF0Q,EAAAk7H,W5ay69DQ,MAjBArrJ,G4at59DR8W,MAAA+E,OAAA7b,EAAAkX,YAAAmE,UAAA,2CAECS,MAAI9b,EAAQkX,YAAWmE,UAAA,yCACvBU,GAAA,OAAOC,OAAA,EACPC,MAAA,iBAAAA,GAAAu7P,GAAApR,SAGAtqP,MAAI9b,EAASkX,YAAWmE,UAAA,8CACxBU,GAAA,QAAOC,OAAA,EACPC,MAAA,iBAAAA,GAAAu7P,GAAAhyG,UAGA1pJ,MAAI9b,EAAOkX,YAAWmE,UAAA,2CACtBU,GAAA,MAAOC,OAAA,EACPC,MAAA,iBAAAkU,GAAAooD,KAAAi/L,GAAAlwJ,Y5a059DWiM,Y4at59DN,WACLvzH,EAAA8W,MAAAkF,YAtDQ,IAAA5C,GAAAC,CA2DZ,O5au59DGsqQ,G4an99DHH,I5ao99DOnsR,OAAOM,GAAqB,c4an99DvB8rR,GA2DZ,wCAAArqQ,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAAhiB,UAADssR,M5ag69DIG,GAA4CnnR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DguQ,GAA4CpnR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtG2tQ,GAAyCrnR,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GACxF,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,K6ah79D1D8zF,GAKS,W7a879DN,Q6al89DKC,GAA8Bt/Q,EAAAs9D,EAAA/qD,EAAAy4B,EAAAg/G,EAAA73I,EAAAD,EAAAqtQ,EAAA1zP,GACX9zB,KAAAiI,OAClBjI,KAAAulE,MACAvlE,KAAAwa,MACAxa,KAAAizC,IAAIA,EACJjzC,KAAAiyJ,OACAjyJ,KAAAoa,KAAKA,EACLpa,KAAAma,QACAna,KAAAwnR,MAAOA,EA3ChBxnR,KAAA8zB,QAAOA,E7a++9DA9zB,K6a9+9DNynR,OACE5tQ,MAAO8gQ,GAAmB+M,QAAQtxQ,KAAM,UAAYikD,UAAU,EAAO5wC,OAAOmpP,GAAG+U,QAC/E9tQ,MAAO8gQ,GAAmBiN,SAAOxxQ,KAAM,WAASikD,UAAe,EAAO5wC,OAAGmpP,GAA6BsL,SACtGrkQ,MAAO8gQ,GAAmB18D,MAAO7nM,KAAM,QAASikD,UAAU,EAAO5wC,OAAQmpP,GAAwBwK,QACjGvjQ,MAAO8gQ,GAAmBkN,MAAAzxQ,KAAU,QAAMikD,UAAY,EAAU5wC,OAAOmpP,GAAQwK,QAC/EvjQ,MAAO8gQ,GAAmBpkO,SAAUngC,KAAM,WAAYikD,UAAU,EAAO5wC,OAAQmpP,GAAwBwK,QACvGvjQ,MAAO8gQ,GAAmBmN,SAAS1xQ,KAAM,WAAEikD,UAAc,EAAU5wC,OAAYmpP,GAAGwK,QAEnFvjQ,MAAA8gQ,GAAAoN,UAAA3xQ,KAAA,aAAAikD,UAAA,EAAA5wC,OAAAmpP,GAAAwK,QAGFp9Q,KAAAgoR,sBAAsB3xQ,SAAU,gBAAiBvM,QAAS,KAE1D9J,KAAAioR,mBAAgB5xQ,SAAA,gBAAAvM,QAAA,K7a4+9DT9J,K6a3+9DNkoR,gBACEntR,MAAO,YAAaokB,MAAO,SAC3BpkB,MAAO,YAAYokB,MAAO,SAC1BpkB,MAAO,WAAYokB,MAAO,QAC1BpkB,MAAO,WAAYokB,MAAO,QAC1BpkB,MAAO,WAAYokB,MAAO,QAC3BpkB,MAAA,WAAAokB,MAAA,QAKFnf,KAAAmoR,YAAa,EACbnoR,KAAAooR,cAAqB,KA4IbpoR,KAAAqoR,WAAA,KACAroR,KAAAsoR,qBAAqB,EACrBtoR,KAAAuoR,eAAiB13H,IA5HxB7wJ,KAAKwoR,eAAc,EACnBxoR,KAAAmoR,YAAAnoR,KAAAoa,KAAA68G,qB7a499DEswJ,E6a189DFjrR,UAAA+H,SAAA,WAfA,GAAIhB,GAAMrD,IACVA,MAAKiI,KAAIguH,OACTj2H,KAAKulE,IAAAz5D,KAAOqiD,UAAYzlC,IAAE,e7a299DpB1oB,K6a199DJ4lR,QAAU5lR,KAAAiI,KAAAwP,EACPkD,UAAA,SAAoBvgB,GAAK,MAAAiJ,GAAWolR,aAAAruR,K7a299DnC4F,K6a199DJ0oR,cACA1oR,KAAAizC,IAAA01O,YACCloF,KAAI/lM,OAAA+8M,GAAA,cAAAxvM,GACHvN,OAAK6rR,GAA6B,GAAAt+Q,IAEpC5E,EAAA4E,KAAA63Q,kBAAU73Q,K7ay99DFvN,O6av99DR+8M,GAAiB,4BAAAp0M,GAAA4uJ,KAAAx6I,KACjBkD,UAAK,SAAQ49I,GACXl1J,EAAAywB,QAAA80P,gBAAArwH,EAAAl1J,EAAA4E,KAAA23Q,QAAAxN,GAAA,EAAA5gG,Y7a099DF+1G,E6at99DkBjrR,UAAAgI,YAAA,WACpBtE,KAAKiI,KAAA8M,UACL/U,KAAK4lR,QAAAhvJ,cACL52H,KAAK0oR,cAAa9xJ,cAA0B52H,KAAK6oR,UAAQ7oR,KAAW6oR,QAAG9hN,QACnE/mE,KAAK6oR,QAAKjyJ,cACd52H,KAAAulE,IAAAz5D,KAAAqiD,UAAAhtC,OAAA,gBAGDomQ,EAAAjrR,UAAAwsR,WAAA,SAAWC,GAAuB,MAAO75D,IAASU,iBAAiBm5D,IAEnExB,EAAAjrR,UAAA0sR,WAAA,SAAAD,GAAA,MAAA75D,IAAAS,iBAAAo5D,I7as99DGxB,E6an89DFjrR,UAAA2sR,UAAA,WAlBA,GAAI5lR,GAAMrD,I7au99DJ,O6at99DLA,MAAAiI,KAAO04Q,SAER3gR,KAAAoa,KAAOwgB,SAAW,GAChB56B,KACAma,MAAA+sQ,YACCzmF,KAAA/lM,OAAQ+8M,GAAQ,oBAAAyxE,G7as99DT,O6ar99DNA,G7as99DU,I6ar99DTrO,IAAoBpR,KACrB,MAAKpmQ,GAAA2+Q,O7as99DK,K6ar99DTnH,IAAkBhyG,MAEnB,MADCxlK,GAAA4E,KAAO4gK,QACHnuK,OAAAsuL,GAAA,OACL,KAAA6xF,IAAAlwJ,M7as99DU,Q6ap99DV,MAAAjwH,QAAAsuL,GAAA,aAbMtuL,OAAQsuL,GAAO,S7as+9DvBu+F,E6a/89DFjrR,UAAA6sR,UAAA,WAJA,GAAI9lR,GAAOrD,IACVA,MAAK6oR,UAAQ7oR,KAAW6oR,QAAG9hN,QACxB/mE,KAAC6oR,QAAUjyJ,c7aq99DT52H,K6ap99DJ6oR,QAAU7oR,KAAAgiR,QACZrnQ,UAAA,iBAAAtX,GAAAmX,IAAAhP,kB7as99DE+7Q,E6ap79DFjrR,UAAA0lR,MAAA,WA/BA,GAAI3+Q,GAAMrD,I7as99DJ,O6ar99DNA,MAAAoa,KAAOwgB,SAAU,GACf56B,KACAiI,KAAA+5Q,QACCvhF,KAAK/lM,OAAK+8M,GAAe,oBAAA2xE,G7aq99DlB,M6ap99DP/lR,GAAM+W,KAAKwgB,SAAE,GACZwuP,GACA/lR,EAAAmkR,MAAW/wQ,KAAC,cAAoBpT,EAAA2kR,sBAC9B3kR,EACA8W,MAAA8sQ,eACCxmF,KAAI/lM,OAAO+8M,GAAA,oBAAA4xE,G7am99DA,M6al99DVA,GACEhmR,EAAK6+Q,WACLzhF,KAAK/lM,OAAK+8M,GAAc,sBAErB,MADHp0M,GAAA+W,KAAOwgB,SAAU,GACdv3B,EAAA4uJ,KAAA29F,YAENvsP,EAAA+W,KAAOwgB,SAAU,GAElBv3B,EAAA4uJ,KAAA29F,WACCl1P,OAAK+8M,GAAQ,cAAoBxlD,GAIlC,MAHC5uJ,GAAKywB,QAAK80P,gBAAe32H,EAAA5uJ,EAAA4E,KAAA23Q,QAAAxN,GAAA,EAAA5gG,SACzBnuK,EAAA+W,KAAWwgB,SAAC,IAEb,OAGHv3B,EAAAmkR,MAAO/wQ,KAAA,qBAAUpT,EAAA4kR,mBAElBvtR,OAAAsuL,GAAA,WAEFtuL,OAAA+8M,GAAA,oBAAA/9L,GAAA,MAAArW,GAAA4vC,IAAAuvL,WAAAn/N,EAAA4E,KAAAqW,UAAAjb,EAAA4E,KAAA23Q,SAAAn/E,KAAA/lM,OAAA+8M,GAAA,cAAAlxJ,GAAA,MAAA7sC,U7ag99DE6tQ,E6ah89DFjrR,UAAA4lR,SAAA,WAbA,GAAI7+Q,GAAMrD,I7ag99DJ,O6a/89DNA,MAAAoa,KAAOwgB,SAAU,GACf56B,KACAiI,KAAAi6Q,WACCzhF,KAAK/lM,OAAK+8M,GAAe,oBAAA6xE,G7a+89DlB,M6a989DPjmR,GAAI+W,KAAAwgB,SAAW,GACd0uP,GACAjmR,EAAAmkR,MAAO/wQ,KAAA,kBAASpT,EAAA2kR,sBAChBttR,OAAAsuL,GAAA,UAED3lL,EAAAmkR,MAAO/wQ,KAAA,wBAAUpT,EAAA4kR,mBAElBvtR,OAAAsuL,GAAA,a7a+89DAu+F,E6a389DqBjrR,UAAYmsR,aAAW,SAAcc,G7a689DtD,I6a389DL,GADDC,OAAoBD,GAAQA,EAAKrJ,QAAW,YAAWqJ,GAAArJ,UAAAqJ,EAAArJ,OAAA/C,UAClD13Q,EAAS,EAACA,EAAOzF,KAAMynR,KAAOppR,OAACoH,IAClCzF,KAAIynR,KAAKhiR,GAAKgkB,MAAO3rB,QAAQ80Q,GAAkBwK,OAAA,GAC9Cp9Q,KAAKynR,KAAKhiR,GAAO40D,UAAWmvN,IAC5BxpR,KAAKynR,KAAIhiR,GAAA40D,SAAemvN,EACxBxpR,KAAAwa,IAAAhP,iB7ag99DD+7Q,E6ap89DkBjrR,UAAAmtR,oBAAA,SAAAnlP,G7aq89Dd,O6ap89DLA,EAAK7zB,M7aq89DI,I6ap89DR,YACA6zB,EAAKuxE,iBACL71G,KAAKsoR,qBAAsB,EAC3BtoR,KAAKuoR,eAAiBjkP,EAAKolP,QAC3B1pR,KAAAwoR,eAAMxoR,KAAA2pR,iBAAAzgR,MACP,M7aq89DS,K6ap89DR,Y7aq89DY,I6ap89DXlJ,KAAAsoR,oBACD,MACAhkP,GAAKuxE,iBACL71G,KAAKooR,cAAapoR,KAAKwoR,gBAAAlkP,EAAAolP,QAAA1pR,KAAAuoR,gBAAA,KACvBvoR,KAAKqoR,WAAI,KACTroR,KAAAwa,IAAMhP,cACP,M7aq89DS,K6ap89DR,UACA84B,EAAKuxE,iBACL71G,KAAAsoR,qBAAM,I7a289DNf,E6ap89DmBjrR,UAAKstR,oBAAA,SAAAC,GAC1B7pR,KAAKooR,cAAa,KAClBpoR,KAAKqoR,WAAI,GAAcwB,EACvB7pR,KAAAwa,IAAAhP,eAlLD,IAAAiR,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAoLA,O7aq89DGgqQ,KACIzsR,OAAOM,GAAsB,aAAG,qBAChCosR,GAAyC,cAAe1sR,S6atn+DtB6sR,EAAAjrR,UAAA,qB7awn+DtC6qR,IACIzsR,OAAOM,GAAoB,WAAGorR,IAC9BgB,GAAyC,c6a1n+DgD,mBAAA3qQ,MAAA,KAAA2pQ,SAAA3pQ,GAAA/hB,SAgJhG6sR,EAAAjrR,UAAA,2B7a4+9DG6qR,I6a7+9DFzsR,OAAAM,GAAA,cAAa,aAAY,W7a++9DnBN,OAAOM,GAAuB,cAAG,WAAY,WAC7CosR,GAAyC,cAAezjO,UACxDyjO,GAAyC,qBAA4F,mBAA9D1qQ,EAA6B,mBAAjBotQ,eAAgCA,eAAgCptQ,GAAMhiB,SACzJ0sR,GAAyC,wBAAqB,K6ahq+DzDG,EAA0BjrR,UAAA,4B7akq+DnCirR,E6axq+DHJ,I7ayq+DOzsR,O6axq+DPM,GAAU,YACV4V,SAAU,sBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,S7a0q+DM2nQ,GAAsC,EAAG3sR,OAAOM,GAAiB,QAAGmiJ,G6apo+D7D,WArCFiqI,GA8MZ,wCAAAzqQ,MAAA,KAAAqhQ,SAAArhQ,GAAAjiB,OAAA,mBAAAkiB,EAAA,mBAAAmtQ,sBAAAntQ,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAulN,SAAAvlN,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA2pQ,SAAA3pQ,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAuiI,GAAA,GAAAA,GAAA,IAAAviI,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAA8pQ,SAAA9pQ,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAooK,GAAA,sBAAAA,GAAA,uBAAApoK,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAqiI,GAAA,GAAAA,GAAA,IAAAriI,GAAAziB,UAAD6sR,MCnOayC,GAAc,GAAGhvR,IAAI,eAAc,iBACnCivR,GAAsB,GAAAjvR,IAA0C,iCAChEkvR,GAAA,GAAqBlvR,IAAO,kCAC5BmvR,GAAwB,GAAInvR,IAAA,eAAuB,yB9aws+D5DovR,GAAwB,GAAIpvR,IAAyB,eAAE,yBAGvDqvR,GAA0CrqR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G+a/s+DhEkxQ,GAAA,W/amt+DI,Q+ajt+DHC,KACAvqR,KAAAwqR,SAAA,M/amt+DGD,G+att+DHF,IACY3vR,OAAAM,GAEZ,eAADuvR,M/a2t+DIE,GAA2CzqR,MAAQA,KAAKuY,WAAc,WACtE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF8xQ,GAA4C1qR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DuxQ,GAA4C3qR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGkxQ,GAAyC5qR,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GACxF,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,Kgb7u+DXq3F,GAAA,SAAAjxQ,Ghbqv+D5C,Qgb3u+DHkxQ,GAOOl0I,EAAQt8H,EAAAC,EACdwwQ,GAPgC,GAAA1nR,GAAIuW,EAAQpd,KAAAwD,KAAAsa,EAAAC,IAAAva,IAO5C,OANOqD,GAAAuzI,KAAMA,EACNvzI,EAAAiX,SAEAjX,EAAAkX,YAA8BA,Ehb2u+D/BlX,EAAM0nR,KAAOA,Egbxu+DnB1nR,EARDonR,GAC6CK,EAIPlxQ,Ghb8u+DnClf,OAAOI,egbzv+DVgwR,EAAAxuR,UAAA,Qhb0v+DO0F,Igbzv+DN,Whb0v+DU,Mgbzv+DThC,MAAAiZ,MAAYjZ,MAAK+qR,KAAKP,MACZxqR,KAAK+qR,KAAAP,MAAAxqR,KAAAiZ,KAChBjZ,KAAAiZ,Khb2v+DMxW,YAAY,Egb3v+DlBC,cAAA,GANQ,IAAA+Z,GAAAC,EAAAC,CAFsC,Ohbuw+D5C+tQ,KACIhwR,OAAOM,GAAgB,SACvB2vR,GAAyC,cgbvw+D3BhnQ,SAFTmnQ,EAA0BxuR,UAAA,chb2w+DnCwuR,Egbjx+DHJ,Ihbkx+DOhwR,Ogbjx+DPM,GAAU,YACV4V,SAAU,sBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,Shbmx+DMkrQ,GAAsC,EAAGlwR,OAAOM,GAAiB,QAAGkvR,Kgblx+D/DS,GAoBZ,qBAAAhnQ,OAAA,mBAAAlH,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA2tQ,SAAA3tQ,GAAAjiB,UAADowR,IApBuCztI,GAAA,Ghb0x+DnC2tI,GAAyChrR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gib9x+D/D6xQ,IACCJ,IAaFK,GAAA,WAAuC,QAACC,MAAA,Mjb4x+DpCA,Gibvy+DHH,Ijbwy+DOtwR,Oibvy+DPM,GAAS,Wjbwy+DEqX,Sibty+DV8qI,GAAA,aACAE,GAAA,GAIDjrI,aAAA64Q,GAAiBttR,QACjBqzL,gBAASi6F,GACRr5R,QAAAq5R,MACqCE,Mjb4y+DnCC,GAA+CprR,MAAQA,KAAKuY,WAAc,WAC1E,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFyyQ,GAAgDrrR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DkyQ,GAAgDtrR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Ikbt0+DtD6xQ,GAAA,SAAA3xQ,Glbg1+DhD,Qkb90+DH4xQ,GAOavjR,EAAKuS,EAAMX,EAAAU,EACvBJ,GAPO,GAAA9W,GAAIuW,EAA0Bpd,KAAAwD,KAAAiI,EAAAuS,EAAAX,IAAA7Z,IAOrC,OANUqD,GAAA4E,OACA5E,EAAAmX,IAAKA,EACPnX,EAAAwW,QACDxW,EAAAkX,YAAmBA,Elb+0+DpBlX,EAAM8W,MAAQA,Ekb50+DpB9W,EARD+nR,GACsCI,EAIX5xQ,Glbk1+DxB4xQ,Ekb30+DqBlvR,UAAYmvR,aAAU,SAAAxjR,Glb40+DvCjI,Kkb30+DLma,MAAA+E,OAAYlf,KAAKua,YAAQmE,UAAA,8BACzBgtQ,WAAWzjR,EAAM0nM,SACjBg8E,YAAa1jR,EAAE2nM,UACZg8E,cAAI3jR,EAAA6nM,kBAlBG,IAAArzL,GAAAC,EAAAC,EAAAC,EAAAC,CAAuC,Olbi2+DhD2uQ,Gkb12+DMH,Ilb22+DF3wR,Okb12+DPM,GAAU,YACV4V,SAAU,0BACVE,SAAQ5W,EAAA,Mlb22+DGiX,Qkbz2+DVjX,EAAQ,IACRA,EAAA,OAEAulB,gBAAAzkB,GAAA,wBAAA0kB,SACW4rQ,GAoBZ,wCAAA7uQ,MAAA,KAAAuhQ,SAAAvhQ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAniB,UAAD8wR,IApB2CvG,Ilbk3+DvC4G,GAA6C7rR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gmb73+D/D0yQ,KAEE5oO,KAAM,GAAIxQ,UAAE64O,KACbroO,KAAA,KAAAwtI,WAAA,KAkBFq7F,GAAAD,GAAAluR,OAAA,SAAAwb,GAAA,QAAAA,EAAAs5B,YAAAn2C,IAAA,SAAA6c,GAAA,MAAAA,GAAAs5B,YAAAs5O,GAAA,WAA2C,QAACC,MAAA,Mnby3+DxCA,Gmbt4+DHJ,Inbu4+DOnxR,Ombt4+DPM,GAAS,Wnbu4+DEqX,Smbr4+DV8qI,GAAA,aACAC,GAAW,EAAAoa,SAAAs0H,IACXrkH,GAAA,YACAwoC,GACAi7E,IAID94Q,aAAA25Q,GAAiBpuR,QAChBqzL,gBAAA+6F,MACyCE,Mnb24+DvCC,GAAiDlsR,MAAQA,KAAKuY,WAAc,WAC5E,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFuzQ,GAAkDnsR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DgzQ,GAAkDpsR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iobz6+DrD2yQ,GAAA,SAAAzyQ,Gpbm7+DjD,Qob/6+DH0yQ,GAOarkR,EAAKuS,EAAMX,EAAA4hI,EACvB+0D,GAPO,GAAAntM,GAAIuW,EAA0Bpd,KAAAwD,KAAAiI,EAAAuS,EAAAX,IAAA7Z,IAOrC,OANUqD,GAAA4E,OACA5E,EAAAmX,IAAKA,EACLnX,EAAAwW,QACFxW,EAAAo4I,UAAUA,EAPnBp4I,EAAAmtM,WAAWA,Epbw7+DJntM,EAAMkpR,aAAe,WAAY,YAAa,Sob96+DpDlpR,EARD6oR,GACsCI,EAI7B1yQ,Gpbo7+DN0yQ,Eob96+DoBhwR,UAAAkwR,eAA4B,SAAezE,GACjE,MAAA/nR,MAAAy7I,UAAAgxI,uBAAAzsR,KAAAwwM,WAAA30D,KAAA,+BAAA77I,KAAAiI,KAAAu6Q,SAAA,IAAAuF,EAAA,SAhBW,IAAAtrQ,GAAAC,EAAAC,EAAAC,EAAAC,CAAwC,Opbi8+DjDyvQ,Gob18+DOH,Ipb28+DHzxR,Oob18+DPM,GAAU,YACV4V,SAAU,4BACVE,SAAQ5W,EAAA,Mpb28+DGiX,Qobx8+DVjX,EAAA,KAEAulB,gBAAAzkB,GAAA,wBAAA0kB,SACW0sQ,GAkBZ,wCAAA3vQ,MAAA,KAAAuhQ,SAAAvhQ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA+qJ,GAAA,GAAAA,GAAA,IAAA/qJ,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,UAAD4xR,IAlB4CrH,Ipbi9+DxCyH,GAA+C1sR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gqb79+D/DuzQ,KAEEzpO,KAAM,GAAIxQ,UAAE25O,KACbnpO,KAAA,KAAAwtI,WAAA,KAiBFk8F,GAAAD,GAAA/uR,OAAA,SAAAwb,GAAA,QAAAA,EAAAs5B,YAAAn2C,IAAA,SAAA6c,GAAA,MAAAA,GAAAs5B,YAAAm6O,GAAA,WAA4C,QAACC,MAAA,Mrb09+DzCA,Gqbv++DHJ,Irbw++DOhyR,Oqbv++DPM,GAAS,Wrbw++DEqX,Sqbt++DV8qI,GAAA,aACAC,GAAW,EAAAoa,SAAAm1H,IACXllH,GAAA,YACAwoC,GACAi7E,IAID94Q,aAAAw6Q,GAAiBjvR,QAChBqzL,gBAAA47F,MAC0CE,Mrb4++DxCC,GAA+C/sR,MAAQA,KAAKuY,WAAc,WAC1E,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFo0Q,GAAgDhtR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gsb3g/DZ6zQ,GAAA,SAAArzQ,Gtbih/DhD,QAASszQ,Ksbjh/D6E,cAAAtzQ,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KAAtC,MAApD+sR,IAAAG,EAAAtzQ,Gtboh/DIszQ,Esb7h/DMF,Itb8h/DFtyR,Osb7h/DPM,GAAU,YACV4V,SAAU,+BACVE,SAAQ5W,EAAA,Mtb8h/DGiX,Qsb3h/DVjX,EAAA,KAEAulB,gBAAAzkB,GAAA,wBAAA0kB,UACuFwtQ,IAA9CjI,Itbmi/DvCkI,GAA6CntR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gub1i/D/Dg0Q,KAEElqO,KAAM,GAAIxQ,UAAEu6O,KACb/pO,KAAA,KAAAwtI,WAAA,KAiBF28F,GAAAD,GAAAxvR,OAAA,SAAAwb,GAAA,QAAAA,EAAAs5B,YAAAn2C,IAAA,SAAA6c,GAAA,MAAAA,GAAAs5B,YAAA46O,GAAA,WAA2C,QAACC,MAAA,Mvbui/DxCA,Gubpj/DHJ,Ivbqj/DOzyR,Oubpj/DPM,GAAS,Wvbqj/DEqX,Subnj/DV8qI,GAAA,aACAC,GAAW,EAAAoa,SAAA41H,IACX3lH,GAAA,YACAwoC,GACAi7E,IAID94Q,aAAAi7Q,GAAiB1vR,QAChBqzL,gBAAAq8F,MACyCE,Mvbyj/DvCC,GAA+CxtR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gwbtl/DhEq0Q,GAAA,WAcA,QAACC,MAAA,Mxb8k/DGA,Gwbzl/DYpxR,UAAAo2J,UAAA,SAAAr3H,Gxb0l/DR,Owbzl/DLA,GACA,IAAK,KAAM,MAAO,SAClB,KAAK,KAAM,MAAO,QAClB,KAAK,KAAM,MAAO,SAClB,KAAK,KAAM,MAAO,QAClB,KAAK,KAAM,MAAO,WAClB,yBxb0l/DS,Swbxl/DT,MAAAA,Kxb6l/DCqyP,Ewb3m/DIF,IAEK9yR,OAAAM,GAAA,OAA4B+X,KAcxC,aAAA4/I,MAAA,KAAD+6H,Mxbmm/DIC,GAAiD3tR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gybrn/D/Dw0Q,IACCH,IAMFI,GAAA,WAA8C,QAACC,MAAA,Mzbwn/D3CA,Gyb5n/DMH,Izb6n/DFjzR,Oyb5n/DPM,GAAuB,WACvBoX,aAAkBw7Q,GAAAjwR,QACjB/L,QAAAg8R,GAAAjwR,WAC4CmwR,Mzbmo/D1CC,GAA8C/tR,MAAQA,KAAKuY,WAAc,WACzE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFo1Q,GAA+ChuR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G0bhp/Db60Q,GAAA,SAAAr0Q,G1bsp/D/C,QAASs0Q,K0btp/D4E,cAAAt0Q,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KAAtC,MAAnD+tR,IAAAG,EAAAt0Q,G1byp/DIs0Q,E0blq/DHF,I1bmq/DOtzR,O0blq/DPM,GAAU,YACV4V,SAAU,yBACVE,SAAQ5W,EAAA,M1bmq/DGiX,Q0bhq/DVjX,EAAA,KAEAulB,gBAAAzkB,GAAA,wBAAA0kB,UACsFwuQ,IAA9CjJ,I1bwq/DtCkJ,GAA4CnuR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G2b9q/D/Dg1Q,KAEElrO,KAAM,GAAIxQ,UAAEu7O,KACb/qO,KAAA,KAAAwtI,WAAA,KAoBF29F,GAAAD,GAAAxwR,OAAA,SAAAwb,GAAA,QAAAA,EAAAs5B,YAAAn2C,IAAA,SAAA6c,GAAA,MAAAA,GAAAs5B,YAAA47O,GAAA,WAA0C,QAACC,MAAA,M3byq/DvCA,G2bzr/DHJ,I3b0r/DOzzR,O2bzr/DPM,GAAS,W3b0r/DEqX,S2bxr/DV8qI,GAAA,aACAC,GAAW,EAAAoa,SAAA42H,IACX3mH,GAAA,YACAwoC,GAEAi7E,GACA2C,IAIDz7Q,aAAAi8Q,GAAiB1wR,QACjBqzL,gBAASq9F,GACRz8R,QAAAy8R,MACwCE,M3b6r/DtCC,GAAgCxuR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dq1Q,GAAgCzuR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGg1Q,GAA6B1uR,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GAC5E,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,K4b7t/D1Dm7F,GAEoC,W5bku/DjC,Q4bnu/DwBC,GAAarpN,EAAAiiN,GAC/BxnR,KAAAulE,IAAKA,EALNvlE,KAAAwnR,QACAxnR,KAAAgoR,sBAAsB3xQ,SAAU,gBAAiBvM,QAAS,KAK7D9J,KAAAioR,mBAAA5xQ,SAAA,gBAAAvM,QAAA,K5buu/DF8kR,E4bru/DHtyR,UAsCCuyR,KAAA,SAAAC,GArCA,GAAAzrR,GAAWrD,I5bsu/DL,O4bru/DL,IAAMiiO,IAAgB,oBAAczuM,GACpC,GAIIu7P,GAJEC,EAA2B,gBAAdF,GAGfG,EAA8BH,YAAAI,oBAEjCF,KACAD,EAAS1rR,EAAMkiE,IAAAroE,cAAW,YAC1B6xR,EAASnyR,MAAM+wD,SAAS,WACxBohO,EAASnyR,MAAK6nE,OAAG,IACjBsqN,EAAQh0R,MAAM+zR,EACdzrR,EAAAkiE,IAAAz5D,KAAAqxB,YAAA4xP,IAEAE,IACAF,EAAAD,EAED,IAAI12M,IAAU,C5bou/DL,I4bnu/DR22M,EAAS,CACTA,EAAS5hO,QACT4hO,EAAI95N,Q5bou/DQ,K4bpu/DmCmjB,EAAA/0E,EAAAkiE,IAAA4pN,YAAA,Q5buu/DnC,M4btu/DEv6Q,GAA6C2zB,QAAA5pB,MAAA,uBAAA/J,IAc5D,MAXCwjE,G5bwu/DY/0E,EAAMmkR,MAAM/wQ,KAAK,sBAAuBpT,EAAM2kR,sB4bpu/DvD3kR,EAAMmkR,MAAE/wQ,KAAA,uBAAApT,EAAA4kR,mBACX+G,GACA3rR,EAAAkiE,IAAAz5D,KAAA9O,YAAA+xR,GAEDv7P,EAAEooD,KAAAxD,GACF5kD,EAAAk7H,WAEC,eA9CS,IAAAjyI,GAAAC,CAiDZ,O5buu/DGkyQ,G4bzx/DHJ,IAOE9zR,OAAAM,GAAA,c5box/DK0zR,GAA0B,EAAGh0R,OAAOM,GAAiB,QAAGmiJ,G4bpx/D/B,WANpBsxI,GAiDZ,wCAAAhyQ,EAAA,mBAAAstQ,sBAAAttQ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA4oK,GAAA,sBAAAA,GAAA,uBAAA5oK,GAAAhiB,UAADk0R,M5biv/DIQ,GAA6BpvR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G6bxy/DhEi2Q,GAAA,WAIA,QAACC,MAAA,M7b0y/DGA,G6b5y/DKhzR,UAAOo2J,UAAa,SAAar3H,GACxC,MAAA1X,QAAAypD,aAAAlsC,SAAA7F,EAAA,M7b8y/DEi0P,E6bnz/DHF,IAEY10R,OAAAM,GAIZ,OAAA+X,KAAA,cAADu8Q,M7bqz/DIC,GAA+BvvR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G8b1z/DhEo2Q,GAAA,WAAkC,QAACC,MAAA,M9bi0/D/BA,G8br0/DHF,I9bs0/DO70R,O8br0/DPM,GAAe,WACfoX,cAAUi9Q,IACTz9R,SAAAy9R,OACgCI,M9b40/D9BC,GAA+B1vR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G+bn1/DhEu2Q,GAAA,WAIA,QAACC,MAAA,M/bq1/DGA,G+bv1/DKtzR,UAAYo2J,UAAO,SAAA33J,GAC1B,MAAAL,QAAAusB,KAAAlsB,I/by1/DE60R,E+b91/DHF,IAEYh1R,OAAAM,GAIZ,OAAA+X,KAAA,UAAD68Q,M/bg2/DIC,GAAiC7vR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Ggcr2/DhE02Q,GAAA,WAAoC,QAACC,MAAA,Mhc42/DjCA,Ggch3/DHF,Ihci3/DOn1R,Ogch3/DPM,GAAe,WACfoX,cAAUu9Q,IACT/9R,SAAA+9R,OACkCI,Mhcu3/DhCC,GAAmDhwR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D62Q,GAAmDjwR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC5F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iich1/DzGw2Q,GAC+B,Wjcm1/D5B,Qicn1/DMC,GAAsB31Q,GATrBxa,KAAAwa,MAKFxa,KAAAs9L,YAAoB,GAAAtiM,IAAA,aACpBgF,KAAAowR,OAAQ,GAIXpwR,KAAAqwR,Yjcw1/DF31R,OAAOI,eic73/DVq1R,EAA8G7zR,UAAA,Wjc83/DvG0F,Iicl4/DP,WAAoF,MAAAhC,MAAAqwR,Ujcm4/D7E1tR,Iicl4/DN,SAAK+W,GACL1Z,KAAKqwR,SAAI32Q,EACT1Z,KAAAwa,IAAAhP,gBjco4/DM/I,YAAY,Eicp4/DlBC,cAAA,Ijcu4/DEhI,OAAOI,eicl4/DVq1R,EAA2C7zR,UAAA,Sjcm4/DpC0F,Iicp4/DP,WAAmB,MAAShC,MAAMowR,Qjcq4/D3BztR,IAAK,SAAU+W,GAAK1Z,KAAKowR,OAAS12Q,EAAG1Z,KAAKwa,IAAIhP,gBAC9C/I,YAAY,Eict4/D+CC,cAAA,Ijcy4/D/DhI,OAAOI,eicp4/DVq1R,EAAkD7zR,UAAA,Yjcq4/D3C0F,Iict4/DP,WAAuB,MAAShC,MAAAswR,Wjcu4/DzB3tR,IAAK,SAAU+W,GAAK1Z,KAAKswR,UAAY52Q,EAAG1Z,KAAKwa,IAAIhP,gBACjD/I,YAAY,Eicx4/DsDC,cAAA,Ijc24/DtEhI,OAAOI,eicn4/DVq1R,EAAuF7zR,UAAA,Sjco4/DhF0F,Iicx4/DP,WAA+D,MAAAhC,MAAA+jG,Qjcy4/DxDphG,Iicx4/DN,SAAW+W,GACX1Z,KAAK+jG,OAAIrqF,EACT1Z,KAAAwa,IAAAhP,gBjc04/DM/I,YAAY,Eic14/DlBC,cAAA,Ijc64/DEhI,OAAOI,eic14/DVq1R,EAAA7zR,UAAA,Wjc24/DO0F,Iic14/DN,Wjc24/DU,Mic14/DThC,MAAA+jG,QAAY,QAAY/jG,MAAG+jG,OACnB/jG,KAAM+jG,OAAI08K,KAAS5tQ,GAC3B7S,KAAA+jG,QAAY,OAAW/jG,MAAG+jG,OAChB/jG,KAAC+jG,OAAAw8K,IAAA1tQ,GACZ,Mjc44/DMpQ,YAAY,Eic54/DlBC,cAAA,Ijc+4/DEhI,OAAOI,eic94/DVq1R,EAA4D7zR,UAAA,ejc+4/DrD0F,IAAK,WAAc,MAAO,QAAUhC,MAAK+jG,QACzCthG,YAAY,Eich5/DyCC,cAAA,Ijcm5/DzDhI,OAAOI,eicl5/DVq1R,EAA0D7zR,UAAA,cjcm5/DnD0F,IAAK,WAAc,MAAO,OAAShC,MAAK+jG,QACxCthG,YAAY,Eicp5/DuCC,cAAA,Ijcu5/DvDytR,Eicx4/DwB7zR,UAAAi0R,WAAA,SAAAC,Gjcy4/DpB,Micx4/DL,UAAOA,GACJ,UAAaA,EAAUz9Q,KAC1B,WAAOy9Q,GACD,UAAcA,EAAOz9Q,KAC5B,GAAAy9Q,EAAAz9Q,Mjc04/DEo9Q,Eicv4/D6B7zR,UAAEm0R,eAAA,SAAA59Q,GACjC,GAAIrN,GAAAxF,KAAY0wR,WAAI79Q,EACnB,WAAKrN,IACFxF,KAAAs9L,YAAiB/xL,MAAAk1Q,KAAAj7Q,IACpB,WAAKA,IACNxF,KAAAs9L,YAAA/xL,MAAAg1Q,IAAA/6Q,Kjcy4/DE2qR,Eict4/DuB7zR,UAACo0R,WAAQ,SAAQ79Q,GAC1C,MAAA7S,MAAA2wR,QAAA1oO,KAAA,SAAAl6B,GAAA,MAAAA,GAAAlb,SA7DD,IAAAoK,EA8DA,Ojcw4/DG+yQ,KACIt1R,OAAOM,GAAgB,SACvBi1R,GAAgD,cAAe5zR,OAC/D4zR,GAAgD,qBict8/DtD5zR,SAID8zR,EAAA7zR,UAAA,gBjco8/DG0zR,IACIt1R,OAAOM,GAAgB,SACvBi1R,GAAgD,cAAetsQ,QAC/DssQ,GAAgD,qBicv8/DWtsQ,UAIlEwsQ,EAAA7zR,UAAA,cjcq8/DG0zR,IACIt1R,OAAOM,GAAgB,SACvBi1R,GAAgD,cAAe78Q,SAC/D68Q,GAAgD,qBicx8/DkB78Q,WAIzE+8Q,EAAA7zR,UAAA,iBjcs8/DG0zR,IACIt1R,OAAOM,GAAgB,SACvBi1R,GAAgD,cAAev1R,QAC/Du1R,GAAgD,qBict8/DtDv1R,UAaSy1R,EAAA7zR,UAAA,cjc27/DP0zR,IACIt1R,OAAOM,GAAiB,UACxBi1R,GAAgD,cAAev1R,Sic17/DtEy1R,EAAA7zR,UAAA,sBjc47/DG0zR,IACIt1R,OAAOM,GAAsB,aAAG,kBAChCi1R,GAAgD,cic97/D5B78Q,UArCf+8Q,EAAgC7zR,UAAA,oBjcq+/DzC6zR,Eic9+/DOH,Ijc++/DHt1R,Oic9+/DPM,GAAU,YACV4V,SAAU,6BACVE,SAAQ5W,EAAA,Mjc++/DGiX,Qic5+/DVjX,EAAA,KAEAulB,gBAAAzkB,GAAA,wBAAA0kB,SACWuwQ,GAiEZ,wCAAAhzQ,MAAA,KAAAjiB,GAAA,mBAAAA,GAAA,oBAAAiiB,GAAAviB,UAADy1R,Mjco7/DIS,GAAgD5wR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dy3Q,GAAgD7wR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGo3Q,GAA6C9wR,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GAC5F,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,KkcnggE1Du9F,GACwC,WlcuggErC,QkcvggEwBC,GAAazrN,GACnCvlE,KAAAulE,MlcyggEFyrN,EkctggEsB10R,UAAQo2J,UAAS,SAAc33J,EAASk2R,GlcuggE1D,MkctggELjxR,MAAOulE,IAAIn5B,SAAK4nD,MAASh0F,KAAKulE,IAAMn5B,SAAS4nD,KAAA31F,OAAe,EAC5D2B,KAAAulE,IAAAn5B,SAAA5O,KAAAqG,MAAA7jC,KAAAulE,IAAAn5B,SAAA4nD,MAAAhwD,KAAA,IAAAitP,EAAAl2R,GAEDiF,KAAAulE,IAAAn5B,SAAA5O,KAAA,IAAAyzP,EAAAl2R,EAXW,IAAA0hB,EAYZ,OlcwggEGu0Q,GkcthgEIJ,IAKLl2R,OAAAM,GAAA,OAAA+X,KAAA,gBlcmhgEK+9Q,GAA0C,EAAGp2R,OAAOM,GAAiB,QAAGmiJ,GkcnhgE/C,WAHpB0zI,GAYZ,wCAAAp0Q,EAAA,mBAAAstQ,sBAAAttQ,GAAA/hB,UAADs2R,MlckhgEIE,GAAiDlxR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D+3Q,GAAiDnxR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtG03Q,GAA8CpxR,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GAC7F,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,KmctigE1D69F,GACwC,Wnc0igErC,Qmc1igEwBC,GAAa/rN,GACnCvlE,KAAAulE,Mnc4igEF+rN,EmczigEqBh1R,UAAAo2J,UAAA,SAAAl1H,EAAA9M,Gnc0igEjB,MmczigEL8M,IAAO9M,EACD,eAAmB8M,EAAAqG,MAAA,WAAAG,KAAqBtT,GAAA,sBAC/C,eAAA8M,EAAA,sBAVW,IAAA/gB,EAWZ,Onc2igEG60Q,GmcxjgEIJ,IAKLx2R,OAAAM,GAAA,OAAA+X,KAAA,iBncqjgEKq+Q,GAA2C,EAAG12R,OAAOM,GAAiB,QAAGmiJ,GmcrjgEhD,WAHpBg0I,GAWZ,wCAAA10Q,EAAA,mBAAAstQ,sBAAAttQ,GAAA/hB,UAAD42R,MncqjgEIC,GAAyCvxR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GocjkgE/Do4Q,IACCtB,IAmBFuB,GAAA,WAAuC,QAACC,MAAA,Mpc2jgEpCA,Goc5kgEHH,Ipc6kgEO72R,Ooc5kgEPM,GAAS,Wpc6kgEEqX,Soc3kgEV8qI,GAAW,aACXsqB,GAAA,apc8kgEUr1J,coc3kgEV2+Q,Gpc6kgEcM,Ioc1kgEf7lQ,OAAAgmQ,IACAxgG,gBAASwgG,Gpc4kgEE5/R,Soc1kgEVm/R,GACAM,GACAG,OAEqCE,MpcklgEnCC,GAA4C3xR,MAAQA,KAAKuY,WAAc,WACvE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFg5Q,GAA2C5xR,MAAQA,KAAKwnF,UAAa9sF,OAAOusC,QAAU,SAASxY,GAC/F,IAAK,GAAIZ,GAAGvvB,EAAI,EAAG0Z,EAAInO,UAAUxL,OAAQC,EAAI0Z,EAAG1Z,IAAK,CACjDuvB,EAAIhkB,UAAUvL,EACd,KAAK,GAAI/C,KAAKsyB,GAAOnzB,OAAO4B,UAAUd,eAAegB,KAAKqxB,EAAGtyB,KACzDkzB,EAAElzB,GAAKsyB,EAAEtyB,IAEjB,MAAOkzB,IAEPojQ,GAA6C7xR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D04Q,GAA6C9xR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqcxngEzDq4Q,GAAA,SAAAn4Q,GrciogE7C,QqcxngEHo4Q,GAMO/pR,EAASuS,EAAEX,EAAMo4Q,GALhB,GAAA5uR,GAAIuW,EAA0Bpd,KAAAwD,KAAAiI,EAAAuS,EAAAX,IAAA7Z,IAMrC,OALUqD,GAAA4E,OACA5E,EAAAmX,IAAKA,EACPnX,EAAAwW,QAXTxW,EAAA4uR,UAAiFA,ErcqogE1E5uR,EqcpogEHstR,QAASttR,EAAC4E,KAAS62Q,SAAoF/+H,KACxG18I,EAAG4E,KAAA62Q,SAAA/+H,KAAAmyI,MAAA1mQ,OAAAnoB,EAAA4E,KAAA62Q,SAAA/+H,KAAAoyI,SAYL9uR,EAPDsuR,GACsCK,EAGFp4Q,Grc+ngEjClf,OAAOI,eqctogEVk3R,EAAA11R,UAAA,kBrcuogEO0F,IqcvogEP,WAAuB,GAAAqB,GAAYrD,IAAwF,OAAAA,MAAAiI,KAAAu8Q,aAAAxkR,KAAA2wR,QAAA1oO,KAAA,SAAAl6B,GAAA,MAAAA,GAAAlb,KAAAxP,EAAA4E,KAAAu8Q,aAAA3xQ,KAAA,Mrc2ogEpHpQ,YAAY,Eqc3ogEwGC,cAAA,Irc8ogExHhI,OAAOI,eqc7ogEVk3R,EAAiD11R,UAAgB,sBrc8ogE1D0F,IAAK,WAAc,MAAO,QAAUhC,MAAKoyR,eAAiBpyR,KAAKoyR,eAAeh0Q,KAAO,MACrF3b,YAAY,Eqc/ogEiFC,cAAA,IrckpgEjGsvR,EAA4B11R,UAAU+1R,cAAgB,SAAUp5Q,EAAKle,GqctogEvE,GAAI0hB,EACJzc,MAAKiI,KAAIqqR,sBAAeV,MAAA5xR,KAAAiI,KAAAqqR,uBAAA71Q,OAAAxD,GAAAle,EAAA0hB,IACxBzc,KAAAwa,IAAAhP,gBrcyogEEwmR,EAA4B11R,UAAUi2R,SAAW,SAAUrzR,GAAWc,KAAKiyR,UAAUpD,KAAK3vR,GAASyb,Yqc9pgE1F,IAAA8B,GAAAC,EAAAC,EAAAC,CAAoC,OrcgqgE7Co1Q,GqczqgEHH,Irc0qgEOn3R,OqczqgEPM,GAAU,YACV4V,SAAU,uBACVE,SAAQ5W,EAAA,Mrc0qgEGiX,QqcvqgEVjX,EAAA,KAEAulB,gBAAAzkB,GAAA,wBAAA0kB,SACWoyQ,GAyBZ,wCAAAr1Q,MAAA,KAAAuhQ,SAAAvhQ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA+xQ,SAAA/xQ,GAAAliB,UAADs3R,IAzBwC/M,IrcgrgEpCuN,GAA0CxyR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GscrrgE/Dq5Q,KAEEvvO,KAAM,GAAIxQ,UAAEq/O,KACb7uO,KAAA,KAAAwtI,WAAA,KAsBFgiG,GAAAD,GAAA70R,OAAA,SAAAwb,GAAA,QAAAA,EAAAs5B,YAAAn2C,IAAA,SAAA6c,GAAA,MAAAA,GAAAs5B,YAAAigP,GAAA,WAAwC,QAACC,MAAA,MtckrgErCA,GscpsgEHJ,ItcqsgEO93R,OscpsgEPM,GAAS,WtcqsgEEqX,SscnsgEV8qI,GAAA,aACAC,GAAW,EAAAoa,SAAAi7H,IACXhrH,GAAA,YACAwoC,GACAwqE,GACAyQ,GACAuG,GACA3B,GACAN,IAED15Q,WAAY64Q,IAGZv8Q,aAAAsgR,GAAiB/0R,QAChBqzL,gBAAA0hG,MACsCE,MtcysgEpCC,GAA+C7yR,MAAQA,KAAKuY,WAAc,WAC1E,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFk6Q,GAAgD9yR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GuclvgEZ25Q,GAAA,SAAAn5Q,GvcwvgEhD,QAASo5Q,KucxvgE6E,cAAAp5Q,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KAAtC,MAApD6yR,IAAAG,EAAAp5Q,Gvc2vgEIo5Q,EucpwgEMF,IvcqwgEFp4R,OucpwgEPM,GAAU,YACV4V,SAAU,0BACVE,SAAQ5W,EAAA,MvcqwgEGiX,QuclwgEVjX,EAAA,KAEAulB,gBAAAzkB,GAAA,wBAAA0kB,UACuFszQ,IAA9C/N,Ivc0wgEvCgO,GAA6CjzR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GwcjxgE/D85Q,KAEEhwO,KAAM,GAAIxQ,UAAEqgP,KACb7vO,KAAA,KAAAwtI,WAAA,KAgBFyiG,GAAAD,GAAAt1R,OAAA,SAAAwb,GAAA,QAAAA,EAAAs5B,YAAAn2C,IAAA,SAAA6c,GAAA,MAAAA,GAAAs5B,YAAA0gP,GAAA,WAA2C,QAACC,MAAA,Mxc+wgExCA,Gwc5xgEHJ,Ixc6xgEOv4R,Owc5xgEPM,GAAS,Wxc6xgEEqX,Swc3xgEV8qI,GAAA,aACAC,GAAW,EAAAoa,SAAA07H,IACXzrH,GAAA,YACAwoC,GACAi7E,IAID94Q,aAAA+gR,GAAiBx1R,QAChBqzL,gBAAAmiG,MACyCE,MxciygEvCC,GAA4CtzR,MAAQA,KAAKuY,WAAc,WACvE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF26Q,GAA6CvzR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Do6Q,GAA6CxzR,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iyc7zgEzD+5Q,GAAA,SAAA75Q,Gzcw0gE7C,Qycn0gEH85Q,GAQOzrR,EAASuS,EAAEX,EAAM4hI,EACvB+0D,EAAAyhF,GARO,GAAA5uR,GAAIuW,EAA0Bpd,KAAAwD,KAAAiI,EAAAuS,EAAAX,IAAA7Z,IAQrC,OAPUqD,GAAA4E,OACA5E,EAAAmX,IAAKA,EACLnX,EAAAwW,QACFxW,EAAAo4I,UAAUA,EACVp4I,EAAAmtM,aATTntM,EAAA4uR,UAAUA,EACV5uR,EAAAswR,WAAWtwR,EAAkC4E,KAAK62Q,SAASoT,Mzc80gEpD7uR,EAAMuwR,YAAcvwR,EAAM4E,KAAK62Q,SAASsB,Oycn0gE9C/8Q,EATDiwR,GACsCI,EAI7B95Q,GAQT85Q,EAAAp3R,UAAAkwR,eAAA,SAAuBvuE,GAAO,MAAKj+M,MAAAy7I,UAAgBgxI,uBAASzsR,KAAKwwM,WAAM30D,KAAA,iCAAAoiE,EAAA,UAEvEy1E,EAAAp3R,UAAAu3R,SAAA,SAAShhR,GAAA,MAAgC7S,MAAK2zR,WAAU1rO,KAAK,SAASl6B,GAAS,MAAKA,GAAAlb,Uzck0gEjF6gR,EAA4Bp3R,UAAUi2R,SAAW,SAAUrzR,GAAWc,KAAKiyR,UAAUpD,KAAK3vR,GAASyb,Yyct1gE1F,IAAA8B,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAoC,Ozcw1gE7C42Q,Gycj2gEHH,Izck2gEO74R,Oycj2gEPM,GAAU,YACV4V,SAAU,uBACVE,SAAQ5W,EAAA,Mzck2gEGiX,Qyc/1gEVjX,EAAA,KAEAulB,gBAAAzkB,GAAA,wBAAA0kB,SACW8zQ,GAsBZ,wCAAA/2Q,MAAA,KAAAuhQ,SAAAvhQ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA+qJ,GAAA,GAAAA,GAAA,IAAA/qJ,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA6xQ,SAAA7xQ,GAAApiB,UAADg5R,IAtBwCzO,Izcw2gEpC6O,GAA0C9zR,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G0c52gE/D26Q,KAEC7wO,KAAA,GACAxQ,UAAA+gP,KAGAvwO,KAAA,KAAAwtI,WAAA,KAqBFsjG,GAAAD,GAAAn2R,OAAA,SAAAwb,GAAA,QAAAA,EAAAs5B,YAAAn2C,IAAA,SAAA6c,GAAA,MAAAA,GAAAs5B,YAAAuhP,GAAA,WAAwC,QAACC,MAAA,M1cy2gErCA,G0c13gEHJ,I1c23gEOp5R,O0c13gEPM,GAAS,W1c23gEEqX,S0cz3gEV8qI,GAAA,aACAC,GAAW,EAAAoa,SAAAu8H,IACXtsH,GAAA,YACAwoC,GACAwqE,GACAyQ,GACA4E,GACA2B,IAED37Q,WAAY64Q,IAGZv8Q,aAAA4hR,GAAiBr2R,QAChBqzL,gBAAAgjG,MACsCE,M1c+3gEpCC,GAA4Cn0R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dg7Q,GAA4Cp0R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2ct6gEzG26Q,GAG0B,W3c66gEvB,Q2c/6gEMC,GAAc37P,EAAA62C,EAAA52C,GACd54B,KAAA24B,OAAOA,EACP34B,KAAAwvE,UACJxvE,KAAA44B,O3ci7gEF07P,E2cj6gEFh4R,UAAA0pL,YAAA,SAAAnsK,EAAA80C,GAbA,GAAMtrD,GAAOrD,KACT4/Q,EAAO/lQ,EAAQ+xD,OAAS,E3cg7gEtB,O2c/6gEM,OAAXg0M,GAA0B,MAAd5/Q,KAAW44B,KAAGta,UAChBte,KAACu0R,cACVv0R,KACAwvE,QAAAgzJ,WAAAxiO,KAAI44B,KAAAta,UAAIshQ,GACPn/E,KAAK/lM,OAAQ+8M,GAAe,cAAA+mB,G3c+6gErB,M2c96gENA,IAAOA,EAAK8I,YAEZ5sO,OAAO6rR,GAAK,GAAA/nD,IAGbn7N,EAAAmkO,iBAAAo4C,GAJIv8Q,EAAAkxR,kB3co7gELD,E2c56gEoBh4R,UAASi4R,YAAW,WAE1C,MADAv0R,MAAA24B,OAAYgC,UAAC,oBACb,G3c86gEE25P,E2c36gEoBh4R,UAASkrO,iBAAmB,SAAAo4C,GAElD,MADA5/Q,MAAA24B,OAAYgC,UAAC,iBAAAilP,EAAAxN,GAAA,EAAAoiB,gBACb,EAhCW,IAAA/3Q,GAAAC,EAAAC,CAkCZ,O3c46gEG23Q,G2c/8gEHH,I3cg9gEOz5R,OAAOM,GAAqB,c2c/8gEvBo5R,GAkCZ,wCAAA33Q,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2lN,SAAA3lN,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4rK,GAAA,GAAAA,GAAA,IAAA5rK,GAAAjiB,UAAD45R,M3cq7gEIG,GAA8Cz0R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G4c/9gEhEs7Q,GAAA,WAMA,QAACC,MAAA,M5c+9gEGA,G4cl+gEer4R,UAAYi0L,cAAA,SAAA79I,EAAAkiP,EAAAC,EAAAC,GAC7B,MAAApiP,GAAAu2O,a5co+gEE0L,E4cz+gEHF,IACY/5R,OAAAM,GAMZ,eAAD25R,M5c0+gEII,GAAwD/0R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACvH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D47Q,GAAwDh1R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACjG,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGu7Q,GAAqDj1R,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GACpG,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,K6cp/gE1D0hG,GAImD,W7cy/gEhD,Q6c5/gEMC,GAAUtoI,EAAAuoI,EAAA5kF,EAAA/5K,GACVz2B,KAAA6sJ,KAAKA,EACL7sJ,KAAAo1R,QAC+Bp1R,KAAAwwM,WAAWA,EAC9CxwM,KAAAy2B,M7c8/gEF0+P,E6c/+gEF74R,UAAA4qB,QAAA,SAAAmuQ,EAAA1mO,GAZA,GAAAtrD,GAAYrD,I7c6/gEN,O6c5/gEJA,MACA6sJ,KAAA7qJ,IAAAhC,KAAAwwM,WAAI30D,KAAA77I,KAAAy2B,MACHgqK,KAAI/lM,OAAA+8M,GAAA,cAAA/qK,G7c4/gEG,I6c1/gENrpC,EAAA+xR,MAAA5K,MAAA99O,EAAAogH,O7c6/gEM,M6c5/gEN7vJ,GAEA,MADAsrC,SAAO5pB,MAAK1hB,GACZoG,EAAA+xR,MAAA5K,MAGD,MAAAnnR,GAAA+xR,MAAA5K,SArBQ,IAAA/tQ,GAAAC,EAAAC,CAuBZ,O7c6/gEGw4Q,G6crhhESJ,IAOVr6R,OAAAM,GAAA,c7cghhEKi6R,GAAkD,EAAGv6R,OAAOM,GAAiB,QAAGmvR,K6cthhE3E6K,GAuBZ,wCAAAv4Q,MAAA,KAAAirJ,GAAA,GAAAA,GAAA,IAAAjrJ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA4tQ,SAAA5tQ,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA2iI,GAAA,GAAAA,GAAA,IAAA3iI,GAAAjiB,OAAAipB,UAADwxQ,M7cughEIG,GAAmDt1R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dm8Q,GAAmDv1R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC5F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtG87Q,GAAgDx1R,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GAC/F,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,K8cvihE1DiiG,GAGmD,W9c4ihEhD,Q8c9ihEMC,GAAU7oI,EAAA2jD,EAAA/5K,GACVz2B,KAAA6sJ,OAC+B7sJ,KAAAwwM,WAAWA,EAC9CxwM,KAAAy2B,M9cgjhEFi/P,E8c7ihEwBp5R,UAAW4qB,QAAU,SAAKmuQ,EAAA1mO,G9c8ihE9C,M8c7ihEJ3uD,MACA6sJ,KAAA7qJ,IAAAhC,KAAAwwM,WAAI30D,KAAA77I,KAAAy2B,MACHgqK,KAAI/lM,OAAa+8M,GAAK,cAAA/qK,GACtB,GAAI49L,GAAA,I9c6ihEG,K8c3ihEN,GAAAlxN,GAAQszB,EAAEogH,MACVw9E,GAAAlxN,EAAAmd,a9c8ihEM,M8c7ihENt5B,GAEA,MADAsrC,SAAO5pB,MAAM1hB,GACbqtO,EAGD,MAAAA,MAtBQ,IAAA7tN,GAAAC,CAyBZ,O9c6ihEGg5Q,G8cvkhEOJ,IAMR56R,OAAAM,GAAA,c9cmkhEKw6R,GAA6C,EAAG96R,OAAOM,GAAiB,QAAGovR,K8cxkhEtEmL,GAyBZ,wCAAA94Q,MAAA,KAAAirJ,GAAA,GAAAA,GAAA,IAAAjrJ,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA4iI,GAAA,GAAAA,GAAA,IAAA5iI,GAAAhiB,OAAAipB,UAAD+xQ,MChCAC,GAAA,WAUA,QAACA,MAAA,M/cglhEGA,G+ctlhEFxzQ,OAAa,SAASyzQ,EAAOn/P,GAC7B,OAAAm/P,EAAAC,SAAA,KAAAD,EAAAj4R,OAAA,GAAAi4R,IAAAn/P,EAAAy/O,WAAA,KAAAz/O,EAAA,IAAAA,I/cwlhEEk/P,E+crlhEFp5R,IAAO,SAASq5R,EAAAE,GAChB,MAAAA,GAAAv5R,IAAA,SAAA6+B,GAAA,MAAAu6P,GAAAxzQ,OAAAyzQ,EAAAx6P,MACDu6P,K/c2lhEGI,GAAgD/1R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D48Q,GAAgDh2R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGu8Q,GAA6Cj2R,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GAC5F,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,KgdrmhE1D0iG,GAGgC,Whd0mhE7B,Qgd5mhEwBC,GAAa5wN,EAAA6wN,EAAAC,GACPr2R,KAAAulE,MACDvlE,KAAAo2R,iBAE/Bp2R,KAAKq2R,cAAcA,EAEnBr2R,KAAA68B,IAAA84P,GAAAxzQ,OAAAniB,KAAAo2R,eAAAp2R,KAAAq2R,ehd4mhEEF,EgdtkhEF75R,UAAA4qB,QAAA,SAAAmuQ,EAAA1mO,Ghd0khEM,Igd1mhEL,GAHKtrD,GAAOrD,KACPxC,EAAAwC,KAAWulE,IAAG5e,qBAAK,QAAqB,GAC9C2vO,EAAkB94R,EAAEmpD,qBAAoB,UACjClhD,EAAO,EAAGA,EAAA6wR,EAAsBj4R,OAAEoH,IAAA,CACxC,GAAIvG,GAAOo3R,EAAa9wR,KAAOC,Ehd2mhEtB,IgdzmhERvG,GAAW,OAACA,MAAA29B,MAAA78B,KAAA68B,IACZ,Shd4mhEI,MgdvmhEL,IAAMolM,IAAkB,oBAAAp0M,GACxB,GAAA4O,GAAWxhC,SAAGiC,cAAkB,SAChCu/B,GAAOhsB,KAAK,kBACZgsB,EAAOK,OAAQ,EACfL,EAAO0wM,OAAO,EACd1wM,EAAO85P,QAAA,QACP95P,EAAOthC,iBAAiB,QAAQ,SAAA8B,GAAA,MAAA4wB,GAAAlP,MAAA1hB,KAAA,GhdwmhEvBw/B,EgdtmhENthC,iBAAW,kBACb0yB,EAAE+tD,MAAA,GACA/tD,EAAA6gI,aACH,GAEAjyH,EAAKI,IAAAx5B,EAAYw5B,IAOfr/B,EAAA2/B,YAAAV,KA9CQ,IAAAhgB,EAkDZ,Ohd+lhEG05Q,GgdlphEHJ,IAMEr7R,OAAAM,GAAA,cACAi7R,GAAA,EAAAv7R,OAAAM,GAAA,QAAOmiJ,GAAA,WACP84I,GAAA,EAAAv7R,OAAAM,GAAA,QAAOivR,Khd8ohEFgM,GAA0C,EAAGv7R,OAAOM,GAAiB,QAAGgvR,KgdrphEnEgM,GAkDZ,wCAAAv5Q,EAAA,mBAAAstQ,sBAAAttQ,GAAA/hB,OAAAipB,iBAADwyQ,Mhd2mhEIK,GAAoCx2R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Gqa1ohE/Dq9Q,KAEE1/H,QAASkzH,GAAevwF,SAAU,6CAClC3iC,QAASizH,GAA2BtwF,SAAA,cACpC3iC,QAASmzH,GAAAxwF,SAAuB,0CAChC3iC,QAASozH,GAAuBzwF,SAAU,iCAE5C3iC,QAAAqzH,GAAA1wF,SAAA,2BACA26F,GAEAK,GACAwB,GACAhB,GAEAO,GACAha,GACAuC,GACA+I,GACAnK,GAEC0N,IAGDoM,IACApP,GACClB,IAGDuQ,KAECzzO,KAAA,GACA8iI,aAAaquG,IACb9jG,eAAOmkG,IraoqhEDxtQ,SqanqhEL8zP,MACAA,GAACJ,GAAuBgc,UAASV,GACjClb,GAACJ,GAAuBic,WAAY3B,GraoqhE3Bla,GqanqhETJ,GAAArkP,cAAAk/P,GACDza,IACAtoO,UAAU40O,GraoqhEJv6Q,WqalqhEHm2C,KAAMy3N,GAAmB+M,QAAQxY,aAAc,WAAE,MAAMof,KAAArmR,MAAiCgzQ,SAAIL,GAAC+C,MAA2B,QAAG1C,MAC3H/3N,KAAMy3N,GAAmBiN,SAAO1Y,aAAc,WAAM,MAAAkkB,KAA8BnrR,MAAAizQ,MAAIA,GAACN,GAA8B+C,MAAO,QAAAzC,MAC5Hh4N,KAAMy3N,GAAmB18D,MAAOixD,aAAc,WAAM,MAAA+kB,KAA0BhsR,MAAIkzQ,MAAIA,GAACP,GAAuB+C,MAAO,QAAOxC,MAC5Hj4N,KAAMy3N,GAAmBkN,MAAA3Y,aAAU,WAAc,MAAMyjB,KAAA1qR,MAA2BmzQ,MAAMA,GAAIR,GAAC+C,MAAsB,QAAQvC,MAC3Hl4N,KAAMy3N,GAAmBpkO,SAAU24N,aAAc,WAAM,MAAAoe,KAA6BrlR,MAAIozQ,MAAIA,GAACT,GAAuB+C,MAAO,QAAOtC,MAClIn4N,KAAMy3N,GAAmBmN,SAAS5Y,aAAc,WAAE,MAAM8c,KAA4B/jR,MAAEqzQ,MAAIA,GAAIV,GAAC+C,MAA2B,QAAQrC,MAGlIp4N,KAAMy3N,GAAgBoN,UAAA7Y,aAA4B,WAAW,MAAQ2d,KAAA5kR,MAAAszQ,SAAAX,GAAA+C,MAAA,MAAApC,MACrEr4N,KAAM,GAAIwtI,WAAYiqF,GAAE+M,QAA0B/2F,UAAE,SACtDztI,KAAA,KAAAwtI,WAAAiqF,GAAA+M,YAIDxkO,KAAA,KAAAwtI,WAAA,KAqBFomG,GAAA,WAAmC,QAACC,MAAA,MragphEhCA,GqanqhEHP,IraoqhEO97R,OqanqhEPM,GAAS,WraoqhEEqX,SqalqhEV8qI,GAAA,aACAC,GAAW,EAAAoa,SAAAm/H,IACXlvH,GAAA,YACAwoC,GACAi7E,GACAzQ,IAID3kQ,UAAA2gR,GAAY94R,QrakqhEDyU,cACI6yQ,Iqa/phEfz5P,OAAAkrQ,IACA1lG,gBAAS0lG,GACR9kS,QAAA8kS,MACiCK,MrauqhE/BC,GAAM98R,EAAoB,KAkB1B+8R,GAAiCj3R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D89Q,GAAiCl3R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IidnyhEzGy9Q,GAA2C,WjdwyhExC,QidxyhEiBC,GAAA37I,GAA4Bz7I,KAAAy7I,Yjd2yhE7C27I,EidxyhEU96R,UAAUo2J,UAAA,SAAuB33J,GAC7C,MAAAiF,MAAAy7I,UAAA47I,wBAAAt8R,GANW,IAAA0hB,EAOZ,Ojd0yhEG26Q,GidnzhEHH,IjdozhEOv8R,OAAOM,GAAe,OAAK+X,KAAM,aidlzhE5BmkR,GAOZ,wCAAAz6Q,MAAA,KAAAkrJ,GAAA,GAAAA,GAAA,IAAAlrJ,GAAA/hB,UAAD08R,MjdmzhEIE,GAAgCt3R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dm+Q,GAAgCv3R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Ikd/zhEzG89Q,GAA2C,Wldo0hExC,Qkdp0hEiBC,GAAAh8I,GAA4Bz7I,KAAAy7I,Yldu0hE7Cg8I,Ekdp0hEUn7R,UAAUo2J,UAAA,SAAA33J,GACtB,MAAAiF,MAAAy7I,UAAAi8I,+BAAA38R,GANW,IAAA0hB,EAOZ,Olds0hEGg7Q,Gkd/0hEHH,Ildg1hEO58R,OAAOM,GAAe,OAAK+X,KAAM,Ykd90hE5BwkR,GAOZ,wCAAA96Q,MAAA,KAAAkrJ,GAAA,GAAAA,GAAA,IAAAlrJ,GAAA/hB,UAAD+8R,Mld+0hEIE,GAAkC33R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dw+Q,GAAkC53R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Imd31hEzGm+Q,GAA2C,Wndg2hExC,Qmdh2hEiBC,GAAAr8I,GAA4Bz7I,KAAAy7I,Yndm2hE7Cq8I,Emdh2hEUx7R,UAAUo2J,UAAA,SAAwB33J,GAC9C,MAAAiF,MAAAy7I,UAAAs8I,yBAAAh9R,GANW,IAAA0hB,EAOZ,Ondk2hEGq7Q,Gmd32hEHH,Ind42hEOj9R,OAAOM,GAAe,OAAK+X,KAAM,cmd12hE5B6kR,GAOZ,wCAAAn7Q,MAAA,KAAAkrJ,GAAA,GAAAA,GAAA,IAAAlrJ,GAAA/hB,UAADo9R,Mnd22hEIE,GAAmCh4R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Godr3hE/D6+Q,IACAT,GACAL,GACCU,IAMFK,GAAA,WAAkC,QAACC,MAAA,Mpd03hE/BA,God93hEHH,Ipd+3hEOt9R,Ood93hEPM,GAAkB,WAClBoX,aAAa6lR,GAAKt6R,QACjB/L,QAAAqmS,GAAAt6R,WACgCw6R,Mpdq4hE9BC,GAAMl+R,EAAoB,KAI1Bm+R,GAA0Cr4R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dk/Q,GAA0Ct4R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iqd91hEzG6+Q,GAIoC,Wrdq2hEjC,Qqdx2hEMC,GAAsBh+Q,EAAAX,EAAA4c,EAAAw7H,EAAAn+H,EAAAm+P,GACtBjyR,KAAAwa,IAAKA,EACLxa,KAAA6Z,QACA7Z,KAAAy2B,IAAIA,EACJz2B,KAAAiyJ,KAAOA,EACPjyJ,KAAA8zB,QAASA,EArClB9zB,KAAAiyR,Yrd+4hEOjyR,Kqd94hENy4R,mBACAC,UAAM,EACNr8M,KAAK,YACL4hI,MAAA,aACA06E,cAAa,EACbC,aAAA,EACAC,iBAAa,EACbC,WAAW,EACX5wF,WAAA,GAGDloM,KAAAypC,OAAA,SACAzpC,KAAA+4R,aAAiC,EAEzB/4R,KAAAg5R,WAA6B,Krd64hE9Bh5R,Kqd54hENiI,MACAe,MAAM,QACNE,OAAA,QACA+vR,WAAO,uDACP3oQ,MAAA,iBACAjF,SAAA,WACA6tQ,eAAQ,oDACRrmR,GAAA,KACAsmR,WAAA,KACCC,kBAAA,MAGMp5R,KAAAq5R,kBAAiC,GAAK/vQ,KAAAP,MACtC/oB,KAAAs5R,gBAAiC,KASpCt5R,KAAAu5R,gBAAA,Krdq4hEFf,Eqdj3hEFl8R,UAAA+H,SAAA,WAjBA,GAAIhB,GAACrD,Irdo4hECA,Mqdn4hEJ0lR,SAAUhrR,OAAA09R,GAAC,KAAAp4R,KAAAiyJ,KAAAx6I,EAAAzX,KAAA6Z,MAAA+xD,QACJjxD,UAAA,SAASvB,GAChB,GAAIm/I,GAAOn/I,EAAI,GAAAwyD,EAAAxyD,EAAA,Erdo4hEP,Iqdn4hEPm/I,GAAM65G,GAA2B,EAAAv/P,KAAA+4D,GAAA,CACjC,GAAA4tN,GAAat4P,SAAA0qC,EAAgBwmM,GAAmB,EAAAv/P,IAChDxP,GAAIywB,QAAO80P,gBAAiBrwH,EAAQihI,EAAepnB,GAAa,EAAAqnB,WAC/DlhI,GAAKA,EAAav6I,MAAQ,GAAAu6I,EAAO98I,QAAApd,OAAA,Irdo4hEnBgF,Eqdn4hEZ21R,WAAOzgI,EAAA98I,QACP7d,OAAM,SAAAk8J,GAAA,MAAAA,GAAAjnJ,KAAA2mR,IAEJxwP,MACJ3lC,EAAKi2R,gBAAkBj2R,EAAK21R,WAAWU,sBACvCr2R,EAAKk2R,gBAAkBl2R,EAAC21R,WAAA/Y,gBAAA0Z,cACxBt2R,EAAAmX,IAAAhP,oBrdu4hEFgtR,Eqdj4hE0Bl8R,UAAAgI,YAAA,WAC5BtE,KAAA0lR,SAAA9uJ,erdm4hEEl8H,OAAOI,eqdh4hEV09R,EAAAl8R,UAAA,ardi4hEO0F,Iqdh4hEN,WACA,GAAI4pE,IAAU,YAAUE,mBAAuB9rE,KAAKiI,KAAAgxR,UAAY,IAehE,OAd0B,KAAzBj5R,KAAAiI,KAAOgxR,UAAK56R,QAAa2B,KAAAiI,KAAmBgxR,UAAU,IACnDrtN,EAAK50D,KAAK,aAAK80D,mBAAA9rE,KAAAiI,KAAAgxR,UAAA,KAClBj5R,KAAAiI,KAAOqoB,OACJs7C,EAAK50D,KAAK,SAAQ80D,mBAAA9rE,KAAAiI,KAAAqoB,QACrBtwB,KAAAiI,KAAOojB,UACJugD,EAAK50D,KAAK,YAAchX,KAAAiI,KAAAojB,UAC3BrrB,KAAAiI,KAAOixR,gBACJttN,EAAK50D,KAAO,gBAAA80D,mBAAA9rE,KAAAiI,KAAAixR,iBACfl5R,KAAAiI,KAAO4K,IACJ+4D,EAAK50D,KAAK,MAAU80D,mBAAA9rE,KAAAiI,KAAA4K,KACvB7S,KAAAiI,KAAOkxR,YACJvtN,EAAK50D,KAAK,UAAA80D,mBAAiB9rE,KAAAiI,KAAAkxR,aAC9Bn5R,KAAAiI,KAAOmxR,mBACRxtN,EAAc50D,KAAC,cAAe80D,mBAAmB9rE,KAAIiI,KAAAmxR,oBACrDp5R,KAAAs5R,gBAAA,IAAA1tN,EAAA5nC,KAAA,Mrdk4hEMvhC,YAAY,Eqdl4hElBC,cAAA,Irdq4hEEhI,OAAOI,eqdp4hEV09R,EAA4Dl8R,UAAS,mBrdq4hE9D0F,IAAK,WAAc,MAAO,gBAAmBhC,KAAK45R,UAAY,YAAgB55R,KAAKiI,KAAKe,MAAQ,aAAiBhJ,KAAKiI,KAAKiB,OAAS,iFACpIzG,YAAY,Eqdt4hE4LC,cAAA,Irdy4hE5MhI,OAAOI,eqdv4hEV09R,EAA4Cl8R,UAAA,kBrdw4hErC0F,IAAK,WAAc,MAAOhC,MAAKy2B,IAAIolH,KAAK,qCAAuC77I,KAAKq5R,oBACpF52R,YAAY,Eqdz4hE0FC,cAAA,Ird44hE1G81R,Eqd14hEoBl8R,UAAQu9R,sBAAa,SAAAC,GACzC,gBAAQA,GAAqBt6L,erd24hErBs6L,Eqd14hEPt6L,cACHu6L,aAAA/5R,KAAAu5R,gBAAA,SAAAv5R,KAAAg6R,aAAAh6R,KAAAiI,KAAAe,MAAAhJ,KAAAiI,KAAAiB,Srd44hEExO,OAAOI,eqd34hEV09R,EAAAl8R,UAAA,gBrd44hEO0F,Iqd34hEN,WACA,GAAI4gR,IAAKrsP,cAAeC,SAAYC,IAAMz2B,KAAKiI,KAAKgxR,UAAY,MAqBhE,OApBgC,KAA/Bj5R,KAAIiI,KAAAgxR,UAAa56R,QAAmB2B,KAAKiI,KAAKgxR,UAAY,IACvDrW,EAAIrsP,aAAWC,OAAAxf,MAAAyf,IAAAz2B,KAAAiI,KAAAgxR,UAAA,KAClBj5R,KAAIiI,KAAAqoB,QACDsyP,EAAIrsP,aAAc,MAAAv2B,KAAAiI,KAAAqoB,OACrBtwB,KAAIiI,KAAAojB,WACDu3P,EAAIrsP,aAAoB,SAAAv2B,KAAAiI,KAAAojB,UAC3BrrB,KAAIiI,KAAAixR,iBACDtW,EAAIrsP,aAAQ,eAAAE,IAAAz2B,KAAAiI,KAAAixR,kBACfl5R,KAAIiI,KAAA4K,KACD+vQ,EAAIrsP,aAAgB,GAAEv2B,KAAAiI,KAAA4K,IACzB7S,KAAKiI,KAACkxR,aACL,iBAAoBvW,KACjBA,EAAiB,kBACrBA,EAAA,mBAAA5iR,KAAAiI,KAAAkxR,YAEAn5R,KAAKiI,KAACmxR,oBACL,iBAAoBxW,KACjBA,EAAiB,kBACrBA,EAAA,uBAAAqX,WAAA,QAAAC,KAAAl6R,KAAAiI,KAAAmxR,qBAEDjsP,KAAAtuB,KAAAE,UAAA6jQ,Krd64hEMngR,YAAY,Eqd74hElBC,cAAA,Irdg5hEEhI,OAAOI,eqd/4hEV09R,EAA0Cl8R,UAAA,sBrdg5hEnC0F,IAAK,WAAc,MAAO,kCAAuChC,KAAKiI,KAAKe,MAAQ,YAAchJ,KAAKiI,KAAKiB,OAAS,aACpHzG,YAAY,Eqdj5hEkHC,cAAA,Irdo5hElIhI,OAAOI,eqdn5hEV09R,EAAkEl8R,UAAA,yBrdo5hE3D0F,IAAK,WAAc,MAAO,gBAAmBhC,KAAKu5R,gBAAkB,0EAAkFv5R,KAAKg6R,aAAe,gBAC1Kv3R,YAAY,Eqdr5hEyKC,cAAA,Irdw5hEzLhI,OAAOI,eqdt5hEV09R,EAAkDl8R,UAAE,crdu5hE7C0F,IAAK,WAAc,MAAOhC,MAAKm6R,aAAa,OAC5C13R,YAAY,Eqdx5hEiCC,cAAA,Ird25hEjDhI,OAAOI,eqd15hEV09R,EAAkDl8R,UAAA,crd25hE3C0F,IAAK,WAAc,MAAOhC,MAAKm6R,aAAa,KAC5C13R,YAAY,Eqd55hE+BC,cAAA,IAI1C81R,EAAAl8R,UAAA89R,gBAAR,SAAqBl7R,GAAkBc,KAAAiyR,UAAApD,KAAA3vR,GAAAyb,ard45hEpC69Q,Eqd55hEkBl8R,UAAA69R,aAAkB,SAAAE,Grd85hEhC,Wqd75hEY,KAAlBA,IAA+BA,EAAA,IACvB,WAALr6R,KAAKypC,OACLzpC,KAAKs6R,gBACI,Wrd45hEAt6R,Kqd55hERypC,OACA,GAAGzpC,KAAAu6R,mBAAAF,EAAAr6R,KAAAw6R,sBACP,Ird85hEE9/R,OAAOI,eqd35hEV09R,EAA2Cl8R,UAAA,ard45hEpC0F,Iqd75hEP,WAAuB,MAAShC,MAAKiI,KAAKe,Ord85hEnCrG,IAAK,SAAU+W,GAAK1Z,KAAKiI,KAAKe,MAAQ0Q,EAAG1Z,KAAKy6R,2BAC9Ch4R,YAAY,Eqd/5hE8DC,cAAA,Irdk6hE9EhI,OAAOI,eqd/5hEV09R,EAA6Cl8R,UAAA,crdg6hEtC0F,Iqdj6hEP,WAAwB,MAAShC,MAAKiI,KAAMiB,Qrdk6hErCvG,IAAK,SAAU+W,GAAK1Z,KAAKiI,KAAKiB,OAASwQ,EAAG1Z,KAAKy6R,2BAC/Ch4R,YAAY,Eqdn6hEgEC,cAAA,Irds6hEhFhI,OAAOI,eqdn6hEV09R,EAAmDl8R,UAAA,iBrdo6hE5C0F,Iqdr6hEP,WAA6B,MAAShC,MAAKiI,KAAAgxR,Wrds6hEpCt2R,IAAK,SAAU+W,GAAK1Z,KAAKiI,KAAKgxR,UAAYv/Q,EAAG1Z,KAAKy6R,2BAClDh4R,YAAY,Eqdv6hEwEC,cAAA,Ird06hExFhI,OAAOI,eqdv6hEV09R,EAA2Cl8R,UAAA,ardw6hEpC0F,Iqdz6hEP,WAAuB,MAAShC,MAAKiI,KAAKqoB,Ord06hEnC3tB,IAAK,SAAU+W,GAAK1Z,KAAKiI,KAAKqoB,MAAQ5W,EAAG1Z,KAAKy6R,2BAC9Ch4R,YAAY,Eqd36hE8DC,cAAA,Ird86hE9EhI,OAAOI,eqd36hEV09R,EAAiDl8R,UAAA,gBrd46hE1C0F,Iqd76hEP,WAAiC,MAAShC,MAAKiI,KAAAojB,Urd86hExC1oB,IAAK,SAAU+W,GAAK1Z,KAAKiI,KAAKojB,SAAW3R,EAAG1Z,KAAKy6R,2BACjDh4R,YAAY,Eqd/6hE2EC,cAAA,Irdk7hE3FhI,OAAOI,eqd/6hEV09R,EAA0Dl8R,UAAG,sBrdg7hEtD0F,Iqdj7hEP,WAAuC,MAAShC,MAAKiI,KAAAixR,gBrdk7hE9Cv2R,IAAK,SAAU+W,GAAK1Z,KAAKiI,KAAKixR,eAAiBx/Q,EAAG1Z,KAAKy6R,2BACvDh4R,YAAY,Eqdn7hEuFC,cAAA,Irds7hEvGhI,OAAOI,eqdn7hEV09R,EAAqCl8R,UAAA,Urdo7hE9B0F,Iqdr7hEP,WAA2B,MAAShC,MAAKiI,KAAM4K,Irds7hExClQ,IAAK,SAAU+W,GAAK1Z,KAAKiI,KAAK4K,GAAK6G,EAAG1Z,KAAKy6R,2BAC3Ch4R,YAAY,Eqdv7hE+DC,cAAA,Ird07hE/EhI,OAAOI,eqdv7hEV09R,EAAqDl8R,UAAA,kBrdw7hE9C0F,Iqdz7hEP,WAAmC,MAAShC,MAAKiI,KAAAkxR,Yrd07hE1Cx2R,IAAK,SAAU+W,GAAK1Z,KAAKiI,KAAKkxR,WAAaz/Q,EAAG1Z,KAAKy6R,2BACnDh4R,YAAY,Eqd37hE+EC,cAAA,Ird87hE/FhI,OAAOI,eqd37hEV09R,EAA+Cl8R,UAAoB,yBrd47hE5D0F,Iqd77hEP,WAA0C,MAAShC,MAAKiI,KAAAmxR,mBrd87hEjDz2R,IAAK,SAAU+W,GAAK1Z,KAAKiI,KAAKmxR,kBAAoB1/Q,EAAG1Z,KAAKy6R,2BAC1Dh4R,YAAY,Eqd/7hE6FC,cAAA,Irdk8hE7G81R,Eqd/7hE0Bl8R,UAACo+R,oBAAA,SAAAj9F,EAAA/jL,GAC7B1Z,KAAKiI,KAAAgxR,UAAAx7F,GAAA/jL,EACL1Z,KAAAy6R,2Brdi8hEEjC,Eqd/7hEyBl8R,UAAAm+R,wBAAA,WACrB,UAALz6R,KAAKypC,SACFzpC,KAAKq5R,kBAAe,GAAA/vQ,KAAAP,OACxB/oB,KAAAwa,IAAAhP,gBrdi8hEEgtR,Eqd97hEmBl8R,UAAAq+R,SAAA,WACpB36R,KAAA46R,cAED56R,KAAK66R,cAAI7jR,KAAe,MACxBhX,KAAAwa,IAAAhP,iBrdg8hEEgtR,Eqd97hEqBl8R,UAAYw+R,YAAA,WAC3B,IAAP96R,KAAA66R,cAAOx8R,SAER2B,KAAK66R,cAAI7xP,MACThpC,KAAAwa,IAAAhP,iBrdg8hEE9Q,OAAOI,eqd/7hEV09R,EAAAl8R,UAAA,erdg8hEO0F,Iqd/7hEN,Wrdg8hEU,Gqd/7hETqvM,GAAOrxM,KAAA66R,cAAmBx8R,OAAA,EACxB2B,KAAG66R,cAAA76R,KAAA66R,cAAAx8R,OAAA,GACN,EACA,UAAAgzM,GAAA,KAAAA,EAAAztK,Srdi8hEMnhC,YAAY,Eqdj8hElBC,cAAA,GAlLW,IAAA+Z,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAoLZ,Ordm8hEG07Q,GqdhoiEOH,IrdioiEH39R,OqdhoiEPM,GAAU,YACV4V,SAAU,oBACVE,SAAQ5W,EAAA,MrdioiEGiX,Qqd9niEVjX,EAAA,OAEAulB,gBAAAzkB,GAAA,wBAAA0kB,SACW44Q,GAoLZ,wCAAA77Q,MAAA,KAAAzhB,GAAA,mBAAAA,GAAA,oBAAAyhB,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA2iI,GAAA,GAAAA,GAAA,IAAA3iI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA8pQ,SAAA9pQ,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA2iI,GAAA,GAAAA,GAAA,IAAA3iI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA6xQ,SAAA7xQ,GAAApiB,UAAD89R,Mrdm9hEIuC,GAAuC/6R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GsdhqiE/D4hR,KAGC93O,KAAA,GACAxQ,UAAA6lP,KAGDr1O,KAAA,KAAAwtI,WAAA,KAoBDuqG,GAAAD,GAAAp9R,OAAA,SAAAwb,GAAA,QAAAA,EAAAs5B,YAAAn2C,IAAA,SAAA6c,GAAA,MAAAA,GAAAs5B,YAAAwoP,GAAA,WAAqC,QAACC,MAAA,Mtd2piElCA,Gsd3qiEHJ,Itd4qiEOrgS,Osd3qiEPM,GAAS,Wtd4qiEEqX,Ssd1qiEV8qI,GAAA,aACAC,GAAW,EAAAoa,SAAAwjI,IACXvzH,GAAA,YACAwoC,GACA+mF,GAAA,iBACAkB,IAEDpiR,WAAY64Q,IAGZv8Q,aAAA6oR,GAAiBt9R,QACjBqzL,gBAASiqG,GACRrpS,QAAAqpS,MACmCE,MtdgriEjCC,GAAqCp7R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GudrtiEhEiiR,GAAA,WAIA,QAACC,MAAA,MvdutiEGA,Gud5tiEHF,IACY1gS,OAAAM,GAIZ,eAADsgS,Mvd+tiEIC,GAA2Cv7R,MAAQA,KAAKuY,WAAc,WACtE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF4iR,GAA4Cx7R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DqiR,GAA4Cz7R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,KAe1G,SsarviEC8hQ,GACAA,IAAA,mBAFIA,EAAaA,EAAA,QAGjB,cAQDA,Yta+uiEA,IwdvviEAkgB,IlDQuCC,GAAA,SAAA/hR,GtaiviEnC,Qsa9riEHgiR,GAaCxhR,EAAAE,EAAYC,EAAci1D,EAY1B52C,EAAApe,EAAAX,EAAAo4I,EAAAn+H,EAAAsY,EAAAqvG,GAxBO,GAAAp4I,GAAIuW,EAAapd,KAAAwD,KAAAsa,EAAAC,IAAAva,IACjBqD,GAAA+W,KAAMA,EACN/W,EAAAiX,SACAjX,EAAAkX,cACAlX,EAAAmsE,UACCnsE,EAAAu1B,OACAv1B,EAAAmX,IAAKA,EACLnX,EAAAwW,QACAxW,EAAA4uJ,KAAOA,EACP5uJ,EAAAywB,QAAQA,EACRzwB,EAAA+oC,SAASA,EA5DlB/oC,EAAAo4I,UAAYA,EACZp4I,EAAAw4R,cAAA,EACAx4R,EAAAy4R,qBAAsB,iBAAoB,YAC1Cz4R,EAAA04R,oBAAsB,YAAa,QAAE,WAAmB,KAAE,kBAC1D14R,EAAA24R,qBAAuB,kCta4viEhB34R,Esa3viEN44R,sBACAjzR,MAAQ,EACRE,OAAU,EACVgzR,SAAW,GACXC,UAAW,GACX7rQ,MAAA,GACAjF,SAAA,EACA6tQ,eAAO,GACPrmR,GAAA,EACAsmR,WAAA,GACCC,kBAAA,Ita6viEK/1R,Esa1viEN6uG,OACAlpG,MAAM,IACNE,OAAQ,IACRgzR,SAAO,sDACP5rQ,MAAA,iBACAjF,SAAA,WACA6tQ,eAAQ,oDACRrmR,GAAA,KACAsmR,WAAA,KACCC,kBAAA,MAIF/1R,EAAA+4R,aAAa5gB,GAAgB6gB,OAG7Bh5R,EAAAi5R,cAAgB9gB,GtauviETn4Q,EsatviENk5R,kBACA7D,UAAM,EACNr8M,KAAK,YACL4hI,MAAA,aACA06E,cAAa,EACbC,aAAA,EACAC,iBAAa,EACbC,WAAW,EACV5wF,WAAA,GAoBD7kM,EAAKm5R,gBAAY,GAEjBn5R,EAAKkX,YAAK0zI,mBAAwBtzI,UAAA,WAAU,MAAOtX,GAAGo5R,yBACtDp5R,EAAK+W,KAAK2Z,cAAMpZ,UAAU,WAAe,MAAAtX,GAAKorO,WAE9CprO,EAAiBwW,MAAA5R,KAAA0S,UAAI,SAAM1S,GAAV,MAAA5E,GAAkByb,MAAA7W,ItamuiE7B,KsanuiED,GAAIgxB,GAAI,EAAAxc,EAAApZ,EAAAu1B,KAAAG,SAAAE,EAAAxc,EAAApe,OAAA46B,IAAA,CACHxc,EAAAwc,GAEJyjQ,kBACJr5R,EAAA04R,mBAAA14R,EAAA04R,mBAAAvwQ,OAAAnoB,EAAA24R,sBAEF,MAAA34R,GAzBDk4R,GAE6BK,EAErBhiR,Gta0viELgiR,EsanuiEHt/R,UAUC+H,SAAA,WATA,GAAIhB,GAACrD,IACLA,MAAKy8R,uBACLz8R,KAAK28R,mBtaouiEC38R,KsanuiEJ0lR,SAAUhrR,OAAA09R,GAAC,KAAAp4R,KAAAiyJ,KAAAx6I,EAAAzX,KAAA6Z,MAAA+xD,QACJjxD,UAAA,SAASvB,GAChB,GAAIm/I,GAAAn/I,EAAA,GAAAwyD,EAAAxyD,EAAA,EACHg5P,IAAsC,EAAAv/P,KAAQ+4D,IAAQ2sF,GACtDl1J,EAAAywB,QAAA80P,gBAAArwH,EAAAr3H,SAAA0qC,EAAAwmM,GAAA,EAAAv/P,StauuiED+oR,Esa7tiEYt/R,UAAAgI,YAAc,WAC5BtE,KAAA0lR,SAAA9uJ,eta+tiEEglK,Esa5tiEGt/R,UAAgBmgS,qBAAA,Wta6tiEfz8R,Ksa5tiELulM,gBACExqM,MAAOygR,GAAc6gB,OAAOl9Q,MAAOnf,KAAMua,YAAYmE,UAAU,qCAAqCqhI,KAAM,uBAC3GhlJ,MAAAygR,GAAAohB,QAAAz9Q,MAAAnf,KAAAua,YAAAmE,UAAA,qCAAAqhI,KAAA,ata+tiEA67I,Esa3tiEOt/R,UAAcmyO,OAAA,WACvBzuO,KAAAwa,IAAAhP,gBta6tiEEowR,Esa1tiEGt/R,UAAkBugS,iBAAA,SAAA50R,GACvBjI,KAAK88R,kBACL98R,KAAA23D,Yta4tiEEikO,EsaztiEWt/R,UAAGyqM,SAAA,WAChB/mM,KAAA23D,Yta2tiEEikO,EsaxtiEGt/R,UAAgBygS,eAAkB,WACvC/8R,KAAK67R,cAAe77R,KAAG67R,aACvB77R,KAAK88R,kBACL98R,KAAA23D,Yta0tiEEikO,EsavtiEEt/R,UAAgB0gS,eAAgB,WACtB/8R,OAAS85B,KAAM,cAAA/5B,KAAAi9R,kBAA2C,SAAQj9R,KAAAkyG,MAAelpG,MAAE,YAAAhJ,KAAAkyG,MAAAhpG,OAAA,KACjGjO,SAAA6/I,MAAA,4CAAA96I,KAAAw8R,kBtaytiEEZ,EAAkBt/R,UAAU4gS,sBAAwB,WsattiEtD,GAAIzgR,GAACC,CtawtiEC,OsavtiEL1c,MAAAulM,cAEAvlM,KAAAo8R,cAAU5gB,GAAK6gB,QACP5/Q,KAAKA,EAAAzc,KAAYulM,cAAI,GAAcxlD,OAAO,EAAAtjI,GAClDzc,KAAAo8R,cAAe5gB,GAAgBohB,SACrBlgR,KAACA,EAAA1c,KAAAulM,cAAA,GAAAxlD,OAAA,EAAArjI,GACZ,KALS,Mta8tiEPk/Q,EsattiEQt/R,UAAa2gS,gBAAA,WtautiEjB,MsattiELj9R,MAAAulM,cAEAvlM,KAAAo8R,cAAY5gB,GAAuB6gB,OAC3Br8R,KAAKulM,cAAgB,GAAApmL,MAC7Bnf,KAAOo8R,cAAmB5gB,GAASohB,QACzB58R,KAACulM,cAAA,GAAApmL,MACZ,KALS,Mta6tiEPy8Q,EsartiEUt/R,UAAY89R,gBAAc,WACtC,GAAArL,GAAc9zR,SAAQiC,cAAgB,WACtC6xR,GAASh0R,MAAKiF,KAAAw8R,gBACdvhS,SAAS6Q,KAAKqxB,YAAG4xP,GACjBA,EAAS5hO,QACT4hO,EAAI95N,QtastiEE,KsaptiEKh6D,SAAak0R,YAAe,QtawtiEjC,MsattiELv6Q,GACA2zB,QAAA5pB,MAAA,uBAAA/J,GAED3Z,SAAA6Q,KAAA9O,YAAA+xR,ItawtiEE6M,EsartiEOt/R,UAAcq7D,SAAK,WAC3B33D,KAAAm9R,YAAOt+Q,KAAAE,UAAA/e,KAAAkyG,SAGPlyG,KAAKo8R,cAAA5gB,GAA0B6gB,QAC5Br8R,KAAKo9R,0BACRp9R,KAAKo8R,cAAA5gB,GAA2BohB,SACjC58R,KAAAq9R,6BtastiEEzB,EsantiEet/R,UAAS8gS,wBAAY,WACtC,GAAIE,GAAKt9R,KAAAwvE,QAAc+tN,YAAA7D,sBAAA,aAAA5tN,mBAAA9rE,KAAAkyG,MAAAgqL,SACtBl8R,MAAI67R,eACH77R,KAAGkyG,MAAIiqL,YACJmB,GAAK,cAAWxxN,mBAAA9rE,KAAAkyG,MAAAiqL,YACnBn8R,KAAGkyG,MAAI5hF,QACJgtQ,GAAK,UAAcxxN,mBAAA9rE,KAAAkyG,MAAA5hF,QACtBtwB,KAAGkyG,MAAI7mF,WACJiyQ,GAAK,aAAMt9R,KAAckyG,MAAA7mF,UAC5BrrB,KAAGkyG,MAAIgnL,iBACJoE,GAAK,iBAAQxxN,mBAAA9rE,KAAAkyG,MAAAgnL,iBAChBl5R,KAAGkyG,MAAIr/F,KACJyqR,GAAK,OAAMxxN,mBAAY9rE,KAAAkyG,MAAAr/F,KAC1B7S,KAAGkyG,MAAIinL,aACPmE,GAAA,WAAAxxN,mBAAA9rE,KAAAkyG,MAAAinL,aAEAn5R,KAAGkyG,MAAIknL,oBACPkE,GAAA,eAAAxxN,mBAAA9rE,KAAAkyG,MAAAknL,qBAGFp5R,KAAKw8R,gBAAgB,gBAAec,EAAA,YAA4Bt9R,KAACkyG,MAAAlpG,MAAiB,aAAAhJ,KAAAkyG,MAAAhpG,OAAA,gFAClFlJ,KAAAw9R,cAAAx9R,KAAAy7I,UAAA47I,wBAAAr3R,KAAAw8R,kBtaqtiEEZ,EsaltiEUt/R,UAAY+gS,yBAAyB,WACjD,GAAIza,IAAKrsP,cAAcC,SAAAC,IAAAz2B,KAAAkyG,MAAAgqL,YACtBl8R,MAAI67R,eACH77R,KAAIkyG,MAAAiqL,WACDvZ,EAAIrsP,aAAYC,OAAAxf,MAAAyf,IAAAz2B,KAAAkyG,MAAAiqL,YACnBn8R,KAAIkyG,MAAA5hF,QACDsyP,EAAIrsP,aAAe,MAAAv2B,KAAAkyG,MAAA5hF,OACtBtwB,KAAIkyG,MAAA7mF,WACDu3P,EAAIrsP,aAAqB,SAAAv2B,KAAAkyG,MAAA7mF,UAC5BrrB,KAAIkyG,MAAAgnL,iBACDtW,EAAIrsP,aAAS,eAAAE,IAAAz2B,KAAAkyG,MAAAgnL,kBAChBl5R,KAAIkyG,MAAAr/F,KACD+vQ,EAAIrsP,aAAiB,GAAEv2B,KAAAkyG,MAAAr/F,IAC1B7S,KAAKkyG,MAACinL,aACL,iBAAoBvW,KACpBA,EAAA,kBAEDA,EAAA,mBAAA5iR,KAAAkyG,MAAAinL,YAEAn5R,KAAKkyG,MAACknL,oBACL,iBAAoBxW,KACpBA,EAAA,kBAEDA,EAAA,uBAAAqX,WAAA,QAAAC,KAAAl6R,KAAAkyG,MAAAknL,qBAGF,IAAIqE,GAAmBtwP,KAAAtuB,KAAAE,UAAA6jQ,GAEvB5iR,MAAKw8R,gBAAgB,kCAAKx8R,KAAAkyG,MAAAlpG,MAAA,eAAAhJ,KAAAkyG,MAAAhpG,OAAA,6BAAAlJ,KAAAwvE,QAAA+tN,YAAAtd,gBAAA0Z,cAAA,0EAAA8D,EAAA,eAC1Bz9R,KAAAw9R,cAAA,MtamtiEE5B,EsahtiEQt/R,UAAcwiB,MAAC,SAAA7W,GtaktiEnB,GsajtiENjI,KAAIoa,KAAIwgB,SAAQ,GACV,MAAL3yB,GAAgC,MAAnBA,EAAAs1R,YAGV,KAAC,IAAQ32Q,OAAG,sBta8siEN5mB,MsahtiEDwvE,QAAa+tN,YAAAt1R,EAAAs1R,YAGtBv9R,KAAA23D,YtaktiEEikO,Esa/siEGt/R,UAAkBqgS,iBAAoB,WAC3C38R,KAAAm9R,WAAAt+Q,KAAAE,UAAA/e,KAAAkyG,QtaitiEE0pL,Esa9siEGt/R,UAAkBwgS,gBAAA,WACvB98R,KAAAm9R,WAAA,MtagtiEEvB,Esa7siEYt/R,UAAOohS,eAAA,WACrB19R,KAAAosC,SAAAuxP,OA1PW,IAAAlhR,GAAAC,EAAAC,EAAAC,EAAiBC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAS,Ota08iEnCy+Q,Gsah9iEHJ,Itai9iEO9gS,Osah9iEPM,GAAU,YACV4V,SAAU,sBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW+7Q,GA4PZ,wCAAAh/Q,MAAA,KAAA8iI,GAAA,GAAAA,GAAA,IAAA9iI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAy+Q,SAAAz+Q,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,mBAAAA,GAAA,oBAAA8hB,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAqgI,GAAA,GAAAA,GAAA,IAAArgI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAA0pQ,SAAA1pQ,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAuiI,GAAA,GAAAA,GAAA,IAAAviI,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAigI,GAAA,UAAAA,GAAA,WAAAjgI,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAwqJ,GAAA,GAAAA,GAAA,IAAAxqJ,GAAAziB,UAADkhS,IA5P8Bv+I,GAAA,Gtaw9iE1BugJ,GAAsC59R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACrG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DykR,GAAsC79R,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC/E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iyd3+iEzGokR,GAA0F,Wzdm/iEvF,Qydn/iEiBC,GAAqBjkI,EAAAkkI,EAAAplQ,GAAU54B,KAAA85J,OAAOA,EAAgC95J,KAAAg+R,UAAsBh+R,KAAA44B,OAEhHqlQ,EAAAF,Ezdu/iEGA,Eydt/iEezhS,UAAW4qB,QAAU,SAAQrN,EAAAsnD,Gzdu/iExC,Gydt/iELnhE,KAAIg+R,QAAST,aAAYv9R,KAASg+R,QAAGT,YAAO1qR,IAAAquB,SAAArnB,EAAA+xD,OAAA,Kzd0/iEnC,Iydz/iEG,GAAGtiD,OAAKC,UAAQ,KACbvpB,KAAKg+R,QAAGT,YAAS1jE,WAAA,GAExBokE,EAAcC,4BACrB,MAAAt2G,IAAA,WAAAoB,GAAAhpL,KAAAg+R,QAAAT,aAGF,MAAAv9R,MAAA85J,OAAA0oE,WAAAxiO,KAAA44B,KAAAta,UAAAzE,EAAA+xD,OAAA,IAdM,IAAAqyN,GAAAxhR,EAAAC,EAAAC,CAgBP,OAjBYohR,GAAqBG,4BAAA,GzdygjE9BH,Eyd1gjEHE,EAAYL,Izd2gjELljS,OAAOM,GAAqB,cyd1gjEvB6iS,GAiBZ,wCAAAphR,MAAA,KAAA4lN,SAAA5lN,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2+Q,SAAA3+Q,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4rK,GAAA,GAAAA,GAAA,IAAA5rK,GAAAjiB,UAADqjS,MzdigjEII,GAAoCn+R,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G0dxhjE/DglR,KAECl7O,KAAA,GACAxQ,UAAWipP,GACXz0Q,SAAAq2Q,YAAAO,MAGA56O,KAAA,KAAAwtI,WAAA,KAGD2tG,IAECP,IAGDQ,IACC3C,IAsBF4C,GAAA,WAAmC,QAACC,MAAA,M1d+gjEhCA,G0dnijEHL,I1doijEOzjS,O0dnijEPM,GAAS,W1doijEEqX,S0dlijEVq1J,GAAY,EACZvqB,GAAW,aACXsqB,GAAA,YACAwoC,GACA7yD,GAAA,EAAAoa,SAAA4mI,IACA/gJ,GAAgB,EAChB25I,GAAA,kBAKDlhR,UAAAuoR,GAEC1gS,QACDyU,aAAAksR,GAAiB3gS,QACjBqzL,gBAASstG,GACR1sS,QAAA0sS,MACiCE,M1dqijE/BC,GAAiBvkS,EAAoB,MAIzC,SwdrkjECwhS,GAASA,IAAA,qBAAMA,IAAA,eAAOA,IAAA,iBADXA,EAAYA,EAAA,MAEvB,YAEDA,KAECA,OAFD,IAAAgD,KxdykjEA,SwdxkjECA,GAAMA,IAAA,eAAOA,IAAA,iBAAKA,IAAA,aAAQA,IAAA,mBAAKA,IAAA,aAAMA,IAAA,eAAMA,IAAA,eAAUA,IAAA,uBAASA,IAAA,qBAASA,IAAA,qBAD5DA,EAASA,EAAA,KAEpB,YxdmljEEA,KAAcA,OAIjB,I2dvmjEAC,ICQCC,GAAA,WAAgB,QAACC,MAkPjB,M5dg3iEGA,G4d/ljEkBviS,UAAYwiS,4BAAa,SAAA93P,EAAA+3P,EAAAC,G5dimjEvC,I4dhmjED,GAALC,GAAgBvkS,OAAAusB,KAAK83Q,GAAT9lQ,EAAA,EAAAxc,EAAAzc,KAAAk/R,QAAAl4P,GAAA/N,EAAAxc,EAAApe,OAAA46B,IAAA,CACX,GAAI9f,GAAEsD,EAAIwc,E5dimjED,I4dhmjER9f,EAAApG,KAAM,C5dkmjEM,K4djmjEGksR,EAAAnhS,QAAAqb,EAAApG,MAAA,GACF,CACZ,GAAIpX,GAAEojS,EAAgB5lR,EAAApG,KACJ,OAAjBoG,EAAEshJ,cAAmB,GAAAukI,IACpB7lR,EAAAshJ,aAAY9+J,GACdwd,EAAApe,MAAAY,M5dqmjEDkjS,E4dhmjEiBviS,UAAA6iS,yCAAA,SAAAl3R,GACP,M5dgmjEFA,E4dhmjENm3R,IACe,MAAfn3R,EAAKm3R,GAAGtlI,QACc,MAAtB7xJ,EAAKm3R,GAAGtlI,OAAO9yH,QACX,MAAP/+B,EAAOm3R,GAAAtlI,OAAA9yH,OAAAq4P,kBAE2C,KAA3Cp3R,EAACm3R,GAAOtlI,OAAO9yH,OAAAq4P,aAAoBC,UAC3Cr3R,EAAAm3R,GAAAtlI,OAAA9yH,OAAAq4P,aAAAC,SAAA,I5dkmjEET,E4d/ljEYviS,UAAAijS,6BAAA,SAAAv4P,EAAA/+B,GACd,GAAIu3R,KACJx/R,MAAKy/R,cAAWx3R,EAAQ,GAAAu3R,E5dgmjElB,K4d/ljEL,GAAKE,KAAAF,GACNx/R,KAAA2/R,mBAAA34P,EAAA04P,EAAAF,EAAAE,K5dimjEEb,E4d9ljEiBviS,UAAAsjS,kBAAA,SAAA54P,G5d+ljEb,I4d/ljED,GAAI/N,GAAM,EAAA4mQ,EAAA74P,EAAA/N,EAAA4mQ,EAAAxhS,OAAA46B,IAAA,CACd,GAAIinP,GAAO2f,EAAQ5mQ,EACb,OAALinP,EAAKnzQ,UAAkBmzQ,EAAOnzQ,SAAU1O,OAAA,EACxC2B,KAAA4/R,kBAAA1f,EAAAnzQ,cAEuBlK,UAAfq9Q,GAAQnlR,OAAoB,MAAAmlR,EAAAnlR,OAAA,MAAAmlR,EAAAzlH,eACpCylH,EAAAnlR,MAAAmlR,EAAAzlH,gB5domjEAokI,E4dvkjEFviS,UAAAwjS,UAAA,SAAA94P,GAxBA,GAAI3jC,GAAMrD,I5dimjEJ,I4dhmjEK,MAAVgnC,EACG,QACJ,IAAIzqC,MAAmBypJ,EAAG,GAE1B+5I,IAmBA,O5d6kjEM/4P,G4d/ljEL3pC,QAAW,SAAE9B,GACZA,EAACkuB,QACDu8H,EAAIzqJ,EAACkuB,MAAO,GACXs2Q,EAASvkS,eAAewqJ,KACzB+5I,EAAW/5I,IAAQ88H,WAAQkd,gBAAA,IAC3BD,EAAQ/5I,GAAG88H,QAAA9rQ,KAAAzb,GACXwkS,EAAA/5I,GAAAg6I,eAAA38R,EAAA48R,sBAAA1kS,EAAAkuB,SAAAs2Q,EAAA/5I,GAAAxqJ,eAAA,c5dkmjEId,O4d9ljELusB,KAAO84Q,GAAA1iS,QAAA,SAAAoc,GAAA,MAAAld,GAAAya,MACPjE,KAAK0G,EACL7U,MAAAm7R,EAAWtmR,GAAKqpQ,QAChB1kI,WAAW,EACX8hJ,UAAAH,EAAkBtmR,GAACumR,eALwBG,aAMxC98R,EAAA+8R,qBAAAL,EAAAtmR,QAGJld,GAIDsiS,EAAAviS,UAAA+jS,aAAA,SAA+C9kS,GAAA,OAAYyE,KAAAsgS,cAAmB/kS,IAE9EsjS,EAAAviS,UAAAikS,OAAA,SAAAhlS,GAAY,MAAkCyE,MAAEsgS,cAA0B/kS,I5d2ljEvEsjS,E4d3ljE6CviS,UAAAkkS,YAAgB,SAAAx5P,EAAAy5P,EAAAC,OAAE,KAAAD,cAC5D,KAADC,IAACA,EAAoB,GACzB1gS,KAAmB2gS,oBAAA35P,E5d6ljEb,K4d7ljED,GAAI/N,GAAM,EAAA2nQ,EAAA55P,EAAA/N,EAAA2nQ,EAAAviS,OAAA46B,IAAA,CACd,GAAIinP,GAAO0gB,EAAW3nQ,EAGrBinP,GAAA2gB,cAAS3gB,EAAA1sQ,UAEe,MAAnB0sQ,EAAAnzQ,UAA2BmzQ,EAAEnzQ,SAAQ1O,OAAA,E5d6ljE9B2B,KAAKwgS,YAAYtgB,EAAOnzQ,SAAU0zR,G4d1ljE/CzgS,KAAA8gS,UAAAL,GAAAvgB,EAAAh9N,KAAA,IAAAg9N,EAAAntQ,MAAA8wB,MAAA,KAAAq8O,EAAAnlR,QAED,MAAA0lS,I5d8ljEE5B,E4d3ljEFviS,UAAAqkS,oBAAuD,SAAAI,EAAAC,OAC1C,KAATA,IAAoBA,EAAA,KACxB,IAAIh6P,GAAA+5P,CACM,OAATC,IACDh6P,EAAmBg6P,E5d4ljEb,K4d5ljED,GAAI/nQ,GAAM,EAAAgoQ,EAAAj6P,EAAA/N,EAAAgoQ,EAAA5iS,OAAA46B,IAAA,CACd,GAAIinP,GAAO+gB,EAAQhoQ,EACb,OAALinP,EAAKnzQ,UAAoBmzQ,EAAAnzQ,SAAkB1O,OAAS,E5d6ljExC2B,KAAK2gS,oBAAoBI,EAAY7gB,EAAOnzQ,U4d1ljEzD/M,KAAAkhS,kBAAAH,EAAA,KAAA7gB,EAAAntQ,KAAA,KAAAmtQ,EAAAnlR,S5d+ljEC8jS,E4d3ljEmBviS,UAAQ2jS,sBAAQ,SAAAx2Q,G5d4ljE/B,M4d3ljEE,OAAPA,GAAY,MAAAA,EAAA,GACN,KACPA,EAAA,GAAA3rB,QAAA,e5d6ljEE+gS,E4d1ljEmBviS,UAAQ6kS,qBAAQ,SAAA13Q,G5d2ljE/B,M4d1ljEE,OAAPA,GAAY,MAAAA,EAAA,GACT,KAEJ,QADgBA,EAAI,GAAAoa,MAAO,S5d6ljEzBg7P,E4dzljEYviS,UAAM8kS,mBAAN,SAAa33Q,G5d0ljErB,I4d1ljED,GAAKwP,GAAA,EAAAxc,EAAAgN,EAAA7kB,MAAAq0B,EAAAxc,EAAApe,OAAA46B,IAAA,CACT,GAAI36B,GAAEme,EAAIwc,E5d2ljED,I4d1ljEE,WAAV36B,EAAEyU,KAAc,CAChBzU,EAAAvD,MAAM0uB,EAAA02Q,aAAA12Q,EAAA02Q,aAAA7hS,EAAAm8J,YACN,U5d8ljEAokI,E4dzljEwCviS,UAAA4iS,QAAA,SAAAl4P,G5d2ljEpC,I4d1ljED,GAALq6P,MAASpoQ,EAAI,EAAAqoQ,EAAAt6P,EAAA/N,EAAAqoQ,EAAAjjS,OAAA46B,IAAA,CACZ,GAAIw7J,GAAK6sG,EAAQroQ,EACJ,OAAZw7J,EAAI1nL,UAAoB0nL,EAAA1nL,SAAa1O,OAAW,E5d2ljEpCgjS,E4d1ljEJA,EAAK71Q,OAAQxrB,KAAKk/R,QAAAzqG,EAAA1nL,WACV,OAAX0nL,EAAKhkL,MAAM4wR,EAAArqR,KAAAy9K,GAElB,MAAA4sG,I5d6ljEExC,E4d1ljEkBviS,UAAWilS,iBAAY,SAAAxuR,EAAA9K,G5d2ljErC,I4d1ljEL,GAAI3J,GAAK,EAAGmwB,EAAIxmB,EAAI5J,OAAIC,EAAAmwB,EAAAnwB,I5d2ljEf,G4d1ljER2J,EAAA3J,GAAOyU,MAAQA,EAEZ,MAAS9K,GAAM3J,E5d0ljEd,K4dzljEL,GAAIA,GAAK,EAAGmwB,EAAAxmB,EAAQ5J,OAAEC,EAAAmwB,EAAAnwB,I5d0ljEb,G4dzljER2J,EAAM3J,GAAGyO,SAAQ,CACjB,GAAIpR,GAAGqE,KAAQuhS,iBAAAxuR,EAAA9K,EAAA3J,GAAAyO,S5d0ljEH,I4dzljEJ,MAAPpR,EACD,MAAAA,GAGF,a5d0ljEEkjS,E4dvljE8CviS,UAAAklS,iBAAA,SAAAzuR,EAAA9K,G5dyljE1C,I4dvljEL,GADDtM,GAAU,KACL2C,EAAK,EAAGmwB,EAAIxmB,EAAI5J,OAAMC,EAAAmwB,EAAAnwB,I5dwljEjB,G4dvljER2J,EAAG3J,GAAGyU,MAAQA,EAAA,CACdpX,EAAMsM,EAAA3J,EACN,OAEF,MAAA3C,I5dyljEEkjS,E4dvljE4FviS,UAAAqjS,mBAAkB,SAAA34P,EAAAy6P,EAAA1mS,EAAAs4D,OACvF,KAAzBA,IAAmBA,EAAM,K5dwljEnB,K4dxljED,GAAIp6B,GAAM,EAAAyoQ,EAAA16P,EAAA/N,EAAAyoQ,EAAArjS,OAAA46B,IAAA,CACd,GAAIinP,GAAOwhB,EAAQzoQ,E5dyljEV,I4dxljEH,MAALinP,EAAKnzQ,UAAmBmzQ,EAAOnzQ,SAAU1O,OAAU,EACnD2B,KAAA2/R,mBAAAzf,EAAAnzQ,SAAA00R,EAAA1mS,EAAAmlR,O5d2ljEY,I4dzljEXA,EAAOh9N,KAAK,IAAQg9N,EAACntQ,MAAA0uR,EAAA,CAIrBvhB,EAAInlR,MAAUA,EACbs4D,GAAOA,EAAUwtO,cACjBxtO,EAAA7/C,SAAA,GAGiB,M5dqljEC0sQ,E4drljEfzlH,cAC4B,gBAArBylH,GAAAzlH,cACVylH,EAAOzlH,aAAe38J,QAAO,MAAM,IACnCoiR,EAAAzlH,aAAAylH,EAAAnlR,MAED,U5d0ljED8jS,E4dpljEiBviS,UAAA4kS,kBAAA,SAAAH,EAAA1lM,EAAYtgG,G5dqljEzB,I4drljED,GAAIk+B,GAAM,EAAA0oQ,EAAAZ,EAAA9nQ,EAAA0oQ,EAAAtjS,OAAA46B,IAAA,CACd,GAAIinP,GAAOyhB,EAAY1oQ,EACjB,OAALinP,EAAKnzQ,UAAkBmzQ,EAAOnzQ,SAAU1O,OAAS,E5dsljErC2B,K4dpljERkhS,kBAAOhhB,EAAgBnzQ,SAAIsuF,EAAAtgG,GACb,MAAdmlR,EAAOzlH,cACqB,gBAArBylH,GAAAzlH,cACVylH,EAAOzlH,aAAe38J,QAAAu9F,IAAmB,IACzC6kL,EAAAnlR,MAAAmlR,EAAAzlH,aAAA52H,MAAAw3D,GAAAr3D,KAAAjpC,M5dwljED8jS,E4dnljEcviS,UAAAwkS,UAAA,SAAAttQ,EAAA0vB,EAAAnoD,GAChB,GAAI0e,GAAIypC,EAAC,EACK,IAAbA,EAAI7kD,OACK,MAARtD,IACQ,MAAPy4B,EAAE/Z,G5doljEa+Z,EAAE/Z,GAAK1e,E4djljExBy4B,EAAA/Z,IAAA1e,GAAAywB,OAAAgI,EAAA0vB,EAAA,OAEQ,MAAP1vB,EAAE/Z,KACC+Z,EAAC/Z,OACLypC,EAAKk0D,QACLp3G,KAAA8gS,UAAAttQ,EAAA/Z,GAAAypC,EAAAnoD,K5duljEC8jS,E4dnljEgBviS,UAAYgkS,cAAO,SAAA/kS,G5doljE/B,M4dnljEa,OAAfA,EAAAwR,WACgB,G5dmljETxR,EAAEwR,S4dnljER1O,SACY,M5dmljEF9C,EAAEwR,S4dnljEX,IACN,MAAAxR,EAAAwR,SAAA,GAAAA,Y5dqljEE8xR,E4dlljEgBviS,UAAamjS,cAAA,SAAAp/N,EAAAuhO,EAAAt9L,GAC/B,GAAIr9E,GAAMvsB,OAAQusB,KAAAo5C,GACdpnD,EAAKgO,EAAG,GACRlsB,EAAKslE,EAAUpnD,E5dmljEb,I4dlljES,GAAdgO,EAAA5oB,OACAujS,GAAK3oR,EAAc,IACnBjZ,KAAAy/R,cAAA1kS,EAAA6mS,EAAAt9L,O5dqljES,K4dpljEJ,GAAKrrE,GAAA,EAAAq1H,EAAArnI,EAAAgS,EAAAq1H,EAAAjwJ,OAAA46B,IAAA,CACT,GAAAxf,GAAQ60I,EAAOr1H,EACfl+B,GAAQslE,EAAI5mD,E5dqljEA,K4dpljEXR,IAAIle,GACLupG,EAAAs9L,EAAAnoR,EAAA,IAAAR,GAAAle,EAAAke,K5duljEA4lR,E4dnljEYviS,UAAK8jS,qBAAL,SAAY56R,G5doljEpB,I4dpljED,GAAKyzB,GAAA,EAAAxc,EAAAjX,EAAAs9Q,QAAA7pP,EAAAxc,EAAApe,OAAA46B,IAAA,CACT,GAAI19B,GAAEkhB,EAAIwc,E5dqljED,I4dpljED,WAAP19B,EAAAwX,MAAqBxX,EAAIkV,MAAAiuR,GAAcA,GAAUmD,MAAa,WAAAh/R,UAAAtH,GAAAR,MAAAQ,EAAAR,MAAAQ,EAAAk/J,aAEhE,aACDokI,K5dinjEGiD,IAtB2B5nS,EAAoB,IAGjCA,EAAoB,KAmBsB8F,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACvH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,IAE5D2oR,GAAwD/hS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACjG,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,KAQ1G,S2dz3jECilR,GACAA,IAAA,iBACAA,IAAA,mBAHWA,EAA8BA,EAAA,OAIzC,OAGDA,Y3dw3jEA,I6d14jEyCqD,IFgDxCC,GAAoD,W3d21jEjD,Q2d31jEHC,GAGC13N,GAHmB,GAAAnnE,GAAMrD,IAvB1BA,MAAAwqE,OAASA,EAGTxqE,KAAAgnC,OAAA9sC,EAA2B,MAC3B8F,KAAAmiS,oBAAe,EAEfniS,KAAAoiS,aAAAzD,GASQ3+R,KAAAqiS,kBAAmB,GAAApgE,IAAA,QACnBjiO,KAAAsiS,eAAc,EAEdtiS,KAAAuiS,aAAA,EACAviS,KAAAihR,+BAAkC,EA6RlCjhR,KAAAmhR,kBAAA,E3d6kjEDnhR,K2d5kjENwiS,yBAA2B,SAAEvlS,GAC5BA,EAAAgL,KAAKgjK,aAAc,IACnB5nK,EAAKo/R,YAAAp/R,EAAkB++R,aAAUlhS,MACjCmC,EAAAg/R,kBAAAzmN,KAAAv4E,EAAAo/R,e3d+kjEKziS,K2d3kjEN0iS,eAAgB,SAAQzlS,GACxBoG,EAAKo/R,YAAAp/R,EAAkB++R,aAAUO,OACjCt/R,EAAAg/R,kBAAAzmN,KAAAv4E,EAAAo/R,c3d6kjEMziS,K2d1kjEN4iS,gBAAgB,SAAQ3lS,GACxBoG,EAAKo/R,YAAAp/R,EAAkB++R,aAAUhhS,IACjCiC,EAAAg/R,kBAAAzmN,KAAAv4E,EAAAo/R,cAtSAziS,KAAKw0Q,aAAA,EACLx0Q,KAAA6iS,mBAAA7iS,KAAAqiS,kBAAAvrK,e3do3jEEorK,E2dl3jEa5lS,UAAgDwmS,gBAAA,SAAA97P,G3do3jEzD,O2dn3jEM,KAARA,IAAQA,EAAA,MAGXA,EAAM,CACN,GAAI+7P,GAAE/iS,KAAQgjS,sBAAAh8P,EAAA,eACR,OAAL+7P,IACGA,EAAC,IACL/iS,KAAAijS,mBAAAF,EAAAl/P,MAAA,Q3dm3jECq+P,E2d/2jEmB5lS,UAAA6kF,MAAA,SAAA+hN,GACrBljS,KAAA48B,UAAAsmQ,G3di3jEEhB,E2d92jEuB5lS,UAAAyY,QAAA,WAEzB/U,KAAIw0Q,aAAY,EACN,MAATx0Q,KAAKizC,MACLjzC,KAAKizC,IAAI9xB,OAAO,+BAA2BnhB,KAAAwiS,0BAC3CxiS,KAAKizC,IAAI9xB,OAAO,qBAAqBnhB,KAAM0iS,gBAC3C1iS,KAAAizC,IAAA9xB,OAAA,sBAAAnhB,KAAA4iS,kBAGD5iS,KAAIizC,IAAK,KACO,MAAfjzC,KAAA85J,QACGyjH,QAAOzjH,OAAQ/kJ,QAAA/U,KAAA85J,QAEnB95J,KAAK85J,OAAO,KACZ95J,KAAK+S,KAAA,KACL/S,KAAK++R,YAAA,KACL/+R,KAAAmjS,wBAAA,M3d62jEEjB,E2d12jEW5lS,UAAawc,OAAK,SAAA/F,G3d42jEzB,O2d32jEO,KAATA,IAAiBA,EAAA2oR,GAAA0H,OACpBpjS,KAAA+S,MAAOA,E3d02jEF,C2dt2jEN/S,KAAK+U,UACL/U,KAAI+S,M3dy2jEE,K2dv2jEL/S,KAAK85J,OAAMyjH,QAAWzjH,OAAChhJ,OAAQ9Y,KAAA48B,UAAc58B,KAAAgnC,OAAAhnC,KAAAqjS,YAE7CrjS,KAAKizC,IAAAjzC,KAAA85J,OAAiBmjH,QAAGC,cACzBl9Q,KAAKsjS,oBAKLtjS,KAAKmjS,wBAAuBtkR,KAAAE,UAAa/e,KAAQ++R,aACjD/+R,KAAKujS,kBAAkBvjS,KAAKoiS,aAACO,QAE7B3iS,KAAKwjS,mBAAQxjS,KAAAmiS,oBACbniS,KAAKizC,IAAIvqB,IAAI,+BAA2B1oB,KAAAwiS,0BACxCxiS,KAAKizC,IAAIvqB,IAAI,qBAAqB1oB,KAAM0iS,gBACxC1iS,KAAAizC,IAAAvqB,IAAA,sBAAA1oB,KAAA4iS,iB3do2jEK,M2dn2jEL3lS,GACAsrC,QAAQ5pB,MAAM,+EACd4pB,QAAA5pB,MAAA1hB,GAGD+C,KAAAw0Q,aAAA,I3do2jEE0tB,E2dj2jEa5lS,UAAA0mS,sBAAA,SAAAh8P,EAAAy8P,G3dm2jET,I2dl2jED,GAAL1oS,GAASk+B,EAAM,EAAA4mQ,EAAA74P,EAAA/N,EAAA4mQ,EAAAxhS,OAAA46B,IAAA,CACd,GAAIinP,GAAO2f,EAAQ5mQ,E3dm2jEV,I2dl2jERinP,EAAKntQ,MAAU0wR,EAAM,CACrB1oS,EAAMmlR,EAAAnlR,KACN,O3do2jEQ,G2dl2jEK,MAAbmlR,EAAKnzQ,UAAQmzQ,EAAqBnzQ,SAAQ1O,OAAU,GAE7C,OADPtD,EAAIiF,KAASgjS,sBAAI9iB,EAAAnzQ,SAAA02R,IAEjB,MAGF,MAAA1oS,I3do2jEEmnS,E2dj2jEU5lS,UAAAgnS,kBAAA,W3do2jEN,G2dn2jELtjS,KAAKizC,MACFjzC,KAAK++R,YAAW/+R,KAAAizC,IAAAywP,6BACnB1jS,KAAK++R,Y3dk2jEI,I2dj2jER,GAAKluK,KAAA7wH,MAAY++R,YACnB/+R,KAAA++R,YAAAluK,GAAA7wH,KAAA++R,YAAAluK,GAAAn+G,e3dm2jEEwvR,E2dj2jE0E5lS,UAAaqnS,YAAA,SAAA38P,EAAAj0B,EAAAhY,EAAA6oS,G3dm2jEnF,O2dl2jEM,KAARA,IAAiBA,GAAW,GAC/B5jS,KAAKizC,KAAAjzC,KAAY++R,cAAc6E,GAAA5jS,KAAA++R,YAAAhsR,IAAAhY,GAAA,C3dm2jEtB,G2dl2jETiF,KAAI++R,YAAQhsR,GAAAhY,EACH,yBAARgY,EAIA,MAHA/S,MAAKizC,IAAA4wP,2BAAoB9oS,GACzBiF,KAAKsjS,wBACLtjS,MAAAwqE,OAAOs0N,4BAAA93P,EAAAhnC,KAAA++R,aAAA,EAGR/+R,MAAAizC,IAAA6wP,6BAAA9jS,KAAA++R,e3do2jECmD,E2dh2jEkB5lS,UAAAinS,kBAAA,SAAApiO,GACZ,MAAPnhE,KAAAizC,MAEDjzC,KAAKyiS,YAAAthO,EACLnhE,KAAKqiS,kBAAIzmN,KAAAza,GACTnhE,KAAAizC,IAAA8wP,0BAAA/jS,KAAAoiS,aAAAjhO,M3dk2jEE+gO,E2d/1jE8B5lS,UAAAknS,mBAAA,SAAAzoS,GAChCiF,KAAImiS,mBAAgBpnS,EACZ,MAAPiF,KAAAizC,KAEDjzC,KAAAizC,IAAA+wP,4BAAAjpS,I3di2jEEmnS,E2d91jEkB5lS,UAAA2mS,mBAAA,SAAApmJ,GACZ,MAAP78I,KAAAizC,MAEDjzC,KAAIizC,IAAKgxP,4BAAyBpnJ,GACd,U3d81jEV78I,K2d91jENkkS,eACAlkS,KAAKyiS,aAAaziS,KAAMoiS,aAAKhhS,KACT,GAApBpB,KAAAmkS,aAAkB9lS,QACrBw+I,EAASx+I,OAAA,GACT2B,KAAAizC,IAAAmxP,yBAAApkS,KAAAkkS,eAEDlkS,KAAAmkS,aAAAtnJ,IAAA74G,KAAA,U3dg2jEEk+P,E2d71jEkB5lS,UAAA+nS,aAAA,SAAAtpS,GACZ,MAAPiF,KAAAizC,KAEDjzC,KAAAizC,IAAA6tO,UAAA/lR,I3d+1jEEmnS,E2d51jEkC5lS,UAAAgoS,WAAA,SAAAt9P,EAAAw7O,EAAA8gB,GACpC,GAAIvwR,GAAK2oR,GAAelZ,EACvBxiR,MAAK++R,aAAa,MAAAhsR,IAClB/S,KAAI8Y,OAAA/F,GACHuwR,GACGtjS,KAACwqE,OAAOs0N,4BAAe93P,EAAAhnC,KAAA++R,aAAA,GAC3B/+R,KAAAa,OAAAmmC,GAAA,K3d+1jECk7P,E2d31jEkB5lS,UAAAioS,eAAA,SAAAC,GACZ,MAAPxkS,KAAAizC,MAEDjzC,KAAKykS,UAAAD,EACLxkS,KAAA0kS,oC3d61jEExC,E2d11jEkB5lS,UAAAqoS,eAAA,SAAAC,GACZ,MAAP5kS,KAAAizC,MAEDjzC,KAAKojR,SAAAwhB,EACL5kS,KAAA0kS,oC3d41jEExC,E2dz1jEkB5lS,UAAAuoS,iBAAA,SAAA7rR,GACZ,MAAPhZ,KAAAizC,MAEDjzC,KAAK8kS,WAAA9rR,EACLhZ,KAAA0kS,oC3d21jEExC,E2dx1jEkB5lS,UAAAyoS,oBAAA,SAAAC,GACZ,MAAPhlS,KAAAizC,MAEDjzC,KAAKujR,cAAAyhB,EACLhlS,KAAA0kS,oC3d01jEExC,E2dv1jEkB5lS,UAAA2oS,oBAAA,SAAAC,GACZ,MAAPllS,KAAAizC,MAEDjzC,KAAKwjR,cAAA0hB,EACLllS,KAAA0kS,oC3dy1jEExC,E2dt1jEkB5lS,UAAA6oS,mBAAA,SAAAC,GACZ,MAAPplS,KAAAizC,MAEDjzC,KAAKsjR,aAAA8hB,EACLplS,KAAA0kS,oC3dw1jEExC,E2dr1jEkB5lS,UAAA+oS,gBAAA,SAAAhoB,GACZ,MAAPr9Q,KAAAizC,MAEDjzC,KAAKkkS,cAAA7mB,EACLr9Q,KAAKujS,kBAAIvjS,KAAAoiS,aAAgCO,QACzC3iS,KAAKizC,IAAAmxP,yBAAuB/mB,GAC5Br9Q,KAAAujS,kBAAAvjS,KAAAoiS,aAAAhhS,O3du1jEE1G,OAAOI,e2dr1jEVonS,EAAA5lS,UAAA,c3ds1jEO0F,I2dr1jEN,W3ds1jEU,M2dr1jEC,OAAVhC,KAAA+S,KACM,GACP2oR,GAAA17R,KAAA+S,MAAA,c3du1jEMtQ,YAAY,E2dv1jElBC,cAAA,I3d01jEEhI,OAAOI,e2dx1jEVonS,EAAA5lS,UAAA,c3dy1jEO0F,I2dx1jEN,W3dy1jEU,G2dx1jEF,MAAPhC,KAAAmjS,wB3dw1jES,C2dt1jEV,GAAImC,GAAMzmR,KAAQC,MAAA9e,KAAAmjS,wB3dy1jER,I2dx1jEF,MAAPmC,EAED,MAAAA,GAAA,wB3d01jEM7iS,YAAY,E2d11jElBC,cAAA,I3d61jEEw/R,E2d5yjEF5lS,UAAAuE,OAAA,SAAAmmC,EAAAu+P,GA7CA,GAAIliS,GAACrD,IACLA,MAAImkS,aAAKnkS,KAAgBgjS,sBAAIh8P,EAAA,gBACR,MAApBhnC,KAAKmkS,eACFnkS,KAACmkS,aAAmB,IAGxBnkS,KAAKijS,mBAAAjjS,KAAAmkS,aAAqCtgQ,MAAA,MAC1C7jC,KAAIihR,8BAAKjhR,KAAiCgjS,sBAAIh8P,EAAA,iCACR,MAArChnC,KAAKihR,gCACFjhR,KAACihR,+BAAA,GAGLjhR,KAAKwlS,uCAAwBxlS,KAAAihR,+BAC7BjhR,KAAImhR,iBAAKnhR,KAAoBgjS,sBAAIh8P,EAAA,oBACR,MAAxBhnC,KAAKmhR,mBACFnhR,KAACmhR,kBAAuB,GAG5BnhR,KAAIylS,uBAAoBzlS,KAAAmhR,kBACvBnhR,KAAA++R,aAAiBwG,GAGZ7qS,OAAMusB,KAAKjnB,KAAA++R,aAAA1hS,QAAsB,SAAQ0V,GAAU,MAAA1P,GAAAsgS,YAAA38P,EAAAj0B,EAAA1P,EAAA07R,YAAAhsR,KACzD,IAAI2yR,GAAG1lS,KAAQgjS,sBAAAh8P,EAAA,SACT,OAAL0+P,GAGG1lS,KAACqkS,aAAgBqB,GAGrB1lS,KAAKkkS,cAAgBlkS,KAACgjS,sBAAsBh8P,EAAQ,aACpDhnC,KAAKykS,UAAWzkS,KAAKgjS,sBAAsBh8P,EAAQ,YACnDhnC,KAAKojR,SAAUpjR,KAAGgjS,sBAAKh8P,EAA4B,YACnDhnC,KAAK8kS,WAAa9kS,KAAGgjS,sBAAKh8P,EAAsB,kBAChDhnC,KAAKujR,cAAgBvjR,KAAKgjS,sBAAsBh8P,EAAQ,iBACxDhnC,KAAKwjR,cAAexjR,KAAKgjS,sBAAsBh8P,EAAQ,iBACvDhnC,KAAIsjR,aACHtjR,KAAKgjS,sBAAiBh8P,EAAA,iB3d80jEbhnC,K2d70jENizC,KAAqB,MAAhBjzC,KAAQykS,WACE,MAAfzkS,KAAKojR,UACa,MAAlBpjR,KAAK8kS,YACiB,MAAtB9kS,KAAKujR,eACgB,MAArBvjR,KAAKwjR,eAEG,MAAXxjR,KAAAsjR,cACDt5Q,WAAA,iBAAA3G,GAAAqhS,mCAAA,K3d80jEExC,E2d30jEkB5lS,UAAAkpS,uCAAA,SAAArsF,GACZ,MAAPn5M,KAAAizC,MAEDjzC,KAAKizC,IAAA0yP,+CAA0CxsF,GAC/Cn5M,KAAAihR,8BAAA9nE,I3d60jEE+oF,E2d10jEkB5lS,UAAAmpS,uBAAA,SAAAtsF,GACZ,MAAPn5M,KAAAizC,MAEDjzC,KAAKizC,IAAA2yP,kCAA6BzsF,GAClCn5M,KAAAmhR,iBAAAhoE,I3d40jEE+oF,E2dxzjEgC5lS,UAASooS,gCAAkC,WAC7E1kS,KAAAizC,IAAA4yP,oBAAA7lS,KAAAykS,UAAAzkS,KAAAojR,SAAApjR,KAAA8kS,WAAA9kS,KAAAujR,cAAAvjR,KAAAwjR,cAAAxjR,KAAAsjR,cA1UW,IAAA7mQ,EA4UZ,O3dyzjEGylR,G2dtokESJ,I3duokELpnS,OAAOM,GAAqB,c2dtokEvB+mS,GA4UZ,wCAAAtlR,MAAA,KAAAmiR,SAAAniR,GAAA/hB,UAADwnS,M3dk0jEI4D,GAA0C9lS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D2sR,GAA0C/lS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8dpokEzGssR,GAGS,W9d2okEN,Q8d9okEgBC,GAA4C/nB,EAAA1zM,EAAApwD,EAAAG,EAAAJ,GACtDna,KAAAk+Q,MAAMA,EACNl+Q,KAAAwqE,SACAxqE,KAAAoa,OACApa,KAAAua,YAAmBA,EAC3Bva,KAAKma,QACLna,KAAKkmS,YAAc,GAAIjkE,IAAY,QACnCjiO,KAAAmmS,YAAAnmS,KAAAkmS,YAAApvK,e9dgpkEEmvK,E8d7okEwB3pS,UAAMwmS,gBAAQ,WACxC9iS,KAAAk+Q,MAAA4kB,gBAAA9iS,KAAAgnC,S9d+okEEi/P,E8d5okEa3pS,UAAAyY,QAAA,WACf/U,KAAK6S,GAAI,KACT7S,KAAK+S,KAAA,KACL/S,KAAKomS,aAASvjS,GACd7C,KAAKsqF,cAASznF,GACd7C,KAAKgnC,WAAAnkC,GACL7C,KAAKqmS,aAAc,KACnBrmS,KAAAsmS,eAAA,M9d8okEEL,E8d3okEwB3pS,UAAEiqS,KAAA,WAC5BvmS,KAAAkmS,YAAAtqN,KAAA,O9d6okEEqqN,E8dlokEF3pS,UAAAwiB,MAAA,SAAA7W,GARA,GAAI5E,GAAMrD,IACVA,MAAK6S,GAAI5K,EAAGo+R,aAAKxzR,GACjB7S,KAAK+S,KAAA9K,EAAWo+R,aAAKtzR,KACrB/S,KAAKomS,SAASn+R,EAAOo+R,aAAarmB,WAClChgR,KAAKsqF,UAASriF,EAAKo+R,aAAetmB,WAClC//Q,KAAKgnC,OAAA/+B,EAAYu+R,eACjBxmS,KAAKqmS,aAAOxnR,KAAAC,MAAA7W,EAAAo+R,aAAA/+D,WACZtnO,KAAKwqE,OAAA20N,yCAAuCn/R,KAAAqmS,cAC5CrmS,KAAAsmS,eAAArkE,GAAA,WAAA7pG,MAAA,KAAAz9G,UAAA,iBAAAtX,GAAAojS,kB9d6okEER,E8d1okEsB3pS,UAAUmqS,aAAa,WAC/CzmS,KAAK0mS,YAAA7nR,KAAmBE,UAAG/e,KAAAgnC,QAC3BhnC,KAAA2mS,uB9d4okEEV,E8dzokEsB3pS,UAAAqqS,oBAAiB,WACzC,GAAI99H,GAAK7oK,KAAQwqE,OAAE+2N,iBAAA,mBAAAvhS,KAAAgnC,OACZ,OAAN6hI,IACAA,EAAKl0E,OAAO91E,KAAAE,UAAA/e,KAAAk+Q,MAAA6gB,eAAA/+R,KAAAk+Q,MAAAilB,wBACZnjS,KAAAumS,S9d4okECN,E8dxokEwB3pS,UAAWsqS,iBAAA,WACrC,GAAItB,GAAQzmR,KAAAC,MAAA9e,KAAAk+Q,MAAAilB,wBACZnjS,MAAKwqE,OAAMs0N,4BAAqB9+R,KAAAgnC,OAAAs+P,GAAA,GAChCtlS,KAAKk+Q,MAAA6gB,YAAmBuG,EACxBtlS,KAAK2mS,sBACL3mS,KAAA6mS,4BAAA7mS,KAAAgnC,S9d0okEEi/P,E8dvokEqB3pS,UAAAwqS,aAAA,SAAA/H,GACf,MAAP/+R,KAAAgnC,SAEDhnC,KAAKwqE,OAAOs0N,4BAAuB9+R,KAAQgnC,OAAA+3P,GAAA,GAC3C/+R,KAAKwqE,OAAOo1N,kBAAA5/R,KAAAgnC,QACZhnC,KAAKwqE,OAAO+0N,6BAAyBv/R,KAAQgnC,OAAAhnC,KAAAqmS,cAC7CrmS,KAAKwqE,OAAAm2N,oBAAgB3gS,KAAAgnC,QACrBhnC,KAAA+mS,kB9dyokEEd,E8dtokEU3pS,UAAwB0qS,yBAAE,SAAAv9Q,GACtCzpB,KAAcwqE,OAAA42N,mBAAM33Q,E9duokEd,K8dvokED,GAAKwP,GAAA,EAAAxc,EAAAgN,EAAA7kB,MAAAq0B,EAAAxc,EAAApe,OAAA46B,IAAA,CACT,GAAI19B,GAAIkhB,EAACwc,EACRj5B,MAAEwqE,OAASy1N,sBAAkB1kS,EAAAkuB,S9dwokEjBluB,EAAEo5F,O8dvokENlrE,EAAC02Q,aACN12Q,EAAK02Q,cAAOngS,KAAAwqE,OAAsB22N,qBAAQ5lS,EAAAkuB,OAC7CzpB,KAAAwqE,OAAA22N,qBAAA5lS,EAAAkuB,U9d2okEAw8Q,E8dtokEqB3pS,UAAAkkS,YAAA,W9duokEjB,G8dtokEE,MAAPxgS,KAAAgnC,OAED,MAAAhnC,MAAAwqE,OAAAg2N,YAAAxgS,KAAAgnC,S9dwokEEi/P,E8drokEwB3pS,UAAe2qS,iBAAC,SAAA/jP,G9duokEpC,I8dtokEN,GAAAn2C,GAAY/M,KAAMgnC,OAAMrrC,KACvBunD,EAAQ7kD,OAAK,GAAO,CACpB,GAAI9C,GAAC2nD,EAAIk0D,OACR77G,IAAGwR,IACHpR,EAAAqE,KAAWwqE,OAAIg3N,iBAASjmS,EAAAwR,GACxBA,EAAApR,EAAAoR,UAGF,MAAApR,I9duokEEsqS,E8d1nkEF3pS,UAAA4qS,kBAAA,SAAAnsS,EAAA0V,GAVA,GAAIpN,GAAMrD,KACNkpR,EAAO,GAAMjnD,IAAS,OAS1B,O9d6nkEMjiO,MAAKma,M8drokEV+E,OAAOlf,KAAKua,YAAYmE,UAAU,mCAAsCjO,GAAAogH,MAAA91H,IAAA,yDAAAA,EAAA,kBACxEokB,MAAInf,KAAOua,YAAamE,UAAS,uCAC/BU,GAAA,QAAAC,OAAA,EAAAC,MAAA,WAAAjc,EAAA8jS,0BAAA,KAAAje,EAAAttM,MAAA,MAEFz8D,MAAInf,KAAOua,YAAamE,UAAO,sCAC5BU,GAAA,MAAAC,OAAA,EAAAC,MAAA,WAAAjc,EAAA8jS,0BAAA,KAAAje,EAAAttM,MAAA,OAEJ57E,KAAAmnS,0BAA6BnnS,KAAAma,MAAAqmI,aAAA7lI,UAAA,WAAAtX,EAAA8jS,0BAAA,KAAAje,EAAAttM,MAAA,KAC7BstM,EAAApyJ,gB9duokEEp8H,OAAOI,e8drokEVmrS,EAAA3pS,UAAA,c9dsokEO0F,I8drokEN,WACA,MAAA6c,MAAAE,UAAA/e,KAAAgnC,UAAAhnC,KAAA0mS,a9duokEMjkS,YAAY,E8dvokElBC,cAAA,I9d0okEEhI,OAAOI,e8dxokEuCmrS,EAAA3pS,UAAA,kB9dyokE1CqG,I8dxokEN,SAASkrB,GACqB,MAA7B7tB,KAAKonS,yBACFpnS,KAAConS,wBAA4BxwK,cACjC52H,KAAAonS,wBAAAv5Q,G9d0okEMprB,YAAY,E8d1okElBC,cAAA,I9d6okEEhI,OAAOI,e8d3okEkDmrS,EAAA3pS,UAAA,6B9d4okErDqG,I8d3okEN,SAASkrB,GACgC,MAAxC7tB,KAAKqnS,oCACFrnS,KAACqnS,mCAAuCzwK,cAC5C52H,KAAAqnS,mCAAAx5Q,G9d6okEMprB,YAAY,E8d7okElBC,cAAA,I9dgpkEEujS,E8d7okEuB3pS,UAAayqS,cAAM,SAAAtyG,GAE5C,GAAIt7K,GAAS,MAARs7K,EAAQz0L,KAAAgnC,OAAAytJ,C9d6okEP,I8d5okEL,MAAAt7K,E9d8okEK,I8d5okED,GAAI8f,GAAM,EAAAquQ,EAAAnuR,EAAA8f,EAAAquQ,EAAAjpS,OAAA46B,IAAA,CAEd,GAAIinP,GAAOonB,EAAAruQ,EACS,OAAnBinP,EAAKnzQ,UAAqBmzQ,EAAQnzQ,SAAE1O,OAAA,EACpC2B,KAAA+mS,cAAS7mB,EAAAnzQ,UAKE,QAAXmzQ,EAAKntQ,MAA8B,MAAb/S,KAAKgnC,OAOX,SAAhBk5O,EAAIz2P,MAAO,IAAa,WAAAy2P,EAAAntQ,KAST,aAAfmtQ,EAAKntQ,MAAU/S,KAAAk+Q,MAAyBjrO,KACxCjzC,KAAAk+Q,MAASjrO,IAAAmxP,yBAAAlkB,EAAAnlR,OATH,GAALmlR,EAAKnlR,M9dwokEUiF,KAAK6mS,4BAA4B1tR,G8drokEjDnZ,KAASunS,0BAAApuR,IAVTnZ,KAAKk+Q,MAAMomB,WAACtkS,KAAAgnC,OAAoBk5O,EAAKnlR,OAAQ,GAC7CiF,KAAAwqE,OAASm2N,oBAAA3gS,KAAAgnC,W9dypkETi/P,E8dpokEyD3pS,UAAKuqS,4BAAA,SAAA1tR,G9dsokE1D,I8drokED,GAALquR,GAAoB,KAATvuQ,EAAK,EAAAxc,EAAAzc,KAAAwqE,OAAA00N,QAAA/lR,GAAA8f,EAAAxc,EAAApe,OAAA46B,IAAA,CACf,GAAI43F,GAAMp0G,EAAIwc,EACJ,0BAAT43F,EAAA99G,OAGqB,MAApBy0R,IACDA,MACAA,EAAA32K,EAAA99G,MAAA89G,EAAA91H,OAGc,MAAfysS,GACDxnS,KAAAk+Q,MAAAjrO,IAAA6wP,6BAAA0D,I9dwokEEvB,E8drokEsB3pS,UAAQirS,0BAAZ,SAAwBpuR,G9dsokEtC,I8dtokED,GAAM8f,GAAK,EAAAxc,EAAAzc,KAAAwqE,OAAA00N,QAAA/lR,GAAA8f,EAAAxc,EAAApe,OAAA46B,IAAA,CACf,GAAI43F,GAAMp0G,EAAIwc,E9duokEL,I8dtokEM,yBAAd43F,EAAK99G,KAEL,WADA/S,MAAAk+Q,MAAOjrO,IAAA4wP,2BAAAhzK,EAAA91H,QAvME,IAAA0hB,GAAAC,EAAAC,EAAAC,EAAAC,CA4MZ,O9duokEGopR,G8dp1kEHH,I9dq1kEOprS,OAAOM,GAAqB,c8dp1kEvB+qS,GA4MZ,wCAAAtpR,MAAA,KAAAwlR,SAAAxlR,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAkiR,SAAAliR,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4iI,GAAA,GAAAA,GAAA,IAAA5iI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAniB,UAADurS,M9dgpkEIwB,GAA8CznS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DsuR,GAA8C1nS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+d71kEzGiuR,GAES,W/do2kEN,Q+dt2kEHC,GAQCp4N,EAAAj1D,EAAAuZ,EAAAtZ,EAAAgwD,EAAA7xC,GARkB,GAAAt1B,GAAOrD,IAClBA,MAAAwvE,UACCxvE,KAAAua,cACAva,KAAA8zB,QAAsBA,EACtB9zB,KAAAwa,IAAMA,EACNxa,KAAAwqE,SACRxqE,KAAK24B,OAAQA,EACb34B,KAAKwvE,QAAQ22N,YAAAxrR,UAAA,iBAAAtX,GAAAmX,IAAAhP,iBACbxL,KAAA8e,Q/dy2kEE8oR,E+dt2kEatrS,UAAA+H,SAAA,W/du2kET,G+dt2kELrE,KAAc6nS,O/du2kEL,I+dv2kEJ,GAAK5uQ,GAAA,EAAAxc,EAAAzc,KAAA6nS,OAAA5uQ,EAAAxc,EAAApe,OAAA46B,IAAA,CACT,GAAI+sH,GAACvpI,EAAAwc,EAAoCj5B,MAAAwvE,QAAAw3N,yBAAAhhJ,K/d22kEzC4hJ,E+dv2kEetrS,UAAA0uM,cAAA,WAChBhrM,KAAKgnC,SACLhnC,KAAKgnC,OAAOxzB,SAAQxT,KAAAgnC,OAAAxzB,QACpBxT,KAAKwvE,QAAQ+2N,OACbvmS,KAAA8zB,QAAAjzB,W/d02kEC+mS,E+d11kEFtrS,UAAAwrS,cAAA,SAAAr+Q,EAAA1uB,GAZA,GAAIsI,GAAKrD,I/dw2kEH,I+dv2kEE,MAAPA,KAAAgnC,QAAOvd,EAAA02Q,cAAAplS,E/dq3kEF,I+dp3kED,GAALypQ,GAAcxkQ,KAAJi5B,EAAA,EAAAxc,EAAAgN,EAAA7kB,MAAAq0B,EAAAxc,EAAApe,OAAA46B,IAAA,C/dq3kEA,GAAI19B,GAAIkhB,EAAGwc,GACP8uQ,E+dr3kET,SAAYxsS,G/dw2kEP,G+dv2kERipQ,EAAMh6L,OAAIy1N,sBAAK1kS,EAAuBkuB,QAC3B,0BAAVluB,EAAAwX,KAMA,MALChY,G/d22kEkBypQ,EAAOwjC,oBAAoBv+Q,EAAOluB,EAAGR,GAHrCypQ,E+dv2kEhBh1L,QAAU03N,kBAAM3rS,EAAAR,MAAA,Q/dw2kEK4f,UAAU,SAAUstR,GAAM,MAAO5kS,GAAM2kS,oBAAoBv+Q,EAAOluB,GAAI0sS,M+dp2kE9FltS,UAAA,K/d62kE6BQ,EACtB,IAAuB,gBAAZwsS,G+d92kElB,MAAAA,GAAAhtS,Q/dk3kED6sS,EAA6BtrS,UAAU4rS,gBAAkB,SAAUjgS,G+d92kErE,GAAIwU,E/dg3kEE,Q+d/2kEO5Z,IAAZoF,EAAAwhB,MACG,MAAO,KACX,IAAA1W,GAAA9K,EAASwhB,MAAC,GAAIoa,MAAO,KAAGG,KAAA,KAAAtxB,aACxB,OAAA+J,QAAA1J,IAAA,EAAA0J,G/di3kEEmrR,E+d92kEmBtrS,UAAM0rS,oBAAA,SAAAv+Q,EAAAluB,EAAAR,GAC3B0uB,EAAK02Q,aAAQplS,EAGbiF,KAAIwvE,QAAKw3N,yBAAUv9Q,IACb,IAAL1uB,GAEGiF,KAACwvE,QAAY0uM,MAAGylB,YAAA3jS,KAAAwvE,QAAAxoC,OAAAzrC,EAAAwX,KAAAxX,EAAAR,OAAA,GACpBiF,KAAAwvE,QAAA+2N,Q/d62kEEqB,E+d12kEqBtrS,UAAKwiB,MAAA,W/d22kEtB,G+d12kEW,KAAhB9e,KAAI24B,OAAOlC,IAAY,CACvB,GAAI0xQ,GAAKnoS,KAAM24B,OAAAlC,IAAAoN,MAAA,KAAA0oB,SACfvsD,MAAKkjD,O/d22kEI,K+d12kER,GAAI5kD,GAAK,EAAEmwB,EAAI05Q,EAAA9pS,OAAcC,EAAAmwB,GACtB,gBAAN05Q,EAAA7pS,GAD4BA,IAG7B0B,KAAAkjD,KAAAlsC,KAAAmxR,EAAA7pS,G/dg3kEQ,I+d92kER0B,KAAKkjD,KAAI7kD,OAAQ,IACjB2B,KAAKkjD,KAAMljD,KAAGkjD,KAAKqJ,UACnBvsD,KAAAgnC,OAAAhnC,KAAAwvE,QAAAy3N,iBAAAjnS,KAAAkjD,KAAAvlD,MAAA,KAEc,MAAdqC,KAAKgnC,QAAchnC,KAAOgnC,OAASj6B,SAAM,C/d42kE7B,G+d32kEZ/M,KAAI6nS,OAAK7nS,KAAOwqE,OAASs1N,UAAQ9/R,KAAKgnC,OAAOj6B,UACrC,MAAP/M,KAAAgnC,OAAO1W,OAAA,MAAAtwB,KAAAgnC,OAAA1W,MAAA,GACJ,M/d22kEQtwB,M+d12kEXooS,qBACA57R,MAAOokB,GAAI5wB,KAAEgnC,OAAW1W,MAAK,GAAES,IAAA/wB,KAAAgnC,OAAkB1W,MAAA,IAChD6+B,OAAAv+B,GAAA,YAAAG,IAAA,qBApFO,IAAAtU,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAwFZ,O/d42kEG8qR,G+d18kEHH,I/d28kEO/sS,O+d18kEPM,GAAU,YACV4V,SAAU,kCACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWgoR,GAwFZ,wCAAAjrR,MAAA,KAAAupR,SAAAvpR,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA6iI,GAAA,GAAAA,GAAA,IAAA7iI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA5hB,GAAA,mBAAAA,GAAA,oBAAA4hB,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA+hR,SAAA/hR,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAsgI,GAAA,GAAAA,GAAA,IAAAtgI,GAAApiB,UAADktS,M/d03kEIS,GAAgCroS,MAAQA,KAAKuY,WAAc,WAC3D,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF0vR,GAAiCtoS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DmvR,GAAiCvoS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Ige5+kEnE8uR,GAAA,SAAA5uR,Ghek/kEnC,Qgeh/kEH6uR,GACCnuR,EAAMC,GADY,GAAAlX,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAEvC,OAFgDqD,GAAAiX,Shem/kE1CjX,EAAMkX,YAAcA,Egej/kE1BlX,EAFDglS,GAAmBI,EAA6D7uR,EADvE,IAAA6C,GAAAC,CAD6B,Ohey/kEnC4rR,KACI5tS,OAAOM,GAAgB,SACvButS,GAA8B,cge1/kEf5kR,SADV8kR,EAAiBnsS,UAAA,ehe6/kE1BmsS,EgenglEHH,IheoglEO5tS,OgenglEPM,GAAqB,YACrB4V,SAAU,YACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW6oR,GAKZ,wCAAA9rR,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,UAAD+tS,IAL8BprJ,GAAA,Ghe2glE1BqrJ,GAA8C1oS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DuvR,GAA8C3oS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iiev+kEzGkvR,GAGS,Wje++kEN,Qiej/kEKC,GAAqBvuR,EAAAC,EAAAi1D,EAAAhF,EAAArwD,EAAAsc,EAAArc,EAAAI,GACrBxa,KAAAsa,SACCta,KAAAua,cACAva,KAAAwvE,UACAxvE,KAAAwqE,SACAxqE,KAAAma,QACAna,KAAAy2B,IAAIA,EACJz2B,KAAAoa,OA5BTpa,KAAAwa,MACAxa,KAAA8oS,cAAS,IACT9oS,KAAA+oS,OAAArK,Gje+glEO1+R,Kie9glENu8R,kBACAlgN,MAAAtpE,KAAA,aAAyB+5I,MAAI,GAC7Bk8I,yBAAmB,EACnBC,eAAe,EACfC,WAAA,EACAC,mBAAmB,EACnBC,mBAAmB,EACnBC,eAAa,EACbzQ,aAAU,EACV0Q,SAAU,2BACVC,MAAA,EACAzQ,WAAW,EACV5wF,WAAA,GjeihlEC2gG,Eie9/kEFvsS,UAAA+H,SAAA,WAHA,GAAIhB,GAACrD,IACLA,MAAKwpS,mBAAmBxpS,KAAKoa,KAAO2Z,cAAapZ,UAAU,WAAM,MAAAtX,GAAKmX,IAAIhP,iBAE1ExL,KAAAypS,iBAAAzpS,KAAAwvE,QAAA22N,YAAAxrR,UAAA,iBAAAtX,GAAAmX,IAAAhP,kBjemglEEq9R,EiehglEOvsS,UAA0BgI,YAAA,WAA0B,MAAxBtE,KAAKwpS,oBACtCxpS,KAAKwpS,mBAAgB5yK,cAAgC,MAAtB52H,KAAKypS,kBACxCzpS,KAAAypS,iBAAA7yK,ejeoglEEiyK,Eie3/kEFvsS,UAAAotS,YAAA,SAAAzhS,EAAAlN,GANA,GAAIsI,GAAQrD,IjemglENA,MielglELwvE,QAAQ03N,kBAAAnsS,EAAA,yBAAAkN,EAAA8K,KAAA,gBAAA4H,UAAA,SAAAstR,GACPA,IACA5kS,EAAKsmS,aAAI1hS,EAAelN,GACxBsI,EAAAmX,IAAAhP,mBjesglEAq9R,Eiez6kEFvsS,UAAAqtS,aAAA,SAAA1hS,EAAAlN,GAnFA,GAAIsI,GAAKrD,Ije8/kEH,Iie7/kELiI,EAAIwI,MAASiuR,GAAIA,GAAAkL,MAAuB3hS,EAAI8K,KAAK,Cje8/kExC,Gie7/kED,yBAAP9K,EAAA8K,MAAO9K,EAAAlN,UACJ,MAGJ,OAFAkN,GAAKlN,MAAQA,MACbiF,MAAAwvE,QAAO0uM,MAAAylB,YAAA3jS,KAAAwvE,QAAAxoC,OAAA/+B,EAAA8K,KAAA9K,EAAAlN,OjeiglEF,Gie5/kENkN,EAAIlN,MAASA,EACC,gBAAbkN,EAAK8K,KAEL,WADA/S,MAAAwvE,QAAO0uM,MAAA+kB,mBAAAh7R,EAAAlN,MAAA8oC,MAAA,Kje8/kEF,Iie1/kEQ,iCAAb57B,EAAK8K,KAEL,WADA/S,MAAAwvE,QAAO0uM,MAAAsnB,uCAAAv9R,EAAAlN,Mje6/kEF,Iiez/kEQ,oBAAbkN,EAAK8K,KAEL,WADA/S,MAAAwvE,QAAO0uM,MAAAunB,uBAAAx9R,EAAAlN,Mje4/kEF,Iiex/kEC,QAANkN,EAAM8K,MAAkB/S,KAAKwvE,QAAOxoC,OAAA,CACpC,GAAM6iQ,GAAiB7pS,KAAAwqE,OAAA+2N,iBAAkB,wBAA6BvhS,KAAAwvE,QAAAxoC,QAClE8iQ,EAAeD,EAAgBA,EAAoB9uS,MAAQ,IAM/D,OALAiF,MAAKwvE,QAAO0uM,MAAAomB,WAAAtkS,KAAoBwvE,QAAKxoC,OAAc/+B,EAAElN,OAAA,GACrDiF,KAAIwqE,OAAAm2N,oBAAc3gS,KAAAwvE,QAAAxoC,QACjB8iQ,GACG9pS,KAACwvE,QAAQ0uM,MAAAylB,YAAsB3jS,KAAAwvE,QAAAxoC,OAAA,wBAAA8iQ,OACnC9pS,MAAAwvE,QAAOm3N,sBje2/kEF,Miev/kEQ,YAAb1+R,EAAK8K,SACL/S,MAAAwvE,QAAO0uM,MAAAqmB,eAAAt8R,EAAAlN,OAIM,YAAbkN,EAAK8K,SACL/S,MAAAwvE,QAAO0uM,MAAAymB,eAAA18R,EAAAlN,OAIM,kBAAbkN,EAAK8K,SACL/S,MAAAwvE,QAAO0uM,MAAA2mB,iBAAA58R,EAAAlN,OAIM,iBAAbkN,EAAK8K,SACL/S,MAAAwvE,QAAO0uM,MAAA6mB,oBAAA98R,EAAAlN,OAIM,iBAAbkN,EAAK8K,SACL/S,MAAAwvE,QAAO0uM,MAAA+mB,oBAAAh9R,EAAAlN,OAIM,gBAAbkN,EAAK8K,SACL/S,MAAAwvE,QAAO0uM,MAAAinB,mBAAAl9R,EAAAlN,OAIM,aAAbkN,EAAK8K,SACL/S,MAAAwvE,QAAO0uM,MAAAmnB,gBAAAp9R,EAAAlN,OAIM,UAAbkN,EAAK8K,SACL/S,MAAAwvE,QAAO0uM,MAAAmmB,aAAAp8R,EAAAlN,OAIM,oBAAbkN,EAAK8K,Sjeg/kEI/S,Mie/+kERwvE,QAAM03N,kBAAAlnS,KAAAwvE,QAAA0uM,MAAAzI,WAAA,QAAA96P,UAAA,SAAAstR,GACLA,GACC5kS,EAAAmsE,QAAAo3N,yBje4+kEE,IAQJiC,Eie9+kEsBvsS,UAAAytS,gBAAA,SAAA7rS,EAAA8rS,GACxB,GAAIvJ,GAAAviS,EAAA,Eje++kEE,Kie7+kEL,GAAA4uJ,GAASjuI,KAAKC,MAAA5gB,EACduiS,GAAA5hR,KAAAE,UAAA+tI,EAAA,KAAAk9I,EAAA,SAAAnnS,IACD,MAAO5F,IACP,MAAAwjS,Ijei/kEEoI,Eie9+kE8BvsS,UAAA2tS,iBAAA,SAAAhiS,Gjeg/kE1B,Iie9+kEL,GADDiqG,MACM5zG,EAAC,EAAKA,EAAE2J,EAAOo4D,OAAKhiE,OAAWC,IACrC4zG,EAAOl7F,MAAMjc,MAAAkN,EAAAo4D,OAAA/hE,GAAA6gB,MAAAlX,EAAAo4D,OAAA/hE,IACb,OAAA4zG,Ijeg/kEE22L,Eie7+kEcvsS,UAAA4tS,cAAA,SAAAjiS,Gje8+kEV,Mie7+kEE,OAAPA,EACU,KACXA,EAAA47B,MAAA7jC,KAAA8oS,gBje++kEED,Eie5+kEKvsS,UAAA6tS,gBAAA,Wje6+kED,Oie3+kELC,MAAQ,UACRC,KAAA,QACAC,SAAW,uBACXC,QAAU,aACTC,SAAA,gBje++kEA3B,Eie3+kEmBvsS,UAAQmuS,OAAA,SAAAzjQ,GAC7B,OAAAhnC,KAAA0qS,QAAA1jQ,Ije6+kEE6hQ,Eie1+kEuBvsS,UACvBouS,QAAO,SAAQ1jQ,Gje0+kEX,MAAOhnC,MAAKoa,KAAKpR,MAAQ,OAAUg+B,EAAOv2B,MAAQiuR,GAAUA,GAAUkL,MAAuB,yBAAf5iQ,EAAOj0B,Miet+kE3F,kBAAAi0B,EAAAj0B,MAAA,gBAAAi0B,EAAAj0B,MAAA,iBAAAi0B,EAAAj0B,MAAA,iBAAAi0B,EAAAj0B,Oje0+kEErY,OAAOI,eiex+kEV+tS,EAAAvsS,UAAA,cjey+kEO0F,Iiex+kEN,WACA,MAAAhC,MAAAiI,KAAAwI,MAAAiuR,MAAA/6Q,SAAA,MAAA3jB,KAAAiI,KAAAlN,OAAAiF,KAAAiI,KAAAlN,MAAA+C,QAAA,aje0+kEM2E,YAAY,Eie1+kElBC,cAAA,Ije6+kEEhI,OAAOI,eie3+kEV+tS,EAAAvsS,UAAA,Yje4+kEO0F,Iie3+kEN,WACA,MAAAhC,MAAAiI,KAAA0sF,Qje6+kEMlyF,YAAY,Eie7+kElBC,cAAA,Ijeg/kEEmmS,Eie7+kEcvsS,UAAAquS,cAAA,SAAA1iS,Gje8+kEV,Mie7+kEE,OAAPA,EACU,IACXA,EAAIA,EAAKrK,OAAU,SAAAiwB,GAAA,aAAAA,GAAA,IAAAA,OAAA,KAAAA,IAClB5lB,EAAA5J,OAAY,Eje8+kEI4J,EAAK+7B,KAAKhkC,KAAK8oS,eie5+kEhC,Kjeg/kEED,Eie1+kEFvsS,UAAAsuS,sBAAA,SAAA73R,GAHA,GAAI1P,GAAQrD,Ije++kEN,Oie/+kEqB,QAAP+S,EACZ,SAAI2G,GAAW,MAAArW,GAAAozB,IAAAolH,KAAA,aAAAniI,EAAA,oBAAS,aAAP3G,EAClB,SAAU2G,GAAO,MAAWrW,GAAIozB,IAAAolH,KAAA,iBAAAniI,EAAA,SACvC,SAAAA,GAAA,cjek/kEEmvR,Eie9+kEqBvsS,UAAYmvR,aAAU,SAAAxjR,Gje++kEvCjI,Kie9+kELma,MAAA+E,OAAYlf,KAAKua,YAAQmE,UAAA,8BACzBgtQ,WAAWzjR,EAAM0nM,SACjBg8E,YAAa1jR,EAAE2nM,UACZg8E,cAAI3jR,EAAA6nM,kBAzNG,IAAArzL,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAA4BC,EAAAC,CA2NxC,Ojeg/kEG6rR,GiextlEHH,IjeytlEOhuS,OiextlEPM,GAAU,YACV4V,SAAM,4BjeytlEKG,MievtlEV85R,iCAAiC,eACjCC,kCAA4B,gBAE5BC,iBAAA,YAEDj6R,SAAS5W,EAAQ,MACjBiX,QAASjX,EAAQ,OACjBkE,QAAA,OAAiB,iBAChBqhB,gBAAAzkB,GAAA,wBAAA0kB,SACWipR,GA2NZ,wCAAAlsR,MAAA,KAAA4gI,GAAA,GAAAA,GAAA,IAAA5gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAqpR,SAAArpR,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAgiR,SAAAhiR,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAwiI,GAAA,GAAAA,GAAA,IAAAxiI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAwiI,GAAA,GAAAA,GAAA,IAAAxiI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAhiB,GAAA,mBAAAA,GAAA,oBAAAgiB,GAAAtiB,UAADmuS,MjeoglEImC,GAAuChrS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D6xR,GAAuCjrS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Ike9ulEzGwxR,GAC8B,WlemvlE3B,QkepvlEHC,GAGC37N,EAAA31D,GAHkB,GAAAxW,GAAOrD,IACjBA,MAAAwvE,UACRxvE,KAAK6Z,MAAMA,EACX7Z,KAAA6Z,MAAA4c,IAAA9b,UAAA,SAAAygB,GAAA,MAAA/3B,GAAAyb,MAAAsc,EAAAva,cleuvlEEsqR,EkenvlEU7uS,UAAgBwiB,MAAA,SAAAokC,GleovlEtB,GkenvlEA,gBAALA,EAEAljD,KAAA+M,SAAA/M,KAAAwvE,QAAAxoC,WACA,IAAa,IAATkc,EAAa,CAEjB,GAAIlc,GAAMhnC,KAAQwvE,QAAEy3N,kBAAA/jP,GACd,OAALlc,IAEAhnC,KAAA+M,SAAAi6B,EAAAj6B,WApB2B,IAAA0P,GAAAC,EAAAC,CAuB9B,OlemvlEGquR,KACItwS,OAAOM,GAAoB,WAAG,mBAC9BiwS,GAAoC,cke5wlEM,mBAAAxuR,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAFrCywS,EAAsB7uS,UAAA,iBlegxlE/B6uS,EketxlEHH,IleuxlEOtwS,OketxlEPM,GAAU,YACV4V,SAAU,2BACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWurR,GAyBZ,wCAAAvuR,MAAA,KAAAspR,SAAAtpR,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAjiB,UAADywS,MleqwlEIC,GAA+CprS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DiyR,GAA+CrrS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACxF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,ImerylEzG4xR,GAGQ,Wne8ylEL,QmehzlEKC,GAAiBnxR,EAAAoxR,EAAAjxR,EAAAipN,EAAA5qM,EAAAze,EAAAqtQ,GACjBxnR,KAAAoa,OACApa,KAAAwrS,gBACCxrS,KAAAua,YAAaA,EACbva,KAAAwjO,cAAiBA,EACjBxjO,KAAA44B,KAAKA,EACL54B,KAAAma,QACJna,KAAAwnR,QnekzlEF+jB,EmevylEFjvS,UAAAmvS,IAAA,WARA,GAAIpoS,GAAMrD,IACVA,MAAIoa,KAAMwgB,SAAO,EACjB,IAAIsuP,GAAO,GAAMjnD,IAAM,OAMvB,One2ylEMjiO,MmehzlELma,MAAO+E,OAAOlf,KAAAua,YAAYmE,UAAU,2CAClCS,MAAOnf,KAAKua,YAAYmE,UAAU,yCAAAU,GAA6C,OAAMC,OAAS,EAAOC,MAAM,WAAO,MAAMjc,GAAAomQ,OAAO9uP,UAAU,SAAEstR,GAAA,MAAA/e,GAAAttM,KAAAqsN,QAC3I9oR,MAAOnf,KAAKua,YAAYmE,UAAU,8CAA8CU,GAAE,QAAYC,OAAM,EAAOC,MAAE,WAAM,MAAA4pQ,GAAYttM,MAAK,MACpIz8D,MAAAnf,KAAAua,YAAAmE,UAAA,2CAAAU,GAAA,MAAAC,OAAA,EAAAC,MAAA,iBAAA4pQ,GAAAttM,MAAA,OAEHstM,EAAApyJ,gBnekzlEEy0K,EmejylEFjvS,UAAAmtQ,KAAA,WAdA,GAAIpmQ,GAACrD,IACLA,MAAK0rS,SAAK,GAAQzpE,IAAM,QACxBjiO,KAAMoa,KAAIwgB,SAAQ,EAGlB,IAAI65J,GAACz0L,KAAAwrS,cAAchL,aASnB,OnesylEMxgS,Mme9ylELwjO,cAAWb,aAAc3iO,KAAO44B,KAAKta,UAAAte,KAAcwrS,cAAO34R,GAAYgO,YACtE9N,KAAA/S,KAAWwrS,cAAcz4R,KAAM/S,KAAAwrS,cAAAz4R,KAAA,aAC7Bu0N,UAAUzoN,KAAME,UAAC01K,Kne+ylEX95K,Ume9ylEH,KAAM,SAAU1d,GAAA,MAAYoG,GAAAsoS,UAAU1uS,EAAA,iBAAAoG,GAAAomQ,UAAiD,WAC5FpmQ,EAAKmkR,MAAK/wQ,KAAApT,EAAQkX,YAAOmE,UAAA,+CAAArI,SAAA,gBAAAvM,QAAA,MACzBzG,EAAK+W,KAAAwgB,SAAa,GAChBv3B,EAAAuoS,eAEH5rS,KAAA0rS,SAAA50K,gBnegzlEEy0K,EmetylEFjvS,UAAAsvS,WAAA,WAPA,GAAIvoS,GAAOrD,Ine+ylELA,MAAKma,Mme9ylEV+E,OAAOlf,KAAKua,YAAYmE,UAAU,sCAClCS,MAAInf,KAAAua,YAAoBmE,UAAQ,mCAC9BU,GAAA,cAAAC,OAAA,EAAAC,MAAA,iBAAAjc,GAAAgmR,aAEFlqQ,MAAInf,KAAOua,YAAamE,UAAO,kCAC5BU,GAAA,MAAAC,OAAA,EAAAC,MAAA,iBAAAjc,GAAAqoS,SAAA9vN,MAAA,QneizlEF2vN,EmexylEFjvS,UAAA+sR,QAAA,WALA,GAAIhmR,GAAMrD,IACVA,MAAKoa,KAAAwgB,SAAa,GAIlB56B,KAAAwjO,cAAAP,cAAAjjO,KAAA44B,KAAAta,UAAAte,KAAAwrS,cAAA34R,GAAAgO,YAAAlG,UAAA,iBAAAtX,GAAAmoS,cAAA/E,gBAAA,SAAAxpS,GAAA,MAAAoG,GAAAsoS,UAAA1uS,EAAA,iBAAAoG,GAAAgmR,aAAA,iBAAAhmR,GAAAqoS,SAAA9vN,MAAA,Mne6ylEE2vN,Eme1ylEuBjvS,UAAAqvS,UAAA,SAAA1uS,EAAA4uS,GACzB7rS,KAAKoa,KAAAwgB,SAAa,GAClB56B,KAAK0rS,SAAM9vN,MAAO,Gne2ylEZ57E,KAAKma,Mme1ylEV+E,OAAOlf,KAAKua,YAAYmE,UAAU,yCAClCS,MAAInf,KAAAua,YAAkBmE,UAAW,sCAC/BU,GAAA,UAAAC,OAAA,EAAAC,MAAA,iBAAAusR,QAEF1sR,MAAInf,KAAOua,YAAWmE,UAAA,qCACnBU,GAAA,MAAAC,OAAA,KApEO,IAAA5C,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAsEZ,One4ylEGwuR,Gmen3lEHH,Ineo3lEO1wS,OAAOM,GAAqB,cmen3lEvBqwS,GAsEZ,wCAAA5uR,MAAA,KAAA8iI,GAAA,GAAAA,GAAA,IAAA9iI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAspR,SAAAtpR,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAylN,SAAAzlN,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA0rK,GAAA,GAAAA,GAAA,IAAA1rK,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAuoK,GAAA,sBAAAA,GAAA,uBAAAvoK,GAAAriB,UAAD6wS,MneqzlEIO,GAAgD9rS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D2yR,GAAgD/rS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Ioeh4lEzGsyR,GAA0D,Wpeq4lEvD,Qoer4lEiBC,GAAsCz8N,GAAKxvE,KAAAwvE,Upew4lE5Dy8N,Eoer4lEuB3vS,UAAY+H,SAAA,WACrCrE,KAAKwvE,QAAQ0uM,MAAM/8L,MAAMnhF,KAAG85J,OAAA11J,eAC5BpE,KAAAwvE,QAAA0uM,MAAAplQ,Upeu4lEEmzR,Eoep4lEqB3vS,UAAW6e,gBAAA,WACjCnb,KAAKwvE,QAAQ0uM,MAAA6gB,aACd/+R,KAAAwvE,QAAAs3N,aAAA9mS,KAAAwvE,QAAA0uM,MAAA6gB,cpes4lEEkN,Eoen4lEwB3vS,UAAGgI,YAAA,WAC7BtE,KAAKwvE,QAAQ0uM,MAAAnpQ,UACb/U,KAAAwvE,QAAAz6D,WAaDk3R,EAAC3vS,UAAA4vS,OAAA,SAAA3jC,IA9BoB,IAAA9rP,GAAAC,CA+BrB,Ope03lEGovR,KACIpxS,OAAOM,GAAoB,WAAG,UAC9B+wS,GAA6C,coe35lEZ,mBAAAtvR,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAF5BuxS,EAA8B3vS,UAAA,iBpe+5lEvC2vS,Eoer6lEMH,Ipes6lEFpxS,Ooer6lEPM,GAAU,YACV4V,SAAU,oCACVE,SAAS,sBACTK,QAAA,4GACCsO,gBAAAzkB,GAAA,wBAAA0kB,SACWqsR,GAiCZ,wCAAArvR,MAAA,KAAAspR,SAAAtpR,GAAAhiB,UAADuxS,Mpe44lEIE,GAAyCnsS,MAAQA,KAAKuY,WAAc,WACpE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFwzR,GAA0CpsS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DizR,GAA0CrsS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iqe/6lE3D4yR,GAAA,SAAA1yR,Gre07lE3C,Qqel7lEH2yR,GASOnyR,EAAME,EAAEC,EAAYixR,EAC1BrsS,EAAAw5B,EAAA9e,EAAAW,EAAAivP,GAVkB,GAAApmQ,GAAIuW,EAAapd,KAAAwD,KAAAsa,EAAAC,IAAAva,IAUnC,OATOqD,GAAA+W,KAAMA,EACN/W,EAAAiX,SACAjX,EAAAkX,YAAaA,EACZlX,EAAAmoS,gBACAnoS,EAAAlE,WACAkE,EAAAs1B,SACAt1B,EAAAwW,QACAxW,EAAAmX,IAAIA,Ereo7lENnX,EAAMomQ,KAAOA,Eqel7lEnBpmQ,EAVD8oS,GAAmBI,EAGX3yR,Gre47lEL2yR,Eqe/6lEFjwS,UAAA+H,SAAA,WAHA,GAAIhB,GAAMrD,IACVA,MAAKoa,KAAA2Z,cAAmBpZ,UAAC,WAAkB,MAAAtX,GAAA6oS,Wreo7lErClsS,Kqen7lEJwrS,cAAUttB,MAAC2kB,mBACbloR,UAAA,SAAAkT,GAAA,MAAAxqB,GAAAmpS,kBAAA3+Q,Mreq7lEE0+Q,Eqel7lEYjwS,UAAAyoM,mBAAA,WACd/kM,KAAAksS,Ureo7lEEK,Eqej7lEmBjwS,UAAS4vS,OAAQ,Wrek7lEhC,Gqej7lEM,MAAXlsS,KAAIxC,MAA8B,MAAbwC,KAAA8L,MAAc,MAAA9L,KAAAysS,MACjB,MAAjBzsS,KAAOk+Q,MAAU,CAGlB,GAAI1gR,GAACwC,KAASxC,KAAA4G,cAAmBwE,wBAAyB6jS,EAASzsS,KAAAysS,KAAAroS,cAAAwE,wBAAA6D,EAAAjP,EAAA4xD,OAAA5xD,EAAAiP,IAAA2iD,EAAAq9O,EAAAr9O,OAAAq9O,EAAAhgS,GACnEzM,MAAKb,SAAS0L,SAAS7K,KAAK8L,KAAK1H,cAAe,MAAAqI,EAAU,MAC1DzM,KAAIb,SAAQ0L,SAAQ7K,KAAK8L,KAAA1H,cAAc,SAAAgrD,EAAwB,KAC/D,IAAIs9O,GAAO1sS,KAAO8L,KAAA1H,cAAUwE,uBAC5B5I,MAAAk+Q,MAAAguB,OAAAQ,Krei7lECH,Eqe76lEIjwS,UAAAqwS,YAAA,WAONlpJ,MAAA,iKrey6lEE8oJ,Eqet6lEiBjwS,UAAMswS,eAAwB,SAACzrO,GAClDnhE,KAAKwrS,cAActtB,MAAMqlB,kBAAkBpiO,GAC3CnhE,KAAKwrS,cAActtB,MAAMslB,mBAACxjS,KAAAwrS,cAAAttB,MAAAikB,oBAC1BniS,KAAAwrS,cAAAjF,Qrew6lEEgG,Eqer6lEiBjwS,UAAMknS,mBAAsB,SAAA9pR,GAC/C1Z,KAAAwrS,cAAAttB,MAAAslB,mBAAA9pR,Ireu6lEE6yR,Eqen6lEmBjwS,UAAAkwS,kBAAA,SAAA3+Q,GACpB7tB,KAAKmhE,OAAStzC,IACd7tB,KAAKmhE,MAAItzC,EACT7tB,KAAAwa,IAAAhP,gBAlEwC,IAAAiR,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAixK,CAFI,Ore2+lE3C+9G,KACI1xS,OAAOM,GAAoB,WAAG,+BAC9BqxS,GAAuC,cqe3+lEa,mBAAA5vR,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SACjB6xS,EAAAjwS,UAAA,ere4+lEvC8vS,IACI1xS,OAAOM,GAAoB,WAAG,+BAC9BqxS,GAAuC,cqe9+lEa,mBAAA3vR,MAAA,KAAA1hB,GAAA,YAAAA,GAAA,aAAA0hB,GAAAhiB,SACjB6xS,EAAAjwS,UAAA,ere++lEvC8vS,IACI1xS,OAAOM,GAAoB,WAAG,+BAC9BqxS,GAAuC,cqej/lEa,mBAAA1vR,MAAA,KAAA3hB,GAAA,YAAAA,GAAA,aAAA2hB,GAAAjiB,SAChB6xS,EAAAjwS,UAAA,erek/lExC8vS,IACI1xS,OAAOM,GAAoB,WAAGgxS,IAC9BK,GAAuC,cqep/lEmC,mBAAAzvR,MAAA,KAAAovR,SAAApvR,GAAAliB,SALrE6xS,EAAyBjwS,UAAA,gBre2/lElCiwS,EqejgmEHH,IrekgmEO1xS,OqejgmEPM,GAAU,YACV4V,SAAU,8BACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW2sR,GAsEZ,wCAAAxvR,MAAA,KAAA0iI,GAAA,GAAAA,GAAA,IAAA1iI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAugI,GAAA,GAAAA,GAAA,IAAAvgI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAsgI,GAAA,GAAAA,GAAA,IAAAtgI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAgpR,SAAAhpR,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAjiB,GAAA,WAAAA,GAAA,YAAAiiB,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAkgI,GAAA,GAAAA,GAAA,IAAAlgI,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAigI,GAAA,GAAAA,GAAA,IAAAjgI,GAAAziB,OAAA,mBAAA0iB,MAAA,KAAApiB,GAAA,mBAAAA,GAAA,oBAAAoiB,GAAA1iB,OAAA,mBAAA2zL,MAAA,KAAAi9G,SAAAj9G,GAAA3zL,UAAD6xS,IAtEsClvJ,GAAA,GreygmElCwvJ,GAAuC7sS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D0zR,GAAuC9sS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Ise1gmEzGqzR,GAGQ,WteuhmEL,QsezhmEKC,GAAsCx9N,EAAAp1D,EAAAG,EAAAkvP,EAAAwjC,EAAAn5Q,EAAA30B,EAAAw5B,EAAA9e,EAAA2wD,EAAA5xC,EAAAze,GACtCna,KAAAwvE,UACAxvE,KAAAoa,OACApa,KAAAua,YAAmCA,EAClCva,KAAAypQ,OACAzpQ,KAAAitS,eACAjtS,KAAA8zB,QAAQA,EACR9zB,KAAAb,WACAa,KAAA24B,SACA34B,KAAA6Z,MAAMA,EACN7Z,KAAAwqE,SACAxqE,KAAA44B,KAAKA,EAhBd54B,KAAAma,QAiBCna,KAAK6/I,eAAgB,EACrB7/I,KAAA6/I,cAAA7/I,KAAAoa,KAAA68G,qBte4hmEE+1K,EsephmEF1wS,UAAA+H,SAAA,WALA,GAAIhB,GAAMrD,IACVA,MAAKoa,KAAAwgB,SAAQ,GACb56B,KAAKwvE,QAAM22N,YAAOxrR,UAAU,WAAoB,MAAAtX,GAAK6pS,iBACrDltS,KAAK6Z,MAAM+xD,OAAKjxD,UAAU,SAACixD,GAAI,MAAKvoE,GAA0CwP,GAAE+4D,EAAC,KACjF5rE,KAAK6Z,MAAM5R,KAAC0S,UAAO,SAAUvgB,GAAC,MAAIiJ,GAAAyb,MAAK1kB,KACvC4F,KAAA24B,OAAA25B,OAAA33C,UAAA,SAAA1d,GAAA,MAAAoG,GAAAmsE,QAAAszN,qBte4hmEEkK,EsevhmEF1wS,UAAA6e,gBAAA,WAFA,GAAI9X,GAACrD,IACLA,MAAKb,SAAK6M,OAAQhM,KAAOoe,KAAA+uR,OAAA/oS,cAAA,0BAAAf,GAAA4pS,aAAA5tR,UACzBrf,KAAAoa,KAAAwgB,SAAA,Ite4hmEEoyQ,EsezhmEyB1wS,UAAAgI,YAAA,WAC3BtE,KAAA8zB,QAAAI,ete2hmEE84Q,EsexhmEe1wS,UAAAwiB,MAAA,SAAA7W,Gte0hmEX,GsezhmENjI,KAAIiI,KAAKA,EACK,MAAbjI,KAAIiI,KAAU,CteyhmEL,GsexhmEW,MAAnBjI,KAAKiI,KAAAo+R,cAAc,MAAArmS,KAAAiI,KAAAu+R,eAKpB,SAAA5/Q,OAAA,sBAJC5mB,MAAKotS,cACLptS,KAAKktS,eACLltS,KAAAwvE,QAAA1wD,MAAA9e,KAAAiI,Qte8hmEA+kS,EsexhmE0B1wS,UAAA8wS,YAAA,WAC3BptS,KAAK6Z,MAAMwzR,cACXrtS,KAAK6Z,MAAMwzR,YAACtgS,SAAoB/M,KAAAstS,UAAAttS,KAAAiI,KAAAu+R,gBAEhCxmS,KAAK24B,OAAO40Q,oBACZvtS,KAAA24B,OAAA+9F,cAAA12H,KAAA24B,OAAAlC,IAAA,IAAAz2B,KAAA6Z,MAAAwzR,YAAAtgS,SAAA,GAAAm2C,Qte0hmEC8pP,Ese5gmEF1wS,UAAAgxS,UAAA,SAAAtmQ,GAVA,GAAI3jC,GAAMrD,KACVwtS,KAAe98G,EAA4B1pJ,EAAA,GAAAj0B,IAS3C,Ote+gmEMi0B,GsevhmEL3pC,QAAS,SAAO9B,GACf8H,EAAMmnE,OAAM+1N,OAAQhlS,QAAmBsH,IAAbtH,EAAEwR,StewhmEhBygS,EsevhmEJx2R,MAAKksC,KAAO3nD,EAAAwX,KAAA2/B,UAAew4P,GAAAn+R,SAAA1J,EAAAiqS,UAAA/xS,EAAAwR,YACnC1J,EAAWmnE,OAAO61N,aAAU9kS,IAC3BiyS,EAAAx2R,MAAAksC,KAAA3nD,EAAAwX,KAAA2/B,UAAAi1P,OAEH6F,EAAOx2R,MAAOksC,KAAM,GAAIwtI,WAAYA,EAAYC,UAAI,SACpD68G,EAAOx2R,MAAOksC,KAAA,KAAAwtI,eACd88G,GteyhmEER,EsethmE0B1wS,UAAU4wS,aAAe,WACrD,GAAAtoS,GAAW5E,KAAMytS,YAAU,QAAM,SAAeztS,KAAE6S,GAAO,gBAAU7S,KAAUiI,KAAOu+R,eACpF5hS,GAAKoS,MAAQjE,KAAK,OAAAgtI,KAAA,gBAAAlmI,OAAA,yBAAA6zR,aAAA,IteuhmEZ1tS,KsethmEL8zB,QAAQiG,MACR0mH,SAAMn3H,KAAAP,MACNhW,KAAK,wBACHnO,WteyhmEDooS,EsephmE4B1wS,UAAAmxS,WAAA,SAAA5zR,EAAAmtB,GteshmExB,IserhmED,GAALpiC,MAAUq0B,EAAA,EAAA4mQ,EAAA74P,EAAA/N,EAAA4mQ,EAAAxhS,OAAA46B,IAAA,CACT,GAAI19B,GAAEskS,EAAQ5mQ,IACJ,kBAAT19B,EAAAwX,MAAS/S,KAAA44B,KAAAylP,mBAET9iR,EAAA+0B,OAAS/0B,EAAAwX,OACR/S,KAAKwqE,OAAM+1N,OAAAhlS,MAAAwR,SteshmEInI,EserhmEdoS,MACAjE,SAAWlQ,IAALtH,EAAA+0B,MAAK,GAAiBtwB,KAAA2tS,eAAApyS,EAAA+0B,MAAA,gBAC5ByvH,KAAK//I,KAAE4tS,eAAgBryS,GACvBse,MAAMA,EAAK2R,QAAUjwB,EAACwX,OACpB9K,KAAAjI,KAAAytS,WAAA5zR,EAAA2R,QAAAjwB,EAAAwX,OAAAxX,EAAAwR,YAGE/M,KAAKwqE,OAAC61N,aAAA9kS,IteshmEIqJ,EserhmEdoS,MACAjE,KAAMxX,EAAA+0B,MAAK,GAAAtwB,KAAA2tS,eAAiBpyS,EAAA+0B,MAAA,gBAC5ByvH,KAAK//I,KAAE4tS,eAAgBryS,GACvBse,MAAOA,EAAI2R,QAAOjwB,EAAAwX,OAChBS,QAAAjY,EAAAiY,YAKN,MAAA5O,IteuhmEEooS,EsephmE2B1wS,UAAAsxS,eAAA,SAAAryS,GAC7B,GAAAwkJ,EteqhmEM,QsephmELxkJ,EAAKwX,MteqhmEI,IserhmEM,SAAyBgtI,EAAM,gBAC9C,MteuhmES,KsevhmEI,OAAqBA,EAAM,YACxC,MteyhmES,KsezhmEc,iBAAsBA,EAAM,aACnD,Mte2hmES,Kse3hmEU,aAAuBA,EAAM,cAEhD,Mte4hmES,Kse5hmEQ,WAAwBA,EAAM,eAC/C,MACA,SAAAA,MAAAl9I,GAED,MAAAk9I,Ite+hmEEitJ,Ese5hmEY1wS,UAAAqxS,eAAA,SAAA56R,Gte6hmER,Ose5hmELA,GACA,IAAK,wBAAwB,MAAO,eACpC,KAAK,uBAAsB,MAAO,UAClC,KAAK,qBAAsB,MAAE,SAC7B,4BAAqB,aACrB,eAAAA,IAjIiC,IAAA0J,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAixK,CAmInC,Ote8hmEGw+G,KACInyS,OAAOM,GAAoB,WAAGkwS,IAC9B4B,GAAoC,csenqmEqB,mBAAArwR,MAAA,KAAAyuR,SAAAzuR,GAAA/hB,SAJpDsyS,EAA+B1wS,UAAA,eteyqmExC0wS,Ese/qmEOH,ItegrmEHnyS,Ose/qmEPM,GAAU,YACV4V,SAAU,2BACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWotR,GAuIZ,wCAAApwR,MAAA,KAAAspR,SAAAtpR,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4iI,GAAA,GAAAA,GAAA,IAAA5iI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyuR,SAAAzuR,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAi2P,SAAAj2P,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAhiB,GAAA,WAAAA,GAAA,YAAAgiB,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAmgI,GAAA,GAAAA,GAAA,IAAAngI,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAkgI,GAAA,GAAAA,GAAA,IAAAlgI,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAyhR,SAAAzhR,GAAAziB,OAAA,mBAAA0iB,MAAA,KAAAmrK,GAAA,GAAAA,GAAA,IAAAnrK,GAAA1iB,OAAA,mBAAA2zL,MAAA,KAAA/wC,GAAA,GAAAA,GAAA,IAAA+wC,GAAA3zL,UAADsyS,MtegjmEIa,GAAmD7tS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D00R,GAAmD9tS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC5F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iue5smEzGq0R,GAA0D,WveitmEvD,QuejtmEiBC,GAAsCx+N,GAAKxvE,KAAAwvE,UveotmE5Dw+N,EuehtmEU1xS,UAAAi0L,cAAA,SAAA79I,EAAAu7P,EAAAnsI,EAAAC,GACZ,SAPW,IAAAtlJ,EAQZ,OvektmEGuxR,Gue3tmESH,Ive4tmELnzS,OAAOM,GAAqB,cue3tmEvB8yS,GAQZ,wCAAArxR,MAAA,KAAAupR,SAAAvpR,GAAA/hB,UAADszS,Mve2tmEIE,GAAiDluS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D+0R,GAAiDnuS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IwenumEzG00R,GAA0C,WxewumEvC,QwexumEiBC,GAAsB7+N,GAAKxvE,KAAAwvE,Uxe2umE5C6+N,EwezumEkB/xS,UAAa4qB,QAAA,SAAAmuQ,EAAA1mO,GACjC,MAAA3uD,MAAAwvE,QAAA8+N,aAZW,IAAA7xR,EAaZ,Oxe2umEG4xR,GwezvmEOH,Ixe0vmEHxzS,OAAOM,GAAqB,cwezvmEvBmzS,GAaZ,wCAAA1xR,MAAA,KAAA4lN,SAAA5lN,GAAA/hB,UAAD2zS,MxeovmEIE,GAAmDvuS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAClH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Do1R,GAAmDxuS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC5F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IyehwmEzG+0R,GAAqE,WzeswmElE,QyetwmEiBC,GAAsBl/N,EAAAp1D,GAAUpa,KAAAwvE,UAAsBxvE,KAAAoa,Oze0wmEvEs0R,EyevwmEsBpyS,UAAA4qB,QAAA,SAAArN,EAAAsnD,GAExB,MADAnhE,MAAAoa,KAAOwgB,SAAK,GACZ56B,KAAAwvE,QAAAqzJ,gBAPW,IAAApmN,GAAAC,CAQZ,OzeywmEGgyR,GyelxmESH,IzemxmEL7zS,OAAOM,GAAqB,cyelxmEvBwzS,GAQZ,wCAAA/xR,MAAA,KAAA4lN,SAAA5lN,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6iI,GAAA,GAAAA,GAAA,IAAA7iI,GAAAhiB,UAADg0S,MzekxmEIC,GAAkD3uS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dw1R,GAAkD5uS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC3F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0etxmEzGm1R,GAIwB,W1e2xmErB,Q0e9xmEMC,GAAsBt/N,EAAA52C,EAAAxe,EAAAqc,GACtBz2B,KAAAwvE,UACAxvE,KAAA44B,OACA54B,KAAAoa,OAXDpa,KAAAy2B,MACAz2B,KAAA+uS,YAAA,WACA/uS,KAAAgvS,iBAAkB,UAClBhvS,KAAAivS,cAAW,EACXjvS,KAAAu4J,SAAU,QAAI,iBAAmB,SAOZv4J,KAAAkvS,QAAA,GAAAhlH,IAAA,Q1esymE1B4kH,E0enymEmBxyS,UAAA4qB,QAA4B,SAAIrN,EAAAsnD,GAIrD,MAHAnhE,MAAKxC,KAAKvC,SAAQ0rD,qBAAM,WACxB3mD,KAAKoa,KAAAwgB,SAAW,GAChB56B,KAAAmvS,WACAnvS,KAAAkvS,QAAAp4K,gB1eqymEEg4K,E0elymE2BxyS,UAAQ6yS,SAAY,WAChDnvS,KAAKivS,aAAejvS,KAAAu4J,QAAAl6J,OAAA,GACpB2B,KAAKivS,eACLjvS,KAAAw7B,WAAAx7B,KAAAu4J,QAAAv4J,KAAAivS,gBAEAjvS,KAAAkvS,QAAAxgJ,Y1esymECogJ,E0e1wmEFxyS,UAAAk/B,WAAA,SAAAzoB,G1egxmEM,I0enymEJ,GALE1P,GAAArD,KACAovS,EAAc,MAAMrsS,KAAK4M,MAAA,IAAqB5M,KAAKqlC,UACnDvL,EAAK78B,KAAGy2B,IAAMolH,KAAA77I,KAAA+uS,YAAAh8R,EAAA/S,KAAAgvS,iBAAAI,GACdC,GAAQ,EACZtiS,EAAc/M,KAAMxC,KAAAmpD,qBAAkB,UACjCroD,EAAA,EAAQmwB,EAAC1hB,EAAQ1O,OAAAwvB,MAAA,GAAAvvB,EAAAmwB,EAAAnwB,I1eqymEZ,G0epymETuvB,EAAI9gB,EAAEvH,KAAYlH,GACjBuvB,EAAA/Z,aAAa,QAAA+oB,EAAA,CACbwyQ,GAAM,CACN,O1esymEI,G0enymELA,EACArvS,KAAAmvS,eACA,CACA,GAAA1yQ,GAAWxhC,SAAGiC,cAAkB,SAChCu/B,GAAOhsB,KAAK,kBACZgsB,EAAOK,OAAQ,EACfL,EAAO0wM,OAAO,EACd1wM,EAAO85P,QAAA,QACP95P,EAAOthC,iBAAiB,QAAQ,SAAA8B,GAAM,MAAAoG,GAAK6rS,QAAUvwR,MAAE1hB,KAAO,GAC9Dw/B,EAAOthC,iBAAU,wBAAAkI,GAAA8rS,aAAA,GACjB1yQ,EAAKI,IAAKA,EACV78B,KAAAxC,KAAA2/B,YAAAV,IAvDU,IAAAhgB,GAAAC,EAAAC,EAAAC,CAyDZ,O1esymEGkyR,G0eh2mEOH,I1ei2mEHj0S,OAAOM,GAAqB,c0eh2mEvB4zS,GAyDZ,wCAAAnyR,MAAA,KAAA4lN,SAAA5lN,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4iI,GAAA,GAAAA,GAAA,IAAA5iI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA0iI,GAAA,GAAAA,GAAA,IAAA1iI,GAAAliB,UAADo0S,M1e+ymEIQ,GAAiDtvS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChH,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dm2R,GAAiDvvS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1F,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2el3mEzG81R,GAG0B,W3ew3mEvB,Q2e13mEMC,GAAc92Q,EAAA62C,EAAA52C,GACd54B,KAAA24B,OAAOA,EACP34B,KAAAwvE,UACJxvE,KAAA44B,O3e43mEF62Q,E2ep2mEFnzS,UAAA0pL,YAAA,SAAAnsK,EAAA80C,GArBA,GAAMtrD,GAAOrD,KACT4/Q,EAAO/lQ,EAAQ+xD,OAAS,E3e23mEtB,O2e13mEM,OAAXg0M,GAA0B,MAAd5/Q,KAAW44B,KAAGta,UAChBte,KAACu0R,cACVv0R,KACAwvE,QAAAgzJ,WAAAxiO,KAAI44B,KAAAta,UAAIshQ,GACPn/E,KAAK/lM,OAAQ+8M,GAAe,cAAA+mB,G3e03mErB,I2ez3mENA,IAAOA,EAAK8I,UACT,MAAOjkO,GAAGkxR,aACd,IAAI9/F,K3e03mEG,K2ex3mENA,EAAA51K,KAAAC,MAAA0/M,EAAA8I,W3e23mEM,M2e13mEN3oN,GAEA,MADA4pB,SAAO5pB,MAAKA,GACZtb,EAAAkxR,cAED,GAAIttQ,GAAKvsB,OAAMusB,KAAMwtK,E3e23mEd,O2e13mEM,KAAZxtK,EAAA5oB,QAAY,OAAA4oB,EAAA,IAGb5jB,EAAAqsS,YAAA9vB,O3e43mED6vB,E2ex3mEoBnzS,UAASi4R,YAAW,WAE1C,MADAv0R,MAAA24B,OAAYgC,UAAC,oBACb,G3e03mEE80Q,E2ev3mEoBnzS,UAASozS,YAAmB,SAAA9vB,GAElD,MADA5/Q,MAAA24B,OAAYgC,UAAC,iBAAAilP,EAAAxN,GAAA,EAAA5gG,WACb,EAxCW,IAAA/0J,GAAAC,EAAAC,CA0CZ,O3ew3mEG8yR,G2en6mEOH,I3eo6mEH50S,OAAOM,GAAqB,c2en6mEvBu0S,GA0CZ,wCAAA9yR,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2lN,SAAA3lN,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4rK,GAAA,GAAAA,GAAA,IAAA5rK,GAAAjiB,UAAD+0S,M3ei4mEIE,GAAyC3vS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G4e35mE/Dw2R,KAEC1sP,KAAA,GACA8iI,aAAawpH,IACbj/G,eAASw9G,I5ey7mEH7mR,S4ev7mEL2oR,cAAchB,GACdxI,aAAc+H,GACd5H,eAAAiI,IAED/7P,UAAAq6P,KAGA7pP,KAAA,KAAAwtI,WAAA,KAGDo/G,IACAjB,GACAT,GACAK,GACAzI,GACA/D,GACArD,GACA0M,GACAkE,GACCzB,IAGDgC,IACAhD,GACAT,GACAN,GACAd,GACAvD,GACAiB,GACCJ,IAsBFwH,GAAA,WAAwC,QAACC,MAAA,M5eo6mErCA,G4ex7mEHN,I5ey7mEOj1S,O4ex7mEPM,GAAS,W5ey7mEEqX,S4ev7mEVq1J,GAAY,EACZvqB,GAAW,aACXsqB,GAAA,YACArqB,GAAoB,EAAAoa,SAAAo4I,IACpB3/F,GACAwuF,GAAgB,EAChBzH,GAAA,iBACA35I,GAAiB,EACjBo9H,GACA7nB,IAID98O,UAAAg6R,GAAuBnyS,QACvByU,aAAA29R,GAAiBpyS,QACjBqzL,gBAAS++G,GACRn+S,QAAAm+S,MACsCE,M5e67mEpCzkR,GAAStxB,EAAoB,IAI7Bg2S,GAAoClwS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G6erhnEhE+2R,GAAA,WAcA,QAACC,MAAA,M7e6gnEGA,G6exhnEU9zS,UAAKo2J,UAAK,SAAAT,EAAA//C,G7eyhnEhB,M6exhnEL+/C,GAAMD,KAAG,SAAWlvI,EAAMnK,GAC1B,GAAI03R,GAAKnvQ,SAASpe,EAAEovF,EAAMo+L,IAAM,IAC5BC,EAAKrvQ,SAASvoB,EAAAu5F,EAAMo+L,IAAA,G7eyhnEf,O6exhnEM,QAAdp+L,EAAAzhG,KACS8/R,EAAIF,EACC,OAAdn+L,EAAAzhG,KACQ4/R,EAAAE,EACP,K7e2hnEDH,E6evinEHF,IACYx1S,OAAAM,GAcZ,OAAA+X,KAAA,wBAADq9R,M7eginEII,GAAwCxwS,MAAQA,KAAKuY,WAAc,WACnE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF63R,GAAyCzwS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Ds3R,GAAyC1wS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8e5inE7Di3R,GAAA,SAAA/2R,G9e+jnEzC,Q8e7hnEHg3R,GAcCx2R,EAAME,EAAQC,EAAYC,EAC1Bme,EAAAs5H,EAAAn+H,EAAA3Z,EAAAye,EAAA4qM,EAAAqtE,EAAApwG,GAdO,GAAAp9L,GAAIuW,EAAapd,KAAAwD,KAAAsa,EAAAC,IAAAva,IAcxB,OAbOqD,GAAA+W,KAAMA,EACN/W,EAAAiX,SACCjX,EAAAkX,YAAsBA,EACtBlX,EAAAmX,IAAMA,EACNnX,EAAAs1B,SACAt1B,EAAA4uJ,KAAOA,EACP5uJ,EAAAywB,UACAzwB,EAAA8W,QACA9W,EAAAu1B,OACAv1B,EAAAmgO,cAAcA,EACdngO,EAAAwtS,eAAwBA,EA5CxBxtS,EAAAo9L,KAAOA,EAChBp9L,EAAAytS,KAAAvqB,GAAiC,E9e2knE1BljR,E8e1knEJ0tS,WACFT,GAAI,aACH7/R,KAAA,OAIFpN,EAAA2a,MAAA,E9eyknEO3a,E8exknEN2tS,W9eyknEUj+R,M8evknETk+R,YAAA,EAAAC,YAAA,EAAAC,YAAA,EAAAC,aAAA,EAAAC,MAAA,EAAAC,aAAA,G9e0knESt4B,S8evknETu4B,YAAA,EAAAL,YAAA,EAAAC,YAAA,EAAAK,YAAA,EAAAH,MAAA,EAAAI,gBAAA,G9e0knESp1B,S8evknETk1B,YAAA,EAAAL,YAAA,EAAAC,YAAA,EAAAK,YAAA,EAAAH,MAAA,EAAAK,gBAAA,G9e0knES70J,S8evknETo0J,YAAA,EAAAU,aAAA,EAAAC,aAAA,EAAAR,aAAA,EAAAC,MAAA,EAAAQ,gBAAA,IAGFxuS,EAAAyuS,mBAAoB,EACpBzuS,EAAA0uS,kBAAyC,E9eyknElC1uS,EAAM2uS,iB8eljnEZ3uS,EAfDmtS,GACyBI,EAGhBh3R,G9egknENg3R,E8e3hnEFt0S,UAAA+H,SAAA,WAvBA,GAAIhB,GAACrD,IACLA,MAAKiyS,UAAUjyS,KAAKoa,KAAM2Z,cAAApZ,UAAA,iBAAAtX,GAAAmX,IAAAhP,iB9eojnEpBxL,K8enjnEJkyS,QAAUlyS,KAAAiyJ,KAAAx6I,EACVkD,UAAW,SAAU49I,G9eojnEb,G8enjnEG,MAAVA,EAQC,SAAA3xI,OAAA,sBAPDvjB,GAAK2a,MAAQu6I,EAAQv6I,MACrB3a,EAAK6uG,MAAIqmD,EAAY98I,QAErBpY,EAAKmX,IAAAhP,eAELnI,EAAAywB,QAAA80P,gBAAArwH,M9eujnEDq4I,E8evinEgBt0S,UAAO6e,gBAAA,WACzBnb,KAAKoa,KAAAwgB,SAAQ,GACb56B,KAAA8zB,QAAAjzB,U9eyinEE+vS,E8etinEat0S,UAAcgI,YAAA,WAC7BtE,KAAKiyS,UAAQr7K,cACb52H,KAAIkyS,QAAKt7K,cACO,MAAf52H,KAAKunO,WAAqBvnO,KAAGunO,UAAAxgK,QAC1B/mE,KAACunO,UAAY3wG,cACjB52H,KAAIunO,UAAa,KACF,MAAdvnO,KAAKmyS,UAAoBnyS,KAAGmyS,SAAAprO,QACzB/mE,KAACmyS,SAAWv7K,cAChB52H,KAAImyS,SAAK,KACO,MAAfnyS,KAAKoyS,WAAqBpyS,KAAGoyS,UAAArrO,QAC1B/mE,KAACoyS,UAAYx7K,cACjB52H,KAAAoyS,UAAA,M9ewinEExB,E8erinEUt0S,UAAkB+1S,kBAAA,SAAA7sS,EAAAvI,GAC7BA,IAAEA,EAAAwqO,mBACFxqO,EAAE44G,iBACF54G,EAAEyqO,2BACFzqO,EAAAyiM,mBAEDl6L,EAAI6N,UAAa7N,EAAG6N,Q9ewinEd,K8etinED,GADDi/R,IAAgB,EACpBC,EAAgB,EAAPt5Q,EAAG,EAAAxc,EAAAzc,KAAAkyG,MAAAj5E,EAAAxc,EAAApe,OAAA46B,IAAA,CACHxc,EAAAwc,GACP5lB,WACAk/R,IACAD,GAAA,GAGFtyS,KAAK8xS,kBAAoBQ,EACzBtyS,KAAA+xS,kBAAAQ,G9ewinEE3B,EAAwBt0S,UAAUk2S,qBAAuB,SAAUlC,G8erinErE,GAAI7zR,E9euinEE,O8etinELzc,MAAA+wS,UAAST,IAAWA,GACrBmC,WAAU,IACVh2R,OAAA,WAAAzc,KAAA+wS,UAAAtgS,OAAA,EAAAgM,EAAA,UAAAA,I9ewinEEm0R,E8erinEiBt0S,UAAQ01J,KAAK,SAAAs+I,GACT,OAAtBtwS,KAAK+wS,UAAUtgS,K9esinENzQ,KAAK+wS,UAAUtgS,KAAO,O8eninE5BzQ,KAAC+wS,UAAYtgS,KAAM,MACvBzQ,KAAK+wS,UAAQT,GAAKA,EAClBtwS,KAAKkyG,MAAIlyG,KAAAygM,KAAc/tC,UAAC1yJ,KAAAkyG,MAAAlyG,KAAA+wS,WACxB/wS,KAAAwa,IAAAhP,gB9euinEEolS,E8ezhnEFt0S,UAAAo2S,SAAA,WAXA,GAAIrvS,GAACrD,IACLA,MAAK2yS,sB9esinEC3yS,KAAKma,M8epinET+E,OAAOlf,KAAKua,YAAYmE,UAAU,wCAClCS,MAAInf,KAAOua,YAAYmE,UAAA,mCACvBU,GAAA,QAAA7I,SAAA,kBAAA8I,OAAA,EAAAC,MAAA,iBAAAjc,GAAAuvS,mBAGAzzR,MAAInf,KAAOua,YAAUmE,UAAA,kCACrBU,GAAA,MAAA7I,SAAA,kBAAA8I,OAAA,M9ewinEAuxR,E8ezhnEFt0S,UAAAs2S,cAAA,WAVA,GAAIvvS,GAAKrD,IACD,QAAPA,KAAA44B,KAAOta,WAAA,OAAAte,KAAAgyS,eAAA,IAAAhyS,KAAAgyS,cAAA3zS,SAER2B,KAAKoa,KAAAwgB,SAAW,G9eqinEV56B,K8epinEJmyS,SACAnyS,KAAAwjO,cAAIhB,WAACxiO,KAAI44B,KAAAta,UAAUte,KAAKgyS,cAAc,GAACn/R,IAIvC4tL,KAAA/lM,OAAU+8M,GAAM,cAAKr+L,GAAK,OAAarG,KAAGqG,EAAArG,KAAAu0N,UAAAluN,EAAAkuN,UAAAjtO,YAAA+e,EAAA/e,eAAAK,OAAA+8M,GAAA,oBAAAo7F,GAAA,MAAAxvS,GAAAmgO,cAAAd,aAAAr/N,EAAAu1B,KAAAta,UAAAu0R,KAAA7yS,KAAA8yS,oBAC5Cn4R,UAAA,iBAAAtX,GAAA+W,KAAAwgB,SAAA,O9ekinEEg2Q,E8ephnEFt0S,UAAAy2S,UAAA,WAXA,GAAI1vS,GAACrD,IACLA,MAAK2yS,sB9eiinEC3yS,KAAKma,M8e/hnET+E,OAAOlf,KAAKua,YAAYmE,UAAU,qCAClCS,MAAInf,KAAOua,YAAYmE,UAAA,gCACvBU,GAAA,QAAA7I,SAAA,kBAAA8I,OAAA,EAAAC,MAAA,iBAAAjc,GAAA2vS,oBAGA7zR,MAAInf,KAAOua,YAAUmE,UAAA,+BACrBU,GAAA,MAAA7I,SAAA,kBAAA8I,OAAA,M9eminEAuxR,E8ejhnEFt0S,UAAA02S,eAAA,WAbA,GAAI3vS,GAAKrD,IACD,QAAPA,KAAA44B,KAAOta,WAAA,OAAAte,KAAAgyS,eAAA,IAAAhyS,KAAAgyS,cAAA3zS,SAER2B,KAAKoa,KAAAwgB,SAAY,G9eginEX56B,K8e5hnEJoyS,UAAU5mR,GAAA,OAAA5hB,UAAA,GAAA5J,KAAAgyS,cAAAz1S,IAAA,SAAAiJ,GAAA,MAAAnC,GAAAmgO,cAAAZ,aAAAv/N,EAAAu1B,KAAAta,UAAA9Y,EAAAqN,GAAAgO,eAAA4/K,KAAAzgM,KAAA8yS,oBACVn4R,UAAK,WACLtX,EAAK2uS,iBACL3uS,EAAK0uS,kBAAoB,EACzB1uS,EAAKyuS,mBAAoB,EACvBzuS,EAAA+W,KAAAwgB,SAAA,O9e+hnEFg2Q,E8elhnEFt0S,UAAA22S,OAAA,WATA,GAAI5vS,GAAOrD,I9e6hnELA,MAAKma,M8e1hnETjc,MAAO8B,KAAKua,YAAYmE,UAAU,gCAAkC1e,KAAAua,YAAgBmE,UAAI,iCACxFS,MAAOnf,KAAAua,YAAamE,UAAK,6BAAiBU,GAAA,QAAAC,OAAA,EAC1CC,MAAA,SAAAvM,GAAA,MAAA1P,GAAA6vS,OAAAngS,MAGDoM,MAAUnf,KAAEua,YAAAmE,UAAA,gCAAAU,GAAA,MAAAC,OAAA,IACb,a9e2hnEEuxR,E8exhnEUt0S,UAAkBkrO,iBAAA,SAAA/E,EAAAxlO,GAC7BA,IAAEA,EAAAwqO,mBACFxqO,EAAE44G,iBACF54G,EAAEyqO,2BACFzqO,EAAAyiM,mBAED1/L,KAAA24B,OAAOgC,UAAA,iBAAA8nM,K9e2hnELmuE,E8evhnEkBt0S,UAAA62S,aAAmB,SAAA3tS,GACvCxF,KAAA6wS,eAAAtT,YAAA/3R,G9eyhnEEorS,E8ethnEKt0S,UAASwsR,WAAiB,SAAKC,GACtC,MAAA75D,IAAAU,iBAAAm5D,I9ewhnEE6nB,E8erhnEgBt0S,UAAMq2S,oBAAA,WACxB3yS,KAAgBgyS,gB9eshnEV,K8ethnED,GAAI/4Q,GAAG,EAAAxc,EAAAzc,KAAAkyG,MAAAj5E,EAAAxc,EAAApe,OAAA46B,IAAA,CACX,GAAI4C,GAAIpf,EAAAwc,EACP4C,GAAIxoB,UAAyBrT,KAAAgyS,cAAAh7R,KAAA6kB,GAE/B77B,KAAA+xS,kBAAA/xS,KAAAgyS,cAAA3zS,Q9eyhnEEuyS,E8e/gnEFt0S,UAAA42S,OAAA,SAAAngS,GAPA,GAAI1P,GAAKrD,I9ewhnEH,I8evhnEwC,MAA7CA,KAAM44B,KAAAta,UAA6C,CACnD,GAAIiuB,IAAUx5B,KAAQA,EAAAu0N,UAAa,KAAAjtO,YAAA,I9ewhnE1B2F,M8evhnEPunO,UAAYvnO,KAAKwjO,cACjBd,aAAU1iO,KAAA44B,KAAAta,UAAmBiuB,GAC7Bk0J,KAAAzgM,KAAU8yS,oBACZn4R,UAAA,SAAApf,GAAA,MAAA8H,GAAAmkO,iBAAAjsO,EAAAsX,Q9e0hnEC+9R,E8erhnEFt0S,UAAAw2S,iBAAA,WADA,GAAAzvS,GAAOrD,IACP,OAAAtF,QAAA+8M,GAAA,oBAAAr+L,GAAA,MAAA/V,GAAA4uJ,KAAA29F,QAAAnvD,KAAA/lM,OAAA+8M,GAAA,cAAAlxJ,GAAA,MAAAntC,QA9OW,IAAAqD,GAAAC,EAAAC,EAAAC,EAAAC,EAAuBC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAS,O9ewwnEzCwzR,G8e/wnEHH,I9egxnEO/1S,O8e/wnEPM,GAAU,YACV4V,SAAU,mBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAgB,OAChBkmM,eAAe+vG,IACd1wR,gBAAAzkB,GAAA,wBAAA0kB,SACWgxR,GA+OZ,wCAAAj0R,MAAA,KAAA8iI,GAAA,GAAAA,GAAA,IAAA9iI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA5hB,GAAA,mBAAAA,GAAA,oBAAA4hB,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAugI,GAAA,GAAAA,GAAA,IAAAvgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA4pQ,SAAA5pQ,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAsgI,GAAA,GAAAA,GAAA,IAAAtgI,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAsrK,GAAA,GAAAA,GAAA,IAAAtrK,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAmlN,SAAAnlN,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAk+Q,SAAAl+Q,GAAAziB,OAAA,mBAAA0iB,MAAA,KAAA+yR,SAAA/yR,GAAA1iB,UAADk2S,IA/OoCvzJ,GAAA,G9euxnEhC+1J,GAA8CpzS,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Di6R,GAA8CrzS,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+elynEzG45R,GAIS,W/eqynEN,Q+exynEMC,GAAU1mJ,EAAApR,EAAAjhI,EAAA8rQ,GACVtmR,KAAA6sJ,OACA7sJ,KAAAy7I,UAAsBA,EACtBz7I,KAAAwa,MAXYxa,KAAAsmR,WAA2BA,EAEhDtmR,KAAAwzS,KAAO,kBAUFxzS,KAAAyzS,SAAA,E/e4ynEFF,E+ezynEiBj3S,UAAAgI,YAAA,WAClBtE,KAAK0zS,UACF1zS,KAAC0zS,SAAW98K,cAChB52H,KAAK0zS,SAAM,KACV1zS,KAAI2zS,SACLrW,IAAAsW,gBAAA5zS,KAAA2zS,U/e2ynEEJ,E+evynEcj3S,UAAAgjB,MAAA,SAAAriB,GACd+C,KAACw9B,OACFvgC,EAAE44G,iBACF54G,EAAEyiM,kBACFziM,EAAAyqO,2BACA1nO,KAAA4vP,U/e0ynEC2jD,E+e7wnEFj3S,UAAAszP,MAAA,WAzBA,GAAIvsP,GAAOrD,IACVA,MAAK0zS,UACF1zS,KAAC0zS,SAAU98K,cACf52H,KAAKyzS,SAAI,EACTzzS,KAAKwa,IAAAhP,e/ewynECxL,K+evynEJ0zS,SACA1zS,KAAA6sJ,KAAA7qJ,IAAAhC,KAAIy2B,KAAAo9Q,aAAQnsI,GAAkC,EAAAosI,OAE9CrzG,KAAA/lM,OACA+8M,GAAI,cAAA/qK,GAAA,UAAAonQ,OAAApnQ,EAAAqnQ,SAAAtjS,KAAApN,EAAAmwS,UACH74R,UAAK,SAAco5R,GACnB1wS,EAAKswS,QAAOrW,IAAK0W,gBAAUD,GAC3B1wS,EAAKm6B,KAAIn6B,EAAAo4I,UAAegxI,uBAAAppR,EAAAswS,SAEzBtwS,EAAAmX,IAAAhP,gB/eoynEO,S+enynEEmT,GACR4pB,QAAK5pB,MAAOA,GACZtb,EAAKowS,SAAI,EAEVpwS,EAAAmX,IAAAhP,gB/emynEO,W+elynEM,MAAMhD,uBAAW,WAC7BnF,EAAK4wS,QAAO5wS,EAAGijR,WAAMliR,eACrBf,EAAKowS,SAAI,EAHJpwS,EAKLmX,IAAAhP,oB/eoynED+nS,E+ehynEEj3S,UAAA23S,QAAA,SAAA/0S,G/eiynEE,I+e/xnELA,EAAAX,cAAA,GAAA+yP,YAAA,U/ekynEK,M+ejynEL4iD,G/ekynES,I+ehynER3rQ,QAAS5pB,MAAGu1R,EACZ,IAAIC,GAAAl5S,SAAem5S,YAAS,cAC5BD,GAAAE,eAAQ,SAAmB,KAAAp0S,OAAA,gCAC3Bf,EAAAX,cAAA41S,G/emynEQ,M+elynERG,GACA/rQ,QAAQ5pB,MAAK21R,GACbp1S,EAAAogB,UA1E0B,IAAA5C,GAAAC,EAAAC,EAAAC,EAAAC,CA6E7B,O/eoynEGs2R,KACI14S,OAAOM,GAAgB,OAAG,sBAC1Bq4S,GAA2C,c+en3nET1vR,SACpB4vR,EAAAj3S,UAAA,c/eo3nElB82S,IACI14S,OAAOM,GAAsB,aAAG,QAChCq4S,GAA2C,c+et3nEM34S,SACnC64S,EAAAj3S,UAAA,e/eu3nElB82S,IACI14S,OAAOM,GAAsB,aAAG,QAChCq4S,GAA2C,c+ez3nEgB1vR,SAuBlE4vR,EAAAj3S,UAAA,e/eo2nEG82S,IACI14S,OAAOM,GAAuB,cAAG,SAAU,WAC3Cq4S,GAA2C,cAAe1vP,UAC1D0vP,GAA2C,qBAA4F,mBAA9D32R,EAA6B,mBAAjBotQ,eAAgCA,eAAgCptQ,GAAMhiB,SAC3J24S,GAA2C,wB+ej2nEjD,KAlCWE,EAA2Bj3S,UAAA,c/eq4nEpCi3S,E+ez4nEHH,I/e04nEO14S,O+ez4nEPM,GAAU,YACV4V,SAAU,uBACTC,SAAA,uBACWwiS,GA+EZ,wCAAA12R,MAAA,KAAA+qJ,GAAA,GAAAA,GAAA,IAAA/qJ,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA+qJ,GAAA,GAAAA,GAAA,IAAA/qJ,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA7hB,GAAA,mBAAAA,GAAA,oBAAA6hB,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA9hB,GAAA,YAAAA,GAAA,aAAA8hB,GAAApiB,UAAD64S,M/ek0nEIgB,GAAiCv0S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Ggfr5nE/Do7R,KAECtxP,KAAA,GAAAxQ,UAAAi+P,KAGAztP,KAAA,KAAAwtI,WAAA,KAGD+jH,IACC9D,IAiBF+D,GAAA,WAAgC,QAACC,MAAA,Mhfi5nE7BA,Ggfh6nEHJ,Ihfi6nEO75S,Ogfh6nEPM,GAAS,Whfi6nEEqX,Sgf/5nEVq1J,GAAY,EACZvqB,GAAA,aACAC,GAAA,EAAAoa,SAAAg9I,IACAn3J,GAAA,Ghfk6nEUjrI,agf/5nEVqiS,GAAAjpR,QACA2kR,GACAmD,KAEDtiH,gBAASyjH,GACR7iT,QAAA6iT,MAC8BE,Mhfs6nE5BC,GAA4C50S,MAAQA,KAAKuY,WAAc,WACvE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFi8R,GAA6C70S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D07R,GAA6C90S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACtF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iifz8nElEq7R,GAAA,SAAAn7R,Gjfs9nEpC,Qif78nEHo7R,GAQC56R,EAAME,EAAQC,EAAYC,EAAAX,EAC1Bo4I,EAAAn+H,GATkB,GAAAzwB,GAAIuW,EAAapd,KAAAwD,KAAAsa,EAAAC,IAAAva,IASnC,OAROqD,GAAA+W,KAAMA,EACN/W,EAAAiX,SACCjX,EAAAkX,YAAsBA,EACtBlX,EAAAmX,IAAKA,EACLnX,EAAAwW,QACAxW,EAAA4uJ,KAAOA,EAXhB5uJ,EAAAywB,QAAUA,Ejf29nEHzwB,EAAM2a,MAAQ,Eif78nEpB3a,EATDuxS,GAC6BI,EAGpBp7R,Gjfq9nENo7R,Eif98nEH14S,UAcC+H,SAAA,WAbA,GAAIhB,GAAMrD,IACVA,MAAKoa,KAAAwgB,SAAW,Gjf+8nEV56B,Kif98nEJ0lR,SAAUhrR,OAAA09R,GAAC,KAAAp4R,KAAA6Z,MAAA5R,KAAAjI,KAAA6Z,MAAA+xD,OAAA5rE,KAAAiyJ,KAAAx6I,GACJkD,UAAA,SAAMvB,GACb,GAAAnR,GAAUmR,EAAC,GAA4BwyD,EAACxyD,EAAA,GAAAm/I,EAAAn/I,EAAA,EACxC/V,GAAIyb,MAAA7W,GACHmqQ,GAAsC,EAAAv/P,KAAQ+4D,KAC9CvoE,EAAA4xS,iBAAA,qBAAArpO,EAAAwmM,GAAA,EAAAv/P,IAAAu/P,GAAA,EAAA4rB,UAEAzlI,GACAl1J,EAAAywB,QAAA80P,gBAAArwH,EAAAr3H,SAAA0qC,EAAAwmM,GAAA,EAAAv/P,QAGH7S,KAAAoa,KAAA2Z,cAAApZ,UAAA,iBAAAtX,GAAAmX,IAAAhP,kBjfg9nEEwpS,Eif78nEQ14S,UAAe6e,gBAAA,WAEzBnb,KAAAoa,KAAAwgB,SAAA,Ijf88nEEo6Q,Eif38nEY14S,UAAWgI,YAAG,WAC5BtE,KAAA0lR,SAAA9uJ,ejf68nEEo+K,Eif18nEK14S,UAAQwsR,WAAC,SAAiBosB,GACjC,MAAAhmF,IAAAU,iBAAAslF,Ijf48nEEF,Eifz8nEY14S,UAAA64S,cAAS,SAAeD,GACtC,GAAAE,GAAclmF,GAAcY,eAAAolF,EAAAhmF,GAAAG,WAAA,GAAA/lM,OAE5B,OADA8rR,GAAQryS,KAAOgG,IAAIqsS,GACnB,GAAAA,EAAA,QAAAA,EAAA,ajf28nEEJ,Eifx8nEK14S,UAAQ0sR,WAAC,SAAiBksB,GACjC,MAAAhmF,IAAAS,iBAAAulF,Ijf08nEEF,Eifv8nEW14S,UAAU+4S,WAAI,SAAApsJ,Gjfw8nErB,Mifv8nEc,IAAjBA,EAAAh1H,OACA,kBACH,UAAAj0B,KAAAgpR,WAAA//H,EAAA82H,YAAA,IAAA//Q,KAAA8oR,WAAA7/H,EAAA82H,ajfy8nEEi1B,Eift8nEU14S,UAAawiB,MAAA,SAAkB7W,Gjfu8nErC,Gift8nEA,MAALA,GAAuC,MAA1BA,EAAKqtS,eASf,KAAM,IAAA1uR,OAAQ,sBARjB5mB,MAAKge,MAAQ/V,EAAKqtS,eAAet3R,Mjfu8nExBhe,Kift8nERkyG,MAASjqG,EAAAqtS,eAAe75R,QAAau2I,KAAK,SAAClvI,EAAUnK,GACnD,MAAAmK,GAAAi9P,WAAApnQ,EAAAonQ,WAAA,EAAAj9P,EAAAi9P,WAAApnQ,EAAAonQ,YAAA,MAEF//Q,KAAKkyG,MAAM7zG,OAAS,IACrB2B,KAAAkyG,MAAA,GAAAj+E,QAAA,GAIDj0B,KAAAoa,KAAAwgB,SAAA,GA7EW,IAAAne,GAAAC,EAAAC,EAAAC,EAAkBC,EAAAC,EAAAC,CAAS,OjfshoEpCi4R,Gif5hoEHH,Ijf6hoEOn6S,Oif5hoEPM,GAAU,YACV4V,SAAU,uBACVE,SAAS5W,EAAQ,MACjBiX,QAAAjX,EAAiB,OAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACWo1R,GA+EZ,wCAAAr4R,MAAA,KAAA8iI,GAAA,GAAAA,GAAA,IAAA9iI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA5hB,GAAA,mBAAAA,GAAA,oBAAA4hB,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAugI,GAAA,GAAAA,GAAA,IAAAvgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA4pQ,SAAA5pQ,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAriB,UAADs6S,IA/E+B33J,GAAA,GjfoioE3Bk4J,GAAuCv1S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Do8R,GAAuCx1S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IkfhjoEzG+7R,GAAqE,WlfsjoElE,QkftjoEiBC,GAAsBlmO,EAAA52C,GAAU54B,KAAAwvE,UAAqBxvE,KAAA44B,Olf0joEtE88Q,EkfvjoEYp5S,UAAa4qB,QAAI,SAAArN,EAAAsnD,GlfwjoEzB,GkfvjoEE,MAAPnhE,KAAA44B,KAAOta,UAER,MAAAte,MAAAwvE,QAAAwzJ,WAAAhjO,KAAA44B,KAAAta,UAAAzE,EAAA+xD,OAAA,IARW,IAAAnvD,GAAAC,CAUZ,OlfwjoEGg5R,GkfnkoEHH,IlfokoEO76S,OAAOM,GAAqB,ckfnkoEvBw6S,GAUZ,wCAAA/4R,MAAA,KAAA4lN,SAAA5lN,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,UAADg7S,MlfikoEIC,GAAqC31S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GmfjloE/Dw8R,KAEC1yP,KAAA,GACAxQ,UAAWqiQ,GACX7tR,SAAAouR,eAAAG,MAGAvyP,KAAA,KAAAwtI,WAAA,KAGDmlH,IACCJ,IAGDK,IACCf,IAsBFgB,GAAA,WAAoC,QAACC,MAAA,MnfskoEjCA,Gmf1loEHL,Inf2loEOj7S,Omf1loEPM,GAAS,Wnf2loEEqX,SmfzloEVq1J,GAAY,EAEZvqB,GAAA,aAEAC,GAAA,EAAAoa,SAAAo+I,IACAv4J,GAAA,GAKDvnI,UAAA+/R,GAGCl4S,QACDyU,aAAA0jS,GAAiBn4S,QACjBqzL,gBAAS8kH,GACRlkT,QAAAkkT,MACkCE,MnfyloEhCC,GAA0Cj2S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D88R,GAA0Cl2S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IofrooEzGy8R,GACoC,WpfyooEjC,QofzooEMC,GAA2BnkJ,GAC/BjyJ,KAAAiyJ,Opf2ooEFmkJ,EofxooEe95S,UAAQ4qB,QAAA,SAAAmuQ,EAAA1mO,GACzB,MAAA3uD,MAAAiyJ,KAAA29F,QARW,IAAAnzO,EAUZ,OpfyooEG25R,GofppoEHH,IpfqpoEOv7S,OAAOM,GAAqB,cofppoEvBk7S,GAUZ,wCAAAz5R,MAAA,KAAAiqQ,SAAAjqQ,GAAA/hB,UAAD07S,MpfkpoEIC,GAA4Br2S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G6dvpoE/Dk9R,KAECpzP,KAAA,G7dyqoEMh8B,S6dxqoEL86Q,M7dyqoESA,G6dxqoET5vB,GAAA,EAAAmkC,aAAAJ,GACDnU,I7dyqoEMj1R,W6dvqoELm2C,KAAAkvN,GAAA,EAAAngH,KAAAi9G,aAAA,iBAAAwlC,OAECxxP,KAAA,IAAUkvN,GAAA,EAAAv/P,G7dyqoEE9F,W6dvqoETm2C,KAAMkvN,GAAA,EAAY5gG,QAAA09F,aAAc,WAAc,MAAM4nB,OACpD5zO,KAAMkvN,GAAA,EAAYoiB,aAAWtlB,aAAc,WAAM,MAAA8gC,OACjD9sP,KAAMkvN,GAAA,EAAYqnB,UAASvqB,aAAc,WAAM,MAAAgsB,OAC/Ch4O,KAAMkvN,GAAA,EAAY4rB,QAAQ9uB,aAAc,WAAE,MAAMqvB,OAChDr7O,KAAMkvN,GAAgB,EAAAzhP,SAAAu+O,aAAmB,WAAa,MAAQ6mC,OAC9D7yP,KAAM,GAAIwtI,WAAY0hF,GAAE,EAAA5gG,QAAmBmf,UAAE,SAC/CztI,KAAA,KAAAwtI,WAAA0hF,GAAA,EAAA5gG,YAGAtuH,KAAM,GAAIwtI,WAAY0hF,GAAE,EAAAngH,KAAgB0+B,UAAE,SAC5CztI,KAAA,KAAAwtI,WAAA0hF,GAAA,EAAAngH,SAID/uG,KAAA,KAAAwtI,WAAA,KAGD8lH,IACAn0E,GACAg5D,GACA8a,GACCzvB,IAWF+vB,GAAA,WAA4B,QAACC,MAAA,M7dgqoEzBA,G6dzqoEHL,I7d0qoEO37S,O6dzqoEPM,GAAS,W7d0qoEEqX,S6dxqoEVq1J,GAAA,EACAtqB,GAAA,EAAAoa,SAAA8+I,KAIAxgS,UAAA0gS,GAAA74S,WAC0B+4S,M7d8qoExBC,GAAgD32S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/G,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Dw9R,GAAgD52S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqftuoEzGm9R,GAAuE,Wrf4uoEpE,Qqf5uoEiBC,GAAwB/9Q,EAAAH,GAAU54B,KAAA+4B,SAAIA,EAAkB/4B,KAAA44B,OrfgvoEzEk+Q,Eqf7uoEmBx6S,UAAA4qB,QAA0B,SAAMrN,EAAWsnD,GAChE,MAAAnhE,MAAA+4B,SAAAmwJ,sBAAAlpL,KAAA44B,KAAAta,WANW,IAAA7B,GAAAC,CAQZ,Orf8uoEGo6R,GqfvvoEHH,IrfwvoEOj8S,OAAOM,GAAqB,cqfvvoEvB47S,GAQZ,wCAAAn6R,MAAA,KAAA+pK,GAAA,GAAAA,GAAA,IAAA/pK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,UAADo8S,MrfuvoEIC,GAAwC/2S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACvG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D49R,GAAwCh3S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACjF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IsfrwoEzGu9R,GAA4C,Wtf0woEzC,Qsf1woEiBC,GAAwBn+Q,GAAK/4B,KAAA+4B,Wtf6woE9Cm+Q,Esf1woEkB56S,UAAC4qB,QAAc,SAAArN,EAAAsnD,GACnC,MAAAnhE,MAAA+4B,SAAAo+Q,cANW,IAAA16R,EAOZ,Otf4woEGy6R,GsfpxoEHH,ItfqxoEOr8S,OAAOM,GAAqB,csfpxoEvBg8S,GAOZ,wCAAAv6R,MAAA,KAAA+pK,GAAA,GAAAA,GAAA,IAAA/pK,GAAA/hB,UAADw8S,MtfqxoEIE,GAA0Bl9S,EAAoB,MAG9Cm9S,GAA8Br3S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,Guf9xoE/Dk+R,KAECp0P,KAAA,GACAxQ,UAAS0kQ,GAAA,Evf0yoEHlwR,SufxyoEL6R,SAAAk+Q,GACAp8R,gBAAAg8R,MAkBHU,GAAA,WAA8B,QAACC,MAAA,Mvf8xoE3BA,Guf5yoEHH,Ivf6yoEO38S,Ouf5yoEPM,GAAS,Wvf6yoEEqX,Suf3yoEV+zK,GACA/oC,GAAsB,EACtBD,GAAA,EAAAoa,SAAA8/I,Kvf8yoEUxhS,Wuf3yoEVmhS,GACAJ,GACArwH,GAAA,EACAD,GAAA,GAEAn0K,cAAAglS,GAAA,MAC4BI,MvfmzoE1BC,GAAiCz3S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAChG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5Ds+R,GAAiC13S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC1E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iwfh1oEtGi+R,GAEY,Wxfw1oEZ,Qwfz1oEYC,GAAA7+Q,EAAwBH,EAAAhe,EAAA49G,EAAA7/F,GACxB34B,KAAA+4B,SAAIA,EACJ/4B,KAAA44B,KAAOA,EACP54B,KAAA4a,UACA5a,KAAAw4H,aAAMA,EAAax4H,KAAA24B,Sxf41oE/Bi/Q,Ewfr1oEAt7S,UA+BC0pL,YAAA,SAAAnsK,EAAAsnD,GA5BG,GAAI99D,GAAArD,KAEA63S,GAAUh+R,EAAa+xD,OAAI,Exfm1oE/B,Owfl1oEiB,OAAb5rE,KAAA44B,KAAOta,WAIHte,KAAIw4H,aAAcn+F,sBAAAr6B,KAAA44B,KAAAta,WAAA/hB,IAAA,SAAA4lE,GAClB,GAAIrO,IAAO,CAWf,OAVQqO,IAAIA,EAAOnkD,OAAMmkD,EAAAnkD,MAAI,Gxfi1oEzBmkD,Ewfh1oEQ1mD,QAAQE,KAAE,SAAKgwJ,Gxfi1oEnB,Mwfh1oEQA,GAAA94J,KAAQglS,IACR/jP,GAAO,GACV,KAMbA,Gxfg1oED,Swf/0oEUn1C,GAGX,MAFMtb,GAAAs1B,OAAagC,UAAA,cAEb,Ixf+0oELgL,Mwf90oEC,SAAchnB,GAGf,MAFC4pB,SAAK5pB,MAAO,4BACZtb,EAAAs1B,OAAOgC,UAAA,QAAW,KACnBitJ,GAAA,WAAAoB,IAAA,Mxfi1oEP4uH,Ewf30oEet7S,UAAQi0L,cAAmB,SAAM79I,EAAA74B,EAAAsnD,Gxf40oE5C,Mwf30oEI,IAAIjlC,SAAU,SAAAhV,EAAoBgW,GAC9BwV,EAAUolQ,qBxf40oEVplQ,Ewf10oEIolQ,qBAAUvqQ,SAAuB,WACjCmF,EAAQolQ,qBAAM,KACf5wR,GAAA,KAGRA,GAAA,KA3DE,IAAAzK,GAAAC,EAAAC,EAAAC,EAAiBC,CA8D7B,Oxf20oEG+6R,Gwf14oEHH,Ixf24oEO/8S,OAAOM,GAAqB,cwf14oEvB08S,GA8DZ,wCAAAj7R,MAAA,KAAA+pK,GAAA,GAAAA,GAAA,IAAA/pK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6rK,GAAA,GAAAA,GAAA,IAAA7rK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAkrK,GAAA,GAAAA,GAAA,IAAAlrK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA2pK,GAAA,GAAAA,GAAA,IAAA3pK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAugI,GAAA,GAAAA,GAAA,IAAAvgI,GAAAniB,UAADk9S,Mxfo1oEIG,GAAoB79S,EAAoB,KAGxC89S,GAAyCh4S,MAAQA,KAAKuY,WAAc,WACpE,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFq/R,GAA0Cj4S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACzG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D8+R,GAA0Cl4S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACnF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,Iyfr5oEpEy+R,GAAA,SAAAv+R,Gzfk6oElC,Qyfz4oEHw+R,GAaC59R,EAAAI,EAAYge,EAAEte,EAAYC,EAC1BV,EAAAK,EAAAE,EAAAue,EAAAxe,EAAAgsF,EAAArtE,GAbO,GAAAz1B,GAAAuW,EAAsBpd,KAAAwD,KAAAsa,EAAAC,IAAAva,IAa7B,OAZOqD,GAAAmX,MACAnX,EAAAuX,UACAvX,EAAAu1B,KAAMA,EACNv1B,EAAAiX,SACCjX,EAAAkX,YAAqBA,EACrBlX,EAAAwW,QACAxW,EAAA6W,oBAAiBA,EACjB7W,EAAA+W,KAAMA,EACN/W,EAAAs1B,SACAt1B,EAAA8W,QACA9W,EAAA8iG,MAhCT9iG,EAAAy1B,YAIAz1B,EAAAg1S,kBAAwB,EAExBh1S,EAAAi1S,cAAA,EAEAj1S,EAAAk1S,kBAAwB,KAExBl1S,EAAAm1S,YAAa,EACbn1S,EAAAwuM,MAAAvoL,KAAAP,MACA1lB,EAAAo1S,sBAAsB,Ezfq6oEfp1S,EAAMq1S,eAAgB,Eyf/4oE5Br1S,EAdD20S,GAE+BI,EAGvBx+R,GAWR++R,EAAAP,Ezfi5oEGA,Eyfj5oEH97S,UAuBC+H,SAAA,WArBA,GAAIhB,GAACrD,Izfi5oECA,Myfh5oEL44S,qBAAuB54S,KAAC6Z,MAAA5R,KAAA0S,UAAA,SAAA1S,GACxB5E,EAAIw1S,YAAY,EACf5wS,EAAI2S,SAAC3S,EAAA2S,QAAoBvc,QAAa,IACtCgF,EAAGy1S,kBAAK7wS,EAAkB2S,QAAA,GACzBvX,EAAKy1S,kBAAA3/Q,cAA4B91B,EAAWy1S,kBAAgB3/Q,aAAAld,WAAA88R,MAAA,GAC5D11S,EAAK2X,qBAAkB/S,EAAA2S,QAAA,GAAAK,gBACvB5X,EAAKw1S,YAAA,EACJF,EAAiB74O,YACjB64O,EAAA74O,UAAA5lE,EAAA,OAEDmJ,EAAA21S,kBAEA31S,EAAAg1S,kBAAA,EAEDh1S,EAAAmX,IAAAhP,kBAKFxL,KAAKi5S,mBAAoBj5S,KAAK6Z,MAAM+xD,OAAAjxD,UAAa,SAAUixD,GAAAvoE,EAAUq2B,QAAAkyC,EAAS,KAC9E5rE,KAAAk5S,kBAAAl5S,KAAAma,MAAAqmI,aAAA7lI,UAAA,SAAAosD,GAAA,MAAA1jE,GAAAmX,IAAAhP,kBzfi5oEE4sS,Eyf94oEO97S,UAAAgI,YAAoB,WAC5BtE,KAAK44S,sBACF54S,KAAK44S,qBAAkBhiL,cAC1B52H,KAAKi5S,oBACFj5S,KAAKi5S,mBAAAriL,cACR52H,KAAK44S,sBACN54S,KAAA44S,qBAAAhiL,ezfg5oEEwhL,Eyf74oEU97S,UAAU68S,iBAAoB,WAC1Cn5S,KAAA24B,OAAAgC,UAAA,sBzf+4oEEy9Q,Eyf34oEU97S,UAAU88S,gBAAkB,WACxCp5S,KAAA24B,OAAAgC,UAAA,+Bzf64oEEy9Q,Eyf14oEU97S,UAAU+8S,eAAkB,WACxCr5S,KAAA24B,OAAAgC,UAAA,oBzf44oEEy9Q,Eyfz4oEW97S,UAAKg9S,SAAe,SAAKC,GACrCA,EAAK,GAAAA,GAAc,GAAOv5S,KAAAw4S,aAAAe,IAC1Bv5S,KAAAw4S,YAAAe,Izf44oECnB,Eyfz4oEH97S,UAqBCk9S,uBAAA,WApBA,GAAIn2S,GAAOrD,Izf04oELA,MAAKma,Myfv4oET6E,MAAOhf,KAAKua,YAAYmE,UAAU,2CAA6B1e,KAAAua,YAAAmE,UAAA,4CAC/DS,MAAInf,KAAOua,YAAAmE,UAAA,8BACXU,GAAA,QACA7I,SAAO,MAAI,eACX8I,OAAO,Ezfw4oEKC,Myfv4oEX,WACAjc,EAAKq1S,eAAgB,EACrBr1S,EAAAmX,IAAAhP,kBAGD2T,MAAInf,KAAOua,YAAAmE,UAAA,kCACXU,GAAA,QACA7I,SAAO,MAAM,czfw4oED8I,Oyfv4oEX,EAAKC,MAAA,WACLjc,EAAKq1S,eAAgB,EACrBr1S,EAAAmX,IAAAhP,oBzf24oED4sS,Eyfv4oEH97S,UAsCCm9S,oBAAA,WArCA,GAAGp2S,GAAKrD,Izfw4oEF,Iyft4oELA,KAAI83S,qBAAsB,Czfu4oEjB,Gyft4oER4B,Izfu4oEY19P,cyfr4oEXnwB,OAAA7rB,KAAA84S,kBAAA3/Q,aAAAld,WAAA88R,Ozfy4oEO/4S,Myfr4oEP83S,qBAAShlM,qBAAA4mM,EAAA,SAAA9kS,EAAAy0C,Gzfs4oEE,Gyfn4oEVz0C,EAMA,MALAvR,GAAK+W,KAAAwgB,SAAY,GACjBv3B,EAAKi1S,cAAA,EACLj1S,EAAKs2S,oBAAmB/kS,EAAAkC,QACxBzT,EAAKmX,IAAIhP,mBACTnI,GAAA8iG,IAAOogM,MAKRljS,GAAKu2S,eAAAvwP,EAAmBhV,MACtBhxC,EAAAw2S,mBAAAxwP,EAAAhV,SAGHr0C,KAAKq4S,mBACLr4S,KAAKoa,KAAAwgB,SAAY,GACjB56B,KAAKs4S,cAAA,EACLt4S,KAAK25S,oBAAoB,KACzB35S,KAAKu4S,kBAAoB,KACzBv4S,KAAKwa,IAAIvD,gBACTjX,KAAAwa,IAAAhP,oBAEIxL,MAAA64S,aACL74S,KAAK45S,eAAA,GACL55S,KAAA65S,mBAAA,Mzfo4oECzB,Eyfj4oEH97S,UA4BCu9S,mBAAA,SAAAxlQ,GA3BA,GAAIhxC,GAAMrD,Izfk4oEJ,Kyfj4oELA,KAAK04S,cAIL,MAHA14S,MAAKoa,KAAIwgB,SAAA,GACT56B,KAAKwa,IAAIhP,mBACTxL,MAAAmmG,IAAOogM,Mzfo4oEF,Iyfh4oELz6R,IACAguS,QAAA,EACCC,wBAAA1lQ,EAEI,OAALr0C,KAAK44B,KAAAta,Wzfi4oEIte,Kyfh4oEPka,oBAAW8/R,wBAAQh6S,KAAA44B,KAAAta,UAAAte,KAAA84S,kBAAAjmS,GAAA/G,GACnB6O,UAAS,SAAA+xB,GAEkB,MAA1BrpC,EAAKy0S,sBACLz0S,EAAAy0S,qBAAAvqQ,SAAA,WAAAlqC,EAAAy0S,qBAAA,OAGFz0S,EAAA42S,czf+3oEW,Syf73oELt7R,GACLtb,EAAKk1S,kBAAoB55R,EACzBtb,EAAK+W,KAAIwgB,SAAA,GACTv3B,EAAKmX,IAAIhP,eACPnI,EAAA8iG,IAAAogM,Uzfg4oEH6R,Eyf53oEG97S,UAAkB29S,WAAA,WACvBj6S,KAAK84B,UAAKgC,QACV96B,KAAK44B,KAAK5zB,UACVhF,KAAKoa,KAAAwgB,SAAA,GACL56B,KAAKy4S,sBAAmB,EACxBz4S,KAAKwa,IAAIhP,eACTxL,KAAAmmG,IAAAogM,Qzf83oEE6R,Eyf53oEH97S,UAyBC08S,eAAA,WAxBA,GAAI31S,GAAArD,IACH24S,GAAiB74O,Wzf63oER64O,Eyf53oEO74O,UAAKhnD,QACpBy1B,cAAUvuC,KAAAgb,qBACVpK,SAAA,qBACAs6B,sBAAsBwR,eAAC,GACvBD,QAAAmzB,KAAe,SACfk3B,cAAcl3B,KAAI,SAChB5zB,cAAU,Gzf63oED,Syf53oEHpnC,EAAAslS,Gzf63oEI,Gyf33oEZtlS,EAMA,MALAvR,GAAK+W,KAAAwgB,SAAY,GACjBv3B,EAAKi1S,cAAA,EACLj1S,EAAKs2S,oBAAmB/kS,EAAAkC,QACxBzT,EAAKmX,IAAIhP,mBACTnI,GAAA8iG,IAAOogM,MAGRljS,GAAKy0S,qBAAuBoC,EAC5B72S,EAAKg1S,kBAAmB,EACxBh1S,EAAKmX,IAAIhP,eACPnI,EAAAmX,IAAAvD,kBA3NQ,IAAA0hS,GAAgBl8R,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAS,Ozf2lpElCg7R,GyfpmpEHO,EAAUV,IzfqmpEHv9S,OyfpmpEPM,GAAU,YACV4V,SAAU,oBACVE,SAAQ5W,EAAA,MzfqmpEGiX,QyfnmpEV,sDACA,0EAEAsO,gBAAAzkB,GAAA,wBAAA0kB,SACWw4R,GA8NZ,wCAAAz7R,MAAA,KAAAzhB,GAAA,mBAAAA,GAAA,oBAAAyhB,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAmrK,GAAA,GAAAA,GAAA,IAAAnrK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4rK,GAAA,GAAAA,GAAA,IAAA5rK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAsgI,GAAA,GAAAA,GAAA,IAAAtgI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAwpK,GAAA,GAAAA,GAAA,IAAAxpK,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAuiI,GAAA,GAAAA,GAAA,IAAAviI,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAmgI,GAAA,GAAAA,GAAA,IAAAngI,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAogI,GAAA,GAAAA,GAAA,IAAApgI,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAniB,GAAA,gBAAAA,GAAA,iBAAAmiB,GAAAziB,OAAA,mBAAA0iB,MAAA,KAAA26R,GAAA,GAAAA,GAAA,IAAA36R,GAAA1iB,UAAD09S,IA9N6B/6J,GAAA,Gzf4mpEzB88J,GAAoCn6S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACnG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DghS,GAAoCp6S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAC7E,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I0fjopEtG2gS,GAEY,W1fyopEZ,Q0f1opEYC,GAAA9hL,EAAiC56G,EAAAgb,EAAAhe,EAAA8vK,GACjC1qL,KAAAw4H,eACAx4H,KAAA4d,SAAIA,EACJ5d,KAAA44B,KAAOA,EACP54B,KAAA4a,QAASA,EAAqB5a,KAAA0qL,Y1f6opE1C4vH,E0fxopEQh+S,UAA8B4qB,QAAM,SAAarN,EAAAsnD,GACrD,GAAI7mC,GAAoBzgB,EAAA+xD,OAAA,E1fyopExB,S0fxopEItxC,IAGa,MAAbt6B,KAAA44B,KAAOta,WAQdspK,GAAA,WAAAqB,SAAAjpL,KAAA4a,QAAA5Y,IAAAhC,KAAA44B,KAAAta,WAAAte,KAAAw4H,aAAA+hL,qBAAAv6S,KAAA44B,KAAAta,UAAAgc,GAAAt6B,KAAA0qL,UAAAF,eAAAxqL,KAAA4d,SAAA48R,wBAAAx6S,KAAA44B,KAAAta,aAzBQ,IAAA7B,GAAAC,EAAAC,EAAAC,EAAoBC,CA0BhC,O1fmopEGy9R,G0f9ppEHH,I1f+ppEOz/S,OAAOM,GAAqB,c0f9ppEvBo/S,GA0BZ,wCAAA39R,MAAA,KAAA8pK,GAAA,GAAAA,GAAA,IAAA9pK,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA4pK,GAAA,GAAAA,GAAA,IAAA5pK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA4rK,GAAA,GAAAA,GAAA,IAAA5rK,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAirK,GAAA,GAAAA,GAAA,IAAAjrK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAytK,SAAAztK,GAAAniB,UAAD4/S,M1fippEIG,GAAkCz6S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACjG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G2f9qpE5DshS,KAEIx3P,KAAA,MACAxQ,UAAWylQ,GACXnyH,aAAW2xH,IACdzwR,SAAAtM,QAAAy/R,MAsBLM,GAAA,WAAkC,QAACC,MAAA,M3f2qpE/BA,G2f9rpEHH,I3f+rpEO//S,O2f9rpEPM,GAAS,W3f+rpEEqX,S2f7rpEV+zK,GACA3e,GAAA,oBACApqB,GAAsB,EACtBD,GAAA,EAAAoa,SAAAkjJ,KAEDtoS,cAAe+lS,IACfnnH,iBAAWmnH,I3f+rpEAriS,W2f7rpEVukS,GACA9zH,GAAiB,EACjBoxH,GACA9sH,GACArE,GAAA,EACAF,GAAA,GAEA10L,SAAAumT,OACgCyC,M3fqspE9BC,GAAiB3gT,EAAoB,KAGrC4gT,GAA2B96S,MAAQA,KAAKuY,WAAc,WACtD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFmiS,GAA4B/6S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC3F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D4hS,GAA4Bh7S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACrE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4fjvpExEuhS,GAAA,SAAArhS,G5f+vpE9B,Q4f7vpEHshS,GASCviR,EAAAotJ,EAAMl5B,EAAMw7B,EAAM5xJ,EAAWmC,EAAMze,EAAMI,GAR/B,GAAAlX,GAAMuW,EAANpd,KAAcwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IASxB,OARUqD,GAAAs1B,SACAt1B,EAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,UAAeA,EACjBhlL,EAAAozB,IAAIA,EACJpzB,EAAAu1B,KAAKA,EACLv1B,EAAA8W,Q5f8vpEF9W,EAAMkX,YAAcA,E4f5vpE1BlX,EAVDy3S,GACWI,EAEAthS,G5fswpERshS,E4f7vpEH5+S,UAiBC6+S,MAAA,SAAA/iO,EAAAgjO,GAhBA,GAAI/3S,GAAKrD,I5f8vpEH,I4f7vpE0B,MAA/BA,KAAI+lL,KAAoBntJ,MAAmC,MAArB54B,KAAK+lL,KAAMpjC,SAAmB,CACpE,GAAAj8H,IAAA08D,MACEpjF,KAAM+lL,KAAAntJ,KAAC+pH,SAAK3iJ,KAAQ+lL,KAAMpjC,S5f6vpEnB/oI,G4f5vpEPtd,UAAUwc,OAAAtc,KAACwD,KAAuBA,KAAAq7S,SAAA,GAAA30R,GAClC/L,UAAU,SAAQ+xB,GAEnBrpC,EAAA0iL,KAAClqK,MAAoB6wB,EAAA4uQ,c5f4vpEV,S4f3vpEL38R,GACLtb,EAAI0iL,KAAIpjC,SAAQ,KACV,MAALy4J,GACCA,EAAAz8R,EAAAlgB,S5f4vpEQ,W4f1vpEC,MAAV25E,GACCA,Q5f+vpEH8iO,E4f3vpEH5+S,UAWCi/S,OAAA,SAAAnjO,GAVA,GAAI/0E,GAAOrD,I5f4vpELA,MAAKma,M4f3vpEV+E,OAAOlf,KAAKua,YAAYmE,UAAU,sBAClCS,MAAOnf,KAAIua,YAASmE,UAAA,oBAAAU,GAAA,WAAA7I,SAAA,kB5f4vpEP8I,O4f3vpEZ,EAAAC,MAAA,W5f4vpEgB1F,E4f1vpEdtd,UAAUwc,OAAStc,KAAE6G,IAAMg4S,SAAA,IAAKC,aAAsBj4S,EAAE0iL,KAAAlqK,QAC1DlB,cAAA9X,GAAA,iBAAAQ,GAAAm4S,cAAApjO,IAAA,iBAAA/0E,GAAAm4S,cAAApjO,QAGCj5D,MAAAnf,KAAAua,YAAAmE,UAAA,mBAAAU,GAAA,MAAA7I,SAAA,kBAAA8I,OAAA,M5f6vpED67R,E4fzvpEO5+S,UAASk/S,cAAA,SAAApjO,GAClBp4E,KAAK44B,KAAK48B,QACVx1D,KAAI+lL,KAAAvwH,QACO,MAAV4iB,GACDA,K5f2vpEE8iO,E4fxvpEK5+S,UAAU++S,QAAW,SAAO74G,GACnC,qBAAAA,EAAA,YAvDW,IAAA/lL,GAAAC,EAAYC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAAS,O5fkzpE9Bk+R,G4fnzpEHH,I5fozpEOrgT,OAAOM,GAAqB,c4fnzpEvBggT,GAwDZ,wCAAAv+R,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAipK,GAAA,GAAAA,GAAA,IAAAjpK,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA+qJ,GAAA,GAAAA,GAAA,IAAA/qJ,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAkrK,GAAA,GAAAA,GAAA,IAAAlrK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyrK,GAAA,GAAAA,GAAA,IAAAzrK,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAAugI,GAAA,GAAAA,GAAA,IAAAvgI,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAqgI,GAAA,GAAAA,GAAA,IAAArgI,GAAAtiB,UAADwgT,IAxDyBnzH,GAAA,G5f4zpErB0zH,M6ft0pEY39Q,UAAUC,UAAOkD,MAAS,aACnCnD,UAAUC,UAAUkD,MAAM,WAC1BnD,UAAUC,UAAUkD,MAAM,YAC1BnD,UAAUC,UAAUkD,MAAM,UAC1BnD,UAAUC,UAAUkD,MAAM,UAC1BnD,UAAUC,UAAUkD,MAAM,gBAEpBnD,UAAaC,UAAOkD,MAAA,mBAEpBy6Q,GAAA,GAAA1gT,IAA4C,iCAcxD2gT,IACAC,OAAMH,G7fg0pEHjX,M6f1zpEF3nQ,IAAK,6EACLg/Q,IAAK,gBACLvrR,MAAA,kB7fg0pEEwrR,GAAgB5hT,EAAoB,MAIpC6hT,GAAgC/7S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D4iS,GAAgCh8S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGuiS,GAA6Bj8S,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GAC5E,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,K8f50pE1D0oH,GACyB,W9f21pEtB,Q8f51pEHC,GAuBCn1Q,EAAA5sB,EAAA0Z,EAAA2C,EAAAlc,EAAAqpI,EAAAppI,EAAAme,EAAAwiR,EAAAviR,EAAAze,GAvByC,GAAA9W,GAAMrD,IACxCA,MAAAgnC,SACAhnC,KAAAoa,KAAOA,EACPpa,KAAA8zB,QAAeA,EACd9zB,KAAAy2B,MACAz2B,KAAAua,cACAva,KAAA4jJ,OAAGA,EACH5jJ,KAAAwa,IAAMA,EACNxa,KAAA24B,SACA34B,KAAAm7S,QACAn7S,KAAA44B,KAAKA,EAEb54B,KAAKma,MAAKA,EACVna,KAAKoa,KAAAwgB,SAAS,GACd56B,KAAKi0B,QAAA,EACLj0B,KAAK6/I,cAAa7/I,KAAKoa,KAAK68G,qBAE5Bj3H,KAAK27P,WAAa37P,KAACoa,KAASu9G,kB9f41pEtB33H,K8f11pEL24B,OAAG25B,OAAK33C,UAAe,WACtBtX,EAAK2jC,OAAO40Q,QACZv4S,EAAAywB,QAAAzU,U9f81pEA88R,E8f11pEH7/S,UA4LC+H,SAAA,WA1LA,GAAIhB,GAACrD,IAGLA,MAAIo8S,gBAEJ,IAAAC,GAAmB,GAAAhgT,M9fu1pEbggT,G8ft1pEKrlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,iCAC5B7E,OAAA,mC9fw1pEGwiS,E8fr1pEKrlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,gCAC5B7E,OAAA,kC9fu1pEGwiS,E8fr1pEKrlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,gCAC9B7E,OAAA,oBAA6B,YAC3BqkI,4BAAAl+I,KAAAs8S,eAAA,c9fu1pEGD,E8fr1pEKrlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,mCAC9B7E,OAAA,oBAA6B,eAC3BqkI,4BAAAl+I,KAAAs8S,eAAA,W9fu1pEGD,E8fr1pEKrlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,+BAC9B7E,OAAA,oBAA6B,WAC3BqkI,4BAAAl+I,KAAAs8S,eAAA,W9fu1pEGD,E8fr1pEKrlS,MACVjE,KAAA/S,KAAAua,YAAuBmE,UAAI,wCAC3Bu/H,uBAAiB,EACjBpkI,OAAA,oBAA6B,UAAK,eAChCqkI,4BAAAl+I,KAAAs8S,eAAA,WAEFt8S,KAAAs8S,eAAmB,Q9fs1pEVD,E8fr1pEHrlS,MACNjE,KAAK,kBACF8G,OAAA,mCAEF7Z,KAAA27P,Y9fs1pEY0gD,E8fr1pELrlS,MACNjE,KAAK,kBACH8G,MAAAynP,M9fw1pEC+6C,E8fr1pEKrlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,2BAC9B7E,OAAA,oBAA6B,OAC3BqkI,4BAAAl+I,KAAAs8S,eAAA,S9fu1pEGD,E8fr1pEKrlS,MACVjE,KAAA/S,KAAAua,YAAuBmE,UAAI,mCAC3Bu/H,uBAAiB,EACjBpkI,OAAA,oBAA6B,MAAK,gBAChCqkI,4BAAAl+I,KAAAs8S,eAAA,S9fu1pEGD,E8fr1pEKrlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,kCAC9B7E,OAAA,oBAA6B,cAC3BqkI,4BAAAl+I,KAAAs8S,eAAA,UAIFt8S,KAAA27P,a9fo1pES0gD,E8fn1pEFrlS,MACNjE,KAAK,gBACL8G,OAAQ,QAAI,mCACV0iS,QAAA,I9fq1pEMF,E8fn1pEFrlS,MACNjE,KAAA,oBACAkrI,uBAAiB,EACjBpkI,OAAQ,QAAI,8CACV0iS,QAAA,I9fq1pEMF,E8fn1pEFrlS,MACNjE,KAAK,oBACL8G,OAAQ,QAAI,sBACV0iS,QAAA,I9fq1pEMF,E8fn1pEFrlS,MACNjE,KAAK,eACL8G,OAAQ,QAAI,mCACV0iS,QAAA,I9fq1pEMF,E8fn1pEFrlS,MACNjE,KAAK,mBACL8G,OAAQ,QAAI,gCACV0iS,QAAA,I9fq1pEMF,E8fn1pEErlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,2BAC5B7E,OAAA,6B9fq1pEMwiS,E8fn1pEFrlS,MACNjE,KAAK,aACH8G,OAAA,mC9fq1pEMwiS,E8fn1pEFrlS,MACNjE,KAAA,YACAkrI,uBAAiB,EACfpkI,OAAA,4CAKH7Z,KAAA27P,a9fk1pES0gD,E8fj1pEErlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,8BAC5B7E,OAAA,gC9fm1pEMwiS,E8fj1pEFrlS,MACNjE,KAAA,iBACAkrI,uBAAiB,EACfpkI,OAAA,iDAGH7Z,KAAA27P,Y9fk1pES0gD,E8fj1pEErlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,iCAC5B7E,OAAA,mC9fo1pEEwiS,E8fh1pEKrlS,MACVjE,KAAK/S,KAAGua,YAASmE,UAAa,4BAC5B7E,OAAA,6B9fk1pEG,I8f/0pELsnI,KAECpuI,KAAM/S,KAAAua,YAAAmE,UAAoB,sBAC1BqhI,KAAK,qBACHlmI,OAAA,sBAEF9G,KAAM/S,KAAAua,YAAemE,UAAA,4BACrBqhI,KAAA,gBACAC,SAAQ,gBACRnmI,OAAM,qBACJ5R,KAAAo0S,IAEFtpS,KAAM/S,KAAAua,YAAgBmE,UAAA,2BACtBqhI,KAAK,iBACLlmI,OAAM,QAAgB,UACtB5R,KAAA,GAAA5L,Q9fk1pEI2D,M8fr0pEL8zB,QAAQ0oR,cACR/7J,SAAUn3H,KAACP,MACXhW,KAAK/S,KAAMua,YAAAmE,UAAA,kBACT9Z,MAAAu8I,IAGFnhJ,KAAKgnC,OAAQ40Q,QACb57S,KAAA8zB,QAAAI,cAKDl0B,KAAK44B,KAAA6jR,gBAAc9hS,UAAA,iBAAAtX,GAAA+4S,mBACnBp8S,KAAKi0B,QAAI,EACTj0B,KAAKwa,IAAIhP,eAETxL,KAAKoa,KAAKwgB,SAAK,GACd56B,KAAK44B,KAAKo0J,mBACVhtL,KAAK44B,KAAKo0J,kBAAW,E9fi0pEZhtL,K8fh0pER44B,KAAKs0J,YACL9pG,MAAApjF,KAAY44B,KAAKwqD,MACjBwpG,WAAW5sL,KAAK44B,KAAK+0J,UACrBb,UAAA9sL,KAAA44B,KAAqBg1J,SACrBb,qBAAA,EACEE,yBAAAjtL,KAAA44B,KAAAk1J,wBAEH9tL,KAAA08S,iB9fm0pECP,E8f/zpES7/S,UAASogT,aAAiB,WACrC18S,KAAAma,MAAAwpI,SAAA3jJ,KAAAua,YAAAmE,UAAA,qB9fi0pEEy9R,E8f/zpEH7/S,UAgBC8/S,eAAA,WAfA,GAAI/4S,GAAQrD,I9fg0pENA,MAAK4jJ,O8f/zpEVzC,OACAhiI,MAAOnf,KAAK44B,KAAI+0J,UAAK,IAAA3tL,KAAA44B,KAAuBg1J,SAC5CwgB,MAAOpuM,KAAAy2B,IAAAolH,KAAA,wB9fg0pEMsF,O8f9zpEZhiI,MAAOnf,KAAAua,YAAMmE,UAAK,qBAChBY,MAAA,iBAAAjc,GAAAs1B,OAAAgC,UAAA,uBAEFxb,MAAOnf,KAAAua,YAAMmE,UAAK,oB9fg0pEEY,M8f9zpEnB,WAAY,MAAAjc,GAAiB83S,MAAGI,OAAA,WAChCl4S,EAAKs1B,OAAO40Q,oBAHAlqS,EAIXs1B,OAAAgC,UAAA,mB9fm0pEFwhR,E8f7zpEW7/S,UAAKggT,eAAqB,SAAUK,GACjD,aAAA38S,KAAA44B,KAAAgkR,eAAA,GAAA58S,KAAA44B,KAAAgkR,aAAA9+S,QAAA6+S,GAtPW,IAAAlgS,GAAAC,EAAAC,EAAgBC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAuP5B,O9f+zpEGg/R,G8fxkqEHJ,I9fykqEOrhT,O8fxkqEPM,GAAmB,YACnB4V,SAAU,UACVE,SAAQ5W,EAAA,M9fykqEGiX,QACI,oKAKJJ,M8fvkqEVojB,MAAA,OACA0oR,cAAc,UACdC,aAAA,SACAn8J,sBAAA,kBAEDy/C,eAAe66G,IACdx7R,gBAAAzkB,GAAA,wBAAA0kB,S9f0kqEMu8R,GAA0B,EAAGvhT,OAAOM,GAAiB,QAAG0gT,K8fzkqEnDM,GAuPZ,wCAAAv/R,MAAA,KAAAq/R,GAAA,oBAAAA,GAAA,qBAAAr/R,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6iI,GAAA,GAAAA,GAAA,IAAA7iI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA6iI,GAAA,GAAAA,GAAA,IAAA7iI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA0iI,GAAA,GAAAA,GAAA,IAAA1iI,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAwgI,GAAA,GAAAA,GAAA,IAAAxgI,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAA+9R,GAAA,GAAAA,GAAA,IAAA/9R,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA/hB,GAAA,mBAAAA,GAAA,oBAAA+hB,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAogI,GAAA,GAAAA,GAAA,IAAApgI,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAg+R,SAAAh+R,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAqrK,GAAA,GAAAA,GAAA,IAAArrK,GAAAxiB,OAAA,mBAAAyiB,MAAA,KAAAmgI,GAAA,GAAAA,GAAA,IAAAngI,GAAAziB,UAADyhT,M9f01pEIY,GAA+B/8S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D4jS,GAA+Bh9S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACxE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I+f9mqEzGujS,GAAqC,W/fmnqElC,Q+fnnqEiBC,GAAiBtkR,GAAI54B,KAAA44B,O/fsnqEtCskR,E+fnnqEU5gT,UAAU4qB,QAAC,SAAArN,EAAAsnD,GACvB,MAAAnhE,MAAA44B,KAAA52B,MANW,IAAAya,EAQZ,O/fonqEGygS,G+f7nqEHH,I/f8nqEOriT,OAAOM,GAAqB,c+f7nqEvBgiT,GAQZ,wCAAAvgS,MAAA,KAAA8rK,GAAA,GAAAA,GAAA,IAAA9rK,GAAA/hB,UAADwiT,M/f6nqEIC,GAAqCn9S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACpG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GggB9nqE/DgkS,KAECl6P,KAAA,QACAxQ,UAAWwpQ,GACXl2H,aAAWH,IACX3+J,SAAUjZ,QAAAgvS,IhgBmpqEJlwS,WggBjpqEHm2C,KAAM,UAAWgsN,aAAc,WAAE,MAAMp+E,OACvC5tI,KAAM,YAAUgsN,aAAc,WAAM,MAAAC,OACpCjsN,KAAM,SAAUgsN,aAAc,WAAE,MAAMunC,OACtCvzP,KAAM,WAAAgsN,aAAgB,WAAc,MAAMqoC,OAC1Cr0P,KAAM,eAAgBgsN,aAAa,WAAW,MAAQyrC,OACtDz3P,KAAM,GAAIwtI,WAAY,YAAaC,UAAE,SACvCztI,KAAA,KAAAwtI,WAAA,gBAGAxtI,KAAM,GAAIwtI,WAAY,QAASC,UAAE,SAClCztI,KAAA,KAAAwtI,WAAA,UAuBF2sH,GAAA,WAA6B,QAACC,MAAA,MhgBgoqE1BA,GggBrpqEHH,IhgBspqEOziT,OggBrpqEPM,GAAS,WhgBspqEEqX,SggBnpqEV+qI,GAAU,EAAAoa,SAAA4lJ,IACV11I,GAAY,EACZvqB,GAAA,aAEAE,GAAY,EACZgyH,GAAA,EACAovB,GAAW,EACXvsB,IhgBqpqEUp8P,WggBlpqEV+vK,GACAo3H,IACAlmJ,QAAA2kJ,GAAAhiH,SAAAiiH,KAEDvpS,aAAAszK,GAAqBl6J,QAAe0wR,KACpClrH,gBAAUtL,GAAAl6J,QAAA0wR,KACTtqT,SAAAwrJ,GAAA,GAAA5xH,OAAAk6J,IAAAw2H,QAC2BoB,MhgB0pqEzBC,GAAwBv9S,MAAQA,KAAKuY,WAAc,WACnD,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnF4kS,GAAyBx9S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxF,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DqkS,GAAyBz9S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IigBltqE3EgkS,GAAA,SAAA9jS,GjgB+tqE3B,QigB/sqEH+jS,GAWCrjS,EAAAC,EAAYwrK,EAAEv2G,EAAYp1D,EAAAI,EAK1Bme,EAAAx5B,EAAAs3B,GAfO,GAAApzB,GAAMuW,EAANpd,KAAqBwD,KAAAsa,EAAAC,IAAAva,IAe5B,OAdOqD,GAAAiX,SACAjX,EAAAkX,YAAiBA,EAChBlX,EAAA0iL,KAAOA,EACP1iL,EAAAmsE,UACAnsE,EAAA+W,OACA/W,EAAAmX,IAAMA,EACNnX,EAAAs1B,OAAQA,EACRt1B,EAAAlE,SAAeA,EAnBxBkE,EAAAozB,MAEApzB,EAAAu6S,YAAW,EACXv6S,EAAAsb,MAAA,GAmBCtb,EAAKw6S,aAAa,GAAKv0R,OAAComM,cACxBrsN,EAAK+W,KAAAwgB,SAAS,GACdv3B,EAAK4wB,QAAS,EACd5wB,EAAK44I,UAAA54I,EAAgBozB,IAAGslH,gBjgBitqElB14I,EAAM+4I,iBAAmB/4I,EAAMozB,IAAIylH,uBigBhtqEzC74I,EAhBDk6S,GACQI,EACA/jS,GjgBiuqEL+jS,EigBhtqEHrhT,UAAA+H,SA0BC,WAvBA,GAAIhB,GAAArD,KACA89S,EAAkB79S,OAAAmsC,SAAA5O,KAAAyD,MAAA,kCjgB+sqEhB,IigB9sqEL68Q,EAAkB,CAClB,GAAI54O,GAAA,KACA64O,EAAkB99S,OAAAmsC,SAAA5O,KAAAyD,MAAA,wCACrB88Q,KACA74O,EAAAyG,mBAAAoyO,EAAA,KAMA/9S,KAAKg+S,mCjgB2sqEOh+S,KigBzsqEXg+S,iCAAiBh+S,KAAA24B,OAAA25B,OAAe33C,UAAA,SAAA1d,GAC/BA,YAAKmgJ,IAAoB,GACzB/5I,EAAA46S,uBAIHj+S,KAAAk+S,gCAAAJ,EAAA,GAAA54O,OAEAllE,MAAAi+S,qBjgB6sqECN,EigB1sqEErhT,UAAKgI,YAAiB,WACV,MAAftE,KAAK4gM,WACF5gM,KAAK4gM,UAAAhqE,cAC8B,MAAtC52H,KAAKg+S,kCACNh+S,KAAAg+S,iCAAApnL,ejgB4sqEE+mL,EigBzsqEHrhT,UAAA6+S,MAgBC,WAdA,GAAI93S,GAAQrD,IjgBysqEN,OigBxsqEL,QAAUA,MAAO+lL,MAAuB,MAAtB/lL,KAAY+lL,KAAAntJ,MAAUiyJ,GAAsBE,aAAA/qL,KAAA+lL,KAAAntJ,MAIzD,YAAa54B,MAAA+lL,MAAsB,MAAV/lL,KAAU+lL,KAAApjC,UAMzC3iJ,KAAK2e,MAAI,GACT3e,KAAKwa,IAAIhP,eACTxL,KAAKoa,KAAAwgB,SAAa,OAClB56B,MAAAwvE,QAAA2rO,MAAA,iBAAA93S,GAAA86S,gBAAA,SAAAhnS,GAAA,MAAA9T,GAAA+6S,UAAAjnS,OARCnX,KAAK2e,MAAI3e,KAAAua,YAAemE,UAAA,8BACxB1e,MAAAwa,IAAOhP,iBALPxL,KAAK2e,MAAI3e,KAAAua,YAAemE,UAAA,0BACxB1e,MAAAwa,IAAOhP,iBjgBqtqENmyS,EigBtsqEGrhT,UAAU4hT,gCAAe,SAAA1hQ,EAAA0oB,GAE9BllE,KAAI+lL,KAAAlqK,MAAa2gC,EAChB0oB,IACAllE,KAAA+lL,KAAA7gH,eAIDllE,KAAAm+S,gBjgBqsqEER,EigBlsqEGrhT,UAAU+hT,iBAAS,SAAAtjT,GACxBiF,KAAK49S,WAAA7iT,EACLiF,KAAKs+S,oBACLt+S,KAAAwa,IAAAhP,gBjgBosqEEmyS,EigBjsqEGrhT,UAAA25H,KAAiB,WACtBj2H,KAAKs+S,oBjgBksqECt+S,KigBjsqELu+S,iBACA3tR,GAAG5wB,KAAMua,YAAYmE,UAAU,8BAC9BqS,IAAA/wB,KAAAua,YAAAmE,UAAA,gCAEF1e,KAAKi0B,QAAI,EACTj0B,KAAKwa,IAAIhP,eACTxL,KAAAoa,KAAAwgB,SAAA,IjgBmsqEE+iR,EigBjsqEHrhT,UAAA2hT,kBAIC,WAHA,GAAI56S,GAAKrD,IACO,OAAfA,KAAK4gM,WACF5gM,KAAC4gM,UAAYhqE,cACjB52H,KAAA4gM,UAAAhZ,GAAA,WAAAxvD,MAAA,KAAAz9G,UAAA,iBAAAtX,GAAA4yH,UjgBmsqEE0nL,EigBhsqEErhT,UAAyBgiT,kBAAqB,WAClD,GAAI3iT,GAAwB,GAAnBqE,KAAA49S,WAAmB,UAC3B59S,MAAKw+S,cAAe7iT,IACrBqE,KAAAw+S,aAAA7iT,IjgBksqEEgiT,EigB/rqEErhT,UAAU6hT,aAAQ,WjgBgsqEhB,GigB/rqELn+S,KAAK+lL,KAAKE,OAAK,CAGdjmL,KAAKoa,KAAK68G,sBAAuB,GAAAj3H,KAAA49S,YACjC59S,KAAAoe,KAAAha,cAAA6xG,QAGD,IAAIy6E,GAAU1wL,KAAQ+lL,KAAK7gH,YAAallE,KAAK+lL,KAAM7gH,YAAKllE,KAAA+lL,KAAA5pC,UACvDu0C,IAAa1wL,KAAK+lL,KAAKtjC,YAAWziJ,KAAA24B,OAAAlC,OAC/Bi6J,EAAQ1wL,KAAU+lL,KAAA5pC,YACtBn8I,KAAA24B,OAAAgC,UAAA+1J,IAED1wL,KAAA+lL,KAAA7gH,YAAA,MjgB8rqEEy4O,EigB3rqEGrhT,UAAK8hT,UAAe,SAAAjnS,GACzBnX,KAAKoa,KAAKwgB,SAAO,GACjB56B,KAAK2e,MAAIxH,EACTnX,KAAKwa,IAAIhP,eACTxL,KAAAoa,KAAAwgB,SAAA,GApJkB,IAAAne,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,CAFW,OjgBo1qE3BsgS,KACI9iT,OAAOM,GAAoB,WAAG,QAC9ByiT,GAAsB,cigBp1qEO,mBAAAhhS,MAAA,KAAAzhB,GAAA,YAAAA,GAAA,aAAAyhB,GAAA/hB,SAqEpCijT,EAAArhT,UAAA,ejgBixqEGkhT,IACI9iT,OAAOM,GAAuB,cAAG,wBAAyB,WAC1DyiT,GAAsB,cAAe95P,UACrC85P,GAAsB,wBACtBA,GAAsB,wBigBtwqE5B,KAtFWE,EAASrhT,UAAA,cjgB81qElBqhT,EigBn2qEHH,IjgBo2qEO9iT,OigBn2qEPM,GAAiB,YACjB4V,SAAU,QACVE,SAAA5W,EAAiB,MAChBulB,gBAAAzkB,GAAA,wBAAA0kB,SACW+9R,GAwJZ,wCAAA/gS,MAAA,KAAA2gI,GAAA,GAAAA,GAAA,IAAA3gI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAA+oK,GAAA,GAAAA,GAAA,IAAA/oK,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAo+R,SAAAp+R,GAAAniB,OAAA,mBAAAoiB,MAAA,KAAAyiI,GAAA,GAAAA,GAAA,IAAAziI,GAAApiB,OAAA,mBAAAqiB,MAAA,KAAA/hB,GAAA,mBAAAA,GAAA,oBAAA+hB,GAAAriB,OAAA,mBAAAsiB,MAAA,KAAAogI,GAAA,GAAAA,GAAA,IAAApgI,GAAAtiB,OAAA,mBAAAuiB,MAAA,KAAAjiB,GAAA,WAAAA,GAAA,YAAAiiB,GAAAviB,OAAA,mBAAAwiB,MAAA,KAAAoiI,GAAA,GAAAA,GAAA,IAAApiI,GAAAxiB,UAADijT,IAxJsBtgK,GAAA,GjgB22qElBohK,GAAuCz+S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACtG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DslS,GAAuC1+S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAChF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGilS,GAAoC3+S,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GACnF,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,KkgBn4qE1DorH,GAAmD,WlgBy4qEhD,QkgBz4qEmCC,GAAat5O,GAAKvlE,KAAAulE,MlgB44qErDs5O,EkgB14qEHviT,UAiBC0pL,YAAA,SAAAqvG,EAAA1mO,GAhBA,GAAMtrD,GAAQrD,IlgB44qER,SkgB34qEIA,KAAMulE,IAAI7nE,iBAAE,wBACrBW,OAAW,IACV,GAAM4jO,IAAgB,oBAAap0M,GACnC,GAAI+2Q,GAAMvhS,EAAAkiE,IAAAroE,cAAkB,OAC5B0nS,GAAK/xR,GAAG,kBACR+xR,EAAKka,IAAI,algB24qEGla,EkgB14qEVpnQ,KAAM,2DAIRonQ,EAAK1rP,QAAS,SAAAj8C,GAAU,MAAK4wB,GAAIlP,MAAK1hB,IACtC2nS,EAAI3rP,OAAS,WAAaprB,EAAA+tD,MAAM,GAAA/tD,EAAA6gI,YAC9BrrJ,EAAAkiE,IAAA/nE,KAAA2/B,YAAAynQ,KAlBO,IAAAnoR,EAsBZ,OlgB24qEGoiS,GkgBl6qEHJ,IAGa/jT,OAAAM,GAAA,clgBi6qEN2jT,GAAiC,EAAGjkT,OAAOM,GAAiB,QAAGmiJ,GkgBj6qE3B,WAF/BuhK,GAsBZ,wCAAAjiS,EAAA,mBAAAstQ,sBAAAttQ,GAAA/hB,UAADmkT,MlgBq5qEIE,GAAyC/+S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxG,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5D4lS,GAAyCh/S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClF,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtGulS,GAAsCj/S,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GACrF,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,KmgBn7qE1D0rH,GAAmD,WngBw7qEhD,QmgBx7qEmCC,GAAa55O,GAAKvlE,KAAAulE,MngB27qErD45O,EmgBx7qEY7iT,UAASi0L,cAAkC,SAAA6uH,EAAwBxqB,EAAAC,EAAAC,GACjF,GAAIvzO,GAAMvhD,KAAMulE,IAAI7nE,iBAAA,uBngBy7qEd,ImgBx7qEL6jD,EAAKljD,OAAS,EngBy7qEL,ImgBx7qER,GAAMC,GAAI,EAAGA,EAAKijD,EAAMljD,OAAGC,IAAA,CAC3B,GAAIsmS,GAACrjP,EAAA/7C,KAAclH,EACnBsmS,GAAArjF,cAAAvkN,YAAA4nS,GAEF,SAZW,IAAAnoR,EAaZ,OngB07qEG0iS,GmgBx8qEHJ,IAGarkT,OAAAM,GAAA,cngBu8qENikT,GAAmC,EAAGvkT,OAAOM,GAAiB,QAAGmiJ,GmgBv8qE7B,WAF/B6hK,GAaZ,wCAAAviS,EAAA,mBAAAstQ,sBAAAttQ,GAAA/hB,UAADykT,MngBo8qEIE,GAA2Br/S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC1F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAe5DkmS,KogBp9qEHp8P,KAAA,QAAcxQ,UAAAgrQ,GACd13H,aAAa44H,IACXruH,eAAA2uH,MAqBHK,GAAA,WAA2B,QAACC,MAAA,MpgBq8qExBA,GogBx9qEHH,IpgBy9qEO3kT,OogBx9qEPM,GAAS,WpgBy9qEEqX,SogBv9qEVq1J,GAAW,EACXD,GAAA,YACAtqB,GAAA,aACAC,GAAA,EAAAoa,SAAA8nJ,IACAjiK,GAAa,EACb60H,GAAAjiE,IpgB09qEUn6L,WogBt9qEVmlS,GAAApwH,GACA+zH,GACAM,IAED9sS,cAAesrS,IACf1sH,iBAAU0sH,IACT9rT,SAAAwrJ,GAAA,EAAAsgK,OACyB8B,MpgB89qEvBC,GAAgCz/S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC/F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DsmS,GAAgC1/S,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACzE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqgBhgrEzGimS,GAE+B,WrgBmgrE5B,QqgBpgrEMC,GAAiBxlS,EAAAI,GACjBxa,KAAAoa,OARoBpa,KAAAwa,IAAMA,EAS9Bxa,KAAAi0B,QAAA,ErgBugrEF2rR,EqgBpgrEHtjT,UASC+H,SAAA,WARA,GAAIhB,GAACrD,IrgBqgrECA,MqgBpgrEJ6/S,eAAU7/S,KAAAoa,KAAAy8G,mBACVl8G,UAAS,SAAU29G,GAClBj1H,EAAK4wB,QAASqkG,EAAY7hH,MAAKpT,EAAAi0H,WAAAgB,EAAA35G,QAC/Btb,EAAK4wB,OAASqkG,EAAG7hH,KACjBpT,EAAKi0H,UAAIgB,EAAe35G,MACxBtb,EAAAmX,IAAAhP,mBrgBwgrEDo0S,EqgBngrEStjT,UAASgI,YAAA,WACpBtE,KAAIi0B,QAAK,EACRj0B,KAAK6/S,gBACN7/S,KAAA6/S,eAAAjpL,cA3B4B,IAAAn6G,GAAAC,CA6B7B,OrgBogrEG+iS,KACI/kT,OAAOM,GAAsB,aAAG,gBAChC0kT,GAA6B,cqgBnirEOhlT,SAF/BklT,EAAgBtjT,UAAA,iBrgBuirEzBsjT,EqgB7irEHH,IrgB8irEO/kT,OqgB7irEPM,GAAmB,YACnB4V,SAAA,UACA6O,gBAAUzkB,GAAmC,wBAAA0kB,OAC7C5O,SAAS5W,EAAQ,MAChBiX,QAAAjX,EAAA,SACWwlT,GA+BZ,wCAAAjjS,MAAA,KAAA8iI,GAAA,GAAAA,GAAA,IAAA9iI,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA1hB,GAAA,mBAAAA,GAAA,oBAAA0hB,GAAAhiB,UAADklT,MrgBshrEIE,GAA6B9/S,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC5F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GsgB9irEhE2mS,GAAA,WAA6B,QAACC,MAAA,MtgBsjrE1BA,GsgBtkrEHF,ItgBukrEOplT,OsgBtkrEPM,GAAS,WtgBukrEEqX,SsgBrkrEV8qI,GAAA,cAGDrnI,atgBskrEWk7K,iBsgBpkrEV2uH,ItgBukrEUvtS,csgBpkrEVutS,ItgBukrEU/tT,SsgBpkrEV+tT,OAE2BK,MtgB4krEzBC,GAAiB/lT,EAAoB,KAGrCgmT,GAAuBhmT,EAAoB,KAG3CimT,GAAMjmT,EAAoB,MAG1BkmT,GAAalmT,EAAoB,KAGjCmmT,GAAYnmT,EAAoB,KAIhComT,GAA+BtgT,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC9F,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DmnS,GAA+BvgT,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACxE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IAEtG8mS,GAA4BxgT,MAAQA,KAAKuzL,SAAY,SAAUC,EAAYC,GAC3E,MAAO,UAAUz6K,EAAQC,GAAOw6K,EAAUz6K,EAAQC,EAAKu6K,K4PtmrE1DitH,GAEwB,W5PgnrErB,Q4PjnrEyBC,GAAsB15Q,EAAAvQ,EAAAnc,EAAAC,GACzCva,KAAAgnC,OAAGA,EACHhnC,KAAAy2B,IAAMA,EACNz2B,KAAAsa,SAPDta,KAAAua,YAAaA,EACbva,KAAA2gT,OAAO,KAAG,MAM2B3gT,KAAA4gT,QAAA1mT,EAAA,M5PsnrE1CwmT,E4PpnrEHpkT,UAuCCkrK,KAAA,WArCA,GAAInkK,GAAQrD,I5PonrENA,M4PnnrEJsa,OAAAovI,mBACA5C,aAAA9mJ,KAAAgnC,OAAuB86G,WACvBmF,oBAAoB,IACjBK,oBAActnJ,KAAAgnC,OAAAjL,QAAAgmH,SAAA/hJ,KAAAgnC,OAAAjL,QAAAimH,SAGnBhiJ,KAAIsa,OAAA27G,MACJ,IAAI4qL,K5PknrEE7gT,M4PjnrEL4gT,QAAA35R,OAAA5pB,QAAwB,SAAIoc,GAC1BonS,EAAApnS,MAGH,IAAIqnS,GAAC9gT,KAAOua,YAAUmvI,kB5PinrEhB1pJ,M4P9mrEHgnC,OAAIlxB,UAAWzY,QAAO,SAAa0jT,GAAiB,MAAK19S,GAAOs9S,MAAGtjT,QAAQ,SAAA2vJ,GAC3E,GAAGg0J,GAAQ,KAAID,EAAA54Q,QAAuB,cAAA6kH,EAAA,O5P+mrE/B,I4P9mrENg0J,IAAYH,GAAsB,CAClC,GAAGI,GAAA59S,EAAeu9S,QAAMI,EACxBF,GAAAh1J,eAAAkB,EAAAi0J,O5PinrEE,I4P1mrELp4Q,GAAK,GAAO3M,SAAA,SAAiBhV,GAAY,MAAO7jB,GAACkX,YAAe0zI,mBAAetzI,UAAS,WAGxFtX,EAAAiX,OAAAqwI,iBAAmBtnJ,EAAM2jC,OAACjL,QAAAgmH,SAAoB1+I,EAAA2jC,OAAAjL,QAAAimH,SAE9CmvC,GAAcruK,EAAAxI,OAAAjX,EAAAiX,OAAAqqI,oBAR2Cz9H,GAStD,MAIJ,OADAlnB,MAAAua,YAAe07G,OACfptF,EAlDW,IAAApsB,GAAAC,EAAAC,EAAAC,CAmDZ,O5PwmrEG8jS,G4P5prEHJ,IAOE5lT,OAAAM,GAAA,c5PuprEKwlT,GAAyB,EAAG9lT,OAAOM,GAAiB,QAAGolT,G4PvprE1B,IANxBG,GAmDZ,wCAAA9jS,MAAA,KAAA4jS,GAAA,gBAAAA,GAAA,iBAAA5jS,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA4iI,GAAA,GAAAA,GAAA,IAAA5iI,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA0gI,GAAA,GAAAA,GAAA,IAAA1gI,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAygI,GAAA,GAAAA,GAAA,IAAAzgI,GAAAliB,UAADgmT,K5PknrE+BxmT,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOinT,KACnG,IAAIC,IAAyBnhT,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GACxF,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DgoS,GAAyBphT,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GAClE,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IugBrlrEzGwnS,GAAmB,WvgBsnrEhB,QugBtnrEgBG,GAAAC,GAA2BthT,KAAAshT,SvgBynrE3CD,EugBtnrEG/kT,UAAUilT,UAAW,SAAA1tS,GAAEA,GAAOA,EAAAstD,QAMlC,sBAAwBttD,IACxBA,EAAA2tS,qBAGDxhT,KAAAshT,OAAY/a,aACL1yR,GAAMstD,YACbttD,GAAA2tS,qBvgBonrEEH,EugBjnrEF/kT,UAAgBmlT,aAAA,SAAA5tS,GAChB00B,QAAIitB,OAEJ,IAAAksP,GAAM1hT,KAAeshT,OAAGllT,WAAAG,IAAA,SAAegiP,GAAA,MAAaA,GAAAnyM,SAAAhoC,eAMpDyP,GAAM8tS,gBAAkBjnT,OAAG2qL,GAAA,gBAAAq8H,GAE3B7tS,EAAA2tS,mBAAA9mT,OAAiB2qL,GAAA,uBACjB3qL,OAAA2qL,GAAA,mBvgB4mrEEg8H,EugBxmrEI/kT,UAAAslT,gBAAkB,SAAA/tS,GACxBA,EAAA8tS,wBAEA9tS,GAAA8tS,gBAvCW,IAAAllS,EAyCZ,OvgBwmrEG4kS,GugBltrEHF,IvgBmtrEOzmT,OugBltrEPM,GAAS,WvgBmtrEEqX,SACI+qI,GugBjtrEO,EAAAga,YACpByqJ,eAAA,EACCtU,mBAAA,IAEF7lI,GAAA,EACAC,GAAuB,EACvBud,GACAzd,GAAA,YAEAA,GAAA,oBACApqB,GAAW,EAAA+Z,UAEX86G,GACA6tC,GACAR,GACAlC,GACA/3H,GAAA,qBvgBitrEUlzK,cugB9srEV+tS,GAAA,cvgBitrEUrqS,WugB9srEVmqS,GAAA,EACAC,GAAgB,EAChBnI,GAAA,GAEChhJ,QAAA/7J,GAAY,gBACZ8pL,WAAOizH,GAAkB,EACzBhzH,MAAOgzH,GAAI,EAAAkI,GAAA,GACXhpJ,OAAA,GAED1X,GAAA,GAECwX,QAAA/7J,GAAY,gBACZ8pL,WAAOvlC,GAAY,EACnBwlC,MAAOxlC,GAAI,GACX0X,OAAA,GAEDwpJ,IAEC1pJ,QAAA/7J,GAA4B,gBAC5B8pL,WAAOxd,GACPyd,MAAO07H,GAAInhK,GAAA,GACX2X,OAAA,IAGCF,QAASqpJ,GAAc,EAAA1mH,SAAU0mH,GAAA,IAEnCrpJ,QAAA/7J,GAAA,aAAWs8J,SAAAwwB,GAAA,GACXnC,GAAU,EACVoC,GAAA,EACAD,GAAc,EACdwC,GACAzC,GAAU,EACVvoC,GAAA,EACA6oC,GACA3oC,GAAW,EACX+oC,GAAa,EACborB,IAEA1iB,WAAAkvH,GAAA,gBACWiB,GAyCZ,wCAAA3kS,MAAA,KAAAzhB,GAAA,gBAAAA,GAAA,iBAAAyhB,GAAA/hB,UAAD2mT,OvgB8qrEMS,IACA,SAAUnwT,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO8nT,IAC9E,IAAIpqS,GAA8Czd,EAAoB,GACvF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GwgBp0rEhE2oS,EAAA,WAaA,QAACA,MAAA,MxgB6zrEGA,GwgBv0rEKzlT,UAAaw+I,MAAc,SAAO/nI,EAAAhY,GACzCkF,OAAAmiJ,aAAA0G,QAAA/1I,EAAAhY,IxgBy0rEEgnT,EwgBt0rEYzlT,UAAY0V,KAAC,SAAce,GACzC,MAAA9S,QAAAmiJ,aAAAwG,QAAA71I,IxgBw0rEEgvS,EwgBr0rEKzlT,UAAaw+B,MAAW,SAAM/nB,GACrC9S,OAAAmiJ,aAAAglE,WAAAr0M,IxgBu0rEEgvS,EwgBp1rEHhpS,GACYre,OAAAid,EAaZ,eAADoqS,OxgBg1rEMC,IACA,SAAUrwT,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOgoT,IAC9E,IAAItqS,GAA8Czd,EAAoB,GAClEqhJ,EAA0DrhJ,EAAoB,IAC9EshJ,EAA0DthJ,EAAoB,IACnGqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IygB90rEjEuoS,EAAA,SAAAroS,GzgBg2rErC,QygB91rEHqoS,GACCxmK,GADkB,GAAAp4I,GAAAuW,EAAApd,KAAAwD,OAAuBA,IAEzC,OzgB81rEMqD,GAAMo4I,UAAYA,EygB91rExBp4I,EAFDkV,EAAA0pS,EAAmBroS,GzgBm2rEhBqoS,EygB91rE2C3lT,UAACqgJ,cAAA,SAAA18D,GAC9C,GAAI1pE,KzgB+1rEE,IygB91rES,MAAd0pE,EAAA1pE,QzgB+1rES,IygB91rER,GAAAjY,GAAQ,EAAIA,EAAA2hF,EAAQ1pE,QAAMlY,OAAKC,IAC1BiY,EAAQ0pE,EAAA1pE,QAAAjY,KAAA,CACf,OAAAiY,IzgBg2rEE0rS,EygB71rEW3lT,UAAQgjB,MAAA,SAAA2gE,GACR,MAAZA,EAAI3gE,OACD2gE,EAAI3gE,QACP2gE,EAAI5gE,OAAS,GAAA4gE,EAAA5gE,OACdrf,KAAAqf,QAnBW,IAAA5C,EAA4B,OzgBm3rErCwlS,GygBx3rEHlpS,GzgBy3rEOre,OygBx3rEPid,EAAkC,YAClC/G,SAAU,yBACVE,SAnCK,4VAmCUK,QAEhB,mxBADEsO,gBAAA9H,EAAA,wBAAA+H,SACWlG,EAAA,qBAoBZ,mBAAAiD,MAAA,KAAA8+H,EAAA,GAAAA,EAAA,IAAA9+H,GAAA/hB,UAADunT,IApBgCzmK,EAAA,IzgBk4rE1B0mK,IACA,SAAUvwT,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOkoT,IAC9E,IAAIC,GAAgDloT,EAAoB,GACpE27H,EAA8C37H,EAAoB,GAClEmoT,EAAgDnoT,EAAoB,GACpEooT,EAAwDpoT,EAAoB,KAC5EqoT,EAAkCroT,EAAoB,MACtDsoT,EAAyDtoT,EAAoB,KAC7EuoT,EAAuDvoT,EAAoB,KAChG6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,G0gB96rEhE+oS,EAAA,WAA4B,QAACA,MAAA,M1gB07rEzBA,G0gBh8rEHppS,G1gBi8rEOre,O0gBh8rEPm7H,EAAU,WACVxjH,SAAAgwS,EAAgC,EAAAD,EAAA,aAAAE,EAAiB,GACjDlwS,cAAYmwS,EAAc,gBAAAC,EAAA,EAAAC,EAAA,GAC1B3sS,WAAUysS,EAAA,eACT3wT,SAAA2wT,EAAA,oBAC0BJ,O1gBy8rEtBO,IACA,SAAU/wT,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO0oT,IAC9E,IAAIhrS,GAA8Czd,EAAoB,GAClE0d,EAAgD1d,EAAoB,GACpE+9H,EAAsD/9H,EAAoB,IAC1E0oT,EAAgD1oT,EAAoB,KACpE2oT,EAA+C3oT,EAAoB,IACxF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I2gB17rEzGipS,EAAA,W3gB09rEG,Q2gB19rEHA,GAkBCvoS,EAAAlb,EAAAsb,EAAAme,EAAA62C,GAlBkB,GAAAnsE,GAAArD,IACRA,MAAAoa,KAAOA,EACPpa,KAAAd,QAAsBA,EACtBc,KAAAwa,IAAMA,EACNxa,KAAA24B,OAAOA,EACjB34B,KAAKwvE,QAASA,EACdxvE,KAAKi0B,QAAK,EACVj0B,KAAKoa,KAAA2Z,cAAcpZ,UAAU,WAAM,MAAItX,GAACmX,IAAQhP,iBAGhDxL,KAAG24B,OAAK25B,OAAQ33C,UAAY,WAAE,MAAAtX,GAAAy/S,aAC7B9iT,KAAKwvE,QAAQ4xE,eACbphJ,KAAAkyG,MAAAlyG,KAAAwvE,QAAA4xE,c3gB29rEKphJ,K2gBx9rELwvE,QAAK0xE,YAAavmI,UAAA,SAAA1S,GAClB5E,EAAK6uG,MAAIjqG,EACP5E,EAAAmX,IAAAhP,iB3gB29rEDm3S,E2gBv9rEYrmT,UAAO4nC,OAAA,SAAA5oC,GACrBA,EAAA24B,QAAY34B,EAAA24B,OACX34B,EAAA24B,SACDj0B,KAAAi0B,QAAA,I3gBy9rEE0uR,E2gBt9rEcrmT,UAAAgjB,MAAA,SAAAhhB,GAChB0B,KAAK8iT,WACM,MAAVxkT,EAAEghB,OACHhhB,EAAAghB,S3gBw9rEEqjS,E2gBr9rEarmT,UAAQymT,gBAAK,SAAA9lT,GACZ,GAAf+C,KAAKi0B,QAAW4uR,EAAA,EAAApjH,aAAAz/L,KAAAd,QAAAkF,cAAAnH,EAAA+b,SACjBhZ,KAAA8iT,Y3gBu9rEEH,E2gBp9rEarmT,UAAQwmT,SAAc,WACtB,GAAd9iT,KAAKi0B,QAAe,MAAAj0B,KAAAkyG,OAAAlyG,KAAAkyG,MAAA7zG,OAAA,IACpB2B,KAAKi0B,QAAM,EACXj0B,KAAKkyG,MAAI70G,QAAA,SAAe/B,GAAA,MAAAA,GAAA24B,QAAA,IACxBj0B,KAAAwa,IAAAhP,gBA/CU,IAAAiR,GAAAC,EAAAC,EAAAC,EAAmBC,CAiD/B,O3gBs9rEG8lS,G2gB7gsEH5pS,G3gB8gsEOre,O2gB7gsEPid,EAAwD,YACxD/G,SAAQ,cAAAE,SA3BP,qYA2B2BK,QAf1B,w2BAgBFJ,MAAAkvL,mBAAiB,2BAChBxgL,gBAAA9H,EAAA,wBAAA+H,SAEWlG,EAAA,qBAiDZ,mBAAAiD,MAAA,KAAAw7G,EAAA,GAAAA,EAAA,IAAAx7G,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA/E,EAAA,YAAAA,EAAA,aAAA+E,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAhF,EAAA,mBAAAA,EAAA,oBAAAgF,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAhF,EAAA,GAAAA,EAAA,IAAAgF,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA+lS,EAAA,GAAAA,EAAA,IAAA/lS,GAAAniB,UAADioT,O3gBq+rEMK,IACA,SAAUrxT,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOgpT,IAC9E,IAAItrS,GAA8Czd,EAAoB,GAClE0d,EAAgD1d,EAAoB,GACzF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4gBhisEzGupS,EAAA,W5gBuisEG,Q4gBvisEHA,GAOCtqR,EAAAne,GAPmB,GAAAnX,GAAMrD,IAAkBA,MAAA24B,OAAGA,EAJ/C34B,KAAAwa,IAAMA,EAENxa,KAAAi0B,QAAS,EAGRj0B,KAAKgB,OAAO,GAAM2W,GAAW,a5gB4isEvB3X,K4gB3isEL24B,OAAI25B,OAAK33C,UAAe,WACT,GAAdtX,EAAK4wB,SACL5wB,EAAK4wB,QAAI,EACT5wB,EAAAmX,IAAAhP,kB5gB+isEAy3S,E4gB1isES3mT,UAASg3H,QAAO,WAC3BtzH,KAAKi0B,QAAOj0B,KAAKi0B,OACjBj0B,KAAAgB,OAAAuK,KAAAvL,KAAAi0B,QAlBW,IAAAxX,GAAAC,CAmBZ,O5gB4isEGumS,G4gBtksEHlqS,G5gBuksEOre,O4gBtksEPid,EAAmD,YACnD/G,SAAQ,SAAWE,SA3BX,iFA2BwBK,QAKjC,ujDAJCJ,MAAO44K,UAAY,YAAA/wD,iBAAA,UACnBwmB,SAAA,UACC3/H,gBAAA9H,EAAA,wBAAA+H,SAEWlG,EAAA,qBAmBZ,mBAAAiD,MAAA,KAAA7E,EAAA,GAAAA,EAAA,IAAA6E,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA/E,EAAA,mBAAAA,EAAA,oBAAA+E,GAAAhiB,UAADuoT,O5gB4jsEMC,IACA,SAAUvxT,EAAQsI,EAAqBC,GAE7C,cAC4B,SAASud,GAAmCvd,EAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOkpT,IACvH,IAAIxrS,GAA8Czd,EAAoB,GAClE8iJ,EAA0D9iJ,EAAoB,IAC9EkpT,EAA6ClpT,EAAoB,KACjEmpT,EAA+CnpT,EAAoB,IACxF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I6gBznsEzG2vK,G7gBgosEG,gJ6gB7nsEH,iCACA,+FACC,yDAoBD85H,EAAA,W7gB8msEG,Q6gB9msEHA,GA0BC3zO,EAAAh1D,EAAAs+P,GA1BmB,GAAAz1Q,GAAOrD,IAClBA,MAAAwvE,QAAsBA,EACtBxvE,KAAAwa,MALTxa,KAAA84Q,WACA94Q,KAAA0jJ,sBAAe,EAMd1jJ,KAAKi0B,QAAQ,E7gBinsEPj0B,K6gB/msELwvE,QAAK+zE,cAAA5oI,UAA2B,SAAC1S,GACjC5E,EAAKqgJ,qBAAc,MAAAz7I,EAAAy7I,sBAAAz7I,EAAAy7I,qBACnBrgJ,EAAK4wB,QAAA,EACL5wB,EAAIkyD,YAAaC,OACjB,IAAIr7C,GAAM9W,EAAQkyD,YAAA2jN,gBAAA71Q,EAAAy1Q,SAAAK,wBAAUlxQ,EAAKyqC,W7gBgnsExB,KAAKzqC,E6gB/msEVwI,MAAM2yS,EAAoB,EAAA3/J,OAAA2/J,EAAwB,EAAAlkS,SACrD/E,EAAQzF,mBAA0CsoI,GAAA,GAClD,GAAI65B,GAAM18J,EAAOzF,QACjBmiK,GAAKvmJ,MAAOroB,EAAKqoB,MAAOroB,EAAKqoB,MAAO,KACpCumJ,EAAK3uD,KAAAjgH,EAAUigH,KAAQjgH,EAAAigH,KAAa,KACpC2uD,EAAKhzB,WAAA57I,EAAiB47I,WAAQ57I,EAAA47I,WAAwB,KACtDgzB,EAAKp6B,kBAAex0I,EAAUw0I,kBAAkBx0I,EAAAw0I,kBAAA,KAChDo6B,EAAKh6B,QAAQ50I,EAAA40I,QAAM50I,EAAA40I,WACnBg6B,EAAAx3J,MAAA,iBAAAhc,GAAAgc,SAGD5H,EAAA,QAAS68C,SAAA,cACPjxD,EAAAmX,IAAAhP,iBAGHxL,KAAAwvE,QAAAgxE,aAAA7lI,UAAA,iBAAAtX,GAAAgc,U7gB+msEE8jS,E6gB5msEO7mT,UAAUgjB,MAAQ,SAAKriB,GAClB,GAAb+C,KAAKi0B,QAAQ,GAAAj0B,KAAA0jJ,sBAAAzmJ,EAAA0mC,UAAA7lC,QAAA,eACdkC,KAAAqf,S7gB8msEE8jS,E6gB3msEQ7mT,UAAW+iB,MAAC,WACtB5H,EAAA,QAASi9C,YAAU,cACJ,GAAd10D,KAAKi0B,SACLj0B,KAAKi0B,QAAA,EACLj0B,KAAKu1D,YAAIC,QACTx1D,KAAKwa,IAAAhP,eACLxL,KAAAwvE,QAAA4zE,aAAAxnE,KAAA,OA7CoD,IAAAn/D,GAAAC,EAAAC,EAAAC,CA+CtD,O7gB6msEG7D,IACIre,OAAOid,E6gB7psEqD,0BAAA3F,KAAA2F,EAAA,mB7gB8psE5D6B,EAAW,c6gB9psEkE,mB7gB8psE3CiD,M6gB9psE2C,K7gB8psE/B9E,E6gB9psE+B,kBAAAA,EAAA,mBAAA8E,GAAA/hB,SAFxEyoT,EAAc7mT,UAAA,sB7gBkqsEvB6mT,E6gB7qsEHpqS,G7gB8qsEOre,O6gB7qsEPid,EAAiB,YACjB/G,SAAQ,QACRG,MAAQ6nH,iBAAI,SAAA+wD,UAAA,wB7gB8qsED74K,S6gB7qsET,sEAIFK,OAAAk4K,EACC5pK,gBAAA9H,EAAA,wBAAA+H,SAEWlG,EAAA,qBAiDZ,mBAAAkD,MAAA,KAAA2mS,EAAA,GAAAA,EAAA,IAAA3mS,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAhF,EAAA,mBAAAA,EAAA,oBAAAgF,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAjF,EAAA,0BAAAA,EAAA,2BAAAiF,GAAAliB,UAADyoT,Q7gBkosE6B3mT,KAAKvC,EAAqBC,EAAoB,MAIrE6oC,GACA,SAAUpxC,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOqpT,IAC9E,IAAIC,GAAsDrpT,EAAoB,KAE1E27H,GAD8D37H,EAAoB8d,EAAEurS,GACtCrpT,EAAoB,IAClEspT,EAA8CtpT,EAAoB,GAClEupT,EAA8CvpT,EAAoB,IAClEwpT,EAA8CxpT,EAAoB,IACvF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I8gB3tsEtG4pS,EAAA,W9gBmusEA,Q8gBnusEsBA,GAAiBlpS,EAAAupS,EAAA92J,GAAY7sJ,KAAAoa,KAAMA,EAAyBpa,KAAA2jT,SAC9E3jT,KAAK6sJ,OACR7sJ,KAAA4jT,iBAAA,E9gBuusEDN,E8gBpusEMhnT,UAAe49B,YAAA,SAAAvb,GACvB4pB,QAAKs7Q,eAAa,oEAClB7jT,KAAA8jT,MAAQnlS,GACR4pB,QAAKw7Q,WAEL/jT,KAAAoa,KAAAuE,QAAA7H,U9gBqusEEwsS,E8gB3tsEuBhnT,UAAAwnT,MAAA,SAAAnlS,EAAsBqlS,OAI5B,KAAnBA,IAAqBA,EAAA,MACrBz7Q,QAAQ5pB,MAAIA,GACZ4pB,QAAQC,IAAI7pB,EAAMslS,OAClB17Q,QAAAC,IAAA7pB,EAAA7H,SA/BW,IAAA2F,GAAAC,EAAAC,CAuEZ,O9gBmrsEG2mS,G8gB3vsEHvqS,G9gB4vsEOre,OAAOm7H,E8gBvvsEiB,cAJnBr8G,EAAA,qBAuEZ,mBAAAiD,MAAA,KAAAinS,EAAA,GAAAA,EAAA,IAAAjnS,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA+mS,EAAA,GAAAA,EAAA,IAAA/mS,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA6mS,EAAA,GAAAA,EAAA,IAAA7mS,GAAAjiB,UAAD4oT,O9gB8rsEMY,IACA,SAAUvyT,EAAQC,EAASsI,G+gBhxsEpB,YAEbQ,QAAAI,eAAAlJ,EAAA,cAAAmJ,OAAA,GAEA,IAAA6D,GAAA1E,EAAqB,GACrBiqT,EAAAjqT,EAAiB,GACjBkqT,EAAAlqT,EAAA,IAMA87B,EAAA,WAIA,QAAAA,KACAh2B,KAAAgB,OAAA,GAAApC,GAAAkC,aACAd,KAAAmtD,MAAA,GAAAvuD,GAAAkC,aACAd,KAAA07D,KAAA,GAAA98D,GAAAkC,aACAd,KAAAqkT,eAAA,GAAAzlT,GAAAkC,aACAd,KAAA0U,SAAA,KACA1U,KAAA+jG,OAAA,GAkEC,MAhEDrpG,QAAAI,eAA0Bk7B,EAAoB15B,UAAE,SAChD0F,IAAA,iBAAAhC,MAAA+jG,QACAphG,IAAA,SAAA+W,GACAA,IAAA1Z,KAAA+jG,SACA/jG,KAAA+jG,OAAArqF,EACA1Z,KAAA+mM,SAAArtL,KAGAjX,YAAA,EACKC,cAAA,IAKLszB,EAAA15B,UAAAgI,YAAA,aAKA0xB,EAAA15B,UAAA6e,gBAAA,WACAnb,KAAAgnC,OAAAhnC,KAAAgnC,WACAhnC,KAAAskT,eAAAtkT,KAAAgnC,SAKAhR,EAAA15B,UAAAgoT,eAAA,SAAAt9Q,GACA,GAAA3jC,GAAArD,IACAA,MAAA0U,SAAA0vS,EAAAG,aAAAvkT,KAAA+Q,KAAA3M,cAAA4iC,GACAhnC,KAAA0U,SAAAugJ,SAAAj1J,KAAA+jG,QACA/jG,KAAA0U,SAAAkc,GAAA,oBACSvtB,EAAAmhT,YAAAnhT,EAAAqR,SAAAk6I,cAET5uJ,KAAA0U,SAAAkc,GAAA,QAA8B,SAAAlc,EAAA4vB,GACrBjhC,EAAA8pD,MAAA5hD,MAAAmJ,WAAA4vB,YAETtkC,KAAA0U,SAAAkc,GAAA,iBAAuC,SAAAlc,GAC9BrR,EAAAghT,eAAA94S,MAAAmJ,eAET1U,KAAA0U,SAAAkc,GAAA,OAA6B,SAAAlc,EAAA4vB,GACpBjhC,EAAAq4D,KAAAnwD,MAAAmJ,WAAA4vB,aAMTtO,EAAA15B,UAAAkoT,YAAA,SAAAzpT,GACAiF,KAAAjF,QACAiF,KAAA+/M,YACA//M,KAAAgB,OAAAuK,KAAAxQ,IAKAi7B,EAAA15B,UAAA2jN,WAAA,SAAAllN,GACAiF,KAAA+jG,OAAAhpG,GAAA,GACAiF,KAAA0U,UACA1U,KAAA0U,SAAAugJ,SAAAj1J,KAAA+jG,SAGA/tE,EAAA15B,UAAAyqM,SAAA,SAAAxgJ,KACAvwB,EAAA15B,UAAAyjN,UAAA,aACA/pL,EAAA15B,UAAA4jN,iBAAA,SAAAlyL,GAAqEhuB,KAAA+mM,SAAA/4K,GACrEgI,EAAA15B,UAAA6jN,kBAAA,SAAAnyL,GAAAhuB,KAAA+/M,UAAA/xL,GACCgI,IAEDA,GAAKxlB,aACLC,KAAA7R,EAAA8R,UAAAC,OACAC,SAAA,aACAkF,YAEAihJ,QAAAotJ,EAAAM,kBACAztJ,YAAAp4J,EAAA8lT,WAAA,iBAAA1uR,KACAihI,OAAA,IAGanmJ,SAAI,kCAIjBklB,EAAA5kB,eAAA,qBACA4kB,EAAgBpkB,gBAChBo1B,SAAgBv2B,KAAA7R,EAAAiT,QAChB7Q,SAAeyP,KAAA7R,EAAAkT,SACfq7C,QAAc18C,KAAA7R,EAAAkT,SACd4pD,OAAAjrD,KAAA7R,EAAwBkT,SACxBuyS,iBAAc5zS,KAAA7R,EAAAkT,SACdf,OAAAN,KAAkB7R,EAAAmT,UAAApB,MAAsB,UACxC+D,WAAejE,KAAA7R,EAAAkT,SACf/W,QAAA0V,KAAA7R,EAAAiT,SAEAjgB,EAAAokC,uB/gBuxsEM2uR,IACA,SAAUhzT,EAAQC,KAMlBqxC,GACA,SAAUtxC,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO2qT,IAC9E,IAAIjtS,GAA8Czd,EAAoB,GAClE8mJ,EAA6C9mJ,EAAoB,IAEjE2qT,GADqD3qT,EAAoB8d,EAAEgpI,GAC1B9mJ,EAAoB,MACrE4qT,EAAkE5qT,EAAoB,IACtFwpT,EAA8CxpT,EAAoB,IACvF6e,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IghB14sEzGkrS,EAAA,WhhBk5sEG,QghBl5sEiBA,GAAArhF,GAJVvjO,KAAAujO,YAAcA,EACdvjO,KAAA+kT,YAAa,GAAG/jK,GAAI,QACpBhhJ,KAAAy0Q,cAAe,GAAIzzH,GAAO,QAGnChhJ,KAAKizQ,aAAc,GAAKjyH,GAA2B,QACnDhhJ,KAAKsgJ,YAAatgJ,KAAG+kT,YAAKjuL,eAC1B92H,KAAKugJ,cAAevgJ,KAAK+kT,YAAajuL,eACtC92H,KAAAwgJ,aAAAxgJ,KAAAizQ,aAAAn8I,ehhBu5sEE8tL,EghBp5sEQtoT,UAAQkgT,aAAgB,SAAAv0S,GAClCjI,KAAAglT,MAAAnmS,KAAAE,UAAA9W,IhhBs5sEE28S,EghBn5sEOtoT,UAAS43B,YAAI,WACP,MAAdl0B,KAAKglT,OACFhlT,KAAC+5B,KAAAlb,KAAAC,MAAkB9e,KAAKglT,QAC5BhlT,KAAAilT,gBAAA,MhhBq5sEEL,EghBn5sEiEtoT,UAAAssR,gBAAQ,SAAA2tB,EAAA9zE,EAAA5oN,GhhBq5sErE,OghBp5sEI,KAANA,IAAWA,EAAAirS,EAAA,EAAAtwB,cACdx0R,KAAAglT,MhhBm5sEK,CghBj5sEN,GAAM/8S,GAAA4W,KAAAC,MAAkB9e,KAACglT,OACrBE,GAAe,QAAY,SAC9B3O,IAAYA,EAAOv4R,MAAA,GAAAu4R,EAAA96R,QAAApd,OAAA,GhhBo5sEVk4S,EghBn5sEA96R,QACPpe,QAAW,SAAAy8J,EAAAx7J,GACX,GAAMglM,GAAA5oM,OAAYmqT,EAA+D,GAAO/qJ,GAClFqrJ,GAAe7hH,KAAQxpC,EAAOmmH,mBAAqBnmH,EAAOmmH,gBAAgBmlC,QAC1EC,EAAO/hH,KAAAxpC,EAAAmmH,mBAAAnmH,EAAAmmH,gBAAA0Z,cACZn0R,GACAuN,KAAK,IAAE+mJ,EAAA/mJ,KAAgB,IACvB8G,MAAMqrS,EAAc15R,QAAQ,GAAAsuI,EAAAjnJ,KhhBo5sEd5K,KghBn5sEX6xJ,EAACjnJ,KAAA4vN,IAEF1vN,KAAKuwL,EAAEwhH,EAA6C,EAAAA,EAA6B,EAAAtzI,SAAA33J,EAChFA,MAAAqrS,EAAA15R,QAAA,GAAAsuI,EAAAjnJ,GAAAywL,EAAAwhH,EAAA,EAAAtzI,QAAA33J,MAEC2R,OAAC83K,EhhBo5sEmB+hH,IghBj5sEnBtyS,KAAA,YAAA8G,MAAAqrS,EAAA15R,QAAA,GAAAsuI,EAAAjnJ,GAAAiyS,EAAA,EAAArrB,iBhhBs5sEmB0rB,IghBj5sEjBpyS,KAAM,YAAW8G,MAAOqrS,EAAgB15R,QAAQ,GAAGsuI,EAAWjnJ,GAAEiyS,EAAY,EAAA9mB,YAC9EjrR,KAAA,UAAA8G,MAAAqrS,EAAA15R,QAAA,GAAAsuI,EAAAjnJ,GAAAiyS,EAAA,EAAAn0R,oBAKJ1oB,GAAArD,MAAA,GAAAqD,KAAA+O,KAAAxR,KAGLyC,EAAKw4I,SAAAn3H,KAAeP,MACpB/oB,KAAKilT,gBAAUh9S,EACfjI,KAAA+5B,KAAA/5B,KAAAilT,mBhhBq5sEEL,EghBl5sEGtoT,UAAcuE,OAAO,WAC1Bb,KAAAy0Q,cAAA74L,QhhBo5sEEgpO,EghBj5sEItoT,UAAAy9B,KAAgC,SAAQ9xB,GACvBA,GAASA,EAAKrD,OAAUqD,EAAKrD,MAAIvG,OAAM,GAC7D4J,EAAKrD,MAAM,IAAIqD,EAAOrD,MAAK,GAAAiV,OAAa5R,EAAKrD,MAAO,GAAEiV,MAAOxb,OAAK,GAGtC,SAAzB4J,EAAArD,MAAA,GAAAiV,MAAoB,IAA4C,UAAlC5R,EAAYrD,MAAA,GAAAiV,MAAkB,KAE5C7Z,KAAAujO,YAAAtsG,sBACnBj3H,KAAKwpM,QAAA,EACLxpM,KAAA+kT,YAAAnpO,KAAA3zE,KAGAjI,KAAKwpM,QAAA,EACLxpM,KAAAizQ,aAAAr3L,ShhBi5sECgpO,EghB74sEStoT,UAAS+iB,MAAA,WACpBrf,KAAKwpM,QAAA,EACLxpM,KAAAizQ,aAAAr3L,OA9FW,IAAAn/D,EA+FZ,OhhB+4sEGmoS,GghB/+sEH7rS,GhhBg/sEOre,OAAOid,EghBl+sEmB,cAbrB6B,EAAA,qBA+FZ,mBAAAiD,MAAA,KAAAinS,EAAA,GAAAA,EAAA,IAAAjnS,GAAA/hB,UAADkqT,OhhB05sEMxgR,GACA,SAAUzyC,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOqrT,IAC9E,IAAI3tS,GAA8Czd,EAAoB,GAClE0d,EAAgD1d,EAAoB,GACpEirJ,EAAgDjrJ,EAAoB,GAEpEqrT,GADwDrrT,EAAoB8d,EAAEmtI,GAChCjrJ,EAAoB,IAClEsrT,EAA8CtrT,EAAoB,IAClEurT,EAAmDvrT,EAAoB,IACvEwrT,EAA6CxrT,EAAoB,IACjEyrT,EAAwDzrT,EAAoB,KAEjG6e,GADqF7e,EAAoB8d,EAAE2tS,GAC7F3lT,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,IAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IihB3gtEzG4rS,EAAA,WjhBshtEG,QihBrhtEQA,GAAIv/H,EAAal5B,EAAAw7B,EAAA1vJ,EAAA63K,GACjBxwM,KAAA+lL,OACA/lL,KAAA6sJ,OACA7sJ,KAAAqoL,YACAroL,KAAA24B,SAA2B34B,KAAAwwM,ajhBwhtEnC80G,EihBthtEHhpT,UAMCwc,OAAA,SAAA2d,EAAA3qB,GALA,GAAIzI,GAAOrD,IjhBwhtEL,OihBvhtEN8L,GAAY,MAALA,EAAS,KAAA+S,KAAAE,UAAAjT,GACd9L,KAAK6sJ,KACL0xB,KAAIv+K,KAAA4lT,UAAcnvR,GAAK3qB,EAAA9L,KAAKyT,QAAS3H,IACrCvP,IAAA,SAAM4lE,GAAiB,MAAA9+D,GAAKqpC,SAAAy1B,KAC9Bx8B,MAAA,SAAA1oC,GAAA,MAAAoG,GAAA62B,YAAAj9B,MjhBwhtEEqoT,EihBthtEHhpT,UAMCuE,OAAA,SAAA41B,EAAA3qB,GALA,GAAIzI,GAAOrD,IjhBwhtEL,OihBvhtEN8L,GAAY,MAALA,EAAS,KAAA+S,KAAAE,UAAAjT,GACd9L,KAAI6sJ,KACJg5J,IAAI7lT,KAAA4lT,UAAcnvR,GAAK3qB,EAAA9L,KAAKyT,QAAS3H,IACrCvP,IAAA,SAAM4lE,GAAiB,MAAA9+D,GAAKqpC,SAAAy1B,KAC9Bx8B,MAAA,SAAA1oC,GAAA,MAAAoG,GAAA62B,YAAAj9B,MjhBwhtEEqoT,EihBthtEHhpT,UAuBC0V,KAAA,SAAAykB,EAAAxuB,GAtBA,GAAI5E,GAAMrD,KACN4rE,IjhBuhtEE,IihBthtEA,MAAL3jE,EjhBuhtES,IihBthtER,GAAAgR,KAAYhR,GACV2jE,EAAU50D,KAAKiC,EAAA,IAAAhR,EAAAgR,GACnB,IAAGo0K,GAAO,IjhBuhtEJ,IihBrhtEU,GAAfzhH,EAAOvtE,OACPgvL,EAAArtL,KAAA4lT,UAAAnvR,OAEA,KAA0B,GAAtBA,EAAK34B,QAAO,KAAW,CAC3B,GAAI4tE,GAAAj1C,EAAAoN,MAAkB,KAClBiiR,EAAgCp6O,EAAM,GACtCq6O,EAA6C,IAAhBr6O,EAAA,GAAsBA,EAAC,GAAQ7nC,MAAA,QAChEmiR,EAAeD,EAAUv6R,OAAeogD,EACxCyhH,GAAArtL,KAAA4lT,UAAAE,GAAAE,EAAA3nT,OAAA,MAAA2nT,EAAAhiR,KAAA,cAGAqpJ,GAAArtL,KAAA4lT,UAAAnvR,EAAA,IAAAm1C,EAAA5nC,KAAA,KjhBuhtEK,OihBrhtEJhkC,MAAI6sJ,KAAA7qJ,IAACqrL,EAAkBrtL,KAAAyT,WACvBlX,IAAA,SAAM4lE,GAAiB,MAAA9+D,GAAKqpC,SAAAy1B,KAC9Bx8B,MAAA,SAAA1oC,GAAA,MAAAoG,GAAA62B,YAAAj9B,MjhBuhtEEqoT,EihBrhtEHhpT,UAKCqmK,OAAA,SAAAlsI,GAJA,GAAApzB,GAAYrD,IjhBshtEN,OihBrhtEJA,MAAO6sJ,KACP8V,OAAI3iK,KAAA4lT,UAAmBnvR,GAAAz2B,KAAIyT,WAC3BlX,IAAA,SAAM4lE,GAAiB,MAAA9+D,GAAKqpC,SAAAy1B,KAC9Bx8B,MAAA,SAAA1oC,GAAA,MAAAoG,GAAA62B,YAAAj9B,MjhBuhtEEqoT,EihBphtEKhpT,UAAKspT,UAAe,SAAKnvR,GAChC,MAAAz2B,MAAAwwM,WAAAv9J,IAAAxc,IjhBshtEE6uR,EihBlhtEShpT,UAAAowC,SAAA,SAAAA,GACX,GAAItzB,EjhBmhtEE,KihBnhtEsBA,EAAAszB,EAAAogH,OjhBshtEtB,MihBrhtEL7vJ,GjhBshtES,IihBthtEmBmc,EAAAszB,EAAAt2B,OjhByhtEnB,MihBxhtERnZ,GACAsrC,QAAIu8D,KAAS,0BAAAp4D,GACbtzB,EAAAszB,GAGF,MAAAtzB,IjhB0htEEksS,EihBxhtEehpT,UAAAmX,QAAA,SAAS3H,EAAA4qB,OAAE,KAAA5qB,MAAA,QACR,KAAhB4qB,IAAyBA,EAAM,mBACnC,IAAElD,IAAQ1nB,KAAMA,EAACioC,QAAU,GAAAwxQ,GAAa,EAIxC,OAHA/xR,GAAEugB,QAAQm6H,OAAO,SAAAx3I,GACjBlD,EAAEugB,QAAQm6H,OAAO,eAAex3I,GAChClD,EAAAugB,QAASm6H,OAAA,cAAAluK,KAAA+lL,MAAA/lL,KAAA+lL,KAAAlqK,MAAA7b,KAAA+lL,KAAAlqK,MAAA,IACT2X,GjhB2htEE8xR,EihBxhtEEhpT,UAAY49B,YAAS,SAAAvb,GACd,KAAVA,EAAKhK,SACL3U,KAAA+lL,KAAQ7gH,YAAKllE,KAAA24B,OAAAlC,IACb8R,QAAKu8D,KAAO,wCAAoB9kG,KAAA+lL,KAAA7gH,aAChCllE,KAAA24B,OAAAgC,UAAA,UAID,IAAIsrR,EjhBuhtEE,KihBrhtELA,EAAAtnS,EAAAmuI,OjhBwhtEK,MihBvhtEL7vJ,GACAgpT,EAAAtnS,EAeD,MAAAwmI,GAAA,WAAAe,MAAA+/J,GA7GW,IAAAxpS,GAAAC,EAAUC,EAAAC,EAAAC,CA8GtB,OjhB4gtEGyoS,GihB3ntEHvsS,GjhB4ntEOre,OAAOid,EihBxntEG,cAHL6B,EA8GZ,wCAAAiD,MAAA,KAAA+oS,EAAA,GAAAA,EAAA,IAAA/oS,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAA6oS,EAAA,GAAAA,EAAA,IAAA7oS,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA8oS,EAAA,GAAAA,EAAA,IAAA9oS,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAhF,EAAA,GAAAA,EAAA,IAAAgF,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA6oS,EAAA,GAAAA,EAAA,IAAA7oS,GAAAniB,UAAD4qT,OjhBuhtEM59Q,GACA,SAAU/1C,EAAQC,EAASsI,GkhBpptEpB,YAKbQ,QAAAI,eAASlJ,EAAQ,cAAgBmJ,OAAA,IAHjC,SAAAO,GACA,OAAAC,KAAAD,GAAA1J,EAAA4J,eAAAD,KAAA3J,EAAA2J,GAAAD,EAAAC,KAGArB,EAAA,QlhB2ptEM4tC,GACA,SAAUn2C,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOisT,IAC9E,IAAIvuS,GAA8Czd,EAAoB,GAClEisT,EAA8CjsT,EAAoB,GAClEmoT,EAAgDnoT,EAAoB,GACpEksT,EAA6ClsT,EAAoB,IACjEsrT,EAA8CtrT,EAAoB,IAClEurT,EAAmDvrT,EAAoB,IACvEwrT,EAA6CxrT,EAAoB,IACtFqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,ImhBjrtEtEwsS,EAAA,SAAAtsS,GnhB4rtEhC,QmhB1rtEHssS,GAGCngI,EAAAl5B,EAAMw7B,EAAY1vJ,EAASlC,GAHN,GAAApzB,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IAItC,OAJkDqD,GAAA0iL,OACxC1iL,EAAAwpJ,OAAuCxpJ,EAAAglL,YACvChlL,EAAAs1B,OAAGA,EnhB8rtEPt1B,EAAMozB,IAAMA,EmhB5rtElBpzB,EAJDkV,EAAA2tS,EAAsBtsS,GnhBmstEnBssS,EmhB5rtEK5pT,UAAA66S,YAAU,WACjB,MAAAv9R,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,anhB8rtEEkmT,EmhB3rtEE5pT,UAAc4sL,sBAAwB,SAAA5qK,EAAA+nS,GnhB4rtEpC,MmhB3rtELA,IAAOA,EAAU,EACjBzsS,EAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,8BAAA+nS,GAEAzsS,EAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,cnhB+rtEC4nS,EmhBxrtES5pT,UAAEgqT,+BAA+B,SAAahoS,EAAkBioS,EAAGlkO,GAC9E,GAAAv2E,IAAO06S,eAAMD,EAAOE,YAAcpkO,EAClC,OAAAzoE,GAAAtd,UAAAuE,OAAArE,KAAAwD,KAAA,YAAAse,EAAA,gBAAAxS,GA1BW,IAAA2Q,GAAAC,EAAAC,EAAcC,EAAAC,CAAS,OnhBqttEhCqpS,GmhBtttEHntS,GnhButtEOre,OAAOid,EmhBpttEc,cAFhB6B,EAAA,qBA2BZ,mBAAAiD,MAAA,KAAA+oS,EAAA,GAAAA,EAAA,IAAA/oS,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAypS,EAAA,GAAAA,EAAA,IAAAzpS,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAA8oS,EAAA,GAAAA,EAAA,IAAA9oS,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAylS,EAAA,GAAAA,EAAA,IAAAzlS,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA6oS,EAAA,GAAAA,EAAA,IAAA7oS,GAAAniB,UAADwrT,IA3B2BE,EAAA,InhBgutErBl3Q,GACA,SAAUv9C,EAAQsI,EAAqBC,GohB3utE7C,YAAAA,GAAAE,EAAAH,EAAA,qBAAAysT,IphB+utEA,IohB/utEAA,GAAA,WAuBA,QAACA,MAAA,MphB2ttEGA,GohB/utEEjnH,aAA0B,SAAApsI,EAAA3kD,GphBivtExB,IohB/utEN,GAAAogD,GAAWpgD,EACF,MAARogD,GAAa,CphB+utEJ,GohB9utERA,IAAOuE,EACP,QAEAvE,KAAA/xD,WAGF,UphBivtEE2pT,EohB9utEEhnH,gBAAe,SAAAp7J,GACb,MAALA,IACCA,EAAMmjM,kBACPnjM,EAAMuxE,iBACNvxE,EAAMojM,2BACNpjM,EAAAo7J,oBAEFgnH,MphBsvtEK9oR,EACA,SAAUjsC,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAO0sT,IAC9E,IAAIhvS,GAA8Czd,EAAoB,GAClEisT,EAA8CjsT,EAAoB,GAClEmoT,EAAgDnoT,EAAoB,GACpE0sT,EAAqD1sT,EAAoB,KAEzE2sT,GAD6D3sT,EAAoB8d,EAAE4uS,GACtC1sT,EAAoB,KAEjE4sT,GADqD5sT,EAAoB8d,EAAE6uS,GAC9B3sT,EAAoB,KACjE6sT,EAA8C7sT,EAAoB,IAClE8sT,EAAmD9sT,EAAoB,IACvE+sT,EAA6C/sT,EAAoB,IACjEgtT,EAAuChtT,EAAoB,IAC3DitT,EAA+CjtT,EAAoB8d,EAAEkvS,GAC1F3uS,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IqhBhytEzEitS,EAAA,SAAA/sS,GrhB8ytE7B,QqhBxxtEH+sS,GAMChuR,EAAAotJ,EAAMl5B,EAAMw7B,EAAM5xJ,GALR,GAAApzB,GAAMuW,EAANpd,KAAcwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IACdqD,GAAAs1B,SACAt1B,EAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,UAAeA,EAT1BhlL,EAAAozB,MAaCpzB,EAAIo5S,gBAAU,GAAAmK,GAAwB,mBACtC,IAAIjmS,GAASwmS,MAAwCvlS,QAAA,OACrDlB,EAAKC,EAAkBgB,QAAGM,SAAA,UAI1B,OrhBmxtEM5e,GqhBtxtEL+jT,oBACAC,YAAW3mS,EAAYqwL,OACtBu2G,UAAA3mS,EAAAowL,QACF1tM,EAfDkV,EAAAouS,EACW/sS,GrhBuytER+sS,EqhBvxtEHrqT,UAWC0F,IAAA,WAVA,GAAIqB,GAACrD,IAUL,OATAA,MAAAyqL,cAAU,GAAAo8H,GACc,QrhBuxtElBjtS,EqhBtxtEJtd,UAAK0V,KAAAxV,KAAAwD,KAAsB,QAAS2a,UAAC,SAAA+xB,GACrCrpC,EAAKkkT,sBAAqB76Q,GAC1BrpC,EAAKmkT,wBAENnkT,EAAAonL,cAAW7uG,KAAAlvC,IAEZ,SAAY/tB,GAAA,MAActb,GAAAonL,cAAe9rK,UAAA,iBAAAtb,GAAAonL,cAAA/7B,aACzC1uJ,KAAAyqL,cAAA3zD,gBrhBsxtEE6vL,EqhBpxtEHrqT,UAKC0I,QAAA,WAJA,GAAA3B,GAAArD,IAIA4Z,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,QAAA2a,UAAA,SAAA+xB,GAAA,MAAArpC,GAAAkkT,sBAAA76Q,IAAA,SAAA/tB,GAAA,MAAAtb,GAAAonL,cAAA9rK,UAAA,iBAAAtb,GAAAmkT,2BrhBmxtEEb,EqhBjxtEHrqT,UAWC4wL,WAAA,SAAAjlL,GAVA,GAAI5E,GAACrD,IAUL,OATAA,MAAAyqL,cAAM,GAAMo8H,GACY,QrhBixtElBjtS,EqhBhxtEJtd,UAAKuE,OAAArE,KAAAwD,KAAsB,OAAUiI,GAAA0S,UAAA,SAAA+xB,GACrCrpC,EAAKkkT,sBAAqB76Q,GAC1BrpC,EAAKmkT,wBAENnkT,EAAAonL,cAAW7uG,KAAAlvC,IAEZ,SAAY/tB,GAAA,MAActb,GAAAonL,cAAe9rK,UAAA,iBAAAtb,GAAAonL,cAAA/7B,aACzC1uJ,KAAAyqL,cAAA3zD,gBrhBgxtEE6vL,EqhB7wtEGrqT,UAAak5D,MAAA,WAClBx1D,KAAKojF,MAAA,KACLpjF,KAAK2tL,UAAW,KAChB3tL,KAAK4tL,SAAS,KACd5tL,KAAKse,UAAA,KACLte,KAAKuzN,mBAAe,KACpBvzN,KAAKynT,QAAQ,KACbznT,KAAK+4B,SAAA,KACL/4B,KAAK48S,aAAA,KACL58S,KAAK0nT,mBAAqB,KAC1B1nT,KAAAwnT,yBrhB+wtEEb,EqhB5wtEMrqT,UAAS+hR,cAAiB,WrhB6wtE5B,QqhB5wtEQ,MAAbr+Q,KAAA+4B,UAAa/4B,KAAA+4B,SAAA16B,OAAA,IAEd2B,KAAA+4B,SAAA,GAAA2jQ,iBrhB8wtEEiqB,EqhB3wtEGrqT,UAAYirT,sBAAa,SAAmBI,GrhBsxtE3C,GqhBrxtEN3nT,KAAKse,UAAAqpS,EAAqBC,gBAAa/0S,GACvC7S,KAAKuzN,mBAAqBo0F,EAAMC,gBAAA7nC,WAChC//Q,KAAKojF,MAAAukO,EAAYvkO,MACjBpjF,KAAK2tL,UAAWg6H,EAAa/6H,WAC7B5sL,KAAK4tL,SAAU+5H,EAAa76H,UAC5B9sL,KAAKynT,QAAQE,EAAeE,mBAC5B7nT,KAAK+4B,SAAA4uR,EAAeC,gBAAa7uR,SACjC/4B,KAAK48S,aAAA+K,EAAmBC,gBAAaE,cACrC9nT,KAAKgtL,iBAAA26H,EAAwB56H,oBAI7B/sL,KAAG8tL,sBAAmB65H,EAAA16H,yBACrBjtL,KAAK48S,aAAA,CACL58S,KAAa0nT,qBrhBywtEJ,KqhBzwtEL,GAAKzuR,GAAA,EAAAxc,EAAAzc,KAAA48S,aAAA3jR,EAAAxc,EAAApe,OAAA46B,IAAA,CACR,GAAIxf,GAACgD,EAAAwc,EACLj5B,MAAA0nT,mBAAAjuS,IAAA,KrhB6wtEAktS,EqhBxwtEGrqT,UAAAkrT,sBAA2B,WAChCxnT,KAAAy8S,gBAAA7gO,MAAA,IrhB0wtEE+qO,EqhBvwtEKrqT,UAAWo5M,sBAAE,WACpB,OAAAh1L,UAAAymS,EAAArkS,EAAAiuL,KAAA/wM,KAAAonT,mBAAAC,aAAA1mS,QAAAwmS,EAAArkS,EAAAiuL,KAAA/wM,KAAAonT,mBAAAE,arhBywtEEX,EqhBtwtEGrqT,UAAA65M,sBAAiC,SAAcz1L,EAAGC,GACvD3gB,KAAKonT,mBAAmBC,YAAY3mS,EAAYqwL,OAChD/wM,KAAAonT,mBAAAE,UAAA3mS,EAAAowL,QrhBwwtEE41G,EqhBrwtEKrqT,UAAWmvQ,0BAA0B,WAC5C,OAAA/qP,UAAA1gB,KAAAonT,mBAAAC,YAAA1mS,QAAA3gB,KAAAonT,mBAAAE,YrhBuwtEEX,EqhBpwtEGrqT,UAAAkvQ,0BAAiC,SAAU9qP,EAAAC,GAChD3gB,KAAKonT,mBAAmBC,YAAY3mS,EACpC1gB,KAAAonT,mBAAAE,UAAA3mS,GrhBswtEEgmS,EqhBnwtEErqT,UAAK21M,wBAAoB,WrhBowtEvB,QqhBnwtELjyM,KAAA0nT,oBAGD,cAAA1nT,MAAA0nT,oBrhBqwtEEf,EqhBlwtEErqT,UAAKyrT,oBAAoB,WrhBmwtEvB,QqhBlwtEL/nT,KAAA0nT,oBAGD,QAAA1nT,MAAA0nT,oBrhBowtEEf,EqhBjwtEErqT,UAAK0rT,qBAAoB,WrhBkwtEvB,QqhBjwtELhoT,KAAA0nT,oBAGD,SAAA1nT,MAAA0nT,oBrhBmwtEEf,EqhBhwtEErqT,UAAK2rT,mBAAoB,WrhBiwtEvB,QqhBhwtELjoT,KAAA0nT,oBAGD,OAAA1nT,MAAA0nT,oBrhBkwtEEf,EqhB/vtEErqT,UAAK4rT,mBAAoB,WrhBgwtEvB,QqhB/vtELloT,KAAA0nT,oBAGD,OAAA1nT,MAAA0nT,mBAxKW,IAAAjrS,GAAAC,EAAWC,EAAAC,EAAAC,CAAS,OrhB06tE7B8pS,GqhB36tEH5tS,GrhB46tEOre,OAAOid,EqhBp5tEK,cAvBP6B,EAyKZ,wCAAAiD,MAAA,KAAA4lS,EAAA,GAAAA,EAAA,IAAA5lS,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAqqS,EAAA,GAAAA,EAAA,IAAArqS,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAwpS,EAAA,GAAAA,EAAA,IAAAxpS,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAoqS,EAAA,GAAAA,EAAA,IAAApqS,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAoqS,EAAA,GAAAA,EAAA,IAAApqS,GAAAniB,UAADisT,IAzKwBG,EAAA,IrhBq7tElBvsQ,GACA,SAAU5oD,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOkuT,IAC9E,IAAIxwS,GAA8Czd,EAAoB,GAClEisT,EAA8CjsT,EAAoB,GAClEmoT,EAAgDnoT,EAAoB,GACpEupT,EAA8CvpT,EAAoB,IAClEkuT,EAAmDluT,EAAoB,IACvE4sT,EAA6C5sT,EAAoB,IACjEwrT,EAA6CxrT,EAAoB,IACtFqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IshBv9tErEyuS,EAAA,SAAAvuS,GthBk+tEjC,QshBh+tEAuuS,GAMIpiI,EAAAl5B,EAAMw7B,EAAY1vJ,EAASlC,GALjB,GAAApzB,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IAM9B,OALaqD,GAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,YACAhlL,EAAAs1B,OAAGA,EthBi+tEbt1B,EAAMozB,IAAMA,EshB/9tEfpzB,EAPDkV,EAAA4vS,EACcvuS,GthBw+tEduuS,EshB99tEW7rT,UAAA2tL,uBAAW,SAAc3rK,GACnC,MAAA1E,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,0BthBg+tED6pS,EshB79tEW7rT,UAAAgxG,kBAAW,SAAWhvF,GAChC,MAAA1E,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,qBthB+9tED6pS,EshB59tEW7rT,UAAAiiB,cAAY,SAACD,EAAcE,GACrC,MAAA5E,GAAAtd,UAAAuE,OAAArE,KAAAwD,KAAA,YAAAse,EAAA,aAAAE,EAAA3L,GAAA2L,IthB89tED2pS,EshB39tEW7rT,UAAA+rT,oBAAa,SAAW/pS,EAAYxS,GAC9C,MAAA8N,GAAAtd,UAAAuE,OAAArE,KAAAwD,KAAA,YAAAse,EAAA,mBAAAxS,IthB69tEDq8S,EshB19tEW7rT,UAAAqqF,oBAAa,SAAWroE,EAAYizD,GAC9C,MAAA33D,GAAAtd,UAAAqmK,OAAAnmK,KAAAwD,KAAA,YAAAse,EAAA,oBAAAizD,IthB49tED42O,EshBz9tEW7rT,UAAAk+S,wBAAW,SAAcl8R,GACnC,MAAA1E,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,oBAlCQ,IAAA7B,GAAAC,EAAAC,EAAeC,EAAAC,CAAS,OthB8/tEjCsrS,GshB//tEHpvS,GthBgguEOre,OAAOid,EshB5/tES,cAHX6B,EAAA,qBAmCZ,mBAAAiD,MAAA,KAAAgnS,EAAA,GAAAA,EAAA,IAAAhnS,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAypS,EAAA,GAAAA,EAAA,IAAAzpS,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAyrS,EAAA,GAAAA,EAAA,IAAAzrS,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAylS,EAAA,GAAAA,EAAA,IAAAzlS,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA6oS,EAAA,GAAAA,EAAA,IAAA7oS,GAAAniB,UAADytT,IAnC4BrB,EAAA,IthByguEtBtsQ,GACA,SAAU7oD,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOquT,IAE9E,IuhB3+tErBC,GvhB2+tEyB5wS,EAA8Czd,EAAoB,GAClEisT,EAA8CjsT,EAAoB,GAClEmoT,EAAgDnoT,EAAoB,GACpEupT,EAA8CvpT,EAAoB,IAClEkuT,EAAmDluT,EAAoB,IACvE4sT,EAA6C5sT,EAAoB,IACjEwrT,EAA6CxrT,EAAoB,IACtFqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IuhBviuEjE4uS,EAAA,SAAA1uS,GvhBkjuErC,QuhBhjuEA0uS,GAMIviI,EAAMl5B,EAAMw7B,EAAM1vJ,EAAWlC,GALnB,GAAApzB,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IAM9B,OALaqD,GAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,YACAhlL,EAAAs1B,OAAGA,EvhBijuEbt1B,EAAMozB,IAAMA,EuhB/iuEfpzB,EAPDkV,EAAA+vS,EACc1uS,GvhBwjuEd0uS,EuhB9iuEWhsT,UAAM+9B,sBAAK,SAAc/b,GACnC,MAAA1E,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,yBvhBgjuEDgqS,EuhB7iuEWhsT,UAAMi+S,qBAAK,SAAcj8R,EAAYgc,GAC/C,MAAA1gB,GAAAtd,UAAA0V,KAAAxV,KAAAwD,KAAA,YAAAse,EAAA,wBAAAgc,IvhB+iuEDguR,EuhB5iuEiDhsT,UAAYo+B,wBAAW,SAAApc,EAAAob,GACpE,GAAA5tB,IAAOqtB,aAAMO,EAChB,OAAA9f,GAAAtd,UAAAwc,OAAAtc,KAAAwD,KAAA,YAAAse,EAAA,uBAAAxS,IvhB8iuEDw8S,EuhB1iuEWhsT,UAAM09S,wBAAO,SAAc17R,EAAYgc,EAA0BxuB,GAC3E,MAAA8N,GAAAtd,UAAAuE,OAAArE,KAAAwD,KAAA,YAAAse,EAAA,wBAAAgc,EAAAxuB,IvhB4iuEDw8S,EuhBziuEiBhsT,UAAYu+B,wBAAG,SAAAvc,EAAAgc,GAC5B,GAAAxuB,IAAOi2K,QAAA,EACV,OAAAnoK,GAAAtd,UAAAuE,OAAArE,KAAAwD,KAAA,YAAAse,EAAA,wBAAAgc,EAAAxuB,GAjCQ,IAAA2Q,GAAAC,EAAAC,EAAAC,EAAmBC,CAAS,OvhB6kuErCyrS,GuhB9kuEHvvS,GvhB+kuEOre,OAAOid,EuhB3kuES,cAHX6B,EAAA,qBAkCZ,mBAAAiD,MAAA,KAAAgnS,EAAA,GAAAA,EAAA,IAAAhnS,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAypS,EAAA,GAAAA,EAAA,IAAAzpS,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAyrS,EAAA,GAAAA,EAAA,IAAAzrS,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAylS,EAAA,GAAAA,EAAA,IAAAzlS,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAA6oS,EAAA,GAAAA,EAAA,IAAA7oS,GAAAniB,UAAD4tT,IAlCgCxB,EAAA,IvhBqluEhC,SuhBhjuEIyB,GACAA,IAAA,eACAA,IAAA,uDACAA,IAAA,6BAAgB,wBAChBA,IAAA,0BACAA,IAAA,gBACAA,IAAA,2CACAA,IAAA,mDARQA,EAAoBA,EAApB,qBASX,yBvhBijuEEA,IAAyBA,QAKtB1pQ,GACA,SAAUltD,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOuuT,IAC9E,IAAI7wS,GAA8Czd,EAAoB,GAClEisT,EAA8CjsT,EAAoB,GAClEmoT,EAAgDnoT,EAAoB,GACpEuuT,EAA6CvuT,EAAoB,IAEjEwuT,GADqDxuT,EAAoB8d,EAAEywS,GAC9BvuT,EAAoB,KACjEyuT,EAA8CzuT,EAAoB,IAClE0uT,EAAmD1uT,EAAoB,IACvE2uT,EAA6C3uT,EAAoB,IACtFqe,EAAavY,MAAQA,KAAKuY,WAAc,WACxC,GAAIC,GAAgB9d,OAAO+d,iBACpBC,uBAA2Brc,QAAS,SAAUjC,EAAGue,GAAKve,EAAEse,UAAYC,IACvE,SAAUve,EAAGue,GAAK,IAAK,GAAIpd,KAAKod,GAAOA,EAAEnd,eAAeD,KAAInB,EAAEmB,GAAKod,EAAEpd,IACzE,OAAO,UAAUnB,EAAGue,GAEhB,QAASC,KAAO5Y,KAAK6Y,YAAcze,EADnCoe,EAAcpe,EAAGue,GAEjBve,EAAEkC,UAAkB,OAANqc,EAAaje,OAAOoe,OAAOH,IAAMC,EAAGtc,UAAYqc,EAAErc,UAAW,GAAIsc,QAGnFG,EAAc/Y,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,GAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,IwhBnouEtE8uS,EAAA,SAAA5uS,GxhB+ouEhC,QwhB1ouEH4uS,GAMCziI,EAAAl5B,EAAMw7B,EAAY1vJ,EAASlC,GALjB,GAAApzB,GAAIuW,EAAapd,KAAAwD,KAAA+lL,EAAAl5B,EAAAw7B,EAAA1vJ,EAAAlC,IAAAz2B,IAM3B,OALUqD,GAAA0iL,OACA1iL,EAAAwpJ,OACAxpJ,EAAAglL,YACAhlL,EAAAs1B,OAAGA,ExhB2ouEPt1B,EAAMozB,IAAMA,EwhBzouElBpzB,EAPDkV,EAAAiwS,EACW5uS,GxhBkpuER4uS,EwhB1ouEHlsT,UAUC0F,IAAA,SAAAsc,GATA,GAAIjb,GAACrD,IASL,OARAA,MAAAyqL,cAAU,GAAAg+H,GACT,QxhB0ouEK7uS,EwhBzouEJtd,UAAY0V,KAAGxV,KAAAwD,KAAS,YAAAse,GAAA3D,UAAA,SAAA+xB,GACxBrpC,EAAKuX,QAAA8xB,EAENrpC,EAAAonL,cAAW7uG,KAAAlvC,IAEZ,SAAY/tB,GAAA,MAActb,GAAAonL,cAAe9rK,UAAA,iBAAAtb,GAAAonL,cAAA/7B,aACzC1uJ,KAAAyqL,cAAA3zD,gBxhByouEE0xL,EwhBvouEHlsT,UAYCmxL,cAAA,SAAAnvK,EAAAwqS,GAXA,GAAIzlT,GAACrD,IAWL,OAVAA,MAAAyqL,cAAM,GAAMg+H,GAAuC,QxhBwouE7C7uS,EwhBvouEJtd,UACDuE,OAAArE,KAACwD,KAAwB,YAAAse,EAAA,WAAAwqS,GACxBnuS,UAAS,SAAW+xB,GACN,MAAbrpC,EAAKuX,UACNvX,EAAKuX,QAAAuf,QAAmBuS,GAEzBrpC,EAAAonL,cAAW7uG,KAAAlvC,IAEZ,SAAY/tB,GAAA,MAActb,GAAAonL,cAAe9rK,UAAA,iBAAAtb,GAAAonL,cAAA/7B,aACzC1uJ,KAAAyqL,cAAA3zD,gBxhBsouEE0xL,EwhBnouEGlsT,UAAek5D,MAAA,WACpBx1D,KAAA4a,QAAA,MxhBqouEE4tS,EwhBlouEOlsT,UAAWysT,iCAAoC,WxhBmouElD,SwhBlouEL/oT,KAAA4a,SAAY5a,KAAA4a,QAAAuf,SAAAn6B,KAAA4a,QAAAuf,QAAAC,exhBsouEX1/B,OAAOI,ewhBlouEV0tT,EAAAlsT,UAAA,exhBmouEO0F,IwhB9nuEN,WxhB+nuEU,MwhB9nuEThC,MAAA4a,QAAYuf,SAAQn6B,KAAQ4a,QAAAuf,QAAaC,aACjCp6B,KAAK4a,QAAQuf,QAASC,aAC9Bp6B,KAAO4a,QAAKouS,OAAchpT,KAAA4a,QAAAouS,MAAmBnB,mBACnC7nT,KAAC4a,QAAAouS,MAAAnB,mBACZ,MxhBgouEMplT,YAAY,EwhBhouElBC,cAAA,GA5DW,IAAA+Z,GAAAC,EAAAC,EAAcC,EAAAC,CAAS,OxhBgsuEhC2rS,GwhBjsuEHzvS,GxhBksuEOre,OAAOid,EwhB3ruEG,cANL6B,EAAA,qBA6DZ,mBAAAiD,MAAA,KAAAksS,EAAA,GAAAA,EAAA,IAAAlsS,GAAA/hB,OAAA,mBAAAgiB,MAAA,KAAAypS,EAAA,GAAAA,EAAA,IAAAzpS,GAAAhiB,OAAA,mBAAAiiB,MAAA,KAAAisS,EAAA,GAAAA,EAAA,IAAAjsS,GAAAjiB,OAAA,mBAAAkiB,MAAA,KAAAylS,EAAA,GAAAA,EAAA,IAAAzlS,GAAAliB,OAAA,mBAAAmiB,MAAA,KAAAgsS,EAAA,GAAAA,EAAA,IAAAhsS,GAAAniB,UAAD8tT,IA7D2BE,EAAA,IxhB2suErBxjQ,GACA,SAAUvzD,EAAQsI,EAAqBC,GyhBrtuE7C,YAAAA,GAAAE,EAAAH,EAAA,qBAAAgvT,IzhBytuEA,IyhBltuECA,GAAA,WAAe,QAACA,MAChB,MAAAA,OzhB2tuEKljQ,GACA,SAAUp0D,EAAQsI,EAAqBC,G0hBluuE7C,YAAAA,GAAAE,EAAAH,EAAA,qBAAAivT,KAAAhvT,EAAAE,EAAAH,EAAA,qBAAAkvT,KASCjvT,EAAAE,EAAAH,EAAA,qBAAAmvT,IATD,IAAAF,I1hByuuEA,S0hBxuuECA,GAEAA,EAAA,YACAA,EAAA,kBAEAA,EAAA,sBACAA,EAAA,4BACAA,EAAA,qBARWA,EAAA,SAAW,YAWvBA,IAAYA,MAAZ,IAAAC,I1hBuuuEA,S0hBtuuECA,GADWA,EAAA,SAIZA,IAECA,MAFD,IAAAC,I1hBuuuEA,S0hBtuuECA,GADWA,EAAA,2B1hByuuETA,IAAoBA,QAKjBnjQ,GACA,SAAUt0D,EAAQC,GAExBD,EAAOC,QAAU,oqTAIXitC,EACA,SAAUltC,EAAQsI,EAAqBC,G2hB3wuE7C;;;;;;;AAoSA,QAAAmvT,GAAAtuT,GAEA,aAAAA,GAAA,IAAAA,EAAAsD,OAgMA,QAAAirT,GAAA91R,GACA,aAAAA,EAMA,QAAA+1R,GAAqBnwS,GACrB,GAAU4nN,GAAAtmO,OAAAm7H,EAAa,eAAAz8G,GAAA1e,OAAA8uT,EAAA,aAAApwS,IACvB,KAAA1e,OAAAm7H,EAAA,kBAAAmrG,GACA,SAAAp6M,OAAA,sDAEA,OAAAo6M,GAOA,QAAAyoF,GAAAC,EAAA7rG,GACA,MAAAA,GAAAthN,IAAA,SAAAmd,GAAA,MAAAA,GAAAgwS,KAOA,QAAAC,GAAAD,EAAwC7rG,GACxC,MAAAA,GAAAthN,IAAA,SAAAmd,GAAA,MAAAA,GAAAgwS,KAMA,QAAAE,GAAqBC,GACrB,GAAA1nP,GAAA0nP,EAAAjsQ,OAAgD,SAAaukB,EAAEv3B,GAC1D,MAAI,OAAAA,EAAAlwC,OAAAusC,UAAA,EAAA2D,GAAA,MAET,YAAAlwC,OAAAusB,KAAAk7C,GAAA9jE,OAAA,KAAA8jE,EA0GA,QAAA2nP,KAEA,sBAAA9rR,MADAtjC,OAAAqvT,EAAA,KAAArvT,OAAAqvT,EAAA,KAAAzkQ,eAAA,IACA5yC;;;;;;;AA2HA,QAAAs3S,GAAAlzJ,GACA,SAAAt0G,SACA,SAAArpC,GAAA,SAAAqpC,SAAArpC,IAGA,EAOA,QAAA8wS,GAAAnzJ,GACA,SAAAt0G,SACA,SAAArpC,GAAA,SAAAqpC,SAAArpC,IAGA;;;;;;;AA6FA,QAAA+wS,KACA,SAAAtjS,OAAA,iBAiWA,QAAAujS,GAAAt3S,EAAA9X,GACA,aAAA8X,EACA,GAAA9X,GACAA,GAAA,gBAAAA,KACAA,EAAA,WACA8X,EAAA,KAAA9X,GAAA4C,MAAA,OAMA,QAAAysT,GAAAC,GACA,MAAAA,GAAAxmR,MAAA,QA0RA,QAAAymR,GAAAz3S,EAAA9X,GACA,aAAA8X,EACA,GAAA9X,GACA,gBAAAA,KACAA,EAAA,IAAAA,EAAA,KACAA,GAAA,gBAAAA,KACAA,EAAA,WACA8X,EAAA,KAAA9X,GAAA4C,MAAA,OAMA,QAAA4sT,GAAAF,GACA,MAAAA,GAAAxmR,MAAA;;;;;;;AAiSA,QAAA2mR,GAAAz3S,EAAAsgD,GACA,MAAAA,GAAA,KAAA7nC,QAAAzY,IAOA,QAAA03S,GAAAf,EAAAl4R,GACAk4R,GACAgB,EAAAl5R,EAAA,4BACAA,EAAAm5R,eACAD,EAAAl5R,EAAA,2CACAk4R,EAAA5yJ,UAAA8zJ,EAAA/8H,SAAA67H,EAAmE,UAAAl4R,EAAAslI,YACnE4yJ,EAAAmB,eAAAD,EAAAE,cAAkEpB,EAAA,eAAAl4R,EAAAq5R,iBAClEr5R,EAAA,cAAAyuL,WAAAypG,EAAA3uT,OAGAy2B,EAAA,cAAA0uL,iBAAA,SAAA37G,GACA/yE,EAAAu5R,kBAAAxmN,GACAmlN,EAAAsB,cACOtB,EAAAz0J,SAAc1wD,GAAA0mN,uBAAA,MAIrBz5R,EAAA,cAAA2uL,kBAAA,iBAAAupG,GAAAwB,kBACAxB,EAAAxpG,iBAAA,SAAA37G,EAAA4mN,GAGA35R,EAAA,cAAAyuL,WAAA17G,GAEA4mN,GACK35R,EAAAu5R,kBAAAxmN,KAEL/yE,EAAA,cAAA45R,kBACA1B,EAAA2B,yBAAA,SAAAhpG,GAAA7wL,EAAA,+BAAA6wL,KAGA7wL,EAAA85R,eAAAjuT,QAAA,SAAAy5J,GACA,EAAAy0J,2BACK,6CAAA7B,GAAA8B,6BAELh6R,EAAAi6R,oBAAApuT,QAAA,SAAAy5J,GACA,EAAAy0J,2BACK,6CAAA7B,GAAA8B,6BAQL,QAAAE,GAAAhC,EAAAl4R,GACAA,EAAA,cAAA0uL,iBAAA,WAAyD,MAAAyrG,GAAAn6R,KACzDA,EAAA,cAAA2uL,kBAAA,iBAAAwrG,GAAAn6R,KACAA,EAAA85R,eAAAjuT,QAAA,SAAAy5J,GACAA,EAAAy0J,2BACAz0J,EAAAy0J,0BAAA,QAGA/5R,EAAAi6R,oBAAApuT,QAAA,SAAAy5J,GACAA,EAAAy0J,2BACAz0J,EAAAy0J,0BAAA,QAGA7B,GACAA,EAAAkC,kBAOA,QAAAC,GAAAnC,EAAAl4R,GACA,MAAAk4R,GACAgB,EAAAl5R,EAAA,4BACAk4R,EAAA5yJ,UAAA8zJ,EAAA/8H,SAAA67H,EAAA5yJ,UAAAtlI,EAAAslI,YACA4yJ,EAAAmB,eAAAD,EAAAE,cAAApB,EAAAmB,eAAAr5R,EAAAq5R,iBAMA,QAAAc,GAAAn6R,GACA,MAAAk5R,GAAAl5R,EAAA,0EAOA,QAAAk5R,GAAqBl5R,EAAA1a,GACrB,GAAAg1S,EAUA,MARAA,GADAt6R,EAAA,KAAAnzB,OAAA,EACA,UAAAmzB,EAAA,KAAAwS,KAAA,YAEAxS,EAAA,QACA,UAAAA,EAAA0xB,KAAA,IAGA,6BAEA,GAAAt8B,OAAA9P,EAAA,IAAAg1S,GAMA,QAAAC,GAAAluG,GACA,aAAAA,EAAA+sG,EAAA/8H,QAAAgwB,EAAAthN,IAAAytT,IAAA,KAMA,QAAAgC,GAAAnuG,GACA,aAAAA,EAAA+sG,EAAAE,aAAAjtG,EAAAthN,IAAA0tT,IACA,KAOA,QAAAgC,GAAAxnT,EAAAynT,GACA,IAAAznT,EAAAjJ,eAAA,SACA,QACA,IAAAwF,GAAAyD,EAAA,KACA,SAAAzD,EAAA4nM,kBAEAluM,OAAAm7H,EAAA,oBAAAq2L,EAAAlrT,EAAA43L,cAcA,QAAAuzH,GAAAxB,GACA,MAAAyB,IAAAzwS,KAAA,SAAAmH,GAAA,MAAA6nS,GAAA9xS,cAAAiK,IAOA,QAAAupS,GAAA76R,EAAA86R,GACA,IAAAA,EACA,WACA,IAAqBC,OAAA1pT,GACA2pT,MAAA3pT,GACrB4pT,MAAA5pT,EAgBA,OAfAypT,GAAAjvT,QAAA,SAAAqc,GACAA,EAAAb,cAAA6zS,EACAH,EAAA7yS,EAEAyyS,EAAAzyS,IACA8yS,GACA9B,EAAAl5R,EAAA,mEACAg7R,EAAA9yS,IAGA+yS,GACA/B,EAAAl5R,EAAA,iEACAi7R,EAAA/yS,KAGA+yS,IAEAD,IAEAD,IAEA7B,EAAAl5R,EAAA,iDACA,QAoQA,QAAAm7R,GAAAjD,EAAAxmQ,EAAA0pQ,GACA,aAAA1pQ,EACA,MACAA,YAAA7mD,SACA6mD,EAAA,EAAArf,MAAA+oR,IAEA1pQ,YAAA7mD,QAAA,IAAA6mD,EAAA7kD,OACA,KACA,EAAAu/C,OAAA,SAAAlkC,EAAA3G,GACA,MAAA2G,aAAAmzS,IACAnzS,EAAAmzK,SAAA95K,IAAA,KAEA2G,YAAAozS,IACApzS,EAAAqzS,GAAA,SAEK,MACLrD,IAMA,QAAAsD,GAAAl2J,GACA,MAAAz6J,OAAAo/F,QAAAq7D,GAAAi1J,EAAAj1J,MAAA,KAMA,QAAAm2J,GAAApC,GACA,MAAAxuT,OAAAo/F,QAAAovN,GAAAmB,EAAAnB,GACAA,GAAA,KA4nFA,QAAA1pS,GAAA8wI,EAAqBl0J,GACrB,GAAA0H,GAAAwsJ,EAAAn0J,QAAAC,EACA0H,IAAA,GACAwsJ,EAAAxtH,OAAAh/B,EAAA,GAyPA,QAAAynT,GAAA75P,GACA,QAAAA,YAAA85P,KAAA95P,YAAA+5P,KACA/5P,YAAAg6P,KAzmKA3yT,OAAAI,eAAAb,EAAA,cAAAc,OAAA,IAAAb,EAAAE,EAAAH,EAAA,4CAAAqzT,KAAApzT,EAAAE,EAAAH,EAAA,8CAAAszT,MAAArzT,EAAAE,EAAAH,EAAA,gDAAAuzT,KAAAtzT,EAAAE,EAAAH,EAAA,oCAAAwzT,KAAAvzT,EAAAE,EAAAH,EAAA,qCAAAwqT,KAAAvqT,EAAAE,EAAAH,EAAA,2CAAAyzT,KAAAxzT,EAAAE,EAAAH,EAAA,wCAAAyyT,KAAAxyT,EAAAE,EAAAH,EAAA,6BAAA0zT,KAAAzzT,EAAAE,EAAAH,EAAA,mCAAA2zT,MAAA1zT,EAAAE,EAAAH,EAAA,wCAAA4zT,MAAA3zT,EAAAE,EAAAH,EAAA,0BAAA6zT,MAAA5zT,EAAAE,EAAAH,EAAA,2BAAA8zT,MAAA7zT,EAAAE,EAAAH,EAAA,gCAAA+zT,MAAA9zT,EAAAE,EAAAH,EAAA,6CAAAg0T,MAAA/zT,EAAAE,EAAAH,EAAA,wCAAAi0T,MAAAh0T,EAAAE,EAAAH,EAAA,mCAAAk0T,MAAAj0T,EAAAE,EAAAH,EAAA,sCAAAmzT,MAAAlzT,EAAAE,EAAAH,EAAA,iCAAAozT,MAAAnzT,EAAAE,EAAAH,EAAA,iCAAAkzT,MAAAjzT,EAAAE,EAAAH,EAAA,kCAAAm0T,MAAAl0T,EAAAE,EAAAH,EAAA,8CAAAo0T,MAAAn0T,EAAAE,EAAAH,EAAA,sDAAAq0T,MAAAp0T,EAAAE,EAAAH,EAAA,6CAAAs0T,MAAAr0T,EAAAE,EAAAH,EAAA,kCAAAu0T,MAAAt0T,EAAAE,EAAAH,EAAA,sCAAAw0T,MAAAv0T,EAAAE,EAAAH,EAAA,sCAAAy0T,MAAAx0T,EAAAE,EAAAH,EAAA,oCAAA00T,MAAAz0T,EAAAE,EAAAH,EAAA,qCAAA20T,MAAA10T,EAAAE,EAAAH,EAAA,+BAAA40T,MAAA30T,EAAAE,EAAAH,EAAA,mCAAA60T,MAAA50T,EAAAE,EAAAH,EAAA,6BAAA6yT,MAAA5yT,EAAAE,EAAAH,EAAA,+BAAA80T,MAAA70T,EAAAE,EAAAH,EAAA,6BAAA4yT,MAAA3yT,EAAAE,EAAAH,EAAA,uCAAA+0T,KAAA90T,EAAAE,EAAAH,EAAA,iCAAAg1T,KAAA/0T,EAAAE,EAAAH,EAAA,8BAAA2wT,KAAA1wT,EAAAE,EAAAH,EAAA,2BAAA40C,MAAA30C,EAAAE,EAAAH,EAAA,+BAAAi1T,MAAAh1T,EAAAE,EAAAH,EAAA,uCAAAk1T,MAAAj1T,EAAAE,EAAAH,EAAA,uBAAAm1T,MAAAl1T,EAAAE,EAAAH,EAAA,sBAAAo1T,MAAAn1T,EAAAE,EAAAH,EAAA,sBAAAq1T,MAAAp1T,EAAAE,EAAAH,EAAA,sBAAAs1T,MAAAr1T,EAAAE,EAAAH,EAAA,sBAAAu1T,KAAAt1T,EAAAE,EAAAH,EAAA,sBAAAw1T,KAAAv1T,EAAAE,EAAAH,EAAA,sBAAAy1T,MAAAx1T,EAAAE,EAAAH,EAAA,sBAAA01T,MAAAz1T,EAAAE,EAAAH,EAAA,sBAAA21T,MAAA11T,EAAAE,EAAAH,EAAA,sBAAA41T,MAAA31T,EAAAE,EAAAH,EAAA,sBAAA61T,MAAA51T,EAAAE,EAAAH,EAAA,uBAAA81T,MAAA71T,EAAAE,EAAAH,EAAA,uBAAA+1T,KAAA91T,EAAAE,EAAAH,EAAA,uBAAAg2T,KAAA/1T,EAAAE,EAAAH,EAAA,sBAAAi2T,MAAAh2T,EAAAE,EAAAH,EAAA,sBAAAk2T,MAAAj2T,EAAAE,EAAAH,EAAA,uBAAAm2T,MAAAl2T,EAAAE,EAAAH,EAAA,uBAAAo2T,MAAAn2T,EAAAE,EAAAH,EAAA,sBAAAq2T,MAAAp2T,EAAAE,EAAAH,EAAA,sBAAAs2T,MAAAr2T,EAAAE,EAAAH,EAAA,sBAAAu2T,MAAAt2T,EAAAE,EAAAH,EAAA,sBAAAw2T,MAAAv2T,EAAAE,EAAAH,EAAA,sBAAAy2T,MAAAx2T,EAAAE,EAAAH,EAAA,sBAAA02T,MAAAz2T,EAAAE,EAAAH,EAAA,sBAAA22T,MAAA12T,EAAAE,EAAAH,EAAA,sBAAA42T,MAAA32T,EAAAE,EAAAH,EAAA,sBAAA62T,MAAA52T,EAAAE,EAAAH,EAAA,sBAAA82T,MAAA72T,EAAAE,EAAAH,EAAA,sBAAA+2T,MAAA92T,EAAAE,EAAAH,EAAA,sBAAAg3T,MAAA/2T,EAAAE,EAAAH,EAAA,sBAAAi3T,MAAAh3T,EAAAE,EAAAH,EAAA,sBAAAk3T,KAAA,IAAAC,GAAAl3T,EAAA,IAAA27H,EAAA37H,EAAA,GAAAm3T,EAAAn3T,EAAA,IAAAsvT,GAAAtvT,EAAA8d,EAAAq5S,GAAAn3T,EAAA,MAAAo3T,GAAAp3T,EAAA8d,EAAAwxS,GAAAtvT,EAAA,MAAiC6vT,GAAjC7vT,EAAA8d,EAAAs5S,GAAiCp3T,EAAA,KA2BjCozT,EAAA,WACA,QAAAA,MAmNC,MA1MDA,GAAAhxT,UAAAotT,QAAA,aACAhvT,OAAAI,eAAAwyT,EAAAhxT,UAAA,SAKA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAA3uT,MAAA,MACA0H,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,SAQA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAArrS,MAAA,MACA5b,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,WAQA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAA6H,QAAA,MACA9uT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,WAQA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAA8H,QAAA,MACA/uT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,YASA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAArvP,SAAA,MACA53D,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,WAQA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAAvtQ,QAAA,MACA15C,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,UAMA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAA9+Q,OAAA,MACAnoC,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,YASA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAA+H,SAAA,MACAhvT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,SASA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAAroG,MAAA,MACA5+M,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,WAMA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAAgI,QAAA,MACAjvT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,aAMA0F,IAAA,iBAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAAiI,UAAA,MACAlvT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,iBAMA0F,IAAA,WACS,MAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAA37H,cAAA,MAETtrL,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,gBAMA0F,IAAA,WACS,MAAAhC,MAAA0pT,QAAA1pT,KAAA0pT,QAAAjgG,aAAA,MAEThnN,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAwyT,EAAAhxT,UAAA,QAOA0F,IAAA,wBACAS,YAAA,EACKC,cAAA,IAaL4qT,EAAAhxT,UAA+BusK,MAAA,SAAmB9tK,OAClD,KAAAA,UAAA8H,IACA7C,KAAA0pT,SACA1pT,KAAA0pT,QAAA7gJ,MAAA9tK,IAWAuyT,EAAAhxT,UAAA6/E,SAAA,SAAA2b,EAAA50C,GACA,QAAAljD,KAAA0pT,SAAA1pT,KAAA0pT,QAAAvtO,SAAA2b,EAAA50C,IAWAoqQ,EAAAhxT,UAAAs1T,SAAA,SAAA95N,EAAA50C,GACA,MAAAljD,MAAA0pT,QAAA1pT,KAAA0pT,QAAAkI,SAAA95N,EAAA50C,GAAA,MAECoqQ,KAiBGG,EAAA,SAAA7zS,GAEJ,QAAA6zS,KACA,cAAA7zS,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KAoBC,MAtBDoxT,GAAA,EAAA3D,EAAA7zS,GAIAlf,OAAAI,eAAA2yT,EAAAnxT,UAAA,iBAKA0F,IAAA,wBACAS,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA2yT,EAAAnxT,UAAA,QAKA0F,IAAA,wBACAS,YAAA,EACKC,cAAA,IAEJ+qT,GACDH,GAuBA2B,EAAA,GAAAp5L,GAAA,+BAWAm5L,EAA0B,GAAAn5L,GAAgD,oCAC1Eg8L,EAAA,+LAeAjH,EAAA,WACA,QAAAA,MAqJC,MA9IDA,GAAAnkT,IAAA,SAAAA,GACA,gBAAAijT,GACA,GAAAL,EAA4BK,EAAA3uT,QAAAsuT,EAAA5iT,GAC5B,WAEA,IAAA1L,GAAAuwB,WAAAo+R,EAAA3uT,MAGA,QAAAmN,MAAAnN,MAAA0L,cAAAw9L,OAAAylH,EAAA3uT,QAAA,OAQA6vT,EAAA5nT,IAAA,SAAAA,GACA,gBAAA0mT,GACA,GAAAL,EAA4BK,EAAA3uT,QAAAsuT,EAAArmT,GAC5B,WAEA,IAAAjI,GAAAuwB,WAAAo+R,EAAA3uT,MAGA,QAAAmN,MAAAnN,MAAAiI,cAAAihM,OAAAylH,EAAA3uT,QAAA,OAQA6vT,EAAAz7L,SAAA,SAAAu6L,GACA,MAAAL,GAAAK,EAAA3uT,QAAAo0H,UAAA,SAOAy7L,EAAAkH,aAAA,SAAApI,GACA,WAAAA,EAAA3uT,MAAA,MAAAo0H,UAAA,IAOAy7L,EAAAxnO,MAAA,SAAAsmO,GACA,MAAAmI,GAAA7zR,KAAA0rR,EAAA3uT,OAAA,MAAAqoF,OAAA,IAOAwnO,EAAAx5C,UAAA,SAAAA,GACA,gBAAAs4C,GACA,GAAAL,EAA4BK,EAAA3uT,OAC5B,WAEA,IAAAsD,GAAAqrT,EAAA3uT,MAAA2uT,EAAA3uT,MAAAsD,OAAA,CACA,OAAiBA,GAAA+yQ,GACjBz/M,WAAAogQ,eAAA3gD,EAAA4gD,aAAA3zT,IACA,OAQAusT,EAAAqH,UAAA,SAAAA,GACA,gBAAAvI,GACA,GAAArrT,GAAAqrT,EAAA3uT,MAAA2uT,EAAA3uT,MAAAsD,OAAA,CACA,OAAiBA,GAAA4zT,GACjBxgQ,WAAAsgQ,eAAAE,EAAAD,aAAA3zT,IACA,OAQAusT,EAAAvvN,QAAA,SAAAA,GACA,IAAAA,EACA,MAAAuvN,GAAyBsH,aACzB,IAAyB52J,GACzB62J,CASA,OARA,gBAAA92N,IACA82N,EAAA,IAAA92N,EAAA,IACAigE,EAAA,GAAApuF,QAAAilP,KAGAA,EAAA92N,EAAAx6E,WACAy6I,EAAAjgE,GAEA,SAAAquN,GACA,GAAAL,EAA4BK,EAAA3uT,OAC5B,WAEA,IAAAA,GAAA2uT,EAAA3uT,KACA,OAAiBugK,GAAAt9H,KAAajjC,GAAA,MAC9BsgG,SAAA+2N,gBAAAD,EAAAE,YAAAt3T,MAQA6vT,EAAAsH,cAAA,SAAA/4S,GAAA,aAKAyxS,EAAA/8H,QAAA,SAAAgwB,GACA,IAAAA,EACA,WACA,IAAAy0G,GAAAz0G,EAAAjgN,OAAA0rT,EACA,WAAAgJ,EAAAj0T,OACA,KACA,SAAAqrT,GACA,MAAAE,GAAAH,EAAAC,EAAA4I,MAOA1H,EAAAE,aAAA,SAAAjtG,GACA,IAAAA,EACA,WACA,IAAAy0G,GAAAz0G,EAAAjgN,OAAA0rT,EACA,WAAAgJ,EAAAj0T,OACA,KACA,SAAAqrT,GACA,GAAmB6I,GAAA5I,EAAAD,EAAS4I,GAAA/1T,IAAAgtT,EAC5B,OAAA+H,GAAA,IAAA90T,KAAA9B,OAAA22T,EAAA,UAAAkB,GAAA3I,KAGCgB,KA2DDnG,EAAA,GAAA5uL,GAAA,kCAQA25L,GACAz4J,QAAA0tJ,EACAztJ,YAAAt8J,OAAAm7H,EAAA,6BAAA23L,KACAv2J,OAAA,GAYAu2J,EAAA,WAKA,QAAAA,GAAA/qI,EAAA+vI,GACAxyT,KAAAyiL,YACAziL,KAAAwyT,cACAxyT,KAAA+mM,SAAA,SAAAxgJ,KACAvmD,KAAA+/M,UAAA,aA0BC,MApBDytG,GAAAlxT,UAAA2jN,WAAA,SAAAllN,GACAiF,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,UAAArJ,IAMAyyT,EAAAlxT,UAAA4jN,iBAAA,SAAAlyL,GAAAhuB,KAAA+mM,SAAA/4K,GAKAw/R,EAAAlxT,UAAA6jN,kBAAA,SAAAnyL,GAAAhuB,KAAA+/M,UAAA/xL,GAKAw/R,EAAAlxT,UAAA8uT,iBAAA,SAAA/oG,GACAriN,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,WAAAi+M,IAECmrG,IAEDA,GAAYh9S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAuB,wGACvBG,MAAA0hT,WAAA,kCAAAC,SAAA,eACa58S,WAAI05S,OAMjBhC,EAAYp8S,eAAA,mBACPX,KAAOolH,EAAA,YACVplH,KAAAolH,EAAA;;;;;;;AASF,GAAA45L,IACA14J,QAAA0tJ,EACAztJ,YAAAt8J,OAAAm7H,EAAA,6BAAA62L,KACAz1J,OAAA,GAeAy2J,EAAA,GAAA73L,GAAA,uCAYA62L,EAAA,WAMA,QAAAA,GAAAjqI,EAAA+vI,EAAAG,GACA3yT,KAAAyiL,YACAziL,KAAAwyT,cACAxyT,KAAA2yT,mBACA3yT,KAAA+mM,SAAA,SAAAxgJ,KACAvmD,KAAA+/M,UAAA,aAIA//M,KAAA4yT,YAAA,EACA,MAAA5yT,KAAA2yT,mBACA3yT,KAAA2yT,kBAAA7I,KAoDC,MA7CD4C,GAAyBpwT,UAAA2jN,WAAA,SAAAllN,GACzB,GAAAy+J,GAAA,MAAAz+J,EAAA,GAAAA,CACAiF,MAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,QAAAo1J,IAMAkzJ,EAAApwT,UAAA4jN,iBAAA,SAAAlyL,GAAAhuB,KAAA+mM,SAAA/4K,GAKA0+R,EAAApwT,UAAA6jN,kBAAA,SAAAnyL,GAAAhuB,KAAA+/M,UAAA/xL,GAKA0+R,EAAApwT,UAAA8uT,iBAAA,SAAA/oG,GACAriN,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,WAAAi+M,IAOAqqG,EAAApwT,UAAAu2T,aAAA,SAAA93T,KACAiF,KAAA2yT,kBAAA3yT,KAAA2yT,mBAAA3yT,KAAA4yT,aACA5yT,KAAA+mM,SAAAhsM,IAOA2xT,EAAApwT,UAAAw2T,kBAAA,WAAA9yT,KAAA4yT,YAAA,GAMAlG,EAAApwT,UAAAy2T,gBAAA,SAAAh4T,GACAiF,KAAA4yT,YAAA,EACA5yT,KAAA2yT,kBAAA3yT,KAAA+mM,SAAAhsM,IAEC2xT,IAEDA,GAAYl8S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,+MAIAG,MACAwpQ,UAAA,oCACAm4C,SAAA,cACAM,qBAAA,sBACiBC,mBAAA,wCAEJn9S,WAAI25S,OAMjB/C,EAAYt7S,eAAA,mBACPX,KAAOolH,EAAA,YACPplH,KAAAolH,EAAuC,aAC1CplH,SAAA5N,GAAA2N,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,OAAAllH,MAAA+8S;;;;;;;AAwCF,GAAAsC,IACAj5J,QAAA0tJ,EACAztJ,YAAAt8J,OAAAm7H,EAAA,6BAAAo6L,KACAh5J,OAAA,GAWAg5J,EAAA,WAKA,QAAAA,GAAAxtI,EAAA+vI,GACAxyT,KAAAyiL,YACAziL,KAAAwyT,cACAxyT,KAAA+mM,SAAA,SAAAxgJ,KACAvmD,KAAA+/M,UAAA,aA8BC,MAxBDkwG,GAAA3zT,UAAA2jN,WAAA,SAAAllN,GAEA,GAAAy+J,GAAA,MAAAz+J,EAAA,GAAAA,CACAiF,MAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,QAAAo1J,IAMAy2J,EAAA3zT,UAAA4jN,iBAA0C,SAAAlyL,GAC1ChuB,KAAA+mM,SAAA,SAAAhsM,GAAAizB,EAAA,IAAAjzB,EAAA,KAAAuwB,WAAAvwB,MAMAk1T,EAAA3zT,UAAA6jN,kBAAA,SAAAnyL,GAAAhuB,KAAA+/M,UAAA/xL,GAKAiiS,EAAA3zT,UAAA8uT,iBAAA,SAAA/oG,GACAriN,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,WAAAi+M,IAEC4tG,IAEDA,GAAYz/S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,kGACAG,MACA0hT,WAAA,gCACAl4C,UAAA,gCACiBm4C,SAAA,eAEJ58S,WAAIk6S,OAMjBC,EAAY7+S,eAAA,mBACPX,KAAOolH,EAAA,YACVplH,KAAAolH,EAAA,aAwBF,IAAI83L,GAAA,SAAA/zS,GAEJ,QAAA+zS,KACA,GAAAtqT,GAAAuW,EAAAhQ,MAAA5J,KAAA6J,YAAA7J,IAeA,OAXAqD,GAAA6vT,QAAA,KACA7vT,EAAA0P,KAAA,KACA1P,EAAAsnT,cAAA,KAIAtnT,EAAAioT,kBAIAjoT,EAAAooT,uBACApoT,EAwBC,MAzCD+tT,GAAA,EAAAzD,EAAA/zS,GAmBAlf,OAAAI,eAAA6yT,EAAArxT,UAAA,aAIA0F,IAAA,iBAAAkoT,MACAznT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA6yT,EAAArxT,UAAA,kBAIA0F,IAAA,iBAAAkoT,MACAznT,YAAA,EACKC,cAAA,IAOLirT,EAAArxT,UAAAyuT,kBAAA,SAAAxmN,KACCopN,GACDL,GAQA4C,IACAn5J,QAAA0tJ,EACAztJ,YAAAt8J,OAAAm7H,EAAA,6BAAAo4L,MACAh3J,OAAA,GAKAk5J,GAAA,WACA,QAAAA,KACAnwT,KAAAmzT,cA6CC,MAtCDhD,GAAA7zT,UAAAosB,IAAA,SAAAghS,EAAA0J,GACApzT,KAAAmzT,WAAAn8S,MAAA0yS,EAAA0J,KAMAjD,EAAA7zT,UAA8B6kB,OAAA,SAAAiyS,GAC9B,OAAA90T,GAAA0B,KAAAmzT,WAAA90T,OAAA,EAAAC,GAAA,IAAAA,EACA,GAAA0B,KAAAmzT,WAAA70T,GAAA,KAAA80T,EAEA,WADApzT,MAAAmzT,WAAA1uR,OAAAnmC,EAAA,IASA6xT,EAAA7zT,UAAA24D,OAAA,SAAAm+P,GACA,GAAA/vT,GAAArD,IACAA,MAAAmzT,WAAA91T,QAAA,SAAA8b,GACA9V,EAAAgwT,aAAAl6S,EAAAi6S,IAAAj6S,EAAA,KAAAi6S,GACAj6S,EAAA,GAAAm6S,YAAAF,EAAAr4T,UASAo1T,EAAA7zT,UAAA+2T,aAAA,SAAAE,EAAAH,GACA,QAAAG,EAAA,GAAA7J,UAEA6J,EAAA,GAAAL,UAAAE,EAAAI,SAAAN,SACAK,EAAA,GAAAxgT,OAAAqgT,EAAArgT,OAECo9S,IAEDA,IAAY3/S,aACZC,KAAAolH,EAAA,aAKAs6L,GAAA/+S,eAAA,oBA8BA,IAAA68S,IAAA,WAOA,QAAAA,GAAAxrI,EAAA+vI,EAAAiB,EAAAC,GACA1zT,KAAAyiL,YACAziL,KAAAwyT,cACAxyT,KAAAyzT,YACAzzT,KAAA0zT,YACA1zT,KAAA+mM,SAAA,aACA/mM,KAAA+/M,UAAA,aAmEC,MA9DDkuG,GAAA3xT,UAAA+H,SAAA,WACArE,KAAAwzT,SAAAxzT,KAAA0zT,UAAA1xT,IAAA2rT,GACA3tT,KAAA2zT,aACA3zT,KAAAyzT,UAAA/qS,IAAA1oB,KAAAwzT,SAAAxzT,OAKAiuT,EAAA3xT,UAAAgI,YAAA,WAAAtE,KAAAyzT,UAAAtyS,OAAAnhB,OAKAiuT,EAAA3xT,UAAA2jN,WAAA,SAAAllN,GACAiF,KAAA2uD,OAAA5zD,IAAAiF,KAAAjF,MACAiF,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,UAAApE,KAAA2uD,SAMAs/P,EAAA3xT,UAAA4jN,iBAAA,SAAAlyL,GACA,GAAA3qB,GAAArD,IACAA,MAAA4zT,IAAA5lS,EACAhuB,KAAA+mM,SAAA,WACA/4K,EAAA3qB,EAAAtI,OACAsI,EAAAowT,UAAAx+P,OAAA5xD,KAOA4qT,EAAA3xT,UAAAg3T,YAAA,SAAAv4T,GAAAiF,KAAAigN,WAAAllN,IAKAkzT,EAAA3xT,UAAA6jN,kBAAA,SAAAnyL,GAAAhuB,KAAA+/M,UAAA/xL,GAKAigS,EAAA3xT,UAAA8uT,iBAAA,SAAA/oG,GACAriN,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,WAAAi+M,IAKA4rG,EAAA3xT,UAAAq3T,WAAA,WACA3zT,KAAA+S,MAAA/S,KAAA6zT,iBAAA7zT,KAAA+S,OAAA/S,KAAA6zT,iBACA7zT,KAAA8zT,mBAEA9zT,KAAA+S,MAAA/S,KAAA6zT,kBACA7zT,KAAA+S,KAAA/S,KAAA6zT,kBAKA5F,EAAA3xT,UAAAw3T,gBAAA,WACA,SAAAltS,OAAA,8LAECqnS,IAEDA,IAAYz9S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAuB,+FACvBG,MAAA0hT,WAAA,aAAAC,SAAA,eACa58S,WAAIo6S,QAMjBjC,GAAY78S,eAAA,mBACPX,KAAOolH,EAAA,YACPplH,KAAAolH,EAA8B,aAC9BplH,KAAO0/S,KACV1/S,KAAAolH,EAAA,YAEFo4L,GAAqBr8S,gBACrBmB,OAAAtC,KAAAolH,EAAgC,QAChCg+L,kBAAsBpjT,KAAAolH,EAAO,QAC7B96H,QAAA0V,KAAAolH,EAAA;;;;;;;AASA,GAAAu6L,KACAr5J,QAAA0tJ,EACAztJ,YAAAt8J,OAAAm7H,EAAA,6BAAAw6L,MACAp5J,OAAA,GAWAo5J,GAAA,WAKA,QAAAA,GAAA5tI,EAAA+vI,GACAxyT,KAAAyiL,YACAziL,KAAAwyT,cACAxyT,KAAA+mM,SAAA,SAAAxgJ,KACAvmD,KAAA+/M,UAAA,aA4BC,MAtBDswG,GAAA/zT,UAAA2jN,WAAA,SAAAllN,GACAiF,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,QAAAknB,WAAAvwB,KAMAs1T,EAAA/zT,UAAA4jN,iBAA0C,SAAAlyL,GAC1ChuB,KAAA+mM,SAAA,SAAAhsM,GAAAizB,EAAA,IAAAjzB,EAAA,KAAAuwB,WAAAvwB,MAMAs1T,EAAA/zT,UAAA6jN,kBAAA,SAAAnyL,GAAAhuB,KAAA+/M,UAAA/xL,GAKAqiS,EAAA/zT,UAAA8uT,iBAAA,SAAA/oG,GACAriN,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,WAAAi+M,IAECguG,IAEDA,IAAY7/S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,+FACAG,MACA0hT,WAAA,gCACAl4C,UAAA,gCACiBm4C,SAAA,eAEJ58S,WAAIs6S,QAMjBC,GAAYj/S,eAAA,mBACPX,KAAOolH,EAAA,YACVplH,KAAAolH,EAAA;;;;;;;AASF,GAAA86L,KACA55J,QAAA0tJ,EACAztJ,YAAAt8J,OAAAm7H,EAAA,6BAAAw4L,MACAp3J,OAAA,GAoFAo3J,GAAA,WAKA,QAAAA,GAAA5rI,EAAA+vI,GACAxyT,KAAAyiL,YACAziL,KAAAwyT,cAIAxyT,KAAA+zT,WAAA,GAAAr5J,KAIA16J,KAAAg0T,WAAA,EACAh0T,KAAA+mM,SAAA,SAAAxgJ,KACAvmD,KAAA+/M,UAAA,aACA//M,KAAAi0T,aAAAp+L,EAAA,mBA+EC,MA7EDn7H,QAAAI,eAAAuzT,EAAA/xT,UAAA,eAKAqG,IAAA,SAAAqrB,GACA,qBAAAA,GACA,SAAApH,OAAA,gDAAA/H,KAAAE,UAAAiP,GAEShuB,MAAAi0T,aAAAjmS,GAETvrB,YAAA,EACKC,cAAA,IAML2rT,EAAA/xT,UAAA2jN,WAAA,SAAAllN,GACAiF,KAAAjF,OACA,IAAA8X,GAAA7S,KAAAk0T,aAAAn5T,EACA,OAAA8X,GACA7S,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,mBAEA,IAAAimT,GAAAF,EAAAt3S,EAAA9X,EACAiF,MAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,QAAAimT,IAMAgE,EAAA/xT,UAAA4jN,iBAAA,SAAAlyL,GACA,GAAA3qB,GAAArD,IACAA,MAAA+mM,SAAA,SAAAsjH,GACAhnT,EAAAtI,MAAAsI,EAAA8wT,gBAAA9J,GACAr8R,EAAA3qB,EAAAtI,SAOAszT,EAAA/xT,UAAA6jN,kBAAA,SAAAnyL,GAAAhuB,KAAA+/M,UAAA/xL,GAKAqgS,EAAA/xT,UAAA8uT,iBAAA,SAAA/oG,GACAriN,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,WAAAi+M,IAMAgsG,EAAA/xT,UAAA83T,gBAAA,kBAAAp0T,KAAAg0T,cAAAnzS,YAMAwtS,EAAA/xT,UAAA43T,aAAA,SAAiEn5T,GACjE,OAAAk+B,GAAA,EAAAxc,EAAApgB,MAAAu2M,KAAA5yM,KAAA+zT,WAAA9sS,QAAAgS,EAAAxc,EAAApe,OAAA46B,IAAA,CACA,GAAApmB,GAAA4J,EAAAwc,EACA,IAAAj5B,KAAAi0T,aAAAj0T,KAAA+zT,WAAA/xT,IAAA6Q,GAAA9X,GACA,MAAA8X,GAEA,aAOAw7S,EAAyB/xT,UAAA63T,gBAAA,SAAA9J,GACzB,GAAAx3S,GAAAu3S,EAAAC,EACA,OAAArqT,MAAA+zT,WAAAr1J,IAAA7rJ,GAAA7S,KAAA+zT,WAAA/xT,IAAA6Q,GAAAw3S,GAECgE,IAEDA,IAAY79S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAuB,8GACvBG,MAAA0hT,WAAA,gCAAAC,SAAA,eACa58S,WAAI66S,QAMjBtC,GAAYj9S,eAAA,mBACPX,KAAOolH,EAAA,YACVplH,KAAAolH,EAAA,cAEFw4L,GAAqBz8S,gBACrByiT,cAAA5jT,KAAAolH,EAAA,QAWA,IAAAu4L,IAAA,WAMA,QAAAA,GAAAkG,EAAA7xI,EAAA8xI,GACAv0T,KAAAs0T,WACAt0T,KAAAyiL,YACAziL,KAAAu0T,UACAv0T,KAAAu0T,UACAv0T,KAAA6S,GAAA7S,KAAAu0T,QAAAH,mBA+CC,MA7CD15T,QAAAI,eAAAszT,EAAA9xT,UAAA,WAKAqG,IAAA,SAAA5H,GACA,MAAAiF,KAAAu0T,UAEAv0T,KAAAu0T,QAAAR,WAAApxT,IAAA3C,KAAA6S,GAAA9X,GACAiF,KAAAw0T,iBAAArK,EAAAnqT,KAAA6S,GAAA9X,IACSiF,KAAAu0T,QAAAt0G,WAAAjgN,KAAAu0T,QAAAx5T,SAET0H,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAszT,EAAA9xT,UAAA,SAKAqG,IAAA,SAAA5H,GACAiF,KAAAw0T,iBAAAz5T,GACAiF,KAAAu0T,SACSv0T,KAAAu0T,QAAAt0G,WAAAjgN,KAAAu0T,QAAAx5T,QAET0H,YAAA,EACKC,cAAA,IAOL0rT,EAAA9xT,UAAAk4T,iBAAA,SAAAz5T,GACAiF,KAAAyiL,UAAAn7K,YAAAtH,KAAAs0T,SAAAlwT,cAAA,QAAArJ,IAKAqzT,EAAA9xT,UAAAgI,YAAA,WACAtE,KAAAu0T,UACAv0T,KAAAu0T,QAAAR,WAAApxJ,OAAA3iK,KAAA6S,IACA7S,KAAAu0T,QAAAt0G,WAAAjgN,KAAAu0T,QAAAx5T,SAGCqzT,IAEDA,IAAY59S,aACZC,KAAAolH,EAAA,UAAAllH,OAAAC,SAAA,aAKAw9S,GAAYh9S,eAAA,mBACPX,KAAOolH,EAAS,aAChBplH,KAAAolH,EAAwD,YAC3DplH,KAAA49S,GAAA79S,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,UAEFu4L,GAAAx8S,gBACA6iT,UAAehkT,KAAOolH,EAAK,MAAAllH,MAAA,aAC3B5V,QAAA0V,KAAAolH,EAAA,MAAAllH,MAAA;;;;;;;AASA,GAAAkgT,KACA95J,QAAA0tJ,EACAztJ,YAAAt8J,OAAAm7H,EAAA,6BAAAy4L,MACAr3J,OAAA,GAqDAq3J,GAAA,WAKA,QAAAA,GAAA7rI,EAAA+vI,GACAxyT,KAAAyiL,YACAziL,KAAAwyT,cAIAxyT,KAAA+zT,WAAA,GAAAr5J,KAIA16J,KAAAg0T,WAAA,EACAh0T,KAAA+mM,SAAA,SAAAxgJ,KACAvmD,KAAA+/M,UAAA,aACA//M,KAAAi0T,aAAAp+L,EAAA,mBA4GC,MA1GDn7H,QAAAI,eAAAwzT,EAAAhyT,UAAA,eAKAqG,IAAA,SAAAqrB,GACA,qBAAAA,GACA,SAAApH,OAAA,gDAAA/H,KAAAE,UAAAiP,GAEShuB,MAAAi0T,aAAAjmS,GAETvrB,YAAA,EACKC,cAAA,IAML4rT,EAAAhyT,UAAA2jN,WAAA,SAAAllN,GACA,GAAAsI,GAAArD,IACAA,MAAAjF,OACA,IAAA25T,EACA,IAAAr4T,MAAAo/F,QAAA1gG,GAAA,CAEA,GAAA45T,GAAA55T,EAAAwB,IAAA,SAA2Dmd,GAAA,MAAArW,GAAA6wT,aAAAx6S,IAC3Dg7S,GAAA,SAAAE,EAAAphS,GAAAohS,EAAAC,aAAAF,EAAA72T,QAAA01B,EAAA3S,aAAA,QAGA6zS,GAAA,SAAAE,EAAAphS,GAAAohS,EAAAC,cAAA,GAEA70T,MAAA+zT,WAAA12T,QAAAq3T,IAMApG,EAAAhyT,UAAA4jN,iBAAA,SAAAlyL,GACA,GAAA3qB,GAAArD,IACAA,MAAA+mM,SAAA,SAA6BxgJ,GAC7B,GAAAlzC,KACA,IAAAkzC,EAAA/qD,eAAiC,mBAEjC,OADoCiY,GAAE8yC,EAAUuuQ,gBACXx2T,EAAA,EAAAA,EAAAmV,EAAApV,OAAAC,IAAA,CACrC,GAAqCs2T,GAAAnhT,EAAAjO,KAAAlH,GACrC3C,EAAA0H,EAAA8wT,gBAAAS,EAAA75T,MACAsY,GAAA2D,KAAArb,OAKA,QADoC8X,GAAY8yC,EAAA,QACXjoD,EAAA,EAAAA,EAAAmV,EAAApV,OAAAC,IAAA,CACrC,GAAAs2T,GAAAnhT,EAAAjO,KAAAlH,EACA,IAAAs2T,EAAAvhT,SAAA,CACA,GAAA1X,GAAA0H,EAAA8wT,gBAAAS,EAAA75T,MACAsY,GAAA2D,KAAArb,IAIA0H,EAAAtI,MAAAsY,EACA2a,EAAA3a,KAOAi7S,EAAAhyT,UAAA6jN,kBAAA,SAAAnyL,GAAAhuB,KAAA+/M,UAAA/xL,GAKAsgS,EAAAhyT,UAAA8uT,iBAAA,SAAA/oG,GACAriN,KAAAyiL,UAAAn7K,YAAAtH,KAAAwyT,YAAApuT,cAAA,WAAAi+M,IAOAisG,EAAyBhyT,UAAA83T,gBAAA,SAAAr5T,GACzB,GAAA8X,IAAA7S,KAAAg0T,cAAAnzS,UAEA,OADA7gB,MAAA+zT,WAAApxT,IAAAkQ,EAAA9X,GACA8X,GAOAy7S,EAAAhyT,UAAA43T,aAAA,SAAiEn5T,GACjE,OAAAk+B,GAAA,EAAAxc,EAAApgB,MAAAu2M,KAAA5yM,KAAA+zT,WAAA9sS,QAAAgS,EAAAxc,EAAApe,OAAA46B,IAAA,CACA,GAAApmB,GAAA4J,EAAAwc,EACA,IAAAj5B,KAAAi0T,aAAAj0T,KAAA+zT,WAAA/xT,IAAA6Q,GAAAkxF,OAAAhpG,GACA,MAAA8X,GAEA,aAOAy7S,EAAyBhyT,UAAA63T,gBAAA,SAAA9J,GACzB,GAAAx3S,GAAA03S,EAAAF,EACA,OAAArqT,MAAA+zT,WAAAr1J,IAAA7rJ,GAAA7S,KAAA+zT,WAAA/xT,IAAA6Q,GAAAkxF,OAAAsmN,GAECiE,IAEDA,IAAY99S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAuB,4FACvBG,MAAA0hT,WAAA,0BAAAC,SAAA,eACa58S,WAAI+6S,QAMjBvC,GAAYl9S,eAAA,mBACPX,KAAOolH,EAAA,YACVplH,KAAAolH,EAAA,cAEFy4L,GAA4B18S,gBAC5ByiT,cAAA5jT,KAAAolH,EAAA,QAaA,IAAA+6L,IAAA,WAMA,QAAAA,GAAA0D,EAAA7xI,EAAA8xI,GACAv0T,KAAAs0T,WACAt0T,KAAAyiL,YACAziL,KAAAu0T,UACAv0T,KAAAu0T,UACAv0T,KAAA6S,GAAA7S,KAAAu0T,QAAAH,gBAAAp0T,OA6DC,MA1DDtF,QAAAI,eAAA81T,EAAAt0T,UAAA,WAKAqG,IAAA,SAAA5H,GACA,MAAAiF,KAAAu0T,UAEAv0T,KAAA+jG,OAAAhpG,EACAiF,KAAAw0T,iBAAAlK,EAAAtqT,KAAA6S,GAAA9X,IACSiF,KAAAu0T,QAAAt0G,WAAAjgN,KAAAu0T,QAAAx5T,SAET0H,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA81T,EAAAt0T,UAAA,SAKAqG,IAAA,SAAA5H,GACAiF,KAAAu0T,SACAv0T,KAAA+jG,OAAAhpG,EACAiF,KAAAw0T,iBAAAlK,EAAAtqT,KAAA6S,GAAA9X,IACAiF,KAAAu0T,QAAAt0G,WAAAjgN,KAAAu0T,QAAAx5T,QAGAiF,KAAAw0T,iBAAAz5T,IAGA0H,YAAA,EACKC,cAAA,IAOLkuT,EAAAt0T,UAAAk4T,iBAAA,SAAAz5T,GACAiF,KAAAyiL,UAAAn7K,YAAAtH,KAAAs0T,SAAAlwT,cAAA,QAAArJ,IAOA61T,EAAAt0T,UAAAu4T,aAAA,SAAAxhT,GACArT,KAAAyiL,UAAAn7K,YAAAtH,KAAAs0T,SAAAlwT,cAAA,WAAAiP,IAKAu9S,EAAAt0T,UAAAgI,YAAA,WACAtE,KAAAu0T,UACAv0T,KAAAu0T,QAAAR,WAAApxJ,OAAA3iK,KAAA6S,IACA7S,KAAAu0T,QAAAt0G,WAAAjgN,KAAAu0T,QAAAx5T,SAGC61T,IAEDA,IAAYpgT,aACZC,KAAAolH,EAAA,UAAAllH,OAAAC,SAAA,aAKAggT,GAAYx/S,eAAA,mBACPX,KAAOolH,EAAS,aAChBplH,KAAAolH,EAAyD,YAC5DplH,KAAA69S,GAAA99S,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,UAEF+6L,GAAiBh/S,gBACjB6iT,UAAehkT,KAAOolH,EAAK,MAAAllH,MAAA,aAC3B5V,QAAA0V,KAAAolH,EAAA,MAAAllH,MAAA,WAkJA,IAAAy7S,KACAoB,EACA6C,GACAJ,EACA5B,GACAC,GACAL,IAwDIV,GAAA,SAAA3zS,GAEJ,QAAA2zS,KACA,cAAA3zS,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KAmEC,MArEDoxT,GAAA,EAAA7D,EAAA3zS,GAOA2zS,EAAAjxT,UAAgC+H,SAAc,WAC9CrE,KAAA+0T,mBACA/0T,KAAA,cAAAg1T,aAAAh1T,OAKAutT,EAAAjxT,UAAAgI,YAAA,WACAtE,KAAAi1T,eACAj1T,KAAAi1T,cAAAC,gBAAAl1T,OAGAtF,OAAAI,eAAAyyT,EAAAjxT,UAAA,WAKA0F,IAAA,iBAAAhC,MAAA,cAAAm1T,aAAAn1T,OACAyC,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAyyT,EAAAjxT,UAAA,QAKA0F,IAAA,iBAAAwoT,GAAAxqT,KAAA+S,KAAA/S,KAAAkzT,UACAzwT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAyyT,EAAAjxT,UAAA,iBAKA0F,IAAA,iBAAAhC,MAAAkzT,QAAAlzT,KAAAkzT,QAAA+B,cAAA,MACAxyT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAyyT,EAAAjxT,UAAA,aAIA0F,IAAA,iBAAA+pT,GAAA/rT,KAAAo1T,cACA3yT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAyyT,EAAAjxT,UAAA,kBAIA0F,IAAA,WACS,MAAAgqT,GAAAhsT,KAAAq1T,mBAET5yT,YAAA,EACKC,cAAA,IAML6qT,EAAAjxT,UAAAy4T,iBAAA,aACCxH,GACDE,GAQAiC,GAAA,WAIA,QAAAA,GAAA4F,GACAt1T,KAAAu1T,IAAAD,EA0DC,MAxDD56T,QAAAI,eAAA40T,EAAApzT,UAAA,oBAIA0F,IAAA,mBAAAhC,KAAAu1T,IAAA7L,SAAA1pT,KAAAu1T,IAAA7L,QAAAiI,WACAlvT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA40T,EAAApzT,UAAA,kBAIA0F,IAAA,mBAAAhC,KAAAu1T,IAAA7L,SAAA1pT,KAAAu1T,IAAA7L,QAAAgI,SACAjvT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA40T,EAAApzT,UAAA,mBAIA0F,IAAA,mBAAAhC,KAAAu1T,IAAA7L,SAAA1pT,KAAAu1T,IAAA7L,QAAA+H,UACAhvT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA40T,EAAApzT,UAAA,gBAIA0F,IAAA,mBAAAhC,KAAAu1T,IAAA7L,SAAA1pT,KAAAu1T,IAAA7L,QAAAroG,OACA5+M,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA40T,EAAApzT,UAAA,gBAIA0F,IAAA,mBAAAhC,KAAAu1T,IAAA7L,SAAA1pT,KAAAu1T,IAAA7L,QAAArrS,OACA5b,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA40T,EAAApzT,UAAA,kBAIA0F,IAAA,mBAAAhC,KAAAu1T,IAAA7L,SAAA1pT,KAAAu1T,IAAA7L,QAAA6H,SACA9uT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAA40T,EAAApzT,UAAA,kBAIA0F,IAAA,mBAAAhC,KAAAu1T,IAAA7L,SAAA1pT,KAAAu1T,IAAA7L,QAAA8H,SACA/uT,YAAA,EACKC,cAAA,IAEJgtT,KAEDC,IACA6F,uBAAA,mBACAC,qBAAA,iBACAC,sBAAA,kBACAC,mBAAA,eACAC,mBAAA,eACAC,qBAAA,iBACAC,qBAAA,kBAiBIlI,GAAA,SAAAh0S,GAKJ,QAAAg0S,GAAA0H,GACA,MAAA17S,GAAApd,KAAAwD,KAAAs1T,IAAAt1T,KAEC,MAPDoxT,GAAA,EAAAxD,EAAAh0S,GAOCg0S,GACD8B,GACA9B,IAAYp9S,aACZC,KAAAolH,EAAA,UAAAllH,OAAAC,SAAA,4CAAAG,KAAA4+S,OAKA/B,GAAKx8S,eAAA,WAAuC,QAC1CX,KAAAk9S,EAAAn9S,aAAAC,KAAAolH,EAAA,SAQF,IAAIg4L,IAAA,SAAAj0S,GAKJ,QAAAi0S,GAAAyH,GACA,MAAA17S,GAAApd,KAAAwD,KAAAs1T,IAAAt1T,KAEC,MAPDoxT,GAAA,EAAAvD,EAAAj0S,GAOCi0S,GACD6B,GACA7B,IAAYr9S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,2FACaG,KAAI4+S,OAMjB9B,GAAKz8S,eAAA,WAA8C,QACjDX,KAAAg9S,EAAAj9S,aAAAC,KAAAolH,EAAA;;;;;;;AAYF,GAkEAi5L,IAAA,WAKA,QAAAA,GAAAh4J,EAAA+zJ,GACA7qT,KAAA82J,YACA92J,KAAA6qT,iBAIA7qT,KAAA+1T,oBAAA,aACA/1T,KAAAg2T,WAAA,EACAh2T,KAAAi2T,UAAA,EAIAj2T,KAAAk2T,qBAynBC,MAvnBDx7T,QAAAI,eAAAg0T,EAAAxyT,UAAA,SAKA0F,IAAA,iBAAAhC,MAAA+jG,QACAthG,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,UAKA0F,IAAA,iBAAAhC,MAAAkzT,SACAzwT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,UAcA0F,IAAA,iBAAAhC,MAAAm2T,SACA1zT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,SAQA0F,IAAA,iBAjIA,UAiIAhC,KAAAm2T,SACA1zT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,WAQA0F,IAAA,iBAzIA,YAyIAhC,KAAAm2T,SACA1zT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,WAQA0F,IAAA,iBAhJA,WAgJAhC,KAAAm2T,SACA1zT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,YASA0F,IAAA,iBAxJA,aAwJAhC,KAAAm2T,SACA1zT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,WAQA0F,IAAA,iBApKA,aAoKAhC,KAAAm2T,SACA1zT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,UAMA0F,IAAA,iBAAAhC,MAAAo2T,SACA3zT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,YASA0F,IAAA,iBAAAhC,MAAAg2T,WACAvzT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,SASA0F,IAAA,kBAAAhC,KAAAyxT,UACAhvT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,WAMA0F,IAAA,iBAAAhC,MAAAi2T,UACAxzT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,aAMA0F,IAAA,kBAAAhC,KAAAi2T,UACAxzT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,gBAMA0F,IAAA,iBAAAhC,MAAAq2T,eACA5zT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAg0T,EAAAxyT,UAAA,iBAMA0F,IAAA,iBAAAhC,MAAAs2T,gBACA7zT,YAAA,EACKC,cAAA,IAQLosT,EAAAxyT,UAAAykN,cAAA,SAAAw1G,GACAv2T,KAAA82J,UAAAk2J,EAAAuJ,IAQAzH,EAAAxyT,UAAA0kN,mBAAA,SAAAu1G,GACAv2T,KAAA6qT,eAAAoC,EAAAsJ,IAMAzH,EAAAxyT,UAAAk6T,gBAAA,WAAAx2T,KAAA82J,UAAA,MAKAg4J,EAAAxyT,UAAAm6T,qBAAA,WAAAz2T,KAAA6qT,eAAA,MASAiE,EAAAxyT,UAA8B4uT,cAAW,SAAAwL,OACzC,KAAAA,UACA12T,KAAAi2T,UAAA,EACAj2T,KAAAkzT,UAAAwD,EAAAC,UACA32T,KAAAkzT,QAAAhI,cAAAwL,IAYA5H,EAAAxyT,UAA8Bs6T,gBAAW,SAAAF,OACzC,KAAAA,UACA12T,KAAAi2T,UAAA,EACAj2T,KAAA62T,cAAA,SAAAnN,KAAAkN,iBAAAD,UAAA,MACA32T,KAAAkzT,UAAAwD,EAAAC,UACA32T,KAAAkzT,QAAA4D,eAAAJ,IAWA5H,EAAAxyT,UAA8B0uT,YAAW,SAAA0L,OACzC,KAAAA,UACA12T,KAAAg2T,WAAA,EACAh2T,KAAAkzT,UAAAwD,EAAAC,UACA32T,KAAAkzT,QAAAlI,YAAA0L,IAYA5H,EAAAxyT,UAA8By6T,eAAW,SAAAL,OACzC,KAAAA,UACA12T,KAAAg2T,WAAA,EACAh2T,KAAA62T,cAAA,SAAAnN,KAAAqN,gBAAAJ,UAAA,MACA32T,KAAAkzT,UAAAwD,EAAAC,UACA32T,KAAAkzT,QAAA8D,gBAAAN,IAQA5H,EAAAxyT,UAA8B26T,cAAW,SAAAP,OACzC,KAAAA,UACA12T,KAAAm2T,QA5VA,UA6VAn2T,KAAAkzT,UAAAwD,EAAAC,UACA32T,KAAAkzT,QAAA+D,cAAAP,IAWA5H,EAAAxyT,UAA8B0kL,QAAA,SAAW01I,OACzC,KAAAA,UACA12T,KAAAm2T,QAtWA,WAuWAn2T,KAAAo2T,QAAA,KACAp2T,KAAA62T,cAAA,SAAAnN,KAAA1oI,SAAA21I,UAAA,MACA32T,KAAAk3T,gBACA,IAAAR,EAAAzuG,YACAjoN,KAAAq2T,cAAA9qT,KAAAvL,KAAA+jG,QACA/jG,KAAAs2T,eAAA/qT,KAAAvL,KAAAm2T,UAEAn2T,KAAAm3T,mBAAAT,EAAAC,UACA32T,KAAAk2T,kBAAA74T,QAAA,SAAA+5T,GAAA,MAAAA,IAAA,MAWAtI,EAAAxyT,UAA8B8jB,OAAA,SAAWs2S,OACzC,KAAAA,UACA12T,KAAAm2T,QA1YA,QA2YAn2T,KAAA62T,cAAA,SAAqCnN,KAAAtpS,QAAAu2S,UAAA,MACrC32T,KAAAwrT,wBAAAmL,UAAA,EAAA1uG,UAAAyuG,EAAAzuG,YACAjoN,KAAAm3T,mBAAAT,EAAAC,UACA32T,KAAAk2T,kBAAA74T,QAAA,SAAA+5T,GAAA,MAAAA,IAAA,MAMAtI,EAAAxyT,UAAA66T,iBAAA,SAAAR,GACA32T,KAAAkzT,UAAAyD,IACA32T,KAAAkzT,QAAA1H,yBACAxrT,KAAAkzT,QAAA8D,kBACAh3T,KAAAkzT,QAAA4D,mBAOAhI,EAAAxyT,UAAA+6T,UAAA,SAAAhkQ,GAAArzD,KAAAkzT,QAAA7/P,GAQAy7P,EAAAxyT,UAAA24J,SAAA,SAAAl6J,EAAA0Y,KAQAq7S,EAAAxyT,UAAAg7T,WAAA,SAAAv8T,EAAA0Y,KAQAq7S,EAAAxyT,UAAAusK,MAAA,SAAA9tK,EAAA0Y,KAQAq7S,EAAAxyT,UAA8BkvT,uBAAW,SAAAkL,OACzC,KAAAA,UACA12T,KAAAu3T,oBACAv3T,KAAAk3T,eACAl3T,KAAAm8C,UACAn8C,KAAAw3T,8BACAx3T,KAAAo2T,QAAAp2T,KAAAy3T,gBACAz3T,KAAAm2T,QAAAn2T,KAAA03T,mBAtcA,UAucA13T,KAAAm2T,SA9bA,YA8bAn2T,KAAAm2T,SACAn2T,KAAA23T,mBAAAjB,EAAAzuG,aAGA,IAAAyuG,EAAAzuG,YACAjoN,KAAAq2T,cAAA9qT,KAAAvL,KAAA+jG,QACA/jG,KAAAs2T,eAAA/qT,KAAAvL,KAAAm2T,UAEAn2T,KAAAkzT,UAAAwD,EAAAC,UACA32T,KAAAkzT,QAAA1H,uBAAAkL,IAQA5H,EAAAxyT,UAA8Bs7T,oBAAS,SAAmBlB,OAC1D,KAAAA,OAAAzuG,WAA4C,IAC5CjoN,KAAA62T,cAAA,SAAqCgB,GAAA,MAAAA,GAAAD,oBAAAlB,KACrC12T,KAAAwrT,wBAAAmL,UAAA,EAAA1uG,UAAAyuG,EAAAzuG,aAKA6mG,EAAAxyT,UAAAi7T,kBAAA,WAAAv3T,KAAAm2T,QAAAn2T,KAAA83T,uBAldA,WAdA,SAoeAhJ,EAAAxyT,UAAAm7T,cAAA,WACA,MAAAz3T,MAAA82J,UAAA92J,KAAA82J,UAAA92J,MAAA,MAMA8uT,EAAAxyT,UAAAq7T,mBAAA,SAAA1vG,GACA,GAAA5kN,GAAArD,IACA,IAAAA,KAAA6qT,eAAA,CACA7qT,KAAAm2T,QAreA,SAseA,IAAAn1F,GAAAuoF,EAAAvpT,KAAA6qT,eAAA7qT,MACAA,MAAA+3T,6BACA/2F,EAAArmN,UAAA,SAAAiwB,GAAA,MAAAvnC,GAAAsuQ,UAAA/mO,GAAAq9K,kBAMA6mG,EAAAxyT,UAAAk7T,4BAAA,WACAx3T,KAAA+3T,8BACA/3T,KAAA+3T,6BAAAnhM,eA6BAk4L,EAAAxyT,UAA8Bq1Q,UAAW,SAAA/mO,EAAA8rR,OACzC,KAAAA,UACA12T,KAAAo2T,QAAAxrR,EACA5qC,KAAAg4T,uBAAA,IAAAtB,EAAAzuG,YAiBA6mG,EAAAxyT,UAAA0F,IAAA,SAAAkhD,GAAA,MAAAypQ,GAAA3sT,KAAAkjD,EAAA,MAUA4rQ,EAAAxyT,UAAyBs1T,SAAA,SAAA95N,EAAA50C,GACzB,GAAAwmQ,GAAAxmQ,EAAAljD,KAAAgC,IAAAkhD,GAAAljD,IACA,OAAA0pT,MAAA0M,QAAA1M,EAAA0M,QAAAt+N,GAAA,MAWAg3N,EAAAxyT,UAAA6/E,SAAA,SAAA2b,EAAA50C,GAAA,QAAAljD,KAAA4xT,SAAA95N,EAAA50C,IACAxoD,OAAAI,eAAAg0T,EAAAxyT,UAAA,QAKA0F,IAAA,WAEA,IADA,GAAAkC,GAAAlE,KACAkE,EAAAgvT,SACAhvT,IAAAgvT,OAES,OAAAhvT,IAETzB,YAAA,EACKC,cAAA,IAOLosT,EAAAxyT,UAAA07T,sBAAA,SAAA/vG,GACAjoN,KAAAm2T,QAAAn2T,KAAA03T,mBACAzvG,GACAjoN,KAAAs2T,eAAA/qT,KAAAvL,KAAAm2T,SAEAn2T,KAAAkzT,SACAlzT,KAAAkzT,QAAA8E,sBAAA/vG,IAOA6mG,EAAAxyT,UAAA27T,iBAAiC,WACjCj4T,KAAAq2T,cAAA,GAAAxgM,GAAkC,aAClC71H,KAAAs2T,eAAA,GAAAzgM,GAAA,cAKAi5L,EAAAxyT,UAAAo7T,iBAAA,WACA,MAAA13T,MAAA83T,uBA7lBA,WA+lBA93T,KAAAo2T,QAzmBA,UA2mBAp2T,KAAAk4T,uBAtmBA,qBAwmBAl4T,KAAAk4T,uBA7mBA,qBAJA,SA0nBApJ,EAAAxyT,UAAA46T,aAAA,aAOApI,EAAAxyT,UAAAu6T,cAAA,SAAAn/Q,KAOAo3Q,EAAAxyT,UAAA67T,aAAA,SAAAvxJ,KAMAkoJ,EAAAxyT,UAAAw7T,qBAAA,aAMAhJ,EAAAxyT,UAAA47T,uBAAqD,SAAAvjT,GACrD,MAAA3U,MAAAm4T,aAAA,SAAAzO,GAAA,MAAAA,GAAA/0S,cAMAm6S,EAAAxyT,UAAA87T,kBAAA,WACA,MAAAp4T,MAAAm4T,aAAA,SAAAzO,GAAA,MAAAA,GAAAroG,SAMAytG,EAAAxyT,UAAA+7T,oBAAA,WACA,MAAAr4T,MAAAm4T,aAAA,SAAAzO,GAAA,MAAAA,GAAAgI,WAOA5C,EAAAxyT,UAA8B06T,gBAAW,SAAAN,OACzC,KAAAA,UACA12T,KAAAg2T,WAAAh2T,KAAAo4T,oBACAp4T,KAAAkzT,UAAAwD,EAAAC,UACA32T,KAAAkzT,QAAA8D,gBAAAN,IAQA5H,EAAAxyT,UAA8Bw6T,eAAW,SAAAJ,OACzC,KAAAA,UACA12T,KAAAi2T,SAAAj2T,KAAAq4T,sBACAr4T,KAAAkzT,UAAAwD,EAAAC,UACA32T,KAAAkzT,QAAA4D,eAAAJ,IAQA5H,EAAAxyT,UAAAg8T,cAAA,SAAAC,GACA,sBAAAA,IAAA,OAAAA,GACA,IAAA79T,OAAAusB,KAAAsxS,GAAAl6T,QAAA,SAAAk6T,IAAA,YAAAA,IAOAzJ,EAAAxyT,UAAAk8T,4BAAA,SAAAxqS,GAAAhuB,KAAA+1T,oBAAA/nS,GACC8gS,KA6CGC,GAAA,SAAAn1S,GAOJ,QAAAm1S,GAAAwJ,EAAmCzhK,EAAA+zJ,OACnC,KAAA0N,MAAA,KACA,IAAAl1T,GAAAuW,EAAApd,KAAAwD,KAAAgtT,EAAAl2J,GAAAm2J,EAAApC,KAAA7qT,IAQA,OAJAqD,GAAAo1T,aACAp1T,EAAAq1T,gBAAAH,GACAl1T,EAAAmoT,wBAAAmL,UAAA,EAAA1uG,WAAA,IACA5kN,EAAA40T,mBACA50T,EA+IC,MA/JD+tT,GAAA,EAAArC,EAAAn1S,GAsCAm1S,EAAAzyT,UAAA24J,SAAA,SAAAl6J,EAAA0Y,GACA,GAAApQ,GAAArD,SACA,KAAAyT,UACAzT,KAAA+jG,OAAAhpG,EACAiF,KAAAy4T,UAAAp6T,SAAwD,IAAxDoV,EAAAw3S,uBACAjrT,KAAAy4T,UAAAp7T,QAAA,SAAA+5T,GAAA,MAAAA,GAAA/zT,EAAA0gG,QAAA,IAAAtwF,EAAAklT,yBAEA34T,KAAAwrT,uBAAA/3S,IAYAs7S,EAAAzyT,UAAAg7T,WAAiC,SAAcv8T,EAAA0Y,OAC/C,KAAAA,UACAzT,KAAAi1J,SAAAl6J,EAAA0Y,IAiCAs7S,EAAAzyT,UAAAusK,MAAA,SAAmC0vJ,EAAkB9kT,OACrD,KAAA8kT,IAAiCA,EAAc,UAC/C,KAAA9kT,UACAzT,KAAA04T,gBAAAH,GACAv4T,KAAA+2T,eAAAtjT,GACAzT,KAAA42T,gBAAAnjT,GACAzT,KAAAi1J,SAAAj1J,KAAA+jG,OAAAtwF,IAMAs7S,EAAAzyT,UAAA46T,aAAA,aAMAnI,EAAAzyT,UAAA67T,aAAA,SAAAvxJ,GAAA,UAKAmoJ,EAAAzyT,UAAAw7T,qBAAA,iBAAA93T,MAAAq6D,UAMA00P,EAAAzyT,UAAA4jN,iBAAA,SAAAlyL,GAAAhuB,KAAAy4T,UAAAzhT,KAAAgX,IAKA+gS,EAAAzyT,UAAAsvT,gBAAA,WACA5rT,KAAAy4T,aACAz4T,KAAAk2T,qBACAl2T,KAAA+1T,oBAAA,cAOAhH,EAAAzyT,UAAA+uT,yBAAA,SAAAr9R,GACAhuB,KAAAk2T,kBAAAl/S,KAAAgX,IAOA+gS,EAAAzyT,UAAAu6T,cAAA,SAAAn/Q,KAKAq3Q,EAAAzyT,UAAAo8T,gBAAA,SAAAH,GACAv4T,KAAAs4T,cAAAC,IACAv4T,KAAA+jG,OAAAw0N,EAAAx9T,MACAw9T,EAAAl+P,SAA6Br6D,KAAAghL,SAAA21I,UAAA,EAAmC1uG,WAAA,IAChEjoN,KAAAogB,QAAAu2S,UAAA,EAAA1uG,WAAA,KAGAjoN,KAAA+jG,OAAAw0N,GAGCxJ,GACDD,IAqDIjC,GAAA,SAAAjzS,GAOJ,QAAAizS,GAAAhgI,EAAA/1B,EAAA+zJ,GACA,GAAAxnT,GAAAuW,EAAApd,KAAAwD,KAAA82J,GAAA,KAAA+zJ,GAAA,OAAA7qT,IAKA,OAJAqD,GAAAwpL,WACAxpL,EAAA40T,mBACA50T,EAAAu1T,iBACAv1T,EAAAmoT,wBAAAmL,UAAA,EAAA1uG,WAAA,IACA5kN,EAuSC,MAnTD+tT,GAAA,EAAAvE,EAAAjzS,GAuBAizS,EAAAvwT,UAAAu8T,gBAAA,SAAA9lT,EAAA22S,GACA,MAAA1pT,MAAA6sL,SAAA95K,GACA/S,KAAA6sL,SAAA95K,IACA/S,KAAA6sL,SAAA95K,GAAA22S,EACAA,EAAA2N,UAAAr3T,MACA0pT,EAAA8O,4BAAAx4T,KAAA+1T,qBACArM,IAQAmD,EAAAvwT,UAAAw8T,WAAA,SAAA/lT,EAAA22S,GACA1pT,KAAA64T,gBAAA9lT,EAAA22S,GACA1pT,KAAAwrT,yBACAxrT,KAAA+1T,uBAOAlJ,EAAAvwT,UAAAy8T,cAAA,SAAAhmT,GACA/S,KAAA6sL,SAAA95K,IACA/S,KAAA6sL,SAAA95K,GAAAylT,4BAAA,oBACAx4T,MAAA6sL,SAAA95K,GACA/S,KAAAwrT,yBACAxrT,KAAA+1T,uBAQAlJ,EAAAvwT,UAAA08T,WAAA,SAAAjmT,EAAA22S,GACA1pT,KAAA6sL,SAAA95K,IACA/S,KAAA6sL,SAAA95K,GAAAylT,4BAAA,oBACAx4T,MAAA6sL,SAAA95K,GACA22S,GACA1pT,KAAA64T,gBAAA9lT,EAAA22S,GACA1pT,KAAAwrT,yBACAxrT,KAAA+1T,uBAUAlJ,EAAAvwT,UAAA2nK,SAAA,SAAAg1J,GACA,MAAAj5T,MAAA6sL,SAAArxL,eAAAy9T,IAAAj5T,KAAA6sL,SAAAosI,GAAA98Q,SA2BA0wQ,EAAAvwT,UAAA24J,SAAA,SAAAl6J,EAAA0Y,GACA,GAAApQ,GAAArD,SACA,KAAAyT,UACAzT,KAAAk5T,uBAAAn+T,GACAL,OAAAusB,KAAAlsB,GAAAsC,QAAA,SAAA0V,GACA1P,EAAA81T,uBAAApmT,GACS1P,EAAAwpL,SAAA95K,GAAAkiJ,SAAAl6J,EAAAgY,IAAA4jT,UAAA,EAAA1uG,UAAAx0M,EAAAw0M,cAETjoN,KAAAwrT,uBAAA/3S,IA0BAo5S,EAAAvwT,UAAAg7T,WAAA,SAAAv8T,EAAA0Y,GACA,GAAApQ,GAAArD,SACA,KAAAyT,UACA/Y,OAAAusB,KAAAlsB,GAAAsC,QAAA,SAAA0V,GACA1P,EAAAwpL,SAAA95K,IACA1P,EAAAwpL,SAAA95K,GAAAukT,WAAAv8T,EAAAgY,IAAA4jT,UAAA,EAAA1uG,UAAAx0M,EAAAw0M,cAGAjoN,KAAAwrT,uBAAA/3S,IAqCAo5S,EAAAvwT,UAAAusK,MAA+B,SAAA9tK,EAAY0Y,OAC3C,KAAA1Y,cACA,KAAA0Y,UACAzT,KAAA62T,cAAA,SAAAnN,EAAwC32S,GAC/B22S,EAAA7gJ,MAAA9tK,EAAAgY,IAAA4jT,UAAA,EAAA1uG,UAAAx0M,EAAAw0M,cAETjoN,KAAAwrT,uBAAA/3S,GACAzT,KAAAg3T,gBAAAvjT,GACAzT,KAAA82T,eAAArjT,IASAo5S,EAAAvwT,UAAA88T,YAAsC,WACtC,MAAAp5T,MAAAq5T,mBAAA,SAAAx7Q,EAAA6rQ,EAAA32S,GAES,MADT8qC,GAAA9qC,GAAA22S,YAAAqF,IAAArF,EAAA3uT,MAAA,EAAAq+T,cACSv7Q,KAQTgvQ,EAAAvwT,UAAA68T,uBAAA,SAAApmT,GACA,IAAArY,OAAAusB,KAAAjnB,KAAA6sL,UAAAxuL,OACA,SAAAuoB,OAAA,yKAEA,KAAA5mB,KAAA6sL,SAAA95K,GACA,SAAA6T,OAAA,uCAAA7T,EAAA,MAQA85S,EAAAvwT,UAAAu6T,cAAA,SAAAn/Q,GACA,GAAAr0C,GAAArD,IACAtF,QAAAusB,KAAAjnB,KAAA6sL,UAAAxvL,QAAA,SAAAoc,GAAA,MAAAi+B,GAAAr0C,EAAAwpL,SAAApzK,SAMAozS,EAAAvwT,UAAAs8T,eAAA,WACA,GAAAv1T,GAAArD,IACAA,MAAA62T,cAAA,SAAAnN,GACAA,EAAA2N,UAAAh0T,GACSqmT,EAAA8O,4BAAAn1T,EAAA0yT,wBAOTlJ,EAAAvwT,UAAA46T,aAAA,WAAAl3T,KAAA+jG,OAAA/jG,KAAAs5T,gBAMAzM,EAAAvwT,UAAA67T,aAAA,SAAAvxJ,GACA,GAAAvjK,GAAArD,KACAmiE,GAAA,CAIA,OAHAniE,MAAA62T,cAAA,SAAAnN,EAAA32S,GACSovD,KAAA9+D,EAAA4gK,SAAAlxJ,IAAA6zJ,EAAA8iJ,KAETvnP,GAMA0qP,EAAAvwT,UAAAg9T,aAAA,WACA,GAAAj2T,GAAArD,IACA,OAAAA,MAAAq5T,mBAAA,SAAAx7Q,EAAA6rQ,EAAA32S,GAIS,OAHT22S,EAAAvtQ,SAAA94C,EAAAg3D,YACAxc,EAAA9qC,GAAA22S,EAAA3uT,OAES8iD,KASTgvQ,EAAAvwT,UAAuB+8T,gBAAE,SAAAE,EAAAvrS,GACzB,GAAAm0C,GAAAo3P,CAEA,OADAv5T,MAAA62T,cAAA,SAAAnN,EAAA32S,GAAAovD,EAAAn0C,EAAAm0C,EAAAunP,EAAA32S,KACAovD,GAMA0qP,EAAAvwT,UAAAw7T,qBAAA,WACA,OAAA7+R,GAAA,EAAAxc,EAAA/hB,OAAAusB,KAAAjnB,KAAA6sL,UAAA5zJ,EAAAxc,EAAApe,OAAA46B,IAAA,CACA,GAAAggS,GAAAx8S,EAAAwc,EACA,IAAAj5B,KAAA6sL,SAAAosI,GAAA98Q,QACA,SAGA,MAAAzhD,QAAAusB,KAAAjnB,KAAA6sL,UAAAxuL,OAAA,GAAA2B,KAAAq6D,UAOAwyP,EAAAvwT,UAAA48T,uBAAA,SAAAn+T,GACAiF,KAAA62T,cAAA,SAAAnN,EAAA32S,GACA,OAAAlQ,KAAA9H,EAAAgY,GACA,SAAA6T,OAAA,oDAAA7T,EAAA,SAIC85S,GACDiC,IA6CIhC,GAAA,SAAAlzS,GAOJ,QAAAkzS,GAAAjgI,EAAA/1B,EAAA+zJ,GACA,GAAAxnT,GAAAuW,EAAApd,KAAAwD,KAAA82J,GAAA,KAAA+zJ,GAAA,OAAA7qT,IAKA,OAJAqD,GAAAwpL,WACAxpL,EAAA40T,mBACA50T,EAAAu1T,iBACAv1T,EAAAmoT,wBAAAmL,UAAA,EAAA1uG,WAAA,IACA5kN,EA8QC,MA1RD+tT,GAAA,EAAAtE,EAAAlzS,GAmBAkzS,EAAAxwT,UAAAywT,GAAA,SAAAtnT,GAAA,MAAAzF,MAAA6sL,SAAApnL,IAMAqnT,EAAAxwT,UAAA0a,KAAA,SAAA0yS,GACA1pT,KAAA6sL,SAAA71K,KAAA0yS,GACA1pT,KAAAw5T,iBAAA9P,GACA1pT,KAAAwrT,yBACAxrT,KAAA+1T,uBAQAjJ,EAAAxwT,UAAAm9T,OAAA,SAAAh0T,EAAAikT,GACA1pT,KAAA6sL,SAAApoJ,OAAAh/B,EAAA,EAAAikT,GACA1pT,KAAAw5T,iBAAA9P,GACA1pT,KAAAwrT,yBACAxrT,KAAA+1T,uBAOAjJ,EAAAxwT,UAAAo9T,SAAA,SAAAj0T,GACAzF,KAAA6sL,SAAApnL,IACAzF,KAAA6sL,SAAApnL,GAAA+yT,4BAAA,cACAx4T,KAAA6sL,SAAApoJ,OAAAh/B,EAAA,GACAzF,KAAAwrT,yBACAxrT,KAAA+1T,uBAQAjJ,EAAAxwT,UAAA08T,WAAA,SAAAvzT,EAAAikT,GACA1pT,KAAA6sL,SAAApnL,IACAzF,KAAA6sL,SAAApnL,GAAA+yT,4BAAA,cACAx4T,KAAA6sL,SAAApoJ,OAAAh/B,EAAA,GACAikT,IACA1pT,KAAA6sL,SAAApoJ,OAAAh/B,EAAA,EAAAikT,GACA1pT,KAAAw5T,iBAAA9P,IAEA1pT,KAAAwrT,yBACAxrT,KAAA+1T,uBAEAr7T,OAAAI,eAAAgyT,EAAAxwT,UAAA,UAKA0F,IAAA,iBAAAhC,MAAA6sL,SAAAxuL,QACAoE,YAAA,EACKC,cAAA,IA0BLoqT,EAAAxwT,UAAA24J,SAAA,SAAAl6J,EAAA0Y,GACA,GAAApQ,GAAArD,SACA,KAAAyT,UACAzT,KAAAk5T,uBAAAn+T,GACAA,EAAAsC,QAAA,SAAAknG,EAAA9+F,GACApC,EAAA81T,uBAAA1zT,GACSpC,EAAA0pT,GAAAtnT,GAAAwvJ,SAAA1wD,GAAAoyN,UAAA,EAAA1uG,UAAAx0M,EAAAw0M,cAETjoN,KAAAwrT,uBAAA/3S,IAyBAq5S,EAAAxwT,UAAAg7T,WAAA,SAAAv8T,EAAA0Y,GACA,GAAApQ,GAAArD,SACA,KAAAyT,UACA1Y,EAAAsC,QAAA,SAAAknG,EAAA9+F,GACApC,EAAA0pT,GAAAtnT,IACApC,EAAA0pT,GAAAtnT,GAAA6xT,WAAA/yN,GAAAoyN,UAAA,EAAA1uG,UAAAx0M,EAAAw0M,cAGAjoN,KAAAwrT,uBAAA/3S,IAoCAq5S,EAAAxwT,UAAAusK,MAA+B,SAAA9tK,EAAY0Y,OAC3C,KAAA1Y,cACA,KAAA0Y,UACAzT,KAAA62T,cAAA,SAAAnN,EAAyCjkT,GAChCikT,EAAA7gJ,MAAA9tK,EAAA0K,IAAAkxT,UAAA,EAAA1uG,UAAAx0M,EAAAw0M,cAETjoN,KAAAwrT,uBAAA/3S,GACAzT,KAAAg3T,gBAAAvjT,GACAzT,KAAA82T,eAAArjT,IASAq5S,EAAAxwT,UAAA88T,YAAA,WACA,MAAAp5T,MAAA6sL,SAAAtwL,IAAA,SAAAmtT,GACS,MAAAA,aAAAqF,IAAArF,EAAA3uT,MAAA,EAAAq+T,iBAQTtM,EAAAxwT,UAAA68T,uBAAA,SAAA1zT,GACA,IAAAzF,KAAA6sL,SAAAxuL,OACA,SAAAuoB,OAAA,yKAEA,KAAA5mB,KAAA+sT,GAAAtnT,GACA,SAAAmhB,OAAA,qCAAAnhB,IAQAqnT,EAAAxwT,UAAAu6T,cAAA,SAAAn/Q,GACA13C,KAAA6sL,SAAAxvL,QAAA,SAAAqsT,EAAAjkT,GAAAiyC,EAAAgyQ,EAAAjkT,MAMAqnT,EAAAxwT,UAAA46T,aAAA,WACA,GAAA7zT,GAAArD,IACAA,MAAA+jG,OAAA/jG,KAAA6sL,SAAAjvL,OAAqC,SAAA8rT,GAAwB,MAAAA,GAAAvtQ,SAAA94C,EAAAg3D,WAC7D99D,IAAA,SAAAmtT,GAAA,MAAAA,GAAA3uT,SAOA+xT,EAAAxwT,UAAA67T,aAAA,SAAAvxJ,GACA,MAAA5mK,MAAA6sL,SAAAlxK,KAAA,SAAA+tS,GAAA,MAAAA,GAAAvtQ,SAAAyqH,EAAA8iJ,MAMAoD,EAAAxwT,UAAAs8T,eAAA,WACA,GAAAv1T,GAAArD,IACAA,MAAA62T,cAAA,SAAAnN,GAAA,MAAArmT,GAAAm2T,iBAAA9P,MAOAoD,EAAAxwT,UAAA48T,uBAAA,SAAAn+T,GACAiF,KAAA62T,cAAA,SAAAnN,EAAAprT,GACA,OAAAuE,KAAA9H,EAAAuD,GACA,SAAAsoB,OAAA,kDAAAtoB,EAAA,QAQAwuT,EAAAxwT,UAAAw7T,qBAA4C,WAC5C,OAAA7+R,GAAA,EAAAxc,EAAAzc,KAAA6sL,SAAA5zJ,EAAAxc,EAAApe,OAAA46B,IAAA,CAEA,GADAxc,EAAAwc,GACAkjB,QACA,SAEA,MAAAn8C,MAAA6sL,SAAAxuL,OAAA,GAAA2B,KAAAq6D,UAMAyyP,EAAAxwT,UAAAk9T,iBAAA,SAAA9P,GACAA,EAAA2N,UAAAr3T,MACA0pT,EAAA8O,4BAAAx4T,KAAA+1T,sBAECjJ,GACDgC,IAQAc,IACA74J,QAAA02J,EACAz2J,YAAAt8J,OAAAm7H,EAAA,6BAAAi4L,OAEA6L,GAAAz9R,QAAAhV,QAAA,MAuCI4mS,GAAA,SAAAl0S,GAMJ,QAAAk0S,GAAAjwG,EAAAC,GACA,GAAAz6M,GAAAuW,EAAApd,KAAAwD,WAKA,OAJAqD,GAAAu2T,YAAA,EACAv2T,EAAAw2T,SAAA,GAAAhkM,GAAA,aACAxyH,EAAA+a,KACA,GAAAyuS,OAAAd,EAAAluG,GAAAmuG,EAAAluG,IACAz6M,EAyJC,MApKD+tT,GAAA,EAAAtD,EAAAl0S,GAaAlf,OAAAI,eAAAgzT,EAAAxxT,UAAA,aAIA0F,IAAA,iBAAAhC,MAAA45T,YACAn3T,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAgzT,EAAAxxT,UAAA,iBAIA0F,IAAA,iBAAAhC,OACAyC,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAgzT,EAAAxxT,UAAA,WAIA0F,IAAA,iBAAAhC,MAAAoe,MACA3b,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAgzT,EAAAxxT,UAAA,QAIA0F,IAAA,qBACAS,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAgzT,EAAAxxT,UAAA,YAIA0F,IAAA,iBAAAhC,MAAAoe,KAAAyuK,UACApqL,YAAA,EACKC,cAAA,IAMLorT,EAAAxxT,UAAAw8T,WAAA,SAAAtnS,GACA,GAAAnuB,GAAArD,IACA25T,IAAAvzR,KAA6B,WAC7B,GAAAxJ,GAAAv5B,EAAAy2T,eAAAtoS,EAAA0xB,KACA1xB,GAAAgiS,SAAA52R,EAAAi8R,gBAAArnS,EAAAze,KAAAye,EAAAk4R,SACAe,EAAAj5R,EAAAk4R,QAAAl4R,GACSA,EAAAk4R,QAAA8B,wBAAAvjG,WAAA,OAOT6lG,EAAAxxT,UAAA4rN,WAAA,SAAA12L,GAAA,MAAAxxB,MAAAoe,KAAApc,IAAAwvB,EAAA0xB,OAKA4qQ,EAAAxxT,UAAAy8T,cAAA,SAAAvnS,GACA,GAAAnuB,GAAArD,IACA25T,IAAAvzR,KAA6B,WAC7B,GAAAxJ,GAAAv5B,EAAAy2T,eAAAtoS,EAAA0xB,KACAtmB,IACAA,EAAAm8R,cAAAvnS,EAAAze,SAQA+6S,EAAAxxT,UAAA04T,aAAA,SAAAxjS,GACA,GAAAnuB,GAAArD,IACA25T,IAAAvzR,KAA6B,WAC7B,GAA6BxJ,GAAAv5B,EAAAy2T,eAA4BtoS,EAAA0xB,MACzDz5B,EAAA,GAAAojS,OACAhB,GAAApiS,EAAA+H,GACAoL,EAAAi8R,gBAAArnS,EAA0Cze,KAAA0W,GACjCA,EAAA+hS,wBAAAvjG,WAAA,OAOT6lG,EAAAxxT,UAAA44T,gBAAA,SAAA1jS,GACA,GAAAnuB,GAAArD,IACA25T,IAAAvzR,KAA6B,WAC7B,GAAAxJ,GAAAv5B,EAAAy2T,eAAAtoS,EAAA0xB,KACAtmB,IACAA,EAAAm8R,cAAAvnS,EAAAze,SAQA+6S,EAAAxxT,UAAA64T,aAAA,SAAA3jS,GAAA,MAAAxxB,MAAAoe,KAAApc,IAAAwvB,EAAA0xB,OAMA4qQ,EAAAxxT,UAAAy9T,YAAA,SAAAvoS,EAAAz2B,GACA,GAAAsI,GAAArD,IACA25T,IAAAvzR,KAA6B,WAC7B/iC,EAAA+a,KAAApc,IAAAwvB,EAAA,MACSyjI,SAAAl6J,MAOT+yT,EAAAxxT,UAAA24J,SAAA,SAAAl6J,GAAAiF,KAAA0pT,QAAAz0J,SAAAl6J,IAKA+yT,EAAAxxT,UAAAokN,SAAA,SAAAlH,GAGA,MAFAx5M,MAAA45T,YAAA,EACA55T,KAAA65T,SAAAtuT,KAAAiuM,IACA,GAKAs0G,EAAAxxT,UAAA09T,QAAA,WAAAh6T,KAAAi6T,aAKAnM,EAAAxxT,UAAA29T,UAA+B,SAAAl/T,OAC/B,KAAAA,UAAA8H,IACA7C,KAAAoe,KAAAyqJ,MAAA9tK,GACAiF,KAAA45T,YAAA,GAOA9L,EAAAxxT,UAAAw9T,eAAA,SAAA52Q,GAEA,MADAA,GAAAla,MACAka,EAAA7kD,OAAA2B,KAAAoe,KAAApc,IAAAkhD,GAAAljD,KAAAoe,MAEC0vS,GACDL,EACAK,IAAKt9S,aACLC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,wDACAkF,WAAuB85S,IACvB7+S,MAAAmpT,WAAA,mBAAAC,UAAA,aACA/6K,SAAA,YACavuI,SAAI,aAMjBi9S,GAAK18S,eAAA,WAA4B,QAC5BX,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAs+S,OAChFx+S,KAAApU,MAAAmU,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,OAAAplH,KAAAolH,EAAA,OAAAllH,MAAAq+S;;;;;;;AASF,GAAAoL,KACAvG,gBAAA,qMACAwG,cAAA,wRACAC,cAAA,iYACAC,aAAA,6IACAC,qBAAA,sLASAC,GAAA,WACA,QAAAA,MA0BC,MArBDA,GAAAC,qBAAA,WACA,SAAA9zS,OAAA,8LAAAwzS,GAAAvG,gBAAA,mJAAAuG,GAAAI,uBAKAC,EAAAE,uBAAA,WACA,SAAA/zS,OAAA,4MAAAwzS,GAAAC,cAAA,qGAAAD,GAAAG,eAKAE,EAAAG,qBAAA,WACA,SAAAh0S,OAAA,uUAKA6zS,EAAAI,0BAAA,WACA,SAAAj0S,OAAA,qKAAAwzS,GAAAC,cAAA,uHAAAD,GAAAG,eAECE,KASD3K,IACA/4J,QAAA02J,EACAz2J,YAAAt8J,OAAAm7H,EAAA,6BAAAm4L,OA2BIA,GAAA,SAAAp0S,GAOJ,QAAAo0S,GAAA36P,EAAAwqJ,EAAAC,GACA,GAAAz6M,GAAAuW,EAAApd,KAAAwD,WAIA,OAHAqD,GAAA6vT,QAAA7/P,EACAhwD,EAAA+xT,YAAAv3G,EACAx6M,EAAAgyT,iBAAAv3G,EACAz6M,EAWC,MAtBD+tT,GAAA,EAAApD,EAAAp0S,GAiBAo0S,EAAA1xT,UAAAy4T,iBAAA,WACA/0T,KAAAkzT,kBAAAlF,IAAAhuT,KAAAkzT,kBAAApF,KACA2M,GAAAI,6BAGC7M,GACDT,GACAS,IAAYx9S,aACZC,KAAAolH,EAAA,UAAAllH,OAAAC,SAAA,iBAAAkF,WAAAg6S,IAAAj/S,SAAA,mBAKAm9S,GAAK58S,eAAA,WAAuC,QACvCX,KAAAg9S,EAAAj9S,aAAmCC,KAAAolH,EAAa,OAAOplH,KAAAolH,EAAS,aAChEplH,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAs+S,OAChFx+S,KAAApU,MAAAmU,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,OAAAplH,KAAAolH,EAAA,OAAAllH,MAAAq+S,QAEFhB,GAAAp8S,gBACAmB,OAAAtC,KAAAolH,EAAA,MAAAllH,MAAA;;;;;;;AASA,GAAAk/S,KACA94J,QAAA42J,EACA32J,YAAAt8J,OAAAm7H,EAAA,6BAAAk4L,OAmBA+M,GAAA5+R,QAAAhV,QAAA,MA2DI6mS,GAAA,SAAAn0S,GAQJ,QAAAm0S,GAAA16P,EAAAwqJ,EAAAC,EAAAwuG,GACA,GAAAjpT,GAAAuW,EAAApd,KAAAwD,WAcA,OAVAqD,GAAAmwT,SAAA,GAAAzE,IAIA1rT,EAAA03T,aAA2B,EAC3B13T,EAAAxC,OAAA,GAAAg1H,GAAA,aACAxyH,EAAA6vT,QAAA7/P,EACAhwD,EAAAioT,eAAAztG,MACAx6M,EAAAooT,oBAAA3tG,MACAz6M,EAAAsnT,cAAA0B,EAAAhpT,EAAAipT,GACAjpT,EAuJC,MA7KD+tT,GAAA,EAAArD,EAAAn0S,GA4BAm0S,EAAAzxT,UAAAkI,YAAA,SAAAC,GACAzE,KAAAg7T,kBACAh7T,KAAA+6T,aACA/6T,KAAAi7T,gBACA,cAAAx2T,IACAzE,KAAAk7T,gBAAAz2T,GAEAwnT,EAAAxnT,EAAAzE,KAAAksT,aACAlsT,KAAAk3T,aAAAl3T,KAAAkyG,OACAlyG,KAAAksT,UAAAlsT,KAAAkyG,QAMA67M,EAAAzxT,UAAAgI,YAAA,WAAAtE,KAAAi1T,eAAAj1T,KAAAi1T,cAAA8D,cAAA/4T,OACAtF,OAAAI,eAAAizT,EAAAzxT,UAAA,WAIA0F,IAAA,iBAAAhC,MAAAwzT,UACA/wT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAizT,EAAAzxT,UAAA,QAIA0F,IAAA,WACS,MAAAhC,MAAAkzT,QAAA1I,EAAAxqT,KAAA+S,KAAA/S,KAAAkzT,UAAAlzT,KAAA+S,OAETtQ,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAizT,EAAAzxT,UAAA,iBAIA0F,IAAA,iBAAAhC,MAAAkzT,QAAAlzT,KAAAkzT,QAAA+B,cAAA,MACAxyT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAizT,EAAAzxT,UAAA,aAIA0F,IAAA,iBAAA+pT,GAAA/rT,KAAAsrT,iBACA7oT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAizT,EAAAzxT,UAAA,kBAIA0F,IAAA,WACS,MAAAgqT,GAAAhsT,KAAAyrT,sBAEThpT,YAAA,EACKC,cAAA,IAMLqrT,EAAAzxT,UAAAyuT,kBAAA,SAAAxmN,GACAvkG,KAAAksT,UAAA3nN,EACAvkG,KAAAa,OAAA0K,KAAAg5F,IAKAwpN,EAAAzxT,UAAA2+T,cAAA,WACAj7T,KAAAm7T,gBAAAn7T,KAAAo7T,mBACAp7T,KAAAi1T,cAAA6D,WAAA94T,MACAA,KAAA+6T,aAAA,GAKAhN,EAAAzxT,UAAA6+T,cAAA,WACA,OAAAn7T,KAAAkzT,YAAAlzT,KAAAyT,UAAAzT,KAAAyT,QAAA4nT,aAKAtN,EAAAzxT,UAAA8+T,iBAAA,WACA3Q,EAAAzqT,KAAAwzT,SAAAxzT,MACAA,KAAAwzT,SAAAhI,wBAAAvjG,WAAA,KAKA8lG,EAAAzxT,UAAA0+T,gBAAA,WACAh7T,KAAAm7T,iBACAn7T,KAAA+0T,mBAEA/0T,KAAA2zT,cAKA5F,EAAAzxT,UAAAy4T,iBAAA,aACA/0T,KAAAkzT,kBAAAlF,MACAhuT,KAAAkzT,kBAAA3F,IACAkN,GAAAE,yBAEA36T,KAAAkzT,kBAAAlF,KAAAhuT,KAAAkzT,kBAAApF,KACA2M,GAAAC,wBAMA3M,EAAAzxT,UAAAq3T,WAAA,WACA3zT,KAAAyT,SAAAzT,KAAAyT,QAAAV,OACA/S,KAAA+S,KAAA/S,KAAAyT,QAAAV,MACA/S,KAAAm7T,iBAAAn7T,KAAA+S,MACA0nT,GAAAG,wBAOA7M,EAAAzxT,UAAA46T,aAAA,SAAAn8T,GACA,GAAAsI,GAAArD,IACA86T,IAAA10R,KAAA,WAAA/iC,EAAAqmT,QAAAz0J,SAAAl6J,GAAA49T,uBAAA,OAMA5K,EAAAzxT,UAAA4+T,gBAAA,SAAAz2T,GACA,GAAApB,GAAArD,KACyBs7T,EAAA72T,EAAA,WAAAm0L,aACzBypB,EAAA,KAAAi5G,MAAA,UAAAA,CACAR,IAAA10R,KAAA,WACAi8K,IAAAh/M,EAAAqmT,QAAArvP,SACAh3D,EAAAqmT,QAAA1oI,WAEAqhC,GAAAh/M,EAAAqmT,QAAArvP,UACAh3D,EAAAqmT,QAAAtpS,YAIC2tS,GACDJ,EACAI,IAAKv9S,aACLC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,sDACAkF,WAAA+5S,IACah/S,SAAI,cAMjBk9S,GAAK38S,eAAA,mBACAX,KAAAg9S,EAAAj9S,aAAmCC,KAAAolH,EAAa,WAAOplH,KAAAolH,EAAS,SAChEplH,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAs+S,OAC7Ex+S,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAq+S,OAChFv+S,KAAApU,MAAAmU,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,OAAAplH,KAAAolH,EAAA,OAAAllH,MAAA8zS,QAEFsJ,GAAAn8S,gBACAmB,OAAAtC,KAAoBolH,EAAO,QAC3BwsF,aAAe5xM,KAAOolH,EAAK,MAAAllH,MAAA,cAC3BuhG,QAAAzhG,KAAiBolH,EAAO,MAAKllH,MAAA,aAC7B8C,UAAgBhD,KAAOolH,EAAA,MAAMllH,MAAA,oBAC7B9P,SAAA4P,KAAAolH,EAAA,OAAAllH,MAAA;;;;;;;AASA,GAAA4qT,IAAA,WACA,QAAAA,MAsCC,MAjCDA,GAAAC,uBAAA,WACA,SAAA50S,OAAA,+NAAAwzS,GAAAvG,kBAKA0H,EAAAE,sBAAA,WACA,SAAA70S,OAAA,qRAAAwzS,GAAAC,cAAA,sGAAAD,GAAAG,eAKAgB,EAAAG,qBAAA,WACA,SAAA90S,OAAA,4FAAAwzS,GAAAvG,kBAKA0H,EAAAI,qBAAA,WACA,SAAA/0S,OAAA,4NAAAwzS,GAAAC,gBAKAkB,EAAAK,qBAAA,WACA,SAAAh1S,OAAA,iOAAAwzS,GAAAE,gBAKAiB,EAAAM,oBAAA,WACAtzR,QAAAu8D,KAAA,qiBAECy2N,KASDjL,IACAv5J,QAAA42J,EACA32J,YAAAt8J,OAAAm7H,EAAA,6BAAAq4L,OA4CIA,GAAA,SAAAt0S,GAOJ,QAAAs0S,GAAArwG,EAAAC,EAAAwuG,GACA,GAAAjpT,GAAAuW,EAA2Bpd,KAAAwD,WAK3B,OAJAqD,GAAAxC,OAAA,GAAAg1H,GAAA,aACAxyH,EAAAioT,eAAAztG,MACAx6M,EAAAooT,oBAAA3tG,MACAz6M,EAAAsnT,cAAA0B,EAAAhpT,EAAAipT,GACAjpT,EA6EC,MAzFD+tT,GAAA,EAAAlD,EAAAt0S,GAcAlf,OAAAI,eAAAozT,EAAA5xT,UAAA,cAKAqG,IAAA,SAAA0/M,GAAAk5G,GAAAM,uBACAp5T,YAAA,EACKC,cAAA,IAMLwrT,EAAA5xT,UAAAkI,YAAA,SAAAC,GACAzE,KAAA87T,kBAAAr3T,KACAgmT,EAAAzqT,KAAAoe,KAAApe,MACAA,KAAA0pT,QAAArvP,UAAAr6D,KAAA,cAAAorT,kBACAprT,KAAA,mCAEAA,KAAAoe,KAAAotS,wBAAAvjG,WAAA,KAEAgkG,EAAAxnT,EAAAzE,KAAAksT,aACAlsT,KAAAoe,KAAA62I,SAAAj1J,KAAAkyG,OACAlyG,KAAAksT,UAAAlsT,KAAAkyG,QAGAx3G,OAAAI,eAAAozT,EAAA5xT,UAAA,QAIA0F,IAAA,qBACAS,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAozT,EAAA5xT,UAAA,aAIA0F,IAAA,iBAAA+pT,GAAA/rT,KAAAsrT,iBACA7oT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAozT,EAAA5xT,UAAA,kBAIA0F,IAAA,WACS,MAAAgqT,GAAAhsT,KAAAyrT,sBAEThpT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAozT,EAAA5xT,UAAA,WAIA0F,IAAA,iBAAAhC,MAAAoe,MACA3b,YAAA,EACKC,cAAA,IAMLwrT,EAAA5xT,UAAAyuT,kBAAA,SAAAxmN,GACAvkG,KAAAksT,UAAA3nN,EACAvkG,KAAAa,OAAA0K,KAAAg5F,IAMA2pN,EAAA5xT,UAAAw/T,kBAAA,SAAAr3T,GACA,MAAAA,GAAAjJ,eAAA,SAEC0yT,GACDP,EACAO,IAAY19S,aACZC,KAAAolH,EAAA,UAAAllH,OAAAC,SAAA,gBAAAkF,WAAAw6S,IAAAz/S,SAAA,aAKAq9S,GAAK98S,eAA4B,WAAO,QACnCX,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAs+S,OAC7Ex+S,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAq+S,OAChFv+S,KAAApU,MAAAmU,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,OAAAplH,KAAAolH,EAAA,OAAAllH,MAAA8zS,QAEFyJ,GAAqBt8S,gBACrBwM,OAAe3N,KAAAolH,EAAO,MAAKllH,MAAA,iBAC3BuhG,QAAgBzhG,KAAAolH,EAAO,MAAMllH,MAAA,aAC7B9P,SAAA4P,KAAoBolH,EAAO,OAAAllH,MAAK,mBAChC0xM,aAAA5xM,KAAAolH,EAAA,MAAAllH,MAAA;;;;;;;AASA,GAAA6/S,KACAz5J,QAAA02J,EACAz2J,YAAAt8J,OAAAm7H,EAAA,6BAAAu3L,OAsCIA,GAAA,SAAAxzS,GAMJ,QAAAwzS,GAAAgI,EAAAC,GACA,GAAAhyT,GAAAuW,EAAApd,KAAAwD,WAOA,OANAqD,GAAA+xT,cACA/xT,EAAAgyT,mBACAhyT,EAAAu2T,YAAA,EACAv2T,EAAA04T,cACA14T,EAAA+a,KAAA,KACA/a,EAAAw2T,SAAA,GAAAhkM,GAAA,aACAxyH,EAoLC,MAjMD+tT,GAAA,EAAAhE,EAAAxzS,GAmBAwzS,EAAA9wT,UAAAkI,YAAA,SAAAC,GACAzE,KAAAg8T,oBACAv3T,EAAAjJ,eAAA,UACAwE,KAAAi8T,oBACAj8T,KAAAk8T,kBACAl8T,KAAAm8T,yBAGAzhU,OAAAI,eAAAsyT,EAAA9wT,UAAA,aAIA0F,IAAA,iBAAAhC,MAAA45T,YACAn3T,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAsyT,EAAA9wT,UAAA,iBAIA0F,IAAA,iBAAAhC,OACAyC,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAsyT,EAAA9wT,UAAA,WAIA0F,IAAA,iBAAAhC,MAAAoe,MACA3b,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAsyT,EAAA9wT,UAAA,QAIA0F,IAAA,qBACAS,YAAA,EACKC,cAAA,IAML0qT,EAAuB9wT,UAAEw8T,WAAA,SAAAtnS,GACzB,GAAAqmS,GAAA73T,KAAAoe,KAAApc,IAAAwvB,EAAA0xB,KAIA,OAHAunQ,GAAAoN,EAAArmS,GACAqmS,EAAArM,wBAAAvjG,WAAA,IACAjoN,KAAA+7T,WAAA/kT,KAAAwa,GACAqmS,GAMAzK,EAAA9wT,UAAA4rN,WAAA,SAAA12L,GAAA,MAAAxxB,MAAAoe,KAAApc,IAAAwvB,EAAA0xB,OAKAkqQ,EAAA9wT,UAAAy8T,cAAA,SAAAvnS,GAAArQ,EAAAnhB,KAAA+7T,WAAAvqS,IAKA47R,EAAuB9wT,UAAE04T,aAAA,SAAAxjS,GACzB,GAAAqmS,GAAA73T,KAAAoe,KAAApc,IAAAwvB,EAAA0xB,KACA2oQ,GAAAgM,EAAArmS,GACAqmS,EAAArM,wBAAAvjG,WAAA,KAMAmlG,EAAA9wT,UAAA44T,gBAAA,SAAA1jS,KAKA47R,EAAA9wT,UAAA64T,aAAA,SAAA3jS,GAAA,MAAAxxB,MAAAoe,KAAApc,IAAAwvB,EAAA0xB,OAKAkqQ,EAAuB9wT,UAAE8/T,aAAA,SAAA5qS,GACzB,GAAAqmS,GAAA73T,KAAAoe,KAAApc,IAAAwvB,EAAA0xB,KACA2oQ,GAAAgM,EAAArmS,GACAqmS,EAAArM,wBAAAvjG,WAAA,KAMAmlG,EAAA9wT,UAAA+/T,gBAAA,SAAA7qS,KAKA47R,EAAA9wT,UAAAggU,aAAA,SAAA9qS,GAAA,MAAAxxB,MAAAoe,KAAApc,IAAAwvB,EAAA0xB,OAMAkqQ,EAAuB9wT,UAAEy9T,YAAA,SAAAvoS,EAAAz2B,GACzBiF,KAAAoe,KAAApc,IAAAwvB,EAAA0xB,MACA+xG,SAAAl6J,IAMAqyT,EAAA9wT,UAAAokN,SAAA,SAAAlH,GAGA,MAFAx5M,MAAA45T,YAAA,EACA55T,KAAA65T,SAAAtuT,KAAAiuM,IACA,GAKA4zG,EAAA9wT,UAAA09T,QAAA,WAAAh6T,KAAAi6T,aAKA7M,EAAA9wT,UAA+B29T,UAAA,SAAmBl/T,OAClD,KAAAA,UAAA8H,IACA7C,KAAAoe,KAAAyqJ,MAAA9tK,GACAiF,KAAA45T,YAAA,GAMAxM,EAAA9wT,UAAA4/T,gBAAA,WACA,GAAA74T,GAAArD,IACAA,MAAA+7T,WAAA1+T,QAA6B,SAAAm0B,GAC7B,GAAA+qS,GAAAl5T,EAAA+a,KAAApc,IAAAwvB,EAAA0xB,KACA1xB,GAAAgiS,WAAA+I,IACA7Q,EAAAl6R,EAAAgiS,SAAAhiS,GACA+qS,GACA9R,EAAA8R,EAAA/qS,GACAA,EAAAgiS,SAAA+I,KAGAv8T,KAAAoe,KAAAw5S,qBAAA3vG,WAAA,KAKAmlG,EAAA9wT,UAAA6/T,qBAAA,WACA,GAAA94T,GAAArD,IACAA,MAAAoe,KAAAo6S,4BAAA,iBAAAn1T,GAAA64T,oBACAl8T,KAAAw8T,UACAx8T,KAAAw8T,SAAAhE,4BAAA,cACAx4T,KAAAw8T,SAAAx8T,KAAAoe,MAKAgvS,EAAuB9wT,UAAE2/T,kBAAA,WACzB,GAAAQ,GAAA1Q,EAAA/rT,KAAAo1T,YACAp1T,MAAAoe,KAAA04I,UAAyB8zJ,EAAA/8H,SAAA7tL,KAAAoe,KAAA,aACzB,IAAA0e,GAAAkvR,EAAAhsT,KAAAq1T,iBACAr1T,MAAAoe,KAAAysS,eAAAD,EAAAE,cAAA9qT,KAAAoe,KAAA,oBAKAgvS,EAAA9wT,UAAA0/T,kBAAA,WACAh8T,KAAAoe,MACAm9S,GAAAG,wBAGCtO,GACDK,EACAL,IAAY58S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,cACAkF,WAAuB06S,IACvBz/S,MAAAmpT,WAAA,mBAAAC,UAAA,aACatpT,SAAI,aAMjBu8S,GAAKh8S,eAA4B,WAAO,QACnCX,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAs+S,OAChFx+S,KAAApU,MAAAmU,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,OAAAplH,KAAAolH,EAAA,OAAAllH,MAAAq+S,QAEF5B,GAAcx7S,gBACdwM,OAAA3N,KAAkBolH,EAAO,MAAAllH,MAAQ,eACjCkpT,WAAAppT,KAAAolH,EAAA;;;;;;;AAqBA,GAAA66L,KACA35J,QAAA02J,EACAz2J,YAAAt8J,OAAAm7H,EAAA,6BAAAs3L,OA8CIA,GAAA,SAAAvzS,GAOJ,QAAAuzS,GAAA95P,EAAAwqJ,EAAAC,GACA,GAAAz6M,GAAAuW,EAAApd,KAAAwD,WAIA,OAHAqD,GAAA6vT,QAAA7/P,EACAhwD,EAAA+xT,YAAAv3G,EACAx6M,EAAAgyT,iBAAAv3G,EACAz6M,EAWC,MAtBD+tT,GAAA,EAAAjE,EAAAvzS,GAiBAuzS,EAAA7wT,UAAAy4T,iBAAA,WACA7H,EAAAltT,KAAAkzT,UACAqI,GAAAI,wBAGCxO,GACDI,GACAJ,IAAY38S,aACZC,KAAAolH,EAAA,UAAAllH,OAAAC,SAAA,kBAAAkF,WAAA46S,QAKAvD,GAAK/7S,eAAA,WAAuC,QACvCX,KAAAg9S,EAAAj9S,aAAmCC,KAAAolH,EAAa,WAAOplH,KAAAolH,EAAS,OAAOplH,KAAAolH,EAAM,aAC7EplH,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAs+S,OAChFx+S,KAAApU,MAAAmU,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,OAAAplH,KAAAolH,EAAA,OAAAllH,MAAAq+S,QAEF7B,GAAcv7S,gBACdmB,OAAAtC,KAAAolH,EAAA,MAAAllH,MAAA,mBAEA,IAAA8/S,KACA15J,QAAA02J,EACAz2J,YAAAt8J,OAAAm7H,EAAA,6BAAAw3L,OAiDIA,GAAA,SAAAzzS,GAOJ,QAAAyzS,GAAAh6P,EAAAwqJ,EAAAC,GACA,GAAAz6M,GAAAuW,EAAApd,KAAAwD,WAIA,OAHAqD,GAAA6vT,QAAA7/P,EACAhwD,EAAA+xT,YAAAv3G,EACAx6M,EAAAgyT,iBAAAv3G,EACAz6M,EAqEC,MAhFD+tT,GAAA,EAAA/D,EAAAzzS,GAgBAyzS,EAAA/wT,UAAA+H,SAAgC,WAChCrE,KAAA+0T,mBACA/0T,KAAA,cAAAo8T,aAAAp8T,OAKAqtT,EAAA/wT,UAAAgI,YAAA,WACAtE,KAAAi1T,eACAj1T,KAAAi1T,cAAAoH,gBAAAr8T,OAGAtF,OAAAI,eAAAuyT,EAAA/wT,UAAA,WAIA0F,IAAA,iBAAAhC,MAAA,cAAAs8T,aAAAt8T,OACAyC,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAuyT,EAAA/wT,UAAA,iBAIA0F,IAAA,WACS,MAAAhC,MAAAkzT,QAAAlzT,KAAAkzT,QAAA,oBAETzwT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAuyT,EAAA/wT,UAAA,QAIA0F,IAAA,iBAAAwoT,GAAAxqT,KAAA+S,KAAA/S,KAAAkzT,UACAzwT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAuyT,EAAA/wT,UAAA,aAIA0F,IAAA,iBAAA+pT,GAAA/rT,KAAAo1T,cACA3yT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAuyT,EAAA/wT,UAAA,kBAIA0F,IAAA,WACS,MAAAgqT,GAAAhsT,KAAAq1T,mBAET5yT,YAAA,EACKC,cAAA,IAKL2qT,EAAA/wT,UAAAy4T,iBAAA,WACA7H,EAAAltT,KAAAkzT,UACAqI,GAAAK,wBAGCvO,GACDI,EACAJ,IAAY78S,aACZC,KAAAolH,EAAA,UAAAllH,OAAAC,SAAA,kBAAAkF,WAAA26S,QAKApD,GAAKj8S,eAAA,WAAuC,QACvCX,KAAAg9S,EAAAj9S,aAAmCC,KAAAolH,EAAa,WAAOplH,KAAAolH,EAAS,OAAOplH,KAAAolH,EAAM,aAC7EplH,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAs+S,OAChFx+S,KAAApU,MAAAmU,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,OAAAplH,KAAAolH,EAAA,OAAAllH,MAAAq+S,QAEF3B,GAAcz7S,gBACdmB,OAAAtC,KAAAolH,EAAA,MAAAllH,MAAA;;;;;;;AAiBA,GAAA4/S,KACAx5J,QAAA42J,EACA32J,YAAAt8J,OAAAm7H,EAAA,6BAAAs4L,OAqDIA,GAAA,SAAAv0S,GAQJ,QAAAu0S,GAAA96P,EAAAwqJ,EAAAC,EAAAwuG,GACA,GAAAjpT,GAAAuW,EAAApd,KAAAwD,WAOA,OANAqD,GAAAq5T,QAAA,EACAr5T,EAAAxC,OAAA,GAAAg1H,GAAA,aACAxyH,EAAA6vT,QAAA7/P,EACAhwD,EAAAioT,eAAAztG,MACAx6M,EAAAooT,oBAAA3tG,MACAz6M,EAAAsnT,cAAA0B,EAAAhpT,EAAAipT,GACAjpT,EAyGC,MAxHD+tT,GAAA,EAAAjD,EAAAv0S,GAiBAlf,OAAAI,eAAAqzT,EAAA7xT,UAAA,cAKAqG,IAAA,SAAA0/M,GAAAk5G,GAAAM,uBACAp5T,YAAA,EACKC,cAAA,IAMLyrT,EAAA7xT,UAAAkI,YAAA,SAAAC,GACAzE,KAAA08T,QACA18T,KAAAi7T,gBACAhP,EAAAxnT,EAAAzE,KAAAksT,aACAlsT,KAAAksT,UAAAlsT,KAAAkyG,MACAlyG,KAAAi1T,cAAA8E,YAAA/5T,UAAAkyG,SAMAi8M,EAAA7xT,UAAAgI,YAAA,WACAtE,KAAAi1T,eACAj1T,KAAAi1T,cAAA8D,cAAA/4T,OAOAmuT,EAAA7xT,UAAAyuT,kBAAA,SAAAxmN,GACAvkG,KAAAksT,UAAA3nN,EACAvkG,KAAAa,OAAA0K,KAAAg5F,IAEA7pG,OAAAI,eAAAqzT,EAAA7xT,UAAA,QAIA0F,IAAA,iBAAAwoT,GAAAxqT,KAAA+S,KAAA/S,KAAA,UACAyC,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAqzT,EAAA7xT,UAAA,iBAIA0F,IAAA,iBAAAhC,MAAAkzT,QAAAlzT,KAAAkzT,QAAA+B,cAAA,MACAxyT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAqzT,EAAA7xT,UAAA,aAIA0F,IAAA,iBAAA+pT,GAAA/rT,KAAAsrT,iBACA7oT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAqzT,EAAA7xT,UAAA,kBAIA0F,IAAA,WACS,MAAAgqT,GAAAhsT,KAAAyrT,sBAEThpT,YAAA,EACKC,cAAA,IAELhI,OAAAI,eAAAqzT,EAAA7xT,UAAA,WAIA0F,IAAA,iBAAAhC,MAAAwzT,UACA/wT,YAAA,EACKC,cAAA,IAKLyrT,EAAA7xT,UAAAy4T,iBAAA,aACA/0T,KAAAkzT,kBAAA/F,MACAntT,KAAAkzT,kBAAA3F,IACAgO,GAAAE,wBAEAz7T,KAAAkzT,kBAAA/F,KAAAntT,KAAAkzT,kBAAA9F,KACAptT,KAAAkzT,kBAAA7F,KACAkO,GAAAC,0BAMArN,EAAA7xT,UAAA2+T,cAAA,WACAj7T,KAAA+0T,mBACA/0T,KAAAwzT,SAAAxzT,KAAAi1T,cAAA6D,WAAA94T,MACAA,KAAA0pT,QAAArvP,UAAAr6D,KAAA,cAAAorT,kBACAprT,KAAA,mCAEAA,KAAA08T,QAAA,GAECvO,GACDR,EACAQ,IAAY39S,aACZC,KAAAolH,EAAA,UAAAllH,OAAAC,SAAA,oBAAAkF,WAAAy6S,QAKApC,GAAK/8S,eAAA,WAAuC,QACvCX,KAAAg9S,EAAAj9S,aAAmCC,KAAAolH,EAAa,WAAOplH,KAAAolH,EAAS,OAAOplH,KAAAolH,EAAM,aAC7EplH,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAs+S,OAC7Ex+S,KAAApU,MAAAmU,aAA4BC,KAAOolH,EAAA,WAAaplH,KAAOolH,EAAA,OAASplH,KAAOolH,EAAA,OAAMllH,MAAAq+S,OAChFv+S,KAAApU,MAAAmU,aAAAC,KAAAolH,EAAA,WAAAplH,KAAAolH,EAAA,OAAAplH,KAAAolH,EAAA,OAAAllH,MAAA8zS,QAEF0J,GAAcv8S,gBACdmB,OAAetC,KAAAolH,EAAO,MAAKllH,MAAA,qBAC3BuhG,QAAgBzhG,KAAAolH,EAAO,MAAMllH,MAAA,aAC7B9P,SAAA4P,KAAoBolH,EAAO,OAAAllH,MAAK,mBAChC0xM,aAAA5xM,KAAAolH,EAAA,MAAAllH,MAAA;;;;;;;AASA,GAAAwgT,KACAp6J,QAAAk4J,EACAj4J,YAAAt8J,OAAAm7H,EAAA,6BAAA+4L,MACA33J,OAAA,GAEA65J,IACA/5J,QAAAk4J,EACAj4J,YAAAt8J,OAAAm7H,EAAA,6BAAA04L,MACAt3J,OAAA,GAcA23J,GAAA,WACA,QAAAA,MA+BC,MA7BDl0T,QAAAI,eAAA8zT,EAAAtyT,UAAA,YAIA0F,IAAA,iBAAAhC,MAAA28T,WAKAh6T,IAAA,SAAA5H,GACAiF,KAAA28T,UAAA,MAAA5hU,IAAA,IAAAA,GAAA,GAAAA,GAAA,QACAiF,KAAAy4T,WACSz4T,KAAAy4T,aAETh2T,YAAA,EACKC,cAAA,IAMLksT,EAAAtyT,UAAAkmD,SAAA,SAAArpC,GACA,MAAAnZ,MAAAmvH,SAAAy7L,EAAAz7L,SAAAh2G,GAAA,MAMAy1S,EAAAtyT,UAAAivT,0BAAA,SAAAv9R,GAAAhuB,KAAAy4T,UAAAzqS,GACC4gS,IAEDA,IAAYp+S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,yIACAkF,WAAuBq7S,IACVpgT,MAAI6rT,kBAAA,4BAMjBhO,GAAAx9S,eAAA,qBACAw9S,GAAkBh9S,gBAClBu9G,WAAA1+G,KAAAolH,EAAA,QAcA,IAAI04L,IAAA,SAAA30S,GAEJ,QAAA20S,KACA,cAAA30S,KAAAhQ,MAAA5J,KAAA6J,YAAA7J,KASC,MAXDoxT,GAAA,EAAA7C,EAAA30S,GAQA20S,EAAAjyT,UAAAkmD,SAAA,SAAArpC,GACA,MAAAnZ,MAAAmvH,SAAAy7L,EAAAkH,aAAA34S,GAAA,MAECo1S,GACDK,GACAL,IAAY/9S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,sIACAkF,WAAuBg7S,IACV//S,MAAI6rT,kBAAA,4BAMjBrO,GAAAn9S,eAAA,oBAIA,IAAA2/S,KACAh6J,QAAAk4J,EACAj4J,YAAAt8J,OAAAm7H,EAAA,6BAAA24L,MACAv3J,OAAA,GAgBAu3J,GAAA,WACA,QAAAA,MA2BC,MAzBD9zT,QAAAI,eAAA0zT,EAAAlyT,UAAA,SAKAqG,IAAA,SAAA5H,GACAiF,KAAA68T,SAAA,KAAA9hU,IAAA,IAAAA,GAAA,SAAAA,EACAiF,KAAAy4T,WACSz4T,KAAAy4T,aAETh2T,YAAA,EACKC,cAAA,IAML8rT,EAAAlyT,UAAAkmD,SAAA,SAAArpC,GACA,MAAAnZ,MAAA68T,SAAAjS,EAAAxnO,MAAAjqE,GAAA,MAMAq1S,EAAAlyT,UAAAivT,0BAAA,SAAAv9R,GAAAhuB,KAAAy4T,UAAAzqS,GACCwgS,IAEDA,IAAYh+S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,iEACakF,WAAIi7S,QAMjBvC,GAAAp9S,eAAA,qBACAo9S,GAAe58S,gBACfwxE,QAAA3yE,KAAAolH,EAAA,QASA,IAAAo7L,KACAl6J,QAAAk4J,EACAj4J,YAAAt8J,OAAAm7H,EAAA,6BAAA64L,MACAz3J,OAAA,GAQAy3J,GAAA,WACA,QAAAA,MA+BC,MAzBDA,GAAApyT,UAAAkI,YAAA,SAAAC,GACA,aAAAA,KACAzE,KAAA88T,mBACA98T,KAAAy4T,WACAz4T,KAAAy4T,cAOA/J,EAAApyT,UAAAkmD,SAAA,SAAArpC,GACA,aAAAnZ,KAAA2xD,UAAA,KAAA3xD,KAAA+8T,WAAA5jT,IAMAu1S,EAAApyT,UAAAivT,0BAAA,SAAAv9R,GAAAhuB,KAAAy4T,UAAAzqS,GAIA0gS,EAAApyT,UAAAwgU,iBAAA,WACA98T,KAAA+8T,WAAAnS,EAAAx5C,UAAAlwO,SAAAlhC,KAAA2xD,UAAA,MAEC+8P,IAEDA,IAAYl+S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,6EACAkF,WAAuBm7S,IACVlgT,MAAIisT,mBAAA,oCAMjBtO,GAAAt9S,eAAA,qBACAs9S,GAAmB98S,gBACnB+/C,YAAAlhD,KAAAolH,EAAA,QASA,IAAAm7L,KACAj6J,QAAAk4J,EACAj4J,YAAAt8J,OAAAm7H,EAAA,6BAAA44L,MACAx3J,OAAA,GASAw3J,GAAA,WACA,QAAAA,MA+BC,MAzBDA,GAAAnyT,UAAAkI,YAAA,SAAAC,GACA,aAAAA,KACAzE,KAAA88T,mBACA98T,KAAAy4T,WACAz4T,KAAAy4T,cAOAhK,EAAAnyT,UAAAkmD,SAAA,SAAArpC,GACA,aAAAnZ,KAAAyxD,UAAAzxD,KAAA+8T,WAAA5jT,GAAA,MAMAs1S,EAAAnyT,UAAAivT,0BAAA,SAAAv9R,GAAAhuB,KAAAy4T,UAAAzqS,GAIAygS,EAAAnyT,UAAAwgU,iBAAA,WACA98T,KAAA+8T,WAAAnS,EAAAqH,UAAA/wR,SAAAlhC,KAAAyxD,UAAA,MAECg9P,IAEDA,IAAYj+S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,6EACAkF,WAAuBk7S,IACVjgT,MAAIksT,mBAAA,oCAMjBxO,GAAAr9S,eAAA,qBACAq9S,GAAmB78S,gBACnB6/C,YAAAhhD,KAAAolH,EAAA,QAEA,IAAAq7L,KACAn6J,QAAAk4J,EACAj4J,YAAAt8J,OAAAm7H,EAAA,6BAAA84L,MACA13J,OAAA,GAeA03J,GAAA,WACA,QAAAA,MA2BC,MArBDA,GAAAryT,UAAAkI,YAAA,SAAAC,GACA,WAAAA,KACAzE,KAAA88T,mBACA98T,KAAAy4T,WACAz4T,KAAAy4T,cAOA9J,EAAAryT,UAAAkmD,SAAA,SAAArpC,GAAA,MAAAnZ,MAAA+8T,WAAA5jT,IAKAw1S,EAAAryT,UAAAivT,0BAAA,SAAAv9R,GAAAhuB,KAAAy4T,UAAAzqS,GAIA2gS,EAAAryT,UAAAwgU,iBAAA,WAAA98T,KAAA+8T,WAAAnS,EAAAvvN,QAAAr7F,KAAAq7F,UACCszN,IAEDA,IAAYn+S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAA,uEACAkF,WAAuBo7S,IACVngT,MAAImsT,iBAAA,gCAMjBvO,GAAAv9S,eAAA,qBACAu9S,GAAiB/8S,gBACjBypF,UAAA5qF,KAAAolH,EAAA;;;;;;;AA6BA,GAAAg5L,IAAA,WACA,QAAAA,MA+EC,MApEDA,GAAAvyT,UAAAmtB,MAA+B,SAAA0zS,EAAcC,OAC7C,KAAAA,IAAyBA,EAAA,KACzB,IAAyBvwI,GAAA7sL,KAAAq9T,gBAAAF,GACArmK,EAAA,MAAAsmK,IAAA,eACzBvS,EAAA,MAAAuS,IAAA,mBACA,WAAAvQ,IAAAhgI,EAAA/1B,EAAA+zJ,IAcAgE,EAAAvyT,UAAAotT,QAAA,SAAA6O,EAAAzhK,EAAA+zJ,GACA,UAAAkE,IAAAwJ,EAAAzhK,EAAA+zJ,IAUAgE,EAAAvyT,UAAA6zB,MAAA,SAAAgtS,EAAArmK,EAAA+zJ,GACA,GAAAxnT,GAAArD,KACA6sL,EAAAswI,EAAA5gU,IAAA,SAAA4c,GAAA,MAAA9V,GAAAi6T,eAAAnkT,IACA,WAAA2zS,IAAAjgI,EAAA/1B,EAAA+zJ,IAOAgE,EAAAvyT,UAAA+gU,gBAAA,SAAAF,GACA,GAAA95T,GAAArD,KACA6sL,IAIA,OAHAnyL,QAAAusB,KAAAk2S,GAAA9/T,QAAA,SAAA47T,GACSpsI,EAAAosI,GAAA51T,EAAAi6T,eAAAH,EAAAlE,MAETpsI,GAOAgiI,EAAAvyT,UAAAghU,eAAA,SAAAC,GACA,GAAAA,YAAAxO,KAAAwO,YAAA1Q,KACA0Q,YAAAzQ,IACA,MAAAyQ,EAEA,IAAAlhU,MAAAo/F,QAA6B8hO,GAAA,CAC7B,GAA6BxiU,GAAAwiU,EAAA,GACAzmK,EAAAymK,EAAAl/T,OAAA,EAAAk/T,EAAA,QAC7B1S,EAAA0S,EAAAl/T,OAAA,EAAAk/T,EAAA,OACA,OAAAv9T,MAAA0pT,QAAA3uT,EAAA+7J,EAAA+zJ,GAGA,MAAA7qT,MAAA0pT,QAAA6T,IAGC1O,IAEDA,IAAYr+S,aACZC,KAAAolH,EAAA,aAKAg5L,GAAAz9S,eAAA;;;;;;;AAgBA,GAAAy9B,IAAA,GAAAgnF,GAAA,iBAqBAk6L,GAAA,WACA,QAAAA,MAEC,MAAAA,KAEDA,IAAYv/S,aACZC,KAAAolH,EAAA,UAAAllH,OACAC,SAAuB,+CACVG,MAAIysT,WAAA,QAMjBzN,GAAA3+S,eAAA;;;;;;;AAQA,GAAAk+S,KACAS,GACA3B,GACAwC,GACAlE,EACAuD,EACAI,GACA7C,EACAa,GACAC,GACAL,GACAL,GACAC,GACAe,GACAF,GACAD,GACAE,GACAJ,GACAC,IAEAe,IAAAxB,GAAAC,GAAAF,IACAuB,IAAAnB,GAAAd,GAAAe,GAAAhB,GAAAE,IAIA+B,GAAA,WACA,QAAAA,MAEC,MAAAA,KAEDA,IAAY5+S,aACZC,KAAAolH,EAAA,SAAAllH,OACAyB,aAAAk9S,GACa19T,QAAI09T,OAMjBF,GAAAh+S,eAAA;;;;;;;AAYA,GAAA89S,IAAA,WACA,QAAAA,MAEC,MAAAA,KAEDA,IAAY1+S,aACZC,KAAAolH,EAAA,SAAAllH,OACAyB,aAAAm9S,GACAz5S,WAAAq6S,IACav+T,SAAIw9T,GAAAG,QAMjBL,GAAA99S,eAAA,oBAKA,IAAA+9S,IAAA,WACA,QAAAA,MAEC,MAAAA,KAEDA,IAAY3+S,aACZC,KAAAolH,EAAA,SAAAllH,OACAyB,cAAAi9S,IACAv5S,WAAA+4S,GAAAsB,IACav+T,SAAIw9T,GAAAC,QAMjBF,GAAA/9S,eAAA,sB3hBs4uEMgqD,GACA,SAAUzpE,EAAQsI,EAAqBC,GAE7C,YAC+BA,GAAoBE,EAAEH,EAAqB,IAAK,WAAa,MAAOwjU,IAC9E,IAAI9lT,GAA8Czd,EAAoB,GAClE8mJ,EAA6C9mJ,EAAoB,IAEtF6e,GAD0E7e,EAAoB8d,EAAEgpI,GAClFhhJ,MAAQA,KAAK+Y,YAAe,SAAUvI,EAAYwI,EAAQC,EAAKC,GAC7E,GAA2H9e,GAAvH+e,EAAItP,UAAUxL,OAAQ+a,EAAID,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOxe,OAAO2e,yBAAyBL,EAAQC,GAAOC,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAAS/I,EAAYwI,EAAQC,EAAKC,OACpH,KAAK,GAAI5a,GAAIkS,EAAWnS,OAAS,EAAGC,GAAK,EAAGA,KAASlE,EAAIoW,EAAWlS,MAAI8a,GAAKD,EAAI,EAAI/e,EAAEgf,GAAKD,EAAI,EAAI/e,EAAE4e,EAAQC,EAAKG,GAAKhf,EAAE4e,EAAQC,KAASG,EAChJ,OAAOD,GAAI,GAAKC,GAAK1e,OAAOI,eAAeke,EAAQC,EAAKG,GAAIA,IAE5DI,EAAcxZ,MAAQA,KAAKwZ,YAAe,SAAUC,EAAGC,GACvD,GAAuB,gBAAZJ,UAAoD,kBAArBA,SAAQK,SAAyB,MAAOL,SAAQK,SAASF,EAAGC,I4hB7z6EtG+jT,EAAA,W5hBk06EA,Q4hBr06EQA,KACRz9T,KAAA09T,YAAc,GAAG18K,GAAgC,QAEhChhJ,KAAA+mL,eAAA/mL,KAAA09T,YAAA5mM,eAKpB,M5hBi06EG2mM,G4hBn06ESnhU,UAAY4e,cAAY,SAAA8rK,GAChChnL,KAAA09T,YAAA9hP,KAAAorG,I5hBq06EDy2I,E4hB906EH1kT,G5hB+06EOre,OAAOid,EAAwD,c4hB906E1D6B,EASZ,yBAADikT,S5hB+06EG","file":"js/entry.b2293883c5a18e5bdfd4.js","sourcesContent":["webpackJsonp([1],{\n\n/***/ 106:\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n\n/***/ 107:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"reducingMappings\":{\"CD\":{\"CD-KG\":\"CD-BN\",\"CD-KL\":\"CD-BN\",\"CD-MN\":\"CD-BN\",\"CD-KS\":\"CD-KW\",\"CD-KC\":\"CD-KW\",\"CD-KE\":\"CD-KE\",\"CD-LO\":\"CD-KE\",\"CD-SA\":\"CD-KE\",\"CD-IT\":\"CD-OR\",\"CD-HU\":\"CD-OR\",\"CD-TO\":\"CD-OR\",\"CD-BU\":\"CD-OR\",\"CD-NU\":\"CD-EQ\",\"CD-MO\":\"CD-EQ\",\"CD-SU\":\"CD-EQ\",\"CD-EQ\":\"CD-EQ\",\"CD-TU\":\"CD-EQ\",\"CD-TA\":\"CD-KA\",\"CD-HL\":\"CD-KA\",\"CD-LU\":\"CD-KA\",\"CD-HK\":\"CD-KA\"},\"CN\":{\"CN-NM\":\"CN-15\",\"CN-GX\":\"CN-45\",\"CN-XZ\":\"CN-54\",\"CN-NX\":\"CN-64\",\"CN-XJ\":\"CN-65\",\"CN-BJ\":\"CN-11\",\"CN-TJ\":\"CN-12\",\"CN-SH\":\"CN-31\",\"CN-CQ\":\"CN-50\",\"CN-HE\":\"CN-13\",\"CN-SX\":\"CN-14\",\"CN-LN\":\"CN-21\",\"CN-JL\":\"CN-22\",\"CN-HL\":\"CN-23\",\"CN-JS\":\"CN-32\",\"CN-ZJ\":\"CN-33\",\"CN-AH\":\"CN-34\",\"CN-FJ\":\"CN-35\",\"CN-JX\":\"CN-36\",\"CN-SD\":\"CN-37\",\"CN-HA\":\"CN-41\",\"CN-HB\":\"CN-42\",\"CN-HN\":\"CN-43\",\"CN-GD\":\"CN-44\",\"CN-HI\":\"CN-46\",\"CN-SC\":\"CN-51\",\"CN-GZ\":\"CN-52\",\"CN-YN\":\"CN-53\",\"CN-SN\":\"CN-61\",\"CN-GS\":\"CN-62\",\"CN-QH\":\"CN-63\",\"CN-TW\":\"CN-71\",\"CN-HK\":\"CN-91\",\"CN-MO\":\"CN-92\"},\"CZ\":{\"CZ-31\":\"CZ-JC\",\"CZ-64\":\"CZ-JM\",\"CZ-41\":\"CZ-KA\",\"CZ-52\":\"CZ-KR\",\"CZ-51\":\"CZ-LI\",\"CZ-80\":\"CZ-O\",\"CZ-71\":\"CZ-OL\",\"CZ-53\":\"CZ-PA\",\"CZ-32\":\"CZ-PL\",\"CZ-20\":\"CZ-ST\",\"CZ-42\":\"CZ-US\",\"CZ-63\":\"CZ-VY\",\"CZ-72\":\"CZ-ZL\",\"CZ-10\":\"CZ-PR\"},\"LU\":{\"LU-CL\":\"LU-D\",\"LU-DI\":\"LU-D\",\"LU-RD\":\"LU-D\",\"LU-VD\":\"LU-D\",\"LU-WI\":\"LU-D\",\"LU-EC\":\"LU-G\",\"LU-GR\":\"LU-G\",\"LU-RM\":\"LU-G\",\"LU-CA\":\"LU-L\",\"LU-ES\":\"LU-L\",\"LU-LU\":\"LU-L\",\"LU-ME\":\"LU-L\"}},\"sharingMapping\":{\"FR\":{\"FR-ARA\":[\"FR-C\",\"FR-V\"],\"FR-BFC\":[\"FR-D\",\"FR-I\"],\"FR-BRE\":[\"FR-E\"],\"FR-COR\":[\"FR-H\"],\"FR-CVL\":[\"FR-F\"],\"FR-HDF\":[\"FR-O\",\"FR-S\"],\"FR-GES\":[\"FR-A\",\"FR-G\",\"FR-M\"],\"FR-IDF\":[\"FR-J\"],\"FR-OCC\":[\"FR-K\",\"FR-N\"],\"FR-NAQ\":[\"FR-B\",\"FR-L\",\"FR-T\"],\"FR-NOR\":[\"FR-P\",\"FR-Q\"],\"FR-PAC\":[\"FR-U\"],\"FR-PDL\":[\"FR-R\"]},\"IE\":{\"IE-C\":[\"IE-G\",\"IE-LM\",\"IE-MO\",\"IE-RN\",\"IE-SO\"],\"IE-L\":[\"IE-CW\",\"IE-D\",\"IE-KE\",\"IE-KK\",\"IE-LD\",\"IE-LH\",\"IE-LS\",\"IE-MH\",\"IE-OY\",\"IE-WH\",\"IE-WW\",\"IE-WX\"],\"IE-M\":[\"IE-CE\",\"IE-CO\",\"IE-KY\",\"IE-LK\",\"IE-TA\",\"IE-WD\"],\"IE-U\":[\"IE-CN\",\"IE-DL\",\"IE-MN\"]}},\"skippingSet\":{\"AS\":true,\"BM\":true,\"CI\":true,\"CK\":true,\"HK\":true,\"KE\":true,\"MP\":true,\"MV\":true,\"NC\":true,\"OM\":true,\"PF\":true,\"PM\":true,\"PS\":true,\"RS\":true,\"SG\":true,\"SJ\":true,\"TJ\":true,\"TK\":true,\"TV\":true,\"TW\":true,\"VI\":true,\"WF\":true}}\n\n/***/ }),\n\n/***/ 108:\n/***/ (function(module, exports) {\n\n;\n;\n;\n\n\n/***/ }),\n\n/***/ 133:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = isPlayerV2;\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = isPlayerReadResponseV2;\nfunction isPlayerV2(d) { return d != null && 'api_version' in d && d.api_version === '2'; }\nfunction isPlayerReadResponseV2(d) { return isPlayerV2(d); }\n\n\n/***/ }),\n\n/***/ 1336:\n/***/ (function(module, exports, __webpack_require__) {\n\nif (true)\n    module.exports = __webpack_require__(1337);\nif (false)\n    module.exports = require('./entry/dev.ts');\n\n\n/***/ }),\n\n/***/ 1337:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n\n// EXTERNAL MODULE: ./node_modules/@angular/core/@angular/core.es5.js\nvar core_es5 = __webpack_require__(0);\n\n// EXTERNAL MODULE: ./node_modules/@angular/platform-browser-dynamic/@angular/platform-browser-dynamic.es5.js + 1 modules\nvar platform_browser_dynamic_es5 = __webpack_require__(232);\n\n// CONCATENATED MODULE: ./node_modules/@angularclass/bootloader/esm/index.js\n/*\n * @AngularClass\n */\nfunction bootloader(main) {\n    switch (document.readyState) {\n        case 'loading':\n            document.addEventListener('DOMContentLoaded', function () { return main(); });\n            break;\n        case 'interactive':\n        case 'complete':\n        default:\n            main();\n    }\n}\n//# sourceMappingURL=index.js.map\n// EXTERNAL MODULE: ./src/app/app.module.ts + 289 modules\nvar app_module = __webpack_require__(343);\n\n// CONCATENATED MODULE: ./src/entry/prod.ts\n/* harmony export (immutable) */ __webpack_exports__[\"main\"] = main;\n\n\n\n\nfunction main() {\n    return Object(platform_browser_dynamic_es5[\"a\" /* platformBrowserDynamic */])().bootstrapModule(app_module[\"a\" /* AppModule */]);\n}\nObject(core_es5[\"enableProdMode\"])();\nbootloader(main);\n\n\n/***/ }),\n\n/***/ 1338:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Hot Module Replacement\n__export(__webpack_require__(1339));\n__export(__webpack_require__(1340));\n__export(__webpack_require__(1341));\n//# sourceMappingURL=index.js.map\n\n/***/ }),\n\n/***/ 1339:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Hot Module Replacement\nfunction identity(val) {\n    return val;\n}\nfunction bootloader(main, before, after) {\n    if (typeof main === 'object') {\n        var _main = main.main;\n        before = main.before;\n        after = main.after;\n        main = _main;\n    }\n    before = before || identity;\n    after = after || identity;\n    var readyState = document.readyState;\n    function __domReadyHandler() {\n        document.removeEventListener('DOMContentLoaded', __domReadyHandler);\n        after(main(before(readyState)));\n    }\n    switch (readyState) {\n        case 'loading':\n            document.addEventListener('DOMContentLoaded', __domReadyHandler);\n            break;\n        case 'interactive':\n        case 'complete':\n        default:\n            after(main(before(readyState)));\n    }\n}\nexports.bootloader = bootloader;\n// create new host elements and remove the old elements\nfunction createNewHosts(cmps) {\n    var components = Array.prototype.map.call(cmps, function (componentNode) {\n        var newNode = document.createElement(componentNode.tagName);\n        var parentNode = componentNode.parentNode;\n        var currentDisplay = newNode.style.display;\n        newNode.style.display = 'none';\n        parentNode.insertBefore(newNode, componentNode);\n        function removeOldHost() {\n            newNode.style.display = currentDisplay;\n            try {\n                parentNode.removeChild(componentNode);\n            }\n            catch (e) { }\n        }\n        return removeOldHost;\n    });\n    return function removeOldHosts() {\n        components.forEach(function (removeOldHost) { return removeOldHost(); });\n    };\n}\nexports.createNewHosts = createNewHosts;\n// remove old styles\nfunction removeNgStyles() {\n    var docHead = document.head;\n    var _styles = docHead.querySelectorAll('style');\n    var styles = Array.prototype.slice.call(_styles);\n    styles\n        .filter(function (style) { return style.innerText.indexOf('_ng') !== -1; })\n        .map(function (el) { return docHead.removeChild(el); });\n}\nexports.removeNgStyles = removeNgStyles;\n// get input values\nfunction getInputValues() {\n    var _inputs = document.querySelectorAll('input');\n    var inputs = Array.prototype.slice.call(_inputs);\n    return inputs.map(function (input) { return input.value; });\n}\nexports.getInputValues = getInputValues;\n// set input values\nfunction setInputValues(_inputs) {\n    var inputs = document.querySelectorAll('input');\n    if (_inputs && inputs.length === _inputs.length) {\n        _inputs.forEach(function (value, i) {\n            var el = inputs[i];\n            el.value = value;\n            el.dispatchEvent(new CustomEvent('input', { detail: el.value }));\n        });\n        // clear array\n        _inputs.length = 0;\n    }\n}\nexports.setInputValues = setInputValues;\n// get/set input values\nfunction createInputTransfer() {\n    var _inputs = getInputValues();\n    return function restoreInputValues() {\n        return setInputValues(_inputs);\n    };\n}\nexports.createInputTransfer = createInputTransfer;\n//# sourceMappingURL=helpers.js.map\n\n/***/ }),\n\n/***/ 134:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar core_1 = __webpack_require__(0);\r\nvar core_2 = __webpack_require__(0);\r\nvar common_1 = __webpack_require__(5);\r\nvar common_2 = __webpack_require__(5);\r\nvar tween = __webpack_require__(1410);\r\nvar VirtualScrollerComponent = (function () {\r\n    function VirtualScrollerComponent(element, renderer, zone, changeDetectorRef, platformId, scrollThrottlingTime, scrollDebounceTime, scrollAnimationTime, scrollbarWidth, scrollbarHeight, checkResizeInterval, resizeBypassRefreshThreshold, modifyOverflowStyleOfParentScroll, stripedTable) {\r\n        this.element = element;\r\n        this.renderer = renderer;\r\n        this.zone = zone;\r\n        this.changeDetectorRef = changeDetectorRef;\r\n        this.window = window;\r\n        this.executeRefreshOutsideAngularZone = false;\r\n        this._enableUnequalChildrenSizes = false;\r\n        this.useMarginInsteadOfTranslate = false;\r\n        this.ssrViewportWidth = 1920;\r\n        this.ssrViewportHeight = 1080;\r\n        this._bufferAmount = 0;\r\n        this.scrollAnimationTime = 750;\r\n        this.resizeBypassRefreshThreshold = 5;\r\n        this._checkResizeInterval = 1000;\r\n        this._items = [];\r\n        this.compareItems = function (item1, item2) { return item1 === item2; };\r\n        this.update = new core_1.EventEmitter();\r\n        this.vsUpdate = new core_1.EventEmitter();\r\n        this.change = new core_1.EventEmitter();\r\n        this.vsChange = new core_1.EventEmitter();\r\n        this.start = new core_1.EventEmitter();\r\n        this.vsStart = new core_1.EventEmitter();\r\n        this.end = new core_1.EventEmitter();\r\n        this.vsEnd = new core_1.EventEmitter();\r\n        this.calculatedScrollbarWidth = 0;\r\n        this.calculatedScrollbarHeight = 0;\r\n        this.padding = 0;\r\n        this.previousViewPort = {};\r\n        this.cachedPageSize = 0;\r\n        this.previousScrollNumberElements = 0;\r\n        this.isAngularUniversalSSR = common_1.isPlatformServer(platformId);\r\n        this.scrollThrottlingTime = typeof (scrollThrottlingTime) === 'number' ? scrollThrottlingTime : 0;\r\n        this.scrollDebounceTime = typeof (scrollDebounceTime) === 'number' ? scrollDebounceTime : 0;\r\n        if (typeof (scrollAnimationTime) === 'number') {\r\n            this.scrollAnimationTime = scrollAnimationTime;\r\n        }\r\n        if (typeof (scrollbarWidth) === 'number') {\r\n            this.scrollbarWidth = scrollbarWidth;\r\n        }\r\n        if (typeof (scrollbarHeight) === 'number') {\r\n            this.scrollbarHeight = scrollbarHeight;\r\n        }\r\n        if (typeof (checkResizeInterval) === 'number') {\r\n            this.checkResizeInterval = checkResizeInterval;\r\n        }\r\n        if (typeof (resizeBypassRefreshThreshold) === 'number') {\r\n            this.resizeBypassRefreshThreshold = resizeBypassRefreshThreshold;\r\n        }\r\n        this.modifyOverflowStyleOfParentScroll = true;\r\n        if (typeof (modifyOverflowStyleOfParentScroll) === 'boolean') {\r\n            this.modifyOverflowStyleOfParentScroll = modifyOverflowStyleOfParentScroll;\r\n        }\r\n        this.stripedTable = false;\r\n        if (typeof (stripedTable) === 'boolean') {\r\n            this.stripedTable = stripedTable;\r\n        }\r\n        this.horizontal = false;\r\n        this.resetWrapGroupDimensions();\r\n    }\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"viewPortInfo\", {\r\n        get: function () {\r\n            var pageInfo = this.previousViewPort || {};\r\n            return {\r\n                startIndex: pageInfo.startIndex || 0,\r\n                endIndex: pageInfo.endIndex || 0,\r\n                scrollStartPosition: pageInfo.scrollStartPosition || 0,\r\n                scrollEndPosition: pageInfo.scrollEndPosition || 0,\r\n                maxScrollPosition: pageInfo.maxScrollPosition || 0,\r\n                startIndexWithBuffer: pageInfo.startIndexWithBuffer || 0,\r\n                endIndexWithBuffer: pageInfo.endIndexWithBuffer || 0\r\n            };\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"enableUnequalChildrenSizes\", {\r\n        get: function () {\r\n            return this._enableUnequalChildrenSizes;\r\n        },\r\n        set: function (value) {\r\n            if (this._enableUnequalChildrenSizes === value) {\r\n                return;\r\n            }\r\n            this._enableUnequalChildrenSizes = value;\r\n            this.minMeasuredChildWidth = undefined;\r\n            this.minMeasuredChildHeight = undefined;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"bufferAmount\", {\r\n        get: function () {\r\n            return Math.max(this._bufferAmount, this.enableUnequalChildrenSizes ? 5 : 0);\r\n        },\r\n        set: function (value) {\r\n            this._bufferAmount = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"scrollThrottlingTime\", {\r\n        get: function () {\r\n            return this._scrollThrottlingTime;\r\n        },\r\n        set: function (value) {\r\n            this._scrollThrottlingTime = value;\r\n            this.updateOnScrollFunction();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"scrollDebounceTime\", {\r\n        get: function () {\r\n            return this._scrollDebounceTime;\r\n        },\r\n        set: function (value) {\r\n            this._scrollDebounceTime = value;\r\n            this.updateOnScrollFunction();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    VirtualScrollerComponent.prototype.updateOnScrollFunction = function () {\r\n        var _this = this;\r\n        if (this.scrollDebounceTime) {\r\n            this.onScroll = this.debounce(function () {\r\n                _this.refresh_internal(false);\r\n            }, this.scrollDebounceTime);\r\n        }\r\n        else if (this.scrollThrottlingTime) {\r\n            this.onScroll = this.throttleTrailing(function () {\r\n                _this.refresh_internal(false);\r\n            }, this.scrollThrottlingTime);\r\n        }\r\n        else {\r\n            this.onScroll = function () {\r\n                _this.refresh_internal(false);\r\n            };\r\n        }\r\n    };\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"checkResizeInterval\", {\r\n        get: function () {\r\n            return this._checkResizeInterval;\r\n        },\r\n        set: function (value) {\r\n            if (this._checkResizeInterval === value) {\r\n                return;\r\n            }\r\n            this._checkResizeInterval = value;\r\n            this.addScrollEventHandlers();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"items\", {\r\n        get: function () {\r\n            return this._items;\r\n        },\r\n        set: function (value) {\r\n            if (value === this._items) {\r\n                return;\r\n            }\r\n            this._items = value || [];\r\n            this.refresh_internal(true);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"horizontal\", {\r\n        get: function () {\r\n            return this._horizontal;\r\n        },\r\n        set: function (value) {\r\n            this._horizontal = value;\r\n            this.updateDirection();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    VirtualScrollerComponent.prototype.revertParentOverscroll = function () {\r\n        var scrollElement = this.getScrollElement();\r\n        if (scrollElement && this.oldParentScrollOverflow) {\r\n            scrollElement.style['overflow-y'] = this.oldParentScrollOverflow.y;\r\n            scrollElement.style['overflow-x'] = this.oldParentScrollOverflow.x;\r\n        }\r\n        this.oldParentScrollOverflow = undefined;\r\n    };\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"parentScroll\", {\r\n        get: function () {\r\n            return this._parentScroll;\r\n        },\r\n        set: function (value) {\r\n            if (this._parentScroll === value) {\r\n                return;\r\n            }\r\n            this.revertParentOverscroll();\r\n            this._parentScroll = value;\r\n            this.addScrollEventHandlers();\r\n            var scrollElement = this.getScrollElement();\r\n            if (this.modifyOverflowStyleOfParentScroll && scrollElement !== this.element.nativeElement) {\r\n                this.oldParentScrollOverflow = { x: scrollElement.style['overflow-x'], y: scrollElement.style['overflow-y'] };\r\n                scrollElement.style['overflow-y'] = this.horizontal ? 'visible' : 'auto';\r\n                scrollElement.style['overflow-x'] = this.horizontal ? 'auto' : 'visible';\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    VirtualScrollerComponent.prototype.ngOnInit = function () {\r\n        this.addScrollEventHandlers();\r\n    };\r\n    VirtualScrollerComponent.prototype.ngOnDestroy = function () {\r\n        this.removeScrollEventHandlers();\r\n        this.revertParentOverscroll();\r\n    };\r\n    VirtualScrollerComponent.prototype.ngOnChanges = function (changes) {\r\n        var indexLengthChanged = this.cachedItemsLength !== this.items.length;\r\n        this.cachedItemsLength = this.items.length;\r\n        var firstRun = !changes.items || !changes.items.previousValue || changes.items.previousValue.length === 0;\r\n        this.refresh_internal(indexLengthChanged || firstRun);\r\n    };\r\n    VirtualScrollerComponent.prototype.ngDoCheck = function () {\r\n        if (this.cachedItemsLength !== this.items.length) {\r\n            this.cachedItemsLength = this.items.length;\r\n            this.refresh_internal(true);\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.refresh = function () {\r\n        this.refresh_internal(true);\r\n    };\r\n    VirtualScrollerComponent.prototype.invalidateAllCachedMeasurements = function () {\r\n        this.wrapGroupDimensions = {\r\n            maxChildSizePerWrapGroup: [],\r\n            numberOfKnownWrapGroupChildSizes: 0,\r\n            sumOfKnownWrapGroupChildWidths: 0,\r\n            sumOfKnownWrapGroupChildHeights: 0\r\n        };\r\n        this.minMeasuredChildWidth = undefined;\r\n        this.minMeasuredChildHeight = undefined;\r\n        this.refresh_internal(false);\r\n    };\r\n    VirtualScrollerComponent.prototype.invalidateCachedMeasurementForItem = function (item) {\r\n        if (this.enableUnequalChildrenSizes) {\r\n            var index = this.items && this.items.indexOf(item);\r\n            if (index >= 0) {\r\n                this.invalidateCachedMeasurementAtIndex(index);\r\n            }\r\n        }\r\n        else {\r\n            this.minMeasuredChildWidth = undefined;\r\n            this.minMeasuredChildHeight = undefined;\r\n        }\r\n        this.refresh_internal(false);\r\n    };\r\n    VirtualScrollerComponent.prototype.invalidateCachedMeasurementAtIndex = function (index) {\r\n        if (this.enableUnequalChildrenSizes) {\r\n            var cachedMeasurement = this.wrapGroupDimensions.maxChildSizePerWrapGroup[index];\r\n            if (cachedMeasurement) {\r\n                this.wrapGroupDimensions.maxChildSizePerWrapGroup[index] = undefined;\r\n                --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n                this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= cachedMeasurement.childWidth || 0;\r\n                this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= cachedMeasurement.childHeight || 0;\r\n            }\r\n        }\r\n        else {\r\n            this.minMeasuredChildWidth = undefined;\r\n            this.minMeasuredChildHeight = undefined;\r\n        }\r\n        this.refresh_internal(false);\r\n    };\r\n    VirtualScrollerComponent.prototype.scrollInto = function (item, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback) {\r\n        if (alignToBeginning === void 0) { alignToBeginning = true; }\r\n        if (additionalOffset === void 0) { additionalOffset = 0; }\r\n        if (animationMilliseconds === void 0) { animationMilliseconds = undefined; }\r\n        if (animationCompletedCallback === void 0) { animationCompletedCallback = undefined; }\r\n        var index = this.items.indexOf(item);\r\n        if (index === -1) {\r\n            return;\r\n        }\r\n        this.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\r\n    };\r\n    VirtualScrollerComponent.prototype.scrollToIndex = function (index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback) {\r\n        var _this = this;\r\n        if (alignToBeginning === void 0) { alignToBeginning = true; }\r\n        if (additionalOffset === void 0) { additionalOffset = 0; }\r\n        if (animationMilliseconds === void 0) { animationMilliseconds = undefined; }\r\n        if (animationCompletedCallback === void 0) { animationCompletedCallback = undefined; }\r\n        var maxRetries = 5;\r\n        var retryIfNeeded = function () {\r\n            --maxRetries;\r\n            if (maxRetries <= 0) {\r\n                if (animationCompletedCallback) {\r\n                    animationCompletedCallback();\r\n                }\r\n                return;\r\n            }\r\n            var dimensions = _this.calculateDimensions();\r\n            var desiredStartIndex = Math.min(Math.max(index, 0), dimensions.itemCount - 1);\r\n            if (_this.previousViewPort.startIndex === desiredStartIndex) {\r\n                if (animationCompletedCallback) {\r\n                    animationCompletedCallback();\r\n                }\r\n                return;\r\n            }\r\n            _this.scrollToIndex_internal(index, alignToBeginning, additionalOffset, 0, retryIfNeeded);\r\n        };\r\n        this.scrollToIndex_internal(index, alignToBeginning, additionalOffset, animationMilliseconds, retryIfNeeded);\r\n    };\r\n    VirtualScrollerComponent.prototype.scrollToIndex_internal = function (index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback) {\r\n        if (alignToBeginning === void 0) { alignToBeginning = true; }\r\n        if (additionalOffset === void 0) { additionalOffset = 0; }\r\n        if (animationMilliseconds === void 0) { animationMilliseconds = undefined; }\r\n        if (animationCompletedCallback === void 0) { animationCompletedCallback = undefined; }\r\n        animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n        var dimensions = this.calculateDimensions();\r\n        var scroll = this.calculatePadding(index, dimensions) + additionalOffset;\r\n        if (!alignToBeginning) {\r\n            scroll -= dimensions.wrapGroupsPerPage * dimensions[this._childScrollDim];\r\n        }\r\n        this.scrollToPosition(scroll, animationMilliseconds, animationCompletedCallback);\r\n    };\r\n    VirtualScrollerComponent.prototype.scrollToPosition = function (scrollPosition, animationMilliseconds, animationCompletedCallback) {\r\n        var _this = this;\r\n        if (animationMilliseconds === void 0) { animationMilliseconds = undefined; }\r\n        if (animationCompletedCallback === void 0) { animationCompletedCallback = undefined; }\r\n        scrollPosition += this.getElementsOffset();\r\n        animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n        var scrollElement = this.getScrollElement();\r\n        var animationRequest;\r\n        if (this.currentTween) {\r\n            this.currentTween.stop();\r\n            this.currentTween = undefined;\r\n        }\r\n        if (!animationMilliseconds) {\r\n            this.renderer.setProperty(scrollElement, this._scrollType, scrollPosition);\r\n            this.refresh_internal(false, animationCompletedCallback);\r\n            return;\r\n        }\r\n        var tweenConfigObj = { scrollPosition: scrollElement[this._scrollType] };\r\n        var newTween = new tween.Tween(tweenConfigObj)\r\n            .to({ scrollPosition: scrollPosition }, animationMilliseconds)\r\n            .easing(tween.Easing.Quadratic.Out)\r\n            .onUpdate(function (data) {\r\n            if (isNaN(data.scrollPosition)) {\r\n                return;\r\n            }\r\n            _this.renderer.setProperty(scrollElement, _this._scrollType, data.scrollPosition);\r\n            _this.refresh_internal(false);\r\n        })\r\n            .onStop(function () {\r\n            cancelAnimationFrame(animationRequest);\r\n        })\r\n            .start();\r\n        var animate = function (time) {\r\n            if (!newTween[\"isPlaying\"]()) {\r\n                return;\r\n            }\r\n            newTween.update(time);\r\n            if (tweenConfigObj.scrollPosition === scrollPosition) {\r\n                _this.refresh_internal(false, animationCompletedCallback);\r\n                return;\r\n            }\r\n            _this.zone.runOutsideAngular(function () {\r\n                animationRequest = requestAnimationFrame(animate);\r\n            });\r\n        };\r\n        animate();\r\n        this.currentTween = newTween;\r\n    };\r\n    VirtualScrollerComponent.prototype.checkScrollElementResized = function () {\r\n        var boundingRect = this.getScrollElement().getBoundingClientRect();\r\n        var sizeChanged;\r\n        if (!this.previousScrollBoundingRect) {\r\n            sizeChanged = true;\r\n        }\r\n        else {\r\n            var widthChange = Math.abs(boundingRect.width - this.previousScrollBoundingRect.width);\r\n            var heightChange = Math.abs(boundingRect.height - this.previousScrollBoundingRect.height);\r\n            sizeChanged = widthChange > this.resizeBypassRefreshThreshold || heightChange > this.resizeBypassRefreshThreshold;\r\n        }\r\n        if (sizeChanged) {\r\n            this.previousScrollBoundingRect = boundingRect;\r\n            if (boundingRect.width > 0 && boundingRect.height > 0) {\r\n                this.refresh_internal(false);\r\n            }\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.updateDirection = function () {\r\n        if (this.horizontal) {\r\n            this._invisiblePaddingProperty = 'width';\r\n            this._offsetType = 'offsetLeft';\r\n            this._pageOffsetType = 'pageXOffset';\r\n            this._childScrollDim = 'childWidth';\r\n            this._marginDir = 'margin-left';\r\n            this._translateDir = 'translateX';\r\n            this._scrollType = 'scrollLeft';\r\n        }\r\n        else {\r\n            this._invisiblePaddingProperty = 'height';\r\n            this._offsetType = 'offsetTop';\r\n            this._pageOffsetType = 'pageYOffset';\r\n            this._childScrollDim = 'childHeight';\r\n            this._marginDir = 'margin-top';\r\n            this._translateDir = 'translateY';\r\n            this._scrollType = 'scrollTop';\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.debounce = function (func, wait) {\r\n        var throttled = this.throttleTrailing(func, wait);\r\n        var result = function () {\r\n            throttled['cancel']();\r\n            throttled.apply(this, arguments);\r\n        };\r\n        result['cancel'] = function () {\r\n            throttled['cancel']();\r\n        };\r\n        return result;\r\n    };\r\n    VirtualScrollerComponent.prototype.throttleTrailing = function (func, wait) {\r\n        var timeout = undefined;\r\n        var result = function () {\r\n            var _this = this;\r\n            var _arguments = arguments;\r\n            if (timeout) {\r\n                return;\r\n            }\r\n            if (wait <= 0) {\r\n                func.apply(_this, _arguments);\r\n            }\r\n            else {\r\n                timeout = setTimeout(function () {\r\n                    timeout = undefined;\r\n                    func.apply(_this, _arguments);\r\n                }, wait);\r\n            }\r\n        };\r\n        result['cancel'] = function () {\r\n            if (timeout) {\r\n                clearTimeout(timeout);\r\n                timeout = undefined;\r\n            }\r\n        };\r\n        return result;\r\n    };\r\n    VirtualScrollerComponent.prototype.refresh_internal = function (itemsArrayModified, refreshCompletedCallback, maxRunTimes) {\r\n        //note: maxRunTimes is to force it to keep recalculating if the previous iteration caused a re-render (different sliced items in viewport or scrollPosition changed).\r\n        //The default of 2x max will probably be accurate enough without causing too large a performance bottleneck\r\n        //The code would typically quit out on the 2nd iteration anyways. The main time it'd think more than 2 runs would be necessary would be for vastly different sized child items or if this is the 1st time the items array was initialized.\r\n        //Without maxRunTimes, If the user is actively scrolling this code would become an infinite loop until they stopped scrolling. This would be okay, except each scroll event would start an additional infinte loop. We want to short-circuit it to prevent his.\r\n        var _this = this;\r\n        if (refreshCompletedCallback === void 0) { refreshCompletedCallback = undefined; }\r\n        if (maxRunTimes === void 0) { maxRunTimes = 2; }\r\n        this.zone.runOutsideAngular(function () {\r\n            requestAnimationFrame(function () {\r\n                if (itemsArrayModified) {\r\n                    _this.resetWrapGroupDimensions();\r\n                }\r\n                var viewport = _this.calculateViewport();\r\n                var startChanged = itemsArrayModified || viewport.startIndex !== _this.previousViewPort.startIndex;\r\n                var endChanged = itemsArrayModified || viewport.endIndex !== _this.previousViewPort.endIndex;\r\n                var scrollLengthChanged = viewport.scrollLength !== _this.previousViewPort.scrollLength;\r\n                var paddingChanged = viewport.padding !== _this.previousViewPort.padding;\r\n                var scrollPositionChanged = viewport.scrollStartPosition !== _this.previousViewPort.scrollStartPosition || viewport.scrollEndPosition !== _this.previousViewPort.scrollEndPosition || viewport.maxScrollPosition !== _this.previousViewPort.maxScrollPosition;\r\n                _this.previousViewPort = viewport;\r\n                if (scrollLengthChanged) {\r\n                    _this.renderer.setStyle(_this.invisiblePaddingElementRef.nativeElement, _this._invisiblePaddingProperty, viewport.scrollLength + \"px\");\r\n                }\r\n                if (paddingChanged) {\r\n                    if (_this.useMarginInsteadOfTranslate) {\r\n                        _this.renderer.setStyle(_this.contentElementRef.nativeElement, _this._marginDir, viewport.padding + \"px\");\r\n                    }\r\n                    else {\r\n                        _this.renderer.setStyle(_this.contentElementRef.nativeElement, 'transform', _this._translateDir + \"(\" + viewport.padding + \"px)\");\r\n                        _this.renderer.setStyle(_this.contentElementRef.nativeElement, 'webkitTransform', _this._translateDir + \"(\" + viewport.padding + \"px)\");\r\n                    }\r\n                }\r\n                if (_this.headerElementRef) {\r\n                    var scrollPosition = _this.getScrollElement()[_this._scrollType];\r\n                    var containerOffset = _this.getElementsOffset();\r\n                    var offset = Math.max(scrollPosition - viewport.padding - containerOffset + _this.headerElementRef.nativeElement.clientHeight, 0);\r\n                    _this.renderer.setStyle(_this.headerElementRef.nativeElement, 'transform', _this._translateDir + \"(\" + offset + \"px)\");\r\n                    _this.renderer.setStyle(_this.headerElementRef.nativeElement, 'webkitTransform', _this._translateDir + \"(\" + offset + \"px)\");\r\n                }\r\n                var changeEventArg = (startChanged || endChanged) ? {\r\n                    start: viewport.startIndex,\r\n                    end: viewport.endIndex,\r\n                    startIndex: viewport.startIndex,\r\n                    endIndex: viewport.endIndex,\r\n                    scrollStartPosition: viewport.scrollStartPosition,\r\n                    scrollEndPosition: viewport.scrollEndPosition,\r\n                    startIndexWithBuffer: viewport.startIndexWithBuffer,\r\n                    endIndexWithBuffer: viewport.endIndexWithBuffer,\r\n                    maxScrollPosition: viewport.maxScrollPosition\r\n                } : undefined;\r\n                if (startChanged || endChanged || scrollPositionChanged) {\r\n                    var handleChanged = function () {\r\n                        // update the scroll list to trigger re-render of components in viewport\r\n                        _this.viewPortItems = viewport.startIndexWithBuffer >= 0 && viewport.endIndexWithBuffer >= 0 ? _this.items.slice(viewport.startIndexWithBuffer, viewport.endIndexWithBuffer + 1) : [];\r\n                        _this.update.emit(_this.viewPortItems);\r\n                        _this.vsUpdate.emit(_this.viewPortItems);\r\n                        if (startChanged) {\r\n                            _this.start.emit(changeEventArg);\r\n                            _this.vsStart.emit(changeEventArg);\r\n                        }\r\n                        if (endChanged) {\r\n                            _this.end.emit(changeEventArg);\r\n                            _this.vsEnd.emit(changeEventArg);\r\n                        }\r\n                        if (startChanged || endChanged) {\r\n                            _this.changeDetectorRef.markForCheck();\r\n                            _this.change.emit(changeEventArg);\r\n                            _this.vsChange.emit(changeEventArg);\r\n                        }\r\n                        if (maxRunTimes > 0) {\r\n                            _this.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n                            return;\r\n                        }\r\n                        if (refreshCompletedCallback) {\r\n                            refreshCompletedCallback();\r\n                        }\r\n                    };\r\n                    if (_this.executeRefreshOutsideAngularZone) {\r\n                        handleChanged();\r\n                    }\r\n                    else {\r\n                        _this.zone.run(handleChanged);\r\n                    }\r\n                }\r\n                else {\r\n                    if (maxRunTimes > 0 && (scrollLengthChanged || paddingChanged)) {\r\n                        _this.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n                        return;\r\n                    }\r\n                    if (refreshCompletedCallback) {\r\n                        refreshCompletedCallback();\r\n                    }\r\n                }\r\n            });\r\n        });\r\n    };\r\n    VirtualScrollerComponent.prototype.getScrollElement = function () {\r\n        return this.parentScroll instanceof Window ? document.scrollingElement || document.documentElement || document.body : this.parentScroll || this.element.nativeElement;\r\n    };\r\n    VirtualScrollerComponent.prototype.addScrollEventHandlers = function () {\r\n        var _this = this;\r\n        if (this.isAngularUniversalSSR) {\r\n            return;\r\n        }\r\n        var scrollElement = this.getScrollElement();\r\n        this.removeScrollEventHandlers();\r\n        this.zone.runOutsideAngular(function () {\r\n            if (_this.parentScroll instanceof Window) {\r\n                _this.disposeScrollHandler = _this.renderer.listen('window', 'scroll', _this.onScroll);\r\n                _this.disposeResizeHandler = _this.renderer.listen('window', 'resize', _this.onScroll);\r\n            }\r\n            else {\r\n                _this.disposeScrollHandler = _this.renderer.listen(scrollElement, 'scroll', _this.onScroll);\r\n                if (_this._checkResizeInterval > 0) {\r\n                    _this.checkScrollElementResizedTimer = setInterval(function () { _this.checkScrollElementResized(); }, _this._checkResizeInterval);\r\n                }\r\n            }\r\n        });\r\n    };\r\n    VirtualScrollerComponent.prototype.removeScrollEventHandlers = function () {\r\n        if (this.checkScrollElementResizedTimer) {\r\n            clearInterval(this.checkScrollElementResizedTimer);\r\n        }\r\n        if (this.disposeScrollHandler) {\r\n            this.disposeScrollHandler();\r\n            this.disposeScrollHandler = undefined;\r\n        }\r\n        if (this.disposeResizeHandler) {\r\n            this.disposeResizeHandler();\r\n            this.disposeResizeHandler = undefined;\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.getElementsOffset = function () {\r\n        if (this.isAngularUniversalSSR) {\r\n            return 0;\r\n        }\r\n        var offset = 0;\r\n        if (this.containerElementRef && this.containerElementRef.nativeElement) {\r\n            offset += this.containerElementRef.nativeElement[this._offsetType];\r\n        }\r\n        if (this.parentScroll) {\r\n            var scrollElement = this.getScrollElement();\r\n            var elementClientRect = this.element.nativeElement.getBoundingClientRect();\r\n            var scrollClientRect = scrollElement.getBoundingClientRect();\r\n            if (this.horizontal) {\r\n                offset += elementClientRect.left - scrollClientRect.left;\r\n            }\r\n            else {\r\n                offset += elementClientRect.top - scrollClientRect.top;\r\n            }\r\n            if (!(this.parentScroll instanceof Window)) {\r\n                offset += scrollElement[this._scrollType];\r\n            }\r\n        }\r\n        return offset;\r\n    };\r\n    VirtualScrollerComponent.prototype.countItemsPerWrapGroup = function () {\r\n        if (this.isAngularUniversalSSR) {\r\n            return Math.round(this.horizontal ? this.ssrViewportHeight / this.ssrChildHeight : this.ssrViewportWidth / this.ssrChildWidth);\r\n        }\r\n        var propertyName = this.horizontal ? 'offsetLeft' : 'offsetTop';\r\n        var children = ((this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement).children;\r\n        var childrenLength = children ? children.length : 0;\r\n        if (childrenLength === 0) {\r\n            return 1;\r\n        }\r\n        var firstOffset = children[0][propertyName];\r\n        var result = 1;\r\n        while (result < childrenLength && firstOffset === children[result][propertyName]) {\r\n            ++result;\r\n        }\r\n        return result;\r\n    };\r\n    VirtualScrollerComponent.prototype.getScrollStartPosition = function () {\r\n        var windowScrollValue = undefined;\r\n        if (this.parentScroll instanceof Window) {\r\n            windowScrollValue = window[this._pageOffsetType];\r\n        }\r\n        return windowScrollValue || this.getScrollElement()[this._scrollType] || 0;\r\n    };\r\n    VirtualScrollerComponent.prototype.resetWrapGroupDimensions = function () {\r\n        var oldWrapGroupDimensions = this.wrapGroupDimensions;\r\n        this.invalidateAllCachedMeasurements();\r\n        if (!this.enableUnequalChildrenSizes || !oldWrapGroupDimensions || oldWrapGroupDimensions.numberOfKnownWrapGroupChildSizes === 0) {\r\n            return;\r\n        }\r\n        var itemsPerWrapGroup = this.countItemsPerWrapGroup();\r\n        for (var wrapGroupIndex = 0; wrapGroupIndex < oldWrapGroupDimensions.maxChildSizePerWrapGroup.length; ++wrapGroupIndex) {\r\n            var oldWrapGroupDimension = oldWrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n            if (!oldWrapGroupDimension || !oldWrapGroupDimension.items || !oldWrapGroupDimension.items.length) {\r\n                continue;\r\n            }\r\n            if (oldWrapGroupDimension.items.length !== itemsPerWrapGroup) {\r\n                return;\r\n            }\r\n            var itemsChanged = false;\r\n            var arrayStartIndex = itemsPerWrapGroup * wrapGroupIndex;\r\n            for (var i = 0; i < itemsPerWrapGroup; ++i) {\r\n                if (!this.compareItems(oldWrapGroupDimension.items[i], this.items[arrayStartIndex + i])) {\r\n                    itemsChanged = true;\r\n                    break;\r\n                }\r\n            }\r\n            if (!itemsChanged) {\r\n                ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n                this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += oldWrapGroupDimension.childWidth || 0;\r\n                this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += oldWrapGroupDimension.childHeight || 0;\r\n                this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = oldWrapGroupDimension;\r\n            }\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.calculateDimensions = function () {\r\n        var scrollElement = this.getScrollElement();\r\n        var maxCalculatedScrollBarSize = 25; // Note: Formula to auto-calculate doesn't work for ParentScroll, so we default to this if not set by consuming application\r\n        this.calculatedScrollbarHeight = Math.max(Math.min(scrollElement.offsetHeight - scrollElement.clientHeight, maxCalculatedScrollBarSize), this.calculatedScrollbarHeight);\r\n        this.calculatedScrollbarWidth = Math.max(Math.min(scrollElement.offsetWidth - scrollElement.clientWidth, maxCalculatedScrollBarSize), this.calculatedScrollbarWidth);\r\n        var viewportWidth = scrollElement.offsetWidth - (this.scrollbarWidth || this.calculatedScrollbarWidth || (this.horizontal ? 0 : maxCalculatedScrollBarSize));\r\n        var viewportHeight = scrollElement.offsetHeight - (this.scrollbarHeight || this.calculatedScrollbarHeight || (this.horizontal ? maxCalculatedScrollBarSize : 0));\r\n        var content = (this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement;\r\n        var itemsPerWrapGroup = this.countItemsPerWrapGroup();\r\n        var wrapGroupsPerPage;\r\n        var defaultChildWidth;\r\n        var defaultChildHeight;\r\n        if (this.isAngularUniversalSSR) {\r\n            viewportWidth = this.ssrViewportWidth;\r\n            viewportHeight = this.ssrViewportHeight;\r\n            defaultChildWidth = this.ssrChildWidth;\r\n            defaultChildHeight = this.ssrChildHeight;\r\n            var itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n            var itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n            wrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n        }\r\n        else if (!this.enableUnequalChildrenSizes) {\r\n            if (content.children.length > 0) {\r\n                if (!this.childWidth || !this.childHeight) {\r\n                    if (!this.minMeasuredChildWidth && viewportWidth > 0) {\r\n                        this.minMeasuredChildWidth = viewportWidth;\r\n                    }\r\n                    if (!this.minMeasuredChildHeight && viewportHeight > 0) {\r\n                        this.minMeasuredChildHeight = viewportHeight;\r\n                    }\r\n                }\r\n                var child = content.children[0];\r\n                var clientRect = child.getBoundingClientRect();\r\n                this.minMeasuredChildWidth = Math.min(this.minMeasuredChildWidth, clientRect.width);\r\n                this.minMeasuredChildHeight = Math.min(this.minMeasuredChildHeight, clientRect.height);\r\n            }\r\n            defaultChildWidth = this.childWidth || this.minMeasuredChildWidth || viewportWidth;\r\n            defaultChildHeight = this.childHeight || this.minMeasuredChildHeight || viewportHeight;\r\n            var itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n            var itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n            wrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n        }\r\n        else {\r\n            var scrollOffset = scrollElement[this._scrollType] - (this.previousViewPort ? this.previousViewPort.padding : 0);\r\n            var arrayStartIndex = this.previousViewPort.startIndexWithBuffer || 0;\r\n            var wrapGroupIndex = Math.ceil(arrayStartIndex / itemsPerWrapGroup);\r\n            var maxWidthForWrapGroup = 0;\r\n            var maxHeightForWrapGroup = 0;\r\n            var sumOfVisibleMaxWidths = 0;\r\n            var sumOfVisibleMaxHeights = 0;\r\n            wrapGroupsPerPage = 0;\r\n            for (var i = 0; i < content.children.length; ++i) {\r\n                ++arrayStartIndex;\r\n                var child = content.children[i];\r\n                var clientRect = child.getBoundingClientRect();\r\n                maxWidthForWrapGroup = Math.max(maxWidthForWrapGroup, clientRect.width);\r\n                maxHeightForWrapGroup = Math.max(maxHeightForWrapGroup, clientRect.height);\r\n                if (arrayStartIndex % itemsPerWrapGroup === 0) {\r\n                    var oldValue = this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n                    if (oldValue) {\r\n                        --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n                        this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= oldValue.childWidth || 0;\r\n                        this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= oldValue.childHeight || 0;\r\n                    }\r\n                    ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n                    var items = this.items.slice(arrayStartIndex - itemsPerWrapGroup, arrayStartIndex);\r\n                    this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = {\r\n                        childWidth: maxWidthForWrapGroup,\r\n                        childHeight: maxHeightForWrapGroup,\r\n                        items: items\r\n                    };\r\n                    this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += maxWidthForWrapGroup;\r\n                    this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += maxHeightForWrapGroup;\r\n                    if (this.horizontal) {\r\n                        var maxVisibleWidthForWrapGroup = Math.min(maxWidthForWrapGroup, Math.max(viewportWidth - sumOfVisibleMaxWidths, 0));\r\n                        if (scrollOffset > 0) {\r\n                            var scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleWidthForWrapGroup);\r\n                            maxVisibleWidthForWrapGroup -= scrollOffsetToRemove;\r\n                            scrollOffset -= scrollOffsetToRemove;\r\n                        }\r\n                        sumOfVisibleMaxWidths += maxVisibleWidthForWrapGroup;\r\n                        if (maxVisibleWidthForWrapGroup > 0 && viewportWidth >= sumOfVisibleMaxWidths) {\r\n                            ++wrapGroupsPerPage;\r\n                        }\r\n                    }\r\n                    else {\r\n                        var maxVisibleHeightForWrapGroup = Math.min(maxHeightForWrapGroup, Math.max(viewportHeight - sumOfVisibleMaxHeights, 0));\r\n                        if (scrollOffset > 0) {\r\n                            var scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleHeightForWrapGroup);\r\n                            maxVisibleHeightForWrapGroup -= scrollOffsetToRemove;\r\n                            scrollOffset -= scrollOffsetToRemove;\r\n                        }\r\n                        sumOfVisibleMaxHeights += maxVisibleHeightForWrapGroup;\r\n                        if (maxVisibleHeightForWrapGroup > 0 && viewportHeight >= sumOfVisibleMaxHeights) {\r\n                            ++wrapGroupsPerPage;\r\n                        }\r\n                    }\r\n                    ++wrapGroupIndex;\r\n                    maxWidthForWrapGroup = 0;\r\n                    maxHeightForWrapGroup = 0;\r\n                }\r\n            }\r\n            var averageChildWidth = this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n            var averageChildHeight = this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n            defaultChildWidth = this.childWidth || averageChildWidth || viewportWidth;\r\n            defaultChildHeight = this.childHeight || averageChildHeight || viewportHeight;\r\n            if (this.horizontal) {\r\n                if (viewportWidth > sumOfVisibleMaxWidths) {\r\n                    wrapGroupsPerPage += Math.ceil((viewportWidth - sumOfVisibleMaxWidths) / defaultChildWidth);\r\n                }\r\n            }\r\n            else {\r\n                if (viewportHeight > sumOfVisibleMaxHeights) {\r\n                    wrapGroupsPerPage += Math.ceil((viewportHeight - sumOfVisibleMaxHeights) / defaultChildHeight);\r\n                }\r\n            }\r\n        }\r\n        var itemCount = this.items.length;\r\n        var itemsPerPage = itemsPerWrapGroup * wrapGroupsPerPage;\r\n        var pageCount_fractional = itemCount / itemsPerPage;\r\n        var numberOfWrapGroups = Math.ceil(itemCount / itemsPerWrapGroup);\r\n        var scrollLength = 0;\r\n        var defaultScrollLengthPerWrapGroup = this.horizontal ? defaultChildWidth : defaultChildHeight;\r\n        if (this.enableUnequalChildrenSizes) {\r\n            var numUnknownChildSizes = 0;\r\n            for (var i = 0; i < numberOfWrapGroups; ++i) {\r\n                var childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n                if (childSize) {\r\n                    scrollLength += childSize;\r\n                }\r\n                else {\r\n                    ++numUnknownChildSizes;\r\n                }\r\n            }\r\n            scrollLength += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n        }\r\n        else {\r\n            scrollLength = numberOfWrapGroups * defaultScrollLengthPerWrapGroup;\r\n        }\r\n        if (this.headerElementRef) {\r\n            scrollLength += this.headerElementRef.nativeElement.clientHeight;\r\n        }\r\n        var viewportLength = this.horizontal ? viewportWidth : viewportHeight;\r\n        var maxScrollPosition = Math.max(scrollLength - viewportLength, 0);\r\n        return {\r\n            itemCount: itemCount,\r\n            itemsPerWrapGroup: itemsPerWrapGroup,\r\n            wrapGroupsPerPage: wrapGroupsPerPage,\r\n            itemsPerPage: itemsPerPage,\r\n            pageCount_fractional: pageCount_fractional,\r\n            childWidth: defaultChildWidth,\r\n            childHeight: defaultChildHeight,\r\n            scrollLength: scrollLength,\r\n            viewportLength: viewportLength,\r\n            maxScrollPosition: maxScrollPosition\r\n        };\r\n    };\r\n    VirtualScrollerComponent.prototype.calculatePadding = function (arrayStartIndexWithBuffer, dimensions) {\r\n        if (dimensions.itemCount === 0) {\r\n            return 0;\r\n        }\r\n        var defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n        var startingWrapGroupIndex = Math.floor(arrayStartIndexWithBuffer / dimensions.itemsPerWrapGroup) || 0;\r\n        if (!this.enableUnequalChildrenSizes) {\r\n            return defaultScrollLengthPerWrapGroup * startingWrapGroupIndex;\r\n        }\r\n        var numUnknownChildSizes = 0;\r\n        var result = 0;\r\n        for (var i = 0; i < startingWrapGroupIndex; ++i) {\r\n            var childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n            if (childSize) {\r\n                result += childSize;\r\n            }\r\n            else {\r\n                ++numUnknownChildSizes;\r\n            }\r\n        }\r\n        result += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n        return result;\r\n    };\r\n    VirtualScrollerComponent.prototype.calculatePageInfo = function (scrollPosition, dimensions) {\r\n        var scrollPercentage = 0;\r\n        if (this.enableUnequalChildrenSizes) {\r\n            var numberOfWrapGroups = Math.ceil(dimensions.itemCount / dimensions.itemsPerWrapGroup);\r\n            var totalScrolledLength = 0;\r\n            var defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n            for (var i = 0; i < numberOfWrapGroups; ++i) {\r\n                var childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n                if (childSize) {\r\n                    totalScrolledLength += childSize;\r\n                }\r\n                else {\r\n                    totalScrolledLength += defaultScrollLengthPerWrapGroup;\r\n                }\r\n                if (scrollPosition < totalScrolledLength) {\r\n                    scrollPercentage = i / numberOfWrapGroups;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            scrollPercentage = scrollPosition / dimensions.scrollLength;\r\n        }\r\n        var startingArrayIndex_fractional = Math.min(Math.max(scrollPercentage * dimensions.pageCount_fractional, 0), dimensions.pageCount_fractional) * dimensions.itemsPerPage;\r\n        var maxStart = dimensions.itemCount - dimensions.itemsPerPage - 1;\r\n        var arrayStartIndex = Math.min(Math.floor(startingArrayIndex_fractional), maxStart);\r\n        arrayStartIndex -= arrayStartIndex % dimensions.itemsPerWrapGroup; // round down to start of wrapGroup\r\n        if (this.stripedTable) {\r\n            var bufferBoundary = 2 * dimensions.itemsPerWrapGroup;\r\n            if (arrayStartIndex % bufferBoundary !== 0) {\r\n                arrayStartIndex = Math.max(arrayStartIndex - arrayStartIndex % bufferBoundary, 0);\r\n            }\r\n        }\r\n        var arrayEndIndex = Math.ceil(startingArrayIndex_fractional) + dimensions.itemsPerPage - 1;\r\n        var endIndexWithinWrapGroup = (arrayEndIndex + 1) % dimensions.itemsPerWrapGroup;\r\n        if (endIndexWithinWrapGroup > 0) {\r\n            arrayEndIndex += dimensions.itemsPerWrapGroup - endIndexWithinWrapGroup; // round up to end of wrapGroup\r\n        }\r\n        if (isNaN(arrayStartIndex)) {\r\n            arrayStartIndex = 0;\r\n        }\r\n        if (isNaN(arrayEndIndex)) {\r\n            arrayEndIndex = 0;\r\n        }\r\n        arrayStartIndex = Math.min(Math.max(arrayStartIndex, 0), dimensions.itemCount - 1);\r\n        arrayEndIndex = Math.min(Math.max(arrayEndIndex, 0), dimensions.itemCount - 1);\r\n        var bufferSize = this.bufferAmount * dimensions.itemsPerWrapGroup;\r\n        var startIndexWithBuffer = Math.min(Math.max(arrayStartIndex - bufferSize, 0), dimensions.itemCount - 1);\r\n        var endIndexWithBuffer = Math.min(Math.max(arrayEndIndex + bufferSize, 0), dimensions.itemCount - 1);\r\n        return {\r\n            startIndex: arrayStartIndex,\r\n            endIndex: arrayEndIndex,\r\n            startIndexWithBuffer: startIndexWithBuffer,\r\n            endIndexWithBuffer: endIndexWithBuffer,\r\n            scrollStartPosition: scrollPosition,\r\n            scrollEndPosition: scrollPosition + dimensions.viewportLength,\r\n            maxScrollPosition: dimensions.maxScrollPosition\r\n        };\r\n    };\r\n    VirtualScrollerComponent.prototype.calculateViewport = function () {\r\n        var dimensions = this.calculateDimensions();\r\n        var offset = this.getElementsOffset();\r\n        var scrollStartPosition = this.getScrollStartPosition();\r\n        if (scrollStartPosition > (dimensions.scrollLength + offset) && !(this.parentScroll instanceof Window)) {\r\n            scrollStartPosition = dimensions.scrollLength;\r\n        }\r\n        else {\r\n            scrollStartPosition -= offset;\r\n        }\r\n        scrollStartPosition = Math.max(0, scrollStartPosition);\r\n        var pageInfo = this.calculatePageInfo(scrollStartPosition, dimensions);\r\n        var newPadding = this.calculatePadding(pageInfo.startIndexWithBuffer, dimensions);\r\n        var newScrollLength = dimensions.scrollLength;\r\n        return {\r\n            startIndex: pageInfo.startIndex,\r\n            endIndex: pageInfo.endIndex,\r\n            startIndexWithBuffer: pageInfo.startIndexWithBuffer,\r\n            endIndexWithBuffer: pageInfo.endIndexWithBuffer,\r\n            padding: Math.round(newPadding),\r\n            scrollLength: Math.round(newScrollLength),\r\n            scrollStartPosition: pageInfo.scrollStartPosition,\r\n            scrollEndPosition: pageInfo.scrollEndPosition,\r\n            maxScrollPosition: pageInfo.maxScrollPosition\r\n        };\r\n    };\r\n    VirtualScrollerComponent.decorators = [\r\n        { type: core_1.Component, args: [{\r\n                    selector: 'virtual-scroller,[virtualScroller]',\r\n                    exportAs: 'virtualScroller',\r\n                    template: \"\\n    <div class=\\\"total-padding\\\" #invisiblePadding></div>\\n    <div class=\\\"scrollable-content\\\" #content>\\n      <ng-content></ng-content>\\n    </div>\\n  \",\r\n                    host: {\r\n                        '[class.horizontal]': \"horizontal\",\r\n                        '[class.vertical]': \"!horizontal\",\r\n                        '[class.selfScroll]': \"!parentScroll\"\r\n                    },\r\n                    styles: [\"\\n    :host {\\n      position: relative;\\n\\t  display: block;\\n      -webkit-overflow-scrolling: touch;\\n    }\\n\\t\\n\\t:host.horizontal.selfScroll {\\n      overflow-y: visible;\\n      overflow-x: auto;\\n\\t}\\n\\t:host.vertical.selfScroll {\\n      overflow-y: auto;\\n      overflow-x: visible;\\n\\t}\\n\\t\\n    .scrollable-content {\\n      top: 0;\\n      left: 0;\\n      width: 100%;\\n      height: 100%;\\n      max-width: 100vw;\\n      max-height: 100vh;\\n      position: absolute;\\n    }\\n\\n\\t.scrollable-content ::ng-deep > * {\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t\\n\\t:host.horizontal {\\n\\t\\twhite-space: nowrap;\\n\\t}\\n\\t\\n\\t:host.horizontal .scrollable-content {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\t\\n\\t:host.horizontal .scrollable-content ::ng-deep > * {\\n\\t\\tflex-shrink: 0;\\n\\t\\tflex-grow: 0;\\n\\t\\twhite-space: initial;\\n\\t}\\n\\t\\n    .total-padding {\\n      width: 1px;\\n      opacity: 0;\\n    }\\n    \\n    :host.horizontal .total-padding {\\n      height: 100%;\\n    }\\n  \"]\r\n                },] },\r\n    ];\r\n    /** @nocollapse */\r\n    VirtualScrollerComponent.ctorParameters = function () { return [\r\n        { type: core_1.ElementRef, },\r\n        { type: core_1.Renderer2, },\r\n        { type: core_1.NgZone, },\r\n        { type: core_1.ChangeDetectorRef, },\r\n        { type: Object, decorators: [{ type: core_1.Inject, args: [core_2.PLATFORM_ID,] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollThrottlingTime',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollDebounceTime',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollAnimationTime',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollbarWidth',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollbarHeight',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.checkResizeInterval',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.resizeBypassRefreshThreshold',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.modifyOverflowStyleOfParentScroll',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.stripedTable',] },] },\r\n    ]; };\r\n    VirtualScrollerComponent.propDecorators = {\r\n        'executeRefreshOutsideAngularZone': [{ type: core_1.Input },],\r\n        'enableUnequalChildrenSizes': [{ type: core_1.Input },],\r\n        'useMarginInsteadOfTranslate': [{ type: core_1.Input },],\r\n        'modifyOverflowStyleOfParentScroll': [{ type: core_1.Input },],\r\n        'stripedTable': [{ type: core_1.Input },],\r\n        'scrollbarWidth': [{ type: core_1.Input },],\r\n        'scrollbarHeight': [{ type: core_1.Input },],\r\n        'childWidth': [{ type: core_1.Input },],\r\n        'childHeight': [{ type: core_1.Input },],\r\n        'ssrChildWidth': [{ type: core_1.Input },],\r\n        'ssrChildHeight': [{ type: core_1.Input },],\r\n        'ssrViewportWidth': [{ type: core_1.Input },],\r\n        'ssrViewportHeight': [{ type: core_1.Input },],\r\n        'bufferAmount': [{ type: core_1.Input },],\r\n        'scrollAnimationTime': [{ type: core_1.Input },],\r\n        'resizeBypassRefreshThreshold': [{ type: core_1.Input },],\r\n        'scrollThrottlingTime': [{ type: core_1.Input },],\r\n        'scrollDebounceTime': [{ type: core_1.Input },],\r\n        'checkResizeInterval': [{ type: core_1.Input },],\r\n        'items': [{ type: core_1.Input },],\r\n        'compareItems': [{ type: core_1.Input },],\r\n        'horizontal': [{ type: core_1.Input },],\r\n        'parentScroll': [{ type: core_1.Input },],\r\n        'update': [{ type: core_1.Output },],\r\n        'vsUpdate': [{ type: core_1.Output },],\r\n        'change': [{ type: core_1.Output },],\r\n        'vsChange': [{ type: core_1.Output },],\r\n        'start': [{ type: core_1.Output },],\r\n        'vsStart': [{ type: core_1.Output },],\r\n        'end': [{ type: core_1.Output },],\r\n        'vsEnd': [{ type: core_1.Output },],\r\n        'contentElementRef': [{ type: core_1.ViewChild, args: ['content', { read: core_1.ElementRef },] },],\r\n        'invisiblePaddingElementRef': [{ type: core_1.ViewChild, args: ['invisiblePadding', { read: core_1.ElementRef },] },],\r\n        'headerElementRef': [{ type: core_1.ContentChild, args: ['header', { read: core_1.ElementRef },] },],\r\n        'containerElementRef': [{ type: core_1.ContentChild, args: ['container', { read: core_1.ElementRef },] },],\r\n    };\r\n    return VirtualScrollerComponent;\r\n}());\r\nexports.VirtualScrollerComponent = VirtualScrollerComponent;\r\nvar VirtualScrollerModule = (function () {\r\n    function VirtualScrollerModule() {\r\n    }\r\n    VirtualScrollerModule.decorators = [\r\n        { type: core_1.NgModule, args: [{\r\n                    exports: [VirtualScrollerComponent],\r\n                    declarations: [VirtualScrollerComponent],\r\n                    imports: [common_2.CommonModule]\r\n                },] },\r\n    ];\r\n    /** @nocollapse */\r\n    VirtualScrollerModule.ctorParameters = function () { return []; };\r\n    return VirtualScrollerModule;\r\n}());\r\nexports.VirtualScrollerModule = VirtualScrollerModule;\r\n//# sourceMappingURL=virtual-scroller.js.map\n\n/***/ }),\n\n/***/ 1340:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n// Experimental API below\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * get input values\n *\n * Extended by: Gabriel Schuster <github.com@actra.de>\n * Now gets values of inputs (including \"checked\" status radios, checkboxes), textareas and selects (including multiselects)\n * Tries to identify the elements as exact as possible, falls back to numeric index when identification fails\n * WIP refactor by: PatrickJS\n */\nfunction __getInputValues() {\n    var _inputs = document.querySelectorAll('input, textarea, select');\n    var inputs = Array.prototype.slice.call(_inputs);\n    return inputs.map(function (input) {\n        var inputTagName = input.tagName.toLowerCase();\n        var inputType = input.type;\n        var inputId = (input.id && typeof input.id === 'string') ? input.id : null;\n        var inputName = (input.name && typeof input.name === 'string') ? input.name : null;\n        var inputValue = (input.value && typeof input.value === 'string') ? input.value : null;\n        var inputChildNodes = input.childNodes;\n        var inputSelected = Boolean(input.selected);\n        var elementStore = {\n            'tag': inputTagName,\n            'type': null,\n            'id': inputId,\n            'name': inputName,\n            'value': '',\n            'checked': false,\n            'options': []\n        };\n        if ('input' === inputTagName || 'textarea' === inputTagName) {\n            elementStore['type'] = inputType;\n            if ('input' !== inputTagName) {\n                elementStore['value'] = inputValue;\n                return elementStore;\n            }\n            switch (inputType) {\n                case 'checkbox':\n                case 'radio':\n                    elementStore['checked'] = inputSelected;\n                    elementStore['value'] = inputValue;\n                    return elementStore;\n                case 'image':\n                case 'button':\n                case 'submit':\n                case 'reset':\n                default:\n                    // These types don't need any config and thus need no update, they only were stored because they match \"input\"\n                    return elementStore;\n            }\n        }\n        else if ('select' === inputTagName) {\n            var childNodes = Array.prototype.slice.call(inputChildNodes);\n            var options = childNodes.map(function (option, i) {\n                return { value: option['value'], selected: Boolean(option['selected']) };\n            });\n            elementStore['options'] = options;\n            return elementStore;\n        }\n        return elementStore;\n    });\n}\nexports.__getInputValues = __getInputValues;\n/**\n * set input values\n *\n * Extended by: Gabriel Schuster <github.com@actra.de>\n * WIP refactor by: PatrickJS\n */\nfunction __setInputValues($inputs) {\n    var inputs = document.querySelectorAll('input, textarea');\n    $inputs.forEach(function (store, i) {\n        if ('input' === store.tag || 'textarea' === store.tag) {\n            if ('input' === store.tag && ('checkbox' === store.type || 'radio' === store.type)) {\n                var selector = 'input' + (null !== store.id ? '#' + store.id : '') + '[type=\"' + store.type + '\"]' + (null !== store.name ? '[name=\"' + store.name + '\"]' : '') +\n                    '[value=\"' + store.value + '\"]';\n                var element = document.body.querySelector(selector);\n                if (element && Boolean(store['checked'])) {\n                    element['checked'] = 'checked';\n                    element.dispatchEvent(new CustomEvent('input', { detail: element['checked'] }));\n                }\n            }\n            else if ('input' === store.tagName.toLowerCase() &&\n                ('image' === store.type || 'button' === store.type || 'submit' === store.type || 'reset' === store.type)) {\n                // These types don't need any config and thus need no update, they only were stored because they match \"input\"\n            }\n            else {\n                if (null === store.id && null === store.name) {\n                    if (store.value.length &&\n                        inputs[i] &&\n                        inputs[i].tagName.toLowerCase() === store.tag &&\n                        ('textarea' === store.tag || inputs[i].getAttribute('type') === store.type) &&\n                        ('string' !== typeof inputs[i].id || !inputs[i].id.length) &&\n                        ('string' !== typeof inputs[i].getAttribute('name') ||\n                            !inputs[i].getAttribute('name').length)) {\n                        inputs[i]['value'] = store.value;\n                        inputs[i].dispatchEvent(new CustomEvent('input', { detail: inputs[i]['value'] }));\n                    }\n                }\n                else {\n                    var selector = 'input' +\n                        (null !== store.id ? '#' + store.id : '') + ('input' === store.tag ? '[type=\"' + store.type + '\"]' : '') +\n                        (null !== store.name ? '[name=\"' + store.name + '\"]' : '');\n                    var element = document.body.querySelector(selector);\n                    if (element && store.value.length) {\n                        element['value'] = store.value;\n                        element.dispatchEvent(new CustomEvent('input', { detail: element['value'] }));\n                    }\n                }\n            }\n        }\n        else if ('select' === store.tag) {\n            var select_1 = null;\n            if (null === store.id && null === store.name) {\n                if (inputs[i] && inputs[i].tagName.toLowerCase() === store.tag && ('string' !== typeof inputs[i].id || !inputs[i].id.length) &&\n                    ('string' !== typeof inputs[i].getAttribute('name') || !inputs[i].getAttribute('name').length)) {\n                    select_1 = inputs[i];\n                }\n            }\n            else {\n                var selector = 'select' + (null !== store.id ? '#' + store.id : '') + (null !== store.name ? '[name=\"' + store.name + '\"]' : '');\n                var element = document.body.querySelector(selector);\n                if (element) {\n                    select_1 = element;\n                }\n            }\n            if (select_1) {\n                store.options.forEach(function (storedOption, j) {\n                    var option = select_1.querySelector('option[value=\"' + storedOption.value + '\"]');\n                    if (!option &&\n                        select_1.childNodes[j] &&\n                        ('string' !== typeof select_1.childNodes[j]['value'] || !select_1.childNodes[j]['value'].length)) {\n                        option = select_1.childNodes[j];\n                    }\n                    if (option && !!storedOption.selected) {\n                        option['selected'] = 'selected';\n                        option.dispatchEvent(new CustomEvent('input', { detail: option['selected'] }));\n                    }\n                });\n            }\n        }\n    });\n}\nexports.__setInputValues = __setInputValues;\nfunction __createInputTransfer() {\n    var $inputs = __getInputValues();\n    return function restoreInputValues() {\n        return __setInputValues($inputs);\n    };\n}\nexports.__createInputTransfer = __createInputTransfer;\n//# sourceMappingURL=experimental.js.map\n\n/***/ }),\n\n/***/ 1341:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MODULE_CONFIG = {\n    'OnInit': 'hmrOnInit',\n    'OnStatus': 'hmrOnStatus',\n    'OnCheck': 'hmrOnCheck',\n    'OnDecline': 'hmrOnDecline',\n    'OnDestroy': 'hmrOnDestroy',\n    'AfterDestroy': 'hmrAfterDestroy'\n};\nfunction hmrModule(MODULE_REF, MODULE, CONFIG) {\n    if (CONFIG === void 0) { CONFIG = exports.MODULE_CONFIG; }\n    if (MODULE['hot']) {\n        MODULE['hot']['accept']();\n        if (MODULE_REF.instance[exports.MODULE_CONFIG['OnInit']]) {\n            if (MODULE['hot']['data']) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnInit']](MODULE['hot']['data']);\n            }\n        }\n        if (MODULE_REF.instance[exports.MODULE_CONFIG['OnStatus']]) {\n            MODULE['hot']['apply'](function hmrOnStatus(status) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnStatus']](status);\n            });\n        }\n        if (MODULE_REF.instance[exports.MODULE_CONFIG['OnCheck']]) {\n            MODULE['hot']['check'](function hmrOnCheck(err, outdatedModules) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnCheck']](err, outdatedModules);\n            });\n        }\n        if (MODULE_REF.instance[exports.MODULE_CONFIG['OnDecline']]) {\n            MODULE['hot']['decline'](function hmrOnDecline(dependencies) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnDecline']](dependencies);\n            });\n        }\n        MODULE['hot']['dispose'](function hmrOnDestroy(store) {\n            if (MODULE_REF.instance[exports.MODULE_CONFIG['OnDestroy']]) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnDestroy']](store);\n            }\n            MODULE_REF.destroy();\n            if (MODULE_REF.instance[exports.MODULE_CONFIG['AfterDestroy']]) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['AfterDestroy']](store);\n            }\n        });\n    }\n    return MODULE_REF;\n}\nexports.hmrModule = hmrModule;\n//# sourceMappingURL=hmr.js.map\n\n/***/ }),\n\n/***/ 1342:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar module_1 = __webpack_require__(1343);\nexports.FlashMessagesModule = module_1.FlashMessagesModule;\nvar flash_messages_service_1 = __webpack_require__(177);\nexports.FlashMessagesService = flash_messages_service_1.FlashMessagesService;\n//# sourceMappingURL=index.js.map\n\n/***/ }),\n\n/***/ 1343:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(5);\nvar flash_messages_component_1 = __webpack_require__(1344);\nvar flash_messages_service_1 = __webpack_require__(177);\nvar FlashMessagesModule = (function () {\n    function FlashMessagesModule() {\n    }\n    return FlashMessagesModule;\n}());\nFlashMessagesModule.decorators = [\n    { type: core_1.NgModule, args: [{\n                imports: [common_1.CommonModule],\n                declarations: [flash_messages_component_1.FlashMessagesComponent],\n                exports: [flash_messages_component_1.FlashMessagesComponent],\n                providers: [flash_messages_service_1.FlashMessagesService]\n            },] },\n];\n/** @nocollapse */\nFlashMessagesModule.ctorParameters = function () { return []; };\nexports.FlashMessagesModule = FlashMessagesModule;\n//# sourceMappingURL=module.js.map\n\n/***/ }),\n\n/***/ 1344:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar flash_message_1 = __webpack_require__(1345);\nvar flash_messages_service_1 = __webpack_require__(177);\nvar FlashMessagesComponent = (function () {\n    function FlashMessagesComponent(_flashMessagesService, _cdRef) {\n        this._flashMessagesService = _flashMessagesService;\n        this._cdRef = _cdRef;\n        this._defaults = {\n            text: 'default message',\n            cssClass: ''\n        };\n        this.messages = [];\n        this.classes = '';\n        this._grayOut = false;\n        this._flashMessagesService.show = this.show.bind(this);\n        this._flashMessagesService.grayOut = this.grayOut.bind(this);\n    }\n    FlashMessagesComponent.prototype.ngOnInit = function () { };\n    FlashMessagesComponent.prototype.show = function (text, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        var defaults = {\n            timeout: 2500,\n            cssClass: ''\n        };\n        for (var attrname in options) {\n            defaults[attrname] = options[attrname];\n        }\n        var message = new flash_message_1.FlashMessage(text, defaults.cssClass);\n        this.messages.push(message);\n        this._cdRef.detectChanges();\n        window.setTimeout(function () {\n            _this._remove(message);\n            _this._cdRef.detectChanges();\n        }, defaults.timeout);\n    };\n    FlashMessagesComponent.prototype.grayOut = function (value) {\n        if (value === void 0) { value = false; }\n        this._grayOut = value;\n    };\n    FlashMessagesComponent.prototype._remove = function (message) {\n        this.messages = this.messages.filter(function (msg) { return msg.id !== message.id; });\n    };\n    return FlashMessagesComponent;\n}());\nFlashMessagesComponent.decorators = [\n    { type: core_1.Component, args: [{\n                selector: 'flash-messages',\n                template: \"\\n      <div id=\\\"flashMessages\\\" class=\\\"flash-messages {{classes}}\\\">\\n          <div id=\\\"grayOutDiv\\\" *ngIf='_grayOut && messages.length'></div>\\n          <div class=\\\"alert flash-message {{message.cssClass}}\\\" *ngFor='let message of messages'>\\n              <p>{{message.text}}</p>\\n          </div> \\n      </div>\\n  \"\n            },] },\n];\n/** @nocollapse */\nFlashMessagesComponent.ctorParameters = function () { return [\n    { type: flash_messages_service_1.FlashMessagesService, },\n    { type: core_1.ChangeDetectorRef, },\n]; };\nexports.FlashMessagesComponent = FlashMessagesComponent;\n//# sourceMappingURL=flash-messages.component.js.map\n\n/***/ }),\n\n/***/ 1345:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar FlashMessage = (function () {\n    function FlashMessage(text, cssClass) {\n        this.id = (FlashMessage.nextId++);\n        this.text = 'default text';\n        this.cssClass = '';\n        this.text = text;\n        this.cssClass = cssClass;\n    }\n    return FlashMessage;\n}());\nFlashMessage.nextId = 0;\nexports.FlashMessage = FlashMessage;\n//# sourceMappingURL=flash-message.js.map\n\n/***/ }),\n\n/***/ 1346:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"account\\\">\\n    <h1 class=\\\"page-header\\\">\\n        {{'ACCOUNT.TITLE' | translate:lang}}\\n        <small>{{'ACCOUNT.SUBTITLE' | translate:lang}}</small>\\n    </h1>\\n    <div class=\\\"account-tabs\\\">\\n        <ul class=\\\"nav nav-tabs nav-tabs-inverse\\\" role=\\\"tablist\\\">\\n            <li role=\\\"presentation tab\\\" *ngFor=\\\"let tab of tabs; let i = index\\\" [class.active]=\\\"tab.active\\\">\\n                <a href=\\\"javascript:;\\\" (click)=\\\"onTabClick(i)\\\">{{tab.title}}</a>\\n            </li>\\n        </ul>\\n        <div role=\\\"tabpanel\\\" class=\\\"tab-pane panel-body\\\">\\n            <div class=\\\"loading-container\\\" [hidden]=\\\"!loadingContent\\\">\\n                <span class=\\\"spinner-small\\\"></span>\\n            </div>\\n            <ng-content></ng-content>\\n        </div>\\n    </div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1347:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .account .account-tabs .nav-tabs a {\\n  color: #a7a7a7; }\\n\\n:host .account .account-tabs .nav-tabs .active a {\\n  color: #242a30; }\\n\"\n\n/***/ }),\n\n/***/ 1348:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AccountSubscriptionsView; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_angular_l10n__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__service_payments_service__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__service_subscription_service__ = __webpack_require__(64);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__service_tab_service__ = __webpack_require__(90);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__service_user_service__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__service_view_service__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__service_product_service__ = __webpack_require__(46);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__modal_modal_service__ = __webpack_require__(29);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\nvar AccountSubscriptionsView = (function (_super) {\n    __extends(AccountSubscriptionsView, _super);\n    function AccountSubscriptionsView(route, tabService, userService, productService, paymentsService, subscriptionService, modal, view, flashMessagesService, locale, translation, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.route = route;\n        _this.tabService = tabService;\n        _this.userService = userService;\n        _this.productService = productService;\n        _this.paymentsService = paymentsService;\n        _this.subscriptionService = subscriptionService;\n        _this.modal = modal;\n        _this.view = view;\n        _this.flashMessagesService = flashMessagesService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        _this.showPaymentsModal = false;\n        _this.showSpinner = false;\n        _this.route.data.subscribe(function (data) {\n            if (data && data.account) {\n                _this.accountProducts = data.account[1];\n                _this.accountPaymentMethods = data.account[2];\n                _this.addAdditionalProperties();\n                if (data.account[3] != null)\n                    _this.braintreeClientToken = data.account[3].bt_client_token;\n            }\n        });\n        return _this;\n    }\n    AccountSubscriptionsView.prototype.ngOnInit = function () {\n        this.tabService.onNavigatedTo(0);\n    };\n    AccountSubscriptionsView.prototype.ngAfterViewInit = function () {\n        var items = $('[data-toggle=\"tooltip\"]');\n        items.tooltip();\n    };\n    AccountSubscriptionsView.prototype.onPaymentsModalClosed = function () {\n        this.showPaymentsModal = false;\n    };\n    AccountSubscriptionsView.prototype.calcViewsUsagePerc = function (viewsMade, viewsSize) {\n        var result = 0;\n        if (viewsSize > 0) {\n            result = 100 * viewsMade / viewsSize;\n        }\n        if (result > 100) {\n            result = 100;\n        }\n        return result;\n    };\n    AccountSubscriptionsView.prototype.addAdditionalProperties = function () {\n        var _this = this;\n        if (this.accountProducts)\n            this.accountProducts.results.forEach(function (plan) {\n                _this.accountPaymentMethods.results.some(function (pm) {\n                    if (pm.token == plan.bt_pm_token) {\n                        plan.payment_method = pm;\n                        return true;\n                    }\n                    return false;\n                });\n                var total = plan.base_price.net;\n                if (plan.current_views > 0) {\n                    if (plan.base_views_size > 0) {\n                        if (plan.current_views > plan.base_views_size\n                            && plan.usage_unit_price.net > 0 && plan.usage_unit_size > 0) {\n                            var usage_count = (plan.current_views - plan.base_views_size) / plan.usage_unit_size + 1;\n                            total += usage_count * plan.usage_unit_price.net;\n                        }\n                    }\n                    else if (plan.usage_unit_price.net > 0 && plan.usage_unit_size > 0) {\n                        var usage_count = plan.current_views / plan.usage_unit_size + 1;\n                        total += usage_count * plan.usage_unit_price.net;\n                    }\n                }\n                plan.current_total = total;\n            });\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n    AccountSubscriptionsView = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'account-subscriptions',\n            template: __webpack_require__(1349),\n            styles: [\n                ':host .subscriptions .result-list .plan-info ul{padding-left:20px;}'\n            ],\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* ActivatedRoute */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* ActivatedRoute */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_6__service_tab_service__[\"a\" /* TabService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__service_tab_service__[\"a\" /* TabService */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_7__service_user_service__[\"a\" /* UserService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_7__service_user_service__[\"a\" /* UserService */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_9__service_product_service__[\"a\" /* ProductService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_9__service_product_service__[\"a\" /* ProductService */]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_4__service_payments_service__[\"a\" /* PaymentsService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_4__service_payments_service__[\"a\" /* PaymentsService */]) === \"function\" && _e || Object, typeof (_f = typeof __WEBPACK_IMPORTED_MODULE_5__service_subscription_service__[\"a\" /* SubscriptionService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_5__service_subscription_service__[\"a\" /* SubscriptionService */]) === \"function\" && _f || Object, typeof (_g = typeof __WEBPACK_IMPORTED_MODULE_10__modal_modal_service__[\"a\" /* ModalService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_10__modal_modal_service__[\"a\" /* ModalService */]) === \"function\" && _g || Object, typeof (_h = typeof __WEBPACK_IMPORTED_MODULE_8__service_view_service__[\"a\" /* ViewService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_8__service_view_service__[\"a\" /* ViewService */]) === \"function\" && _h || Object, typeof (_j = typeof __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__[\"FlashMessagesService\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__[\"FlashMessagesService\"]) === \"function\" && _j || Object, typeof (_k = typeof __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"a\" /* LocaleService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"a\" /* LocaleService */]) === \"function\" && _k || Object, typeof (_l = typeof __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"d\" /* TranslationService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"d\" /* TranslationService */]) === \"function\" && _l || Object, typeof (_m = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]) === \"function\" && _m || Object])\n    ], AccountSubscriptionsView);\n    return AccountSubscriptionsView;\n}(__WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"b\" /* Localization */]));\n\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(21)))\n\n/***/ }),\n\n/***/ 1349:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<account-view>\\n<div class=\\\"subscriptions\\\">\\n    <fieldset>\\n        <legend>{{'ACCOUNT_SUBS.TITLE' | translate:lang}}</legend>\\n        <h5 class=\\\"empty-message\\\" *ngIf=\\\"accountProducts == null || accountProducts.count <= 0\\\">{{'ACCOUNT_SUBS.MESSAGE.EMPTY' | translate:lang}}</h5>\\n        <!--Begin Products List-->\\n        <div class=\\\"panel panel-inverse\\\" *ngFor=\\\"let plan of accountProducts.results\\\">\\n            <ul class=\\\"result-list\\\">\\n                <li>\\n                    <div class=\\\"plan-info\\\">\\n                        <h3 class=\\\"panel-title\\\">\\n                            <span *ngIf=\\\"plan.status == 'active'\\\" class=\\\"label label-success m-r-10\\\">{{'ACCOUNT_SUBS.LABEL.ACTIVE' | translate:lang}}</span>\\n                            <span *ngIf=\\\"plan.status == 'inactive'\\\" class=\\\"label label-danger m-r-10\\\">{{'ACCOUNT_SUBS.LABEL.INACTIVE' | translate:lang}}</span>                            {{plan.product_plan.name}}\\n                            <span class=\\\"product-title\\\">{{plan.product.name}}</span></h3>\\n                        <ul>\\n                            <li *ngIf=\\\"plan?.product_plan?.level <= 1\\\">\\n                               <h5>Basic player for testing (Web)</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan?.product_plan?.level > 1\\\">\\n                               <h5>Player for commercial use</h5>\\n                               <h5>(Web, iOS, Android)</h5>\\n                            </li>\\n                            <li *ngIf=\\\"!plan.sla_info || plan.sla_info == 'none'\\\">\\n                               <h5>Support (not guaranteed)</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan.sla_info && plan.sla_info != 'none'\\\">\\n                               <h5>Support: {{plan.sla_info}}</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan?.statistics_type\\\">\\n                               <h5>{{ 'PLAN_CARROUSEL.EXTRA.STATS' | translate:lang }}: {{ plan?.statistics_type }}</h5>\\n                               <h5 *ngIf=\\\"plan?.statistics_type == 'basic'\\\">(audience stats only)</h5>\\n                               <h5 *ngIf=\\\"plan?.statistics_type == 'extended'\\\">(audience, geo, tech, realtime analytics, engagement rate)</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan.has_ads_support\\\">\\n                               <h5>{{ 'PLAN_CARROUSEL.EXTRA.ADS' | translate:lang }}</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan.has_drm_support\\\">\\n                               <h5>{{ 'PLAN_CARROUSEL.EXTRA.DRM' | translate:lang }}</h5>\\n                            </li>\\n                        </ul>\\n                    </div>\\n\\n                    <div class=\\\"loading-container\\\" *ngIf=\\\"showSpinner\\\">\\n                        <span class=\\\"spinner-small\\\"></span>\\n                    </div>\\n\\n                    <div class=\\\"plan-subscription\\\" *ngIf=\\\"!showSpinner\\\">\\n                        <h4 class=\\\"title\\\">{{plan.product_plan.description}}</h4>\\n                        <table>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.CREATED_AT' | translate:lang}}:</span></td>\\n                                <td>{{plan.created_at * 1000 | date:'longDate'}}</td>\\n                            </tr>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.UPDATED_AT' | translate:lang}}:</span></td>\\n                                <td>{{plan.updated_at * 1000 | date:'longDate'}}</td>\\n                            </tr>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.NEXT_BILLING' | translate:lang}}:</span></td>\\n                                <td *ngIf=\\\"plan.next_billing_at\\\">{{plan.next_billing_at * 1000 | date:'longDate'}}</td>\\n                                <td *ngIf=\\\"!plan.next_billing_at\\\">{{'ACCOUNT_SUBS.LABEL.NOT_AVAILABLE' | translate:lang}}</td>\\n                            </tr>\\n                        </table>\\n                    </div>\\n\\n                    <div class=\\\"plan-price\\\" *ngIf=\\\"!showSpinner\\\">\\n                        <table>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.BASE_PRICE' | translate:lang}}</span></td>\\n                                <td>{{plan.base_price.gross | currency:plan.base_price.currency:true:'1.0-2'}}</td>\\n                            </tr>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.CURRENT_TOTAL' | translate:lang}}</span></td>\\n                                <td>{{plan.base_price.gross | currency:plan.base_price.currency:true:'1.0-2'}}</td>\\n                            </tr>\\n                            <tr *ngIf=\\\"plan.payment_method\\\">\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.PM' | translate:lang}}</span></td>\\n                                <td><img class=\\\"type-img\\\" [src]=\\\"plan.payment_method.image_url\\\" /> <span *ngIf=\\\"plan.payment_method.credit_card\\\">{{plan.payment_method.credit_card.masked_number}}</span>\\n                                    <span *ngIf=\\\"plan.payment_method.pay_pal_account\\\">{{plan.payment_method.pay_pal_account.email}}</span></td>\\n                            </tr>\\n                        </table>\\n                    </div>\\n                </li>\\n            </ul>\\n        </div>\\n        <!--End Products List-->\\n    </fieldset>\\n    <pmModal [btClientToken]=\\\"braintreeClientToken\\\" [active]=\\\"showPaymentsModal\\\" (onPaymentNonceReceived)=\\\"onPaymentNonceReceived($event)\\\"\\n        (onCloseModal)=\\\"onPaymentsModalClosed()\\\"></pmModal>\\n</div>\\n</account-view>\"\n\n/***/ }),\n\n/***/ 1350:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AccountInvoicesView; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_angular_l10n__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__service_user_service__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__service_tab_service__ = __webpack_require__(90);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__service_payments_service__ = __webpack_require__(63);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__modal_modal_service__ = __webpack_require__(29);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar AccountInvoicesView = (function (_super) {\n    __extends(AccountInvoicesView, _super);\n    function AccountInvoicesView(userService, route, tabService, flashMessagesService, cdr, paymentsService, modal, locale, translation, payments) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.userService = userService;\n        _this.route = route;\n        _this.tabService = tabService;\n        _this.flashMessagesService = flashMessagesService;\n        _this.cdr = cdr;\n        _this.paymentsService = paymentsService;\n        _this.modal = modal;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.payments = payments;\n        _this.transactionOnEdit = null;\n        _this.transactionDetails = null;\n        _this.route.data.subscribe(function (data) {\n            if (data && data.account) {\n                _this.transactionsList = data.account;\n                if (_this.transactionsList.count > 0) {\n                    _this.transactionDetails = _this.transactionsList.results[0];\n                }\n            }\n        });\n        return _this;\n    }\n    AccountInvoicesView.prototype.ngOnInit = function () {\n        this.tabService.onNavigatedTo(2);\n        var itemsSet = $('.panel-body.products [rel=\"tooltip\"]');\n        itemsSet.tooltip();\n    };\n    AccountInvoicesView.prototype.ngAfterViewInit = function () {\n        $('#data-table').DataTable({ 'order': [[0, 'desc']] });\n    };\n    AccountInvoicesView.prototype.onSaveEdit = function (form) {\n        var _this = this;\n        if (form.valid && this.userService.accountId && this.transactionOnEdit)\n            this.paymentsService.updateInvoice(this.userService.accountId, this.transactionOnEdit.invoice).subscribe(function (data) {\n                _this.transactionsList.results.some(function (transaction, index) {\n                    if (transaction.invoice && (transaction.invoice.id == data.id)) {\n                        _this.transactionsList.results[index].invoice = data;\n                        return true;\n                    }\n                    return false;\n                });\n                _this.flashMessagesService.show(_this.translation.translate('ACCOUNT_INVOICES.MESSAGE.EDIT_SUCCESS'), { cssClass: 'alert-success', timeout: 3000 });\n                _this.transactionOnEdit = null;\n                _this.cdr.markForCheck();\n            }, function (error) {\n                _this.flashMessagesService.show(_this.translation.translate('ACCOUNT_INVOICES.MESSAGE.EDIT_ERROR'), { cssClass: 'alert-failure', timeout: 3000 });\n            });\n    };\n    AccountInvoicesView.prototype.editTransaction = function (transaction) {\n        this.transactionOnEdit = JSON.parse(JSON.stringify(transaction));\n        if (transaction && this.transactionOnEdit)\n            this.transactionOnEdit.terms = false;\n    };\n    AccountInvoicesView.prototype.showTermsForEdit = function () {\n        var _this = this;\n        this.modal.prompt(this.translation.translate('ACCOUNT_INVOICES.MESSAGE.AGREEMENT.TEXT'), [{\n                label: this.translation.translate('ACCOUNT_INVOICES.BUTTON.AGREE'), fa: 'check',\n                close: true, click: function () {\n                    if (_this.transactionOnEdit)\n                        _this.transactionOnEdit.terms = true;\n                    _this.cdr.markForCheck();\n                }\n            },\n            {\n                label: this.translation.translate('ACCOUNT_INVOICES.BUTTON.NOT_AGREE'),\n                fa: 'ban', close: true, click: function () {\n                    if (_this.transactionOnEdit)\n                        _this.transactionOnEdit.terms = false;\n                    _this.cdr.markForCheck();\n                }\n            }\n        ]);\n        return false;\n    };\n    AccountInvoicesView.prototype.showReceiptDetails = function (receipt) {\n        if (this.transactionDetails != null && receipt.id != this.transactionDetails.id) {\n            this.transactionDetails = receipt;\n            this.transactionOnEdit = null;\n        }\n        this.cdr.markForCheck();\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n    AccountInvoicesView = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'account-invoices',\n            template: __webpack_require__(1351),\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_4__service_user_service__[\"a\" /* UserService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_4__service_user_service__[\"a\" /* UserService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* ActivatedRoute */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* ActivatedRoute */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_5__service_tab_service__[\"a\" /* TabService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_5__service_tab_service__[\"a\" /* TabService */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__[\"FlashMessagesService\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__[\"FlashMessagesService\"]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]) === \"function\" && _e || Object, typeof (_f = typeof __WEBPACK_IMPORTED_MODULE_6__service_payments_service__[\"a\" /* PaymentsService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__service_payments_service__[\"a\" /* PaymentsService */]) === \"function\" && _f || Object, typeof (_g = typeof __WEBPACK_IMPORTED_MODULE_7__modal_modal_service__[\"a\" /* ModalService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_7__modal_modal_service__[\"a\" /* ModalService */]) === \"function\" && _g || Object, typeof (_h = typeof __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"a\" /* LocaleService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"a\" /* LocaleService */]) === \"function\" && _h || Object, typeof (_j = typeof __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"d\" /* TranslationService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"d\" /* TranslationService */]) === \"function\" && _j || Object, typeof (_k = typeof __WEBPACK_IMPORTED_MODULE_6__service_payments_service__[\"a\" /* PaymentsService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__service_payments_service__[\"a\" /* PaymentsService */]) === \"function\" && _k || Object])\n    ], AccountInvoicesView);\n    return AccountInvoicesView;\n}(__WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"b\" /* Localization */]));\n\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(21)))\n\n/***/ }),\n\n/***/ 1351:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<account-view>\\n<div class=\\\"invoices\\\">\\n    <fieldset>\\n        <legend> {{'ACCOUNT_INVOICES.SUBTITLE' | translate:lang}}</legend>\\n        <h5 class=\\\"empty-message\\\" *ngIf=\\\"!transactionsList || transactionsList.count <= 0\\\">{{'ACCOUNT_INVOICES.MESSAGE.EMPTY' | translate:lang}}</h5>\\n        <div class=\\\"row\\\" *ngIf=\\\"transactionsList && this.transactionsList.count > 0\\\">\\n            <!--Start Invoices table-->\\n            <div class=\\\"col-md-6\\\">\\n                <table id=\\\"data-table\\\" class=\\\"table table-striped table-bordered table-hover\\\">\\n                    <thead>\\n                        <tr>\\n                            <th>{{'ACCOUNT_INVOICES.LABEL.CREATED' | translate:lang}}</th>\\n                            <th>{{'ACCOUNT_INVOICES.LABEL.PLAN_NAME' | translate:lang}}</th>\\n                            <th>{{'ACCOUNT_INVOICES.LABEL.TOTAL' | translate:lang}}</th>\\n                            <th>{{'ACCOUNT_INVOICES.LABEL.STATUS' | translate:lang}}</th>\\n                        </tr>\\n                    </thead>\\n                    <tbody>\\n                        <tr *ngFor=\\\"let receipt of transactionsList.results;let i = index\\\" [ngClass]=\\\"{selected:receipt.id == transactionDetails.id}\\\"\\n                            (click)=\\\"showReceiptDetails(receipt)\\\">\\n                            <td>{{receipt.created_at * 1000 | date:'yyyy-MM-dd'}}</td>\\n                            <td>\\n                                <span *ngIf=\\\"receipt.account_subscription\\\">{{receipt.account_subscription.product_plan.name}}</span>\\n                                <span *ngIf=\\\"!receipt.account_subscription\\\">{{'ACCOUNT_INVOICES.MESSAGE.NOT_AVAILABLE' | translate:lang}}</span>\\n                            </td>\\n                            <td>\\n                                <span *ngIf=\\\"receipt.total_cost\\\">{{receipt.total_cost.gross | currency:receipt.total_cost.currency:true:'1.2-2'}}‎</span>\\n                                <span *ngIf=\\\"!receipt.total_cost\\\">{{'ACCOUNT_INVOICES.MESSAGE.NOT_AVAILABLE' | translate:lang}}</span>\\n                            <td>\\n                                <span class=\\\"label\\\" [ngClass]=\\\"{'bg-green':receipt.status == 'settled', 'label-warning':status != 'settled'}\\\">{{receipt.status}}</span>\\n                            </td>\\n                        </tr>\\n                    </tbody>\\n                </table>\\n            </div>\\n            <!--End Invoices table-->\\n            <!--Start Invoice Details -->\\n            <div class=\\\"col-md-6\\\">\\n                <h5>{{'ACCOUNT_INVOICES.LABEL.SELECTED_INVOICE' | translate:lang}}</h5>\\n                <div class=\\\"well invoice-container\\\" *ngIf=\\\"!transactionDetails || !transactionDetails.invoice\\\">\\n                    <div class=\\\"invoice-not-ready-note\\\">{{'ACCOUNT_INVOICES.LABEL.INVOICE_NOT_READY' | translate:lang}}</div>\\n                </div>\\n                <div class=\\\"well invoice-container\\\" *ngIf=\\\"transactionDetails && transactionDetails.invoice\\\">\\n                    <div class=\\\"invoice\\\">\\n                        <div class=\\\"invoice-company\\\">\\n                            <span class=\\\"pull-right\\\">\\n                    <a [href]=\\\"transactionDetails.invoice.download_url\\\" class=\\\"btn btn-sm btn-primary m-b-10\\\" target=\\\"_blank\\\"><i class=\\\"fa fa-download m-r-5\\\"></i>{{'ACCOUNT_INVOICES.LABEL.EXPORT_PDF' | translate:lang}}</a>\\n                    </span> {{transactionDetails.invoice.company_name}}\\n                        </div>\\n                        <div class=\\\"invoice-header\\\">\\n                            <div class=\\\"invoice-from\\\">\\n                                <small>{{'ACCOUNT_INVOICES.LABEL.ADDRESS' | translate:lang}} <a href=\\\"javascript:;\\\" (click)=\\\"editTransaction(transactionDetails)\\\" *ngIf=\\\"!transactionOnEdit || transactionOnEdit.id != transactionDetails.id\\\">{{'ACCOUNT_INVOICES.LABEL.EDIT' | translate:lang}}</a></small>\\n\\n                                <address *ngIf=\\\"!transactionOnEdit || transactionOnEdit.id != transactionDetails.id\\\">\\n                                    <strong>{{transactionDetails.invoice.company_name}}</strong>\\n                                    <br /><small>{{'ACCOUNT_INVOICES.LABEL.TAX_NO' | translate:lang}}:</small>{{transactionDetails.invoice.tax_no}}\\n                                    <br />{{transactionDetails.invoice.address}}\\n                                    <br />{{transactionDetails.invoice.city}}, {{transactionDetails.invoice.postal_code}}\\n                                    <br />{{transactionDetails.invoice.country}}\\n                                    <br/><span *ngIf=\\\"transactionDetails.invoice.phone_number\\\"> <small>{{'ACCOUNT_INVOICES.LABEL.PHONE' | translate:lang}}:</small> {{transactionDetails.invoice.phone_number}}</span>\\n                                </address>\\n                                <form *ngIf=\\\"transactionOnEdit && transactionOnEdit.id == transactionDetails.id\\\" #receiptEditForm=\\\"ngForm\\\">\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{'ACCOUNT_DETAILS.FORM.PLACEHOLDER.COMPANY' | translate:lang}}\\\" [(ngModel)]=\\\"transactionOnEdit.invoice.company_name\\\"\\n                                        name=\\\"company_name\\\" required/>\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.TAX_NO' | translate:lang }}\\\" [(ngModel)]=\\\"transactionOnEdit.invoice.tax_no\\\"\\n                                        name=\\\"tax_no\\\" required/>\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.ADDRESS' | translate:lang }}\\\" [(ngModel)]=\\\"transactionOnEdit.invoice.address\\\"\\n                                        name=\\\"address\\\" required/>\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.CITY' | translate:lang }}\\\" [(ngModel)]=\\\"transactionOnEdit.invoice.city\\\"\\n                                        name=\\\"city\\\" required/>\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.POSTAL_CODE' | translate:lang }}\\\"\\n                                        [(ngModel)]=\\\"transactionOnEdit.invoice.postal_code\\\" name=\\\"postal_code\\\" required/>\\n                                    <br /> {{transactionDetails.invoice.country}}\\n                                    <br /> <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.PHONE_NUMBER' | translate:lang }}\\\"\\n                                        [(ngModel)]=\\\"transactionOnEdit.invoice.phone_number\\\" name=\\\"phone_number\\\" required/>\\n                                    <label>\\n                                                <input type=\\\"checkbox\\\" required name=\\\"terms\\\" [(ngModel)]=\\\"transactionOnEdit.terms\\\"/> {{ 'ACCOUNT_INVOICES.MESSAGE.AGREEMENT.1' | translate:lang }} \\n                                                <a href=\\\"javascript:;\\\" (click)=\\\"showTermsForEdit()\\\">\\n                                                    {{ 'ACCOUNT_INVOICES.MESSAGE.AGREEMENT.2' | translate:lang }}\\n                                                </a> \\n                                            </label>\\n                                    <div class=\\\"button-container\\\">\\n                                        <button *ngIf=\\\"transactionOnEdit.id == transactionDetails.id\\\" type=\\\"submit\\\" class=\\\"btn btn-success\\\" (click)=\\\"onSaveEdit(receiptEditForm)\\\"> {{ 'ACCOUNT_DETAILS.BUTTON.SAVE' | translate:lang }}</button>\\n                                        <button *ngIf=\\\"transactionOnEdit.id == transactionDetails.id\\\" type=\\\"button\\\" class=\\\"btn btn-danger\\\" (click)=\\\"editTransaction(null)\\\"> {{ 'ACCOUNT_DETAILS.BUTTON.CANCEL' | translate:lang }}</button>\\n                                    </div>\\n                                </form>\\n                            </div>\\n                            <div class=\\\"invoice-to\\\">\\n                                <small>{{'ACCOUNT_INVOICES.LABEL.DESCRIPTION' | translate:lang}}</small>\\n                                <br /><strong>\\n                                        <span *ngIf=\\\"transactionDetails.account_subscription\\\">{{transactionDetails.account_subscription.product_plan.name}}</span>\\n                                        <span *ngIf=\\\"!transactionDetails.account_subscription\\\">{{'ACCOUNT_INVOICES.MESSAGE.NOT_AVAILABLE' | translate:lang}}</span>\\n                                    </strong>\\n                                <br />{{'ACCOUNT_INVOICES.LABEL.BASE_PRICE' | translate:lang}}:\\n                                {{transactionDetails.invoice.total_cost.gross | currency:transactionDetails.invoice.total_cost.currency:true:'1.2-2'}}‎\\n                                <br />{{'ACCOUNT_INVOICES.LABEL.TAX' | translate:lang}}: \\n                                <span *ngIf=\\\"transactionDetails.invoice.total_cost.tax >= 0\\\">{{transactionDetails.invoice.total_cost.tax}} %‎</span>\\n                                <span *ngIf=\\\"!(transactionDetails.invoice.total_cost.tax >= 0)\\\" class=\\\"small\\\">{{transactionDetails.invoice.total_cost.tax}}</span>\\n\\n                            </div>\\n                            <div class=\\\"invoice-date\\\">\\n                                <div class=\\\"date m-t-5\\\">{{'ACCOUNT_INVOICES.LABEL.TOTAL' | translate:lang}}</div>\\n                                <div class=\\\"invoice-total\\\">\\n                                    <span>{{transactionDetails.invoice.total_cost.gross | currency:transactionDetails.invoice.total_cost.currency:true:'1.2-2'}}‎</span>\\n                                </div>\\n                            </div>\\n\\n                        </div>\\n                        <small>*{{'ACCOUNT_INVOICES.MESSAGE.MORE_DETAILS' | translate:lang}}</small>\\n                    </div>\\n                </div>\\n            </div>\\n            <!--End Invoice Details -->\\n        </div>\\n    </fieldset>\\n</div>\\n</account-view>\"\n\n/***/ }),\n\n/***/ 1352:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<account-view>\\n<div class=\\\"account-details\\\">\\n\\t<!-- USER DETAILS  !-->\\n\\t<fieldset [hidden]=\\\"!showUserForm\\\">\\n\\t\\t<legend>\\n\\t\\t\\t<div>\\n\\t\\t\\t\\t<span>{{ 'ACCOUNT_DETAILS.FORM.SUBTITLE_1' | translate:lang }}</span>\\n\\t\\t\\t\\t<button *ngIf=\\\"!userFormEditMode && !userLoading\\\" [disabled]=\\\"detailsFormEditMode\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm pull-right\\\"\\n\\t\\t\\t\\t (click)=\\\"onUserEditModeChange(true)\\\"><i class=\\\"fa fa-edit\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.EDIT' | translate:lang }}</button>\\n\\t\\t\\t\\t<button *ngIf=\\\"userFormEditMode && !userLoading\\\" type=\\\"button\\\" class=\\\"btn btn-danger btn-sm pull-right\\\" (click)=\\\"onUserEditModeChange(false)\\\"><i class=\\\"fa fa-times\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.CANCEL' | translate:lang }}</button>\\n\\t\\t\\t\\t<button *ngIf=\\\"userFormEditMode && !userLoading\\\" [disabled]=\\\"!userForm.form.valid || !userForm.form.dirty\\\" form=\\\"userForm\\\" type=\\\"submit\\\" class=\\\"btn btn-success btn-sm pull-right m-r-5\\\"><i class=\\\"fa fa-check\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.SAVE' | translate:lang }}</button>\\n\\t\\t\\t</div>\\n\\t\\t</legend>\\n\\n\\t\\t<div class=\\\"loading-container\\\" [hidden]=\\\"!userLoading\\\">\\n\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t</div>\\n\\n\\t\\t<form id=\\\"userForm\\\" #userForm=\\\"ngForm\\\" class=\\\"form-horizontal\\\" [formGroup]=\\\"accountUserForm\\\" (ngSubmit)=\\\"onUserFormSubmit()\\\" [hidden]=\\\"userLoading\\\">\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.FIRST_NAME' | translate:lang\\\" [inputErrors]=\\\"accountUserForm.controls['first_name'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"userFormRemoteErrors.first_name\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"first_name\\\" [ngModel]=\\\"user.firstName\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.FIRST_NAME' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.LAST_NAME' | translate:lang\\\" [inputErrors]=\\\"accountUserForm.controls['last_name'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"userFormRemoteErrors.last_name\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"last_name\\\" [ngModel]=\\\"user.lastName\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.LAST_NAME' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.EMAIL' | translate:lang\\\" [inputErrors]=\\\"accountUserForm.controls['email'].errors\\\"\\n\\t\\t\\t [customError]=\\\"emailErr\\\" [remoteError]=\\\"userFormRemoteErrors.email\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"email\\\" [ngModel]=\\\"user.email\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.EMAIL' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.AGREE_FOR_NEWSLETTER' | translate:lang\\\" [canValidate]=\\\"canValidate\\\">\\n                <input class=\\\"form-control form-check-input\\\" type=\\\"checkbox\\\" formControlName=\\\"has_agree_for_newsletter\\\" [ngModel]=\\\"user.hasAgreeForNewsletter\\\">\\n\\t\\t\\t</extended-input>\\n\\t\\t</form>\\n\\n\\t\\t<form class=\\\"form-horizontal m-b-40\\\" [hidden]=\\\"userLoading\\\">\\n\\t\\t\\t<div class=\\\"form-group\\\" ng-reflect-klass=\\\"form-group\\\">\\n\\t\\t\\t\\t<label class=\\\"col-md-2 control-label\\\"> Password </label>\\n\\t\\t\\t\\t<div class=\\\"col-md-10\\\">\\n\\t\\t\\t\\t\\t<button *ngIf=\\\"!userLoading\\\" type=\\\"button\\\" class=\\\"btn btn-success btn-sm m-t-0 \\\" (click)=\\\"onPasswordChangeClick()\\\"><i class=\\\"fa fa-key\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.CHANGE_PASSWORD' | translate:lang }} </button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</form>\\n\\t</fieldset>\\n\\n\\t<!-- ACCOUNT DETAILS  !-->\\n\\t<fieldset [hidden]=\\\"!showCompanyForm\\\">\\n\\t\\t<legend>\\n\\t\\t\\t<div>\\n\\t\\t\\t\\t<span>{{ 'ACCOUNT_DETAILS.FORM.SUBTITLE_2' | translate:lang }}</span>\\n\\t\\t\\t\\t<button *ngIf=\\\"!detailsFormEditMode && !companyDetailsLoading\\\" [disabled]=\\\"userFormEditMode\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm pull-right\\\"\\n\\t\\t\\t\\t (click)=\\\"onDetailsEditModeChange(true)\\\"><i class=\\\"fa fa-edit\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.EDIT' | translate:lang }}</button>\\n\\t\\t\\t\\t<button *ngIf=\\\"detailsFormEditMode && !companyDetailsLoading\\\" type=\\\"button\\\" class=\\\"btn btn-danger btn-sm pull-right\\\" (click)=\\\"onDetailsEditModeChange(false)\\\"><i class=\\\"fa fa-times\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.CANCEL' | translate:lang }}</button>\\n\\t\\t\\t\\t<button *ngIf=\\\"detailsFormEditMode && !companyDetailsLoading\\\" [disabled]=\\\"!detailsForm.form.valid || !detailsForm.form.dirty\\\"\\n\\t\\t\\t\\t form=\\\"detailsForm\\\" type=\\\"submit\\\" class=\\\"btn btn-success btn-sm pull-right m-r-5\\\"><i class=\\\"fa fa-check\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.SAVE' | translate:lang }}</button>\\n\\t\\t\\t</div>\\n\\t\\t</legend>\\n\\n\\t\\t<div class=\\\"loading-container\\\" [hidden]=\\\"!companyDetailsLoading\\\">\\n\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t</div>\\n\\n\\t\\t<form id=\\\"detailsForm\\\" #detailsForm=\\\"ngForm\\\" class=\\\"form-horizontal\\\" [formGroup]=\\\"accountDetailsForm\\\" (ngSubmit)=\\\"onAccountDetailsFormSubmit()\\\"\\n\\t\\t [hidden]=\\\"companyDetailsLoading\\\">\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.COMPANY' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['company_name'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.company_name\\\" [canValidate]=\\\"canValidate\\\" [toolText]=\\\"'ACCOUNT_DETAILS.MESSAGE.COMPANY' | translate:lang\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"company_name\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.COMPANY' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.TAX_NO' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['tax_no'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.tax_no\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"tax_no\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.TAX_NO' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.COUNTRY' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['country'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.country\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<select class=\\\"form-control\\\" formControlName=\\\"country\\\">\\n\\t\\t\\t\\t\\t<option selected value=\\\"default\\\">{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.COUNTRY' | translate:lang }}</option>\\n\\t\\t\\t\\t\\t<option *ngFor=\\\"let country of countries.countries\\\" ngValue=\\\"{{country.code}}\\\">{{country.name}}</option>\\n\\t\\t\\t\\t</select>\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.STATE' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['state'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.state\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"state\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.STATE' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.CITY' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['city'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.city\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"city\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.CITY' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.ADDRESS' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['address'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.address\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<textarea class=\\\"form-control\\\" formControlName=\\\"address\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.ADDRESS' | translate:lang }}\\\"\\n\\t\\t\\t\\t rows=\\\"5\\\"></textarea>\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.POSTAL_CODE' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['postal_code'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.postal_code\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"postal_code\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.POSTAL_CODE' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.PHONE_NUMBER' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['phone_number'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.phone_number\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"phone_number\\\" type=\\\"tel\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.PHONE_NUMBER' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\t\\t</form>\\n\\t</fieldset>\\n</div>\\n</account-view>\"\n\n/***/ }),\n\n/***/ 1353:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<account-view>\\n<div class=\\\"payments\\\">\\n    <fieldset>\\n        <legend>{{'ACC_PAY.TITLE' | translate:lang}}</legend>\\n        <h5 class=\\\"empty-message\\\" *ngIf=\\\"paymentMethods.count <= 0\\\">{{'ACC_PAY.MESSAGE.EMPTY' | translate:lang}}</h5>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <!-------------ACCORDION----------- !-->\\n                <div class=\\\"panel-group\\\" id=\\\"accordion\\\" role=\\\"tablist\\\" aria-multiselectable=\\\"true\\\">\\n                    <div *ngFor=\\\"let pmethod of paymentMethods.results;let i = index\\\" class=\\\"panel overflow-hidden\\\">\\n                        <!-------------ACCORDION HEADER----------- !-->\\n                        <div class=\\\"panel-heading\\\" role=\\\"tab\\\" [id]=\\\"'heading' + i\\\">\\n                            <h3 class=\\\"panel-title\\\">\\n                                <a role=\\\"button\\\" data-toggle=\\\"collapse\\\" data-parent=\\\"#accordion\\\" [href]=\\\"'#collapse'+i\\\" [attr.aria-expanded]=\\\"(i==0) ? true : false\\\"\\n                                    [attr.aria-controls]=\\\"'collapse' + i\\\" class=\\\"accordion-toggle accordion-toggle-styled\\\">\\n                                    <img class=\\\"type-img\\\" [src]=\\\"pmethod.image_url\\\" /> <span *ngIf=\\\"pmethod.credit_card\\\">{{pmethod.credit_card.masked_number}}</span>\\n                                    <span *ngIf=\\\"pmethod.pay_pal_account\\\">{{pmethod.pay_pal_account.email}}</span>\\n                                    <span *ngIf=\\\"pmethod.active\\\" class=\\\"label label-success\\\">{{'ACC_PAY.STATE.ACTIVE' | translate:lang}}</span>\\n                                    <!--<span *ngIf=\\\"!pmethod.valid\\\" class=\\\"label label-danger\\\">{{'ACC_PAY.STATE.INVALID' | translate:lang}}</span>!-->\\n                                    <span *ngIf=\\\"pmethod.default\\\" class=\\\"label label-primary\\\">{{'ACC_PAY.STATE.DEFAULT' | translate:lang}}</span>\\n                                    <i class=\\\"fa fa-plus-circle pull-right\\\"></i>\\n                                </a>\\n                            </h3>\\n                        </div>\\n                        <!-------------ACCORDION BODY----------- !-->\\n                        <div [id]=\\\"'collapse' + i\\\" class=\\\"panel-collapse collapse\\\" role=\\\"tabpanel\\\" [attr.aria-labelledby]=\\\"'heading' + i\\\" [ngClass]=\\\"{in: i == 0}\\\">\\n                            <div class=\\\"item-content\\\">\\n                                <!-------------LOADING SPINNER----------- !-->\\n                                <div class=\\\"loading-container\\\" [hidden]=\\\"paymentOnEdit == null || paymentOnEdit.token != pmethod.token || !paymentOnEdit.loading\\\">\\n                                    <span class=\\\"spinner-small\\\"></span>\\n                                </div>\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-md-12\\\">\\n                                        <div *ngIf=\\\"!paymentOnEdit || paymentOnEdit.token != pmethod.token\\\">\\n                                            <table>\\n                                                <tr *ngIf=\\\"pmethod.pay_pal_account\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.EMAIL' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.pay_pal_account.email}}</td>\\n                                                </tr>\\n                                                <tr *ngIf=\\\"pmethod.credit_card && pmethod.credit_card.cardholder_name\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.NAME' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.credit_card.cardholder_name}}</td>\\n                                                </tr>\\n                                                <tr *ngIf=\\\"pmethod.credit_card\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.EXPIRES' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.credit_card.expiration_month}}/{{pmethod.credit_card.expiration_year}}</td>\\n                                                </tr>\\n                                                <tr *ngIf=\\\"pmethod.credit_card\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.CREATED' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.created_at * 1000 | date:'medium'}}</td>\\n                                                </tr>\\n                                                <tr *ngIf=\\\"pmethod.credit_card\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.UPDATED' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.updated_at * 1000 | date:'medium'}}</td>\\n                                                </tr>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"row\\\" [hidden]=\\\"paymentOnEdit && paymentOnEdit.token == pmethod.token && paymentOnEdit.loading\\\">\\n                                    <div class=\\\"col-md-12\\\">\\n                                        <!--EDIT FORM !-->\\n                                        <form (ngSubmit)=\\\"onCardEditSubmit()\\\" #cardEditForm=\\\"ngForm\\\" *ngIf=\\\"paymentOnEdit && paymentOnEdit.token == pmethod.token\\\"\\n                                            action=\\\"/\\\" id=\\\"card-edit-form\\\" method=\\\"post\\\">\\n                                            <div class=\\\"alert alert-danger m-b-10\\\" *ngIf=\\\"paymentOnEdit.serverValidation.other\\\">\\n                                                {{paymentOnEdit.serverValidation.other}}\\n                                            </div>\\n                                            <!--CVV !-->\\n                                            <label for=\\\"cvv\\\" [ngClass]=\\\"{'label-invalid':paymentOnEdit.serverValidation.cvv}\\\">{{'ACC_PAY.LABEL.CVV' | translate:lang}}</label>\\n                                            <div id=\\\"cvv\\\" class=\\\"hosted-field\\\" [ngClass]=\\\"{'input-invalid':paymentOnEdit.serverValidation.cvv}\\\"></div>\\n                                            <!--EXPIRATION DATE !-->\\n                                            <label for=\\\"expiration-date\\\" [ngClass]=\\\"{'label-invalid':paymentOnEdit.serverValidation.expiration_date}\\\">{{'ACC_PAY.LABEL.EXP_DATE' | translate:lang}}</label>\\n                                            <div id=\\\"expiration-date\\\" class=\\\"hosted-field\\\" [ngClass]=\\\"{'input-invalid':paymentOnEdit.serverValidation.expiration_date}\\\"></div>\\n                                            <!--DEFAULT-->\\n                                            <label>\\n                                                <input type=\\\"checkbox\\\" name=\\\"make_default\\\" [(ngModel)]=\\\"paymentOnEdit.make_default\\\"/> {{ 'ACC_PAY.MESSAGE.MAKE_DEFAULT' | translate:lang }} \\n                                            </label>\\n                                            <!--SUBMIT AND EDIT BUTTONS !-->\\n                                            <div class=\\\"buttons-container m-t-10\\\">\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-success btn-sm\\\"><i class=\\\"fa fa-check\\\"></i> {{'ACC_PAY.BUTTON.SAVE' | translate:lang}}</button>\\n                                            </div>\\n                                        </form>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </fieldset>\\n</div>\\n</account-view>\"\n\n/***/ }),\n\n/***/ 1354:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return DateRangePickerComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_angular_l10n__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_daterangepicker__ = __webpack_require__(342);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_daterangepicker___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_daterangepicker__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_moment__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_moment___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_moment__);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar DateRangePickerComponent = (function (_super) {\n    __extends(DateRangePickerComponent, _super);\n    function DateRangePickerComponent(locale, translation) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.enable = true;\n        _this.showIcon = 'right';\n        _this.width = '200px';\n        _this.opens = 'left';\n        _this.selectionChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        return _this;\n    }\n    DateRangePickerComponent.prototype.ngOnInit = function () {\n        var defaultOptions = this.getDefaultSettings();\n        if (!this.options) {\n            this.options = defaultOptions;\n        }\n        else {\n            var options = this.options;\n            this.options = defaultOptions;\n            for (var k in options) {\n                this.options[k] = options[k];\n            }\n        }\n        if (this.options.startDate && this.options.endDate)\n            this.range = this.options.startDate.toString() + ' - ' + this.options.endDate.toString();\n        if (!this.options.locale)\n            this.options.locale = this.getDateRangePickerLocale();\n    };\n    DateRangePickerComponent.prototype.ngAfterViewInit = function () {\n        this.pickerJQuery = $(this.picker.nativeElement);\n        if (this.pickerJQuery != null)\n            this.pickerJQuery.daterangepicker(this.options, this.dateChangedCallback.bind(this));\n    };\n    DateRangePickerComponent.prototype.ngOnDestroy = function () {\n        if (this.pickerJQuery != null)\n            this.pickerJQuery.data('daterangepicker').remove();\n    };\n    DateRangePickerComponent.prototype.dateChangedCallback = function (start, end, label) {\n        this.selectionChanged.emit([start, end]);\n    };\n    DateRangePickerComponent.prototype.getDefaultSettings = function () {\n        var _a;\n        var last7days = this.translation.translate('DATERANGEPICKER.RANGE.LAST_7DAYS');\n        var last30days = this.translation.translate('DATERANGEPICKER.RANGE.LAST_30DAYS');\n        var lastmonth = this.translation.translate('DATERANGEPICKER.RANGE.LAST_MONTH');\n        var currentmonth = this.translation.translate('DATERANGEPICKER.RANGE.CURRENT_MONTH');\n        var currentweek = this.translation.translate('DATERANGEPICKER.RANGE.CURRENT_WEEK');\n        var lastweek = this.translation.translate('DATERANGEPICKER.RANGE.LAST_WEEK');\n        var m = __WEBPACK_IMPORTED_MODULE_3_moment___default()();\n        var sod = m.clone().startOf('day');\n        var som = m.clone().startOf('month');\n        var sow = m.clone().startOf('week');\n        return {\n            showDropdowns: true,\n            ranges: (_a = {},\n                _a[last7days] = [sod.clone().subtract(6, 'days'), m],\n                _a[lastweek] = [\n                    sod.clone().subtract(1, 'week').startOf('week'),\n                    m.clone().subtract(1, 'week').endOf('week')\n                ],\n                _a[currentweek] = [sow, sod],\n                _a[last30days] = [sod.clone().subtract(29, 'days'), m],\n                _a[lastmonth] = [\n                    sod.clone().subtract(1, 'month').startOf('month'),\n                    m.clone().subtract(1, 'month').endOf('month')\n                ],\n                _a[currentmonth] = [som, sod],\n                _a),\n            startDate: sod.clone().subtract(30, 'days').format('L'),\n            endDate: sod.format('L'),\n            opens: 'left',\n            buttonClasses: ['btn btn-sm'],\n            applyClass: 'btn-success',\n            cancelClass: 'btn-default',\n            showCustomRangeLabel: false,\n            linkedCalendars: false,\n            autoApply: false,\n            alwaysShowCalendars: true,\n            maxDate: m\n        };\n    };\n    DateRangePickerComponent.prototype.getDateRangePickerLocale = function () {\n        var locale = (this.locale.getCurrentLanguage() || 'en').toLowerCase();\n        var localeData = __WEBPACK_IMPORTED_MODULE_3_moment___default.a.localeData(locale);\n        return {\n            cancelLabel: this.translation.translate('DATERANGEPICKER.LABEL.CANCEL'),\n            applyLabel: this.translation.translate('DATERANGEPICKER.LABEL.APPLY'),\n            format: localeData.longDateFormat('L'),\n            separator: '-',\n            weekLabel: this.translation.translate('DATERANGEPICKER.LABEL.WEEK'),\n            customRangeLabel: this.translation.translate('DATERANGEPICKER.LABEL.CUSTOM_RANGE'),\n            firstDay: localeData.firstDayOfWeek(),\n            daysOfWeek: localeData.weekdaysMin(),\n            monthNames: localeData.monthsShort()\n        };\n    };\n    var _a, _b, _c, _d;\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n        __metadata(\"design:type\", Boolean)\n    ], DateRangePickerComponent.prototype, \"enable\", void 0);\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n        __metadata(\"design:type\", String)\n    ], DateRangePickerComponent.prototype, \"showIcon\", void 0);\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n        __metadata(\"design:type\", typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_2_daterangepicker__[\"Settings\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2_daterangepicker__[\"Settings\"]) === \"function\" && _a || Object)\n    ], DateRangePickerComponent.prototype, \"options\", void 0);\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n        __metadata(\"design:type\", Object)\n    ], DateRangePickerComponent.prototype, \"width\", void 0);\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n        __metadata(\"design:type\", Object)\n    ], DateRangePickerComponent.prototype, \"opens\", void 0);\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(),\n        __metadata(\"design:type\", Object)\n    ], DateRangePickerComponent.prototype, \"selectionChanged\", void 0);\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewChild\"])('picker'),\n        __metadata(\"design:type\", typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"]) === \"function\" && _b || Object)\n    ], DateRangePickerComponent.prototype, \"picker\", void 0);\n    DateRangePickerComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'date-range-picker',\n            template: \"\\n\\t\\t<div *ngIf=\\\"enable\\\" class=\\\"input-group input-group-sm\\\" [style.width]=\\\"width\\\">\\n\\t\\t\\t<span *ngIf=\\\"showIcon !== 'none' && showIcon === 'left'\\\"\\n\\t\\t\\t\\t\\tclass=\\\"input-group-addon\\\"><i class=\\\"fa fa-calendar\\\"></i></span>\\n\\t\\t\\t<input #picker class=\\\"form-control\\\" type=\\\"text\\\" value=\\\"{{range}}\\\"/>\\n\\t\\t\\t<span *ngIf=\\\"showIcon !== 'none' && showIcon === 'right'\\\"\\n\\t\\t\\t\\t\\tclass=\\\"input-group-addon\\\"><i class=\\\"fa fa-calendar\\\"></i></span>\\n\\t\\t</div>\",\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_1_angular_l10n__[\"a\" /* LocaleService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1_angular_l10n__[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_1_angular_l10n__[\"d\" /* TranslationService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1_angular_l10n__[\"d\" /* TranslationService */]) === \"function\" && _d || Object])\n    ], DateRangePickerComponent);\n    return DateRangePickerComponent;\n}(__WEBPACK_IMPORTED_MODULE_1_angular_l10n__[\"b\" /* Localization */]));\n\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(21)))\n\n/***/ }),\n\n/***/ 1355:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<a class=\\\"btn btn-sm btn-white\\\" *ngFor=\\\"let item of model\\\" [class.active]=\\\"isActive(item)\\\" (click)=\\\"click(item)\\\">\\n\\n    <i class=\\\"fa fa-fw\\\" [ngClass]=\\\"icon(item)\\\"></i>\\n    <span>{{item}}</span>\\n\\n</a>\\n\"\n\n/***/ }),\n\n/***/ 1356:\n/***/ (function(module, exports) {\n\nmodule.exports = \"@charset \\\"UTF-8\\\";\\n:host {\\n  display: block;\\n  position: relative; }\\n:host .btn {\\n    margin: 2px;\\n    border-radius: 0;\\n    min-width: 120px;\\n    opacity: 0.5;\\n    text-align: left; }\\n:host .btn:before {\\n      display: inline-block;\\n      font: normal normal normal 14px/1 FontAwesome;\\n      font-size: inherit;\\n      text-rendering: auto;\\n      -webkit-font-smoothing: antialiased;\\n      -moz-osx-font-smoothing: grayscale;\\n      content: '';\\n      vertical-align: middle;\\n      width: 20px;\\n      margin: 0;\\n      color: #335eea; }\\n:host .btn:active, :host .btn.active, :host .btn:hover, :host .btn.hover {\\n      background: white;\\n      -webkit-box-shadow: none;\\n              box-shadow: none; }\\n:host .btn:hover, :host .btn.hover {\\n      opacity: 0.7; }\\n:host .btn:active, :host .btn.active {\\n      opacity: 1; }\\n:host .btn:active:before, :host .btn.active:before {\\n        content: \\\"\\\"; }\\n:host .btn input {\\n      visibility: hidden;\\n      width: 0;\\n      height: 0;\\n      position: absolute; }\\n:host .btn i {\\n      color: inherit; }\\n:host .btn span {\\n      color: inherit;\\n      font-weight: 200; }\\n\"\n\n/***/ }),\n\n/***/ 1357:\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n<label *ngIf=\\\"label\\\">{{label}}: </label>\\n\\n<button class=\\\"btn btn-sm\\\"\\n        [disabled]=\\\"disabled\\\"\\n        [style.background-color]=\\\"selectedItem?.color\\\"\\n        [style.border-color]=\\\"selectedItem?.color\\\"\\n        [style.color]=\\\"selectedItem?.textColor\\\"\\n        [class.active]=\\\"active\\\"\\n        [@ShadowAnimation]=\\\"active?'active':'inactive'\\\"\\n        (click)=\\\"onToggle()\\\">\\n\\n    <i *ngIf=\\\"selectedItem?.icon\\\"\\n       class=\\\"dropdown-ico fa fa-fw\\\"\\n       [ngClass]=\\\"getIcoCssClasses(selectedItem)\\\"></i>\\n\\n    <span>{{selectedItem?.label}}</span>\\n\\n    <i *ngIf=\\\"!disabled\\\"\\n       class=\\\"dropdown-dir-ico fa\\\"\\n       [class.fa-sort-desc]=\\\"active\\\"\\n       [class.fa-sort-asc]=\\\"!active\\\">\\n    </i>\\n</button>\\n\\n<dropdown-list *ngIf=\\\"!disabled && active\\\"\\n               [model]=\\\"model\\\"\\n               [selected]=\\\"selectedItem\\\"\\n               [direction]=\\\"direction\\\"\\n               (onSelect)=\\\"select($event)\\\"></dropdown-list>\\n\\n\"\n\n/***/ }),\n\n/***/ 1358:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  position: relative;\\n  display: inline-block;\\n  vertical-align: middle;\\n  text-align: center; }\\n  :host button {\\n    width: 100%;\\n    min-width: 150px;\\n    margin-left: 0 !important;\\n    margin-right: 0 !important;\\n    text-transform: none;\\n    background: none;\\n    border-color: lightgray !important; }\\n  :host button[disabled] {\\n      opacity: 1; }\\n  :host button span {\\n      margin: auto; }\\n  :host button i.dropdown-dir-ico {\\n      position: absolute;\\n      top: 50%;\\n      margin-left: 8px;\\n      margin-top: -0.3em; }\\n  :host.small button {\\n    min-width: 75px; }\\n  :host.small button span {\\n      position: relative;\\n      left: -5px; }\\n  :host.small button i.dropdown-dir-ico {\\n      margin-left: 2px; }\\n  :host.active button i.dropdown-dir-ico {\\n    margin-top: -0.7em; }\\n  :host.active.up button {\\n    border-top-color: transparent !important;\\n    border-top-left-radius: 0;\\n    border-top-right-radius: 0; }\\n  :host.active.down button {\\n    border-bottom-color: transparent !important;\\n    border-bottom-left-radius: 0;\\n    border-bottom-right-radius: 0; }\\n  .input-group :host {\\n  background: white; }\\n\"\n\n/***/ }),\n\n/***/ 1359:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!--[ngClass]=\\\"directionClass()\\\"-->\\n<ul #list class=\\\"dropdown-list\\\"\\n    [@ShadowAnimation]=\\\"'active'\\\"\\n    [style.border-color]=\\\"selected?.color\\\">\\n    <li *ngFor=\\\"let item of model|dropdownListPipe:selected;let idx = index\\\" [class.selected]=\\\"selectedListIdx == idx || item.markSelected\\\" [class.separator-below]=\\\"item.hasSeparatorBelow\\\">\\n        <a (click)=\\\"select(item)\\\" class=\\\"btn btn-xs\\\">\\n            <i *ngIf=\\\"item?.icon\\\" class=\\\"dropdown-ico fa fa-fw pull-left\\\" [ngClass]=\\\"iconClasses(item)\\\"></i>\\n            <span>{{item?.label}}</span>\\n        </a>\\n    </li>\\n</ul>\\n\\n\"\n\n/***/ }),\n\n/***/ 1360:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: block;\\n  color: inherit; }\\n  :host ul.dropdown-list {\\n    position: absolute;\\n    z-index: 99999;\\n    list-style-type: none;\\n    padding: 0;\\n    width: 100%;\\n    min-width: 150px;\\n    max-height: 200px;\\n    overflow-x: hidden;\\n    overflow-y: auto;\\n    background: white;\\n    border: 1px solid lightgray;\\n    border-radius: 0 0 3px 3px;\\n    color: inherit; }\\n  :host ul.dropdown-list::-webkit-scrollbar {\\n      width: 8px;\\n      height: 8px;\\n      background: none; }\\n  :host ul.dropdown-list::-webkit-scrollbar-track {\\n      -webkit-box-shadow: none;\\n              box-shadow: none;\\n      background: #EEEEEE; }\\n  :host ul.dropdown-list::-webkit-scrollbar-thumb:window-inactive {\\n      background: #DDDDDD; }\\n  :host ul.dropdown-list::-webkit-scrollbar-thumb {\\n      background: #CCCCCC; }\\n  :host ul.dropdown-list li {\\n      cursor: pointer;\\n      color: inherit; }\\n  :host ul.dropdown-list li a {\\n        color: inherit;\\n        padding: 5px 10px;\\n        display: inline-block;\\n        width: 100%;\\n        text-decoration: none;\\n        border-radius: 0;\\n        -webkit-box-shadow: none;\\n                box-shadow: none;\\n        background-color: transparent; }\\n  :host ul.dropdown-list li a i {\\n          margin-left: 5px; }\\n  :host ul.dropdown-list li a span {\\n          margin: auto;\\n          text-decoration: none;\\n          color: inherit; }\\n  :host ul.dropdown-list li:hover a {\\n        background-color: #EFEFEF; }\\n  :host ul.dropdown-list li.selected {\\n      background: #EFEFEF; }\\n  :host ul.dropdown-list li.separator-below {\\n      border-bottom: solid 1px #d3d3d3; }\\n\"\n\n/***/ }),\n\n/***/ 1361:\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n<div *ngFor=\\\"let val of values\\\" [ngClass]=\\\"getImageClass(val)\\\" (click)=\\\"onClick(val)\\\">\\n    <img [src]=\\\"urlParser(val)\\\">\\n    <span>{{val}}</span>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1362:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: block;\\n  width: 100%;\\n  overflow: hidden; }\\n  :host div {\\n    position: relative;\\n    float: left;\\n    margin: 1%;\\n    width: 48%;\\n    overflow: hidden;\\n    cursor: pointer;\\n    -webkit-transition: -webkit-box-shadow 200ms;\\n    transition: -webkit-box-shadow 200ms;\\n    transition: box-shadow 200ms;\\n    transition: box-shadow 200ms, -webkit-box-shadow 200ms; }\\n  :host div img {\\n      width: 100%;\\n      padding: 2px;\\n      background: #ffffff;\\n      opacity: 0.5; }\\n  :host div span {\\n      position: absolute;\\n      left: 4px;\\n      bottom: 4px;\\n      color: #EFEFEF;\\n      font-size: 16px;\\n      font-weight: 200;\\n      text-shadow: 0 0 8px #000; }\\n  :host div:hover, :host div.active {\\n      -webkit-box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.8);\\n              box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.8); }\\n  :host div:hover img {\\n      opacity: 0.75; }\\n  :host div.active img {\\n      opacity: 1; }\\n\"\n\n/***/ }),\n\n/***/ 1363:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  position: relative;\\n  display: block; }\\n\\n:host input {\\n  display: inline-block;\\n  border-radius: 0;\\n  background: none;\\n  border: 1px solid transparent;\\n  margin: 0;\\n  width: 100%;\\n  height: 3em;\\n  padding: 0.5em 2em 0.5em 1em;\\n  line-height: 1.42857;\\n  color: #333;\\n  border-bottom-color: #333; }\\n\\n:host.on, :host.on input {\\n  width: 100%; }\\n\\n:host.off, :host.off {\\n  width: auto; }\\n\\n:host input, :host input:hover, :host input:active, :host input:focus {\\n  outline: none; }\\n\\n:host input:-webkit-autofill, :host input:-webkit-autofill:hover, :host input:-webkit-autofill:active, :host input:-webkit-autofill:focus {\\n  -webkit-transition: background-color 5000s ease-in-out 0s;\\n  transition: background-color 5000s ease-in-out 0s; }\\n\\n:host input::-webkit-input-placeholder, :host input::-moz-placeholder, :host input:-ms-input-placeholder, :host input:-moz-placeholder {\\n  color: #333; }\\n\\n:host.off input {\\n  /*border: none;*/\\n  /*margin: 1px;*/\\n  /*padding-left: 5px;*/\\n  /*cursor: default;*/ }\\n\\n:host.on input, :host.over input {\\n  /*background: #F00;*/\\n  /*border: 1px solid #F00;*/\\n  /*margin: 0;*/\\n  /*padding-left: 5px;*/\\n  /*cursor: pointer;*/ }\\n\\n:host i.fa.edit-ico {\\n  /*position: absolute;*/\\n  display: inline-block;\\n  margin-left: -1em;\\n  pointer-events: none; }\\n\\n:host.off i.fa.edit-ico {\\n  /*display: none;*/ }\\n\\n:host.on i.fa.edit-ico, :host.over i.fa.edit-ico {\\n  /*display: initial;*/\\n  /*color: #F00;*/ }\\n\"\n\n/***/ }),\n\n/***/ 1364:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<table class=\\\"table table-valign-middle\\\">\\n    <thead>\\n        <tr>\\n            <th *ngFor=\\\"let column of columns;\\\">{{column}}</th>\\n            <th>&nbsp;</th>\\n        </tr>\\n    </thead>\\n    <tbody>\\n        <tr *ngFor=\\\"let item of value\\\">\\n            <td *ngFor=\\\"let column of columns;\\\">{{item[column]}}</td>\\n            <td style=\\\"width:20%;\\\">\\n                <div class=\\\"btn-group\\\">\\n                    <a class=\\\"\\\">\\n                        <i class=\\\"fa fa-edit\\\"></i>\\n                    </a>\\n                    <a class=\\\"\\\">\\n                        <i class=\\\"fa fa-trash\\\"></i>\\n                    </a>\\n                </div>\\n            </td>\\n        </tr>\\n    </tbody>\\n</table>\\n<a class=\\\"\\\">add new item <i class=\\\"fa fa-plus\\\"></i></a>\\n\"\n\n/***/ }),\n\n/***/ 1365:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  outline: 1px solid red; }\\n\"\n\n/***/ }),\n\n/***/ 1366:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<ng-template [ngIf]=\\\"!dropdownMode\\\">\\n\\n    <button *ngIf=\\\"showPrevBtn\\\" class=\\\"btn btn-sm btn-white\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n        (click)=\\\"prevPage()\\\" aria-label=\\\"Poprzednia strona\\\">&laquo;</button>\\n\\n    <button *ngIf=\\\"showPrevPortionBtn\\\" class=\\\"btn btn-sm btn-white\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n     (click)=\\\"prevPortion()\\\" aria-label=\\\"Poprzednie strony\\\">...</button>\\n\\n    <button class=\\\"btn btn-sm btn-white\\\"\\n        *ngFor=\\\"let page of pagesData;\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n        [disabled]=\\\"page==service?.model.actual\\\" (click)=\\\"click(page)\\\" >{{page}}</button>\\n\\n    <button *ngIf=\\\"showNextPortionBtn\\\" class=\\\"btn btn-sm btn-white\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n        (click)=\\\"nextPortion()\\\" aria-label=\\\"Następne strony\\\">...</button>\\n\\n    <button *ngIf=\\\"showNextBtn\\\" class=\\\"btn btn-sm btn-white\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n        (click)=\\\"nextPage()\\\" aria-label=\\\"Następna strona\\\">&raquo;</button>\\n\\n</ng-template>\\n\\n<dropdown *ngIf=\\\"dropdownMode\\\" [model]=\\\"dropdownModel\\\" [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n          direction=\\\"1\\\" (onSelect)=\\\"dropdownSelectPage($event)\\\"></dropdown>\\n\"\n\n/***/ }),\n\n/***/ 1367:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host button {\\n  border: none; }\\n\\n:host.dropdownMode {\\n  -webkit-box-pack: start;\\n      -ms-flex-pack: start;\\n          justify-content: flex-start; }\\n\\n:host /deep/ dropdown {\\n  float: left; }\\n\\n:host /deep/ dropdown button:not(.active) {\\n  border: none;\\n  margin: 1px; }\\n\"\n\n/***/ }),\n\n/***/ 1368:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div *ngIf=\\\"service.model && service.model.total > service.model.size\\\" class=\\\"row\\\">\\n    <div class=\\\"pagination-info col-xs-3\\\">\\n        <p>Strona {{(service.model.actual)}} z {{formatTotalPages}}</p>\\n        <p><small>pozycje {{formatActivePage + 1}} - {{formatPageMax}} z {{service.model.total}}</small></p>\\n    </div>\\n    <pagination-btns class=\\\"pagination-buttons col-xs-6\\\" ></pagination-btns>\\n    <pagination-size class=\\\"pagination-size col-xs-3\\\"></pagination-size>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1369:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  width: 100%;\\n  text-align: center; }\\n  :host .pagination-info p {\\n    margin: 0; }\\n\"\n\n/***/ }),\n\n/***/ 1370:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host input[type='range'] {\\n  padding: 0;\\n  width: 100%;\\n  height: 1em;\\n  background: transparent;\\n  font-size: 16px;\\n  cursor: pointer;\\n  margin-top: 5px; }\\n  :host input[type='range'], :host input[type='range']::-webkit-slider-runnable-track, :host input[type='range']::-webkit-slider-thumb {\\n    -webkit-appearance: none; }\\n  :host input[type='range']::-webkit-slider-runnable-track {\\n    margin: 0 0.75em;\\n    border: none;\\n    padding: 0 0.125em;\\n    width: 100%;\\n    height: 0.25em;\\n    border-radius: 0.125em;\\n    background: #EEE; }\\n  :host input[type='range']::-moz-range-track {\\n    border: none;\\n    padding: 0 0.125em;\\n    width: 100%;\\n    height: 0.25em;\\n    border-radius: 0.125em;\\n    background: #EEE; }\\n  :host input[type='range']::-ms-track {\\n    margin: 0 0.75em;\\n    border: none;\\n    padding: 0 0.125em;\\n    width: 100%;\\n    height: 0.25em;\\n    border-radius: 0.125em;\\n    background: #EEE;\\n    color: transparent; }\\n  :host input[type='range']::-webkit-slider-thumb {\\n    margin-top: -0.625em;\\n    -webkit-box-sizing: border-box;\\n            box-sizing: border-box;\\n    border: solid 0.25em #FFF;\\n    width: 1.5em;\\n    height: 1.5em;\\n    border-radius: 50%;\\n    background: #EEE;\\n    -webkit-transition: .3s;\\n    transition: .3s; }\\n  :host input[type='range']::-moz-range-thumb {\\n    box-sizing: border-box;\\n    border: solid 0.25em #FFF;\\n    width: 1.5em;\\n    height: 1.5em;\\n    border-radius: 50%;\\n    background: #EEE;\\n    -webkit-transition: .3s;\\n    transition: .3s;\\n    cursor: ew-resize; }\\n  :host input[type='range']::-ms-thumb {\\n    box-sizing: border-box;\\n    border: solid 0.25em #FFF;\\n    width: 1.5em;\\n    height: 1.5em;\\n    border-radius: 50%;\\n    background: #EEE;\\n    -webkit-transition: .3s;\\n    transition: .3s; }\\n  :host input[type='range']::-ms-fill-lower, :host input[type='range']::-ms-fill-upper {\\n    background: transparent; }\\n  :host input[type='range']:focus {\\n    outline: none; }\\n  :host input[type='range']:focus::-webkit-slider-runnable-track {\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-moz-range-track {\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-ms-fill-lower {\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-webkit-slider-thumb {\\n      border: solid 0 rgba(255, 255, 255, 0);\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-moz-range-thumb {\\n      border: solid 0 rgba(255, 255, 255, 0);\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-ms-thumb {\\n      border: solid 0 rgba(255, 255, 255, 0);\\n      background: #0f9d58; }\\n  :host input[type='range']:focus /deep/ #thumb:before {\\n      -webkit-transform: translate(-50%, -4.5em) rotate(45deg) scale(1);\\n              transform: translate(-50%, -4.5em) rotate(45deg) scale(1);\\n      opacity: .99; }\\n  :host input[type='range']:focus /deep/ #thumb:after {\\n      -webkit-transform: translate(-50%, -3.375em) scale(1);\\n              transform: translate(-50%, -3.375em) scale(1);\\n      opacity: .99; }\\n  :host input[type='range']:active::-webkit-slider-thumb {\\n    border: solid 0 rgba(255, 255, 255, 0);\\n    background: #0f9d58; }\\n  :host input[type='range']:active::-moz-range-thumb {\\n    border: solid 0 rgba(255, 255, 255, 0);\\n    background: #0f9d58; }\\n  :host input[type='range']:active::-ms-thumb {\\n    border: solid 0 rgba(255, 255, 255, 0);\\n    background: #0f9d58; }\\n  :host.disabled {\\n  opacity: 0.46;\\n  pointer-events: none; }\\n\"\n\n/***/ }),\n\n/***/ 1371:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div *ngFor=\\\"let item of model\\\" class=\\\"singlechoiche-switch\\\">\\n\\t<switch size=\\\"small\\\" \\n\\t\\t[checked]=\\\"isItemChecked(item)\\\" (checkedChange)=\\\"onChange(item, $event)\\\"\\n\\t\\t[labelLeft]=\\\"{on: item + ' :', off: item + ' :'}\\\" [labelRight]=\\\"{on: 'enable', off: 'disable'}\\\">\\n\\t</switch>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1372:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .singlechoiche-switch {\\n  margin: 5px 0;\\n  padding: 10px 15px;\\n  font-size: 1.25em; }\\n  :host .singlechoiche-switch /deep/.switch-label.left {\\n    display: inline-block;\\n    width: 80px;\\n    text-align: right; }\\n\"\n\n/***/ }),\n\n/***/ 1373:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<input type=\\\"file\\\" multiple (change)=\\\"onFileBrowse()\\\" #browse/>\\n\\n<div *ngIf=\\\"!fileData\\\" class=\\\"upload-title\\\">\\n    <a (click)=\\\"onBrowse()\\\" >Choose file</a><span> or drag it here.</span>\\n</div>\\n\\n<p class=\\\"upload-preview\\\" #preview>{{fileMessage}}</p>\\n\\n\\n<div *ngIf=\\\"fileData\\\" class=\\\"upload-buttons\\\">\\n    <button (click)=\\\"onRemove()\\\"><i class=\\\"fa fa-trash\\\"></i> delete </button>\\n    <button (click)=\\\"onBrowse()\\\"><i class=\\\"fa fa-refresh\\\"></i> change </button>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1374:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: block;\\n  position: relative;\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVR42u3PMREAMAwDsfBHYhhh1oLwkEXDrz55krym3a0aAAAAAAAAgHNAO9AeAAAAAAAAADgHfOyWbLWYpELvAAAAAElFTkSuQmCC\\\") repeat;\\n  text-align: center;\\n  margin: 5px; }\\n  :host input[type=\\\"file\\\"] {\\n    visibility: hidden;\\n    height: 0;\\n    width: 0;\\n    position: absolute; }\\n  :host .upload-title {\\n    position: relative;\\n    color: #fcfcfc;\\n    font-size: 2em;\\n    padding: 1em;\\n    line-height: 1em;\\n    white-space: normal; }\\n  :host .upload-title a {\\n      cursor: pointer;\\n      text-decoration: none; }\\n  :host .upload-preview {\\n    position: absolute;\\n    padding: 0;\\n    visibility: hidden;\\n    width: 100%;\\n    height: 0;\\n    color: #FFF;\\n    font-size: 1.5em;\\n    line-height: 1.6em; }\\n  :host .upload-preview.visible {\\n      position: relative;\\n      visibility: visible;\\n      padding: 0.5em;\\n      height: auto; }\\n  :host .upload-buttons {\\n    position: absolute;\\n    left: 0;\\n    right: 0;\\n    bottom: 0;\\n    height: 32px;\\n    width: 100%;\\n    visibility: hidden; }\\n  :host .upload-buttons button {\\n      float: left;\\n      color: white;\\n      width: 50%;\\n      height: 32px;\\n      background: none;\\n      border: none;\\n      font-weight: 200;\\n      background: rgba(0, 0, 0, 0.1); }\\n  :host .upload-buttons button:hover {\\n        background: rgba(0, 0, 0, 0.25); }\\n  :host.hover {\\n    -webkit-box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.7);\\n            box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.7); }\\n  :host:hover .upload-buttons {\\n    visibility: visible; }\\n\"\n\n/***/ }),\n\n/***/ 1375:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div *ngIf=\\\"resample && (imageData != null)\\\" class=\\\"resample-image-con\\\">\\n    <small>Sample down logo <span *ngIf=\\\"resampleSizeValue < 100\\\"> by {{100 - resampleSizeValue}} %</span></small>\\n    <rangeslider [value]=\\\"resampleSizeValue\\\" (valueChange)=\\\"onResamplePreview($event)\\\" (onMouseUp)=\\\"onResampleImage($event)\\\"\\n                [step]=\\\"1\\\" [min]=\\\"1\\\" [max]=\\\"100\\\" [showLabels]=\\\"false\\\"></rangeslider>\\n</div>\\n<div class=\\\"upload-image-con\\\">\\n    <input type=\\\"file\\\" multiple (change)=\\\"onFileBrowse()\\\" #browse/>\\n\\n    <div *ngIf=\\\"!imageData\\\" class=\\\"upload-title\\\">\\n        <a (click)=\\\"onBrowse()\\\" >Choose logo file</a><span> or drag it here.</span>\\n    </div>\\n\\n    <img class=\\\"upload-preview\\\" #preview>\\n\\n    <div *ngIf=\\\"imageData\\\" class=\\\"upload-buttons\\\">\\n        <button (click)=\\\"onRemove()\\\"><i class=\\\"fa fa-trash\\\"></i> delete </button>\\n        <button (click)=\\\"onChange()\\\"><i class=\\\"fa fa-refresh\\\"></i> change </button>\\n    </div>\\n</div>\\n\\n\"\n\n/***/ }),\n\n/***/ 1376:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: block;\\n  position: relative; }\\n  :host .upload-image-con {\\n    display: block;\\n    position: relative;\\n    text-align: center;\\n    margin: 5px;\\n    padding: 5px;\\n    min-height: 32px; }\\n  :host .upload-image-con::before {\\n      content: '';\\n      position: absolute;\\n      top: 0;\\n      right: 0;\\n      left: 0;\\n      bottom: 0;\\n      background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVR42u3PMREAMAwDsfBHYhhh1oLwkEXDrz55krym3a0aAAAAAAAAgHNAO9AeAAAAAAAAADgHfOyWbLWYpELvAAAAAElFTkSuQmCC\\\");\\n      background-repeat: repeat; }\\n  :host .upload-image-con input[type=\\\"file\\\"] {\\n      visibility: hidden;\\n      height: 0;\\n      width: 0;\\n      position: absolute; }\\n  :host .upload-image-con .upload-title {\\n      position: relative;\\n      color: #fcfcfc;\\n      font-size: 2em;\\n      padding: 1em;\\n      line-height: 1em;\\n      white-space: normal; }\\n  :host .upload-image-con .upload-title a {\\n        cursor: pointer;\\n        text-decoration: none; }\\n  :host .upload-image-con .upload-preview {\\n      position: absolute;\\n      max-width: 100%;\\n      height: 0;\\n      padding: 0;\\n      visibility: hidden; }\\n  :host .upload-image-con .upload-preview.visible {\\n        position: relative;\\n        visibility: visible;\\n        height: auto; }\\n  :host .upload-image-con .upload-buttons {\\n      position: absolute;\\n      left: 0;\\n      right: 0;\\n      bottom: 0;\\n      height: 32px;\\n      width: 100%;\\n      visibility: hidden; }\\n  :host .upload-image-con .upload-buttons button {\\n        float: left;\\n        color: white;\\n        width: 50%;\\n        height: 32px;\\n        background: none;\\n        border: none;\\n        font-weight: 200;\\n        background: rgba(0, 0, 0, 0.1); }\\n  :host .upload-image-con .upload-buttons button:hover {\\n          background: rgba(0, 0, 0, 0.25); }\\n  :host .upload-image-con.hover {\\n      -webkit-box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.7);\\n              box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.7); }\\n  :host .upload-image-con:hover .upload-buttons {\\n      visibility: visible; }\\n  :host .resample-image-con {\\n    text-align: center;\\n    padding: 5px 0;\\n    min-height: 50px; }\\n\"\n\n/***/ }),\n\n/***/ 1377:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_AUDIENCE.TITLE' | translate:lang }}</h1>\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_AUDIENCE.HEADER.1' | translate:lang }}</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-left m-l-10\\\">\\n\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"chartDataExportCsv()\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-download\\\"></i> CSV\\n\\t\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<chart-granularity #granularity size=\\\"sm\\\" \\n\\t\\t\\t\\t\\t\\t\\t[types]=\\\"chartService.granularityTypes\\\" \\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"chartService.activeGranularity\\\"\\n\\t\\t\\t\\t\\t\\t\\t(onTypeChange)=\\\"chartService.onGranularityChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-granularity>\\n\\t\\t\\t\\t\\t\\t<chart-picker #picker size=\\\"sm\\\" class=\\\"m-l-10\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartTypes]=\\\"chartService.chartTypes\\\" \\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"chartService.activeChartType\\\" \\n\\t\\t\\t\\t\\t\\t\\t(chartTypeChanged)=\\\"chartService.onChartTypeChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-picker>\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:chartService.startDate, endDate:chartService.endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<chart #chartElement \\n\\t\\t\\t\\t\\t[chartData]=\\\"chartService.chartData\\\" \\n\\t\\t\\t\\t\\t[chartLabels]=\\\"chartService.chartLabels\\\" \\n\\t\\t\\t\\t\\t[chartType]=\\\"chartService.activeChartType\\\" \\n\\t\\t\\t\\t\\t[startDate]=\\\"chartService.startDate\\\" \\n\\t\\t\\t\\t\\t[endDate]=\\\"chartService.endDate\\\" \\n\\t\\t\\t\\t\\t[granularity]=\\\"chartService.activeGranularity\\\">\\n\\t\\t\\t\\t</chart>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n<div class=\\\"row\\\">\\n\\t<div [ngClass]=\\\"{'col-md-3 col-sm-4': user.isEngagementRateEnabled(), 'col-md-4':!user.isEngagementRateEnabled()}\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-blue\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.USERS' | translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.users !== null\\\">{{summary.users | number}}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.users === null\\\">-</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div [ngClass]=\\\"{'col-md-3 col-sm-4': user.isEngagementRateEnabled(), 'col-md-4':!user.isEngagementRateEnabled()}\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-black\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS' | translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.views !== null\\\">{{summary.views | number}}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.views === null\\\">-</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div [ngClass]=\\\"{'col-md-3 col-sm-4': user.isEngagementRateEnabled(), 'col-md-4':!user.isEngagementRateEnabled()}\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-yellow\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS_PER_USER' | translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.viewsPerUser !== null\\\">{{summary.viewsPerUser | number:'1.0-2'}}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.viewsPerUser === null\\\">-</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-3 col-sm-4\\\" *ngIf=\\\"user.isEngagementRateEnabled()\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-blue\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.AVG_WATCHING_TIME' | translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.avgWatchingTime !== null\\\">{{summary.avgWatchingTime | number:'1.0-0'}} [s]</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.avgWatchingTime === null\\\">-</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6 col-sm-6\\\" *ngIf=\\\"currentAccountingPeriodFromDate && (currentAccountingBaseViewsSize > 0)\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-black\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.VIEWS' | translate:lang }} ({{ 'ANALYTICS_AUDIENCE.VIEWS_OPEN_PERIOD' | translate:lang }})</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\">{{ currentAccountingPeriodViews | number}} / {{ currentAccountingBaseViewsSize  | number}}</div>\\n\\t\\t\\t<div class=\\\"stats-progress progress\\\">\\n\\t\\t\\t\\t<div class=\\\"progress-bar\\\" [style.width]=\\\"calcViewsUsagePercent(currentAccountingPeriodViews, currentAccountingBaseViewsSize)+'%'\\\"></div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.FOR_CURR_ACCOUNTING_MONTH' | translate:lang }} ({{currentAccountingPeriodFromDate.format('L')}} - {{currentAccountingPeriodToDate.format('L')}})</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6 col-sm-6\\\" *ngIf=\\\"lastAccountingPeriodFromDate && (lastAccountingBaseViewsSize > 0)\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-yellow\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.VIEWS' | translate:lang }} ({{ 'ANALYTICS_AUDIENCE.VIEWS_PREVIOUS_PERIOD' | translate:lang }})</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\">{{ lastAccountingPeriodViews | number}} / {{ lastAccountingBaseViewsSize | number}}</div>\\n\\t\\t\\t<div class=\\\"stats-progress progress\\\">\\n\\t\\t\\t\\t<div class=\\\"progress-bar\\\" [style.width]=\\\"calcViewsUsagePercent(lastAccountingPeriodViews, lastAccountingBaseViewsSize)+'%'\\\"></div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.FOR_PREV_ACCOUNTING_MONTH' | translate:lang }} ({{lastAccountingPeriodFromDate.format('L')}} - {{lastAccountingPeriodToDate.format('L')}})</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_AUDIENCE.HEADER.2' | translate:lang }}<span style=\\\"float:right;line-height:20px;font-size:9px; font-style: italic;\\\">( * - {{ 'ANALYTICS_AUDIENCE.SUBHEADER.6' | translate:lang }} )</span></h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"monthlyStats && (monthlyStats.length > 0)\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 m-b-10\\\">\\n\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"monthlyStatsExportCsv()\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-download\\\"></i> CSV\\n\\t\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"monthlyStats && (monthlyStats.length > 0)\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-6\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_AUDIENCE.WORD.MONTH' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_AUDIENCE.WORD.VIEWS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_AUDIENCE.WORD.USERS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of monthlyStats.slice(0, 6); let idx = index\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.date.format('YYYY MMM')}} <span *ngIf=\\\"idx == 0\\\">*</span></td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.users}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-6\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>Month</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>Views</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>Users</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of monthlyStats.slice(6, 12)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.date.format('YYYY MMM')}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.users}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"!monthlyStats || !monthlyStats.length\\\" class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"table-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n\"\n\n/***/ }),\n\n/***/ 1378:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_HEADER' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<span style=\\\"font-size:20px;\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.FILTERS' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 m-t-10\\\">\\n\\t\\t\\t\\t\\t\\t<span style=\\\"color:#242a30;font-size:14px;margin-right:10px;display:inline-block;line-height:44px;width:50px;\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.FILTERS_TITLE' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" (keypress)=\\\"onSearchKeyPress($event)\\\" [(ngModel)]=\\\"filters.text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\tplaceholder=\\\"{{ 'ANALYTICS_CONTENT.PLACEHOLDER.SEARCH' | translate:lang }}\\\" style=\\\"width: 300px; margin-top:5px; display:inline-block;vertical-align: top;\\\">\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 m-t-10\\\">\\n\\t\\t\\t\\t\\t\\t<span style=\\\"color:#242a30;font-size:14px;margin-right:10px;display:inline-block;line-height:44px;width:50px;\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.FILTERS_TAGS' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t<tag-input class=\\\"m-l-0\\\" style=\\\"display:inline-block; width:300px;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[(ngModel)] = \\\"existingTagSelector.selectedTagsList\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tmodelAsStrings=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(onAdd)=\\\"onTagAdd($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[onAdding]=\\\"existingTagSelector.onTagAdding\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(onRemove)=\\\"onTagRemove($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttheme=\\\"ngx-chips-bradmax-theme\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tplaceholder=\\\"{{ 'ANALYTICS_TAG_SERVICE.PLACEHOLDER' | translate:lang }}\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tsecondaryPlaceholder=\\\"{{ 'ANALYTICS_TAG_SERVICE.INITIAL_PLACEHOLDER' | translate:lang }}\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<tag-input-dropdown [autocompleteObservable]=\\\"existingTagSelector.onTagSearch\\\"></tag-input-dropdown>\\n\\t\\t\\t\\t\\t\\t</tag-input>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\" *ngIf=\\\"(collectionMetadataList != null) && (collectionMetadataList.length > 0)\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"albums-list\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">Id</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.TITLE' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.ITEMS_IN_COLLECTION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"3\\\" *ngIf=\\\"hasCollectionMetadataListUsersStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.SUMMARY' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"2\\\" *ngIf=\\\"!hasCollectionMetadataListUsersStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.SUMMARY' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th class=\\\"sortable\\\" (click)=\\\"onColumnHeaderClick(TOP_LIST_TYPE_ITEM_VIEWS)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.VIEWS' | translate:lang }} <i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\" *ngIf=\\\"topListType==TOP_LIST_TYPE_ITEM_VIEWS\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th class=\\\"sortable\\\" (click)=\\\"onColumnHeaderClick(TOP_LIST_TYPE_COMPLETE_VIEWS)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.COMPLETE_VIEWS' | translate:lang }} <i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\" *ngIf=\\\"topListType==TOP_LIST_TYPE_COMPLETE_VIEWS\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th *ngIf=\\\"hasCollectionMetadataListUsersStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.USERS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let mm of collectionMetadataList\\\" (click)=\\\"selectMediaMetadata(mm.collection_id)\\\" [class.selected]=\\\"isMediaMetadataSelected(mm.collection_id)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'albums', mm.collection_id]\\\">{{mm.collection_id}}</a></td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.title}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.itemsNum}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.mediaViews}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.collectionViews}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"hasCollectionMetadataListUsersStats\\\">{{mm.collectionUsers}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t\\t<pager [page]=\\\"topListPagingOptions.page\\\" [pageSize]=\\\"topListPagingOptions.page_size\\\" [totalItems]=\\\"collectionMetadataTotalNum\\\"\\n\\t\\t\\t\\t\\t\\t\\t[pagesVisibleNum]=\\\"5\\\" (pageChanged)=\\\"onTopListPageChanged($event)\\\"></pager>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"collectionMetadataList == null\\\" class=\\\"media-list-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"(collectionMetadataList != null) && (collectionMetadataList.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.NO_DATA' | translate:lang }}\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedCollectionMetadata\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ALBUM_DETAIL_HEADER' | translate:lang }}<span style=\\\"float:right;\\\">[{{selectedCollectionMetadata.collection_id}}]\\n\\t\\t\\t\\t\\t\\t{{selectedCollectionMetadata.title}}</span></h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"previewHistoryStats\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>Listenings</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"previewHistoryStats.data\\\" [chartLabels]=\\\"previewHistoryStats.labels\\\" [chartType]=\\\"previewHistoryStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t[startDate]=\\\"previewHistoryStats.startDate\\\" [endDate]=\\\"previewHistoryStats.endDate\\\" [granularity]=\\\"previewHistoryStats.granularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"!previewHistoryStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"(collectionItemsStats != null) && (collectionItemsStats.length > 0)\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4 style=\\\"margin-top:38px;\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ALBUM_ITEM_STATS_HEADER' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.POSITION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.ID' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.TITLE' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.DURATION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"4\\\" *ngIf=\\\"hasUsersInCollectionItemsStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.STATS_GROUP' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"3\\\" *ngIf=\\\"!hasUsersInCollectionItemsStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.STATS_GROUP' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.VIEWS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th *ngIf=\\\"hasUsersInCollectionItemsStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.USERS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.WATCHING_TIME' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.AVG_WATCHING_TIME' | translate:lang }}Time per list.</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let mm of collectionItemsStats\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.pos}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', mm.material_id]\\\">{{mm.material_id}}</a></td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.title}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"hasUsersInCollectionItemsStats\\\">{{mm.users}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.time)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.avgtime)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t\\t\\t<pager [page]=\\\"selectedCollectionItemsPaging.page\\\" [pageSize]=\\\"selectedCollectionItemsPaging.page_size\\\" \\n\\t\\t\\t\\t\\t\\t\\t\\t[totalItems]=\\\"selectedCollectionItemsPaging.items.length\\\" (pageChanged)=\\\"onSelectedCollectionItemsListPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"collectionItemsStats == null\\\" class=\\\"collection-items-list-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"(collectionItemsStats != null) && (collectionItemsStats.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.NO_DATA' | translate:lang }}\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"padding-top: 12px;font-size: 12px;color: #242a30;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 text-center\\\">\\n\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary m-r-5 m-b-5 m-t-5\\\" [routerLink]=\\\"['/admin', 'analytics', 'albums', selectedCollectionMetadata.collection_id]\\\">\\n\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.TOP_LIST.ALBUM_DETAILS_BUTTON' | translate:lang }}\\n\\t\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1379:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.TITLE' | translate:lang }}</h1>\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.CHART_TITLE' | translate:lang }}: {{collectionMetadata.title}} [{{collectionMetadata.collection_id}}]</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\" *ngIf=\\\"historyStats && (historyStats.data !== null)\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-left m-l-10\\\">\\n\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"chartDataExportCsv()\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-download\\\"></i> CSV\\n\\t\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<chart-granularity size=\\\"sm\\\"\\n\\t\\t\\t\\t\\t\\t\\t[types]=\\\"granularityTypes\\\"\\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"historyStats.granularity\\\"\\n\\t\\t\\t\\t\\t\\t\\t(onTypeChange)=\\\"onGranularityChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-granularity>\\n\\t\\t\\t\\t\\t\\t<chart-picker size=\\\"sm\\\" class=\\\"m-l-10\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartTypes]=\\\"chartTypes\\\"\\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"historyStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t\\t(chartTypeChanged)=\\\"onChartTypeChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-picker>\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:historyStats.startDate, endDate:historyStats.endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<chart\\n\\t\\t\\t\\t\\t[chartData]=\\\"historyStats.data\\\"\\n\\t\\t\\t\\t\\t[chartLabels]=\\\"historyStats.labels\\\"\\n\\t\\t\\t\\t\\t[chartType]=\\\"historyStats.chartType\\\"\\n\\t\\t\\t\\t\\t[startDate]=\\\"historyStats.startDate\\\"\\n\\t\\t\\t\\t\\t[endDate]=\\\"historyStats.endDate\\\"\\n\\t\\t\\t\\t\\t[granularity]=\\\"historyStats.granularity\\\">\\n\\t\\t\\t\\t</chart>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div *ngIf=\\\"!historyStats || (historyStats.data === null)\\\" class=\\\"panel-body chart-loader\\\">\\n\\t\\t\\t\\t <span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t<div [ngClass]=\\\"{'col-md-3': (totalCollectionUsersInRange > 0), 'col-md-4': !totalCollectionUsersInRange }\\\">\\n\\t\\t\\t\\t<div class=\\\"widget widget-stats bg-green\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.BOX_VIEWS' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalMediaViewsInRange | number:'1.0-3'}}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div [ngClass]=\\\"{'col-md-3': (totalCollectionUsersInRange > 0), 'col-md-4': !totalCollectionUsersInRange }\\\">\\n\\t\\t\\t\\t<div class=\\\"widget widget-stats bg-blue-darker\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.BOX_COMPLETE_VIEWS' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalCollectionViewsInRange | number:'1.0-3'}}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"col-md-3\\\" *ngIf=\\\"totalCollectionUsersInRange > 0\\\">\\n\\t\\t\\t\\t<div class=\\\"widget widget-stats bg-green\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.BOX_USERS' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalCollectionUsersInRange | number:'1.0-3'}}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div [ngClass]=\\\"{'col-md-3': (totalCollectionUsersInRange > 0), 'col-md-4': !totalCollectionUsersInRange }\\\">\\n\\t\\t\\t\\t<div class=\\\"widget widget-stats bg-blue\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.BOX_WATCHING_TIME' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n\\t\\t\\t\\t\\t\\t{{dateUtil.formatDuration(totalAvgWatchingTime)}}\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.META_HEADER' | translate:lang }}</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\" *ngIf=\\\"collectionMetadata\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-6\\\">\\n\\t\\t\\t\\t\\t\\t<dl class=\\\"dl-horizontal\\\">\\n\\t\\t\\t\\t\\t\\t\\t<dt>ID:</dt> <dd>{{collectionMetadata.collection_id}}</dd>\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_CONTENT.WORD.TITLE' | translate:lang }}:</dt> <dd>{{collectionMetadata.title}}</dd>\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_CONTENT.WORD.DURATION' | translate:lang }}:</dt> <dd>{{collectionMetadata.duration | number:'1.0-3'}} [s] ({{dateUtil.formatDuration(collectionMetadata.duration)}})</dd>\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TAGS' | translate:lang }}:</dt>\\n\\t\\t\\t\\t\\t\\t\\t<dd>\\n\\t\\t\\t\\t\\t\\t\\t\\t<span *ngFor=\\\"let tag of collectionMetadata.tags ; let isLast=last\\\" style=\\\"text-decoration:underline;\\\">{{tag}}{{isLast ? '' : ', '}}</span>\\n\\t\\t\\t\\t\\t\\t\\t</dd>\\n\\t\\t\\t\\t\\t\\t</dl>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-6\\\">\\n\\t\\t\\t\\t\\t\\t<dl class=\\\"dl-horizontal\\\">\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.META_REL_ID' | translate:lang }}:</dt> <dd>{{collectionMetadata.related_id}}</dd>\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.META_ADDED_AT' | translate:lang }}:</dt> <dd>{{dateUtil.unixToDateString(collectionMetadata.created_at_ts)}} {{dateUtil.unixToTimeString(collectionMetadata.created_at_ts)}}</dd>\\n\\t\\t\\t\\t\\t\\t</dl>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_HEADER' | translate:lang }}</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"songs-list\\\" style=\\\"margin-top: 18px;\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\" class=\\\"hidden-xlg-below\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.POSITION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.ID' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.TITLE' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\" class=\\\"hidden-xlg-below\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.DURATION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"4\\\" *ngIf=\\\"hasUsersInCollectionItemStats\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.STATS_GROUP' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"3\\\" *ngIf=\\\"!hasUsersInCollectionItemStats\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.STATS_GROUP' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.ITEM_VIEWS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th *ngIf=\\\"hasUsersInCollectionItemStats\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.USERS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.WATCHING_TIME' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.AVG_WATCHING_TIME' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let mm of mediaStatsList\\\" (click)=\\\"selectMediaStats(mm.material_id)\\\" [class.selected]=\\\"isMediaStatsSelected(mm.material_id)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td class=\\\"hidden-xlg-below\\\">{{mm.pos}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.material_id}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.title}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td class=\\\"hidden-xlg-below\\\">{{dateUtil.formatDuration(mm.duration)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"hasUsersInCollectionItemStats\\\">{{mm.users}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.time)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.avgtime)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t\\t<pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"collectionItemStats.length\\\"\\n\\t\\t\\t\\t\\t\\t\\t [pagesVisibleNum]=\\\"5\\\" (pageChanged)=\\\"onPageChanged($event)\\\"></pager>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedMediaStats\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT.HEADER.2' | translate:lang }}<span style=\\\"float:right;\\\">[{{selectedMediaStats.material_id}}]\\n\\t\\t\\t\\t\\t\\t{{selectedMediaStats.title}}</span></h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"previewHistoryStats\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.3' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"previewHistoryStats.data\\\" [chartLabels]=\\\"previewHistoryStats.labels\\\" [chartType]=\\\"previewHistoryStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t [startDate]=\\\"previewHistoryStats.startDate\\\" [endDate]=\\\"previewHistoryStats.endDate\\\" [granularity]=\\\"previewHistoryStats.granularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"!previewHistoryStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && engagementRateStats.data\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"engagementRateStats.data\\\" [chartLabels]=\\\"engagementRateStats.labels\\\" [chartType]=\\\"engagementRateStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t [granularity]=\\\"engagementRateStats.granularity\\\" [startDate]=\\\"engagementRateStats.startDate\\\" [endDate]=\\\"engagementRateStats.endDate\\\"></chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && !engagementRateStats.data\\\" class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"user.isEngagementRateEnabled() && !engagementRateStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"padding-top: 12px;font-size: 12px;color: #242a30;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 text-center\\\">\\n\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary m-r-5 m-b-5 m-t-5\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', selectedMediaStats.material_id]\\\">{{\\n\\t\\t\\t\\t\\t\\t\\t'ANALYTICS_CONTENT.SUBHEADER.3' | translate:lang }}</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1380:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_CONTENT.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT.HEADER.1' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">{{\\n\\t\\t\\t\\t\\t\\t\\t'ANALYTICS_CONTENT.WORD.SEARCH' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" (keypress)=\\\"onSearchKeyPress($event)\\\" [(ngModel)]=\\\"searchOptions.text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t placeholder=\\\"{{ 'ANALYTICS_CONTENT.PLACEHOLDER.SEARCH' | translate:lang }}\\\" style=\\\"width: 300px; display:inline-block;vertical-align: top;\\\">\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\" *ngIf=\\\"(mediaMetadataList != null) && (mediaMetadataList.length > 0)\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th (click)=\\\"onColumnHeaderClick('material_id')\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tId\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'material_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'material_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th (click)=\\\"onColumnHeaderClick('title')\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_CONTENT.WORD.TITLE' | translate:lang }}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'title') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'title') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th (click)=\\\"onColumnHeaderClick('duration')\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_CONTENT.WORD.DURATION' | translate:lang }}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'duration') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'duration') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th (click)=\\\"onColumnHeaderClick('created_at_ts')\\\" style=\\\"width:22%\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_CONTENT.SUBHEADER.4' | translate:lang }}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'created_at_ts') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'created_at_ts') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let mm of mediaMetadataList\\\" (click)=\\\"selectMediaMetadata(mm.material_id)\\\" [class.selected]=\\\"isMediaMetadataSelected(mm.material_id)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', mm.material_id]\\\">{{mm.material_id}}</a></td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.title}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td style=\\\"width:22%\\\">{{dateUtil.unixToDateString(mm.created_at_ts)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t\\t<pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"mediaMetadataTotalNum\\\"\\n\\t\\t\\t\\t\\t\\t (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"mediaMetadataList == null\\\" class=\\\"media-list-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"(mediaMetadataList != null) && (mediaMetadataList.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedMediaMetadata\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT.HEADER.2' | translate:lang }}<span style=\\\"float:right;\\\">[{{selectedMediaMetadata.material_id}}]\\n\\t\\t\\t\\t\\t\\t{{selectedMediaMetadata.title}}</span></h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"previewHistoryStats\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.3' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"previewHistoryStats.data\\\" [chartLabels]=\\\"previewHistoryStats.labels\\\" [chartType]=\\\"previewHistoryStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t [startDate]=\\\"previewHistoryStats.startDate\\\" [endDate]=\\\"previewHistoryStats.endDate\\\" [granularity]=\\\"previewHistoryStats.granularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"!previewHistoryStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && engagementRateStats.data\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"engagementRateStats.data\\\" [chartLabels]=\\\"engagementRateStats.labels\\\" [chartType]=\\\"engagementRateStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t [granularity]=\\\"engagementRateStats.granularity\\\" [startDate]=\\\"engagementRateStats.startDate\\\" [endDate]=\\\"engagementRateStats.endDate\\\"></chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && !engagementRateStats.data\\\" class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"user.isEngagementRateEnabled() && !engagementRateStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"padding-top: 12px;font-size: 12px;color: #242a30;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 text-center\\\">\\n\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary m-r-5 m-b-5 m-t-5\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', selectedMediaMetadata.material_id]\\\">{{\\n\\t\\t\\t\\t\\t\\t\\t'ANALYTICS_CONTENT.SUBHEADER.3' | translate:lang }}</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1381:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_CONTENT_DETAILS.TITLE' | translate:lang }}</h1>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.HEADER.STATS_HISTORY' | translate:lang }}: {{mediaMetadata.title}} [{{mediaMetadata.material_id}}]</h4></div>\\n            <div class=\\\"panel-body\\\" *ngIf=\\\"historyStats && (historyStats.data !== null)\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"chartDataExportCsv()\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <chart-granularity size=\\\"sm\\\"\\n                            [types]=\\\"granularityTypes\\\"\\n                            [activeType]=\\\"historyStats.granularity\\\"\\n                            (onTypeChange)=\\\"onGranularityChange($event)\\\">\\n                        </chart-granularity>\\n                        <chart-picker size=\\\"sm\\\" class=\\\"m-l-10\\\"\\n                            [chartTypes]=\\\"chartTypes\\\"\\n                            [activeType]=\\\"historyStats.chartType\\\"\\n                            (chartTypeChanged)=\\\"onChartTypeChange($event)\\\">\\n                        </chart-picker>\\n                        <date-range-picker class=\\\"m-l-10 pull-right\\\"\\n                            showIcon=\\\"right\\\"\\n                            [enable]=\\\"true\\\"\\n                            [options]=\\\"{startDate:historyStats.startDate, endDate:historyStats.endDate}\\\"\\n                            (selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n                        </date-range-picker>\\n                    </div>\\n                </div>\\n                <chart\\n                   [chartData]=\\\"historyStats.data\\\"\\n                   [chartLabels]=\\\"historyStats.labels\\\"\\n                   [chartType]=\\\"historyStats.chartType\\\"\\n                   [startDate]=\\\"historyStats.startDate\\\"\\n                   [endDate]=\\\"historyStats.endDate\\\"\\n                   [granularity]=\\\"historyStats.granularity\\\">\\n               </chart>\\n            </div>\\n            <div *ngIf=\\\"!historyStats || (historyStats.data === null)\\\" class=\\\"panel-body chart-loader\\\">\\n                 <span class=\\\"spinner-small\\\"></span>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"(engagementRateSummary.totalWatchingTime > 0) && (totalViewsInRange > 0)\\\">\\n    <div *ngIf=\\\"totalUsersInRange > 0\\\" class=\\\"col-md-3\\\">\\n        <div class=\\\"widget widget-stats bg-blue\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TOTAL_USERS' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">{{totalUsersInRange | number:'1.0-3'}}</div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div [ngClass]=\\\"{'col-md-3': (totalUsersInRange > 0), 'col-md-4': !(totalUsersInRange > 0) }\\\">\\n        <div class=\\\"widget widget-stats bg-black\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TOTAL_VIEWS' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalViewsInRange | number:'1.0-3'}}</div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div [ngClass]=\\\"{'col-md-3': (totalUsersInRange > 0), 'col-md-4': !(totalUsersInRange > 0) }\\\">\\n        <div class=\\\"widget widget-stats bg-yellow\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.ENG_RATE_SUMMARY_TOTAL_WATCHING_TIME' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n                {{engagementRateSummary.totalWatchingTime | number:'1.0-3'}} [s]\\n                <small style=\\\"font-size: 0.6em;\\\">({{dateUtil.formatDuration(engagementRateSummary.totalWatchingTime)}})</small>\\n            </div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div [ngClass]=\\\"{'col-md-3': (totalUsersInRange > 0), 'col-md-4': !(totalUsersInRange > 0) }\\\">\\n        <div class=\\\"widget widget-stats bg-blue\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.ENG_RATE_SUMMARY_AVG_WATCHING_TIME' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n                {{engagementRateSummary.totalWatchingTime / totalViewsInRange | number:'1.0-3'}} [s]\\n                <small style=\\\"font-size: 0.6em;\\\">({{dateUtil.formatDuration(engagementRateSummary.totalWatchingTime / totalViewsInRange)}})</small>\\n            </div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div [ngClass]=\\\"{'col-md-12 col-lg-6': user.isEngagementRateEnabled(), 'col-md-12': !user.isEngagementRateEnabled() }\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.HEADER.METADATA' | translate:lang }}</h4></div>\\n            <div class=\\\"panel-body\\\" *ngIf=\\\"historyStats && (historyStats.data !== null)\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt>ID:</dt> <dd>{{mediaMetadata.material_id}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT.WORD.TITLE' | translate:lang }}:</dt> <dd>{{mediaMetadata.title}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT.WORD.DURATION' | translate:lang }}:</dt> <dd>{{mediaMetadata.duration | number:'1.0-3'}} [s] ({{dateUtil.formatDuration(mediaMetadata.duration)}})</dd>\\n                       </dl>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.RELATED_ID' | translate:lang }}:</dt> <dd>{{mediaMetadata.related_id}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.CREATED_AT' | translate:lang }}:</dt> <dd>{{dateUtil.unixToDateString(mediaMetadata.created_at_ts)}} {{dateUtil.unixToTimeString(mediaMetadata.created_at_ts)}}</dd>\\n                       </dl>\\n                    </div>\\n                </div>\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TAGS' | translate:lang }}:</dt>\\n                           <dd>\\n                               <span *ngFor=\\\"let tag of mediaMetadata.tags ; let isLast=last\\\">{{tag}}{{isLast ? '' : ', '}}</span>\\n                               <table *ngIf=\\\"tagGroups && tagGroups.length\\\" class=\\\"table table-striped table-bordered\\\" style=\\\"margin-top:20px;\\\">\\n                                <thead>\\n                                    <tr>\\n                                        <th>Tags group</th>\\n                                        <th>Value</th>\\n                                        <th>Frequency [%]</th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let tagGroup of tagGroups\\\" >\\n                                        <td>{{tagGroup.prefix}}</td>\\n                                        <td>{{tagGroup.sufix}}</td>\\n                                        <td style=\\\"text-align: right;\\\">{{tagGroup.frequency | number:'1.0-2'}} %</td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                           </dd>\\n                       </dl>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\" *ngIf=\\\"!(engagementRateSummary.totalWatchingTime > 0) && (totalViewsInRange > 0)\\\">\\n            <div [ngClass]=\\\"{'col-md-12': user.isEngagementRateEnabled(), 'col-md-4': !user.isEngagementRateEnabled() }\\\">\\n               <div class=\\\"widget widget-stats bg-green\\\">\\n                   <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n                   <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TOTAL_VIEWS' | translate:lang }}</div>\\n                   <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalViewsInRange | number:'1.0-3'}}</div>\\n                   <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n               </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-12 col-lg-6\\\" *ngIf=\\\"user.isEngagementRateEnabled()\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.HEADER.ENGAGEMENT_RATE' | translate:lang }}</h4></div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && engagementRateStats.data\\\" >\\n                     <div class=\\\"row\\\" *ngIf=\\\"mediaMetadata.is_live_stream\\\">\\n                        <div class=\\\"btn-group btn-group-sm pull-right m-b-10 m-r-5\\\">\\n                           <button class=\\\"btn btn-white\\\" (click)=\\\"changeEngRateLiveStreamClockType('wall')\\\" [ngClass]=\\\"{'active':(engagementRateLiveStreamClockType == 'wall')}\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.ENG_RATE_LIVE_STREAM_CLOCK_TYPE_WALL' | translate:lang }}</button>\\n                           <button class=\\\"btn btn-white\\\" (click)=\\\"changeEngRateLiveStreamClockType('content')\\\" [ngClass]=\\\"{'active':(engagementRateLiveStreamClockType == 'content')}\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.ENG_RATE_LIVE_STREAM_CLOCK_TYPE_CONTENT' | translate:lang }}</button>\\n                        </div>\\n                     </div>\\n                     <chart [chartData]=\\\"engagementRateStats.data\\\"\\n                            [chartLabels]=\\\"engagementRateStats.labels\\\"\\n                            [chartType]=\\\"engagementRateStats.chartType\\\"\\n                            [granularity]=\\\"engagementRateStats.granularity\\\"\\n                            [startDate]=\\\"engagementRateStats.startDate\\\"\\n                            [endDate]=\\\"engagementRateStats.endDate\\\"></chart>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && !engagementRateStats.data\\\" class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                     <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && !engagementRateStats\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"hasTvMetrics && !tvStatsLoading\\\">\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"!tvStatsAmr || !tvStatsAmr.labels || !tvStatsAmr.labels.length\\\">\\n        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"loadTvMetrics()\\\">\\n            <i class=\\\"fa fa-download\\\"></i> Load TV metrics\\n        </button>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"hasTvMetrics\\\">\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"tvStatsLoading || (tvStatsAmr && tvStatsAmr.labels && tvStatsAmr.labels.length)\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">TV metrics - Average Minute Rating (AMR)</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"!tvStatsLoading && tvStatsAmr && tvStatsAmr.data\\\" >\\n                     <chart [chartData]=\\\"tvStatsAmr.data\\\"\\n                            [chartLabels]=\\\"tvStatsAmr.labels\\\"\\n                            [chartType]=\\\"tvStatsAmr.chartType\\\"\\n                            [granularity]=\\\"tvStatsAmr.granularity\\\"\\n                            [startDate]=\\\"tvStatsAmr.startDate\\\"\\n                            [endDate]=\\\"tvStatsAmr.endDate\\\"></chart>\\n                </div>\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsAmr && !tvStatsAmr.data\\\" class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                     <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && tvStatsLoading\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"tvStatsLoading || (tvStatsAvgReach && tvStatsAvgReach.labels && tvStatsAvgReach.labels.length)\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">TV metrics - Average Reach</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsAvgReach && tvStatsAvgReach.data\\\" >\\n                     <chart [chartData]=\\\"tvStatsAvgReach.data\\\"\\n                            [chartLabels]=\\\"tvStatsAvgReach.labels\\\"\\n                            [chartType]=\\\"tvStatsAvgReach.chartType\\\"\\n                            [granularity]=\\\"tvStatsAvgReach.granularity\\\"\\n                            [startDate]=\\\"tvStatsAvgReach.startDate\\\"\\n                            [endDate]=\\\"tvStatsAvgReach.endDate\\\"></chart>\\n                </div>\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsAvgReach && !tvStatsAvgReach.data\\\" class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                     <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && tvStatsLoading\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"tvStatsLoading || (tvStatsCumReach && tvStatsCumReach.labels && tvStatsCumReach.labels.length)\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">TV metrics - Cumulative Reach</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsCumReach && tvStatsCumReach.data\\\" >\\n                     <chart [chartData]=\\\"tvStatsCumReach.data\\\"\\n                            [chartLabels]=\\\"tvStatsCumReach.labels\\\"\\n                            [chartType]=\\\"tvStatsCumReach.chartType\\\"\\n                            [granularity]=\\\"tvStatsCumReach.granularity\\\"\\n                            [startDate]=\\\"tvStatsCumReach.startDate\\\"\\n                            [endDate]=\\\"tvStatsCumReach.endDate\\\"></chart>\\n                </div>\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsCumReach && !tvStatsCumReach.data\\\" class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                     <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && tvStatsLoading\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"hasTvMetrics\\\">\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"tvStatsAmr && tvStatsAmr.labels && tvStatsAmr.labels.length\\\">\\n        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"exportTvMetricsToCsv()\\\">\\n            <i class=\\\"fa fa-download\\\"></i> Export TV metrics to CSV\\n        </button>\\n    </div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1382:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_DASHBOARD.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"showWelcomeBox\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    Welcome to Bradmax!\\n                </h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-md-12\\\">\\n                            Let's get your first video player up and running.\\n                            <br/>\\n                            Quick intro:\\n                            <ol>\\n                                <li>Create a new player,</li>\\n                                <li>Configure it as you wish and save it,</li>\\n                                <li>Embed player on your page with \\\"embedcode\\\".</li>\\n                            </ol>\\n                            After that you will see how your users are watching video in panel below.\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-md-12\\\">\\n                            <button class=\\\"btn btn-primary\\\" type=\\\"button\\\" (click)=\\\"askForNewPlayer()\\\"><i _class=\\\"fa fa-plus\\\"></i>&nbsp;Create your first player</button>\\n                        </div>\\n                    </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\"  *ngIf=\\\"!showWelcomeBox\\\">\\n    <div [ngClass]=\\\"{'col-md-4 col-sm-6': user.areTechStatsEnabled(), 'col-md-6': !user.areTechStatsEnabled()}\\\">\\n        <div class=\\\"widget widget-stats bg-purple\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.USERS_IN_MONTH' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.last30d.users !== null\\\">{{summary.last30d.users | number}}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.last30d.users === null\\\">-</div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.LAST_30D' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div [ngClass]=\\\"{'col-md-4 col-sm-6': user.areTechStatsEnabled(), 'col-md-6': !user.areTechStatsEnabled()}\\\">\\n        <div class=\\\"widget widget-stats bg-black\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.VIEWS_IN_MONTH' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.last30d.views !== null\\\">{{summary.last30d.views | number}}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.last30d.views === null\\\">-</div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.LAST_30D' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-4 col-sm-6\\\" *ngIf=\\\"user.areTechStatsEnabled()\\\">\\n        <div class=\\\"widget widget-stats bg-yellow\\\">\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.DESKTOP_VS_MOBILE' | translate:lang }}</div>\\n            <div class=\\\"row\\\" style=\\\"height:58px;padding-top:10px;\\\">\\n                <div class=\\\"col-xs-6\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-desktop\\\" style=\\\"font-size:36px;\\\"></i>\\n                    <span style=\\\"font-size: 16px;margin-left: 5px;\\\" *ngIf=\\\"summary.devices.desktopPerc !== null\\\">{{summary.devices.desktopPerc.toFixed(0)}}%</span>\\n                    <span style=\\\"font-size: 16px;margin-left: 5px;\\\" *ngIf=\\\"summary.devices.desktopPerc === null\\\">-</span>\\n                </div>\\n                <div class=\\\"col-xs-6\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-mobile\\\" style=\\\"font-size:36px;\\\"></i>\\n                    <span style=\\\"font-size: 16px;margin-left: 5px;\\\" *ngIf=\\\"summary.devices.otherPerc !== null\\\">{{summary.devices.otherPerc.toFixed(0)}}%</span>\\n                    <span style=\\\"font-size: 16px;margin-left: 5px;\\\" *ngIf=\\\"summary.devices.otherPerc === null\\\">-</span>\\n                </div>\\n            </div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.LAST_30D' | translate:lang }}</div>\\n        </div>\\n    </div>\\n</div>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    {{ 'ANALYTICS_DASHBOARD.HEADER.CHART_LAST_48H' | translate:lang }}\\n                    <small>{{ 'ANALYTICS_DASHBOARD.HEADER.CHART_LAST_48H_SUB' | translate:lang }}</small>\\n                </h4>\\n            </div>\\n\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"widget-chart with-sidebar \\\">\\n                    <div class=\\\"widget-chart-content\\\" style=\\\"margin-right:0;\\\">\\n                        <!--<h4 class=\\\"chart-title m-b-30\\\"></h4>-->\\n                        <chart\\n                        [chartHeight]=\\\"'260px'\\\"\\n                        [chartData]=\\\"audienceHistory48h.data\\\"\\n                        [chartLabels]=\\\"audienceHistory48h.labels\\\"\\n                        [chartType]=\\\"audienceHistory48h.chartType\\\"\\n                        [startDate]=\\\"audienceHistory48h.startDate\\\"\\n                        [endDate]=\\\"audienceHistory48h.endDate\\\"\\n                        [granularity]=\\\"audienceHistory48h.granularity\\\">\\n                    </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    {{ 'ANALYTICS_DASHBOARD.HEADER.CHART_LAST_30D' | translate:lang }}\\n                    <small>{{ 'ANALYTICS_DASHBOARD.HEADER.CHART_LAST_30D_SUB' | translate:lang }}</small>\\n                </h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"widget-chart with-sidebar\\\">\\n                    <div class=\\\"widget-chart-content\\\" style=\\\"margin-right:0;\\\">\\n                        <chart\\n                        [chartHeight]=\\\"'260px'\\\"\\n                        [chartData]=\\\"audienceHistory30d.data\\\"\\n                        [chartLabels]=\\\"audienceHistory30d.labels\\\"\\n                        [chartType]=\\\"audienceHistory30d.chartType\\\"\\n                        [startDate]=\\\"audienceHistory30d.startDate\\\"\\n                        [endDate]=\\\"audienceHistory30d.endDate\\\"\\n                        [granularity]=\\\"audienceHistory30d.granularity\\\">\\n                    </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"user.areMediaStatsEnabled()\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    {{ 'ANALYTICS_DASHBOARD.HEADER.TOP_MEDIA_30D' | translate:lang }}\\n                    <small>{{ 'ANALYTICS_DASHBOARD.SUMMARY.LAST_30D' | translate:lang }}</small>\\n                </h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                    <div style=\\\"margin-right:0;\\\">\\n                        <table class=\\\"table table-striped table-bordered\\\" *ngIf=\\\"topMedia30d && topMedia30d.length > 0\\\" >\\n                            <thead>\\n                                <tr >\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.POSITION' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.ID' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.TITLE' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.VIEWS' | translate:lang }}</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let rec of topMedia30d\\\">\\n                                    <td>{{rec.position}}</td>\\n                                    <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', rec.media.material_id]\\\">{{rec.media.material_id}}</a></td>\\n                                    <td>{{rec.media.title}}</td>\\n                                    <td>{{rec.views | number}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <div *ngIf=\\\"topMedia30d && topMedia30d.length == 0\\\" style=\\\"color:#fff;padding-top:30px;\\\">{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                        <div *ngIf=\\\"!topMedia30d\\\" class=\\\"table-loader\\\">\\n                            <span class=\\\"spinner-small\\\"></span>\\n                        </div>\\n                    </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    {{ 'ANALYTICS_DASHBOARD.HEADER.TOP_MEDIA_24H' | translate:lang }}\\n                    <small>{{ 'ANALYTICS_DASHBOARD.HEADER.TOP_MEDIA_24H_SUB' | translate:lang }}</small>\\n                </h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                    <div style=\\\"margin-right:0;\\\">\\n                        <table class=\\\"table table-striped table-bordered\\\" *ngIf=\\\"topMedia24h && topMedia24h.length > 0\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.POSITION' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.ID' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.TITLE' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.VIEWS' | translate:lang }}</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let rec of topMedia24h\\\">\\n                                    <td>{{rec.position}}</td>\\n                                    <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', rec.media.material_id]\\\">{{rec.media.material_id}}</a></td>\\n                                    <td>{{rec.media.title}}</td>\\n                                    <td>{{rec.views | number}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <div *ngIf=\\\"topMedia24h && topMedia24h.length == 0\\\" style=\\\"color:#fff;padding-top:30px;\\\">{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                        <div *ngIf=\\\"!topMedia24h\\\" class=\\\"table-loader\\\">\\n                            <span class=\\\"spinner-small\\\"></span>\\n                        </div>\\n                    </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n        <div class=\\\"col-md-12\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\" >\\n                    <h4>\\n                        {{ 'ANALYTICS_DASHBOARD.HEADER.HEATMAP' | translate:lang }}\\n                        <small>{{ 'ANALYTICS_DASHBOARD.HEADER.HEATMAP_SUB' | translate:lang }}</small>\\n                    </h4>\\n                </div>\\n\\n                <div class=\\\"panel-body\\\">\\n                <div style=\\\"margin-right:0;\\\">\\n\\n                    <div role=\\\"group\\\" style=\\\"float: right;\\\">\\n                          <dropdown  [model]=\\\"dropdownHeatMap\\\" [value]=\\\"dropdownHeatMapSelectedValue\\\" [style.visibility]=\\\"true\\\" style=\\\"background: white\\\"\\n                               direction=\\\"-1\\\" (onSelect)=\\\"dropdownHeatMapSelect($event)\\\"></dropdown>\\n                    </div>\\n\\n                    <div class=\\\"row\\\" style=\\\"clear:both;padding-bottom:15px;\\\">\\n                        <div class=\\\"col-lg-6 col-md-12\\\">\\n                           <h5 style=\\\"color: #333;padding-left: 6px;\\\"> {{ 'ANALYTICS_AUDIENCE.WORD.VIEWS' | translate:lang }}</h5>\\n                           <heat-map style=\\\"margin-left:6px;\\\"\\n                               [Granularity] = \\\"heatMapGranularity\\\"\\n                               [Data] = \\\"heatMapViewsData\\\"\\n                               [ColorSchema] = \\\"'#9d8df1'\\\"\\n                               [Rows] = \\\"heatMapRowDescriptors\\\"\\n                               [Headers] = \\\"heatMapHeaders\\\"\\n                               [beginDate] = \\\"firstDay\\\"\\n                           ></heat-map>\\n                        </div>\\n                        <!--rgba(52,152,219,0.8)\\\",\\\"rgba(46, 204, 103,0.8)\\\",-->\\n                        <div class=\\\"col-lg-6 col-md-12\\\">\\n                           <h5 style=\\\"color: #333;padding-left: 6px;\\\">{{ 'ANALYTICS_AUDIENCE.WORD.USERS' | translate:lang }}</h5>\\n                           <heat-map style=\\\"margin-left:6px;\\\"\\n                               [Granularity] = \\\"heatMapGranularity\\\"\\n                               [Data] = \\\"heatMapUsersData\\\"\\n                               [ColorSchema] = \\\"'#f9d500'\\\"\\n                               [Rows] = \\\"heatMapRowDescriptors\\\"\\n                               [Headers] = \\\"heatMapHeaders\\\"\\n                               [beginDate] = \\\"firstDay\\\"\\n                               [beginDate] = \\\"firstDay\\\"\\n                           ></heat-map>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n </div>\\n\"\n\n/***/ }),\n\n/***/ 1383:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_TOPCONTENT.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TOPCONTENT.HEADER.1' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.DATE_RANGE_SELECTION' | translate:lang }}</span>\\n                        <div class=\\\"btn-group\\\" style=\\\"vertical-align: top;\\\">\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 1)}\\\" (click)=\\\"onLastHoursSelectedChange(1)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.HOUR' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 24)}\\\" (click)=\\\"onLastHoursSelectedChange(24)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.24H' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 168)}\\\" (click)=\\\"onLastHoursSelectedChange(168)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.7D' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 720)}\\\" (click)=\\\"onLastHoursSelectedChange(720)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.30D' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 8544)}\\\" (click)=\\\"onLastHoursSelectedChange(8544)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.365D' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == -1)}\\\" (click)=\\\"onLastHoursSelectedChange(-1)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.ALL_TIME' | translate:lang }}</button>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(topMediaList != null) && (topMediaList.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"top-content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th>\\n                                        {{ 'ANALYTICS_TOPCONTENT.WORD.POSITION' | translate:lang }}\\n                                    </th>\\n                                    <th>\\n                                        Id\\n                                    </th>\\n                                    <th>\\n                                        {{ 'ANALYTICS_TOPCONTENT.WORD.TITLE' | translate:lang }}\\n                                    </th>\\n                                    <th>\\n                                        {{ 'ANALYTICS_TOPCONTENT.WORD.VIEWS' | translate:lang }}\\n                                    </th>\\n                                    <th *ngIf=\\\"topMediaListHasUsersStats\\\">\\n                                        {{ 'ANALYTICS_TOPCONTENT.WORD.USERS' | translate:lang }}\\n                                    </th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of topMediaList\\\" (click)=\\\"selectMediaMetadata(mm.media.material_id)\\\" [class.selected]=\\\"isMediaMetadataSelected(mm.media.material_id)\\\">\\n                                    <td>{{mm.position}}</td>\\n                                    <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', mm.media.material_id]\\\">{{mm.media.material_id}}</a></td>\\n                                    <td>{{mm.media.title}}</td>\\n                                    <td>{{mm.views}}</td>\\n                                    <td *ngIf=\\\"topMediaListHasUsersStats\\\">{{mm.users}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"topMediaListTotalLength\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                    <div *ngIf=\\\"topMediaList == null\\\" class=\\\"media-list-loader\\\">\\n                       <span class=\\\"spinner-small\\\"></span>\\n                   </div>\\n                    <div *ngIf=\\\"(topMediaList != null) && (topMediaList.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n                        {{ 'ANALYTICS_TOPCONTENT.NO_DATA' | translate:lang }}\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedMediaMetadata\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TOPCONTENT.HEADER.2' | translate:lang }}<span style=\\\"float:right;\\\">[{{selectedMediaMetadata.material_id}}] {{selectedMediaMetadata.title}}</span></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" *ngIf=\\\"previewHistoryStats\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4>{{ 'ANALYTICS_TOPCONTENT.HEADER.3' | translate:lang }}</h4>\\n                        <chart\\n                            [chartData]=\\\"previewHistoryStats.data\\\"\\n                            [chartLabels]=\\\"previewHistoryStats.labels\\\"\\n                            [chartType]=\\\"previewHistoryStats.chartType\\\"\\n                            [startDate]=\\\"previewHistoryStats.startDate\\\"\\n                            [endDate]=\\\"previewHistoryStats.endDate\\\"\\n                            [granularity]=\\\"previewHistoryStats.granularity\\\">\\n                        </chart>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"!previewHistoryStats\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n\\n                <div class=\\\"row\\\" *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && engagementRateStats.data\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n                        <chart [chartData]=\\\"engagementRateStats.data\\\"\\n                                [chartLabels]=\\\"engagementRateStats.labels\\\"\\n                                [chartType]=\\\"engagementRateStats.chartType\\\"\\n                                [granularity]=\\\"engagementRateStats.granularity\\\"\\n                                [startDate]=\\\"engagementRateStats.startDate\\\"\\n                                [endDate]=\\\"engagementRateStats.endDate\\\"></chart>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && !engagementRateStats.data\\\" class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n                        <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && !engagementRateStats\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n\\n                <div class=\\\"row\\\" style=\\\"padding-top: 12px;font-size: 12px;color: #242a30;\\\">\\n                    <div class=\\\"col-md-12 text-center\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-primary m-r-5 m-b-5 m-t-5\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', selectedMediaMetadata.material_id]\\\">{{ 'ANALYTICS_TOPCONTENT.SUBHEADER.3' | translate:lang }}</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1384:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_GEO.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_GEO.HEADER.MAP' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:startDate, endDate:endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"analytics-geo-map\\\"  *ngIf=\\\"!loadingData\\\"> \\n\\t\\t\\t\\t\\t<google-chart [data]=\\\"mapChartData\\\" (chartSelect)=\\\"onMapRegionClick($event)\\\"></google-chart>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_GEO.HEADER.DETAILS' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered analytics-geo-table\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t<td>#</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.COUNTRY' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of geoStatsForPage\\\" [routerLink]=\\\"['/admin', 'analytics', 'geo', rec.country.country_code.toLowerCase()]\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.pos}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td><span class=\\\"flag-icon flag-icon-{{rec.country.country_code.toLowerCase()}}\\\" ></span> {{rec.country.name}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views_share  | number:'1.1-2':lang}} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"pagingOptions.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"table-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1385:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_GEO_COUNTRY.TITLE' | translate:lang  }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_GEO.HEADER.MAP' | translate:lang  }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-left m-l-10\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"btn-group btn-group-sm\\\">\\n\\t\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-white\\\" [ngClass]=\\\"(scopeType == SCOPE_TYPE_REGIONS) ? 'active' : ''\\\" (click)=\\\"onScopeTypeChange(SCOPE_TYPE_REGIONS)\\\">{{ 'ANALYTICS_GEO_COUNTRY.TYPE.REGIONS' | translate:lang }}</button>\\n\\t\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-white\\\" [ngClass]=\\\"(scopeType == SCOPE_TYPE_CITIES) ? 'active' : ''\\\" (click)=\\\"onScopeTypeChange(SCOPE_TYPE_CITIES)\\\">{{ 'ANALYTICS_GEO_COUNTRY.TYPE.CITIES' | translate:lang }}</button>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:startDate, endDate:endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"analytics-geo-map\\\"  *ngIf=\\\"!loadingData\\\"> \\n\\t\\t\\t\\t\\t<google-chart [data]=\\\"mapChartData\\\"></google-chart>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">\\n\\t\\t\\t\\t\\t{{ 'ANALYTICS_GEO.HEADER.DETAILS' | translate:lang  }} -\\n\\t\\t\\t\\t\\t<span *ngIf=\\\"scopeType == SCOPE_TYPE_REGIONS\\\">{{ 'ANALYTICS_GEO_COUNTRY.TYPE.REGIONS' | translate:lang  }}</span>\\n\\t\\t\\t\\t\\t<span *ngIf=\\\"scopeType == SCOPE_TYPE_CITIES\\\">{{ 'ANALYTICS_GEO_COUNTRY.TYPE.CITIES' | translate:lang }}</span>\\n\\t\\t\\t\\t</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered analytics-geo-table\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t<td>#</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"scopeType == SCOPE_TYPE_REGIONS\\\">{{ 'ANALYTICS_GEO_COUNTRY.WORD.REGION' | translate:lang  }}</span>\\n\\t\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"scopeType == SCOPE_TYPE_CITIES\\\">{{ 'ANALYTICS_GEO_COUNTRY.WORD.CITY' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t\\t</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of geoStatsForPage\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.pos}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.name}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views_share  | number:'1.1-2':lang}} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"pagingOptions.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"table-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1386:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_TECHNOLOGY.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TECHNOLOGY.DEVICES' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<chart-granularity #granularity size=\\\"sm\\\"\\n\\t\\t\\t\\t\\t\\t\\t[types]=\\\"granularityTypes\\\"\\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"activeGranularity\\\"\\n\\t\\t\\t\\t\\t\\t\\t(onTypeChange)=\\\"onGranularityChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-granularity>\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:startDate, endDate:endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<chart #chartElement\\n\\t\\t\\t\\t\\t\\t\\t[chartData]=\\\"topDeviceChartData\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartLabels]=\\\"topDeviceChartLabels\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartType]=\\\"chartType\\\"\\n\\t\\t\\t\\t\\t\\t\\t[startDate]=\\\"startDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[endDate]=\\\"endDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[granularity]=\\\"activeGranularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"deviceTableStats.length > 0\\\">\\n\\t\\t\\t\\t\\t<div *ngFor=\\\"let deviceTypeRec of deviceTableStats\\\" class=\\\"col-md-3 col-sm-6\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"widget widget-stats\\\" [style.backgroundColor]=\\\"deviceTypeRec.bgColorHex\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ deviceTypeRec.name }}</div>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"height:58px;padding-top:10px;\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"col-xs-5\\\" style=\\\"text-align: center;\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa {{deviceTypeRec.iconClass}}\\\" style=\\\"font-size:44px;padding-top:5px;\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"col-xs-7\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div style=\\\"font-size: 20px;\\\" *ngIf=\\\"deviceTypeRec.views_share >= 0.01\\\">{{ deviceTypeRec.views_share | number:'1.1-2':lang }} %</div>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div style=\\\"font-size: 20px;\\\" *ngIf=\\\"deviceTypeRec.views_share < 0.01\\\">&lt; 0.01 %</div>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"m-t-5\\\" style=\\\"font-size: 12px;color:#fff;color:hsla(0,0%,100%,.6);\\\">views: {{ deviceTypeRec.views }}</div>\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"deviceTableStats.length == 0\\\" class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 col-sm-12 p-20\\\" style=\\\"text-align:center;font-size:16px;\\\">\\n\\t\\t\\t\\t\\t\\t<span>{{ 'ANALYTICS_TECHNOLOGY.MESSAGE.NO_DATA' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TECHNOLOGY.BROWSERS' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<chart #chartElement\\n\\t\\t\\t\\t\\t\\t\\t[chartData]=\\\"topBrowserChartData\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartLabels]=\\\"topBrowserChartLabels\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartType]=\\\"chartType\\\"\\n\\t\\t\\t\\t\\t\\t\\t[startDate]=\\\"startDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[endDate]=\\\"endDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[granularity]=\\\"activeGranularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\" *ngIf=\\\"browserTableStats.length > 0\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr style=\\\"font-weight: bolder;\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.BROWSER' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.VIEWS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.VIEWS' | translate:lang }} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of browserTableStats\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.name}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"rec.views_share >= 0.01\\\">{{rec.views_share | number:'1.1-2':lang}} %</td>\\n\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"rec.views_share < 0.01\\\">&lt; 0.01 %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<div class=\\\"p-20\\\" style=\\\"text-align:center;font-size:16px;\\\" *ngIf=\\\"browserTableStats.length == 0\\\">\\n\\t\\t\\t\\t\\t<span>{{ 'ANALYTICS_TECHNOLOGY.MESSAGE.NO_DATA' | translate:lang }}</span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TECHNOLOGY.OS' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<chart #chartElement\\n\\t\\t\\t\\t\\t\\t\\t[chartData]=\\\"topOsChartData\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartLabels]=\\\"topOsChartLabels\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartType]=\\\"chartType\\\"\\n\\t\\t\\t\\t\\t\\t\\t[startDate]=\\\"startDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[endDate]=\\\"endDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[granularity]=\\\"activeGranularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\" *ngIf=\\\"osTableStats.length > 0\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr style=\\\"font-weight: bolder;\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.OS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.VIEWS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.VIEWS' | translate:lang }} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of osTableStats\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.name}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"rec.views_share >= 0.01\\\">{{rec.views_share | number:'1.1-2':lang}} %</td>\\n\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"rec.views_share < 0.01\\\">&lt; 0.01 %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<div class=\\\"p-20\\\" style=\\\"text-align:center;font-size:16px;\\\" *ngIf=\\\"osTableStats.length == 0\\\">\\n\\t\\t\\t\\t\\t<span>{{ 'ANALYTICS_TECHNOLOGY.MESSAGE.NO_DATA' | translate:lang }}</span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1387:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_REALTIME.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_REALTIME.AUDIENCE' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body row\\\">\\n                <div class=\\\"col-md-2 text-center\\\">\\n                    <div style=\\\"font-size:2rem;padding: 20px 0 5px;\\\">Right now</div>\\n                    <div style=\\\"font-size:5rem;padding: 5px 0 5px;font-weight: bold;\\\">{{audienceWatchingUsersNum}}</div>\\n                    <div style=\\\"font-size:1.5rem;padding: 5px 0 5px;\\\">watching users</div>\\n                </div>\\n                <div class=\\\"col-md-5\\\">\\n                    <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_MIN' | translate:lang }}</div>\\n                    <chart-realtime\\n                        [chartData]=\\\"audienceMinutesChart.data\\\"\\n                        [chartLabels]=\\\"audienceMinutesChart.labels\\\"\\n                        [chartHeight]=\\\"'200px'\\\"\\n                    ></chart-realtime>\\n                </div>\\n                <div class=\\\"col-md-5\\\">\\n                    <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_SEC' | translate:lang }}</div>\\n                    <chart-realtime\\n                        [chartData]=\\\"audienceSecondsChart.data\\\"\\n                        [chartLabels]=\\\"audienceSecondsChart.labels\\\"\\n                        [chartHeight]=\\\"'200px'\\\"\\n                    ></chart-realtime>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_REALTIME.TOP_CONTENT' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                 <div class=\\\"col-md-12\\\" *ngIf=\\\"(topMediaList != null) && (topMediaList.length > 0)\\\">\\n                     <table id=\\\"top-content-list\\\" [ngClass]=\\\"{'table table-striped table-bordered table-selectable': true, 'loading':topMediaListLoading}\\\">\\n                         <thead>\\n                             <tr>\\n                                 <th>\\n                                     {{ 'ANALYTICS_REALTIME.WORD.POSITION' | translate:lang }}\\n                                 </th>\\n                                 <th>\\n                                     Id\\n                                 </th>\\n                                 <th>\\n                                     {{ 'ANALYTICS_REALTIME.WORD.TITLE' | translate:lang }}\\n                                 </th>\\n                                 <th>\\n                                     {{ 'ANALYTICS_REALTIME.WORD.STREAMS' | translate:lang }}<br/>\\n                                     <small>({{ 'ANALYTICS_REALTIME.WORD.STREAMS_APROX_NOTE' | translate:lang }})</small>\\n                                 </th>\\n                             </tr>\\n                         </thead>\\n                         <tbody>\\n                             <tr *ngFor=\\\"let mm of topMediaList\\\" (click)=\\\"selectMediaMetadata(mm.media.material_id)\\\" [class.selected]=\\\"isMediaMetadataSelected(mm.media.material_id)\\\">\\n                                 <td>{{mm.position}}</td>\\n                                 <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', mm.media.material_id]\\\">{{mm.media.material_id}}</a></td>\\n                                 <td>{{mm.media.title}}</td>\\n                                 <td>{{mm.streams}}</td>\\n                             </tr>\\n                         </tbody>\\n                     </table>\\n                     <pager [page]=\\\"topMediaListPagingOptions.page\\\" [pageSize]=\\\"topMediaListPagingOptions.page_size\\\" [totalItems]=\\\"topMediaListTotalLength\\\" (pageChanged)=\\\"onTopMediaListPageChange($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                 </div>\\n                 <div *ngIf=\\\"topMediaList == null\\\" class=\\\"media-list-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n                 <div *ngIf=\\\"(topMediaList != null) && (topMediaList.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n                     {{ 'ANALYTICS_TOPCONTENT.NO_DATA' | translate:lang }}\\n                 </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedMediaMetadata\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Selected content</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt>ID:</dt> <dd>{{selectedMediaMetadata.material_id}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.RELATED_ID' | translate:lang }}:</dt> <dd>{{selectedMediaMetadata.related_id}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT.WORD.TITLE' | translate:lang }}:</dt> <dd>{{selectedMediaMetadata.title}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT.WORD.DURATION' | translate:lang }}:</dt> <dd>{{selectedMediaMetadata.duration | number:'1.0-3'}} [s] ({{dateUtil.formatDuration(selectedMediaMetadata.duration)}})</dd>\\n                       </dl>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                   <div class=\\\"col-lg-6\\\">\\n                       <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_MIN' | translate:lang }}</div>\\n                       <chart-realtime\\n                           [chartData]=\\\"selectedMediaMinutesChart.data\\\"\\n                           [chartLabels]=\\\"selectedMediaMinutesChart.labels\\\"\\n                           [chartHeight]=\\\"'200px'\\\"\\n                       ></chart-realtime>\\n                   </div>\\n                   <div class=\\\"col-lg-6\\\">\\n                       <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_SEC' | translate:lang }}</div>\\n                       <chart-realtime\\n                           [chartData]=\\\"selectedMediaSecondsChart.data\\\"\\n                           [chartLabels]=\\\"selectedMediaSecondsChart.labels\\\"\\n                           [chartHeight]=\\\"'200px'\\\"\\n                       ></chart-realtime>\\n                   </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1388:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<style type=\\\"text/css\\\">\\nspan.square {\\n          display: inline-block;\\n          height: 200px;\\n          width: 20%;\\n          border: 1px solid black;\\n          margin-right: 2%;\\n          margin-left: 2%;\\n          padding: 0;\\n          color: #000000;\\n          vertical-align: bottom;\\n        }\\n</style>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'QOS.TITLE' | translate:lang }}</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n                    <div class=\\\"row m-b-10\\\">\\n                            <div class=\\\"pull-left m-l-10\\\">\\n                                <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"chartDataExportCsv()\\\">\\n                                    <i class=\\\"fa fa-download\\\"></i> CSV\\n                                </button>\\n                            </div>\\n                            <div class=\\\"pull-right m-r-10\\\">\\n                                <chart-granularity #granularity size=\\\"sm\\\" \\n                                    [types]=\\\"chartService.granularityTypes\\\" \\n                                    [activeType]=\\\"chartService.activeGranularity\\\">\\n                                </chart-granularity>\\n\\n                                <date-range-picker class=\\\"m-l-10 pull-right\\\"\\n                                    showIcon=\\\"right\\\"\\n                                    [enable]=\\\"true\\\"\\n                                    [options]=\\\"{startDate:chartService.startDate, endDate:chartService.endDate}\\\">\\n                                </date-range-picker>\\n                            </div>\\n                        </div>\\n\\n                <horizontal-stacked-chart style=\\\"margin-right: 20px\\\"\\n                        [dataset] = \\\"stackedData\\\"\\n                >\\n                \\n                </horizontal-stacked-chart>\\n                \\n            </div>\\n\\n            <div class=\\\"panel-body\\\" *ngIf=\\\"previewHistoryStats\\\">\\n                <span *ngFor=\\\"let chart of charts\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                            <h4>{{chart.topic}}</h4>\\n                            <chart\\n                                [chartData]=\\\"previewHistoryStats.data\\\"\\n                                [chartLabels]=\\\"previewHistoryStats.labels\\\"\\n                                [chartType]=\\\"previewHistoryStats.chartType\\\"\\n                                [startDate]=\\\"previewHistoryStats.startDate\\\"\\n                                [endDate]=\\\"previewHistoryStats.endDate\\\"\\n                                [granularity]=\\\"previewHistoryStats.granularity\\\">\\n                            </chart>\\n                    </div>\\n                </span>\\n                <!--<span>\\n                    <div class=\\\"col-md-3\\\">\\n                        <h4>Quality</h4>\\n                        <chart\\n                        [chartData]=\\\"chartService.chartData\\\" \\n                        [chartLabels]=\\\"chartService.chartLabels\\\" \\n                        [chartType]=\\\"previewHistoryStats.chartType\\\" \\n                        [startDate]=\\\"previewHistoryStats.startDate\\\" \\n                        [endDate]=\\\"previewHistoryStats.endDate\\\" \\n                        [granularity]=\\\"previewHistoryStats.activeGranularity\\\"    \\n                        >\\n                        </chart>\\n                    </div>\\n                </span>-->\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1389:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">Analytics - Playback Experience</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Users playbacks</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">Filter</span>\\n                        <input type=\\\"text\\\" (keypress)=\\\"onSearchKeyPress($event)\\\" [(ngModel)]=\\\"searchOptions.text\\\" class=\\\"form-control\\\"\\n                         placeholder=\\\"Filter\\\" style=\\\"width: 300px; display:inline-block;vertical-align: top;\\\">\\n                        <span style=\\\"margin-left:20px\\\"><strong>Matching samples:</strong> {{searchOptions.total}}</span>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(playbacks != null) && (playbacks.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th colspan=\\\"5\\\">Playback</th>\\n                                    <th colspan=\\\"4\\\">Media</th>\\n                                    <th colspan=\\\"5\\\">Environment</th>\\n                                </tr>\\n                                <tr>\\n                                    <th (click)=\\\"onColumnHeaderClick('playback_id')\\\">\\n                                        Playback ID\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'playback_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'playback_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('user_id')\\\">\\n                                        User ID\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'user_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'user_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('start_time')\\\">\\n                                        Start time\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'start_time') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'start_time') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('duration')\\\">\\n                                        Duration\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'duration') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'duration') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('playback_coverage')\\\" title=\\\"Playback coverage\\\">\\n                                        Coverage [%]\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'playback_coverage') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'playback_coverage') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_type')\\\">\\n                                        Type\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_id')\\\">\\n                                        Media ID\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_title')\\\">\\n                                        Title\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_title') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_title') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_duration')\\\">\\n                                        Duration\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_duration') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_duration') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_type')\\\">\\n                                        Type\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_browser')\\\">\\n                                        Browser\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_browser') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_browser') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_os')\\\">\\n                                        OS\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_os') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_os') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('isp')\\\">\\n                                        ISP\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'isp') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'isp') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('cdn')\\\">\\n                                        CDN\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'cdn') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'cdn') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of playbacks\\\">\\n                                    <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'playback-experience', 'playback']\\\">\\n                                        <span class=\\\"uuid\\\" [title]=\\\"mm.playback_id\\\">{{mm.playback_id}}</span></a>\\n                                    </td>\\n                                    <td><span class=\\\"uuid\\\" [title]=\\\"mm.user_id\\\">{{mm.user_id}}</span></td>\\n                                    <td>{{dateUtil.unixToDateString(mm.start_time)}}</td>\\n                                    <td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n                                    <td>{{mm.playback_coverage}}</td>\\n                                    <td>{{mm.media_type}}</td>\\n                                    <td>{{mm.media_id}}</td>\\n                                    <td>{{mm.media_title}}</td>\\n                                    <td>{{dateUtil.formatDuration(mm.media_duration)}}</td>\\n                                    <td>{{mm.device_type}}</td>\\n                                    <td>{{mm.device_browser}}</td>\\n                                    <td>{{mm.device_os}}</td>\\n                                    <td>{{mm.isp}}</td>\\n                                    <td>{{mm.cdn}}</td>\\n                                </tr>\\n                            </tbody>\\n                            <tfoot>\\n                                <tr>\\n                                    <td><strong>Average:</strong></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td>{{dateUtil.formatDuration(columnsAverage.duration)}}</td>\\n                                    <td>{{columnsAverage.playback_coverage}}</td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td>{{dateUtil.formatDuration(columnsAverage.media_duration)}}</td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                </tr>\\n                            </tfoot>\\n                        </table>\\n                        <pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"searchOptions.total\\\"\\n                         (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                    <div *ngIf=\\\"playbacks == null\\\" class=\\\"media-list-loader\\\">\\n                        <span class=\\\"spinner-small\\\"></span>\\n                    </div>\\n                    <div *ngIf=\\\"(playbacks != null) && (playbacks.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n                        {{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1390:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">Analytics - Playback Experience - Playback</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-md-6\\\" >\\n              <div class=\\\"widget widget-stats bg-blue\\\">\\n                  <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n                  <div class=\\\"stats-title\\\">Watch time</div>\\n                  <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">35m 12s</div>\\n              </div>\\n          </div>\\n          <div class=\\\"col-md-6\\\" >\\n              <div class=\\\"widget widget-stats bg-black\\\">\\n                  <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-bar-chart fa-fw\\\"></i></div>\\n                  <div class=\\\"stats-title\\\">Avg bitrate</div>\\n                  <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">2.2 Mb/s</div>\\n              </div>\\n          </div>\\n          <div class=\\\"col-md-6\\\" >\\n              <div class=\\\"widget widget-stats bg-yellow\\\">\\n                  <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                  <div class=\\\"stats-title\\\">Total buffering time</div>\\n                  <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n                      11s\\n                      <small style=\\\"font-size: 0.6em;\\\">[0.5%]</small>\\n                  </div>\\n              </div>\\n          </div>\\n          <div class=\\\"col-md-6\\\" >\\n              <div class=\\\"widget widget-stats bg-blue\\\">\\n                  <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                  <div class=\\\"stats-title\\\">Startup time</div>\\n                  <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n                      3.6 [s]\\n                  </div>\\n              </div>\\n          </div>\\n      </div>\\n\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\" >\\n           <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4  class=\\\"panel-title\\\">Content &amp; Playback metadata</h4></div>\\n                <div  class=\\\"panel-body\\\">\\n                <div  class=\\\"row m-b-10\\\">\\n                    <div  class=\\\"col-md-12\\\">\\n                        <dl  class=\\\"dl-horizontal\\\">\\n                           <dt >Media ID:</dt> <dd >6725239</dd>\\n                           <dt >Type:</dt> <dd >VOD</dd>\\n                           <dt >Title:</dt> <dd >Yellowstone S01/E04</dd>\\n                           <dt >Duration:</dt> <dd >2,464 [s] (41m 4s)</dd>\\n                           <dt >Related content ID:</dt> <dd ></dd>\\n                           <dt >Added into system:</dt> <dd >11/17/2021 1:55:32 PM</dd>\\n                           <dt >Tags:</dt>\\n                           <dd >\\n                                cowboy hat, equestrian, ranch, ranch owner, cattle ranch, father son relationship, father daughter relationship, financier, parent child relationship, land owner, widower, native american tribe\\n                           </dd>\\n                           <dt class=\\\"m-t-15\\\">Playback ID:</dt> <dd class=\\\"m-t-15\\\">a9801178-2364-4e83-03ac-1b731c670503</dd>\\n                           <dt >Playback coverage:</dt> <dd >85% <small class=\\\"m-l-15\\\">2,112 [s] (35m 12s)</small></dd>\\n                           <dt >Playback start date:</dt> <dd >2022-02-02 17:34:11</dd>\\n                       </dl>\\n                    </div>\\n                </div>\\n            </div>\\n            </div>\\n         </div>\\n         </div>\\n\\n         <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\" >\\n            <div class=\\\"panel panel-inverse\\\">\\n               <div class=\\\"panel-heading\\\"><h4  class=\\\"panel-title\\\">Bitrate histogram</h4></div>\\n                   <div class=\\\"panel-body\\\">\\n                   <div class=\\\"row m-b-10\\\">\\n                       <div class=\\\"col-md-12 bitrate-histogram\\\">\\n                            <chart [chartHeight]=\\\"'200px'\\\" [chartData]=\\\"bitrateHistogramData\\\" [chartLabels]=\\\"bitrateHistogramLabels\\\" [chartType]=\\\"'bar'\\\">\\n                              </chart>\\n                       </div>\\n                   </div>\\n               </div>\\n            </div>\\n            </div>\\n         </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">Playback history [a9801178-2364-4e83-03ac-1b731c670503]</h4></div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"playback-history\\\">\\n                    <div class=\\\"header\\\">\\n                        <div class=\\\"item\\\">\\n                           <span class=\\\"activity\\\">Activity</span>\\n                           <span class=\\\"vt\\\">Pleayhead position</span>\\n                           <span class=\\\"wt\\\">Wall clock time</span>\\n                           <span class=\\\"d\\\">Duration [sec]</span>\\n                           <span class=\\\"kbps\\\">Avg. bitrate [kbps]</span>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"items\\\">\\n                       <div *ngFor=\\\"let item of playbackHistory\\\" class=\\\"item\\\" [style.height]=\\\"item.d+'px'\\\" style=\\\"min-height:30px;\\\" [ngClass]=\\\"item.class\\\">\\n                           <span class=\\\"activity\\\"><i class=\\\"fa\\\" [ngClass]=\\\"item.icon\\\"></i>  {{item.type}}</span>\\n                           <span class=\\\"vt\\\">{{item.vt}}</span>\\n                           <span class=\\\"wt\\\">{{item.wt}}</span>\\n                           <span class=\\\"d\\\">{{item.d}}</span>\\n                           <span class=\\\"kbps\\\">{{item.avgkbps}}</span>\\n                       </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1391:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">Analytics - Errors &amp; Failures</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Filters</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div class=\\\"col-md-4\\\">\\n                        <date-range-picker\\n                            showIcon=\\\"right\\\"\\n                            [enable]=\\\"true\\\"\\n                            [options]=\\\"{startDate:searchOptions.startDate, endDate:searchOptions.endDate}\\\">\\n                        </date-range-picker>\\n                    </div>\\n                    <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">OS</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownOs\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <button class=\\\"btn btn-primary\\\">Add filter</button>\\n                      </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">History</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <chart [chartHeight]=\\\"'200px'\\\"\\n                    [chartData]=\\\"errorsHistoryData\\\"\\n                    [chartLabels]=\\\"errorsHistoryLabels\\\"\\n                    [startDate]=\\\"searchOptions.startDate\\\"\\n                    [endDate]=\\\"searchOptions.endDate\\\"\\n                    [chartType]=\\\"'lineTime'\\\"\\n                    [granularity]=\\\"'hour'\\\"></chart>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Grouped by <dropdown class=\\\"m-l-10\\\" [model]=\\\"groupedByDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <chart [chartHeight]=\\\"'200px'\\\"\\n                    [chartData]=\\\"errorsGroupedData\\\"\\n                    [chartLabels]=\\\"errorsGroupedLabels\\\"\\n                    [chartType]=\\\"'doughnut'\\\"></chart>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Errors list</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(errors != null) && (errors.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th (click)=\\\"onColumnHeaderClick('user_id')\\\">\\n                                        User ID\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'user_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'user_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('time')\\\">\\n                                        Time\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'time') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'time') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_type')\\\">\\n                                        Media Type\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_id_title')\\\">\\n                                        Media\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id_title') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id_title') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_type')\\\">\\n                                        Device\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_browser')\\\">\\n                                        Browser\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_browser') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_browser') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_os')\\\">\\n                                        OS\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_os') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_os') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('isp')\\\">\\n                                        ISP\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'isp') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'isp') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('cdn')\\\">\\n                                        CDN\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'cdn') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'cdn') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of errors\\\" (click)=\\\"onErrorItemClick(mm)\\\" [class.selected]=\\\"isErrorSelected(mm)\\\">\\n                                    <td><span class=\\\"uuid\\\" [title]=\\\"mm.user_id\\\">{{mm.user_id}}</span></td>\\n                                    <td>{{dateUtil.unixToDateString(mm.time)}}</td>\\n                                    <td>{{mm.media_type}}</td>\\n                                    <td>{{mm.media_id_title}}</td>\\n                                    <td>{{mm.device_type}}</td>\\n                                    <td>{{mm.device_browser}}</td>\\n                                    <td>{{mm.device_os}}</td>\\n                                    <td>{{mm.isp}}</td>\\n                                    <td>{{mm.cdn}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"searchOptions.total\\\"\\n                         (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Error details</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div *ngIf=\\\"selectedError\\\" class=\\\"col-md-12\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt >Error ID:</dt> <dd >{{selectedError.error_id}}</dd>\\n                           <dt >User ID:</dt> <dd >{{selectedError.user_id}}</dd>\\n                           <dt >Media:</dt> <dd >{{selectedError.media_id_title}}</dd>\\n                           <dt >Media type:</dt> <dd >{{selectedError.media_type}}</dd>\\n                           <dt >Duration:</dt> <dd >{{dateUtil.formatDuration(selectedError.media_duration)}}</dd>\\n                           <dt >Occurrence date:</dt> <dd >{{dateUtil.unixToDateString(selectedError.time)}} {{dateUtil.unixToTimeString(selectedError.time)}}</dd>\\n                           <dt >Device:</dt> <dd >{{selectedError.device_type}}</dd>\\n                           <dt >Browser:</dt> <dd >{{selectedError.device_browser}}</dd>\\n                           <dt >OS:</dt> <dd >{{selectedError.device_os}}</dd>\\n                           <dt >ISP:</dt> <dd >{{selectedError.isp}}</dd>\\n                           <dt >CDN:</dt> <dd >{{selectedError.cdn}}</dd>\\n                           <dt >Error type:</dt> <dd >Temporary network problem</dd>\\n                           <dt >Error message:</dt> <dd >Details [VideoDashJs]: http://bradmax.com/static/video/tos/440272.mpd is not available (net::ERR_INTERNET_DISCONNECTED)</dd>\\n                           <dt >Stack trace</dt> <dd >\\n                            <textarea style=\\\"width:100%;height:100px;\\\">\\nonDashJsError   @   bradmax_player.js:20288\\n(anonymous) @   bradmax_player.js:57\\ntrigger @   bradmax_player.js:57\\nerror   @   bradmax_player.js:57\\nf   @   bradmax_player.js:57\\nerror (async)\\nload    @   bradmax_player.js:57\\nN   @   bradmax_player.js:57\\n(anonymous) @   bradmax_player.js:57\\nsetTimeout (async)\\n(anonymous) @   bradmax_player.js:57\\nf   @   bradmax_player.js:57\\nerror (async)\\nload    @   bradmax_player.js:57\\nN   @   bradmax_player.js:57\\n(anonymous) @   bradmax_player.js:57\\nsetTimeout (async)\\n(anonymous) @   bradmax_player.js:57\\nf   @   bradmax_player.js:57\\nerror (async)\\nload    @   bradmax_player.js:57\\nN   @   bradmax_player.js:57\\n(anonymous) @   bradmax_player.js:57\\nsetTimeout (async)\\n(anonymous) @   bradmax_player.js:57\\nf   @   bradmax_player.js:57\\nerror (async)\\nload    @   bradmax_player.js:57\\nN   @   bradmax_player.js:57\\nload    @   bradmax_player.js:57\\nload    @   bradmax_player.js:57\\nload    @   bradmax_player.js:57\\nload    @   bradmax_player.js:57\\nae  @   bradmax_player.js:57\\nQ   @   bradmax_player.js:57\\nattachPlayerSourceUrl   @   bradmax_player.js:20819\\nsetWidevineDrmSupportPlayback   @   bradmax_player.js:20898\\ninitSource  @   bradmax_player.js:20703\\nplay    @   bradmax_player.js:20737\\nplayPause   @   bradmax_player.js:20801\\nonPlayPauseEvent    @   bradmax_player.js:18714\\ndispatch    @   bradmax_player.js:2278\\ndispatch    @   bradmax_player.js:1777\\nonBtnClick  @   bradmax_player.js:12333\\nf   @   bradmax_player.js:1968\\n                            </textarea>\\n                       </dd>\\n                       </dl>\\n                    </div>\\n                    <div *ngIf=\\\"!selectedError\\\">\\n                        <div class=\\\"no-item-selected\\\">No item selected</div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1392:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .nav-link.active {\\n  background-color: #242a30;\\n  color: #fff; }\\n  :host .nav-link.active:hover {\\n  color: #a7a7a7; }\\n  :host .nav-link.add {\\n  color: #111;\\n  font-size: 20px;\\n  line-height: 16px;\\n  padding: 10px 12px; }\\n  :host .nav-link.add span {\\n  position: relative;\\n  top: -2px; }\\n  :host ::ng-deep date-range-picker .input-group {\\n  width: auto !important;\\n  margin-bottom: 10px; }\\n  :host ::ng-deep h4 dropdown-list {\\n  color: #333 !important; }\\n  :host ::ng-deep h4 dropdown {\\n  margin-bottom: -10px;\\n  top: -5px; }\\n  :host ::ng-deep h4 dropdown button.active {\\n  background-color: #efefef !important; }\\n  :host .date-filter-item {\\n  float: left;\\n  margin-right: 20px; }\\n  :host .input-group.input-group-filter {\\n  position: relative;\\n  display: block;\\n  margin-bottom: 10px; }\\n  :host .input-group.input-group-filter .input-group-prepend {\\n  display: inline-block;\\n  border: solid 1px #aaa;\\n  padding: 5px 5px 6px 5px;\\n  border-top-left-radius: 3px;\\n  border-bottom-left-radius: 3px;\\n  background-color: #e2e7eb;\\n  position: absolute;\\n  z-index: 100; }\\n  :host .input-group.input-group-filter .input-group-prepend .input-group-text {\\n  line-height: 16px;\\n  display: inline-block;\\n  vertical-align: bottom;\\n  min-width: 75px;\\n  text-align: center; }\\n  :host .input-group.input-group-filter dropdown {\\n  width: 100%; }\\n  :host .widget.widget-stats.widget-stats-small .progress-sm {\\n  height: 20px;\\n  background: #727cb6 !important;\\n  margin-bottom: 5px;\\n  margin-top: 25px; }\\n  :host .no-item-selected {\\n  text-align: center;\\n  font-size: 1.5rem;\\n  margin-top: 20px; }\\n\"\n\n/***/ }),\n\n/***/ 1393:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">Analytics - Real Time Marketing</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-4\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Find best matching contents by subject, keywords</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-12\\\">\\n                           <div class=\\\"row m-b-10\\\">\\n                              <div class=\\\"col-md-12\\\">\\n                                 <span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">URL</span>\\n                                 <input class=\\\"form-control\\\" style=\\\"width:80%; display:inline-block;vertical-align: top;\\\" type=\\\"text\\\" placeholder=\\\"Put page URL for loading sample text, keywords, tags\\\">\\n                             </div>\\n                          </div>\\n                          <div class=\\\"row m-b-10\\\">\\n                              <div class=\\\"col-md-12\\\">\\n                                 <textarea class=\\\"form-control\\\" style=\\\"width:100%;height:209px;\\\"placeholder=\\\"Put sample text, post, keywords or tags here for finding matching, related contents.\\\" ></textarea>\\n                             </div>\\n                          </div>\\n                          <div class=\\\"row\\\">\\n                              <div class=\\\"col-md-12\\\">\\n                                 <button class=\\\"btn btn-primary pull-right\\\">Search for content</button>\\n                             </div>\\n                          </div>\\n                      </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-8\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Possible contents for RTM matching to subject</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(contents != null) && (contents.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_id_title')\\\">\\n                                        Media\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id_title') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id_title') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('time')\\\">\\n                                        Time\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'time') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'time') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_type')\\\">\\n                                        Media Type\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_type')\\\">\\n                                        Media Tags\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of contents\\\">\\n                                    <td>{{mm.title}}</td>\\n                                    <td>{{mm.year}}</td>\\n                                    <td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n                                    <td><span class=\\\"content-tags\\\">{{mm.tags}}</span></td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"searchOptions.total\\\"\\n                         (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Campaigns with monitored contents</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(contents != null) && (contents.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th>Name</th>\\n                                    <th>Started at</th>\\n                                    <th>Linked contents</th>\\n                                    <th>Stats</th>\\n                                    <th>History</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let c of campaigns\\\">\\n                                    <td>{{c.name}}</td>\\n                                    <td>{{dateUtil.unixToDateString(c.time)}}</td>\\n                                    <td>\\n                                        <div *ngFor=\\\"let mm_title of c.contents\\\">{{mm_title}}</div>\\n                                    </td>\\n                                    <td>\\n                                        Total views: {{c.totalViews}}<br/>\\n                                        Total users: {{c.totalUsers}}\\n                                    </td>\\n                                    <td>\\n                                        <chart [chartHeight]=\\\"'200px'\\\"\\n                                            [chartData]=\\\"c.history.data\\\"\\n                                            [chartLabels]=\\\"c.history.labels\\\"\\n                                            [startDate]=\\\"c.history.startDate\\\"\\n                                            [endDate]=\\\"c.history.endDate\\\"\\n                                            [chartType]=\\\"'lineTime'\\\"\\n                                            [granularity]=\\\"'hour'\\\"></chart>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                     <div class=\\\"col-md-12\\\">\\n                        <button class=\\\"btn btn-primary pull-right\\\">Add campaign +</button>\\n                    </div>\\n                 </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1394:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .content-tags {\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  max-width: 400px;\\n  display: inline-block;\\n  line-height: 1rem; }\\n  :host .nav-link.active {\\n  background-color: #242a30;\\n  color: #fff; }\\n  :host .nav-link.active:hover {\\n  color: #a7a7a7; }\\n  :host .nav-link.add {\\n  color: #111;\\n  font-size: 20px;\\n  line-height: 16px;\\n  padding: 10px 12px; }\\n  :host .nav-link.add span {\\n  position: relative;\\n  top: -2px; }\\n  :host ::ng-deep date-range-picker .input-group {\\n  width: auto !important;\\n  margin-bottom: 10px; }\\n  :host ::ng-deep h4 dropdown-list {\\n  color: #333 !important; }\\n  :host ::ng-deep h4 dropdown button.active {\\n  background-color: #efefef !important; }\\n  :host .date-filter-item {\\n  float: left;\\n  margin-right: 20px; }\\n  :host .input-group.input-group-filter {\\n  position: relative;\\n  display: block;\\n  margin-bottom: 10px; }\\n  :host .input-group.input-group-filter .input-group-prepend {\\n  display: inline-block;\\n  border: solid 1px #aaa;\\n  padding: 5px 5px 6px 5px;\\n  border-top-left-radius: 3px;\\n  border-bottom-left-radius: 3px;\\n  background-color: #e2e7eb;\\n  position: absolute;\\n  z-index: 100; }\\n  :host .input-group.input-group-filter .input-group-prepend .input-group-text {\\n  line-height: 16px;\\n  display: inline-block;\\n  vertical-align: bottom;\\n  min-width: 75px;\\n  text-align: center; }\\n  :host .input-group.input-group-filter dropdown {\\n  width: 100%; }\\n  :host .widget.widget-stats.widget-stats-small .progress-sm {\\n  height: 20px;\\n  background: #727cb6 !important;\\n  margin-bottom: 5px;\\n  margin-top: 25px; }\\n  :host .no-item-selected {\\n  text-align: center;\\n  font-size: 1.5rem;\\n  margin-top: 20px; }\\n\"\n\n/***/ }),\n\n/***/ 1395:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">Analytics - Content insights</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-4\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Views by media type <dropdown class=\\\"m-l-10\\\" [model]=\\\"timeRangeDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-12\\\">\\n                            <chart [chartHeight]=\\\"'300px'\\\"\\n                             [chartData]=\\\"viewsByMediaTypeData\\\"\\n                             [chartLabels]=\\\"viewsByMediaTypeLabels\\\"\\n                             [chartType]=\\\"'doughnut'\\\"></chart>\\n                      </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-4\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">VOD/Series views by genres <dropdown class=\\\"m-l-10\\\" [model]=\\\"timeRangeDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                            <chart [chartHeight]=\\\"'300px'\\\"\\n                             [chartData]=\\\"vodViewsByGenresData\\\"\\n                             [chartLabels]=\\\"vodViewsByGenresLabels\\\"\\n                             [chartType]=\\\"'doughnut'\\\"></chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-4\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">TV/Catchups views by genres <dropdown class=\\\"m-l-10\\\" [model]=\\\"timeRangeDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                            <chart [chartHeight]=\\\"'300px'\\\"\\n                             [chartData]=\\\"tvViewsByGenresData\\\"\\n                             [chartLabels]=\\\"tvViewsByGenresLabels\\\"\\n                             [chartType]=\\\"'doughnut'\\\"></chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Search for new content and estimate audience</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-md-12\\\">\\n                                 <span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">Search in IMDB</span>\\n                                 <input class=\\\"form-control\\\" style=\\\"width:80%; display:inline-block;vertical-align: top;\\\" type=\\\"text\\\" placeholder=\\\"Search for video title\\\" value=\\\"Dune (2021)\\\">\\n                             </div>\\n                        </div>\\n                        <div class=\\\"row m-t-15\\\">\\n                            <div class=\\\"col-md-12\\\">\\n                                <h4>Media info</h4>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-md-6\\\">\\n                                 <dl  class=\\\"dl-horizontal\\\">\\n                                    <dt >Type:</dt> <dd >VOD</dd>\\n                                    <dt >Title:</dt> <dd >Dune (2021)</dd>\\n                                    <dt >Duration:</dt> <dd >9,300 [s] (2h 35m)</dd>\\n                                    <dt >Genres:</dt> <dd >Action, Adventure, Drama, Sci-Fi</dd>\\n                                    <dt >Tags:</dt>\\n                                    <dd >\\n                                         prescience, future, empire, sandworm, doctor, mother son relationship, spy, premonition, desert, sand, chosen one, based on novel, adaptation, duke, nobility, desert planet, science fantasy, destiny, giant creature, giant worm, title same as book, mind control\\n                                    </dd>\\n                                </dl>\\n                             </div>\\n                             <div class=\\\"col-md-6\\\" style=\\\"text-align: center;\\\">\\n                                 <img class=\\\"movie-poster\\\" src=\\\"https://m.media-amazon.com/images/M/MV5BN2FjNmEyNWMtYzM0ZS00NjIyLTg5YzYtYThlMGVjNzE1OGViXkEyXkFqcGdeQXVyMTkxNjUyNQ@@._V1_QL75_UX380_CR0,1,380,562_.jpg\\\">\\n                             </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-md-12\\\">\\n                                <h4>Estimated audience</h4>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-md-6\\\">\\n                                 <div class=\\\"widget widget-stats bg-blue\\\">\\n                                    <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n                                    <div class=\\\"stats-title\\\">Users</div>\\n                                    <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">15,600</div>\\n                                </div>\\n                             </div>\\n                             <div class=\\\"col-md-6\\\">\\n                                 <div class=\\\"widget widget-stats bg-black\\\">\\n                                    <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n                                    <div class=\\\"stats-title\\\">Views</div>\\n                                    <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">18,200</div>\\n                                </div>\\n                             </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <h4>Similar VOD already in system</h4>\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th>Media ID</th>\\n                                    <th>Title</th>\\n                                    <th>Added at</th>\\n                                    <th>Duration</th>\\n                                    <th>Views</th>\\n                                    <th>Users</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of contents\\\">\\n                                    <td><a href=\\\"#\\\">{{mm.id}}</a></td>\\n                                    <td>{{mm.title}}</td>\\n                                    <td>{{mm.addedIntoSystem}}</td>\\n                                    <td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n                                    <td>{{mm.views}}</td>\\n                                    <td>{{mm.users}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"searchOptions.total\\\"\\n                         (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1396:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .content-tags {\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  max-width: 400px;\\n  display: inline-block;\\n  line-height: 1rem; }\\n  :host .nav-link.active {\\n  background-color: #242a30;\\n  color: #fff; }\\n  :host .nav-link.active:hover {\\n  color: #a7a7a7; }\\n  :host .nav-link.add {\\n  color: #111;\\n  font-size: 20px;\\n  line-height: 16px;\\n  padding: 10px 12px; }\\n  :host .nav-link.add span {\\n  position: relative;\\n  top: -2px; }\\n  :host ::ng-deep date-range-picker .input-group {\\n  width: auto !important;\\n  margin-bottom: 10px; }\\n  :host ::ng-deep h4 dropdown {\\n  margin-bottom: -10px;\\n  top: -5px; }\\n  :host ::ng-deep h4 dropdown-list {\\n  color: #333 !important; }\\n  :host ::ng-deep h4 dropdown button.active {\\n  background-color: #efefef !important; }\\n  :host .date-filter-item {\\n  float: left;\\n  margin-right: 20px; }\\n  :host .input-group.input-group-filter {\\n  position: relative;\\n  display: block;\\n  margin-bottom: 10px; }\\n  :host .input-group.input-group-filter .input-group-prepend {\\n  display: inline-block;\\n  border: solid 1px #aaa;\\n  padding: 5px 5px 6px 5px;\\n  border-top-left-radius: 3px;\\n  border-bottom-left-radius: 3px;\\n  background-color: #e2e7eb;\\n  position: absolute;\\n  z-index: 100; }\\n  :host .input-group.input-group-filter .input-group-prepend .input-group-text {\\n  line-height: 16px;\\n  display: inline-block;\\n  vertical-align: bottom;\\n  min-width: 75px;\\n  text-align: center; }\\n  :host .input-group.input-group-filter dropdown {\\n  width: 100%; }\\n  :host .widget.widget-stats.widget-stats-small .progress-sm {\\n  height: 20px;\\n  background: #727cb6 !important;\\n  margin-bottom: 5px;\\n  margin-top: 25px; }\\n  :host .no-item-selected {\\n  text-align: center;\\n  font-size: 1.5rem;\\n  margin-top: 20px; }\\n  :host .movie-poster {\\n  width: 50%;\\n  margin-left: auto;\\n  margin-right: auto;\\n  border: solid 1px #a7a7a7; }\\n  @media (min-width: 768px) {\\n  :host .dl-horizontal dt {\\n    width: 100px;\\n    padding-right: 10px; }\\n  :host .dl-horizontal dd {\\n    margin-left: 100px; } }\\n\"\n\n/***/ }),\n\n/***/ 1397:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n    <ul class=\\\"nav nav-pills mb-2\\\">\\n         <li class=\\\"nav-item\\\">\\n             <a href=\\\"#nav-pills-tab-1\\\" data-toggle=\\\"tab\\\" class=\\\"nav-link active\\\">\\n                 <span class=\\\"d-sm-block d-none\\\">Report 1</span>\\n             </a>\\n         </li>\\n         <li class=\\\"nav-item\\\">\\n             <a href=\\\"#nav-pills-tab-2\\\" data-toggle=\\\"tab\\\" class=\\\"nav-link\\\">\\n                 <span class=\\\"d-sm-block d-none\\\">Report 2</span>\\n             </a>\\n         </li>\\n         <li class=\\\"nav-item\\\">\\n             <a href=\\\"#nav-pills-tab-3\\\" data-toggle=\\\"tab\\\" class=\\\"nav-link\\\">\\n                 <span class=\\\"d-sm-block d-none\\\">Report 3</span>\\n             </a>\\n         </li>\\n         <li class=\\\"nav-item\\\">\\n             <a href=\\\"#nav-pills-tab-4\\\" data-toggle=\\\"tab\\\" class=\\\"nav-link add\\\">\\n                 <span class=\\\"d-sm-block d-none\\\">+</span>\\n             </a>\\n         </li>\\n         <li class=\\\"nav-item pull-right\\\">\\n             <a href=\\\"javascript:;\\\" [routerLink]=\\\"['/admin', 'analytics', 'flexmodel', 'setup']\\\" class=\\\"nav-link btn btn-default\\\">\\n                 Setup\\n             </a>\\n         </li>\\n     </ul>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Analytics - Flex Model - Filters</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(1)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[1], 'fa-plus':!isPanelOpen[1]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[1]\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Datetime</h4>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-12\\\">\\n\\n                          <chart-granularity #granularity size=\\\"sm\\\"\\n                              class=\\\"date-filter-item\\\"\\n                              [types]=\\\"chartService.granularityTypes\\\"\\n                              [activeType]=\\\"chartService.activeGranularity\\\"\\n                              (onTypeChange)=\\\"chartService.onGranularityChange($event)\\\">\\n                          </chart-granularity>\\n\\n                          <dropdown  [model]=\\\"filterDropdownTimeScope\\\" [style.visibility]=\\\"true\\\" style=\\\"float:left;margin-right:10px;\\\"></dropdown>\\n\\n                          <date-range-picker\\n                              class=\\\"date-filter-item\\\"\\n                              showIcon=\\\"right\\\"\\n                              [enable]=\\\"true\\\"\\n                              [options]=\\\"{startDate:chartService.startDate, endDate:chartService.endDate}\\\"\\n                              (selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n                          </date-range-picker>\\n\\n                          <div style=\\\"clear:both;\\\"></div>\\n                      </div>\\n                  </div>\\n\\n                  <div class=\\\"row m-t-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Client</h4>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">OS</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownOs\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Browser</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownBrowser\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Device</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownDevice\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Tags</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownTags\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">App version</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownAppVersion\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Player</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownPlayer\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                  </div>\\n\\n                  <div class=\\\"row m-t-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Network</h4>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-6\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">ISP</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownIsp\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-6\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">CDN</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownCdn\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                  </div>\\n\\n                  <div class=\\\"row m-t-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Geolocation</h4>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Country</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownGeoCountry\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Region</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownGeoRegion\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">City</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownGeoCity\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                  </div>\\n\\n                  <div class=\\\"row m-t-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Demography</h4>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Age from</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownDemographyAgeFrom\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Age to</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownDemographyAgeTo\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Sex</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownDemographySex\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                  </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Totals</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(2)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[2], 'fa-plus':!isPanelOpen[2]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[2]\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-yellow\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Views</div>\\n                           <div class=\\\"stats-number\\\">116,904</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-yellow\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Users</div>\\n                           <div class=\\\"stats-number\\\">29,843</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-yellow\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Avg watch time</div>\\n                           <div class=\\\"stats-number\\\">12m 43s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-yellow\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Views/User</div>\\n                           <div class=\\\"stats-number\\\">3.92</div>\\n                       </div>\\n                    </div>\\n                 </div>\\n                 <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-blue\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Stream start time</div>\\n                           <div class=\\\"stats-number\\\">1.42s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-blue\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Player start time</div>\\n                           <div class=\\\"stats-number\\\">0.72s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-blue\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Rebuffer duration</div>\\n                           <div class=\\\"stats-number\\\">2.48s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-blue\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-bar-chart fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Rebuffer percentage</div>\\n                           <div class=\\\"stats-number\\\">3.71%</div>\\n                       </div>\\n                    </div>\\n                 </div>\\n                 <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-black\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-video-camera fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">FPS rendered / encoded</div>\\n                           <div class=\\\"stats-number\\\">30/30</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-black\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-wifi fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Avg bitrate</div>\\n                           <div class=\\\"stats-number\\\">8502 kbp</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-black\\\">\\n                           <div class=\\\"stats-title\\\">Bitrate distribution</div>\\n                           <div class=\\\"progress progress-sm\\\">\\n                                <div class=\\\"progress-bar progress-bar-striped bg-yellow p-t-5 f-s-10\\\" style=\\\"width: 45%;\\\">Hi: 45%</div>\\n                                <div class=\\\"progress-bar progress-bar-striped bg-blue p-t-5 f-s-10\\\" style=\\\"width: 28%;\\\">Med: 28%</div>\\n                                <div class=\\\"progress-bar progress-bar-striped bg-black text-yellow p-t-5 f-s-10\\\" style=\\\"width: 27%;\\\">Low: 27%</div>\\n                           </div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Quit time</div>\\n                           <div class=\\\"stats-number\\\">8.15s</div>\\n                       </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-times-circle fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Quit ratio</div>\\n                           <div class=\\\"stats-number\\\">2.09%</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Ad quit time</div>\\n                           <div class=\\\"stats-number\\\">1.53s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-bar-chart fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Ad quit ratio</div>\\n                           <div class=\\\"stats-number\\\">16.57%</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-bar-chart fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Error ratio</div>\\n                           <div class=\\\"stats-number\\\">0.002%</div>\\n                       </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Time series</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(3)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[3], 'fa-plus':!isPanelOpen[3]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[3]\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                           <i class=\\\"fa fa-times\\\"></i> Remove\\n                        </button>\\n                    </div>\\n                </div>\\n                <chart [chartData]=\\\"timeSeries.data\\\" [chartLabels]=\\\"timeSeries.labels\\\" [chartType]=\\\"timeSeries.chartType\\\"\\n                   [startDate]=\\\"timeSeries.startDate\\\" [endDate]=\\\"timeSeries.endDate\\\" [granularity]=\\\"timeSeries.granularity\\\">\\n                </chart>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Metrics</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"metricsDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-1\\\">\\n                        <button class=\\\"btn btn-primary\\\">Add chart</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Table</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(4)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[4], 'fa-plus':!isPanelOpen[4]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[4]\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                           <i class=\\\"fa fa-times\\\"></i> Remove\\n                        </button>\\n                    </div>\\n                </div>\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h5 style=\\\"font-size: 16px;text-align: center;\\\">Stream start time [sec]<small style=\\\"font-size:80%\\\">(CDN vs ISP)</small></h5>\\n                    </div>\\n                </div>\\n                <table class=\\\"table table-striped table-bordered\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th width=\\\"100\\\">CDN \\\\ ISP</th>\\n                                    <th *ngFor=\\\"let colName of tableCols\\\">{{colName}}</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let rowName of tableRows; let rowIdx = index\\\">\\n                                    <td>{{rowName}}</td>\\n                                    <td *ngFor=\\\"let val of tableData[rowIdx]\\\">{{val | number:'1.3-3'}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Row</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"tableDimDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Col</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"tableDimDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Metrics</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"tableMetricsDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-1\\\">\\n                        <button class=\\\"btn btn-primary\\\">Add table</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Bar chart</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(5)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[5], 'fa-plus':!isPanelOpen[5]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[5]\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                           <i class=\\\"fa fa-times\\\"></i> Remove\\n                        </button>\\n                    </div>\\n                </div>\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h5 style=\\\"font-size: 16px;text-align: center;\\\">ISP info</h5>\\n                    </div>\\n                </div>\\n                <chart-categories [chartData]=\\\"categoriesSeries.data\\\" [chartLabels]=\\\"categoriesSeries.labels\\\">\\n                </chart-categories>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Dimension</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"categoriesDimDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Metrics</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"metricsDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-1\\\">\\n                        <button class=\\\"btn btn-primary\\\">Add chart</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Geo</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(6)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[6], 'fa-plus':!isPanelOpen[6]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[6]\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                           <i class=\\\"fa fa-times\\\"></i> Remove\\n                        </button>\\n                    </div>\\n                </div>\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h5 style=\\\"font-size: 16px;text-align: center;\\\">Stream start time [sec]</h5>\\n                    </div>\\n                </div>\\n\\n                <google-chart [data]=\\\"mapChartData\\\"></google-chart>\\n\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Metrics</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"metricDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-1\\\">\\n                        <button class=\\\"btn btn-primary\\\">Add chart</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n\"\n\n/***/ }),\n\n/***/ 1398:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .nav-link.active {\\n  background-color: #242a30;\\n  color: #fff; }\\n  :host .nav-link.active:hover {\\n  color: #a7a7a7; }\\n  :host .nav-link.add {\\n  color: #111;\\n  font-size: 20px;\\n  line-height: 16px;\\n  padding: 10px 12px; }\\n  :host .nav-link.add span {\\n  position: relative;\\n  top: -2px; }\\n  :host .date-filter-item {\\n  float: left;\\n  margin-right: 20px; }\\n  :host .input-group.input-group-filter {\\n  position: relative;\\n  display: block;\\n  margin-bottom: 10px; }\\n  :host .input-group.input-group-filter .input-group-prepend {\\n  display: inline-block;\\n  border: solid 1px #aaa;\\n  padding: 5px 5px 6px 5px;\\n  border-top-left-radius: 3px;\\n  border-bottom-left-radius: 3px;\\n  background-color: #e2e7eb;\\n  position: absolute;\\n  z-index: 100; }\\n  :host .input-group.input-group-filter .input-group-prepend .input-group-text {\\n  line-height: 16px;\\n  display: inline-block;\\n  vertical-align: bottom;\\n  min-width: 75px;\\n  text-align: center; }\\n  :host .input-group.input-group-filter dropdown {\\n  width: 100%; }\\n  :host .widget.widget-stats.widget-stats-small .progress-sm {\\n  height: 20px;\\n  background: #727cb6 !important;\\n  margin-bottom: 5px;\\n  margin-top: 25px; }\\n\"\n\n/***/ }),\n\n/***/ 1399:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar map = {\n\t\"./clickstream.json\": 1400,\n\t\"./gaming.json\": 1401,\n\t\"./qoe.json\": 1402,\n\t\"./telemetry.json\": 1403\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1399;\n\n/***/ }),\n\n/***/ 1400:\n/***/ (function(module, exports) {\n\nmodule.exports = [{\"type\":\"datapoint\",\"name\":\"SessionHeartbeat\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"},{\"name\":\"lastLoginAt\",\"type\":\"date\"}]},{\"name\":\"device\",\"type\":\"type\",\"typeName\":\"Device\",\"fields\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"os\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"}]},{\"name\":\"sessionSource\",\"type\":\"type\",\"typeName\":\"SessionSource\",\"fields\":[{\"name\":\"pageUrl\",\"type\":\"string\"},{\"name\":\"adCampaignId\",\"type\":\"string\"},{\"name\":\"sourceTags\",\"type\":\"array.string\"}]},{\"name\":\"eventsLog\",\"type\":\"array.type\",\"typeName\":\"Event\",\"fields\":[{\"name\":\"pageUrl\",\"type\":\"string\"},{\"name\":\"pageTags\",\"type\":\"array.string\"},{\"name\":\"pageCategory\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"date\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"basketChanges\",\"type\":\"type\",\"typeName\":\"BasketChange\",\"fields\":[{\"name\":\"changeType\",\"type\":\"string\"},{\"name\":\"productId\",\"type\":\"string\"},{\"name\":\"productTags\",\"type\":\"array.string\"},{\"name\":\"productItems\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"itemPrice\",\"type\":\"float\",\"aggregable\":true}]}]}]}]\n\n/***/ }),\n\n/***/ 1401:\n/***/ (function(module, exports) {\n\nmodule.exports = [{\"type\":\"datapoint\",\"name\":\"GamePlay\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"}]},{\"name\":\"game\",\"type\":\"type\",\"typeName\":\"Game\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tags\",\"type\":\"array.string\"},{\"name\":\"genre\",\"type\":\"type\",\"typeName\":\"GameGenre\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"isForKids\",\"type\":\"bool\"}]}]},{\"name\":\"playTime\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"loadingTime\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"iddleTime\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"totalTime\",\"type\":\"time\",\"aggregable\":true}]},{\"type\":\"datapoint\",\"name\":\"GamePurchase\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"}]},{\"name\":\"game\",\"type\":\"type\",\"typeName\":\"Game\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tags\",\"type\":\"array.string\"},{\"name\":\"genre\",\"type\":\"type\",\"typeName\":\"GameGenre\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"isForKids\",\"type\":\"bool\"}]}]},{\"name\":\"price\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"currency\",\"type\":\"string\"}]}]\n\n/***/ }),\n\n/***/ 1402:\n/***/ (function(module, exports) {\n\nmodule.exports = [{\"type\":\"datapoint\",\"name\":\"VideoStartPlay\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"}]},{\"name\":\"startStats\",\"type\":\"type\",\"typeName\":\"StartStats\",\"fields\":[{\"name\":\"streamStartTime\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"playerStartTime\",\"type\":\"time\",\"aggregable\":true}]},{\"name\":\"link\",\"type\":\"type\",\"typeName\":\"Link\",\"fields\":[{\"name\":\"bitrate\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"ISP\",\"type\":\"string\"},{\"name\":\"CDN\",\"type\":\"string\"}]},{\"name\":\"media\",\"type\":\"type\",\"typeName\":\"Media\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"tags\",\"type\":\"array.string\"}]},{\"name\":\"device\",\"type\":\"type\",\"typeName\":\"Device\",\"fields\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"os\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"}]}]},{\"type\":\"datapoint\",\"name\":\"VideoPlaybackHeartbeat\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"}]},{\"name\":\"link\",\"type\":\"type\",\"typeName\":\"Link\",\"fields\":[{\"name\":\"ISP\",\"type\":\"string\"},{\"name\":\"CDN\",\"type\":\"string\"}]},{\"name\":\"eventLog\",\"type\":\"array.type\",\"typeName\":\"Event\",\"fields\":[{\"name\":\"bitrate\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"date\",\"type\":\"date\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"rebufferDuration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"rebufferNum\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"renderedFps\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"decodedFps\",\"type\":\"float\",\"aggregable\":true}]},{\"name\":\"media\",\"type\":\"type\",\"typeName\":\"Media\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"tags\",\"type\":\"array.string\"}]},{\"name\":\"device\",\"type\":\"type\",\"typeName\":\"Device\",\"fields\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"os\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"}]}]}]\n\n/***/ }),\n\n/***/ 1403:\n/***/ (function(module, exports) {\n\nmodule.exports = [{\"type\":\"datapoint\",\"name\":\"NetworkNodeHeartbeat\",\"fields\":[{\"name\":\"nodeId\",\"type\":\"string\"},{\"name\":\"nodeRegion\",\"type\":\"string\"},{\"name\":\"nodeType\",\"type\":\"string\"},{\"name\":\"nodeTags\",\"type\":\"array.string\"},{\"name\":\"nodeMaxBandwidth\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"events\",\"type\":\"array.type\",\"typeName\":\"NetworkEvent\",\"fields\":[{\"name\":\"eventType\",\"type\":\"string\"},{\"name\":\"bitrate\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"date\",\"type\":\"date\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"cpuUsage\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"memoryUsage\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"openConnections\",\"type\":\"int\",\"aggregable\":true}]}]},{\"type\":\"datapoint\",\"name\":\"ServerHeartbeat\",\"fields\":[{\"name\":\"serverId\",\"type\":\"string\"},{\"name\":\"serverRegion\",\"type\":\"string\"},{\"name\":\"serverType\",\"type\":\"string\"},{\"name\":\"serverTags\",\"type\":\"array.string\"},{\"name\":\"serverNetworkNodes\",\"type\":\"array.string\"},{\"name\":\"serverCpuType\",\"type\":\"string\"},{\"name\":\"serverCpuCores\",\"type\":\"int\"},{\"name\":\"serverRam\",\"type\":\"int\"},{\"name\":\"serverNetworkNodes\",\"type\":\"array.string\"},{\"name\":\"events\",\"type\":\"array.type\",\"typeName\":\"ServerEvent\",\"fields\":[{\"name\":\"eventType\",\"type\":\"string\"},{\"name\":\"bitrate\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"date\",\"type\":\"date\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"cpuUsage\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"memoryUsage\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"openConnections\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"requestsPerSec\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"storageInfo\",\"type\":\"array.type\",\"typeName\":\"StorageInfo\",\"fields\":[{\"name\":\"storageId\",\"type\":\"string\"},{\"name\":\"storageType\",\"type\":\"string\"},{\"name\":\"availSpace\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"freeSpace\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"totalSpace\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"operationsPerSec\",\"type\":\"int\",\"aggregable\":true}]}]}]}]\n\n/***/ }),\n\n/***/ 1404:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Analytics - Flex Model - Model</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block\\\">Model</h4>\\n                        <div class=\\\"btn-group m-r-5 m-b-5 pull-right\\\">\\n                            <a href=\\\"javascript:;\\\" class=\\\"btn btn-default\\\"><i class=\\\"fa fa-cog\\\"></i></a>\\n                            <a href=\\\"#\\\" data-toggle=\\\"dropdown\\\" class=\\\"btn btn-default dropdown-toggle\\\" aria-expanded=\\\"false\\\"><b class=\\\"caret\\\"></b></a>\\n                            <div class=\\\"dropdown-menu dropdown-menu-right\\\">\\n                                <input type=\\\"file\\\" id=\\\"flex_model_json_upload\\\" (change)=\\\"handleJsonInput($event.target.files)\\\" accept=\\\".json\\\"/>\\n                                <a (click)=\\\"loadJsonClick($event)\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Load</a>\\n                                <a (click)=\\\"exportToJson($event)\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Export</a>\\n                                <div class=\\\"dropdown-divider\\\"></div>\\n                                <a (click)=\\\"loadPredefinedJson('qoe')\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Video QOE</a>\\n                                <a (click)=\\\"loadPredefinedJson('clickstream')\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Clickstream analytics</a>\\n                                <a (click)=\\\"loadPredefinedJson('telemetry')\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Network/server telemetry</a>\\n                                <a (click)=\\\"loadPredefinedJson('gaming')\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Gaming</a>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-8 events-list\\\">\\n                        <h5>Data points</h5>\\n\\n                        <div *ngFor=\\\"let dataPoint of model\\\">\\n                           <div class=\\\"input-group-row\\\">\\n                              <div class=\\\"input-group input-group-field\\\">\\n                                  <div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">Data Point</span></div>\\n                                  <input type=\\\"text\\\" value=\\\"{{dataPoint.name}}\\\"/>\\n                              </div>\\n                              <button class=\\\"btn btn-default btn-sm\\\">Add field</button>\\n                              <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                           </div>\\n                           <ul>\\n                              <li *ngFor=\\\"let dpField of dataPoint.fields\\\">\\n                                  <div class=\\\"input-group-row\\\">\\n                                     <div class=\\\"input-group input-group-field\\\"><div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">field</span></div><input type=\\\"text\\\" value=\\\"{{dpField.name}}\\\"/></div>\\n                                     <dropdown  [model]=\\\"fieldTypeDropdown\\\" [style.visibility]=\\\"true\\\" [value]=\\\"{value:dpField.type}\\\" class=\\\"small\\\"></dropdown>\\n                                     <div *ngIf=\\\"dpField.type=='int' || dpField.type=='float' || dpField.type=='time'\\\" class=\\\"aggr-switch\\\">\\n                                         <span>Aggr</span>\\n                                         <switch size=\\\"small\\\" [checked]=\\\"dpField.aggregable\\\"></switch>\\n                                      </div>\\n                                      <div class=\\\"input-group input-group-field\\\" *ngIf=\\\"(dpField.type=='type' || dpField.type=='array.type')\\\">\\n                                        <input type=\\\"text\\\" class=\\\"input-type-name\\\" value=\\\"{{dpField.typeName}}\\\"/>\\n                                     </div>\\n                                     <button class=\\\"btn btn-default btn-sm\\\" *ngIf=\\\"(dpField.type=='type' || dpField.type=='array.type')\\\">Add field</button>\\n                                     <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                                  </div>\\n                                  <ul *ngIf=\\\"(dpField.type=='type' || dpField.type=='array.type') && dpField.fields\\\">\\n                                      <li *ngFor=\\\"let tField of dpField.fields\\\">\\n                                         <div class=\\\"input-group-row\\\">\\n                                              <div class=\\\"input-group input-group-field\\\"><div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">field</span></div><input type=\\\"text\\\" value=\\\"{{tField.name}}\\\"/></div>\\n                                              <dropdown  [model]=\\\"fieldTypeDropdown\\\" [style.visibility]=\\\"true\\\" [value]=\\\"{value:tField.type}\\\" class=\\\"small\\\"></dropdown>\\n                                              <div *ngIf=\\\"tField.type=='int' || tField.type=='float' || tField.type=='time'\\\" class=\\\"aggr-switch\\\">\\n                                                  <span>Aggr</span>\\n                                                  <switch size=\\\"small\\\" [checked]=\\\"tField.aggregable\\\"></switch>\\n                                               </div>\\n                                               <div class=\\\"input-group input-group-field\\\" *ngIf=\\\"(tField.type=='type' || tField.type=='array.type')\\\">\\n                                                  <input type=\\\"text\\\" class=\\\"input-type-name\\\" value=\\\"{{tField.typeName}}\\\"/>\\n                                               </div>\\n                                               <button class=\\\"btn btn-default btn-sm\\\" *ngIf=\\\"(tField.type=='type' || tField.type=='array.type')\\\">Add field</button>\\n                                               <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                                         </div>\\n                                         <ul *ngIf=\\\"(tField.type=='type' || tField.type=='array.type') && tField.fields\\\">\\n                                               <li *ngFor=\\\"let ttField of tField.fields\\\">\\n                                                  <div class=\\\"input-group-row\\\">\\n                                                       <div class=\\\"input-group input-group-field\\\"><div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">field</span></div><input type=\\\"text\\\" value=\\\"{{ttField.name}}\\\"/></div>\\n                                                       <dropdown  [model]=\\\"fieldTypeDropdown\\\" [style.visibility]=\\\"true\\\" [value]=\\\"{value:ttField.type}\\\" class=\\\"small\\\"></dropdown>\\n                                                       <div *ngIf=\\\"ttField.type=='int' || ttField.type=='float' || ttField.type=='time'\\\" class=\\\"aggr-switch\\\">\\n                                                           <span>Aggr</span>\\n                                                           <switch size=\\\"small\\\" [checked]=\\\"ttField.aggregable\\\"></switch>\\n                                                        </div>\\n                                                        <div class=\\\"input-group input-group-field\\\" *ngIf=\\\"(ttField.type=='type' || ttField.type=='array.type')\\\">\\n                                                           <input type=\\\"text\\\" class=\\\"input-type-name\\\" value=\\\"{{ttField.typeName}}\\\"/>\\n                                                        </div>\\n                                                        <button class=\\\"btn btn-default btn-sm\\\" *ngIf=\\\"(ttField.type=='type' || ttField.type=='array.type')\\\">Add field</button>\\n                                                        <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                                                  </div>\\n                                                  <ul *ngIf=\\\"(ttField.type=='type' || ttField.type=='array.type') && ttField.fields\\\">\\n                                                        <li *ngFor=\\\"let tttField of ttField.fields\\\">\\n                                                           <div class=\\\"input-group-row\\\">\\n                                                                <div class=\\\"input-group input-group-field\\\"><div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">field</span></div><input type=\\\"text\\\" value=\\\"{{tttField.name}}\\\"/></div>\\n                                                                <dropdown  [model]=\\\"fieldTypeDropdown\\\" [style.visibility]=\\\"true\\\" [value]=\\\"{value:tttField.type}\\\" class=\\\"small\\\"></dropdown>\\n                                                                <div *ngIf=\\\"tttField.type=='int' || tttField.type=='float' || tttField.type=='time'\\\" class=\\\"aggr-switch\\\">\\n                                                                    <span>Aggr</span>\\n                                                                    <switch size=\\\"small\\\" [checked]=\\\"tttField.aggregable\\\"></switch>\\n                                                                 </div>\\n                                                                 <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                                                           </div>\\n                                                        </li>\\n                                                  </ul>\\n                                               </li>\\n                                          </ul>\\n                                      </li>\\n                                  </ul>\\n                              </li>\\n                           </ul>\\n                        </div>\\n                        <button class=\\\"btn btn-default btn-sm\\\">Add event</button>\\n                    </div>\\n                    <div class=\\\"col-md-4 olap-info\\\">\\n                        <h5>Dimmensions</h5>\\n                        <ul>\\n                            <li *ngFor=\\\"let dim of dimensions\\\">{{dim}}</li>\\n                        </ul>\\n\\n                        <h5>Metrics</h5>\\n                        <ul>\\n                            <li>\\n                                Data points count\\n                                <ul>\\n                                    <li *ngFor=\\\"let name of metricsByType['datapoint']\\\">{{name}}</li>\\n                                </ul>\\n                            </li>\\n                            <li>\\n                                Count / Unique count\\n                                <ul>\\n                                    <li *ngFor=\\\"let name of metricsByType['count']\\\">{{name}}</li>\\n                                </ul>\\n                            </li>\\n                            <li>\\n                                Aggregable (sum, min, max, avg, etc.)\\n                                <ul>\\n                                    <li *ngFor=\\\"let name of metricsByType['aggr']\\\">{{name}}</li>\\n                                </ul>\\n                            </li>\\n                      </ul>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1405:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .panel-body .btn-group.pull-right .dropdown-menu a {\\n  display: block;\\n  font-size: 12px;\\n  line-height: 30px;\\n  padding: 0 10px;\\n  color: #444;\\n  text-decoration: none; }\\n  :host .panel-body .btn-group.pull-right .dropdown-menu a:hover {\\n  background-color: lightgray; }\\n  :host .panel-body .btn-group.pull-right .dropdown-menu .dropdown-divider {\\n  border-bottom: solid 1px lightgray; }\\n  :host .panel-body .btn-group.pull-right .dropdown-menu #flex_model_json_upload {\\n  display: none; }\\n  :host .events-list ul {\\n  list-style-type: none; }\\n  :host .olap-info li {\\n  line-height: 24px;\\n  font-size: 14px; }\\n  :host .olap-info > ul {\\n  overflow-y: scroll;\\n  max-height: 500px;\\n  border: solid 1px lightgray !important;\\n  border-radius: 3px;\\n  margin-bottom: 30px; }\\n  :host .input-group-row .btn, :host .input-group-row dropdown {\\n  vertical-align: top; }\\n  :host .input-group-row dropdown.small button {\\n  min-width: 100px; }\\n  :host .input-group-row .aggr-switch {\\n  display: inline-block;\\n  vertical-align: top;\\n  height: 32px;\\n  padding: 5px 0px 0 10px;\\n  line-height: 24px; }\\n  :host .input-group-row .item-remove {\\n  display: none; }\\n  :host .input-group-row:hover > .item-remove {\\n  display: inline-block; }\\n  :host .input-group-row .input-group.input-group-field {\\n  position: relative;\\n  display: inline-block;\\n  margin-bottom: 10px; }\\n  :host .input-group-row .input-group.input-group-field > input[type=\\\"text\\\"] {\\n    border: 1px solid #ccd0d4;\\n    -webkit-box-shadow: none;\\n    box-shadow: none;\\n    font-size: 12px;\\n    border-radius: 3px;\\n    -webkit-border-radius: 3px;\\n    -moz-border-radius: 3px;\\n    height: 32px;\\n    padding: 6px 12px;\\n    background-color: #fff;\\n    background-image: none;\\n    border: 1px solid #ccc;\\n    border-radius: 4px;\\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\\n    -webkit-transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;\\n    -webkit-transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;\\n    transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;\\n    transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;\\n    transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;\\n    border-top-left-radius: 0;\\n    border-bottom-left-radius: 0;\\n    display: inline-block;\\n    font-size: 14px;\\n    line-height: 1.42857;\\n    color: #555;\\n    vertical-align: bottom; }\\n  :host .input-group-row .input-group.input-group-field > input[type=\\\"text\\\"].input-type-name {\\n    width: 120px;\\n    border-top-left-radius: 3px;\\n    border-bottom-left-radius: 3px; }\\n  :host .input-group-row .input-group.input-group-field .input-group-prepend {\\n    display: inline-block;\\n    border: solid 1px #aaa;\\n    padding: 7px 5px 6px 5px;\\n    border-top-left-radius: 3px;\\n    border-bottom-left-radius: 3px;\\n    background-color: #e2e7eb;\\n    vertical-align: bottom;\\n    margin-right: -4px; }\\n  :host .input-group-row .input-group.input-group-field .input-group-prepend .input-group-text {\\n      line-height: 16px;\\n      font-size: 14px;\\n      display: inline-block;\\n      min-width: 75px;\\n      text-align: center;\\n      vertical-align: bottom; }\\n\"\n\n/***/ }),\n\n/***/ 1406:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!--<div style=\\\"width: 50%; height: 500%; position: absolute; top: 0; left: 0;\\\">\\n    warrom\\n</div>\\n\\n\\n<button type=\\\"button\\\" \\n        style=\\\"margin-right: 20px;\\\"\\n        class=\\\"btn  btn-white btn-lg pull-left\\\"\\n        (click)=\\\"onShow('warroom')\\\">\\n        War room\\n</button>\\n<button type=\\\"button\\\" \\n        style=\\\"margin-right: 20px;\\\"\\n        class=\\\"btn btn-white btn-lg pull-left\\\"\\n        (click)=\\\"onShow('panicdashboard')\\\">\\n        Panic dashboard\\n</button>-->  \\n\\n<div class=\\\"widget widget-stats bg-blue col-md-3\\\" style=\\\"float:left; cursor: pointer; margin: 10px 10px 10px 10px;\\\"\\n    (click)=\\\"onShow('warroom')\\\">\\n    <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-line-chart fa-fw\\\"></i></div>\\n    <div class=\\\"stats-title\\\" style=\\\"padding-top:10px;\\\"></div>\\n    <div class=\\\"stats-number\\\" style=\\\"padding-top:10px;\\\" >War room</div>\\n\\n</div>\\n<div class=\\\"widget widget-stats bg-red-lighter col-md-3\\\" style=\\\"float:left; cursor: pointer; margin: 10px 10px 10px 10px;\\\"\\n    (click)=\\\"onShow('panicdashboard')\\\">\\n    <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-exclamation fa-fw\\\"></i></div>\\n    <div class=\\\"stats-title\\\" style=\\\"padding-top:10px;\\\"> </div>\\n    <div class=\\\"stats-number\\\" style=\\\"padding-top:10px;\\\" >Panic dashboard</div>\\n\\n</div>\"\n\n/***/ }),\n\n/***/ 1407:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!--\\n.no-scrollbar-wrap {\\n  position: absolute;\\n  top: 0;\\n  bottom: 0;\\n  left: 0;\\n  right: 0;\\n  \\n  /* OR */\\n  \\n  /* width: 100%;\\n  height: 250px; */\\n  \\n  overflow: hidden;\\n}\\n\\n-->\\n\\n<style type=\\\"text/css\\\">\\n.no-scrollbar-wrap {\\n  position: absolute;\\n  top: 0;\\n  bottom: 0;\\n  left: 0;\\n  right: 0;\\n  \\n  /* OR */\\n  \\n  /* width: 100%;\\n  height: 250px; */\\n  \\n  overflow: hidden;\\n}\\n\\n.no-scrollbar {\\n  position: relative;\\n  overflow-x: hidden;\\n  overflow-y: hidden;\\n  width: 100%;\\n  height: 100%;\\n  /* Padding the width of the scrollbar will be added to the right */\\n  box-sizing: content-box;\\n}\\n\\n</style>\\n\\n\\n<div (click)=\\\"onShowHeartbeat()\\\" class=\\\"no-scrollbar\\\" style=\\\"width: 100%; height: 100%; position: absolute; top: 0; left: 0; background-color: #333;\\\">\\n\\n    <!-- left panel -->\\n    <div class=\\\"col-md-4\\\" style=\\\"color: #DDD\\\">\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\" >\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"stats-title\\\" style=\\\"padding-top:5px; float: right; margin-right: 10px;\\\">{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }} </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <chart *ngIf=\\\"all24hErrorRate\\\"\\n                                    [chartData]=\\\"all24hErrorRate.data\\\"\\n                                    [chartLabels]=\\\"all24hErrorRate.labels\\\"\\n                                    [chartType]=\\\"all24hErrorRate.chartType\\\"\\n                                    [startDate]=\\\"all24hErrorRate.startDate\\\"\\n                                    [endDate]=\\\"all24hErrorRate.endDate\\\"\\n                                    [granularity]=\\\"all24hErrorRate.granularity\\\"\\n                                    [fontColor]=\\\"'#DDD'\\\"\\n                                    [gridColor]=\\\"'#DDD'\\\"\\n                                    [chartHeight] = \\\"leftChartHeight\\\"\\n                                    [pointRadius]=\\\"0\\\"\\n                                    >\\n                        </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\">\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"stats-title\\\" style=\\\"padding-top:5px; float: right; margin-right: 10px;\\\">{{ 'HEARTBEAT.WORD.BROWSERS_ERROR_RATE' | translate:lang }} </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <chart *ngIf=\\\"browser24hErrorRate\\\"\\n                                        [chartData]=\\\"browser24hErrorRate.data\\\"\\n                                        [chartLabels]=\\\"browser24hErrorRate.labels\\\"\\n                                        [chartType]=\\\"browser24hErrorRate.chartType\\\"\\n                                        [startDate]=\\\"browser24hErrorRate.startDate\\\"\\n                                        [endDate]=\\\"browser24hErrorRate.endDate\\\"\\n                                        [granularity]=\\\"browser24hErrorRate.granularity\\\"\\n                                        [fontColor]=\\\"'#DDD'\\\"\\n                                        [gridColor]=\\\"'#DDD'\\\"\\n                                        [chartHeight] = \\\"leftChartHeight\\\"\\n                                        [pointRadius]=\\\"0\\\"\\n                                        >\\n                        </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\" #divBrowserERTable>\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                <div class = \\\"row col-md-12\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                            <table class=\\\"table table-inverse col-md-6\\\" >\\n                                    <thead>\\n                                        <tr>\\n                                            <td>{{ 'HEARTBEAT.WORD.BROWSER' | translate:lang }}</td>\\n                                            <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let rec of browser_error_rate; let i = index\\\" >\\n                                            <td>{{rec.browser}}</td>\\n                                            <td>{{rec.error_rate}}</td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>   \\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                            <table class=\\\"table table-inverse col-md-6\\\" >\\n                                    <thead>\\n                                        <tr>\\n                                            <td>{{ 'HEARTBEAT.WORD.BROWSER' | translate:lang }}</td>\\n                                            <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let rec of browser_error_rate; let i = index\\\" >\\n                                            <td>{{rec.browser}}</td>\\n                                            <td>{{rec.error_rate}}</td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>   \\n                    </div>\\n \\n                </div>        \\n            </div>\\n        </div>\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\">\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"stats-title\\\" style=\\\"padding-top:5px; float: right; margin-right: 10px;\\\" >{{ 'HEARTBEAT.WORD.OS_ERROR_RATE' | translate:lang }} </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <chart *ngIf=\\\"OS24hErrorRate\\\"\\n                                            [chartData]=\\\"OS24hErrorRate.data\\\"\\n                                            [chartLabels]=\\\"OS24hErrorRate.labels\\\"\\n                                            [chartType]=\\\"OS24hErrorRate.chartType\\\"\\n                                            [startDate]=\\\"OS24hErrorRate.startDate\\\"\\n                                            [endDate]=\\\"OS24hErrorRate.endDate\\\"\\n                                            [granularity]=\\\"OS24hErrorRate.granularity\\\"\\n                                            [fontColor]=\\\"'#DDD'\\\"\\n                                            [gridColor]=\\\"'#DDD'\\\"\\n                                            [chartHeight] = \\\"leftChartHeight\\\"\\n                                            [pointRadius]=\\\"0\\\"\\n                                            >\\n                        </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\" #divOSERTable>\\n                <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                    <div class = \\\"row col-md-12\\\">\\n                        <div class=\\\"col-md-6\\\">\\n                                <table class=\\\"table table-inverse col-md-6\\\" >\\n                                        <thead>\\n                                            <tr>\\n                                                <td>{{ 'HEARTBEAT.WORD.OS' | translate:lang }}</td>\\n                                                <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let rec of browser_error_rate; let i = index\\\" >\\n                                                <td>{{rec.browser}}</td>\\n                                                <td>{{rec.error_rate}}</td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>   \\n                        </div>\\n                        <div class=\\\"col-md-6\\\">\\n                                <table class=\\\"table table-inverse col-md-6\\\" >\\n                                        <thead>\\n                                            <tr>\\n                                                <td>{{ 'HEARTBEAT.WORD.OS' | translate:lang }}</td>\\n                                                <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let rec of browser_error_rate; let i = index\\\" >\\n                                                <td>{{rec.browser}}</td>\\n                                                <td>{{rec.error_rate}}</td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>   \\n                        </div>\\n     \\n                    </div>        \\n                </div>\\n            </div>\\n\\n        \\n    </div>\\n\\n<!-- central panel-->\\n    <div class=\\\"col-md-5\\\" style=\\\"color: #DDD; padding-left: 0; padding-right: 0;\\\">\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px; \\\">\\n                <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                        <div class=\\\"stats-title\\\" style=\\\"margin-bottom: 10px;\\\"> ... </div>\\n\\n                        <div class=\\\"analytics-geo-map\\\" style= \\\"width: auto; height: auto;\\\">\\n                                <!--</google-chart>(chartSelect)=\\\"onMapRegionClick($event)\\\"-->\\n                                <google-chart \\n                                        [data]=\\\"mapChartData\\\" \\n                                ></google-chart>\\n                        </div>\\n                </div> \\n        </div>\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\" #divGeoTable>\\n                <div  class=\\\"panel-body\\\">\\n\\n                        <table class=\\\"table table-inverse analytics-geo-table\\\">\\n                                <thead>\\n                                        <tr>\\n                                            <td >{{ 'HEARTBEAT.WORD.COUNTRY' | translate:lang }}</td>\\n                                            <td >{{ 'HEARTBEAT.WORD.REGION' | translate:lang }}</td>\\n                                            <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                        </tr>\\n                                </thead>\\n                                <tbody>\\n                                        <tr *ngFor=\\\"let rec of geoData; let i = index\\\" >\\n                                                <td *ngIf=\\\"i < 10\\\" ><span [ngClass]=\\\"rec.flag\\\" ></span> {{rec.country.name}}</td>\\n                                                <td *ngIf=\\\"i < 10\\\" >{{i+1}}</td>\\n                                                <td *ngIf=\\\"i < 10\\\" >{{rec.views}}</td>\\n                                        </tr>\\n                                </tbody>\\n                        </table>\\n\\n                </div> \\n        </div>\\n\\n                \\n    </div>\\n\\n<!-- right panel -->\\n    <div class=\\\"col-md-3\\\" style=\\\"color: #DDD;\\\">\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" [ngStyle]=\\\"{ 'margin': '0px 0px 0px 0px', 'height': rightPanelHeight , 'display': 'inline-block !important' }\\\">\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n        \\n                <table class=\\\"table table-inverse\\\" >\\n                    <thead>\\n                        <tr>\\n                            <td>{{ 'HEARTBEAT.WORD.ID' | translate:lang }}</td>\\n                            <td>{{ 'HEARTBEAT.WORD.TITLE' | translate:lang }}</td>\\n                            <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                        </tr>\\n                    </thead>\\n                    <tbody>\\n                        <tr *ngFor=\\\"let rec of material_error_rate; let i = index\\\" >\\n                            <td>{{rec.id}}</td>\\n                            <td>{{rec.title}}</td>\\n                            <td>{{rec.error_rate}}</td>\\n                        </tr>\\n                    </tbody>\\n                </table>\\n        \\n            </div>\\n        </div>\\n                \\n    </div>\\n\\n</div>\"\n\n/***/ }),\n\n/***/ 1408:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div (click)=\\\"onShowHeartbeat()\\\" style=\\\"width: 100%; height: 100%; position: absolute; top: 0; left: 0; background-color: #333; padding: 20px;\\\">               \\n\\n    <div class=\\\"row\\\" >\\n        <div class=\\\"col-md-4\\\" style=\\\"color: #DDD\\\">\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px; height: 25%\\\">\\n                <div class=\\\"panel-body row\\\" style=\\\"padding: 20px;\\\" >\\n                    <div class=\\\"col-md-2 text-center\\\" [ngStyle]=\\\"{'height': leftChartHeight}\\\">\\n                        <div style=\\\"font-size:2rem;padding: 20px 0 5px;\\\">Right now</div>\\n                        <div style=\\\"font-size:5rem;padding: 5px 0 5px;font-weight: bold;\\\">{{audienceWatchingUsersNum}}</div>\\n                        <div style=\\\"font-size:1.5rem;padding: 5px 0 5px;\\\">watching users</div>\\n                    </div>\\n                    \\n                    <div class=\\\"col-md-5\\\">\\n                        <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_MIN' | translate:lang }}</div>\\n                        <chart-realtime\\n                            [chartData]=\\\"audienceMinutesChart.data\\\"\\n                            [chartLabels]=\\\"audienceMinutesChart.labels\\\"\\n                            [chartHeight]=\\\"leftChartHeight\\\"\\n                            [chartType]=\\\"'line'\\\"\\n                            [fontColor]=\\\"'#DDD'\\\"\\n                            [gridColor]=\\\"'#DDD'\\\"\\n                        ></chart-realtime>\\n                    </div>\\n                    \\n                    <div class=\\\"col-md-5\\\">\\n                        <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_SEC' | translate:lang }}</div>\\n                        <chart-realtime\\n                            [chartData]=\\\"audienceSecondsChart.data\\\"\\n                            [chartLabels]=\\\"audienceSecondsChart.labels\\\"\\n                            [chartHeight]=\\\"leftChartHeight\\\"\\n                            [chartType]=\\\"'line'\\\"\\n                            [fontColor]=\\\"'#DDD'\\\"\\n                            [gridColor]=\\\"'#DDD'\\\"\\n                        ></chart-realtime>\\n                    </div>\\n                    \\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px;\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                        <chart \\n                        [chartHeight]=\\\"leftChartHeight\\\"\\n                        [chartData]=\\\"chartData\\\" \\n                        [chartLabels]=\\\"chartLabels\\\" \\n                        [chartType]=\\\"'line'\\\" \\n                        [fontColor]=\\\"'#DDD'\\\"\\n                        [granularity]=\\\"'hour'\\\">\\n                    </chart>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px; \\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"widget widget-stats bg-blue\\\" style=\\\"float:left; width:44%; margin-left: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\" style=\\\"padding-top:0px;\\\">{{ 'ANALYTICS_AUDIENCE.WORD.TODAY' | translate:lang }} {{ 'ANALYTICS_AUDIENCE.SUMMARY.USERS' | translate:lang }}</div>\\n                            <div class=\\\"stats-number\\\" style=\\\"padding-top:0px;\\\" >{{todaysUsers | number}}</div>\\n                        </div>\\n                        <div class=\\\"widget widget-stats bg-black\\\" style=\\\"float:right; width:44%; margin-right: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.TODAY' | translate:lang }} {{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS' | translate:lang }}</div>\\n                            <div class=\\\"stats-number\\\" >{{todaysViews | number}}</div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"widget widget-stats bg-yellow\\\" style=\\\"float:left; width:44%; margin-left: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.YESTERDAY' | translate:lang }} {{ 'ANALYTICS_AUDIENCE.SUMMARY.USERS' | translate:lang }}</div>\\n                            <div class=\\\"stats-number\\\" >{{yesterdayUsers | number}}</div>\\n\\n                        </div>\\n                        <div class=\\\"widget widget-stats bg-blue\\\" style=\\\"float:right; width:44%; margin-right: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.YESTERDAY' | translate:lang }} {{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS' | translate:lang }}</div>\\n                            <div class=\\\"stats-number\\\" >{{yesterdayViews | number}}</div>\\n\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px; height: auto; \\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"widget widget-stats bg-green\\\" style=\\\"float:left; width:44%; margin-left: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS_PER_USER' | translate:lang }} ({{ 'ANALYTICS_AUDIENCE.WORD.LAST' | translate:lang }} 24h)</div>\\n                            <div class=\\\"stats-number\\\" >{{viewsPerUsers24 | number:'1.0-0'}} [s]</div>\\n                        </div>\\n                        <div class=\\\"widget widget-stats bg-orange\\\" style=\\\"float:right; width:44%; margin-right: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.AVG_WATCHING_TIME' | translate:lang }} ({{ 'ANALYTICS_AUDIENCE.WORD.LAST' | translate:lang }} 24h)</div>\\n                            <div class=\\\"stats-number\\\" >{{avgWatchingTime24 | number:'1.0-2'}}</div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"col-md-5\\\">\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 1px 5px; height: 40px;\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 5px;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-md-2\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.ID' | translate:lang }}</h4>\\n                        </div>\\n                        <div class=\\\"col-md-2\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.NAME' | translate:lang }}</h4>\\n                        </div>\\n                        <div class=\\\"col-md-1\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.STREAMS' | translate:lang }}</h4>\\n                        </div>\\n                        <div class=\\\"col-md-3\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.LAST_HOUR' | translate:lang }}</h4>\\n                        </div>\\n                        <div class=\\\"col-md-4\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.LAST_MINUTE' | translate:lang }}</h4>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div *ngFor=\\\"let row of topMediaList; let i = index\\\" class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 5px;\\\" *ngIf=\\\"i < NUMBER_OF_TOP_MATERIAL_CHARTS \\\">\\n                    <div class=\\\"row\\\" >\\n                        <div class=\\\"col-md-2\\\" style=\\\"color: #DDD;\\\">\\n                            {{row.media.material_id}}\\n                        </div>\\n                        <div class=\\\"col-md-2\\\" style=\\\"color: #DDD;\\\">\\n                            {{row.media.title}}\\n                        </div>\\n                        <div class=\\\"col-md-1\\\" style=\\\"color: #DDD;\\\">\\n                            {{row.streams}}\\n                        </div>\\n                        <div class=\\\"col-md-3\\\">\\n                            <chart-realtime\\n                                [chartData]=\\\"selectedMediaMinutesChart[row.media.material_id].data\\\"\\n                                [chartLabels]=\\\"selectedMediaMinutesChart[row.media.material_id].labels\\\"\\n                                [chartHeight]=\\\"topMatChartHeight\\\"\\n                                [chartType]=\\\"'line'\\\"\\n                                [fontColor]=\\\"'#DDD'\\\"\\n                                [gridColor]=\\\"'#DDD'\\\"\\n                                [pointRadius]=\\\"0\\\"\\n                            ></chart-realtime>\\n                        </div>\\n                        <div class=\\\"col-md-4\\\">\\n                            <chart-realtime\\n                                [chartData]=\\\"selectedMediaSecondsChart[row.media.material_id].data\\\"\\n                                [chartLabels]=\\\"selectedMediaSecondsChart[row.media.material_id].labels\\\"\\n                                [chartHeight]=\\\"topMatChartHeight\\\"\\n                                [chartType]=\\\"'line'\\\"\\n                                [fontColor]=\\\"'#DDD'\\\"\\n                                [gridColor]=\\\"'#DDD'\\\"\\n                                [pointRadius]=\\\"0\\\"\\n                            ></chart-realtime>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"col-md-3\\\">\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <chart  *ngIf=\\\"chartDataDevice\\\"\\n                        [chartData]=\\\"chartDataDevice\\\"\\n                        [chartLabels]=\\\"chartLabelsDevice\\\"\\n                        [chartType]=\\\"'doughnut'\\\"\\n                        [fontColor]=\\\"'#DDD'\\\"\\n                        [chartHeight]=\\\"techChartHeight\\\"\\n                        >\\n                    </chart>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <chart  *ngIf=\\\"chartDataBrowser\\\"\\n                        [chartData]=\\\"chartDataBrowser\\\"\\n                        [chartLabels]=\\\"chartLabelsBrowser\\\"\\n                        [chartType]=\\\"'doughnut'\\\"\\n                        [fontColor]=\\\"'#DDD'\\\"\\n                        [chartHeight]=\\\"techChartHeight\\\"\\n\\n                        >\\n                    </chart>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <chart  *ngIf=\\\"chartLabelsOs\\\"\\n                        [chartData]=\\\"chartDataOs\\\"\\n                        [chartLabels]=\\\"chartLabelsOs\\\"\\n                        [chartType]=\\\"'doughnut'\\\"\\n                        [fontColor]=\\\"'#DDD'\\\"\\n                        [chartHeight]=\\\"techChartHeight\\\"\\n\\n                        >\\n                    </chart>\\n                </div>\\n            </div>\\n\\n        </div>\\n\\n    </div>\\n\\n</div>\"\n\n/***/ }),\n\n/***/ 1409:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_INFO.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_INFO.CLIENT_TOKEN.TITLE' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <div class=\\\"client-token\\\"><strong>clientToken:</strong> \\\"{{clientToken}}\\\"</div>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <div class=\\\"note note-secondary\\\">\\n                            <h4>clientToken</h4>\\n                            {{ 'ANALYTICS_INFO.CLIENT_TOKEN.DESC' | translate:lang }}\\n                            {{ 'ANALYTICS_INFO.CLIENT_TOKEN.DOC_LINK_TEXT' | translate:lang }} - <a href=\\\"{{ urlService.playersPluginsDocumentationPage }}\\\" target=\\\"_blank\\\">{{ urlService.playersPluginsDocumentationPage }}</a>\\n                        </div>\\n                    </div>\\n                </div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1410:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(process) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\n\n\nvar _Group = function () {\n\tthis._tweens = {};\n\tthis._tweensAddedDuringUpdate = {};\n};\n\n_Group.prototype = {\n\tgetAll: function () {\n\n\t\treturn Object.keys(this._tweens).map(function (tweenId) {\n\t\t\treturn this._tweens[tweenId];\n\t\t}.bind(this));\n\n\t},\n\n\tremoveAll: function () {\n\n\t\tthis._tweens = {};\n\n\t},\n\n\tadd: function (tween) {\n\n\t\tthis._tweens[tween.getId()] = tween;\n\t\tthis._tweensAddedDuringUpdate[tween.getId()] = tween;\n\n\t},\n\n\tremove: function (tween) {\n\n\t\tdelete this._tweens[tween.getId()];\n\t\tdelete this._tweensAddedDuringUpdate[tween.getId()];\n\n\t},\n\n\tupdate: function (time, preserve) {\n\n\t\tvar tweenIds = Object.keys(this._tweens);\n\n\t\tif (tweenIds.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttime = time !== undefined ? time : TWEEN.now();\n\n\t\t// Tweens are updated in \"batches\". If you add a new tween during an update, then the\n\t\t// new tween will be updated in the next batch.\n\t\t// If you remove a tween during an update, it may or may not be updated. However,\n\t\t// if the removed tween was added during the current batch, then it will not be updated.\n\t\twhile (tweenIds.length > 0) {\n\t\t\tthis._tweensAddedDuringUpdate = {};\n\n\t\t\tfor (var i = 0; i < tweenIds.length; i++) {\n\n\t\t\t\tvar tween = this._tweens[tweenIds[i]];\n\n\t\t\t\tif (tween && tween.update(time) === false) {\n\t\t\t\t\ttween._isPlaying = false;\n\n\t\t\t\t\tif (!preserve) {\n\t\t\t\t\t\tdelete this._tweens[tweenIds[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttweenIds = Object.keys(this._tweensAddedDuringUpdate);\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\nvar TWEEN = new _Group();\n\nTWEEN.Group = _Group;\nTWEEN._nextId = 0;\nTWEEN.nextId = function () {\n\treturn TWEEN._nextId++;\n};\n\n\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\nif (typeof (self) === 'undefined' && typeof (process) !== 'undefined' && process.hrtime) {\n\tTWEEN.now = function () {\n\t\tvar time = process.hrtime();\n\n\t\t// Convert [seconds, nanoseconds] to milliseconds.\n\t\treturn time[0] * 1000 + time[1] / 1000000;\n\t};\n}\n// In a browser, use self.performance.now if it is available.\nelse if (typeof (self) !== 'undefined' &&\n         self.performance !== undefined &&\n\t\t self.performance.now !== undefined) {\n\t// This must be bound, because directly assigning this function\n\t// leads to an invocation exception in Chrome.\n\tTWEEN.now = self.performance.now.bind(self.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n\tTWEEN.now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n\tTWEEN.now = function () {\n\t\treturn new Date().getTime();\n\t};\n}\n\n\nTWEEN.Tween = function (object, group) {\n\tthis._object = object;\n\tthis._valuesStart = {};\n\tthis._valuesEnd = {};\n\tthis._valuesStartRepeat = {};\n\tthis._duration = 1000;\n\tthis._repeat = 0;\n\tthis._repeatDelayTime = undefined;\n\tthis._yoyo = false;\n\tthis._isPlaying = false;\n\tthis._reversed = false;\n\tthis._delayTime = 0;\n\tthis._startTime = null;\n\tthis._easingFunction = TWEEN.Easing.Linear.None;\n\tthis._interpolationFunction = TWEEN.Interpolation.Linear;\n\tthis._chainedTweens = [];\n\tthis._onStartCallback = null;\n\tthis._onStartCallbackFired = false;\n\tthis._onUpdateCallback = null;\n\tthis._onRepeatCallback = null;\n\tthis._onCompleteCallback = null;\n\tthis._onStopCallback = null;\n\tthis._group = group || TWEEN;\n\tthis._id = TWEEN.nextId();\n\n};\n\nTWEEN.Tween.prototype = {\n\tgetId: function () {\n\t\treturn this._id;\n\t},\n\n\tisPlaying: function () {\n\t\treturn this._isPlaying;\n\t},\n\n\tto: function (properties, duration) {\n\n\t\tthis._valuesEnd = properties;\n\n\t\tif (duration !== undefined) {\n\t\t\tthis._duration = duration;\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tduration: function duration(d) {\n\t\tthis._duration = d;\n\t\treturn this;\n\t},\n\n\tstart: function (time) {\n\n\t\tthis._group.add(this);\n\n\t\tthis._isPlaying = true;\n\n\t\tthis._onStartCallbackFired = false;\n\n\t\tthis._startTime = time !== undefined ? typeof time === 'string' ? TWEEN.now() + parseFloat(time) : time : TWEEN.now();\n\t\tthis._startTime += this._delayTime;\n\n\t\tfor (var property in this._valuesEnd) {\n\n\t\t\t// Check if an Array was provided as property value\n\t\t\tif (this._valuesEnd[property] instanceof Array) {\n\n\t\t\t\tif (this._valuesEnd[property].length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Create a local copy of the Array with the start value at the front\n\t\t\t\tthis._valuesEnd[property] = [this._object[property]].concat(this._valuesEnd[property]);\n\n\t\t\t}\n\n\t\t\t// If `to()` specifies a property that doesn't exist in the source object,\n\t\t\t// we should not set that property in the object\n\t\t\tif (this._object[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Save the starting value.\n\t\t\tthis._valuesStart[property] = this._object[property];\n\n\t\t\tif ((this._valuesStart[property] instanceof Array) === false) {\n\t\t\t\tthis._valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n\t\t\t}\n\n\t\t\tthis._valuesStartRepeat[property] = this._valuesStart[property] || 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tif (!this._isPlaying) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._group.remove(this);\n\t\tthis._isPlaying = false;\n\n\t\tif (this._onStopCallback !== null) {\n\t\t\tthis._onStopCallback(this._object);\n\t\t}\n\n\t\tthis.stopChainedTweens();\n\t\treturn this;\n\n\t},\n\n\tend: function () {\n\n\t\tthis.update(Infinity);\n\t\treturn this;\n\n\t},\n\n\tstopChainedTweens: function () {\n\n\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\tthis._chainedTweens[i].stop();\n\t\t}\n\n\t},\n\n\tgroup: function (group) {\n\t\tthis._group = group;\n\t\treturn this;\n\t},\n\n\tdelay: function (amount) {\n\n\t\tthis._delayTime = amount;\n\t\treturn this;\n\n\t},\n\n\trepeat: function (times) {\n\n\t\tthis._repeat = times;\n\t\treturn this;\n\n\t},\n\n\trepeatDelay: function (amount) {\n\n\t\tthis._repeatDelayTime = amount;\n\t\treturn this;\n\n\t},\n\n\tyoyo: function (yoyo) {\n\n\t\tthis._yoyo = yoyo;\n\t\treturn this;\n\n\t},\n\n\teasing: function (easingFunction) {\n\n\t\tthis._easingFunction = easingFunction;\n\t\treturn this;\n\n\t},\n\n\tinterpolation: function (interpolationFunction) {\n\n\t\tthis._interpolationFunction = interpolationFunction;\n\t\treturn this;\n\n\t},\n\n\tchain: function () {\n\n\t\tthis._chainedTweens = arguments;\n\t\treturn this;\n\n\t},\n\n\tonStart: function (callback) {\n\n\t\tthis._onStartCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonUpdate: function (callback) {\n\n\t\tthis._onUpdateCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonRepeat: function onRepeat(callback) {\n\n\t\tthis._onRepeatCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonComplete: function (callback) {\n\n\t\tthis._onCompleteCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonStop: function (callback) {\n\n\t\tthis._onStopCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tupdate: function (time) {\n\n\t\tvar property;\n\t\tvar elapsed;\n\t\tvar value;\n\n\t\tif (time < this._startTime) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._onStartCallbackFired === false) {\n\n\t\t\tif (this._onStartCallback !== null) {\n\t\t\t\tthis._onStartCallback(this._object);\n\t\t\t}\n\n\t\t\tthis._onStartCallbackFired = true;\n\t\t}\n\n\t\telapsed = (time - this._startTime) / this._duration;\n\t\telapsed = (this._duration === 0 || elapsed > 1) ? 1 : elapsed;\n\n\t\tvalue = this._easingFunction(elapsed);\n\n\t\tfor (property in this._valuesEnd) {\n\n\t\t\t// Don't update properties that do not exist in the source object\n\t\t\tif (this._valuesStart[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar start = this._valuesStart[property] || 0;\n\t\t\tvar end = this._valuesEnd[property];\n\n\t\t\tif (end instanceof Array) {\n\n\t\t\t\tthis._object[property] = this._interpolationFunction(end, value);\n\n\t\t\t} else {\n\n\t\t\t\t// Parses relative end values with start as base (e.g.: +10, -3)\n\t\t\t\tif (typeof (end) === 'string') {\n\n\t\t\t\t\tif (end.charAt(0) === '+' || end.charAt(0) === '-') {\n\t\t\t\t\t\tend = start + parseFloat(end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tend = parseFloat(end);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Protect against non numeric properties.\n\t\t\t\tif (typeof (end) === 'number') {\n\t\t\t\t\tthis._object[property] = start + (end - start) * value;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (this._onUpdateCallback !== null) {\n\t\t\tthis._onUpdateCallback(this._object, elapsed);\n\t\t}\n\n\t\tif (elapsed === 1) {\n\n\t\t\tif (this._repeat > 0) {\n\n\t\t\t\tif (isFinite(this._repeat)) {\n\t\t\t\t\tthis._repeat--;\n\t\t\t\t}\n\n\t\t\t\t// Reassign starting values, restart by making startTime = now\n\t\t\t\tfor (property in this._valuesStartRepeat) {\n\n\t\t\t\t\tif (typeof (this._valuesEnd[property]) === 'string') {\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._yoyo) {\n\t\t\t\t\t\tvar tmp = this._valuesStartRepeat[property];\n\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesEnd[property];\n\t\t\t\t\t\tthis._valuesEnd[property] = tmp;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._valuesStart[property] = this._valuesStartRepeat[property];\n\n\t\t\t\t}\n\n\t\t\t\tif (this._yoyo) {\n\t\t\t\t\tthis._reversed = !this._reversed;\n\t\t\t\t}\n\n\t\t\t\tif (this._repeatDelayTime !== undefined) {\n\t\t\t\t\tthis._startTime = time + this._repeatDelayTime;\n\t\t\t\t} else {\n\t\t\t\t\tthis._startTime = time + this._delayTime;\n\t\t\t\t}\n\n\t\t\t\tif (this._onRepeatCallback !== null) {\n\t\t\t\t\tthis._onRepeatCallback(this._object);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\tif (this._onCompleteCallback !== null) {\n\n\t\t\t\t\tthis._onCompleteCallback(this._object);\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\t\t\t// Make the chained tweens start exactly at the time they should,\n\t\t\t\t\t// even if the `update()` method was called way past the duration of the tween\n\t\t\t\t\tthis._chainedTweens[i].start(this._startTime + this._duration);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\n\nTWEEN.Easing = {\n\n\tLinear: {\n\n\t\tNone: function (k) {\n\n\t\t\treturn k;\n\n\t\t}\n\n\t},\n\n\tQuadratic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k * (2 - k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * (--k * (k - 2) - 1);\n\n\t\t}\n\n\t},\n\n\tCubic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tQuartic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn 1 - (--k * k * k * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * ((k -= 2) * k * k * k - 2);\n\n\t\t}\n\n\t},\n\n\tQuintic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tSinusoidal: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.cos(k * Math.PI / 2);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sin(k * Math.PI / 2);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\treturn 0.5 * (1 - Math.cos(Math.PI * k));\n\n\t\t}\n\n\t},\n\n\tExponential: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k === 0 ? 0 : Math.pow(1024, k - 1);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k === 1 ? 1 : 1 - Math.pow(2, - 10 * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * Math.pow(1024, k - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (- Math.pow(2, - 10 * (k - 1)) + 2);\n\n\t\t}\n\n\t},\n\n\tCircular: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.sqrt(1 - k * k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sqrt(1 - (--k * k));\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn - 0.5 * (Math.sqrt(1 - k * k) - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n\n\t\t}\n\n\t},\n\n\tElastic: {\n\n\t\tIn: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tk *= 2;\n\n\t\t\tif (k < 1) {\n\t\t\t\treturn -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\t\t\t}\n\n\t\t\treturn 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;\n\n\t\t}\n\n\t},\n\n\tBack: {\n\n\t\tIn: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn k * k * ((s + 1) * k - s);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn --k * k * ((s + 1) * k + s) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tvar s = 1.70158 * 1.525;\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * (k * k * ((s + 1) * k - s));\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n\n\t\t}\n\n\t},\n\n\tBounce: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - TWEEN.Easing.Bounce.Out(1 - k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k < (1 / 2.75)) {\n\t\t\t\treturn 7.5625 * k * k;\n\t\t\t} else if (k < (2 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n\t\t\t} else if (k < (2.5 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n\t\t\t} else {\n\t\t\t\treturn 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n\t\t\t}\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k < 0.5) {\n\t\t\t\treturn TWEEN.Easing.Bounce.In(k * 2) * 0.5;\n\t\t\t}\n\n\t\t\treturn TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n\n\t\t}\n\n\t}\n\n};\n\nTWEEN.Interpolation = {\n\n\tLinear: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.Linear;\n\n\t\tif (k < 0) {\n\t\t\treturn fn(v[0], v[1], f);\n\t\t}\n\n\t\tif (k > 1) {\n\t\t\treturn fn(v[m], v[m - 1], m - f);\n\t\t}\n\n\t\treturn fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n\n\t},\n\n\tBezier: function (v, k) {\n\n\t\tvar b = 0;\n\t\tvar n = v.length - 1;\n\t\tvar pw = Math.pow;\n\t\tvar bn = TWEEN.Interpolation.Utils.Bernstein;\n\n\t\tfor (var i = 0; i <= n; i++) {\n\t\t\tb += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n\t\t}\n\n\t\treturn b;\n\n\t},\n\n\tCatmullRom: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.CatmullRom;\n\n\t\tif (v[0] === v[m]) {\n\n\t\t\tif (k < 0) {\n\t\t\t\ti = Math.floor(f = m * (1 + k));\n\t\t\t}\n\n\t\t\treturn fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n\n\t\t} else {\n\n\t\t\tif (k < 0) {\n\t\t\t\treturn v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n\t\t\t}\n\n\t\t\tif (k > 1) {\n\t\t\t\treturn v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n\t\t\t}\n\n\t\t\treturn fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n\n\t\t}\n\n\t},\n\n\tUtils: {\n\n\t\tLinear: function (p0, p1, t) {\n\n\t\t\treturn (p1 - p0) * t + p0;\n\n\t\t},\n\n\t\tBernstein: function (n, i) {\n\n\t\t\tvar fc = TWEEN.Interpolation.Utils.Factorial;\n\n\t\t\treturn fc(n) / fc(i) / fc(n - i);\n\n\t\t},\n\n\t\tFactorial: (function () {\n\n\t\t\tvar a = [1];\n\n\t\t\treturn function (n) {\n\n\t\t\t\tvar s = 1;\n\n\t\t\t\tif (a[n]) {\n\t\t\t\t\treturn a[n];\n\t\t\t\t}\n\n\t\t\t\tfor (var i = n; i > 1; i--) {\n\t\t\t\t\ts *= i;\n\t\t\t\t}\n\n\t\t\t\ta[n] = s;\n\t\t\t\treturn s;\n\n\t\t\t};\n\n\t\t})(),\n\n\t\tCatmullRom: function (p0, p1, p2, p3, t) {\n\n\t\t\tvar v0 = (p2 - p0) * 0.5;\n\t\t\tvar v1 = (p3 - p1) * 0.5;\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t * t2;\n\n\t\t\treturn (2 * p1 - 2 * p2 + v0 + v1) * t3 + (- 3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n\n\t\t}\n\n\t}\n\n};\n\n// UMD (Universal Module Definition)\n(function (root) {\n\n\tif (true) {\n\n\t\t// AMD\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn TWEEN;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\t} else if (typeof module !== 'undefined' && typeof exports === 'object') {\n\n\t\t// Node.js\n\t\tmodule.exports = TWEEN;\n\n\t} else if (root !== undefined) {\n\n\t\t// Global variable\n\t\troot.TWEEN = TWEEN;\n\n\t}\n\n})(this);\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1411)))\n\n/***/ }),\n\n/***/ 1411:\n/***/ (function(module, exports) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n\n/***/ 1412:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<ng-content selector=\\\".virtual-dropdown-input\\\"></ng-content>\\n\\n<virtual-scroller [horizontal]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"items\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[style.height.px]=\\\"listHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[compareItems]=\\\"compareItems\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsUpdate)=\\\"updateVieportItems($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsEnd)=\\\"emitScrolledToEnd($event)\\\">\\n\\n\\t<div *ngFor=\\\"let item of viewportItems;trackBy:trackItems;\\\"\\n\\t\\t\\t class=\\\"{{ selector }}-item-con\\\"\\n\\t\\t\\t [ngClass]=\\\"itemNgClass(item)\\\"\\n\\t\\t\\t [style.height.px]=\\\"itemHeigth\\\">\\n\\n\\t\\t<ng-container *ngIf=\\\"itemTemplate;else defaultItemTemplate;\\\">\\n\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"itemTemplate;context:{item:item, select:selectFromTemplate};\\\"></ng-container>\\n\\t\\t</ng-container>\\n\\n\\t\\t<ng-template #defaultItemTemplate>\\n\\t\\t\\t<a (click)=\\\"emitSelected(item)\\\" class=\\\"{{ selector }}-item btn btn-xs\\\" [title]=\\\"item?.label\\\">\\n\\t\\t\\t\\t<i *ngIf=\\\"item?.icon\\\" class=\\\"{{ selector }}-ico fa fa-fw pull-left\\\" [ngClass]=\\\"iconClasses(item)\\\"></i>\\n\\t\\t\\t\\t{{item?.label}}\\n\\t\\t\\t</a>\\n\\t\\t</ng-template>\\n\\n\\t</div>\\n\\n</virtual-scroller>\\n\"\n\n/***/ }),\n\n/***/ 1413:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  position: absolute;\\n  z-index: 99999;\\n  display: block;\\n  min-width: inherit;\\n  max-width: inherit;\\n  background: white;\\n  border: 1px solid lightgray;\\n  border-radius: 0 0 3px 3px;\\n  color: inherit; }\\n  :host virtual-scroller {\\n    list-style-type: none;\\n    padding: 0;\\n    width: 100%;\\n    min-width: 150px;\\n    max-height: 200px;\\n    overflow-x: hidden;\\n    overflow-y: auto;\\n    color: inherit;\\n    margin-bottom: 0; }\\n  :host virtual-scroller::-webkit-scrollbar {\\n      width: 8px;\\n      height: 8px;\\n      background: none; }\\n  :host virtual-scroller::-webkit-scrollbar-track {\\n      -webkit-box-shadow: none;\\n              box-shadow: none;\\n      background: #EEEEEE; }\\n  :host virtual-scroller::-webkit-scrollbar-thumb:window-inactive {\\n      background: #DDDDDD; }\\n  :host virtual-scroller::-webkit-scrollbar-thumb {\\n      background: #CCCCCC; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con {\\n      cursor: pointer;\\n      color: inherit; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con ::ng-deep .virtual-dropdown-popup-item {\\n        color: inherit;\\n        padding: 5px 10px;\\n        display: inline-block;\\n        width: 100%;\\n        text-decoration: none;\\n        border-radius: 0;\\n        -webkit-box-shadow: none;\\n                box-shadow: none;\\n        background-color: transparent; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con ::ng-deep .virtual-dropdown-popup-item i {\\n          margin-left: 5px; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con ::ng-deep .virtual-dropdown-popup-item span {\\n          margin: auto;\\n          text-decoration: none;\\n          color: inherit; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con:hover ::ng-deep .virtual-dropdown-popup-item {\\n        background-color: #EFEFEF; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.pre-selected ::ng-deep .virtual-dropdown-popup-item {\\n        background-color: #EFEFEF; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.pre-selected ::ng-deep .virtual-dropdown-popup-item::before {\\n          pointer-events: none;\\n          content: '>';\\n          position: absolute;\\n          left: 3px;\\n          opacity: 0.5; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.selected ::ng-deep .virtual-dropdown-popup-item {\\n        background: #335eea;\\n        color: #ffffff;\\n        pointer-events: none;\\n        cursor: not-allowed; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.separator-below {\\n        border-bottom: solid 1px #d3d3d3; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.disabled {\\n        opacity: 0.64;\\n        pointer-events: none;\\n        cursor: not-allowed; }\\n\"\n\n/***/ }),\n\n/***/ 1414:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- TRIGGER -->\\n<button class=\\\"{{ selector }}-trigger btn btn-sm\\\"\\n\\t\\t\\t\\t[disabled]=\\\"disabled\\\"\\n\\t\\t\\t\\t[style.background-color]=\\\"selectedItem?.color\\\"\\n\\t\\t\\t\\t[style.border-color]=\\\"selectedItem?.color\\\"\\n\\t\\t\\t\\t[style.color]=\\\"selectedItem?.textColor\\\"\\n\\t\\t\\t\\t(click)=\\\"toggle()\\\">\\n\\t\\t<i *ngIf=\\\"selectedItem?.icon\\\" class=\\\"{{ selector }}-ico fa fa-fw\\\" [ngClass]=\\\"iconNgClass(selectedItem)\\\"></i>\\n\\t\\t<ng-content selector=\\\".trigger-label-prefix\\\"></ng-content>\\n\\t\\t{{ selectedItem?.label }}\\n\\t\\t<i *ngIf=\\\"!disabled\\\" class=\\\"{{ selector }}-dir-ico fa\\\" [class.fa-sort-desc]=\\\"active\\\" [class.fa-sort-asc]=\\\"!active\\\"></i>\\n</button>\\n\\n<!-- POPUP -->\\n<virtual-dropdown-popup *ngIf=\\\"!disabled && active\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"items|virtualDropdownRemoveSelected:selectedItem:!removeSelectedFromList|virtualDropdownFilter:filterByKey:filterValue\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemHeigth]=\\\"itemHeigth\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemTemplate]=\\\"itemTemplate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[selectedItem]=\\\"selectedItem\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"select($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(scrolledToEnd)=\\\"emitScrolledToEnd($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"debug\\\">\\n\\t<!-- |dropdownListPipe:selectedItem -->\\n\\t<!-- SEARCH -->\\n\\t<input *ngIf=\\\"withSearch\\\"\\n\\t\\t\\t\\t type=\\\"search\\\"\\n\\t\\t\\t\\t class=\\\"form-control virtual-dropdown-input {{ selector }}-search-input\\\"\\n\\t\\t\\t\\t [placeholder]=\\\"searchPlaceholder\\\"\\n\\t\\t\\t\\t [value]=\\\"searchValue\\\"\\n\\t\\t\\t\\t (keyup)=\\\"emitSearchValueChange($event)\\\"\\n\\t\\t\\t\\t (change)=\\\"emitSearchValueChange($event)\\\" />\\n\\n\\t<!-- FILTER -->\\n\\t<input *ngIf=\\\"withFilter\\\"\\n\\t\\t\\t\\t type=\\\"search\\\"\\n\\t\\t\\t\\t class=\\\"form-control virtual-dropdown-input {{ selector }}-filter-input\\\"\\n\\t\\t\\t\\t [placeholder]=\\\"filterPlaceholder\\\"\\n\\t\\t\\t\\t [value]=\\\"filterValue\\\"\\n\\t\\t\\t\\t (keyup)=\\\"handleFilterValueChange($event)\\\"\\n\\t\\t\\t\\t (change)=\\\"handleFilterValueChange($event)\\\" />\\n\\n</virtual-dropdown-popup>\\n\"\n\n/***/ }),\n\n/***/ 1415:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  position: relative;\\n  display: inline-block;\\n  vertical-align: middle;\\n  text-align: center; }\\n  :host .virtual-dropdown-trigger {\\n    position: relative;\\n    width: 100%;\\n    min-width: 150px;\\n    margin-left: 0 !important;\\n    margin-right: 0 !important;\\n    text-transform: none;\\n    background: none;\\n    border-color: lightgray !important;\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n    overflow: hidden;\\n    text-overflow: ellipsis; }\\n  :host .virtual-dropdown-dir-ico {\\n    position: absolute;\\n    top: 50%;\\n    margin-left: 8px;\\n    margin-top: -3px;\\n    color: lightgray; }\\n  :host .virtual-dropdown-popup .virtual-dropdown-input {\\n    width: 100%;\\n    min-width: 150px;\\n    border-radius: 0;\\n    border: 1px solid lightgray;\\n    margin: -1px;\\n    color: inherit; }\\n  :host.small .virtual-dropdown-trigger {\\n    min-width: 75px; }\\n  :host.small .virtual-dropdown-trigger span {\\n      position: relative;\\n      left: -5px; }\\n  :host.small .virtual-dropdown-dir-ico {\\n    margin-left: 2px; }\\n  :host.disabled {\\n    opacity: 0.64; }\\n  :host.active .virtual-dropdown-trigger {\\n    -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25);\\n            box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25); }\\n  :host.active .virtual-dropdown-dir-ico {\\n    margin-top: -0.7em; }\\n  :host.active.up .virtual-dropdown-trigger {\\n    border-top-color: transparent !important;\\n    border-top-left-radius: 0;\\n    border-top-right-radius: 0; }\\n  :host.active.down .virtual-dropdown-trigger {\\n    border-bottom-color: transparent !important;\\n    border-bottom-left-radius: 0;\\n    border-bottom-right-radius: 0; }\\n\"\n\n/***/ }),\n\n/***/ 1416:\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n\n/***/ 1417:\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n\n/***/ 1418:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_ST_RAPORT.TITLE'|translate:lang }}</h1>\\n\\n<!-- top panel(s) -->\\n<div class=\\\"panel-row\\\">\\n\\n\\t<!-- CRITERIA -->\\n\\t<div class=\\\"panel criteria panel-inverse\\\">\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ST_RAPORT.HEADER.1'|translate:lang }}</h4>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t<!-- type & daterange -->\\n\\t\\t\\t\\t<div class=\\\"ctrl-block\\\">\\n\\t\\t\\t\\t\\t<!-- type -->\\n\\t\\t\\t\\t\\t<div class=\\\"ctrl-con type\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.REPORT_TYPE'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t<report-type-picker size=\\\"sm\\\" [enable]=\\\"true\\\" [reportTypes]=\\\"REPORT_TYPES\\\" [activeType]=\\\"activeReportType\\\" (reportTypeChanged)=\\\"onReportTypeChange($event)\\\"></report-type-picker>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"false\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<!-- daterange -->\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"dateRange\\\" class=\\\"ctrl-con daterange\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.DATE_RANGE_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t<date-range-picker size=\\\"sm\\\" showIcon=\\\"none\\\" width=\\\"200px\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [options]=\\\"{opens: 'right', startDate:dateRange.startDate, endDate:dateRange.endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"false\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- geolocation -->\\n\\t\\t\\t\\t<div class=\\\"ctrl-block\\\">\\n\\t\\t\\t\\t\\t<!-- country -->\\n\\t\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.disabled]=\\\"!isCountrySelectorVisible\\\" [attr.title]=\\\"'select country'\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.COUNTRY_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'COUNTRY'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"countries$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"selectedCountryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[disabled]=\\\"!isCountrySelectorVisible\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"onSelectCountry($event)\\\">\\n\\t\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"isLoadingCountry;else resetCountryTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t<ng-template #resetCountryTmpl>\\n\\t\\t\\t\\t\\t\\t\\t\\t<button *ngIf=\\\"!!selectedCountryCode\\\" (click)=\\\"onResetCountry()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<!-- region / city -->\\n\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"activeReportType!=REPORT_TYPE_GEO\\\">\\n\\t\\t\\t\\t\\t\\t<!-- region -->\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.disabled]=\\\"!isRegionSelectorVisible\\\" [attr.title]=\\\"!isRegionSelectorVisible?('ANALYTICS_ST_RAPORT.WORD.REGION_DISABLED'|translate:lang):null\\\">\\n\\t\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.REGION_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'REGION'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"regions$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"selectedRegion\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[disabled]=\\\"!isRegionSelectorVisible\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"onSelectRegion($event)\\\">\\n\\t\\t\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"isLoadingRegion;else resetRegionTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-template #resetRegionTmpl>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<button *ngIf=\\\"!!selectedRegion\\\" (click)=\\\"onResetRegion()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t<!-- city -->\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.disabled]=\\\"!isCitySelectorVisible\\\" [attr.title]=\\\"!isCitySelectorVisible?('ANALYTICS_ST_RAPORT.WORD.CITY_DISABLED'|translate:lang):null\\\">\\n\\t\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.CITY_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'CITY'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"selectedCity\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"cities$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[disabled]=\\\"!isCitySelectorVisible\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"onSelectCity($event)\\\">\\n\\t\\t\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"isLoadingCity;else resetCityTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-template #resetCityTmpl>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<button *ngIf=\\\"!!selectedCity\\\" (click)=\\\"onResetCity()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</ng-container>\\n\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- prefixed tags -->\\n\\t\\t\\t\\t<div *ngIf=\\\"prefixedTagsService.hasData; else smallSpinnerCon;\\\" class=\\\"ctrl-block\\\">\\n\\t\\t\\t\\t\\t<ng-container *ngFor=\\\"let prefix of prefixedTagsService.prefixes();\\\">\\n\\t\\t\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"prefixedTagTmpl;context:{name: prefix, data:prefixedTagsService.value(prefix)}\\\"></ng-container>\\n\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t<ng-template #prefixedTagTmpl let-name=\\\"name\\\" let-data=\\\"data\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.active]=\\\"!!data.selected?.value\\\">\\n\\t\\t\\t\\t\\t\\t\\t<label>{{ name|camelCaseToSpace|lowercase|capitalizeFirst }}</label>\\n\\t\\t\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"data.selected?.value\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"data.$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withSearch]=\\\"data.total > 50\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[searchValue]=\\\"data.search.text\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(searchValueChange)=\\\"prefixedSearch(data, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(scrolledToEnd)=\\\"prefixedScrollEnd(data, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"prefixedTagSelect(data, $event)\\\">\\n\\t\\t\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"data.loading;else resetPrefixedTagTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-template #resetPrefixedTagTmpl>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<button *ngIf=\\\"!!data.selected?.value\\\" (click)=\\\"prefixedTagReset(data)\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- tags -->\\n\\t\\t\\t\\t<div *ngIf=\\\"activeReportType != REPORT_TYPE_TAGS\\\" class=\\\"ctrl-block\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"ctrl-con tags\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.TAG_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t<tag-input theme=\\\"ngx-chips-bradmax-theme\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t modelAsStrings=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'ANALYTICS_TAG_SERVICE.PLACEHOLDER'|translate:lang\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [secondaryPlaceholder]=\\\"'ANALYTICS_TAG_SERVICE.INITIAL_PLACEHOLDER'|translate:lang\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (onAdd)=\\\"onTagAdd($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [onAdding]=\\\"existingTagSelector.onTagAdding\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (onRemove)=\\\"onTagRemove($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"existingTagSelector.selectedTagsList\\\">\\n\\t\\t\\t\\t\\t\\t\\t<tag-input-dropdown [autocompleteObservable]=\\\"existingTagSelector.onTagSearch\\\"></tag-input-dropdown>\\n\\t\\t\\t\\t\\t\\t</tag-input>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"isSearchingTags\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!--tmpl:smallSpinnerCon -->\\n\\t\\t\\t\\t<ng-template #smallSpinnerCon>\\n\\t\\t\\t\\t\\t<div class=\\\"spinner-con\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"spinner-small\\\"></div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\n\\t<!-- STATS -->\\n\\t<div class=\\\"panel stats\\\">\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<!-- class=\\\"row\\\" -->\\n\\t\\t\\t<ng-container *ngIf=\\\"raportItems; else noteBlock\\\">\\n\\t\\t\\t\\t<!-- class=\\\"col-lg-12 col-md-4\\\" -->\\n\\t\\t\\t\\t<ng-container *ngFor=\\\"let raportItem of raportItems;\\\">\\n\\t\\t\\t\\t\\t<div [ngClass]=\\\"raportItem.color\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i [ngClass]=\\\"raportItem.icon\\\"></i></div>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ raportItem.title }}</div>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\">{{ (!!raportItem.value?raportItem.value:0) | number:'1.0-2' }}</div>\\n\\t\\t\\t\\t\\t\\t<!-- <div class=\\\"stats-desc\\\">{{ raportItem.desc }}</div> -->\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t</ng-container>\\n\\n\\t\\t\\t<ng-template #noteBlock>\\n\\t\\t\\t\\t<div class=\\\"note note-secondary\\\">\\n\\t\\t\\t\\t\\t<h4> {{'ANALYTICS_ST_RAPORT.INFO.HEADER'|translate:lang }}</h4>{{'ANALYTICS_ST_RAPORT.INFO.NOTE'|translate:lang }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n\\n</div>\\n\\n<!-- bottom panel(s) -->\\n<div class=\\\"panel-row\\\">\\n\\n\\t<!-- chart panel -->\\n\\t<div *ngIf=\\\"chartUsersViewsHistory && (activeReportType === REPORT_TYPE_REPORT || activeReportType === REPORT_TYPE_TAGS)\\\" class=\\\"panel chart panel-inverse\\\">\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<div class=\\\"panel-title\\\">\\n\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white m-r-5\\\" type=\\\"button\\\" (click)=\\\"exportCsv()\\\"><i class=\\\"fa fa-download\\\"></i>CSV</button>\\n\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"activeReportType === REPORT_TYPE_REPORT\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_AND_USERS_HISTORY'|translate:lang }}</ng-container>\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"activeReportType === REPORT_TYPE_TAGS\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.TAGS'|translate:lang }}</ng-container>\\n\\n\\t\\t\\t\\t<chart-granularity size=\\\"sm\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [types]=\\\"GRANULARITY_TYPES\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [activeType]=\\\"activeGranularity\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (onTypeChange)=\\\"onGranularityChange($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t #granularity>\\n\\t\\t\\t\\t</chart-granularity>\\n\\t\\t\\t</div>\\n\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<chart [chartType]=\\\"'lineTime'\\\"\\n\\t\\t\\t\\t\\t\\t [chartData]=\\\"chartUsersViewsHistory\\\"\\n\\t\\t\\t\\t\\t\\t [chartLabels]=\\\"chartLabelsReport\\\"\\n\\t\\t\\t\\t\\t\\t [startDate]=\\\"dateRange.startDate\\\"\\n\\t\\t\\t\\t\\t\\t [endDate]=\\\"dateRange.endDate\\\"\\n\\t\\t\\t\\t\\t\\t [granularity]=\\\"activeGranularity\\\">\\n\\t\\t\\t</chart>\\n\\n\\n\\n\\t\\t\\t<ng-container *ngIf=\\\"activeReportType === REPORT_TYPE_TAGS\\\">\\n\\n\\t\\t\\t\\t<div *ngIf=\\\"tagsDataTable == null || tagsDataTable?.length == 0; else tagsTable;\\\" style=\\\"text-align:center;line-height:100px;font-size:16px;\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.NO_DATA_FOR_TAGS_LIST'|translate:lang }}</div>\\n\\n\\t\\t\\t\\t<ng-template #tagsTable>\\n\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered analytics-geo-table m-t-30\\\">\\n\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>#</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_ST_RAPORT.WORD.TAG'|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_ST_RAPORT.WORD.VIEWS'|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngFor=\\\"let rec of tagsDataTable; let i = index\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngIf=\\\"i >= (PAGER.page-1) * PAGER.page_size && i < PAGER.page * PAGER.page_size\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.position}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.tag}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t<pager [page]=\\\"PAGER.page\\\" [pageSize]=\\\"PAGER.page_size\\\" [totalItems]=\\\"PAGER.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</ng-container>\\n\\n\\n\\t\\t</div>\\n\\n\\t</div>\\n\\n\\t<!-- geolocation panels-->\\n\\t<ng-container *ngIf=\\\"activeReportType === REPORT_TYPE_GEO\\\">\\n\\t\\t<div class=\\\"panel geolocation panel-inverse \\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">\\n\\t\\t\\t\\t\\t{{'ANALYTICS_ST_RAPORT.SUBTITLES.MAP_VIEWS'|translate:lang }}\\n\\t\\t\\t\\t\\t<geo-picker *ngIf=\\\"isRegionSelectorVisible\\\" size=\\\"sm\\\" [enable]=\\\"true\\\" [granularityTypes]=\\\"GEO_GRANULARITY_TYPES\\\" [activeType]=\\\"activeGeoType\\\" (geoTypeChanged)=\\\"onGeoTypeChanged($event)\\\"></geo-picker>\\n\\t\\t\\t\\t</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"analytics-geo-map\\\">\\n\\t\\t\\t\\t\\t<google-chart [data]=\\\"mapChartData\\\" (chartSelect)=\\\"onMapRegionClick($event)\\\"></google-chart>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"panel geolocation panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.DETAILS_GEOLOCATION'|translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered analytics-geo-table\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t<td>#</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ ('ANALYTICS_GEO.WORD.' + (!!selectedCountryCode ? 'REGION' : 'COUNTRY'))|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS'|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.USERS'|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<ng-container *ngFor=\\\"let rec of geoDataTable; let i = index;\\\">\\n\\t\\t\\t\\t\\t\\t\\t<tr *ngIf=\\\"i >= (PAGER.page - 1) * PAGER.page_size && i < PAGER.page * PAGER.page_size\\\" [ngClass]=\\\"{'clickable': (selectedCountryCode===null)}\\\" (click)=\\\"onCountryTableRowClick(rec)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ i+1 }}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td><span [ngClass]=\\\"rec.flag\\\"></span> {{ rec.label }}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ rec.views }}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ rec.users }}</td>\\n\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<pager [page]=\\\"PAGER.page\\\" [pageSize]=\\\"PAGER.page_size\\\" [totalItems]=\\\"PAGER.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</ng-container>\\n\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1419:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  /* .date-range-ctrl {\\n\\t\\toutline: 10px dashed orangered;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-wrap: wrap;\\n\\t\\tflex-direction: row;\\n\\t\\tjustify-content: space-between;\\n\\t\\t// max-width: 650px;\\n\\n\\t\\tlabel {\\n\\t\\t\\tmin-width: 150px;\\n\\t\\t}\\n\\n\\t\\t.date-range-inputs {\\n\\t\\t\\tflex: 1;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-wrap: nowrap;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\t// justify-content: space-between;\\n\\t\\t\\talign-items: flex-start;\\n\\n\\t\\t\\tchart-granularity,\\n\\t\\t\\tdate-range-picker {\\n\\t\\t\\t\\tmargin-bottom: 8px;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchart-granularity {\\n\\t\\t\\t\\t::ng-deep {\\n\\t\\t\\t\\t\\t.btn-group {\\n\\t\\t\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\t\\t\\tflex-direction: row;\\n\\t\\t\\t\\t\\t\\tflex-wrap: nowrap;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n*/ }\\n  :host .panel-row {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -ms-flex-wrap: wrap;\\n        flex-wrap: wrap;\\n    margin: 0 -6px; }\\n  :host .panel-row .panel {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column;\\n      margin: 6px;\\n      max-width: 100%; }\\n  :host .panel-row .panel .panel-heading {\\n        max-width: 100%; }\\n  :host .panel-row .panel .panel-body {\\n        max-width: 100%; }\\n  :host .panel-row .panel .table-loader {\\n        height: 330px;\\n        position: relative; }\\n  :host .panel-row .panel .spinner-con {\\n        position: relative; }\\n  :host .panel-row .panel.criteria {\\n        -webkit-box-flex: 3;\\n            -ms-flex: 3;\\n                flex: 3; }\\n  :host .panel-row .panel.criteria .ctrl-block {\\n          -webkit-box-flex: 1;\\n              -ms-flex: 1;\\n                  flex: 1;\\n          display: -webkit-box !important;\\n          display: -ms-flexbox !important;\\n          display: flex !important;\\n          -ms-flex-wrap: wrap;\\n              flex-wrap: wrap; }\\n  :host .panel-row .panel.criteria .ctrl-con {\\n          display: -webkit-box;\\n          display: -ms-flexbox;\\n          display: flex;\\n          -webkit-box-align: center;\\n              -ms-flex-align: center;\\n                  align-items: center;\\n          max-width: 450px;\\n          padding: 4px; }\\n  :host .panel-row .panel.criteria .ctrl-con.tags {\\n            min-width: unset;\\n            max-width: unset; }\\n  :host .panel-row .panel.criteria .ctrl-con label {\\n            min-width: 100px;\\n            max-width: 100px;\\n            font-size: 0.75em;\\n            text-align: end;\\n            padding-left: 4px;\\n            padding-right: 6px;\\n            margin: 0; }\\n  :host .panel-row .panel.criteria .ctrl-con label::after {\\n              content: \\\":\\\"; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep date-range-picker {\\n            -webkit-box-flex: 1;\\n                -ms-flex: 1;\\n                    flex: 1;\\n            margin: 0;\\n            min-width: 150px;\\n            max-width: 150px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep date-range-picker .form-control {\\n              text-align: center; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep virtual-dropdown {\\n            -webkit-box-flex: 1;\\n                -ms-flex: 1;\\n                    flex: 1;\\n            margin: 0;\\n            min-width: 150px;\\n            max-width: 150px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep virtual-dropdown-trigger {\\n              border-color: lightgray !important; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep chart-granularity {\\n            -webkit-box-flex: 1;\\n                -ms-flex: 1;\\n                    flex: 1;\\n            margin: 0;\\n            min-width: 150px;\\n            max-width: 150px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep chart-granularity .btn-group {\\n              display: -webkit-box;\\n              display: -ms-flexbox;\\n              display: flex;\\n              -webkit-box-orient: horizontal;\\n              -webkit-box-direction: normal;\\n                  -ms-flex-direction: row;\\n                      flex-direction: row;\\n              -ms-flex-wrap: nowrap;\\n                  flex-wrap: nowrap;\\n              -webkit-box-pack: justify;\\n                  -ms-flex-pack: justify;\\n                      justify-content: space-between; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep chart-granularity .btn-group .btn {\\n                padding-left: 4px;\\n                padding-right: 4px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input {\\n            font-size: 0.75em; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag-input-form form input.ng2-tag-input__text-input {\\n              height: 30px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag {\\n              border-color: #335eea !important;\\n              background: #335eea !important;\\n              color: #fff !important;\\n              border-radius: 3px;\\n              height: 30px;\\n              line-height: 26px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon {\\n                color: rgba(255, 255, 255, 0.64) !important; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon svg {\\n                  height: 26px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon svg path {\\n                    fill: currentColor !important; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon:hover {\\n                  -webkit-transform: none !important;\\n                          transform: none !important;\\n                  color: #fff !important; }\\n  :host .panel-row .panel.criteria .ctrl-con .ctrl-addon {\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-align: center;\\n                -ms-flex-align: center;\\n                    align-items: center;\\n            -webkit-box-pack: center;\\n                -ms-flex-pack: center;\\n                    justify-content: center;\\n            min-width: 24px;\\n            max-width: 24px;\\n            min-height: 24px;\\n            max-height: 24px; }\\n  :host .panel-row .panel.criteria .ctrl-con .ctrl-addon .btn {\\n              background: transparent; }\\n  :host .panel-row .panel.criteria .ctrl-con .ctrl-addon .spinner-con .spinner-small {\\n              width: 16px;\\n              height: 16px;\\n              margin: -8px 0 0 -8px; }\\n  :host .panel-row .panel.criteria .ctrl-con.disabled {\\n            cursor: not-allowed; }\\n  :host .panel-row .panel.criteria .ctrl-con.disabled label {\\n              opacity: 0.64; }\\n  :host .panel-row .panel.criteria .ctrl-con.disabled * {\\n              pointer-events: none; }\\n  :host .panel-row .panel.criteria .ctrl-con.active ::ng-deep virtual-dropdown .virtual-dropdown-trigger {\\n            border-color: #335eea !important;\\n            background: #335eea !important;\\n            color: #fff !important; }\\n  :host .panel-row .panel.stats {\\n        -webkit-box-flex: 1;\\n            -ms-flex: 1;\\n                flex: 1;\\n        background-color: transparent;\\n        border-color: transparent;\\n        border-radius: 3px;\\n        overflow: hidden; }\\n  :host .panel-row .panel.stats .panel-body {\\n          -webkit-box-flex: 1;\\n              -ms-flex: 1;\\n                  flex: 1;\\n          display: -webkit-box;\\n          display: -ms-flexbox;\\n          display: flex;\\n          -webkit-box-orient: vertical;\\n          -webkit-box-direction: normal;\\n              -ms-flex-direction: column;\\n                  flex-direction: column;\\n          -ms-flex-wrap: wrap;\\n              flex-wrap: wrap;\\n          padding: 0; }\\n  :host .panel-row .panel.stats .panel-body .widget {\\n            -webkit-box-flex: 1;\\n                -ms-flex: 1;\\n                    flex: 1;\\n            margin-bottom: 0;\\n            border-radius: 0; }\\n  :host .panel-row .panel.chart .panel-title {\\n        position: relative; }\\n  :host .panel-row .panel.chart .panel-title ::ng-deep chart-granularity {\\n          position: absolute;\\n          right: 0;\\n          top: 0;\\n          bottom: 0;\\n          height: 30px;\\n          margin: auto; }\\n  :host .panel-row .panel.chart .panel-title ::ng-deep chart-granularity .btn {\\n            margin: 0; }\\n  :host .panel-row .panel.geolocation .panel-title {\\n        position: relative; }\\n  :host .panel-row .panel.geolocation .panel-title ::ng-deep geo-picker {\\n          position: absolute;\\n          right: 0;\\n          top: 0;\\n          bottom: 0;\\n          height: 30px;\\n          margin: auto; }\\n  :host .panel-row .panel.geolocation .panel-title ::ng-deep geo-picker .btn {\\n            margin: 0; }\\n  :host .analytics-geo-table .clickable {\\n    cursor: pointer; }\\n\"\n\n/***/ }),\n\n/***/ 1420:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_ST_RAPORT.TITLE' | translate:lang }}<a *ngIf=\\\"isBetaMode\\\" class=\\\"btn btn-xs\\\" [routerLink]=\\\"['.', 'beta']\\\">&beta;</a></h1>\\n\\n<div class=\\\"row m-b-10\\\">\\n    <report-type-picker\\n        size=\\\"lg\\\" class=\\\"m-l-10\\\"\\n        [enable] = \\\"true\\\"\\n        [reportTypes]=\\\"reportTypes\\\"\\n        [activeType]=\\\"activeReportType\\\"\\n        (reportTypeChanged)=\\\"onReportTypeChange($event)\\\"\\n    >\\n    </report-type-picker>\\n</div>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-7\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\"> {{'ANALYTICS_ST_RAPORT.HEADER.1' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n\\n                    <div class=\\\"report-criteria col-md-12 m-b-30\\\">\\n                        <div class=\\\"form-group row m-b-10\\\">\\n                            <label class=\\\"col-form-label col-md-3\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.DATE_RANGE_SELECTION' | translate:lang }}</label>\\n                            <div class=\\\"m-r-10\\\">\\n                              <date-range-picker class=\\\"m-l-10 pull-right\\\"\\n                                  size=\\\"sm\\\"\\n                                  showIcon=\\\"right\\\"\\n                                  [enable]=\\\"true\\\"\\n                                  [options]=\\\"{startDate:dateRange.startDate, endDate:dateRange.endDate}\\\"\\n                                  (selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n                              </date-range-picker></div>\\n                              <div class=\\\"col-md-5\\\">\\n\\n                              <chart-granularity *ngIf=\\\"activeReportType!='geolocation'\\\" #granularity size=\\\"sm\\\"\\n                                [types]=\\\"granularityTypes\\\"\\n                                [activeType]=\\\"activeGranularity\\\"\\n                                (onTypeChange)=\\\"onGranularityChange($event)\\\">\\n                              </chart-granularity>\\n                            </div>\\n\\n                        </div>\\n                        <div class=\\\"form-group row m-b-10\\\">\\n                            <label class=\\\"col-form-label col-md-3\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.GEO_SELECTION' | translate:lang }}</label>\\n                            <div class=\\\"col-md-9\\\" >\\n                              <div *ngIf=\\\"countriesList; else smallSpinnerBlock;\\\" >\\n                                <dropdown style=\\\"vertical-align: top; margin-top: 2;\\\" class=\\\"m-r-10 m-b-10\\\" [disabled]=\\\"!isCountrySelectorVisible\\\" [hidden]=\\\"!isCountrySelectorVisible\\\" [model]=\\\"countriesList\\\" [value]=\\\"selectedCountry\\\" (onSelect)=\\\"onSelectCountry($event)\\\" ></dropdown>\\n                                <span *ngIf=\\\"activeReportType!='geolocation'; else GEOBLOCK;\\\">\\n                                    <dropdown class=\\\"m-r-10 m-b-10\\\" [disabled]=\\\"!isRegionSelectorVisible\\\" [hidden]=\\\"!isRegionSelectorVisible\\\" [model]=\\\"regionsList\\\" (onSelect)=\\\"onSelectRegion($event)\\\" ></dropdown>\\n                                    <dropdown class=\\\"m-r-10 m-b-10\\\" [disabled]=\\\"!isCitySelectorVisible\\\" [hidden]=\\\"!isCitySelectorVisible\\\" [model]=\\\"citiesList\\\" (onSelect)=\\\"onSelectCity($event)\\\"></dropdown>\\n                                </span>\\n                                <ng-template #GEOBLOCK>\\n                                    <!---->\\n                                    <geo-picker\\n                                        [hidden]=\\\"!isRegionSelectorVisible\\\"\\n                                        size=\\\"sm\\\" class=\\\"m-l-10\\\"\\n                                        [enable] = \\\"true\\\"\\n                                        [granularityTypes]=\\\"geoGranularityTypes\\\"\\n                                        [activeType]=\\\"activeGeoType\\\"\\n                                        (geoTypeChanged)=\\\"onGeoTypeChanged($event)\\\"\\n                                    > </geo-picker>\\n                                </ng-template>\\n                              </div>\\n                              <ng-template #smallSpinnerBlock>\\n                                <span class=\\\"spinner-small\\\"></span>\\n                              </ng-template>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"activeReportType!='tags'\\\" class=\\\"form-group row\\\" style=\\\"margin-bottom:10px;\\\" >\\n                            <label class=\\\"col-form-label col-md-3\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.TAG_SELECTION' | translate:lang }}</label>\\n                            <div class=\\\"col-md-9\\\">\\n                              <tag-input class=\\\"m-l-0\\\"\\n                                    [(ngModel)] = \\\"existingTagSelector.selectedTagsList\\\"\\n                                    modelAsStrings=\\\"true\\\"\\n                                    (onAdd)=\\\"onTagAdd($event)\\\"\\n                                    [onAdding]=\\\"existingTagSelector.onTagAdding\\\"\\n                                    (onRemove)=\\\"onTagRemove($event)\\\"\\n                                    theme=\\\"ngx-chips-bradmax-theme\\\"\\n                                    placeholder=\\\"{{ 'ANALYTICS_TAG_SERVICE.PLACEHOLDER' | translate:lang }}\\\"\\n                                    secondaryPlaceholder=\\\"{{ 'ANALYTICS_TAG_SERVICE.INITIAL_PLACEHOLDER' | translate:lang }}\\\">\\n                                <tag-input-dropdown [autocompleteObservable]=\\\"existingTagSelector.onTagSearch\\\"></tag-input-dropdown>\\n                              </tag-input>\\n                            </div>\\n                        </div>\\n                        <!-- \\n                        <div class=\\\"form-group row m-b-10\\\">\\n                            <label class=\\\"col-form-label col-md-3\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.DEMOGRAPHY_SELECTION' | translate:lang }}</label>\\n                            <div class=\\\"col-md-9 form-check form-check-inline\\\">\\n                               <div class=\\\"row\\\" >\\n                                <div *ngIf=\\\"activeReportType!='gender'\\\" class=\\\"col-md-12\\\">\\n                                   <span class=\\\"m-r-10 m-b-10\\\" style=\\\"display:inline-block;position:relative;vertical-align: middle;width:60px;line-height: 30px;\\\">\\n                                      {{ 'ANALYTICS_ST_RAPORT.WORD.GENDER_SELECTION' | translate:lang }}\\n                                   </span>\\n                                   <dropdown class=\\\"m-r-10 m-b-10\\\" [model]=\\\"demographySexList\\\" [value]=\\\"selectedSex\\\" (onSelect)=\\\"onDropdownSelectSex($event)\\\"></dropdown>\\n                                </div>\\n                               </div>\\n                               <div *ngIf=\\\"activeReportType!='age'\\\" class=\\\"row\\\">\\n                                   <div class=\\\"col-md-12 demography-age-selector\\\">\\n                                     <span class=\\\"m-r-10 m-b-10\\\" style=\\\"width:60px;display:inline-block;position:relative;vertical-align: middle;line-height: 30px;\\\">\\n                                      {{ 'ANALYTICS_ST_RAPORT.WORD.AGE_RANGE_SELECTION' | translate:lang }}\\n                                     </span>\\n                                     <dropdown class=\\\"m-r-10 m-b-10\\\" [model]=\\\"demographyAgeFrom\\\" [value]=\\\"selectedAgeFrom\\\" (onSelect)=\\\"onDropdownSelectAgeFrom($event)\\\" ></dropdown>\\n                                     <dropdown class=\\\"m-r-10 m-b-10\\\" [model]=\\\"demographyAgeTo\\\" [value]=\\\"selectedAgeTo\\\" (onSelect)=\\\"onDropdownSelectAgeTo($event)\\\"></dropdown>\\n                                   </div>\\n                               </div>\\n                            </div>\\n                        </div>\\n                         -->\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"col-md-5\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\"> {{'ANALYTICS_ST_RAPORT.HEADER.3' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"raportItems; else noteBlock\\\" class=\\\"row report\\\">\\n                        <div *ngFor=\\\"let raportItem of raportItems;\\\" class=\\\"col-md-4 col-sm-4\\\">\\n                            <div [ngClass]=\\\"raportItem.color\\\">\\n                                <div class=\\\"stats-icon stats-icon-lg\\\"><i [ngClass]=\\\"raportItem.icon\\\"></i></div>\\n                                <div class=\\\"stats-title\\\">{{ raportItem.title }}</div>\\n                                <div class=\\\"stats-number\\\">{{ raportItem.value | number:'1.0-2' }}</div>\\n                                <div class=\\\"stats-desc\\\">{{ raportItem.desc }}</div>\\n                            </div>\\n                        </div>\\n                </div>\\n                <ng-template #noteBlock>\\n                    <div class=\\\"note note-secondary\\\">\\n                        <h4> {{'ANALYTICS_ST_RAPORT.INFO.HEADER' | translate:lang }}</h4>\\n                        {{'ANALYTICS_ST_RAPORT.INFO.NOTE' | translate:lang }}\\n                    </div>\\n                </ng-template>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<!-- bottom panel(s) -->\\n\\n<!--\\n\\n\\n-->\\n<div class=\\\"row\\\" >\\n    <!-- report panel -->\\n    <div *ngIf=\\\"activeReportType == 'report'\\\" class=\\\"col-md-12\\\">\\n        <div *ngIf=\\\"chartUsersViewsHistory\\\" class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_AND_USERS_HISTORY' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <chart\\n                    [chartData]=\\\"chartUsersViewsHistory\\\"\\n                    [chartLabels]=\\\"chartLabelsReport\\\"\\n                    [chartType]=\\\"'lineTime'\\\"\\n                    [startDate]=\\\"dateRange.startDate\\\" [endDate]=\\\"dateRange.endDate\\\"\\n                    [granularity]=\\\"activeGranularity\\\">\\n                </chart>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <!-- geolocation panels-->\\n        <div *ngIf=\\\"activeReportType == 'geolocation'\\\" class=\\\"col-md-6\\\">\\n            <div class=\\\"panel panel-inverse \\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.MAP_VIEWS' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <div class=\\\"analytics-geo-map\\\" >\\n                        <google-chart\\n                            [data]=\\\"mapChartData\\\"\\n                            (chartSelect)=\\\"onMapRegionClick($event)\\\"\\n                        ></google-chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"activeReportType == 'geolocation'\\\" class=\\\"col-md-6\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.DETAILS_GEOLOCATION' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n\\n                    <table class=\\\"table table-striped table-bordered analytics-geo-table\\\">\\n                        <thead>\\n                            <tr>\\n                                <td>#</td>\\n                                <td *ngIf=\\\"selectedCountryCode===null\\\">{{ 'ANALYTICS_GEO.WORD.COUNTRY' | translate:lang }}</td>\\n                                <td *ngIf=\\\"selectedCountryCode!==null\\\">{{ 'ANALYTICS_GEO.WORD.REGION' | translate:lang }}</td>\\n                                <td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }}</td>\\n                                <td>{{ 'ANALYTICS_GEO.WORD.USERS' | translate:lang }}</td>\\n                            </tr>\\n                        </thead>\\n                        <tbody>\\n                            <tr *ngFor=\\\"let rec of geoDataTable; let i = index\\\" [ngClass]=\\\"{'clickable': (selectedCountryCode===null)}\\\" (click)=\\\"onCountryTableRowClick(rec)\\\">\\n                                <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{i+1}}</td>\\n                                <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" ><span [ngClass]=\\\"rec.flag\\\" ></span> {{rec.label}}</td>\\n                                <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.views}}</td>\\n                                <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.users}}</td>\\n                            </tr>\\n                        </tbody>\\n                    </table>\\n                    <pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"pagingOptions.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                </div>\\n            </div>\\n        </div>\\n\\n    <!-- gender panels-->\\n        <div *ngIf=\\\"activeReportType == 'gender'\\\" class=\\\"col-md-4\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_PER_GENDER' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <chart *ngIf=\\\"(chartDemSex.labels != null) && (chartDemSex.labels.length > 0)\\\"\\n                        [chartData]=\\\"chartDemSex.data\\\"\\n                        [chartLabels]=\\\"chartDemSex.labels\\\"\\n                        [chartType]=\\\"'doughnut'\\\"\\n                        >\\n                    </chart>\\n                    <div *ngIf=\\\"(chartDemSex.labels != null) && (chartDemSex.labels.length == 0)\\\" style=\\\"text-align:center;line-height:300px;font-size:16px;\\\">\\n                        {{ 'ANALYTICS_ST_RAPORT.WORD.NO_DATA' | translate:lang }}\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"activeReportType == 'gender'\\\" class=\\\"col-md-8\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_AND_USERS_HISTORY' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <chart\\n                       [chartData]=\\\"chartUsersViewsHistory\\\"\\n                       [chartLabels]=\\\"chartLabelsReport\\\"\\n                       [chartType]=\\\"'lineTime'\\\"\\n                       [startDate]=\\\"dateRange.startDate\\\" [endDate]=\\\"dateRange.endDate\\\"\\n                       [granularity]=\\\"activeGranularity\\\">\\n                   </chart>\\n                </div>\\n            </div>\\n        </div>\\n\\n    <!-- age panels-->\\n        <div *ngIf=\\\"activeReportType == 'age'\\\" class=\\\"col-md-4\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_PER_AGE_SEGMENT' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <chart *ngIf=\\\"(chartDemAge.labels != null) && (chartDemAge.labels.length > 0)\\\"\\n                        [chartData]=\\\"chartDemAge.data\\\"\\n                        [chartLabels]=\\\"chartDemAge.labels\\\"\\n                        [chartType]=\\\"'horizontalBar'\\\"\\n                        >\\n                    </chart>\\n                    <div *ngIf=\\\"(chartDemAge != null) && (chartDemAge.labels != null) && (chartDemAge.labels.length == 0)\\\" style=\\\"text-align:center;line-height:300px;font-size:16px;\\\">\\n                        {{ 'ANALYTICS_ST_RAPORT.WORD.NO_DATA' | translate:lang }}\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"activeReportType == 'age'\\\" class=\\\"col-md-8\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_AND_USERS_HISTORY' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <chart\\n                       [chartData]=\\\"chartUsersViewsHistory\\\"\\n                       [chartLabels]=\\\"chartLabelsReport\\\"\\n                       [chartType]=\\\"'lineTime'\\\"\\n                       [startDate]=\\\"dateRange.startDate\\\" [endDate]=\\\"dateRange.endDate\\\"\\n                       [granularity]=\\\"activeGranularity\\\">\\n                     </chart>\\n                </div>\\n            </div>\\n        </div>\\n\\n    <!-- tags panel-->\\n    <div *ngIf=\\\"activeReportType == 'tags'\\\" class=\\\"col-md-12\\\">\\n\\n    <div class=\\\"panel panel-inverse\\\">\\n        <div class=\\\"panel-heading\\\">\\n            <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.TAGS' | translate:lang }}</h4>\\n        </div>\\n        <div class=\\\"panel-body\\\">\\n            <chart\\n              [chartData]=\\\"chartUsersViewsHistory\\\"\\n              [chartLabels]=\\\"chartLabelsReport\\\"\\n              [chartType]=\\\"'lineTime'\\\"\\n              [startDate]=\\\"dateRange.startDate\\\" [endDate]=\\\"dateRange.endDate\\\"\\n              [granularity]=\\\"activeGranularity\\\">\\n            </chart>\\n\\n            <div *ngIf=\\\"(tagsDataTable == null) || (tagsDataTable.length == 0)\\\" style=\\\"text-align:center;line-height:100px;font-size:16px;\\\">\\n                     {{ 'ANALYTICS_ST_RAPORT.WORD.NO_DATA_FOR_TAGS_LIST' | translate:lang }}\\n            </div>\\n\\n            <table *ngIf=\\\"(tagsDataTable != null) && (tagsDataTable.length > 0)\\\" class=\\\"table table-striped table-bordered analytics-geo-table m-t-30\\\">\\n                <thead>\\n                    <tr>\\n                        <td>#</td>\\n                        <td>{{ 'ANALYTICS_ST_RAPORT.WORD.TAG' | translate:lang }}</td>\\n                        <td>{{ 'ANALYTICS_ST_RAPORT.WORD.VIEWS' | translate:lang }}</td>\\n                    </tr>\\n                </thead>\\n                <tbody>\\n                        <tr *ngFor=\\\"let rec of tagsDataTable; let i = index\\\">\\n                          <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.position}}</td>\\n                          <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.tag}}</td>\\n                          <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.views}}</td>\\n                        </tr>\\n                </tbody>\\n            </table>\\n            <pager *ngIf=\\\"(tagsDataTable != null) && (tagsDataTable.length > 0)\\\" [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"pagingOptions.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n        </div>\\n    </div>\\n\\n</div>\"\n\n/***/ }),\n\n/***/ 1421:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<virtual-scroller *ngIf=\\\"items\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[style.height.px]=\\\"listHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[horizontal]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"items\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[compareItems]=\\\"compareListItems\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsUpdate)=\\\"handleListVieportUpdate($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsChange)=\\\"handleListVieportChange($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsStart)=\\\"handleListVieportStart($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsEnd)=\\\"handleListVieportEnd($event)\\\">\\n\\t<div class=\\\"list-top\\\"></div>\\n\\t<div class=\\\"list-scroller\\\" #container>\\n\\t\\t<ng-content selector=\\\".list-first-item\\\"></ng-content>\\n\\t\\t<ng-container *ngFor=\\\"let item of listViewportItems;trackBy: trackListItem;\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"itemTemplate;else defaultItemTemplate;\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"itemTemplate;context:{item:item};\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-template #defaultItemTemplate>{{ item|json }}</ng-template>\\n\\t\\t\\t<ng-content selector=\\\".list-last-item\\\"></ng-content>\\n\\t\\t</ng-container>\\n\\t</div>\\n\\t<div class=\\\"list-bottom\\\"></div>\\n</virtual-scroller>\\n\"\n\n/***/ }),\n\n/***/ 1422:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  position: relative; }\\n  :host::before, :host::after {\\n    content: '';\\n    position: absolute;\\n    left: 0;\\n    right: 20px;\\n    pointer-events: none;\\n    height: 12px;\\n    z-index: 2; }\\n  :host::before {\\n    top: 0;\\n    background: transparent; }\\n  :host::after {\\n    bottom: 0; }\\n  :host virtual-scroller {\\n    height: inherit;\\n    max-height: inherit; }\\n  :host virtual-scroller .list-top {\\n      height: 2px; }\\n  :host virtual-scroller .list-bottom {\\n      height: 12px; }\\n\"\n\n/***/ }),\n\n/***/ 1423:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- HEADER -->\\n<!-- <div class=\\\"header\\\" [style.height.px]=\\\"itemHeight\\\"> -->\\n<!-- <span class=\\\"title\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.TITLE'|translate:lang }}</span> -->\\n<!-- </div> -->\\n<!-- BODY -->\\n\\n<!-- daterange -->\\n<div class=\\\"ctrl-con daterange\\\" [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.DATE_RANGE.SELECT'|translate:lang\\\">\\n\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.DATE_RANGE.LABEL'|translate:lang }}</label>\\n\\t<date-range-picker *ngIf=\\\"!!RANGE_PICKER_OPTIONS?.startDate && !!RANGE_PICKER_OPTIONS?.endDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t size=\\\"sm\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t showIcon=\\\"none\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t width=\\\"unset\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [options]=\\\"RANGE_PICKER_OPTIONS\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (selectionChanged)=\\\"handleDateRangeChanged($event)\\\">\\n\\t</date-range-picker>\\n</div>\\n\\n<!-- geolocation -->\\n<div class=\\\"ctrl-block\\\">\\n\\t<!-- country -->\\n\\t<div class=\\\"ctrl-con country\\\"\\n\\t\\t\\t [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.COUNTRY.SELECT'|translate:lang\\\">\\n\\t\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.COUNTRY.LABEL'|translate:lang }}</label>\\n\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'COUNTRY'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemTemplate]=\\\"countryItemTemplate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"countriesDropdown$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"countryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"handleSelectCountry($event)\\\">\\n\\t\\t\\t<span *ngIf=\\\"countryCode\\\" class=\\\"trigger-label-prefix\\\"><span class=\\\"flag-icon flag-icon-{{countryCode|lowercase}}\\\"></span>&nbsp;</span>\\n\\t\\t</virtual-dropdown>\\n\\t\\t<!-- LIST ITEM -->\\n\\t\\t<ng-template #countryItemTemplate let-item=\\\"item\\\" let-select=\\\"select\\\">\\n\\t\\t\\t<a class=\\\"virtual-dropdown-popup-item btn btn-xs country-list-item\\\" (click)=\\\"select(item)\\\" [title]=\\\"item?.label\\\">\\n\\t\\t\\t\\t<small class=\\\"country-list-item-icon\\\">\\n\\t\\t\\t\\t\\t<span *ngIf=\\\"item.value\\\" class=\\\"flag-icon flag-icon-{{item.value|lowercase}}\\\"></span>\\n\\t\\t\\t\\t</small>\\n\\t\\t\\t\\t<small class=\\\"country-list-item-label\\\">{{item?.label}}</small>\\n\\t\\t\\t</a>\\n\\t\\t</ng-template>\\n\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingCountry;else resetCountryTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"spinnerTmpl\\\"></ng-container></ng-container>\\n\\t\\t\\t<ng-template #resetCountryTmpl>\\n\\t\\t\\t\\t<button *ngIf=\\\"!!countryCode\\\" (click)=\\\"handleResetCountry()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n\\n\\t<!-- region -->\\n\\t<div class=\\\"ctrl-con\\\"\\n\\t\\t\\t [class.disabled]=\\\"!countryCode\\\"\\n\\t\\t\\t [attr.title]=\\\"('ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.REGION.'+(!countryCode?'DISABLED':'SELECT'))|translate:lang\\\">\\n\\t\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.REGION.LABEL'|translate:lang }}</label>\\n\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'REGION'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"regionsDropdown$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"regionId\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[disabled]=\\\"!countryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"handleSelectRegion($event)\\\">\\n\\t\\t</virtual-dropdown>\\n\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingRegion;else resetRegionTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"spinnerTmpl\\\"></ng-container></ng-container>\\n\\t\\t\\t<ng-template #resetRegionTmpl>\\n\\t\\t\\t\\t<button *ngIf=\\\"!!regionId\\\" (click)=\\\"handleResetRegion()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n\\n</div>\\n\\n<!-- filters / prefixed tags -->\\n<div *ngIf=\\\"tag.hasPrefixedTagData;\\\" class=\\\"ctrl-block\\\">\\n\\t<div class=\\\"ctrl-con prefixed-tags\\\"\\n\\t\\t\\t [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.FILTERS.SELECT'|translate:lang\\\">\\n\\t\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.FILTERS.LABEL'|translate:lang }}</label>\\n\\t\\t<div class=\\\"ctrl-block\\\">\\n\\t\\t\\t<ng-container *ngFor=\\\"let prefix of tag.prefixes();\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"prefixedTagTmpl;context:{name: prefix, data:tag.prefixedTagData(prefix)}\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-template #prefixedTagTmpl let-name=\\\"name\\\" let-data=\\\"data\\\">\\n\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.active]=\\\"!!data.selected?.value\\\">\\n\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"data.selected?.value\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"data.$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[removeSelectedFromList]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withSearch]=\\\"data.total > 50\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[searchValue]=\\\"data.search.text\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(searchValueChange)=\\\"handlePrefixedTagSearch(data, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(scrolledToEnd)=\\\"handlePrefixedTagScrollEnd(data, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"handlePrefixedTagSelect(data, $event)\\\">\\n\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<!-- tags -->\\n<div class=\\\"ctrl-block\\\">\\n\\t<div class=\\\"ctrl-con tags\\\"\\n\\t\\t\\t [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.TAGS.SELECT'|translate:lang\\\">\\n\\t\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.TAGS.LABEL'|translate:lang }}</label>\\n\\t\\t<tag-input theme=\\\"ngx-chips-bradmax-theme\\\"\\n\\t\\t\\t\\t\\t\\t\\t [ripple]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t [onlyFromAutocomplete]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t [secondaryPlaceholder]=\\\"'ANALYTICS_TAG_SERVICE.INITIAL_PLACEHOLDER'|translate:lang\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'ANALYTICS_TAG_SERVICE.PLACEHOLDER'|translate:lang\\\"\\n\\t\\t\\t\\t\\t\\t\\t (onAdd)=\\\"handleTagAdd($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t (onRemove)=\\\"handleTagRemove($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"tag.selectedChips\\\">\\n\\t\\t\\t<tag-input-dropdown [showDropdownIfEmpty]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[autocompleteObservable]=\\\"tag.handleTagSearch\\\">\\n\\t\\t\\t</tag-input-dropdown>\\n\\t\\t</tag-input>\\n\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"isSearchingTags\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"spinnerTmpl\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<!-- -- -->\\n<!-- SPINNER -->\\n<ng-template #spinnerTmpl>\\n\\t<div class=\\\"spinner-con\\\">\\n\\t\\t<div class=\\\"spinner-small\\\"></div>\\n\\t</div>\\n</ng-template>\\n\"\n\n/***/ }),\n\n/***/ 1424:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap; }\\n  :host .ctrl-block {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    display: -webkit-box !important;\\n    display: -ms-flexbox !important;\\n    display: flex !important;\\n    -ms-flex-wrap: wrap;\\n        flex-wrap: wrap; }\\n  :host .ctrl-con {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-align: baseline;\\n        -ms-flex-align: baseline;\\n            align-items: baseline;\\n    max-width: 450px;\\n    padding: 4px; }\\n  :host .ctrl-con.daterange {\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center; }\\n  :host .ctrl-con.country .country-list-item {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-pack: start;\\n          -ms-flex-pack: start;\\n              justify-content: flex-start;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      width: 100%;\\n      height: 100%;\\n      overflow: hidden; }\\n  :host .ctrl-con.country .country-list-item-icon {\\n        -webkit-box-flex: 0;\\n            -ms-flex: 0 0 24px;\\n                flex: 0 0 24px; }\\n  :host .ctrl-con.country .country-list-item-label {\\n        -webkit-box-flex: 1;\\n            -ms-flex: 1;\\n                flex: 1;\\n        text-align: center;\\n        white-space: nowrap; }\\n  :host .ctrl-con.tags {\\n      min-width: unset;\\n      max-width: unset; }\\n  :host .ctrl-con.prefixed-tags {\\n      max-width: unset; }\\n  :host .ctrl-con label {\\n      min-width: 100px;\\n      max-width: 100px;\\n      font-size: 0.75em;\\n      text-align: end;\\n      padding-left: 4px;\\n      padding-right: 6px;\\n      margin: 0; }\\n  :host .ctrl-con label::after {\\n        content: \\\":\\\"; }\\n  :host .ctrl-con ::ng-deep date-range-picker {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      margin: 0; }\\n  :host .ctrl-con ::ng-deep date-range-picker .form-control {\\n        text-align: center; }\\n  :host .ctrl-con ::ng-deep virtual-dropdown {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      margin: 0;\\n      min-width: 160px;\\n      max-width: 160px; }\\n  :host .ctrl-con ::ng-deep virtual-dropdown-trigger {\\n        border-color: lightgray !important; }\\n  :host .ctrl-con ::ng-deep tag-input {\\n      font-size: 0.75em; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag-input-form form input.ng2-tag-input__text-input {\\n        height: 30px; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag {\\n        border-color: #335eea !important;\\n        background: #335eea !important;\\n        color: #fff !important;\\n        border-radius: 3px;\\n        height: 30px;\\n        line-height: 26px; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon {\\n          color: rgba(255, 255, 255, 0.64) !important; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon svg {\\n            height: 26px; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon svg path {\\n              fill: currentColor !important; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon:hover {\\n            -webkit-transform: none !important;\\n                    transform: none !important;\\n            color: #fff !important; }\\n  :host .ctrl-con .ctrl-addon {\\n      position: relative;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: center;\\n          -ms-flex-pack: center;\\n              justify-content: center;\\n      min-width: 24px;\\n      max-width: 24px;\\n      min-height: 24px;\\n      max-height: 24px;\\n      margin: auto; }\\n  :host .ctrl-con .ctrl-addon .btn {\\n        background: transparent; }\\n  :host .ctrl-con .ctrl-addon .spinner-con .spinner-small {\\n        width: 16px;\\n        height: 16px;\\n        margin: -8px 0 0 -8px; }\\n  :host .ctrl-con.disabled {\\n      cursor: not-allowed; }\\n  :host .ctrl-con.disabled label {\\n        opacity: 0.64; }\\n  :host .ctrl-con.disabled * {\\n        pointer-events: none; }\\n  :host .ctrl-con.active ::ng-deep virtual-dropdown .virtual-dropdown-trigger {\\n      border-color: #335eea !important;\\n      background: #335eea !important;\\n      color: #fff !important; }\\n\"\n\n/***/ }),\n\n/***/ 1425:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- CHART -->\\n<div class=\\\"chart-con\\\" *ngIf=\\\"!!chartData && !!chartData?.dataTable;\\\">\\n\\t<!-- HEADER -->\\n\\t<div class=\\\"header\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t<div class=\\\"title\\\">\\n\\t\\t\\t<span class=\\\"title-text\\\">\\n\\t\\t\\t\\t{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TITLE')|translate:lang }}\\n\\t\\t\\t\\t<!-- country flag & name -->\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"countryCode\\\">\\n\\t\\t\\t\\t\\t<small>:&nbsp;</small>\\n\\t\\t\\t\\t\\t<span class=\\\"flag-icon flag-icon-{{countryCode|lowercase}}\\\"></span>\\n\\t\\t\\t\\t\\t<small>&nbsp;{{countryNameByCode(countryCode)}}</small>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t<!-- region name -->\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"regionId\\\">\\n\\t\\t\\t\\t\\t<small>&nbsp;/&nbsp;{{regionNameById(countryCode, regionId)}}</small>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t<!--  -->\\n\\t\\t\\t</span>\\n\\t\\t\\t<small *ngIf=\\\"dateRange\\\" class=\\\"title-date\\\">{{(dateRange[0]*1000)|date:'MM/dd/y'}} - {{(dateRange[1]*1000)|date:'MM/dd/y'}}</small>\\n\\t\\t</div>\\n\\t\\t<ng-container *ngIf=\\\"resolution !== 'countries'\\\">\\n\\t\\t\\t<button *ngIf=\\\"!!regionId; else backToWorld;\\\" class=\\\"btn btn-sm btn-inverse\\\" (click)=\\\"handleBackClick()\\\">{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.MAP.BACK_TO_COUNTRY')|translate:lang }}</button>\\n\\t\\t\\t<ng-template #backToWorld>\\n\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-inverse\\\" (click)=\\\"handleBackClick()\\\">{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.MAP.BACK_TO_WORLD')|translate:lang }}</button>\\n\\t\\t\\t</ng-template>\\n\\t\\t</ng-container>\\n\\t</div>\\n\\t<!-- BODY -->\\n\\t<google-chart [data]=\\\"chartData\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t(chartReady)=\\\"handleGoogleChartReady($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t(chartSelect)=\\\"handleGoogleChartSelect($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t(chartError)=\\\"handleGoogleChartError($event)\\\">\\n\\t</google-chart>\\n</div>\\n<!-- LIST -->\\n<div class=\\\"list-con\\\" *ngIf=\\\"!!listItems && !!chartData?.options?.height;\\\" [style.minHeight.px]=\\\"itemHeight\\\">\\n\\t<!-- HEADER -->\\n\\t<div class=\\\"list-header\\\">\\n\\t\\t<div class=\\\"list-row\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<div class=\\\"cell cell-no\\\">#</div>\\n\\t\\t\\t<div class=\\\"cell cell-label\\\">{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.LIST.' + (resolution|uppercase))|translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"cell cell-views\\\">\\n\\t\\t\\t\\t<span>{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.VIEWS')|translate:lang }}</span>\\n\\t\\t\\t\\t<small>{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TOTAL_PERCENT')|translate:lang }}</small>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"cell cell-users\\\">\\n\\t\\t\\t\\t<span>{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.USERS')|translate:lang }}</span>\\n\\t\\t\\t\\t<small>{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TOTAL_PERCENT')|translate:lang }}</small>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- BODY -->\\n\\t<virtual-list *ngIf=\\\"listItems?.length > 0; else NODATA;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[itemHeight]=\\\"itemHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[listHeight]=\\\"chartData.options.height\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[compareItems]=\\\"compareListItems\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[trackItem]=\\\"trackListItem\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[itemTemplate]=\\\"itemTemplate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"listItems\\\">\\n\\t</virtual-list>\\n\\t<!-- LIST ITEM -->\\n\\t<ng-template #itemTemplate let-item=\\\"item\\\">\\n\\t\\t<div class=\\\"list-row\\\" [style.height.px]=\\\"itemHeight\\\" (click)=\\\"handleSelectListItem(item)\\\">\\n\\t\\t\\t<!-- no -->\\n\\t\\t\\t<div class=\\\"cell cell-no\\\">\\n\\t\\t\\t\\t<small>{{ item.index | number:'2.0' }}.</small>\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"item.countryCode\\\">&nbsp;<span class=\\\"flag-icon flag-icon-{{item.countryCode|lowercase}}\\\"></span></ng-container>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- label & bars -->\\n\\t\\t\\t<div class=\\\"cell cell-label\\\">\\n\\t\\t\\t\\t<!-- bars -->\\n\\t\\t\\t\\t<div class=\\\"bar-con\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"bar bar-views\\\" [style.width.%]=\\\"item.viewsShare\\\"></div>\\n\\t\\t\\t\\t\\t<div class=\\\"bar bar-users\\\" [style.width.%]=\\\"item.usersShare\\\"></div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<!-- label -->\\n\\t\\t\\t\\t<span>{{ item.label }}</span>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- views -->\\n\\t\\t\\t<div class=\\\"cell cell-views\\\">\\n\\t\\t\\t\\t<span [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.VIEWS'|translate:lang\\\">{{ item.views | number:'1.0' }}</span>\\n\\t\\t\\t\\t<small [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TOTAL_PERCENT'|translate:lang\\\"><ng-container *ngIf=\\\"item.viewsShare > 0.01;else BELOW_0_01;\\\">{{ item.viewsShare | number:'1.0-2' }}</ng-container><small>&nbsp;%</small></small>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- users -->\\n\\t\\t\\t<div class=\\\"cell cell-users\\\">\\n\\t\\t\\t\\t<span [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.USERS'|translate:lang\\\">{{ item.users | number:'1.0' }}</span>\\n\\t\\t\\t\\t<small [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TOTAL_PERCENT'|translate:lang\\\"><ng-container *ngIf=\\\"item.usersShare > 0.01;else BELOW_0_01;\\\">{{ item.usersShare | number:'1.0-2' }}</ng-container><small>&nbsp;%</small></small>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</ng-template>\\n\\t<!-- BELOW_0_01 -->\\n\\t<ng-template #BELOW_0_01><small>></small>0.01</ng-template>\\n\\t<!-- NODATA -->\\n\\t<ng-template #NODATA>\\n\\t\\t<div class=\\\"list-row no-data\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<small>{{ 'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.NODATA'|translate:lang }}</small>\\n\\t\\t</div>\\n\\t</ng-template>\\n\\t<!-- - -->\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1426:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap; }\\n  :host .list-con {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .list-con ::ng-deep .list-row {\\n      position: relative;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      margin-right: 20px;\\n      font-size: 0.8em;\\n      border-bottom: 1px solid #2d353c; }\\n  :host .list-con ::ng-deep .list-row .cell {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: horizontal;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: row;\\n                flex-direction: row;\\n        -ms-flex-wrap: nowrap;\\n            flex-wrap: nowrap;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: start;\\n            -ms-flex-pack: start;\\n                justify-content: flex-start;\\n        padding: 0 4px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-no {\\n          -webkit-box-orient: horizontal;\\n          -webkit-box-direction: normal;\\n              -ms-flex-direction: row;\\n                  flex-direction: row;\\n          -ms-flex-wrap: nowrap;\\n              flex-wrap: nowrap;\\n          -webkit-box-pack: justify;\\n              -ms-flex-pack: justify;\\n                  justify-content: space-between;\\n          text-align: right;\\n          min-width: 36px;\\n          max-width: 36px;\\n          font-size: 0.8em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label {\\n          position: relative;\\n          -webkit-box-flex: 1;\\n              -ms-flex: 1;\\n                  flex: 1;\\n          white-space: nowrap;\\n          text-overflow: ellipsis;\\n          overflow: hidden; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label > span {\\n            position: relative;\\n            z-index: 1; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label .bar-con {\\n            z-index: 0;\\n            position: absolute;\\n            left: 0;\\n            right: 0;\\n            bottom: 0;\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-orient: vertical;\\n            -webkit-box-direction: normal;\\n                -ms-flex-direction: column;\\n                    flex-direction: column;\\n            -ms-flex-wrap: nowrap;\\n                flex-wrap: nowrap;\\n            -webkit-box-pack: end;\\n                -ms-flex-pack: end;\\n                    justify-content: flex-end;\\n            pointer-events: none; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label .bar-con .bar {\\n              height: 4px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label .bar-con .bar.bar-views {\\n                background-color: #a2a2a2;\\n                margin-bottom: 1px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label .bar-con .bar.bar-users {\\n                background-color: #2d353c; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-users, :host .list-con ::ng-deep .list-row .cell.cell-views {\\n          position: relative;\\n          display: -webkit-box;\\n          display: -ms-flexbox;\\n          display: flex;\\n          -webkit-box-orient: horizontal;\\n          -webkit-box-direction: normal;\\n              -ms-flex-direction: row;\\n                  flex-direction: row;\\n          -ms-flex-wrap: wrap;\\n              flex-wrap: wrap;\\n          -webkit-box-pack: end;\\n              -ms-flex-pack: end;\\n                  justify-content: flex-end;\\n          text-align: right;\\n          min-width: 64px;\\n          max-width: 64px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-users > *, :host .list-con ::ng-deep .list-row .cell.cell-views > * {\\n            min-width: inherit;\\n            max-width: inherit;\\n            font-weight: 200;\\n            line-height: normal; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-users > span, :host .list-con ::ng-deep .list-row .cell.cell-views > span {\\n            font-size: 0.92em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-users > small, :host .list-con ::ng-deep .list-row .cell.cell-views > small {\\n            font-size: 0.82em; }\\n  :host .list-con ::ng-deep .list-row.no-data {\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: center;\\n            -ms-flex-pack: center;\\n                justify-content: center; }\\n  :host .list-con ::ng-deep virtual-list {\\n      position: relative; }\\n  :host .list-con ::ng-deep virtual-list .list-row {\\n        pointer-events: all; }\\n  :host .list-con ::ng-deep virtual-list .list-row:last-of-type {\\n          border-bottom: 1px solid transparent; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover {\\n          border-bottom-color: #888888; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-label .bar-con .bar.bar-views {\\n            background-color: #F4D514; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-label .bar-con .bar.bar-users {\\n            background-color: #888888; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-views {\\n            color: #F4D514; }\\n  :host .chart-con .header .flag-icon {\\n    border: 1px solid #2d353c; }\\n  :host .chart-con ::ng-deep google-chart svg {\\n    /* FIX:start */\\n    /* FIX:end */ }\\n  :host .chart-con ::ng-deep google-chart svg defs#defs pattern rect {\\n      fill: none !important; }\\n  :host .chart-con ::ng-deep google-chart svg defs#defs pattern line {\\n      stroke: none !important;\\n      stroke-width: 0 !important; }\\n  :host .chart-con ::ng-deep google-chart svg text {\\n      stroke: none !important; }\\n  :host.selectable ::ng-deep virtual-list .list-row {\\n    cursor: pointer; }\\n\"\n\n/***/ }),\n\n/***/ 1427:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- HEADER -->\\n<div class=\\\"header\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t<div class=\\\"title-con\\\">\\n\\t\\t<div class=\\\"title\\\">\\n\\t\\t\\t<span class=\\\"title-text\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.HISTORY.TITLE'|translate:lang }}</span>\\n\\t\\t\\t<small *ngIf=\\\"data\\\" class=\\\"title-date\\\">{{data.startDate.utc()|date:'MM/dd/y' }} - {{data.endDate.utc()|date:'MM/dd/y'}}</small>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"btn-group\\\">\\n\\t\\t<button *ngFor=\\\"let item of granularityData;trackBy:trackHistoryGranularity;\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"btn btn-sm\\\"\\n\\t\\t\\t\\t\\t\\t[class.btn-primary]=\\\"data?.granularity !== item\\\"\\n\\t\\t\\t\\t\\t\\t[disabled]=\\\"data?.granularity === item\\\"\\n\\t\\t\\t\\t\\t\\t(click)=\\\"handleGranularityChange(item)\\\">\\n\\t\\t\\t{{ 'ANALYTICS_SAMPLED_TRAFFIC.HISTORY.GRANULARITY.' + (item|uppercase) | translate:lang }}\\n\\t\\t</button>\\n\\t</div>\\n\\t<div class=\\\"btn-group\\\">\\n\\t\\t<button class=\\\"btn btn-sm btn-primary\\\" (click)=\\\"exportCsv()\\\" [attr.title]=\\\"csvFilename\\\">\\n\\t\\t\\t<i class=\\\"fa fa-download\\\"></i>&nbsp;{{ 'ANALYTICS_SAMPLED_TRAFFIC.HISTORY.EXPORT_TO_CSV'|translate:lang }}\\n\\t\\t</button>\\n\\t</div>\\n</div>\\n<!-- BODY -->\\n<chart *ngIf=\\\"data\\\"\\n\\t\\t\\t chartType=\\\"lineTime\\\"\\n\\t\\t\\t [gridColor]=\\\"CHART_GRID_COLOR\\\"\\n\\t\\t\\t [fontColor]=\\\"CHART_FONT_COLOR\\\"\\n\\t\\t\\t [datasetColors]=\\\"CHART_DATA_COLORS\\\"\\n\\t\\t\\t [chartData]=\\\"data.datasets\\\"\\n\\t\\t\\t [chartLabels]=\\\"data.labels\\\"\\n\\t\\t\\t [granularity]=\\\"data.granularity\\\"\\n\\t\\t\\t [startDate]=\\\"data.startDate\\\"\\n\\t\\t\\t [endDate]=\\\"data.endDate\\\">\\n</chart>\\n\"\n\n/***/ }),\n\n/***/ 1428:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap; }\\n  :host .header .title-con {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host chart {\\n    margin-top: 16px; }\\n\"\n\n/***/ }),\n\n/***/ 1429:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<ng-container *ngIf=\\\"show;\\\">\\n\\t<div *ngFor=\\\"let item of SUMMARY_ITEMS;trackBy:trackSummaryItem;\\\" class=\\\"summary-con\\\">\\n\\t\\t<div class=\\\"summary-icon\\\"><i class=\\\"fa fa-fw fa-{{item.fa}}\\\"></i></div>\\n\\t\\t<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 60 20\\\" preserveAspectRatio=\\\"xMinYMid meet\\\" class=\\\"summary-number\\\">\\n\\t\\t\\t<text x=\\\"100%\\\" y=\\\"80%\\\" text-anchor=\\\"end\\\" font-size=\\\"15\\\" fill=\\\"currentColor\\\">{{ (item.value || 0) | number:'1.0-2' }}</text>\\n\\t\\t</svg>\\n\\t\\t<small class=\\\"summary-title\\\">{{ ('ANALYTICS_SAMPLED_TRAFFIC.SUMMARY.' + item.i10n)|translate:lang }}</small>\\n\\t</div>\\n</ng-container>\\n\"\n\n/***/ }),\n\n/***/ 1430:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap;\\n  -webkit-box-pack: space-evenly;\\n      -ms-flex-pack: space-evenly;\\n          justify-content: space-evenly;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  min-width: 100%;\\n  min-height: 100%; }\\n  :host .summary-con {\\n    position: relative;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    -ms-flex-wrap: nowrap;\\n        flex-wrap: nowrap;\\n    -webkit-box-align: end;\\n        -ms-flex-align: end;\\n            align-items: flex-end;\\n    -webkit-box-pack: end;\\n        -ms-flex-pack: end;\\n            justify-content: flex-end;\\n    margin: 8px;\\n    text-overflow: ellipsis;\\n    white-space: nowrap; }\\n  :host .summary-con .summary-number {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      z-index: 1; }\\n  :host .summary-con .summary-title {\\n      font-weight: 400;\\n      line-height: 1em;\\n      z-index: 1; }\\n  :host .summary-con .summary-icon {\\n      pointer-events: none;\\n      position: absolute;\\n      bottom: 0;\\n      left: 0;\\n      font-size: 5em;\\n      z-index: 0;\\n      text-align: right; }\\n  :host .summary-con .summary-icon .fa::before {\\n        color: #ebcb00 !important; }\\n\"\n\n/***/ }),\n\n/***/ 1431:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- HEADER -->\\n<div class=\\\"header\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t<div class=\\\"title\\\">\\n\\t\\t<span class=\\\"title-text\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.TITLE'|translate:lang }}</span>\\n\\t\\t<small *ngIf=\\\"dateRange\\\" class=\\\"title-date\\\">{{(dateRange[0]*1000)|date:'MM/dd/y'}} - {{(dateRange[1]*1000)|date:'MM/dd/y'}}</small>\\n\\t</div>\\n</div>\\n<!-- LIST -->\\n<div class=\\\"list-con\\\" *ngIf=\\\"!!data;\\\" [style.minHeight.px]=\\\"itemHeight\\\">\\n\\t<!-- HEADER -->\\n\\t<div class=\\\"list-header\\\">\\n\\t\\t<div class=\\\"list-row\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<div class=\\\"cell cell-no\\\">#</div>\\n\\t\\t\\t<div class=\\\"cell cell-tag\\\">\\n\\t\\t\\t\\t<div class=\\\"tag-con\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"tag-prefix\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.TAG'|translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"tag-value\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.VALUE'|translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"cell cell-views\\\">\\n\\t\\t\\t\\t<span>{{ ('ANALYTICS_SAMPLED_TRAFFIC.TAGS.VIEWS')|translate:lang }}</span>\\n\\t\\t\\t\\t<small>{{ ('ANALYTICS_SAMPLED_TRAFFIC.TAGS.TOTAL_PERCENT')|translate:lang }}</small>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- LIST -->\\n\\t<virtual-list *ngIf=\\\"data?.records?.length > 0; else NODATA;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[itemHeight]=\\\"itemHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[listHeight]=\\\"listHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[compareItems]=\\\"compareListItems\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[trackItem]=\\\"trackListItem\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[itemTemplate]=\\\"itemTemplate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"data.records\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t(scrollerEnd)=\\\"handleListVieportEnd($event)\\\">\\n\\t\\t<!-- loader -->\\n\\t\\t<div *ngIf=\\\"isFetching\\\" class=\\\"list-last-item list-loader\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<div class=\\\"spinner-con\\\">\\n\\t\\t\\t\\t<div class=\\\"spinner-small\\\"></div>\\n\\t\\t\\t</div><small>{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.LOADING'|translate:lang }}</small>\\n\\t\\t</div>\\n\\t</virtual-list>\\n\\t<!-- LIST ITEM -->\\n\\t<ng-template #itemTemplate let-item=\\\"item\\\">\\n\\t\\t<div class=\\\"list-row\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<!-- no -->\\n\\t\\t\\t<div class=\\\"cell cell-no\\\">\\n\\t\\t\\t\\t<small>{{ item.position | number:'2.0' }}.</small>\\n\\t\\t\\t\\t<!-- <small class=\\\"fa fa-fw fa-search\\\"></small> -->\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- tag & bars -->\\n\\t\\t\\t<div class=\\\"cell cell-tag\\\">\\n\\t\\t\\t\\t<!-- bars -->\\n\\t\\t\\t\\t<div *ngIf=\\\"!!item.viewsShare\\\" class=\\\"bar-con\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"bar bar-views\\\" [style.width.%]=\\\"item.viewsShare\\\"></div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<!-- tag -->\\n\\t\\t\\t\\t<div class=\\\"tag-con\\\" [class.prefixed]=\\\"!!item.prefix\\\">\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"!!item.prefix\\\" class=\\\"tag-prefix\\\">{{ item.prefix|tagPrefix }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"tag-value\\\">{{ item.value }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- views -->\\n\\t\\t\\t<div class=\\\"cell cell-views\\\">\\n\\t\\t\\t\\t<span [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.TAGS.VIEWS'|translate:lang\\\">{{ item.views | number:'1.0' }}</span>\\n\\t\\t\\t\\t<small [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.TAGS.TOTAL_PERCENT'|translate:lang\\\"><ng-container *ngIf=\\\"item.viewsShare > 0.01;else BELOW_0_01;\\\">{{ item.viewsShare | number:'1.0-2' }}</ng-container><small>&nbsp;%</small></small>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- - -->\\n\\t</ng-template>\\n\\t<!-- BELOW_0_01 -->\\n\\t<ng-template #BELOW_0_01><small>></small>0.01</ng-template>\\n\\t<!-- NODATA -->\\n\\t<ng-template #NODATA>\\n\\t\\t<div class=\\\"list-row no-data\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<small>{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.NODATA'|translate:lang }}</small>\\n\\t\\t</div>\\n\\t</ng-template>\\n\\t<!-- === -->\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1432:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  position: relative;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap; }\\n  :host .list-con {\\n    position: relative;\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    -ms-flex-wrap: nowrap;\\n        flex-wrap: nowrap;\\n    height: inherit;\\n    max-height: inherit; }\\n  :host .list-con .list-header .list-row .cell-tag .tag-con .tag-value {\\n      font-weight: lighter;\\n      font-size: 0.9em;\\n      font-style: italic; }\\n  :host .list-con ::ng-deep .list-row {\\n      position: relative;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      margin-right: 20px;\\n      font-size: 0.8em;\\n      border-bottom: 1px solid #867400; }\\n  :host .list-con ::ng-deep .list-row .cell {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: horizontal;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: row;\\n                flex-direction: row;\\n        -ms-flex-wrap: nowrap;\\n            flex-wrap: nowrap;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: start;\\n            -ms-flex-pack: start;\\n                justify-content: flex-start;\\n        padding: 0 4px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-no {\\n          -webkit-box-pack: justify;\\n              -ms-flex-pack: justify;\\n                  justify-content: space-between;\\n          text-align: right;\\n          min-width: 32px;\\n          max-width: 32px;\\n          font-size: 0.8em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag {\\n          -webkit-box-flex: 1;\\n              -ms-flex: 1;\\n                  flex: 1;\\n          position: relative;\\n          white-space: nowrap;\\n          text-overflow: ellipsis;\\n          overflow: hidden; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .bar-con {\\n            z-index: 0;\\n            position: absolute;\\n            left: 0;\\n            right: 0;\\n            bottom: 0;\\n            height: 4px;\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-orient: vertical;\\n            -webkit-box-direction: normal;\\n                -ms-flex-direction: column;\\n                    flex-direction: column;\\n            -ms-flex-wrap: nowrap;\\n                flex-wrap: nowrap;\\n            -webkit-box-pack: end;\\n                -ms-flex-pack: end;\\n                    justify-content: flex-end;\\n            pointer-events: none; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .bar-con .bar {\\n              height: 4px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .bar-con .bar.bar-views {\\n                background-color: #867400; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con {\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-orient: horizontal;\\n            -webkit-box-direction: normal;\\n                -ms-flex-direction: row;\\n                    flex-direction: row; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con .tag-prefix, :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con .tag-value {\\n              position: relative;\\n              z-index: 1;\\n              font-weight: normal;\\n              font-size: 1em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con .tag-prefix {\\n              min-width: 120px;\\n              max-width: 120px;\\n              font-style: normal; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con .tag-value {\\n              -webkit-box-flex: 1;\\n                  -ms-flex: 1;\\n                      flex: 1;\\n              font-style: normal; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con.prefixed .tag-value {\\n              font-weight: lighter;\\n              font-size: 0.9em;\\n              font-style: italic; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-views {\\n          position: relative;\\n          -ms-flex-wrap: wrap;\\n              flex-wrap: wrap;\\n          text-align: right;\\n          min-width: 64px;\\n          max-width: 64px;\\n          -webkit-box-pack: end;\\n              -ms-flex-pack: end;\\n                  justify-content: flex-end; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-views > * {\\n            min-width: inherit;\\n            max-width: inherit;\\n            line-height: normal; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-views > span {\\n            font-size: 0.92em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-views > small {\\n            font-size: 0.82em;\\n            font-weight: 200; }\\n  :host .list-con ::ng-deep .list-row.no-data {\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: center;\\n            -ms-flex-pack: center;\\n                justify-content: center; }\\n  :host .list-con ::ng-deep .list-loader {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-pack: center;\\n          -ms-flex-pack: center;\\n              justify-content: center;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center; }\\n  :host .list-con ::ng-deep .list-loader .spinner-con {\\n        position: relative;\\n        width: 32px; }\\n  :host .list-con ::ng-deep .list-loader .spinner-con .spinner-small {\\n          border-top: 1px solid currentColor !important;\\n          max-height: 18px;\\n          min-height: 18px;\\n          max-width: 18px;\\n          min-width: 18px;\\n          margin: -9px 0 0 -9px; }\\n  :host .list-con ::ng-deep virtual-list {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      height: 100%; }\\n  :host .list-con ::ng-deep virtual-list .list-row:last-of-type {\\n        border-bottom: 1px solid transparent; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover {\\n        border-bottom-color: #2c2600; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-tag .bar-con .bar.bar-views {\\n          background-color: #2c2600; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-views {\\n          color: #2c2600; }\\n\"\n\n/***/ }),\n\n/***/ 1433:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.VIEW.TITLE'|translate:lang }}</h1>\\n\\n<div class=\\\"panel-grid\\\">\\n\\t<!-- CRITERIA -->\\n\\t<div class=\\\"panel criteria bg-white text-black\\\">\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<sampled-traffic-criteria *ngIf=\\\"!!filters?.dateRange;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemHeight]=\\\"LIST_ITEM_HEIGHT_PX\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[dateRange]=\\\"filters.dateRange\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[countryCode]=\\\"filters.geoCountryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[regionId]=\\\"filters.geoRegionId\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(dateRangeChange)=\\\"handleDateRangeChange($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(geolocationChange)=\\\"handleGeolocationChange($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(tagsChange)=\\\"handleTagsChange($event)\\\">\\n\\t\\t\\t</sampled-traffic-criteria>\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingCriteria;\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- SUMMARY -->\\n\\t<div class=\\\"panel summary bg-yellow text-dark\\\">\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"!!summaryData;\\\">\\n\\t\\t\\t\\t<sampled-traffic-summary [data]=\\\"summaryData\\\"></sampled-traffic-summary>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingSummary;\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- TAGS -->\\n\\t<div class=\\\"panel tags bg-yellow text-dark\\\">\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<sampled-traffic-tags *ngIf=\\\"!!tagsData;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemHeight]=\\\"LIST_ITEM_HEIGHT_PX\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[dateRange]=\\\"filters.dateRange\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[data]=\\\"tagsData\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[isFetching]=\\\"isFetchingTags\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(search)=\\\"handleSearchTag($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(fetchMore)=\\\"handleFetchTags($event)\\\">\\n\\t\\t\\t</sampled-traffic-tags>\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingTags;\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- - -->\\n</div>\\n\\n<!-- HISTORY -->\\n<div class=\\\"panel history bg-blue text-white\\\">\\n\\t<div class=\\\"panel-body\\\">\\n\\t\\t<sampled-traffic-history *ngIf=\\\"!!historyChart;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [itemHeight]=\\\"LIST_ITEM_HEIGHT_PX\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [countryCode]=\\\"filters.geoCountryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [regionId]=\\\"filters.geoRegionId\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [data]=\\\"historyChart\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (granularity)=\\\"handleGranularityChange($event)\\\">\\n\\t\\t</sampled-traffic-history>\\n\\t\\t<ng-container *ngIf=\\\"isLoadingHistory;\\\">\\n\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t</ng-container>\\n\\t</div>\\n</div>\\n\\n<!-- GEO -->\\n<div class=\\\"panel geolocation bg-black text-white\\\">\\n\\t<div class=\\\"panel-body\\\">\\n\\t\\t<sampled-traffic-geo *ngIf=\\\"!!geoData;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [itemHeight]=\\\"LIST_ITEM_HEIGHT_PX\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [dateRange]=\\\"filters.dateRange\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [countryCode]=\\\"filters.geoCountryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [regionId]=\\\"filters.geoRegionId\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [data]=\\\"geoData\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (selected)=\\\"handleGeoSelect($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (chartError)=\\\"handleGeoChartError($event)\\\">\\n\\t\\t</sampled-traffic-geo>\\n\\t\\t<ng-container *ngIf=\\\"isLoadingGeo;\\\">\\n\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t</ng-container>\\n\\t</div>\\n</div>\\n\\n<!-- - -->\\n\\n\\n<!-- SPINNER -->\\n<ng-template #panelSpinner>\\n\\t<div class=\\\"spinner-con\\\">\\n\\t\\t<div class=\\\"spinner-small\\\"></div>\\n\\t</div>\\n</ng-template>\\n\"\n\n/***/ }),\n\n/***/ 1434:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .panel-grid {\\n  position: relative;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  margin-left: -10px;\\n  margin-right: -10px; }\\n  :host .panel-grid .panel {\\n    margin-left: 10px;\\n    margin-right: 10px; }\\n  :host .panel {\\n  position: relative;\\n  width: 100%;\\n  max-width: 100%;\\n  z-index: 0; }\\n  :host .panel.bg-yellow ::ng-deep virtual-list {\\n    scrollbar-width: thin; }\\n  :host .panel.bg-yellow ::ng-deep virtual-list.top-gradient::before {\\n    background: -webkit-gradient(linear, left bottom, left top, from(rgba(244, 213, 20, 0)), to(#F4D514));\\n    background: linear-gradient(0deg, rgba(244, 213, 20, 0) 0%, #F4D514 100%); }\\n  :host .panel.bg-yellow ::ng-deep virtual-list::after {\\n    background: -webkit-gradient(linear, left top, left bottom, from(rgba(244, 213, 20, 0)), to(#F4D514));\\n    background: linear-gradient(180deg, rgba(244, 213, 20, 0) 0%, #F4D514 100%); }\\n  :host .panel.bg-blue ::ng-deep virtual-list {\\n    scrollbar-width: thin; }\\n  :host .panel.bg-blue ::ng-deep virtual-list.top-gradient::before {\\n    background: -webkit-gradient(linear, left bottom, left top, from(rgba(51, 94, 234, 0)), to(#335eea));\\n    background: linear-gradient(0deg, rgba(51, 94, 234, 0) 0%, #335eea 100%); }\\n  :host .panel.bg-blue ::ng-deep virtual-list::after {\\n    background: -webkit-gradient(linear, left top, left bottom, from(rgba(51, 94, 234, 0)), to(#335eea));\\n    background: linear-gradient(180deg, rgba(51, 94, 234, 0) 0%, #335eea 100%); }\\n  :host .panel.bg-black ::ng-deep virtual-list {\\n    scrollbar-width: thin;\\n    scrollbar-color: #444444 #222222; }\\n  :host .panel.bg-black ::ng-deep virtual-list.top-gradient::before {\\n    background: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0)), to(#000000));\\n    background: linear-gradient(0deg, rgba(0, 0, 0, 0) 0%, #000000 100%); }\\n  :host .panel.bg-black ::ng-deep virtual-list::after {\\n    background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#000000));\\n    background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%); }\\n  :host .panel .panel-body .spinner-con .spinner-small {\\n    border-top-color: currentColor !important; }\\n  :host .panel ::ng-deep .header {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -webkit-box-pack: justify;\\n        -ms-flex-pack: justify;\\n            justify-content: space-between;\\n    -webkit-box-align: center;\\n        -ms-flex-align: center;\\n            align-items: center;\\n    -ms-flex-wrap: nowrap;\\n        flex-wrap: nowrap;\\n    padding-right: 8px; }\\n  :host .panel ::ng-deep .header .title {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column; }\\n  :host .panel ::ng-deep .header .title small {\\n        font-size: 0.6em;\\n        font-weight: 200; }\\n  :host .panel ::ng-deep .header > .btn {\\n      padding-top: 2px;\\n      padding-bottom: 2px; }\\n  :host .panel.criteria {\\n    z-index: 100;\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 800px;\\n            flex: 1 1 800px;\\n    min-width: 200px;\\n    min-height: 100px;\\n    border: 1px solid #FEFEFE; }\\n  :host .panel.summary, :host .panel.tags {\\n    min-height: 150px; }\\n  :host .panel.summary .panel-body, :host .panel.tags .panel-body {\\n      position: relative;\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1; }\\n  :host .panel.summary {\\n    position: relative;\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 150px;\\n            flex: 1 1 150px;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    overflow: hidden; }\\n  :host .panel.summary .panel-body {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -ms-flex-wrap: wrap;\\n          flex-wrap: wrap;\\n      -webkit-box-align: end;\\n          -ms-flex-align: end;\\n              align-items: flex-end;\\n      -webkit-box-pack: end;\\n          -ms-flex-pack: end;\\n              justify-content: flex-end;\\n      margin: -8px; }\\n  :host .panel.tags {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 500px;\\n            flex: 1 1 500px;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .panel.tags .panel-body sampled-traffic-tags {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1; }\\n  :host .panel.history {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 100%;\\n            flex: 1 1 100%;\\n    min-height: 378px; }\\n  :host .panel.geolocation {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 100%;\\n            flex: 1 1 100%;\\n    min-height: 347px; }\\n  :host.is-loading .panel-con .panel .panel-body {\\n  position: unset; }\\n\"\n\n/***/ }),\n\n/***/ 1435:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<a *ngIf=\\\"model.isAvailableInDifferentPlan && (!model.isHiddenWhenNotActive || model.active)\\\" [ngClass]=\\\"getCssClass()\\\" (click)=\\\"showInfoAboutAvaliabilityInOtherPlan(model)\\\">\\n\\t<i *ngIf=\\\"model.icon\\\" class=\\\"fa {{ model.icon }}\\\"></i>\\n\\t<span>{{ model.name }}</span>\\n</a>\\n<ng-template [ngIf]=\\\"model.externalUrl\\\">\\n\\t<a *ngIf=\\\"!model.isAvailableInDifferentPlan && !isParent && (!model.isHiddenWhenNotActive || model.active)\\\" href=\\\"{{ model.externalUrl }}\\\" target=\\\"_blank\\\" [ngClass]=\\\"getCssClass()\\\">\\n\\t\\t<ng-container *ngTemplateOutlet=\\\"itemContent\\\"></ng-container>\\n\\t</a>\\n</ng-template>\\n<ng-template [ngIf]=\\\"!model.externalUrl\\\">\\n\\t<a *ngIf=\\\"!model.isAvailableInDifferentPlan && !isParent && (!model.isHiddenWhenNotActive || model.active)\\\" [routerLink]=\\\"formatRoute()\\\" routerLinkActive=\\\"active\\\" [ngClass]=\\\"getCssClass()\\\">\\n\\t\\t<ng-container *ngTemplateOutlet=\\\"itemContent\\\"></ng-container>\\n\\t</a>\\n</ng-template>\\n<ng-template #itemContent>\\n\\t<i *ngIf=\\\"model.icon\\\" class=\\\"fa {{ model.icon }}\\\"></i>\\n\\t<span>{{ model.name }}</span>\\n\\t<span *ngIf=\\\"model.isBeta\\\" class=\\\"menu-item-beta\\\">&beta;</span>\\n</ng-template>\\n\\n<a *ngIf=\\\"!model.isAvailableInDifferentPlan && isParent && (!model.isHiddenWhenNotActive || model.active)\\\" [routerLink]=\\\"formatRoute()\\\" (click)=\\\"onCollapse.emit(model)\\\" routerLinkActive=\\\"active\\\" [ngClass]=\\\"getCssClass()\\\">\\n\\t<i *ngIf=\\\"model.icon\\\" class=\\\"fa {{ !model.collapsed && model.openIcon ? model.openIcon : model.icon }}\\\"></i>\\n\\t<span>{{ model.name }}</span>\\n\\t<span *ngIf=\\\"model.isBeta\\\" class=\\\"menu-item-beta\\\">&beta;</span>\\n</a>\\n<ul *ngIf=\\\"isSubMenuActive()\\\" class=\\\"sub-menu\\\">\\n\\t<li *ngFor=\\\"let item of model.data\\\" sidebar-menu-item [model]=\\\"item\\\"></li>\\n</ul>\\n\"\n\n/***/ }),\n\n/***/ 1436:\n/***/ (function(module, exports) {\n\nmodule.exports = \"@charset \\\"UTF-8\\\";\\n:host a {\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  font-size: 14px !important; }\\n:host a.active, :host a:active, :host a:focus {\\n    color: inherit;\\n    background: transparent !important; }\\n:host a.active > span:not(.menu-item-beta), :host a:active > span:not(.menu-item-beta), :host a:focus > span:not(.menu-item-beta) {\\n      text-decoration: underline;\\n      -webkit-text-decoration-color: #335eea;\\n              text-decoration-color: #335eea;\\n      text-underline-offset: 4px;\\n      text-decoration-thickness: 1px; }\\n:host a:visited {\\n    color: inherit;\\n    background: transparent !important; }\\n:host:not(.nohovericon).active > a:after, :host:not(.nohovericon) > a.active:after, :host:not(.nohovericon) > a:hover:after {\\n  display: inline-block;\\n  font: normal normal normal 14px/1 FontAwesome;\\n  font-size: inherit;\\n  text-rendering: auto;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n  position: absolute;\\n  font-size: 1em;\\n  top: 50%;\\n  margin-top: -0.5em;\\n  color: #335eea;\\n  right: 1em;\\n  content: \\\"\\\"; }\\n:host:not(.nohovericon).active > a > span:not(.menu-item-beta), :host:not(.nohovericon) > a.active > span:not(.menu-item-beta), :host:not(.nohovericon) > a:hover > span:not(.menu-item-beta) {\\n  text-decoration: underline;\\n  -webkit-text-decoration-color: #335eea;\\n          text-decoration-color: #335eea;\\n  text-underline-offset: 4px;\\n  text-decoration-thickness: 1px; }\\n:host.nohovericon a::after {\\n  display: none !important; }\\n:host:not(.disabled) > a {\\n  cursor: pointer; }\\n:host.checked > a:before {\\n  content: \\\"\\\" !important; }\\n:host.active.checked > a:before {\\n  content: \\\"\\\" !important; }\\n:host.has-sub > a:hover:after {\\n  display: inline-block;\\n  font: normal normal normal 14px/1 FontAwesome;\\n  font-size: inherit;\\n  text-rendering: auto;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n  position: absolute;\\n  font-size: 1em;\\n  top: 50%;\\n  margin-top: -0.5em;\\n  color: #335eea;\\n  right: 1em;\\n  content: \\\"\\\"; }\\n:host.has-sub.collapse-open > .sub-menu {\\n  display: block !important; }\\n:host.has-sub.collapse-open > a:after {\\n  display: inline-block;\\n  font: normal normal normal 14px/1 FontAwesome;\\n  font-size: inherit;\\n  text-rendering: auto;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n  position: absolute;\\n  font-size: 1em;\\n  top: 50%;\\n  margin-top: -0.5em;\\n  color: #335eea;\\n  right: 1em;\\n  content: \\\"\\\"; }\\n:host.has-sub > ul.sub-menu {\\n  background: transparent !important; }\\n:host.has-sub > ul.sub-menu:before {\\n    width: 2px;\\n    background: transparent;\\n    opacity: 0.5;\\n    left: 29px; }\\n:host.has-sub > ul.sub-menu li:not(.disabled) a {\\n    cursor: pointer; }\\n:host.has-sub > ul.sub-menu li > a {\\n    color: #335eea !important; }\\n:host.has-sub > ul.sub-menu li > a:before {\\n      content: ''; }\\n:host.has-sub > ul.sub-menu li > a:hover {\\n      color: #335eea !important; }\\n:host.has-sub > ul.sub-menu li > a:hover:after {\\n        display: inline-block;\\n        font: normal normal normal 14px/1 FontAwesome;\\n        font-size: inherit;\\n        text-rendering: auto;\\n        -webkit-font-smoothing: antialiased;\\n        -moz-osx-font-smoothing: grayscale;\\n        position: absolute;\\n        font-size: 1em;\\n        top: 50%;\\n        margin-top: -0.5em;\\n        color: #335eea;\\n        right: 1em;\\n        content: \\\"\\\"; }\\n:host.has-sub > ul.sub-menu li > a:hover:before {\\n        color: #335eea !important; }\\n:host.has-sub > ul.sub-menu li > a .menu-item-beta {\\n      font-size: 10px;\\n      position: relative;\\n      top: -5px;\\n      letter-spacing: 2px; }\\n:host.has-sub > ul.sub-menu li .available-in-different-plan {\\n    color: #aaa !important; }\\n:host.has-sub > ul.sub-menu li .available-in-different-plan span {\\n      text-decoration: none !important;\\n      color: #aaa !important; }\\n:host.has-sub > ul.sub-menu li .available-in-different-plan:after {\\n      content: none !important; }\\n:host.has-sub > ul.sub-menu li.active > a {\\n    color: !important; }\\n:host.has-sub > ul.sub-menu li.active > a:after {\\n      display: inline-block;\\n      font: normal normal normal 14px/1 FontAwesome;\\n      font-size: inherit;\\n      text-rendering: auto;\\n      -webkit-font-smoothing: antialiased;\\n      -moz-osx-font-smoothing: grayscale;\\n      position: absolute;\\n      font-size: 1em;\\n      top: 50%;\\n      margin-top: -0.5em;\\n      color: #335eea;\\n      right: 1em;\\n      content: \\\"\\\"; }\\n:host.has-sub > ul.sub-menu li.active > a:before {\\n      content: ''; }\\n:host.has-sub > ul.sub-menu li.active .hidden-when-not-active {\\n    padding-left: 30px; }\\n\"\n\n/***/ }),\n\n/***/ 1437:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<ul class=\\\"nav\\\" *ngIf=\\\"active\\\">\\n\\t<li *ngIf=\\\"name!=null\\\" class=\\\"nav-header\\\">{{ name }}</li>\\n\\t<li *ngFor=\\\"let item of model\\\" sidebar-menu-item [model]=\\\"item\\\" (onCollapse)=\\\"onCollapse($event)\\\"></li>\\n</ul>\\n<ul class=\\\"nav foot\\\" *ngIf=\\\"active && !isAppInIframe\\\">\\n\\t<li *ngFor=\\\"let item of footMenu\\\" sidebar-menu-item [model]=\\\"item\\\" (onCollapse)=\\\"onCollapse($event)\\\"></li>\\n</ul>\"\n\n/***/ }),\n\n/***/ 1438:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  max-height: 100%;\\n  -webkit-box-pack: justify;\\n      -ms-flex-pack: justify;\\n          justify-content: space-between;\\n  -webkit-box-align: stretch;\\n      -ms-flex-align: stretch;\\n          align-items: stretch;\\n  -ms-flex-line-pack: start;\\n      align-content: flex-start;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap;\\n  width: 200px;\\n  padding-top: 0;\\n  position: fixed;\\n  top: 0;\\n  bottom: 0;\\n  left: -200px;\\n  background: transparent !important; }\\n  :host.active {\\n    left: 0;\\n    overflow-y: auto; }\\n  :host > ul.nav {\\n    overflow-y: auto;\\n    direction: rtl;\\n    text-align: end;\\n    padding-right: 0; }\\n  :host > ul.nav::-webkit-scrollbar {\\n      width: 8px;\\n      height: 8px;\\n      background: none; }\\n  :host > ul.nav::-webkit-scrollbar-track {\\n      -webkit-box-shadow: none;\\n              box-shadow: none;\\n      background: #EEEEEE; }\\n  :host > ul.nav::-webkit-scrollbar-thumb:window-inactive {\\n      background: #DDDDDD; }\\n  :host > ul.nav::-webkit-scrollbar-thumb {\\n      background: #CCCCCC; }\\n  :host > ul.nav * {\\n      direction: ltr; }\\n  :host > ul.nav li:not(:last-of-type) {\\n    border-bottom: 1px solid transparent !important; }\\n  :host > ul.nav li /deep/ > a {\\n    color: #335eea !important;\\n    font-weight: 600;\\n    line-height: 2em !important; }\\n  :host > ul.nav li /deep/ > a:before {\\n      font-size: 2em; }\\n  :host > ul.nav li /deep/ > a > i {\\n      float: none; }\\n  :host > ul.nav li /deep/ > a:hover {\\n      background: transparent !important;\\n      color: #335eea; }\\n  :host > ul.nav li /deep/ > a .menu-item-beta {\\n      font-size: 10px;\\n      position: relative;\\n      top: -8px;\\n      letter-spacing: 2px; }\\n  :host > ul.nav li.active /deep/ > a {\\n    background: transparent !important;\\n    color: #335eea !important; }\\n  :host ul.nav.foot {\\n    overflow: hidden;\\n    bottom: 0;\\n    width: 100%;\\n    padding-top: 1em;\\n    padding-bottom: 1em;\\n    border-top: 2px solid white; }\\n  :host ul.nav.foot li > /deep/ a {\\n      padding: 0 20px !important; }\\n  :host.with-header {\\n  top: 54px;\\n  height: calc(100% - 54px); }\\n\"\n\n/***/ }),\n\n/***/ 1439:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__header_component__ = __webpack_require__(1440);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"HeaderComponent\", function() { return __WEBPACK_IMPORTED_MODULE_0__header_component__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__header_menu_component__ = __webpack_require__(347);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__header_burger_component__ = __webpack_require__(348);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__header_model__ = __webpack_require__(1441);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__header_model___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__header_model__);\n/* harmony namespace reexport (by used) */ if(__webpack_require__.o(__WEBPACK_IMPORTED_MODULE_3__header_model__, \"HeaderService\")) __webpack_require__.d(__webpack_exports__, \"HeaderService\", function() { return __WEBPACK_IMPORTED_MODULE_3__header_model__[\"HeaderService\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__header_module__ = __webpack_require__(346);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__header_service__ = __webpack_require__(186);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"HeaderService\", function() { return __WEBPACK_IMPORTED_MODULE_5__header_service__[\"a\"]; });\n\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ 1440:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return HeaderComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__service_view_service__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__service_sidebar_service__ = __webpack_require__(36);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar HeaderComponent = (function () {\n    function HeaderComponent(view, sidebar, cdr) {\n        var _this = this;\n        this.view = view;\n        this.sidebar = sidebar;\n        this.cdr = cdr;\n        this.view.resizeStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n    }\n    HeaderComponent.prototype.onBurgerClick = function (active) {\n        if (active == true)\n            this.sidebar.openDefault();\n        else\n            this.sidebar.close();\n    };\n    var _a, _b, _c;\n    HeaderComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'header',\n            host: { 'class': 'header navbar' },\n            template: \"<ng-content></ng-content><burger *ngIf=\\\"mobile\\\" (change)=\\\"onBurgerClick($event)\\\"></burger><header-menu></header-menu>\",\n            styles: [\n                ':host{position:fixed;top:0;left:0;right:0;height:56px;padding-left:10px;background:#FFF;min-width:350px;font-size: 12px;}'\n            ],\n            inputs: ['mobile'],\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__service_view_service__[\"a\" /* ViewService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__service_view_service__[\"a\" /* ViewService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2__service_sidebar_service__[\"a\" /* SidebarService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__service_sidebar_service__[\"a\" /* SidebarService */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]) === \"function\" && _c || Object])\n    ], HeaderComponent);\n    return HeaderComponent;\n}());\n\n\n\n/***/ }),\n\n/***/ 1441:\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n\n/***/ 1442:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div *ngIf=\\\"!messageSent\\\" class=\\\"panel-body\\\">\\n    <form class=\\\"form-horizontal\\\" [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onPasswordChangeFormSubmit()\\\">\\n         <fieldset>\\n            <legend>{{'PASSWORD_CHANGE.TITLE' | translate : lang }}</legend>\\n\\n            <div class=\\\"form-group\\\">\\n                 <label class=\\\"col-md-4 control-label\\\"> {{'PASSWORD_CHANGE.FIELD.OLD_PASSWORD' | translate : lang }} </label>\\n                 <div class=\\\"col-md-8\\\">\\n                     <input class=\\\"form-control\\\" formControlName=\\\"oldPassword\\\" type=\\\"password\\\" placeholder=\\\"{{'PASSWORD_CHANGE.PLACEHOLDER.OLD_PASSWORD' | translate : lang }}\\\">\\n                     <span *ngIf=\\\"form.controls['oldPassword'].hasError('required') && form.controls['oldPassword'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.FIELD_REQUIRED' | translate : lang }}</span>\\n                     <span *ngFor=\\\"let errorMsg of remoteErrorsOldPassword\\\" class=\\\"alert alert-danger\\\">{{ errorMsg }}</span>\\n                 </div>\\n            </div>\\n\\n            <div class=\\\"form-group\\\">\\n                 <label class=\\\"col-md-4 control-label\\\"> {{'PASSWORD_CHANGE.FIELD.NEW_PASSWORD' | translate : lang }} </label>\\n                 <div class=\\\"col-md-8\\\">\\n                     <input class=\\\"form-control\\\" formControlName=\\\"newPassword\\\" type=\\\"password\\\" placeholder=\\\"{{'PASSWORD_CHANGE.PLACEHOLDER.NEW_PASSWORD' | translate : lang }}\\\">\\n                     <span *ngIf=\\\"form.controls['newPassword'].hasError('required') && form.controls['newPassword'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.FIELD_REQUIRED' | translate : lang }}</span>\\n                     <span *ngIf=\\\"form.controls['newPassword'].hasError('minlength') && form.controls['newPassword'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.MIN_LEN_8_CHARACTERS' | translate : lang }}</span>\\n                     <span *ngFor=\\\"let errorMsg of remoteErrorsNewPassword\\\" class=\\\"alert alert-danger\\\">{{ errorMsg }}</span>\\n                 </div>\\n            </div>\\n\\n            <div class=\\\"form-group\\\">\\n                 <label class=\\\"col-md-4 control-label\\\"> {{'PASSWORD_CHANGE.FIELD.NEW_PASSWORD_REPEAT' | translate : lang }} </label>\\n                 <div class=\\\"col-md-8\\\">\\n                     <input class=\\\"form-control\\\" formControlName=\\\"newPasswordRepeat\\\" type=\\\"password\\\" placeholder=\\\"{{'PASSWORD_CHANGE.PLACEHOLDER.NEW_PASSWORD_REPEAT' | translate : lang }}\\\">\\n                     <span class=\\\"help-block\\\" *ngIf=\\\"form.controls['newPasswordRepeat'].hasError('required') && form.controls['newPasswordRepeat'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.FIELD_REQUIRED' | translate : lang }}</span>\\n                     <span class=\\\"help-block\\\" *ngIf=\\\"form.controls['newPasswordRepeat'].hasError('minlength') && form.controls['newPasswordRepeat'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.MIN_LEN_8_CHARACTERS' | translate : lang }}</span>\\n                     <span class=\\\"help-block\\\" *ngIf=\\\"form.controls['newPasswordRepeat'].hasError('notEquivalent') && form.controls['newPasswordRepeat'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.PASSWORDS_DIFFER' | translate : lang }}</span>\\n                 </div>\\n            </div>\\n\\n         </fieldset>\\n\\n         <button type=\\\"submit\\\" class=\\\"btn btn-bradmax\\\" [disabled]=\\\"loading || !form.controls['oldPassword'].valid || !form.controls['newPassword'].valid || !form.controls['newPasswordRepeat'].valid\\\"> {{'PASSWORD_CHANGE.BUTTON.SAVE' | translate : lang }} </button>\\n     </form>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1443:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<table>\\n\\t<tbody>\\n\\t\\t<tr>\\n\\t\\t\\t<td class=\\\"colorpicker-cell\\\">\\n\\t\\t\\t\\t<colorpicker-sample colorpicker></colorpicker-sample>\\n\\t\\t\\t</td>\\n\\t\\t\\t<td class=\\\"colorpicker-cell\\\">\\n\\t\\t\\t\\t<colorpicker-text></colorpicker-text>\\n\\t\\t\\t</td>\\n\\t\\t</tr>\\n\\t</tbody>\\n</table>\"\n\n/***/ }),\n\n/***/ 1444:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: block;\\n  position: relative;\\n  margin: 0px;\\n  width: 100%; }\\n  :host table {\\n    width: 100%; }\\n  :host table tbody tr td {\\n      position: relative; }\\n  :host table tbody tr td:first-child {\\n        width: 33%; }\\n  :host table tbody tr td:last-child {\\n        width: 66%; }\\n\"\n\n/***/ }),\n\n/***/ 1445:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"arrow arrow-{{positionValue[config.position]}}\\\" [style.top.px]=\\\"style.arrowTop\\\"></div>\\n<div class=\\\"saturation-lightness\\\" [slider] [style.background-color]=\\\"data.hueSliderColor\\\" [rgX]=\\\"1\\\" [rgY]=\\\"1\\\"\\n\\t(newValue)=\\\"data.setSaturationAndBrightness($event)\\\">\\n\\t<div class=\\\"cursor\\\" [style.left.px]=\\\"data.slider.s\\\" [style.top.px]=\\\"data.slider.v\\\"></div>\\n</div>\\n<div class=\\\"hue\\\" [slider] [rgX]=\\\"1\\\" (newValue)=\\\"data.setHue($event)\\\">\\n\\t<div class=\\\"cursor\\\" [style.left.px]=\\\"data.slider.h\\\"></div>\\n</div>\\n<div class=\\\"alpha\\\" [slider] [style.background-color]=\\\"data.alphaSliderColor\\\" [rgX]=\\\"1\\\"\\n\\t (newValue)=\\\"data.setAlpha($event)\\\">\\n\\t<div class=\\\"cursor\\\" [style.left.px]=\\\"data.slider.a\\\"></div>\\n</div>\\n<colorpicker-sample></colorpicker-sample>\\n<colorpicker-text></colorpicker-text>\\n<div class=\\\"buttons\\\">\\n\\t<button type=\\\"button\\\" (click)=\\\"resetColor()\\\" >reset</button>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1446:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  position: absolute;\\n  top: 0;\\n  left: 40px;\\n  width: 232px;\\n  height: 290px;\\n  border: 1px solid lightgray;\\n  z-index: 99999;\\n  background-color: white;\\n  -webkit-user-select: none;\\n     -moz-user-select: none;\\n      -ms-user-select: none;\\n          user-select: none;\\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25);\\n          box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25); }\\n  :host, :host * {\\n    -webkit-box-sizing: border-box;\\n            box-sizing: border-box;\\n    margin: 0;\\n    font-size: 11px; }\\n  :host .saturation-lightness {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    width: 230px;\\n    height: 130px;\\n    background-image: url(\\\"data:image/png;base64,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\\\"); }\\n  :host .hue {\\n    position: absolute;\\n    top: 147px;\\n    left: 70px;\\n    width: 150px;\\n    height: 16px;\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwkUFWbCCAAAAFxJREFUaN7t0kEKg0AQAME2x83/n2qu5qCgD1iDhCoYdpnbQC9bbY1qVO/jvc6k3ad91s7/7F1/csgPrujuQ17BDYSFsBAWwgJhISyEBcJCWAgLhIWwEBYIi2f7Ar/1TCgFH2X9AAAAAElFTkSuQmCC\\\"); }\\n  :host .alpha {\\n    position: absolute;\\n    top: 172px;\\n    left: 70px;\\n    width: 150px;\\n    height: 16px;\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwYQlZMa3gAAAWVJREFUaN7tmEGO6jAQRCsOArHgBpyAJYGjcGocxAm4A2IHpmoWE0eBH+ezmFlNvU06shJ3W6VEelWMUQAIIF9f6qZpimsA1LYtS2uF51/u27YVAFZVRUkEoGHdPV/sIcbIEIIkUdI/9Xa7neyv61+SWFUVAVCSct00TWn2fv6u3+Ecfd3tXzy/0+nEUu+SPjo/kqzrmiQpScN6v98XewfA8/lMkiLJ2WxGSUopcT6fM6U0NX9/frfbjev1WtfrlZfLhYfDQQHG/AIOlnGwjINlHCxjHCzjYJm/TJWdCwquJXseFFzGwDNNeiKMOJTO8xQdDQaeB29+K9efeLaBo9J7vdvtJj1RjFFjfiv7qv95tjx/7leSQgh93e1ffMeIp6O+YQjho/N791t1XVOSSI7N//K+4/GoxWLBx+PB5/Op5XLJ+/3OlJJWqxU3m83ovv5iGf8KjYNlHCxjHCzjYBkHy5gf5gusvQU7U37jTAAAAABJRU5ErkJggg==\\\"); }\\n  :host colorpicker-sample {\\n    position: absolute;\\n    top: 147px;\\n    left: 15px;\\n    width: 40px;\\n    height: 40px; }\\n  :host colorpicker-text {\\n    position: absolute;\\n    top: 205px;\\n    left: 0;\\n    width: 230px;\\n    height: 50px;\\n    padding: 5px 15px;\\n    border-top: 1px solid lightgray; }\\n  :host .buttons {\\n    position: absolute;\\n    top: 255px;\\n    left: 0px;\\n    width: 230px;\\n    height: 32px;\\n    border-top: 1px solid lightgray; }\\n  :host .buttons button, :host .buttons button:active, :host .buttons button:focus, :host .buttons button:hover {\\n      outline: none !important;\\n      border: none !important;\\n      -webkit-box-shadow: none !important;\\n              box-shadow: none !important;\\n      background: none !important;\\n      color: inherit !important;\\n      width: inherit !important;\\n      height: inherit !important; }\\n  :host .buttons button:hover {\\n      background: #EFEFEF !important; }\\n  :host input {\\n    text-align: center;\\n    font-size: 13px;\\n    height: 26px;\\n    -moz-appearance: textfield; }\\n  :host input:invalid {\\n      -webkit-box-shadow: none;\\n              box-shadow: none; }\\n  :host input:-moz-submit-invalid {\\n      box-shadow: none; }\\n  :host input:-moz-ui-invalid {\\n      box-shadow: none; }\\n  :host input::-webkit-inner-spin-button, :host input::-webkit-outer-spin-button {\\n      -webkit-appearance: none;\\n      margin: 0; }\\n  :host i {\\n    cursor: default;\\n    position: relative; }\\n  :host .cursor-sv {\\n    cursor: default;\\n    position: relative;\\n    border-radius: 50%;\\n    width: 15px;\\n    height: 15px;\\n    border: #ddd solid 1px; }\\n  :host .cursor {\\n    cursor: default;\\n    position: relative;\\n    border-radius: 50%;\\n    width: 16px;\\n    height: 16px;\\n    border: #222 solid 2px; }\\n  :host .arrow {\\n    height: 0;\\n    width: 0;\\n    border-style: solid;\\n    position: absolute;\\n    z-index: 999999; }\\n  :host .arrow.arrow-center {\\n      display: none; }\\n  :host .arrow.arrow-right {\\n      border-width: 5px 10px;\\n      border-color: transparent lightgrey transparent transparent;\\n      top: 10px;\\n      left: -20px; }\\n  :host .arrow.arrow-left {\\n      border-width: 5px 10px;\\n      border-color: transparent transparent transparent lightgrey;\\n      top: 10px;\\n      left: 231px; }\\n  :host .arrow.arrow-bottom {\\n      border-width: 10px 5px;\\n      border-color: transparent transparent lightgrey transparent;\\n      top: -20px;\\n      left: 10px; }\\n  :host .arrow.arrow-top {\\n      border-width: 10px 5px;\\n      border-color: lightgrey transparent transparent transparent;\\n      left: 10px; }\\n\"\n\n/***/ }),\n\n/***/ 1447:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"selected-color-background\\\"></div>\\n<div [style.background-color]=\\\"data.color\\\" class=\\\"selected-color\\\"></div>\\n\"\n\n/***/ }),\n\n/***/ 1448:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  position: absolute;\\n  display: block;\\n  width: 40px;\\n  height: 40px;\\n  top: 50%;\\n  left: 50%;\\n  margin-top: -20px;\\n  margin-left: -20px;\\n  background-color: inherit;\\n  border: 1px solid lightgray;\\n  border-radius: 50%;\\n  overflow: hidden; }\\n  :host .selected-color, :host .selected-color-background {\\n    position: absolute;\\n    width: 100%;\\n    height: 100%;\\n    border-radius: 50%;\\n    background-color: inherit; }\\n  :host .selected-color-background {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAh0lEQVRYR+2W0QlAMQgD60zdfwOdqa8TmI/wQMr5K0I5bZLIzLOa2nt37VVVbd+dDx5obgCC3KBLwJ2ff4PnVidkf+ucIhw80HQaCLo3DMH3CRK3iFsmAWVl6hPNDwt8EvNE5q+YuEXcMgkonVM6SdyCoEvAnZ8v1Hjx817MilmxSUB5rdLJDycZgUAZUch/AAAAAElFTkSuQmCC\\\"); }\\n\"\n\n/***/ }),\n\n/***/ 1449:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div  *ngIf=\\\"data.format == data.formatValue.hsla\\\"  class=\\\"hsla-text\\\">\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"360\\\" [rg]=\\\"360\\\" (newValue)=\\\"data.setHue($event)\\\" \\n\\t\\t[value]=\\\"data.hslaText.h\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [rg]=\\\"100\\\" (newValue)=\\\"data.setSaturation($event)\\\" \\n\\t\\t[value]=\\\"data.hslaText.s\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [rg]=\\\"100\\\" (newValue)=\\\"data.setLightness($event)\\\" \\n\\t\\t[value]=\\\"data.hslaText.l\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]+([\\\\.,][0-9]{1,2})?\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" [rg]=\\\"1\\\" \\n\\t\\t(newValue)=\\\"data.setAlpha($event)\\\" [value]=\\\"data.hslaText.a\\\"/>\\n\\t<div>H</div>\\n\\t<div>S</div>\\n\\t<div>L</div>\\n\\t<div>A</div>\\n</div>\\n\\n<div  *ngIf=\\\"data.format == data.formatValue.rgba\\\"  class=\\\"rgba-text\\\">\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"255\\\" [rg]=\\\"255\\\" (newValue)=\\\"data.setR($event)\\\" \\n\\t\\t[value]=\\\"data.rgbaText.r\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"255\\\" [rg]=\\\"255\\\" (newValue)=\\\"data.setG($event)\\\" \\n\\t\\t[value]=\\\"data.rgbaText.g\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"255\\\" [rg]=\\\"255\\\" (newValue)=\\\"data.setB($event)\\\" \\n\\t\\t[value]=\\\"data.rgbaText.b\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]+([\\\\.,][0-9]{1,2})?\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" [rg]=\\\"1\\\" \\n\\t\\t(newValue)=\\\"data.setAlpha($event)\\\" [value]=\\\"data.rgbaText.a\\\"/>\\n\\t<div>R</div>\\n\\t<div>G</div>\\n\\t<div>B</div>\\n\\t<div>A</div>\\n</div>\\n\\n<div *ngIf=\\\"data.format == data.formatValue.hex\\\" class=\\\"hex-text\\\">\\n\\t<input [text] (newValue)=\\\"data.setColorFromString($event)\\\" [value]=\\\"data.hexText\\\"/>\\n\\t<div>Hex</div>\\n</div>\\n\\n<a (click)=\\\"formatPolicy()\\\" class=\\\"type-policy\\\"></a>\\n\"\n\n/***/ }),\n\n/***/ 1450:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: inline-block;\\n  position: relative;\\n  width: 200px;\\n  height: auto;\\n  white-space: nowrap;\\n  overflow: hidden; }\\n  :host input {\\n    text-align: center;\\n    font-size: 13px;\\n    height: 26px;\\n    -moz-appearance: textfield; }\\n  :host input:invalid {\\n      -webkit-box-shadow: none;\\n              box-shadow: none; }\\n  :host input:-moz-submit-invalid {\\n      box-shadow: none; }\\n  :host input:-moz-ui-invalid {\\n      box-shadow: none; }\\n  :host input::-webkit-inner-spin-button, :host input::-webkit-outer-spin-button {\\n      -webkit-appearance: none;\\n      margin: 0; }\\n  :host i {\\n    cursor: default;\\n    position: relative; }\\n  :host .type-policy {\\n    float: left;\\n    background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAYAAAAffCjxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACewAAAnsB01CO3AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVEiJ7ZY9axRRFIafsxMStrLQJpAgpBFhi+C9w1YSo00I6RZ/g9vZpBf/QOr4GyRgkSKNSrAadsZqQGwCkuAWyRZJsySwvhZ7N/vhzrgbLH3Ld8597jlzz50zJokyxXH8DqDVar0qi6v8BbItqSGpEcfxdlmsFWXkvX8AfAVWg3UKPEnT9GKujMzsAFgZsVaCN1VTQd77XUnrgE1kv+6935268WRpzrnHZvYRWC7YvC3pRZZl3wozqtVqiyH9IgjAspkd1Gq1xUJQtVrdB9ZKIAOthdg/Qc65LUk7wNIMoCVJO865rYFhkqjX6/d7vV4GPJwBMqofURS5JEk6FYBer/eeYb/Mo9WwFnPOvQbeAvfuAAK4BN4sAJtAG/gJIElmNuiJyba3EGNmZiPeZuEVmVell/Y/6N+CzDn3AXhEOOo7Hv/3BeAz8IzQkMPnJbuPx1wC+yYJ7/0nYIP5S/0FHKdp+rwCEEXRS/rf5Hl1Gtb2M0iSpCOpCZzPATmX1EySpHMLAsiy7MjMDoHrGSDXZnaYZdnRwBh7J91utwmczAA6CbG3GgPleX4jqUH/a1CktqRGnuc3hSCAMB32gKspkCtgb3KCQMmkjeP4WNJThrNNZval1WptTIsv7JtQ4tmIdRa8qSoEpWl6YWZNoAN0zKxZNPehpLSBZv2t+Q0CJ9lLnARQLAAAAABJRU5ErkJggg==\\\") no-repeat center;\\n    background-size: 8px 16px;\\n    margin-top: 7px;\\n    width: 16px;\\n    height: 24px; }\\n  :host .hsla-text, :host .rgba-text, :host .hex-text {\\n    float: left; }\\n  :host .hsla-text input, :host .rgba-text input, :host .hex-text input {\\n      float: left;\\n      border: lightgray solid 1px;\\n      padding: 5px 1px;\\n      text-align: center;\\n      -webkit-box-shadow: none;\\n              box-shadow: none;\\n      outline: none; }\\n  :host .hsla-text div, :host .rgba-text div, :host .hex-text div {\\n      float: left;\\n      text-align: center;\\n      font-size: 11px;\\n      font-weight: 200; }\\n  :host .hsla-text input, :host .rgba-text input {\\n    width: 40px;\\n    margin: 0 0 0 7px; }\\n  :host .hsla-text input:first-of-type, :host .rgba-text input:first-of-type {\\n      margin-left: 0; }\\n  :host .hsla-text div, :host .rgba-text div {\\n    width: 40px;\\n    margin-left: 7px; }\\n  :host .hsla-text div:first-of-type, :host .rgba-text div:first-of-type {\\n      margin-left: 0; }\\n  :host .hsla-text div:nth-child(5), :host .rgba-text div:nth-child(5) {\\n      clear: left; }\\n  :host .hex-text input {\\n    width: 181px; }\\n  :host .hex-text div {\\n    clear: left;\\n    width: 181px; }\\n\"\n\n/***/ }),\n\n/***/ 1451:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"player-holder\\\">\\n\\t<div class=\\\"player-con\\\" #player></div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1452:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1;\\n          flex: 1;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  -webkit-box-pack: justify;\\n      -ms-flex-pack: justify;\\n          justify-content: space-between;\\n  -webkit-box-align: stretch;\\n      -ms-flex-align: stretch;\\n          align-items: stretch;\\n  height: 100%; }\\n  :host .player-holder {\\n    position: relative;\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -ms-flex-wrap: nowrap;\\n        flex-wrap: nowrap;\\n    -webkit-box-pack: center;\\n        -ms-flex-pack: center;\\n            justify-content: center;\\n    -webkit-box-align: stretch;\\n        -ms-flex-align: stretch;\\n            align-items: stretch; }\\n  :host .player-holder .player-con {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      background-color: black; }\\n\"\n\n/***/ }),\n\n/***/ 1453:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- preview bar -->\\n<div class=\\\"build-bar preview\\\">\\n\\t<div class=\\\"build-bar-label\\\">\\n\\t\\t<label><small>preview&nbsp;of&nbsp;</small><i>'<strong>{{data.buildName}}</strong>'</i>&nbsp;player</label>\\n\\t\\t<small class=\\\"date-data\\\"><small>created&nbsp;at:</small> {{formatDate(data.createdAt)}}&nbsp;<small>{{formatTime(data.createdAt)}}</small></small>\\n\\t</div>\\n\\t<div class=\\\"build-bar-label aspect-ratio\\\">\\n\\t\\t<label for=\\\"aspect-ratio\\\"><small>set&nbsp;</small><strong>preview</strong><small>&nbsp;aspect&nbsp;ratio:&nbsp;</small></label>\\n\\t\\t<select id=\\\"aspect-ratio\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t[ngModel]=\\\"previewCss\\\"\\n\\t\\t\\t\\t\\t\\t(ngModelChange)=\\\"handlePreviewAspect($event)\\\">\\n\\t\\t\\t<option *ngFor=\\\"let option of RATIO_CLASSES;\\\" [value]=\\\"option.value\\\">{{ option.label }}</option>\\n\\t\\t\\t<option [value]=\\\"null\\\">none</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- preview player -->\\n<div class=\\\"player-preview\\\" [ngClass]=\\\"previewCss\\\" [style.height]=\\\"previewHeight\\\">\\n\\t<player-builder-player></player-builder-player>\\n</div>\\n\\n<!-- preview size -->\\n<div class=\\\"size-bar\\\" (mousedown)=\\\"handlePreviewResize($event)\\\"></div>\\n\\n<!-- form bar -->\\n<div class=\\\"build-bar form\\\">\\n\\t<!-- options -->\\n\\t<div class=\\\"build-bar-con options\\\">\\n\\t\\t<div class=\\\"build-bar-label\\\">\\n\\t\\t\\t<label>options:&nbsp;</label>\\n\\t\\t</div>\\n\\t\\t<ul class=\\\"nav nav-pills\\\">\\n\\t\\t\\t<li *ngFor=\\\"let tab of TABS;\\\" role=\\\"presentation\\\" routerLink=\\\"{{tab.route}}\\\" routerLinkActive=\\\"active\\\" [class.disabled]=\\\"tab.disabled\\\">\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn\\\" routerLink=\\\"{{tab.route}}\\\" routerLinkActive=\\\"active btn-bradmax\\\" [disabled]=\\\"tab.disabled\\\">{{tab.text}}</button>\\n\\t\\t\\t</li>\\n\\t\\t</ul>\\n\\t</div>\\n\\t<!-- submit -->\\n\\t<div class=\\\"build-bar-con submit\\\">\\n\\t\\t<div class=\\\"build-bar-label\\\">\\n\\t\\t\\t<span class=\\\"spacer\\\">&nbsp;</span>\\n\\t\\t\\t<small class=\\\"date-data\\\"><small>updated&nbsp;at:</small> {{formatDate(data.updatedAt)}}&nbsp;<small>{{formatTime(data.updatedAt)}}</small></small>\\n\\t\\t\\t<small class=\\\"date-data\\\">\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"!!data.publishedAt; else notPublished;\\\">\\n\\t\\t\\t\\t\\t<small>published&nbsp;at:</small> {{formatDate(data.publishedAt)}}&nbsp;<small>{{formatTime(data.publishedAt)}}</small>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t<ng-template #notPublished>\\n\\t\\t\\t\\t\\t<small class=\\\"date-data\\\"><small>&nbsp;not&nbsp;published</small></small>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</small>\\n\\t\\t</div>\\n\\t\\t<ul class=\\\"nav nav-pills\\\">\\n\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"statusButtons;context:{dirty:data.isDirty, wasPublished:!!data.publishedAt}\\\"></ng-container>\\n\\t\\t\\t<ng-template #statusButtons let-dirty=\\\"dirty\\\" let-wasPublished=\\\"wasPublished\\\">\\n\\t\\t\\t\\t<!-- reset -->\\n\\t\\t\\t\\t<li [class.disabled]=\\\"!dirty\\\">\\n\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn\\\" (click)=\\\"data.reset()\\\" [disabled]=\\\"!dirty\\\">reset&nbsp;<i class=\\\"fa fa-history\\\"></i></button>\\n\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t<!-- save -->\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn\\\" [class.btn-warning]=\\\"dirty\\\" (click)=\\\"clickSave()\\\">save&nbsp;<i class=\\\"fa fa-save\\\"></i></button>\\n\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t<!-- publish -->\\n\\t\\t\\t\\t<!-- <li [class.disabled]=\\\"!!wasPublished || (wasPublished && !dirty)\\\">\\n\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn\\\" [class.btn-warning]=\\\"dirty\\\" (click)=\\\"clickPublish()\\\" [disabled]=\\\"!!wasPublished || (wasPublished && !dirty)\\\">publish&nbsp;<i class=\\\"fa fa-paper-plane\\\"></i></button>\\n\\t\\t\\t\\t</li> -->\\n\\t\\t\\t</ng-template>\\n\\t\\t</ul>\\n\\t</div>\\n</div>\\n\\n<!-- outlet -->\\n<div class=\\\"forms-outlet\\\">\\n\\t<router-outlet></router-outlet>\\n\\t<!-- <code style=\\\"display: flex;\\\">\\n\\t\\t<small style=\\\"display: flex;flex-direction: column;max-width: 50%;\\\">\\n\\t\\t\\t<label>publishedAt: {{data.publishedAt|json}}</label>\\n\\t\\t\\t<label>formData:</label>\\n\\t\\t\\t<small><pre>{{data.formData?.variable|json}}</pre></small>\\n\\t\\t</small>\\n\\t\\t<small style=\\\"display: flex;flex-direction: column;max-width: 50%;\\\">\\n\\t\\t\\t<label>savedData:</label>\\n\\t\\t\\t<small><pre>{{data.savedData?.variable|json}}</pre></small>\\n\\t\\t</small>\\n\\t</code> -->\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1454:\n/***/ (function(module, exports) {\n\nmodule.exports = \"@use \\\"sass:math\\\" as math;\\n:host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  height: 100vh;\\n  margin: -16px -24px;\\n  overflow-x: visible;\\n  overflow-y: auto; }\\n:host::-webkit-scrollbar {\\n    width: 8px;\\n    height: 8px;\\n    background: none; }\\n:host::-webkit-scrollbar-track {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n    background: #EEEEEE; }\\n:host::-webkit-scrollbar-thumb:window-inactive {\\n    background: #DDDDDD; }\\n:host::-webkit-scrollbar-thumb {\\n    background: #CCCCCC; }\\n:host.with-header {\\n    height: calc(100vh - 56px);\\n    margin: -16px -24px; }\\n:host .date-data {\\n    font-size: 1.2rem; }\\n:host .date-data small {\\n      color: #808080; }\\n:host .player-preview {\\n    min-height: 200px;\\n    height: 46%; }\\n@supports (aspect-ratio: 1) {\\n      :host .player-preview.ratio21x9 {\\n        aspect-ratio: 21/9;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio16x9 {\\n        aspect-ratio: 16/9;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio4x3 {\\n        aspect-ratio: 4/3;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio3x2 {\\n        aspect-ratio: 3/2;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio2x1 {\\n        aspect-ratio: 2/1;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio1x1 {\\n        aspect-ratio: 1;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; } }\\n:host .player-preview {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    padding: 0.5rem 1rem; }\\n:host .size-bar, :host .build-bar {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    border-top: 2px solid transparent;\\n    border-bottom: 2px solid #f8f8f8; }\\n:host .size-bar {\\n    cursor: ns-resize;\\n    -webkit-box-align: center;\\n        -ms-flex-align: center;\\n            align-items: center;\\n    -webkit-box-pack: center;\\n        -ms-flex-pack: center;\\n            justify-content: center;\\n    min-height: 1.2rem;\\n    height: 1.2rem;\\n    max-height: 1.2rem;\\n    border-top-color: #f8f8f8; }\\n:host .size-bar * {\\n      pointer-events: none; }\\n:host .size-bar:after {\\n      content: 'drag to resize player';\\n      font-weight: 100;\\n      line-height: 1rem;\\n      font-size: 1rem;\\n      opacity: 0.45; }\\n:host .size-bar:hover {\\n      min-height: 2rem;\\n      height: 2rem;\\n      max-height: 2rem;\\n      margin: -0.4rem 0;\\n      background-color: whitesmoke; }\\n:host .size-bar:hover:after {\\n        opacity: 1; }\\n:host .build-bar {\\n    padding: 0 1rem;\\n    -webkit-box-align: end;\\n        -ms-flex-align: end;\\n            align-items: flex-end; }\\n:host .build-bar-label {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      font-size: 1.5rem;\\n      padding: 1rem 0; }\\n:host .build-bar-label label {\\n        margin: 0;\\n        white-space: nowrap; }\\n:host .build-bar-con {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      -webkit-box-align: start;\\n          -ms-flex-align: start;\\n              align-items: flex-start;\\n      -ms-flex-line-pack: start;\\n          align-content: flex-start;\\n      margin: 0 0.5em; }\\n:host .build-bar-con:first-child {\\n        margin-left: 0; }\\n:host .build-bar-con:last-child {\\n        margin-right: 0; }\\n:host .build-bar-con.submit {\\n        -webkit-box-align: end;\\n            -ms-flex-align: end;\\n                align-items: flex-end; }\\n:host .build-bar.preview {\\n      -webkit-box-pack: justify;\\n          -ms-flex-pack: justify;\\n              justify-content: space-between; }\\n:host .build-bar.preview .build-bar-label {\\n        -webkit-box-orient: vertical;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: column;\\n                flex-direction: column; }\\n:host .build-bar.preview .build-bar-label.aspect-ratio {\\n          display: none; }\\n@supports (aspect-ratio: 1) {\\n          :host .build-bar.preview .build-bar-label.aspect-ratio {\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-orient: horizontal;\\n            -webkit-box-direction: normal;\\n                -ms-flex-direction: row;\\n                    flex-direction: row;\\n            -webkit-box-align: center;\\n                -ms-flex-align: center;\\n                    align-items: center;\\n            -webkit-box-pack: center;\\n                -ms-flex-pack: center;\\n                    justify-content: center;\\n            -ms-flex-wrap: nowrap;\\n                flex-wrap: nowrap; }\\n            :host .build-bar.preview .build-bar-label.aspect-ratio label {\\n              font-weight: 200; } }\\n:host .build-bar.preview .nav-pills {\\n        margin: 0; }\\n:host .build-bar.form {\\n      -webkit-box-pack: justify;\\n          -ms-flex-pack: justify;\\n              justify-content: space-between;\\n      -webkit-box-align: start;\\n          -ms-flex-align: start;\\n              align-items: flex-start; }\\n:host .build-bar.form .build-bar-label {\\n        width: 100%;\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: horizontal;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: row;\\n                flex-direction: row;\\n        -webkit-box-align: end;\\n            -ms-flex-align: end;\\n                align-items: flex-end;\\n        -webkit-box-pack: justify;\\n            -ms-flex-pack: justify;\\n                justify-content: space-between; }\\n:host .build-bar.form .build-bar-label .date-data {\\n          margin-left: 1rem; }\\n:host .build-bar .nav-pills {\\n      margin-bottom: 0.5rem; }\\n:host .build-bar .nav-pills li {\\n        margin: 2px; }\\n:host .build-bar .nav-pills li .btn[disabled] {\\n          opacity: 0.44; }\\n:host .forms-outlet {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    max-width: 100%;\\n    min-height: 200px;\\n    padding: 0.5rem 0; }\\n\"\n\n/***/ }),\n\n/***/ 1455:\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n<a href=\\\"{{BASE}}/{{link}}\\\" target=\\\"_blank\\\" title=\\\"{{'PLAYER.CONFIG.DOCS.TEXT'|translate:lang}} {{'PLAYER.CONFIG.DOCS.LINK'|translate:lang}}\\\"><i class=\\\"fa fa-fw fa-question-circle\\\"></i></a>\\n\"\n\n/***/ }),\n\n/***/ 1456:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: inline-block;\\n  white-space: normal;\\n  color: #868686;\\n  font-weight: 400;\\n  font-size: 0.9em; }\\n  :host a {\\n    color: inherit;\\n    text-decoration: none;\\n    opacity: 0.64; }\\n  :host a:hover {\\n      opacity: 1; }\\n\"\n\n/***/ }),\n\n/***/ 1457:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- logoFile -->\\n<div class=\\\"form-group full-w\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo image:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoFile\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<upload-image [resample]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[minWidth]=\\\"20\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[minHeight]=\\\"20\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[maxWidth]=\\\"1000\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[maxHeight]=\\\"1000\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[maxFileSize]=\\\"60000\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[imageData]=\\\"data.logoFile\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(imageChange)=\\\"data.logoFile = $event\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(maxSizeCallback)=\\\"onTooBigLogo($event)\\\">\\n\\t\\t</upload-image>\\n\\t</div>\\n</div>\\n\\n<!-- logoLink -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo link address:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoLink\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<input type=\\\"text\\\" class=\\\"form-control input-sm\\\" [(ngModel)]=\\\"data.logoLink\\\" [disabled]=\\\"!data.logoFile\\\" />\\n\\t</div>\\n</div>\\n\\n<!-- logoLinkTarget -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo link target:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoLinkTarget\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select class=\\\"form-control\\\" [(ngModel)]=\\\"data.logoLinkTarget\\\" [disabled]=\\\"!data.logoFile || !data.logoLink\\\">\\n\\t\\t\\t<option>none</option>\\n\\t\\t\\t<option value=\\\"_blank\\\">_blank</option>\\n\\t\\t\\t<option value=\\\"_self\\\">_self</option>\\n\\t\\t\\t<option value=\\\"_parent\\\">_parent</option>\\n\\t\\t\\t<option value=\\\"_top\\\">_top</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- logoAutohide -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Autohide brand button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoAutohide\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"jsapi\\\" [(checked)]=\\\"data.logoAutohide\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\" [disabled]=\\\"!data.logoFile\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- logoVisibleDuringAdPlayback -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Show brand during ads playback:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoVisibleDuringAdPlayback\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"jsapi\\\" [(checked)]=\\\"data.logoVisibleDuringAdPlayback\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\" [disabled]=\\\"!data.logoFile\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- logoXPosition -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo horizontal position:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoXPosition\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select class=\\\"form-control\\\" [(ngModel)]=\\\"data.logoXPosition\\\" [disabled]=\\\"!data.logoFile\\\">\\n\\t\\t\\t<option [value]=\\\"'left'\\\">left</option>\\n\\t\\t\\t<option [value]=\\\"'right'\\\">right</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- logoYPosition -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo vertical position:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoYPosition\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select class=\\\"form-control\\\" [(ngModel)]=\\\"data.logoYPosition\\\" [disabled]=\\\"!data.logoFile\\\">\\n\\t\\t\\t<option [value]=\\\"'top'\\\">top</option>\\n\\t\\t\\t<option [value]=\\\"'bottom'\\\">bottom</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1458:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host /deep/ upload-image .upload-image-con::before {\\n  -webkit-filter: opacity(0.14);\\n          filter: opacity(0.14); }\\n\\n:host /deep/ upload-image .upload-image-con .upload-title {\\n  font-size: 28px !important;\\n  line-height: 40px !important; }\\n\\n:host /deep/ upload-image .upload-image-con .upload-title span {\\n    color: #2c2c2c !important; }\\n\"\n\n/***/ }),\n\n/***/ 1459:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"form-group full-w screenshots\\\">\\n\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>End splash <strong>type</strong>:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"endSplash\\\"></player-builder-docs>\\n\\t</div>\\n\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<ng-container *ngFor=\\\"let splash of ENDSPLASHED; first as isFirst;\\\">\\n\\n\\t\\t\\t<button (click)=\\\"data.endSplash = splash\\\" type=\\\"button\\\" class=\\\"btn screenshot\\\" [class.active]=\\\"data.endSplash === splash\\\">\\n\\t\\t\\t\\t<img class=\\\"screenshot-img\\\" [src]=\\\"formatImageSrc(splash)\\\" [alt]=\\\"splash\\\">\\n\\t\\t\\t\\t<span class=\\\"screenshot-info {{data.skinName}}\\\">\\n\\t\\t\\t\\t\\t<span>{{splash}}</span>\\n\\t\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [class.fa-check-circle-o]=\\\"data.endSplash === splash\\\" [class.fa-circle-o]=\\\"!(data.endSplash === splash)\\\"></i>\\n\\t\\t\\t\\t</span>\\n\\t\\t\\t</button>\\n\\n\\t\\t</ng-container>\\n\\t</div>\\n\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1460:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- <div class=\\\"form-con\\\"> -->\\n\\n<!-- pictureInPictureButtonVisible -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"pictureInPictureButtonVisible\\\"><strong>Picture-in-Picture</strong>&nbsp;button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"pictureInPictureButtonVisible\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"pictureInPictureButtonVisible\\\" [(checked)]=\\\"data.pictureInPictureButtonVisible\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- videoCastEnabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"videoCastEnabled\\\"><strong>Chromecast</strong>&nbsp;/&nbsp;<strong>AirPlay</strong>&nbsp;buttons:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"videoCastEnabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"videoCastEnabled\\\" [(checked)]=\\\"data.videoCastEnabled\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- fullscreenEnabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"fullscreenEnabled\\\"><strong>Fullscreen</strong>&nbsp;button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"fullscreenEnabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"fullscreenEnabled\\\" [(checked)]=\\\"data.fullscreenEnabled\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- playbackRateEnabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"playbackRateEnabled\\\"><strong>Playback rate </strong>&nbsp;button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"playbackRateEnabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"playbackRateEnabled\\\" [(checked)]=\\\"data.playbackRateEnabled\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- contextMenuDisabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"contextMenuDisabled\\\"><strong>Context menu</strong>&nbsp;support:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"contextMenuDisabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"contextMenuDisabled\\\" [(checked)]=\\\"data.contextMenuDisabled\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- qualitySelectionEnabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"qualitySelectionEnabled\\\"><strong>Quality&nbsp;selection</strong>&nbsp;button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"qualitySelectionEnabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"qualitySelectionEnabled\\\" [(checked)]=\\\"data.qualitySelectionEnabled\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"> </switch>\\n\\t</div>\\n</div>\\n\\n<!-- qualityLabelType -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"qualityLabelType\\\"><strong>Quality&nbsp;selection</strong>&nbsp;label:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"qualityLabelType\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select id=\\\"qualityLabelType\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"data.qualityLabelType\\\" [disabled]=\\\"!data.qualitySelectionEnabled\\\">\\n\\t\\t\\t<option value=\\\"resolution\\\">resolution</option>\\n\\t\\t\\t<option value=\\\"bitrate\\\">bitrate</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- quanteec -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label with-icon\\\">\\n\\t\\t<label for=\\\"quanteec\\\">\\n\\t\\t\\t<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 86 78\\\" width=\\\"36px\\\" height=\\\"36px\\\" fill=\\\"#2F90B0\\\">\\n\\t\\t\\t\\t<path d=\\\"M28.047 38.6229L25.8402 34.9695L21.6368 34.9631L19.5296 38.6101L21.6258 42.2633L25.8292 42.2697L28.047 38.6229Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M31.0332 26.2381L26.7689 26.2317L24.6311 29.8786L26.7577 33.5319L31.022 33.5382L33.1598 29.8913L31.0332 26.2381Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M40.141 21.2653L42.2371 24.9186L46.5511 24.9251L48.6583 21.2782L46.5621 17.6249L42.2482 17.6184L40.141 21.2653Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M35.806 29.7054L37.5872 32.6841L41.0395 32.6893L42.8296 29.7161L41.0485 26.7374L37.5962 26.7322L35.806 29.7054Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M50.8188 27.1529L47.4454 27.1478L45.8668 29.9107L47.4368 32.6783L50.8103 32.6833L52.3888 29.9204L50.8188 27.1529Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M41.527 48.2666L40.3136 46.0526L37.7695 46.0487L36.5494 48.2591L37.7628 50.4731L40.3069 50.4769L41.527 48.2666Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M51.5908 48.2814L50.3774 46.0674L47.8332 46.0635L46.5025 48.2737L47.8265 50.4879L50.3707 50.4917L51.5908 48.2814Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M45.9343 57.7841L44.8309 56.0127L42.7292 56.0095L41.6204 57.7776L42.7237 59.6596L44.8254 59.6628L45.9343 57.7841Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M55.9515 17.6248L51.7482 17.6184L49.641 21.2653L51.7371 24.9186L55.9405 24.925L58.1583 21.2782L55.9515 17.6248Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M31.9509 35.5316L30.3688 38.286L31.9423 41.0449L35.3085 41.0499L36.8907 38.2955L35.3171 35.5366L31.9509 35.5316Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M46.7376 38.5402L45.3035 35.994L42.3169 35.9895L40.8751 38.5313L42.3092 41.0775L45.2958 41.082L46.7376 38.5402Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M31.3204 48.1835L29.6683 45.4242L26.4591 45.4195L24.7985 48.1737L26.4506 50.9329L29.6598 50.9377L31.3204 48.1835Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M32.2159 59.6449L34.3175 59.6481L35.4265 57.7694L34.3231 55.998L32.2214 55.9948L31.1126 57.7629L32.2159 59.6449Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M52.5715 57.7629L53.6748 59.6449L55.7765 59.6481L56.8855 57.7694L55.782 55.998L53.6804 55.9948L52.5715 57.7629Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M58.7805 64.3558L57.91 65.7309L58.7762 67.1947L60.4262 67.1972L61.2969 65.7361L60.4305 64.3583L58.7805 64.3558Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M57.9522 50.0238L60.0539 50.027L61.1629 48.1483L60.0594 46.3769L57.9577 46.3737L56.8489 48.1418L57.9522 50.0238Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M54.7414 36.4354L52.1972 36.4315L50.9771 38.6419L52.1905 40.8559L54.7347 40.8597L55.9548 38.6494L54.7414 36.4354Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M64.6414 36.9785L62.5397 36.9753L61.4309 38.7434L62.5342 40.6254L64.6359 40.6286L65.7449 38.7499L64.6414 36.9785Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M55.4001 29.9042L57.0522 32.6634L60.2614 32.6682L61.922 29.9139L60.2699 27.1547L57.0607 27.1499L55.4001 29.9042Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M29.2183 21.4464L31.6259 25.6425L36.5808 25.6499L39.0011 21.4611L36.5935 17.265L31.6386 17.2576L29.2183 21.4464Z\\\" />\\n\\t\\t\\t</svg>\\n\\t\\t\\t<strong>Quanteec</strong>&nbsp;p2p&nbsp;plugin:&nbsp;\\n\\t\\t</label>\\n\\t\\t<player-builder-docs key=\\\"quanteec\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"quanteec\\\" [(checked)]=\\\"data.quanteec\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t\\t<small style=\\\"font-size: 12px;font-weight: 400;\\\">\\n\\t\\t\\t<switch class=\\\"pull-right\\\" [disabled]=\\\"!data.quanteec\\\" [(checked)]=\\\"data.quanteecStreamboost\\\" [labelLeft]=\\\"{on:'with streamboost panel',off:'without streamboost panel'}\\\" size=\\\"xsmall\\\"></switch>\\n\\t\\t</small>\\n\\t</div>\\n</div>\\n\\n<!-- system73 -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label with-icon\\\">\\n\\t\\t<label for=\\\"system73\\\">\\n\\t\\t\\t<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 87.25 94.52\\\" width=\\\"24px\\\" height=\\\"24px\\\" fill=\\\"#001F42\\\">\\n\\t\\t\\t\\t<path d=\\\"M80.26,46.41a6.91,6.91,0,0,0,6.93-6.9l0-9.83a6.92,6.92,0,0,0-13.84,0l-.05,9.82a6.92,6.92,0,0,0,6.91,6.93\\\" />\\n\\t\\t\\t\\t<path d=\\\"M27.8,38.17A8.38,8.38,0,0,1,38.33,41l0-34.1a6.92,6.92,0,1,0-13.84,0l0,34.1a8.32,8.32,0,0,1,3.31-2.85\\\" />\\n\\t\\t\\t\\t<path d=\\\"M55.89,11.9a8.42,8.42,0,0,1,6.92,3.64V6.92A6.92,6.92,0,0,0,49,6.92v8.62a8.43,8.43,0,0,1,6.92-3.64\\\" />\\n\\t\\t\\t\\t<path d=\\\"M59.47,81.31a8.35,8.35,0,0,1-3.59.81,8.45,8.45,0,0,1-6.94-3.63l0,9.1a6.92,6.92,0,0,0,13.84,0l0-9.16a8.25,8.25,0,0,1-3.31,2.86\\\" />\\n\\t\\t\\t\\t<path d=\\\"M7,47.65A6.92,6.92,0,0,0,.1,54.56l0,9.83a6.92,6.92,0,0,0,13.84,0l0-9.83A6.91,6.91,0,0,0,7,47.65\\\" />\\n\\t\\t\\t\\t<path d=\\\"M55.89,28.76A8.42,8.42,0,0,1,49,25.13V39.54a6.92,6.92,0,1,0,13.84,0V25.13a8.41,8.41,0,0,1-6.92,3.63\\\" />\\n\\t\\t\\t\\t<path d=\\\"M35,53.41a8.44,8.44,0,0,1-6.44.32,8.31,8.31,0,0,1-4.07-3.14V61.08a6.92,6.92,0,0,0,13.84,0V50.53A8.45,8.45,0,0,1,35,53.41\\\" />\\n\\t\\t\\t\\t<path d=\\\"M52.26,66.07A8.42,8.42,0,0,1,62.8,69V66A6.92,6.92,0,1,0,49,66v3a8.24,8.24,0,0,1,3.29-2.84\\\" />\\n\\t\\t\\t\\t<path d=\\\"M31.4,78.52a7,7,0,1,0,7,7,7,7,0,0,0-7-7\\\" />\\n\\t\\t\\t\\t<path d=\\\"M7,22.92a7,7,0,1,0,7,7,7,7,0,0,0-7-7\\\" />\\n\\t\\t\\t\\t<path d=\\\"M80.29,57.16a7,7,0,1,0,7,7,7,7,0,0,0-7-7\\\" />\\n\\t\\t\\t\\t<path fill=\\\"#dd271b\\\" d=\\\"M55.89,15.32a5,5,0,1,0,5,5,5,5,0,0,0-5-5\\\" />\\n\\t\\t\\t\\t<path fill=\\\"#dd271b\\\" d=\\\"M35.93,43.64a5,5,0,0,0-2.84-2.57,4.93,4.93,0,0,0-1.69-.29,5,5,0,0,0-2.14.48,5,5,0,0,0-2.39,6.67,5,5,0,0,0,6.68,2.39,5,5,0,0,0,2.38-6.67Z\\\" />\\n\\t\\t\\t\\t<path fill=\\\"#dd271b\\\" d=\\\"M55.86,68.68a5.09,5.09,0,0,0-2.14.48A5,5,0,0,0,51.15,72a4.92,4.92,0,0,0,.19,3.82,5,5,0,1,0,4.52-7.15\\\" />\\n\\t\\t\\t</svg>\\n\\t\\t\\t<strong>&nbsp;System&nbsp;73</strong>&nbsp;p2p&nbsp;plugin:&nbsp;\\n\\t\\t</label>\\n\\t\\t<player-builder-docs key=\\\"system73\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"system73\\\" [(checked)]=\\\"data.system73\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1461:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- name -->\\n<div class=\\\"form-group\\\">\\n\\t<label for=\\\"build-name-ctrl\\\">Build&nbsp;<strong>name</strong>:&nbsp;</label>\\n\\t<input id=\\\"build-name-ctrl\\\" type=\\\"text\\\" class=\\\"form-control input-sm\\\" [(ngModel)]=\\\"data.buildName\\\" />\\n</div>\\n\\n<!-- skinless -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"skinless\\\"><strong>Skinless</strong>&nbsp;player:&nbsp;</label>\\n\\t\\t<!-- <player-builder-docs key=\\\"skinless\\\"></player-builder-docs> -->\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"skinless\\\" [(checked)]=\\\"data.skinless\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- jsapi -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"jsapi\\\"><strong>JavaScript</strong>&nbsp;api:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"jsapi\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"jsapi\\\" [(checked)]=\\\"data.jsapi\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- vast -->\\n<div *ngIf=\\\"data.userAdsSupportEnabled\\\" class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"iab\\\"><strong>Advertisements</strong>&nbsp;support:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"iab\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"iab\\\" [(checked)]=\\\"data.advertisement\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- keyboard -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"keyboard\\\"><strong>Keyboard</strong>&nbsp;support:&nbsp;</label>\\n\\t\\t<!-- <player-builder-docs key=\\\"keyboard\\\"></player-builder-docs> -->\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"keyboard\\\" [(checked)]=\\\"data.keyboard\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n\\n<!-- locale -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"locale\\\"><strong>Localization</strong>:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"locale\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select *ngIf=\\\"data.playerLocales\\\" id=\\\"locale\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"data.locale\\\">\\n\\t\\t\\t<option *ngFor=\\\"let locale of data.playerLocales;\\\" [value]=\\\"locale\\\">{{locale|localeName}}</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- audio -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"audio\\\">Default&nbsp;<strong>audio&nbsp;track</strong>&nbsp;country:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"audio\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"data.audio\\\" minlength=\\\"2\\\" maxlength=\\\"2\\\">\\n\\t</div>\\n</div>\\n\\n<!-- subtitles -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"subtitles\\\">Default&nbsp;<strong>subtitles&nbsp;track</strong>&nbsp;country:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"subtitles\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"data.subtitles\\\" minlength=\\\"2\\\" maxlength=\\\"2\\\">\\n\\t</div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1462:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"form-label\\\">\\n\\t<label><strong>{{label}}</strong></label>\\n\\t<ng-content select=\\\".form-label-after\\\"></ng-content>\\n</div>\\n<div class=\\\"form-fields\\\">\\n\\t<select class=\\\"form-control\\\" [ngModel]=\\\"valueId\\\" (ngModelChange)=\\\"emitOptionById($event)\\\" [disabled]=\\\"disabled\\\">\\n\\t\\t<option *ngFor=\\\"let option of OPTIONS;\\\" [value]=\\\"option.id\\\">{{formatText(option)}}</option>\\n\\t</select>\\n\\t<ng-content select=\\\".form-fields-after\\\"></ng-content>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1463:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- icon samples-->\\n<div class=\\\"form-group full-w\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label><strong>Icon</strong> <small>sample</small></label>\\n\\t</div>\\n\\t<ng-container *ngIf=\\\"data.skinState\\\">\\n\\t\\t<ng-container [ngSwitch]=\\\"data.skinStateIconType\\\">\\n\\t\\t\\t<ng-container *ngSwitchCase=\\\"'css'\\\">\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"data.skinIconFont.code;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"icon-sample\\\"\\n\\t\\t\\t\\t\\t\\t\\t [style.fontFamily]=\\\"data.skinIconFont.family.join(', ')\\\"\\n\\t\\t\\t\\t\\t\\t\\t [style.fontSize]=\\\"data.skinIconFont.size\\\"\\n\\t\\t\\t\\t\\t\\t\\t [style.fontVariationSettings]=\\\"data.skinIconFontVariationSettings\\\">\\n\\t\\t\\t\\t\\t\\t<span *ngFor=\\\"let item of data.skinIconFont.code|keys;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[title]=\\\"item +': '+data.skinIconFont.code[item]\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tclass=\\\"icon-sample-icon\\\">{{data.skinIconFont.code[item]|charCode}}</span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-container *ngSwitchCase=\\\"'svg'\\\">\\n\\t\\t\\t\\t<div class=\\\"icon-sample\\\">\\n\\t\\t\\t\\t\\t<div *ngFor=\\\"let id of data.skinStateIconMap;\\\" class=\\\"icon-sample-icon\\\" [title]=\\\"id\\\">\\n\\t\\t\\t\\t\\t\\t<svg xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t\\t\\t\\t\\t\\t\\t<use [attr.xlink:href]=\\\"id|iconSvgHref:data.skinStateIcoPrefix\\\"></use>\\n\\t\\t\\t\\t\\t\\t</svg>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-container *ngSwitchDefault></ng-container>\\n\\t\\t</ng-container>\\n\\t</ng-container>\\n</div>\\n\\n<!-- icon font -->\\n<player-builder-icon-select label=\\\"Icon\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[OPTIONS]=\\\"OPTIONS\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[(value)]=\\\"data.skinIcon\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tclass=\\\"form-group\\\">\\n\\t<!-- inject switch -->\\n\\t<div *ngIf=\\\"data.skinIconIsFont && !!data.skinIconFont\\\" class=\\\"form-label-after form-label-switch\\\">\\n\\t\\t<switch [(checked)]=\\\"data.skinIconFontFetch\\\" [labelLeft]=\\\"SWITCH_LABEL_INJECT_LEFT\\\" [labelRight]=\\\"SWITCH_LABEL_INJECT_RIGHT\\\" [size]=\\\"SWITCH_LABEL_SIZE\\\"></switch>\\n\\t</div>\\n\\t<!-- inject info -->\\n\\t<div *ngIf=\\\"data.skinIconIsFont &&!!data.skinIconFont && !data.skinIconFontFetch\\\" class=\\\"form-fields-after form-alert inject-font-info\\\">\\n\\t\\t<div class=\\\"alert alert-warning\\\">\\n\\t\\t\\t<small><i class=\\\"fa fa-fw fa-exclamation fa-warn\\\"></i>&nbsp;Please add the link to the font manually along with the player.</small>\\n\\t\\t\\t<div class=\\\"code-example\\\">\\n\\t\\t\\t\\t<textarea class=\\\"code-example-text\\\" readonly #copyLinkFrom>{{ data.skinIconFontSrcToFetch|iconFontLink:data.VERSION }}</textarea>\\n\\t\\t\\t\\t<button class=\\\"btn btn-xs code-example-copy\\\" (click)=\\\"copyLink(copyLinkFrom)\\\"><small><i class=\\\"fa fa-fw fa-clipboard\\\"></i> copy <strong>font link</strong> to clipboard</small></button>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</player-builder-icon-select>\\n\\n<!-- icon variation-->\\n<ng-container *ngIf=\\\"data.skinIconFontVariationSettings && activeIconFontForm\\\">\\n\\t<div *ngFor=\\\"let key of activeIconFontForm|keys;\\\" class=\\\"form-group\\\">\\n\\t\\t<ng-container *ngTemplateOutlet=\\\"variationTmpl; context: {key:key, value: data.skinIconFontVariationSettings[key]||0, form: activeIconFontForm[key] }\\\"></ng-container>\\n\\t</div>\\n\\t<ng-template #variationTmpl let-key=\\\"key\\\" let-value=\\\"value\\\" let-form=\\\"form\\\">\\n\\t\\t<div class=\\\"form-label\\\">\\n\\t\\t\\t<label><strong>Icon</strong> <small><i>{{data.skinIconFont.family[0]}}</i> {{form.name|lowercase}}:</small></label>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t<rangeslider [value]=\\\"(value?value:0)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t (onMouseUp)=\\\"emitVariation(key, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t [step]=\\\"form.step\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t [min]=\\\"form.range[0]\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t [max]=\\\"form.range[1]\\\">\\n\\t\\t\\t</rangeslider>\\n\\t\\t</div>\\n\\t</ng-template>\\n</ng-container>\\n\"\n\n/***/ }),\n\n/***/ 1464:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- <div class=\\\"form-con\\\"> -->\\n\\n<!-- autoplay -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"autoplay\\\">Autoplay video on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"autoplay\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"autoplay\\\" [(checked)]=\\\"data.autoplay\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- mute -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"mute\\\">Mute video on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"mute\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"mute\\\" [(checked)]=\\\"data.mute\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- volume -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"volume\\\">Volume on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"volume\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<rangeslider id=\\\"volume\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(value)]=\\\"data.volume\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t step=\\\"0.01\\\" min=\\\"0\\\" max=\\\"1\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [disabled]=\\\"data.mute\\\">\\n\\t\\t</rangeslider>\\n\\t</div>\\n</div>\\n\\n<!-- qualityInitialBandwidthKbs -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"qualityInitialBandwidthKbs\\\">Quality bandwidth on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"qualityInitialBandwidthKbs\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<rangeslider id=\\\"qualityInitialBandwidthKbs\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(value)]=\\\"data.qualityInitialBandwidthKbs\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t min=\\\"0\\\" step=\\\"1000\\\" max=\\\"20000\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [showLabels]=\\\"false\\\">\\n\\t\\t</rangeslider>\\n\\t\\t<div class=\\\"rangeslider-values\\\">\\n\\t\\t\\t<small>0</small>\\n\\t\\t\\t<small>{{data.qualityInitialBandwidthKbs}} (in Kbs)</small>\\n\\t\\t\\t<small>20000</small>\\n\\t\\t</div>\\n\\t</div>\\n\\n</div>\\n\\n<!-- Video360 -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"video360\\\"><strong>Spherical videos</strong>&nbsp;(360 degreess) support:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"spherical\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"video360\\\" [(checked)]=\\\"data.video360\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- </div> -->\\n\"\n\n/***/ }),\n\n/***/ 1465:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- theme -->\\n<div class=\\\"form-group full-w screenshots\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"skintheme\\\">Theme&nbsp;<strong>variant</strong>:&nbsp;</label>\\n\\t\\t<!-- <player-builder-docs key=\\\"skintheme\\\"></player-builder-docs> -->\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<ng-container *ngFor=\\\"let theme of SKIN_THEMES|keys; first as isFirst;\\\">\\n\\t\\t\\t<button (click)=\\\"data.skin = SKIN_THEMES[theme]\\\" type=\\\"button\\\" class=\\\"btn screenshot\\\" [class.active]=\\\"data.skinName === theme\\\">\\n\\t\\t\\t\\t<img class=\\\"screenshot-img\\\" [src]=\\\"formatImageSrc(theme)\\\" [alt]=\\\"theme\\\">\\n\\t\\t\\t\\t<span class=\\\"screenshot-info {{theme}}\\\">\\n\\t\\t\\t\\t\\t<span>{{theme}}</span>\\n\\t\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [class.fa-check-circle-o]=\\\"data.skinName === theme\\\" [class.fa-circle-o]=\\\"!(data.skinName === theme)\\\"></i>\\n\\t\\t\\t\\t</span>\\n\\t\\t\\t</button>\\n\\t\\t</ng-container>\\n\\t</div>\\n</div>\\n\\n<!-- color -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"skinColor\\\">Theme&nbsp;<strong>color</strong>:&nbsp;</label>\\n\\t\\t<button *ngIf=\\\"data.skinColor!=data.skinThemeDefaultColor\\\" class=\\\"btn btn-xs\\\" (click)=\\\"data.resetColorToThemeDefault()\\\">\\n\\t\\t\\t<small>reset to theme default</small>\\n\\t\\t\\t<strong [style.backgroundColor]=\\\"data.skinThemeDefaultColor\\\" style=\\\"display: inline-block;width: 1em;height: 1em;margin: -.25em 0 -.25em .25em;border-radius: 50%;\\\"></strong>\\n\\t\\t</button>\\n\\t\\t<player-builder-docs key=\\\"skincolor\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<color-picker id=\\\"skinColor\\\" [(value)]=\\\"data.skinColor\\\"></color-picker>\\n\\t</div>\\n</div>\\n\\n<!-- showSkinOnInit -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"showSkinOnInit\\\"><strong>Visibility</strong> on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"showSkinOnInit\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"showSkinOnInit\\\" [(checked)]=\\\"data.showSkinOnInit\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- text font -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<!-- label -->\\n\\t\\t<label for=\\\"skinFont\\\"><strong>Text</strong>&nbsp;font</label>\\n\\t\\t<!-- inject switch -->\\n\\t\\t<div class=\\\"form-label-switch\\\">\\n\\t\\t\\t<switch [(checked)]=\\\"data.skinFontFetch\\\" [labelLeft]=\\\"SWITCH_LABEL_INJECT_LEFT\\\" [labelRight]=\\\"SWITCH_LABEL_INJECT_RIGHT\\\" [size]=\\\"SWITCH_LABEL_SIZE\\\"></switch>\\n\\t\\t</div>\\n\\t\\t<!--  -->\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<!-- select -->\\n\\t\\t<select id=\\\"skinFont\\\" class=\\\"form-control\\\" [ngModel]=\\\"data.skinFont.id\\\" (ngModelChange)=\\\"data.skinFont = fontById($event)\\\" [disabled]=\\\"disabled\\\">\\n\\t\\t\\t<option *ngFor=\\\"let option of TEXT_FONTS;\\\" [value]=\\\"option.id\\\">{{option.name}}</option>\\n\\t\\t</select>\\n\\t\\t<!-- inject info -->\\n\\t\\t<div *ngIf=\\\"!data.skinFontFetch\\\" class=\\\"form-alert inject-font-info\\\">\\n\\t\\t\\t<div class=\\\"alert alert-warning\\\">\\n\\t\\t\\t\\t<small><i class=\\\"fa fa-fw fa-exclamation fa-warn\\\"></i>&nbsp;Please add the link to the font manually along with the player.</small>\\n\\t\\t\\t\\t<div class=\\\"code-example\\\">\\n\\t\\t\\t\\t\\t<textarea class=\\\"code-example-text\\\" readonly #copyLinkFrom>{{ data.skinFontSrcToFetch|iconFontLink:data.VERSION }}</textarea>\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-xs code-example-copy\\\" (click)=\\\"copyLink(copyLinkFrom)\\\"><small><i class=\\\"fa fa-fw fa-clipboard\\\"></i> copy <strong>font link</strong> to clipboard</small></button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!--  -->\\n\\t</div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1466:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(5);\nvar codemirror_component_1 = __webpack_require__(350);\n/**\n * CodemirrorModule\n */\nvar CodemirrorModule = (function () {\n    function CodemirrorModule() {\n    }\n    return CodemirrorModule;\n}());\nCodemirrorModule.decorators = [\n    { type: core_1.NgModule, args: [{\n                imports: [\n                    common_1.CommonModule\n                ],\n                declarations: [\n                    codemirror_component_1.CodemirrorComponent,\n                ],\n                exports: [\n                    codemirror_component_1.CodemirrorComponent,\n                ]\n            },] },\n];\n/** @nocollapse */\nCodemirrorModule.ctorParameters = function () { return []; };\nexports.CodemirrorModule = CodemirrorModule;\n//# sourceMappingURL=codemirror.module.js.map\n\n/***/ }),\n\n/***/ 1467:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- LABEL -->\\n<h4 class=\\\"view-label\\\">\\n\\t<span>Embed code generator <small>for player named: <i>\\\"{{playerData.name}}\\\"</i></small></span>\\n\\t<div class=\\\"embed-method\\\">\\n\\t\\t<span class=\\\"embed-method-label\\\">embed method:</span>\\n\\t\\t<div class=\\\"embed-btn\\\">\\n\\t\\t\\t<input type=\\\"radio\\\" id=\\\"iframe\\\" name=\\\"method\\\" value=\\\"iframe\\\" [(ngModel)]=\\\"method\\\">\\n\\t\\t\\t<label for=\\\"iframe\\\">iframe</label>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"embed-btn\\\">\\n\\t\\t\\t<input type=\\\"radio\\\" id=\\\"script\\\" name=\\\"method\\\" value=\\\"script\\\" [(ngModel)]=\\\"method\\\">\\n\\t\\t\\t<label for=\\\"script\\\">script</label>\\n\\t\\t</div>\\n\\t</div>\\n\\n</h4>\\n<!-- PREVIEW -->\\n<div class=\\\"preview\\\">\\n\\t<!-- player -->\\n\\t<div class=\\\"preview-label\\\">\\n\\t\\t<label>{{method}} player <small>preview:</small></label>\\n\\t\\t<!-- scale -->\\n\\t\\t<span class=\\\"preview-scale\\\">\\n\\t\\t\\t<small>preview&nbsp;scale:&nbsp;</small>\\n\\t\\t\\t<rangeslider [(value)]=\\\"previewScale\\\" [step]=\\\"0.1\\\" [min]=\\\"0\\\" [max]=\\\"1\\\" [showLabels]=\\\"false\\\"> </rangeslider>\\n\\t\\t\\t<small>&nbsp;{{previewScale * 100}}%</small>\\n\\t\\t</span>\\n\\t</div>\\n\\t<!-- frames -->\\n\\t<div class=\\\"preview-frames\\\"\\n\\t\\t\\t [style.transform]=\\\"'scale('+previewScale+')'|safeStyle\\\"\\n\\t\\t\\t [style.maxHeight]=\\\"'calc(('+formHeight+' * '+previewScale+') + 1em)'|safeStyle\\\">\\n\\t\\t<iframe *ngIf=\\\"method === 'iframe'\\\"\\n\\t\\t\\t\\t\\t\\t[src]=\\\"iframeSrc|safeSrc\\\"\\n\\t\\t\\t\\t\\t\\t[style.width]=\\\"formWidth|safeStyle\\\"\\n\\t\\t\\t\\t\\t\\t[style.height]=\\\"formHeight|safeStyle\\\"\\n\\t\\t\\t\\t\\t\\tframeBorder=\\\"0\\\"\\n\\t\\t\\t\\t\\t\\tallow=\\\"autoplay; encrypted-media\\\"\\n\\t\\t\\t\\t\\t\\tallowfullscreen>\\n\\t\\t</iframe>\\n\\t\\t<iframe *ngIf=\\\"method === 'script'\\\"\\n\\t\\t\\t\\t\\t\\t[src]=\\\"scriptFrameSrc|safeSrc\\\"\\n\\t\\t\\t\\t\\t\\t[style.width]=\\\"formWidth|safeStyle\\\"\\n\\t\\t\\t\\t\\t\\t[style.height]=\\\"formHeight|safeStyle\\\"\\n\\t\\t\\t\\t\\t\\t(load)=\\\"handleScriptFrameLoad(jsFrame)\\\"\\n\\t\\t\\t\\t\\t\\tframeBorder=\\\"0\\\"\\n\\t\\t\\t\\t\\t\\tallow=\\\"autoplay; encrypted-media\\\"\\n\\t\\t\\t\\t\\t\\tallowfullscreen\\n\\t\\t\\t\\t\\t\\tsandbox=\\\"allow-same-origin allow-scripts allow-popups allow-forms allow-pointer-lock allow-top-navigation allow-presentation\\\"\\n\\t\\t\\t\\t\\t\\t#jsFrame>\\n\\t\\t</iframe>\\n\\t</div>\\n</div>\\n<!-- CODE -->\\n<div class=\\\"code\\\">\\n\\t<codemirror [config]=\\\"CODEMIRROR_CONFIG\\\" [ngModel]=\\\"codemirror\\\"></codemirror>\\n</div>\\n<!-- COPY -->\\n<div class=\\\"copy\\\">\\n\\t<label>{{method}} generator <small>settings:</small></label>\\n\\t<textarea class=\\\"copy-from\\\" [innerHTML]=\\\"copyString|safeHtml\\\" #copyFrom></textarea>\\n\\t<button class=\\\"btn btn-bradmax\\\" (click)=\\\"copyToClipboard(copyFrom)\\\"><i class=\\\"fa fa-fw fa-copy\\\"></i>&nbsp;copy <strong>{{method}}</strong> embed code to clipboard</button>\\n</div>\\n<!-- FORM -->\\n<div class=\\\"form\\\">\\n\\t<div class=\\\"form-con\\\">\\n\\t\\t<!-- width / height -->\\n\\t\\t<div class=\\\"form-row\\\">\\n\\t\\t\\t<!-- width -->\\n\\t\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"width\\\">width<small> (required)</small></label></div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"width\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formWidth\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'video width'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t min=\\\"1\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- height -->\\n\\t\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"height\\\">height<small> (required)</small></label></div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"height\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'video height'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t min=\\\"1\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- mediaUrl s -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div *ngFor=\\\"let mediaUrl of formMediaUrls;index as idx;first as fst;last as lst;\\\" class=\\\"form-fields media-src\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\">\\n\\t\\t\\t\\t\\t<label for=\\\"mediaUrl-{{idx}}\\\"><small *ngIf=\\\"!fst\\\">fallback </small>media source url<small *ngIf=\\\"fst\\\"> (required)</small></label>\\n\\t\\t\\t\\t\\t<!-- + -->\\n\\t\\t\\t\\t\\t<button *ngIf=\\\"fst\\\" class=\\\"btn btn-xs\\\" (click)=\\\"addMedia()\\\" [disabled]=\\\"!canAddMedia\\\">\\n\\t\\t\\t\\t\\t\\t<small><i class=\\\"fa fa-fw fa-plus\\\"></i>&nbsp;additional format fallback</small>\\n\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t<!-- - -->\\n\\t\\t\\t\\t\\t<button *ngIf=\\\"!fst\\\" class=\\\"btn btn-xs\\\" (click)=\\\"removeMedia()\\\">\\n\\t\\t\\t\\t\\t\\t<small><i class=\\\"fa fa-fw fa-minus\\\"></i>&nbsp;remove format fallback</small>\\n\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"mediaUrl-{{idx}}\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t (change)=\\\"formMediaUrlsChange(idx, $event.target.value)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [ngModel]=\\\"formMediaUrls[idx]\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [minlength]=\\\"5\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'enter url to valid media file' + (!fst ? ' (used when problem with other media url)':'')\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- duration / title -->\\n\\t\\t<div class=\\\"form-row\\\">\\n\\t\\t\\t<!-- \\tduration -->\\n\\t\\t\\t<div class=\\\"form-group duration\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"duration\\\">duration<small> (optional)</small></label></div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"duration\\\" type=\\\"number\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formDuration\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'duration in seconds'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t min=\\\"1\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- title -->\\n\\t\\t\\t<div class=\\\"form-group title\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"title\\\">title<small> (optional)</small></label></div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"title\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formTitle\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'media title'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- splash image -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"splashImageUrl\\\">splash image url<small> (optional)</small></label></div>\\n\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t<input id=\\\"splashImageUrl\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formSplashImageUrl\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'url to valid media image file'\\\"\\n\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- media id for bradmax content statistics -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"id\\\">id for bradmax content statistics<small> (optional)</small></label></div>\\n\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t<input id=\\\"id\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formId\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'media id for bradmax content statistics'\\\"\\n\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- VMAP -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"adsVmapUrl\\\">ads VMAP URL<small> (optional)</small></label></div>\\n\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t<input id=\\\"adsVmapUrl\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formAdsVmapUrl\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'VMAP URL for ads'\\\"\\n\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- VAST preroll -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"adsPrerollVastUrl\\\">preroll ads VAST URL<small> (optional)</small></label></div>\\n\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t<input id=\\\"adsPrerollVastUrl\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formAdsPrerollVastUrl\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'VAST URL for preroll ads'\\\"\\n\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\n\\t</div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1468:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  min-width: 400px;\\n  max-width: 1024px; }\\n  :host .view-label, :host .copy, :host .code, :host .preview, :host .preview-label, :host .preview-frames {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    margin: 0 0 0.5em 0; }\\n  :host .view-label {\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -webkit-box-align: start;\\n        -ms-flex-align: start;\\n            align-items: flex-start;\\n    -webkit-box-pack: justify;\\n        -ms-flex-pack: justify;\\n            justify-content: space-between; }\\n  :host .view-label .embed-method {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: end;\\n          -ms-flex-pack: end;\\n              justify-content: flex-end;\\n      -ms-flex-wrap: wrap;\\n          flex-wrap: wrap;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      font-size: 0.9em; }\\n  :host .view-label .embed-method .embed-method-label {\\n        margin: 0 0.25em 0 0; }\\n  :host .view-label .embed-method .embed-btn {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: start;\\n            -ms-flex-pack: start;\\n                justify-content: flex-start; }\\n  :host .view-label .embed-method .embed-btn * {\\n          cursor: pointer; }\\n  :host .view-label .embed-method .embed-btn label {\\n          height: 26px;\\n          line-height: 26px;\\n          margin: 0 0.25em 0 0; }\\n  :host .view-label .embed-method .embed-btn input[type=radio] {\\n          margin: 0 0.25em 0 0;\\n          height: 26px; }\\n  :host .preview {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    border: 1px solid #e8e8e8;\\n    padding: 0.5em;\\n    border-radius: 3px;\\n    background-color: rgba(255, 255, 255, 0.69); }\\n  :host .preview-label {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: justify;\\n          -ms-flex-pack: justify;\\n              justify-content: space-between; }\\n  :host .preview-scale {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: center;\\n          -ms-flex-pack: center;\\n              justify-content: center;\\n      white-space: nowrap; }\\n  :host .preview-scale small {\\n        pointer-events: none; }\\n  :host .preview-frames {\\n      position: relative;\\n      z-index: 0;\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: center;\\n          -ms-flex-pack: center;\\n              justify-content: center; }\\n  :host .preview-frames iframe {\\n        background-color: black; }\\n  :host .code {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    font-size: 0.9em; }\\n  :host .code /deep/.CodeMirror {\\n      height: inherit;\\n      border-radius: 3px;\\n      font-size: 0.9em; }\\n  :host .code /deep/.CodeMirror .cm-string {\\n        line-break: anywhere; }\\n  :host .copy {\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -webkit-box-align: center;\\n        -ms-flex-align: center;\\n            align-items: center;\\n    -webkit-box-pack: justify;\\n        -ms-flex-pack: justify;\\n            justify-content: space-between; }\\n  :host .copy-from {\\n      width: 0 !important;\\n      height: 0 !important;\\n      resize: none !important;\\n      border: none !important;\\n      outline: none !important;\\n      background: transparent !important;\\n      color: transparent !important; }\\n  :host .form-con {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -ms-flex-wrap: wrap;\\n        flex-wrap: wrap;\\n    -webkit-box-align: stretch;\\n        -ms-flex-align: stretch;\\n            align-items: stretch;\\n    -webkit-box-pack: start;\\n        -ms-flex-pack: start;\\n            justify-content: flex-start; }\\n  :host .form-con .form-row {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-align: end;\\n          -ms-flex-align: end;\\n              align-items: flex-end;\\n      -webkit-box-pack: start;\\n          -ms-flex-pack: start;\\n              justify-content: flex-start; }\\n  :host .form-label label small {\\n    font-weight: 200;\\n    font-size: x-small; }\\n  :host .form .form-group, :host .form .form-row {\\n    width: 100%; }\\n  :host .form .form-group .form-fields, :host .form .form-row .form-fields {\\n      width: 100%; }\\n  :host .form .media-src .form-label {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-align: center;\\n        -ms-flex-align: center;\\n            align-items: center;\\n    -webkit-box-pack: justify;\\n        -ms-flex-pack: justify;\\n            justify-content: space-between; }\\n  :host .form .duration {\\n    margin-right: 0.5em;\\n    max-width: 150px; }\\n\"\n\n/***/ }),\n\n/***/ 1469:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'PLAYER.EMBEDER.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"col-lg-12\\\">\\n\\t<div class=\\\"panel panel-inverse form-panel\\\">\\n\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<div class=\\\"panel-title\\\">{{ 'PLAYER.EMBEDER.PANEL_TITLE.PLAYER_INFO' | translate:lang }}</div>\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"panel-body player-info-summary\\\">\\n\\t\\t\\t<div class=\\\"col-lg-6\\\">\\n\\t\\t\\t\\t\\t<span>{{ 'PLAYER.EMBEDER.PLAYER_NAME' | translate:lang }}:</span>\\n\\t\\t\\t\\t\\t<span>{{service.playerModel.name}}</span>\\n\\t\\t\\t</div>\\n\\t\\t\\t<a class=\\\"btn btn-sm btn-white back-button\\\" (click)=\\\"navigationBack()\\\">\\n\\t\\t\\t\\t<i class=\\\"fa fa-arrow-left\\\"></i> &nbsp;{{ 'PLAYER.EMBEDER.BACK' | translate:lang }}\\n\\t\\t\\t</a>\\n\\n\\t\\t\\t<a class=\\\"btn btn-sm btn-white download-zip\\\" href=\\\"{{service.playerModel.latest_webbuild.zip_url}}\\\" target=\\\"_blank\\\">\\n\\t\\t\\t\\t  <i class=\\\"fa fa-file-archive-o\\\"></i> &nbsp;{{ 'PLAYER.EMBEDER.DOWNLOAD_ZIP' | translate:lang }}\\n\\t\\t\\t</a>\\n\\t\\t</div>\\n\\n\\t</div>\\n\\t<div class=\\\"panel panel-inverse form-panel\\\">\\n\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<div class=\\\"panel-title\\\">{{ 'PLAYER.EMBEDER.PANEL_TITLE.FORM' | translate:lang }}</div>\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<!-- FORM -->\\n\\t\\t\\t<div class=\\\"col-lg-6\\\">\\n\\n\\t\\t\\t\\t<!-- type -->\\n\\t\\t\\t\\t<div class=\\\"col-sm-12 input-cell\\\">\\n\\t\\t\\t\\t\\t<label>{{ 'PLAYER.EMBEDER.INPUT.TYPE.LABEL' | translate:lang }}</label>:<br/>\\n\\t\\t\\t\\t\\t<dropdown [model]=\\\"dropdownModel\\\" [(value)]=\\\"selectedType\\\" (onSelect)=\\\"onDropdownSelect($event)\\\"></dropdown>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- mandatory -->\\n\\t\\t\\t\\t<div *ngFor=\\\"let name of modelMandatoryNames;\\\" class=\\\"input-cell\\\" [ngClass]=\\\"'col-sm-' + modelFieldsCellWidth[name]\\\">\\n\\t\\t\\t\\t\\t<label>{{ 'PLAYER.EMBEDER.INPUT.' + name.toUpperCase() + '.LABEL' | translate:lang }}:</label>\\n\\t\\t\\t\\t\\t<editable-input [name]=\\\"name\\\" placeholder=\\\"{{ 'PLAYER.EMBEDER.INPUT.' + name.toUpperCase() + '.PLACEHOLDER' | translate:lang }}\\\"\\n\\t\\t\\t\\t\\t\\t[integerOnly]=\\\"name != 'mediaUrl'\\\" [(value)]=\\\"model[name]\\\" (valueChange)=\\\"onChange()\\\">\\n\\t\\t\\t\\t\\t</editable-input>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- optional -->\\n\\t\\t\\t\\t<div class=\\\"col-sm-12 optional-parameters-btn-con\\\">\\n\\t\\t\\t\\t\\t<a class=\\\"optional-parameters-btn\\\" (click)=\\\"toggleOptional()\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [ngClass]=\\\"{ 'fa-angle-up': showOptional, 'fa-angle-down': !showOptional }\\\"></i>\\n\\t\\t\\t\\t\\t\\t&nbsp;{{ 'PLAYER.EMBEDER.TOGGLE_OPTIONAL.' + (showOptional?1:0) | translate:lang }}\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"showOptional\\\">\\n\\t\\t\\t\\t\\t<div *ngFor=\\\"let name of modelOptionalNames;\\\" class=\\\"input-cell\\\" [ngClass]=\\\"'col-md-' + modelFieldsCellWidth[name]\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'PLAYER.EMBEDER.INPUT.' + name.toUpperCase() + '.LABEL' | translate:lang }}:</label>\\n\\t\\t\\t\\t\\t\\t<editable-input [name]=\\\"name\\\" placeholder=\\\"{{ 'PLAYER.EMBEDER.INPUT.' + name.toUpperCase() + '.PLACEHOLDER' | translate:lang }}\\\"\\n\\t\\t\\t\\t\\t\\t\\t[floatOnly]=\\\"name == 'duration'\\\" [(value)]=\\\"model[name]\\\" (valueChange)=\\\"onChange()\\\">\\n\\t\\t\\t\\t\\t\\t</editable-input>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- CODE -->\\n\\t\\t\\t<div class=\\\"col-lg-6\\\">\\n\\t\\t\\t\\t<div class=\\\"panel-title\\\">\\n\\t\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [ngClass]=\\\"formatTypeIconNgClass()\\\"></i>&nbsp;<strong>{{formatTypeLabel()}}</strong>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<codemirror [config]=\\\"codemirrorConfig\\\" [ngModel]=\\\"embedCodeString\\\"></codemirror>\\n\\t\\t\\t\\t<!-- copy -->\\n\\t\\t\\t\\t<a class=\\\"copy-btn\\\" (click)=\\\"copyToClipboard()\\\"><i class=\\\"fa fa-fw fa-clipboard\\\"></i>&nbsp;{{ 'PLAYER.EMBEDER.COPY_TO_CLIPBOARD' | translate:lang }}</a>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\n\\t</div>\\n</div>\\n\\n<div class=\\\"col-lg-12\\\">\\n\\t<!-- PREVIEW -->\\n\\t<div class=\\\"panel panel-inverse preview-panel\\\">\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<div class=\\\"panel-title\\\">{{ 'PLAYER.EMBEDER.PANEL_TITLE.PREVIEW' | translate:lang }}&nbsp;{{formatTypeLabel()}}</div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<div class=\\\"iframe-preview\\\" *ngIf=\\\"selectedType==embedCodeType.IFRAME\\\" [innerHTML]=\\\"embedCodeHtml\\\"></div>\\n\\t\\t\\t<button class=\\\"dynamic-preview\\\" *ngIf=\\\"selectedType==embedCodeType.DYNAMIC\\\" class=\\\"btn btn-md btn-white\\\" (click)=\\\"previewDynamic()\\\">preview in new window</button>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1470:\n/***/ (function(module, exports) {\n\nmodule.exports = \".player-info-summary span {\\n  font-size: 14px;\\n  line-height: 30px; }\\n\\n.player-info-summary .download-zip {\\n  float: right;\\n  margin-left: 15px; }\\n\\n.player-info-summary .back-button {\\n  float: right;\\n  margin-left: 15px; }\\n\\n.form-panel .input-cell {\\n  padding: 10px 15px; }\\n\\n.form-panel .input-cell dropdown {\\n    width: 190px; }\\n\\n.form-panel .input-cell dropdown /deep/.btn {\\n      font-weight: 400; }\\n\\n.form-panel .optional-parameters-btn-con {\\n  padding: 10px 15px; }\\n\\n.form-panel .optional-parameters-btn-con .optional-parameters-btn {\\n    cursor: pointer;\\n    text-decoration: none; }\\n\\n.form-panel .copy-btn {\\n  float: right;\\n  cursor: pointer;\\n  text-decoration: none;\\n  margin-top: 5px; }\\n\\n@media screen and (max-width: 1200px) {\\n  .form-panel .col-lg-6 {\\n    clear: both; } }\\n\\n.preview-panel .panel-body {\\n  text-align: center; }\\n\"\n\n/***/ }),\n\n/***/ 1471:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"target\":\"html5\",\"dataReportErrors\":true,\"dataProvider\":[{\"title\":\"Tears of steel\",\"duration\":45,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\",\"contentType\":\"movie\",\"width\":1280,\"height\":534,\"bitrate\":191999}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/startsplash.jpg\",\"width\":956,\"height\":397}],\"mediaDetails\":{\"tags\":[\"bradmax.com\",\"landing page\",\"Tears of steal\",\"mp4\",\"Open Movie\",\"Blender Foundation\"],\"genres\":[{\"name\":\"sci-fi\"},{\"name\":\"adventure\"}],\"descriptionLong\":\"This is the fourth Open Movie by Blender Foundation, re-rendered and re-graded in 4k resolution. (This is the HD scaled down version). Visit http://www.tearsofsteel.org for more information or downloads. All data for the film is available under Creative Commons Attribution. \\\"Tears of Steel\\\" was realized with crowd-funding by users of the open source 3D creation tool Blender. Target was to improve and test a complete open and free pipeline for visual effects in film - and to make a compelling sci-fi film in Amsterdam, the Netherlands.\",\"descriptionShort\":\"\\\"Tears of Steel\\\" was realized with crowd-funding by users of the open source 3D creation tool Blender.\",\"year\":2013,\"mediaCast\":[\"Derek de Lint\",\"Sergio Hasselbaink\",\"Rogier Schippers\",\"Vanja Rukavina\",\"Denise Rebergen\",\"Jody Bhe\",\"Chris Haley\"],\"directors\":[\"Ian Hubert\"]}},{\"title\":\"Big Buck Bunny\",\"duration\":573.6,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_big.buck.bunny.jpg\",\"width\":620,\"height\":348}]},{\"title\":\"Cosmos Laundromat\",\"duration\":726.6,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_cosmos.laundromat.jpg\",\"width\":1200,\"height\":800}]},{\"title\":\"Elephants Dream\",\"duration\":632.4,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_elephant.dream.jpg\",\"width\":1920,\"height\":1080}]},{\"title\":\"Sintel\",\"duration\":868.8,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_sintel.png\",\"width\":1920,\"height\":817}]},{\"title\":\"Sita Sings the Blues\",\"duration\":4879.2,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_sita.sings.the.blues.jpg\",\"width\":960,\"height\":540}]},{\"title\":\"Caminandes 1: Llama Drama\",\"duration\":91,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_caminandes.1.jpg\",\"width\":1920,\"height\":1080}]},{\"title\":\"Caminandes 2: Gran Dillama\",\"duration\":136.2,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_caminandes.2.jpg\",\"width\":1920,\"height\":1080}]},{\"title\":\"Caminandes 3: Llamigos\",\"duration\":138.6,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_caminandes.3.jpg\",\"width\":1920,\"height\":1080}]},{\"title\":\"Tears of steel\",\"duration\":734.097415,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_tears.of.steel.jpg\",\"width\":1615,\"height\":675}]}]}\n\n/***/ }),\n\n/***/ 1472:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<ng-template [ngIf]=\\\"config != null\\\">\\n\\t<switch *ngIf=\\\"activateSwitchModel != null && config.multichoice\\\" size=\\\"small\\\" [checked]=\\\"config.checked\\\"\\n\\t\\t\\t(checkedChange)=\\\"checkedChange()\\\" [labelLeft]=\\\"activateSwitchModel.left\\\"\\n\\t\\t\\t[labelRight]=\\\"activateSwitchModel.right\\\"></switch>\\n\\t<div class=\\\"list-group\\\">\\n\\t\\t<div *ngFor=\\\"let group of groups;\\\" class=\\\"list-group-item\\\" \\n\\t\\t\\t [class.disabled]=\\\"config.multichoice && !config.checked\\\">\\n\\t\\t\\t<div class=\\\"list-group-item-heading\\\">\\n\\t\\t\\t\\t<h4 (click)=\\\"group.collapsed=!group.collapsed\\\">\\n\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-angle-right]=\\\"group.collapsed\\\" [class.fa-angle-down]=\\\"!group.collapsed\\\"></i>\\n\\t\\t\\t\\t\\t<span>{{ group.name | capitalizeFirst }} setup:</span>\\n\\t\\t\\t\\t\\t<small *ngIf=\\\"group.collapsed\\\">( expand section )</small>\\n\\t\\t\\t\\t\\t<small *ngIf=\\\"!group.collapsed\\\">( fold section )</small>\\n\\t\\t\\t\\t</h4>\\n\\t\\t\\t\\t<div class=\\\"btn-group pull-right\\\" *ngIf=\\\"group.isAdvance != null\\\">\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" (click)=\\\"advanceChange(group, false)\\\" [class.active]=\\\"group.advanceValue==false\\\">Basic setup</button>\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" (click)=\\\"advanceChange(group, true)\\\" [class.active]=\\\"group.advanceValue==true\\\">Advanced setup</button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<ng-template [ngIf]=\\\"!group.collapsed\\\">\\n\\t\\t\\t\\t<player-config-form-inputs *ngFor=\\\"let item of group.items\\\" \\n\\t\\t\\t\\t\\t[data]=\\\"item\\\" [ngClass]=\\\"getInputNgClass(item)\\\">\\n\\t\\t\\t\\t</player-config-form-inputs>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n</ng-template>\\n\"\n\n/***/ }),\n\n/***/ 1473:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  /** enable/disable switch */\\n  /** disabled form */ }\\n  :host switch {\\n    display: block;\\n    margin: 25px 15px;\\n    font-size: 1.2em; }\\n  :host .disabled {\\n    pointer-events: none;\\n    cursor: default;\\n    opacity: 0.25; }\\n  :host .list-group {\\n    margin: 0;\\n    padding: 0; }\\n  :host .list-group .list-group-item {\\n      border-radius: 0;\\n      border-bottom: none;\\n      border-right: none;\\n      border-left: none;\\n      margin: 0;\\n      padding: 10px;\\n      background: none; }\\n  :host .list-group .list-group-item:first-of-type {\\n        border-top: none; }\\n  :host .list-group .list-group-item:last-of-type {\\n        border-bottom: none; }\\n  :host .list-group .list-group-item .list-group-item-heading {\\n        margin: 0; }\\n  :host .list-group .list-group-item .list-group-item-heading > * {\\n          display: inline-block; }\\n  :host .list-group .list-group-item .list-group-item-heading > .btn-group {\\n          margin-top: 10px; }\\n  :host .list-group .list-group-item .list-group-item-heading > .btn-group .btn.active {\\n            cursor: auto;\\n            pointer-events: none; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4 {\\n          position: relative;\\n          color: inherit;\\n          cursor: pointer;\\n          opacity: 0.85;\\n          text-decoration: none; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4 i {\\n            opacity: 0.5;\\n            font-size: 0.9em;\\n            margin: 0 5px; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4 small {\\n            position: absolute;\\n            left: 2em;\\n            top: 2em;\\n            opacity: 0;\\n            visibility: hidden; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4:hover {\\n            opacity: 1; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4:hover i {\\n              opacity: 1; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4:hover small {\\n              opacity: 1;\\n              visibility: visible; }\\n\"\n\n/***/ }),\n\n/***/ 1474:\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n{{'PLAYER.CONFIG.DOCS.TEXT'|translate:lang}} <a href=\\\"{{link}}\\\" target=\\\"_blank\\\"> {{'PLAYER.CONFIG.DOCS.LINK'|translate:lang}} </a>\\n\"\n\n/***/ }),\n\n/***/ 1475:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: inline-block;\\n  white-space: normal;\\n  padding-top: 10px;\\n  color: #868686;\\n  font-weight: 400;\\n  font-size: 0.9em; }\\n\"\n\n/***/ }),\n\n/***/ 1476:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div *ngIf=\\\"data!=null\\\" [ngSwitch]=\\\"data.type\\\">\\n\\t<!--Bool-->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.Bool]\\\" class=\\\"form-group\\\" [class.hide]=\\\"data.hidden\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<switch size=\\\"medium\\\" \\n\\t\\t\\t\\t[checked]=\\\"data.value\\\" \\n\\t\\t\\t\\t(checkedChange)=\\\"onChangeData(data, $event)\\\" \\n\\t\\t\\t\\t[labelRight]=\\\"{on: 'on', off: 'off'}\\\">\\n\\t\\t\\t</switch>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!--RGB-->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.RGB]\\\" class=\\\"form-group\\\" [class.hide]=\\\"data.hidden\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<span *ngIf=\\\"data.defaultValue && data.defaultValue != data.value\\\" [attr.title]=\\\"'reset to: ' + data.defaultValue\\\" \\n\\t\\t\\t(click)=\\\"onResetData(data, data.defaultValue)\\\" class=\\\"btn btn-xs btn-white form-reset-btn\\\">reset</span>\\n\\t\\t<div class=\\\"form-comp overflow-visible\\\">\\n\\t\\t\\t<color-picker *ngIf=\\\"data.value\\\" [value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\"></color-picker>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!--String-->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.String]\\\" class=\\\"form-group\\\" [class.hide]=\\\"data.hidden\\\">\\n\\t\\t<!--String:hidden-->\\n\\t\\t<ng-template [ngIf]=\\\"data.hidden\\\">\\n\\t\\t\\t<input class=\\\"form-control\\\" type=\\\"hidden\\\" [attr.name]=\\\"data.name\\\" [(ngModel)]=\\\"data.value\\\" >\\n\\t\\t</ng-template>\\n\\t\\t<!--String:!hidden-->\\n\\t\\t<ng-template [ngIf]=\\\"!data.hidden\\\">\\n\\t\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t\\t<ng-template [ngIf]=\\\"data.values != null\\\">\\n\\t\\t\\t\\t<!-- !singlechoice && !multichoice -->\\n\\t\\t\\t\\t<ng-template [ngIf]=\\\"!data.singlechoice && !data.multichoice\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"form-comp overflow-visible\\\">\\n\\t\\t\\t\\t\\t\\t<!--dropdown-->\\n\\t\\t\\t\\t\\t\\t<ng-template [ngIf]=\\\"data.name != 'skin' && data.name != 'startSplash' && data.name != 'endSplash'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<dropdown [model]=\\\"getDropdownModel(data)\\\" [value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\"></dropdown>\\n\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t<!--image-grid-->\\n\\t\\t\\t\\t\\t\\t<ng-template [ngIf]=\\\"data.name == 'skin' || data.name == 'startSplash' || data.name == 'endSplash'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<image-grid [name]=\\\"data.name\\\" [(value)]=\\\"data.value\\\" [values]=\\\"data.values\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[urlParser]=\\\"getImageGridUrlParser(data.name)\\\" (valueChange)=\\\"onChangeData(data, $event)\\\">\\n\\t\\t\\t\\t\\t\\t\\t</image-grid>\\n\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t<!-- singlechoice -->\\n\\t\\t\\t\\t<ng-template [ngIf]=\\\"data.singlechoice\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t\\t\\t\\t<singlechoice-input [name]=\\\"data.name\\\" [model]=\\\"data.values\\\" \\n\\t\\t\\t\\t\\t\\t\\t[value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\">\\n\\t\\t\\t\\t\\t\\t</singlechoice-input>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t<!-- multichoice -->\\n\\t\\t\\t\\t<ng-template [ngIf]=\\\"data.multichoice\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t\\t\\t\\t<check-buttons [name]=\\\"data.name\\\" [model]=\\\"data.values\\\" [iconMap]=\\\"getRadioIconMap()\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"stringToArray(data.value)\\\" (valueChange)=\\\"onChangeData(data, arrayToString($event))\\\">\\n\\t\\t\\t\\t\\t\\t</check-buttons>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</ng-template>\\n\\t\\t\\t<!-- text -->\\n\\t\\t\\t<div class=\\\"form-comp\\\" *ngIf=\\\"data.values == null\\\">\\n\\t\\t\\t\\t<!-- singlechoice -->\\n\\t\\t\\t\\t<button *ngIf=\\\"data.singlechoice\\\" class=\\\"btn btn-sm btn-white pull-right\\\" [class.btn-reset]=\\\"isResetBtn\\\" (click)=\\\"onChangeData(data, data.value)\\\">{{ data.value }}</button>\\n\\t\\t\\t\\t<!-- !singlechoice -->\\n\\t\\t\\t\\t<editable-input *ngIf=\\\"!data.singlechoice\\\" [name]=\\\"data.name\\\" [placeholder]=\\\"data.title\\\" [value]=\\\"data.value\\\"\\n\\t\\t\\t\\t\\t(valueChange)=\\\"onChangeData(data, $event)\\\">\\n\\t\\t\\t\\t</editable-input>\\n\\t\\t\\t</div>\\n\\t\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t\\t</ng-template>\\n\\t</div>\\n\\t<!-- Float || Int -->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.Float] || hxType[hxType.Int]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<rangeslider [value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\"\\n\\t\\t\\t\\t[step]=\\\"0.01\\\" [min]=\\\"data.range[0]\\\" [max]=\\\"data.range[1]\\\">\\n\\t\\t\\t</rangeslider>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!-- Link -->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.Link]\\\" class=\\\"form-group\\\">\\n\\t\\t<a class=\\\"btn btn-sm btn-link\\\" [href]=\\\"data.value\\\" target=\\\"_blank\\\">\\n\\t\\t\\t<i class=\\\"fa fa-link\\\"></i>&nbsp;{{ data.title }}\\n\\t\\t</a>\\n\\t</div>\\n\\t<!-- ImgFile -->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.ImgFile]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<upload-image [imageData]=\\\"data.value\\\" (imageChange)=\\\"onChangeData(data, $event)\\\" [resample]=\\\"false\\\"\\n\\t\\t\\t\\tminWidth=\\\"20\\\" minHeight=\\\"20\\\" maxWidth=\\\"1000\\\" maxHeight=\\\"1000\\\" maxFileSize=\\\"60000\\\" (maxSizeCallback)=\\\"onTooBigLogo($event)\\\"></upload-image>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!-- P12File -->\\n\\t<!-- <div *ngSwitchCase=\\\"hxType[hxType.P12File]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<upload-file (fileChange)=\\\"onChangeData(data, $event)\\\"></upload-file>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div> -->\\n\\t<!-- TextArea -->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.TextArea]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<codemirror [config]=\\\"codemirrorConfig\\\"\\n\\t\\t\\t\\t[ngModel]=\\\"formatCodeValue(data.value, true)\\\"\\n\\t\\t\\t\\t(ngModelChange)=\\\"onChangeData(data, formatCodeValue($event, false))\\\"></codemirror>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!-- TODO:List -->\\n\\t<!-- <div *ngSwitchCase=\\\"hxType[hxType.List]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">TODO:{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp todo\\\" *ngIf=\\\"data.itemType == 'VastItem'\\\">\\n\\t\\t\\t<data-list [value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\"></data-list>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"form-comp todo\\\" *ngIf=\\\"data.itemType == 'FreewheelSlot'\\\">\\n\\t\\t\\t<p> >>>>>>>>>>> 'FreewheelSlot' List <<<<<<<<<<<< </p>\\n\\t\\t</div>\\n\\t\\t<small>{{ data.type }}</small>\\n\\t\\t<small>{{ data.value }}</small>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div> -->\\n\\t<!-- UNKNOWN -->\\n\\t<!-- <div *ngSwitchDefault class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">UNKNOWN:{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp todo\\\">\\n\\t\\t\\t<p>name: {{ data.name }} </p>\\n\\t\\t\\t<small>type: {{ data.type }}</small>\\n\\t\\t\\t<small>values: {{ data.values }}</small>\\n\\t\\t\\t<small>range: {{ data.range }}</small>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div> -->\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1477:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: inline-block;\\n  vertical-align: top; }\\n  :host.form-group-inputs-full {\\n    width: 100%; }\\n  :host.form-group-inputs-small {\\n    width: 50%;\\n    min-width: 265px; }\\n  :host.color {\\n    float: left; }\\n  :host.hidden {\\n    display: block; }\\n  :host .form-group {\\n    position: relative;\\n    margin: 10px 0 0 0;\\n    padding: 10px 15px;\\n    border: 1px solid #efefef;\\n    white-space: nowrap; }\\n  :host .form-group .form-label {\\n      color: #212121;\\n      white-space: normal;\\n      font-weight: 400; }\\n  :host .form-group .form-reset-btn {\\n      cursor: pointer;\\n      float: right;\\n      opacity: 0.9;\\n      margin-bottom: 5px; }\\n  :host .form-group .form-reset-btn:hover {\\n        opacity: 1; }\\n  :host .form-group .form-comp {\\n      min-width: 250px;\\n      overflow: hidden;\\n      white-space: normal; }\\n  :host .form-group .form-comp.todo {\\n        background: lightgoldenrodyellow; }\\n  :host .form-group .form-comp.overflow-visible {\\n        overflow: visible; }\\n  :host .form-group .form-comp /deep/ image-grid .skin-gorilla span {\\n        left: 4%;\\n        bottom: 22%; }\\n  :host .form-group .form-comp /deep/ image-grid .skin-mole span {\\n        left: 5%;\\n        bottom: 15%; }\\n  :host .form-group .form-comp /deep/ image-grid .skin-snake span {\\n        left: 3%;\\n        bottom: 15%; }\\n  :host .form-group .form-comp /deep/ image-grid .skin-zebra span {\\n        left: 6%;\\n        bottom: 21%; }\\n  :host .form-group .form-comp .btn-reset {\\n        position: absolute;\\n        top: 6px;\\n        right: 0; }\\n  :host.reset .form-group {\\n    border: none; }\\n\"\n\n/***/ }),\n\n/***/ 1478:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"outlet\\\" #outletContainer>\\n\\t<router-outlet></router-outlet>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1479:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: block;\\n  margin: 0; }\\n  :host .outlet {\\n    display: block;\\n    position: relative;\\n    padding-bottom: 50px; }\\n\"\n\n/***/ }),\n\n/***/ 1480:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"player-panel-body\\\" #configuratorPreviewFormBody>\\n    <player-configurator-preview-video></player-configurator-preview-video>\\n</div>\\n<div class=\\\"player-panel-head\\\" #configuratorPreviewFormHead>\\n    <div class=\\\"btn-group configuration-buttons\\\">\\n        <button class=\\\"btn btn-sm btn-bradmax pull-right\\\" (click)=\\\"saveChanges()\\\">\\n            save changes <i class=\\\"fa fa-save\\\"></i>\\n        </button>\\n    </div>\\n    <div class=\\\"form-group configuration-name\\\">\\n        <label>configuration name: </label>\\n        <input type=\\\"text\\\" class=\\\"form-control input-sm\\\" [(ngModel)]=\\\"configService.name\\\"/>\\n    </div>\\n</div>\\n<div class=\\\"player-panel-foot\\\" #configuratorPreviewFormFoot>\\n    <!--{{configService.video.playerStates[state]}}-->\\n    <switch size=\\\"small\\\" [checked]=\\\"configService.video.enableSkinAutohide\\\" (checkedChange)=\\\"changeSkinAutohide($event)\\\"\\n        [labelRight]=\\\"{on: 'enabled autohide skin (works only in preview)',off: 'disabled autohide skin (works only in preview)'}\\\">\\n    </switch>\\n    <div class=\\\"player-state\\\">\\n        <span [class.active]=\\\"state == configService.video.playerStates.start\\\" \\n            (click)=\\\"setPlayerState(configService.video.playerStates.start)\\\"><small>show</small> <i>Start</i>\\n        </span>\\n        <span [class.active]=\\\"state == configService.video.playerStates.middle\\\" \\n            (click)=\\\"setPlayerState(configService.video.playerStates.middle)\\\"><small>show while</small> <i>Playing</i>\\n        </span>\\n        <span [class.active]=\\\"state == configService.video.playerStates.end\\\" \\n            (click)=\\\"setPlayerState(configService.video.playerStates.end)\\\"><small>show</small> <i>End</i>\\n        </span>\\n    </div>\\n</div>\\n\\n\"\n\n/***/ }),\n\n/***/ 1481:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  display: block;\\n  padding: 20px 10px;\\n  overflow: hidden;\\n  margin: auto;\\n  /** HEAD */\\n  /** BODY */\\n  /** FOOT */ }\\n  :host .player-panel-head {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    height: 100px;\\n    overflow: hidden;\\n    padding: 20px;\\n    background: #eeeeee; }\\n  :host .player-panel-head .configuration-name {\\n      width: 50%;\\n      margin: 0; }\\n  :host .player-panel-head .configuration-name label {\\n        color: inherit;\\n        width: 100%;\\n        margin-top: 0.5em;\\n        font-weight: 200; }\\n  :host .player-panel-head .configuration-name input {\\n        margin: 0 0 10px;\\n        color: inherit; }\\n  :host .player-panel-head .configuration-buttons {\\n      float: right;\\n      width: 50%;\\n      text-align: right; }\\n  :host .player-panel-head .configuration-buttons button {\\n        padding: 10px 20px;\\n        font-size: 1.4rem;\\n        margin: 10px 0;\\n        color: white; }\\n  :host .player-panel-body {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    bottom: 0;\\n    padding: 10px;\\n    overflow: hidden;\\n    background: #eeeeee; }\\n  :host .player-panel-foot {\\n    position: absolute;\\n    bottom: 0;\\n    left: 0;\\n    right: 0;\\n    padding: 20px;\\n    background: #eeeeee; }\\n  :host .player-panel-foot .player-state {\\n      margin-top: 5px;\\n      position: relative;\\n      margin-right: 64px; }\\n  :host .player-panel-foot .player-state span {\\n        padding: 15px 0;\\n        float: left;\\n        text-align: center;\\n        cursor: pointer;\\n        background: #FFF;\\n        border: 1px solid #FFF;\\n        opacity: 0.5; }\\n  :host .player-panel-foot .player-state span:hover {\\n          opacity: 0.75; }\\n  :host .player-panel-foot .player-state span.active {\\n          opacity: 1; }\\n  :host .player-panel-foot .player-state span:nth-child(1) {\\n          width: 25%;\\n          border-right-color: #888; }\\n  :host .player-panel-foot .player-state span:nth-child(2) {\\n          width: 50%;\\n          border-right-color: #888;\\n          border-left-color: #888; }\\n  :host .player-panel-foot .player-state span:nth-child(3) {\\n          width: 25%;\\n          border-left-color: #888; }\\n  :host .player-panel-foot .player-state span i {\\n          color: #333;\\n          font-weight: bold; }\\n  :host .player-panel-foot .player-state span small {\\n          color: #666; }\\n\"\n\n/***/ }),\n\n/***/ 1482:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"preview\\\" [class.with-header]=\\\"!isAppInIframe\\\">\\n    <player-configurator-preview></player-configurator-preview>\\n</div>\\n<div class=\\\"form\\\" [class.with-header]=\\\"!isAppInIframe\\\">\\n    <player-configurator-form></player-configurator-form>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1483:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .preview {\\n  position: fixed;\\n  top: 0px;\\n  left: 500px;\\n  right: 0;\\n  bottom: 0;\\n  min-width: 500px; }\\n\\n:host .form {\\n  position: absolute;\\n  top: 0px;\\n  left: 200px;\\n  bottom: 0;\\n  width: 300px;\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n  background: #fefefe; }\\n\\n:host .form::-webkit-scrollbar {\\n    width: 8px;\\n    height: 8px;\\n    background: none; }\\n\\n:host .form::-webkit-scrollbar-track {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n    background: #EEEEEE; }\\n\\n:host .form::-webkit-scrollbar-thumb:window-inactive {\\n    background: #DDDDDD; }\\n\\n:host .form::-webkit-scrollbar-thumb {\\n    background: #CCCCCC; }\\n\\n:host .preview.with-header, :host .form.with-header {\\n  top: 56px; }\\n\\n@media (min-width: 1201px) {\\n  :host .preview {\\n    left: 600px; }\\n  :host .form {\\n    width: 400px; } }\\n\\n@media (min-width: 1401px) {\\n  :host .preview {\\n    left: 700px; }\\n  :host .form {\\n    width: 500px; } }\\n\\n@media (min-width: 1601px) {\\n  :host .preview {\\n    left: 800px; }\\n  :host .form {\\n    width: 600px; } }\\n\"\n\n/***/ }),\n\n/***/ 1484:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">\\n\\t{{ 'PLAYER.LIST.LABEL' | translate : lang }}\\n\\t<small>{{ 'PLAYER.LIST.TOTAL_COUNT' | translate : lang }}:&nbsp;{{ count }}</small>\\n\\n\\t<a class=\\\"pull-right pull-right btn btn-white\\\" href=\\\"//bradmax.com/static/player-doc\\\" target=\\\"_blank\\\"><i class=\\\"fa fa-book\\\"></i> {{ 'PLAYER.LIST.SEE_DOCS' | translate : lang }}</a>\\n</h1>\\n<div class=\\\"config-btns\\\">\\n\\t<button type=\\\"button\\\" class=\\\"btn btn-md btn-bradmax\\\" (click)=\\\"askNew()\\\">\\n\\t\\t<i class=\\\"fa fa-plus\\\"></i>&nbsp;{{ 'PLAYER.LIST.BUTTON.ADD' | translate : lang }}\\n\\t</button>\\n\\t<button *ngIf=\\\"isAnyItemSelected && selectedItemCount == 1\\\" type=\\\"button\\\" class=\\\"btn btn-md btn-info\\\" (click)=\\\"askClone()\\\">\\n\\t\\t<i class=\\\"fa fa-files-o\\\"></i>&nbsp;{{ 'PLAYER.LIST.BUTTON.CLONE' | translate : lang }}\\n\\t</button>\\n\\t<button *ngIf=\\\"isAnyItemSelected\\\" type=\\\"button\\\" class=\\\"btn btn-md btn-danger\\\" (click)=\\\"askDelete()\\\">\\n\\t\\t<i class=\\\"fa fa-trash\\\"></i>&nbsp;{{ 'PLAYER.LIST.BUTTON.DELETE' | translate : lang }}\\n\\t</button>\\n</div>\\n<div class=\\\"list-container\\\">\\n\\t<div *ngIf=\\\"isAnyItemSelected\\\" class=\\\"config-info\\\">\\n\\t\\t<p class=\\\"pull-left m-r-15\\\">{{ 'PLAYER.LIST.SELECTED_COUNT' | translate : lang }}: {{ selectedItemCount }}</p>\\n\\t\\t<!-- <a class=\\\"pull-right m-r-15\\\" href=\\\"//bradmax.com/static/player-doc\\\" target=\\\"_blank\\\"><i class=\\\"fa fa-book\\\"></i> {{ 'PLAYER.LIST.SEE_DOCS' | translate : lang }}</a> -->\\n\\t</div>\\n\\t<div class=\\\"container config-list\\\">\\n\\t\\t<div class=\\\"row config-list-header\\\" *ngIf=\\\"model && model.length > 0\\\">\\n\\t\\t\\t<span [ngClass]=\\\"cellClass.name\\\">{{ 'PLAYER.LIST.COLUMN.NAME' | translate : lang }}</span>\\n\\t\\t\\t<a (click)=\\\"sort('updated_at')\\\" [ngClass]=\\\"cellClass.updated\\\">\\n\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [ngClass]=\\\"formatSortIconObject('updated_at')\\\"></i>\\n\\t\\t\\t\\t<span>&nbsp;{{ 'PLAYER.LIST.COLUMN.UPDATED_AT' | translate : lang }}</span>\\n\\t\\t\\t</a>\\n\\t\\t\\t<a (click)=\\\"sort('created_at')\\\" [ngClass]=\\\"cellClass.created\\\">\\n\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [ngClass]=\\\"formatSortIconObject('created_at')\\\"></i>\\n\\t\\t\\t\\t<span>&nbsp;{{ 'PLAYER.LIST.COLUMN.CREATED_AT' | translate : lang }}</span>\\n\\t\\t\\t</a>\\n\\t\\t\\t<span [ngClass]=\\\"cellClass.buttons\\\" class=\\\"hidden-sm hidden-xs\\\">&nbsp;</span>\\n\\t\\t</div>\\n\\t\\t<div *ngFor=\\\"let item of model;let i = index;let even = even; let odd = odd\\\" class=\\\"row config-item\\\" [ngClass]=\\\"{ odd: odd, even: even, selected: item.selected }\\\">\\n\\t\\t\\t<span [ngClass]=\\\"cellClass.name\\\">\\n\\t\\t\\t\\t<span [attr.title]=\\\"'select: ' + item.name\\\" (click)=\\\"onItemClickSelect(item, $event)\\\">\\n\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-square-o]=\\\"!item.selected\\\" [class.fa-check-square-o]=\\\"item.selected\\\"></i>\\n\\t\\t\\t\\t</span>\\n\\t\\t\\t\\t<span class=\\\"clickable\\\" [attr.title]=\\\"'edit: ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\">\\n\\t\\t\\t\\t\\t<strong>{{ item.name }}</strong>\\n\\t\\t\\t\\t</span>\\n\\t\\t\\t</span>\\n\\t\\t\\t<span class=\\\"clickable\\\" [attr.title]=\\\"'edit: ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\" [ngClass]=\\\"cellClass.updated\\\">\\n\\t\\t\\t\\t<i>{{ formatDate(item.updated_at) }}</i>\\n\\t\\t\\t</span>\\n\\t\\t\\t<span class=\\\"clickable\\\" [attr.title]=\\\"'edit: ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\" [ngClass]=\\\"cellClass.created\\\">\\n\\t\\t\\t\\t<i>{{ formatDate(item.created_at) }}</i>\\n\\t\\t\\t</span>\\n\\t\\t\\t<!-- buttons -->\\n\\t\\t\\t<span [ngClass]=\\\"cellClass.buttons\\\">\\n\\t\\t\\t\\t<!-- v2 -->\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"isV2(item); else buttonsV1;\\\">\\n\\t\\t\\t\\t\\t<a class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'edit player ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-edit\\\"></i>\\n\\t\\t\\t\\t\\t\\t<span>&nbsp;{{ 'PLAYER.LIST.BUTTON.EDIT' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"item.latest_webbuild?.player_js_url\\\">\\n\\t\\t\\t\\t\\t\\t<a class=\\\"btn btn-sm btn-white\\\"\\n\\t\\t\\t\\t\\t\\t\\t [download-player-js]=\\\"item.latest_webbuild.player_js_url\\\"\\n\\t\\t\\t\\t\\t\\t\\t [attr.download]=\\\"'bradmax_player.js'\\\"\\n\\t\\t\\t\\t\\t\\t\\t [attr.title]=\\\"'get js file for: ' + item.name\\\"\\n\\t\\t\\t\\t\\t\\t\\t type=\\\"text/javascript\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\"\\n\\t\\t\\t\\t\\t\\t\\t #dpjv2=\\\"downloadPlayerJsV2\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-download]=\\\"!dpjv2.working\\\" [class.fa-spinner]=\\\"!!dpjv2.working\\\" [class.rotation]=\\\"!!dpjv2.working\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>&nbsp;download player js</span>\\n\\t\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t\\t<a type=\\\"button\\\" class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'get embed code for: ' + item.name\\\"\\n\\t\\t\\t\\t\\t\\t\\t [routerLink]=\\\"['/', 'admin', 'player', item.id, 'embedcode']\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-code\\\"></i><span>&nbsp;{{ 'PLAYER.LIST.BUTTON.GO_EMBEDER' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t<!-- v1 -->\\n\\t\\t\\t\\t<ng-template #buttonsV1>\\n\\t\\t\\t\\t\\t<a class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'edit player ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-edit\\\"></i>\\n\\t\\t\\t\\t\\t\\t<span>&nbsp;{{ 'PLAYER.LIST.BUTTON.EDIT' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t<a type=\\\"button\\\" class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'download: ' + item.name\\\" *ngIf=\\\"item.latest_webbuild?.zip_url\\\"\\n\\t\\t\\t\\t\\t\\t href=\\\"{{ item.latest_webbuild?.zip_url }}\\\" target=\\\"_blank\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-file-archive-o\\\"></i><span>&nbsp;{{ 'PLAYER.LIST.BUTTON.GET_ZIP' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t<a type=\\\"button\\\" class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'get embed code for: ' + item.name\\\" *ngIf=\\\"item.latest_webbuild?.zip_url\\\" (click)=\\\"setUpEmbeder(item)\\\" [routerLink]=\\\"['/', 'admin', 'player', item.id, 'embed-code']\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-code\\\"></i><span>&nbsp;{{ 'PLAYER.LIST.BUTTON.GO_EMBEDER' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t<a type=\\\"button\\\" class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'see versions of: ' + item.name\\\" [routerLink]=\\\"['/', 'admin', 'player', item.id, 'versions']\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-eye\\\"></i><span>&nbsp;{{ 'PLAYER.LIST.BUTTON.SEE_VER' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</span>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1485:\n/***/ (function(module, exports) {\n\nmodule.exports = \"@-webkit-keyframes fa-spinner-rotate-animation {\\n  0% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg); }\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n            transform: rotate(360deg); } }\\n\\n@keyframes fa-spinner-rotate-animation {\\n  0% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg); }\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n            transform: rotate(360deg); } }\\n\\n:host .fa-spinner.rotation {\\n  -webkit-animation: fa-spinner-rotate-animation 0.7s infinite steps(8);\\n          animation: fa-spinner-rotate-animation 0.7s infinite steps(8);\\n  -webkit-transform: translateZ(0);\\n          transform: translateZ(0);\\n  -webkit-transform-origin: 50% 50%;\\n          transform-origin: 50% 50%; }\\n\\n:host .list-container {\\n  padding: 10px;\\n  border-radius: 5px; }\\n\\n:host .config-btns {\\n  margin-bottom: 15px; }\\n\\n:host .config-btns .btn {\\n    margin: 2px; }\\n\\n:host .config-info {\\n  width: 100%;\\n  height: 20px; }\\n\\n:host .config-list {\\n  display: inline-block;\\n  font-size: 0;\\n  padding: 0;\\n  width: 100%;\\n  height: auto; }\\n\\n:host .config-list .config-list-header, :host .config-list .config-item {\\n    display: inline-block;\\n    width: inherit;\\n    margin: 0;\\n    padding: 0;\\n    color: inherit;\\n    text-decoration: none;\\n    -webkit-box-shadow: none;\\n            box-shadow: none; }\\n\\n:host .config-list .config-list-header::after, :host .config-list .config-list-header::before, :host .config-list .config-item::after, :host .config-list .config-item::before {\\n      display: none;\\n      content: ''; }\\n\\n:host .config-list .config-list-header .cell, :host .config-list .config-item .cell {\\n      display: inline-block;\\n      white-space: nowrap; }\\n\\n:host .config-list .config-list-header .cell.cell-name, :host .config-list .config-item .cell.cell-name {\\n        text-align: left;\\n        padding-left: 32px;\\n        overflow: hidden; }\\n\\n:host .config-list .config-list-header .cell.cell-created, :host .config-list .config-item .cell.cell-created {\\n        text-align: center;\\n        font-size: 0.9em; }\\n\\n:host .config-list .config-list-header .cell.cell-updated, :host .config-list .config-item .cell.cell-updated {\\n        text-align: center;\\n        font-size: 0.9em; }\\n\\n:host .config-list .config-list-header .cell.cell-buttons, :host .config-list .config-item .cell.cell-buttons {\\n        text-align: right; }\\n\\n@media (max-width: 640px) {\\n          :host .config-list .config-list-header .cell.cell-buttons span, :host .config-list .config-item .cell.cell-buttons span {\\n            display: none; } }\\n\\n:host .config-list .config-list-header .cell.small-line, :host .config-list .config-item .cell.small-line {\\n        line-height: 15px; }\\n\\n:host .config-list .config-list-header {\\n    font-size: 12px; }\\n\\n:host .config-list .config-list-header .cell {\\n      vertical-align: bottom; }\\n\\n:host .config-list .config-list-header .cell-updated, :host .config-list .config-list-header .cell-created {\\n      cursor: pointer;\\n      color: inherit;\\n      text-decoration: none; }\\n\\n:host .config-list .config-list-header .cell-updated i, :host .config-list .config-list-header .cell-created i {\\n        opacity: 0.25; }\\n\\n:host .config-list .config-list-header .cell-updated i.active, :host .config-list .config-list-header .cell-created i.active {\\n          opacity: 1; }\\n\\n:host .config-list .config-item {\\n    position: relative;\\n    padding: 0 0;\\n    font-size: 14px;\\n    border-top: 2px solid white; }\\n\\n:host .config-list .config-item .cell {\\n      vertical-align: middle;\\n      height: 38px;\\n      line-height: 38px;\\n      padding-right: 0; }\\n\\n:host .config-list .config-item .cell.cell-name {\\n        position: relative;\\n        color: #335eea; }\\n\\n:host .config-list .config-item .cell.cell-name i.fa {\\n          cursor: pointer;\\n          position: absolute;\\n          left: 10px;\\n          top: 12px;\\n          opacity: 0.24; }\\n\\n:host .config-list .config-item .cell.cell-buttons {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: horizontal;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: row;\\n                flex-direction: row;\\n        -ms-flex-line-pack: center;\\n            align-content: center;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: end;\\n            -ms-flex-pack: end;\\n                justify-content: flex-end; }\\n\\n:host .config-list .config-item .cell.cell-buttons .btn {\\n          margin-left: 0.25em;\\n          margin-right: 0.25em; }\\n\\n:host .config-list .config-item .cell.cell-buttons .btn:first-child {\\n            margin-left: 0; }\\n\\n:host .config-list .config-item .cell.cell-buttons .btn:last-child {\\n            margin-right: 0; }\\n\\n:host .config-list .config-item .clickable {\\n      cursor: pointer;\\n      background: transparent;\\n      display: block; }\\n\\n:host .config-list .config-item:last-of-type {\\n      border-bottom: 2px solid white; }\\n\\n:host .config-list .config-item:hover, :host .config-list .config-item:focus, :host .config-list .config-item:active {\\n      color: inherit;\\n      text-decoration: none;\\n      -webkit-box-shadow: none;\\n              box-shadow: none; }\\n\\n:host .config-list .config-item:hover {\\n      background: #EEE; }\\n\\n:host .config-list .config-item.selected {\\n      background: #DDD; }\\n\\n:host .config-list .config-item.selected .cell-name i.fa {\\n        opacity: 1; }\\n\"\n\n/***/ }),\n\n/***/ 1486:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- <h4> {{'PLAYER.LIST.LABEL' | translate : lang}} </h4> -->\\n<h4> <i class=\\\"fa fa-history\\\"></i>&nbsp;Build versions history</h4>\\n<div class=\\\"versions-container\\\">\\n\\t<h5 class=\\\"empty-message\\\" *ngIf=\\\"model.length <= 0\\\">{{'PLAYER.VERSIONS.MESSAGE.EMPTY' | translate:lang}}</h5>\\n\\t<ul class=\\\"timeline\\\" *ngIf=\\\"model.length > 0\\\">\\n\\t\\t<li *ngFor=\\\"let build of model;\\\" [class.active]=\\\"build.active\\\">\\n\\t\\t\\t<div class=\\\"timeline-time\\\">\\n\\t\\t\\t\\t<span class=\\\"date\\\">{{formatDate(build.created_at)}}</span>\\n\\t\\t\\t\\t<span class=\\\"time\\\">{{formatTime(build.created_at)}}</span>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"timeline-icon\\\">\\n\\t\\t\\t\\t<a href=\\\"javascript:;\\\" style=\\\"cursor:default;\\\" [attr.title]=\\\"formatAttr(build)\\\">\\n\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [ngClass]=\\\"{'fa-chevron-right':!build.active,'fa-check':build.active}\\\"></i>\\n\\t\\t\\t\\t</a>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"timeline-body\\\">\\n\\t\\t\\t\\t<div class=\\\"timeline-content\\\">\\n\\t\\t\\t\\t\\t<p>Player version: {{build.version}}<br />Player commit id: {{build.commit_id}}</p>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"timeline-footer\\\">\\n\\t\\t\\t\\t\\t<span><i class=\\\"fa fa-calendar\\\"></i> {{formatDaysAgo(build.created_at)}}</span>\\n\\t\\t\\t\\t\\t<div class=\\\"btn-group pull-right\\\">\\n\\t\\t\\t\\t\\t\\t<a href=\\\"//bradmax.com/static/player-doc\\\" target=\\\"_blank\\\"><i class=\\\"fa fa-book\\\"></i>&nbsp;{{'PLAYER.VERSIONS.LINK.DOC' | translate:lang}}</a>\\n\\t\\t\\t\\t\\t\\t<a href=\\\"{{build.zip_url}}\\\" target=\\\"_blank\\\" class=\\\"m-l-15\\\"><i class=\\\"fa fa-file-archive-o\\\"></i>&nbsp;{{'PLAYER.VERSIONS.LINK.ZIP' | translate:lang}}</a>\\n\\t\\t\\t\\t\\t\\t<a *ngIf=\\\"build.active\\\" [routerLink]=\\\"EMBED_CODE_LINK\\\" class=\\\"m-l-15\\\"><i class=\\\"fa fa-code\\\"></i>&nbsp;{{'PLAYER.VERSIONS.LINK.EMBED' | translate:lang}}</a>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</li>\\n\\t\\t<li>\\n\\t\\t\\t<div class=\\\"timeline-icon\\\">\\n\\t\\t\\t\\t<a href=\\\"javascript:;\\\"><i class=\\\"fa fa-chevron-up\\\"></i></a>\\n\\t\\t\\t</div>\\n\\t\\t</li>\\n\\t</ul>\\n</div>\\n\"\n\n/***/ }),\n\n/***/ 1487:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .versions-container {\\n  padding: 10px;\\n  background: #fff;\\n  border-radius: 5px; }\\n\\n:host .timeline:before {\\n  content: '';\\n  position: absolute;\\n  top: 54px;\\n  bottom: 44px;\\n  width: 5px;\\n  left: 20%;\\n  margin-left: -2.5px;\\n  background: #c8c8c8; }\\n\\n:host .timeline li .timeline-time {\\n  padding-top: 1.7rem; }\\n\\n:host .timeline li .timeline-time .date {\\n    line-height: 1.55rem;\\n    font-size: 1.5rem;\\n    color: #212121; }\\n\\n:host .timeline li .timeline-time .time {\\n    line-height: 1.15rem;\\n    font-size: 1.1rem;\\n    color: #212121; }\\n\\n:host .timeline li .timeline-icon a {\\n  background-color: #c8c8c8;\\n  border-color: #c8c8c8; }\\n\\n:host .timeline li .timeline-body {\\n  border: 1px solid transparent;\\n  border-color: #c8c8c8;\\n  color: #212121; }\\n\\n:host .timeline li .timeline-body:before {\\n    border-right-color: #c8c8c8; }\\n\\n:host .timeline li .timeline-body .timeline-footer {\\n    background: #c8c8c8; }\\n\\n:host .timeline li .timeline-body .timeline-footer, :host .timeline li .timeline-body .timeline-footer a {\\n      color: #212121; }\\n\\n:host .timeline li.active:before {\\n  content: '';\\n  position: absolute;\\n  top: 54px;\\n  bottom: 44px;\\n  width: 5px;\\n  left: 20%;\\n  margin-left: -2.5px;\\n  background: #c8c8c8; }\\n\\n:host .timeline li.active:before {\\n  background: #c8c8c8;\\n  background: -webkit-gradient(linear, left bottom, left top, from(#c8c8c8), color-stop(75%, #335eea));\\n  background: linear-gradient(to top, #c8c8c8 0%, #335eea 75%); }\\n\\n:host .timeline li.active .timeline-time .date {\\n  color: #335eea; }\\n\\n:host .timeline li.active .timeline-time .time {\\n  color: #335eea; }\\n\\n:host .timeline li.active .timeline-icon a {\\n  background-color: #335eea;\\n  border-color: #335eea; }\\n\\n:host .timeline li.active .timeline-body {\\n  border-color: #335eea; }\\n\\n:host .timeline li.active .timeline-body:before {\\n    border-right-color: #335eea; }\\n\\n:host .timeline li.active .timeline-body .timeline-footer {\\n    background: #335eea; }\\n\\n:host .timeline li.active .timeline-body .timeline-footer, :host .timeline li.active .timeline-body .timeline-footer a {\\n      color: #fcfcfc; }\\n\"\n\n/***/ }),\n\n/***/ 1488:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ProductsView; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_angular_l10n__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__service_account_service__ = __webpack_require__(65);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__service_buyCookie_service__ = __webpack_require__(188);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__service_subscription_service__ = __webpack_require__(64);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__service_user_service__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__service_view_service__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__modal_modal_service__ = __webpack_require__(29);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\nvar ProductsView = (function (_super) {\n    __extends(ProductsView, _super);\n    function ProductsView(locale, translation, route, router, user, accountService, view, flashMessagesService, subscriptionService, modal, buyCookie) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.route = route;\n        _this.router = router;\n        _this.user = user;\n        _this.accountService = accountService;\n        _this.view = view;\n        _this.flashMessagesService = flashMessagesService;\n        _this.subscriptionService = subscriptionService;\n        _this.modal = modal;\n        _this.buyCookie = buyCookie;\n        return _this;\n    }\n    ProductsView.prototype.ngOnInit = function () {\n        var _this = this;\n        this.route.data.subscribe(function (d) {\n            _this.products = d.products.results;\n            _this.accountProductsIds = {};\n            for (var _i = 0, _a = d.accountProducts.results; _i < _a.length; _i++) {\n                var ap = _a[_i];\n                _this.accountProductsIds[ap.product_plan.id] = true;\n            }\n            var buyCookiePlan = _this.buyCookie.read();\n            if (buyCookiePlan != null) {\n                var buyCookieProdId = null;\n                for (var _b = 0, _c = _this.products; _b < _c.length; _b++) {\n                    var p = _c[_b];\n                    for (var _d = 0, _e = p.plans; _d < _e.length; _d++) {\n                        var pp = _e[_d];\n                        if (pp.id == buyCookiePlan) {\n                            buyCookieProdId = p.id;\n                            break;\n                        }\n                    }\n                }\n                _this.onPlanSelect(buyCookieProdId, buyCookiePlan);\n            }\n        });\n    };\n    ProductsView.prototype.ngAfterViewInit = function () {\n        var itemsSet = $('.panel-body.products [rel=\"tooltip\"]');\n        itemsSet.tooltip();\n    };\n    ProductsView.prototype.isPlanSelectedForAccount = function (planId) {\n        return (planId in this.accountProductsIds);\n    };\n    ProductsView.prototype.onPlanSelect = function (productId, planId) {\n        for (var _i = 0, _a = this.products; _i < _a.length; _i++) {\n            var prod = _a[_i];\n            if (prod.id == productId) {\n                for (var _b = 0, _c = prod.plans; _b < _c.length; _b++) {\n                    var plan = _c[_b];\n                    if (plan.id === planId) {\n                        this.checkPlan(plan);\n                        break;\n                    }\n                }\n                break;\n            }\n        }\n    };\n    ProductsView.prototype.onPlanContact = function (planId) {\n        window.open('https://www.bradmax.com/site/en/#contact', '_blank');\n    };\n    ProductsView.prototype.checkPlan = function (plan) {\n        var _this = this;\n        if (plan.is_contact_required) {\n            this.onPlanContact(plan.id);\n            return;\n        }\n        this.accountService.get(this.user.accountId).subscribe(function (r) { return _this.checkAccount(r, plan); }, function (e) { return _this.handleError(); });\n    };\n    ProductsView.prototype.checkAccount = function (a, plan) {\n        var _this = this;\n        if (a.details && a.details.company_name && this.user.accountId) {\n            this.subscriptionService.getSubscriptionOrders(this.user.accountId).subscribe(function (d) {\n                var subscriptionOrderId = null;\n                if (d.count > 0) {\n                    for (var _i = 0, _a = d.results; _i < _a.length; _i++) {\n                        var item = _a[_i];\n                        if (item.product_plan === plan.id) {\n                            subscriptionOrderId = item.id;\n                            break;\n                        }\n                    }\n                }\n                if (subscriptionOrderId !== null)\n                    _this.askToReuse(plan, subscriptionOrderId);\n                else\n                    _this.createSubscriptionOrderAction(plan.id);\n            }, function (e) { return _this.handleError(); });\n        }\n        else\n            this.accountDetailsInvalidAction(plan.id);\n    };\n    ProductsView.prototype.createSubscriptionOrderAction = function (planId) {\n        var _this = this;\n        if (this.user.accountId)\n            this.subscriptionService.createSubscriptionOrder(this.user.accountId, planId).subscribe(function (d) { return _this.router.navigate(['admin', 'subscription', d.id]); }, function (e) { return _this.handleError(); });\n    };\n    ProductsView.prototype.accountDetailsInvalidAction = function (planId) {\n        var _this = this;\n        this.view.spinner(false);\n        this.modal.prompt(this.translation.translate('PRODUCTS.MESSAGE.ACCOUNT_INVALID'), [\n            {\n                label: this.translation.translate('PRODUCTS.BUTTON.YES'), fa: 'check',\n                close: true, click: function () { return _this.router.navigate(['admin', 'account', 'details', { plan: planId }]); }\n            }, {\n                label: this.translation.translate('PRODUCTS.BUTTON.CANCEL'), fa: 'times', close: true\n            }\n        ]);\n    };\n    ProductsView.prototype.askToReuse = function (plan, subscriptionOrderId) {\n        var _this = this;\n        this.view.spinner(false);\n        this.modal.prompt(this.translation.translate('PRODUCTS.MESSAGE.SUBSCRIPTION_REUSE', { name: plan.name }), [\n            {\n                label: this.translation.translate('PRODUCTS.BUTTON.CONTINUE'), fa: 'check',\n                close: true, click: function () { return _this.router.navigate(['admin', 'subscription', subscriptionOrderId]); }\n            }, {\n                label: this.translation.translate('PRODUCTS.BUTTON.CREATE_NEW'), fa: 'plus',\n                close: true, click: function () {\n                    if (_this.user.accountId)\n                        _this.subscriptionService.cancelSubscriptionOrder(_this.user.accountId, subscriptionOrderId)\n                            .subscribe(function (r) { _this.buyCookie.erase(); _this.createSubscriptionOrderAction(plan.id); }, function (e) { return _this.handleError(); });\n                }\n            }, {\n                label: this.translation.translate('PRODUCTS.BUTTON.CANCEL'), fa: 'times',\n                close: true, click: function () { return _this.buyCookie.erase(); }\n            }\n        ]);\n    };\n    ProductsView.prototype.handleError = function () {\n        this.view.spinner(false);\n        this.flashMessagesService.show(this.translation.translate('PRODUCTS.MESSAGE.DEFAULT_ERROR'), { cssClass: 'alert-warning' });\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n    ProductsView = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'products-view',\n            template: __webpack_require__(1489),\n            styles: [__webpack_require__(1490)],\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"a\" /* LocaleService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"d\" /* TranslationService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* ActivatedRoute */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"a\" /* ActivatedRoute */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"g\" /* Router */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_7__service_user_service__[\"a\" /* UserService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_7__service_user_service__[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof __WEBPACK_IMPORTED_MODULE_4__service_account_service__[\"a\" /* AccountService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_4__service_account_service__[\"a\" /* AccountService */]) === \"function\" && _f || Object, typeof (_g = typeof __WEBPACK_IMPORTED_MODULE_8__service_view_service__[\"a\" /* ViewService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_8__service_view_service__[\"a\" /* ViewService */]) === \"function\" && _g || Object, typeof (_h = typeof __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__[\"FlashMessagesService\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_3_angular2_flash_messages__[\"FlashMessagesService\"]) === \"function\" && _h || Object, typeof (_j = typeof __WEBPACK_IMPORTED_MODULE_6__service_subscription_service__[\"a\" /* SubscriptionService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__service_subscription_service__[\"a\" /* SubscriptionService */]) === \"function\" && _j || Object, typeof (_k = typeof __WEBPACK_IMPORTED_MODULE_9__modal_modal_service__[\"a\" /* ModalService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_9__modal_modal_service__[\"a\" /* ModalService */]) === \"function\" && _k || Object, typeof (_l = typeof __WEBPACK_IMPORTED_MODULE_5__service_buyCookie_service__[\"a\" /* BuyCookieService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_5__service_buyCookie_service__[\"a\" /* BuyCookieService */]) === \"function\" && _l || Object])\n    ], ProductsView);\n    return ProductsView;\n}(__WEBPACK_IMPORTED_MODULE_2_angular_l10n__[\"b\" /* Localization */]));\n\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(21)))\n\n/***/ }),\n\n/***/ 1489:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">{{ 'PRODUCTS.TITLE' | translate:lang }}</h1>\\n<div class=\\\"panel-body products\\\">\\n\\t<div *ngFor=\\\"let product of products\\\" class=\\\"row\\\">\\n\\t\\t<!-- item -->\\n\\t\\t<div *ngFor=\\\"let plan of product.plans; let i = index\\\" class=\\\"plan col-12 col-sm-6 col-md-6 col-lg-4\\\">\\n\\t\\t\\t<div class=\\\"panel\\\" [class.selected]=\\\"isPlanSelectedForAccount(plan.id)\\\">\\n\\t\\t\\t\\t<h2 class=\\\"panel-heading text-center\\\"><span>{{ plan.name }}</span></h2>\\n\\t\\t\\t\\t<ul class=\\\"list-group\\\">\\n\\t\\t\\t\\t\\t<!-- base price -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item doubled text-center\\\">\\n\\t\\t\\t\\t\\t\\t<h2>\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"plan.is_contact_required; else pricingAvailable\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<span>Custom Price</span>&nbsp;<small><i class=\\\"fa fa-info-circle\\\" rel=\\\"tooltip\\\" title=\\\"Please contact with us for getting pricing.\\\"></i></small>\\n\\t\\t\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t\\t\\t<ng-template #pricingAvailable>\\n\\t\\t\\t\\t\\t\\t\\t\\t<span>{{plan.base_price.gross | currency:plan.base_price.currency:true:'1.0-2'}}</span>\\n\\t\\t\\t\\t\\t\\t\\t\\t<small *ngIf=\\\"plan.name=='free'; else byMonth\\\"></small>\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-template #byMonth><small><i>/ month</i></small></ng-template>\\n\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t</h2>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- formats -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.level <= 1\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Basic player for testing</span>\\n\\t\\t\\t\\t\\t\\t\\t<span>(Web) - for commercial use, no support</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.level > 1\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Player for commercial use</span>\\n\\t\\t\\t\\t\\t\\t\\t<span>(Web, iOS, Android)</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"!plan.sla_info || plan.sla_info == 'none'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-times\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Support (not guaranteed)</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.sla_info && plan.sla_info != 'none'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Support: {{plan.sla_info}}</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- 3rd -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.statistics_type == 'N/A'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-times\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Statistics</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.statistics_type == 'basic'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Basic statistics</span>\\n\\t\\t\\t\\t\\t\\t\\t<span>(audience stats only)</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.statistics_type == 'extended'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Extended statistics</span>\\n\\t\\t\\t\\t\\t\\t\\t<span>(audience, geo, tech, realtime analytics, engagement rate)</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- ads -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-check-circle]=\\\"plan.has_ads_support\\\" [class.fa-times]=\\\"!plan.has_ads_support\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Ads support</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- drm -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-check-circle]=\\\"plan.has_drm_support\\\" [class.fa-times]=\\\"!plan.has_drm_support\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>DRM support</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- views limit -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"!plan.is_contact_required && plan.id != 1\\\">Views limit &lt; 500 000 / month</span>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"!plan.is_contact_required && plan.id == 1\\\">Views limit &lt; 5 000 / month</span>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"plan.is_contact_required\\\">Views over 500 000 / month</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- price / view -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"!plan.is_contact_required && (plan.usage_unit_price.gross > 0)\\\"><strong>{{plan.usage_unit_price.gross | currency:plan.usage_unit_price.currency:true:'1.0-2'}}</strong> extra / {{plan.usage_unit_size}} {{ 'PLAN_CARROUSEL.VIEWS' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"plan.is_contact_required\\\"><strong>Custom features and limits</strong></span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t</ul>\\n\\t\\t\\t\\t<div class=\\\"panel-footer\\\">\\n\\t\\t\\t\\t\\t<a *ngIf=\\\"!isPlanSelectedForAccount(plan.id) && !plan.is_contact_required\\\" class=\\\"btn btn-lg btn-block\\\" (click)=\\\"onPlanSelect(product.id,plan.id)\\\">Select</a>\\n\\t\\t\\t\\t\\t<a *ngIf=\\\"!isPlanSelectedForAccount(plan.id) && plan.is_contact_required\\\" class=\\\"btn btn-lg btn-block\\\" (click)=\\\"onPlanContact(product.id,plan.id)\\\">Contact us</a>\\n\\t\\t\\t\\t\\t<a *ngIf=\\\"isPlanSelectedForAccount(plan.id)\\\" class=\\\"btn btn-lg btn-block disabled\\\" disabled=\\\"disabled\\\"><i class=\\\"fa fa-check\\\"></i> Selected</a>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n/***/ }),\n\n/***/ 1490:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host .products {\\n  margin: 0 auto;\\n  max-width: 1600px; }\\n  :host .products .plan {\\n    padding: 0;\\n    min-height: 625px; }\\n  :host .products .plan .panel {\\n      border: solid 1px #f0f3f5;\\n      margin: 20px !important;\\n      padding: 0 !important; }\\n  :host .products .plan .panel, :host .products .plan .panel * {\\n        -webkit-transition: all .3s ease;\\n        transition: all .3s ease; }\\n  :host .products .plan .panel .panel-heading {\\n        margin: 0;\\n        padding: 20px 10px;\\n        height: 106px;\\n        line-height: 106px;\\n        background: #335eea;\\n        color: #fcfcfc;\\n        text-align: center;\\n        -webkit-box-sizing: content-box;\\n                box-sizing: content-box; }\\n  :host .products .plan .panel .panel-heading span {\\n          display: inline-block;\\n          vertical-align: middle;\\n          line-height: normal; }\\n  :host .products .plan .panel .list-group {\\n        padding: 0; }\\n  :host .products .plan .panel .list-group .list-group-item {\\n          color: #777777;\\n          border-bottom: 1px solid rgba(250, 250, 250, 0.5);\\n          padding: 7px 15px;\\n          margin-bottom: -7px; }\\n  :host .products .plan .panel .list-group .list-group-item:last-child {\\n            border-bottom-right-radius: 0px;\\n            border-bottom-left-radius: 0px; }\\n  :host .products .plan .panel .list-group .list-group-item:first-child {\\n            border-top-right-radius: 0px;\\n            border-top-left-radius: 0px; }\\n  :host .products .plan .panel .list-group .list-group-item.doubled {\\n            padding: 25px 15px;\\n            font-size: 18px;\\n            white-space: nowrap; }\\n  :host .products .plan .panel .list-group .list-group-item p {\\n            position: relative;\\n            display: inline-block;\\n            width: 90%;\\n            margin: 0 10%;\\n            line-height: 2rem;\\n            white-space: nowrap;\\n            overflow: hidden;\\n            text-overflow: ellipsis; }\\n  @media (max-width: 600px) {\\n              :host .products .plan .panel .list-group .list-group-item p {\\n                width: 90%;\\n                margin: 0 5%; } }\\n  @media (min-width: 1200px) and (max-width: 1500px) {\\n              :host .products .plan .panel .list-group .list-group-item p {\\n                width: 90%;\\n                margin: 0 5%; } }\\n  :host .products .plan .panel .list-group .list-group-item p .fa {\\n              position: relative;\\n              top: 1px; }\\n  :host .products .plan .panel .list-group .list-group-item p .fa.fa-check-circle, :host .products .plan .panel .list-group .list-group-item p .fa.fa-times {\\n                font-size: 1.5em; }\\n  :host .products .plan .panel .list-group .list-group-item p .fa.fa-check-circle {\\n                color: green; }\\n  :host .products .plan .panel .list-group .list-group-item p .fa.fa-times {\\n                color: red; }\\n  :host .products .plan .panel .list-group .list-group-item p .fa.fa-info-circle {\\n                margin-left: 5px; }\\n  :host .products .plan .panel .list-group .list-group-item p span {\\n              margin-left: 18px;\\n              display: block; }\\n  :host .products .plan .panel .list-group .list-group-item p span:nth-of-type(1) {\\n              margin-left: 0;\\n              display: inline; }\\n  :host .products .plan .panel .list-group .list-group-item p:after {\\n            content: \\\"\\\";\\n            width: 20px;\\n            height: 100%;\\n            position: absolute;\\n            top: 0;\\n            right: 0;\\n            background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), color-stop(56%, white), to(white));\\n            background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, white 56%, white 100%); }\\n  :host .products .plan .panel .panel-footer {\\n        padding: 10px 0 0 0; }\\n  :host .products .plan .panel .panel-footer .btn-block {\\n          border-top-left-radius: 0;\\n          border-top-right-radius: 0;\\n          color: #335eea;\\n          padding: 20px 32px; }\\n  :host .products .plan .panel.selected {\\n        border: solid 1px #335eea; }\\n  :host .products .plan .panel.selected, :host .products .plan .panel:hover {\\n        -webkit-box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.4);\\n                box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.4);\\n        margin: 10px !important;\\n        padding: 10px !important; }\\n  :host .products .plan .panel.selected .panel-heading, :host .products .plan .panel:hover .panel-heading {\\n          margin: -10px -10px 0 -10px; }\\n  :host .products .plan .panel.selected .list-group, :host .products .plan .panel:hover .list-group {\\n          padding: 10px 0 0 0;\\n          margin: 0 -10px 0 -10px; }\\n  :host .products .plan .panel.selected .panel-footer, :host .products .plan .panel:hover .panel-footer {\\n          padding: 20px 0 0 0;\\n          margin: 0 -10px -10px -10px; }\\n  :host .products .plan .panel.selected .panel-footer:hover .btn-block:not([disabled]), :host .products .plan .panel:hover .panel-footer:hover .btn-block:not([disabled]) {\\n            background: #335eea;\\n            color: #fcfcfc;\\n            padding: 20px 32px; }\\n\"\n\n/***/ }),\n\n/***/ 1491:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var require;var require;(function(f){if(true){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}(g.braintree || (g.braintree = {})).dropin = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return require(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadStylesheet = exports.loadScript = void 0;\nvar loadScript = require(\"./load-script\");\nexports.loadScript = loadScript;\nvar loadStylesheet = require(\"./load-stylesheet\");\nexports.loadStylesheet = loadStylesheet;\n\n},{\"./load-script\":3,\"./load-stylesheet\":4}],2:[function(require,module,exports){\n\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseGlobal = void 0;\nvar promise_polyfill_1 = __importDefault(require(\"promise-polyfill\"));\nvar PromiseGlobal = \n// eslint-disable-next-line no-undef\ntypeof Promise !== \"undefined\" ? Promise : promise_polyfill_1.default;\nexports.PromiseGlobal = PromiseGlobal;\n\n},{\"promise-polyfill\":191}],3:[function(require,module,exports){\n\"use strict\";\nvar promise_1 = require(\"./lib/promise\");\nvar scriptPromiseCache = {};\nfunction loadScript(options) {\n    var scriptLoadPromise;\n    var stringifiedOptions = JSON.stringify(options);\n    if (!options.forceScriptReload) {\n        scriptLoadPromise = scriptPromiseCache[stringifiedOptions];\n        if (scriptLoadPromise) {\n            return scriptLoadPromise;\n        }\n    }\n    var script = document.createElement(\"script\");\n    var attrs = options.dataAttributes || {};\n    var container = options.container || document.head;\n    script.src = options.src;\n    script.id = options.id || \"\";\n    script.async = true;\n    if (options.crossorigin) {\n        script.setAttribute(\"crossorigin\", \"\" + options.crossorigin);\n    }\n    Object.keys(attrs).forEach(function (key) {\n        script.setAttribute(\"data-\" + key, \"\" + attrs[key]);\n    });\n    scriptLoadPromise = new promise_1.PromiseGlobal(function (resolve, reject) {\n        script.addEventListener(\"load\", function () {\n            resolve(script);\n        });\n        script.addEventListener(\"error\", function () {\n            reject(new Error(options.src + \" failed to load.\"));\n        });\n        script.addEventListener(\"abort\", function () {\n            reject(new Error(options.src + \" has aborted.\"));\n        });\n        container.appendChild(script);\n    });\n    scriptPromiseCache[stringifiedOptions] = scriptLoadPromise;\n    return scriptLoadPromise;\n}\nloadScript.clearCache = function () {\n    scriptPromiseCache = {};\n};\nmodule.exports = loadScript;\n\n},{\"./lib/promise\":2}],4:[function(require,module,exports){\n\"use strict\";\nvar promise_1 = require(\"./lib/promise\");\nmodule.exports = function loadStylesheet(options) {\n    var stylesheet = document.querySelector(\"link[href=\\\"\" + options.href + \"\\\"]\");\n    if (stylesheet) {\n        return promise_1.PromiseGlobal.resolve(stylesheet);\n    }\n    stylesheet = document.createElement(\"link\");\n    var container = options.container || document.head;\n    stylesheet.setAttribute(\"rel\", \"stylesheet\");\n    stylesheet.setAttribute(\"type\", \"text/css\");\n    stylesheet.setAttribute(\"href\", options.href);\n    stylesheet.setAttribute(\"id\", options.id);\n    if (container.firstChild) {\n        container.insertBefore(stylesheet, container.firstChild);\n    }\n    else {\n        container.appendChild(stylesheet);\n    }\n    return promise_1.PromiseGlobal.resolve(stylesheet);\n};\n\n},{\"./lib/promise\":2}],5:[function(require,module,exports){\nmodule.exports = require(\"./dist/load-script\");\n\n},{\"./dist/load-script\":3}],6:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isAndroid(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /Android/i.test(ua);\n};\n\n},{}],7:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isChromeOS(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /CrOS/i.test(ua);\n};\n\n},{}],8:[function(require,module,exports){\n\"use strict\";\nvar isEdge = require(\"./is-edge\");\nvar isSamsung = require(\"./is-samsung\");\nvar isDuckDuckGo = require(\"./is-duckduckgo\");\nvar isOpera = require(\"./is-opera\");\nvar isSilk = require(\"./is-silk\");\nmodule.exports = function isChrome(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ((ua.indexOf(\"Chrome\") !== -1 || ua.indexOf(\"CriOS\") !== -1) &&\n        !isEdge(ua) &&\n        !isSamsung(ua) &&\n        !isDuckDuckGo(ua) &&\n        !isOpera(ua) &&\n        !isSilk(ua));\n};\n\n},{\"./is-duckduckgo\":9,\"./is-edge\":10,\"./is-opera\":22,\"./is-samsung\":23,\"./is-silk\":24}],9:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isDuckDuckGo(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"DuckDuckGo/\") !== -1;\n};\n\n},{}],10:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isEdge(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Edge/\") !== -1;\n};\n\n},{}],11:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isFirefox(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /Firefox/i.test(ua);\n};\n\n},{}],12:[function(require,module,exports){\n\"use strict\";\nvar isIE11 = require(\"./is-ie11\");\nmodule.exports = function isIE(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"MSIE\") !== -1 || isIE11(ua);\n};\n\n},{\"./is-ie11\":14}],13:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIe10(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"MSIE 10\") !== -1;\n};\n\n},{}],14:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIe11(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Trident/7\") !== -1;\n};\n\n},{}],15:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIe9(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"MSIE 9\") !== -1;\n};\n\n},{}],16:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIosFirefox(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /FxiOS/i.test(ua);\n};\n\n},{}],17:[function(require,module,exports){\n\"use strict\";\nvar isIos = require(\"./is-ios\");\nfunction isGoogleSearchApp(ua) {\n    return /\\bGSA\\b/.test(ua);\n}\nmodule.exports = function isIosGoogleSearchApp(ua) {\n    ua = ua || window.navigator.userAgent;\n    return isIos(ua) && isGoogleSearchApp(ua);\n};\n\n},{\"./is-ios\":21}],18:[function(require,module,exports){\n\"use strict\";\nvar isIos = require(\"./is-ios\");\nvar isIosFirefox = require(\"./is-ios-firefox\");\nvar webkitRegexp = /webkit/i;\nfunction isWebkit(ua) {\n    return webkitRegexp.test(ua);\n}\nfunction isIosChrome(ua) {\n    return ua.indexOf(\"CriOS\") > -1;\n}\nfunction isFacebook(ua) {\n    return ua.indexOf(\"FBAN\") > -1;\n}\nmodule.exports = function isIosSafari(ua) {\n    ua = ua || window.navigator.userAgent;\n    return (isIos(ua) &&\n        isWebkit(ua) &&\n        !isIosChrome(ua) &&\n        !isIosFirefox(ua) &&\n        !isFacebook(ua));\n};\n\n},{\"./is-ios\":21,\"./is-ios-firefox\":16}],19:[function(require,module,exports){\n\"use strict\";\nvar isIos = require(\"./is-ios\");\nvar isIosGoogleSearchApp = require(\"./is-ios-google-search-app\");\nmodule.exports = function isIosWebview(ua) {\n    ua = ua || window.navigator.userAgent;\n    if (isIos(ua)) {\n        // The Google Search iOS app is technically a webview and doesn't support popups.\n        if (isIosGoogleSearchApp(ua)) {\n            return true;\n        }\n        // Historically, a webview could be identified by the presence of AppleWebKit and _no_ presence of Safari after.\n        return /.+AppleWebKit(?!.*Safari)/i.test(ua);\n    }\n    return false;\n};\n\n},{\"./is-ios\":21,\"./is-ios-google-search-app\":17}],20:[function(require,module,exports){\n\"use strict\";\nvar isIosWebview = require(\"./is-ios-webview\");\nmodule.exports = function isIosWKWebview(ua, statusBarVisible) {\n    statusBarVisible =\n        typeof statusBarVisible !== \"undefined\"\n            ? statusBarVisible\n            : window.statusbar.visible;\n    return isIosWebview(ua) && statusBarVisible;\n};\n\n},{\"./is-ios-webview\":19}],21:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIos(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /iPhone|iPod|iPad/i.test(ua);\n};\n\n},{}],22:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isOpera(ua) {\n    ua = ua || window.navigator.userAgent;\n    return (ua.indexOf(\"OPR/\") !== -1 ||\n        ua.indexOf(\"Opera/\") !== -1 ||\n        ua.indexOf(\"OPT/\") !== -1);\n};\n\n},{}],23:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isSamsungBrowser(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /SamsungBrowser/i.test(ua);\n};\n\n},{}],24:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isSilk(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Silk/\") !== -1;\n};\n\n},{}],25:[function(require,module,exports){\n\"use strict\";\nvar MINIMUM_SUPPORTED_CHROME_IOS_VERSION = 48;\nvar isAndroid = require(\"./is-android\");\nvar isIosFirefox = require(\"./is-ios-firefox\");\nvar isIosWebview = require(\"./is-ios-webview\");\nvar isChrome = require(\"./is-chrome\");\nvar isSamsungBrowser = require(\"./is-samsung\");\nvar isDuckDuckGo = require(\"./is-duckduckgo\");\nfunction isUnsupportedIosChrome(ua) {\n    ua = ua || window.navigator.userAgent;\n    var match = ua.match(/CriOS\\/(\\d+)\\./);\n    if (!match) {\n        return false;\n    }\n    var version = parseInt(match[1], 10);\n    return version < MINIMUM_SUPPORTED_CHROME_IOS_VERSION;\n}\nfunction isOperaMini(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Opera Mini\") > -1;\n}\nfunction isAndroidWebview(ua) {\n    var androidWebviewRegExp = /Version\\/[\\d.]+/i;\n    ua = ua || window.navigator.userAgent;\n    if (isAndroid(ua)) {\n        return (androidWebviewRegExp.test(ua) && !isOperaMini(ua) && !isDuckDuckGo(ua));\n    }\n    return false;\n}\nfunction isOldSamsungBrowserOrSamsungWebview(ua) {\n    return !isChrome(ua) && !isSamsungBrowser(ua) && /samsung/i.test(ua);\n}\nmodule.exports = function supportsPopups(ua) {\n    ua = ua || window.navigator.userAgent;\n    return !(isIosWebview(ua) ||\n        isIosFirefox(ua) ||\n        isAndroidWebview(ua) ||\n        isOperaMini(ua) ||\n        isUnsupportedIosChrome(ua) ||\n        isOldSamsungBrowserOrSamsungWebview(ua));\n};\n\n},{\"./is-android\":6,\"./is-chrome\":8,\"./is-duckduckgo\":9,\"./is-ios-firefox\":16,\"./is-ios-webview\":19,\"./is-samsung\":23}],26:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-android\");\n\n},{\"./dist/is-android\":6}],27:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-chrome-os\");\n\n},{\"./dist/is-chrome-os\":7}],28:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-chrome\");\n\n},{\"./dist/is-chrome\":8}],29:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-edge\");\n\n},{\"./dist/is-edge\":10}],30:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-firefox\");\n\n},{\"./dist/is-firefox\":11}],31:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ie\");\n\n},{\"./dist/is-ie\":12}],32:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ie10\");\n\n},{\"./dist/is-ie10\":13}],33:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ie9\");\n\n},{\"./dist/is-ie9\":15}],34:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ios-safari\");\n\n},{\"./dist/is-ios-safari\":18}],35:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ios-webview\");\n\n},{\"./dist/is-ios-webview\":19}],36:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ios-wkwebview\");\n\n},{\"./dist/is-ios-wkwebview\":20}],37:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ios\");\n\n},{\"./dist/is-ios\":21}],38:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-samsung\");\n\n},{\"./dist/is-samsung\":23}],39:[function(require,module,exports){\nmodule.exports = require(\"./dist/supports-popups\");\n\n},{\"./dist/supports-popups\":25}],40:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toggle = exports.remove = exports.add = void 0;\nfunction _classesOf(element) {\n    return element.className.trim().split(/\\s+/);\n}\nfunction add(element) {\n    var toAdd = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        toAdd[_i - 1] = arguments[_i];\n    }\n    element.className = _classesOf(element)\n        .filter(function (classname) { return toAdd.indexOf(classname) === -1; })\n        .concat(toAdd)\n        .join(\" \");\n}\nexports.add = add;\nfunction remove(element) {\n    var toRemove = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        toRemove[_i - 1] = arguments[_i];\n    }\n    element.className = _classesOf(element)\n        .filter(function (classname) { return toRemove.indexOf(classname) === -1; })\n        .join(\" \");\n}\nexports.remove = remove;\nfunction toggle(element, classname, adding) {\n    if (adding) {\n        add(element, classname);\n    }\n    else {\n        remove(element, classname);\n    }\n}\nexports.toggle = toggle;\n\n},{}],41:[function(require,module,exports){\n\"use strict\";\nvar EventEmitter = /** @class */ (function () {\n    function EventEmitter() {\n        this._events = {};\n    }\n    EventEmitter.prototype.on = function (event, callback) {\n        if (this._events[event]) {\n            this._events[event].push(callback);\n        }\n        else {\n            this._events[event] = [callback];\n        }\n    };\n    EventEmitter.prototype.off = function (event, callback) {\n        var eventCallbacks = this._events[event];\n        if (!eventCallbacks) {\n            return;\n        }\n        var indexOfCallback = eventCallbacks.indexOf(callback);\n        eventCallbacks.splice(indexOfCallback, 1);\n    };\n    EventEmitter.prototype._emit = function (event) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var eventCallbacks = this._events[event];\n        if (!eventCallbacks) {\n            return;\n        }\n        eventCallbacks.forEach(function (callback) {\n            callback.apply(void 0, args);\n        });\n    };\n    EventEmitter.prototype.hasListener = function (event) {\n        var eventCallbacks = this._events[event];\n        if (!eventCallbacks) {\n            return false;\n        }\n        return eventCallbacks.length > 0;\n    };\n    EventEmitter.createChild = function (ChildObject) {\n        ChildObject.prototype = Object.create(EventEmitter.prototype, {\n            constructor: ChildObject,\n        });\n    };\n    return EventEmitter;\n}());\nmodule.exports = EventEmitter;\n\n},{}],42:[function(require,module,exports){\n\"use strict\";\nvar GlobalPromise = (typeof Promise !== \"undefined\"\n    ? Promise // eslint-disable-line no-undef\n    : null);\nvar ExtendedPromise = /** @class */ (function () {\n    function ExtendedPromise(options) {\n        var _this = this;\n        if (typeof options === \"function\") {\n            this._promise = new ExtendedPromise.Promise(options);\n            return;\n        }\n        this._promise = new ExtendedPromise.Promise(function (resolve, reject) {\n            _this._resolveFunction = resolve;\n            _this._rejectFunction = reject;\n        });\n        options = options || {};\n        this._onResolve = options.onResolve || ExtendedPromise.defaultOnResolve;\n        this._onReject = options.onReject || ExtendedPromise.defaultOnReject;\n        if (ExtendedPromise.shouldCatchExceptions(options)) {\n            this._promise.catch(function () {\n                // prevents unhandled promise rejection warning\n                // in the console for extended promises that\n                // that catch the error in an asynchronous manner\n            });\n        }\n        this._resetState();\n    }\n    ExtendedPromise.defaultOnResolve = function (result) {\n        return ExtendedPromise.Promise.resolve(result);\n    };\n    ExtendedPromise.defaultOnReject = function (err) {\n        return ExtendedPromise.Promise.reject(err);\n    };\n    ExtendedPromise.setPromise = function (PromiseClass) {\n        ExtendedPromise.Promise = PromiseClass;\n    };\n    ExtendedPromise.shouldCatchExceptions = function (options) {\n        if (options.hasOwnProperty(\"suppressUnhandledPromiseMessage\")) {\n            return Boolean(options.suppressUnhandledPromiseMessage);\n        }\n        return Boolean(ExtendedPromise.suppressUnhandledPromiseMessage);\n    };\n    // start Promise methods documented in:\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#Methods\n    ExtendedPromise.all = function (args) {\n        return ExtendedPromise.Promise.all(args);\n    };\n    ExtendedPromise.allSettled = function (args) {\n        return ExtendedPromise.Promise.allSettled(args);\n    };\n    ExtendedPromise.race = function (args) {\n        return ExtendedPromise.Promise.race(args);\n    };\n    ExtendedPromise.reject = function (arg) {\n        return ExtendedPromise.Promise.reject(arg);\n    };\n    ExtendedPromise.resolve = function (arg) {\n        return ExtendedPromise.Promise.resolve(arg);\n    };\n    ExtendedPromise.prototype.then = function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return (_a = this._promise).then.apply(_a, args);\n    };\n    ExtendedPromise.prototype.catch = function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return (_a = this._promise).catch.apply(_a, args);\n    };\n    ExtendedPromise.prototype.resolve = function (arg) {\n        var _this = this;\n        if (this.isFulfilled) {\n            return this;\n        }\n        this._setResolved();\n        ExtendedPromise.Promise.resolve()\n            .then(function () {\n            return _this._onResolve(arg);\n        })\n            .then(function (argForResolveFunction) {\n            _this._resolveFunction(argForResolveFunction);\n        })\n            .catch(function (err) {\n            _this._resetState();\n            _this.reject(err);\n        });\n        return this;\n    };\n    ExtendedPromise.prototype.reject = function (arg) {\n        var _this = this;\n        if (this.isFulfilled) {\n            return this;\n        }\n        this._setRejected();\n        ExtendedPromise.Promise.resolve()\n            .then(function () {\n            return _this._onReject(arg);\n        })\n            .then(function (result) {\n            _this._setResolved();\n            _this._resolveFunction(result);\n        })\n            .catch(function (err) {\n            return _this._rejectFunction(err);\n        });\n        return this;\n    };\n    ExtendedPromise.prototype._resetState = function () {\n        this.isFulfilled = false;\n        this.isResolved = false;\n        this.isRejected = false;\n    };\n    ExtendedPromise.prototype._setResolved = function () {\n        this.isFulfilled = true;\n        this.isResolved = true;\n        this.isRejected = false;\n    };\n    ExtendedPromise.prototype._setRejected = function () {\n        this.isFulfilled = true;\n        this.isResolved = false;\n        this.isRejected = true;\n    };\n    ExtendedPromise.Promise = GlobalPromise;\n    return ExtendedPromise;\n}());\nmodule.exports = ExtendedPromise;\n\n},{}],43:[function(require,module,exports){\n\"use strict\";\nvar set_attributes_1 = require(\"./lib/set-attributes\");\nvar default_attributes_1 = require(\"./lib/default-attributes\");\nvar assign_1 = require(\"./lib/assign\");\nmodule.exports = function createFrame(options) {\n    if (options === void 0) { options = {}; }\n    var iframe = document.createElement(\"iframe\");\n    var config = assign_1.assign({}, default_attributes_1.defaultAttributes, options);\n    if (config.style && typeof config.style !== \"string\") {\n        assign_1.assign(iframe.style, config.style);\n        delete config.style;\n    }\n    set_attributes_1.setAttributes(iframe, config);\n    if (!iframe.getAttribute(\"id\")) {\n        iframe.id = iframe.name;\n    }\n    return iframe;\n};\n\n},{\"./lib/assign\":44,\"./lib/default-attributes\":45,\"./lib/set-attributes\":46}],44:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assign = void 0;\nfunction assign(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntarget) {\n    var objs = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        objs[_i - 1] = arguments[_i];\n    }\n    objs.forEach(function (obj) {\n        if (typeof obj !== \"object\") {\n            return;\n        }\n        Object.keys(obj).forEach(function (key) {\n            target[key] = obj[key];\n        });\n    });\n    return target;\n}\nexports.assign = assign;\n\n},{}],45:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultAttributes = void 0;\nexports.defaultAttributes = {\n    src: \"about:blank\",\n    frameBorder: 0,\n    allowtransparency: true,\n    scrolling: \"no\",\n};\n\n},{}],46:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setAttributes = void 0;\nfunction setAttributes(element, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nattributes) {\n    for (var key in attributes) {\n        if (attributes.hasOwnProperty(key)) {\n            var value = attributes[key];\n            if (value == null) {\n                element.removeAttribute(key);\n            }\n            else {\n                element.setAttribute(key, value);\n            }\n        }\n    }\n}\nexports.setAttributes = setAttributes;\n\n},{}],47:[function(require,module,exports){\n'use strict';\n\nfunction uuid() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    var r = Math.random() * 16 | 0;\n    var v = c === 'x' ? r : r & 0x3 | 0x8;\n\n    return v.toString(16);\n  });\n}\n\nmodule.exports = uuid;\n\n},{}],48:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction deferred(fn) {\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        setTimeout(function () {\n            try {\n                fn.apply(void 0, args);\n            }\n            catch (err) {\n                /* eslint-disable no-console */\n                console.log(\"Error in callback function\");\n                console.log(err);\n                /* eslint-enable no-console */\n            }\n        }, 1);\n    };\n}\nexports.deferred = deferred;\n\n},{}],49:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction once(fn) {\n    var called = false;\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!called) {\n            called = true;\n            fn.apply(void 0, args);\n        }\n    };\n}\nexports.once = once;\n\n},{}],50:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* eslint-disable consistent-return */\nfunction promiseOrCallback(promise, callback) {\n    if (!callback) {\n        return promise;\n    }\n    promise.then(function (data) { return callback(null, data); }).catch(function (err) { return callback(err); });\n}\nexports.promiseOrCallback = promiseOrCallback;\n\n},{}],51:[function(require,module,exports){\n\"use strict\";\nvar deferred_1 = require(\"./lib/deferred\");\nvar once_1 = require(\"./lib/once\");\nvar promise_or_callback_1 = require(\"./lib/promise-or-callback\");\nfunction wrapPromise(fn) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var callback;\n        var lastArg = args[args.length - 1];\n        if (typeof lastArg === \"function\") {\n            callback = args.pop();\n            callback = once_1.once(deferred_1.deferred(callback));\n        }\n        // I know, I know, this looks bad. But it's a quirk of the library that\n        // we need to allow passing the this context to the original function\n        // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n        // @ts-ignore: this has an implicit any\n        return promise_or_callback_1.promiseOrCallback(fn.apply(this, args), callback); // eslint-disable-line no-invalid-this\n    };\n}\nwrapPromise.wrapPrototype = function (target, options) {\n    if (options === void 0) { options = {}; }\n    var ignoreMethods = options.ignoreMethods || [];\n    var includePrivateMethods = options.transformPrivateMethods === true;\n    var methods = Object.getOwnPropertyNames(target.prototype).filter(function (method) {\n        var isNotPrivateMethod;\n        var isNonConstructorFunction = method !== \"constructor\" &&\n            typeof target.prototype[method] === \"function\";\n        var isNotAnIgnoredMethod = ignoreMethods.indexOf(method) === -1;\n        if (includePrivateMethods) {\n            isNotPrivateMethod = true;\n        }\n        else {\n            isNotPrivateMethod = method.charAt(0) !== \"_\";\n        }\n        return (isNonConstructorFunction && isNotPrivateMethod && isNotAnIgnoredMethod);\n    });\n    methods.forEach(function (method) {\n        var original = target.prototype[method];\n        target.prototype[method] = wrapPromise(original);\n    });\n    return target;\n};\nmodule.exports = wrapPromise;\n\n},{\"./lib/deferred\":48,\"./lib/once\":49,\"./lib/promise-or-callback\":50}],52:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar analytics = require(\"../lib/analytics\");\nvar errors = require(\"./errors\");\nvar Promise = require(\"../lib/promise\");\nvar methods = require(\"../lib/methods\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\n/**\n * @typedef {object} ApplePay~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} details Additional details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.cardHolderName The name of the card holder.\n * @property {string} details.dpanLastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `ApplePayCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n */\n\n/**\n * An Apple Pay Payment Authorization Event object.\n * @typedef {object} ApplePayPaymentAuthorizedEvent\n * @external ApplePayPaymentAuthorizedEvent\n * @see {@link https://developer.apple.com/reference/applepayjs/applepaypaymentauthorizedevent ApplePayPaymentAuthorizedEvent}\n */\n\n/**\n * An Apple Pay Payment Request object.\n * @typedef {object} ApplePayPaymentRequest\n * @external ApplePayPaymentRequest\n * @see {@link https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types/paymentrequest PaymentRequest}\n */\n\n/**\n * @class\n * @param {object} options Options\n * @description <strong>You cannot use this constructor directly. Use {@link module:braintree-web/apple-pay.create|braintree.applePay.create} instead.</strong>\n * @classdesc This class represents an Apple Pay component. Instances of this class have methods for validating the merchant server and tokenizing payments.\n */\nfunction ApplePay(options) {\n  this._instantiatedWithClient = Boolean(!options.useDeferredClient);\n  this._client = options.client;\n  this._createPromise = options.createPromise;\n\n  if (this._client) {\n    this._setMerchantIdentifier();\n  }\n}\n\nApplePay.prototype._waitForClient = function () {\n  if (this._client) {\n    return Promise.resolve();\n  }\n\n  return this._createPromise.then(\n    function (client) {\n      this._client = client;\n\n      this._setMerchantIdentifier();\n    }.bind(this)\n  );\n};\n\nApplePay.prototype._setMerchantIdentifier = function () {\n  var applePayConfig =\n    this._client.getConfiguration().gatewayConfiguration.applePayWeb;\n\n  if (!applePayConfig) {\n    return;\n  }\n  /**\n   * @name ApplePay#merchantIdentifier\n   * @description A special merchant ID which represents the merchant association with Braintree. Required when using `ApplePaySession.canMakePaymentsWithActiveCard`.\n   * @example\n   * var promise = ApplePaySession.canMakePaymentsWithActiveCard(applePayInstance.merchantIdentifier);\n   * promise.then(function (canMakePaymentsWithActiveCard) {\n   *   if (canMakePaymentsWithActiveCard) {\n   *     // Set up Apple Pay buttons\n   *   }\n   * });\n   */\n  Object.defineProperty(this, \"merchantIdentifier\", {\n    value: applePayConfig.merchantIdentifier,\n    configurable: false,\n    writable: false,\n  });\n};\n\n/**\n * Merges a payment request with Braintree defaults to return an {external:ApplePayPaymentRequest}.\n *\n * The following properties are assigned to `paymentRequest` if not already defined. Their default values come from the Braintree gateway.\n * - `countryCode`\n * - `currencyCode`\n * - `merchantCapabilities`\n * - `supportedNetworks`\n * @public\n * @param {external:ApplePayPaymentRequest} paymentRequest The payment request details to apply on top of those from Braintree.\n * @returns {external:ApplePayPaymentRequest|Promise} The decorated `paymentRequest` object. If `useDeferredClient` is used along with an `authorization`, this method will return a promise that resolves with the `paymentRequest` object.\n * @example\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({client: clientInstance}, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   var paymentRequest = applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   });\n *\n *   var session = new ApplePaySession(3, paymentRequest);\n *\n *   // ...\n * @example <caption>With deferred client</caption>\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({\n *   authorization: 'client-token-or-tokenization-key',\n *   useDeferredClient: true\n * }, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   }).then(function (paymentRequest) {\n *     var session = new ApplePaySession(3, paymentRequest);\n *\n *     // ...\n *   });\n */\nApplePay.prototype.createPaymentRequest = function (paymentRequest) {\n  if (this._instantiatedWithClient) {\n    return this._createPaymentRequestSynchronously(paymentRequest);\n  }\n\n  return this._waitForClient().then(\n    function () {\n      return this._createPaymentRequestSynchronously(paymentRequest);\n    }.bind(this)\n  );\n};\n\nApplePay.prototype._createPaymentRequestSynchronously = function (\n  paymentRequest\n) {\n  var applePay =\n    this._client.getConfiguration().gatewayConfiguration.applePayWeb;\n  var defaults = {\n    countryCode: applePay.countryCode,\n    currencyCode: applePay.currencyCode,\n    merchantCapabilities: applePay.merchantCapabilities || [\"supports3DS\"],\n    supportedNetworks: applePay.supportedNetworks.map(function (network) {\n      return network === \"mastercard\" ? \"masterCard\" : network;\n    }),\n  };\n\n  return Object.assign({}, defaults, paymentRequest);\n};\n\n/**\n * Validates your merchant website, as required by `ApplePaySession` before payment can be authorized.\n * @public\n * @param {object} options Options\n * @param {string} options.validationURL The validationURL from an `ApplePayValidateMerchantEvent`.\n * @param {string} options.displayName The canonical name for your store. Use a non-localized name. This parameter should be a UTF-8 string that is a maximum of 128 characters. The system may display this name to the user.\n * @param {callback} [callback] The second argument, <code>data</code>, is the Apple Pay merchant session object. If no callback is provided, `performValidation` returns a promise.\n * Pass the merchant session to your Apple Pay session's `completeMerchantValidation` method.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({client: clientInstance}, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   var paymentRequest = applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   });\n *   var session = new ApplePaySession(3, paymentRequest);\n *\n *   session.onvalidatemerchant = function (event) {\n *     applePayInstance.performValidation({\n *       validationURL: event.validationURL,\n *       displayName: 'My Great Store'\n *     }, function (validationErr, validationData) {\n *       if (validationErr) {\n *         console.error(validationErr);\n *         session.abort();\n *         return;\n *       }\n *\n *       session.completeMerchantValidation(validationData);\n *     });\n *   };\n * });\n */\nApplePay.prototype.performValidation = function (options) {\n  var self = this;\n\n  if (!options || !options.validationURL) {\n    return Promise.reject(\n      new BraintreeError(errors.APPLE_PAY_VALIDATION_URL_REQUIRED)\n    );\n  }\n\n  return this._waitForClient()\n    .then(function () {\n      var applePayWebSession = {\n        validationUrl: options.validationURL,\n        domainName: options.domainName || window.location.hostname,\n        merchantIdentifier:\n          options.merchantIdentifier || self.merchantIdentifier,\n      };\n\n      if (options.displayName != null) {\n        applePayWebSession.displayName = options.displayName;\n      }\n\n      return self._client.request({\n        method: \"post\",\n        endpoint: \"apple_pay_web/sessions\",\n        data: {\n          _meta: { source: \"apple-pay\" },\n          applePayWebSession: applePayWebSession,\n        },\n      });\n    })\n    .then(function (response) {\n      analytics.sendEvent(self._client, \"applepay.performValidation.succeeded\");\n\n      return Promise.resolve(response);\n    })\n    .catch(function (err) {\n      analytics.sendEvent(self._client, \"applepay.performValidation.failed\");\n\n      if (err.code === \"CLIENT_REQUEST_ERROR\") {\n        return Promise.reject(\n          new BraintreeError({\n            type: errors.APPLE_PAY_MERCHANT_VALIDATION_FAILED.type,\n            code: errors.APPLE_PAY_MERCHANT_VALIDATION_FAILED.code,\n            message: errors.APPLE_PAY_MERCHANT_VALIDATION_FAILED.message,\n            details: {\n              originalError: err.details.originalError,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.APPLE_PAY_MERCHANT_VALIDATION_NETWORK.type,\n          code: errors.APPLE_PAY_MERCHANT_VALIDATION_NETWORK.code,\n          message: errors.APPLE_PAY_MERCHANT_VALIDATION_NETWORK.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Tokenizes an Apple Pay payment. This will likely be called in your `ApplePaySession`'s `onpaymentauthorized` callback.\n * @public\n * @param {object} options Options\n * @param {object} options.token The `payment.token` property of an {@link external:ApplePayPaymentAuthorizedEvent}.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link ApplePay~tokenizePayload|tokenizePayload}. If no callback is provided, `tokenize` returns a promise that resolves with a {@link ApplePay~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({client: clientInstance}, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   var paymentRequest = applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   });\n *   var session = new ApplePaySession(3, paymentRequest);\n *\n *   session.onpaymentauthorized = function (event) {\n *     applePayInstance.tokenize({\n *       token: event.payment.token\n *     }, function (tokenizeErr, tokenizedPayload) {\n *       if (tokenizeErr) {\n *         session.completePayment(ApplePaySession.STATUS_FAILURE);\n *         return;\n *       }\n *       // Send the tokenizedPayload to your server here!\n *\n *       // Once the transaction is complete, call completePayment\n *       // to close the Apple Pay sheet\n *       session.completePayment(ApplePaySession.STATUS_SUCCESS);\n *     });\n *   };\n *\n *   // ...\n * });\n */\nApplePay.prototype.tokenize = function (options) {\n  var self = this;\n\n  if (!options.token) {\n    return Promise.reject(\n      new BraintreeError(errors.APPLE_PAY_PAYMENT_TOKEN_REQUIRED)\n    );\n  }\n\n  return this._waitForClient()\n    .then(function () {\n      return self._client.request({\n        method: \"post\",\n        endpoint: \"payment_methods/apple_payment_tokens\",\n        data: {\n          _meta: {\n            source: \"apple-pay\",\n          },\n          applePaymentToken: Object.assign({}, options.token, {\n            // The gateway requires this key to be base64-encoded.\n            paymentData: btoa(JSON.stringify(options.token.paymentData)),\n          }),\n        },\n      });\n    })\n    .then(function (response) {\n      analytics.sendEvent(self._client, \"applepay.tokenize.succeeded\");\n\n      return Promise.resolve(response.applePayCards[0]);\n    })\n    .catch(function (err) {\n      analytics.sendEvent(self._client, \"applepay.tokenize.failed\");\n\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.APPLE_PAY_TOKENIZATION.type,\n          code: errors.APPLE_PAY_TOKENIZATION.code,\n          message: errors.APPLE_PAY_TOKENIZATION.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/apple-pay.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * applePayInstance.teardown();\n * @example <caption>With callback</caption>\n * applePayInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nApplePay.prototype.teardown = function () {\n  convertMethodsToError(this, methods(ApplePay.prototype));\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(ApplePay);\n\n},{\"../lib/analytics\":94,\"../lib/braintree-error\":99,\"../lib/convert-methods-to-error\":101,\"../lib/methods\":129,\"../lib/promise\":131,\"./errors\":53,\"@braintree/wrap-promise\":51}],53:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Apple Pay - Creation Error Codes\n * @description Errors that occur when [creating the Apple Pay component](./module-braintree-web_apple-pay.html#.create).\n * @property {MERCHANT} APPLE_PAY_NOT_ENABLED Occurs when the authorization used is not authorized to process Apple Pay.\n */\n\n/**\n * @name BraintreeError.Apple Pay - performValidation Error Codes\n * @description Errors that occur when [validating](./ApplePay.html#performValidation).\n * @property {MERCHANT} APPLE_PAY_VALIDATION_URL_REQUIRED Occurs when the `validationURL` option is not passed in.\n * @property {MERCHANT} APPLE_PAY_MERCHANT_VALIDATION_FAILED Occurs when the website domain has not been registered in the Braintree control panel.\n * @property {NETWORK} APPLE_PAY_MERCHANT_VALIDATION_NETWORK Occurs when an unknown network error occurs.\n */\n\n/**\n * @name BraintreeError.Apple Pay - tokenize Error Codes\n * @description Errors that occur when [tokenizing](./ApplePay.html#tokenize).\n * @property {MERCHANT} APPLE_PAY_PAYMENT_TOKEN_REQUIRED Occurs when the `token` option is not passed in.\n * @property {NETWORK} APPLE_PAY_TOKENIZATION Occurs when an unknown network error occurs.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  APPLE_PAY_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_NOT_ENABLED\",\n    message: \"Apple Pay is not enabled for this merchant.\",\n  },\n  APPLE_PAY_VALIDATION_URL_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_VALIDATION_URL_REQUIRED\",\n    message: \"performValidation must be called with a validationURL.\",\n  },\n  APPLE_PAY_MERCHANT_VALIDATION_NETWORK: {\n    type: BraintreeError.types.NETWORK,\n    code: \"APPLE_PAY_MERCHANT_VALIDATION_NETWORK\",\n    message: \"A network error occurred when validating the Apple Pay merchant.\",\n  },\n  APPLE_PAY_MERCHANT_VALIDATION_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_MERCHANT_VALIDATION_FAILED\",\n    message:\n      \"Make sure you have registered your domain name in the Braintree Control Panel.\",\n  },\n  APPLE_PAY_PAYMENT_TOKEN_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_PAYMENT_TOKEN_REQUIRED\",\n    message: \"tokenize must be called with a payment token.\",\n  },\n  APPLE_PAY_TOKENIZATION: {\n    type: BraintreeError.types.NETWORK,\n    code: \"APPLE_PAY_TOKENIZATION\",\n    message: \"A network error occurred when processing the Apple Pay payment.\",\n  },\n};\n\n},{\"../lib/braintree-error\":99}],54:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @module braintree-web/apple-pay\n * @description Accept Apple Pay on the Web. *This component is currently in beta and is subject to change.*\n */\n\nvar ApplePay = require(\"./apple-pay\");\nvar analytics = require(\"../lib/analytics\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar Promise = require(\"../lib/promise\");\nvar errors = require(\"./errors\");\nvar VERSION = \"3.88.3\";\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.useDeferredClient] Used in conjunction with `authorization`, allows the Apple Pay instance to be available right away by fetching the client configuration in the background. When this option is used, {@link ApplePay#createPaymentRequest} will return a promise that resolves with the configuration instead of returning synchronously.\n * @param {callback} [callback] The second argument, `data`, is the {@link ApplePay} instance. If no callback is provided, `create` returns a promise that resolves with the {@link ApplePay} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Apple Pay\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var applePayInstance;\n      var createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          if (!client.getConfiguration().gatewayConfiguration.applePayWeb) {\n            return Promise.reject(\n              new BraintreeError(errors.APPLE_PAY_NOT_ENABLED)\n            );\n          }\n\n          analytics.sendEvent(client, \"applepay.initialized\");\n\n          return client;\n        });\n\n      options.createPromise = createPromise;\n      applePayInstance = new ApplePay(options);\n\n      if (!options.useDeferredClient) {\n        return createPromise.then(function (client) {\n          applePayInstance._client = client;\n\n          return applePayInstance;\n        });\n      }\n\n      return applePayInstance;\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":94,\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"../lib/promise\":131,\"./apple-pay\":52,\"./errors\":53,\"@braintree/wrap-promise\":51}],55:[function(require,module,exports){\n\"use strict\";\n\nvar isIe = require(\"@braintree/browser-detection/is-ie\");\nvar isIe9 = require(\"@braintree/browser-detection/is-ie9\");\n\nmodule.exports = {\n  isIe: isIe,\n  isIe9: isIe9,\n};\n\n},{\"@braintree/browser-detection/is-ie\":31,\"@braintree/browser-detection/is-ie9\":33}],56:[function(require,module,exports){\n\"use strict\";\n\nvar BRAINTREE_VERSION = require(\"./constants\").BRAINTREE_VERSION;\n\nvar GraphQL = require(\"./request/graphql\");\nvar request = require(\"./request\");\nvar isVerifiedDomain = require(\"../lib/is-verified-domain\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar convertToBraintreeError = require(\"../lib/convert-to-braintree-error\");\nvar getGatewayConfiguration = require(\"./get-configuration\").getConfiguration;\nvar createAuthorizationData = require(\"../lib/create-authorization-data\");\nvar addMetadata = require(\"../lib/add-metadata\");\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar once = require(\"../lib/once\");\nvar deferred = require(\"../lib/deferred\");\nvar assign = require(\"../lib/assign\").assign;\nvar analytics = require(\"../lib/analytics\");\nvar errors = require(\"./errors\");\nvar VERSION = require(\"../lib/constants\").VERSION;\nvar GRAPHQL_URLS = require(\"../lib/constants\").GRAPHQL_URLS;\nvar methods = require(\"../lib/methods\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar assets = require(\"../lib/assets\");\nvar FRAUDNET_FNCLS = require(\"../lib/constants\").FRAUDNET_FNCLS;\nvar FRAUDNET_SOURCE = require(\"../lib/constants\").FRAUDNET_SOURCE;\nvar FRAUDNET_URL = require(\"../lib/constants\").FRAUDNET_URL;\n\nvar cachedClients = {};\n\n/**\n * This object is returned by {@link Client#getConfiguration|getConfiguration}. This information is used extensively by other Braintree modules to properly configure themselves.\n * @typedef {object} Client~configuration\n * @property {object} client The braintree-web/client parameters.\n * @property {string} client.authorization A tokenizationKey or clientToken.\n * @property {object} gatewayConfiguration Gateway-supplied configuration.\n * @property {object} analyticsMetadata Analytics-specific data.\n * @property {string} analyticsMetadata.sessionId Uniquely identifies a browsing session.\n * @property {string} analyticsMetadata.sdkVersion The braintree.js version.\n * @property {string} analyticsMetadata.merchantAppId Identifies the merchant's web app.\n */\n\n/**\n * @class\n * @param {Client~configuration} configuration Options\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/client.create|braintree.client.create} instead.</strong>\n * @classdesc This class is required by many other Braintree components. It serves as the base API layer that communicates with our servers. It is also capable of being used to formulate direct calls to our servers, such as direct credit card tokenization. See {@link Client#request}.\n */\nfunction Client(configuration) {\n  var configurationJSON, gatewayConfiguration;\n\n  configuration = configuration || {};\n\n  configurationJSON = JSON.stringify(configuration);\n  gatewayConfiguration = configuration.gatewayConfiguration;\n\n  if (!gatewayConfiguration) {\n    throw new BraintreeError(errors.CLIENT_MISSING_GATEWAY_CONFIGURATION);\n  }\n\n  [\"assetsUrl\", \"clientApiUrl\", \"configUrl\"].forEach(function (property) {\n    if (\n      property in gatewayConfiguration &&\n      !isVerifiedDomain(gatewayConfiguration[property])\n    ) {\n      throw new BraintreeError({\n        type: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.type,\n        code: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.code,\n        message: property + \" property is on an invalid domain.\",\n      });\n    }\n  });\n\n  /**\n   * Returns a copy of the configuration values.\n   * @public\n   * @returns {Client~configuration} configuration\n   */\n  this.getConfiguration = function () {\n    return JSON.parse(configurationJSON);\n  };\n\n  this._request = request;\n  this._configuration = this.getConfiguration();\n\n  this._clientApiBaseUrl = gatewayConfiguration.clientApiUrl + \"/v1/\";\n\n  if (gatewayConfiguration.graphQL) {\n    if (!isVerifiedDomain(gatewayConfiguration.graphQL.url)) {\n      throw new BraintreeError({\n        type: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.type,\n        code: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.code,\n        message: \"graphQL.url property is on an invalid domain.\",\n      });\n    }\n\n    this._graphQL = new GraphQL({\n      graphQL: gatewayConfiguration.graphQL,\n    });\n  }\n}\n\nClient.initialize = function (options) {\n  var clientInstance, authData;\n  var promise = cachedClients[options.authorization];\n\n  if (promise) {\n    analytics.sendEvent(promise, \"custom.client.load.cached\");\n\n    return promise;\n  }\n\n  try {\n    authData = createAuthorizationData(options.authorization);\n  } catch (err) {\n    return Promise.reject(\n      new BraintreeError(errors.CLIENT_INVALID_AUTHORIZATION)\n    );\n  }\n\n  promise = getGatewayConfiguration(authData).then(function (configuration) {\n    if (options.debug) {\n      configuration.isDebug = true;\n    }\n\n    configuration.authorization = options.authorization;\n\n    clientInstance = new Client(configuration);\n\n    return clientInstance;\n  });\n\n  cachedClients[options.authorization] = promise;\n\n  analytics.sendEvent(promise, \"custom.client.load.initialized\");\n\n  return promise\n    .then(function (client) {\n      analytics.sendEvent(clientInstance, \"custom.client.load.succeeded\");\n\n      return client;\n    })\n    .catch(function (err) {\n      delete cachedClients[options.authorization];\n\n      return Promise.reject(err);\n    });\n};\n\n// Primarily used for testing the client initalization call\nClient.clearCache = function () {\n  cachedClients = {};\n};\n\nClient.prototype._findOrCreateFraudnetJSON = function (clientMetadataId) {\n  var el = document.querySelector('script[fncls=\"' + FRAUDNET_FNCLS + '\"]');\n  var config, additionalData, authorizationFingerprint, parameters;\n\n  if (!el) {\n    el = document.body.appendChild(document.createElement(\"script\"));\n    el.type = \"application/json\";\n    el.setAttribute(\"fncls\", FRAUDNET_FNCLS);\n  }\n\n  config = this.getConfiguration();\n  additionalData = {\n    rda_tenant: \"bt_card\", // eslint-disable-line camelcase\n    mid: config.gatewayConfiguration.merchantId,\n  };\n  authorizationFingerprint = config.authorizationFingerprint;\n\n  if (authorizationFingerprint) {\n    authorizationFingerprint.split(\"&\").forEach(function (pieces) {\n      var component = pieces.split(\"=\");\n\n      if (component[0] === \"customer_id\" && component.length > 1) {\n        additionalData.cid = component[1];\n      }\n    });\n  }\n\n  parameters = {\n    f: clientMetadataId.substr(0, 32),\n    fp: additionalData,\n    bu: false,\n    s: FRAUDNET_SOURCE,\n  };\n  el.text = JSON.stringify(parameters);\n};\n\n/**\n * Used by other modules to formulate all network requests to the Braintree gateway. It is also capable of being used directly from your own form to tokenize credit card information. However, be sure to satisfy PCI compliance if you use direct card tokenization.\n * @public\n * @param {object} options Request options:\n * @param {string} options.method HTTP method, e.g. \"get\" or \"post\".\n * @param {string} options.endpoint Endpoint path, e.g. \"payment_methods\".\n * @param {object} options.data Data to send with the request.\n * @param {number} [options.timeout=60000] Set a timeout (in milliseconds) for the request.\n * @param {callback} [callback] The second argument, <code>data</code>, is the returned server data.\n * @example\n * <caption>Direct Credit Card Tokenization</caption>\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   var form = document.getElementById('my-form-id');\n *   var data = {\n *     creditCard: {\n *       number: form['cc-number'].value,\n *       cvv: form['cc-cvv'].value,\n *       expirationDate: form['cc-expiration-date'].value,\n *       billingAddress: {\n *         postalCode: form['cc-postal-code'].value\n *       },\n *       options: {\n *         validate: false\n *       }\n *     }\n *   };\n *\n *   // Warning: For a merchant to be eligible for the easiest level of PCI compliance (SAQ A),\n *   // payment fields cannot be hosted on your checkout page.\n *   // For an alternative to the following, use Hosted Fields.\n *   clientInstance.request({\n *     endpoint: 'payment_methods/credit_cards',\n *     method: 'post',\n *     data: data\n *   }, function (requestErr, response) {\n *     // More detailed example of handling API errors: https://codepen.io/braintree/pen/MbwjdM\n *     if (requestErr) { throw new Error(requestErr); }\n *\n *     console.log('Got nonce:', response.creditCards[0].nonce);\n *   });\n * });\n * @example\n * <caption>Tokenizing Fields for AVS Checks</caption>\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   var form = document.getElementById('my-form-id');\n *   var data = {\n *     creditCard: {\n *       number: form['cc-number'].value,\n *       cvv: form['cc-cvv'].value,\n *       expirationDate: form['cc-date'].value,\n *       // The billing address can be checked with AVS rules.\n *       // See: https://articles.braintreepayments.com/support/guides/fraud-tools/basic/avs-cvv-rules\n *       billingAddress: {\n *         postalCode: form['cc-postal-code'].value,\n *         streetAddress: form['cc-street-address'].value,\n *         countryName: form['cc-country-name'].value,\n *         countryCodeAlpha2: form['cc-country-alpha2'].value,\n *         countryCodeAlpha3: form['cc-country-alpha3'].value,\n *         countryCodeNumeric: form['cc-country-numeric'].value\n *       },\n *       options: {\n *         validate: false\n *       }\n *     }\n *   };\n *\n *   // Warning: For a merchant to be eligible for the easiest level of PCI compliance (SAQ A),\n *   // payment fields cannot be hosted on your checkout page.\n *   // For an alternative to the following, use Hosted Fields.\n *   clientInstance.request({\n *     endpoint: 'payment_methods/credit_cards',\n *     method: 'post',\n *     data: data\n *   }, function (requestErr, response) {\n *     // More detailed example of handling API errors: https://codepen.io/braintree/pen/MbwjdM\n *     if (requestErr) { throw new Error(requestErr); }\n *\n *     console.log('Got nonce:', response.creditCards[0].nonce);\n *   });\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nClient.prototype.request = function (options, callback) {\n  var self = this; // eslint-disable-line no-invalid-this\n  var requestPromise = new Promise(function (resolve, reject) {\n    var optionName, api, baseUrl, requestOptions;\n    var shouldCollectData = Boolean(\n      options.endpoint === \"payment_methods/credit_cards\" &&\n        self.getConfiguration().gatewayConfiguration.creditCards\n          .collectDeviceData\n    );\n\n    if (options.api !== \"graphQLApi\") {\n      if (!options.method) {\n        optionName = \"options.method\";\n      } else if (!options.endpoint) {\n        optionName = \"options.endpoint\";\n      }\n    }\n\n    if (optionName) {\n      throw new BraintreeError({\n        type: errors.CLIENT_OPTION_REQUIRED.type,\n        code: errors.CLIENT_OPTION_REQUIRED.code,\n        message: optionName + \" is required when making a request.\",\n      });\n    }\n\n    if (\"api\" in options) {\n      api = options.api;\n    } else {\n      api = \"clientApi\";\n    }\n\n    requestOptions = {\n      method: options.method,\n      graphQL: self._graphQL,\n      timeout: options.timeout,\n      metadata: self._configuration.analyticsMetadata,\n    };\n\n    if (api === \"clientApi\") {\n      baseUrl = self._clientApiBaseUrl;\n\n      requestOptions.data = addMetadata(self._configuration, options.data);\n    } else if (api === \"graphQLApi\") {\n      baseUrl =\n        GRAPHQL_URLS[self._configuration.gatewayConfiguration.environment];\n      options.endpoint = \"\";\n      requestOptions.method = \"post\";\n      requestOptions.data = assign(\n        {\n          clientSdkMetadata: {\n            platform: self._configuration.analyticsMetadata.platform,\n            source: self._configuration.analyticsMetadata.source,\n            integration: self._configuration.analyticsMetadata.integration,\n            sessionId: self._configuration.analyticsMetadata.sessionId,\n            version: VERSION,\n          },\n        },\n        options.data\n      );\n\n      requestOptions.headers = getAuthorizationHeadersForGraphQL(\n        self._configuration\n      );\n    } else {\n      throw new BraintreeError({\n        type: errors.CLIENT_OPTION_INVALID.type,\n        code: errors.CLIENT_OPTION_INVALID.code,\n        message: \"options.api is invalid.\",\n      });\n    }\n\n    requestOptions.url = baseUrl + options.endpoint;\n    requestOptions.sendAnalyticsEvent = function (kind) {\n      analytics.sendEvent(self, kind);\n    };\n\n    self._request(requestOptions, function (err, data, status) {\n      var resolvedData, requestError;\n\n      requestError = formatRequestError(status, err);\n\n      if (requestError) {\n        reject(requestError);\n\n        return;\n      }\n\n      if (api === \"graphQLApi\" && data.errors) {\n        reject(\n          convertToBraintreeError(data.errors, {\n            type: errors.CLIENT_GRAPHQL_REQUEST_ERROR.type,\n            code: errors.CLIENT_GRAPHQL_REQUEST_ERROR.code,\n            message: errors.CLIENT_GRAPHQL_REQUEST_ERROR.message,\n          })\n        );\n\n        return;\n      }\n\n      resolvedData = assign({ _httpStatus: status }, data);\n\n      if (\n        shouldCollectData &&\n        resolvedData.creditCards &&\n        resolvedData.creditCards.length > 0\n      ) {\n        self._findOrCreateFraudnetJSON(resolvedData.creditCards[0].nonce);\n\n        assets.loadScript({\n          src: FRAUDNET_URL,\n          forceScriptReload: true,\n        });\n      }\n      resolve(resolvedData);\n    });\n  });\n\n  if (typeof callback === \"function\") {\n    callback = once(deferred(callback));\n\n    requestPromise\n      .then(function (response) {\n        callback(null, response, response._httpStatus);\n      })\n      .catch(function (err) {\n        var status = err && err.details && err.details.httpStatus;\n\n        callback(err, null, status);\n      });\n\n    return;\n  }\n\n  return requestPromise; // eslint-disable-line consistent-return\n};\n\n// eslint-disable-next-line consistent-return\nfunction formatRequestError(status, err) {\n  var requestError;\n\n  if (status === -1) {\n    requestError = new BraintreeError(errors.CLIENT_REQUEST_TIMEOUT);\n  } else if (status === 401) {\n    requestError = new BraintreeError(errors.CLIENT_AUTHORIZATION_INVALID);\n  } else if (status === 403) {\n    requestError = new BraintreeError(errors.CLIENT_AUTHORIZATION_INSUFFICIENT);\n  } else if (status === 429) {\n    requestError = new BraintreeError(errors.CLIENT_RATE_LIMITED);\n  } else if (status >= 500) {\n    requestError = new BraintreeError(errors.CLIENT_GATEWAY_NETWORK);\n  } else if (status < 200 || status >= 400) {\n    requestError = convertToBraintreeError(err, {\n      type: errors.CLIENT_REQUEST_ERROR.type,\n      code: errors.CLIENT_REQUEST_ERROR.code,\n      message: errors.CLIENT_REQUEST_ERROR.message,\n    });\n  }\n\n  if (requestError) {\n    requestError.details = requestError.details || {};\n    requestError.details.httpStatus = status;\n\n    return requestError;\n  }\n}\n\nClient.prototype.toJSON = function () {\n  return this.getConfiguration();\n};\n\n/**\n * Returns the Client version.\n * @public\n * @returns {String} The created client's version.\n * @example\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   console.log(clientInstance.getVersion()); // Ex: 1.0.0\n * });\n * @returns {void}\n */\nClient.prototype.getVersion = function () {\n  return VERSION;\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/client.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * clientInstance.teardown();\n * @example <caption>With callback</caption>\n * clientInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nClient.prototype.teardown = wrapPromise(function () {\n  var self = this; // eslint-disable-line no-invalid-this\n\n  delete cachedClients[self.getConfiguration().authorization];\n  convertMethodsToError(self, methods(Client.prototype));\n\n  return Promise.resolve();\n});\n\nfunction getAuthorizationHeadersForGraphQL(configuration) {\n  var token =\n    configuration.authorizationFingerprint || configuration.authorization;\n\n  return {\n    Authorization: \"Bearer \" + token,\n    \"Braintree-Version\": BRAINTREE_VERSION,\n  };\n}\n\nmodule.exports = Client;\n\n},{\"../lib/add-metadata\":93,\"../lib/analytics\":94,\"../lib/assets\":95,\"../lib/assign\":96,\"../lib/braintree-error\":99,\"../lib/constants\":100,\"../lib/convert-methods-to-error\":101,\"../lib/convert-to-braintree-error\":102,\"../lib/create-authorization-data\":104,\"../lib/deferred\":106,\"../lib/is-verified-domain\":127,\"../lib/methods\":129,\"../lib/once\":130,\"../lib/promise\":131,\"./constants\":57,\"./errors\":58,\"./get-configuration\":59,\"./request\":71,\"./request/graphql\":69,\"@braintree/wrap-promise\":51}],57:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  BRAINTREE_VERSION: \"2018-05-10\",\n};\n\n},{}],58:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Client - Internal Error Codes\n * @ignore\n * @description These codes should never be experienced by the merchant directly.\n * @property {MERCHANT} CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN An error to prevent client creation for domains that are not allowed in the JS.\n * @property {INTERNAL} CLIENT_MISSING_GATEWAY_CONFIGURATION Occurs when the client is created without a gateway configuration. Should never happen.\n */\n\n/**\n * @name BraintreeError.Client - Create Error Codes\n * @description Errors that may occur when [creating the client](./module-braintree-web_client.html#.create)\n * @property {MERCHANT} CLIENT_INVALID_AUTHORIZATION Occurs when client token cannot be parsed.\n */\n\n/**\n * @name BraintreeError.Client - Request Error Codes\n * @description Errors that may occur when [using the request method](./Client.html#request)\n * @property {MERCHANT} CLIENT_OPTION_REQUIRED An option required in the request method was not provided. Usually `options.method` or `options.endpoint`\n * @property {MERCHANT} CLIENT_OPTION_INVALID The request option provided is invalid.\n * @property {MERCHANT} CLIENT_GATEWAY_NETWORK The Braintree gateway could not be contacted.\n * @property {NETWORK} CLIENT_REQUEST_TIMEOUT The request took too long to complete and timed out.\n * @property {NETWORK} CLIENT_REQUEST_ERROR The response from a request had status 400 or greater.\n * @property {NETWORK} CLIENT_GRAPHQL_REQUEST_ERROR The response from a request to GraphQL contained an error.\n * @property {MERCHANT} CLIENT_RATE_LIMITED The response from a request had a status of 429, indicating rate limiting.\n * @property {MERCHANT} CLIENT_AUTHORIZATION_INSUFFICIENT The user associated with the client token or tokenization key does not have permissions to make the request.\n * @property {MERCHANT} CLIENT_AUTHORIZATION_INVALID The provided authorization could not be found. Either the client token has expired and a new client token must be generated or the tokenization key used is set to be inactive or has been deleted.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN\",\n  },\n  CLIENT_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_OPTION_REQUIRED\",\n  },\n  CLIENT_OPTION_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_OPTION_INVALID\",\n  },\n  CLIENT_MISSING_GATEWAY_CONFIGURATION: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"CLIENT_MISSING_GATEWAY_CONFIGURATION\",\n    message: \"Missing gatewayConfiguration.\",\n  },\n  CLIENT_INVALID_AUTHORIZATION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_INVALID_AUTHORIZATION\",\n    message:\n      \"Authorization is invalid. Make sure your client token or tokenization key is valid.\",\n  },\n  CLIENT_GATEWAY_NETWORK: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_GATEWAY_NETWORK\",\n    message: \"Cannot contact the gateway at this time.\",\n  },\n  CLIENT_REQUEST_TIMEOUT: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_REQUEST_TIMEOUT\",\n    message: \"Request timed out waiting for a reply.\",\n  },\n  CLIENT_REQUEST_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_REQUEST_ERROR\",\n    message: \"There was a problem with your request.\",\n  },\n  CLIENT_GRAPHQL_REQUEST_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_GRAPHQL_REQUEST_ERROR\",\n    message: \"There was a problem with your request.\",\n  },\n  CLIENT_RATE_LIMITED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_RATE_LIMITED\",\n    message: \"You are being rate-limited; please try again in a few minutes.\",\n  },\n  CLIENT_AUTHORIZATION_INSUFFICIENT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_AUTHORIZATION_INSUFFICIENT\",\n    message: \"The authorization used has insufficient privileges.\",\n  },\n  CLIENT_AUTHORIZATION_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_AUTHORIZATION_INVALID\",\n    message:\n      \"Either the client token has expired and a new one should be generated or the tokenization key has been deactivated or deleted.\",\n  },\n};\n\n},{\"../lib/braintree-error\":99}],59:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar request = require(\"./request\");\nvar uuid = require(\"@braintree/uuid\");\nvar constants = require(\"../lib/constants\");\nvar errors = require(\"./errors\");\nvar GraphQL = require(\"./request/graphql\");\nvar GRAPHQL_URLS = require(\"../lib/constants\").GRAPHQL_URLS;\nvar isDateStringBeforeOrOn = require(\"../lib/is-date-string-before-or-on\");\n\nvar BRAINTREE_VERSION = require(\"./constants\").BRAINTREE_VERSION;\n\nfunction getConfiguration(authData) {\n  return new Promise(function (resolve, reject) {\n    var configuration, attrs, configUrl, reqOptions;\n    var sessionId = uuid();\n    var analyticsMetadata = {\n      merchantAppId: window.location.host,\n      platform: constants.PLATFORM,\n      sdkVersion: constants.VERSION,\n      source: constants.SOURCE,\n      integration: constants.INTEGRATION,\n      integrationType: constants.INTEGRATION,\n      sessionId: sessionId,\n    };\n\n    attrs = authData.attrs;\n    configUrl = authData.configUrl;\n\n    attrs._meta = analyticsMetadata;\n    attrs.braintreeLibraryVersion = constants.BRAINTREE_LIBRARY_VERSION;\n    attrs.configVersion = \"3\";\n\n    reqOptions = {\n      url: configUrl,\n      method: \"GET\",\n      data: attrs,\n    };\n\n    if (attrs.authorizationFingerprint && authData.graphQL) {\n      if (isDateStringBeforeOrOn(authData.graphQL.date, BRAINTREE_VERSION)) {\n        reqOptions.graphQL = new GraphQL({\n          graphQL: {\n            url: authData.graphQL.url,\n            features: [\"configuration\"],\n          },\n        });\n      }\n\n      reqOptions.metadata = analyticsMetadata;\n    } else if (attrs.tokenizationKey) {\n      reqOptions.graphQL = new GraphQL({\n        graphQL: {\n          url: GRAPHQL_URLS[authData.environment],\n          features: [\"configuration\"],\n        },\n      });\n\n      reqOptions.metadata = analyticsMetadata;\n    }\n\n    // NEXT_MAJOR_VERSION\n    // there are various issues with the config endpoint where the values returned\n    // do not match the values from the merchant account id passed into a client token\n    // we need to update the configuration request endpoint to be able to pass the\n    // correct values. The following ones are incorrect\n    // * applePayWeb - definitely supportedNetworks, which compiles all the card\n    //    networks from all the merchant accounts instead of providing just the\n    //    ones from the specified one. The same is probably true for ios apple pay\n    //    Also the merchantidentifier\n    // NEXT_MAJOR_VERSION Allow passing in merchant account id when creating the component\n    // to fetch the config for that merchant account id (particularly helpful when using\n    // a tokenization key for authorization)\n    request(reqOptions, function (err, response, status) {\n      var errorTemplate;\n\n      if (err) {\n        if (status === 403) {\n          errorTemplate = errors.CLIENT_AUTHORIZATION_INSUFFICIENT;\n        } else if (status === 401) {\n          errorTemplate = errors.CLIENT_AUTHORIZATION_INVALID;\n        } else {\n          errorTemplate = errors.CLIENT_GATEWAY_NETWORK;\n        }\n\n        reject(\n          new BraintreeError({\n            type: errorTemplate.type,\n            code: errorTemplate.code,\n            message: errorTemplate.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n\n        return;\n      }\n\n      configuration = {\n        authorizationType: attrs.tokenizationKey\n          ? \"TOKENIZATION_KEY\"\n          : \"CLIENT_TOKEN\",\n        authorizationFingerprint: attrs.authorizationFingerprint,\n        analyticsMetadata: analyticsMetadata,\n        gatewayConfiguration: response,\n      };\n\n      resolve(configuration);\n    });\n  });\n}\n\nmodule.exports = {\n  getConfiguration: wrapPromise(getConfiguration),\n};\n\n},{\"../lib/braintree-error\":99,\"../lib/constants\":100,\"../lib/is-date-string-before-or-on\":125,\"../lib/promise\":131,\"./constants\":57,\"./errors\":58,\"./request\":71,\"./request/graphql\":69,\"@braintree/uuid\":47,\"@braintree/wrap-promise\":51}],60:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Client = require(\"./client\");\nvar VERSION = \"3.88.3\";\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar sharedErrors = require(\"../lib/errors\");\n\n/** @module braintree-web/client */\n\n/**\n * @function create\n * @description This function is the entry point for the <code>braintree.client</code> module. It is used for creating {@link Client} instances that service communication to Braintree servers.\n * @param {object} options Object containing all {@link Client} options:\n * @param {string} options.authorization A tokenizationKey or clientToken.\n * @param {callback} [callback] The second argument, <code>data</code>, is the {@link Client} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   if (createErr) {\n *     if (createErr.code === 'CLIENT_AUTHORIZATION_INVALID') {\n *       // either the client token has expired, and a new one should be generated\n *       // or the tokenization key was deactivated or deleted\n *     } else {\n *       console.log('something went wrong creating the client instance', createErr);\n *     }\n *     return;\n *   }\n *\n *  // set up other components\n * });\n * @static\n */\nfunction create(options) {\n  if (!options.authorization) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type,\n        code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code,\n        message:\n          \"options.authorization is required when instantiating a client.\",\n      })\n    );\n  }\n\n  return Client.initialize(options);\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/braintree-error\":99,\"../lib/errors\":109,\"../lib/promise\":131,\"./client\":56,\"@braintree/wrap-promise\":51}],61:[function(require,module,exports){\n\"use strict\";\n\nvar querystring = require(\"../../lib/querystring\");\nvar assign = require(\"../../lib/assign\").assign;\nvar prepBody = require(\"./prep-body\");\nvar parseBody = require(\"./parse-body\");\nvar xhr = require(\"./xhr\");\nvar isXHRAvailable = xhr.isAvailable;\nvar GraphQLRequest = require(\"./graphql/request\");\nvar DefaultRequest = require(\"./default-request\");\n\nvar MAX_TCP_RETRYCOUNT = 1;\nvar TCP_PRECONNECT_BUG_STATUS_CODE = 408;\n\nfunction requestShouldRetry(status) {\n  return !status || status === TCP_PRECONNECT_BUG_STATUS_CODE;\n}\n\nfunction graphQLRequestShouldRetryWithClientApi(body) {\n  var errorClass =\n    !body.data &&\n    body.errors &&\n    body.errors[0] &&\n    body.errors[0].extensions &&\n    body.errors[0].extensions.errorClass;\n\n  return errorClass === \"UNKNOWN\" || errorClass === \"INTERNAL\";\n}\n\nfunction _requestWithRetry(options, tcpRetryCount, cb) {\n  var status, resBody, ajaxRequest, body, method, headers, parsedBody;\n  var url = options.url;\n  var graphQL = options.graphQL;\n  var timeout = options.timeout;\n  var req = xhr.getRequestObject();\n  var callback = cb;\n  var isGraphQLRequest = Boolean(\n    graphQL && graphQL.isGraphQLRequest(url, options.data)\n  );\n\n  options.headers = assign(\n    { \"Content-Type\": \"application/json\" },\n    options.headers\n  );\n\n  if (isGraphQLRequest) {\n    ajaxRequest = new GraphQLRequest(options);\n  } else {\n    ajaxRequest = new DefaultRequest(options);\n  }\n\n  url = ajaxRequest.getUrl();\n  body = ajaxRequest.getBody();\n  method = ajaxRequest.getMethod();\n  headers = ajaxRequest.getHeaders();\n\n  if (method === \"GET\") {\n    url = querystring.queryify(url, body);\n    body = null;\n  }\n\n  if (isXHRAvailable) {\n    req.onreadystatechange = function () {\n      if (req.readyState !== 4) {\n        return;\n      }\n\n      if (req.status === 0 && isGraphQLRequest) {\n        // If a merchant experiences a connection\n        // issue to the GraphQL endpoint (possibly\n        // due to a Content Security Policy), retry\n        // the request against the old client API.\n        delete options.graphQL;\n        _requestWithRetry(options, tcpRetryCount, cb);\n\n        return;\n      }\n\n      parsedBody = parseBody(req.responseText);\n      resBody = ajaxRequest.adaptResponseBody(parsedBody);\n      status = ajaxRequest.determineStatus(req.status, parsedBody);\n\n      if (status >= 400 || status < 200) {\n        if (\n          isGraphQLRequest &&\n          graphQLRequestShouldRetryWithClientApi(parsedBody)\n        ) {\n          delete options.graphQL;\n          _requestWithRetry(options, tcpRetryCount, cb);\n\n          return;\n        }\n\n        if (tcpRetryCount < MAX_TCP_RETRYCOUNT && requestShouldRetry(status)) {\n          tcpRetryCount++;\n          _requestWithRetry(options, tcpRetryCount, cb);\n\n          return;\n        }\n        callback(resBody || \"error\", null, status || 500);\n      } else {\n        callback(null, resBody, status);\n      }\n    };\n  } else {\n    if (options.headers) {\n      url = querystring.queryify(url, headers);\n    }\n\n    req.onload = function () {\n      callback(null, parseBody(req.responseText), req.status);\n    };\n\n    req.onerror = function () {\n      // XDomainRequest does not report a body or status for errors, so\n      // hardcode to 'error' and 500, respectively\n      callback(\"error\", null, 500);\n    };\n\n    // This must remain for IE9 to work\n    req.onprogress = function () {};\n\n    req.ontimeout = function () {\n      callback(\"timeout\", null, -1);\n    };\n  }\n\n  try {\n    req.open(method, url, true);\n  } catch (requestOpenError) {\n    // If a merchant has a Content Security Policy and they have\n    // not allowed our endpoints, some browsers may\n    // synchronously throw an error. If it is not a GraphQL\n    // request, we throw the error. If it is a GraphQL request\n    // we remove the GraphQL option and try the request against\n    // the old client API.\n    if (!isGraphQLRequest) {\n      throw requestOpenError;\n    }\n\n    delete options.graphQL;\n\n    _requestWithRetry(options, tcpRetryCount, cb);\n\n    return;\n  }\n\n  req.timeout = timeout;\n\n  if (isXHRAvailable) {\n    Object.keys(headers).forEach(function (headerKey) {\n      req.setRequestHeader(headerKey, headers[headerKey]);\n    });\n  }\n\n  try {\n    req.send(prepBody(method, body));\n  } catch (e) {\n    /* ignored */\n  }\n}\n\nfunction request(options, cb) {\n  _requestWithRetry(options, 0, cb);\n}\n\nmodule.exports = {\n  request: request,\n};\n\n},{\"../../lib/assign\":96,\"../../lib/querystring\":132,\"./default-request\":62,\"./graphql/request\":70,\"./parse-body\":74,\"./prep-body\":75,\"./xhr\":76}],62:[function(require,module,exports){\n\"use strict\";\n\nfunction DefaultRequest(options) {\n  this._url = options.url;\n  this._data = options.data;\n  this._method = options.method;\n  this._headers = options.headers;\n}\n\nDefaultRequest.prototype.getUrl = function () {\n  return this._url;\n};\n\nDefaultRequest.prototype.getBody = function () {\n  return this._data;\n};\n\nDefaultRequest.prototype.getMethod = function () {\n  return this._method;\n};\n\nDefaultRequest.prototype.getHeaders = function () {\n  return this._headers;\n};\n\nDefaultRequest.prototype.adaptResponseBody = function (parsedBody) {\n  return parsedBody;\n};\n\nDefaultRequest.prototype.determineStatus = function (status) {\n  return status;\n};\n\nmodule.exports = DefaultRequest;\n\n},{}],63:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function getUserAgent() {\n  return window.navigator.userAgent;\n};\n\n},{}],64:[function(require,module,exports){\n\"use strict\";\n\nvar errorResponseAdapter = require(\"./error\");\nvar assign = require(\"../../../../lib/assign\").assign;\n\n/* eslint-disable camelcase */\nvar cardTypeTransforms = {\n  creditCard: {\n    AMERICAN_EXPRESS: \"American Express\",\n    DISCOVER: \"Discover\",\n    INTERNATIONAL_MAESTRO: \"Maestro\",\n    JCB: \"JCB\",\n    MASTERCARD: \"MasterCard\",\n    SOLO: \"Solo\",\n    UK_MAESTRO: \"UK Maestro\",\n    UNION_PAY: \"UnionPay\",\n    VISA: \"Visa\",\n    ELO: \"Elo\",\n    HIPER: \"Hiper\",\n    HIPERCARD: \"Hipercard\",\n  },\n  applePayWeb: {\n    VISA: \"visa\",\n    MASTERCARD: \"mastercard\",\n    DISCOVER: \"discover\",\n    AMERICAN_EXPRESS: \"amex\",\n    INTERNATIONAL_MAESTRO: \"maestro\",\n    ELO: \"elo\",\n  },\n  visaCheckout: {\n    VISA: \"Visa\",\n    MASTERCARD: \"MasterCard\",\n    DISCOVER: \"Discover\",\n    AMERICAN_EXPRESS: \"American Express\",\n  },\n  googlePay: {\n    VISA: \"visa\",\n    MASTERCARD: \"mastercard\",\n    DISCOVER: \"discover\",\n    AMERICAN_EXPRESS: \"amex\",\n    INTERNATIONAL_MAESTRO: \"maestro\",\n    ELO: \"elo\",\n  },\n  masterpass: {\n    VISA: \"visa\",\n    MASTERCARD: \"master\",\n    DISCOVER: \"discover\",\n    AMERICAN_EXPRESS: \"amex\",\n    DINERS: \"diners\",\n    INTERNATIONAL_MAESTRO: \"maestro\",\n    JCB: \"jcb\",\n  },\n};\n/* eslint-enable camelcase */\n\nfunction configurationResponseAdapter(responseBody, ctx) {\n  var adaptedResponse;\n\n  if (responseBody.data && !responseBody.errors) {\n    adaptedResponse = adaptConfigurationResponseBody(responseBody, ctx);\n  } else {\n    adaptedResponse = errorResponseAdapter(responseBody);\n  }\n\n  return adaptedResponse;\n}\n\nfunction adaptConfigurationResponseBody(body, ctx) {\n  var configuration = body.data.clientConfiguration;\n  var response;\n\n  response = {\n    environment: configuration.environment.toLowerCase(),\n    clientApiUrl: configuration.clientApiUrl,\n    assetsUrl: configuration.assetsUrl,\n    analytics: {\n      url: configuration.analyticsUrl,\n    },\n    merchantId: configuration.merchantId,\n    venmo: \"off\",\n  };\n\n  if (configuration.supportedFeatures) {\n    response.graphQL = {\n      url: ctx._graphQL._config.url,\n      features: configuration.supportedFeatures.map(function (feature) {\n        return feature.toLowerCase();\n      }),\n    };\n  }\n\n  if (configuration.braintreeApi) {\n    response.braintreeApi = configuration.braintreeApi;\n  }\n\n  if (configuration.applePayWeb) {\n    response.applePayWeb = configuration.applePayWeb;\n    response.applePayWeb.supportedNetworks = mapCardTypes(\n      configuration.applePayWeb.supportedCardBrands,\n      cardTypeTransforms.applePayWeb\n    );\n\n    delete response.applePayWeb.supportedCardBrands;\n  }\n\n  if (configuration.ideal) {\n    response.ideal = configuration.ideal;\n  }\n\n  if (configuration.kount) {\n    response.kount = {\n      kountMerchantId: configuration.kount.merchantId,\n    };\n  }\n\n  if (configuration.creditCard) {\n    response.challenges = configuration.creditCard.challenges.map(function (\n      challenge\n    ) {\n      return challenge.toLowerCase();\n    });\n\n    response.creditCards = {\n      supportedCardTypes: mapCardTypes(\n        configuration.creditCard.supportedCardBrands,\n        cardTypeTransforms.creditCard\n      ),\n    };\n    response.threeDSecureEnabled = configuration.creditCard.threeDSecureEnabled;\n    response.threeDSecure = configuration.creditCard.threeDSecure;\n  } else {\n    response.challenges = [];\n    response.creditCards = {\n      supportedCardTypes: [],\n    };\n    response.threeDSecureEnabled = false;\n  }\n\n  if (configuration.googlePay) {\n    response.androidPay = {\n      displayName: configuration.googlePay.displayName,\n      enabled: true,\n      environment: configuration.googlePay.environment.toLowerCase(),\n      googleAuthorizationFingerprint:\n        configuration.googlePay.googleAuthorization,\n      paypalClientId: configuration.googlePay.paypalClientId,\n      supportedNetworks: mapCardTypes(\n        configuration.googlePay.supportedCardBrands,\n        cardTypeTransforms.googlePay\n      ),\n    };\n  }\n\n  if (configuration.venmo) {\n    response.payWithVenmo = {\n      merchantId: configuration.venmo.merchantId,\n      accessToken: configuration.venmo.accessToken,\n      environment: configuration.venmo.environment.toLowerCase(),\n    };\n  }\n\n  if (configuration.paypal) {\n    response.paypalEnabled = true;\n    response.paypal = assign({}, configuration.paypal);\n    response.paypal.currencyIsoCode = response.paypal.currencyCode;\n    response.paypal.environment = response.paypal.environment.toLowerCase();\n\n    delete response.paypal.currencyCode;\n  } else {\n    response.paypalEnabled = false;\n  }\n\n  if (configuration.unionPay) {\n    response.unionPay = {\n      enabled: true,\n      merchantAccountId: configuration.unionPay.merchantAccountId,\n    };\n  }\n\n  if (configuration.visaCheckout) {\n    response.visaCheckout = {\n      apikey: configuration.visaCheckout.apiKey,\n      encryptionKey: configuration.visaCheckout.encryptionKey,\n      externalClientId: configuration.visaCheckout.externalClientId,\n      supportedCardTypes: mapCardTypes(\n        configuration.visaCheckout.supportedCardBrands,\n        cardTypeTransforms.visaCheckout\n      ),\n    };\n  }\n\n  if (configuration.masterpass) {\n    response.masterpass = {\n      merchantCheckoutId: configuration.masterpass.merchantCheckoutId,\n      supportedNetworks: mapCardTypes(\n        configuration.masterpass.supportedCardBrands,\n        cardTypeTransforms.masterpass\n      ),\n    };\n  }\n\n  if (configuration.usBankAccount) {\n    response.usBankAccount = {\n      routeId: configuration.usBankAccount.routeId,\n      plaid: {\n        publicKey: configuration.usBankAccount.plaidPublicKey,\n      },\n    };\n  }\n\n  return response;\n}\n\nfunction mapCardTypes(cardTypes, cardTypeTransformMap) {\n  return cardTypes.reduce(function (acc, type) {\n    if (cardTypeTransformMap.hasOwnProperty(type)) {\n      return acc.concat(cardTypeTransformMap[type]);\n    }\n\n    return acc;\n  }, []);\n}\n\nmodule.exports = configurationResponseAdapter;\n\n},{\"../../../../lib/assign\":96,\"./error\":66}],65:[function(require,module,exports){\n\"use strict\";\n\nvar errorResponseAdapter = require(\"./error\");\n\nvar CARD_BRAND_MAP = {\n  /* eslint-disable camelcase */\n  AMERICAN_EXPRESS: \"American Express\",\n  DINERS: \"Discover\",\n  DISCOVER: \"Discover\",\n  ELO: \"Elo\",\n  HIPER: \"Hiper\",\n  HIPERCARD: \"Hipercard\",\n  INTERNATIONAL_MAESTRO: \"Maestro\",\n  JCB: \"JCB\",\n  MASTERCARD: \"MasterCard\",\n  UK_MAESTRO: \"Maestro\",\n  UNION_PAY: \"UnionPay\",\n  VISA: \"Visa\",\n  /* eslint-enable camelcase */\n};\n\nvar BIN_DATA_MAP = {\n  YES: \"Yes\",\n  NO: \"No\",\n  UNKNOWN: \"Unknown\",\n};\n\nvar AUTHENTICATION_INSIGHT_MAP = {\n  PSDTWO: \"psd2\",\n};\n\nfunction creditCardTokenizationResponseAdapter(responseBody) {\n  var adaptedResponse;\n\n  if (responseBody.data && !responseBody.errors) {\n    adaptedResponse = adaptTokenizeCreditCardResponseBody(responseBody);\n  } else {\n    adaptedResponse = errorResponseAdapter(responseBody);\n  }\n\n  return adaptedResponse;\n}\n\nfunction adaptTokenizeCreditCardResponseBody(body) {\n  var data = body.data.tokenizeCreditCard;\n  var creditCard = data.creditCard;\n  var lastTwo = creditCard.last4 ? creditCard.last4.substr(2, 4) : \"\";\n  var binData = creditCard.binData;\n  var response, regulationEnvironment;\n\n  if (binData) {\n    [\n      \"commercial\",\n      \"debit\",\n      \"durbinRegulated\",\n      \"healthcare\",\n      \"payroll\",\n      \"prepaid\",\n    ].forEach(function (key) {\n      if (binData[key]) {\n        binData[key] = BIN_DATA_MAP[binData[key]];\n      } else {\n        binData[key] = \"Unknown\";\n      }\n    });\n\n    [\"issuingBank\", \"countryOfIssuance\", \"productId\"].forEach(function (key) {\n      if (!binData[key]) {\n        binData[key] = \"Unknown\";\n      }\n    });\n  }\n\n  response = {\n    creditCards: [\n      {\n        binData: binData,\n        consumed: false,\n        description: lastTwo ? \"ending in \" + lastTwo : \"\",\n        nonce: data.token,\n        details: {\n          cardholderName: creditCard.cardholderName,\n          expirationMonth: creditCard.expirationMonth,\n          expirationYear: creditCard.expirationYear,\n          bin: creditCard.bin || \"\",\n          cardType: CARD_BRAND_MAP[creditCard.brandCode] || \"Unknown\",\n          lastFour: creditCard.last4 || \"\",\n          lastTwo: lastTwo,\n        },\n        type: \"CreditCard\",\n        threeDSecureInfo: null,\n      },\n    ],\n  };\n\n  if (data.authenticationInsight) {\n    regulationEnvironment =\n      data.authenticationInsight.customerAuthenticationRegulationEnvironment;\n    response.creditCards[0].authenticationInsight = {\n      regulationEnvironment:\n        AUTHENTICATION_INSIGHT_MAP[regulationEnvironment] ||\n        regulationEnvironment.toLowerCase(),\n    };\n  }\n\n  return response;\n}\n\nmodule.exports = creditCardTokenizationResponseAdapter;\n\n},{\"./error\":66}],66:[function(require,module,exports){\n\"use strict\";\n\nfunction errorResponseAdapter(responseBody) {\n  var response;\n  var errorClass =\n    responseBody.errors &&\n    responseBody.errors[0] &&\n    responseBody.errors[0].extensions &&\n    responseBody.errors[0].extensions.errorClass;\n\n  if (errorClass === \"VALIDATION\") {\n    response = userErrorResponseAdapter(responseBody);\n  } else if (errorClass) {\n    response = errorWithClassResponseAdapter(responseBody);\n  } else {\n    response = {\n      error: { message: \"There was a problem serving your request\" },\n      fieldErrors: [],\n    };\n  }\n\n  return response;\n}\n\nfunction errorWithClassResponseAdapter(responseBody) {\n  return {\n    error: { message: responseBody.errors[0].message },\n    fieldErrors: [],\n  };\n}\n\nfunction userErrorResponseAdapter(responseBody) {\n  var fieldErrors = buildFieldErrors(responseBody.errors);\n\n  if (fieldErrors.length === 0) {\n    return { error: { message: responseBody.errors[0].message } };\n  }\n\n  return {\n    error: { message: getLegacyMessage(fieldErrors) },\n    fieldErrors: fieldErrors,\n  };\n}\n\nfunction buildFieldErrors(errors) {\n  var fieldErrors = [];\n\n  errors.forEach(function (error) {\n    if (!(error.extensions && error.extensions.inputPath)) {\n      return;\n    }\n    addFieldError(error.extensions.inputPath.slice(1), error, fieldErrors);\n  });\n\n  return fieldErrors;\n}\n\nfunction addFieldError(inputPath, errorDetail, fieldErrors) {\n  var fieldError;\n  var legacyCode = errorDetail.extensions.legacyCode;\n  var inputField = inputPath[0];\n\n  if (inputPath.length === 1) {\n    fieldErrors.push({\n      code: legacyCode,\n      field: inputField,\n      message: errorDetail.message,\n    });\n\n    return;\n  }\n\n  fieldErrors.forEach(function (candidate) {\n    if (candidate.field === inputField) {\n      fieldError = candidate;\n    }\n  });\n\n  if (!fieldError) {\n    fieldError = { field: inputField, fieldErrors: [] };\n    fieldErrors.push(fieldError);\n  }\n\n  addFieldError(inputPath.slice(1), errorDetail, fieldError.fieldErrors);\n}\n\nfunction getLegacyMessage(errors) {\n  var legacyMessages = {\n    creditCard: \"Credit card is invalid\",\n  };\n\n  var field = errors[0].field;\n\n  return legacyMessages[field];\n}\n\nmodule.exports = errorResponseAdapter;\n\n},{}],67:[function(require,module,exports){\n\"use strict\";\n\nvar CONFIGURATION_QUERY =\n  \"query ClientConfiguration { \" +\n  \"  clientConfiguration { \" +\n  \"    analyticsUrl \" +\n  \"    environment \" +\n  \"    merchantId \" +\n  \"    assetsUrl \" +\n  \"    clientApiUrl \" +\n  \"    creditCard { \" +\n  \"      supportedCardBrands \" +\n  \"      challenges \" +\n  \"      threeDSecureEnabled \" +\n  \"      threeDSecure { \" +\n  \"        cardinalAuthenticationJWT \" +\n  \"      } \" +\n  \"    } \" +\n  \"    applePayWeb { \" +\n  \"      countryCode \" +\n  \"      currencyCode \" +\n  \"      merchantIdentifier \" +\n  \"      supportedCardBrands \" +\n  \"    } \" +\n  \"    googlePay { \" +\n  \"      displayName \" +\n  \"      supportedCardBrands \" +\n  \"      environment \" +\n  \"      googleAuthorization \" +\n  \"      paypalClientId \" +\n  \"    } \" +\n  \"    ideal { \" +\n  \"      routeId \" +\n  \"      assetsUrl \" +\n  \"    } \" +\n  \"    kount { \" +\n  \"      merchantId \" +\n  \"    } \" +\n  \"    masterpass { \" +\n  \"      merchantCheckoutId \" +\n  \"      supportedCardBrands \" +\n  \"    } \" +\n  \"    paypal { \" +\n  \"      displayName \" +\n  \"      clientId \" +\n  \"      privacyUrl \" +\n  \"      userAgreementUrl \" +\n  \"      assetsUrl \" +\n  \"      environment \" +\n  \"      environmentNoNetwork \" +\n  \"      unvettedMerchant \" +\n  \"      braintreeClientId \" +\n  \"      billingAgreementsEnabled \" +\n  \"      merchantAccountId \" +\n  \"      currencyCode \" +\n  \"      payeeEmail \" +\n  \"    } \" +\n  \"    unionPay { \" +\n  \"      merchantAccountId \" +\n  \"    } \" +\n  \"    usBankAccount { \" +\n  \"      routeId \" +\n  \"      plaidPublicKey \" +\n  \"    } \" +\n  \"    venmo { \" +\n  \"      merchantId \" +\n  \"      accessToken \" +\n  \"      environment \" +\n  \"    } \" +\n  \"    visaCheckout { \" +\n  \"      apiKey \" +\n  \"      externalClientId \" +\n  \"      supportedCardBrands \" +\n  \"    } \" +\n  \"    braintreeApi { \" +\n  \"      accessToken \" +\n  \"      url \" +\n  \"    } \" +\n  \"    supportedFeatures \" +\n  \"  } \" +\n  \"}\";\n\nfunction configuration() {\n  return {\n    query: CONFIGURATION_QUERY,\n    operationName: \"ClientConfiguration\",\n  };\n}\n\nmodule.exports = configuration;\n\n},{}],68:[function(require,module,exports){\n\"use strict\";\n\nvar assign = require(\"../../../../lib/assign\").assign;\n\nfunction createMutation(config) {\n  var hasAuthenticationInsight = config.hasAuthenticationInsight;\n  var mutation = \"mutation TokenizeCreditCard($input: TokenizeCreditCardInput!\";\n\n  if (hasAuthenticationInsight) {\n    mutation += \", $authenticationInsightInput: AuthenticationInsightInput!\";\n  }\n\n  mutation +=\n    \") { \" +\n    \"  tokenizeCreditCard(input: $input) { \" +\n    \"    token \" +\n    \"    creditCard { \" +\n    \"      bin \" +\n    \"      brandCode \" +\n    \"      last4 \" +\n    \"      cardholderName \" +\n    \"      expirationMonth\" +\n    \"      expirationYear\" +\n    \"      binData { \" +\n    \"        prepaid \" +\n    \"        healthcare \" +\n    \"        debit \" +\n    \"        durbinRegulated \" +\n    \"        commercial \" +\n    \"        payroll \" +\n    \"        issuingBank \" +\n    \"        countryOfIssuance \" +\n    \"        productId \" +\n    \"      } \" +\n    \"    } \";\n\n  if (hasAuthenticationInsight) {\n    mutation +=\n      \"    authenticationInsight(input: $authenticationInsightInput) {\" +\n      \"      customerAuthenticationRegulationEnvironment\" +\n      \"    }\";\n  }\n\n  mutation += \"  } }\";\n\n  return mutation;\n}\n\nfunction createCreditCardTokenizationBody(body, options) {\n  var cc = body.creditCard;\n  var billingAddress = cc && cc.billingAddress;\n  var expDate = cc && cc.expirationDate;\n  var expirationMonth =\n    cc && (cc.expirationMonth || (expDate && expDate.split(\"/\")[0].trim()));\n  var expirationYear =\n    cc && (cc.expirationYear || (expDate && expDate.split(\"/\")[1].trim()));\n  var variables = {\n    input: {\n      creditCard: {\n        number: cc && cc.number,\n        expirationMonth: expirationMonth,\n        expirationYear: expirationYear,\n        cvv: cc && cc.cvv,\n        cardholderName: cc && cc.cardholderName,\n      },\n      options: {},\n    },\n  };\n\n  if (options.hasAuthenticationInsight) {\n    variables.authenticationInsightInput = {\n      merchantAccountId: body.merchantAccountId,\n    };\n  }\n\n  if (billingAddress) {\n    variables.input.creditCard.billingAddress = billingAddress;\n  }\n\n  variables.input = addValidationRule(body, variables.input);\n\n  return variables;\n}\n\nfunction addValidationRule(body, input) {\n  var validate;\n\n  if (\n    body.creditCard &&\n    body.creditCard.options &&\n    typeof body.creditCard.options.validate === \"boolean\"\n  ) {\n    validate = body.creditCard.options.validate;\n  } else if (\n    (body.authorizationFingerprint && body.tokenizationKey) ||\n    body.authorizationFingerprint\n  ) {\n    validate = true;\n  } else if (body.tokenizationKey) {\n    validate = false;\n  }\n\n  if (typeof validate === \"boolean\") {\n    input.options = assign(\n      {\n        validate: validate,\n      },\n      input.options\n    );\n  }\n\n  return input;\n}\n\nfunction creditCardTokenization(body) {\n  var options = {\n    hasAuthenticationInsight: Boolean(\n      body.authenticationInsight && body.merchantAccountId\n    ),\n  };\n\n  return {\n    query: createMutation(options),\n    variables: createCreditCardTokenizationBody(body, options),\n    operationName: \"TokenizeCreditCard\",\n  };\n}\n\nmodule.exports = creditCardTokenization;\n\n},{\"../../../../lib/assign\":96}],69:[function(require,module,exports){\n\"use strict\";\n\nvar browserDetection = require(\"../../browser-detection\");\n\nvar features = {\n  tokenize_credit_cards: \"payment_methods/credit_cards\", // eslint-disable-line camelcase\n  configuration: \"configuration\",\n};\n\nvar disallowedInputPaths = [\"creditCard.options.unionPayEnrollment\"];\n\nfunction GraphQL(config) {\n  this._config = config.graphQL;\n}\n\nGraphQL.prototype.getGraphQLEndpoint = function () {\n  return this._config.url;\n};\n\nGraphQL.prototype.isGraphQLRequest = function (url, body) {\n  var featureEnabled;\n  var path = this.getClientApiPath(url);\n\n  if (!this._isGraphQLEnabled() || !path || browserDetection.isIe9()) {\n    return false;\n  }\n\n  featureEnabled = this._config.features.some(function (feature) {\n    return features[feature] === path;\n  });\n\n  if (containsDisallowedlistedKeys(body)) {\n    return false;\n  }\n\n  return featureEnabled;\n};\n\nGraphQL.prototype.getClientApiPath = function (url) {\n  var path;\n  var clientApiPrefix = \"/client_api/v1/\";\n  var pathParts = url.split(clientApiPrefix);\n\n  if (pathParts.length > 1) {\n    path = pathParts[1].split(\"?\")[0];\n  }\n\n  return path;\n};\n\nGraphQL.prototype._isGraphQLEnabled = function () {\n  return Boolean(this._config);\n};\n\nfunction containsDisallowedlistedKeys(body) {\n  return disallowedInputPaths.some(function (keys) {\n    var value = keys.split(\".\").reduce(function (accumulator, key) {\n      return accumulator && accumulator[key];\n    }, body);\n\n    return value !== undefined; // eslint-disable-line no-undefined\n  });\n}\n\nmodule.exports = GraphQL;\n\n},{\"../../browser-detection\":55}],70:[function(require,module,exports){\n\"use strict\";\n\nvar BRAINTREE_VERSION = require(\"../../constants\").BRAINTREE_VERSION;\n\nvar assign = require(\"../../../lib/assign\").assign;\nvar snakeCaseToCamelCase = require(\"../../../lib/snake-case-to-camel-case\");\n\nvar creditCardTokenizationBodyGenerator = require(\"./generators/credit-card-tokenization\");\nvar creditCardTokenizationResponseAdapter = require(\"./adapters/credit-card-tokenization\");\n\nvar configurationBodyGenerator = require(\"./generators/configuration\");\nvar configurationResponseAdapter = require(\"./adapters/configuration\");\n\nvar generators = {\n  \"payment_methods/credit_cards\": creditCardTokenizationBodyGenerator,\n  configuration: configurationBodyGenerator,\n};\nvar adapters = {\n  \"payment_methods/credit_cards\": creditCardTokenizationResponseAdapter,\n  configuration: configurationResponseAdapter,\n};\n\nfunction GraphQLRequest(options) {\n  var clientApiPath = options.graphQL.getClientApiPath(options.url);\n\n  this._graphQL = options.graphQL;\n  this._data = options.data;\n  this._method = options.method;\n  this._headers = options.headers;\n  this._clientSdkMetadata = {\n    source: options.metadata.source,\n    integration: options.metadata.integration,\n    sessionId: options.metadata.sessionId,\n  };\n  this._sendAnalyticsEvent = options.sendAnalyticsEvent || Function.prototype;\n\n  this._generator = generators[clientApiPath];\n  this._adapter = adapters[clientApiPath];\n\n  this._sendAnalyticsEvent(\"graphql.init\");\n}\n\nGraphQLRequest.prototype.getUrl = function () {\n  return this._graphQL.getGraphQLEndpoint();\n};\n\nGraphQLRequest.prototype.getBody = function () {\n  var formattedBody = formatBodyKeys(this._data);\n  var generatedBody = this._generator(formattedBody);\n  var body = assign(\n    { clientSdkMetadata: this._clientSdkMetadata },\n    generatedBody\n  );\n\n  return JSON.stringify(body);\n};\n\nGraphQLRequest.prototype.getMethod = function () {\n  return \"POST\";\n};\n\nGraphQLRequest.prototype.getHeaders = function () {\n  var authorization, headers;\n\n  if (this._data.authorizationFingerprint) {\n    this._sendAnalyticsEvent(\"graphql.authorization-fingerprint\");\n    authorization = this._data.authorizationFingerprint;\n  } else {\n    this._sendAnalyticsEvent(\"graphql.tokenization-key\");\n    authorization = this._data.tokenizationKey;\n  }\n\n  headers = {\n    Authorization: \"Bearer \" + authorization,\n    \"Braintree-Version\": BRAINTREE_VERSION,\n  };\n\n  return assign({}, this._headers, headers);\n};\n\nGraphQLRequest.prototype.adaptResponseBody = function (parsedBody) {\n  return this._adapter(parsedBody, this);\n};\n\nGraphQLRequest.prototype.determineStatus = function (\n  httpStatus,\n  parsedResponse\n) {\n  var status, errorClass;\n\n  if (httpStatus === 200) {\n    errorClass =\n      parsedResponse.errors &&\n      parsedResponse.errors[0] &&\n      parsedResponse.errors[0].extensions &&\n      parsedResponse.errors[0].extensions.errorClass;\n\n    if (parsedResponse.data && !parsedResponse.errors) {\n      status = 200;\n    } else if (errorClass === \"VALIDATION\") {\n      status = 422;\n    } else if (errorClass === \"AUTHORIZATION\") {\n      status = 403;\n    } else if (errorClass === \"AUTHENTICATION\") {\n      status = 401;\n    } else if (isGraphQLError(errorClass, parsedResponse)) {\n      status = 403;\n    } else {\n      status = 500;\n    }\n  } else if (!httpStatus) {\n    status = 500;\n  } else {\n    status = httpStatus;\n  }\n\n  this._sendAnalyticsEvent(\"graphql.status.\" + httpStatus);\n  this._sendAnalyticsEvent(\"graphql.determinedStatus.\" + status);\n\n  return status;\n};\n\nfunction isGraphQLError(errorClass, parsedResponse) {\n  return !errorClass && parsedResponse.errors[0].message;\n}\n\nfunction formatBodyKeys(originalBody) {\n  var body = {};\n\n  Object.keys(originalBody).forEach(function (key) {\n    var camelCaseKey = snakeCaseToCamelCase(key);\n\n    if (typeof originalBody[key] === \"object\") {\n      body[camelCaseKey] = formatBodyKeys(originalBody[key]);\n    } else if (typeof originalBody[key] === \"number\") {\n      body[camelCaseKey] = String(originalBody[key]);\n    } else {\n      body[camelCaseKey] = originalBody[key];\n    }\n  });\n\n  return body;\n}\n\nmodule.exports = GraphQLRequest;\n\n},{\"../../../lib/assign\":96,\"../../../lib/snake-case-to-camel-case\":134,\"../../constants\":57,\"./adapters/configuration\":64,\"./adapters/credit-card-tokenization\":65,\"./generators/configuration\":67,\"./generators/credit-card-tokenization\":68}],71:[function(require,module,exports){\n\"use strict\";\n\nvar ajaxIsAvaliable;\nvar once = require(\"../../lib/once\");\nvar JSONPDriver = require(\"./jsonp-driver\");\nvar AJAXDriver = require(\"./ajax-driver\");\nvar getUserAgent = require(\"./get-user-agent\");\nvar isHTTP = require(\"./is-http\");\n\nfunction isAjaxAvailable() {\n  if (ajaxIsAvaliable == null) {\n    ajaxIsAvaliable = !(isHTTP() && /MSIE\\s(8|9)/.test(getUserAgent()));\n  }\n\n  return ajaxIsAvaliable;\n}\n\nmodule.exports = function (options, cb) {\n  cb = once(cb || Function.prototype);\n  options.method = (options.method || \"GET\").toUpperCase();\n  options.timeout = options.timeout == null ? 60000 : options.timeout;\n  options.data = options.data || {};\n\n  if (isAjaxAvailable()) {\n    AJAXDriver.request(options, cb);\n  } else {\n    JSONPDriver.request(options, cb);\n  }\n};\n\n},{\"../../lib/once\":130,\"./ajax-driver\":61,\"./get-user-agent\":63,\"./is-http\":72,\"./jsonp-driver\":73}],72:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function () {\n  return window.location.protocol === \"http:\";\n};\n\n},{}],73:[function(require,module,exports){\n\"use strict\";\n\nvar head;\nvar uuid = require(\"@braintree/uuid\");\nvar querystring = require(\"../../lib/querystring\");\nvar timeouts = {};\n\nfunction _removeScript(script) {\n  if (script && script.parentNode) {\n    script.parentNode.removeChild(script);\n  }\n}\n\nfunction _createScriptTag(url, callbackName) {\n  var script = document.createElement(\"script\");\n  var done = false;\n\n  script.src = url;\n  script.async = true;\n  script.onerror = function () {\n    window[callbackName]({ message: \"error\", status: 500 });\n  };\n\n  script.onload = script.onreadystatechange = function () {\n    if (done) {\n      return;\n    }\n\n    if (\n      !this.readyState ||\n      this.readyState === \"loaded\" ||\n      this.readyState === \"complete\"\n    ) {\n      done = true;\n      script.onload = script.onreadystatechange = null;\n    }\n  };\n\n  return script;\n}\n\nfunction _cleanupGlobal(callbackName) {\n  try {\n    delete window[callbackName];\n  } catch (_) {\n    window[callbackName] = null;\n  }\n}\n\nfunction _setupTimeout(timeout, callbackName) {\n  timeouts[callbackName] = setTimeout(function () {\n    timeouts[callbackName] = null;\n\n    window[callbackName]({\n      error: \"timeout\",\n      status: -1,\n    });\n\n    window[callbackName] = function () {\n      _cleanupGlobal(callbackName);\n    };\n  }, timeout);\n}\n\nfunction _setupGlobalCallback(script, callback, callbackName) {\n  window[callbackName] = function (response) {\n    var status = response.status || 500;\n    var err = null;\n    var data = null;\n\n    delete response.status;\n\n    if (status >= 400 || status < 200) {\n      err = response;\n    } else {\n      data = response;\n    }\n\n    _cleanupGlobal(callbackName);\n    _removeScript(script);\n\n    clearTimeout(timeouts[callbackName]);\n    callback(err, data, status);\n  };\n}\n\nfunction request(options, callback) {\n  var script;\n  var callbackName = \"callback_json_\" + uuid().replace(/-/g, \"\");\n  var url = options.url;\n  var attrs = options.data;\n  var method = options.method;\n  var timeout = options.timeout;\n\n  url = querystring.queryify(url, attrs);\n  url = querystring.queryify(url, {\n    _method: method,\n    callback: callbackName,\n  });\n\n  script = _createScriptTag(url, callbackName);\n  _setupGlobalCallback(script, callback, callbackName);\n  _setupTimeout(timeout, callbackName);\n\n  if (!head) {\n    head = document.getElementsByTagName(\"head\")[0];\n  }\n\n  head.appendChild(script);\n}\n\nmodule.exports = {\n  request: request,\n};\n\n},{\"../../lib/querystring\":132,\"@braintree/uuid\":47}],74:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (body) {\n  try {\n    body = JSON.parse(body);\n  } catch (e) {\n    /* ignored */\n  }\n\n  return body;\n};\n\n},{}],75:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (method, body) {\n  if (typeof method !== \"string\") {\n    throw new Error(\"Method must be a string\");\n  }\n\n  if (method.toLowerCase() !== \"get\" && body != null) {\n    body = typeof body === \"string\" ? body : JSON.stringify(body);\n  }\n\n  return body;\n};\n\n},{}],76:[function(require,module,exports){\n\"use strict\";\n\nvar isXHRAvailable =\n  typeof window !== \"undefined\" &&\n  window.XMLHttpRequest &&\n  \"withCredentials\" in new window.XMLHttpRequest();\n\nfunction getRequestObject() {\n  return isXHRAvailable\n    ? new window.XMLHttpRequest()\n    : new window.XDomainRequest();\n}\n\nmodule.exports = {\n  isAvailable: isXHRAvailable,\n  getRequestObject: getRequestObject,\n};\n\n},{}],77:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Google Payment - Creation Error Codes\n * @description Errors that occur when [creating the Google Payment component](./module-braintree-web_google-payment.html#.create).\n * @property {MERCHANT} GOOGLE_PAYMENT_NOT_ENABLED Occurs when Google Pay is not enabled on the Braintree control panel.\n * @property {MERCHANT} GOOGLE_PAYMENT_UNSUPPORTED_VERSION Occurs when a Google Pay version is used that is not supported by the Braintree SDK.\n */\n\n/**\n * @name BraintreeError.Google Payment - parseResponse Error Codes\n * @description Errors that occur when [parsing the response from Google](./GooglePayment.html#parseResponse).\n * @property {UNKNOWN} GOOGLE_PAYMENT_GATEWAY_ERROR Occurs when Google Pay could not be tokenized.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  GOOGLE_PAYMENT_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"GOOGLE_PAYMENT_NOT_ENABLED\",\n    message: \"Google Pay is not enabled for this merchant.\",\n  },\n  GOOGLE_PAYMENT_GATEWAY_ERROR: {\n    code: \"GOOGLE_PAYMENT_GATEWAY_ERROR\",\n    message:\n      \"There was an error when tokenizing the Google Pay payment method.\",\n    type: BraintreeError.types.UNKNOWN,\n  },\n  GOOGLE_PAYMENT_UNSUPPORTED_VERSION: {\n    code: \"GOOGLE_PAYMENT_UNSUPPORTED_VERSION\",\n    type: BraintreeError.types.MERCHANT,\n  },\n};\n\n},{\"../lib/braintree-error\":99}],78:[function(require,module,exports){\n\"use strict\";\n\nvar analytics = require(\"../lib/analytics\");\nvar assign = require(\"../lib/assign\").assign;\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar find = require(\"../lib/find\");\nvar generateGooglePayConfiguration = require(\"../lib/generate-google-pay-configuration\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar errors = require(\"./errors\");\nvar methods = require(\"../lib/methods\");\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\nvar CREATE_PAYMENT_DATA_REQUEST_METHODS = {\n  1: \"_createV1PaymentDataRequest\",\n  2: \"_createV2PaymentDataRequest\",\n};\n\n/**\n * @typedef {object} GooglePayment~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} details Additional account details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {boolean} details.isNetworkTokenized True if the card is network tokenized.\n * @property {string} details.bin First six digits of card number.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, `CreditCard` or `AndroidPayCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n */\n\n/**\n * @class GooglePayment\n * @param {object} options Google Payment {@link module:braintree-web/google-payment.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/google-payment.create|braintree-web.google-payment.create} instead.</strong>\n * @classdesc This class represents a Google Payment component produced by {@link module:braintree-web/google-payment.create|braintree-web/google-payment.create}. Instances of this class have methods for initializing the Google Pay flow.\n */\nfunction GooglePayment(options) {\n  this._createPromise = options.createPromise;\n  this._client = options.client;\n  this._useDeferredClient = options.useDeferredClient;\n  // NEXT_MAJOR_VERSION this should be updated to 2 (or whatever the current latest version is)\n  this._googlePayVersion = options.googlePayVersion || 1;\n  this._googleMerchantId = options.googleMerchantId;\n\n  if (this._isUnsupportedGooglePayAPIVersion()) {\n    throw new BraintreeError({\n      code: errors.GOOGLE_PAYMENT_UNSUPPORTED_VERSION.code,\n      message:\n        \"The Braintree SDK does not support Google Pay version \" +\n        this._googlePayVersion +\n        \". Please upgrade the version of your Braintree SDK and contact support if this error persists.\",\n      type: errors.GOOGLE_PAYMENT_UNSUPPORTED_VERSION.type,\n    });\n  }\n}\n\nGooglePayment.prototype._waitForClient = function () {\n  if (this._client) {\n    return Promise.resolve();\n  }\n\n  return this._createPromise.then(\n    function (client) {\n      this._client = client;\n    }.bind(this)\n  );\n};\n\nGooglePayment.prototype._isUnsupportedGooglePayAPIVersion = function () {\n  // if we don't have createPaymentDatqRequest method for the specific\n  // API version, then the version is not supported\n  return !(this._googlePayVersion in CREATE_PAYMENT_DATA_REQUEST_METHODS);\n};\n\nGooglePayment.prototype._getDefaultConfig = function () {\n  if (!this._defaultConfig) {\n    this._defaultConfig = generateGooglePayConfiguration(\n      this._client.getConfiguration(),\n      this._googlePayVersion,\n      this._googleMerchantId\n    );\n  }\n\n  return this._defaultConfig;\n};\n\nGooglePayment.prototype._createV1PaymentDataRequest = function (\n  paymentDataRequest\n) {\n  var defaultConfig = this._getDefaultConfig();\n  var overrideCardNetworks =\n    paymentDataRequest.cardRequirements &&\n    paymentDataRequest.cardRequirements.allowedCardNetworks;\n  var defaultConfigCardNetworks =\n    defaultConfig.cardRequirements.allowedCardNetworks;\n  var allowedCardNetworks = overrideCardNetworks || defaultConfigCardNetworks;\n\n  paymentDataRequest = assign({}, defaultConfig, paymentDataRequest);\n\n  // this way we can preserve allowedCardNetworks from default integration\n  // if merchant did not pass any in `cardRequirements`\n  paymentDataRequest.cardRequirements.allowedCardNetworks = allowedCardNetworks;\n\n  return paymentDataRequest;\n};\n\nGooglePayment.prototype._createV2PaymentDataRequest = function (\n  paymentDataRequest\n) {\n  var defaultConfig = this._getDefaultConfig();\n\n  if (paymentDataRequest.allowedPaymentMethods) {\n    paymentDataRequest.allowedPaymentMethods.forEach(function (paymentMethod) {\n      var defaultPaymentMethod = find(\n        defaultConfig.allowedPaymentMethods,\n        \"type\",\n        paymentMethod.type\n      );\n\n      if (defaultPaymentMethod) {\n        applyDefaultsToPaymentMethodConfiguration(\n          paymentMethod,\n          defaultPaymentMethod\n        );\n      }\n    });\n  }\n\n  paymentDataRequest = assign({}, defaultConfig, paymentDataRequest);\n\n  return paymentDataRequest;\n};\n\n/**\n * Create a configuration object for use in the `loadPaymentData` method.\n *\n * **Note**: Version 1 of the Google Pay Api is deprecated and will become unsupported in a future version. Until then, version 1 will continue to be used by default, and version 1 schema parameters and overrides will remain functional on existing integrations. However, new integrations and all following examples will be presented in the GooglePay version 2 schema. See [Google Pay's upgrade guide](https://developers.google.com/pay/api/web/guides/resources/update-to-latest-version) to see how to update your integration.\n *\n * If `options.googlePayVersion === 2` was set during the initial {@link module:braintree-web/google-payment.create|create} call, overrides must match the Google Pay v2 schema to be valid.\n *\n * @public\n * @param {object} overrides The supplied parameters for creating the PaymentDataRequest object. Required parameters are:\n *  @param {object} overrides.transactionInfo Object according to the [Google Pay Transaction Info](https://developers.google.com/pay/api/web/reference/object#TransactionInfo) spec.\n *  Optionally, any of the parameters in the [PaymentDataRequest](https://developers.google.com/pay/api/web/reference/object#PaymentDataRequest) parameters can be overridden, but note that it is recommended only to override top level parameters to avoid squashing deeply nested configuration objects. An example can be found below showing how to safely edit these deeply nested objects.\n * @example\n * var paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n *   merchantInfo: {\n *     merchantId: 'my-merchant-id-from-google'\n *   },\n *   transactionInfo: {\n *     currencyCode: 'USD',\n *     totalPriceStatus: 'FINAL',\n *     totalPrice: '100.00'\n *   }\n * });\n *\n * // Update card payment methods to require billing address\n * var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods;\n * cardPaymentMethod.parameters.billingAddressRequired = true;\n * cardPaymentMethod.parameters.billingAddressParameters = {\n *   format: 'FULL',\n *   phoneNumberRequired: true\n * };\n *\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * })\n *\n * paymentsClient.loadPaymentData(paymentDataRequest).then(function (response) {\n *   // handle response with googlePaymentInstance.parseResponse\n *   // (see below)\n * });\n * @example <caption>With deferred client</caption>\n * googlePaymentInstance.createPaymentDataRequest({\n *   merchantInfo: {\n *     merchantId: 'my-merchant-id-from-google'\n *   },\n *   transactionInfo: {\n *     currencyCode: 'USD',\n *     totalPriceStatus: 'FINAL',\n *     totalPrice: '100.00'\n *   }\n * }).then(function (paymentDataRequest) {\n *   // Update card payment methods to require billing address\n *   var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods;\n *   cardPaymentMethod.parameters.billingAddressRequired = true;\n *   cardPaymentMethod.parameters.billingAddressParameters = {\n *     format: 'FULL',\n *     phoneNumberRequired: true\n *   };\n *\n *   var paymentsClient = new google.payments.api.PaymentsClient({\n *     environment: 'TEST' // or 'PRODUCTION'\n *   })\n *\n *   return paymentsClient.loadPaymentData(paymentDataRequest);\n * }).then(function (response) {\n *   // handle response with googlePaymentInstance.parseResponse\n *   // (see below)\n * });\n * @returns {object|Promise} Returns a configuration object for Google PaymentDataRequest. If instantiated with `useDeferredClient` and an `authorization` it will return a promise that resolves with the configuration.\n */\nGooglePayment.prototype.createPaymentDataRequest = function (overrides) {\n  if (!this._useDeferredClient) {\n    return this._createPaymentDataRequestSyncronously(overrides);\n  }\n\n  return this._waitForClient().then(\n    function () {\n      return this._createPaymentDataRequestSyncronously(overrides);\n    }.bind(this)\n  );\n};\n\nGooglePayment.prototype._createPaymentDataRequestSyncronously = function (\n  overrides\n) {\n  var paymentDataRequest = assign({}, overrides);\n  var version = this._googlePayVersion;\n  var createPaymentDataRequestMethod =\n    CREATE_PAYMENT_DATA_REQUEST_METHODS[version];\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"google-payment.v\" + version + \".createPaymentDataRequest\"\n  );\n\n  return this[createPaymentDataRequestMethod](paymentDataRequest);\n};\n\n/**\n * Parse the response from the tokenization.\n * @public\n * @param {object} response The response back from the Google Pay tokenization.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link GooglePay~tokenizePayload|tokenizePayload}. If no callback is provided, `parseResponse` returns a promise that resolves with a {@link GooglePayment~tokenizePayload|tokenizePayload}.\n * @example with callback\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * })\n *\n * paymentsClient.loadPaymentData(paymentDataRequestFromCreatePaymentDataRequest).then(function (response) {\n *   googlePaymentInstance.parseResponse(response, function (err, data) {\n *     if (err) {\n *       // handle errors\n *     }\n *     // send parsedResponse.nonce to your server\n *   });\n * });\n * @example with promise\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * })\n *\n * paymentsClient.loadPaymentData(paymentDataRequestFromCreatePaymentDataRequest).then(function (response) {\n *   return googlePaymentInstance.parseResponse(response);\n * }).then(function (parsedResponse) {\n *   // send parsedResponse.nonce to your server\n * }).catch(function (err) {\n *   // handle errors\n * });\n * @returns {(Promise|void)} Returns a promise that resolves the parsed response if no callback is provided.\n */\nGooglePayment.prototype.parseResponse = function (response) {\n  var self = this;\n\n  return Promise.resolve()\n    .then(function () {\n      var payload;\n      var rawResponse =\n        response.apiVersion === 2\n          ? response.paymentMethodData.tokenizationData.token\n          : response.paymentMethodToken.token;\n      var parsedResponse = JSON.parse(rawResponse);\n      var error = parsedResponse.error;\n\n      if (error) {\n        return Promise.reject(error);\n      }\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"google-payment.parseResponse.succeeded\"\n      );\n\n      if (parsedResponse.paypalAccounts) {\n        payload = parsedResponse.paypalAccounts[0];\n        analytics.sendEvent(\n          self._createPromise,\n          \"google-payment.parseResponse.succeeded.paypal\"\n        );\n\n        return Promise.resolve({\n          nonce: payload.nonce,\n          type: payload.type,\n          description: payload.description,\n        });\n      }\n      payload = parsedResponse.androidPayCards[0];\n      analytics.sendEvent(\n        self._createPromise,\n        \"google-payment.parseResponse.succeeded.google-payment\"\n      );\n\n      return Promise.resolve({\n        nonce: payload.nonce,\n        type: payload.type,\n        description: payload.description,\n        details: {\n          cardType: payload.details.cardType,\n          lastFour: payload.details.lastFour,\n          lastTwo: payload.details.lastTwo,\n          isNetworkTokenized: payload.details.isNetworkTokenized,\n          bin: payload.details.bin,\n        },\n        binData: payload.binData,\n      });\n    })\n    .catch(function (error) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"google-payment.parseResponse.failed\"\n      );\n\n      return Promise.reject(\n        new BraintreeError({\n          code: errors.GOOGLE_PAYMENT_GATEWAY_ERROR.code,\n          message: errors.GOOGLE_PAYMENT_GATEWAY_ERROR.message,\n          type: errors.GOOGLE_PAYMENT_GATEWAY_ERROR.type,\n          details: {\n            originalError: error,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/google-payment.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * googlePaymentInstance.teardown();\n * @example <caption>With callback</caption>\n * googlePaymentInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nGooglePayment.prototype.teardown = function () {\n  convertMethodsToError(this, methods(GooglePayment.prototype));\n\n  return Promise.resolve();\n};\n\nfunction applyDefaultsToPaymentMethodConfiguration(\n  merchantSubmittedPaymentMethod,\n  defaultPaymentMethod\n) {\n  Object.keys(defaultPaymentMethod).forEach(function (parameter) {\n    if (typeof defaultPaymentMethod[parameter] === \"object\") {\n      merchantSubmittedPaymentMethod[parameter] = assign(\n        {},\n        defaultPaymentMethod[parameter],\n        merchantSubmittedPaymentMethod[parameter]\n      );\n    } else {\n      merchantSubmittedPaymentMethod[parameter] =\n        merchantSubmittedPaymentMethod[parameter] ||\n        defaultPaymentMethod[parameter];\n    }\n  });\n}\n\nmodule.exports = wrapPromise.wrapPrototype(GooglePayment);\n\n},{\"../lib/analytics\":94,\"../lib/assign\":96,\"../lib/braintree-error\":99,\"../lib/convert-methods-to-error\":101,\"../lib/find\":111,\"../lib/generate-google-pay-configuration\":123,\"../lib/methods\":129,\"../lib/promise\":131,\"./errors\":77,\"@braintree/wrap-promise\":51}],79:[function(require,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/google-payment\n * @description A component to integrate with Google Pay. The majority of the integration uses [Google's pay.js JavaScript file](https://pay.google.com/gp/p/js/pay.js). The Braintree component generates the configuration object necessary for Google Pay to initiate the Payment Request and parse the returned data to retrieve the payment method nonce which is used to process the transaction on the server.\n */\n\nvar GooglePayment = require(\"./google-payment\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Promise = require(\"../lib/promise\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar VERSION = \"3.88.3\";\nvar errors = require(\"./errors\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.useDeferredClient] Used in conjunction with `authorization`, allows the Google Payment instance to be available right away by fetching the client configuration in the background. When this option is used, {@link GooglePayment#createPaymentDataRequest} will return a promise that resolves with the configuration instead of returning synchronously.\n * @param {number} [options.googlePayVersion] The version of the Google Pay API to use. Value of 2 is required to accept parameters documented [by Google](https://developers.google.com/pay/api/web/reference/object). Omit this parameter to use the deprecated Google Pay Version 1.\n * @param {string} [options.googleMerchantId] A Google merchant identifier issued after your website is approved by Google. Required when PaymentsClient is initialized with an environment property of PRODUCTION, but may be omitted in TEST environment.\n * @param {callback} [callback] The second argument, `data`, is the {@link GooglePayment} instance. If no callback is provided, `create` returns a promise that resolves with the {@link GooglePayment} instance.\n * @example <caption>Simple Example</caption>\n * // include https://pay.google.com/gp/p/js/pay.js in a script tag\n * // on your page to load the `google.payments.api.PaymentsClient` global object.\n *\n * var paymentButton = document.querySelector('#google-pay-button');\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * });\n *\n * braintree.client.create({\n *   authorization: 'tokenization-key-or-client-token'\n * }).then(function (clientInstance) {\n *   return braintree.googlePayment.create({\n *     client: clientInstance,\n *      googlePayVersion: 2,\n *      googleMerchantId: 'your-merchant-id-from-google'\n *   });\n * }).then(function (googlePaymentInstance) {\n *   paymentButton.addEventListener('click', function (event) {\n *     var paymentDataRequest;\n *\n *     event.preventDefault();\n *\n *     paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n *       transactionInfo: {\n *         currencyCode: 'USD',\n *         totalPriceStatus: 'FINAL',\n *         totalPrice: '100.00'\n *       }\n *     });\n *\n *     paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n *       return googlePaymentInstance.parseResponse(paymentData);\n *     }).then(function (result) {\n *       // send result.nonce to your server\n *     }).catch(function (err) {\n *       // handle err\n *     });\n *   });\n * });\n * @example <caption>Check Browser and Customer Compatibility</caption>\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * });\n *\n * function setupGooglePayButton(googlePaymentInstance) {\n *   var button = document.createElement('button');\n *\n *   button.id = 'google-pay';\n *   button.appendChild(document.createTextNode('Google Pay'));\n *   button.addEventListener('click', function (event) {\n *     var paymentRequestData;\n *\n *     event.preventDefault();\n *\n *     paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n *       transactionInfo: {\n *         currencyCode: 'USD',\n *         totalPriceStatus: 'FINAL',\n *         totalPrice: '100.00' // your amount\n *       }\n *     });\n *\n *     paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n *       return googlePaymentInstance.parseResponse(paymentData);\n *       }).then(function (result) {\n *       // send result.nonce to your server\n *     }).catch(function (err) {\n *       // handle errors\n *     });\n *   });\n *\n *   document.getElementById('container').appendChild(button);\n * }\n *\n * braintree.client.create({\n *   authorization: 'tokenization-key-or-client-token'\n * }).then(function (clientInstance) {\n *   return braintree.googlePayment.create({\n *     client: clientInstance,\n *     googlePayVersion: 2,\n *     googleMerchantId: 'your-merchant-id-from-google'\n *   });\n * }).then(function (googlePaymentInstance) {\n *\n *   return paymentsClient.isReadyToPay({\n *     // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest for all options\n *     apiVersion: 2,\n *     apiVersionMinor: 0,\n *     allowedPaymentMethods: googlePaymentInstance.createPaymentDataRequest().allowedPaymentMethods,\n *     existingPaymentMethodRequired: true\n *   });\n * }).then(function (response) {\n *   if (response.result) {\n *     setupGooglePayButton(googlePaymentInstance);\n *   }\n * }).catch(function (err) {\n *   // handle setup errors\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Google Pay\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var createPromise, instance;\n\n      createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          var configuration = client.getConfiguration();\n\n          options.client = client;\n          if (!configuration.gatewayConfiguration.androidPay) {\n            return Promise.reject(\n              new BraintreeError(errors.GOOGLE_PAYMENT_NOT_ENABLED)\n            );\n          }\n\n          return client;\n        });\n\n      options.createPromise = createPromise;\n      instance = new GooglePayment(options);\n\n      if (!options.useDeferredClient) {\n        return createPromise.then(function (client) {\n          instance._client = client;\n\n          return instance;\n        });\n      }\n\n      return instance;\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"../lib/promise\":131,\"./errors\":77,\"./google-payment\":78,\"@braintree/wrap-promise\":51}],80:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../../lib/braintree-error\");\nvar errors = require(\"../shared/errors\");\nvar allowedAttributes = require(\"../shared/constants\").allowedAttributes;\n\nfunction attributeValidationError(attribute, value) {\n  var err;\n\n  if (!allowedAttributes.hasOwnProperty(attribute)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED.type,\n      code: errors.HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED.code,\n      message:\n        'The \"' + attribute + '\" attribute is not supported in Hosted Fields.',\n    });\n  } else if (value != null && !_isValid(attribute, value)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED.type,\n      code: errors.HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED.code,\n      message:\n        'Value \"' +\n        value +\n        '\" is not allowed for \"' +\n        attribute +\n        '\" attribute.',\n    });\n  }\n\n  return err;\n}\n\nfunction _isValid(attribute, value) {\n  if (allowedAttributes[attribute] === \"string\") {\n    return typeof value === \"string\" || typeof value === \"number\";\n  } else if (allowedAttributes[attribute] === \"boolean\") {\n    return String(value) === \"true\" || String(value) === \"false\";\n  }\n\n  return false;\n}\n\nmodule.exports = attributeValidationError;\n\n},{\"../../lib/braintree-error\":99,\"../shared/constants\":88,\"../shared/errors\":89}],81:[function(require,module,exports){\n\"use strict\";\n\nvar constants = require(\"../shared/constants\");\nvar useMin = require(\"../../lib/use-min\");\n\nmodule.exports = function composeUrl(assetsUrl, componentId, isDebug) {\n  return (\n    assetsUrl +\n    \"/web/\" +\n    constants.VERSION +\n    \"/html/hosted-fields-frame\" +\n    useMin(isDebug) +\n    \".html#\" +\n    componentId\n  );\n};\n\n},{\"../../lib/use-min\":135,\"../shared/constants\":88}],82:[function(require,module,exports){\n\"use strict\";\n\nvar directions = require(\"../shared/constants\").navigationDirections;\nvar browserDetection = require(\"../shared/browser-detection\");\nvar focusIntercept = require(\"../shared/focus-intercept\");\nvar findParentTags = require(\"../shared/find-parent-tags\");\nvar userFocusableTagNames = [\"INPUT\", \"SELECT\", \"TEXTAREA\"];\n// Devices with software keyboards do not or cannot focus on input types\n// that do not require keyboard-based interaction.\nvar unfocusedInputTypes = [\n  \"hidden\",\n  \"button\",\n  \"reset\",\n  \"submit\",\n  \"checkbox\",\n  \"radio\",\n  \"file\",\n];\n\nfunction _isUserFocusableElement(element) {\n  if (!browserDetection.hasSoftwareKeyboard()) {\n    // on desktop browsers, the only input type that isn't focusable\n    // is the hidden input\n    return element.type !== \"hidden\";\n  }\n\n  return (\n    userFocusableTagNames.indexOf(element.tagName) > -1 &&\n    unfocusedInputTypes.indexOf(element.type) < 0\n  );\n}\n\nfunction _createNavigationHelper(direction, numberOfElementsInForm) {\n  switch (direction) {\n    case directions.BACK:\n      return {\n        checkIndexBounds: function (index) {\n          return index < 0;\n        },\n        indexChange: -1,\n      };\n    case directions.FORWARD:\n      return {\n        checkIndexBounds: function (index) {\n          return index > numberOfElementsInForm - 1;\n        },\n        indexChange: 1,\n      };\n    default:\n  }\n\n  return {};\n}\n\nfunction _findFirstFocusableElement(elementsInForm) {\n  var elementsIndex, element;\n\n  for (\n    elementsIndex = 0;\n    elementsIndex < elementsInForm.length;\n    elementsIndex++\n  ) {\n    element = elementsInForm[elementsIndex];\n\n    if (_isUserFocusableElement(element)) {\n      return element;\n    }\n  }\n\n  return null;\n}\n\nmodule.exports = {\n  removeExtraFocusElements: function (checkoutForm, onRemoveFocusIntercepts) {\n    var elements = Array.prototype.slice.call(checkoutForm.elements);\n    var firstFocusableInput = _findFirstFocusableElement(elements);\n    var lastFocusableInput = _findFirstFocusableElement(elements.reverse());\n\n    // these should never be identical, because there will at least be the\n    // before and the after input\n    [firstFocusableInput, lastFocusableInput].forEach(function (input) {\n      if (!input) {\n        return;\n      }\n\n      if (focusIntercept.matchFocusElement(input.getAttribute(\"id\"))) {\n        onRemoveFocusIntercepts(input.getAttribute(\"id\"));\n      }\n    });\n  },\n\n  createFocusChangeHandler: function (hostedFieldsId, callbacks) {\n    return function (data) {\n      var currentIndex, targetElement, checkoutForm, navHelper;\n      var sourceElement = document.getElementById(\n        \"bt-\" + data.field + \"-\" + data.direction + \"-\" + hostedFieldsId\n      );\n\n      if (!sourceElement) {\n        return;\n      }\n\n      checkoutForm = findParentTags(sourceElement, \"form\")[0];\n\n      if (document.forms.length < 1 || !checkoutForm) {\n        callbacks.onRemoveFocusIntercepts();\n\n        return;\n      }\n\n      checkoutForm = [].slice.call(checkoutForm.elements);\n      currentIndex = checkoutForm.indexOf(sourceElement);\n      navHelper = _createNavigationHelper(data.direction, checkoutForm.length);\n\n      do {\n        currentIndex += navHelper.indexChange;\n        if (navHelper.checkIndexBounds(currentIndex)) {\n          return;\n        }\n        targetElement = checkoutForm[currentIndex];\n      } while (!_isUserFocusableElement(targetElement));\n\n      if (focusIntercept.matchFocusElement(targetElement.getAttribute(\"id\"))) {\n        callbacks.onTriggerInputFocus(\n          targetElement.getAttribute(\"data-braintree-type\")\n        );\n      } else {\n        targetElement.focus();\n      }\n    };\n  },\n};\n\n},{\"../shared/browser-detection\":87,\"../shared/constants\":88,\"../shared/find-parent-tags\":90,\"../shared/focus-intercept\":91}],83:[function(require,module,exports){\n\"use strict\";\n\nvar allowedStyles = require(\"../shared/constants\").allowedStyles;\n\nmodule.exports = function getStylesFromClass(cssClass) {\n  var element = document.createElement(\"input\");\n  var styles = {};\n  var computedStyles;\n\n  if (cssClass[0] === \".\") {\n    cssClass = cssClass.substring(1);\n  }\n\n  element.className = cssClass;\n  element.style.display = \"none !important\";\n  element.style.position = \"fixed !important\";\n  element.style.left = \"-99999px !important\";\n  element.style.top = \"-99999px !important\";\n  document.body.appendChild(element);\n\n  computedStyles = window.getComputedStyle(element);\n\n  allowedStyles.forEach(function (style) {\n    var value = computedStyles[style];\n\n    if (value) {\n      styles[style] = value;\n    }\n  });\n\n  document.body.removeChild(element);\n\n  return styles;\n};\n\n},{\"../shared/constants\":88}],84:[function(require,module,exports){\n\"use strict\";\n\nvar assign = require(\"../../lib/assign\").assign;\nvar createAssetsUrl = require(\"../../lib/create-assets-url\");\nvar isVerifiedDomain = require(\"../../lib/is-verified-domain\");\nvar Destructor = require(\"../../lib/destructor\");\nvar classList = require(\"@braintree/class-list\");\nvar iFramer = require(\"@braintree/iframer\");\nvar Bus = require(\"framebus\");\nvar createDeferredClient = require(\"../../lib/create-deferred-client\");\nvar BraintreeError = require(\"../../lib/braintree-error\");\nvar composeUrl = require(\"./compose-url\");\nvar getStylesFromClass = require(\"./get-styles-from-class\");\nvar constants = require(\"../shared/constants\");\nvar errors = require(\"../shared/errors\");\nvar INTEGRATION_TIMEOUT_MS =\n  require(\"../../lib/constants\").INTEGRATION_TIMEOUT_MS;\nvar uuid = require(\"@braintree/uuid\");\nvar findParentTags = require(\"../shared/find-parent-tags\");\nvar browserDetection = require(\"../shared/browser-detection\");\nvar events = constants.events;\nvar EventEmitter = require(\"@braintree/event-emitter\");\nvar injectFrame = require(\"./inject-frame\");\nvar analytics = require(\"../../lib/analytics\");\nvar allowedFields = constants.allowedFields;\nvar methods = require(\"../../lib/methods\");\nvar shadow = require(\"../../lib/shadow\");\nvar findRootNode = require(\"../../lib/find-root-node\");\nvar convertMethodsToError = require(\"../../lib/convert-methods-to-error\");\nvar sharedErrors = require(\"../../lib/errors\");\nvar getCardTypes = require(\"../shared/get-card-types\");\nvar attributeValidationError = require(\"./attribute-validation-error\");\nvar Promise = require(\"../../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar focusChange = require(\"./focus-change\");\nvar destroyFocusIntercept = require(\"../shared/focus-intercept\").destroy;\n\nvar SAFARI_FOCUS_TIMEOUT = 5;\n\n/**\n * @typedef {object} HostedFields~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} authenticationInsight Info about the [regulatory environment](https://developer.paypal.com/braintree/docs/guides/3d-secure/advanced-options/javascript/v3#authentication-insight) of the tokenized card. Only available if `authenticationInsight.merchantAccountId` is passed in the `tokenize` method options.\n * @property {string} authenticationInsight.regulationEnvironment The [regulation environment](https://developer.paypal.com/braintree/docs/guides/3d-secure/advanced-options/javascript/v3#authentication-insight) for the tokenized card.\n * @property {object} details Additional account details.\n * @property {string} details.bin The BIN number of the card.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.expirationMonth The expiration month of the card.\n * @property {string} details.expirationYear The expiration year of the card.\n * @property {string} details.cardholderName The cardholder name tokenized with the card.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `CreditCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n */\n\n/**\n * @typedef {object} HostedFields~stateObject\n * @description The event payload sent from {@link HostedFields#on|on} or {@link HostedFields#getState|getState}.\n * @property {HostedFields~hostedFieldsCard[]} cards\n * This will return an array of potential {@link HostedFields~hostedFieldsCard|cards}. If the card type has been determined, the array will contain only one card.\n * Internally, Hosted Fields uses <a href=\"https://github.com/braintree/credit-card-type\">credit-card-type</a>,\n * an open-source card detection library.\n * @property {string} emittedBy\n * The name of the field associated with an event. This will not be included if returned by {@link HostedFields#getState|getState}. It will be one of the following strings:<br>\n * - `\"number\"`\n * - `\"cvv\"`\n * - `\"expirationDate\"`\n * - `\"expirationMonth\"`\n * - `\"expirationYear\"`\n * - `\"postalCode\"`\n * - `\"cardholderName\"`\n * @property {object} fields\n * @property {?HostedFields~hostedFieldsFieldData} fields.number {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the number field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.cvv {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the CVV field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.expirationDate {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the expiration date field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.expirationMonth {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the expiration month field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.expirationYear {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the expiration year field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.postalCode {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the postal code field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.cardholderName {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the cardholder name field, if it is present.\n */\n\n/**\n * @typedef {object} HostedFields~binPayload\n * @description The event payload sent from {@link HostedFields#on|on} when the {@link HostedFields#event:binAvailable|binAvailable} event is emitted.\n * @property {string} bin The first 6 digits of the card number.\n */\n\n/**\n * @typedef {object} HostedFields~hostedFieldsFieldData\n * @description Data about Hosted Fields fields, sent in {@link HostedFields~stateObject|stateObjects}.\n * @property {HTMLElement} container Reference to the container DOM element on your page associated with the current event.\n * @property {boolean} isFocused Whether or not the input is currently focused.\n * @property {boolean} isEmpty Whether or not the user has entered a value in the input.\n * @property {boolean} isPotentiallyValid\n * A determination based on the future validity of the input value.\n * This is helpful when a user is entering a card number and types <code>\"41\"</code>.\n * While that value is not valid for submission, it is still possible for\n * it to become a fully qualified entry. However, if the user enters <code>\"4x\"</code>\n * it is clear that the card number can never become valid and isPotentiallyValid will\n * return false.\n * @property {boolean} isValid Whether or not the value of the associated input is <i>fully</i> qualified for submission.\n */\n\n/**\n * @typedef {object} HostedFields~hostedFieldsCard\n * @description Information about the card type, sent in {@link HostedFields~stateObject|stateObjects}.\n * @property {string} type The code-friendly representation of the card type. It will be one of the following strings:\n * - `american-express`\n * - `diners-club`\n * - `discover`\n * - `jcb`\n * - `maestro`\n * - `master-card`\n * - `unionpay`\n * - `visa`\n * @property {string} niceType The pretty-printed card type. It will be one of the following strings:\n * - `American Express`\n * - `Diners Club`\n * - `Discover`\n * - `JCB`\n * - `Maestro`\n * - `MasterCard`\n * - `UnionPay`\n * - `Visa`\n * @property {object} code\n * This object contains data relevant to the security code requirements of the card brand.\n * For example, on a Visa card there will be a <code>CVV</code> of 3 digits, whereas an\n * American Express card requires a 4-digit <code>CID</code>.\n * @property {string} code.name <code>\"CVV\"</code> <code>\"CID\"</code> <code>\"CVC\"</code>\n * @property {number} code.size The expected length of the security code. Typically, this is 3 or 4.\n */\n\n/**\n * @name HostedFields#on\n * @function\n * @param {string} event The name of the event to which you are subscribing.\n * @param {function} handler A callback to handle the event.\n * @description Subscribes a handler function to a named event.\n *\n * **Events that emit a {@link HostedFields~stateObject|stateObject}.**\n * * {@link HostedFields#event:blur|blur}\n * * {@link HostedFields#event:focus|focus}\n * * {@link HostedFields#event:empty|empty}\n * * {@link HostedFields#event:notEmpty|notEmpty}\n * * {@link HostedFields#event:cardTypeChange|cardTypeChange}\n * * {@link HostedFields#event:validityChange|validityChange}\n * * {@link HostedFields#event:inputSubmitRequest|inputSubmitRequest}\n *\n * **Other Events**\n * * {@link HostedFields#event:binAvailable|binAvailable} - emits a {@link HostedFields~binPayload|bin payload}. Note: If you are using a [Referrer-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) header that prevents the origin from being sent, this event will not fire.\n * @example\n * <caption>Listening to a Hosted Field event, in this case 'focus'</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('focus', function (event) {\n *     console.log(event.emittedBy, 'has been focused');\n *   });\n * });\n * @returns {void}\n */\n\n/**\n * @name HostedFields#off\n * @function\n * @param {string} event The name of the event to which you are unsubscribing.\n * @param {function} handler The callback for the event you are unsubscribing from.\n * @description Unsubscribes the handler function to a named event.\n * @example\n * <caption>Subscribing and then unsubscribing from a Hosted Field event, in this case 'focus'</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   var callback = function (event) {\n *     console.log(event.emittedBy, 'has been focused');\n *   };\n *   hostedFieldsInstance.on('focus', callback);\n *\n *   // later on\n *   hostedFieldsInstance.off('focus', callback);\n * });\n * @returns {void}\n */\n\n/**\n * This event is emitted when the user requests submission of an input field, such as by pressing the Enter or Return key on their keyboard, or mobile equivalent.\n * @event HostedFields#inputSubmitRequest\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Clicking a submit button upon hitting Enter (or equivalent) within a Hosted Field</caption>\n * var hostedFields = require('braintree-web/hosted-fields');\n * var submitButton = document.querySelector('input[type=\"submit\"]');\n *\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('inputSubmitRequest', function () {\n *     // User requested submission, e.g. by pressing Enter or equivalent\n *     submitButton.click();\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field transitions from having data to being empty.\n * @event HostedFields#empty\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to an empty event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('empty', function (event) {\n *     console.log(event.emittedBy, 'is now empty');\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field transitions from being empty to having data.\n * @event HostedFields#notEmpty\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to an notEmpty event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('notEmpty', function (event) {\n *     console.log(event.emittedBy, 'is now not empty');\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field loses focus.\n * @event HostedFields#blur\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a blur event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('blur', function (event) {\n *     console.log(event.emittedBy, 'lost focus');\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field gains focus.\n * @event HostedFields#focus\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a focus event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('focus', function (event) {\n *     console.log(event.emittedBy, 'gained focus');\n *   });\n * });\n */\n\n/**\n * This event is emitted when activity within the number field has changed such that the possible card type has changed.\n * @event HostedFields#cardTypeChange\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a cardTypeChange event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('cardTypeChange', function (event) {\n *     if (event.cards.length === 1) {\n *       console.log(event.cards[0].type);\n *     } else {\n *       console.log('Type of card not yet known');\n *     }\n *   });\n * });\n */\n\n/**\n * This event is emitted when the validity of a field has changed. Validity is represented in the {@link HostedFields~stateObject|stateObject} as two booleans: `isValid` and `isPotentiallyValid`.\n * @event HostedFields#validityChange\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a validityChange event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('validityChange', function (event) {\n *     var field = event.fields[event.emittedBy];\n *\n *     if (field.isValid) {\n *       console.log(event.emittedBy, 'is fully valid');\n *     } else if (field.isPotentiallyValid) {\n *       console.log(event.emittedBy, 'is potentially valid');\n *     } else {\n *       console.log(event.emittedBy, 'is not valid');\n *     }\n *   });\n * });\n */\n\n/**\n * This event is emitted when the first 6 digits of the card number have been entered by the customer.\n * @event HostedFields#binAvailable\n * @type {string}\n * @example\n * <caption>Listening to a `binAvailable` event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('binAvailable', function (event) {\n *     event.bin // send bin to 3rd party bin service\n *   });\n * });\n */\n\nfunction createInputEventHandler(fields) {\n  return function (eventData) {\n    var field;\n    var merchantPayload = eventData.merchantPayload;\n    var emittedBy = merchantPayload.emittedBy;\n    var container = fields[emittedBy].containerElement;\n\n    Object.keys(merchantPayload.fields).forEach(function (key) {\n      merchantPayload.fields[key].container = fields[key].containerElement;\n    });\n\n    field = merchantPayload.fields[emittedBy];\n\n    classList.toggle(\n      container,\n      constants.externalClasses.FOCUSED,\n      field.isFocused\n    );\n    classList.toggle(container, constants.externalClasses.VALID, field.isValid);\n    classList.toggle(\n      container,\n      constants.externalClasses.INVALID,\n      !field.isPotentiallyValid\n    );\n\n    // eslint-disable-next-line no-invalid-this\n    this._state = {\n      cards: merchantPayload.cards,\n      fields: merchantPayload.fields,\n    };\n\n    this._emit(eventData.type, merchantPayload); // eslint-disable-line no-invalid-this\n  };\n}\n\nfunction isVisibleEnough(node) {\n  var boundingBox = node.getBoundingClientRect();\n  var verticalMidpoint = Math.floor(boundingBox.height / 2);\n  var horizontalMidpoint = Math.floor(boundingBox.width / 2);\n\n  return (\n    boundingBox.top <\n      (window.innerHeight - verticalMidpoint ||\n        document.documentElement.clientHeight - verticalMidpoint) &&\n    boundingBox.right > horizontalMidpoint &&\n    boundingBox.bottom > verticalMidpoint &&\n    boundingBox.left <\n      (window.innerWidth - horizontalMidpoint ||\n        document.documentElement.clientWidth - horizontalMidpoint)\n  );\n}\n\n/**\n * @class HostedFields\n * @param {object} options The Hosted Fields {@link module:braintree-web/hosted-fields.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/hosted-fields.create|braintree-web.hosted-fields.create} instead.</strong>\n * @classdesc This class represents a Hosted Fields component produced by {@link module:braintree-web/hosted-fields.create|braintree-web/hosted-fields.create}. Instances of this class have methods for interacting with the input fields within Hosted Fields' iframes.\n */\nfunction HostedFields(options) {\n  var failureTimeout, clientConfig, assetsUrl, isDebug, hostedFieldsUrl;\n  var self = this;\n  var fields = {};\n  var frameReadyPromiseResolveFunctions = {};\n  var frameReadyPromises = [];\n  var componentId = uuid();\n\n  this._merchantConfigurationOptions = assign({}, options);\n\n  if (options.client) {\n    clientConfig = options.client.getConfiguration();\n    assetsUrl = clientConfig.gatewayConfiguration.assetsUrl;\n    isDebug = clientConfig.isDebug;\n  } else {\n    assetsUrl = createAssetsUrl.create(options.authorization);\n    isDebug = Boolean(options.isDebug);\n  }\n\n  this._clientPromise = createDeferredClient.create({\n    client: options.client,\n    authorization: options.authorization,\n    debug: isDebug,\n    assetsUrl: assetsUrl,\n    name: \"Hosted Fields\",\n  });\n\n  hostedFieldsUrl = composeUrl(assetsUrl, componentId, isDebug);\n\n  if (!options.fields || Object.keys(options.fields).length === 0) {\n    throw new BraintreeError({\n      type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type,\n      code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code,\n      message: \"options.fields is required when instantiating Hosted Fields.\",\n    });\n  }\n\n  EventEmitter.call(this);\n\n  this._injectedNodes = [];\n  this._destructor = new Destructor();\n  this._fields = fields;\n  this._state = {\n    fields: {},\n    cards: getCardTypes(\"\"),\n  };\n\n  this._bus = new Bus({\n    channel: componentId,\n    verifyDomain: isVerifiedDomain,\n    targetFrames: [],\n  });\n\n  this._destructor.registerFunctionForTeardown(function () {\n    self._bus.teardown();\n  });\n\n  // NEXT_MAJOR_VERSION analytics events should have present tense verbs\n  if (!options.client) {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"custom.hosted-fields.initialized.deferred-client\"\n    );\n  } else {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"custom.hosted-fields.initialized\"\n    );\n  }\n\n  Object.keys(options.fields).forEach(\n    function (key) {\n      var field, externalContainer, internalContainer, frame, frameReadyPromise;\n\n      if (!constants.allowedFields.hasOwnProperty(key)) {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_INVALID_FIELD_KEY.type,\n          code: errors.HOSTED_FIELDS_INVALID_FIELD_KEY.code,\n          message: '\"' + key + '\" is not a valid field.',\n        });\n      }\n\n      field = options.fields[key];\n      // NEXT_MAJOR_VERSION remove selector as an option\n      // and simply make the API take a container\n      externalContainer = field.container || field.selector;\n\n      if (typeof externalContainer === \"string\") {\n        externalContainer = document.querySelector(externalContainer);\n      }\n\n      if (!externalContainer || externalContainer.nodeType !== 1) {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.type,\n          code: errors.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.code,\n          message: errors.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.message,\n          details: {\n            fieldSelector: field.selector,\n            fieldContainer: field.container,\n            fieldKey: key,\n          },\n        });\n      } else if (\n        externalContainer.querySelector('iframe[name^=\"braintree-\"]')\n      ) {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.type,\n          code: errors.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.code,\n          message: errors.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.message,\n          details: {\n            fieldSelector: field.selector,\n            fieldContainer: field.container,\n            fieldKey: key,\n          },\n        });\n      }\n\n      internalContainer = externalContainer;\n\n      if (shadow.isShadowElement(internalContainer)) {\n        internalContainer = shadow.transformToSlot(\n          internalContainer,\n          \"height: 100%\"\n        );\n      }\n\n      if (field.maxlength && typeof field.maxlength !== \"number\") {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,\n          code: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,\n          message: \"The value for maxlength must be a number.\",\n          details: {\n            fieldKey: key,\n          },\n        });\n      }\n\n      if (field.minlength && typeof field.minlength !== \"number\") {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,\n          code: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,\n          message: \"The value for minlength must be a number.\",\n          details: {\n            fieldKey: key,\n          },\n        });\n      }\n\n      frame = iFramer({\n        type: key,\n        name: \"braintree-hosted-field-\" + key,\n        style: constants.defaultIFrameStyle,\n        title:\n          field.iframeTitle ||\n          \"Secure Credit Card Frame - \" + constants.allowedFields[key].label,\n      });\n      this._bus.addTargetFrame(frame);\n\n      this._injectedNodes.push.apply(\n        this._injectedNodes,\n        injectFrame(componentId, frame, internalContainer, function () {\n          self.focus(key);\n        })\n      );\n\n      this._setupLabelFocus(key, externalContainer);\n      fields[key] = {\n        frameElement: frame,\n        containerElement: externalContainer,\n      };\n      frameReadyPromise = new Promise(function (resolve) {\n        frameReadyPromiseResolveFunctions[key] = resolve;\n      });\n      frameReadyPromises.push(frameReadyPromise);\n\n      this._state.fields[key] = {\n        isEmpty: true,\n        isValid: false,\n        isPotentiallyValid: true,\n        isFocused: false,\n        container: externalContainer,\n      };\n\n      setTimeout(function () {\n        // Edge has an intermittent issue where\n        // the iframes load, but the JavaScript\n        // can't message out to the parent page.\n        // We can fix this by setting the src\n        // to about:blank first followed by\n        // the actual source. Both instances\n        // of setting the src need to be in a\n        // setTimeout to work.\n        if (browserDetection.isIE() || browserDetection.isEdge()) {\n          frame.src = \"about:blank\";\n          setTimeout(function () {\n            frame.src = hostedFieldsUrl;\n          }, 0);\n        } else {\n          frame.src = hostedFieldsUrl;\n        }\n      }, 0);\n    }.bind(this)\n  );\n\n  if (this._merchantConfigurationOptions.styles) {\n    Object.keys(this._merchantConfigurationOptions.styles).forEach(function (\n      selector\n    ) {\n      var className = self._merchantConfigurationOptions.styles[selector];\n\n      if (typeof className === \"string\") {\n        self._merchantConfigurationOptions.styles[selector] =\n          getStylesFromClass(className);\n      }\n    });\n  }\n\n  this._bus.on(events.REMOVE_FOCUS_INTERCEPTS, function (data) {\n    destroyFocusIntercept(data && data.id);\n  });\n\n  this._bus.on(\n    events.TRIGGER_FOCUS_CHANGE,\n    focusChange.createFocusChangeHandler(componentId, {\n      onRemoveFocusIntercepts: function (element) {\n        self._bus.emit(events.REMOVE_FOCUS_INTERCEPTS, {\n          id: element,\n        });\n      },\n      onTriggerInputFocus: function (targetType) {\n        self.focus(targetType);\n      },\n    })\n  );\n\n  this._bus.on(events.READY_FOR_CLIENT, function (reply) {\n    self._clientPromise.then(function (client) {\n      reply(client);\n    });\n  });\n\n  this._bus.on(events.CARD_FORM_ENTRY_HAS_BEGUN, function () {\n    analytics.sendEvent(self._clientPromise, \"hosted-fields.input.started\");\n  });\n\n  this._bus.on(events.BIN_AVAILABLE, function (bin) {\n    self._emit(\"binAvailable\", {\n      bin: bin,\n    });\n  });\n\n  failureTimeout = setTimeout(function () {\n    analytics.sendEvent(\n      self._clientPromise,\n      \"custom.hosted-fields.load.timed-out\"\n    );\n    self._emit(\"timeout\");\n  }, INTEGRATION_TIMEOUT_MS);\n\n  Promise.all(frameReadyPromises).then(function (results) {\n    var reply = results[0];\n\n    clearTimeout(failureTimeout);\n    reply(\n      formatMerchantConfigurationForIframes(self._merchantConfigurationOptions)\n    );\n\n    self._cleanUpFocusIntercepts();\n\n    self._emit(\"ready\");\n  });\n\n  this._bus.on(events.FRAME_READY, function (data, reply) {\n    frameReadyPromiseResolveFunctions[data.field](reply);\n  });\n\n  this._bus.on(events.INPUT_EVENT, createInputEventHandler(fields).bind(this));\n\n  this._destructor.registerFunctionForTeardown(function () {\n    var j, node, parent;\n\n    for (j = 0; j < self._injectedNodes.length; j++) {\n      node = self._injectedNodes[j];\n      parent = node.parentNode;\n\n      parent.removeChild(node);\n\n      classList.remove(\n        parent,\n        constants.externalClasses.FOCUSED,\n        constants.externalClasses.INVALID,\n        constants.externalClasses.VALID\n      );\n    }\n  });\n\n  this._destructor.registerFunctionForTeardown(function () {\n    destroyFocusIntercept();\n  });\n\n  this._destructor.registerFunctionForTeardown(function () {\n    var methodNames = methods(HostedFields.prototype).concat(\n      methods(EventEmitter.prototype)\n    );\n\n    convertMethodsToError(self, methodNames);\n  });\n}\n\nEventEmitter.createChild(HostedFields);\n\nHostedFields.prototype._setupLabelFocus = function (type, container) {\n  var labels, i;\n  var self = this;\n  var rootNode = findRootNode(container);\n\n  if (container.id == null) {\n    return;\n  }\n\n  function triggerFocus() {\n    self.focus(type);\n  }\n\n  // find any labels in the normal DOM\n  labels = Array.prototype.slice.call(\n    document.querySelectorAll('label[for=\"' + container.id + '\"]')\n  );\n  if (rootNode !== document) {\n    // find any labels within the shadow dom\n    labels = labels.concat(\n      Array.prototype.slice.call(\n        rootNode.querySelectorAll('label[for=\"' + container.id + '\"]')\n      )\n    );\n  }\n  // find any labels surrounding the container that don't also have the `for` attribute\n  labels = labels.concat(findParentTags(container, \"label\"));\n  // filter out any accidental duplicates\n  labels = labels.filter(function (label, index, arr) {\n    return arr.indexOf(label) === index;\n  });\n\n  for (i = 0; i < labels.length; i++) {\n    labels[i].addEventListener(\"click\", triggerFocus, false);\n  }\n\n  this._destructor.registerFunctionForTeardown(function () {\n    for (i = 0; i < labels.length; i++) {\n      labels[i].removeEventListener(\"click\", triggerFocus, false);\n    }\n  });\n};\n\nHostedFields.prototype._getAnyFieldContainer = function () {\n  var self = this;\n\n  return Object.keys(this._fields).reduce(function (found, field) {\n    return found || self._fields[field].containerElement;\n  }, null);\n};\n\nHostedFields.prototype._cleanUpFocusIntercepts = function () {\n  var iframeContainer, checkoutForm;\n\n  if (document.forms.length < 1) {\n    this._bus.emit(events.REMOVE_FOCUS_INTERCEPTS);\n  } else {\n    iframeContainer = this._getAnyFieldContainer();\n    checkoutForm = findParentTags(iframeContainer, \"form\")[0];\n\n    if (checkoutForm) {\n      focusChange.removeExtraFocusElements(\n        checkoutForm,\n        function (id) {\n          this._bus.emit(events.REMOVE_FOCUS_INTERCEPTS, {\n            id: id,\n          });\n        }.bind(this)\n      );\n    } else {\n      this._bus.emit(events.REMOVE_FOCUS_INTERCEPTS);\n    }\n  }\n};\n\nHostedFields.prototype._attachInvalidFieldContainersToError = function (err) {\n  if (\n    !(\n      err.details &&\n      err.details.invalidFieldKeys &&\n      err.details.invalidFieldKeys.length > 0\n    )\n  ) {\n    return;\n  }\n  err.details.invalidFields = {};\n  err.details.invalidFieldKeys.forEach(\n    function (field) {\n      err.details.invalidFields[field] = this._fields[field].containerElement;\n    }.bind(this)\n  );\n};\n\n/**\n * Get card verification challenges, such as requirements for cvv and postal code.\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. If no callback is provided, `getChallenges` returns a promise.\n * @example\n * hostedFieldsInstance.getChallenges().then(function (challenges) {\n *   challenges // ['cvv', 'postal_code']\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.getChallenges = function () {\n  return this._clientPromise.then(function (client) {\n    return client.getConfiguration().gatewayConfiguration.challenges;\n  });\n};\n\n/**\n * Get supported card types configured in the Braintree Control Panel\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. If no callback is provided, `getSupportedCardTypes` returns a promise.\n * @example\n * hostedFieldsInstance.getSupportedCardTypes().then(function (cardTypes) {\n *   cardTypes // ['Visa', 'American Express', 'Mastercard']\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.getSupportedCardTypes = function () {\n  return this._clientPromise.then(function (client) {\n    var cards = client\n      .getConfiguration()\n      .gatewayConfiguration.creditCards.supportedCardTypes.map(function (\n        cardType\n      ) {\n        if (cardType === \"MasterCard\") {\n          // Mastercard changed their branding. We can't update our\n          // config without creating a breaking change, so we just\n          // hard code the change here\n          return \"Mastercard\";\n        }\n\n        return cardType;\n      });\n\n    return cards;\n  });\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/hosted-fields.create|create}.\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. No data is returned if teardown completes successfully. If no callback is provided, `teardown` returns a promise.\n * @example\n * hostedFieldsInstance.teardown(function (teardownErr) {\n *   if (teardownErr) {\n *     console.error('Could not tear down Hosted Fields!');\n *   } else {\n *     console.info('Hosted Fields has been torn down!');\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.teardown = function () {\n  var self = this;\n\n  return new Promise(function (resolve, reject) {\n    self._destructor.teardown(function (err) {\n      analytics.sendEvent(\n        self._clientPromise,\n        \"custom.hosted-fields.teardown-completed\"\n      );\n\n      if (err) {\n        reject(err);\n      } else {\n        resolve();\n      }\n    });\n  });\n};\n\n/**\n * Tokenizes fields and returns a nonce payload.\n * @public\n * @param {object} [options] All tokenization options for the Hosted Fields component.\n * @param {boolean} [options.vault=false] When true, will vault the tokenized card. Cards will only be vaulted when using a client created with a client token that includes a customer ID. Note: merchants using Advanced Fraud Tools should not use this option, as device data will not be included.\n * @param {object} [options.authenticationInsight] Options for checking authentication insight - the [regulatory environment](https://developer.paypal.com/braintree/docs/guides/3d-secure/advanced-options/javascript/v3#authentication-insight) of the tokenized card.\n * @param {string} options.authenticationInsight.merchantAccountId The Braintree merchant account id to use to look up the authentication insight information.\n * @param {array} [options.fieldsToTokenize] By default, all fields will be tokenized. You may specify which fields specifically you wish to tokenize with this property. Valid options are `'number'`, `'cvv'`, `'expirationDate'`, `'expirationMonth'`, `'expirationYear'`, `'postalCode'`, `'cardholderName'`.\n * @param {string} [options.cardholderName] When supplied, the cardholder name to be tokenized with the contents of the fields.\n * @param {string} [options.billingAddress.postalCode] When supplied, this postal code will be tokenized along with the contents of the fields. If a postal code is provided as part of the Hosted Fields configuration, the value of the field will be tokenized and this value will be ignored.\n * @param {string} [options.billingAddress.firstName] When supplied, this customer first name will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.lastName] When supplied, this customer last name will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.company] When supplied, this company name will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.streetAddress] When supplied, this street address will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.extendedAddress] When supplied, this extended address will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.locality] When supplied, this locality (the city) will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.region] When supplied, this region (the state) will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryCodeNumeric] When supplied, this numeric country code will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryCodeAlpha2] When supplied, this alpha 2 representation of a country will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryCodeAlpha3] When supplied, this alpha 3 representation of a country will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryName] When supplied, this country name will be tokenized along with the contents of the fields.\n *\n * @param {callback} [callback] May be used as the only parameter of the function if no options are passed in. The second argument, <code>data</code>, is a {@link HostedFields~tokenizePayload|tokenizePayload}. If no callback is provided, `tokenize` returns a function that resolves with a {@link HostedFields~tokenizePayload|tokenizePayload}.\n * @example <caption>Tokenize a card</caption>\n * hostedFieldsInstance.tokenize(function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     switch (tokenizeErr.code) {\n *       case 'HOSTED_FIELDS_FIELDS_EMPTY':\n *         // occurs when none of the fields are filled in\n *         console.error('All fields are empty! Please fill out the form.');\n *         break;\n *       case 'HOSTED_FIELDS_FIELDS_INVALID':\n *         // occurs when certain fields do not pass client side validation\n *         console.error('Some fields are invalid:', tokenizeErr.details.invalidFieldKeys);\n *\n *         // you can also programmatically access the field containers for the invalid fields\n *         tokenizeErr.details.invalidFields.forEach(function (fieldContainer) {\n *           fieldContainer.className = 'invalid';\n *         });\n *         break;\n *       case 'HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE':\n *         // occurs when:\n *         //   * the client token used for client authorization was generated\n *         //     with a customer ID and the fail on duplicate payment method\n *         //     option is set to true\n *         //   * the card being tokenized has previously been vaulted (with any customer)\n *         // See: https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#options.fail_on_duplicate_payment_method\n *         console.error('This payment method already exists in your vault.');\n *         break;\n *       case 'HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED':\n *         // occurs when:\n *         //   * the client token used for client authorization was generated\n *         //     with a customer ID and the verify card option is set to true\n *         //     and you have credit card verification turned on in the Braintree\n *         //     control panel\n *         //   * the cvv does not pass verification (https://developer.paypal.com/braintree/docs/reference/general/testing#avs-and-cvv/cid-responses)\n *         // See: https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#options.verify_card\n *         console.error('CVV did not pass verification');\n *         break;\n *       case 'HOSTED_FIELDS_FAILED_TOKENIZATION':\n *         // occurs for any other tokenization error on the server\n *         console.error('Tokenization failed server side. Is the card valid?');\n *         break;\n *       case 'HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR':\n *         // occurs when the Braintree gateway cannot be contacted\n *         console.error('Network error occurred when tokenizing.');\n *         break;\n *       default:\n *         console.error('Something bad happened!', tokenizeErr);\n *     }\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize and vault a card</caption>\n * hostedFieldsInstance.tokenize({\n *   vault: true\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize a card with non-Hosted Fields cardholder name</caption>\n * hostedFieldsInstance.tokenize({\n *   cardholderName: 'First Last'\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize a card with non-Hosted Fields postal code option</caption>\n * hostedFieldsInstance.tokenize({\n *   billingAddress: {\n *     postalCode: '11111'\n *   }\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize a card with additional billing address options</caption>\n * hostedFieldsInstance.tokenize({\n *   billingAddress: {\n *     firstName: 'First',\n *     lastName: 'Last',\n *     company: 'Company',\n *     streetAddress: '123 Street',\n *     extendedAddress: 'Unit 1',\n *     // passing just one of the country options is sufficient to\n *     // associate the card details with a particular country\n *     // valid country names and codes can be found here:\n *     // https://developer.paypal.com/braintree/docs/reference/general/countries/ruby#list-of-countries\n *     countryName: 'United States',\n *     countryCodeAlpha2: 'US',\n *     countryCodeAlpha3: 'USA',\n *     countryCodeNumeric: '840'\n *   }\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Allow tokenization with empty cardholder name field</caption>\n * var state = hostedFieldsInstance.getState();\n * var fields = Object.keys(state.fields);\n *\n * // normally, if you tried to tokenize an empty cardholder name field\n * // you would get an error, to allow making this field optional,\n * // tokenize all the fields except for the cardholder name field\n * // when the cardholder name field is empty. Otherwise, tokenize\n * // all the fields\n * if (state.fields.cardholderName.isEmpty) {\n *  fields = fields.filter(function (field) {\n *    return field !== 'cardholderName';\n *  });\n * }\n *\n * hostedFieldsInstance.tokenize({\n *  fieldsToTokenize: fields\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.tokenize = function (options) {\n  var self = this;\n\n  if (!options) {\n    options = {};\n  }\n\n  return new Promise(function (resolve, reject) {\n    self._bus.emit(events.TOKENIZATION_REQUEST, options, function (response) {\n      var err = response[0];\n      var payload = response[1];\n\n      if (err) {\n        self._attachInvalidFieldContainersToError(err);\n        reject(new BraintreeError(err));\n      } else {\n        resolve(payload);\n      }\n    });\n  });\n};\n\n/**\n * Add a class to a {@link module:braintree-web/hosted-fields~field field}. Useful for updating field styles when events occur elsewhere in your checkout.\n * @public\n * @param {string} field The field you wish to add a class to. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} classname The class to be added.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the class is added successfully.\n *\n * @example\n * hostedFieldsInstance.addClass('number', 'custom-class', function (addClassErr) {\n *   if (addClassErr) {\n *     console.error(addClassErr);\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.addClass = function (field, classname) {\n  var err;\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when adding a class.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot add class to \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    this._bus.emit(events.ADD_CLASS, {\n      field: field,\n      classname: classname,\n    });\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Removes a class to a {@link module:braintree-web/hosted-fields~field field}. Useful for updating field styles when events occur elsewhere in your checkout.\n * @public\n * @param {string} field The field you wish to remove a class from. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} classname The class to be removed.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the class is removed successfully.\n *\n * @example\n * hostedFieldsInstance.addClass('number', 'custom-class', function (addClassErr) {\n *   if (addClassErr) {\n *     console.error(addClassErr);\n *     return;\n *   }\n *\n *   // some time later...\n *   hostedFieldsInstance.removeClass('number', 'custom-class');\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.removeClass = function (field, classname) {\n  var err;\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when removing a class.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot remove class from \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    this._bus.emit(events.REMOVE_CLASS, {\n      field: field,\n      classname: classname,\n    });\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Sets an attribute of a {@link module:braintree-web/hosted-fields~field field}.\n * Supported attributes are `aria-invalid`, `aria-required`, `disabled`, and `placeholder`.\n *\n * @public\n * @param {object} options The options for the attribute you wish to set.\n * @param {string} options.field The field to which you wish to add an attribute. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} options.attribute The name of the attribute you wish to add to the field.\n * @param {string} options.value The value for the attribute.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the attribute is set successfully.\n *\n * @example <caption>Set the placeholder attribute of a field</caption>\n * hostedFieldsInstance.setAttribute({\n *   field: 'number',\n *   attribute: 'placeholder',\n *   value: '1111 1111 1111 1111'\n * }, function (attributeErr) {\n *   if (attributeErr) {\n *     console.error(attributeErr);\n *   }\n * });\n *\n * @example <caption>Set the aria-required attribute of a field</caption>\n * hostedFieldsInstance.setAttribute({\n *   field: 'number',\n *   attribute: 'aria-required',\n *   value: true\n * }, function (attributeErr) {\n *   if (attributeErr) {\n *     console.error(attributeErr);\n *   }\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.setAttribute = function (options) {\n  var attributeErr, err;\n\n  if (!allowedFields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        options.field +\n        '\" is not a valid field. You must use a valid field option when setting an attribute.',\n    });\n  } else if (!this._fields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot set attribute for \"' +\n        options.field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    attributeErr = attributeValidationError(options.attribute, options.value);\n\n    if (attributeErr) {\n      err = attributeErr;\n    } else {\n      this._bus.emit(events.SET_ATTRIBUTE, {\n        field: options.field,\n        attribute: options.attribute,\n        value: options.value,\n      });\n    }\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Sets the month options for the expiration month field when presented as a select element.\n *\n * @public\n * @param {array} options An array of 12 entries corresponding to the 12 months.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the options are updated successfully. Errors if expirationMonth is not configured on the Hosted Fields instance or if the expirationMonth field is not configured to be a select input.\n *\n * @example <caption>Update the month options to spanish</caption>\n * hostedFieldsInstance.setMonthOptions([\n *   '01 - enero',\n *   '02 - febrero',\n *   '03 - marzo',\n *   '04 - abril',\n *   '05 - mayo',\n *   '06 - junio',\n *   '07 - julio',\n *   '08 - agosto',\n *   '09 - septiembre',\n *   '10 - octubre',\n *   '11 - noviembre',\n *   '12 - diciembre'\n * ]);\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.setMonthOptions = function (options) {\n  var self = this;\n  var merchantOptions = this._merchantConfigurationOptions.fields;\n  var errorMessage;\n\n  if (!merchantOptions.expirationMonth) {\n    errorMessage = \"Expiration month field must exist to use setMonthOptions.\";\n  } else if (!merchantOptions.expirationMonth.select) {\n    errorMessage = \"Expiration month field must be a select element.\";\n  }\n\n  if (errorMessage) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,\n        code: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,\n        message: errorMessage,\n      })\n    );\n  }\n\n  return new Promise(function (resolve) {\n    self._bus.emit(events.SET_MONTH_OPTIONS, options, resolve);\n  });\n};\n\n/**\n * Sets a visually hidden message (for screen readers) on a {@link module:braintree-web/hosted-fields~field field}.\n *\n * @public\n * @param {object} options The options for the attribute you wish to set.\n * @param {string} options.field The field to which you wish to add an attribute. Must be a valid {@link module:braintree-web/hosted-fields~field field}.\n * @param {string} options.message The message to set.\n *\n * @example <caption>Set an error message on a field</caption>\n * hostedFieldsInstance.setMessage({\n *   field: 'number',\n *   message: 'Invalid card number'\n * });\n *\n * @example <caption>Remove the message on a field</caption>\n * hostedFieldsInstance.setMessage({\n *   field: 'number',\n *   message: ''\n * });\n *\n * @returns {void}\n */\nHostedFields.prototype.setMessage = function (options) {\n  this._bus.emit(events.SET_MESSAGE, {\n    field: options.field,\n    message: options.message,\n  });\n};\n\n/**\n * Removes a supported attribute from a {@link module:braintree-web/hosted-fields~field field}.\n *\n * @public\n * @param {object} options The options for the attribute you wish to remove.\n * @param {string} options.field The field from which you wish to remove an attribute. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} options.attribute The name of the attribute you wish to remove from the field.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the attribute is removed successfully.\n *\n * @example <caption>Remove the placeholder attribute of a field</caption>\n * hostedFieldsInstance.removeAttribute({\n *   field: 'number',\n *   attribute: 'placeholder'\n * }, function (attributeErr) {\n *   if (attributeErr) {\n *     console.error(attributeErr);\n *   }\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.removeAttribute = function (options) {\n  var attributeErr, err;\n\n  if (!allowedFields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        options.field +\n        '\" is not a valid field. You must use a valid field option when removing an attribute.',\n    });\n  } else if (!this._fields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot remove attribute for \"' +\n        options.field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    attributeErr = attributeValidationError(options.attribute);\n\n    if (attributeErr) {\n      err = attributeErr;\n    } else {\n      this._bus.emit(events.REMOVE_ATTRIBUTE, {\n        field: options.field,\n        attribute: options.attribute,\n      });\n    }\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * @deprecated since version 3.8.0. Use {@link HostedFields#setAttribute|setAttribute} instead.\n *\n * @public\n * @param {string} field The field whose placeholder you wish to change. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} placeholder Will be used as the `placeholder` attribute of the input.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the placeholder updated successfully.\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.setPlaceholder = function (field, placeholder) {\n  return this.setAttribute({\n    field: field,\n    attribute: \"placeholder\",\n    value: placeholder,\n  });\n};\n\n/**\n * Clear the value of a {@link module:braintree-web/hosted-fields~field field}.\n * @public\n * @param {string} field The field you wish to clear. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the field cleared successfully.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * hostedFieldsInstance.clear('number', function (clearErr) {\n *   if (clearErr) {\n *     console.error(clearErr);\n *   }\n * });\n *\n * @example <caption>Clear several fields</caption>\n * hostedFieldsInstance.clear('number');\n * hostedFieldsInstance.clear('cvv');\n * hostedFieldsInstance.clear('expirationDate');\n */\nHostedFields.prototype.clear = function (field) {\n  var err;\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when clearing a field.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot clear \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    this._bus.emit(events.CLEAR_FIELD, {\n      field: field,\n    });\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Programmatically focus a {@link module:braintree-web/hosted-fields~field field}.\n * @public\n * @param {string} field The field you want to focus. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the field focused successfully.\n * @returns {void}\n * @example\n * hostedFieldsInstance.focus('number', function (focusErr) {\n *   if (focusErr) {\n *     console.error(focusErr);\n *   }\n * });\n * @example <caption>Using an event listener</caption>\n * myElement.addEventListener('click', function (e) {\n *   // In Firefox, the focus method can be suppressed\n *   //   if the element has a tabindex property or the element\n *   //   is an anchor link with an href property.\n *   e.preventDefault();\n *   hostedFieldsInstance.focus('number');\n * });\n */\nHostedFields.prototype.focus = function (field) {\n  var err;\n  var fieldConfig = this._fields[field];\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when focusing a field.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot focus \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    fieldConfig.frameElement.focus();\n\n    this._bus.emit(events.TRIGGER_INPUT_FOCUS, {\n      field: field,\n    });\n\n    if (browserDetection.isIos()) {\n      // Inputs outside of the viewport don't always scroll into view on\n      // focus in iOS Safari. 5ms timeout gives the browser a chance to\n      // do the right thing and prevents stuttering.\n      setTimeout(function () {\n        if (!isVisibleEnough(fieldConfig.containerElement)) {\n          fieldConfig.containerElement.scrollIntoView();\n        }\n      }, SAFARI_FOCUS_TIMEOUT);\n    }\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Returns an {@link HostedFields~stateObject|object} that includes the state of all fields and possible card types.\n * @public\n * @returns {object} {@link HostedFields~stateObject|stateObject}\n * @example <caption>Check if all fields are valid</caption>\n * var state = hostedFieldsInstance.getState();\n *\n * var formValid = Object.keys(state.fields).every(function (key) {\n *   return state.fields[key].isValid;\n * });\n */\nHostedFields.prototype.getState = function () {\n  return this._state;\n};\n\n// React adds decorations to DOM nodes that cause\n// circular dependencies, so we remove them from the\n// config before sending it to the iframes. However,\n// we don't want to mutate the original object that\n// was passed in, so we create fresh objects via assign\nfunction formatMerchantConfigurationForIframes(config) {\n  var formattedConfig = assign({}, config);\n\n  formattedConfig.fields = assign({}, formattedConfig.fields);\n  Object.keys(formattedConfig.fields).forEach(function (field) {\n    formattedConfig.fields[field] = assign({}, formattedConfig.fields[field]);\n    delete formattedConfig.fields[field].container;\n  });\n\n  return formattedConfig;\n}\n\nmodule.exports = wrapPromise.wrapPrototype(HostedFields);\n\n},{\"../../lib/analytics\":94,\"../../lib/assign\":96,\"../../lib/braintree-error\":99,\"../../lib/constants\":100,\"../../lib/convert-methods-to-error\":101,\"../../lib/create-assets-url\":103,\"../../lib/create-deferred-client\":105,\"../../lib/destructor\":107,\"../../lib/errors\":109,\"../../lib/find-root-node\":110,\"../../lib/is-verified-domain\":127,\"../../lib/methods\":129,\"../../lib/promise\":131,\"../../lib/shadow\":133,\"../shared/browser-detection\":87,\"../shared/constants\":88,\"../shared/errors\":89,\"../shared/find-parent-tags\":90,\"../shared/focus-intercept\":91,\"../shared/get-card-types\":92,\"./attribute-validation-error\":80,\"./compose-url\":81,\"./focus-change\":82,\"./get-styles-from-class\":83,\"./inject-frame\":85,\"@braintree/class-list\":40,\"@braintree/event-emitter\":41,\"@braintree/iframer\":43,\"@braintree/uuid\":47,\"@braintree/wrap-promise\":51,\"framebus\":176}],85:[function(require,module,exports){\n\"use strict\";\n\nvar focusIntercept = require(\"../shared/focus-intercept\");\nvar directions = require(\"../shared/constants\").navigationDirections;\n\nmodule.exports = function injectFrame(id, frame, container, focusHandler) {\n  var frameType = frame.getAttribute(\"type\");\n  var clearboth = document.createElement(\"div\");\n  var fragment = document.createDocumentFragment();\n  var focusInterceptBefore = focusIntercept.generate(\n    id,\n    frameType,\n    directions.BACK,\n    focusHandler\n  );\n  var focusInterceptAfter = focusIntercept.generate(\n    id,\n    frameType,\n    directions.FORWARD,\n    focusHandler\n  );\n\n  clearboth.style.clear = \"both\";\n\n  fragment.appendChild(focusInterceptBefore);\n  fragment.appendChild(frame);\n  fragment.appendChild(focusInterceptAfter);\n  fragment.appendChild(clearboth);\n\n  container.appendChild(fragment);\n\n  return [frame, clearboth];\n};\n\n},{\"../shared/constants\":88,\"../shared/focus-intercept\":91}],86:[function(require,module,exports){\n\"use strict\";\n/** @module braintree-web/hosted-fields */\n\nvar HostedFields = require(\"./external/hosted-fields\");\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar errors = require(\"./shared/errors\");\nvar supportsInputFormatting = require(\"restricted-input/supports-input-formatting\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Promise = require(\"../lib/promise\");\nvar VERSION = \"3.88.3\";\n\n/**\n * Fields used in {@link module:braintree-web/hosted-fields~fieldOptions fields options}\n * @typedef {object} field\n * @property {string} selector Deprecated: Now an alias for `options.container`.\n * @property {(string|HTMLElement)} container A DOM node or CSS selector to find the container where the hosted field will be inserted.\n * @property {string} [placeholder] Will be used as the `placeholder` attribute of the input. If `placeholder` is not natively supported by the browser, it will be polyfilled.\n * @property {string} [type] Will be used as the `type` attribute of the input. To mask `cvv` input, for instance, `type: \"password\"` can be used.\n * @property {string} [iframeTitle] The title used for the iframe containing the credit card input. By default, this will be `Secure Credit Card Frame - <the name of the specific field>`.\n * @property {string} [internalLabel] Each Hosted Field iframe has a hidden label that is used by screen readers to identify the input. The `internalLabel` property can be used to customize the field for localization purposes. The default values are:\n * * number: Credit Card Number\n * * cvv: CVV\n * * expirationDate: Expiration Date\n * * expirationMonth: Expiration Month\n * * expirationYear: Expiration Year\n * * postalCode: Postal Code\n * * cardholderName: Cardholder Name\n * @property {boolean} [formatInput=true] Enable or disable automatic formatting on this field.\n * @property {(object|boolean)} [maskInput=false] Enable or disable input masking when input is not focused. If set to `true` instead of an object, the defaults for the `maskInput` parameters will be used.\n * @property {string} [maskInput.character=•] The character to use when masking the input. The default character ('•') uses a unicode symbol, so the webpage must support UTF-8 characters when using the default.\n * @property {Boolean} [maskInput.showLastFour=false] Only applicable for the credit card field. Whether or not to show the last 4 digits of the card when masking.\n * @property {(object|boolean)} [select] If truthy, this field becomes a `<select>` dropdown list. This can only be used for `expirationMonth` and `expirationYear` fields. If you do not use a `placeholder` property for the field, the current month/year will be the default selected value.\n * @property {string[]} [select.options] An array of 12 strings, one per month. This can only be used for the `expirationMonth` field. For example, the array can look like `['01 - January', '02 - February', ...]`.\n * @property {number} [maxCardLength] This option applies only to the number field. Allows a limit to the length of the card number, even if the card brand may support numbers of a greater length. If the value passed is greater than the max length for a card brand, the smaller number of the 2 values will be used. For example, is `maxCardLength` is set to 16, but an American Express card is entered (which has a max card length of 15), a max card length of 15 will be used.\n * @property {number} [maxlength] This option applies only to the CVV and postal code fields. Will be used as the `maxlength` attribute of the input. The primary use cases for the `maxlength` option are: limiting the length of the CVV input for CVV-only verifications when the card type is known and setting the length of the postal code input when cards are coming from a known region. The default `maxlength` for the postal code input is `10`.\n * @property {number} [minlength=3] This option applies only to the cvv and postal code fields. Will be used as the `minlength` attribute of the input.\n * For postal code fields, the default value is 3, representing the Icelandic postal code length. This option's primary use case is to increase the `minlength`, e.g. for US customers, the postal code `minlength` can be set to 5.\n * For cvv fields, the default value is 3. The `minlength` attribute only applies to integrations capturing a cvv without a number field.\n * @property {string} [prefill] A value to prefill the field with. For example, when creating an update card form, you can prefill the expiration date fields with the old expiration date data.\n * @property {boolean} [rejectUnsupportedCards=false] Deprecated since version 3.46.0, use `supportedCardBrands` instead. Only allow card types that your merchant account is able to process. Unsupported card types will invalidate the card form. e.g. if you only process Visa cards, a customer entering a American Express card would get an invalid card field. This can only be used for the `number` field.\n * @property {object} [supportedCardBrands] Override card brands that are supported by the card form. Pass `'card-brand-id': true` to override the default in the merchant configuration and enable a card brand. Pass `'card-brand-id': false` to disable a card brand. Unsupported card types will invalidate the card form. e.g. if you only process Visa cards, a customer entering an American Express card would get an invalid card field. This can only be used for the  `number` field. (Note: only allow card types that your merchant account is actually able to process.)\n *\n * Valid card brand ids are:\n * * visa\n * * mastercard\n * * american-express\n * * diners-club\n * * discover\n * * jcb\n * * union-pay\n * * maestro\n * * elo\n * * mir\n * * hiper\n * * hipercard\n */\n\n/**\n * An object that has {@link module:braintree-web/hosted-fields~field field objects} for each field. Used in {@link module:braintree-web/hosted-fields~create create}.\n * @typedef {object} fieldOptions\n * @property {field} [number] A field for card number.\n * @property {field} [expirationDate] A field for expiration date in `MM/YYYY` or `MM/YY` format. This should not be used with the `expirationMonth` and `expirationYear` properties.\n * @property {field} [expirationMonth] A field for expiration month in `MM` format. This should be used with the `expirationYear` property.\n * @property {field} [expirationYear] A field for expiration year in `YYYY` or `YY` format. This should be used with the `expirationMonth` property.\n * @property {field} [cvv] A field for 3 or 4 digit card verification code (like CVV or CID). If you wish to create a CVV-only payment method nonce to verify a card already stored in your Vault, omit all other fields to only collect CVV.\n * @property {field} [postalCode] A field for postal or region code.\n * @property {field} [cardholderName] A field for the cardholder name on the customer's credit card.\n */\n\n/**\n * An object that represents CSS that will be applied in each hosted field. This object looks similar to CSS. Typically, these styles involve fonts (such as `font-family` or `color`).\n *\n * You may also pass the name of a class on your site that contains the styles you would like to apply. The style properties will be automatically pulled off the class and applied to the Hosted Fields inputs. Note: this is recommended for `input` elements only. If using a `select` for the expiration date, unexpected styling may occur.\n *\n * These are the CSS properties that Hosted Fields supports. Any other CSS should be specified on your page and outside of any Braintree configuration. Trying to set unsupported properties will fail and put a warning in the console.\n *\n * Supported CSS properties are:\n * `appearance`\n * `box-shadow`\n * `color`\n * `direction`\n * `font-family`\n * `font-size-adjust`\n * `font-size`\n * `font-stretch`\n * `font-style`\n * `font-variant-alternates`\n * `font-variant-caps`\n * `font-variant-east-asian`\n * `font-variant-ligatures`\n * `font-variant-numeric`\n * `font-variant`\n * `font-weight`\n * `font`\n * `letter-spacing`\n * `line-height`\n * `opacity`\n * `outline`\n * `margin`\n * `margin-top`\n * `margin-right`\n * `margin-bottom`\n * `margin-left`\n * `padding`\n * `padding-top`\n * `padding-right`\n * `padding-bottom`\n * `padding-left`\n * `text-align`\n * `text-shadow`\n * `transition`\n * `-moz-appearance`\n * `-moz-box-shadow`\n * `-moz-osx-font-smoothing`\n * `-moz-tap-highlight-color`\n * `-moz-transition`\n * `-webkit-appearance`\n * `-webkit-box-shadow`\n * `-webkit-font-smoothing`\n * `-webkit-tap-highlight-color`\n * `-webkit-transition`\n * @typedef {object} styleOptions\n */\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {fieldOptions} options.fields A {@link module:braintree-web/hosted-fields~fieldOptions set of options for each field}.\n * @param {styleOptions} [options.styles] {@link module:braintree-web/hosted-fields~styleOptions Styles} applied to each field.\n * @param {boolean} [options.preventAutofill=false] When true, browsers will not try to prompt the customer to autofill their credit card information.\n * @param {callback} [callback] The second argument, `data`, is the {@link HostedFields} instance. If no callback is provided, `create` returns a promise that resolves with the {@link HostedFields} instance.\n * @returns {void}\n * @example\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   styles: {\n *     'input': {\n *       'font-size': '16pt',\n *       'color': '#3A3A3A'\n *     },\n *     '.number': {\n *       'font-family': 'monospace'\n *     },\n *     '.valid': {\n *       'color': 'green'\n *     }\n *   },\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '•••'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date'\n *     }\n *   }\n * }, callback);\n * @example <caption>With cardholder name</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     cardholderName: {\n *       container: '#cardholder-name'\n *     },\n *     cvv: {\n *       container: '#cvv',\n *     },\n *     expirationDate: {\n *       container: '#expiration-date'\n *     }\n *   }\n * }, callback);\n * @example <caption>Applying styles with a class name</caption>\n * // in document head\n * <style>\n *   .braintree-input-class {\n *     color: black;\n *   }\n *   .braintree-valid-class {\n *     color: green;\n *   }\n *   .braintree-invalid-class {\n *     color: red;\n *   }\n * </style>\n * // in a script tag\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   styles: {\n *     'input': 'braintree-input-class',\n *     '.invalid': 'braintree-invalid-class',\n *     '.valid': {\n *       // you can also use the object syntax alongside\n *       // the class name syntax\n *       color: green;\n *     }\n *   },\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     // etc...\n *   }\n * }, callback);\n * @example <caption>Right to Left Language Support</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   styles: {\n *     'input': {\n *       // other styles\n *       direction: 'rtl'\n *     },\n *   },\n *   fields: {\n *     number: {\n *       container: '#card-number',\n *       // Credit card formatting is not currently supported\n *       // with RTL languages, so we need to turn it off for the number input\n *       formatInput: false\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '•••'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date',\n *       type: 'month'\n *     }\n *   }\n * }, callback);\n * @example <caption>Setting up Hosted Fields to tokenize CVV only</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     // Only add the `cvv` option.\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '•••'\n *     }\n *   }\n * }, callback);\n * @example <caption>Creating an expiration date update form with prefilled data</caption>\n * var storedCreditCardInformation = {\n *   // get this info from your server\n *   // with a payment method lookup\n *   month: '09',\n *   year: '2017'\n * };\n *\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     expirationMonth: {\n *       container: '#expiration-month',\n *       prefill: storedCreditCardInformation.month\n *     },\n *     expirationYear: {\n *       container: '#expiration-year',\n *       prefill: storedCreditCardInformation.year\n *     }\n *   }\n * }, callback);\n * @example <caption>Validate the card form for supported card types</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     number: {\n *       container: '#card-number',\n *       supportedCardBrands: {\n *         visa: false, // prevents Visas from showing up as valid even when the Braintree control panel is configured to allow them\n *         'diners-club': true // allow Diners Club cards to be valid (processed as Discover cards on the Braintree backend)\n *       }\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '•••'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date',\n *       type: 'month'\n *     }\n *   },\n * }, callback);\n */\nfunction create(options) {\n  return basicComponentVerification\n    .verify({\n      name: \"Hosted Fields\",\n      authorization: options.authorization,\n      client: options.client,\n    })\n    .then(function () {\n      var integration = new HostedFields(options);\n\n      return new Promise(function (resolve, reject) {\n        integration.on(\"ready\", function () {\n          resolve(integration);\n        });\n        integration.on(\"timeout\", function () {\n          reject(new BraintreeError(errors.HOSTED_FIELDS_TIMEOUT));\n        });\n      });\n    });\n}\n\nmodule.exports = {\n  /**\n   * @static\n   * @function supportsInputFormatting\n   * @description Returns false if input formatting will be automatically disabled due to browser incompatibility. Otherwise, returns true. For a list of unsupported browsers, [go here](https://github.com/braintree/restricted-input/blob/main/README.md#browsers-where-formatting-is-turned-off-automatically).\n   * @returns {Boolean} Returns false if input formatting will be automatically disabled due to browser incompatibility. Otherwise, returns true.\n   * @example\n   * <caption>Conditionally choosing split expiration date inputs if formatting is unavailable</caption>\n   * var canFormat = braintree.hostedFields.supportsInputFormatting();\n   * var fields = {\n   *   number: {\n   *     container: '#card-number'\n   *   },\n   *   cvv: {\n   *     container: '#cvv'\n   *   }\n   * };\n   *\n   * if (canFormat) {\n   *   fields.expirationDate = {\n   *     selection: '#expiration-date'\n   *   };\n   *   functionToCreateAndInsertExpirationDateDivToForm();\n   * } else {\n   *   fields.expirationMonth = {\n   *     selection: '#expiration-month'\n   *   };\n   *   fields.expirationYear = {\n   *     selection: '#expiration-year'\n   *   };\n   *   functionToCreateAndInsertExpirationMonthAndYearDivsToForm();\n   * }\n   *\n   * braintree.hostedFields.create({\n   *   client: clientInstance,\n   *   styles: {\n   *     // Styles\n   *   },\n   *   fields: fields\n   * }, callback);\n   */\n  supportsInputFormatting: supportsInputFormatting,\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/promise\":131,\"./external/hosted-fields\":84,\"./shared/errors\":89,\"@braintree/wrap-promise\":51,\"restricted-input/supports-input-formatting\":194}],87:[function(require,module,exports){\n\"use strict\";\n\nvar isAndroid = require(\"@braintree/browser-detection/is-android\");\nvar isChromeOS = require(\"@braintree/browser-detection/is-chrome-os\");\nvar isIos = require(\"@braintree/browser-detection/is-ios\");\nvar isChrome = require(\"@braintree/browser-detection/is-chrome\");\n\nfunction hasSoftwareKeyboard() {\n  return isAndroid() || isChromeOS() || isIos();\n}\n\nfunction isChromeIos() {\n  return isChrome() && isIos();\n}\n\nmodule.exports = {\n  isIE: require(\"@braintree/browser-detection/is-ie\"),\n  isEdge: require(\"@braintree/browser-detection/is-edge\"),\n  isIe9: require(\"@braintree/browser-detection/is-ie9\"),\n  isIe10: require(\"@braintree/browser-detection/is-ie10\"),\n  isAndroid: isAndroid,\n  isChromeOS: isChromeOS,\n  isChromeIos: isChromeIos,\n  isFirefox: require(\"@braintree/browser-detection/is-firefox\"),\n  isIos: isIos,\n  isIosWebview: require(\"@braintree/browser-detection/is-ios-webview\"),\n  hasSoftwareKeyboard: hasSoftwareKeyboard,\n};\n\n},{\"@braintree/browser-detection/is-android\":26,\"@braintree/browser-detection/is-chrome\":28,\"@braintree/browser-detection/is-chrome-os\":27,\"@braintree/browser-detection/is-edge\":29,\"@braintree/browser-detection/is-firefox\":30,\"@braintree/browser-detection/is-ie\":31,\"@braintree/browser-detection/is-ie10\":32,\"@braintree/browser-detection/is-ie9\":33,\"@braintree/browser-detection/is-ios\":37,\"@braintree/browser-detection/is-ios-webview\":35}],88:[function(require,module,exports){\n\"use strict\";\n\nvar enumerate = require(\"../../lib/enumerate\");\nvar errors = require(\"./errors\");\nvar VERSION = \"3.88.3\";\n\nvar constants = {\n  VERSION: VERSION,\n  maxExpirationYearAge: 19,\n  externalEvents: {\n    FOCUS: \"focus\",\n    BLUR: \"blur\",\n    EMPTY: \"empty\",\n    NOT_EMPTY: \"notEmpty\",\n    VALIDITY_CHANGE: \"validityChange\",\n    CARD_TYPE_CHANGE: \"cardTypeChange\",\n  },\n  defaultMaxLengths: {\n    number: 19,\n    postalCode: 8,\n    expirationDate: 7,\n    expirationMonth: 2,\n    expirationYear: 4,\n    cvv: 3,\n  },\n  externalClasses: {\n    FOCUSED: \"braintree-hosted-fields-focused\",\n    INVALID: \"braintree-hosted-fields-invalid\",\n    VALID: \"braintree-hosted-fields-valid\",\n  },\n  navigationDirections: {\n    BACK: \"before\",\n    FORWARD: \"after\",\n  },\n  defaultIFrameStyle: {\n    border: \"none\",\n    width: \"100%\",\n    height: \"100%\",\n    float: \"left\",\n  },\n  tokenizationErrorCodes: {\n    81724: errors.HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE,\n    // NEXT_MAJOR_VERSION this error triggers for both AVS and CVV errors\n    // but the code name implies that it would only trigger for CVV verification\n    // failures\n    81736: errors.HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED,\n  },\n  allowedStyles: [\n    \"-moz-appearance\",\n    \"-moz-box-shadow\",\n    \"-moz-osx-font-smoothing\",\n    \"-moz-tap-highlight-color\",\n    \"-moz-transition\",\n    \"-webkit-appearance\",\n    \"-webkit-box-shadow\",\n    \"-webkit-font-smoothing\",\n    \"-webkit-tap-highlight-color\",\n    \"-webkit-transition\",\n    \"appearance\",\n    \"box-shadow\",\n    \"color\",\n    \"direction\",\n    \"font\",\n    \"font-family\",\n    \"font-size\",\n    \"font-size-adjust\",\n    \"font-stretch\",\n    \"font-style\",\n    \"font-variant\",\n    \"font-variant-alternates\",\n    \"font-variant-caps\",\n    \"font-variant-east-asian\",\n    \"font-variant-ligatures\",\n    \"font-variant-numeric\",\n    \"font-weight\",\n    \"letter-spacing\",\n    \"line-height\",\n    \"margin\",\n    \"margin-top\",\n    \"margin-right\",\n    \"margin-bottom\",\n    \"margin-left\",\n    \"opacity\",\n    \"outline\",\n    \"padding\",\n    \"padding-top\",\n    \"padding-right\",\n    \"padding-bottom\",\n    \"padding-left\",\n    \"text-align\",\n    \"text-shadow\",\n    \"transition\",\n  ],\n  allowedFields: {\n    cardholderName: {\n      name: \"cardholder-name\",\n      label: \"Cardholder Name\",\n    },\n    number: {\n      name: \"credit-card-number\",\n      label: \"Credit Card Number\",\n    },\n    cvv: {\n      name: \"cvv\",\n      label: \"CVV\",\n    },\n    expirationDate: {\n      name: \"expiration\",\n      label: \"Expiration Date\",\n    },\n    expirationMonth: {\n      name: \"expiration-month\",\n      label: \"Expiration Month\",\n    },\n    expirationYear: {\n      name: \"expiration-year\",\n      label: \"Expiration Year\",\n    },\n    postalCode: {\n      name: \"postal-code\",\n      label: \"Postal Code\",\n    },\n  },\n  allowedAttributes: {\n    \"aria-invalid\": \"boolean\",\n    \"aria-required\": \"boolean\",\n    disabled: \"boolean\",\n    placeholder: \"string\",\n  },\n  autocompleteMappings: {\n    \"cardholder-name\": \"cc-name\",\n    \"credit-card-number\": \"cc-number\",\n    expiration: \"cc-exp\",\n    \"expiration-month\": \"cc-exp-month\",\n    \"expiration-year\": \"cc-exp-year\",\n    cvv: \"cc-csc\",\n    \"postal-code\": \"billing postal-code\",\n  },\n};\n\nconstants.events = enumerate(\n  [\n    \"ADD_CLASS\",\n    \"AUTOFILL_DATA_AVAILABLE\",\n    \"BIN_AVAILABLE\",\n    \"CARD_FORM_ENTRY_HAS_BEGUN\",\n    \"CLEAR_FIELD\",\n    \"CONFIGURATION\",\n    \"FRAME_READY\",\n    \"INPUT_EVENT\",\n    \"READY_FOR_CLIENT\",\n    \"REMOVE_ATTRIBUTE\",\n    \"REMOVE_CLASS\",\n    \"REMOVE_FOCUS_INTERCEPTS\",\n    \"SET_ATTRIBUTE\",\n    \"SET_MESSAGE\",\n    \"SET_MONTH_OPTIONS\",\n    \"TOKENIZATION_REQUEST\",\n    \"TRIGGER_FOCUS_CHANGE\",\n    \"TRIGGER_INPUT_FOCUS\",\n    \"VALIDATE_STRICT\",\n  ],\n  \"hosted-fields:\"\n);\n\nmodule.exports = constants;\n\n},{\"../../lib/enumerate\":108,\"./errors\":89}],89:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Hosted Fields - Creation Error Codes\n * @description Errors that occur when [creating the Hosted Fields component](./module-braintree-web_hosted-fields.html#.create).\n * @property {UNKNOWN} HOSTED_FIELDS_TIMEOUT Occurs when Hosted Fields does not finish setting up within 60 seconds.\n * @property {MERCHANT} HOSTED_FIELDS_INVALID_FIELD_KEY Occurs when Hosted Fields is instantiated with an invalid Field option.\n * @property {MERCHANT} HOSTED_FIELDS_INVALID_FIELD_SELECTOR Occurs when Hosted Fields given a field selector that is not valid.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME Occurs when Hosted Fields given a field selector that already contains an iframe.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_PROPERTY_INVALID Occurs when a field configuration option is not valid.\n */\n\n/**\n * @name BraintreeError.Hosted Fields - Field Manipulation Error Codes\n * @description Errors that occur when modifying fields through [`addClass`](./HostedFields.html#addClass), [`removeClass`](./HostedFields.html#removeClass), [`setAttribute`](./HostedFields.html#setAttribute), [`removeAttribute`](./HostedFields.html#removeAttribute), [`clear`](./HostedFields.html#clear), [`focus`](./HostedFields.html#focus), and [`setMonthOptions`](./HostedFields.html#setMonthOptions).\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_INVALID Occurs when attempting to modify a field that is not a valid Hosted Fields option.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_NOT_PRESENT Occurs when attempting to modify a field that is not configured with Hosted Fields.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_PROPERTY_INVALID Occurs when a field configuration option is not valid.\n */\n\n/**\n * @name BraintreeError.Hosted Fields - Set Attribute Error Codes\n * @description Errors that occur when using the [`setAttribute` method](./HostedFields.html#setAttribute)\n * @property {MERCHANT} HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED Occurs when trying to set an attribute that is not supported to be set.\n * @property {MERCHANT} HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED Occurs when the type of value for an attribute is not allowed to be set.\n */\n\n/**\n * @name BraintreeError.Hosted Fields - Tokenize Error Codes\n * @description Errors that occur when [tokenizing the card details with Hosted Fields](./HostedFields.html#tokenize).\n * @property {NETWORK} HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR Occurs when the Braintree gateway cannot be contacted.\n * @property {CUSTOMER} HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE Occurs when attempting to vault a card, but the client token being used is configured to fail if the card already exists in the vault.\n * @property {CUSTOMER} HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED Occurs when cvv verification is turned on in the Braintree control panel.\n * @property {CUSTOMER} HOSTED_FIELDS_FAILED_TOKENIZATION Occurs when the credit card details were sent to Braintree, but failed to tokenize.\n * @property {CUSTOMER} HOSTED_FIELDS_FIELDS_EMPTY Occurs when all the Hosted Fields inputs are empty.\n * @property {CUSTOMER} HOSTED_FIELDS_FIELDS_INVALID Occurs when one ore more fields are invalid.\n */\n\nvar BraintreeError = require(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  HOSTED_FIELDS_TIMEOUT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"HOSTED_FIELDS_TIMEOUT\",\n    message: \"Hosted Fields timed out when attempting to set up.\",\n  },\n  HOSTED_FIELDS_INVALID_FIELD_KEY: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_INVALID_FIELD_KEY\",\n  },\n  HOSTED_FIELDS_INVALID_FIELD_SELECTOR: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_INVALID_FIELD_SELECTOR\",\n    message: \"Selector does not reference a valid DOM node.\",\n  },\n  HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME\",\n    message: \"Element already contains a Braintree iframe.\",\n  },\n  HOSTED_FIELDS_FIELD_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_INVALID\",\n  },\n  HOSTED_FIELDS_FIELD_NOT_PRESENT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_NOT_PRESENT\",\n  },\n  HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR\",\n    message: \"A tokenization network error occurred.\",\n  },\n  HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE\",\n    message: \"This credit card already exists in the merchant's vault.\",\n  },\n  HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED\",\n    message: \"CVV verification failed during tokenization.\",\n  },\n  HOSTED_FIELDS_FAILED_TOKENIZATION: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_FAILED_TOKENIZATION\",\n    message: \"The supplied card data failed tokenization.\",\n  },\n  HOSTED_FIELDS_FIELDS_EMPTY: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_FIELDS_EMPTY\",\n    message: \"All fields are empty. Cannot tokenize empty card fields.\",\n  },\n  HOSTED_FIELDS_FIELDS_INVALID: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_FIELDS_INVALID\",\n    message:\n      \"Some payment input fields are invalid. Cannot tokenize invalid card fields.\",\n  },\n  HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED\",\n  },\n  HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED\",\n  },\n  HOSTED_FIELDS_FIELD_PROPERTY_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_PROPERTY_INVALID\",\n  },\n};\n\n},{\"../../lib/braintree-error\":99}],90:[function(require,module,exports){\n\"use strict\";\n\nfunction findParentTags(element, tag) {\n  var parent = element.parentNode;\n  var parents = [];\n\n  while (parent != null) {\n    if (parent.tagName != null && parent.tagName.toLowerCase() === tag) {\n      parents.push(parent);\n    }\n\n    parent = parent.parentNode;\n  }\n\n  return parents;\n}\n\nmodule.exports = findParentTags;\n\n},{}],91:[function(require,module,exports){\n\"use strict\";\n\nvar browserDetection = require(\"./browser-detection\");\nvar classList = require(\"@braintree/class-list\");\nvar constants = require(\"./constants\");\nvar allowedFields = Object.keys(constants.allowedFields);\nvar directions = constants.navigationDirections;\n\nvar focusIntercept = {\n  generate: function (hostedFieldsId, type, direction, handler) {\n    var input = document.createElement(\"input\");\n    var focusInterceptStyles = {\n      border: \"none !important\",\n      display: \"block !important\",\n      height: \"1px !important\",\n      left: \"-1px !important\",\n      opacity: \"0 !important\",\n      position: \"absolute !important\",\n      top: \"-1px !important\",\n      width: \"1px !important\",\n    };\n    var shouldCreateFocusIntercept =\n      browserDetection.hasSoftwareKeyboard() ||\n      browserDetection.isFirefox() ||\n      browserDetection.isIE();\n\n    if (!shouldCreateFocusIntercept) {\n      return document.createDocumentFragment();\n    }\n\n    input.setAttribute(\"aria-hidden\", \"true\");\n    input.setAttribute(\"autocomplete\", \"off\");\n    input.setAttribute(\"data-braintree-direction\", direction);\n    input.setAttribute(\"data-braintree-type\", type);\n    input.setAttribute(\n      \"id\",\n      \"bt-\" + type + \"-\" + direction + \"-\" + hostedFieldsId\n    );\n    input.setAttribute(\n      \"style\",\n      JSON.stringify(focusInterceptStyles)\n        .replace(/[{}\"]/g, \"\")\n        .replace(/,/g, \";\")\n    );\n\n    classList.add(input, \"focus-intercept\");\n\n    input.addEventListener(\"focus\", function (event) {\n      handler(event);\n\n      /*\n        Certain browsers without software keyboards (Firefox, Internet\n        Explorer) need the focus intercept inputs that get inserted\n        around the actual input to blur themselves, otherwise the\n        browser gets confused about what should have focus. Can't\n        apply this to browsers with software keyboards however,\n        because it blurs everything, and focus on the actual input is\n        also lost.\n      */\n      if (!browserDetection.hasSoftwareKeyboard()) {\n        input.blur();\n      }\n    });\n\n    return input;\n  },\n  destroy: function (idString) {\n    var focusInputs;\n\n    if (!idString) {\n      focusInputs = document.querySelectorAll(\"[data-braintree-direction]\");\n      focusInputs = [].slice.call(focusInputs);\n    } else {\n      focusInputs = [document.getElementById(idString)];\n    }\n\n    focusInputs.forEach(function (node) {\n      if (\n        node &&\n        node.nodeType === 1 &&\n        focusIntercept.matchFocusElement(node.getAttribute(\"id\"))\n      ) {\n        node.parentNode.removeChild(node);\n      }\n    });\n  },\n  matchFocusElement: function (idString) {\n    var idComponents, hasBTPrefix, isAllowedType, isValidDirection;\n\n    if (!idString) {\n      return false;\n    }\n\n    idComponents = idString.split(\"-\");\n\n    if (idComponents.length < 4) {\n      return false;\n    }\n\n    hasBTPrefix = idComponents[0] === \"bt\";\n    isAllowedType = allowedFields.indexOf(idComponents[1]) > -1;\n    isValidDirection =\n      idComponents[2] === directions.BACK ||\n      idComponents[2] === directions.FORWARD;\n\n    return Boolean(hasBTPrefix && isAllowedType && isValidDirection);\n  },\n};\n\nmodule.exports = focusIntercept;\n\n},{\"./browser-detection\":87,\"./constants\":88,\"@braintree/class-list\":40}],92:[function(require,module,exports){\n\"use strict\";\n\nvar creditCardType = require(\"credit-card-type\");\n\nmodule.exports = function (number) {\n  var results = creditCardType(number);\n\n  results.forEach(function (card) {\n    // NEXT_MAJOR_VERSION credit-card-type fixed the mastercard enum\n    // but we still pass master-card in the braintree API\n    // in a major version bump, we can remove this and\n    // this will be mastercard instead of master-card\n    if (card.type === \"mastercard\") {\n      card.type = \"master-card\";\n    }\n  });\n\n  return results;\n};\n\n},{\"credit-card-type\":168}],93:[function(require,module,exports){\n\"use strict\";\n\nvar createAuthorizationData = require(\"./create-authorization-data\");\nvar jsonClone = require(\"./json-clone\");\nvar constants = require(\"./constants\");\n\nfunction addMetadata(configuration, data) {\n  var key;\n  var attrs = data ? jsonClone(data) : {};\n  var authAttrs = createAuthorizationData(configuration.authorization).attrs;\n  var _meta = jsonClone(configuration.analyticsMetadata);\n\n  attrs.braintreeLibraryVersion = constants.BRAINTREE_LIBRARY_VERSION;\n\n  for (key in attrs._meta) {\n    if (attrs._meta.hasOwnProperty(key)) {\n      _meta[key] = attrs._meta[key];\n    }\n  }\n\n  attrs._meta = _meta;\n\n  if (authAttrs.tokenizationKey) {\n    attrs.tokenizationKey = authAttrs.tokenizationKey;\n  } else {\n    attrs.authorizationFingerprint = authAttrs.authorizationFingerprint;\n  }\n\n  return attrs;\n}\n\nmodule.exports = addMetadata;\n\n},{\"./constants\":100,\"./create-authorization-data\":104,\"./json-clone\":128}],94:[function(require,module,exports){\n\"use strict\";\n\nvar Promise = require(\"./promise\");\nvar constants = require(\"./constants\");\nvar addMetadata = require(\"./add-metadata\");\n\nfunction sendAnalyticsEvent(clientInstanceOrPromise, kind, callback) {\n  var timestamp = Date.now(); // milliseconds\n\n  return Promise.resolve(clientInstanceOrPromise)\n    .then(function (client) {\n      var timestampInPromise = Date.now();\n      var configuration = client.getConfiguration();\n      var request = client._request;\n      var url = configuration.gatewayConfiguration.analytics.url;\n      var data = {\n        analytics: [\n          {\n            kind: constants.ANALYTICS_PREFIX + kind,\n            isAsync:\n              Math.floor(timestampInPromise / 1000) !==\n              Math.floor(timestamp / 1000),\n            timestamp: timestamp,\n          },\n        ],\n      };\n\n      request(\n        {\n          url: url,\n          method: \"post\",\n          data: addMetadata(configuration, data),\n          timeout: constants.ANALYTICS_REQUEST_TIMEOUT_MS,\n        },\n        callback\n      );\n    })\n    .catch(function (err) {\n      // for all non-test cases, we don't provide a callback,\n      // so this error will always be swallowed. In this case,\n      // that's fine, it should only error when the deferred\n      // client fails to set up, in which case we don't want\n      // that error to report over and over again via these\n      // deferred analytics events\n      if (callback) {\n        callback(err);\n      }\n    });\n}\n\nmodule.exports = {\n  sendEvent: sendAnalyticsEvent,\n};\n\n},{\"./add-metadata\":93,\"./constants\":100,\"./promise\":131}],95:[function(require,module,exports){\n\"use strict\";\n\nvar loadScript = require(\"@braintree/asset-loader/load-script\");\n\nmodule.exports = {\n  loadScript: loadScript,\n};\n\n},{\"@braintree/asset-loader/load-script\":5}],96:[function(require,module,exports){\n\"use strict\";\n\nvar assignNormalized =\n  typeof Object.assign === \"function\" ? Object.assign : assignPolyfill;\n\nfunction assignPolyfill(destination) {\n  var i, source, key;\n\n  for (i = 1; i < arguments.length; i++) {\n    source = arguments[i];\n    for (key in source) {\n      if (source.hasOwnProperty(key)) {\n        destination[key] = source[key];\n      }\n    }\n  }\n\n  return destination;\n}\n\nmodule.exports = {\n  assign: assignNormalized,\n  _assign: assignPolyfill,\n};\n\n},{}],97:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"./braintree-error\");\nvar Promise = require(\"./promise\");\nvar sharedErrors = require(\"./errors\");\nvar VERSION = \"3.88.3\";\n\nfunction basicComponentVerification(options) {\n  var client, authorization, name;\n\n  if (!options) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INVALID_USE_OF_INTERNAL_FUNCTION.type,\n        code: sharedErrors.INVALID_USE_OF_INTERNAL_FUNCTION.code,\n        message:\n          \"Options must be passed to basicComponentVerification function.\",\n      })\n    );\n  }\n\n  name = options.name;\n  client = options.client;\n  authorization = options.authorization;\n\n  if (!client && !authorization) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type,\n        code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code,\n        // NEXT_MAJOR_VERSION in major version, we expose passing in authorization for all components\n        // instead of passing in a client instance. Leave this a silent feature for now.\n        message: \"options.client is required when instantiating \" + name + \".\",\n      })\n    );\n  }\n\n  if (!authorization && client.getVersion() !== VERSION) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INCOMPATIBLE_VERSIONS.type,\n        code: sharedErrors.INCOMPATIBLE_VERSIONS.code,\n        message:\n          \"Client (version \" +\n          client.getVersion() +\n          \") and \" +\n          name +\n          \" (version \" +\n          VERSION +\n          \") components must be from the same SDK version.\",\n      })\n    );\n  }\n\n  return Promise.resolve();\n}\n\nmodule.exports = {\n  verify: basicComponentVerification,\n};\n\n},{\"./braintree-error\":99,\"./errors\":109,\"./promise\":131}],98:[function(require,module,exports){\n\"use strict\";\n\nvar once = require(\"./once\");\n\nfunction call(fn, callback) {\n  var isSync = fn.length === 0;\n\n  if (isSync) {\n    fn();\n    callback(null);\n  } else {\n    fn(callback);\n  }\n}\n\nmodule.exports = function (functions, cb) {\n  var i;\n  var length = functions.length;\n  var remaining = length;\n  var callback = once(cb);\n\n  if (length === 0) {\n    callback(null);\n\n    return;\n  }\n\n  function finish(err) {\n    if (err) {\n      callback(err);\n\n      return;\n    }\n\n    remaining -= 1;\n    if (remaining === 0) {\n      callback(null);\n    }\n  }\n\n  for (i = 0; i < length; i++) {\n    call(functions[i], finish);\n  }\n};\n\n},{\"./once\":130}],99:[function(require,module,exports){\n\"use strict\";\n\nvar enumerate = require(\"./enumerate\");\n\n/**\n * @class\n * @global\n * @param {object} options Construction options\n * @classdesc This class is used to report error conditions, frequently as the first parameter to callbacks throughout the Braintree SDK.\n * @description <strong>You cannot use this constructor directly. Interact with instances of this class through {@link callback callbacks}.</strong>\n */\nfunction BraintreeError(options) {\n  if (!BraintreeError.types.hasOwnProperty(options.type)) {\n    throw new Error(options.type + \" is not a valid type.\");\n  }\n\n  if (!options.code) {\n    throw new Error(\"Error code required.\");\n  }\n\n  if (!options.message) {\n    throw new Error(\"Error message required.\");\n  }\n\n  this.name = \"BraintreeError\";\n\n  /**\n   * @type {string}\n   * @description A code that corresponds to specific errors.\n   */\n  this.code = options.code;\n\n  /**\n   * @type {string}\n   * @description A short description of the error.\n   */\n  this.message = options.message;\n\n  /**\n   * @type {BraintreeError.types}\n   * @description The type of error.\n   */\n  this.type = options.type;\n\n  /**\n   * @type {object=}\n   * @description Additional information about the error, such as an underlying network error response.\n   */\n  this.details = options.details;\n}\n\nBraintreeError.prototype = Object.create(Error.prototype);\nBraintreeError.prototype.constructor = BraintreeError;\n\n/**\n * Enum for {@link BraintreeError} types.\n * @name BraintreeError.types\n * @enum\n * @readonly\n * @memberof BraintreeError\n * @property {string} CUSTOMER An error caused by the customer.\n * @property {string} MERCHANT An error that is actionable by the merchant.\n * @property {string} NETWORK An error due to a network problem.\n * @property {string} INTERNAL An error caused by Braintree code.\n * @property {string} UNKNOWN An error where the origin is unknown.\n */\nBraintreeError.types = enumerate([\n  \"CUSTOMER\",\n  \"MERCHANT\",\n  \"NETWORK\",\n  \"INTERNAL\",\n  \"UNKNOWN\",\n]);\n\nBraintreeError.findRootError = function (err) {\n  if (\n    err instanceof BraintreeError &&\n    err.details &&\n    err.details.originalError\n  ) {\n    return BraintreeError.findRootError(err.details.originalError);\n  }\n\n  return err;\n};\n\nmodule.exports = BraintreeError;\n\n},{\"./enumerate\":108}],100:[function(require,module,exports){\n\"use strict\";\n\nvar VERSION = \"3.88.3\";\nvar PLATFORM = \"web\";\n\nvar CLIENT_API_URLS = {\n  production: \"https://api.braintreegateway.com:443\",\n  sandbox: \"https://api.sandbox.braintreegateway.com:443\",\n};\n\nvar ASSETS_URLS = {\n  production: \"https://assets.braintreegateway.com\",\n  sandbox: \"https://assets.braintreegateway.com\",\n};\n\nvar GRAPHQL_URLS = {\n  production: \"https://payments.braintree-api.com/graphql\",\n  sandbox: \"https://payments.sandbox.braintree-api.com/graphql\",\n};\n\nmodule.exports = {\n  ANALYTICS_PREFIX: PLATFORM + \".\",\n  ANALYTICS_REQUEST_TIMEOUT_MS: 2000,\n  ASSETS_URLS: ASSETS_URLS,\n  CLIENT_API_URLS: CLIENT_API_URLS,\n  FRAUDNET_SOURCE: \"BRAINTREE_SIGNIN\",\n  FRAUDNET_FNCLS: \"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\",\n  FRAUDNET_URL: \"https://c.paypal.com/da/r/fb.js\",\n  BUS_CONFIGURATION_REQUEST_EVENT: \"BUS_CONFIGURATION_REQUEST\",\n  GRAPHQL_URLS: GRAPHQL_URLS,\n  INTEGRATION_TIMEOUT_MS: 60000,\n  VERSION: VERSION,\n  INTEGRATION: \"custom\",\n  SOURCE: \"client\",\n  PLATFORM: PLATFORM,\n  BRAINTREE_LIBRARY_VERSION: \"braintree/\" + PLATFORM + \"/\" + VERSION,\n};\n\n},{}],101:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"./braintree-error\");\nvar sharedErrors = require(\"./errors\");\n\nmodule.exports = function (instance, methodNames) {\n  methodNames.forEach(function (methodName) {\n    instance[methodName] = function () {\n      throw new BraintreeError({\n        type: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.type,\n        code: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.code,\n        message: methodName + \" cannot be called after teardown.\",\n      });\n    };\n  });\n};\n\n},{\"./braintree-error\":99,\"./errors\":109}],102:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"./braintree-error\");\n\nfunction convertToBraintreeError(originalErr, btErrorObject) {\n  if (originalErr instanceof BraintreeError) {\n    return originalErr;\n  }\n\n  return new BraintreeError({\n    type: btErrorObject.type,\n    code: btErrorObject.code,\n    message: btErrorObject.message,\n    details: {\n      originalError: originalErr,\n    },\n  });\n}\n\nmodule.exports = convertToBraintreeError;\n\n},{\"./braintree-error\":99}],103:[function(require,module,exports){\n\"use strict\";\n\nvar ASSETS_URLS = require(\"./constants\").ASSETS_URLS;\n\nfunction createAssetsUrl(authorization) {\n  return ASSETS_URLS.production;\n}\n/* eslint-enable */\n\nmodule.exports = {\n  create: createAssetsUrl,\n};\n\n},{\"./constants\":100}],104:[function(require,module,exports){\n\"use strict\";\n\nvar atob = require(\"../lib/vendor/polyfill\").atob;\nvar CLIENT_API_URLS = require(\"../lib/constants\").CLIENT_API_URLS;\n\nfunction _isTokenizationKey(str) {\n  return /^[a-zA-Z0-9]+_[a-zA-Z0-9]+_[a-zA-Z0-9_]+$/.test(str);\n}\n\nfunction _parseTokenizationKey(tokenizationKey) {\n  var tokens = tokenizationKey.split(\"_\");\n  var environment = tokens[0];\n  var merchantId = tokens.slice(2).join(\"_\");\n\n  return {\n    merchantId: merchantId,\n    environment: environment,\n  };\n}\n\nfunction createAuthorizationData(authorization) {\n  var parsedClientToken, parsedTokenizationKey;\n  var data = {\n    attrs: {},\n    configUrl: \"\",\n  };\n\n  if (_isTokenizationKey(authorization)) {\n    parsedTokenizationKey = _parseTokenizationKey(authorization);\n    data.environment = parsedTokenizationKey.environment;\n    data.attrs.tokenizationKey = authorization;\n    data.configUrl =\n      CLIENT_API_URLS[parsedTokenizationKey.environment] +\n      \"/merchants/\" +\n      parsedTokenizationKey.merchantId +\n      \"/client_api/v1/configuration\";\n  } else {\n    parsedClientToken = JSON.parse(atob(authorization));\n    data.environment = parsedClientToken.environment;\n    data.attrs.authorizationFingerprint =\n      parsedClientToken.authorizationFingerprint;\n    data.configUrl = parsedClientToken.configUrl;\n    data.graphQL = parsedClientToken.graphQL;\n  }\n\n  return data;\n}\n\nmodule.exports = createAuthorizationData;\n\n},{\"../lib/constants\":100,\"../lib/vendor/polyfill\":136}],105:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"./braintree-error\");\nvar Promise = require(\"./promise\");\nvar assets = require(\"./assets\");\nvar sharedErrors = require(\"./errors\");\n\nvar VERSION = \"3.88.3\";\n\nfunction createDeferredClient(options) {\n  var promise = Promise.resolve();\n\n  if (options.client) {\n    return Promise.resolve(options.client);\n  }\n\n  if (!(window.braintree && window.braintree.client)) {\n    promise = assets\n      .loadScript({\n        src: options.assetsUrl + \"/web/\" + VERSION + \"/js/client.min.js\",\n      })\n      .catch(function (err) {\n        return Promise.reject(\n          new BraintreeError({\n            type: sharedErrors.CLIENT_SCRIPT_FAILED_TO_LOAD.type,\n            code: sharedErrors.CLIENT_SCRIPT_FAILED_TO_LOAD.code,\n            message: sharedErrors.CLIENT_SCRIPT_FAILED_TO_LOAD.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      });\n  }\n\n  return promise.then(function () {\n    if (window.braintree.client.VERSION !== VERSION) {\n      return Promise.reject(\n        new BraintreeError({\n          type: sharedErrors.INCOMPATIBLE_VERSIONS.type,\n          code: sharedErrors.INCOMPATIBLE_VERSIONS.code,\n          message:\n            \"Client (version \" +\n            window.braintree.client.VERSION +\n            \") and \" +\n            options.name +\n            \" (version \" +\n            VERSION +\n            \") components must be from the same SDK version.\",\n        })\n      );\n    }\n\n    return window.braintree.client.create({\n      authorization: options.authorization,\n      debug: options.debug,\n    });\n  });\n}\n\nmodule.exports = {\n  create: createDeferredClient,\n};\n\n},{\"./assets\":95,\"./braintree-error\":99,\"./errors\":109,\"./promise\":131}],106:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (fn) {\n  return function () {\n    // IE9 doesn't support passing arguments to setTimeout so we have to emulate it.\n    var args = arguments;\n\n    setTimeout(function () {\n      fn.apply(null, args);\n    }, 1);\n  };\n};\n\n},{}],107:[function(require,module,exports){\n\"use strict\";\n\nvar batchExecuteFunctions = require(\"./batch-execute-functions\");\n\nfunction Destructor() {\n  this._teardownRegistry = [];\n\n  this._isTearingDown = false;\n}\n\nDestructor.prototype.registerFunctionForTeardown = function (fn) {\n  if (typeof fn === \"function\") {\n    this._teardownRegistry.push(fn);\n  }\n};\n\nDestructor.prototype.teardown = function (callback) {\n  if (this._isTearingDown) {\n    callback(new Error(\"Destructor is already tearing down\"));\n\n    return;\n  }\n\n  this._isTearingDown = true;\n\n  batchExecuteFunctions(\n    this._teardownRegistry,\n    function (err) {\n      this._teardownRegistry = [];\n      this._isTearingDown = false;\n\n      if (typeof callback === \"function\") {\n        callback(err);\n      }\n    }.bind(this)\n  );\n};\n\nmodule.exports = Destructor;\n\n},{\"./batch-execute-functions\":98}],108:[function(require,module,exports){\n\"use strict\";\n\nfunction enumerate(values, prefix) {\n  prefix = prefix == null ? \"\" : prefix;\n\n  return values.reduce(function (enumeration, value) {\n    enumeration[value] = prefix + value;\n\n    return enumeration;\n  }, {});\n}\n\nmodule.exports = enumerate;\n\n},{}],109:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Shared Internal Error Codes\n * @ignore\n * @description These codes should never be experienced by the merchant directly.\n * @property {INTERNAL} INVALID_USE_OF_INTERNAL_FUNCTION Occurs when the client is created without a gateway configuration. Should never happen.\n */\n\n/**\n * @name BraintreeError.Shared Errors - Component Creation Error Codes\n * @description Errors that occur when creating components.\n * @property {MERCHANT} INSTANTIATION_OPTION_REQUIRED Occurs when a component is created that is missing a required option.\n * @property {MERCHANT} INCOMPATIBLE_VERSIONS Occurs when a component is created with a client with a different version than the component.\n * @property {NETWORK} CLIENT_SCRIPT_FAILED_TO_LOAD Occurs when a component attempts to load the Braintree client script, but the request fails.\n */\n\n/**\n * @name BraintreeError.Shared Errors - Component Instance Error Codes\n * @description Errors that occur when using instances of components.\n * @property {MERCHANT} METHOD_CALLED_AFTER_TEARDOWN Occurs when a method is called on a component instance after it has been torn down.\n */\n\nvar BraintreeError = require(\"./braintree-error\");\n\nmodule.exports = {\n  INVALID_USE_OF_INTERNAL_FUNCTION: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"INVALID_USE_OF_INTERNAL_FUNCTION\",\n  },\n  INSTANTIATION_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INSTANTIATION_OPTION_REQUIRED\",\n  },\n  INCOMPATIBLE_VERSIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INCOMPATIBLE_VERSIONS\",\n  },\n  CLIENT_SCRIPT_FAILED_TO_LOAD: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_SCRIPT_FAILED_TO_LOAD\",\n    message: \"Braintree client script could not be loaded.\",\n  },\n  METHOD_CALLED_AFTER_TEARDOWN: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"METHOD_CALLED_AFTER_TEARDOWN\",\n  },\n};\n\n},{\"./braintree-error\":99}],110:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function findRootNode(element) {\n  while (element.parentNode) {\n    element = element.parentNode;\n  }\n\n  return element;\n};\n\n},{}],111:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (array, key, value) {\n  var i;\n\n  for (i = 0; i < array.length; i++) {\n    if (array[i].hasOwnProperty(key) && array[i][key] === value) {\n      return array[i];\n    }\n  }\n\n  return null;\n};\n\n},{}],112:[function(require,module,exports){\n\"use strict\";\n\nvar Popup = require(\"./strategies/popup\");\nvar PopupBridge = require(\"./strategies/popup-bridge\");\nvar Modal = require(\"./strategies/modal\");\nvar Bus = require(\"framebus\");\nvar events = require(\"../shared/events\");\nvar errors = require(\"../shared/errors\");\nvar constants = require(\"../shared/constants\");\nvar uuid = require(\"@braintree/uuid\");\nvar iFramer = require(\"@braintree/iframer\");\nvar BraintreeError = require(\"../../braintree-error\");\nvar browserDetection = require(\"../shared/browser-detection\");\nvar isHTTPS = require(\"../../is-https\");\nvar assign = require(\"./../../assign\").assign;\nvar BUS_CONFIGURATION_REQUEST_EVENT =\n  require(\"../../constants\").BUS_CONFIGURATION_REQUEST_EVENT;\n\nvar REQUIRED_CONFIG_KEYS = [\"name\", \"dispatchFrameUrl\", \"openFrameUrl\"];\n\nfunction noop() {}\n\nfunction _validateFrameConfiguration(options) {\n  if (!options) {\n    throw new Error(\"Valid configuration is required\");\n  }\n\n  REQUIRED_CONFIG_KEYS.forEach(function (key) {\n    if (!options.hasOwnProperty(key)) {\n      throw new Error(\"A valid frame \" + key + \" must be provided\");\n    }\n  });\n\n  if (!/^[\\w_]+$/.test(options.name)) {\n    throw new Error(\"A valid frame name must be provided\");\n  }\n}\n\nfunction FrameService(options) {\n  _validateFrameConfiguration(options);\n\n  this._serviceId = uuid().replace(/-/g, \"\");\n\n  this._options = {\n    name: options.name + \"_\" + this._serviceId,\n    dispatchFrameUrl: options.dispatchFrameUrl,\n    openFrameUrl: options.openFrameUrl,\n    height: options.height,\n    width: options.width,\n    top: options.top,\n    left: options.left,\n  };\n  this.state = options.state || {};\n\n  this._bus = new Bus({ channel: this._serviceId });\n  this._setBusEvents();\n}\n\nFrameService.prototype.initialize = function (callback) {\n  var dispatchFrameReadyHandler = function () {\n    callback();\n    this._bus.off(events.DISPATCH_FRAME_READY, dispatchFrameReadyHandler);\n  }.bind(this);\n\n  this._bus.on(events.DISPATCH_FRAME_READY, dispatchFrameReadyHandler);\n  this._writeDispatchFrame();\n};\n\nFrameService.prototype._writeDispatchFrame = function () {\n  var frameName = constants.DISPATCH_FRAME_NAME + \"_\" + this._serviceId;\n  var frameSrc = this._options.dispatchFrameUrl;\n\n  this._dispatchFrame = iFramer({\n    \"aria-hidden\": true,\n    name: frameName,\n    title: frameName,\n    src: frameSrc,\n    class: constants.DISPATCH_FRAME_CLASS,\n    height: 0,\n    width: 0,\n    style: {\n      position: \"absolute\",\n      left: \"-9999px\",\n    },\n  });\n\n  document.body.appendChild(this._dispatchFrame);\n};\n\nFrameService.prototype._setBusEvents = function () {\n  this._bus.on(\n    events.DISPATCH_FRAME_REPORT,\n    function (res, reply) {\n      if (this._onCompleteCallback) {\n        this._onCompleteCallback.call(null, res.err, res.payload);\n      }\n      this._frame.close();\n\n      this._onCompleteCallback = null;\n\n      if (reply) {\n        reply();\n      }\n    }.bind(this)\n  );\n\n  this._bus.on(\n    BUS_CONFIGURATION_REQUEST_EVENT,\n    function (reply) {\n      reply(this.state);\n    }.bind(this)\n  );\n};\n\nFrameService.prototype.open = function (options, callback) {\n  var error;\n\n  options = options || {};\n  this._frame = this._getFrameForEnvironment(options);\n\n  this._frame.initialize(callback);\n\n  if (this._frame instanceof PopupBridge) {\n    return;\n  }\n\n  assign(this.state, options.state);\n\n  this._onCompleteCallback = callback;\n  this._frame.open();\n\n  if (this.isFrameClosed()) {\n    this._cleanupFrame();\n    if (callback) {\n      if (browserDetection.isIE() && !isHTTPS.isHTTPS()) {\n        error = new BraintreeError(\n          errors.FRAME_SERVICE_FRAME_OPEN_FAILED_IE_BUG\n        );\n      } else {\n        error = new BraintreeError(errors.FRAME_SERVICE_FRAME_OPEN_FAILED);\n      }\n      callback(error);\n    }\n\n    return;\n  }\n  this._pollForPopupClose();\n};\n\nFrameService.prototype.redirect = function (url) {\n  if (this._frame && !this.isFrameClosed()) {\n    this._frame.redirect(url);\n  }\n};\n\nFrameService.prototype.close = function () {\n  if (!this.isFrameClosed()) {\n    this._frame.close();\n  }\n};\n\nFrameService.prototype.focus = function () {\n  if (!this.isFrameClosed()) {\n    this._frame.focus();\n  }\n};\n\nFrameService.prototype.createHandler = function (options) {\n  options = options || {};\n\n  return {\n    close: function () {\n      if (options.beforeClose) {\n        options.beforeClose();\n      }\n\n      this.close();\n    }.bind(this),\n    focus: function () {\n      if (options.beforeFocus) {\n        options.beforeFocus();\n      }\n\n      this.focus();\n    }.bind(this),\n  };\n};\n\nFrameService.prototype.createNoopHandler = function () {\n  return {\n    close: noop,\n    focus: noop,\n  };\n};\n\nFrameService.prototype.teardown = function () {\n  this.close();\n  this._dispatchFrame.parentNode.removeChild(this._dispatchFrame);\n  this._dispatchFrame = null;\n  this._cleanupFrame();\n};\n\nFrameService.prototype.isFrameClosed = function () {\n  return this._frame == null || this._frame.isClosed();\n};\n\nFrameService.prototype._cleanupFrame = function () {\n  this._frame = null;\n  clearInterval(this._popupInterval);\n  this._popupInterval = null;\n};\n\nFrameService.prototype._pollForPopupClose = function () {\n  this._popupInterval = setInterval(\n    function () {\n      if (this.isFrameClosed()) {\n        this._cleanupFrame();\n        if (this._onCompleteCallback) {\n          this._onCompleteCallback(\n            new BraintreeError(errors.FRAME_SERVICE_FRAME_CLOSED)\n          );\n        }\n      }\n    }.bind(this),\n    constants.POPUP_POLL_INTERVAL\n  );\n\n  return this._popupInterval;\n};\n\nFrameService.prototype._getFrameForEnvironment = function (options) {\n  var usePopup = browserDetection.supportsPopups();\n  var popupBridgeExists = Boolean(window.popupBridge);\n\n  var initOptions = assign({}, this._options, options);\n\n  if (popupBridgeExists) {\n    return new PopupBridge(initOptions);\n  } else if (usePopup) {\n    return new Popup(initOptions);\n  }\n\n  return new Modal(initOptions);\n};\n\nmodule.exports = FrameService;\n\n},{\"../../braintree-error\":99,\"../../constants\":100,\"../../is-https\":126,\"../shared/browser-detection\":119,\"../shared/constants\":120,\"../shared/errors\":121,\"../shared/events\":122,\"./../../assign\":96,\"./strategies/modal\":114,\"./strategies/popup\":117,\"./strategies/popup-bridge\":115,\"@braintree/iframer\":43,\"@braintree/uuid\":47,\"framebus\":176}],113:[function(require,module,exports){\n\"use strict\";\n\nvar FrameService = require(\"./frame-service\");\n\nmodule.exports = {\n  create: function createFrameService(options, callback) {\n    var frameService = new FrameService(options);\n\n    frameService.initialize(function () {\n      callback(frameService);\n    });\n  },\n};\n\n},{\"./frame-service\":112}],114:[function(require,module,exports){\n\"use strict\";\n\nvar iFramer = require(\"@braintree/iframer\");\nvar assign = require(\"../../../assign\").assign;\nvar browserDetection = require(\"../../shared/browser-detection\");\n\nvar ELEMENT_STYLES = {\n  position: \"fixed\",\n  top: 0,\n  left: 0,\n  bottom: 0,\n  padding: 0,\n  margin: 0,\n  border: 0,\n  outline: \"none\",\n  zIndex: 20001,\n  background: \"#FFFFFF\",\n};\n\nfunction noop() {}\n\nfunction Modal(options) {\n  this._closed = null;\n  this._frame = null;\n  this._options = options || {};\n  this._container = this._options.container || document.body;\n}\n\nModal.prototype.initialize = noop;\n\nModal.prototype.open = function () {\n  var iframerConfig = {\n    src: this._options.openFrameUrl,\n    name: this._options.name,\n    scrolling: \"yes\",\n    height: \"100%\",\n    width: \"100%\",\n    style: assign({}, ELEMENT_STYLES),\n    title: \"Lightbox Frame\",\n  };\n\n  if (browserDetection.isIos()) {\n    // WKWebView has buggy behavior when scrolling a fixed position modal. The workaround is to lock scrolling in\n    // the background. When modal is closed, we restore scrolling and return to the previous scroll position.\n    if (browserDetection.isIosWKWebview()) {\n      this._lockScrolling();\n      // Allows WKWebView to scroll all the way down to bottom\n      iframerConfig.style = {};\n    }\n\n    this._el = document.createElement(\"div\");\n\n    assign(this._el.style, ELEMENT_STYLES, {\n      height: \"100%\",\n      width: \"100%\",\n      overflow: \"auto\",\n      \"-webkit-overflow-scrolling\": \"touch\",\n    });\n\n    this._frame = iFramer(iframerConfig);\n    this._el.appendChild(this._frame);\n  } else {\n    this._el = this._frame = iFramer(iframerConfig);\n  }\n  this._closed = false;\n\n  this._container.appendChild(this._el);\n};\n\nModal.prototype.focus = noop;\n\nModal.prototype.close = function () {\n  this._container.removeChild(this._el);\n  this._frame = null;\n  this._closed = true;\n  if (browserDetection.isIosWKWebview()) {\n    this._unlockScrolling();\n  }\n};\n\nModal.prototype.isClosed = function () {\n  return Boolean(this._closed);\n};\n\nModal.prototype.redirect = function (redirectUrl) {\n  this._frame.src = redirectUrl;\n};\n\nModal.prototype._unlockScrolling = function () {\n  document.body.style.overflow = this._savedBodyProperties.overflowStyle;\n  document.body.style.position = this._savedBodyProperties.positionStyle;\n  window.scrollTo(\n    this._savedBodyProperties.left,\n    this._savedBodyProperties.top\n  );\n  delete this._savedBodyProperties;\n};\n\nModal.prototype._lockScrolling = function () {\n  var doc = document.documentElement;\n\n  // From https://stackoverflow.com/questions/9538868/prevent-body-from-scrolling-when-a-modal-is-opened#comment65626743_24727206\n  this._savedBodyProperties = {\n    left: (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),\n    top: (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0),\n    overflowStyle: document.body.style.overflow,\n    positionStyle: document.body.style.position,\n  };\n  document.body.style.overflow = \"hidden\";\n  document.body.style.position = \"fixed\";\n  window.scrollTo(0, 0);\n};\n\nmodule.exports = Modal;\n\n},{\"../../../assign\":96,\"../../shared/browser-detection\":119,\"@braintree/iframer\":43}],115:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../../../braintree-error\");\nvar errors = require(\"../../shared/errors\");\n\nfunction noop() {}\n\nfunction PopupBridge(options) {\n  this._closed = null;\n  this._options = options;\n}\n\nPopupBridge.prototype.initialize = function (callback) {\n  var self = this;\n\n  window.popupBridge.onComplete = function (err, payload) {\n    var popupDismissed = !payload && !err;\n\n    self._closed = true;\n\n    if (err || popupDismissed) {\n      // User clicked \"Done\" button of browser view\n      callback(new BraintreeError(errors.FRAME_SERVICE_FRAME_CLOSED));\n\n      return;\n    }\n    // User completed popup flow (includes success and cancel cases)\n    callback(null, payload);\n  };\n};\n\nPopupBridge.prototype.open = function (options) {\n  var url;\n\n  options = options || {};\n  url = options.openFrameUrl || this._options.openFrameUrl;\n\n  this._closed = false;\n  window.popupBridge.open(url);\n};\n\nPopupBridge.prototype.focus = noop;\n\nPopupBridge.prototype.close = noop;\n\nPopupBridge.prototype.isClosed = function () {\n  return Boolean(this._closed);\n};\n\nPopupBridge.prototype.redirect = function (redirectUrl) {\n  this.open({ openFrameUrl: redirectUrl });\n};\n\nmodule.exports = PopupBridge;\n\n},{\"../../../braintree-error\":99,\"../../shared/errors\":121}],116:[function(require,module,exports){\n\"use strict\";\n\nvar constants = require(\"../../../shared/constants\");\nvar position = require(\"./position\");\n\nfunction calculatePosition(type, userDefinedPosition, size) {\n  if (typeof userDefinedPosition !== \"undefined\") {\n    return userDefinedPosition;\n  }\n\n  return position[type](size);\n}\n\nmodule.exports = function composePopupOptions(options) {\n  var height = options.height || constants.DEFAULT_POPUP_HEIGHT;\n  var width = options.width || constants.DEFAULT_POPUP_WIDTH;\n  var top = calculatePosition(\"top\", options.top, height);\n  var left = calculatePosition(\"left\", options.left, width);\n\n  return [\n    constants.POPUP_BASE_OPTIONS,\n    \"height=\" + height,\n    \"width=\" + width,\n    \"top=\" + top,\n    \"left=\" + left,\n  ].join(\",\");\n};\n\n},{\"../../../shared/constants\":120,\"./position\":118}],117:[function(require,module,exports){\n\"use strict\";\n\nvar composeOptions = require(\"./compose-options\");\n\nfunction noop() {}\n\nfunction Popup(options) {\n  this._frame = null;\n  this._options = options || {};\n\n  this.open();\n}\n\nPopup.prototype.initialize = noop;\n\nPopup.prototype.open = function () {\n  this._frame = window.open(\n    this._options.openFrameUrl,\n    this._options.name,\n    composeOptions(this._options)\n  );\n};\n\nPopup.prototype.focus = function () {\n  this._frame.focus();\n};\n\nPopup.prototype.close = function () {\n  if (this._frame.closed) {\n    return;\n  }\n  this._frame.close();\n};\n\nPopup.prototype.isClosed = function () {\n  return !this._frame || Boolean(this._frame.closed);\n};\n\nPopup.prototype.redirect = function (redirectUrl) {\n  this._frame.location.href = redirectUrl;\n};\n\nmodule.exports = Popup;\n\n},{\"./compose-options\":116}],118:[function(require,module,exports){\n\"use strict\";\n\nfunction top(height) {\n  var windowHeight =\n    window.outerHeight || document.documentElement.clientHeight;\n  var windowTop = window.screenY == null ? window.screenTop : window.screenY;\n\n  return center(windowHeight, height, windowTop);\n}\n\nfunction left(width) {\n  var windowWidth = window.outerWidth || document.documentElement.clientWidth;\n  var windowLeft = window.screenX == null ? window.screenLeft : window.screenX;\n\n  return center(windowWidth, width, windowLeft);\n}\n\nfunction center(windowMetric, popupMetric, offset) {\n  return (windowMetric - popupMetric) / 2 + offset;\n}\n\nmodule.exports = {\n  top: top,\n  left: left,\n  center: center,\n};\n\n},{}],119:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  isIos: require(\"@braintree/browser-detection/is-ios\"),\n  isIosWKWebview: require(\"@braintree/browser-detection/is-ios-wkwebview\"),\n  isIE: require(\"@braintree/browser-detection/is-ie\"),\n  supportsPopups: require(\"@braintree/browser-detection/supports-popups\"),\n};\n\n},{\"@braintree/browser-detection/is-ie\":31,\"@braintree/browser-detection/is-ios\":37,\"@braintree/browser-detection/is-ios-wkwebview\":36,\"@braintree/browser-detection/supports-popups\":39}],120:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  DISPATCH_FRAME_NAME: \"dispatch\",\n  DISPATCH_FRAME_CLASS: \"braintree-dispatch-frame\",\n  POPUP_BASE_OPTIONS: \"resizable,scrollbars\",\n  DEFAULT_POPUP_WIDTH: 450,\n  DEFAULT_POPUP_HEIGHT: 535,\n  POPUP_POLL_INTERVAL: 100,\n  POPUP_CLOSE_TIMEOUT: 100,\n};\n\n},{}],121:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Popup Related Error Codes\n * @ignore\n * @description Errors that occur when using a component that opens a popup window.\n * @property {INTERNAL} FRAME_SERVICE_FRAME_CLOSED - Occurs when the frame is closed before tokenization can occur.\n * @property {INTERNAL} FRAME_SERVICE_FRAME_OPEN_FAILED - Occurs when the popup could not be opened.\n * @property {INTERNAL} FRAME_SERVICE_FRAME_OPEN_FAILED_IE_BUG - Occurs when the frame could not be opened because of a specific bug in Internet Explorer - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11324352/.\n */\n\nvar BraintreeError = require(\"../../braintree-error\");\n\nmodule.exports = {\n  FRAME_SERVICE_FRAME_CLOSED: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"FRAME_SERVICE_FRAME_CLOSED\",\n    message: \"Frame closed before tokenization could occur.\",\n  },\n  FRAME_SERVICE_FRAME_OPEN_FAILED: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"FRAME_SERVICE_FRAME_OPEN_FAILED\",\n    message: \"Frame failed to open.\",\n  },\n  FRAME_SERVICE_FRAME_OPEN_FAILED_IE_BUG: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"FRAME_SERVICE_FRAME_OPEN_FAILED_IE_BUG\",\n    message:\n      \"Could not open frame. This may be due to a bug in IE browsers when attempting to open an HTTPS page from a HTTP page. https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11324352/\",\n  },\n};\n\n},{\"../../braintree-error\":99}],122:[function(require,module,exports){\n\"use strict\";\n\nvar enumerate = require(\"../../enumerate\");\n\nmodule.exports = enumerate(\n  [\"DISPATCH_FRAME_READY\", \"DISPATCH_FRAME_REPORT\"],\n  \"frameService:\"\n);\n\n},{\"../../enumerate\":108}],123:[function(require,module,exports){\n\"use strict\";\n\nvar VERSION = \"3.88.3\";\nvar assign = require(\"./assign\").assign;\n\nfunction generateTokenizationParameters(configuration, overrides) {\n  var metadata = configuration.analyticsMetadata;\n  var basicTokenizationParameters = {\n    gateway: \"braintree\",\n    \"braintree:merchantId\": configuration.gatewayConfiguration.merchantId,\n    \"braintree:apiVersion\": \"v1\",\n    \"braintree:sdkVersion\": VERSION,\n    \"braintree:metadata\": JSON.stringify({\n      source: metadata.source,\n      integration: metadata.integration,\n      sessionId: metadata.sessionId,\n      version: VERSION,\n      platform: metadata.platform,\n    }),\n  };\n\n  return assign({}, basicTokenizationParameters, overrides);\n}\n\nmodule.exports = function (configuration, googlePayVersion, googleMerchantId) {\n  var data, paypalPaymentMethod;\n  var androidPayConfiguration = configuration.gatewayConfiguration.androidPay;\n  var environment =\n    configuration.gatewayConfiguration.environment === \"production\"\n      ? \"PRODUCTION\"\n      : \"TEST\";\n\n  if (googlePayVersion === 2) {\n    data = {\n      apiVersion: 2,\n      apiVersionMinor: 0,\n      environment: environment,\n      allowedPaymentMethods: [\n        {\n          type: \"CARD\",\n          parameters: {\n            allowedAuthMethods: [\"PAN_ONLY\", \"CRYPTOGRAM_3DS\"],\n            allowedCardNetworks: androidPayConfiguration.supportedNetworks.map(\n              function (card) {\n                return card.toUpperCase();\n              }\n            ),\n          },\n          tokenizationSpecification: {\n            type: \"PAYMENT_GATEWAY\",\n            parameters: generateTokenizationParameters(configuration, {\n              \"braintree:authorizationFingerprint\":\n                androidPayConfiguration.googleAuthorizationFingerprint,\n            }),\n          },\n        },\n      ],\n    };\n\n    if (googleMerchantId) {\n      data.merchantInfo = {\n        merchantId: googleMerchantId,\n      };\n    }\n\n    if (androidPayConfiguration.paypalClientId) {\n      paypalPaymentMethod = {\n        type: \"PAYPAL\",\n        parameters: {\n          /* eslint-disable camelcase */\n          purchase_context: {\n            purchase_units: [\n              {\n                payee: {\n                  client_id: androidPayConfiguration.paypalClientId,\n                },\n                recurring_payment: true,\n              },\n            ],\n          },\n          /* eslint-enable camelcase */\n        },\n        tokenizationSpecification: {\n          type: \"PAYMENT_GATEWAY\",\n          parameters: generateTokenizationParameters(configuration, {\n            \"braintree:paypalClientId\": androidPayConfiguration.paypalClientId,\n          }),\n        },\n      };\n\n      data.allowedPaymentMethods.push(paypalPaymentMethod);\n    }\n  } else {\n    data = {\n      environment: environment,\n      allowedPaymentMethods: [\"CARD\", \"TOKENIZED_CARD\"],\n      paymentMethodTokenizationParameters: {\n        tokenizationType: \"PAYMENT_GATEWAY\",\n        parameters: generateTokenizationParameters(configuration, {\n          \"braintree:authorizationFingerprint\":\n            androidPayConfiguration.googleAuthorizationFingerprint,\n        }),\n      },\n      cardRequirements: {\n        allowedCardNetworks: androidPayConfiguration.supportedNetworks.map(\n          function (card) {\n            return card.toUpperCase();\n          }\n        ),\n      },\n    };\n\n    if (configuration.authorizationType === \"TOKENIZATION_KEY\") {\n      data.paymentMethodTokenizationParameters.parameters[\n        \"braintree:clientKey\"\n      ] = configuration.authorization;\n    }\n\n    if (googleMerchantId) {\n      data.merchantId = googleMerchantId;\n    }\n\n    if (googlePayVersion) {\n      data.apiVersion = googlePayVersion;\n    }\n  }\n\n  return data;\n};\n\n},{\"./assign\":96}],124:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function inIframe(win) {\n  win = win || window;\n\n  try {\n    return win.self !== win.top;\n  } catch (e) {\n    return true;\n  }\n};\n\n},{}],125:[function(require,module,exports){\n\"use strict\";\n\nfunction convertDateStringToDate(dateString) {\n  var splitDate = dateString.split(\"-\");\n\n  return new Date(splitDate[0], splitDate[1], splitDate[2]);\n}\n\nfunction isDateStringBeforeOrOn(firstDate, secondDate) {\n  return (\n    convertDateStringToDate(firstDate) <= convertDateStringToDate(secondDate)\n  );\n}\n\nmodule.exports = isDateStringBeforeOrOn;\n\n},{}],126:[function(require,module,exports){\n\"use strict\";\n\nfunction isHTTPS(protocol) {\n  protocol = protocol || window.location.protocol;\n\n  return protocol === \"https:\";\n}\n\nmodule.exports = {\n  isHTTPS: isHTTPS,\n};\n\n},{}],127:[function(require,module,exports){\n\"use strict\";\n\nvar parser;\nvar legalHosts = {\n  \"paypal.com\": 1,\n  \"braintreepayments.com\": 1,\n  \"braintreegateway.com\": 1,\n  \"braintree-api.com\": 1,\n};\n\nfunction stripSubdomains(domain) {\n  return domain.split(\".\").slice(-2).join(\".\");\n}\n\nfunction isVerifiedDomain(url) {\n  var mainDomain;\n\n  url = url.toLowerCase();\n\n  if (!/^https:/.test(url)) {\n    return false;\n  }\n\n  parser = parser || document.createElement(\"a\");\n  parser.href = url;\n  mainDomain = stripSubdomains(parser.hostname);\n\n  return legalHosts.hasOwnProperty(mainDomain);\n}\n\nmodule.exports = isVerifiedDomain;\n\n},{}],128:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (value) {\n  return JSON.parse(JSON.stringify(value));\n};\n\n},{}],129:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (obj) {\n  return Object.keys(obj).filter(function (key) {\n    return typeof obj[key] === \"function\";\n  });\n};\n\n},{}],130:[function(require,module,exports){\n\"use strict\";\n\nfunction once(fn) {\n  var called = false;\n\n  return function () {\n    if (!called) {\n      called = true;\n      fn.apply(null, arguments);\n    }\n  };\n}\n\nmodule.exports = once;\n\n},{}],131:[function(require,module,exports){\n\"use strict\";\n\nvar PromisePolyfill = require(\"promise-polyfill\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\n\n// eslint-disable-next-line no-undef\nvar PromiseGlobal = typeof Promise !== \"undefined\" ? Promise : PromisePolyfill;\n\nExtendedPromise.suppressUnhandledPromiseMessage = true;\nExtendedPromise.setPromise(PromiseGlobal);\n\nmodule.exports = PromiseGlobal;\n\n},{\"@braintree/extended-promise\":42,\"promise-polyfill\":191}],132:[function(require,module,exports){\n\"use strict\";\n\nfunction _notEmpty(obj) {\n  var key;\n\n  for (key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/* eslint-disable no-mixed-operators */\nfunction _isArray(value) {\n  return (\n    (value &&\n      typeof value === \"object\" &&\n      typeof value.length === \"number\" &&\n      Object.prototype.toString.call(value) === \"[object Array]\") ||\n    false\n  );\n}\n/* eslint-enable no-mixed-operators */\n\nfunction hasQueryParams(url) {\n  url = url || window.location.href;\n\n  return /\\?/.test(url);\n}\n\nfunction parse(url) {\n  var query, params;\n\n  url = url || window.location.href;\n\n  if (!hasQueryParams(url)) {\n    return {};\n  }\n\n  query = url.split(\"?\")[1] || \"\";\n  query = query.replace(/#.*$/, \"\").split(\"&\");\n\n  params = query.reduce(function (toReturn, keyValue) {\n    var parts = keyValue.split(\"=\");\n    var key = decodeURIComponent(parts[0]);\n    var value = decodeURIComponent(parts[1]);\n\n    toReturn[key] = value;\n\n    return toReturn;\n  }, {});\n\n  return params;\n}\n\nfunction stringify(params, namespace) {\n  var k, v, p;\n  var query = [];\n\n  for (p in params) {\n    if (!params.hasOwnProperty(p)) {\n      continue;\n    }\n\n    v = params[p];\n\n    if (namespace) {\n      if (_isArray(params)) {\n        k = namespace + \"[]\";\n      } else {\n        k = namespace + \"[\" + p + \"]\";\n      }\n    } else {\n      k = p;\n    }\n    if (typeof v === \"object\") {\n      query.push(stringify(v, k));\n    } else {\n      query.push(encodeURIComponent(k) + \"=\" + encodeURIComponent(v));\n    }\n  }\n\n  return query.join(\"&\");\n}\n\nfunction queryify(url, params) {\n  url = url || \"\";\n\n  if (params != null && typeof params === \"object\" && _notEmpty(params)) {\n    url += url.indexOf(\"?\") === -1 ? \"?\" : \"\";\n    url += url.indexOf(\"=\") !== -1 ? \"&\" : \"\";\n    url += stringify(params);\n  }\n\n  return url;\n}\n\nmodule.exports = {\n  parse: parse,\n  stringify: stringify,\n  queryify: queryify,\n  hasQueryParams: hasQueryParams,\n};\n\n},{}],133:[function(require,module,exports){\n\"use strict\";\n\nvar uuid = require(\"@braintree/uuid\");\nvar findRootNode = require(\"./find-root-node\");\n\n// based on https://github.com/krakenjs/belter/blob/cdddc4f8ddb172d29db9e7e1ad1eeeacfb93e215/src/dom.js#L981-L1031\n// thanks @bluepnume\n\nfunction isShadowElement(element) {\n  element = findRootNode(element);\n\n  return element.toString() === \"[object ShadowRoot]\";\n}\n\nfunction getShadowHost(element) {\n  element = findRootNode(element);\n\n  if (!isShadowElement(element)) {\n    return null;\n  }\n\n  return element.host;\n}\n\nfunction transformToSlot(element, styles) {\n  var styleNode = findRootNode(element).querySelector(\"style\");\n  var shadowHost = getShadowHost(element);\n  var slotName = \"shadow-slot-\" + uuid();\n  var slot = document.createElement(\"slot\");\n  var slotProvider = document.createElement(\"div\");\n\n  slot.setAttribute(\"name\", slotName);\n  element.appendChild(slot);\n\n  slotProvider.setAttribute(\"slot\", slotName);\n  shadowHost.appendChild(slotProvider);\n\n  if (styles) {\n    if (!styleNode) {\n      styleNode = document.createElement(\"style\");\n      element.appendChild(styleNode);\n    }\n\n    styleNode.sheet.insertRule(\n      '::slotted([slot=\"' + slotName + '\"]) { ' + styles + \" }\"\n    );\n  }\n\n  if (isShadowElement(shadowHost)) {\n    return transformToSlot(slotProvider, styles);\n  }\n\n  return slotProvider;\n}\n\nmodule.exports = {\n  isShadowElement: isShadowElement,\n  getShadowHost: getShadowHost,\n  transformToSlot: transformToSlot,\n};\n\n},{\"./find-root-node\":110,\"@braintree/uuid\":47}],134:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (snakeString) {\n  if (snakeString.indexOf(\"_\") === -1) {\n    return snakeString;\n  }\n\n  return snakeString.toLowerCase().replace(/(\\_\\w)/g, function (match) {\n    return match[1].toUpperCase();\n  });\n};\n\n},{}],135:[function(require,module,exports){\n\"use strict\";\n\nfunction useMin(isDebug) {\n  return isDebug ? \"\" : \".min\";\n}\n\nmodule.exports = useMin;\n\n},{}],136:[function(require,module,exports){\n\"use strict\";\n\n// NEXT_MAJOR_VERSION old versions of IE don't have atob, in the\n// next major version, we're dropping support for those versions\n// so we can eliminate the need to have this atob polyfill\nvar atobNormalized = typeof atob === \"function\" ? atob : atobPolyfill;\n\nfunction atobPolyfill(base64String) {\n  var a, b, c, b1, b2, b3, b4, i;\n  var base64Matcher = new RegExp(\n    \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$\"\n  );\n  var characters =\n    \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n  var result = \"\";\n\n  if (!base64Matcher.test(base64String)) {\n    throw new Error(\"Non base64 encoded input passed to window.atob polyfill\");\n  }\n\n  i = 0;\n  do {\n    b1 = characters.indexOf(base64String.charAt(i++));\n    b2 = characters.indexOf(base64String.charAt(i++));\n    b3 = characters.indexOf(base64String.charAt(i++));\n    b4 = characters.indexOf(base64String.charAt(i++));\n\n    a = ((b1 & 0x3f) << 2) | ((b2 >> 4) & 0x3);\n    b = ((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf);\n    c = ((b3 & 0x3) << 6) | (b4 & 0x3f);\n\n    result +=\n      String.fromCharCode(a) +\n      (b ? String.fromCharCode(b) : \"\") +\n      (c ? String.fromCharCode(c) : \"\");\n  } while (i < base64String.length);\n\n  return result;\n}\n\nmodule.exports = {\n  atob: function (base64String) {\n    return atobNormalized.call(window, base64String);\n  },\n  _atob: atobPolyfill,\n};\n\n},{}],137:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.PayPal Checkout - Creation Error Codes\n * @description Errors that occur when [creating the PayPal Checkout component](./module-braintree-web_paypal-checkout.html#.create).\n * @property {MERCHANT} PAYPAL_NOT_ENABLED Occurs when PayPal is not enabled on the Braintree control panel.\n * @property {MERCHANT} PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED Occurs only when testing in Sandbox, when a PayPal sandbox account is not linked to the merchant account in the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout - createPayment Error Codes\n * @description Errors that occur when using the [`createPayment` method](./PayPalCheckout.html#createPayment).\n * @property {MERCHANT} PAYPAL_FLOW_OPTION_REQUIRED Occurs when a required option is missing.\n * @property {MERCHANT} PAYPAL_INVALID_PAYMENT_OPTION Occurs when an option contains an invalid value.\n * @property {NETWORK} PAYPAL_FLOW_FAILED Occurs when something goes wrong when initializing the flow.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout - startVaultInitiatedCheckout Error Codes\n * @description Errors that occur when using the [`startVaultInitiatedCheckout` method](./PayPalCheckout.html#startVaultInitiatedCheckout).\n * @property {MERCHANT} PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED Occurs when a required param is missing when calling the method.\n * @property {MERCHANT} PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED Occurs when PayPal window could not be opened. This often occurs because the call to start the vault initiated flow was not triggered from a click event.\n * @property {CUSTOMER} PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED Occurs when a customer closes the PayPal flow before completion.\n * @property {MERCHANT} PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS Occurs when the flow is initialized while an authorization is already in progress.\n * @property {NETWORK} PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED Occurs when something went wrong setting up the flow.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout - tokenizePayment Error Codes\n * @description Errors that occur when using the [`tokenizePayment` method](./PayPalCheckout.html#tokenizePayment).\n * @property {NETWORK} PAYPAL_ACCOUNT_TOKENIZATION_FAILED Occurs when PayPal account could not be tokenized.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  PAYPAL_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_NOT_ENABLED\",\n    message: \"PayPal is not enabled for this merchant.\",\n  },\n  PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED\",\n    message:\n      \"A linked PayPal Sandbox account is required to use PayPal Checkout in Sandbox. See https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#linked-paypal-testing for details on linking your PayPal sandbox with Braintree.\",\n  },\n  PAYPAL_ACCOUNT_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_ACCOUNT_TOKENIZATION_FAILED\",\n    message: \"Could not tokenize user's PayPal account.\",\n  },\n  PAYPAL_FLOW_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_FLOW_FAILED\",\n    message: \"Could not initialize PayPal flow.\",\n  },\n  PAYPAL_FLOW_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_FLOW_OPTION_REQUIRED\",\n    message: \"PayPal flow property is invalid or missing.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED\",\n    message: \"Something went wrong when setting up the checkout workflow.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\",\n    message:\n      \"PayPal popup failed to open, make sure to initiate the vault checkout in response to a user action.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED\",\n    message: \"Customer closed PayPal popup before authorizing.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS\",\n    message: \"Vault initiated checkout already in progress.\",\n  },\n  PAYPAL_INVALID_PAYMENT_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_INVALID_PAYMENT_OPTION\",\n    message: \"PayPal payment options are invalid.\",\n  },\n};\n\n},{\"../lib/braintree-error\":99}],138:[function(require,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/paypal-checkout\n * @description A component to integrate with the [PayPal JS SDK](https://github.com/paypal/paypal-checkout-components).\n */\n\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar PayPalCheckout = require(\"./paypal-checkout\");\nvar VERSION = \"3.88.3\";\n\n/**\n * @static\n * @function create\n * @description There are two ways to integrate the PayPal Checkout component. See the [PayPal Checkout constructor documentation](PayPalCheckout.html#PayPalCheckout) for more information and examples.\n *\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {string} [options.merchantAccountId] A non-default merchant account ID to use for tokenization.\n * @param {boolean} [options.autoSetDataUserIdToken=false] Whether or not to render the PayPal SDK button with a customer's vaulted PayPal account. Must be used in conjunction with a Client Token generated with a customer id.\n * @param {callback} [callback] The second argument, `data`, is the {@link PayPalCheckout} instance.\n * @example\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   // set up the PayPal JS SDK\n * }).catch(function (err) {\n *   console.error('Error!', err);\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"PayPal Checkout\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var instance = new PayPalCheckout(options);\n\n      return instance._initialize(options);\n    });\n}\n\n/**\n * @static\n * @function isSupported\n * @description Returns true if PayPal Checkout [supports this browser](index.html#browser-support-webviews).\n * @deprecated Previously, this method checked for Popup support in the browser. The PayPal JS SDK now falls back to a modal if popups are not supported.\n * @returns {Boolean} Returns true if PayPal Checkout supports this browser.\n */\nfunction isSupported() {\n  return true;\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  isSupported: isSupported,\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":97,\"./paypal-checkout\":139,\"@braintree/wrap-promise\":51}],139:[function(require,module,exports){\n\"use strict\";\n\nvar analytics = require(\"../lib/analytics\");\nvar assign = require(\"../lib/assign\").assign;\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar Promise = require(\"../lib/promise\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar convertToBraintreeError = require(\"../lib/convert-to-braintree-error\");\nvar errors = require(\"./errors\");\nvar constants = require(\"../paypal/shared/constants\");\nvar frameService = require(\"../lib/frame-service/external\");\nvar createAuthorizationData = require(\"../lib/create-authorization-data\");\nvar methods = require(\"../lib/methods\");\nvar useMin = require(\"../lib/use-min\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar querystring = require(\"../lib/querystring\");\nvar VERSION = \"3.88.3\";\nvar INTEGRATION_TIMEOUT_MS = require(\"../lib/constants\").INTEGRATION_TIMEOUT_MS;\n\nvar REQUIRED_PARAMS_FOR_START_VAULT_INITIATED_CHECKOUT = [\n  \"amount\",\n  \"currency\",\n  \"vaultInitiatedCheckoutPaymentMethodToken\",\n];\n\nvar PAYPAL_SDK_PRELOAD_URL =\n  \"https://www.{ENV}paypal.com/smart/buttons/preload\";\n\n/**\n * PayPal Checkout tokenized payload. Returned in {@link PayPalCheckout#tokenizePayment}'s callback as the second argument, `data`.\n * @typedef {object} PayPalCheckout~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type The payment method type, always `PayPalAccount`.\n * @property {object} details Additional PayPal account details.\n * @property {string} details.email User's email address.\n * @property {string} details.payerId User's payer ID, the unique identifier for each PayPal account.\n * @property {string} details.firstName User's given name.\n * @property {string} details.lastName User's surname.\n * @property {?string} details.countryCode User's 2 character country code.\n * @property {?string} details.phone User's phone number (e.g. 555-867-5309).\n * @property {?object} details.shippingAddress User's shipping address details, only available if shipping address is enabled.\n * @property {string} details.shippingAddress.recipientName Recipient of postage.\n * @property {string} details.shippingAddress.line1 Street number and name.\n * @property {string} details.shippingAddress.line2 Extended address.\n * @property {string} details.shippingAddress.city City or locality.\n * @property {string} details.shippingAddress.state State or region.\n * @property {string} details.shippingAddress.postalCode Postal code.\n * @property {string} details.shippingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} details.billingAddress User's billing address details.\n * Not available to all merchants; [contact support](https://developer.paypal.com/braintree/help) for details on eligibility and enabling this feature.\n * Alternatively, see `shippingAddress` above as an available client option.\n * @property {string} details.billingAddress.line1 Street number and name.\n * @property {string} details.billingAddress.line2 Extended address.\n * @property {string} details.billingAddress.city City or locality.\n * @property {string} details.billingAddress.state State or region.\n * @property {string} details.billingAddress.postalCode Postal code.\n * @property {string} details.billingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} creditFinancingOffered This property will only be present when the customer pays with PayPal Credit.\n * @property {object} creditFinancingOffered.totalCost This is the estimated total payment amount including interest and fees the user will pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalCost.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.totalCost.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {number} creditFinancingOffered.term Length of financing terms in months.\n * @property {object} creditFinancingOffered.monthlyPayment This is the estimated amount per month that the customer will need to pay including fees and interest.\n * @property {string} creditFinancingOffered.monthlyPayment.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.monthlyPayment.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {object} creditFinancingOffered.totalInterest Estimated interest or fees amount the payer will have to pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalInterest.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.totalInterest.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {boolean} creditFinancingOffered.payerAcceptance Status of whether the customer ultimately was approved for and chose to make the payment using the approved installment credit.\n * @property {boolean} creditFinancingOffered.cartAmountImmutable Indicates whether the cart amount is editable after payer's acceptance on PayPal side.\n */\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/paypal-checkout.create|paypal-checkout.create}\n * @classdesc This class represents a PayPal Checkout component that coordinates with the {@link https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page|PayPal SDK}. Instances of this class can generate payment data and tokenize authorized payments.\n *\n * All UI (such as preventing actions on the parent page while authentication is in progress) is managed by the {@link https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page|PayPal SDK}. You must provide your PayPal `client-id` as a query parameter. You can [retrieve this value from the PayPal Dashboard](https://developer.paypal.com/docs/checkout/integrate/#1-get-paypal-rest-api-credentials).\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/paypal-checkout.create|braintree-web.paypal-checkout.create} instead.</strong>\n *\n * #### Integrate Checkout Flow with PayPal SDK\n *\n * You must have [PayPal's script, configured with various query parameters](https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page), loaded on your page:\n *\n * ```html\n * <script src=\"https://www.paypal.com/sdk/js?client-id=your-sandbox-or-prod-client-id\"></script>\n * <div id=\"paypal-button\"></div>\n * ```\n *\n * When passing values in the `createPayment` method, make sure they match the [corresponding parameters in the query parameters for the PayPal SDK script](https://developer.paypal.com/docs/checkout/reference/customize-sdk/).\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Buttons({\n *     createOrder: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'checkout',\n *         currency: 'USD',\n *         amount: '10.00',\n *         intent: 'capture' // this value must either be `capture` or match the intent passed into the PayPal SDK intent query parameter\n *         // your other createPayment options here\n *       });\n *     },\n *\n *     onApprove: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     },\n *\n *     onCancel: function () {\n *       // handle case where user cancels\n *     },\n *\n *     onError: function (err) {\n *       // handle case where error occurs\n *     }\n *   }).render('#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * #### Integrate Vault Flow with PayPal SDK\n *\n * You must have [PayPal's script, configured with various query parameters](https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page), loaded on your page:\n *\n * ```html\n * <script src=\"https://www.paypal.com/sdk/js?client-id=your-sandbox-or-prod-client-id&vault=true\"></script>\n * <div id=\"paypal-button\"></div>\n * ```\n *\n * When passing values in the `createPayment` method, make sure they match the [corresponding parameters in the query parameters for the PayPal SDK script](https://developer.paypal.com/docs/checkout/reference/customize-sdk/).\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Buttons({\n *     createBillingAgreement: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'vault'\n *         // your other createPayment options here\n *       });\n *     },\n *\n *     onApprove: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     },\n *\n *     onCancel: function () {\n *       // handle case where user cancels\n *     },\n *\n *     onError: function (err) {\n *       // handle case where error occurs\n *     }\n *   }).render('#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * #### Integrate with Checkout.js (deprecated PayPal SDK)\n *\n * If you are creating a new PayPal integration, please follow the previous integration guide to use the current version of the PayPal SDK. Use this integration guide only as a reference if you are already integrated with Checkout.js.\n *\n * You must have PayPal's Checkout.js script loaded on your page.\n *\n * ```html\n * <script src=\"https://www.paypalobjects.com/api/checkout.js\" data-version-4 log-level=\"warn\"></script>\n * ```\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Button.render({\n *     env: 'production', // or 'sandbox'\n *\n *     payment: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         // your createPayment options here\n *       });\n *     },\n *\n *     onAuthorize: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     }\n *   }, '#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n */\nfunction PayPalCheckout(options) {\n  this._merchantAccountId = options.merchantAccountId;\n  // TODO remove this requirement for it to be opt in.\n  // This feature is not yet GA, so we're intentionally making\n  // it opt in and not publicly documenting it yet. Once it's\n  // GA, we can remove the requirement to opt in to it\n  this._autoSetDataUserIdToken = Boolean(options.autoSetDataUserIdToken);\n}\n\nPayPalCheckout.prototype._initialize = function (options) {\n  var config;\n\n  if (options.client) {\n    config = options.client.getConfiguration();\n    this._authorizationInformation = {\n      fingerprint: config.authorizationFingerprint,\n      environment: config.gatewayConfiguration.environment,\n    };\n  } else {\n    config = createAuthorizationData(options.authorization);\n    this._authorizationInformation = {\n      fingerprint: config.attrs.authorizationFingerprint,\n      environment: config.environment,\n    };\n  }\n\n  this._clientPromise = createDeferredClient\n    .create({\n      authorization: options.authorization,\n      client: options.client,\n      debug: options.debug,\n      assetsUrl: createAssetsUrl.create(options.authorization),\n      name: \"PayPal Checkout\",\n    })\n    .then(\n      function (client) {\n        this._configuration = client.getConfiguration();\n\n        // we skip these checks if a merchant account id is\n        // passed in, because the default merchant account\n        // may not have paypal enabled\n        if (!this._merchantAccountId) {\n          if (!this._configuration.gatewayConfiguration.paypalEnabled) {\n            this._setupError = new BraintreeError(errors.PAYPAL_NOT_ENABLED);\n          } else if (\n            this._configuration.gatewayConfiguration.paypal\n              .environmentNoNetwork === true\n          ) {\n            this._setupError = new BraintreeError(\n              errors.PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED\n            );\n          }\n        }\n\n        if (this._setupError) {\n          return Promise.reject(this._setupError);\n        }\n\n        analytics.sendEvent(client, \"paypal-checkout.initialized\");\n        this._frameServicePromise = this._setupFrameService(client);\n\n        return client;\n      }.bind(this)\n    );\n\n  // if client was passed in, let config checks happen before\n  // resolving the instance. Otherwise, just resolve the instance\n  if (options.client) {\n    return this._clientPromise.then(\n      function () {\n        return this;\n      }.bind(this)\n    );\n  }\n\n  return Promise.resolve(this);\n};\n\nPayPalCheckout.prototype._setupFrameService = function (client) {\n  var frameServicePromise = new ExtendedPromise();\n  var config = client.getConfiguration();\n  var timeoutRef = setTimeout(function () {\n    analytics.sendEvent(client, \"paypal-checkout.frame-service.timed-out\");\n    frameServicePromise.reject(\n      new BraintreeError(\n        errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED\n      )\n    );\n  }, INTEGRATION_TIMEOUT_MS);\n\n  this._assetsUrl =\n    config.gatewayConfiguration.paypal.assetsUrl + \"/web/\" + VERSION;\n  this._isDebug = config.isDebug;\n  // Note: this is using the static landing frame that the deprecated PayPal component builds and uses\n  this._loadingFrameUrl =\n    this._assetsUrl +\n    \"/html/paypal-landing-frame\" +\n    useMin(this._isDebug) +\n    \".html\";\n\n  frameService.create(\n    {\n      name: \"braintreepaypallanding\",\n      dispatchFrameUrl:\n        this._assetsUrl +\n        \"/html/dispatch-frame\" +\n        useMin(this._isDebug) +\n        \".html\",\n      openFrameUrl: this._loadingFrameUrl,\n    },\n    function (service) {\n      this._frameService = service;\n      clearTimeout(timeoutRef);\n\n      frameServicePromise.resolve();\n    }.bind(this)\n  );\n\n  return frameServicePromise;\n};\n\n/**\n * @typedef {object} PayPalCheckout~lineItem\n * @property {string} quantity Number of units of the item purchased. This value must be a whole number and can't be negative or zero.\n * @property {string} unitAmount Per-unit price of the item. Can include up to 2 decimal places. This value can't be negative or zero.\n * @property {string} name Item name. Maximum 127 characters.\n * @property {string} kind Indicates whether the line item is a debit (sale) or credit (refund) to the customer. Accepted values: `debit` and `credit`.\n * @property {?string} unitTaxAmount Per-unit tax price of the item. Can include up to 2 decimal places. This value can't be negative or zero.\n * @property {?string} description Item description. Maximum 127 characters.\n * @property {?string} productCode Product or UPC code for the item. Maximum 127 characters.\n * @property {?string} url The URL to product information.\n */\n\n/**\n * @typedef {object} PayPalCheckout~shippingOption\n * @property {string} id A unique ID that identifies a payer-selected shipping option.\n * @property {string} label A description that the payer sees, which helps them choose an appropriate shipping option. For example, `Free Shipping`, `USPS Priority Shipping`, `Expédition prioritaire USPS`, or `USPS yōuxiān fā huò`. Localize this description to the payer's locale.\n * @property {boolean} selected If `selected = true` is specified as part of the API request it represents the shipping option that the payee/merchant expects to be pre-selected for the payer when they first view the shipping options within the PayPal checkout experience. As part of the response if a shipping option has `selected = true` it represents the shipping option that the payer selected during the course of checkout with PayPal. Only 1 `shippingOption` can be set to `selected = true`.\n * @property {string} type The method by which the payer wants to get their items. The possible values are:\n * * `SHIPPING` - The payer intends to receive the items at a specified address.\n * * `PICKUP` - The payer intends to pick up the items at a specified address. For example, a store address.\n * @property {object} amount The shipping cost for the selected option.\n * @property {string} amount.currency The three-character ISO-4217 currency code. PayPal does not support all currencies.\n * @property {string} amount.value The amount the shipping option will cost. Includes the specified number of digits after decimal separator for the ISO-4217 currency code.\n */\n\n/**\n * Creates a PayPal payment ID or billing token using the given options. This is meant to be passed to the PayPal JS SDK.\n * When a {@link callback} is defined, the function returns undefined and invokes the callback with the id to be used with the PayPal JS SDK. Otherwise, it returns a Promise that resolves with the id.\n * @public\n * @param {object} options All options for the PayPalCheckout component.\n * @param {string} options.flow Set to 'checkout' for one-time payment flow, or 'vault' for Vault flow. If 'vault' is used with a client token generated with a customer ID, the PayPal account will be added to that customer as a saved payment method.\n * @param {string} [options.intent=authorize]\n * * `authorize` - Submits the transaction for authorization but not settlement.\n * * `order` - Validates the transaction without an authorization (i.e. without holding funds). Useful for authorizing and capturing funds up to 90 days after the order has been placed. Only available for Checkout flow.\n * * `capture` - Payment will be immediately submitted for settlement upon creating a transaction. `sale` can be used as an alias for this value.\n * @param {boolean} [options.offerCredit=false] Offers PayPal Credit as the default funding instrument for the transaction. If the customer isn't pre-approved for PayPal Credit, they will be prompted to apply for it.\n * @param {(string|number)} [options.amount] The amount of the transaction. Required when using the Checkout flow.\n * @param {string} [options.currency] The currency code of the amount, such as 'USD'. Required when using the Checkout flow.\n * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account\n * @param {boolean} [options.requestBillingAgreement] If `true` and `flow = checkout`, the customer will be prompted to consent to a billing agreement during the checkout flow. This value is ignored when `flow = vault`.\n * @param {object} [options.billingAgreementDetails] When `requestBillingAgreement = true`, allows for details to be set for the billing agreement portion of the flow.\n * @param {string} [options.billingAgreementDetails.description] Description of the billing agreement to display to the customer.\n * @param {string} [options.vaultInitiatedCheckoutPaymentMethodToken] Use the payment method nonce representing a PayPal account with a Billing Agreement ID to create the payment and redirect the customer to select a new financial instrument. This option is only applicable to the `checkout` flow.\n * @param {shippingOption[]} [options.shippingOptions] List of shipping options offered by the payee or merchant to the payer to ship or pick up their items. **Note:** `shippingOptions` may not be passed with `intent=\"order\"`.\n * @param {boolean} [options.enableShippingAddress=false] Returns a shipping address object in {@link PayPal#tokenize}.\n * @param {object} [options.shippingAddressOverride] Allows you to pass a shipping address you have already collected into the PayPal payment flow.\n * @param {string} options.shippingAddressOverride.line1 Street address.\n * @param {string} [options.shippingAddressOverride.line2] Street address (extended).\n * @param {string} options.shippingAddressOverride.city City.\n * @param {string} options.shippingAddressOverride.state State.\n * @param {string} options.shippingAddressOverride.postalCode Postal code.\n * @param {string} options.shippingAddressOverride.countryCode Country.\n * @param {string} [options.shippingAddressOverride.phone] Phone number.\n * @param {string} [options.shippingAddressOverride.recipientName] Recipient's name.\n * @param {boolean} [options.shippingAddressEditable=true] Set to false to disable user editing of the shipping address.\n * @param {string} [options.billingAgreementDescription] Use this option to set the description of the preapproved payment agreement visible to customers in their PayPal profile during Vault flows. Max 255 characters.\n * @param {string} [options.landingPageType] Use this option to specify the PayPal page to display when a user lands on the PayPal site to complete the payment.\n * * `login` - A PayPal account login page is used.\n * * `billing` - A non-PayPal account landing page is used.\n * @param {lineItem[]} [options.lineItems] The {@link PayPalCheckout~lineItem|line items} for this transaction. It can include up to 249 line items.\n * @param {callback} [callback] The second argument is a PayPal `paymentId` or `billingToken` string, depending on whether `options.flow` is `checkout` or `vault`. This is also what is resolved by the promise if no callback is provided.\n * @example\n * // this paypal object is created by the PayPal JS SDK\n * // see https://github.com/paypal/paypal-checkout-components\n * paypal.Buttons({\n *   createOrder: function () {\n *     // when createPayment resolves, it is automatically passed to the PayPal JS SDK\n *     return paypalCheckoutInstance.createPayment({\n *       flow: 'checkout',\n *       amount: '10.00',\n *       currency: 'USD',\n *       intent: 'capture' // this value must either be `capture` or match the intent passed into the PayPal SDK intent query parameter\n *     });\n *   },\n *   // Add other options, e.g. onApproved, onCancel, onError\n * }).render('#paypal-button');\n *\n * @example\n * // shippingOptions are passed to createPayment. You can review the result from onAuthorize to determine which shipping option id was selected.\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Button.render({\n *     env: 'production'\n *\n *     payment: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'checkout',\n *         amount: '10.00',\n *         currency: 'USD',\n *         shippingOptions: [\n *           {\n *             id: 'UUID-9',\n *             type: 'PICKUP',\n *             label: 'Store Location Five',\n *             selected: true,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           },\n *           {\n *             id: 'shipping-speed-fast',\n *             type: 'SHIPPING',\n *             label: 'Fast Shipping',\n *             selected: false,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           },\n *           {\n *             id: 'shipping-speed-slow',\n *             type: 'SHIPPING',\n *             label: 'Slow Shipping',\n *             selected: false,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           }\n *         ]\n *       });\n *     },\n *\n *     onAuthorize: function (data, actions) {\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     }\n *   }, '#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.createPayment = function (options) {\n  if (!options || !constants.FLOW_ENDPOINTS.hasOwnProperty(options.flow)) {\n    return Promise.reject(\n      new BraintreeError(errors.PAYPAL_FLOW_OPTION_REQUIRED)\n    );\n  }\n\n  analytics.sendEvent(this._clientPromise, \"paypal-checkout.createPayment\");\n\n  return this._createPaymentResource(options).then(function (response) {\n    var flowToken;\n\n    if (options.flow === \"checkout\") {\n      flowToken = response.paymentResource.redirectUrl.match(/EC-\\w+/)[0];\n    } else {\n      flowToken = response.agreementSetup.tokenId;\n    }\n\n    return flowToken;\n  });\n};\n\nPayPalCheckout.prototype._createPaymentResource = function (options, config) {\n  var self = this;\n  var endpoint = \"paypal_hermes/\" + constants.FLOW_ENDPOINTS[options.flow];\n\n  delete this.intentFromCreatePayment;\n\n  config = config || {};\n\n  if (options.offerCredit === true) {\n    analytics.sendEvent(this._clientPromise, \"paypal-checkout.credit.offered\");\n  }\n\n  return this._clientPromise\n    .then(function (client) {\n      return client\n        .request({\n          endpoint: endpoint,\n          method: \"post\",\n          data: self._formatPaymentResourceData(options, config),\n        })\n        .then(function (data) {\n          self.intentFromCreatePayment = options.intent;\n\n          return data;\n        });\n    })\n    .catch(function (err) {\n      var status;\n\n      if (self._setupError) {\n        return Promise.reject(self._setupError);\n      }\n\n      status = err.details && err.details.httpStatus;\n\n      if (status === 422) {\n        return Promise.reject(\n          new BraintreeError({\n            type: errors.PAYPAL_INVALID_PAYMENT_OPTION.type,\n            code: errors.PAYPAL_INVALID_PAYMENT_OPTION.code,\n            message: errors.PAYPAL_INVALID_PAYMENT_OPTION.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.PAYPAL_FLOW_FAILED.type,\n          code: errors.PAYPAL_FLOW_FAILED.code,\n          message: errors.PAYPAL_FLOW_FAILED.message,\n        })\n      );\n    });\n};\n\n/**\n * Initializes the PayPal checkout flow with a payment method nonce that represents a vaulted PayPal account.\n * When a {@link callback} is defined, the function returns undefined and invokes the callback with the id to be used with the PayPal JS SDK. Otherwise, it returns a Promise that resolves with the id.\n * @public\n * @ignore\n * @param {object} options These options are identical to the {@link PayPalCheckout#createPayment|options for creating a payment resource}, except for the following:\n * * `flow` cannot be set (will always be `'checkout'`)\n * * `amount`, `currency`, and `vaultInitiatedCheckoutPaymentMethodToken` are required instead of optional\n * * Additional configuration is available (listed below)\n * @param {boolean} [options.optOutOfModalBackdrop=false] By default, the webpage will darken and become unusable while the PayPal window is open. For full control of the UI, pass `true` for this option.\n * @param {callback} [callback] The second argument, <code>payload</code>, is a {@link PayPalCheckout~tokenizePayload|tokenizePayload}. If no callback is provided, the promise resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.\n * @example\n * paypalCheckoutInstance.startVaultInitiatedCheckout({\n *   vaultInitiatedCheckoutPaymentMethodToken: 'nonce-that-represents-a-vaulted-paypal-account',\n *   amount: '10.00',\n *   currency: 'USD'\n * }).then(function (payload) {\n *   // send payload.nonce to your server\n * }).catch(function (err) {\n *   if (err.code === 'PAYPAL_POPUP_CLOSED') {\n *     // indicates that customer canceled by\n *     // manually closing the PayPal popup\n *   }\n *\n *   // handle other errors\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.startVaultInitiatedCheckout = function (options) {\n  var missingRequiredParam;\n  var self = this;\n\n  if (this._vaultInitiatedCheckoutInProgress) {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"paypal-checkout.startVaultInitiatedCheckout.error.already-in-progress\"\n    );\n\n    return Promise.reject(\n      new BraintreeError(\n        errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS\n      )\n    );\n  }\n\n  REQUIRED_PARAMS_FOR_START_VAULT_INITIATED_CHECKOUT.forEach(function (param) {\n    if (!options.hasOwnProperty(param)) {\n      missingRequiredParam = param;\n    }\n  });\n\n  if (missingRequiredParam) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED.type,\n        code: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED.code,\n        message: \"Required param \" + missingRequiredParam + \" is missing.\",\n      })\n    );\n  }\n\n  this._vaultInitiatedCheckoutInProgress = true;\n  this._addModalBackdrop(options);\n\n  options = assign({}, options, {\n    flow: \"checkout\",\n  });\n\n  analytics.sendEvent(\n    this._clientPromise,\n    \"paypal-checkout.startVaultInitiatedCheckout.started\"\n  );\n\n  return this._waitForVaultInitiatedCheckoutDependencies()\n    .then(function () {\n      var frameCommunicationPromise = new ExtendedPromise();\n      var startVaultInitiatedCheckoutPromise = self\n        ._createPaymentResource(options, {\n          returnUrl: self._constructVaultCheckutUrl(\"redirect-frame\"),\n          cancelUrl: self._constructVaultCheckutUrl(\"cancel-frame\"),\n        })\n        .then(function (response) {\n          var redirectUrl = response.paymentResource.redirectUrl;\n\n          self._frameService.redirect(redirectUrl);\n\n          return frameCommunicationPromise;\n        });\n\n      self._frameService.open(\n        {},\n        self._createFrameServiceCallback(frameCommunicationPromise)\n      );\n\n      return startVaultInitiatedCheckoutPromise;\n    })\n    .catch(function (err) {\n      self._vaultInitiatedCheckoutInProgress = false;\n      self._removeModalBackdrop();\n\n      if (err.code === \"FRAME_SERVICE_FRAME_CLOSED\") {\n        analytics.sendEvent(\n          self._clientPromise,\n          \"paypal-checkout.startVaultInitiatedCheckout.canceled.by-customer\"\n        );\n\n        return Promise.reject(\n          new BraintreeError(\n            errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED\n          )\n        );\n      }\n\n      if (self._frameService) {\n        self._frameService.close();\n      }\n\n      if (\n        err.code &&\n        err.code.indexOf(\"FRAME_SERVICE_FRAME_OPEN_FAILED\") > -1\n      ) {\n        analytics.sendEvent(\n          self._clientPromise,\n          \"paypal-checkout.startVaultInitiatedCheckout.failed.popup-not-opened\"\n        );\n\n        return Promise.reject(\n          new BraintreeError({\n            code: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\n              .code,\n            type: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\n              .type,\n            message:\n              errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\n                .message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(err);\n    })\n    .then(function (response) {\n      self._frameService.close();\n      self._vaultInitiatedCheckoutInProgress = false;\n      self._removeModalBackdrop();\n      analytics.sendEvent(\n        self._clientPromise,\n        \"paypal-checkout.startVaultInitiatedCheckout.succeeded\"\n      );\n\n      return Promise.resolve(response);\n    });\n};\n\nPayPalCheckout.prototype._addModalBackdrop = function (options) {\n  if (options.optOutOfModalBackdrop) {\n    return;\n  }\n\n  if (!this._modalBackdrop) {\n    this._modalBackdrop = document.createElement(\"div\");\n    this._modalBackdrop.setAttribute(\n      \"data-braintree-paypal-vault-initiated-checkout-modal\",\n      true\n    );\n    this._modalBackdrop.style.position = \"fixed\";\n    this._modalBackdrop.style.top = 0;\n    this._modalBackdrop.style.bottom = 0;\n    this._modalBackdrop.style.left = 0;\n    this._modalBackdrop.style.right = 0;\n    this._modalBackdrop.style.zIndex = 9999;\n    this._modalBackdrop.style.background = \"black\";\n    this._modalBackdrop.style.opacity = \"0.7\";\n    this._modalBackdrop.addEventListener(\n      \"click\",\n      function () {\n        this.focusVaultInitiatedCheckoutWindow();\n      }.bind(this)\n    );\n  }\n\n  document.body.appendChild(this._modalBackdrop);\n};\n\nPayPalCheckout.prototype._removeModalBackdrop = function () {\n  if (!(this._modalBackdrop && this._modalBackdrop.parentNode)) {\n    return;\n  }\n\n  this._modalBackdrop.parentNode.removeChild(this._modalBackdrop);\n};\n\n/**\n * Closes the PayPal window if it is opened via `startVaultInitiatedCheckout`.\n * @public\n * @ignore\n * @param {callback} [callback] Gets called when window is closed.\n * @example\n * paypalCheckoutInstance.closeVaultInitiatedCheckoutWindow();\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.closeVaultInitiatedCheckoutWindow = function () {\n  if (this._vaultInitiatedCheckoutInProgress) {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"paypal-checkout.startVaultInitiatedCheckout.canceled.by-merchant\"\n    );\n  }\n\n  return this._waitForVaultInitiatedCheckoutDependencies().then(\n    function () {\n      this._frameService.close();\n    }.bind(this)\n  );\n};\n\n/**\n * Focuses the PayPal window if it is opened via `startVaultInitiatedCheckout`.\n * @public\n * @ignore\n * @param {callback} [callback] Gets called when window is focused.\n * @example\n * paypalCheckoutInstance.focusVaultInitiatedCheckoutWindow();\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.focusVaultInitiatedCheckoutWindow = function () {\n  return this._waitForVaultInitiatedCheckoutDependencies().then(\n    function () {\n      this._frameService.focus();\n    }.bind(this)\n  );\n};\n\nPayPalCheckout.prototype._createFrameServiceCallback = function (\n  frameCommunicationPromise\n) {\n  var self = this;\n\n  // TODO when a merchant integrates an iOS or Android integration\n  // with a webview using the web SDK, we will have to add popupbridge\n  // support\n  return function (err, payload) {\n    if (err) {\n      frameCommunicationPromise.reject(err);\n    } else if (payload) {\n      self._frameService.redirect(self._loadingFrameUrl);\n      self\n        .tokenizePayment({\n          paymentToken: payload.token,\n          payerID: payload.PayerID,\n          paymentID: payload.paymentId,\n        })\n        .then(function (res) {\n          frameCommunicationPromise.resolve(res);\n        })\n        .catch(function (tokenizationError) {\n          frameCommunicationPromise.reject(tokenizationError);\n        });\n    }\n  };\n};\n\nPayPalCheckout.prototype._waitForVaultInitiatedCheckoutDependencies =\n  function () {\n    var self = this;\n\n    return this._clientPromise.then(function () {\n      return self._frameServicePromise;\n    });\n  };\n\nPayPalCheckout.prototype._constructVaultCheckutUrl = function (frameName) {\n  var serviceId = this._frameService._serviceId;\n\n  return (\n    this._assetsUrl +\n    \"/html/\" +\n    frameName +\n    useMin(this._isDebug) +\n    \".html?channel=\" +\n    serviceId\n  );\n};\n\n/**\n * Tokenizes the authorize data from the PayPal JS SDK when completing a buyer approval flow.\n * When a {@link callback} is defined, invokes the callback with {@link PayPalCheckout~tokenizePayload|tokenizePayload} and returns undefined. Otherwise, returns a Promise that resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.\n * @public\n * @param {object} tokenizeOptions Tokens and IDs required to tokenize the payment.\n * @param {string} tokenizeOptions.payerId Payer ID returned by PayPal `onApproved` callback.\n * @param {string} [tokenizeOptions.paymentId] Payment ID returned by PayPal `onApproved` callback.\n * @param {string} [tokenizeOptions.billingToken] Billing Token returned by PayPal `onApproved` callback.\n * @param {boolean} [tokenizeOptions.vault=true] Whether or not to vault the resulting PayPal account (if using a client token generated with a customer id and the vault flow).\n * @param {callback} [callback] The second argument, <code>payload</code>, is a {@link PayPalCheckout~tokenizePayload|tokenizePayload}. If no callback is provided, the promise resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.\n * @example <caption>Opt out of auto-vaulting behavior</caption>\n * // create the paypalCheckoutInstance with a client token generated with a customer id\n * paypal.Buttons({\n *   createBillingAgreement: function () {\n *     return paypalCheckoutInstance.createPayment({\n *       flow: 'vault'\n *       // your other createPayment options here\n *     });\n *   },\n *   onApproved: function (data) {\n *     data.vault = false;\n *\n *     return paypalCheckoutInstance.tokenizePayment(data);\n *   },\n *   // Add other options, e.g. onCancel, onError\n * }).render('#paypal-button');\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.tokenizePayment = function (tokenizeOptions) {\n  var self = this;\n  var shouldVault = true;\n  var payload;\n  var options = {\n    flow:\n      tokenizeOptions.billingToken && !tokenizeOptions.paymentID\n        ? \"vault\"\n        : \"checkout\",\n    intent: tokenizeOptions.intent || this.intentFromCreatePayment,\n  };\n  var params = {\n    // The paymentToken provided by the PayPal JS SDK is the EC Token\n    ecToken: tokenizeOptions.paymentToken,\n    billingToken: tokenizeOptions.billingToken,\n    payerId: tokenizeOptions.payerID,\n    paymentId: tokenizeOptions.paymentID,\n    shippingOptionsId: tokenizeOptions.shippingOptionsId,\n  };\n\n  if (tokenizeOptions.hasOwnProperty(\"vault\")) {\n    shouldVault = tokenizeOptions.vault;\n  }\n\n  options.vault = shouldVault;\n\n  analytics.sendEvent(\n    this._clientPromise,\n    \"paypal-checkout.tokenization.started\"\n  );\n\n  return this._clientPromise\n    .then(function (client) {\n      return client.request({\n        endpoint: \"payment_methods/paypal_accounts\",\n        method: \"post\",\n        data: self._formatTokenizeData(options, params),\n      });\n    })\n    .then(function (response) {\n      payload = self._formatTokenizePayload(response);\n\n      analytics.sendEvent(\n        self._clientPromise,\n        \"paypal-checkout.tokenization.success\"\n      );\n      if (payload.creditFinancingOffered) {\n        analytics.sendEvent(\n          self._clientPromise,\n          \"paypal-checkout.credit.accepted\"\n        );\n      }\n\n      return payload;\n    })\n    .catch(function (err) {\n      if (self._setupError) {\n        return Promise.reject(self._setupError);\n      }\n\n      analytics.sendEvent(\n        self._clientPromise,\n        \"paypal-checkout.tokenization.failed\"\n      );\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.type,\n          code: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.code,\n          message: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.message,\n        })\n      );\n    });\n};\n\n/**\n * Resolves with the PayPal client id to be used when loading the PayPal SDK.\n * @public\n * @param {callback} [callback] The second argument, <code>id</code>, is a the PayPal client id. If no callback is provided, the promise resolves with the PayPal client id.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * paypalCheckoutInstance.getClientId().then(function (id) {\n *  var script = document.createElement('script');\n *\n *  script.src = 'https://www.paypal.com/sdk/js?client-id=' + id;\n *  script.onload = function () {\n *    // setup the PayPal SDK\n *  };\n *\n *  document.body.appendChild(script);\n * });\n */\nPayPalCheckout.prototype.getClientId = function () {\n  return this._clientPromise.then(function (client) {\n    return client.getConfiguration().gatewayConfiguration.paypal.clientId;\n  });\n};\n\n/**\n * Resolves when the PayPal SDK has been successfully loaded onto the page.\n * @public\n * @param {object} [options] A configuration object to modify the query params and data-attributes on the PayPal SDK. A subset of the parameters are listed below. For a full list of query params, see the [PayPal docs](https://developer.paypal.com/docs/checkout/reference/customize-sdk/?mark=query#query-parameters).\n * @param {string} [options.client-id] By default, this will be the client id associated with the authorization used to create the Braintree component. When used in conjunction with passing `authorization` when creating the PayPal Checkout component, you can speed up the loading of the PayPal SDK.\n * @param {string} [options.intent=\"authorize\"] By default, the PayPal SDK defaults to an intent of `capture`. Since the default intent when calling {@link PayPalCheckout#createPayment|`createPayment`} is `authorize`, the PayPal SDK will be loaded with `intent=authorize`. If you wish to use a different intent when calling {@link PayPalCheckout#createPayment|`createPayment`}, make sure it matches here. If `sale` is used, it will be converted to `capture` for the PayPal SDK. If the `vault: true` param is used, `tokenize` will be passed as the default intent.\n * @param {string} [options.locale=en_US] Use this option to change the language, links, and terminology used in the PayPal flow. This locale will be used unless the buyer has set a preferred locale for their account. If an unsupported locale is supplied, a fallback locale (determined by buyer preference or browser data) will be used and no error will be thrown.\n *\n * Supported locales are:\n * `da_DK`,\n * `de_DE`,\n * `en_AU`,\n * `en_GB`,\n * `en_US`,\n * `es_ES`,\n * `fr_CA`,\n * `fr_FR`,\n * `id_ID`,\n * `it_IT`,\n * `ja_JP`,\n * `ko_KR`,\n * `nl_NL`,\n * `no_NO`,\n * `pl_PL`,\n * `pt_BR`,\n * `pt_PT`,\n * `ru_RU`,\n * `sv_SE`,\n * `th_TH`,\n * `zh_CN`,\n * `zh_HK`,\n * and `zh_TW`.\n *\n * @param {string} [options.currency=\"USD\"] If a currency is passed in {@link PayPalCheckout#createPayment|`createPayment`}, it must match the currency passed here.\n * @param {boolean} [options.vault] Must be `true` when using `flow: vault` in {@link PayPalCheckout#createPayment|`createPayment`}.\n * @param {string} [options.components=buttons] By default, the Braintree SDK will only load the PayPal smart buttons component. If you would like to load just the [messages component](https://developer.paypal.com/docs/business/checkout/add-capabilities/credit-messaging/), pass `messages`. If you would like to load both, pass `buttons,messages`\n * @param {object} [options.dataAttributes] The data attributes to apply to the script. Any data attribute can be passed. A subset of the parameters are listed below. For a full list of data attributes, see the [PayPal docs](https://developer.paypal.com/docs/checkout/reference/customize-sdk/#script-parameters).\n * @param {string} [options.dataAttributes.client-token] The client token to use in the script. (usually not needed)\n * @param {string} [options.dataAttributes.csp-nonce] See the [PayPal docs about content security nonces](https://developer.paypal.com/docs/checkout/reference/customize-sdk/#csp-nonce).\n * @param {callback} [callback] Called when the PayPal SDK has been loaded onto the page. The second argument is the PayPal Checkout instance. If no callback is provided, the promise resolves with the PayPal Checkout instance when the PayPal SDK has been loaded onto the page.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example <caption>Without options</caption>\n * paypalCheckoutInstance.loadPayPalSDK().then(function () {\n *   // window.paypal.Buttons is now available to use\n * });\n * @example <caption>With options</caption>\n * paypalCheckoutInstance.loadPayPalSDK({\n *   'client-id': 'PayPal Client Id', // Can speed up rendering time to hardcode this value\n *\n *   intent: 'capture', // Make sure this value matches the value in createPayment\n *   currency: 'USD', // Make sure this value matches the value in createPayment\n * }).then(function () {\n *   // window.paypal.Buttons is now available to use\n * });\n * @example <caption>With Vaulting</caption>\n * paypalCheckoutInstance.loadPayPalSDK({\n *   vault: true\n * }).then(function () {\n *   // window.paypal.Buttons is now available to use\n * });\n */\nPayPalCheckout.prototype.loadPayPalSDK = function (options) {\n  var idPromise, src;\n  var loadPromise = new ExtendedPromise();\n  var dataAttributes = (options && options.dataAttributes) || {};\n  var userIdToken =\n    dataAttributes[\"user-id-token\"] || dataAttributes[\"data-user-id-token\"];\n\n  if (!userIdToken) {\n    userIdToken =\n      this._authorizationInformation.fingerprint &&\n      this._authorizationInformation.fingerprint.split(\"?\")[0];\n  }\n\n  this._paypalScript = document.createElement(\"script\");\n\n  // NEXT_MAJOR_VERSION\n  // this options object should have 2 properties:\n  // * queryParams\n  // * dataAttributes\n  // should make organizing this better than squashing\n  // all the query params at the top level and extracting\n  // the data attributes\n  options = assign(\n    {},\n    {\n      components: \"buttons\",\n    },\n    options\n  );\n  delete options.dataAttributes;\n\n  // NEXT_MAJOR_VERSION if merchant passes an explicit intent,\n  // currency, amount, etc, save those for use in createPayment\n  // if no explicit param of that type is passed in when calling\n  // createPayment to reduce the number of items that need to be\n  // duplicated here and in createPayment\n  if (options.vault) {\n    options.intent = options.intent || \"tokenize\";\n  } else {\n    options.intent = options.intent || \"authorize\";\n    options.currency = options.currency || \"USD\";\n  }\n\n  src = \"https://www.paypal.com/sdk/js?\";\n  this._paypalScript.onload = function () {\n    loadPromise.resolve();\n  };\n\n  Object.keys(dataAttributes).forEach(\n    function (attribute) {\n      this._paypalScript.setAttribute(\n        \"data-\" + attribute.replace(/^data\\-/, \"\"),\n        dataAttributes[attribute]\n      );\n    }.bind(this)\n  );\n\n  if (options[\"client-id\"]) {\n    idPromise = Promise.resolve(options[\"client-id\"]);\n  } else {\n    idPromise = this.getClientId();\n  }\n\n  idPromise.then(\n    function (id) {\n      options[\"client-id\"] = id;\n\n      if (this._autoSetDataUserIdToken && userIdToken) {\n        this._paypalScript.setAttribute(\"data-user-id-token\", userIdToken);\n\n        // preloading improves the rendering time of the PayPal button\n        this._attachPreloadPixel({\n          id: id,\n          userIdToken: userIdToken,\n          amount: dataAttributes.amount,\n          currency: options.currency,\n          merchantId: options[\"merchant-id\"],\n        });\n      }\n\n      this._paypalScript.src = querystring.queryify(src, options);\n      document.head.insertBefore(\n        this._paypalScript,\n        document.head.firstElementChild\n      );\n    }.bind(this)\n  );\n\n  return loadPromise.then(\n    function () {\n      return this;\n    }.bind(this)\n  );\n};\n\nPayPalCheckout.prototype._attachPreloadPixel = function (options) {\n  var request;\n  var id = options.id;\n  var userIdToken = options.userIdToken;\n  var env = this._authorizationInformation.environment;\n  var subdomain = env === \"production\" ? \"\" : \"sandbox.\";\n  var url = PAYPAL_SDK_PRELOAD_URL.replace(\"{ENV}\", subdomain);\n  var preloadOptions = {\n    \"client-id\": id,\n    \"user-id-token\": userIdToken,\n  };\n\n  if (options.amount) {\n    preloadOptions.amount = options.amount;\n  }\n  if (options.currency) {\n    preloadOptions.currency = options.currency;\n  }\n  if (options.merchantId) {\n    preloadOptions[\"merchant-id\"] = options.merchantId;\n  }\n\n  request = new XMLHttpRequest();\n  request.open(\"GET\", querystring.queryify(url, preloadOptions));\n  request.send();\n};\n\nPayPalCheckout.prototype._formatPaymentResourceData = function (\n  options,\n  config\n) {\n  var key;\n  var gatewayConfiguration = this._configuration.gatewayConfiguration;\n  // NEXT_MAJOR_VERSION default value for intent in PayPal SDK is capture\n  // but our integrations default value is authorize. Default this to capture\n  // in the next major version.\n  var intent = options.intent;\n  var paymentResource = {\n    // returnUrl and cancelUrl are required in hermes create_payment_resource route\n    // but are not used by the PayPal sdk, except to redirect to an error page\n    returnUrl: config.returnUrl || \"https://www.paypal.com/checkoutnow/error\",\n    cancelUrl: config.cancelUrl || \"https://www.paypal.com/checkoutnow/error\",\n    offerPaypalCredit: options.offerCredit === true,\n    merchantAccountId: this._merchantAccountId,\n    experienceProfile: {\n      brandName: options.displayName || gatewayConfiguration.paypal.displayName,\n      localeCode: options.locale,\n      noShipping: (!options.enableShippingAddress).toString(),\n      addressOverride: options.shippingAddressEditable === false,\n      landingPageType: options.landingPageType,\n    },\n    shippingOptions: options.shippingOptions,\n  };\n\n  if (options.flow === \"checkout\") {\n    paymentResource.amount = options.amount;\n    paymentResource.currencyIsoCode = options.currency;\n    paymentResource.requestBillingAgreement = options.requestBillingAgreement;\n\n    if (intent) {\n      // 'sale' has been changed to 'capture' in PayPal's backend, but\n      // we use an old version with 'sale'. We provide capture as an alias\n      // to match the PayPal SDK\n      if (intent === \"capture\") {\n        intent = \"sale\";\n      }\n      paymentResource.intent = intent;\n    }\n\n    if (options.hasOwnProperty(\"lineItems\")) {\n      paymentResource.lineItems = options.lineItems;\n    }\n\n    if (options.hasOwnProperty(\"vaultInitiatedCheckoutPaymentMethodToken\")) {\n      paymentResource.vaultInitiatedCheckoutPaymentMethodToken =\n        options.vaultInitiatedCheckoutPaymentMethodToken;\n    }\n\n    if (options.hasOwnProperty(\"shippingOptions\")) {\n      paymentResource.shippingOptions = options.shippingOptions;\n    }\n\n    for (key in options.shippingAddressOverride) {\n      if (options.shippingAddressOverride.hasOwnProperty(key)) {\n        paymentResource[key] = options.shippingAddressOverride[key];\n      }\n    }\n\n    if (options.hasOwnProperty(\"billingAgreementDetails\")) {\n      paymentResource.billingAgreementDetails = options.billingAgreementDetails;\n    }\n  } else {\n    paymentResource.shippingAddress = options.shippingAddressOverride;\n\n    if (options.billingAgreementDescription) {\n      paymentResource.description = options.billingAgreementDescription;\n    }\n  }\n\n  // this needs to be set outside of the block where add it to the\n  // payment request so that a follow up tokenization call can use it,\n  // but if a second create payment resource call is made without\n  // the correlation id, we want to reset it to undefined so that the\n  // tokenization call does not use a stale correlation id\n  this._riskCorrelationId = options.riskCorrelationId;\n  if (options.riskCorrelationId) {\n    paymentResource.correlationId = this._riskCorrelationId;\n  }\n\n  return paymentResource;\n};\n\nPayPalCheckout.prototype._formatTokenizeData = function (options, params) {\n  var clientConfiguration = this._configuration;\n  var gatewayConfiguration = clientConfiguration.gatewayConfiguration;\n  var isTokenizationKey =\n    clientConfiguration.authorizationType === \"TOKENIZATION_KEY\";\n  var isVaultFlow = options.flow === \"vault\";\n  var correlationId =\n    this._riskCorrelationId || params.billingToken || params.ecToken;\n  var data = {\n    paypalAccount: {\n      correlationId: correlationId,\n      options: {\n        validate: isVaultFlow && !isTokenizationKey && options.vault,\n      },\n    },\n  };\n\n  if (isVaultFlow) {\n    data.paypalAccount.billingAgreementToken = params.billingToken;\n  } else {\n    data.paypalAccount.paymentToken = params.paymentId;\n    data.paypalAccount.payerId = params.payerId;\n    data.paypalAccount.unilateral =\n      gatewayConfiguration.paypal.unvettedMerchant;\n\n    if (options.intent) {\n      data.paypalAccount.intent = options.intent;\n    }\n  }\n\n  if (this._merchantAccountId) {\n    data.merchantAccountId = this._merchantAccountId;\n  }\n\n  return data;\n};\n\nPayPalCheckout.prototype._formatTokenizePayload = function (response) {\n  var payload;\n  var account = {};\n\n  if (response.paypalAccounts) {\n    account = response.paypalAccounts[0];\n  }\n\n  payload = {\n    nonce: account.nonce,\n    details: {},\n    type: account.type,\n  };\n\n  if (account.details && account.details.payerInfo) {\n    payload.details = account.details.payerInfo;\n  }\n\n  if (account.details && account.details.creditFinancingOffered) {\n    payload.creditFinancingOffered = account.details.creditFinancingOffered;\n  }\n\n  if (account.details && account.details.shippingOptionId) {\n    payload.shippingOptionId = account.details.shippingOptionId;\n  }\n\n  if (account.details && account.details.cobrandedCardLabel) {\n    payload.cobrandedCardLabel = account.details.cobrandedCardLabel;\n  }\n\n  return payload;\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/paypal-checkout.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * paypalCheckoutInstance.teardown();\n * @example <caption>With callback</caption>\n * paypalCheckoutInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.teardown = function () {\n  var self = this;\n\n  convertMethodsToError(this, methods(PayPalCheckout.prototype));\n\n  if (this._paypalScript && this._paypalScript.parentNode) {\n    this._paypalScript.parentNode.removeChild(this._paypalScript);\n  }\n\n  return this._frameServicePromise\n    .catch(function () {\n      // no need to error in teardown for an error setting up the frame service\n    })\n    .then(function () {\n      if (!self._frameService) {\n        return Promise.resolve();\n      }\n\n      return self._frameService.teardown();\n    });\n};\n\nmodule.exports = wrapPromise.wrapPrototype(PayPalCheckout);\n\n},{\"../lib/analytics\":94,\"../lib/assign\":96,\"../lib/braintree-error\":99,\"../lib/constants\":100,\"../lib/convert-methods-to-error\":101,\"../lib/convert-to-braintree-error\":102,\"../lib/create-assets-url\":103,\"../lib/create-authorization-data\":104,\"../lib/create-deferred-client\":105,\"../lib/frame-service/external\":113,\"../lib/methods\":129,\"../lib/promise\":131,\"../lib/querystring\":132,\"../lib/use-min\":135,\"../paypal/shared/constants\":140,\"./errors\":137,\"@braintree/extended-promise\":42,\"@braintree/wrap-promise\":51}],140:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  LANDING_FRAME_NAME: \"braintreepaypallanding\",\n  FLOW_ENDPOINTS: {\n    checkout: \"create_payment_resource\",\n    vault: \"setup_billing_agreement\",\n  },\n};\n\n},{}],141:[function(require,module,exports){\n\"use strict\";\n\nvar assign = require(\"../../../lib/assign\").assign;\nvar analytics = require(\"../../../lib/analytics\");\nvar BraintreeError = require(\"../../../lib/braintree-error\");\nvar Promise = require(\"../../../lib/promise\");\nvar isVerifiedDomain = require(\"../../../lib/is-verified-domain\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\nvar EventEmitter = require(\"@braintree/event-emitter\");\nvar errors = require(\"../../shared/errors\");\nvar iFramer = require(\"@braintree/iframer\");\nvar Bus = require(\"framebus\");\nvar constants = require(\"../../shared/constants\");\nvar uuid = require(\"@braintree/uuid\");\nvar events = require(\"../../shared/events\");\nvar useMin = require(\"../../../lib/use-min\");\nvar BUS_CONFIGURATION_REQUEST_EVENT =\n  require(\"../../../lib/constants\").BUS_CONFIGURATION_REQUEST_EVENT;\n\nvar VERSION = \"3.88.3\";\nvar IFRAME_HEIGHT = 400;\nvar IFRAME_WIDTH = 400;\n\nfunction BaseFramework(options) {\n  EventEmitter.call(this);\n\n  this._client = options.client;\n  this._createPromise = options.createPromise;\n  this._createOptions = options;\n\n  if (this._client) {\n    this._isDebug = this._client.getConfiguration().isDebug;\n    this._assetsUrl =\n      this._client.getConfiguration().gatewayConfiguration.assetsUrl;\n  } else {\n    this._isDebug = Boolean(options.isDebug);\n    this._assetsUrl = options.assetsUrl;\n  }\n  this._assetsUrl = this._assetsUrl + \"/web/\" + VERSION;\n}\n\nEventEmitter.createChild(BaseFramework);\n\nBaseFramework.prototype._waitForClient = function () {\n  if (this._client) {\n    return Promise.resolve();\n  }\n\n  return this._createPromise.then(\n    function (client) {\n      this._client = client;\n    }.bind(this)\n  );\n};\n\nBaseFramework.prototype.setUpEventListeners = function () {\n  throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n};\n\nBaseFramework.prototype.verifyCard = function (options, privateOptions) {\n  var formattedOptions, error;\n  var self = this;\n\n  privateOptions = privateOptions || {};\n\n  error = this._checkForVerifyCardError(options, privateOptions);\n\n  if (error) {\n    return Promise.reject(error);\n  }\n\n  this._verifyCardInProgress = true;\n\n  formattedOptions = this._formatVerifyCardOptions(options);\n\n  return this._formatLookupData(formattedOptions)\n    .then(function (data) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.started\"\n      );\n\n      return self._performLookup(formattedOptions.nonce, data);\n    })\n    .then(function (response) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.3ds-version.\" +\n          response.lookup.threeDSecureVersion\n      );\n\n      return self._onLookupComplete(response, formattedOptions);\n    })\n    .then(function (response) {\n      return self.initializeChallengeWithLookupResponse(\n        response,\n        formattedOptions\n      );\n    })\n    .then(function (payload) {\n      self._resetVerificationState();\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.completed\"\n      );\n\n      return payload;\n    })\n    .catch(function (err) {\n      self._resetVerificationState();\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.failed\"\n      );\n\n      return Promise.reject(err);\n    });\n};\n\nBaseFramework.prototype._checkForFrameworkSpecificVerifyCardErrors =\n  function () {\n    throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n  };\n\nBaseFramework.prototype._presentChallenge = function () {\n  throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n};\n\nBaseFramework.prototype.prepareLookup = function () {\n  throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n};\n\nBaseFramework.prototype._resetVerificationState = function () {\n  this._verifyCardInProgress = false;\n  this._verifyCardPromisePlus = null;\n};\n\nBaseFramework.prototype._performLookup = function (nonce, data) {\n  var self = this;\n  var url = \"payment_methods/\" + nonce + \"/three_d_secure/lookup\";\n\n  return this._waitForClient().then(function () {\n    return self._client\n      .request({\n        endpoint: url,\n        method: \"post\",\n        data: data,\n      })\n      .catch(function (err) {\n        var status = err && err.details && err.details.httpStatus;\n        var analyticsMessage = \"three-d-secure.verification-flow.lookup-failed\";\n        var lookupError;\n\n        if (status === 404) {\n          lookupError = errors.THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR;\n          analyticsMessage += \".404\";\n        } else if (status === 422) {\n          lookupError = errors.THREEDS_LOOKUP_VALIDATION_ERROR;\n          analyticsMessage += \".422\";\n        } else {\n          lookupError = errors.THREEDS_LOOKUP_ERROR;\n        }\n\n        analytics.sendEvent(self._createPromise, analyticsMessage);\n\n        return Promise.reject(\n          new BraintreeError({\n            type: lookupError.type,\n            code: lookupError.code,\n            message: lookupError.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      });\n  });\n};\n\nBaseFramework.prototype._checkForVerifyCardError = function (\n  options,\n  privateOptions\n) {\n  var errorOption;\n\n  if (this._verifyCardInProgress === true) {\n    return new BraintreeError(errors.THREEDS_AUTHENTICATION_IN_PROGRESS);\n  } else if (!options.nonce) {\n    errorOption = \"a nonce\";\n  } else if (!options.amount) {\n    errorOption = \"an amount\";\n  }\n\n  if (!errorOption) {\n    errorOption = this._checkForFrameworkSpecificVerifyCardErrors(\n      options,\n      privateOptions\n    );\n  }\n\n  if (errorOption) {\n    return new BraintreeError({\n      type: errors.THREEDS_MISSING_VERIFY_CARD_OPTION.type,\n      code: errors.THREEDS_MISSING_VERIFY_CARD_OPTION.code,\n      message: \"verifyCard options must include \" + errorOption + \".\",\n    });\n  }\n\n  return null;\n};\n\nBaseFramework.prototype.initializeChallengeWithLookupResponse = function (\n  lookupResponse,\n  options\n) {\n  var self = this;\n\n  options = options || {};\n\n  this._lookupPaymentMethod = lookupResponse.paymentMethod;\n\n  // sets this in the case that initializeChallengeWithLookupResponse is\n  // called as a standalone method from a server side lookup. In a normal\n  // verifyCard flow, this promise will already exist\n  self._verifyCardPromisePlus =\n    self._verifyCardPromisePlus || new ExtendedPromise();\n  self._handleLookupResponse(lookupResponse, options);\n\n  return self._verifyCardPromisePlus.then(function (payload) {\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.verification-flow.liability-shifted.\" +\n        String(payload.liabilityShifted)\n    );\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.verification-flow.liability-shift-possible.\" +\n        String(payload.liabilityShiftPossible)\n    );\n\n    return payload;\n  });\n};\n\nBaseFramework.prototype._handleLookupResponse = function (\n  lookupResponse,\n  options\n) {\n  var challengeShouldBePresented = Boolean(\n    lookupResponse.lookup && lookupResponse.lookup.acsUrl\n  );\n  var details;\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"three-d-secure.verification-flow.challenge-presented.\" +\n      String(challengeShouldBePresented)\n  );\n\n  if (challengeShouldBePresented) {\n    this._presentChallenge(lookupResponse, options);\n  } else {\n    details = this._formatAuthResponse(\n      lookupResponse.paymentMethod,\n      lookupResponse.threeDSecureInfo\n    );\n    details.verificationDetails = lookupResponse.threeDSecureInfo;\n\n    this._verifyCardPromisePlus.resolve(details);\n  }\n};\n\nBaseFramework.prototype._onLookupComplete = function (response) {\n  this._lookupPaymentMethod = response.paymentMethod;\n  this._verifyCardPromisePlus = new ExtendedPromise();\n\n  return Promise.resolve(response);\n};\n\nBaseFramework.prototype._formatAuthResponse = function (\n  paymentMethod,\n  threeDSecureInfo\n) {\n  return {\n    nonce: paymentMethod.nonce,\n    type: paymentMethod.type,\n    binData: paymentMethod.binData,\n    details: paymentMethod.details,\n    description:\n      paymentMethod.description &&\n      paymentMethod.description.replace(/\\+/g, \" \"),\n    liabilityShifted: threeDSecureInfo && threeDSecureInfo.liabilityShifted,\n    liabilityShiftPossible:\n      threeDSecureInfo && threeDSecureInfo.liabilityShiftPossible,\n    threeDSecureInfo: paymentMethod.threeDSecureInfo,\n  };\n};\n\nBaseFramework.prototype._formatVerifyCardOptions = function (options) {\n  return assign({}, options);\n};\n\nBaseFramework.prototype._formatLookupData = function (options) {\n  var data = {\n    amount: options.amount,\n  };\n\n  return Promise.resolve(data);\n};\n\nBaseFramework.prototype._handleV1AuthResponse = function (data) {\n  var authResponse = JSON.parse(data.auth_response);\n\n  if (authResponse.success) {\n    this._verifyCardPromisePlus.resolve(\n      this._formatAuthResponse(\n        authResponse.paymentMethod,\n        authResponse.threeDSecureInfo\n      )\n    );\n  } else if (\n    authResponse.threeDSecureInfo &&\n    authResponse.threeDSecureInfo.liabilityShiftPossible\n  ) {\n    this._verifyCardPromisePlus.resolve(\n      this._formatAuthResponse(\n        this._lookupPaymentMethod,\n        authResponse.threeDSecureInfo\n      )\n    );\n  } else {\n    this._verifyCardPromisePlus.reject(\n      new BraintreeError({\n        type: BraintreeError.types.UNKNOWN,\n        code: \"UNKNOWN_AUTH_RESPONSE\",\n        message: authResponse.error.message,\n      })\n    );\n  }\n};\n\nBaseFramework.prototype.cancelVerifyCard = function () {\n  var response, threeDSecureInfo;\n\n  this._verifyCardInProgress = false;\n\n  if (!this._lookupPaymentMethod) {\n    return Promise.reject(\n      new BraintreeError(errors.THREEDS_NO_VERIFICATION_PAYLOAD)\n    );\n  }\n\n  threeDSecureInfo = this._lookupPaymentMethod.threeDSecureInfo;\n\n  response = assign({}, this._lookupPaymentMethod, {\n    liabilityShiftPossible:\n      threeDSecureInfo && threeDSecureInfo.liabilityShiftPossible,\n    liabilityShifted: threeDSecureInfo && threeDSecureInfo.liabilityShifted,\n    verificationDetails:\n      threeDSecureInfo && threeDSecureInfo.verificationDetails,\n  });\n\n  return Promise.resolve(response);\n};\n\nBaseFramework.prototype._setupV1Bus = function (options) {\n  var clientConfiguration = this._client.getConfiguration();\n  var parentURL = window.location.href.split(\"#\")[0];\n  var lookupResponse = options.lookupResponse;\n  var channel = uuid();\n  var bus = new Bus({\n    channel: channel,\n    verifyDomain: isVerifiedDomain,\n  });\n  var authenticationCompleteBaseUrl =\n    this._assetsUrl +\n    \"/html/three-d-secure-authentication-complete-frame.html?channel=\" +\n    encodeURIComponent(channel) +\n    \"&\";\n\n  bus.on(BUS_CONFIGURATION_REQUEST_EVENT, function (reply) {\n    reply({\n      clientConfiguration: clientConfiguration,\n      nonce: options.nonce,\n      acsUrl: lookupResponse.acsUrl,\n      pareq: lookupResponse.pareq,\n      termUrl:\n        lookupResponse.termUrl +\n        \"&three_d_secure_version=\" +\n        VERSION +\n        \"&authentication_complete_base_url=\" +\n        encodeURIComponent(authenticationCompleteBaseUrl),\n      md: lookupResponse.md,\n      parentUrl: parentURL,\n    });\n  });\n\n  bus.on(events.AUTHENTICATION_COMPLETE, options.handleAuthResponse);\n\n  return bus;\n};\n\nBaseFramework.prototype._setupV1Iframe = function (options) {\n  var url =\n    this._assetsUrl +\n    \"/html/three-d-secure-bank-frame\" +\n    useMin(this._isDebug) +\n    \".html?showLoader=\" +\n    options.showLoader;\n  var bankIframe = iFramer({\n    src: url,\n    height: IFRAME_HEIGHT,\n    width: IFRAME_WIDTH,\n    name: constants.LANDING_FRAME_NAME + \"_\" + this._v1Bus.channel,\n    title: \"3D Secure Authorization Frame\",\n  });\n\n  return bankIframe;\n};\n\nBaseFramework.prototype._setupV1Elements = function (options) {\n  this._v1Bus = this._setupV1Bus(options);\n  this._v1Iframe = this._setupV1Iframe(options);\n};\n\nBaseFramework.prototype._teardownV1Elements = function () {\n  if (this._v1Bus) {\n    this._v1Bus.teardown();\n    this._v1Bus = null;\n  }\n\n  if (this._v1Iframe && this._v1Iframe.parentNode) {\n    this._v1Iframe.parentNode.removeChild(this._v1Iframe);\n    this._v1Iframe = null;\n  }\n\n  if (this._onV1Keyup) {\n    document.removeEventListener(\"keyup\", this._onV1Keyup);\n    this._onV1Keyup = null;\n  }\n};\n\nBaseFramework.prototype.teardown = function () {\n  analytics.sendEvent(this._createPromise, \"three-d-secure.teardown-completed\");\n\n  this._teardownV1Elements();\n\n  return Promise.resolve();\n};\n\nmodule.exports = BaseFramework;\n\n},{\"../../../lib/analytics\":94,\"../../../lib/assign\":96,\"../../../lib/braintree-error\":99,\"../../../lib/constants\":100,\"../../../lib/is-verified-domain\":127,\"../../../lib/promise\":131,\"../../../lib/use-min\":135,\"../../shared/constants\":150,\"../../shared/errors\":151,\"../../shared/events\":152,\"@braintree/event-emitter\":41,\"@braintree/extended-promise\":42,\"@braintree/iframer\":43,\"@braintree/uuid\":47,\"framebus\":176}],142:[function(require,module,exports){\n\"use strict\";\n// NEXT_MAJOR_VERSION drop support for Bootstrap framework,\n// recomend using inline frame version and putting it in\n// the merchant's own bootstrap modal\n\nvar SongbirdFramework = require(\"./songbird\");\n\nfunction Bootstrap3ModalFramework(options) {\n  SongbirdFramework.call(this, options);\n}\n\nBootstrap3ModalFramework.prototype = Object.create(\n  SongbirdFramework.prototype,\n  {\n    constructor: SongbirdFramework,\n  }\n);\n\nBootstrap3ModalFramework.prototype._createV1IframeModalElement = function (\n  iframe\n) {\n  var modal = document.createElement(\"div\");\n\n  modal.innerHTML =\n    '<div class=\"modal fade in\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"CCAFrameModal-label\" aria-hidden=\"true\" style=\"display: block;\">' +\n    '<div class=\"modal-dialog\" style=\"width:440px;z-index:999999;\">' +\n    '<div class=\"modal-content\">' +\n    '<div class=\"modal-body\" data-braintree-v1-fallback-iframe-container>' +\n    '<button type=\"button\" data-braintree-v1-fallback-close-button class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">×</button>' +\n    \"</div>\" +\n    \"</div>\" +\n    \"</div>\" +\n    '<div data-braintree-v1-fallback-backdrop style=\"' +\n    \"position: fixed;\" +\n    \"cursor: pointer;\" +\n    \"z-index: 999998;\" +\n    \"top: 0;\" +\n    \"left: 0;\" +\n    \"width: 100%;\" +\n    \"height: 100%;\" +\n    '\"></div>' +\n    \"</div>\";\n\n  modal\n    .querySelector(\"[data-braintree-v1-fallback-iframe-container]\")\n    .appendChild(iframe);\n\n  return modal;\n};\n\nBootstrap3ModalFramework.prototype._createCardinalConfigurationOptions =\n  function (setupOptions) {\n    var options =\n      SongbirdFramework.prototype._createCardinalConfigurationOptions.call(\n        this,\n        setupOptions\n      );\n\n    options.payment.framework = \"bootstrap3\";\n\n    return options;\n  };\n\nmodule.exports = Bootstrap3ModalFramework;\n\n},{\"./songbird\":147}],143:[function(require,module,exports){\n\"use strict\";\n\nvar SongbirdFramework = require(\"./songbird\");\n\nfunction CardinalModalFramework(options) {\n  SongbirdFramework.call(this, options);\n}\n\nCardinalModalFramework.prototype = Object.create(SongbirdFramework.prototype, {\n  constructor: SongbirdFramework,\n});\n\nCardinalModalFramework.prototype._createV1IframeModalElement = function (\n  iframe\n) {\n  var modal = document.createElement(\"div\");\n  var addCloseButton = Boolean(\n    this._createOptions &&\n      this._createOptions.cardinalSDKConfig &&\n      this._createOptions.cardinalSDKConfig.payment &&\n      this._createOptions.cardinalSDKConfig.payment.displayExitButton\n  );\n\n  modal.innerHTML =\n    '<div style=\"' +\n    \"position: fixed;\" +\n    \"z-index: 999999;\" +\n    \"top: 50%;\" +\n    \"left: 50%;\" +\n    \"padding: 24px 20px;\" +\n    \"transform: translate(-50%,-50%);\" +\n    \"border-radius: 2px;\" +\n    \"background: #fff;\" +\n    \"max-width: 100%;\" +\n    \"overflow: auto;\" +\n    '\">' +\n    \"<div>\" +\n    \"<button data-braintree-v1-fallback-close-button \" +\n    'style=\"' +\n    \"font-family: Helvetica,Arial,sans-serif;\" +\n    \"font-size: 25px;\" +\n    \"line-height: 12px;\" +\n    \"position: absolute;\" +\n    \"top: 2px;\" +\n    \"right: 0px;\" +\n    \"cursor: pointer;\" +\n    \"color: #999;\" +\n    \"border: 0;\" +\n    \"outline: none;\" +\n    \"background: none;\" +\n    '\" ' +\n    \"onMouseOver=\\\"this.style.color='#000'\\\" \" +\n    \"onMouseOut=\\\"this.style.color='#999'\\\"\" +\n    \">×</button>\" +\n    \"</div>\" +\n    // iframe container\n    '<div data-braintree-v1-fallback-iframe-container style=\"' +\n    \"height: 400px;\" +\n    '\"></div>' +\n    \"</div>\" +\n    // modal backdrop\n    '<div data-braintree-v1-fallback-backdrop style=\"' +\n    \"position: fixed;\" +\n    \"z-index: 999998;\" +\n    \"cursor: pointer;\" +\n    \"top: 0;\" +\n    \"left: 0;\" +\n    \"width: 100%;\" +\n    \"height: 100%;\" +\n    \"transition: opacity 1ms ease;\" +\n    \"background: rgba(0,0,0,.6);\" +\n    '\"></div>';\n\n  if (!addCloseButton) {\n    modal.querySelector(\n      \"[data-braintree-v1-fallback-close-button]\"\n    ).style.display = \"none\";\n  }\n  modal\n    .querySelector(\"[data-braintree-v1-fallback-iframe-container]\")\n    .appendChild(iframe);\n\n  return modal;\n};\n\nmodule.exports = CardinalModalFramework;\n\n},{\"./songbird\":147}],144:[function(require,module,exports){\n\"use strict\";\n\nvar LegacyFramework = require(\"./legacy\");\nvar CardinalModalFramework = require(\"./cardinal-modal\");\nvar Bootstrap3ModalFramework = require(\"./bootstrap3-modal\");\nvar InlineIframeFramework = require(\"./inline-iframe\");\n\nmodule.exports = {\n  legacy: LegacyFramework,\n  \"cardinal-modal\": CardinalModalFramework,\n  \"bootstrap3-modal\": Bootstrap3ModalFramework,\n  \"inline-iframe\": InlineIframeFramework,\n};\n\n},{\"./bootstrap3-modal\":142,\"./cardinal-modal\":143,\"./inline-iframe\":145,\"./legacy\":146}],145:[function(require,module,exports){\n\"use strict\";\n\nvar SongbirdFramework = require(\"./songbird\");\nvar BraintreeError = require(\"../../../lib/braintree-error\");\nvar errors = require(\"../../shared/errors\");\nvar enumerate = require(\"../../../lib/enumerate\");\n\nfunction InlineIframeFramework(options) {\n  SongbirdFramework.call(this, options);\n}\n\nInlineIframeFramework.prototype = Object.create(SongbirdFramework.prototype, {\n  constructor: SongbirdFramework,\n});\n\nInlineIframeFramework.events = enumerate(\n  [\"AUTHENTICATION_IFRAME_AVAILABLE\"],\n  \"inline-iframe-framework:\"\n);\n\nInlineIframeFramework.prototype.setUpEventListeners = function (reply) {\n  SongbirdFramework.prototype.setUpEventListeners.call(this, reply);\n\n  this.on(\n    InlineIframeFramework.events.AUTHENTICATION_IFRAME_AVAILABLE,\n    function (payload, next) {\n      reply(\"authentication-iframe-available\", payload, next);\n    }\n  );\n};\n\nInlineIframeFramework.prototype._createCardinalConfigurationOptions = function (\n  setupOptions\n) {\n  var options =\n    SongbirdFramework.prototype._createCardinalConfigurationOptions.call(\n      this,\n      setupOptions\n    );\n\n  options.payment.framework = \"inline\";\n\n  return options;\n};\n\nInlineIframeFramework.prototype._addV1IframeToPage = function () {\n  this._emit(\n    InlineIframeFramework.events.AUTHENTICATION_IFRAME_AVAILABLE,\n    {\n      element: this._v1Modal,\n    },\n    function () {\n      // NOOP\n    }\n  );\n};\n\nInlineIframeFramework.prototype._setupFrameworkSpecificListeners = function () {\n  this.setCardinalListener(\"ui.inline.setup\", this._onInlineSetup.bind(this));\n};\n\nInlineIframeFramework.prototype._onInlineSetup = function (\n  htmlTemplate,\n  details,\n  resolve,\n  reject\n) {\n  var container, hasError;\n\n  if (!htmlTemplate || !details) {\n    hasError = true;\n  } else if (details.paymentType !== \"CCA\") {\n    hasError = true;\n  } else if (\n    !(details.data.mode === \"suppress\" || details.data.mode === \"static\")\n  ) {\n    hasError = true;\n  }\n\n  if (hasError) {\n    reject(new BraintreeError(errors.THREEDS_INLINE_IFRAME_DETAILS_INCORRECT));\n\n    return;\n  }\n\n  container = document.createElement(\"div\");\n  container.innerHTML = htmlTemplate;\n\n  if (details.data.mode === \"suppress\") {\n    container.style.display = \"none\";\n    document.body.appendChild(container);\n    resolve();\n  } else if (details.data.mode === \"static\") {\n    this._emit(\n      InlineIframeFramework.events.AUTHENTICATION_IFRAME_AVAILABLE,\n      {\n        element: container,\n      },\n      function () {\n        resolve();\n      }\n    );\n  }\n};\n\nmodule.exports = InlineIframeFramework;\n\n},{\"../../../lib/braintree-error\":99,\"../../../lib/enumerate\":108,\"../../shared/errors\":151,\"./songbird\":147}],146:[function(require,module,exports){\n\"use strict\";\n\nvar BaseFramework = require(\"./base\");\nvar deferred = require(\"../../../lib/deferred\");\n\nfunction LegacyFramework(options) {\n  BaseFramework.call(this, options);\n}\n\nLegacyFramework.prototype = Object.create(BaseFramework.prototype, {\n  constructor: LegacyFramework,\n});\n\nLegacyFramework.prototype.setUpEventListeners = function () {\n  // noop\n};\n\nLegacyFramework.prototype.transformV1CustomerBillingAddress = function (\n  customer\n) {\n  customer.billingAddress.line1 = customer.billingAddress.streetAddress;\n  customer.billingAddress.line2 = customer.billingAddress.extendedAddress;\n  customer.billingAddress.city = customer.billingAddress.locality;\n  customer.billingAddress.state = customer.billingAddress.region;\n  customer.billingAddress.countryCode =\n    customer.billingAddress.countryCodeAlpha2;\n  delete customer.billingAddress.streetAddress;\n  delete customer.billingAddress.extendedAddress;\n  delete customer.billingAddress.locality;\n  delete customer.billingAddress.region;\n  delete customer.billingAddress.countryCodeAlpha2;\n\n  return customer;\n};\n\nLegacyFramework.prototype._createIframe = function (options) {\n  var self = this;\n\n  this._setupV1Elements({\n    nonce: options.nonce,\n    lookupResponse: options.lookupResponse,\n    showLoader: options.showLoader,\n    handleAuthResponse: function (data) {\n      self._handleAuthResponse(data, options);\n    },\n  });\n\n  return this._v1Iframe;\n};\n\nLegacyFramework.prototype._handleAuthResponse = function (data, options) {\n  this._v1Bus.teardown();\n\n  options.removeFrame();\n\n  // This also has to be in a setTimeout so it executes after the `removeFrame`.\n  deferred(\n    function () {\n      this._handleV1AuthResponse(data);\n    }.bind(this)\n  )();\n};\n\nLegacyFramework.prototype._checkForFrameworkSpecificVerifyCardErrors =\n  function (options) {\n    var errorOption;\n\n    if (typeof options.addFrame !== \"function\") {\n      errorOption = \"an addFrame function\";\n    } else if (typeof options.removeFrame !== \"function\") {\n      errorOption = \"a removeFrame function\";\n    }\n\n    return errorOption;\n  };\n\nLegacyFramework.prototype._formatVerifyCardOptions = function (options) {\n  var modifiedOptions = BaseFramework.prototype._formatVerifyCardOptions.call(\n    this,\n    options\n  );\n\n  modifiedOptions.addFrame = deferred(options.addFrame);\n  modifiedOptions.removeFrame = deferred(options.removeFrame);\n  modifiedOptions.showLoader = options.showLoader !== false;\n\n  return modifiedOptions;\n};\n\nLegacyFramework.prototype._formatLookupData = function (options) {\n  var self = this;\n\n  return BaseFramework.prototype._formatLookupData\n    .call(this, options)\n    .then(function (data) {\n      if (options.customer && options.customer.billingAddress) {\n        data.customer = self.transformV1CustomerBillingAddress(\n          options.customer\n        );\n      }\n\n      return data;\n    });\n};\n\nLegacyFramework.prototype._presentChallenge = function (\n  lookupResponse,\n  options\n) {\n  options.addFrame(\n    null,\n    this._createIframe({\n      showLoader: options.showLoader,\n      lookupResponse: lookupResponse.lookup,\n      nonce: lookupResponse.paymentMethod.nonce,\n      removeFrame: options.removeFrame,\n    })\n  );\n};\n\nmodule.exports = LegacyFramework;\n\n},{\"../../../lib/deferred\":106,\"./base\":141}],147:[function(require,module,exports){\n\"use strict\";\n\nvar BaseFramework = require(\"./base\");\nvar assign = require(\"../../../lib/assign\").assign;\nvar deferred = require(\"../../../lib/deferred\");\nvar BraintreeError = require(\"../../../lib/braintree-error\");\nvar convertToBraintreeError = require(\"../../../lib/convert-to-braintree-error\");\nvar analytics = require(\"../../../lib/analytics\");\nvar assets = require(\"../../../lib/assets\");\nvar errors = require(\"../../shared/errors\");\nvar enumerate = require(\"../../../lib/enumerate\");\nvar constants = require(\"../../shared/constants\");\nvar Promise = require(\"../../../lib/promise\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\n\nvar INTEGRATION_TIMEOUT_MS =\n  require(\"../../../lib/constants\").INTEGRATION_TIMEOUT_MS;\nvar PLATFORM = require(\"../../../lib/constants\").PLATFORM;\nvar VERSION = \"3.88.3\";\nvar CUSTOMER_CANCELED_SONGBIRD_MODAL = \"01\";\nvar SONGBIRD_UI_EVENTS = [\n  \"ui.close\",\n  \"ui.render\",\n\n  // TODO these events are not documented in the\n  // client reference because so far we have\n  // not been able to trigger them in our testing\n  \"ui.renderHidden\",\n  \"ui.loading.close\",\n  \"ui.loading.render\",\n];\n\nfunction SongbirdFramework(options) {\n  BaseFramework.call(this, options);\n\n  this._useV1Fallback = false;\n  this._clientMetadata = {\n    requestedThreeDSecureVersion: \"2\",\n    sdkVersion: PLATFORM + \"/\" + VERSION,\n  };\n  this._getDfReferenceIdPromisePlus = new ExtendedPromise();\n  this.setupSongbird(options);\n  this._cardinalEvents = [];\n}\n\nSongbirdFramework.prototype = Object.create(BaseFramework.prototype, {\n  constructor: SongbirdFramework,\n});\n\nSongbirdFramework.events = enumerate(\n  [\n    \"LOOKUP_COMPLETE\",\n    \"CUSTOMER_CANCELED\",\n    \"UI.CLOSE\",\n    \"UI.RENDER\",\n    \"UI.RENDERHIDDEN\",\n    \"UI.LOADING.CLOSE\",\n    \"UI.LOADING.RENDER\",\n  ],\n  \"songbird-framework:\"\n);\n\nSongbirdFramework.prototype.setUpEventListeners = function (reply) {\n  this.on(SongbirdFramework.events.LOOKUP_COMPLETE, function (data, next) {\n    reply(\"lookup-complete\", data, next);\n  });\n  this.on(SongbirdFramework.events.CUSTOMER_CANCELED, function () {\n    reply(\"customer-canceled\");\n  });\n  this.on(SongbirdFramework.events[\"UI.CLOSE\"], function () {\n    reply(\"authentication-modal-close\");\n  });\n  this.on(SongbirdFramework.events[\"UI.RENDER\"], function () {\n    reply(\"authentication-modal-render\");\n  });\n  this.on(SongbirdFramework.events[\"UI.RENDERHIDDEN\"], function () {\n    reply(\"authentication-modal-render-hidden\");\n  });\n  this.on(SongbirdFramework.events[\"UI.LOADING.CLOSE\"], function () {\n    reply(\"authentication-modal-loader-close\");\n  });\n  this.on(SongbirdFramework.events[\"UI.LOADING.RENDER\"], function () {\n    reply(\"authentication-modal-loader-render\");\n  });\n};\n\nSongbirdFramework.prototype.prepareLookup = function (options) {\n  var data = assign({}, options);\n  var self = this;\n\n  return this.getDfReferenceId()\n    .then(function (id) {\n      data.dfReferenceId = id;\n    })\n    .then(function () {\n      return self._triggerCardinalBinProcess(options.bin);\n    })\n    .catch(function () {\n      // catch and ignore errors from looking up\n      // df reference and Cardinal bin process\n    })\n    .then(function () {\n      return self._waitForClient();\n    })\n    .then(function () {\n      data.clientMetadata = self._clientMetadata;\n      data.authorizationFingerprint =\n        self._client.getConfiguration().authorizationFingerprint;\n      data.braintreeLibraryVersion = \"braintree/web/\" + VERSION;\n\n      return data;\n    });\n};\n\nSongbirdFramework.prototype.initializeChallengeWithLookupResponse = function (\n  lookupResponse,\n  options\n) {\n  return this.setupSongbird().then(\n    function () {\n      return BaseFramework.prototype.initializeChallengeWithLookupResponse.call(\n        this,\n        lookupResponse,\n        options\n      );\n    }.bind(this)\n  );\n};\n\nSongbirdFramework.prototype.initiateV1Fallback = function (errorType) {\n  this._useV1Fallback = true;\n  this._removeSongbirdListeners();\n  analytics.sendEvent(\n    this._createPromise,\n    \"three-d-secure.v1-fallback.\" + errorType\n  );\n\n  if (this._songbirdPromise) {\n    this._songbirdPromise.resolve();\n  }\n};\n\nSongbirdFramework.prototype._triggerCardinalBinProcess = function (bin) {\n  var self = this;\n  var issuerStartTime = Date.now();\n\n  if (!bin) {\n    // skip bin lookup because bin wasn't passed in\n    return Promise.resolve();\n  }\n\n  return window.Cardinal.trigger(\"bin.process\", bin).then(function (\n    binResults\n  ) {\n    self._clientMetadata.issuerDeviceDataCollectionTimeElapsed =\n      Date.now() - issuerStartTime;\n    self._clientMetadata.issuerDeviceDataCollectionResult =\n      binResults && binResults.Status;\n  });\n};\n\nSongbirdFramework.prototype.transformBillingAddress = function (\n  additionalInformation,\n  billingAddress\n) {\n  if (billingAddress) {\n    // map from public API to the API that the Gateway expects\n    extractAddressData(billingAddress, additionalInformation, \"billing\");\n    additionalInformation.billingPhoneNumber = billingAddress.phoneNumber;\n    additionalInformation.billingGivenName = billingAddress.givenName;\n    additionalInformation.billingSurname = billingAddress.surname;\n  }\n\n  return additionalInformation;\n};\n\nSongbirdFramework.prototype.transformShippingAddress = function (\n  additionalInformation\n) {\n  var shippingAddress = additionalInformation.shippingAddress;\n\n  if (shippingAddress) {\n    // map from public API to the API that the Gateway expects\n    extractAddressData(shippingAddress, additionalInformation, \"shipping\");\n\n    delete additionalInformation.shippingAddress;\n  }\n\n  return additionalInformation;\n};\n\nSongbirdFramework.prototype._createV1IframeModalElement = function (iframe) {\n  var modal = document.createElement(\"div\");\n\n  modal.innerHTML =\n    '<div data-braintree-v1-fallback-iframe-container=\"true\" style=\"' +\n    \"height: 400px;\" +\n    '\"></div>';\n  modal\n    .querySelector('[data-braintree-v1-fallback-iframe-container=\"true\"]')\n    .appendChild(iframe);\n\n  return modal;\n};\n\nSongbirdFramework.prototype._createV1IframeModal = function (iframe) {\n  var modal = this._createV1IframeModalElement(iframe);\n  var btn = modal.querySelector(\"[data-braintree-v1-fallback-close-button]\");\n  var backdrop = modal.querySelector(\"[data-braintree-v1-fallback-backdrop]\");\n  var self = this;\n\n  function closeHandler() {\n    modal.parentNode.removeChild(modal);\n    self.cancelVerifyCard(errors.THREEDS_CARDINAL_SDK_CANCELED);\n    document.removeEventListener(\"keyup\", self._onV1Keyup);\n    self._onV1Keyup = null;\n  }\n\n  this._onV1Keyup = function (e) {\n    if (e.key !== \"Escape\") {\n      return;\n    }\n\n    if (!modal.parentNode) {\n      // modal not on page\n      return;\n    }\n\n    closeHandler();\n  };\n\n  if (btn) {\n    btn.addEventListener(\"click\", closeHandler);\n  }\n\n  if (backdrop) {\n    backdrop.addEventListener(\"click\", closeHandler);\n  }\n\n  document.addEventListener(\"keyup\", this._onV1Keyup);\n\n  return modal;\n};\n\nSongbirdFramework.prototype._addV1IframeToPage = function () {\n  document.body.appendChild(this._v1Modal);\n};\n\nSongbirdFramework.prototype._handleAuthResponseFromV1Fallback = function (\n  data\n) {\n  this._teardownV1Elements();\n  this._v1Modal.parentNode.removeChild(this._v1Modal);\n  this._handleV1AuthResponse(data);\n};\n\nSongbirdFramework.prototype._presentChallengeWithV1Fallback = function (\n  lookupResponse\n) {\n  var self = this;\n\n  this._setupV1Elements({\n    lookupResponse: lookupResponse,\n    showLoader: true,\n    handleAuthResponse: function (data) {\n      self._handleAuthResponseFromV1Fallback(data);\n    },\n  });\n  this._v1Modal = this._createV1IframeModal(this._v1Iframe);\n  this._addV1IframeToPage();\n};\n\nSongbirdFramework.prototype.setupSongbird = function (setupOptions) {\n  var self = this;\n  var startTime = Date.now();\n\n  if (this._songbirdPromise) {\n    return this._songbirdPromise;\n  }\n\n  setupOptions = setupOptions || {};\n\n  this._songbirdPromise = new ExtendedPromise();\n  this._v2SetupFailureReason = \"reason-unknown\";\n\n  self\n    ._loadCardinalScript(setupOptions)\n    .then(function () {\n      if (!window.Cardinal) {\n        self._v2SetupFailureReason = \"cardinal-global-unavailable\";\n\n        return Promise.reject(\n          new BraintreeError(errors.THREEDS_CARDINAL_SDK_SETUP_FAILED)\n        );\n      }\n\n      return self._configureCardinalSdk({\n        setupOptions: setupOptions,\n        setupStartTime: startTime,\n      });\n    })\n    .catch(function (err) {\n      var error = convertToBraintreeError(err, {\n        type: errors.THREEDS_CARDINAL_SDK_SETUP_FAILED.type,\n        code: errors.THREEDS_CARDINAL_SDK_SETUP_FAILED.code,\n        message: errors.THREEDS_CARDINAL_SDK_SETUP_FAILED.message,\n      });\n\n      self._getDfReferenceIdPromisePlus.reject(error);\n\n      window.clearTimeout(self._songbirdSetupTimeoutReference);\n      analytics.sendEvent(\n        self._client,\n        \"three-d-secure.cardinal-sdk.init.setup-failed\"\n      );\n      self.initiateV1Fallback(\n        \"cardinal-sdk-setup-failed.\" + self._v2SetupFailureReason\n      );\n    });\n\n  return this._songbirdPromise;\n};\n\nSongbirdFramework.prototype._configureCardinalSdk = function (config) {\n  var self = this;\n\n  return this._waitForClient()\n    .then(function () {\n      var threeDSConfig =\n        self._client.getConfiguration().gatewayConfiguration.threeDSecure;\n\n      return threeDSConfig;\n    })\n    .then(function (threeDSConfig) {\n      var jwt = threeDSConfig.cardinalAuthenticationJWT;\n      var setupOptions = config.setupOptions;\n      var setupStartTime = config.setupStartTime;\n      var cardinalConfiguration =\n        self._createCardinalConfigurationOptions(setupOptions);\n\n      SONGBIRD_UI_EVENTS.forEach(function (eventName) {\n        self.setCardinalListener(eventName, function () {\n          self._emit(SongbirdFramework.events[eventName.toUpperCase()]);\n        });\n      });\n      self.setCardinalListener(\n        \"payments.setupComplete\",\n        self._createPaymentsSetupCompleteCallback()\n      );\n\n      self._setupFrameworkSpecificListeners();\n\n      window.Cardinal.configure(cardinalConfiguration);\n\n      window.Cardinal.setup(\"init\", {\n        jwt: jwt,\n      });\n\n      self._clientMetadata.cardinalDeviceDataCollectionTimeElapsed =\n        Date.now() - setupStartTime;\n\n      self.setCardinalListener(\n        \"payments.validated\",\n        self._createPaymentsValidatedCallback()\n      );\n    })\n    .catch(function (err) {\n      self._v2SetupFailureReason = \"cardinal-configuration-threw-error\";\n\n      return Promise.reject(err);\n    });\n};\n\nSongbirdFramework.prototype.setCardinalListener = function (eventName, cb) {\n  this._cardinalEvents.push(eventName);\n  window.Cardinal.on(eventName, cb);\n};\n\nSongbirdFramework.prototype._setupFrameworkSpecificListeners = function () {\n  // noop\n};\n\nSongbirdFramework.prototype._createCardinalConfigurationOptions = function (\n  setupOptions\n) {\n  var cardinalConfiguration = setupOptions.cardinalSDKConfig || {};\n  var paymentSettings = cardinalConfiguration.payment || {};\n\n  if (!cardinalConfiguration.logging && setupOptions.loggingEnabled) {\n    cardinalConfiguration.logging = {\n      level: \"verbose\",\n    };\n  }\n\n  cardinalConfiguration.payment = {};\n\n  if (paymentSettings.hasOwnProperty(\"displayLoading\")) {\n    cardinalConfiguration.payment.displayLoading =\n      paymentSettings.displayLoading;\n  }\n  if (paymentSettings.hasOwnProperty(\"displayExitButton\")) {\n    cardinalConfiguration.payment.displayExitButton =\n      paymentSettings.displayExitButton;\n  }\n\n  return cardinalConfiguration;\n};\n\nSongbirdFramework.prototype._loadCardinalScript = function (setupOptions) {\n  var self = this;\n  var scriptSource = constants.CARDINAL_SCRIPT_SOURCE.sandbox;\n\n  return this._waitForClient()\n    .then(function () {\n      var isProduction =\n        self._client.getConfiguration().gatewayConfiguration.environment ===\n        \"production\";\n\n      self._songbirdSetupTimeoutReference = window.setTimeout(function () {\n        analytics.sendEvent(\n          self._client,\n          \"three-d-secure.cardinal-sdk.init.setup-timeout\"\n        );\n        self.initiateV1Fallback(\"cardinal-sdk-setup-timeout\");\n      }, setupOptions.timeout || INTEGRATION_TIMEOUT_MS);\n\n      if (isProduction) {\n        scriptSource = constants.CARDINAL_SCRIPT_SOURCE.production;\n      }\n\n      return assets.loadScript({ src: scriptSource });\n    })\n    .catch(function (err) {\n      self._v2SetupFailureReason = \"songbird-js-failed-to-load\";\n\n      return Promise.reject(\n        convertToBraintreeError(\n          err,\n          errors.THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED\n        )\n      );\n    });\n};\n\nSongbirdFramework.prototype._createPaymentsSetupCompleteCallback = function () {\n  var self = this;\n\n  return function (data) {\n    self._getDfReferenceIdPromisePlus.resolve(data.sessionId);\n\n    window.clearTimeout(self._songbirdSetupTimeoutReference);\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.cardinal-sdk.init.setup-completed\"\n    );\n\n    self._songbirdPromise.resolve();\n  };\n};\n\nSongbirdFramework.prototype.getDfReferenceId = function () {\n  return this._getDfReferenceIdPromisePlus;\n};\n\nSongbirdFramework.prototype._performJWTValidation = function (\n  rawCardinalSDKVerificationData,\n  jwt\n) {\n  var self = this;\n  var nonce = this._lookupPaymentMethod.nonce;\n  var url =\n    \"payment_methods/\" + nonce + \"/three_d_secure/authenticate_from_jwt\";\n  var cancelCode =\n    rawCardinalSDKVerificationData &&\n    rawCardinalSDKVerificationData.Payment &&\n    rawCardinalSDKVerificationData.Payment.ExtendedData &&\n    rawCardinalSDKVerificationData.Payment.ExtendedData.ChallengeCancel;\n\n  if (cancelCode) {\n    // see ChallengeCancel docs here for different values:\n    // https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/98315/Response+Objects\n    analytics.sendEvent(\n      this._createPromise,\n      \"three-d-secure.verification-flow.cardinal-sdk.cancel-code.\" + cancelCode\n    );\n\n    if (cancelCode === CUSTOMER_CANCELED_SONGBIRD_MODAL) {\n      this._emit(SongbirdFramework.events.CUSTOMER_CANCELED);\n    }\n  }\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"three-d-secure.verification-flow.upgrade-payment-method.started\"\n  );\n\n  return this._waitForClient()\n    .then(function () {\n      return self._client.request({\n        method: \"post\",\n        endpoint: url,\n        data: {\n          jwt: jwt,\n          paymentMethodNonce: nonce,\n        },\n      });\n    })\n    .then(function (response) {\n      var paymentMethod = response.paymentMethod || self._lookupPaymentMethod;\n      var formattedResponse = self._formatAuthResponse(\n        paymentMethod,\n        response.threeDSecureInfo\n      );\n\n      formattedResponse.rawCardinalSDKVerificationData =\n        rawCardinalSDKVerificationData;\n      analytics.sendEvent(\n        self._client,\n        \"three-d-secure.verification-flow.upgrade-payment-method.succeeded\"\n      );\n\n      return Promise.resolve(formattedResponse);\n    })\n    .catch(function (err) {\n      var error = new BraintreeError({\n        type: errors.THREEDS_JWT_AUTHENTICATION_FAILED.type,\n        code: errors.THREEDS_JWT_AUTHENTICATION_FAILED.code,\n        message: errors.THREEDS_JWT_AUTHENTICATION_FAILED.message,\n        details: {\n          originalError: err,\n        },\n      });\n\n      analytics.sendEvent(\n        self._client,\n        \"three-d-secure.verification-flow.upgrade-payment-method.errored\"\n      );\n\n      return Promise.reject(error);\n    });\n};\n\nSongbirdFramework.prototype._createPaymentsValidatedCallback = function () {\n  var self = this;\n\n  /**\n   * @param {object} data Response Data\n   * @see {@link https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/98315/Response+Objects#ResponseObjects-ObjectDefinition}\n   * @param {string} data.ActionCode The resulting state of the transaction.\n   * @param {boolean} data.Validated Represents whether transaction was successfully or not.\n   * @param {object} data.Payment Represents additional information about the verification.\n   * @param {number} data.ErrorNumber A non-zero value represents the error encountered while attempting the process the message request.\n   * @param {string} data.ErrorDescription Application error description for the associated error number.\n   * @param {string} validatedJwt Response JWT\n   * @returns {void}\n   * */\n  return function (data, validatedJwt) {\n    var formattedError;\n\n    if (self._useV1Fallback) {\n      // TODO since we've removed the listeners for the payments validated callback when initiating the v1 fallback,\n      // we should never get to this point. Leave this analtyics event in for now and review if that is indeed the\n      // case before removing this block.\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.cardinal-sdk.payments-validated-callback-called-in-v1-fallback-flow\"\n      );\n\n      return;\n    }\n\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.verification-flow.cardinal-sdk.action-code.\" +\n        data.ActionCode.toLowerCase()\n    );\n\n    if (!self._verifyCardPromisePlus) {\n      self.initiateV1Fallback(\n        \"cardinal-sdk-setup-error.number-\" + data.ErrorNumber\n      );\n\n      return;\n    }\n\n    switch (data.ActionCode) {\n      // Handle these scenarios based on liability shift information in the response.\n      case \"SUCCESS\":\n      case \"NOACTION\":\n      case \"FAILURE\":\n        self\n          ._performJWTValidation(data, validatedJwt)\n          .then(function (result) {\n            self._verifyCardPromisePlus.resolve(result);\n          })\n          .catch(function (err) {\n            self._verifyCardPromisePlus.reject(err);\n          });\n        break;\n\n      case \"ERROR\":\n        analytics.sendEvent(\n          self._createPromise,\n          \"three-d-secure.verification-flow.cardinal-sdk-error.\" +\n            data.ErrorNumber\n        );\n\n        switch (data.ErrorNumber) {\n          case 10001: // Cardinal Docs: Timeout when sending an /Init message\n          case 10002: // Cardinal Docs: Timeout when sending an /Start message\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT\n            );\n            break;\n          case 10003: // Cardinal Docs: Timeout when sending an /Validate message. Although this code exists we do not yet have a flow where a validate message is sent to Midas. This error should not yet be triggered\n          case 10007: // Cardinal Docs: Timeout when sending an /Confirm message\n          case 10009: // Cardinal Docs: Timeout when sending an /Continue message\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT\n            );\n            break;\n          case 10005: // Cardinal Docs: Songbird was started without a request jwt.\n          case 10006: // Cardinal Docs: This is a general configuration error. The description is populated by the specific configuration error that caused the error.\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_BAD_CONFIG\n            );\n            break;\n          case 10008: // Cardinal Docs: Songbird was initialized without a merchant JWT.\n          case 10010: // Cardinal Docs: The response JWT was\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_BAD_JWT\n            );\n            break;\n          case 10011:\n            // This may never get called, according to the Cardinal docs:\n            // The user has canceled the transaction. This is generally found in alternative\n            // payments that supply a cancel button on the payment brand side.\n            analytics.sendEvent(\n              self._createPromise,\n              \"three-d-secure.verification-flow.canceled\"\n            );\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_CANCELED\n            );\n            break;\n          default:\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_ERROR\n            );\n        }\n\n        formattedError.details = {\n          originalError: {\n            code: data.ErrorNumber,\n            description: data.ErrorDescription,\n          },\n        };\n\n        self._verifyCardPromisePlus.reject(formattedError);\n        break;\n\n      default:\n    }\n  };\n};\n\nSongbirdFramework.prototype._checkForVerifyCardError = function (\n  options,\n  privateOptions\n) {\n  return BaseFramework.prototype._checkForVerifyCardError.call(\n    this,\n    options,\n    privateOptions\n  );\n};\n\nSongbirdFramework.prototype._checkForFrameworkSpecificVerifyCardErrors =\n  function (options, privateOptions) {\n    var errorOption;\n\n    if (\n      typeof options.onLookupComplete !== \"function\" &&\n      !privateOptions.ignoreOnLookupCompleteRequirement\n    ) {\n      errorOption = \"an onLookupComplete function\";\n    }\n\n    return errorOption;\n  };\n\nSongbirdFramework.prototype._formatVerifyCardOptions = function (options) {\n  var modifiedOptions = BaseFramework.prototype._formatVerifyCardOptions.call(\n    this,\n    options\n  );\n  var additionalInformation = modifiedOptions.additionalInformation || {};\n\n  additionalInformation = this.transformBillingAddress(\n    additionalInformation,\n    options.billingAddress\n  );\n  additionalInformation = this.transformShippingAddress(additionalInformation);\n\n  if (options.onLookupComplete) {\n    modifiedOptions.onLookupComplete = deferred(options.onLookupComplete);\n  }\n  if (options.email) {\n    additionalInformation.email = options.email;\n  }\n  if (options.mobilePhoneNumber) {\n    additionalInformation.mobilePhoneNumber = options.mobilePhoneNumber;\n  }\n\n  modifiedOptions.additionalInformation = additionalInformation;\n\n  return modifiedOptions;\n};\n\nSongbirdFramework.prototype._onLookupComplete = function (\n  lookupResponse,\n  options\n) {\n  var self = this;\n\n  return BaseFramework.prototype._onLookupComplete\n    .call(this, lookupResponse)\n    .then(function (response) {\n      return new Promise(function (resolve, reject) {\n        // NEXT_MAJOR_VERSION format this response object to look like the mobile sdk response\n        // which is basically the lookup param at the top level with some additional accessors\n        response.requiresUserAuthentication = Boolean(\n          response.lookup && response.lookup.acsUrl\n        );\n\n        function next() {\n          resolve(response);\n        }\n\n        self._verifyCardPromisePlus.catch(reject);\n\n        // If both event and callback are mistakenly used together,\n        // prefer the callback when it is passed into the verifyCard options\n        if (options.onLookupComplete) {\n          options.onLookupComplete(response, next);\n        } else {\n          self._emit(SongbirdFramework.events.LOOKUP_COMPLETE, response, next);\n        }\n      });\n    });\n};\n\nSongbirdFramework.prototype._presentChallenge = function (lookupResponse) {\n  // transactionId is required for the Songbird flow, so if it\n  // does not exist, we fallback to the 3ds v1 flow\n  if (this._useV1Fallback || !lookupResponse.lookup.transactionId) {\n    this._presentChallengeWithV1Fallback(lookupResponse.lookup);\n\n    return;\n  }\n\n  // set up listener for ref id to call out to bt before calling verify callback\n  window.Cardinal.continue(\n    \"cca\",\n    {\n      AcsUrl: lookupResponse.lookup.acsUrl,\n      Payload: lookupResponse.lookup.pareq,\n    },\n    {\n      OrderDetails: { TransactionId: lookupResponse.lookup.transactionId },\n    }\n  );\n};\n\nSongbirdFramework.prototype._formatLookupData = function (options) {\n  var self = this;\n\n  return BaseFramework.prototype._formatLookupData\n    .call(this, options)\n    .then(function (data) {\n      data.additionalInfo = options.additionalInformation;\n\n      if (options.accountType) {\n        data.accountType = options.accountType;\n      }\n      if (options.challengeRequested) {\n        data.challengeRequested = options.challengeRequested;\n      }\n      if (options.dataOnlyRequested) {\n        data.dataOnlyRequested = options.dataOnlyRequested;\n      }\n      if (options.exemptionRequested) {\n        data.exemptionRequested = options.exemptionRequested;\n      }\n      if (options.bin) {\n        data.bin = options.bin;\n      }\n      // NEXT_MAJOR_VERSION remove cardAdd in favor of cardAddChallengeRequested\n      if (options.cardAdd != null) {\n        data.cardAdd = options.cardAdd;\n      }\n      if (options.cardAddChallengeRequested != null) {\n        data.cardAdd = options.cardAddChallengeRequested;\n      }\n\n      return self.prepareLookup(data);\n    });\n};\n\nSongbirdFramework.prototype.cancelVerifyCard = function (verifyCardError) {\n  var self = this;\n\n  return BaseFramework.prototype.cancelVerifyCard\n    .call(this)\n    .then(function (response) {\n      if (self._verifyCardPromisePlus) {\n        verifyCardError =\n          verifyCardError ||\n          new BraintreeError(errors.THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT);\n\n        self._verifyCardPromisePlus.reject(verifyCardError);\n      }\n\n      return response;\n    });\n};\n\nSongbirdFramework.prototype._removeSongbirdListeners = function () {\n  this._cardinalEvents.forEach(function (eventName) {\n    window.Cardinal.off(eventName);\n  });\n\n  this._cardinalEvents = [];\n};\n\nSongbirdFramework.prototype.teardown = function () {\n  if (window.Cardinal) {\n    this._removeSongbirdListeners();\n  }\n\n  // we intentionally do not remove the Cardinal SDK\n  // from the page when tearing down. Subsequent\n  // component creations will be faster because\n  // the asset is already on the page\n\n  return BaseFramework.prototype.teardown.call(this);\n};\n\nfunction extractAddressData(source, target, prefix) {\n  target[prefix + \"Line1\"] = source.streetAddress;\n  target[prefix + \"Line2\"] = source.extendedAddress;\n  target[prefix + \"Line3\"] = source.line3;\n  target[prefix + \"City\"] = source.locality;\n  target[prefix + \"State\"] = source.region;\n  target[prefix + \"PostalCode\"] = source.postalCode;\n  target[prefix + \"CountryCode\"] = source.countryCodeAlpha2;\n}\n\nmodule.exports = SongbirdFramework;\n\n},{\"../../../lib/analytics\":94,\"../../../lib/assets\":95,\"../../../lib/assign\":96,\"../../../lib/braintree-error\":99,\"../../../lib/constants\":100,\"../../../lib/convert-to-braintree-error\":102,\"../../../lib/deferred\":106,\"../../../lib/enumerate\":108,\"../../../lib/promise\":131,\"../../shared/constants\":150,\"../../shared/errors\":151,\"./base\":141,\"@braintree/extended-promise\":42}],148:[function(require,module,exports){\n\"use strict\";\n\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar methods = require(\"../../lib/methods\");\nvar convertMethodsToError = require(\"../../lib/convert-methods-to-error\");\nvar EventEmitter = require(\"@braintree/event-emitter\");\nvar FRAMEWORKS = require(\"./frameworks\");\n\n/**\n * @deprecated\n * @callback ThreeDSecure~addFrameCallback\n * @param {?BraintreeError} [err] `null` or `undefined` if there was no error.\n * @param {HTMLIFrameElement} iframe An iframe element containing the bank's authentication page that you must put on your page.\n * @description **Deprecated** The callback used for options.addFrame in 3DS 1.0's {@link ThreeDSecure#verifyCard|verifyCard}.\n * @returns {void}\n */\n\n/**\n * @deprecated\n * @callback ThreeDSecure~removeFrameCallback\n * @description **Deprecated** The callback used for options.removeFrame in 3DS 1.0's {@link ThreeDSecure#verifyCard|verifyCard}.\n * @returns {void}\n */\n\n/**\n * @deprecated\n * @typedef {object} ThreeDSecure~verifyCardCustomerObject\n * @property {string} [customer.mobilePhoneNumber] The mobile phone number used for verification. Only numbers; remove dashes, parenthesis and other characters.\n * @property {string} [customer.email] The email used for verification.\n * @property {string} [customer.shippingMethod] The 2-digit string indicating the shipping method chosen for the transaction.\n * @property {string} [customer.billingAddress.firstName] The first name associated with the address.\n * @property {string} [customer.billingAddress.lastName] The last name associated with the address.\n * @property {string} [customer.billingAddress.streetAddress] Line 1 of the Address (eg. number, street, etc).\n * @property {string} [customer.billingAddress.extendedAddress] Line 2 of the Address (eg. suite, apt #, etc.).\n * @property {string} [customer.billingAddress.locality] The locality (city) name associated with the address.\n * @property {string} [customer.billingAddress.region] The 2 letter code for US states or an ISO-3166-2 country subdivision code of up to three letters.\n * @property {string} [customer.billingAddress.postalCode] The zip code or equivalent for countries that have them.\n * @property {string} [customer.billingAddress.countryCodeAlpha2] The 2 character country code.\n * @property {string} [customer.billingAddress.phoneNumber] The phone number associated with the address. Only numbers; remove dashes, parenthesis and other characters.\n * @description **Deprecated** Optional customer information to be passed to 3DS 1.0 for verification.\n */\n\n/**\n * @typedef {object} ThreeDSecure~verifyPayload\n * @property {string} nonce The new payment method nonce produced by the 3D Secure lookup. The original nonce passed into {@link ThreeDSecure#verifyCard|verifyCard} was consumed. This new nonce should be used to transact on your server.\n * @property {string} type The payment method type.\n * @property {object} details Additional account details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n * @property {boolean} liabilityShiftPossible *Deprecated:* Use `threeDSecureInfo.liabilityShiftPossible` instead.\n * @property {boolean} liabilityShifted *Deprecated:* Use `threeDSecureInfo.liabilityShifted` instead.\n * @property {object} threeDSecureInfo 3DS information about the card. Note: This information should be verified on the server by using the [payment method nonce find method](https://developer.paypal.com/braintree/docs/reference/request/payment-method-nonce/find). The values provided here are merely for convenience. Only values looked up on the server should determine the logic about how to process a transaction.\n * @property {string} threeDSecureInfo.acsTransactionId The transaction identifier from the issuing bank.\n * @property {string} threeDSecureInfo.cavv Cardholder authentication verification value or CAVV. The main encrypted message issuers and card networks use to verify authentication has occurred. Mastercard uses an AVV message and American Express uses an AEVV message, each of which should also be passed in the cavv parameter.\n * @property {boolean} threeDSecureInfo.dataOnlyRequested Indicates whether to use the data only flow. In this flow, frictionless 3DS is ensured for Mastercard cardholders as the card scheme provides a risk score for the issuer to determine whether to approve. If data only is not supported by the processor, a validation error will be raised. Non-Mastercard cardholders will fallback to a normal 3DS flow.\n * @property {string} threeDSecureInfo.dsTransactionId Transaction identifier resulting from 3D Secure 2 authentication.\n * @property {string} threeDSecureInfo.eciFlag The value of the electronic commerce indicator (ECI) flag, which indicates the outcome of the 3DS authentication. This will be a two-digit value.\n * @property {boolean} threeDSecureInfo.enrolled Indicates the status of 3D Secure authentication eligibility with the card issuer.\n * @property {boolean} threeDSecureInfo.liabilityShifted Indicates whether the liability for fraud has been shifted away from the merchant.\n * @property {boolean} threeDSecureInfo.liabilityShiftPossible Indicates whether liability shift is still possible on a retry.\n * @property {string} threeDSecureInfo.paresStatus Transaction status result identifier.\n * @property {string} threeDSecureInfo.status Indicates the outcome of the 3D Secure event.\n * @property {string} threeDSecureInfo.threeDSecureAuthenticationId ID of the 3D Secure authentication performed for this transaction. Do not provide this field as a transaction sale parameter if you are using the returned payment method nonce from the payload.\n * @property {string} threeDSecureInfo.threeDSecureServerTransactionId Transaction identifier provided by the issuing bank who recieved the 3D Secure event.\n * @property {string} threeDSecureInfo.threeDSecureVersion The version of 3D Secure authentication used for the transaction.\n * @property {string} threeDSecureInfo.xid Transaction identifier resulting from 3D Secure authentication. Uniquely identifies the transaction and sometimes required in the authorization message. This is a base64-encoded value. This field will no longer be used in 3D Secure 2 authentications for Visa and Mastercard, however it will be supported by American Express.\n * @property {string} threeDSecureInfo.lookup.transStatus Error code returned from the 3D Secure MPI provider.\n * @property {string} threeDSecureInfo.lookup.transStatusReason Description correlating to the transStatus error code.\n * @property {string} threeDSecureInfo.authentication.transStatus Error code returned from the 3D Secure MPI provider.\n * @property {string} threeDSecureInfo.authentication.transStatusReason Description correlating to the transStatus error code.\n * @property {object} rawCardinalSDKVerificationData The response back from the Cardinal SDK after verification has completed. See [Cardinal's Documentation](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/98315/Response+Objects) for more information. If the customer was not required to do a 3D Secure challenge, this object will not be available.\n */\n\n/**\n * @typedef {string} ThreeDSecure~prepareLookupPayload The client data to pass on when doing a server side lookup call.\n */\n\n/**\n * @typedef {object} ThreeDSecure~verificationData\n * @property {boolean} requiresUserAuthentication When `true`, the user will be presented with a 3D Secure challenge when calling `next` in the {@link ThreeDSecure#event:lookup-complete|`lookup-complete` event}.\n * @property {object} threeDSecureInfo Contains liability shift details.\n * @property {boolean} threeDSecureInfo.liabilityShiftPossible Indicates whether the card was eligible for 3D Secure.\n * @property {boolean} threeDSecureInfo.liabilityShifted Indicates whether the liability for fraud has been shifted away from the merchant.\n * @property {object} paymentMethod A {@link ThreeDSecure~verifyPayload|verifyPayload} object.\n * @property {object} lookup Details about the 3D Secure lookup.\n * @property {string} lookup.threeDSecureVersion The version of 3D Secure that will be used for the 3D Secure challenge.\n */\n\n/**\n * @typedef {object} ThreeDSecure~billingAddress\n * @property {string} [givenName] The first name associated with the billing address. (maximum length 50)\n * @property {string} [surname] The last name associated with the billing address. (maximum length 50)\n * @property {string} [phoneNumber] The phone number associated with the billing address. Only numbers; remove dashes, parenthesis and other characters.\n * @property {string} [streetAddress] Line 1 of the billing address (eg. number, street, etc). (maximum length 50)\n * @property {string} [extendedAddress] Line 2 of the billing address (eg. suite, apt #, etc.). (maximum length 50)\n * @property {string} [line3] Line 3 of the billing address if needed (eg. suite, apt #, etc). (maximum length 50)\n * @property {string} [locality] The locality (city) name associated with the billing address.\n * @property {string} [region] This field expects an ISO3166-2 subdivision code. The subdivision code is what follows the hyphen separator in the full ISO 3166-2 code. For example, the state of Ohio in the United States we expect \"OH\" as opposed to the full ISO 3166-2 code \"US-OH\".\n * @property {string} [postalCode] The zip code or equivalent for countries that have them.\n * @property {string} [countryCodeAlpha2] The 2 character country code.\n */\n\n/**\n * @typedef {object} ThreeDSecure~additionalInformation\n * @property {string} [workPhoneNumber] The work phone number used for verification. Only numbers; remove dashes, parenthesis and other characters. (maximum length 25)\n * @property {string} [shippingGivenName] The first name associated with the shipping address. (maximum length 50)\n * @property {string} [shippingSurname] The last name associated with the shipping address. (maximum length 50)\n * @property {object} [shippingAddress]\n * @property {string} [shippingAddress.streetAddress] Line 1 of the shipping address (eg. number, street, etc). (maximum length 50)\n * @property {string} [shippingAddress.extendedAddress] Line 2 of the shipping address (eg. suite, apt #, etc.). (maximum length 50)\n * @property {string} [shippingAddress.line3] Line 3 of the shipping address if needed (eg. suite, apt #, etc). (maximum length 50)\n * @property {string} [shippingAddress.locality] The locality (city) name associated with the shipping address. (maximum length 50)\n * @property {string} [shippingAddress.region] This field expects an ISO3166-2 subdivision code. The subdivision code is what follows the hyphen separator in the full ISO 3166-2 code. For example, the state of Ohio in the United States we expect \"OH\" as opposed to the full ISO 3166-2 code \"US-OH\".\n * @property {string} [shippingAddress.postalCode] The zip code or equivalent for countries that have them. (maximum length 10)\n * @property {string} [shippingAddress.countryCodeAlpha2] The 2 character country code. (maximum length 2)\n * @property {string} [shippingPhone] The phone number associated with the shipping address. Only numbers; remove dashes, parenthesis and other characters. (maximum length 20)\n * @property {string} [shippingMethod] The 2-digit string indicating the name of the shipping method chosen for the transaction. (maximum length 50) Possible values:\n * - `01` Same Day\n * - `02` Overnight / Expedited\n * - `03` Priority (2-3 Days)\n * - `04` Ground\n * - `05` Electronic Delivery\n * - `06` Ship to Store\n * @property {string} [shippingMethodIndicator] The 2-digit string indicating the shipping method chosen for the transaction Possible values.\n * - `01` Ship to cardholder billing address\n * - `02` Ship to another verified address on file with merchant\n * - `03` Ship to address that is different from billing address\n * - `04` Ship to store (store address should be populated on request)\n * - `05` Digital goods\n * - `06` Travel and event tickets, not shipped\n * - `07` Other\n * @property {string} [productCode] The 3-letter string representing the merchant product code. Possible values:\n * - `AIR` Airline\n * - `GEN` General Retail\n * - `DIG` Digital Goods\n * - `SVC` Services\n * - `RES` Restaurant\n * - `TRA` Travel\n * - `DSP` Cash Dispensing\n * - `REN` Car Rental\n * - `GAS` Fuel\n * - `LUX` Luxury Retail\n * - `ACC` Accommodation Retail\n * - `TBD` Other\n * @property {string} [deliveryTimeframe] The 2-digit number indicating the delivery time frame. Possible values:\n * - `01` Electronic delivery\n * - `02` Same day shipping\n * - `03` Overnight shipping\n * - `04` Two or more day shipping\n * @property {string} [deliveryEmail] For electronic delivery, email address to which the merchandise was delivered. (maximum length 254)\n * @property {string} [reorderindicator] The 2-digit number indicating whether the cardholder is reordering previously purchased merchandise. possible values:\n * - `01` First time ordered\n * - `02` Reordered\n * @property {string} [preorderIndicator] The 2-digit number indicating whether cardholder is placing an order with a future availability or release date. possible values:\n * - `01` Merchandise available\n * - `02` Future availability\n * @property {string} [preorderDate] The 8-digit number (format: YYYYMMDD) indicating expected date that a pre-ordered purchase will be available.\n * @property {string} [giftCardAmount] The purchase amount total for prepaid gift cards in major units. (maximum length 15)\n * @property {string} [giftCardCurrencyCode] ISO 4217 currency code for the gift card purchased. (maximum length 3)\n * @property {string} [giftCardCount] Total count of individual prepaid gift cards purchased. (maximum length 2)\n * @property {string} [accountAgeIndicator] The 2-digit value representing the length of time cardholder has had account. Possible values:\n * - `01` No Account\n * - `02` Created during transaction\n * - `03` Less than 30 days\n * - `04` 30-60 days\n * - `05` More than 60 days\n * @property {string} [accountCreateDate] The 8-digit number (format: YYYYMMDD) indicating the date the cardholder opened the account.\n * @property {string} [accountChangeIndicator] The 2-digit value representing the length of time since the last change to the cardholder account. This includes shipping address, new payment account or new user added. Possible values:\n * - `01` Changed during transaction\n * - `02` Less than 30 days\n * - `03` 30-60 days\n * - `04` More than 60 days\n * @property {string} [accountChangeDate] The 8-digit number (format: YYYYMMDD) indicating the date the cardholder's account was last changed. This includes changes to the billing or shipping address, new payment accounts or new users added.\n * @property {string} [accountPwdChangeIndicator] The 2-digit value representing the length of time since the cardholder changed or reset the password on the account. Possible values:\n * - `01` No change\n * - `02` Changed during transaction\n * - `03` Less than 30 days\n * - `04` 30-60 days\n * - `05` More than 60 days\n * @property {string} [accountPwdChangeDate] The 8-digit number (format: YYYYMMDD) indicating the date the cardholder last changed or reset password on account.\n * @property {string} [shippingAddressUsageIndicator] The 2-digit value indicating when the shipping address used for transaction was first used. Possible values:\n * - `01` This transaction\n * - `02` Less than 30 days\n * - `03` 30-60 days\n * - `04` More than 60 days\n * @property {string} [shippingAddressUsageDate] The 8-digit number (format: YYYYMMDD) indicating the date when the shipping address used for this transaction was first used.\n * @property {string} [transactionCountDay] Number of transactions (successful or abandoned) for this cardholder account within the last 24 hours. (maximum length 3)\n * @property {string} [transactionCountYear] Number of transactions (successful or abandoned) for this cardholder account within the last year. (maximum length 3)\n * @property {string} [addCardAttempts] Number of add card attempts in the last 24 hours. (maximum length 3)\n * @property {string} [accountPurchases] Number of purchases with this cardholder account during the previous six months.\n * @property {string} [fraudActivity] The 2-digit value indicating whether the merchant experienced suspicious activity (including previous fraud) on the account. Possible values:\n * - `01` No suspicious activity\n * - `02` Suspicious activity observed\n * @property {string} [shippingNameIndicator] The 2-digit value indicating if the cardholder name on the account is identical to the shipping name used for the transaction. Possible values:\n * - `01` Account and shipping name identical\n * - `02` Account and shipping name differ\n * @property {string} [paymentAccountIndicator] The 2-digit value indicating the length of time that the payment account was enrolled in the merchant account. Possible values:\n * - `01` No account (guest checkout)\n * - `02` During the transaction\n * - `03` Less than 30 days\n * - `04` 30-60 days\n * - `05` More than 60 days\n * @property {string} [paymentAccountAge] The 8-digit number (format: YYYYMMDD) indicating the date the payment account was added to the cardholder account.\n * @property {string} [acsWindowSize] The 2-digit number to set the challenge window size to display to the end cardholder.  The ACS will reply with content that is formatted appropriately to this window size to allow for the best user experience.  The sizes are width x height in pixels of the window displayed in the cardholder browser window. Possible values:\n * - `01` 250x400\n * - `02` 390x400\n * - `03` 500x600\n * - `04` 600x400\n * - `05` Full page\n * @property {string} [sdkMaxTimeout] The 2-digit number of minutes (minimum 05) to set the maximum amount of time for all 3DS 2.0 messages to be communicated between all components.\n * @property {string} [addressMatch] The 1-character value (Y/N) indicating whether cardholder billing and shipping addresses match.\n * @property {string} [accountId] Additional cardholder account information. (maximum length 64)\n * @property {string} [ipAddress] The IP address of the consumer. IPv4 and IPv6 are supported.\n * @property {string} [orderDescription] Brief description of items purchased. (maximum length 256)\n * @property {string} [taxAmount] Unformatted tax amount without any decimalization (ie. $123.67 = 12367). (maximum length 20)\n * @property {string} [userAgent] The exact content of the HTTP user agent header. (maximum length 500)\n * @property {string} [authenticationIndicator] The 2-digit number indicating the type of authentication request. Possible values:\n *  - `01` Payment\n *  - `02` Recurring transaction\n *  - `03` Installment\n *  - `04` Add card\n *  - `05` Maintain card\n *  - `06` Cardholder verification as part of EMV token ID&V\n * @property {string} [installment] An integer value greater than 1 indicating the maximum number of permitted authorizations for installment payments. (maximum length 3)\n * @property {string} [purchaseDate] The 14-digit number (format: YYYYMMDDHHMMSS) indicating the date in UTC of original purchase.\n * @property {string} [recurringEnd] The 8-digit number (format: YYYYMMDD) indicating the date after which no further recurring authorizations should be performed.\n * @property {string} [recurringFrequency] Integer value indicating the minimum number of days between recurring authorizations. A frequency of monthly is indicated by the value 28. Multiple of 28 days will be used to indicate months (ex. 6 months = 168). (maximum length 3)\n */\n\n/**\n * @name ThreeDSecure#on\n * @function\n * @param {string} event The name of the event to which you are subscribing.\n * @param {function} handler A callback to handle the event.\n * @description Subscribes a handler function to a named event. The following events are available:\n *   * {@link ThreeDSecure#event:lookup-complete|lookup-complete}\n *   * {@link ThreeDSecure#event:customer-canceled|customer-canceled}\n *   * {@link ThreeDSecure#event:authentication-iframe-available|authentication-iframe-available}\n *   * {@link ThreeDSecure#event:authentication-modal-render|authentication-modal-render}\n *   * {@link ThreeDSecure#event:authentication-modal-close|authentication-modal-close}\n * @example\n * <caption>Listening to a 3D Secure event</caption>\n * braintree.threeDSecure.create({ ... }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('lookup-complete', function (data, next) {\n *     console.log('data from the lookup', data);\n *     next();\n *   });\n *   threeDSecureInstance.on('customer-canceled', function () {\n *     console.log('log that the customer canceled');\n *   });\n * });\n * @returns {void}\n */\n\n/**\n * @name ThreeDSecure#off\n * @function\n * @param {string} event The name of the event to which you are unsubscribing.\n * @param {function} handler The callback for the event you are unsubscribing from.\n * @description Unsubscribes the handler function to a named event.\n * @example\n * <caption>Subscribing and then unsubscribing from a 3D Secure eld event</caption>\n * braintree.threeDSecure.create({ ... }, function (createErr, threeDSecureInstance) {\n *   var lookupCallback = function (data, next) {\n *     console.log(data);\n *     next();\n *   };\n *   var cancelCallback = function () {\n *     // log the cancelation\n *     // or update UI\n *   };\n *\n *   threeDSecureInstance.on('lookup-complete', lookupCallback);\n *   threeDSecureInstance.on('customer-canceled', cancelCallback);\n *\n *   // later on\n *   threeDSecureInstance.off('lookup-complete', lookupCallback);\n *   threeDSecureInstance.off('customer-canceled', cancelCallback);\n * });\n * @returns {void}\n */\n\n/**\n * This event is emitted when the `2-inline-iframe` version is specified when creating the 3D Secure instance and the authentication iframe becomes available.\n * @event ThreeDSecure#authentication-iframe-available\n * @example\n * <caption>Listening for the authentication iframe to be available</caption>\n *   threeDSecureInstance.on('authentication-iframe-available', function (event, next) {\n *     document.body.appendChild(event.element); // add iframe element to page\n *\n *     next(); // let the SDK know the iframe is ready\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the initial lookup request completes. If this is not used, a `onLookupComplete` callback must be passed into the `verifyCard` method.\n * @event ThreeDSecure#lookup-complete\n * @example\n * <caption>Listening for when the lookup request is complete</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('lookup-complete', function (data, next) {\n *     // inspect the data\n *\n *     // call next when ready to proceed with the challenge\n *     next();\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the customer cancels the 3D Secure challenge.\n * @event ThreeDSecure#customer-canceled\n * @example\n * <caption>Listening for when the customer cancels the 3D Secure challenge</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('customer-canceled', function () {\n *     // the customer canceled the 3D Secure challenge\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the authentication modal closes, either because the authentication was completed or because the customer canceled the process.\n * @event ThreeDSecure#authentication-modal-close\n * @example\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('authentication-modal-close', function () {\n *     // the modal was closed\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the authentication modal is rendered.\n * @event ThreeDSecure#authentication-modal-render\n * @example\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('authentication-modal-render', function () {\n *     // the modal was rendered, presenting the authentication form to the customer\n *   });\n * });\n */\n\n/**\n * @class\n * @param {object} options 3D Secure {@link module:braintree-web/three-d-secure.create create} options\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/three-d-secure.create|braintree.threeDSecure.create} instead.</strong>\n * @classdesc This class represents a ThreeDSecure component produced by {@link module:braintree-web/three-d-secure.create|braintree.threeDSecure.create}. Instances of this class have a method for launching a 3D Secure authentication flow.\n *\n * If you use the Braintree SDK from within an iframe, you must not use the `sandbox` attribute on your iframe or the 3D Secure modal will not function correctly.\n *\n * **Note**: 3D Secure 2.0 is documented below and will become the default integration method in a future version of Braintree-web. Until then, version 1.0 will continue to be supported. To view 3D Secure 1.0 documentation, look at Braintree-web documentation from version [3.40.0](https://braintree.github.io/braintree-web/3.40.0/ThreeDSecure.html) and earlier, or upgrade your integration by referring to the [3D Secure 2.0 adoption guide](https://developer.paypal.com/braintree/docs/guides/3d-secure/migration/javascript/v3).\n */\nfunction ThreeDSecure(options) {\n  var self = this;\n  var Framework = FRAMEWORKS[options.framework];\n\n  EventEmitter.call(this);\n\n  this._framework = new Framework(options);\n  this._framework.setUpEventListeners(function () {\n    self._emit.apply(self, arguments);\n  });\n}\n\nEventEmitter.createChild(ThreeDSecure);\n\n/**\n * Launch the 3D Secure login flow, returning a nonce payload.\n *\n * @public\n * @param {object} options Options for card verification.\n * @param {string} options.nonce The nonce representing the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.nonce`.\n * @param {string} options.bin The numeric Bank Identification Number (bin) of the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.details.bin`.\n * @param {string} options.amount The amount of the transaction in the current merchant account's currency. This must be expressed in numbers with an optional decimal (using `.`) and precision up to the hundredths place. For example, if you're processing a transaction for 1.234,56 € then `amount` should be `1234.56`.\n * @param {string} [options.accountType] The account type for the card (if known). Accepted values: `credit` or `debit`.\n * @param {boolean} [options.cardAddChallengeRequested] If set to `true`, a card-add challenge will be requested from the issuer. If set to `false`, a card-add challenge will not be requested. If the param is missing, a card-add challenge will only be requested for $0 amount. An authentication created using this flag should only be used for vaulting operations (creation of customers' credit cards or payment methods) and not for creating transactions.\n * @param {boolean} [options.cardAdd] *Deprecated:* Use `cardAddChallengeRequested` instead.\n * @param {boolean} [options.challengeRequested] If set to true, an authentication challenge will be forced if possible.\n * @param {boolean} [options.exemptionRequested] If set to true, an exemption to the authentication challenge will be requested.\n * @param {function} [options.onLookupComplete] *Deprecated:* Use {@link ThreeDSecure#event:lookup-complete|`threeDSecureInstance.on('lookup-complete')`} instead. Function to execute when lookup completes. The first argument, `data`, is a {@link ThreeDSecure~verificationData|verificationData} object, and the second argument, `next`, is a callback. `next` must be called to continue.\n * @param {string} [options.email] The email used for verification. (maximum length 255)\n * @param {string} [options.mobilePhoneNumber] The mobile phone number used for verification. Only numbers; remove dashes, parenthesis and other characters. (maximum length 25)\n * @param {object} [options.billingAddress] An {@link ThreeDSecure~billingAddress|billingAddress} object for verification.\n * @param {object} [options.additionalInformation] An {@link ThreeDSecure~additionalInformation|additionalInformation} object for verification.\n * @param {object} [options.customer] **Deprecated** Customer information for use in 3DS 1.0 verifications. Can contain any subset of a {@link ThreeDSecure~verifyCardCustomerObject|verifyCardCustomerObject}. Only to be used for 3DS 1.0 integrations.\n * @param {callback} options.addFrame **Deprecated** This {@link ThreeDSecure~addFrameCallback|addFrameCallback} will be called when the bank frame needs to be added to your page. Only to be used for 3DS 1.0 integrations.\n * @param {callback} options.removeFrame **Deprecated** For use in 3DS 1.0 Flows. This {@link ThreeDSecure~removeFrameCallback|removeFrameCallback} will be called when the bank frame needs to be removed from your page. Only to be used in 3DS 1.0 integrations.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link ThreeDSecure~verifyPayload|verifyPayload}. If no callback is provided, it will return a promise that resolves {@link ThreeDSecure~verifyPayload|verifyPayload}.\n\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * <caption>Verifying a payment method nonce with 3DS 2.0</caption>\n * var my3DSContainer;\n *\n * // set up listener after initialization\n * threeDSecure.on(('lookup-complete', function (data, next) {\n *   // use `data` here, then call `next()`\n *   next();\n * });\n *\n * // call verifyCard after tokenizing a card\n * threeDSecure.verifyCard({\n *   amount: '123.45',\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin,\n *   email: 'test@example.com'\n *   billingAddress: {\n *     givenName: 'Jill',\n *     surname: 'Doe',\n *     phoneNumber: '8101234567',\n *     streetAddress: '555 Smith St.',\n *     extendedAddress: '#5',\n *     locality: 'Oakland',\n *     region: 'CA',\n *     postalCode: '12345',\n *     countryCodeAlpha2: 'US'\n *   },\n *   additionalInformation: {\n *     workPhoneNumber: '5555555555',\n *     shippingGivenName: 'Jill',\n *     shippingSurname: 'Doe',\n *     shippingAddress: {\n *       streetAddress: '555 Smith st',\n *       extendedAddress: '#5',\n *       locality: 'Oakland',\n *       region: 'CA',\n *       postalCode: '12345',\n *       countryCodeAlpha2: 'US'\n *     }\n *     shippingPhone: '8101234567'\n *   }\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n * <caption>Verifying a payment method nonce with 3DS 2.0 with onLookupComplete callback</caption>\n * var my3DSContainer;\n *\n * threeDSecure.verifyCard({\n *   amount: '123.45',\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin,\n *   email: 'test@example.com'\n *   billingAddress: {\n *     givenName: 'Jill',\n *     surname: 'Doe',\n *     phoneNumber: '8101234567',\n *     streetAddress: '555 Smith St.',\n *     extendedAddress: '#5',\n *     locality: 'Oakland',\n *     region: 'CA',\n *     postalCode: '12345',\n *     countryCodeAlpha2: 'US'\n *   },\n *   additionalInformation: {\n *     workPhoneNumber: '5555555555',\n *     shippingGivenName: 'Jill',\n *     shippingSurname: 'Doe',\n *     shippingAddress: {\n *       streetAddress: '555 Smith st',\n *       extendedAddress: '#5',\n *       locality: 'Oakland',\n *       region: 'CA',\n *       postalCode: '12345',\n *       countryCodeAlpha2: 'US'\n *     }\n *     shippingPhone: '8101234567'\n *   },\n *   onLookupComplete: function (data, next) {\n *     // use `data` here, then call `next()`\n *     next();\n *   }\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n * @example\n * <caption>Handling 3DS lookup errors</caption>\n * var my3DSContainer;\n *\n * // set up listener after initialization\n * threeDSecure.on(('lookup-complete', function (data, next) {\n *   // use `data` here, then call `next()`\n *   next();\n * });\n *\n * // call verifyCard after tokenizing a card\n * threeDSecure.verifyCard({\n *   amount: '123.45',\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin,\n *   email: 'test@example.com',\n *   billingAddress: billingAddressFromCustomer,\n *   additionalInformation: additionalInfoFromCustomer\n * }, function (err, payload) {\n *   if (err) {\n *     if (err.code.indexOf('THREEDS_LOOKUP') === 0) {\n *       // an error occurred during the initial lookup request\n *\n *       if (err.code === 'THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR') {\n *         // either the passed payment method nonce does not exist\n *         // or it was already consumed before the lookup call was made\n *       } else if (err.code.indexOf('THREEDS_LOOKUP_VALIDATION') === 0) {\n *         // a validation error occurred\n *         // likely some non-ascii characters were included in the billing\n *         // address given name or surname fields, or the cardholdername field\n *\n *         // Instruct your user to check their data and try again\n *       } else {\n *         // an unknown lookup error occurred\n *       }\n *     } else {\n *       // some other kind of error\n *     }\n *     return;\n *   }\n *\n *   // handle success\n * });\n * @example\n * <caption>Deprecated: Verifying an existing nonce with 3DS 1.0</caption>\n * var my3DSContainer;\n *\n * threeDSecure.verifyCard({\n *   nonce: existingNonce,\n *   amount: 123.45,\n *   addFrame: function (err, iframe) {\n *     // Set up your UI and add the iframe.\n *     my3DSContainer = document.createElement('div');\n *     my3DSContainer.appendChild(iframe);\n *     document.body.appendChild(my3DSContainer);\n *   },\n *   removeFrame: function () {\n *     // Remove UI that you added in addFrame.\n *     document.body.removeChild(my3DSContainer);\n *   }\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n */\nThreeDSecure.prototype.verifyCard = function (options) {\n  var privateOptions;\n\n  if (this.hasListener(\"lookup-complete\")) {\n    privateOptions = {\n      ignoreOnLookupCompleteRequirement: true,\n    };\n  }\n\n  return this._framework.verifyCard(options, privateOptions);\n};\n\n/* eslint-disable-next-line valid-jsdoc */\n/**\n * Launch the iframe challenge using a 3D Secure lookup response from a server side lookup.\n *\n * @public\n * @param {(object|string)} lookupResponse The lookup response from the server side call to lookup the 3D Secure information. The raw string or a parsed object can be passed.\n * @returns {Promise} Returns a promise.\n * @example\n * var my3DSContainer;\n *\n * threeDSecure.initializeChallengeWithLookupResponse(lookupResponseFromServer).then(function (payload) {\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n */\nThreeDSecure.prototype.initializeChallengeWithLookupResponse = function (\n  lookupResponse\n) {\n  if (typeof lookupResponse === \"string\") {\n    lookupResponse = JSON.parse(lookupResponse);\n  }\n\n  return this._framework.initializeChallengeWithLookupResponse(lookupResponse);\n};\n\n/**\n * Gather the data needed for a 3D Secure lookup call.\n *\n * @public\n * @param {object} options Options for 3D Secure lookup.\n * @param {string} options.nonce The nonce representing the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.nonce`.\n * @param {string} [options.bin] The numeric Bank Identification Number (bin) of the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.details.bin`. Though not required to start the verification, it is required to receive a 3DS 2.0 lookup response.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link ThreeDSecure~prepareLookupPayload|prepareLookupPayload}. If no callback is provided, it will return a promise that resolves {@link ThreeDSecure~prepareLookupPayload|prepareLookupPayload}.\n\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * <caption>Preparing data for a 3D Secure lookup</caption>\n * threeDSecure.prepareLookup({\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   // send payload to server to do server side lookup\n * });\n */\nThreeDSecure.prototype.prepareLookup = function (options) {\n  return this._framework.prepareLookup(options).then(function (data) {\n    return JSON.stringify(data);\n  });\n};\n\n/**\n * Cancel the 3DS flow and return the verification payload if available. If using 3D Secure version 2, this will not close the UI of the authentication modal. It is recommended that this method only be used in the {@link ThreeDSecure#event:lookup-complete|`lookup-complete`} event or the `onLookupComplete` callback.\n * @public\n * @param {callback} [callback] The second argument is a {@link ThreeDSecure~verifyPayload|verifyPayload}. If there is no verifyPayload (the initial lookup did not complete), an error will be returned. If no callback is passed, `cancelVerifyCard` will return a promise.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example <caption>Cancel the verification in `lookup-complete` event</caption>\n * // set up listener after instantiation\n * threeDSecure.on('lookup-complete', function (data, next) {\n *   // determine if you want to call next to start the challenge,\n *   // if not, call cancelVerifyCard\n *   threeDSecure.cancelVerifyCard(function (err, verifyPayload) {\n *     if (err) {\n *       // Handle error\n *       console.log(err.message); // No verification payload available\n *       return;\n *     }\n *\n *     verifyPayload.nonce; // The nonce returned from the 3ds lookup call\n *     verifyPayload.liabilityShifted; // boolean\n *     verifyPayload.liabilityShiftPossible; // boolean\n *   });\n * });\n *\n * // after tokenizing a credit card\n * threeDSecure.verifyCard({\n *   amount: '100.00',\n *   nonce: nonceFromTokenizationPayload,\n *   bin: binFromTokenizationPayload\n *   // other fields such as billing address\n * }, function (verifyError, payload) {\n *   if (verifyError) {\n *     if (verifyError.code === 'THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT ') {\n *       // flow was canceled by merchant, 3ds info can be found in the payload\n *       // for cancelVerifyCard\n *     }\n *   }\n * });\n * @example <caption>Cancel the verification in onLookupComplete callback</caption>\n * threeDSecure.verifyCard({\n *   amount: '100.00',\n *   nonce: nonceFromTokenizationPayload,\n *   bin: binFromTokenizationPayload,\n *   // other fields such as billing address\n *   onLookupComplete: function (data, next) {\n *     // determine if you want to call next to start the challenge,\n *     // if not, call cancelVerifyCard\n *     threeDSecure.cancelVerifyCard(function (err, verifyPayload) {\n *       if (err) {\n *         // Handle error\n *         console.log(err.message); // No verification payload available\n *         return;\n *       }\n *\n *       verifyPayload.nonce; // The nonce returned from the 3ds lookup call\n *       verifyPayload.liabilityShifted; // boolean\n *       verifyPayload.liabilityShiftPossible; // boolean\n *     });\n *   }\n * }, function (verifyError, payload) {\n *   if (verifyError) {\n *     if (verifyError.code === 'THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT ') {\n *       // flow was canceled by merchant, 3ds info can be found in the payload\n *       // for cancelVerifyCard\n *     }\n *   }\n * });\n * @example <caption>Cancel the verification in 3D Secure version 1</caption>\n * // unlike with v2, this will not cause `verifyCard` to error, it will simply\n * // never call the callback\n * threeDSecure.cancelVerifyCard(function (err, verifyPayload) {\n *   if (err) {\n *     // Handle error\n *     console.log(err.message); // No verification payload available\n *     return;\n *   }\n *\n *   verifyPayload.nonce; // The nonce returned from the 3ds lookup call\n *   verifyPayload.liabilityShifted; // boolean\n *   verifyPayload.liabilityShiftPossible; // boolean\n * });\n */\nThreeDSecure.prototype.cancelVerifyCard = function () {\n  return this._framework.cancelVerifyCard();\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/three-d-secure.create|create}, with the exception that the Cardinal SDK, on window.Cardinal, will remain.\n * @public\n * @param {callback} [callback] Called on completion. If no callback is passed, `teardown` will return a promise.\n * @example\n * threeDSecure.teardown();\n * @example <caption>With callback</caption>\n * threeDSecure.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nThreeDSecure.prototype.teardown = function () {\n  var methodNames = methods(ThreeDSecure.prototype).concat(\n    methods(EventEmitter.prototype)\n  );\n\n  convertMethodsToError(this, methodNames);\n\n  return this._framework.teardown();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(ThreeDSecure);\n\n},{\"../../lib/convert-methods-to-error\":101,\"../../lib/methods\":129,\"./frameworks\":144,\"@braintree/event-emitter\":41,\"@braintree/wrap-promise\":51}],149:[function(require,module,exports){\n\"use strict\";\n/** @module braintree-web/three-d-secure */\n\nvar ThreeDSecure = require(\"./external/three-d-secure\");\nvar isHTTPS = require(\"../lib/is-https\").isHTTPS;\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar analytics = require(\"../lib/analytics\");\nvar errors = require(\"./shared/errors\");\nvar VERSION = \"3.88.3\";\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {object} [options.cardinalSDKConfig] A config for the underlying Cardinal SDK.\n * @param {object} [options.cardinalSDKConfig.logging] The logging configuration for the Cardinal SDK. See [Cardinal's documentation for the logging object](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-Logging) for more information.\n * @param {number} [options.cardinalSDKConfig.timeout] The time in milliseconds to wait before a request to Cardinal's API times out. See [Cardinal's documentation for root level configuration](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-RootLevelConfiguration) for more information.\n * @param {number} [options.cardinalSDKConfig.maxRequestRetries] How many times a request should be re-attempted to Cardinal's API before giving up as a failure. See [Cardinal's documentation for root level configuration](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-RootLevelConfiguration) for more information.\n * @param {object} [options.cardinalSDKConfig.payment] An object to describe how you want the user interactions to behave. Only a subset of the [Cardinal SDK payment configuration object](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-Payment) are supported: `displayLoading` and `displayExitButton`.\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {(number|string)} [options.version=1] The version of 3D Secure to use. Possible options:\n * * 1 - The legacy 3D Secure v1.0 integration.\n * * 2 - A 3D Secure v2.0 integration that uses a modal to host the 3D Secure iframe.\n * * 2-bootstrap3-modal - A 3D Secure v2.0 integration that uses a modal styled with Bootstrap 3 styles to host the 3D Secure iframe. Requires having the Bootstrap 3 script files and stylesheets on your page.\n * * 2-inline-iframe - A 3D Secure v2.0 integration that provides the authentication iframe directly to the merchant.\n * @param {callback} [callback] The second argument, `data`, is the {@link ThreeDSecure} instance. If no callback is provided, it returns a promise that resolves the {@link ThreeDSecure} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n@example\n * <caption>Creating a v2 3D Secure component using 2 version (Cardinal modal)</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createError, threeDSecure) {\n *   // set up lookup-complete listener\n *   threeDSecure.on('lookup-complete', function (data, next) {\n *     // check lookup data\n *\n *     next();\n *   });\n *\n *   // using Hosted Fields, use `tokenize` to get back a credit card nonce\n *\n *   threeDSecure.verifyCard({\n *     nonce: nonceFromTokenizationPayload,,\n *     bin: binFromTokenizationPayload,\n *     amount: '100.00'\n *   }, function (verifyError, payload) {\n *     // inspect payload\n *     // send payload.nonce to your server\n *   });\n * });\n * @example\n * <caption>Creating a v2 3D Secure component using 2-bootstrap3-modal version</caption>\n * // must have the boostrap js, css and jquery files on your page\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2-bootstrap3-modal'\n * }, function (createError, threeDSecure) {\n *   // set up lookup-complete listener\n *   threeDSecure.on('lookup-complete', function (data, next) {\n *     // check lookup data\n *\n *     next();\n *   });\n *\n *   // using Hosted Fields, use `tokenize` to get back a credit card nonce\n *\n *   // challenge will be presented in a bootstrap 3 modal\n *   threeDSecure.verifyCard({\n *     nonce: nonceFromTokenizationPayload,\n *     bin: binFromTokenizationPayload,\n *     amount: '100.00'\n *   }, function (verifyError, payload) {\n *     // inspect payload\n *     // send payload.nonce to your server\n *   });\n * });\n * @example\n * <caption>Creating a v2 3D Secure component using 2-inline-iframe version</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2-inline-iframe'\n * }, function (createError, threeDSecure) {\n *   // set up lookup-complete listener\n *   threeDSecure.on('lookup-complete', function (data, next) {\n *     // check lookup data\n *\n *     next();\n *   });\n *   // set up iframe listener\n *   threeDSecure.on('authentication-iframe-available', function (event, next) {\n *     var element = event.element; // an html element that contains the iframe\n *\n *     document.body.appendChild(element); // put it on your page\n *\n *     next(); // let the sdk know the element has been added to the page\n *   });\n *\n *   // using Hosted Fields, use `tokenize` to get back a credit card nonce\n *\n *   threeDSecure.verifyCard({\n *     nonce: nonceFromTokenizationPayload,,\n *     bin: binFromTokenizationPayload,\n *     amount: '100.00'\n *   }, function (verifyError, payload) {\n *     // inspect payload\n *     // send payload.nonce to your server\n *   });\n * });\n */\nfunction create(options) {\n  var name = \"3D Secure\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var assetsUrl = createAssetsUrl.create(options.authorization);\n      var framework = getFramework(options);\n      var createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: assetsUrl,\n          name: name,\n        })\n        .then(function (client) {\n          var error, isProduction;\n          var config = client.getConfiguration();\n          var gwConfig = config.gatewayConfiguration;\n\n          options.client = client;\n\n          if (!gwConfig.threeDSecureEnabled) {\n            error = errors.THREEDS_NOT_ENABLED;\n          }\n\n          if (config.authorizationType === \"TOKENIZATION_KEY\") {\n            error = errors.THREEDS_CAN_NOT_USE_TOKENIZATION_KEY;\n          }\n\n          isProduction = gwConfig.environment === \"production\";\n\n          if (isProduction && !isHTTPS()) {\n            error = errors.THREEDS_HTTPS_REQUIRED;\n          }\n\n          if (\n            framework !== \"legacy\" &&\n            !(\n              gwConfig.threeDSecure &&\n              gwConfig.threeDSecure.cardinalAuthenticationJWT\n            )\n          ) {\n            analytics.sendEvent(\n              options.client,\n              \"three-d-secure.initialization.failed.missing-cardinalAuthenticationJWT\"\n            );\n            error = errors.THREEDS_NOT_ENABLED_FOR_V2;\n          }\n\n          if (error) {\n            return Promise.reject(new BraintreeError(error));\n          }\n\n          analytics.sendEvent(options.client, \"three-d-secure.initialized\");\n\n          return client;\n        });\n      var instance = new ThreeDSecure({\n        client: options.client,\n        assetsUrl: assetsUrl,\n        createPromise: createPromise,\n        loggingEnabled: options.loggingEnabled,\n        cardinalSDKConfig: options.cardinalSDKConfig,\n        framework: framework,\n      });\n\n      if (options.client) {\n        return createPromise.then(function () {\n          return instance;\n        });\n      }\n\n      return instance;\n    });\n}\n\nfunction getFramework(options) {\n  var version = String(options.version || \"\");\n\n  if (!version || version === \"1\") {\n    return \"legacy\";\n  }\n\n  switch (version) {\n    case \"2\":\n    case \"2-cardinal-modal\":\n      return \"cardinal-modal\";\n    case \"2-bootstrap3-modal\":\n      return \"bootstrap3-modal\";\n    case \"2-inline-iframe\":\n      return \"inline-iframe\";\n    default:\n      throw new BraintreeError({\n        code: errors.THREEDS_UNRECOGNIZED_VERSION.code,\n        type: errors.THREEDS_UNRECOGNIZED_VERSION.type,\n        message:\n          \"Version `\" +\n          options.version +\n          \"` is not a recognized version. You may need to update the version of your Braintree SDK to support this version.\",\n      });\n  }\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":94,\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"../lib/is-https\":126,\"../lib/promise\":131,\"./external/three-d-secure\":148,\"./shared/errors\":151,\"@braintree/wrap-promise\":51}],150:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  LANDING_FRAME_NAME: \"braintreethreedsecurelanding\",\n  CARDINAL_SCRIPT_SOURCE: {\n    production: \"https://songbird.cardinalcommerce.com/edge/v1/songbird.js\",\n    sandbox: \"https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js\",\n  },\n};\n\n},{}],151:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.3D Secure - Creation Error Codes\n * @description Errors that occur when [creating the 3D Secure component](./module-braintree-web_three-d-secure.html#.create).\n * @property {MERCHANT} THREEDS_NOT_ENABLED Occurs when 3D Secure is not enabled in the Braintree control panel.\n * @property {MERCHANT} THREEDS_CAN_NOT_USE_TOKENIZATION_KEY Occurs when 3D Secure component is created without a Client Token.\n * @property {MERCHANT} THREEDS_HTTPS_REQUIRED Occurs when 3D Secure component is created in production over HTTPS.\n * @property {MERCHANT} THREEDS_NOT_ENABLED_FOR_V2 Occurs when 3D Secure component is created with version 2 parameter, but merchant is not enabled to use version 2.\n * @property {MERCHANT} THREEDS_UNRECOGNIZED_VERSION Occurs when unrecognized version enum is passed into the create call.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_SETUP_FAILED Occurs when Cardinal's Songbird.js library fails to setup for an unknown reason.\n * @property {NETWORK} THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED Occurs when using version 2 and Cardinal's Songbird.js script could not be loaded.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT Occurs when Cardinal's Songbird.js library takes longer than 60 seconds to set up.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT Occurs when Cardinal sends a response indicating a timeout on /Validate, /Confirm, or /Continue.\n * @property {MERCHANT} THREEDS_CARDINAL_SDK_BAD_CONFIG Occurs when there is no JWT in the request. Also when there's some other malformed aspect of config.\n * @property {MERCHANT} THREEDS_CARDINAL_SDK_BAD_JWT Occurs when a malformed config causes a either a missing response JWT or a malformed Cardinal response.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_ERROR Occurs when a \"general error\" or a Cardinal hosted fields error happens. Description contains more details.\n * @property {CUSTOMER} THREEDS_CARDINAL_SDK_CANCELED Occurs when customer cancels the transaction mid-flow, usually with alt-pays that have their own cancel buttons.\n */\n\n/**\n * @name BraintreeError.3D Secure - verifyCard Error Codes\n * @description Errors that occur when using the [`verifyCard` method](./ThreeDSecure.html#verifyCard).\n * @property {MERCHANT} THREEDS_AUTHENTICATION_IN_PROGRESS Occurs when another verification is already in progress.\n * @property {MERCHANT} THREEDS_MISSING_VERIFY_CARD_OPTION Occurs when a required option is missing.\n * @property {UNKNOWN} THREEDS_JWT_AUTHENTICATION_FAILED Occurs when something went wrong authenticating the JWT from the Cardinal SDK.\n * @property {MERCHANT} THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR Occurs when the supplied payment method nonce does not exist or the payment method nonce has already been consumed.\n * @property {CUSTOMER} THREEDS_LOOKUP_VALIDATION_ERROR Occurs when a validation error occurs during the 3D Secure lookup.\n * @property {UNKNOWN} THREEDS_LOOKUP_ERROR An unknown error occurred while attempting the 3D Secure lookup.\n * @property {MERCHANT} THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT Occurs when the 3D Secure flow is canceled by the merchant using `cancelVerifyCard` (3D Secure v2 flows only).\n * @property {UNKNOWN} THREEDS_INLINE_IFRAME_DETAILS_INCORRECT An unknown error occurred while attempting to use the inline iframe framework.\n */\n\n/**\n * @name BraintreeError.3D Secure - cancelVerifyCard Error Codes\n * @description Errors that occur when using the [`cancelVerifyCard` method](./ThreeDSecure.html#cancelVerifyCard).\n * @property {MERCHANT} THREEDS_NO_VERIFICATION_PAYLOAD Occurs when the 3D Secure flow is canceled, but there is no 3D Secure information available.\n */\n\n/**\n * @name BraintreeError.3D Secure - Internal Error Codes\n * @ignore\n * @description Errors that occur internally\n * @property {INTERNAL} THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN Occurs when iframe is initialized on a non-verified domain.\n * @property {INTERNAL} THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED Occurs when a 3D Secure framework method is not implemented.\n */\n\nvar BraintreeError = require(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  THREEDS_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_NOT_ENABLED\",\n    message: \"3D Secure is not enabled for this merchant.\",\n  },\n  THREEDS_CAN_NOT_USE_TOKENIZATION_KEY: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_CAN_NOT_USE_TOKENIZATION_KEY\",\n    message: \"3D Secure can not use a tokenization key for authorization.\",\n  },\n  THREEDS_HTTPS_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_HTTPS_REQUIRED\",\n    message: \"3D Secure requires HTTPS.\",\n  },\n  THREEDS_NOT_ENABLED_FOR_V2: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_NOT_ENABLED_FOR_V2\",\n    message:\n      \"3D Secure version 2 is not enabled for this merchant. Contact Braintree Support for assistance at https://help.braintreepayments.com/\",\n  },\n  THREEDS_UNRECOGNIZED_VERSION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_UNRECOGNIZED_VERSION\",\n  },\n  THREEDS_CARDINAL_SDK_SETUP_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_SETUP_FAILED\",\n    message: \"Something went wrong setting up Cardinal's Songbird.js library.\",\n  },\n  THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED\",\n    message: \"Cardinal's Songbird.js library could not be loaded.\",\n  },\n  THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT\",\n    message: \"Cardinal's Songbird.js took too long to setup.\",\n  },\n  THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT\",\n    message: \"Cardinal's API took too long to respond.\",\n  },\n  THREEDS_CARDINAL_SDK_BAD_CONFIG: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_CARDINAL_SDK_BAD_CONFIG\",\n    message:\n      \"JWT or other required field missing. Please check your setup configuration.\",\n  },\n  THREEDS_CARDINAL_SDK_BAD_JWT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_CARDINAL_SDK_BAD_JWT\",\n    message:\n      \"Cardinal JWT missing or malformed. Please check your setup configuration.\",\n  },\n  THREEDS_CARDINAL_SDK_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_ERROR\",\n    message:\n      \"A general error has occurred with Cardinal. See description for more information.\",\n  },\n  THREEDS_CARDINAL_SDK_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"THREEDS_CARDINAL_SDK_CANCELED\",\n    message: \"Canceled by user.\",\n  },\n  THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT\",\n    message: \"3D Secure verfication canceled by merchant.\",\n  },\n  THREEDS_AUTHENTICATION_IN_PROGRESS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_AUTHENTICATION_IN_PROGRESS\",\n    message:\n      \"Cannot call verifyCard while existing authentication is in progress.\",\n  },\n  THREEDS_MISSING_VERIFY_CARD_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_MISSING_VERIFY_CARD_OPTION\",\n  },\n  THREEDS_JWT_AUTHENTICATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_JWT_AUTHENTICATION_FAILED\",\n    message: \"Something went wrong authenticating the JWT from Cardinal\",\n  },\n  THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR\",\n    message:\n      \"Either the payment method nonce passed to `verifyCard` does not exist, or it was already consumed\",\n  },\n  THREEDS_LOOKUP_VALIDATION_ERROR: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"THREEDS_LOOKUP_VALIDATION_ERROR\",\n    message:\n      \"The data passed in `verifyCard` did not pass validation checks. See details for more info\",\n  },\n  THREEDS_LOOKUP_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_LOOKUP_ERROR\",\n    message: \"Something went wrong during the 3D Secure lookup\",\n  },\n  THREEDS_INLINE_IFRAME_DETAILS_INCORRECT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_INLINE_IFRAME_DETAILS_INCORRECT\",\n    message:\n      \"Something went wrong when attempting to add the authentication iframe to the page.\",\n  },\n  THREEDS_NO_VERIFICATION_PAYLOAD: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_NO_VERIFICATION_PAYLOAD\",\n    message: \"No verification payload available.\",\n  },\n  THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN\",\n    message: \"Term Url must be on a Braintree domain.\",\n  },\n  THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED\",\n    message: \"Method not implemented for this framework.\",\n  },\n};\n\n},{\"../../lib/braintree-error\":99}],152:[function(require,module,exports){\n\"use strict\";\n\nvar enumerate = require(\"../../lib/enumerate\");\n\nmodule.exports = enumerate([\"AUTHENTICATION_COMPLETE\"], \"threedsecure:\");\n\n},{\"../../lib/enumerate\":108}],153:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Vault Manager - deletePaymentMethod Error Codes\n * @description Errors that occur when using the [`deletePaymentMethod` method](./VaultManager.html#deletePaymentMethod).\n * @property {MERCHANT} VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN Occurs when vault manager is initialized with a tokenization key instead of a Client Token.\n * @property {MERCHANT} VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND Occurs when the specified payment method can not be found.\n * @property {UNKNOWN} VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR Occurs when there is an error attempting to delete the payment method.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN\",\n    message:\n      \"A client token with a customer id must be used to delete a payment method nonce.\",\n  },\n  VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND\",\n  },\n  VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR\",\n  },\n};\n\n},{\"../lib/braintree-error\":99}],154:[function(require,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/vault-manager\n * @description Manages customer's payment methods.\n */\n\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar VaultManager = require(\"./vault-manager\");\nvar VERSION = \"3.88.3\";\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} callback The second argument, `data`, is the {@link VaultManager} instance.\n * @returns {void}\n */\nfunction create(options) {\n  var name = \"Vault Manager\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return new VaultManager({\n        createPromise: createDeferredClient.create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        }),\n      });\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":97,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"./vault-manager\":155,\"@braintree/wrap-promise\":51}],155:[function(require,module,exports){\n\"use strict\";\n\nvar analytics = require(\"../lib/analytics\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar errors = require(\"./errors\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar methods = require(\"../lib/methods\");\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\nvar DELETE_PAYMENT_METHOD_MUTATION =\n  \"mutation DeletePaymentMethodFromSingleUseToken($input: DeletePaymentMethodFromSingleUseTokenInput!) {\" +\n  \"  deletePaymentMethodFromSingleUseToken(input: $input) {\" +\n  \"    clientMutationId\" +\n  \"  }\" +\n  \"}\";\n\n/**\n * @typedef {array} VaultManager~fetchPaymentMethodsPayload The customer's payment methods.\n * @property {object} paymentMethod The payment method object.\n * @property {string} paymentMethod.nonce A nonce that can be sent to your server to transact on the payment method.\n * @property {boolean} paymentMethod.default Whether or not this is the default payment method for the customer.\n * @property {object} paymentMethod.details Any additional details about the payment method. Varies depending on the type of payment method.\n * @property {string} paymentMethod.type A constant indicating the type of payment method.\n * @property {?string} paymentMethod.description Additional description about the payment method.\n * @property {?object} paymentMethod.binData Bin data about the payment method.\n *\n */\n\n/**\n * @class\n * @param {object} options Options\n * @description <strong>You cannot use this constructor directly. Use {@link module:braintree-web/vault-manager.create|braintree.vault-manager.create} instead.</strong>\n * @classdesc This class allows you to manage a customer's payment methods on the client.\n */\nfunction VaultManager(options) {\n  this._createPromise = options.createPromise;\n}\n\n/**\n * Fetches payment methods owned by the customer whose id was used to generate the client token used to create the {@link module:braintree-web/client|client}.\n * @public\n * @param {object} [options] Options for fetching payment methods.\n * @param {boolean} [options.defaultFirst = false] If `true`, the payment methods will be returned with the default payment method for the customer first. Otherwise, order is not guaranteed.\n * @param {callback} [callback] The second argument is a {@link VaultManager~fetchPaymentMethodsPayload|fetchPaymentMethodsPayload}. This is also what is resolved by the promise if no callback is provided.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * vaultManagerInstance.fetchPaymentMethods(function (err, paymentMethods) {\n *   paymentMethods.forEach(function (paymentMethod) {\n *     // add payment method to UI\n *     // paymentMethod.nonce <- transactable nonce associated with payment method\n *     // paymentMethod.details <- object with additional information about payment method\n *     // paymentMethod.type <- a constant signifying the type\n *   });\n * });\n */\nVaultManager.prototype.fetchPaymentMethods = function (options) {\n  var defaultFirst;\n\n  options = options || {};\n\n  defaultFirst = options.defaultFirst === true ? 1 : 0;\n\n  return this._createPromise\n    .then(function (client) {\n      return client.request({\n        endpoint: \"payment_methods\",\n        method: \"get\",\n        data: {\n          defaultFirst: defaultFirst,\n        },\n      });\n    })\n    .then(\n      function (paymentMethodsPayload) {\n        analytics.sendEvent(\n          this._createPromise,\n          \"vault-manager.fetch-payment-methods.succeeded\"\n        );\n\n        return paymentMethodsPayload.paymentMethods.map(\n          formatPaymentMethodPayload\n        );\n      }.bind(this)\n    );\n};\n\n// TODO hide from jsdoc for now until the GraphQL API is on for all merchants by default\n/**\n * Deletes a payment method owned by the customer whose id was used to generate the client token used to create the {@link module:braintree-web/client|client}.\n * @public\n * @ignore\n * @param {string} paymentMethodNonce The payment method nonce that references a vaulted payment method.\n * @param {callback} [callback] No data is returned if the operation is successful.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * vaultManagerInstance.deletePaymentMethod('nonce-to-delete', function (err) {\n *   // handle err if it exists\n * });\n */\nVaultManager.prototype.deletePaymentMethod = function (paymentMethodNonce) {\n  return this._createPromise.then(function (client) {\n    var usesClientToken =\n      client.getConfiguration().authorizationType === \"CLIENT_TOKEN\";\n\n    if (!usesClientToken) {\n      return Promise.reject(\n        new BraintreeError(\n          errors.VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN\n        )\n      );\n    }\n\n    return client\n      .request({\n        api: \"graphQLApi\",\n        data: {\n          query: DELETE_PAYMENT_METHOD_MUTATION,\n          variables: {\n            input: {\n              singleUseTokenId: paymentMethodNonce,\n            },\n          },\n          operationName: \"DeletePaymentMethodFromSingleUseToken\",\n        },\n      })\n      .then(function () {\n        analytics.sendEvent(\n          client,\n          \"vault-manager.delete-payment-method.succeeded\"\n        );\n\n        // noop to prevent sending back the raw graphql data\n      })\n      .catch(function (error) {\n        var originalError = error.details.originalError;\n        var formattedError;\n\n        analytics.sendEvent(\n          client,\n          \"vault-manager.delete-payment-method.failed\"\n        );\n\n        if (\n          originalError[0] &&\n          originalError[0].extensions.errorClass === \"NOT_FOUND\"\n        ) {\n          formattedError = new BraintreeError({\n            type: errors.VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND.type,\n            code: errors.VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND.code,\n            message:\n              \"A payment method for payment method nonce `\" +\n              paymentMethodNonce +\n              \"` could not be found.\",\n            details: {\n              originalError: originalError,\n            },\n          });\n        }\n\n        if (!formattedError) {\n          formattedError = new BraintreeError({\n            type: errors.VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR.type,\n            code: errors.VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR.code,\n            message:\n              \"An unknown error occured when attempting to delete the payment method assocaited with the payment method nonce `\" +\n              paymentMethodNonce +\n              \"`.\",\n            details: {\n              originalError: originalError,\n            },\n          });\n        }\n\n        return Promise.reject(formattedError);\n      });\n  });\n};\n\nfunction formatPaymentMethodPayload(paymentMethod) {\n  var formattedPaymentMethod = {\n    nonce: paymentMethod.nonce,\n    default: paymentMethod.default,\n    details: paymentMethod.details,\n    hasSubscription: paymentMethod.hasSubscription,\n    type: paymentMethod.type,\n  };\n\n  if (paymentMethod.description) {\n    formattedPaymentMethod.description = paymentMethod.description;\n  }\n\n  if (paymentMethod.binData) {\n    formattedPaymentMethod.binData = paymentMethod.binData;\n  }\n\n  return formattedPaymentMethod;\n}\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/vault-manager.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * vaultManagerInstance.teardown();\n * @example <caption>With callback</caption>\n * vaultManagerInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nVaultManager.prototype.teardown = function () {\n  convertMethodsToError(this, methods(VaultManager.prototype));\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(VaultManager);\n\n},{\"../lib/analytics\":94,\"../lib/braintree-error\":99,\"../lib/convert-methods-to-error\":101,\"../lib/methods\":129,\"../lib/promise\":131,\"./errors\":153,\"@braintree/wrap-promise\":51}],156:[function(require,module,exports){\n\"use strict\";\nvar __importDefault =\n  (this && this.__importDefault) ||\n  function (mod) {\n    return mod && mod.__esModule ? mod : { default: mod };\n  };\nvar venmo_desktop_1 = __importDefault(require(\"./venmo-desktop\"));\nmodule.exports = function createVenmoDesktop(options) {\n  var instance = new venmo_desktop_1.default(options);\n  return instance.initialize();\n};\n\n},{\"./venmo-desktop\":158}],157:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  exports.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  exports.UPDATE_PAYMENT_CONTEXT_QUERY =\n  exports.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY =\n  exports.CREATE_PAYMENT_CONTEXT_QUERY =\n  exports.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY =\n    void 0;\nexports.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation CreateVenmoQRCodePaymentContext($input: CreateVenmoQRCodePaymentContextInput!) {\\n  createVenmoQRCodePaymentContext(input: $input) {\\n    clientMutationId\\n    venmoQRCodePaymentContext {\\n      id\\n      merchantId\\n      createdAt\\n      expiresAt\\n    }\\n  }\\n}\";\nexports.CREATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation CreateVenmoPaymentContext($input: CreateVenmoPaymentContextInput!) {\\n  createVenmoPaymentContext(input: $input) {\\n    clientMutationId\\n    venmoPaymentContext {\\n      id\\n      merchantId\\n      createdAt\\n      expiresAt\\n    }\\n  }\\n}\";\nexports.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation UpdateVenmoQRCodePaymentContext($input: UpdateVenmoQRCodePaymentContextInput!) {\\n  updateVenmoQRCodePaymentContext(input: $input) {\\n    clientMutationId\\n  }\\n}\";\nexports.UPDATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation UpdateVenmoPaymentContextStatus($input: UpdateVenmoPaymentContextStatusInput!) {\\n  updateVenmoPaymentContextStatus(input: $input) {\\n    clientMutationId\\n  }\\n}\";\nexports.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  \"query PaymentContext($id: ID!) {\\n  node(id: $id) {\\n    ... on VenmoQRCodePaymentContext {\\n      status\\n      paymentMethodId\\n      userName\\n    }\\n  }\\n}\";\nexports.VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  \"query PaymentContext($id: ID!) {\\n  node(id: $id) {\\n    ... on VenmoPaymentContext {\\n      status\\n      paymentMethodId\\n      userName\\n      payerInfo {\\n        firstName\\n        lastName\\n        phoneNumber\\n        email\\n        externalId\\n        userName\\n      }\\n    }\\n  }\\n}\";\n\n},{}],158:[function(require,module,exports){\n\"use strict\";\nvar __assign =\n  (this && this.__assign) ||\n  function () {\n    __assign =\n      Object.assign ||\n      function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s)\n            if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n        }\n        return t;\n      };\n    return __assign.apply(this, arguments);\n  };\nvar __importDefault =\n  (this && this.__importDefault) ||\n  function (mod) {\n    return mod && mod.__esModule ? mod : { default: mod };\n  };\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar framebus_1 = __importDefault(require(\"framebus\"));\nvar iframer_1 = __importDefault(require(\"@braintree/iframer\"));\nvar uuid_1 = __importDefault(require(\"@braintree/uuid\"));\nvar events_1 = require(\"../shared/events\");\nvar queries_1 = require(\"./queries\");\nvar VENMO_DESKTOP_POLLING_INTERVAL = 1000; // 1 second\nvar VISUAL_DELAY_BEFORE_SIGNALLING_COMPLETION = 2000; // 2 seconds\nvar VenmoDesktop = /** @class */ (function () {\n  function VenmoDesktop(options) {\n    this.isHidden = true;\n    this.env = options.environment;\n    this.id = uuid_1.default();\n    this.profileId = options.profileId;\n    this.displayName = options.displayName;\n    this.paymentMethodUsage = options.paymentMethodUsage;\n    this.shouldUseLegacyQRCodeMutation = !this.paymentMethodUsage;\n    var frameUrl = options.url + \"#\" + this.env + \"_\" + this.id;\n    this.bus = new framebus_1.default({\n      channel: this.id,\n      verifyDomain: options.verifyDomain,\n    });\n    this.apiRequest = options.apiRequest;\n    this.sendEvent = options.sendEvent;\n    this.Promise = options.Promise;\n    this.alertBox = document.createElement(\"div\");\n    this.alertBox.setAttribute(\"data-venmo-desktop-id\", this.id);\n    this.alertBox.setAttribute(\"role\", \"alert\");\n    this.alertBox.style.position = \"fixed\";\n    this.alertBox.style.display = \"none\";\n    this.alertBox.style.height = \"1px\";\n    this.alertBox.style.width = \"1px\";\n    this.alertBox.style.overflow = \"hidden\";\n    this.alertBox.style.zIndex = \"0\";\n    this.iframe = iframer_1.default({\n      src: frameUrl,\n      name: \"venmo-desktop-iframe\",\n      style: {\n        display: \"none\",\n        position: \"fixed\",\n        top: \"0\",\n        bottom: \"0\",\n        right: \"0\",\n        left: \"0\",\n        height: \"100%\",\n        width: \"100%\",\n        zIndex: \"9999999\",\n      },\n      title: \"Venmo Desktop\",\n    });\n  }\n  VenmoDesktop.prototype.initialize = function () {\n    var _this = this;\n    return new this.Promise(function (resolve) {\n      _this.bus.on(events_1.VENMO_DESKTOP_IFRAME_READY, function () {\n        resolve(_this);\n      });\n      _this.bus.on(events_1.VENMO_DESKTOP_REQUEST_NEW_QR_CODE, function () {\n        _this.sendEvent(\"venmo.tokenize.desktop.restarted-from-error-view\");\n        _this.startPolling();\n      });\n      document.body.appendChild(_this.iframe);\n      document.body.appendChild(_this.alertBox);\n    });\n  };\n  VenmoDesktop.prototype.launchDesktopFlow = function () {\n    var _this = this;\n    this.isHidden = false;\n    var promise = new this.Promise(function (resolve, reject) {\n      _this.launchDesktopPromiseRejectFunction = reject;\n      var removeListeners = function () {\n        /* eslint-disable @typescript-eslint/no-use-before-define */\n        _this.bus.off(\n          events_1.VENMO_DESKTOP_CUSTOMER_CANCELED,\n          customerCancelledHandler\n        );\n        _this.bus.off(\n          events_1.VENMO_DESKTOP_AUTHORIZATION_COMPLETED,\n          completedHandler\n        );\n        _this.bus.off(\n          events_1.VENMO_DESKTOP_UNKNOWN_ERROR,\n          unknownErrorHandler\n        );\n        /* eslint-enable @typescript-eslint/no-use-before-define */\n      };\n      var unknownErrorHandler = function (err) {\n        removeListeners();\n        _this.sendEvent(\"venmo.tokenize.desktop.unknown-error\");\n        reject({\n          allowUIToHandleError: false,\n          reason: \"UNKNOWN_ERROR\",\n          err: err,\n        });\n      };\n      var customerCancelledHandler = function () {\n        removeListeners();\n        _this.updateVenmoDesktopPaymentContext(\"CANCELED\");\n        _this.sendEvent(\n          \"venmo.tokenize.desktop.status-change.canceled-from-modal\"\n        );\n        reject({\n          allowUIToHandleError: false,\n          reason: \"CUSTOMER_CANCELED\",\n        });\n      };\n      var completedHandler = function (payload) {\n        removeListeners();\n        resolve(payload);\n      };\n      _this.bus.on(\n        events_1.VENMO_DESKTOP_CUSTOMER_CANCELED,\n        customerCancelledHandler\n      );\n      _this.bus.on(\n        events_1.VENMO_DESKTOP_AUTHORIZATION_COMPLETED,\n        completedHandler\n      );\n      _this.bus.on(events_1.VENMO_DESKTOP_UNKNOWN_ERROR, unknownErrorHandler);\n    });\n    this.iframe.style.display = \"block\";\n    this.setAlert(\"Generating a QR code, get your Venmo app ready\");\n    this.iframe.focus();\n    this.startPolling();\n    return promise\n      .then(function (result) {\n        delete _this.venmoContextId;\n        delete _this.launchDesktopPromiseRejectFunction;\n        return result;\n      })\n      .catch(function (err) {\n        delete _this.venmoContextId;\n        delete _this.launchDesktopPromiseRejectFunction;\n        return _this.Promise.reject(err);\n      });\n  };\n  VenmoDesktop.prototype.triggerCompleted = function (result) {\n    var _this = this;\n    if (this.isHidden) {\n      return;\n    }\n    setTimeout(function () {\n      _this.bus.emit(events_1.VENMO_DESKTOP_AUTHORIZATION_COMPLETED, result);\n    }, VISUAL_DELAY_BEFORE_SIGNALLING_COMPLETION);\n  };\n  VenmoDesktop.prototype.triggerRejected = function (err) {\n    if (this.launchDesktopPromiseRejectFunction) {\n      this.launchDesktopPromiseRejectFunction(err);\n    }\n  };\n  VenmoDesktop.prototype.hideDesktopFlow = function () {\n    this.setAlert(\"\");\n    this.iframe.style.display = \"none\";\n    this.bus.emit(events_1.VENMO_DESKTOP_CLOSED_FROM_PARENT);\n    this.isHidden = true;\n  };\n  VenmoDesktop.prototype.displayError = function (message) {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_DISPLAY_ERROR, {\n      message: message,\n    });\n    this.setAlert(message);\n  };\n  VenmoDesktop.prototype.displayQRCode = function (id, merchantId) {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_DISPLAY_QR_CODE, {\n      id: id,\n      merchantId: merchantId,\n    });\n    this.setAlert(\"To scan the QR code, open your Venmo app\");\n  };\n  VenmoDesktop.prototype.authorize = function () {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_AUTHORIZE);\n    this.setAlert(\"Venmo account authorized\");\n  };\n  VenmoDesktop.prototype.authorizing = function () {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_AUTHORIZING);\n    this.setAlert(\"Authorize on your Venmo app\");\n  };\n  VenmoDesktop.prototype.startPolling = function () {\n    var _this = this;\n    return this.createVenmoDesktopPaymentContext()\n      .then(function (result) {\n        var expiresIn =\n          new Date(result.expiresAt).getTime() -\n          new Date(result.createdAt).getTime();\n        var expiredTime = Date.now() + expiresIn;\n        _this.displayQRCode(result.id, result.merchantId);\n        return _this.pollForStatusChange(result.status, expiredTime);\n      })\n      .then(function (result) {\n        if (!result) {\n          return;\n        }\n        // since we are manually adding a prepended @ sign\n        // we want to make sure that the username does not\n        // start giving us the @ sign up front in the future\n        var username = result.userName || \"\";\n        username = \"@\" + username.replace(\"@\", \"\");\n        _this.triggerCompleted({\n          paymentMethodNonce: result.paymentMethodId,\n          username: username,\n          payerInfo: result.payerInfo,\n          id: _this.venmoContextId || \"\",\n        });\n      })\n      .catch(function (err) {\n        if (err.allowUIToHandleError) {\n          // noop here and let the UI handle the customer error\n          return;\n        }\n        _this.sendEvent(\"venmo.tokenize.desktop.unhandled-error\");\n        _this.triggerRejected(err);\n      });\n  };\n  VenmoDesktop.prototype.pollForStatusChange = function (status, expiredTime) {\n    var _this = this;\n    if (!this.venmoContextId) {\n      return this.Promise.resolve();\n    }\n    if (Date.now() > expiredTime) {\n      return this.updateVenmoDesktopPaymentContext(\"EXPIRED\").then(function () {\n        _this.displayError(\"Something went wrong\");\n        _this.sendEvent(\"venmo.tokenize.desktop.status-change.sdk-timeout\");\n        return _this.Promise.reject({\n          allowUIToHandleError: true,\n          reason: \"TIMEOUT\",\n        });\n      });\n    }\n    return this.lookupVenmoDesktopPaymentContext().then(function (response) {\n      if (!_this.venmoContextId || !response) {\n        return _this.Promise.resolve();\n      }\n      var newStatus = response.status;\n      if (newStatus !== status) {\n        status = newStatus;\n        _this.sendEvent(\n          \"venmo.tokenize.desktop.status-change.\" + status.toLowerCase()\n        );\n        switch (status) {\n          case \"CREATED\":\n            // noop, no need to do anything here\n            // should never be able to get to this point\n            // but we'll keep it in to enumerate the statuses\n            break;\n          case \"EXPIRED\":\n          case \"FAILED\":\n          case \"CANCELED\":\n            var message =\n              status === \"CANCELED\"\n                ? \"The authorization was canceled\"\n                : \"Something went wrong\";\n            _this.displayError(message);\n            // these are all terminal states, so we end it here\n            return _this.Promise.reject({\n              allowUIToHandleError: true,\n              reason: status,\n            });\n          case \"SCANNED\":\n            _this.authorizing();\n            break;\n          case \"APPROVED\":\n            _this.authorize();\n            return _this.Promise.resolve(response);\n          default:\n          // any other statuses are irrelevant to the polling\n          // and can just be ignored\n        }\n      }\n      return new _this.Promise(function (resolve, reject) {\n        setTimeout(function () {\n          _this\n            .pollForStatusChange(status, expiredTime)\n            .then(resolve)\n            .catch(reject);\n        }, VENMO_DESKTOP_POLLING_INTERVAL);\n      });\n    });\n  };\n  VenmoDesktop.prototype.teardown = function () {\n    this.bus.teardown();\n    if (this.iframe.parentNode) {\n      this.iframe.parentNode.removeChild(this.iframe);\n    }\n    if (this.alertBox.parentNode) {\n      this.alertBox.parentNode.removeChild(this.alertBox);\n    }\n  };\n  VenmoDesktop.prototype.setAlert = function (message) {\n    this.alertBox.style.display = message ? \"block\" : \"none\";\n    this.alertBox.textContent = message;\n  };\n  VenmoDesktop.prototype.createPaymentContextFromGraphqlLegacyQRCodeMutation =\n    function (intent) {\n      return this.apiRequest(queries_1.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY, {\n        input: {\n          environment: this.env,\n          intent: intent,\n        },\n      }).then(function (response) {\n        return response\n          .createVenmoQRCodePaymentContext.venmoQRCodePaymentContext;\n      });\n    };\n  VenmoDesktop.prototype.createPaymentContextFromGraphQL = function (intent) {\n    var input = {\n      intent: intent,\n      paymentMethodUsage: this.paymentMethodUsage,\n      customerClient: \"DESKTOP\",\n    };\n    if (this.profileId) {\n      input.merchantProfileId = this.profileId;\n    }\n    if (this.displayName) {\n      input.displayName = this.displayName;\n    }\n    return this.apiRequest(queries_1.CREATE_PAYMENT_CONTEXT_QUERY, {\n      input: input,\n    }).then(function (response) {\n      return response.createVenmoPaymentContext.venmoPaymentContext;\n    });\n  };\n  VenmoDesktop.prototype.createVenmoDesktopPaymentContext = function () {\n    var _this = this;\n    var contextPromise = this.shouldUseLegacyQRCodeMutation\n      ? this.createPaymentContextFromGraphqlLegacyQRCodeMutation(\"PAY_FROM_APP\")\n      : this.createPaymentContextFromGraphQL(\"PAY_FROM_APP\");\n    return contextPromise.then(function (context) {\n      _this.venmoContextId = context.id;\n      var merchantId = _this.profileId || context.merchantId;\n      return {\n        id: context.id,\n        status: context.status,\n        merchantId: merchantId,\n        createdAt: context.createdAt,\n        expiresAt: context.expiresAt,\n      };\n    });\n  };\n  VenmoDesktop.prototype.updateVenmoDesktopPaymentContext = function (\n    status,\n    additionalOptions\n  ) {\n    if (additionalOptions === void 0) {\n      additionalOptions = {};\n    }\n    if (!this.venmoContextId) {\n      return this.Promise.resolve();\n    }\n    var data = {\n      input: __assign(\n        { id: this.venmoContextId, status: status },\n        additionalOptions\n      ),\n    };\n    var query = this.shouldUseLegacyQRCodeMutation\n      ? queries_1.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY\n      : queries_1.UPDATE_PAYMENT_CONTEXT_QUERY;\n    return this.apiRequest(query, data).then(function () {\n      // noop so we can resolve without any data to match the type\n    });\n  };\n  VenmoDesktop.prototype.lookupVenmoDesktopPaymentContext = function () {\n    if (!this.venmoContextId) {\n      return this.Promise.resolve();\n    }\n    var query = this.shouldUseLegacyQRCodeMutation\n      ? queries_1.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY\n      : queries_1.VENMO_PAYMENT_CONTEXT_STATUS_QUERY;\n    return this.apiRequest(query, {\n      id: this.venmoContextId,\n    }).then(function (response) {\n      return response.node;\n    });\n  };\n  return VenmoDesktop;\n})();\nexports.default = VenmoDesktop;\n\n},{\"../shared/events\":163,\"./queries\":157,\"@braintree/iframer\":43,\"@braintree/uuid\":47,\"framebus\":176}],159:[function(require,module,exports){\n\"use strict\";\n/** @module braintree-web/venmo */\n\nvar analytics = require(\"../lib/analytics\");\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar errors = require(\"./shared/errors\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Venmo = require(\"./venmo\");\nvar Promise = require(\"../lib/promise\");\nvar supportsVenmo = require(\"./shared/supports-venmo\");\nvar VERSION = \"3.88.3\";\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.allowNewBrowserTab=true] This should be set to false if your payment flow requires returning to the same tab, e.g. single page applications. Doing so causes {@link Venmo#isBrowserSupported|isBrowserSupported} to return true only for mobile web browsers that support returning from the Venmo app to the same tab.\n * @param {boolean} [options.allowWebviews=true] This should be set to false if your payment flow does not occur from within a webview that you control. Doing so causes {@link Venmo#isBrowserSupported|isBrowserSupported} to return true only for mobile web browsers that are not webviews.\n * @param {boolean} [options.ignoreHistoryChanges=false] When the Venmo app returns to the website, it will modify the hash of the url to include data about the tokenization. By default, the SDK will put the state of the hash back to where it was before the change was made. Pass `true` to handle the hash change instead of the SDK.\n * @param {string} [options.profileId] The Venmo profile ID to be used during payment authorization. Customers will see the business name and logo associated with this Venmo profile, and it will show up in the Venmo app as a \"Connected Merchant\". Venmo profile IDs can be found in the Braintree Control Panel. Omitting this value will use the default Venmo profile.\n * @param {string} [options.deepLinkReturnUrl] An override for the URL that the Venmo iOS app opens to return from an app switch.\n * @param {boolean} [options.requireManualReturn=false] When `true`, the customer will have to manually switch back to the browser/webview that is presenting Venmo to complete the payment.\n * @param {boolean} [options.useRedirectForIOS=false] Normally, the Venmo flow is launched using `window.open` and the Venmo app intercepts that call and opens the Venmo app instead. If the customer does not have the Venmo app installed, it opens the Venmo website in a new window and instructs the customer to install the app.\n \n * In iOS webviews and Safari View Controllers (a webview-like environment which is indistinguishable from Safari for JavaScript environments), this call to `window.open` will always fail to app switch to Venmo, resulting instead in a white screen. Because of this, an alternate approach is required to launch the Venmo flow.\n *\n * When `useRedirectForIOS` is `true` and the Venmo flow is started in an iOS environment, the Venmo flow will be started by setting `window.location.href` to the Venmo website (which will still be intercepted by the Venmo app and should be the same behavior as if `window.open` was called). However, if the customer does not have the Venmo app installed, the merchant page will instead be replaced with the Venmo website and the customer will need to use the browser's back button to return to the merchant's website. Ensure that your customer's checkout information will not be lost if they are navigated away from the website and return using the browser back button.\n *\n * Due to a bug in iOS's implementation of `window.open` in iOS webviews and Safari View Controllers, if `useRedirectForIOS` is not set to `true` and the flow is launched from an iOS webview or Safari View Controller, the customer will be presented with a blank screen, halting the flow and leaving the customer unable to return to the merchant's website. Setting `useRedirectForIOS` to `true` will allow the flow to continue, but the Venmo app will be unable to return back to the webview/Safari View Controller. It will instead open the merchant's site in a new window in the customer's browser, which means the merchant site must be able to process the Venmo payment. If the SDK is configured with `allowNewBrowserTab = false`, it is unlikely that the website is set up to process the Venmo payment from a new window.\n *\n * If processing the payment from a new window is not possible, use this flag in conjunction with `requireManualReturn` so that the customer may start the flow from a webview/Safari View Controller or their Safari browser and manually return to the place that originated the flow once the Venmo app has authorized the payment and instructed them to do so.\n * @param {string} [options.paymentMethodUsage] The intended usage for the Venmo payment method nonce. Possible options are:\n * * single_use - intended as a one time transaction\n * * multi_use - intended to be vaulted and used for multiple transactions\n * @param {string} [options.displayName] The business name that will be displayed in the Venmo app payment approval screen. Only applicable when used with `paymentMethodUsage` and used by merchants onboarded as PayFast channel partners.\n * @param {boolean} [options.allowDesktop] Used to support desktop users. When enabled, the default mode is to render a scannable QR-code customers scan with their phone's to approve via the mobile app.\n * @param {boolean} [options.allowDesktopWebLogin=false] When `true`, the customer will authorize payment via a window popup that allows them to sign in to their Venmo account. This is used explicitly for customers operating from desktop browsers wanting to avoid the QR Code flow.\n * @param {boolean} [options.mobileWebFallBack] Use this option when you want to use a web-login experience, such as if on mobile and the Venmo app isn't installed.\n * @param {boolean} [options.allowAndroidRecreation=true] This flag is for when your integration uses the [Android PopupBridge](https://github.com/braintree/popup-bridge-android). Setting this flag to false will avoid a page refresh when returning to your page after payment authorization. If not specified, it defaults to true and the Android activity will be recreated, resulting in a page refresh.\n *\n * Note: This flow currently requires a full page redirect, which means to utilize this flow your page will need to be able to handle the checkout session across different pages.\n * @param {callback} [callback] The second argument, `data`, is the {@link Venmo} instance. If no callback is provided, `create` returns a promise that resolves with the {@link Venmo} instance.\n * @example\n * braintree.venmo.create({\n *   client: clientInstance\n * }).then(function (venmoInstance) {\n *   // venmoInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating Venmo instance', createErr);\n * });\n * @example <caption>Allow desktop flow to be used</caption>\n * braintree.venmo.create({\n *   client: clientInstance,\n *   allowDesktop: true\n * }).then(function (venmoInstance) {\n *   // venmoInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating Venmo instance', createErr);\n * });\n * @returns {(Promise|void)} Returns the Venmo instance.\n */\nfunction create(options) {\n  var name = \"Venmo\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var createPromise, instance;\n\n      if (options.profileId && typeof options.profileId !== \"string\") {\n        return Promise.reject(\n          new BraintreeError(errors.VENMO_INVALID_PROFILE_ID)\n        );\n      }\n\n      if (\n        options.deepLinkReturnUrl &&\n        typeof options.deepLinkReturnUrl !== \"string\"\n      ) {\n        return Promise.reject(\n          new BraintreeError(errors.VENMO_INVALID_DEEP_LINK_RETURN_URL)\n        );\n      }\n\n      createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          var configuration = client.getConfiguration();\n\n          options.client = client;\n\n          if (!configuration.gatewayConfiguration.payWithVenmo) {\n            return Promise.reject(new BraintreeError(errors.VENMO_NOT_ENABLED));\n          }\n\n          return client;\n        });\n\n      options.createPromise = createPromise;\n      instance = new Venmo(options);\n\n      analytics.sendEvent(createPromise, \"venmo.initialized\");\n\n      return createPromise.then(function () {\n        return instance;\n      });\n    });\n}\n\n/**\n * @static\n * @function isBrowserSupported\n * @param {object} [options] browser support options:\n * @param {boolean} [options.allowNewBrowserTab=true] This should be set to false if your payment flow requires returning to the same tab, e.g. single page applications.\n * @param {boolean} [options.allowWebviews=true] This should be set to false if your payment flow does not occur from within a webview that you control.\n * @example\n * if (braintree.venmo.isBrowserSupported()) {\n *   // set up Venmo\n * }\n * @example <caption>Explicitly require browser support returning to the same tab</caption>\n * if (braintree.venmo.isBrowserSupported({\n *   allowNewBrowserTab: false\n * })) {\n *   // set up Venmo\n * }\n * @example <caption>Explicitly set webviews as disallowed browsers</caption>\n * if (braintree.venmo.isBrowserSupported({\n *   allowWebviews: false\n * })) {\n *   // set up Venmo\n * }\n * @returns {boolean} Whether or not the browser supports Venmo.\n */\nfunction isBrowserSupported(options) {\n  return supportsVenmo.isBrowserSupported(options);\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  isBrowserSupported: isBrowserSupported,\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":94,\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"../lib/promise\":131,\"./shared/errors\":162,\"./shared/supports-venmo\":165,\"./venmo\":167,\"@braintree/wrap-promise\":51}],160:[function(require,module,exports){\n\"use strict\";\n\nvar isAndroid = require(\"@braintree/browser-detection/is-android\");\nvar isChrome = require(\"@braintree/browser-detection/is-chrome\");\nvar isIos = require(\"@braintree/browser-detection/is-ios\");\nvar isIosSafari = require(\"@braintree/browser-detection/is-ios-safari\");\nvar isIosWebview = require(\"@braintree/browser-detection/is-ios-webview\");\nvar isSamsung = require(\"@braintree/browser-detection/is-samsung\");\n\nfunction isAndroidWebview() {\n  return (\n    isAndroid() && window.navigator.userAgent.toLowerCase().indexOf(\"wv\") > -1\n  );\n}\n\nfunction doesNotSupportWindowOpenInIos() {\n  if (!isIos()) {\n    return false;\n  }\n\n  return isIosWebview() || !isIosSafari();\n}\n\nfunction isFacebookOwnedBrowserOnAndroid() {\n  var ua = window.navigator.userAgent.toLowerCase();\n\n  // Huawei's Facebook useragent does not include Android\n  if (ua.indexOf(\"huawei\") > -1 && ua.indexOf(\"fban\") > -1) {\n    return true;\n  }\n\n  if (!isAndroid()) {\n    return false;\n  }\n\n  return ua.indexOf(\"fb_iab\") > -1 || ua.indexOf(\"instagram\") > -1;\n}\n\n// iOS chrome used to work with Venmo, but now it does not\n// we are unsure if something changed in the iOS Chrome app\n// itself, or if something about iOS webviews has changed\n// until we find out more info, we've created a helper to\n// easilly turn off iOS Chrome as a supported browser in\n// the isBrowserSupported helper function\nfunction isIosChrome() {\n  return isIos() && isChrome();\n}\n\nmodule.exports = {\n  isAndroid: isAndroid,\n  isAndroidWebview: isAndroidWebview,\n  isChrome: isChrome,\n  isIos: isIos,\n  isIosChrome: isIosChrome,\n  isSamsung: isSamsung,\n  isIosSafari: isIosSafari,\n  isIosWebview: isIosWebview,\n  isFacebookOwnedBrowserOnAndroid: isFacebookOwnedBrowserOnAndroid,\n  doesNotSupportWindowOpenInIos: doesNotSupportWindowOpenInIos,\n};\n\n},{\"@braintree/browser-detection/is-android\":26,\"@braintree/browser-detection/is-chrome\":28,\"@braintree/browser-detection/is-ios\":37,\"@braintree/browser-detection/is-ios-safari\":34,\"@braintree/browser-detection/is-ios-webview\":35,\"@braintree/browser-detection/is-samsung\":38}],161:[function(require,module,exports){\n\"use strict\";\n\n/**\n * Venmo shared constants\n * @typedef {object} Venmo~venmoConstants\n * @ignore\n * @property {string} VENMO_APP_OR_MOBILE_AUTH_URL A deep-linked url that will open the Venmo app if installed, or navigate to a Venmo web-login experience if the Venmo app is not present.\n * @property {string} VENMO_MOBILE_APP_AUTH_ONLY_URL A deep-linked url that leads to a Venmo dead-end page if the Venmo app is not installed (page asks customer to download the app).\n * @property {string} VENMO_WEB_LOGIN_URL A non-deeplinked url that leads to a Venmo login page. For use when explicitly wanting to avoid using the Venmo mobile app via a deep-linked url.\n */\nmodule.exports = {\n  DOCUMENT_VISIBILITY_CHANGE_EVENT_DELAY: 500,\n  DEFAULT_PROCESS_RESULTS_DELAY: 1000,\n  VENMO_APP_OR_MOBILE_AUTH_URL: \"https://account.venmo.com/go/checkout\",\n  VENMO_MOBILE_APP_AUTH_ONLY_URL: \"https://venmo.com/braintree/checkout\",\n  VENMO_WEB_LOGIN_URL: \"https://account.venmo.com/go/web\",\n};\n\n},{}],162:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Venmo - Creation Error Codes\n * @description Errors that occur when [creating the Venmo component](./module-braintree-web_venmo.html#.create).\n * @property {MERCHANT} VENMO_NOT_ENABLED Occurs when Venmo is not enabled on the Braintree control panel.\n * @property {MERCHANT} VENMO_INVALID_PROFILE_ID Occurs when Venmo is initialized with a profile id, but it is invalid.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_SETUP_FAILED __Deprecated__ No longer returned. Use `VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED` instead.\n * @property {UNKNOWN} VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED Occurs when the request to set up a Venmo Payment Context object fails.\n */\n\n/**\n * @name BraintreeError.Venmo - tokenize Error Codes\n * @description Errors that occur when using the [`tokenize` method](./Venmo.html#tokenize).\n * @property {CUSTOMER} VENMO_APP_CANCELED Occurs when customer cancels flow from the Venmo app.\n * @property {UNKNOWN} VENMO_APP_FAILED Occurs when tokenization fails.\n * @property {CUSTOMER} VENMO_CANCELED Occurs when customer cancels the flow or Venmo app is not available.\n * @property {CUSTOMER} VENMO_CUSTOMER_CANCELED Occurs when customer cancels the flow.\n * @property {CUSTOMER} VENMO_DESKTOP_CANCELED Occurs when customer cancels the Venmo Desktop flow by closing the modal.\n * @property {UNKNOWN} VENMO_DESKTOP_UNKNOWN_ERROR Occurs when an unknown error causes the Venmo Desktop flow to fail.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR Occurs when an unknown network error causes the mobile polling process to fail.\n * @property {CUSTOMER} VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED Occurs when the polling has expired and the payment cannot be completed.\n * @property {CUSTOMER} VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED Occurs when the polling operation is canceled by the customer.\n * @property {CUSTOMER} VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT Occurs when customer takes too long to complete payment.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_TOKENIZATION_FAILED Occurs if there is an unknown error during the mobile polling process.\n * @property {NETWORK} VENMO_NETWORK_ERROR Occurs when a network error causes a request to fail.\n * @property {MERCHANT} VENMO_TOKENIZATION_CANCELED_BY_MERCHANT Occurs when `cancelTokenization` is called while tokenization is in progress.\n * @property {UNKNOWN} VENMO_TOKENIZATION_FAILED Occurs when there is an unknown error during the web login experience.\n * @property {MERCHANT} VENMO_TOKENIZATION_REQUEST_ACTIVE Occurs when `tokenize` is called when the flow is already in progress.\n * @property {MERCHANT} VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE Occurs when `cancelTokenization` is called when the flow is not in progress.\n */\n\nvar BraintreeError = require(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  VENMO_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_NOT_ENABLED\",\n    message: \"Venmo is not enabled for this merchant.\",\n  },\n  VENMO_TOKENIZATION_REQUEST_ACTIVE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_TOKENIZATION_REQUEST_ACTIVE\",\n    message: \"Another tokenization request is active.\",\n  },\n  VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE\",\n    message: \"No tokenization in progress.\",\n  },\n  VENMO_APP_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_APP_FAILED\",\n    message: \"Venmo app encountered a problem.\",\n  },\n  VENMO_APP_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_APP_CANCELED\",\n    message: \"Venmo app authorization was canceled.\",\n  },\n  VENMO_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_CANCELED\",\n    message:\n      \"User canceled Venmo authorization, or Venmo app is not available.\",\n  },\n  VENMO_CUSTOMER_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_CUSTOMER_CANCELED\",\n    message: \"User canceled Venmo authorization.\",\n  },\n  VENMO_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"VENMO_NETWORK_ERROR\",\n    message: \"Something went wrong making the request\",\n  },\n  VENMO_DESKTOP_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_DESKTOP_CANCELED\",\n    message:\n      \"User canceled Venmo authorization by closing the Venmo Desktop modal.\",\n  },\n  VENMO_TOKENIZATION_CANCELED_BY_MERCHANT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_TOKENIZATION_CANCELED_BY_MERCHANT\",\n    message: \"The Venmo tokenization was canceled by the merchant.\",\n  },\n  VENMO_DESKTOP_UNKNOWN_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_DESKTOP_UNKNOWN_ERROR\",\n    message: \"Something went wrong with the Venmo Desktop flow.\",\n  },\n  VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED\",\n    message: \"Something went wrong creating the Venmo Payment Context.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR\",\n    message: \"Something went wrong during mobile polling.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED\",\n    message: \"The Venmo authorization request is expired.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED\",\n    message: \"The Venmo authorization was canceled\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT\",\n    message: \"Customer took too long to authorize Venmo payment.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_FAILED\",\n    message: \"The Venmo authorization failed.\",\n  },\n  VENMO_INVALID_PROFILE_ID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_INVALID_PROFILE_ID\",\n    message: \"Venmo profile ID is invalid.\",\n  },\n  VENMO_INVALID_DEEP_LINK_RETURN_URL: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_INVALID_DEEP_LINK_RETURN_URL\",\n    message: \"Venmo deep link return URL is invalid.\",\n  },\n  VENMO_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_TOKENIZATION_FAILED\",\n    message: \"Venmo encountered a problem\",\n  },\n};\n\n},{\"../../lib/braintree-error\":99}],163:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VENMO_DESKTOP_UNKNOWN_ERROR =\n  exports.VENMO_DESKTOP_REQUEST_NEW_QR_CODE =\n  exports.VENMO_DESKTOP_CLOSED_FROM_PARENT =\n  exports.VENMO_DESKTOP_IFRAME_READY =\n  exports.VENMO_DESKTOP_DISPLAY_QR_CODE =\n  exports.VENMO_DESKTOP_DISPLAY_ERROR =\n  exports.VENMO_DESKTOP_CUSTOMER_CANCELED =\n  exports.VENMO_DESKTOP_AUTHORIZATION_COMPLETED =\n  exports.VENMO_DESKTOP_AUTHORIZING =\n  exports.VENMO_DESKTOP_AUTHORIZE =\n  exports.VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT =\n    void 0;\nexports.VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT =\n  \"VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT\";\nexports.VENMO_DESKTOP_AUTHORIZE = \"VENMO_DESKTOP_AUTHORIZE\";\nexports.VENMO_DESKTOP_AUTHORIZING = \"VENMO_DESKTOP_AUTHORIZING\";\nexports.VENMO_DESKTOP_AUTHORIZATION_COMPLETED =\n  \"VENMO_DESKTOP_AUTHORIZATION_COMPLETED\";\nexports.VENMO_DESKTOP_CUSTOMER_CANCELED = \"VENMO_DESKTOP_CUSTOMER_CANCELED\";\nexports.VENMO_DESKTOP_DISPLAY_ERROR = \"VENMO_DESKTOP_DISPLAY_ERROR\";\nexports.VENMO_DESKTOP_DISPLAY_QR_CODE = \"VENMO_DESKTOP_DISPLAY_QR_CODE\";\nexports.VENMO_DESKTOP_IFRAME_READY = \"VENMO_DESKTOP_IFRAME_READY\";\nexports.VENMO_DESKTOP_CLOSED_FROM_PARENT = \"VENMO_DESKTOP_CLOSED_FROM_PARENT\";\nexports.VENMO_DESKTOP_REQUEST_NEW_QR_CODE = \"VENMO_DESKTOP_REQUEST_NEW_QR_CODE\";\nexports.VENMO_DESKTOP_UNKNOWN_ERROR = \"VENMO_DESKTOP_UNKNOWN_ERROR\";\n\n},{}],164:[function(require,module,exports){\n\"use strict\";\nvar venmoConstants = require(\"./constants\");\n\nfunction getVenmoUrl(options) {\n  if (options.useAllowDesktopWebLogin)\n    return venmoConstants.VENMO_WEB_LOGIN_URL;\n\n  if (options.mobileWebFallBack)\n    return venmoConstants.VENMO_APP_OR_MOBILE_AUTH_URL;\n\n  return venmoConstants.VENMO_MOBILE_APP_AUTH_ONLY_URL;\n}\n\nmodule.exports = getVenmoUrl;\n\n},{\"./constants\":161}],165:[function(require,module,exports){\n\"use strict\";\n\nvar browserDetection = require(\"./browser-detection\");\n\nfunction isBrowserSupported(options) {\n  var merchantAllowsReturningToNewBrowserTab,\n    merchantAllowsWebviews,\n    merchantAllowsDesktopBrowsers;\n  var isAndroid = browserDetection.isAndroid();\n  var isMobileDevice = isAndroid || browserDetection.isIos();\n  var isAndroidChrome = isAndroid && browserDetection.isChrome();\n  var isMobileDeviceThatSupportsReturnToSameTab =\n    browserDetection.isIosSafari() || isAndroidChrome;\n  var isKnownUnsupportedMobileBrowser =\n    browserDetection.isIosChrome() ||\n    browserDetection.isFacebookOwnedBrowserOnAndroid() ||\n    browserDetection.isSamsung();\n\n  options = options || {};\n  // NEXT_MAJOR_VERSION allowDesktop will default to true, but can be opted out\n  merchantAllowsDesktopBrowsers = options.allowDesktop === true;\n  merchantAllowsReturningToNewBrowserTab = options.hasOwnProperty(\n    \"allowNewBrowserTab\"\n  )\n    ? options.allowNewBrowserTab\n    : true;\n  // NEXT_MAJOR_VERSION webviews are not supported, except for the case where\n  // the merchant themselves is presenting venmo in a webview using the deep\n  // link url to get back to their app. For the next major version, we should\n  // just not have this option and instead require the merchant to determine\n  // if the venmo button should be displayed when presenting it in the\n  // merchant's app via a webview.\n  merchantAllowsWebviews = options.hasOwnProperty(\"allowWebviews\")\n    ? options.allowWebviews\n    : true;\n\n  if (isKnownUnsupportedMobileBrowser) {\n    return false;\n  }\n\n  if (\n    !merchantAllowsWebviews &&\n    (browserDetection.isAndroidWebview() || browserDetection.isIosWebview())\n  ) {\n    return false;\n  }\n\n  if (!isMobileDevice) {\n    return merchantAllowsDesktopBrowsers;\n  }\n\n  if (!merchantAllowsReturningToNewBrowserTab) {\n    return isMobileDeviceThatSupportsReturnToSameTab;\n  }\n\n  return isMobileDevice;\n}\n\nmodule.exports = {\n  isBrowserSupported: isBrowserSupported,\n};\n\n},{\"./browser-detection\":160}],166:[function(require,module,exports){\n\"use strict\";\n\nvar frameService = require(\"../../lib/frame-service/external\");\nvar useMin = require(\"../../lib/use-min\");\nvar Promise = require(\"../../lib/promise\");\n\nvar VERSION = \"3.88.3\";\nvar VENMO_LOGO_SVG =\n  '<svg width=\"198\" height=\"58\" viewBox=\"0 0 198 58\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M43.0702 13.6572C44.1935 15.4585 44.6999 17.3139 44.6999 19.6576C44.6999 27.1328 38.1277 36.8436 32.7935 43.6625H20.6099L15.7236 15.2939L26.3917 14.3105L28.9751 34.4966C31.389 30.6783 34.3678 24.6779 34.3678 20.587C34.3678 18.3477 33.9727 16.8225 33.3553 15.5666L43.0702 13.6572Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M56.8965 26.1491C58.8596 26.1491 63.8018 25.2772 63.8018 22.5499C63.8018 21.2402 62.8481 20.587 61.7242 20.587C59.7579 20.587 57.1776 22.8763 56.8965 26.1491ZM56.6715 31.5506C56.6715 34.8807 58.5787 36.1873 61.107 36.1873C63.8603 36.1873 66.4966 35.534 69.923 33.8433L68.6324 42.3523C66.2183 43.4976 62.4559 44.2617 58.8039 44.2617C49.5403 44.2617 46.2249 38.8071 46.2249 31.9879C46.2249 23.1496 51.6179 13.765 62.7365 13.765C68.858 13.765 72.2809 17.0949 72.2809 21.7317C72.2815 29.2066 62.4005 31.4965 56.6715 31.5506Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M103.067 20.3142C103.067 21.4052 102.897 22.9875 102.727 24.0216L99.5262 43.6622H89.1385L92.0585 25.658C92.1139 25.1696 92.284 24.1865 92.284 23.6411C92.284 22.3314 91.4414 22.0047 90.4282 22.0047C89.0826 22.0047 87.7337 22.6042 86.8354 23.0418L83.5234 43.6625H73.0772L77.8495 14.257H86.8908L87.0052 16.6041C89.1382 15.2404 91.9469 13.7656 95.932 13.7656C101.212 13.765 103.067 16.3845 103.067 20.3142Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M133.906 16.9841C136.881 14.9131 139.69 13.765 143.563 13.765C148.897 13.765 150.753 16.3845 150.753 20.3142C150.753 21.4052 150.583 22.9875 150.413 24.0216L147.216 43.6622H136.825L139.801 25.2774C139.855 24.786 139.971 24.1865 139.971 23.8063C139.971 22.3317 139.128 22.0047 138.115 22.0047C136.824 22.0047 135.535 22.5501 134.577 23.0418L131.266 43.6625H120.878L123.854 25.2777C123.908 24.7863 124.02 24.1868 124.02 23.8065C124.02 22.332 123.177 22.0049 122.167 22.0049C120.819 22.0049 119.473 22.6045 118.574 23.0421L115.26 43.6628H104.817L109.589 14.2573H118.52L118.8 16.7122C120.878 15.241 123.684 13.7662 127.446 13.7662C130.704 13.765 132.837 15.129 133.906 16.9841Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M171.426 25.5502C171.426 23.1496 170.808 21.513 168.956 21.513C164.857 21.513 164.015 28.55 164.015 32.1498C164.015 34.8807 164.802 36.5709 166.653 36.5709C170.528 36.5709 171.426 29.1497 171.426 25.5502ZM153.458 31.7152C153.458 22.442 158.511 13.765 170.136 13.765C178.896 13.765 182.098 18.7854 182.098 25.7148C182.098 34.8805 177.099 44.3723 165.194 44.3723C156.378 44.3723 153.458 38.7525 153.458 31.7152Z\" fill=\"white\"/>\\n</svg>';\nvar CONTINUE_OR_CANCEL_INSTRUCTIONS =\n  \"Tap cancel payment to cancel and return to the business. Continue payment will relaunch the payment window.\";\n\nvar POPUP_WIDTH = 400;\nvar POPUP_HEIGHT = 570;\nvar ELEMENT_IDS = {\n  backdrop: \"venmo-desktop-web-backdrop\",\n  backdropHidden: \"venmo-desktop-web-backdrop.hidden\",\n  backdropContainer: \"venmo-backdrop-container\",\n  cancelButton: \"venmo-popup-cancel-button\",\n  continueButton: \"venmo-popup-continue-button\",\n  message: \"venmo-message\",\n  instructions: \"venmo-instructions\",\n  venmoLogo: \"venmo-full-logo\",\n};\n\nfunction openPopup(options) {\n  var popupName = \"venmoDesktopWebLogin\";\n  var checkForStatusChange = options.checkForStatusChange;\n  var cancelTokenization = options.cancelTokenization;\n  var venmoUrl = options.venmoUrl;\n  var assetsUrl = options.assetsUrl;\n  var debug = options.debug || false;\n  var popupLocation = centeredPopupDimensions();\n  var assetsBaseUrl = assetsUrl + \"/web/\" + VERSION + \"/html\";\n\n  return new Promise(function (resolve, reject) {\n    frameService.create(\n      {\n        name: popupName,\n        dispatchFrameUrl:\n          assetsBaseUrl + \"/dispatch-frame\" + useMin(debug) + \".html\",\n        openFrameUrl:\n          assetsBaseUrl + \"/venmo-landing-frame\" + useMin(debug) + \".html\",\n        top: popupLocation.top,\n        left: popupLocation.left,\n        height: POPUP_HEIGHT,\n        width: POPUP_WIDTH,\n      },\n      function (frameServiceInstance) {\n        document\n          .getElementById(ELEMENT_IDS.continueButton)\n          .addEventListener(\"click\", function () {\n            frameServiceInstance.focus();\n          });\n        document\n          .getElementById(ELEMENT_IDS.cancelButton)\n          .addEventListener(\"click\", function () {\n            frameServiceInstance.close();\n            cancelTokenization();\n            closeBackdrop();\n          });\n        frameServiceInstance.open({}, function (err) {\n          var retryStartingCount = 1;\n\n          if (err) {\n            reject(err);\n          } else {\n            checkForStatusChange(retryStartingCount)\n              .then(resolve)\n              .catch(reject);\n          }\n          frameServiceInstance.close();\n          closeBackdrop();\n        });\n        frameServiceInstance.redirect(venmoUrl);\n      }\n    );\n  });\n}\n\nfunction centeredPopupDimensions() {\n  var popupTop =\n    Math.round((window.outerHeight - POPUP_HEIGHT) / 2) + window.screenTop;\n  var popupLeft =\n    Math.round((window.outerWidth - POPUP_WIDTH) / 2) + window.screenLeft;\n\n  return {\n    top: popupTop,\n    left: popupLeft,\n  };\n}\n\nfunction closeBackdrop() {\n  document.getElementById(\"venmo-desktop-web-backdrop\").classList.add(\"hidden\");\n}\n\nfunction getElementStyles() {\n  var backdropStyles = [\n    \"#\" + ELEMENT_IDS.backdropHidden + \" {\",\n    \"display: none;\",\n    \"}\",\n    \"#\" + ELEMENT_IDS.backdrop + \" {\",\n    \"cursor: pointer;\",\n    \"position: absolute;\",\n    \"top: 0;\",\n    \"left: 0;\",\n    \"bottom: 0;\",\n    \"width: 100%;\",\n    \"background: rgba(0, 0, 0, 0.4);\",\n    \"}\",\n  ];\n  var backdropContainerStyles = [\n    \"#\" + ELEMENT_IDS.backdropContainer + \" {\",\n    \"display: flex;\",\n    \"align-content: center;\",\n    \"justify-content: center;\",\n    \"align-items: center;\",\n    \"width: 100%;\",\n    \"height: 100%;\",\n    \"flex-direction: column;\",\n    \"}\",\n  ];\n\n  var cancelButtonStyles = [\n    \"#\" + ELEMENT_IDS.cancelButton + \" {\",\n    \"height: 24px;\",\n    \"width: 380px;\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 700;\",\n    \"font-size: 18px;\",\n    \"line-height: 24px;\",\n    \"text-align: center;\",\n    \"background-color: transparent;\",\n    \"border: none;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 28px;\",\n    \"}\",\n  ];\n\n  var continueButtonStyles = [\n    \"#\" + ELEMENT_IDS.continueButton + \" {\",\n    \"width: 400px;\",\n    \"height: 50px;\",\n    \"background: #0074DE;\",\n    \"border-radius: 24px;\",\n    \"border: none;\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 700;\",\n    \"font-size: 18px;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 44px;\",\n    \"}\",\n  ];\n\n  var messageStyles = [\n    \"#\" + ELEMENT_IDS.message + \" {\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 500;\",\n    \"font-size: 24px;\",\n    \"line-height: 32px;\",\n    \"text-align: center;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 32px;\",\n    \"}\",\n  ];\n\n  var instructionStyles = [\n    \"#\" + ELEMENT_IDS.instructions + \" {\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 400;\",\n    \"font-size: 16px;\",\n    \"line-height: 20px;\",\n    \"text-align: center;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 16px;\",\n    \"width: 400px;\",\n    \"}\",\n  ];\n\n  var allStyles = backdropStyles.concat(\n    backdropContainerStyles,\n    cancelButtonStyles,\n    continueButtonStyles,\n    messageStyles,\n    instructionStyles\n  );\n\n  return allStyles.join(\"\\n\");\n}\n\nfunction buildAndStyleElements() {\n  var alreadyRenderedBackdrop = document.getElementById(ELEMENT_IDS.backdrop);\n  var backdropStylesElement,\n    backdropDiv,\n    backDropContentContainer,\n    venmoLogoDiv,\n    venmoMessageDiv,\n    instructionsDiv,\n    continueButton,\n    cancelButton;\n\n  if (alreadyRenderedBackdrop) {\n    alreadyRenderedBackdrop.classList.remove(\"hidden\");\n\n    return;\n  }\n  backdropStylesElement = document.createElement(\"style\");\n  backdropDiv = document.createElement(\"div\");\n  backDropContentContainer = document.createElement(\"div\");\n  venmoLogoDiv = document.createElement(\"div\");\n  venmoMessageDiv = document.createElement(\"div\");\n  instructionsDiv = document.createElement(\"div\");\n  continueButton = document.createElement(\"button\");\n  cancelButton = document.createElement(\"button\");\n\n  backdropStylesElement.id = \"venmo-desktop-web__injected-styles\";\n  backdropStylesElement.innerHTML = getElementStyles();\n\n  backdropDiv.id = ELEMENT_IDS.backdrop;\n\n  backDropContentContainer.id = ELEMENT_IDS.backdropContainer;\n\n  venmoLogoDiv.id = ELEMENT_IDS.venmoLogo;\n  venmoLogoDiv.innerHTML = VENMO_LOGO_SVG;\n\n  venmoMessageDiv.id = ELEMENT_IDS.message;\n  venmoMessageDiv.innerText = \"What would you like to do?\";\n\n  instructionsDiv.id = ELEMENT_IDS.instructions;\n  instructionsDiv.innerText = CONTINUE_OR_CANCEL_INSTRUCTIONS;\n\n  continueButton.id = ELEMENT_IDS.continueButton;\n  continueButton.innerText = \"Continue payment\";\n\n  cancelButton.id = ELEMENT_IDS.cancelButton;\n  cancelButton.innerText = \"Cancel payment\";\n\n  document.head.appendChild(backdropStylesElement);\n  backDropContentContainer.appendChild(venmoLogoDiv);\n  backDropContentContainer.appendChild(venmoMessageDiv);\n  backDropContentContainer.appendChild(instructionsDiv);\n  backDropContentContainer.appendChild(continueButton);\n  backDropContentContainer.appendChild(cancelButton);\n  backdropDiv.appendChild(backDropContentContainer);\n  document.body.appendChild(backdropDiv);\n}\n\n/**\n * Applies a backdrop over the page, and opens a popup to the supplied url. Uses supplied status and cancel functions to handle the flow.\n * @function runWebLogin\n * @ignore\n * @param {object} [options] Options for running the web login flow.\n * @param {string} [options.venmoUrl] Venmo url that is to be used for logging in.\n * @param {string} [options.assetsUrl] Url that points to the hosted Braintree assets.\n * @param {Venmo~checkPaymentContextStatusAndProcessResult} [options.checkForStatusChange] {@link Venmo~checkPaymentContextStatusAndProcessResult} to be invoked in order to check for a payment context status update.\n * @param {Venmo~cancelTokenization} [options.cancelTokenization] {@link Venmo~cancelTokenization} to be invoked when the appropriate payment context status is retrieved.\n * @returns {Promise} Returns a promise\n */\nfunction runWebLogin(options) {\n  buildAndStyleElements();\n\n  return openPopup(options);\n}\n\nmodule.exports = {\n  runWebLogin: runWebLogin,\n  openPopup: openPopup,\n  POPUP_WIDTH: POPUP_WIDTH,\n  POPUP_HEIGHT: POPUP_HEIGHT,\n};\n\n},{\"../../lib/frame-service/external\":113,\"../../lib/promise\":131,\"../../lib/use-min\":135}],167:[function(require,module,exports){\n\"use strict\";\n\nvar analytics = require(\"../lib/analytics\");\nvar isBrowserSupported = require(\"./shared/supports-venmo\");\nvar browserDetection = require(\"./shared/browser-detection\");\nvar constants = require(\"./shared/constants\");\nvar errors = require(\"./shared/errors\");\nvar querystring = require(\"../lib/querystring\");\nvar isVerifiedDomain = require(\"../lib/is-verified-domain\");\nvar methods = require(\"../lib/methods\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar inIframe = require(\"../lib/in-iframe\");\nvar Promise = require(\"../lib/promise\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\nvar getVenmoUrl = require(\"./shared/get-venmo-url\");\nvar runWebLogin = require(\"./shared/web-login-backdrop\").runWebLogin;\nvar snakeCaseToCamelCase = require(\"../lib/snake-case-to-camel-case\");\n\n// NEXT_MAJOR_VERSION the source code for this is actually in a\n// typescript repo called venmo-desktop, once the SDK is migrated\n// to typescript, we can move the TS files out of that separate\n// repo and into the web SDK properly\nvar createVenmoDesktop = require(\"./external/\");\nvar graphqlQueries = require(\"./external/queries\");\n\nvar VERSION = \"3.88.3\";\nvar DEFAULT_MOBILE_POLLING_INTERVAL = 250; // 1/4 second\nvar DEFAULT_MOBILE_EXPIRING_THRESHOLD = 300000; // 5 minutes\n\n/**\n * Venmo tokenize payload.\n * @typedef {object} Venmo~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type The payment method type, always `VenmoAccount`.\n * @property {object} details Additional Venmo account details.\n * @property {string} details.username The username of the Venmo account.\n * @property {string} details.paymentContextId The context ID of the Venmo payment. Only available when used with {@link https://braintree.github.io/braintree-web/current/module-braintree-web_venmo.html#.create|`paymentMethodUsage`}.\n */\n\n/**\n * @class\n * @param {object} options The Venmo {@link module:braintree-web/venmo.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/venmo.create|braintree-web.venmo.create} instead.</strong>\n * @classdesc This class represents a Venmo component produced by {@link module:braintree-web/venmo.create|braintree-web/venmo.create}. Instances of this class have methods for tokenizing Venmo payments.\n */\nfunction Venmo(options) {\n  var self = this;\n\n  this._allowDesktopWebLogin = options.allowDesktopWebLogin || false;\n  this._mobileWebFallBack = options.mobileWebFallBack || false;\n  this._createPromise = options.createPromise;\n  this._allowNewBrowserTab = options.allowNewBrowserTab !== false;\n  this._allowWebviews = options.allowWebviews !== false;\n  this._allowDesktop = options.allowDesktop === true;\n  this._useRedirectForIOS = options.useRedirectForIOS === true;\n  this._profileId = options.profileId;\n  this._displayName = options.displayName;\n  this._deepLinkReturnUrl = options.deepLinkReturnUrl;\n  this._ignoreHistoryChanges = options.ignoreHistoryChanges;\n  this._paymentMethodUsage = (options.paymentMethodUsage || \"\").toUpperCase();\n  this._shouldUseLegacyFlow = !this._paymentMethodUsage;\n  this._requireManualReturn = options.requireManualReturn === true;\n  this._useDesktopQRFlow =\n    this._allowDesktop && this._isDesktop() && !this._allowDesktopWebLogin;\n  this._useAllowDesktopWebLogin =\n    this._allowDesktopWebLogin && this._isDesktop();\n  this._cannotHaveReturnUrls = inIframe() || this._requireManualReturn;\n  this._allowAndroidRecreation = options.allowAndroidRecreation !== false;\n  this._maxRetryCount = 3;\n\n  this._shouldCreateVenmoPaymentContext =\n    this._cannotHaveReturnUrls || !this._shouldUseLegacyFlow;\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"venmo.desktop-flow.configured.\" + String(Boolean(this._allowDesktop))\n  );\n\n  // if the url has a tokenization result, that indicates\n  // that it cannot be the desktop flow or the manual return\n  // flow. If it's the hash change with paymentMethodUsage\n  // flow, we want to skip creating a new payment context, since\n  // there is already a pending payment context waiting to be\n  // processed. For the hash change flow without paymentMethodUsage,\n  // no further actions are needed.\n  if (this.hasTokenizationResult()) {\n    analytics.sendEvent(\n      this._createPromise,\n      \"venmo.appswitch.return-in-new-tab\"\n    );\n  } else if (this._useDesktopQRFlow) {\n    this._createPromise = this._createPromise.then(function (client) {\n      var config = client.getConfiguration().gatewayConfiguration;\n\n      return createVenmoDesktop({\n        url:\n          config.assetsUrl +\n          \"/web/\" +\n          VERSION +\n          \"/html/venmo-desktop-frame.html\",\n        environment:\n          config.environment === \"production\" ? \"PRODUCTION\" : \"SANDBOX\",\n        profileId: self._profileId || config.payWithVenmo.merchantId,\n        paymentMethodUsage: self._paymentMethodUsage,\n        displayName: self._displayName,\n        Promise: Promise,\n        apiRequest: function (query, data) {\n          return client\n            .request({\n              api: \"graphQLApi\",\n              data: {\n                query: query,\n                variables: data,\n              },\n            })\n            .then(function (response) {\n              return response.data;\n            });\n        },\n        sendEvent: function (eventName) {\n          analytics.sendEvent(self._createPromise, eventName);\n        },\n        verifyDomain: isVerifiedDomain,\n      })\n        .then(function (venmoDesktopInstance) {\n          self._venmoDesktopInstance = venmoDesktopInstance;\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.desktop-flow.presented\"\n          );\n\n          return client;\n        })\n        .catch(function () {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.desktop-flow.setup-failed\"\n          );\n          self._useDesktopQRFlow = false;\n\n          return client;\n        });\n    });\n  } else if (this._shouldCreateVenmoPaymentContext) {\n    // these variables are only relevant for the manual return flow\n    // and they are only set to make testing easier (so they can\n    // be overwritten with smaller values in the tests)\n    this._mobilePollingInterval = DEFAULT_MOBILE_POLLING_INTERVAL;\n    this._mobilePollingExpiresThreshold = DEFAULT_MOBILE_EXPIRING_THRESHOLD;\n\n    this._createPromise = this._createPromise.then(function (client) {\n      var analyticsCategory = self._cannotHaveReturnUrls\n        ? \"manual-return\"\n        : \"mobile-payment-context\";\n      var config = client.getConfiguration().gatewayConfiguration;\n\n      self._mobilePollingContextEnvironment = config.environment.toUpperCase();\n\n      return self\n        ._createVenmoPaymentContext(client)\n        .then(function () {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.\" + analyticsCategory + \".presented\"\n          );\n\n          return client;\n        })\n        .catch(function (err) {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.\" + analyticsCategory + \".setup-failed\"\n          );\n\n          return Promise.reject(\n            new BraintreeError({\n              type: errors.VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED.type,\n              code: errors.VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED.code,\n              message: errors.VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED.message,\n              details: {\n                originalError: err,\n              },\n            })\n          );\n        });\n    });\n  }\n}\n\nVenmo.prototype._createVenmoPaymentContext = function (\n  client,\n  cancelIfTokenizationInProgress\n) {\n  var self = this;\n  var promise;\n\n  if (!this._shouldCreateVenmoPaymentContext) {\n    return Promise.resolve();\n  }\n\n  if (this._shouldUseLegacyFlow) {\n    promise = client\n      .request({\n        api: \"graphQLApi\",\n        data: {\n          query: graphqlQueries.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY,\n          variables: {\n            input: {\n              environment: this._mobilePollingContextEnvironment,\n              intent: \"PAY_FROM_APP\",\n            },\n          },\n        },\n      })\n      .then(function (response) {\n        return response\n          .data.createVenmoQRCodePaymentContext.venmoQRCodePaymentContext;\n      });\n  } else {\n    promise = client\n      .request({\n        api: \"graphQLApi\",\n        data: {\n          query: graphqlQueries.CREATE_PAYMENT_CONTEXT_QUERY,\n          variables: {\n            input: {\n              paymentMethodUsage: this._paymentMethodUsage,\n              intent: \"CONTINUE\",\n              customerClient: \"MOBILE_WEB\",\n              displayName: this._displayName,\n            },\n          },\n        },\n      })\n      .then(function (response) {\n        return response.data.createVenmoPaymentContext.venmoPaymentContext;\n      });\n  }\n\n  return promise.then(function (context) {\n    var expiredTime = new Date(context.expiresAt) - new Date(context.createdAt);\n    var refreshIn = expiredTime * 0.6666;\n\n    // prevents multiple setTimeouts from firing from separate calls\n    // to create a payment context by canceling the previous one\n    // if there is a pending call\n    clearTimeout(self._refreshPaymentContextTimeout);\n    self._refreshPaymentContextTimeout = setTimeout(function () {\n      if (self._tokenizationInProgress) {\n        return;\n      }\n      self._createVenmoPaymentContext(client, true);\n    }, refreshIn);\n\n    if (cancelIfTokenizationInProgress && self._tokenizationInProgress) {\n      return;\n    }\n\n    self._venmoPaymentContextStatus = context.status;\n    self._venmoPaymentContextId = context.id;\n  });\n};\n\nVenmo.prototype.appSwitch = function (url) {\n  if (this._deepLinkReturnUrl) {\n    if (isIosWebviewInDeepLinkReturnUrlFlow()) {\n      analytics.sendEvent(\n        this._createPromise,\n        \"venmo.appswitch.start.ios-webview\"\n      );\n      // Deep link URLs do not launch iOS apps from a webview when using window.open or PopupBridge.open.\n      window.location.href = url;\n    } else if (\n      window.popupBridge &&\n      typeof window.popupBridge.open === \"function\"\n    ) {\n      analytics.sendEvent(\n        this._createPromise,\n        \"venmo.appswitch.start.popup-bridge\"\n      );\n      window.popupBridge.open(url);\n    } else {\n      analytics.sendEvent(this._createPromise, \"venmo.appswitch.start.webview\");\n      window.open(url);\n    }\n  } else {\n    analytics.sendEvent(this._createPromise, \"venmo.appswitch.start.browser\");\n\n    if (\n      browserDetection.doesNotSupportWindowOpenInIos() ||\n      this._shouldUseRedirectStrategy()\n    ) {\n      window.location.href = url;\n    } else {\n      window.open(url);\n    }\n  }\n};\n\nVenmo.prototype.getUrl = function () {\n  return this._createPromise.then(\n    function (client) {\n      var configuration = client.getConfiguration();\n      var params = {};\n      var currentUrl =\n        this._deepLinkReturnUrl ||\n        window.location.href.replace(window.location.hash, \"\");\n      var venmoConfiguration = configuration.gatewayConfiguration.payWithVenmo;\n      var analyticsMetadata = configuration.analyticsMetadata;\n      var accessToken = venmoConfiguration.accessToken;\n      var braintreeData = {\n        _meta: {\n          version: analyticsMetadata.sdkVersion,\n          integration: analyticsMetadata.integration,\n          platform: analyticsMetadata.platform,\n          sessionId: analyticsMetadata.sessionId,\n        },\n      };\n\n      this._isDebug = configuration.isDebug;\n      this._assetsUrl = configuration.gatewayConfiguration.assetsUrl;\n\n      currentUrl = currentUrl.replace(/#*$/, \"\");\n\n      /* eslint-disable camelcase */\n      if (this._venmoPaymentContextId) {\n        if (this._shouldUseLegacyFlow) {\n          // NEXT_MAJOR_VERSION stop adding the context id to the access token.\n          // the context id is placed here for backwards compatiblity\n          // with versions of the venmo app that did not support\n          // pulling the resource id off of the query params\n          accessToken += \"|pcid:\" + this._venmoPaymentContextId;\n        } else {\n          params.resource_id = this._venmoPaymentContextId;\n        }\n      }\n\n      if (this._shouldIncludeReturnUrls()) {\n        if (this._useAllowDesktopWebLogin) {\n          currentUrl =\n            this._assetsUrl + \"/web/\" + VERSION + \"/html/redirect-frame.html\";\n        }\n\n        params[\"x-success\"] = currentUrl + \"#venmoSuccess=1\";\n        params[\"x-cancel\"] = currentUrl + \"#venmoCancel=1\";\n        params[\"x-error\"] = currentUrl + \"#venmoError=1\";\n      } else {\n        params[\"x-success\"] = \"NOOP\";\n        params[\"x-cancel\"] = \"NOOP\";\n        params[\"x-error\"] = \"NOOP\";\n      }\n\n      if (!this._allowAndroidRecreation) {\n        params.allowAndroidRecreation = 0;\n      } else {\n        params.allowAndroidRecreation = 1;\n      }\n\n      params.ua = window.navigator.userAgent;\n      params.braintree_merchant_id =\n        this._profileId || venmoConfiguration.merchantId;\n      params.braintree_access_token = accessToken;\n      params.braintree_environment = venmoConfiguration.environment;\n      params.braintree_sdk_data = btoa(JSON.stringify(braintreeData));\n\n      return (\n        getVenmoUrl({\n          useAllowDesktopWebLogin: this._useAllowDesktopWebLogin,\n          mobileWebFallBack: this._mobileWebFallBack,\n        }) +\n        \"?\" +\n        querystring.stringify(params)\n      );\n    }.bind(this)\n  );\n};\n\n/**\n * Returns a boolean indicating whether the current browser supports Venmo as a payment method.\n *\n * If `options.allowNewBrowserTab` is false when calling {@link module:braintree-web/venmo.create|venmo.create}, this method will return true only for browsers known to support returning from the Venmo app to the same browser tab. Currently, this is limited to iOS Safari and Android Chrome.\n * If `options.allowWebviews` is false when calling {@link module:braintree-web/venmo.create|venmo.create}, this method will return true only for mobile browsers that are not webviews.\n * @public\n * @returns {boolean} True if the current browser is supported, false if not.\n */\nVenmo.prototype.isBrowserSupported = function () {\n  return isBrowserSupported.isBrowserSupported({\n    allowNewBrowserTab: this._allowNewBrowserTab,\n    allowWebviews: this._allowWebviews,\n    allowDesktop: this._allowDesktop,\n  });\n};\n\n/**\n * Returns a boolean indicating whether a Venmo tokenization result is ready to be processed immediately.\n *\n * This method should be called after initialization to see if the result of Venmo authorization is available. If it returns true, call {@link Venmo#tokenize|tokenize} immediately to process the results.\n *\n * @public\n * @returns {boolean} True if the results of Venmo payment authorization are available and ready to process.\n */\nVenmo.prototype.hasTokenizationResult = function () {\n  return this._hasTokenizationResult();\n};\n\n// a private version that lets us pass in a custom hash\n// when listening on a hashchange event\nVenmo.prototype._hasTokenizationResult = function (hash) {\n  var params = getFragmentParameters(hash);\n\n  return (\n    typeof (params.venmoSuccess || params.venmoError || params.venmoCancel) !==\n    \"undefined\"\n  );\n};\n\nVenmo.prototype._shouldIncludeReturnUrls = function () {\n  // when a deep link return url is passed, we should always\n  // respect it and include the return urls so the venmo app\n  // can app switch back to it\n  if (this._deepLinkReturnUrl) {\n    return true;\n  }\n\n  // when the sdk is initialized within an iframe, it's\n  // impossible to return back to the correct place automatically\n  // without also setting a deepLinkReturnUrl. When the return\n  // urls are omitted, the Venmo app prompts the user to return\n  // manually.\n  return !this._cannotHaveReturnUrls;\n};\n\nVenmo.prototype._isDesktop = function () {\n  return !(browserDetection.isIos() || browserDetection.isAndroid());\n};\n\n/**\n * Launches the Venmo flow and returns a nonce payload.\n *\n * If {@link Venmo#hasTokenizationResult|hasTokenizationResult} returns true, calling tokenize will immediately process and return the results without initiating the Venmo payment authorization flow.\n *\n * Only one Venmo flow can be active at a time. One way to achieve this is to disable your Venmo button while the flow is open.\n * @public\n * @param {object} [options] Options for tokenization.\n * @param {number} [options.processResultsDelay=500] The amount of time in milliseconds to delay processing the results. In most cases, this value should be left as the default.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link Venmo~tokenizePayload|tokenizePayload}. If no callback is provided, the method will return a Promise that resolves with a {@link Venmo~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * button.addEventListener('click', function () {\n *   // Disable the button so that we don't attempt to open multiple popups.\n *   button.setAttribute('disabled', 'disabled');\n *\n *   // Because tokenize opens a new window, this must be called\n *   // as a result of a user action, such as a button click.\n *   venmoInstance.tokenize().then(function (payload) {\n *     // Submit payload.nonce to your server\n *     // Use payload.username to get the Venmo username and display any UI\n *   }).catch(function (tokenizeError) {\n *     // Handle flow errors or premature flow closure\n *     switch (tokenizeErr.code) {\n *       case 'VENMO_APP_CANCELED':\n *         console.log('User canceled Venmo flow.');\n *         break;\n *       case 'VENMO_CANCELED':\n *         console.log('User canceled Venmo, or Venmo app is not available.');\n *         break;\n *       default:\n *         console.error('Error!', tokenizeErr);\n *     }\n *   }).then(function () {\n *     button.removeAttribute('disabled');\n *   });\n * });\n */\nVenmo.prototype.tokenize = function (options) {\n  var self = this;\n  var tokenizationPromise;\n\n  options = options || {};\n\n  if (this._tokenizationInProgress === true) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_TOKENIZATION_REQUEST_ACTIVE)\n    );\n  }\n\n  this._tokenizationInProgress = true;\n  if (this._useDesktopQRFlow) {\n    // for the desktop flow, we create a venmo payment\n    // context and then present a qr code modal to the\n    // customer and they will open up their venmo app\n    // and scan it and approve the purchase on their\n    // mobile device. The sdk will start polling\n    // in order to determine when the status of the\n    // payment context has updated and then pass the\n    // resulting nonce back to the merchant.\n    tokenizationPromise = this._tokenizeForDesktopQRFlow(options);\n  } else if (this._useAllowDesktopWebLogin) {\n    /**\n     * For Desktop Web Login, we open a browser popup to allow for authorization. Once authorized, the redirect urls are used by Venmo, and we query the API for a payment context status update.\n     *\n     * - Payment context is created on initialization\n     * - Popup is opened to Venmo login url.\n     *  - The payment is authorized or canceled, and the popup is closed\n     * - Once the popup is closed, we query the API for a payment context status update\n     *\n     * This is an alternate, opt-in flow to be used the Desktop QR Flow is not desired for Pay with Venmo desktop experiences.\n     */\n    tokenizationPromise = this._tokenizeWebLoginWithRedirect();\n  } else if (this._cannotHaveReturnUrls) {\n    // in the manual return strategy, we create the payment\n    // context on initialization, then continually poll once\n    // the app switch begins until we get a response indiciating\n    // the payment context was approved by the customer on the\n    // Venmo app. The payment context response also includes a\n    // nonce. There are 2 cases where we use the manual return\n    // strategy:\n    // 1. the sdk is instantiated in an iframe, because\n    //    the venmo app is unable to redirect automatically\n    //    when that is the case so we rely on the customer\n    //    to do a manual redirect and continunally poll for\n    //    updates on the payment context to get the nonce\n    // 2. same deal for when `requireManualReturn` is configured\n    tokenizationPromise = this._tokenizeForMobileWithManualReturn();\n  } else {\n    // the default mobile flow is to app switch to the\n    // venmo app, and then have the venmo app switch\n    // back to the page with the venmo nonce details\n    // encoded into the hash portion of the url. If\n    // `paymentMethodUsage` is provided when instantiating\n    // the sdk, we also create a payment context and pass\n    // the resource id to the Venmo app during the app switch.\n    // Once we get a succesful return, we ping the payment\n    // context query to get any additional data needed\n    // to send back to the merchant.\n    tokenizationPromise =\n      this._tokenizeForMobileWithHashChangeListeners(options);\n  }\n\n  return tokenizationPromise\n    .then(function (payload) {\n      return self._createPromise\n        .then(function (client) {\n          return self._createVenmoPaymentContext(client);\n        })\n        .then(function () {\n          self._tokenizationInProgress = false;\n\n          return formatTokenizePayload(payload);\n        });\n    })\n    .catch(function (err) {\n      return self._createPromise\n        .then(function (client) {\n          return self._createVenmoPaymentContext(client);\n        })\n        .then(function () {\n          self._tokenizationInProgress = false;\n\n          return Promise.reject(err);\n        });\n    });\n};\n\n/**\n * Cancels the venmo tokenization process\n *\n * @public\n * @function Venmo~cancelTokenization\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * venmoTokenizeButton.addEventListener('click', function () {\n *   venmoInstance.tokenize().then(function (payload) {\n *     // handle payload\n *   }).catch(function (err) {\n *     if (err.code === 'VENMO_TOKENIZATION_CANCELED_BY_MERCHANT') {\n *       // tokenization was canceled by calling cancelTokenization\n *     }\n *   });\n * });\n *\n * venmoCancelButton.addEventListener('click', function () {\n *   // Hide the button when the venmo flow is not in progress\n *   venmoCancelButton.style.display = \"none\";\n *\n *   venmoInstance.cancelTokenization().then(function () {\n *     // done canceling the flow\n *   }).catch(function (err) {\n *     // should only get here if there is no tokenization in progress\n *   });\n * });\n */\nVenmo.prototype.cancelTokenization = function () {\n  if (!this._tokenizationInProgress) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE)\n    );\n  }\n\n  this._removeVisibilityEventListener();\n\n  // important to reject the tokenization promise first\n  // so the tokenize method rejects with this error\n  // rather than a customer canceled error in the mobile\n  // polling and desktop flows\n  if (this._tokenizePromise) {\n    this._tokenizePromise.reject(\n      new BraintreeError(errors.VENMO_TOKENIZATION_CANCELED_BY_MERCHANT)\n    );\n  }\n\n  return Promise.all([\n    this._cancelMobilePaymentContext(),\n    this._cancelVenmoDesktopContext(),\n  ]);\n};\n\nVenmo.prototype._tokenizeWebLoginWithRedirect = function () {\n  var self = this;\n\n  analytics.sendEvent(self._createPromise, \"venmo.tokenize.web-login.start\");\n  this._tokenizePromise = new ExtendedPromise();\n\n  return this.getUrl().then(function (url) {\n    runWebLogin({\n      checkForStatusChange:\n        self._checkPaymentContextStatusAndProcessResult.bind(self),\n      cancelTokenization: self.cancelTokenization.bind(self),\n      venmoUrl: url,\n      assetsUrl: self._assetsUrl,\n      debug: self._isDebug,\n    })\n      .then(function (payload) {\n        analytics.sendEvent(\n          self._createPromise,\n          \"venmo.tokenize.web-login.success\"\n        );\n\n        return self._tokenizePromise.resolve({\n          paymentMethodNonce: payload.paymentMethodId,\n          username: payload.userName,\n          payerInfo: payload.payerInfo,\n          id: self._venmoPaymentContextId,\n        });\n      })\n      .catch(function (err) {\n        analytics.sendEvent(\n          self._createPromise,\n          \"venmo.tokenize.web-login.failure\"\n        );\n\n        return self._tokenizePromise.reject(err);\n      });\n\n    return self._tokenizePromise;\n  });\n};\n\nVenmo.prototype._queryPaymentContextStatus = function (id) {\n  var self = this;\n\n  return this._createPromise\n    .then(function (client) {\n      var query = self._shouldUseLegacyFlow\n        ? graphqlQueries.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY\n        : graphqlQueries.VENMO_PAYMENT_CONTEXT_STATUS_QUERY;\n\n      return client.request({\n        api: \"graphQLApi\",\n        data: {\n          query: query,\n          variables: {\n            id: id,\n          },\n        },\n      });\n    })\n    .then(function (response) {\n      return response.data.node;\n    });\n};\n\n/**\n * Queries the GraphQL API to get the payment context and process the status. Retries until there is an update to the payment context status.\n * @name Venmo~checkPaymentContextStatusAndProcessResult\n * @ignore\n * @param {number} retryCount The counter for tracking number of retries made against the API.\n * @returns {Promise} Returns a promise\n */\nVenmo.prototype._checkPaymentContextStatusAndProcessResult = function (\n  retryCount\n) {\n  var self = this;\n\n  return self\n    ._queryPaymentContextStatus(self._venmoPaymentContextId)\n    .catch(function (networkError) {\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.VENMO_NETWORK_ERROR.type,\n          code: errors.VENMO_NETWORK_ERROR.code,\n          message: errors.VENMO_NETWORK_ERROR.message,\n          details: networkError,\n        })\n      );\n    })\n    .then(function (node) {\n      var resultStatus = node.status;\n\n      if (resultStatus !== self._venmoPaymentContextStatus) {\n        self._venmoPaymentContextStatus = resultStatus;\n\n        analytics.sendEvent(\n          self._createPromise,\n          \"venmo.tokenize.web-login.status-change\"\n        );\n\n        switch (resultStatus) {\n          case \"APPROVED\":\n            return Promise.resolve(node);\n          case \"CANCELED\":\n            return Promise.reject(\n              new BraintreeError(errors.VENMO_CUSTOMER_CANCELED)\n            );\n          case \"FAILED\":\n            return Promise.reject(\n              new BraintreeError(errors.VENMO_TOKENIZATION_FAILED)\n            );\n          default:\n        }\n      }\n\n      return new Promise(function (resolve, reject) {\n        if (retryCount < self._maxRetryCount) {\n          retryCount++;\n\n          return self\n            ._checkPaymentContextStatusAndProcessResult(retryCount)\n            .then(resolve)\n            .catch(reject);\n        }\n\n        return reject(new BraintreeError(errors.VENMO_TOKENIZATION_FAILED));\n      });\n    });\n};\n\nVenmo.prototype._pollForStatusChange = function () {\n  var self = this;\n\n  if (Date.now() > self._mobilePollingContextExpiresIn) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT)\n    );\n  }\n\n  return this._queryPaymentContextStatus(this._venmoPaymentContextId)\n    .catch(function (networkError) {\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.type,\n          code: errors.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.code,\n          message:\n            errors.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.message,\n          details: {\n            originalError: networkError,\n          },\n        })\n      );\n    })\n    .then(function (node) {\n      var newStatus = node.status;\n\n      if (newStatus !== self._venmoPaymentContextStatus) {\n        self._venmoPaymentContextStatus = newStatus;\n\n        analytics.sendEvent(\n          self._createPromise,\n          \"venmo.tokenize.manual-return.status-change.\" +\n            newStatus.toLowerCase()\n        );\n\n        switch (newStatus) {\n          case \"EXPIRED\":\n          case \"FAILED\":\n          case \"CANCELED\":\n            return Promise.reject(\n              new BraintreeError(\n                errors[\"VENMO_MOBILE_POLLING_TOKENIZATION_\" + newStatus]\n              )\n            );\n          case \"APPROVED\":\n            return Promise.resolve(node);\n          case \"CREATED\":\n          case \"SCANNED\":\n          default:\n          // any other statuses are irrelevant to the polling\n          // and can just be ignored\n        }\n      }\n\n      return new Promise(function (resolve, reject) {\n        setTimeout(function () {\n          self._pollForStatusChange().then(resolve).catch(reject);\n        }, self._mobilePollingInterval);\n      });\n    });\n};\n\nVenmo.prototype._tokenizeForMobileWithManualReturn = function () {\n  var self = this;\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"venmo.tokenize.manual-return.start\"\n  );\n\n  this._mobilePollingContextExpiresIn =\n    Date.now() + this._mobilePollingExpiresThreshold;\n  this._tokenizePromise = new ExtendedPromise();\n\n  this._pollForStatusChange()\n    .then(function (payload) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.tokenize.manual-return.success\"\n      );\n\n      self._tokenizePromise.resolve({\n        paymentMethodNonce: payload.paymentMethodId,\n        username: payload.userName,\n        payerInfo: payload.payerInfo,\n        id: self._venmoPaymentContextId,\n      });\n    })\n    .catch(function (err) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.tokenize.manual-return.failure\"\n      );\n\n      self._tokenizePromise.reject(err);\n    });\n\n  return this.getUrl().then(function (url) {\n    self.appSwitch(url);\n\n    return self._tokenizePromise;\n  });\n};\n\nVenmo.prototype._shouldUseRedirectStrategy = function () {\n  if (!browserDetection.isIos()) {\n    return false;\n  }\n\n  if (this._mobileWebFallBack === true) {\n    return true;\n  }\n\n  return this._useRedirectForIOS;\n};\n\nVenmo.prototype._tokenizeForMobileWithHashChangeListeners = function (options) {\n  var self = this;\n  var resultProcessingInProgress, visibilityChangeListenerTimeout;\n\n  if (this.hasTokenizationResult()) {\n    return this.processHashChangeFlowResults();\n  }\n\n  analytics.sendEvent(this._createPromise, \"venmo.tokenize.mobile.start\");\n  this._tokenizePromise = new ExtendedPromise();\n\n  this._previousHash = window.location.hash;\n\n  function completeFlow(hash) {\n    var error;\n\n    self\n      .processHashChangeFlowResults(hash)\n      .catch(function (err) {\n        error = err;\n      })\n      .then(function (res) {\n        if (\n          !self._ignoreHistoryChanges &&\n          window.location.hash !== self._previousHash\n        ) {\n          window.location.hash = self._previousHash;\n        }\n        self._removeVisibilityEventListener();\n\n        if (error) {\n          self._tokenizePromise.reject(error);\n        } else {\n          self._tokenizePromise.resolve(res);\n        }\n        delete self._tokenizePromise;\n      });\n  }\n\n  // The Venmo SDK app switches back with the results of the\n  // tokenization encoded in the hash\n  this._onHashChangeListener = function (e) {\n    var hash = e.newURL.split(\"#\")[1];\n\n    if (!self._hasTokenizationResult(hash)) {\n      return;\n    }\n\n    resultProcessingInProgress = true;\n    clearTimeout(visibilityChangeListenerTimeout);\n    completeFlow(hash);\n  };\n\n  window.addEventListener(\"hashchange\", this._onHashChangeListener, false);\n\n  // Subscribe to document visibility change events to detect when app switch\n  // has returned. Acts as a fallback for the hashchange listener and catches\n  // the cancel case via manual app switch back\n  this._visibilityChangeListener = function () {\n    var delay =\n      options.processResultsDelay || constants.DEFAULT_PROCESS_RESULTS_DELAY;\n\n    if (!window.document.hidden) {\n      if (!resultProcessingInProgress) {\n        visibilityChangeListenerTimeout = setTimeout(completeFlow, delay);\n      }\n    }\n  };\n\n  return this.getUrl().then(function (url) {\n    self.appSwitch(url);\n\n    // Add a brief delay to ignore visibility change events that occur right before app switch\n    setTimeout(function () {\n      window.document.addEventListener(\n        documentVisibilityChangeEventName(),\n        self._visibilityChangeListener\n      );\n    }, constants.DOCUMENT_VISIBILITY_CHANGE_EVENT_DELAY);\n\n    return self._tokenizePromise;\n  });\n};\n\nVenmo.prototype._tokenizeForDesktopQRFlow = function () {\n  var self = this;\n\n  analytics.sendEvent(this._createPromise, \"venmo.tokenize.desktop.start\");\n\n  this._tokenizePromise = new ExtendedPromise();\n\n  this._createPromise\n    .then(function () {\n      return self._venmoDesktopInstance.launchDesktopFlow();\n    })\n    .then(function (payload) {\n      self._venmoDesktopInstance.hideDesktopFlow();\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.tokenize.desktop.success\"\n      );\n\n      self._tokenizePromise.resolve(payload);\n    })\n    .catch(function (err) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.tokenize.desktop.failure\"\n      );\n\n      if (self._venmoDesktopInstance) {\n        self._venmoDesktopInstance.hideDesktopFlow();\n      }\n\n      if (err && err.reason === \"CUSTOMER_CANCELED\") {\n        self._tokenizePromise.reject(\n          new BraintreeError(errors.VENMO_DESKTOP_CANCELED)\n        );\n\n        return;\n      }\n\n      self._tokenizePromise.reject(\n        new BraintreeError({\n          type: errors.VENMO_DESKTOP_UNKNOWN_ERROR.type,\n          code: errors.VENMO_DESKTOP_UNKNOWN_ERROR.code,\n          message: errors.VENMO_DESKTOP_UNKNOWN_ERROR.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n\n  return this._tokenizePromise;\n};\n\nVenmo.prototype._cancelMobilePaymentContext = function () {\n  var self = this;\n\n  return this._createPromise.then(function (client) {\n    var query;\n\n    if (self._venmoPaymentContextId) {\n      query = self._shouldUseLegacyFlow\n        ? graphqlQueries.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY\n        : graphqlQueries.UPDATE_PAYMENT_CONTEXT_QUERY;\n\n      return client.request({\n        api: \"graphQLApi\",\n        data: {\n          query: query,\n          variables: {\n            input: {\n              id: self._venmoPaymentContextId,\n              status: \"CANCELED\",\n            },\n          },\n        },\n      });\n    }\n\n    return Promise.resolve();\n  });\n};\n\nVenmo.prototype._cancelVenmoDesktopContext = function () {\n  var self = this;\n\n  return this._createPromise.then(function () {\n    if (self._venmoDesktopInstance) {\n      self._venmoDesktopInstance.updateVenmoDesktopPaymentContext(\"CANCELED\");\n    }\n\n    return Promise.resolve();\n  });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/venmo.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * venmoInstance.teardown();\n * @example <caption>With callback</caption>\n * venmoInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nVenmo.prototype.teardown = function () {\n  var self = this;\n\n  this._removeVisibilityEventListener();\n\n  return this._createPromise.then(\n    function () {\n      if (self._venmoDesktopInstance) {\n        self._venmoDesktopInstance.teardown();\n      }\n\n      clearTimeout(self._refreshPaymentContextTimeout);\n      self._cancelMobilePaymentContext();\n\n      convertMethodsToError(this, methods(Venmo.prototype));\n    }.bind(this)\n  );\n};\n\nVenmo.prototype._removeVisibilityEventListener = function () {\n  window.removeEventListener(\"hashchange\", this._onHashChangeListener);\n  window.document.removeEventListener(\n    documentVisibilityChangeEventName(),\n    this._visibilityChangeListener\n  );\n\n  delete this._visibilityChangeListener;\n  delete this._onHashChangeListener;\n};\n\n/**\n * The hash parameter in this function is optional. If no hash parameter is passed, the `getFragmentParameters` function will default to the hash present in the website's URL instead.\n *\n * There are two scenarios where this method is called:\n *\n * 1. When called within a browser that is capable of returning to the same tab that started the Venmo flow, we set up a listener to detect hash changes in the url. Part of the return to the merchant's website from the Venmo app includes encoding the details of the purchase in the hash of the url. The callback is invoked and the hash is pulled off from the event payload. The reason we pull the hash off of the event payload instead of pulling it directly from the URL is because sometimes a single page app will use the hash parameter for it's routing system, and it's possible to hit a race condition where the routing code has already removed the Venmo specific attributes from the hash before we are able to pull it off the url. Grabbing the hash from the event handler instead ensures we get the Venmo details, no matter what the url is converted to.\n * 2. The other scenario is for browsers that cannot return to the same tab, and instead the Venmo app must open a new tab. Since there is no hash listener to pull the hash from, we pull the hash details directly from the url using the `getFragmentParameters` method.\n *\n * @ignore\n * @param {string} [hash] Optionally provided browser url hash.\n * @returns {Promise} Returns a promise\n */\nVenmo.prototype.processHashChangeFlowResults = function (hash) {\n  var self = this;\n  var params = getFragmentParameters(hash);\n\n  // NEXT_MAJOR_VERSION only rely on payment context status call and stop relying on the\n  // content of the hash\n\n  return new Promise(function (resolve, reject) {\n    if (!self._shouldUseLegacyFlow) {\n      self\n        ._pollForStatusChange()\n        .then(function (payload) {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.appswitch.handle.payment-context-status-query.success\"\n          );\n\n          return resolve({\n            paymentMethodNonce: payload.paymentMethodId,\n            username: payload.userName,\n            payerInfo: payload.payerInfo,\n            id: self._venmoPaymentContextId,\n          });\n        })\n        .catch(function (err) {\n          if (\n            err.type === errors.VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED.type\n          ) {\n            // We want to reject in this case because if it the process was canceled, we don't want to take the happy path\n            reject(err);\n          }\n\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.process-results.payment-context-status-query-failed\"\n          );\n          // If the polling request fails, but not because of cancelization, we will rely on the params provided from the hash\n          resolve(params);\n        });\n    } else if (params.venmoSuccess) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.appswitch.handle.success\"\n      );\n\n      resolve(params);\n    } else if (params.venmoError) {\n      analytics.sendEvent(self._createPromise, \"venmo.appswitch.handle.error\");\n      reject(\n        new BraintreeError({\n          type: errors.VENMO_APP_FAILED.type,\n          code: errors.VENMO_APP_FAILED.code,\n          message: errors.VENMO_APP_FAILED.message,\n          details: {\n            originalError: {\n              message: decodeURIComponent(params.errorMessage),\n              code: params.errorCode,\n            },\n          },\n        })\n      );\n    } else if (params.venmoCancel) {\n      analytics.sendEvent(self._createPromise, \"venmo.appswitch.handle.cancel\");\n      reject(new BraintreeError(errors.VENMO_APP_CANCELED));\n    } else {\n      // User has either manually switched back to browser, or app is not available for app switch\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.appswitch.cancel-or-unavailable\"\n      );\n      reject(new BraintreeError(errors.VENMO_CANCELED));\n    }\n\n    self._clearFragmentParameters();\n  });\n};\n\nVenmo.prototype._clearFragmentParameters = function () {\n  if (this._ignoreHistoryChanges) {\n    return;\n  }\n\n  if (\n    typeof window.history.replaceState === \"function\" &&\n    window.location.hash\n  ) {\n    history.pushState(\n      {},\n      \"\",\n      window.location.href.slice(0, window.location.href.indexOf(\"#\"))\n    );\n  }\n};\n\nfunction getFragmentParameters(hash) {\n  var keyValuesArray = (hash || window.location.hash.substring(1)).split(\"&\");\n\n  var parsedParams = keyValuesArray.reduce(function (toReturn, keyValue) {\n    var parts = keyValue.split(\"=\");\n    // some Single Page Apps may pre-pend a / to the first value\n    // in the hash, assuming it's a route in their app\n    // instead of information from Venmo, this removes all\n    // non-alphanumeric characters from the keys in the params\n    var decodedKey = decodeURIComponent(parts[0]).replace(/\\W/g, \"\");\n    var key = snakeCaseToCamelCase(decodedKey);\n    var value = decodeURIComponent(parts[1]);\n\n    toReturn[key] = value;\n\n    return toReturn;\n  }, {});\n\n  if (parsedParams.resourceId) {\n    parsedParams.id = parsedParams.resourceId;\n  }\n\n  return parsedParams;\n}\n\nfunction formatUserName(username) {\n  username = username || \"\";\n\n  // NEXT_MAJOR_VERSION the web sdks have a prepended @ sign\n  // but the ios and android ones do not. This should be standardized\n  return \"@\" + username.replace(\"@\", \"\");\n}\n\nfunction formatTokenizePayload(payload) {\n  var formattedPayload = {\n    nonce: payload.paymentMethodNonce,\n    type: \"VenmoAccount\",\n    details: {\n      username: formatUserName(payload.username),\n      paymentContextId: payload.id,\n    },\n  };\n\n  if (payload.payerInfo) {\n    formattedPayload.details.payerInfo = payload.payerInfo;\n    formattedPayload.details.payerInfo.userName = formatUserName(\n      payload.payerInfo.userName\n    );\n  }\n\n  return formattedPayload;\n}\n\n// From https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API\nfunction documentVisibilityChangeEventName() {\n  var visibilityChange;\n\n  if (typeof window.document.hidden !== \"undefined\") {\n    // Opera 12.10 and Firefox 18 and later support\n    visibilityChange = \"visibilitychange\";\n  } else if (typeof window.document.msHidden !== \"undefined\") {\n    visibilityChange = \"msvisibilitychange\";\n  } else if (typeof window.document.webkitHidden !== \"undefined\") {\n    visibilityChange = \"webkitvisibilitychange\";\n  }\n\n  return visibilityChange;\n}\n\nfunction isIosWebviewInDeepLinkReturnUrlFlow() {\n  // we know it's a webview because this flow only gets\n  // used when checking the deep link flow\n  // test the platform here to get around custom useragents\n  return (\n    window.navigator.platform &&\n    /iPhone|iPad|iPod/.test(window.navigator.platform)\n  );\n}\n\nmodule.exports = wrapPromise.wrapPrototype(Venmo);\n\n},{\"../lib/analytics\":94,\"../lib/braintree-error\":99,\"../lib/convert-methods-to-error\":101,\"../lib/in-iframe\":124,\"../lib/is-verified-domain\":127,\"../lib/methods\":129,\"../lib/promise\":131,\"../lib/querystring\":132,\"../lib/snake-case-to-camel-case\":134,\"./external/\":156,\"./external/queries\":157,\"./shared/browser-detection\":160,\"./shared/constants\":161,\"./shared/errors\":162,\"./shared/get-venmo-url\":164,\"./shared/supports-venmo\":165,\"./shared/web-login-backdrop\":166,\"@braintree/extended-promise\":42,\"@braintree/wrap-promise\":51}],168:[function(require,module,exports){\n\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar cardTypes = require(\"./lib/card-types\");\nvar add_matching_cards_to_results_1 = require(\"./lib/add-matching-cards-to-results\");\nvar is_valid_input_type_1 = require(\"./lib/is-valid-input-type\");\nvar find_best_match_1 = require(\"./lib/find-best-match\");\nvar clone_1 = require(\"./lib/clone\");\nvar customCards = {};\nvar cardNames = {\n    VISA: \"visa\",\n    MASTERCARD: \"mastercard\",\n    AMERICAN_EXPRESS: \"american-express\",\n    DINERS_CLUB: \"diners-club\",\n    DISCOVER: \"discover\",\n    JCB: \"jcb\",\n    UNIONPAY: \"unionpay\",\n    MAESTRO: \"maestro\",\n    ELO: \"elo\",\n    MIR: \"mir\",\n    HIPER: \"hiper\",\n    HIPERCARD: \"hipercard\",\n};\nvar ORIGINAL_TEST_ORDER = [\n    cardNames.VISA,\n    cardNames.MASTERCARD,\n    cardNames.AMERICAN_EXPRESS,\n    cardNames.DINERS_CLUB,\n    cardNames.DISCOVER,\n    cardNames.JCB,\n    cardNames.UNIONPAY,\n    cardNames.MAESTRO,\n    cardNames.ELO,\n    cardNames.MIR,\n    cardNames.HIPER,\n    cardNames.HIPERCARD,\n];\nvar testOrder = clone_1.clone(ORIGINAL_TEST_ORDER);\nfunction findType(cardType) {\n    return customCards[cardType] || cardTypes[cardType];\n}\nfunction getAllCardTypes() {\n    return testOrder.map(function (cardType) { return clone_1.clone(findType(cardType)); });\n}\nfunction getCardPosition(name, ignoreErrorForNotExisting) {\n    if (ignoreErrorForNotExisting === void 0) { ignoreErrorForNotExisting = false; }\n    var position = testOrder.indexOf(name);\n    if (!ignoreErrorForNotExisting && position === -1) {\n        throw new Error('\"' + name + '\" is not a supported card type.');\n    }\n    return position;\n}\nfunction creditCardType(cardNumber) {\n    var results = [];\n    if (!is_valid_input_type_1.isValidInputType(cardNumber)) {\n        return results;\n    }\n    if (cardNumber.length === 0) {\n        return getAllCardTypes();\n    }\n    testOrder.forEach(function (cardType) {\n        var cardConfiguration = findType(cardType);\n        add_matching_cards_to_results_1.addMatchingCardsToResults(cardNumber, cardConfiguration, results);\n    });\n    var bestMatch = find_best_match_1.findBestMatch(results);\n    if (bestMatch) {\n        return [bestMatch];\n    }\n    return results;\n}\ncreditCardType.getTypeInfo = function (cardType) {\n    return clone_1.clone(findType(cardType));\n};\ncreditCardType.removeCard = function (name) {\n    var position = getCardPosition(name);\n    testOrder.splice(position, 1);\n};\ncreditCardType.addCard = function (config) {\n    var existingCardPosition = getCardPosition(config.type, true);\n    customCards[config.type] = config;\n    if (existingCardPosition === -1) {\n        testOrder.push(config.type);\n    }\n};\ncreditCardType.updateCard = function (cardType, updates) {\n    var originalObject = customCards[cardType] || cardTypes[cardType];\n    if (!originalObject) {\n        throw new Error(\"\\\"\" + cardType + \"\\\" is not a recognized type. Use `addCard` instead.'\");\n    }\n    if (updates.type && originalObject.type !== updates.type) {\n        throw new Error(\"Cannot overwrite type parameter.\");\n    }\n    var clonedCard = clone_1.clone(originalObject);\n    clonedCard = __assign(__assign({}, clonedCard), updates);\n    customCards[clonedCard.type] = clonedCard;\n};\ncreditCardType.changeOrder = function (name, position) {\n    var currentPosition = getCardPosition(name);\n    testOrder.splice(currentPosition, 1);\n    testOrder.splice(position, 0, name);\n};\ncreditCardType.resetModifications = function () {\n    testOrder = clone_1.clone(ORIGINAL_TEST_ORDER);\n    customCards = {};\n};\ncreditCardType.types = cardNames;\nmodule.exports = creditCardType;\n\n},{\"./lib/add-matching-cards-to-results\":169,\"./lib/card-types\":170,\"./lib/clone\":171,\"./lib/find-best-match\":172,\"./lib/is-valid-input-type\":173}],169:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addMatchingCardsToResults = void 0;\nvar clone_1 = require(\"./clone\");\nvar matches_1 = require(\"./matches\");\nfunction addMatchingCardsToResults(cardNumber, cardConfiguration, results) {\n    var i, patternLength;\n    for (i = 0; i < cardConfiguration.patterns.length; i++) {\n        var pattern = cardConfiguration.patterns[i];\n        if (!matches_1.matches(cardNumber, pattern)) {\n            continue;\n        }\n        var clonedCardConfiguration = clone_1.clone(cardConfiguration);\n        if (Array.isArray(pattern)) {\n            patternLength = String(pattern[0]).length;\n        }\n        else {\n            patternLength = String(pattern).length;\n        }\n        if (cardNumber.length >= patternLength) {\n            clonedCardConfiguration.matchStrength = patternLength;\n        }\n        results.push(clonedCardConfiguration);\n        break;\n    }\n}\nexports.addMatchingCardsToResults = addMatchingCardsToResults;\n\n},{\"./clone\":171,\"./matches\":174}],170:[function(require,module,exports){\n\"use strict\";\nvar cardTypes = {\n    visa: {\n        niceType: \"Visa\",\n        type: \"visa\",\n        patterns: [4],\n        gaps: [4, 8, 12],\n        lengths: [16, 18, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    mastercard: {\n        niceType: \"Mastercard\",\n        type: \"mastercard\",\n        patterns: [[51, 55], [2221, 2229], [223, 229], [23, 26], [270, 271], 2720],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    \"american-express\": {\n        niceType: \"American Express\",\n        type: \"american-express\",\n        patterns: [34, 37],\n        gaps: [4, 10],\n        lengths: [15],\n        code: {\n            name: \"CID\",\n            size: 4,\n        },\n    },\n    \"diners-club\": {\n        niceType: \"Diners Club\",\n        type: \"diners-club\",\n        patterns: [[300, 305], 36, 38, 39],\n        gaps: [4, 10],\n        lengths: [14, 16, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    discover: {\n        niceType: \"Discover\",\n        type: \"discover\",\n        patterns: [6011, [644, 649], 65],\n        gaps: [4, 8, 12],\n        lengths: [16, 19],\n        code: {\n            name: \"CID\",\n            size: 3,\n        },\n    },\n    jcb: {\n        niceType: \"JCB\",\n        type: \"jcb\",\n        patterns: [2131, 1800, [3528, 3589]],\n        gaps: [4, 8, 12],\n        lengths: [16, 17, 18, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    unionpay: {\n        niceType: \"UnionPay\",\n        type: \"unionpay\",\n        patterns: [\n            620,\n            [624, 626],\n            [62100, 62182],\n            [62184, 62187],\n            [62185, 62197],\n            [62200, 62205],\n            [622010, 622999],\n            622018,\n            [622019, 622999],\n            [62207, 62209],\n            [622126, 622925],\n            [623, 626],\n            6270,\n            6272,\n            6276,\n            [627700, 627779],\n            [627781, 627799],\n            [6282, 6289],\n            6291,\n            6292,\n            810,\n            [8110, 8131],\n            [8132, 8151],\n            [8152, 8163],\n            [8164, 8171],\n        ],\n        gaps: [4, 8, 12],\n        lengths: [14, 15, 16, 17, 18, 19],\n        code: {\n            name: \"CVN\",\n            size: 3,\n        },\n    },\n    maestro: {\n        niceType: \"Maestro\",\n        type: \"maestro\",\n        patterns: [\n            493698,\n            [500000, 504174],\n            [504176, 506698],\n            [506779, 508999],\n            [56, 59],\n            63,\n            67,\n            6,\n        ],\n        gaps: [4, 8, 12],\n        lengths: [12, 13, 14, 15, 16, 17, 18, 19],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    elo: {\n        niceType: \"Elo\",\n        type: \"elo\",\n        patterns: [\n            401178,\n            401179,\n            438935,\n            457631,\n            457632,\n            431274,\n            451416,\n            457393,\n            504175,\n            [506699, 506778],\n            [509000, 509999],\n            627780,\n            636297,\n            636368,\n            [650031, 650033],\n            [650035, 650051],\n            [650405, 650439],\n            [650485, 650538],\n            [650541, 650598],\n            [650700, 650718],\n            [650720, 650727],\n            [650901, 650978],\n            [651652, 651679],\n            [655000, 655019],\n            [655021, 655058],\n        ],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVE\",\n            size: 3,\n        },\n    },\n    mir: {\n        niceType: \"Mir\",\n        type: \"mir\",\n        patterns: [[2200, 2204]],\n        gaps: [4, 8, 12],\n        lengths: [16, 17, 18, 19],\n        code: {\n            name: \"CVP2\",\n            size: 3,\n        },\n    },\n    hiper: {\n        niceType: \"Hiper\",\n        type: \"hiper\",\n        patterns: [637095, 63737423, 63743358, 637568, 637599, 637609, 637612],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    hipercard: {\n        niceType: \"Hipercard\",\n        type: \"hipercard\",\n        patterns: [606282],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n};\nmodule.exports = cardTypes;\n\n},{}],171:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clone = void 0;\nfunction clone(originalObject) {\n    if (!originalObject) {\n        return null;\n    }\n    return JSON.parse(JSON.stringify(originalObject));\n}\nexports.clone = clone;\n\n},{}],172:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findBestMatch = void 0;\nfunction hasEnoughResultsToDetermineBestMatch(results) {\n    var numberOfResultsWithMaxStrengthProperty = results.filter(function (result) { return result.matchStrength; }).length;\n    /*\n     * if all possible results have a maxStrength property that means the card\n     * number is sufficiently long enough to determine conclusively what the card\n     * type is\n     * */\n    return (numberOfResultsWithMaxStrengthProperty > 0 &&\n        numberOfResultsWithMaxStrengthProperty === results.length);\n}\nfunction findBestMatch(results) {\n    if (!hasEnoughResultsToDetermineBestMatch(results)) {\n        return null;\n    }\n    return results.reduce(function (bestMatch, result) {\n        if (!bestMatch) {\n            return result;\n        }\n        /*\n         * If the current best match pattern is less specific than this result, set\n         * the result as the new best match\n         * */\n        if (Number(bestMatch.matchStrength) < Number(result.matchStrength)) {\n            return result;\n        }\n        return bestMatch;\n    });\n}\nexports.findBestMatch = findBestMatch;\n\n},{}],173:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidInputType = void 0;\nfunction isValidInputType(cardNumber) {\n    return typeof cardNumber === \"string\" || cardNumber instanceof String;\n}\nexports.isValidInputType = isValidInputType;\n\n},{}],174:[function(require,module,exports){\n\"use strict\";\n/*\n * Adapted from https://github.com/polvo-labs/card-type/blob/aaab11f80fa1939bccc8f24905a06ae3cd864356/src/cardType.js#L37-L42\n * */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.matches = void 0;\nfunction matchesRange(cardNumber, min, max) {\n    var maxLengthToCheck = String(min).length;\n    var substr = cardNumber.substr(0, maxLengthToCheck);\n    var integerRepresentationOfCardNumber = parseInt(substr, 10);\n    min = parseInt(String(min).substr(0, substr.length), 10);\n    max = parseInt(String(max).substr(0, substr.length), 10);\n    return (integerRepresentationOfCardNumber >= min &&\n        integerRepresentationOfCardNumber <= max);\n}\nfunction matchesPattern(cardNumber, pattern) {\n    pattern = String(pattern);\n    return (pattern.substring(0, cardNumber.length) ===\n        cardNumber.substring(0, pattern.length));\n}\nfunction matches(cardNumber, pattern) {\n    if (Array.isArray(pattern)) {\n        return matchesRange(cardNumber, pattern[0], pattern[1]);\n    }\n    return matchesPattern(cardNumber, pattern);\n}\nexports.matches = matches;\n\n},{}],175:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Framebus = void 0;\nvar is_not_string_1 = require(\"./lib/is-not-string\");\nvar subscription_args_invalid_1 = require(\"./lib/subscription-args-invalid\");\nvar broadcast_1 = require(\"./lib/broadcast\");\nvar package_payload_1 = require(\"./lib/package-payload\");\nvar send_message_1 = require(\"./lib/send-message\");\nvar constants_1 = require(\"./lib/constants\");\nvar DefaultPromise = (typeof window !== \"undefined\" &&\n    window.Promise);\nvar Framebus = /** @class */ (function () {\n    function Framebus(options) {\n        if (options === void 0) { options = {}; }\n        this.origin = options.origin || \"*\";\n        this.channel = options.channel || \"\";\n        this.verifyDomain = options.verifyDomain;\n        // if a targetFrames configuration is not passed in,\n        // the default behavior is to broadcast the payload\n        // to the top level window or to the frame itself.\n        // By default, the broadcast function will loop through\n        // all the known siblings and children of the window.\n        // If a targetFrames array is passed, it will instead\n        // only broadcast to those specified targetFrames\n        this.targetFrames = options.targetFrames || [];\n        this.limitBroadcastToFramesArray = Boolean(options.targetFrames);\n        this.isDestroyed = false;\n        this.listeners = [];\n        this.hasAdditionalChecksForOnListeners = Boolean(this.verifyDomain || this.limitBroadcastToFramesArray);\n    }\n    Framebus.setPromise = function (PromiseGlobal) {\n        Framebus.Promise = PromiseGlobal;\n    };\n    Framebus.target = function (options) {\n        return new Framebus(options);\n    };\n    Framebus.prototype.addTargetFrame = function (frame) {\n        if (!this.limitBroadcastToFramesArray) {\n            return;\n        }\n        this.targetFrames.push(frame);\n    };\n    Framebus.prototype.include = function (childWindow) {\n        if (childWindow == null) {\n            return false;\n        }\n        if (childWindow.Window == null) {\n            return false;\n        }\n        if (childWindow.constructor !== childWindow.Window) {\n            return false;\n        }\n        constants_1.childWindows.push(childWindow);\n        return true;\n    };\n    Framebus.prototype.target = function (options) {\n        return Framebus.target(options);\n    };\n    Framebus.prototype.emit = function (eventName, data, reply) {\n        if (this.isDestroyed) {\n            return false;\n        }\n        var origin = this.origin;\n        eventName = this.namespaceEvent(eventName);\n        if ((0, is_not_string_1.isntString)(eventName)) {\n            return false;\n        }\n        if ((0, is_not_string_1.isntString)(origin)) {\n            return false;\n        }\n        if (typeof data === \"function\") {\n            reply = data;\n            data = undefined; // eslint-disable-line no-undefined\n        }\n        var payload = (0, package_payload_1.packagePayload)(eventName, origin, data, reply);\n        if (!payload) {\n            return false;\n        }\n        if (this.limitBroadcastToFramesArray) {\n            this.targetFramesAsWindows().forEach(function (frame) {\n                (0, send_message_1.sendMessage)(frame, payload, origin);\n            });\n        }\n        else {\n            (0, broadcast_1.broadcast)(payload, {\n                origin: origin,\n                frame: window.top || window.self,\n            });\n        }\n        return true;\n    };\n    Framebus.prototype.emitAsPromise = function (eventName, data) {\n        var _this = this;\n        return new Framebus.Promise(function (resolve, reject) {\n            var didAttachListener = _this.emit(eventName, data, function (payload) {\n                resolve(payload);\n            });\n            if (!didAttachListener) {\n                reject(new Error(\"Listener not added for \\\"\".concat(eventName, \"\\\"\")));\n            }\n        });\n    };\n    Framebus.prototype.on = function (eventName, originalHandler) {\n        if (this.isDestroyed) {\n            return false;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        var self = this;\n        var origin = this.origin;\n        var handler = originalHandler;\n        eventName = this.namespaceEvent(eventName);\n        if ((0, subscription_args_invalid_1.subscriptionArgsInvalid)(eventName, handler, origin)) {\n            return false;\n        }\n        if (this.hasAdditionalChecksForOnListeners) {\n            /* eslint-disable no-invalid-this, @typescript-eslint/ban-ts-comment */\n            handler = function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                // @ts-ignore\n                if (!self.passesVerifyDomainCheck(this && this.origin)) {\n                    return;\n                }\n                // @ts-ignore\n                if (!self.hasMatchingTargetFrame(this && this.source)) {\n                    return;\n                }\n                originalHandler.apply(void 0, args);\n            };\n            /* eslint-enable no-invalid-this, @typescript-eslint/ban-ts-comment */\n        }\n        this.listeners.push({\n            eventName: eventName,\n            handler: handler,\n            originalHandler: originalHandler,\n        });\n        constants_1.subscribers[origin] = constants_1.subscribers[origin] || {};\n        constants_1.subscribers[origin][eventName] = constants_1.subscribers[origin][eventName] || [];\n        constants_1.subscribers[origin][eventName].push(handler);\n        return true;\n    };\n    Framebus.prototype.off = function (eventName, originalHandler) {\n        var handler = originalHandler;\n        if (this.isDestroyed) {\n            return false;\n        }\n        if (this.verifyDomain) {\n            for (var i = 0; i < this.listeners.length; i++) {\n                var listener = this.listeners[i];\n                if (listener.originalHandler === originalHandler) {\n                    handler = listener.handler;\n                }\n            }\n        }\n        eventName = this.namespaceEvent(eventName);\n        var origin = this.origin;\n        if ((0, subscription_args_invalid_1.subscriptionArgsInvalid)(eventName, handler, origin)) {\n            return false;\n        }\n        var subscriberList = constants_1.subscribers[origin] && constants_1.subscribers[origin][eventName];\n        if (!subscriberList) {\n            return false;\n        }\n        for (var i = 0; i < subscriberList.length; i++) {\n            if (subscriberList[i] === handler) {\n                subscriberList.splice(i, 1);\n                return true;\n            }\n        }\n        return false;\n    };\n    Framebus.prototype.teardown = function () {\n        if (this.isDestroyed) {\n            return;\n        }\n        this.isDestroyed = true;\n        for (var i = 0; i < this.listeners.length; i++) {\n            var listener = this.listeners[i];\n            this.off(listener.eventName, listener.handler);\n        }\n        this.listeners.length = 0;\n    };\n    Framebus.prototype.passesVerifyDomainCheck = function (origin) {\n        if (!this.verifyDomain) {\n            // always pass this check if no verifyDomain option was set\n            return true;\n        }\n        return this.checkOrigin(origin);\n    };\n    Framebus.prototype.targetFramesAsWindows = function () {\n        if (!this.limitBroadcastToFramesArray) {\n            return [];\n        }\n        return this.targetFrames\n            .map(function (frame) {\n            // we can't pull off the contentWindow\n            // when the iframe is originally added\n            // to the array, because if it is not\n            // in the DOM at that time, it will have\n            // a contentWindow of `null`\n            if (frame instanceof HTMLIFrameElement) {\n                return frame.contentWindow;\n            }\n            return frame;\n        })\n            .filter(function (win) {\n            // just in case an iframe element\n            // was removed from the DOM\n            // and the contentWindow property\n            // is null\n            return win;\n        });\n    };\n    Framebus.prototype.hasMatchingTargetFrame = function (source) {\n        if (!this.limitBroadcastToFramesArray) {\n            // always pass this check if we aren't limiting to the target frames\n            return true;\n        }\n        var matchingFrame = this.targetFramesAsWindows().find(function (frame) {\n            return frame === source;\n        });\n        return Boolean(matchingFrame);\n    };\n    Framebus.prototype.checkOrigin = function (postMessageOrigin) {\n        var merchantHost;\n        var a = document.createElement(\"a\");\n        a.href = location.href;\n        if (a.protocol === \"https:\") {\n            merchantHost = a.host.replace(/:443$/, \"\");\n        }\n        else if (a.protocol === \"http:\") {\n            merchantHost = a.host.replace(/:80$/, \"\");\n        }\n        else {\n            merchantHost = a.host;\n        }\n        var merchantOrigin = a.protocol + \"//\" + merchantHost;\n        if (merchantOrigin === postMessageOrigin) {\n            return true;\n        }\n        if (this.verifyDomain) {\n            return this.verifyDomain(postMessageOrigin);\n        }\n        return true;\n    };\n    Framebus.prototype.namespaceEvent = function (eventName) {\n        if (!this.channel) {\n            return eventName;\n        }\n        return \"\".concat(this.channel, \":\").concat(eventName);\n    };\n    Framebus.Promise = DefaultPromise;\n    return Framebus;\n}());\nexports.Framebus = Framebus;\n\n},{\"./lib/broadcast\":179,\"./lib/constants\":180,\"./lib/is-not-string\":183,\"./lib/package-payload\":185,\"./lib/send-message\":186,\"./lib/subscription-args-invalid\":188}],176:[function(require,module,exports){\n\"use strict\";\nvar attach_1 = require(\"./lib/attach\");\nvar framebus_1 = require(\"./framebus\");\n(0, attach_1.attach)();\nmodule.exports = framebus_1.Framebus;\n\n},{\"./framebus\":175,\"./lib/attach\":177}],177:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.detach = exports.attach = void 0;\nvar message_1 = require(\"./message\");\nvar isAttached = false;\nfunction attach() {\n    if (isAttached || typeof window === \"undefined\") {\n        return;\n    }\n    isAttached = true;\n    window.addEventListener(\"message\", message_1.onmessage, false);\n}\nexports.attach = attach;\n// removeIf(production)\nfunction detach() {\n    isAttached = false;\n    window.removeEventListener(\"message\", message_1.onmessage, false);\n}\nexports.detach = detach;\n// endRemoveIf(production)\n\n},{\"./message\":184}],178:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.broadcastToChildWindows = void 0;\nvar broadcast_1 = require(\"./broadcast\");\nvar constants_1 = require(\"./constants\");\nfunction broadcastToChildWindows(payload, origin, source) {\n    for (var i = constants_1.childWindows.length - 1; i >= 0; i--) {\n        var childWindow = constants_1.childWindows[i];\n        if (childWindow.closed) {\n            constants_1.childWindows.splice(i, 1);\n        }\n        else if (source !== childWindow) {\n            (0, broadcast_1.broadcast)(payload, {\n                origin: origin,\n                frame: childWindow.top,\n            });\n        }\n    }\n}\nexports.broadcastToChildWindows = broadcastToChildWindows;\n\n},{\"./broadcast\":179,\"./constants\":180}],179:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.broadcast = void 0;\nvar has_opener_1 = require(\"./has-opener\");\nfunction broadcast(payload, options) {\n    var i = 0;\n    var frameToBroadcastTo;\n    var origin = options.origin, frame = options.frame;\n    try {\n        frame.postMessage(payload, origin);\n        if ((0, has_opener_1.hasOpener)(frame) && frame.opener.top !== window.top) {\n            broadcast(payload, {\n                origin: origin,\n                frame: frame.opener.top,\n            });\n        }\n        // previously, our max value was frame.frames.length\n        // but frames.length inherits from window.length\n        // which can be overwritten if a developer does\n        // `var length = value;` outside of a function\n        // scope, it'll prevent us from looping through\n        // all the frames. With this, we loop through\n        // until there are no longer any frames\n        // eslint-disable-next-line no-cond-assign\n        while ((frameToBroadcastTo = frame.frames[i])) {\n            broadcast(payload, {\n                origin: origin,\n                frame: frameToBroadcastTo,\n            });\n            i++;\n        }\n    }\n    catch (_) {\n        /* ignored */\n    }\n}\nexports.broadcast = broadcast;\n\n},{\"./has-opener\":182}],180:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscribers = exports.childWindows = exports.prefix = void 0;\nexports.prefix = \"/*framebus*/\";\nexports.childWindows = [];\nexports.subscribers = {};\n\n},{}],181:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dispatch = void 0;\nvar constants_1 = require(\"./constants\");\nfunction dispatch(origin, event, data, reply, e) {\n    if (!constants_1.subscribers[origin]) {\n        return;\n    }\n    if (!constants_1.subscribers[origin][event]) {\n        return;\n    }\n    var args = [];\n    if (data) {\n        args.push(data);\n    }\n    if (reply) {\n        args.push(reply);\n    }\n    for (var i = 0; i < constants_1.subscribers[origin][event].length; i++) {\n        constants_1.subscribers[origin][event][i].apply(e, args);\n    }\n}\nexports.dispatch = dispatch;\n\n},{\"./constants\":180}],182:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasOpener = void 0;\nfunction hasOpener(frame) {\n    if (frame.top !== frame) {\n        return false;\n    }\n    if (frame.opener == null) {\n        return false;\n    }\n    if (frame.opener === frame) {\n        return false;\n    }\n    if (frame.opener.closed === true) {\n        return false;\n    }\n    return true;\n}\nexports.hasOpener = hasOpener;\n\n},{}],183:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isntString = void 0;\nfunction isntString(str) {\n    return typeof str !== \"string\";\n}\nexports.isntString = isntString;\n\n},{}],184:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.onmessage = void 0;\nvar is_not_string_1 = require(\"./is-not-string\");\nvar unpack_payload_1 = require(\"./unpack-payload\");\nvar dispatch_1 = require(\"./dispatch\");\nvar broadcast_to_child_windows_1 = require(\"./broadcast-to-child-windows\");\nfunction onmessage(e) {\n    if ((0, is_not_string_1.isntString)(e.data)) {\n        return;\n    }\n    var payload = (0, unpack_payload_1.unpackPayload)(e);\n    if (!payload) {\n        return;\n    }\n    var data = payload.eventData;\n    var reply = payload.reply;\n    (0, dispatch_1.dispatch)(\"*\", payload.event, data, reply, e);\n    (0, dispatch_1.dispatch)(e.origin, payload.event, data, reply, e);\n    (0, broadcast_to_child_windows_1.broadcastToChildWindows)(e.data, payload.origin, e.source);\n}\nexports.onmessage = onmessage;\n\n},{\"./broadcast-to-child-windows\":178,\"./dispatch\":181,\"./is-not-string\":183,\"./unpack-payload\":189}],185:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.packagePayload = void 0;\nvar subscribe_replier_1 = require(\"./subscribe-replier\");\nvar constants_1 = require(\"./constants\");\nfunction packagePayload(event, origin, data, reply) {\n    var packaged;\n    var payload = {\n        event: event,\n        origin: origin,\n    };\n    if (typeof reply === \"function\") {\n        payload.reply = (0, subscribe_replier_1.subscribeReplier)(reply, origin);\n    }\n    payload.eventData = data;\n    try {\n        packaged = constants_1.prefix + JSON.stringify(payload);\n    }\n    catch (e) {\n        throw new Error(\"Could not stringify event: \".concat(e.message));\n    }\n    return packaged;\n}\nexports.packagePayload = packagePayload;\n\n},{\"./constants\":180,\"./subscribe-replier\":187}],186:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sendMessage = void 0;\n/**\n * A basic function for wrapping the sending of postMessages to frames.\n */\nfunction sendMessage(frame, payload, origin) {\n    try {\n        frame.postMessage(payload, origin);\n    }\n    catch (error) {\n        /* ignored */\n    }\n}\nexports.sendMessage = sendMessage;\n\n},{}],187:[function(require,module,exports){\n\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscribeReplier = void 0;\nvar framebus_1 = require(\"../framebus\");\nvar uuid_1 = __importDefault(require(\"@braintree/uuid\"));\nfunction subscribeReplier(fn, origin) {\n    var uuid = (0, uuid_1.default)();\n    function replier(data, replyOriginHandler) {\n        fn(data, replyOriginHandler);\n        framebus_1.Framebus.target({\n            origin: origin,\n        }).off(uuid, replier);\n    }\n    framebus_1.Framebus.target({\n        origin: origin,\n    }).on(uuid, replier);\n    return uuid;\n}\nexports.subscribeReplier = subscribeReplier;\n\n},{\"../framebus\":175,\"@braintree/uuid\":47}],188:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscriptionArgsInvalid = void 0;\nvar is_not_string_1 = require(\"./is-not-string\");\nfunction subscriptionArgsInvalid(event, fn, origin) {\n    if ((0, is_not_string_1.isntString)(event)) {\n        return true;\n    }\n    if (typeof fn !== \"function\") {\n        return true;\n    }\n    return (0, is_not_string_1.isntString)(origin);\n}\nexports.subscriptionArgsInvalid = subscriptionArgsInvalid;\n\n},{\"./is-not-string\":183}],189:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unpackPayload = void 0;\nvar constants_1 = require(\"./constants\");\nvar package_payload_1 = require(\"./package-payload\");\nfunction unpackPayload(e) {\n    var payload;\n    if (e.data.slice(0, constants_1.prefix.length) !== constants_1.prefix) {\n        return false;\n    }\n    try {\n        payload = JSON.parse(e.data.slice(constants_1.prefix.length));\n    }\n    catch (err) {\n        return false;\n    }\n    if (payload.reply) {\n        var replyOrigin_1 = e.origin;\n        var replySource_1 = e.source;\n        var replyEvent_1 = payload.reply;\n        payload.reply = function reply(replyData) {\n            if (!replySource_1) {\n                return;\n            }\n            var replyPayload = (0, package_payload_1.packagePayload)(replyEvent_1, replyOrigin_1, replyData);\n            if (!replyPayload) {\n                return;\n            }\n            replySource_1.postMessage(replyPayload, replyOrigin_1);\n        };\n    }\n    return payload;\n}\nexports.unpackPayload = unpackPayload;\n\n},{\"./constants\":180,\"./package-payload\":185}],190:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],191:[function(require,module,exports){\n(function (setImmediate){(function (){\n'use strict';\n\n/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n  var constructor = this.constructor;\n  return this.then(\n    function(value) {\n      // @ts-ignore\n      return constructor.resolve(callback()).then(function() {\n        return value;\n      });\n    },\n    function(reason) {\n      // @ts-ignore\n      return constructor.resolve(callback()).then(function() {\n        // @ts-ignore\n        return constructor.reject(reason);\n      });\n    }\n  );\n}\n\nfunction allSettled(arr) {\n  var P = this;\n  return new P(function(resolve, reject) {\n    if (!(arr && typeof arr.length !== 'undefined')) {\n      return reject(\n        new TypeError(\n          typeof arr +\n            ' ' +\n            arr +\n            ' is not iterable(cannot read property Symbol(Symbol.iterator))'\n        )\n      );\n    }\n    var args = Array.prototype.slice.call(arr);\n    if (args.length === 0) return resolve([]);\n    var remaining = args.length;\n\n    function res(i, val) {\n      if (val && (typeof val === 'object' || typeof val === 'function')) {\n        var then = val.then;\n        if (typeof then === 'function') {\n          then.call(\n            val,\n            function(val) {\n              res(i, val);\n            },\n            function(e) {\n              args[i] = { status: 'rejected', reason: e };\n              if (--remaining === 0) {\n                resolve(args);\n              }\n            }\n          );\n          return;\n        }\n      }\n      args[i] = { status: 'fulfilled', value: val };\n      if (--remaining === 0) {\n        resolve(args);\n      }\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i]);\n    }\n  });\n}\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction isArray(x) {\n  return Boolean(x && typeof x.length !== 'undefined');\n}\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n  return function() {\n    fn.apply(thisArg, arguments);\n  };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n  if (!(this instanceof Promise))\n    throw new TypeError('Promises must be constructed via new');\n  if (typeof fn !== 'function') throw new TypeError('not a function');\n  /** @type {!number} */\n  this._state = 0;\n  /** @type {!boolean} */\n  this._handled = false;\n  /** @type {Promise|undefined} */\n  this._value = undefined;\n  /** @type {!Array<!Function>} */\n  this._deferreds = [];\n\n  doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n  while (self._state === 3) {\n    self = self._value;\n  }\n  if (self._state === 0) {\n    self._deferreds.push(deferred);\n    return;\n  }\n  self._handled = true;\n  Promise._immediateFn(function() {\n    var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n    if (cb === null) {\n      (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n      return;\n    }\n    var ret;\n    try {\n      ret = cb(self._value);\n    } catch (e) {\n      reject(deferred.promise, e);\n      return;\n    }\n    resolve(deferred.promise, ret);\n  });\n}\n\nfunction resolve(self, newValue) {\n  try {\n    // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n    if (newValue === self)\n      throw new TypeError('A promise cannot be resolved with itself.');\n    if (\n      newValue &&\n      (typeof newValue === 'object' || typeof newValue === 'function')\n    ) {\n      var then = newValue.then;\n      if (newValue instanceof Promise) {\n        self._state = 3;\n        self._value = newValue;\n        finale(self);\n        return;\n      } else if (typeof then === 'function') {\n        doResolve(bind(then, newValue), self);\n        return;\n      }\n    }\n    self._state = 1;\n    self._value = newValue;\n    finale(self);\n  } catch (e) {\n    reject(self, e);\n  }\n}\n\nfunction reject(self, newValue) {\n  self._state = 2;\n  self._value = newValue;\n  finale(self);\n}\n\nfunction finale(self) {\n  if (self._state === 2 && self._deferreds.length === 0) {\n    Promise._immediateFn(function() {\n      if (!self._handled) {\n        Promise._unhandledRejectionFn(self._value);\n      }\n    });\n  }\n\n  for (var i = 0, len = self._deferreds.length; i < len; i++) {\n    handle(self, self._deferreds[i]);\n  }\n  self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n  this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n  this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n  var done = false;\n  try {\n    fn(\n      function(value) {\n        if (done) return;\n        done = true;\n        resolve(self, value);\n      },\n      function(reason) {\n        if (done) return;\n        done = true;\n        reject(self, reason);\n      }\n    );\n  } catch (ex) {\n    if (done) return;\n    done = true;\n    reject(self, ex);\n  }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n  return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n  // @ts-ignore\n  var prom = new this.constructor(noop);\n\n  handle(this, new Handler(onFulfilled, onRejected, prom));\n  return prom;\n};\n\nPromise.prototype['finally'] = finallyConstructor;\n\nPromise.all = function(arr) {\n  return new Promise(function(resolve, reject) {\n    if (!isArray(arr)) {\n      return reject(new TypeError('Promise.all accepts an array'));\n    }\n\n    var args = Array.prototype.slice.call(arr);\n    if (args.length === 0) return resolve([]);\n    var remaining = args.length;\n\n    function res(i, val) {\n      try {\n        if (val && (typeof val === 'object' || typeof val === 'function')) {\n          var then = val.then;\n          if (typeof then === 'function') {\n            then.call(\n              val,\n              function(val) {\n                res(i, val);\n              },\n              reject\n            );\n            return;\n          }\n        }\n        args[i] = val;\n        if (--remaining === 0) {\n          resolve(args);\n        }\n      } catch (ex) {\n        reject(ex);\n      }\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i]);\n    }\n  });\n};\n\nPromise.allSettled = allSettled;\n\nPromise.resolve = function(value) {\n  if (value && typeof value === 'object' && value.constructor === Promise) {\n    return value;\n  }\n\n  return new Promise(function(resolve) {\n    resolve(value);\n  });\n};\n\nPromise.reject = function(value) {\n  return new Promise(function(resolve, reject) {\n    reject(value);\n  });\n};\n\nPromise.race = function(arr) {\n  return new Promise(function(resolve, reject) {\n    if (!isArray(arr)) {\n      return reject(new TypeError('Promise.race accepts an array'));\n    }\n\n    for (var i = 0, len = arr.length; i < len; i++) {\n      Promise.resolve(arr[i]).then(resolve, reject);\n    }\n  });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n  // @ts-ignore\n  (typeof setImmediate === 'function' &&\n    function(fn) {\n      // @ts-ignore\n      setImmediate(fn);\n    }) ||\n  function(fn) {\n    setTimeoutFunc(fn, 0);\n  };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n  if (typeof console !== 'undefined' && console) {\n    console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n  }\n};\n\nmodule.exports = Promise;\n\n}).call(this)}).call(this,require(\"timers\").setImmediate)\n},{\"timers\":195}],192:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isIos = exports.isIE9 = exports.isSamsungBrowser = exports.isAndroidChrome = exports.isKitKatWebview = void 0;\n// server side rendering check\nvar UA = (typeof window !== \"undefined\" &&\n    window.navigator &&\n    window.navigator.userAgent);\n// TODO remove this when browser detection is converted to typescript\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-ignore\nvar isAndroid = require(\"@braintree/browser-detection/is-android\");\n// @ts-ignore\nvar isChromeOs = require(\"@braintree/browser-detection/is-chrome-os\");\n// @ts-ignore\nvar isChrome = require(\"@braintree/browser-detection/is-chrome\");\n// @ts-ignore\nvar isIos = require(\"@braintree/browser-detection/is-ios\");\nexports.isIos = isIos;\n// @ts-ignore\nvar isIE9 = require(\"@braintree/browser-detection/is-ie9\");\nexports.isIE9 = isIE9;\n/* eslint-enable @typescript-eslint/ban-ts-comment */\n// Old Android Webviews used specific versions of Chrome with 0.0.0 as their version suffix\n// https://developer.chrome.com/multidevice/user-agent#webview_user_agent\nvar KITKAT_WEBVIEW_REGEX = /Version\\/\\d\\.\\d* Chrome\\/\\d*\\.0\\.0\\.0/;\nfunction isOldSamsungBrowserOrSamsungWebview(ua) {\n    return !isChrome(ua) && ua.indexOf(\"Samsung\") > -1;\n}\nfunction isKitKatWebview(ua) {\n    if (ua === void 0) { ua = UA; }\n    return isAndroid(ua) && KITKAT_WEBVIEW_REGEX.test(ua);\n}\nexports.isKitKatWebview = isKitKatWebview;\nfunction isAndroidChrome(ua) {\n    if (ua === void 0) { ua = UA; }\n    return (isAndroid(ua) || isChromeOs(ua)) && isChrome(ua);\n}\nexports.isAndroidChrome = isAndroidChrome;\nfunction isSamsungBrowser(ua) {\n    if (ua === void 0) { ua = UA; }\n    return /SamsungBrowser/.test(ua) || isOldSamsungBrowserOrSamsungWebview(ua);\n}\nexports.isSamsungBrowser = isSamsungBrowser;\n\n},{\"@braintree/browser-detection/is-android\":26,\"@braintree/browser-detection/is-chrome\":28,\"@braintree/browser-detection/is-chrome-os\":27,\"@braintree/browser-detection/is-ie9\":33,\"@braintree/browser-detection/is-ios\":37}],193:[function(require,module,exports){\n\"use strict\";\nvar device_1 = require(\"./lib/device\");\nmodule.exports = function supportsInputFormatting() {\n    // Digits get dropped in samsung browser\n    return !(0, device_1.isSamsungBrowser)();\n};\n\n},{\"./lib/device\":192}],194:[function(require,module,exports){\nmodule.exports = require(\"./dist/supports-input-formatting\");\n\n},{\"./dist/supports-input-formatting\":193}],195:[function(require,module,exports){\n(function (setImmediate,clearImmediate){(function (){\nvar nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n  var id = nextImmediateId++;\n  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n  immediateIds[id] = true;\n\n  nextTick(function onNextTick() {\n    if (immediateIds[id]) {\n      // fn.call() is faster so we optimize for the common use-case\n      // @see http://jsperf.com/call-apply-segu\n      if (args) {\n        fn.apply(null, args);\n      } else {\n        fn.call(null);\n      }\n      // Prevent ids from leaking\n      exports.clearImmediate(id);\n    }\n  });\n\n  return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n  delete immediateIds[id];\n};\n}).call(this)}).call(this,require(\"timers\").setImmediate,require(\"timers\").clearImmediate)\n},{\"process/browser.js\":190,\"timers\":195}],196:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  paymentOptionIDs: {\n    card: 'card',\n    paypal: 'paypal',\n    paypalCredit: 'paypalCredit',\n    applePay: 'applePay',\n    venmo: 'venmo',\n    googlePay: 'googlePay'\n  },\n  paymentMethodTypes: {\n    card: 'CreditCard',\n    paypal: 'PayPalAccount',\n    paypalCredit: 'PayPalAccount',\n    applePay: 'ApplePayCard',\n    venmo: 'VenmoAccount',\n    googlePay: 'AndroidPayCard'\n  },\n  analyticsKinds: {\n    CreditCard: 'card',\n    PayPalAccount: 'paypal',\n    ApplePayCard: 'applepay',\n    VenmoAccount: 'venmo',\n    AndroidPayCard: 'googlepay'\n  },\n  paymentMethodCardTypes: {\n    Visa: 'visa',\n    MasterCard: 'master-card',\n    'American Express': 'american-express',\n    'Diners Club': 'diners-club',\n    Discover: 'discover',\n    JCB: 'jcb',\n    UnionPay: 'unionpay',\n    Maestro: 'maestro',\n    Elo: 'elo',\n    Hiper: 'hiper',\n    Hipercard: 'hipercard'\n  },\n  configurationCardTypes: {\n    visa: 'Visa',\n    'master-card': 'MasterCard',\n    'american-express': 'American Express',\n    'diners-club': 'Discover',\n    discover: 'Discover',\n    jcb: 'JCB',\n    unionpay: 'UnionPay',\n    maestro: 'Maestro',\n    elo: 'Elo',\n    hiper: 'Hiper',\n    hipercard: 'Hipercard'\n  },\n  dependencySetupStates: {\n    DONE: 'done',\n    FAILED: 'failed',\n    INITIALIZING: 'initializing',\n    NOT_ENABLED: 'not-enabled'\n  },\n  errors: {\n    NO_PAYMENT_METHOD_ERROR: 'No payment method is available.',\n    DEVELOPER_MISCONFIGURATION_MESSAGE: 'Developer Error: Something went wrong. Check the console for details.'\n  },\n  ANALYTICS_REQUEST_TIMEOUT_MS: 2000,\n  ANALYTICS_PREFIX: 'web.dropin.',\n  CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT: 200,\n  CHECKOUT_JS_SOURCE: 'https://www.paypalobjects.com/api/checkout.min.js',\n  GOOGLE_PAYMENT_SOURCE: 'https://pay.google.com/gp/p/js/pay.js',\n  INTEGRATION: 'dropin2',\n  PAYPAL_CHECKOUT_SCRIPT_ID: 'braintree-dropin-paypal-checkout-script',\n  GOOGLE_PAYMENT_SCRIPT_ID: 'braintree-dropin-google-payment-script',\n  DATA_COLLECTOR_SCRIPT_ID: 'braintree-dropin-data-collector-script',\n  STYLESHEET_ID: 'braintree-dropin-stylesheet'\n};\n\n},{}],197:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('./lib/analytics');\nvar DropinError = require('./lib/dropin-error');\nvar EventEmitter = require('@braintree/event-emitter');\nvar constants = require('./constants');\nvar paymentMethodTypes = constants.paymentMethodTypes;\nvar paymentOptionIDs = constants.paymentOptionIDs;\nvar dependencySetupStates = constants.dependencySetupStates;\nvar isGuestCheckout = require('./lib/is-guest-checkout');\nvar Promise = require('./lib/promise');\nvar paymentSheetViews = require('./views/payment-sheet-views');\nvar vaultManager = require('braintree-web/vault-manager');\nvar paymentOptionsViewID = require('./views/payment-options-view').ID;\n\nvar VAULTED_PAYMENT_METHOD_TYPES_THAT_SHOULD_BE_HIDDEN = [\n  paymentMethodTypes.applePay,\n  paymentMethodTypes.googlePay,\n  paymentMethodTypes.venmo\n];\nvar DEFAULT_PAYMENT_OPTION_PRIORITY = [\n  paymentOptionIDs.card,\n  paymentOptionIDs.paypal,\n  paymentOptionIDs.paypalCredit,\n  paymentOptionIDs.venmo,\n  paymentOptionIDs.applePay,\n  paymentOptionIDs.googlePay\n];\nvar NON_PAYMENT_OPTION_DEPENDENCIES = ['threeDSecure', 'dataCollector'];\nvar ASYNC_DEPENDENCIES = DEFAULT_PAYMENT_OPTION_PRIORITY.concat(NON_PAYMENT_OPTION_DEPENDENCIES);\nvar DEPENDENCY_READY_CHECK_INTERVAL = 200;\n\nfunction DropinModel(options) {\n  this.rootNode = options.container;\n  this.componentID = options.componentID;\n  this.merchantConfiguration = options.merchantConfiguration;\n  this.isGuestCheckout = isGuestCheckout(options.client);\n  this.dependencyStates = ASYNC_DEPENDENCIES.reduce(function (total, dependencyKey) {\n    if (this._shouldIncludeDependency(dependencyKey)) {\n      total[dependencyKey] = dependencySetupStates.INITIALIZING;\n    }\n\n    return total;\n  }.bind(this), {});\n\n  this.failedDependencies = {};\n  this._options = options;\n  this._setupComplete = false;\n\n  while (this.rootNode.parentNode) {\n    this.rootNode = this.rootNode.parentNode;\n  }\n  this.isInShadowDom = this.rootNode.toString() === '[object ShadowRoot]';\n\n  EventEmitter.call(this);\n}\n\nEventEmitter.createChild(DropinModel);\n\nDropinModel.prototype.initialize = function () {\n  var dep;\n  var self = this;\n  var dependencyReadyInterval = setInterval(function () {\n    for (dep in self.dependencyStates) {\n      if (self.dependencyStates[dep] === dependencySetupStates.INITIALIZING) {\n        return;\n      }\n    }\n\n    clearInterval(dependencyReadyInterval);\n\n    self._emit('asyncDependenciesReady');\n  }, DEPENDENCY_READY_CHECK_INTERVAL);\n\n  return vaultManager.create({\n    client: self._options.client\n  }).then(function (vaultManagerInstance) {\n    self._vaultManager = vaultManagerInstance;\n\n    return self._getSupportedPaymentOptions(self._options);\n  }).then(function (paymentOptions) {\n    self.supportedPaymentOptions = paymentOptions;\n\n    return self.getVaultedPaymentMethods();\n  }).then(function (paymentMethods) {\n    self._paymentMethods = paymentMethods;\n    self._paymentMethodIsRequestable = self._paymentMethods.length > 0;\n  });\n};\n\nDropinModel.prototype.confirmDropinReady = function () {\n  this._setupComplete = true;\n};\n\nDropinModel.prototype.isPaymentMethodRequestable = function () {\n  return Boolean(this._paymentMethodIsRequestable);\n};\n\nDropinModel.prototype.addPaymentMethod = function (paymentMethod) {\n  this._paymentMethods.push(paymentMethod);\n  this._emit('addPaymentMethod', paymentMethod);\n  this.changeActivePaymentMethod(paymentMethod);\n};\n\nDropinModel.prototype.removePaymentMethod = function (paymentMethod) {\n  var paymentMethodLocation = this._paymentMethods.indexOf(paymentMethod);\n\n  if (paymentMethodLocation === -1) {\n    return;\n  }\n\n  this._paymentMethods.splice(paymentMethodLocation, 1);\n  this._emit('removePaymentMethod', paymentMethod);\n};\n\nDropinModel.prototype.refreshPaymentMethods = function () {\n  var self = this;\n\n  return self.getVaultedPaymentMethods().then(function (paymentMethods) {\n    self._paymentMethods = paymentMethods;\n\n    self._emit('refreshPaymentMethods');\n  });\n};\n\nDropinModel.prototype.changeActivePaymentMethod = function (paymentMethod) {\n  this._activePaymentMethod = paymentMethod;\n  this._emit('changeActivePaymentMethod', paymentMethod);\n};\n\nDropinModel.prototype.changeActiveView = function (paymentViewID) {\n  var previousViewId = this._activePaymentViewId;\n\n  this._activePaymentViewId = paymentViewID;\n  this._emit('changeActiveView', {\n    previousViewId: previousViewId,\n    newViewId: paymentViewID\n  });\n};\n\nDropinModel.prototype.removeActivePaymentMethod = function () {\n  this._activePaymentMethod = null;\n  this._emit('removeActivePaymentMethod');\n  this.setPaymentMethodRequestable({\n    isRequestable: false\n  });\n};\n\nDropinModel.prototype.selectPaymentOption = function (paymentViewID) {\n  this._emit('paymentOptionSelected', {\n    paymentOption: paymentViewID\n  });\n};\n\nDropinModel.prototype.enableEditMode = function () {\n  analytics.sendEvent(this._options.client, 'manager.appeared');\n  this._isInEditMode = true;\n  this._emit('enableEditMode');\n};\n\nDropinModel.prototype.disableEditMode = function () {\n  this._isInEditMode = false;\n  this._emit('disableEditMode');\n};\n\nDropinModel.prototype.isInEditMode = function () {\n  return Boolean(this._isInEditMode);\n};\n\nDropinModel.prototype.confirmPaymentMethodDeletion = function (paymentMethod) {\n  this._paymentMethodWaitingToBeDeleted = paymentMethod;\n  this._emit('confirmPaymentMethodDeletion', paymentMethod);\n};\n\nDropinModel.prototype._shouldIncludeDependency = function (key) {\n  if (key === 'card') {\n    // card is turned on by default unless the merchant explicitly\n    // passes a value of `false` or omits it from a custom\n    // `paymentOptionPriority` array\n    if (this.merchantConfiguration.card === false) {\n      return false;\n    }\n  } else if (!this.merchantConfiguration[key]) {\n    // if the merchant does not have the non-card dependency\n    // configured, do not include the dependency\n    return false;\n  }\n\n  if (NON_PAYMENT_OPTION_DEPENDENCIES.indexOf(key) > -1) {\n    // if the dependency is not a payment option (3DS, data collector)\n    // include it since the merchant configured Drop-in for it\n\n    return true;\n  }\n\n  if (this.merchantConfiguration.paymentOptionPriority) {\n    // if the merchant passed a custom `paymentOptionPriority` array,\n    // only include the dependency if it was configured _and_\n    // included in the array\n    return this.merchantConfiguration.paymentOptionPriority.indexOf(key) > -1;\n  }\n\n  // otherwise, include it if it is a valid payment option\n  return DEFAULT_PAYMENT_OPTION_PRIORITY.indexOf(key) > -1;\n};\n\nDropinModel.prototype._shouldEmitRequestableEvent = function (options) {\n  var requestableStateHasNotChanged = this.isPaymentMethodRequestable() === options.isRequestable;\n  var nonce = options.selectedPaymentMethod && options.selectedPaymentMethod.nonce;\n  var nonceHasNotChanged = nonce === this._paymentMethodRequestableNonce;\n\n  if (!this._setupComplete) {\n    // don't emit event until after Drop-in is fully set up\n    // fixes issues with lazy loading of imports where event\n    // should not be emitted\n    // https://github.com/braintree/braintree-web-drop-in/issues/511\n    return false;\n  }\n\n  if (requestableStateHasNotChanged && (!options.isRequestable || nonceHasNotChanged)) {\n    return false;\n  }\n\n  return true;\n};\n\nDropinModel.prototype.setPaymentMethodRequestable = function (options) {\n  var shouldEmitEvent = this._shouldEmitRequestableEvent(options);\n  var paymentMethodRequestableResponse = {\n    paymentMethodIsSelected: Boolean(options.selectedPaymentMethod),\n    type: options.type\n  };\n\n  this._paymentMethodIsRequestable = options.isRequestable;\n\n  if (options.isRequestable) {\n    this._paymentMethodRequestableNonce = options.selectedPaymentMethod && options.selectedPaymentMethod.nonce;\n  } else {\n    delete this._paymentMethodRequestableNonce;\n  }\n\n  if (!shouldEmitEvent) {\n    return;\n  }\n\n  if (options.isRequestable) {\n    this._emit('paymentMethodRequestable', paymentMethodRequestableResponse);\n  } else {\n    this._emit('noPaymentMethodRequestable');\n  }\n};\n\nDropinModel.prototype.getPaymentMethods = function () {\n  // we want to return a copy of the Array\n  // so we can loop through it in dropin.updateConfiguration\n  // while calling model.removePaymentMethod\n  // which updates the original array\n  return this._paymentMethods.slice();\n};\n\nDropinModel.prototype.getActivePaymentMethod = function () {\n  return this._activePaymentMethod;\n};\n\nDropinModel.prototype.hasPaymentMethods = function () {\n  return this.getPaymentMethods().length > 0;\n};\n\nDropinModel.prototype.getInitialViewId = function () {\n  if (this.supportedPaymentOptions.length > 1) {\n    return paymentOptionsViewID;\n  }\n\n  return this.supportedPaymentOptions[0];\n};\n\nDropinModel.prototype.getActivePaymentViewId = function () {\n  return this._activePaymentViewId;\n};\n\nDropinModel.prototype.reportAppSwitchPayload = function (payload) {\n  this.appSwitchPayload = payload;\n};\n\nDropinModel.prototype.reportAppSwitchError = function (sheetId, error) {\n  this.appSwitchError = {\n    id: sheetId,\n    error: error\n  };\n};\n\nDropinModel.prototype.hasAtLeastOneAvailablePaymentOption = function () {\n  var self = this;\n  var i;\n\n  for (i = 0; i < this.supportedPaymentOptions.length; i++) {\n    if (self.dependencyStates[this.supportedPaymentOptions[i]] === dependencySetupStates.DONE) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nDropinModel.prototype.asyncDependencyReady = function (key) {\n  this.dependencyStates[key] = dependencySetupStates.DONE;\n};\n\nDropinModel.prototype.asyncDependencyFailed = function (options) {\n  if (this.failedDependencies.hasOwnProperty(options.view)) {\n    return;\n  }\n  this.failedDependencies[options.view] = options.error;\n  this.dependencyStates[options.view] = dependencySetupStates.FAILED;\n};\n\nDropinModel.prototype.cancelInitialization = function (error) {\n  this._emit('cancelInitialization', error);\n};\n\nDropinModel.prototype.reportError = function (error) {\n  this._emit('errorOccurred', error);\n};\n\nDropinModel.prototype.clearError = function () {\n  this._emit('errorCleared');\n};\n\nDropinModel.prototype.preventUserAction = function () {\n  this._emit('preventUserAction');\n};\n\nDropinModel.prototype.allowUserAction = function () {\n  this._emit('allowUserAction');\n};\n\nDropinModel.prototype.deleteVaultedPaymentMethod = function () {\n  var self = this;\n  var promise = Promise.resolve();\n  var error;\n\n  this._emit('startVaultedPaymentMethodDeletion');\n\n  if (!self.isGuestCheckout) {\n    promise = this._vaultManager.deletePaymentMethod(this._paymentMethodWaitingToBeDeleted.nonce).catch(function (err) {\n      error = err;\n    });\n  }\n\n  return promise.then(function () {\n    delete self._paymentMethodWaitingToBeDeleted;\n\n    return self.refreshPaymentMethods();\n  }).then(function () {\n    self.disableEditMode();\n    self._emit('finishVaultedPaymentMethodDeletion', error);\n  });\n};\n\nDropinModel.prototype.cancelDeleteVaultedPaymentMethod = function () {\n  this._emit('cancelVaultedPaymentMethodDeletion');\n\n  delete this._paymentMethodWaitingToBeDeleted;\n};\n\nDropinModel.prototype.getVaultedPaymentMethods = function () {\n  var self = this;\n\n  if (self.isGuestCheckout) {\n    return Promise.resolve([]);\n  }\n\n  return self._vaultManager.fetchPaymentMethods({\n    defaultFirst: this.merchantConfiguration.showDefaultPaymentMethodFirst !== false\n  }).then(function (paymentMethods) {\n    return self._getSupportedPaymentMethods(paymentMethods).map(function (paymentMethod) {\n      paymentMethod.vaulted = true;\n\n      return paymentMethod;\n    });\n  }).catch(function () {\n    return Promise.resolve([]);\n  });\n};\n\nDropinModel.prototype._getSupportedPaymentMethods = function (paymentMethods) {\n  var supportedPaymentMethods = this.supportedPaymentOptions.reduce(function (array, key) {\n    var paymentMethodType = paymentMethodTypes[key];\n\n    if (canShowVaultedPaymentMethodType(paymentMethodType)) {\n      array.push(paymentMethodType);\n    }\n\n    return array;\n  }, []);\n\n  return paymentMethods.filter(function (paymentMethod) {\n    return supportedPaymentMethods.indexOf(paymentMethod.type) > -1;\n  });\n};\n\nDropinModel.prototype._getSupportedPaymentOptions = function (options) {\n  var self = this;\n  var paymentOptionPriority = options.merchantConfiguration.paymentOptionPriority || DEFAULT_PAYMENT_OPTION_PRIORITY;\n  var promises;\n\n  if (!(paymentOptionPriority instanceof Array)) {\n    throw new DropinError('paymentOptionPriority must be an array.');\n  }\n\n  // Remove duplicates\n  paymentOptionPriority = paymentOptionPriority.filter(function (item, pos) { return paymentOptionPriority.indexOf(item) === pos; });\n\n  promises = paymentOptionPriority.map(function (paymentOption) {\n    return getPaymentOption(paymentOption, options).then(function (result) {\n      if (!result.success) {\n        self.dependencyStates[result.id] = dependencySetupStates.NOT_ENABLED;\n      }\n\n      return result;\n    });\n  });\n\n  return Promise.all(promises).then(function (result) {\n    result = result.filter(function (item) {\n      return item.success;\n    });\n\n    if (result.length === 0) {\n      return Promise.reject(new DropinError('No valid payment options available.'));\n    }\n\n    return result.map(function (item) { return item.id; });\n  });\n};\n\nfunction getPaymentOption(paymentOption, options) {\n  return isPaymentOptionEnabled(paymentOption, options).then(function (success) {\n    return {\n      success: success,\n      id: paymentOptionIDs[paymentOption]\n    };\n  });\n}\n\nfunction isPaymentOptionEnabled(paymentOption, options) {\n  var SheetView = paymentSheetViews[paymentOptionIDs[paymentOption]];\n\n  if (!SheetView) {\n    return Promise.reject(new DropinError('paymentOptionPriority: Invalid payment option specified.'));\n  }\n\n  return SheetView.isEnabled({\n    client: options.client,\n    merchantConfiguration: options.merchantConfiguration\n  }).catch(function (error) {\n    console.error(SheetView.ID + ' view errored when checking if it was supported.'); // eslint-disable-line no-console\n    console.error(error); // eslint-disable-line no-console\n\n    return Promise.resolve(false);\n  });\n}\n\nfunction canShowVaultedPaymentMethodType(paymentMethodType) {\n  return paymentMethodType && VAULTED_PAYMENT_METHOD_TYPES_THAT_SHOULD_BE_HIDDEN.indexOf(paymentMethodType) === -1;\n}\n\nmodule.exports = DropinModel;\n\n},{\"./constants\":196,\"./lib/analytics\":201,\"./lib/dropin-error\":206,\"./lib/is-guest-checkout\":208,\"./lib/promise\":213,\"./views/payment-options-view\":259,\"./views/payment-sheet-views\":264,\"@braintree/event-emitter\":41,\"braintree-web/vault-manager\":154}],198:[function(require,module,exports){\n'use strict';\n\nvar assign = require('./lib/assign').assign;\nvar analytics = require('./lib/analytics');\nvar classList = require('@braintree/class-list');\nvar constants = require('./constants');\nvar DropinError = require('./lib/dropin-error');\nvar DropinModel = require('./dropin-model');\nvar EventEmitter = require('@braintree/event-emitter');\nvar assets = require('@braintree/asset-loader');\n\nvar MainView = require('./views/main-view');\nvar paymentMethodsViewID = require('./views/payment-methods-view').ID;\nvar paymentOptionIDs = constants.paymentOptionIDs;\nvar translations = require('./translations').translations;\nvar isUtf8 = require('./lib/is-utf-8');\nvar uuid = require('@braintree/uuid');\nvar Promise = require('./lib/promise');\nvar sanitizeHtml = require('./lib/sanitize-html');\nvar DataCollector = require('./lib/data-collector');\nvar ThreeDSecure = require('./lib/three-d-secure');\nvar wrapPrototype = require('@braintree/wrap-promise').wrapPrototype;\n\nvar mainHTML = \"<div class=\\\"braintree-dropin\\\">\\n  <div data-braintree-id=\\\"methods-label\\\" class=\\\"braintree-heading\\\">&nbsp;</div>\\n  <div data-braintree-id=\\\"methods-edit\\\" class=\\\"braintree-hidden braintree-heading\\\" role=\\\"button\\\" tabindex=\\\"0\\\">{{edit}}</div>\\n  <div data-braintree-id=\\\"choose-a-way-to-pay\\\" class=\\\"braintree-heading\\\">{{chooseAWayToPay}}</div>\\n  <div class=\\\"braintree-placeholder\\\">&nbsp;</div>\\n\\n  <div data-braintree-id=\\\"upper-container\\\" class=\\\"braintree-upper-container\\\">\\n    <div data-braintree-id=\\\"loading-container\\\" class=\\\"braintree-loader__container\\\">\\n      <div data-braintree-id=\\\"loading-indicator\\\" class=\\\"braintree-loader__indicator\\\">\\n        <svg width=\\\"14\\\" height=\\\"16\\\" class=\\\"braintree-loader__lock\\\">\\n          <use xlink:href=\\\"#iconLockLoader\\\"></use>\\n        </svg>\\n      </div>\\n    </div>\\n\\n    <div data-braintree-id=\\\"delete-confirmation\\\" class=\\\"braintree-delete-confirmation braintree-sheet\\\">\\n      <div data-braintree-id=\\\"delete-confirmation__message\\\"></div>\\n      <div class=\\\"braintree-delete-confirmation__button-container\\\">\\n        <div tabindex=\\\"0\\\" role=\\\"button\\\" data-braintree-id=\\\"delete-confirmation__no\\\" class=\\\"braintree-delete-confirmation__button\\\">{{deleteCancelButton}}</div>\\n        <div tabindex=\\\"0\\\" role=\\\"button\\\" data-braintree-id=\\\"delete-confirmation__yes\\\" class=\\\"braintree-delete-confirmation__button\\\">{{deleteConfirmationButton}}</div>\\n      </div>\\n    </div>\\n\\n    <div data-braintree-id=\\\"methods\\\" class=\\\"braintree-methods braintree-methods-initial\\\">\\n      <div data-braintree-id=\\\"methods-container\\\"></div>\\n    </div>\\n\\n    <div data-braintree-id=\\\"options\\\" class=\\\"braintree-test-class braintree-options braintree-options-initial\\\">\\n      <div data-braintree-id=\\\"payment-options-container\\\" class=\\\"braintree-options-list\\\"></div>\\n    </div>\\n\\n    <div data-braintree-id=\\\"sheet-container\\\" class=\\\"braintree-sheet__container\\\">\\n      <div data-braintree-id=\\\"paypal\\\" class=\\\"braintree-paypal braintree-sheet\\\">\\n        <div data-braintree-id=\\\"paypal-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg width=\\\"40\\\" height=\\\"24\\\">\\n                <use xlink:href=\\\"#logoPayPal\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{PayPal}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <div data-braintree-id=\\\"paypal-button\\\" class=\\\"braintree-sheet__button--paypal\\\"></div>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"paypalCredit\\\" class=\\\"braintree-paypalCredit braintree-sheet\\\">\\n        <div data-braintree-id=\\\"paypal-credit-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg width=\\\"40\\\" height=\\\"24\\\">\\n                <use xlink:href=\\\"#logoPayPalCredit\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{PayPal Credit}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <div data-braintree-id=\\\"paypal-credit-button\\\" class=\\\"braintree-sheet__button--paypal\\\"></div>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"applePay\\\" class=\\\"braintree-applePay braintree-sheet\\\">\\n        <div data-braintree-id=\\\"apple-pay-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg height=\\\"24\\\" width=\\\"40\\\">\\n              <use xlink:href=\\\"#logoApplePay\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{Apple Pay}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <div data-braintree-id=\\\"apple-pay-button\\\" class=\\\"braintree-sheet__button--apple-pay apple-pay-button\\\"></div>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"googlePay\\\" class=\\\"braintree-googlePay braintree-sheet\\\">\\n        <div data-braintree-id=\\\"google-pay-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg height=\\\"24\\\" width=\\\"40\\\">\\n              <use xlink:href=\\\"#logoGooglePay\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{Google Pay}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <div data-braintree-id=\\\"google-pay-button\\\"></div>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"venmo\\\" class=\\\"braintree-venmo braintree-sheet\\\">\\n        <div data-braintree-id=\\\"venmo-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg height=\\\"24\\\" width=\\\"40\\\">\\n              <use xlink:href=\\\"#logoVenmo\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{Venmo}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <svg data-braintree-id=\\\"venmo-button\\\" class=\\\"braintree-sheet__button--venmo\\\">\\n            <use xlink:href=\\\"#buttonVenmo\\\"></use>\\n          </svg>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"card\\\" class=\\\"braintree-card braintree-form braintree-sheet\\\">\\n        <div data-braintree-id=\\\"card-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg width=\\\"40\\\" height=\\\"24\\\" class=\\\"braintree-icon--bordered\\\">\\n                <use xlink:href=\\\"#iconCardFront\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__text\\\">{{payWithCard}}</div>\\n          </div>\\n          <div data-braintree-id=\\\"card-view-icons\\\" class=\\\"braintree-sheet__icons\\\"></div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--form\\\">\\n          <div data-braintree-id=\\\"cardholder-name-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n            <label for=\\\"braintree__card-view-input__cardholder-name\\\">\\n              <div class=\\\"braintree-form__label\\\">{{cardholderNameLabel}}</div>\\n              <div class=\\\"braintree-form__field\\\">\\n                <div class=\\\"braintree-form-cardholder-name braintree-form__hosted-field\\\"></div>\\n                <div class=\\\"braintree-form__icon-container\\\">\\n                  <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                    <svg width=\\\"24\\\" height=\\\"24\\\">\\n                      <use xlink:href=\\\"#iconError\\\"></use>\\n                    </svg>\\n                  </div>\\n                </div>\\n              </div>\\n            </label>\\n            <div data-braintree-id=\\\"cardholder-name-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n          </div>\\n          <div data-braintree-id=\\\"number-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n            <label>\\n              <div class=\\\"braintree-form__label\\\">{{cardNumberLabel}}</div>\\n              <div class=\\\"braintree-form__field\\\">\\n                <div class=\\\"braintree-form-number braintree-form__hosted-field\\\"></div>\\n                <div class=\\\"braintree-form__icon-container\\\">\\n                  <div data-braintree-id=\\\"card-number-icon\\\" class=\\\"braintree-form__icon braintree-form__field-secondary-icon\\\">\\n                    <svg width=\\\"40\\\" height=\\\"24\\\" class=\\\"braintree-icon--bordered\\\">\\n                    <use data-braintree-id=\\\"card-number-icon-svg\\\" xlink:href=\\\"#iconCardFront\\\"></use>\\n                    </svg>\\n                  </div>\\n                  <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                    <svg width=\\\"24\\\" height=\\\"24\\\">\\n                      <use xlink:href=\\\"#iconError\\\"></use>\\n                    </svg>\\n                  </div>\\n                </div>\\n              </div>\\n            </label>\\n            <div data-braintree-id=\\\"number-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n          </div>\\n\\n          <div class=\\\"braintree-form__flexible-fields\\\">\\n            <div data-braintree-id=\\\"expiration-date-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n              <label>\\n                <div class=\\\"braintree-form__label\\\">{{expirationDateLabel}}\\n                  <span class=\\\"braintree-form__descriptor\\\">{{expirationDateLabelSubheading}}</span>\\n                </div>\\n                <div class=\\\"braintree-form__field\\\">\\n                  <div class=\\\"braintree-form__hosted-field braintree-form-expiration\\\"></div>\\n                  <div class=\\\"braintree-form__icon-container\\\">\\n                    <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                      <svg width=\\\"24\\\" height=\\\"24\\\">\\n                        <use xlink:href=\\\"#iconError\\\"></use>\\n                      </svg>\\n                    </div>\\n                  </div>\\n                </div>\\n              </label>\\n              <div data-braintree-id=\\\"expiration-date-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n            </div>\\n\\n\\n            <div data-braintree-id=\\\"cvv-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n              <label>\\n                <div class=\\\"braintree-form__label\\\">{{cvvLabel}}\\n                  <span data-braintree-id=\\\"cvv-label-descriptor\\\" class=\\\"braintree-form__descriptor\\\">{{cvvThreeDigitLabelSubheading}}</span>\\n                </div>\\n                <div class=\\\"braintree-form__field\\\">\\n                  <div class=\\\"braintree-form__hosted-field braintree-form-cvv\\\"></div>\\n                  <div class=\\\"braintree-form__icon-container\\\">\\n                    <div data-braintree-id=\\\"cvv-icon\\\" class=\\\"braintree-form__icon braintree-form__field-secondary-icon\\\">\\n                      <svg width=\\\"40\\\" height=\\\"24\\\" class=\\\"braintree-icon--bordered\\\">\\n                      <use data-braintree-id=\\\"cvv-icon-svg\\\" xlink:href=\\\"#iconCVVBack\\\"></use>\\n                      </svg>\\n                    </div>\\n                    <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                      <svg width=\\\"24\\\" height=\\\"24\\\">\\n                        <use xlink:href=\\\"#iconError\\\"></use>\\n                      </svg>\\n                    </div>\\n                  </div>\\n                </div>\\n              </label>\\n              <div data-braintree-id=\\\"cvv-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n            </div>\\n\\n            <div data-braintree-id=\\\"postal-code-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n              <label>\\n                <div class=\\\"braintree-form__label\\\">{{postalCodeLabel}}</div>\\n                <div class=\\\"braintree-form__field\\\">\\n                  <div class=\\\"braintree-form__hosted-field braintree-form-postal-code\\\"></div>\\n                  <div class=\\\"braintree-form__icon-container\\\">\\n                    <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                      <svg width=\\\"24\\\" height=\\\"24\\\">\\n                        <use xlink:href=\\\"#iconError\\\"></use>\\n                      </svg>\\n                    </div>\\n                  </div>\\n                </div>\\n              </label>\\n              <div data-braintree-id=\\\"postal-code-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n            </div>\\n          </div>\\n\\n          <div data-braintree-id=\\\"save-card-field-group\\\" class=\\\"braintree-form__field-group braintree-hidden\\\">\\n            <label>\\n              <div class=\\\"braintree-form__field braintree-form__checkbox\\\">\\n                <input type=\\\"checkbox\\\" data-braintree-id=\\\"save-card-input\\\" checked />\\n              </div>\\n              <div class=\\\"braintree-form__label\\\">{{saveCardLabel}}</div>\\n            </label>\\n          </div>\\n        </div>\\n      </div>\\n\\n      <div data-braintree-id=\\\"sheet-error\\\" class=\\\"braintree-sheet__error\\\">\\n        <div class=\\\"braintree-form__icon braintree-sheet__error-icon\\\">\\n          <svg width=\\\"24\\\" height=\\\"24\\\">\\n            <use xlink:href=\\\"#iconError\\\"></use>\\n          </svg>\\n        </div>\\n        <div data-braintree-id=\\\"sheet-error-text\\\" class=\\\"braintree-sheet__error-text\\\"></div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div data-braintree-id=\\\"lower-container\\\" class=\\\"braintree-test-class braintree-options braintree-hidden\\\">\\n    <div data-braintree-id=\\\"other-ways-to-pay\\\" class=\\\"braintree-heading\\\">{{otherWaysToPay}}</div>\\n  </div>\\n\\n  <div data-braintree-id=\\\"toggle\\\" class=\\\"braintree-large-button braintree-toggle braintree-hidden\\\" tabindex=\\\"0\\\" role=\\\"button\\\">\\n    <span>{{chooseAnotherWayToPay}}</span>\\n  </div>\\n</div>\\n<div data-braintree-id=\\\"disable-wrapper\\\" class=\\\"braintree-dropin__disabled braintree-hidden\\\"></div>\\n\";\nvar svgHTML = \"<svg data-braintree-id=\\\"svgs\\\">\\n  <defs>\\n    <symbol id=\\\"icon-visa\\\" viewBox=\\\"0 0 44 14.2\\\">\\n      <title>Visa</title>\\n      <path fill=\\\"#1434CB\\\" d=\\\"M16.8,0.2L11,13.9H7.3L4.5,3C4.3,2.3,4.2,2.1,3.6,1.8C2.8,1.3,1.4,0.9,0.1,0.6l0.1-0.4h6   c0.8,0,1.5,0.5,1.6,1.4l1.5,7.9L13,0.2H16.8z M31.4,9.4c0-3.6-5-3.8-5-5.4c0-0.5,0.5-1,1.5-1.1c0.5-0.1,1.9-0.1,3.5,0.6L32,0.6   C31.2,0.3,30.1,0,28.7,0c-3.5,0-6,1.9-6,4.5c0,2,1.8,3.1,3.1,3.7c1.4,0.7,1.8,1.1,1.8,1.7c0,0.9-1.1,1.3-2.1,1.3   c-1.8,0-2.8-0.5-3.6-0.9l-0.6,3c0.8,0.4,2.3,0.7,3.9,0.7C28.9,14.1,31.4,12.3,31.4,9.4 M40.6,13.9h3.3L41,0.2h-3   c-0.7,0-1.3,0.4-1.5,1l-5.3,12.7h3.7l0.7-2h4.5L40.6,13.9z M36.7,9.1l1.9-5.1l1.1,5.1H36.7z M21.8,0.2l-2.9,13.7h-3.5l2.9-13.7   H21.8z\\\"/>\\n    </symbol>\\n\\n    <symbol id=\\\"icon-master-card\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>MasterCard</title>\\n      <path d=\\\"M0 1.927C0 .863.892 0 1.992 0h36.016C39.108 0 40 .863 40 1.927v20.146C40 23.137 39.108 24 38.008 24H1.992C.892 24 0 23.137 0 22.073V1.927z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M11.085 22.2v-1.36c0-.522-.318-.863-.864-.863-.272 0-.568.09-.773.386-.16-.25-.386-.386-.727-.386-.228 0-.455.068-.637.318v-.272h-.478V22.2h.478v-1.202c0-.386.204-.567.523-.567.318 0 .478.205.478.568V22.2h.477v-1.202c0-.386.23-.567.524-.567.32 0 .478.205.478.568V22.2h.523zm7.075-2.177h-.774v-.658h-.478v.658h-.432v.43h.432v.998c0 .5.205.795.75.795.206 0 .433-.068.592-.16l-.136-.407c-.136.09-.296.114-.41.114-.227 0-.318-.137-.318-.363v-.976h.774v-.43zm4.048-.046c-.273 0-.454.136-.568.318v-.272h-.478V22.2h.478v-1.225c0-.363.16-.567.455-.567.09 0 .204.023.295.046l.137-.454c-.09-.023-.228-.023-.32-.023zm-6.118.227c-.228-.16-.546-.227-.888-.227-.546 0-.91.272-.91.703 0 .363.274.567.75.635l.23.023c.25.045.385.113.385.227 0 .16-.182.272-.5.272-.32 0-.57-.113-.728-.227l-.228.363c.25.18.59.272.932.272.637 0 1-.295 1-.703 0-.385-.295-.59-.75-.658l-.227-.022c-.205-.023-.364-.068-.364-.204 0-.16.16-.25.41-.25.272 0 .545.114.682.182l.205-.386zm12.692-.227c-.273 0-.455.136-.568.318v-.272h-.478V22.2h.478v-1.225c0-.363.16-.567.455-.567.09 0 .203.023.294.046L29.1 20c-.09-.023-.227-.023-.318-.023zm-6.096 1.134c0 .66.455 1.135 1.16 1.135.32 0 .546-.068.774-.25l-.228-.385c-.182.136-.364.204-.57.204-.385 0-.658-.272-.658-.703 0-.407.273-.68.66-.702.204 0 .386.068.568.204l.228-.385c-.228-.182-.455-.25-.774-.25-.705 0-1.16.477-1.16 1.134zm4.413 0v-1.087h-.48v.272c-.158-.204-.385-.318-.68-.318-.615 0-1.093.477-1.093 1.134 0 .66.478 1.135 1.092 1.135.317 0 .545-.113.68-.317v.272h.48v-1.09zm-1.753 0c0-.384.25-.702.66-.702.387 0 .66.295.66.703 0 .387-.273.704-.66.704-.41-.022-.66-.317-.66-.703zm-5.71-1.133c-.636 0-1.09.454-1.09 1.134 0 .682.454 1.135 1.114 1.135.32 0 .638-.09.888-.295l-.228-.34c-.18.136-.41.227-.636.227-.296 0-.592-.136-.66-.522h1.615v-.18c.022-.704-.388-1.158-1.002-1.158zm0 .41c.297 0 .502.18.547.52h-1.137c.045-.295.25-.52.59-.52zm11.852.724v-1.95h-.48v1.135c-.158-.204-.385-.318-.68-.318-.615 0-1.093.477-1.093 1.134 0 .66.478 1.135 1.092 1.135.318 0 .545-.113.68-.317v.272h.48v-1.09zm-1.752 0c0-.384.25-.702.66-.702.386 0 .66.295.66.703 0 .387-.274.704-.66.704-.41-.022-.66-.317-.66-.703zm-15.97 0v-1.087h-.476v.272c-.16-.204-.387-.318-.683-.318-.615 0-1.093.477-1.093 1.134 0 .66.478 1.135 1.092 1.135.318 0 .545-.113.682-.317v.272h.477v-1.09zm-1.773 0c0-.384.25-.702.66-.702.386 0 .66.295.66.703 0 .387-.274.704-.66.704-.41-.022-.66-.317-.66-.703z\\\" fill=\\\"#000\\\" />\\n      <path fill=\\\"#FF5F00\\\" d=\\\"M23.095 3.49H15.93v12.836h7.165\\\" />\\n      <path d=\\\"M16.382 9.91c0-2.61 1.23-4.922 3.117-6.42-1.39-1.087-3.14-1.745-5.05-1.745-4.528 0-8.19 3.65-8.19 8.164 0 4.51 3.662 8.162 8.19 8.162 1.91 0 3.66-.657 5.05-1.746-1.89-1.474-3.118-3.81-3.118-6.417z\\\" fill=\\\"#EB001B\\\" />\\n      <path d=\\\"M32.76 9.91c0 4.51-3.664 8.162-8.19 8.162-1.91 0-3.662-.657-5.05-1.746 1.91-1.496 3.116-3.81 3.116-6.417 0-2.61-1.228-4.922-3.116-6.42 1.388-1.087 3.14-1.745 5.05-1.745 4.526 0 8.19 3.674 8.19 8.164z\\\" fill=\\\"#F79E1B\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-unionpay\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>Union Pay</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M9.877 2h8.126c1.135 0 1.84.93 1.575 2.077l-3.783 16.35c-.267 1.142-1.403 2.073-2.538 2.073H5.13c-1.134 0-1.84-.93-1.574-2.073L7.34 4.076C7.607 2.93 8.74 2 9.878 2z\\\" fill=\\\"#E21836\\\" />\\n      <path d=\\\"M17.325 2h9.345c1.134 0 .623.93.356 2.077l-3.783 16.35c-.265 1.142-.182 2.073-1.32 2.073H12.58c-1.137 0-1.84-.93-1.574-2.073l3.783-16.35C15.056 2.93 16.19 2 17.324 2z\\\" fill=\\\"#00447B\\\" />\\n      <path d=\\\"M26.3 2h8.126c1.136 0 1.84.93 1.575 2.077l-3.782 16.35c-.266 1.142-1.402 2.073-2.54 2.073h-8.122c-1.137 0-1.842-.93-1.574-2.073l3.78-16.35C24.03 2.93 25.166 2 26.303 2z\\\" fill=\\\"#007B84\\\" />\\n      <path d=\\\"M27.633 14.072l-.99 3.3h.266l-.208.68h-.266l-.062.212h-.942l.064-.21H23.58l.193-.632h.194l1.005-3.35.2-.676h.962l-.1.34s.255-.184.498-.248c.242-.064 1.636-.088 1.636-.088l-.206.672h-.33zm-1.695 0l-.254.843s.285-.13.44-.172c.16-.04.395-.057.395-.057l.182-.614h-.764zm-.38 1.262l-.263.877s.29-.15.447-.196c.157-.037.396-.066.396-.066l.185-.614h-.766zm-.614 2.046h.767l.222-.74h-.765l-.223.74z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path d=\\\"M28.055 13.4h1.027l.01.385c-.005.065.05.096.17.096h.208l-.19.637h-.555c-.48.035-.662-.172-.65-.406l-.02-.71zM28.193 16.415h-.978l.167-.566H28.5l.16-.517h-1.104l.19-.638h3.072l-.193.638h-1.03l-.16.516h1.032l-.17.565H29.18l-.2.24h.454l.11.712c.013.07.014.116.036.147.023.026.158.038.238.038h.137l-.21.694h-.348c-.054 0-.133-.004-.243-.01-.105-.008-.18-.07-.25-.105-.064-.03-.16-.11-.182-.24l-.11-.712-.507.7c-.162.222-.38.39-.748.39h-.712l.186-.62h.273c.078 0 .15-.03.2-.056.052-.023.098-.05.15-.126l.74-1.05zM17.478 14.867h2.59l-.19.622H18.84l-.16.53h1.06l-.194.64h-1.06l-.256.863c-.03.095.25.108.353.108l.53-.072-.212.71h-1.193c-.096 0-.168-.013-.272-.037-.1-.023-.145-.07-.19-.138-.043-.07-.11-.128-.064-.278l.343-1.143h-.588l.195-.65h.592l.156-.53h-.588l.188-.623zM19.223 13.75h1.063l-.194.65H18.64l-.157.136c-.067.066-.09.038-.18.087-.08.04-.254.123-.477.123h-.466l.19-.625h.14c.118 0 .198-.01.238-.036.046-.03.098-.096.157-.203l.267-.487h1.057l-.187.356zM20.74 13.4h.905l-.132.46s.286-.23.487-.313c.2-.075.65-.143.65-.143l1.464-.007-.498 1.672c-.085.286-.183.472-.244.555-.055.087-.12.16-.248.23-.124.066-.236.104-.34.115-.096.007-.244.01-.45.012h-1.41l-.4 1.324c-.037.13-.055.194-.03.23.02.03.068.066.135.066l.62-.06-.21.726h-.698c-.22 0-.383-.004-.495-.013-.108-.01-.22 0-.295-.058-.065-.058-.164-.133-.162-.21.007-.073.037-.192.082-.356l1.268-4.23zm1.922 1.69h-1.484l-.09.3h1.283c.152-.018.184.004.196-.003l.096-.297zm-1.402-.272s.29-.266.786-.353c.112-.022.82-.015.82-.015l.106-.357h-1.496l-.216.725z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path d=\\\"M23.382 16.1l-.084.402c-.036.125-.067.22-.16.302-.1.084-.216.172-.488.172l-.502.02-.004.455c-.006.13.028.117.048.138.024.022.045.032.067.04l.157-.008.48-.028-.198.663h-.552c-.385 0-.67-.008-.765-.084-.092-.057-.105-.132-.103-.26l.035-1.77h.88l-.013.362h.212c.072 0 .12-.007.15-.026.027-.02.047-.048.06-.093l.087-.282h.692zM10.84 7.222c-.032.143-.596 2.763-.598 2.764-.12.53-.21.91-.508 1.152-.172.14-.37.21-.6.21-.37 0-.587-.185-.624-.537l-.007-.12.113-.712s.593-2.388.7-2.703c.002-.017.005-.026.007-.035-1.152.01-1.357 0-1.37-.018-.007.024-.037.173-.037.173l-.605 2.688-.05.23-.1.746c0 .22.042.4.13.553.275.485 1.06.557 1.504.557.573 0 1.11-.123 1.47-.345.63-.375.797-.962.944-1.48l.067-.267s.61-2.48.716-2.803c.003-.017.006-.026.01-.035-.835.01-1.08 0-1.16-.018zM14.21 12.144c-.407-.006-.55-.006-1.03.018l-.018-.036c.042-.182.087-.363.127-.548l.06-.25c.086-.39.173-.843.184-.98.007-.084.036-.29-.2-.29-.1 0-.203.048-.307.096-.058.207-.174.79-.23 1.055-.118.558-.126.62-.178.897l-.036.037c-.42-.006-.566-.006-1.05.018l-.024-.04c.08-.332.162-.668.24-.998.203-.9.25-1.245.307-1.702l.04-.028c.47-.067.585-.08 1.097-.185l.043.047-.077.287c.086-.052.168-.104.257-.15.242-.12.51-.155.658-.155.223 0 .468.062.57.323.098.232.034.52-.094 1.084l-.066.287c-.13.627-.152.743-.225 1.174l-.05.036zM15.87 12.144c-.245 0-.405-.006-.56 0-.153 0-.303.008-.532.018l-.013-.02-.015-.02c.062-.238.097-.322.128-.406.03-.084.06-.17.115-.41.072-.315.116-.535.147-.728.033-.187.052-.346.075-.53l.02-.014.02-.018c.244-.036.4-.057.56-.082.16-.024.32-.055.574-.103l.008.023.008.022c-.047.195-.094.39-.14.588-.047.197-.094.392-.137.587-.093.414-.13.57-.152.68-.02.105-.026.163-.063.377l-.022.02-.023.017zM19.542 10.728c.143-.633.033-.928-.108-1.11-.213-.273-.59-.36-.978-.36-.235 0-.793.023-1.23.43-.312.29-.458.687-.546 1.066-.088.387-.19 1.086.447 1.344.198.085.48.108.662.108.466 0 .945-.13 1.304-.513.278-.312.405-.775.448-.965zm-1.07-.046c-.02.106-.113.503-.24.673-.086.123-.19.198-.305.198-.033 0-.235 0-.238-.3-.003-.15.027-.304.063-.47.108-.478.236-.88.56-.88.255 0 .27.298.16.78zM29.536 12.187c-.493-.004-.635-.004-1.09.015l-.03-.037c.124-.472.248-.943.358-1.42.142-.62.175-.882.223-1.244l.037-.03c.49-.07.625-.09 1.135-.186l.015.044c-.093.388-.186.777-.275 1.166-.19.816-.258 1.23-.33 1.658l-.044.035z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path d=\\\"M29.77 10.784c.144-.63-.432-.056-.525-.264-.14-.323-.052-.98-.62-1.2-.22-.085-.732.025-1.17.428-.31.29-.458.683-.544 1.062-.088.38-.19 1.078.444 1.328.2.085.384.11.567.103.638-.034 1.124-1.002 1.483-1.386.277-.303.326.115.368-.07zm-.974-.047c-.024.1-.117.503-.244.67-.083.117-.283.192-.397.192-.032 0-.232 0-.24-.3 0-.146.03-.3.067-.467.11-.47.235-.87.56-.87.254 0 .363.293.254.774zM22.332 12.144c-.41-.006-.55-.006-1.03.018l-.018-.036c.04-.182.087-.363.13-.548l.057-.25c.09-.39.176-.843.186-.98.008-.084.036-.29-.198-.29-.1 0-.203.048-.308.096-.057.207-.175.79-.232 1.055-.115.558-.124.62-.176.897l-.035.037c-.42-.006-.566-.006-1.05.018l-.022-.04.238-.998c.203-.9.25-1.245.307-1.702l.038-.028c.472-.067.587-.08 1.098-.185l.04.047-.073.287c.084-.052.17-.104.257-.15.24-.12.51-.155.655-.155.224 0 .47.062.575.323.095.232.03.52-.098 1.084l-.065.287c-.133.627-.154.743-.225 1.174l-.05.036zM26.32 8.756c-.07.326-.282.603-.554.736-.225.114-.498.123-.78.123h-.183l.013-.074.336-1.468.01-.076.007-.058.132.015.71.062c.275.105.388.38.31.74zM25.88 7.22l-.34.003c-.883.01-1.238.006-1.383-.012l-.037.182-.315 1.478-.793 3.288c.77-.01 1.088-.01 1.22.004l.21-1.024s.153-.644.163-.667c0 0 .047-.066.096-.092h.07c.665 0 1.417 0 2.005-.437.4-.298.675-.74.797-1.274.03-.132.054-.29.054-.446 0-.205-.04-.41-.16-.568-.3-.423-.896-.43-1.588-.433zM33.572 9.28l-.04-.043c-.502.1-.594.118-1.058.18l-.034.034-.005.023-.003-.007c-.345.803-.334.63-.615 1.26-.003-.03-.003-.048-.004-.077l-.07-1.37-.044-.043c-.53.1-.542.118-1.03.18l-.04.034-.006.056.003.007c.06.315.047.244.108.738.03.244.065.49.093.73.05.4.077.6.134 1.21-.328.55-.408.757-.722 1.238l.017.044c.478-.018.587-.018.94-.018l.08-.088c.265-.578 2.295-4.085 2.295-4.085zM16.318 9.62c.27-.19.304-.45.076-.586-.23-.137-.634-.094-.906.095-.273.186-.304.45-.075.586.228.134.633.094.905-.096z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path d=\\\"M31.238 13.415l-.397.684c-.124.232-.357.407-.728.41l-.632-.01.184-.618h.124c.064 0 .11-.004.148-.022.03-.01.054-.035.08-.072l.233-.373h.988z\\\" fill=\\\"#FEFEFE\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-american-express\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>American Express</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path fill=\\\"#1478BE\\\" d=\\\"M6.26 12.32h2.313L7.415 9.66M27.353 9.977h-3.738v1.23h3.666v1.384h-3.675v1.385h3.821v1.005c.623-.77 1.33-1.466 2.025-2.235l.707-.77c-.934-1.004-1.87-2.08-2.804-3.075v1.077z\\\" />\\n      <path d=\\\"M38.25 7h-5.605l-1.328 1.4L30.072 7H16.984l-1.017 2.416L14.877 7h-9.58L1.25 16.5h4.826l.623-1.556h1.4l.623 1.556H29.99l1.327-1.483 1.328 1.483h5.605l-4.36-4.667L38.25 7zm-17.685 8.1h-1.557V9.883L16.673 15.1h-1.33L13.01 9.883l-.084 5.217H9.73l-.623-1.556h-3.27L5.132 15.1H3.42l2.884-6.772h2.42l2.645 6.233V8.33h2.646l2.107 4.51 1.868-4.51h2.575V15.1zm14.727 0h-2.024l-2.024-2.26-2.023 2.26H22.06V8.328H29.53l1.795 2.177 2.024-2.177h2.025L32.26 11.75l3.032 3.35z\\\" fill=\\\"#1478BE\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-jcb\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>JCB</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M33.273 2.01h.013v17.062c-.004 1.078-.513 2.103-1.372 2.746-.63.47-1.366.67-2.14.67-.437 0-4.833.026-4.855 0-.01-.01 0-.07 0-.082v-6.82c0-.04.004-.064.033-.064h5.253c.867 0 1.344-.257 1.692-.61.44-.448.574-1.162.294-1.732-.24-.488-.736-.78-1.244-.913-.158-.04-.32-.068-.483-.083-.01 0-.064 0-.07-.006-.03-.034.023-.04.038-.046.102-.033.215-.042.32-.073.532-.164.993-.547 1.137-1.105.15-.577-.05-1.194-.524-1.552-.34-.257-.768-.376-1.187-.413-.43-.038-4.774-.022-5.21-.022-.072 0-.05-.02-.05-.09V5.63c0-.31.01-.616.073-.92.126-.592.41-1.144.815-1.59.558-.615 1.337-1.01 2.16-1.093.478-.048 4.89-.017 5.305-.017zm-4.06 8.616c.06.272-.01.567-.204.77-.173.176-.407.25-.648.253-.195.003-1.725 0-1.788 0l.003-1.645c.012-.027.02-.018.06-.018.097 0 1.713-.004 1.823.005.232.02.45.12.598.306.076.096.128.208.155.328zm-2.636 2.038h1.944c.242.002.47.063.652.228.226.204.327.515.283.815-.04.263-.194.5-.422.634-.187.112-.39.125-.6.125h-1.857v-1.8z\\\" fill=\\\"#53B230\\\" />\\n      <path d=\\\"M6.574 13.89c-.06-.03-.06-.018-.07-.06-.006-.026-.005-8.365.003-8.558.04-.95.487-1.857 1.21-2.47.517-.434 1.16-.71 1.83-.778.396-.04.803-.018 1.2-.018.69 0 4.11-.013 4.12 0 .008.008.002 16.758 0 17.074-.003.956-.403 1.878-1.105 2.523-.506.465-1.15.77-1.83.86-.41.056-5.02.032-5.363.032-.066 0-.054.013-.066-.024-.01-.025 0-7 0-7.17.66.178 1.35.28 2.03.348.662.067 1.33.093 1.993.062.93-.044 1.947-.192 2.712-.762.32-.238.574-.553.73-.922.148-.353.2-.736.2-1.117 0-.348.006-3.93-.016-3.942-.023-.014-2.885-.015-2.9.012-.012.022 0 3.87 0 3.95-.003.47-.16.933-.514 1.252-.468.42-1.11.47-1.707.423-.687-.055-1.357-.245-1.993-.508-.157-.065-.312-.135-.466-.208z\\\" fill=\\\"#006CB9\\\" />\\n      <path d=\\\"M15.95 9.835c-.025.02-.05.04-.072.06V6.05c0-.295-.012-.594.01-.888.12-1.593 1.373-2.923 2.944-3.126.382-.05 5.397-.042 5.41-.026.01.01 0 .062 0 .074v16.957c0 1.304-.725 2.52-1.89 3.1-.504.25-1.045.35-1.605.35-.322 0-4.757.015-4.834 0-.05-.01-.023.01-.035-.02-.007-.022 0-6.548 0-7.44v-.422c.554.48 1.256.75 1.96.908.536.12 1.084.176 1.63.196.537.02 1.076.01 1.61-.037.546-.05 1.088-.136 1.625-.244.137-.028.274-.057.41-.09.033-.006.17-.017.187-.044.013-.02 0-.097 0-.12v-1.324c-.582.292-1.19.525-1.83.652-.778.155-1.64.198-2.385-.123-.752-.326-1.2-1.024-1.274-1.837-.076-.837.173-1.716.883-2.212.736-.513 1.7-.517 2.553-.38.634.1 1.245.305 1.825.58.078.037.154.075.23.113V9.322c0-.02.013-.1 0-.118-.02-.028-.152-.038-.188-.046-.066-.016-.133-.03-.2-.045C22.38 9 21.84 8.908 21.3 8.85c-.533-.06-1.068-.077-1.603-.066-.542.01-1.086.054-1.62.154-.662.125-1.32.337-1.883.716-.085.056-.167.117-.245.18z\\\" fill=\\\"#E20138\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-discover\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>Discover</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M38.995 11.75S27.522 20.1 6.5 23.5h31.495c.552 0 1-.448 1-1V11.75z\\\" fill=\\\"#F48024\\\" />\\n      <path d=\\\"M5.332 11.758c-.338.305-.776.438-1.47.438h-.29V8.55h.29c.694 0 1.115.124 1.47.446.37.33.595.844.595 1.372 0 .53-.224 1.06-.595 1.39zM4.077 7.615H2.5v5.515h1.57c.833 0 1.435-.197 1.963-.637.63-.52 1-1.305 1-2.116 0-1.628-1.214-2.762-2.956-2.762zM7.53 13.13h1.074V7.616H7.53M11.227 9.732c-.645-.24-.834-.397-.834-.695 0-.347.338-.61.8-.61.322 0 .587.132.867.446l.562-.737c-.462-.405-1.015-.612-1.618-.612-.975 0-1.718.678-1.718 1.58 0 .76.346 1.15 1.355 1.513.42.148.635.247.743.314.215.14.322.34.322.57 0 .448-.354.78-.834.78-.51 0-.924-.258-1.17-.736l-.695.67c.495.726 1.09 1.05 1.907 1.05 1.116 0 1.9-.745 1.9-1.812 0-.876-.363-1.273-1.585-1.72zM13.15 10.377c0 1.62 1.27 2.877 2.907 2.877.462 0 .858-.09 1.347-.32v-1.267c-.43.43-.81.604-1.297.604-1.082 0-1.85-.785-1.85-1.9 0-1.06.792-1.895 1.8-1.895.512 0 .9.183 1.347.62V7.83c-.472-.24-.86-.34-1.322-.34-1.627 0-2.932 1.283-2.932 2.887zM25.922 11.32l-1.468-3.705H23.28l2.337 5.656h.578l2.38-5.655H27.41M29.06 13.13h3.046v-.934h-1.973v-1.488h1.9v-.934h-1.9V8.55h1.973v-.935H29.06M34.207 10.154h-.314v-1.67h.33c.67 0 1.034.28 1.034.818 0 .554-.364.852-1.05.852zm2.155-.91c0-1.033-.71-1.628-1.95-1.628H32.82v5.514h1.073v-2.215h.14l1.487 2.215h1.32l-1.733-2.323c.81-.165 1.255-.72 1.255-1.563z\\\" fill=\\\"#221F20\\\" />\\n      <path d=\\\"M23.6 10.377c0 1.62-1.31 2.93-2.927 2.93-1.617.002-2.928-1.31-2.928-2.93s1.31-2.932 2.928-2.932c1.618 0 2.928 1.312 2.928 2.932z\\\" fill=\\\"#F48024\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-diners-club\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>Diners Club</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M9.02 11.83c0-5.456 4.54-9.88 10.14-9.88 5.6 0 10.139 4.424 10.139 9.88-.002 5.456-4.54 9.88-10.14 9.88-5.6 0-10.14-4.424-10.14-9.88z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path fill=\\\"#FFF\\\" d=\\\"M32.522 22H8.5V1.5h24.022\\\" />\\n      <path d=\\\"M25.02 11.732c-.003-2.534-1.607-4.695-3.868-5.55v11.102c2.26-.857 3.865-3.017 3.87-5.552zm-8.182 5.55V6.18c-2.26.86-3.86 3.017-3.867 5.55.007 2.533 1.61 4.69 3.868 5.55zm2.158-14.934c-5.25.002-9.503 4.202-9.504 9.384 0 5.182 4.254 9.38 9.504 9.382 5.25 0 9.504-4.2 9.505-9.382 0-5.182-4.254-9.382-9.504-9.384zM18.973 22C13.228 22.027 8.5 17.432 8.5 11.84 8.5 5.726 13.228 1.5 18.973 1.5h2.692c5.677 0 10.857 4.225 10.857 10.34 0 5.59-5.18 10.16-10.857 10.16h-2.692z\\\" fill=\\\"#004A97\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-maestro\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>Maestro</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M14.67 22.39V21c.022-.465-.303-.86-.767-.882h-.116c-.3-.023-.603.14-.788.394-.164-.255-.442-.417-.743-.394-.256-.023-.51.116-.65.324v-.278h-.487v2.203h.487v-1.183c-.046-.278.162-.533.44-.58h.094c.325 0 .488.21.488.58v1.23h.487v-1.23c-.047-.278.162-.556.44-.58h.093c.325 0 .487.21.487.58v1.23l.534-.024zm2.712-1.09v-1.113h-.487v.28c-.162-.21-.417-.326-.695-.326-.65 0-1.16.51-1.16 1.16 0 .65.51 1.16 1.16 1.16.278 0 .533-.117.695-.325v.278h.487V21.3zm-1.786 0c.024-.37.348-.65.72-.626.37.023.65.348.626.72-.023.347-.302.625-.673.625-.372 0-.674-.28-.674-.65-.023-.047-.023-.047 0-.07zm12.085-1.16c.163 0 .325.024.465.094.14.046.278.14.37.255.117.115.186.23.256.37.117.3.117.626 0 .927-.046.14-.138.255-.254.37-.116.117-.232.186-.37.256-.303.116-.65.116-.952 0-.14-.046-.28-.14-.37-.255-.118-.116-.187-.232-.257-.37-.116-.302-.116-.627 0-.928.047-.14.14-.255.256-.37.115-.117.23-.187.37-.256.163-.07.325-.116.488-.093zm0 .465c-.092 0-.185.023-.278.046-.092.024-.162.094-.232.14-.07.07-.116.14-.14.232-.068.185-.068.394 0 .58.024.092.094.162.14.23.07.07.14.117.232.14.186.07.37.07.557 0 .092-.023.16-.092.23-.14.07-.068.117-.138.14-.23.07-.186.07-.395 0-.58-.023-.093-.093-.162-.14-.232-.07-.07-.138-.116-.23-.14-.094-.045-.187-.07-.28-.045zm-7.677.695c0-.695-.44-1.16-1.043-1.16-.65 0-1.16.534-1.137 1.183.023.65.534 1.16 1.183 1.136.325 0 .65-.093.905-.302l-.23-.348c-.187.14-.42.232-.65.232-.326.023-.627-.21-.673-.533h1.646v-.21zm-1.646-.21c.023-.3.278-.532.58-.532.3 0 .556.232.556.533h-1.136zm3.664-.346c-.207-.116-.44-.186-.695-.186-.255 0-.417.093-.417.255 0 .163.162.186.37.21l.233.022c.488.07.766.278.766.672 0 .395-.37.72-1.02.72-.348 0-.673-.094-.95-.28l.23-.37c.21.162.465.232.743.232.324 0 .51-.094.51-.28 0-.115-.117-.185-.395-.23l-.232-.024c-.487-.07-.765-.302-.765-.65 0-.44.37-.718.927-.718.325 0 .627.07.905.232l-.21.394zm2.32-.116h-.788v.997c0 .23.07.37.325.37.14 0 .3-.046.417-.115l.14.417c-.186.116-.395.162-.604.162-.58 0-.765-.302-.765-.812v-1.02h-.44v-.44h.44v-.673h.487v.672h.79v.44zm1.67-.51c.117 0 .233.023.35.07l-.14.463c-.093-.045-.21-.045-.302-.045-.325 0-.464.208-.464.58v1.25h-.487v-2.2h.487v.277c.116-.255.325-.37.557-.394z\\\" fill=\\\"#000\\\" />\\n      <path fill=\\\"#7673C0\\\" d=\\\"M23.64 3.287h-7.305V16.41h7.306\\\" />\\n      <path d=\\\"M16.8 9.848c0-2.55 1.183-4.985 3.2-6.56C16.384.435 11.12 1.06 8.29 4.7 5.435 8.32 6.06 13.58 9.703 16.41c3.038 2.387 7.283 2.387 10.32 0-2.04-1.578-3.223-3.99-3.223-6.562z\\\" fill=\\\"#EB001B\\\" />\\n      <path d=\\\"M33.5 9.848c0 4.613-3.735 8.346-8.35 8.346-1.88 0-3.69-.626-5.15-1.785 3.618-2.83 4.245-8.092 1.415-11.71-.418-.532-.882-.996-1.415-1.413C23.618.437 28.883 1.06 31.736 4.7 32.873 6.163 33.5 7.994 33.5 9.85z\\\" fill=\\\"#00A1DF\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-elo\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>Elo</title>\\n      <path d=\\\"M46.177 29H1.823C.9 29 0 28.13 0 27.187V1.813C0 .87.9 0 1.823 0h44.354C47.1 0 48 .87 48 1.813v25.375C48 28.13 47.1 29 46.177 29z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M4.8 9.14c0-.427.57-.973 1.067-.973h7.466c.496 0 1.067.546 1.067.972v3.888c0 .425-.57.972-1.067.972H5.867c-.496 0-1.067-.547-1.067-.972v-3.89z\\\" fill=\\\"#828282\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"10.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"4.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <path d=\\\"M6.55 16.333h34.9c.966 0 1.75.784 1.75 1.75 0 .967-.784 1.75-1.75 1.75H6.55c-.966 0-1.75-.783-1.75-1.75 0-.966.784-1.75 1.75-1.75z\\\" fill=\\\"#828282\\\" />\\n      <ellipse fill=\\\"#828282\\\" cx=\\\"40.2\\\" cy=\\\"6.417\\\" rx=\\\"3\\\" ry=\\\"2.917\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-hiper\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>Hiper</title>\\n      <path d=\\\"M46.177 29H1.823C.9 29 0 28.13 0 27.187V1.813C0 .87.9 0 1.823 0h44.354C47.1 0 48 .87 48 1.813v25.375C48 28.13 47.1 29 46.177 29z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M4.8 9.14c0-.427.57-.973 1.067-.973h7.466c.496 0 1.067.546 1.067.972v3.888c0 .425-.57.972-1.067.972H5.867c-.496 0-1.067-.547-1.067-.972v-3.89z\\\" fill=\\\"#828282\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"10.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"4.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <path d=\\\"M6.55 16.333h34.9c.966 0 1.75.784 1.75 1.75 0 .967-.784 1.75-1.75 1.75H6.55c-.966 0-1.75-.783-1.75-1.75 0-.966.784-1.75 1.75-1.75z\\\" fill=\\\"#828282\\\" />\\n      <ellipse fill=\\\"#828282\\\" cx=\\\"40.2\\\" cy=\\\"6.417\\\" rx=\\\"3\\\" ry=\\\"2.917\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-hipercard\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>Hipercard</title>\\n      <path d=\\\"M46.177 29H1.823C.9 29 0 28.13 0 27.187V1.813C0 .87.9 0 1.823 0h44.354C47.1 0 48 .87 48 1.813v25.375C48 28.13 47.1 29 46.177 29z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M4.8 9.14c0-.427.57-.973 1.067-.973h7.466c.496 0 1.067.546 1.067.972v3.888c0 .425-.57.972-1.067.972H5.867c-.496 0-1.067-.547-1.067-.972v-3.89z\\\" fill=\\\"#828282\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"10.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"4.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <path d=\\\"M6.55 16.333h34.9c.966 0 1.75.784 1.75 1.75 0 .967-.784 1.75-1.75 1.75H6.55c-.966 0-1.75-.783-1.75-1.75 0-.966.784-1.75 1.75-1.75z\\\" fill=\\\"#828282\\\" />\\n      <ellipse fill=\\\"#828282\\\" cx=\\\"40.2\\\" cy=\\\"6.417\\\" rx=\\\"3\\\" ry=\\\"2.917\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"logoPayPal\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>PayPal Logo</title>\\n      <path d=\\\"M46 29H2c-1.1 0-2-.87-2-1.932V1.934C0 .87.9 0 2 0h44c1.1 0 2 .87 2 1.934v25.134C48 28.13 47.1 29 46 29z\\\" fill-opacity=\\\"0\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M31.216 16.4c.394-.7.69-1.5.886-2.4.196-.8.196-1.6.1-2.2-.1-.7-.396-1.2-.79-1.7-.195-.3-.59-.5-.885-.7.1-.8.1-1.5 0-2.1-.1-.6-.394-1.1-.886-1.6-.885-1-2.56-1.6-4.922-1.6h-6.4c-.492 0-.787.3-.886.8l-2.658 17.2c0 .2 0 .3.1.4.097.1.294.2.393.2h4.036l-.295 1.8c0 .1 0 .3.1.4.098.1.195.2.393.2h3.35c.393 0 .688-.3.786-.7v-.2l.59-4.1v-.2c.1-.4.395-.7.788-.7h.59c1.675 0 3.152-.4 4.137-1.1.59-.5 1.083-1 1.478-1.7h-.002z\\\" fill=\\\"#263B80\\\" />\\n      <path d=\\\"M21.364 9.4c0-.3.196-.5.492-.6.098-.1.196-.1.394-.1h5.02c.592 0 1.183 0 1.675.1.1 0 .295.1.394.1.098 0 .294.1.393.1.1 0 .1 0 .197.102.295.1.492.2.69.3.295-1.6 0-2.7-.887-3.8-.985-1.1-2.658-1.6-4.923-1.6h-6.4c-.49 0-.885.3-.885.8l-2.758 17.3c-.098.3.197.6.59.6h3.94l.985-6.4 1.083-6.9z\\\" fill=\\\"#263B80\\\" />\\n      <path d=\\\"M30.523 9.4c0 .1 0 .3-.098.4-.887 4.4-3.742 5.9-7.484 5.9h-1.87c-.492 0-.787.3-.886.8l-.985 6.2-.296 1.8c0 .3.196.6.492.6h3.348c.394 0 .69-.3.787-.7v-.2l.592-4.1v-.2c.1-.4.394-.7.787-.7h.69c3.248 0 5.808-1.3 6.497-5.2.296-1.6.197-3-.69-3.9-.196-.3-.49-.5-.885-.7z\\\" fill=\\\"#159BD7\\\" />\\n      <path d=\\\"M29.635 9c-.098 0-.295-.1-.394-.1-.098 0-.294-.1-.393-.1-.492-.102-1.083-.102-1.673-.102h-5.022c-.1 0-.197 0-.394.1-.198.1-.394.3-.492.6l-1.083 6.9v.2c.1-.5.492-.8.886-.8h1.87c3.742 0 6.598-1.5 7.484-5.9 0-.1 0-.3.098-.4-.196-.1-.492-.2-.69-.3 0-.1-.098-.1-.196-.1z\\\" fill=\\\"#232C65\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"logoPayPalCredit\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>PayPal Credit Logo</title>\\n      <path d=\\\"M46 29H2c-1.1 0-2-.87-2-1.932V1.934C0 .87.9 0 2 0h44c1.1 0 2 .87 2 1.934v25.134C48 28.13 47.1 29 46 29z\\\" fill-opacity=\\\"0\\\" fill=\\\"#FFF\\\" fill-rule=\\\"nonzero\\\" />\\n      <path d=\\\"M27.44 21.6h.518c1.377 0 2.67-.754 2.953-2.484.248-1.588-.658-2.482-2.14-2.482h-.38c-.093 0-.172.067-.187.16l-.763 4.805zm-1.254-6.646c.024-.158.16-.273.32-.273h2.993c2.47 0 4.2 1.942 3.81 4.436-.4 2.495-2.752 4.436-5.21 4.436h-3.05c-.116 0-.205-.104-.187-.218l1.323-8.38zM22.308 16.907l-.192 1.21h2.38c.116 0 .204.103.186.217l-.23 1.462c-.023.157-.16.273-.318.273h-2.048c-.16 0-.294.114-.32.27l-.203 1.26h2.52c.117 0 .205.102.187.217l-.228 1.46c-.025.16-.16.275-.32.275h-4.55c-.116 0-.204-.104-.186-.218l1.322-8.38c.025-.158.16-.273.32-.273h4.55c.116 0 .205.104.187.22l-.23 1.46c-.024.158-.16.274-.32.274H22.63c-.16 0-.295.115-.32.273M35.325 23.552h-1.81c-.115 0-.203-.104-.185-.218l1.322-8.38c.025-.158.16-.273.32-.273h1.81c.115 0 .203.104.185.22l-1.322 8.38c-.025.156-.16.272-.32.272M14.397 18.657h.224c.754 0 1.62-.14 1.777-1.106.158-.963-.345-1.102-1.15-1.104h-.326c-.097 0-.18.07-.197.168l-.326 2.043zm3.96 4.895h-2.37c-.102 0-.194-.058-.238-.15l-1.565-3.262h-.023l-.506 3.19c-.02.128-.13.222-.26.222h-1.86c-.116 0-.205-.104-.187-.218l1.33-8.432c.02-.128.13-.22.26-.22h3.222c1.753 0 2.953.834 2.66 2.728-.2 1.224-1.048 2.283-2.342 2.506l2.037 3.35c.076.125-.014.286-.16.286zM40.216 23.552h-1.808c-.116 0-.205-.104-.187-.218l1.06-6.7h-1.684c-.116 0-.205-.104-.187-.218l.228-1.462c.025-.157.16-.273.32-.273h5.62c.116 0 .205.104.186.22l-.228 1.46c-.025.158-.16.274-.32.274h-1.63l-1.05 6.645c-.025.156-.16.272-.32.272M11.467 17.202c-.027.164-.228.223-.345.104-.395-.405-.975-.62-1.6-.62-1.41 0-2.526 1.083-2.75 2.458-.21 1.4.588 2.41 2.022 2.41.592 0 1.22-.225 1.74-.6.144-.105.34.02.313.194l-.328 2.03c-.02.12-.108.22-.226.254-.702.207-1.24.355-1.9.355-3.823 0-4.435-3.266-4.238-4.655.553-3.894 3.712-4.786 5.65-4.678.623.034 1.182.117 1.73.323.177.067.282.25.252.436l-.32 1.99\\\" fill=\\\"#21306F\\\" />\\n      <path d=\\\"M23.184 7.67c-.11.717-.657.717-1.186.717h-.302l.212-1.34c.013-.08.082-.14.164-.14h.138c.36 0 .702 0 .877.206.105.123.137.305.097.557zm-.23-1.87h-1.998c-.137 0-.253.098-.274.233l-.808 5.123c-.016.1.062.192.165.192h1.024c.095 0 .177-.07.192-.164l.23-1.452c.02-.135.136-.235.273-.235h.63c1.317 0 2.076-.636 2.275-1.898.09-.553.003-.987-.255-1.29-.284-.334-.788-.51-1.456-.51z\\\" fill=\\\"#0093C7\\\" />\\n      <path d=\\\"M8.936 7.67c-.11.717-.656.717-1.186.717h-.302l.212-1.34c.013-.08.082-.14.164-.14h.138c.36 0 .702 0 .877.206.104.123.136.305.096.557zm-.23-1.87H6.708c-.136 0-.253.098-.274.233l-.808 5.123c-.016.1.062.192.165.192h.955c.136 0 .252-.1.274-.234l.217-1.382c.02-.135.137-.235.274-.235h.633c1.316 0 2.075-.636 2.274-1.898.09-.553.003-.987-.255-1.29-.284-.334-.788-.51-1.456-.51zM13.343 9.51c-.092.545-.526.912-1.08.912-.277 0-.5-.09-.642-.258-.14-.168-.193-.406-.148-.672.086-.542.527-.92 1.072-.92.27 0 .492.09.637.26.148.172.205.412.163.677zm1.334-1.863h-.957c-.082 0-.152.06-.164.14l-.042.268-.067-.097c-.208-.3-.67-.4-1.13-.4-1.057 0-1.96.8-2.135 1.923-.092.56.038 1.097.356 1.47.29.344.708.487 1.204.487.852 0 1.325-.548 1.325-.548l-.043.265c-.016.1.062.193.164.193h.862c.136 0 .253-.1.274-.234l.517-3.275c.017-.102-.06-.193-.163-.193z\\\" fill=\\\"#21306F\\\" />\\n      <path d=\\\"M27.59 9.51c-.09.545-.525.912-1.078.912-.278 0-.5-.09-.643-.258-.142-.168-.195-.406-.15-.672.086-.542.526-.92 1.07-.92.273 0 .494.09.64.26.146.172.203.412.16.677zm1.334-1.863h-.956c-.082 0-.152.06-.164.14l-.043.268-.065-.097c-.208-.3-.67-.4-1.13-.4-1.057 0-1.96.8-2.136 1.923-.092.56.038 1.097.355 1.47.292.344.71.487 1.205.487.852 0 1.325-.548 1.325-.548l-.043.265c-.016.1.062.193.164.193h.862c.136 0 .253-.1.274-.234l.517-3.275c.015-.102-.063-.193-.166-.193z\\\" fill=\\\"#0093C7\\\" />\\n      <path d=\\\"M19.77 7.647h-.96c-.092 0-.178.045-.23.122L17.254 9.72l-.562-1.877c-.035-.118-.143-.198-.266-.198h-.945c-.113 0-.194.112-.157.22l1.06 3.108-.997 1.404c-.078.11 0 .262.136.262h.96c.092 0 .177-.044.23-.12l3.196-4.614c.077-.11-.002-.26-.137-.26\\\" fill=\\\"#21306F\\\" />\\n      <path d=\\\"M30.052 5.94l-.82 5.216c-.016.1.062.192.165.192h.824c.138 0 .254-.1.275-.234l.81-5.122c.015-.1-.064-.193-.166-.193h-.924c-.082 0-.15.06-.164.14\\\" fill=\\\"#0093C7\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconCardFront\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>Generic Card</title>\\n      <path d=\\\"M46.177 29H1.823C.9 29 0 28.13 0 27.187V1.813C0 .87.9 0 1.823 0h44.354C47.1 0 48 .87 48 1.813v25.375C48 28.13 47.1 29 46.177 29z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M4.8 9.14c0-.427.57-.973 1.067-.973h7.466c.496 0 1.067.546 1.067.972v3.888c0 .425-.57.972-1.067.972H5.867c-.496 0-1.067-.547-1.067-.972v-3.89z\\\" fill=\\\"#828282\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"10.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"4.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <path d=\\\"M6.55 16.333h34.9c.966 0 1.75.784 1.75 1.75 0 .967-.784 1.75-1.75 1.75H6.55c-.966 0-1.75-.783-1.75-1.75 0-.966.784-1.75 1.75-1.75z\\\" fill=\\\"#828282\\\" />\\n      <ellipse fill=\\\"#828282\\\" cx=\\\"40.2\\\" cy=\\\"6.417\\\" rx=\\\"3\\\" ry=\\\"2.917\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconCVVBack\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>CVV Back</title>\\n      <path d=\\\"M38.48 24H1.52C.75 24 0 23.28 0 22.5v-21C0 .72.75 0 1.52 0h36.96C39.25 0 40 .72 40 1.5v21c0 .78-.75 1.5-1.52 1.5z\\\" fill=\\\"#FFF\\\"/>\\n      <path fill=\\\"#828282\\\" d=\\\"M0 5h40v4H0z\\\" />\\n      <path d=\\\"M20 13.772v5.456c0 .423.37.772.82.772h13.36c.45 0 .82-.35.82-.772v-5.456c0-.423-.37-.772-.82-.772H20.82c-.45 0-.82.35-.82.772zm-1-.142c0-.9.76-1.63 1.68-1.63h13.64c.928 0 1.68.737 1.68 1.63v5.74c0 .9-.76 1.63-1.68 1.63H20.68c-.928 0-1.68-.737-1.68-1.63v-5.74z\\\" fill=\\\"#000\\\" fill-rule=\\\"nonzero\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"23.5\\\" cy=\\\"16.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"27.5\\\" cy=\\\"16.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"31.5\\\" cy=\\\"16.5\\\" r=\\\"1.5\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconCVVFront\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>CVV Front</title>\\n      <path d=\\\"M38.48 24H1.52C.75 24 0 23.28 0 22.5v-21C0 .72.75 0 1.52 0h36.96C39.25 0 40 .72 40 1.5v21c0 .78-.75 1.5-1.52 1.5z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M16 5.772v5.456c0 .423.366.772.81.772h17.38c.444 0 .81-.348.81-.772V5.772C35 5.35 34.634 5 34.19 5H16.81c-.444 0-.81.348-.81.772zm-1-.142c0-.9.75-1.63 1.66-1.63h17.68c.917 0 1.66.737 1.66 1.63v5.74c0 .9-.75 1.63-1.66 1.63H16.66c-.917 0-1.66-.737-1.66-1.63V5.63z\\\" fill=\\\"#000\\\" fill-rule=\\\"nonzero\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"19.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"27.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"23.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"31.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\" />\\n      <path d=\\\"M4 7.833C4 7.47 4.476 7 4.89 7h6.22c.414 0 .89.47.89.833v3.334c0 .364-.476.833-.89.833H4.89c-.414 0-.89-.47-.89-.833V7.833zM4 18.5c0-.828.668-1.5 1.5-1.5h29c.828 0 1.5.666 1.5 1.5 0 .828-.668 1.5-1.5 1.5h-29c-.828 0-1.5-.666-1.5-1.5z\\\" fill=\\\"#828282\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconCheck\\\" viewBox=\\\"0 0 42 32\\\">\\n      <title>Check</title>\\n      <path class=\\\"path1\\\" d=\\\"M14.379 29.76L39.741 3.415 36.194.001l-21.815 22.79-10.86-11.17L0 15.064z\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconX\\\" viewBox=\\\"0 0 32 32\\\">\\n      <title>X</title>\\n      <path d=\\\"M29 3.54L25.46 0 14.5 10.97 3.54 0.01 0 3.54 10.96 14.5 0.01 25.46 3.54 28.99 14.5 18.04 25.46 29 28.99 25.46 18.03 14.5 29 3.54z\\\"/>\\n    </symbol>\\n\\n    <symbol id=\\\"iconLockLoader\\\" viewBox=\\\"0 0 28 32\\\">\\n      <title>Lock Loader</title>\\n      <path d=\\\"M6 10V8c0-4.422 3.582-8 8-8 4.41 0 8 3.582 8 8v2h-4V7.995C18 5.79 16.205 4 14 4c-2.21 0-4 1.792-4 3.995V10H6zM.997 14c-.55 0-.997.445-.997.993v16.014c0 .548.44.993.997.993h26.006c.55 0 .997-.445.997-.993V14.993c0-.548-.44-.993-.997-.993H.997z\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconError\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\">\\n      <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\" />\\n      <path d=\\\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"logoApplePay\\\" viewBox=\\\"0 0 165.52 105.97\\\" width=\\\"24\\\">\\n      <title>Apple Pay Logo</title>\\n      <path id=\\\"_Path_\\\" data-name=\\\"&lt;Path&gt;\\\" fill=\\\"#231f20\\\" d=\\\"M150.7 0h-139a20.78 20.78 0 0 0-3.12.3 10.51 10.51 0 0 0-3 1 9.94 9.94 0 0 0-4.31 4.32 10.46 10.46 0 0 0-1 3A20.65 20.65 0 0 0 0 11.7v82.57a20.64 20.64 0 0 0 .3 3.11 10.46 10.46 0 0 0 1 3 9.94 9.94 0 0 0 4.35 4.35 10.47 10.47 0 0 0 3 1 20.94 20.94 0 0 0 3.11.27h142.06a21 21 0 0 0 3.11-.27 10.48 10.48 0 0 0 3-1 9.94 9.94 0 0 0 4.35-4.35 10.4 10.4 0 0 0 1-3 20.63 20.63 0 0 0 .27-3.11V11.69a20.64 20.64 0 0 0-.27-3.11 10.4 10.4 0 0 0-1-3 9.94 9.94 0 0 0-4.35-4.35 10.52 10.52 0 0 0-3-1 20.84 20.84 0 0 0-3.1-.23h-1.43z\\\"/>\\n      <path id=\\\"_Path_2\\\" data-name=\\\"&lt;Path&gt;\\\" fill=\\\"#fff\\\" d=\\\"M150.7 3.53h3.03a17.66 17.66 0 0 1 2.58.22 7 7 0 0 1 2 .65 6.41 6.41 0 0 1 2.8 2.81 6.88 6.88 0 0 1 .64 2 17.56 17.56 0 0 1 .22 2.58v82.38a17.54 17.54 0 0 1-.22 2.59 6.85 6.85 0 0 1-.64 2 6.41 6.41 0 0 1-2.81 2.81 6.92 6.92 0 0 1-2 .65 18 18 0 0 1-2.57.22H11.79a18 18 0 0 1-2.58-.22 6.94 6.94 0 0 1-2-.65 6.41 6.41 0 0 1-2.8-2.8 6.93 6.93 0 0 1-.65-2 17.47 17.47 0 0 1-.22-2.58v-82.4a17.49 17.49 0 0 1 .22-2.59 6.92 6.92 0 0 1 .65-2 6.41 6.41 0 0 1 2.8-2.8 7 7 0 0 1 2-.65 17.63 17.63 0 0 1 2.58-.22H150.7\\\"/>\\n      <g id=\\\"_Group_\\\" data-name=\\\"&lt;Group&gt;\\\">\\n      <g id=\\\"_Group_2\\\" data-name=\\\"&lt;Group&gt;\\\">\\n      <path id=\\\"_Path_3\\\" data-name=\\\"&lt;Path&gt;\\\" class=\\\"cls-1\\\" d=\\\"M43.51 35.77a9.15 9.15 0 0 0 2.1-6.52 9.07 9.07 0 0 0-6 3.11 8.56 8.56 0 0 0-2.16 6.27 7.57 7.57 0 0 0 6.06-2.86\\\"/>\\n      <path id=\\\"_Path_4\\\" data-name=\\\"&lt;Path&gt;\\\" class=\\\"cls-1\\\" d=\\\"M45.59 39.08c-3.35-.2-6.2 1.9-7.79 1.9s-4-1.8-6.7-1.75a9.87 9.87 0 0 0-8.4 5.1c-3.6 6.2-.95 15.4 2.55 20.45 1.7 2.5 3.75 5.25 6.45 5.15s3.55-1.65 6.65-1.65 4 1.65 6.7 1.6 4.55-2.5 6.25-5a22.2 22.2 0 0 0 2.8-5.75 9.08 9.08 0 0 1-5.45-8.25A9.26 9.26 0 0 1 53 43.13a9.57 9.57 0 0 0-7.45-4\\\"/>\\n      </g>\\n      <g id=\\\"_Group_3\\\" data-name=\\\"&lt;Group&gt;\\\">\\n      <path id=\\\"_Compound_Path_\\\" data-name=\\\"&lt;Compound Path&gt;\\\" fill=\\\"#231f20\\\" d=\\\"M79 32.11c7.28 0 12.35 5 12.35 12.32S86.15 56.8 78.79 56.8h-8.06v12.82h-5.82V32.11zm-8.27 19.81h6.68c5.07 0 8-2.73 8-7.46S82.48 37 77.44 37h-6.71z\\\"/>\\n      <path id=\\\"_Compound_Path_2\\\" data-name=\\\"&lt;Compound Path&gt;\\\" fill=\\\"#231f20\\\" d=\\\"M92.76 61.85c0-4.81 3.67-7.56 10.42-8l7.25-.44v-2.06c0-3-2-4.7-5.56-4.7-2.94 0-5.07 1.51-5.51 3.82h-5.24c.16-4.86 4.73-8.4 10.92-8.4 6.65 0 11 3.48 11 8.89v18.66h-5.38v-4.5h-.13a9.59 9.59 0 0 1-8.58 4.78c-5.42 0-9.19-3.22-9.19-8.05zm17.68-2.42v-2.11l-6.47.42c-3.64.23-5.54 1.59-5.54 4s2 3.77 5.07 3.77c3.95-.05 6.94-2.57 6.94-6.08z\\\"/>\\n      <path id=\\\"_Compound_Path_3\\\" data-name=\\\"&lt;Compound Path&gt;\\\" fill=\\\"#231f20\\\" d=\\\"M121 79.65v-4.5a17.14 17.14 0 0 0 1.72.1c2.57 0 4-1.09 4.91-3.9l.52-1.66-9.88-27.29h6.08l6.86 22.15h.13l6.86-22.15h5.93l-10.21 28.67c-2.34 6.58-5 8.73-10.68 8.73a15.93 15.93 0 0 1-2.24-.15z\\\"/>\\n      </g>\\n      </g>\\n    </symbol>\\n    <symbol id=\\\"logoGooglePay\\\" viewbox=\\\"0 0 752 400\\\" >\\n      <g>\\n        <title>Google Pay Mark</title>\\n        <path d=\\\"m552.7,0l-352,0c-110,0 -200,90 -200,200l0,0c0,110 90,200 200,200l352,0c110,0 200,-90 200,-200l0,0c0,-110 -90,-200 -200,-200z\\\" fill=\\\"#FFFFFF\\\" id=\\\"Base_1_\\\"/>\\n        <path d=\\\"m552.7,16.2c24.7,0 48.7,4.9 71.3,14.5c21.9,9.3 41.5,22.6 58.5,39.5c16.9,16.9 30.2,36.6 39.5,58.5c9.6,22.6 14.5,46.6 14.5,71.3s-4.9,48.7 -14.5,71.3c-9.3,21.9 -22.6,41.5 -39.5,58.5c-16.9,16.9 -36.6,30.2 -58.5,39.5c-22.6,9.6 -46.6,14.5 -71.3,14.5l-352,0c-24.7,0 -48.7,-4.9 -71.3,-14.5c-21.9,-9.3 -41.5,-22.6 -58.5,-39.5c-16.9,-16.9 -30.2,-36.6 -39.5,-58.5c-9.6,-22.6 -14.5,-46.6 -14.5,-71.3s4.9,-48.7 14.5,-71.3c9.3,-21.9 22.6,-41.5 39.5,-58.5c16.9,-16.9 36.6,-30.2 58.5,-39.5c22.6,-9.6 46.6,-14.5 71.3,-14.5l352,0m0,-16.2l-352,0c-110,0 -200,90 -200,200l0,0c0,110 90,200 200,200l352,0c110,0 200,-90 200,-200l0,0c0,-110 -90,-200 -200,-200l0,0z\\\" fill=\\\"#3C4043\\\" id=\\\"Outline\\\"/>\\n        <g id=\\\"G_Pay_Lockup_1_\\\">\\n         <g id=\\\"Pay_Typeface_3_\\\">\\n          <path d=\\\"m359.3,214.2l0,60.5l-19.2,0l0,-149.4l50.9,0c12.9,0 23.9,4.3 32.9,12.9c9.2,8.6 13.8,19.1 13.8,31.5c0,12.7 -4.6,23.2 -13.8,31.7c-8.9,8.5 -19.9,12.7 -32.9,12.7l-31.7,0l0,0.1zm0,-70.5l0,52.1l32.1,0c7.6,0 14,-2.6 19,-7.7c5.1,-5.1 7.7,-11.3 7.7,-18.3c0,-6.9 -2.6,-13 -7.7,-18.1c-5,-5.3 -11.3,-7.9 -19,-7.9l-32.1,0l0,-0.1z\\\" fill=\\\"#3C4043\\\" id=\\\"Letter_p_3_\\\"/>\\n          <path d=\\\"m487.9,169.1c14.2,0 25.4,3.8 33.6,11.4c8.2,7.6 12.3,18 12.3,31.2l0,63l-18.3,0l0,-14.2l-0.8,0c-7.9,11.7 -18.5,17.5 -31.7,17.5c-11.3,0 -20.7,-3.3 -28.3,-10s-11.4,-15 -11.4,-25c0,-10.6 4,-19 12,-25.2c8,-6.3 18.7,-9.4 32,-9.4c11.4,0 20.8,2.1 28.1,6.3l0,-4.4c0,-6.7 -2.6,-12.3 -7.9,-17c-5.3,-4.7 -11.5,-7 -18.6,-7c-10.7,0 -19.2,4.5 -25.4,13.6l-16.9,-10.6c9.3,-13.5 23.1,-20.2 41.3,-20.2zm-24.8,74.2c0,5 2.1,9.2 6.4,12.5c4.2,3.3 9.2,5 14.9,5c8.1,0 15.3,-3 21.6,-9s9.5,-13 9.5,-21.1c-6,-4.7 -14.3,-7.1 -25,-7.1c-7.8,0 -14.3,1.9 -19.5,5.6c-5.3,3.9 -7.9,8.6 -7.9,14.1z\\\" fill=\\\"#3C4043\\\" id=\\\"Letter_a_3_\\\"/>\\n          <path d=\\\"m638.2,172.4l-64,147.2l-19.8,0l23.8,-51.5l-42.2,-95.7l20.9,0l30.4,73.4l0.4,0l29.6,-73.4l20.9,0z\\\" fill=\\\"#3C4043\\\" id=\\\"Letter_y_3_\\\"/>\\n         </g>\\n         <g id=\\\"G_Mark_1_\\\">\\n          <path d=\\\"m282.93,202c0,-6.26 -0.56,-12.25 -1.6,-18.01l-80.48,0l0,33l46.35,0.01c-1.88,10.98 -7.93,20.34 -17.2,26.58l0,21.41l27.59,0c16.11,-14.91 25.34,-36.95 25.34,-62.99z\\\" fill=\\\"#4285F4\\\" id=\\\"Blue_500\\\"/>\\n          <path d=\\\"m230.01,243.58c-7.68,5.18 -17.57,8.21 -29.14,8.21c-22.35,0 -41.31,-15.06 -48.1,-35.36l-28.46,0l0,22.08c14.1,27.98 43.08,47.18 76.56,47.18c23.14,0 42.58,-7.61 56.73,-20.71l-27.59,-21.4z\\\" fill=\\\"#34A853\\\" id=\\\"Green_500_1_\\\"/>\\n          <path d=\\\"m150.09,200.05c0,-5.7 0.95,-11.21 2.68,-16.39l0,-22.08l-28.46,0c-5.83,11.57 -9.11,24.63 -9.11,38.47s3.29,26.9 9.11,38.47l28.46,-22.08c-1.73,-5.18 -2.68,-10.69 -2.68,-16.39z\\\" fill=\\\"#FABB05\\\" id=\\\"Yellow_500_1_\\\"/>\\n          <path d=\\\"m200.87,148.3c12.63,0 23.94,4.35 32.87,12.85l24.45,-24.43c-14.85,-13.83 -34.21,-22.32 -57.32,-22.32c-33.47,0 -62.46,19.2 -76.56,47.18l28.46,22.08c6.79,-20.3 25.75,-35.36 48.1,-35.36z\\\" fill=\\\"#E94235\\\" id=\\\"Red_500\\\"/>\\n         </g>\\n        </g>\\n       </g>\\n    </symbol>\\n\\n    <symbol id=\\\"logoVenmo\\\" viewBox=\\\"0 0 48 32\\\">\\n      <title>Venmo</title>\\n      <g fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n        <rect fill=\\\"#3D95CE\\\" width=\\\"47.4074074\\\" height=\\\"31.6049383\\\" rx=\\\"3.16049383\\\"/>\\n        <path d=\\\"M33.1851852,10.1131555 C33.1851852,14.8373944 29.2425262,20.9745161 26.0425868,25.2839506 L18.7337285,25.2839506 L15.8024691,7.35534396 L22.202175,6.73384536 L23.7519727,19.4912014 C25.2000422,17.0781163 26.9870326,13.2859484 26.9870326,10.7005 C26.9870326,9.28531656 26.7500128,8.32139205 26.3796046,7.52770719 L32.207522,6.32098765 C32.8813847,7.45939896 33.1851852,8.63196439 33.1851852,10.1131555 Z\\\" fill=\\\"#FFF\\\"/>\\n      </g>\\n    </symbol>\\n    <symbol id=\\\"buttonVenmo\\\" viewBox=\\\"0 0 295 42\\\">\\n      <g fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n        <rect fill=\\\"#3D95CE\\\" width=\\\"295\\\" height=\\\"42\\\" rx=\\\"3\\\"/>\\n        <path d=\\\"M11.3250791 0C11.7902741.780434316 12 1.58428287 12 2.59970884 12 5.838396 9.27822123 10.0456806 7.06917212 13L2.02356829 13 0 .709099732 4.41797878.283033306 5.48786751 9.02879887C6.48752911 7.3745159 7.72116169 4.77480706 7.72116169 3.00236102 7.72116169 2.03218642 7.55753727 1.37137098 7.30182933.827262801L11.3250791 0 11.3250791 0zM17.5051689 5.68512193C18.333931 5.68512193 20.4203856 5.28483546 20.4203856 4.03281548 20.4203856 3.43161451 20.0177536 3.13172102 19.5432882 3.13172102 18.7131868 3.13172102 17.6238766 4.18269796 17.5051689 5.68512193L17.5051689 5.68512193zM17.4102028 8.1647385C17.4102028 9.69351403 18.2153451 10.293301 19.2827401 10.293301 20.4451012 10.293301 21.5580312 9.99340752 23.0045601 9.21725797L22.4597224 13.1234575C21.440541 13.649203 19.8521716 14 18.310433 14 14.3996547 14 13 11.49596 13 8.36552446 13 4.30815704 15.2767521 0 19.9706358 0 22.554932 0 24 1.52864698 24 3.65720949 24.0002435 7.08869546 19.8287953 8.13992948 17.4102028 8.1647385L17.4102028 8.1647385zM37 2.84753211C37 3.32189757 36.9261179 4.00994664 36.8526108 4.45959542L35.4649774 12.9998782 30.9621694 12.9998782 32.2279161 5.1711436C32.2519185 4.95879931 32.3256755 4.53131032 32.3256755 4.29412759 32.3256755 3.72466988 31.9603904 3.5825794 31.5212232 3.5825794 30.9379171 3.5825794 30.3532359 3.84326124 29.9638234 4.03356751L28.5281854 13 24 13 26.0686989.213683657 29.9878258.213683657 30.0374555 1.23425123C30.9620444.641294408 32.1795365 3.90379019e-8 33.9069526 3.90379019e-8 36.1955476-.000243475057 37 1.1387937 37 2.84753211L37 2.84753211zM51.2981937 1.39967969C52.6582977.49918987 53.9425913 0 55.7133897 0 58.1518468 0 59 1.13900518 59 2.84769558 59 3.32204771 58.9223438 4.01007745 58.8448195 4.4597136L57.3830637 12.9997565 52.6328518 12.9997565 53.9932194 5.00577861C54.0182698 4.792101 54.0708756 4.53142648 54.0708756 4.36608506 54.0708756 3.72493046 53.6854953 3.58272222 53.2224587 3.58272222 52.6325881 3.58272222 52.0429812 3.81989829 51.6052587 4.03369766L50.0914245 12.9998782 45.3423992 12.9998782 46.7027668 5.00590037C46.7278172 4.79222275 46.7788409 4.53154824 46.7788409 4.36620681 46.7788409 3.72505221 46.3933287 3.58284398 45.9318743 3.58284398 45.3153711 3.58284398 44.7000546 3.84351849 44.2893602 4.03381941L42.7740757 13 38 13 40.1814929.214042876 44.2643098.214042876 44.3925941 1.28145692C45.3423992.641763367 46.6253743.000487014507 48.3452809.000487014507 49.8344603 0 50.8094476.593061916 51.2981937 1.39967969L51.2981937 1.39967969zM67.5285327 5.39061542C67.5285327 4.29258876 67.2694573 3.54396333 66.4936812 3.54396333 64.7759775 3.54396333 64.4232531 6.76273249 64.4232531 8.4093242 64.4232531 9.65848482 64.7530184 10.4315735 65.5285529 10.4315735 67.1521242 10.4315735 67.5285327 7.03707905 67.5285327 5.39061542L67.5285327 5.39061542zM60 8.21054461C60 3.96893154 62.1170713 0 66.988027 0 70.6583423 0 72 2.29633967 72 5.46592624 72 9.65835674 69.905767 14 64.9173573 14 61.2233579 14 60 11.4294418 60 8.21054461L60 8.21054461z\\\" transform=\\\"translate(112 14)\\\" fill=\\\"#FFF\\\"/>\\n      </g>\\n    </symbol>\\n\\n    <symbol id=\\\"iconClose\\\" width=\\\"21\\\" height=\\\"21\\\" viewBox=\\\"0 0 21 21\\\" overflow=\\\"visible\\\">\\n      <path d=\\\"M16 5.414L14.586 4 10 8.586 5.414 4 4 5.414 8.586 10 4 14.586 5.414 16 10 11.414 14.586 16 16 14.586 11.414 10\\\"/>\\n    </symbol>\\n  </defs>\\n</svg>\\n\";\n\nvar PASS_THROUGH_EVENTS = [\n  'changeActiveView',\n  'paymentMethodRequestable',\n  'noPaymentMethodRequestable',\n  'paymentOptionSelected',\n\n  // Card View Events\n  'card:binAvailable',\n  'card:blur',\n  'card:cardTypeChange',\n  'card:empty',\n  'card:focus',\n  'card:inputSubmitRequest',\n  'card:notEmpty',\n  'card:validityChange',\n\n  // 3DS Events\n  '3ds:customer-canceled',\n  '3ds:authentication-modal-render',\n  '3ds:authentication-modal-close'\n];\nvar UPDATABLE_CONFIGURATION_OPTIONS = [\n  paymentOptionIDs.paypal,\n  paymentOptionIDs.paypalCredit,\n  paymentOptionIDs.applePay,\n  paymentOptionIDs.googlePay,\n  'threeDSecure'\n];\nvar UPDATABLE_CONFIGURATION_OPTIONS_THAT_REQUIRE_UNVAULTED_PAYMENT_METHODS_TO_BE_REMOVED = [\n  paymentOptionIDs.paypal,\n  paymentOptionIDs.paypalCredit,\n  paymentOptionIDs.applePay,\n  paymentOptionIDs.googlePay\n];\nvar HAS_RAW_PAYMENT_DATA = {};\nvar VERSION = '1.33.7';\n\nHAS_RAW_PAYMENT_DATA[constants.paymentMethodTypes.googlePay] = true;\nHAS_RAW_PAYMENT_DATA[constants.paymentMethodTypes.applePay] = true;\n\n/**\n * @typedef {object} Dropin~cardPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the card.\n * @property {object} details Additional account details. See a full list of details in the [Hosted Fields client reference](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#~tokenizePayload).\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `CreditCard` when the method requested is a card.\n * @property {object} binData Information about the card based on the bin. Documented {@link Dropin~binData|here}.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n * @property {?boolean} liabilityShifted If 3D Secure is configured, whether or not liability did shift.\n * @property {?boolean} liabilityShiftPossible If 3D Secure is configured, whether or not liability shift is possible.\n * @property {?object} threeDSecureInfo If 3D Secure is configured, the `threeDSecureInfo` documented in the [Three D Secure client reference](http://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#~verifyPayload)\n */\n\n/**\n * @typedef {object} Dropin~paypalPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the PayPal account.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {object} details Additional PayPal account details. See a full list of details in the [PayPal client reference](http://braintree.github.io/braintree-web/3.88.3/PayPalCheckout.html#~tokenizePayload).\n * @property {string} type The payment method type, always `PayPalAccount` when the method requested is a PayPal account.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n */\n\n/**\n * @typedef {object} Dropin~applePayPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the Apple Pay provided card.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {string} details.cardType Type of card, ex: Visa, Mastercard.\n * @property {string} details.cardHolderName The name of the card holder.\n * @property {string} details.dpanLastTwo Last two digits of card number.\n * @property {external:ApplePayPayment} details.rawPaymentData The raw response back from the Apple Pay flow, which includes billing/shipping address, phone and email if passed in as required parameters.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `ApplePayCard` when the method requested is an Apple Pay provided card.\n * @property {object} binData Information about the card based on the bin. Documented {@link Dropin~binData|here}.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n */\n\n/**\n * @typedef {object} ApplePayPayment An [Apple Pay Payment object](https://developer.apple.com/documentation/apple_pay_on_the_web/applepaypayment).\n * @external ApplePayPayment\n * @see {@link https://developer.apple.com/documentation/apple_pay_on_the_web/applepaypayment ApplePayPayment}\n */\n\n/**\n * @typedef {object} Dropin~venmoPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the Venmo account.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {string} details.username The Venmo username.\n * @property {string} type The payment method type, always `VenmoAccount` when the method requested is a Venmo account.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n */\n\n/**\n * @typedef {object} Dropin~googlePayPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the Google Pay card.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {string} details.cardType Type of card, ex: Visa, Mastercard.\n * @property {string} details.lastFour The last 4 digits of the card.\n * @property {string} details.lastTwo The last 2 digits of the card.\n * @property {boolean} details.isNetworkTokenized True if the card is network tokenized. A network tokenized card is a generated virtual card with a device-specific account number (DPAN) that is used in place of the underlying source card.\n * @property {string} details.bin First six digits of card number.\n * @property {external:GooglePayPaymentData} details.rawPaymentData The raw response back from the Google Pay flow, which includes shipping address, phone and email if passed in as required parameters.\n * @property {string} type The payment method type, always `AndroidPayCard` when the method requested is a Google Pay Card.\n * @property {object} binData Information about the card based on the bin. Documented {@link Dropin~binData|here}.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n */\n\n/**\n * @typedef {object} GooglePayPaymentData A [Google Pay Payment Data object](https://developers.google.com/pay/api/web/object-reference#PaymentData).\n * @external GooglePayPaymentData\n * @see {@link https://developers.google.com/pay/api/web/object-reference#PaymentData PaymentData}\n */\n\n/**\n * @typedef {object} Dropin~binData Information about the card based on the bin.\n * @property {string} commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} countryOfIssuance The country of issuance.\n * @property {string} debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} issuingBank The issuing bank.\n * @property {string} payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} productId The product id.\n */\n\n/**\n * @name Dropin#on\n * @function\n * @param {string} event The name of the event to which you are subscribing.\n * @param {function} handler A callback to handle the event.\n * @description Subscribes a handler function to a named event. `event` should be one of the following:\n *\n *  * [`changeActiveView`](#event:changeActiveView)\n *  * [`paymentMethodRequestable`](#event:paymentMethodRequestable)\n *  * [`noPaymentMethodRequestable`](#event:noPaymentMethodRequestable)\n *  * [`paymentOptionSelected`](#event:paymentOptionSelected)\n *\n *  _Card View Specific Events_\n *  * [`card:binAvailable`](#event:card:binAvailable)\n *  * [`card:blur`](#event:card:blur)\n *  * [`card:cardTypeChange`](#event:card:cardTypeChange)\n *  * [`card:empty`](#event:card:empty)\n *  * [`card:focus`](#event:card:focus)\n *  * [`card:inputSubmitRequest`](#event:card:inputSubmitRequest)\n *  * [`card:notEmpty`](#event:card:notEmpty)\n *  * [`card:validityChange`](#event:card:validityChange)\n *\n *  _3DS Specific Events_\n *  * [`3ds:customer-canceled`](#event:3ds:customer-canceled)\n *  * [`3ds:authentication-modal-render`](#event:3ds:authentication-modal-render)\n *  * [`3ds:authentication-modal-close`](#event:3ds:authentication-modal-close)\n * @returns {void}\n * @example\n * <caption>Dynamically enable or disable your submit button based on whether or not the payment method is requestable</caption>\n * var submitButton = document.querySelector('#submit-button');\n *\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container'\n * }, function (err, dropinInstance) {\n *   submitButton.addEventListener('click', function () {\n *     dropinInstance.requestPaymentMethod(function (err, payload) {\n *       // Send payload.nonce to your server.\n *     });\n *   });\n *\n *   if (dropinInstance.isPaymentMethodRequestable()) {\n *     // This will be true if you generated the client token\n *     // with a customer ID and there is a saved payment method\n *     // available to tokenize with that customer.\n *     submitButton.removeAttribute('disabled');\n *   }\n *\n *   dropinInstance.on('paymentMethodRequestable', function (event) {\n *     console.log(event.type); // The type of Payment Method, e.g 'CreditCard', 'PayPalAccount'.\n *     console.log(event.paymentMethodIsSelected); // true if a customer has selected a payment method when paymentMethodRequestable fires\n *\n *     submitButton.removeAttribute('disabled');\n *   });\n *\n *   dropinInstance.on('noPaymentMethodRequestable', function () {\n *     submitButton.setAttribute('disabled', true);\n *   });\n * });\n *\n * @example\n * <caption>Automatically submit nonce to server as soon as it becomes available</caption>\n * var submitButton = document.querySelector('#submit-button');\n *\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container'\n * }, function (err, dropinInstance) {\n *   function sendNonceToServer() {\n *     dropinInstance.requestPaymentMethod(function (err, payload) {\n *       if (err) {\n *         // handle errors\n *       }\n *\n *       // send payload.nonce to your server\n *     });\n *   }\n *\n *   // allows us to still request the payment method manually, such as\n *   // when filling out a credit card form\n *   submitButton.addEventListener('click', sendNonceToServer);\n *\n *   dropinInstance.on('paymentMethodRequestable', function (event) {\n *     // if the nonce is already available (via PayPal authentication\n *     // or by using a stored payment method), we can request the\n *     // nonce right away. Otherwise, we wait for the customer to\n *     // request the nonce by pressing the submit button once they\n *     // are finished entering their credit card details. This is\n *     // particularly important if your credit card form includes a\n *     // postal code input. The `paymentMethodRequestable` event\n *     // could fire before the customer has finished entering their\n *     // postal code. (International postal codes can be as few as 3\n *     // characters in length)\n *     if (event.paymentMethodIsSelected) {\n *       sendNonceToServer();\n *     }\n *   });\n * });\n * @example\n * <caption>Listen for when the customer navigates to different views in Drop-in</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container'\n * }, function (err, dropinInstance) {\n *   dropinInstance.on('changeActiveView', function (event) {\n *     // fires when the view changes, such as going from the\n *     // credit card view to the saved payment methods view\n *     event.oldActivePaymentViewId; // card\n *     event.newActivePaymentViewId; // methods\n *   });\n * });\n * @example\n * <caption>Listen on various events from the card view</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container'\n * }, function (err, dropinInstance) {\n *   dropinInstance.on('card:focus', function (event) {\n *     // a card field was focussed\n *   });\n *   dropinInstance.on('card:blur', function (event) {\n *     // a card field was blurred\n *   });\n *   dropinInstance.on('card:validityChange', function (event) {\n *     // the card form went from invalid to valid or valid to invalid\n *   });\n * });\n */\n\n/**\n * @name Dropin#off\n * @function\n * @param {string} event The name of the event to which you are unsubscribing.\n * @param {function} handler A callback to unsubscribe from the event.\n * @description Unsubscribes a handler function to a named event.\n * @returns {void}\n * @example\n * <caption>Subscribe and then unsubscribe from event</caption>\n * var callback = function (event) {\n *   // do something\n * };\n * dropinInstance.on('paymentMethodRequestable', callback);\n *\n * // later on\n * dropinInstance.off('paymentMethodRequestable', callback);\n */\n\n/**\n * This event is emitted when the payment method available in Drop-in changes. This includes when the state of Drop-in transitions from having no payment method available to having a payment method available and when the kind of payment method available changes. This event is not fired if there is no payment method available on initialization. To check if there is a payment method requestable on initialization, use {@link Dropin#isPaymentMethodRequestable|`isPaymentMethodRequestable`}.\n * @event Dropin#paymentMethodRequestable\n * @type {Dropin~paymentMethodRequestablePayload}\n */\n\n/**\n * @typedef {object} Dropin~paymentMethodRequestablePayload\n * @description The event payload sent from {@link Dropin#on|`on`} with the {@link Dropin#event:paymentMethodRequestable|`paymentMethodRequestable`} event.\n * @property {string} type The type of payment method that is requestable. Either `CreditCard` or `PayPalAccount`.\n * @property {boolean} paymentMethodIsSelected A property to determine if a payment method is currently selected when the payment method becomes requestable.\n *\n * This will be `true` any time a payment method is visibly selected in the Drop-in UI, such as when PayPal authentication completes or a stored payment method is selected.\n *\n * This will be `false` when {@link Dropin#requestPaymentMethod|`requestPaymentMethod`} can be called, but a payment method is not currently selected. For instance, when a card form has been filled in with valid values, but has not been submitted to be converted into a payment method nonce.\n */\n\n/**\n * This event is emitted when there is no payment method available in Drop-in. This event is not fired if there is no payment method available on initialization. To check if there is a payment method requestable on initialization, use {@link Dropin#isPaymentMethodRequestable|`isPaymentMethodRequestable`}. No payload is available in the callback for this event.\n * @event Dropin#noPaymentMethodRequestable\n */\n\n/**\n * This event is emitted when the customer selects a new payment option type (e.g. PayPal, PayPal Credit, credit card). This event is not emitted when the user changes between existing saved payment methods. Only relevant when accepting multiple payment options.\n * @event Dropin#paymentOptionSelected\n * @type {Dropin~paymentOptionSelectedPayload}\n */\n\n/**\n * This event is emitted when the Drop-in view changes what is presented as the active view.\n * @event Dropin#changeActiveView\n * @type {Dropin~changeActiveView}\n */\n\n/**\n * @typedef {object} Dropin~changeActiveView\n * @description The event payload sent from {@link Dropin#on|`on`} with the {@link Dropin#event:changeActiveView|`changeActiveView`} event.\n * @property {string} previousViewId The id for the previously active view. Possible values are:\n * * `card` - The credit card form view\n * * `paypal` - The PayPal view\n * * `payapCredit` - The PayPal Credit view\n * * `venmo` - The Venmo View\n * * `googlePay` - The Google Pay view\n * * `applePay` - The Apple Pay view\n * * `methods` - The view presenting the available payment methods (already vaulted or tokenized payment methods)\n * * `options` - The view presenting the available payment options (where the customer chooses what payment method option to use). Note, if both the methods view and the options view are presented at the same time, `methods` will be shown as the view id.\n * * `delete-confirmation` - The view where the customer confirms they would like to delete their saved payment method.\n * @property {string} newViewId The id for the new active view. The possible values are the same as `previousViewId`.\n */\n\n/**\n * The underlying [hosted fields `binAvailable` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:binAvailable).\n * @event Dropin#card:binAvailable\n * @type {Dropin~card:binAvailable}\n */\n\n/**\n * The underlying [hosted fields `blur` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:blur).\n * @event Dropin#card:blur\n * @type {Dropin~card:blur}\n */\n\n/**\n * The underlying [hosted fields `cardTypeChange` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:cardTypeChange).\n * @event Dropin#card:cardTypeChange\n * @type {Dropin~card:cardTypeChange}\n */\n\n/**\n * The underlying [hosted fields `empty` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:empty).\n * @event Dropin#card:empty\n * @type {Dropin~card:empty}\n */\n\n/**\n * The underlying [hosted fields `focus` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:focus).\n * @event Dropin#card:focus\n * @type {Dropin~card:focus}\n */\n\n/**\n * The underlying [hosted fields `inputSubmitRequest` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:inputSubmitRequest).\n * @event Dropin#card:inputSubmitRequest\n * @type {Dropin~card:inputSubmitRequest}\n */\n\n/**\n * The underlying [hosted fields `notEmpty` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:notEmpty).\n * @event Dropin#card:notEmpty\n * @type {Dropin~card:notEmpty}\n */\n\n/**\n * The underlying [hosted fields `validityChange` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:validityChange).\n * @event Dropin#card:validityChange\n * @type {Dropin~card:validityChange}\n */\n\n/**\n * The underlying [3D Secure `customer-canceled` event](http://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#event:customer-canceled).\n * @event Dropin#3ds:customer-canceled\n * @type {Dropin~3ds:customer-canceled}\n */\n\n/**\n * The underlying [3D Secure `authentication-modal-render` event](http://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#event:authentication-modal-render).\n * @event Dropin#3ds:authentication-modal-render\n * @type {Dropin~3ds:authentication-modal-render}\n */\n\n/**\n * The underlying [3D Secure `authentication-modal-close` event](http://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#event:authentication-modal-close).\n * @event Dropin#3ds:authentication-modal-close\n * @type {Dropin~3ds:authentication-modal-close}\n */\n\n/**\n * @typedef {object} Dropin~paymentOptionSelectedPayload\n * @description The event payload sent from {@link Dropin#on|`on`} with the {@link Dropin#event:paymentOptionSelected|`paymentOptionSelected`} event.\n * @property {string} paymentOption The payment option view selected. Either `card`, `paypal`, or `paypalCredit`.\n */\n\n/**\n * @class\n * @param {object} options For create options, see {@link module:braintree-web-drop-in|dropin.create}.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web-drop-in|dropin.create} instead.</strong>\n * @classdesc This class represents a Drop-in component, that will create a pre-made UI for accepting cards and PayPal on your page. Instances of this class have methods for requesting a payment method and subscribing to events. For more information, see the [Drop-in guide](https://developer.paypal.com/braintree/docs/guides/drop-in/overview/javascript/v3) in the Braintree Developer Docs. To be used in conjunction with the [Braintree Server SDKs](https://developer.paypal.com/braintree/docs/start/hello-server).\n */\nfunction Dropin(options) {\n  this._client = options.client;\n  this._componentID = uuid();\n  this._dropinWrapper = document.createElement('div');\n  this._dropinWrapper.id = 'braintree--dropin__' + this._componentID;\n  this._dropinWrapper.setAttribute('data-braintree-id', 'wrapper');\n  this._dropinWrapper.style.display = 'none';\n  this._dropinWrapper.className = 'braintree-loading';\n  this._merchantConfiguration = options.merchantConfiguration;\n\n  EventEmitter.call(this);\n}\n\nEventEmitter.createChild(Dropin);\n\nDropin.prototype._initialize = function (callback) {\n  var localizedStrings, localizedHTML;\n  var self = this;\n  var container = self._merchantConfiguration.container || self._merchantConfiguration.selector;\n\n  if (!container) {\n    analytics.sendEvent(self._client, 'configuration-error');\n    callback(new DropinError('options.container is required.'));\n\n    return;\n  } else if (self._merchantConfiguration.container && self._merchantConfiguration.selector) {\n    analytics.sendEvent(self._client, 'configuration-error');\n    callback(new DropinError('Must only have one options.selector or options.container.'));\n\n    return;\n  }\n\n  if (typeof container === 'string') {\n    container = document.querySelector(container);\n  }\n\n  if (!container || container.nodeType !== 1) {\n    analytics.sendEvent(self._client, 'configuration-error');\n    callback(new DropinError('options.selector or options.container must reference a valid DOM node.'));\n\n    return;\n  }\n\n  if (container.innerHTML.trim()) {\n    analytics.sendEvent(self._client, 'configuration-error');\n    callback(new DropinError('options.selector or options.container must reference an empty DOM node.'));\n\n    return;\n  }\n\n  // Backfill with `en`\n  self._strings = assign({}, translations.en);\n  if (self._merchantConfiguration.locale) {\n    localizedStrings = translations[self._merchantConfiguration.locale] || translations[self._merchantConfiguration.locale.split('_')[0]];\n    // Fill `strings` with `localizedStrings` that may exist\n    self._strings = assign(self._strings, localizedStrings);\n  }\n\n  if (!isUtf8()) {\n    // non-utf-8 encodings often don't support the bullet character\n    self._strings.endingIn = self._strings.endingIn.replace(/•/g, '*');\n  }\n\n  if (self._merchantConfiguration.translations) {\n    Object.keys(self._merchantConfiguration.translations).forEach(function (key) {\n      self._strings[key] = sanitizeHtml(self._merchantConfiguration.translations[key]);\n    });\n  }\n\n  localizedHTML = Object.keys(self._strings).reduce(function (result, stringKey) {\n    var stringValue = self._strings[stringKey];\n\n    return result.replace(RegExp('{{' + stringKey + '}}', 'g'), stringValue);\n  }, mainHTML);\n\n  self._dropinWrapper.innerHTML = svgHTML + localizedHTML;\n  container.appendChild(self._dropinWrapper);\n\n  self._model = new DropinModel({\n    client: self._client,\n    container: container,\n    componentID: self._componentID,\n    merchantConfiguration: self._merchantConfiguration\n  });\n\n  self._injectStylesheet();\n\n  self._model.initialize().then(function () {\n    self._model.on('cancelInitialization', function (err) {\n      self._dropinWrapper.innerHTML = '';\n      analytics.sendEvent(self._client, 'load-error');\n      callback(err);\n    });\n\n    self._model.on('asyncDependenciesReady', function () {\n      if (self._model.hasAtLeastOneAvailablePaymentOption()) {\n        analytics.sendEvent(self._client, 'appeared');\n        self._disableErroredPaymentMethods();\n\n        self._handleAppSwitch();\n\n        self._model.confirmDropinReady();\n\n        callback(null, self);\n      } else {\n        self._model.cancelInitialization(new DropinError('All payment options failed to load.'));\n      }\n    });\n\n    PASS_THROUGH_EVENTS.forEach(function (eventName) {\n      self._model.on(eventName, function (event) {\n        self._emit(eventName, event);\n      });\n    });\n\n    return self._setUpDependenciesAndViews();\n  }).catch(function (err) {\n    self.teardown().then(function () {\n      callback(err);\n    });\n  });\n};\n\n/**\n * Modify your configuration initially set in {@link module:braintree-web-drop-in|`dropin.create`}.\n *\n * If `updateConfiguration` is called after a user completes the PayPal authorization flow, any PayPal accounts not stored in the Vault record will be removed.\n * @public\n * @param {string} property The top-level property to update. Either `paypal`, `paypalCredit`, `applePay`, or `googlePay`.\n * @param {string} key The key of the property to update, such as `amount` or `currency`.\n * @param {any} value The value of the property to update. Must be the type of the property specified in {@link module:braintree-web-drop-in|`dropin.create`}.\n * @returns {void}\n * @example\n * dropinInstance.updateConfiguration('paypal', 'amount', '10.00');\n */\nDropin.prototype.updateConfiguration = function (property, key, value) {\n  var view;\n\n  if (UPDATABLE_CONFIGURATION_OPTIONS.indexOf(property) === -1) {\n    return;\n  }\n\n  if (property === 'threeDSecure') {\n    if (this._threeDSecure) {\n      this._threeDSecure.updateConfiguration(key, value);\n    }\n\n    return;\n  }\n\n  view = this._mainView.getView(property);\n\n  if (!view) {\n    return;\n  }\n\n  view.updateConfiguration(key, value);\n\n  if (UPDATABLE_CONFIGURATION_OPTIONS_THAT_REQUIRE_UNVAULTED_PAYMENT_METHODS_TO_BE_REMOVED.indexOf(property) === -1) {\n    return;\n  }\n\n  this._removeUnvaultedPaymentMethods(function (paymentMethod) {\n    return paymentMethod.type === constants.paymentMethodTypes[property];\n  });\n  this._navigateToInitialView();\n};\n\n/**\n * Get a list of the available payment methods presented to the user. This is useful for knowing if a paricular payment option was presented to a customer that is browser dependant such as Apple Pay, Google Pay and Venmo. Returns an array of strings. Possible values:\n * * `applePay`\n * * `card`\n * * `googlePay`\n * * `paypalCredit`\n * * `paypal`\n * * `venmo`\n *\n * @public\n * @returns {string[]} An array of possible payment options.\n * @example\n * var paymentOptions = dropinInstance.getAvailablePaymentOptions(); // ['card', 'venmo', 'paypal']\n *\n * if (paymentOptions.includes('venmo')) {\n *   // special logic for when venmo is displayed\n * }\n */\nDropin.prototype.getAvailablePaymentOptions = function () {\n  return this._model.supportedPaymentOptions;\n};\n\n/**\n * Removes the currently selected payment method and returns the customer to the payment options view. Does not remove vaulted payment methods.\n * @public\n * @returns {void}\n * @example\n * dropinInstance.requestPaymentMethod(function (requestPaymentMethodError, payload) {\n *   if (requestPaymentMethodError) {\n *     // handle errors\n *     return;\n *   }\n *\n *   functionToSendNonceToServer(payload.nonce, function (transactionError, response) {\n *     if (transactionError) {\n *       // transaction sale with selected payment method failed\n *       // clear the selected payment method and add a message\n *       // to the checkout page about the failure\n *       dropinInstance.clearSelectedPaymentMethod();\n *       divForErrorMessages.textContent = 'my error message about entering a different payment method.';\n *     } else {\n *       // redirect to success page\n *     }\n *   });\n * });\n */\nDropin.prototype.clearSelectedPaymentMethod = function () {\n  this._removeUnvaultedPaymentMethods();\n  this._model.removeActivePaymentMethod();\n\n  if (this._model.getPaymentMethods().length === 0) {\n    this._navigateToInitialView();\n\n    return;\n  }\n\n  this._mainView.showLoadingIndicator();\n\n  this._model.refreshPaymentMethods().then(function () {\n    this._navigateToInitialView();\n    this._mainView.hideLoadingIndicator();\n  }.bind(this));\n};\n\nDropin.prototype._setUpDataCollector = function () {\n  var self = this;\n  var config = assign({}, self._merchantConfiguration.dataCollector, {client: self._client});\n\n  this._dataCollector = new DataCollector(config);\n\n  this._dataCollector.initialize().then(function () {\n    self._model.asyncDependencyReady('dataCollector');\n  }).catch(function (err) {\n    self._model.cancelInitialization(new DropinError({\n      message: 'Data Collector failed to set up.',\n      braintreeWebError: err\n    }));\n  });\n};\n\nDropin.prototype._setUpThreeDSecure = function () {\n  var self = this;\n\n  this._threeDSecure = new ThreeDSecure(this._client, this._model);\n\n  this._threeDSecure.initialize().then(function () {\n    self._model.asyncDependencyReady('threeDSecure');\n  }).catch(function (err) {\n    self._model.cancelInitialization(new DropinError({\n      message: '3D Secure failed to set up.',\n      braintreeWebError: err\n    }));\n  });\n};\n\nDropin.prototype._setUpDependenciesAndViews = function () {\n  if (this._merchantConfiguration.dataCollector) {\n    this._setUpDataCollector();\n  }\n\n  if (this._merchantConfiguration.threeDSecure) {\n    this._setUpThreeDSecure();\n  }\n\n  this._mainView = new MainView({\n    client: this._client,\n    element: this._dropinWrapper,\n    model: this._model,\n    strings: this._strings\n  });\n};\n\nDropin.prototype._removeUnvaultedPaymentMethods = function (filter) {\n  filter = filter || function () { return true; };\n\n  this._model.getPaymentMethods().forEach(function (paymentMethod) {\n    if (filter(paymentMethod) && !paymentMethod.vaulted) {\n      this._model.removePaymentMethod(paymentMethod);\n    }\n  }.bind(this));\n};\n\nDropin.prototype._navigateToInitialView = function () {\n  var isOnMethodsView = this._mainView.primaryView.ID === paymentMethodsViewID;\n\n  if (!isOnMethodsView) {\n    return;\n  }\n\n  if (this._model.hasPaymentMethods()) {\n    return;\n  }\n\n  this._mainView.setPrimaryView(this._model.getInitialViewId());\n};\n\nDropin.prototype._supportsPaymentOption = function (paymentOption) {\n  return this._model.supportedPaymentOptions.indexOf(paymentOption) !== -1;\n};\n\nDropin.prototype._disableErroredPaymentMethods = function () {\n  var paymentMethodOptionsElements;\n  var failedDependencies = Object.keys(this._model.failedDependencies);\n\n  if (failedDependencies.length === 0) {\n    return;\n  }\n\n  paymentMethodOptionsElements = this._mainView.getOptionsElements();\n\n  failedDependencies.forEach(function (paymentMethodId) {\n    var element = paymentMethodOptionsElements[paymentMethodId];\n    var div = element.div;\n    var clickHandler = element.clickHandler;\n    var error = this._model.failedDependencies[paymentMethodId];\n    var errorMessageDiv = div.querySelector('.braintree-option__disabled-message');\n\n    classList.add(div, 'braintree-disabled');\n    div.removeEventListener('click', clickHandler);\n    errorMessageDiv.innerHTML = constants.errors.DEVELOPER_MISCONFIGURATION_MESSAGE;\n    console.error(error); // eslint-disable-line no-console\n  }.bind(this));\n};\n\nDropin.prototype._sendVaultedPaymentMethodAppearAnalyticsEvents = function () {\n  var i, type;\n  var typesThatSentAnEvent = {};\n  var paymentMethods = this._model._paymentMethods;\n\n  for (i = 0; i < paymentMethods.length; i++) {\n    type = paymentMethods[i].type;\n\n    if (type in typesThatSentAnEvent) {\n      // prevents us from sending the analytic multiple times\n      // for the same payment method type\n      continue;\n    }\n\n    typesThatSentAnEvent[type] = true;\n\n    analytics.sendEvent(this._client, 'vaulted-' + constants.analyticsKinds[type] + '.appear');\n  }\n};\n\nDropin.prototype._handleAppSwitch = function () {\n  if (this._model.appSwitchError) {\n    this._mainView.setPrimaryView(this._model.appSwitchError.id);\n    this._model.reportError(this._model.appSwitchError.error);\n  } else if (this._model.appSwitchPayload) {\n    this._model.addPaymentMethod(this._model.appSwitchPayload);\n  } else {\n    this._sendVaultedPaymentMethodAppearAnalyticsEvents();\n  }\n};\n\n/**\n * Requests a payment method object which includes the payment method nonce used by by the [Braintree Server SDKs](https://developer.paypal.com/braintree/docs/start/hello-server).\n *\n * If a payment method is not available, an error will appear in the UI. When a callback is used, an error will be passed to it. If no callback is used, the returned Promise will be rejected with an error.\n * @public\n * @param {object} [options] All options for requesting a payment method.\n * @param {object} [options.threeDSecure] Any of the options in the [Braintree 3D Secure client reference](https://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#verifyCard) except for `nonce`, `bin`, and `onLookupComplete`. If `amount` is provided, it will override the value of `amount` in the [3D Secure create options](module-braintree-web-drop-in.html#~threeDSecureOptions). The more options provided, the more likely the customer will not need to answer a 3DS challenge. When 3DS is enabled, both credit cards and non-network tokenized Google Pay cards will perform verfication. The recommended fields for achieving a 3DS v2 verification are:\n * * `email`\n * * `mobilePhoneNumber`\n * * `billingAddress`\n *\n * For an example of verifying 3D Secure within Drop-in, [check out this codepen](https://codepen.io/braintree/pen/KjWqGx).\n * @param {callback} [callback] May be used as the only parameter in requestPaymentMethod if no `options` are provided. The first argument will be an error if no payment method is available and will otherwise be null. The second argument will be an object containing a payment method nonce; either a {@link Dropin~cardPaymentMethodPayload|cardPaymentMethodPayload}, a {@link Dropin~paypalPaymentMethodPayload|paypalPaymentMethodPayload}, a {@link Dropin~venmoPaymentMethodPayload|venmoPaymentMethodPayload}, a {@link Dropin~googlePayPaymentMethodPayload|googlePayPaymentMethodPayload} or an {@link Dropin~applePayPaymentMethodPayload|applePayPaymentMethodPayload}. If no callback is provided, `requestPaymentMethod` will return a promise.\n * @returns {(void|Promise)} Returns a promise if no callback is provided.\n * @example <caption>Requesting a payment method</caption>\n * var form = document.querySelector('#my-form');\n * var hiddenNonceInput = document.querySelector('#my-nonce-input');\n *\n * form.addEventListener('submit', function (event) {\n *  event.preventDefault();\n *\n *  dropinInstance.requestPaymentMethod(function (err, payload) {\n *    if (err) {\n *      // handle error\n *      return;\n *    }\n *    hiddenNonceInput.value = payload.nonce;\n *    form.submit();\n *  });\n * });\n * @example <caption>Requesting a payment method with data collector</caption>\n * var form = document.querySelector('#my-form');\n * var hiddenNonceInput = document.querySelector('#my-nonce-input');\n * var hiddenDeviceDataInput = document.querySelector('#my-device-data-input');\n *\n * form.addEventListener('submit', function (event) {\n *  event.preventDefault();\n *\n *  dropinInstance.requestPaymentMethod(function (err, payload) {\n *    if (err) {\n *      // handle error\n *      return;\n *    }\n *    hiddenNonceInput.value = payload.nonce;\n *    hiddenDeviceDataInput.value = payload.deviceData;\n *    form.submit();\n *  });\n * });\n *\n * @example <caption>Requesting a payment method with 3D Secure</caption>\n * var form = document.querySelector('#my-form');\n * var hiddenNonceInput = document.querySelector('#my-nonce-input');\n *\n * form.addEventListener('submit', function (event) {\n *  event.preventDefault();\n *\n *  dropinInstance.requestPaymentMethod(function (err, payload) {\n *    if (err) {\n *      // Handle error\n *      return;\n *    }\n *\n *    if (payload.liabilityShifted || (payload.type !== 'CreditCard' && payload.type !== 'AndroidPayCard')) {\n *      hiddenNonceInput.value = payload.nonce;\n *      form.submit();\n *    } else {\n *      // Decide if you will force the user to enter a different payment method\n *      // if liability was not shifted\n *      dropinInstance.clearSelectedPaymentMethod();\n *    }\n *  });\n * });\n */\nDropin.prototype.requestPaymentMethod = function (options) {\n  // NEXT_MAJOR_VERSION\n  // what should happen when this method is called while a payment\n  // method is already being requested? Should it error? Should\n  // they both resolve with the payload from the original request?\n  // this is only important because when doing 3ds, multiple\n  // requests in quick succession can get you into a state\n  // where it errors because the 3ds verification is called twice\n  var self = this;\n\n  options = options || {};\n\n  return this._mainView.requestPaymentMethod().then(function (payload) {\n    if (self._shouldPerformThreeDSecureVerification(payload)) {\n      self._mainView.showLoadingIndicator();\n\n      return self._threeDSecure.verify(payload, options.threeDSecure).then(function (newPayload) {\n        payload.nonce = newPayload.nonce;\n        payload.liabilityShifted = newPayload.liabilityShifted;\n        payload.liabilityShiftPossible = newPayload.liabilityShiftPossible;\n        payload.threeDSecureInfo = newPayload.threeDSecureInfo;\n\n        self._mainView.hideLoadingIndicator();\n\n        return payload;\n      }).catch(function (err) {\n        self.clearSelectedPaymentMethod();\n\n        return self._model.refreshPaymentMethods().then(function () {\n          self._mainView.hideLoadingIndicator();\n\n          return Promise.reject(new DropinError({\n            message: 'Something went wrong during 3D Secure authentication. Please try again.',\n            braintreeWebError: err\n          }));\n        });\n      });\n    }\n\n    return payload;\n  }).then(function (payload) {\n    if (self._dataCollector) {\n      payload.deviceData = self._dataCollector.getDeviceData();\n    }\n\n    return payload;\n  }).then(function (payload) {\n    return formatPaymentMethodPayload(payload);\n  });\n};\n\nDropin.prototype._shouldPerformThreeDSecureVerification = function (payload) {\n  if (!this._threeDSecure) {\n    return false;\n  }\n\n  if (payload.liabilityShifted != null) {\n    return false;\n  }\n\n  if (payload.type === constants.paymentMethodTypes.card) {\n    return true;\n  }\n\n  if (payload.type === constants.paymentMethodTypes.googlePay && payload.details.isNetworkTokenized === false) {\n    return true;\n  }\n\n  return false;\n};\n\nDropin.prototype._removeStylesheet = function () {\n  var stylesheet = document.getElementById(constants.STYLESHEET_ID);\n\n  if (stylesheet) {\n    stylesheet.parentNode.removeChild(stylesheet);\n  }\n};\n\nDropin.prototype._injectStylesheet = function () {\n  var assetsUrl;\n  var loadStylesheetOptions = {\n    id: constants.STYLESHEET_ID\n  };\n\n  if (document.getElementById(constants.STYLESHEET_ID)) { return; }\n\n  assetsUrl = this._client.getConfiguration().gatewayConfiguration.assetsUrl;\n  loadStylesheetOptions.href = assetsUrl + '/web/dropin/' + VERSION + '/css/dropin.css';\n\n  if (this._model.isInShadowDom) {\n    // if Drop-in is in the shadow DOM, put the\n    // style sheet in the shadow DOM node instead of\n    // in the head of the document\n    loadStylesheetOptions.container = this._model.rootNode;\n  }\n\n  assets.loadStylesheet(loadStylesheetOptions);\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web-drop-in|dropin.create}. This may be be useful in a single-page app.\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. No data is returned if teardown completes successfully. If no callback is provided, `teardown` will return a promise.\n * @returns {(void|Promise)} Returns a promise if no callback is provided.\n */\nDropin.prototype.teardown = function () {\n  var teardownError;\n  var promise = Promise.resolve();\n  var self = this;\n\n  this._removeStylesheet();\n\n  if (this._mainView) {\n    promise.then(function () {\n      return self._mainView.teardown().catch(function (err) {\n        teardownError = err;\n      });\n    });\n  }\n\n  if (this._dataCollector) {\n    promise.then(function () {\n      return this._dataCollector.teardown().catch(function (error) {\n        teardownError = new DropinError({\n          message: 'Drop-in errored tearing down Data Collector.',\n          braintreeWebError: error\n        });\n      });\n    }.bind(this));\n  }\n\n  if (this._threeDSecure) {\n    promise.then(function () {\n      return this._threeDSecure.teardown().catch(function (error) {\n        teardownError = new DropinError({\n          message: 'Drop-in errored tearing down 3D Secure.',\n          braintreeWebError: error\n        });\n      });\n    }.bind(this));\n  }\n\n  return promise.then(function () {\n    return self._removeDropinWrapper();\n  }).then(function () {\n    if (teardownError) {\n      return Promise.reject(teardownError);\n    }\n\n    return Promise.resolve();\n  });\n};\n\n/**\n * Returns a boolean indicating if a payment method is available through {@link Dropin#requestPaymentMethod|requestPaymentMethod}. Particularly useful for detecting if using a client token with a customer ID to show vaulted payment methods.\n * @public\n * @returns {Boolean} True if a payment method is available, otherwise false.\n */\nDropin.prototype.isPaymentMethodRequestable = function () {\n  return this._model.isPaymentMethodRequestable();\n};\n\nDropin.prototype._removeDropinWrapper = function () {\n  this._dropinWrapper.parentNode.removeChild(this._dropinWrapper);\n\n  return Promise.resolve();\n};\n\nfunction formatPaymentMethodPayload(paymentMethod) {\n  var formattedPaymentMethod = {\n    nonce: paymentMethod.nonce,\n    details: paymentMethod.details,\n    type: paymentMethod.type\n  };\n\n  if (paymentMethod.vaulted != null) {\n    formattedPaymentMethod.vaulted = paymentMethod.vaulted;\n  }\n\n  if (paymentMethod.type === constants.paymentMethodTypes.card) {\n    formattedPaymentMethod.description = paymentMethod.description;\n  }\n\n  if (paymentMethod.type in HAS_RAW_PAYMENT_DATA) {\n    formattedPaymentMethod.details.rawPaymentData = paymentMethod.rawPaymentData;\n  }\n\n  if (typeof paymentMethod.liabilityShiftPossible === 'boolean') {\n    formattedPaymentMethod.liabilityShifted = paymentMethod.liabilityShifted;\n    formattedPaymentMethod.liabilityShiftPossible = paymentMethod.liabilityShiftPossible;\n  }\n\n  if (paymentMethod.threeDSecureInfo) {\n    formattedPaymentMethod.threeDSecureInfo = paymentMethod.threeDSecureInfo;\n  }\n\n  if (paymentMethod.deviceData) {\n    formattedPaymentMethod.deviceData = paymentMethod.deviceData;\n  }\n\n  if (paymentMethod.binData) {\n    formattedPaymentMethod.binData = paymentMethod.binData;\n  }\n\n  return formattedPaymentMethod;\n}\n\nmodule.exports = wrapPrototype(Dropin);\n\n},{\"./constants\":196,\"./dropin-model\":197,\"./lib/analytics\":201,\"./lib/assign\":202,\"./lib/data-collector\":205,\"./lib/dropin-error\":206,\"./lib/is-utf-8\":210,\"./lib/promise\":213,\"./lib/sanitize-html\":214,\"./lib/three-d-secure\":216,\"./translations\":237,\"./views/main-view\":256,\"./views/payment-methods-view\":258,\"@braintree/asset-loader\":1,\"@braintree/class-list\":40,\"@braintree/event-emitter\":41,\"@braintree/uuid\":47,\"@braintree/wrap-promise\":51}],199:[function(require,module,exports){\n'use strict';\n/**\n * @module braintree-web-drop-in\n * @description There are two ways to integrate Drop-in into your page: a script tag integration and a JavaScript integration using [`dropin.create`](#.create).\n *\n * The script tag integration is the fastest way to integrate. All you need to do is add the Drop-in script inside your form element where you want Drop-in to appear and include a `data-braintree-dropin-authorization` property with your [tokenization key](https://developer.paypal.com/braintree/docs/guides/authorization/tokenization-key/javascript/v3) or [client token](https://developer.paypal.com/braintree/docs/guides/authorization/client-token).\n *\n * When your form is submitted, Drop-in will intercept the form submission and attempt to tokenize the payment method. If the tokenization is successful, it will insert the payment method nonce into a hidden input with the name `payment_method_nonce` and then submit your form. If the tokenization is unsuccessful, a relevant error will be shown in the UI.\n *\n * If you have data collector enabled, the device data will be injected into a hidden input with the name `device_data` before form submission.\n *\n * Specify creation options as data attributes in your script tag, as shown in the examples below. The following configuration properties may be set:\n *\n * * `data-locale`\n * * `data-card.cardholder-name.required`\n * * `data-payment-option-priority`\n * * `data-data-collector.kount`\n * * `data-data-collector.paypal`\n * * `data-paypal.amount`\n * * `data-paypal.currency`\n * * `data-paypal.flow`\n * * `data-paypal-credit.amount`\n * * `data-paypal-credit.currency`\n * * `data-paypal-credit.flow`\n *\n * For more control and customization, use [`dropin.create` instead](#.create).\n *\n * See our [demo app](../../script-tag-integration.html) for an example of using our script tag integration.\n *\n * @example\n * <caption>A full example accepting only cards</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <form id=\"payment-form\" action=\"/\" method=\"post\">\n *       <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *        data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *       ></script>\n *       <input type=\"submit\" value=\"Purchase\"></input>\n *     </form>\n *   </body>\n * </html>\n *\n * @example\n * <caption>A full example accepting cards, PayPal, and PayPal credit</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <form id=\"payment-form\" action=\"/\" method=\"post\">\n *       <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *        data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *        data-paypal.flow=\"checkout\"\n *        data-paypal.amount=\"10.00\"\n *        data-paypal.currency=\"USD\"\n *        data-paypal-credit.flow=\"vault\"\n *       ></script>\n *       <input type=\"submit\" value=\"Purchase\"></input>\n *     </form>\n *   </body>\n * </html>\n *\n * @example\n * <caption>Specifying a locale and payment option priority</caption>\n * <form id=\"payment-form\" action=\"/\" method=\"post\">\n *   <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *    data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *    data-locale=\"de_DE\"\n *    data-payment-option-priority='[\"paypal\",\"card\", \"paypalCredit\"]'\n *    data-paypal.flow=\"checkout\"\n *    data-paypal.amount=\"10.00\"\n *    data-paypal.currency=\"USD\"\n *    data-paypal-credit.flow=\"vault\"\n *   ></script>\n *   <input type=\"submit\" value=\"Purchase\"></input>\n * </form>\n *\n * @example\n * <caption>Including an optional cardholder name field in card form</caption>\n * <form id=\"payment-form\" action=\"/\" method=\"post\">\n *   <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *    data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *    data-card.cardholder-name.required=\"false\"\n *   ></script>\n *   <input type=\"submit\" value=\"Purchase\"></input>\n * </form>\n *\n * @example\n * <caption>Including a required cardholder name field in card form</caption>\n * <form id=\"payment-form\" action=\"/\" method=\"post\">\n *   <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *    data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *    data-card.cardholder-name.required=\"true\"\n *   ></script>\n *   <input type=\"submit\" value=\"Purchase\"></input>\n * </form>\n */\n\nvar Dropin = require('./dropin');\nvar client = require('braintree-web/client');\nvar createFromScriptTag = require('./lib/create-from-script-tag');\nvar constants = require('./constants');\nvar analytics = require('./lib/analytics');\nvar DropinError = require('./lib/dropin-error');\nvar Promise = require('./lib/promise');\nvar wrapPromise = require('@braintree/wrap-promise');\n\nvar VERSION = '1.33.7';\n\n/**\n * @typedef {object} cardCreateOptions The configuration options for cards. Internally, Drop-in uses [Hosted Fields](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_hosted-fields.html) to render the card form. The `overrides.fields` and `overrides.styles` allow the Hosted Fields to be customized.\n *\n * @param {(boolean|object)} [cardholderName] Will enable a cardholder name field above the card number field. If set to an object, you can specify whether or not the field is required. If set to a `true`, it will default the field to being present, but not required.\n * @param {boolean} [cardholderName.required=false] When true, the cardholder name field will be required to request the payment method nonce.\n * @param {object} [overrides.fields] The Hosted Fields [`fields` options](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_hosted-fields.html#~fieldOptions). Only `number`, `cvv`, `expirationDate` and `postalCode` can be configured. Each is a [Hosted Fields `field` object](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_hosted-fields.html#~field). `selector` cannot be modified.\n * @param {object} [overrides.styles] The Hosted Fields [`styles` options](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_hosted-fields.html#~styleOptions). These can be used to add custom styles to the Hosted Fields iframes. To style the rest of Drop-in, [review the documentation for customizing Drop-in](https://developer.paypal.com/braintree/docs/guides/drop-in/customization/javascript/v3#customize-your-ui).\n * @param {boolean} [clearFieldsAfterTokenization=true] When false, the card form will not clear the card data when the customer returns to the card view after a successful tokenization.\n * @param {object} [vault] Configuration for vaulting credit cards. Only applies when using a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id).\n * @param {boolean} [vault.allowVaultCardOverride=false] When true, the card form will include an option to let the customer decide not to vault the credit card they enter.\n * @param {boolean} [vault.vaultCard=true] Whether or not to vault the card upon tokenization. When set to `false` with `allowVaultCardOverride` set to `false`, then cards will not be vaulted.\n */\n\n/**\n * @typedef {object} dataCollectorOptions The configuration options for Data Collector. Requires [advanced fraud protection](https://developer.paypal.com/braintree/docs/guides/premium-fraud-management-tools/client-side/javascript/v3) to be enabled in the Braintree gateway. If using Kount, contact our [support team](https://developer.paypal.com/braintree/help) to configure your Kount ID. The device data will be included on the {@link Dropin#requestPaymentMethod|requestPaymentMethod payload}.\n *\n * @param {boolean} [kount] If true, Kount fraud data collection is enabled.\n */\n\n/**\n * @typedef {object} threeDSecureOptions Configuration options to pass when creating the 3D Secure module used in Drop-in. `amount` for 3D Secure verification can be passed here, but it's recomended that it and all other 3D Secure verification options be passed to the {@link Dropin#requestPaymentMethod|requestPaymentMethod options} instead. Any `cardinalSDKConfig` options must be passed here when creating Drop-in.\n *\n * @param {options} cardinalSDKConfig A configuration object to adjust the configuration for the underlying Cardinal SDK (Braintree's 3D Secure provider). See [`cardinalSDKConfig` options](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_three-d-secure.html#.create) for all options.\n * @param {string} amount __Deprecated__ The amount to verify with 3D Secure. Set amount in the {@link Dropin#requestPaymentMethod|requestPaymentMethod options} instead.\n */\n\n/** @typedef {object} paypalCreateOptions The configuration options for PayPal and PayPalCredit. For a full list of options see the [PayPal Checkout client reference options](http://braintree.github.io/braintree-web/3.88.3/PayPalCheckout.html#createPayment).\n *\n * @param {string} flow Either `checkout` for a one-time [Checkout with PayPal](https://developer.paypal.com/braintree/docs/guides/paypal/checkout-with-paypal/javascript/v3) flow or `vault` for a [Vault flow](https://developer.paypal.com/braintree/docs/guides/paypal/vault/javascript/v3). Required when using PayPal or PayPal Credit.\n * @param {(string|number)} [amount] The amount of the transaction. Required when using the Checkout flow.\n * @param {string} [currency] The currency code of the amount, such as `USD`. Required when using the Checkout flow.\n * @param {object} [buttonStyle] The style object to apply to the PayPal button. Button customization includes color, shape, size, and label. The options [found here](https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/customize-button/#button-styles) are available.\n * @param {boolean} [commit] The user action to show on the PayPal review page. If true, a `Pay Now` button will be shown. If false, a `Continue` button will be shown.\n * @param {object} [vault] Configuration for vaulting PayPal accounts. Only applies when using a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id).\n * @param {boolean} [vault.vaultPayPal=true] Whether or not to vault the PayPal account upon tokenization.\n */\n\n/** @typedef {object} applePayCreateOptions The configuration options for Apple Pay.\n *\n * @param {string} [buttonStyle=black] Configures the Apple Pay button style. Valid values are `black`, `white`, `white-outline`.\n * @param {string} displayName The canonical name for your store. Use a non-localized name. This parameter should be a utf-8 string that is a maximum of 128 characters. The system may display this name to the user.\n * @param {number} [applePaySessionVersion=2] The [version of the `ApplePaySession`](https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_on_the_web_version_history) to use. It's recommended to use the lowest version that contains all the features you need for your checkout to maximize compatibility.\n * @param {external:ApplePayPaymentRequest} paymentRequest The payment request details to apply on top of those from Braintree.\n */\n\n/** @typedef {object} googlePayCreateOptions The configuration options for Google Pay. Additional options from the few listed here are available, many have default values applied based on the settings found in the Braintree Gateway. For more information, see [Google's Documentation](https://developers.google.com/pay/api/web/object-reference#request-objects).\n *\n * @param {string} merchantId The ID provided by Google for processing transactions in production. Not necessary for testing in sandbox.\n * @param {string} [googlePayVersion=1] The version of the Google Pay API to use. Defaults to 1, but 2 can be passed in.\n * @param {external:GooglePayTransactionInfo} transactionInfo The transaction details necessary for processing the payment.\n * @param {external:GooglePayButtonOptions} [button] The button options for configuring the look of the Google Pay button. The `onClick` property cannot be overwritten.\n */\n\n/**\n * @typedef {object} ApplePayPaymentRequest An [Apple Pay Payment Request object](https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types/paymentrequest).\n * @external ApplePayPaymentRequest\n * @see {@link https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types/paymentrequest PaymentRequest}\n */\n\n/**\n * @typedef {object} GooglePayTransactionInfo A [Google Pay TransactionInfo object](https://developers.google.com/pay/api/web/object-reference#TransactionInfo).\n * @external GooglePayTransactionInfo\n * @see {@link https://developers.google.com/pay/api/web/object-reference#TransactionInfo TransactionInfo}\n */\n\n/**\n * @typedef {object} GooglePayButtonOptions A [Google Pay ButtonOptions object](https://developers.google.com/pay/api/web/reference/object#ButtonOptions).\n * @external GooglePayButtonOptions\n * @see {@link https://developers.google.com/pay/api/web/reference/object#ButtonOptions ButtonOptions}\n */\n\n/** @typedef {(object|boolean)} venmoCreateOptions The configuration options for Venmo. If `true` is passed instead of a configuration object, the default settings listed will be used.\n *\n * @param {boolean} [allowNewBrowserTab=true] If false, it restricts supported browsers to those that can app switch to the Venmo app without opening a new tab.\n */\n\n/**\n * @static\n * @function create\n * @description This function is the entry point for `braintree.dropin`. It is used for creating {@link Dropin} instances.\n * @param {object} options Object containing all {@link Dropin} options:\n * @param {string} options.authorization A [tokenization key](https://developer.paypal.com/braintree/docs/guides/authorization/tokenization-key/javascript/v3) or a [client token](https://developer.paypal.com/braintree/docs/guides/authorization/client-token). If authorization is a client token created with a [customer ID](https://developer.paypal.com/braintree/docs/guides/drop-in/customization/javascript/v3#display-a-saved-payment-method), Drop-in will render saved payment methods and automatically store any newly-added payment methods in their Vault record.\n * @param {(string|HTMLElement)} options.container A reference to an empty element, such as a `<div>`, where Drop-in will be included on your page or the selector for the empty element. e.g. `#dropin-container`.\n * @param {string} options.selector Deprecated: Now an alias for `options.container`.\n * @param {string} [options.locale=`en_US`] Use this option to change the language, links, and terminology used throughout Drop-in. Supported locales include:\n * `ar_EG`,\n * `cs_CZ`,\n * `da_DK`,\n * `de_DE`,\n * `el_GR`,\n * `en_AU`,\n * `en_GB`,\n * `en_IN`,\n * `en_US`,\n * `es_ES`,\n * `es_XC`,\n * `fi_FI`,\n * `fr_CA`,\n * `fr_FR`,\n * `fr_XC`,\n * `he_IL`,\n * `hu_HU`,\n * `id_ID`,\n * `it_IT`,\n * `ja_JP`,\n * `ko_KR`,\n * `nl_NL`,\n * `no_NO`,\n * `pl_PL`,\n * `pt_BR`,\n * `pt_PT`,\n * `ru_RU`,\n * `sk_SK`,\n * `sv_SE`,\n * `th_TH`,\n * `zh_CN`,\n * `zh_HK`,\n * `zh_TW`,\n * `zh_XC`.\n *\n * @param {object} [options.translations] To use your own translations, pass an object with the strings you wish to replace. This object must use the same structure as the object used internally for supported translations, which can be found [here](https://github.com/braintree/braintree-web-drop-in/blob/main/src/translations/en_US.js). Any strings that are not included will be those from the provided `locale` or `en_US` if no `locale` is provided. See below for an example of creating Drop-in with custom translations.\n * @param {array} [options.paymentOptionPriority] Use this option to indicate the order in which enabled payment options should appear when multiple payment options are enabled. By default, payment options will appear in this order: `['card', 'paypal', 'paypalCredit', 'venmo', 'applePay', 'googlePay']`. Payment options omitted from this array will not be offered to the customer.\n *\n * @param {(boolean|object)} [options.card] The configuration options for cards. See [`cardCreateOptions`](#~cardCreateOptions) for all `card` options. If this option is omitted, cards will still appear as a payment option. To remove cards, pass `false` for the value.\n * @param {object} [options.paypal] The configuration options for PayPal. To include a PayPal option in your Drop-in integration, include the `paypal` parameter and [enable PayPal in the Braintree Control Panel](https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#go-live). To test in Sandbox, you will need to [link a PayPal sandbox test account to your Braintree sandbox account](https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#linked-paypal-testing).\n *\n * Some of the PayPal configuration options are listed [here](#~paypalCreateOptions), but for a full list see the [PayPal Checkout client reference options](http://braintree.github.io/braintree-web/3.88.3/PayPalCheckout.html#createPayment).\n *\n * PayPal is not [supported in Internet Explorer versions lower than 11](https://developer.paypal.com/docs/archive/checkout/reference/faq/#link-whichbrowsersdoespaypalcheckoutsupport).\n *\n * @param {object} [options.paypalCredit] The configuration options for PayPal Credit. To include a PayPal Credit option in your Drop-in integration, include the `paypalCredit` parameter and [enable PayPal in the Braintree Control Panel](https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#go-live).\n *\n * Some of the PayPal Credit configuration options are listed [here](#~paypalCreateOptions), but for a full list see the [PayPal Checkout client reference options](http://braintree.github.io/braintree-web/3.88.3/PayPalCheckout.html#createPayment). For more information on PayPal Credit, see the [Braintree Developer Docs](https://developer.paypal.com/braintree/docs/guides/paypal/paypal-credit/javascript/v3).\n *\n * PayPal Credit is not [supported in Internet Explorer versions lower than 11](https://developer.paypal.com/docs/archive/checkout/reference/faq/#link-whichbrowsersdoespaypalcheckoutsupport).\n *\n * @param {(object|boolean)} [options.venmo] The configuration options for Pay with Venmo. To include a Venmo option in your Drop-in integration, include the `venmo` parameter and [follow the documentation for setting up Venmo in the Braintree control panel](https://articles.braintreepayments.com/guides/payment-methods/venmo#setup). If a user's browser does not support Venmo, the Venmo option will not be rendered.\n *\n * See [`venmoCreateOptions`](#~venmoCreateOptions) for `venmo` options.\n *\n * @param {object} [options.applePay] The configuration options for Apple Pay. To include an Apple Pay option in your Drop-in integration, include the `applePay` parameter and [enable Apple Pay in the Braintree Control Panel](https://developer.paypal.com/braintree/docs/guides/apple-pay/configuration/javascript/v3). If a user's browser does not support Apple Pay, the Apple Pay option will not be rendered. See [Apple's documentation](https://support.apple.com/en-us/HT201469) for browser and device support.\n *\n * See [`applePayCreateOptions`](#~applePayCreateOptions) for `applePay` options.\n *\n * @param {object} [options.googlePay] The configuration options for Google Pay. To include a Google Pay option in your Drop-in integration, include the `googlePay` parameter and [enable Google Pay in the Braintree Control Panel](https://developer.paypal.com/braintree/docs/guides/google-pay/configuration/javascript/v3). If a user's browser does not support Google Pay, the Google Pay option will not be rendered. See [Google's documentation](https://developers.google.com/pay/api/web/test-and-deploy) for browser and device support.\n *\n * See [`googlePayCreateOptions`](#~googlePayCreateOptions) for `googlePay` options.\n *\n * @param {object|boolean} [options.dataCollector] If `true` is passed, Drop-in will be configured to collect data for use with Advanced Fraud Protection. If collecting data via Kount, pass a [`dataCollectorOptions` object](#~dataCollectorOptions) with `kount: true` instead. If Data Collector is configured and fails to load, Drop-in creation will fail.\n *\n * @param {(boolean|object)} [options.threeDSecure] When `true` is passed, the 3D Secure module will be created with a default configuration. See [`threeDSecureOptions`](#~threeDSecureOptions) for additional create options. If 3D Secure is configured and fails to load, Drop-in creation will fail.\n *\n * @param {boolean} [options.vaultManager=false] Whether or not to allow a customer to delete saved payment methods when used with a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id). *Note:* Deleting a payment method from Drop-in will permanently delete the payment method, so this option is not recommended for merchants using Braintree's recurring billing system. This feature is not supported in Internet Explorer 9.\n *\n * @param {boolean} [options.preselectVaultedPaymentMethod=true] Whether or not to initialize Drop-in with a vaulted payment method pre-selected. Only applicable when using a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id) and a customer with saved payment methods.\n *\n * @param {boolean} [options.showDefaultPaymentMethodFirst=true] When `true` or left out, the customer's default payment method will be displayed first in the list of vaulted payment methods. When `false`, the order of the displayed payment methods is not guaranteed. Only applicable when using a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id) and a customer with saved payment methods.\n *\n * @param {function} [callback] The second argument, `data`, is the {@link Dropin} instance. Returns a promise if no callback is provided.\n * @returns {(void|Promise)} Returns a promise if no callback is provided.\n * @example\n * <caption>A full example of accepting credit cards with callback API</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <div id=\"dropin-container\"></div>\n *     <button id=\"submit-button\">Purchase</button>\n *\n *     <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"></script>\n *\n *     <script>\n *       var submitButton = document.querySelector('#submit-button');\n *\n *       braintree.dropin.create({\n *         authorization: 'CLIENT_AUTHORIZATION',\n *         container: '#dropin-container'\n *       }, function (err, dropinInstance) {\n *         if (err) {\n *           // Handle any errors that might've occurred when creating Drop-in\n *           console.error(err);\n *           return;\n *         }\n *         submitButton.addEventListener('click', function () {\n *           dropinInstance.requestPaymentMethod(function (err, payload) {\n *             if (err) {\n *               // Handle errors in requesting payment method\n *             }\n *\n *             // Send payload.nonce to your server\n *           });\n *         });\n *       });\n *     </script>\n *   </body>\n * </html>\n * @example\n * <caption>A full example of accepting credit cards with promise API</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <div id=\"dropin-container\"></div>\n *     <button id=\"submit-button\">Purchase</button>\n *\n *     <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"></script>\n *\n *     <script>\n *       var submitButton = document.querySelector('#submit-button');\n *\n *       braintree.dropin.create({\n *         authorization: 'CLIENT_AUTHORIZATION',\n *         container: '#dropin-container'\n *       }).then(function (dropinInstance) {\n *         submitButton.addEventListener('click', function () {\n *           dropinInstance.requestPaymentMethod().then(function (payload) {\n *             // Send payload.nonce to your server\n *           }).catch(function (err) {\n *             // Handle errors in requesting payment method\n *           });\n *         });\n *       }).catch(function (err) {\n *         // Handle any errors that might've occurred when creating Drop-in\n *         console.error(err);\n *       });\n *     </script>\n *   </body>\n * </html>\n * @example\n * <caption>Setting up a Drop-in instance to accept credit cards, PayPal, PayPal Credit, Venmo, and Apple Pay</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   applePay: {\n *     displayName: 'Merchant Name',\n *     paymentRequest: {\n *       total: {\n *         label: 'Localized Name',\n *         amount: '10.00'\n *       }\n *     }\n *   },\n *   paypal: {\n *     flow: 'checkout',\n *     amount: '10.00',\n *     currency: 'USD'\n *   },\n *  paypalCredit: {\n *    flow: 'checkout',\n *    amount: '10.00',\n *    currency: 'USD'\n *   },\n *   venmo: true\n * }, function (err, dropinInstance) {\n *   // Set up a handler to request a payment method and\n *   // submit the payment method nonce to your server\n * });\n * @example\n * <caption>Setting up a Drop-in instance to accept Venmo with restricted browser support</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   venmo: {\n *     allowNewBrowserTab: false\n *   }\n * }, function (err, dropinInstance) {\n *   // Set up a handler to request a payment method and\n *   // submit the payment method nonce to your server\n * });\n *\n * @example\n * <caption>Submitting the payment method nonce to the server using a form</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <form id=\"payment-form\" action=\"/\" method=\"post\">\n *       <div id=\"dropin-container\"></div>\n *       <input type=\"submit\" value=\"Purchase\"></input>\n *       <input type=\"hidden\" id=\"nonce\" name=\"payment_method_nonce\"></input>\n *     </form>\n *\n *     <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"></script>\n *\n *     <script>\n *       var form = document.querySelector('#payment-form');\n *       var nonceInput = document.querySelector('#nonce');\n *\n *       braintree.dropin.create({\n *         authorization: 'CLIENT_AUTHORIZATION',\n *         container: '#dropin-container'\n *       }, function (err, dropinInstance) {\n *         if (err) {\n *           // Handle any errors that might've occurred when creating Drop-in\n *           console.error(err);\n *           return;\n *         }\n *         form.addEventListener('submit', function (event) {\n *           event.preventDefault();\n *\n *           dropinInstance.requestPaymentMethod(function (err, payload) {\n *             if (err) {\n *               // Handle errors in requesting payment method\n *               return;\n *             }\n *\n *             // Send payload.nonce to your server\n *             nonceInput.value = payload.nonce;\n *             form.submit();\n *           });\n *         });\n *       });\n *     </script>\n *   </body>\n * </html>\n *\n * @example\n * <caption>Use your own translations</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   translations: {\n *     payingWith: 'You are paying with {{paymentSource}}',\n *     chooseAnotherWayToPay: 'My custom chooseAnotherWayToPay string',\n *     // Any other custom translation strings\n *   }\n * }, callback);\n *\n * @example\n * <caption>Customizing Drop-in with card form overrides</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   card: {\n *     overrides: {\n *       fields: {\n *         number: {\n *           placeholder: '1111 1111 1111 1111' // Update the number field placeholder\n *         },\n *         postalCode: {\n *           minlength: 5 // Set the minimum length of the postal code field\n *         },\n *         cvv: null // Remove the CVV field from your form\n *       },\n *       styles: {\n *         input: {\n *           'font-size': '18px' // Change the font size for all inputs\n *         },\n *         ':focus': {\n *           color: 'red' // Change the focus color to red for all inputs\n *         }\n *       }\n *     }\n *   }\n * }, callback);\n *\n * @example\n * <caption>Mask Card Inputs</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   card: {\n *     overrides: {\n *       fields: {\n *         number: {\n *           maskInput: {\n *             showLastFour: true\n *           }\n *         },\n *         cvv: {\n *           maskInput: true\n *         }\n *       }\n *     }\n *   }\n * }, callback);\n *\n * @example\n * <caption>Including a cardholder name field</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   card: {\n *     cardholderName: true\n *   }\n * }, callback);\n *\n * @example\n * <caption>Including a required cardholder name field</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   card: {\n *     cardholderName: {\n *       required: true\n *     }\n *   }\n * }, callback);\n *\n * @example\n * <caption>Enabling 3D Secure</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   threeDSecure: true\n * }, function (err, dropinInstance) {\n *   // setup payment button\n *   btn.addEventListener('click', function (e) {\n *     e.preventDefault();\n *\n *     dropinInstance.requestPaymentMethod(|\n *       threeDSecure: {\n *         amount: '100.00',\n *         billingAddress: {\n *           givenName: 'Jill', // ASCII-printable characters required, else will throw a validation error\n *           surname: 'Doe', // ASCII-printable characters required, else will throw a validation error\n *           phoneNumber: '8101234567',\n *           streetAddress: '555 Smith St.',\n *           extendedAddress: '#5',\n *           locality: 'Oakland',\n *           region: 'CA',\n *           postalCode: '12345',\n *           countryCodeAlpha2: 'US'\n *         },\n *         // additional 3ds params\n *       }\n *     }, function (err, payload) {\n *       // inspect payload.liablityShifted\n *       // send payload.nonce to server\n *     });\n *   });\n * });\n *\n * @example\n * <caption>Enabled Vault Manager</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   vaultManager: true\n * }, callback);\n */\n\nfunction create(options) {\n  if (!options.authorization) {\n    return Promise.reject(new DropinError('options.authorization is required.'));\n  }\n\n  return client.create({\n    authorization: options.authorization\n  }).catch(function (err) {\n    return Promise.reject(new DropinError({\n      message: 'There was an error creating Drop-in.',\n      braintreeWebError: err\n    }));\n  }).then(function (clientInstance) {\n    clientInstance = setAnalyticsIntegration(clientInstance);\n\n    if (clientInstance.getConfiguration().authorizationType === 'TOKENIZATION_KEY') {\n      analytics.sendEvent(clientInstance, 'started.tokenization-key');\n    } else {\n      analytics.sendEvent(clientInstance, 'started.client-token');\n    }\n\n    return new Promise(function (resolve, reject) {\n      new Dropin({\n        merchantConfiguration: options,\n        client: clientInstance\n      })._initialize(function (err, instance) {\n        if (err) {\n          reject(err);\n\n          return;\n        }\n\n        resolve(instance);\n      });\n    });\n  });\n}\n\nfunction setAnalyticsIntegration(clientInstance) {\n  var configuration = clientInstance.getConfiguration();\n\n  configuration.analyticsMetadata.integration = constants.INTEGRATION;\n  configuration.analyticsMetadata.integrationType = constants.INTEGRATION;\n  configuration.analyticsMetadata.dropinVersion = VERSION;\n\n  clientInstance.getConfiguration = function () {\n    return configuration;\n  };\n\n  return clientInstance;\n}\n\n// we check for document's existence to support server side rendering\ncreateFromScriptTag(create, typeof document !== 'undefined' && document.querySelector('script[data-braintree-dropin-authorization]'));\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of Drop-in, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION\n};\n\n},{\"./constants\":196,\"./dropin\":198,\"./lib/analytics\":201,\"./lib/create-from-script-tag\":204,\"./lib/dropin-error\":206,\"./lib/promise\":213,\"@braintree/wrap-promise\":51,\"braintree-web/client\":60}],200:[function(require,module,exports){\n'use strict';\n\nfunction addSelectionEventHandler(element, func) {\n  element.addEventListener('click', func);\n  element.addEventListener('keyup', function (event) {\n    if (event.keyCode === 13) {\n      func();\n    }\n  });\n}\n\nmodule.exports = addSelectionEventHandler;\n\n},{}],201:[function(require,module,exports){\n'use strict';\n\nvar atob = require('./polyfill').atob;\nvar constants = require('../constants');\nvar braintreeClientVersion = require('braintree-web/client').VERSION;\n\nfunction _millisToSeconds(millis) {\n  return Math.floor(millis / 1000);\n}\n\nfunction sendAnalyticsEvent(client, kind, callback) {\n  var configuration = client.getConfiguration();\n  var analyticsRequest = client._request;\n  var timestamp = _millisToSeconds(Date.now());\n  var url = configuration.gatewayConfiguration.analytics.url;\n  var data = {\n    analytics: [{\n      kind: constants.ANALYTICS_PREFIX + kind,\n      timestamp: timestamp\n    }],\n    _meta: configuration.analyticsMetadata,\n    braintreeLibraryVersion: braintreeClientVersion\n  };\n\n  if (configuration.authorizationType === 'TOKENIZATION_KEY') {\n    data.tokenizationKey = configuration.authorization;\n  } else {\n    data.authorizationFingerprint = JSON.parse(atob(configuration.authorization)).authorizationFingerprint;\n  }\n\n  analyticsRequest({\n    url: url,\n    method: 'post',\n    data: data,\n    timeout: constants.ANALYTICS_REQUEST_TIMEOUT_MS\n  }, callback);\n}\n\nmodule.exports = {\n  sendEvent: sendAnalyticsEvent\n};\n\n},{\"../constants\":196,\"./polyfill\":212,\"braintree-web/client\":60}],202:[function(require,module,exports){\n'use strict';\n\nvar assignNormalized = typeof Object.assign === 'function' ? Object.assign : assignPolyfill;\n\nfunction assignPolyfill(destination) {\n  var i, source, key;\n\n  for (i = 1; i < arguments.length; i++) {\n    source = arguments[i];\n    for (key in source) {\n      if (source.hasOwnProperty(key)) {\n        destination[key] = source[key];\n      }\n    }\n  }\n\n  return destination;\n}\n\nmodule.exports = {\n  assign: assignNormalized,\n  _assign: assignPolyfill\n};\n\n},{}],203:[function(require,module,exports){\n'use strict';\n\nvar isIe9 = require('@braintree/browser-detection/is-ie9');\nvar isIe10 = require('@braintree/browser-detection/is-ie10');\n\nmodule.exports = {\n  isIe9: isIe9,\n  isIe10: isIe10\n};\n\n},{\"@braintree/browser-detection/is-ie10\":32,\"@braintree/browser-detection/is-ie9\":33}],204:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('./analytics');\nvar find = require('./find-parent-form');\nvar uuid = require('@braintree/uuid');\nvar DropinError = require('./dropin-error');\nvar kebabCaseToCamelCase = require('./kebab-case-to-camel-case');\nvar WHITELISTED_DATA_ATTRIBUTES = [\n  'locale',\n  'payment-option-priority',\n\n  'data-collector.kount',\n  'data-collector.paypal',\n\n  // camelcase version was accidentally used initially.\n  // we add the kebab case version to match the docs, but\n  // we retain the camelcase version for backwards compatibility\n  'card.cardholderName',\n  'card.cardholderName.required',\n  'card.cardholder-name',\n  'card.cardholder-name.required',\n\n  'paypal.amount',\n  'paypal.currency',\n  'paypal.flow',\n  'paypal.landing-page-type',\n\n  'paypal-credit.amount',\n  'paypal-credit.currency',\n  'paypal-credit.flow',\n  'paypal-credit.landing-page-type'\n];\n\nfunction injectHiddenInput(name, value, form) {\n  var input = form.querySelector('[name=\"' + name + '\"]');\n\n  if (!input) {\n    input = document.createElement('input');\n    input.type = 'hidden';\n    input.name = name;\n    form.appendChild(input);\n  }\n\n  input.value = value;\n}\n\nfunction addCompositeKeyValuePairToObject(obj, key, value) {\n  var decomposedKeys = key.split('.');\n  var topLevelKey = kebabCaseToCamelCase(decomposedKeys[0]);\n\n  if (decomposedKeys.length === 1) {\n    obj[topLevelKey] = deserialize(value);\n  } else {\n    obj[topLevelKey] = obj[topLevelKey] || {};\n    addCompositeKeyValuePairToObject(obj[topLevelKey], decomposedKeys.slice(1).join('.'), value);\n  }\n}\n\nfunction deserialize(value) {\n  try {\n    return JSON.parse(value);\n  } catch (e) {\n    return value;\n  }\n}\n\nfunction createFromScriptTag(createFunction, scriptTag) {\n  var authorization, container, createOptions, form;\n\n  if (!scriptTag) {\n    return;\n  }\n\n  authorization = scriptTag.getAttribute('data-braintree-dropin-authorization');\n\n  if (!authorization) {\n    throw new DropinError('Authorization not found in data-braintree-dropin-authorization attribute');\n  }\n\n  container = document.createElement('div');\n  container.id = 'braintree-dropin-' + uuid();\n\n  form = find.findParentForm(scriptTag);\n\n  if (!form) {\n    throw new DropinError('No form found for script tag integration.');\n  }\n\n  form.addEventListener('submit', function (event) {\n    event.preventDefault();\n  });\n\n  scriptTag.parentNode.insertBefore(container, scriptTag);\n\n  createOptions = {\n    authorization: authorization,\n    container: container\n  };\n\n  WHITELISTED_DATA_ATTRIBUTES.forEach(function (compositeKey) {\n    var value = scriptTag.getAttribute('data-' + compositeKey);\n\n    if (value == null) {\n      return;\n    }\n\n    addCompositeKeyValuePairToObject(createOptions, compositeKey, value);\n  });\n\n  createFunction(createOptions).then(function (instance) {\n    analytics.sendEvent(instance._client, 'integration-type.script-tag');\n    form.addEventListener('submit', function () {\n      instance.requestPaymentMethod(function (requestPaymentError, payload) {\n        if (requestPaymentError) {\n          return;\n        }\n\n        injectHiddenInput('payment_method_nonce', payload.nonce, form);\n\n        if (payload.deviceData) {\n          injectHiddenInput('device_data', payload.deviceData, form);\n        }\n\n        form.submit();\n      });\n    });\n  });\n}\n\nmodule.exports = createFromScriptTag;\n\n},{\"./analytics\":201,\"./dropin-error\":206,\"./find-parent-form\":207,\"./kebab-case-to-camel-case\":211,\"@braintree/uuid\":47}],205:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar constants = require('../constants');\nvar analytics = require('./analytics');\nvar assets = require('@braintree/asset-loader');\nvar Promise = require('./promise');\n\nfunction DataCollector(config) {\n  this._config = config;\n}\n\nDataCollector.prototype.initialize = function () {\n  var self = this;\n\n  return Promise.resolve().then(function () {\n    var braintreeWebVersion;\n\n    if (global.braintree && global.braintree.dataCollector) {\n      return Promise.resolve();\n    }\n\n    braintreeWebVersion = self._config.client.getVersion();\n\n    return assets.loadScript({\n      src: 'https://js.braintreegateway.com/web/' + braintreeWebVersion + '/js/data-collector.min.js',\n      id: constants.DATA_COLLECTOR_SCRIPT_ID\n    });\n  }).then(function () {\n    return global.braintree.dataCollector.create(self._config);\n  }).then(function (instance) {\n    self._instance = instance;\n  }).catch(function (err) {\n    analytics.sendEvent(self._config.client, 'data-collector.setup-failed');\n    // log the Data Collector setup error\n    // but do not prevent Drop-in from loading\n    self.log(err);\n  });\n};\n\nDataCollector.prototype.log = function (message) {\n  console.log(message); // eslint-disable-line no-console\n};\n\nDataCollector.prototype.getDeviceData = function () {\n  if (!this._instance) {\n    return '';\n  }\n\n  return this._instance.deviceData;\n};\n\nDataCollector.prototype.teardown = function () {\n  if (!this._instance) {\n    return Promise.resolve();\n  }\n\n  return this._instance.teardown();\n};\n\nmodule.exports = DataCollector;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../constants\":196,\"./analytics\":201,\"./promise\":213,\"@braintree/asset-loader\":1}],206:[function(require,module,exports){\n'use strict';\n\nfunction isBraintreeWebError(err) {\n  return err.name === 'BraintreeError';\n}\n\nfunction DropinError(err) {\n  this.name = 'DropinError';\n\n  if (typeof err === 'string') {\n    this.message = err;\n  } else {\n    this.message = err.message;\n  }\n\n  if (isBraintreeWebError(err)) {\n    this._braintreeWebError = err;\n  } else {\n    this._braintreeWebError = err.braintreeWebError;\n  }\n}\n\nDropinError.prototype = Object.create(Error.prototype);\nDropinError.prototype.constructor = DropinError;\n\nmodule.exports = DropinError;\n\n},{}],207:[function(require,module,exports){\n'use strict';\n\nfunction findParentForm(element) {\n  var parentNode = element.parentNode;\n\n  if (!parentNode || parentNode.nodeName === 'FORM') {\n    return parentNode;\n  }\n\n  return findParentForm(parentNode);\n}\n\nmodule.exports = {\n  findParentForm: findParentForm\n};\n\n},{}],208:[function(require,module,exports){\n'use strict';\n\nvar atob = require('./polyfill').atob;\n\nmodule.exports = function (client) {\n  var authorizationFingerprint;\n  var configuration = client.getConfiguration();\n\n  if (configuration.authorizationType !== 'TOKENIZATION_KEY') {\n    authorizationFingerprint = JSON.parse(atob(configuration.authorization)).authorizationFingerprint;\n\n    return !authorizationFingerprint || authorizationFingerprint.indexOf('customer_id=') === -1;\n  }\n\n  return true;\n};\n\n},{\"./polyfill\":212}],209:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nfunction isHTTPS() {\n  return global.location.protocol === 'https:';\n}\n\nmodule.exports = {\n  isHTTPS: isHTTPS\n};\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],210:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nmodule.exports = function (win) {\n  win = win || global;\n\n  return Boolean(win.document.characterSet && win.document.characterSet.toLowerCase() === 'utf-8');\n};\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],211:[function(require,module,exports){\n'use strict';\n\nfunction kebabCaseToCamelCase(kebab) {\n  var parts = kebab.split('-');\n  var first = parts.shift();\n  var capitalizedParts = parts.map(function (part) {\n    return part.charAt(0).toUpperCase() + part.substring(1);\n  });\n\n  return [first].concat(capitalizedParts).join('');\n}\n\nmodule.exports = kebabCaseToCamelCase;\n\n},{}],212:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n/* eslint-disable no-mixed-operators */\n\nvar atobNormalized = typeof global.atob === 'function' ? global.atob : atob;\n\nfunction atob(base64String) {\n  var a, b, c, b1, b2, b3, b4, i;\n  var base64Matcher = new RegExp('^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$');\n  var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n  var result = '';\n\n  if (!base64Matcher.test(base64String)) {\n    throw new Error('Non base64 encoded input passed to window.atob polyfill');\n  }\n\n  i = 0;\n  do {\n    b1 = characters.indexOf(base64String.charAt(i++));\n    b2 = characters.indexOf(base64String.charAt(i++));\n    b3 = characters.indexOf(base64String.charAt(i++));\n    b4 = characters.indexOf(base64String.charAt(i++));\n\n    a = (b1 & 0x3F) << 2 | b2 >> 4 & 0x3;\n    b = (b2 & 0xF) << 4 | b3 >> 2 & 0xF;\n    c = (b3 & 0x3) << 6 | b4 & 0x3F;\n\n    result += String.fromCharCode(a) + (b ? String.fromCharCode(b) : '') + (c ? String.fromCharCode(c) : '');\n  } while (i < base64String.length);\n\n  return result;\n}\n\nmodule.exports = {\n  atob: function (base64String) {\n    return atobNormalized.call(global, base64String);\n  },\n  _atob: atob\n};\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],213:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar Promise = global.Promise || require('promise-polyfill');\n\nmodule.exports = Promise;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"promise-polyfill\":191}],214:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function (string) {\n  if (typeof string !== 'string') {\n    return '';\n  }\n\n  return string\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n};\n\n},{}],215:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n  var el = document.createElement('div');\n  var prop = 'flex-basis: 1px';\n  var prefixes = [\n    '-webkit-',\n    '-moz-',\n    '-ms-',\n    '-o-',\n    ''\n  ];\n\n  prefixes.forEach(function (prefix) {\n    el.style.cssText += prefix + prop;\n  });\n\n  return Boolean(el.style.length);\n};\n\n},{}],216:[function(require,module,exports){\n'use strict';\n\nvar assign = require('./assign').assign;\nvar threeDSecure = require('braintree-web/three-d-secure');\n\nvar DEFAULT_ACS_WINDOW_SIZE = '03';\nvar PASSTHROUGH_EVENTS = [\n  'customer-canceled',\n  'authentication-modal-render',\n  'authentication-modal-close'\n];\n\nfunction ThreeDSecure(client, model) {\n  this._client = client;\n  this._model = model;\n  this._config = assign({}, model.merchantConfiguration.threeDSecure);\n}\n\nThreeDSecure.prototype.initialize = function () {\n  var self = this;\n  var options = {\n    client: this._client,\n    version: 2\n  };\n\n  if (this._config.cardinalSDKConfig) {\n    options.cardinalSDKConfig = this._config.cardinalSDKConfig;\n  }\n\n  return threeDSecure.create(options).then(function (instance) {\n    self._instance = instance;\n\n    PASSTHROUGH_EVENTS.forEach(function (eventName) {\n      self._instance.on(eventName, function (event) {\n        self._model._emit('3ds:' + eventName, event);\n      });\n    });\n  });\n};\n\nThreeDSecure.prototype.verify = function (payload, merchantProvidedData) {\n  var verifyOptions = assign({\n    amount: this._config.amount\n  }, merchantProvidedData, {\n    nonce: payload.nonce,\n    bin: payload.details.bin,\n    // TODO in the future, we will allow\n    // merchants to pass in a custom\n    // onLookupComplete hook\n    onLookupComplete: function (data, next) {\n      next();\n    }\n  });\n\n  verifyOptions.additionalInformation = verifyOptions.additionalInformation || {};\n  verifyOptions.additionalInformation.acsWindowSize = verifyOptions.additionalInformation.acsWindowSize || DEFAULT_ACS_WINDOW_SIZE;\n\n  return this._instance.verifyCard(verifyOptions);\n};\n\nThreeDSecure.prototype.updateConfiguration = function (key, value) {\n  this._config[key] = value;\n};\n\nThreeDSecure.prototype.teardown = function () {\n  return this._instance.teardown();\n};\n\nmodule.exports = ThreeDSecure;\n\n},{\"./assign\":202,\"braintree-web/three-d-secure\":149}],217:[function(require,module,exports){\n'use strict';\n\nvar browserDetection = require('./browser-detection');\n\nfunction isHidden(element) {\n  if (!element) { // no parentNode, so nothing containing the element is hidden\n    return false;\n  }\n\n  if (element.style.display === 'none') {\n    return true;\n  }\n\n  return isHidden(element.parentNode);\n}\n\nfunction onTransitionEnd(element, propertyName, callback) {\n  if (browserDetection.isIe9() || isHidden(element)) {\n    callback();\n\n    return;\n  }\n\n  function transitionEventListener(event) {\n    if (event.propertyName === propertyName) {\n      element.removeEventListener('transitionend', transitionEventListener);\n      callback();\n    }\n  }\n\n  element.addEventListener('transitionend', transitionEventListener);\n}\n\nmodule.exports = {\n  onTransitionEnd: onTransitionEnd\n};\n\n},{\"./browser-detection\":203}],218:[function(require,module,exports){\n'use strict';\n\nvar Promise = require('./promise');\n\nfunction delay(time) {\n  time = time || 0;\n\n  return new Promise(function (resolve) {\n    window.setTimeout(resolve, time);\n  });\n}\n\nmodule.exports = {\n  delay: delay\n};\n\n},{\"./promise\":213}],219:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"الدفع بواسطة {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"اختر طريقة دفع أخرى\",\n  \"chooseAWayToPay\" : \"اختر طريقة الدفع\",\n  \"otherWaysToPay\" : \"طرق أخرى للدفع\",\n  \"edit\" : \"تحرير\",\n  \"doneEditing\" : \"تم\",\n  \"editPaymentMethods\" : \"تحرير طرق الدفع\",\n  \"CreditCardDeleteConfirmationMessage\" : \"هل تريد حذف بطاقة {{secondaryIdentifier}} التي تنتهي بالأرقام {{identifier}}؟\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"هل تريد حذف {{identifier}}الحساب PayPal؟\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"هل تريد فعلاً حذف حساب Venmo الذي يحمل اسم المستخدم {{identifier}}؟\",\n  \"genericDeleteConfirmationMessage\" : \"هل تريد بالفعل حذف طريقة الدفع؟\",\n  \"deleteCancelButton\" : \"إلغاء\",\n  \"deleteConfirmationButton\" : \"حذف\",\n  \"fieldEmptyForCvv\" : \"يرجى إدخال رمز حماية البطاقة.\",\n  \"fieldEmptyForExpirationDate\" : \"يرجى إدخال تاريخ انتهاء الصلاحية.\",\n  \"fieldEmptyForCardholderName\" : \"يرجى إدخال اسم صاحب البطاقة.\",\n  \"fieldTooLongForCardholderName\" : \"يجب أن يقل اسم صاحب البطاقة عن 256 حرفاً.\",\n  \"fieldEmptyForNumber\" : \"يرجى إدخال رقم.\",\n  \"fieldEmptyForPostalCode\" : \"يرجى إدخال الرمز البريدي.\",\n  \"fieldInvalidForCardholderName\" : \"اسم حامل البطاقة غير صحيح.\",\n  \"fieldInvalidForCvv\" : \"رمز الحماية غير صحيح.\",\n  \"fieldInvalidForExpirationDate\" : \"تاريخ انتهاء الصلاحية غير صحيح.\",\n  \"fieldInvalidForNumber\" : \"رقم البطاقة غير صحيح.\",\n  \"fieldInvalidForPostalCode\" : \"الرمز البريدي غير صحيح.\",\n  \"genericError\" : \"حدث خطأ ما من جانبنا.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"هذه البطاقة الائتمانية محفوظة كطريقة دفع حالياً.\",\n  \"hostedFieldsFailedTokenizationError\" : \"يرجى مراجعة معلوماتك وإعادة المحاولة.\",\n  \"hostedFieldsFieldsInvalidError\" : \"يرجى مراجعة معلوماتك وإعادة المحاولة.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"خطأ في الشبكة. يرجى المحاولة مجدداً.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"فشلت مصادقة بطاقة الائتمان. يرجى مراجعة معلوماتك وإعادة المحاولة.\",\n  \"paypalButtonMustBeUsed\" : \"استخدم زر PayPal لاستئناف الدفع.\",\n  \"paypalAccountTokenizationFailedError\" : \"وقع خطأ أثناء إضافة حساب PayPal. يرجى إعادة المحاولة.\",\n  \"paypalFlowFailedError\" : \"وقع خطأ أثناء الاتصال بـ PayPal. يرجى إعادة المحاولة.\",\n  \"paypalTokenizationRequestActiveError\" : \"تفويض الدفع عبر PayPal قيد التنفيذ.\",\n  \"venmoCanceledError\" : \"وقع خطأ. تأكد أن أحدث إصدار من تطبيق Venmo مثبت في جهازك وأن متصفحك يدعم التبديل إلى Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"فشل حذف طريقة الدفع. أعد المحاولة.\",\n  \"venmoAppFailedError\" : \"تطبيق Venmo غير موجود في جهازك.\",\n  \"unsupportedCardTypeError\" : \"نوع البطاقة غير مدعوم. يرجى تجربة بطاقة أخرى.\",\n  \"applePayTokenizationError\" : \"وقع خطأ في الشبكة أثناء معالجة الدفع عبر Apple Pay. يرجى إعادة المحاولة.\",\n  \"applePayActiveCardError\" : \"إضافة بطاقة مدعومة إلى محفظة Apple Pay.\",\n  \"cardholderNameLabel\" : \"اسم صاحب البطاقة\",\n  \"cardNumberLabel\" : \"رقم البطاقة\",\n  \"cvvLabel\" : \"رمز CVV‏\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 أرقام)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 أرقام)\",\n  \"cardholderNamePlaceholder\" : \"اسم صاحب البطاقة\",\n  \"expirationDateLabel\" : \"تاريخ انتهاء الصلاحية\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"الشهر/ السنة\",\n  \"postalCodeLabel\" : \"الرمز البريدي\",\n  \"saveCardLabel\" : \"حفظ البطاقة\",\n  \"payWithCard\" : \"الدفع ببطاقة سحب أو ائتمان\",\n  \"endingIn\" : \"تنتهي بتاريخ {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo‏\",\n  \"Card\" : \"البطاقة\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express‏\",\n  \"Discover\" : \"Discover‏\",\n  \"Diners Club\" : \"Diners Club‏\",\n  \"Elo\" : \"Elo‏\",\n  \"Hiper\" : \"Hiper‏\",\n  \"Hipercard\" : \"Hipercard‏\",\n  \"MasterCard\" : \"Mastercard‏\",\n  \"Visa\" : \"Visa‏\",\n  \"JCB\" : \"JCB‏\",\n  \"Maestro\" : \"Maestro‏\",\n  \"UnionPay\" : \"UnionPay‏\"\n}\n;\n\n},{}],220:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Forma úhrady: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Vybrat jiný způsob platby\",\n  \"chooseAWayToPay\" : \"Vybrat způsob platby\",\n  \"otherWaysToPay\" : \"Jiné způsoby platby\",\n  \"edit\" : \"Upravit\",\n  \"doneEditing\" : \"Hotovo\",\n  \"editPaymentMethods\" : \"Upravit způsoby platby\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Chcete kartu {{secondaryIdentifier}} s koncovým číslem {{identifier}}odstranit?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Chcete {{identifier}}účtu PayPal odstranit?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Opravdu chcete účet Venmo s uživatelským jménem {{identifier}} odstranit?\",\n  \"genericDeleteConfirmationMessage\" : \"Opravdu chcete tento způsob platby odstranit?\",\n  \"deleteCancelButton\" : \"Zrušit\",\n  \"deleteConfirmationButton\" : \"Odstranit\",\n  \"fieldEmptyForCvv\" : \"Vyplňte kód CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Vyplňte datum vypršení platnosti.\",\n  \"fieldEmptyForCardholderName\" : \"Vyplňte jméno držitele karty.\",\n  \"fieldTooLongForCardholderName\" : \"Jméno držitele karty musí obsahovat méně než 256 znaků.\",\n  \"fieldEmptyForNumber\" : \"Vyplňte číslo.\",\n  \"fieldEmptyForPostalCode\" : \"Vyplňte poštovní směrovací číslo.\",\n  \"fieldInvalidForCardholderName\" : \"Toto jméno držitele karty není platné.\",\n  \"fieldInvalidForCvv\" : \"Tento bezpečnostní kód není platný.\",\n  \"fieldInvalidForExpirationDate\" : \"Toto datum vypršení platnosti není platné.\",\n  \"fieldInvalidForNumber\" : \"Toto číslo karty není platné.\",\n  \"fieldInvalidForPostalCode\" : \"Toto poštovní směrovací číslo není platné.\",\n  \"genericError\" : \"Došlo k chybě na naší straně.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Tato kreditní karta je již jako způsob platby uložena.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Zkontrolujte zadané informace a zkuste to znovu.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Zkontrolujte zadané informace a zkuste to znovu.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Došlo k chybě sítě. Zkuste to znovu.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Ověření kreditní karty se nezdařilo. Zkontrolujte zadané informace a zkuste to znovu.\",\n  \"paypalButtonMustBeUsed\" : \"Chcete-li přejít k platbě, použijte tlačítko PayPal.\",\n  \"paypalAccountTokenizationFailedError\" : \"Při přidávání účtu PayPal došlo k chybě. Zkuste to znovu.\",\n  \"paypalFlowFailedError\" : \"Při připojování ke službě PayPal došlo k chybě. Zkuste to znovu.\",\n  \"paypalTokenizationRequestActiveError\" : \"Autorizace platby přes PayPal již probíhá.\",\n  \"venmoCanceledError\" : \"Došlo k chybě. Zkontrolujte, zda máte v zařízení nainstalovanou nejnovější verzi aplikace Venmo a zda prohlížeč přechod na aplikaci Venmo podporuje.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Způsob platby se nepodařilo odstranit. Zkuste to znovu.\",\n  \"venmoAppFailedError\" : \"Aplikaci Venmo se ve vašem zařízení nepodařilo najít.\",\n  \"unsupportedCardTypeError\" : \"Tento typ karty není podporován. Vyzkoušejte jinou kartu.\",\n  \"applePayTokenizationError\" : \"Při zpracování platby přes Apple Pay došlo k chybě sítě. Zkuste to znovu.\",\n  \"applePayActiveCardError\" : \"Přidejte si podporovanou kartu do peněženky Apple Pay.\",\n  \"cardholderNameLabel\" : \"Jméno držitele karty\",\n  \"cardNumberLabel\" : \"Číslo karty\",\n  \"cvvLabel\" : \"Kód CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 číslice)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 číslice)\",\n  \"cardholderNamePlaceholder\" : \"Jméno držitele karty\",\n  \"expirationDateLabel\" : \"Datum vypršení platnosti\",\n  \"expirationDateLabelSubheading\" : \"(MM/RR)\",\n  \"expirationDatePlaceholder\" : \"MM/RR\",\n  \"postalCodeLabel\" : \"Poštovní směrovací číslo\",\n  \"saveCardLabel\" : \"Uložit kartu\",\n  \"payWithCard\" : \"Zaplatit kartou\",\n  \"endingIn\" : \"Koncové číslo {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Karta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],221:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Betaling med {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Vælg en anden betalingsmetode\",\n  \"chooseAWayToPay\" : \"Vælg, hvordan du vil betale\",\n  \"otherWaysToPay\" : \"Andre måder at betale på\",\n  \"edit\" : \"Rediger\",\n  \"doneEditing\" : \"Udført\",\n  \"editPaymentMethods\" : \"Rediger betalingsmetode\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Vil du slette dit {{secondaryIdentifier}}-kort, der slutter på {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Vil du slette PayPal-kontoen for {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Er du sikker på, at du vil slette Venmo-konto med brugernavnet {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Er du sikker på, at du vil slette denne betalingsmetode?\",\n  \"deleteCancelButton\" : \"Annuller\",\n  \"deleteConfirmationButton\" : \"Slet\",\n  \"fieldEmptyForCvv\" : \"Du skal indtaste kontrolcifrene.\",\n  \"fieldEmptyForExpirationDate\" : \"Du skal indtaste en udløbsdato.\",\n  \"fieldEmptyForCardholderName\" : \"Du skal indtaste kortholderens navn.\",\n  \"fieldTooLongForCardholderName\" : \"Kortholders navn skal være mindre end 256 tegn.\",\n  \"fieldEmptyForNumber\" : \"Du skal indtaste et nummer.\",\n  \"fieldEmptyForPostalCode\" : \"Du skal indtaste et postnummer.\",\n  \"fieldInvalidForCardholderName\" : \"Kortindehaverens navn er ugyldigt.\",\n  \"fieldInvalidForCvv\" : \"Denne sikkerhedskode er ugyldig.\",\n  \"fieldInvalidForExpirationDate\" : \"Denne udløbsdato er ugyldig.\",\n  \"fieldInvalidForNumber\" : \"Dette kortnummer er ikke gyldigt.\",\n  \"fieldInvalidForPostalCode\" : \"Dette postnummer er ikke gyldigt.\",\n  \"genericError\" : \"Der opstod en fejl.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Dette betalingskort findes allerede som en gemt betalingsmetode.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Tjek oplysningerne, og prøv igen.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Tjek oplysningerne, og prøv igen.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Netværksfejl. Prøv igen.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Bekræftelse af betalingskort mislykkedes. Tjek oplysningerne, og prøv igen.\",\n  \"paypalButtonMustBeUsed\" : \"Brug PayPal-knappen til at fortsætte med din betaling.\",\n  \"paypalAccountTokenizationFailedError\" : \"Der opstod en fejl under tilføjelsen af PayPal-kontoen. Prøv igen.\",\n  \"paypalFlowFailedError\" : \"Det lykkedes ikke at oprette forbindelse til PayPal. Prøv igen.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPals betalingsautorisation er allerede i gang.\",\n  \"venmoCanceledError\" : \"Der opstod et problem. Sørg for, at den nyeste version af Venmo-appen er installeret på din enhed, og at din browser understøtter skift til Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Betalingsmetoden kunne ikke slettes. Prøv igen.\",\n  \"venmoAppFailedError\" : \"Venmo-appen blev ikke fundet på din enhed.\",\n  \"unsupportedCardTypeError\" : \"Korttypen understøttes ikke. Prøv et andet kort.\",\n  \"applePayTokenizationError\" : \"Der opstod en netværksfejl under behandling af Apple Pay-betalingen. Prøv igen.\",\n  \"applePayActiveCardError\" : \"Føj et understøttet kort til din Apple Pay-e-pung.\",\n  \"cardholderNameLabel\" : \"Kortindehaverens navn\",\n  \"cardNumberLabel\" : \"Kortnummer\",\n  \"cvvLabel\" : \"Kontrolcifre\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 cifre)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 cifre)\",\n  \"cardholderNamePlaceholder\" : \"Kortindehaverens navn\",\n  \"expirationDateLabel\" : \"Udløbsdato\",\n  \"expirationDateLabelSubheading\" : \"(MM/ÅÅ)\",\n  \"expirationDatePlaceholder\" : \"MM/ÅÅ\",\n  \"postalCodeLabel\" : \"Postnummer\",\n  \"saveCardLabel\" : \"Gem kort\",\n  \"payWithCard\" : \"Betal med betalingskort\",\n  \"endingIn\" : \"Slutter på {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kort\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],222:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Zahlen mit {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Wählen Sie eine andere Zahlungsquelle\",\n  \"chooseAWayToPay\" : \"Wählen Sie eine Zahlungsquelle\",\n  \"otherWaysToPay\" : \"Sonstige Zahlungsquellen\",\n  \"edit\" : \"Ändern\",\n  \"doneEditing\" : \"Fertig\",\n  \"editPaymentMethods\" : \"Zahlungsquellen bearbeiten\",\n  \"CreditCardDeleteConfirmationMessage\" : \"{{secondaryIdentifier}}-Karte mit den Endziffern {{identifier}} löschen?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"PayPal-Konto {{identifier}} löschen?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Wollen Sie das Venmo-Konto mit dem Benutzernamen {{identifier}} wirklich löschen?\",\n  \"genericDeleteConfirmationMessage\" : \"Möchten Sie diese Zahlungsquelle wirklich löschen?\",\n  \"deleteCancelButton\" : \"Abbrechen\",\n  \"deleteConfirmationButton\" : \"Löschen\",\n  \"fieldEmptyForCvv\" : \"Geben Sie die Kartenprüfnummer (CVV) ein.\",\n  \"fieldEmptyForExpirationDate\" : \"Geben Sie das Ablaufdatum ein.\",\n  \"fieldEmptyForCardholderName\" : \"Geben Sie den Namen des Karteninhabers ein.\",\n  \"fieldTooLongForCardholderName\" : \"Der Name des Karteninhabers darf nicht länger als 256 Zeichen sein.\",\n  \"fieldEmptyForNumber\" : \"Geben Sie eine Nummer ein.\",\n  \"fieldEmptyForPostalCode\" : \"Geben Sie eine Postleitzahl ein.\",\n  \"fieldInvalidForCardholderName\" : \"Der Name des Karteninhabers ist nicht gültig.\",\n  \"fieldInvalidForCvv\" : \"Diese Kartenprüfnummer ist ungültig.\",\n  \"fieldInvalidForExpirationDate\" : \"Dieses Ablaufdatum ist ungültig.\",\n  \"fieldInvalidForNumber\" : \"Diese Kartennummer ist ungültig.\",\n  \"fieldInvalidForPostalCode\" : \"Diese Postleitzahl ist ungültig.\",\n  \"genericError\" : \"Bei uns ist ein Fehler aufgetreten.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Diese Kreditkarte ist bereits als gespeicherte Zahlungsquelle vorhanden.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Bitte prüfen Sie die Informationen und versuchen Sie es erneut.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Bitte prüfen Sie die Informationen und versuchen Sie es erneut.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Netzwerkfehler. Versuchen Sie es bitte erneut.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Die Kreditkartenverifizierung ist fehlgeschlagen. Bitte prüfen Sie die Informationen und versuchen Sie es erneut.\",\n  \"paypalButtonMustBeUsed\" : \"Verwenden Sie den PayPal-Button, um mit der Zahlung fortzufahren.\",\n  \"paypalAccountTokenizationFailedError\" : \"Beim Hinzufügen des PayPal-Kontos ist ein Fehler aufgetreten. Versuchen Sie es bitte erneut.\",\n  \"paypalFlowFailedError\" : \"Bei der Verbindung mit PayPal ist ein Fehler aufgetreten. Versuchen Sie es bitte erneut.\",\n  \"paypalTokenizationRequestActiveError\" : \"Die PayPal-Zahlungsautorisierung wird bereits vorgenommen.\",\n  \"venmoCanceledError\" : \"Etwas ist schief gelaufen. Vergewissern Sie sich, dass Sie die neueste Version der Venmo-App auf Ihrem Gerät installiert haben und Ihr Browser den Wechsel zu Venmo unterstützt.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Die Zahlungsquelle konnte nicht gelöscht werden. Versuchen Sie es erneut.\",\n  \"venmoAppFailedError\" : \"Die Venmo-App wurde nicht auf Ihrem Gerät gefunden.\",\n  \"unsupportedCardTypeError\" : \"Dieser Kartentyp wird nicht unterstützt. Versuchen Sie es mit einer anderen Karte.\",\n  \"applePayTokenizationError\" : \"Bei der Verarbeitung der Apple Pay-Zahlung ist ein Netzwerkfehler aufgetreten. Versuchen Sie es bitte erneut.\",\n  \"applePayActiveCardError\" : \"Fügen Sie Ihrem Apple Pay-Wallet eine unterstützte Karte hinzu.\",\n  \"cardholderNameLabel\" : \"Name des Karteninhabers\",\n  \"cardNumberLabel\" : \"Kartennummer\",\n  \"cvvLabel\" : \"Kartenprüfnummer\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3-stellig)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4-stellig)\",\n  \"cardholderNamePlaceholder\" : \"Name des Karteninhabers\",\n  \"expirationDateLabel\" : \"Gültig bis\",\n  \"expirationDateLabelSubheading\" : \"(MM/JJ)\",\n  \"expirationDatePlaceholder\" : \"MM/JJ\",\n  \"postalCodeLabel\" : \"Postleitzahl\",\n  \"saveCardLabel\" : \"Karte speichern\",\n  \"payWithCard\" : \"Mit Karte zahlen\",\n  \"endingIn\" : \"Mit den Endziffern {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Karte\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],223:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Πληρωμή με {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Επιλογή ενός άλλου τρόπου πληρωμής\",\n  \"chooseAWayToPay\" : \"Επιλογή τρόπου πληρωμής\",\n  \"otherWaysToPay\" : \"Άλλοι τρόποι πληρωμής\",\n  \"edit\" : \"Επεξεργασία\",\n  \"doneEditing\" : \"Τέλος\",\n  \"editPaymentMethods\" : \"Επεξεργασία μεθόδων πληρωμής\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Διαγραφή της κάρτας {{secondaryIdentifier}} που λήγει σε {{identifier}};\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Διαγραφή {{identifier}}λογαριασμού PayPal;\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Θέλετε σίγουρα να διαγράψετε τον λογαριασμό Venmo με το όνομα χρήστη {{identifier}};\",\n  \"genericDeleteConfirmationMessage\" : \"Θέλετε σίγουρα να διαγράψετε αυτήν τη μέθοδο πληρωμής;\",\n  \"deleteCancelButton\" : \"Ακύρωση\",\n  \"deleteConfirmationButton\" : \"Διαγραφή\",\n  \"fieldEmptyForCvv\" : \"Συμπληρώστε έναν κωδικό ασφαλείας (CVV).\",\n  \"fieldEmptyForExpirationDate\" : \"Συμπληρώστε ημερομηνία λήξης.\",\n  \"fieldEmptyForCardholderName\" : \"Συμπληρώστε το όνομα ενός κατόχου κάρτας.\",\n  \"fieldTooLongForCardholderName\" : \"Το όνομα του κατόχου της κάρτας πρέπει να περιέχει λιγότερους από 256 χαρακτήρες.\",\n  \"fieldEmptyForNumber\" : \"Συμπληρώστε έναν αριθμό.\",\n  \"fieldEmptyForPostalCode\" : \"Συμπληρώστε έναν ταχυδρομικό κώδικα.\",\n  \"fieldInvalidForCardholderName\" : \"Αυτό το όνομα κατόχου κάρτας δεν είναι έγκυρο.\",\n  \"fieldInvalidForCvv\" : \"Αυτός ο κωδικός ασφαλείας δεν είναι έγκυρος.\",\n  \"fieldInvalidForExpirationDate\" : \"Αυτή η ημερομηνία λήξης δεν είναι έγκυρη.\",\n  \"fieldInvalidForNumber\" : \"Αυτός ο αριθμός κάρτας δεν είναι έγκυρος.\",\n  \"fieldInvalidForPostalCode\" : \"Αυτός ο ταχυδρομικός κώδικας δεν είναι έγκυρος.\",\n  \"genericError\" : \"Προέκυψε πρόβλημα στο σύστημά μας.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Αυτή η πιστωτική κάρτα υπάρχει ήδη ως αποθηκευμένη μέθοδος πληρωμής.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Ελέγξτε τα στοιχεία σας και δοκιμάστε ξανά.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Ελέγξτε τα στοιχεία σας και δοκιμάστε ξανά.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Σφάλμα δικτύου. Δοκιμάστε ξανά.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Η επαλήθευση της πιστωτικής κάρτας απέτυχε. Ελέγξτε τα στοιχεία σας και δοκιμάστε ξανά.\",\n  \"paypalButtonMustBeUsed\" : \"Χρησιμοποιήστε το κουμπί PayPal για να συνεχίσετε με την πληρωμή.\",\n  \"paypalAccountTokenizationFailedError\" : \"Προέκυψε κάποιο πρόβλημα με την προσθήκη του λογαριασμού PayPal. Δοκιμάστε ξανά.\",\n  \"paypalFlowFailedError\" : \"Προέκυψε κάποιο πρόβλημα με τη σύνδεση στην PayPal. Δοκιμάστε ξανά.\",\n  \"paypalTokenizationRequestActiveError\" : \"Η εξουσιοδότηση πληρωμής μέσω PayPal βρίσκεται ήδη σε εξέλιξη.\",\n  \"venmoCanceledError\" : \"Προέκυψε πρόβλημα. Βεβαιωθείτε ότι έχετε την πιο πρόσφατη έκδοση της εφαρμογής Venmo εγκατεστημένη στη συσκευή σας και ότι το πρόγραμμα περιήγησής σας υποστηρίζει τη μετάβαση στη Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Η διαγραφή της μεθόδου πληρωμής είναι αδύνατη, δοκιμάστε ξανά.\",\n  \"venmoAppFailedError\" : \"Η εφαρμογή Venmo δεν βρέθηκε στη συσκευή σας.\",\n  \"unsupportedCardTypeError\" : \"Αυτός ο τύπος κάρτας δεν υποστηρίζεται. Δοκιμάστε μια άλλη κάρτα.\",\n  \"applePayTokenizationError\" : \"Προέκυψε σφάλμα δικτύου κατά την επεξεργασία της πληρωμής μέσω Apple Pay. Δοκιμάστε ξανά.\",\n  \"applePayActiveCardError\" : \"Προσθέστε μια υποστηριζόμενη κάρτα στο ψηφιακό πορτοφόλι Apple Pay.\",\n  \"cardholderNameLabel\" : \"Όνομα κατόχου κάρτας\",\n  \"cardNumberLabel\" : \"Αριθμός κάρτας\",\n  \"cvvLabel\" : \"Κωδικός ασφαλείας (CVV)\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 ψηφία)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 ψηφία)\",\n  \"cardholderNamePlaceholder\" : \"Όνομα κατόχου κάρτας\",\n  \"expirationDateLabel\" : \"Ημερομηνία λήξης\",\n  \"expirationDateLabelSubheading\" : \"(ΜΜ/ΕΕ)\",\n  \"expirationDatePlaceholder\" : \"ΜΜ/ΕΕ\",\n  \"postalCodeLabel\" : \"Ταχυδρομικός κώδικας\",\n  \"saveCardLabel\" : \"Αποθήκευση κάρτας\",\n  \"payWithCard\" : \"Πληρωμή με κάρτα\",\n  \"endingIn\" : \"Που λήγει σε {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Κάρτα\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],224:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Paying with {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choose another way to pay\",\n  \"chooseAWayToPay\" : \"Choose a way to pay\",\n  \"otherWaysToPay\" : \"Other ways to pay\",\n  \"edit\" : \"Edit\",\n  \"doneEditing\" : \"Done\",\n  \"editPaymentMethods\" : \"Edit payment methods\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Delete {{secondaryIdentifier}} card ending in {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Delete PayPal account {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Are you sure you want to delete Venmo account with username {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Are you sure you want to delete this payment method?\",\n  \"deleteCancelButton\" : \"Cancel\",\n  \"deleteConfirmationButton\" : \"Delete\",\n  \"fieldEmptyForCvv\" : \"Please enter a CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Please enter an expiry date.\",\n  \"fieldEmptyForCardholderName\" : \"Please enter a cardholder name.\",\n  \"fieldTooLongForCardholderName\" : \"Cardholder name must be less than 256 characters.\",\n  \"fieldEmptyForNumber\" : \"Please enter a number.\",\n  \"fieldEmptyForPostalCode\" : \"Please enter a postcode.\",\n  \"fieldInvalidForCardholderName\" : \"This cardholder name isn't valid.\",\n  \"fieldInvalidForCvv\" : \"This CVV isn't valid.\",\n  \"fieldInvalidForExpirationDate\" : \"This expiry date isn't valid.\",\n  \"fieldInvalidForNumber\" : \"This card number isn't valid.\",\n  \"fieldInvalidForPostalCode\" : \"This postcode isn't valid.\",\n  \"genericError\" : \"We're sorry, something seems to have gone wrong.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"This card already exists as a saved payment method.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Please check your entries and try again.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Please check your entries and try again.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Network error. Please try again.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Card verification failed. Please check your entries and try again.\",\n  \"paypalButtonMustBeUsed\" : \"Use the PayPal button to continue with your payment.\",\n  \"paypalAccountTokenizationFailedError\" : \"Something went wrong adding the PayPal account. Please try again.\",\n  \"paypalFlowFailedError\" : \"Something went wrong connecting to PayPal. Please try again.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal payment authorisation is already in progress.\",\n  \"venmoCanceledError\" : \"We're sorry, something seems to have gone wrong. Please make sure you have the most recent version of the Venmo app installed on your device and that your browser supports switching to Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Unable to delete payment method. Please try again.\",\n  \"venmoAppFailedError\" : \"The Venmo app couldn't be found on your device.\",\n  \"unsupportedCardTypeError\" : \"This card type isn't supported. Please try another card.\",\n  \"applePayTokenizationError\" : \"A network error occurred while processing the Apple Pay payment. Please try again.\",\n  \"applePayActiveCardError\" : \"Add a supported card to your Apple Pay wallet.\",\n  \"cardholderNameLabel\" : \"Cardholder name\",\n  \"cardNumberLabel\" : \"Card number\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 digits)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 digits)\",\n  \"cardholderNamePlaceholder\" : \"Cardholder name\",\n  \"expirationDateLabel\" : \"Expiry date\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"Postcode\",\n  \"saveCardLabel\" : \"Save card\",\n  \"payWithCard\" : \"Pay with card\",\n  \"endingIn\" : \"Ending in {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Card\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],225:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Paying with {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choose another way to pay\",\n  \"chooseAWayToPay\" : \"Choose a way to pay\",\n  \"otherWaysToPay\" : \"Other ways to pay\",\n  \"edit\" : \"Edit\",\n  \"doneEditing\" : \"Done\",\n  \"editPaymentMethods\" : \"Edit funding sources\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Delete {{secondaryIdentifier}} card ending in {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Delete PayPal account {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Are you sure you want to delete Venmo account with username {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Are you sure you want to delete this funding source?\",\n  \"deleteCancelButton\" : \"Cancel\",\n  \"deleteConfirmationButton\" : \"Delete\",\n  \"fieldEmptyForCvv\" : \"Please enter a security code.\",\n  \"fieldEmptyForExpirationDate\" : \"Please enter an expiry date.\",\n  \"fieldEmptyForCardholderName\" : \"Please enter a cardholder name.\",\n  \"fieldTooLongForCardholderName\" : \"Cardholder name must be less than 256 characters.\",\n  \"fieldEmptyForNumber\" : \"Please enter a number.\",\n  \"fieldEmptyForPostalCode\" : \"Please enter a postcode.\",\n  \"fieldInvalidForCardholderName\" : \"This cardholder name isn't valid.\",\n  \"fieldInvalidForCvv\" : \"This security code isn't valid.\",\n  \"fieldInvalidForExpirationDate\" : \"This expiry date isn't valid.\",\n  \"fieldInvalidForNumber\" : \"This card number isn't valid.\",\n  \"fieldInvalidForPostalCode\" : \"This postcode isn't valid.\",\n  \"genericError\" : \"Something went wrong on our end.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"This credit card already exists as a saved funding source.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Please check your information and try again.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Please check your information and try again.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Network error. Please try again.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Credit card verification failed. Please check your information and try again.\",\n  \"paypalButtonMustBeUsed\" : \"Use the PayPal button to continue with your payment.\",\n  \"paypalAccountTokenizationFailedError\" : \"Something went wrong adding the PayPal account. Please try again.\",\n  \"paypalFlowFailedError\" : \"Something went wrong connecting to PayPal. Please try again.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal payment authorisation is already in progress.\",\n  \"venmoCanceledError\" : \"Something went wrong. Ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"We were unable to delete the funding source. Please try again.\",\n  \"venmoAppFailedError\" : \"The Venmo app couldn't be found on your device.\",\n  \"unsupportedCardTypeError\" : \"This card type isn't supported. Please try another card.\",\n  \"applePayTokenizationError\" : \"A network error occurred while processing the Apple Pay payment. Please try again.\",\n  \"applePayActiveCardError\" : \"Add a supported card to your Apple Pay wallet.\",\n  \"cardholderNameLabel\" : \"Cardholder name\",\n  \"cardNumberLabel\" : \"Card number\",\n  \"cvvLabel\" : \"Security code\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 digits)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 digits)\",\n  \"cardholderNamePlaceholder\" : \"Cardholder name\",\n  \"expirationDateLabel\" : \"Expiry date\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"Postcode\",\n  \"saveCardLabel\" : \"Save card\",\n  \"payWithCard\" : \"Pay with card\",\n  \"endingIn\" : \"Ending in {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Card\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],226:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Paying with {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choose another way to pay\",\n  \"chooseAWayToPay\" : \"Choose a way to pay\",\n  \"otherWaysToPay\" : \"Other ways to pay\",\n  \"edit\" : \"Edit\",\n  \"doneEditing\" : \"Done\",\n  \"editPaymentMethods\" : \"Edit payment methods\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Delete {{secondaryIdentifier}} card ending in {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Delete PayPal account {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Are you sure you want to delete Venmo account with username {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Are you sure you want to delete this payment method?\",\n  \"deleteCancelButton\" : \"Cancel\",\n  \"deleteConfirmationButton\" : \"Delete\",\n  \"fieldEmptyForCvv\" : \"Please enter a CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Please enter an expiry date.\",\n  \"fieldEmptyForCardholderName\" : \"Please enter a cardholder name.\",\n  \"fieldTooLongForCardholderName\" : \"Cardholder name must be less than 256 characters.\",\n  \"fieldEmptyForNumber\" : \"Please enter a number.\",\n  \"fieldEmptyForPostalCode\" : \"Please enter a PIN code.\",\n  \"fieldInvalidForCardholderName\" : \"This cardholder name isn't valid.\",\n  \"fieldInvalidForCvv\" : \"This CVV isn't valid.\",\n  \"fieldInvalidForExpirationDate\" : \"This expiry date isn't valid.\",\n  \"fieldInvalidForNumber\" : \"This card number isn't valid.\",\n  \"fieldInvalidForPostalCode\" : \"This PIN code isn't valid.\",\n  \"genericError\" : \"We're sorry, something seems to have gone wrong.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"This card already exists as a saved payment method.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Please check your information and try again.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Please check your information and try again.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Network error. Please try again.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Card verification failed. Please check your information and try again.\",\n  \"paypalButtonMustBeUsed\" : \"Use the PayPal button to continue with your payment.\",\n  \"paypalAccountTokenizationFailedError\" : \"Something went wrong adding the PayPal account. Please try again.\",\n  \"paypalFlowFailedError\" : \"Something went wrong connecting to PayPal. Please try again.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal payment authorisation is already in progress.\",\n  \"venmoCanceledError\" : \"We're sorry, something seems to have gone wrong. Ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Unable to delete payment method. Please try again.\",\n  \"venmoAppFailedError\" : \"The Venmo app couldn't be found on your device.\",\n  \"unsupportedCardTypeError\" : \"This card type isn't supported. Please try another card.\",\n  \"applePayTokenizationError\" : \"A network error occurred while processing the Apple Pay payment. Please try again.\",\n  \"applePayActiveCardError\" : \"Add a supported card to your Apple Pay digital wallet.\",\n  \"cardholderNameLabel\" : \"Cardholder name\",\n  \"cardNumberLabel\" : \"Card number\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 digits)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 digits)\",\n  \"cardholderNamePlaceholder\" : \"Cardholder name\",\n  \"expirationDateLabel\" : \"Expiry date\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"PIN code\",\n  \"saveCardLabel\" : \"Save card\",\n  \"payWithCard\" : \"Pay with card\",\n  \"endingIn\" : \"Ending in {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Card\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],227:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  payingWith: 'Paying with {{paymentSource}}',\n  chooseAnotherWayToPay: 'Choose another way to pay',\n  chooseAWayToPay: 'Choose a way to pay',\n  otherWaysToPay: 'Other ways to pay',\n  edit: 'Edit',\n  doneEditing: 'Done',\n  editPaymentMethods: 'Edit payment methods',\n  CreditCardDeleteConfirmationMessage: 'Delete {{secondaryIdentifier}} card ending in {{identifier}}?',\n  PayPalAccountDeleteConfirmationMessage: 'Delete PayPal account {{identifier}}?',\n  VenmoAccountDeleteConfirmationMessage: 'Are you sure you want to delete Venmo account with username {{identifier}}?',\n  genericDeleteConfirmationMessage: 'Are you sure you want to delete this payment method?',\n  deleteCancelButton: 'Cancel',\n  deleteConfirmationButton: 'Delete',\n  // Errors\n  fieldEmptyForCvv: 'Please fill out a CVV.',\n  fieldEmptyForExpirationDate: 'Please fill out an expiration date.',\n  fieldEmptyForCardholderName: 'Please fill out a cardholder name.',\n  fieldEmptyForNumber: 'Please fill out a card number.',\n  fieldEmptyForPostalCode: 'Please fill out a postal code.',\n  fieldInvalidForCardholderName: 'This cardholder name is not valid.',\n  fieldInvalidForCvv: 'This security code is not valid.',\n  fieldInvalidForExpirationDate: 'This expiration date is not valid.',\n  fieldInvalidForNumber: 'This card number is not valid.',\n  fieldInvalidForPostalCode: 'This postal code is not valid.',\n  fieldTooLongForCardholderName: 'Cardholder name must be less than 256 characters.',\n  genericError: 'Something went wrong on our end.',\n  hostedFieldsTokenizationFailOnDuplicateError: 'This credit card already exists as a saved payment method.',\n  hostedFieldsFailedTokenizationError: 'Please check your information and try again.',\n  hostedFieldsTokenizationCvvVerificationFailedError: 'Credit card verification failed. Please check your information and try again.',\n  hostedFieldsTokenizationNetworkErrorError: 'Network error. Please try again.',\n  hostedFieldsFieldsInvalidError: 'Please check your information and try again.',\n  paypalButtonMustBeUsed: 'Use the PayPal button to continue with your payment.',\n  paypalAccountTokenizationFailedError: 'Something went wrong adding the PayPal account. Please try again.',\n  paypalFlowFailedError: 'Something went wrong connecting to PayPal. Please try again.',\n  paypalTokenizationRequestActiveError: 'PayPal payment authorization is already in progress.',\n  applePayTokenizationError: 'A network error occurred while processing the Apple Pay payment. Please try again.',\n  applePayActiveCardError: 'Add a supported card to your Apple Pay wallet.',\n  vaultManagerPaymentMethodDeletionError: 'Unable to delete payment method, try again.',\n  venmoCanceledError: 'Something went wrong. Ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.',\n  venmoAppFailedError: 'The Venmo app could not be found on your device.',\n  unsupportedCardTypeError: 'This card type is not supported. Please try another card.',\n  // Card form\n  cardholderNameLabel: 'Cardholder Name',\n  cardNumberLabel: 'Card Number',\n  cvvLabel: 'CVV',\n  cvvThreeDigitLabelSubheading: '(3 digits)',\n  cvvFourDigitLabelSubheading: '(4 digits)',\n  expirationDateLabel: 'Expiration Date',\n  expirationDateLabelSubheading: '(MM/YY)',\n  cardholderNamePlaceholder: 'Cardholder Name',\n  expirationDatePlaceholder: 'MM/YY',\n  postalCodeLabel: 'Postal Code',\n  saveCardLabel: 'Save card',\n  payWithCard: 'Pay with card',\n  // Payment Method descriptions\n  endingIn: 'Ending in {{lastFourCardDigits}}',\n  Card: 'Card',\n  PayPal: 'PayPal',\n  'PayPal Credit': 'PayPal Credit',\n  'Apple Pay': 'Apple Pay',\n  'Google Pay': 'Google Pay',\n  'Venmo': 'Venmo',\n  'American Express': 'American Express',\n  Discover: 'Discover',\n  'Diners Club': 'Diners Club',\n  Elo: 'Elo',\n  Hiper: 'Hiper',\n  Hipercard: 'Hipercard',\n  MasterCard: 'Mastercard',\n  Visa: 'Visa',\n  JCB: 'JCB',\n  Maestro: 'Maestro',\n  UnionPay: 'UnionPay'\n};\n\n},{}],228:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Pagar con {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Seleccionar otra forma de pago\",\n  \"chooseAWayToPay\" : \"Seleccionar forma de pago\",\n  \"otherWaysToPay\" : \"Otras formas de pago\",\n  \"edit\" : \"Editar\",\n  \"doneEditing\" : \"Hecho\",\n  \"editPaymentMethods\" : \"Editar formas de pago\",\n  \"CreditCardDeleteConfirmationMessage\" : \"¿Eliminar la tarjeta {{secondaryIdentifier}} terminada en {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"¿Eliminar la cuenta PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"¿Seguro que deseas eliminar la cuenta de Venmo con el nombre de usuario {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"¿Seguro que deseas eliminar esta forma de pago?\",\n  \"deleteCancelButton\" : \"Cancelar\",\n  \"deleteConfirmationButton\" : \"Eliminar\",\n  \"fieldEmptyForCvv\" : \"Introduce el CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Introduce una fecha de vencimiento.\",\n  \"fieldEmptyForCardholderName\" : \"Introduce el nombre del titular de la tarjeta.\",\n  \"fieldTooLongForCardholderName\" : \"El nombre del titular de la tarjeta debe tener menos de 256 caracteres.\",\n  \"fieldEmptyForNumber\" : \"Introduce un número.\",\n  \"fieldEmptyForPostalCode\" : \"Introduce un código postal.\",\n  \"fieldInvalidForCardholderName\" : \"El nombre del titular de la tarjeta no es válido.\",\n  \"fieldInvalidForCvv\" : \"El código de seguridad no es válido.\",\n  \"fieldInvalidForExpirationDate\" : \"La fecha de vencimiento no es válida.\",\n  \"fieldInvalidForNumber\" : \"El número de tarjeta no es válido.\",\n  \"fieldInvalidForPostalCode\" : \"El código postal no es válido.\",\n  \"genericError\" : \"Ha habido un problema.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Esta tarjeta de crédito ya existe como forma de pago guardada.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Comprueba la información e inténtalo de nuevo.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Comprueba la información e inténtalo de nuevo.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Error de red. Inténtalo de nuevo.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Error al verificar la tarjeta de crédito. Comprueba la información e inténtalo de nuevo.\",\n  \"paypalButtonMustBeUsed\" : \"Utiliza el botón de PayPal para continuar con el pago.\",\n  \"paypalAccountTokenizationFailedError\" : \"Se ha producido un error al añadir la cuenta PayPal. Inténtalo de nuevo.\",\n  \"paypalFlowFailedError\" : \"Se ha producido un error al conectar con PayPal. Inténtalo de nuevo.\",\n  \"paypalTokenizationRequestActiveError\" : \"La autorización del pago de PayPal ya está en curso.\",\n  \"venmoCanceledError\" : \"Ha habido un error. Asegúrate de tener la versión más reciente de la aplicación de Venmo instalada en el dispositivo y de que el navegador admita el cambio a Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"No se puede eliminar la forma de pago. Inténtalo de nuevo.\",\n  \"venmoAppFailedError\" : \"No se ha podido encontrar la aplicación de Venmo en tu dispositivo.\",\n  \"unsupportedCardTypeError\" : \"No se admite este tipo de tarjeta. Prueba con otra tarjeta.\",\n  \"applePayTokenizationError\" : \"Se ha producido un error de red al procesar el pago de Apple Pay. Inténtalo de nuevo.\",\n  \"applePayActiveCardError\" : \"Añade una tarjeta compatible a tu cartera de Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nombre del titular de la tarjeta\",\n  \"cardNumberLabel\" : \"Número de tarjeta\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 dígitos)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 dígitos)\",\n  \"cardholderNamePlaceholder\" : \"Nombre del titular de la tarjeta\",\n  \"expirationDateLabel\" : \"Fecha de vencimiento\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Código postal\",\n  \"saveCardLabel\" : \"Guardar tarjeta\",\n  \"payWithCard\" : \"Pagar con tarjeta\",\n  \"endingIn\" : \"Terminada en {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Tarjeta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],229:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Pagar con {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Elija otra forma de pago\",\n  \"chooseAWayToPay\" : \"Seleccione una forma de pago\",\n  \"otherWaysToPay\" : \"Otras formas de pago\",\n  \"edit\" : \"Editar\",\n  \"doneEditing\" : \"Listo\",\n  \"editPaymentMethods\" : \"Editar métodos de pago\",\n  \"CreditCardDeleteConfirmationMessage\" : \"¿Eliminar tarjeta {{secondaryIdentifier}} con terminación {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"¿Desea eliminar la cuenta de PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"¿Seguro que desea eliminar la cuenta de Venmo con el nombre de usuario {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"¿Seguro que desea eliminar esta forma de pago?\",\n  \"deleteCancelButton\" : \"Cancelar\",\n  \"deleteConfirmationButton\" : \"Eliminar\",\n  \"fieldEmptyForCvv\" : \"Ingrese un CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Ingrese una fecha de vencimiento.\",\n  \"fieldEmptyForCardholderName\" : \"Ingrese un nombre de titular de tarjeta.\",\n  \"fieldTooLongForCardholderName\" : \"El nombre del titular de la tarjeta debe tener menos de 256 caracteres.\",\n  \"fieldEmptyForNumber\" : \"Ingrese un número.\",\n  \"fieldEmptyForPostalCode\" : \"Ingrese un código postal.\",\n  \"fieldInvalidForCardholderName\" : \"El nombre del titular de la tarjeta no es válido.\",\n  \"fieldInvalidForCvv\" : \"Este código de seguridad no es válido.\",\n  \"fieldInvalidForExpirationDate\" : \"Esta fecha de vencimiento no es válida.\",\n  \"fieldInvalidForNumber\" : \"Este número de tarjeta no es válido.\",\n  \"fieldInvalidForPostalCode\" : \"Este código postal no es válido.\",\n  \"genericError\" : \"Se ha producido un error.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Esta tarjeta de crédito ya existe como forma de pago guardada.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Revise la información e inténtelo de nuevo.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Revise la información e inténtelo de nuevo.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Error de red. Inténtelo de nuevo.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"La verificación de la tarjeta de crédito falló. Revise la información e inténtelo de nuevo.\",\n  \"paypalButtonMustBeUsed\" : \"Utilice el botón de PayPal para continuar con su pago.\",\n  \"paypalAccountTokenizationFailedError\" : \"Se ha producido un error al agregar la cuenta de PayPal. Inténtelo de nuevo.\",\n  \"paypalFlowFailedError\" : \"Se ha producido un error al conectar con PayPal. Inténtelo de nuevo.\",\n  \"paypalTokenizationRequestActiveError\" : \"La autorización de pago de PayPal ya está en curso.\",\n  \"venmoCanceledError\" : \"Se ha producido un error. Asegúrese de que tiene la versión más reciente de la aplicación de Venmo instalada en su dispositivo y que su navegador admita el sitio web Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"No se pudo eliminar la forma de pago, inténtelo de nuevo.\",\n  \"venmoAppFailedError\" : \"No se pudo encontrar la aplicación de Venmo en su dispositivo.\",\n  \"unsupportedCardTypeError\" : \"Este tipo de tarjeta no es compatible. Inténtelo con otra tarjeta.\",\n  \"applePayTokenizationError\" : \"Se ha producido un error de red al procesar el pago de Apple Pay. Inténtelo de nuevo.\",\n  \"applePayActiveCardError\" : \"Agregue una tarjeta compatible a su cartera de Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nombre del titular de la tarjeta\",\n  \"cardNumberLabel\" : \"Número de tarjeta\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 dígitos)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 dígitos)\",\n  \"cardholderNamePlaceholder\" : \"Nombre del titular de la tarjeta\",\n  \"expirationDateLabel\" : \"Fecha de vencimiento\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Código postal\",\n  \"saveCardLabel\" : \"Guardar tarjeta\",\n  \"payWithCard\" : \"Pagar con tarjeta\",\n  \"endingIn\" : \"Con terminación {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Tarjeta\",\n  \"PayPal\" : \"Paypal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],230:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Maksuväline: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Valitse toinen maksutapa\",\n  \"chooseAWayToPay\" : \"Valitse maksutapa\",\n  \"otherWaysToPay\" : \"Muita maksutapoja\",\n  \"edit\" : \"Muokkaa\",\n  \"doneEditing\" : \"Valmis\",\n  \"editPaymentMethods\" : \"Muokkaa maksutapoja\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Haluatko poistaa {{secondaryIdentifier}}} -kortin, joka päättyy {{identifier}}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Haluatko poistaa PayPal-tilin {{identifier}}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Haluatko varmasti poistaa Venmo-tilin, jonka käyttäjätunnus on {{identifier}}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Haluatko varmasti poistaa tämän maksutavan?\",\n  \"deleteCancelButton\" : \"Peruuta\",\n  \"deleteConfirmationButton\" : \"Poista\",\n  \"fieldEmptyForCvv\" : \"Anna turvakoodi.\",\n  \"fieldEmptyForExpirationDate\" : \"Anna voimassaolon päättymispäivämäärä.\",\n  \"fieldEmptyForCardholderName\" : \"Anna kortinhaltijan nimi.\",\n  \"fieldTooLongForCardholderName\" : \"Kortinhaltijan nimen on oltava alle 256 merkkiä.\",\n  \"fieldEmptyForNumber\" : \"Anna numero.\",\n  \"fieldEmptyForPostalCode\" : \"Anna postinumero.\",\n  \"fieldInvalidForCardholderName\" : \"Kortinhaltijan nimi ei ole kelvollinen.\",\n  \"fieldInvalidForCvv\" : \"Turvakoodi ei ole kelvollinen.\",\n  \"fieldInvalidForExpirationDate\" : \"Päättymispäivämäärä ei ole kelvollinen.\",\n  \"fieldInvalidForNumber\" : \"Kortin numero ei ole kelvollinen.\",\n  \"fieldInvalidForPostalCode\" : \"Postinumero ei ole kelvollinen.\",\n  \"genericError\" : \"Jokin meni pieleen tässä päässä.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Tämä luottokortti on jo tallennettu maksutavaksi.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Tarkista tiedot ja yritä uudelleen.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Tarkista tiedot ja yritä uudelleen.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Verkkovirhe. Yritä uudelleen.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Luottokortin varmennus epäonnistui. Tarkista tiedot ja yritä uudelleen.\",\n  \"paypalButtonMustBeUsed\" : \"Jatka maksua PayPal-painikkeen avulla.\",\n  \"paypalAccountTokenizationFailedError\" : \"Jotain meni pieleen PayPal-tiliä lisätessä. Yritä uudelleen.\",\n  \"paypalFlowFailedError\" : \"Jotain meni pieleen muodostettaessa yhteyttä PayPaliin. Yritä uudelleen.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal-maksun valtuutus on jo meneillään.\",\n  \"venmoCanceledError\" : \"Jokin meni pieleen. Varmista, että laitteeseesi on asennettu Venmo-sovelluksen viimeisin versio, ja että selain tukee vaihtamista Venmoon.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Maksutavan poistaminen ei onnistu, yritä uudelleen.\",\n  \"venmoAppFailedError\" : \"Venmo-sovellusta ei löytynyt laitteesta.\",\n  \"unsupportedCardTypeError\" : \"Tätä korttityyppiä ei tueta. Kokeile toista korttia.\",\n  \"applePayTokenizationError\" : \"Tapahtui verkkovirhe Apple Pay -maksun käsittelyssä. Yritä uudelleen.\",\n  \"applePayActiveCardError\" : \"Lisää tuettu kortti Apple Pay -lompakkoon.\",\n  \"cardholderNameLabel\" : \"Kortinhaltijan nimi\",\n  \"cardNumberLabel\" : \"Kortin numero\",\n  \"cvvLabel\" : \"Kortin turvakoodi\",\n  \"cvvThreeDigitLabelSubheading\" : \"(kolme numeroa)\",\n  \"cvvFourDigitLabelSubheading\" : \"(neljä numeroa)\",\n  \"cardholderNamePlaceholder\" : \"Kortinhaltijan nimi\",\n  \"expirationDateLabel\" : \"Päättymispäivämäärä\",\n  \"expirationDateLabelSubheading\" : \"(KK/VV)\",\n  \"expirationDatePlaceholder\" : \"KK/VV\",\n  \"postalCodeLabel\" : \"Postinumero\",\n  \"saveCardLabel\" : \"Tallenna kortti\",\n  \"payWithCard\" : \"Maksa kortilla\",\n  \"endingIn\" : \"Päättyy {{lastFourCardDigits}}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kortti\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],231:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Payer avec {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choisir un autre mode de paiement\",\n  \"chooseAWayToPay\" : \"Choisir un mode de paiement\",\n  \"otherWaysToPay\" : \"Autres modes de paiement\",\n  \"edit\" : \"Modifier\",\n  \"doneEditing\" : \"Terminé\",\n  \"editPaymentMethods\" : \"Modifier les modes de paiement\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Supprimer la carte {{secondaryIdentifier}} se terminant par {{identifier}} ?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Supprimer le compte PayPal {{identifier}} ?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer le compte Venmo dont le nom d'utilisateur est {{identifier}} ?\",\n  \"genericDeleteConfirmationMessage\" : \"Voulez-vous vraiment supprimer ce mode paiement ?\",\n  \"deleteCancelButton\" : \"Annuler\",\n  \"deleteConfirmationButton\" : \"Supprimer\",\n  \"fieldEmptyForCvv\" : \"Saisissez un CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Saisissez une date d'expiration.\",\n  \"fieldEmptyForCardholderName\" : \"Saisissez le nom du titulaire de la carte.\",\n  \"fieldTooLongForCardholderName\" : \"Le nom du titulaire de la carte doit contenir moins de 256 caractères.\",\n  \"fieldEmptyForNumber\" : \"Saisissez un numéro.\",\n  \"fieldEmptyForPostalCode\" : \"Saisissez un code postal.\",\n  \"fieldInvalidForCardholderName\" : \"Le nom de ce titulaire de la carte n'est pas valide.\",\n  \"fieldInvalidForCvv\" : \"Ce cryptogramme visuel n'est pas valide.\",\n  \"fieldInvalidForExpirationDate\" : \"Cette date d'expiration n'est pas valide.\",\n  \"fieldInvalidForNumber\" : \"Ce numéro de carte n'est pas valide.\",\n  \"fieldInvalidForPostalCode\" : \"Ce code postal n'est pas valide.\",\n  \"genericError\" : \"Une erreur s'est produite de notre côté.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Cette carte de crédit est déjà enregistrée en tant que mode de paiement.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Veuillez vérifier vos informations, puis réessayer.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Veuillez vérifier vos informations, puis réessayer.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erreur de réseau. Réessayez.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Échec de vérification de la carte de crédit. Veuillez vérifier vos informations, puis réessayer.\",\n  \"paypalButtonMustBeUsed\" : \"Utilisez le bouton PayPal pour poursuivre votre paiement.\",\n  \"paypalAccountTokenizationFailedError\" : \"Une erreur s'est produite lors de l'ajout du compte PayPal. Veuillez réessayer.\",\n  \"paypalFlowFailedError\" : \"Une erreur s'est produite lors de la connexion à PayPal. Veuillez réessayer.\",\n  \"paypalTokenizationRequestActiveError\" : \"L'autorisation de paiement PayPal est déjà en cours.\",\n  \"venmoCanceledError\" : \"Une erreur s'est produite. Assurez-vous que la version la plus récente de l'application Venmo est installée sur votre appareil et que votre navigateur prend en charge la redirection vers Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Impossible de supprimer le mode de paiement. Réessayez.\",\n  \"venmoAppFailedError\" : \"L'application Venmo n'est pas présente sur votre appareil.\",\n  \"unsupportedCardTypeError\" : \"Ce type de carte n'est pas pris en charge. Veuillez essayer une autre carte.\",\n  \"applePayTokenizationError\" : \"Une erreur de réseau s'est produite lors du traitement du paiement Apple Pay. Veuillez réessayer.\",\n  \"applePayActiveCardError\" : \"Ajoutez une carte prise en charge à votre portefeuille Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nom du titulaire de la carte\",\n  \"cardNumberLabel\" : \"Numéro de carte\",\n  \"cvvLabel\" : \"Cryptogramme visuel\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 chiffres)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 chiffres)\",\n  \"cardholderNamePlaceholder\" : \"Nom du titulaire de la carte\",\n  \"expirationDateLabel\" : \"Date d'expiration\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Code postal\",\n  \"saveCardLabel\" : \"Enregistrer la carte\",\n  \"payWithCard\" : \"Payer par carte\",\n  \"endingIn\" : \"Se terminant par {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Carte\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],232:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Payer avec : {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choisir un autre mode de paiement\",\n  \"chooseAWayToPay\" : \"Choisir un mode de paiement\",\n  \"otherWaysToPay\" : \"Autres modes de paiement\",\n  \"edit\" : \"Modifier\",\n  \"doneEditing\" : \"Terminé\",\n  \"editPaymentMethods\" : \"Modifier les modes de paiement\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Supprimer la carte {{secondaryIdentifier}} se terminant par {{identifier}} ?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Supprimer le compte PayPal {{identifier}} ?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer le compte Venmo associé au nom d'utilisateur {{identifier}} ?\",\n  \"genericDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer ce mode de paiement ?\",\n  \"deleteCancelButton\" : \"Annuler\",\n  \"deleteConfirmationButton\" : \"Supprimer\",\n  \"fieldEmptyForCvv\" : \"Renseignez un cryptogramme visuel.\",\n  \"fieldEmptyForExpirationDate\" : \"Renseignez une date d'expiration.\",\n  \"fieldEmptyForCardholderName\" : \"Renseignez le nom du titulaire de la carte.\",\n  \"fieldTooLongForCardholderName\" : \"Le nom du titulaire de la carte doit comporter moins de 256 caractères.\",\n  \"fieldEmptyForNumber\" : \"Renseignez un numéro.\",\n  \"fieldEmptyForPostalCode\" : \"Renseignez un code postal.\",\n  \"fieldInvalidForCardholderName\" : \"Le nom de ce titulaire de la carte est incorrect.\",\n  \"fieldInvalidForCvv\" : \"Ce cryptogramme visuel est incorrect.\",\n  \"fieldInvalidForExpirationDate\" : \"Cette date d'expiration est incorrecte.\",\n  \"fieldInvalidForNumber\" : \"Ce numéro de carte est incorrect.\",\n  \"fieldInvalidForPostalCode\" : \"Ce code postal est incorrect.\",\n  \"genericError\" : \"Une erreur est survenue.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Cette carte bancaire existe déjà en tant que mode de paiement enregistré.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Vérifiez vos informations et réessayez.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Vérifiez vos informations et réessayez.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erreur réseau. Réessayez.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Échec de la vérification de carte bancaire. Vérifiez vos informations et réessayez.\",\n  \"paypalButtonMustBeUsed\" : \"Utilisez le bouton PayPal pour poursuivre le paiement.\",\n  \"paypalAccountTokenizationFailedError\" : \"Une erreur est survenue lors de l'ajout du compte PayPal. Réessayez.\",\n  \"paypalFlowFailedError\" : \"Une erreur est survenue lors de la connexion à PayPal. Réessayez.\",\n  \"paypalTokenizationRequestActiveError\" : \"L'autorisation de paiement PayPal est déjà en cours.\",\n  \"venmoCanceledError\" : \"Une erreur est survenue. Vérifiez que la dernière version de l'application Venmo est installée sur votre appareil et que votre navigateur prend en charge la redirection vers Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Impossible de supprimer le mode de paiement, réessayez.\",\n  \"venmoAppFailedError\" : \"Nous n'avons pas trouvé l'application Venmo sur votre appareil.\",\n  \"unsupportedCardTypeError\" : \"Ce type de carte n'est pas pris en charge. Essayez une autre carte.\",\n  \"applePayTokenizationError\" : \"Une erreur réseau est survenue lors du traitement du paiement Apple Pay. Réessayez.\",\n  \"applePayActiveCardError\" : \"Enregistrez une carte prise en charge sur votre portefeuille Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nom du titulaire de la carte\",\n  \"cardNumberLabel\" : \"Numéro de carte\",\n  \"cvvLabel\" : \"Crypto.\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 chiffres)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 chiffres)\",\n  \"cardholderNamePlaceholder\" : \"Nom du titulaire de la carte\",\n  \"expirationDateLabel\" : \"Date d'expiration\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Code postal\",\n  \"saveCardLabel\" : \"Enregistrer la carte\",\n  \"payWithCard\" : \"Payer par carte\",\n  \"endingIn\" : \"Se terminant par {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Carte\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],233:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Payer avec {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choisir un autre mode de paiement\",\n  \"chooseAWayToPay\" : \"Choisir un mode de paiement\",\n  \"otherWaysToPay\" : \"Autres modes de paiement\",\n  \"edit\" : \"Modifier\",\n  \"doneEditing\" : \"Terminé\",\n  \"editPaymentMethods\" : \"Modifier les modes de paiement\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Supprimer la carte {{secondaryIdentifier}}} se terminant par {{identifier}}} ?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Supprimer le compte PayPal {{identifier}}} ?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer le compte Venmo associé au nom d'utilisateur {{identifier}}} ?\",\n  \"genericDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer ce mode de paiement ?\",\n  \"deleteCancelButton\" : \"Annuler\",\n  \"deleteConfirmationButton\" : \"Supprimer\",\n  \"fieldEmptyForCvv\" : \"Renseignez un cryptogramme visuel.\",\n  \"fieldEmptyForExpirationDate\" : \"Renseignez une date d'expiration.\",\n  \"fieldEmptyForCardholderName\" : \"Renseignez le nom du titulaire de la carte.\",\n  \"fieldTooLongForCardholderName\" : \"Le nom du titulaire de la carte doit comporter moins de 256 caractères.\",\n  \"fieldEmptyForNumber\" : \"Renseignez un numéro.\",\n  \"fieldEmptyForPostalCode\" : \"Renseignez un code postal.\",\n  \"fieldInvalidForCardholderName\" : \"Le nom de ce titulaire de la carte est incorrect.\",\n  \"fieldInvalidForCvv\" : \"Ce cryptogramme visuel est incorrect.\",\n  \"fieldInvalidForExpirationDate\" : \"Cette date d'expiration est incorrecte.\",\n  \"fieldInvalidForNumber\" : \"Ce numéro de carte est incorrect.\",\n  \"fieldInvalidForPostalCode\" : \"Ce code postal est incorrect.\",\n  \"genericError\" : \"Une erreur est survenue.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Cette carte bancaire existe déjà en tant que mode de paiement enregistré.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Vérifiez vos informations et réessayez.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Vérifiez vos informations et réessayez.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erreur réseau. Réessayez.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Échec de la vérification de carte bancaire. Vérifiez vos informations et réessayez.\",\n  \"paypalButtonMustBeUsed\" : \"Utilisez le bouton PayPal pour poursuivre le paiement.\",\n  \"paypalAccountTokenizationFailedError\" : \"Une erreur est survenue lors de l'ajout du compte PayPal. Réessayez.\",\n  \"paypalFlowFailedError\" : \"Une erreur est survenue lors de la connexion à PayPal. Réessayez.\",\n  \"paypalTokenizationRequestActiveError\" : \"L'autorisation de paiement PayPal est déjà en cours.\",\n  \"venmoCanceledError\" : \"Une erreur est survenue. Vérifiez que la dernière version de l'application Venmo est installée sur votre appareil et que votre navigateur prend en charge la redirection vers Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Impossible de supprimer le mode de paiement, réessayez.\",\n  \"venmoAppFailedError\" : \"Nous n'avons pas trouvé l'application Venmo sur votre appareil.\",\n  \"unsupportedCardTypeError\" : \"Ce type de carte n'est pas pris en charge. Essayez une autre carte.\",\n  \"applePayTokenizationError\" : \"Une erreur réseau est survenue lors du traitement du paiement Apple Pay. Réessayez.\",\n  \"applePayActiveCardError\" : \"Enregistrez une carte prise en charge sur votre portefeuille Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nom du titulaire de la carte\",\n  \"cardNumberLabel\" : \"Numéro de carte\",\n  \"cvvLabel\" : \"Crypto.\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 chiffres)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 chiffres)\",\n  \"cardholderNamePlaceholder\" : \"Nom du titulaire de la carte\",\n  \"expirationDateLabel\" : \"Date d'expiration\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Code postal\",\n  \"saveCardLabel\" : \"Enregistrer la carte\",\n  \"payWithCard\" : \"Payer par carte\",\n  \"endingIn\" : \"Se termine le {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Carte\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],234:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"תשלום באמצעות {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"עליך לבחור שיטת תשלום אחרת\",\n  \"chooseAWayToPay\" : \"כיצד ברצונך לשלם?\",\n  \"otherWaysToPay\" : \"שיטות תשלום אחרות\",\n  \"edit\" : \"עריכה\",\n  \"doneEditing\" : \"בוצע\",\n  \"editPaymentMethods\" : \"עריכת שיטות תשלום\",\n  \"CreditCardDeleteConfirmationMessage\" : \"למחוק {{secondaryIdentifier}} הכרטיס המסתיים {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"למחוק PayPal החשבון {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"האם אתה בטוח שברצונך למחוק את חשבון Venmo הרשום תחת שם המשתמש {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"האם אתה בטוח שברצונך למחוק שיטת תשלום זו?\",\n  \"deleteCancelButton\" : \"ביטול\",\n  \"deleteConfirmationButton\" : \"מחיקה\",\n  \"fieldEmptyForCvv\" : \"עליך למלא את מספר האבטחה של כרטיס האשראי.\",\n  \"fieldEmptyForExpirationDate\" : \"עליך למלא את תאריך פקיעת התוקף.\",\n  \"fieldEmptyForCardholderName\" : \"עליך למלא את שם בעל הכרטיס.\",\n  \"fieldTooLongForCardholderName\" : \"שם בעל הכרטיס יכול להכיל 256 תווים לכל היותר.\",\n  \"fieldEmptyForNumber\" : \"עליך למלא את המספר.\",\n  \"fieldEmptyForPostalCode\" : \"עליך למלא את המיקוד.\",\n  \"fieldInvalidForCardholderName\" : \"שם בעל הכרטיס אינו חוקי.\",\n  \"fieldInvalidForCvv\" : \"קוד אבטחה אינו חוקי.\",\n  \"fieldInvalidForExpirationDate\" : \"תאריך פקיעת התוקף אינו חוקי.\",\n  \"fieldInvalidForNumber\" : \"מספר כרטיס האשראי אינו חוקי.\",\n  \"fieldInvalidForPostalCode\" : \"המיקוד אינו חוקי.\",\n  \"genericError\" : \"נראה שמשהו השתבש בצד שלנו.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"כרטיס אשראי זה כבר שמור כשיטת תשלום.\",\n  \"hostedFieldsFailedTokenizationError\" : \"עליך לבדוק את הפרטים שלך ולנסות שוב.\",\n  \"hostedFieldsFieldsInvalidError\" : \"עליך לבדוק את הפרטים שלך ולנסות שוב.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"שגיאת רשת. עליך לנסות שוב.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"אימות כרטיס האשראי נכשל. עליך לבדוק את הפרטים שלך ולנסות שוב.\",\n  \"paypalButtonMustBeUsed\" : \"להשתמש בלחצן PayPal כדי להמשיך בביצוע התשלום שלך.\",\n  \"paypalAccountTokenizationFailedError\" : \"משהו השתבש בעת הוספת חשבון PayPal. עליך לנסות שוב.\",\n  \"paypalFlowFailedError\" : \"משהו השתבש בהתחברות ל-PayPal. עליך לנסות שוב.\",\n  \"paypalTokenizationRequestActiveError\" : \"אישור התשלום של PayPal כבר מתבצע.\",\n  \"venmoCanceledError\" : \"נראה שמשהו השתבש. עליך לוודא שהגרסה העדכנית ביותר של אפליקציית Venmo מותקנת במכשיר שלך, ושהדפדפן שלך תומך במעבר ל-Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"לא הצלחנו למחוק את שיטת התשלום, עליך לנסות שוב.\",\n  \"venmoAppFailedError\" : \"לא מצאנו למצוא את אפליקציית Venmo במכשיר שלך.\",\n  \"unsupportedCardTypeError\" : \"סוג כרטיס זה אינו נתמך. עליך לנסות כרטיס אחר.\",\n  \"applePayTokenizationError\" : \"אירעה שגיאת רשת בעת עיבוד תשלום התשלומים של Apple Pay. עליך לנסות שוב.\",\n  \"applePayActiveCardError\" : \"הוספת כרטיס נתמך לארנק Apple Pay שלך.\",\n  \"cardholderNameLabel\" : \"שם בעל הכרטיס\",\n  \"cardNumberLabel\" : \"מספר כרטיס\",\n  \"cvvLabel\" : \"קוד אבטחת כרטיס (CVV)\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 ספרות)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 ספרות)\",\n  \"cardholderNamePlaceholder\" : \"שם בעל הכרטיס\",\n  \"expirationDateLabel\" : \"תאריך פקיעת תוקף\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY‏\",\n  \"postalCodeLabel\" : \"מיקוד\",\n  \"saveCardLabel\" : \"שמירת כרטיס אשראי\",\n  \"payWithCard\" : \"לשלם באמצעות כרטיס אשראי\",\n  \"endingIn\" : \"מסתיים בתאריך {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"כרטיס\",\n  \"PayPal\" : \"PayPal‏\",\n  \"PayPal Credit\" : \"PayPal Credit‏\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"אמריקן אקספרס\",\n  \"Discover\" : \"Discover‏\",\n  \"Diners Club\" : \"דיינרס קלאב\",\n  \"Elo\" : \"Elo‏\",\n  \"Hiper\" : \"Hiper‏\",\n  \"Hipercard\" : \"HiperCard‏\",\n  \"MasterCard\" : \"מאסטרקארד\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB‏\",\n  \"Maestro\" : \"Maestro‏\",\n  \"UnionPay\" : \"UnionPay‏\"\n}\n;\n\n},{}],235:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Fizetés ezzel: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Válasszon másik fizetési módot\",\n  \"chooseAWayToPay\" : \"Válasszon fizetési módot\",\n  \"otherWaysToPay\" : \"Egyéb fizetési módok\",\n  \"edit\" : \"Szerkesztés\",\n  \"doneEditing\" : \"Kész\",\n  \"editPaymentMethods\" : \"Fizetési módok szerkesztése\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Törli a(z) {{identifier}}} végű {{secondaryIdentifier}}} kártyát?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Törli a(z) {{identifier}} PayPal-számlát?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Biztosan törli a(z) {{identifier}} felhasználónévhez tartozó Venmo-számlát?\",\n  \"genericDeleteConfirmationMessage\" : \"Biztosan törli ezt a fizetési módot?\",\n  \"deleteCancelButton\" : \"Mégse\",\n  \"deleteConfirmationButton\" : \"Törlés\",\n  \"fieldEmptyForCvv\" : \"Kérjük, töltse ki a CVV-számot.\",\n  \"fieldEmptyForExpirationDate\" : \"Töltse ki a lejárati dátumot.\",\n  \"fieldEmptyForCardholderName\" : \"Töltse ki a kártyabirtokos nevét.\",\n  \"fieldTooLongForCardholderName\" : \"A kártyatulajdonos neve nem lehet hosszabb mint 256 karakter.\",\n  \"fieldEmptyForNumber\" : \"Töltse ki a számot.\",\n  \"fieldEmptyForPostalCode\" : \"Töltse ki az irányítószámot.\",\n  \"fieldInvalidForCardholderName\" : \"Ez a kártyabirtokos neve nem érvényes.\",\n  \"fieldInvalidForCvv\" : \"Ez a biztonsági kód nem érvényes.\",\n  \"fieldInvalidForExpirationDate\" : \"Ez a lejárati dátum érvénytelen.\",\n  \"fieldInvalidForNumber\" : \"Ez a kártyaszám nem érvényes.\",\n  \"fieldInvalidForPostalCode\" : \"Ez az irányítószám nem érvényes.\",\n  \"genericError\" : \"Hiba történt a mi oldalunkon.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Ez a hitelkártya már szerepel mentett fizetési módként.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Ellenőrizze az adatait, majd próbálja újra.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Ellenőrizze az adatait, majd próbálja újra.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Hálózati hiba. Próbálja újra.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"A hitelkártya hitelesítése sikertelen. Ellenőrizze az adatait, majd próbálja újra.\",\n  \"paypalButtonMustBeUsed\" : \"A fizetés folytatásához használja a PayPal-gombot.\",\n  \"paypalAccountTokenizationFailedError\" : \"Hiba történt a PayPal-számla hozzáadása közben. Próbálja újra.\",\n  \"paypalFlowFailedError\" : \"Hiba történt a PayPalhoz való kapcsolódás közben. Próbálja újra.\",\n  \"paypalTokenizationRequestActiveError\" : \"A PayPal-fizetés engedélyezése már folyamatban van.\",\n  \"venmoCanceledError\" : \"Hiba történt. Ellenőrizze, hogy eszközére a Venmo-alkalmazás legfrissebb verziója van-e telepítve, és hogy a böngészője támogatja-e a Venmo-ra történő átváltást.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Nem sikerült törölni a fizetési módot, próbálja újra.\",\n  \"venmoAppFailedError\" : \"A Venmo alkalmazást nem találja a rendszer az eszközön.\",\n  \"unsupportedCardTypeError\" : \"Ez a kártyatípus nem támogatott. Próbáljon meg egy másik kártyát.\",\n  \"applePayTokenizationError\" : \"Hálózati hiba történt az Apple Pay-kifizetés közben. Próbálja újra.\",\n  \"applePayActiveCardError\" : \"Adjon egy támogatott kártyát az Apple Pay pénztárcához.\",\n  \"cardholderNameLabel\" : \"Kártyabirtokos neve\",\n  \"cardNumberLabel\" : \"Kártyaszám\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 számjegy)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 számjegy)\",\n  \"cardholderNamePlaceholder\" : \"Kártyabirtokos neve\",\n  \"expirationDateLabel\" : \"Lejárati dátum\",\n  \"expirationDateLabelSubheading\" : \"(HH/ÉÉ)\",\n  \"expirationDatePlaceholder\" : \"HH/ÉÉ\",\n  \"postalCodeLabel\" : \"Irányítószám\",\n  \"saveCardLabel\" : \"Kártya mentése\",\n  \"payWithCard\" : \"Fizetés bankkártyával vagy hitelkártyával\",\n  \"endingIn\" : \"{{lastFourCardDigits}}} végű\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kártya\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],236:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Membayar dengan {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Pilih metode pembayaran lain\",\n  \"chooseAWayToPay\" : \"Pilih cara pembayaran\",\n  \"otherWaysToPay\" : \"Cara lain untuk membayar\",\n  \"edit\" : \"Edit\",\n  \"doneEditing\" : \"Selesai\",\n  \"editPaymentMethods\" : \"Edit metode pembayaran\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Hapus kartu {{secondaryIdentifier}} yang berakhiran dengan {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Hapus rekening PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Yakin ingin menghapus rekening Venmo dengan nama pengguna {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Yakin ingin menghapus metode pembayaran ini?\",\n  \"deleteCancelButton\" : \"Batalkan\",\n  \"deleteConfirmationButton\" : \"Hapus\",\n  \"fieldEmptyForCvv\" : \"Mohon mengisi CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Silakan mengisi tanggal kedaluwarsa.\",\n  \"fieldEmptyForCardholderName\" : \"Silakan mengisi nama pemilik kartu.\",\n  \"fieldTooLongForCardholderName\" : \"Nama pemilik kartu harus kurang dari 256 karakter.\",\n  \"fieldEmptyForNumber\" : \"Mohon mengisi angkanya.\",\n  \"fieldEmptyForPostalCode\" : \"Mohon mengisi kode pos.\",\n  \"fieldInvalidForCardholderName\" : \"Nama pemilik kartu ini tidak valid.\",\n  \"fieldInvalidForCvv\" : \"Kode keamanan ini tidak valid.\",\n  \"fieldInvalidForExpirationDate\" : \"Tanggal kedaluwarsa ini tidak valid.\",\n  \"fieldInvalidForNumber\" : \"Nomor kartu ini tidak valid.\",\n  \"fieldInvalidForPostalCode\" : \"Kode pos ini tidak valid.\",\n  \"genericError\" : \"Ada yang salah pada sistem kami.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Kartu kredit ini telah ada sebelumnya sebagai metode pembayaran tersimpan.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Mohon periksa informasi Anda dan coba lagi.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Mohon periksa informasi Anda dan coba lagi.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Kesalahan jaringan. Mohon coba lagi.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Verifikasi kartu kredit gagal. Mohon periksa informasi Anda dan coba lagi.\",\n  \"paypalButtonMustBeUsed\" : \"Gunakan tombol PayPal untuk melanjutkan pembayaran.\",\n  \"paypalAccountTokenizationFailedError\" : \"Terjadi kesalahan saat menambahkan rekening PayPal. Mohon coba lagi.\",\n  \"paypalFlowFailedError\" : \"Terjadi kesalahan ketika menghubungkan ke PayPal. Mohon coba lagi.\",\n  \"paypalTokenizationRequestActiveError\" : \"Otorisasi pembayaran PayPal sedang diproses.\",\n  \"venmoCanceledError\" : \"Terjadi kesalahan. Pastikan Anda memiliki aplikasi Venmo versi terbaru di perangkat dan peramban Anda mendukung peralihan ke Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Tidak dapat menghapus metode pembayaran, coba lagi.\",\n  \"venmoAppFailedError\" : \"Aplikasi Venmo tidak dapat ditemukan di perangkat Anda.\",\n  \"unsupportedCardTypeError\" : \"Jenis kartu ini tidak didukung. Mohon coba kartu lainnya.\",\n  \"applePayTokenizationError\" : \"Terjadi kesalahan pada jaringan saat memproses pembayaran Apple Pay. Mohon coba lagi.\",\n  \"applePayActiveCardError\" : \"Tambahkan kartu yang didukung oleh wallet Apple Pay Anda.\",\n  \"cardholderNameLabel\" : \"Nama Pemilik Kartu\",\n  \"cardNumberLabel\" : \"Nomor Kartu\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 angka)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 angka)\",\n  \"cardholderNamePlaceholder\" : \"Nama Pemilik Kartu\",\n  \"expirationDateLabel\" : \"Tanggal Kedaluwarsa\",\n  \"expirationDateLabelSubheading\" : \"(BB/TT)\",\n  \"expirationDatePlaceholder\" : \"BB/TT\",\n  \"postalCodeLabel\" : \"Kode Pos\",\n  \"saveCardLabel\" : \"Simpan kartu\",\n  \"payWithCard\" : \"Bayar dengan kartu\",\n  \"endingIn\" : \"Berakhiran dengan {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kartu\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Jelajahi\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],237:[function(require,module,exports){\n/* eslint-disable camelcase */\n'use strict';\n\nvar assign = require('../lib/assign').assign;\n\nvar fiveCharacterLocales = {\n  ar_EG: require('./ar_EG'),\n  cs_CZ: require('./cs_CZ'),\n  da_DK: require('./da_DK'),\n  de_DE: require('./de_DE'),\n  el_GR: require('./el_GR'),\n  en_AU: require('./en_AU'),\n  en_GB: require('./en_GB'),\n  en_IN: require('./en_IN'),\n  en_US: require('./en_US'),\n  es_ES: require('./es_ES'),\n  es_XC: require('./es_XC'),\n  fi_FI: require('./fi_FI'),\n  fr_CA: require('./fr_CA'),\n  fr_FR: require('./fr_FR'),\n  fr_XC: require('./fr_XC'),\n  he_IL: require('./he_IL'),\n  hu_HU: require('./hu_HU'),\n  id_ID: require('./id_ID'),\n  it_IT: require('./it_IT'),\n  ja_JP: require('./ja_JP'),\n  ko_KR: require('./ko_KR'),\n  nl_NL: require('./nl_NL'),\n  no_NO: require('./no_NO'),\n  pl_PL: require('./pl_PL'),\n  pt_BR: require('./pt_BR'),\n  pt_PT: require('./pt_PT'),\n  ru_RU: require('./ru_RU'),\n  sk_SK: require('./sk_SK'),\n  sv_SE: require('./sv_SE'),\n  th_TH: require('./th_TH'),\n  zh_CN: require('./zh_CN'),\n  zh_HK: require('./zh_HK'),\n  zh_TW: require('./zh_TW'),\n  zh_XC: require('./zh_XC')\n};\n\nvar twoCharacterLocaleAliases = {\n  ar: fiveCharacterLocales.ar_EG,\n  cs: fiveCharacterLocales.cs_CZ,\n  da: fiveCharacterLocales.da_DK,\n  de: fiveCharacterLocales.de_DE,\n  el: fiveCharacterLocales.el_GR,\n  en: fiveCharacterLocales.en_US,\n  es: fiveCharacterLocales.es_ES,\n  fi: fiveCharacterLocales.fi_FI,\n  fr: fiveCharacterLocales.fr_FR,\n  id: fiveCharacterLocales.id_ID,\n  it: fiveCharacterLocales.it_IT,\n  hu: fiveCharacterLocales.hu_HU,\n  ja: fiveCharacterLocales.ja_JP,\n  ko: fiveCharacterLocales.ko_KR,\n  nl: fiveCharacterLocales.nl_NL,\n  no: fiveCharacterLocales.no_NO,\n  pl: fiveCharacterLocales.pl_PL,\n  pt: fiveCharacterLocales.pt_PT,\n  ru: fiveCharacterLocales.ru_RU,\n  sk: fiveCharacterLocales.sk_SK,\n  sv: fiveCharacterLocales.sv_SE,\n  th: fiveCharacterLocales.th_TH,\n  zh: fiveCharacterLocales.zh_CN\n};\n\nmodule.exports = {\n  twoCharacterLocaleAliases: twoCharacterLocaleAliases,\n  fiveCharacterLocales: fiveCharacterLocales,\n  translations: assign({}, twoCharacterLocaleAliases, fiveCharacterLocales)\n};\n/* eslint-enable camelcase */\n\n},{\"../lib/assign\":202,\"./ar_EG\":219,\"./cs_CZ\":220,\"./da_DK\":221,\"./de_DE\":222,\"./el_GR\":223,\"./en_AU\":224,\"./en_GB\":225,\"./en_IN\":226,\"./en_US\":227,\"./es_ES\":228,\"./es_XC\":229,\"./fi_FI\":230,\"./fr_CA\":231,\"./fr_FR\":232,\"./fr_XC\":233,\"./he_IL\":234,\"./hu_HU\":235,\"./id_ID\":236,\"./it_IT\":238,\"./ja_JP\":239,\"./ko_KR\":240,\"./nl_NL\":241,\"./no_NO\":242,\"./pl_PL\":243,\"./pt_BR\":244,\"./pt_PT\":245,\"./ru_RU\":246,\"./sk_SK\":247,\"./sv_SE\":248,\"./th_TH\":249,\"./zh_CN\":250,\"./zh_HK\":251,\"./zh_TW\":252,\"./zh_XC\":253}],238:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Metodo di pagamento: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Scegli un altro metodo di pagamento\",\n  \"chooseAWayToPay\" : \"Scegli un metodo di pagamento\",\n  \"otherWaysToPay\" : \"Altri metodi di pagamento\",\n  \"edit\" : \"Modifica\",\n  \"doneEditing\" : \"Fine\",\n  \"editPaymentMethods\" : \"Modifica metodi di pagamento\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Eliminare la carta {{secondaryIdentifier}} le cui ultime cifre sono {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Eliminare il conto PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Vuoi davvero eliminare il conto Venmo con il nome utente {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Vuoi davvero eliminare questo metodo di pagamento?\",\n  \"deleteCancelButton\" : \"Annulla\",\n  \"deleteConfirmationButton\" : \"Rimuovi\",\n  \"fieldEmptyForCvv\" : \"Compila un CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Compila una data di scadenza.\",\n  \"fieldEmptyForCardholderName\" : \"Compila un nome del titolare.\",\n  \"fieldTooLongForCardholderName\" : \"Il nome del titolare della carta non può contenere più di 256 caratteri.\",\n  \"fieldEmptyForNumber\" : \"Compila un numero.\",\n  \"fieldEmptyForPostalCode\" : \"Compila un CAP.\",\n  \"fieldInvalidForCardholderName\" : \"Il nome del titolare non è valido.\",\n  \"fieldInvalidForCvv\" : \"Il codice di sicurezza non è valido.\",\n  \"fieldInvalidForExpirationDate\" : \"La data di scadenza non è valida.\",\n  \"fieldInvalidForNumber\" : \"Il numero di carta non è valido.\",\n  \"fieldInvalidForPostalCode\" : \"Il CAP non è valido.\",\n  \"genericError\" : \"Si è verificato un errore nei nostri sistemi.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Questa carta di credito esiste già come metodo di pagamento salvato.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Controlla i tuoi dati e riprova.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Controlla i tuoi dati e riprova.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Errore di rete. Riprova.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Verifica della carta di credito non riuscita. Controlla i tuoi dati e riprova.\",\n  \"paypalButtonMustBeUsed\" : \"Usa il pulsante PayPal per continuare con il pagamento.\",\n  \"paypalAccountTokenizationFailedError\" : \"Si è verificato un errore durante l'aggiunta del conto PayPal. Riprova.\",\n  \"paypalFlowFailedError\" : \"Si è verificato un errore durante la connessione a PayPal. Riprova.\",\n  \"paypalTokenizationRequestActiveError\" : \"Autorizzazione di pagamento PayPal già in corso.\",\n  \"venmoCanceledError\" : \"Si è verificato un errore. Assicurati di avere installato la versione più recente dell'app Venmo sul tuo dispositivo e che il tuo browser supporti il passaggio a Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Impossibile eliminare il metodo di pagamento, riprova.\",\n  \"venmoAppFailedError\" : \"Impossibile trovare l'app Venmo sul tuo dispositivo.\",\n  \"unsupportedCardTypeError\" : \"Questo tipo di carta non è supportato. Prova con un'altra carta.\",\n  \"applePayTokenizationError\" : \"Si è verificato un errore di rete durante l'elaborazione del pagamento Apple Pay. Riprova.\",\n  \"applePayActiveCardError\" : \"Aggiungi una carta supportata al tuo portafoglio Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nome del titolare\",\n  \"cardNumberLabel\" : \"Numero di carta\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 cifre)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 cifre)\",\n  \"cardholderNamePlaceholder\" : \"Nome del titolare\",\n  \"expirationDateLabel\" : \"Data di scadenza\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"CAP\",\n  \"saveCardLabel\" : \"Salva carta\",\n  \"payWithCard\" : \"Paga con una carta\",\n  \"endingIn\" : \"Le ultime cifre sono {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Carta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],239:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"{{paymentSource}}でのお支払い\",\n  \"chooseAnotherWayToPay\" : \"別の支払方法を選択してください\",\n  \"chooseAWayToPay\" : \"支払方法を選択してください\",\n  \"otherWaysToPay\" : \"その他の支払方法\",\n  \"edit\" : \"編集\",\n  \"doneEditing\" : \"完了\",\n  \"editPaymentMethods\" : \"支払方法の編集\",\n  \"CreditCardDeleteConfirmationMessage\" : \"{{secondaryIdentifier}}カード(末尾番号: {{identifier}})を削除しますか?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"PayPalアカウント{{identifier}}を削除しますか?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"ユーザー名{{identifier}}のVenmoアカウントを削除してよろしいですか?\",\n  \"genericDeleteConfirmationMessage\" : \"この支払方法を削除しますか?\",\n  \"deleteCancelButton\" : \"キャンセル\",\n  \"deleteConfirmationButton\" : \"削除\",\n  \"fieldEmptyForCvv\" : \"CVVを入力してください。\",\n  \"fieldEmptyForExpirationDate\" : \"有効期限を入力してください。\",\n  \"fieldEmptyForCardholderName\" : \"カード保有者の名前を入力してください。\",\n  \"fieldTooLongForCardholderName\" : \"カード保有者の名前は256文字未満にしてください。\",\n  \"fieldEmptyForNumber\" : \"番号を入力してください。\",\n  \"fieldEmptyForPostalCode\" : \"郵便番号を入力してください。\",\n  \"fieldInvalidForCardholderName\" : \"このカード保有者の名前は無効です。\",\n  \"fieldInvalidForCvv\" : \"このセキュリティコードは無効です。\",\n  \"fieldInvalidForExpirationDate\" : \"この有効期限は無効です。\",\n  \"fieldInvalidForNumber\" : \"このカード番号は無効です。\",\n  \"fieldInvalidForPostalCode\" : \"この郵便番号は無効です。\",\n  \"genericError\" : \"弊社側で問題が発生しました。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"このクレジットカードは、保存済みの支払方法としてすでに存在します。\",\n  \"hostedFieldsFailedTokenizationError\" : \"情報を確認してもう一度お試しください。\",\n  \"hostedFieldsFieldsInvalidError\" : \"情報を確認してもう一度お試しください。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"ネットワークエラーです。再度お試しください。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"クレジットカードの認証に失敗しました。情報を確認してもう一度お試しください。\",\n  \"paypalButtonMustBeUsed\" : \"支払いを続行するには、PayPalボタンを使用します。\",\n  \"paypalAccountTokenizationFailedError\" : \"PayPalアカウントの追加中に問題が発生しました。再度お試しください。\",\n  \"paypalFlowFailedError\" : \"PayPalへの接続に問題が発生しました。再度お試しください。\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPalの支払い承認はすでに処理中です。\",\n  \"venmoCanceledError\" : \"問題が発生しました。お使いの端末にVenmoアプリの最新バージョンがインストールされており、お使いのブラウザがVenmoへの切り替えをサポートしていることをご確認ください。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"支払方法を削除できない場合は、もう一度お試しください。\",\n  \"venmoAppFailedError\" : \"お客さまの端末でVenmoアプリを見つけることができませんでした。\",\n  \"unsupportedCardTypeError\" : \"このカードのタイプはサポートされていません。別のカードをご使用ください。\",\n  \"applePayTokenizationError\" : \"Apple Payの支払いの処理中にネットワークエラーが発生しました。再度お試しください。\",\n  \"applePayActiveCardError\" : \"Apple Payウォレットに対応しているカードを追加してください。\",\n  \"cardholderNameLabel\" : \"カード保有者の名前\",\n  \"cardNumberLabel\" : \"カード番号\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3桁)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4桁)\",\n  \"cardholderNamePlaceholder\" : \"カード保有者の名前\",\n  \"expirationDateLabel\" : \"有効期限\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"郵便番号\",\n  \"saveCardLabel\" : \"カードを保存\",\n  \"payWithCard\" : \"カードで支払う\",\n  \"endingIn\" : \"末尾番号: {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"カード\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"銀聯(UnionPay)\"\n}\n;\n\n},{}],240:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"결제수단: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"다른 결제수단을 선택해 주세요.\",\n  \"chooseAWayToPay\" : \"결제수단 선택\",\n  \"otherWaysToPay\" : \"다른 결제수단\",\n  \"edit\" : \"편집\",\n  \"doneEditing\" : \"완료\",\n  \"editPaymentMethods\" : \"결제수단 편집\",\n  \"CreditCardDeleteConfirmationMessage\" : \"{{identifier}}(으)로 끝나는 {{secondaryIdentifier}} 카드를 삭제하시겠습니까?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"PayPal 계정 {{identifier}}을(를) 삭제하시겠습니까?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"사용자 이름 {{identifier}}의 Venmo 계정을 정말 삭제하시겠습니까?\",\n  \"genericDeleteConfirmationMessage\" : \"이 결제수단을 삭제하시겠습니까?\",\n  \"deleteCancelButton\" : \"취소\",\n  \"deleteConfirmationButton\" : \"삭제\",\n  \"fieldEmptyForCvv\" : \"CVV를 입력하세요.\",\n  \"fieldEmptyForExpirationDate\" : \"만료일을 입력하세요.\",\n  \"fieldEmptyForCardholderName\" : \"카드 소유자 이름을 입력하세요.\",\n  \"fieldTooLongForCardholderName\" : \"카드 소유자 이름은 256자 미만이어야 합니다.\",\n  \"fieldEmptyForNumber\" : \"번호를 입력하세요.\",\n  \"fieldEmptyForPostalCode\" : \"우편번호를 입력하세요.\",\n  \"fieldInvalidForCardholderName\" : \"이 카드 소유자 이름은 유효하지 않습니다.\",\n  \"fieldInvalidForCvv\" : \"이 보안 코드는 유효하지 않습니다.\",\n  \"fieldInvalidForExpirationDate\" : \"이 만료일은 유효하지 않습니다.\",\n  \"fieldInvalidForNumber\" : \"이 카드 번호는 유효하지 않습니다.\",\n  \"fieldInvalidForPostalCode\" : \"이 우편번호는 유효하지 않습니다.\",\n  \"genericError\" : \"저희 쪽에 문제가 발생했습니다.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"이 신용카드는 이미 저장된 결제수단으로 설정되어 있습니다.\",\n  \"hostedFieldsFailedTokenizationError\" : \"정보를 확인하고 다시 시도해 주세요.\",\n  \"hostedFieldsFieldsInvalidError\" : \"정보를 확인하고 다시 시도해 주세요.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"네트워크 오류입니다. 다시 시도해 주세요.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"신용카드 인증에 실패했습니다. 정보를 확인하고 다시 시도해 주세요.\",\n  \"paypalButtonMustBeUsed\" : \"PayPal 버튼을 사용하여 결제를 계속 진행하세요.\",\n  \"paypalAccountTokenizationFailedError\" : \"PayPal 계정을 추가하는 중에 문제가 발생했습니다. 다시 시도해 주세요.\",\n  \"paypalFlowFailedError\" : \"PayPal에 연결하는 데 문제가 발생했습니다. 다시 시도해 주세요.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal 결제 승인이 이미 진행 중입니다.\",\n  \"venmoCanceledError\" : \"오류가 발생했습니다. 기기에 최신 버전의 Venmo 앱이 설치되어 있고 브라우저가 Venmo로의 전환을 지원하는지 확인하세요.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"결제수단을 삭제할 수 없습니다. 다시 시도해 주세요.\",\n  \"venmoAppFailedError\" : \"기기에서 Venmo 앱을 찾을 수 없습니다.\",\n  \"unsupportedCardTypeError\" : \"이 카드 유형은 지원되지 않습니다. 다른 카드로 시도해 주세요.\",\n  \"applePayTokenizationError\" : \"Apple Pay 결제를 처리하는 동안 네트워크 오류가 발생했습니다. 다시 시도해 주세요.\",\n  \"applePayActiveCardError\" : \"Apple Pay 전자지갑에 지원되는 카드를 추가하세요.\",\n  \"cardholderNameLabel\" : \"카드 소유자 이름\",\n  \"cardNumberLabel\" : \"카드 번호\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3자리)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4자리)\",\n  \"cardholderNamePlaceholder\" : \"카드 소유자 이름\",\n  \"expirationDateLabel\" : \"만료일\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"우편번호\",\n  \"saveCardLabel\" : \"카드 저장\",\n  \"payWithCard\" : \"카드로 결제\",\n  \"endingIn\" : \"다음으로 끝남: {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"카드\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],241:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Betalen met {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Kies een andere betaalmethode\",\n  \"chooseAWayToPay\" : \"Kies een betaalmethode\",\n  \"otherWaysToPay\" : \"Andere betaalmethoden\",\n  \"edit\" : \"Bewerken\",\n  \"doneEditing\" : \"Klaar\",\n  \"editPaymentMethods\" : \"Betaalmethoden bewerken\",\n  \"CreditCardDeleteConfirmationMessage\" : \"{{secondaryIdentifier}}-kaart eindigend op {{identifier}} verwijderen?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"PayPal-rekening {{identifier}} verwijderen?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Weet je zeker dat je de Venmo-rekening met gebruikersnaam {{identifier}} wilt verwijderen?\",\n  \"genericDeleteConfirmationMessage\" : \"Weet je zeker dat je deze betaalmethode wilt verwijderen?\",\n  \"deleteCancelButton\" : \"Annuleren\",\n  \"deleteConfirmationButton\" : \"Verwijderen\",\n  \"fieldEmptyForCvv\" : \"Vul een CVV in.\",\n  \"fieldEmptyForExpirationDate\" : \"Vul een vervaldatum in.\",\n  \"fieldEmptyForCardholderName\" : \"Vul de naam van de kaarthouder in.\",\n  \"fieldTooLongForCardholderName\" : \"Naam kaarthouder moet minder dan 256 tekens bevatten.\",\n  \"fieldEmptyForNumber\" : \"Vul een nummer in.\",\n  \"fieldEmptyForPostalCode\" : \"Vul een postcode in.\",\n  \"fieldInvalidForCardholderName\" : \"Naam kaarthouder is ongeldig.\",\n  \"fieldInvalidForCvv\" : \"Deze beveiligingscode is ongeldig.\",\n  \"fieldInvalidForExpirationDate\" : \"Deze vervaldatum is ongeldig.\",\n  \"fieldInvalidForNumber\" : \"Dit kaartnummer is ongeldig.\",\n  \"fieldInvalidForPostalCode\" : \"Deze postcode is ongeldig.\",\n  \"genericError\" : \"Er is aan onze kant iets fout gegaan.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Deze creditcard bestaat al als opgeslagen betaalmethode.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Controleer je gegevens en probeer het opnieuw.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Controleer je gegevens en probeer het opnieuw.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Netwerkfout. Probeer het opnieuw.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Verificatie van creditcard is mislukt. Controleer je gegevens en probeer het opnieuw.\",\n  \"paypalButtonMustBeUsed\" : \"Gebruik de PayPal-knop om door te gaan met je betaling.\",\n  \"paypalAccountTokenizationFailedError\" : \"Er is iets fout gegaan bij het toevoegen van de PayPal-rekening. Probeer het opnieuw.\",\n  \"paypalFlowFailedError\" : \"Er is iets fout gegaan bij het verbinden met PayPal. Probeer het opnieuw.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal-betaalautorisatie is al in voortgang.\",\n  \"venmoCanceledError\" : \"Er is iets fout gegaan. Zorg ervoor dat je de recentste versie van de Venmo-app op je apparaat geïnstalleerd hebt en dat je browser ondersteuning biedt voor overschakelen naar Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Kan betaalmethode niet verwijderen. Probeer het opnieuw.\",\n  \"venmoAppFailedError\" : \"De Venmo-app is niet gevonden op je apparaat.\",\n  \"unsupportedCardTypeError\" : \"Dit kaarttype wordt niet ondersteund. Gebruik een andere kaart.\",\n  \"applePayTokenizationError\" : \"Er is een netwerkfout opgetreden bij het verwerken van de Apple Pay-betaling. Probeer het opnieuw.\",\n  \"applePayActiveCardError\" : \"Voeg een ondersteunde kaart toe aan je Apple Pay-wallet.\",\n  \"cardholderNameLabel\" : \"Naam kaarthouder\",\n  \"cardNumberLabel\" : \"Kaartnummer\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 cijfers)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 cijfers)\",\n  \"cardholderNamePlaceholder\" : \"Naam kaarthouder\",\n  \"expirationDateLabel\" : \"Vervaldatum\",\n  \"expirationDateLabelSubheading\" : \"(mm/jj)\",\n  \"expirationDatePlaceholder\" : \"mm/jj\",\n  \"postalCodeLabel\" : \"Postcode\",\n  \"saveCardLabel\" : \"Kaart opslaan\",\n  \"payWithCard\" : \"Betalen met kaart\",\n  \"endingIn\" : \"Eindigend op {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kaart\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],242:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Betaler med {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Velg en annen betalingsmåte\",\n  \"chooseAWayToPay\" : \"Velg betalingsmåte\",\n  \"otherWaysToPay\" : \"Andre betalingsmåter\",\n  \"edit\" : \"Endre\",\n  \"doneEditing\" : \"Ferdig\",\n  \"editPaymentMethods\" : \"Rediger betalingsmetode\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Vil du slette {{secondaryIdentifier}}-kortet som slutter på {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Vil du slette PayPal-konto {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Er du sikker på at du vil slette Venmo-kontoen med brukernavnet {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Er du sikker på at du vil slette denne betalingsmetoden?\",\n  \"deleteCancelButton\" : \"Avbryt\",\n  \"deleteConfirmationButton\" : \"Slett\",\n  \"fieldEmptyForCvv\" : \"Fyll ut sikkerhetskode (CVV).\",\n  \"fieldEmptyForExpirationDate\" : \"Fyll ut utløpsdato.\",\n  \"fieldEmptyForCardholderName\" : \"Fyll ut kortinnehavers navn.\",\n  \"fieldTooLongForCardholderName\" : \"Kortinnehaverens må ha mindre enn 256 tegn.\",\n  \"fieldEmptyForNumber\" : \"Fyll ut nummer.\",\n  \"fieldEmptyForPostalCode\" : \"Fyll ut postnummer.\",\n  \"fieldInvalidForCardholderName\" : \"Denne kortinnehaverens navn er ikke gyldig.\",\n  \"fieldInvalidForCvv\" : \"Denne sikkerhetskoden er ikke gyldig.\",\n  \"fieldInvalidForExpirationDate\" : \"Denne utløpsdatoen er ikke gyldig.\",\n  \"fieldInvalidForNumber\" : \"Dette kortnummeret er ikke gyldig.\",\n  \"fieldInvalidForPostalCode\" : \"Dette postnummeret er ikke gyldig.\",\n  \"genericError\" : \"Noe gikk galt hos oss.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Dette betalingskortet finnes allerede som en lagret betalingsmetode.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Kontroller informasjonen, og prøv på nytt.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Kontroller informasjonen, og prøv på nytt.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Nettverksfeil. Prøv på nytt.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Kontroll av betalingskort mislyktes. Kontroller informasjonen, og prøv på nytt.\",\n  \"paypalButtonMustBeUsed\" : \"Bruk PayPal-knappen for å fortsette med betalingen.\",\n  \"paypalAccountTokenizationFailedError\" : \"Kan ikke legge til PayPal-kontoen. Prøv på nytt.\",\n  \"paypalFlowFailedError\" : \"Kan ikke koble til PayPal. Prøv på nytt.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPals prosess for betalingsgodkjenning har allerede startet.\",\n  \"venmoCanceledError\" : \"Noe gikk galt. Kontroller at den nyeste versjonen av Venmo-appen er installert på enheten din, og at nettleseren din støtter bruk av Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Kan ikke slette betalingsmetoden. Prøv på nytt.\",\n  \"venmoAppFailedError\" : \"Finner ikke Venmo-appen på enheten.\",\n  \"unsupportedCardTypeError\" : \"Denne korttypen støttes ikke. Prøv et annet kort.\",\n  \"applePayTokenizationError\" : \"Nettverksfeil under behandling av Apple Pay-betalingen. Prøv på nytt.\",\n  \"applePayActiveCardError\" : \"Legg til et støttet kort i e-lommeboken for Apple Pay.\",\n  \"cardholderNameLabel\" : \"Kortinnehavers navn\",\n  \"cardNumberLabel\" : \"Kortnummer\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 sifre)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 sifre)\",\n  \"cardholderNamePlaceholder\" : \"Kortinnehavers navn\",\n  \"expirationDateLabel\" : \"Utløpsdato\",\n  \"expirationDateLabelSubheading\" : \"(MM/ÅÅ)\",\n  \"expirationDatePlaceholder\" : \"MM/ÅÅ\",\n  \"postalCodeLabel\" : \"Postnummer\",\n  \"saveCardLabel\" : \"Lagre kort\",\n  \"payWithCard\" : \"Betal med kort\",\n  \"endingIn\" : \"Slutter på {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kort\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],243:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Źródło finansowania płatności: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Wybierz inny sposób płatności.\",\n  \"chooseAWayToPay\" : \"Wybierz sposób płatności\",\n  \"otherWaysToPay\" : \"Inne sposoby płatności\",\n  \"edit\" : \"Edytuj\",\n  \"doneEditing\" : \"Gotowe\",\n  \"editPaymentMethods\" : \"Edytuj formy płatności\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Usunąć kartę {{secondaryIdentifier}} o numerze zakończonym cyframi {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Usunąć {{identifier}}konta PayPal?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Czy na pewno chcesz usunąć konto Venmo o nazwie użytkownika {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Na pewno chcesz usunąć tę formę płatności?\",\n  \"deleteCancelButton\" : \"Anuluj\",\n  \"deleteConfirmationButton\" : \"Usuń\",\n  \"fieldEmptyForCvv\" : \"Wpisz kod CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Wpisz datę ważności.\",\n  \"fieldEmptyForCardholderName\" : \"Podaj imię i nazwisko posiadacza karty.\",\n  \"fieldTooLongForCardholderName\" : \"Imię i nazwisko posiadacza karty musi mieć mniej niż 256 znaków.\",\n  \"fieldEmptyForNumber\" : \"Podaj numer.\",\n  \"fieldEmptyForPostalCode\" : \"Podaj kod pocztowy.\",\n  \"fieldInvalidForCardholderName\" : \"To imię i nazwisko posiadacza karty jest nieprawidłowe.\",\n  \"fieldInvalidForCvv\" : \"Ten kod bezpieczeństwa jest nieprawidłowy.\",\n  \"fieldInvalidForExpirationDate\" : \"Ta data ważności jest nieprawidłowa.\",\n  \"fieldInvalidForNumber\" : \"Numer karty jest nieprawidłowy.\",\n  \"fieldInvalidForPostalCode\" : \"Kod pocztowy jest nieprawidłowy.\",\n  \"genericError\" : \"Wystąpił błąd po naszej stronie.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Ta karta kredytowa istnieje jako zapisana forma płatności.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Sprawdź swoje informacje i spróbuj ponownie.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Sprawdź swoje informacje i spróbuj ponownie.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Błąd sieci. Spróbuj ponownie.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Weryfikacja karty kredytowej nie powiodła się. Sprawdź swoje informacje i spróbuj ponownie.\",\n  \"paypalButtonMustBeUsed\" : \"Aby kontynuować płatność, użyj przycisku PayPal.\",\n  \"paypalAccountTokenizationFailedError\" : \"Coś poszło nie tak przy dodawaniu konta PayPal. Spróbuj ponownie.\",\n  \"paypalFlowFailedError\" : \"Wystąpił problem przy nawiązywaniu połączenia z PayPal. Spróbuj ponownie.\",\n  \"paypalTokenizationRequestActiveError\" : \"Autoryzacja płatności PayPal jest w trakcie realizacji.\",\n  \"venmoCanceledError\" : \"Coś poszło nie tak. Upewnij się, że na Twoim urządzeniu jest zainstalowana najnowsza wersja aplikacji Venmo, a Twoja przeglądarka obsługuje przełączanie na Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Nie można usunąć formy płatności, spróbuj ponownie.\",\n  \"venmoAppFailedError\" : \"Aplikacja Venmo nie została odnaleziona na Twoim urządzeniu.\",\n  \"unsupportedCardTypeError\" : \"Ten typ karty nie jest obsługiwany. Spróbuj użyć innej karty.\",\n  \"applePayTokenizationError\" : \"Wystąpił błąd sieciowy podczas przetwarzania płatności Apple Pay. Spróbuj ponownie.\",\n  \"applePayActiveCardError\" : \"Dodaj obsługiwaną kartę do portfela Apple Pay.\",\n  \"cardholderNameLabel\" : \"Imię i nazwisko posiadacza karty\",\n  \"cardNumberLabel\" : \"Numer karty\",\n  \"cvvLabel\" : \"Kod CVV/CVC2\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 cyfry)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 cyfry)\",\n  \"cardholderNamePlaceholder\" : \"Imię i nazwisko posiadacza karty\",\n  \"expirationDateLabel\" : \"Data ważności\",\n  \"expirationDateLabelSubheading\" : \"(MM/RR)\",\n  \"expirationDatePlaceholder\" : \"MM/RR\",\n  \"postalCodeLabel\" : \"Kod pocztowy\",\n  \"saveCardLabel\" : \"Zapisz kartę\",\n  \"payWithCard\" : \"Zapłać kartą\",\n  \"endingIn\" : \"Numer zakończonym cyframi {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Karta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],244:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Pagando com {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Escolha outro meio de pagamento\",\n  \"chooseAWayToPay\" : \"Escolha um meio de pagamento\",\n  \"otherWaysToPay\" : \"Outras formas de pagar\",\n  \"edit\" : \"Editar\",\n  \"doneEditing\" : \"Concluído\",\n  \"editPaymentMethods\" : \"Editar meios de pagamento\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Excluir cartão {{secondaryIdentifier}} de final {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Excluir conta do PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Tem certeza de que deseja excluir a conta do Venmo com nome de usuário {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Tem certeza que deseja excluir este meio de pagamento?\",\n  \"deleteCancelButton\" : \"Cancelar\",\n  \"deleteConfirmationButton\" : \"Excluir\",\n  \"fieldEmptyForCvv\" : \"Preencha um CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Preencha uma data de vencimento.\",\n  \"fieldEmptyForCardholderName\" : \"Preencha um nome para o titular do cartão.\",\n  \"fieldTooLongForCardholderName\" : \"O nome do titular do cartão deve ter menos de 256 caracteres.\",\n  \"fieldEmptyForNumber\" : \"Preencha um número.\",\n  \"fieldEmptyForPostalCode\" : \"Preencha um código postal.\",\n  \"fieldInvalidForCardholderName\" : \"O nome do titular do cartão é inválido.\",\n  \"fieldInvalidForCvv\" : \"Este código de segurança é inválido.\",\n  \"fieldInvalidForExpirationDate\" : \"Esta data de vencimento é inválida.\",\n  \"fieldInvalidForNumber\" : \"O número do cartão é inválido.\",\n  \"fieldInvalidForPostalCode\" : \"Este código postal é inválido.\",\n  \"genericError\" : \"Ocorreu um erro.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Este cartão de crédito já existe como um meio de pagamento salvo.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Verifique as informações e tente novamente.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Verifique as informações e tente novamente.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erro de rede. Tente novamente.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Falha na verificação do cartão de crédito. Verifique as informações e tente novamente.\",\n  \"paypalButtonMustBeUsed\" : \"Use o botão do PayPal para prosseguir com o pagamento.\",\n  \"paypalAccountTokenizationFailedError\" : \"Ocorreu um erro ao adicionar a conta do PayPal. Tente novamente.\",\n  \"paypalFlowFailedError\" : \"Ocorreu um erro na conexão com o PayPal. Tente novamente.\",\n  \"paypalTokenizationRequestActiveError\" : \"A autorização de pagamento do PayPal já está em andamento.\",\n  \"venmoCanceledError\" : \"Ocorreu um erro. Certifique-se de que você tenha a versão mais recente do aplicativo Venmo instalada no seu dispositivo, e que seu navegador aceite a mudança para o Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Não é possível excluir o meio de pagamento, tente novamente.\",\n  \"venmoAppFailedError\" : \"O aplicativo Venmo não foi encontrado no seu dispositivo.\",\n  \"unsupportedCardTypeError\" : \"Este tipo de cartão não é aceito. Tente outro cartão.\",\n  \"applePayTokenizationError\" : \"Ocorreu um erro de rede ao processar o pagamento do Apple Pay. Tente novamente.\",\n  \"applePayActiveCardError\" : \"Adicione um cartão compatível à sua carteira Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nome do titular do cartão\",\n  \"cardNumberLabel\" : \"Número do cartão\",\n  \"cvvLabel\" : \"CSC\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 dígitos)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 dígitos)\",\n  \"cardholderNamePlaceholder\" : \"Nome do titular do cartão\",\n  \"expirationDateLabel\" : \"Data de vencimento\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"CEP\",\n  \"saveCardLabel\" : \"Salvar cartão\",\n  \"payWithCard\" : \"Pague com seu cartão de crédito\",\n  \"endingIn\" : \"De final {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Cartão\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"Crédito do PayPal\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Descobrir\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],245:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Pagamento com {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Escolher outra forma de pagamento\",\n  \"chooseAWayToPay\" : \"Escolher forma de pagamento\",\n  \"otherWaysToPay\" : \"Outras formas de pagamento\",\n  \"edit\" : \"Editar\",\n  \"doneEditing\" : \"Concluído\",\n  \"editPaymentMethods\" : \"Editar meios de pagamento\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Eliminar cartão {{secondaryIdentifier}} terminado em {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Eliminar conta PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Quer mesmo eliminar a conta Venmo com o nome de utilizador {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Quer mesmo eliminar este meio de pagamento?\",\n  \"deleteCancelButton\" : \"Cancelar\",\n  \"deleteConfirmationButton\" : \"Eliminar\",\n  \"fieldEmptyForCvv\" : \"Introduza um CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Introduza uma data de validade.\",\n  \"fieldEmptyForCardholderName\" : \"Introduza um nome do titular do cartão.\",\n  \"fieldTooLongForCardholderName\" : \"O Nome do titular do cartão deve ter menos de 256 carateres.\",\n  \"fieldEmptyForNumber\" : \"Introduza um número.\",\n  \"fieldEmptyForPostalCode\" : \"Introduza um código postal.\",\n  \"fieldInvalidForCardholderName\" : \"Este nome do titular do cartão não é válido.\",\n  \"fieldInvalidForCvv\" : \"Este código de segurança não é válido.\",\n  \"fieldInvalidForExpirationDate\" : \"Esta data de validade não é válida.\",\n  \"fieldInvalidForNumber\" : \"Este número de cartão não é válido.\",\n  \"fieldInvalidForPostalCode\" : \"Este código postal não é válido.\",\n  \"genericError\" : \"Tudo indica que houve um problema.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Este cartão de crédito já existe como meio de pagamento guardado.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Verifique as suas informações e tente novamente.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Verifique as suas informações e tente novamente.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erro de rede. Tente novamente.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"A verificação do cartão de crédito falhou. Verifique as suas informações e tente novamente.\",\n  \"paypalButtonMustBeUsed\" : \"Use o botão PayPal para continuar o seu pagamento.\",\n  \"paypalAccountTokenizationFailedError\" : \"Ocorreu um erro ao adicionar a conta PayPal. Tente novamente.\",\n  \"paypalFlowFailedError\" : \"Ocorreu um erro ao ligar ao PayPal. Tente novamente.\",\n  \"paypalTokenizationRequestActiveError\" : \"A autorização de pagamento com PayPal já está em curso.\",\n  \"venmoCanceledError\" : \"Ocorreu um erro. Certifique-se de que tem a versão mais recente da aplicação Venmo instalada no seu dispositivo e que o seu navegador suporta a mudança para Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Não é possível eliminar o meio de pagamento; tente novamente.\",\n  \"venmoAppFailedError\" : \"A aplicação Venmo não foi encontrada no seu dispositivo.\",\n  \"unsupportedCardTypeError\" : \"Este tipo de cartão não é suportado. Tente com outro cartão.\",\n  \"applePayTokenizationError\" : \"Ocorreu um erro de rede ao processar o pagamento com Apple Pay. Tente novamente.\",\n  \"applePayActiveCardError\" : \"Adicione um cartão suportado à sua carteira Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nome do titular do cartão\",\n  \"cardNumberLabel\" : \"Número do cartão\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 dígitos)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 dígitos)\",\n  \"cardholderNamePlaceholder\" : \"Nome do titular do cartão\",\n  \"expirationDateLabel\" : \"Data de validade\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Código postal\",\n  \"saveCardLabel\" : \"Guardar cartão\",\n  \"payWithCard\" : \"Pagar com cartão\",\n  \"endingIn\" : \"Termina em {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Cartão\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],246:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Оплата с помощью {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Выберите другой способ оплаты\",\n  \"chooseAWayToPay\" : \"Выберите способ оплаты\",\n  \"otherWaysToPay\" : \"Другие способы оплаты\",\n  \"edit\" : \"Изменить\",\n  \"doneEditing\" : \"Готово\",\n  \"editPaymentMethods\" : \"Изменить способы оплаты\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Удалить карту {{secondaryIdentifier}} с номером, заканчивающимся на {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Удалить счет PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Вы действительно хотите удалить счет Venmo с именем пользователя {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Вы действительно хотите удалить этот способ оплаты?\",\n  \"deleteCancelButton\" : \"Отмена\",\n  \"deleteConfirmationButton\" : \"Удалить\",\n  \"fieldEmptyForCvv\" : \"Укажите код безопасности.\",\n  \"fieldEmptyForExpirationDate\" : \"Укажите дату окончания срока действия.\",\n  \"fieldEmptyForCardholderName\" : \"Укажите имя владельца карты.\",\n  \"fieldTooLongForCardholderName\" : \"Имя владельца карты должно содержать не более 256 символов.\",\n  \"fieldEmptyForNumber\" : \"Укажите номер.\",\n  \"fieldEmptyForPostalCode\" : \"Укажите почтовый индекс.\",\n  \"fieldInvalidForCardholderName\" : \"Недопустимое имя владельца карты.\",\n  \"fieldInvalidForCvv\" : \"Недопустимый код безопасности.\",\n  \"fieldInvalidForExpirationDate\" : \"Недопустимая дата истечения срока действия.\",\n  \"fieldInvalidForNumber\" : \"Недопустимый номер карты.\",\n  \"fieldInvalidForPostalCode\" : \"Недопустимый почтовый индекс.\",\n  \"genericError\" : \"Возникла проблема с нашей стороны.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Данная кредитная карта уже существует как сохраненный способ оплаты.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Проверьте правильность ввода данных и повторите попытку.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Проверьте правильность ввода данных и повторите попытку.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Сбой сети. Повторите попытку.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Сбой при проверке кредитной карты. Проверьте правильность ввода данных и повторите попытку.\",\n  \"paypalButtonMustBeUsed\" : \"Используйте кнопку PayPal, чтобы продолжить оплату.\",\n  \"paypalAccountTokenizationFailedError\" : \"Возникла ошибка при добавлении счета PayPal. Повторите попытку.\",\n  \"paypalFlowFailedError\" : \"Возникла ошибка при подключении к PayPal. Повторите попытку.\",\n  \"paypalTokenizationRequestActiveError\" : \"Авторизация платежа через PayPal уже выполняется.\",\n  \"venmoCanceledError\" : \"Возникла ошибка. Убедитесь, что на вашем устройстве установлена самая последняя версия приложения Venmo и браузер поддерживает переход на Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Не удалось удалить способ оплаты, повторите попытку.\",\n  \"venmoAppFailedError\" : \"Приложение Venmo не удается обнаружить на вашем устройстве.\",\n  \"unsupportedCardTypeError\" : \"Данный тип карты не поддерживается. Попробуйте воспользоваться другой картой.\",\n  \"applePayTokenizationError\" : \"Возникла ошибка сети при обработке платежа Apple Pay. Повторите попытку.\",\n  \"applePayActiveCardError\" : \"Добавьте поддерживаемую карту в ваш счет Apple Pay.\",\n  \"cardholderNameLabel\" : \"Имя владельца карты\",\n  \"cardNumberLabel\" : \"Номер карты\",\n  \"cvvLabel\" : \"Код безопасности карты CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 цифры)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 цифры)\",\n  \"cardholderNamePlaceholder\" : \"Имя владельца карты\",\n  \"expirationDateLabel\" : \"Дата окончания срока действия\",\n  \"expirationDateLabelSubheading\" : \"(ММ/ГГ)\",\n  \"expirationDatePlaceholder\" : \"ММ/ГГ\",\n  \"postalCodeLabel\" : \"Индекс\",\n  \"saveCardLabel\" : \"Сохранить карту\",\n  \"payWithCard\" : \"Оплатить банковской картой\",\n  \"endingIn\" : \"Заканчивается на {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Карта\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Полезное\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],247:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Spôsob platby: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Vyberte iný spôsob platby\",\n  \"chooseAWayToPay\" : \"Zvoľte spôsob platby\",\n  \"otherWaysToPay\" : \"Iné spôsoby platby\",\n  \"edit\" : \"Upraviť\",\n  \"doneEditing\" : \"Hotovo\",\n  \"editPaymentMethods\" : \"Upraviť spôsoby platby\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Chcete odstrániť kartu {{secondaryIdentifier}} končiacu sa na {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Chcete odstrániť {{identifier}}účtu PayPal?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Naozaj chcete odstrániť účet Venmo s menom používateľa {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Ste si istí, že chcete tento spôsob platby odstrániť?\",\n  \"deleteCancelButton\" : \"Zrušiť\",\n  \"deleteConfirmationButton\" : \"Odstrániť\",\n  \"fieldEmptyForCvv\" : \"Vyplňte kód CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Zadajte dátum skončenia platnosti.\",\n  \"fieldEmptyForCardholderName\" : \"Zadajte meno majiteľa karty.\",\n  \"fieldTooLongForCardholderName\" : \"Meno majiteľa karty musí obsahovať menej ako 256 znakov.\",\n  \"fieldEmptyForNumber\" : \"Zadajte číslo.\",\n  \"fieldEmptyForPostalCode\" : \"Zadajte PSČ.\",\n  \"fieldInvalidForCardholderName\" : \"Toto meno majiteľa karty je neplatné.\",\n  \"fieldInvalidForCvv\" : \"Tento bezpečnostný kód je neplatný.\",\n  \"fieldInvalidForExpirationDate\" : \"Tento dátum skončenia platnosti je neplatný.\",\n  \"fieldInvalidForNumber\" : \"Toto číslo karty je neplatné.\",\n  \"fieldInvalidForPostalCode\" : \"Toto PSČ je neplatné.\",\n  \"genericError\" : \"Vyskytla sa chyba na našej strane.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Táto kreditná karta už existuje ako uložený spôsob platby.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Skontrolujte údaje a skúste to znova.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Skontrolujte údaje a skúste to znova.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Chyba v sieti. Skúste to znova.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Overenie kreditnej karty nebolo úspešné. Skontrolujte údaje a skúste to znova.\",\n  \"paypalButtonMustBeUsed\" : \"Ak chcete pokračovať v platbe, použite tlačidlo PayPal.\",\n  \"paypalAccountTokenizationFailedError\" : \"Vyskytla sa chyba pri pridávaní účtu PayPal. Skúste to znova.\",\n  \"paypalFlowFailedError\" : \"Vyskytla sa chyba pri pripájaní do účtu PayPal. Skúste to znova.\",\n  \"paypalTokenizationRequestActiveError\" : \"Autorizácia platby PayPal už prebieha.\",\n  \"venmoCanceledError\" : \"Vyskytla sa chyba. Skontrolujte, či máte v zariadení nainštalovanú najnovšiu verziu aplikácie Venmo a či prehliadač podporuje prechod na aplikáciu Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Nebolo možné odstrániť spôsob platby, skúste to znova.\",\n  \"venmoAppFailedError\" : \"Aplikáciu Venmo sa vo vašom zariadení nepodarilo nájsť.\",\n  \"unsupportedCardTypeError\" : \"Tento typ karty nie je podporovaný. Prosím skúste inú kartu.\",\n  \"applePayTokenizationError\" : \"Počas spracúvania platby cez Apple Pay došlo k chybe siete. Skúste to znova.\",\n  \"applePayActiveCardError\" : \"Pridajte si podporovanú kartu do peňaženky Apple Pay.\",\n  \"cardholderNameLabel\" : \"Meno majiteľa karty\",\n  \"cardNumberLabel\" : \"Číslo karty\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 číslice)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 číslice)\",\n  \"cardholderNamePlaceholder\" : \"Meno majiteľa karty\",\n  \"expirationDateLabel\" : \"Dátum skončenia platnosti\",\n  \"expirationDateLabelSubheading\" : \"(MM/RR)\",\n  \"expirationDatePlaceholder\" : \"MM/RR\",\n  \"postalCodeLabel\" : \"PSČ\",\n  \"saveCardLabel\" : \"Uložiť kartu\",\n  \"payWithCard\" : \"Zaplatiť kartou\",\n  \"endingIn\" : \"Končí {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Karta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],248:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Betalar med {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Välj ett annat sätt att betala\",\n  \"chooseAWayToPay\" : \"Välj ett sätt att betala\",\n  \"otherWaysToPay\" : \"Andra sätt att betala\",\n  \"edit\" : \"Ändra\",\n  \"doneEditing\" : \"Klart\",\n  \"editPaymentMethods\" : \"Ändra betalningsmetoder\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Ta bort {{secondaryIdentifier}}-kortet som slutar på {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Ta bort PayPal-konto {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Är du säker på att du vill ta bort Venmo-kontot med användarnamnet {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Är du säker på att du vill ta bort den här betalningsmetoden?\",\n  \"deleteCancelButton\" : \"Avbryt\",\n  \"deleteConfirmationButton\" : \"Ta bort\",\n  \"fieldEmptyForCvv\" : \"Fyll i ett CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Fyll i ett utgångsdatum.\",\n  \"fieldEmptyForCardholderName\" : \"Fyll i kortinnehavarens namn.\",\n  \"fieldTooLongForCardholderName\" : \"Namnet på kortinnehavaren måste vara kortare än 256 tecken.\",\n  \"fieldEmptyForNumber\" : \"Fyll i ett nummer.\",\n  \"fieldEmptyForPostalCode\" : \"Fyll i ett postnummer.\",\n  \"fieldInvalidForCardholderName\" : \"Namnet på kortinnehavaren är ogiltigt.\",\n  \"fieldInvalidForCvv\" : \"Den här säkerhetskoden är inte giltig.\",\n  \"fieldInvalidForExpirationDate\" : \"Utgångsdatumet är ogiltigt.\",\n  \"fieldInvalidForNumber\" : \"Det här kortnumret är ogiltigt.\",\n  \"fieldInvalidForPostalCode\" : \"Postnumret är ogiltigt.\",\n  \"genericError\" : \"Ett fel uppstod.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Det här kreditkortet finns redan som en sparad betalningsmetod.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Kontrollera uppgifterna och försök igen.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Kontrollera uppgifterna och försök igen.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Nätverksfel. Försök igen.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Verifiering av kreditkortet misslyckades. Kontrollera uppgifterna och försök igen.\",\n  \"paypalButtonMustBeUsed\" : \"Använd PayPal-knappen för att fortsätta med din betalning.\",\n  \"paypalAccountTokenizationFailedError\" : \"Något gick fel när du lade till PayPal-kontot. Försök igen.\",\n  \"paypalFlowFailedError\" : \"Något gick fel med att ansluta till PayPal. Försök igen.\",\n  \"paypalTokenizationRequestActiveError\" : \"Godkännande av PayPal-betalning pågår redan.\",\n  \"venmoCanceledError\" : \"Något gick fel. Se till att du har den senaste versionen av Venmo-appen installerad på din enhet och att din webbläsare stöder byte till Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Kan inte ta bort betalningsmetoden, försök igen.\",\n  \"venmoAppFailedError\" : \"Det gick inte att hitta Venmo-appen på din enhet.\",\n  \"unsupportedCardTypeError\" : \"Den här korttypen stöds inte. Prova med ett annat kort.\",\n  \"applePayTokenizationError\" : \"Ett nätverksfel uppstod när Apple Pay-betalningen behandlades. Försök igen.\",\n  \"applePayActiveCardError\" : \"Lägg till ett kort som stöds i din Apple Pay e-plånbok.\",\n  \"cardholderNameLabel\" : \"Kortinnehavarens namn\",\n  \"cardNumberLabel\" : \"Kortnummer\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 siffror)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 siffror)\",\n  \"cardholderNamePlaceholder\" : \"Kortinnehavarens namn\",\n  \"expirationDateLabel\" : \"Utgångsdatum\",\n  \"expirationDateLabelSubheading\" : \"(MM/ÅÅ)\",\n  \"expirationDatePlaceholder\" : \"MM/ÅÅ\",\n  \"postalCodeLabel\" : \"Postnummer\",\n  \"saveCardLabel\" : \"Spara kort\",\n  \"payWithCard\" : \"Betala med kort\",\n  \"endingIn\" : \"Slutar på {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kort\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],249:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"ชำระเงินด้วย {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"เลือกวิธีการชำระเงินอื่น\",\n  \"chooseAWayToPay\" : \"โปรดเลือกวิธีชำระเงิน\",\n  \"otherWaysToPay\" : \"วิธีอื่นในการชำระเงิน\",\n  \"edit\" : \"แก้ไข\",\n  \"doneEditing\" : \"เสร็จแล้ว\",\n  \"editPaymentMethods\" : \"แก้ไขวิธีการชำระเงิน\",\n  \"CreditCardDeleteConfirmationMessage\" : \"ลบบัตร {{secondaryIdentifier}} ที่ลงท้ายด้วย {{identifier}} หรือไม่\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"คุณต้องการลบบัญชี PayPal {{identifier}} หรือไม่\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"คุณแน่ใจหรือไม่ว่าต้องการลบบัญชี Venmo ที่มีชื่อผู้ใช้ {{identifier}}\",\n  \"genericDeleteConfirmationMessage\" : \"คุณแน่ใจหรือไม่ว่าต้องการลบการชำระเงินรายการนี้ออก\",\n  \"deleteCancelButton\" : \"ยกเลิก\",\n  \"deleteConfirmationButton\" : \"ลบ\",\n  \"fieldEmptyForCvv\" : \"โปรดกรอกข้อมูลในบัตร CVV\",\n  \"fieldEmptyForExpirationDate\" : \"โปรดกรอกข้อมูลวันที่หมดอายุ\",\n  \"fieldEmptyForCardholderName\" : \"โปรดกรอกชื่อผู้ถือบัตร\",\n  \"fieldTooLongForCardholderName\" : \"ชื่อผู้ถือบัตรต้องไม่เกิน 256 อักขระ\",\n  \"fieldEmptyForNumber\" : \"โปรดกรอกหมายเลข\",\n  \"fieldEmptyForPostalCode\" : \"โปรดกรอกข้อมูลในรหัสไปรษณีย์\",\n  \"fieldInvalidForCardholderName\" : \"ชื่อผู้ถือบัตรนี้ไม่ถูกต้อง\",\n  \"fieldInvalidForCvv\" : \"รหัสความปลอดภัยนี้ไม่ถูกต้อง\",\n  \"fieldInvalidForExpirationDate\" : \"วันที่หมดอายุนี้ไม่ถูกต้อง\",\n  \"fieldInvalidForNumber\" : \"หมายเลขบัตรนี้ไม่ถูกต้อง\",\n  \"fieldInvalidForPostalCode\" : \"รหัสไปรษณีย์นี้ไม่ถูกต้อง\",\n  \"genericError\" : \"เกิดข้อผิดพลาดขึ้นในระบบของเรา\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"บัตรเครดิตนี้เป็นวิธีการชำระเงินที่บันทึกไว้แล้ว\",\n  \"hostedFieldsFailedTokenizationError\" : \"โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง\",\n  \"hostedFieldsFieldsInvalidError\" : \"โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"ข้อผิดพลาดของเครือข่าย โปรดลองอีกครั้ง\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"การตรวจสอบยืนยันบัตรเครดิตไม่สำเร็จ โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง\",\n  \"paypalButtonMustBeUsed\" : \"ใช้ปุ่ม PayPal เพื่อดำเนินการชำระเงินต่อไป\",\n  \"paypalAccountTokenizationFailedError\" : \"เกิดข้อผิดพลาดบางอย่างในการเพิ่มบัญชี PayPal โปรดลองอีกครั้ง\",\n  \"paypalFlowFailedError\" : \"เกิดข้อผิดพลาดในการเชื่อมต่อกับ PayPal โปรดลองอีกครั้ง\",\n  \"paypalTokenizationRequestActiveError\" : \"การอนุมัติการชำระเงิน PayPal อยู่ในระหว่างดำเนินการแล้ว\",\n  \"venmoCanceledError\" : \"เกิดข้อผิดพลาดบางประการ ตรวจสอบให้แน่ใจว่าคุณมีแอปพลิเคชัน Venmo เวอร์ชันล่าสุดที่ติดตั้งไว้ในอุปกรณ์ของคุณและเบราว์เซอร์ของคุณรองรับการเปลี่ยนเป็น Venmo\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"ไม่สามารถลบวิธีการชำระเงินได้โปรดลองอีกครั้ง\",\n  \"venmoAppFailedError\" : \"ไม่พบแอป Venmo ในอุปกรณ์ของคุณ\",\n  \"unsupportedCardTypeError\" : \"ไม่รองรับบัตรประเภทนี้ โปรดลองใช้บัตรใบอื่น\",\n  \"applePayTokenizationError\" : \"เกิดข้อผิดพลาดในเครือข่ายขณะประมวลผลการชำระเงินของ Apple Pay โปรดลองอีกครั้ง\",\n  \"applePayActiveCardError\" : \"เพิ่มบัตรที่รองรับไปยังกระเป๋าสตางค์ Apple Pay ของคุณ\",\n  \"cardholderNameLabel\" : \"ชื่อของผู้ถือบัตร\",\n  \"cardNumberLabel\" : \"หมายเลขบัตร\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 หลัก)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 หลัก)\",\n  \"cardholderNamePlaceholder\" : \"ชื่อของผู้ถือบัตร\",\n  \"expirationDateLabel\" : \"วันหมดอายุ\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"รหัสไปรษณีย์\",\n  \"saveCardLabel\" : \"บันทึกบัตร\",\n  \"payWithCard\" : \"ชำระด้วยบัตรเดบิตหรือบัตรเครดิต\",\n  \"endingIn\" : \"ลงท้ายด้วย {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"บัตร\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],250:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"使用{{paymentSource}}付款\",\n  \"chooseAnotherWayToPay\" : \"请选择其它付款方式。\",\n  \"chooseAWayToPay\" : \"选择付款方式\",\n  \"otherWaysToPay\" : \"其他付款方式\",\n  \"edit\" : \"编辑\",\n  \"doneEditing\" : \"完成\",\n  \"editPaymentMethods\" : \"编辑付款方式\",\n  \"CreditCardDeleteConfirmationMessage\" : \"删除尾号为{{identifier}}的{{secondaryIdentifier}}卡？\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"删除PayPal账户{{identifier}}？\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"您确定要删除用户名为{{identifier}}的Venmo账户吗？\",\n  \"genericDeleteConfirmationMessage\" : \"确定要删除此付款方式吗？\",\n  \"deleteCancelButton\" : \"取消\",\n  \"deleteConfirmationButton\" : \"删除\",\n  \"fieldEmptyForCvv\" : \"请填写CVV。\",\n  \"fieldEmptyForExpirationDate\" : \"请填写有效期限。\",\n  \"fieldEmptyForCardholderName\" : \"请填写持卡人姓名。\",\n  \"fieldTooLongForCardholderName\" : \"持卡人姓名必须少于256个字符。\",\n  \"fieldEmptyForNumber\" : \"请填写一个号码。\",\n  \"fieldEmptyForPostalCode\" : \"请填写邮政编码。\",\n  \"fieldInvalidForCardholderName\" : \"此持卡人姓名无效。\",\n  \"fieldInvalidForCvv\" : \"此安全码无效。\",\n  \"fieldInvalidForExpirationDate\" : \"此有效期限无效。\",\n  \"fieldInvalidForNumber\" : \"此卡号无效。\",\n  \"fieldInvalidForPostalCode\" : \"此邮政编码无效。\",\n  \"genericError\" : \"我们遇到了一些问题。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"此信用卡已存在于已保存的付款方式。\",\n  \"hostedFieldsFailedTokenizationError\" : \"请检查您的信息，然后重试。\",\n  \"hostedFieldsFieldsInvalidError\" : \"请检查您的信息，然后重试。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"网络错误。请重试。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"信用卡验证失败。请检查您的信息，然后重试。\",\n  \"paypalButtonMustBeUsed\" : \"使用PayPal按钮继续付款。\",\n  \"paypalAccountTokenizationFailedError\" : \"添加PayPal账户时遇到了一些问题。请重试。\",\n  \"paypalFlowFailedError\" : \"连接到PayPal遇到了一些问题。请重试。\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal付款授权已在处理中。\",\n  \"venmoCanceledError\" : \"遇到了一些问题。请确保您的设备上安装了最新版本的Venmo应用，并且您的浏览器支持切换到Venmo。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"无法删除付款方式，请重试。\",\n  \"venmoAppFailedError\" : \"在您的设备上找不到Venmo应用程序。\",\n  \"unsupportedCardTypeError\" : \"不支持该卡类型。请尝试其他卡。\",\n  \"applePayTokenizationError\" : \"处理Apple Pay付款时发生了网络错误。请重试。\",\n  \"applePayActiveCardError\" : \"在您的Apple Pay钱包中添加一张受支持的卡。\",\n  \"cardholderNameLabel\" : \"持卡人姓名\",\n  \"cardNumberLabel\" : \"卡号\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"（3位数）\",\n  \"cvvFourDigitLabelSubheading\" : \"（4位数）\",\n  \"cardholderNamePlaceholder\" : \"持卡人姓名\",\n  \"expirationDateLabel\" : \"有效期限\",\n  \"expirationDateLabelSubheading\" : \"（月/年）\",\n  \"expirationDatePlaceholder\" : \"月/年\",\n  \"postalCodeLabel\" : \"邮政编码\",\n  \"saveCardLabel\" : \"保存此卡\",\n  \"payWithCard\" : \"使用卡支付\",\n  \"endingIn\" : \"尾号为{{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"卡\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"发现\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"银联\"\n}\n;\n\n},{}],251:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"付款方式為 {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"請選擇其他付款方式\",\n  \"chooseAWayToPay\" : \"選擇付款方式\",\n  \"otherWaysToPay\" : \"其他付款方式\",\n  \"edit\" : \"編輯\",\n  \"doneEditing\" : \"完成\",\n  \"editPaymentMethods\" : \"編輯付款方式\",\n  \"CreditCardDeleteConfirmationMessage\" : \"刪除最後數字為 {{identifier}} 的 {{secondaryIdentifier}} 卡嗎？\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"刪除 {{identifier}} PayPal 帳戶嗎？\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"確定要刪除用戶名稱為 {{identifier}} 的 Venmo 帳戶嗎？\",\n  \"genericDeleteConfirmationMessage\" : \"確定要刪除此付款方式嗎？\",\n  \"deleteCancelButton\" : \"取消\",\n  \"deleteConfirmationButton\" : \"刪除\",\n  \"fieldEmptyForCvv\" : \"請填寫信用卡認證碼（CVV）。\",\n  \"fieldEmptyForExpirationDate\" : \"請填寫到期日。\",\n  \"fieldEmptyForCardholderName\" : \"請填寫持卡人姓名。\",\n  \"fieldTooLongForCardholderName\" : \"持卡人姓名必須少於 256 個字元。\",\n  \"fieldEmptyForNumber\" : \"請填寫數字。\",\n  \"fieldEmptyForPostalCode\" : \"請填寫郵遞區號。\",\n  \"fieldInvalidForCardholderName\" : \"持卡人姓名無效。\",\n  \"fieldInvalidForCvv\" : \"此安全代碼無效。\",\n  \"fieldInvalidForExpirationDate\" : \"此到期日無效。\",\n  \"fieldInvalidForNumber\" : \"此卡號無效。\",\n  \"fieldInvalidForPostalCode\" : \"郵遞區號無效。\",\n  \"genericError\" : \"系統發生錯誤。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"此信用卡為已儲存的付款方式。\",\n  \"hostedFieldsFailedTokenizationError\" : \"請檢查你的資料，然後重試。\",\n  \"hostedFieldsFieldsInvalidError\" : \"請檢查你的資料，然後重試。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"網絡錯誤。請再試一次。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"信用卡認證失敗。請檢查你的資料，然後重試。\",\n  \"paypalButtonMustBeUsed\" : \"使用「PayPal 按鈕」繼續付款。\",\n  \"paypalAccountTokenizationFailedError\" : \"新增 PayPal 帳戶出現問題，請再試一次。\",\n  \"paypalFlowFailedError\" : \"連接至 PayPal 出現問題，請再試一次。\",\n  \"paypalTokenizationRequestActiveError\" : \"正在處理 PayPal 授權付款。\",\n  \"venmoCanceledError\" : \"系統出現錯誤，請確保裝置已安裝最新版本的 Venmo 應用程式，及瀏覽器支援切換至 Venmo。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"無法刪除付款方式，請再試一次。\",\n  \"venmoAppFailedError\" : \"無法在裝置上找到 Venmo 應用程式。\",\n  \"unsupportedCardTypeError\" : \"不支援此卡類型。請改用其他信用卡。\",\n  \"applePayTokenizationError\" : \"處理 Apple Pay 付款時網路發生錯誤。請再試一次。\",\n  \"applePayActiveCardError\" : \"新增可用的信用卡到 Apple Pay 錢包。\",\n  \"cardholderNameLabel\" : \"持卡人姓名\",\n  \"cardNumberLabel\" : \"卡號\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"（3 位數）\",\n  \"cvvFourDigitLabelSubheading\" : \"（4 位數）\",\n  \"cardholderNamePlaceholder\" : \"持卡人姓名\",\n  \"expirationDateLabel\" : \"到期日\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"郵遞區號\",\n  \"saveCardLabel\" : \"儲存卡\",\n  \"payWithCard\" : \"使用扣帳卡或信用卡付款\",\n  \"endingIn\" : \"最後數字為 {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"信用卡\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],252:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"使用 {{paymentSource}} 付款\",\n  \"chooseAnotherWayToPay\" : \"選擇其他付款方式\",\n  \"chooseAWayToPay\" : \"選擇付款方式\",\n  \"otherWaysToPay\" : \"其他付款方式\",\n  \"edit\" : \"編輯\",\n  \"doneEditing\" : \"完成\",\n  \"editPaymentMethods\" : \"編輯付款方式\",\n  \"CreditCardDeleteConfirmationMessage\" : \"刪除末碼為 {{identifier}} 的 {{secondaryIdentifier}} 卡片？\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"刪除 {{identifier}} 的 PayPal 帳戶？\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"確定要刪除用戶名稱為 {{identifier}} 的 Venmo 帳戶？\",\n  \"genericDeleteConfirmationMessage\" : \"確定要刪除此付款方式？\",\n  \"deleteCancelButton\" : \"取消\",\n  \"deleteConfirmationButton\" : \"刪除\",\n  \"fieldEmptyForCvv\" : \"填寫信用卡驗證碼。\",\n  \"fieldEmptyForExpirationDate\" : \"填寫到期日。\",\n  \"fieldEmptyForCardholderName\" : \"填寫持卡人姓名。\",\n  \"fieldTooLongForCardholderName\" : \"持卡人姓名必須少於 256 個字元。\",\n  \"fieldEmptyForNumber\" : \"填寫數字。\",\n  \"fieldEmptyForPostalCode\" : \"填寫郵遞區號。\",\n  \"fieldInvalidForCardholderName\" : \"此持卡人姓名無效。\",\n  \"fieldInvalidForCvv\" : \"此安全代碼無效。\",\n  \"fieldInvalidForExpirationDate\" : \"此到期日無效。\",\n  \"fieldInvalidForNumber\" : \"此卡號無效。\",\n  \"fieldInvalidForPostalCode\" : \"此郵遞區號無效。\",\n  \"genericError\" : \"我們的系統發生問題。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"此信用卡已經是儲存的付款方式。\",\n  \"hostedFieldsFailedTokenizationError\" : \"請檢查你的資料並重試。\",\n  \"hostedFieldsFieldsInvalidError\" : \"請檢查你的資料並重試。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"網路錯誤。請重試。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"信用卡認證失敗。請檢查你的資料並重試。\",\n  \"paypalButtonMustBeUsed\" : \"使用 PayPal 按鈕繼續付款。\",\n  \"paypalAccountTokenizationFailedError\" : \"新增 PayPal 帳戶時發生錯誤。請重試。\",\n  \"paypalFlowFailedError\" : \"連結至 PayPal 時發生錯誤。請重試。\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal 付款授權已在進行中。\",\n  \"venmoCanceledError\" : \"系統發生錯誤。確保你在裝置上安裝了最新版本的 Venmo 應用程式，且瀏覽器支援轉換至 Venmo。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"無法刪除付款方式，請重試。\",\n  \"venmoAppFailedError\" : \"你的裝置上找不到 Venmo 應用程式。\",\n  \"unsupportedCardTypeError\" : \"不支援此卡片類型，請改用其他卡片。\",\n  \"applePayTokenizationError\" : \"處理 Apple Pay 付款時發生網路連線錯誤。請重試。\",\n  \"applePayActiveCardError\" : \"將支援卡片新增至你的 Apple Pay 錢包。\",\n  \"cardholderNameLabel\" : \"持卡人姓名\",\n  \"cardNumberLabel\" : \"卡號\",\n  \"cvvLabel\" : \"信用卡驗證碼\",\n  \"cvvThreeDigitLabelSubheading\" : \"（3 位數）\",\n  \"cvvFourDigitLabelSubheading\" : \"（4 位數）\",\n  \"cardholderNamePlaceholder\" : \"持卡人姓名\",\n  \"expirationDateLabel\" : \"到期日\",\n  \"expirationDateLabelSubheading\" : \"（月 / 年）\",\n  \"expirationDatePlaceholder\" : \"月 / 年\",\n  \"postalCodeLabel\" : \"郵遞區號\",\n  \"saveCardLabel\" : \"儲存卡片\",\n  \"payWithCard\" : \"使用卡片付款\",\n  \"endingIn\" : \"末碼為 {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"卡片\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"美國運通\",\n  \"Discover\" : \"發現卡\",\n  \"Diners Club\" : \"大來卡\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"銀聯\"\n}\n;\n\n},{}],253:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"使用{{paymentSource}}付款\",\n  \"chooseAnotherWayToPay\" : \"选择其他付款方式\",\n  \"chooseAWayToPay\" : \"选择付款方式\",\n  \"otherWaysToPay\" : \"其他付款方式\",\n  \"edit\" : \"编辑\",\n  \"doneEditing\" : \"完成\",\n  \"editPaymentMethods\" : \"编辑付款方式\",\n  \"CreditCardDeleteConfirmationMessage\" : \"删除以{{identifier}}}结尾的{{secondaryIdentifier}}}卡？\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"删除PayPal账户{{identifier}}}？\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"确定要删除用户名为{{identifier}}}的Venmo账户吗？\",\n  \"genericDeleteConfirmationMessage\" : \"确定要删除此付款方式吗？\",\n  \"deleteCancelButton\" : \"取消\",\n  \"deleteConfirmationButton\" : \"删除\",\n  \"fieldEmptyForCvv\" : \"请填写卡校验值。\",\n  \"fieldEmptyForExpirationDate\" : \"请填写有效期限。\",\n  \"fieldEmptyForCardholderName\" : \"请填写持卡人姓名。\",\n  \"fieldTooLongForCardholderName\" : \"持卡人姓名必须少于256个字符。\",\n  \"fieldEmptyForNumber\" : \"请填写号码。\",\n  \"fieldEmptyForPostalCode\" : \"请填写邮政编码。\",\n  \"fieldInvalidForCardholderName\" : \"此持卡人姓名无效。\",\n  \"fieldInvalidForCvv\" : \"此验证码无效。\",\n  \"fieldInvalidForExpirationDate\" : \"此有效期限无效。\",\n  \"fieldInvalidForNumber\" : \"此卡号无效。\",\n  \"fieldInvalidForPostalCode\" : \"此邮政编码无效。\",\n  \"genericError\" : \"我们遇到了一些问题。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"此信用卡已存在于已保存的付款方式中。\",\n  \"hostedFieldsFailedTokenizationError\" : \"请检查您的信息，然后重试。\",\n  \"hostedFieldsFieldsInvalidError\" : \"请检查您的信息，然后重试。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"网络错误。请重试。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"信用卡认证失败。请检查您的信息，然后重试。\",\n  \"paypalButtonMustBeUsed\" : \"使用PayPal按钮以便继续进行您的付款。\",\n  \"paypalAccountTokenizationFailedError\" : \"添加PayPal账户时遇到了问题。请重试。\",\n  \"paypalFlowFailedError\" : \"连接到PayPal时遇到了问题。请重试。\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal付款授权正在处理中。\",\n  \"venmoCanceledError\" : \"遇到了一些问题。请确保您的设备上安装了最新版本的Venmo应用，并且您的浏览器支持切换到Venmo。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"无法删除付款方式，请重试。\",\n  \"venmoAppFailedError\" : \"未能在您的设备上找到Venmo应用。\",\n  \"unsupportedCardTypeError\" : \"不支持该卡类型。请尝试其它卡。\",\n  \"applePayTokenizationError\" : \"处理Apple Pay付款时出现了网络错误。请重试。\",\n  \"applePayActiveCardError\" : \"在您的Apple Pay钱包中添加一张受支持的卡。\",\n  \"cardholderNameLabel\" : \"持卡人姓名\",\n  \"cardNumberLabel\" : \"卡号\",\n  \"cvvLabel\" : \"卡校验值\",\n  \"cvvThreeDigitLabelSubheading\" : \"（3位数）\",\n  \"cvvFourDigitLabelSubheading\" : \"（4位数）\",\n  \"cardholderNamePlaceholder\" : \"持卡人姓名\",\n  \"expirationDateLabel\" : \"有效期限\",\n  \"expirationDateLabelSubheading\" : \"（月/年）\",\n  \"expirationDatePlaceholder\" : \"月/年\",\n  \"postalCodeLabel\" : \"邮政编码\",\n  \"saveCardLabel\" : \"保存卡\",\n  \"payWithCard\" : \"使用卡支付\",\n  \"endingIn\" : \"以{{lastFourCardDigits}}}结尾\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"卡\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"发现\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"银联\"\n}\n;\n\n},{}],254:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../lib/assign').assign;\nvar classList = require('@braintree/class-list');\nvar DropinError = require('../lib/dropin-error');\nvar errors = require('../constants').errors;\nvar Promise = require('../lib/promise');\n\nfunction BaseView(options) {\n  options = options || {};\n\n  assign(this, options);\n}\n\nBaseView.prototype.getElementById = function (id) {\n  if (!this.element) { return null; }\n\n  return this.element.querySelector('[data-braintree-id=\"' + id + '\"]');\n};\n\nBaseView.prototype.requestPaymentMethod = function () {\n  return Promise.reject(new DropinError(errors.NO_PAYMENT_METHOD_ERROR));\n};\n\nBaseView.prototype.getPaymentMethod = function () {\n  return this.activeMethodView && this.activeMethodView.paymentMethod;\n};\n\nBaseView.prototype.onSelection = function () {};\n\nBaseView.prototype.teardown = function () {\n  return Promise.resolve();\n};\n\nBaseView.prototype.preventUserAction = function () {\n  if (this.element) {\n    classList.add(this.element, 'braintree-sheet--loading');\n  }\n\n  this.model.preventUserAction();\n};\n\nBaseView.prototype.allowUserAction = function () {\n  if (this.element) {\n    classList.remove(this.element, 'braintree-sheet--loading');\n  }\n\n  this.model.allowUserAction();\n};\n\nmodule.exports = BaseView;\n\n},{\"../constants\":196,\"../lib/assign\":202,\"../lib/dropin-error\":206,\"../lib/promise\":213,\"@braintree/class-list\":40}],255:[function(require,module,exports){\n'use strict';\n\nvar BaseView = require('./base-view');\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\nvar paymentMethodTypes = require('../constants').paymentMethodTypes;\n\nfunction DeleteConfirmationView() {\n  BaseView.apply(this, arguments);\n\n  this._initialize();\n}\n\nDeleteConfirmationView.prototype = Object.create(BaseView.prototype);\nDeleteConfirmationView.prototype.constructor = DeleteConfirmationView;\nDeleteConfirmationView.ID = DeleteConfirmationView.prototype.ID = 'delete-confirmation';\n\nDeleteConfirmationView.prototype._initialize = function () {\n  this._yesButton = this.getElementById('delete-confirmation__yes');\n  this._noButton = this.getElementById('delete-confirmation__no');\n  this._messageBox = this.getElementById('delete-confirmation__message');\n\n  addSelectionEventHandler(this._yesButton, function () {\n    this.model.deleteVaultedPaymentMethod();\n  }.bind(this));\n  addSelectionEventHandler(this._noButton, function () {\n    this.model.cancelDeleteVaultedPaymentMethod();\n  }.bind(this));\n};\n\nDeleteConfirmationView.prototype.applyPaymentMethod = function (paymentMethod) {\n  var identifier, secondaryIdentifier;\n  var messageText = this.strings[paymentMethod.type + 'DeleteConfirmationMessage'];\n\n  if (messageText) {\n    switch (paymentMethod.type) {\n      case paymentMethodTypes.card:\n        identifier = paymentMethod.details.lastFour;\n        secondaryIdentifier = paymentMethod.details.cardType;\n        secondaryIdentifier = this.strings[secondaryIdentifier] || secondaryIdentifier;\n        break;\n      case paymentMethodTypes.paypal:\n        identifier = paymentMethod.details.email;\n        break;\n      case paymentMethodTypes.venmo:\n        identifier = paymentMethod.details.username;\n        break;\n      default:\n        break;\n    }\n\n    messageText = messageText.replace('{{identifier}}', identifier);\n    if (secondaryIdentifier) {\n      messageText = messageText.replace('{{secondaryIdentifier}}', secondaryIdentifier);\n    }\n  } else {\n    messageText = this.strings.genericDeleteConfirmationMessage;\n  }\n  this._messageBox.innerText = messageText;\n};\n\nDeleteConfirmationView.prototype.onSelection = function () {\n  window.requestAnimationFrame(function () {\n    this._yesButton.focus();\n  }.bind(this));\n};\n\nmodule.exports = DeleteConfirmationView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"./base-view\":254}],256:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('../lib/analytics');\nvar analyticsKinds = require('../constants').analyticsKinds;\nvar BaseView = require('./base-view');\nvar classList = require('@braintree/class-list');\nvar sheetViews = require('./payment-sheet-views');\nvar PaymentMethodsView = require('./payment-methods-view');\nvar PaymentOptionsView = require('./payment-options-view');\nvar DeleteConfirmationView = require('./delete-confirmation-view');\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\nvar Promise = require('../lib/promise');\nvar wait = require('../lib/wait');\nvar supportsFlexbox = require('../lib/supports-flexbox');\n\nvar CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT = require('../constants').CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT;\nvar DEVELOPER_MISCONFIGURATION_MESSAGE = require('../constants').errors.DEVELOPER_MISCONFIGURATION_MESSAGE;\n\nfunction MainView() {\n  BaseView.apply(this, arguments);\n\n  this.dependenciesInitializing = 0;\n\n  this._initialize();\n}\n\nMainView.prototype = Object.create(BaseView.prototype);\nMainView.prototype.constructor = MainView;\n\nMainView.prototype._initialize = function () {\n  var paymentOptionsView;\n\n  this._hasMultiplePaymentOptions = this.model.supportedPaymentOptions.length > 1;\n\n  this._views = {};\n\n  this.sheetContainer = this.getElementById('sheet-container');\n  this.sheetErrorText = this.getElementById('sheet-error-text');\n\n  this.toggle = this.getElementById('toggle');\n  this.disableWrapper = this.getElementById('disable-wrapper');\n  this.lowerContainer = this.getElementById('lower-container');\n\n  this.loadingContainer = this.getElementById('loading-container');\n  this.dropinContainer = this.element.querySelector('.braintree-dropin');\n\n  this.supportsFlexbox = supportsFlexbox();\n\n  this.model.on('asyncDependenciesReady', this.hideLoadingIndicator.bind(this));\n\n  this.model.on('errorOccurred', this.showSheetError.bind(this));\n  this.model.on('errorCleared', this.hideSheetError.bind(this));\n  this.model.on('preventUserAction', this.preventUserAction.bind(this));\n  this.model.on('allowUserAction', this.allowUserAction.bind(this));\n\n  this.paymentSheetViewIDs = Object.keys(sheetViews).reduce(function (ids, sheetViewKey) {\n    var PaymentSheetView, paymentSheetView;\n\n    if (this.model.supportedPaymentOptions.indexOf(sheetViewKey) !== -1) {\n      PaymentSheetView = sheetViews[sheetViewKey];\n\n      paymentSheetView = new PaymentSheetView({\n        element: this.getElementById(PaymentSheetView.ID),\n        mainView: this,\n        model: this.model,\n        client: this.client,\n        strings: this.strings\n      });\n      paymentSheetView.initialize();\n\n      this.addView(paymentSheetView);\n      ids.push(paymentSheetView.ID);\n    }\n\n    return ids;\n  }.bind(this), []);\n\n  this.paymentMethodsViews = new PaymentMethodsView({\n    element: this.element,\n    model: this.model,\n    client: this.client,\n    strings: this.strings\n  });\n  this.addView(this.paymentMethodsViews);\n\n  this.deleteConfirmationView = new DeleteConfirmationView({\n    element: this.getElementById('delete-confirmation'),\n    model: this.model,\n    strings: this.strings\n  });\n  this.addView(this.deleteConfirmationView);\n\n  addSelectionEventHandler(this.toggle, this.toggleAdditionalOptions.bind(this));\n\n  this.model.on('changeActivePaymentMethod', function () {\n    wait.delay(CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT).then(function () {\n      var id = PaymentMethodsView.ID;\n\n      // if Drop-in gets into the state where it's told to go to the methods\n      // view, but there are no saved payment methods, it should instead\n      // redirect to the view it started on\n      if (!this.model.hasPaymentMethods()) {\n        id = this.model.getInitialViewId();\n      }\n\n      this.setPrimaryView(id);\n    }.bind(this));\n  }.bind(this));\n\n  this.model.on('changeActiveView', this._onChangeActiveView.bind(this));\n\n  this.model.on('removeActivePaymentMethod', function () {\n    var activePaymentView = this.getView(this.model.getActivePaymentViewId());\n\n    if (activePaymentView && typeof activePaymentView.removeActivePaymentMethod === 'function') {\n      activePaymentView.removeActivePaymentMethod();\n    }\n  }.bind(this));\n\n  this.model.on('enableEditMode', this.enableEditMode.bind(this));\n\n  this.model.on('disableEditMode', this.disableEditMode.bind(this));\n\n  this.model.on('confirmPaymentMethodDeletion', this.openConfirmPaymentMethodDeletionDialog.bind(this));\n  this.model.on('cancelVaultedPaymentMethodDeletion', this.cancelVaultedPaymentMethodDeletion.bind(this));\n  this.model.on('startVaultedPaymentMethodDeletion', this.startVaultedPaymentMethodDeletion.bind(this));\n  this.model.on('finishVaultedPaymentMethodDeletion', this.finishVaultedPaymentMethodDeletion.bind(this));\n\n  if (this._hasMultiplePaymentOptions) {\n    paymentOptionsView = new PaymentOptionsView({\n      client: this.client,\n      element: this.getElementById(PaymentOptionsView.ID),\n      mainView: this,\n      model: this.model,\n      strings: this.strings\n    });\n\n    this.addView(paymentOptionsView);\n  }\n\n  this._sendToDefaultView();\n};\n\nMainView.prototype._onChangeActiveView = function (data) {\n  var id = data.newViewId;\n  var activePaymentView = this.getView(id);\n\n  if (id === PaymentMethodsView.ID) {\n    classList.add(this.paymentMethodsViews.container, 'braintree-methods--active');\n    classList.remove(this.sheetContainer, 'braintree-sheet--active');\n  } else {\n    wait.delay(0).then(function () {\n      classList.add(this.sheetContainer, 'braintree-sheet--active');\n    }.bind(this));\n    classList.remove(this.paymentMethodsViews.container, 'braintree-methods--active');\n    if (!this.getView(id).getPaymentMethod()) {\n      this.model.setPaymentMethodRequestable({\n        isRequestable: false\n      });\n    }\n  }\n\n  activePaymentView.onSelection();\n};\n\nMainView.prototype.addView = function (view) {\n  this._views[view.ID] = view;\n};\n\nMainView.prototype.getView = function (id) {\n  return this._views[id];\n};\n\nMainView.prototype.setPrimaryView = function (id, secondaryViewId) {\n  var paymentMethod;\n\n  wait.delay(0).then(function () {\n    this.element.className = prefixShowClass(id);\n    if (secondaryViewId) {\n      classList.add(this.element, prefixShowClass(secondaryViewId));\n    }\n  }.bind(this));\n\n  this.primaryView = this.getView(id);\n  this.model.changeActiveView(id);\n\n  if (this.paymentSheetViewIDs.indexOf(id) !== -1) {\n    if (this.model.getPaymentMethods().length > 0 || this.getView(PaymentOptionsView.ID)) {\n      this.showToggle();\n    } else {\n      this.hideToggle();\n    }\n  } else if (id === PaymentMethodsView.ID) {\n    this.showToggle();\n    // Move options below the upper-container\n    this.getElementById('lower-container').appendChild(this.getElementById('options'));\n  } else if (id === PaymentOptionsView.ID) {\n    this.hideToggle();\n  }\n\n  if (!this.supportsFlexbox) {\n    this.element.setAttribute('data-braintree-no-flexbox', true);\n  }\n\n  paymentMethod = this.primaryView.getPaymentMethod();\n\n  this.model.setPaymentMethodRequestable({\n    isRequestable: Boolean(paymentMethod && !this.model.isInEditMode()),\n    type: paymentMethod && paymentMethod.type,\n    selectedPaymentMethod: paymentMethod\n  });\n\n  this.model.clearError();\n};\n\nMainView.prototype.requestPaymentMethod = function () {\n  var activePaymentView = this.getView(this.model.getActivePaymentViewId());\n\n  return activePaymentView.requestPaymentMethod().then(function (payload) {\n    analytics.sendEvent(this.client, 'request-payment-method.' + analyticsKinds[payload.type]);\n\n    return payload;\n  }.bind(this)).catch(function (err) {\n    analytics.sendEvent(this.client, 'request-payment-method.error');\n\n    return Promise.reject(err);\n  }.bind(this));\n};\n\nMainView.prototype.hideLoadingIndicator = function () {\n  classList.remove(this.dropinContainer, 'braintree-loading');\n  classList.add(this.dropinContainer, 'braintree-loaded');\n  classList.add(this.loadingContainer, 'braintree-hidden');\n};\n\nMainView.prototype.showLoadingIndicator = function () {\n  classList.add(this.dropinContainer, 'braintree-loading');\n  classList.remove(this.dropinContainer, 'braintree-loaded');\n  classList.remove(this.loadingContainer, 'braintree-hidden');\n};\n\nMainView.prototype.toggleAdditionalOptions = function () {\n  var sheetViewID;\n  var isPaymentSheetView = this.paymentSheetViewIDs.indexOf(this.primaryView.ID) !== -1;\n\n  this.hideToggle();\n\n  if (!this._hasMultiplePaymentOptions) {\n    sheetViewID = this.paymentSheetViewIDs[0];\n\n    classList.add(this.element, prefixShowClass(sheetViewID));\n    this.model.changeActiveView(sheetViewID);\n  } else if (isPaymentSheetView) {\n    if (this.model.getPaymentMethods().length === 0) {\n      this.setPrimaryView(PaymentOptionsView.ID);\n    } else {\n      this.setPrimaryView(PaymentMethodsView.ID, PaymentOptionsView.ID);\n      this.hideToggle();\n    }\n  } else {\n    classList.add(this.element, prefixShowClass(PaymentOptionsView.ID));\n  }\n};\n\nMainView.prototype.showToggle = function () {\n  if (this.model.isInEditMode()) {\n    return;\n  }\n  classList.remove(this.toggle, 'braintree-hidden');\n  classList.add(this.lowerContainer, 'braintree-hidden');\n};\n\nMainView.prototype.hideToggle = function () {\n  classList.add(this.toggle, 'braintree-hidden');\n  classList.remove(this.lowerContainer, 'braintree-hidden');\n};\n\nMainView.prototype.showSheetError = function (error) {\n  var errorMessage;\n  var genericErrorMessage = this.strings.genericError;\n\n  if (this.strings.hasOwnProperty(error)) {\n    errorMessage = this.strings[error];\n  } else if (error && typeof error.code === 'string') {\n    errorMessage = this.strings[snakeCaseToCamelCase(error.code) + 'Error'] || genericErrorMessage;\n  } else if (error === 'developerError') {\n    errorMessage = DEVELOPER_MISCONFIGURATION_MESSAGE;\n  } else {\n    errorMessage = genericErrorMessage;\n  }\n\n  classList.add(this.dropinContainer, 'braintree-sheet--has-error');\n  this.sheetErrorText.innerHTML = errorMessage;\n};\n\nMainView.prototype.hideSheetError = function () {\n  classList.remove(this.dropinContainer, 'braintree-sheet--has-error');\n};\n\nMainView.prototype.getOptionsElements = function () {\n  return this._views.options.elements;\n};\n\nMainView.prototype.preventUserAction = function () {\n  classList.remove(this.disableWrapper, 'braintree-hidden');\n};\n\nMainView.prototype.allowUserAction = function () {\n  classList.add(this.disableWrapper, 'braintree-hidden');\n};\n\nMainView.prototype.teardown = function () {\n  var error;\n  var viewNames = Object.keys(this._views);\n  var teardownPromises = viewNames.map(function (view) {\n    return this._views[view].teardown().catch(function (err) {\n      error = err;\n    });\n  }.bind(this));\n\n  return Promise.all(teardownPromises).then(function () {\n    if (error) {\n      return Promise.reject(error);\n    }\n\n    return Promise.resolve();\n  });\n};\n\nMainView.prototype.enableEditMode = function () {\n  this.setPrimaryView(this.paymentMethodsViews.ID);\n  this.paymentMethodsViews.enableEditMode();\n  this.hideToggle();\n\n  this.model.setPaymentMethodRequestable({\n    isRequestable: false\n  });\n};\n\nMainView.prototype.disableEditMode = function () {\n  var paymentMethod;\n\n  this.hideSheetError();\n  this.paymentMethodsViews.disableEditMode();\n  this.showToggle();\n\n  paymentMethod = this.primaryView.getPaymentMethod();\n\n  this.model.setPaymentMethodRequestable({\n    isRequestable: Boolean(paymentMethod),\n    type: paymentMethod && paymentMethod.type,\n    selectedPaymentMethod: paymentMethod\n  });\n};\n\nMainView.prototype.openConfirmPaymentMethodDeletionDialog = function (paymentMethod) {\n  this.deleteConfirmationView.applyPaymentMethod(paymentMethod);\n  this.setPrimaryView(this.deleteConfirmationView.ID);\n};\n\nMainView.prototype.cancelVaultedPaymentMethodDeletion = function () {\n  this.setPrimaryView(this.paymentMethodsViews.ID);\n};\n\nMainView.prototype.startVaultedPaymentMethodDeletion = function () {\n  this.element.className = '';\n  this.showLoadingIndicator();\n};\n\nMainView.prototype.finishVaultedPaymentMethodDeletion = function (error) {\n  var self = this;\n\n  this.paymentMethodsViews.refreshPaymentMethods();\n\n  if (error && this.model.getPaymentMethods().length > 0) {\n    this.model.enableEditMode();\n    this.showSheetError('vaultManagerPaymentMethodDeletionError');\n  } else {\n    this._sendToDefaultView();\n  }\n\n  return new Promise(function (resolve) {\n    wait.delay(500).then(function () {\n      // allow all the views to reset before hiding the loading indicator\n      self.hideLoadingIndicator();\n      resolve();\n    });\n  });\n};\n\nMainView.prototype._sendToDefaultView = function () {\n  var paymentMethods = this.model.getPaymentMethods();\n  var preselectVaultedPaymentMethod = this.model.merchantConfiguration.preselectVaultedPaymentMethod !== false;\n\n  if (paymentMethods.length > 0) {\n    if (preselectVaultedPaymentMethod) {\n      analytics.sendEvent(this.client, 'vaulted-card.preselect');\n\n      this.model.changeActivePaymentMethod(paymentMethods[0]);\n    } else {\n      this.setPrimaryView(this.paymentMethodsViews.ID);\n    }\n  } else if (this._hasMultiplePaymentOptions) {\n    this.setPrimaryView(PaymentOptionsView.ID);\n  } else {\n    this.setPrimaryView(this.paymentSheetViewIDs[0]);\n  }\n};\nfunction snakeCaseToCamelCase(s) {\n  return s.toLowerCase().replace(/(\\_\\w)/g, function (m) {\n    return m[1].toUpperCase();\n  });\n}\n\nfunction prefixShowClass(classname) {\n  return 'braintree-show-' + classname;\n}\n\nmodule.exports = MainView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"../lib/analytics\":201,\"../lib/promise\":213,\"../lib/supports-flexbox\":215,\"../lib/wait\":218,\"./base-view\":254,\"./delete-confirmation-view\":255,\"./payment-methods-view\":258,\"./payment-options-view\":259,\"./payment-sheet-views\":264,\"@braintree/class-list\":40}],257:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('../lib/analytics');\nvar BaseView = require('./base-view');\nvar classList = require('@braintree/class-list');\nvar constants = require('../constants');\n\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\n\nvar paymentMethodHTML = \"<div class=\\\"braintree-method__icon-container braintree-method__delete-container\\\">\\n  <div class=\\\"braintree-method__icon braintree-method__delete\\\">\\n    <svg width=\\\"48\\\" height=\\\"29\\\">\\n      <use xlink:href=\\\"#iconX\\\"></use>\\n    </svg>\\n  </div>\\n</div>\\n\\n<div class=\\\"braintree-method__logo\\\">\\n  <svg width=\\\"40\\\" height=\\\"24\\\" class=\\\"@CLASSNAME\\\">\\n    <use xlink:href=\\\"#@ICON\\\"></use>\\n  </svg>\\n</div>\\n\\n<div class=\\\"braintree-method__label\\\">@TITLE<br><div class=\\\"braintree-method__label--small\\\">@SUBTITLE</div></div>\\n\\n<div class=\\\"braintree-method__icon-container braintree-method__check-container\\\">\\n  <div class=\\\"braintree-method__icon braintree-method__check\\\">\\n    <svg height=\\\"100%\\\" width=\\\"100%\\\">\\n      <use xlink:href=\\\"#iconCheck\\\"></use>\\n    </svg>\\n  </div>\\n</div>\\n\";\n\nfunction PaymentMethodView() {\n  BaseView.apply(this, arguments);\n\n  this._initialize();\n}\n\nPaymentMethodView.prototype = Object.create(BaseView.prototype);\nPaymentMethodView.prototype.constructor = PaymentMethodView;\n\nPaymentMethodView.prototype._initialize = function () {\n  var endingInText;\n  var html = paymentMethodHTML;\n  var paymentMethodCardTypes = constants.paymentMethodCardTypes;\n  var paymentMethodTypes = constants.paymentMethodTypes;\n\n  this.element = document.createElement('div');\n  this.element.className = 'braintree-method';\n  this.element.setAttribute('tabindex', '0');\n  this.element.setAttribute('role', 'button');\n\n  addSelectionEventHandler(this.element, function () {\n    if (this.model.isInEditMode()) {\n      this._selectDelete();\n    } else {\n      this._choosePaymentMethod();\n    }\n  }.bind(this));\n\n  switch (this.paymentMethod.type) {\n    case paymentMethodTypes.applePay:\n      html = html.replace(/@ICON/g, 'logoApplePay')\n        .replace(/@CLASSNAME/g, '')\n        .replace(/@TITLE/g, this.strings['Apple Pay'])\n        .replace(/@SUBTITLE/g, '');\n      break;\n    case paymentMethodTypes.card:\n      endingInText = this.strings.endingIn.replace('{{lastFourCardDigits}}', this.paymentMethod.details.lastFour);\n      html = html.replace(/@ICON/g, 'icon-' + paymentMethodCardTypes[this.paymentMethod.details.cardType])\n        .replace(/@CLASSNAME/g, ' braintree-icon--bordered')\n        .replace(/@TITLE/g, endingInText)\n        .replace(/@SUBTITLE/g, this.strings[this.paymentMethod.details.cardType]);\n      break;\n    case paymentMethodTypes.googlePay:\n      html = html.replace(/@ICON/g, 'logoGooglePay')\n        .replace(/@CLASSNAME/g, '')\n        .replace(/@TITLE/g, this.strings['Google Pay'])\n        .replace(/@SUBTITLE/g, '');\n      break;\n    case paymentMethodTypes.paypal:\n      html = html.replace(/@ICON/g, 'logoPayPal')\n        .replace(/@CLASSNAME/g, '')\n        .replace(/@TITLE/g, this.paymentMethod.details.email)\n        .replace(/@SUBTITLE/g, this.strings.PayPal);\n      break;\n    case paymentMethodTypes.venmo:\n      html = html.replace(/@ICON/g, 'logoVenmo')\n        .replace(/@CLASSNAME/g, '')\n        .replace(/@TITLE/g, this.paymentMethod.details.username)\n        .replace(/@SUBTITLE/g, this.strings.Venmo);\n      break;\n    default:\n      break;\n  }\n\n  this.element.innerHTML = html;\n  this.checkMark = this.element.querySelector('.braintree-method__check-container');\n};\n\nPaymentMethodView.prototype.setActive = function (isActive) {\n  // setTimeout required to animate addition of new payment methods\n  setTimeout(function () {\n    classList.toggle(this.element, 'braintree-method--active', isActive);\n  }.bind(this), 0);\n};\n\nPaymentMethodView.prototype.enableEditMode = function () {\n  classList.add(this.checkMark, 'braintree-hidden');\n  if (this.paymentMethod.hasSubscription) {\n    classList.add(this.element, 'braintree-method--disabled');\n  }\n};\n\nPaymentMethodView.prototype.disableEditMode = function () {\n  classList.remove(this.checkMark, 'braintree-hidden');\n  classList.remove(this.element, 'braintree-method--disabled');\n};\n\nPaymentMethodView.prototype.teardown = function () {\n  if (this.element.parentNode) {\n    this.element.parentNode.removeChild(this.element);\n  }\n};\n\nPaymentMethodView.prototype._choosePaymentMethod = function () {\n  if (this.paymentMethod.vaulted) {\n    analytics.sendEvent(this.client, 'vaulted-' + constants.analyticsKinds[this.paymentMethod.type] + '.select');\n  }\n\n  this.model.changeActivePaymentMethod(this.paymentMethod);\n};\n\nPaymentMethodView.prototype._selectDelete = function () {\n  this.model.confirmPaymentMethodDeletion(this.paymentMethod);\n};\n\nmodule.exports = PaymentMethodView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"../lib/analytics\":201,\"./base-view\":254,\"@braintree/class-list\":40}],258:[function(require,module,exports){\n'use strict';\n\nvar BaseView = require('./base-view');\nvar PaymentMethodView = require('./payment-method-view');\nvar DropinError = require('../lib/dropin-error');\nvar classList = require('@braintree/class-list');\nvar errors = require('../constants').errors;\nvar Promise = require('../lib/promise');\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\n\nvar PAYMENT_METHOD_TYPE_TO_TRANSLATION_STRING = {\n  CreditCard: 'Card',\n  PayPalAccount: 'PayPal',\n  ApplePayCard: 'Apple Pay',\n  AndroidPayCard: 'Google Pay',\n  VenmoAccount: 'Venmo'\n};\n\nfunction PaymentMethodsView() {\n  BaseView.apply(this, arguments);\n\n  this._initialize();\n}\n\nPaymentMethodsView.prototype = Object.create(BaseView.prototype);\nPaymentMethodsView.prototype.constructor = PaymentMethodsView;\nPaymentMethodsView.ID = PaymentMethodsView.prototype.ID = 'methods';\n\nPaymentMethodsView.prototype._initialize = function () {\n  this.views = [];\n  this.container = this.getElementById('methods-container');\n  this._headingLabel = this.getElementById('methods-label');\n  this._editButton = this.getElementById('methods-edit');\n\n  this.model.on('addPaymentMethod', this._addPaymentMethod.bind(this));\n  this.model.on('changeActivePaymentMethod', this._changeActivePaymentMethodView.bind(this));\n  this.model.on('refreshPaymentMethods', this.refreshPaymentMethods.bind(this));\n\n  this.refreshPaymentMethods();\n\n  if (this.model.merchantConfiguration.vaultManager) {\n    this.model.on('removePaymentMethod', this._removePaymentMethod.bind(this));\n\n    addSelectionEventHandler(this._editButton, function () {\n      if (this.model.isInEditMode()) {\n        this.model.disableEditMode();\n      } else {\n        this.model.enableEditMode();\n      }\n    }.bind(this));\n\n    classList.remove(this._editButton, 'braintree-hidden');\n  }\n};\n\nPaymentMethodsView.prototype.removeActivePaymentMethod = function () {\n  if (!this.activeMethodView) {\n    return;\n  }\n  this.activeMethodView.setActive(false);\n  this.activeMethodView = null;\n  classList.add(this._headingLabel, 'braintree-no-payment-method-selected');\n};\n\nPaymentMethodsView.prototype._getPaymentMethodString = function () {\n  var stringKey, paymentMethodTypeString;\n\n  if (!this.activeMethodView) {\n    return '';\n  }\n\n  stringKey = PAYMENT_METHOD_TYPE_TO_TRANSLATION_STRING[this.activeMethodView.paymentMethod.type];\n  paymentMethodTypeString = this.strings[stringKey];\n\n  return this.strings.payingWith.replace('{{paymentSource}}', paymentMethodTypeString);\n};\n\nPaymentMethodsView.prototype.enableEditMode = function () {\n  classList.add(this.container, 'braintree-methods--edit');\n\n  this._editButton.innerHTML = this.strings.deleteCancelButton;\n  this._headingLabel.innerHTML = this.strings.editPaymentMethods;\n\n  this.views.forEach(function (view) {\n    view.enableEditMode();\n  });\n};\n\nPaymentMethodsView.prototype.disableEditMode = function () {\n  classList.remove(this.container, 'braintree-methods--edit');\n\n  this._editButton.innerHTML = this.strings.edit;\n  this._headingLabel.innerHTML = this._getPaymentMethodString();\n\n  this.views.forEach(function (view) {\n    view.disableEditMode();\n  });\n};\n\nPaymentMethodsView.prototype._addPaymentMethod = function (paymentMethod) {\n  var paymentMethodView = new PaymentMethodView({\n    model: this.model,\n    paymentMethod: paymentMethod,\n    client: this.client,\n    strings: this.strings\n  });\n\n  if (this.model.isGuestCheckout && this.container.firstChild) {\n    this.views[0].teardown();\n    this.views.pop();\n  }\n\n  if (this.container.firstChild) {\n    this.container.insertBefore(paymentMethodView.element, this.container.firstChild);\n  } else {\n    this.container.appendChild(paymentMethodView.element);\n  }\n\n  this.views.push(paymentMethodView);\n};\n\nPaymentMethodsView.prototype._removePaymentMethod = function (paymentMethod) {\n  var i;\n\n  for (i = 0; i < this.views.length; i++) {\n    if (this.views[i].paymentMethod === paymentMethod) {\n      this.views[i].teardown();\n      this._headingLabel.innerHTML = '&nbsp;';\n      this.views.splice(i, 1);\n      break;\n    }\n  }\n};\n\nPaymentMethodsView.prototype._changeActivePaymentMethodView = function (paymentMethod) {\n  var i;\n  var previousActiveMethodView = this.activeMethodView;\n\n  for (i = 0; i < this.views.length; i++) {\n    if (this.views[i].paymentMethod === paymentMethod) {\n      this.activeMethodView = this.views[i];\n      this._headingLabel.innerHTML = this._getPaymentMethodString();\n      break;\n    }\n  }\n\n  if (previousActiveMethodView) {\n    previousActiveMethodView.setActive(false);\n  }\n  this.activeMethodView.setActive(true);\n  classList.remove(this._headingLabel, 'braintree-no-payment-method-selected');\n};\n\nPaymentMethodsView.prototype.requestPaymentMethod = function () {\n  if (!this.activeMethodView || this.model.isInEditMode()) {\n    return Promise.reject(new DropinError(errors.NO_PAYMENT_METHOD_ERROR));\n  }\n\n  return Promise.resolve(this.activeMethodView.paymentMethod);\n};\n\nPaymentMethodsView.prototype.refreshPaymentMethods = function () {\n  var i;\n  var paymentMethods = this.model.getPaymentMethods();\n\n  this.views.forEach(function (view) {\n    view.teardown();\n  });\n\n  this.views = [];\n\n  for (i = paymentMethods.length - 1; i >= 0; i--) {\n    this._addPaymentMethod(paymentMethods[i]);\n  }\n};\n\nmodule.exports = PaymentMethodsView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"../lib/dropin-error\":206,\"../lib/promise\":213,\"./base-view\":254,\"./payment-method-view\":257,\"@braintree/class-list\":40}],259:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('../lib/analytics');\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\nvar BaseView = require('./base-view');\n\nvar paymentOptionIDs = require('../constants').paymentOptionIDs;\n\nvar paymentMethodOptionHTML = \"<div class=\\\"braintree-option__logo\\\">\\n  <svg width=\\\"48\\\" height=\\\"29\\\" class=\\\"@CLASSNAME\\\">\\n    <use xlink:href=\\\"#@ICON\\\"></use>\\n  </svg>\\n</div>\\n\\n<div class=\\\"braintree-option__label\\\" aria-label=\\\"@OPTION_LABEL\\\">\\n  @OPTION_TITLE\\n  <div class=\\\"braintree-option__disabled-message\\\"></div>\\n</div>\\n\";\n\nfunction PaymentOptionsView() {\n  BaseView.apply(this, arguments);\n\n  this._initialize();\n}\n\nPaymentOptionsView.prototype = Object.create(BaseView.prototype);\nPaymentOptionsView.prototype.constructor = PaymentOptionsView;\nPaymentOptionsView.ID = PaymentOptionsView.prototype.ID = 'options';\n\nPaymentOptionsView.prototype._initialize = function () {\n  this.container = this.getElementById('payment-options-container');\n  this.elements = {};\n\n  this.model.supportedPaymentOptions.forEach(function (paymentOptionID) {\n    this._addPaymentOption(paymentOptionID);\n  }.bind(this));\n};\n\nPaymentOptionsView.prototype._addPaymentOption = function (paymentOptionID) {\n  var paymentSource;\n  var div = document.createElement('div');\n  var html = paymentMethodOptionHTML;\n  var clickHandler = function clickHandler() {\n    this.mainView.setPrimaryView(paymentOptionID);\n    this.model.selectPaymentOption(paymentOptionID);\n    analytics.sendEvent(this.client, 'selected.' + paymentOptionIDs[paymentOptionID]);\n  }.bind(this);\n\n  div.className = 'braintree-option braintree-option__' + paymentOptionID;\n  div.setAttribute('tabindex', '0');\n  div.setAttribute('role', 'button');\n\n  switch (paymentOptionID) {\n    case paymentOptionIDs.applePay:\n      paymentSource = this.strings['Apple Pay'];\n      html = html.replace(/@ICON/g, 'logoApplePay');\n      break;\n    case paymentOptionIDs.card:\n      paymentSource = this.strings.Card;\n      html = html.replace(/@ICON/g, 'iconCardFront');\n      html = html.replace(/@CLASSNAME/g, 'braintree-icon--bordered');\n      break;\n    case paymentOptionIDs.googlePay:\n      paymentSource = this.strings['Google Pay'];\n      html = html.replace(/@ICON/g, 'logoGooglePay');\n      break;\n    case paymentOptionIDs.paypal:\n      paymentSource = this.strings.PayPal;\n      html = html.replace(/@ICON/g, 'logoPayPal');\n      break;\n    case paymentOptionIDs.paypalCredit:\n      paymentSource = this.strings['PayPal Credit'];\n      html = html.replace(/@ICON/g, 'logoPayPalCredit');\n      break;\n    case paymentOptionIDs.venmo:\n      paymentSource = this.strings.Venmo;\n      html = html.replace(/@ICON/g, 'logoVenmo');\n      break;\n    default:\n      break;\n  }\n\n  html = html.replace(/@OPTION_LABEL/g, this._generateOptionLabel(paymentSource));\n  html = html.replace(/@OPTION_TITLE/g, paymentSource);\n  html = html.replace(/@CLASSNAME/g, '');\n\n  div.innerHTML = html;\n\n  addSelectionEventHandler(div, clickHandler);\n\n  this.container.appendChild(div);\n  this.elements[paymentOptionID] = {\n    div: div,\n    clickHandler: clickHandler\n  };\n};\n\nPaymentOptionsView.prototype._generateOptionLabel = function (paymentSourceString) {\n  return this.strings.payingWith.replace('{{paymentSource}}', paymentSourceString);\n};\n\nmodule.exports = PaymentOptionsView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"../lib/analytics\":201,\"./base-view\":254}],260:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar BaseView = require('../base-view');\nvar btApplePay = require('braintree-web/apple-pay');\nvar DropinError = require('../../lib/dropin-error');\nvar isHTTPS = require('../../lib/is-https');\nvar Promise = require('../../lib/promise');\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\n\nvar DEFAULT_APPLE_PAY_SESSION_VERSION = 2;\n\nfunction ApplePayView() {\n  BaseView.apply(this, arguments);\n}\n\nApplePayView.prototype = Object.create(BaseView.prototype);\nApplePayView.prototype.constructor = ApplePayView;\nApplePayView.ID = ApplePayView.prototype.ID = paymentOptionIDs.applePay;\n\nApplePayView.prototype.initialize = function () {\n  var self = this;\n\n  self.applePayConfiguration = assign({}, self.model.merchantConfiguration.applePay);\n  self.applePaySessionVersion = self.applePayConfiguration.applePaySessionVersion || DEFAULT_APPLE_PAY_SESSION_VERSION;\n\n  delete self.applePayConfiguration.applePaySessionVersion;\n\n  return btApplePay.create({client: this.client}).then(function (applePayInstance) {\n    self.buttonDiv = self.getElementById('apple-pay-button');\n\n    self.applePayInstance = applePayInstance;\n\n    self.buttonDiv.onclick = self._showPaymentSheet.bind(self);\n    self.buttonDiv.style['-apple-pay-button-style'] = self.model.merchantConfiguration.applePay.buttonStyle || 'black';\n\n    self.model.asyncDependencyReady(ApplePayView.ID);\n  }).catch(function (err) {\n    self.model.asyncDependencyFailed({\n      view: self.ID,\n      error: new DropinError(err)\n    });\n  });\n};\n\nApplePayView.prototype._showPaymentSheet = function () {\n  var self = this;\n  var request, session;\n\n  if (this._sessionInProgress) {\n    return false;\n  }\n\n  this._sessionInProgress = true;\n\n  request = this.applePayInstance.createPaymentRequest(this.applePayConfiguration.paymentRequest);\n  session = new global.ApplePaySession(self.applePaySessionVersion, request);\n\n  session.onvalidatemerchant = function (event) {\n    self.applePayInstance.performValidation({\n      validationURL: event.validationURL,\n      displayName: self.applePayConfiguration.displayName\n    }).then(function (validationData) {\n      session.completeMerchantValidation(validationData);\n    }).catch(function (validationErr) {\n      self.model.reportError(validationErr);\n      self._sessionInProgress = false;\n      session.abort();\n    });\n  };\n\n  session.onpaymentauthorized = function (event) {\n    self.applePayInstance.tokenize({\n      token: event.payment.token\n    }).then(function (payload) {\n      self._sessionInProgress = false;\n      session.completePayment(global.ApplePaySession.STATUS_SUCCESS);\n      payload.rawPaymentData = event.payment;\n      self.model.addPaymentMethod(payload);\n    }).catch(function (tokenizeErr) {\n      self.model.reportError(tokenizeErr);\n      self._sessionInProgress = false;\n      session.completePayment(global.ApplePaySession.STATUS_FAILURE);\n    });\n  };\n\n  session.oncancel = function () {\n    self._sessionInProgress = false;\n  };\n\n  session.begin();\n\n  return false;\n};\n\nApplePayView.prototype.updateConfiguration = function (key, value) {\n  this.applePayConfiguration[key] = value;\n};\n\nApplePayView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n  var applePayEnabled = gatewayConfiguration.applePayWeb && Boolean(options.merchantConfiguration.applePay);\n  var applePaySessionVersion = options.merchantConfiguration.applePay && options.merchantConfiguration.applePay.applePaySessionVersion;\n  var applePayBrowserSupported;\n\n  applePaySessionVersion = applePaySessionVersion || DEFAULT_APPLE_PAY_SESSION_VERSION;\n\n  if (!applePayEnabled) {\n    return Promise.resolve(false);\n  }\n\n  applePayBrowserSupported = global.ApplePaySession && isHTTPS.isHTTPS();\n\n  if (!applePayBrowserSupported) {\n    return Promise.resolve(false);\n  }\n\n  if (!global.ApplePaySession.supportsVersion(applePaySessionVersion)) {\n    return Promise.resolve(false);\n  }\n\n  return Promise.resolve(Boolean(global.ApplePaySession.canMakePayments()));\n};\n\nmodule.exports = ApplePayView;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/dropin-error\":206,\"../../lib/is-https\":209,\"../../lib/promise\":213,\"../base-view\":254,\"braintree-web/apple-pay\":54}],261:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar analytics = require('../../lib/analytics');\nvar assign = require('../../lib/assign').assign;\nvar browserDetection = require('../../lib/browser-detection');\nvar BaseView = require('../base-view');\nvar btPaypal = require('braintree-web/paypal-checkout');\nvar DropinError = require('../../lib/dropin-error');\nvar constants = require('../../constants');\nvar assets = require('@braintree/asset-loader');\nvar translations = require('../../translations').fiveCharacterLocales;\nvar Promise = require('../../lib/promise');\n\nvar ASYNC_DEPENDENCY_TIMEOUT = 30000;\nvar READ_ONLY_CONFIGURATION_OPTIONS = ['offerCredit', 'locale'];\nvar DEFAULT_CHECKOUTJS_LOG_LEVEL = 'warn';\n\nvar paypalScriptLoadInProgressPromise;\n\nfunction BasePayPalView() {\n  BaseView.apply(this, arguments);\n}\n\nBasePayPalView.prototype = Object.create(BaseView.prototype);\n\nBasePayPalView.prototype.initialize = function () {\n  var asyncDependencyTimeoutHandler;\n  var isCredit = Boolean(this._isPayPalCredit);\n  var setupComplete = false;\n  var self = this;\n  var paypalType = isCredit ? 'paypalCredit' : 'paypal';\n  var paypalConfiguration = this.model.merchantConfiguration[paypalType];\n  var dropinWrapperId = '#braintree--dropin__' + this.model.componentID;\n\n  this.paypalConfiguration = assign({}, paypalConfiguration);\n\n  asyncDependencyTimeoutHandler = setTimeout(function () {\n    self.model.asyncDependencyFailed({\n      view: self.ID,\n      error: new DropinError('There was an error connecting to PayPal.')\n    });\n  }, ASYNC_DEPENDENCY_TIMEOUT);\n\n  return btPaypal.create({client: this.client}).then(function (paypalInstance) {\n    var checkoutJSConfiguration;\n    var buttonSelector = '[data-braintree-id=\"paypal-button\"]';\n    var environment = self.client.getConfiguration().gatewayConfiguration.environment === 'production' ? 'production' : 'sandbox';\n    var locale = self.model.merchantConfiguration.locale;\n\n    self.paypalInstance = paypalInstance;\n\n    self.paypalConfiguration.offerCredit = Boolean(isCredit);\n    checkoutJSConfiguration = {\n      env: environment,\n      style: self.paypalConfiguration.buttonStyle || {},\n      commit: self.paypalConfiguration.commit,\n      payment: function () {\n        return paypalInstance.createPayment(self.paypalConfiguration).catch(reportError);\n      },\n      onAuthorize: function (data) {\n        // NEXT_MAJOR_VERSION change out this vaultPayPal property\n        // to something more generic, such as vaultOnTokenization so\n        // all the vault objects can have the same shape (instead\n        // of being specific to PayPal accounts here)\n        var shouldNotVault = self.paypalConfiguration.vault && self.paypalConfiguration.vault.vaultPayPal === false;\n\n        if (shouldNotVault) {\n          data.vault = false;\n        }\n\n        return paypalInstance.tokenizePayment(data).then(function (tokenizePayload) {\n          if (!shouldNotVault && self.paypalConfiguration.flow === 'vault' && !self.model.isGuestCheckout) {\n            tokenizePayload.vaulted = true;\n          }\n          self.model.addPaymentMethod(tokenizePayload);\n        }).catch(reportError);\n      },\n      onError: reportError\n    };\n\n    if (locale && locale in translations) {\n      self.paypalConfiguration.locale = locale;\n      checkoutJSConfiguration.locale = locale;\n    }\n    checkoutJSConfiguration.funding = {\n      disallowed: []\n    };\n\n    Object.keys(global.paypal.FUNDING).forEach(function (key) {\n      if (key === 'PAYPAL' || key === 'CREDIT') {\n        return;\n      }\n      checkoutJSConfiguration.funding.disallowed.push(global.paypal.FUNDING[key]);\n    });\n\n    if (isCredit) {\n      buttonSelector = '[data-braintree-id=\"paypal-credit-button\"]';\n      checkoutJSConfiguration.style.label = 'credit';\n    } else {\n      checkoutJSConfiguration.funding.disallowed.push(global.paypal.FUNDING.CREDIT);\n    }\n\n    buttonSelector = dropinWrapperId + ' ' + buttonSelector;\n\n    return global.paypal.Button.render(checkoutJSConfiguration, buttonSelector).then(function () {\n      self.model.asyncDependencyReady(paypalType);\n      setupComplete = true;\n      clearTimeout(asyncDependencyTimeoutHandler);\n    });\n  }).catch(reportError);\n\n  function reportError(err) {\n    if (setupComplete) {\n      self.model.reportError(err);\n    } else {\n      self.model.asyncDependencyFailed({\n        view: self.ID,\n        error: err\n      });\n      clearTimeout(asyncDependencyTimeoutHandler);\n    }\n  }\n};\n\nBasePayPalView.prototype.requestPaymentMethod = function () {\n  this.model.reportError('paypalButtonMustBeUsed');\n\n  return BaseView.prototype.requestPaymentMethod.call(this);\n};\n\nBasePayPalView.prototype.updateConfiguration = function (key, value) {\n  if (READ_ONLY_CONFIGURATION_OPTIONS.indexOf(key) === -1) {\n    this.paypalConfiguration[key] = value;\n  }\n};\n\nBasePayPalView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n  var merchantPayPalConfig = options.merchantConfiguration.paypal || options.merchantConfiguration.paypalCredit;\n\n  if (!gatewayConfiguration.paypalEnabled) {\n    return Promise.resolve(false);\n  }\n\n  if (browserDetection.isIe9() || browserDetection.isIe10()) {\n    analytics.sendEvent(options.client, options.viewID + '.checkout.js-browser-not-supported');\n\n    return Promise.resolve(false);\n  }\n\n  if (global.paypal && global.paypal.Button) {\n    return Promise.resolve(true);\n  }\n\n  if (paypalScriptLoadInProgressPromise) {\n    return paypalScriptLoadInProgressPromise;\n  }\n\n  paypalScriptLoadInProgressPromise = assets.loadScript({\n    src: constants.CHECKOUT_JS_SOURCE,\n    id: constants.PAYPAL_CHECKOUT_SCRIPT_ID,\n    dataAttributes: {\n      'log-level': merchantPayPalConfig.logLevel || DEFAULT_CHECKOUTJS_LOG_LEVEL\n    }\n  }).then(function () {\n    return Promise.resolve(true);\n  }).catch(function () {\n    return Promise.resolve(false);\n  }).then(function (result) {\n    paypalScriptLoadInProgressPromise = null;\n\n    return Promise.resolve(result);\n  });\n\n  return paypalScriptLoadInProgressPromise;\n};\n\nmodule.exports = BasePayPalView;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../constants\":196,\"../../lib/analytics\":201,\"../../lib/assign\":202,\"../../lib/browser-detection\":203,\"../../lib/dropin-error\":206,\"../../lib/promise\":213,\"../../translations\":237,\"../base-view\":254,\"@braintree/asset-loader\":1,\"braintree-web/paypal-checkout\":138}],262:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\n\nvar BaseView = require('../base-view');\nvar classList = require('@braintree/class-list');\nvar constants = require('../../constants');\nvar DropinError = require('../../lib/dropin-error');\nvar hostedFields = require('braintree-web/hosted-fields');\nvar isUtf8 = require('../../lib/is-utf-8');\nvar transitionHelper = require('../../lib/transition-helper');\nvar Promise = require('../../lib/promise');\n\nvar cardIconHTML = \"<div data-braintree-id=\\\"visa-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-visa\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"master-card-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-master-card\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"unionpay-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-unionpay\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"american-express-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-american-express\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"jcb-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-jcb\\\"></use>\\n    </svg>\\n</div>\\n<!--Elo, Hiper, and Hipercard currently use the generic icon.\\nThe  braintree-hidden class should be removed here once we get icons for these cards-->\\n<div data-braintree-id=\\\"elo-card-icon\\\" class=\\\"braintree-sheet__card-icon braintree-hidden\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-elo\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"hiper-card-icon\\\" class=\\\"braintree-sheet__card-icon braintree-hidden\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-hiper\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"hipercard-card-icon\\\" class=\\\"braintree-sheet__card-icon braintree-hidden\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-hipercard\\\"></use>\\n    </svg>\\n</div>\\n<!-- Remove braintree-hidden class when supportedCardType accurately indicates Diners Club support -->\\n<div data-braintree-id=\\\"diners-club-card-icon\\\" class=\\\"braintree-sheet__card-icon braintree-hidden\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-diners-club\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"discover-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-discover\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"maestro-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-maestro\\\"></use>\\n    </svg>\\n</div>\\n\";\n\nvar PASSTHROUGH_EVENTS = [\n  'empty',\n  // TODO should intercept this event and call tokenize\n  'inputSubmitRequest',\n  'binAvailable'\n];\n\nfunction CardView() {\n  BaseView.apply(this, arguments);\n}\n\nCardView.prototype = Object.create(BaseView.prototype);\nCardView.prototype.constructor = CardView;\nCardView.ID = CardView.prototype.ID = constants.paymentOptionIDs.card;\n\nCardView.prototype.initialize = function () {\n  var cvvFieldGroup, postalCodeFieldGroup, hfOptions;\n  var cardholderNameGroup = this.getElementById('cardholder-name-field-group');\n  var cardIcons = this.getElementById('card-view-icons');\n\n  // If merchant explicty passes a value of `true` for card configuration,\n  // we need to treat it as if no card configuration was passed, and provide\n  // the default configuration\n  if (this.model.merchantConfiguration.card && this.model.merchantConfiguration.card !== true) {\n    this.merchantConfiguration = this.model.merchantConfiguration.card;\n  } else {\n    this.merchantConfiguration = {};\n  }\n  this.merchantConfiguration.vault = this.merchantConfiguration.vault || {};\n  this.hasCardholderName = Boolean(this.merchantConfiguration.cardholderName);\n  this.cardholderNameRequired = this.hasCardholderName && this.merchantConfiguration.cardholderName.required === true;\n  hfOptions = this._generateHostedFieldsOptions();\n\n  cardIcons.innerHTML = cardIconHTML;\n  this._hideUnsupportedCardIcons();\n\n  this.hasCVV = hfOptions.fields.cvv;\n  this.saveCardInput = this.getElementById('save-card-input');\n  this.cardNumberIcon = this.getElementById('card-number-icon');\n  this.cardNumberIconSvg = this.getElementById('card-number-icon-svg');\n  this.cvvIcon = this.getElementById('cvv-icon');\n  this.cvvIconSvg = this.getElementById('cvv-icon-svg');\n  this.cvvLabelDescriptor = this.getElementById('cvv-label-descriptor');\n  this.fieldErrors = {};\n\n  if (!this.hasCardholderName) {\n    cardholderNameGroup.parentNode.removeChild(cardholderNameGroup);\n  }\n\n  if (!this.hasCVV) {\n    cvvFieldGroup = this.getElementById('cvv-field-group');\n    cvvFieldGroup.parentNode.removeChild(cvvFieldGroup);\n  }\n\n  if (!hfOptions.fields.postalCode) {\n    postalCodeFieldGroup = this.getElementById('postal-code-field-group');\n    postalCodeFieldGroup.parentNode.removeChild(postalCodeFieldGroup);\n  }\n\n  if (!this.model.isGuestCheckout && this.merchantConfiguration.vault.allowVaultCardOverride === true) {\n    classList.remove(this.getElementById('save-card-field-group'), 'braintree-hidden');\n  }\n\n  // NEXT_MAJOR_VERSION change out this vaultCard property\n  // to something more generic, such as vaultOnTokenization so\n  // all the vault objects can have the same shape (instead\n  // of being specific to cards here)\n  if (this.merchantConfiguration.vault.vaultCard === false) {\n    this.saveCardInput.checked = false;\n  }\n\n  return hostedFields.create(hfOptions).then(function (hostedFieldsInstance) {\n    this.hostedFieldsInstance = hostedFieldsInstance;\n    this.hostedFieldsInstance.on('blur', this._onBlurEvent.bind(this));\n    this.hostedFieldsInstance.on('cardTypeChange', this._onCardTypeChangeEvent.bind(this));\n    this.hostedFieldsInstance.on('focus', this._onFocusEvent.bind(this));\n    this.hostedFieldsInstance.on('notEmpty', this._onNotEmptyEvent.bind(this));\n    this.hostedFieldsInstance.on('validityChange', this._onValidityChangeEvent.bind(this));\n\n    PASSTHROUGH_EVENTS.forEach(function (eventName) {\n      this.hostedFieldsInstance.on(eventName, function (event) {\n        this.model._emit('card:' + eventName, event);\n      }.bind(this));\n    }.bind(this));\n\n    this.model.asyncDependencyReady(CardView.ID);\n  }.bind(this)).catch(function (err) {\n    this.model.asyncDependencyFailed({\n      view: this.ID,\n      error: err\n    });\n  }.bind(this));\n};\n\nCardView.prototype._sendRequestableEvent = function () {\n  if (!this._isTokenizing) {\n    this.model.setPaymentMethodRequestable({\n      isRequestable: this._validateForm(),\n      type: constants.paymentMethodTypes.card\n    });\n  }\n};\n\nCardView.prototype._generateHostedFieldsOptions = function () {\n  var challenges = this.client.getConfiguration().gatewayConfiguration.challenges;\n  var hasCVVChallenge = challenges.indexOf('cvv') !== -1;\n  var hasPostalCodeChallenge = challenges.indexOf('postal_code') !== -1;\n  var overrides = this.merchantConfiguration.overrides;\n  var options = {\n    client: this.client,\n    fields: {\n      cardholderName: {\n        container: this._getFieldContainer('cardholder-name'),\n        placeholder: this.strings.cardholderNamePlaceholder\n      },\n      number: {\n        container: this._getFieldContainer('number'),\n        placeholder: generateCardNumberPlaceholder()\n      },\n      expirationDate: {\n        container: this._getFieldContainer('expiration'),\n        placeholder: this.strings.expirationDatePlaceholder\n      },\n      cvv: {\n        container: this._getFieldContainer('cvv'),\n        placeholder: addBullets(3)\n      },\n      postalCode: {\n        container: this._getFieldContainer('postal-code')\n      }\n    },\n    styles: {\n      input: {\n        'font-size': '16px',\n        'font-family': '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif',\n        color: '#000'\n      },\n      ':focus': {\n        color: 'black'\n      },\n      '::-webkit-input-placeholder': {\n        color: '#6a6a6a'\n      },\n      ':-moz-placeholder': {\n        color: '#6a6a6a'\n      },\n      '::-moz-placeholder': {\n        color: '#6a6a6a'\n      },\n      ':-ms-input-placeholder ': {\n        color: '#6a6a6a'\n      },\n      'input::-ms-clear': {\n        color: 'transparent'\n      }\n    }\n  };\n\n  if (!this.hasCardholderName) {\n    delete options.fields.cardholderName;\n  }\n\n  if (!hasCVVChallenge) {\n    delete options.fields.cvv;\n  }\n\n  if (!hasPostalCodeChallenge) {\n    delete options.fields.postalCode;\n  }\n\n  if (!overrides) { return options; }\n\n  if (overrides.fields) {\n    if (overrides.fields.cvv && typeof overrides.fields.cvv.placeholder !== 'undefined') {\n      this._hasCustomCVVPlaceholder = true;\n    }\n\n    Object.keys(overrides.fields).forEach(function (field) {\n      if ((field === 'cvv' || field === 'postalCode') && overrides.fields[field] === null) {\n        delete options.fields[field];\n\n        return;\n      }\n\n      if (!options.fields[field]) {\n        return;\n      }\n\n      assign(options.fields[field], overrides.fields[field], {\n        selector: options.fields[field].selector\n      });\n    });\n  }\n\n  if (overrides.styles) {\n    Object.keys(overrides.styles).forEach(function (style) {\n      if (overrides.styles[style] === null) {\n        delete options.styles[style];\n\n        return;\n      } else if (typeof overrides.styles[style] === 'string') {\n        // it's a class name, and should override the configured styles entirely\n        options.styles[style] = overrides.styles[style];\n\n        return;\n      }\n\n      normalizeStyles(overrides.styles[style]);\n      options.styles[style] = options.styles[style] || {};\n\n      assign(options.styles[style], overrides.styles[style]);\n    });\n  }\n\n  return options;\n};\n\nCardView.prototype._validateForm = function (showFieldErrors) {\n  var card, cardType, cardTypeSupported, state;\n  var isValid = true;\n  var supportedCardTypes = this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes;\n\n  if (!this.hostedFieldsInstance) {\n    return false;\n  }\n\n  state = this.hostedFieldsInstance.getState();\n\n  Object.keys(state.fields).forEach(function (key) {\n    var field = state.fields[key];\n\n    if (!showFieldErrors && !isValid) {\n      // return early if form is already invalid\n      // and we don't need to display all field errors\n      return;\n    }\n\n    if (field.isEmpty) {\n      if (!this.cardholderNameRequired && key === 'cardholderName') {\n        isValid = true;\n      } else {\n        isValid = false;\n\n        if (showFieldErrors) {\n          this.showFieldError(key, this.strings['fieldEmptyFor' + capitalize(key)]);\n        }\n      }\n    } else if (!field.isValid) {\n      isValid = false;\n\n      if (showFieldErrors) {\n        this.showFieldError(key, this.strings['fieldInvalidFor' + capitalize(key)]);\n      }\n    }\n  }.bind(this));\n\n  if (state.fields.number.isValid) {\n    card = state.cards[0];\n    cardType = card && constants.configurationCardTypes[card.type];\n    cardTypeSupported = cardType && supportedCardTypes.indexOf(cardType) !== -1;\n\n    if (!cardTypeSupported) {\n      isValid = false;\n\n      if (showFieldErrors) {\n        this.showFieldError('number', this.strings.unsupportedCardTypeError);\n      }\n    }\n  }\n\n  return isValid;\n};\n\nCardView.prototype.getPaymentMethod = function () { // eslint-disable-line consistent-return\n  var formIsValid = this._validateForm();\n\n  if (formIsValid) {\n    return {\n      type: constants.paymentMethodTypes.card\n    };\n  }\n};\n\nCardView.prototype.tokenize = function () {\n  var transitionCallback;\n  var self = this;\n  var state = self.hostedFieldsInstance.getState();\n  var tokenizeOptions = {\n    vault: this._shouldVault()\n  };\n\n  this.model.clearError();\n\n  if (!this._validateForm(true)) {\n    self.model.reportError('hostedFieldsFieldsInvalidError');\n    self.allowUserAction();\n\n    return Promise.reject(new DropinError(constants.errors.NO_PAYMENT_METHOD_ERROR));\n  }\n\n  if (!this.cardholderNameRequired && state.fields.cardholderName && state.fields.cardholderName.isEmpty) {\n    tokenizeOptions.fieldsToTokenize = Object.keys(state.fields).filter(function (field) {\n      return field !== 'cardholderName';\n    });\n  }\n\n  self._isTokenizing = true;\n\n  return self.hostedFieldsInstance.tokenize(tokenizeOptions).then(function (payload) {\n    var retainCardFields = self.merchantConfiguration.clearFieldsAfterTokenization === false;\n\n    if (!retainCardFields) {\n      Object.keys(state.fields).forEach(function (field) {\n        self.hostedFieldsInstance.clear(field);\n      });\n    }\n\n    if (self._shouldVault()) {\n      payload.vaulted = true;\n    }\n\n    return new Promise(function (resolve) {\n      transitionCallback = function () {\n        // Wait for braintree-sheet--tokenized class to be added in IE 9\n        // before attempting to remove it\n        setTimeout(function () {\n          self.model.addPaymentMethod(payload);\n          resolve(payload);\n          classList.remove(self.element, 'braintree-sheet--tokenized');\n        }, 0);\n      };\n\n      transitionHelper.onTransitionEnd(self.element, 'max-height', transitionCallback);\n\n      setTimeout(function () {\n        self.allowUserAction();\n        self._isTokenizing = false;\n      }, constants.CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT);\n\n      classList.add(self.element, 'braintree-sheet--tokenized');\n    });\n  }).catch(function (err) {\n    self._isTokenizing = false;\n    // this is a little magical, but if the code property exists\n    // in the translations with the word Error appended to the end,\n    // then reportError will automatically print that translation.\n    // See https://github.com/braintree/braintree-web-drop-in/blob/6ecba73f2f16e8b7ae2119702ac162a1a985908e/src/views/main-view.js#L255-L256\n    self.model.reportError(err);\n    self.allowUserAction();\n\n    return Promise.reject(new DropinError({\n      message: constants.errors.NO_PAYMENT_METHOD_ERROR,\n      braintreeWebError: err\n    }));\n  });\n};\n\nCardView.prototype.showFieldError = function (field, errorMessage) {\n  var fieldError;\n  var fieldGroup = this.getElementById(camelCaseToKebabCase(field) + '-field-group');\n  var input = fieldGroup.querySelector('input');\n\n  if (!this.fieldErrors.hasOwnProperty(field)) {\n    this.fieldErrors[field] = this.getElementById(camelCaseToKebabCase(field) + '-field-error');\n  }\n\n  classList.add(fieldGroup, 'braintree-form__field-group--has-error');\n\n  fieldError = this.fieldErrors[field];\n  fieldError.innerHTML = errorMessage;\n\n  if (input) {\n    input.setAttribute('aria-invalid', true);\n  } else {\n    this.hostedFieldsInstance.setAttribute({\n      field: field,\n      attribute: 'aria-invalid',\n      value: true\n    });\n    this.hostedFieldsInstance.setMessage({\n      field: field,\n      message: errorMessage\n    });\n  }\n};\n\nCardView.prototype.hideFieldError = function (field) {\n  var fieldGroup = this.getElementById(camelCaseToKebabCase(field) + '-field-group');\n  var input = fieldGroup.querySelector('input');\n\n  if (!this.fieldErrors.hasOwnProperty(field)) {\n    this.fieldErrors[field] = this.getElementById(camelCaseToKebabCase(field) + '-field-error');\n  }\n\n  classList.remove(fieldGroup, 'braintree-form__field-group--has-error');\n\n  if (input) {\n    input.removeAttribute('aria-invalid');\n  } else {\n    this.hostedFieldsInstance.removeAttribute({\n      field: field,\n      attribute: 'aria-invalid'\n    });\n    this.hostedFieldsInstance.setMessage({\n      field: field,\n      message: ''\n    });\n  }\n};\n\nCardView.prototype.teardown = function () {\n  return this.hostedFieldsInstance.teardown();\n};\n\nCardView.prototype._shouldVault = function () {\n  return !this.model.isGuestCheckout && this.saveCardInput.checked;\n};\n\nCardView.prototype._getFieldContainer = function (field) {\n  // we committed to not changing the data-braintree-id fields\n  // so we need to convert this field to the id used in the HTML\n  if (field === 'expiration') {\n    field = 'expiration-date';\n  }\n\n  return this.getElementById(field + '-field-group').querySelector('.braintree-form__hosted-field');\n};\n\nCardView.prototype._onBlurEvent = function (event) {\n  var field = event.fields[event.emittedBy];\n  var fieldGroup = this.getElementById(camelCaseToKebabCase(event.emittedBy) + '-field-group');\n\n  classList.remove(fieldGroup, 'braintree-form__field-group--is-focused');\n\n  if (field.isPotentiallyValid) {\n    this.hideFieldError(event.emittedBy);\n  }\n\n  if (this._shouldApplyFieldEmptyError(event.emittedBy, field)) {\n    this.showFieldError(event.emittedBy, this.strings['fieldEmptyFor' + capitalize(event.emittedBy)]);\n  } else if (!field.isEmpty && !field.isValid) {\n    this.showFieldError(event.emittedBy, this.strings['fieldInvalidFor' + capitalize(event.emittedBy)]);\n  } else if (event.emittedBy === 'number' && !this._isCardTypeSupported(event.cards[0])) {\n    this.showFieldError('number', this.strings.unsupportedCardTypeError);\n  }\n\n  this.model._emit('card:blur', event);\n\n  setTimeout(function () {\n    // when focusing on a field by clicking the label,\n    // we need to wait a bit for the iframe to be\n    // focused properly before applying validations\n    if (this._shouldApplyFieldEmptyError(event.emittedBy, field)) {\n      this.showFieldError(event.emittedBy, this.strings['fieldEmptyFor' + capitalize(event.emittedBy)]);\n    }\n  }.bind(this), 150);\n};\n\nCardView.prototype._onCardTypeChangeEvent = function (event) {\n  var cardType;\n  var cardNumberHrefLink = '#iconCardFront';\n  var cvvHrefLink = '#iconCVVBack';\n  var cvvDescriptor = this.strings.cvvThreeDigitLabelSubheading;\n  var cvvPlaceholder = addBullets(3);\n  var numberFieldGroup = this.getElementById('number-field-group');\n\n  if (event.cards.length === 1) {\n    cardType = event.cards[0].type;\n    cardNumberHrefLink = '#icon-' + cardType;\n    if (cardType === 'american-express') {\n      cvvHrefLink = '#iconCVVFront';\n      cvvDescriptor = this.strings.cvvFourDigitLabelSubheading;\n      cvvPlaceholder = addBullets(4);\n    }\n    // Keep icon visible when field is not focused\n    classList.add(numberFieldGroup, 'braintree-form__field-group--card-type-known');\n  } else {\n    classList.remove(numberFieldGroup, 'braintree-form__field-group--card-type-known');\n  }\n\n  // if the number field emitted the card change event fires\n  // and the card type is supported, we need to clear out the errors\n  // field in case that there was a \"card type is unsupported\" error\n  if (event.emittedBy === 'number' && this._isCardTypeSupported(event.cards[0])) {\n    this.hideFieldError(event.emittedBy);\n  }\n\n  this.cardNumberIconSvg.setAttribute('xlink:href', cardNumberHrefLink);\n\n  if (this.hasCVV) {\n    this.cvvIconSvg.setAttribute('xlink:href', cvvHrefLink);\n    this.cvvLabelDescriptor.innerHTML = cvvDescriptor;\n\n    if (!this._hasCustomCVVPlaceholder) {\n      this.hostedFieldsInstance.setAttribute({\n        field: 'cvv',\n        attribute: 'placeholder',\n        value: cvvPlaceholder\n      });\n    }\n  }\n\n  this.model._emit('card:cardTypeChange', event);\n};\n\nCardView.prototype._onFocusEvent = function (event) {\n  var fieldGroup = this.getElementById(camelCaseToKebabCase(event.emittedBy) + '-field-group');\n\n  classList.add(fieldGroup, 'braintree-form__field-group--is-focused');\n\n  this.model._emit('card:focus', event);\n};\n\nCardView.prototype._onNotEmptyEvent = function (event) {\n  this.hideFieldError(event.emittedBy);\n\n  this.model._emit('card:notEmpty', event);\n};\n\nCardView.prototype._onValidityChangeEvent = function (event) {\n  var isValid;\n  var field = event.fields[event.emittedBy];\n\n  if (event.emittedBy === 'number' && event.cards[0]) {\n    isValid = field.isValid && this._isCardTypeSupported(event.cards[0]);\n  } else {\n    isValid = field.isValid;\n  }\n\n  classList.toggle(field.container, 'braintree-form__field--valid', isValid);\n\n  if (field.isPotentiallyValid) {\n    this.hideFieldError(event.emittedBy);\n  }\n\n  this._sendRequestableEvent();\n\n  this.model._emit('card:validityChange', event);\n};\n\nCardView.prototype.requestPaymentMethod = function () {\n  this.preventUserAction();\n\n  return this.tokenize();\n};\n\nCardView.prototype.onSelection = function () {\n  if (!this.hostedFieldsInstance) {\n    return;\n  }\n\n  setTimeout(function () {\n    if (this.hasCardholderName) {\n      this.hostedFieldsInstance.focus('cardholderName');\n    } else {\n      this.hostedFieldsInstance.focus('number');\n    }\n  }.bind(this), 50);\n\n  this._sendRequestableEvent();\n};\n\nCardView.prototype._hideUnsupportedCardIcons = function () {\n  var supportedCardTypes = this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes;\n\n  Object.keys(constants.configurationCardTypes).forEach(function (paymentMethodCardType) {\n    var cardIcon;\n    var configurationCardType = constants.configurationCardTypes[paymentMethodCardType];\n\n    if (supportedCardTypes.indexOf(configurationCardType) === -1) {\n      cardIcon = this.getElementById(paymentMethodCardType + '-card-icon');\n      classList.add(cardIcon, 'braintree-hidden');\n    }\n  }.bind(this));\n};\n\nCardView.prototype._isCardTypeSupported = function (card) {\n  var cardType = card && card.type;\n  var configurationCardType = constants.configurationCardTypes[cardType];\n  var supportedCardTypes = this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes;\n\n  return supportedCardTypes.indexOf(configurationCardType) !== -1;\n};\n\nCardView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n  var disabledByMerchant = options.merchantConfiguration.card === false;\n\n  return Promise.resolve(!disabledByMerchant && gatewayConfiguration.creditCards.supportedCardTypes.length > 0);\n};\n\nCardView.prototype._shouldApplyFieldEmptyError = function (fieldId, field) {\n  if (!field.isEmpty) {\n    return false;\n  }\n\n  if (fieldId === 'cardholderName' && !this.cardholderNameRequired) {\n    return false;\n  }\n\n  return isCardViewElement();\n};\n\nfunction isCardViewElement() {\n  var activeId = document.activeElement && document.activeElement.id;\n  var isHostedFieldsElement = document.activeElement instanceof HTMLIFrameElement && activeId.indexOf('braintree-hosted-field') !== -1;\n\n  return isHostedFieldsElement;\n}\n\nfunction camelCaseToKebabCase(string) {\n  return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction capitalize(string) {\n  return string[0].toUpperCase() + string.substr(1);\n}\n\nfunction normalizeStyles(styles) {\n  Object.keys(styles).forEach(function (style) {\n    var transformedKeyName = camelCaseToKebabCase(style);\n\n    styles[transformedKeyName] = styles[style];\n  });\n}\n\nfunction addBullets(number) {\n  var bulletCharacter = isUtf8() ? '•' : '*';\n\n  return Array(number + 1).join(bulletCharacter);\n}\n\nfunction generateCardNumberPlaceholder() {\n  var four = addBullets(4);\n\n  return [four, four, four, four].join(' ');\n}\n\nmodule.exports = CardView;\n\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/dropin-error\":206,\"../../lib/is-utf-8\":210,\"../../lib/promise\":213,\"../../lib/transition-helper\":217,\"../base-view\":254,\"@braintree/class-list\":40,\"braintree-web/hosted-fields\":86}],263:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar BaseView = require('../base-view');\nvar btGooglePay = require('braintree-web/google-payment');\nvar DropinError = require('../../lib/dropin-error');\nvar constants = require('../../constants');\nvar assets = require('@braintree/asset-loader');\nvar Promise = require('../../lib/promise');\nvar analytics = require('../../lib/analytics');\n\nfunction GooglePayView() {\n  BaseView.apply(this, arguments);\n}\n\nGooglePayView.prototype = Object.create(BaseView.prototype);\nGooglePayView.prototype.constructor = GooglePayView;\nGooglePayView.ID = GooglePayView.prototype.ID = constants.paymentOptionIDs.googlePay;\n\nGooglePayView.prototype.initialize = function () {\n  var self = this;\n  var buttonOptions, googlePayVersion, merchantId;\n\n  self.googlePayConfiguration = assign({}, self.model.merchantConfiguration.googlePay);\n  googlePayVersion = self.googlePayConfiguration.googlePayVersion;\n  merchantId = self.googlePayConfiguration.merchantId;\n\n  buttonOptions = assign({\n    buttonType: 'short'\n  }, self.googlePayConfiguration.button, {\n    onClick: function (event) {\n      event.preventDefault();\n\n      self.preventUserAction();\n\n      self.tokenize().then(function () {\n        self.allowUserAction();\n      });\n    }\n  });\n\n  delete self.googlePayConfiguration.googlePayVersion;\n  delete self.googlePayConfiguration.merchantId;\n  delete self.googlePayConfiguration.button;\n\n  return btGooglePay.create({\n    client: self.client,\n    googlePayVersion: googlePayVersion,\n    googleMerchantId: merchantId\n  }).then(function (googlePayInstance) {\n    self.googlePayInstance = googlePayInstance;\n    self.paymentsClient = createPaymentsClient(self.client);\n  }).then(function () {\n    var buttonContainer = self.getElementById('google-pay-button');\n\n    buttonContainer.appendChild(self.paymentsClient.createButton(buttonOptions));\n\n    self.model.asyncDependencyReady(GooglePayView.ID);\n  }).catch(function (err) {\n    self.model.asyncDependencyFailed({\n      view: self.ID,\n      error: new DropinError(err)\n    });\n  });\n};\n\nGooglePayView.prototype.tokenize = function () {\n  var self = this;\n  var paymentDataRequest = self.googlePayInstance.createPaymentDataRequest(self.googlePayConfiguration);\n  var rawPaymentData;\n\n  return self.paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n    rawPaymentData = paymentData;\n\n    return self.googlePayInstance.parseResponse(paymentData);\n  }).then(function (tokenizePayload) {\n    tokenizePayload.rawPaymentData = rawPaymentData;\n    self.model.addPaymentMethod(tokenizePayload);\n  }).catch(function (err) {\n    var reportedError = err;\n\n    if (err.statusCode === 'DEVELOPER_ERROR') {\n      console.error(err); // eslint-disable-line no-console\n      reportedError = 'developerError';\n    } else if (err.statusCode === 'CANCELED') {\n      analytics.sendEvent(self.client, 'googlepay.loadPaymentData.canceled');\n\n      return;\n    } else if (err.statusCode) {\n      analytics.sendEvent(self.client, 'googlepay.loadPaymentData.failed');\n    }\n\n    self.model.reportError(reportedError);\n  });\n};\n\nGooglePayView.prototype.updateConfiguration = function (key, value) {\n  this.googlePayConfiguration[key] = value;\n};\n\nGooglePayView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n\n  if (!(gatewayConfiguration.androidPay && Boolean(options.merchantConfiguration.googlePay))) {\n    return Promise.resolve(false);\n  }\n\n  return Promise.resolve().then(function () {\n    if (!(global.google && global.google.payments && global.google.payments.api && global.google.payments.api.PaymentsClient)) {\n      return assets.loadScript({\n        id: constants.GOOGLE_PAYMENT_SCRIPT_ID,\n        src: constants.GOOGLE_PAYMENT_SOURCE\n      });\n    }\n\n    return Promise.resolve();\n  }).then(function () {\n    var paymentsClient = createPaymentsClient(options.client);\n\n    return paymentsClient.isReadyToPay({\n      allowedPaymentMethods: ['CARD', 'TOKENIZED_CARD']\n    });\n  }).then(function (response) {\n    return Boolean(response.result);\n  });\n};\n\nfunction createPaymentsClient(client) {\n  return new global.google.payments.api.PaymentsClient({\n    environment: client.getConfiguration().gatewayConfiguration.environment === 'production' ? 'PRODUCTION' : 'TEST'\n  });\n}\n\nmodule.exports = GooglePayView;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../constants\":196,\"../../lib/analytics\":201,\"../../lib/assign\":202,\"../../lib/dropin-error\":206,\"../../lib/promise\":213,\"../base-view\":254,\"@braintree/asset-loader\":1,\"braintree-web/google-payment\":79}],264:[function(require,module,exports){\n'use strict';\n\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\n\nvar result = {};\n\nresult[paymentOptionIDs.applePay] = require('./apple-pay-view');\nresult[paymentOptionIDs.card] = require('./card-view');\nresult[paymentOptionIDs.googlePay] = require('./google-pay-view');\nresult[paymentOptionIDs.paypal] = require('./paypal-view');\nresult[paymentOptionIDs.paypalCredit] = require('./paypal-credit-view');\nresult[paymentOptionIDs.venmo] = require('./venmo-view');\n\nmodule.exports = result;\n\n},{\"../../constants\":196,\"./apple-pay-view\":260,\"./card-view\":262,\"./google-pay-view\":263,\"./paypal-credit-view\":265,\"./paypal-view\":266,\"./venmo-view\":267}],265:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar Promise = require('../../lib/promise');\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\nvar BasePayPalView = require('./base-paypal-view');\n\nfunction PayPalCreditView() {\n  BasePayPalView.apply(this, arguments);\n\n  this._isPayPalCredit = true;\n}\n\nPayPalCreditView.prototype = Object.create(BasePayPalView.prototype);\nPayPalCreditView.prototype.constructor = PayPalCreditView;\nPayPalCreditView.ID = PayPalCreditView.prototype.ID = paymentOptionIDs.paypalCredit;\n\nPayPalCreditView.isEnabled = function (options) {\n  if (!options.merchantConfiguration.paypalCredit) {\n    return Promise.resolve(false);\n  }\n\n  return BasePayPalView.isEnabled(assign({\n    viewID: PayPalCreditView.ID\n  }, options));\n};\nmodule.exports = PayPalCreditView;\n\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/promise\":213,\"./base-paypal-view\":261}],266:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar Promise = require('../../lib/promise');\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\nvar BasePayPalView = require('./base-paypal-view');\n\nfunction PayPalView() {\n  BasePayPalView.apply(this, arguments);\n}\n\nPayPalView.prototype = Object.create(BasePayPalView.prototype);\nPayPalView.prototype.constructor = PayPalView;\nPayPalView.ID = PayPalView.prototype.ID = paymentOptionIDs.paypal;\n\nPayPalView.isEnabled = function (options) {\n  if (!options.merchantConfiguration.paypal) {\n    return Promise.resolve(false);\n  }\n\n  return BasePayPalView.isEnabled(assign({\n    viewID: PayPalView.ID\n  }, options));\n};\n\nmodule.exports = PayPalView;\n\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/promise\":213,\"./base-paypal-view\":261}],267:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar BaseView = require('../base-view');\nvar btVenmo = require('braintree-web/venmo');\nvar DropinError = require('../../lib/dropin-error');\nvar Promise = require('../../lib/promise');\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\n\nfunction VenmoView() {\n  BaseView.apply(this, arguments);\n}\n\nVenmoView.prototype = Object.create(BaseView.prototype);\nVenmoView.prototype.constructor = VenmoView;\nVenmoView.ID = VenmoView.prototype.ID = paymentOptionIDs.venmo;\n\nVenmoView.prototype.initialize = function () {\n  var self = this;\n  var venmoConfiguration = assign({}, self.model.merchantConfiguration.venmo, {client: this.client});\n\n  return btVenmo.create(venmoConfiguration).then(function (venmoInstance) {\n    self.venmoInstance = venmoInstance;\n\n    if (!self.venmoInstance.hasTokenizationResult()) {\n      return Promise.resolve();\n    }\n\n    return self.venmoInstance.tokenize().then(function (payload) {\n      self.model.reportAppSwitchPayload(payload);\n    }).catch(function (err) {\n      if (self._isIgnorableError(err)) {\n        return;\n      }\n      self.model.reportAppSwitchError(paymentOptionIDs.venmo, err);\n    });\n  }).then(function () {\n    var button = self.getElementById('venmo-button');\n\n    button.addEventListener('click', function (event) {\n      event.preventDefault();\n\n      self.preventUserAction();\n\n      return self.venmoInstance.tokenize().then(function (payload) {\n        self.model.addPaymentMethod(payload);\n      }).catch(function (tokenizeErr) {\n        if (self._isIgnorableError(tokenizeErr)) {\n          return;\n        }\n\n        self.model.reportError(tokenizeErr);\n      }).then(function () {\n        self.allowUserAction();\n      });\n    });\n\n    self.model.asyncDependencyReady(VenmoView.ID);\n  }).catch(function (err) {\n    self.model.asyncDependencyFailed({\n      view: self.ID,\n      error: new DropinError(err)\n    });\n  });\n};\n\nVenmoView.prototype._isIgnorableError = function (error) {\n  // customer cancels the flow in the app\n  // we don't emit an error because the customer\n  // initiated that action\n  return error.code === 'VENMO_APP_CANCELED' || error.code === 'VENMO_DESKTOP_CANCELED';\n};\n\nVenmoView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n  var venmoEnabled = gatewayConfiguration.payWithVenmo && Boolean(options.merchantConfiguration.venmo);\n\n  if (!venmoEnabled) {\n    return Promise.resolve(false);\n  }\n\n  return Promise.resolve(btVenmo.isBrowserSupported(options.merchantConfiguration.venmo));\n};\n\nmodule.exports = VenmoView;\n\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/dropin-error\":206,\"../../lib/promise\":213,\"../base-view\":254,\"braintree-web/venmo\":159}]},{},[199])(199)\n});\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(118)))\n\n/***/ }),\n\n/***/ 1492:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<h1 class=\\\"page-header\\\">\\n    {{'SUBSCRIPTION.TITLE' | translate:lang}}\\n</h1>\\n<div class=\\\"panel-body subscription\\\">\\n    <div class=\\\"sub-wizard clearfix\\\" *ngIf=\\\"!subscriptionFinished\\\">\\n        <ol class=\\\"row wizard-steps clearfix clickable\\\" role=\\\"tablist\\\">\\n            <li class=\\\"col-md-6\\\" role=\\\"tab\\\" aria-selected=\\\"true\\\" [ngClass]=\\\"{active:currentStep == 1}\\\" (click)=\\\"goToStep(1)\\\">\\n                <span class=\\\"label badge-inverse\\\">1</span>\\n                <a href=\\\"javascript:;\\\">{{'SUBSCRIPTION.STEPS.STEP_1.TITLE' | translate:lang}}</a>\\n                <a href=\\\"javascript:;\\\"><small>{{'SUBSCRIPTION.STEPS.STEP_1.SUBTITLE' | translate:lang}}</small></a>\\n            </li>\\n            <li class=\\\"col-md-6\\\" role=\\\"tab\\\" aria-selected=\\\"false\\\" [ngClass]=\\\"{active:currentStep == 2}\\\" (click)=\\\"goToStep(2)\\\">\\n                <span class=\\\"label badge-inverse\\\">2</span>\\n                <a href=\\\"javascript:;\\\">{{'SUBSCRIPTION.STEPS.STEP_2.TITLE' | translate:lang}}</a>\\n                <a href=\\\"javascript:;\\\"><small>{{'SUBSCRIPTION.STEPS.STEP_2.SUBTITLE' | translate:lang}}</small></a>\\n            </li>\\n        </ol>\\n        <!-- begin wizard step-1 -->\\n        <div class=\\\"row row-eq-height\\\" [hidden]=\\\"currentStep != 1\\\">\\n            <div class=\\\"col-md-6\\\">\\n                <div class=\\\"well\\\">\\n                    <fieldset>\\n                        <legend class=\\\"width-full\\\">{{'SUBSCRIPTION.STEPS.STEP_1.SECTION_1.TITLE' | translate:lang}}</legend>\\n                        <div class=\\\"plan\\\">\\n                            <div class=\\\"inner-box selected-full\\\">\\n                                <div class=\\\"plan-header text-center\\\">\\n                                    <h3 class=\\\"plan-title\\\">{{subscriptionOrder?.product_plan.name}}</h3>\\n                                    <h2 class=\\\"plan-price\\\">\\n                                        <span>{{subscriptionOrder?.product_plan.base_price.gross | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}} / {{ 'PLAN_CARROUSEL.MONTH' | translate:lang }}</span>\\n                                    </h2>\\n                                </div>\\n\\n                                <ul class=\\\"plan-list text-center\\\">\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.level <= 1\\\">\\n                                        <span>Basic player for testing (Web)</span>\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.level > 1\\\">\\n                                        <span>Player for commercial use</span>\\n                                        <span>(Web, iOS, Android)</span>\\n                                    </li>\\n                                    <li *ngIf=\\\"!subscriptionOrder?.product_plan.sla_info || subscriptionOrder?.product_plan.sla_info == 'none'\\\">\\n                                        Support (not guaranteed)\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.sla_info && subscriptionOrder?.product_plan.sla_info != 'none'\\\">\\n                                        Support: {{subscriptionOrder?.product_plan.sla_info}}\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan?.statistics_type\\\">\\n                                        {{ 'PLAN_CARROUSEL.EXTRA.STATS' | translate:lang }}: {{ subscriptionOrder?.product_plan?.statistics_type }}\\n                                        <span *ngIf=\\\"subscriptionOrder?.product_plan?.statistics_type == 'basic'\\\"><br/>(audience stats only)</span>\\n                                        <span *ngIf=\\\"subscriptionOrder?.product_plan?.statistics_type == 'extended'\\\"><br/>(audience, geo, tech, realtime analytics, engagement rate)</span>\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.has_ads_support\\\">\\n                                        {{ 'PLAN_CARROUSEL.EXTRA.ADS' | translate:lang }}\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.has_drm_support\\\">\\n                                        {{ 'PLAN_CARROUSEL.EXTRA.DRM' | translate:lang }}\\n                                    </li>\\n                                </ul>\\n                            </div>\\n\\n                        </div>\\n                    </fieldset>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-6\\\">\\n                <div class=\\\"well\\\">\\n                    <fieldset>\\n                        <legend class=\\\"width-full\\\">{{'SUBSCRIPTION.STEPS.STEP_1.SECTION_2.TITLE' | translate:lang}} <small>{{'SUBSCRIPTION.STEPS.STEP_1.SECTION_2.SUBTITLE' | translate:lang}}</small>\\n                        </legend>\\n                        <div class=\\\"well billing-container\\\">\\n                            <table>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.COMPANY' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h4>{{account?.account?.details.company_name}}</h4>\\n                                    </td>\\n                                </tr>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.TAX_NO' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h5>{{account?.account?.details.tax_no}}</h5>\\n                                    </td>\\n                                </tr>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.ADDRESS' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h5>{{account?.account?.details.address}}</h5>\\n                                    </td>\\n                                </tr>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.CITY' | translate:lang}}, {{'SUBSCRIPTION.LABEL.POSTAL_CODE' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h5>{{account?.account?.details.city}}, {{account?.account?.details.postal_code}}</h5>\\n                                    </td>\\n                                </tr>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\" *ngIf=\\\"account?.account?.details.state\\\">{{'SUBSCRIPTION.LABEL.STATE' | translate:lang}}, </span>\\n                                        <span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.COUNTRY' | translate:lang}}:</span>\\n                                    </td>\\n                                    <td>\\n                                        <h5><span class=\\\"subtitle\\\" *ngIf=\\\"account?.account?.details.state\\\">{{account?.account?.details.state}} - </span>{{account?.account?.details.country}}</h5>\\n                                    </td>\\n                                </tr>\\n                                <tr *ngIf=\\\"account?.account?.details.phone_number\\\">\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.PHONE_NUMBER' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h5>{{account?.account?.details.phone_number}}</h5>\\n                                    </td>\\n                                </tr>\\n                            </table>\\n                            <button class=\\\"btn btn-primary m-t-20\\\" (click)=\\\"goToAccountView()\\\">{{'SUBSCRIPTION.BUTTON.EDIT' | translate:lang}}</button>\\n                        </div>\\n                    </fieldset>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- end wizard step-1 -->\\n        <!-- begin wizard step-2 -->\\n        <div class=\\\"row row-eq-height\\\" [hidden]=\\\"currentStep != 2\\\">\\n            <!-- begin Payment method -->\\n            <div class=\\\"col-md-6\\\">\\n                <div class=\\\"well\\\">\\n                    <fieldset>\\n                        <legend class=\\\"width-full\\\">{{'SUBSCRIPTION.STEPS.STEP_2.SECTION_1.TITLE' | translate:lang}} <small>{{'SUBSCRIPTION.STEPS.STEP_2.SECTION_1.SUBTITLE' | translate:lang}}</small></legend>\\n                        <div>\\n                            <div class=\\\"alert alert-danger fade in m-b-15\\\" *ngIf=\\\"paymentError\\\">\\n                                {{paymentErrorMessage}}\\n                                <span class=\\\"close\\\" data-dismiss=\\\"alert\\\" (click)=\\\"paymentError=false\\\">x</span>\\n                            </div>\\n                            <form #paymentForm=\\\"ngForm\\\" id=\\\"paymentForm\\\" method=\\\"post\\\" (ngSubmit)=\\\"onPaymentFormSubmit()\\\">\\n                                <div id=\\\"payment-container\\\"></div>\\n                            </form>\\n                        </div>\\n                    </fieldset>\\n                </div>\\n            </div>\\n            <!-- begin invoice -->\\n            <div class=\\\"col-md-6\\\">\\n                <div class=\\\"well\\\">\\n                    <fieldset>\\n                        <legend class=\\\"width-full\\\">{{'SUBSCRIPTION.STEPS.STEP_2.SECTION_2.TITLE' | translate:lang}} <small>{{'SUBSCRIPTION.STEPS.STEP_2.SECTION_2.TITLE' | translate:lang}}</small></legend>\\n                        <div class=\\\"alert alert-danger fade in m-b-15\\\" *ngIf=\\\"subscriptionError\\\">\\n                            {{subscriptionError}}\\n                            <span class=\\\"close\\\" data-dismiss=\\\"alert\\\" (click)=\\\"subscriptionError=null\\\">x</span>\\n                        </div>\\n                        <div class=\\\"invoice\\\">\\n                            <div class=\\\"invoice-content\\\">\\n                                <div class=\\\"table-responsive\\\">\\n                                    <table class=\\\"table table-invoice\\\">\\n                                        <thead>\\n                                            <tr>\\n                                                <th>PRODUCT DESCRIPTION</th>\\n                                                <th>PRICE</th>\\n                                                <th>LINE TOTAL</th>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr>\\n                                                <td>\\n                                                    <strong>{{subscriptionOrder?.product_plan.name}}</strong><br />\\n                                                    <small>{{subscriptionOrder?.product_plan.description}}</small>\\n                                                </td>\\n                                                <td>{{subscriptionOrder?.product_plan.base_price.gross | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}</td>\\n                                                <td>{{subscriptionOrder?.product_plan.base_price.gross | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}</td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                                <div class=\\\"invoice-price\\\">\\n                                    <div class=\\\"invoice-price-left\\\">\\n                                        <div class=\\\"invoice-price-row\\\">\\n                                            <div class=\\\"sub-price\\\">\\n                                                <small>SUBTOTAL</small>{{subscriptionOrder?.product_plan.base_price.net |\\n                                                currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}\\n                                            </div>\\n                                            <div class=\\\"sub-price\\\" *ngIf=\\\"subscriptionOrder?.product_plan.base_price.net > 0\\\">\\n                                                <i class=\\\"fa fa-plus\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"sub-price\\\" *ngIf=\\\"subscriptionOrder?.product_plan.base_price.net > 0\\\">\\n                                                <small>Tax(\\n                                                <span *ngIf=\\\"subscriptionOrder?.product_plan.base_price.tax >= 0\\\">{{ subscriptionOrder?.product_plan.base_price.tax }}%</span>\\n                                                <span *ngIf=\\\"!(subscriptionOrder?.product_plan.base_price.tax >= 0)\\\">{{ subscriptionOrder?.product_plan.base_price.tax }}</span>\\n                                                )</small>\\n                                                <span *ngIf=\\\"subscriptionOrder?.product_plan.base_price.tax >= 0\\\">\\n                                                    {{subscriptionOrder?.product_plan.base_price.net\\n                                                        * subscriptionOrder?.product_plan.base_price.tax/100 | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}\\n                                                </span>\\n                                                <span *ngIf=\\\"!(subscriptionOrder?.product_plan.base_price.tax >= 0)\\\">{{ subscriptionOrder?.product_plan.base_price.tax }}</span>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"invoice-price-right\\\">\\n                                        <small>TOTAL</small> {{subscriptionOrder?.product_plan.base_price.gross | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!-- end invoice -->\\n                        <div class=\\\"text-center m-t-15\\\">\\n                            <div class=\\\"checkbox\\\">\\n                                <label [ngClass]=\\\"{'danger':(termsAccepted == false && braintreeNonce != null)}\\\">\\n                                <input type=\\\"checkbox\\\" [(ngModel)]=\\\"termsAccepted\\\">{{'SUBSCRIPTION.TERMS_AND_CONDITIONS.LABEL.1' | translate:lang}}<a href='javascript:;' class='link' (click)='showTermsAndConditions()'>{{'SUBSCRIPTION.TERMS_AND_CONDITIONS.LABEL.2' | translate:lang}}</a>\\n                            </label>\\n                                <div *ngIf=\\\"!termsAccepted && braintreeNonce\\\" class=\\\"required\\\">{{'SUBSCRIPTION.TERMS_AND_CONDITIONS.ERROR' | translate:lang}}</div>\\n                            </div>\\n                            <button class=\\\"btn btn-success btn-lg\\\" type=\\\"submit\\\" form=\\\"paymentForm\\\">{{'SUBSCRIPTION.BUTTON.SUBMIT' | translate:lang}}</button>\\n                        </div>\\n                    </fieldset>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- end wizard step-2 -->\\n        <div class=\\\"nav-buttons\\\">\\n            <button class=\\\"btn btn-bradmax btn-lg\\\" *ngIf=\\\"currentStep == 2\\\" type=\\\"button\\\" (click)=\\\"goToStep(currentStep - 1)\\\"><i class=\\\"fa fa-chevron-left\\\"></i> {{'SUBSCRIPTION.BUTTON.PREVIOUS' | translate:lang}}</button>\\n            <button class=\\\"btn btn-bradmax btn-lg\\\" *ngIf=\\\"currentStep == 1\\\" type=\\\"button\\\" (click)=\\\"goToStep(currentStep + 1)\\\">{{'SUBSCRIPTION.BUTTON.NEXT' | translate:lang}} <i class=\\\"fa fa-chevron-right\\\"></i></button>\\n        </div>\\n    </div>\\n    <!-- begin Thanks view -->\\n    <div *ngIf=\\\"subscriptionFinished\\\" class=\\\"fadeInUpBig thanks\\\">\\n        <div class=\\\"jumbotron m-b-0 text-center\\\">\\n            <h1>{{'SUBSCRIPTION.MESSAGE.THANKS.TITLE' | translate:lang}}</h1>\\n            <p>{{'SUBSCRIPTION.MESSAGE.THANKS.P1' | translate:lang}}</p>\\n            <p><a class=\\\"btn btn-bradmax btn-lg\\\" role=\\\"button\\\" (click)=\\\"goToPlayerView()\\\">{{'SUBSCRIPTION.BUTTON.NAV_PLAYER' | translate:lang}}</a></p>\\n        </div>\\n    </div>\\n    <!-- end Thanks view -->\\n</div>\"\n\n/***/ }),\n\n/***/ 1493:\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n\n/***/ 1494:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"content\\\"\\n\\t  [class.with-sidebar]=\\\"sidebar.isOpen && !config.mobile\\\"\\n\\t  [class.with-header]=\\\"!isAppInIframe && !view.heartbeatMode\\\">\\n\\t<router-outlet></router-outlet>\\n</div>\\n\\n<sidebar></sidebar>\\n\\n<header *ngIf=\\\"!isAppInIframe && !view.heartbeatMode\\\"\\n\\t\\t  [mobile]=\\\"config.mobile\\\">\\n\\t<ng-template [ngIf]=\\\"!config.mobile\\\">\\n\\t\\t<a routerLink=\\\"\\\" title=\\\"bradmax admin\\\">\\n\\t\\t\\t<img [src]=\\\"url.file(config.logo.src)\\\" style=\\\"margin: 8px;\\\"\\n\\t\\t\\t\\t  [alt]=\\\"config.logo.alt\\\" [title]=\\\"config.logo.title\\\" width=\\\"150px\\\" height=\\\"38px\\\" />\\n\\t\\t</a>\\n\\t</ng-template>\\n</header>\\n<view-to-top></view-to-top>\\n\\n<!--<div style=\\\"position: absolute;z-index: 99999;top: 0;left: 50%;margin-left:-30px;\\\">\\n\\t<small>\\n\\t\\t<code [class.text-success]=\\\"view.xs\\\">xs</code>\\n\\t\\t<code [class.text-success]=\\\"view.sm\\\">sm</code>\\n\\t\\t<code [class.text-success]=\\\"view.md\\\">md</code>\\n\\t\\t<code [class.text-success]=\\\"view.lg\\\">lg</code>\\n\\t</small>\\n</div>-->\\n\"\n\n/***/ }),\n\n/***/ 1495:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<section class=\\\"\\\">\\n\\t<div class=\\\"container d-flex flex-column\\\">\\n\\t\\t<div class=\\\"row align-items-center justify-content-center gx-0 min-vh-100\\\">\\n\\t\\t\\t<!-- Image -->\\n\\t\\t\\t<div class=\\\"col-8 col-md-6 col-lg-7 offset-md-1 order-md-2 mt-auto mt-md-0 pt-8 pb-4 py-md-11\\\">\\n\\t\\t\\t\\t<img src=\\\"https://bradmax.com/static/client/client_panel/img/login/banner.svg\\\" alt=\\\"banner\\\" class=\\\"img-fluid\\\">\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- Form -->\\n\\t\\t\\t<div class=\\\"col-12 col-md-5 col-lg-4 order-md-1 mb-auto mb-md-0 pb-8 py-md-11\\\">\\n\\n\\t\\t\\t\\t<!-- Heading -->\\n\\t\\t\\t\\t<div class=\\\"header-brand mb-3\\\">\\n\\t\\t\\t\\t\\t<img src=\\\"https://bradmax.com/static/sales_v2/img/bradmax/2025/full.black.yellow.svg\\\" alt=\\\"Bradmax\\\" class=\\\"img-brand mb-2\\\">\\n\\t\\t\\t\\t\\t<p class=\\\"fs-4 lh-1 font-monospace text-start text-black text-wide text-uppercase\\\">Media Player</p>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- Form -->\\n\\t\\t\\t\\t<iframe name=\\\"auth-form\\\" style=\\\"display:none\\\" src=\\\"about:blank\\\"></iframe>\\n\\t\\t\\t\\t<form action=\\\"about:blank\\\" #form method=\\\"post\\\" target=\\\"auth-form\\\" class=\\\"mb-5\\\"\\n\\t\\t\\t\\t\\t\\t[class.was-validated]=\\\"!!error\\\"\\n\\t\\t\\t\\t\\t\\t[attr.autocomplete]=\\\"autocomplete\\\">\\n\\n\\t\\t\\t\\t\\t<!-- Email -->\\n\\t\\t\\t\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label fs-3\\\" for=\\\"user\\\">{{'LOGIN.PLACEHOLDER.EMAIL' | translate : lang}}</label>\\n\\t\\t\\t\\t\\t\\t<input id=\\\"user\\\" name=\\\"user\\\" type=\\\"email\\\" class=\\\"form-control fs-4\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [attr.autocomplete]=\\\"autocomplete\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"auth.user\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t required\\n\\t\\t\\t\\t\\t\\t\\t\\t (enter)=\\\"login()\\\">\\n\\t\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t\\t<!-- Password -->\\n\\t\\t\\t\\t\\t<div class=\\\"form-group mb-5\\\">\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label fs-3\\\" for=\\\"password\\\">{{'LOGIN.PLACEHOLDER.PASSWORD' | translate:lang}}</label>\\n\\t\\t\\t\\t\\t\\t<input id=\\\"password\\\" name=\\\"password\\\" type=\\\"password\\\" class=\\\"form-control fs-4\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [attr.autocomplete]=\\\"autocomplete\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"auth.password\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t required\\n\\t\\t\\t\\t\\t\\t\\t\\t (enter)=\\\"login()\\\">\\n\\t\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t\\t<!-- Error -->\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"error\\\" class=\\\"alert text-danger border-danger show mb-5\\\">\\n\\t\\t\\t\\t\\t\\t<strong>{{ error }}</strong>\\n\\t\\t\\t\\t\\t\\t<span class=\\\"close text-danger display-6\\\" data-dismiss=\\\"alert\\\">×</span>\\n\\t\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t\\t<!-- Submit -->\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-primary fs-3 w-100\\\" type=\\\"button\\\" (click)=\\\"login()\\\">{{ 'LOGIN.LABEL.SIGN_ME_IN' | translate:lang }}</button>\\n\\n\\t\\t\\t\\t</form>\\n\\n\\t\\t\\t\\t<!-- Text -->\\n\\t\\t\\t\\t<p class=\\\"mb-2 fs-4 text-muted\\\" [innerHtml]=\\\"'LOGIN.MESSAGE.FORGOT_PASSWORD' | translate:lang:{ url : passwordResetUrl }\\\"></p>\\n\\t\\t\\t\\t<p class=\\\"mb-2 fs-4 text-muted\\\" [innerHtml]=\\\"'LOGIN.MESSAGE.NOT_A_MEMBER' | translate:lang:{ url : signInUrl }\\\"></p>\\n\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</section>\\n\"\n\n/***/ }),\n\n/***/ 1496:\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 38 38\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<defs>\\n\\t\\t<linearGradient id=\\\"bx-spinner-rim-ray\\\" x1=\\\"8.042%\\\" y1=\\\"0%\\\" x2=\\\"65.682%\\\" y2=\\\"23.865%\\\">\\n\\t\\t\\t<stop stop-color=\\\"currentColor\\\" stop-opacity=\\\"0\\\" offset=\\\"0%\\\" />\\n\\t\\t\\t<stop stop-color=\\\"currentColor\\\" stop-opacity=\\\".631\\\" offset=\\\"63.146%\\\" />\\n\\t\\t\\t<stop stop-color=\\\"currentColor\\\" offset=\\\"100%\\\" />\\n\\t\\t</linearGradient>\\n\\t</defs>\\n\\t<g fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n\\t\\t<!-- logo -->\\n\\t\\t<g transform=\\\"translate(1 1)\\\">\\n\\t\\t\\t<circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"18\\\" fill=\\\"#000000\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1\\\" style=\\\"filter: brightness(0.64) opacity(0.24);\\\" />\\n\\t\\t\\t<path d=\\\"M5.48145 2.74075V13.1556L13.1555 7.90621L5.48145 2.74075Z\\\" fill=\\\"currentColor\\\" style=\\\"\\ttransform: scale(2) translate(26%, 28%);transform-origin: center;\\\" />\\n\\t\\t</g>\\n\\t\\t<!-- ray -->\\n\\t\\t<g transform=\\\"translate(1 1)\\\" style=\\\"filter: opacity(0.5) blur(1px);\\\">\\n\\t\\t\\t<path d=\\\"M36 18c0-9.94-8.06-18-18-18\\\" stroke=\\\"url(#bx-spinner-rim-ray)\\\" stroke-width=\\\"2\\\">\\n\\t\\t\\t\\t<animateTransform attributeName=\\\"transform\\\" type=\\\"rotate\\\" from=\\\"0 18 18\\\" to=\\\"360 18 18\\\" dur=\\\"0.9s\\\" repeatCount=\\\"indefinite\\\" />\\n\\t\\t\\t</path>\\n\\t\\t\\t<circle fill=\\\"currentColor\\\" cx=\\\"36\\\" cy=\\\"18\\\" r=\\\"1\\\">\\n\\t\\t\\t\\t<animateTransform attributeName=\\\"transform\\\" type=\\\"rotate\\\" from=\\\"0 18 18\\\" to=\\\"360 18 18\\\" dur=\\\"0.9s\\\" repeatCount=\\\"indefinite\\\" />\\n\\t\\t\\t</circle>\\n\\t\\t</g>\\n\\t</g>\\n</svg>\\n\"\n\n/***/ }),\n\n/***/ 1497:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  pointer-events: all;\\n  position: fixed;\\n  top: 0;\\n  right: 0;\\n  bottom: 0;\\n  left: 0;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n  -webkit-backdrop-filter: grayscale(1);\\n          backdrop-filter: grayscale(1);\\n  background-color: rgba(255, 255, 255, 0.4);\\n  color: #FAD600;\\n  display: none;\\n  z-index: 0; }\\n  :host.active {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    z-index: 10000; }\\n  :host svg {\\n    position: relative;\\n    z-index: 1;\\n    min-width: 48px;\\n    max-width: 96px;\\n    min-height: 48px;\\n    max-height: 96px;\\n    width: 100%;\\n    height: 100%; }\\n\"\n\n/***/ }),\n\n/***/ 1498:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__app_component__ = __webpack_require__(1499);\n/* harmony namespace reexport (by used) */ __webpack_require__.d(__webpack_exports__, \"AppComponent\", function() { return __WEBPACK_IMPORTED_MODULE_0__app_component__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__app_config__ = __webpack_require__(189);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__app_model__ = __webpack_require__(351);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__app_model___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__app_model__);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__app_module__ = __webpack_require__(343);\n/* unused harmony namespace reexport */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__app_spinner_component__ = __webpack_require__(1500);\n/* unused harmony namespace reexport */\n\n\n\n\n\n\n\n/***/ }),\n\n/***/ 1499:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AppComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__service_view_service__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(0);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar AppComponent = (function () {\n    function AppComponent(view) {\n        this.view = view;\n    }\n    AppComponent.prototype.onResize = function () {\n        this.view.calculateSize();\n    };\n    var _a;\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"HostListener\"])('window:resize'),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", []),\n        __metadata(\"design:returntype\", void 0)\n    ], AppComponent.prototype, \"onResize\", null);\n    AppComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Component\"])({\n            selector: 'bradmax-admin',\n            template: '<flash-messages></flash-messages><router-outlet></router-outlet><modal></modal><spinner></spinner>',\n            changeDetection: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__service_view_service__[\"a\" /* ViewService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__service_view_service__[\"a\" /* ViewService */]) === \"function\" && _a || Object])\n    ], AppComponent);\n    return AppComponent;\n}());\n\n\n\n/***/ }),\n\n/***/ 15:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = initViewService;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ViewService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Subject__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Subject__);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nfunction initViewService(s) {\n    return function () { return s.init(); };\n}\nvar ViewService = (function () {\n    function ViewService(injector) {\n        var _this = this;\n        this.injector = injector;\n        this.heartbeatMode = false;\n        this.bodySpinnerSource = new __WEBPACK_IMPORTED_MODULE_2_rxjs_Subject__[\"Subject\"]();\n        this.resizeSource = new __WEBPACK_IMPORTED_MODULE_2_rxjs_Subject__[\"Subject\"]();\n        this.onPostMessage = function (event) {\n            if (event && event.data && event.data.bradmaxPath) {\n                _this.router.navigateByUrl(event.data.bradmaxPath);\n            }\n        };\n    }\n    Object.defineProperty(ViewService.prototype, \"routerSub\", {\n        set: function (s) {\n            if (this.routerSubscription != null)\n                this.routerSubscription.unsubscribe();\n            this.routerSubscription = s;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ViewService.prototype.init = function () {\n        var _this = this;\n        this.bodySpinnerStream$ = this.bodySpinnerSource.asObservable();\n        this.resizeStream$ = this.resizeSource.asObservable();\n        this.calculateSize();\n        this.router = this.injector.get(__WEBPACK_IMPORTED_MODULE_1__angular_router__[\"g\" /* Router */]);\n        this.routerSub = this.router.events\n            .subscribe(function (event) { return _this.navigationInterceptor(event); });\n        window.removeEventListener('message', this.onPostMessage);\n        if (this.checkIfAppInIframe()) {\n            window.addEventListener('message', this.onPostMessage);\n        }\n        var customColorPalettePattern = window.location.href.match(/[&\\?]customColorPalette=([a-zA-Z0-9_\\-]+)/);\n        if (customColorPalettePattern && !document.getElementById('custom-color-palette')) {\n            this.injectCustomColorPalette(customColorPalettePattern[1]);\n        }\n    };\n    ViewService.prototype.injectCustomColorPalette = function (name) {\n        var styles = null;\n        if (name == 'cdn77') {\n            styles = \"\\nbody { background: #ebf3f5 !important; }\\nh1, h2, h3, h4, h5, h6 { color: #636773; }\\n.panel-inverse>.panel-heading { background: #0f1e46; }\\n.panel-inverse>.panel-heading h4 small{ color:#fff !important; opacity:0.6; }\\nbody bradmax-admin .panel {box-shadow: 0 5px 15px 0 rgba(8,4,45,.1);}\\n.config-list .config-item .cell.cell-name { color: #4b4b4b !important; }\\nbody bradmax-admin .btn-bradmax { color: #fcfcfc; background-color: #0f1e46; border-color: #0f1e46; }\\nbody bradmax-admin .btn-bradmax:hover { background-color: #006cad; border-color: #006cad; }\\nbody bradmax-admin .widget {box-shadow: 0 5px 15px 0 rgba(8,4,45,.1);}\\nbody bradmax-admin .widget-chart {background: #ffffff !important;}\\nbody bradmax-admin .widget-chart .widget-chart-content .table>tbody>tr>td, body bradmax-admin .widget-chart .widget-chart-content .table>thead>tr>th{color: #242a30;}\\nbody bradmax-admin .widget-chart .chart-title {color:#4b4b4b !important;}\\nbody bradmax-admin .widget-chart .chart-title small {color:#616d72 !important;}\\nbradmax-admin .sidebar, bradmax-admin .sidebar-bg { background: #0f1e46 !important; }\\n.fade.in .sidebar.active ul.nav > li.active > a { background-color: #01466f !important; color:#fafafa !important;}\\n.fade.in .sidebar.active ul.nav > li.active > a:after {color:#fafafa !important;}\\n.fade.in .sidebar.active ul.nav > li.active > .sub-menu { background-color: #006cad !important; color:#fafafa !important;}\\n.fade.in .sidebar.active ul.nav > li.active > ul.sub-menu > li > a { color:#fafafa !important;}\\n.fade.in .sidebar.active ul.nav > li.active > ul.sub-menu > li > a >span { text-decoration-color:#fafafa !important;}\\n.fade.in .sidebar.active ul.nav > li > a { color:#fafafa !important;}\\n.fade.in .sidebar.active ul.nav > li > a > span { text-decoration:none !important;}\\n.fade.in .sidebar.active ul.nav > li > a:hover { background-color: #006cad !important; color:#ffffff !important;}\\n.sidebar .nav>li.nav-header {color:#e1e1e1; }\\n.has-sub > ul.sub-menu:before {width:0px !important;}\\n.sidebar ul.nav li:not(:last-of-type) {border-bottom: none !important;}\\n.timeline li.active .timeline-body .timeline-footer {background: #0f1e46 !important;}\\n.timeline li.active .timeline-body {border-color: #0f1e46 !important;}\\n.timeline li.active .timeline-body:before {border-right-color: #0f1e46 !important;}\\n.timeline li.active .timeline-icon a {background-color: #0f1e46 !important; border-color: #0f1e46 !important;}\\n.timeline li.active:before {background: #c8c8c8 !important;}\\n.timeline li.active .timeline-time .date, .timeline li.active .timeline-time .time { color: #4b4b4b !important; }\\n\\t\\t\\t\";\n        }\n        else if (name == 'a-and-s') {\n            styles = \"\\nbody { background: transparent !important; }\\nh1, h2, h3, h4, h5, h6 { color: #000; }\\n.page-header {text-shadow: 0px 0px 5px #ffffff;}\\n.panel-inverse>.panel-heading { background: #fff; color:#000; border-bottom: 1px solid #cecece;}\\n.panel-inverse>.panel-heading h4 { color:#000 !important; }\\n.panel-inverse>.panel-heading h4 small{ opacity:0.6; }\\n.panel {border: solid 1px #ddd;}\\n.breadcrumb {text-shadow: 0px 0px 3px #fff;}\\n.breadcrumb a.active {color:#232323 !important;}\\n\\t\\t\\t\";\n        }\n        else if (name == 'irdeto') {\n            styles = \"\\n.panel-inverse>.panel-heading {background: #5b246a;}\\nbradmax-admin .sidebar, bradmax-admin .sidebar-bg {background: #5b246a !important;}\\n.fade.in .sidebar.active ul.nav > li.active > a {background-color: #3d1648 !important;}\\n.fade.in .sidebar.active ul.nav > li.active > .sub-menu {background-color: #6c327b !important;}\\n body bradmax-admin .btn-bradmax {color: #fcfcfc;background-color: #5b246a;border-color: #4e1e5a;}\\n .sidebar .nav>li.nav-header {color: #dee5ea;}\\n .timeline li.active .timeline-body .timeline-footer {background: #5b266a !important;}\\n .timeline li.active .timeline-body {border-color: #5b266a !important;}\\n .timeline li.active .timeline-body:before {border-right-color: #5b266a !important;}\\n .timeline li.active .timeline-icon a {background-color: #5b266a !important; border-color: #5b266a !important;}\\n .timeline li.active:before {background: #5b266a !important;}\\n .timeline li.active .timeline-time .date, .timeline li.active .timeline-time .time { color: #5b266a !important; }\\n .config-list .config-item .cell.cell-name { color: #5b266a !important; }\\n .fade.in .sidebar.active ul.nav > li > a:hover { background-color: #451e50 !important; }\\n\\t\\t\\t\";\n        }\n        else {\n            console.warn('Cannot inject custom color palette. Not recognized name of palette: ' + name);\n        }\n        if (styles !== null) {\n            var scriptElement = document.createElement('style');\n            scriptElement.setAttribute('id', 'custom-color-palette');\n            scriptElement.innerHTML = styles;\n            document.head.appendChild(scriptElement);\n        }\n    };\n    ViewService.prototype.calculateSize = function () {\n        var change = false;\n        if (this.height != document.documentElement.clientHeight) {\n            this.height = document.documentElement.clientHeight;\n            change = true;\n        }\n        if (this.width != document.documentElement.clientWidth) {\n            this.width = document.documentElement.clientWidth;\n            change = true;\n        }\n        if (change == true)\n            this.resizeSource.next({ width: this.width, height: document.documentElement.clientHeight });\n    };\n    ViewService.prototype.spinner = function (show) {\n        this.spinnerActive = show;\n        this.bodySpinnerSource.next({ show: this.spinnerActive });\n    };\n    ViewService.prototype.error = function (errorInfo) {\n        this.spinnerActive = true;\n        this.bodySpinnerSource.next({ show: this.spinnerActive, error: errorInfo });\n    };\n    ViewService.prototype.formatPageTitle = function () {\n        var text = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            text[_i] = arguments[_i];\n        }\n        return (text == null || text.length == 0) ? 'Proinvest' : text.join(' - ');\n    };\n    ViewService.prototype.getViewport = function () {\n        var vp = { width: 0, height: 0 };\n        if (typeof window.innerWidth != 'undefined') {\n            vp.width = window.innerWidth;\n            vp.height = window.innerHeight;\n        }\n        else if (typeof document.documentElement != 'undefined'\n            && typeof document.documentElement.clientWidth != 'undefined'\n            && document.documentElement.clientWidth != 0) {\n            vp.width = document.documentElement.clientWidth;\n            vp.height = document.documentElement.clientHeight;\n        }\n        else {\n            vp.width = document.getElementsByTagName('body')[0].clientWidth;\n            vp.height = document.getElementsByTagName('body')[0].clientHeight;\n        }\n        return vp;\n    };\n    ViewService.prototype.navigationInterceptor = function (e) {\n        if (e instanceof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"e\" /* NavigationStart */])\n            this.spinner(true);\n        if (e instanceof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"c\" /* NavigationEnd */])\n            this.spinner(false);\n        if (e instanceof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"b\" /* NavigationCancel */])\n            this.spinner(false);\n        if (e instanceof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"d\" /* NavigationError */])\n            this.spinner(false);\n    };\n    ViewService.prototype.checkIfAppInIframe = function () {\n        var result = false;\n        try {\n            result = (window.self !== window.top);\n        }\n        catch (e) {\n            result = true;\n        }\n        return result;\n    };\n    ViewService.prototype.checkIfHeartBeatMode = function () {\n        return this.heartbeatMode;\n    };\n    ViewService.prototype.checkIfBetaMode = function () {\n        var betaPattern = /[\\?&#]beta=1/;\n        return Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"isDevMode\"])() || betaPattern.test(window.location.href);\n    };\n    ViewService.prototype.setHeartBeatMode = function (_mode) {\n        this.heartbeatMode = _mode;\n    };\n    var _a;\n    ViewService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injector\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injector\"]) === \"function\" && _a || Object])\n    ], ViewService);\n    return ViewService;\n}());\n\n\n\n/***/ }),\n\n/***/ 1500:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export AppSpinner */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__service_view_service__ = __webpack_require__(15);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar DEFS = '<defs>'\n    + '<radialGradient id=\"gradient\" cx=\"75%\" cy=\"45%\">'\n    + '<stop offset=\"0%\" stop-color=\"rgb(124,21,68)\"/>'\n    + '<stop offset=\"25%\" stop-color=\"rgb(106,12,57)\"/>'\n    + '<stop offset=\"50%\" stop-color=\"rgb(80,23,59)\"/>'\n    + '<stop offset=\"100%\" stop-color=\"transparent\"/>'\n    + '</radialGradient>'\n    + '<clipPath id=\"clip\">'\n    + '<path d=\"M50,24 L80,76 L20,76 L50,24 Z M50,29 L25,73 L75,73 L50,29 Z\"></path>'\n    + '</clipPath>'\n    + '</defs>';\nvar TRIANGLE = '<g clip-path=\"url(#clip)\">'\n    + '<g #rotate>'\n    + '<path d=\"M 50,58 L10,20 L90,20 L50,58 Z\" fill=\"url(#gradient)\"></path>'\n    + '</g>'\n    + '</g>';\nvar s = 96;\nvar s2 = s >> 1;\nvar HTML = '<div *ngIf=\"active\" class=\"con\">'\n    + '<svg viewBox=\"0 0 100 100\" width=\"' + s + 'px\" height=\"' + s + 'px\" '\n    + 'version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" '\n    + 'style=\"fill-rule:nonzero;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;\">'\n    + DEFS + TRIANGLE\n    + '</svg>'\n    + '<div *ngIf=\"errorInfo\" class=\"errorInfo\">{{errorInfo}}</div>'\n    + '</div>';\nvar STYLE = ''\n    + ':host.active{position: fixed;top: 0;left: 0;bottom: 0;right: 0;z-index: 9999;}'\n    + '.con{position: absolute;top: 0;left: 0;bottom: 0;right: 0;background: rgba(255, 255, 255, 0.75);}'\n    + 'svg{position: absolute;left: 50%;top: 50%;width:' + s + 'px;height:' + s + 'px;'\n    + 'margin-top: -' + s2 + 'px;margin-left: -' + s2 + 'px;}'\n    + '.errorInfo{position: absolute;top: 50%;left:0;right:0;text-align:center;margin-top:20px;}'\n    + '';\nvar AppSpinner = (function () {\n    function AppSpinner(view, cdr, renderer) {\n        this.view = view;\n        this.cdr = cdr;\n        this.renderer = renderer;\n        this.active = true;\n        this.deg = 0;\n        this.timer = 33;\n    }\n    AppSpinner.prototype.ngOnInit = function () {\n        var _this = this;\n        this.bodySpinnerSubscription = this.view.bodySpinnerStream$.subscribe(function (spinnerData) {\n            if (_this.active != spinnerData.show || _this.errorInfo != spinnerData.error) {\n                _this.active = spinnerData.show;\n                _this.errorInfo = spinnerData.error;\n                _this.check();\n                _this.cdr.markForCheck();\n            }\n        });\n    };\n    AppSpinner.prototype.ngOnDestroy = function () {\n        this.active = false;\n        if (this.bodySpinnerSubscription)\n            this.bodySpinnerSubscription.unsubscribe();\n        this.check();\n    };\n    AppSpinner.prototype.ngAfterViewInit = function () {\n        this.check();\n    };\n    AppSpinner.prototype.check = function () {\n        var _this = this;\n        if (this.active)\n            this.subscription = __WEBPACK_IMPORTED_MODULE_1_rxjs_Observable__[\"Observable\"].interval(this.timer).subscribe(function () { return _this.rotation(); });\n        else if (this.subscription)\n            this.subscription.unsubscribe();\n    };\n    AppSpinner.prototype.rotation = function () {\n        if (this.rotate != null) {\n            this.deg += 6;\n            if (this.deg > 360)\n                this.deg = 0;\n            this.renderer.setAttribute(this.rotate.nativeElement, 'transform', 'rotate(' + this.deg + ', 50, 58)');\n        }\n    };\n    var _a, _b, _c, _d;\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewChild\"])('rotate'),\n        __metadata(\"design:type\", typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], AppSpinner.prototype, \"rotate\", void 0);\n    AppSpinner = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'spinner', host: { '[class.active]': 'active' },\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush, template: HTML, styles: [STYLE]\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2__service_view_service__[\"a\" /* ViewService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__service_view_service__[\"a\" /* ViewService */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Renderer2\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Renderer2\"]) === \"function\" && _d || Object])\n    ], AppSpinner);\n    return AppSpinner;\n}());\n\n\n\n/***/ }),\n\n/***/ 1501:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar map = {\n\t\"./account/details/en.json\": 1502,\n\t\"./account/details/pl.json\": 1503,\n\t\"./account/en.json\": 1504,\n\t\"./account/invoices/en.json\": 1505,\n\t\"./account/invoices/pl.json\": 1506,\n\t\"./account/payments/en.json\": 1507,\n\t\"./account/payments/pl.json\": 1508,\n\t\"./account/pl.json\": 1509,\n\t\"./account/subscriptions/en.json\": 1510,\n\t\"./account/subscriptions/pl.json\": 1511,\n\t\"./analytics/QOS/en.json\": 1512,\n\t\"./analytics/QOS/pl.json\": 1513,\n\t\"./analytics/albums/en.json\": 1514,\n\t\"./analytics/albums/pl.json\": 1515,\n\t\"./analytics/audience/en.json\": 1516,\n\t\"./analytics/audience/pl.json\": 1517,\n\t\"./analytics/content/en.json\": 1518,\n\t\"./analytics/content/pl.json\": 1519,\n\t\"./analytics/dashboard/en.json\": 1520,\n\t\"./analytics/dashboard/pl.json\": 1521,\n\t\"./analytics/geo/en.json\": 1522,\n\t\"./analytics/geo/pl.json\": 1523,\n\t\"./analytics/heartbeat/en.json\": 1524,\n\t\"./analytics/heartbeat/pl.json\": 1525,\n\t\"./analytics/info/en.json\": 1526,\n\t\"./analytics/info/pl.json\": 1527,\n\t\"./analytics/realtime/en.json\": 1528,\n\t\"./analytics/realtime/pl.json\": 1529,\n\t\"./analytics/sampled-traffic/en.json\": 1530,\n\t\"./analytics/sampled-traffic/pl.json\": 1531,\n\t\"./analytics/st-raport/en.json\": 1532,\n\t\"./analytics/st-raport/pl.json\": 1533,\n\t\"./analytics/tag-service/en.json\": 1534,\n\t\"./analytics/tag-service/pl.json\": 1535,\n\t\"./analytics/technology/en.json\": 1536,\n\t\"./analytics/technology/pl.json\": 1537,\n\t\"./analytics/top-content/en.json\": 1538,\n\t\"./analytics/top-content/pl.json\": 1539,\n\t\"./components/en.json\": 1540,\n\t\"./components/pl.json\": 1541,\n\t\"./contact/en.json\": 1542,\n\t\"./contact/pl.json\": 1543,\n\t\"./content/en.json\": 1544,\n\t\"./content/pl.json\": 1545,\n\t\"./login/en.json\": 1546,\n\t\"./login/pl.json\": 1547,\n\t\"./password-change/en.json\": 1548,\n\t\"./password-change/pl.json\": 1549,\n\t\"./player/en.json\": 1550,\n\t\"./player/pl.json\": 1551,\n\t\"./products/en.json\": 1552,\n\t\"./products/pl.json\": 1553,\n\t\"./products/plan-carrousel/en.json\": 1554,\n\t\"./products/plan-carrousel/pl.json\": 1555,\n\t\"./subscription/en.json\": 1556,\n\t\"./subscription/pl.json\": 1557\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1501;\n\n/***/ }),\n\n/***/ 1502:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACCOUNT_DETAILS\":{\"TITLE\":\"Account Details\",\"DATA_ERROR\":\"An error occurred! It was not possible to retrieve the necessary data from the server.\",\"FORM\":{\"SUBTITLE_1\":\"User Details\",\"SUBTITLE_2\":\"Company Details\",\"LABEL\":{\"FIRST_NAME\":\"First name\",\"LAST_NAME\":\"Last name\",\"EMAIL\":\"Email\",\"AGREE_FOR_NEWSLETTER\":\"Agree for newsletter\",\"COMPANY\":\"Company\",\"COUNTRY\":\"Country\",\"STATE\":\"State\",\"CITY\":\"City\",\"ADDRESS\":\"Address\",\"POSTAL_CODE\":\"Postal code\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax Identification No.\"},\"PLACEHOLDER\":{\"FIRST_NAME\":\"Your first name\",\"LAST_NAME\":\"Your last name\",\"EMAIL\":\"Your email\",\"COMPANY\":\"Company name\",\"COUNTRY\":\"Choose your country\",\"STATE\":\"State name\",\"CITY\":\"City name\",\"ADDRESS\":\"Stree name and house/flat number\",\"POSTAL_CODE\":\"Postal code number\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax Identification No.\"},\"VALIDATION_ERROR\":{\"REQUIRED\":\"This field is required\",\"INVALID\":\"Invalid value\",\"INVALID_FIELD\":\"Invalid {{field}} format\"},\"SUBMIT_SUCCESS\":\"Changes were saved\"},\"BUTTON\":{\"SAVE\":\"save\",\"EDIT\":\"edit\",\"CANCEL\":\"cancel\",\"UPDATE\":\"update\",\"CONTINUE\":\"continue\",\"CLOSE\":\"close\",\"CHANGE_PASSWORD\":\"Change\"},\"MESSAGE\":{\"ACCOUNT_READY\":\"Account is ready for billing. Do you wish to continue your subscription process?\",\"COMPANY\":\"If you don't have a company you can put here your first and last name.\",\"PAY_VALID\":\"company details ready for payments\",\"PAY_INVALID\":\"company details not ready for payments\"}}}\n\n/***/ }),\n\n/***/ 1503:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACCOUNT_DETAILS\":{\"TITLE\":\"Account Details\",\"DATA_ERROR\":\"An error occurred! It was not possible to retrieve the necessary data from the server.\",\"FORM\":{\"SUBTITLE_1\":\"Basic info\",\"SUBTITLE_2\":\"Company details\",\"LABEL\":{\"FIRST_NAME\":\"First name\",\"LAST_NAME\":\"Last name\",\"EMAIL\":\"Email\",\"AGREE_FOR_NEWSLETTER\":\"Agree for newsletter\",\"COMPANY\":\"Company\",\"COUNTRY\":\"Country\",\"STATE\":\"State\",\"CITY\":\"City\",\"ADDRESS\":\"Address\",\"POSTAL_CODE\":\"Postal code\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax identification no.\"},\"PLACEHOLDER\":{\"FIRST_NAME\":\"Your first name\",\"LAST_NAME\":\"Your last name\",\"EMAIL\":\"Your email\",\"COMPANY\":\"Company name\",\"COUNTRY\":\"Choose your country\",\"STATE\":\"State name\",\"CITY\":\"City name\",\"ADDRESS\":\"Stree name and house/flat number\",\"POSTAL_CODE\":\"Postal code number\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax identification no.\"},\"VALIDATION_ERROR\":{\"REQUIRED\":\"This field is required\",\"INVALID\":\"Invalid value\",\"INVALID_FIELD\":\"Invalid {{field}} format\"},\"SUBMIT_SUCCESS\":\"Changes were saved\"},\"BUTTON\":{\"SAVE\":\"save\",\"EDIT\":\"edit\",\"CANCEL\":\"cancel\",\"UPDATE\":\"update\",\"CONTINUE\":\"Continue\",\"CLOSE\":\"close\",\"CHANGE_PASSWORD\":\"Change\"},\"MESSAGE\":{\"ACCOUNT_READY\":\"Account is ready for billing. Do you wish to continue your subscription process?\",\"COMPANY\":\"If you don't have a company you can put here your first and last name.\",\"PAY_VALID\":\"company details ready for payments\",\"PAY_INVALID\":\"company details not ready for payments\"}}}\n\n/***/ }),\n\n/***/ 1504:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACCOUNT\":{\"TITLE\":\"Account Information\",\"SUBTITLE\":\"here you can find and change all the information concerning your account\",\"DETAILS\":{\"TITLE\":\"My Info\"},\"PAYMENTS\":{\"TITLE\":\"My Payment Methods\"},\"SUBSCRIPTIONS\":{\"TITLE\":\"My Subscriptions\"},\"INVOICES\":{\"TITLE\":\"My Invoices\"}}}\n\n/***/ }),\n\n/***/ 1505:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACCOUNT_INVOICES\":{\"TITLE\":\"My Invoices\",\"SUBTITLE\":\"My Invoices\",\"MESSAGE\":{\"EDIT_SUCCESS\":\"Invoice details updated.\",\"EDIT_ERROR\":\"Error updating invoice details.\",\"MORE_DETAILS\":\"for detailed invoice please download the pdf\",\"AGREEMENT\":{\"1\":\"I agree with the \",\"2\":\"Terms and Conditions.\",\"TEXT\":\"The changes made to an invoice are of the full responsibility of the user.\"},\"EMPTY\":\"You don't have any invoices.\",\"NOT_AVAILABLE\":\"Not available\"},\"LABEL\":{\"DESCRIPTION\":\"Description\",\"BASE_PRICE\":\"Base Price\",\"TOTAL\":\"Total\",\"EXPORT_PDF\":\"Export as PDF\",\"ADDRESS\":\"Address\",\"EDIT\":\"Edit\",\"TAX_NO\":\"Tax.No.\",\"TAX\":\"Tax\",\"PHONE\":\"phone\",\"CREATED\":\"Created\",\"PLAN_NAME\":\"Product Name\",\"STATUS\":\"Status\",\"SELECTED_INVOICE\":\"Selected Invoice Details\",\"INVOICE_NOT_READY\":\"Invoice for this payment will be generated after settling payment transaction.\"},\"BUTTON\":{\"AGREE\":\"I Agree\",\"NOT_AGREE\":\"I Don't Agree\"}}}\n\n/***/ }),\n\n/***/ 1506:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACCOUNT_INVOICES\":{\"TITLE\":\"My Invoices\",\"SUBTITLE\":\"My Invoices\",\"MESSAGE\":{\"EDIT_SUCCESS\":\"Invoice details updated.\",\"EDIT_ERROR\":\"Error updating invoice details.\",\"MORE_DETAILS\":\"for detailed invoice please download the pdf\",\"AGREEMENT\":{\"1\":\"I agree with the \",\"2\":\"Terms and Conditions.\",\"TEXT\":\"The changes made to an invoice are of the full responsibility of the user.\"},\"EMPTY\":\"I don't have any invoices.\",\"NOT_AVAILABLE\":\"Not available\"},\"LABEL\":{\"DESCRIPTION\":\"Description\",\"BASE_PRICE\":\"Base Price\",\"TOTAL\":\"Total\",\"EXPORT_PDF\":\"Export as PDF\",\"ADDRESS\":\"Address\",\"EDIT\":\"Edit\",\"TAX_NO\":\"Tax.No.\",\"TAX\":\"Tax\",\"PHONE\":\"phone\",\"CREATED\":\"Created\",\"PLAN_NAME\":\"Product Name\",\"STATUS\":\"Status\",\"SELECTED_INVOICE\":\"Selected Invoice Details\",\"INVOICE_NOT_READY\":\"Invoice for this payment will be generated after settling payment transaction.\"},\"BUTTON\":{\"AGREE\":\"I Agree\",\"NOT_AGREE\":\"I Don't Agree\"}}}\n\n/***/ }),\n\n/***/ 1507:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACC_PAY\":{\"TITLE\":\"Your saved payment methods\",\"MESSAGE\":{\"EMPTY\":\"You don't have any payment methods saved.\",\"EDIT_SUCCESS\":\"Payment method edited successfully.\",\"MAKE_DEFAULT\":\"make this payment default\",\"CONFIRM_DELETE\":\"Are you sure you want to remove this payment method?\",\"DELETE_SUCCESS\":\"Payment method deleted.\",\"DELETE_ERROR\":\"Error deleting payment method.\"},\"STATE\":{\"ACTIVE\":\"active\",\"VALID\":\"valid\",\"INVALID\":\"invalid\",\"DEFAULT\":\"default\"},\"LABEL\":{\"EMAIL\":\"Email\",\"EXPIRES\":\"Expires at\",\"CREATED\":\"Created at\",\"UPDATED\":\"Updated at\",\"CVV\":\"CVV\",\"EXP_DATE\":\"Expiration Date\",\"NAME\":\"Name\",\"CONTINUE\":\"Continue\",\"CANCEL\":\"Cancel\",\"YES\":\"Yes\"},\"BUTTON\":{\"EDIT\":\"edit\",\"DELETE\":\"delete\",\"SAVE\":\"save\",\"CANCEL\":\"cancel\"}}}\n\n/***/ }),\n\n/***/ 1508:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACC_PAY\":{\"TITLE\":\"Your saved payment methods\",\"MESSAGE\":{\"EMPTY\":\"You don't have any payment methods saved.\",\"EDIT_SUCCESS\":\"Payment method edited successfully.\",\"MAKE_DEFAULT\":\"make this payment default\",\"CONFIRM_DELETE\":\"Are you sure you want to remove this payment method?\",\"DELETE_SUCCESS\":\"Payment method deleted.\",\"DELETE_ERROR\":\"Error deleting payment method.\"},\"STATE\":{\"ACTIVE\":\"active\",\"VALID\":\"valid\",\"INVALID\":\"invalid\",\"DEFAULT\":\"default\"},\"LABEL\":{\"EMAIL\":\"Email\",\"EXPIRES\":\"Expires at\",\"CREATED\":\"Created at\",\"UPDATED\":\"Updated at\",\"CVV\":\"CVV\",\"EXP_DATE\":\"Expiration Date\",\"NAME\":\"Name\",\"CONTINUE\":\"Continue\",\"CANCEL\":\"Cancel\",\"YES\":\"Yes\"},\"BUTTON\":{\"EDIT\":\"Edit\",\"DELETE\":\"Delete\",\"SAVE\":\"Save\",\"CANCEL\":\"Cancel\"}}}\n\n/***/ }),\n\n/***/ 1509:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACCOUNT\":{\"TITLE\":\"Account Information\",\"SUBTITLE\":\"here you can find and change all the information concerning your account\",\"DETAILS\":{\"TITLE\":\"My Info\"},\"PAYMENTS\":{\"TITLE\":\"My Payment Methods\"},\"SUBSCRIPTIONS\":{\"TITLE\":\"My Subscriptions\"},\"INVOICES\":{\"TITLE\":\"My Invoices\"}}}\n\n/***/ }),\n\n/***/ 1510:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACCOUNT_SUBS\":{\"TITLE\":\"My Subscriptions\",\"MESSAGE\":{\"EMPTY\":\"You don't have any subscriptions. What are you waiting for!\",\"ERROR_UPDATE_PM\":\"Error updating payment method.Please try again.\",\"SUCCESS_UPDATE_PM\":\"Subscription payment method updated.\"},\"LABEL\":{\"ACTIVE\":\"active\",\"INACTIVE\":\"inactive\",\"CREATED_AT\":\"Created at\",\"UPDATED_AT\":\"Updated at\",\"NEXT_BILLING\":\"Next billing at\",\"BASE_PRICE\":\"Base price\",\"PER_MONTH\":\"per month\",\"INCLUDED_VIEWS\":\"Included views\",\"INCLUDED_VIEWS_USAGE\":\"Views usage\",\"USAGE_PRICE\":\"Usage price\",\"VIEWS\":\"views\",\"CURRENT_TOTAL\":\"Current Total\",\"PM\":\"Payment method\",\"NOT_AVAILABLE\":\"Not available\"},\"BUTTON\":{\"CHANGE_PM\":\"Change PM\",\"CANCEL_PLAN\":\"Cancel\"},\"PM_MODAL\":{\"TITLE\":\"Select a payment method\",\"SUBMIT_BUTTON\":\"Select this one\",\"CANCEL\":\"Cancel\"}}}\n\n/***/ }),\n\n/***/ 1511:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ACCOUNT_SUBS\":{\"TITLE\":\"My Subscriptions\",\"MESSAGE\":{\"EMPTY\":\"You don't have any subscriptions. What are you waiting for!\",\"ERROR_UPDATE_PM\":\"Error updating payment method.Please try again.\",\"SUCCESS_UPDATE_PM\":\"Subscription payment method updated.\"},\"LABEL\":{\"ACTIVE\":\"active\",\"INACTIVE\":\"inactive\",\"CREATED_AT\":\"Created at\",\"UPDATED_AT\":\"Updated at\",\"NEXT_BILLING\":\"Next billing at\",\"BASE_PRICE\":\"Base price\",\"PER_MONTH\":\"per month\",\"INCLUDED_VIEWS\":\"Included views\",\"INCLUDED_VIEWS_USAGE\":\"Views usage\",\"USAGE_PRICE\":\"Usage price\",\"VIEWS\":\"views\",\"CURRENT_TOTAL\":\"Current Total\",\"PM\":\"Payment method\",\"NOT_AVAILABLE\":\"Not available\"},\"BUTTON\":{\"CHANGE_PM\":\"Change PM\",\"CANCEL_PLAN\":\"Cancel\"},\"PM_MODAL\":{\"TITLE\":\"Select a payment method\",\"SUBMIT_BUTTON\":\"Select this one\",\"CANCEL\":\"Cancel\"}}}\n\n/***/ }),\n\n/***/ 1512:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"QOS\":{\"TITLE\":\"Analytics - QOS\",\"AUDIENCE\":\"Audience\",\"QOS\":\"QOS\",\"SELECTED_CONTENR\":\"Selected content\",\"WORD\":{\"POSITION\":\"Position\",\"TITLE\":\"Title\",\"STREAMS\":\"Streams\",\"STREAMS_APROX_NOTE\":\"aprox. last 20 min\",\"WATCHING_USERS_PER_SEC\":\"Watching users - per second\",\"WATCHING_USERS_PER_MIN\":\"Watching users - per minute\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n/***/ }),\n\n/***/ 1513:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"QOS\":{\"TITLE\":\"Analytics - QOS\",\"AUDIENCE\":\"Audience\",\"QOS\":\"QOS\",\"SELECTED_CONTENR\":\"Selected content\",\"WORD\":{\"POSITION\":\"Position\",\"TITLE\":\"Title\",\"STREAMS\":\"Streams\",\"STREAMS_APROX_NOTE\":\"aprox. last 20 min\",\"WATCHING_USERS_PER_SEC\":\"Watching users - per second\",\"WATCHING_USERS_PER_MIN\":\"Watching users - per minute\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n/***/ }),\n\n/***/ 1514:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_ALBUMS\":{\"TOP_LIST\":{\"TITLE\":\"Analytics - Albums\",\"TOP_LIST_HEADER\":\"Album list\",\"FILTERS\":\"Filters\",\"FILTERS_TITLE\":\"Title\",\"FILTERS_ARTIST\":\"Artist\",\"FILTERS_TAGS\":\"Tags\",\"TOP_LIST_COLUMN\":{\"TITLE\":\"Title\",\"ITEMS_IN_COLLECTION\":\"Songs in album\",\"SUMMARY\":\"Summary statistics\",\"VIEWS\":\"Songs listenings\",\"COMPLETE_VIEWS\":\"Full listenings of album\",\"USERS\":\"Listening users\"},\"ALBUM_DETAIL_HEADER\":\"Album details\",\"ALBUM_ITEM_STATS_HEADER\":\"Songs statistics\",\"ITEM_STATS_COLUMN\":{\"POSITION\":\"Pos\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"DURATION\":\"Length\",\"STATS_GROUP\":\"Last 30 days stats\",\"VIEWS\":\"Listenings\",\"USERS\":\"Users\",\"WATCHING_TIME\":\"Time\",\"AVG_WATCHING_TIME\":\"Time per list.\"},\"ALBUM_DETAILS_BUTTON\":\"More details\"},\"DETAILS_VIEW\":{\"TITLE\":\"Analytics - Album details\",\"CHART_TITLE\":\"Album views history\",\"BOX_VIEWS\":\"Songs listenings\",\"BOX_COMPLETE_VIEWS\":\"Album listenings\",\"BOX_USERS\":\"Listening users\",\"BOX_WATCHING_TIME\":\"Time per listening\",\"META_HEADER\":\"Album info\",\"META_REL_ID\":\"Rel. ID\",\"META_ADDED_AT\":\"Added at\",\"ITEM_STATS_HEADER\":\"Album songs\",\"ITEM_STATS_COL\":{\"POSITION\":\"Pos\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"DURATION\":\"Length\",\"STATS_GROUP\":\"For selected time range\",\"ITEM_VIEWS\":\"List.\",\"USERS\":\"Users\",\"WATCHING_TIME\":\"Time\",\"AVG_WATCHING_TIME\":\"Time per list.\"}},\"NO_DATA\":\"There is no data\"}}\n\n/***/ }),\n\n/***/ 1515:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_ALBUMS\":{\"TOP_LIST\":{\"TITLE\":\"Analytics - Albums\",\"TOP_LIST_HEADER\":\"Album list\",\"FILTERS\":\"Filters\",\"FILTERS_TITLE\":\"Title\",\"FILTERS_ARTIST\":\"Artist\",\"FILTERS_TAGS\":\"Tags\",\"TOP_LIST_COLUMN\":{\"TITLE\":\"Title\",\"ITEMS_IN_COLLECTION\":\"Songs in album\",\"SUMMARY\":\"Summary statistics\",\"VIEWS\":\"Songs listenings\",\"COMPLETE_VIEWS\":\"Full listenings of album\",\"USERS\":\"Listening users\"},\"ALBUM_DETAIL_HEADER\":\"Album details\",\"ALBUM_ITEM_STATS_HEADER\":\"Songs statistics\",\"ITEM_STATS_COLUMN\":{\"POSITION\":\"Pos\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"DURATION\":\"Length\",\"STATS_GROUP\":\"Last 30 days stats\",\"VIEWS\":\"Listenings\",\"USERS\":\"Users\",\"WATCHING_TIME\":\"Time\",\"AVG_WATCHING_TIME\":\"Time per list.\"},\"ALBUM_DETAILS_BUTTON\":\"More details\"},\"DETAILS_VIEW\":{\"TITLE\":\"Analytics - Album details\",\"CHART_TITLE\":\"Album views history\",\"BOX_VIEWS\":\"Songs listenings\",\"BOX_COMPLETE_VIEWS\":\"Album listenings\",\"BOX_USERS\":\"Listening users\",\"BOX_WATCHING_TIME\":\"Time per listening\",\"META_HEADER\":\"Album info\",\"META_REL_ID\":\"Rel. ID\",\"META_ADDED_AT\":\"Added at\",\"ITEM_STATS_HEADER\":\"Album songs\",\"ITEM_STATS_COL\":{\"POSITION\":\"Pos\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"DURATION\":\"Length\",\"STATS_GROUP\":\"For selected time range\",\"ITEM_VIEWS\":\"List.\",\"USERS\":\"Users\",\"WATCHING_TIME\":\"Time\",\"AVG_WATCHING_TIME\":\"Time per list.\"}},\"NO_DATA\":\"There is no data\"}}\n\n/***/ }),\n\n/***/ 1516:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_AUDIENCE\":{\"TITLE\":\"Analytics - Audience\",\"HEADER\":{\"1\":\"Changes in time for account\",\"2\":\"Monthly statistics\",\"3\":\"Heatmap\"},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\"},\"FOR_CURR_ACCOUNTING_MONTH\":\"For current accounting month\",\"FOR_PREV_ACCOUNTING_MONTH\":\"For previous accounting month\",\"VIEWS_OPEN_PERIOD\":\"open period\",\"VIEWS_PREVIOUS_PERIOD\":\"previous period\",\"SUBHEADER\":{\"1\":\"Trends for last current and previous day\",\"2\":\"Trends for last 30 days\",\"3\":\"In selected period\",\"4\":\"Views per user\",\"5\":\"Avg. watching time per user\",\"6\":\"open month, statistics not closed\"},\"WORD\":{\"HOUR\":\"Hour\",\"DAY\":\"Day\",\"MONTH\":\"Month\",\"WEEK\":\"Week\",\"YEAR\":\"Year\",\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TODAY\":\"Today\",\"YESTERDAY\":\"Yesterday\",\"LAST\":\"Last\"}}}\n\n/***/ }),\n\n/***/ 1517:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_AUDIENCE\":{\"TITLE\":\"Analytics - Audience\",\"HEADER\":{\"1\":\"Changes in time for account\",\"2\":\"Monthly statistics\",\"3\":\"Heatmap\"},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\"},\"FOR_CURR_ACCOUNTING_MONTH\":\"For current accounting month\",\"FOR_PREV_ACCOUNTING_MONTH\":\"For previous accounting month\",\"VIEWS_OPEN_PERIOD\":\"open period\",\"VIEWS_PREVIOUS_PERIOD\":\"previous period\",\"SUBHEADER\":{\"1\":\"Trends for last current and previous day\",\"2\":\"Trends for last 30 days\",\"3\":\"In selected period\",\"4\":\"Views per user\",\"5\":\"Avg. watching time per user\",\"6\":\"open month, statistics not closed\"},\"WORD\":{\"HOUR\":\"Hour\",\"DAY\":\"Day\",\"MONTH\":\"Month\",\"WEEK\":\"Week\",\"YEAR\":\"Year\",\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TODAY\":\"Today\",\"YESTERDAY\":\"Yesterday\",\"LAST\":\"Last\"}}}\n\n/***/ }),\n\n/***/ 1518:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_CONTENT\":{\"TITLE\":\"Analytics - Content\",\"HEADER\":{\"1\":\"Contents list\",\"2\":\"Content details\",\"3\":\"Views history\",\"4\":\"Engagement\"},\"SUBHEADER\":{\"1\":\"Views per user\",\"2\":\"Time per user\",\"3\":\"More details\",\"4\":\"Added to system\"},\"WORD\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TITLE\":\"Title\",\"SEARCH\":\"Search\",\"DURATION\":\"Duration\"},\"PLACEHOLDER\":{\"SEARCH\":\"Put title / id here and press Enter button\"},\"NO_DATA\":\"There is no data\"},\"ANALYTICS_CONTENT_DETAILS\":{\"TITLE\":\"Analytics - Content details\",\"HEADER\":{\"STATS_HISTORY\":\"Views history\",\"METADATA\":\"Content metadata\",\"ENGAGEMENT_RATE\":\"Engagement rate\"},\"WORD\":{\"RELATED_ID\":\"Related content ID\",\"CREATED_AT\":\"Added into system\",\"TAGS\":\"Tags\",\"TOTAL_VIEWS\":\"Views\",\"TOTAL_USERS\":\"Users\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"ENG_RATE_LIVE_STREAM_CLOCK_TYPE_WALL\":\"Wall clock time\",\"ENG_RATE_LIVE_STREAM_CLOCK_TYPE_CONTENT\":\"Content time\",\"ENG_RATE_SUMMARY_TOTAL_WATCHING_TIME\":\"Total watching time\",\"ENG_RATE_SUMMARY_AVG_WATCHING_TIME\":\"Time per view\"}}}\n\n/***/ }),\n\n/***/ 1519:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_CONTENT\":{\"TITLE\":\"Analytics - Content\",\"HEADER\":{\"1\":\"Contents list\",\"2\":\"Content details\",\"3\":\"Views history\",\"4\":\"Engagement\"},\"SUBHEADER\":{\"1\":\"Views per user\",\"2\":\"Time per user\",\"3\":\"More details\",\"4\":\"Added to system\"},\"WORD\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TITLE\":\"Title\",\"SEARCH\":\"Search\",\"DURATION\":\"Duration\"},\"PLACEHOLDER\":{\"SEARCH\":\"Put title / id here and press Enter button\"},\"NO_DATA\":\"There is no data\"},\"ANALYTICS_CONTENT_DETAILS\":{\"TITLE\":\"Analytics - Content details\",\"HEADER\":{\"STATS_HISTORY\":\"Views history\",\"METADATA\":\"Content metadata\",\"ENGAGEMENT_RATE\":\"Engagement rate\"},\"WORD\":{\"RELATED_ID\":\"Related content ID\",\"CREATED_AT\":\"Added into system\",\"TAGS\":\"Tags\",\"TOTAL_VIEWS\":\"Views\",\"TOTAL_USERS\":\"Users\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"ENG_RATE_LIVE_STREAM_CLOCK_TYPE_WALL\":\"Wall clock time\",\"ENG_RATE_LIVE_STREAM_CLOCK_TYPE_CONTENT\":\"Content time\",\"ENG_RATE_SUMMARY_TOTAL_WATCHING_TIME\":\"Total watching time\",\"ENG_RATE_SUMMARY_AVG_WATCHING_TIME\":\"Time per view\"}}}\n\n/***/ }),\n\n/***/ 1520:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_DASHBOARD\":{\"TITLE\":\"Analytics - Dashboard\",\"SUMMARY\":{\"DESKTOP_VS_MOBILE\":\"Desktop vs Mobile\",\"USERS_IN_MONTH\":\"Users in month\",\"VIEWS_IN_MONTH\":\"Views in month\",\"LAST_30D\":\"In last 30 days\"},\"HEADER\":{\"CHART_LAST_48H\":\"Day views\",\"CHART_LAST_48H_SUB\":\"Trends for last current and previous day\",\"CHART_LAST_30D\":\"Last 30 days stats\",\"CHART_LAST_30D_SUB\":\"Trends for last 30 days\",\"TOP_MEDIA_30D\":\"Top watched contents\",\"TOP_MEDIA_24H\":\"Rising contents\",\"TOP_MEDIA_24H_SUB\":\"Views in last 24 hours\",\"HEATMAP\":\"Traffic heatmap\",\"HEATMAP_SUB\":\"Views and users over hours and week days\"},\"TOP_MEDIA_TABLE\":{\"POSITION\":\"Positon\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"VIEWS\":\"Views\"}}}\n\n/***/ }),\n\n/***/ 1521:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_DASHBOARD\":{\"TITLE\":\"Analytics - Dashboard\",\"SUMMARY\":{\"DESKTOP_VS_MOBILE\":\"Desktop vs Mobile\",\"USERS_IN_MONTH\":\"Users in month\",\"VIEWS_IN_MONTH\":\"Views in month\",\"LAST_30D\":\"In last 30 days\"},\"HEADER\":{\"CHART_LAST_48H\":\"Day views\",\"CHART_LAST_48H_SUB\":\"Trends for last current and previous day\",\"CHART_LAST_30D\":\"Last 30 days stats\",\"CHART_LAST_30D_SUB\":\"Trends for last 30 days\",\"TOP_MEDIA_30D\":\"Top watched contents\",\"TOP_MEDIA_24H\":\"Rising contents\",\"TOP_MEDIA_24H_SUB\":\"Views in last 24 hours\",\"HEATMAP\":\"Traffic heatmap\",\"HEATMAP_SUB\":\"Views and users over hours and week days\"},\"TOP_MEDIA_TABLE\":{\"POSITION\":\"Positon\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"VIEWS\":\"Views\"}}}\n\n/***/ }),\n\n/***/ 1522:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_GEO\":{\"TITLE\":\"Analytics - Geo\",\"HEADER\":{\"MAP\":\"Map\",\"DETAILS\":\"Details\"},\"WORD\":{\"COUNTRY\":\"Country\",\"REGION\":\"Region\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"}},\"ANALYTICS_GEO_COUNTRY\":{\"TITLE\":\"Analytics - Geo for country\",\"TYPE\":{\"REGIONS\":\"Regions\",\"CITIES\":\"Cities\"},\"WORD\":{\"REGION\":\"Region\",\"CITY\":\"City\"}}}\n\n/***/ }),\n\n/***/ 1523:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_GEO\":{\"TITLE\":\"Analytics - Geo\",\"HEADER\":{\"MAP\":\"Map\",\"DETAILS\":\"Details\"},\"WORD\":{\"COUNTRY\":\"Country\",\"REGION\":\"Region\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"}},\"ANALYTICS_GEO_COUNTRY\":{\"TITLE\":\"Analytics - Geo for country\",\"TYPE\":{\"REGIONS\":\"Regions\",\"CITIES\":\"Cities\"},\"WORD\":{\"REGION\":\"Region\",\"CITY\":\"City\"}}}\n\n/***/ }),\n\n/***/ 1524:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"HEARTBEAT\":{\"WORD\":{\"MOBILE_VIEWS\":\"Mobile views\",\"DESKTOP_VIEWS\":\"Desktop views\",\"TABLET_VIEWS\":\"Tablet views\",\"MOBILE\":\"Mobile\",\"DESKTOP\":\"Desktop\",\"TABLET\":\"Tablet\",\"CURRENT\":\"Current\",\"AVG\":\"Average\",\"NETWORK_STATUS\":\"Network status\",\"ERROR_RATE\":\"Error rate\",\"BROWSERS_ERROR_RATE\":\"Browsers error rate\",\"OS_ERROR_RATE\":\"OS error rate\",\"MATERIAL\":\"Materials\",\"SERVICES\":\"Services\",\"FAILRUES\":\"Failrues\",\"STARTUP\":\"Sartup\",\"REBUFFER\":\"Rebuffer\",\"QUALITY\":\"Quality\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"COUNTRY\":\"Country\",\"REGION\":\"Region\",\"BROWSER\":\"Browser\",\"OS\":\"OS\"}}}\n\n/***/ }),\n\n/***/ 1525:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"HEARTBEAT\":{\"WORD\":{\"MOBILE_VIEWS\":\"Mobile views\",\"DESKTOP_VIEWS\":\"Desktop views\",\"TABLET_VIEWS\":\"Tablet views\",\"MOBILE\":\"Mobile\",\"DESKTOP\":\"Desktop\",\"TABLET\":\"Tablet\",\"CURRENT\":\"Current\",\"AVG\":\"Average\",\"NETWORK_STATUS\":\"Network status\",\"ERROR_RATE\":\"Error rate\",\"BROWSERS_ERROR_RATE\":\"Browsers error rate\",\"OS_ERROR_RATE\":\"OS error rate\",\"MATERIAL\":\"Materials\",\"SERVICES\":\"Services\",\"FAILRUES\":\"Failrues\",\"STARTUP\":\"Sartup\",\"REBUFFER\":\"Rebuffer\",\"QUALITY\":\"Quality\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"COUNTRY\":\"Country\",\"REGION\":\"Region\",\"BROWSER\":\"Browser\",\"OS\":\"OS\"}}}\n\n/***/ }),\n\n/***/ 1526:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_INFO\":{\"TITLE\":\"Analytics - Info\",\"CLIENT_TOKEN\":{\"TITLE\":\"clientToken for tracking scripts\",\"DESC\":\"clientToken field is used by trackins scripts for data collection. You can need it if you are using 3-rd party player with bradmax analytics statistics.\",\"DOC_LINK_TEXT\":\"More info about plugins you can find on page\"}}}\n\n/***/ }),\n\n/***/ 1527:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_INFO\":{\"TITLE\":\"Analytics - Info\",\"CLIENT_TOKEN\":{\"TITLE\":\"clientToken for tracking scripts\",\"DESC\":\"clientToken field is used by trackins scripts for data collection. You can need it if you are using 3-rd party player with bradmax analytics statistics.\",\"DOC_LINK_TEXT\":\"More info about plugins you can find on page\"}}}\n\n/***/ }),\n\n/***/ 1528:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_REALTIME\":{\"TITLE\":\"Analytics - Realtime\",\"AUDIENCE\":\"Audience\",\"TOP_CONTENT\":\"Top content\",\"SELECTED_CONTENR\":\"Selected content\",\"WORD\":{\"POSITION\":\"Position\",\"TITLE\":\"Title\",\"STREAMS\":\"Streams\",\"STREAMS_APROX_NOTE\":\"aprox. last 20 min\",\"WATCHING_USERS_PER_SEC\":\"Watching users - per second\",\"WATCHING_USERS_PER_MIN\":\"Watching users - per minute\",\"ID\":\"Id\",\"NAME\":\"Name\",\"USERS\":\"Users\",\"LAST_HOUR\":\"Last hour\",\"LAST_MINUTE\":\"Last minute\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n/***/ }),\n\n/***/ 1529:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_REALTIME\":{\"TITLE\":\"Analytics - Realtime\",\"AUDIENCE\":\"Audience\",\"TOP_CONTENT\":\"Top content\",\"SELECTED_CONTENR\":\"Selected content\",\"WORD\":{\"POSITION\":\"Position\",\"TITLE\":\"Title\",\"STREAMS\":\"Streams\",\"STREAMS_APROX_NOTE\":\"aprox. last 20 min\",\"WATCHING_USERS_PER_SEC\":\"Watching users - per second\",\"WATCHING_USERS_PER_MIN\":\"Watching users - per minute\",\"ID\":\"Id\",\"NAME\":\"Name\",\"USERS\":\"Users\",\"LAST_HOUR\":\"Last hour\",\"LAST_MINUTE\":\"Last minute\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n/***/ }),\n\n/***/ 1530:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_SAMPLED_TRAFFIC\":{\"VIEW\":{\"TITLE\":\"Analytics - Content Report\"},\"CRITERIA\":{\"TITLE\":\"Criteria\",\"DATE_RANGE\":{\"LABEL\":\"Date range\",\"SELECT\":\"select date range\"},\"COUNTRY\":{\"LABEL\":\"Country\",\"SELECT\":\"select country\"},\"REGION\":{\"LABEL\":\"Region\",\"SELECT\":\"select region\",\"DISABLED\":\"first select country\"},\"FILTERS\":{\"LABEL\":\"Filters\",\"SELECT\":\"filter data\"},\"TAGS\":{\"LABEL\":\"Search tags\",\"SELECT\":\"search tags\"}},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"SELECTED_CRITERIA\":\"according to selected criteria\"},\"HISTORY\":{\"TITLE\":\"User and views\",\"EXPORT_TO_CSV\":\"export to .csv\",\"GRANULARITY\":{\"HOUR\":\"hour\",\"DAY\":\"day\",\"WEEK\":\"week\",\"MONTH\":\"month\",\"YEAR\":\"year\"}},\"GEOLOCATION\":{\"TITLE\":\"Geolocation\",\"USERS\":\"users\",\"VIEWS\":\"views\",\"TOTAL_PERCENT\":\"total %\",\"MAP\":{\"BACK_TO_WORLD\":\"back to world map\",\"BACK_TO_COUNTRY\":\"back to country map\"},\"LIST\":{\"COUNTRIES\":\"country\",\"PROVINCES\":\"region\"},\"NODATA\":\"no data available for selected criteria\"},\"TAGS\":{\"TITLE\":\"Top viewed tags\",\"TAG\":\"tag\",\"VALUE\":\"value\",\"VIEWS\":\"views\",\"TOTAL_PERCENT\":\"total %\",\"NODATA\":\"no data available for selected criteria\",\"LOADING\":\"loading ...\"},\"--HEADER\":{\"1\":\"Criteria\",\"2\":\"\",\"3\":\"Report\"},\"--INFO\":{\"HEADER\":\"Information\",\"NOTE\":\"There is no available data, plase select criteria\"},\"--PLACEHOLDER\":{\"TAG\":\"Click to add tag\"},\"--SUBPAGES\":{\"POSITION\":\"Position\",\"SUBPAGE\":\"Page\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"},\"--SUBTITLES\":{\"VIEWS_AND_USERS_HISTORY\":\"Views and users history\",\"MAP_VIEWS\":\"Map - views\",\"DETAILS_GEOLOCATION\":\"Details - geolocation\",\"VIEWS_PER_GENDER\":\"Views per gender\",\"VIEWS_PER_AGE_SEGMENT\":\"Views per age segment\",\"TAGS\":\"Tags\"},\"--WORD\":{\"REPORT_TYPE\":\"Type\",\"GRANULARITY_SELECTION\":\"Granularity\",\"DATE_RANGE_SELECTION\":\"Date range\",\"GEO_SELECTION\":\"Geolocation\",\"COUNTRY_SELECTION\":\"Country\",\"REGION_SELECTION\":\"Region\",\"CITY_SELECTION\":\"City\",\"REGION_DISABLED\":\"First select country\",\"CITY_DISABLED\":\"First select region\",\"TAG_SELECTION\":\"Tags\",\"GENDER_SELECTION\":\"Gender\",\"DEMOGRAPHY_SELECTION\":\"Demography\",\"AGE_RANGE_SELECTION\":\"Age range\",\"MALE\":\"Male\",\"FEMALE\":\"Female\",\"OTHER\":\"Other\",\"UNDEFINED\":\"Undefined\",\"GENERATE\":\"Generate report\",\"NO_DATA\":\"No data\",\"VIEWS\":\"Views\",\"TAG\":\"Tag\",\"NO_DATA_FOR_TAGS_LIST\":\"No tags for selected criteria\"},\"--REPORT_TYPE\":{\"REPORT\":\"Report\",\"GEOLOCATION\":\"Geolocation\",\"TAGS\":\"Tags\",\"GENDER\":\"Gender\",\"AGE\":\"Age\"},\"--GEO_GRANULARITY\":{\"REGION\":\"Region\",\"CITY\":\"City\"}}}\n\n/***/ }),\n\n/***/ 1531:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_SAMPLED_TRAFFIC\":{\"TITLE\":\"Analytics - Content Report\",\"CRITERIA\":{\"TITLE\":\"Criteria\",\"DATE_RANGE\":{\"LABEL\":\"Date range\",\"SELECT\":\"select date range\"},\"COUNTRY\":{\"LABEL\":\"Country\",\"SELECT\":\"select country\"},\"REGION\":{\"LABEL\":\"Region\",\"SELECT\":\"select region\",\"DISABLED\":\"first select country\"},\"FILTERS\":{\"LABEL\":\"Filters\",\"SELECT\":\"filter data\"},\"TAGS\":{\"LABEL\":\"Search tags\",\"SELECT\":\"search tags\"}},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"SELECTED_CRITERIA\":\"according to selected criteria\"},\"HISTORY\":{\"TITLE\":\"User and views\",\"EXPORT_TO_CSV\":\"export to .csv\",\"GRANULARITY\":{\"HOUR\":\"hour\",\"DAY\":\"day\",\"WEEK\":\"week\",\"MONTH\":\"month\",\"YEAR\":\"year\"}},\"GEOLOCATION\":{\"TITLE\":\"Geolocation\",\"USERS\":\"users\",\"VIEWS\":\"views\",\"TOTAL_PERCENT\":\"total %\",\"MAP\":{\"BACK_TO_WORLD\":\"back to world map\",\"BACK_TO_COUNTRY\":\"back to country map\"},\"LIST\":{\"COUNTRIES\":\"country\",\"PROVINCES\":\"region\"},\"NODATA\":\"no data available for selected criteria\"},\"TAGS\":{\"TITLE\":\"Tags\",\"TAG\":\"tag\",\"VALUE\":\"value\",\"VIEWS\":\"views\",\"TOTAL_PERCENT\":\"total %\",\"NODATA\":\"no data available for selected criteria\",\"LOADING\":\"loading ...\"},\"--HEADER\":{\"1\":\"Criteria\",\"2\":\"\",\"3\":\"Report\"},\"--INFO\":{\"HEADER\":\"Information\",\"NOTE\":\"There is no available data, plase select criteria\"},\"--PLACEHOLDER\":{\"TAG\":\"Click to add tag\"},\"--SUBPAGES\":{\"POSITION\":\"Position\",\"SUBPAGE\":\"Page\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"},\"--SUBTITLES\":{\"VIEWS_AND_USERS_HISTORY\":\"Views and users history\",\"MAP_VIEWS\":\"Map - views\",\"DETAILS_GEOLOCATION\":\"Details - geolocation\",\"VIEWS_PER_GENDER\":\"Views per gender\",\"VIEWS_PER_AGE_SEGMENT\":\"Views per age segment\",\"TAGS\":\"Tags\"},\"--WORD\":{\"REPORT_TYPE\":\"Type\",\"GRANULARITY_SELECTION\":\"Granularity\",\"DATE_RANGE_SELECTION\":\"Date range\",\"GEO_SELECTION\":\"Geolocation\",\"COUNTRY_SELECTION\":\"Country\",\"REGION_SELECTION\":\"Region\",\"CITY_SELECTION\":\"City\",\"REGION_DISABLED\":\"First select country\",\"CITY_DISABLED\":\"First select region\",\"TAG_SELECTION\":\"Tags\",\"GENDER_SELECTION\":\"Gender\",\"DEMOGRAPHY_SELECTION\":\"Demography\",\"AGE_RANGE_SELECTION\":\"Age range\",\"MALE\":\"Male\",\"FEMALE\":\"Female\",\"OTHER\":\"Other\",\"UNDEFINED\":\"Undefined\",\"GENERATE\":\"Generate report\",\"NO_DATA\":\"No data\",\"VIEWS\":\"Views\",\"TAG\":\"Tag\",\"NO_DATA_FOR_TAGS_LIST\":\"No tags for selected criteria\"},\"--REPORT_TYPE\":{\"REPORT\":\"Report\",\"GEOLOCATION\":\"Geolocation\",\"TAGS\":\"Tags\",\"GENDER\":\"Gender\",\"AGE\":\"Age\"},\"--GEO_GRANULARITY\":{\"REGION\":\"Region\",\"CITY\":\"City\"}}}\n\n/***/ }),\n\n/***/ 1532:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_ST_RAPORT\":{\"TITLE\":\"Analytics - Content Report\",\"HEADER\":{\"1\":\"Criteria\",\"2\":\"\",\"3\":\"Report\"},\"INFO\":{\"HEADER\":\"Information\",\"NOTE\":\"There is no available data, plase select criteria\"},\"PLACEHOLDER\":{\"TAG\":\"Click to add tag\"},\"SUBPAGES\":{\"POSITION\":\"Position\",\"SUBPAGE\":\"Page\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"},\"SUBTITLES\":{\"VIEWS_AND_USERS_HISTORY\":\"Views and users history\",\"MAP_VIEWS\":\"Map - views\",\"DETAILS_GEOLOCATION\":\"Details - geolocation\",\"VIEWS_PER_GENDER\":\"Views per gender\",\"VIEWS_PER_AGE_SEGMENT\":\"Views per age segment\",\"TAGS\":\"Tags\"},\"WORD\":{\"REPORT_TYPE\":\"Type\",\"GRANULARITY_SELECTION\":\"Granularity\",\"DATE_RANGE_SELECTION\":\"Date range\",\"GEO_SELECTION\":\"Geolocation\",\"COUNTRY_SELECTION\":\"Country\",\"REGION_SELECTION\":\"Region\",\"CITY_SELECTION\":\"City\",\"REGION_DISABLED\":\"First select country\",\"CITY_DISABLED\":\"First select region\",\"TAG_SELECTION\":\"Tags\",\"GENDER_SELECTION\":\"Gender\",\"DEMOGRAPHY_SELECTION\":\"Demography\",\"AGE_RANGE_SELECTION\":\"Age range\",\"MALE\":\"Male\",\"FEMALE\":\"Female\",\"OTHER\":\"Other\",\"UNDEFINED\":\"Undefined\",\"GENERATE\":\"Generate report\",\"NO_DATA\":\"No data\",\"VIEWS\":\"Views\",\"TAG\":\"Tag\",\"NO_DATA_FOR_TAGS_LIST\":\"No tags for selected criteria\"},\"REPORT_TYPE\":{\"REPORT\":\"Report\",\"GEOLOCATION\":\"Geolocation\",\"TAGS\":\"Tags\",\"GENDER\":\"Gender\",\"AGE\":\"Age\"},\"GEO_GRANULARITY\":{\"REGION\":\"Region\",\"CITY\":\"City\"},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"SELECTED_CRITERIA\":\"according to selected criteria\"}}}\n\n/***/ }),\n\n/***/ 1533:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_ST_RAPORT\":{\"TITLE\":\"Analytics - Content Report\",\"HEADER\":{\"1\":\"Criteria\",\"2\":\"\",\"3\":\"Report\"},\"INFO\":{\"HEADER\":\"Information\",\"NOTE\":\"There is no available data, plase select criteria\"},\"PLACEHOLDER\":{\"TAG\":\"Click to add tag\"},\"SUBPAGES\":{\"POSITION\":\"Position\",\"SUBPAGE\":\"Page\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"},\"SUBTITLES\":{\"VIEWS_AND_USERS_HISTORY\":\"Views and users history\",\"MAP_VIEWS\":\"Map - views\",\"DETAILS_GEOLOCATION\":\"Details - geolocation\",\"VIEWS_PER_GENDER\":\"Views per gender\",\"VIEWS_PER_AGE_SEGMENT\":\"Views per age segment\",\"TAGS\":\"Tags\"},\"WORD\":{\"REPORT_TYPE\":\"Type\",\"GRANULARITY_SELECTION\":\"Granularity\",\"DATE_RANGE_SELECTION\":\"Date range\",\"GEO_SELECTION\":\"Geolocation\",\"COUNTRY_SELECTION\":\"Country\",\"REGION_SELECTION\":\"Region\",\"CITY_SELECTION\":\"City\",\"REGION_DISABLED\":\"First select country\",\"CITY_DISABLED\":\"First select region\",\"TAG_SELECTION\":\"Tags\",\"GENDER_SELECTION\":\"Gender\",\"DEMOGRAPHY_SELECTION\":\"Demography\",\"AGE_RANGE_SELECTION\":\"Age range\",\"MALE\":\"Male\",\"FEMALE\":\"Female\",\"OTHER\":\"Other\",\"UNDEFINED\":\"Undefined\",\"GENERATE\":\"Generate report\",\"NO_DATA\":\"No data\",\"VIEWS\":\"Views\",\"TAG\":\"Tag\",\"NO_DATA_FOR_TAGS_LIST\":\"No tags for selected criteria\"},\"REPORT_TYPE\":{\"REPORT\":\"Report\",\"GEOLOCATION\":\"Geolocation\",\"TAGS\":\"Tags\",\"GENDER\":\"Gender\",\"AGE\":\"Age\"},\"GEO_GRANULARITY\":{\"REGION\":\"Region\",\"CITY\":\"City\"},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"SELECTED_CRITERIA\":\"according to selected criteria\"}}}\n\n/***/ }),\n\n/***/ 1534:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_TAG_SERVICE\":{\"SELECT_EXISTING_TIP\":\"Please choose tag on list or type it in exact form\",\"PLACEHOLDER\":\"Find additional tag\",\"INITIAL_PLACEHOLDER\":\"Find and select tags\"}}\n\n/***/ }),\n\n/***/ 1535:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_TAG_SERVICE\":{\"SELECT_EXISTING_TIP\":\"Please choose tag on list or type it in exact form\",\"PLACEHOLDER\":\"Find additional tag\",\"INITIAL_PLACEHOLDER\":\"Find and select tags\"}}\n\n/***/ }),\n\n/***/ 1536:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_TECHNOLOGY\":{\"TITLE\":\"Analytics - Technology\",\"DEVICES\":\"Devices\",\"OS\":\"Operating systems\",\"BROWSERS\":\"Browsers\",\"LABEL_TOTAL_VIEWS\":\"Total views\",\"TABLE\":{\"OS\":\"OS\",\"VIEWS\":\"Views\",\"BROWSER\":\"Browser\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n/***/ }),\n\n/***/ 1537:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_TECHNOLOGY\":{\"TITLE\":\"Analytics - Technology\",\"DEVICES\":\"Devices\",\"OS\":\"Operating systems\",\"BROWSERS\":\"Browsers\",\"LABEL_TOTAL_VIEWS\":\"Total views\",\"TABLE\":{\"OS\":\"OS\",\"VIEWS\":\"Views\",\"BROWSER\":\"Browser\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n/***/ }),\n\n/***/ 1538:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_TOPCONTENT\":{\"TITLE\":\"Analytics - Top viewed content\",\"HEADER\":{\"1\":\"Contents list\",\"2\":\"Content details\",\"3\":\"Views history\",\"4\":\"Engagement\"},\"SUBHEADER\":{\"1\":\"Views per user\",\"2\":\"Time per user\",\"3\":\"More details\",\"4\":\"Added to system\"},\"WORD\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TITLE\":\"Title\",\"SEARCH\":\"Search\",\"DURATION\":\"Duration\",\"DATE_RANGE_SELECTION\":\"Top views for last:\",\"ALL_TIME\":\"All time\",\"POSITION\":\"Pos\",\"HOUR\":\"Hour\",\"24H\":\"24h\",\"7D\":\"7d\",\"30D\":\"30d\",\"365D\":\"365d\"},\"NO_DATA\":\"There is no data\"}}\n\n/***/ }),\n\n/***/ 1539:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"ANALYTICS_TOPCONTENT\":{\"TITLE\":\"Analytics - Top viewed content\",\"HEADER\":{\"1\":\"Contents list\",\"2\":\"Content details\",\"3\":\"Views history\",\"4\":\"Engagement\"},\"SUBHEADER\":{\"1\":\"Views per user\",\"2\":\"Time per user\",\"3\":\"More details\",\"4\":\"Added to system\"},\"WORD\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TITLE\":\"Title\",\"SEARCH\":\"Search\",\"DURATION\":\"Duration\",\"DATE_RANGE_SELECTION\":\"Top views for last:\",\"ALL_TIME\":\"All time\",\"POSITION\":\"Pos\",\"HOUR\":\"Hour\",\"24H\":\"24h\",\"7D\":\"7d\",\"30D\":\"30d\",\"365D\":\"365d\"},\"NO_DATA\":\"There is no data\"}}\n\n/***/ }),\n\n/***/ 1540:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"DATERANGEPICKER\":{\"RANGE\":{\"LAST_7DAYS\":\"Last 7 days\",\"LAST_30DAYS\":\"Last 30 days\",\"LAST_MONTH\":\"Last month\",\"CURRENT_MONTH\":\"Current month\",\"CURRENT_WEEK\":\"Current week\",\"LAST_WEEK\":\"Last week\"},\"LABEL\":{\"CANCEL\":\"Cancel\",\"APPLY\":\"Apply\",\"WEEK\":\"Week\",\"CUSTOM_RANGE\":\"Custom range\"},\"WORD\":{\"WEEK\":\"week\",\"WEEKS\":\"weeks\",\"LAST\":\"Last\"}}}\n\n/***/ }),\n\n/***/ 1541:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"DATERANGEPICKER\":{\"RANGE\":{\"LAST_7DAYS\":\"Ostatnie 7 dni\",\"LAST_30DAYS\":\"Ostatnie 30 dni\",\"LAST_MONTH\":\"Ostatni miesiąc\",\"CURRENT_MONTH\":\"Bieżacy miesiąc\",\"CURRENT_WEEK\":\"Bieżacy tydzień\",\"LAST_WEEK\":\"Ostatni tydzień\"},\"LABEL\":{\"CANCEL\":\"Anuluj\",\"APPLY\":\"Zastosuj\",\"WEEK\":\"Tydzień\",\"CUSTOM_RANGE\":\"Własny zakres\"},\"WORD\":{\"WEEK\":\"week\",\"WEEKS\":\"weeks\",\"LAST\":\"Last\"}}}\n\n/***/ }),\n\n/***/ 1542:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"CONTACT\":{\"TITLE\":\"Contact us\",\"MESSAGE\":{\"ERROR\":\"It was not possible to send your message. Please try again.\",\"THANKS\":{\"TITLE\":\"Thank you for your interest!\",\"P1\":\"We will contact you as soon as possible with a reply.\",\"P2\":\"See you soon! =)\"}},\"BUTTON\":{\"CLOSE\":\"close\",\"SEND\":\"Send\",\"AGAIN\":\"Write Another Message\"},\"PLACEHOLDER\":{\"NAME\":\"Name\",\"EMAIL\":\"Email\",\"MESSAGE\":\"Type your message here...\"}}}\n\n/***/ }),\n\n/***/ 1543:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"CONTACT\":{\"TITLE\":\"Contact us\",\"MESSAGE\":{\"ERROR\":\"It was not possible to send your message. Please try again.\",\"THANKS\":{\"TITLE\":\"Thank you for your interest!\",\"P1\":\"We will contact you as soon as possible with a reply.\",\"P2\":\"See you soon! =)\"}},\"BUTTON\":{\"CLOSE\":\"close\",\"SEND\":\"Send\",\"AGAIN\":\"Write Another Message\"},\"PLACEHOLDER\":{\"NAME\":\"Name\",\"EMAIL\":\"Email\",\"MESSAGE\":\"Type your message here...\"}}}\n\n/***/ }),\n\n/***/ 1544:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"NAME\":\"Bradmax Admin - english version\",\"MENU\":{\"USER\":{\"ACCOUNT\":\"Account\",\"LOGOUT\":\"Log out\"},\"MAIN\":{\"NAME\":\"navigation\",\"PRODUCTS\":\"Products\",\"ACCOUNT\":{\"NAME\":\"Account\",\"SUBSCRIPTIONS\":\"Subscriptions\",\"DETAILS\":\"Details\",\"INVOICES\":\"Invoices\",\"PAYMENTS\":\"Payments\"},\"ANALYTICS\":{\"NAME\":\"Analytics\",\"DASHBOARD\":\"Dashboard\",\"REALTIME\":\"Realtime\",\"AUDIENCE\":\"Audience\",\"TOP_CONTENT\":\"Top content\",\"CONTENT\":\"Content\",\"SELECTED_CONTENT\":\"Selected content\",\"GEO\":\"Geo\",\"GEO_COUNTRY\":\"Selected country\",\"TECHNOLOGY\":\"Technology\",\"QOS\":\"QOS\",\"ALBUMS\":\"Albums\",\"HEARTBEAT\":\"Hearbeat\",\"INFO\":\"Info\"},\"PLAYER_CONFIG\":\"Players List\",\"UPLOAD\":\"Upload\",\"MEDIA\":\"Media\",\"SETTINGS\":\"Settings\",\"CHANGELOG\":\"Changelog\",\"HELP\":{\"NAME\":\"Help\",\"DOCS\":\"Player documentation\",\"TUTORIAL\":\"Player tutorial\",\"PLAYERS_PLUGINS_DOCS\":\"Bradmax analytics players plugins\"},\"TERMS_AND_CONDITIONS\":\"Terms of use\",\"EU_FUNDS\":\"EU Funds\"}},\"MODAL\":{\"LOGOUT\":{\"ASK\":\"<strong>Do you want to log out ?</strong>\",\"YES\":\"log out\",\"NO\":\"stay\"},\"GDPR_INFO\":\"Hello,\\n\\nAt Bradmax, we are constantly striving to provide the best protection for your personal information. It is also important to us that the information regarding the manner in which we use and process them are transparent to you. That is why we are introducing a new privacy policy that meets both of these assumptions and, at the same time, meets the requirements of the General Data Protection Regulation (GDPR) (EU) 2016/679.\\n\\nFamiliarise yourself with the information clause in which we indicate how the personal data you provide will be processed.\\n\\nMay the peace be with you,\\nBradmax Team\\n\\n\\n\\nThe Bradmax information clause\\n<strong>Who is the administrator of your personal data?</strong>\\n\\nThe administrator, which is the entity deciding how your personal data will be used, is Bradmax pinok.io Sp. z o.o. Sp. k. (hereinafter \\\"Bradmax\\\") with registered office and address in Warsaw at  Jana Pawła II Avenue 61/164.\\n\\n<strong>Who can you contact for more information on the processing of personal data by Bradmax?</strong>\\nIf you have questions related to the processing of your personal data on Bradmax websites, you can contact a Bradmax representative using the contact details provided: office@bradmax.com\\n\\n<strong>Where does Bradmax have your data?</strong>\\nWe have received your personal information from you during the registration of your Bradmax account, as well as later, as a result of your activity on Bradmax websites. Information about you also comes from cookies collected by Bradmax and similar mechanisms of recording information in users' devices of the sites, as long as they allow you to identify you.\\n\\nIn addition, we receive information about you from payment operators, that is entities that enable you to make online payments for services purchased from Bradmax. We receive information from them about the status of your payment for the service.\\n\\nMore information on the scope of personal data being processed and the cookie files used can be found in the Privacy Policy.\\n\\n\\n\\n<strong>What is the purpose and basis of the processing of your personal data by Bradmax?</strong>\\n\\nBradmax processes your personal data to enable you to use Bradmax services, provide support for your Bradmax account and contact us, provide functionality of services offered, including technical problems, fulfill agreements with you, handle complaints about the operation of Bradmax services, perform duties resulting from legal provisions, including tax and accounting regulations, enable payment for services, monitor your activity on these websites and conduct research and analyses related to it, conduct direct marketing activities, including those related to the organisation of competitions and promotional campaigns.\\n\\nData that identifies you may also be used to match the content and ads displayed to your interests, to measure the quality and effectiveness of these activities, to improve the content and services provided, to inform about the content and services of Bradmax and our Partners (\\\"Partners\\\"), which list is available here, sharing on advertising space, ensuring security of information processing, IT systems management and for protection or redress purposes, for statistical and archival purposes, as well as to ensure accountability of legal obligations.\\n\\nBradmax is entitled to process your personal data, because it is necessary to perform the agreement (concluded with you by accepting the terms of service), as well as on the basis of law, e.g. when these laws require us to process your data for tax purposes and accounting (provisions of the Tax Ordinance Act and the Accounting Act).\\n\\nThe legal basis for the processing of personal data is also the legitimate interest of Bradmax. It includes improving services, ensuring their best quality and informing users about them, providing support for your Bradmax account, conducting research and analysis, conducting direct marketing, protecting or pursuing claims, creating statistics and ensuring accountability. Displaying advertisements tailored to your interests on websites, thanks to the automated comparison of your interests and preferences with the model interests and preferences of Internet users (profiling), allows you to cover the costs of services provided free of charge. In some of our services, the basis for processing personal data may be consent, which you will always be informed about. You can manage your consent, including withdrawal.\\n\\nPartners, as personal data controllers separate from Bradmax, process your personal data based on their legitimate interest or your consent.\\n\\n\\n\\n<strong>Do you have to provide Bradmax with your personal details?</strong>\\n\\nProviding personal data by you is a statutory requirement only to the extent resulting from the provisions of tax or accounting law, when we settle payments received from you. However, the requirement to conclude a contract with Bradmax (setting up a Bradmax account) is to provide the name of your company and e-mail address.\\n\\nIf you do not give us all this information about yourself, we will not be able to set up a Bradmax account for you, which will limit your ability to use some of the Bradmax services. In the remaining scope, providing data is voluntary.\\n\\n<strong>What are your rights to Bradmax regarding the data being processed?</strong>\\n\\nYou can request from Bradmax: access to your personal data, rectification, deletion, processing restrictions, portability, and non-automated decision making, including profiling, and you have the right to object to the processing of your personal data.\\n\\nYou can do these permissions when:\\n\\nregarding the request for data rectification: the data is incorrect or incomplete;\\nin relation to a request to delete data: the data is no longer necessary for the purposes for which it was collected by Bradmax; you will withdraw your consent to data processing; you object to the processing of this data beforehand; data is processed unlawfully; data should be deleted in order to fulfil the obligation arising from the law; or data have been collected in connection with the provision of electronic services offered to the child;\\nregarding the request to limit the processing of data: data is incorrect - for a period allowing Bradmax to check the accuracy of your data; the data is processed unlawfully, but you will not want to be removed; Your data is no longer needed by Bradmax but you may need it for defending or pursuing claims; or you object to the processing of the data - pending the determination of whether the legitimate grounds prevail over the basis of the opposition;\\nin relation to a request for transfer of data: the processing of data is carried out on the basis of your consent or contract concluded with you and this processing is carried out automatically.\\nYou have the right to lodge a complaint regarding the processing of your personal data by Bradmax to the President of the Office for Personal Data Protection.\\n\\n<strong>In what situations can you oppose the processing of your data?</strong>\\n\\nYou have the right to object to the processing of personal data when:\\n\\nthe processing of personal data takes place on the basis of a legitimate interest, or for statistical purposes, and the opposition is justified by your special situation,\\npersonal data are processed for direct marketing purposes.\\n\\n<strong>Who does Bradmax share your personal information with?</strong>\\n\\nBradmax, in principle, does not disclose your personal data to third parties, except in cases where we have a legal basis, including at the request of entities authorised by law, or when we use the services of Bradmax supporters, eg entrepreneurs providing hosting of our services , software maintenance support.\\n\\nDue to the need to prevent certain functions on Bradmax services from Internet robots, we use the Google reCAPTCH mechanism to sporadically investigate whether the behaviour of website users is not characteristic of robotic behaviour. For this reason, Bradmax may disclose Google Inc. the IP address of your computer.\\n\\n<strong>How long does Bradmax store your personal data?</strong>\\n\\nBradmax stores your personal data for the duration of the contract concluded with you, as well as - after its completion - for the period during which it is possible to pursue claims in connection with the performance of the contract, a maximum of 10 years from the date of termination of the contract. In addition, Bradmax stores your data for tax and accounting purposes for a period of 5 years after the end of the year in which the financial event took place.\\n\\nBradmax stores your personal data for marketing purposes for the duration of the legal basis and the purpose of data processing.\\n\\nBradmax stores data for statistical and archival purposes for the duration of the existence of the legal basis and the purpose of data processing.\\nDoes Bradmax transfer your data to countries outside the European Economic Area?\\nSome of our service providers may store website users' data outside of the European Economic Area. In such cases, Users' data may be stored in countries that provide an adequate level of protection of personal data, or in countries that do not provide such level. In the latter case, Bradmax secures your data by entering into contracts with Bradmax service providers containing so-called Standard Contractual Clauses accepted by the European Commission, which guarantee adequate protection of Users' data in third countries, use the EU - US Privacy Shield program (eg in the case of Google reCAPTCHA) or other grounds for the transfer of personal data.\\n\\n<strong>Does Bradmax profile your personal data or process it automatically in a way that affects your rights?</strong>\\n\\nProfiling of personal data is understood as the automated processing of your data, which is based on their use to assess certain factors, in particular to analyse or forecast aspects regarding the effects of your work, economic situation, health, personal preferences, interests, credibility, behaviour, location or movement.\\nBased on monitoring your activity on Bradmax websites, we perform analyses that result in:\\noptimisation of websites (including appearance, content, offers), in terms of user preferences;\\nrecommending content that matches your viewing profile;\\nthe emission of advertisements addressed to the groups of recipients to which you have been qualified;\\nrecommending offers tailored to your viewing profile and behaviours.\\n \\nHowever, we do not use this data for automated decision-making with you that could affect your rights.\"}}\n\n/***/ }),\n\n/***/ 1545:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"NAME\":\"Bradmax Admin - english version\",\"MENU\":{\"USER\":{\"ACCOUNT\":\"Account\",\"LOGOUT\":\"Log out\"},\"MAIN\":{\"NAME\":\"navigation\",\"PRODUCTS\":\"Products\",\"ACCOUNT\":{\"NAME\":\"Account\",\"SUBSCRIPTIONS\":\"Subscriptions\",\"DETAILS\":\"Details\",\"INVOICES\":\"Invoices\",\"PAYMENTS\":\"Payments\"},\"ANALYTICS\":{\"NAME\":\"Analytics\",\"DASHBOARD\":\"Dashboard\",\"REALTIME\":\"Realtime\",\"AUDIENCE\":\"Audience\",\"TOP_CONTENT\":\"Top content\",\"CONTENT\":\"Content\",\"SELECTED_CONTENT\":\"Selected content\",\"GEO\":\"Geo\",\"GEO_COUNTRY\":\"Selected country\",\"TECHNOLOGY\":\"Technology\",\"QOS\":\"QOS\",\"ALBUMS\":\"Albums\",\"HEARTBEAT\":\"Hearbeat\",\"INFO\":\"Info\"},\"PLAYER_CONFIG\":\"Players List\",\"UPLOAD\":\"Upload\",\"MEDIA\":\"Media\",\"SETTINGS\":\"Settings\",\"CHANGELOG\":\"Changelog\",\"HELP\":{\"NAME\":\"Help\",\"DOCS\":\"Player documentation\",\"TUTORIAL\":\"Player tutorial\",\"PLAYERS_PLUGINS_DOCS\":\"Bradmax analytics players plugins\"},\"TERMS_AND_CONDITIONS\":\"Terms of use\",\"EU_FUNDS\":\"EU Funds\"}},\"MODAL\":{\"LOGOUT\":{\"ASK\":\"<strong>Do you want to log out ?</strong>\",\"YES\":\"log out\",\"NO\":\"stay\"},\"GDPR_INFO\":\"Hello,\\n\\nAt Bradmax, we are constantly striving to provide the best protection for your personal information. It is also important to us that the information regarding the manner in which we use and process them are transparent to you. That is why we are introducing a new privacy policy that meets both of these assumptions and, at the same time, meets the requirements of the General Data Protection Regulation (GDPR) (EU) 2016/679.\\n\\nFamiliarise yourself with the information clause in which we indicate how the personal data you provide will be processed.\\n\\nMay the peace be with you,\\nBradmax Team\\n\\n\\n\\nThe Bradmax information clause\\n<strong>Who is the administrator of your personal data?</strong>\\n\\nThe administrator, which is the entity deciding how your personal data will be used, is Bradmax pinok.io Sp. z o.o. Sp. k. (hereinafter \\\"Bradmax\\\") with registered office and address in Warsaw at  Jana Pawła II Avenue 61/164.\\n\\n<strong>Who can you contact for more information on the processing of personal data by Bradmax?</strong>\\nIf you have questions related to the processing of your personal data on Bradmax websites, you can contact a Bradmax representative using the contact details provided: office@bradmax.com\\n\\n<strong>Where does Bradmax have your data?</strong>\\nWe have received your personal information from you during the registration of your Bradmax account, as well as later, as a result of your activity on Bradmax websites. Information about you also comes from cookies collected by Bradmax and similar mechanisms of recording information in users' devices of the sites, as long as they allow you to identify you.\\n\\nIn addition, we receive information about you from payment operators, that is entities that enable you to make online payments for services purchased from Bradmax. We receive information from them about the status of your payment for the service.\\n\\nMore information on the scope of personal data being processed and the cookie files used can be found in the Privacy Policy.\\n\\n\\n\\n<strong>What is the purpose and basis of the processing of your personal data by Bradmax?</strong>\\n\\nBradmax processes your personal data to enable you to use Bradmax services, provide support for your Bradmax account and contact us, provide functionality of services offered, including technical problems, fulfill agreements with you, handle complaints about the operation of Bradmax services, perform duties resulting from legal provisions, including tax and accounting regulations, enable payment for services, monitor your activity on these websites and conduct research and analyses related to it, conduct direct marketing activities, including those related to the organisation of competitions and promotional campaigns.\\n\\nData that identifies you may also be used to match the content and ads displayed to your interests, to measure the quality and effectiveness of these activities, to improve the content and services provided, to inform about the content and services of Bradmax and our Partners (\\\"Partners\\\"), which list is available here, sharing on advertising space, ensuring security of information processing, IT systems management and for protection or redress purposes, for statistical and archival purposes, as well as to ensure accountability of legal obligations.\\n\\nBradmax is entitled to process your personal data, because it is necessary to perform the agreement (concluded with you by accepting the terms of service), as well as on the basis of law, e.g. when these laws require us to process your data for tax purposes and accounting (provisions of the Tax Ordinance Act and the Accounting Act).\\n\\nThe legal basis for the processing of personal data is also the legitimate interest of Bradmax. It includes improving services, ensuring their best quality and informing users about them, providing support for your Bradmax account, conducting research and analysis, conducting direct marketing, protecting or pursuing claims, creating statistics and ensuring accountability. Displaying advertisements tailored to your interests on websites, thanks to the automated comparison of your interests and preferences with the model interests and preferences of Internet users (profiling), allows you to cover the costs of services provided free of charge. In some of our services, the basis for processing personal data may be consent, which you will always be informed about. You can manage your consent, including withdrawal.\\n\\nPartners, as personal data controllers separate from Bradmax, process your personal data based on their legitimate interest or your consent.\\n\\n\\n\\n<strong>Do you have to provide Bradmax with your personal details?</strong>\\n\\nProviding personal data by you is a statutory requirement only to the extent resulting from the provisions of tax or accounting law, when we settle payments received from you. However, the requirement to conclude a contract with Bradmax (setting up a Bradmax account) is to provide the name of your company and e-mail address.\\n\\nIf you do not give us all this information about yourself, we will not be able to set up a Bradmax account for you, which will limit your ability to use some of the Bradmax services. In the remaining scope, providing data is voluntary.\\n\\n<strong>What are your rights to Bradmax regarding the data being processed?</strong>\\n\\nYou can request from Bradmax: access to your personal data, rectification, deletion, processing restrictions, portability, and non-automated decision making, including profiling, and you have the right to object to the processing of your personal data.\\n\\nYou can do these permissions when:\\n\\nregarding the request for data rectification: the data is incorrect or incomplete;\\nin relation to a request to delete data: the data is no longer necessary for the purposes for which it was collected by Bradmax; you will withdraw your consent to data processing; you object to the processing of this data beforehand; data is processed unlawfully; data should be deleted in order to fulfil the obligation arising from the law; or data have been collected in connection with the provision of electronic services offered to the child;\\nregarding the request to limit the processing of data: data is incorrect - for a period allowing Bradmax to check the accuracy of your data; the data is processed unlawfully, but you will not want to be removed; Your data is no longer needed by Bradmax but you may need it for defending or pursuing claims; or you object to the processing of the data - pending the determination of whether the legitimate grounds prevail over the basis of the opposition;\\nin relation to a request for transfer of data: the processing of data is carried out on the basis of your consent or contract concluded with you and this processing is carried out automatically.\\nYou have the right to lodge a complaint regarding the processing of your personal data by Bradmax to the President of the Office for Personal Data Protection.\\n\\n<strong>In what situations can you oppose the processing of your data?</strong>\\n\\nYou have the right to object to the processing of personal data when:\\n\\nthe processing of personal data takes place on the basis of a legitimate interest, or for statistical purposes, and the opposition is justified by your special situation,\\npersonal data are processed for direct marketing purposes.\\n\\n<strong>Who does Bradmax share your personal information with?</strong>\\n\\nBradmax, in principle, does not disclose your personal data to third parties, except in cases where we have a legal basis, including at the request of entities authorised by law, or when we use the services of Bradmax supporters, eg entrepreneurs providing hosting of our services , software maintenance support.\\n\\nDue to the need to prevent certain functions on Bradmax services from Internet robots, we use the Google reCAPTCH mechanism to sporadically investigate whether the behaviour of website users is not characteristic of robotic behaviour. For this reason, Bradmax may disclose Google Inc. the IP address of your computer.\\n\\n<strong>How long does Bradmax store your personal data?</strong>\\n\\nBradmax stores your personal data for the duration of the contract concluded with you, as well as - after its completion - for the period during which it is possible to pursue claims in connection with the performance of the contract, a maximum of 10 years from the date of termination of the contract. In addition, Bradmax stores your data for tax and accounting purposes for a period of 5 years after the end of the year in which the financial event took place.\\n\\nBradmax stores your personal data for marketing purposes for the duration of the legal basis and the purpose of data processing.\\n\\nBradmax stores data for statistical and archival purposes for the duration of the existence of the legal basis and the purpose of data processing.\\nDoes Bradmax transfer your data to countries outside the European Economic Area?\\nSome of our service providers may store website users' data outside of the European Economic Area. In such cases, Users' data may be stored in countries that provide an adequate level of protection of personal data, or in countries that do not provide such level. In the latter case, Bradmax secures your data by entering into contracts with Bradmax service providers containing so-called Standard Contractual Clauses accepted by the European Commission, which guarantee adequate protection of Users' data in third countries, use the EU - US Privacy Shield program (eg in the case of Google reCAPTCHA) or other grounds for the transfer of personal data.\\n\\n<strong>Does Bradmax profile your personal data or process it automatically in a way that affects your rights?</strong>\\n\\nProfiling of personal data is understood as the automated processing of your data, which is based on their use to assess certain factors, in particular to analyse or forecast aspects regarding the effects of your work, economic situation, health, personal preferences, interests, credibility, behaviour, location or movement.\\nBased on monitoring your activity on Bradmax websites, we perform analyses that result in:\\noptimisation of websites (including appearance, content, offers), in terms of user preferences;\\nrecommending content that matches your viewing profile;\\nthe emission of advertisements addressed to the groups of recipients to which you have been qualified;\\nrecommending offers tailored to your viewing profile and behaviours.\\n \\nHowever, we do not use this data for automated decision-making with you that could affect your rights.\"}}\n\n/***/ }),\n\n/***/ 1546:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"LOGIN\":{\"TITLE\":\"Login\",\"COMPANY_NAME\":\"Bradmax Ltd.\",\"MESSAGE\":{\"NOT_A_MEMBER\":\"Not a member yet? Click <a href='{{url}}' class='text-bradmax'>here</a> to register.\",\"FORGOT_PASSWORD\":\"Did you forget your password? Click <a href='{{url}}' class='text-bradmax'>here</a> to open page for resetting it.\"},\"LABEL\":{\"REMEMBER_ME\":{\"ON\":\"Remember Me\",\"OFF\":\"Don't remember Me\"},\"SIGN_ME_IN\":\"Log in\"},\"PLACEHOLDER\":{\"EMAIL\":\"Email Address\",\"PASSWORD\":\"Password\"},\"INVALID\":{\"USER\":\"Invalid email Address\",\"PASSWORD\":\"Invalid password\"},\"COPYRIGHT\":\"Copyright\"}}\n\n/***/ }),\n\n/***/ 1547:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"LOGIN\":{\"TITLE\":\"Login\",\"COMPANY_NAME\":\"Bradmax Ltd.\",\"MESSAGE\":{\"NOT_A_MEMBER\":\"Kliknij <a href='{{url}}' class='text-bradmax'>tu</a> aby się zarejestrować.\",\"FORGOT_PASSWORD\":\"Zapomniałeś hasła? Kliknij <a href='{{url}}' class='text-bradmax'>tu</a>, aby otworzyć stronę do resetowania hasła.\"},\"LABEL\":{\"REMEMBER_ME\":{\"ON\":\"Zapamiętaj mnie\",\"OFF\":\"Nie pamiętaj mnie\"},\"SIGN_ME_IN\":\"Zaloguj się\"},\"PLACEHOLDER\":{\"EMAIL\":\"Adres Email\",\"PASSWORD\":\"Hasło\"},\"INVALID\":{\"USER\":\"Nieprawidłowy adres email\",\"PASSWORD\":\"Nieprawidłowe hasło\"},\"COPYRIGHT\":\"Prawa autorskie\"}}\n\n/***/ }),\n\n/***/ 1548:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"PASSWORD_CHANGE\":{\"MESSAGE\":{\"SUCCESS\":\"Your password was changed.\"},\"ERROR\":{\"FIELD_REQUIRED\":\"This field is required.\",\"MIN_LEN_8_CHARACTERS\":\"Password should have at last 8 characters.\",\"PASSWORDS_DIFFER\":\"New password differ with repeated version.\"},\"BUTTON\":{\"SAVE\":\"Save\"},\"FIELD\":{\"OLD_PASSWORD\":\"Old password\",\"NEW_PASSWORD\":\"New password\",\"NEW_PASSWORD_REPEAT\":\"New password repeat\"},\"PLACEHOLDER\":{\"OLD_PASSWORD\":\"Old password\",\"NEW_PASSWORD\":\"New password\",\"NEW_PASSWORD_REPEAT\":\"New password repeat\"},\"TITLE\":\"Password change\"}}\n\n/***/ }),\n\n/***/ 1549:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"PASSWORD_CHANGE\":{\"MESSAGE\":{\"SUCCESS\":\"Your password was changed.\"},\"ERROR\":{\"FIELD_REQUIRED\":\"This field is required.\",\"MIN_LEN_8_CHARACTERS\":\"Password should have at last 8 characters.\",\"PASSWORDS_DIFFER\":\"New password differ with repeated version.\"},\"BUTTON\":{\"SAVE\":\"Save\"},\"FIELD\":{\"OLD_PASSWORD\":\"Old password\",\"NEW_PASSWORD\":\"New password\",\"NEW_PASSWORD_REPEAT\":\"New password repeat\"},\"PLACEHOLDER\":{\"OLD_PASSWORD\":\"Old password\",\"NEW_PASSWORD\":\"New password\",\"NEW_PASSWORD_REPEAT\":\"New password repeat\"},\"TITLE\":\"Password change\"}}\n\n/***/ }),\n\n/***/ 1550:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"PLAYER\":{\"LIST\":{\"LABEL\":\"Player configurations list\",\"TOTAL_COUNT\":\"items on list\",\"SELECTED_COUNT\":\"selected items\",\"SEE_DOCS\":\"see documentation\",\"BUTTON\":{\"ADD\":\"create new\",\"CLONE\":\"duplicate\",\"DELETE\":\"delete\",\"GET_ZIP\":\"get zip\",\"SEE_VER\":\"versions\",\"GO_EMBEDER\":\"get embed code\",\"EDIT\":\"edit\"},\"COLUMN\":{\"NAME\":\"name\",\"CREATED_AT\":\"created at\",\"UPDATED_AT\":\"updated at\"},\"MODAL\":{\"ADD\":{\"HEADER\":\"Create new player configuration\",\"INPUT\":\"name\",\"ADD\":\"create\",\"CANCEL\":\"discard\"},\"DELETE\":{\"HEADER\":\"Do You want to delete configuration ?\",\"YES\":\"yes\",\"NO\":\"no\"},\"DUPLICATE\":{\"HEADER\":\"Do You want to clon configuration ?\",\"YES\":\"yes\",\"NO\":\"no\"}}},\"CONFIG\":{\"LABEL\":\"Player configurator\",\"TOO_BIG_LOGO\":\"<p>Image size exceed limits for logo image witch is:</p><p>width:{{limitWidth}}px,</p><p>height: {{limitHeight}}px.</p><p>file size: {{limitFileSize}} bytes.</p><p>Plaease select different image.</p>\",\"MODAL\":{\"ERROR\":{\"SAVE\":{\"TEXT\":\"<h4>Error during api request.</h4><br>Do you want to try again ?\",\"YES\":\"yes, try again\",\"NO\":\"no\"}},\"PUBLISH\":{\"TEXT\":\"<h4>Do You also want to generate player files,<br> for download and use on your site ?</h4>\",\"YES\":\"yes, generate files\",\"NO\":\"no, just save settings\"},\"COLOR_RESET\":{\"BASE\":\"<h4>This will reset skin to default color scheme.</h4><h5> to base color: {{ color }}</h5>.\",\"COLOR\":\"<h4>This will reset color </h4><h5> to value: {{ color }}</h5>.\",\"YES\":\"yes, reset\",\"NO\":\"no, don't reset\"},\"SAVE_CHANGES\":{\"TEXT\":\"<h4>Detected changes without, saving.</h4><h5>Do you want to save them now ?</h5>\",\"SAVE\":\"yes, save and close\",\"DONT_SAVE\":\"close, without saving\",\"CANCEL\":\"cancel\"}},\"DOCS\":{\"TEXT\":\"for more details please see\",\"LINK\":\"documentation page\"}},\"EMBEDER\":{\"TITLE\":\"Player embed code generator\",\"PANEL_TITLE\":{\"PLAYER_INFO\":\"Player info\",\"FORM\":\"Configuration\",\"PREVIEW\":\"Preview\"},\"PLAYER_NAME\":\"Player name\",\"COPY_TO_CLIPBOARD\":\"copy embed code to clipboard\",\"TOGGLE_OPTIONAL\":[\"show optional parameters\",\"hide optional parameters\"],\"DOWNLOAD_ZIP\":\"Download related zip file with examples and player.\",\"BACK\":\"back\",\"INPUT\":{\"TYPE\":{\"LABEL\":\"embed code type\",\"VALUE\":[\"Iframe embed code\",\"Dynamic embed code\"]},\"WIDTH\":{\"LABEL\":\"player width in pixels\",\"PLACEHOLDER\":\"enter player width in pixels\"},\"HEIGHT\":{\"LABEL\":\"player height in pixels\",\"PLACEHOLDER\":\"enter player height in pixels\"},\"MEDIAURL\":{\"LABEL\":\"media url\",\"PLACEHOLDER\":\"enter url to valid media file\"},\"MEDIAURL2\":{\"LABEL\":\"media url [2] (additional fallback format)\",\"PLACEHOLDER\":\"enter url to valid media file (used when problem with other media url)\"},\"TITLE\":{\"LABEL\":\"media title\",\"PLACEHOLDER\":\"enter media title displayed in player\"},\"DURATION\":{\"LABEL\":\"media duration\",\"PLACEHOLDER\":\"enter media duration in seconds\"},\"SPLASHIMAGEURL\":{\"LABEL\":\"splash image url\",\"PLACEHOLDER\":\"enter url to valid media image file\"},\"ID\":{\"LABEL\":\"ID\",\"PLACEHOLDER\":\"enter media id for bradmax content statistics\"},\"ADSVMAPURL\":{\"LABEL\":\"ads VMAP URL\",\"PLACEHOLDER\":\"enter VMAP URL for ads\"},\"ADSPREROLLVASTURL\":{\"LABEL\":\"preroll ads VAST URL\",\"PLACEHOLDER\":\"enter preroll ads VAST URL\"}}},\"VERSIONS\":{\"CHANGES_SAVED_NOTIFICATION\":\"Changes were saved\",\"MESSAGE\":{\"EMPTY\":\"There are no version available yet.\"},\"LINK\":{\"DOC\":\"documentation\",\"ZIP\":\"download\",\"EMBED\":\"embed code\"}}}}\n\n/***/ }),\n\n/***/ 1551:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"PLAYER\":{\"LIST\":{\"LABEL\":\"Lista konfiguracji\",\"TOTAL_COUNT\":\"odnaleziono pozycji\",\"SELECTED_COUNT\":\"zaznaczono pozycji\",\"SEE_DOCS\":\"zobacz dokumentację\",\"BUTTON\":{\"ADD\":\"dodaj nowy\",\"CLONE\":\"klonuj\",\"DELETE\":\"usuń\",\"GET_ZIP\":\"pobierz zip\",\"SEE_VER\":\"wersje\",\"GO_EMBEDER\":\"kod osadzania\",\"EDIT\":\"edytuj\"},\"COLUMN\":{\"NAME\":\"dodaj nowy\",\"CREATED_AT\":\"klonuj\",\"UPDATED_AT\":\"usuń\"},\"MODAL\":{\"ADD\":{\"HEADER\":\"Dodaj nową konfigurację\",\"INPUT\":\"nazwa\",\"ADD\":\"dodaj\",\"CANCEL\":\"zamknij\"},\"DELETE\":{\"HEADER\":\"Czy chcesz usunąć konfiguracje ?\",\"YES\":\"tak\",\"NO\":\"nie\"},\"DUPLICATE\":{\"HEADER\":\"Czy chcesz sklonować konfigurację ?\",\"YES\":\"tak\",\"NO\":\"nie\"}}},\"CONFIG\":{\"LABEL\":\"Konfigurator\",\"TOO_BIG_LOGO\":\"<p>Rozmiar obrazka przekroczył limit, który wynosi:</p> <p>długosc{{limitWidth}}px,</p><p> szerokosc{{limitHeight}}px.</p><p>wielkość pliku: {{limitFileSize}} bajtów.</p><p> Proszę wybrac inny mniejszy plik.</p>\",\"MODAL\":{\"ERROR\":{\"SAVE\":\"<p>Wystąpił błąd podczas zapisu.</p><p>Proszą spróbowajeszcze raz.</p>\"},\"PUBLISH\":{\"TEXT\":\"<h4>Czy chcesz wygenerować pliki odtwarzaczas do pobrania i użycia na twojej stronie ?</h4>\",\"YES\":\"tak, wygeneruj pliki\",\"NO\":\"nie, zapisz tylko ustawienia\"},\"COLOR_RESET\":{\"BASE\":\"<h4>Zmiana spowoduje reset schematu kolorów do domyślnego.</h4><h5>przy uyciu koloru bazowego: {{ color }}.</h5>\",\"COLOR\":\"<h4>Zmiana spowoduje reset koloru.</h4><h5>Do wartości: {{ color }}</h5>\",\"YES\":\"tak, resetuj\",\"NO\":\"nie, pozostaw\"},\"SAVE_CHANGES\":{\"TEXT\":\"<h4>Dokonano zmian, które nie zostały zapisane.</h4><h5>Czy chcesz je teraz zapisać ?</h5>\",\"SAVE\":\"tak, zapisz i wyjdź\",\"DONT_SAVE\":\"wyjdź, bez zapisu\",\"CANCEL\":\"zamknij\"}},\"DOCS\":{\"TEXT\":\"for more details please see\",\"LINK\":\"documentation page\"}},\"EMBEDER\":{\"TITLE\":\"Generator kodu osadzania playera\",\"PANEL_TITLE\":{\"PLAYER_INFO\":\"Player\",\"FORM\":\"Konfiguracja\",\"CODE\":\"kod osadzania\",\"PREVIEW\":\"Player preview\"},\"PLAYER_NAME\":\"Player name\",\"COPY_TO_CLIPBOARD\":\"kopiuj kod osadzania do schowka\",\"TOGGLE_OPTIONAL\":[\"pokaz dodatkowe parametry\",\"ukryj dodatkowe parametry\"],\"DOWNLOAD_ZIP\":\"Pobierz plik zip dla tej wersji z przykładami i odtwarzaczem.\",\"BACK\":\"wróć\",\"INPUT\":{\"TYPE\":{\"LABEL\":\"Typ kodu osadzania\",\"VALUE\":[\"Iframe\",\"Dynamiczny\"]},\"WIDTH\":{\"LABEL\":\"szerokośc odtwarzacza w pikselach\",\"PLACEHOLDER\":\"podaj szerokośc odtwarzacza w pikselach\"},\"HEIGHT\":{\"LABEL\":\"wysokośc odtwarzacza w pikselach\",\"PLACEHOLDER\":\"podaj wysokośc odtwarzacza w pikselach\"},\"MEDIAURL\":{\"LABEL\":\"źródło\",\"PLACEHOLDER\":\"podaj url do pliku z video\"},\"MEDIAURL2\":{\"LABEL\":\"źródło [2] (zapasowy format)\",\"PLACEHOLDER\":\"podaj url do pliku z video (wykorzystywany, gdy problem z innym źródłem wideo)\"},\"TITLE\":{\"LABEL\":\"tytuł\",\"PLACEHOLDER\":\"podaj tytuł do wyświetlenia \"},\"DURATION\":{\"LABEL\":\"czas trwania\",\"PLACEHOLDER\":\"podaj czas trwania w sekundach\"},\"SPLASHIMAGEURL\":{\"LABEL\":\"obraz splash\",\"PLACEHOLDER\":\"podaj url do pliku z obrazem\"},\"ID\":{\"LABEL\":\"ID\",\"PLACEHOLDER\":\"podaj identyfikator wideo dla statystyk bradmax\"},\"ADSVMAPURL\":{\"LABEL\":\"ads VMAP URL\",\"PLACEHOLDER\":\"enter VMAP URL for ads\"},\"ADSPREROLLVASTURL\":{\"LABEL\":\"preroll ads VAST URL\",\"PLACEHOLDER\":\"enter preroll ads VAST URL\"}}},\"VERSIONS\":{\"CHANGES_SAVED_NOTIFICATION\":\"Zmiany zostały zapisane\",\"MESSAGE\":{\"EMPTY\":\"Brak dostępnych wersji.\"},\"LINK\":{\"DOC\":\"dokumentacja\",\"ZIP\":\"pobierz\",\"EMBED\":\"kod osadzania\"}}}}\n\n/***/ }),\n\n/***/ 1552:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"PRODUCTS\":{\"TITLE\":\"Our Products\",\"SUBTITLE\":\"here you can find the available products. Have a look!\",\"BUTTON\":{\"YES\":\"Yes\",\"CONTINUE\":\"Continue\",\"CREATE_NEW\":\"Create new\",\"CANCEL\":\"Cancel\"},\"MESSAGE\":{\"ACCOUNT_INVALID\":\"Your account details are not ready for payments, do you wish to update them?\",\"SUBSCRIPTION_REUSE\":\"You have a pending order for plan {{ name }} already. Do you wish to continue it?\",\"DEFAULT_ERROR\":\"An error ocurred when processing your request. Please try again.\"}}}\n\n/***/ }),\n\n/***/ 1553:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"PRODUCTS\":{\"TITLE\":\"Our Products\",\"SUBTITLE\":\"here you can find the available products. Have a look!\",\"BUTTON\":{\"YES\":\"yes\"},\"MESSAGE\":{\"ACCOUNT_INVALID\":\"Your account details are not ready for payments, do you wish to update them?\"}}}\n\n/***/ }),\n\n/***/ 1554:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"PLAN_CARROUSEL\":{\"VIEWS\":\"views\",\"RECOMMENDED\":\"RECOMMENDED\",\"VIEWS_INC\":\"video views\",\"MONTH\":\"month\",\"BASE\":\"Base\",\"ESTIMATED\":\"Estimated\",\"CURRENT_PLAN\":\"CURRENT PLAN\",\"EXTRA\":{\"STATS\":\"Statistics\",\"ADS\":\"Advertisements\",\"DRM\":\"DRM support\",\"EMAIL\":{\"BASIC\":\"Basic e-mail support\",\"FULL\":\"Full e-mail support\"},\"PHONE\":{\"BASIC\":\"Basic phone support\",\"FULL\":\"Full phone support\"},\"VIDEO\":{\"BASIC\":\"Basic video support\",\"FULL\":\"Full video support\"}},\"BUTTON\":{\"BUY\":\"Buy\",\"CONTACT\":\"Contact us\",\"CURRENT\":\"Current\",\"USED\":\"Current Plan\"}}}\n\n/***/ }),\n\n/***/ 1555:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"PLAN_CARROUSEL\":{\"VIEWS\":\"views\",\"RECOMMENDED\":\"RECOMMENDED\",\"VIEWS_INC\":\"video views\",\"MONTH\":\"month\",\"BASE\":\"Base\",\"ESTIMATED\":\"Estimated\",\"CURRENT_PLAN\":\"CURRENT PLAN\",\"EXTRA\":{\"STATS\":\"Statistics\",\"ADS\":\"Advertisements\",\"DRM\":\"DRM support\",\"EMAIL\":{\"BASIC\":\"Basic e-mail support\",\"FULL\":\"Full e-mail support\"},\"PHONE\":{\"BASIC\":\"Basic phone support\",\"FULL\":\"Full phone support\"},\"VIDEO\":{\"BASIC\":\"Basic video support\",\"FULL\":\"Full video support\"}},\"BUTTON\":{\"BUY\":\"Buy\",\"CONTACT\":\"Contact us\",\"CURRENT\":\"Current\",\"USED\":\"Current Plan\"}}}\n\n/***/ }),\n\n/***/ 1556:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"SUBSCRIPTION\":{\"TITLE\":\"Subscription\",\"MESSAGE\":{\"THANKS\":{\"TITLE\":\"Thank You for choosing us!\",\"P1\":\"Congratulations, you have just subscribed to Bradmax Video Player. Start right away customizing your player!\"}},\"BUTTON\":{\"NAV_PLAYER\":\"Go To Player List\",\"NEXT\":\"Next\",\"PREVIOUS\":\"Previous\",\"SUBMIT\":\"Confirm and Finish\",\"EDIT\":\"Edit\",\"ACCEPT\":\"I Agree\",\"NOT_ACCEPT\":\"I Don't Agree\"},\"STEPS\":{\"STEP_1\":{\"TITLE\":\"Subscription Details\",\"SUBTITLE\":\"Your subscripion details\",\"SECTION_1\":{\"TITLE\":\"Your Selected Plan\"},\"SECTION_2\":{\"TITLE\":\"Billing Details\",\"SUBTITLE\":\"Make sure your billing details are correct\"}},\"STEP_2\":{\"TITLE\":\"Payment & Finish\",\"SUBTITLE\":\"Select a payment method and finish\",\"SECTION_1\":{\"TITLE\":\"Payment Method\",\"SUBTITLE\":\"Select or add a new payment method\"},\"SECTION_2\":{\"TITLE\":\"Confirm & Finish\",\"SUBTITLE\":\"Confirm that all the information is correct and Finish\"}}},\"LABEL\":{\"COMPANY\":\"Company\",\"COUNTRY\":\"Country\",\"STATE\":\"State\",\"CITY\":\"City\",\"ADDRESS\":\"Address\",\"POSTAL_CODE\":\"Postal code\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax Identification No.\"},\"TERMS_AND_CONDITIONS\":{\"TITLE\":\"Terms And Conditions\",\"BODY\":\"This Terms of Service are binding to all Publishers and Users. The use of the Player is tantamount with the acceptance of this Terms of Service. If you do not accept the terms of service you are prohibited from using the player. The Player is available in different Editions, including unpaid and paid options. Certain rights, obligations and features or restrictions vary by Edition. Unless otherwise stated this Terms of Service apply to all Editions. The Player requires a browser that supports HTML5 / MSE and H264. Older browsers like Internet Explorer 10 are not supported without additional plug-ins i.e. flash. The Player supports the following: (a) codecs: H264 for video and AAC for audio. MP3 is not supported with HTML5, (b) advertisements formats: VAST, VMAP, VPAID, (c) video formats: HLS and Smooth streaming integrated into the Player without plugins, Dash, MP4, Webm, live streaming.\\n\\nThe Player is adjustable to every device with internet connection, including smartphones, tablets, smart TV, desktops.\\n\\n<strong>Definitions</strong>\\n\\n“Adaptation” means any work that modifies, adds to, deletes from, edits, affects the function of or is based on a Player or any previous Adaptation thereof, including but not limited to all plug-ins and other derivative works as such term is defined by the applicable law.\\n\\n“Analytics Plug-In” means a plug-in or other code that enables Company to collect information regarding Publisher’s Use (such as browser type, Internet Service Provider, IP address and operating system). Company’s collection and utilization of such information is governed by these Terms of Service.\\n\\n“Company” means Bradmax pinok.io Sp. z o.o. Sp. k., Jana Pawła II 61/164, 01-031 Warsaw, NIP: 7010497796.\\n\\n“Content” means media including videos, images, graphics, animations, sounds, text and music and any related submissions (e.g. viewer comments) hosted, streamed, or played through the Player.\\n\\n“Data” means all transactional and Content data obtained by, processed by or provided to the Company in connection with the use of the Player. Data may include metadata (such as title, author, description and other information pertaining to Content), IP addresses, URLs, browser and operating system. Use of Data is governed by these Terms of Service.\\n\\n“Distribute” means to sell, transfer, assign, circulate or make available to any third party, or the facilitation of the foregoing.\\n\\n“Edition” means a particular edition of the Player, including the Free Edition, Basic Edition, Basic+ Edition, Pro Edition, Pro+ Edition, Infinity Edition and DRM Edition.\\n\\n“Upgraded Edition” means a particular edition of the Player with extended features or functionalities offered for the higher price in comparison to the licensed Edition.\\n\\n“Downgraded Edition” means a particular edition of the Player with limited features or functionalities offered for the lower price in comparison to the licensed Edition.\\n\\n“Effective Date” means the earliest date a Player is Used by Publisher or User.\\n\\n“End User” means an individual or entity that accesses or Uses Publisher’s or User’s Content.\\n\\n“Fee” means the amount payable to the Company for Use of the Player.\\n\\n“License Scope” means the features, rights, obligations and limitations authorized for a particular Edition of the Player.\\n\\n“OEM” means incorporation of the Player into any goods or services other than Publisher’s websites, including SDK Applications and other goods and services.\\n\\n“On-line Order Form” is an agreement between Company and Publisher setting forth custom pricing and terms for the use of Player and includes any contemporaneous Addendum thereto. In the event of any conflict between the terms of an On-line Order Form and these Terms of Service, the On-line Order Form shall take precedence.\\n\\n“Play” means each instance of Content streamed, in whole or in part, through the Player. In case the Content is streamed with breaks without reloading, it shall be treated as a single act of Play.\\n\\n“Player” means the Licensed Bradmax HTML 5 Player, software and any features, plug-ins and updates provided by Company, owned and developed by the Company together with associated services and/or SDK or SDK Applications.\\n\\n“Publisher” any individual or entity running commercial activity with the Use of Player.\\n\\n“User” any individual or entity using free of charge Edition of the Player.\\n\\n“Publisher Information” means personal and non-personal information about Publisher including but not limited to Publisher’s name, address, email address, telephone number, and, if Publisher transacts business with the Company, financial information such as payment method (valid credit card number, type, expiration date or other financial information).\\n\\n“Purpose” means (i) Use to facilitate Content playback and streaming on Publisher’s websites, (ii) Use of the SDK to develop and Distribute SDK Applications, (iii) other OEM Use.\\n\\n“SDK” means the Player Software Development Kits for Android and iOS, including all components thereof (documentation, code, tools, libraries, data, files and materials) and all updates thereto[ARM4] .\\n\\n“SDK Applications” means application software for Operating Systems, created with the SDK and incorporating the Player .\\n\\n“Services” means services provided to Publisher under these Terms of Service, including cloud-hosted versions of the Player and SDK provided as software as a service (SaaS), hosting and streaming functionality and maintenance and support services.\\n\\n“Terms of Service” means this document and any applicable addendum or new or revised versions.\\n\\n“Free Edition” means the Edition of the Player for which Fees are not required.\\n\\n“Use” means operating, accessing, downloading, installing, integrating or providing Content through a Player or Adaptation.\\n\\n<strong>Player</strong>\\n\\nPublisher’s or User’s rights and licenses to Use Player are limited to the Editions for which it has enrolled, is eligible and has paid all Fees (for paid Editions) in accordance with these Terms of Service. Any Use of the Player other than as permitted by these Terms of Service is strictly prohibited. The Company reserves all rights and licenses not expressly granted hereunder.\\n\\n<strong>Licenses</strong>\\n\\nThe License Scope varies by Edition and the licenses granted hereunder are limited accordingly. Unless otherwise provided, licenses are personal to Publisher or User for its own Use.\\n\\nSubject to the terms and conditions of these Terms of Service and Publisher’s (User’s) observance thereof, Company hereby grants to Publisher (User) and Publisher (User) hereby accepts a limited in time, non-exclusive, non-transferable, non-sublicensable, limited right and license to (a) Use, access and install the Player, solely for the Purpose, (b) Use, access, integrate and install the SDK for use in connection with the Purpose, (c) publicly Distribute SDK Applications for the Operating Systems, and (e) operate and allow end users of SDK Applications to operate the Player incorporated into such SDK Applications.\\n\\nUse of the Free Editions with advertising of any kind is prohibited.\\n\\n<strong>License Scope, Edition, Fees</strong>\\n\\nEditions have the following License Scope (volume per month where applicable) per Play (views) as defined above. Invoice is issued by the Company in the electronic form within the term defined by the applicable law after the effective payment.\\n\\n<strong>Change of the Edition</strong>\\n\\nIf you would like upgrading to the Upgraded Edition you have to file the upgrading form and pay the respective fee for the Upgraded Edition. In such a case, you may use the Upgraded Edition as of the date on which the Fee for the Upgraded Edition has been booked on the Company’s account. With that moment the previous license is terminated. All Fees paid before change to the Upgraded Edition are not refund.\\n\\nIf you would like downgrading to the Downgraded Edition you have to file the downgrading form. In such a case, you may use the Downgraded Edition after the expiration of the actual Edition licensed to you upon payment of the Fee for the Downgraded Edition, if applicable.\\n\\n<strong>Advertisements</strong>\\n\\nPublishers who are using Free Edition are strictly prohibited from using the Player in any manner to display advertisements. Such prohibition includes actions such as (i) the making or use of any Adaptation that enables any type of advertisement to be shown in, on or around the Player (e.g., a skin), (ii) interoperation of the Player with any software that serves advertisements and (iii) adding advertisements to a playlist.\\n\\n<strong>Registration</strong>\\n\\nPublisher and User must create a username and password as well as provide an accurate email address and name and surname. Publisher (User) is strictly prohibited from: (i) providing false sign-up information, (ii) using a name, address or email address owned or controlled by another person with the intent to impersonate that person or (iii) providing an email address subject to any rights of a person other than Publisher without appropriate authorization. The Company reserves the right to refuse registration or cancel any account that it reasonably believes is in violation of the foregoing. Publisher (User) shall be responsible for maintaining the confidentiality of its password and is liable for all activities that occur on its account. Publisher (User) agrees to immediately notify the Company of any unauthorized use of Publisher’s (User’s) username, password or other breach of security.\\n\\n<strong>Adaptations and OEM</strong>\\n\\nPublisher is authorized to make Adaptations reasonably necessary to exercise its rights under these Terms of Service, e.g., Adaptations to integrate the Player into Publisher’s websites. All Adaptations created by Publisher are strictly for its own Use. The Company reserves the right to prohibit the Use of any Adaptation in its sole discretion.\\n\\nOEM is authorized only in connection with the paid Edition. Publishers who use Free Edition are strictly prohibited from incorporation of a Player into any goods or services[ARM8] .\\n\\n<strong>SDK</strong>\\n\\nCompany may update the SDK at any time and is under no obligation to provide notice thereof. Updates may have features or functionality that differ from that of the current SDK. Company may identify certain updates as being critical by written notice (including e-mail to the address provided by Publisher). Publisher shall promptly incorporate such critical updates into its SDK Applications and, if such SDK Applications have been Distributed, shall provide a public update thereto no later than ten (10) days after such notice unless a different period is specified by the Company.\\n\\nPublisher acknowledges that development for each Operating System may be subject to the applicable Operating System provider’s own rules, regulations, standards and requirements and that Company has no control or responsibility therefore. Publisher is solely responsible for its compliance with the foregoing and Company makes no representations or warranties of compatibility with any Operating System.\\n\\n<strong>Distribution</strong>\\n\\nExcept as specifically set forth herein, Publisher shall not Distribute, re-license, sell, lease, transfer, encumber, assign or make available for public use the Player or any Adaptation thereof. Any attempt to take any such actions is void, and will automatically terminate Publisher’s rights under these Terms of Service. Notwithstanding the foregoing, Publisher may duplicate the licensed programs delivered with the Player and its own permitted Adaptations solely for its own use, provided, all copyright notices, disclaimers and other identifications on the licensed programs must also be duplicated and displayed on any copies thereof.\\n\\n<strong>Analytics Plug-In</strong>\\n\\nThe Player utilize Analytics Plug-In to power data tracking and reporting functionality. Information gathered by Analytics Plug-In is used in accordance with this Terms of Service. Publisher or User is strictly prohibited from removing, altering, disabling or circumventing Analytics Plug-In or otherwise interfering with the operation thereof.\\n\\nThe Company will not share personally identifiable information gathered from the Analytics Plug-In with any third party without Publisher’s or User’s express written consent, provided, nothing herein shall limit the Company’s right to use and share aggregated, non-personally identifiable data. Publisher and User grants Company a limited, royalty-free license to use the information collected by Analytics Plug-In to facilitate the operation of Player or other Company’s products, ensure compliance and for its internal business purposes.\\n\\n<strong>Term</strong>\\n\\nThese Terms of Service shall become effective on the Effective Date. For all Editions other than the Free Edition, these Terms of Service shall remain effective for a period of one (1) month (the “Initial Term”) and, upon the conclusion of the Initial Term, shall automatically renew for additional successive one (1) month terms (each a “Renewal Term” and together with the Initial Term, the “Term”).\\n\\nEither party may elect to not renew these Terms of Service by notifying the other prior to the expiration of then-current Initial Term or Renewal Term. Notice for such termination must be provided in writing/email no later than thirty (30) days prior to such expiration.\\n\\n<strong>Termination</strong>\\n\\nThese Terms of Service are subject to termination by the Company immediately if (a) Publisher fails to timely pay a Fee, (b) Publisher or User violates any term of these Terms of Service, (c) the Company has a reasonable basis to believe that Publisher or User is not abiding by the spirit of these Terms of Service, (d) Publisher becomes insolvent, declares bankruptcy or a receiver or trustee is appointed for Publisher, (e) the Company has a reasonable basis to believe that Publisher is impairing the Company’s business, (f) Publisher is or becomes engaged in a business that is directly or indirectly competitive with the Company’s business or (g) Publisher exceeds the license scope permitted for its Edition and Publisher fails to cure any of the foregoing within seven (7) days of notice thereof., (h) the Publisher or User uses the Player for the purposes violating law or honest business practices, (i) such termination is requested by the court judgment, including temporary injunctions or administrative decisions.\\n\\nThe Company may terminate Free Edition for its convenience at any time.\\n\\nIn the event of any termination by the Company pursuant to (a) – (i) above, the Company is under no obligation to provide a refund for the Fees received from Publisher or apply such fees to future services. In the event Publisher switches to a different Edition, any pre-paid Fee balance shall be applied towards the Fees due for such Edition until exhausted; no refund shall be available for Publishers switching to an Free Edition.\\n\\n<strong>Effects of Termination</strong>\\n\\nUpon termination of these Terms of Service for any reason, Publisher or User shall immediately cease Using the Player and uninstall, delete and destroy any copies of the software delivered by the Company with the Player.\\n\\nUpon termination, all rights, obligations and licenses of the parties shall cease, except that all obligations that accrued prior to the effective date of termination and remedies for breach of these Terms of Service shall survive.\\n\\n<strong>Maintenance and Support</strong>\\n\\nThe Company shall provide reasonable technical support and maintenance for the Player in its sole discretion. The Company shall have no obligation to provide additional technical support, maintenance, updates or enhancements to the Player or to provide customer service or support to Publisher’s End Users. All installation and maintenance of the Player by Publisher shall be at the sole expense of Publisher. The Company is not responsible for performance issues caused by low-performance end-user computers, low-bandwidth end user Internet connections, periodic network congestion among network providers, low-bandwidth connectivity from redirected image and video sources, improperly configured campaigns and low-bandwidth connectivity from any Publisher Content servers. In the event Company identifies slow performance due to its system, Company shall use commercially reasonable efforts to restore the Services to acceptable performance levels. Publisher’s sole remedy for any disruption or failure to provide support shall be a pro rata refund of 1/30 of the Fee paid by Publisher for the relevant period for each 24 hours of any foregoing disruption or failure.\\n\\n<strong>Intellectual Property</strong>\\n\\nThe Company is the sole owner of all intellectual property rights pertaining to the Player and software or Services delivered with the Player, including but not limited to copyright, trademark and patent rights and all rights not expressly granted herein are reserved. If Publisher creates an Adaptation, Publisher shall obtain all intellectual property rights in and to the elements of such Adaptation created by Publisher and the Company shall retain all intellectual property rights in and to any elements of the Player incorporated in such Adaptation. Publisher is prohibited from creating any Adaptation that in any manner infringes the patents, trademarks, copyrights, trade secret rights or other rights of the Company or any third party.\\n\\n<strong>Privacy</strong>\\n\\nThe Company may use the Publisher Information and Data to: deliver the Player and or Services; manage Publisher’s account; provide customer support; perform research and analysis about Publishers Use of or interest in the Player or Content or the products, services or content of others; communicate with Publisher by email, postal mail, telephone and/or mobile devices about products or services that may be of interest to you either from the Company, our partners or other third parties; develop and display content and advertising tailored to your interests on our site and other sites; enforce our Terms of Service; manage our business; and perform functions otherwise described to you at the time of collection.\\n\\nUser hereby agrees to process his/her personal data, namely (“Personal Data”) by the Company according to this Terms of Service and applicable law.\\n\\nThe Company as an administrator of personal data informs User that Personal Data provided during registration process are gathered and processed by the Administrator for the purpose of preparation of the Personal Data Collection as well as for Administrator marketing purposes.\\n\\nPublisher and User agrees to receive Administrator’s or its successors commercial information via electronic means in line with the law on Providing services via electronic means of 18 July 2002 (Journal of Laws 2002 No. 144 item. 1204 with further amendments).\\n\\nAs defined in the data protection laws, User shall have an access to its Personal Data and to the amendment of personal data or to demand its deletion. The collection of personal data of Users is done voluntarily.\\n\\nAdministrator informs that the Service may use small text file called “cookies”. A cookie is a small text file that is necessary for proper functioning of internet portals, in particular those which require authorization. Cookies do not allow to identify User. Cookies files do not process or store personal data.\\n\\nAdministrator informs that Personal Data are protected and secured according to EU law requirements.\\n\\n<strong>Fees and Payment</strong>\\n\\nFees are published at www.bradmax.com or provided on an applicable On-line Order Form. Unless otherwise provided, Company may modify the Fees prior to the commencement of each Renewal Term. The Company shall provide to the Publishers written notice of any such modification no later than sixty (60) days prior to such commencement, with exception to Free Edition.\\n\\nPublisher agrees to timely pay all Fees due during the Term. Company reserves the right to suspend Publisher’s access to Player or Editions if Fees are not timely paid. Such suspension shall not obviate Publisher’s duty to pay all Fees due under any On-line Order Form or Addendum or constitute termination of these Terms of Service absent Company’s notice of termination pursuant to the Termination section hereof. Past-due fees shall incur per month interest at an actual rate allowed by applicable law. Publisher shall be liable to, and fully reimburse, Company for all costs (including attorney’s fees) incurred in connection with Company’s collection of past-due Fees or other enforcement of this Terms of Service. All Fees are non-refundable except as otherwise provided in these Terms of Service. Publisher shall be responsible to pay all taxes due in connection with the Fees and Publisher’s use of the Products.\\n\\nPeriodic (e.g. annual) Fees are billed in advance and payment is due on receipt of invoice. In case of Paid Edition Publishers must provide a valid form of payment (e.g. credit card, debit card, PayPal account) and accurate billing information, do hereby authorize the Company to charge all Fees incurred to the designated payment form and acknowledge that periodic Fees may be charged automatically and without separate authorization.\\n\\n<strong>Content</strong>\\n\\nBy uploading Content, Publisher agrees to and hereby does grant, and does represent and warrant that it has the right to grant, the Company a royalty-free, fully paid up, worldwide license to use the Content solely in connection with the operation and provision of Services that entail the Company’s hosting, streaming or storage of such Content.\\n\\nPublisher is solely responsible for any Content or other material that Publisher posts, uploads, submits or Distributes. The Company may review and delete any Content that violates the terms of this Section. Prohibited Content includes any Content that (i) infringes any copyright, trademark, patent, trade secret, right of publicity or other right of any person or entity, (ii) is unlawful, threatening, abusive, harassing, defamatory, libelous, deceptive, fraudulent, invasive, tortious, obscene, offensive, vulgar, pornographic, profane or is otherwise inappropriate as determined by the Company in its sole discretion, (iii) contains any virus, malicious code, Trojan horse or other program designed, intended or likely to disrupt, damage, limit or interfere with the proper function of any software, hardware or telecommunications equipment or to damage or obtain unauthorized access to any system, data, password or other information of the Company or any person or entity, (iv) encourages illegal activity or (v) falsely suggests or implies sponsorship or endorsement by the Company.\\n\\nPublisher is responsible for taking its own steps to backup its Content and Company recommends routinely archiving your Content. Company disclaims any responsibility for deleted, lost, corrupted or inaccessible Content, regardless whether Company hosts such Content.\\n\\n<strong>Restrictions on Use</strong>\\n\\nPublisher shall not (i) interfere or attempt to interfere with the proper operation of the Player or any activities conducted through the Player, (ii) use any robot, spider or other device to retrieve, index, scrape, data mine or in any way gather information, Content or other materials from the Player, (iii) decipher, decompile, disassemble, reverse engineer, simulate or derive any source code or algorithms from the Player or use any of the foregoing to create any software or service similar to the Player, (iv) create any derivative work or modification of the Player other than Adaptations permitted by these Terms of Service or (v) license, sublicense, sell, encumber, rent, lease, Distribute, transfer or similarly exploit the Player.\\n\\n<strong>Representations and Warranties</strong>\\n\\nPublisher (respectively User) represents and warrants that (i) if Publisher is an individual, Publisher is at least eighteen (18) years old, (ii) if Publisher is an entity, its consent to these Terms of Service has been duly ratified, (iii) all its Content conforms to the standards set forth in the Section of these Terms of Service titled Content and Restrictions on Use, (iv) all information provided during the registration process is true and accurate, (v) its Adaptations do not infringe the intellectual property rights of any third party and (vi) its Use of the Player is in compliance with all applicable laws and regulations.\\n\\n<strong>Limited Product Warranty</strong>\\n\\nThe Company warrants that it will provide the Player (except Unpaid Editions) in a manner consistent with general industry standards reasonably applicable to the provision thereof. The Company does not warrant that the Player will be error-free or that any errors in the Player will be corrected.\\n\\n<strong>Disclaimer</strong>\\n\\nEXCEPT AS OTHERWISE PROVIDED AND TO THE MAXIMUM EXTENT ALLOWED BY LAW, THE PLAYER AND SERVICES ARE PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. EXCEPT AS OTHERWISE PROVIDED, USE OF THE PLAYER IS AT PUBLISHER’S OWN RISK AND PUBLISHER IS SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF EXERCISING THE RIGHTS GRANTED UNDER THIS AGREEMENT AND ASSUMES ALL RISKS ASSOCIATED THEREWITH, INCLUDING BUT NOT LIMITED TO THE RISKS AND COSTS OF PROGRAM ERRORS, COMPLIANCE WITH APPLICABLE LAWS, DAMAGE TO OR LOSS OF DATA, PROGRAMS OR EQUIPMENT, SUITABILITY FOR HOSTING AND UNAVAILABILITY OR INTERRUPTION.\\n\\n<strong>Limitation of Liability</strong>\\n\\nEXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW OR TO THE EXTENT THAT ANY EXCLUSION OR LIMITATION OF ITS LIABILITY IS VOID, PROHIBITED OR UNENFORCEABLE, IN NO EVENT SHALL THE COMPANY BE LIABLE ON ANY LEGAL THEORY (A) FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES INCLUDING LOSS OF REVENUE, PROFITS OR GOODWILL, (B) FOR ANY MATTER BEYOND ITS REASONABLE CONTROL, (C) FOR ANY LOSS OR INACCURACY OF DATA, LOSS OR INTERRUPTION OF USER OR COST OF PROCURING SUBSTITUTE TECHNOLOGY OR (D) DIRECT DAMAGES IN EXCESS OF THE TOTAL FEES PAID BY PUBLISHER TO THE COMPANY PURSUANT TO THESE TERMS OF SERVICE, EVEN IF THE COMPANY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS ARE INDEPENDENT FROM ALL OTHER PROVISIONS OF THIS AGREEMENT AND SHALL APPLY NOTWITHSTANDING THE FAILURE OF ANY REMEDY PROVIDED HEREIN.\\n\\n<strong>Publicity</strong>\\n\\nCompany shall be permitted to publicly identify Publisher as a user of the Player, including on Company’s websites and marketing materials. Publisher hereby grants Company a non-exclusive, non-transferable, non-sublicensable, royalty-free license during the Term to use Publisher’s name and marks solely for this purpose. Company agrees to state on all materials using Publisher’s marks that such marks are property of Publisher and to include the trademark registration symbol if applicable.\\n\\n<strong>Independent Contractors</strong>\\n\\nThe parties hereto are independent contractors and nothing herein constitutes or creates an employer-employee, agency, joint venture or representative relationship between the parties.\\n\\n<strong>Choice of Law and Jurisdiction</strong>\\n\\nThese Terms of Service shall be governed by and construed in accordance with the laws of the Republic of Poland and specifically excluding from application to this Agreement that law known as the United Nations Convention on Contracts for the International Sale of Goods. Each party irrevocably consents to the exclusive jurisdiction, forum and venue of the court proper to the Company’s registered seat over any and all claims, disputes, controversies or disagreements between the parties or any of their respective subsidiaries, affiliates, successors and assigns under or related to these Terms of Service or the subject matter thereof.\\n\\n<strong>Complete Agreement</strong>\\n\\nThese Terms of Service constitute the entire agreement between the Company and Publisher with respect to the subject matter hereof and supersedes all prior or contemporaneous understandings or agreements, written or oral, regarding such subject matter.\\n\\n<strong>Modification</strong>\\n\\nThe Company may modify the terms of these Terms of Service in its sole discretion and such modifications shall take effect and be binding on Publisher on the earliest date which they are posted to the Company’s publicly available website or delivered to Publisher via electronic or physical delivery. No one other than the Company has the right to modify these Terms of Service.\\n\\n<strong>No Assignment</strong>\\n\\nPublisher may not assign or transfer this agreement to any third party without the Company’s express written consent. Any assignment or transfer made in the absence of such consent shall be void and in the event of such unauthorized assignment or transfer the Company may immediately terminate these Terms of Service.\\n\\n<strong>Final provision</strong>\\n\\nThis Terms of Service enter into force on 01.06.2017.\",\"LABEL\":{\"1\":\"I Agree with the \",\"2\":\"Terms and Conditions.\"},\"ERROR\":\"You have to agree to finish your subscription.\"}}}\n\n/***/ }),\n\n/***/ 1557:\n/***/ (function(module, exports) {\n\nmodule.exports = {\"SUBSCRIPTION\":{\"TITLE\":\"Subscription process\",\"MESSAGE\":{\"THANKS\":{\"TITLE\":\"Thank You for choosing us!\",\"P1\":\"Congratulations, you have just subscribed to Bradmax Video Player. Start right away customizing your player!\"}},\"BUTTON\":{\"NAV_PLAYER\":\"Go To Player List\",\"NEXT\":\"Next\",\"PREVIOUS\":\"Previous\",\"SUBMIT\":\"Confirm and Finish\",\"EDIT\":\"Edit\",\"ACCEPT\":\"I Agree\",\"NOT_ACCEPT\":\"I Don't Agree\"},\"STEPS\":{\"STEP_1\":{\"TITLE\":\"Subscription Details\",\"SUBTITLE\":\"Your subscripion details\",\"SECTION_1\":{\"TITLE\":\"Your Selected Plan\"},\"SECTION_2\":{\"TITLE\":\"Billing Details\",\"SUBTITLE\":\"Make sure your billing details are correct\"}},\"STEP_2\":{\"TITLE\":\"Payment & Finish\",\"SUBTITLE\":\"Select a payment method and finish\",\"SECTION_1\":{\"TITLE\":\"Payment Method\",\"SUBTITLE\":\"Select or add a new payment method\"},\"SECTION_2\":{\"TITLE\":\"Confirm & Finish\",\"SUBTITLE\":\"Confirm that all the information is correct and Finish\"}}},\"LABEL\":{\"COMPANY\":\"Company\",\"COUNTRY\":\"Country\",\"STATE\":\"State\",\"CITY\":\"City\",\"ADDRESS\":\"Address\",\"POSTAL_CODE\":\"Postal code\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax Identification No.\"},\"TERMS_AND_CONDITIONS\":{\"TITLE\":\"Terms And Conditions\",\"BODY\":\"This Terms of Service are binding to all Publishers and Users. The use of the Player is tantamount with the acceptance of this Terms of Service. If you do not accept the terms of service you are prohibited from using the player. The Player is available in different Editions, including unpaid and paid options. Certain rights, obligations and features or restrictions vary by Edition. Unless otherwise stated this Terms of Service apply to all Editions. The Player requires a browser that supports HTML5 / MSE and H264. Older browsers like Internet Explorer 10 are not supported without additional plug-ins i.e. flash. The Player supports the following: (a) codecs: H264 for video and AAC for audio. MP3 is not supported with HTML5, (b) advertisements formats: VAST, VMAP, VPAID, (c) video formats: HLS and Smooth streaming integrated into the Player without plugins, Dash, MP4, Webm, live streaming.\\n\\nThe Player is adjustable to every device with internet connection, including smartphones, tablets, smart TV, desktops.\\n\\n<strong>Definitions</strong>\\n\\n“Adaptation” means any work that modifies, adds to, deletes from, edits, affects the function of or is based on a Player or any previous Adaptation thereof, including but not limited to all plug-ins and other derivative works as such term is defined by the applicable law.\\n\\n“Analytics Plug-In” means a plug-in or other code that enables Company to collect information regarding Publisher’s Use (such as browser type, Internet Service Provider, IP address and operating system). Company’s collection and utilization of such information is governed by these Terms of Service.\\n\\n“Company” means Bradmax pinok.io Sp. z o.o. Sp. k., Jana Pawła II 61/164, 01-031 Warsaw, NIP: 7010497796.\\n\\n“Content” means media including videos, images, graphics, animations, sounds, text and music and any related submissions (e.g. viewer comments) hosted, streamed, or played through the Player.\\n\\n“Data” means all transactional and Content data obtained by, processed by or provided to the Company in connection with the use of the Player. Data may include metadata (such as title, author, description and other information pertaining to Content), IP addresses, URLs, browser and operating system. Use of Data is governed by these Terms of Service.\\n\\n“Distribute” means to sell, transfer, assign, circulate or make available to any third party, or the facilitation of the foregoing.\\n\\n“Edition” means a particular edition of the Player, including the Free Edition, Basic Edition, Basic+ Edition, Pro Edition, Pro+ Edition, Infinity Edition and DRM Edition.\\n\\n“Upgraded Edition” means a particular edition of the Player with extended features or functionalities offered for the higher price in comparison to the licensed Edition.\\n\\n“Downgraded Edition” means a particular edition of the Player with limited features or functionalities offered for the lower price in comparison to the licensed Edition.\\n\\n“Effective Date” means the earliest date a Player is Used by Publisher or User.\\n\\n“End User” means an individual or entity that accesses or Uses Publisher’s or User’s Content.\\n\\n“Fee” means the amount payable to the Company for Use of the Player.\\n\\n“License Scope” means the features, rights, obligations and limitations authorized for a particular Edition of the Player.\\n\\n“OEM” means incorporation of the Player into any goods or services other than Publisher’s websites, including SDK Applications and other goods and services.\\n\\n“On-line Order Form” is an agreement between Company and Publisher setting forth custom pricing and terms for the use of Player and includes any contemporaneous Addendum thereto. In the event of any conflict between the terms of an On-line Order Form and these Terms of Service, the On-line Order Form shall take precedence.\\n\\n“Play” means each instance of Content streamed, in whole or in part, through the Player. In case the Content is streamed with breaks without reloading, it shall be treated as a single act of Play.\\n\\n“Player” means the Licensed Bradmax HTML 5 Player, software and any features, plug-ins and updates provided by Company, owned and developed by the Company together with associated services and/or SDK or SDK Applications.\\n\\n“Publisher” any individual or entity running commercial activity with the Use of Player.\\n\\n“User” any individual or entity using free of charge Edition of the Player.\\n\\n“Publisher Information” means personal and non-personal information about Publisher including but not limited to Publisher’s name, address, email address, telephone number, and, if Publisher transacts business with the Company, financial information such as payment method (valid credit card number, type, expiration date or other financial information).\\n\\n“Purpose” means (i) Use to facilitate Content playback and streaming on Publisher’s websites, (ii) Use of the SDK to develop and Distribute SDK Applications, (iii) other OEM Use.\\n\\n“SDK” means the Player Software Development Kits for Android and iOS, including all components thereof (documentation, code, tools, libraries, data, files and materials) and all updates thereto[ARM4] .\\n\\n“SDK Applications” means application software for Operating Systems, created with the SDK and incorporating the Player .\\n\\n“Services” means services provided to Publisher under these Terms of Service, including cloud-hosted versions of the Player and SDK provided as software as a service (SaaS), hosting and streaming functionality and maintenance and support services.\\n\\n“Terms of Service” means this document and any applicable addendum or new or revised versions.\\n\\n“Free Edition” means the Edition of the Player for which Fees are not required.\\n\\n“Use” means operating, accessing, downloading, installing, integrating or providing Content through a Player or Adaptation.\\n\\n<strong>Player</strong>\\n\\nPublisher’s or User’s rights and licenses to Use Player are limited to the Editions for which it has enrolled, is eligible and has paid all Fees (for paid Editions) in accordance with these Terms of Service. Any Use of the Player other than as permitted by these Terms of Service is strictly prohibited. The Company reserves all rights and licenses not expressly granted hereunder.\\n\\n<strong>Licenses</strong>\\n\\nThe License Scope varies by Edition and the licenses granted hereunder are limited accordingly. Unless otherwise provided, licenses are personal to Publisher or User for its own Use.\\n\\nSubject to the terms and conditions of these Terms of Service and Publisher’s (User’s) observance thereof, Company hereby grants to Publisher (User) and Publisher (User) hereby accepts a limited in time, non-exclusive, non-transferable, non-sublicensable, limited right and license to (a) Use, access and install the Player, solely for the Purpose, (b) Use, access, integrate and install the SDK for use in connection with the Purpose, (c) publicly Distribute SDK Applications for the Operating Systems, and (e) operate and allow end users of SDK Applications to operate the Player incorporated into such SDK Applications.\\n\\nUse of the Free Editions with advertising of any kind is prohibited.\\n\\n<strong>License Scope, Edition, Fees</strong>\\n\\nEditions have the following License Scope (volume per month where applicable) per Play (views) as defined above. Invoice is issued by the Company in the electronic form within the term defined by the applicable law after the effective payment.\\n\\n<strong>Change of the Edition</strong>\\n\\nIf you would like upgrading to the Upgraded Edition you have to file the upgrading form and pay the respective fee for the Upgraded Edition. In such a case, you may use the Upgraded Edition as of the date on which the Fee for the Upgraded Edition has been booked on the Company’s account. With that moment the previous license is terminated. All Fees paid before change to the Upgraded Edition are not refund.\\n\\nIf you would like downgrading to the Downgraded Edition you have to file the downgrading form. In such a case, you may use the Downgraded Edition after the expiration of the actual Edition licensed to you upon payment of the Fee for the Downgraded Edition, if applicable.\\n\\n<strong>Advertisements</strong>\\n\\nPublishers who are using Free Edition are strictly prohibited from using the Player in any manner to display advertisements. Such prohibition includes actions such as (i) the making or use of any Adaptation that enables any type of advertisement to be shown in, on or around the Player (e.g., a skin), (ii) interoperation of the Player with any software that serves advertisements and (iii) adding advertisements to a playlist.\\n\\n<strong>Registration</strong>\\n\\nPublisher and User must create a username and password as well as provide an accurate email address and name and surname. Publisher (User) is strictly prohibited from: (i) providing false sign-up information, (ii) using a name, address or email address owned or controlled by another person with the intent to impersonate that person or (iii) providing an email address subject to any rights of a person other than Publisher without appropriate authorization. The Company reserves the right to refuse registration or cancel any account that it reasonably believes is in violation of the foregoing. Publisher (User) shall be responsible for maintaining the confidentiality of its password and is liable for all activities that occur on its account. Publisher (User) agrees to immediately notify the Company of any unauthorized use of Publisher’s (User’s) username, password or other breach of security.\\n\\n<strong>Adaptations and OEM</strong>\\n\\nPublisher is authorized to make Adaptations reasonably necessary to exercise its rights under these Terms of Service, e.g., Adaptations to integrate the Player into Publisher’s websites. All Adaptations created by Publisher are strictly for its own Use. The Company reserves the right to prohibit the Use of any Adaptation in its sole discretion.\\n\\nOEM is authorized only in connection with the paid Edition. Publishers who use Free Edition are strictly prohibited from incorporation of a Player into any goods or services[ARM8] .\\n\\n<strong>SDK</strong>\\n\\nCompany may update the SDK at any time and is under no obligation to provide notice thereof. Updates may have features or functionality that differ from that of the current SDK. Company may identify certain updates as being critical by written notice (including e-mail to the address provided by Publisher). Publisher shall promptly incorporate such critical updates into its SDK Applications and, if such SDK Applications have been Distributed, shall provide a public update thereto no later than ten (10) days after such notice unless a different period is specified by the Company.\\n\\nPublisher acknowledges that development for each Operating System may be subject to the applicable Operating System provider’s own rules, regulations, standards and requirements and that Company has no control or responsibility therefore. Publisher is solely responsible for its compliance with the foregoing and Company makes no representations or warranties of compatibility with any Operating System.\\n\\n<strong>Distribution</strong>\\n\\nExcept as specifically set forth herein, Publisher shall not Distribute, re-license, sell, lease, transfer, encumber, assign or make available for public use the Player or any Adaptation thereof. Any attempt to take any such actions is void, and will automatically terminate Publisher’s rights under these Terms of Service. Notwithstanding the foregoing, Publisher may duplicate the licensed programs delivered with the Player and its own permitted Adaptations solely for its own use, provided, all copyright notices, disclaimers and other identifications on the licensed programs must also be duplicated and displayed on any copies thereof.\\n\\n<strong>Analytics Plug-In</strong>\\n\\nThe Player utilize Analytics Plug-In to power data tracking and reporting functionality. Information gathered by Analytics Plug-In is used in accordance with this Terms of Service. Publisher or User is strictly prohibited from removing, altering, disabling or circumventing Analytics Plug-In or otherwise interfering with the operation thereof.\\n\\nThe Company will not share personally identifiable information gathered from the Analytics Plug-In with any third party without Publisher’s or User’s express written consent, provided, nothing herein shall limit the Company’s right to use and share aggregated, non-personally identifiable data. Publisher and User grants Company a limited, royalty-free license to use the information collected by Analytics Plug-In to facilitate the operation of Player or other Company’s products, ensure compliance and for its internal business purposes.\\n\\n<strong>Term</strong>\\n\\nThese Terms of Service shall become effective on the Effective Date. For all Editions other than the Free Edition, these Terms of Service shall remain effective for a period of one (1) month (the “Initial Term”) and, upon the conclusion of the Initial Term, shall automatically renew for additional successive one (1) month terms (each a “Renewal Term” and together with the Initial Term, the “Term”).\\n\\nEither party may elect to not renew these Terms of Service by notifying the other prior to the expiration of then-current Initial Term or Renewal Term. Notice for such termination must be provided in writing/email no later than thirty (30) days prior to such expiration.\\n\\n<strong>Termination</strong>\\n\\nThese Terms of Service are subject to termination by the Company immediately if (a) Publisher fails to timely pay a Fee, (b) Publisher or User violates any term of these Terms of Service, (c) the Company has a reasonable basis to believe that Publisher or User is not abiding by the spirit of these Terms of Service, (d) Publisher becomes insolvent, declares bankruptcy or a receiver or trustee is appointed for Publisher, (e) the Company has a reasonable basis to believe that Publisher is impairing the Company’s business, (f) Publisher is or becomes engaged in a business that is directly or indirectly competitive with the Company’s business or (g) Publisher exceeds the license scope permitted for its Edition and Publisher fails to cure any of the foregoing within seven (7) days of notice thereof., (h) the Publisher or User uses the Player for the purposes violating law or honest business practices, (i) such termination is requested by the court judgment, including temporary injunctions or administrative decisions.\\n\\nThe Company may terminate Free Edition for its convenience at any time.\\n\\nIn the event of any termination by the Company pursuant to (a) – (i) above, the Company is under no obligation to provide a refund for the Fees received from Publisher or apply such fees to future services. In the event Publisher switches to a different Edition, any pre-paid Fee balance shall be applied towards the Fees due for such Edition until exhausted; no refund shall be available for Publishers switching to an Free Edition.\\n\\n<strong>Effects of Termination</strong>\\n\\nUpon termination of these Terms of Service for any reason, Publisher or User shall immediately cease Using the Player and uninstall, delete and destroy any copies of the software delivered by the Company with the Player.\\n\\nUpon termination, all rights, obligations and licenses of the parties shall cease, except that all obligations that accrued prior to the effective date of termination and remedies for breach of these Terms of Service shall survive.\\n\\n<strong>Maintenance and Support</strong>\\n\\nThe Company shall provide reasonable technical support and maintenance for the Player in its sole discretion. The Company shall have no obligation to provide additional technical support, maintenance, updates or enhancements to the Player or to provide customer service or support to Publisher’s End Users. All installation and maintenance of the Player by Publisher shall be at the sole expense of Publisher. The Company is not responsible for performance issues caused by low-performance end-user computers, low-bandwidth end user Internet connections, periodic network congestion among network providers, low-bandwidth connectivity from redirected image and video sources, improperly configured campaigns and low-bandwidth connectivity from any Publisher Content servers. In the event Company identifies slow performance due to its system, Company shall use commercially reasonable efforts to restore the Services to acceptable performance levels. Publisher’s sole remedy for any disruption or failure to provide support shall be a pro rata refund of 1/30 of the Fee paid by Publisher for the relevant period for each 24 hours of any foregoing disruption or failure.\\n\\n<strong>Intellectual Property</strong>\\n\\nThe Company is the sole owner of all intellectual property rights pertaining to the Player and software or Services delivered with the Player, including but not limited to copyright, trademark and patent rights and all rights not expressly granted herein are reserved. If Publisher creates an Adaptation, Publisher shall obtain all intellectual property rights in and to the elements of such Adaptation created by Publisher and the Company shall retain all intellectual property rights in and to any elements of the Player incorporated in such Adaptation. Publisher is prohibited from creating any Adaptation that in any manner infringes the patents, trademarks, copyrights, trade secret rights or other rights of the Company or any third party.\\n\\n<strong>Privacy</strong>\\n\\nThe Company may use the Publisher Information and Data to: deliver the Player and or Services; manage Publisher’s account; provide customer support; perform research and analysis about Publishers Use of or interest in the Player or Content or the products, services or content of others; communicate with Publisher by email, postal mail, telephone and/or mobile devices about products or services that may be of interest to you either from the Company, our partners or other third parties; develop and display content and advertising tailored to your interests on our site and other sites; enforce our Terms of Service; manage our business; and perform functions otherwise described to you at the time of collection.\\n\\nUser hereby agrees to process his/her personal data, namely (“Personal Data”) by the Company according to this Terms of Service and applicable law.\\n\\nThe Company as an administrator of personal data informs User that Personal Data provided during registration process are gathered and processed by the Administrator for the purpose of preparation of the Personal Data Collection as well as for Administrator marketing purposes.\\n\\nPublisher and User agrees to receive Administrator’s or its successors commercial information via electronic means in line with the law on Providing services via electronic means of 18 July 2002 (Journal of Laws 2002 No. 144 item. 1204 with further amendments).\\n\\nAs defined in the data protection laws, User shall have an access to its Personal Data and to the amendment of personal data or to demand its deletion. The collection of personal data of Users is done voluntarily.\\n\\nAdministrator informs that the Service may use small text file called “cookies”. A cookie is a small text file that is necessary for proper functioning of internet portals, in particular those which require authorization. Cookies do not allow to identify User. Cookies files do not process or store personal data.\\n\\nAdministrator informs that Personal Data are protected and secured according to EU law requirements.\\n\\n<strong>Fees and Payment</strong>\\n\\nFees are published at www.bradmax.com or provided on an applicable On-line Order Form. Unless otherwise provided, Company may modify the Fees prior to the commencement of each Renewal Term. The Company shall provide to the Publishers written notice of any such modification no later than sixty (60) days prior to such commencement, with exception to Free Edition.\\n\\nPublisher agrees to timely pay all Fees due during the Term. Company reserves the right to suspend Publisher’s access to Player or Editions if Fees are not timely paid. Such suspension shall not obviate Publisher’s duty to pay all Fees due under any On-line Order Form or Addendum or constitute termination of these Terms of Service absent Company’s notice of termination pursuant to the Termination section hereof. Past-due fees shall incur per month interest at an actual rate allowed by applicable law. Publisher shall be liable to, and fully reimburse, Company for all costs (including attorney’s fees) incurred in connection with Company’s collection of past-due Fees or other enforcement of this Terms of Service. All Fees are non-refundable except as otherwise provided in these Terms of Service. Publisher shall be responsible to pay all taxes due in connection with the Fees and Publisher’s use of the Products.\\n\\nPeriodic (e.g. annual) Fees are billed in advance and payment is due on receipt of invoice. In case of Paid Edition Publishers must provide a valid form of payment (e.g. credit card, debit card, PayPal account) and accurate billing information, do hereby authorize the Company to charge all Fees incurred to the designated payment form and acknowledge that periodic Fees may be charged automatically and without separate authorization.\\n\\n<strong>Content</strong>\\n\\nBy uploading Content, Publisher agrees to and hereby does grant, and does represent and warrant that it has the right to grant, the Company a royalty-free, fully paid up, worldwide license to use the Content solely in connection with the operation and provision of Services that entail the Company’s hosting, streaming or storage of such Content.\\n\\nPublisher is solely responsible for any Content or other material that Publisher posts, uploads, submits or Distributes. The Company may review and delete any Content that violates the terms of this Section. Prohibited Content includes any Content that (i) infringes any copyright, trademark, patent, trade secret, right of publicity or other right of any person or entity, (ii) is unlawful, threatening, abusive, harassing, defamatory, libelous, deceptive, fraudulent, invasive, tortious, obscene, offensive, vulgar, pornographic, profane or is otherwise inappropriate as determined by the Company in its sole discretion, (iii) contains any virus, malicious code, Trojan horse or other program designed, intended or likely to disrupt, damage, limit or interfere with the proper function of any software, hardware or telecommunications equipment or to damage or obtain unauthorized access to any system, data, password or other information of the Company or any person or entity, (iv) encourages illegal activity or (v) falsely suggests or implies sponsorship or endorsement by the Company.\\n\\nPublisher is responsible for taking its own steps to backup its Content and Company recommends routinely archiving your Content. Company disclaims any responsibility for deleted, lost, corrupted or inaccessible Content, regardless whether Company hosts such Content.\\n\\n<strong>Restrictions on Use</strong>\\n\\nPublisher shall not (i) interfere or attempt to interfere with the proper operation of the Player or any activities conducted through the Player, (ii) use any robot, spider or other device to retrieve, index, scrape, data mine or in any way gather information, Content or other materials from the Player, (iii) decipher, decompile, disassemble, reverse engineer, simulate or derive any source code or algorithms from the Player or use any of the foregoing to create any software or service similar to the Player, (iv) create any derivative work or modification of the Player other than Adaptations permitted by these Terms of Service or (v) license, sublicense, sell, encumber, rent, lease, Distribute, transfer or similarly exploit the Player.\\n\\n<strong>Representations and Warranties</strong>\\n\\nPublisher (respectively User) represents and warrants that (i) if Publisher is an individual, Publisher is at least eighteen (18) years old, (ii) if Publisher is an entity, its consent to these Terms of Service has been duly ratified, (iii) all its Content conforms to the standards set forth in the Section of these Terms of Service titled Content and Restrictions on Use, (iv) all information provided during the registration process is true and accurate, (v) its Adaptations do not infringe the intellectual property rights of any third party and (vi) its Use of the Player is in compliance with all applicable laws and regulations.\\n\\n<strong>Limited Product Warranty</strong>\\n\\nThe Company warrants that it will provide the Player (except Unpaid Editions) in a manner consistent with general industry standards reasonably applicable to the provision thereof. The Company does not warrant that the Player will be error-free or that any errors in the Player will be corrected.\\n\\n<strong>Disclaimer</strong>\\n\\nEXCEPT AS OTHERWISE PROVIDED AND TO THE MAXIMUM EXTENT ALLOWED BY LAW, THE PLAYER AND SERVICES ARE PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. EXCEPT AS OTHERWISE PROVIDED, USE OF THE PLAYER IS AT PUBLISHER’S OWN RISK AND PUBLISHER IS SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF EXERCISING THE RIGHTS GRANTED UNDER THIS AGREEMENT AND ASSUMES ALL RISKS ASSOCIATED THEREWITH, INCLUDING BUT NOT LIMITED TO THE RISKS AND COSTS OF PROGRAM ERRORS, COMPLIANCE WITH APPLICABLE LAWS, DAMAGE TO OR LOSS OF DATA, PROGRAMS OR EQUIPMENT, SUITABILITY FOR HOSTING AND UNAVAILABILITY OR INTERRUPTION.\\n\\n<strong>Limitation of Liability</strong>\\n\\nEXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW OR TO THE EXTENT THAT ANY EXCLUSION OR LIMITATION OF ITS LIABILITY IS VOID, PROHIBITED OR UNENFORCEABLE, IN NO EVENT SHALL THE COMPANY BE LIABLE ON ANY LEGAL THEORY (A) FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES INCLUDING LOSS OF REVENUE, PROFITS OR GOODWILL, (B) FOR ANY MATTER BEYOND ITS REASONABLE CONTROL, (C) FOR ANY LOSS OR INACCURACY OF DATA, LOSS OR INTERRUPTION OF USER OR COST OF PROCURING SUBSTITUTE TECHNOLOGY OR (D) DIRECT DAMAGES IN EXCESS OF THE TOTAL FEES PAID BY PUBLISHER TO THE COMPANY PURSUANT TO THESE TERMS OF SERVICE, EVEN IF THE COMPANY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS ARE INDEPENDENT FROM ALL OTHER PROVISIONS OF THIS AGREEMENT AND SHALL APPLY NOTWITHSTANDING THE FAILURE OF ANY REMEDY PROVIDED HEREIN.\\n\\n<strong>Publicity</strong>\\n\\nCompany shall be permitted to publicly identify Publisher as a user of the Player, including on Company’s websites and marketing materials. Publisher hereby grants Company a non-exclusive, non-transferable, non-sublicensable, royalty-free license during the Term to use Publisher’s name and marks solely for this purpose. Company agrees to state on all materials using Publisher’s marks that such marks are property of Publisher and to include the trademark registration symbol if applicable.\\n\\n<strong>Independent Contractors</strong>\\n\\nThe parties hereto are independent contractors and nothing herein constitutes or creates an employer-employee, agency, joint venture or representative relationship between the parties.\\n\\n<strong>Choice of Law and Jurisdiction</strong>\\n\\nThese Terms of Service shall be governed by and construed in accordance with the laws of the Republic of Poland and specifically excluding from application to this Agreement that law known as the United Nations Convention on Contracts for the International Sale of Goods. Each party irrevocably consents to the exclusive jurisdiction, forum and venue of the court proper to the Company’s registered seat over any and all claims, disputes, controversies or disagreements between the parties or any of their respective subsidiaries, affiliates, successors and assigns under or related to these Terms of Service or the subject matter thereof.\\n\\n<strong>Complete Agreement</strong>\\n\\nThese Terms of Service constitute the entire agreement between the Company and Publisher with respect to the subject matter hereof and supersedes all prior or contemporaneous understandings or agreements, written or oral, regarding such subject matter.\\n\\n<strong>Modification</strong>\\n\\nThe Company may modify the terms of these Terms of Service in its sole discretion and such modifications shall take effect and be binding on Publisher on the earliest date which they are posted to the Company’s publicly available website or delivered to Publisher via electronic or physical delivery. No one other than the Company has the right to modify these Terms of Service.\\n\\n<strong>No Assignment</strong>\\n\\nPublisher may not assign or transfer this agreement to any third party without the Company’s express written consent. Any assignment or transfer made in the absence of such consent shall be void and in the event of such unauthorized assignment or transfer the Company may immediately terminate these Terms of Service.\\n\\n<strong>Final provision</strong>\\n\\nThis Terms of Service enter into force on 01.06.2017.\",\"LABEL\":{\"1\":\"I Agree with the \",\"2\":\"Terms and Conditions.\"},\"ERROR\":\"You have to agree to finish your subscription.\"}}}\n\n/***/ }),\n\n/***/ 177:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar FlashMessagesService = (function () {\n    function FlashMessagesService() {\n    }\n    return FlashMessagesService;\n}());\nFlashMessagesService.decorators = [\n    { type: core_1.Injectable },\n];\n/** @nocollapse */\nFlashMessagesService.ctorParameters = function () { return []; };\nexports.FlashMessagesService = FlashMessagesService;\n//# sourceMappingURL=flash-messages.service.js.map\n\n/***/ }),\n\n/***/ 178:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return CookieService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar CookieService = (function () {\n    function CookieService() {\n    }\n    CookieService.prototype.write = function (name, value, days) {\n        if (days === void 0) { days = 90; }\n        var date = new Date();\n        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n        var expires = '; expires=' + date.toUTCString();\n        document.cookie = name + '=' + value + expires + '; path=/';\n    };\n    CookieService.prototype.read = function (name) {\n        var nameEQ = name + '=', ca = document.cookie.split(';');\n        for (var i = 0; i < ca.length; i++) {\n            var c = ca[i];\n            while (c.charAt(0) == ' ')\n                c = c.substring(1, c.length);\n            if (c.indexOf(nameEQ) == 0)\n                return c.substring(nameEQ.length, c.length);\n        }\n        return null;\n    };\n    CookieService.prototype.erase = function (name) {\n        this.write(name, '', -1);\n    };\n    CookieService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])()\n    ], CookieService);\n    return CookieService;\n}());\n\n\n\n/***/ }),\n\n/***/ 179:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AlertModalComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__ = __webpack_require__(71);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar HTML = '<close-modal-button></close-modal-button>'\n    + '<div class=\"modal-message\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>';\nvar STYLE = 'alert-modal-component {display: block;margin: auto;color: #fff;font-weight: 200;'\n    + 'background: #ff281c;max-width: 400px;min-width: 200px;}'\n    + 'alert-modal-component .modal-message { padding: 32px 16px 16px 16px; }';\nvar AlertModalComponent = (function (_super) {\n    __extends(AlertModalComponent, _super);\n    function AlertModalComponent(sanitizer) {\n        var _this = _super.call(this) || this;\n        _this.sanitizer = sanitizer;\n        return _this;\n    }\n    var _a;\n    AlertModalComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'alert-modal-component',\n            template: HTML, styles: [STYLE],\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */]) === \"function\" && _a || Object])\n    ], AlertModalComponent);\n    return AlertModalComponent;\n}(__WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__[\"a\" /* AbstractModalComponent */]));\n\n\n\n/***/ }),\n\n/***/ 18:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return UrlService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar UrlService = (function () {\n    function UrlService() {\n    }\n    UrlService.prototype.api = function (url) {\n        var apiUrl = \"https://bradmax.com/client/api/v1\";\n        if (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.apiUrl) {\n            apiUrl = window.bradmaxAdminConfig.apiUrl;\n        }\n        if (apiUrl.charAt(apiUrl.length - 1) != '/') {\n            apiUrl += '/';\n        }\n        return apiUrl + url;\n    };\n    UrlService.prototype.file = function (url) {\n        var staticFilesBaseUrl = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.staticFilesBaseUrl)\n            ? window.bradmaxAdminConfig.staticFilesBaseUrl : '';\n        var baseUrl = '';\n        if (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.staticFilesBaseUrl && (url.indexOf('http') != 0)) {\n            baseUrl = window.bradmaxAdminConfig.staticFilesBaseUrl;\n        }\n        if ((baseUrl.length > 0) && (baseUrl.charAt(baseUrl.length - 1) != '/')) {\n            baseUrl += '/';\n        }\n        return baseUrl + url;\n    };\n    UrlService.prototype.getSignUpPage = function () {\n        var defaultSignInUrl = '//bigsoda.pl:8888/site/en/signup';\n        if (window && window.location && (window.location.href.indexOf('0.0.0.0') > -1)) {\n            defaultSignInUrl = '//localhost:8080/site/en/signup';\n        }\n        var result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.signInUrl)\n            ? window.bradmaxAdminConfig.signInUrl : defaultSignInUrl;\n        return result;\n    };\n    UrlService.prototype.getPasswordResetPage = function () {\n        var defaultUrl = '//bigsoda.pl:8888/site/en/password-reset';\n        if (window && window.location && (window.location.href.indexOf('0.0.0.0') > -1)) {\n            defaultUrl = '//localhost:8080/site/en/password-reset';\n        }\n        var result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.passwordResetUrl)\n            ? window.bradmaxAdminConfig.passwordResetUrl : defaultUrl;\n        return result;\n    };\n    Object.defineProperty(UrlService.prototype, \"termsPage\", {\n        get: function () {\n            var defaultUrl = '//bigsoda.pl:8888/site/en/terms';\n            if (window && window.location && (window.location.href.indexOf('0.0.0.0') > -1)) {\n                defaultUrl = '//localhost:8080/site/en/terms';\n            }\n            var result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.termsPageUrl)\n                ? window.bradmaxAdminConfig.termsPageUrl : defaultUrl;\n            return result;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(UrlService.prototype, \"documentationPage\", {\n        get: function () {\n            var defaultUrl = '//bradmax.com/static/player-doc/';\n            var result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.docsPageUrl)\n                ? window.bradmaxAdminConfig.docsPageUrl : defaultUrl;\n            return result;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(UrlService.prototype, \"tutorialPage\", {\n        get: function () {\n            var defaultUrl = '//bradmax.com/static/client-panel-doc/how_to_create_your_first_bradmax_player.pdf';\n            var result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.tutorialPageUrl)\n                ? window.bradmaxAdminConfig.tutorialPageUrl : defaultUrl;\n            return result;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(UrlService.prototype, \"playersPluginsDocumentationPage\", {\n        get: function () {\n            var defaultUrl = 'https://bradmax.com/static/bradmax-analytics-for-players/latest/doc/';\n            var result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.docsPageUrl)\n                ? window.bradmaxAdminConfig.docsPageUrl : defaultUrl;\n            return result;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    UrlService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [])\n    ], UrlService);\n    return UrlService;\n}());\n\n\n\n/***/ }),\n\n/***/ 180:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return InputModalComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__ = __webpack_require__(71);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar HTML = ''\n    + '<div class=\"input-header\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>'\n    + '<div class=\"input-group\">'\n    + '<label for=\"input-field\">{{inputLabel}}</label>'\n    + '<input #inputField id=\"input-field\" type=\"text\" maxlength=\"64\" [(ngModel)]=\"value\" required (keyup.enter)=\"onKeyupEnter()\">'\n    + '</div>'\n    + '<div class=\"input-buttons\">'\n    + '<button *ngFor=\"let btn of buttons\" [ngClass]=\"formatNgClass(btn)\" (click)=\"click(btn)\">'\n    + '<i *ngIf=\"btn.fa!=null\" class=\"fa fa-{{btn.fa}}\"></i>'\n    + '<span>{{btn.label}}</span>'\n    + '</button>'\n    + '</div>'\n    + '';\nvar STYLE = \"\\n\\t:host {display: block;margin: auto;font-weight: 200;background: #fff;max-width: 400px;min-width: 200px;}\\n\\t:host .input-header { padding: 32px 16px 16px 16px; text-align: center; }\\n\\t:host .input-group {padding: 0 32px 16px 32px;width: 100%;text-align: left;}\\n\\t:host .input-group label {width: 70px;}\\n\\t:host .input-group input {width: 200px;}\\n\\t:host .input-group input:active,:host .input-group input:focus {box-shadow: none;}\\n\\t:host .input-buttons { padding: 2px 16px 8px 16px; text-align: center; }\\n\\t:host .input-buttons button {\\n\\t\\tdisplay: inline-block;  text-align: center;  vertical-align: middle;\\n\\t\\ttouch-action: manipulation;  cursor: pointer;  background: #FFFFFF;\\n\\t\\tborder: 1px solid transparent;  white-space: nowrap;  padding: 4px 10px;  margin: 2px 6px;\\n\\t\\tfont-size: inherit;  line-height: 1em;  border-radius: 30px;\\n\\t\\tuser-select: none;\\n\\t}\\n\\t:host .input-buttons button:focus {outline: 0;}\\n\\t:host .input-buttons button:active,\\n\\t:host .input-buttons button:hover {outline: 0;background: #EFEFEF;border-color: #EFEFEF;}\\n\\t:host .input-buttons button:active {box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.1);}\\n\\t:host .input-buttons button i {margin-right: 3px;}\\n\";\nvar InputModalComponent = (function (_super) {\n    __extends(InputModalComponent, _super);\n    function InputModalComponent(sanitizer) {\n        var _this = _super.call(this) || this;\n        _this.sanitizer = sanitizer;\n        return _this;\n    }\n    InputModalComponent.prototype.ngOnInit = function () {\n        if (this.inputDefaultValue) {\n            this.value = this.inputDefaultValue;\n        }\n    };\n    InputModalComponent.prototype.ngAfterViewInit = function () {\n        if (this.inputDefaultValue) {\n            var input_1 = this.input.nativeElement;\n            setTimeout(function () {\n                input_1.focus();\n                input_1.select();\n            }, 0);\n        }\n    };\n    InputModalComponent.prototype.formatNgClass = function (btn) {\n        var classes = {};\n        if (btn.classes != null)\n            for (var i = 0; i < btn.classes.length; i++)\n                classes[btn.classes[i]] = true;\n        return classes;\n    };\n    InputModalComponent.prototype.onKeyupEnter = function () {\n        for (var _i = 0, _a = this.buttons; _i < _a.length; _i++) {\n            var btn = _a[_i];\n            if (btn.click != null) {\n                btn.click(this.value);\n                this.close();\n            }\n        }\n    };\n    InputModalComponent.prototype.click = function (btn) {\n        if (btn.click != null)\n            btn.click(this.value);\n        if (btn.close && btn.close == true)\n            this.close();\n    };\n    var _a, _b;\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewChild\"])('inputField'),\n        __metadata(\"design:type\", typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], InputModalComponent.prototype, \"input\", void 0);\n    InputModalComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'input-modal-component',\n            template: HTML, styles: [STYLE],\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */]) === \"function\" && _b || Object])\n    ], InputModalComponent);\n    return InputModalComponent;\n}(__WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__[\"a\" /* AbstractModalComponent */]));\n\n\n\n/***/ }),\n\n/***/ 181:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ModalType; });\nvar ModalType;\n(function (ModalType) {\n    ModalType[ModalType[\"alert\"] = 0] = \"alert\";\n    ModalType[ModalType[\"prompt\"] = 1] = \"prompt\";\n    ModalType[ModalType[\"input\"] = 2] = \"input\";\n    ModalType[ModalType[\"modal\"] = 3] = \"modal\";\n    ModalType[ModalType[\"accountDetails\"] = 4] = \"accountDetails\";\n    ModalType[ModalType[\"terms\"] = 5] = \"terms\";\n    ModalType[ModalType[\"passwordChange\"] = 6] = \"passwordChange\";\n})(ModalType || (ModalType = {}));\n\n\n/***/ }),\n\n/***/ 182:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return PasswordChangeModalComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__abstract_modal_component__ = __webpack_require__(71);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar HTML = \"<div class=\\\"modal-password-change\\\">\\n                <close-modal-button></close-modal-button>\\n                <password-change-view (onSuccess)=\\\"close()\\\"></password-change-view>\\n            </div>\";\nvar STYLES = ':host {display: block;margin: auto;width: 400px;text-align:center;background:#fff;border-radius-5px;} ' +\n    ':host close-modal-button {padding: 5px 5px 0 0;}';\nvar PasswordChangeModalComponent = (function (_super) {\n    __extends(PasswordChangeModalComponent, _super);\n    function PasswordChangeModalComponent() {\n        return _super.call(this) || this;\n    }\n    PasswordChangeModalComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'password-change-modal',\n            template: HTML,\n            styles: [STYLES],\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [])\n    ], PasswordChangeModalComponent);\n    return PasswordChangeModalComponent;\n}(__WEBPACK_IMPORTED_MODULE_1__abstract_modal_component__[\"a\" /* AbstractModalComponent */]));\n\n\n\n/***/ }),\n\n/***/ 183:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return PromptModalComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__ = __webpack_require__(71);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar HTML = ''\n    + '<div class=\"prompt-message\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>'\n    + '<div class=\"prompt-buttons\">'\n    + '<button *ngFor=\"let btn of buttons\" [ngClass]=\"formatNgClass(btn)\" (click)=\"click(btn)\">'\n    + '<i *ngIf=\"btn.fa!=null\" class=\"fa fa-{{btn.fa}}\"></i>'\n    + '<span>{{btn.label}}</span>'\n    + '</button>'\n    + '</div>'\n    + '';\nvar STYLE = \"\\n:host{display: block;margin: auto;font-weight: 400;background: #fff;max-width: 400px;min-width: 200px;}\\n:host .prompt-message { padding: 16px 16px 16px 16px; text-align: center; }\\n:host .prompt-buttons { padding: 2px 16px 8px 16px; text-align: center; }\\n:host .prompt-buttons button {\\n    display: inline-block;\\n    text-align: center;\\n    vertical-align: middle;\\n    touch-action: manipulation;\\n    cursor: pointer;\\n    background: #FFFFFF;\\n    border: 1px solid transparent;\\n    white-space: nowrap;\\n    padding: 4px 10px;\\n    margin: 2px 6px;\\n    font-size: inherit;\\n    line-height: 1em;\\n    border-radius: 30;\\n    user-select: none;\\n}\\n:host .prompt-buttons button:focus {outline: 0;}\\n:host .prompt-buttons button:active,\\n:host .prompt-buttons button:hover {outline: 0;background: #EFEFEF;border-color: #EFEFEF;}\\n:host .prompt-buttons button:active {box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.1);}\\n:host .prompt-buttons button i {margin-right: 3px;}\\n:host .prompt-message /deep/.color-sample span { display: block; width: 30px; height: 30px; border-radius: 50%; margin: auto; border:1px solid #888; }\";\nvar PromptModalComponent = (function (_super) {\n    __extends(PromptModalComponent, _super);\n    function PromptModalComponent(sanitizer) {\n        var _this = _super.call(this) || this;\n        _this.sanitizer = sanitizer;\n        return _this;\n    }\n    PromptModalComponent.prototype.formatNgClass = function (btn) {\n        var classes = {};\n        if (btn.classes != null)\n            for (var i = 0; i < btn.classes.length; i++)\n                classes[btn.classes[i]] = true;\n        return classes;\n    };\n    PromptModalComponent.prototype.click = function (btn) {\n        if (btn.click != null)\n            btn.click();\n        if (btn.close && btn.close == true)\n            this.close();\n    };\n    var _a;\n    PromptModalComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'prompt-modal-component',\n            template: HTML, styles: [STYLE],\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */]) === \"function\" && _a || Object])\n    ], PromptModalComponent);\n    return PromptModalComponent;\n}(__WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__[\"a\" /* AbstractModalComponent */]));\n\n\n\n/***/ }),\n\n/***/ 184:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return GdprInfoModalComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__ = __webpack_require__(71);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar HTML = ''\n    + '<close-modal-button></close-modal-button>'\n    + '<div class=\"gdpr-info-modal\">'\n    + '<div class=\"prompt-message\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>'\n    + '</div>';\nvar STYLE = \"\\n:host{display: block;margin: auto;font-weight: 200;background: #fff;max-width: 800px;min-width: 200px; max-height:600px;overflow:hidden;}\\n:host .gdpr-info-modal{margin-top:30px;width:100%;max-height:570px;overflow:auto;}\\n:host .prompt-message { padding: 0px 16px 16px 16px; text-align: left; white-space: pre-wrap;}\\n:host .prompt-buttons { padding: 2px 16px 16px 16px; text-align: center; }\\n:host .prompt-buttons button {\\n    display: inline-block;\\n    text-align: center;\\n    vertical-align: middle;\\n    touch-action: manipulation;\\n    cursor: pointer;\\n    //background: #FFFFFF;\\n    //border: 1px solid transparent;\\n    white-space: nowrap;\\n    padding: 4px 10px;\\n    margin: 2px 6px;\\n    font-size: inherit;\\n    line-height: 1em;\\n    border-radius: 30;\\n    user-select: none;\\n}\";\nvar GdprInfoModalComponent = (function (_super) {\n    __extends(GdprInfoModalComponent, _super);\n    function GdprInfoModalComponent(sanitizer) {\n        var _this = _super.call(this) || this;\n        _this.sanitizer = sanitizer;\n        return _this;\n    }\n    GdprInfoModalComponent.prototype.formatNgClass = function (btn) {\n        var classes = {};\n        if (btn.classes != null)\n            for (var i = 0; i < btn.classes.length; i++)\n                classes[btn.classes[i]] = true;\n        return classes;\n    };\n    GdprInfoModalComponent.prototype.click = function (btn) {\n        if (btn.click != null)\n            btn.click();\n        if (btn.close && btn.close == true)\n            this.close();\n    };\n    var _a;\n    GdprInfoModalComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'prompt-modal-component',\n            template: HTML, styles: [STYLE],\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */]) === \"function\" && _a || Object])\n    ], GdprInfoModalComponent);\n    return GdprInfoModalComponent;\n}(__WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__[\"a\" /* AbstractModalComponent */]));\n\n\n\n/***/ }),\n\n/***/ 185:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: ./node_modules/@angular/common/@angular/common.es5.js\nvar common_es5 = __webpack_require__(5);\n\n// EXTERNAL MODULE: ./node_modules/@angular/core/@angular/core.es5.js\nvar core_es5 = __webpack_require__(0);\n\n// EXTERNAL MODULE: ./node_modules/@angular/router/@angular/router.es5.js\nvar router_es5 = __webpack_require__(2);\n\n// EXTERNAL MODULE: ./node_modules/angular-l10n/modules/angular-l10n.es5.js\nvar angular_l10n_es5 = __webpack_require__(3);\n\n// EXTERNAL MODULE: ./src/module/modal/modal.service.ts\nvar modal_service = __webpack_require__(29);\n\n// CONCATENATED MODULE: ./src/module/sidebar/item/sidebar.item.component.ts\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar sidebar_item_component_SidebarItemComponent = (function () {\n    function SidebarItemComponent(element, router, modal, cdr) {\n        this.element = element;\n        this.router = router;\n        this.modal = modal;\n        this.cdr = cdr;\n        this.onCollapse = new core_es5[\"EventEmitter\"]();\n    }\n    SidebarItemComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.routerSubscription = this.router.events.subscribe(function () { return _this.checkRouteTree(); });\n    };\n    SidebarItemComponent.prototype.ngOnDestroy = function () {\n        if (this.routerSubscription)\n            this.routerSubscription.unsubscribe();\n    };\n    SidebarItemComponent.prototype.ngOnChanges = function (changes) {\n        if (changes.hasOwnProperty('model')) {\n            this.isParent = this.checkIfIsParent(this.model);\n            if (this.isParent) {\n                this.element.nativeElement.classList.add('has-sub');\n                this.checkRouteTree();\n            }\n            if (this.model.route != null) {\n                this.routeTree = this.router.createUrlTree(this.model.route);\n                this.checkRouteTree();\n            }\n        }\n    };\n    SidebarItemComponent.prototype.formatRoute = function () {\n        if (this.model != null && this.model.route == null)\n            return null;\n        return ['..'].concat(this.model.route);\n    };\n    SidebarItemComponent.prototype.getCssClass = function () {\n        if (this.model && this.model.isHiddenWhenNotActive) {\n            return 'hidden-when-not-active';\n        }\n        if (this.model && this.model.isAvailableInDifferentPlan) {\n            return 'available-in-different-plan';\n        }\n        return '';\n    };\n    SidebarItemComponent.prototype.isSubMenuActive = function () {\n        if (!this.isParent || !this.model) {\n            return false;\n        }\n        if (this.model.isHiddenWhenNotActive && !this.model.active) {\n            return false;\n        }\n        if (this.model.collapsed) {\n            return false;\n        }\n        var hasVisibleChild = false;\n        for (var _i = 0, _a = this.model.data; _i < _a.length; _i++) {\n            var item = _a[_i];\n            if (!item.isHiddenWhenNotActive || this.isCurrentUrlMatchingWithSegmentPatterns(item.route)) {\n                hasVisibleChild = true;\n            }\n        }\n        return hasVisibleChild;\n    };\n    SidebarItemComponent.prototype.showInfoAboutAvaliabilityInOtherPlan = function () {\n        var _this = this;\n        var w = window;\n        if (w.gtag) {\n            w.gtag('event', 'stats_not_available_click', {});\n        }\n        this.modal.prompt('Sorry but these statistics are not available in the free plan. Please subscribe to a paid plan or contact us for a demo.', [\n            {\n                label: 'Show plans', fa: 'shopping-cart', classes: ['test-css-class'],\n                close: true,\n                click: function () {\n                    var w = window;\n                    if (w.gtag) {\n                        w.gtag('event', 'stats_not_available_show_plans', {});\n                    }\n                    _this.router.navigate(['admin', 'products']);\n                }\n            },\n            {\n                label: 'Contact with us', fa: 'envelope', classes: ['test-css-class'],\n                close: true,\n                click: function () {\n                    var w = window;\n                    if (w.gtag) {\n                        w.gtag('event', 'stats_not_available_contact', {});\n                    }\n                    if (w && w.LeadBooster) {\n                        w.LeadBooster.trigger('open');\n                    }\n                }\n            },\n            { label: \"Close\", fa: 'close', classes: ['test-css-class'], close: true }\n        ]);\n    };\n    SidebarItemComponent.prototype.checkIfIsParent = function (d) { return d != null && d.data != null; };\n    SidebarItemComponent.prototype.checkRouteTree = function () {\n        var activate = false;\n        if (this.isParent && this.model.data) {\n            activate = this.model.route && this.router.isActive(this.router.createUrlTree(this.model.route), false);\n            this.model.collapsed = !activate;\n        }\n        else if (this.routeTree != null) {\n            activate = this.isCurrentUrlMatchingWithSegmentPatterns(this.model.route);\n        }\n        if (this.model.active != activate) {\n            this.model.active = activate;\n            this.cdr.markForCheck();\n        }\n    };\n    SidebarItemComponent.prototype.isCurrentUrlMatchingWithSegmentPatterns = function (route) {\n        var segments = this.router.parseUrl(this.router.url).root.children[router_es5[\"f\" /* PRIMARY_OUTLET */]].segments;\n        if (route.length != segments.length) {\n            return false;\n        }\n        for (var i = 0; i < route.length; i++) {\n            var routeSeg = route[i];\n            var urlSeg = segments[i].path;\n            if (typeof routeSeg === 'string' && routeSeg.charAt(0) === ':') {\n                continue;\n            }\n            if (routeSeg !== urlSeg) {\n                return false;\n            }\n        }\n        return true;\n    };\n    var _a, _b, _c, _d;\n    SidebarItemComponent = __decorate([\n        Object(core_es5[\"Component\"])({\n            selector: '[sidebar-menu-item]',\n            host: {\n                '[class.active]': 'model?.active',\n                '[class.collapse-open]': 'model?.collapsed==false',\n                '[class.nohovericon]': 'model?.noHoverIcon',\n                '[class.checked]': 'model?.checked',\n                '[class.disabled]': 'model?.disabled'\n            },\n            template: __webpack_require__(1435),\n            styles: [__webpack_require__(1436)],\n            inputs: ['model'],\n            outputs: ['onCollapse'],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].Default\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object, typeof (_b = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _b || Object, typeof (_c = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _c || Object, typeof (_d = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _d || Object])\n    ], SidebarItemComponent);\n    return SidebarItemComponent;\n}());\n\n\n// EXTERNAL MODULE: ./src/service/url.service.ts\nvar url_service = __webpack_require__(18);\n\n// EXTERNAL MODULE: ./src/service/view.service.ts\nvar view_service = __webpack_require__(15);\n\n// EXTERNAL MODULE: ./src/service/sidebar.service.ts\nvar sidebar_service = __webpack_require__(36);\n\n// CONCATENATED MODULE: ./src/module/sidebar/sidebar.component.ts\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar sidebar_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sidebar_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar sidebar_component_SidebarComponent = (function (_super) {\n    __extends(SidebarComponent, _super);\n    function SidebarComponent(locale, translation, cdr, service, url, view) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        _this.service = service;\n        _this.url = url;\n        _this.view = view;\n        _this.isAppInIframe = false;\n        _this.footMenu = [{\n                name: _this.translation.translate('MENU.MAIN.HELP.NAME'),\n                icon: 'fa-question',\n                openIcon: 'fa-question-circle',\n                data: [\n                    {\n                        name: _this.translation.translate('MENU.MAIN.HELP.DOCS'),\n                        externalUrl: _this.url.documentationPage\n                    },\n                    {\n                        name: _this.translation.translate('MENU.MAIN.HELP.TUTORIAL'),\n                        externalUrl: _this.url.tutorialPage\n                    },\n                    {\n                        name: _this.translation.translate('MENU.MAIN.HELP.PLAYERS_PLUGINS_DOCS'),\n                        externalUrl: _this.url.playersPluginsDocumentationPage\n                    }\n                ]\n            }, {\n                name: _this.translation.translate('MENU.MAIN.TERMS_AND_CONDITIONS'),\n                icon: 'fa-balance-scale',\n                externalUrl: _this.url.termsPage\n            }];\n        _this.service.openStream$.subscribe(function (data) { return _this.show(data); });\n        _this.service.updateStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n        _this.service.closeStream$.subscribe(function () { return _this.close(); });\n        _this.isAppInIframe = _this.view.checkIfAppInIframe();\n        return _this;\n    }\n    SidebarComponent.prototype.show = function (data) {\n        if (this.active != true || this.name != data.name || this.renderAt != data.renderAt) {\n            this.active = true;\n            this.name = data.name;\n            this.model = data.items;\n            this.renderAt = data.renderAt;\n            this.cdr.markForCheck();\n        }\n    };\n    SidebarComponent.prototype.close = function () {\n        if (this.active != false) {\n            this.active = false;\n            this.name = null;\n            this.model = null;\n            this.cdr.markForCheck();\n        }\n    };\n    SidebarComponent.prototype.onCollapse = function (i) {\n        if (this.model)\n            this.model.forEach(function (si) { return si.collapsed = (si.name !== i.name); });\n        if (this.footMenu)\n            this.footMenu.forEach(function (si) {\n                if (si.name === i.name)\n                    si.collapsed = !si.collapsed;\n                else\n                    si.collapsed = true;\n            });\n    };\n    var _a, _b, _c, _d, _e, _f;\n    SidebarComponent = sidebar_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'sidebar', host: { 'class': 'sidebar', '[class.active]': 'active', '[class.with-header]': '!isAppInIframe' },\n            template: __webpack_require__(1437),\n            styles: [__webpack_require__(1438)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        sidebar_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _c || Object, typeof (_d = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object, typeof (_f = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _f || Object])\n    ], SidebarComponent);\n    return SidebarComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/sidebar/sidebar.module.ts\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return sidebar_module_SidebarModule; });\nvar sidebar_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\nvar sidebar_module_SidebarModule = (function () {\n    function SidebarModule() {\n    }\n    SidebarModule = sidebar_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [router_es5[\"h\" /* RouterModule */], common_es5[\"CommonModule\"], angular_l10n_es5[\"c\" /* LocalizationModule */]],\n            declarations: [sidebar_component_SidebarComponent, sidebar_item_component_SidebarItemComponent],\n            exports: [sidebar_component_SidebarComponent]\n        })\n    ], SidebarModule);\n    return SidebarModule;\n}());\n\n\n\n/***/ }),\n\n/***/ 186:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return HeaderService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar HeaderService = (function () {\n    function HeaderService() {\n        this.menuSubject = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__[\"Subject\"]();\n        this.menuStream$ = this.menuSubject.asObservable();\n    }\n    HeaderService.prototype.menu = function (data) {\n        this.lastMenuData = data;\n        this.menuSubject.next(data);\n    };\n    HeaderService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [])\n    ], HeaderService);\n    return HeaderService;\n}());\n\n\n\n/***/ }),\n\n/***/ 187:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar codemirror_module_1 = __webpack_require__(1466);\nexports.CodemirrorModule = codemirror_module_1.CodemirrorModule;\nvar codemirror_component_1 = __webpack_require__(350);\nexports.CodemirrorComponent = codemirror_component_1.CodemirrorComponent;\n//# sourceMappingURL=index.js.map\n\n/***/ }),\n\n/***/ 188:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (immutable) */ __webpack_exports__[\"b\"] = initBuyCookieService;\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return BuyCookieService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__cookie_service__ = __webpack_require__(178);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nfunction initBuyCookieService(cookie) {\n    return function () { return cookie.init(); };\n}\nvar BuyCookieService = (function () {\n    function BuyCookieService(injector) {\n        this.injector = injector;\n        this.url = '/admin/products';\n        this.name = 'bradmax-chosen-plan';\n        this.wasRedirected = false;\n    }\n    BuyCookieService.prototype.init = function () {\n        var _this = this;\n        this.routerSub = this.injector.get(__WEBPACK_IMPORTED_MODULE_0__angular_router__[\"g\" /* Router */]).events.subscribe(function (e) { return _this.routerInterceptor(e); });\n    };\n    BuyCookieService.prototype.read = function () {\n        if (this.value == null) {\n            var i = null;\n            var c = this.injector.get(__WEBPACK_IMPORTED_MODULE_2__cookie_service__[\"a\" /* CookieService */]).read(this.name);\n            if (c != null)\n                i = parseInt(c);\n            if (i != null && !isNaN(i))\n                this.value = parseInt(c);\n        }\n        return this.value;\n    };\n    BuyCookieService.prototype.erase = function () {\n        if (this.value != null) {\n            this.injector.get(__WEBPACK_IMPORTED_MODULE_2__cookie_service__[\"a\" /* CookieService */]).erase(this.name);\n            this.value = null;\n        }\n    };\n    BuyCookieService.prototype.routerInterceptor = function (event) {\n        if (event instanceof __WEBPACK_IMPORTED_MODULE_0__angular_router__[\"e\" /* NavigationStart */] && this.wasRedirected == false && this.read() != null) {\n            this.wasRedirected = true;\n            this.injector.get(__WEBPACK_IMPORTED_MODULE_0__angular_router__[\"g\" /* Router */]).navigate([this.url]);\n            return;\n        }\n    };\n    Object.defineProperty(BuyCookieService.prototype, \"routerSub\", {\n        set: function (s) {\n            if (this.routerSubscription != null)\n                this.routerSubscription.unsubscribe();\n            this.routerSubscription = s;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    var _a;\n    BuyCookieService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injector\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injector\"]) === \"function\" && _a || Object])\n    ], BuyCookieService);\n    return BuyCookieService;\n}());\n\n\n\n/***/ }),\n\n/***/ 189:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AppConfig; });\n/* unused harmony export AppConfigTestData */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return AppConfigData; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n\nvar AppConfig = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"InjectionToken\"]('APP_CONFIG');\nvar AppConfigTestData = {\n    googleAnalyticsId: 'UA-xxxxxxxx-x',\n    livechatLicenseNumber: 1234567,\n    languages: [''],\n    default: {\n        language: '',\n        country: ''\n    },\n    providers: []\n};\nvar AppConfigData = {\n    languages: ['en'],\n    default: {\n        language: 'en',\n        country: 'EN'\n    },\n    providers: [\n        'i18n/login/',\n        'i18n/account/',\n        'i18n/account/subscriptions/',\n        'i18n/account/details/',\n        'i18n/account/invoices/',\n        'i18n/account/payments/',\n        'i18n/analytics/albums/',\n        'i18n/analytics/audience/',\n        'i18n/analytics/content/',\n        'i18n/analytics/dashboard/',\n        'i18n/analytics/geo/',\n        'i18n/analytics/realtime/',\n        'i18n/analytics/info/',\n        'i18n/analytics/technology/',\n        'i18n/analytics/QOS/',\n        'i18n/analytics/heartbeat/',\n        'i18n/analytics/top-content/',\n        'i18n/analytics/st-raport/',\n        'i18n/analytics/sampled-traffic/',\n        'i18n/analytics/tag-service/',\n        'i18n/content/',\n        'i18n/components/',\n        'i18n/player/',\n        'i18n/products/',\n        'i18n/subscription/',\n        'i18n/products/plan-carrousel/',\n        'i18n/password-change/'\n    ]\n};\n\n\n/***/ }),\n\n/***/ 28:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AuthService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__cookie_service__ = __webpack_require__(178);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__localstorage_service__ = __webpack_require__(344);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar AuthService = (function () {\n    function AuthService(localStorage, cookie) {\n        this.localStorage = localStorage;\n        this.cookie = cookie;\n        this.isLoggedIn = false;\n        this.LOCAL_STORAGE_TOKEN_KEY_OLD = 'token';\n        this.LOCAL_STORAGE_TOKEN_KEY = 'btoken';\n    }\n    Object.defineProperty(AuthService.prototype, \"defaultUrl\", {\n        get: function () {\n            return this.defaultUrlCache || 'analytics/dashboard';\n        },\n        set: function (value) {\n            this.defaultUrlCache = this.sanitizeUrl(value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AuthService.prototype, \"redirectUrl\", {\n        get: function () {\n            return this.redirectUrlCache;\n        },\n        set: function (value) {\n            this.redirectUrlCache = this.sanitizeUrl(value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AuthService.prototype, \"logged\", {\n        get: function () {\n            this.isLoggedIn = (this.token != null);\n            return this.isLoggedIn;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AuthService.prototype, \"token\", {\n        get: function () {\n            var result = this.localStorage.read(this.LOCAL_STORAGE_TOKEN_KEY);\n            if (!result) {\n                result = this.cookie.read(this.LOCAL_STORAGE_TOKEN_KEY_OLD);\n            }\n            result = result ? result : null;\n            return result;\n        },\n        set: function (v) {\n            this.user = null;\n            this.password = null;\n            this.localStorage.write(this.LOCAL_STORAGE_TOKEN_KEY, v);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    AuthService.prototype.clear = function () {\n        this.user = null;\n        this.password = null;\n        this.localStorage.erase(this.LOCAL_STORAGE_TOKEN_KEY);\n        this.cookie.erase(this.LOCAL_STORAGE_TOKEN_KEY_OLD);\n    };\n    AuthService.prototype.sanitizeUrl = function (url) {\n        if (url && url.length > 0 && url.indexOf('/') == 0)\n            url = url.substring(1);\n        return url;\n    };\n    var _a, _b;\n    AuthService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_2__localstorage_service__[\"a\" /* LocalStorageService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__localstorage_service__[\"a\" /* LocalStorageService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__cookie_service__[\"a\" /* CookieService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__cookie_service__[\"a\" /* CookieService */]) === \"function\" && _b || Object])\n    ], AuthService);\n    return AuthService;\n}());\n\n\n\n/***/ }),\n\n/***/ 29:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ModalService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__alert_modal_component__ = __webpack_require__(179);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__input_modal_component__ = __webpack_require__(180);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__modal_model__ = __webpack_require__(181);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__password_change_modal_component__ = __webpack_require__(182);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__prompt_modal_component__ = __webpack_require__(183);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__gdpr_info_modal_component__ = __webpack_require__(184);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__terms_modal_component__ = __webpack_require__(345);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar ModalService = (function () {\n    function ModalService() {\n        this.closedSource = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__[\"Subject\"]();\n        this.createSource = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__[\"Subject\"]();\n        this.closeSource = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__[\"Subject\"]();\n        this.createStream$ = this.createSource.asObservable();\n        this.closeStream$ = this.closeSource.asObservable();\n        this.closedStream$ = this.closedSource.asObservable();\n    }\n    ModalService.prototype.alert = function (html) {\n        this.createSource.next({\n            type: __WEBPACK_IMPORTED_MODULE_4__modal_model__[\"a\" /* ModalType */].alert,\n            closeOnBackdropClick: true,\n            component: __WEBPACK_IMPORTED_MODULE_2__alert_modal_component__[\"a\" /* AlertModalComponent */],\n            html: html\n        });\n    };\n    ModalService.prototype.prompt = function (html, buttons) {\n        this.createSource.next({\n            type: __WEBPACK_IMPORTED_MODULE_4__modal_model__[\"a\" /* ModalType */].prompt,\n            closeOnBackdropClick: true,\n            component: __WEBPACK_IMPORTED_MODULE_6__prompt_modal_component__[\"a\" /* PromptModalComponent */],\n            html: html,\n            buttons: buttons\n        });\n    };\n    ModalService.prototype.terms = function (title, html, buttons) {\n        this.createSource.next({\n            type: __WEBPACK_IMPORTED_MODULE_4__modal_model__[\"a\" /* ModalType */].prompt,\n            closeOnBackdropClick: true,\n            component: __WEBPACK_IMPORTED_MODULE_8__terms_modal_component__[\"a\" /* TermsModalComponent */],\n            title: title,\n            html: html,\n            buttons: buttons\n        });\n    };\n    ModalService.prototype.gdprInfo = function (html) {\n        this.createSource.next({\n            type: __WEBPACK_IMPORTED_MODULE_4__modal_model__[\"a\" /* ModalType */].prompt,\n            closeOnBackdropClick: true,\n            component: __WEBPACK_IMPORTED_MODULE_7__gdpr_info_modal_component__[\"a\" /* GdprInfoModalComponent */],\n            html: html\n        });\n    };\n    ModalService.prototype.input = function (header, label, buttons, inputDefaultValue) {\n        if (inputDefaultValue === void 0) { inputDefaultValue = null; }\n        this.createSource.next({\n            type: __WEBPACK_IMPORTED_MODULE_4__modal_model__[\"a\" /* ModalType */].input,\n            closeOnBackdropClick: true,\n            component: __WEBPACK_IMPORTED_MODULE_3__input_modal_component__[\"a\" /* InputModalComponent */],\n            html: header,\n            inputLabel: label,\n            inputDefaultValue: inputDefaultValue,\n            buttons: buttons\n        });\n    };\n    ModalService.prototype.create = function (model) {\n        model.type = __WEBPACK_IMPORTED_MODULE_4__modal_model__[\"a\" /* ModalType */].modal;\n        this.createSource.next(model);\n    };\n    ModalService.prototype.close = function () {\n        this.closeSource.next(null);\n    };\n    ModalService.prototype.passwordChange = function () {\n        this.createSource.next({\n            type: __WEBPACK_IMPORTED_MODULE_4__modal_model__[\"a\" /* ModalType */].passwordChange,\n            closeOnBackdropClick: true,\n            component: __WEBPACK_IMPORTED_MODULE_5__password_change_modal_component__[\"a\" /* PasswordChangeModalComponent */],\n            buttons: [],\n            inputData: null\n        });\n    };\n    ModalService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [])\n    ], ModalService);\n    return ModalService;\n}());\n\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* unused harmony export InjectorRef */\n/* unused harmony export LocaleConfig */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return LocaleService; });\n/* unused harmony export LocaleStorage */\n/* unused harmony export BrowserStorage */\n/* unused harmony export TranslationConfig */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return TranslationService; });\n/* unused harmony export TranslationProvider */\n/* unused harmony export HttpTranslationProvider */\n/* unused harmony export TranslationHandler */\n/* unused harmony export DefaultTranslationHandler */\n/* unused harmony export Translation */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return Localization; });\n/* unused harmony export NumberCode */\n/* unused harmony export DecimalCode */\n/* unused harmony export LocaleValidation */\n/* unused harmony export Collator */\n/* unused harmony export IntlAPI */\n/* unused harmony export Language */\n/* unused harmony export DefaultLocale */\n/* unused harmony export Currency */\n/* unused harmony export TranslatePipe */\n/* unused harmony export LocaleDatePipe */\n/* unused harmony export LocaleDecimalPipe */\n/* unused harmony export LocalePercentPipe */\n/* unused harmony export LocaleCurrencyPipe */\n/* unused harmony export BaseDirective */\n/* unused harmony export TranslateDirective */\n/* unused harmony export LocaleDateDirective */\n/* unused harmony export LocaleDecimalDirective */\n/* unused harmony export LocalePercentDirective */\n/* unused harmony export LocaleCurrencyDirective */\n/* unused harmony export LocaleNumberValidatorDirective */\n/* unused harmony export validateLocaleNumber */\n/* unused harmony export TranslationModule */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return LocalizationModule; });\n/* unused harmony export LocaleValidationModule */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_toPromise__ = __webpack_require__(323);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_toPromise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_add_operator_toPromise__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_add_observable_merge__ = __webpack_require__(249);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_add_observable_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_rxjs_add_observable_merge__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__angular_http__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_map__ = __webpack_require__(174);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_map___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_rxjs_add_operator_map__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__angular_common__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__angular_forms__ = __webpack_require__(9);\nvar __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\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 * Allows to get the dependencies at the module level or component.\r\n */\r\nvar InjectorRef = (function () {\r\n    /**\r\n     * @param {?} injector\r\n     */\r\n    function InjectorRef(injector) {\r\n        this.injector = injector;\r\n        InjectorRef.injector = this.injector;\r\n    }\r\n    /**\r\n     * @template T\r\n     * @param {?} token\r\n     * @return {?}\r\n     */\r\n    InjectorRef.get = function (token) {\r\n        return this.injector.get(token);\r\n    };\r\n    return InjectorRef;\r\n}());\r\nInjectorRef.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nInjectorRef.ctorParameters = function () { return [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injector\"], },\r\n]; };\r\nvar LocaleConfig = (function () {\r\n    function LocaleConfig() {\r\n        this.languageCodes = [];\r\n        this.storageIsDisabled = false;\r\n        this.localStorage = false;\r\n        this.sessionStorage = false;\r\n    }\r\n    return LocaleConfig;\r\n}());\r\nLocaleConfig.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleConfig.ctorParameters = function () { return []; };\r\nvar LocaleConfigAPI = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     */\r\n    function LocaleConfigAPI(configuration) {\r\n        this.configuration = configuration;\r\n    }\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?=} textDirection\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.addLanguage = function (languageCode, textDirection) {\r\n        if (textDirection === void 0) { textDirection = \"LTR\"; }\r\n        this.configuration.languageCodes.push({ code: languageCode, direction: textDirection });\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} languageCodes\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.addLanguages = function (languageCodes) {\r\n        for (var _i = 0, languageCodes_1 = languageCodes; _i < languageCodes_1.length; _i++) {\r\n            var languageCode = languageCodes_1[_i];\r\n            this.configuration.languageCodes.push({ code: languageCode, direction: \"ltr\" });\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.disableStorage = function () {\r\n        this.configuration.storageIsDisabled = true;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?=} days\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.setCookieExpiration = function (days) {\r\n        this.configuration.cookiesExpirationDays = days;\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.useLocalStorage = function () {\r\n        this.configuration.localStorage = true;\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.useSessionStorage = function () {\r\n        this.configuration.sessionStorage = true;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.defineLanguage = function (languageCode) {\r\n        this.configuration.languageCode = languageCode;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?} countryCode\r\n     * @param {?=} scriptCode\r\n     * @param {?=} numberingSystem\r\n     * @param {?=} calendar\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.defineDefaultLocale = function (languageCode, countryCode, scriptCode, numberingSystem, calendar) {\r\n        this.configuration.languageCode = languageCode;\r\n        this.configuration.countryCode = countryCode;\r\n        this.configuration.scriptCode = scriptCode;\r\n        this.configuration.numberingSystem = numberingSystem;\r\n        this.configuration.calendar = calendar;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} currencyCode\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.defineCurrency = function (currencyCode) {\r\n        this.configuration.currencyCode = currencyCode;\r\n        return this;\r\n    };\r\n    return LocaleConfigAPI;\r\n}());\r\nvar __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try {\r\n            step(generator.next(value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function rejected(value) { try {\r\n            step(generator[\"throw\"](value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\n/**\r\n * Implement this class-interface to create a custom storage for default locale & currency.\r\n * @abstract\r\n */\r\nvar LocaleStorage = (function () {\r\n    function LocaleStorage() {\r\n    }\r\n    /**\r\n     * This method must contain the logic to read the storage.\r\n    \\@param name 'defaultLocale' or 'currency'\r\n    \\@return A promise with the value of the given name\r\n     * @abstract\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    LocaleStorage.prototype.read = function (name) { };\r\n    /**\r\n     * This method must contain the logic to write the storage.\r\n    \\@param name 'defaultLocale' or 'currency'\r\n    \\@param value The value for the given name\r\n     * @abstract\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    LocaleStorage.prototype.write = function (name, value) { };\r\n    return LocaleStorage;\r\n}());\r\nLocaleStorage.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleStorage.ctorParameters = function () { return []; };\r\nvar BrowserStorage = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     */\r\n    function BrowserStorage(configuration) {\r\n        this.configuration = configuration;\r\n        this.hasCookie = typeof navigator !== \"undefined\" && navigator.cookieEnabled;\r\n        this.hasStorage = typeof Storage !== \"undefined\";\r\n    }\r\n    /**\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.read = function (name) {\r\n        return __awaiter$1(this, void 0, void 0, function () {\r\n            var value;\r\n            return __generator(this, function (_a) {\r\n                value = null;\r\n                if (!this.configuration.storageIsDisabled) {\r\n                    if (this.configuration.localStorage && this.hasStorage) {\r\n                        value = this.getLocalStorage(name);\r\n                    }\r\n                    else if (this.configuration.sessionStorage && this.hasStorage) {\r\n                        value = this.getSessionStorage(name);\r\n                    }\r\n                    else if (this.hasCookie) {\r\n                        value = this.getCookie(name);\r\n                    }\r\n                }\r\n                return [2 /*return*/, value];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.write = function (name, value) {\r\n        return __awaiter$1(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                if (!this.configuration.storageIsDisabled) {\r\n                    if (this.configuration.localStorage && this.hasStorage) {\r\n                        this.setLocalStorage(name, value);\r\n                    }\r\n                    else if (this.configuration.sessionStorage && this.hasStorage) {\r\n                        this.setSessionStorage(name, value);\r\n                    }\r\n                    else if (this.hasCookie) {\r\n                        this.setCookie(name, value);\r\n                    }\r\n                }\r\n                return [2 /*return*/];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.getLocalStorage = function (name) {\r\n        return localStorage.getItem(name);\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.getSessionStorage = function (name) {\r\n        return sessionStorage.getItem(name);\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.getCookie = function (name) {\r\n        var /** @type {?} */ result = null;\r\n        if (typeof document !== \"undefined\") {\r\n            result = new RegExp(\"(?:^|; )\" + encodeURIComponent(name) + \"=([^;]*)\").exec(document.cookie);\r\n        }\r\n        return result ? result[1] : null;\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.setLocalStorage = function (name, value) {\r\n        localStorage.setItem(name, value);\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.setSessionStorage = function (name, value) {\r\n        sessionStorage.setItem(name, value);\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.setCookie = function (name, value) {\r\n        var /** @type {?} */ expires = \"\";\r\n        if (this.configuration.cookiesExpirationDays != null) {\r\n            var /** @type {?} */ expirationDate = new Date();\r\n            expirationDate.setTime(expirationDate.getTime() +\r\n                (this.configuration.cookiesExpirationDays * 24 * 60 * 60 * 1000));\r\n            expires = \"; expires=\" + expirationDate.toUTCString();\r\n        }\r\n        if (typeof document !== \"undefined\") {\r\n            document.cookie = name + \"=\" + value + expires + \"; path=/\";\r\n        }\r\n    };\r\n    return BrowserStorage;\r\n}());\r\nBrowserStorage.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nBrowserStorage.ctorParameters = function () { return [\r\n    { type: LocaleConfig, },\r\n]; };\r\nvar DefaultLocale = (function () {\r\n    function DefaultLocale() {\r\n    }\r\n    Object.defineProperty(DefaultLocale.prototype, \"value\", {\r\n        /**\r\n         * @return {?}\r\n         */\r\n        get: function () {\r\n            return this._value;\r\n        },\r\n        /**\r\n         * @param {?} defaultLocale\r\n         * @return {?}\r\n         */\r\n        set: function (defaultLocale) {\r\n            this._value = defaultLocale;\r\n            this.parseValue();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?=} countryCode\r\n     * @param {?=} scriptCode\r\n     * @param {?=} numberingSystem\r\n     * @param {?=} calendar\r\n     * @return {?}\r\n     */\r\n    DefaultLocale.prototype.build = function (languageCode, countryCode, scriptCode, numberingSystem, calendar) {\r\n        this.languageCode = languageCode;\r\n        this.scriptCode = scriptCode;\r\n        this.countryCode = countryCode;\r\n        this.numberingSystem = numberingSystem;\r\n        this.calendar = calendar;\r\n        var /** @type {?} */ value = [];\r\n        value.push(languageCode);\r\n        value.push(!!scriptCode ? \"-\" + scriptCode : \"\");\r\n        value.push(!!countryCode ? \"-\" + countryCode : \"\");\r\n        // Adds the 'u' (Unicode) extension.\r\n        value.push((!!numberingSystem || !!calendar) ? \"-u\" : \"\");\r\n        value.push(!!numberingSystem ? \"-nu-\" + numberingSystem : \"\");\r\n        value.push(!!calendar ? \"-ca-\" + calendar : \"\");\r\n        this._value = value.join(\"\");\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    DefaultLocale.prototype.parseValue = function () {\r\n        if (!!this.value) {\r\n            var /** @type {?} */ value = this.value;\r\n            // Looks for the 'u' (Unicode) extension.\r\n            var /** @type {?} */ index = value.search(\"-u\");\r\n            if (index != -1) {\r\n                var /** @type {?} */ extensions = value.substring(index + 1).split(\"-\");\r\n                switch (extensions.length) {\r\n                    case 3:\r\n                        if (extensions[1] == \"nu\") {\r\n                            this.numberingSystem = extensions[2];\r\n                        }\r\n                        else if (extensions[1] == \"ca\") {\r\n                            this.calendar = extensions[2];\r\n                        }\r\n                        break;\r\n                    default:\r\n                        this.numberingSystem = extensions[2];\r\n                        this.calendar = extensions[4];\r\n                        break;\r\n                }\r\n                // Extracts the codes.\r\n                value = value.substring(0, index);\r\n            }\r\n            var /** @type {?} */ codes = value.split(\"-\");\r\n            switch (codes.length) {\r\n                case 1:\r\n                    this.languageCode = codes[0];\r\n                    break;\r\n                case 2:\r\n                    this.languageCode = codes[0];\r\n                    this.countryCode = codes[1];\r\n                    break;\r\n                default:\r\n                    this.languageCode = codes[0];\r\n                    this.scriptCode = codes[1];\r\n                    this.countryCode = codes[2];\r\n                    break;\r\n            }\r\n        }\r\n    };\r\n    return DefaultLocale;\r\n}());\r\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try {\r\n            step(generator.next(value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function rejected(value) { try {\r\n            step(generator[\"throw\"](value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar LocaleService = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     * @param {?} storage\r\n     */\r\n    function LocaleService(configuration, storage) {\r\n        this.configuration = configuration;\r\n        this.storage = storage;\r\n        this.languageCodeChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"](true);\r\n        this.defaultLocaleChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"](true);\r\n        this.currencyCodeChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"](true);\r\n        this.loadTranslation = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__[\"Subject\"]();\r\n        this.defaultLocale = new DefaultLocale();\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.addConfiguration = function () {\r\n        return new LocaleConfigAPI(this.configuration);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getConfiguration = function () {\r\n        return this.configuration;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.init = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.initStorage()];\r\n                    case 1:\r\n                        _a.sent();\r\n                        if (!!this.configuration.languageCode && !!this.configuration.countryCode) {\r\n                            this.initDefaultLocale();\r\n                        }\r\n                        else if (!!this.configuration.languageCode) {\r\n                            this.initLanguage();\r\n                        }\r\n                        if (!!this.configuration.currencyCode) {\r\n                            this.initCurrency();\r\n                        }\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getAvailableLanguages = function () {\r\n        return this.configuration.languageCodes.map(function (language) { return language.code; });\r\n    };\r\n    /**\r\n     * @param {?=} languageCode\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getLanguageDirection = function (languageCode) {\r\n        if (languageCode === void 0) { languageCode = this.defaultLocale.languageCode; }\r\n        var /** @type {?} */ matchedLanguages = this.matchLanguage(languageCode);\r\n        return matchedLanguages[0].direction;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentLanguage = function () {\r\n        return this.defaultLocale.languageCode;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentCountry = function () {\r\n        if (!!this.defaultLocale.countryCode) {\r\n            return this.defaultLocale.countryCode;\r\n        }\r\n        return \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentScript = function () {\r\n        if (!!this.defaultLocale.scriptCode) {\r\n            return this.defaultLocale.scriptCode;\r\n        }\r\n        return \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentLocale = function () {\r\n        var /** @type {?} */ locale = !!this.defaultLocale.countryCode\r\n            ? this.defaultLocale.languageCode + \"-\" + this.defaultLocale.countryCode\r\n            : this.defaultLocale.languageCode;\r\n        return locale;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentNumberingSystem = function () {\r\n        if (!!this.defaultLocale.numberingSystem) {\r\n            return this.defaultLocale.numberingSystem;\r\n        }\r\n        return \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentCalendar = function () {\r\n        if (!!this.defaultLocale.calendar) {\r\n            return this.defaultLocale.calendar;\r\n        }\r\n        return \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getDefaultLocale = function () {\r\n        return this.defaultLocale.value;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentCurrency = function () {\r\n        return this.currencyCode;\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.setCurrentLanguage = function (languageCode) {\r\n        if (this.defaultLocale.languageCode != languageCode) {\r\n            this.defaultLocale.build(languageCode);\r\n            this.storage.write(\"defaultLocale\", this.defaultLocale.value);\r\n            this.sendLanguageEvents();\r\n            this.sendTranslationEvents();\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?} countryCode\r\n     * @param {?=} scriptCode\r\n     * @param {?=} numberingSystem\r\n     * @param {?=} calendar\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.setDefaultLocale = function (languageCode, countryCode, scriptCode, numberingSystem, calendar) {\r\n        if (this.defaultLocale.languageCode != languageCode ||\r\n            this.defaultLocale.countryCode != countryCode ||\r\n            this.defaultLocale.scriptCode != scriptCode ||\r\n            this.defaultLocale.numberingSystem != numberingSystem ||\r\n            this.defaultLocale.calendar != calendar) {\r\n            this.defaultLocale.build(languageCode, countryCode, scriptCode, numberingSystem, calendar);\r\n            this.storage.write(\"defaultLocale\", this.defaultLocale.value);\r\n            this.sendDefaultLocaleEvents();\r\n            this.sendTranslationEvents();\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} currencyCode\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.setCurrentCurrency = function (currencyCode) {\r\n        if (this.currencyCode != currencyCode) {\r\n            this.currencyCode = currencyCode;\r\n            this.storage.write(\"currency\", this.currencyCode);\r\n            this.sendCurrencyEvents();\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.initStorage = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var defaultLocale, currencyCode;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!!this.defaultLocale.value) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.storage.read(\"defaultLocale\")];\r\n                    case 1:\r\n                        defaultLocale = _a.sent();\r\n                        if (!!defaultLocale) {\r\n                            this.defaultLocale.value = defaultLocale;\r\n                        }\r\n                        _a.label = 2;\r\n                    case 2:\r\n                        if (!(this.currencyCode == null)) return [3 /*break*/, 4];\r\n                        return [4 /*yield*/, this.storage.read(\"currency\")];\r\n                    case 3:\r\n                        currencyCode = _a.sent();\r\n                        if (!!currencyCode) {\r\n                            this.currencyCode = currencyCode;\r\n                        }\r\n                        _a.label = 4;\r\n                    case 4: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.initLanguage = function () {\r\n        if (!this.defaultLocale.languageCode) {\r\n            var /** @type {?} */ browserLanguage = this.getBrowserLanguage();\r\n            var /** @type {?} */ matchedLanguages = [];\r\n            if (!!browserLanguage) {\r\n                matchedLanguages = this.matchLanguage(browserLanguage);\r\n            }\r\n            if (!!browserLanguage && matchedLanguages.length > 0) {\r\n                this.defaultLocale.build(browserLanguage);\r\n            }\r\n            else {\r\n                this.defaultLocale.build(this.configuration.languageCode);\r\n            }\r\n            this.storage.write(\"defaultLocale\", this.defaultLocale.value);\r\n        }\r\n        this.sendLanguageEvents();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.initDefaultLocale = function () {\r\n        if (!this.defaultLocale.value) {\r\n            this.defaultLocale.build(this.configuration.languageCode, this.configuration.countryCode, this.configuration.scriptCode, this.configuration.numberingSystem, this.configuration.calendar);\r\n            this.storage.write(\"defaultLocale\", this.defaultLocale.value);\r\n        }\r\n        this.sendDefaultLocaleEvents();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.initCurrency = function () {\r\n        if (this.currencyCode == null) {\r\n            this.currencyCode = this.configuration.currencyCode;\r\n            this.storage.write(\"currency\", this.currencyCode);\r\n        }\r\n        this.sendCurrencyEvents();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getBrowserLanguage = function () {\r\n        var /** @type {?} */ browserLanguage = null;\r\n        if (typeof navigator !== \"undefined\" && navigator.language) {\r\n            browserLanguage = navigator.language;\r\n        }\r\n        if (browserLanguage != null) {\r\n            var /** @type {?} */ index = browserLanguage.indexOf(\"-\");\r\n            if (index != -1) {\r\n                browserLanguage = browserLanguage.substring(0, index);\r\n            }\r\n        }\r\n        return browserLanguage;\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.matchLanguage = function (languageCode) {\r\n        var /** @type {?} */ matchedLanguages = this.configuration.languageCodes.filter(function (language) {\r\n            return language.code == languageCode;\r\n        });\r\n        return matchedLanguages;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.sendLanguageEvents = function () {\r\n        this.languageCodeChanged.emit(this.defaultLocale.languageCode);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.sendDefaultLocaleEvents = function () {\r\n        this.defaultLocaleChanged.emit(this.defaultLocale.value);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.sendCurrencyEvents = function () {\r\n        this.currencyCodeChanged.emit(this.currencyCode);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.sendTranslationEvents = function () {\r\n        // This event is subscribed by TranslationService to load the translation data.\r\n        this.loadTranslation.next();\r\n    };\r\n    return LocaleService;\r\n}());\r\nLocaleService.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleService.ctorParameters = function () { return [\r\n    { type: LocaleConfig, },\r\n    { type: LocaleStorage, },\r\n]; };\r\nLocaleService.propDecorators = {\r\n    'languageCodeChanged': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\r\n    'defaultLocaleChanged': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\r\n    'currencyCodeChanged': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\r\n};\r\nvar TranslationConfig = (function () {\r\n    function TranslationConfig() {\r\n        this.translationData = {};\r\n        this.providers = [];\r\n        this.localeAsLanguage = false;\r\n        this.keySeparator = \".\";\r\n        this.i18nPlural = true;\r\n    }\r\n    return TranslationConfig;\r\n}());\r\nTranslationConfig.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationConfig.ctorParameters = function () { return []; };\r\n/**\r\n * Provides the methods to check if Intl APIs are supported.\r\n */\r\nvar IntlAPI = (function () {\r\n    function IntlAPI() {\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntlAPI.hasDateTimeFormat = function () {\r\n        return this.hasIntl && Intl.hasOwnProperty(\"DateTimeFormat\");\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntlAPI.hasNumberFormat = function () {\r\n        return this.hasIntl && Intl.hasOwnProperty(\"NumberFormat\");\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntlAPI.hasCollator = function () {\r\n        return this.hasIntl && Intl.hasOwnProperty(\"Collator\");\r\n    };\r\n    return IntlAPI;\r\n}());\r\nIntlAPI.hasIntl = typeof Intl === \"object\" && !!Intl;\r\nvar TranslationConfigAPI = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     */\r\n    function TranslationConfigAPI(configuration) {\r\n        this.configuration = configuration;\r\n    }\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?} translation\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.addTranslation = function (languageCode, translation) {\r\n        this.configuration.translationData[languageCode] =\r\n            typeof this.configuration.translationData[languageCode] !== \"undefined\"\r\n                ? Object.assign({}, this.configuration.translationData[languageCode], translation) : translation;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} prefix\r\n     * @param {?=} dataFormat\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.addProvider = function (prefix, dataFormat) {\r\n        if (dataFormat === void 0) { dataFormat = \"json\"; }\r\n        this.configuration.providers.push({ args: { type: \"Static\", prefix: prefix, dataFormat: dataFormat } });\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} path\r\n     * @param {?=} dataFormat\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.addWebAPIProvider = function (path, dataFormat) {\r\n        if (dataFormat === void 0) { dataFormat = \"json\"; }\r\n        this.configuration.providers.push({ args: { type: \"WebAPI\", path: path, dataFormat: dataFormat } });\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?=} args\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.addCustomProvider = function (args) {\r\n        this.configuration.providers.push({ args: args });\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.useLocaleAsLanguage = function () {\r\n        this.configuration.localeAsLanguage = true;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.setMissingValue = function (value) {\r\n        this.configuration.missingValue = value;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.setMissingKey = function (key) {\r\n        this.configuration.missingKey = key;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} keySeparator\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.setComposedKeySeparator = function (keySeparator) {\r\n        this.configuration.keySeparator = keySeparator;\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.disableI18nPlural = function () {\r\n        this.configuration.i18nPlural = false;\r\n        return this;\r\n    };\r\n    return TranslationConfigAPI;\r\n}());\r\n/**\r\n * Implement this class-interface to create a custom provider for translation data.\r\n * @abstract\r\n */\r\nvar TranslationProvider = (function () {\r\n    function TranslationProvider() {\r\n    }\r\n    /**\r\n     * This method must contain the logic of data access.\r\n    \\@param language The current language\r\n    \\@param args The parameter of addCustomProvider method\r\n    \\@return An observable of an object of translation data: {key: value}\r\n     * @abstract\r\n     * @param {?} language\r\n     * @param {?} args\r\n     * @return {?}\r\n     */\r\n    TranslationProvider.prototype.getTranslation = function (language, args) { };\r\n    return TranslationProvider;\r\n}());\r\nTranslationProvider.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationProvider.ctorParameters = function () { return []; };\r\nvar HttpTranslationProvider = (function () {\r\n    /**\r\n     * @param {?} http\r\n     */\r\n    function HttpTranslationProvider(http) {\r\n        this.http = http;\r\n    }\r\n    /**\r\n     * @param {?} language\r\n     * @param {?} args\r\n     * @return {?}\r\n     */\r\n    HttpTranslationProvider.prototype.getTranslation = function (language, args) {\r\n        var /** @type {?} */ url = \"\";\r\n        switch (args.type) {\r\n            case \"WebAPI\":\r\n                url += args.path + language;\r\n                break;\r\n            default:\r\n                url += args.prefix + language + \".\" + args.dataFormat;\r\n        }\r\n        return this.http.get(url)\r\n            .map(function (res) { return res.json(); });\r\n    };\r\n    return HttpTranslationProvider;\r\n}());\r\nHttpTranslationProvider.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nHttpTranslationProvider.ctorParameters = function () { return [\r\n    { type: __WEBPACK_IMPORTED_MODULE_5__angular_http__[\"b\" /* Http */], },\r\n]; };\r\n/**\r\n * Implement this class-interface to create a custom handler for translated values.\r\n * @abstract\r\n */\r\nvar TranslationHandler = (function () {\r\n    function TranslationHandler() {\r\n    }\r\n    /**\r\n     * This method must contain the logic to parse the translated value.\r\n    \\@param path The path of the key\r\n    \\@param key The key that has been requested\r\n    \\@param value The translated value\r\n    \\@param args The parameters passed along with the key\r\n    \\@param lang The current language\r\n    \\@return The parsed value\r\n     * @abstract\r\n     * @param {?} path\r\n     * @param {?} key\r\n     * @param {?} value\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    TranslationHandler.prototype.parseValue = function (path, key, value, args, lang) { };\r\n    return TranslationHandler;\r\n}());\r\nTranslationHandler.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationHandler.ctorParameters = function () { return []; };\r\nvar DefaultTranslationHandler = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     */\r\n    function DefaultTranslationHandler(configuration) {\r\n        this.configuration = configuration;\r\n    }\r\n    /**\r\n     * @param {?} path\r\n     * @param {?} key\r\n     * @param {?} value\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    DefaultTranslationHandler.prototype.parseValue = function (path, key, value, args, lang) {\r\n        if (value == null) {\r\n            return this.handleMissingValue(path);\r\n        }\r\n        else if (args) {\r\n            return this.handleArgs(value, args);\r\n        }\r\n        return value;\r\n    };\r\n    /**\r\n     * @param {?} path\r\n     * @return {?}\r\n     */\r\n    DefaultTranslationHandler.prototype.handleMissingValue = function (path) {\r\n        if (this.configuration.missingValue != null) {\r\n            return this.configuration.missingValue;\r\n        }\r\n        // The same path is returned.\r\n        return path;\r\n    };\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} args\r\n     * @return {?}\r\n     */\r\n    DefaultTranslationHandler.prototype.handleArgs = function (value, args) {\r\n        var /** @type {?} */ TEMPLATE_REGEXP = /{{\\s?([^{}\\s]*)\\s?}}/g;\r\n        return value.replace(TEMPLATE_REGEXP, function (substring, parsedKey) {\r\n            var /** @type {?} */ replacer = (args[parsedKey]);\r\n            return typeof replacer !== \"undefined\" ? replacer : substring;\r\n        });\r\n    };\r\n    return DefaultTranslationHandler;\r\n}());\r\nDefaultTranslationHandler.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nDefaultTranslationHandler.ctorParameters = function () { return [\r\n    { type: TranslationConfig, },\r\n]; };\r\nvar LoadingMode = {};\r\nLoadingMode.Direct = 0;\r\nLoadingMode.Async = 1;\r\nLoadingMode[LoadingMode.Direct] = \"Direct\";\r\nLoadingMode[LoadingMode.Async] = \"Async\";\r\nvar ServiceState = {};\r\nServiceState.isReady = 0;\r\nServiceState.isLoading = 1;\r\nServiceState.isWaiting = 2;\r\nServiceState[ServiceState.isReady] = \"isReady\";\r\nServiceState[ServiceState.isLoading] = \"isLoading\";\r\nServiceState[ServiceState.isWaiting] = \"isWaiting\";\r\nvar __awaiter$2 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try {\r\n            step(generator.next(value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function rejected(value) { try {\r\n            step(generator[\"throw\"](value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar TranslationService = (function () {\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} configuration\r\n     * @param {?} translationProvider\r\n     * @param {?} translationHandler\r\n     */\r\n    function TranslationService(locale, configuration, translationProvider, translationHandler) {\r\n        this.locale = locale;\r\n        this.configuration = configuration;\r\n        this.translationProvider = translationProvider;\r\n        this.translationHandler = translationHandler;\r\n        this.translationChanged = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"](true);\r\n        this.translationError = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"](true);\r\n        /**\r\n         * The translation data: {language: {key: value}}.\r\n         */\r\n        this.translationData = {};\r\n        this.serviceState = ServiceState.isWaiting;\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.addConfiguration = function () {\r\n        return new TranslationConfigAPI(this.configuration);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.getConfiguration = function () {\r\n        return this.configuration;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.init = function () {\r\n        return __awaiter$2(this, void 0, void 0, function () {\r\n            var _this = this;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: \r\n                    // Waiting for LocaleService initialization.\r\n                    return [4 /*yield*/, this.locale.init()];\r\n                    case 1:\r\n                        // Waiting for LocaleService initialization.\r\n                        _a.sent();\r\n                        if (this.configuration.providers.length > 0) {\r\n                            this.loadingMode = LoadingMode.Async;\r\n                        }\r\n                        else {\r\n                            this.loadingMode = LoadingMode.Direct;\r\n                        }\r\n                        // When the language changes, loads translation data.\r\n                        this.locale.loadTranslation.subscribe(function () { _this.loadTranslation(); });\r\n                        return [4 /*yield*/, this.loadTranslation()];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.getLanguage = function () {\r\n        return this.language;\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @param {?=} args\r\n     * @param {?=} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translate = function (keys, args, lang) {\r\n        if (args === void 0) { args = null; }\r\n        if (lang === void 0) { lang = this.language; }\r\n        // If the service is not ready, returns the keys.\r\n        if (this.serviceState != ServiceState.isReady)\r\n            return keys;\r\n        if (Array.isArray(keys)) {\r\n            var /** @type {?} */ data = {};\r\n            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\r\n                var key = keys_1[_i];\r\n                data[key] = this.translateKey(key, args, lang);\r\n            }\r\n            return data;\r\n        }\r\n        return this.translateKey(keys, args, lang);\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @param {?=} args\r\n     * @param {?=} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translateAsync = function (keys, args, lang) {\r\n        var _this = this;\r\n        if (lang === void 0) { lang = this.language; }\r\n        return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].create(function (observer) {\r\n            var /** @type {?} */ values = _this.translate(keys, args, lang);\r\n            observer.next(values);\r\n            observer.complete();\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translateKey = function (key, args, lang) {\r\n        if (key == null || key == \"\")\r\n            return null;\r\n        // I18n plural.\r\n        if (this.configuration.i18nPlural && /^\\d+\\b/.exec(key)) {\r\n            return this.translateI18nPlural(key, args, lang);\r\n        }\r\n        return this.getValue(key, args, lang);\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.getValue = function (key, args, lang) {\r\n        var /** @type {?} */ path = key;\r\n        var /** @type {?} */ value = null;\r\n        if (this.translationData[lang]) {\r\n            var /** @type {?} */ translation = this.translationData[lang];\r\n            // Composed key.\r\n            var /** @type {?} */ sequences = key.split(this.configuration.keySeparator);\r\n            do {\r\n                key = ((sequences.shift()));\r\n                if (translation[key] && typeof translation[key] === \"object\") {\r\n                    translation = translation[key];\r\n                }\r\n            } while (sequences.length > 0);\r\n            value = translation[key] || translation[this.configuration.missingKey];\r\n        }\r\n        return this.translationHandler.parseValue(path, key, value, args, lang);\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translateI18nPlural = function (key, args, lang) {\r\n        var /** @type {?} */ keyText = key.replace(/^\\d+\\b/, \"\");\r\n        keyText = keyText.trim();\r\n        var /** @type {?} */ keyNumber = parseFloat(key);\r\n        key = key.replace(/^\\d+/, this.translateNumber(keyNumber));\r\n        return key.replace(keyText, this.getValue(keyText, args, lang));\r\n    };\r\n    /**\r\n     * @param {?} keyNumber\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translateNumber = function (keyNumber) {\r\n        if (!isNaN(keyNumber) && IntlAPI.hasNumberFormat()) {\r\n            var /** @type {?} */ localeNumber = new Intl.NumberFormat(this.language).format(keyNumber);\r\n            return localeNumber;\r\n        }\r\n        return keyNumber.toString();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.loadTranslation = function () {\r\n        return __awaiter$2(this, void 0, void 0, function () {\r\n            var language;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        language = !this.configuration.localeAsLanguage\r\n                            ? this.locale.getCurrentLanguage()\r\n                            : this.locale.getCurrentLocale();\r\n                        if (!(language != null && language != this.language)) return [3 /*break*/, 3];\r\n                        if (!(this.loadingMode == LoadingMode.Async)) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.getTranslation(language).toPromise()];\r\n                    case 1:\r\n                        _a.sent();\r\n                        return [3 /*break*/, 3];\r\n                    case 2:\r\n                        this.translationData = {};\r\n                        this.translationData[language] = this.configuration.translationData[language];\r\n                        this.releaseTranslation(language);\r\n                        _a.label = 3;\r\n                    case 3: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} language\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.getTranslation = function (language) {\r\n        var _this = this;\r\n        return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].create(function (observer) {\r\n            _this.translationData = {};\r\n            _this.serviceState = ServiceState.isLoading;\r\n            var /** @type {?} */ sequencesOfTranslationData = [];\r\n            for (var _i = 0, _a = _this.configuration.providers; _i < _a.length; _i++) {\r\n                var provider = _a[_i];\r\n                sequencesOfTranslationData.push(_this.translationProvider.getTranslation(language, provider.args));\r\n            }\r\n            // Merges all the sequences into a single observable sequence.\r\n            __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].merge.apply(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"], sequencesOfTranslationData).subscribe(function (data) {\r\n                _this.addData(data, language);\r\n            }, function (error) {\r\n                // Sends an event for custom actions.\r\n                _this.translationError.emit(error);\r\n                _this.releaseTranslation(language);\r\n                observer.next(null);\r\n                observer.complete();\r\n            }, function () {\r\n                _this.releaseTranslation(language);\r\n                observer.next(null);\r\n                observer.complete();\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} data\r\n     * @param {?} language\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.addData = function (data, language) {\r\n        this.translationData[language] = typeof this.translationData[language] !== \"undefined\"\r\n            ? Object.assign({}, this.translationData[language], data) : data;\r\n    };\r\n    /**\r\n     * @param {?} language\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.releaseTranslation = function (language) {\r\n        this.serviceState = ServiceState.isReady;\r\n        this.language = language;\r\n        this.sendEvents();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.sendEvents = function () {\r\n        // Sends an event for the components.\r\n        this.translationChanged.emit(this.language);\r\n    };\r\n    return TranslationService;\r\n}());\r\nTranslationService.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationService.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: TranslationConfig, },\r\n    { type: TranslationProvider, },\r\n    { type: TranslationHandler, },\r\n]; };\r\nTranslationService.propDecorators = {\r\n    'translationChanged': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\r\n    'translationError': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\r\n};\r\n/**\r\n * Provides 'lang' to the translate pipe.\r\n */\r\nvar Translation = (function () {\r\n    /**\r\n     * @param {?=} translation\r\n     * @param {?=} changeDetectorRef\r\n     */\r\n    function Translation(translation, changeDetectorRef) {\r\n        if (translation === void 0) { translation = InjectorRef.get(TranslationService); }\r\n        var _this = this;\r\n        this.translation = translation;\r\n        this.changeDetectorRef = changeDetectorRef;\r\n        this.paramSubscriptions = [];\r\n        this.lang = this.translation.getLanguage();\r\n        // When the language changes, subscribes to the event & updates lang property.\r\n        this.paramSubscriptions.push(this.translation.translationChanged.subscribe(function (language) {\r\n            _this.lang = language;\r\n            // OnPush Change Detection strategy.\r\n            if (_this.changeDetectorRef) {\r\n                _this.changeDetectorRef.markForCheck();\r\n            }\r\n        }));\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    Translation.prototype.cancelParamSubscriptions = function () {\r\n        this.paramSubscriptions.forEach(function (subscription) {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n        });\r\n    };\r\n    return Translation;\r\n}());\r\nTranslation.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslation.ctorParameters = function () { return [\r\n    { type: TranslationService, },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"], },\r\n]; };\r\n/**\r\n * Provides 'lang' to the translate pipe,\r\n'defaultLocale' & 'currency' to localeDecimal, localePercent & localeCurrency pipes.\r\n */\r\nvar Localization = (function (_super) {\r\n    __extends(Localization, _super);\r\n    /**\r\n     * @param {?=} locale\r\n     * @param {?=} translation\r\n     * @param {?=} changeDetectorRef\r\n     */\r\n    function Localization(locale, translation, changeDetectorRef) {\r\n        if (locale === void 0) { locale = InjectorRef.get(LocaleService); }\r\n        if (translation === void 0) { translation = InjectorRef.get(TranslationService); }\r\n        var _this = _super.call(this, translation, changeDetectorRef) || this;\r\n        _this.locale = locale;\r\n        _this.translation = translation;\r\n        _this.changeDetectorRef = changeDetectorRef;\r\n        _this.defaultLocale = _this.locale.getDefaultLocale();\r\n        // When the default locale changes, subscribes to the event & updates defaultLocale property.\r\n        _this.paramSubscriptions.push(_this.locale.defaultLocaleChanged.subscribe(function (defaultLocale) {\r\n            _this.defaultLocale = defaultLocale;\r\n            // OnPush Change Detection strategy.\r\n            if (_this.changeDetectorRef) {\r\n                _this.changeDetectorRef.markForCheck();\r\n            }\r\n        }));\r\n        _this.currency = _this.locale.getCurrentCurrency();\r\n        // When the currency changes, subscribes to the event & updates currency property.\r\n        _this.paramSubscriptions.push(_this.locale.currencyCodeChanged.subscribe(function (currency) {\r\n            _this.currency = currency;\r\n            // OnPush Change Detection strategy.\r\n            if (_this.changeDetectorRef) {\r\n                _this.changeDetectorRef.markForCheck();\r\n            }\r\n        }));\r\n        return _this;\r\n    }\r\n    return Localization;\r\n}(Translation));\r\nLocalization.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocalization.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: TranslationService, },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"], },\r\n]; };\r\n/**\r\n * @abstract\r\n */\r\nvar NumberCode = (function () {\r\n    /**\r\n     * @param {?} locale\r\n     */\r\n    function NumberCode(locale) {\r\n        this.locale = locale;\r\n    }\r\n    Object.defineProperty(NumberCode.prototype, \"numberCodes\", {\r\n        /**\r\n         * @return {?}\r\n         */\r\n        get: function () {\r\n            var /** @type {?} */ numberCodes = [];\r\n            for (var /** @type {?} */ num = 0; num <= 9; num++) {\r\n                numberCodes.push(this.toUnicode(num.toString()));\r\n            }\r\n            if (IntlAPI.hasNumberFormat()) {\r\n                for (var /** @type {?} */ num = 0; num <= 9; num++) {\r\n                    numberCodes[num] = this.toUnicode(new Intl.NumberFormat(this.locale.getDefaultLocale()).format(num));\r\n                }\r\n            }\r\n            return numberCodes;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @abstract\r\n     * @param {?} s\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.parse = function (s) { };\r\n    /**\r\n     * @abstract\r\n     * @param {?} digits\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.getRegExp = function (digits) { };\r\n    /**\r\n     * @param {?} pattern\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.toChar = function (pattern) {\r\n        return pattern.replace(/\\\\u[\\dA-F]{4}/gi, function (match) {\r\n            return String.fromCharCode(parseInt(match.replace(/\\\\u/g, \"\"), 16));\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} c\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.toUnicode = function (c) {\r\n        return \"\\\\u\" + this.toHex(c.charCodeAt(0));\r\n    };\r\n    /**\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.toHex = function (value) {\r\n        var /** @type {?} */ hex = value.toString(16).toUpperCase();\r\n        // With padding.\r\n        hex = \"0000\".substr(0, 4 - hex.length) + hex;\r\n        return hex;\r\n    };\r\n    return NumberCode;\r\n}());\r\nNumberCode.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nNumberCode.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n]; };\r\nvar DecimalCode = (function (_super) {\r\n    __extends(DecimalCode, _super);\r\n    /**\r\n     * @param {?} locale\r\n     */\r\n    function DecimalCode(locale) {\r\n        var _this = _super.call(this, locale) || this;\r\n        _this.locale = locale;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(DecimalCode.prototype, \"decimalCodes\", {\r\n        /**\r\n         * @return {?}\r\n         */\r\n        get: function () {\r\n            var /** @type {?} */ decimalCodes = {\r\n                minusSign: this.toUnicode(\"-\"),\r\n                decimalSeparator: this.toUnicode(\".\"),\r\n                thousandSeparator: this.toUnicode(\",\")\r\n            };\r\n            if (IntlAPI.hasNumberFormat()) {\r\n                var /** @type {?} */ value = -1000.9; // Reference value.\r\n                var /** @type {?} */ localeValue = new Intl.NumberFormat(this.locale.getDefaultLocale()).format(value);\r\n                var /** @type {?} */ unicodeChars = [];\r\n                for (var /** @type {?} */ i = 0; i <= 7; i++) {\r\n                    unicodeChars.push(this.toUnicode(localeValue.charAt(i)));\r\n                }\r\n                // Right to left:\r\n                // checks Unicode characters 'RIGHT-TO-LEFT MARK' (U+200F) & 'Arabic Letter Mark' (U+061C),\r\n                // or the reverse order.\r\n                // Left to right:\r\n                // checks Unicode character 'LEFT-TO-RIGHT MARK' (U+200E).\r\n                if (unicodeChars[0] == \"\\\\u200F\" || unicodeChars[0] == \"\\\\u061C\") {\r\n                    decimalCodes = {\r\n                        minusSign: unicodeChars[1],\r\n                        decimalSeparator: unicodeChars[7],\r\n                        thousandSeparator: unicodeChars[3]\r\n                    };\r\n                }\r\n                else if (unicodeChars[0] == this.toUnicode(new Intl.NumberFormat(this.locale.getDefaultLocale()).format(1))) {\r\n                    decimalCodes = {\r\n                        minusSign: unicodeChars[7],\r\n                        decimalSeparator: unicodeChars[5],\r\n                        thousandSeparator: unicodeChars[1]\r\n                    };\r\n                }\r\n                else if (unicodeChars[0] == \"\\\\u200E\") {\r\n                    decimalCodes = {\r\n                        minusSign: unicodeChars[1],\r\n                        decimalSeparator: unicodeChars[7],\r\n                        thousandSeparator: unicodeChars[3]\r\n                    };\r\n                }\r\n                else {\r\n                    decimalCodes = {\r\n                        minusSign: unicodeChars[0],\r\n                        decimalSeparator: unicodeChars[6],\r\n                        thousandSeparator: unicodeChars[2]\r\n                    };\r\n                }\r\n            }\r\n            return decimalCodes;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @param {?} s\r\n     * @return {?}\r\n     */\r\n    DecimalCode.prototype.parse = function (s) {\r\n        var /** @type {?} */ value = \"\";\r\n        var /** @type {?} */ decimalCodes = this.decimalCodes;\r\n        var /** @type {?} */ characters = s.split(\"\");\r\n        for (var _i = 0, characters_1 = characters; _i < characters_1.length; _i++) {\r\n            var char = characters_1[_i];\r\n            var /** @type {?} */ charCode = this.toUnicode(char);\r\n            var /** @type {?} */ index = this.numberCodes.indexOf(charCode);\r\n            if (index != -1) {\r\n                value += index;\r\n            }\r\n            else if (charCode == decimalCodes.minusSign) {\r\n                value += \"-\";\r\n            }\r\n            else if (charCode == decimalCodes.decimalSeparator) {\r\n                value += \".\";\r\n            }\r\n            else if (charCode == decimalCodes.thousandSeparator) {\r\n                continue;\r\n            }\r\n            else {\r\n                return NaN;\r\n            }\r\n        }\r\n        return parseFloat(value);\r\n    };\r\n    /**\r\n     * @param {?} digits\r\n     * @return {?}\r\n     */\r\n    DecimalCode.prototype.getRegExp = function (digits) {\r\n        var /** @type {?} */ minInt = 1;\r\n        var /** @type {?} */ minFraction = 0;\r\n        var /** @type {?} */ maxFraction = 3;\r\n        if (!!digits) {\r\n            var /** @type {?} */ NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(\\-(\\d+))?)?$/;\r\n            var /** @type {?} */ parts = digits.match(NUMBER_FORMAT_REGEXP);\r\n            if (parts != null) {\r\n                if (parts[1] != null) {\r\n                    minInt = parseInt(parts[1]);\r\n                }\r\n                if (parts[3] != null) {\r\n                    minFraction = parseInt(parts[3]);\r\n                }\r\n                if (parts[5] != null) {\r\n                    maxFraction = parseInt(parts[5]);\r\n                }\r\n            }\r\n        }\r\n        var /** @type {?} */ minusSign = this.decimalCodes.minusSign;\r\n        var /** @type {?} */ zero = this.numberCodes[0];\r\n        var /** @type {?} */ decimalSeparator = this.decimalCodes.decimalSeparator;\r\n        var /** @type {?} */ thousandSeparator = this.decimalCodes.thousandSeparator;\r\n        var /** @type {?} */ nine = this.numberCodes[9];\r\n        // Pattern for 1.2-2 digits: /^-?[0-9,]{1,}\\.[0-9]{2,2}$/\r\n        // Unicode pattern = \"^\\u002d?[\\u0030-\\u0039,\\u002c]{1,}\\\\u002e[\\u0030-\\u0039]{2,2}$\"\r\n        var /** @type {?} */ pattern;\r\n        if (minFraction > 0 && maxFraction > 0) {\r\n            pattern = \"^\"\r\n                + minusSign\r\n                + \"?[\" + zero + \"-\" + nine + thousandSeparator\r\n                + \"]{\" + minInt + \",}\\\\\"\r\n                + decimalSeparator\r\n                + \"[\" + zero + \"-\" + nine\r\n                + \"]{\" + minFraction + \",\" + maxFraction\r\n                + \"}$\";\r\n        }\r\n        else if (minFraction == 0 && maxFraction > 0) {\r\n            // Decimal separator is optional.\r\n            pattern = \"^\"\r\n                + minusSign\r\n                + \"?[\" + zero + \"-\" + nine + thousandSeparator\r\n                + \"]{\" + minInt + \",}\\\\\"\r\n                + decimalSeparator\r\n                + \"?[\" + zero + \"-\" + nine\r\n                + \"]{\" + minFraction + \",\" + maxFraction\r\n                + \"}$\";\r\n        }\r\n        else {\r\n            // Integer number.\r\n            pattern = \"^\"\r\n                + minusSign\r\n                + \"?[\" + zero + \"-\" + nine + thousandSeparator\r\n                + \"]{\" + minInt + \",}$\";\r\n        }\r\n        pattern = this.toChar(pattern);\r\n        var /** @type {?} */ regExp = new RegExp(pattern);\r\n        return regExp;\r\n    };\r\n    return DecimalCode;\r\n}(NumberCode));\r\nDecimalCode.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nDecimalCode.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n]; };\r\nvar LocaleValidation = (function () {\r\n    /**\r\n     * @param {?} decimalCode\r\n     */\r\n    function LocaleValidation(decimalCode) {\r\n        this.decimalCode = decimalCode;\r\n    }\r\n    /**\r\n     * @param {?} s\r\n     * @return {?}\r\n     */\r\n    LocaleValidation.prototype.parseNumber = function (s) {\r\n        if (s == \"\") {\r\n            return null;\r\n        }\r\n        return this.decimalCode.parse(s);\r\n    };\r\n    return LocaleValidation;\r\n}());\r\nLocaleValidation.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleValidation.ctorParameters = function () { return [\r\n    { type: DecimalCode, },\r\n]; };\r\nvar Collator = (function () {\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} translation\r\n     */\r\n    function Collator(locale, translation) {\r\n        this.locale = locale;\r\n        this.translation = translation;\r\n    }\r\n    /**\r\n     * @param {?} key1\r\n     * @param {?} key2\r\n     * @param {?=} extension\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.compare = function (key1, key2, extension, options) {\r\n        if (options === void 0) { options = { usage: 'sort', sensitivity: 'variant' }; }\r\n        if (!IntlAPI.hasCollator()) {\r\n            return 0;\r\n        }\r\n        var /** @type {?} */ value1 = this.translation.translate(key1);\r\n        var /** @type {?} */ value2 = this.translation.translate(key2);\r\n        var /** @type {?} */ locale = this.addExtension(this.locale.getCurrentLocale(), extension);\r\n        return new Intl.Collator(locale, options).compare(value1, value2);\r\n    };\r\n    /**\r\n     * @param {?} list\r\n     * @param {?} keyName\r\n     * @param {?=} order\r\n     * @param {?=} extension\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.sort = function (list, keyName, order, extension, options) {\r\n        var _this = this;\r\n        if (order === void 0) { order = \"asc\"; }\r\n        if (options === void 0) { options = { usage: 'sort', sensitivity: 'variant' }; }\r\n        if (!list || !keyName || !IntlAPI.hasCollator()) {\r\n            return list;\r\n        }\r\n        list.sort(function (key1, key2) {\r\n            return _this.compare(key1[keyName], key2[keyName], extension, options);\r\n        });\r\n        if (order == \"desc\") {\r\n            list.reverse();\r\n        }\r\n        return list;\r\n    };\r\n    /**\r\n     * @param {?} list\r\n     * @param {?} keyName\r\n     * @param {?=} order\r\n     * @param {?=} extension\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.sortAsync = function (list, keyName, order, extension, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = { usage: 'sort', sensitivity: 'variant' }; }\r\n        return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].create(function (observer) {\r\n            observer.next(_this.sort(list, keyName, order, extension, options));\r\n            observer.complete();\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} s\r\n     * @param {?} list\r\n     * @param {?} keyNames\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.search = function (s, list, keyNames, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = { usage: 'search' }; }\r\n        if (!list || !keyNames || s == \"\" || s == null || !IntlAPI.hasCollator()) {\r\n            return list;\r\n        }\r\n        var /** @type {?} */ locale = this.locale.getCurrentLocale();\r\n        var /** @type {?} */ collator = new Intl.Collator(locale, options);\r\n        var /** @type {?} */ matches = list.filter(function (key) {\r\n            var /** @type {?} */ found = false;\r\n            for (var /** @type {?} */ i = 0; i < keyNames.length; i++) {\r\n                if (_this.match(key[keyNames[i]], s, collator)) {\r\n                    found = true;\r\n                    break;\r\n                }\r\n            }\r\n            return found;\r\n        });\r\n        return matches;\r\n    };\r\n    /**\r\n     * @param {?} s\r\n     * @param {?} list\r\n     * @param {?} keyNames\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.searchAsync = function (s, list, keyNames, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = { usage: 'search' }; }\r\n        return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].create(function (observer) {\r\n            observer.next(_this.search(s, list, keyNames, options));\r\n            observer.complete();\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?=} extension\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.addExtension = function (locale, extension) {\r\n        if (!!extension) {\r\n            locale = locale + \"-u-\" + extension;\r\n        }\r\n        return locale;\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} s\r\n     * @param {?} collator\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.match = function (key, s, collator) {\r\n        var /** @type {?} */ value = this.translation.translate(key);\r\n        var /** @type {?} */ valueLength = value.length;\r\n        var /** @type {?} */ sLength = s.length;\r\n        if (sLength > valueLength) {\r\n            return false;\r\n        }\r\n        if (sLength == valueLength) {\r\n            return collator.compare(value, s) == 0;\r\n        }\r\n        var /** @type {?} */ found = false;\r\n        for (var /** @type {?} */ i = 0; i < valueLength - (sLength - 1); i++) {\r\n            var /** @type {?} */ str = value.substr(i, sLength);\r\n            if (collator.compare(str, s) == 0) {\r\n                found = true;\r\n                break;\r\n            }\r\n        }\r\n        return found;\r\n    };\r\n    return Collator;\r\n}());\r\nCollator.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nCollator.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: TranslationService, },\r\n]; };\r\n/**\r\n * Property decorator for components to provide the parameter to the translate pipe.\r\n * @return {?}\r\n */\r\nfunction Language() {\r\n    /**\r\n     * @param {?} target\r\n     * @param {?=} propertyKey\r\n     * @return {?}\r\n     */\r\n    function DecoratorFactory(target, propertyKey) {\r\n        var /** @type {?} */ subscription;\r\n        var /** @type {?} */ targetNgOnInit = target.ngOnInit;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnInit() {\r\n            var _this = this;\r\n            var /** @type {?} */ translation = InjectorRef.get(TranslationService);\r\n            if (typeof propertyKey !== \"undefined\") {\r\n                this[propertyKey] = translation.getLanguage();\r\n                // When the language changes, subscribes to the event & updates language property.\r\n                subscription = translation.translationChanged.subscribe(function (language) {\r\n                    _this[propertyKey] = language;\r\n                });\r\n            }\r\n            if (targetNgOnInit) {\r\n                targetNgOnInit.apply(this);\r\n            }\r\n        }\r\n        target.ngOnInit = ngOnInit;\r\n        var /** @type {?} */ targetNgOnDestroy = target.ngOnDestroy;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnDestroy() {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n            if (targetNgOnDestroy) {\r\n                targetNgOnDestroy.apply(this);\r\n            }\r\n        }\r\n        target.ngOnDestroy = ngOnDestroy;\r\n        if (typeof propertyKey !== \"undefined\") {\r\n            Object.defineProperty(target, propertyKey, {\r\n                writable: true,\r\n                value: undefined\r\n            });\r\n        }\r\n    }\r\n    return DecoratorFactory;\r\n}\r\n/**\r\n * Property decorator for components to provide the parameter\r\nto localeDecimal, localePercent & localeCurrency pipes.\r\n * @return {?}\r\n */\r\nfunction DefaultLocale$1() {\r\n    /**\r\n     * @param {?} target\r\n     * @param {?=} propertyKey\r\n     * @return {?}\r\n     */\r\n    function DecoratorFactory(target, propertyKey) {\r\n        var /** @type {?} */ subscription;\r\n        var /** @type {?} */ targetNgOnInit = target.ngOnInit;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnInit() {\r\n            var _this = this;\r\n            var /** @type {?} */ locale = InjectorRef.get(LocaleService);\r\n            if (typeof propertyKey !== \"undefined\") {\r\n                this[propertyKey] = locale.getDefaultLocale();\r\n                // When the default locale changes, subscribes to the event & updates defaultLocale property.\r\n                subscription = locale.defaultLocaleChanged.subscribe(function (defaultLocale) {\r\n                    _this[propertyKey] = defaultLocale;\r\n                });\r\n            }\r\n            if (targetNgOnInit) {\r\n                targetNgOnInit.apply(this);\r\n            }\r\n        }\r\n        target.ngOnInit = ngOnInit;\r\n        var /** @type {?} */ targetNgOnDestroy = target.ngOnDestroy;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnDestroy() {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n            if (targetNgOnDestroy) {\r\n                targetNgOnDestroy.apply(this);\r\n            }\r\n        }\r\n        target.ngOnDestroy = ngOnDestroy;\r\n        if (typeof propertyKey !== \"undefined\") {\r\n            Object.defineProperty(target, propertyKey, {\r\n                writable: true,\r\n                value: undefined\r\n            });\r\n        }\r\n    }\r\n    return DecoratorFactory;\r\n}\r\n/**\r\n * Property decorator for components to provide the parameter to the localeCurrency pipe.\r\n * @return {?}\r\n */\r\nfunction Currency() {\r\n    /**\r\n     * @param {?} target\r\n     * @param {?=} propertyKey\r\n     * @return {?}\r\n     */\r\n    function DecoratorFactory(target, propertyKey) {\r\n        var /** @type {?} */ subscription;\r\n        var /** @type {?} */ targetNgOnInit = target.ngOnInit;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnInit() {\r\n            var _this = this;\r\n            var /** @type {?} */ locale = InjectorRef.get(LocaleService);\r\n            if (typeof propertyKey !== \"undefined\") {\r\n                this[propertyKey] = locale.getCurrentCurrency();\r\n                // When the currency changes, subscribes to the event & updates currency property.\r\n                subscription = locale.currencyCodeChanged.subscribe(function (currency) {\r\n                    _this[propertyKey] = currency;\r\n                });\r\n            }\r\n            if (targetNgOnInit) {\r\n                targetNgOnInit.apply(this);\r\n            }\r\n        }\r\n        target.ngOnInit = ngOnInit;\r\n        var /** @type {?} */ targetNgOnDestroy = target.ngOnDestroy;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnDestroy() {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n            if (targetNgOnDestroy) {\r\n                targetNgOnDestroy.apply(this);\r\n            }\r\n        }\r\n        target.ngOnDestroy = ngOnDestroy;\r\n        if (typeof propertyKey !== \"undefined\") {\r\n            Object.defineProperty(target, propertyKey, {\r\n                writable: true,\r\n                value: undefined\r\n            });\r\n        }\r\n    }\r\n    return DecoratorFactory;\r\n}\r\nvar TranslatePipe = (function () {\r\n    /**\r\n     * @param {?} translation\r\n     */\r\n    function TranslatePipe(translation) {\r\n        this.translation = translation;\r\n    }\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} lang\r\n     * @param {?=} args\r\n     * @return {?}\r\n     */\r\n    TranslatePipe.prototype.transform = function (key, lang, args) {\r\n        return this.translation.translate(key, args, lang);\r\n    };\r\n    return TranslatePipe;\r\n}());\r\nTranslatePipe.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{\r\n                name: 'translate',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslatePipe.ctorParameters = function () { return [\r\n    { type: TranslationService, },\r\n]; };\r\nvar LocaleDatePipe = (function () {\r\n    function LocaleDatePipe() {\r\n    }\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} defaultLocale\r\n     * @param {?=} pattern\r\n     * @return {?}\r\n     */\r\n    LocaleDatePipe.prototype.transform = function (value, defaultLocale, pattern) {\r\n        if (pattern === void 0) { pattern = 'mediumDate'; }\r\n        if (typeof defaultLocale === \"undefined\")\r\n            return null;\r\n        if (IntlAPI.hasDateTimeFormat()) {\r\n            var /** @type {?} */ localeDate = new __WEBPACK_IMPORTED_MODULE_7__angular_common__[\"DatePipe\"](defaultLocale);\r\n            return localeDate.transform(value, pattern);\r\n        }\r\n        // Returns the date without localization.\r\n        return value;\r\n    };\r\n    return LocaleDatePipe;\r\n}());\r\nLocaleDatePipe.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{\r\n                name: 'localeDate',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleDatePipe.ctorParameters = function () { return []; };\r\nvar LocaleDecimalPipe = (function () {\r\n    function LocaleDecimalPipe() {\r\n    }\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} defaultLocale\r\n     * @param {?=} digits\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalPipe.prototype.transform = function (value, defaultLocale, digits) {\r\n        if (typeof defaultLocale === \"undefined\")\r\n            return null;\r\n        if (IntlAPI.hasNumberFormat()) {\r\n            var /** @type {?} */ localeDecimal = new __WEBPACK_IMPORTED_MODULE_7__angular_common__[\"DecimalPipe\"](defaultLocale);\r\n            return localeDecimal.transform(value, digits);\r\n        }\r\n        // Returns the number without localization.\r\n        return value;\r\n    };\r\n    return LocaleDecimalPipe;\r\n}());\r\nLocaleDecimalPipe.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{\r\n                name: 'localeDecimal',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleDecimalPipe.ctorParameters = function () { return []; };\r\nvar LocalePercentPipe = (function () {\r\n    function LocalePercentPipe() {\r\n    }\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} defaultLocale\r\n     * @param {?=} digits\r\n     * @return {?}\r\n     */\r\n    LocalePercentPipe.prototype.transform = function (value, defaultLocale, digits) {\r\n        if (typeof defaultLocale === \"undefined\")\r\n            return null;\r\n        if (IntlAPI.hasNumberFormat()) {\r\n            var /** @type {?} */ localePercent = new __WEBPACK_IMPORTED_MODULE_7__angular_common__[\"PercentPipe\"](defaultLocale);\r\n            return localePercent.transform(value, digits);\r\n        }\r\n        // Returns the number without localization.\r\n        return value;\r\n    };\r\n    return LocalePercentPipe;\r\n}());\r\nLocalePercentPipe.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{\r\n                name: 'localePercent',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocalePercentPipe.ctorParameters = function () { return []; };\r\nvar LocaleCurrencyPipe = (function () {\r\n    function LocaleCurrencyPipe() {\r\n    }\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} defaultLocale\r\n     * @param {?} currency\r\n     * @param {?=} symbolDisplay\r\n     * @param {?=} digits\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyPipe.prototype.transform = function (value, defaultLocale, currency, symbolDisplay, digits) {\r\n        if (symbolDisplay === void 0) { symbolDisplay = false; }\r\n        if (typeof defaultLocale === \"undefined\" || typeof currency === \"undefined\")\r\n            return null;\r\n        if (IntlAPI.hasNumberFormat()) {\r\n            var /** @type {?} */ localeCurrency = new __WEBPACK_IMPORTED_MODULE_7__angular_common__[\"CurrencyPipe\"](defaultLocale);\r\n            return localeCurrency.transform(value, currency, symbolDisplay, digits);\r\n        }\r\n        // Returns the number & currency without localization.\r\n        return value + \" \" + currency;\r\n    };\r\n    return LocaleCurrencyPipe;\r\n}());\r\nLocaleCurrencyPipe.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{\r\n                name: 'localeCurrency',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleCurrencyPipe.ctorParameters = function () { return []; };\r\n/**\r\n * Breadth First Search (BFS) algorithm for traversing & searching tree data structure of DOM\r\nexplores the neighbor nodes first, before moving to the next level neighbors.\r\nTime complexity: between O(1) and O(|V|^2).\r\n */\r\nvar BFS = (function () {\r\n    function BFS() {\r\n    }\r\n    /**\r\n     * Target node is a non empty text node.\r\n     * @param {?} rootNode\r\n     * @return {?}\r\n     */\r\n    BFS.getTargetNode = function (rootNode) {\r\n        return this.walk(rootNode);\r\n    };\r\n    /**\r\n     * @param {?} rootNode\r\n     * @return {?}\r\n     */\r\n    BFS.walk = function (rootNode) {\r\n        var /** @type {?} */ queue = [];\r\n        var /** @type {?} */ iNode;\r\n        var /** @type {?} */ depth = 0;\r\n        var /** @type {?} */ nodeToDepthIncrease = 1;\r\n        queue.push(rootNode);\r\n        while (queue.length > 0 && depth <= this.MAX_DEPTH) {\r\n            iNode = queue.shift();\r\n            if (this.isTargetNode(iNode)) {\r\n                return iNode;\r\n            }\r\n            if (depth < this.MAX_DEPTH && iNode.childNodes != null) {\r\n                for (var _i = 0, _a = iNode.childNodes; _i < _a.length; _i++) {\r\n                    var child = _a[_i];\r\n                    if (this.isValidNode(child)) {\r\n                        queue.push(child);\r\n                    }\r\n                }\r\n            }\r\n            if (--nodeToDepthIncrease == 0) {\r\n                depth++;\r\n                nodeToDepthIncrease = queue.length;\r\n            }\r\n        }\r\n        return rootNode;\r\n    };\r\n    /**\r\n     * @param {?} node\r\n     * @return {?}\r\n     */\r\n    BFS.isTargetNode = function (node) {\r\n        return typeof node !== \"undefined\" &&\r\n            node.nodeType == 3 &&\r\n            node.nodeValue != null &&\r\n            node.nodeValue.trim() != \"\";\r\n    };\r\n    /**\r\n     * A valid node is not marked for translation.\r\n     * @param {?} node\r\n     * @return {?}\r\n     */\r\n    BFS.isValidNode = function (node) {\r\n        if (typeof node !== \"undefined\" && node.nodeType == 1 && node.attributes) {\r\n            for (var _i = 0, _a = node.attributes; _i < _a.length; _i++) {\r\n                var attr = _a[_i];\r\n                if (this.SELECTOR.test(attr.name))\r\n                    return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    return BFS;\r\n}());\r\nBFS.SELECTOR = /^l10n|translate|locale/;\r\nBFS.MAX_DEPTH = 10;\r\n/**\r\n * @abstract\r\n */\r\nvar BaseDirective = (function () {\r\n    /**\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function BaseDirective(el, renderer) {\r\n        this.el = el;\r\n        this.renderer = renderer;\r\n        this.attributes = [];\r\n        this.subscriptions = [];\r\n        this.TEXT_MUTATION_CONFIG = { subtree: true, characterData: true };\r\n        this.SELECTOR = /^l10n-/;\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.ngAfterViewInit = function () {\r\n        if (this.el && this.el.nativeElement) {\r\n            this.element = this.el.nativeElement;\r\n            this.renderNode = BFS.getTargetNode(this.element);\r\n            this.getKey();\r\n            this.getAttributes();\r\n            this.addTextListener();\r\n            this.setup();\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} changes\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.ngOnChanges = function (changes) {\r\n        if (!!this.key) {\r\n            if (this.nodeValue == null || this.nodeValue == \"\") {\r\n                if (!!this.valueAttribute) {\r\n                    this.key = this.valueAttribute;\r\n                }\r\n                else if (!!this.innerHTMLProperty) {\r\n                    this.key = this.innerHTMLProperty;\r\n                }\r\n            }\r\n            this.replaceText();\r\n        }\r\n        if (this.attributes.length > 0) {\r\n            this.replaceAttributes();\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.ngOnDestroy = function () {\r\n        this.removeTextListener();\r\n        this.cancelSubscriptions();\r\n    };\r\n    /**\r\n     * @abstract\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.setup = function () { };\r\n    /**\r\n     * @abstract\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.replace = function () { };\r\n    /**\r\n     * @abstract\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.replaceText = function () { };\r\n    /**\r\n     * @abstract\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.replaceAttributes = function () { };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getAttributesData = function () {\r\n        var /** @type {?} */ keys = this.getAttributesKeys();\r\n        var /** @type {?} */ data = {};\r\n        for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\r\n            var key = keys_2[_i];\r\n            data[key] = this.getValues(key);\r\n        }\r\n        return data;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getAttributesKeys = function () {\r\n        return this.attributes.map(function (attr) { return attr.key; });\r\n    };\r\n    /**\r\n     * @abstract\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getValues = function (keys) { };\r\n    /**\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.setText = function (value) {\r\n        if (!!value) {\r\n            if (!!this.nodeValue && !!this.key) {\r\n                this.removeTextListener();\r\n                this.renderer.setValue(this.renderNode, this.nodeValue.replace(this.key, value));\r\n                this.addTextListener();\r\n            }\r\n            else if (!!this.valueAttribute) {\r\n                this.renderer.setAttribute(this.element, \"value\", value);\r\n            }\r\n            else if (!!this.innerHTMLProperty) {\r\n                this.renderer.setProperty(this.element, \"innerHTML\", value);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} data\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.setAttributes = function (data) {\r\n        for (var _i = 0, _a = this.attributes; _i < _a.length; _i++) {\r\n            var attr = _a[_i];\r\n            this.renderer.setAttribute(this.element, attr.name, data[attr.key]);\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.addTextListener = function () {\r\n        var _this = this;\r\n        if (typeof MutationObserver !== \"undefined\") {\r\n            this.textObserver = new MutationObserver(function (mutations) {\r\n                _this.renderNode = BFS.getTargetNode(_this.element);\r\n                _this.getKey();\r\n                _this.replaceText();\r\n            });\r\n            this.textObserver.observe(this.renderNode, this.TEXT_MUTATION_CONFIG);\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.removeTextListener = function () {\r\n        if (typeof this.textObserver !== \"undefined\") {\r\n            this.textObserver.disconnect();\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getText = function () {\r\n        this.nodeValue = this.renderNode != null ? (this.renderNode.nodeValue) : \"\";\r\n        return !!this.nodeValue ? this.nodeValue.trim() : \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getKey = function () {\r\n        if (this.element.childNodes.length > 0) {\r\n            this.key = this.getText();\r\n        }\r\n        else if (!!this.valueAttribute) {\r\n            this.key = this.valueAttribute;\r\n        }\r\n        else if (!!this.innerHTMLProperty) {\r\n            this.key = this.innerHTMLProperty;\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getAttributes = function () {\r\n        if (this.element.attributes) {\r\n            for (var _i = 0, _a = this.element.attributes; _i < _a.length; _i++) {\r\n                var attr = _a[_i];\r\n                if (this.SELECTOR.test(attr.name)) {\r\n                    var /** @type {?} */ name = attr.name.substr(5);\r\n                    for (var _b = 0, _c = this.element.attributes; _b < _c.length; _b++) {\r\n                        var targetAttr = _c[_b];\r\n                        if (new RegExp(\"^\" + name + \"$\").test(targetAttr.name)) {\r\n                            this.attributes.push({ name: name, key: targetAttr.value });\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.cancelSubscriptions = function () {\r\n        this.subscriptions.forEach(function (subscription) {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n        });\r\n    };\r\n    return BaseDirective;\r\n}());\r\nBaseDirective.propDecorators = {\r\n    'valueAttribute': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"], args: ['value',] },],\r\n    'innerHTMLProperty': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"], args: ['innerHTML',] },],\r\n};\r\nvar TranslateDirective = (function (_super) {\r\n    __extends(TranslateDirective, _super);\r\n    /**\r\n     * @param {?} translation\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function TranslateDirective(translation, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.translation = translation;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(TranslateDirective.prototype, \"l10nTranslate\", {\r\n        /**\r\n         * @param {?} params\r\n         * @return {?}\r\n         */\r\n        set: function (params) {\r\n            this.params = params;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(TranslateDirective.prototype, \"translate\", {\r\n        /**\r\n         * @param {?} params\r\n         * @return {?}\r\n         */\r\n        set: function (params) {\r\n            this.params = params;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.translation.translationChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            var /** @type {?} */ keys = this.getAttributesKeys();\r\n            this.setAttributes(this.getValues(keys));\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.getValues = function (keys) {\r\n        return this.translation.translate(keys, this.params);\r\n    };\r\n    return TranslateDirective;\r\n}(BaseDirective));\r\nTranslateDirective.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\r\n                selector: '[l10nTranslate],[translate]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslateDirective.ctorParameters = function () { return [\r\n    { type: TranslationService, },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Renderer2\"], },\r\n]; };\r\nTranslateDirective.propDecorators = {\r\n    'l10nTranslate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n    'translate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n};\r\nvar LocaleDateDirective = (function (_super) {\r\n    __extends(LocaleDateDirective, _super);\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function LocaleDateDirective(locale, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.locale = locale;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        _this.defaultPattern = 'mediumDate';\r\n        _this.localeDatePipe = new LocaleDatePipe();\r\n        return _this;\r\n    }\r\n    Object.defineProperty(LocaleDateDirective.prototype, \"l10nDate\", {\r\n        /**\r\n         * @param {?} pattern\r\n         * @return {?}\r\n         */\r\n        set: function (pattern) {\r\n            this.pattern = pattern;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocaleDateDirective.prototype, \"localeDate\", {\r\n        /**\r\n         * @param {?} pattern\r\n         * @return {?}\r\n         */\r\n        set: function (pattern) {\r\n            this.pattern = pattern;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.locale.defaultLocaleChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            this.setAttributes(this.getAttributesData());\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.getValues = function (keys) {\r\n        return this.localeDatePipe.transform(keys, this.locale.getDefaultLocale(), this.pattern || this.defaultPattern);\r\n    };\r\n    return LocaleDateDirective;\r\n}(BaseDirective));\r\nLocaleDateDirective.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\r\n                selector: '[l10nDate],[localeDate]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleDateDirective.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Renderer2\"], },\r\n]; };\r\nLocaleDateDirective.propDecorators = {\r\n    'l10nDate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n    'localeDate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n};\r\nvar LocaleDecimalDirective = (function (_super) {\r\n    __extends(LocaleDecimalDirective, _super);\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function LocaleDecimalDirective(locale, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.locale = locale;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        _this.localeDecimalPipe = new LocaleDecimalPipe();\r\n        return _this;\r\n    }\r\n    Object.defineProperty(LocaleDecimalDirective.prototype, \"l10nDecimal\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocaleDecimalDirective.prototype, \"localeDecimal\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.locale.defaultLocaleChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            this.setAttributes(this.getAttributesData());\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.getValues = function (keys) {\r\n        return this.localeDecimalPipe.transform(keys, this.locale.getDefaultLocale(), this.digits);\r\n    };\r\n    return LocaleDecimalDirective;\r\n}(BaseDirective));\r\nLocaleDecimalDirective.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\r\n                selector: '[l10nDecimal],[localeDecimal]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleDecimalDirective.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Renderer2\"], },\r\n]; };\r\nLocaleDecimalDirective.propDecorators = {\r\n    'l10nDecimal': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n    'localeDecimal': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n};\r\nvar LocalePercentDirective = (function (_super) {\r\n    __extends(LocalePercentDirective, _super);\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function LocalePercentDirective(locale, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.locale = locale;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        _this.localePercentPipe = new LocalePercentPipe();\r\n        return _this;\r\n    }\r\n    Object.defineProperty(LocalePercentDirective.prototype, \"l10nPercent\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocalePercentDirective.prototype, \"localePercent\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.locale.defaultLocaleChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            this.setAttributes(this.getAttributesData());\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.getValues = function (keys) {\r\n        return this.localePercentPipe.transform(keys, this.locale.getDefaultLocale(), this.digits);\r\n    };\r\n    return LocalePercentDirective;\r\n}(BaseDirective));\r\nLocalePercentDirective.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\r\n                selector: '[l10nPercent],[localePercent]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocalePercentDirective.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Renderer2\"], },\r\n]; };\r\nLocalePercentDirective.propDecorators = {\r\n    'l10nPercent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n    'localePercent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n};\r\nvar LocaleCurrencyDirective = (function (_super) {\r\n    __extends(LocaleCurrencyDirective, _super);\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function LocaleCurrencyDirective(locale, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.locale = locale;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        _this.localeCurrencyPipe = new LocaleCurrencyPipe();\r\n        return _this;\r\n    }\r\n    Object.defineProperty(LocaleCurrencyDirective.prototype, \"l10nCurrency\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocaleCurrencyDirective.prototype, \"localeCurrency\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.locale.defaultLocaleChanged.subscribe(function () { _this.replace(); }));\r\n        this.subscriptions.push(this.locale.currencyCodeChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            this.setAttributes(this.getAttributesData());\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.getValues = function (keys) {\r\n        return this.localeCurrencyPipe.transform(keys, this.locale.getDefaultLocale(), this.locale.getCurrentCurrency(), this.symbol, this.digits);\r\n    };\r\n    return LocaleCurrencyDirective;\r\n}(BaseDirective));\r\nLocaleCurrencyDirective.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\r\n                selector: '[l10nCurrency],[localeCurrency]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleCurrencyDirective.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Renderer2\"], },\r\n]; };\r\nLocaleCurrencyDirective.propDecorators = {\r\n    'l10nCurrency': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n    'localeCurrency': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n    'symbol': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n};\r\n/**\r\n * Function that takes a control and returns either null when it’s valid, or an error object if it’s not.\r\n\\@param digits The format of the number\r\n\\@param MIN_VALUE The minimum value for the number\r\n\\@param MAX_VALUE The maximum value for the number\r\n\\@return An error object: 'format', 'minValue' or 'maxValue'; null in case the value is valid\r\n * @param {?} digits\r\n * @param {?=} MIN_VALUE\r\n * @param {?=} MAX_VALUE\r\n * @return {?}\r\n */\r\nfunction validateLocaleNumber(digits, MIN_VALUE, MAX_VALUE) {\r\n    if (MIN_VALUE === void 0) { MIN_VALUE = Number.MIN_VALUE; }\r\n    if (MAX_VALUE === void 0) { MAX_VALUE = Number.MAX_VALUE; }\r\n    var /** @type {?} */ locale = InjectorRef.get(LocaleService);\r\n    var /** @type {?} */ decimalCode = InjectorRef.get(DecimalCode);\r\n    var /** @type {?} */ defaultLocale;\r\n    var /** @type {?} */ NUMBER_REGEXP;\r\n    return function (formControl) {\r\n        if (formControl.value == null || formControl.value == \"\")\r\n            return null;\r\n        if (defaultLocale != locale.getDefaultLocale()) {\r\n            NUMBER_REGEXP = decimalCode.getRegExp(digits);\r\n            defaultLocale = locale.getDefaultLocale();\r\n        }\r\n        if (NUMBER_REGEXP.test(formControl.value)) {\r\n            var /** @type {?} */ parsedValue = decimalCode.parse(formControl.value);\r\n            if (parsedValue != null && parsedValue < MIN_VALUE) {\r\n                return {\r\n                    minValue: {\r\n                        valid: false\r\n                    }\r\n                };\r\n            }\r\n            else if (parsedValue != null && parsedValue > MAX_VALUE) {\r\n                return {\r\n                    maxValue: {\r\n                        valid: false\r\n                    }\r\n                };\r\n            }\r\n            return null; // The number is valid.\r\n        }\r\n        else {\r\n            return {\r\n                format: {\r\n                    valid: false\r\n                }\r\n            };\r\n        }\r\n    };\r\n}\r\nvar LocaleNumberValidatorDirective = (function () {\r\n    function LocaleNumberValidatorDirective() {\r\n        this.MIN_VALUE = Number.MIN_VALUE;\r\n        this.MAX_VALUE = Number.MAX_VALUE;\r\n    }\r\n    Object.defineProperty(LocaleNumberValidatorDirective.prototype, \"l10nValidateNumber\", {\r\n        /**\r\n         * Format: {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}.\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocaleNumberValidatorDirective.prototype, \"validateLocaleNumber\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleNumberValidatorDirective.prototype.ngOnInit = function () {\r\n        this.validator = validateLocaleNumber(this.digits, this.minValue || this.MIN_VALUE, this.maxValue || this.MAX_VALUE);\r\n    };\r\n    /**\r\n     * @param {?} formControl\r\n     * @return {?}\r\n     */\r\n    LocaleNumberValidatorDirective.prototype.validate = function (formControl) {\r\n        return this.validator(formControl);\r\n    };\r\n    return LocaleNumberValidatorDirective;\r\n}());\r\nLocaleNumberValidatorDirective.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\r\n                selector: '[l10nValidateNumber][ngModel],[l10nValidateNumber][formControl], \\\r\n        [validateLocaleNumber][ngModel],[validateLocaleNumber][formControl]',\r\n                providers: [\r\n                    { provide: __WEBPACK_IMPORTED_MODULE_8__angular_forms__[\"NG_VALIDATORS\"], useExisting: Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"forwardRef\"])(function () { return LocaleNumberValidatorDirective; }), multi: true }\r\n                ]\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleNumberValidatorDirective.ctorParameters = function () { return []; };\r\nLocaleNumberValidatorDirective.propDecorators = {\r\n    'l10nValidateNumber': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n    'validateLocaleNumber': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n    'minValue': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n    'maxValue': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n};\r\n/**\r\n * Provides dependencies, pipes & directives for translating messages.\r\n */\r\nvar TranslationModule = (function () {\r\n    /**\r\n     * @param {?} injector\r\n     */\r\n    function TranslationModule(injector) {\r\n        this.injector = injector;\r\n        // Creates the instance of the InjectorRef, so that module dependencies are available.\r\n    }\r\n    /**\r\n     * Use in AppModule: new instances of LocaleService & TranslationService.\r\n     * @param {?=} token\r\n     * @return {?}\r\n     */\r\n    TranslationModule.forRoot = function (token) {\r\n        if (token === void 0) { token = {}; }\r\n        return {\r\n            ngModule: TranslationModule,\r\n            providers: [\r\n                InjectorRef,\r\n                LocaleConfig,\r\n                LocaleService,\r\n                {\r\n                    provide: LocaleStorage,\r\n                    useClass: token.localeStorage || BrowserStorage\r\n                },\r\n                TranslationConfig,\r\n                TranslationService,\r\n                {\r\n                    provide: TranslationProvider,\r\n                    useClass: token.translationProvider || HttpTranslationProvider\r\n                },\r\n                {\r\n                    provide: TranslationHandler,\r\n                    useClass: token.translationHandler || DefaultTranslationHandler\r\n                }\r\n            ]\r\n        };\r\n    };\r\n    /**\r\n     * Use in feature modules with lazy loading: new instance of TranslationService.\r\n     * @param {?=} token\r\n     * @return {?}\r\n     */\r\n    TranslationModule.forChild = function (token) {\r\n        if (token === void 0) { token = {}; }\r\n        return {\r\n            ngModule: TranslationModule,\r\n            providers: [\r\n                InjectorRef,\r\n                TranslationConfig,\r\n                TranslationService,\r\n                {\r\n                    provide: TranslationProvider,\r\n                    useClass: token.translationProvider || HttpTranslationProvider\r\n                },\r\n                {\r\n                    provide: TranslationHandler,\r\n                    useClass: token.translationHandler || DefaultTranslationHandler\r\n                }\r\n            ]\r\n        };\r\n    };\r\n    return TranslationModule;\r\n}());\r\nTranslationModule.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\r\n                declarations: [\r\n                    TranslatePipe,\r\n                    TranslateDirective\r\n                ],\r\n                exports: [\r\n                    TranslatePipe,\r\n                    TranslateDirective\r\n                ]\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationModule.ctorParameters = function () { return [\r\n    { type: InjectorRef, },\r\n]; };\r\n/**\r\n * Provides dependencies, pipes & directives for translating messages, dates & numbers.\r\n */\r\nvar LocalizationModule = (function () {\r\n    /**\r\n     * @param {?} injector\r\n     */\r\n    function LocalizationModule(injector) {\r\n        this.injector = injector;\r\n        // Creates the instance of the InjectorRef, so that module dependencies are available.\r\n    }\r\n    /**\r\n     * Use in AppModule: new instances of LocaleService & TranslationService.\r\n     * @param {?=} token\r\n     * @return {?}\r\n     */\r\n    LocalizationModule.forRoot = function (token) {\r\n        if (token === void 0) { token = {}; }\r\n        return {\r\n            ngModule: LocalizationModule,\r\n            providers: [\r\n                InjectorRef,\r\n                LocaleConfig,\r\n                LocaleService,\r\n                {\r\n                    provide: LocaleStorage,\r\n                    useClass: token.localeStorage || BrowserStorage\r\n                },\r\n                TranslationConfig,\r\n                TranslationService,\r\n                {\r\n                    provide: TranslationProvider,\r\n                    useClass: token.translationProvider || HttpTranslationProvider\r\n                },\r\n                {\r\n                    provide: TranslationHandler,\r\n                    useClass: token.translationHandler || DefaultTranslationHandler\r\n                }\r\n            ]\r\n        };\r\n    };\r\n    /**\r\n     * Use in feature modules with lazy loading: new instance of TranslationService.\r\n     * @param {?=} token\r\n     * @return {?}\r\n     */\r\n    LocalizationModule.forChild = function (token) {\r\n        if (token === void 0) { token = {}; }\r\n        return {\r\n            ngModule: LocalizationModule,\r\n            providers: [\r\n                InjectorRef,\r\n                TranslationConfig,\r\n                TranslationService,\r\n                {\r\n                    provide: TranslationProvider,\r\n                    useClass: token.translationProvider || HttpTranslationProvider\r\n                },\r\n                {\r\n                    provide: TranslationHandler,\r\n                    useClass: token.translationHandler || DefaultTranslationHandler\r\n                }\r\n            ]\r\n        };\r\n    };\r\n    return LocalizationModule;\r\n}());\r\nLocalizationModule.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\r\n                declarations: [\r\n                    LocaleDatePipe,\r\n                    LocaleDecimalPipe,\r\n                    LocalePercentPipe,\r\n                    LocaleCurrencyPipe,\r\n                    LocaleDateDirective,\r\n                    LocaleDecimalDirective,\r\n                    LocalePercentDirective,\r\n                    LocaleCurrencyDirective\r\n                ],\r\n                imports: [\r\n                    TranslationModule\r\n                ],\r\n                exports: [\r\n                    TranslationModule,\r\n                    LocaleDatePipe,\r\n                    LocaleDecimalPipe,\r\n                    LocalePercentPipe,\r\n                    LocaleCurrencyPipe,\r\n                    LocaleDateDirective,\r\n                    LocaleDecimalDirective,\r\n                    LocalePercentDirective,\r\n                    LocaleCurrencyDirective\r\n                ]\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocalizationModule.ctorParameters = function () { return [\r\n    { type: InjectorRef, },\r\n]; };\r\n/**\r\n * Provides dependencies & directives for locale validation.\r\n */\r\nvar LocaleValidationModule = (function () {\r\n    function LocaleValidationModule() {\r\n    }\r\n    /**\r\n     * Use in AppModule: new instance of LocaleValidation.\r\n     * @return {?}\r\n     */\r\n    LocaleValidationModule.forRoot = function () {\r\n        return {\r\n            ngModule: LocaleValidationModule,\r\n            providers: [DecimalCode, LocaleValidation]\r\n        };\r\n    };\r\n    return LocaleValidationModule;\r\n}());\r\nLocaleValidationModule.decorators = [\r\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\r\n                declarations: [\r\n                    LocaleNumberValidatorDirective\r\n                ],\r\n                exports: [\r\n                    LocaleNumberValidatorDirective\r\n                ]\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleValidationModule.ctorParameters = function () { return []; };\r\n/**\r\n * Angular l10n.\r\n * An Angular library to translate messages, dates and numbers.\r\n * Written by Roberto Simonetti.\r\n * MIT license.\r\n * https://github.com/robisim74/angular-l10n\r\n */\r\n/**\r\n * Entry point for all public APIs of the package.\r\n */\r\n/**\r\n * Generated bundle index. Do not edit.\r\n */\r\n\r\n//# sourceMappingURL=angular-l10n.es5.js.map\n\n\n/***/ }),\n\n/***/ 343:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// EXTERNAL MODULE: ./node_modules/@angular/core/@angular/core.es5.js\nvar core_es5 = __webpack_require__(0);\n\n// EXTERNAL MODULE: ./node_modules/@angular/forms/@angular/forms.es5.js\nvar forms_es5 = __webpack_require__(9);\n\n// EXTERNAL MODULE: ./node_modules/@angular/http/@angular/http.es5.js\nvar http_es5 = __webpack_require__(8);\n\n// EXTERNAL MODULE: ./node_modules/@angular/platform-browser/@angular/platform-browser.es5.js\nvar platform_browser_es5 = __webpack_require__(23);\n\n// EXTERNAL MODULE: ./node_modules/tslib/tslib.es6.js\nvar tslib_es6 = __webpack_require__(52);\n\n// CONCATENATED MODULE: ./node_modules/@angular/animations/@angular/animations.es5.js\n/**\n * @license Angular v4.4.7\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\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 * AnimationBuilder is an injectable service that is available when the {\\@link\n * BrowserAnimationsModule BrowserAnimationsModule} or {\\@link NoopAnimationsModule\n * NoopAnimationsModule} modules are used within an application.\n *\n * The purpose if this service is to produce an animation sequence programmatically within an\n * angular component or directive.\n *\n * Programmatic animations are first built and then a player is created when the build animation is\n * attached to an element.\n *\n * ```ts\n * // remember to include the BrowserAnimationsModule module for this to work...\n * import {AnimationBuilder} from '\\@angular/animations';\n *\n * class MyCmp {\n *   constructor(private _builder: AnimationBuilder) {}\n *\n *   makeAnimation(element: any) {\n *     // first build the animation\n *     const myAnimation = this._builder.build([\n *       style({ width: 0 }),\n *       animate(1000, style({ width: '100px' }))\n *     ]);\n *\n *     // then create a player from it\n *     const player = myAnimation.create(element);\n *\n *     player.play();\n *   }\n * }\n * ```\n *\n * When an animation is built an instance of {\\@link AnimationFactory AnimationFactory} will be\n * returned. Using that an {\\@link AnimationPlayer AnimationPlayer} can be created which can then be\n * used to start the animation.\n *\n * \\@experimental Animation support is experimental.\n * @abstract\n */\nvar AnimationBuilder = (function () {\n    function AnimationBuilder() {\n    }\n    /**\n     * @abstract\n     * @param {?} animation\n     * @return {?}\n     */\n    AnimationBuilder.prototype.build = function (animation) { };\n    return AnimationBuilder;\n}());\n/**\n * An instance of `AnimationFactory` is returned from {\\@link AnimationBuilder#build\n * AnimationBuilder.build}.\n *\n * \\@experimental Animation support is experimental.\n * @abstract\n */\nvar AnimationFactory = (function () {\n    function AnimationFactory() {\n    }\n    /**\n     * @abstract\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    AnimationFactory.prototype.create = function (element, options) { };\n    return AnimationFactory;\n}());\n/**\n * \\@experimental Animation support is experimental.\n */\nvar AUTO_STYLE = '*';\n/**\n * `trigger` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the\n * {\\@link Component#animations component animations metadata page} to gain a better\n * understanding of how animations in Angular are used.\n *\n * `trigger` Creates an animation trigger which will a list of {\\@link state state} and\n * {\\@link transition transition} entries that will be evaluated when the expression\n * bound to the trigger changes.\n *\n * Triggers are registered within the component annotation data under the\n * {\\@link Component#animations animations section}. An animation trigger can be placed on an element\n * within a template by referencing the name of the trigger followed by the expression value that\n * the\n * trigger is bound to (in the form of `[\\@triggerName]=\"expression\"`.\n *\n * Animation trigger bindings strigify values and then match the previous and current values against\n * any linked transitions. If a boolean value is provided into the trigger binding then it will both\n * be represented as `1` or `true` and `0` or `false` for a true and false boolean values\n * respectively.\n *\n * ### Usage\n *\n * `trigger` will create an animation trigger reference based on the provided `name` value. The\n * provided `animation` value is expected to be an array consisting of {\\@link state state} and\n * {\\@link transition transition} declarations.\n *\n * ```typescript\n * \\@Component({\n *   selector: 'my-component',\n *   templateUrl: 'my-component-tpl.html',\n *   animations: [\n *     trigger(\"myAnimationTrigger\", [\n *       state(...),\n *       state(...),\n *       transition(...),\n *       transition(...)\n *     ])\n *   ]\n * })\n * class MyComponent {\n *   myStatusExp = \"something\";\n * }\n * ```\n *\n * The template associated with this component will make use of the `myAnimationTrigger` animation\n * trigger by binding to an element within its template code.\n *\n * ```html\n * <!-- somewhere inside of my-component-tpl.html -->\n * <div [\\@myAnimationTrigger]=\"myStatusExp\">...</div>\n * ```\n *\n * ## Disable Animations\n * A special animation control binding called `\\@.disabled` can be placed on an element which will\n * then disable animations for any inner animation triggers situated within the element as well as\n * any animations on the element itself.\n *\n * When true, the `\\@.disabled` binding will prevent all animations from rendering. The example\n * below shows how to use this feature:\n *\n * ```ts\n * \\@Component({\n *   selector: 'my-component',\n *   template: `\n *     <div [\\@.disabled]=\"isDisabled\">\n *       <div [\\@childAnimation]=\"exp\"></div>\n *     </div>\n *   `,\n *   animations: [\n *     trigger(\"childAnimation\", [\n *       // ...\n *     ])\n *   ]\n * })\n * class MyComponent {\n *   isDisabled = true;\n *   exp = '...';\n * }\n * ```\n *\n * The `\\@childAnimation` trigger will not animate because `\\@.disabled` prevents it from happening\n * (when true).\n *\n * Note that `\\@.disbled` will only disable all animations (this means any animations running on\n * the same element will also be disabled).\n *\n * ### Disabling Animations Application-wide\n * When an area of the template is set to have animations disabled, **all** inner components will\n * also have their animations disabled as well. This means that all animations for an angular\n * application can be disabled by placing a host binding set on `\\@.disabled` on the topmost Angular\n * component.\n *\n * ```ts\n * import {Component, HostBinding} from '\\@angular/core';\n *\n * \\@Component({\n *   selector: 'app-component',\n *   templateUrl: 'app.component.html',\n * })\n * class AppComponent {\n *   \\@HostBinding('\\@.disabled')\n *   public animationsDisabled = true;\n * }\n * ```\n *\n * ### What about animations that us `query()` and `animateChild()`?\n * Despite inner animations being disabled, a parent animation can {\\@link query query} for inner\n * elements located in disabled areas of the template and still animate them as it sees fit. This is\n * also the case for when a sub animation is queried by a parent and then later animated using {\\@link\n * animateChild animateChild}.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} definitions\n * @return {?}\n */\nfunction trigger(name, definitions) {\n    return { type: 7 /* Trigger */, name: name, definitions: definitions, options: {} };\n}\n/**\n * `animate` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `animate` specifies an animation step that will apply the provided `styles` data for a given\n * amount of time based on the provided `timing` expression value. Calls to `animate` are expected\n * to be used within {\\@link sequence an animation sequence}, {\\@link group group}, or {\\@link\n * transition transition}.\n *\n * ### Usage\n *\n * The `animate` function accepts two input parameters: `timing` and `styles`:\n *\n * - `timing` is a string based value that can be a combination of a duration with optional delay\n * and easing values. The format for the expression breaks down to `duration delay easing`\n * (therefore a value such as `1s 100ms ease-out` will be parse itself into `duration=1000,\n * delay=100, easing=ease-out`. If a numeric value is provided then that will be used as the\n * `duration` value in millisecond form.\n * - `styles` is the style input data which can either be a call to {\\@link style style} or {\\@link\n * keyframes keyframes}. If left empty then the styles from the destination state will be collected\n * and used (this is useful when describing an animation step that will complete an animation by\n * {\\@link transition#the-final-animate-call animating to the final state}).\n *\n * ```typescript\n * // various functions for specifying timing data\n * animate(500, style(...))\n * animate(\"1s\", style(...))\n * animate(\"100ms 0.5s\", style(...))\n * animate(\"5s ease\", style(...))\n * animate(\"5s 10ms cubic-bezier(.17,.67,.88,.1)\", style(...))\n *\n * // either style() of keyframes() can be used\n * animate(500, style({ background: \"red\" }))\n * animate(500, keyframes([\n *   style({ background: \"blue\" })),\n *   style({ background: \"red\" }))\n * ])\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} timings\n * @param {?=} styles\n * @return {?}\n */\nfunction animate(timings, styles) {\n    if (styles === void 0) { styles = null; }\n    return { type: 4 /* Animate */, styles: styles, timings: timings };\n}\n/**\n * `group` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `group` specifies a list of animation steps that are all run in parallel. Grouped animations are\n * useful when a series of styles must be animated/closed off at different starting/ending times.\n *\n * The `group` function can either be used within a {\\@link sequence sequence} or a {\\@link transition\n * transition} and it will only continue to the next instruction once all of the inner animation\n * steps have completed.\n *\n * ### Usage\n *\n * The `steps` data that is passed into the `group` animation function can either consist of {\\@link\n * style style} or {\\@link animate animate} function calls. Each call to `style()` or `animate()`\n * within a group will be executed instantly (use {\\@link keyframes keyframes} or a {\\@link\n * animate#usage animate() with a delay value} to offset styles to be applied at a later time).\n *\n * ```typescript\n * group([\n *   animate(\"1s\", { background: \"black\" }))\n *   animate(\"2s\", { color: \"white\" }))\n * ])\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction group(steps, options) {\n    if (options === void 0) { options = null; }\n    return { type: 3 /* Group */, steps: steps, options: options };\n}\n/**\n * `sequence` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `sequence` Specifies a list of animation steps that are run one by one. (`sequence` is used by\n * default when an array is passed as animation data into {\\@link transition transition}.)\n *\n * The `sequence` function can either be used within a {\\@link group group} or a {\\@link transition\n * transition} and it will only continue to the next instruction once each of the inner animation\n * steps have completed.\n *\n * To perform animation styling in parallel with other animation steps then have a look at the\n * {\\@link group group} animation function.\n *\n * ### Usage\n *\n * The `steps` data that is passed into the `sequence` animation function can either consist of\n * {\\@link style style} or {\\@link animate animate} function calls. A call to `style()` will apply the\n * provided styling data immediately while a call to `animate()` will apply its styling data over a\n * given time depending on its timing data.\n *\n * ```typescript\n * sequence([\n *   style({ opacity: 0 })),\n *   animate(\"1s\", { opacity: 1 }))\n * ])\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction sequence(steps, options) {\n    if (options === void 0) { options = null; }\n    return { type: 2 /* Sequence */, steps: steps, options: options };\n}\n/**\n * `style` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `style` declares a key/value object containing CSS properties/styles that can then be used for\n * {\\@link state animation states}, within an {\\@link sequence animation sequence}, or as styling data\n * for both {\\@link animate animate} and {\\@link keyframes keyframes}.\n *\n * ### Usage\n *\n * `style` takes in a key/value string map as data and expects one or more CSS property/value pairs\n * to be defined.\n *\n * ```typescript\n * // string values are used for css properties\n * style({ background: \"red\", color: \"blue\" })\n *\n * // numerical (pixel) values are also supported\n * style({ width: 100, height: 0 })\n * ```\n *\n * #### Auto-styles (using `*`)\n *\n * When an asterix (`*`) character is used as a value then it will be detected from the element\n * being animated and applied as animation data when the animation starts.\n *\n * This feature proves useful for a state depending on layout and/or environment factors; in such\n * cases the styles are calculated just before the animation starts.\n *\n * ```typescript\n * // the steps below will animate from 0 to the\n * // actual height of the element\n * style({ height: 0 }),\n * animate(\"1s\", style({ height: \"*\" }))\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} tokens\n * @return {?}\n */\nfunction style(tokens) {\n    return { type: 6 /* Style */, styles: tokens, offset: null };\n}\n/**\n * `state` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `state` declares an animation state within the given trigger. When a state is active within a\n * component then its associated styles will persist on the element that the trigger is attached to\n * (even when the animation ends).\n *\n * To animate between states, have a look at the animation {\\@link transition transition} DSL\n * function. To register states to an animation trigger please have a look at the {\\@link trigger\n * trigger} function.\n *\n * #### The `void` state\n *\n * The `void` state value is a reserved word that angular uses to determine when the element is not\n * apart of the application anymore (e.g. when an `ngIf` evaluates to false then the state of the\n * associated element is void).\n *\n * #### The `*` (default) state\n *\n * The `*` state (when styled) is a fallback state that will be used if the state that is being\n * animated is not declared within the trigger.\n *\n * ### Usage\n *\n * `state` will declare an animation state with its associated styles\n * within the given trigger.\n *\n * - `stateNameExpr` can be one or more state names separated by commas.\n * - `styles` refers to the {\\@link style styling data} that will be persisted on the element once\n * the state has been reached.\n *\n * ```typescript\n * // \"void\" is a reserved name for a state and is used to represent\n * // the state in which an element is detached from from the application.\n * state(\"void\", style({ height: 0 }))\n *\n * // user-defined states\n * state(\"closed\", style({ height: 0 }))\n * state(\"open, visible\", style({ height: \"*\" }))\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} styles\n * @param {?=} options\n * @return {?}\n */\nfunction animations_es5_state(name, styles, options) {\n    return { type: 0 /* State */, name: name, styles: styles, options: options };\n}\n/**\n * `keyframes` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `keyframes` specifies a collection of {\\@link style style} entries each optionally characterized\n * by an `offset` value.\n *\n * ### Usage\n *\n * The `keyframes` animation function is designed to be used alongside the {\\@link animate animate}\n * animation function. Instead of applying animations from where they are currently to their\n * destination, keyframes can describe how each style entry is applied and at what point within the\n * animation arc (much like CSS Keyframe Animations do).\n *\n * For each `style()` entry an `offset` value can be set. Doing so allows to specifiy at what\n * percentage of the animate time the styles will be applied.\n *\n * ```typescript\n * // the provided offset values describe when each backgroundColor value is applied.\n * animate(\"5s\", keyframes([\n *   style({ backgroundColor: \"red\", offset: 0 }),\n *   style({ backgroundColor: \"blue\", offset: 0.2 }),\n *   style({ backgroundColor: \"orange\", offset: 0.3 }),\n *   style({ backgroundColor: \"black\", offset: 1 })\n * ]))\n * ```\n *\n * Alternatively, if there are no `offset` values used within the style entries then the offsets\n * will be calculated automatically.\n *\n * ```typescript\n * animate(\"5s\", keyframes([\n *   style({ backgroundColor: \"red\" }) // offset = 0\n *   style({ backgroundColor: \"blue\" }) // offset = 0.33\n *   style({ backgroundColor: \"orange\" }) // offset = 0.66\n *   style({ backgroundColor: \"black\" }) // offset = 1\n * ]))\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @return {?}\n */\nfunction animations_es5_keyframes(steps) {\n    return { type: 5 /* Keyframes */, steps: steps };\n}\n/**\n * `transition` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `transition` declares the {\\@link sequence sequence of animation steps} that will be run when the\n * provided `stateChangeExpr` value is satisfied. The `stateChangeExpr` consists of a `state1 =>\n * state2` which consists of two known states (use an asterix (`*`) to refer to a dynamic starting\n * and/or ending state).\n *\n * A function can also be provided as the `stateChangeExpr` argument for a transition and this\n * function will be executed each time a state change occurs. If the value returned within the\n * function is true then the associated animation will be run.\n *\n * Animation transitions are placed within an {\\@link trigger animation trigger}. For an transition\n * to animate to a state value and persist its styles then one or more {\\@link state animation\n * states} is expected to be defined.\n *\n * ### Usage\n *\n * An animation transition is kicked off the `stateChangeExpr` predicate evaluates to true based on\n * what the previous state is and what the current state has become. In other words, if a transition\n * is defined that matches the old/current state criteria then the associated animation will be\n * triggered.\n *\n * ```typescript\n * // all transition/state changes are defined within an animation trigger\n * trigger(\"myAnimationTrigger\", [\n *   // if a state is defined then its styles will be persisted when the\n *   // animation has fully completed itself\n *   state(\"on\", style({ background: \"green\" })),\n *   state(\"off\", style({ background: \"grey\" })),\n *\n *   // a transition animation that will be kicked off when the state value\n *   // bound to \"myAnimationTrigger\" changes from \"on\" to \"off\"\n *   transition(\"on => off\", animate(500)),\n *\n *   // it is also possible to do run the same animation for both directions\n *   transition(\"on <=> off\", animate(500)),\n *\n *   // or to define multiple states pairs separated by commas\n *   transition(\"on => off, off => void\", animate(500)),\n *\n *   // this is a catch-all state change for when an element is inserted into\n *   // the page and the destination state is unknown\n *   transition(\"void => *\", [\n *     style({ opacity: 0 }),\n *     animate(500)\n *   ]),\n *\n *   // this will capture a state change between any states\n *   transition(\"* => *\", animate(\"1s 0s\")),\n *\n *   // you can also go full out and include a function\n *   transition((fromState, toState) => {\n *     // when `true` then it will allow the animation below to be invoked\n *     return fromState == \"off\" && toState == \"on\";\n *   }, animate(\"1s 0s\"))\n * ])\n * ```\n *\n * The template associated with this component will make use of the `myAnimationTrigger` animation\n * trigger by binding to an element within its template code.\n *\n * ```html\n * <!-- somewhere inside of my-component-tpl.html -->\n * <div [\\@myAnimationTrigger]=\"myStatusExp\">...</div>\n * ```\n *\n * #### The final `animate` call\n *\n * If the final step within the transition steps is a call to `animate()` that **only** uses a\n * timing value with **no style data** then it will be automatically used as the final animation arc\n * for the element to animate itself to the final state. This involves an automatic mix of\n * adding/removing CSS styles so that the element will be in the exact state it should be for the\n * applied state to be presented correctly.\n *\n * ```\n * // start off by hiding the element, but make sure that it animates properly to whatever state\n * // is currently active for \"myAnimationTrigger\"\n * transition(\"void => *\", [\n *   style({ opacity: 0 }),\n *   animate(500)\n * ])\n * ```\n *\n * ### Transition Aliases (`:enter` and `:leave`)\n *\n * Given that enter (insertion) and leave (removal) animations are so common, the `transition`\n * function accepts both `:enter` and `:leave` values which are aliases for the `void => *` and `*\n * => void` state changes.\n *\n * ```\n * transition(\":enter\", [\n *   style({ opacity: 0 }),\n *   animate(500, style({ opacity: 1 }))\n * ])\n * transition(\":leave\", [\n *   animate(500, style({ opacity: 0 }))\n * ])\n * ```\n *\n * ### Boolean values\n * if a trigger binding value is a boolean value then it can be matched using a transition\n * expression that compares `true` and `false` or `1` and `0`.\n *\n * ```\n * // in the template\n * <div [\\@openClose]=\"open ? true : false\">...</div>\n *\n * // in the component metadata\n * trigger('openClose', [\n *   state('true', style({ height: '*' })),\n *   state('false', style({ height: '0px' })),\n *   transition('false <=> true', animate(500))\n * ])\n * ```\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} stateChangeExpr\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction transition(stateChangeExpr, steps, options) {\n    if (options === void 0) { options = null; }\n    return { type: 1 /* Transition */, expr: stateChangeExpr, animation: steps, options: options };\n}\n/**\n * `animation` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language.\n *\n * `var myAnimation = animation(...)` is designed to produce a reusable animation that can be later\n * invoked in another animation or sequence. Reusable animations are designed to make use of\n * animation parameters and the produced animation can be used via the `useAnimation` method.\n *\n * ```\n * var fadeAnimation = animation([\n *   style({ opacity: '{{ start }}' }),\n *   animate('{{ time }}',\n *     style({ opacity: '{{ end }}'}))\n * ], { params: { time: '1000ms', start: 0, end: 1 }});\n * ```\n *\n * If parameters are attached to an animation then they act as **default parameter values**. When an\n * animation is invoked via `useAnimation` then parameter values are allowed to be passed in\n * directly. If any of the passed in parameter values are missing then the default values will be\n * used.\n *\n * ```\n * useAnimation(fadeAnimation, {\n *   params: {\n *     time: '2s',\n *     start: 1,\n *     end: 0\n *   }\n * })\n * ```\n *\n * If one or more parameter values are missing before animated then an error will be thrown.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction animations_es5_animation(steps, options) {\n    if (options === void 0) { options = null; }\n    return { type: 8 /* Reference */, animation: steps, options: options };\n}\n/**\n * `animateChild` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. It works by allowing a queried element to execute its own\n * animation within the animation sequence.\n *\n * Each time an animation is triggered in angular, the parent animation\n * will always get priority and any child animations will be blocked. In order\n * for a child animation to run, the parent animation must query each of the elements\n * containing child animations and then allow the animations to run using `animateChild`.\n *\n * The example HTML code below shows both parent and child elements that have animation\n * triggers that will execute at the same time.\n *\n * ```html\n * <!-- parent-child.component.html -->\n * <button (click)=\"exp =! exp\">Toggle</button>\n * <hr>\n *\n * <div [\\@parentAnimation]=\"exp\">\n *   <header>Hello</header>\n *   <div [\\@childAnimation]=\"exp\">\n *       one\n *   </div>\n *   <div [\\@childAnimation]=\"exp\">\n *       two\n *   </div>\n *   <div [\\@childAnimation]=\"exp\">\n *       three\n *   </div>\n * </div>\n * ```\n *\n * Now when the `exp` value changes to true, only the `parentAnimation` animation will animate\n * because it has priority. However, using `query` and `animateChild` each of the inner animations\n * can also fire:\n *\n * ```ts\n * // parent-child.component.ts\n * import {trigger, transition, animate, style, query, animateChild} from '\\@angular/animations';\n * \\@Component({\n *   selector: 'parent-child-component',\n *   animations: [\n *     trigger('parentAnimation', [\n *       transition('false => true', [\n *         query('header', [\n *           style({ opacity: 0 }),\n *           animate(500, style({ opacity: 1 }))\n *         ]),\n *         query('\\@childAnimation', [\n *           animateChild()\n *         ])\n *       ])\n *     ]),\n *     trigger('childAnimation', [\n *       transition('false => true', [\n *         style({ opacity: 0 }),\n *         animate(500, style({ opacity: 1 }))\n *       ])\n *     ])\n *   ]\n * })\n * class ParentChildCmp {\n *   exp: boolean = false;\n * }\n * ```\n *\n * In the animation code above, when the `parentAnimation` transition kicks off it first queries to\n * find the header element and fades it in. It then finds each of the sub elements that contain the\n * `\\@childAnimation` trigger and then allows for their animations to fire.\n *\n * This example can be further extended by using stagger:\n *\n * ```ts\n * query('\\@childAnimation', stagger(100, [\n *   animateChild()\n * ]))\n * ```\n *\n * Now each of the sub animations start off with respect to the `100ms` staggering step.\n *\n * ## The first frame of child animations\n * When sub animations are executed using `animateChild` the animation engine will always apply the\n * first frame of every sub animation immediately at the start of the animation sequence. This way\n * the parent animation does not need to set any initial styling data on the sub elements before the\n * sub animations kick off.\n *\n * In the example above the first frame of the `childAnimation`'s `false => true` transition\n * consists of a style of `opacity: 0`. This is applied immediately when the `parentAnimation`\n * animation transition sequence starts. Only then when the `\\@childAnimation` is queried and called\n * with `animateChild` will it then animate to its destination of `opacity: 1`.\n *\n * Note that this feature designed to be used alongside {\\@link query query()} and it will only work\n * with animations that are assigned using the Angular animation DSL (this means that CSS keyframes\n * and transitions are not handled by this API).\n *\n * \\@experimental Animation support is experimental.\n * @param {?=} options\n * @return {?}\n */\nfunction animateChild(options) {\n    if (options === void 0) { options = null; }\n    return { type: 9 /* AnimateChild */, options: options };\n}\n/**\n * `useAnimation` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. It is used to kick off a reusable animation that is created using {\\@link\n * animation animation()}.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} animation\n * @param {?=} options\n * @return {?}\n */\nfunction useAnimation(animation, options) {\n    if (options === void 0) { options = null; }\n    return { type: 10 /* AnimateRef */, animation: animation, options: options };\n}\n/**\n * `query` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language.\n *\n * query() is used to find one or more inner elements within the current element that is\n * being animated within the sequence. The provided animation steps are applied\n * to the queried element (by default, an array is provided, then this will be\n * treated as an animation sequence).\n *\n * ### Usage\n *\n * query() is designed to collect mutiple elements and works internally by using\n * `element.querySelectorAll`. An additional options object can be provided which\n * can be used to limit the total amount of items to be collected.\n *\n * ```js\n * query('div', [\n *   animate(...),\n *   animate(...)\n * ], { limit: 1 })\n * ```\n *\n * query(), by default, will throw an error when zero items are found. If a query\n * has the `optional` flag set to true then this error will be ignored.\n *\n * ```js\n * query('.some-element-that-may-not-be-there', [\n *   animate(...),\n *   animate(...)\n * ], { optional: true })\n * ```\n *\n * ### Special Selector Values\n *\n * The selector value within a query can collect elements that contain angular-specific\n * characteristics\n * using special pseudo-selectors tokens.\n *\n * These include:\n *\n *  - Querying for newly inserted/removed elements using `query(\":enter\")`/`query(\":leave\")`\n *  - Querying all currently animating elements using `query(\":animating\")`\n *  - Querying elements that contain an animation trigger using `query(\"\\@triggerName\")`\n *  - Querying all elements that contain an animation triggers using `query(\"\\@*\")`\n *  - Including the current element into the animation sequence using `query(\":self\")`\n *\n *\n *  Each of these pseudo-selector tokens can be merged together into a combined query selector\n * string:\n *\n *  ```\n *  query(':self, .record:enter, .record:leave, \\@subTrigger', [...])\n *  ```\n *\n * ### Demo\n *\n * ```\n * \\@Component({\n *   selector: 'inner',\n *   template: `\n *     <div [\\@queryAnimation]=\"exp\">\n *       <h1>Title</h1>\n *       <div class=\"content\">\n *         Blah blah blah\n *       </div>\n *     </div>\n *   `,\n *   animations: [\n *    trigger('queryAnimation', [\n *      transition('* => goAnimate', [\n *        // hide the inner elements\n *        query('h1', style({ opacity: 0 })),\n *        query('.content', style({ opacity: 0 })),\n *\n *        // animate the inner elements in, one by one\n *        query('h1', animate(1000, style({ opacity: 1 })),\n *        query('.content', animate(1000, style({ opacity: 1 })),\n *      ])\n *    ])\n *  ]\n * })\n * class Cmp {\n *   exp = '';\n *\n *   goAnimate() {\n *     this.exp = 'goAnimate';\n *   }\n * }\n * ```\n *\n * \\@experimental Animation support is experimental.\n * @param {?} selector\n * @param {?} animation\n * @param {?=} options\n * @return {?}\n */\nfunction animations_es5_query(selector, animation, options) {\n    if (options === void 0) { options = null; }\n    return { type: 11 /* Query */, selector: selector, animation: animation, options: options };\n}\n/**\n * `stagger` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. It is designed to be used inside of an animation {\\@link query query()}\n * and works by issuing a timing gap between after each queried item is animated.\n *\n * ### Usage\n *\n * In the example below there is a container element that wraps a list of items stamped out\n * by an ngFor. The container element contains an animation trigger that will later be set\n * to query for each of the inner items.\n *\n * ```html\n * <!-- list.component.html -->\n * <button (click)=\"toggle()\">Show / Hide Items</button>\n * <hr />\n * <div [\\@listAnimation]=\"items.length\">\n *   <div *ngFor=\"let item of items\">\n *     {{ item }}\n *   </div>\n * </div>\n * ```\n *\n * The component code for this looks as such:\n *\n * ```ts\n * import {trigger, transition, style, animate, query, stagger} from '\\@angular/animations';\n * \\@Component({\n *   templateUrl: 'list.component.html',\n *   animations: [\n *     trigger('listAnimation', [\n *        //...\n *     ])\n *   ]\n * })\n * class ListComponent {\n *   items = [];\n *\n *   showItems() {\n *     this.items = [0,1,2,3,4];\n *   }\n *\n *   hideItems() {\n *     this.items = [];\n *   }\n *\n *   toggle() {\n *     this.items.length ? this.hideItems() : this.showItems();\n *   }\n * }\n * ```\n *\n * And now for the animation trigger code:\n *\n * ```ts\n * trigger('listAnimation', [\n *   transition('* => *', [ // each time the binding value changes\n *     query(':leave', [\n *       stagger(100, [\n *         animate('0.5s', style({ opacity: 0 }))\n *       ])\n *     ]),\n *     query(':enter', [\n *       style({ opacity: 0 }),\n *       stagger(100, [\n *         animate('0.5s', style({ opacity: 1 }))\n *       ])\n *     ])\n *   ])\n * ])\n * ```\n *\n * Now each time the items are added/removed then either the opacity\n * fade-in animation will run or each removed item will be faded out.\n * When either of these animations occur then a stagger effect will be\n * applied after each item's animation is started.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} timings\n * @param {?} animation\n * @return {?}\n */\nfunction stagger(timings, animation) {\n    return { type: 12 /* Stagger */, timings: timings, animation: animation };\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 * @param {?} cb\n * @return {?}\n */\nfunction scheduleMicroTask(cb) {\n    Promise.resolve(null).then(cb);\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 * \\@experimental Animation support is experimental.\n */\nvar NoopAnimationPlayer = (function () {\n    function NoopAnimationPlayer() {\n        this._onDoneFns = [];\n        this._onStartFns = [];\n        this._onDestroyFns = [];\n        this._started = false;\n        this._destroyed = false;\n        this._finished = false;\n        this.parentPlayer = null;\n        this.totalTime = 0;\n    }\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype._onFinish = function () {\n        if (!this._finished) {\n            this._finished = true;\n            this._onDoneFns.forEach(function (fn) { return fn(); });\n            this._onDoneFns = [];\n        }\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.onStart = function (fn) { this._onStartFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.onDone = function (fn) { this._onDoneFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.onDestroy = function (fn) { this._onDestroyFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.hasStarted = function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.init = function () { };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.play = function () {\n        if (!this.hasStarted()) {\n            this.triggerMicrotask();\n            this._onStart();\n        }\n        this._started = true;\n    };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.triggerMicrotask = function () {\n        var _this = this;\n        scheduleMicroTask(function () { return _this._onFinish(); });\n    };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype._onStart = function () {\n        this._onStartFns.forEach(function (fn) { return fn(); });\n        this._onStartFns = [];\n    };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.pause = function () { };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.restart = function () { };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.finish = function () { this._onFinish(); };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.destroy = function () {\n        if (!this._destroyed) {\n            this._destroyed = true;\n            if (!this.hasStarted()) {\n                this._onStart();\n            }\n            this.finish();\n            this._onDestroyFns.forEach(function (fn) { return fn(); });\n            this._onDestroyFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.reset = function () { };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.setPosition = function (p) { };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.getPosition = function () { return 0; };\n    return NoopAnimationPlayer;\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 */\nvar AnimationGroupPlayer = (function () {\n    /**\n     * @param {?} _players\n     */\n    function AnimationGroupPlayer(_players) {\n        var _this = this;\n        this._players = _players;\n        this._onDoneFns = [];\n        this._onStartFns = [];\n        this._finished = false;\n        this._started = false;\n        this._destroyed = false;\n        this._onDestroyFns = [];\n        this.parentPlayer = null;\n        this.totalTime = 0;\n        var doneCount = 0;\n        var destroyCount = 0;\n        var startCount = 0;\n        var total = this._players.length;\n        if (total == 0) {\n            scheduleMicroTask(function () { return _this._onFinish(); });\n        }\n        else {\n            this._players.forEach(function (player) {\n                player.parentPlayer = _this;\n                player.onDone(function () {\n                    if (++doneCount >= total) {\n                        _this._onFinish();\n                    }\n                });\n                player.onDestroy(function () {\n                    if (++destroyCount >= total) {\n                        _this._onDestroy();\n                    }\n                });\n                player.onStart(function () {\n                    if (++startCount >= total) {\n                        _this._onStart();\n                    }\n                });\n            });\n        }\n        this.totalTime = this._players.reduce(function (time, player) { return Math.max(time, player.totalTime); }, 0);\n    }\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype._onFinish = function () {\n        if (!this._finished) {\n            this._finished = true;\n            this._onDoneFns.forEach(function (fn) { return fn(); });\n            this._onDoneFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.init = function () { this._players.forEach(function (player) { return player.init(); }); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.onStart = function (fn) { this._onStartFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype._onStart = function () {\n        if (!this.hasStarted()) {\n            this._onStartFns.forEach(function (fn) { return fn(); });\n            this._onStartFns = [];\n            this._started = true;\n        }\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.onDone = function (fn) { this._onDoneFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.onDestroy = function (fn) { this._onDestroyFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.hasStarted = function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.play = function () {\n        if (!this.parentPlayer) {\n            this.init();\n        }\n        this._onStart();\n        this._players.forEach(function (player) { return player.play(); });\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.pause = function () { this._players.forEach(function (player) { return player.pause(); }); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.restart = function () { this._players.forEach(function (player) { return player.restart(); }); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.finish = function () {\n        this._onFinish();\n        this._players.forEach(function (player) { return player.finish(); });\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.destroy = function () { this._onDestroy(); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype._onDestroy = function () {\n        if (!this._destroyed) {\n            this._destroyed = true;\n            this._onFinish();\n            this._players.forEach(function (player) { return player.destroy(); });\n            this._onDestroyFns.forEach(function (fn) { return fn(); });\n            this._onDestroyFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.reset = function () {\n        this._players.forEach(function (player) { return player.reset(); });\n        this._destroyed = false;\n        this._finished = false;\n        this._started = false;\n    };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.setPosition = function (p) {\n        var /** @type {?} */ timeAtPosition = p * this.totalTime;\n        this._players.forEach(function (player) {\n            var /** @type {?} */ position = player.totalTime ? Math.min(1, timeAtPosition / player.totalTime) : 1;\n            player.setPosition(position);\n        });\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.getPosition = function () {\n        var /** @type {?} */ min = 0;\n        this._players.forEach(function (player) {\n            var /** @type {?} */ p = player.getPosition();\n            min = Math.min(p, min);\n        });\n        return min;\n    };\n    Object.defineProperty(AnimationGroupPlayer.prototype, \"players\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._players; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.beforeDestroy = function () {\n        this.players.forEach(function (player) {\n            if (player.beforeDestroy) {\n                player.beforeDestroy();\n            }\n        });\n    };\n    return AnimationGroupPlayer;\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 */\nvar ɵPRE_STYLE = '!';\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 * @module\n * @description\n * Entry point for all animation APIs of the animation package.\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 * @module\n * @description\n * Entry point for all public APIs of the animation package.\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\n//# sourceMappingURL=animations.es5.js.map\n\n// CONCATENATED MODULE: ./node_modules/@angular/animations/@angular/animations/browser.es5.js\n\n/**\n * @license Angular v4.4.7\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\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 */\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}\nfunction normalizeKeyframes(driver, normalizer, element, keyframes, preStyles, postStyles) {\n    if (preStyles === void 0) { preStyles = {}; }\n    if (postStyles === void 0) { postStyles = {}; }\n    var errors = [];\n    var normalizedKeyframes = [];\n    var previousOffset = -1;\n    var previousKeyframe = null;\n    keyframes.forEach(function (kf) {\n        var offset = kf['offset'];\n        var isSameOffset = offset == previousOffset;\n        var normalizedKeyframe = (isSameOffset && previousKeyframe) || {};\n        Object.keys(kf).forEach(function (prop) {\n            var normalizedProp = prop;\n            var 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        var 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}\nfunction listenOnPlayer(player, eventName, event, callback) {\n    switch (eventName) {\n        case 'start':\n            player.onStart(function () { return callback(event && copyAnimationEvent(event, 'start', player.totalTime)); });\n            break;\n        case 'done':\n            player.onDone(function () { return callback(event && copyAnimationEvent(event, 'done', player.totalTime)); });\n            break;\n        case 'destroy':\n            player.onDestroy(function () { return callback(event && copyAnimationEvent(event, 'destroy', player.totalTime)); });\n            break;\n    }\n}\nfunction copyAnimationEvent(e, phaseName, totalTime) {\n    var event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime);\n    var data = e['_data'];\n    if (data != null) {\n        event['_data'] = data;\n    }\n    return event;\n}\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName, totalTime) {\n    if (phaseName === void 0) { phaseName = ''; }\n    if (totalTime === void 0) { totalTime = 0; }\n    return { element: element, triggerName: triggerName, fromState: fromState, toState: toState, phaseName: phaseName, totalTime: totalTime };\n}\nfunction getOrSetAsInMap(map, key, defaultValue) {\n    var 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}\nfunction parseTimelineCommand(command) {\n    var separatorPos = command.indexOf(':');\n    var id = command.substring(1, separatorPos);\n    var action = command.substr(separatorPos + 1);\n    return [id, action];\n}\nvar _contains = function (elm1, elm2) { return false; };\nvar _matches = function (element, selector) { return false; };\nvar _query = function (element, selector, multi) {\n    return [];\n};\nif (typeof Element != 'undefined') {\n    // this is well supported in all browsers\n    _contains = function (elm1, elm2) { return elm1.contains(elm2); };\n    if (Element.prototype.matches) {\n        _matches = function (element, selector) { return element.matches(selector); };\n    }\n    else {\n        var proto = Element.prototype;\n        var fn_1 = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector ||\n            proto.oMatchesSelector || proto.webkitMatchesSelector;\n        if (fn_1) {\n            _matches = function (element, selector) { return fn_1.apply(element, [selector]); };\n        }\n    }\n    _query = function (element, selector, multi) {\n        var results = [];\n        if (multi) {\n            results.push.apply(results, element.querySelectorAll(selector));\n        }\n        else {\n            var elm = element.querySelector(selector);\n            if (elm) {\n                results.push(elm);\n            }\n        }\n        return results;\n    };\n}\nvar matchesElement = _matches;\nvar containsElement = _contains;\nvar invokeQuery = _query;\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 * @experimental\n */\nvar browser_es5_NoopAnimationDriver = (function () {\n    function NoopAnimationDriver() {\n    }\n    NoopAnimationDriver.prototype.matchesElement = function (element, selector) {\n        return matchesElement(element, selector);\n    };\n    NoopAnimationDriver.prototype.containsElement = function (elm1, elm2) { return containsElement(elm1, elm2); };\n    NoopAnimationDriver.prototype.query = function (element, selector, multi) {\n        return invokeQuery(element, selector, multi);\n    };\n    NoopAnimationDriver.prototype.computeStyle = function (element, prop, defaultValue) {\n        return defaultValue || '';\n    };\n    NoopAnimationDriver.prototype.animate = function (element, keyframes, duration, delay, easing, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        return new NoopAnimationPlayer();\n    };\n    return NoopAnimationDriver;\n}());\n/**\n * @experimental\n */\nvar AnimationDriver = (function () {\n    function AnimationDriver() {\n    }\n    return AnimationDriver;\n}());\nAnimationDriver.NOOP = new browser_es5_NoopAnimationDriver();\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 */\nvar ONE_SECOND = 1000;\nvar SUBSTITUTION_EXPR_START = '{{';\nvar SUBSTITUTION_EXPR_END = '}}';\nvar ENTER_CLASSNAME = 'ng-enter';\nvar LEAVE_CLASSNAME = 'ng-leave';\nvar ENTER_SELECTOR = '.ng-enter';\nvar LEAVE_SELECTOR = '.ng-leave';\nvar NG_TRIGGER_CLASSNAME = 'ng-trigger';\nvar NG_TRIGGER_SELECTOR = '.ng-trigger';\nvar NG_ANIMATING_CLASSNAME = 'ng-animating';\nvar NG_ANIMATING_SELECTOR = '.ng-animating';\nfunction resolveTimingValue(value) {\n    if (typeof value == 'number')\n        return value;\n    var matches = value.match(/^(-?[\\.\\d]+)(m?s)/);\n    if (!matches || matches.length < 2)\n        return 0;\n    return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\nfunction _convertTimeValueToMS(value, unit) {\n    switch (unit) {\n        case 's':\n            return value * ONE_SECOND;\n        default:\n            return value;\n    }\n}\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n    return timings.hasOwnProperty('duration') ?\n        timings :\n        parseTimeExpression(timings, errors, allowNegativeValues);\n}\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n    var regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n    var duration;\n    var delay = 0;\n    var easing = '';\n    if (typeof exp === 'string') {\n        var 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        var delayMatch = matches[3];\n        if (delayMatch != null) {\n            delay = _convertTimeValueToMS(Math.floor(parseFloat(delayMatch)), matches[4]);\n        }\n        var easingVal = matches[5];\n        if (easingVal) {\n            easing = easingVal;\n        }\n    }\n    else {\n        duration = exp;\n    }\n    if (!allowNegativeValues) {\n        var containsErrors = false;\n        var 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: duration, delay: delay, easing: easing };\n}\nfunction copyObj(obj, destination) {\n    if (destination === void 0) { destination = {}; }\n    Object.keys(obj).forEach(function (prop) { destination[prop] = obj[prop]; });\n    return destination;\n}\nfunction normalizeStyles(styles) {\n    var normalizedStyles = {};\n    if (Array.isArray(styles)) {\n        styles.forEach(function (data) { return copyStyles(data, false, normalizedStyles); });\n    }\n    else {\n        copyStyles(styles, false, normalizedStyles);\n    }\n    return normalizedStyles;\n}\nfunction copyStyles(styles, readPrototype, destination) {\n    if (destination === void 0) { 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 (var prop in styles) {\n            destination[prop] = styles[prop];\n        }\n    }\n    else {\n        copyObj(styles, destination);\n    }\n    return destination;\n}\nfunction setStyles(element, styles) {\n    if (element['style']) {\n        Object.keys(styles).forEach(function (prop) {\n            var camelProp = dashCaseToCamelCase(prop);\n            element.style[camelProp] = styles[prop];\n        });\n    }\n}\nfunction eraseStyles(element, styles) {\n    if (element['style']) {\n        Object.keys(styles).forEach(function (prop) {\n            var camelProp = dashCaseToCamelCase(prop);\n            element.style[camelProp] = '';\n        });\n    }\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 steps;\n}\nfunction validateStyleParams(value, options, errors) {\n    var params = options.params || {};\n    var matches = extractStyleParams(value);\n    if (matches.length) {\n        matches.forEach(function (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}\nvar PARAM_REGEX = new RegExp(SUBSTITUTION_EXPR_START + \"\\\\s*(.+?)\\\\s*\" + SUBSTITUTION_EXPR_END, 'g');\nfunction extractStyleParams(value) {\n    var params = [];\n    if (typeof value === 'string') {\n        var val = value.toString();\n        var match = void 0;\n        while (match = PARAM_REGEX.exec(val)) {\n            params.push(match[1]);\n        }\n        PARAM_REGEX.lastIndex = 0;\n    }\n    return params;\n}\nfunction interpolateParams(value, params, errors) {\n    var original = value.toString();\n    var str = original.replace(PARAM_REGEX, function (_, varName) {\n        var localVal = params[varName];\n        // this means that the value was never overidden 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}\nfunction iteratorToArray(iterator) {\n    var arr = [];\n    var item = iterator.next();\n    while (!item.done) {\n        arr.push(item.value);\n        item = iterator.next();\n    }\n    return arr;\n}\nvar DASH_CASE_REGEXP = /-+([a-z0-9])/g;\nfunction dashCaseToCamelCase(input) {\n    return input.replace(DASH_CASE_REGEXP, function () {\n        var m = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            m[_i] = arguments[_i];\n        }\n        return m[1].toUpperCase();\n    });\n}\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n    return duration === 0 || delay === 0;\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 * @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 */\nvar ANY_STATE = '*';\n/**\n * @param {?} transitionValue\n * @param {?} errors\n * @return {?}\n */\nfunction parseTransitionExpr(transitionValue, errors) {\n    var /** @type {?} */ expressions = [];\n    if (typeof transitionValue == 'string') {\n        ((transitionValue))\n            .split(/\\s*,\\s*/)\n            .forEach(function (str) { return 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        eventStr = parseAnimationAlias(eventStr, errors);\n    }\n    var /** @type {?} */ 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    var /** @type {?} */ fromState = match[1];\n    var /** @type {?} */ separator = match[2];\n    var /** @type {?} */ toState = match[3];\n    expressions.push(makeLambdaFromStates(fromState, toState));\n    var /** @type {?} */ 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        default:\n            errors.push(\"The transition alias value \\\"\" + alias + \"\\\" is not supported\");\n            return '* => *';\n    }\n}\nvar TRUE_BOOLEAN_VALUES = new Set();\nTRUE_BOOLEAN_VALUES.add('true');\nTRUE_BOOLEAN_VALUES.add('1');\nvar FALSE_BOOLEAN_VALUES = new Set();\nFALSE_BOOLEAN_VALUES.add('false');\nFALSE_BOOLEAN_VALUES.add('0');\n/**\n * @param {?} lhs\n * @param {?} rhs\n * @return {?}\n */\nfunction makeLambdaFromStates(lhs, rhs) {\n    var /** @type {?} */ LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n    var /** @type {?} */ RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n    return function (fromState, toState) {\n        var /** @type {?} */ lhsMatch = lhs == ANY_STATE || lhs == fromState;\n        var /** @type {?} */ 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 * @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 */\nvar SELF_TOKEN = ':self';\nvar SELF_TOKEN_REGEX = new RegExp(\"s*\" + SELF_TOKEN + \"s*,?\", 'g');\n/**\n * @param {?} metadata\n * @param {?} errors\n * @return {?}\n */\nfunction buildAnimationAst(metadata, errors) {\n    return new browser_es5_AnimationAstBuilderVisitor().build(metadata, errors);\n}\nvar LEAVE_TOKEN = ':leave';\nvar LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');\nvar ENTER_TOKEN = ':enter';\nvar ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');\nvar ROOT_SELECTOR = '';\nvar browser_es5_AnimationAstBuilderVisitor = (function () {\n    function AnimationAstBuilderVisitor() {\n    }\n    /**\n     * @param {?} metadata\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.build = function (metadata, errors) {\n        var /** @type {?} */ context = new AnimationAstBuilderContext(errors);\n        this._resetContextStyleTimingState(context);\n        return (visitDslNode(this, normalizeAnimationEntry(metadata), context));\n    };\n    /**\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._resetContextStyleTimingState = function (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    AnimationAstBuilderVisitor.prototype.visitTrigger = function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ queryCount = context.queryCount = 0;\n        var /** @type {?} */ depCount = context.depCount = 0;\n        var /** @type {?} */ states = [];\n        var /** @type {?} */ transitions = [];\n        metadata.definitions.forEach(function (def) {\n            _this._resetContextStyleTimingState(context);\n            if (def.type == 0 /* State */) {\n                var /** @type {?} */ stateDef_1 = (def);\n                var /** @type {?} */ name = stateDef_1.name;\n                name.split(/\\s*,\\s*/).forEach(function (n) {\n                    stateDef_1.name = n;\n                    states.push(_this.visitState(stateDef_1, context));\n                });\n                stateDef_1.name = name;\n            }\n            else if (def.type == 1 /* Transition */) {\n                var /** @type {?} */ 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: states, transitions: transitions, queryCount: queryCount, depCount: depCount,\n            options: null\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitState = function (metadata, context) {\n        var /** @type {?} */ styleAst = this.visitStyle(metadata.styles, context);\n        var /** @type {?} */ astParams = (metadata.options && metadata.options.params) || null;\n        if (styleAst.containsDynamicStyles) {\n            var /** @type {?} */ missingSubs_1 = new Set();\n            var /** @type {?} */ params_1 = astParams || {};\n            styleAst.styles.forEach(function (value) {\n                if (isObject(value)) {\n                    var /** @type {?} */ stylesObj_1 = (value);\n                    Object.keys(stylesObj_1).forEach(function (prop) {\n                        extractStyleParams(stylesObj_1[prop]).forEach(function (sub) {\n                            if (!params_1.hasOwnProperty(sub)) {\n                                missingSubs_1.add(sub);\n                            }\n                        });\n                    });\n                }\n            });\n            if (missingSubs_1.size) {\n                var /** @type {?} */ missingSubsArr = iteratorToArray(missingSubs_1.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    AnimationAstBuilderVisitor.prototype.visitTransition = function (metadata, context) {\n        context.queryCount = 0;\n        context.depCount = 0;\n        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n        var /** @type {?} */ matchers = parseTransitionExpr(metadata.expr, context.errors);\n        return {\n            type: 1 /* Transition */,\n            matchers: matchers,\n            animation: 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    AnimationAstBuilderVisitor.prototype.visitSequence = function (metadata, context) {\n        var _this = this;\n        return {\n            type: 2 /* Sequence */,\n            steps: metadata.steps.map(function (s) { return visitDslNode(_this, s, context); }),\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitGroup = function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ currentTime = context.currentTime;\n        var /** @type {?} */ furthestTime = 0;\n        var /** @type {?} */ steps = metadata.steps.map(function (step) {\n            context.currentTime = currentTime;\n            var /** @type {?} */ 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: steps,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitAnimate = function (metadata, context) {\n        var /** @type {?} */ timingAst = constructTimingAst(metadata.timings, context.errors);\n        context.currentAnimateTimings = timingAst;\n        var /** @type {?} */ styleAst;\n        var /** @type {?} */ styleMetadata = metadata.styles ? metadata.styles : style({});\n        if (styleMetadata.type == 5 /* Keyframes */) {\n            styleAst = this.visitKeyframes(/** @type {?} */ (styleMetadata), context);\n        }\n        else {\n            var /** @type {?} */ styleMetadata_1 = (metadata.styles);\n            var /** @type {?} */ isEmpty = false;\n            if (!styleMetadata_1) {\n                isEmpty = true;\n                var /** @type {?} */ newStyleData = {};\n                if (timingAst.easing) {\n                    newStyleData['easing'] = timingAst.easing;\n                }\n                styleMetadata_1 = style(newStyleData);\n            }\n            context.currentTime += timingAst.duration + timingAst.delay;\n            var /** @type {?} */ _styleAst = this.visitStyle(styleMetadata_1, 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    AnimationAstBuilderVisitor.prototype.visitStyle = function (metadata, context) {\n        var /** @type {?} */ ast = this._makeStyleAst(metadata, context);\n        this._validateStyleAst(ast, context);\n        return ast;\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._makeStyleAst = function (metadata, context) {\n        var /** @type {?} */ styles = [];\n        if (Array.isArray(metadata.styles)) {\n            ((metadata.styles)).forEach(function (styleTuple) {\n                if (typeof styleTuple == 'string') {\n                    if (styleTuple == AUTO_STYLE) {\n                        styles.push(/** @type {?} */ (styleTuple));\n                    }\n                    else {\n                        context.errors.push(\"The provided style string value \" + styleTuple + \" is not allowed.\");\n                    }\n                }\n                else {\n                    styles.push(/** @type {?} */ (styleTuple));\n                }\n            });\n        }\n        else {\n            styles.push(metadata.styles);\n        }\n        var /** @type {?} */ containsDynamicStyles = false;\n        var /** @type {?} */ collectedEasing = null;\n        styles.forEach(function (styleData) {\n            if (isObject(styleData)) {\n                var /** @type {?} */ styleMap = (styleData);\n                var /** @type {?} */ easing = styleMap['easing'];\n                if (easing) {\n                    collectedEasing = (easing);\n                    delete styleMap['easing'];\n                }\n                if (!containsDynamicStyles) {\n                    for (var /** @type {?} */ prop in styleMap) {\n                        var /** @type {?} */ 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: styles,\n            easing: collectedEasing,\n            offset: metadata.offset, containsDynamicStyles: containsDynamicStyles,\n            options: null\n        };\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._validateStyleAst = function (ast, context) {\n        var /** @type {?} */ timings = context.currentAnimateTimings;\n        var /** @type {?} */ endTime = context.currentTime;\n        var /** @type {?} */ startTime = context.currentTime;\n        if (timings && startTime > 0) {\n            startTime -= timings.duration + timings.delay;\n        }\n        ast.styles.forEach(function (tuple) {\n            if (typeof tuple == 'string')\n                return;\n            Object.keys(tuple).forEach(function (prop) {\n                var /** @type {?} */ collectedStyles = context.collectedStyles[((context.currentQuerySelector))];\n                var /** @type {?} */ collectedEntry = collectedStyles[prop];\n                var /** @type {?} */ 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: startTime, endTime: 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    AnimationAstBuilderVisitor.prototype.visitKeyframes = function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ 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        var /** @type {?} */ MAX_KEYFRAME_OFFSET = 1;\n        var /** @type {?} */ totalKeyframesWithOffsets = 0;\n        var /** @type {?} */ offsets = [];\n        var /** @type {?} */ offsetsOutOfOrder = false;\n        var /** @type {?} */ keyframesOutOfRange = false;\n        var /** @type {?} */ previousOffset = 0;\n        var /** @type {?} */ keyframes = metadata.steps.map(function (styles) {\n            var /** @type {?} */ style$$1 = _this._makeStyleAst(styles, context);\n            var /** @type {?} */ offsetVal = style$$1.offset != null ? style$$1.offset : consumeOffset(style$$1.styles);\n            var /** @type {?} */ offset = 0;\n            if (offsetVal != null) {\n                totalKeyframesWithOffsets++;\n                offset = style$$1.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$$1;\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        var /** @type {?} */ length = metadata.steps.length;\n        var /** @type {?} */ 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        var /** @type {?} */ limit = length - 1;\n        var /** @type {?} */ currentTime = context.currentTime;\n        var /** @type {?} */ currentAnimateTimings = ((context.currentAnimateTimings));\n        var /** @type {?} */ animateDuration = currentAnimateTimings.duration;\n        keyframes.forEach(function (kf, i) {\n            var /** @type {?} */ offset = generatedOffset > 0 ? (i == limit ? 1 : (generatedOffset * i)) : offsets[i];\n            var /** @type {?} */ 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    AnimationAstBuilderVisitor.prototype.visitReference = function (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    AnimationAstBuilderVisitor.prototype.visitAnimateChild = function (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    AnimationAstBuilderVisitor.prototype.visitAnimateRef = function (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    AnimationAstBuilderVisitor.prototype.visitQuery = function (metadata, context) {\n        var /** @type {?} */ parentSelector = ((context.currentQuerySelector));\n        var /** @type {?} */ options = ((metadata.options || {}));\n        context.queryCount++;\n        context.currentQuery = metadata;\n        var _a = normalizeSelector(metadata.selector), selector = _a[0], includeSelf = _a[1];\n        context.currentQuerySelector =\n            parentSelector.length ? (parentSelector + ' ' + selector) : selector;\n        getOrSetAsInMap(context.collectedStyles, context.currentQuerySelector, {});\n        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n        context.currentQuery = null;\n        context.currentQuerySelector = parentSelector;\n        return {\n            type: 11 /* Query */,\n            selector: selector,\n            limit: options.limit || 0,\n            optional: !!options.optional, includeSelf: includeSelf, animation: animation,\n            originalSelector: metadata.selector,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitStagger = function (metadata, context) {\n        if (!context.currentQuery) {\n            context.errors.push(\"stagger() can only be used inside of query()\");\n        }\n        var /** @type {?} */ 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: timings,\n            options: null\n        };\n    };\n    return AnimationAstBuilderVisitor;\n}());\n/**\n * @param {?} selector\n * @return {?}\n */\nfunction normalizeSelector(selector) {\n    var /** @type {?} */ hasAmpersand = selector.split(/\\s*,\\s*/).find(function (token) { return token == SELF_TOKEN; }) ? true : false;\n    if (hasAmpersand) {\n        selector = selector.replace(SELF_TOKEN_REGEX, '');\n    }\n    selector = selector.replace(ENTER_TOKEN_REGEX, ENTER_SELECTOR)\n        .replace(LEAVE_TOKEN_REGEX, LEAVE_SELECTOR)\n        .replace(/@\\*/g, NG_TRIGGER_SELECTOR)\n        .replace(/@\\w+/g, function (match) { return 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}\nvar AnimationAstBuilderContext = (function () {\n    /**\n     * @param {?} errors\n     */\n    function AnimationAstBuilderContext(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    return AnimationAstBuilderContext;\n}());\n/**\n * @param {?} styles\n * @return {?}\n */\nfunction consumeOffset(styles) {\n    if (typeof styles == 'string')\n        return null;\n    var /** @type {?} */ offset = null;\n    if (Array.isArray(styles)) {\n        styles.forEach(function (styleTuple) {\n            if (isObject(styleTuple) && styleTuple.hasOwnProperty('offset')) {\n                var /** @type {?} */ obj = (styleTuple);\n                offset = parseFloat(/** @type {?} */ (obj['offset']));\n                delete obj['offset'];\n            }\n        });\n    }\n    else if (isObject(styles) && styles.hasOwnProperty('offset')) {\n        var /** @type {?} */ 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    var /** @type {?} */ timings = null;\n    if (value.hasOwnProperty('duration')) {\n        timings = (value);\n    }\n    else if (typeof value == 'number') {\n        var /** @type {?} */ duration = resolveTiming(/** @type {?} */ (value), errors).duration;\n        return makeTimingAst(/** @type {?} */ (duration), 0, '');\n    }\n    var /** @type {?} */ strValue = (value);\n    var /** @type {?} */ isDynamic = strValue.split(/\\s+/).some(function (v) { return v.charAt(0) == '{' && v.charAt(1) == '{'; });\n    if (isDynamic) {\n        var /** @type {?} */ ast = (makeTimingAst(0, 0, ''));\n        ast.dynamic = true;\n        ast.strValue = strValue;\n        return (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'] = ((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: duration, delay: delay, easing: easing };\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 * @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, subTimeline) {\n    if (easing === void 0) { easing = null; }\n    if (subTimeline === void 0) { subTimeline = false; }\n    return {\n        type: 1 /* TimelineAnimation */,\n        element: element,\n        keyframes: keyframes,\n        preStyleProps: preStyleProps,\n        postStyleProps: postStyleProps,\n        duration: duration,\n        delay: delay,\n        totalTime: duration + delay, easing: easing, subTimeline: subTimeline\n    };\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 */\nvar ElementInstructionMap = (function () {\n    function ElementInstructionMap() {\n        this._map = new Map();\n    }\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.consume = function (element) {\n        var /** @type {?} */ 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    ElementInstructionMap.prototype.append = function (element, instructions) {\n        var /** @type {?} */ existingInstructions = this._map.get(element);\n        if (!existingInstructions) {\n            this._map.set(element, existingInstructions = []);\n        }\n        existingInstructions.push.apply(existingInstructions, instructions);\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.has = function (element) { return this._map.has(element); };\n    /**\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.clear = function () { this._map.clear(); };\n    return ElementInstructionMap;\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 */\nvar ONE_FRAME_IN_MILLISECONDS = 1;\n/**\n * @param {?} driver\n * @param {?} rootElement\n * @param {?} ast\n * @param {?=} startingStyles\n * @param {?=} finalStyles\n * @param {?=} options\n * @param {?=} subInstructions\n * @param {?=} errors\n * @return {?}\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, startingStyles, finalStyles, options, subInstructions, errors) {\n    if (startingStyles === void 0) { startingStyles = {}; }\n    if (finalStyles === void 0) { finalStyles = {}; }\n    if (errors === void 0) { errors = []; }\n    return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, startingStyles, finalStyles, options, subInstructions, errors);\n}\nvar AnimationTimelineBuilderVisitor = (function () {\n    function AnimationTimelineBuilderVisitor() {\n    }\n    /**\n     * @param {?} driver\n     * @param {?} rootElement\n     * @param {?} ast\n     * @param {?} startingStyles\n     * @param {?} finalStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @param {?=} errors\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.buildKeyframes = function (driver, rootElement, ast, startingStyles, finalStyles, options, subInstructions, errors) {\n        if (errors === void 0) { errors = []; }\n        subInstructions = subInstructions || new ElementInstructionMap();\n        var /** @type {?} */ context = new AnimationTimelineContext(driver, rootElement, subInstructions, 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        var /** @type {?} */ timelines = context.timelines.filter(function (timeline) { return timeline.containsAnimation(); });\n        if (timelines.length && Object.keys(finalStyles).length) {\n            var /** @type {?} */ 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(function (timeline) { return timeline.buildKeyframes(); }) :\n            [createTimelineInstruction(rootElement, [], [], [], 0, 0, '', false)];\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitTrigger = function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitState = function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitTransition = function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitAnimateChild = function (ast, context) {\n        var /** @type {?} */ elementInstructions = context.subInstructions.consume(context.element);\n        if (elementInstructions) {\n            var /** @type {?} */ innerContext = context.createSubContext(ast.options);\n            var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n            var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitAnimateRef = function (ast, context) {\n        var /** @type {?} */ 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     * @param {?} instructions\n     * @param {?} context\n     * @param {?} options\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype._visitSubInstructions = function (instructions, context, options) {\n        var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ furthestTime = startTime;\n        // this is a special-case for when a user wants to skip a sub\n        // animation from being fired entirely.\n        var /** @type {?} */ duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n        var /** @type {?} */ delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n        if (duration !== 0) {\n            instructions.forEach(function (instruction) {\n                var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitReference = function (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    AnimationTimelineBuilderVisitor.prototype.visitSequence = function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ subContextCount = context.subContextCount;\n        var /** @type {?} */ ctx = context;\n        var /** @type {?} */ 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                var /** @type {?} */ delay = resolveTimingValue(options.delay);\n                ctx.delayNextStep(delay);\n            }\n        }\n        if (ast.steps.length) {\n            ast.steps.forEach(function (s) { return 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    AnimationTimelineBuilderVisitor.prototype.visitGroup = function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ innerTimelines = [];\n        var /** @type {?} */ furthestTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n        ast.steps.forEach(function (s) {\n            var /** @type {?} */ 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(function (timeline) { return context.currentTimeline.mergeTimelineCollectedStyles(timeline); });\n        context.transformIntoNewTimeline(furthestTime);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype._visitTiming = function (ast, context) {\n        if (((ast)).dynamic) {\n            var /** @type {?} */ strValue = ((ast)).strValue;\n            var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitAnimate = function (ast, context) {\n        var /** @type {?} */ timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);\n        var /** @type {?} */ timeline = context.currentTimeline;\n        if (timings.delay) {\n            context.incrementTime(timings.delay);\n            timeline.snapshotCurrentStyles();\n        }\n        var /** @type {?} */ style$$1 = ast.style;\n        if (style$$1.type == 5 /* Keyframes */) {\n            this.visitKeyframes(style$$1, context);\n        }\n        else {\n            context.incrementTime(timings.duration);\n            this.visitStyle(/** @type {?} */ (style$$1), 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    AnimationTimelineBuilderVisitor.prototype.visitStyle = function (ast, context) {\n        var /** @type {?} */ timeline = context.currentTimeline;\n        var /** @type {?} */ timings = ((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        var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitKeyframes = function (ast, context) {\n        var /** @type {?} */ currentAnimateTimings = ((context.currentAnimateTimings));\n        var /** @type {?} */ startTime = (((context.currentTimeline))).duration;\n        var /** @type {?} */ duration = currentAnimateTimings.duration;\n        var /** @type {?} */ innerContext = context.createSubContext();\n        var /** @type {?} */ innerTimeline = innerContext.currentTimeline;\n        innerTimeline.easing = currentAnimateTimings.easing;\n        ast.styles.forEach(function (step) {\n            var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitQuery = function (ast, context) {\n        var _this = this;\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        var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ options = ((ast.options || {}));\n        var /** @type {?} */ 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        var /** @type {?} */ furthestTime = startTime;\n        var /** @type {?} */ elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n        context.currentQueryTotal = elms.length;\n        var /** @type {?} */ sameElementTimeline = null;\n        elms.forEach(function (element, i) {\n            context.currentQueryIndex = i;\n            var /** @type {?} */ 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            var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitStagger = function (ast, context) {\n        var /** @type {?} */ parentContext = ((context.parentContext));\n        var /** @type {?} */ tl = context.currentTimeline;\n        var /** @type {?} */ timings = ast.timings;\n        var /** @type {?} */ duration = Math.abs(timings.duration);\n        var /** @type {?} */ maxTime = duration * (context.currentQueryTotal - 1);\n        var /** @type {?} */ delay = duration * context.currentQueryIndex;\n        var /** @type {?} */ 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        var /** @type {?} */ timeline = context.currentTimeline;\n        if (delay) {\n            timeline.delayNextStep(delay);\n        }\n        var /** @type {?} */ 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    return AnimationTimelineBuilderVisitor;\n}());\nvar DEFAULT_NOOP_PREVIOUS_NODE = ({});\nvar AnimationTimelineContext = (function () {\n    /**\n     * @param {?} _driver\n     * @param {?} element\n     * @param {?} subInstructions\n     * @param {?} errors\n     * @param {?} timelines\n     * @param {?=} initialTimeline\n     */\n    function AnimationTimelineContext(_driver, element, subInstructions, errors, timelines, initialTimeline) {\n        this._driver = _driver;\n        this.element = element;\n        this.subInstructions = subInstructions;\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 browser_es5_TimelineBuilder(element, 0);\n        timelines.push(this.currentTimeline);\n    }\n    Object.defineProperty(AnimationTimelineContext.prototype, \"params\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.options.params; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} options\n     * @param {?=} skipIfExists\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.updateOptions = function (options, skipIfExists) {\n        var _this = this;\n        if (!options)\n            return;\n        var /** @type {?} */ newOptions = (options);\n        var /** @type {?} */ optionsToUpdate = this.options;\n        // NOTE: this will get patched up when other animation methods support duration overrides\n        if (newOptions.duration != null) {\n            ((optionsToUpdate)).duration = resolveTimingValue(newOptions.duration);\n        }\n        if (newOptions.delay != null) {\n            optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n        }\n        var /** @type {?} */ newParams = newOptions.params;\n        if (newParams) {\n            var /** @type {?} */ paramsToUpdate_1 = ((optionsToUpdate.params));\n            if (!paramsToUpdate_1) {\n                paramsToUpdate_1 = this.options.params = {};\n            }\n            Object.keys(newParams).forEach(function (name) {\n                if (!skipIfExists || !paramsToUpdate_1.hasOwnProperty(name)) {\n                    paramsToUpdate_1[name] = interpolateParams(newParams[name], paramsToUpdate_1, _this.errors);\n                }\n            });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype._copyOptions = function () {\n        var /** @type {?} */ options = {};\n        if (this.options) {\n            var /** @type {?} */ oldParams_1 = this.options.params;\n            if (oldParams_1) {\n                var /** @type {?} */ params_2 = options['params'] = {};\n                Object.keys(oldParams_1).forEach(function (name) { params_2[name] = oldParams_1[name]; });\n            }\n        }\n        return options;\n    };\n    /**\n     * @param {?=} options\n     * @param {?=} element\n     * @param {?=} newTime\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.createSubContext = function (options, element, newTime) {\n        if (options === void 0) { options = null; }\n        var /** @type {?} */ target = element || this.element;\n        var /** @type {?} */ context = new AnimationTimelineContext(this._driver, target, this.subInstructions, 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    AnimationTimelineContext.prototype.transformIntoNewTimeline = function (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    AnimationTimelineContext.prototype.appendInstructionToTimeline = function (instruction, duration, delay) {\n        var /** @type {?} */ updatedTimings = {\n            duration: duration != null ? duration : instruction.duration,\n            delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n            easing: ''\n        };\n        var /** @type {?} */ builder = new browser_es5_SubTimelineBuilder(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    AnimationTimelineContext.prototype.incrementTime = function (time) {\n        this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n    };\n    /**\n     * @param {?} delay\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.delayNextStep = function (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    AnimationTimelineContext.prototype.invokeQuery = function (selector, originalSelector, limit, includeSelf, optional, errors) {\n        var /** @type {?} */ results = [];\n        if (includeSelf) {\n            results.push(this.element);\n        }\n        if (selector.length > 0) {\n            var /** @type {?} */ multi = limit != 1;\n            var /** @type {?} */ elements = this._driver.query(this.element, selector, multi);\n            if (limit !== 0) {\n                elements = elements.slice(0, limit);\n            }\n            results.push.apply(results, 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    return AnimationTimelineContext;\n}());\nvar browser_es5_TimelineBuilder = (function () {\n    /**\n     * @param {?} element\n     * @param {?} startTime\n     * @param {?=} _elementTimelineStylesLookup\n     */\n    function TimelineBuilder(element, startTime, _elementTimelineStylesLookup) {\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 = 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    TimelineBuilder.prototype.containsAnimation = function () {\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    TimelineBuilder.prototype.getCurrentStyleProperties = function () { return Object.keys(this._currentKeyframe); };\n    Object.defineProperty(TimelineBuilder.prototype, \"currentTime\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.startTime + this.duration; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} delay\n     * @return {?}\n     */\n    TimelineBuilder.prototype.delayNextStep = function (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        var /** @type {?} */ 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    TimelineBuilder.prototype.fork = function (element, currentTime) {\n        this.applyStylesToKeyframe();\n        return new TimelineBuilder(element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype._loadKeyframe = function () {\n        if (this._currentKeyframe) {\n            this._previousKeyframe = this._currentKeyframe;\n        }\n        this._currentKeyframe = ((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    TimelineBuilder.prototype.forwardFrame = function () {\n        this.duration += ONE_FRAME_IN_MILLISECONDS;\n        this._loadKeyframe();\n    };\n    /**\n     * @param {?} time\n     * @return {?}\n     */\n    TimelineBuilder.prototype.forwardTime = function (time) {\n        this.applyStylesToKeyframe();\n        this.duration = time;\n        this._loadKeyframe();\n    };\n    /**\n     * @param {?} prop\n     * @param {?} value\n     * @return {?}\n     */\n    TimelineBuilder.prototype._updateStyle = function (prop, value) {\n        this._localTimelineStyles[prop] = value;\n        this._globalTimelineStyles[prop] = value;\n        this._styleSummary[prop] = { time: this.currentTime, value: value };\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.allowOnlyTimelineStyles = function () { return this._currentEmptyStepKeyframe !== this._currentKeyframe; };\n    /**\n     * @param {?} easing\n     * @return {?}\n     */\n    TimelineBuilder.prototype.applyEmptyStep = function (easing) {\n        var _this = this;\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(function (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    TimelineBuilder.prototype.setStyles = function (input, easing, errors, options) {\n        var _this = this;\n        if (easing) {\n            this._previousKeyframe['easing'] = easing;\n        }\n        var /** @type {?} */ params = (options && options.params) || {};\n        var /** @type {?} */ styles = flattenStyles(input, this._globalTimelineStyles);\n        Object.keys(styles).forEach(function (prop) {\n            var /** @type {?} */ 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    TimelineBuilder.prototype.applyStylesToKeyframe = function () {\n        var _this = this;\n        var /** @type {?} */ styles = this._pendingStyles;\n        var /** @type {?} */ props = Object.keys(styles);\n        if (props.length == 0)\n            return;\n        this._pendingStyles = {};\n        props.forEach(function (prop) {\n            var /** @type {?} */ val = styles[prop];\n            _this._currentKeyframe[prop] = val;\n        });\n        Object.keys(this._localTimelineStyles).forEach(function (prop) {\n            if (!_this._currentKeyframe.hasOwnProperty(prop)) {\n                _this._currentKeyframe[prop] = _this._localTimelineStyles[prop];\n            }\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.snapshotCurrentStyles = function () {\n        var _this = this;\n        Object.keys(this._localTimelineStyles).forEach(function (prop) {\n            var /** @type {?} */ val = _this._localTimelineStyles[prop];\n            _this._pendingStyles[prop] = val;\n            _this._updateStyle(prop, val);\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.getFinalKeyframe = function () { return this._keyframes.get(this.duration); };\n    Object.defineProperty(TimelineBuilder.prototype, \"properties\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            var /** @type {?} */ properties = [];\n            for (var /** @type {?} */ prop in this._currentKeyframe) {\n                properties.push(prop);\n            }\n            return properties;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} timeline\n     * @return {?}\n     */\n    TimelineBuilder.prototype.mergeTimelineCollectedStyles = function (timeline) {\n        var _this = this;\n        Object.keys(timeline._styleSummary).forEach(function (prop) {\n            var /** @type {?} */ details0 = _this._styleSummary[prop];\n            var /** @type {?} */ 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    TimelineBuilder.prototype.buildKeyframes = function () {\n        var _this = this;\n        this.applyStylesToKeyframe();\n        var /** @type {?} */ preStyleProps = new Set();\n        var /** @type {?} */ postStyleProps = new Set();\n        var /** @type {?} */ isEmpty = this._keyframes.size === 1 && this.duration === 0;\n        var /** @type {?} */ finalKeyframes = [];\n        this._keyframes.forEach(function (keyframe, time) {\n            var /** @type {?} */ finalKeyframe = copyStyles(keyframe, true);\n            Object.keys(finalKeyframe).forEach(function (prop) {\n                var /** @type {?} */ 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        var /** @type {?} */ preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];\n        var /** @type {?} */ 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            var /** @type {?} */ kf0 = finalKeyframes[0];\n            var /** @type {?} */ 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    return TimelineBuilder;\n}());\nvar browser_es5_SubTimelineBuilder = (function (_super) {\n    tslib_es6[\"a\" /* __extends */](SubTimelineBuilder, _super);\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} preStyleProps\n     * @param {?} postStyleProps\n     * @param {?} timings\n     * @param {?=} _stretchStartingKeyframe\n     */\n    function SubTimelineBuilder(element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe) {\n        if (_stretchStartingKeyframe === void 0) { _stretchStartingKeyframe = false; }\n        var _this = _super.call(this, element, timings.delay) || this;\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        return _this;\n    }\n    /**\n     * @return {?}\n     */\n    SubTimelineBuilder.prototype.containsAnimation = function () { return this.keyframes.length > 1; };\n    /**\n     * @return {?}\n     */\n    SubTimelineBuilder.prototype.buildKeyframes = function () {\n        var /** @type {?} */ keyframes = this.keyframes;\n        var _a = this.timings, delay = _a.delay, duration = _a.duration, easing = _a.easing;\n        if (this._stretchStartingKeyframe && delay) {\n            var /** @type {?} */ newKeyframes = [];\n            var /** @type {?} */ totalTime = duration + delay;\n            var /** @type {?} */ startingGap = delay / totalTime;\n            // the original starting keyframe now starts once the delay is done\n            var /** @type {?} */ newFirstKeyframe = copyStyles(keyframes[0], false);\n            newFirstKeyframe['offset'] = 0;\n            newKeyframes.push(newFirstKeyframe);\n            var /** @type {?} */ 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            var /** @type {?} */ limit = keyframes.length - 1;\n            for (var /** @type {?} */ i = 1; i <= limit; i++) {\n                var /** @type {?} */ kf = copyStyles(keyframes[i], false);\n                var /** @type {?} */ oldOffset = (kf['offset']);\n                var /** @type {?} */ 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    return SubTimelineBuilder;\n}(browser_es5_TimelineBuilder));\n/**\n * @param {?} offset\n * @param {?=} decimalPoints\n * @return {?}\n */\nfunction roundOffset(offset, decimalPoints) {\n    if (decimalPoints === void 0) { decimalPoints = 3; }\n    var /** @type {?} */ 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    var /** @type {?} */ styles = {};\n    var /** @type {?} */ allProperties;\n    input.forEach(function (token) {\n        if (token === '*') {\n            allProperties = allProperties || Object.keys(allStyles);\n            allProperties.forEach(function (prop) { styles[prop] = AUTO_STYLE; });\n        }\n        else {\n            copyStyles(/** @type {?} */ (token), false, styles);\n        }\n    });\n    return styles;\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 */\nvar Animation = (function () {\n    /**\n     * @param {?} _driver\n     * @param {?} input\n     */\n    function Animation(_driver, input) {\n        this._driver = _driver;\n        var errors = [];\n        var ast = buildAnimationAst(input, errors);\n        if (errors.length) {\n            var 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    Animation.prototype.buildTimelines = function (element, startingStyles, destinationStyles, options, subInstructions) {\n        var /** @type {?} */ start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) : (startingStyles);\n        var /** @type {?} */ dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) : (destinationStyles);\n        var /** @type {?} */ errors = [];\n        subInstructions = subInstructions || new ElementInstructionMap();\n        var /** @type {?} */ result = buildAnimationTimelines(this._driver, element, this._animationAst, start, dest, options, subInstructions, errors);\n        if (errors.length) {\n            var /** @type {?} */ errorMessage = \"animation building failed:\\n\" + errors.join(\"\\n\");\n            throw new Error(errorMessage);\n        }\n        return result;\n    };\n    return Animation;\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 * @experimental Animation support is experimental.\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 */ var AnimationStyleNormalizer = (function () {\n    function AnimationStyleNormalizer() {\n    }\n    return AnimationStyleNormalizer;\n}());\n/**\n * @experimental Animation support is experimental.\n */\nvar NoopAnimationStyleNormalizer = (function () {\n    function NoopAnimationStyleNormalizer() {\n    }\n    NoopAnimationStyleNormalizer.prototype.normalizePropertyName = function (propertyName, errors) { return propertyName; };\n    NoopAnimationStyleNormalizer.prototype.normalizeStyleValue = function (userProvidedProperty, normalizedProperty, value, errors) {\n        return value;\n    };\n    return NoopAnimationStyleNormalizer;\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 */\nvar browser_es5_WebAnimationsStyleNormalizer = (function (_super) {\n    tslib_es6[\"a\" /* __extends */](WebAnimationsStyleNormalizer, _super);\n    function WebAnimationsStyleNormalizer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    WebAnimationsStyleNormalizer.prototype.normalizePropertyName = function (propertyName, errors) {\n        return dashCaseToCamelCase(propertyName);\n    };\n    /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    WebAnimationsStyleNormalizer.prototype.normalizeStyleValue = function (userProvidedProperty, normalizedProperty, value, errors) {\n        var /** @type {?} */ unit = '';\n        var /** @type {?} */ 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                var /** @type {?} */ 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    return WebAnimationsStyleNormalizer;\n}(AnimationStyleNormalizer));\nvar DIMENSIONAL_PROP_MAP = 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/**\n * @param {?} keys\n * @return {?}\n */\nfunction makeBooleanMap(keys) {\n    var /** @type {?} */ map = {};\n    keys.forEach(function (key) { return map[key] = true; });\n    return map;\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 * @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 {?=} errors\n * @return {?}\n */\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, errors) {\n    return {\n        type: 0 /* TransitionAnimation */,\n        element: element,\n        triggerName: triggerName,\n        isRemovalTransition: isRemovalTransition,\n        fromState: fromState,\n        fromStyles: fromStyles,\n        toState: toState,\n        toStyles: toStyles,\n        timelines: timelines,\n        queriedElements: queriedElements,\n        preStyleProps: preStyleProps,\n        postStyleProps: postStyleProps,\n        errors: errors\n    };\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 */\nvar EMPTY_OBJECT = {};\nvar AnimationTransitionFactory = (function () {\n    /**\n     * @param {?} _triggerName\n     * @param {?} ast\n     * @param {?} _stateStyles\n     */\n    function AnimationTransitionFactory(_triggerName, ast, _stateStyles) {\n        this._triggerName = _triggerName;\n        this.ast = ast;\n        this._stateStyles = _stateStyles;\n    }\n    /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.match = function (currentState, nextState) {\n        return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState);\n    };\n    /**\n     * @param {?} stateName\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.buildStyles = function (stateName, params, errors) {\n        var /** @type {?} */ backupStateStyler = this._stateStyles['*'];\n        var /** @type {?} */ stateStyler = this._stateStyles[stateName];\n        var /** @type {?} */ 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 {?=} currentOptions\n     * @param {?=} nextOptions\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.build = function (driver, element, currentState, nextState, currentOptions, nextOptions, subInstructions) {\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;\n        var /** @type {?} */ currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;\n        var /** @type {?} */ currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n        var /** @type {?} */ nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;\n        var /** @type {?} */ nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n        var /** @type {?} */ queriedElements = new Set();\n        var /** @type {?} */ preStyleMap = new Map();\n        var /** @type {?} */ postStyleMap = new Map();\n        var /** @type {?} */ isRemoval = nextState === 'void';\n        var /** @type {?} */ animationOptions = { params: Object.assign({}, transitionAnimationParams, nextAnimationParams) };\n        var /** @type {?} */ timelines = buildAnimationTimelines(driver, element, this.ast.animation, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n        if (errors.length) {\n            return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, errors);\n        }\n        timelines.forEach(function (tl) {\n            var /** @type {?} */ elm = tl.element;\n            var /** @type {?} */ preProps = getOrSetAsInMap(preStyleMap, elm, {});\n            tl.preStyleProps.forEach(function (prop) { return preProps[prop] = true; });\n            var /** @type {?} */ postProps = getOrSetAsInMap(postStyleMap, elm, {});\n            tl.postStyleProps.forEach(function (prop) { return postProps[prop] = true; });\n            if (elm !== element) {\n                queriedElements.add(elm);\n            }\n        });\n        var /** @type {?} */ queriedElementsList = iteratorToArray(queriedElements.values());\n        return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap);\n    };\n    return AnimationTransitionFactory;\n}());\n/**\n * @param {?} matchFns\n * @param {?} currentState\n * @param {?} nextState\n * @return {?}\n */\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState) {\n    return matchFns.some(function (fn) { return fn(currentState, nextState); });\n}\nvar AnimationStateStyles = (function () {\n    /**\n     * @param {?} styles\n     * @param {?} defaultParams\n     */\n    function AnimationStateStyles(styles, defaultParams) {\n        this.styles = styles;\n        this.defaultParams = defaultParams;\n    }\n    /**\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationStateStyles.prototype.buildStyles = function (params, errors) {\n        var /** @type {?} */ finalStyles = {};\n        var /** @type {?} */ combinedParams = copyObj(this.defaultParams);\n        Object.keys(params).forEach(function (key) {\n            var /** @type {?} */ value = params[key];\n            if (value != null) {\n                combinedParams[key] = value;\n            }\n        });\n        this.styles.styles.forEach(function (value) {\n            if (typeof value !== 'string') {\n                var /** @type {?} */ styleObj_1 = (value);\n                Object.keys(styleObj_1).forEach(function (prop) {\n                    var /** @type {?} */ val = styleObj_1[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    return AnimationStateStyles;\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 * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} ast\n * @return {?}\n */\nfunction buildTrigger(name, ast) {\n    return new AnimationTrigger(name, ast);\n}\n/**\n * \\@experimental Animation support is experimental.\n */\nvar AnimationTrigger = (function () {\n    /**\n     * @param {?} name\n     * @param {?} ast\n     */\n    function AnimationTrigger(name, ast) {\n        var _this = this;\n        this.name = name;\n        this.ast = ast;\n        this.transitionFactories = [];\n        this.states = {};\n        ast.states.forEach(function (ast) {\n            var 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(function (ast) {\n            _this.transitionFactories.push(new AnimationTransitionFactory(name, ast, _this.states));\n        });\n        this.fallbackTransition = createFallbackTransition(name, this.states);\n    }\n    Object.defineProperty(AnimationTrigger.prototype, \"containsQueries\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.ast.queryCount > 0; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    AnimationTrigger.prototype.matchTransition = function (currentState, nextState) {\n        var /** @type {?} */ entry = this.transitionFactories.find(function (f) { return f.match(currentState, nextState); });\n        return entry || null;\n    };\n    /**\n     * @param {?} currentState\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTrigger.prototype.matchStyles = function (currentState, params, errors) {\n        return this.fallbackTransition.buildStyles(currentState, params, errors);\n    };\n    return AnimationTrigger;\n}());\n/**\n * @param {?} triggerName\n * @param {?} states\n * @return {?}\n */\nfunction createFallbackTransition(triggerName, states) {\n    var /** @type {?} */ matchers = [function (fromState, toState) { return true; }];\n    var /** @type {?} */ animation = { type: 2 /* Sequence */, steps: [], options: null };\n    var /** @type {?} */ transition = {\n        type: 1 /* Transition */,\n        animation: animation,\n        matchers: 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 * @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 */\nvar EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();\nvar browser_es5_TimelineAnimationEngine = (function () {\n    /**\n     * @param {?} _driver\n     * @param {?} _normalizer\n     */\n    function TimelineAnimationEngine(_driver, _normalizer) {\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    TimelineAnimationEngine.prototype.register = function (id, metadata) {\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = buildAnimationAst(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     * @param {?} i\n     * @param {?} preStyles\n     * @param {?=} postStyles\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype._buildPlayer = function (i, preStyles, postStyles) {\n        var /** @type {?} */ element = i.element;\n        var /** @type {?} */ keyframes = normalizeKeyframes(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles);\n        return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, []);\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.create = function (id, element, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = this._animations[id];\n        var /** @type {?} */ instructions;\n        var /** @type {?} */ autoStylesMap = new Map();\n        if (ast) {\n            instructions = buildAnimationTimelines(this._driver, element, ast, {}, {}, options, EMPTY_INSTRUCTION_MAP, errors);\n            instructions.forEach(function (inst) {\n                var /** @type {?} */ styles = getOrSetAsInMap(autoStylesMap, inst.element, {});\n                inst.postStyleProps.forEach(function (prop) { return 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(function (styles, element) {\n            Object.keys(styles).forEach(function (prop) { styles[prop] = _this._driver.computeStyle(element, prop, AUTO_STYLE); });\n        });\n        var /** @type {?} */ players = instructions.map(function (i) {\n            var /** @type {?} */ styles = autoStylesMap.get(i.element);\n            return _this._buildPlayer(i, {}, styles);\n        });\n        var /** @type {?} */ player = optimizeGroupPlayer(players);\n        this._playersById[id] = player;\n        player.onDestroy(function () { return _this.destroy(id); });\n        this.players.push(player);\n        return player;\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.destroy = function (id) {\n        var /** @type {?} */ player = this._getPlayer(id);\n        player.destroy();\n        delete this._playersById[id];\n        var /** @type {?} */ index = this.players.indexOf(player);\n        if (index >= 0) {\n            this.players.splice(index, 1);\n        }\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype._getPlayer = function (id) {\n        var /** @type {?} */ 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    TimelineAnimationEngine.prototype.listen = function (id, element, eventName, callback) {\n        // triggerName, fromState, toState are all ignored for timeline animations\n        var /** @type {?} */ baseEvent = makeAnimationEvent(element, '', '', '');\n        listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n        return function () { };\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} command\n     * @param {?} args\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.command = function (id, element, command, args) {\n        if (command == 'register') {\n            this.register(id, /** @type {?} */ (args[0]));\n            return;\n        }\n        if (command == 'create') {\n            var /** @type {?} */ options = ((args[0] || {}));\n            this.create(id, element, options);\n            return;\n        }\n        var /** @type {?} */ 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    return TimelineAnimationEngine;\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 */\nvar QUEUED_CLASSNAME = 'ng-animate-queued';\nvar QUEUED_SELECTOR = '.ng-animate-queued';\nvar DISABLED_CLASSNAME = 'ng-animate-disabled';\nvar DISABLED_SELECTOR = '.ng-animate-disabled';\nvar EMPTY_PLAYER_ARRAY = [];\nvar NULL_REMOVAL_STATE = {\n    namespaceId: '',\n    setForRemoval: null,\n    hasAnimation: false,\n    removedBeforeQueried: false\n};\nvar NULL_REMOVED_QUERIED_STATE = {\n    namespaceId: '',\n    setForRemoval: null,\n    hasAnimation: false,\n    removedBeforeQueried: true\n};\nvar REMOVAL_FLAG = '__ng_removed';\nvar StateValue = (function () {\n    /**\n     * @param {?} input\n     */\n    function StateValue(input) {\n        var isObj = input && input.hasOwnProperty('value');\n        var value = isObj ? input['value'] : input;\n        this.value = normalizeTriggerValue(value);\n        if (isObj) {\n            var options = copyObj(input);\n            delete options['value'];\n            this.options = options;\n        }\n        else {\n            this.options = {};\n        }\n        if (!this.options.params) {\n            this.options.params = {};\n        }\n    }\n    Object.defineProperty(StateValue.prototype, \"params\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return (this.options.params); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} options\n     * @return {?}\n     */\n    StateValue.prototype.absorbOptions = function (options) {\n        var /** @type {?} */ newParams = options.params;\n        if (newParams) {\n            var /** @type {?} */ oldParams_2 = ((this.options.params));\n            Object.keys(newParams).forEach(function (prop) {\n                if (oldParams_2[prop] == null) {\n                    oldParams_2[prop] = newParams[prop];\n                }\n            });\n        }\n    };\n    return StateValue;\n}());\nvar VOID_VALUE = 'void';\nvar DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);\nvar DELETED_STATE_VALUE = new StateValue('DELETED');\nvar AnimationTransitionNamespace = (function () {\n    /**\n     * @param {?} id\n     * @param {?} hostElement\n     * @param {?} _engine\n     */\n    function AnimationTransitionNamespace(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    AnimationTransitionNamespace.prototype.listen = function (element, name, phase, callback) {\n        var _this = this;\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        var /** @type {?} */ listeners = getOrSetAsInMap(this._elementListeners, element, []);\n        var /** @type {?} */ data = { name: name, phase: phase, callback: callback };\n        listeners.push(data);\n        var /** @type {?} */ 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] = null;\n        }\n        return function () {\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(function () {\n                var /** @type {?} */ 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    AnimationTransitionNamespace.prototype.register = function (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     * @param {?} name\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype._getTrigger = function (name) {\n        var /** @type {?} */ 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    AnimationTransitionNamespace.prototype.trigger = function (element, triggerName, value, defaultToFallback) {\n        var _this = this;\n        if (defaultToFallback === void 0) { defaultToFallback = true; }\n        var /** @type {?} */ trigger = this._getTrigger(triggerName);\n        var /** @type {?} */ player = new browser_es5_TransitionAnimationPlayer(this.id, triggerName, element);\n        var /** @type {?} */ 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        var /** @type {?} */ fromState = triggersWithStates[triggerName];\n        var /** @type {?} */ toState = new StateValue(value);\n        var /** @type {?} */ 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        else if (fromState === DELETED_STATE_VALUE) {\n            return player;\n        }\n        var /** @type {?} */ 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                var /** @type {?} */ errors = [];\n                var /** @type {?} */ fromStyles_1 = trigger.matchStyles(fromState.value, fromState.params, errors);\n                var /** @type {?} */ toStyles_1 = trigger.matchStyles(toState.value, toState.params, errors);\n                if (errors.length) {\n                    this._engine.reportError(errors);\n                }\n                else {\n                    this._engine.afterFlush(function () {\n                        eraseStyles(element, fromStyles_1);\n                        setStyles(element, toStyles_1);\n                    });\n                }\n            }\n            return;\n        }\n        var /** @type {?} */ playersOnElement = getOrSetAsInMap(this._engine.playersByElement, element, []);\n        playersOnElement.forEach(function (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        var /** @type {?} */ transition = trigger.matchTransition(fromState.value, toState.value);\n        var /** @type {?} */ 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: element, triggerName: triggerName, transition: transition, fromState: fromState, toState: toState, player: player, isFallbackTransition: isFallbackTransition });\n        if (!isFallbackTransition) {\n            addClass(element, QUEUED_CLASSNAME);\n            player.onStart(function () { removeClass(element, QUEUED_CLASSNAME); });\n        }\n        player.onDone(function () {\n            var /** @type {?} */ index = _this.players.indexOf(player);\n            if (index >= 0) {\n                _this.players.splice(index, 1);\n            }\n            var /** @type {?} */ players = _this._engine.playersByElement.get(element);\n            if (players) {\n                var /** @type {?} */ index_1 = players.indexOf(player);\n                if (index_1 >= 0) {\n                    players.splice(index_1, 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    AnimationTransitionNamespace.prototype.deregister = function (name) {\n        var _this = this;\n        delete this._triggers[name];\n        this._engine.statesByElement.forEach(function (stateMap, element) { delete stateMap[name]; });\n        this._elementListeners.forEach(function (listeners, element) {\n            _this._elementListeners.set(element, listeners.filter(function (entry) { return entry.name != name; }));\n        });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.clearElementCache = function (element) {\n        this._engine.statesByElement.delete(element);\n        this._elementListeners.delete(element);\n        var /** @type {?} */ elementPlayers = this._engine.playersByElement.get(element);\n        if (elementPlayers) {\n            elementPlayers.forEach(function (player) { return player.destroy(); });\n            this._engine.playersByElement.delete(element);\n        }\n    };\n    /**\n     * @param {?} rootElement\n     * @param {?} context\n     * @param {?=} animate\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype._destroyInnerNodes = function (rootElement, context, animate) {\n        var _this = this;\n        if (animate === void 0) { animate = false; }\n        this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true).forEach(function (elm) {\n            if (animate && containsClass(elm, _this._hostClassName)) {\n                var /** @type {?} */ innerNs = _this._engine.namespacesByHostElement.get(elm);\n                // special case for a host element with animations on the same element\n                if (innerNs) {\n                    innerNs.removeNode(elm, context, true);\n                }\n                _this.removeNode(elm, context, true);\n            }\n            else {\n                _this.clearElementCache(elm);\n            }\n        });\n    };\n    /**\n     * @param {?} element\n     * @param {?} context\n     * @param {?=} doNotRecurse\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.removeNode = function (element, context, doNotRecurse) {\n        var _this = this;\n        var /** @type {?} */ engine = this._engine;\n        if (!doNotRecurse && element.childElementCount) {\n            this._destroyInnerNodes(element, context, true);\n        }\n        var /** @type {?} */ triggerStates = engine.statesByElement.get(element);\n        if (triggerStates) {\n            var /** @type {?} */ players_1 = [];\n            Object.keys(triggerStates).forEach(function (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                    var /** @type {?} */ player = _this.trigger(element, triggerName, VOID_VALUE, false);\n                    if (player) {\n                        players_1.push(player);\n                    }\n                }\n            });\n            if (players_1.length) {\n                engine.markElementAsRemoved(this.id, element, true, context);\n                optimizeGroupPlayer(players_1).onDone(function () { return engine.processLeaveNode(element); });\n                return;\n            }\n        }\n        // find the player that is animating and make sure that the\n        // removal is delayed until that player has completed\n        var /** @type {?} */ containsPotentialParentTransition = false;\n        if (engine.totalAnimations) {\n            var /** @type {?} */ 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 fowards and\n            // allow the element to be queued up for animation later.\n            if (currentPlayers && currentPlayers.length) {\n                containsPotentialParentTransition = true;\n            }\n            else {\n                var /** @type {?} */ parent = element;\n                while (parent = parent.parentNode) {\n                    var /** @type {?} */ 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        var /** @type {?} */ listeners = this._elementListeners.get(element);\n        if (listeners) {\n            var /** @type {?} */ visitedTriggers_1 = new Set();\n            listeners.forEach(function (listener) {\n                var /** @type {?} */ triggerName = listener.name;\n                if (visitedTriggers_1.has(triggerName))\n                    return;\n                visitedTriggers_1.add(triggerName);\n                var /** @type {?} */ trigger = _this._triggers[triggerName];\n                var /** @type {?} */ transition = trigger.fallbackTransition;\n                var /** @type {?} */ elementStates = ((engine.statesByElement.get(element)));\n                var /** @type {?} */ fromState = elementStates[triggerName] || DEFAULT_STATE_VALUE;\n                var /** @type {?} */ toState = new StateValue(VOID_VALUE);\n                var /** @type {?} */ player = new browser_es5_TransitionAnimationPlayer(_this.id, triggerName, element);\n                _this._engine.totalQueuedPlayers++;\n                _this._queue.push({\n                    element: element,\n                    triggerName: triggerName,\n                    transition: transition,\n                    fromState: fromState,\n                    toState: toState,\n                    player: player,\n                    isFallbackTransition: true\n                });\n            });\n        }\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            // we do this after the flush has occurred such\n            // that the callbacks can be fired\n            engine.afterFlush(function () { return _this.clearElementCache(element); });\n            engine.destroyInnerAnimations(element);\n            engine._onRemovalComplete(element, context);\n        }\n    };\n    /**\n     * @param {?} element\n     * @param {?} parent\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.insertNode = function (element, parent) { addClass(element, this._hostClassName); };\n    /**\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.drainQueuedTransitions = function (microtaskId) {\n        var _this = this;\n        var /** @type {?} */ instructions = [];\n        this._queue.forEach(function (entry) {\n            var /** @type {?} */ player = entry.player;\n            if (player.destroyed)\n                return;\n            var /** @type {?} */ element = entry.element;\n            var /** @type {?} */ listeners = _this._elementListeners.get(element);\n            if (listeners) {\n                listeners.forEach(function (listener) {\n                    if (listener.name == entry.triggerName) {\n                        var /** @type {?} */ baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n                        ((baseEvent))['_data'] = microtaskId;\n                        listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n                    }\n                });\n            }\n            if (player.markedForDestroy) {\n                _this._engine.afterFlush(function () {\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(function (a, b) {\n            // if depCount == 0 them move to front\n            // otherwise if a contains b then move back\n            var /** @type {?} */ d0 = a.transition.ast.depCount;\n            var /** @type {?} */ 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    AnimationTransitionNamespace.prototype.destroy = function (context) {\n        this.players.forEach(function (p) { return p.destroy(); });\n        this._destroyInnerNodes(this.hostElement, context);\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.elementContainsData = function (element) {\n        var /** @type {?} */ containsData = false;\n        if (this._elementListeners.has(element))\n            containsData = true;\n        containsData =\n            (this._queue.find(function (entry) { return entry.element === element; }) ? true : false) || containsData;\n        return containsData;\n    };\n    return AnimationTransitionNamespace;\n}());\nvar browser_es5_TransitionAnimationEngine = (function () {\n    /**\n     * @param {?} driver\n     * @param {?} _normalizer\n     */\n    function TransitionAnimationEngine(driver, _normalizer) {\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.onRemovalComplete = function (element, context) { };\n    }\n    /**\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._onRemovalComplete = function (element, context) { this.onRemovalComplete(element, context); };\n    Object.defineProperty(TransitionAnimationEngine.prototype, \"queuedPlayers\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            var /** @type {?} */ players = [];\n            this._namespaceList.forEach(function (ns) {\n                ns.players.forEach(function (player) {\n                    if (player.queued) {\n                        players.push(player);\n                    }\n                });\n            });\n            return players;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.createNamespace = function (namespaceId, hostElement) {\n        var /** @type {?} */ 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     * @param {?} ns\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._balanceNamespaceList = function (ns, hostElement) {\n        var /** @type {?} */ limit = this._namespaceList.length - 1;\n        if (limit >= 0) {\n            var /** @type {?} */ found = false;\n            for (var /** @type {?} */ i = limit; i >= 0; i--) {\n                var /** @type {?} */ 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    TransitionAnimationEngine.prototype.register = function (namespaceId, hostElement) {\n        var /** @type {?} */ 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    TransitionAnimationEngine.prototype.registerTrigger = function (namespaceId, name, trigger) {\n        var /** @type {?} */ 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    TransitionAnimationEngine.prototype.destroy = function (namespaceId, context) {\n        var _this = this;\n        if (!namespaceId)\n            return;\n        var /** @type {?} */ ns = this._fetchNamespace(namespaceId);\n        this.afterFlush(function () {\n            _this.namespacesByHostElement.delete(ns.hostElement);\n            delete _this._namespaceLookup[namespaceId];\n            var /** @type {?} */ index = _this._namespaceList.indexOf(ns);\n            if (index >= 0) {\n                _this._namespaceList.splice(index, 1);\n            }\n        });\n        this.afterFlushAnimationsDone(function () { return ns.destroy(context); });\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._fetchNamespace = function (id) { return this._namespaceLookup[id]; };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.trigger = function (namespaceId, element, name, value) {\n        if (isElementNode(element)) {\n            this._fetchNamespace(namespaceId).trigger(element, name, value);\n            return true;\n        }\n        return false;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.insertNode = function (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        var /** @type {?} */ details = (element[REMOVAL_FLAG]);\n        if (details && details.setForRemoval) {\n            details.setForRemoval = false;\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            this._fetchNamespace(namespaceId).insertNode(element, parent);\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    TransitionAnimationEngine.prototype.collectEnterElement = function (element) { this.collectedEnterElements.push(element); };\n    /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.markElementAsDisabled = function (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 {?} context\n     * @param {?=} doNotRecurse\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.removeNode = function (namespaceId, element, context, doNotRecurse) {\n        if (!isElementNode(element)) {\n            this._onRemovalComplete(element, context);\n            return;\n        }\n        var /** @type {?} */ ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n        if (ns) {\n            ns.removeNode(element, context, doNotRecurse);\n        }\n        else {\n            this.markElementAsRemoved(namespaceId, element, false, context);\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?=} hasAnimation\n     * @param {?=} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.markElementAsRemoved = function (namespaceId, element, hasAnimation, context) {\n        this.collectedLeaveElements.push(element);\n        element[REMOVAL_FLAG] = {\n            namespaceId: namespaceId,\n            setForRemoval: context, hasAnimation: 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    TransitionAnimationEngine.prototype.listen = function (namespaceId, element, name, phase, callback) {\n        if (isElementNode(element)) {\n            return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n        }\n        return function () { };\n    };\n    /**\n     * @param {?} entry\n     * @param {?} subTimelines\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildInstruction = function (entry, subTimelines) {\n        return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, entry.fromState.options, entry.toState.options, subTimelines);\n    };\n    /**\n     * @param {?} containerElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.destroyInnerAnimations = function (containerElement) {\n        var _this = this;\n        var /** @type {?} */ elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n        elements.forEach(function (element) {\n            var /** @type {?} */ players = _this.playersByElement.get(element);\n            if (players) {\n                players.forEach(function (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            var /** @type {?} */ stateMap = _this.statesByElement.get(element);\n            if (stateMap) {\n                Object.keys(stateMap).forEach(function (triggerName) { return stateMap[triggerName] = DELETED_STATE_VALUE; });\n            }\n        });\n        if (this.playersByQueriedElement.size == 0)\n            return;\n        elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n        if (elements.length) {\n            elements.forEach(function (element) {\n                var /** @type {?} */ players = _this.playersByQueriedElement.get(element);\n                if (players) {\n                    players.forEach(function (player) { return player.finish(); });\n                }\n            });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.whenRenderingDone = function () {\n        var _this = this;\n        return new Promise(function (resolve) {\n            if (_this.players.length) {\n                return optimizeGroupPlayer(_this.players).onDone(function () { return resolve(); });\n            }\n            else {\n                resolve();\n            }\n        });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.processLeaveNode = function (element) {\n        var _this = this;\n        var /** @type {?} */ details = (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                var /** @type {?} */ 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(function (node) {\n            _this.markElementAsDisabled(element, false);\n        });\n    };\n    /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.flush = function (microtaskId) {\n        var _this = this;\n        if (microtaskId === void 0) { microtaskId = -1; }\n        var /** @type {?} */ players = [];\n        if (this.newHostElements.size) {\n            this.newHostElements.forEach(function (ns, element) { return _this._balanceNamespaceList(ns, element); });\n            this.newHostElements.clear();\n        }\n        if (this._namespaceList.length &&\n            (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n            var /** @type {?} */ cleanupFns = [];\n            try {\n                players = this._flushAnimations(cleanupFns, microtaskId);\n            }\n            finally {\n                for (var /** @type {?} */ i = 0; i < cleanupFns.length; i++) {\n                    cleanupFns[i]();\n                }\n            }\n        }\n        else {\n            for (var /** @type {?} */ i = 0; i < this.collectedLeaveElements.length; i++) {\n                var /** @type {?} */ 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(function (fn) { return 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            var /** @type {?} */ quietFns_1 = this._whenQuietFns;\n            this._whenQuietFns = [];\n            if (players.length) {\n                optimizeGroupPlayer(players).onDone(function () { quietFns_1.forEach(function (fn) { return fn(); }); });\n            }\n            else {\n                quietFns_1.forEach(function (fn) { return fn(); });\n            }\n        }\n    };\n    /**\n     * @param {?} errors\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.reportError = function (errors) {\n        throw new Error(\"Unable to process animations due to the following failed trigger transitions\\n \" + errors.join('\\n'));\n    };\n    /**\n     * @param {?} cleanupFns\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._flushAnimations = function (cleanupFns, microtaskId) {\n        var _this = this;\n        var /** @type {?} */ subTimelines = new ElementInstructionMap();\n        var /** @type {?} */ skippedPlayers = [];\n        var /** @type {?} */ skippedPlayersMap = new Map();\n        var /** @type {?} */ queuedInstructions = [];\n        var /** @type {?} */ queriedElements = new Map();\n        var /** @type {?} */ allPreStyleElements = new Map();\n        var /** @type {?} */ allPostStyleElements = new Map();\n        var /** @type {?} */ disabledElementsSet = new Set();\n        this.disabledNodes.forEach(function (node) {\n            disabledElementsSet.add(node);\n            var /** @type {?} */ nodesThatAreDisabled = _this.driver.query(node, QUEUED_SELECTOR, true);\n            for (var /** @type {?} */ i = 0; i < nodesThatAreDisabled.length; i++) {\n                disabledElementsSet.add(nodesThatAreDisabled[i]);\n            }\n        });\n        var /** @type {?} */ bodyNode = getBodyNode();\n        var /** @type {?} */ allEnterNodes = this.collectedEnterElements.length ?\n            this.collectedEnterElements.filter(createIsRootFilterFn(this.collectedEnterElements)) :\n            [];\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        for (var /** @type {?} */ i = 0; i < allEnterNodes.length; i++) {\n            addClass(allEnterNodes[i], ENTER_CLASSNAME);\n        }\n        var /** @type {?} */ allLeaveNodes = [];\n        var /** @type {?} */ leaveNodesWithoutAnimations = new Set();\n        for (var /** @type {?} */ i = 0; i < this.collectedLeaveElements.length; i++) {\n            var /** @type {?} */ element = this.collectedLeaveElements[i];\n            var /** @type {?} */ details = (element[REMOVAL_FLAG]);\n            if (details && details.setForRemoval) {\n                addClass(element, LEAVE_CLASSNAME);\n                allLeaveNodes.push(element);\n                if (!details.hasAnimation) {\n                    leaveNodesWithoutAnimations.add(element);\n                }\n            }\n        }\n        cleanupFns.push(function () {\n            allEnterNodes.forEach(function (element) { return removeClass(element, ENTER_CLASSNAME); });\n            allLeaveNodes.forEach(function (element) {\n                removeClass(element, LEAVE_CLASSNAME);\n                _this.processLeaveNode(element);\n            });\n        });\n        var /** @type {?} */ allPlayers = [];\n        var /** @type {?} */ erroneousTransitions = [];\n        for (var /** @type {?} */ i = this._namespaceList.length - 1; i >= 0; i--) {\n            var /** @type {?} */ ns = this._namespaceList[i];\n            ns.drainQueuedTransitions(microtaskId).forEach(function (entry) {\n                var /** @type {?} */ player = entry.player;\n                allPlayers.push(player);\n                var /** @type {?} */ element = entry.element;\n                if (!bodyNode || !_this.driver.containsElement(bodyNode, element)) {\n                    player.destroy();\n                    return;\n                }\n                var /** @type {?} */ instruction = ((_this._buildInstruction(entry, subTimelines)));\n                if (instruction.errors && instruction.errors.length) {\n                    erroneousTransitions.push(instruction);\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(function () { return eraseStyles(element, instruction.fromStyles); });\n                    player.onDestroy(function () { return 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(function (tl) { return tl.stretchStartingKeyframe = true; });\n                subTimelines.append(element, instruction.timelines);\n                var /** @type {?} */ tuple = { instruction: instruction, player: player, element: element };\n                queuedInstructions.push(tuple);\n                instruction.queriedElements.forEach(function (element) { return getOrSetAsInMap(queriedElements, element, []).push(player); });\n                instruction.preStyleProps.forEach(function (stringMap, element) {\n                    var /** @type {?} */ props = Object.keys(stringMap);\n                    if (props.length) {\n                        var /** @type {?} */ setVal_1 = ((allPreStyleElements.get(element)));\n                        if (!setVal_1) {\n                            allPreStyleElements.set(element, setVal_1 = new Set());\n                        }\n                        props.forEach(function (prop) { return setVal_1.add(prop); });\n                    }\n                });\n                instruction.postStyleProps.forEach(function (stringMap, element) {\n                    var /** @type {?} */ props = Object.keys(stringMap);\n                    var /** @type {?} */ setVal = ((allPostStyleElements.get(element)));\n                    if (!setVal) {\n                        allPostStyleElements.set(element, setVal = new Set());\n                    }\n                    props.forEach(function (prop) { return setVal.add(prop); });\n                });\n            });\n        }\n        if (erroneousTransitions.length) {\n            var /** @type {?} */ errors_1 = [];\n            erroneousTransitions.forEach(function (instruction) {\n                errors_1.push(\"@\" + instruction.triggerName + \" has failed due to:\\n\"); /** @type {?} */\n                ((instruction.errors)).forEach(function (error) { return errors_1.push(\"- \" + error + \"\\n\"); });\n            });\n            allPlayers.forEach(function (player) { return player.destroy(); });\n            this.reportError(errors_1);\n        }\n        // these can only be detected here since we have a map of all the elements\n        // that have animations attached to them... We use a set here in the event\n        // multiple enter captures on the same element were caught in different\n        // renderer namespaces (e.g. when a @trigger was on a host binding that had *ngIf)\n        var /** @type {?} */ enterNodesWithoutAnimations = new Set();\n        for (var /** @type {?} */ i = 0; i < allEnterNodes.length; i++) {\n            var /** @type {?} */ element = allEnterNodes[i];\n            if (!subTimelines.has(element)) {\n                enterNodesWithoutAnimations.add(element);\n            }\n        }\n        var /** @type {?} */ allPreviousPlayersMap = new Map();\n        var /** @type {?} */ sortedParentElements = [];\n        queuedInstructions.forEach(function (entry) {\n            var /** @type {?} */ element = entry.element;\n            if (subTimelines.has(element)) {\n                sortedParentElements.unshift(element);\n                _this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n            }\n        });\n        skippedPlayers.forEach(function (player) {\n            var /** @type {?} */ element = player.element;\n            var /** @type {?} */ previousPlayers = _this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n            previousPlayers.forEach(function (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        var /** @type {?} */ replaceNodes = allLeaveNodes.filter(function (node) {\n            return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n        });\n        // POST STAGE: fill the * styles\n        var _a = cloakAndComputeStyles(this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE), postStylesMap = _a[0], allLeaveQueriedNodes = _a[1];\n        allLeaveQueriedNodes.forEach(function (node) {\n            if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n                replaceNodes.push(node);\n            }\n        });\n        // PRE STAGE: fill the ! styles\n        var preStylesMap = (allPreStyleElements.size ?\n            cloakAndComputeStyles(this.driver, enterNodesWithoutAnimations, allPreStyleElements, ɵPRE_STYLE) :\n            [new Map()])[0];\n        replaceNodes.forEach(function (node) {\n            var /** @type {?} */ post = postStylesMap.get(node);\n            var /** @type {?} */ pre = preStylesMap.get(node);\n            postStylesMap.set(node, /** @type {?} */ (Object.assign({}, post, pre)));\n        });\n        var /** @type {?} */ rootPlayers = [];\n        var /** @type {?} */ subPlayers = [];\n        queuedInstructions.forEach(function (entry) {\n            var element = entry.element, player = entry.player, instruction = entry.instruction;\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                    skippedPlayers.push(player);\n                    return;\n                }\n                var /** @type {?} */ innerPlayer = _this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n                player.setRealPlayer(innerPlayer);\n                var /** @type {?} */ parentHasPriority = null;\n                for (var /** @type {?} */ i = 0; i < sortedParentElements.length; i++) {\n                    var /** @type {?} */ parent = sortedParentElements[i];\n                    if (parent === element)\n                        break;\n                    if (_this.driver.containsElement(parent, element)) {\n                        parentHasPriority = parent;\n                        break;\n                    }\n                }\n                if (parentHasPriority) {\n                    var /** @type {?} */ parentPlayers = _this.playersByElement.get(parentHasPriority);\n                    if (parentPlayers && parentPlayers.length) {\n                        player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n                    }\n                    skippedPlayers.push(player);\n                }\n                else {\n                    rootPlayers.push(player);\n                }\n            }\n            else {\n                eraseStyles(element, instruction.fromStyles);\n                player.onDestroy(function () { return 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(function (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            var /** @type {?} */ playersForElement = skippedPlayersMap.get(player.element);\n            if (playersForElement && playersForElement.length) {\n                var /** @type {?} */ 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(function (player) {\n            if (player.parentPlayer) {\n                player.parentPlayer.onDestroy(function () { return player.destroy(); });\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 (var /** @type {?} */ i = 0; i < allLeaveNodes.length; i++) {\n            var /** @type {?} */ element = allLeaveNodes[i];\n            var /** @type {?} */ details = (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            var /** @type {?} */ 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                var /** @type {?} */ queriedPlayerResults = queriedElements.get(element);\n                if (queriedPlayerResults && queriedPlayerResults.length) {\n                    players.push.apply(players, queriedPlayerResults);\n                }\n                var /** @type {?} */ queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n                for (var /** @type {?} */ j = 0; j < queriedInnerElements.length; j++) {\n                    var /** @type {?} */ queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n                    if (queriedPlayers && queriedPlayers.length) {\n                        players.push.apply(players, queriedPlayers);\n                    }\n                }\n            }\n            var /** @type {?} */ activePlayers = players.filter(function (p) { return !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(function (player) {\n            _this.players.push(player);\n            player.onDone(function () {\n                player.destroy();\n                var /** @type {?} */ 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    TransitionAnimationEngine.prototype.elementContainsData = function (namespaceId, element) {\n        var /** @type {?} */ containsData = false;\n        var /** @type {?} */ details = (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    TransitionAnimationEngine.prototype.afterFlush = function (callback) { this._flushFns.push(callback); };\n    /**\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.afterFlushAnimationsDone = function (callback) { this._whenQuietFns.push(callback); };\n    /**\n     * @param {?} element\n     * @param {?} isQueriedElement\n     * @param {?=} namespaceId\n     * @param {?=} triggerName\n     * @param {?=} toStateValue\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._getPreviousPlayers = function (element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n        var /** @type {?} */ players = [];\n        if (isQueriedElement) {\n            var /** @type {?} */ queriedElementPlayers = this.playersByQueriedElement.get(element);\n            if (queriedElementPlayers) {\n                players = queriedElementPlayers;\n            }\n        }\n        else {\n            var /** @type {?} */ elementPlayers = this.playersByElement.get(element);\n            if (elementPlayers) {\n                var /** @type {?} */ isRemovalAnimation_1 = !toStateValue || toStateValue == VOID_VALUE;\n                elementPlayers.forEach(function (player) {\n                    if (player.queued)\n                        return;\n                    if (!isRemovalAnimation_1 && player.triggerName != triggerName)\n                        return;\n                    players.push(player);\n                });\n            }\n        }\n        if (namespaceId || triggerName) {\n            players = players.filter(function (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     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._beforeAnimationBuild = function (namespaceId, instruction, allPreviousPlayersMap) {\n        var _this = this;\n        var /** @type {?} */ triggerName = instruction.triggerName;\n        var /** @type {?} */ 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        var /** @type {?} */ targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;\n        var /** @type {?} */ targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;\n        instruction.timelines.map(function (timelineInstruction) {\n            var /** @type {?} */ element = timelineInstruction.element;\n            var /** @type {?} */ isQueriedElement = element !== rootElement;\n            var /** @type {?} */ players = getOrSetAsInMap(allPreviousPlayersMap, element, []);\n            var /** @type {?} */ previousPlayers = _this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n            previousPlayers.forEach(function (player) {\n                var /** @type {?} */ realPlayer = (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     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @param {?} skippedPlayersMap\n     * @param {?} preStylesMap\n     * @param {?} postStylesMap\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildAnimation = function (namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n        var _this = this;\n        var /** @type {?} */ triggerName = instruction.triggerName;\n        var /** @type {?} */ 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        var /** @type {?} */ allQueriedPlayers = [];\n        var /** @type {?} */ allConsumedElements = new Set();\n        var /** @type {?} */ allSubElements = new Set();\n        var /** @type {?} */ allNewPlayers = instruction.timelines.map(function (timelineInstruction) {\n            var /** @type {?} */ element = timelineInstruction.element;\n            allConsumedElements.add(element);\n            // FIXME (matsko): make sure to-be-removed animations are removed properly\n            var /** @type {?} */ details = element[REMOVAL_FLAG];\n            if (details && details.removedBeforeQueried)\n                return new NoopAnimationPlayer();\n            var /** @type {?} */ isQueriedElement = element !== rootElement;\n            var /** @type {?} */ previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY)\n                .map(function (p) { return p.getRealPlayer(); }))\n                .filter(function (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                var /** @type {?} */ pp = (p);\n                return pp.element ? pp.element === element : false;\n            });\n            var /** @type {?} */ preStyles = preStylesMap.get(element);\n            var /** @type {?} */ postStyles = postStylesMap.get(element);\n            var /** @type {?} */ keyframes = normalizeKeyframes(_this.driver, _this._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles);\n            var /** @type {?} */ 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                var /** @type {?} */ wrappedPlayer = new browser_es5_TransitionAnimationPlayer(namespaceId, triggerName, element);\n                wrappedPlayer.setRealPlayer(player);\n                allQueriedPlayers.push(wrappedPlayer);\n            }\n            return player;\n        });\n        allQueriedPlayers.forEach(function (player) {\n            getOrSetAsInMap(_this.playersByQueriedElement, player.element, []).push(player);\n            player.onDone(function () { return deleteOrUnsetInMap(_this.playersByQueriedElement, player.element, player); });\n        });\n        allConsumedElements.forEach(function (element) { return addClass(element, NG_ANIMATING_CLASSNAME); });\n        var /** @type {?} */ player = optimizeGroupPlayer(allNewPlayers);\n        player.onDestroy(function () {\n            allConsumedElements.forEach(function (element) { return 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(function (element) { getOrSetAsInMap(skippedPlayersMap, element, []).push(player); });\n        return player;\n    };\n    /**\n     * @param {?} instruction\n     * @param {?} keyframes\n     * @param {?} previousPlayers\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildPlayer = function (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();\n    };\n    return TransitionAnimationEngine;\n}());\nvar browser_es5_TransitionAnimationPlayer = (function () {\n    /**\n     * @param {?} namespaceId\n     * @param {?} triggerName\n     * @param {?} element\n     */\n    function TransitionAnimationPlayer(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    }\n    Object.defineProperty(TransitionAnimationPlayer.prototype, \"queued\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._containsRealPlayer == false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(TransitionAnimationPlayer.prototype, \"destroyed\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._destroyed; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} player\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.setRealPlayer = function (player) {\n        var _this = this;\n        if (this._containsRealPlayer)\n            return;\n        this._player = player;\n        Object.keys(this._queuedCallbacks).forEach(function (phase) {\n            _this._queuedCallbacks[phase].forEach(function (callback) { return listenOnPlayer(player, phase, undefined, callback); });\n        });\n        this._queuedCallbacks = {};\n        this._containsRealPlayer = true;\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.getRealPlayer = function () { return this._player; };\n    /**\n     * @param {?} name\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype._queueEvent = function (name, callback) {\n        getOrSetAsInMap(this._queuedCallbacks, name, []).push(callback);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.onDone = function (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    TransitionAnimationPlayer.prototype.onStart = function (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    TransitionAnimationPlayer.prototype.onDestroy = function (fn) {\n        if (this.queued) {\n            this._queueEvent('destroy', fn);\n        }\n        this._player.onDestroy(fn);\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.init = function () { this._player.init(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.hasStarted = function () { return this.queued ? false : this._player.hasStarted(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.play = function () { !this.queued && this._player.play(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.pause = function () { !this.queued && this._player.pause(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.restart = function () { !this.queued && this._player.restart(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.finish = function () { this._player.finish(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.destroy = function () {\n        this._destroyed = true;\n        this._player.destroy();\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.reset = function () { !this.queued && this._player.reset(); };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.setPosition = function (p) {\n        if (!this.queued) {\n            this._player.setPosition(p);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.getPosition = function () { return this.queued ? 0 : this._player.getPosition(); };\n    Object.defineProperty(TransitionAnimationPlayer.prototype, \"totalTime\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._player.totalTime; },\n        enumerable: true,\n        configurable: true\n    });\n    return TransitionAnimationPlayer;\n}());\n/**\n * @param {?} map\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\nfunction deleteOrUnsetInMap(map, key, value) {\n    var /** @type {?} */ currentValues;\n    if (map instanceof Map) {\n        currentValues = map.get(key);\n        if (currentValues) {\n            if (currentValues.length) {\n                var /** @type {?} */ 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                var /** @type {?} */ 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    var /** @type {?} */ oldValue = element.style.display;\n    element.style.display = value != null ? value : 'none';\n    return oldValue;\n}\n/**\n * @param {?} driver\n * @param {?} elements\n * @param {?} elementPropsMap\n * @param {?} defaultStyle\n * @return {?}\n */\nfunction cloakAndComputeStyles(driver, elements, elementPropsMap, defaultStyle) {\n    var /** @type {?} */ cloakVals = [];\n    elements.forEach(function (element) { return cloakVals.push(cloakElement(element)); });\n    var /** @type {?} */ valuesMap = new Map();\n    var /** @type {?} */ failedElements = [];\n    elementPropsMap.forEach(function (props, element) {\n        var /** @type {?} */ styles = {};\n        props.forEach(function (prop) {\n            var /** @type {?} */ 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    var /** @type {?} */ i = 0;\n    elements.forEach(function (element) { return cloakElement(element, cloakVals[i++]); });\n    return [valuesMap, failedElements];\n}\n/**\n * @param {?} nodes\n * @return {?}\n */\nfunction createIsRootFilterFn(nodes) {\n    var /** @type {?} */ nodeSet = new Set(nodes);\n    var /** @type {?} */ knownRootContainer = new Set();\n    var /** @type {?} */ isRoot;\n    isRoot = function (node) {\n        if (!node)\n            return true;\n        if (nodeSet.has(node.parentNode))\n            return false;\n        if (knownRootContainer.has(node.parentNode))\n            return true;\n        if (isRoot(node.parentNode)) {\n            knownRootContainer.add(node);\n            return true;\n        }\n        return false;\n    };\n    return isRoot;\n}\nvar 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        var /** @type {?} */ 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        var /** @type {?} */ 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        var /** @type {?} */ classes = element[CLASSES_CACHE_KEY];\n        if (classes) {\n            delete classes[className];\n        }\n    }\n}\n/**\n * @return {?}\n */\nfunction getBodyNode() {\n    if (typeof document != 'undefined') {\n        return document.body;\n    }\n    return null;\n}\n/**\n * @param {?} engine\n * @param {?} element\n * @param {?} players\n * @return {?}\n */\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n    optimizeGroupPlayer(players).onDone(function () { return engine.processLeaveNode(element); });\n}\n/**\n * @param {?} players\n * @return {?}\n */\nfunction flattenGroupPlayers(players) {\n    var /** @type {?} */ 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 (var /** @type {?} */ i = 0; i < players.length; i++) {\n        var /** @type {?} */ player = players[i];\n        if (player instanceof AnimationGroupPlayer) {\n            _flattenGroupPlayersRecur(player.players, finalPlayers);\n        }\n        else {\n            finalPlayers.push(/** @type {?} */ (player));\n        }\n    }\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction objEquals(a, b) {\n    var /** @type {?} */ k1 = Object.keys(a);\n    var /** @type {?} */ k2 = Object.keys(b);\n    if (k1.length != k2.length)\n        return false;\n    for (var /** @type {?} */ i = 0; i < k1.length; i++) {\n        var /** @type {?} */ 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    var /** @type {?} */ postEntry = allPostStyleElements.get(element);\n    if (!postEntry)\n        return false;\n    var /** @type {?} */ preEntry = allPreStyleElements.get(element);\n    if (preEntry) {\n        postEntry.forEach(function (data) { return ((preEntry)).add(data); });\n    }\n    else {\n        allPreStyleElements.set(element, postEntry);\n    }\n    allPostStyleElements.delete(element);\n    return true;\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 */\nvar AnimationEngine = (function () {\n    /**\n     * @param {?} driver\n     * @param {?} normalizer\n     */\n    function AnimationEngine(driver, normalizer) {\n        var _this = this;\n        this._triggerCache = {};\n        this.onRemovalComplete = function (element, context) { };\n        this._transitionEngine = new browser_es5_TransitionAnimationEngine(driver, normalizer);\n        this._timelineEngine = new browser_es5_TimelineAnimationEngine(driver, normalizer);\n        this._transitionEngine.onRemovalComplete = function (element, context) { return _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    AnimationEngine.prototype.registerTrigger = function (componentId, namespaceId, hostElement, name, metadata) {\n        var /** @type {?} */ cacheKey = componentId + '-' + name;\n        var /** @type {?} */ trigger = this._triggerCache[cacheKey];\n        if (!trigger) {\n            var /** @type {?} */ errors = [];\n            var /** @type {?} */ ast = (buildAnimationAst(/** @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    AnimationEngine.prototype.register = function (namespaceId, hostElement) {\n        this._transitionEngine.register(namespaceId, hostElement);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationEngine.prototype.destroy = function (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    AnimationEngine.prototype.onInsert = function (namespaceId, element, parent, insertBefore) {\n        this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationEngine.prototype.onRemove = function (namespaceId, element, context) {\n        this._transitionEngine.removeNode(namespaceId, element, context);\n    };\n    /**\n     * @param {?} element\n     * @param {?} disable\n     * @return {?}\n     */\n    AnimationEngine.prototype.disableAnimations = function (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    AnimationEngine.prototype.process = function (namespaceId, element, property, value) {\n        if (property.charAt(0) == '@') {\n            var _a = parseTimelineCommand(property), id = _a[0], action = _a[1];\n            var /** @type {?} */ args = (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    AnimationEngine.prototype.listen = function (namespaceId, element, eventName, eventPhase, callback) {\n        // @@listen\n        if (eventName.charAt(0) == '@') {\n            var _a = parseTimelineCommand(eventName), id = _a[0], action = _a[1];\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    AnimationEngine.prototype.flush = function (microtaskId) {\n        if (microtaskId === void 0) { microtaskId = -1; }\n        this._transitionEngine.flush(microtaskId);\n    };\n    Object.defineProperty(AnimationEngine.prototype, \"players\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return ((this._transitionEngine.players))\n                .concat(/** @type {?} */ (this._timelineEngine.players));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    AnimationEngine.prototype.whenRenderingDone = function () { return this._transitionEngine.whenRenderingDone(); };\n    return AnimationEngine;\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 */\nvar WebAnimationsPlayer = (function () {\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} options\n     * @param {?=} previousPlayers\n     */\n    function WebAnimationsPlayer(element, keyframes, options, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        var _this = this;\n        this.element = element;\n        this.keyframes = keyframes;\n        this.options = options;\n        this.previousPlayers = previousPlayers;\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.previousStyles = {};\n        this.currentSnapshot = {};\n        this._duration = options['duration'];\n        this._delay = options['delay'] || 0;\n        this.time = this._duration + this._delay;\n        if (allowPreviousPlayerStylesMerge(this._duration, this._delay)) {\n            previousPlayers.forEach(function (player) {\n                var styles = player.currentSnapshot;\n                Object.keys(styles).forEach(function (prop) { return _this.previousStyles[prop] = styles[prop]; });\n            });\n        }\n    }\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._onFinish = function () {\n        if (!this._finished) {\n            this._finished = true;\n            this._onDoneFns.forEach(function (fn) { return fn(); });\n            this._onDoneFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.init = function () {\n        this._buildPlayer();\n        this._preparePlayerBeforeStart();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._buildPlayer = function () {\n        var _this = this;\n        if (this._initialized)\n            return;\n        this._initialized = true;\n        var /** @type {?} */ keyframes = this.keyframes.map(function (styles) { return copyStyles(styles, false); });\n        var /** @type {?} */ previousStyleProps = Object.keys(this.previousStyles);\n        if (previousStyleProps.length) {\n            var /** @type {?} */ startingKeyframe_1 = keyframes[0];\n            var /** @type {?} */ missingStyleProps_1 = [];\n            previousStyleProps.forEach(function (prop) {\n                if (!startingKeyframe_1.hasOwnProperty(prop)) {\n                    missingStyleProps_1.push(prop);\n                }\n                startingKeyframe_1[prop] = _this.previousStyles[prop];\n            });\n            if (missingStyleProps_1.length) {\n                var /** @type {?} */ self_1 = this;\n                var _loop_1 = function () {\n                    var /** @type {?} */ kf = keyframes[i];\n                    missingStyleProps_1.forEach(function (prop) {\n                        kf[prop] = _computeStyle(self_1.element, prop);\n                    });\n                };\n                // tslint:disable-next-line\n                for (var /** @type {?} */ i = 1; i < keyframes.length; i++) {\n                    _loop_1();\n                }\n            }\n        }\n        this._player = this._triggerWebAnimation(this.element, keyframes, this.options);\n        this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : {};\n        this._player.addEventListener('finish', function () { return _this._onFinish(); });\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._preparePlayerBeforeStart = function () {\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._player.pause();\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} options\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._triggerWebAnimation = function (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 (element['animate'](keyframes, options));\n    };\n    Object.defineProperty(WebAnimationsPlayer.prototype, \"domPlayer\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._player; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onStart = function (fn) { this._onStartFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onDone = function (fn) { this._onDoneFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onDestroy = function (fn) { this._onDestroyFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.play = function () {\n        this._buildPlayer();\n        if (!this.hasStarted()) {\n            this._onStartFns.forEach(function (fn) { return fn(); });\n            this._onStartFns = [];\n            this._started = true;\n        }\n        this._player.play();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.pause = function () {\n        this.init();\n        this._player.pause();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.finish = function () {\n        this.init();\n        this._onFinish();\n        this._player.finish();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.reset = function () {\n        this._resetDomPlayerState();\n        this._destroyed = false;\n        this._finished = false;\n        this._started = false;\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._resetDomPlayerState = function () {\n        if (this._player) {\n            this._player.cancel();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.restart = function () {\n        this.reset();\n        this.play();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.hasStarted = function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.destroy = function () {\n        if (!this._destroyed) {\n            this._destroyed = true;\n            this._resetDomPlayerState();\n            this._onFinish();\n            this._onDestroyFns.forEach(function (fn) { return fn(); });\n            this._onDestroyFns = [];\n        }\n    };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.setPosition = function (p) { this._player.currentTime = p * this.time; };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.getPosition = function () { return this._player.currentTime / this.time; };\n    Object.defineProperty(WebAnimationsPlayer.prototype, \"totalTime\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._delay + this._duration; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.beforeDestroy = function () {\n        var _this = this;\n        var /** @type {?} */ styles = {};\n        if (this.hasStarted()) {\n            Object.keys(this._finalKeyframe).forEach(function (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    return WebAnimationsPlayer;\n}());\n/**\n * @param {?} element\n * @param {?} prop\n * @return {?}\n */\nfunction _computeStyle(element, prop) {\n    return ((window.getComputedStyle(element)))[prop];\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 */\nvar WebAnimationsDriver = (function () {\n    function WebAnimationsDriver() {\n    }\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.matchesElement = function (element, selector) {\n        return matchesElement(element, selector);\n    };\n    /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.containsElement = function (elm1, elm2) { return containsElement(elm1, elm2); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.query = function (element, selector, multi) {\n        return invokeQuery(element, selector, multi);\n    };\n    /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.computeStyle = function (element, prop, defaultValue) {\n        return (((window.getComputedStyle(element)))[prop]);\n    };\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.animate = function (element, keyframes, duration, delay, easing, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        var /** @type {?} */ fill = delay == 0 ? 'both' : 'forwards';\n        var /** @type {?} */ playerOptions = { duration: duration, delay: delay, fill: 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        var /** @type {?} */ previousWebAnimationPlayers = (previousPlayers.filter(function (player) { return player instanceof WebAnimationsPlayer; }));\n        return new WebAnimationsPlayer(element, keyframes, playerOptions, previousWebAnimationPlayers);\n    };\n    return WebAnimationsDriver;\n}());\n/**\n * @return {?}\n */\nfunction supportsWebAnimations() {\n    return typeof Element !== 'undefined' && typeof ((Element)).prototype['animate'] === 'function';\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 * @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 * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\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 * @module\n * @description\n * Entry point for all public APIs of the animation package.\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\n//# sourceMappingURL=browser.es5.js.map\n\n// CONCATENATED MODULE: ./node_modules/@angular/platform-browser/@angular/platform-browser/animations.es5.js\n\n/**\n * @license Angular v4.4.7\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\n\n\n\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 */\nvar animations_es5_BrowserAnimationBuilder = (function (_super) {\n    tslib_es6[\"a\" /* __extends */](BrowserAnimationBuilder, _super);\n    /**\n     * @param {?} rootRenderer\n     * @param {?} doc\n     */\n    function BrowserAnimationBuilder(rootRenderer, doc) {\n        var _this = _super.call(this) || this;\n        _this._nextAnimationId = 0;\n        var typeData = {\n            id: '0',\n            encapsulation: core_es5[\"ViewEncapsulation\"].None,\n            styles: [],\n            data: { animation: [] }\n        };\n        _this._renderer = rootRenderer.createRenderer(doc.body, typeData);\n        return _this;\n    }\n    /**\n     * @param {?} animation\n     * @return {?}\n     */\n    BrowserAnimationBuilder.prototype.build = function (animation) {\n        var /** @type {?} */ id = this._nextAnimationId.toString();\n        this._nextAnimationId++;\n        var /** @type {?} */ entry = Array.isArray(animation) ? sequence(animation) : animation;\n        issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n        return new animations_es5_BrowserAnimationFactory(id, this._renderer);\n    };\n    return BrowserAnimationBuilder;\n}(AnimationBuilder));\nanimations_es5_BrowserAnimationBuilder.decorators = [\n    { type: core_es5[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nanimations_es5_BrowserAnimationBuilder.ctorParameters = function () { return [\n    { type: core_es5[\"RendererFactory2\"], },\n    { type: undefined, decorators: [{ type: core_es5[\"Inject\"], args: [platform_browser_es5[\"b\" /* DOCUMENT */],] },] },\n]; };\nvar animations_es5_BrowserAnimationFactory = (function (_super) {\n    tslib_es6[\"a\" /* __extends */](BrowserAnimationFactory, _super);\n    /**\n     * @param {?} _id\n     * @param {?} _renderer\n     */\n    function BrowserAnimationFactory(_id, _renderer) {\n        var _this = _super.call(this) || this;\n        _this._id = _id;\n        _this._renderer = _renderer;\n        return _this;\n    }\n    /**\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    BrowserAnimationFactory.prototype.create = function (element, options) {\n        return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n    };\n    return BrowserAnimationFactory;\n}(AnimationFactory));\nvar RendererAnimationPlayer = (function () {\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} options\n     * @param {?} _renderer\n     */\n    function RendererAnimationPlayer(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     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype._listen = function (eventName, callback) {\n        return this._renderer.listen(this.element, \"@@\" + this.id + \":\" + eventName, callback);\n    };\n    /**\n     * @param {?} command\n     * @param {...?} args\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype._command = function (command) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        return issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onDone = function (fn) { this._listen('done', fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onStart = function (fn) { this._listen('start', fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onDestroy = function (fn) { this._listen('destroy', fn); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.init = function () { this._command('init'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.hasStarted = function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.play = function () {\n        this._command('play');\n        this._started = true;\n    };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.pause = function () { this._command('pause'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.restart = function () { this._command('restart'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.finish = function () { this._command('finish'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.destroy = function () { this._command('destroy'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.reset = function () { this._command('reset'); };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.setPosition = function (p) { this._command('setPosition', p); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.getPosition = function () { return 0; };\n    return RendererAnimationPlayer;\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 * @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 */\nvar ANIMATION_PREFIX = '@';\nvar DISABLE_ANIMATIONS_FLAG = '@.disabled';\nvar AnimationRendererFactory = (function () {\n    /**\n     * @param {?} delegate\n     * @param {?} engine\n     * @param {?} _zone\n     */\n    function AnimationRendererFactory(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        engine.onRemovalComplete = function (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    AnimationRendererFactory.prototype.createRenderer = function (hostElement, type) {\n        var _this = this;\n        var /** @type {?} */ EMPTY_NAMESPACE_ID = '';\n        // cache the delegates to find out which cached delegate can\n        // be used by which cached renderer\n        var /** @type {?} */ delegate = this.delegate.createRenderer(hostElement, type);\n        if (!hostElement || !type || !type.data || !type.data['animation']) {\n            var /** @type {?} */ 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        var /** @type {?} */ componentId = type.id;\n        var /** @type {?} */ namespaceId = type.id + '-' + this._currentId;\n        this._currentId++;\n        this.engine.register(namespaceId, hostElement);\n        var /** @type {?} */ animationTriggers = (type.data['animation']);\n        animationTriggers.forEach(function (trigger) { return _this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger); });\n        return new animations_es5_AnimationRenderer(this, namespaceId, delegate, this.engine);\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.begin = function () {\n        this._cdRecurDepth++;\n        if (this.delegate.begin) {\n            this.delegate.begin();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype._scheduleCountTask = function () {\n        var _this = this;\n        Zone.current.scheduleMicroTask('incremenet the animation microtask', function () { return _this._microtaskId++; });\n    };\n    /**\n     * @param {?} count\n     * @param {?} fn\n     * @param {?} data\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.scheduleListenerCallback = function (count, fn, data) {\n        var _this = this;\n        if (count >= 0 && count < this._microtaskId) {\n            this._zone.run(function () { return fn(data); });\n            return;\n        }\n        if (this._animationCallbacksBuffer.length == 0) {\n            Promise.resolve(null).then(function () {\n                _this._zone.run(function () {\n                    _this._animationCallbacksBuffer.forEach(function (tuple) {\n                        var fn = tuple[0], data = tuple[1];\n                        fn(data);\n                    });\n                    _this._animationCallbacksBuffer = [];\n                });\n            });\n        }\n        this._animationCallbacksBuffer.push([fn, data]);\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.end = function () {\n        var _this = this;\n        this._cdRecurDepth--;\n        // this is to prevent animations from running twice when an inner\n        // component does CD when a parent component insted has inserted it\n        if (this._cdRecurDepth == 0) {\n            this._zone.runOutsideAngular(function () {\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    AnimationRendererFactory.prototype.whenRenderingDone = function () { return this.engine.whenRenderingDone(); };\n    return AnimationRendererFactory;\n}());\nAnimationRendererFactory.decorators = [\n    { type: core_es5[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nAnimationRendererFactory.ctorParameters = function () { return [\n    { type: core_es5[\"RendererFactory2\"], },\n    { type: AnimationEngine, },\n    { type: core_es5[\"NgZone\"], },\n]; };\nvar BaseAnimationRenderer = (function () {\n    /**\n     * @param {?} namespaceId\n     * @param {?} delegate\n     * @param {?} engine\n     */\n    function BaseAnimationRenderer(namespaceId, delegate, engine) {\n        this.namespaceId = namespaceId;\n        this.delegate = delegate;\n        this.engine = engine;\n        this.destroyNode = this.delegate.destroyNode ? function (n) { return delegate.destroyNode(n); } : null;\n    }\n    Object.defineProperty(BaseAnimationRenderer.prototype, \"data\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.delegate.data; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.destroy = function () {\n        this.engine.destroy(this.namespaceId, this.delegate);\n        this.delegate.destroy();\n    };\n    /**\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createElement = function (name, namespace) {\n        return this.delegate.createElement(name, namespace);\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createComment = function (value) { return this.delegate.createComment(value); };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createText = function (value) { return this.delegate.createText(value); };\n    /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.appendChild = function (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    BaseAnimationRenderer.prototype.insertBefore = function (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     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeChild = function (parent, oldChild) {\n        this.engine.onRemove(this.namespaceId, oldChild, this.delegate);\n    };\n    /**\n     * @param {?} selectorOrNode\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.selectRootElement = function (selectorOrNode) { return this.delegate.selectRootElement(selectorOrNode); };\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.parentNode = function (node) { return this.delegate.parentNode(node); };\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.nextSibling = function (node) { return this.delegate.nextSibling(node); };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setAttribute = function (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    BaseAnimationRenderer.prototype.removeAttribute = function (el, name, namespace) {\n        this.delegate.removeAttribute(el, name, namespace);\n    };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.addClass = function (el, name) { this.delegate.addClass(el, name); };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeClass = function (el, name) { this.delegate.removeClass(el, name); };\n    /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?} value\n     * @param {?=} flags\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setStyle = function (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    BaseAnimationRenderer.prototype.removeStyle = function (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    BaseAnimationRenderer.prototype.setProperty = function (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    BaseAnimationRenderer.prototype.setValue = function (node, value) { this.delegate.setValue(node, value); };\n    /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.listen = function (target, eventName, callback) {\n        return this.delegate.listen(target, eventName, callback);\n    };\n    /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.disableAnimations = function (element, value) {\n        this.engine.disableAnimations(element, value);\n    };\n    return BaseAnimationRenderer;\n}());\nvar animations_es5_AnimationRenderer = (function (_super) {\n    tslib_es6[\"a\" /* __extends */](AnimationRenderer, _super);\n    /**\n     * @param {?} factory\n     * @param {?} namespaceId\n     * @param {?} delegate\n     * @param {?} engine\n     */\n    function AnimationRenderer(factory, namespaceId, delegate, engine) {\n        var _this = _super.call(this, namespaceId, delegate, engine) || this;\n        _this.factory = factory;\n        _this.namespaceId = namespaceId;\n        return _this;\n    }\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    AnimationRenderer.prototype.setProperty = function (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    AnimationRenderer.prototype.listen = function (target, eventName, callback) {\n        var _this = this;\n        if (eventName.charAt(0) == ANIMATION_PREFIX) {\n            var /** @type {?} */ element = resolveElementFromTarget(target);\n            var /** @type {?} */ name = eventName.substr(1);\n            var /** @type {?} */ phase = '';\n            // @listener.phase is for trigger animation callbacks\n            // @@listener is for animation builder callbacks\n            if (name.charAt(0) != ANIMATION_PREFIX) {\n                _a = parseTriggerCallbackName(name), name = _a[0], phase = _a[1];\n            }\n            return this.engine.listen(this.namespaceId, element, name, phase, function (event) {\n                var /** @type {?} */ countId = ((event))['_data'] || -1;\n                _this.factory.scheduleListenerCallback(countId, callback, event);\n            });\n        }\n        return this.delegate.listen(target, eventName, callback);\n        var _a;\n    };\n    return AnimationRenderer;\n}(BaseAnimationRenderer));\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    var /** @type {?} */ dotIndex = triggerName.indexOf('.');\n    var /** @type {?} */ trigger = triggerName.substring(0, dotIndex);\n    var /** @type {?} */ phase = triggerName.substr(dotIndex + 1);\n    return [trigger, phase];\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 */\nvar animations_es5_InjectableAnimationEngine = (function (_super) {\n    tslib_es6[\"a\" /* __extends */](InjectableAnimationEngine, _super);\n    /**\n     * @param {?} driver\n     * @param {?} normalizer\n     */\n    function InjectableAnimationEngine(driver, normalizer) {\n        return _super.call(this, driver, normalizer) || this;\n    }\n    return InjectableAnimationEngine;\n}(AnimationEngine));\nanimations_es5_InjectableAnimationEngine.decorators = [\n    { type: core_es5[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nanimations_es5_InjectableAnimationEngine.ctorParameters = function () { return [\n    { type: AnimationDriver, },\n    { type: AnimationStyleNormalizer, },\n]; };\n/**\n * @return {?}\n */\nfunction instantiateSupportedAnimationDriver() {\n    if (supportsWebAnimations()) {\n        return new WebAnimationsDriver();\n    }\n    return new browser_es5_NoopAnimationDriver();\n}\n/**\n * @return {?}\n */\nfunction instantiateDefaultStyleNormalizer() {\n    return new browser_es5_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}\nvar SHARED_ANIMATION_PROVIDERS = [\n    { provide: AnimationBuilder, useClass: animations_es5_BrowserAnimationBuilder },\n    { provide: AnimationStyleNormalizer, useFactory: instantiateDefaultStyleNormalizer },\n    { provide: AnimationEngine, useClass: animations_es5_InjectableAnimationEngine }, {\n        provide: core_es5[\"RendererFactory2\"],\n        useFactory: instantiateRendererFactory,\n        deps: [platform_browser_es5[\"d\" /* ɵDomRendererFactory2 */], AnimationEngine, core_es5[\"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 */\nvar BROWSER_ANIMATIONS_PROVIDERS = [\n    { provide: AnimationDriver, useFactory: instantiateSupportedAnimationDriver }\n].concat(SHARED_ANIMATION_PROVIDERS);\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 */\nvar BROWSER_NOOP_ANIMATIONS_PROVIDERS = [{ provide: AnimationDriver, useClass: browser_es5_NoopAnimationDriver }].concat(SHARED_ANIMATION_PROVIDERS);\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 * \\@experimental Animation support is experimental.\n */\nvar BrowserAnimationsModule = (function () {\n    function BrowserAnimationsModule() {\n    }\n    return BrowserAnimationsModule;\n}());\nBrowserAnimationsModule.decorators = [\n    { type: core_es5[\"NgModule\"], args: [{\n                exports: [platform_browser_es5[\"a\" /* BrowserModule */]],\n                providers: BROWSER_ANIMATIONS_PROVIDERS,\n            },] },\n];\n/**\n * @nocollapse\n */\nBrowserAnimationsModule.ctorParameters = function () { return []; };\n/**\n * \\@experimental Animation support is experimental.\n */\nvar NoopAnimationsModule = (function () {\n    function NoopAnimationsModule() {\n    }\n    return NoopAnimationsModule;\n}());\nNoopAnimationsModule.decorators = [\n    { type: core_es5[\"NgModule\"], args: [{\n                exports: [platform_browser_es5[\"a\" /* BrowserModule */]],\n                providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,\n            },] },\n];\n/**\n * @nocollapse\n */\nNoopAnimationsModule.ctorParameters = function () { return []; };\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 * @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 * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\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 * @module\n * @description\n * Entry point for all public APIs of the animation package.\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\n//# sourceMappingURL=animations.es5.js.map\n\n// EXTERNAL MODULE: ./node_modules/@angular/router/@angular/router.es5.js\nvar router_es5 = __webpack_require__(2);\n\n// EXTERNAL MODULE: ./node_modules/@angularclass/hmr/dist/index.js\nvar dist = __webpack_require__(1338);\nvar dist_default = /*#__PURE__*/__webpack_require__.n(dist);\n\n// EXTERNAL MODULE: ./node_modules/angular-l10n/modules/angular-l10n.es5.js\nvar angular_l10n_es5 = __webpack_require__(3);\n\n// EXTERNAL MODULE: ./node_modules/angular2-flash-messages/index.js\nvar angular2_flash_messages = __webpack_require__(45);\nvar angular2_flash_messages_default = /*#__PURE__*/__webpack_require__.n(angular2_flash_messages);\n\n// EXTERNAL MODULE: ./node_modules/@angular/common/@angular/common.es5.js\nvar common_es5 = __webpack_require__(5);\n\n// CONCATENATED MODULE: ./src/components/to.top.component.ts\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar to_top_component_ViewToTop = (function () {\n    function ViewToTop() {\n    }\n    ViewToTop = __decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'view-to-top',\n            host: {\n                'data-click': 'scroll-top',\n                'class': 'btn btn-icon btn-circle btn-success btn-scroll-to-top fade'\n            },\n            template: '<i class=\"fa fa-angle-up\"></i>',\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        })\n    ], ViewToTop);\n    return ViewToTop;\n}());\n\n\n// CONCATENATED MODULE: ./src/components/index.ts\n\nvar VIEW_COMPONENTS = [\n    to_top_component_ViewToTop\n];\n\n// EXTERNAL MODULE: ./src/service/auth.service.ts\nvar auth_service = __webpack_require__(28);\n\n// CONCATENATED MODULE: ./src/service/auth.guard.service.ts\nvar auth_guard_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar auth_guard_service_AuthGuard = (function () {\n    function AuthGuard(auth, router) {\n        this.auth = auth;\n        this.router = router;\n    }\n    AuthGuard.prototype.canActivate = function (route, state) {\n        if (this.auth.logged)\n            return true;\n        this.auth.redirectUrl = state.url;\n        console.warn('AuthGuard: do login first, and then redirect to ' + this.auth.redirectUrl + ' !');\n        this.router.navigate(['login']);\n        return false;\n    };\n    var _a, _b;\n    AuthGuard = auth_guard_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _b || Object])\n    ], AuthGuard);\n    return AuthGuard;\n}());\n\n\n// CONCATENATED MODULE: ./src/app/shared/shared.module.ts\nvar shared_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar SHARED_MODULES = [\n    http_es5[\"c\" /* HttpModule */],\n    common_es5[\"CommonModule\"],\n    forms_es5[\"FormsModule\"],\n];\nvar shared_module_SharedModule = (function () {\n    function SharedModule() {\n    }\n    SharedModule = shared_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [SHARED_MODULES],\n            exports: [SHARED_MODULES]\n        })\n    ], SharedModule);\n    return SharedModule;\n}());\n\n\n// EXTERNAL MODULE: ./src/service/payments.service.ts\nvar payments_service = __webpack_require__(63);\n\n// EXTERNAL MODULE: ./src/service/subscription.service.ts\nvar subscription_service = __webpack_require__(64);\n\n// EXTERNAL MODULE: ./src/service/product.service.ts\nvar product_service = __webpack_require__(46);\n\n// EXTERNAL MODULE: ./src/service/tab.service.ts\nvar tab_service = __webpack_require__(90);\n\n// CONCATENATED MODULE: ./src/module/account/account.view.ts\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar account_view___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar account_view___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar account_view_AccountView = (function (_super) {\n    __extends(AccountView, _super);\n    function AccountView(router, cdr, tabService, locale, translation) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.router = router;\n        _this.cdr = cdr;\n        _this.tabService = tabService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.configureTabs();\n        _this.tabService.onNavigatedTo$.subscribe(function (tabId) { return _this.selectTab(tabId); });\n        _this.selectTab(0);\n        return _this;\n    }\n    AccountView.prototype.selectTab = function (tabId) {\n        var _this = this;\n        this.tabs.forEach(function (tab, index) {\n            if (tab.id == tabId) {\n                tab.active = true;\n                _this.currentTabIndex = index;\n            }\n            else\n                tab.active = false;\n        });\n        this.cdr.markForCheck();\n    };\n    AccountView.prototype.configureTabs = function () {\n        var subscriptionTab = {\n            id: 0,\n            active: false,\n            title: this.translation.translate('ACCOUNT.SUBSCRIPTIONS.TITLE'),\n            route: ['admin', 'account', 'subscriptions']\n        };\n        var detailsTab = {\n            id: 1,\n            active: false,\n            title: this.translation.translate('ACCOUNT.DETAILS.TITLE'),\n            route: ['admin', 'account', 'details']\n        };\n        var receiptsTab = {\n            id: 2,\n            active: false,\n            title: this.translation.translate('ACCOUNT.INVOICES.TITLE'),\n            route: ['admin', 'account', 'invoices']\n        };\n        var paymentsTab = {\n            id: 3,\n            active: false,\n            title: this.translation.translate('ACCOUNT.PAYMENTS.TITLE'),\n            route: ['admin', 'account', 'payments']\n        };\n        this.tabs = [detailsTab, subscriptionTab, receiptsTab, paymentsTab];\n    };\n    AccountView.prototype.onTabClick = function (tabIndex) {\n        if (this.currentTabIndex == tabIndex)\n            return;\n        this.currentTabIndex = tabIndex;\n        this.tabs.forEach(function (tab) {\n            tab.active = false;\n        });\n        this.tabs[tabIndex].active = true;\n        this.router.navigate(this.tabs[tabIndex].route);\n    };\n    var _a, _b, _c, _d, _e;\n    AccountView = account_view___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'account-view',\n            template: __webpack_require__(1346),\n            styles: [__webpack_require__(1347)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        account_view___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object, typeof (_c = typeof tab_service[\"a\" /* TabService */] !== \"undefined\" && tab_service[\"a\" /* TabService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _d || Object, typeof (_e = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _e || Object])\n    ], AccountView);\n    return AccountView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// EXTERNAL MODULE: ./src/module/account/subscriptions/account.subscriptions.view.ts\nvar account_subscriptions_view = __webpack_require__(1348);\n\n// EXTERNAL MODULE: ./node_modules/rxjs/Observable.js\nvar Observable = __webpack_require__(1);\nvar Observable_default = /*#__PURE__*/__webpack_require__.n(Observable);\n\n// EXTERNAL MODULE: ./src/service/account.service.ts\nvar account_service = __webpack_require__(65);\n\n// EXTERNAL MODULE: ./src/service/exception.service.ts\nvar exception_service = __webpack_require__(35);\n\n// EXTERNAL MODULE: ./src/service/api.service.ts\nvar api_service = __webpack_require__(41);\n\n// EXTERNAL MODULE: ./src/service/url.service.ts\nvar url_service = __webpack_require__(18);\n\n// CONCATENATED MODULE: ./src/service/braintree.service.ts\nvar braintree_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar braintree_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar braintree_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar braintree_service_BraintreeService = (function (_super) {\n    braintree_service___extends(BraintreeService, _super);\n    function BraintreeService(auth, http, exception, router, url) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.url = url;\n        return _this;\n    }\n    BraintreeService.prototype.getClientToken = function (accountId) {\n        return _super.prototype.read.call(this, 'accounts/' + accountId + '/bt-client-token');\n    };\n    var _a, _b, _c, _d, _e;\n    BraintreeService = braintree_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        braintree_service___metadata(\"design:paramtypes\", [typeof (_a = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof exception_service[\"a\" /* ExceptionService */] !== \"undefined\" && exception_service[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], BraintreeService);\n    return BraintreeService;\n}(api_service[\"a\" /* BradmaxApi */]));\n\n\n// EXTERNAL MODULE: ./src/service/user.service.ts\nvar user_service = __webpack_require__(6);\n\n// CONCATENATED MODULE: ./src/module/account/subscriptions/account.subscriptions.resolver.ts\nvar account_subscriptions_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar account_subscriptions_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar account_subscriptions_resolver_AccountSubscriptionsResolver = (function () {\n    function AccountSubscriptionsResolver(account, user, products, paymentsService, bt) {\n        this.account = account;\n        this.user = user;\n        this.products = products;\n        this.paymentsService = paymentsService;\n        this.bt = bt;\n    }\n    AccountSubscriptionsResolver.prototype.resolve = function (route, state) {\n        var _this = this;\n        if (this.user.accountId == null)\n            return;\n        return this.account.get(this.user.accountId).flatMap(function (accountResponse) {\n            var btClientToken = Observable[\"Observable\"].of(null);\n            if (_this.user.accountId == null)\n                return btClientToken;\n            if (accountResponse.details) {\n                btClientToken = _this.bt.getClientToken(_this.user.accountId);\n            }\n            return Observable[\"Observable\"].forkJoin(Observable[\"Observable\"].of(accountResponse), _this.products.getProductsForAccount(_this.user.accountId, 1), _this.paymentsService.getPaymentMethods(_this.user.accountId), btClientToken);\n        });\n    };\n    var _a, _b, _c, _d, _e;\n    AccountSubscriptionsResolver = account_subscriptions_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        account_subscriptions_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof account_service[\"a\" /* AccountService */] !== \"undefined\" && account_service[\"a\" /* AccountService */]) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object, typeof (_c = typeof product_service[\"a\" /* ProductService */] !== \"undefined\" && product_service[\"a\" /* ProductService */]) === \"function\" && _c || Object, typeof (_d = typeof payments_service[\"a\" /* PaymentsService */] !== \"undefined\" && payments_service[\"a\" /* PaymentsService */]) === \"function\" && _d || Object, typeof (_e = typeof braintree_service_BraintreeService !== \"undefined\" && braintree_service_BraintreeService) === \"function\" && _e || Object])\n    ], AccountSubscriptionsResolver);\n    return AccountSubscriptionsResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/account/subscriptions/paymentPicker.modal.ts\nvar paymentPicker_modal___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar paymentPicker_modal___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar HTML = \"\\n                <div class=\\\"content\\\">\\n                    <div class=\\\"pm-modal\\\">\\n                        <div type=\\\"button\\\" class=\\\"fa fa-times close-btn\\\" (click)=\\\"close()\\\"></div>\\n                        <h4>{{'ACCOUNT_SUBS.PM_MODAL.TITLE' | translate:lang}}</h4>\\n                        <form #paymentForm=\\\"ngForm\\\" id=\\\"paymentForm\\\" method=\\\"post\\\" class=\\\"well\\\">\\n                            <div id=\\\"payment-container\\\"></div>    \\n                        </form>\\n                        <button *ngIf=\\\"braintreeDropInReady\\\" class=\\\"btn btn-success fadeIn\\\" type=\\\"submit\\\" form=\\\"paymentForm\\\"><i class=\\\"fa fa-check\\\"></i> {{'ACCOUNT_SUBS.PM_MODAL.SUBMIT_BUTTON' | translate:lang}}</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-danger\\\" (click)=\\\"close()\\\"><i class=\\\"fa fa-times\\\"></i> {{'ACCOUNT_SUBS.PM_MODAL.CANCEL' | translate:lang}}</button>\\n                    </div>\\n                </div>\";\nvar STYLES = [\n    ':host{display: none;position: fixed;top: 0;bottom: 0;left: 0;right: 0;width: 100%;height: 100%;'\n        + 'z-index: 9998;background: rgba(0, 0, 0, 0.5);}',\n    ':host.active {display: table;}',\n    ':host .content {position: relative;display: table-cell;vertical-align: middle;margin: auto; background:rgba(0, 0, 0, 0.5);}',\n    ':host .close {position: absolute;top: 5px;left: 5px;}',\n    ':host .pm-modal {max-width:400px;max-height:300px; background:#fff;margin: auto;text-align: center;padding: 20px;}',\n    ':host .close-btn {float: right;cursor: pointer;opacity: 0.75;margin-top:-10px;margin-right:-10px;}',\n    ':host .close-btn:hover {opacity: 1;}',\n    ':host .well {padding:0}'\n];\nvar paymentPicker_modal_PaymentMethodsPickerModal = (function () {\n    function PaymentMethodsPickerModal(cdr) {\n        this.cdr = cdr;\n        this.onPaymentNonceReceived = new core_es5[\"EventEmitter\"]();\n        this.onCloseModal = new core_es5[\"EventEmitter\"]();\n        this.active = false;\n        this.braintreeDropInReady = false;\n    }\n    PaymentMethodsPickerModal.prototype.click = function (e) {\n        if (this.active == true && e.className.indexOf('content') > -1)\n            this.close();\n    };\n    PaymentMethodsPickerModal.prototype.close = function () {\n        if (this.active == true) {\n            this.active = false;\n            this.onCloseModal.emit();\n            this.cdr.markForCheck();\n        }\n    };\n    var _a;\n    PaymentMethodsPickerModal = paymentPicker_modal___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'pmModal',\n            host: { '[class.active]': 'active', '(click)': 'click($event.target)' },\n            template: HTML,\n            styles: STYLES,\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            inputs: ['btClientToken', 'active'],\n            outputs: ['onPaymentNonceReceived', 'onCloseModal'],\n        }),\n        paymentPicker_modal___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _a || Object])\n    ], PaymentMethodsPickerModal);\n    return PaymentMethodsPickerModal;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/account/subscriptions/index.ts\n\n\n\n\n// EXTERNAL MODULE: ./src/module/account/invoices/account.invoices.view.ts\nvar account_invoices_view = __webpack_require__(1350);\n\n// CONCATENATED MODULE: ./src/module/account/invoices/account.invoices.resolver.ts\nvar account_invoices_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar account_invoices_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar account_invoices_resolver_AccountInvoicesResolver = (function () {\n    function AccountInvoicesResolver(user, payments) {\n        this.user = user;\n        this.payments = payments;\n    }\n    AccountInvoicesResolver.prototype.resolve = function (route, state) {\n        if (this.user.accountId == null)\n            return;\n        return this.payments.getPaymentTransactions(this.user.accountId);\n    };\n    var _a, _b;\n    AccountInvoicesResolver = account_invoices_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        account_invoices_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _a || Object, typeof (_b = typeof payments_service[\"a\" /* PaymentsService */] !== \"undefined\" && payments_service[\"a\" /* PaymentsService */]) === \"function\" && _b || Object])\n    ], AccountInvoicesResolver);\n    return AccountInvoicesResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/account/invoices/index.ts\n\n\n\n// EXTERNAL MODULE: ./node_modules/rxjs/Subject.js\nvar Subject = __webpack_require__(11);\nvar Subject_default = /*#__PURE__*/__webpack_require__.n(Subject);\n\n// CONCATENATED MODULE: ./src/service/country.service.ts\nvar country_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar country_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar country_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar country_service_CountryService = (function (_super) {\n    country_service___extends(CountryService, _super);\n    function CountryService(auth, http, exception, router, url) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.url = url;\n        return _this;\n    }\n    CountryService.prototype.getCountries = function () {\n        var _this = this;\n        this.resolveSource = new Subject[\"Subject\"]();\n        _super.prototype.read.call(this, 'countries').subscribe(function (response) {\n            _this.countries = response;\n            _this.resolveSource.next(response);\n        }, function (error) { return _this.resolveSource.error(error); }, function () { return _this.resolveSource.complete(); });\n        return this.resolveSource.asObservable();\n    };\n    var _a, _b, _c, _d, _e;\n    CountryService = country_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        country_service___metadata(\"design:paramtypes\", [typeof (_a = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof exception_service[\"a\" /* ExceptionService */] !== \"undefined\" && exception_service[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], CountryService);\n    return CountryService;\n}(api_service[\"a\" /* BradmaxApi */]));\n\n\n// CONCATENATED MODULE: ./src/util/regex.util.ts\nvar RegexExpressions = (function () {\n    function RegexExpressions() {\n    }\n    RegexExpressions.emailRegex = function () {\n        return /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n    };\n    return RegexExpressions;\n}());\n\n\n// CONCATENATED MODULE: ./src/service/validation.service.ts\n\nvar validation_service_ValidationService = (function () {\n    function ValidationService() {\n    }\n    ValidationService.isValidEmail = function (value) {\n        return RegexExpressions.emailRegex().test(value) ? true : false;\n    };\n    return ValidationService;\n}());\n\n\n// EXTERNAL MODULE: ./src/service/view.service.ts\nvar view_service = __webpack_require__(15);\n\n// EXTERNAL MODULE: ./src/module/modal/modal.service.ts\nvar modal_service = __webpack_require__(29);\n\n// CONCATENATED MODULE: ./src/module/account/details/account.details.view.ts\nvar account_details_view___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar account_details_view___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar account_details_view___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar account_details_view_AccountDetailsView = (function (_super) {\n    account_details_view___extends(AccountDetailsView, _super);\n    function AccountDetailsView(formBuilder, route, cdr, view, flashMessagesService, modal, router, subscriptionService, countries, locale, translation, user, account, tabService) {\n        var _this = _super.call(this, locale, translation, cdr) || this;\n        _this.formBuilder = formBuilder;\n        _this.route = route;\n        _this.cdr = cdr;\n        _this.view = view;\n        _this.flashMessagesService = flashMessagesService;\n        _this.modal = modal;\n        _this.router = router;\n        _this.subscriptionService = subscriptionService;\n        _this.countries = countries;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.account = account;\n        _this.tabService = tabService;\n        _this.userLoading = false;\n        _this.companyDetailsLoading = false;\n        _this.showUserForm = true;\n        _this.showCompanyForm = true;\n        _this.canValidate = true;\n        _this.emailErr = {\n            validateEmail: _this.translation.translate('ACCOUNT_DETAILS.FORM.VALIDATION_ERROR.INVALID_FIELD', { field: 'email' })\n        };\n        _this.userFormEditMode = false;\n        _this.detailsFormEditMode = false;\n        _this.planId = NaN;\n        _this.setAccountUserForm();\n        _this.setAccountDetailsForm();\n        _this.clearUserRemoteErrors();\n        _this.clearDetailsRemoteErrors();\n        return _this;\n    }\n    AccountDetailsView.prototype.ngOnInit = function () {\n        var _this = this;\n        this.tabService.onNavigatedTo(1);\n        if (!this.userFormEditMode)\n            this.accountUserForm.disable();\n        if (!this.detailsFormEditMode)\n            this.accountDetailsForm.disable();\n        this.subscription = this.route.params.subscribe(function (params) {\n            _this.planId = +params['plan'];\n            if (_this.planId) {\n                _this.accountDetailsForm.disable();\n                _this.updateAccountDetails();\n            }\n        });\n    };\n    AccountDetailsView.prototype.onUserEditModeChange = function (start) {\n        if (start) {\n            this.accountUserForm.enable();\n        }\n        else {\n            this.accountUserForm.disable();\n            this.clearUserRemoteErrors();\n            this.setAccountUserForm();\n        }\n    };\n    AccountDetailsView.prototype.onDetailsEditModeChange = function (start) {\n        if (start) {\n            this.accountDetailsForm.enable();\n        }\n        else {\n            this.accountDetailsForm.disable();\n            this.clearDetailsRemoteErrors();\n            this.setAccountDetailsForm();\n        }\n    };\n    AccountDetailsView.prototype.onUserFormSubmit = function () {\n        this.clearUserRemoteErrors();\n        this.canValidate = true;\n        if (this.accountUserForm.valid) {\n            this.userLoading = true;\n            this.accountUserForm.disable();\n            this.updatedUserDetails();\n        }\n    };\n    AccountDetailsView.prototype.onAccountDetailsFormSubmit = function () {\n        this.clearDetailsRemoteErrors();\n        this.canValidate = true;\n        if (this.accountDetailsForm.valid) {\n            this.companyDetailsLoading = true;\n            this.accountDetailsForm.disable();\n            this.updateAccountDetails();\n        }\n    };\n    AccountDetailsView.prototype.updatedUserDetails = function () {\n        var _this = this;\n        var userRequest = {\n            first_name: this.accountUserForm.controls['first_name'].value,\n            last_name: this.accountUserForm.controls['last_name'].value,\n            email: this.accountUserForm.controls['email'].value,\n            has_gdpr_info_shown: this.user.hasGdprInfoShown,\n            has_agree_for_newsletter: this.accountUserForm.controls['has_agree_for_newsletter'].value\n        };\n        this.user.updateUser(userRequest).subscribe(function (response) {\n            _this.flashMessagesService.show(_this.translation.translate('ACCOUNT_DETAILS.FORM.SUBMIT_SUCCESS'), { cssClass: 'alert-success', timeout: 3000 });\n        }, function (error) {\n            if (error.errors) {\n                _this.mapUserRemoteErrors(error.errors);\n            }\n            else {\n            }\n            _this.accountUserForm.enable();\n            _this.userLoading = false;\n            _this.cdr.markForCheck();\n        }, function () {\n            _this.userLoading = false;\n            _this.cdr.markForCheck();\n        });\n    };\n    AccountDetailsView.prototype.updateAccountDetails = function () {\n        var _this = this;\n        var accountRequest = {\n            address: this.accountDetailsForm.controls['address'].value,\n            city: this.accountDetailsForm.controls['city'].value,\n            company_name: this.accountDetailsForm.controls['company_name'].value,\n            tax_no: this.accountDetailsForm.controls['tax_no'].value,\n            country: this.accountDetailsForm.controls['country'].value != 'default'\n                ? this.accountDetailsForm.controls['country'].value : null,\n            phone_number: this.accountDetailsForm.controls['phone_number'].value,\n            postal_code: this.accountDetailsForm.controls['postal_code'].value,\n            state: this.accountDetailsForm.controls['state'].value\n        };\n        if (this.user.accountId)\n            this.account.updateAccount(this.user.accountId, accountRequest).subscribe(function (response) {\n                _this.flashMessagesService.show(_this.translation.translate('ACCOUNT_DETAILS.FORM.SUBMIT_SUCCESS'), { cssClass: 'alert-success', timeout: 3000 });\n                if (_this.planId && _this.planId > 0) {\n                    _this.modal.prompt(_this.translation.translate('ACCOUNT_DETAILS.MESSAGE.ACCOUNT_READY'), [{\n                            label: _this.translation.translate('ACCOUNT_DETAILS.BUTTON.CONTINUE'),\n                            fa: 'check', classes: ['test-css-class'],\n                            close: true, click: function () {\n                                _this.createSubscriptionOrderAction(_this.planId);\n                            }\n                        },\n                        {\n                            label: _this.translation.translate('ACCOUNT_DETAILS.BUTTON.CLOSE'),\n                            fa: 'ban', classes: ['test-css-class'], close: true, click: function () {\n                                _this.planId = NaN;\n                            }\n                        }\n                    ]);\n                }\n            }, function (error) {\n                _this.companyDetailsLoading = false;\n                if (error.errors) {\n                    _this.mapDetailsRemoteErrors(error.errors);\n                }\n                else {\n                }\n                _this.accountDetailsForm.enable();\n                _this.cdr.markForCheck();\n            }, function () {\n                _this.companyDetailsLoading = false;\n                _this.cdr.markForCheck();\n            });\n    };\n    AccountDetailsView.prototype.createSubscriptionOrderAction = function (planId) {\n        var _this = this;\n        if (this.user.accountId) {\n            this.view.spinner(true);\n            this.subscriptionService.createSubscriptionOrder(this.user.accountId, planId).subscribe(function (data) {\n                _this.view.spinner(false);\n                _this.router.navigate(['admin', 'subscription', data.id]);\n            }, function (error) {\n                console.error('POST.SubscriptionOder ERROR', error);\n                _this.view.spinner(false);\n            });\n        }\n    };\n    AccountDetailsView.prototype.setAccountUserForm = function () {\n        var _this = this;\n        this.accountUserForm = this.formBuilder.group({\n            first_name: [this.user.firstName],\n            last_name: [this.user.lastName],\n            email: [this.user.email, forms_es5[\"Validators\"].compose([\n                    this.validateEmail\n                ])],\n            has_agree_for_newsletter: [this.user.hasAgreeForNewsletter]\n        });\n        this.accountUserForm.statusChanges.subscribe(function () {\n            _this.userFormEditMode = _this.accountUserForm.status !== 'DISABLED' ? true : false;\n        });\n    };\n    AccountDetailsView.prototype.setAccountDetailsForm = function () {\n        var _this = this;\n        if (this.account.account)\n            this.accountDetailsForm = this.formBuilder.group({\n                company_name: [this.account.companyName],\n                tax_no: [this.account.account.details ? this.account.account.details.tax_no : null],\n                country: [this.account.account.details ? this.account.account.details.country : 'default'],\n                city: [this.account.account.details ? this.account.account.details.city : null],\n                state: this.account.account.details ? this.account.account.details.state : null,\n                address: [this.account.account.details ? this.account.account.details.address : null],\n                phone_number: this.account.account.details ? this.account.account.details.phone_number : null,\n                postal_code: [this.account.account.details ? this.account.account.details.postal_code : null]\n            });\n        this.accountDetailsForm.statusChanges.subscribe(function () {\n            _this.detailsFormEditMode = _this.accountDetailsForm.status !== 'DISABLED' ? true : false;\n        });\n    };\n    AccountDetailsView.prototype.mapUserRemoteErrors = function (res) {\n        var _this = this;\n        if (res) {\n            this.clearUserRemoteErrors();\n            this.globalErrors = new Array();\n            Object.keys(res).forEach(function (key) {\n                if (_this.userFormRemoteErrors && _this.userFormRemoteErrors.hasOwnProperty(key)) {\n                    if (Array.isArray(res[key]))\n                        res[key].forEach(function (err) {\n                            if (_this.userFormRemoteErrors) {\n                                if (_this.userFormRemoteErrors[key])\n                                    _this.userFormRemoteErrors[key] = _this.userFormRemoteErrors[key]\n                                        + '&#013;&#010;' + err;\n                                else\n                                    _this.userFormRemoteErrors[key] = err;\n                            }\n                        });\n                    else\n                        _this.userFormRemoteErrors[key] = res[key];\n                }\n                else\n                    _this.globalErrors.push(res[key]);\n            });\n        }\n    };\n    AccountDetailsView.prototype.mapDetailsRemoteErrors = function (res) {\n        var _this = this;\n        if (res) {\n            this.clearDetailsRemoteErrors();\n            this.globalErrors = new Array();\n            Object.keys(res).forEach(function (key) {\n                if (_this.detailsFormRemoteErrors && _this.detailsFormRemoteErrors.hasOwnProperty(key)) {\n                    if (Array.isArray(res[key]))\n                        res[key].forEach(function (err) {\n                            if (_this.detailsFormRemoteErrors) {\n                                if (_this.detailsFormRemoteErrors[key])\n                                    _this.detailsFormRemoteErrors[key] =\n                                        _this.detailsFormRemoteErrors[key] + '&#013;&#010;' + err;\n                                else\n                                    _this.detailsFormRemoteErrors[key] = err;\n                            }\n                        });\n                    else\n                        _this.detailsFormRemoteErrors[key] = res[key];\n                }\n                else\n                    _this.globalErrors.push(res[key]);\n            });\n        }\n    };\n    AccountDetailsView.prototype.validateEmail = function (c) {\n        return validation_service_ValidationService.isValidEmail(c.value) ? null : { validateEmail: { valid: false } };\n    };\n    AccountDetailsView.prototype.clearUserRemoteErrors = function () {\n        this.userFormRemoteErrors = {\n            email: null,\n            first_name: null,\n            last_name: null,\n            has_gdpr_info_shown: null,\n            has_agree_for_newsletter: null\n        };\n    };\n    AccountDetailsView.prototype.clearDetailsRemoteErrors = function () {\n        this.detailsFormRemoteErrors = {\n            address: null,\n            city: null,\n            company_name: null,\n            country: null,\n            phone_number: null,\n            postal_code: null,\n            state: null,\n            tax_no: null\n        };\n    };\n    AccountDetailsView.prototype.onPasswordChangeClick = function () {\n        this.modal.passwordChange();\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n    AccountDetailsView = account_details_view___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'account-details',\n            template: __webpack_require__(1352),\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            styles: [\n                ':host .form-check-input{width:32px;position:relative;top:-5px;}'\n            ],\n            inputs: ['showUserForm', 'showCompanyForm', 'userFormEditMode', 'detailsFormEditMode']\n        }),\n        account_details_view___metadata(\"design:paramtypes\", [typeof (_a = typeof forms_es5[\"FormBuilder\"] !== \"undefined\" && forms_es5[\"FormBuilder\"]) === \"function\" && _a || Object, typeof (_b = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _c || Object, typeof (_d = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _d || Object, typeof (_e = typeof angular2_flash_messages[\"FlashMessagesService\"] !== \"undefined\" && angular2_flash_messages[\"FlashMessagesService\"]) === \"function\" && _e || Object, typeof (_f = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _f || Object, typeof (_g = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _g || Object, typeof (_h = typeof subscription_service[\"a\" /* SubscriptionService */] !== \"undefined\" && subscription_service[\"a\" /* SubscriptionService */]) === \"function\" && _h || Object, typeof (_j = typeof country_service_CountryService !== \"undefined\" && country_service_CountryService) === \"function\" && _j || Object, typeof (_k = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _k || Object, typeof (_l = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _l || Object, typeof (_m = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _m || Object, typeof (_o = typeof account_service[\"a\" /* AccountService */] !== \"undefined\" && account_service[\"a\" /* AccountService */]) === \"function\" && _o || Object, typeof (_p = typeof tab_service[\"a\" /* TabService */] !== \"undefined\" && tab_service[\"a\" /* TabService */]) === \"function\" && _p || Object])\n    ], AccountDetailsView);\n    return AccountDetailsView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/account/details/account.details.resolver.ts\nvar account_details_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar account_details_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar account_details_resolver_AccountDetailsResolver = (function () {\n    function AccountDetailsResolver(account, user, countries) {\n        this.account = account;\n        this.user = user;\n        this.countries = countries;\n    }\n    AccountDetailsResolver.prototype.resolve = function (route, state) {\n        if (this.user.accountId == null)\n            return;\n        return Observable[\"Observable\"].forkJoin(this.account.get(this.user.accountId), this.countries.getCountries());\n    };\n    var _a, _b, _c;\n    AccountDetailsResolver = account_details_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        account_details_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof account_service[\"a\" /* AccountService */] !== \"undefined\" && account_service[\"a\" /* AccountService */]) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object, typeof (_c = typeof country_service_CountryService !== \"undefined\" && country_service_CountryService) === \"function\" && _c || Object])\n    ], AccountDetailsResolver);\n    return AccountDetailsResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/account/details/input.component.ts\nvar input_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar input_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar input_component_ExtendedInput = (function () {\n    function ExtendedInput(translation) {\n        this.translation = translation;\n        this.labelText = '';\n        this.genericErrorMessages = {\n            required: this.translation.translate('ACCOUNT.FORM.VALIDATION_ERROR.REQUIRED'),\n            pattern: this.translation.translate('ACCOUNT.FORM.VALIDATION_ERROR.INVALID'),\n            unknown: this.translation.translate('ACCOUNT.FORM.VALIDATION_ERROR.INVALID')\n        };\n    }\n    ExtendedInput.prototype.ngOnChanges = function (changes) {\n        var _this = this;\n        this.errorMessageToDisplay = '';\n        if (!this.canValidate)\n            return;\n        if (this.remoteError) {\n            this.errorMessageToDisplay = this.remoteError;\n            return;\n        }\n        var errors = this.inputErrors;\n        if (errors) {\n            Object.keys(errors).some(function (key) {\n                if (_this.customError && _this.customError[key]) {\n                    _this.errorMessageToDisplay = _this.customError[key];\n                    return true;\n                }\n                if (_this.genericErrorMessages[key]) {\n                    _this.errorMessageToDisplay = _this.genericErrorMessages[key];\n                    return true;\n                }\n                return false;\n            });\n            if (!this.errorMessageToDisplay || this.errorMessageToDisplay === '') {\n                this.errorMessageToDisplay = this.genericErrorMessages['unknown'];\n            }\n        }\n    };\n    var _a;\n    input_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        input_component___metadata(\"design:type\", String)\n    ], ExtendedInput.prototype, \"labelText\", void 0);\n    input_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        input_component___metadata(\"design:type\", Object)\n    ], ExtendedInput.prototype, \"inputErrors\", void 0);\n    input_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        input_component___metadata(\"design:type\", Boolean)\n    ], ExtendedInput.prototype, \"canValidate\", void 0);\n    input_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        input_component___metadata(\"design:type\", Object)\n    ], ExtendedInput.prototype, \"customError\", void 0);\n    input_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        input_component___metadata(\"design:type\", String)\n    ], ExtendedInput.prototype, \"remoteError\", void 0);\n    input_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        input_component___metadata(\"design:type\", String)\n    ], ExtendedInput.prototype, \"toolText\", void 0);\n    ExtendedInput = input_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'extended-input',\n            template: \"<div class=\\\"form-group\\\" [ngClass]=\\\"{'has-error':errorMessageToDisplay}\\\"> \\n                    <label class=\\\"col-md-2 control-label\\\"> {{labelText}} \\n                        <i *ngIf=\\\"toolText\\\" class=\\\"fa fa-info-circle\\\" rel=\\\"tooltip\\\" [title]=\\\"toolText\\\"></i>\\n                    </label>\\n                    \\n                    <div class=\\\"col-md-10\\\">\\n                        <ng-content></ng-content>\\n                        <span class=\\\"help-block\\\" *ngIf=\\\"errorMessageToDisplay\\\"> {{errorMessageToDisplay}} </span>\\n                    </div>\\n               </div>\\n              \"\n        }),\n        input_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _a || Object])\n    ], ExtendedInput);\n    return ExtendedInput;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/account/details/index.ts\n\n\n\n\n// CONCATENATED MODULE: ./src/module/account/payments/account.payments.view.ts\nvar account_payments_view___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar account_payments_view___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar account_payments_view___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar account_payments_view_AccountPaymentsView = (function (_super) {\n    account_payments_view___extends(AccountPaymentsView, _super);\n    function AccountPaymentsView(route, tabService, paymentsService, userService, modal, view, flashMessagesService, locale, translation, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.route = route;\n        _this.tabService = tabService;\n        _this.paymentsService = paymentsService;\n        _this.userService = userService;\n        _this.modal = modal;\n        _this.view = view;\n        _this.flashMessagesService = flashMessagesService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        _this.braintreeOnTeardown = false;\n        _this.route.data.subscribe(function (data) {\n            if (data && data.account) {\n                _this.paymentMethods = data.account[1];\n                if (data.account[2])\n                    _this.braintreeClientToken = data.account[2].bt_client_token;\n            }\n        });\n        return _this;\n    }\n    AccountPaymentsView.prototype.ngOnInit = function () {\n        this.tabService.onNavigatedTo(3);\n    };\n    AccountPaymentsView.prototype.onCardEditSubmit = function () {\n        if (this.paymentOnEdit) {\n            this.paymentOnEdit.loading = true;\n            this.cdr.detectChanges();\n        }\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n    AccountPaymentsView = account_payments_view___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'account-payments',\n            template: __webpack_require__(1353)\n        }),\n        account_payments_view___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _a || Object, typeof (_b = typeof tab_service[\"a\" /* TabService */] !== \"undefined\" && tab_service[\"a\" /* TabService */]) === \"function\" && _b || Object, typeof (_c = typeof payments_service[\"a\" /* PaymentsService */] !== \"undefined\" && payments_service[\"a\" /* PaymentsService */]) === \"function\" && _c || Object, typeof (_d = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _d || Object, typeof (_e = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _e || Object, typeof (_f = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _f || Object, typeof (_g = typeof angular2_flash_messages[\"FlashMessagesService\"] !== \"undefined\" && angular2_flash_messages[\"FlashMessagesService\"]) === \"function\" && _g || Object, typeof (_h = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _h || Object, typeof (_j = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _j || Object, typeof (_k = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _k || Object])\n    ], AccountPaymentsView);\n    return AccountPaymentsView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/account/payments/account.payments.resolver.ts\nvar account_payments_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar account_payments_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar account_payments_resolver_AccountPaymentsResolver = (function () {\n    function AccountPaymentsResolver(account, user, payments, bt) {\n        this.account = account;\n        this.user = user;\n        this.payments = payments;\n        this.bt = bt;\n    }\n    AccountPaymentsResolver.prototype.resolve = function (route, state) {\n        var _this = this;\n        if (this.user.accountId == null)\n            return;\n        return this.account.get(this.user.accountId).flatMap(function (accountResponse) {\n            var btClientToken = Observable[\"Observable\"].of(null);\n            if (_this.user.accountId == null)\n                return btClientToken;\n            if (accountResponse.details) {\n                btClientToken = _this.bt.getClientToken(_this.user.accountId);\n            }\n            return Observable[\"Observable\"].forkJoin(Observable[\"Observable\"].of(accountResponse), _this.payments.getPaymentMethods(_this.user.accountId), btClientToken);\n        });\n    };\n    var _a, _b, _c, _d;\n    AccountPaymentsResolver = account_payments_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        account_payments_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof account_service[\"a\" /* AccountService */] !== \"undefined\" && account_service[\"a\" /* AccountService */]) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object, typeof (_c = typeof payments_service[\"a\" /* PaymentsService */] !== \"undefined\" && payments_service[\"a\" /* PaymentsService */]) === \"function\" && _c || Object, typeof (_d = typeof braintree_service_BraintreeService !== \"undefined\" && braintree_service_BraintreeService) === \"function\" && _d || Object])\n    ], AccountPaymentsResolver);\n    return AccountPaymentsResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/account/payments/account.payments.guard.ts\nvar account_payments_guard___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar account_payments_guard___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar account_payments_guard_AccountPaymentsGuard = (function () {\n    function AccountPaymentsGuard() {\n    }\n    AccountPaymentsGuard.prototype.canDeactivate = function (component, route, state) {\n        return true;\n    };\n    AccountPaymentsGuard = account_payments_guard___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        account_payments_guard___metadata(\"design:paramtypes\", [])\n    ], AccountPaymentsGuard);\n    return AccountPaymentsGuard;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/account/payments/index.ts\n\n\n\n\n// CONCATENATED MODULE: ./src/module/account/index.ts\n\n\n\n\n\n\n\n// CONCATENATED MODULE: ./src/module/account/account.module.ts\nvar account_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\nvar AccountRoutes = [\n    { path: 'subscriptions', component: account_subscriptions_view[\"a\" /* AccountSubscriptionsView */], resolve: { account: account_subscriptions_resolver_AccountSubscriptionsResolver } },\n    { path: 'details', component: account_details_view_AccountDetailsView, resolve: { account: account_details_resolver_AccountDetailsResolver } },\n    { path: 'invoices', component: account_invoices_view[\"a\" /* AccountInvoicesView */], resolve: { account: account_invoices_resolver_AccountInvoicesResolver } },\n    {\n        path: 'payments',\n        component: account_payments_view_AccountPaymentsView,\n        resolve: { account: account_payments_resolver_AccountPaymentsResolver },\n        canDeactivate: [account_payments_guard_AccountPaymentsGuard]\n    },\n    { path: 'invoices', component: account_invoices_view[\"a\" /* AccountInvoicesView */], resolve: { account: account_invoices_resolver_AccountInvoicesResolver } },\n    { path: '', redirectTo: 'details', pathMatch: 'full' },\n    { path: '**', redirectTo: 'details' }\n];\nvar LOCAL_PROVIDERS = [\n    account_subscriptions_resolver_AccountSubscriptionsResolver,\n    account_details_resolver_AccountDetailsResolver,\n    account_invoices_resolver_AccountInvoicesResolver,\n    account_payments_resolver_AccountPaymentsResolver,\n    tab_service[\"a\" /* TabService */],\n    payments_service[\"a\" /* PaymentsService */],\n    account_payments_guard_AccountPaymentsGuard,\n    subscription_service[\"a\" /* SubscriptionService */],\n    product_service[\"a\" /* ProductService */],\n];\nvar COMP = [\n    account_view_AccountView,\n    account_details_view_AccountDetailsView,\n    account_invoices_view[\"a\" /* AccountInvoicesView */],\n    account_payments_view_AccountPaymentsView,\n    account_subscriptions_view[\"a\" /* AccountSubscriptionsView */],\n    input_component_ExtendedInput,\n    paymentPicker_modal_PaymentMethodsPickerModal\n];\nvar account_module_AccountModule = (function () {\n    function AccountModule() {\n    }\n    AccountModule = account_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                forms_es5[\"ReactiveFormsModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(AccountRoutes)\n            ],\n            declarations: COMP,\n            entryComponents: COMP,\n            providers: LOCAL_PROVIDERS.slice(),\n            exports: COMP,\n            bootstrap: [account_view_AccountView]\n        })\n    ], AccountModule);\n    return AccountModule;\n}());\n\n\n// EXTERNAL MODULE: ./node_modules/moment/moment.js\nvar moment = __webpack_require__(10);\nvar moment_default = /*#__PURE__*/__webpack_require__.n(moment);\n\n// CONCATENATED MODULE: ./src/module/analytics/component/charts/chart.component.config.ts\n\nvar ChartConfig = new core_es5[\"InjectionToken\"]('CHART_CONFIG');\nvar ChartConfigData = {\n    datasetColors: [\n        [31, 47, 193],\n        [23, 23, 23],\n        [249, 213, 0],\n        [247, 92, 3],\n        [157, 141, 241],\n        [7, 160, 112],\n        [38, 219, 192],\n        [130, 2, 99],\n        [25, 114, 244],\n        [255, 99, 146],\n        [198, 216, 96],\n    ]\n};\n\n// EXTERNAL MODULE: ./src/module/analytics/component/charts/chart.model.ts\nvar chart_model = __webpack_require__(106);\nvar chart_model_default = /*#__PURE__*/__webpack_require__.n(chart_model);\n\n// CONCATENATED MODULE: ./src/module/analytics/component/charts/chart.scale.helper.ts\nvar chart_scale_helper___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar chart_scale_helper_ChartScaleHelper = (function () {\n    function ChartScaleHelper() {\n    }\n    ChartScaleHelper.prototype.getScaleStep = function (start, end, scaleUnit) {\n        var dateDiff;\n        var startDate = start.clone();\n        var endDate = end.clone();\n        switch (scaleUnit) {\n            case 'minute':\n                dateDiff = endDate.diff(startDate, 'minutes') / 2;\n                break;\n            case 'hour':\n                dateDiff = endDate.endOf('day').diff(startDate.startOf('day'), 'hours');\n                break;\n            case 'month':\n                dateDiff = endDate.endOf('day').diff(startDate.startOf('day'), 'months');\n                break;\n            case 'year':\n                dateDiff = endDate.endOf('day').diff(startDate.startOf('day'), 'years');\n                break;\n            default:\n                dateDiff = endDate.endOf('day').diff(startDate.startOf('day'), 'days');\n                break;\n        }\n        return Math.round(dateDiff / 4);\n    };\n    ChartScaleHelper.prototype.getScaleStepAlt = function (dataLength) {\n        return Math.round(dataLength / 4);\n    };\n    ChartScaleHelper.prototype.getTimeScaleUnit = function (start, end, granularity) {\n        if (end.diff(start, 'hours') < 24)\n            return 'minute';\n        var startDay = start.clone().startOf('day');\n        var endDay = end.clone().endOf('day');\n        if (endDay.diff(startDay, 'months') > 24)\n            return 'year';\n        if (endDay.diff(startDay, 'months') > 12)\n            return 'month';\n        if (granularity === 'hour' && endDay.diff(startDay.startOf('day'), 'days') <= 3)\n            return 'hour';\n        return 'day';\n    };\n    ChartScaleHelper.prototype.getDateFormatForScaleUnit = function (unit) {\n        switch (unit) {\n            case 'minute':\n                return 'HH:mm:ss';\n            case 'hour':\n                return 'HH:mm';\n            case 'day':\n                return 'DD MMM';\n            case 'week':\n                return 'DD MMM';\n            case 'month':\n                return 'MMM YYYY';\n            case 'year':\n                return 'YYYY';\n            default:\n                return 'DD MMM';\n        }\n    };\n    ChartScaleHelper.prototype.getPointThickness = function (pointsAmount) {\n        if (pointsAmount > 48)\n            return 0;\n        return 1;\n    };\n    ChartScaleHelper.prototype.getLineThickness = function (pointsAmount) {\n        if (pointsAmount > 48)\n            return 1;\n        return 2;\n    };\n    ChartScaleHelper.prototype.formatTooltipDateLabel = function (labelToFormat, start, end, granularity) {\n        var m = moment_default()(labelToFormat);\n        if (!m.isValid())\n            return labelToFormat;\n        if (start && end && (end.diff(start, 'hours') < 24))\n            return m.format('ll HH:mm:ss');\n        var toDate;\n        switch (granularity) {\n            case 'hour':\n                return m.format('llll');\n            case 'day':\n                return m.format('ll');\n            case 'week':\n                toDate = m.clone().endOf('week').isAfter(end, 'day') ?\n                    end.format('ll') : m.clone().endOf('week').format('ll');\n                return m.format('ll') + ' - ' + toDate;\n            case 'month':\n                toDate = m.clone().endOf('month').isAfter(end, 'day') ?\n                    end.format('ll') : m.clone().endOf('month').format('ll');\n                return m.format('ll') + ' - ' + toDate;\n            case 'year':\n                toDate = m.clone().endOf('year').isAfter(end, 'day') ?\n                    end.format('ll') : m.clone().endOf('year').format('ll');\n                return m.format('ll') + ' - ' + toDate;\n            default: return labelToFormat;\n        }\n    };\n    ChartScaleHelper.prototype.formatScaleDateLabel = function (label, dateFormat, index, labels) {\n        var m = moment_default()(label);\n        if (!m.isValid())\n            return label;\n        var step = this.getScaleStepAlt(labels.length);\n        if (index > 0 && index < labels.length - 1) {\n            if (labels.length > 6 && index % step > 0)\n                return null;\n        }\n        else if (labels.length > 3)\n            return null;\n        var formattedDate = m.format(dateFormat);\n        return formattedDate;\n    };\n    ChartScaleHelper.prototype.removeFirstAndLastDate = function (scale) {\n        if (scale.ticks.length > 3) {\n            scale.ticks[0] = null;\n            scale.ticks[scale.ticks.length - 1] = null;\n        }\n    };\n    ChartScaleHelper.prototype.makeTickLabelSamplingCallback = function (singleElementWidth) {\n        var result = function (label, index, labels) {\n            var samplesNum = Math.ceil(this.width / singleElementWidth);\n            var scale = (labels && (labels.length > 1)) ? (samplesNum / (labels.length - 1)) : 1;\n            if (scale > 0.3) {\n                scale = 1;\n            }\n            var labelSegment = Math.floor(index * scale);\n            var prevLabelSegment = Math.floor((index - 1) * scale);\n            if (labelSegment != prevLabelSegment) {\n                return label;\n            }\n            return '';\n        };\n        return result;\n    };\n    ChartScaleHelper = chart_scale_helper___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], ChartScaleHelper);\n    return ChartScaleHelper;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/component/charts/chart.component.ts\nvar chart_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar chart_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\n\nvar chart_component_ChartComponent = (function () {\n    function ChartComponent(cdr, timeScaleHelper, config) {\n        this.cdr = cdr;\n        this.timeScaleHelper = timeScaleHelper;\n        this.config = config;\n        this.pointRadius = 1;\n        this.chartHeight = '300px';\n        this.fontColor = null;\n        this.gridColor = 'rgba(0, 0, 0, 0.1)';\n        this.datasetColors = null;\n        this.onChartClicked = new core_es5[\"EventEmitter\"]();\n        this.onChartHovered = new core_es5[\"EventEmitter\"]();\n        this.isAfterViewInit = false;\n    }\n    ChartComponent.prototype.ngAfterViewInit = function () {\n        this.isAfterViewInit = true;\n        this.createChart();\n    };\n    ChartComponent.prototype.ngOnChanges = function (changes) {\n        if (this.isAfterViewInit)\n            if ((changes['chartData'] && changes['chartData'] != undefined && changes['chartData'] != null) ||\n                (changes['chartType'] && changes['chartType'] != undefined && changes['chartType'] != null\n                    && this.chartData)) {\n                this.createChart();\n            }\n    };\n    ChartComponent.prototype.ngOnDestroy = function () {\n        this.destroyChart();\n    };\n    ChartComponent.prototype.destroyChart = function () {\n        if (this.chartInstance) {\n            this.chartInstance.destroy();\n        }\n    };\n    ChartComponent.prototype.createChart = function () {\n        if (!this.chartData)\n            return;\n        this.destroyChart();\n        this.setChartSettingsAndOptions();\n        var conf = {\n            type: (this.chartType == 'lineTime' ? 'line' : this.chartType),\n            options: this.chartOptions,\n            data: {\n                labels: this.chartLabels,\n                datasets: this.chartData\n            }\n        };\n        this.chartInstance = new Chart(this.canvasElement.nativeElement.getContext('2d'), conf);\n    };\n    ChartComponent.prototype.onChartTypeChange = function (chartType) {\n        this.chartType = chartType;\n        this.createChart();\n    };\n    ChartComponent.prototype.setChartSettingsAndOptions = function () {\n        switch (this.chartType) {\n            case 'line':\n                this.setLineChartOptions();\n                this.setLineChartSettings();\n                break;\n            case 'lineTime':\n                this.setLineTimeChartOptions();\n                this.setLineTimeChartSettings();\n                break;\n            case 'bar':\n                this.setBarChartOptions();\n                this.setBarChartSettings();\n                break;\n            case 'horizontalBar':\n                this.setHorizontalBarChartOptions();\n                this.setBarChartSettings();\n                break;\n            case 'doughnut':\n                this.setPieChartOptions();\n                this.setPieChartSettings();\n                break;\n            default:\n                console.warn('ChartComponent -> ChartType not defined or invalid!');\n                break;\n        }\n    };\n    ChartComponent.prototype.getColor = function (i) {\n        if (this.datasetColors)\n            return this.datasetColors[i % this.datasetColors.length];\n        return this.config.datasetColors[i % this.config.datasetColors.length];\n    };\n    ChartComponent.prototype.setLineChartSettings = function () {\n        this.setLineTimeChartSettings();\n    };\n    ChartComponent.prototype.setLineTimeChartSettings = function () {\n        var _this = this;\n        var dataAmount = this.getDataLength();\n        this.chartData.forEach(function (item, index) {\n            var colors = _this.getColor(index);\n            var chartItem = item;\n            if ((typeof chartItem.pointBorderColor === \"string\") && (chartItem.pointBorderColor.indexOf('rgba(') == 0)) {\n                colors = _this.parseRgbaStr(chartItem.pointBorderColor).slice(0, 3);\n            }\n            chartItem.backgroundColor = _this.rgba(colors, 0.5);\n            chartItem.borderColor = _this.rgba(colors, 1);\n            chartItem.pointBackgroundColor = '#fff';\n            chartItem.pointBorderColor = _this.rgba(colors, 1);\n            chartItem.pointHoverBackgroundColor = _this.rgba(colors, 1);\n            chartItem.pointHoverBorderColor = _this.rgba(colors, 0.8);\n            if (typeof chartItem.fill === 'undefined') {\n                chartItem.fill = index > 0 ? false : true;\n            }\n            chartItem.cubicInterpolationMode = 'monotone';\n            chartItem.lineTension = 0;\n            chartItem.pointHoverRadius = 5;\n            chartItem.pointBorderWidth = 3;\n            chartItem.borderWidth = _this.timeScaleHelper.getLineThickness(dataAmount);\n            chartItem.pointRadius = _this.timeScaleHelper.getPointThickness(dataAmount);\n            chartItem.pointRadius = _this.pointRadius;\n        });\n    };\n    ChartComponent.prototype.setBarChartSettings = function () {\n        var _this = this;\n        this.chartData.forEach(function (item, index) {\n            var colors = _this.getColor(index);\n            var chartItem = item;\n            chartItem.backgroundColor = _this.rgba(colors, 0.6);\n            chartItem.borderColor = _this.rgba(colors, 1);\n            chartItem.hoverBackgroundColor = _this.rgba(colors, 0.8);\n            chartItem.hoverBorderColor = _this.rgba(colors, 1);\n            chartItem.borderWidth = 2;\n        });\n    };\n    ChartComponent.prototype.setPieChartSettings = function () {\n        var _this = this;\n        if (this.chartData == null || this.chartData.length == 0) {\n            return;\n        }\n        var chartItem = this.chartData[0];\n        chartItem.backgroundColor = [];\n        chartItem.borderColor = [];\n        chartItem.hoverBackgroundColor = [];\n        chartItem.hoverBorderColor = [];\n        chartItem.borderWidth = [2];\n        this.chartData[0].data.forEach(function (item, index) {\n            var colors = _this.getColor(index);\n            chartItem.backgroundColor.push(_this.rgba(colors, 0.6));\n            chartItem.borderColor.push(_this.rgba(colors, 1.0));\n            chartItem.hoverBackgroundColor.push(_this.rgba(colors, 0.8));\n            chartItem.hoverBorderColor.push(_this.rgba(colors, 1.0));\n        });\n    };\n    ChartComponent.prototype.setLineChartOptions = function () {\n        var optionsSettings = {\n            maintainAspectRatio: false,\n            hover: {\n                mode: 'x-axis'\n            },\n            scales: {\n                xAxes: [{\n                        ticks: { suggestedMin: 0 },\n                        gridLines: {\n                            display: false\n                        }\n                    }],\n                yAxes: [{\n                        display: true,\n                        ticks: { suggestedMin: 0 }\n                    }]\n            },\n            tooltips: {\n                mode: 'x-axis',\n                displayColors: true,\n                bodySpacing: 6,\n                callbacks: {\n                    title: function (tooltip, data) {\n                        return '';\n                    },\n                    label: function (tooltip, data) {\n                        var result = ' ' + data.datasets[tooltip.datasetIndex].label + ': ';\n                        if (tooltip.yLabel && (typeof tooltip.yLabel === 'number')) {\n                            var val = tooltip.yLabel;\n                            result += val.toFixed(2);\n                        }\n                        else {\n                            result += tooltip.yLabel;\n                        }\n                        return result;\n                    }\n                },\n            },\n            legend: {\n                position: 'bottom',\n                labels: {}\n            }\n        };\n        if (this.fontColor != null) {\n            optionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n            optionsSettings.scales.xAxes[0].ticks.fontColor = this.fontColor;\n            optionsSettings.legend.labels.fontColor = this.fontColor;\n        }\n        this.chartOptions = optionsSettings;\n    };\n    ChartComponent.prototype.setLineTimeChartOptions = function () {\n        var _this = this;\n        if (this.startDate == null || this.endDate == null)\n            return;\n        var scaleUnit = this.timeScaleHelper.getTimeScaleUnit(this.startDate, this.endDate, this.granularity);\n        var scaleStep = this.timeScaleHelper.getScaleStep(this.startDate, this.endDate, scaleUnit);\n        var dateFormat = this.timeScaleHelper.getDateFormatForScaleUnit(scaleUnit);\n        var optionsSettings = {\n            maintainAspectRatio: false,\n            hover: {\n                mode: 'x-axis'\n            },\n            tooltips: {\n                mode: 'x-axis',\n                displayColors: true,\n                bodySpacing: 6,\n                callbacks: {\n                    title: function (tooltip, data) {\n                        if (_this.endDate)\n                            return _this.timeScaleHelper.formatTooltipDateLabel(tooltip[0].xLabel, _this.startDate, _this.endDate, _this.granularity);\n                        return '';\n                    },\n                    label: function (tooltip, data) {\n                        return ' ' + data.datasets[tooltip.datasetIndex].label + ': ' + tooltip.yLabel;\n                    }\n                },\n            },\n            scales: {\n                xAxes: [{\n                        type: 'time',\n                        gridLines: {\n                            display: false\n                        },\n                        time: {\n                            displayFormats: {\n                                minute: dateFormat,\n                                hour: dateFormat,\n                                day: dateFormat,\n                                month: dateFormat,\n                                year: dateFormat\n                            },\n                            unit: scaleUnit,\n                            unitStepSize: scaleStep\n                        }\n                    }],\n                yAxes: [{\n                        display: true,\n                        ticks: { suggestedMin: 0 }\n                    }]\n            },\n            legend: {\n                position: 'bottom'\n            }\n        };\n        if (this.gridColor != null) {\n            optionsSettings.scales.xAxes[0].gridLines.color = this.gridColor;\n            optionsSettings.scales.yAxes[0].gridLines = { color: this.gridColor };\n        }\n        if (this.fontColor != null) {\n            optionsSettings.scales.xAxes[0].ticks = { fontColor: this.fontColor };\n            optionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n            optionsSettings.legend.labels = { fontColor: this.fontColor };\n        }\n        this.attachWeekends(optionsSettings);\n        this.chartOptions = optionsSettings;\n    };\n    ChartComponent.prototype.setBarChartOptions = function () {\n        var _this = this;\n        if (this.startDate == null || this.endDate == null)\n            return;\n        var scaleUnit = this.timeScaleHelper.getTimeScaleUnit(this.startDate, this.endDate, this.granularity);\n        var dateFormat = this.timeScaleHelper.getDateFormatForScaleUnit(scaleUnit);\n        var scaleStep = this.timeScaleHelper.getScaleStepAlt(this.getDataLength());\n        var optionsSettings = {\n            maintainAspectRatio: false,\n            tooltips: {\n                mode: 'x-axis',\n                displayColors: true,\n                bodySpacing: 6,\n                callbacks: {\n                    title: function (tooltip, data) {\n                        if (_this.endDate)\n                            return _this.timeScaleHelper\n                                .formatTooltipDateLabel(data.labels[tooltip[0].index], _this.startDate, _this.endDate, _this.granularity);\n                        return '';\n                    }\n                }\n            },\n            scales: {\n                xAxes: [{\n                        stacked: (this.chartData[0].data.length > 10 || this.chartStacked) ? true : false,\n                        gridLines: { display: false },\n                        ticks: {\n                            autoSkip: false,\n                            callback: function (label, index, labels) {\n                                return _this.timeScaleHelper.formatScaleDateLabel(label, dateFormat, index, labels);\n                            }\n                        }\n                    }],\n                yAxes: [{\n                        display: true,\n                        ticks: { suggestedMin: 0 }\n                    }]\n            },\n            legend: {\n                position: 'bottom'\n            }\n        };\n        this.attachWeekends(optionsSettings);\n        if (this.fontColor != null) {\n            optionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n            optionsSettings.scales.xAxes[0].ticks.fontColor = this.fontColor;\n            optionsSettings.legend.labels.fontColor = this.fontColor;\n        }\n        this.chartOptions = optionsSettings;\n    };\n    ChartComponent.prototype.setHorizontalBarChartOptions = function () {\n        var optionsSettings = {\n            maintainAspectRatio: false,\n            tooltips: {\n                mode: 'x-axis',\n                displayColors: true,\n                bodySpacing: 6\n            },\n            scales: {\n                xAxes: [{\n                        stacked: (this.chartData[0].data.length > 10 || this.chartStacked) ? true : false,\n                        gridLines: { display: false },\n                        ticks: {\n                            autoSkip: false\n                        }\n                    }],\n                yAxes: [{\n                        display: true,\n                        ticks: { suggestedMin: 0 }\n                    }]\n            },\n            legend: {\n                position: 'bottom'\n            }\n        };\n        if (this.fontColor != null) {\n            optionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n            optionsSettings.scales.xAxes[0].ticks.fontColor = this.fontColor;\n            optionsSettings.legend.labels.fontColor = this.fontColor;\n        }\n        this.chartOptions = optionsSettings;\n    };\n    ChartComponent.prototype.setPieChartOptions = function () {\n        var options = {\n            maintainAspectRatio: false,\n            tooltips: {\n                displayColors: true,\n                bodySpacing: 6,\n                callbacks: {\n                    label: function (tooltip, data) {\n                        var dataset = data.datasets[tooltip.datasetIndex];\n                        var meta = dataset._meta[Object.keys(dataset._meta)[0]];\n                        var total = meta.total;\n                        var currentValue = dataset.data[tooltip.index];\n                        var percentage = parseFloat((currentValue / total * 100).toFixed(1));\n                        return currentValue + ' (' + percentage + '%)';\n                    },\n                    title: function (tooltip, data) {\n                        return data.labels[tooltip[0].index];\n                    }\n                }\n            },\n            legend: {\n                position: 'bottom',\n            }\n        };\n        if (this.fontColor != null) {\n            options.legend.labels = { fontColor: this.fontColor };\n        }\n        this.chartOptions = options;\n    };\n    ChartComponent.prototype.getDataLength = function () {\n        if (!this.chartData || this.chartData === null || this.chartData === undefined || this.chartData.length <= 0\n            || !this.chartData[0].data || this.chartData[0] === null || this.chartData[0] === undefined)\n            return 0;\n        return this.chartData[0].data.length;\n    };\n    ChartComponent.prototype.rgba = function (colour, alpha) {\n        return 'rgba(' + colour.concat(alpha).join(',') + ')';\n    };\n    ChartComponent.prototype.parseRgbaStr = function (s) {\n        s = s.replace(/[^0-9,]+/g, '');\n        return s.split(',').map(parseFloat);\n    };\n    ChartComponent.prototype.attachWeekends = function (optionsSettings) {\n        if (this.startDate && this.endDate && (this.granularity == 'hour' || this.granularity == 'day')) {\n            var weekends = [], current = this.startDate.clone();\n            while (current.day(7).isBefore(this.endDate))\n                weekends.push(current.clone().day(-1));\n            var annotations = [];\n            for (var i = 0; i < weekends.length; i++)\n                if (this.chartType == 'lineTime')\n                    annotations.push(this.formatWeekendAnnotation(weekends[i].clone().startOf('day'), this.granularity == 'day'\n                        ? weekends[i].add(1, 'd').startOf('day')\n                        : weekends[i].add(1, 'd').endOf('day')));\n                else if (this.chartType == 'bar')\n                    annotations.push(this.formatWeekendAnnotation(weekends[i].clone().startOf('day').toISOString(), weekends[i].add(2, 'd').startOf('day').toISOString()));\n            optionsSettings.annotation = { drawTime: 'beforeDatasetsDraw', annotations: annotations };\n        }\n    };\n    ChartComponent.prototype.formatWeekendAnnotation = function (xMin, xMax) {\n        return { xMin: xMin, xMax: xMax, type: 'box', xScaleID: 'x-axis-0', backgroundColor: this.gridColor };\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", Object)\n    ], ChartComponent.prototype, \"pointRadius\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", typeof (_a = typeof Array !== \"undefined\" && Array) === \"function\" && _a || Object)\n    ], ChartComponent.prototype, \"chartData\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", typeof (_b = typeof Array !== \"undefined\" && Array) === \"function\" && _b || Object)\n    ], ChartComponent.prototype, \"chartLabels\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", typeof (_c = typeof chart_model[\"ChartType\"] !== \"undefined\" && chart_model[\"ChartType\"]) === \"function\" && _c || Object)\n    ], ChartComponent.prototype, \"chartType\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", String)\n    ], ChartComponent.prototype, \"chartHeight\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", typeof (_d = (typeof moment_default.a !== \"undefined\" && moment_default.a).Moment) === \"function\" && _d || Object)\n    ], ChartComponent.prototype, \"startDate\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", typeof (_e = (typeof moment_default.a !== \"undefined\" && moment_default.a).Moment) === \"function\" && _e || Object)\n    ], ChartComponent.prototype, \"endDate\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", typeof (_f = typeof chart_model[\"GranularityType\"] !== \"undefined\" && chart_model[\"GranularityType\"]) === \"function\" && _f || Object)\n    ], ChartComponent.prototype, \"granularity\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", Boolean)\n    ], ChartComponent.prototype, \"chartStacked\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", Object)\n    ], ChartComponent.prototype, \"fontColor\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", String)\n    ], ChartComponent.prototype, \"gridColor\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_component___metadata(\"design:type\", Array)\n    ], ChartComponent.prototype, \"datasetColors\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        chart_component___metadata(\"design:type\", typeof (_g = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _g || Object)\n    ], ChartComponent.prototype, \"onChartClicked\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        chart_component___metadata(\"design:type\", typeof (_h = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _h || Object)\n    ], ChartComponent.prototype, \"onChartHovered\", void 0);\n    chart_component___decorate([\n        Object(core_es5[\"ViewChild\"])('canvas', { read: core_es5[\"ElementRef\"] }),\n        chart_component___metadata(\"design:type\", typeof (_j = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _j || Object)\n    ], ChartComponent.prototype, \"canvasElement\", void 0);\n    ChartComponent = chart_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'chart',\n            template: \"<div class=\\\"canvas-wrapper\\\" [style.height]=\\\"chartHeight\\\" [hidden]=\\\"chartData == null\\\"><canvas #canvas></canvas></div><div class=\\\"loading-container\\\" [hidden]=\\\"chartData != null\\\" [style.height]=\\\"chartHeight\\\"><span class=\\\"spinner-small\\\"></span></div>\",\n            providers: [{ provide: ChartConfig, useValue: ChartConfigData }, chart_scale_helper_ChartScaleHelper]\n        }),\n        __param(2, Object(core_es5[\"Inject\"])(ChartConfig)),\n        chart_component___metadata(\"design:paramtypes\", [typeof (_k = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _k || Object, typeof (_l = typeof chart_scale_helper_ChartScaleHelper !== \"undefined\" && chart_scale_helper_ChartScaleHelper) === \"function\" && _l || Object, typeof (_m = typeof chart_model[\"ChartConfigModel\"] !== \"undefined\" && chart_model[\"ChartConfigModel\"]) === \"function\" && _m || Object])\n    ], ChartComponent);\n    return ChartComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/component/charts/chart.realtime.component.ts\nvar chart_realtime_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar chart_realtime_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar chart_realtime_component___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\nvar chart_realtime_component_ChartRealtimeComponent = (function () {\n    function ChartRealtimeComponent(cdr, chartScaleHelper, config) {\n        this.cdr = cdr;\n        this.chartScaleHelper = chartScaleHelper;\n        this.config = config;\n        this.pointRadius = 1;\n        this.chartType = 'line';\n        this.fontColor = null;\n        this.gridColor = null;\n        this.chartHeight = '300px';\n        this.onChartClicked = new core_es5[\"EventEmitter\"]();\n        this.onChartHovered = new core_es5[\"EventEmitter\"]();\n        this.isAfterViewInit = false;\n    }\n    ChartRealtimeComponent.prototype.ngAfterViewInit = function () {\n        this.isAfterViewInit = true;\n        this.createChart();\n    };\n    ChartRealtimeComponent.prototype.ngOnChanges = function (changes) {\n        if (this.isAfterViewInit)\n            if ((changes['chartData'] && changes['chartData'] != undefined && changes['chartData'] != null) ||\n                (changes['chartType'] && changes['chartType'] != undefined && changes['chartType'] != null\n                    && this.chartData)) {\n                this.createChart();\n            }\n    };\n    ChartRealtimeComponent.prototype.ngOnDestroy = function () {\n        this.destroyChart();\n    };\n    ChartRealtimeComponent.prototype.destroyChart = function () {\n        if (this.chartInstance) {\n            this.chartInstance.destroy();\n        }\n    };\n    ChartRealtimeComponent.prototype.createChart = function () {\n        if (!this.chartData)\n            return;\n        this.destroyChart();\n        this.setChartSettingsAndOptions();\n        var conf = {\n            type: (this.chartType == 'lineTime' ? 'line' : this.chartType),\n            options: this.chartOptions,\n            data: {\n                labels: this.chartLabels,\n                datasets: this.chartData\n            }\n        };\n        this.chartInstance = new Chart(this.canvasElement.nativeElement.getContext('2d'), conf);\n    };\n    ChartRealtimeComponent.prototype.onChartTypeChange = function (chartType) {\n        this.chartType = chartType;\n        this.createChart();\n    };\n    ChartRealtimeComponent.prototype.setChartSettingsAndOptions = function () {\n        switch (this.chartType) {\n            case 'line':\n                this.setLineChartOptions();\n                this.setLineChartSettings();\n                break;\n            case 'bar':\n                this.setBarChartOptions();\n                this.setBarChartSettings();\n                break;\n            default:\n                console.warn('ChartComponent -> ChartType not defined or invalid!');\n                break;\n        }\n    };\n    ChartRealtimeComponent.prototype.setLineChartSettings = function () {\n        var _this = this;\n        this.chartData.forEach(function (item, index) {\n            var colors = _this.config.datasetColors[index];\n            var chartItem = item;\n            chartItem.backgroundColor = _this.rgba(colors, 0.6);\n            chartItem.borderColor = _this.rgba(colors, 1);\n            chartItem.hoverBackgroundColor = _this.rgba(colors, 0.8);\n            chartItem.hoverBorderColor = _this.rgba(colors, 1);\n            chartItem.borderWidth = 2;\n            chartItem.pointRadius = _this.pointRadius;\n        });\n    };\n    ChartRealtimeComponent.prototype.setBarChartSettings = function () {\n        var _this = this;\n        this.chartData.forEach(function (item, index) {\n            var colors = _this.config.datasetColors[index];\n            var chartItem = item;\n            chartItem.backgroundColor = _this.rgba(colors, 0.6);\n            chartItem.borderColor = _this.rgba(colors, 1);\n            chartItem.hoverBackgroundColor = _this.rgba(colors, 0.8);\n            chartItem.hoverBorderColor = _this.rgba(colors, 1);\n            chartItem.borderWidth = 2;\n        });\n    };\n    ChartRealtimeComponent.prototype.setLineChartOptions = function () {\n        var optionsSettings = {\n            maintainAspectRatio: false,\n            animation: false,\n            hover: {\n                mode: 'x-axis'\n            },\n            scales: {\n                xAxes: [{\n                        gridLines: {\n                            display: false\n                        },\n                        ticks: {\n                            autoSkip: false,\n                            callback: this.chartScaleHelper.makeTickLabelSamplingCallback(40)\n                        }\n                    }],\n                yAxes: [{\n                        display: true,\n                        ticks: { suggestedMin: 0 }\n                    }]\n            },\n            tooltips: {\n                mode: 'x-axis',\n                displayColors: true,\n                bodySpacing: 6\n            },\n            legend: {\n                display: false\n            }\n        };\n        if (this.fontColor != null) {\n            optionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n            optionsSettings.scales.xAxes[0].ticks.fontColor = this.fontColor;\n        }\n        if (this.gridColor != null) {\n            optionsSettings.scales.xAxes[0].gridLines.color = this.gridColor;\n        }\n        this.chartOptions = optionsSettings;\n    };\n    ChartRealtimeComponent.prototype.setBarChartOptions = function () {\n        var optionsSettings = {\n            maintainAspectRatio: false,\n            animation: false,\n            tooltips: {\n                mode: 'x-axis',\n                displayColors: true,\n                bodySpacing: 6,\n                callbacks: {\n                    title: function (tooltip, data) {\n                        return '';\n                    }\n                }\n            },\n            scales: {\n                xAxes: [{\n                        stacked: (this.chartData[0].data.length > 10) ? true : false,\n                        gridLines: { display: false },\n                        ticks: {\n                            autoSkip: false\n                        }\n                    }],\n                yAxes: [{\n                        display: true,\n                        ticks: { suggestedMin: 0 }\n                    }]\n            },\n            legend: {\n                display: false\n            }\n        };\n        this.chartOptions = optionsSettings;\n    };\n    ChartRealtimeComponent.prototype.getDataLength = function () {\n        if (!this.chartData || this.chartData === null || this.chartData === undefined || this.chartData.length <= 0\n            || !this.chartData[0].data || this.chartData[0] === null || this.chartData[0] === undefined)\n            return 0;\n        return this.chartData[0].data.length;\n    };\n    ChartRealtimeComponent.prototype.rgba = function (colour, alpha) {\n        return 'rgba(' + colour.concat(alpha).join(',') + ')';\n    };\n    ChartRealtimeComponent.prototype.parseRgbaStr = function (s) {\n        s = s.replace(/[^0-9,]+/g, '');\n        return s.split(',').map(parseFloat);\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n    chart_realtime_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_realtime_component___metadata(\"design:type\", Object)\n    ], ChartRealtimeComponent.prototype, \"pointRadius\", void 0);\n    chart_realtime_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_realtime_component___metadata(\"design:type\", typeof (_a = typeof Array !== \"undefined\" && Array) === \"function\" && _a || Object)\n    ], ChartRealtimeComponent.prototype, \"chartData\", void 0);\n    chart_realtime_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_realtime_component___metadata(\"design:type\", typeof (_b = typeof Array !== \"undefined\" && Array) === \"function\" && _b || Object)\n    ], ChartRealtimeComponent.prototype, \"chartLabels\", void 0);\n    chart_realtime_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_realtime_component___metadata(\"design:type\", typeof (_c = typeof chart_model[\"ChartType\"] !== \"undefined\" && chart_model[\"ChartType\"]) === \"function\" && _c || Object)\n    ], ChartRealtimeComponent.prototype, \"chartType\", void 0);\n    chart_realtime_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_realtime_component___metadata(\"design:type\", Object)\n    ], ChartRealtimeComponent.prototype, \"fontColor\", void 0);\n    chart_realtime_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_realtime_component___metadata(\"design:type\", Object)\n    ], ChartRealtimeComponent.prototype, \"gridColor\", void 0);\n    chart_realtime_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_realtime_component___metadata(\"design:type\", String)\n    ], ChartRealtimeComponent.prototype, \"chartHeight\", void 0);\n    chart_realtime_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        chart_realtime_component___metadata(\"design:type\", typeof (_d = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _d || Object)\n    ], ChartRealtimeComponent.prototype, \"onChartClicked\", void 0);\n    chart_realtime_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        chart_realtime_component___metadata(\"design:type\", typeof (_e = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _e || Object)\n    ], ChartRealtimeComponent.prototype, \"onChartHovered\", void 0);\n    chart_realtime_component___decorate([\n        Object(core_es5[\"ViewChild\"])('canvas', { read: core_es5[\"ElementRef\"] }),\n        chart_realtime_component___metadata(\"design:type\", typeof (_f = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _f || Object)\n    ], ChartRealtimeComponent.prototype, \"canvasElement\", void 0);\n    ChartRealtimeComponent = chart_realtime_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'chart-realtime',\n            template: \"<div [style.height]=\\\"chartHeight\\\" [hidden]=\\\"chartData == null\\\"><canvas #canvas></canvas></div><div class=\\\"loading-container\\\" [hidden]=\\\"chartData != null\\\" [style.height]=\\\"chartHeight\\\"><span class=\\\"spinner-small\\\"></span></div>\",\n            providers: [{ provide: ChartConfig, useValue: ChartConfigData }, chart_scale_helper_ChartScaleHelper]\n        }),\n        chart_realtime_component___param(2, Object(core_es5[\"Inject\"])(ChartConfig)),\n        chart_realtime_component___metadata(\"design:paramtypes\", [typeof (_g = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _g || Object, typeof (_h = typeof chart_scale_helper_ChartScaleHelper !== \"undefined\" && chart_scale_helper_ChartScaleHelper) === \"function\" && _h || Object, typeof (_j = typeof chart_model[\"ChartConfigModel\"] !== \"undefined\" && chart_model[\"ChartConfigModel\"]) === \"function\" && _j || Object])\n    ], ChartRealtimeComponent);\n    return ChartRealtimeComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/component/charts/chart.granularity.component.ts\nvar chart_granularity_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar chart_granularity_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar chart_granularity_component_ChartGranularityComponent = (function () {\n    function ChartGranularityComponent(cdr) {\n        this.cdr = cdr;\n        this.enable = true;\n        this.btnSize = 'md';\n        this.onTypeChange = new core_es5[\"EventEmitter\"]();\n        this.hourOption = false;\n        this.dayOption = false;\n        this.weekOption = false;\n        this.monthOption = false;\n        this.yearOption = false;\n        this.hourEnable = true;\n        this.dayEnable = true;\n        this.weekEnable = true;\n        this.monthEnable = true;\n        this.yearEnable = true;\n    }\n    ChartGranularityComponent.prototype.ngOnChanges = function (changes) {\n        this.setAvailableTypes();\n        this.setStates();\n        this.cdr.markForCheck();\n    };\n    ChartGranularityComponent.prototype.onGranularityTypeChange = function (type) {\n        if (this.activeType !== type) {\n            this.activeType = type;\n            if (this.onTypeChange)\n                this.onTypeChange.emit(this.activeType);\n        }\n    };\n    ChartGranularityComponent.prototype.setAvailableTypes = function () {\n        var _this = this;\n        this.hideAllOptions();\n        if (this.types) {\n            this.types.every(function (ele) {\n                switch (ele) {\n                    case 'all':\n                        _this.showAllOptions();\n                        return false;\n                    case 'hour':\n                        _this.hourOption = true;\n                        break;\n                    case 'day':\n                        _this.dayOption = true;\n                        break;\n                    case 'week':\n                        _this.weekOption = true;\n                        break;\n                    case 'month':\n                        _this.monthOption = true;\n                        break;\n                    case 'year':\n                        _this.yearOption = true;\n                        break;\n                    default:\n                        break;\n                }\n                return true;\n            });\n        }\n    };\n    ChartGranularityComponent.prototype.setStates = function () {\n        var _this = this;\n        this.enableAllOptions();\n        if (this.disabledTypes) {\n            this.disabledTypes.every(function (ele) {\n                switch (ele) {\n                    case 'all':\n                        _this.disableAllOptions();\n                        return false;\n                    case 'hour':\n                        _this.hourEnable = false;\n                        break;\n                    case 'day':\n                        _this.dayEnable = false;\n                        break;\n                    case 'week':\n                        _this.weekEnable = false;\n                        break;\n                    case 'month':\n                        _this.monthEnable = false;\n                        break;\n                    case 'year':\n                        _this.yearEnable = false;\n                        break;\n                    default:\n                        break;\n                }\n                return true;\n            });\n        }\n    };\n    ChartGranularityComponent.prototype.hideAllOptions = function () {\n        this.hourOption = false;\n        this.dayOption = false;\n        this.weekOption = false;\n        this.monthOption = false;\n        this.yearOption = false;\n    };\n    ChartGranularityComponent.prototype.showAllOptions = function () {\n        this.hourOption = true;\n        this.dayOption = true;\n        this.weekOption = true;\n        this.monthOption = true;\n        this.yearOption = true;\n    };\n    ChartGranularityComponent.prototype.disableAllOptions = function () {\n        this.hourEnable = false;\n        this.dayEnable = false;\n        this.weekEnable = false;\n        this.monthEnable = false;\n        this.yearEnable = false;\n    };\n    ChartGranularityComponent.prototype.enableAllOptions = function () {\n        this.hourEnable = true;\n        this.dayEnable = true;\n        this.weekEnable = true;\n        this.monthEnable = true;\n        this.yearEnable = true;\n    };\n    var _a, _b, _c, _d, _e, _f;\n    chart_granularity_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_granularity_component___metadata(\"design:type\", Boolean)\n    ], ChartGranularityComponent.prototype, \"enable\", void 0);\n    chart_granularity_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_granularity_component___metadata(\"design:type\", typeof (_a = typeof Array !== \"undefined\" && Array) === \"function\" && _a || Object)\n    ], ChartGranularityComponent.prototype, \"types\", void 0);\n    chart_granularity_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_granularity_component___metadata(\"design:type\", typeof (_b = typeof Array !== \"undefined\" && Array) === \"function\" && _b || Object)\n    ], ChartGranularityComponent.prototype, \"disabledTypes\", void 0);\n    chart_granularity_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_granularity_component___metadata(\"design:type\", typeof (_c = typeof chart_model[\"GranularityType\"] !== \"undefined\" && chart_model[\"GranularityType\"]) === \"function\" && _c || Object)\n    ], ChartGranularityComponent.prototype, \"activeType\", void 0);\n    chart_granularity_component___decorate([\n        Object(core_es5[\"Input\"])('size'),\n        chart_granularity_component___metadata(\"design:type\", typeof (_d = typeof chart_model[\"ControlSize\"] !== \"undefined\" && chart_model[\"ControlSize\"]) === \"function\" && _d || Object)\n    ], ChartGranularityComponent.prototype, \"btnSize\", void 0);\n    chart_granularity_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        chart_granularity_component___metadata(\"design:type\", typeof (_e = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _e || Object)\n    ], ChartGranularityComponent.prototype, \"onTypeChange\", void 0);\n    ChartGranularityComponent = chart_granularity_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'chart-granularity',\n            template: \"\\n\\t\\t<div *ngIf=\\\"enable\\\" [ngClass]=\\\"{'btn-group':true, 'btn-group-lg':btnSize==='lg','btn-group-md':btnSize==='md','btn-group-sm':btnSize==='sm','btn-group-xs':btnSize==='xs'}\\\" role=\\\"group\\\" aria-label=\\\"granularity selector\\\">\\n\\t\\t\\t<button *ngIf=\\\"hourOption\\\" (click)=\\\"onGranularityTypeChange('hour')\\\" \\n\\t\\t\\t\\t[ngClass]=\\\"{'btn btn-white':true, active: activeType === 'hour'}\\\" [disabled]=\\\"!hourEnable\\\">\\n\\t\\t\\t\\t{{ 'ANALYTICS_AUDIENCE.WORD.HOUR' | translate:lang }}\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"dayOption\\\" (click)=\\\"onGranularityTypeChange('day')\\\"\\n\\t\\t\\t\\t[ngClass]=\\\"{'btn btn-white':true, active: activeType === 'day'}\\\" [disabled]=\\\"!dayEnable\\\">\\n\\t\\t\\t\\t{{ 'ANALYTICS_AUDIENCE.WORD.DAY' | translate:lang }}\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"weekOption\\\" (click)=\\\"onGranularityTypeChange('week')\\\"\\n\\t\\t\\t\\t[ngClass]=\\\"{'btn btn-white':true, active: activeType === 'week'}\\\" [disabled]=\\\"!weekEnable\\\">\\n\\t\\t\\t\\t{{ 'ANALYTICS_AUDIENCE.WORD.WEEK' | translate:lang }}\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"monthOption\\\" (click)=\\\"onGranularityTypeChange('month')\\\"\\n\\t\\t\\t\\t[ngClass]=\\\"{'btn btn-white':true, active: activeType === 'month'}\\\" [disabled]=\\\"!monthEnable\\\">\\n\\t\\t\\t\\t{{ 'ANALYTICS_AUDIENCE.WORD.MONTH' | translate:lang }}\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"yearOption\\\" (click)=\\\"onGranularityTypeChange('year')\\\"\\n\\t\\t\\t\\t[ngClass]=\\\"{'btn btn-white':true, active: activeType === 'year'}\\\" [disabled]=\\\"!yearEnable\\\">\\n\\t\\t\\t\\t{{ 'ANALYTICS_AUDIENCE.WORD.YEAR' | translate:lang }}\\n\\t\\t\\t</button>\\n\\t\\t</div>\\n\\t\\t\",\n            styles: [\n                '@media (max-width: 600px) { :host {display:none;} }'\n            ],\n        }),\n        chart_granularity_component___metadata(\"design:paramtypes\", [typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], ChartGranularityComponent);\n    return ChartGranularityComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/component/charts/chart.categories.component.ts\nvar chart_categories_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar chart_categories_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar chart_categories_component___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\nvar chart_categories_component_ChartCategoriesComponent = (function () {\n    function ChartCategoriesComponent(cdr, chartScaleHelper, config) {\n        this.cdr = cdr;\n        this.chartScaleHelper = chartScaleHelper;\n        this.config = config;\n        this.pointRadius = 1;\n        this.fontColor = null;\n        this.gridColor = null;\n        this.chartHeight = '300px';\n        this.onChartClicked = new core_es5[\"EventEmitter\"]();\n        this.onChartHovered = new core_es5[\"EventEmitter\"]();\n        this.isAfterViewInit = false;\n    }\n    ChartCategoriesComponent.prototype.ngAfterViewInit = function () {\n        this.isAfterViewInit = true;\n        this.createChart();\n    };\n    ChartCategoriesComponent.prototype.ngOnChanges = function (changes) {\n        if (this.isAfterViewInit)\n            if ((changes['chartData'] && changes['chartData'] != undefined && changes['chartData'] != null) ||\n                this.chartData) {\n                this.createChart();\n            }\n    };\n    ChartCategoriesComponent.prototype.ngOnDestroy = function () {\n        this.destroyChart();\n    };\n    ChartCategoriesComponent.prototype.destroyChart = function () {\n        if (this.chartInstance) {\n            this.chartInstance.destroy();\n        }\n    };\n    ChartCategoriesComponent.prototype.createChart = function () {\n        if (!this.chartData)\n            return;\n        this.destroyChart();\n        this.setChartSettingsAndOptions();\n        var conf = {\n            type: 'bar',\n            options: this.chartOptions,\n            data: {\n                labels: this.chartLabels,\n                datasets: this.chartData\n            }\n        };\n        this.chartInstance = new Chart(this.canvasElement.nativeElement.getContext('2d'), conf);\n    };\n    ChartCategoriesComponent.prototype.setChartSettingsAndOptions = function () {\n        this.setBarChartOptions();\n        this.setBarChartSettings();\n    };\n    ChartCategoriesComponent.prototype.setBarChartSettings = function () {\n        var _this = this;\n        this.chartData.forEach(function (item, index) {\n            var colors = _this.config.datasetColors[index];\n            var chartItem = item;\n            chartItem.backgroundColor = _this.rgba(colors, 0.6);\n            chartItem.borderColor = _this.rgba(colors, 1);\n            chartItem.hoverBackgroundColor = _this.rgba(colors, 0.8);\n            chartItem.hoverBorderColor = _this.rgba(colors, 1);\n            chartItem.borderWidth = 2;\n        });\n    };\n    ChartCategoriesComponent.prototype.setBarChartOptions = function () {\n        var optionsSettings = {\n            maintainAspectRatio: false,\n            animation: false,\n            tooltips: {\n                mode: 'x-axis',\n                displayColors: true,\n                bodySpacing: 6,\n                callbacks: {\n                    title: function (tooltip, data) {\n                        return '';\n                    }\n                }\n            },\n            scales: {\n                xAxes: [{\n                        stacked: (this.chartData[0].data.length > 10) ? true : false,\n                        gridLines: { display: false },\n                        ticks: {\n                            autoSkip: false\n                        }\n                    }],\n                yAxes: [{\n                        display: true,\n                        ticks: { suggestedMin: 0 }\n                    }]\n            },\n            legend: {\n                display: true\n            }\n        };\n        this.chartOptions = optionsSettings;\n    };\n    ChartCategoriesComponent.prototype.getDataLength = function () {\n        if (!this.chartData || this.chartData === null || this.chartData === undefined || this.chartData.length <= 0\n            || !this.chartData[0].data || this.chartData[0] === null || this.chartData[0] === undefined)\n            return 0;\n        return this.chartData[0].data.length;\n    };\n    ChartCategoriesComponent.prototype.rgba = function (colour, alpha) {\n        return 'rgba(' + colour.concat(alpha).join(',') + ')';\n    };\n    ChartCategoriesComponent.prototype.parseRgbaStr = function (s) {\n        s = s.replace(/[^0-9,]+/g, '');\n        return s.split(',').map(parseFloat);\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    chart_categories_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_categories_component___metadata(\"design:type\", Object)\n    ], ChartCategoriesComponent.prototype, \"pointRadius\", void 0);\n    chart_categories_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_categories_component___metadata(\"design:type\", typeof (_a = typeof Array !== \"undefined\" && Array) === \"function\" && _a || Object)\n    ], ChartCategoriesComponent.prototype, \"chartData\", void 0);\n    chart_categories_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_categories_component___metadata(\"design:type\", typeof (_b = typeof Array !== \"undefined\" && Array) === \"function\" && _b || Object)\n    ], ChartCategoriesComponent.prototype, \"chartLabels\", void 0);\n    chart_categories_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_categories_component___metadata(\"design:type\", Object)\n    ], ChartCategoriesComponent.prototype, \"fontColor\", void 0);\n    chart_categories_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_categories_component___metadata(\"design:type\", Object)\n    ], ChartCategoriesComponent.prototype, \"gridColor\", void 0);\n    chart_categories_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_categories_component___metadata(\"design:type\", String)\n    ], ChartCategoriesComponent.prototype, \"chartHeight\", void 0);\n    chart_categories_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        chart_categories_component___metadata(\"design:type\", typeof (_c = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _c || Object)\n    ], ChartCategoriesComponent.prototype, \"onChartClicked\", void 0);\n    chart_categories_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        chart_categories_component___metadata(\"design:type\", typeof (_d = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _d || Object)\n    ], ChartCategoriesComponent.prototype, \"onChartHovered\", void 0);\n    chart_categories_component___decorate([\n        Object(core_es5[\"ViewChild\"])('canvas', { read: core_es5[\"ElementRef\"] }),\n        chart_categories_component___metadata(\"design:type\", typeof (_e = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _e || Object)\n    ], ChartCategoriesComponent.prototype, \"canvasElement\", void 0);\n    ChartCategoriesComponent = chart_categories_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'chart-categories',\n            template: \"<div [style.height]=\\\"chartHeight\\\" [hidden]=\\\"chartData == null\\\"><canvas #canvas></canvas></div><div class=\\\"loading-container\\\" [hidden]=\\\"chartData != null\\\" [style.height]=\\\"chartHeight\\\"><span class=\\\"spinner-small\\\"></span></div>\",\n            providers: [{ provide: ChartConfig, useValue: ChartConfigData }, chart_scale_helper_ChartScaleHelper]\n        }),\n        chart_categories_component___param(2, Object(core_es5[\"Inject\"])(ChartConfig)),\n        chart_categories_component___metadata(\"design:paramtypes\", [typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object, typeof (_g = typeof chart_scale_helper_ChartScaleHelper !== \"undefined\" && chart_scale_helper_ChartScaleHelper) === \"function\" && _g || Object, typeof (_h = typeof chart_model[\"ChartConfigModel\"] !== \"undefined\" && chart_model[\"ChartConfigModel\"]) === \"function\" && _h || Object])\n    ], ChartCategoriesComponent);\n    return ChartCategoriesComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/component/charts/chart.picker.component.ts\nvar chart_picker_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar chart_picker_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar chart_picker_component_ChartPickerComponent = (function () {\n    function ChartPickerComponent(cdr) {\n        this.cdr = cdr;\n        this.enable = true;\n        this.size = 'md';\n        this.chartTypeChanged = new core_es5[\"EventEmitter\"]();\n        this.lineOption = false;\n        this.lineTimeOption = false;\n        this.barOption = false;\n        this.pieOption = false;\n        this.doughnutOption = false;\n    }\n    ChartPickerComponent.prototype.ngOnChanges = function (changes) {\n        this.setActiveChartTypes();\n        this.cdr.markForCheck();\n    };\n    ChartPickerComponent.prototype.onChartTypeChange = function (chartType) {\n        if (chartType != this.activeType && this.chartTypeChanged) {\n            this.activeType = chartType;\n            this.chartTypeChanged.emit(chartType);\n            this.cdr.markForCheck();\n        }\n    };\n    ChartPickerComponent.prototype.setActiveChartTypes = function () {\n        var _this = this;\n        this.lineOption = false;\n        this.lineTimeOption = false;\n        this.barOption = false;\n        this.pieOption = false;\n        this.doughnutOption = false;\n        if (this.chartTypes)\n            this.chartTypes.every(function (value) {\n                switch (value) {\n                    case 'all':\n                        _this.lineOption = true;\n                        _this.barOption = true;\n                        _this.pieOption = true;\n                        return false;\n                    case 'line':\n                        _this.lineOption = true;\n                        break;\n                    case 'lineTime':\n                        _this.lineTimeOption = true;\n                        break;\n                    case 'bar':\n                        _this.barOption = true;\n                        break;\n                    case 'pie':\n                        _this.pieOption = true;\n                        break;\n                    case 'doughnut':\n                        _this.pieOption = true;\n                        break;\n                    default:\n                        break;\n                }\n                return true;\n            });\n        this.cdr.markForCheck();\n    };\n    var _a, _b, _c, _d, _e;\n    chart_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_picker_component___metadata(\"design:type\", Boolean)\n    ], ChartPickerComponent.prototype, \"enable\", void 0);\n    chart_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_picker_component___metadata(\"design:type\", typeof (_a = typeof Array !== \"undefined\" && Array) === \"function\" && _a || Object)\n    ], ChartPickerComponent.prototype, \"chartTypes\", void 0);\n    chart_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_picker_component___metadata(\"design:type\", typeof (_b = typeof chart_model[\"ChartType\"] !== \"undefined\" && chart_model[\"ChartType\"]) === \"function\" && _b || Object)\n    ], ChartPickerComponent.prototype, \"activeType\", void 0);\n    chart_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        chart_picker_component___metadata(\"design:type\", typeof (_c = typeof chart_model[\"ControlSize\"] !== \"undefined\" && chart_model[\"ControlSize\"]) === \"function\" && _c || Object)\n    ], ChartPickerComponent.prototype, \"size\", void 0);\n    chart_picker_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        chart_picker_component___metadata(\"design:type\", typeof (_d = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _d || Object)\n    ], ChartPickerComponent.prototype, \"chartTypeChanged\", void 0);\n    ChartPickerComponent = chart_picker_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'chart-picker',\n            template: \"\\n\\t\\t<div *ngIf=\\\"enable\\\" role=\\\"group\\\" aria-label=\\\"chart type selector\\\" [ngClass]=\\\"{\\n\\t\\t\\t'btn-group':true, \\n\\t\\t\\t'btn-group-lg':size==='lg',\\n\\t\\t\\t'btn-group-md':size==='md',\\n\\t\\t\\t'btn-group-sm':size==='sm',\\n\\t\\t\\t'btn-group-xs':size==='xs'}\\\">\\n\\t\\t\\t<button *ngIf=\\\"lineOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'line'\\\" (click)=\\\"onChartTypeChange('line')\\\">\\n\\t\\t\\t\\t<span class=\\\"fa fa-line-chart\\\" aria-hidden=\\\"true\\\"></span>\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"lineTimeOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'lineTime'\\\" (click)=\\\"onChartTypeChange('lineTime')\\\">\\n\\t\\t\\t\\t<span class=\\\"fa fa-line-chart\\\" aria-hidden=\\\"true\\\"></span>\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"barOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'bar'\\\" (click)=\\\"onChartTypeChange('bar')\\\">\\n\\t\\t\\t\\t<span class=\\\"fa fa-bar-chart\\\" aria-hidden=\\\"true\\\"></span>\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"pieOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'pie'\\\" (click)=\\\"onChartTypeChange('pie')\\\">\\n\\t\\t\\t\\t<span class=\\\"fa fa-pie-chart\\\" aria-hidden=\\\"true\\\"></span>\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t <button *ngIf=\\\"doughnutOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'doughnut'\\\" (click)=\\\"onChartTypeChange('doughnut')\\\">\\n\\t\\t\\t\\t<span class=\\\"fa fa-pie-chart\\\" aria-hidden=\\\"true\\\"></span>\\n\\t\\t\\t</button>\\n\\t\\t</div>\",\n            styles: [\n                '@media (max-width: 600px) { :host {display:none;} }'\n            ],\n        }),\n        chart_picker_component___metadata(\"design:paramtypes\", [typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object])\n    ], ChartPickerComponent);\n    return ChartPickerComponent;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/analytics/component/date-range-picker/daterangepicker.component.ts\nvar daterangepicker_component = __webpack_require__(1354);\n\n// CONCATENATED MODULE: ./src/module/analytics/component/charts/chart.module.ts\nvar chart_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar chart_module_COMP = [\n    chart_component_ChartComponent,\n    chart_realtime_component_ChartRealtimeComponent,\n    chart_granularity_component_ChartGranularityComponent,\n    chart_categories_component_ChartCategoriesComponent,\n    chart_picker_component_ChartPickerComponent,\n    daterangepicker_component[\"a\" /* DateRangePickerComponent */]\n];\nvar chart_module_ChartModule = (function () {\n    function ChartModule() {\n    }\n    ChartModule = chart_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                forms_es5[\"FormsModule\"],\n            ],\n            declarations: chart_module_COMP,\n            exports: chart_module_COMP\n        })\n    ], ChartModule);\n    return ChartModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/check/check.buttons.component.ts\nvar check_buttons_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar check_buttons_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar check_buttons_component_CheckButtonsComponent = (function () {\n    function CheckButtonsComponent() {\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n    }\n    CheckButtonsComponent.prototype.icon = function (item) {\n        var _a;\n        var val = null;\n        if (this.iconMapKeys == null)\n            this.iconMapKeys = Object.keys(this.iconMap);\n        var idx = this.iconMapKeys.indexOf(item);\n        if (idx > -1)\n            val = (_a = {}, _a[this.iconMap[this.iconMapKeys[idx]]] = true, _a);\n        return val;\n    };\n    CheckButtonsComponent.prototype.click = function (item) {\n        if (this.value != null) {\n            var idx = this.value.indexOf(item);\n            if (idx > -1)\n                this.value.splice(idx, 1);\n            else\n                this.value.push(item);\n            this.valueChange.emit(this.value);\n        }\n    };\n    CheckButtonsComponent.prototype.isActive = function (item) {\n        return this.value.indexOf(item) > -1;\n    };\n    CheckButtonsComponent = check_buttons_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'check-buttons',\n            inputs: ['name', 'model', 'value', 'iconMap'],\n            outputs: ['valueChange'],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            template: __webpack_require__(1355),\n            styles: [__webpack_require__(1356)]\n        }),\n        check_buttons_component___metadata(\"design:paramtypes\", [])\n    ], CheckButtonsComponent);\n    return CheckButtonsComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/directive/floatOnly.directive.ts\nvar floatOnly_directive___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar floatOnly_directive___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar floatOnly_directive_InputFloatOnlyDirective = (function () {\n    function InputFloatOnlyDirective() {\n        this.floatonly = true;\n    }\n    InputFloatOnlyDirective.prototype.onlyDecimalNumberKey = function (event) {\n        if (!this.floatonly)\n            return true;\n        var charCode = (event.which) ? event.which : event.keyCode;\n        if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))\n            return false;\n        return true;\n    };\n    floatOnly_directive___decorate([\n        Object(core_es5[\"Input\"])(),\n        floatOnly_directive___metadata(\"design:type\", Object)\n    ], InputFloatOnlyDirective.prototype, \"floatonly\", void 0);\n    InputFloatOnlyDirective = floatOnly_directive___decorate([\n        Object(core_es5[\"Directive\"])({\n            selector: '[ngModel][floatonly]',\n            host: {\n                '(keypress)': 'onlyDecimalNumberKey($event)'\n            }\n        }),\n        floatOnly_directive___metadata(\"design:paramtypes\", [])\n    ], InputFloatOnlyDirective);\n    return InputFloatOnlyDirective;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/directive/integerOnly.directive.ts\nvar integerOnly_directive___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar integerOnly_directive___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar integerOnly_directive_InputIntegerOnlyDirective = (function () {\n    function InputIntegerOnlyDirective() {\n        this.integeronly = true;\n    }\n    InputIntegerOnlyDirective.prototype.onlyNumberKey = function (event) {\n        if (!this.integeronly)\n            return true;\n        return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57;\n    };\n    integerOnly_directive___decorate([\n        Object(core_es5[\"Input\"])(),\n        integerOnly_directive___metadata(\"design:type\", Object)\n    ], InputIntegerOnlyDirective.prototype, \"integeronly\", void 0);\n    InputIntegerOnlyDirective = integerOnly_directive___decorate([\n        Object(core_es5[\"Directive\"])({\n            selector: '[ngModel][integeronly]',\n            host: {\n                '(keypress)': 'onlyNumberKey($event)'\n            }\n        }),\n        integerOnly_directive___metadata(\"design:paramtypes\", [])\n    ], InputIntegerOnlyDirective);\n    return InputIntegerOnlyDirective;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/dropdown/dropdown.model.ts\nvar DropdownListDirection;\n(function (DropdownListDirection) {\n    DropdownListDirection[DropdownListDirection[\"down\"] = 0] = \"down\";\n    DropdownListDirection[DropdownListDirection[\"up\"] = 1] = \"up\";\n})(DropdownListDirection || (DropdownListDirection = {}));\n\n// EXTERNAL MODULE: ./src/util/dom.util.ts\nvar dom_util = __webpack_require__(55);\n\n// CONCATENATED MODULE: ./src/module/form/dropdown/list/dropdown.list.pipe.ts\nvar dropdown_list_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar dropdown_list_pipe_DropdownListPipe = (function () {\n    function DropdownListPipe() {\n    }\n    DropdownListPipe.prototype.transform = function (value, selected) {\n        if (selected == null)\n            return value;\n        return value.filter(function (i) { return i.value != selected.value; });\n    };\n    DropdownListPipe = dropdown_list_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'dropdownListPipe' })\n    ], DropdownListPipe);\n    return DropdownListPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/dropdown/dropdown.animation.ts\n\nvar ShadowAnimation = Object(core_es5[\"trigger\"])('ShadowAnimation', [\n    Object(core_es5[\"state\"])('active', Object(core_es5[\"style\"])({ boxShadow: '0px 2px 2px 0px rgba(0, 0, 0, 0.25)' })),\n    Object(core_es5[\"state\"])('inactive', Object(core_es5[\"style\"])({ boxShadow: 'none' })),\n    Object(core_es5[\"transition\"])('inactive => active', Object(core_es5[\"animate\"])('100ms ease-in')),\n    Object(core_es5[\"transition\"])('active => inactive', Object(core_es5[\"animate\"])('100ms ease-out'))\n]);\n\n// CONCATENATED MODULE: ./src/module/form/dropdown/dropdown.component.ts\nvar dropdown_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar dropdown_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar dropdown_component_DropdownComponent = (function () {\n    function DropdownComponent(element) {\n        this.element = element;\n        this.active = false;\n        this.dirValue = DropdownListDirection;\n        this.direction = DropdownListDirection.down;\n        this.onSelect = new core_es5[\"EventEmitter\"]();\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n        this.selected = 0;\n    }\n    DropdownComponent.prototype.ngOnChanges = function (changes) {\n        if (changes.hasOwnProperty('model') && this.model.length > 0) {\n            this.disabled = this.model.length < 2;\n            this.selectedItem = this.model[this.selected];\n        }\n        if (changes.hasOwnProperty('value') && (this.value !== null) && (this.model !== null)) {\n            this.selected = 0;\n            for (var i = 0, t = this.model.length; i < t; i++) {\n                if (this.value.value === this.model[i].value) {\n                    this.selected = i;\n                    break;\n                }\n            }\n            this.selectedItem = this.model[this.selected];\n        }\n    };\n    DropdownComponent.prototype.documentClick = function (e) {\n        if (this.active == true && e != null && e.target != null && e.target instanceof Node\n            && !dom_util[\"a\" /* DOMUtil */].isDescendant(this.element.nativeElement, e.target)) {\n            dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n            this.active = false;\n        }\n    };\n    DropdownComponent.prototype.documentScroll = function () {\n        if (this.active == true)\n            this.active = false;\n    };\n    DropdownComponent.prototype.getIcoCssClasses = function (o) {\n        var _a;\n        return _a = {}, _a[o.icon] = true, _a;\n    };\n    DropdownComponent.prototype.onToggle = function () {\n        this.active = this.disabled ? false : !this.active;\n    };\n    DropdownComponent.prototype.select = function (listItem) {\n        this.selectedItem = listItem;\n        this.active = false;\n        this.valueChange.emit(listItem.value);\n        this.onSelect.emit(this.selectedItem);\n    };\n    var _a;\n    DropdownComponent = dropdown_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'dropdown',\n            host: {\n                '[class.active]': 'active',\n                '[class.up]': 'direction==dirValue.up',\n                '[class.down]': 'direction==dirValue.down',\n                '(document:click)': 'documentClick($event)',\n                '(document:scroll)': 'documentScroll()'\n            },\n            inputs: [\n                'direction',\n                'model',\n                'value',\n                'label',\n                'disabled'\n            ],\n            outputs: ['onSelect', 'valueChange'],\n            template: __webpack_require__(1357),\n            styles: [__webpack_require__(1358)],\n            animations: [ShadowAnimation],\n            viewProviders: [dropdown_list_pipe_DropdownListPipe],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        dropdown_component___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object])\n    ], DropdownComponent);\n    return DropdownComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/dropdown/list/dropdown.list.component.ts\nvar dropdown_list_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar dropdown_list_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar dropdown_list_component_DropdownListComponent = (function () {\n    function DropdownListComponent(pipe, renderer) {\n        this.pipe = pipe;\n        this.renderer = renderer;\n        this.selectedListIdx = -1;\n        this.onSelect = new core_es5[\"EventEmitter\"]();\n    }\n    DropdownListComponent.prototype.ngAfterViewInit = function () {\n        if (this.direction == DropdownListDirection.up)\n            this.renderer.setStyle(this.list.nativeElement, 'top', (-(this.list.nativeElement.getBoundingClientRect().height)) + 'px');\n        else\n            this.renderer.setStyle(this.list.nativeElement, 'top', 'initial');\n    };\n    DropdownListComponent.prototype.ngOnDestroy = function () {\n        if (this.initTimer != null)\n            this.initTimer.unsubscribe();\n        this.initTimer = null;\n    };\n    DropdownListComponent.prototype.select = function (item) {\n        this.selected = item;\n        this.onSelect.emit(this.selected);\n    };\n    DropdownListComponent.prototype.iconClasses = function (o) {\n        var _a;\n        return _a = {}, _a[o.icon] = true, _a;\n    };\n    DropdownListComponent.prototype.documentKeyDown = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        switch (e.key) {\n            case 'ArrowUp':\n                this.arrowUp();\n                break;\n            case 'ArrowDown':\n                this.arrowDown();\n                break;\n            case 'Enter':\n                this.enter();\n                break;\n            default:\n                return;\n        }\n        return;\n    };\n    DropdownListComponent.prototype.arrowUp = function () {\n        if (this.selectedListIdx > 0)\n            this.selectedListIdx--;\n        else\n            this.selectedListIdx = this.model.length - 2;\n    };\n    DropdownListComponent.prototype.arrowDown = function () {\n        if (this.selectedListIdx < this.model.length - 2)\n            this.selectedListIdx++;\n        else\n            this.selectedListIdx = 0;\n    };\n    DropdownListComponent.prototype.enter = function () {\n        if (this.model != null && this.selected != null && this.selectedListIdx > -1) {\n            var items = this.pipe.transform(this.model, this.selected);\n            this.select(items[this.selectedListIdx]);\n        }\n    };\n    var _a, _b, _c;\n    dropdown_list_component___decorate([\n        Object(core_es5[\"ViewChild\"])('list'),\n        dropdown_list_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], DropdownListComponent.prototype, \"list\", void 0);\n    DropdownListComponent = dropdown_list_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'dropdown-list',\n            host: { '(document:keydown)': 'documentKeyDown($event)' },\n            inputs: ['direction', 'model', 'selected'],\n            outputs: ['onSelect'],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            template: __webpack_require__(1359),\n            styles: [__webpack_require__(1360)],\n            animations: [ShadowAnimation]\n        }),\n        dropdown_list_component___metadata(\"design:paramtypes\", [typeof (_b = typeof dropdown_list_pipe_DropdownListPipe !== \"undefined\" && dropdown_list_pipe_DropdownListPipe) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"Renderer2\"] !== \"undefined\" && core_es5[\"Renderer2\"]) === \"function\" && _c || Object])\n    ], DropdownListComponent);\n    return DropdownListComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/dropdown/index.ts\n\n\n\n\n// CONCATENATED MODULE: ./src/module/form/grid/image/image.grid.component.ts\nvar image_grid_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar image_grid_component_ImageGridComponent = (function () {\n    function ImageGridComponent() {\n        this.value = '';\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n    }\n    ImageGridComponent.prototype.getImageClass = function (value) {\n        var _a;\n        return _a = {},\n            _a[this.name + '-' + value] = true,\n            _a['active'] = this.value == value,\n            _a;\n    };\n    ImageGridComponent.prototype.onClick = function (val) {\n        this.value = val;\n        this.valueChange.emit(this.value);\n    };\n    ImageGridComponent = image_grid_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'image-grid',\n            template: __webpack_require__(1361),\n            styles: [__webpack_require__(1362)],\n            inputs: [\n                'name',\n                'value',\n                'values',\n                'urlParser',\n                'placeholder'\n            ],\n            outputs: [\n                'valueChange'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        })\n    ], ImageGridComponent);\n    return ImageGridComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/input/editable.input.component.ts\nvar editable_input_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar editable_input_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar editable_input_component_EditableInputComponent = (function () {\n    function EditableInputComponent(renderer, cdr) {\n        this.renderer = renderer;\n        this.cdr = cdr;\n        this.active = false;\n        this.type = 'text';\n        this.value = '';\n        this.floatOnly = false;\n        this.integerOnly = false;\n        this.minlength = null;\n        this.maxlength = null;\n        this.isOver = false;\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n        this.activeChange = new core_es5[\"EventEmitter\"]();\n        this.focusChange = new core_es5[\"EventEmitter\"]();\n        this.blurChange = new core_es5[\"EventEmitter\"]();\n        this.keyupChange = new core_es5[\"EventEmitter\"]();\n        this.enterUpChange = new core_es5[\"EventEmitter\"]();\n        this.escapeUpChange = new core_es5[\"EventEmitter\"]();\n        this.minSize = 32;\n    }\n    EditableInputComponent.prototype.ngOnChanges = function (changes) {\n        if (changes.hasOwnProperty('value') || changes.hasOwnProperty('placeholder')) {\n            var s = this.value ? (this.value + '').length + 2\n                : this.placeholder ? this.placeholder.length + 2 : null;\n            if (s && s != this.size)\n                this.size = s > this.minSize ? s : this.minSize;\n            this.cdr.markForCheck();\n        }\n    };\n    EditableInputComponent.prototype.open = function () {\n        this.input.nativeElement.focus();\n        this.cdr.markForCheck();\n    };\n    EditableInputComponent.prototype.focus = function (e) {\n        if (this.active == false) {\n            this.active = true;\n            this.cdr.markForCheck();\n            this.activeChange.emit(this.active);\n            this.focusChange.emit({ value: this.value, source: e });\n        }\n    };\n    EditableInputComponent.prototype.blur = function (e) {\n        if (this.active == true) {\n            this.active = false;\n            this.cdr.markForCheck();\n            this.activeChange.emit(this.active);\n            this.blurChange.emit({ value: this.value, source: e });\n        }\n    };\n    EditableInputComponent.prototype.keyup = function (e) {\n        this.keyupChange.emit({ value: this.value, source: e });\n    };\n    EditableInputComponent.prototype.keyupEnter = function (e) {\n        this.enterUpChange.emit({ value: this.value, source: e });\n    };\n    EditableInputComponent.prototype.keyupEscape = function (e) {\n        this.escapeUpChange.emit({ value: this.value, source: e });\n    };\n    EditableInputComponent.prototype.change = function () {\n        this.valueChange.emit(this.value);\n    };\n    EditableInputComponent.prototype.close = function () {\n        this.input.nativeElement.blur();\n    };\n    EditableInputComponent.prototype.over = function () {\n        if (this.isOver != true)\n            this.isOver = true;\n    };\n    EditableInputComponent.prototype.out = function () {\n        if (this.isOver != false)\n            this.isOver = false;\n    };\n    var _a, _b, _c;\n    editable_input_component___decorate([\n        Object(core_es5[\"ViewChild\"])('input'),\n        editable_input_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], EditableInputComponent.prototype, \"input\", void 0);\n    EditableInputComponent = editable_input_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'editable-input',\n            host: {\n                '[class.on]': 'active',\n                '[class.off]': '!active',\n                '[class.over]': 'isOver'\n            },\n            template: '' +\n                '<input #input [attr.name]=\"name\" [attr.type]=\"type\" [attr.autocomplete]=\"autocomplete\" [attr.size]=\"size\" ' +\n                ' [(ngModel)]=\"value\" [attr.placeholder]=\"placeholder\" [attr.required]=\"required\"' +\n                ' [floatonly]=\"floatOnly\" [integeronly]=\"integerOnly\" [attr.minlength]=\"minlength\" [attr.maxlength]=\"maxlength\"' +\n                ' (change)=\"change()\" (focus)=\"focus($event)\" (blur)=\"blur($event)\"' +\n                ' (mouseover)=\"over()\" (mouseout)=\"out()\"' +\n                ' (keyup.enter)=\"keyupEnter($event)\" (keyup.escape)=\"keyupEscape($event)\" (keyup)=\"keyup($event)\">' +\n                '<i *ngIf=\"isOver || active\" class=\"fa edit-ico fa-pencil\"></i>',\n            styles: [__webpack_require__(1363)],\n            inputs: [\n                'active',\n                'type',\n                'value',\n                'name',\n                'placeholder',\n                'required',\n                'autocomplete',\n                'floatOnly',\n                'integerOnly',\n                'minlength',\n                'maxlength'\n            ],\n            outputs: [\n                'activeChange',\n                'focusChange',\n                'blurChange',\n                'keyupChange',\n                'enterUpChange',\n                'escapeUpChange',\n                'valueChange'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        editable_input_component___metadata(\"design:paramtypes\", [typeof (_b = typeof core_es5[\"Renderer2\"] !== \"undefined\" && core_es5[\"Renderer2\"]) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _c || Object])\n    ], EditableInputComponent);\n    return EditableInputComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/list/data/data.list.component.ts\nvar data_list_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar data_list_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar data_list_component_DataListComponent = (function () {\n    function DataListComponent(element) {\n        this.element = element;\n        this.over = false;\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n    }\n    Object.defineProperty(DataListComponent.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            if (val != null && val.length > 0)\n                this.columns = Object.keys(val[0]);\n            this._value = val;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataListComponent.prototype.documentClick = function (e) {\n        if (e != null && e.target != null && e.target instanceof Node) {\n            if (dom_util[\"a\" /* DOMUtil */].isDescendant(this.element.nativeElement, e.target))\n                this.open();\n            else\n                this.close();\n        }\n    };\n    DataListComponent.prototype.open = function () {\n    };\n    DataListComponent.prototype.close = function () {\n    };\n    DataListComponent.prototype.addValue = function (v) {\n    };\n    DataListComponent.prototype.formatResult = function (result) {\n    };\n    ;\n    var _a;\n    DataListComponent = data_list_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'data-list',\n            host: {},\n            template: __webpack_require__(1364),\n            styles: [__webpack_require__(1365)],\n            inputs: [\n                'value'\n            ],\n            outputs: [\n                'valueChange',\n            ]\n        }),\n        data_list_component___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object])\n    ], DataListComponent);\n    return DataListComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/util/math.util.ts\nvar MathUtil = (function () {\n    function MathUtil() {\n    }\n    MathUtil.truncUp = function (float) {\n        return (float % 1 !== 0) ? ~~(float + 1) : float;\n    };\n    MathUtil.trunc = function (float) {\n        return ~~(float);\n    };\n    MathUtil.min = function (v1, v2) {\n        return v1 < v2 ? v1 : v2;\n    };\n    MathUtil.max = function (v1, v2) {\n        return v1 > v2 ? v1 : v2;\n    };\n    return MathUtil;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/pagination/pagination.service.ts\nvar pagination_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar pagination_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar pagination_service_PaginationService = (function () {\n    function PaginationService() {\n        this.showSubject = new Subject[\"Subject\"]();\n        this.emitSubject = new Subject[\"Subject\"]();\n        this.resetSubject = new Subject[\"Subject\"]();\n        this.showStream$ = this.showSubject.asObservable();\n        this.emitStream$ = this.emitSubject.asObservable();\n        this.resetStream$ = this.resetSubject.asObservable();\n    }\n    PaginationService.prototype.show = function (data) {\n        this.model = data;\n        console.warn('[>]PAG.show', data);\n        this.showSubject.next(this.model);\n    };\n    PaginationService.prototype.emit = function () {\n        if (this.model != null) {\n            console.warn('[>]PAG.emit', this.model);\n            this.emitSubject.next(this.model);\n        }\n    };\n    PaginationService.prototype.reset = function () {\n        if (this.model != null) {\n            this.model.actual = 1;\n            console.warn('[>]PAG.reset');\n            this.resetSubject.next({});\n        }\n    };\n    PaginationService = pagination_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        pagination_service___metadata(\"design:paramtypes\", [])\n    ], PaginationService);\n    return PaginationService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/pagination/buttons/pagination.buttons.component.ts\nvar pagination_buttons_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar pagination_buttons_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar pagination_buttons_component_PaginationButtonsComponent = (function () {\n    function PaginationButtonsComponent(element, cdr, service) {\n        this.element = element;\n        this.cdr = cdr;\n        this.service = service;\n        this.dropdownMode = false;\n        this.visible = false;\n        this.showPrevBtn = false;\n        this.showNextBtn = false;\n        this.showPrevPortionBtn = false;\n        this.showNextPortionBtn = false;\n    }\n    PaginationButtonsComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.collectPageData();\n        this.checkButtons();\n        if (this.initTimer != null)\n            this.initTimer.unsubscribe();\n        this.initTimer = Observable[\"Observable\"].timer(1).take(1).subscribe(function () { return _this.checkSize(); });\n    };\n    PaginationButtonsComponent.prototype.ngAfterViewChecked = function () {\n        var _this = this;\n        if (this.initTimer != null)\n            this.initTimer.unsubscribe();\n        this.initTimer = Observable[\"Observable\"].timer(1).take(1).subscribe(function () { return _this.checkSize(); });\n    };\n    PaginationButtonsComponent.prototype.ngOnDestroy = function () {\n        if (this.initTimer != null)\n            this.initTimer.unsubscribe();\n        this.initTimer = null;\n    };\n    PaginationButtonsComponent.prototype.reset = function () {\n        if (this.service.model) {\n            this.service.model.portion.start = 0;\n            this.service.model.portion.actual = 0;\n        }\n        this.collectPageData();\n        this.checkButtons();\n        this.checkSize();\n        this.cdr.markForCheck();\n    };\n    PaginationButtonsComponent.prototype.checkSize = function () {\n        if (this.btns != null) {\n            var hostW = this.element.nativeElement.getBoundingClientRect().width, total_1 = 0;\n            this.btns.forEach(function (b) { return total_1 += b.nativeElement.getBoundingClientRect().width; });\n            if (total_1 > hostW)\n                this.dropdownOn(total_1);\n            else if (hostW > this.beforeDropdownWidth)\n                this.dropdownOff();\n        }\n        this.visible = true;\n        this.cdr.markForCheck();\n    };\n    PaginationButtonsComponent.prototype.dropdownOn = function (total) {\n        this.dropdownMode = true;\n        this.beforeDropdownWidth = total;\n        this.dropdownModel = [];\n        if (this.service.model != null) {\n            for (var i = 0; i < this.service.model.portion.total; i++)\n                this.dropdownModel.push({ value: i + 1, label: 'strona #' + (i + 1) });\n        }\n    };\n    PaginationButtonsComponent.prototype.dropdownOff = function () {\n        this.dropdownMode = false;\n        this.beforeDropdownWidth = NaN;\n        this.dropdownModel = [];\n    };\n    PaginationButtonsComponent.prototype.dropdownSelectPage = function (page) {\n        if (this.service.model) {\n            if (this.service.model.actual != page.value) {\n                this.service.model.actual = page.value;\n                this.service.emit();\n                this.checkButtons();\n            }\n        }\n    };\n    PaginationButtonsComponent.prototype.prevPage = function () {\n        if (this.service.model) {\n            var newActive = this.service.model.actual - 1;\n            if (newActive <= this.service.model.portion.start)\n                this.prevPortion();\n            if (this.service.model.actual != newActive) {\n                this.service.model.actual = newActive;\n                this.service.emit();\n                this.checkButtons();\n            }\n        }\n    };\n    PaginationButtonsComponent.prototype.nextPage = function () {\n        if (this.service.model) {\n            var newActive = this.service.model.actual + 1;\n            if (newActive > this.service.model.portion.total)\n                this.nextPortion();\n            if (this.service.model.actual != newActive) {\n                this.service.model.actual = newActive;\n                this.service.emit();\n                this.checkButtons();\n            }\n        }\n    };\n    PaginationButtonsComponent.prototype.prevPortion = function () {\n        if (this.service.model != null) {\n            this.service.model.portion.actual--;\n            this.service.model.portion.start = this.service.model.portion.start - this.service.model.portion.size;\n            this.collectPageData();\n            this.checkButtons();\n            this.click(this.pagesData[0]);\n        }\n    };\n    PaginationButtonsComponent.prototype.nextPortion = function () {\n        if (this.service.model != null) {\n            this.service.model.portion.actual++;\n            this.service.model.portion.start = this.service.model.portion.start + this.service.model.portion.size;\n            this.collectPageData();\n            this.checkButtons();\n            this.click(this.pagesData[0]);\n        }\n    };\n    PaginationButtonsComponent.prototype.click = function (page) {\n        if (this.service.model) {\n            if (page != null) {\n                this.service.model.actual = page;\n                this.service.emit();\n                this.checkButtons();\n            }\n        }\n    };\n    PaginationButtonsComponent.prototype.collectPageData = function () {\n        if (this.service.model) {\n            this.pagesData = [];\n            this.service.model.portion.size = MathUtil.min(this.service.model.size, this.service.model.max);\n            this.service.model.portion.length = MathUtil.truncUp(this.service.model.total / this.service.model.size);\n            this.service.model.portion.total =\n                MathUtil.min(this.service.model.portion.size + this.service.model.portion.start, this.service.model.portion.length);\n            for (var i = this.service.model.portion.start; i < this.service.model.portion.total; i++)\n                this.pagesData.push((i + 1));\n        }\n    };\n    PaginationButtonsComponent.prototype.checkButtons = function () {\n        if (this.service.model) {\n            var changed = false;\n            var pb = this.service.model.actual > 1;\n            if (this.showPrevBtn != pb) {\n                this.showPrevBtn = pb;\n                changed = true;\n            }\n            var ppb = this.service.model.portion.actual > 0;\n            if (this.showPrevPortionBtn != ppb) {\n                this.showPrevPortionBtn = ppb;\n                changed = true;\n            }\n            var npb = this.service.model.portion.start + this.service.model.portion.size < this.service.model.portion.length;\n            if (this.showNextPortionBtn != npb) {\n                this.showNextPortionBtn = npb;\n                changed = true;\n            }\n            var nb = this.service.model.actual < this.service.model.portion.length;\n            if (this.showNextBtn != nb) {\n                this.showNextBtn = nb;\n                changed = true;\n            }\n            if (changed)\n                this.cdr.markForCheck();\n        }\n    };\n    var _a, _b, _c, _d;\n    pagination_buttons_component___decorate([\n        Object(core_es5[\"ViewChildren\"])('button'),\n        pagination_buttons_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"QueryList\"] !== \"undefined\" && core_es5[\"QueryList\"]) === \"function\" && _a || Object)\n    ], PaginationButtonsComponent.prototype, \"btns\", void 0);\n    pagination_buttons_component___decorate([\n        Object(core_es5[\"HostListener\"])('window:resize'),\n        pagination_buttons_component___metadata(\"design:type\", Function),\n        pagination_buttons_component___metadata(\"design:paramtypes\", []),\n        pagination_buttons_component___metadata(\"design:returntype\", void 0)\n    ], PaginationButtonsComponent.prototype, \"checkSize\", null);\n    PaginationButtonsComponent = pagination_buttons_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'pagination-btns',\n            host: { '[class.dropdownMode]': 'dropdownMode' },\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            template: __webpack_require__(1366),\n            styles: [__webpack_require__(1367)]\n        }),\n        pagination_buttons_component___metadata(\"design:paramtypes\", [typeof (_b = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _c || Object, typeof (_d = typeof pagination_service_PaginationService !== \"undefined\" && pagination_service_PaginationService) === \"function\" && _d || Object])\n    ], PaginationButtonsComponent);\n    return PaginationButtonsComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/pagination/bar/pagination.bar.component.ts\nvar pagination_bar_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar pagination_bar_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar pagination_bar_component_PaginationBarComponent = (function () {\n    function PaginationBarComponent(service, cdr) {\n        var _this = this;\n        this.service = service;\n        this.cdr = cdr;\n        this.service.showStream$.subscribe(function () {\n            _this.cdr.markForCheck();\n        });\n        this.service.resetStream$.subscribe(function () {\n            if (_this.buttons != null)\n                _this.buttons.reset();\n            _this.cdr.markForCheck();\n        });\n    }\n    Object.defineProperty(PaginationBarComponent.prototype, \"formatActivePage\", {\n        get: function () {\n            return (this.service.model.actual - 1) * this.service.model.size;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PaginationBarComponent.prototype, \"formatPageMax\", {\n        get: function () {\n            var v = this.formatActivePage + this.service.model.size;\n            return v < this.service.model.total ? v : this.service.model.total;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PaginationBarComponent.prototype, \"formatTotalPages\", {\n        get: function () {\n            return MathUtil.truncUp(this.service.model.total / this.service.model.size);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    var _a, _b, _c;\n    pagination_bar_component___decorate([\n        Object(core_es5[\"ViewChild\"])(pagination_buttons_component_PaginationButtonsComponent),\n        pagination_bar_component___metadata(\"design:type\", typeof (_a = typeof pagination_buttons_component_PaginationButtonsComponent !== \"undefined\" && pagination_buttons_component_PaginationButtonsComponent) === \"function\" && _a || Object)\n    ], PaginationBarComponent.prototype, \"buttons\", void 0);\n    PaginationBarComponent = pagination_bar_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'pagination-bar',\n            template: __webpack_require__(1368),\n            styles: [__webpack_require__(1369)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        pagination_bar_component___metadata(\"design:paramtypes\", [typeof (_b = typeof pagination_service_PaginationService !== \"undefined\" && pagination_service_PaginationService) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _c || Object])\n    ], PaginationBarComponent);\n    return PaginationBarComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/pagination/size/pagination.size.component.ts\nvar pagination_size_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar pagination_size_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar pagination_size_component_PaginationSizeComponent = (function () {\n    function PaginationSizeComponent(service) {\n        this.service = service;\n        this.dir = DropdownListDirection.up;\n        this.model = [\n            { value: 10, label: '10 na stronę' },\n            { value: 25, label: '25 na stronę' },\n            { value: 50, label: '50 na stronę' },\n            { value: 100, label: '100 na stronę' }\n        ];\n    }\n    PaginationSizeComponent.prototype.onChange = function (i) {\n        if (this.service.model != null) {\n            this.service.model.size = parseInt(i.value);\n            this.service.reset();\n            this.service.emit();\n        }\n    };\n    var _a;\n    PaginationSizeComponent = pagination_size_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'pagination-size',\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            template: '<dropdown [model]=\"model\" [direction]=\"dir\" (onSelect)=\"onChange($event)\"></dropdown>',\n            styles: [\n                +':host /deep/ dropdown button,'\n                    + ':host /deep/ dropdown button.active,'\n                    + ':host /deep/ dropdown button:active,'\n                    + ':host /deep/ dropdown button:hover,'\n                    + ':host /deep/ dropdown button:focus'\n                    + ' { background: #fff !important; border-radius: 3px !important; box-shadow: none !important; outline: none !important;}'\n                    + ':host /deep/ dropdown button:not(.active) {border-color: transparent;}'\n            ]\n        }),\n        pagination_size_component___metadata(\"design:paramtypes\", [typeof (_a = typeof pagination_service_PaginationService !== \"undefined\" && pagination_service_PaginationService) === \"function\" && _a || Object])\n    ], PaginationSizeComponent);\n    return PaginationSizeComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/rangeslider/rangeslider.component.ts\nvar rangeslider_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar rangeslider_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar rangeslider_component_RangesliderComponent = (function () {\n    function RangesliderComponent() {\n        this.showLabels = true;\n        this.disabled = false;\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n        this.onBlur = new core_es5[\"EventEmitter\"]();\n        this.onMouseUp = new core_es5[\"EventEmitter\"]();\n    }\n    RangesliderComponent.prototype.ngChange = function (value) {\n        this.value = value;\n        this.valueChange.next(this.value);\n    };\n    RangesliderComponent.prototype.ngBlur = function (value) {\n        this.value = value;\n        this.onBlur.emit(this.value);\n    };\n    RangesliderComponent.prototype.ngMouseUp = function (value) {\n        this.value = value;\n        this.onMouseUp.emit(this.value);\n    };\n    var _a;\n    rangeslider_component___decorate([\n        Object(core_es5[\"ViewChild\"])('input'),\n        rangeslider_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], RangesliderComponent.prototype, \"input\", void 0);\n    rangeslider_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.disabled'),\n        rangeslider_component___metadata(\"design:type\", Object)\n    ], RangesliderComponent.prototype, \"disabled\", void 0);\n    RangesliderComponent = rangeslider_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'rangeslider',\n            inputs: ['value', 'min', 'max', 'step', 'showLabels', 'disabled'],\n            outputs: ['valueChange', 'onBlur', 'onMouseUp'],\n            template: ''\n                + '<input #input type=\"range\" [(ngModel)]=\"value\" [attr.step]=\"step\" [attr.min]=\"min\" [attr.max]=\"max\" [disabled]=\"disabled\" '\n                + ' (input)=\"ngChange(input.value)\" (blur)=\"ngBlur(input.value)\" (mouseup)=\"ngMouseUp(input.value)\">'\n                + '<p *ngIf=\"showLabels\" class=\"text-center\">'\n                + '<small class=\"pull-left\"> {{min}} </small>'\n                + '<strong> {{value}} </strong>'\n                + '<small class=\"pull-right\"> {{max}} </small>'\n                + '</p>',\n            styles: [__webpack_require__(1370)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        rangeslider_component___metadata(\"design:paramtypes\", [])\n    ], RangesliderComponent);\n    return RangesliderComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/search/search.component.ts\nvar search_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar search_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar SearchComponentMode;\n(function (SearchComponentMode) {\n    SearchComponentMode[SearchComponentMode[\"INPUT\"] = 0] = \"INPUT\";\n    SearchComponentMode[SearchComponentMode[\"SEARCH\"] = 1] = \"SEARCH\";\n    SearchComponentMode[SearchComponentMode[\"LIVE_SEARCH\"] = 2] = \"LIVE_SEARCH\";\n})(SearchComponentMode || (SearchComponentMode = {}));\nvar SearchComponentState;\n(function (SearchComponentState) {\n    SearchComponentState[SearchComponentState[\"NORMAL_STATE\"] = 0] = \"NORMAL_STATE\";\n    SearchComponentState[SearchComponentState[\"CHOOSE_STATE\"] = 1] = \"CHOOSE_STATE\";\n})(SearchComponentState || (SearchComponentState = {}));\nvar search_component_HTML = ''\n    + '<div class=\"input-group input-group-sm\" [ngClass]=\"ngStateClass()\">'\n    + '<div style=\"position: relative;\" class=\"input-group-sm\" '\n    + '[class.with-icon]=\"icon!=null\" [class.with-clear]=\"showClear && model!=null && model!=\\'\\'\">'\n    + '<i *ngIf=\"icon!=null\" class=\"fa input-icon\" [ngClass]=\"ngIcon()\"></i>'\n    + '<input #input type=\"text\" class=\"form-control\" [autofocus]=\"autofocus\" '\n    + '[attr.placeholder]=\"placeholder\" [attr.aria-label]=\"label\" [attr.tabindex]=\"tabindex\" '\n    + '[ngModel]=\"model\" (ngModelChange)=\"ngChange($event)\" '\n    + '(keyup.arrowup)=\"ngArrowUp($event)\" (keyup.arrowdown)=\"ngArrowDown($event)\" (keyup.enter)=\"ngEnter($event)\" '\n    + '(blur)=\"ngBlur($event)\">'\n    + '<a *ngIf=\"showClear && model!=null && model!=\\'\\'\" href=\"javascript:;\" (click)=\"clear()\" '\n    + 'class=\"fa fa-times input-clear\"></a>'\n    + '</div>'\n    + '</div>'\n    + '<ul #list *ngIf=\"isOpen==true\" class=\"dropdown-menu\">'\n    + '<li *ngIf=\"preloader\" class=\"dropdown-item\">'\n    + '<i class=\"fa fa-fw fa-spinner fa-spin\"></i>'\n    + '<small>szukanie</small><small><i> {{searchPhrase}} </i></small>'\n    + '</li>'\n    + '<li *ngIf=\"notfound\" class=\"dropdown-item\">'\n    + '<i class=\"fa fa-fw fa-exclamation\"></i><small> nie odnaleziono </small>'\n    + '</li>'\n    + '<li *ngFor=\"let result of results; let i = index\" class=\"dropdown-item\" [class.selected]=\"i==selectedResult\">'\n    + '<a href=\"javascript:;\" (click)=\"ngChoose(result)\" class=\"m-0\">{{formatResult(result)}}</a>'\n    + '</li>'\n    + '</ul>';\nvar STYLE = ':host {}'\n    + '.dropdown-menu{z-index: 10000;width: 100%;text-align: center;}'\n    + '.dropdown-menu .dropdown-item {width: inherit;overflow: hidden;white-space: nowrap;height: 24px;'\n    + 'line-height: 24px;text-align: center;}'\n    + '.dropdown-menu .dropdown-item.selected a{ background: #edf0f5; }'\n    + 'input{border-top-color: #FFF !important;border-left-color: #FFF !important;border-right-color: #FFF !important;'\n    + 'border-radius: 0 !important;}'\n    + '.CHOOSE_STATE input{border-bottom-color: #455a64 !important; }.CHOOSE_STATE .input-icon{color: #455a64; }'\n    + '.NORMAL_STATE input{border-bottom-color: #e2e7eb; !important; }.NORMAL_STATE .input-icon{color: #e2e7eb; }'\n    + '.with-icon input{padding-left: 30px;}'\n    + '.with-clear input {padding-right: 25px;}'\n    + '.input-icon, .input-clear{position: absolute;top: 0;z-index: 4;display: block;width: 30px;'\n    + 'height: 30px;line-height: 30px;text-align: center;}'\n    + '.input-icon{left:0;}.input-clear{right: 0;}'\n    + '.input-clear:hover, .input-clear:focus { text-decoration: none !important; }';\nvar search_component_SearchComponent = (function () {\n    function SearchComponent(element, renderer) {\n        this.element = element;\n        this.renderer = renderer;\n        this.showClear = true;\n        this.tabindex = -1;\n        this.autofocus = false;\n        this.open = false;\n        this.modelChange = new core_es5[\"EventEmitter\"]();\n        this.onChoose = new core_es5[\"EventEmitter\"]();\n        this.onEnter = new core_es5[\"EventEmitter\"]();\n        this.onBlur = new core_es5[\"EventEmitter\"]();\n        this.modes = SearchComponentMode;\n        this.preloader = false;\n        this.notfound = false;\n        this.dropdownFocus = false;\n        this.selectedResult = 0;\n        this.state = SearchComponentState.NORMAL_STATE;\n        this.mode = this.modes.INPUT;\n    }\n    SearchComponent.prototype.ngOnChanges = function (changes) {\n        if (changes.hasOwnProperty('model')) {\n            if (changes['model'].isFirstChange())\n                this.firstModel = this.model;\n            if (changes['model'].currentValue == null || changes['model'].currentValue == '') {\n                if (this.state != SearchComponentState.NORMAL_STATE)\n                    this.state = SearchComponentState.NORMAL_STATE;\n            }\n            else {\n                if (this.state != SearchComponentState.CHOOSE_STATE)\n                    this.state = SearchComponentState.CHOOSE_STATE;\n            }\n        }\n    };\n    SearchComponent.prototype.ngOnDestroy = function () {\n        this.close();\n        this.searchKill();\n        this.blurKill();\n        if (!isNaN(this.scrollTickId))\n            window.cancelAnimationFrame(this.scrollTickId);\n        this.scrollTickId = NaN;\n    };\n    SearchComponent.prototype.onSearchNotFound = function () {\n        this.selectedResult = -1;\n        this.notfound = true;\n        this.results = null;\n    };\n    SearchComponent.prototype.onSearchFound = function (data) {\n        this.notfound = false;\n        this.results = data;\n    };\n    SearchComponent.prototype.onSearchSuccess = function () {\n        this.selectedResult = 0;\n        this.preloader = false;\n        this.scroll();\n    };\n    SearchComponent.prototype.onSearchFail = function () {\n        this.close();\n    };\n    SearchComponent.prototype.ngStateClass = function () {\n        var _a;\n        return _a = {}, _a[SearchComponentState[this.state]] = true, _a;\n    };\n    SearchComponent.prototype.ngIcon = function () {\n        var _a;\n        return _a = {}, _a[this.icon] = true, _a;\n    };\n    SearchComponent.prototype.scroll = function () {\n        var _this = this;\n        if (this.isOpen == true) {\n            if (isNaN(this.scrollTickId)) {\n                this.scrollTickId = window.requestAnimationFrame(function () {\n                    window.cancelAnimationFrame(_this.scrollTickId);\n                    _this.scrollTickId = NaN;\n                    _this.checkUp();\n                });\n            }\n        }\n    };\n    SearchComponent.prototype.ngChange = function (value) {\n        if (this.model != value) {\n            this.model = value;\n            if (this.mode == SearchComponentMode.INPUT) {\n                this.open = false;\n                this.modelChange.emit(this.model);\n            }\n            else if (this.mode == SearchComponentMode.SEARCH || this.mode == SearchComponentMode.LIVE_SEARCH) {\n                this.searchKill();\n                this.searchStart();\n            }\n        }\n    };\n    SearchComponent.prototype.ngBlur = function (e) {\n        var _this = this;\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        this.onBlur.emit(this.model);\n        if (this.firstModel == null && this.model == null)\n            return;\n        this.blurKill();\n        if (this.open == true) {\n            this.clearTimer = Observable[\"Observable\"].timer(250).subscribe(function () {\n                _this.blurKill();\n                if (!_this.dropdownFocus)\n                    _this.clear();\n                _this.dropdownFocus = false;\n            });\n        }\n    };\n    SearchComponent.prototype.ngEnter = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        if (this.selectedResult > -1 && this.isOpen == true && this.results) {\n            this.ngChoose(this.results[this.selectedResult]);\n        }\n        else {\n            this.onEnter.emit(this.model);\n        }\n    };\n    SearchComponent.prototype.ngArrowUp = function (e) {\n        if (this.list != null && this.selectedResult != null && this.results != null && this.results.length > 0) {\n            dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n            if (this.selectedResult > 0)\n                this.selectedResult--;\n            this.renderer.setProperty(this.list.nativeElement, 'scrollTop', this.list.nativeElement.scrollTop -= 30);\n        }\n    };\n    SearchComponent.prototype.ngArrowDown = function (e) {\n        if (this.list != null && this.selectedResult != null && this.results != null && this.results.length > 0) {\n            dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n            if (this.selectedResult < this.results.length - 1)\n                this.selectedResult++;\n            this.renderer.setProperty(this.list.nativeElement, 'scrollTop', this.list.nativeElement.scrollTop += 30);\n        }\n    };\n    SearchComponent.prototype.searchStart = function () {\n        var _this = this;\n        this.searchTimer = Observable[\"Observable\"].timer(250).subscribe(function () {\n            _this.searchKill();\n            _this.notfound = false;\n            _this.open = _this.preloader = (_this.mode == _this.modes.LIVE_SEARCH);\n            _this.modelChange.emit(_this.model);\n        });\n    };\n    SearchComponent.prototype.searchKill = function () {\n        if (this.searchTimer != null && !this.searchTimer.closed)\n            this.searchTimer.unsubscribe();\n        this.searchTimer = null;\n    };\n    SearchComponent.prototype.blurKill = function () {\n        if (this.clearTimer != null && !this.clearTimer.closed)\n            this.clearTimer.unsubscribe();\n        this.clearTimer = null;\n    };\n    SearchComponent.prototype.ngChoose = function (item) {\n        if (item != null) {\n            if (this.formatResult != null)\n                this.model = this.formatResult(item);\n            this.onChoose.emit(item);\n        }\n        this.close();\n        this.dropdownFocus = true;\n    };\n    SearchComponent.prototype.clear = function () {\n        this.state = SearchComponentState.NORMAL_STATE;\n        this.model = undefined;\n        this.modelChange.emit(this.model);\n        this.onChoose.emit(this.model);\n        this.close();\n    };\n    SearchComponent.prototype.close = function () {\n        if (this.open != false) {\n            this.dropdownFocus = false;\n            this.open = false;\n            this.isOpen = false;\n            this.preloader = false;\n            this.notfound = false;\n            this.results = null;\n            this.firstModel = undefined;\n        }\n    };\n    SearchComponent.prototype.checkUp = function () {\n        var bcr = this.element.nativeElement.getBoundingClientRect();\n        var vph = document.body.clientHeight;\n        this.up = bcr.bottom + (bcr.height >> 1) > (vph >> 1);\n    };\n    var _a, _b, _c, _d;\n    search_component___decorate([\n        Object(core_es5[\"ViewChild\"])('input'),\n        search_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], SearchComponent.prototype, \"input\", void 0);\n    search_component___decorate([\n        Object(core_es5[\"ViewChild\"])('list'),\n        search_component___metadata(\"design:type\", typeof (_b = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _b || Object)\n    ], SearchComponent.prototype, \"list\", void 0);\n    SearchComponent = search_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'search-component',\n            host: { '[class.dropup]': 'up', '[class.dropdown]': '!up', '[class.open]': 'open', '(document:scroll)': 'scroll()' },\n            template: search_component_HTML, styles: [STYLE],\n            inputs: ['formatResult', 'icon', 'label', 'placeholder', 'showClear', 'mode', 'state', 'model',\n                'tabindex', 'autofocus'],\n            outputs: ['modelChange', 'onEnter', 'onBlur', 'onChoose']\n        }),\n        search_component___metadata(\"design:paramtypes\", [typeof (_c = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _c || Object, typeof (_d = typeof core_es5[\"Renderer2\"] !== \"undefined\" && core_es5[\"Renderer2\"]) === \"function\" && _d || Object])\n    ], SearchComponent);\n    return SearchComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/singlechoice/singlechoice.input.component.ts\nvar singlechoice_input_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar singlechoice_input_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar singlechoice_input_component_SinglechoiceInputComponent = (function () {\n    function SinglechoiceInputComponent() {\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n    }\n    SinglechoiceInputComponent.prototype.isItemChecked = function (item) {\n        return this.value == item;\n    };\n    SinglechoiceInputComponent.prototype.onChange = function (item, enable) {\n        this.value = (enable) ? item : null;\n        this.valueChange.emit(this.value);\n    };\n    singlechoice_input_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        singlechoice_input_component___metadata(\"design:type\", String)\n    ], SinglechoiceInputComponent.prototype, \"name\", void 0);\n    singlechoice_input_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        singlechoice_input_component___metadata(\"design:type\", String)\n    ], SinglechoiceInputComponent.prototype, \"model\", void 0);\n    singlechoice_input_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        singlechoice_input_component___metadata(\"design:type\", String)\n    ], SinglechoiceInputComponent.prototype, \"value\", void 0);\n    singlechoice_input_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        singlechoice_input_component___metadata(\"design:type\", Object)\n    ], SinglechoiceInputComponent.prototype, \"valueChange\", void 0);\n    SinglechoiceInputComponent = singlechoice_input_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'singlechoice-input',\n            template: __webpack_require__(1371),\n            styles: [__webpack_require__(1372)],\n        }),\n        singlechoice_input_component___metadata(\"design:paramtypes\", [])\n    ], SinglechoiceInputComponent);\n    return SinglechoiceInputComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/switch/switch.component.ts\nvar switch_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar switch_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar switch_component_HTML = ''\n    + '<span *ngIf=\"labelLeft\" class=\"switch-label left m-r-5\">{{labelLeft[checked?\\'on\\':\\'off\\']}}</span>'\n    + '<span class=\"switch\"><small></small></span>'\n    + '<span *ngIf=\"labelRight\" class=\"switch-label right m-l-5\">{{labelRight[checked?\\'on\\':\\'off\\']}}</span>';\nvar switch_component_STYLE = '' +\n    ':host {cursor: pointer;}' +\n    ':host span {vertical-align: top;}' +\n    ':host .switch-label {font-size:inherit;color: inherit;white-space: nowrap;padding:0;}' +\n    ':host .switch {display: inline-block;position: relative;background: #fff;border: 1px solid #dfdfdf;' +\n    'box-sizing: content-box;overflow: visible;padding: 0;margin: 0;box-shadow: rgb(223, 223, 223) 0 0 0 0 inset;' +\n    'transition: 0.3s ease-out all;-webkit-transition: 0.3s ease-out all;}' +\n    ':host .switch small {background: #fff;border-radius: 100%;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);' +\n    'position: absolute;top: 0;left: 0;transition: 0.3s ease-out all;-webkit-transition: 0.3s ease-out all;}' +\n    ':host.large .switch-label {height: 42px;line-height: 42px;}' +\n    ':host.large .switch {width: 66px;height: 40px;line-height: 40px;border-radius: 40px;}' +\n    ':host.large .switch small {width: 40px;height: inherit;}' +\n    ':host.medium .switch-label {height: 32px;line-height: 32px;}' +\n    ':host.medium .switch {width: 50px;height: 30px;line-height: 30px;border-radius: 30px;}' +\n    ':host.medium .switch small {width: 30px;height: inherit;}' +\n    ':host.small .switch-label {height: 22px;line-height: 22px;}' +\n    ':host.small .switch {width: 33px;height: 20px;line-height: 20px;border-radius: 20px;}' +\n    ':host.small .switch small {width: 20px;height: inherit;}' +\n    ':host.xsmall .switch-label {height: 14px;line-height: 14px;}' +\n    ':host.xsmall .switch {width: 25px;height: 12px;line-height: 12px;border-radius: 12px;}' +\n    ':host.xsmall .switch small {width: 12px;height: inherit;}' +\n    ':host.checked .switch {background: #FAD600;border-color: #FAD600;}' +\n    ':host.large.checked .switch small {left: 26px;}' +\n    ':host.medium.checked .switch small {left: 20px;}' +\n    ':host.small.checked .switch small {left: 13px;}' +\n    ':host.xsmall.checked .switch small {left: 12px;}' +\n    ':host.disabled {opacity: .50;cursor: not-allowed;}';\nvar switch_component_SwitchComponent = (function () {\n    function SwitchComponent(cdr) {\n        this.cdr = cdr;\n        this.size = 'medium';\n        this.checkedChange = new core_es5[\"EventEmitter\"]();\n    }\n    SwitchComponent.prototype.ngOnChanges = function (changes) {\n        if (changes.hasOwnProperty('checked')\n            || changes.hasOwnProperty('disabled')\n            || changes.hasOwnProperty('size')\n            || changes.hasOwnProperty('labelLeft')\n            || changes.hasOwnProperty('labelRight')) {\n            this.cdr.markForCheck();\n        }\n    };\n    SwitchComponent.prototype.onToggle = function () {\n        if (this.disabled)\n            return;\n        this.checkedChange.emit(!this.checked);\n        this.cdr.markForCheck();\n    };\n    var _a;\n    SwitchComponent = switch_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'switch',\n            host: {\n                '(click)': 'onToggle()',\n                '[class.disabled]': 'disabled',\n                '[class.checked]': 'checked',\n                '[class.large]': 'size === \"large\"',\n                '[class.medium]': 'size === \"medium\"',\n                '[class.small]': 'size === \"small\"',\n                '[class.xsmall]': 'size === \"xsmall\"'\n            },\n            template: switch_component_HTML,\n            styles: [switch_component_STYLE],\n            inputs: ['checked', 'disabled', 'size', 'labelLeft', 'labelRight'],\n            outputs: ['checkedChange'],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        switch_component___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _a || Object])\n    ], SwitchComponent);\n    return SwitchComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/upload/file/upload.file.service.ts\nvar upload_file_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar upload_file_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar upload_file_service_UploadFileService = (function () {\n    function UploadFileService() {\n        var _this = this;\n        this.loadedFile = function () {\n            if (_this.reader) {\n                _this.data = _this.reader.result;\n                if (_this.readSubject)\n                    _this.readSubject.next(_this.data);\n                _this.reader = null;\n            }\n        };\n    }\n    UploadFileService.prototype.addFile = function (f, onComplete) {\n        this.destroy();\n        this.readSubject = new Subject[\"Subject\"]();\n        this.readStream$ = this.readSubject.asObservable();\n        this.readStream$.subscribe(function (data) { return onComplete(data); });\n        this.file = f;\n        this.readFile();\n    };\n    UploadFileService.prototype.readFile = function () {\n        if (this.file) {\n            this.reader = new FileReader();\n            this.reader.addEventListener('load', this.loadedFile, false);\n            this.reader.readAsDataURL(this.file);\n        }\n    };\n    UploadFileService.prototype.destroy = function () {\n        if (this.readSubject != null)\n            this.readSubject.unsubscribe();\n        this.readSubject = null;\n        this.readStream$ = null;\n        this.file = null;\n        this.data = null;\n        if (this.reader != null) {\n            this.reader.abort();\n            this.reader.removeEventListener('load', this.loadedFile);\n        }\n    };\n    UploadFileService = upload_file_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        upload_file_service___metadata(\"design:paramtypes\", [])\n    ], UploadFileService);\n    return UploadFileService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/upload/file/upload.file.component.ts\nvar upload_file_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar upload_file_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar upload_file_component_UploadFileComponent = (function () {\n    function UploadFileComponent(renderer, service, cdr) {\n        this.renderer = renderer;\n        this.service = service;\n        this.cdr = cdr;\n        this.fileChange = new core_es5[\"EventEmitter\"]();\n        this.isDragOver = false;\n    }\n    UploadFileComponent.prototype.ngOnDestroy = function () {\n        this.service.destroy();\n    };\n    UploadFileComponent.prototype.onDragOver = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        this.isDragOver = true;\n        return false;\n    };\n    UploadFileComponent.prototype.onDragLeave = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        this.isDragOver = false;\n        return false;\n    };\n    UploadFileComponent.prototype.onDrop = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        if (e && e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0)\n            this.addFile(e.dataTransfer.files.item(0));\n        return false;\n    };\n    UploadFileComponent.prototype.onBrowse = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        if (this.browse)\n            this.browse.nativeElement.click();\n        else\n            throw new Error('No `browse` element in upload.image.component');\n        return false;\n    };\n    UploadFileComponent.prototype.onFileBrowse = function () {\n        if (this.browse && this.browse.nativeElement && this.browse.nativeElement.files\n            && this.browse.nativeElement.files.length > 0)\n            this.addFile(this.browse.nativeElement.files.item(0));\n    };\n    UploadFileComponent.prototype.onRemove = function () {\n        if (this.browse && this.browse.nativeElement)\n            this.renderer.setProperty(this.browse.nativeElement, 'value', null);\n        this.service.destroy();\n        this.previewData(null);\n    };\n    UploadFileComponent.prototype.addFile = function (file) {\n        var _this = this;\n        this.service.addFile(file, function (data) { return _this.previewData(data); });\n    };\n    UploadFileComponent.prototype.previewData = function (data) {\n        this.fileData = data;\n        if (this.fileData != null)\n            this.renderer.addClass(this.preview.nativeElement, 'visible');\n        else\n            this.renderer.removeClass(this.preview.nativeElement, 'visible');\n        this.fileMessage = 'fileMessage';\n        this.cdr.markForCheck();\n        this.fileChange.emit(data);\n    };\n    var _a, _b, _c, _d, _e;\n    upload_file_component___decorate([\n        Object(core_es5[\"ViewChild\"])('browse'),\n        upload_file_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], UploadFileComponent.prototype, \"browse\", void 0);\n    upload_file_component___decorate([\n        Object(core_es5[\"ViewChild\"])('preview'),\n        upload_file_component___metadata(\"design:type\", typeof (_b = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _b || Object)\n    ], UploadFileComponent.prototype, \"preview\", void 0);\n    UploadFileComponent = upload_file_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'upload-file',\n            host: {\n                '[class.hover]': 'isDragOver',\n                '(dragover)': 'onDragOver($event)',\n                '(dragleave)': 'onDragLeave($event)',\n                '(drop)': 'onDrop($event)'\n            },\n            outputs: ['fileChange'],\n            viewProviders: [upload_file_service_UploadFileService],\n            template: __webpack_require__(1373),\n            styles: [__webpack_require__(1374)]\n        }),\n        upload_file_component___metadata(\"design:paramtypes\", [typeof (_c = typeof core_es5[\"Renderer2\"] !== \"undefined\" && core_es5[\"Renderer2\"]) === \"function\" && _c || Object, typeof (_d = typeof upload_file_service_UploadFileService !== \"undefined\" && upload_file_service_UploadFileService) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object])\n    ], UploadFileComponent);\n    return UploadFileComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/upload/image/upload.image.service.ts\nvar upload_image_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar upload_image_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar upload_image_service_UploadImageService = (function () {\n    function UploadImageService() {\n        var _this = this;\n        this.loadedFile = function () {\n            if (_this.reader) {\n                _this.data = _this.reader.result;\n                if (_this.readSubject)\n                    _this.readSubject.next(_this.data);\n                _this.reader = null;\n            }\n        };\n    }\n    UploadImageService.prototype.addBase64 = function (base64, onComplete) {\n        this.destroy();\n        this.readSubject = new Subject[\"Subject\"]();\n        this.readStream$ = this.readSubject.asObservable();\n        this.readStream$.subscribe(function (data) { return onComplete(data); });\n        this.data = base64;\n        this.readSubject.next(this.data);\n        this.reader = null;\n    };\n    UploadImageService.prototype.addFile = function (f, onComplete) {\n        this.destroy();\n        this.readSubject = new Subject[\"Subject\"]();\n        this.readStream$ = this.readSubject.asObservable();\n        this.readStream$.subscribe(function (data) { return onComplete(data); });\n        this.file = f;\n        this.readFile();\n    };\n    UploadImageService.prototype.readFile = function () {\n        if (this.file) {\n            this.reader = new FileReader();\n            this.reader.addEventListener('load', this.loadedFile, false);\n            this.reader.readAsDataURL(this.file);\n        }\n    };\n    UploadImageService.prototype.destroy = function () {\n        if (this.readSubject != null)\n            this.readSubject.unsubscribe();\n        this.readSubject = null;\n        this.readStream$ = null;\n        if (this.resampleSubject != null)\n            this.resampleSubject.unsubscribe();\n        this.resampleSubject = null;\n        this.resampleStream$ = null;\n        this.file = null;\n        this.data = null;\n        if (this.reader != null) {\n            this.reader.abort();\n            this.reader.removeEventListener('load', this.loadedFile);\n        }\n        this.reader = null;\n    };\n    UploadImageService.prototype.resample = function (imageData, percentValue, minWidth, minHeight) {\n        var _this = this;\n        if (percentValue === void 0) { percentValue = 1; }\n        if (this.resampleSubject != null)\n            this.resampleSubject.unsubscribe();\n        this.resampleSubject = new Subject[\"Subject\"]();\n        this.resampleStream$ = this.resampleSubject.asObservable();\n        var image = document.createElement('img');\n        image.onload = function (e) {\n            var canvas = document.createElement('canvas');\n            var percent = percentValue / 100;\n            var newW = (image.width * percent) | 0;\n            var newH = (image.width * percent) | 0;\n            if (minWidth != null)\n                newW = newW < minWidth ? minWidth : newW;\n            if (minHeight != null)\n                newH = newH < minHeight ? minHeight : newH;\n            if (image.width > image.height) {\n                if (image.width > newW) {\n                    image.height *= newW / image.width;\n                    image.width = newW;\n                }\n            }\n            else {\n                if (image.height > newH) {\n                    image.width *= newH / image.height;\n                    image.height = newH;\n                }\n            }\n            canvas.width = image.width;\n            canvas.height = image.height;\n            var ctx = canvas.getContext('2d');\n            if (ctx)\n                ctx.drawImage(image, 0, 0, image.width, image.height);\n            var data = canvas.toDataURL();\n            if (_this.resampleSubject)\n                _this.resampleSubject.next(data);\n        };\n        image.src = imageData;\n        return this.resampleStream$;\n    };\n    UploadImageService = upload_image_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        upload_image_service___metadata(\"design:paramtypes\", [])\n    ], UploadImageService);\n    return UploadImageService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/upload/image/upload.image.component.ts\nvar upload_image_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar upload_image_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar upload_image_component_UploadImageComponent = (function () {\n    function UploadImageComponent(renderer, service, cdr) {\n        this.renderer = renderer;\n        this.service = service;\n        this.cdr = cdr;\n        this.imageChange = new core_es5[\"EventEmitter\"]();\n        this.isDragOver = false;\n        this.resample = false;\n        this.resampleSizeValue = 100;\n        this.maxSizeCallback = new core_es5[\"EventEmitter\"]();\n    }\n    UploadImageComponent.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.imageData != null)\n            this.service.addBase64(this.imageData, function (data) { return _this.previewData(data); });\n    };\n    UploadImageComponent.prototype.ngOnDestroy = function () {\n        this.service.destroy();\n    };\n    UploadImageComponent.prototype.onDragOver = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        this.isDragOver = true;\n        return false;\n    };\n    UploadImageComponent.prototype.onDragLeave = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        this.isDragOver = false;\n        return false;\n    };\n    UploadImageComponent.prototype.onDrop = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        if (e && e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0)\n            this.addFile(e.dataTransfer.files.item(0));\n        return false;\n    };\n    UploadImageComponent.prototype.onChange = function (e) {\n        this.originalImageData = null;\n        this.originalImageWidth = null;\n        this.resampleSizeValue = 100;\n        this.onBrowse(e);\n        return false;\n    };\n    UploadImageComponent.prototype.onBrowse = function (e) {\n        dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n        if (this.browse)\n            this.browse.nativeElement.click();\n        else\n            throw new Error('No `browse` element in upload.image.component');\n        return false;\n    };\n    UploadImageComponent.prototype.onFileBrowse = function () {\n        if (this.browse && this.browse.nativeElement && this.browse.nativeElement.files\n            && this.browse.nativeElement.files.length > 0) {\n            this.addFile(this.browse.nativeElement.files.item(0));\n        }\n    };\n    UploadImageComponent.prototype.onRemove = function () {\n        this.imageData = null;\n        this.originalImageData = null;\n        this.originalImageWidth = null;\n        this.resampleSizeValue = 100;\n        if (this.browse && this.browse.nativeElement)\n            this.renderer.setProperty(this.browse.nativeElement, 'value', null);\n        this.service.destroy();\n        this.previewData(null);\n        this.cdr.markForCheck();\n    };\n    UploadImageComponent.prototype.onResampleImage = function (percentValue) {\n        var _this = this;\n        this.resampleSizeValue = percentValue;\n        if (this.minWidth && this.minHeight)\n            this.service.resample(this.originalImageData, this.resampleSizeValue, this.minWidth, this.minHeight)\n                .subscribe(function (data) { return _this.previewData(data); });\n    };\n    UploadImageComponent.prototype.onResamplePreview = function (percentValue) {\n        this.resampleSizeValue = percentValue;\n        var p = percentValue / 100;\n        if (this.originalImageWidth != null && this.minWidth) {\n            var w = (this.originalImageWidth * p) | 0;\n            this.renderer.setStyle(this.preview.nativeElement, 'width', (w < this.minWidth ? this.minWidth : w) + 'px');\n        }\n        else {\n            this.renderer.setStyle(this.preview.nativeElement, 'width', 'null');\n        }\n    };\n    UploadImageComponent.prototype.addFile = function (file) {\n        var _this = this;\n        this.service.addFile(file, function (data) { return _this.previewData(data); });\n    };\n    UploadImageComponent.prototype.previewData = function (data) {\n        var _this = this;\n        var imageFileSize = this.getImageFileSize(data);\n        var removeOnImageLoadListener = null;\n        this.renderer.removeClass(this.preview.nativeElement, 'visible');\n        if (data != null) {\n            removeOnImageLoadListener = this.renderer.listen(this.preview.nativeElement, 'load', function () {\n                removeOnImageLoadListener();\n                if (_this.originalImageWidth == null)\n                    _this.originalImageWidth = _this.preview.nativeElement.naturalWidth;\n                var sizeExceed = false;\n                if (_this.maxWidth && (_this.preview.nativeElement.naturalWidth > _this.maxWidth)) {\n                    sizeExceed = true;\n                }\n                if (_this.maxHeight && (_this.preview.nativeElement.naturalHeight > _this.maxHeight)) {\n                    sizeExceed = true;\n                }\n                if (_this.maxFileSize && (imageFileSize > _this.maxFileSize)) {\n                    sizeExceed = true;\n                }\n                if (sizeExceed) {\n                    _this.onRemove();\n                    _this.maxSizeCallback.emit({ maxWidth: _this.maxWidth, maxHeight: _this.maxHeight, maxFileSize: _this.maxFileSize });\n                }\n                else {\n                    if (_this.imageData != null)\n                        _this.renderer.addClass(_this.preview.nativeElement, 'visible');\n                    else\n                        _this.renderer.removeClass(_this.preview.nativeElement, 'visible');\n                    _this.onResamplePreview(_this.resampleSizeValue);\n                }\n            });\n        }\n        this.renderer.setAttribute(this.preview.nativeElement, 'src', data);\n        this.imageData = data;\n        if (this.originalImageData == null)\n            this.originalImageData = data;\n        this.imageChange.emit(data);\n    };\n    UploadImageComponent.prototype.getImageFileSize = function (data) {\n        var result = 0;\n        var dataStr = data;\n        if (dataStr == null) {\n            return result;\n        }\n        var pattern = ';base64,';\n        var pos = dataStr.indexOf(pattern);\n        if (pos == -1) {\n            return result;\n        }\n        return Math.ceil((dataStr.length - (pos + pattern.length)) * 0.75);\n    };\n    var _a, _b, _c, _d, _e;\n    upload_image_component___decorate([\n        Object(core_es5[\"ViewChild\"])('browse'),\n        upload_image_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], UploadImageComponent.prototype, \"browse\", void 0);\n    upload_image_component___decorate([\n        Object(core_es5[\"ViewChild\"])('preview'),\n        upload_image_component___metadata(\"design:type\", typeof (_b = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _b || Object)\n    ], UploadImageComponent.prototype, \"preview\", void 0);\n    UploadImageComponent = upload_image_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'upload-image',\n            host: {\n                '[class.hover]': 'isDragOver',\n                '(dragover)': 'onDragOver($event)',\n                '(dragleave)': 'onDragLeave($event)',\n                '(drop)': 'onDrop($event)'\n            },\n            inputs: ['imageData', 'resample', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'maxFileSize'],\n            outputs: ['imageChange', 'maxSizeCallback'],\n            viewProviders: [upload_image_service_UploadImageService],\n            template: __webpack_require__(1375),\n            styles: [__webpack_require__(1376)]\n        }),\n        upload_image_component___metadata(\"design:paramtypes\", [typeof (_c = typeof core_es5[\"Renderer2\"] !== \"undefined\" && core_es5[\"Renderer2\"]) === \"function\" && _c || Object, typeof (_d = typeof upload_image_service_UploadImageService !== \"undefined\" && upload_image_service_UploadImageService) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object])\n    ], UploadImageComponent);\n    return UploadImageComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/form/form.module.ts\nvar form_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar form_module_FormComponentsModule = (function () {\n    function FormComponentsModule() {\n    }\n    FormComponentsModule = form_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                forms_es5[\"FormsModule\"],\n            ],\n            providers: [pagination_service_PaginationService],\n            declarations: [\n                integerOnly_directive_InputIntegerOnlyDirective, floatOnly_directive_InputFloatOnlyDirective,\n                dropdown_component_DropdownComponent, dropdown_list_component_DropdownListComponent, dropdown_list_pipe_DropdownListPipe,\n                switch_component_SwitchComponent,\n                editable_input_component_EditableInputComponent,\n                rangeslider_component_RangesliderComponent,\n                search_component_SearchComponent,\n                pagination_bar_component_PaginationBarComponent,\n                pagination_buttons_component_PaginationButtonsComponent,\n                pagination_size_component_PaginationSizeComponent,\n                check_buttons_component_CheckButtonsComponent,\n                upload_image_component_UploadImageComponent, upload_file_component_UploadFileComponent,\n                data_list_component_DataListComponent,\n                image_grid_component_ImageGridComponent,\n                singlechoice_input_component_SinglechoiceInputComponent\n            ],\n            entryComponents: [\n                switch_component_SwitchComponent,\n                dropdown_component_DropdownComponent, dropdown_list_component_DropdownListComponent,\n                editable_input_component_EditableInputComponent,\n                rangeslider_component_RangesliderComponent,\n                search_component_SearchComponent,\n                pagination_bar_component_PaginationBarComponent,\n                pagination_buttons_component_PaginationButtonsComponent,\n                pagination_size_component_PaginationSizeComponent,\n                check_buttons_component_CheckButtonsComponent,\n                upload_image_component_UploadImageComponent, upload_file_component_UploadFileComponent,\n                data_list_component_DataListComponent,\n                image_grid_component_ImageGridComponent\n            ],\n            exports: [\n                integerOnly_directive_InputIntegerOnlyDirective, floatOnly_directive_InputFloatOnlyDirective,\n                switch_component_SwitchComponent,\n                dropdown_component_DropdownComponent,\n                editable_input_component_EditableInputComponent,\n                rangeslider_component_RangesliderComponent,\n                search_component_SearchComponent,\n                pagination_bar_component_PaginationBarComponent,\n                check_buttons_component_CheckButtonsComponent,\n                upload_image_component_UploadImageComponent, upload_file_component_UploadFileComponent,\n                data_list_component_DataListComponent,\n                image_grid_component_ImageGridComponent,\n                singlechoice_input_component_SinglechoiceInputComponent\n            ]\n        })\n    ], FormComponentsModule);\n    return FormComponentsModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/service/analytics/base.service.ts\nvar base_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar base_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar base_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar base_service_BaseService = (function (_super) {\n    base_service___extends(BaseService, _super);\n    function BaseService(auth, http, exception, router, urlService, user) {\n        var _this = _super.call(this, auth, http, exception, router, urlService) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.urlService = urlService;\n        _this.user = user;\n        _this.granularity = 'day';\n        return _this;\n    }\n    BaseService.prototype.initDateRange = function (range) {\n        var result = {\n            startDate: range.startDate.clone(),\n            endDate: range.endDate.clone()\n        };\n        result.endDate = result.endDate.add(1, 'd');\n        return result;\n    };\n    BaseService.prototype.alignPeriodRange = function (startDate, endDate, granularity) {\n        if ((granularity == 'hour') || (granularity == 'day')) {\n            startDate = startDate.startOf('day');\n            endDate = endDate.startOf('day');\n            endDate = endDate.add(1, 'd');\n        }\n        else {\n            var granularityAny = granularity;\n            startDate = startDate.startOf(granularityAny);\n            endDate = endDate.startOf(granularityAny);\n            endDate = endDate.add(1, granularityAny);\n        }\n    };\n    BaseService.prototype.prepareTsperiodParams = function (startDate, endDate, granularity) {\n        startDate = startDate.clone();\n        endDate = endDate.clone();\n        this.alignPeriodRange(startDate, endDate, granularity);\n        var ranges = new Array();\n        var iter = startDate;\n        while (iter.isBefore(endDate)) {\n            var nextDate = iter.clone();\n            nextDate.add(1, granularity);\n            ranges.push([iter.unix(), nextDate.unix()]);\n            iter = nextDate;\n        }\n        var tsPeriods = this.convertTimestampRangesIntoTimestampPeriods(ranges);\n        var params = new Array();\n        for (var _i = 0, tsPeriods_1 = tsPeriods; _i < tsPeriods_1.length; _i++) {\n            var tsperiod = tsPeriods_1[_i];\n            params.push('tsperiod[]=' + tsperiod.first + ',' + tsperiod.last + ',' + tsperiod.step);\n        }\n        return params;\n    };\n    BaseService.prototype.convertTimestampRangesIntoTimestampPeriods = function (ranges) {\n        var result = [];\n        var currPeriod = null;\n        for (var pos = 0; pos < ranges.length; pos++) {\n            var diff = ranges[pos][1] - ranges[pos][0];\n            if (currPeriod === null) {\n                currPeriod = {\n                    first: ranges[pos][0],\n                    last: ranges[pos][0],\n                    step: diff\n                };\n                result.push(currPeriod);\n            }\n            else if (currPeriod.step != diff) {\n                currPeriod = {\n                    first: ranges[pos][0],\n                    last: ranges[pos][0],\n                    step: diff\n                };\n                result.push(currPeriod);\n            }\n            else {\n                currPeriod.last = ranges[pos][0];\n            }\n        }\n        return result;\n    };\n    BaseService.prototype.safeEncodeUriComponentForDjango = function (str) {\n        str = str + '';\n        return encodeURIComponent(str.replace(/\\!/g, '!!').replace(/\\//g, '!+'));\n    };\n    var _a, _b, _c, _d, _e, _f;\n    BaseService = base_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        base_service___metadata(\"design:paramtypes\", [typeof (_a = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof exception_service[\"a\" /* ExceptionService */] !== \"undefined\" && exception_service[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object])\n    ], BaseService);\n    return BaseService;\n}(api_service[\"a\" /* BradmaxApi */]));\n\n\n// CONCATENATED MODULE: ./src/service/analytics.service.ts\nvar analytics_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar analytics_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar analytics_service_AnalyticsService = (function (_super) {\n    analytics_service___extends(AnalyticsService, _super);\n    function AnalyticsService() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    AnalyticsService.prototype.getDashboardData = function (accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var today = moment_default()().startOf('day');\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/dashboard?todayts=' + today.unix();\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getAudienceHistoryForRange = function (startDate, endDate, granularity, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        if (!granularity) {\n            granularity = this.granularity;\n        }\n        var params = this.prepareTsperiodParams(startDate, endDate, granularity);\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/audience-history?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getAudienceSummaryForRange = function (startDate, endDate, granularityForHistory, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        startDate = startDate.clone();\n        endDate = endDate.clone();\n        if (granularityForHistory) {\n            this.alignPeriodRange(startDate, endDate, granularityForHistory);\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var fields = 'views,users';\n        if (this.user.isEngagementRateEnabled()) {\n            fields += ',watching_time';\n        }\n        var url = 'accounts/' + accountId + '/analytics/audience-history?fields=' + fields + '&tsrange[]=' + startDate.unix() + ',' + endDate.unix();\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            if (response && (response.length > 0)) {\n                resolveSource.next(response[0]);\n            }\n            else {\n                resolveSource.next(null);\n            }\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getTechnologyStatsForRange = function (startDate, endDate, granularity, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var params = this.prepareTsperiodParams(startDate, endDate, granularity);\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/technology-statistics?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getTechnologyStatsFor24h = function (startDate, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/technology-statistics?tsperiod[]=' + startDate.unix().toString() + ',' + (startDate.unix() + 23 * 3600).toString() + ',3600';\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getUsersAndViews = function (startDate, endDate, granularity, accountId) {\n        var resolveSource = new Subject[\"Subject\"]();\n        this.getAudienceHistoryForRange(startDate, endDate, granularity, accountId)\n            .subscribe(function (data) {\n            var usersData = { data: [], label: 'Users' };\n            var usersLabels = [];\n            var viewsData = { data: [], label: 'Views' };\n            var viewsLabels = [];\n            for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n                var rec = data_1[_i];\n                usersData.data.push(parseFloat(rec.users));\n                viewsData.data.push(parseFloat(rec.views));\n                usersLabels.push(moment_default.a.unix(rec.from).toISOString());\n                viewsLabels.push(moment_default.a.unix(rec.from).toISOString());\n            }\n            var usersChartData = { data: usersData, labels: usersLabels };\n            var viewsChartData = { data: viewsData, labels: viewsLabels };\n            resolveSource.next([usersChartData, viewsChartData]);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getGeoCountriesStats = function (startDate, endDate, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        startDate = startDate.clone().startOf('day');\n        endDate = endDate.clone().startOf('day');\n        endDate = endDate.add(1, 'd');\n        var params = [];\n        params.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/geo/country?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getGeoRegionsStats = function (startDate, endDate, countryCode, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        startDate = startDate.clone().startOf('day');\n        endDate = endDate.clone().startOf('day');\n        endDate = endDate.add(1, 'd');\n        var params = [];\n        params.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/geo/country/' + countryCode + '/region?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getGeoCitiesStats = function (startDate, endDate, countryCode, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        startDate = startDate.clone().startOf('day');\n        endDate = endDate.clone().startOf('day');\n        endDate = endDate.add(1, 'd');\n        var params = [];\n        params.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/geo/country/' + countryCode + '/city?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getRealtimeTopViewedMediaMetadataList = function (pagingOptions, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var params = [];\n        for (var key in pagingOptions) {\n            var val = pagingOptions[key];\n            if ((val !== null) && (val !== '')) {\n                params.push(key + '=' + encodeURIComponent(val));\n            }\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/realtime/top-viewed-media?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getRealtimeAccountViewersNum = function (accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/realtime/viewers-num';\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getRealtimeMediaViewersNum = function (mediaMaterialId, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/realtime/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/viewers-num';\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService.prototype.getGoogleMapsApiKey = function () {\n        return 'AIzaSyAFWd3IeJ83WwKdNSqs1NNTIyKniUREGjo';\n    };\n    AnalyticsService.prototype.getClientToken = function (accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/client-token';\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response.client_token);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AnalyticsService = analytics_service___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], AnalyticsService);\n    return AnalyticsService;\n}(base_service_BaseService));\n\n\n// CONCATENATED MODULE: ./src/service/export.service.ts\nvar export_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar export_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar export_service_ExportService = (function () {\n    function ExportService() {\n    }\n    ExportService.prototype.removeOldExportLinksFromDocument = function () {\n        var linksToRemove = [];\n        for (var i = 0; i < document.body.children.length; i++) {\n            var n = document.body.children[i];\n            if ((n.tagName == 'A') && (n.getAttribute('data-export-link') == '1')) {\n                linksToRemove.push(n);\n            }\n        }\n        for (var i = 0; i < linksToRemove.length; i++) {\n            document.body.removeChild(linksToRemove[i]);\n        }\n    };\n    ExportService.prototype.exportFileFromJs = function (exportFileName, strData) {\n        this.removeOldExportLinksFromDocument();\n        var exportLink = document.createElement('a');\n        exportLink.style.opacity = '0';\n        exportLink.style.display = 'none';\n        exportLink.style.position = 'absolute';\n        exportLink.setAttribute('href', 'data:text/csv;base64,' + window.btoa(strData));\n        exportLink.setAttribute('download', exportFileName);\n        exportLink.setAttribute('data-export-link', '1');\n        exportLink.innerHTML = exportFileName;\n        document.body.appendChild(exportLink);\n        exportLink.click();\n    };\n    ExportService = export_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        export_service___metadata(\"design:paramtypes\", [])\n    ], ExportService);\n    return ExportService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/service/usersAndViewsVSTime.service.ts\nvar usersAndViewsVSTime_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar usersAndViewsVSTime_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar usersAndViewsVSTime_service_UsersAndViewsVsTimeService = (function () {\n    function UsersAndViewsVsTimeService(service) {\n        this.service = service;\n        this.chartOptions = null;\n        this.chartTypes = ['lineTime', 'bar'];\n        this.activeChartType = 'lineTime';\n        this.granularityTypes = ['all'];\n        this.activeGranularity = 'day';\n        this.chartDataChange = new Subject[\"Subject\"]();\n    }\n    UsersAndViewsVsTimeService.prototype.loadData = function () {\n        var _this = this;\n        this.chartData = null;\n        this.service.getUsersAndViews(this.startDate, this.endDate, this.activeGranularity).subscribe(function (data) {\n            _this.chartData = new Array();\n            _this.chartData.push(data[0].data);\n            _this.chartData.push(data[1].data);\n            _this.chartLabels = data[0].labels;\n            _this.chartDataChange.next(_this.chartData);\n        }, function (error) {\n            console.error('UsersAndViews Service ERROR', error);\n        });\n    };\n    UsersAndViewsVsTimeService.prototype.getChartDataChanges = function () {\n        return this.chartDataChange.asObservable();\n    };\n    UsersAndViewsVsTimeService.prototype.onChartTypeChange = function (type) {\n        this.activeChartType = type;\n    };\n    UsersAndViewsVsTimeService.prototype.onDateRangeChange = function (range) {\n        this.startDate = range[0];\n        this.endDate = range[1];\n        this.startDate.startOf('day');\n        this.endDate.startOf('day');\n        if (this.startDate && this.endDate && (this.startDate.unix() == this.endDate.unix())) {\n            this.activeGranularity = 'hour';\n        }\n        this.loadData();\n    };\n    UsersAndViewsVsTimeService.prototype.onGranularityChange = function (granularity) {\n        this.activeGranularity = granularity;\n        this.loadData();\n    };\n    UsersAndViewsVsTimeService.prototype.exportDataToCsv = function () {\n        var linesNum = this.chartLabels ? this.chartLabels.length : 0;\n        var result = '';\n        var line = '';\n        var dateFormat = 'YYYY-MM-DD HH:mm';\n        if ((this.activeGranularity == 'day') || (this.activeGranularity == 'week')) {\n            dateFormat = 'YYYY-MM-DD';\n        }\n        else if (this.activeGranularity == 'month') {\n            dateFormat = 'YYYY-MM';\n        }\n        else if (this.activeGranularity == 'year') {\n            dateFormat = 'YYYY';\n        }\n        result += \"Date,Users,Views\\r\\n\";\n        for (var i = 0; i < linesNum; i++) {\n            line = '\"' + moment_default()(this.chartLabels[i]).format(dateFormat) + '\",';\n            line += (this.chartData[0].data[i] + ',');\n            line += (this.chartData[1].data[i] + \"\\r\\n\");\n            result += line;\n        }\n        return result;\n    };\n    var _a;\n    UsersAndViewsVsTimeService = usersAndViewsVSTime_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        usersAndViewsVSTime_service___metadata(\"design:paramtypes\", [typeof (_a = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _a || Object])\n    ], UsersAndViewsVsTimeService);\n    return UsersAndViewsVsTimeService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/audience/audience.view.component.ts\nvar audience_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar audience_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar audience_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar audience_view_component_AnalyticsAudienceView = (function (_super) {\n    audience_view_component___extends(AnalyticsAudienceView, _super);\n    function AnalyticsAudienceView(chartService, analyticsService, productService, locale, translation, user, exportService, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.analyticsService = analyticsService;\n        _this.productService = productService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.exportService = exportService;\n        _this.cdr = cdr;\n        var range = _this.user.getDateRangeSelection();\n        _this.chartService.startDate = range.startDate;\n        _this.chartService.endDate = range.endDate;\n        _this.monthlyStats = [];\n        _this.summary = {\n            views: 0,\n            users: 0,\n            viewsPerUser: null,\n            avgWatchingTime: null\n        };\n        _this.chartService.getChartDataChanges().subscribe(function (data) { return _this.cdr.markForCheck(); });\n        return _this;\n    }\n    AnalyticsAudienceView.prototype.ngOnInit = function () {\n        this.loadMonthlyStats();\n        this.loadLastAccountingPeriodsStats();\n        this.chartService.loadData();\n        this.loadSummaryStats();\n        this.cdr.markForCheck();\n    };\n    AnalyticsAudienceView.prototype.onDateRangeChanged = function (range) {\n        this.chartService.onDateRangeChange(range);\n        this.user.setDateRangeSelection(range[0].startOf('day'), range[1].startOf('day'));\n        this.loadSummaryStats();\n        this.cdr.markForCheck();\n    };\n    AnalyticsAudienceView.prototype.calcViewsUsagePercent = function (viewsMade, viewsSize) {\n        var result = 0;\n        if (viewsSize > 0) {\n            result = 100 * viewsMade / viewsSize;\n        }\n        if (result > 100) {\n            result = 100;\n        }\n        return result;\n    };\n    AnalyticsAudienceView.prototype.chartDataExportCsv = function () {\n        var data = this.chartService.exportDataToCsv();\n        var exportFileName = 'bradmax_audience_' + this.chartService.startDate.format('YYYYMMDD')\n            + '_' + this.chartService.endDate.format('YYYYMMDD') + '_by' + this.chartService.activeGranularity + '.csv';\n        this.exportService.exportFileFromJs(exportFileName, data);\n    };\n    AnalyticsAudienceView.prototype.monthlyStatsExportCsv = function () {\n        if (!this.monthlyStats || this.monthlyStats.length < 2) {\n            throw \"Cannot export monthly stats. No stats available yet.\";\n        }\n        var exportFileName = 'bradmax_audience_' + this.monthlyStats[this.monthlyStats.length - 1].date.format('YYYYMMDD')\n            + '_' + this.monthlyStats[0].date.format('YYYYMMDD') + '_bymonth.csv';\n        var data = \"Date,Users,Views\\r\\n\";\n        for (var i = 0; i < this.monthlyStats.length; i++) {\n            var rec = this.monthlyStats[i];\n            var line = '\"' + rec.date.format('YYYY-MM-DD') + '\",';\n            line += (rec.users + ',');\n            line += (rec.views + \"\\r\\n\");\n            data += line;\n        }\n        this.exportService.exportFileFromJs(exportFileName, data);\n    };\n    AnalyticsAudienceView.prototype.loadSummaryStats = function () {\n        var _this = this;\n        this.analyticsService.getAudienceSummaryForRange(this.chartService.startDate, this.chartService.endDate, this.chartService.activeGranularity).subscribe(function (data) {\n            _this.summary.views = parseFloat(data.views);\n            _this.summary.users = parseFloat(data.users);\n            _this.summary.viewsPerUser = null;\n            if (_this.summary.users > 0) {\n                _this.summary.viewsPerUser = _this.summary.views / _this.summary.users;\n                if (_this.user.isEngagementRateEnabled()) {\n                    _this.summary.avgWatchingTime = parseFloat(data.watching_time) / _this.summary.users;\n                }\n            }\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsAudienceView.prototype.loadMonthlyStats = function () {\n        var _this = this;\n        var currMonthStartDate = moment_default()().startOf('month');\n        var tableStartDate = currMonthStartDate.clone().subtract(12, 'month');\n        this.analyticsService.getAudienceHistoryForRange(tableStartDate, currMonthStartDate, 'month').subscribe(function (data) {\n            data.reverse();\n            var newMonthlyStats = [];\n            for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n                var rec = data_1[_i];\n                newMonthlyStats.push({\n                    date: moment_default.a.unix(rec.from),\n                    users: rec.users,\n                    views: rec.views\n                });\n            }\n            _this.monthlyStats = newMonthlyStats;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsAudienceView.prototype.loadLastAccountingPeriodsStats = function () {\n        var _this = this;\n        var lastStatsInResponseNum = 2;\n        if (this.user.accountId != null)\n            this.productService.getProductsForAccount(this.user.accountId, lastStatsInResponseNum)\n                .subscribe(function (data) {\n                for (var _i = 0, _a = data.results; _i < _a.length; _i++) {\n                    var rec = _a[_i];\n                    if ((rec.product.id != 1) || !rec.usage_stats) {\n                        continue;\n                    }\n                    if (rec.usage_stats.length > 0) {\n                        _this.currentAccountingBaseViewsSize = rec.base_views_size;\n                        _this.currentAccountingPeriodViews = rec.usage_stats[0].views;\n                        _this.currentAccountingPeriodFromDate = moment_default.a.unix(rec.usage_stats[0].from);\n                        _this.currentAccountingPeriodToDate = moment_default.a.unix(rec.usage_stats[0].to);\n                        _this.currentAccountingPeriodToDate.subtract(1, 'day');\n                    }\n                    if (rec.usage_stats.length > 1) {\n                        _this.lastAccountingBaseViewsSize = rec.base_views_size;\n                        _this.lastAccountingPeriodViews = rec.usage_stats[1].views;\n                        _this.lastAccountingPeriodFromDate = moment_default.a.unix(rec.usage_stats[1].from);\n                        _this.lastAccountingPeriodToDate = moment_default.a.unix(rec.usage_stats[1].to);\n                        _this.lastAccountingPeriodToDate.subtract(1, 'day');\n                    }\n                }\n            });\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    AnalyticsAudienceView = audience_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-audience-view',\n            template: __webpack_require__(1377),\n            styles: [\n                ':host .table-loader {height:330px;position:relative;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        audience_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _b || Object, typeof (_c = typeof product_service[\"a\" /* ProductService */] !== \"undefined\" && product_service[\"a\" /* ProductService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _d || Object, typeof (_e = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object, typeof (_g = typeof export_service_ExportService !== \"undefined\" && export_service_ExportService) === \"function\" && _g || Object, typeof (_h = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _h || Object])\n    ], AnalyticsAudienceView);\n    return AnalyticsAudienceView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/audience/audience.module.ts\nvar audience_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar audience_module_routes = [\n    { path: '', component: audience_view_component_AnalyticsAudienceView },\n];\nvar audience_module_AnalyticsAudienceModule = (function () {\n    function AnalyticsAudienceModule() {\n    }\n    AnalyticsAudienceModule = audience_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(audience_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule\n            ],\n            declarations: [\n                audience_view_component_AnalyticsAudienceView\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n                product_service[\"a\" /* ProductService */]\n            ]\n        })\n    ], AnalyticsAudienceModule);\n    return AnalyticsAudienceModule;\n}());\n\n\n// CONCATENATED MODULE: ./node_modules/ngx-chips/node_modules/tslib/tslib.es6.js\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction tslib_es6___extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nfunction tslib_es6___decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction tslib_es6___param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nfunction tslib_es6___metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nfunction __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nfunction __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nfunction __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nfunction __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nfunction __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nfunction __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nfunction __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nfunction __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nfunction __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nfunction __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nfunction __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\n// EXTERNAL MODULE: ./node_modules/rxjs/operators.js\nvar operators = __webpack_require__(26);\nvar operators_default = /*#__PURE__*/__webpack_require__.n(operators);\n\n// CONCATENATED MODULE: ./node_modules/ng2-material-dropdown/fesm5/ng2-material-dropdown.js\n\n\n\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ng2_material_dropdown_Ng2DropdownButton = /** @class */ (function () {\n    function Ng2DropdownButton(element) {\n        this.element = element;\n        this.onMenuToggled = new core_es5[\"EventEmitter\"]();\n        this.showCaret = true;\n    }\n    /**\n     * \\@name toggleMenu\n     * @desc emits event to toggle menu\n     * @return {?}\n     */\n    Ng2DropdownButton.prototype.toggleMenu = /**\n     * \\@name toggleMenu\n     * @desc emits event to toggle menu\n     * @return {?}\n     */\n    function () {\n        this.onMenuToggled.emit(true);\n    };\n    /**\n     * \\@name getPosition\n     * @desc returns position of the button\n     * @return {?}\n     */\n    Ng2DropdownButton.prototype.getPosition = /**\n     * \\@name getPosition\n     * @desc returns position of the button\n     * @return {?}\n     */\n    function () {\n        return this.element.nativeElement.getBoundingClientRect();\n    };\n    Ng2DropdownButton.decorators = [\n        { type: core_es5[\"Component\"], args: [{\n                    selector: 'ng2-dropdown-button',\n                    styles: [\".ng2-dropdown-button{font-family:Roboto,\\\"Helvetica Neue\\\",Helvetica,Arial;background:#fff;padding:.45rem .25rem;font-size:14px;letter-spacing:.08rem;color:#444;outline:0;cursor:pointer;font-weight:400;border:none;border-bottom:1px solid #efefef;text-align:left;min-width:100px;width:100%;display:flex;flex-direction:row;max-width:150px}.ng2-dropdown-button:hover{color:#222}.ng2-dropdown-button:active,.ng2-dropdown-button:focus{color:#222;border-bottom:2px solid #2196f3}.ng2-dropdown-button__label{flex:1 1 95%}.ng2-dropdown-button__caret{width:12px;height:12px;display:flex;flex:1 1 6%}:host-context(.ng2-dropdown-button--icon) .ng2-dropdown-button{border:none;min-width:40px;width:40px;border-radius:100%;transition:all .2s;text-align:center;height:40px;padding:.5em}:host-context(.ng2-dropdown-button--icon) .ng2-dropdown-button:active{background:rgba(0,0,0,.2)}\"],\n                    template: \"<button class='ng2-dropdown-button' type=\\\"button\\\" (click)=\\\"toggleMenu()\\\" tabindex=\\\"0s\\\">\\n    <span class=\\\"ng2-dropdown-button__label\\\">\\n        <ng-content></ng-content>\\n    </span>\\n\\n    <span class=\\\"ng2-dropdown-button__caret\\\" *ngIf=\\\"showCaret\\\">\\n        <svg enable-background=\\\"new 0 0 32 32\\\" height=\\\"16px\\\" id=\\\"\\u0421\\u043B\\u043E\\u0439_1\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 32 32\\\" width=\\\"16px\\\" xml:space=\\\"preserve\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"><path d=\\\"M24.285,11.284L16,19.571l-8.285-8.288c-0.395-0.395-1.034-0.395-1.429,0  c-0.394,0.395-0.394,1.035,0,1.43l8.999,9.002l0,0l0,0c0.394,0.395,1.034,0.395,1.428,0l8.999-9.002  c0.394-0.395,0.394-1.036,0-1.431C25.319,10.889,24.679,10.889,24.285,11.284z\\\" fill=\\\"#121313\\\" id=\\\"Expand_More\\\"/><g/><g/><g/><g/><g/><g/></svg>\\n    </span>\\n</button>\\n\"\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2DropdownButton.ctorParameters = function () { return [\n        { type: core_es5[\"ElementRef\"], },\n    ]; };\n    Ng2DropdownButton.propDecorators = {\n        \"onMenuToggled\": [{ type: core_es5[\"Output\"] },],\n        \"showCaret\": [{ type: core_es5[\"Input\"] },],\n    };\n    return Ng2DropdownButton;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar /** @type {?} */ KEYS = {\n    BACKSPACE: 9,\n    PREV: 38,\n    NEXT: 40,\n    ENTER: 13,\n    ESCAPE: 27\n};\n/**\n * \\@name onSwitchNext\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onSwitchNext = function (index, items, state$$1) {\n    if (index < items.length - 1) {\n        state$$1.select(items[index + 1], true);\n    }\n};\n/**\n * \\@name onSwitchPrev\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onSwitchPrev = function (index, items, state$$1) {\n    if (index > 0) {\n        state$$1.select(items[index - 1], true);\n    }\n};\n/**\n * \\@name onBackspace\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onBackspace = function (index, items, state$$1) {\n    if (index < items.length - 1) {\n        state$$1.select(items[index + 1], true);\n    }\n    else {\n        state$$1.select(items[0], true);\n    }\n};\n/**\n * @this {?}\n * @return {?}\n */\nfunction onEscape() {\n    this.hide();\n}\n/**\n * \\@name onItemClicked\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onItemClicked = function (index, items, state$$1) {\n    return state$$1.selectedItem ? state$$1.selectedItem.click() : undefined;\n};\nvar /** @type {?} */ ACTIONS = (ng2_material_dropdown__a = {},\n    ng2_material_dropdown__a[KEYS.BACKSPACE] = onBackspace,\n    ng2_material_dropdown__a[KEYS.PREV] = onSwitchPrev,\n    ng2_material_dropdown__a[KEYS.NEXT] = onSwitchNext,\n    ng2_material_dropdown__a[KEYS.ENTER] = onItemClicked,\n    ng2_material_dropdown__a[KEYS.ESCAPE] = onEscape,\n    ng2_material_dropdown__a);\n/**\n * @param {?} event\n * @return {?}\n */\nfunction arrowKeysHandler(event) {\n    if ([38, 40].indexOf(event.keyCode) > -1) {\n        event.preventDefault();\n    }\n}\nvar ng2_material_dropdown__a;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ng2_material_dropdown_Ng2DropdownState = /** @class */ (function () {\n    function Ng2DropdownState() {\n        this.onItemSelected = new core_es5[\"EventEmitter\"]();\n        this.onItemClicked = new core_es5[\"EventEmitter\"]();\n        this.onItemDestroyed = new core_es5[\"EventEmitter\"]();\n    }\n    Object.defineProperty(Ng2DropdownState.prototype, \"selectedItem\", {\n        get: /**\n         * \\@name selectedItem\n         * @desc getter for _selectedItem\n         * @return {?}\n         */\n        function () {\n            return this._selectedItem;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@name selects a menu item and emits event\n     * @param {?} item\n     * @param {?=} dispatchEvent\n     * @return {?}\n     */\n    Ng2DropdownState.prototype.select = /**\n     * \\@name selects a menu item and emits event\n     * @param {?} item\n     * @param {?=} dispatchEvent\n     * @return {?}\n     */\n    function (item, dispatchEvent) {\n        if (dispatchEvent === void 0) { dispatchEvent = true; }\n        this._selectedItem = item;\n        if (!dispatchEvent || !item) {\n            return;\n        }\n        item.focus();\n        this.onItemSelected.emit(item);\n    };\n    /**\n     * \\@name unselect\n     * @desc sets _selectedItem as undefined\n     * @return {?}\n     */\n    Ng2DropdownState.prototype.unselect = /**\n     * \\@name unselect\n     * @desc sets _selectedItem as undefined\n     * @return {?}\n     */\n    function () {\n        this._selectedItem = undefined;\n    };\n    return Ng2DropdownState;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ng2_material_dropdown_DropdownStateService = /** @class */ (function () {\n    function DropdownStateService() {\n        this.menuState = {\n            isVisible: /** @type {?} */ (false),\n            toString: /**\n             * @return {?}\n             */\n            function () {\n                return this.isVisible === true ? 'visible' : 'hidden';\n            }\n        };\n        this.dropdownState = new ng2_material_dropdown_Ng2DropdownState();\n    }\n    DropdownStateService.decorators = [\n        { type: core_es5[\"Injectable\"] },\n    ];\n    return DropdownStateService;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ng2_material_dropdown_Ng2MenuItem = /** @class */ (function () {\n    function Ng2MenuItem(state$$1, element, renderer) {\n        this.state = state$$1;\n        this.element = element;\n        this.renderer = renderer;\n        /**\n         * \\@preventClose\n         * @desc if true, clicking on the item won't close the dropdown\n         */\n        this.preventClose = false;\n    }\n    /**\n     * @return {?}\n     */\n    Ng2MenuItem.prototype.ngOnDestroy = /**\n     * @return {?}\n     */\n    function () {\n        this.state.dropdownState.onItemDestroyed.emit(this);\n    };\n    Object.defineProperty(Ng2MenuItem.prototype, \"isSelected\", {\n        get: /**\n         * \\@name isSelected\n         * @desc returns current selected item\n         * @return {?}\n         */\n        function () {\n            return this === this.state.dropdownState.selectedItem;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@name click\n     * @desc emits select event\n     * @param {?=} $event\n     * @return {?}\n     */\n    Ng2MenuItem.prototype.select = /**\n     * \\@name click\n     * @desc emits select event\n     * @param {?=} $event\n     * @return {?}\n     */\n    function ($event) {\n        this.state.dropdownState.select(this, true);\n        if ($event) {\n            $event.stopPropagation();\n            $event.preventDefault();\n        }\n    };\n    /**\n     * \\@name click\n     * @desc emits click event\n     * @return {?}\n     */\n    Ng2MenuItem.prototype.click = /**\n     * \\@name click\n     * @desc emits click event\n     * @return {?}\n     */\n    function () {\n        this.state.dropdownState.onItemClicked.emit(this);\n    };\n    /**\n     * \\@name focus\n     * @return {?}\n     */\n    Ng2MenuItem.prototype.focus = /**\n     * \\@name focus\n     * @return {?}\n     */\n    function () {\n        this.renderer.invokeElementMethod(this.element.nativeElement.children[0], 'focus');\n    };\n    Ng2MenuItem.decorators = [\n        { type: core_es5[\"Component\"], args: [{\n                    selector: 'ng2-menu-item',\n                    styles: [\".ng2-menu-item{font-family:Roboto,\\\"Helvetica Neue\\\",Helvetica,Arial;background:#fff;color:rgba(0,0,0,.87);cursor:pointer;font-size:.9em;text-transform:none;font-weight:400;letter-spacing:.03em;height:48px;line-height:48px;padding:.3em 1.25rem;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;transition:background .25s}.ng2-menu-item--selected{background:rgba(158,158,158,.2);outline:0}.ng2-menu-item:focus{outline:0}.ng2-menu-item:active{background:rgba(158,158,158,.4)}:host(ng2-menu-item) /deep/ [ng2-menu-item-icon]{vertical-align:middle;font-size:28px;width:1.5em;height:30px;color:rgba(0,0,0,.44)}\"],\n                    template: \"<div class='ng2-menu-item'\\n     role=\\\"button\\\"\\n     tabindex=\\\"0\\\"\\n     [class.ng2-menu-item--selected]=\\\"isSelected\\\"\\n     (keydown.enter)=\\\"click()\\\"\\n     (click)=\\\"click()\\\"\\n     (mouseover)=\\\"select()\\\">\\n        <ng-content></ng-content>\\n</div>\\n\"\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2MenuItem.ctorParameters = function () { return [\n        { type: ng2_material_dropdown_DropdownStateService, },\n        { type: core_es5[\"ElementRef\"], },\n        { type: core_es5[\"Renderer\"], },\n    ]; };\n    Ng2MenuItem.propDecorators = {\n        \"preventClose\": [{ type: core_es5[\"Input\"] },],\n        \"value\": [{ type: core_es5[\"Input\"] },],\n    };\n    return Ng2MenuItem;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ng2_material_dropdown_Ng2DropdownMenu = /** @class */ (function () {\n    function Ng2DropdownMenu(state$$1, element, renderer) {\n        this.state = state$$1;\n        this.element = element;\n        this.renderer = renderer;\n        /**\n         * \\@name width\n         */\n        this.width = 4;\n        /**\n         * \\@description if set to true, the first element of the dropdown will be automatically focused\n         * \\@name focusFirstElement\n         */\n        this.focusFirstElement = true;\n        /**\n         * \\@name appendToBody\n         */\n        this.appendToBody = true;\n        /**\n         * \\@name zIndex\n         */\n        this.zIndex = 1000;\n        this.listeners = {\n            arrowHandler: undefined,\n            handleKeypress: undefined\n        };\n    }\n    /**\n     * \\@name show\n     * \\@shows menu and selects first item\n     * @param {?=} position\n     * @param {?=} dynamic\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.show = /**\n     * \\@name show\n     * \\@shows menu and selects first item\n     * @param {?=} position\n     * @param {?=} dynamic\n     * @return {?}\n     */\n    function (position, dynamic) {\n        if (dynamic === void 0) { dynamic = true; }\n        var /** @type {?} */ dc = typeof document !== 'undefined' ? document : undefined;\n        var /** @type {?} */ wd = typeof window !== 'undefined' ? window : undefined;\n        if (!this.state.menuState.isVisible) {\n            // setting handlers\n            this.listeners.handleKeypress = this.renderer.listen(dc.body, 'keydown', this.handleKeypress.bind(this));\n            this.listeners.arrowHandler = this.renderer.listen(wd, 'keydown', arrowKeysHandler);\n        }\n        // update state\n        this.state.menuState.isVisible = true;\n        if (position) {\n            this.updatePosition(position, dynamic);\n        }\n    };\n    /**\n     * \\@name hide\n     * @desc hides menu\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.hide = /**\n     * \\@name hide\n     * @desc hides menu\n     * @return {?}\n     */\n    function () {\n        this.state.menuState.isVisible = false;\n        // reset selected item state\n        this.state.dropdownState.unselect();\n        // call function to unlisten\n        this.listeners.arrowHandler ? this.listeners.arrowHandler() : undefined;\n        this.listeners.handleKeypress ? this.listeners.handleKeypress() : undefined;\n    };\n    /**\n     * \\@name updatePosition\n     * @desc updates the menu position every time it is toggled\n     * @param {?} position {ClientRect}\n     * @param {?} dynamic {boolean}\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.updatePosition = /**\n     * \\@name updatePosition\n     * @desc updates the menu position every time it is toggled\n     * @param {?} position {ClientRect}\n     * @param {?} dynamic {boolean}\n     * @return {?}\n     */\n    function (position, dynamic) {\n        this.position = position;\n        this.updateOnChange(dynamic);\n    };\n    /**\n     * \\@name handleKeypress\n     * @desc executes functions on keyPress based on the key pressed\n     * @param {?} $event\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.handleKeypress = /**\n     * \\@name handleKeypress\n     * @desc executes functions on keyPress based on the key pressed\n     * @param {?} $event\n     * @return {?}\n     */\n    function ($event) {\n        var /** @type {?} */ key = $event.keyCode;\n        var /** @type {?} */ items = this.items.toArray();\n        var /** @type {?} */ index = items.indexOf(this.state.dropdownState.selectedItem);\n        if (!ACTIONS.hasOwnProperty(key)) {\n            return;\n        }\n        ACTIONS[key].call(this, index, items, this.state.dropdownState);\n    };\n    /**\n     * \\@name getMenuElement\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.getMenuElement = /**\n     * \\@name getMenuElement\n     * @return {?}\n     */\n    function () {\n        return this.element.nativeElement.children[0];\n    };\n    /**\n     * \\@name calcPositionOffset\n     * @param {?} position\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.calcPositionOffset = /**\n     * \\@name calcPositionOffset\n     * @param {?} position\n     * @return {?}\n     */\n    function (position) {\n        var /** @type {?} */ wd = typeof window !== 'undefined' ? window : undefined;\n        var /** @type {?} */ dc = typeof document !== 'undefined' ? document : undefined;\n        if (!wd || !dc || !position) {\n            return;\n        }\n        var /** @type {?} */ element = this.getMenuElement();\n        var /** @type {?} */ supportPageOffset = wd.pageXOffset !== undefined;\n        var /** @type {?} */ isCSS1Compat = ((dc.compatMode || '') === 'CSS1Compat');\n        var /** @type {?} */ x = supportPageOffset ? wd.pageXOffset : isCSS1Compat ?\n            dc.documentElement.scrollLeft : dc.body.scrollLeft;\n        var /** @type {?} */ y = supportPageOffset ? wd.pageYOffset : isCSS1Compat ?\n            dc.documentElement.scrollTop : dc.body.scrollTop;\n        var _a = this.applyOffset(position.top + (this.appendToBody ? y - 15 : 0) + \"px\", position.left + x - 5 + \"px\"), top = _a.top, left = _a.left;\n        var /** @type {?} */ clientWidth = element.clientWidth;\n        var /** @type {?} */ clientHeight = element.clientHeight;\n        var /** @type {?} */ marginFromBottom = parseInt(top) + clientHeight + (this.appendToBody ? 0 : y - 15);\n        var /** @type {?} */ marginFromRight = parseInt(left) + clientWidth;\n        var /** @type {?} */ windowScrollHeight = wd.innerHeight + wd.scrollY;\n        var /** @type {?} */ windowScrollWidth = wd.innerWidth + wd.scrollX;\n        if (marginFromBottom >= windowScrollHeight) {\n            top = parseInt(top.replace('px', '')) - clientHeight + \"px\";\n        }\n        if (marginFromRight >= windowScrollWidth) {\n            var /** @type {?} */ marginRight = marginFromRight - windowScrollWidth + 30;\n            left = parseInt(left.replace('px', '')) - marginRight + \"px\";\n        }\n        return { top: top, left: left };\n    };\n    /**\n     * @param {?} top\n     * @param {?} left\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.applyOffset = /**\n     * @param {?} top\n     * @param {?} left\n     * @return {?}\n     */\n    function (top, left) {\n        if (!this.offset) {\n            return { top: top, left: left };\n        }\n        var /** @type {?} */ offset = this.offset.split(' ');\n        if (!offset[1]) {\n            offset[1] = '0';\n        }\n        top = parseInt(top.replace('px', '')) + parseInt(offset[0]) + \"px\";\n        left = parseInt(left.replace('px', '')) + parseInt(offset[1]) + \"px\";\n        return { top: top, left: left };\n    };\n    /**\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.ngOnInit = /**\n     * @return {?}\n     */\n    function () {\n        var /** @type {?} */ dc = typeof document !== 'undefined' ? document : undefined;\n        if (this.appendToBody) {\n            // append menu element to the body\n            dc.body.appendChild(this.element.nativeElement);\n        }\n    };\n    /**\n     * @param {?=} dynamic\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.updateOnChange = /**\n     * @param {?=} dynamic\n     * @return {?}\n     */\n    function (dynamic) {\n        if (dynamic === void 0) { dynamic = true; }\n        var /** @type {?} */ element = this.getMenuElement();\n        var /** @type {?} */ position = this.calcPositionOffset(this.position);\n        if (position) {\n            this.renderer.setElementStyle(element, 'top', position.top.toString());\n            this.renderer.setElementStyle(element, 'left', position.left.toString());\n        }\n        // select first item unless user disabled this option\n        if (this.focusFirstElement &&\n            this.items.first &&\n            !this.state.dropdownState.selectedItem) {\n            this.state.dropdownState.select(this.items.first, false);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.ngOnDestroy = /**\n     * @return {?}\n     */\n    function () {\n        var /** @type {?} */ elem = this.element.nativeElement;\n        elem.parentNode.removeChild(elem);\n        if (this.listeners.handleKeypress) {\n            this.listeners.handleKeypress();\n        }\n    };\n    Ng2DropdownMenu.decorators = [\n        { type: core_es5[\"Component\"], args: [{\n                    selector: 'ng2-dropdown-menu',\n                    styles: [\":host{display:block}.ng2-dropdown-menu{overflow-y:auto;box-shadow:0 1px 2px 0 rgba(0,0,0,.3);position:absolute;padding:.5em 0;background:#fff;border-radius:1px;max-height:400px;width:260px;min-height:0;display:block}.ng2-dropdown-menu.ng2-dropdown-menu--inside-element{position:fixed}.ng2-dropdown-menu.ng2-dropdown-menu--width--2{width:200px}.ng2-dropdown-menu.ng2-dropdown-menu--width--4{width:260px}.ng2-dropdown-menu.ng2-dropdown-menu--width--6{width:320px}.ng2-dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:1;overflow:hidden}:host /deep/ .ng2-menu-divider{height:1px;min-height:1px;max-height:1px;width:100%;display:block;background:#f9f9f9}\"],\n                    template: \"<!-- MENU -->\\n<div class='ng2-dropdown-menu ng2-dropdown-menu---width--{{ width }}'\\n     [class.ng2-dropdown-menu--inside-element]=\\\"!appendToBody\\\"\\n     [class.ng2-dropdown-menu--open]=\\\"state.menuState.isVisible\\\"\\n     [style.z-index]=\\\"zIndex\\\"\\n     [@fade]=\\\"state.menuState.toString()\\\">\\n        <div class=\\\"ng2-dropdown-menu__options-container\\\"\\n             [@opacity]=\\\"state.menuState.toString()\\\">\\n            <ng-content></ng-content>\\n        </div>\\n</div>\\n\\n<!-- BACKDROP -->\\n<div class=\\\"ng2-dropdown-backdrop\\\" *ngIf=\\\"state.menuState.isVisible\\\" (click)=\\\"hide()\\\"></div>\\n\",\n                    animations: [\n                        trigger('fade', [\n                            animations_es5_state('visible', style({ display: 'block', opacity: 1, height: '*', width: '*' })),\n                            animations_es5_state('hidden', style({ display: 'none', opacity: 0, overflow: 'hidden', height: 0, width: 0 })),\n                            transition('hidden => visible', [\n                                animate('250ms ease-in', style({ opacity: 1, height: '*', width: '*' }))\n                            ]),\n                            transition('visible => hidden', [\n                                animate('350ms ease-out', style({ opacity: 0, width: 0, height: 0 }))\n                            ])\n                        ]),\n                        trigger('opacity', [\n                            transition('hidden => visible', [\n                                animate('450ms ease-in', animations_es5_keyframes([\n                                    style({ opacity: 0, offset: 0 }),\n                                    style({ opacity: 1, offset: 1 }),\n                                ]))\n                            ]),\n                            transition('visible => hidden', [\n                                animate('250ms ease-out', animations_es5_keyframes([\n                                    style({ opacity: 1, offset: 0 }),\n                                    style({ opacity: 0.5, offset: 0.3 }),\n                                    style({ opacity: 0, offset: 1 }),\n                                ]))\n                            ])\n                        ])\n                    ]\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2DropdownMenu.ctorParameters = function () { return [\n        { type: ng2_material_dropdown_DropdownStateService, },\n        { type: core_es5[\"ElementRef\"], },\n        { type: core_es5[\"Renderer\"], },\n    ]; };\n    Ng2DropdownMenu.propDecorators = {\n        \"width\": [{ type: core_es5[\"Input\"] },],\n        \"focusFirstElement\": [{ type: core_es5[\"Input\"] },],\n        \"offset\": [{ type: core_es5[\"Input\"] },],\n        \"appendToBody\": [{ type: core_es5[\"Input\"] },],\n        \"zIndex\": [{ type: core_es5[\"Input\"] },],\n        \"items\": [{ type: core_es5[\"ContentChildren\"], args: [ng2_material_dropdown_Ng2MenuItem,] },],\n    };\n    return Ng2DropdownMenu;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ng2_material_dropdown_Ng2Dropdown = /** @class */ (function () {\n    function Ng2Dropdown(state$$1) {\n        this.state = state$$1;\n        this.dynamicUpdate = true;\n        // outputs\n        this.onItemClicked = new core_es5[\"EventEmitter\"]();\n        this.onItemSelected = new core_es5[\"EventEmitter\"]();\n        this.onShow = new core_es5[\"EventEmitter\"]();\n        this.onHide = new core_es5[\"EventEmitter\"]();\n    }\n    /**\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.ngOnInit = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        this.state.dropdownState.onItemClicked.subscribe(function (item) {\n            _this.onItemClicked.emit(item);\n            if (item.preventClose) {\n                return;\n            }\n            _this.hide.call(_this);\n        });\n        if (this.button) {\n            this.button.onMenuToggled.subscribe(function () {\n                _this.toggleMenu();\n            });\n        }\n        this.state.dropdownState.onItemSelected.subscribe(function (item) {\n            _this.onItemSelected.emit(item);\n        });\n        this.state.dropdownState.onItemDestroyed.subscribe(function (item) {\n            var /** @type {?} */ newSelectedItem;\n            var /** @type {?} */ items = _this.menu.items.toArray();\n            if (item !== _this.state.dropdownState.selectedItem) {\n                return;\n            }\n            if (_this.menu.focusFirstElement) {\n                newSelectedItem = item === items[0] && items.length > 1 ? items[1] : items[0];\n            }\n            _this.state.dropdownState.select(newSelectedItem);\n        });\n    };\n    /**\n     * \\@name toggleMenu\n     * @desc toggles menu visibility\n     * @param {?=} position\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.toggleMenu = /**\n     * \\@name toggleMenu\n     * @desc toggles menu visibility\n     * @param {?=} position\n     * @return {?}\n     */\n    function (position) {\n        if (position === void 0) { position = this.button.getPosition(); }\n        this.state.menuState.isVisible ? this.hide() : this.show(position);\n    };\n    /**\n     * - hides dropdown\n     * \\@name hide\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.hide = /**\n     * - hides dropdown\n     * \\@name hide\n     * @return {?}\n     */\n    function () {\n        this.menu.hide();\n        this.onHide.emit(this);\n    };\n    /**\n     * - shows dropdown\n     * \\@name show\n     * @param {?=} position\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.show = /**\n     * - shows dropdown\n     * \\@name show\n     * @param {?=} position\n     * @return {?}\n     */\n    function (position) {\n        if (position === void 0) { position = this.button.getPosition(); }\n        this.menu.show(position, this.dynamicUpdate);\n        this.onShow.emit(this);\n    };\n    /**\n     * \\@name scrollListener\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.scrollListener = /**\n     * \\@name scrollListener\n     * @return {?}\n     */\n    function () {\n        if (this.button && this.dynamicUpdate) {\n            this.menu.updatePosition(this.button.getPosition(), true);\n        }\n    };\n    Ng2Dropdown.decorators = [\n        { type: core_es5[\"Component\"], args: [{\n                    selector: 'ng2-dropdown',\n                    template: \"<div class=\\\"ng2-dropdown-container\\\">\\n    <ng-content select=\\\"ng2-dropdown-button\\\"></ng-content>\\n    <ng-content select=\\\"ng2-dropdown-menu\\\"></ng-content>\\n</div>\\n\",\n                    providers: [ng2_material_dropdown_DropdownStateService]\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2Dropdown.ctorParameters = function () { return [\n        { type: ng2_material_dropdown_DropdownStateService, },\n    ]; };\n    Ng2Dropdown.propDecorators = {\n        \"button\": [{ type: core_es5[\"ContentChild\"], args: [ng2_material_dropdown_Ng2DropdownButton,] },],\n        \"menu\": [{ type: core_es5[\"ContentChild\"], args: [ng2_material_dropdown_Ng2DropdownMenu,] },],\n        \"dynamicUpdate\": [{ type: core_es5[\"Input\"] },],\n        \"onItemClicked\": [{ type: core_es5[\"Output\"] },],\n        \"onItemSelected\": [{ type: core_es5[\"Output\"] },],\n        \"onShow\": [{ type: core_es5[\"Output\"] },],\n        \"onHide\": [{ type: core_es5[\"Output\"] },],\n        \"scrollListener\": [{ type: core_es5[\"HostListener\"], args: ['window:scroll',] },],\n    };\n    return Ng2Dropdown;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ng2_material_dropdown_Ng2DropdownModule = /** @class */ (function () {\n    function Ng2DropdownModule() {\n    }\n    Ng2DropdownModule.decorators = [\n        { type: core_es5[\"NgModule\"], args: [{\n                    exports: [\n                        ng2_material_dropdown_Ng2MenuItem,\n                        ng2_material_dropdown_Ng2DropdownButton,\n                        ng2_material_dropdown_Ng2DropdownMenu,\n                        ng2_material_dropdown_Ng2Dropdown\n                    ],\n                    declarations: [\n                        ng2_material_dropdown_Ng2Dropdown,\n                        ng2_material_dropdown_Ng2MenuItem,\n                        ng2_material_dropdown_Ng2DropdownButton,\n                        ng2_material_dropdown_Ng2DropdownMenu,\n                    ],\n                    imports: [\n                        common_es5[\"CommonModule\"]\n                    ]\n                },] },\n    ];\n    return Ng2DropdownModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\n\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyLW1hdGVyaWFsLWRyb3Bkb3duLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9uZzItbWF0ZXJpYWwtZHJvcGRvd24vc3JjL21vZHVsZXMvY29tcG9uZW50cy9idXR0b24vbmcyLWRyb3Bkb3duLWJ1dHRvbi50cyIsIm5nOi8vbmcyLW1hdGVyaWFsLWRyb3Bkb3duL3NyYy9tb2R1bGVzL2NvbXBvbmVudHMvbWVudS9hY3Rpb25zLnRzIiwibmc6Ly9uZzItbWF0ZXJpYWwtZHJvcGRvd24vc3JjL21vZHVsZXMvc2VydmljZXMvbmcyLWRyb3Bkb3duLXN0YXRlLnRzIiwibmc6Ly9uZzItbWF0ZXJpYWwtZHJvcGRvd24vc3JjL21vZHVsZXMvc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZS50cyIsIm5nOi8vbmcyLW1hdGVyaWFsLWRyb3Bkb3duL3NyYy9tb2R1bGVzL2NvbXBvbmVudHMvbWVudS1pdGVtL25nMi1tZW51LWl0ZW0udHMiLCJuZzovL25nMi1tYXRlcmlhbC1kcm9wZG93bi9zcmMvbW9kdWxlcy9jb21wb25lbnRzL21lbnUvbmcyLWRyb3Bkb3duLW1lbnUudHMiLCJuZzovL25nMi1tYXRlcmlhbC1kcm9wZG93bi9zcmMvbW9kdWxlcy9jb21wb25lbnRzL2Ryb3Bkb3duL25nMi1kcm9wZG93bi50cyIsIm5nOi8vbmcyLW1hdGVyaWFsLWRyb3Bkb3duL3NyYy9tb2R1bGVzL25nMi1kcm9wZG93bi5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT3V0cHV0LFxuICAgIElucHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nMi1kcm9wZG93bi1idXR0b24nLFxuICAgIHN0eWxlczogW2AubmcyLWRyb3Bkb3duLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLEhlbHZldGljYSxBcmlhbDtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzouNDVyZW0gLjI1cmVtO2ZvbnQtc2l6ZToxNHB4O2xldHRlci1zcGFjaW5nOi4wOHJlbTtjb2xvcjojNDQ0O291dGxpbmU6MDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo0MDA7Ym9yZGVyOm5vbmU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VmZWZlZjt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOjEwMHB4O3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTUwcHh9Lm5nMi1kcm9wZG93bi1idXR0b246aG92ZXJ7Y29sb3I6IzIyMn0ubmcyLWRyb3Bkb3duLWJ1dHRvbjphY3RpdmUsLm5nMi1kcm9wZG93bi1idXR0b246Zm9jdXN7Y29sb3I6IzIyMjtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMjE5NmYzfS5uZzItZHJvcGRvd24tYnV0dG9uX19sYWJlbHtmbGV4OjEgMSA5NSV9Lm5nMi1kcm9wZG93bi1idXR0b25fX2NhcmV0e3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIDYlfTpob3N0LWNvbnRleHQoLm5nMi1kcm9wZG93bi1idXR0b24tLWljb24pIC5uZzItZHJvcGRvd24tYnV0dG9ue2JvcmRlcjpub25lO21pbi13aWR0aDo0MHB4O3dpZHRoOjQwcHg7Ym9yZGVyLXJhZGl1czoxMDAlO3RyYW5zaXRpb246YWxsIC4yczt0ZXh0LWFsaWduOmNlbnRlcjtoZWlnaHQ6NDBweDtwYWRkaW5nOi41ZW19Omhvc3QtY29udGV4dCgubmcyLWRyb3Bkb3duLWJ1dHRvbi0taWNvbikgLm5nMi1kcm9wZG93bi1idXR0b246YWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMil9YF0sXG4gICAgdGVtcGxhdGU6IGA8YnV0dG9uIGNsYXNzPSduZzItZHJvcGRvd24tYnV0dG9uJyB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiIHRhYmluZGV4PVwiMHNcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm5nMi1kcm9wZG93bi1idXR0b25fX2xhYmVsXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhbiBjbGFzcz1cIm5nMi1kcm9wZG93bi1idXR0b25fX2NhcmV0XCIgKm5nSWY9XCJzaG93Q2FyZXRcIj5cbiAgICAgICAgPHN2ZyBlbmFibGUtYmFja2dyb3VuZD1cIm5ldyAwIDAgMzIgMzJcIiBoZWlnaHQ9XCIxNnB4XCIgaWQ9XCLDkMKhw5DCu8OQwr7DkMK5XzFcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIHdpZHRoPVwiMTZweFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPjxwYXRoIGQ9XCJNMjQuMjg1LDExLjI4NEwxNiwxOS41NzFsLTguMjg1LTguMjg4Yy0wLjM5NS0wLjM5NS0xLjAzNC0wLjM5NS0xLjQyOSwwICBjLTAuMzk0LDAuMzk1LTAuMzk0LDEuMDM1LDAsMS40M2w4Ljk5OSw5LjAwMmwwLDBsMCwwYzAuMzk0LDAuMzk1LDEuMDM0LDAuMzk1LDEuNDI4LDBsOC45OTktOS4wMDIgIGMwLjM5NC0wLjM5NSwwLjM5NC0xLjAzNiwwLTEuNDMxQzI1LjMxOSwxMC44ODksMjQuNjc5LDEwLjg4OSwyNC4yODUsMTEuMjg0elwiIGZpbGw9XCIjMTIxMzEzXCIgaWQ9XCJFeHBhbmRfTW9yZVwiLz48Zy8+PGcvPjxnLz48Zy8+PGcvPjxnLz48L3N2Zz5cbiAgICA8L3NwYW4+XG48L2J1dHRvbj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgTmcyRHJvcGRvd25CdXR0b24ge1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25NZW51VG9nZ2xlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Q2FyZXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmKSB7fVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgdG9nZ2xlTWVudVxuICAgICAqIEBkZXNjIGVtaXRzIGV2ZW50IHRvIHRvZ2dsZSBtZW51XG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZU1lbnUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25NZW51VG9nZ2xlZC5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIGdldFBvc2l0aW9uXG4gICAgICogQGRlc2MgcmV0dXJucyBwb3NpdGlvbiBvZiB0aGUgYnV0dG9uXG4gICAgICovXG4gICAgcHVibGljIGdldFBvc2l0aW9uKCk6IENsaWVudFJlY3Qge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IE5nMk1lbnVJdGVtIH0gZnJvbSAnLi4vbWVudS1pdGVtL25nMi1tZW51LWl0ZW0nO1xuaW1wb3J0IHsgTmcyRHJvcGRvd25NZW51IH0gZnJvbSAnLi9uZzItZHJvcGRvd24tbWVudSc7XG5pbXBvcnQgeyBOZzJEcm9wZG93blN0YXRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmcyLWRyb3Bkb3duLXN0YXRlJztcblxuY29uc3QgS0VZUyA9IHtcbiAgICBCQUNLU1BBQ0U6IDksXG4gICAgUFJFVjogMzgsXG4gICAgTkVYVDogNDAsXG4gICAgRU5URVI6IDEzLFxuICAgIEVTQ0FQRTogMjdcbn07XG5cbi8qKlxuICogQG5hbWUgb25Td2l0Y2hOZXh0XG4gKiBAcGFyYW0gaW5kZXhcbiAqIEBwYXJhbSBpdGVtc1xuICogQHBhcmFtIHN0YXRlXG4gKi9cbmNvbnN0IG9uU3dpdGNoTmV4dCA9IChpbmRleDogbnVtYmVyLCBpdGVtczogTmcyTWVudUl0ZW1bXSwgc3RhdGU6IE5nMkRyb3Bkb3duU3RhdGUpID0+IHtcbiAgICBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdChpdGVtc1tpbmRleCArIDFdLCB0cnVlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEBuYW1lIG9uU3dpdGNoUHJldlxuICogQHBhcmFtIGluZGV4XG4gKiBAcGFyYW0gaXRlbXNcbiAqIEBwYXJhbSBzdGF0ZVxuICovXG5jb25zdCBvblN3aXRjaFByZXYgPSAoaW5kZXg6IG51bWJlciwgaXRlbXM6IE5nMk1lbnVJdGVtW10sIHN0YXRlOiBOZzJEcm9wZG93blN0YXRlKSA9PiB7XG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBzdGF0ZS5zZWxlY3QoaXRlbXNbaW5kZXggLSAxXSwgdHJ1ZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBAbmFtZSBvbkJhY2tzcGFjZVxuICogQHBhcmFtIGluZGV4XG4gKiBAcGFyYW0gaXRlbXNcbiAqIEBwYXJhbSBzdGF0ZVxuICovXG5jb25zdCBvbkJhY2tzcGFjZSA9IChpbmRleDogbnVtYmVyLCBpdGVtczogTmcyTWVudUl0ZW1bXSwgc3RhdGU6IE5nMkRyb3Bkb3duU3RhdGUpID0+IHtcbiAgICBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdChpdGVtc1tpbmRleCArIDFdLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5zZWxlY3QoaXRlbXNbMF0sIHRydWUpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIG9uRXNjYXBlKHRoaXM6IE5nMkRyb3Bkb3duTWVudSkge1xuICAgIHRoaXMuaGlkZSgpO1xufTtcblxuLyoqXG4gKiBAbmFtZSBvbkl0ZW1DbGlja2VkXG4gKiBAcGFyYW0gaW5kZXhcbiAqIEBwYXJhbSBpdGVtc1xuICogQHBhcmFtIHN0YXRlXG4gKi9cbmNvbnN0IG9uSXRlbUNsaWNrZWQgPSAoaW5kZXg6IG51bWJlciwgaXRlbXM6IE5nMk1lbnVJdGVtW10sIHN0YXRlOiBOZzJEcm9wZG93blN0YXRlKSA9PiB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkSXRlbSA/IHN0YXRlLnNlbGVjdGVkSXRlbS5jbGljaygpIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTlMgPSB7XG4gICAgW0tFWVMuQkFDS1NQQUNFXTogb25CYWNrc3BhY2UsXG4gICAgW0tFWVMuUFJFVl06IG9uU3dpdGNoUHJldixcbiAgICBbS0VZUy5ORVhUXTogb25Td2l0Y2hOZXh0LFxuICAgIFtLRVlTLkVOVEVSXTogb25JdGVtQ2xpY2tlZCxcbiAgICBbS0VZUy5FU0NBUEVdOiBvbkVzY2FwZVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFycm93S2V5c0hhbmRsZXIoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoWzM4LCA0MF0uaW5kZXhPZihldmVudC5rZXlDb2RlKSA+IC0xKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZzJNZW51SXRlbSB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1pdGVtL25nMi1tZW51LWl0ZW0nO1xuZXhwb3J0IGNsYXNzIE5nMkRyb3Bkb3duU3RhdGUge1xuICAgIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZDogRXZlbnRFbWl0dGVyPE5nMk1lbnVJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8TmcyTWVudUl0ZW0+KCk7XG4gICAgcHVibGljIG9uSXRlbUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxOZzJNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE5nMk1lbnVJdGVtPigpO1xuICAgIHB1YmxpYyBvbkl0ZW1EZXN0cm95ZWQ6IEV2ZW50RW1pdHRlcjxOZzJNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE5nMk1lbnVJdGVtPigpO1xuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtOiBOZzJNZW51SXRlbTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHNlbGVjdGVkSXRlbVxuICAgICAqIEBkZXNjIGdldHRlciBmb3IgX3NlbGVjdGVkSXRlbVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtKCk6IE5nMk1lbnVJdGVtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBzZWxlY3RzIGEgbWVudSBpdGVtIGFuZCBlbWl0cyBldmVudFxuICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdChpdGVtOiBOZzJNZW51SXRlbSB8IHVuZGVmaW5lZCwgZGlzcGF0Y2hFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtID0gaXRlbTtcblxuICAgICAgICBpZiAoIWRpc3BhdGNoRXZlbnQgfHwgIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW0uZm9jdXMoKTtcblxuICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdGVkLmVtaXQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgdW5zZWxlY3RcbiAgICAgKiBAZGVzYyBzZXRzIF9zZWxlY3RlZEl0ZW0gYXMgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcHVibGljIHVuc2VsZWN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmcyRHJvcGRvd25TdGF0ZSB9IGZyb20gJy4vbmcyLWRyb3Bkb3duLXN0YXRlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duU3RhdGVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgbWVudVN0YXRlID0ge1xuICAgICAgICBpc1Zpc2libGU6IDxib29sZWFuPmZhbHNlLFxuICAgICAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlID09PSB0cnVlID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIGRyb3Bkb3duU3RhdGU6IE5nMkRyb3Bkb3duU3RhdGUgPSBuZXcgTmcyRHJvcGRvd25TdGF0ZSgpO1xufVxuIiwiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgUmVuZGVyZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERyb3Bkb3duU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmcyLW1lbnUtaXRlbScsXG4gICAgc3R5bGVzOiBbYC5uZzItbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsSGVsdmV0aWNhLEFyaWFsO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOi45ZW07dGV4dC10cmFuc2Zvcm06bm9uZTtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtwYWRkaW5nOi4zZW0gMS4yNXJlbTt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4yNXN9Lm5nMi1tZW51LWl0ZW0tLXNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgxNTgsMTU4LDE1OCwuMik7b3V0bGluZTowfS5uZzItbWVudS1pdGVtOmZvY3Vze291dGxpbmU6MH0ubmcyLW1lbnUtaXRlbTphY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDE1OCwxNTgsMTU4LC40KX06aG9zdChuZzItbWVudS1pdGVtKSAvZGVlcC8gW25nMi1tZW51LWl0ZW0taWNvbl17dmVydGljYWwtYWxpZ246bWlkZGxlO2ZvbnQtc2l6ZToyOHB4O3dpZHRoOjEuNWVtO2hlaWdodDozMHB4O2NvbG9yOnJnYmEoMCwwLDAsLjQ0KX1gXSxcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9J25nMi1tZW51LWl0ZW0nXG4gICAgIHJvbGU9XCJidXR0b25cIlxuICAgICB0YWJpbmRleD1cIjBcIlxuICAgICBbY2xhc3MubmcyLW1lbnUtaXRlbS0tc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZFwiXG4gICAgIChrZXlkb3duLmVudGVyKT1cImNsaWNrKClcIlxuICAgICAoY2xpY2spPVwiY2xpY2soKVwiXG4gICAgIChtb3VzZW92ZXIpPVwic2VsZWN0KClcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIE5nMk1lbnVJdGVtIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAcHJldmVudENsb3NlXG4gICAgICogQGRlc2MgaWYgdHJ1ZSwgY2xpY2tpbmcgb24gdGhlIGl0ZW0gd29uJ3QgY2xvc2UgdGhlIGRyb3Bkb3duXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHByZXZlbnRDbG9zZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgdmFsdWVcbiAgICAgKiBAZGVzYyBhbnkgdmFsdWUgYXNzb2NpYXRlZCB0byB0aGUgaXRlbVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0ZTogRHJvcGRvd25TdGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyKSB7fVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUub25JdGVtRGVzdHJveWVkLmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgaXNTZWxlY3RlZFxuICAgICAqIEBkZXNjIHJldHVybnMgY3VycmVudCBzZWxlY3RlZCBpdGVtXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcyA9PT0gdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdGVkSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBjbGlja1xuICAgICAqIEBkZXNjIGVtaXRzIHNlbGVjdCBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QoJGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUuc2VsZWN0KHRoaXMsIHRydWUpO1xuXG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgY2xpY2tcbiAgICAgKiBAZGVzYyBlbWl0cyBjbGljayBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBjbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLm9uSXRlbUNsaWNrZWQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBmb2N1c1xuICAgICAqL1xuICAgIHB1YmxpYyBmb2N1cygpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLCAnZm9jdXMnKTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIFJlbmRlcmVyLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgdHJpZ2dlcixcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uLFxuICAgIGFuaW1hdGUsXG4gICAga2V5ZnJhbWVzLFxuICAgIHN0YXRlXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5pbXBvcnQgeyBBQ1RJT05TLCBhcnJvd0tleXNIYW5kbGVyIH0gZnJvbSAnLi9hY3Rpb25zJztcblxuaW1wb3J0IHsgTmcyTWVudUl0ZW0gfSBmcm9tICcuLi9tZW51LWl0ZW0vbmcyLW1lbnUtaXRlbSc7XG5pbXBvcnQgeyBEcm9wZG93blN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Ryb3Bkb3duLXN0YXRlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nMi1kcm9wZG93bi1tZW51JyxcbiAgICBzdHlsZXM6IFtgOmhvc3R7ZGlzcGxheTpibG9ja30ubmcyLWRyb3Bkb3duLW1lbnV7b3ZlcmZsb3cteTphdXRvO2JveC1zaGFkb3c6MCAxcHggMnB4IDAgcmdiYSgwLDAsMCwuMyk7cG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzouNWVtIDA7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MXB4O21heC1oZWlnaHQ6NDAwcHg7d2lkdGg6MjYwcHg7bWluLWhlaWdodDowO2Rpc3BsYXk6YmxvY2t9Lm5nMi1kcm9wZG93bi1tZW51Lm5nMi1kcm9wZG93bi1tZW51LS1pbnNpZGUtZWxlbWVudHtwb3NpdGlvbjpmaXhlZH0ubmcyLWRyb3Bkb3duLW1lbnUubmcyLWRyb3Bkb3duLW1lbnUtLXdpZHRoLS0ye3dpZHRoOjIwMHB4fS5uZzItZHJvcGRvd24tbWVudS5uZzItZHJvcGRvd24tbWVudS0td2lkdGgtLTR7d2lkdGg6MjYwcHh9Lm5nMi1kcm9wZG93bi1tZW51Lm5nMi1kcm9wZG93bi1tZW51LS13aWR0aC0tNnt3aWR0aDozMjBweH0ubmcyLWRyb3Bkb3duLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgL2RlZXAvIC5uZzItbWVudS1kaXZpZGVye2hlaWdodDoxcHg7bWluLWhlaWdodDoxcHg7bWF4LWhlaWdodDoxcHg7d2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6I2Y5ZjlmOX1gXSxcbiAgICB0ZW1wbGF0ZTogYDwhLS0gTUVOVSAtLT5cbjxkaXYgY2xhc3M9J25nMi1kcm9wZG93bi1tZW51IG5nMi1kcm9wZG93bi1tZW51LS0td2lkdGgtLXt7IHdpZHRoIH19J1xuICAgICBbY2xhc3MubmcyLWRyb3Bkb3duLW1lbnUtLWluc2lkZS1lbGVtZW50XT1cIiFhcHBlbmRUb0JvZHlcIlxuICAgICBbY2xhc3MubmcyLWRyb3Bkb3duLW1lbnUtLW9wZW5dPVwic3RhdGUubWVudVN0YXRlLmlzVmlzaWJsZVwiXG4gICAgIFtzdHlsZS56LWluZGV4XT1cInpJbmRleFwiXG4gICAgIFtAZmFkZV09XCJzdGF0ZS5tZW51U3RhdGUudG9TdHJpbmcoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmcyLWRyb3Bkb3duLW1lbnVfX29wdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgICAgICBbQG9wYWNpdHldPVwic3RhdGUubWVudVN0YXRlLnRvU3RyaW5nKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBCQUNLRFJPUCAtLT5cbjxkaXYgY2xhc3M9XCJuZzItZHJvcGRvd24tYmFja2Ryb3BcIiAqbmdJZj1cInN0YXRlLm1lbnVTdGF0ZS5pc1Zpc2libGVcIiAoY2xpY2spPVwiaGlkZSgpXCI+PC9kaXY+XG5gLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignZmFkZScsIFtcbiAgICAgICAgICAgIHN0YXRlKCd2aXNpYmxlJywgc3R5bGUoXG4gICAgICAgICAgICAgICAge2Rpc3BsYXk6ICdibG9jaycsIG9wYWNpdHk6IDEsIGhlaWdodDogJyonLCB3aWR0aDogJyonfVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBzdGF0ZSgnaGlkZGVuJywgc3R5bGUoXG4gICAgICAgICAgICAgICAge2Rpc3BsYXk6ICdub25lJywgb3BhY2l0eTogMCwgb3ZlcmZsb3c6ICdoaWRkZW4nLCBoZWlnaHQ6IDAsIHdpZHRoOiAwfVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdoaWRkZW4gPT4gdmlzaWJsZScsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDEsIGhlaWdodDogJyonLCB3aWR0aDogJyonfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gaGlkZGVuJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzM1MG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdvcGFjaXR5JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignaGlkZGVuID0+IHZpc2libGUnLCBbXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnNDUwbXMgZWFzZS1pbicsIGtleWZyYW1lcyhbXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlKHtvcGFjaXR5OiAwLCBvZmZzZXQ6IDB9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDEsIG9mZnNldDogMX0pLFxuICAgICAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlID0+IGhpZGRlbicsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLW91dCcsIGtleWZyYW1lcyhbXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlKHtvcGFjaXR5OiAxLCBvZmZzZXQ6IDB9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDAuNSwgb2Zmc2V0OiAwLjN9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDAsIG9mZnNldDogMX0pLFxuICAgICAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5nMkRyb3Bkb3duTWVudSB7XG4gICAgLyoqXG4gICAgICogQG5hbWUgd2lkdGhcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgd2lkdGg6IG51bWJlciA9IDQ7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gaWYgc2V0IHRvIHRydWUsIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBkcm9wZG93biB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZFxuICAgICAqIEBuYW1lIGZvY3VzRmlyc3RFbGVtZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGZvY3VzRmlyc3RFbGVtZW50OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBzZXRzIGRyb3Bkb3duIG9mZnNldCBmcm9tIHRoZSBidXR0b25cbiAgICAgKiBAbmFtZSBvZmZzZXQge3N0cmluZ30gZm9sbG93IGZvcm1hdCAnPG51bWJlcj4gPG51bWJlcj4nIGV4LiAnMCAyMCdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgb2Zmc2V0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBhcHBlbmRUb0JvZHlcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXBwZW5kVG9Cb2R5OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHpJbmRleFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB6SW5kZXggPSAxMDAwO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgaXRlbXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKE5nMk1lbnVJdGVtKSBwdWJsaWMgaXRlbXM6IFF1ZXJ5TGlzdDxOZzJNZW51SXRlbT47XG5cbiAgICBwcml2YXRlIHBvc2l0aW9uOiBDbGllbnRSZWN0O1xuXG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnMgPSB7XG4gICAgICAgIGFycm93SGFuZGxlcjogdW5kZWZpbmVkLFxuICAgICAgICBoYW5kbGVLZXlwcmVzczogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGF0ZTogRHJvcGRvd25TdGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyKSB7fVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgc2hvd1xuICAgICAqIEBzaG93cyBtZW51IGFuZCBzZWxlY3RzIGZpcnN0IGl0ZW1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyhwb3NpdGlvbj86IENsaWVudFJlY3QsIGR5bmFtaWMgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRjID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB3ZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5tZW51U3RhdGUuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAvLyBzZXR0aW5nIGhhbmRsZXJzXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5oYW5kbGVLZXlwcmVzcyA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGRjLmJvZHksICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlwcmVzcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLmFycm93SGFuZGxlciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHdkLCAna2V5ZG93bicsIGFycm93S2V5c0hhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIHN0YXRlXG4gICAgICAgIHRoaXMuc3RhdGUubWVudVN0YXRlLmlzVmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uLCBkeW5hbWljKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIGhpZGVcbiAgICAgKiBAZGVzYyBoaWRlcyBtZW51XG4gICAgICovXG4gICAgcHVibGljIGhpZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhdGUubWVudVN0YXRlLmlzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHJlc2V0IHNlbGVjdGVkIGl0ZW0gc3RhdGVcbiAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnVuc2VsZWN0KCk7XG5cbiAgICAgICAgLy8gY2FsbCBmdW5jdGlvbiB0byB1bmxpc3RlblxuICAgICAgICB0aGlzLmxpc3RlbmVycy5hcnJvd0hhbmRsZXIgPyB0aGlzLmxpc3RlbmVycy5hcnJvd0hhbmRsZXIoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMuaGFuZGxlS2V5cHJlc3MgPyB0aGlzLmxpc3RlbmVycy5oYW5kbGVLZXlwcmVzcygpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHVwZGF0ZVBvc2l0aW9uXG4gICAgICogQGRlc2MgdXBkYXRlcyB0aGUgbWVudSBwb3NpdGlvbiBldmVyeSB0aW1lIGl0IGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0gcG9zaXRpb24ge0NsaWVudFJlY3R9XG4gICAgICogQHBhcmFtIGR5bmFtaWMge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uOiBDbGllbnRSZWN0LCBkeW5hbWljOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgdGhpcy51cGRhdGVPbkNoYW5nZShkeW5hbWljKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBoYW5kbGVLZXlwcmVzc1xuICAgICAqIEBkZXNjIGV4ZWN1dGVzIGZ1bmN0aW9ucyBvbiBrZXlQcmVzcyBiYXNlZCBvbiB0aGUga2V5IHByZXNzZWRcbiAgICAgKiBAcGFyYW0gJGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUtleXByZXNzKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSAkZXZlbnQua2V5Q29kZTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtcy5pbmRleE9mKHRoaXMuc3RhdGUuZHJvcGRvd25TdGF0ZS5zZWxlY3RlZEl0ZW0pO1xuXG4gICAgICAgIGlmICghQUNUSU9OUy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBBQ1RJT05TW2tleV0uY2FsbCh0aGlzLCBpbmRleCwgaXRlbXMsIHRoaXMuc3RhdGUuZHJvcGRvd25TdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgZ2V0TWVudUVsZW1lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1lbnVFbGVtZW50KCk6IEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgY2FsY1Bvc2l0aW9uT2Zmc2V0XG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYWxjUG9zaXRpb25PZmZzZXQocG9zaXRpb24pOiB7IHRvcDogc3RyaW5nLCBsZWZ0OiBzdHJpbmcgfSB7XG4gICAgICAgIGNvbnN0IHdkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGRjID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghd2QgfHwgIWRjIHx8ICFwb3NpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0TWVudUVsZW1lbnQoKTtcbiAgICAgICAgY29uc3Qgc3VwcG9ydFBhZ2VPZmZzZXQgPSB3ZC5wYWdlWE9mZnNldCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBpc0NTUzFDb21wYXQgPSAoKGRjLmNvbXBhdE1vZGUgfHwgJycpID09PSAnQ1NTMUNvbXBhdCcpO1xuXG4gICAgICAgIGNvbnN0IHggPSBzdXBwb3J0UGFnZU9mZnNldCA/IHdkLnBhZ2VYT2Zmc2V0IDogaXNDU1MxQ29tcGF0ID9cbiAgICAgICAgICAgIGRjLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogZGMuYm9keS5zY3JvbGxMZWZ0O1xuXG4gICAgICAgIGNvbnN0IHkgPSBzdXBwb3J0UGFnZU9mZnNldCA/IHdkLnBhZ2VZT2Zmc2V0IDogaXNDU1MxQ29tcGF0ID9cbiAgICAgICAgICAgIGRjLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBkYy5ib2R5LnNjcm9sbFRvcDtcblxuICAgICAgICBsZXQgeyB0b3AsIGxlZnQgfSA9IHRoaXMuYXBwbHlPZmZzZXQoXG4gICAgICAgICAgICBgJHtwb3NpdGlvbi50b3AgKyAodGhpcy5hcHBlbmRUb0JvZHkgPyB5IC0gMTUgOiAwKX1weGAsXG4gICAgICAgICAgICBgJHtwb3NpdGlvbi5sZWZ0ICsgeCAtIDV9cHhgXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgY2xpZW50V2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBjbGllbnRIZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgICBjb25zdCBtYXJnaW5Gcm9tQm90dG9tID0gcGFyc2VJbnQodG9wKSArIGNsaWVudEhlaWdodCArICh0aGlzLmFwcGVuZFRvQm9keSA/IDAgOiB5IC0gMTUpO1xuICAgICAgICBjb25zdCBtYXJnaW5Gcm9tUmlnaHQgPSBwYXJzZUludChsZWZ0KSArIGNsaWVudFdpZHRoO1xuXG4gICAgICAgIGNvbnN0IHdpbmRvd1Njcm9sbEhlaWdodCA9IHdkLmlubmVySGVpZ2h0ICsgd2Quc2Nyb2xsWTtcbiAgICAgICAgY29uc3Qgd2luZG93U2Nyb2xsV2lkdGggPSB3ZC5pbm5lcldpZHRoICsgd2Quc2Nyb2xsWDtcblxuICAgICAgICBpZiAobWFyZ2luRnJvbUJvdHRvbSA+PSB3aW5kb3dTY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgICAgIHRvcCA9IGAke3BhcnNlSW50KHRvcC5yZXBsYWNlKCdweCcsICcnKSkgLSBjbGllbnRIZWlnaHR9cHhgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hcmdpbkZyb21SaWdodCA+PSB3aW5kb3dTY3JvbGxXaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luUmlnaHQgPSBtYXJnaW5Gcm9tUmlnaHQgLSB3aW5kb3dTY3JvbGxXaWR0aCArIDMwO1xuICAgICAgICAgICAgbGVmdCA9IGAke3BhcnNlSW50KGxlZnQucmVwbGFjZSgncHgnLCAnJykpIC0gbWFyZ2luUmlnaHR9cHhgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgdG9wLCBsZWZ0IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseU9mZnNldCh0b3A6IHN0cmluZywgbGVmdDogc3RyaW5nKTogeyB0b3A6IHN0cmluZywgbGVmdDogc3RyaW5nIH0ge1xuICAgICAgICBpZiAoIXRoaXMub2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4geyB0b3AsIGxlZnQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMub2Zmc2V0LnNwbGl0KCcgJyk7XG5cbiAgICAgICAgaWYgKCFvZmZzZXRbMV0pIHtcbiAgICAgICAgICAgIG9mZnNldFsxXSA9ICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRvcCA9IGAke3BhcnNlSW50KHRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUludChvZmZzZXRbMF0pfXB4YDtcbiAgICAgICAgbGVmdCA9IGAke3BhcnNlSW50KGxlZnQucmVwbGFjZSgncHgnLCAnJykpICsgcGFyc2VJbnQob2Zmc2V0WzFdKX1weGA7XG5cbiAgICAgICAgcmV0dXJuIHsgdG9wLCBsZWZ0IH07XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBkYyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5KSB7XG4gICAgICAgICAgICAvLyBhcHBlbmQgbWVudSBlbGVtZW50IHRvIHRoZSBib2R5XG4gICAgICAgICAgICBkYy5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVPbkNoYW5nZShkeW5hbWljID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRNZW51RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuY2FsY1Bvc2l0aW9uT2Zmc2V0KHRoaXMucG9zaXRpb24pO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50U3R5bGUoZWxlbWVudCwgJ3RvcCcsIHBvc2l0aW9uLnRvcC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudFN0eWxlKGVsZW1lbnQsICdsZWZ0JywgcG9zaXRpb24ubGVmdC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNlbGVjdCBmaXJzdCBpdGVtIHVubGVzcyB1c2VyIGRpc2FibGVkIHRoaXMgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLmZvY3VzRmlyc3RFbGVtZW50ICYmXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZpcnN0ICYmXG4gICAgICAgICAgICAhdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdCh0aGlzLml0ZW1zLmZpcnN0LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW0pO1xuXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVycy5oYW5kbGVLZXlwcmVzcykge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuaGFuZGxlS2V5cHJlc3MoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgSG9zdExpc3RlbmVyLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmcyRHJvcGRvd25CdXR0b24gfSBmcm9tICcuLi9idXR0b24vbmcyLWRyb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBOZzJEcm9wZG93bk1lbnUgfSBmcm9tICcuLi9tZW51L25nMi1kcm9wZG93bi1tZW51JztcbmltcG9ydCB7IERyb3Bkb3duU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZzJNZW51SXRlbSB9IGZyb20gJy4uL21lbnUtaXRlbS9uZzItbWVudS1pdGVtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZzItZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cIm5nMi1kcm9wZG93bi1jb250YWluZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJuZzItZHJvcGRvd24tYnV0dG9uXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm5nMi1kcm9wZG93bi1tZW51XCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5gLFxuICAgIHByb3ZpZGVyczogWyBEcm9wZG93blN0YXRlU2VydmljZSBdXG59KVxuZXhwb3J0IGNsYXNzIE5nMkRyb3Bkb3duIHtcbiAgICAvLyBnZXQgY2hpbGRyZW4gY29tcG9uZW50c1xuICAgIEBDb250ZW50Q2hpbGQoTmcyRHJvcGRvd25CdXR0b24pIHB1YmxpYyBidXR0b246IE5nMkRyb3Bkb3duQnV0dG9uO1xuICAgIEBDb250ZW50Q2hpbGQoTmcyRHJvcGRvd25NZW51KSBwdWJsaWMgbWVudTogTmcyRHJvcGRvd25NZW51O1xuXG4gICAgQElucHV0KCkgcHVibGljIGR5bmFtaWNVcGRhdGUgPSB0cnVlO1xuXG4gICAgLy8gb3V0cHV0c1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25JdGVtQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uSXRlbVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25TaG93OiBFdmVudEVtaXR0ZXI8TmcyRHJvcGRvd24+ID0gbmV3IEV2ZW50RW1pdHRlcjxOZzJEcm9wZG93bj4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uSGlkZTogRXZlbnRFbWl0dGVyPE5nMkRyb3Bkb3duPiA9IG5ldyBFdmVudEVtaXR0ZXI8TmcyRHJvcGRvd24+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXRlOiBEcm9wZG93blN0YXRlU2VydmljZSkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLm9uSXRlbUNsaWNrZWQuc3Vic2NyaWJlKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGlja2VkLmVtaXQoaXRlbSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLnByZXZlbnRDbG9zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oaWRlLmNhbGwodGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5idXR0b24ub25NZW51VG9nZ2xlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTWVudSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUub25JdGVtU2VsZWN0ZWQuc3Vic2NyaWJlKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkl0ZW1TZWxlY3RlZC5lbWl0KGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUub25JdGVtRGVzdHJveWVkLnN1YnNjcmliZSgoaXRlbTogTmcyTWVudUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdTZWxlY3RlZEl0ZW06IE5nMk1lbnVJdGVtIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLm1lbnUuaXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubWVudS5mb2N1c0ZpcnN0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkSXRlbSA9IGl0ZW0gPT09IGl0ZW1zWzBdICYmIGl0ZW1zLmxlbmd0aCA+IDEgPyBpdGVtc1sxXSA6IGl0ZW1zWzBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUuc2VsZWN0KG5ld1NlbGVjdGVkSXRlbSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHRvZ2dsZU1lbnVcbiAgICAgKiBAZGVzYyB0b2dnbGVzIG1lbnUgdmlzaWJpbGl0eVxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVNZW51KHBvc2l0aW9uID0gdGhpcy5idXR0b24uZ2V0UG9zaXRpb24oKSk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLm1lbnVTdGF0ZS5pc1Zpc2libGUgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogLSBoaWRlcyBkcm9wZG93blxuICAgICAqIEBuYW1lIGhpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZW51LmhpZGUoKTtcbiAgICAgICAgdGhpcy5vbkhpZGUuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAtIHNob3dzIGRyb3Bkb3duXG4gICAgICogQG5hbWUgc2hvd1xuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93KHBvc2l0aW9uID0gdGhpcy5idXR0b24uZ2V0UG9zaXRpb24oKSk6IHZvaWQge1xuICAgICAgICB0aGlzLm1lbnUuc2hvdyhwb3NpdGlvbiwgdGhpcy5keW5hbWljVXBkYXRlKTtcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBzY3JvbGxMaXN0ZW5lclxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICAgIHB1YmxpYyBzY3JvbGxMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uICYmIHRoaXMuZHluYW1pY1VwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5tZW51LnVwZGF0ZVBvc2l0aW9uKHRoaXMuYnV0dG9uLmdldFBvc2l0aW9uKCksIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgTmcyRHJvcGRvd24gfSBmcm9tICcuL2NvbXBvbmVudHMvZHJvcGRvd24vbmcyLWRyb3Bkb3duJztcbmltcG9ydCB7IE5nMkRyb3Bkb3duTWVudSB9IGZyb20gJy4vY29tcG9uZW50cy9tZW51L25nMi1kcm9wZG93bi1tZW51JztcbmltcG9ydCB7IE5nMkRyb3Bkb3duQnV0dG9uIH0gZnJvbSAnLi9jb21wb25lbnRzL2J1dHRvbi9uZzItZHJvcGRvd24tYnV0dG9uJztcbmltcG9ydCB7IE5nMk1lbnVJdGVtIH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnUtaXRlbS9uZzItbWVudS1pdGVtJztcblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEcm9wZG93blN0YXRlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZXhwb3J0czogW1xuICAgICAgICBOZzJNZW51SXRlbSxcbiAgICAgICAgTmcyRHJvcGRvd25CdXR0b24sXG4gICAgICAgIE5nMkRyb3Bkb3duTWVudSxcbiAgICAgICAgTmcyRHJvcGRvd25cbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBOZzJEcm9wZG93bixcbiAgICAgICAgTmcyTWVudUl0ZW0sXG4gICAgICAgIE5nMkRyb3Bkb3duQnV0dG9uLFxuICAgICAgICBOZzJEcm9wZG93bk1lbnUsXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmcyRHJvcGRvd25Nb2R1bGUge31cblxuZXhwb3J0IHtcbiAgICBOZzJEcm9wZG93bixcbiAgICBOZzJEcm9wZG93bk1lbnUsXG4gICAgTmcyTWVudUl0ZW0sXG4gICAgTmcyRHJvcGRvd25CdXR0b24sXG4gICAgRHJvcGRvd25TdGF0ZVNlcnZpY2Vcbn1cbiJdLCJuYW1lcyI6WyJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtJQTBCSSwyQkFBb0IsT0FBbUI7UUFBbkIsWUFBTyxHQUFQ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\n// CONCATENATED MODULE: ./node_modules/ngx-chips/esm5/ngx-chips.js\n\n\n\n\n\n\n\n\nvar ngx_chips_escape = function (s) { return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'); };\nvar HighlightPipe = /** @class */ (function () {\n    function HighlightPipe() {\n    }\n    HighlightPipe.prototype.transform = function (value, arg) {\n        if (!arg.trim()) {\n            return value;\n        }\n        try {\n            var regex = new RegExp(\"(\" + ngx_chips_escape(arg) + \")\", 'i');\n            return value.replace(regex, '<b>$1</b>');\n        }\n        catch (e) {\n            return value;\n        }\n    };\n    return HighlightPipe;\n}());\nHighlightPipe.decorators = [\n    { type: core_es5[\"Pipe\"], args: [{\n                name: 'highlight'\n            },] },\n];\nvar PLACEHOLDER = '+ Tag';\nvar SECONDARY_PLACEHOLDER = 'Enter a new tag';\nvar KEYDOWN = 'keydown';\nvar KEYUP = 'keyup';\nvar MAX_ITEMS_WARNING = 'The number of items specified was greater than the property max-items.';\nvar ACTIONS_KEYS = {\n    DELETE: 'DELETE',\n    SWITCH_PREV: 'SWITCH_PREV',\n    SWITCH_NEXT: 'SWITCH_NEXT',\n    TAB: 'TAB'\n};\nvar KEY_PRESS_ACTIONS = {\n    8: ACTIONS_KEYS.DELETE,\n    37: ACTIONS_KEYS.SWITCH_PREV,\n    39: ACTIONS_KEYS.SWITCH_NEXT,\n    9: ACTIONS_KEYS.TAB\n};\nvar DRAG_AND_DROP_KEY = 'Text';\nvar NEXT = 'NEXT';\nvar PREV = 'PREV';\nvar DragProvider = /** @class */ (function () {\n    function DragProvider() {\n        this.state = {\n            dragging: false,\n            dropping: false,\n            index: undefined\n        };\n    }\n    DragProvider.prototype.setDraggedItem = function (event, tag) {\n        event.dataTransfer.setData(DRAG_AND_DROP_KEY, JSON.stringify(tag));\n    };\n    DragProvider.prototype.getDraggedItem = function (event) {\n        var data = event.dataTransfer.getData(DRAG_AND_DROP_KEY);\n        try {\n            return (JSON.parse(data));\n        }\n        catch (_a) {\n            return;\n        }\n    };\n    DragProvider.prototype.setSender = function (sender) {\n        this.sender = sender;\n    };\n    DragProvider.prototype.setReceiver = function (receiver) {\n        this.receiver = receiver;\n    };\n    DragProvider.prototype.onTagDropped = function (tag, indexDragged, indexDropped) {\n        this.onDragEnd();\n        this.sender.onRemoveRequested(tag, indexDragged);\n        this.receiver.onAddingRequested(false, tag, indexDropped);\n    };\n    DragProvider.prototype.setState = function (state$$1) {\n        this.state = Object.assign({}, this.state, state$$1);\n    };\n    DragProvider.prototype.getState = function (key) {\n        return key ? this.state[key] : this.state;\n    };\n    DragProvider.prototype.onDragEnd = function () {\n        this.setState({\n            dragging: false,\n            dropping: false,\n            index: undefined\n        });\n    };\n    return DragProvider;\n}());\nDragProvider.decorators = [\n    { type: core_es5[\"Injectable\"] },\n];\nvar defaults = {\n    tagInput: ({\n        separatorKeys: [],\n        separatorKeyCodes: [],\n        maxItems: Infinity,\n        placeholder: PLACEHOLDER,\n        secondaryPlaceholder: SECONDARY_PLACEHOLDER,\n        validators: [],\n        asyncValidators: [],\n        onlyFromAutocomplete: false,\n        errorMessages: {},\n        theme: '',\n        onTextChangeDebounce: 250,\n        inputId: null,\n        inputClass: '',\n        clearOnBlur: false,\n        hideForm: false,\n        addOnBlur: false,\n        addOnPaste: false,\n        pasteSplitPattern: ',',\n        blinkIfDupe: true,\n        removable: true,\n        editable: false,\n        allowDupes: false,\n        modelAsStrings: false,\n        trimTags: true,\n        ripple: true,\n        tabIndex: '',\n        disable: false,\n        dragZone: '',\n        onRemoving: undefined,\n        onAdding: undefined,\n        displayBy: 'display',\n        identifyBy: 'value',\n        animationDuration: {\n            enter: '250ms',\n            leave: '150ms'\n        }\n    }),\n    dropdown: ({\n        displayBy: 'display',\n        identifyBy: 'value',\n        appendToBody: true,\n        offset: '50 0',\n        focusFirstElement: false,\n        showDropdownIfEmpty: false,\n        minimumTextLength: 1,\n        limitItemsTo: Infinity,\n        keepOpen: true,\n        dynamicUpdate: true,\n        zIndex: 1000,\n        matchingFn: matchingFn\n    })\n};\nfunction matchingFn(value, target) {\n    var targetValue = target[this.displayBy].toString();\n    return targetValue && targetValue\n        .toLowerCase()\n        .indexOf(value.toLowerCase()) >= 0;\n}\nvar OptionsProvider = /** @class */ (function () {\n    function OptionsProvider() {\n    }\n    OptionsProvider.prototype.setOptions = function (options) {\n        OptionsProvider.defaults.tagInput = Object.assign({}, defaults.tagInput, options.tagInput);\n        OptionsProvider.defaults.dropdown = Object.assign({}, defaults.dropdown, options.dropdown);\n    };\n    return OptionsProvider;\n}());\nOptionsProvider.defaults = defaults;\nfunction ngx_chips_isObject(obj) {\n    return obj === Object(obj);\n}\nvar TagInputAccessor = /** @class */ (function () {\n    function TagInputAccessor() {\n        this._items = [];\n        this.displayBy = OptionsProvider.defaults.tagInput.displayBy;\n        this.identifyBy = OptionsProvider.defaults.tagInput.identifyBy;\n    }\n    Object.defineProperty(TagInputAccessor.prototype, \"items\", {\n        get: function () {\n            return this._items;\n        },\n        set: function (items) {\n            this._items = items;\n            this._onChangeCallback(this._items);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputAccessor.prototype.onTouched = function () {\n        this._onTouchedCallback();\n    };\n    TagInputAccessor.prototype.writeValue = function (items) {\n        this._items = items || [];\n    };\n    TagInputAccessor.prototype.registerOnChange = function (fn) {\n        this._onChangeCallback = fn;\n    };\n    TagInputAccessor.prototype.registerOnTouched = function (fn) {\n        this._onTouchedCallback = fn;\n    };\n    TagInputAccessor.prototype.getItemValue = function (item, fromDropdown) {\n        if (fromDropdown === void 0) { fromDropdown = false; }\n        var property = fromDropdown && this.dropdown ? this.dropdown.identifyBy : this.identifyBy;\n        return ngx_chips_isObject(item) ? item[property] : item;\n    };\n    TagInputAccessor.prototype.getItemDisplay = function (item, fromDropdown) {\n        if (fromDropdown === void 0) { fromDropdown = false; }\n        var property = fromDropdown && this.dropdown ? this.dropdown.displayBy : this.displayBy;\n        return ngx_chips_isObject(item) ? item[property] : item;\n    };\n    TagInputAccessor.prototype.getItemsWithout = function (index) {\n        return this.items.filter(function (item, position) { return position !== index; });\n    };\n    return TagInputAccessor;\n}());\nTagInputAccessor.propDecorators = {\n    \"displayBy\": [{ type: core_es5[\"Input\"] },],\n    \"identifyBy\": [{ type: core_es5[\"Input\"] },],\n};\nfunction listen(listenerType, action, condition) {\n    if (condition === void 0) { condition = true; }\n    if (!this.listeners.hasOwnProperty(listenerType)) {\n        throw new Error('The event entered may be wrong');\n    }\n    if (!condition) {\n        return;\n    }\n    this.listeners[listenerType].push(action);\n}\nvar ngx_chips_TagInputForm = /** @class */ (function () {\n    function TagInputForm() {\n        this.onSubmit = new core_es5[\"EventEmitter\"]();\n        this.onBlur = new core_es5[\"EventEmitter\"]();\n        this.onFocus = new core_es5[\"EventEmitter\"]();\n        this.onKeyup = new core_es5[\"EventEmitter\"]();\n        this.onKeydown = new core_es5[\"EventEmitter\"]();\n        this.inputTextChange = new core_es5[\"EventEmitter\"]();\n        this.validators = [];\n        this.asyncValidators = [];\n        this.tabindex = '';\n        this.disabled = false;\n        this.item = new forms_es5[\"FormControl\"]({ value: '', disabled: this.disabled });\n    }\n    Object.defineProperty(TagInputForm.prototype, \"inputText\", {\n        get: function () {\n            return this.item.value;\n        },\n        set: function (text) {\n            this.item.setValue(text);\n            this.inputTextChange.emit(text);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputForm.prototype.ngOnInit = function () {\n        this.item.setValidators(this.validators);\n        this.item.setAsyncValidators(this.asyncValidators);\n        this.form = new forms_es5[\"FormGroup\"]({\n            item: this.item\n        });\n    };\n    TagInputForm.prototype.ngOnChanges = function (changes) {\n        if (changes[\"disabled\"] && !changes[\"disabled\"].firstChange) {\n            if (changes[\"disabled\"].currentValue) {\n                this.form.controls['item'].disable();\n            }\n            else {\n                this.form.controls['item'].enable();\n            }\n        }\n    };\n    Object.defineProperty(TagInputForm.prototype, \"value\", {\n        get: function () {\n            return (this.form.get('item'));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputForm.prototype.isInputFocused = function () {\n        var doc = typeof document !== 'undefined' ? document : undefined;\n        return doc ? doc.activeElement === this.input.nativeElement : false;\n    };\n    TagInputForm.prototype.getErrorMessages = function (messages) {\n        var _this = this;\n        return Object.keys(messages)\n            .filter(function (err) { return _this.value.hasError(err); })\n            .map(function (err) { return messages[err]; });\n    };\n    TagInputForm.prototype.hasErrors = function () {\n        var _b = this.form, dirty = _b.dirty, value = _b.value, valid = _b.valid;\n        return dirty && value.item && !valid;\n    };\n    TagInputForm.prototype.focus = function () {\n        this.input.nativeElement.focus();\n    };\n    TagInputForm.prototype.blur = function () {\n        this.input.nativeElement.blur();\n    };\n    TagInputForm.prototype.getElementPosition = function () {\n        return this.input.nativeElement.getBoundingClientRect();\n    };\n    TagInputForm.prototype.destroy = function () {\n        var input = this.input.nativeElement;\n        input.parentElement.removeChild(input);\n    };\n    TagInputForm.prototype.onKeyDown = function ($event) {\n        this.inputText = this.value.value;\n        if ($event.key === 'Enter') {\n            this.submit($event);\n            this.inputText = '';\n        }\n        return this.onKeydown.emit($event);\n    };\n    TagInputForm.prototype.onKeyUp = function ($event) {\n        this.inputText = this.value.value;\n        return this.onKeyup.emit($event);\n    };\n    TagInputForm.prototype.submit = function ($event) {\n        $event.preventDefault();\n        if (this.form.valid) {\n            this.onSubmit.emit($event);\n        }\n    };\n    return TagInputForm;\n}());\nngx_chips_TagInputForm.decorators = [\n    { type: core_es5[\"Component\"], args: [{\n                selector: 'tag-input-form',\n                styles: [\".dark tag:focus{-webkit-box-shadow:0 0 0 1px #323232;box-shadow:0 0 0 1px #323232}.ng2-tag-input.bootstrap3-info{background-color:#fff;display:inline-block;color:#555;vertical-align:middle;max-width:100%;height:42px;line-height:44px}.ng2-tag-input.bootstrap3-info input{border:none;-webkit-box-shadow:none;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder{color:#777;opacity:1}.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info input:focus{border:none;-webkit-box-shadow:none;box-shadow:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.4);box-shadow:inset 0 1px 1px rgba(0,0,0,.4);border:1px solid #ccc}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{-webkit-box-shadow:inset 0 1px 1px #d9534f;box-shadow:inset 0 1px 1px #d9534f}.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;-webkit-transition:all .25s;transition:all .25s;padding:.25rem 0;min-height:32px;cursor:text;border-bottom:2px solid #efefef}.ng2-tag-input:focus{outline:0}.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #2196f3}.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #f44336}.ng2-tag-input.ng2-tag-input--loading{border:none}.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.ng2-tag-input form{margin:.1em 0}.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.minimal.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:1px solid transparent}.minimal.ng2-tag-input:focus{outline:0}.minimal.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.minimal.ng2-tag-input.ng2-tag-input--loading{border:none}.minimal.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.minimal.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.dark.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #444}.dark.ng2-tag-input:focus{outline:0}.dark.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.dark.ng2-tag-input.ng2-tag-input--loading{border:none}.dark.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.dark.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #efefef}.bootstrap.ng2-tag-input:focus{outline:0}.bootstrap.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #0275d8}.bootstrap.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #d9534f}.bootstrap.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap3-info.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:4px;cursor:text;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-radius:4px}.bootstrap3-info.ng2-tag-input:focus{outline:0}.bootstrap3-info.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d9534f}.bootstrap3-info.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap3-info.ng2-tag-input form{margin:.1em 0}.bootstrap3-info.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.error-message{font-size:.8em;color:#f44336;margin:.5em 0 0}.bootstrap .error-message{color:#d9534f}.ng2-tag-input__text-input{display:inline;vertical-align:middle;border:none;padding:0 .5rem;height:38px;font-size:1em;font-family:Roboto,\\\"Helvetica Neue\\\",sans-serif}.ng2-tag-input__text-input:focus{outline:0}.ng2-tag-input__text-input[disabled=true]{opacity:.5;background:#fff}\"],\n                template: \"<!-- form -->\\n<form (ngSubmit)=\\\"submit($event)\\\" [formGroup]=\\\"form\\\">\\n    <input #input\\n\\n           type=\\\"text\\\"\\n           class=\\\"ng2-tag-input__text-input\\\"\\n           autocomplete=\\\"off\\\"\\n           tabindex=\\\"{{ disabled ? -1 : tabindex ? tabindex : 0 }}\\\"\\n           minlength=\\\"1\\\"\\n           formControlName=\\\"item\\\"\\n\\n           [ngClass]=\\\"inputClass\\\"\\n           [attr.id]=\\\"inputId\\\"\\n           [attr.placeholder]=\\\"placeholder\\\"\\n           [attr.aria-label]=\\\"placeholder\\\"\\n           [attr.tabindex]=\\\"tabindex\\\"\\n           [attr.disabled]=\\\"disabled ? disabled : null\\\"\\n\\n           (focus)=\\\"onFocus.emit($event)\\\"\\n           (blur)=\\\"onBlur.emit($event)\\\"\\n           (keydown)=\\\"onKeyDown($event)\\\"\\n           (keyup)=\\\"onKeyUp($event)\\\"\\n    />\\n</form>\\n\"\n            },] },\n];\nngx_chips_TagInputForm.propDecorators = {\n    \"onSubmit\": [{ type: core_es5[\"Output\"] },],\n    \"onBlur\": [{ type: core_es5[\"Output\"] },],\n    \"onFocus\": [{ type: core_es5[\"Output\"] },],\n    \"onKeyup\": [{ type: core_es5[\"Output\"] },],\n    \"onKeydown\": [{ type: core_es5[\"Output\"] },],\n    \"inputTextChange\": [{ type: core_es5[\"Output\"] },],\n    \"placeholder\": [{ type: core_es5[\"Input\"] },],\n    \"validators\": [{ type: core_es5[\"Input\"] },],\n    \"asyncValidators\": [{ type: core_es5[\"Input\"] },],\n    \"inputId\": [{ type: core_es5[\"Input\"] },],\n    \"inputClass\": [{ type: core_es5[\"Input\"] },],\n    \"tabindex\": [{ type: core_es5[\"Input\"] },],\n    \"disabled\": [{ type: core_es5[\"Input\"] },],\n    \"input\": [{ type: core_es5[\"ViewChild\"], args: ['input',] },],\n    \"inputText\": [{ type: core_es5[\"Input\"] },],\n};\nvar defaults$1 = Object(core_es5[\"forwardRef\"])(function () { return OptionsProvider.defaults.dropdown; });\nvar ngx_chips_TagInputDropdown = /** @class */ (function () {\n    function TagInputDropdown(injector) {\n        var _this = this;\n        this.injector = injector;\n        this.offset = new defaults$1().offset;\n        this.focusFirstElement = new defaults$1().focusFirstElement;\n        this.showDropdownIfEmpty = new defaults$1().showDropdownIfEmpty;\n        this.minimumTextLength = new defaults$1().minimumTextLength;\n        this.limitItemsTo = new defaults$1().limitItemsTo;\n        this.displayBy = new defaults$1().displayBy;\n        this.identifyBy = new defaults$1().identifyBy;\n        this.matchingFn = new defaults$1().matchingFn;\n        this.appendToBody = new defaults$1().appendToBody;\n        this.keepOpen = new defaults$1().keepOpen;\n        this.dynamicUpdate = new defaults$1().dynamicUpdate;\n        this.zIndex = new defaults$1().zIndex;\n        this.items = [];\n        this.tagInput = this.injector.get(ngx_chips_TagInputComponent);\n        this._autocompleteItems = [];\n        this.show = function () {\n            var maxItemsReached = _this.tagInput.items.length === _this.tagInput.maxItems;\n            var value = _this.getFormValue();\n            var hasMinimumText = value.trim().length >= _this.minimumTextLength;\n            var position = _this.calculatePosition();\n            var items = _this.getMatchingItems(value);\n            var hasItems = items.length > 0;\n            var isHidden = _this.isVisible === false;\n            var showDropdownIfEmpty = _this.showDropdownIfEmpty && hasItems && !value;\n            var isDisabled = _this.tagInput.disable;\n            var shouldShow = isHidden && ((hasItems && hasMinimumText) || showDropdownIfEmpty);\n            var shouldHide = _this.isVisible && !hasItems;\n            if (_this.autocompleteObservable && hasMinimumText) {\n                return _this.getItemsFromObservable(value);\n            }\n            if ((!_this.showDropdownIfEmpty && !value) || maxItemsReached || isDisabled) {\n                return _this.dropdown.hide();\n            }\n            _this.setItems(items);\n            if (shouldShow) {\n                _this.dropdown.show(position);\n            }\n            else if (shouldHide) {\n                _this.hide();\n            }\n        };\n        this.requestAdding = function (item) { return __awaiter(_this, void 0, void 0, function () {\n            var tag;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        tag = this.createTagModel(item);\n                        return [4 /*yield*/, this.tagInput.onAddingRequested(true, tag).catch(function () { })];\n                    case 1:\n                        _b.sent();\n                        return [2 /*return*/];\n                }\n            });\n        }); };\n        this.resetItems = function () {\n            _this.items = [];\n        };\n        this.getItemsFromObservable = function (text) {\n            _this.setLoadingState(true);\n            var subscribeFn = function (data) {\n                _this.setLoadingState(false)\n                    .populateItems(data);\n                _this.setItems(_this.getMatchingItems(text));\n                if (_this.items.length) {\n                    _this.dropdown.show(_this.calculatePosition());\n                }\n                else {\n                    _this.dropdown.hide();\n                }\n            };\n            _this.autocompleteObservable(text)\n                .pipe(Object(operators[\"first\"])())\n                .subscribe(subscribeFn, function () { return _this.setLoadingState(false); });\n        };\n    }\n    Object.defineProperty(TagInputDropdown.prototype, \"autocompleteItems\", {\n        get: function () {\n            var _this = this;\n            var items = this._autocompleteItems;\n            if (!items) {\n                return [];\n            }\n            return items.map(function (item) {\n                return typeof item === 'string' ? (_b = {}, _b[_this.displayBy] = item, _b[_this.identifyBy] = item, _b) : item;\n                var _b;\n            });\n        },\n        set: function (items) {\n            this._autocompleteItems = items;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputDropdown.prototype.ngOnInit = function () {\n        var _this = this;\n        this.onItemClicked().subscribe(function (item) {\n            _this.requestAdding(item);\n        });\n        this.onHide().subscribe(this.resetItems);\n        var DEBOUNCE_TIME = 200;\n        var KEEP_OPEN = this.keepOpen;\n        this.tagInput\n            .onTextChange\n            .asObservable()\n            .pipe(Object(operators[\"debounceTime\"])(DEBOUNCE_TIME), Object(operators[\"filter\"])(function (value) {\n            if (KEEP_OPEN === false) {\n                return value.length > 0;\n            }\n            return true;\n        }))\n            .subscribe(this.show);\n    };\n    TagInputDropdown.prototype.updatePosition = function () {\n        var position = this.tagInput.inputForm.getElementPosition();\n        this.dropdown.menu.updatePosition(position, this.dynamicUpdate);\n    };\n    Object.defineProperty(TagInputDropdown.prototype, \"isVisible\", {\n        get: function () {\n            return this.dropdown.menu.state.menuState.isVisible;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputDropdown.prototype.onHide = function () {\n        return this.dropdown.onHide;\n    };\n    TagInputDropdown.prototype.onItemClicked = function () {\n        return this.dropdown.onItemClicked;\n    };\n    Object.defineProperty(TagInputDropdown.prototype, \"selectedItem\", {\n        get: function () {\n            return this.dropdown.menu.state.dropdownState.selectedItem;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(TagInputDropdown.prototype, \"state\", {\n        get: function () {\n            return this.dropdown.menu.state;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputDropdown.prototype.hide = function () {\n        this.resetItems();\n        this.dropdown.hide();\n    };\n    TagInputDropdown.prototype.scrollListener = function () {\n        if (!this.isVisible || !this.dynamicUpdate) {\n            return;\n        }\n        this.updatePosition();\n    };\n    TagInputDropdown.prototype.onWindowBlur = function () {\n        this.dropdown.hide();\n    };\n    TagInputDropdown.prototype.getFormValue = function () {\n        var formValue = this.tagInput.formValue;\n        return formValue ? formValue.toString().trim() : '';\n    };\n    TagInputDropdown.prototype.calculatePosition = function () {\n        return this.tagInput.inputForm.getElementPosition();\n    };\n    TagInputDropdown.prototype.createTagModel = function (item) {\n        var display = typeof item.value === 'string' ? item.value : item.value[this.displayBy];\n        var value = typeof item.value === 'string' ? item.value : item.value[this.identifyBy];\n        return Object.assign({}, item.value, (_b = {}, _b[this.tagInput.displayBy] = display, _b[this.tagInput.identifyBy] = value, _b));\n        var _b;\n    };\n    TagInputDropdown.prototype.getMatchingItems = function (value) {\n        var _this = this;\n        if (!value && !this.showDropdownIfEmpty) {\n            return [];\n        }\n        var dupesAllowed = this.tagInput.allowDupes;\n        return this.autocompleteItems.filter(function (item) {\n            var hasValue = dupesAllowed ? false : _this.tagInput.tags.some(function (tag) {\n                var identifyBy = _this.tagInput.identifyBy;\n                var model = typeof tag.model === 'string' ? tag.model : tag.model[identifyBy];\n                return model === item[_this.identifyBy];\n            });\n            return _this.matchingFn(value, item) && (hasValue === false);\n        });\n    };\n    TagInputDropdown.prototype.setItems = function (items) {\n        this.items = items.slice(0, this.limitItemsTo || items.length);\n    };\n    TagInputDropdown.prototype.populateItems = function (data) {\n        var _this = this;\n        this.autocompleteItems = data.map(function (item) {\n            return typeof item === 'string' ? (_b = {}, _b[_this.displayBy] = item, _b[_this.identifyBy] = item, _b) : item;\n            var _b;\n        });\n        return this;\n    };\n    TagInputDropdown.prototype.setLoadingState = function (state$$1) {\n        this.tagInput.isLoading = state$$1;\n        return this;\n    };\n    return TagInputDropdown;\n}());\nngx_chips_TagInputDropdown.decorators = [\n    { type: core_es5[\"Component\"], args: [{\n                selector: 'tag-input-dropdown',\n                template: \"<ng2-dropdown [dynamicUpdate]=\\\"dynamicUpdate\\\">\\n    <ng2-dropdown-menu [focusFirstElement]=\\\"focusFirstElement\\\"\\n                       [zIndex]=\\\"zIndex\\\"\\n                       [appendToBody]=\\\"appendToBody\\\"\\n                       [offset]=\\\"offset\\\">\\n        <ng2-menu-item *ngFor=\\\"let item of items; let index = index; let last = last\\\"\\n                       [value]=\\\"item\\\"\\n                       [ngSwitch]=\\\"!!templates.length\\\">\\n\\n            <span *ngSwitchCase=\\\"false\\\"\\n                  [innerHTML]=\\\"item[displayBy] | highlight : tagInput.inputForm.value.value\\\">\\n            </span>\\n\\n            <ng-template *ngSwitchDefault\\n                      [ngTemplateOutlet]=\\\"templates.first\\\"\\n                      [ngTemplateOutletContext]=\\\"{ item: item, index: index, last: last }\\\">\\n            </ng-template>\\n        </ng2-menu-item>\\n    </ng2-dropdown-menu>\\n</ng2-dropdown>\\n\"\n            },] },\n];\nngx_chips_TagInputDropdown.ctorParameters = function () { return [\n    { type: core_es5[\"Injector\"], },\n]; };\nngx_chips_TagInputDropdown.propDecorators = {\n    \"dropdown\": [{ type: core_es5[\"ViewChild\"], args: [ng2_material_dropdown_Ng2Dropdown,] },],\n    \"templates\": [{ type: core_es5[\"ContentChildren\"], args: [core_es5[\"TemplateRef\"],] },],\n    \"offset\": [{ type: core_es5[\"Input\"] },],\n    \"focusFirstElement\": [{ type: core_es5[\"Input\"] },],\n    \"showDropdownIfEmpty\": [{ type: core_es5[\"Input\"] },],\n    \"autocompleteObservable\": [{ type: core_es5[\"Input\"] },],\n    \"minimumTextLength\": [{ type: core_es5[\"Input\"] },],\n    \"limitItemsTo\": [{ type: core_es5[\"Input\"] },],\n    \"displayBy\": [{ type: core_es5[\"Input\"] },],\n    \"identifyBy\": [{ type: core_es5[\"Input\"] },],\n    \"matchingFn\": [{ type: core_es5[\"Input\"] },],\n    \"appendToBody\": [{ type: core_es5[\"Input\"] },],\n    \"keepOpen\": [{ type: core_es5[\"Input\"] },],\n    \"dynamicUpdate\": [{ type: core_es5[\"Input\"] },],\n    \"zIndex\": [{ type: core_es5[\"Input\"] },],\n    \"autocompleteItems\": [{ type: core_es5[\"Input\"] },],\n    \"scrollListener\": [{ type: core_es5[\"HostListener\"], args: ['window:scroll',] },],\n    \"onWindowBlur\": [{ type: core_es5[\"HostListener\"], args: ['window:blur',] },],\n};\nvar TagRipple = /** @class */ (function () {\n    function TagRipple() {\n        this.state = 'none';\n    }\n    return TagRipple;\n}());\nTagRipple.decorators = [\n    { type: core_es5[\"Component\"], args: [{\n                selector: 'tag-ripple',\n                styles: [\"\\n        :host {\\n            width: 100%;\\n            height: 100%;\\n            left: 0;\\n            overflow: hidden;\\n            position: absolute;\\n        }\\n        \\n        .tag-ripple {\\n            background: rgba(0, 0, 0, 0.1);\\n            top: 50%;\\n            left: 50%;\\n            height: 100%;\\n            transform: translate(-50%, -50%);\\n            position: absolute;\\n        }\\n    \"],\n                template: \"\\n        <div class=\\\"tag-ripple\\\" [@ink]=\\\"state\\\"></div>\\n    \",\n                animations: [\n                    trigger('ink', [\n                        animations_es5_state('none', style({ width: 0, opacity: 0 })),\n                        transition('none => clicked', [\n                            animate(300, animations_es5_keyframes([\n                                style({ opacity: 1, offset: 0, width: '30%', borderRadius: '100%' }),\n                                style({ opacity: 1, offset: 0.5, width: '50%' }),\n                                style({ opacity: 0.5, offset: 1, width: '100%', borderRadius: '16px' })\n                            ]))\n                        ])\n                    ])\n                ]\n            },] },\n];\nTagRipple.propDecorators = {\n    \"state\": [{ type: core_es5[\"Input\"] },],\n};\nvar ngx_chips_navigator = typeof window !== 'undefined' ? window.navigator : {\n    userAgent: 'Chrome',\n    vendor: 'Google Inc'\n};\nvar isChrome = /Chrome/.test(ngx_chips_navigator.userAgent) && /Google Inc/.test(ngx_chips_navigator.vendor);\nvar ngx_chips_TagComponent = /** @class */ (function () {\n    function TagComponent(element, renderer, cdRef) {\n        this.element = element;\n        this.renderer = renderer;\n        this.cdRef = cdRef;\n        this.disabled = false;\n        this.onSelect = new core_es5[\"EventEmitter\"]();\n        this.onRemove = new core_es5[\"EventEmitter\"]();\n        this.onBlur = new core_es5[\"EventEmitter\"]();\n        this.onKeyDown = new core_es5[\"EventEmitter\"]();\n        this.onTagEdited = new core_es5[\"EventEmitter\"]();\n        this.editing = false;\n        this.rippleState = \"none\";\n    }\n    Object.defineProperty(TagComponent.prototype, \"readonly\", {\n        get: function () {\n            return typeof this.model !== \"string\" && this.model[\"readonly\"] === true;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagComponent.prototype.select = function ($event) {\n        if (this.readonly || this.disabled) {\n            return;\n        }\n        if ($event) {\n            $event.stopPropagation();\n        }\n        this.focus();\n        this.onSelect.emit(this.model);\n    };\n    TagComponent.prototype.remove = function ($event) {\n        $event.stopPropagation();\n        this.onRemove.emit(this);\n    };\n    TagComponent.prototype.focus = function () {\n        this.element.nativeElement.focus();\n    };\n    TagComponent.prototype.move = function () {\n        this.moving = true;\n    };\n    TagComponent.prototype.keydown = function (event) {\n        if (this.editing) {\n            if (event.keyCode === 13) {\n                return this.disableEditMode(event);\n            }\n        }\n        else {\n            this.onKeyDown.emit({ event: event, model: this.model });\n        }\n    };\n    TagComponent.prototype.blink = function () {\n        var classList = this.element.nativeElement.classList;\n        classList.add(\"blink\");\n        setTimeout(function () { return classList.remove(\"blink\"); }, 50);\n    };\n    TagComponent.prototype.toggleEditMode = function () {\n        if (this.editable) {\n            return this.editing ? undefined : this.activateEditMode();\n        }\n    };\n    TagComponent.prototype.onBlurred = function (event) {\n        if (!this.editable) {\n            return;\n        }\n        this.disableEditMode();\n        var value = event.target.innerText;\n        var result = typeof this.model === \"string\"\n            ? value\n            : Object.assign({}, this.model, (_b = {}, _b[this.displayBy] = value, _b));\n        this.onBlur.emit(result);\n        var _b;\n    };\n    TagComponent.prototype.getDisplayValue = function (item) {\n        return typeof item === \"string\" ? item : item[this.displayBy];\n    };\n    Object.defineProperty(TagComponent.prototype, \"isRippleVisible\", {\n        get: function () {\n            return !this.readonly && !this.editing && isChrome && this.hasRipple;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagComponent.prototype.disableEditMode = function ($event) {\n        var classList = this.element.nativeElement.classList;\n        var input = this.getContentEditableText();\n        this.editing = false;\n        classList.remove(\"tag--editing\");\n        if (!input) {\n            this.setContentEditableText(this.model);\n            return;\n        }\n        this.storeNewValue(input);\n        this.cdRef.detectChanges();\n        if ($event) {\n            $event.preventDefault();\n        }\n    };\n    TagComponent.prototype.isDeleteIconVisible = function () {\n        return (!this.readonly && !this.disabled && this.removable && !this.editing);\n    };\n    TagComponent.prototype.getContentEditableText = function () {\n        var input = this.getContentEditable();\n        return input ? input.innerText.trim() : \"\";\n    };\n    TagComponent.prototype.setContentEditableText = function (model) {\n        var input = this.getContentEditable();\n        var value = this.getDisplayValue(model);\n        input.innerText = value;\n    };\n    TagComponent.prototype.activateEditMode = function () {\n        var classList = this.element.nativeElement.classList;\n        classList.add('tag--editing');\n        this.editing = true;\n    };\n    TagComponent.prototype.storeNewValue = function (input) {\n        var _this = this;\n        var exists = function (tag) {\n            return typeof tag === 'string'\n                ? tag === input\n                : tag[_this.displayBy] === input;\n        };\n        var hasId = function () {\n            return _this.model[_this.identifyBy] !== _this.model[_this.displayBy];\n        };\n        if (exists(this.model)) {\n            return;\n        }\n        var model = typeof this.model === 'string'\n            ? input\n            : (_b = {\n                    index: this.index\n                }, _b[this.identifyBy] = hasId()\n                    ? this.model[this.identifyBy]\n                    : input, _b[this.displayBy] = input, _b);\n        if (this.canAddTag(model)) {\n            this.onTagEdited.emit({ tag: model, index: this.index });\n        }\n        else {\n            this.setContentEditableText(this.model);\n        }\n        var _b;\n    };\n    TagComponent.prototype.getContentEditable = function () {\n        return this.element.nativeElement.querySelector('[contenteditable]');\n    };\n    return TagComponent;\n}());\nngx_chips_TagComponent.decorators = [\n    { type: core_es5[\"Component\"], args: [{\n                selector: \"tag\",\n                template: \"<div (click)=\\\"select($event)\\\"\\n     (dblclick)=\\\"toggleEditMode()\\\"\\n     (mousedown)=\\\"rippleState='clicked'\\\"\\n     (mouseup)=\\\"rippleState='none'\\\"\\n     [ngSwitch]=\\\"!!template\\\"\\n     [class.disabled]=\\\"disabled\\\"\\n     [attr.tabindex]=\\\"-1\\\"\\n     [attr.aria-label]=\\\"getDisplayValue(model)\\\">\\n\\n    <div *ngSwitchCase=\\\"true\\\" [attr.contenteditable]=\\\"editing\\\">\\n        <!-- CUSTOM TEMPLATE -->\\n        <ng-template\\n            [ngTemplateOutletContext]=\\\"{ item: model, index: index }\\\"\\n            [ngTemplateOutlet]=\\\"template\\\">\\n        </ng-template>\\n    </div>\\n\\n    <div *ngSwitchCase=\\\"false\\\" class=\\\"tag-wrapper\\\">\\n        <!-- TAG NAME -->\\n        <div [attr.contenteditable]=\\\"editing\\\"\\n             [attr.title]=\\\"getDisplayValue(model)\\\"\\n             class=\\\"tag__text inline\\\"\\n             spellcheck=\\\"false\\\"\\n             (keydown.enter)=\\\"disableEditMode($event)\\\"\\n             (keydown.escape)=\\\"disableEditMode($event)\\\"\\n             (click)=\\\"editing ? $event.stopPropagation() : undefined\\\"\\n             (blur)=\\\"onBlurred($event)\\\">\\n            {{ getDisplayValue(model) }}\\n        </div>\\n\\n        <!-- 'X' BUTTON -->\\n        <delete-icon\\n            aria-label=\\\"Remove tag\\\"\\n            role=\\\"button\\\"\\n            (click)=\\\"remove($event)\\\"\\n            *ngIf=\\\"isDeleteIconVisible()\\\">\\n        </delete-icon>\\n    </div>\\n</div>\\n\\n<tag-ripple [state]=\\\"rippleState\\\"\\n            [attr.tabindex]=\\\"-1\\\"\\n            *ngIf=\\\"isRippleVisible\\\">\\n</tag-ripple>\\n\",\n                styles: [\":host,:host>div,:host>div:focus{outline:0;overflow:hidden;-webkit-transition:opacity 1s;transition:opacity 1s;z-index:1}:host{max-width:400px}:host.blink{-webkit-animation:.3s ease-in-out forwards blink;animation:.3s ease-in-out forwards blink}@-webkit-keyframes blink{0%{opacity:.3}}@keyframes blink{0%{opacity:.3}}:host .disabled{cursor:not-allowed}:host [contenteditable=true]{outline:0}.tag-wrapper{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;display:-webkit-box;display:-ms-flexbox;display:flex}.tag__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\"]\n            },] },\n];\nngx_chips_TagComponent.ctorParameters = function () { return [\n    { type: core_es5[\"ElementRef\"], },\n    { type: core_es5[\"Renderer2\"], },\n    { type: core_es5[\"ChangeDetectorRef\"], },\n]; };\nngx_chips_TagComponent.propDecorators = {\n    \"model\": [{ type: core_es5[\"Input\"] },],\n    \"removable\": [{ type: core_es5[\"Input\"] },],\n    \"editable\": [{ type: core_es5[\"Input\"] },],\n    \"template\": [{ type: core_es5[\"Input\"] },],\n    \"displayBy\": [{ type: core_es5[\"Input\"] },],\n    \"identifyBy\": [{ type: core_es5[\"Input\"] },],\n    \"index\": [{ type: core_es5[\"Input\"] },],\n    \"hasRipple\": [{ type: core_es5[\"Input\"] },],\n    \"disabled\": [{ type: core_es5[\"Input\"] },],\n    \"canAddTag\": [{ type: core_es5[\"Input\"] },],\n    \"onSelect\": [{ type: core_es5[\"Output\"] },],\n    \"onRemove\": [{ type: core_es5[\"Output\"] },],\n    \"onBlur\": [{ type: core_es5[\"Output\"] },],\n    \"onKeyDown\": [{ type: core_es5[\"Output\"] },],\n    \"onTagEdited\": [{ type: core_es5[\"Output\"] },],\n    \"moving\": [{ type: core_es5[\"HostBinding\"], args: [\"class.moving\",] },],\n    \"ripple\": [{ type: core_es5[\"ViewChild\"], args: [TagRipple,] },],\n    \"keydown\": [{ type: core_es5[\"HostListener\"], args: [\"keydown\", [\"$event\"],] },],\n};\nvar animations = [\n    trigger('animation', [\n        animations_es5_state('in', style({\n            opacity: 1\n        })),\n        animations_es5_state('out', style({\n            opacity: 0\n        })),\n        transition(':enter', [\n            animate(\"{{ enter }}\", animations_es5_keyframes([\n                style({ opacity: 0, offset: 0, transform: 'translate(0px, 20px)' }),\n                style({ opacity: 0.3, offset: 0.3, transform: 'translate(0px, -10px)' }),\n                style({ opacity: 0.5, offset: 0.5, transform: 'translate(0px, 0px)' }),\n                style({ opacity: 0.75, offset: 0.75, transform: 'translate(0px, 5px)' }),\n                style({ opacity: 1, offset: 1, transform: 'translate(0px, 0px)' })\n            ]))\n        ]),\n        transition(':leave', [\n            animate(\"{{ leave }}\", animations_es5_keyframes([\n                style({ opacity: 1, transform: 'translateX(0)', offset: 0 }),\n                style({ opacity: 1, transform: 'translateX(-15px)', offset: 0.7 }),\n                style({ opacity: 0, transform: 'translateX(100%)', offset: 1.0 })\n            ]))\n        ])\n    ])\n];\nvar DragEvent = ((window)).DragEvent;\nvar CUSTOM_ACCESSOR = {\n    provide: forms_es5[\"NG_VALUE_ACCESSOR\"],\n    useExisting: Object(core_es5[\"forwardRef\"])(function () { return ngx_chips_TagInputComponent; }),\n    multi: true\n};\nvar defaults$2 = Object(core_es5[\"forwardRef\"])(function () { return OptionsProvider.defaults.tagInput; });\nvar ngx_chips_TagInputComponent = /** @class */ (function (_super) {\n    tslib_es6___extends(TagInputComponent, _super);\n    function TagInputComponent(renderer, dragProvider) {\n        var _this = _super.call(this) || this;\n        _this.renderer = renderer;\n        _this.dragProvider = dragProvider;\n        _this.separatorKeys = new defaults$2().separatorKeys;\n        _this.separatorKeyCodes = new defaults$2().separatorKeyCodes;\n        _this.placeholder = new defaults$2().placeholder;\n        _this.secondaryPlaceholder = new defaults$2().secondaryPlaceholder;\n        _this.maxItems = new defaults$2().maxItems;\n        _this.validators = new defaults$2().validators;\n        _this.asyncValidators = new defaults$2().asyncValidators;\n        _this.onlyFromAutocomplete = new defaults$2().onlyFromAutocomplete;\n        _this.errorMessages = new defaults$2().errorMessages;\n        _this.theme = new defaults$2().theme;\n        _this.onTextChangeDebounce = new defaults$2().onTextChangeDebounce;\n        _this.inputId = new defaults$2().inputId;\n        _this.inputClass = new defaults$2().inputClass;\n        _this.clearOnBlur = new defaults$2().clearOnBlur;\n        _this.hideForm = new defaults$2().hideForm;\n        _this.addOnBlur = new defaults$2().addOnBlur;\n        _this.addOnPaste = new defaults$2().addOnPaste;\n        _this.pasteSplitPattern = new defaults$2().pasteSplitPattern;\n        _this.blinkIfDupe = new defaults$2().blinkIfDupe;\n        _this.removable = new defaults$2().removable;\n        _this.editable = new defaults$2().editable;\n        _this.allowDupes = new defaults$2().allowDupes;\n        _this.modelAsStrings = new defaults$2().modelAsStrings;\n        _this.trimTags = new defaults$2().trimTags;\n        _this.ripple = new defaults$2().ripple;\n        _this.tabindex = new defaults$2().tabIndex;\n        _this.disable = new defaults$2().disable;\n        _this.dragZone = new defaults$2().dragZone;\n        _this.onRemoving = new defaults$2().onRemoving;\n        _this.onAdding = new defaults$2().onAdding;\n        _this.animationDuration = new defaults$2().animationDuration;\n        _this.onAdd = new core_es5[\"EventEmitter\"]();\n        _this.onRemove = new core_es5[\"EventEmitter\"]();\n        _this.onSelect = new core_es5[\"EventEmitter\"]();\n        _this.onFocus = new core_es5[\"EventEmitter\"]();\n        _this.onBlur = new core_es5[\"EventEmitter\"]();\n        _this.onTextChange = new core_es5[\"EventEmitter\"]();\n        _this.onPaste = new core_es5[\"EventEmitter\"]();\n        _this.onValidationError = new core_es5[\"EventEmitter\"]();\n        _this.onTagEdited = new core_es5[\"EventEmitter\"]();\n        _this.isLoading = false;\n        _this.listeners = (_b = {}, _b[KEYDOWN] = ([]), _b[KEYUP] = ([]), _b);\n        _this.inputTextChange = new core_es5[\"EventEmitter\"]();\n        _this.inputTextValue = '';\n        _this.errors = [];\n        _this.appendTag = function (tag, index) {\n            if (index === void 0) { index = _this.items.length; }\n            var items = _this.items;\n            var model = _this.modelAsStrings ? tag[_this.identifyBy] : tag;\n            _this.items = __spread(items.slice(0, index), [\n                model\n            ], items.slice(index, items.length));\n        };\n        _this.createTag = function (model) {\n            var trim = function (val, key) {\n                return typeof val === 'string' ? val.trim() : val[key];\n            };\n            return Object.assign({}, typeof model !== 'string' ? model : {}, (_b = {}, _b[_this.displayBy] = _this.trimTags ? trim(model, _this.displayBy) : model, _b[_this.identifyBy] = _this.trimTags ? trim(model, _this.identifyBy) : model, _b));\n            var _b;\n        };\n        _this.isTagValid = function (tag, fromAutocomplete) {\n            if (fromAutocomplete === void 0) { fromAutocomplete = false; }\n            var selectedItem = _this.dropdown ? _this.dropdown.selectedItem : undefined;\n            var value = _this.getItemDisplay(tag).trim();\n            if (selectedItem && !fromAutocomplete || !value) {\n                return false;\n            }\n            var dupe = _this.findDupe(tag, fromAutocomplete);\n            if (!_this.allowDupes && dupe && _this.blinkIfDupe) {\n                var model = _this.tags.find(function (item) {\n                    return _this.getItemValue(item.model) === _this.getItemValue(dupe);\n                });\n                if (model) {\n                    model.blink();\n                }\n            }\n            var isFromAutocomplete = fromAutocomplete && _this.onlyFromAutocomplete;\n            var assertions = [\n                !dupe || _this.allowDupes,\n                !_this.maxItemsReached,\n                ((isFromAutocomplete) || !_this.onlyFromAutocomplete)\n            ];\n            return assertions.filter(Boolean).length === assertions.length;\n        };\n        _this.onPasteCallback = function (data) { return __awaiter(_this, void 0, void 0, function () {\n            var _this = this;\n            var getText, text, requests, resetInput;\n            return __generator(this, function (_b) {\n                getText = function () {\n                    var isIE = Boolean(((window)).clipboardData);\n                    var clipboardData = isIE ? (((window)).clipboardData) : data.clipboardData;\n                    var type = isIE ? 'Text' : 'text/plain';\n                    return clipboardData.getData(type) || '';\n                };\n                text = getText();\n                requests = text\n                    .split(this.pasteSplitPattern)\n                    .map(function (item) {\n                    var tag = _this.createTag(item);\n                    _this.setInputValue(tag[_this.displayBy]);\n                    return _this.onAddingRequested(false, tag);\n                });\n                resetInput = function () { return setTimeout(function () { return _this.setInputValue(''); }, 50); };\n                Promise.all(requests).then(function () {\n                    _this.onPaste.emit(text);\n                    resetInput();\n                })\n                    .catch(resetInput);\n                return [2 /*return*/];\n            });\n        }); };\n        return _this;\n        var _b;\n    }\n    Object.defineProperty(TagInputComponent.prototype, \"inputText\", {\n        get: function () {\n            return this.inputTextValue;\n        },\n        set: function (text) {\n            this.inputTextValue = text;\n            this.inputTextChange.emit(text);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(TagInputComponent.prototype, \"tabindexAttr\", {\n        get: function () {\n            return this.tabindex !== '' ? '-1' : '';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputComponent.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.setUpKeypressListeners();\n        this.setupSeparatorKeysListener();\n        this.setUpInputKeydownListeners();\n        if (this.onTextChange.observers.length) {\n            this.setUpTextChangeSubscriber();\n        }\n        if (this.clearOnBlur || this.addOnBlur) {\n            this.setUpOnBlurSubscriber();\n        }\n        if (this.addOnPaste) {\n            this.setUpOnPasteListener();\n        }\n        var statusChanges$ = this.inputForm.form.statusChanges;\n        statusChanges$.pipe(Object(operators[\"filter\"])(function (status) { return status !== 'PENDING'; })).subscribe(function () {\n            _this.errors = _this.inputForm.getErrorMessages(_this.errorMessages);\n        });\n        this.isProgressBarVisible$ = statusChanges$.pipe(Object(operators[\"map\"])(function (status) {\n            return status === 'PENDING' || _this.isLoading;\n        }));\n        if (this.hideForm) {\n            this.inputForm.destroy();\n        }\n    };\n    TagInputComponent.prototype.ngOnInit = function () {\n        var hasReachedMaxItems = this.maxItems !== undefined &&\n            this.items &&\n            this.items.length > this.maxItems;\n        if (hasReachedMaxItems) {\n            this.maxItems = this.items.length;\n            console.warn(MAX_ITEMS_WARNING);\n        }\n        this.editable = this.onlyFromAutocomplete ? false : this.editable;\n        this.setAnimationMetadata();\n    };\n    TagInputComponent.prototype.onRemoveRequested = function (tag, index) {\n        var _this = this;\n        return new Promise(function (resolve) {\n            var subscribeFn = function (model) {\n                _this.removeItem(model, index);\n                resolve(tag);\n            };\n            _this.onRemoving ?\n                _this.onRemoving(tag)\n                    .pipe(Object(operators[\"first\"])())\n                    .subscribe(subscribeFn) : subscribeFn(tag);\n        });\n    };\n    TagInputComponent.prototype.onAddingRequested = function (fromAutocomplete, tag, index, giveupFocus) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            var subscribeFn = function (model) {\n                return _this\n                    .addItem(fromAutocomplete, model, index, giveupFocus)\n                    .then(resolve)\n                    .catch(reject);\n            };\n            return _this.onAdding ?\n                _this.onAdding(tag)\n                    .pipe(Object(operators[\"first\"])())\n                    .subscribe(subscribeFn, reject) : subscribeFn(tag);\n        });\n    };\n    TagInputComponent.prototype.selectItem = function (item, emit) {\n        if (emit === void 0) { emit = true; }\n        var isReadonly = item && typeof item !== 'string' && item[\"readonly\"];\n        if (isReadonly || this.selectedTag === item) {\n            return;\n        }\n        this.selectedTag = item;\n        if (emit) {\n            this.onSelect.emit(item);\n        }\n    };\n    TagInputComponent.prototype.fireEvents = function (eventName, $event) {\n        var _this = this;\n        this.listeners[eventName].forEach(function (listener) { return listener.call(_this, $event); });\n    };\n    TagInputComponent.prototype.handleKeydown = function (data) {\n        var event = data.event;\n        var key = event.keyCode || event.which;\n        var shiftKey = event.shiftKey || false;\n        switch (KEY_PRESS_ACTIONS[key]) {\n            case ACTIONS_KEYS.DELETE:\n                if (this.selectedTag && this.removable) {\n                    var index = this.items.indexOf(this.selectedTag);\n                    this.onRemoveRequested(this.selectedTag, index);\n                }\n                break;\n            case ACTIONS_KEYS.SWITCH_PREV:\n                this.moveToTag(data.model, PREV);\n                break;\n            case ACTIONS_KEYS.SWITCH_NEXT:\n                this.moveToTag(data.model, NEXT);\n                break;\n            case ACTIONS_KEYS.TAB:\n                if (shiftKey) {\n                    if (this.isFirstTag(data.model)) {\n                        return;\n                    }\n                    this.moveToTag(data.model, PREV);\n                }\n                else {\n                    if (this.isLastTag(data.model) && (this.disable || this.maxItemsReached)) {\n                        return;\n                    }\n                    this.moveToTag(data.model, NEXT);\n                }\n                break;\n            default:\n                return;\n        }\n        event.preventDefault();\n    };\n    TagInputComponent.prototype.onFormSubmit = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a_1;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        _b.trys.push([0, 2, , 3]);\n                        return [4 /*yield*/, this.onAddingRequested(false, this.formValue)];\n                    case 1:\n                        _b.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        _a_1 = _b.sent();\n                        return [2 /*return*/];\n                    case 3: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    TagInputComponent.prototype.setInputValue = function (value, emitEvent) {\n        if (emitEvent === void 0) { emitEvent = true; }\n        var control = this.getControl();\n        control.setValue(value, { emitEvent: emitEvent });\n    };\n    TagInputComponent.prototype.getControl = function () {\n        return (this.inputForm.value);\n    };\n    TagInputComponent.prototype.focus = function (applyFocus, displayAutocomplete) {\n        if (applyFocus === void 0) { applyFocus = false; }\n        if (displayAutocomplete === void 0) { displayAutocomplete = false; }\n        if (this.dragProvider.getState('dragging')) {\n            return;\n        }\n        this.selectItem(undefined, false);\n        if (applyFocus) {\n            this.inputForm.focus();\n            this.onFocus.emit(this.formValue);\n        }\n    };\n    TagInputComponent.prototype.blur = function () {\n        this.onTouched();\n        this.onBlur.emit(this.formValue);\n    };\n    TagInputComponent.prototype.hasErrors = function () {\n        return this.inputForm && this.inputForm.hasErrors();\n    };\n    TagInputComponent.prototype.isInputFocused = function () {\n        return this.inputForm && this.inputForm.isInputFocused();\n    };\n    TagInputComponent.prototype.hasCustomTemplate = function () {\n        var template = this.templates ? this.templates.first : undefined;\n        var menuTemplate = this.dropdown && this.dropdown.templates ?\n            this.dropdown.templates.first : undefined;\n        return Boolean(template && template !== menuTemplate);\n    };\n    Object.defineProperty(TagInputComponent.prototype, \"maxItemsReached\", {\n        get: function () {\n            return this.maxItems !== undefined &&\n                this.items.length >= this.maxItems;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(TagInputComponent.prototype, \"formValue\", {\n        get: function () {\n            var form = this.inputForm.value;\n            return form ? form.value : '';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputComponent.prototype.onDragStarted = function (event, tag, index) {\n        event.stopPropagation();\n        var item = ({ zone: this.dragZone, tag: tag, index: index });\n        this.dragProvider.setSender(this);\n        this.dragProvider.setDraggedItem(event, item);\n        this.dragProvider.setState({ dragging: true, index: index });\n    };\n    TagInputComponent.prototype.onDragOver = function (event, index) {\n        this.dragProvider.setState({ dropping: true });\n        this.dragProvider.setReceiver(this);\n        event.preventDefault();\n    };\n    TagInputComponent.prototype.onTagDropped = function (event, index) {\n        var item = this.dragProvider.getDraggedItem(event);\n        if (!item || item.zone !== this.dragZone) {\n            return;\n        }\n        this.dragProvider.onTagDropped(item.tag, item.index, index);\n        event.preventDefault();\n        event.stopPropagation();\n    };\n    TagInputComponent.prototype.isDropping = function () {\n        var isReceiver = this.dragProvider.receiver === this;\n        var isDropping = this.dragProvider.getState('dropping');\n        return Boolean(isReceiver && isDropping);\n    };\n    TagInputComponent.prototype.onTagBlurred = function (changedElement, index) {\n        this.items[index] = changedElement;\n        this.blur();\n    };\n    TagInputComponent.prototype.trackBy = function (index, item) {\n        return item[this.identifyBy];\n    };\n    TagInputComponent.prototype.updateEditedTag = function (_b) {\n        var tag = _b.tag, index = _b.index;\n        this.onTagEdited.emit(tag);\n    };\n    TagInputComponent.prototype.moveToTag = function (item, direction) {\n        var isLast = this.isLastTag(item);\n        var isFirst = this.isFirstTag(item);\n        var stopSwitch = (direction === NEXT && isLast) ||\n            (direction === PREV && isFirst);\n        if (stopSwitch) {\n            this.focus(true);\n            return;\n        }\n        var offset = direction === NEXT ? 1 : -1;\n        var index = this.getTagIndex(item) + offset;\n        var tag = this.getTagAtIndex(index);\n        return tag.select.call(tag);\n    };\n    TagInputComponent.prototype.isFirstTag = function (item) {\n        return this.tags.first.model === item;\n    };\n    TagInputComponent.prototype.isLastTag = function (item) {\n        return this.tags.last.model === item;\n    };\n    TagInputComponent.prototype.getTagIndex = function (item) {\n        var tags = this.tags.toArray();\n        return tags.findIndex(function (tag) { return tag.model === item; });\n    };\n    TagInputComponent.prototype.getTagAtIndex = function (index) {\n        var tags = this.tags.toArray();\n        return tags[index];\n    };\n    TagInputComponent.prototype.removeItem = function (tag, index) {\n        this.items = this.getItemsWithout(index);\n        if (this.selectedTag === tag) {\n            this.selectItem(undefined, false);\n        }\n        this.focus(true, false);\n        this.onRemove.emit(tag);\n    };\n    TagInputComponent.prototype.addItem = function (fromAutocomplete, item, index, giveupFocus) {\n        var _this = this;\n        if (fromAutocomplete === void 0) { fromAutocomplete = false; }\n        var display = this.getItemDisplay(item);\n        var tag = this.createTag(item);\n        if (fromAutocomplete) {\n            this.setInputValue(this.getItemValue(item, true));\n        }\n        return new Promise(function (resolve, reject) {\n            var reset = function () {\n                _this.setInputValue('');\n                if (giveupFocus) {\n                    _this.focus(false, false);\n                }\n                else {\n                    _this.focus(true, false);\n                }\n                resolve(display);\n            };\n            var appendItem = function () {\n                _this.appendTag(tag, index);\n                _this.onAdd.emit(tag);\n                if (!_this.dropdown) {\n                    return;\n                }\n                _this.dropdown.hide();\n                if (_this.dropdown.showDropdownIfEmpty) {\n                    _this.dropdown.show();\n                }\n            };\n            var status = _this.inputForm.form.status;\n            var isTagValid = _this.isTagValid(tag, fromAutocomplete);\n            var onValidationError = function () {\n                _this.onValidationError.emit(tag);\n                return reject();\n            };\n            if (status === 'VALID' && isTagValid) {\n                appendItem();\n                return reset();\n            }\n            if (status === 'INVALID' || !isTagValid) {\n                reset();\n                return onValidationError();\n            }\n            if (status === 'PENDING') {\n                var statusUpdate$ = _this.inputForm.form.statusChanges;\n                return statusUpdate$\n                    .pipe(Object(operators[\"filter\"])(function (statusUpdate) { return statusUpdate !== 'PENDING'; }), Object(operators[\"first\"])())\n                    .subscribe(function (statusUpdate) {\n                    if (statusUpdate === 'VALID' && isTagValid) {\n                        appendItem();\n                        resolve();\n                    }\n                    else {\n                        onValidationError();\n                    }\n                });\n            }\n        });\n    };\n    TagInputComponent.prototype.setupSeparatorKeysListener = function () {\n        var _this = this;\n        var useSeparatorKeys = this.separatorKeyCodes.length > 0 || this.separatorKeys.length > 0;\n        var listener = function ($event) {\n            var hasKeyCode = _this.separatorKeyCodes.indexOf($event.keyCode) >= 0;\n            var hasKey = _this.separatorKeys.indexOf($event.key) >= 0;\n            var isIMEProcessing = $event.keyCode === 229;\n            if (hasKeyCode || (hasKey && !isIMEProcessing)) {\n                $event.preventDefault();\n                _this.onAddingRequested(false, _this.formValue)\n                    .catch(function () { });\n            }\n        };\n        listen.call(this, KEYDOWN, listener, useSeparatorKeys);\n    };\n    TagInputComponent.prototype.setUpKeypressListeners = function () {\n        var _this = this;\n        var listener = function ($event) {\n            var isCorrectKey = $event.keyCode === 37 || $event.keyCode === 8;\n            if (isCorrectKey &&\n                !_this.formValue &&\n                _this.items.length) {\n                _this.tags.last.select.call(_this.tags.last);\n            }\n        };\n        listen.call(this, KEYDOWN, listener);\n    };\n    TagInputComponent.prototype.setUpInputKeydownListeners = function () {\n        var _this = this;\n        this.inputForm.onKeydown.subscribe(function (event) {\n            _this.fireEvents('keydown', event);\n            if (event.key === 'Backspace' && _this.formValue.trim() === '') {\n                event.preventDefault();\n            }\n        });\n    };\n    TagInputComponent.prototype.setUpOnPasteListener = function () {\n        var _this = this;\n        var input = this.inputForm.input.nativeElement;\n        this.renderer.listen(input, 'paste', function (event) {\n            _this.onPasteCallback(event);\n            event.preventDefault();\n            return true;\n        });\n    };\n    TagInputComponent.prototype.setUpTextChangeSubscriber = function () {\n        var _this = this;\n        this.inputForm.form\n            .valueChanges\n            .pipe(Object(operators[\"debounceTime\"])(this.onTextChangeDebounce))\n            .subscribe(function (value) {\n            _this.onTextChange.emit(value.item);\n        });\n    };\n    TagInputComponent.prototype.setUpOnBlurSubscriber = function () {\n        var _this = this;\n        var filterFn = function () {\n            var isVisible = _this.dropdown && _this.dropdown.isVisible;\n            return !isVisible && !!_this.formValue;\n        };\n        this.inputForm\n            .onBlur\n            .pipe(Object(operators[\"debounceTime\"])(100), Object(operators[\"filter\"])(filterFn))\n            .subscribe(function () {\n            var reset = function () { return _this.setInputValue(''); };\n            if (_this.addOnBlur) {\n                return _this\n                    .onAddingRequested(false, _this.formValue, undefined, true)\n                    .then(reset)\n                    .catch(reset);\n            }\n            reset();\n        });\n    };\n    TagInputComponent.prototype.findDupe = function (tag, isFromAutocomplete) {\n        var _this = this;\n        var identifyBy = isFromAutocomplete ? this.dropdown.identifyBy : this.identifyBy;\n        var id = tag[identifyBy];\n        return this.items.find(function (item) { return _this.getItemValue(item) === id; });\n    };\n    TagInputComponent.prototype.setAnimationMetadata = function () {\n        this.animationMetadata = {\n            value: 'in',\n            params: Object.assign({}, this.animationDuration)\n        };\n    };\n    return TagInputComponent;\n}(TagInputAccessor));\nngx_chips_TagInputComponent.decorators = [\n    { type: core_es5[\"Component\"], args: [{\n                selector: 'tag-input',\n                providers: [CUSTOM_ACCESSOR],\n                styles: [\".dark tag:focus{-webkit-box-shadow:0 0 0 1px #323232;box-shadow:0 0 0 1px #323232}.ng2-tag-input.bootstrap3-info{background-color:#fff;display:inline-block;color:#555;vertical-align:middle;max-width:100%;height:42px;line-height:44px}.ng2-tag-input.bootstrap3-info input{border:none;-webkit-box-shadow:none;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder{color:#777;opacity:1}.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info input:focus{border:none;-webkit-box-shadow:none;box-shadow:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.4);box-shadow:inset 0 1px 1px rgba(0,0,0,.4);border:1px solid #ccc}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{-webkit-box-shadow:inset 0 1px 1px #d9534f;box-shadow:inset 0 1px 1px #d9534f}.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;-webkit-transition:all .25s;transition:all .25s;padding:.25rem 0;min-height:32px;cursor:text;border-bottom:2px solid #efefef}.ng2-tag-input:focus{outline:0}.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #2196f3}.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #f44336}.ng2-tag-input.ng2-tag-input--loading{border:none}.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.ng2-tag-input form{margin:.1em 0}.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.minimal.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:1px solid transparent}.minimal.ng2-tag-input:focus{outline:0}.minimal.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.minimal.ng2-tag-input.ng2-tag-input--loading{border:none}.minimal.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.minimal.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.dark.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #444}.dark.ng2-tag-input:focus{outline:0}.dark.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.dark.ng2-tag-input.ng2-tag-input--loading{border:none}.dark.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.dark.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #efefef}.bootstrap.ng2-tag-input:focus{outline:0}.bootstrap.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #0275d8}.bootstrap.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #d9534f}.bootstrap.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap3-info.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:4px;cursor:text;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-radius:4px}.bootstrap3-info.ng2-tag-input:focus{outline:0}.bootstrap3-info.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d9534f}.bootstrap3-info.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap3-info.ng2-tag-input form{margin:.1em 0}.bootstrap3-info.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.error-message{font-size:.8em;color:#f44336;margin:.5em 0 0}.bootstrap .error-message{color:#d9534f}.progress-bar,.progress-bar:before{height:2px;width:100%;margin:0}.progress-bar{background-color:#2196f3;display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;bottom:0}.progress-bar:before{background-color:#82c4f8;content:'';-webkit-animation:2s cubic-bezier(.4,0,.2,1) infinite running-progress;animation:2s cubic-bezier(.4,0,.2,1) infinite running-progress}@-webkit-keyframes running-progress{0%{margin-left:0;margin-right:100%}50%{margin-left:25%;margin-right:0}100%{margin-left:100%;margin-right:0}}@keyframes running-progress{0%{margin-left:0;margin-right:100%}50%{margin-left:25%;margin-right:0}100%{margin-left:100%;margin-right:0}}tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;font-family:Roboto,\\\"Helvetica Neue\\\",sans-serif;font-weight:400;font-size:1em;letter-spacing:.05rem;color:#444;border-radius:16px;-webkit-transition:all .3s;transition:all .3s;margin:.1rem .3rem .1rem 0;padding:.08rem .45rem;height:32px;line-height:34px;background:#efefef;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}tag:not(.readonly):not(.tag--editing):focus{background:#2196f3;color:#fff;-webkit-box-shadow:0 2px 3px 1px #d4d1d1;box-shadow:0 2px 3px 1px #d4d1d1}tag:not(.readonly):not(.tag--editing):active{background:#0d8aee;color:#fff;-webkit-box-shadow:0 2px 3px 1px #d4d1d1;box-shadow:0 2px 3px 1px #d4d1d1}tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#e2e2e2;color:initial;-webkit-box-shadow:0 2px 3px 1px #d4d1d1;box-shadow:0 2px 3px 1px #d4d1d1}tag.readonly{cursor:default}tag.readonly:focus,tag:focus{outline:0}tag.tag--editing{background-color:#fff;border:1px solid #ccc;cursor:text}.minimal tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;border-radius:0;background:#f9f9f9;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}.minimal tag:not(.readonly):not(.tag--editing):active,.minimal tag:not(.readonly):not(.tag--editing):focus{background:#d0d0d0;color:initial}.minimal tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#ececec}.minimal tag.readonly{cursor:default}.minimal tag.readonly:focus,.minimal tag:focus{outline:0}.minimal tag.tag--editing{cursor:text}.dark tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;color:#f9f9f9;border-radius:3px;background:#444;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}.dark tag:not(.readonly):not(.tag--editing):focus{background:#efefef;color:#444}.dark tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#2b2b2b;color:#f9f9f9}.dark tag.readonly{cursor:default}.dark tag.readonly:focus,.dark tag:focus{outline:0}.dark tag.tag--editing{cursor:text}.bootstrap tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;color:#f9f9f9;border-radius:.25rem;background:#0275d8;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}.bootstrap tag:not(.readonly):not(.tag--editing):active,.bootstrap tag:not(.readonly):not(.tag--editing):focus{background:#025aa5}.bootstrap tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#0267bf;color:#f9f9f9}.bootstrap tag.readonly{cursor:default}.bootstrap tag.readonly:focus,.bootstrap tag:focus{outline:0}.bootstrap tag.tag--editing{cursor:text}.bootstrap3-info tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;font-family:inherit;font-weight:400;font-size:95%;color:#fff;border-radius:.25em;background:#5bc0de;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative;padding:.25em .6em;text-align:center;white-space:nowrap}.bootstrap3-info tag:not(.readonly):not(.tag--editing):active,.bootstrap3-info tag:not(.readonly):not(.tag--editing):focus{background:#28a1c5}.bootstrap3-info tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#46b8da;color:#fff}.bootstrap3-info tag.readonly{cursor:default}.bootstrap3-info tag.readonly:focus,.bootstrap3-info tag:focus{outline:0}.bootstrap3-info tag.tag--editing{cursor:text}:host{display:block}\"],\n                template: \"<!-- CONTAINER -->\\n\\n<div ngClass=\\\"ng2-tag-input {{ theme || '' }}\\\"\\n     (click)=\\\"focus(true, false)\\\"\\n     [attr.tabindex]=\\\"-1\\\"\\n\\n     (drop)=\\\"dragZone ? onTagDropped($event, undefined) : undefined\\\"\\n     (dragenter)=\\\"dragZone ? onDragOver($event) : undefined\\\"\\n     (dragover)=\\\"dragZone ? onDragOver($event) : undefined\\\"\\n     (dragend)=\\\"dragZone ? dragProvider.onDragEnd() : undefined\\\"\\n\\n     [class.ng2-tag-input--dropping]=\\\"isDropping()\\\"\\n     [class.ng2-tag-input--disabled]=\\\"disable\\\"\\n     [class.ng2-tag-input--loading]=\\\"isLoading\\\"\\n     [class.ng2-tag-input--invalid]=\\\"hasErrors()\\\"\\n     [class.ng2-tag-input--focused]=\\\"isInputFocused()\\\">\\n\\n    <!-- TAGS -->\\n    <div class=\\\"ng2-tags-container\\\">\\n        <tag *ngFor=\\\"let item of items; let i = index; trackBy: trackBy\\\"\\n\\n             (onSelect)=\\\"selectItem(item)\\\"\\n             (onRemove)=\\\"onRemoveRequested(item, i)\\\"\\n             (onKeyDown)=\\\"handleKeydown($event)\\\"\\n             (onTagEdited)=\\\"updateEditedTag($event)\\\"\\n             (onBlur)=\\\"onTagBlurred($event, i)\\\"\\n             draggable=\\\"{{ editable }}\\\"\\n\\n             (dragstart)=\\\"dragZone ? onDragStarted($event, item, i) : undefined\\\"\\n             (drop)=\\\"dragZone ? onTagDropped($event, i) : undefined\\\"\\n             (dragenter)=\\\"dragZone ? onDragOver($event) : undefined\\\"\\n             (dragover)=\\\"dragZone ? onDragOver($event, i) : undefined\\\"\\n             (dragleave)=\\\"dragZone ? dragProvider.onDragEnd() : undefined\\\"\\n\\n             [canAddTag]=\\\"isTagValid\\\"\\n             [attr.tabindex]=\\\"0\\\"\\n             [disabled]=\\\"disable\\\"\\n             [@animation]=\\\"animationMetadata\\\"\\n             [hasRipple]=\\\"ripple\\\"\\n             [index]=\\\"i\\\"\\n             [removable]=\\\"removable\\\"\\n             [editable]=\\\"editable\\\"\\n             [displayBy]=\\\"displayBy\\\"\\n             [identifyBy]=\\\"identifyBy\\\"\\n             [template]=\\\"!!hasCustomTemplate() ? templates.first : undefined\\\"\\n             [draggable]=\\\"dragZone\\\"\\n             [model]=\\\"item\\\">\\n        </tag>\\n\\n        <tag-input-form\\n            (onSubmit)=\\\"onFormSubmit()\\\"\\n            (onBlur)=\\\"blur()\\\"\\n            (click)=\\\"dropdown ? dropdown.show() : undefined\\\"\\n            (onKeydown)=\\\"fireEvents('keydown', $event)\\\"\\n            (onKeyup)=\\\"fireEvents('keyup', $event)\\\"\\n\\n            [(inputText)]=\\\"inputText\\\"\\n            [disabled]=\\\"disable\\\"\\n            [validators]=\\\"validators\\\"\\n            [asyncValidators]=\\\"asyncValidators\\\"\\n            [hidden]=\\\"maxItemsReached\\\"\\n            [placeholder]=\\\"items.length ? placeholder : secondaryPlaceholder\\\"\\n            [inputClass]=\\\"inputClass\\\"\\n            [inputId]=\\\"inputId\\\"\\n            [tabindex]=\\\"tabindex\\\">\\n        </tag-input-form>\\n    </div>\\n\\n    <div class=\\\"progress-bar\\\" *ngIf=\\\"isProgressBarVisible$ | async\\\"></div>\\n</div>\\n\\n<!-- ERRORS -->\\n<div *ngIf=\\\"hasErrors()\\\" class=\\\"error-messages {{ theme || '' }}\\\">\\n    <p *ngFor=\\\"let error of errors\\\" class=\\\"error-message\\\">\\n        <span>{{ error }}</span>\\n    </p>\\n</div>\\n\\n<ng-content></ng-content>\\n\",\n                animations: animations\n            },] },\n];\nngx_chips_TagInputComponent.ctorParameters = function () { return [\n    { type: core_es5[\"Renderer2\"], },\n    { type: DragProvider, },\n]; };\nngx_chips_TagInputComponent.propDecorators = {\n    \"separatorKeys\": [{ type: core_es5[\"Input\"] },],\n    \"separatorKeyCodes\": [{ type: core_es5[\"Input\"] },],\n    \"placeholder\": [{ type: core_es5[\"Input\"] },],\n    \"secondaryPlaceholder\": [{ type: core_es5[\"Input\"] },],\n    \"maxItems\": [{ type: core_es5[\"Input\"] },],\n    \"validators\": [{ type: core_es5[\"Input\"] },],\n    \"asyncValidators\": [{ type: core_es5[\"Input\"] },],\n    \"onlyFromAutocomplete\": [{ type: core_es5[\"Input\"] },],\n    \"errorMessages\": [{ type: core_es5[\"Input\"] },],\n    \"theme\": [{ type: core_es5[\"Input\"] },],\n    \"onTextChangeDebounce\": [{ type: core_es5[\"Input\"] },],\n    \"inputId\": [{ type: core_es5[\"Input\"] },],\n    \"inputClass\": [{ type: core_es5[\"Input\"] },],\n    \"clearOnBlur\": [{ type: core_es5[\"Input\"] },],\n    \"hideForm\": [{ type: core_es5[\"Input\"] },],\n    \"addOnBlur\": [{ type: core_es5[\"Input\"] },],\n    \"addOnPaste\": [{ type: core_es5[\"Input\"] },],\n    \"pasteSplitPattern\": [{ type: core_es5[\"Input\"] },],\n    \"blinkIfDupe\": [{ type: core_es5[\"Input\"] },],\n    \"removable\": [{ type: core_es5[\"Input\"] },],\n    \"editable\": [{ type: core_es5[\"Input\"] },],\n    \"allowDupes\": [{ type: core_es5[\"Input\"] },],\n    \"modelAsStrings\": [{ type: core_es5[\"Input\"] },],\n    \"trimTags\": [{ type: core_es5[\"Input\"] },],\n    \"inputText\": [{ type: core_es5[\"Input\"] },],\n    \"ripple\": [{ type: core_es5[\"Input\"] },],\n    \"tabindex\": [{ type: core_es5[\"Input\"] },],\n    \"disable\": [{ type: core_es5[\"Input\"] },],\n    \"dragZone\": [{ type: core_es5[\"Input\"] },],\n    \"onRemoving\": [{ type: core_es5[\"Input\"] },],\n    \"onAdding\": [{ type: core_es5[\"Input\"] },],\n    \"animationDuration\": [{ type: core_es5[\"Input\"] },],\n    \"onAdd\": [{ type: core_es5[\"Output\"] },],\n    \"onRemove\": [{ type: core_es5[\"Output\"] },],\n    \"onSelect\": [{ type: core_es5[\"Output\"] },],\n    \"onFocus\": [{ type: core_es5[\"Output\"] },],\n    \"onBlur\": [{ type: core_es5[\"Output\"] },],\n    \"onTextChange\": [{ type: core_es5[\"Output\"] },],\n    \"onPaste\": [{ type: core_es5[\"Output\"] },],\n    \"onValidationError\": [{ type: core_es5[\"Output\"] },],\n    \"onTagEdited\": [{ type: core_es5[\"Output\"] },],\n    \"dropdown\": [{ type: core_es5[\"ContentChild\"], args: [ngx_chips_TagInputDropdown,] },],\n    \"templates\": [{ type: core_es5[\"ContentChildren\"], args: [core_es5[\"TemplateRef\"], { descendants: false },] },],\n    \"inputForm\": [{ type: core_es5[\"ViewChild\"], args: [ngx_chips_TagInputForm,] },],\n    \"tags\": [{ type: core_es5[\"ViewChildren\"], args: [ngx_chips_TagComponent,] },],\n    \"inputTextChange\": [{ type: core_es5[\"Output\"] },],\n    \"tabindexAttr\": [{ type: core_es5[\"HostBinding\"], args: ['attr.tabindex',] },],\n};\nvar DeleteIconComponent = /** @class */ (function () {\n    function DeleteIconComponent() {\n    }\n    return DeleteIconComponent;\n}());\nDeleteIconComponent.decorators = [\n    { type: core_es5[\"Component\"], args: [{\n                selector: 'delete-icon',\n                template: \"<span>\\n    <svg height=\\\"16px\\\" viewBox=\\\"0 0 32 32\\\" width=\\\"16px\\\">\\n        <path d=\\\"M17.459,16.014l8.239-8.194c0.395-0.391,0.395-1.024,0-1.414c-0.394-0.391-1.034-0.391-1.428,0  l-8.232,8.187L7.73,6.284c-0.394-0.395-1.034-0.395-1.428,0c-0.394,0.396-0.394,1.037,0,1.432l8.302,8.303l-8.332,8.286  c-0.394,0.391-0.394,1.024,0,1.414c0.394,0.391,1.034,0.391,1.428,0l8.325-8.279l8.275,8.276c0.394,0.395,1.034,0.395,1.428,0  c0.394-0.396,0.394-1.037,0-1.432L17.459,16.014z\\\"\\n              fill=\\\"#121313\\\" />\\n    </svg>\\n</span>\\n\",\n                styles: [\".dark tag:focus{-webkit-box-shadow:0 0 0 1px #323232;box-shadow:0 0 0 1px #323232}.ng2-tag-input.bootstrap3-info{background-color:#fff;display:inline-block;color:#555;vertical-align:middle;max-width:100%;height:42px;line-height:44px}.ng2-tag-input.bootstrap3-info input{border:none;-webkit-box-shadow:none;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder{color:#777;opacity:1}.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info input:focus{border:none;-webkit-box-shadow:none;box-shadow:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.4);box-shadow:inset 0 1px 1px rgba(0,0,0,.4);border:1px solid #ccc}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{-webkit-box-shadow:inset 0 1px 1px #d9534f;box-shadow:inset 0 1px 1px #d9534f}.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;-webkit-transition:all .25s;transition:all .25s;padding:.25rem 0;min-height:32px;cursor:text;border-bottom:2px solid #efefef}.ng2-tag-input:focus{outline:0}.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #2196f3}.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #f44336}.ng2-tag-input.ng2-tag-input--loading{border:none}.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.ng2-tag-input form{margin:.1em 0}.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.minimal.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:1px solid transparent}.minimal.ng2-tag-input:focus{outline:0}.minimal.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.minimal.ng2-tag-input.ng2-tag-input--loading{border:none}.minimal.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.minimal.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.dark.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #444}.dark.ng2-tag-input:focus{outline:0}.dark.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.dark.ng2-tag-input.ng2-tag-input--loading{border:none}.dark.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.dark.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #efefef}.bootstrap.ng2-tag-input:focus{outline:0}.bootstrap.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #0275d8}.bootstrap.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #d9534f}.bootstrap.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap3-info.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:4px;cursor:text;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-radius:4px}.bootstrap3-info.ng2-tag-input:focus{outline:0}.bootstrap3-info.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d9534f}.bootstrap3-info.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap3-info.ng2-tag-input form{margin:.1em 0}.bootstrap3-info.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.error-message{font-size:.8em;color:#f44336;margin:.5em 0 0}.bootstrap .error-message{color:#d9534f}:host(delete-icon){width:20px;height:16px;-webkit-transition:all .15s;transition:all .15s;display:inline-block;text-align:right}:host(delete-icon) path{fill:#444}:host(delete-icon) svg{vertical-align:bottom;height:34px}:host(delete-icon):hover{-webkit-transform:scale(1.5) translateY(-3px);transform:scale(1.5) translateY(-3px)}:host-context(.dark){text-align:right}:host-context(.dark) path{fill:#fff}:host-context(.dark) svg{vertical-align:bottom;height:34px}:host-context(.minimal){text-align:right}:host-context(.minimal) path{fill:#444}:host-context(.minimal) svg{vertical-align:bottom;height:34px}:host-context(.bootstrap){text-align:right}:host-context(.bootstrap) path{fill:#fff}:host-context(.bootstrap) svg{vertical-align:bottom;height:34px}:host-context(tag:active) path,:host-context(tag:focus) path{fill:#fff}:host-context(.darktag:active) path,:host-context(.darktag:focus) path{fill:#000}:host-context(.minimaltag:active) path,:host-context(.minimaltag:focus) path{fill:#000}:host-context(.bootstraptag:active) path,:host-context(.bootstraptag:focus) path{fill:#fff}:host-context(.bootstrap3-info){height:inherit}:host-context(.bootstrap3-info) path{fill:#fff}\"]\n            },] },\n];\nvar optionsProvider = new OptionsProvider();\nvar TagInputModule = /** @class */ (function () {\n    function TagInputModule() {\n    }\n    TagInputModule.withDefaults = function (options) {\n        optionsProvider.setOptions(options);\n    };\n    return TagInputModule;\n}());\nTagInputModule.decorators = [\n    { type: core_es5[\"NgModule\"], args: [{\n                imports: [\n                    common_es5[\"CommonModule\"],\n                    forms_es5[\"ReactiveFormsModule\"],\n                    forms_es5[\"FormsModule\"],\n                    ng2_material_dropdown_Ng2DropdownModule\n                ],\n                declarations: [\n                    ngx_chips_TagInputComponent,\n                    DeleteIconComponent,\n                    ngx_chips_TagInputForm,\n                    ngx_chips_TagComponent,\n                    HighlightPipe,\n                    ngx_chips_TagInputDropdown,\n                    TagRipple\n                ],\n                exports: [\n                    ngx_chips_TagInputComponent,\n                    DeleteIconComponent,\n                    ngx_chips_TagInputForm,\n                    ngx_chips_TagComponent,\n                    HighlightPipe,\n                    ngx_chips_TagInputDropdown,\n                    TagRipple\n                ],\n                providers: [\n                    DragProvider,\n                    { provide: forms_es5[\"COMPOSITION_BUFFER_MODE\"], useValue: false },\n                ]\n            },] },\n];\n\n\n//# sourceMappingURL=ngx-chips.js.map\n\n// CONCATENATED MODULE: ./src/module/analytics/component/pager/pager.component.ts\nvar pager_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar pager_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar pager_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar pager_component_PagerComponent = (function (_super) {\n    pager_component___extends(PagerComponent, _super);\n    function PagerComponent(locale, translation) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.pageChanged = new core_es5[\"EventEmitter\"]();\n        _this.lastPage = 1;\n        _this.pagesVisibleLow = 1;\n        _this.pagesVisibleHigh = 1;\n        return _this;\n    }\n    PagerComponent.prototype.ngOnChanges = function () {\n        if (!this.pagesVisibleNum || (this.pagesVisibleNum < 1)) {\n            this.pagesVisibleNum = 5;\n        }\n        this.lastPage = Math.ceil(this.totalItems / this.pageSize);\n        this.pagesVisibleLow = this.page - Math.floor(this.pagesVisibleNum / 2);\n        this.pagesVisibleHigh = this.page + Math.floor(this.pagesVisibleNum / 2);\n        if (this.pagesVisibleLow < 1) {\n            this.pagesVisibleLow = 1;\n            this.pagesVisibleHigh = Math.min(this.lastPage, this.pagesVisibleNum);\n        }\n        if (this.pagesVisibleHigh > this.lastPage) {\n            this.pagesVisibleHigh = this.lastPage;\n            this.pagesVisibleLow = Math.max(1, this.lastPage - this.pagesVisibleNum + 1);\n        }\n        this.pagesVisibleRange = new Array();\n        for (var p = this.pagesVisibleLow; p <= this.pagesVisibleHigh; p++) {\n            this.pagesVisibleRange.push(p);\n        }\n    };\n    PagerComponent.prototype.onPageChange = function (page) {\n        this.pageChanged.emit(page);\n    };\n    var _a, _b;\n    pager_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        pager_component___metadata(\"design:type\", Number)\n    ], PagerComponent.prototype, \"page\", void 0);\n    pager_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        pager_component___metadata(\"design:type\", Number)\n    ], PagerComponent.prototype, \"pageSize\", void 0);\n    pager_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        pager_component___metadata(\"design:type\", Number)\n    ], PagerComponent.prototype, \"totalItems\", void 0);\n    pager_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        pager_component___metadata(\"design:type\", Number)\n    ], PagerComponent.prototype, \"pagesVisibleNum\", void 0);\n    pager_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        pager_component___metadata(\"design:type\", Object)\n    ], PagerComponent.prototype, \"pageChanged\", void 0);\n    PagerComponent = pager_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'pager',\n            template: \"\\n\\t\\t<ul class=\\\"pagination m-t-0 m-b-10\\\">\\n\\t\\t\\t<li [ngClass]=\\\"((1 === page) ? 'disabled': '')\\\">\\n\\t\\t\\t\\t<a (click)=\\\"onPageChange(1)\\\">\\u00AB</a>\\n\\t\\t\\t</li>\\n\\t\\t\\t<li *ngFor=\\\"let pageIter of pagesVisibleRange\\\" [ngClass]=\\\"((pageIter === page) ? 'active': '')\\\">\\n\\t\\t\\t\\t<a (click)=\\\"onPageChange(pageIter)\\\">{{pageIter}}</a>\\n\\t\\t\\t</li>\\n\\t\\t\\t<li [ngClass]=\\\"((lastPage === page) ? 'disabled': '')\\\">\\n\\t\\t\\t\\t<a (click)=\\\"onPageChange(lastPage)\\\">\\u00BB</a>\\n\\t\\t\\t</li>\\n\\t\\t</ul>\",\n            styles: [\n                ':host {display:block;text-align:center;}',\n                ':host a {cursor:pointer;}'\n            ]\n        }),\n        pager_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object])\n    ], PagerComponent);\n    return PagerComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/component/pager/pager.module.ts\nvar pager_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\nvar pager_module_COMP = [\n    pager_component_PagerComponent,\n];\nvar pager_module_PagerModule = (function () {\n    function PagerModule() {\n    }\n    PagerModule = pager_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                forms_es5[\"FormsModule\"],\n            ],\n            declarations: pager_module_COMP,\n            exports: pager_module_COMP\n        })\n    ], PagerModule);\n    return PagerModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/service/analytics/media.service.ts\nvar media_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar media_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar media_service_MediaService = (function (_super) {\n    media_service___extends(MediaService, _super);\n    function MediaService() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    MediaService.prototype.getMediaMetadataList = function (searchOptions, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var params = [];\n        for (var key in searchOptions) {\n            var val = searchOptions[key];\n            if ((val !== null) && (val !== '')) {\n                params.push(key + '=' + encodeURIComponent(val));\n            }\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/media?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    MediaService.prototype.getTopViewedMediaMetadataList = function (startDate, endDate, pagingOptions, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var duration12h = 3600 * 12;\n        if (endDate.unix() - startDate.unix() >= duration12h) {\n            startDate = startDate.clone().startOf('day');\n            endDate = endDate.clone().startOf('day');\n            endDate = endDate.add(1, 'd');\n        }\n        var params = [];\n        params.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n        for (var key in pagingOptions) {\n            var val = pagingOptions[key];\n            if ((val !== null) && (val !== '')) {\n                params.push(key + '=' + encodeURIComponent(val));\n            }\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/media-top-viewed?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    MediaService.prototype.getMediaViewsHistory = function (mediaMaterialId, startDate, endDate, granularity, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var params = this.prepareTsperiodParams(startDate, endDate, granularity);\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/history?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            var viewsData = { data: [], label: 'Views' };\n            var viewsLabels = [];\n            for (var _i = 0, response_1 = response; _i < response_1.length; _i++) {\n                var rec = response_1[_i];\n                viewsData.data.push(parseFloat(rec.views));\n                viewsLabels.push(moment_default.a.unix(rec.from).toISOString());\n            }\n            resolveSource.next({ data: viewsData, labels: viewsLabels });\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    MediaService.prototype.getMediaStatsHistory = function (mediaMaterialId, startDate, endDate, granularity, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var params = this.prepareTsperiodParams(startDate, endDate, granularity);\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/history?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            var viewsData = { data: [], label: 'Views' };\n            var usersData = { data: [], label: 'Users' };\n            var viewsLabels = [];\n            var hasNotEmptyUsersStats = false;\n            var val = 0;\n            for (var _i = 0, response_2 = response; _i < response_2.length; _i++) {\n                var rec = response_2[_i];\n                viewsData.data.push(parseFloat(rec.views));\n                if ('users' in rec) {\n                    val = parseFloat(rec.users);\n                    usersData.data.push(val);\n                    if (val > 0) {\n                        hasNotEmptyUsersStats = true;\n                    }\n                }\n                else {\n                    usersData.data.push(null);\n                }\n                viewsLabels.push(moment_default.a.unix(rec.from).toISOString());\n            }\n            var series = hasNotEmptyUsersStats ? [usersData, viewsData] : [viewsData];\n            resolveSource.next({ series: series, labels: viewsLabels });\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    MediaService.prototype.getMediaStatsSummaryForRange = function (mediaMaterialId, startDate, endDate, granularityForHistory, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        startDate = startDate.clone();\n        endDate = endDate.clone();\n        if (granularityForHistory) {\n            this.alignPeriodRange(startDate, endDate, granularityForHistory);\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/history?tsrange[]=' + startDate.unix() + ',' + endDate.unix();\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            if (response && (response.length > 0)) {\n                resolveSource.next(response[0]);\n            }\n            else {\n                resolveSource.next(null);\n            }\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    MediaService.prototype.getMediaMetadata = function (mediaMetadataMaterialId, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMetadataMaterialId);\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    MediaService.prototype.getMediaEngagementRate = function (mediaMaterialId, startDate, endDate, accountId, liveStreamClockType) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        startDate = startDate.clone();\n        endDate = endDate.clone();\n        this.alignPeriodRange(startDate, endDate, 'day');\n        var params = [];\n        params.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n        if (liveStreamClockType) {\n            params.push('type=' + liveStreamClockType);\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/engagement-rate?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            var viewsData = { data: [], label: 'Engagement rate (views)' };\n            var viewsLabels = [];\n            var chartType = 'line';\n            var granularity = 'hour';\n            if (!response.views) {\n                resolveSource.next(null);\n                return;\n            }\n            if (response.meta.is_live_stream\n                && response.views_timestamps\n                && (response.views_timestamps.length > 0)\n                && (response.views_timestamps.length == response.views.length)) {\n                var rangeFrom = moment_default.a.unix(response.views_timestamps[0]);\n                var rangeTo = moment_default.a.unix(response.views_timestamps[response.views_timestamps.length - 1]);\n                chartType = 'lineTime';\n                startDate = rangeFrom;\n                endDate = rangeTo;\n                for (var pos = 0; pos < response.views.length; pos++) {\n                    viewsData.data.push(parseFloat(response.views[pos]));\n                    viewsLabels.push(moment_default.a.unix(response.views_timestamps[pos]).toISOString());\n                }\n            }\n            else {\n                var duration = response.meta.duration;\n                for (var pos = 0; pos < response.views.length; pos++) {\n                    var val = parseFloat(response.views[pos]);\n                    viewsData.data.push(val);\n                    var label = Math.floor(pos * duration / response.views.length) + 's';\n                    viewsLabels.push(label);\n                }\n            }\n            resolveSource.next({\n                data: [viewsData], labels: viewsLabels,\n                startDate: startDate, endDate: endDate,\n                chartType: chartType, granularity: granularity,\n                response: response\n            });\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    MediaService = media_service___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], MediaService);\n    return MediaService;\n}(base_service_BaseService));\n\n\n// CONCATENATED MODULE: ./src/service/analytics/album.service.ts\nvar album_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar album_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar album_service_AlbumService = (function (_super) {\n    album_service___extends(AlbumService, _super);\n    function AlbumService() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    AlbumService.prototype.getTopViewedForRange = function (range, filters, pagingOptions, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var params = this.prepareParamsForTopList(range, filters, pagingOptions);\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId.toString() + '/analytics/album/top-viewed-for-range?' + params.join('&');\n        return _super.prototype.read.call(this, url);\n    };\n    AlbumService.prototype.getTopCompletlyViewedForRange = function (range, filters, pagingOptions, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var params = this.prepareParamsForTopList(range, filters, pagingOptions);\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId.toString() + '/analytics/album/top-completly-viewed-for-range?' + params.join('&');\n        return _super.prototype.read.call(this, url);\n    };\n    AlbumService.prototype.prepareParamsForTopList = function (range, filters, pagingOptions) {\n        var r = this.initDateRange(range);\n        var params = new Array();\n        params.push('tsrange=' + r.startDate.unix().toString() + ',' + r.endDate.unix().toString());\n        params = params.concat(filters.getQueryParamsList());\n        if (pagingOptions !== null) {\n            params.push('page=' + pagingOptions.page);\n            params.push('page_size=' + pagingOptions.page_size);\n        }\n        return params;\n    };\n    AlbumService.prototype.getAlbumStatsHistory = function (collectionId, startDate, endDate, granularity, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var params = this.prepareTsperiodParams(startDate, endDate, granularity);\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/album/' + this.safeEncodeUriComponentForDjango(collectionId) + '/stats-history?' + params.join('&');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            var completeViewsData = { data: [], label: 'Album listening' };\n            var viewsData = { data: [], label: 'Songs listenings' };\n            var usersData = { data: [], label: 'Users' };\n            var commonLabels = [];\n            var hasNotEmptyUsersStats = false;\n            var val = 0;\n            for (var _i = 0, response_1 = response; _i < response_1.length; _i++) {\n                var rec = response_1[_i];\n                completeViewsData.data.push(parseFloat(rec.complete_views));\n                viewsData.data.push(parseFloat(rec.views));\n                if ('users' in rec) {\n                    val = parseFloat(rec.users);\n                    usersData.data.push(val);\n                    if (val > 0) {\n                        hasNotEmptyUsersStats = true;\n                    }\n                }\n                else {\n                    usersData.data.push(null);\n                }\n                commonLabels.push(moment_default.a.unix(rec.from).toISOString());\n            }\n            var series = hasNotEmptyUsersStats ? [usersData, viewsData, completeViewsData] : [viewsData, completeViewsData];\n            resolveSource.next({ series: series, labels: commonLabels });\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AlbumService.prototype.getAlbumStatsSummary = function (collectionId, startDate, endDate, granularityForHistory, fields, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        if (granularityForHistory) {\n            this.alignPeriodRange(startDate, endDate, granularityForHistory);\n        }\n        if (!fields) {\n            fields = ['views', 'users', 'complete_views'];\n        }\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/album/' + this.safeEncodeUriComponentForDjango(collectionId) +\n            '/stats-history?tsrange[]=' + startDate.unix() + ',' + endDate.unix() +\n            '&fields=' + fields.join(',');\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            resolveSource.next(response[0]);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    AlbumService.prototype.getAlbumItemsReport = function (collectionId, startDate, endDate, accountId) {\n        if (!accountId) {\n            accountId = this.user.accountId;\n        }\n        var r = this.initDateRange({ startDate: startDate, endDate: endDate });\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/analytics/album/' + this.safeEncodeUriComponentForDjango(collectionId) + '/items-report?tsrange='\n            + r.startDate.unix().toString() + ',' + r.endDate.unix().toString();\n        return _super.prototype.read.call(this, url);\n    };\n    AlbumService = album_service___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], AlbumService);\n    return AlbumService;\n}(base_service_BaseService));\n\nvar AlbumReportsFilters = (function () {\n    function AlbumReportsFilters() {\n    }\n    AlbumReportsFilters.prototype.getQueryParamsList = function () {\n        var result = [];\n        if ((this.text !== null) && (this.text != '')) {\n            result.push(encodeURIComponent('filter[text]') + '=' + encodeURIComponent(this.text));\n        }\n        if (this.tags && (this.tags.length > 0)) {\n            result.push(encodeURIComponent('filter[tags]') + '=' + encodeURIComponent(this.tags.join(',')));\n        }\n        return result;\n    };\n    return AlbumReportsFilters;\n}());\n\n\n// CONCATENATED MODULE: ./src/service/analytics/tag.service.ts\nvar tag_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar tag_service___assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar tag_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar tag_service_TagService = (function (_super) {\n    tag_service___extends(TagService, _super);\n    function TagService() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    TagService.prototype.findTags = function (accountId, text) {\n        return _super.prototype.read.call(this, \"accounts/\" + accountId + \"/analytics/tag?text=\" + this.safeEncodeUriComponentForDjango(text));\n    };\n    TagService.prototype.list = function (accountId, search, page, page_size) {\n        if (page === void 0) { page = null; }\n        if (page_size === void 0) { page_size = null; }\n        var args = [];\n        if (page != null && !isNaN(page))\n            args.push(\"page=\" + page);\n        if (page_size != null && !isNaN(page_size))\n            args.push(\"page_size=\" + page_size);\n        if (\"text\" in search && !!search.text)\n            args.push(\"text=\" + this.safeEncodeUriComponentForDjango(search.text));\n        if (\"ids\" in search && !!search.ids)\n            args.push(\"ids=\" + search.ids.join(','));\n        return _super.prototype.read.call(this, \"accounts/\" + accountId + \"/analytics/tag-list?\" + args.join(\"&\"))\n            .pipe(Object(operators[\"map\"])(function (tags) {\n            var prefix = !!tags && !!tags.records && tags.records.length > 0 && !!tags.records[0].tag && tags.records[0].tag.indexOf(':') > -1\n                ? tags.records[0].tag.split(':')[0]\n                : null;\n            return tag_service___assign({}, tags, { prefix: prefix });\n        }));\n    };\n    TagService.prototype.prefixes = function (accountId, page, page_size) {\n        if (page === void 0) { page = 1; }\n        if (page_size === void 0) { page_size = 10; }\n        return _super.prototype.read.call(this, \"accounts/\" + accountId + \"/analytics/tag-prefixes\")\n            .pipe(Object(operators[\"map\"])(function (tags) { return tags.map(function (t) { return ({ page: page, page_size: page_size, records: t.values, total_records: t.total, prefix: t.prefix }); }); }));\n    };\n    TagService = tag_service___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], TagService);\n    return TagService;\n}(base_service_BaseService));\n\n\n// CONCATENATED MODULE: ./src/service/analytics/existing.tag.selector.service.ts\nvar existing_tag_selector_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar existing_tag_selector_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar existing_tag_selector_service_ExistingTagSelectorService = (function () {\n    function ExistingTagSelectorService(user, tagService, translation, flashMessagesService) {\n        this.user = user;\n        this.tagService = tagService;\n        this.translation = translation;\n        this.flashMessagesService = flashMessagesService;\n        this.selectedTagsList = [];\n        this.changeDetectionEmitter = new core_es5[\"EventEmitter\"]();\n        this.loadingEmitter = new core_es5[\"EventEmitter\"]();\n        this.onTagSearch = this.search.bind(this);\n        this.onTagAdding = this.add.bind(this);\n        this.reset();\n    }\n    ExistingTagSelectorService.prototype.search = function (text) {\n        var _this = this;\n        this.loadingEmitter.emit(true);\n        return this.tagService.findTags(this.user.accountId, text)\n            .pipe(Object(operators[\"tap\"])(function (data) { return _this.tagSelectorAvailableItems = data; }), Object(operators[\"finalize\"])(function () {\n            _this.loadingEmitter.emit(false);\n            _this.changeDetectionEmitter.emit();\n        }));\n    };\n    ExistingTagSelectorService.prototype.add = function (tag) {\n        if (tag && tag.value) {\n            return Observable[\"Observable\"].of(tag);\n        }\n        if (!tag) {\n            return Observable[\"Observable\"].of(null);\n        }\n        var tagNorm = tag.toLowerCase();\n        if (this.tagSelectorAvailableItems) {\n            for (var _i = 0, _a = this.tagSelectorAvailableItems; _i < _a.length; _i++) {\n                var t = _a[_i];\n                if (t.toLowerCase() == tagNorm) {\n                    return Observable[\"Observable\"].of(t);\n                }\n            }\n        }\n        this.flashMessagesService.show(this.translation.translate('ANALYTICS_TAG_SERVICE.SELECT_EXISTING_TIP'), { cssClass: 'alert-warning', timeout: 5000 });\n        return Observable[\"Observable\"].of(null);\n    };\n    ExistingTagSelectorService.prototype.reset = function () {\n        this.selectedTagsList = [];\n    };\n    var _a, _b, _c, _d;\n    ExistingTagSelectorService = existing_tag_selector_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        existing_tag_selector_service___metadata(\"design:paramtypes\", [typeof (_a = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _a || Object, typeof (_b = typeof tag_service_TagService !== \"undefined\" && tag_service_TagService) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _c || Object, typeof (_d = typeof angular2_flash_messages[\"FlashMessagesService\"] !== \"undefined\" && angular2_flash_messages[\"FlashMessagesService\"]) === \"function\" && _d || Object])\n    ], ExistingTagSelectorService);\n    return ExistingTagSelectorService;\n}());\n\n\n// CONCATENATED MODULE: ./src/util/date.util.ts\n\nvar date_util_DateUtil = (function () {\n    function DateUtil() {\n    }\n    DateUtil.unixToDate = function (unix) { return new Date(unix * 1000); };\n    DateUtil.dateToUnix = function (date) { return Math.floor(date.getTime() / 1000); };\n    DateUtil.dmyObject = function (date) {\n        return {\n            day: DateUtil.addLeadZeroes(date.getDate().toString()),\n            month: DateUtil.addLeadZeroes((date.getMonth() + 1).toString()),\n            year: DateUtil.addLeadZeroes(date.getFullYear().toString())\n        };\n    };\n    DateUtil.unixToTimeString = function (timestamp) {\n        return moment_default.a.unix(timestamp).format('LTS');\n    };\n    DateUtil.unixToDateString = function (timestamp) {\n        return moment_default.a.unix(timestamp).format('L');\n    };\n    DateUtil.addLeadZeroes = function (str, zeroesCount) {\n        if (zeroesCount === void 0) { zeroesCount = 2; }\n        while (str.length < zeroesCount)\n            str = '0' + str;\n        return str;\n    };\n    DateUtil.unixDiffInDays = function (unix1, unix2) {\n        return Math.round((unix1 - unix2) / DateUtil.unixDay);\n    };\n    DateUtil.unixAddDays = function (unix, days) {\n        var result = new Date(unix * 1000);\n        result.setDate(result.getDate() + days);\n        return DateUtil.dateToUnix(result);\n    };\n    DateUtil.unixSubtractDays = function (unix, days) { return unix - DateUtil.daysInUnix(days); };\n    DateUtil.daysInUnix = function (days) { return (days * DateUtil.unixDay); };\n    DateUtil.weeksInUnix = function (weeks) { return ((weeks * 7) * DateUtil.unixDay); };\n    DateUtil.unixIsBetweenDates = function (unix, rangeMin, rangeMax) {\n        if (unix < DateUtil.dateToUnix(rangeMin))\n            return false;\n        if (unix > DateUtil.dateToUnix(rangeMax))\n            return false;\n        return true;\n    };\n    DateUtil.unixDayOfWeek = function (unix) {\n        var dow = DateUtil.unixToDate(unix).getDay();\n        return dow == 0 ? 7 : dow;\n    };\n    DateUtil.daysInMonth = function (year, month) { return new Date(year, month, 0).getDate(); };\n    DateUtil.setDateStartOfDay = function (date) { date.setHours(0, 0, 0, 0); return date; };\n    DateUtil.formatDuration = function (totalSeconds) {\n        if (typeof totalSeconds !== 'number') {\n            return '-';\n        }\n        totalSeconds = Math.floor(totalSeconds);\n        var hours = Math.floor(totalSeconds / 3600);\n        var minutes = Math.floor((totalSeconds % 3600) / 60);\n        var seconds = totalSeconds % 60;\n        if (hours > 0) {\n            return hours + 'h ' + minutes + 'm';\n        }\n        if (minutes > 0) {\n            return minutes + 'm ' + seconds + 's';\n        }\n        return seconds + 's';\n    };\n    DateUtil.unixDay = 86400;\n    return DateUtil;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/albums/albums.view.component.ts\nvar albums_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar albums_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar albums_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar albums_view_component_AnalyticsAlbumsView = (function (_super) {\n    albums_view_component___extends(AnalyticsAlbumsView, _super);\n    function AnalyticsAlbumsView(locale, translation, mediaAnalyticsService, albumService, tagService, user, cdr, existingTagSelector) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.albumService = albumService;\n        _this.tagService = tagService;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.existingTagSelector = existingTagSelector;\n        _this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS = 30;\n        _this.TOP_LIST_TYPE_ITEM_VIEWS = 'item_views';\n        _this.TOP_LIST_TYPE_COMPLETE_VIEWS = 'complete_views';\n        _this.selectedCollectionItemsPaging = {\n            page: 1,\n            page_size: 8,\n            items: [],\n            areUsersInItems: false\n        };\n        _this.collectionMetadataList = null;\n        _this.hasCollectionMetadataListUsersStats = false;\n        _this.collectionMetadataByCollectionId = new Map();\n        _this.collectionMetadataTotalNum = 0;\n        _this.topListPagingOptions = {\n            page: 1,\n            page_size: 16\n        };\n        _this.filters = {\n            text: null,\n        };\n        _this.topListType = _this.TOP_LIST_TYPE_ITEM_VIEWS;\n        _this.selectedCollectionMetadata = null;\n        _this.collectionItemsStats = null;\n        _this.hasUsersInCollectionItemsStats = false;\n        _this.dateUtil = date_util_DateUtil;\n        _this.existingTagSelector.changeDetectionEmitter.subscribe(function () { return _this.cdr.markForCheck(); });\n        _this.existingTagSelector.reset();\n        return _this;\n    }\n    AnalyticsAlbumsView.prototype.ngOnInit = function () {\n        this.loadData();\n    };\n    AnalyticsAlbumsView.prototype.selectMediaMetadata = function (collectionId) {\n        if (this.selectedCollectionMetadata && (this.selectedCollectionMetadata.collection_id == collectionId)) {\n            return;\n        }\n        this.selectedCollectionMetadata = this.collectionMetadataByCollectionId.get(collectionId);\n        this.loadHistoryStatsForSelectedCollection();\n        this.loadItemsStatsForSelectedCollection();\n    };\n    AnalyticsAlbumsView.prototype.loadHistoryStatsForSelectedCollection = function () {\n        var _this = this;\n        var endDate = moment_default()().startOf('day');\n        var startDate = endDate.clone().subtract(this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS, 'days');\n        var granularity = 'day';\n        this.previewHistoryStats = null;\n        this.albumService.getAlbumStatsHistory(this.selectedCollectionMetadata.collection_id, startDate, endDate, granularity)\n            .subscribe(function (data) {\n            _this.previewHistoryStats = {\n                data: data.series,\n                labels: data.labels,\n                startDate: startDate,\n                endDate: endDate,\n                chartType: 'lineTime',\n                granularity: granularity\n            };\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsAlbumsView.prototype.loadItemsStatsForSelectedCollection = function () {\n        var _this = this;\n        this.collectionItemsStats = null;\n        var endDate = moment_default()().startOf('day');\n        var startDate = endDate.clone().subtract(this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS, 'days');\n        this.selectedCollectionItemsPaging.page = 1;\n        this.selectedCollectionItemsPaging.items = [];\n        this.albumService.getAlbumItemsReport(this.selectedCollectionMetadata.collection_id, startDate, endDate)\n            .subscribe(function (data) {\n            _this.hasUsersInCollectionItemsStats = false;\n            var items = [];\n            var position = 1;\n            var watchingTime = null;\n            var avgWatchingTime = null;\n            var views = null;\n            var users = null;\n            for (var _i = 0, _a = data.stats; _i < _a.length; _i++) {\n                var rec = _a[_i];\n                views = parseFloat(rec.views);\n                watchingTime = parseFloat(rec.watching_time);\n                avgWatchingTime = (views > 0) ? watchingTime / views : null;\n                users = parseFloat(rec.users);\n                if (users > 0) {\n                    _this.hasUsersInCollectionItemsStats = true;\n                }\n                items.push({\n                    pos: position,\n                    material_id: rec.material_id,\n                    title: rec.title,\n                    duration: rec.duration,\n                    views: views,\n                    users: users,\n                    time: watchingTime,\n                    avgtime: avgWatchingTime\n                });\n                position++;\n            }\n            _this.selectedCollectionItemsPaging.items = items;\n            _this.collectionItemsStats = items.slice(0, _this.selectedCollectionItemsPaging.page_size);\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsAlbumsView.prototype.prepareDateRangeForTopLists = function () {\n        return {\n            startDate: moment_default.a.unix(this.user.accountCreatedAtTs),\n            endDate: moment_default()().startOf('hour')\n        };\n    };\n    AnalyticsAlbumsView.prototype.getPageReportFilters = function () {\n        var result = new AlbumReportsFilters();\n        result.text = this.filters.text;\n        result.tags = this.existingTagSelector.selectedTagsList;\n        return result;\n    };\n    AnalyticsAlbumsView.prototype.onTopListData = function (data) {\n        var records = [];\n        var hasUsersStats = false;\n        for (var _i = 0, _a = data.records; _i < _a.length; _i++) {\n            var mcm = _a[_i];\n            var rec = {\n                collection_id: mcm.collection.collection_id,\n                title: mcm.collection.title,\n                itemsNum: mcm.collection_items_num,\n                mediaViews: parseFloat(mcm.views),\n                collectionViews: parseFloat(mcm.complete_views),\n                collectionUsers: parseFloat(mcm.users)\n            };\n            records.push(rec);\n            if (rec.collectionUsers > 0) {\n                hasUsersStats = true;\n            }\n        }\n        this.hasCollectionMetadataListUsersStats = hasUsersStats;\n        this.collectionMetadataList = records;\n        this.collectionMetadataTotalNum = data.total_records;\n        this.collectionMetadataByCollectionId = new Map();\n        for (var _b = 0, records_1 = records; _b < records_1.length; _b++) {\n            var mm = records_1[_b];\n            this.collectionMetadataByCollectionId.set(mm.collection_id, mm);\n        }\n        this.cdr.markForCheck();\n        if ((this.selectedCollectionMetadata == null) && (this.collectionMetadataList != null) && (this.collectionMetadataList.length > 0)) {\n            this.selectMediaMetadata(this.collectionMetadataList[0].collection_id);\n        }\n    };\n    AnalyticsAlbumsView.prototype.loadData = function () {\n        var _this = this;\n        this.collectionMetadataList = null;\n        var range = this.prepareDateRangeForTopLists();\n        var filters = this.getPageReportFilters();\n        if (this.topListType == this.TOP_LIST_TYPE_ITEM_VIEWS) {\n            this.albumService.getTopViewedForRange(range, filters, this.topListPagingOptions).subscribe(function (data) {\n                _this.onTopListData(data);\n            });\n        }\n        else {\n            this.albumService.getTopCompletlyViewedForRange(range, filters, this.topListPagingOptions).subscribe(function (data) {\n                _this.onTopListData(data);\n            });\n        }\n    };\n    AnalyticsAlbumsView.prototype.isMediaMetadataSelected = function (collection_id) {\n        return collection_id && this.selectedCollectionMetadata && (this.selectedCollectionMetadata.collection_id == collection_id);\n    };\n    AnalyticsAlbumsView.prototype.onSearchKeyPress = function (e) {\n        var code = e.keyCode || e.which;\n        if (code == 13) {\n            this.topListPagingOptions.page = 1;\n            this.loadData();\n        }\n    };\n    AnalyticsAlbumsView.prototype.onColumnHeaderClick = function (selectedTopListType) {\n        this.topListType = selectedTopListType;\n        this.topListPagingOptions.page = 1;\n        this.loadData();\n    };\n    AnalyticsAlbumsView.prototype.onTopListPageChanged = function (page) {\n        this.topListPagingOptions.page = page;\n        this.loadData();\n    };\n    AnalyticsAlbumsView.prototype.onTagAdd = function (_event) {\n        this.loadData();\n    };\n    AnalyticsAlbumsView.prototype.onTagRemove = function (_event) {\n        this.loadData();\n    };\n    AnalyticsAlbumsView.prototype.onSelectedCollectionItemsListPageChanged = function (page) {\n        this.selectedCollectionItemsPaging.page = page;\n        var fromPos = (page - 1) * this.selectedCollectionItemsPaging.page_size;\n        var toPos = fromPos + this.selectedCollectionItemsPaging.page_size;\n        this.collectionItemsStats = this.selectedCollectionItemsPaging.items.slice(fromPos, toPos);\n        this.cdr.markForCheck();\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    AnalyticsAlbumsView = albums_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-albums-view',\n            template: __webpack_require__(1378),\n            viewProviders: [],\n            styles: [\n                '#albums-list th.sortable{cursor:pointer;}',\n                '#albums-list td{cursor:pointer;word-break: break-word;}',\n                ':host .chart-loader {height:200px;position:relative;}',\n                ':host .media-list-loader {height:752px;}',\n                ':host .collection-items-list-loader {height:608px;position:relative;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        albums_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _c || Object, typeof (_d = typeof album_service_AlbumService !== \"undefined\" && album_service_AlbumService) === \"function\" && _d || Object, typeof (_e = typeof tag_service_TagService !== \"undefined\" && tag_service_TagService) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object, typeof (_g = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _g || Object, typeof (_h = typeof existing_tag_selector_service_ExistingTagSelectorService !== \"undefined\" && existing_tag_selector_service_ExistingTagSelectorService) === \"function\" && _h || Object])\n    ], AnalyticsAlbumsView);\n    return AnalyticsAlbumsView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/albums/album.details.view.component.ts\nvar album_details_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar album_details_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar album_details_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar album_details_view_component_AnalyticsAlbumDetailsView = (function (_super) {\n    album_details_view_component___extends(AnalyticsAlbumDetailsView, _super);\n    function AnalyticsAlbumDetailsView(route, locale, translation, mediaAnalyticsService, albumService, user, exportService, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.route = route;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.albumService = albumService;\n        _this.user = user;\n        _this.exportService = exportService;\n        _this.cdr = cdr;\n        _this.chartTypes = ['lineTime', 'bar'];\n        _this.granularityTypes = ['all'];\n        var range = _this.user.getDateRangeSelection();\n        var endDate = range.endDate;\n        var startDate = range.startDate;\n        var granularity = 'day';\n        _this.historyStats = {\n            data: null,\n            labels: null,\n            startDate: startDate,\n            endDate: endDate,\n            chartType: 'lineTime',\n            granularity: granularity\n        };\n        _this.totalMediaViewsInRange = null;\n        _this.totalCollectionViewsInRange = null;\n        _this.totalCollectionUsersInRange = null;\n        _this.totalAvgWatchingTime = null;\n        _this.selectedMediaStats = null;\n        _this.hasUsersInCollectionItemStats = false;\n        _this.collectionItemStats = null;\n        _this.pagingOptions = {\n            page: 1,\n            page_size: 15\n        };\n        _this.dateUtil = date_util_DateUtil;\n        _this.routeSubscription = _this.route.data.subscribe(function (data) { return _this.onInitialAlbumItemsReportLoad(data.account); });\n        return _this;\n    }\n    AnalyticsAlbumDetailsView.prototype.ngOnDestroy = function () {\n        if (this.routeSubscription)\n            this.routeSubscription.unsubscribe();\n    };\n    AnalyticsAlbumDetailsView.prototype.ngOnInit = function () {\n        this.cdr.markForCheck();\n    };\n    AnalyticsAlbumDetailsView.prototype.onAlbumItemsReport = function (data) {\n        this.collectionMetadata = data.collection;\n        this.collectionId = data.collection.collection_id;\n        this.hasUsersInCollectionItemStats = false;\n        var itemStats = new Array();\n        var pos = 1;\n        for (var _i = 0, _a = data.stats; _i < _a.length; _i++) {\n            var rec = _a[_i];\n            var views = parseFloat(rec.views);\n            var users = parseFloat(rec.users);\n            var watchingTime = parseFloat(rec.watching_time);\n            var avgWatchingTime = (views > 0) ? watchingTime / views : null;\n            if (users > 0) {\n                this.hasUsersInCollectionItemStats = true;\n            }\n            itemStats.push({\n                pos: pos,\n                material_id: rec.material_id,\n                title: rec.title,\n                duration: rec.duration,\n                views: views,\n                users: users,\n                time: watchingTime,\n                avgtime: avgWatchingTime\n            });\n            pos++;\n        }\n        this.collectionItemStats = itemStats;\n        this.mediaStatsList = itemStats.slice(0, this.pagingOptions.page_size);\n        this.mediaStatsByMaterialId = new Map();\n        for (var _b = 0, _c = this.collectionItemStats; _b < _c.length; _b++) {\n            var mm = _c[_b];\n            this.mediaStatsByMaterialId.set(mm.material_id, mm);\n        }\n        this.cdr.markForCheck();\n    };\n    AnalyticsAlbumDetailsView.prototype.onInitialAlbumItemsReportLoad = function (data) {\n        this.onAlbumItemsReport(data);\n        this.loadData();\n    };\n    AnalyticsAlbumDetailsView.prototype.loadAlbumItemsReport = function () {\n        var _this = this;\n        var range = this.user.getDateRangeSelection();\n        var endDate = range.endDate;\n        var startDate = range.startDate;\n        this.albumService.getAlbumItemsReport(this.collectionId, startDate, endDate)\n            .subscribe(function (data) {\n            _this.onAlbumItemsReport(data);\n        });\n    };\n    AnalyticsAlbumDetailsView.prototype.loadData = function () {\n        var _this = this;\n        this.historyStats.data = null;\n        this.albumService.getAlbumStatsHistory(this.collectionMetadata.collection_id, this.historyStats.startDate, this.historyStats.endDate, this.historyStats.granularity).subscribe(function (data) {\n            _this.historyStats.data = data.series;\n            _this.historyStats.labels = data.labels;\n            _this.cdr.markForCheck();\n        });\n        var fieldsForSummary = ['views', 'users', 'complete_views', 'watching_time'];\n        this.albumService.getAlbumStatsSummary(this.collectionMetadata.collection_id, this.historyStats.startDate, this.historyStats.endDate, this.historyStats.granularity, fieldsForSummary).subscribe(function (data) {\n            _this.totalMediaViewsInRange = parseFloat(data.views);\n            _this.totalCollectionViewsInRange = parseFloat(data.complete_views);\n            _this.totalCollectionUsersInRange = (data.users) ? parseFloat(data.users) : null;\n            _this.totalAvgWatchingTime = (_this.totalCollectionViewsInRange > 0) ? parseFloat(data.watching_time) / _this.totalCollectionViewsInRange : null;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsAlbumDetailsView.prototype.selectMediaStats = function (materialId) {\n        if (this.selectedMediaStats && (this.selectedMediaStats.material_id == materialId)) {\n            return;\n        }\n        this.selectedMediaStats = this.mediaStatsByMaterialId.get(materialId);\n        this.loadHistoryStatsForSelectedMedia();\n    };\n    AnalyticsAlbumDetailsView.prototype.isMediaStatsSelected = function (material_id) {\n        return material_id && this.selectedMediaStats && (this.selectedMediaStats.material_id == material_id);\n    };\n    AnalyticsAlbumDetailsView.prototype.loadHistoryStatsForSelectedMedia = function () {\n        var _this = this;\n        if (!this.selectedMediaStats) {\n            return;\n        }\n        var range = this.user.getDateRangeSelection();\n        var endDate = range.endDate;\n        var startDate = range.startDate;\n        var granularity = this.historyStats ? this.historyStats.granularity : 'day';\n        this.previewHistoryStats = null;\n        this.mediaAnalyticsService.getMediaStatsHistory(this.selectedMediaStats.material_id, startDate, endDate, granularity)\n            .subscribe(function (data) {\n            _this.previewHistoryStats = {\n                data: data.series,\n                labels: data.labels,\n                startDate: startDate,\n                endDate: endDate,\n                chartType: 'lineTime',\n                granularity: granularity\n            };\n            _this.cdr.markForCheck();\n        });\n        if (this.user.isEngagementRateEnabled()) {\n            this.engagementRateStats = null;\n            this.mediaAnalyticsService.getMediaEngagementRate(this.selectedMediaStats.material_id, startDate, endDate)\n                .subscribe(function (data) {\n                _this.engagementRateStats = data;\n                if (!_this.engagementRateStats) {\n                    _this.engagementRateStats = {};\n                }\n                _this.cdr.markForCheck();\n            });\n        }\n    };\n    AnalyticsAlbumDetailsView.prototype.onGranularityChange = function (granularity) {\n        this.historyStats.granularity = granularity;\n        this.loadData();\n        this.loadHistoryStatsForSelectedMedia();\n    };\n    AnalyticsAlbumDetailsView.prototype.onChartTypeChange = function (chartType) {\n        this.historyStats.chartType = chartType;\n        this.loadData();\n    };\n    AnalyticsAlbumDetailsView.prototype.onDateRangeChanged = function (range) {\n        this.historyStats.startDate = range[0];\n        this.historyStats.endDate = range[1];\n        this.user.setDateRangeSelection(range[0].startOf('day'), range[1].startOf('day'));\n        this.loadData();\n        this.loadHistoryStatsForSelectedMedia();\n        this.loadAlbumItemsReport();\n    };\n    AnalyticsAlbumDetailsView.prototype.chartDataExportCsv = function () {\n        var data = this.exportDataToCsv();\n        var exportFileName = 'bradmax_album_' + this.collectionMetadata.collection_id + '_' + this.historyStats.startDate.format('YYYYMMDD')\n            + '_' + this.historyStats.endDate.format('YYYYMMDD') + '_by' + this.historyStats.granularity + '.csv';\n        this.exportService.exportFileFromJs(exportFileName, data);\n    };\n    AnalyticsAlbumDetailsView.prototype.exportDataToCsv = function () {\n        var linesNum = this.historyStats.labels ? this.historyStats.labels.length : 0;\n        var result = '';\n        var line = '';\n        var dateFormat = 'YYYY-MM-DD HH:mm';\n        if ((this.historyStats.granularity == 'day') || (this.historyStats.granularity == 'week')) {\n            dateFormat = 'YYYY-MM-DD';\n        }\n        else if (this.historyStats.granularity == 'month') {\n            dateFormat = 'YYYY-MM';\n        }\n        else if (this.historyStats.granularity == 'year') {\n            dateFormat = 'YYYY';\n        }\n        var columns = new Array();\n        columns.push('Date');\n        for (var _i = 0, _a = this.historyStats.data; _i < _a.length; _i++) {\n            var col = _a[_i];\n            columns.push(col.label);\n        }\n        result += (columns.join(',') + \"\\r\\n\");\n        for (var i = 0; i < linesNum; i++) {\n            line = '\"' + moment_default()(this.historyStats.labels[i]).format(dateFormat) + '\"';\n            for (var _b = 0, _c = this.historyStats.data; _b < _c.length; _b++) {\n                var col = _c[_b];\n                line += (',' + col.data[i]);\n            }\n            line += \"\\r\\n\";\n            result += line;\n        }\n        return result;\n    };\n    AnalyticsAlbumDetailsView.prototype.onPageChanged = function (page) {\n        this.pagingOptions.page = page;\n        var fromPos = (page - 1) * this.pagingOptions.page_size;\n        var toPos = fromPos + this.pagingOptions.page_size;\n        this.mediaStatsList = this.collectionItemStats.slice(fromPos, toPos);\n        this.cdr.markForCheck();\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    AnalyticsAlbumDetailsView = album_details_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-album-details-view',\n            template: __webpack_require__(1379),\n            viewProviders: [],\n            styles: [\n                ':host .chart-loader {height:300px;position:relative;}',\n                ':host .dl-horizontal dt {width:80px;}',\n                ':host .dl-horizontal dd {margin-left:90px;}',\n                ':host .widget-stats .stats-number {line-height: 65px;}',\n                '#songs-list td{cursor:pointer;word-break: break-word;}',\n                '@media (max-width:1599px){:host .hidden-xlg-below{display:none!important}}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        album_details_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _c || Object, typeof (_d = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _d || Object, typeof (_e = typeof album_service_AlbumService !== \"undefined\" && album_service_AlbumService) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object, typeof (_g = typeof export_service_ExportService !== \"undefined\" && export_service_ExportService) === \"function\" && _g || Object, typeof (_h = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _h || Object])\n    ], AnalyticsAlbumDetailsView);\n    return AnalyticsAlbumDetailsView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/albums/album.details.resolver.ts\nvar album_details_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar album_details_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar album_details_resolver_AnalyticsAlbumDetailsResolver = (function () {\n    function AnalyticsAlbumDetailsResolver(albumService, user) {\n        this.albumService = albumService;\n        this.user = user;\n        this.DEFAULT_RANDE_FOR_ITEMS_REPORT = 30;\n    }\n    AnalyticsAlbumDetailsResolver.prototype.resolve = function (route, state) {\n        var collectionId = route.params['collectionId'];\n        if (!collectionId)\n            return false;\n        if (this.user.accountId == null)\n            return false;\n        var range = this.user.getDateRangeSelection();\n        var endDate = null;\n        var startDate = null;\n        if (range != null) {\n            endDate = range.endDate;\n            startDate = range.startDate;\n        }\n        else {\n            endDate = moment_default()().startOf('day');\n            startDate = endDate.clone().subtract(this.DEFAULT_RANDE_FOR_ITEMS_REPORT, 'days');\n        }\n        return this.albumService.getAlbumItemsReport(collectionId, startDate, endDate);\n    };\n    var _a, _b;\n    AnalyticsAlbumDetailsResolver = album_details_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        album_details_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof album_service_AlbumService !== \"undefined\" && album_service_AlbumService) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object])\n    ], AnalyticsAlbumDetailsResolver);\n    return AnalyticsAlbumDetailsResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/albums/albums.module.ts\nvar albums_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar albums_module_routes = [\n    { path: '', component: albums_view_component_AnalyticsAlbumsView },\n    { path: ':collectionId', component: album_details_view_component_AnalyticsAlbumDetailsView, resolve: { account: album_details_resolver_AnalyticsAlbumDetailsResolver } },\n];\nvar albums_module_AnalyticsAlbumsModule = (function () {\n    function AnalyticsAlbumsModule() {\n    }\n    AnalyticsAlbumsModule = albums_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(albums_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule,\n                TagInputModule,\n                pager_module_PagerModule\n            ],\n            declarations: [\n                albums_view_component_AnalyticsAlbumsView,\n                album_details_view_component_AnalyticsAlbumDetailsView\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                media_service_MediaService,\n                album_service_AlbumService,\n                tag_service_TagService,\n                existing_tag_selector_service_ExistingTagSelectorService,\n            ]\n        })\n    ], AnalyticsAlbumsModule);\n    return AnalyticsAlbumsModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/content/content.view.component.ts\nvar content_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar content_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar content_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar content_view_component_AnalyticsContentView = (function (_super) {\n    content_view_component___extends(AnalyticsContentView, _super);\n    function AnalyticsContentView(locale, translation, mediaAnalyticsService, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS = 30;\n        _this.mediaMetadataList = null;\n        _this.mediaMetadataByMaterialId = new Map();\n        _this.mediaMetadataTotalNum = 0;\n        _this.searchOptions = {\n            text: null,\n            sort_by: null,\n            sort_dir: 'asc',\n            page: 1,\n            page_size: 10\n        };\n        _this.selectedMediaMetadata = null;\n        _this.dateUtil = date_util_DateUtil;\n        return _this;\n    }\n    AnalyticsContentView.prototype.ngOnInit = function () {\n        this.loadData();\n    };\n    AnalyticsContentView.prototype.selectMediaMetadata = function (materialId) {\n        if (this.selectedMediaMetadata && (this.selectedMediaMetadata.material_id == materialId)) {\n            return;\n        }\n        this.selectedMediaMetadata = this.mediaMetadataByMaterialId.get(materialId);\n        this.loadHistoryStatsForSelectedMedia();\n    };\n    AnalyticsContentView.prototype.loadHistoryStatsForSelectedMedia = function () {\n        var _this = this;\n        var endDate = moment_default()().startOf('day');\n        var startDate = endDate.clone().subtract(this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS, 'days');\n        var granularity = 'day';\n        this.previewHistoryStats = null;\n        this.mediaAnalyticsService.getMediaStatsHistory(this.selectedMediaMetadata.material_id, startDate, endDate, granularity)\n            .subscribe(function (data) {\n            _this.previewHistoryStats = {\n                data: data.series,\n                labels: data.labels,\n                startDate: startDate,\n                endDate: endDate,\n                chartType: 'lineTime',\n                granularity: granularity\n            };\n            _this.cdr.markForCheck();\n        });\n        if (this.user.isEngagementRateEnabled()) {\n            this.engagementRateStats = null;\n            this.mediaAnalyticsService.getMediaEngagementRate(this.selectedMediaMetadata.material_id, startDate, endDate)\n                .subscribe(function (data) {\n                _this.engagementRateStats = data;\n                if (!_this.engagementRateStats) {\n                    _this.engagementRateStats = {};\n                }\n                _this.cdr.markForCheck();\n            });\n        }\n    };\n    AnalyticsContentView.prototype.loadData = function () {\n        var _this = this;\n        this.mediaMetadataList = null;\n        this.mediaAnalyticsService.getMediaMetadataList(this.searchOptions).subscribe(function (data) {\n            _this.mediaMetadataList = data.records;\n            _this.mediaMetadataTotalNum = data.total_records;\n            _this.mediaMetadataByMaterialId = new Map();\n            for (var _i = 0, _a = data.records; _i < _a.length; _i++) {\n                var mm = _a[_i];\n                _this.mediaMetadataByMaterialId.set(mm.material_id, mm);\n            }\n            _this.cdr.markForCheck();\n            if ((_this.selectedMediaMetadata == null) && (_this.mediaMetadataList != null) && (_this.mediaMetadataList.length > 0)) {\n                _this.selectMediaMetadata(_this.mediaMetadataList[0].material_id);\n            }\n        });\n    };\n    AnalyticsContentView.prototype.isMediaMetadataSelected = function (material_id) {\n        return material_id && this.selectedMediaMetadata && (this.selectedMediaMetadata.material_id == material_id);\n    };\n    AnalyticsContentView.prototype.onSearchKeyPress = function (e) {\n        var code = e.keyCode || e.which;\n        if (code == 13) {\n            this.searchOptions.page = 1;\n            this.loadData();\n        }\n    };\n    AnalyticsContentView.prototype.onColumnHeaderClick = function (columnName) {\n        if (this.searchOptions.sort_by == columnName) {\n            this.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n        }\n        else {\n            this.searchOptions.sort_by = columnName;\n            this.searchOptions.sort_dir = 'asc';\n        }\n        this.searchOptions.page = 1;\n        this.loadData();\n    };\n    AnalyticsContentView.prototype.onPageChanged = function (page) {\n        this.searchOptions.page = page;\n        this.loadData();\n    };\n    var _a, _b, _c, _d, _e;\n    AnalyticsContentView = content_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-content-view',\n            template: __webpack_require__(1380),\n            viewProviders: [],\n            styles: [\n                '#content-list th{cursor:pointer;}',\n                '#content-list td{cursor:pointer;word-break: break-word;}',\n                ':host .chart-loader {height:200px;position:relative;}',\n                ':host .media-list-loader {height:300px;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        content_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _c || Object, typeof (_d = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object])\n    ], AnalyticsContentView);\n    return AnalyticsContentView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/service/analytics/pages.service.ts\nvar pages_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar pages_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar pages_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\nvar pages_service_PagesService = (function (_super) {\n    pages_service___extends(PagesService, _super);\n    function PagesService(auth, http, exception, router, urlService, user, translation) {\n        var _this = _super.call(this, auth, http, exception, router, urlService, user) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.urlService = urlService;\n        _this.user = user;\n        _this.translation = translation;\n        return _this;\n    }\n    PagesService.prototype.getReferrerHistoryForRange = function (accountId, range, path) {\n        var r = this.initDateRange(range);\n        var url = 'accounts/' +\n            accountId.toString() +\n            '/analytics/page/referer/history?tsrange[]=' +\n            r.startDate.unix().toString() + ',' + r.endDate.unix().toString() + ',' +\n            '&path=' + path;\n        return this.listOfItems(url);\n    };\n    PagesService.prototype.getReferrerHistoryForPeriod = function (accountId, period, unit, path) {\n        var params = this.prepareTsperiodParams(period.startDate, period.endDate, unit);\n        params.push('source_domain=' + encodeURIComponent(path));\n        var url = 'accounts/' +\n            accountId.toString() +\n            '/analytics/page/referer/history?' + params.join('&');\n        return this.listOfItems(url);\n    };\n    PagesService.prototype.getReferrerUsersAndViews = function (accountId, range, unit, path) {\n        var _this = this;\n        var resolveSource = new Subject[\"Subject\"]();\n        this.getReferrerHistoryForPeriod(accountId, range, unit, path)\n            .subscribe(function (data) {\n            var usersData = { data: [], label: _this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['USERS'] };\n            var usersLabels = [];\n            var viewsData = { data: [], label: _this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['VIEWS'] };\n            var viewsLabels = [];\n            for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n                var rec = data_1[_i];\n                usersData.data.push(parseFloat(rec.users));\n                viewsData.data.push(parseFloat(rec.views));\n                usersLabels.push(moment_default.a.unix(rec.from).toISOString());\n                viewsLabels.push(moment_default.a.unix(rec.from).toISOString());\n            }\n            var usersChartData = { data: usersData, labels: usersLabels };\n            var viewsChartData = { data: viewsData, labels: viewsLabels };\n            resolveSource.next([usersChartData, viewsChartData]);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PagesService.prototype.getTopSources = function (accountId, range, path, page, page_size) {\n        var r = this.initDateRange(range);\n        var url = 'accounts/' +\n            accountId.toString() +\n            '/analytics/page/referer/top-sources?tsrange=' +\n            r.startDate.unix().toString() + ',' + r.endDate.unix().toString() +\n            '&source_domain=' + path +\n            '&page=' + page.toString() +\n            '&page_size=' + page_size.toString();\n        return this.listOfItems(url);\n    };\n    PagesService.prototype.getTopSubpages = function (accountId, range, path, page, page_size) {\n        var r = this.initDateRange(range);\n        var url = 'accounts/' +\n            accountId.toString() +\n            '/analytics/page/audience/top-subpages?tsrange=' +\n            r.startDate.unix().toString() + ',' + r.endDate.unix().toString() +\n            '&path=' + path +\n            '&page=' + page.toString() +\n            '&page_size=' + page_size.toString();\n        return this.listOfItems(url);\n    };\n    PagesService.prototype.getAudienceHistoryForRange = function (accountId, range, path) {\n        var r = this.initDateRange(range);\n        var url = 'accounts/' +\n            accountId.toString() +\n            '/analytics/page/audience/history?tsrange[]=' +\n            r.startDate.unix().toString() + ',' + r.endDate.unix().toString() + ',' +\n            '&path=' + path;\n        return this.listOfItems(url);\n    };\n    PagesService.prototype.getAudienceHistoryForPeriod = function (accountId, period, unit, path) {\n        var params = this.prepareTsperiodParams(period.startDate, period.endDate, unit);\n        params.push('path=' + encodeURIComponent(path));\n        var url = 'accounts/' +\n            accountId.toString() +\n            '/analytics/page/audience/history?' + params.join('&');\n        return this.listOfItems(url);\n    };\n    PagesService.prototype.getUsersAndViews = function (accountId, range, unit, path) {\n        var _this = this;\n        var resolveSource = new Subject[\"Subject\"]();\n        this.getAudienceHistoryForPeriod(accountId, range, unit, path)\n            .subscribe(function (data) {\n            var usersData = { data: [], label: _this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['USERS'] };\n            var usersLabels = [];\n            var viewsData = { data: [], label: _this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['VIEWS'] };\n            var viewsLabels = [];\n            for (var _i = 0, data_2 = data; _i < data_2.length; _i++) {\n                var rec = data_2[_i];\n                usersData.data.push(parseFloat(rec.users));\n                viewsData.data.push(parseFloat(rec.views));\n                usersLabels.push(moment_default.a.unix(rec.from).toISOString());\n                viewsLabels.push(moment_default.a.unix(rec.from).toISOString());\n            }\n            var usersChartData = { data: usersData, labels: usersLabels };\n            var viewsChartData = { data: viewsData, labels: viewsLabels };\n            resolveSource.next([usersChartData, viewsChartData]);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PagesService.prototype.getUsersAndViewsHistoryReport = function (accountId, range, unit, filters) {\n        var _this = this;\n        var params = this.prepareTsperiodParams(range.startDate, range.endDate, unit);\n        params = params.concat(filters.getQueryParamsList());\n        var url = 'accounts/' +\n            accountId.toString() +\n            '/analytics/page/report/history?' + params.join('&');\n        var resolveSource = new Subject[\"Subject\"]();\n        this.listOfItems(url).subscribe(function (data) {\n            var usersData = { data: [], label: _this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['USERS'] };\n            var usersLabels = [];\n            var viewsData = { data: [], label: _this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['VIEWS'] };\n            var viewsLabels = [];\n            for (var _i = 0, data_3 = data; _i < data_3.length; _i++) {\n                var rec = data_3[_i];\n                usersData.data.push(parseFloat(rec.users));\n                viewsData.data.push(parseFloat(rec.views));\n                usersLabels.push(moment_default.a.unix(rec.from).toISOString());\n                viewsLabels.push(moment_default.a.unix(rec.from).toISOString());\n            }\n            var usersChartData = { data: usersData, labels: usersLabels };\n            var viewsChartData = { data: viewsData, labels: viewsLabels };\n            resolveSource.next([usersChartData, viewsChartData]);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PagesService.prototype.getUsersAndViewsSummaryReport = function (accountId, range, filters) {\n        var r = this.initDateRange(range);\n        var tsRangeParam = 'tsrange[]=' + r.startDate.unix() + ',' + r.endDate.unix();\n        var params = [tsRangeParam];\n        params = params.concat(filters.getQueryParamsList());\n        var url = 'accounts/' +\n            accountId.toString() +\n            '/analytics/page/report/history?' + params.join('&');\n        var resolveSource = new Subject[\"Subject\"]();\n        this.listOfItems(url).subscribe(function (data) {\n            var users = 0;\n            var views = 0;\n            if (data && data.length) {\n                users = parseFloat(data[0].users);\n                views = parseFloat(data[0].views);\n            }\n            resolveSource.next({\n                users: users,\n                views: views\n            });\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PagesService.prototype.getGeoReport = function (accountId, range, filters) {\n        var r = this.initDateRange(range);\n        var tsRangeParam = 'tsrange=' + r.startDate.unix() + ',' + r.endDate.unix();\n        var params = [tsRangeParam];\n        params = params.concat(filters.getQueryParamsList());\n        var url = 'accounts/' + accountId.toString() + '/analytics/page/report/geo?' + params.join('&');\n        var resolveSource = new Subject[\"Subject\"]();\n        this.listOfItems(url).subscribe(function (data) {\n            resolveSource.next(data);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PagesService.prototype.listOfCountries = function () {\n        var url = 'analytics/geo/country';\n        return this.listOfItems(url);\n    };\n    PagesService.prototype.listOfRegions = function (countryCode) {\n        var url = 'analytics/geo/country/' + countryCode + '/region';\n        return this.listOfItems(url);\n    };\n    PagesService.prototype.listOfCities = function (regionCode) {\n        var url = 'analytics/geo/region/' + regionCode + '/city';\n        return this.listOfItems(url);\n    };\n    PagesService.prototype.getDemSexReport = function (accountId, range, filters) {\n        var r = this.initDateRange(range);\n        var tsRangeParam = 'tsrange=' + r.startDate.unix() + ',' + r.endDate.unix();\n        var params = [tsRangeParam];\n        params = params.concat(filters.getQueryParamsList());\n        var url = 'accounts/' + accountId.toString() + '/analytics/page/report/dem/sex?' + params.join('&');\n        var resolveSource = new Subject[\"Subject\"]();\n        this.listOfItems(url).subscribe(function (data) {\n            resolveSource.next(data);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PagesService.prototype.getDemAgeReport = function (accountId, range, filters) {\n        var r = this.initDateRange(range);\n        var tsRangeParam = 'tsrange=' + r.startDate.unix() + ',' + r.endDate.unix();\n        var params = [tsRangeParam];\n        params = params.concat(filters.getQueryParamsList());\n        var url = 'accounts/' + accountId.toString() + '/analytics/page/report/dem/age?' + params.join('&');\n        var resolveSource = new Subject[\"Subject\"]();\n        this.listOfItems(url).subscribe(function (data) {\n            resolveSource.next(data);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PagesService.prototype.getTopViewedTagsReport = function (accountId, range, filters, tagsMaxNum) {\n        var r = this.initDateRange(range);\n        var tsRangeParam = 'tsrange=' + r.startDate.unix() + ',' + r.endDate.unix();\n        var params = [tsRangeParam];\n        params.push('page_size=' + tagsMaxNum);\n        params = params.concat(filters.getQueryParamsList());\n        var url = 'accounts/' + accountId.toString() + '/analytics/page/report/top-viewed-tags?' + params.join('&');\n        var resolveSource = new Subject[\"Subject\"]();\n        this.listOfItems(url).subscribe(function (data) {\n            resolveSource.next(data);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PagesService.prototype.listOfItems = function (url) {\n        var req = null;\n        var resolveSource = new Subject[\"Subject\"]();\n        _super.prototype.read.call(this, url, req).subscribe(function (response) {\n            if (response && response.results) {\n                var nowTs = (new Date()).getTime() / 1000.0;\n                for (var _i = 0, _a = response.results; _i < _a.length; _i++) {\n                    var entry = _a[_i];\n                    entry.loaded_at = nowTs;\n                }\n            }\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    var _a, _b, _c, _d, _e, _f, _g;\n    PagesService = pages_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        pages_service___metadata(\"design:paramtypes\", [typeof (_a = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof exception_service[\"a\" /* ExceptionService */] !== \"undefined\" && exception_service[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object, typeof (_g = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _g || Object])\n    ], PagesService);\n    return PagesService;\n}(base_service_BaseService));\n\nvar PageReportFilters = (function () {\n    function PageReportFilters() {\n    }\n    PageReportFilters.prototype.getQueryParamsList = function () {\n        var result = [];\n        if ((this.geoCountryCode !== null) && (this.geoCountryCode != '') && (typeof this.geoCountryCode !== 'undefined')) {\n            result.push(encodeURIComponent('filter[geoCountryCode]') + '=' + encodeURIComponent(this.geoCountryCode));\n        }\n        if (this.geoRegionId > 0) {\n            result.push(encodeURIComponent('filter[geoRegionId]') + '=' + this.geoRegionId);\n        }\n        if ((this.tags !== null) && (this.tags.length > 0)) {\n            result.push(encodeURIComponent('filter[tags]') + '=' + encodeURIComponent(this.tags.join(',')));\n        }\n        if (this.demSex > 0) {\n            result.push(encodeURIComponent('filter[demSex]') + '=' + this.demSex);\n        }\n        if (this.demAgeFrom !== null) {\n            result.push(encodeURIComponent('filter[demAgeFrom]') + '=' + this.demAgeFrom);\n        }\n        if (this.demAgeTo !== null) {\n            result.push(encodeURIComponent('filter[demAgeTo]') + '=' + this.demAgeTo);\n        }\n        return result;\n    };\n    return PageReportFilters;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/model/sampled-traffic.filters.ts\nvar sampled_traffic_filters___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar SampledTrafficFilters = (function (_super) {\n    sampled_traffic_filters___extends(SampledTrafficFilters, _super);\n    function SampledTrafficFilters() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.demSex = null;\n        _this.demAgeFrom = null;\n        _this.demAgeTo = null;\n        return _this;\n    }\n    SampledTrafficFilters.prototype.diff = function (other) {\n        return !other\n            ? { dateRange: true, granularity: true, geoCountryCode: true, geoRegionId: true, tags: true, }\n            : {\n                dateRange: this.dateRange.length != other.dateRange.length || this.dateRange[0] != other.dateRange[0] || this.dateRange[1] != other.dateRange[1],\n                granularity: this.granularity != other.granularity,\n                geoCountryCode: this.geoCountryCode != other.geoCountryCode,\n                geoRegionId: this.geoRegionId != other.geoRegionId,\n                tags: this.tags.length != other.tags.length || this.tags.filter(function (t) { return other.tags.indexOf(t) === -1; }).length !== 0,\n            };\n    };\n    return SampledTrafficFilters;\n}(PageReportFilters));\n\n\n// EXTERNAL MODULE: ./src/module/analytics/geo/geo.country.view.regions.fix.json\nvar geo_country_view_regions_fix = __webpack_require__(107);\nvar geo_country_view_regions_fix_default = /*#__PURE__*/__webpack_require__.n(geo_country_view_regions_fix);\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/service/google.geo.regions.fix.service.ts\nvar google_geo_regions_fix_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar google_geo_regions_fix_service_GoogleGeoRegionsFixService = (function () {\n    function GoogleGeoRegionsFixService() {\n    }\n    GoogleGeoRegionsFixService.prototype.regions = function (countryCode, data) {\n        var result = [];\n        if (countryCode in geo_country_view_regions_fix[\"reducingMappings\"]) {\n            result = this.reduceRegions(countryCode, data);\n        }\n        else if (countryCode in geo_country_view_regions_fix[\"sharingMapping\"]) {\n            result = this.sharedRegions(countryCode, data);\n        }\n        else if (countryCode in geo_country_view_regions_fix[\"skippingSet\"]) {\n            var totalViews = 0;\n            for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n                var rec = data_1[_i];\n                totalViews += parseInt(rec.views);\n            }\n            result.push([countryCode, totalViews]);\n        }\n        else {\n            for (var _a = 0, data_2 = data; _a < data_2.length; _a++) {\n                var rec = data_2[_a];\n                var regName = rec.region.subdiv_code ? rec.region.subdiv_code : rec.region.name;\n                result.push([regName, parseInt(rec.views)]);\n            }\n        }\n        result.unshift(['Region', 'Views']);\n        return result;\n    };\n    GoogleGeoRegionsFixService.prototype.sharedRegions = function (countryCode, data) {\n        var result = [];\n        for (var _i = 0, data_3 = data; _i < data_3.length; _i++) {\n            var rec = data_3[_i];\n            var codeSrc = rec.region.subdiv_code;\n            if (!(codeSrc in geo_country_view_regions_fix[\"sharingMapping\"][countryCode])) {\n                continue;\n            }\n            var codesTrg = geo_country_view_regions_fix[\"sharingMapping\"][countryCode][codeSrc];\n            for (var _a = 0, codesTrg_1 = codesTrg; _a < codesTrg_1.length; _a++) {\n                var code = codesTrg_1[_a];\n                result.push([code, Math.floor(parseInt(rec.views) / codesTrg.length)]);\n            }\n        }\n        return result;\n    };\n    GoogleGeoRegionsFixService.prototype.reduceRegions = function (countryCode, data) {\n        var m = {};\n        for (var _i = 0, data_4 = data; _i < data_4.length; _i++) {\n            var rec = data_4[_i];\n            var codeSrc = rec.region.subdiv_code;\n            var codeTrg = (codeSrc in geo_country_view_regions_fix[\"reducingMappings\"][countryCode]) ? geo_country_view_regions_fix[\"reducingMappings\"][countryCode][codeSrc] : codeSrc;\n            if (!(codeTrg in m)) {\n                m[codeTrg] = 0;\n            }\n            m[codeTrg] = m[codeTrg] + parseInt(rec.views);\n        }\n        var result = [];\n        for (var code in m) {\n            result.push([code, m[code]]);\n        }\n        return result;\n    };\n    GoogleGeoRegionsFixService = google_geo_regions_fix_service___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], GoogleGeoRegionsFixService);\n    return GoogleGeoRegionsFixService;\n}());\n\n\n// EXTERNAL MODULE: ./node_modules/rxjs/operators/map.js\nvar operators_map = __webpack_require__(87);\nvar map_default = /*#__PURE__*/__webpack_require__.n(operators_map);\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/service/sampled-traffic.api.service.ts\nvar sampled_traffic_api_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar sampled_traffic_api_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_api_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\nvar sampled_traffic_api_service_SampledTrafficApiService = (function (_super) {\n    sampled_traffic_api_service___extends(SampledTrafficApiService, _super);\n    function SampledTrafficApiService(auth, http, exception, router, urlService, user, fix) {\n        var _this = _super.call(this, auth, http, exception, router, urlService, user) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.urlService = urlService;\n        _this.user = user;\n        _this.fix = fix;\n        return _this;\n    }\n    SampledTrafficApiService.prototype.usersAndViewsHistory = function (filters) {\n        var _this = this;\n        var params = this.prepareTsperiodParams(moment_default.a.unix(filters.dateRange[0]), moment_default.a.unix(filters.dateRange[1]), filters.granularity).concat(filters.getQueryParamsList());\n        return _super.prototype.read.call(this, \"accounts/\" + this.user.accountId + \"/analytics/page/report/history?\" + params.join('&'))\n            .pipe(Object(operators_map[\"map\"])(function (response) { return _this.parseUsersAndViewsHistory(filters, response); }));\n    };\n    SampledTrafficApiService.prototype.parseUsersAndViewsHistory = function (filters, response) {\n        var usersData = { data: [], label: 'Users' };\n        var usersLabels = [];\n        var viewsData = { data: [], label: 'Views' };\n        var viewsLabels = [];\n        for (var _a = 0, response_1 = response; _a < response_1.length; _a++) {\n            var rec = response_1[_a];\n            usersData.data.push(parseFloat(rec.users));\n            viewsData.data.push(parseFloat(rec.views));\n            usersLabels.push(moment_default.a.unix(rec.from).toISOString());\n            viewsLabels.push(moment_default.a.unix(rec.from).toISOString());\n        }\n        var usersChartData = { data: usersData, labels: usersLabels };\n        var viewsChartData = { data: viewsData, labels: viewsLabels };\n        var data = [usersChartData, viewsChartData];\n        var datasets = [];\n        for (var _i = 0; _i < data.length; _i++)\n            datasets.push(data[_i].data);\n        var labels = data[0].labels;\n        var granularity = filters.granularity;\n        var startDate = moment_default.a.unix(filters.dateRange[0]);\n        var endDate = moment_default.a.unix(filters.dateRange[1]);\n        return { granularity: granularity, startDate: startDate, endDate: endDate, data: data, labels: labels, datasets: datasets };\n    };\n    SampledTrafficApiService.prototype.usersAndViewsSummary = function (filters) {\n        var _this = this;\n        var params = [\"tsrange[]=\" + filters.dateRange[0] + \",\" + filters.dateRange[1]].concat(filters.getQueryParamsList());\n        return _super.prototype.read.call(this, \"accounts/\" + this.user.accountId + \"/analytics/page/report/history?\" + params.join('&'))\n            .pipe(Object(operators_map[\"map\"])(function (response) { return _this.parseUsersAndViewsSummary(response); }));\n    };\n    SampledTrafficApiService.prototype.parseUsersAndViewsSummary = function (response) {\n        if (response && response.length) {\n            var users = parseFloat(response[0].users);\n            var views = parseFloat(response[0].views);\n            return { users: users, views: views, viewsPerUser: views / users };\n        }\n        return { users: 0, views: 0, viewsPerUser: 0 };\n    };\n    SampledTrafficApiService.prototype.geoReport = function (filters) {\n        var _this = this;\n        var range = this.initDateRange(this.user.getDateRangeSelection());\n        var params = [\"tsrange=\" + range.startDate.unix() + \",\" + range.endDate.unix()].concat(filters.getQueryParamsList());\n        return _super.prototype.read.call(this, \"accounts/\" + this.user.accountId + \"/analytics/page/report/geo?\" + params.join('&'))\n            .pipe(Object(operators_map[\"map\"])(function (response) { return _this.parseGeoRecord(response, filters); }));\n    };\n    SampledTrafficApiService.prototype.parseGeoRecord = function (response, filters) {\n        var summary_users = parseFloat(response.summary.users);\n        var summary_views = parseFloat(response.summary.views);\n        var viewsPerUser = summary_users > 0 ? summary_views / summary_users : null;\n        var summary = { users: summary_users, views: summary_views, viewsPerUser: viewsPerUser };\n        var mapItems = [[\"Country\", \"Views\"]];\n        if (response.countries) {\n            var listItems = [];\n            for (var _a = 0, _b = response.countries; _a < _b.length; _a++) {\n                var country = _b[_a];\n                var country_views = parseFloat(country.views);\n                var country_users = parseFloat(country.users);\n                mapItems.push([country.country.country_code, country_views]);\n                listItems.push({\n                    index: listItems.length + 1,\n                    label: country.country.name,\n                    views: country_views,\n                    users: country_users,\n                    countryCode: country.country.country_code,\n                    viewsShare: (country_views / summary_views) * 100,\n                    usersShare: (country_users / summary_users) * 100,\n                });\n            }\n            return { resolution: 'countries', region: null, summary: summary, mapItems: mapItems, listItems: listItems };\n        }\n        if (response.regions) {\n            var listItems = [];\n            for (var _c = 0, _d = response.regions; _c < _d.length; _c++) {\n                var region = _d[_c];\n                var region_views = parseFloat(region.views);\n                var region_users = parseFloat(region.users);\n                listItems.push({\n                    index: listItems.length + 1,\n                    label: region.region.name,\n                    views: region_views,\n                    users: region_users,\n                    countryCode: filters.geoCountryCode,\n                    regionId: region.region.id,\n                    subdivCode: region.region.subdiv_code ? region.region.subdiv_code : region.region.name,\n                    viewsShare: (region_views / summary_views) * 100,\n                    usersShare: (region_users / summary_users) * 100,\n                });\n            }\n            return { resolution: 'provinces', region: filters.geoCountryCode, summary: summary, mapItems: this.fix.regions(filters.geoCountryCode, response.regions), listItems: listItems };\n        }\n        return { resolution: 'countries', region: null, summary: summary, mapItems: mapItems, listItems: [] };\n    };\n    SampledTrafficApiService.prototype.topViewedTags = function (filters, page, pageSize) {\n        var _this = this;\n        var range = this.initDateRange(this.user.getDateRangeSelection());\n        var params = [\"tsrange=\" + range.startDate.unix() + \",\" + range.endDate.unix(), \"page=\" + page, \"page_size=\" + pageSize].concat(filters.getQueryParamsList());\n        return _super.prototype.read.call(this, \"accounts/\" + this.user.accountId + \"/analytics/page/report/top-viewed-tags?\" + params.join('&'))\n            .pipe(Object(operators_map[\"map\"])(function (response) { return _this.parseTopViewedTags(response); }));\n    };\n    SampledTrafficApiService.prototype.parseTopViewedTags = function (response) {\n        return {\n            page: response.page,\n            page_size: response.page_size,\n            records: response.records.map(function (r) {\n                var _prefixAndValue = r.tag.split(':');\n                var _isPrefixed = _prefixAndValue.length === 2;\n                return {\n                    position: r.position,\n                    prefix: _isPrefixed ? _prefixAndValue[0] : null,\n                    value: _isPrefixed ? _prefixAndValue[1] : r.tag,\n                    tag: r.tag,\n                    views: parseInt(r.views),\n                    viewsShare: NaN,\n                };\n            }),\n            total_records: response.total_records,\n        };\n    };\n    var _a, _b, _c, _d, _e, _f, _g;\n    SampledTrafficApiService = sampled_traffic_api_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        sampled_traffic_api_service___metadata(\"design:paramtypes\", [typeof (_a = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof exception_service[\"a\" /* ExceptionService */] !== \"undefined\" && exception_service[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object, typeof (_g = typeof google_geo_regions_fix_service_GoogleGeoRegionsFixService !== \"undefined\" && google_geo_regions_fix_service_GoogleGeoRegionsFixService) === \"function\" && _g || Object])\n    ], SampledTrafficApiService);\n    return SampledTrafficApiService;\n}(base_service_BaseService));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/content/content.details.view.component.ts\nvar content_details_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar content_details_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar content_details_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\nvar content_details_view_component_AnalyticsContentDetailsView = (function (_super) {\n    content_details_view_component___extends(AnalyticsContentDetailsView, _super);\n    function AnalyticsContentDetailsView(route, locale, translation, mediaAnalyticsService, user, sampledTrafficApi, exportService, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.route = route;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.user = user;\n        _this.sampledTrafficApi = sampledTrafficApi;\n        _this.exportService = exportService;\n        _this.cdr = cdr;\n        _this.MAX_TOP_TAGS_FOR_MEDIA = 100;\n        _this.chartTypes = ['lineTime', 'bar'];\n        _this.granularityTypes = ['all'];\n        var range = _this.user.getDateRangeSelection();\n        var endDate = range.endDate;\n        var startDate = range.startDate;\n        var granularity = startDate.unix() == endDate.unix() ? 'hour' : 'day';\n        _this.hasTvMetrics = false;\n        _this.tvStatsLoading = false;\n        _this.historyStats = {\n            data: null,\n            labels: null,\n            startDate: startDate,\n            endDate: endDate,\n            chartType: 'lineTime',\n            granularity: granularity\n        };\n        _this.engagementRateSummary = {\n            topViews: null,\n            totalWatchingTime: null\n        };\n        _this.totalViewsInRange = null;\n        _this.totalUsersInRange = null;\n        _this.engagementRateLiveStreamClockType = 'wall';\n        _this.dateUtil = date_util_DateUtil;\n        _this.routeSubscription = _this.route.data.subscribe(function (data) {\n            _this.mediaMetadata = data.account[0];\n            if (_this.mediaMetadata.is_live_stream && _this.user.isEngagementRateEnabled()) {\n                _this.hasTvMetrics = true;\n            }\n            _this.loadData();\n            _this.loadTagsGroups();\n        });\n        return _this;\n    }\n    AnalyticsContentDetailsView.prototype.loadTagsGroups = function () {\n        var _this = this;\n        var filter = new SampledTrafficFilters();\n        filter.tags = ['mid:' + this.mediaMetadata.material_id];\n        filter.dateRange = [this.historyStats.startDate.unix(), this.historyStats.endDate.unix()];\n        var topViewedTagsSub = this.sampledTrafficApi.topViewedTags(filter, 1, this.MAX_TOP_TAGS_FOR_MEDIA).subscribe({\n            next: function (resp) {\n                var tagsByPrefix = new Map();\n                var viewsPerTag = new Map();\n                var viewsPerPrefix = new Map();\n                for (var _i = 0, _a = resp.records; _i < _a.length; _i++) {\n                    var rec = _a[_i];\n                    var parts = rec.tag.split(':');\n                    var prefix = parts[0];\n                    var sufix = '';\n                    if (parts.length > 1) {\n                        sufix = parts[1];\n                    }\n                    if (!tagsByPrefix.has(prefix)) {\n                        tagsByPrefix.set(prefix, []);\n                        viewsPerPrefix.set(prefix, 0);\n                    }\n                    tagsByPrefix.get(prefix).push(sufix);\n                    viewsPerPrefix.set(prefix, viewsPerPrefix.get(prefix) + rec.views);\n                    viewsPerTag.set(rec.tag, rec.views);\n                }\n                var tagGroups = new Array();\n                tagsByPrefix.forEach(function (sufixes, prefix) {\n                    if (sufixes.length > 1) {\n                        for (var _i = 0, sufixes_1 = sufixes; _i < sufixes_1.length; _i++) {\n                            var sufix = sufixes_1[_i];\n                            var freq = 100.0 * viewsPerTag.get(prefix + \":\" + sufix) / viewsPerPrefix.get(prefix);\n                            tagGroups.push({\n                                prefix: prefix,\n                                sufix: sufix,\n                                frequency: freq\n                            });\n                        }\n                    }\n                });\n                _this.tagGroups = tagGroups;\n                _this.cdr.markForCheck();\n                topViewedTagsSub.unsubscribe();\n            }\n        });\n    };\n    AnalyticsContentDetailsView.prototype.ngOnDestroy = function () {\n        if (this.routeSubscription)\n            this.routeSubscription.unsubscribe();\n    };\n    AnalyticsContentDetailsView.prototype.ngOnInit = function () {\n        this.cdr.markForCheck();\n    };\n    AnalyticsContentDetailsView.prototype.loadData = function () {\n        var _this = this;\n        this.historyStats.data = null;\n        this.mediaAnalyticsService.getMediaStatsHistory(this.mediaMetadata.material_id, this.historyStats.startDate, this.historyStats.endDate, this.historyStats.granularity)\n            .subscribe(function (data) {\n            _this.historyStats.data = data.series;\n            _this.historyStats.labels = data.labels;\n            var totalViews = 0;\n            for (var _i = 0, _a = data.series; _i < _a.length; _i++) {\n                var serie = _a[_i];\n                if (serie.label != 'Views') {\n                    continue;\n                }\n                for (var _b = 0, _c = serie.data; _b < _c.length; _b++) {\n                    var v = _c[_b];\n                    totalViews += v;\n                }\n            }\n            _this.totalViewsInRange = totalViews;\n            if (data.series.length > 1) {\n                _this.loadTotalUsersInRange();\n            }\n            _this.cdr.markForCheck();\n        });\n        if (this.user.isEngagementRateEnabled()) {\n            this.loadEngRateData();\n        }\n    };\n    AnalyticsContentDetailsView.prototype.fixUsersRoundingTotal = function () {\n        if (this.totalViewsInRange < this.totalUsersInRange) {\n            this.totalViewsInRange = this.totalUsersInRange;\n        }\n    };\n    AnalyticsContentDetailsView.prototype.loadEngRateData = function () {\n        var _this = this;\n        this.engagementRateStats = null;\n        this.mediaAnalyticsService.getMediaEngagementRate(this.mediaMetadata.material_id, this.historyStats.startDate, this.historyStats.endDate, null, this.engagementRateLiveStreamClockType)\n            .subscribe(function (data) {\n            _this.onEngRateStatsData(data);\n            if (_this.hasTvMetrics) {\n                _this.updateTvStatisticsFromEngRate();\n            }\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsContentDetailsView.prototype.loadTotalUsersInRange = function () {\n        var _this = this;\n        this.mediaAnalyticsService.getMediaStatsSummaryForRange(this.mediaMetadata.material_id, this.historyStats.startDate, this.historyStats.endDate, this.historyStats.granularity).subscribe(function (data) {\n            _this.totalUsersInRange = parseFloat(data.users);\n            _this.fixUsersRoundingTotal();\n            if (_this.hasTvMetrics) {\n                _this.updateTvStatisticsFromEngRate();\n            }\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsContentDetailsView.prototype.onEngRateStatsData = function (data) {\n        this.engagementRateStats = data;\n        if (!this.engagementRateStats) {\n            this.engagementRateStats = {};\n            this.engagementRateSummary.topViews = null;\n            this.engagementRateSummary.totalWatchingTime = null;\n        }\n        else {\n            this.engagementRateSummary.topViews = null;\n            for (var _i = 0, _a = data.response.views; _i < _a.length; _i++) {\n                var v = _a[_i];\n                v = parseFloat(v);\n                if ((this.engagementRateSummary.topViews == null) || (this.engagementRateSummary.topViews < v)) {\n                    this.engagementRateSummary.topViews = v;\n                }\n            }\n            var unitLen = 0;\n            this.engagementRateSummary.totalWatchingTime = 0;\n            if (this.mediaMetadata.is_live_stream && data.response.views_timestamps && (data.response.views_timestamps.length > 1)) {\n                unitLen = data.response.views_timestamps[1] - data.response.views_timestamps[0];\n            }\n            else if ((this.mediaMetadata.duration > 0) && (data.response.views.length > 1)) {\n                unitLen = this.mediaMetadata.duration / (data.response.views.length - 1);\n            }\n            if (unitLen > 0) {\n                for (var pos = 0; pos < data.response.views.length - 1; pos++) {\n                    var v = parseFloat(data.response.views[pos]);\n                    this.engagementRateSummary.totalWatchingTime += (v * unitLen);\n                }\n            }\n        }\n    };\n    AnalyticsContentDetailsView.prototype.updateTvStatisticsFromEngRate = function () {\n        if (!this.engagementRateStats || !this.engagementRateStats.data || !this.engagementRateStats.data[0] || !this.engagementRateStats.data[0].data) {\n            return;\n        }\n        this.updateTvMetrics(this.engagementRateStats.data[0].data, this.engagementRateStats.startDate, this.engagementRateStats.endDate);\n    };\n    AnalyticsContentDetailsView.prototype.updateTvMetrics = function (values, startDate, endDate) {\n        var _a = this.groupInto15minPeriods(values, startDate, endDate), newValues = _a[0], newLabels = _a[1];\n        var tvStatsAmrChart = [\n            {\n                data: newValues.map(function (v) { return v / 15; }),\n                label: 'Average Minute Rating'\n            }\n        ];\n        var totalEngPoints = newValues.reduce(function (a, b) { return a + b; }, 0);\n        var usersPerEngPoing = totalEngPoints > 0 ? this.totalUsersInRange / totalEngPoints : 1;\n        var tvStatsAvgReachChart = [\n            {\n                data: newValues.map(function (v) { return Math.round(v * usersPerEngPoing); }),\n                label: 'Average Reach'\n            }\n        ];\n        var totalReach = 0;\n        var tvStatsCumReachChart = [\n            {\n                data: newValues.map(function (v) {\n                    totalReach += Math.round(v * usersPerEngPoing);\n                    return totalReach;\n                }),\n                label: 'Cumulative Reach'\n            }\n        ];\n        this.tvStatsAmr = {\n            data: tvStatsAmrChart,\n            labels: newLabels,\n            chartType: 'lineTime',\n            granularity: 'hour',\n            startDate: startDate,\n            endDate: endDate,\n        };\n        this.tvStatsAvgReach = {\n            data: tvStatsAvgReachChart,\n            labels: newLabels,\n            chartType: 'lineTime',\n            granularity: 'hour',\n            startDate: startDate,\n            endDate: endDate,\n        };\n        this.tvStatsCumReach = {\n            data: tvStatsCumReachChart,\n            labels: newLabels,\n            chartType: 'lineTime',\n            granularity: 'hour',\n            startDate: startDate,\n            endDate: endDate,\n        };\n    };\n    AnalyticsContentDetailsView.prototype.groupInto15minPeriods = function (values, startDate, endDate) {\n        var newVals = [], newLabels = [];\n        var periodInSec = endDate.unix() - startDate.unix();\n        var unitInSec = values.length ? periodInSec / values.length : null;\n        var period15Min = 900;\n        if (unitInSec > period15Min) {\n            return [newVals, newLabels];\n        }\n        var unitRemainter = 0;\n        var nextVal = 0;\n        var timeIter = startDate.clone();\n        for (var p = 0; p < values.length; p++) {\n            nextVal += values[p];\n            unitRemainter += unitInSec;\n            while (unitRemainter >= period15Min) {\n                unitRemainter -= period15Min;\n                newVals.push(nextVal);\n                nextVal = 0;\n                newLabels.push(timeIter.toISOString());\n                timeIter.add(15, 'minutes');\n            }\n        }\n        if (unitRemainter > 0) {\n            newVals.push(nextVal);\n            newLabels.push(timeIter.toISOString());\n        }\n        return [newVals, newLabels];\n    };\n    AnalyticsContentDetailsView.prototype.onGranularityChange = function (granularity) {\n        this.historyStats.granularity = granularity;\n        this.loadData();\n    };\n    AnalyticsContentDetailsView.prototype.onChartTypeChange = function (chartType) {\n        this.historyStats.chartType = chartType;\n        this.loadData();\n    };\n    AnalyticsContentDetailsView.prototype.onDateRangeChanged = function (range) {\n        this.historyStats.startDate = range[0];\n        this.historyStats.endDate = range[1];\n        this.user.setDateRangeSelection(range[0].startOf('day'), range[1].startOf('day'));\n        if (this.historyStats.startDate && this.historyStats.endDate && (this.historyStats.startDate.unix() == this.historyStats.endDate.unix())) {\n            this.historyStats.granularity = 'hour';\n        }\n        this.loadData();\n        this.loadTagsGroups();\n    };\n    AnalyticsContentDetailsView.prototype.chartDataExportCsv = function () {\n        var data = this.exportDataToCsv();\n        var exportFileName = 'bradmax_media_' + this.mediaMetadata.material_id + '_' + this.historyStats.startDate.format('YYYYMMDD')\n            + '_' + this.historyStats.endDate.format('YYYYMMDD') + '_by' + this.historyStats.granularity + '.csv';\n        this.exportService.exportFileFromJs(exportFileName, data);\n    };\n    AnalyticsContentDetailsView.prototype.exportDataToCsv = function () {\n        var linesNum = this.historyStats.labels ? this.historyStats.labels.length : 0;\n        var result = '';\n        var line = '';\n        var dateFormat = 'YYYY-MM-DD HH:mm';\n        if ((this.historyStats.granularity == 'day') || (this.historyStats.granularity == 'week')) {\n            dateFormat = 'YYYY-MM-DD';\n        }\n        else if (this.historyStats.granularity == 'month') {\n            dateFormat = 'YYYY-MM';\n        }\n        else if (this.historyStats.granularity == 'year') {\n            dateFormat = 'YYYY';\n        }\n        result += \"Date,Views\\r\\n\";\n        for (var i = 0; i < linesNum; i++) {\n            line = '\"' + moment_default()(this.historyStats.labels[i]).format(dateFormat) + '\",';\n            line += (this.historyStats.data[0].data[i] + \"\\r\\n\");\n            result += line;\n        }\n        return result;\n    };\n    AnalyticsContentDetailsView.prototype.loadTvMetrics = function () {\n        var _this = this;\n        this.tvStatsLoading = true;\n        this.cdr.markForCheck();\n        var endDate = this.historyStats.endDate;\n        var dateIter = this.historyStats.startDate.clone();\n        var engDataObs = [];\n        while (dateIter.unix() < endDate.unix()) {\n            var periodEnd = dateIter.clone().add('days', 4);\n            if (periodEnd.unix() > endDate.unix()) {\n                periodEnd = endDate.clone();\n            }\n            var obs = this.mediaAnalyticsService.getMediaEngagementRate(this.mediaMetadata.material_id, dateIter, periodEnd, null, 'wall').first();\n            engDataObs.push(obs);\n            dateIter = periodEnd.clone();\n        }\n        Observable[\"Observable\"].forkJoin.apply(Observable[\"Observable\"], engDataObs).first().subscribe(function (resps) {\n            var result = [];\n            for (var i = 0; i < resps.length; i++) {\n                for (var _i = 0, _a = resps[i].data[0].data; _i < _a.length; _i++) {\n                    var v = _a[_i];\n                    result.push(v);\n                }\n            }\n            _this.tvStatsLoading = false;\n            _this.updateTvMetrics(result, _this.historyStats.startDate, _this.historyStats.endDate);\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsContentDetailsView.prototype.exportTvMetricsToCsv = function () {\n        var result = '';\n        var line = '';\n        var dateFormat = 'YYYY-MM-DD HH:mm';\n        result += \"Date,AMR,AvgReach,CumulReach\\r\\n\";\n        var dates = this.tvStatsAmr.labels;\n        var amr = this.tvStatsAmr.data[0].data;\n        var avgReach = this.tvStatsAvgReach.data[0].data;\n        var cumReach = this.tvStatsCumReach.data[0].data;\n        for (var i = 0; i < dates.length; i++) {\n            line = '\"' + moment_default()(dates[i]).format(dateFormat) + '\",';\n            line += (amr[i].toFixed(2) + \",\");\n            line += (Math.round(avgReach[i]) + \",\");\n            line += (Math.round(cumReach[i]) + \"\\r\\n\");\n            result += line;\n        }\n        var exportFileName = 'bradmax_media_tv_metrics_' + this.mediaMetadata.material_id + '_' + this.historyStats.startDate.format('YYYYMMDD') + '.csv';\n        this.exportService.exportFileFromJs(exportFileName, result);\n    };\n    AnalyticsContentDetailsView.prototype.changeEngRateLiveStreamClockType = function (clockType) {\n        this.engagementRateLiveStreamClockType = clockType;\n        this.loadEngRateData();\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    AnalyticsContentDetailsView = content_details_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-content-details-view',\n            template: __webpack_require__(1381),\n            viewProviders: [],\n            styles: [\n                ':host .chart-loader {height:300px;position:relative;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            providers: [\n                google_geo_regions_fix_service_GoogleGeoRegionsFixService,\n                sampled_traffic_api_service_SampledTrafficApiService,\n            ],\n        }),\n        content_details_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _c || Object, typeof (_d = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof sampled_traffic_api_service_SampledTrafficApiService !== \"undefined\" && sampled_traffic_api_service_SampledTrafficApiService) === \"function\" && _f || Object, typeof (_g = typeof export_service_ExportService !== \"undefined\" && export_service_ExportService) === \"function\" && _g || Object, typeof (_h = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _h || Object])\n    ], AnalyticsContentDetailsView);\n    return AnalyticsContentDetailsView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/content/content.details.resolver.ts\nvar content_details_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar content_details_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar content_details_resolver_AnalyticsContentDetailsResolver = (function () {\n    function AnalyticsContentDetailsResolver(mediaAnalyticsService, user) {\n        this.mediaAnalyticsService = mediaAnalyticsService;\n        this.user = user;\n    }\n    AnalyticsContentDetailsResolver.prototype.resolve = function (route, state) {\n        var materialId = route.params['materialId'];\n        if (!materialId)\n            return false;\n        if (this.user.accountId == null)\n            return false;\n        return Observable[\"Observable\"].forkJoin(this.mediaAnalyticsService.getMediaMetadata(materialId));\n    };\n    var _a, _b;\n    AnalyticsContentDetailsResolver = content_details_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        content_details_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object])\n    ], AnalyticsContentDetailsResolver);\n    return AnalyticsContentDetailsResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/content/content.module.ts\nvar content_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar content_module_routes = [\n    { path: '', component: content_view_component_AnalyticsContentView },\n    { path: ':materialId', component: content_details_view_component_AnalyticsContentDetailsView, resolve: { account: content_details_resolver_AnalyticsContentDetailsResolver } },\n];\nvar content_module_AnalyticsContentModule = (function () {\n    function AnalyticsContentModule() {\n    }\n    AnalyticsContentModule = content_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(content_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule,\n                pager_module_PagerModule\n            ],\n            declarations: [\n                content_view_component_AnalyticsContentView,\n                content_details_view_component_AnalyticsContentDetailsView\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                media_service_MediaService,\n                content_details_resolver_AnalyticsContentDetailsResolver\n            ]\n        })\n    ], AnalyticsContentModule);\n    return AnalyticsContentModule;\n}());\n\n\n// EXTERNAL MODULE: ./node_modules/rxjs/Rx.js\nvar Rx = __webpack_require__(25);\nvar Rx_default = /*#__PURE__*/__webpack_require__.n(Rx);\n\n// CONCATENATED MODULE: ./src/service/player.service.ts\nvar player_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar player_service_PlayerService = (function (_super) {\n    player_service___extends(PlayerService, _super);\n    function PlayerService(router, auth, http, exception, url) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.router = router;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.url = url;\n        _this.readPlayerSubject = new Rx[\"BehaviorSubject\"](undefined);\n        return _this;\n    }\n    Object.defineProperty(PlayerService.prototype, \"readPlayer$\", {\n        get: function () { return this.readPlayerSubject.asObservable(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerService.prototype, \"readedPlayer\", {\n        get: function () { return this.readPlayerSubject.getValue(); },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerService.prototype.readPlayer = function (accountId, playerId) {\n        var _this = this;\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/players/' + playerId;\n        _super.prototype.read.call(this, url).subscribe(function (response) {\n            if (response) {\n                response.loaded_at = (new Date()).getTime() / 1000.0;\n            }\n            _this.readPlayerSubject.next(response);\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PlayerService.prototype.createPlayer = function (accountId, req) {\n        return _super.prototype.create.call(this, 'accounts/' + accountId + '/players', req);\n    };\n    PlayerService.prototype.updatePlayer = function (accountId, playerId, req) {\n        return _super.prototype.update.call(this, 'accounts/' + accountId + '/players/' + playerId, req);\n    };\n    PlayerService.prototype.deletePlayer = function (accountId, playerId) {\n        return _super.prototype.delete.call(this, 'accounts/' + accountId + '/players/' + playerId);\n    };\n    PlayerService.prototype.defaultPlayer = function () {\n        return _super.prototype.read.call(this, 'player-configurator/all-defaults');\n    };\n    PlayerService.prototype.listPlayers = function (accountId) {\n        var req = { 'detailed': '1' };\n        var resolveSource = new Subject[\"Subject\"]();\n        var url = 'accounts/' + accountId + '/players';\n        _super.prototype.read.call(this, url, req).subscribe(function (response) {\n            if (response && response.results) {\n                var nowTs = (new Date()).getTime() / 1000.0;\n                for (var _i = 0, _a = response.results; _i < _a.length; _i++) {\n                    var entry = _a[_i];\n                    entry.loaded_at = nowTs;\n                }\n            }\n            resolveSource.next(response);\n        }, function (error) { return resolveSource.error(error); }, function () { return resolveSource.complete(); });\n        return resolveSource.asObservable();\n    };\n    PlayerService.prototype.listBuilds = function (accountId, playerId) {\n        return _super.prototype.read.call(this, 'accounts/' + accountId + '/players/' + playerId + '/web-builds');\n    };\n    PlayerService.prototype.generateBuild = function (accountId, playerId) {\n        return _super.prototype.create.call(this, 'accounts/' + accountId + '/players/' + playerId + '/generate-web-build');\n    };\n    var _a, _b, _c, _d, _e;\n    PlayerService = player_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_service___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _a || Object, typeof (_b = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _b || Object, typeof (_c = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _c || Object, typeof (_d = typeof exception_service[\"a\" /* ExceptionService */] !== \"undefined\" && exception_service[\"a\" /* ExceptionService */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], PlayerService);\n    return PlayerService;\n}(api_service[\"a\" /* BradmaxApi */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/dashboard/dashboard.view.component.ts\nvar dashboard_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar dashboard_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar dashboard_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar dashboard_view_component_AnalyticsDashboardView = (function (_super) {\n    dashboard_view_component___extends(AnalyticsDashboardView, _super);\n    function AnalyticsDashboardView(locale, translation, user, analyticsService, viewService, router, modal, playerService, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.analyticsService = analyticsService;\n        _this.viewService = viewService;\n        _this.router = router;\n        _this.modal = modal;\n        _this.playerService = playerService;\n        _this.cdr = cdr;\n        _this.HEATMAP_DEFAULT_RANGE_SCOPE = 0;\n        _this.hpicersize = 'sm';\n        _this.showButtons = false;\n        _this.showWelcomeBox = false;\n        _this.dropdownHeatMap = new Array(0);\n        _this.dropdownHeatMap.push({ value: -1, label: 'current week' });\n        _this.dropdownHeatMap.push({ value: 0, label: 'last 7 days' });\n        _this.dropdownHeatMap.push({ value: 1, label: 'last 1 week' });\n        _this.dropdownHeatMap.push({ value: 20, label: 'last 20 weeks' });\n        _this.dropdownHeatMap.push({ value: 30, label: 'last 30 weeks' });\n        _this.dropdownHeatMap.push({ value: 40, label: 'last 40 weeks' });\n        _this.dropdownHeatMap.push({ value: 52, label: 'last 52 weeks' });\n        _this.summary = {\n            devices: {\n                desktopPerc: null,\n                otherPerc: null,\n            },\n            last30d: {\n                views: null,\n                users: null\n            }\n        };\n        _this.audienceHistory30d = {\n            data: null,\n            labels: null,\n            startDate: null,\n            endDate: null,\n            chartType: 'lineTime',\n            granularity: 'day'\n        };\n        _this.audienceHistory48h = {\n            data: null,\n            labels: null,\n            startDate: null,\n            endDate: null,\n            chartType: 'lineTime',\n            granularity: 'hour'\n        };\n        return _this;\n    }\n    AnalyticsDashboardView.prototype.ngOnInit = function () {\n        this.loadData();\n        this.loadHeatMap(this.HEATMAP_DEFAULT_RANGE_SCOPE);\n    };\n    AnalyticsDashboardView.prototype.loadData = function () {\n        var _this = this;\n        this.loadingData = true;\n        this.playerService.listPlayers(this.user.accountId).subscribe(function (data) {\n            _this.showWelcomeBox = (data.count == 0) && !_this.viewService.checkIfAppInIframe();\n            _this.cdr.markForCheck();\n        });\n        this.analyticsService.getDashboardData().subscribe(function (data) {\n            _this.summary.devices = _this.loadDataProcessDeviceTypes(data.summary.device_types);\n            _this.summary.last30d.views = parseFloat(data.summary.last_30d.views);\n            _this.summary.last30d.users = parseFloat(data.summary.last_30d.users);\n            _this.audienceHistory30d = _this.loadDataProcessAudienceHistory30d(data.audience_history.last_30d);\n            _this.audienceHistory48h = _this.loadDataProcessAudienceHistory48h(data.audience_history.last_48h);\n            _this.topMedia30d = data.top_media.last_30d.records;\n            _this.topMedia24h = data.top_media.last_24h.records;\n            _this.loadingData = false;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsDashboardView.prototype.loadDataProcessDeviceTypes = function (deviceTypes) {\n        var result = {\n            otherPerc: null,\n            desktopPerc: null\n        };\n        var totalViews = 0;\n        var desktopViews = 0;\n        var DESKTOP_DEVICE_TYPE = 1;\n        for (var _a = 0, deviceTypes_1 = deviceTypes; _a < deviceTypes_1.length; _a++) {\n            var rec = deviceTypes_1[_a];\n            totalViews += parseFloat(rec.views);\n            if (rec.device_type === DESKTOP_DEVICE_TYPE) {\n                desktopViews = parseFloat(rec.views);\n            }\n        }\n        if (totalViews > 0) {\n            result.desktopPerc = 100.0 * desktopViews / totalViews;\n            result.otherPerc = 100.0 - result.desktopPerc;\n        }\n        return result;\n    };\n    AnalyticsDashboardView.prototype.loadDataProcessAudienceHistory30d = function (records) {\n        var result = {\n            data: null,\n            labels: null,\n            startDate: null,\n            endDate: null,\n            chartType: 'lineTime',\n            granularity: 'day'\n        };\n        if (records.length == 0) {\n            result.data = [];\n            result.labels = [];\n            return result;\n        }\n        var usersData = { data: [], label: 'Users' };\n        var viewsData = { data: [], label: 'Views' };\n        var labels = [];\n        for (var _a = 0, records_1 = records; _a < records_1.length; _a++) {\n            var rec = records_1[_a];\n            usersData.data.push(parseFloat(rec.users));\n            viewsData.data.push(parseFloat(rec.views));\n            labels.push(moment_default.a.unix(rec.from).toISOString());\n        }\n        result.data = [usersData, viewsData];\n        result.labels = labels;\n        result.startDate = moment_default.a.unix(records[0].from);\n        result.endDate = moment_default.a.unix(records[records.length - 1].from);\n        return result;\n    };\n    AnalyticsDashboardView.prototype.loadDataProcessAudienceHistory48h = function (records) {\n        var result = {\n            data: null,\n            labels: null,\n            startDate: null,\n            endDate: null,\n            chartType: 'lineTime',\n            granularity: 'hour'\n        };\n        if (records.length != 48) {\n            result.data = [];\n            result.labels = [];\n            return result;\n        }\n        var yesterdayData = {\n            data: [],\n            label: 'Yesterday views',\n            fill: false,\n            pointBorderColor: 'rgb(255, 227, 46)'\n        };\n        var yesterdayRecords = records.slice(0, 24);\n        for (var _a = 0, yesterdayRecords_1 = yesterdayRecords; _a < yesterdayRecords_1.length; _a++) {\n            var rec = yesterdayRecords_1[_a];\n            yesterdayData.data.push(parseFloat(rec.views));\n        }\n        var todayRecords = records.slice(24);\n        var todayData = {\n            data: [],\n            label: 'Today views',\n            fill: false,\n            pointBorderColor: 'rgb(56, 102, 255)'\n        };\n        var validDataTs = (new Date()).getTime() / 1000.0 - 3600.0;\n        var labels = [];\n        for (var _b = 0, todayRecords_1 = todayRecords; _b < todayRecords_1.length; _b++) {\n            var rec = todayRecords_1[_b];\n            var val = (rec.from < validDataTs) ? parseFloat(rec.views) : null;\n            todayData.data.push(val);\n            labels.push(moment_default.a.unix(rec.from).toISOString());\n        }\n        result.data = [todayData, yesterdayData];\n        result.labels = labels;\n        result.startDate = moment_default.a.unix(todayRecords[0].from);\n        result.endDate = moment_default.a.unix(todayRecords[todayRecords.length - 1].from);\n        return result;\n    };\n    AnalyticsDashboardView.prototype.loadHeatMap = function (_opt) {\n        var m = moment_default()();\n        var sod = m.clone().startOf('day');\n        var sow = m.clone().startOf('week');\n        var _range;\n        this.dropdownHeatMapSelectedValue = _opt;\n        _range = [sow, sod];\n        if (_opt > -1) {\n            switch (_opt) {\n                case 0:\n                    _range = [sod.clone().subtract(6, 'days'), m];\n                    break;\n                default:\n                    _range = [sod.clone().subtract(_opt, 'week').startOf('week'), m.clone().subtract(1, 'week').endOf('week')];\n            }\n        }\n        this.onDateHeatMapRangeChanged(_range);\n    };\n    AnalyticsDashboardView.prototype.dropdownHeatMapSelect = function (_e) {\n        this.loadHeatMap(_e.value);\n    };\n    AnalyticsDashboardView.prototype.onChangeRange = function (_opt) {\n        this.loadHeatMap(_opt);\n    };\n    AnalyticsDashboardView.prototype.onDateHeatMapRangeChanged = function (range) {\n        var _this = this;\n        var monthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n        var startDate = new Date(range[0]['_d']);\n        var day = startDate.getDay();\n        var monthDay = startDate.getUTCDate() + 1;\n        var month = startDate.getUTCMonth() + 1;\n        var year = startDate.getFullYear();\n        var daysInMonth = new Date(year, month, 0).getDate();\n        var curDate = new Date(startDate);\n        curDate.setDate(startDate.getDate());\n        this.firstDay = { day: startDate.getUTCDate() + 1, month: startDate.getUTCMonth(), year: startDate.getFullYear() };\n        var dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n        this.heatMapGranularity = 'day';\n        this.heatMapHeaders = null;\n        var weeksViewsArray;\n        var weeksUsersArray;\n        this.heatMapRowDescriptors = new Array(0);\n        for (var _i = 0; _i < 7; _i++) {\n            this.heatMapRowDescriptors.push(dayNames[day]);\n            day++;\n            if (day > 6)\n                day = 0;\n        }\n        if (range[1]['_d'] - range[0]['_d'] <= 604799999) {\n            this.heatMapGranularity = 'hour';\n            this.heatMapHeaders = new Array(0);\n            for (var _i = 0; _i < 24; _i++) {\n                this.heatMapHeaders.push(_i.toString() + ':00');\n            }\n        }\n        this.analyticsService.getUsersAndViews(range[0].startOf('day'), range[1].startOf('day'), this.heatMapGranularity).subscribe(function (data) {\n            var _viewsData = data[1].data.data;\n            ;\n            var _usersData = data[0].data.data;\n            var dayInd = 0;\n            weeksViewsArray = new Array(0);\n            weeksUsersArray = new Array(0);\n            for (var _i = 0; _i < 7; _i++) {\n                weeksViewsArray.push(new Array(0));\n                weeksUsersArray.push(new Array(0));\n            }\n            var monthLabel = -1;\n            var headerLabel = '';\n            if (_this.heatMapGranularity == 'day') {\n                for (var _i = 0; _i < _viewsData.length; _i++) {\n                    curDate = new Date(startDate);\n                    curDate.setDate(curDate.getDate() + _i);\n                    if (dayInd > 6)\n                        dayInd = 0;\n                    monthDay = curDate.getUTCDate();\n                    if (dayInd == 0) {\n                        if (monthLabel != curDate.getUTCMonth() + 1) {\n                            monthLabel = curDate.getUTCMonth() + 1;\n                            headerLabel = curDate.getUTCDay().toString() + ' ' + monthNames[curDate.getUTCMonth()] + ' ' + curDate.getFullYear().toString();\n                            headerLabel = monthNames[curDate.getUTCMonth()] + ' ' + curDate.getFullYear().toString();\n                        }\n                        else {\n                            headerLabel = '';\n                        }\n                    }\n                    weeksViewsArray[dayInd].push({ day: headerLabel, value: _viewsData[_i] });\n                    weeksUsersArray[dayInd].push({ day: headerLabel, value: _usersData[_i] });\n                    dayInd++;\n                }\n                _this.heatMapHeaders = new Array(0);\n                _viewsData = new Array(0);\n                _usersData = new Array(0);\n                for (var _i = 0; _i < weeksViewsArray.length; _i++) {\n                    for (var _j = 0; _j < weeksViewsArray[_i].length; _j++) {\n                        if (_i == 0)\n                            _this.heatMapHeaders.push(weeksViewsArray[_i][_j].day);\n                        _viewsData.push(weeksViewsArray[_i][_j].value);\n                        _usersData.push(weeksUsersArray[_i][_j].value);\n                    }\n                }\n            }\n            _this.heatMapViewsData = _viewsData;\n            _this.heatMapUsersData = _usersData;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsDashboardView.prototype.askForNewPlayer = function () {\n        var _this = this;\n        this.modal.input(this.translation.translate('PLAYER.LIST.MODAL.ADD.HEADER'), this.translation.translate('PLAYER.LIST.MODAL.ADD.INPUT'), [{\n                label: this.translation.translate('PLAYER.LIST.MODAL.ADD.ADD'), fa: 'check', close: true,\n                click: function (name) { return _this.addNewPlayer(name); }\n            },\n            { label: this.translation.translate('PLAYER.LIST.MODAL.ADD.CANCEL'), fa: 'ban', close: true }\n        ], \"MyFirstPlayer\");\n    };\n    AnalyticsDashboardView.prototype.addNewPlayer = function (name) {\n        var _this = this;\n        if (this.user.accountId != null) {\n            var request = { name: name, conf_json: '{}', api_version: '2' };\n            this.addNewSub = this.playerService\n                .createPlayer(this.user.accountId, request)\n                .subscribe(function (p) { return _this.gotoConfigurator(p.id); });\n        }\n    };\n    AnalyticsDashboardView.prototype.gotoConfigurator = function (playerId, e) {\n        if (e && !e.defaultPrevented) {\n            e.preventDefault();\n            e.stopImmediatePropagation();\n            e.stopPropagation();\n        }\n        this.router.navigate(['admin', 'player', playerId]);\n        return;\n    };\n    var _a, _b, _c, _f, _g, _h, _k, _l, _m;\n    AnalyticsDashboardView = dashboard_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-dashboard-view',\n            template: __webpack_require__(1382),\n            styles: [\n                ':host .chart-loader {height:260px;position:relative;}',\n                ':host .table-loader {height:440px;position:relative;}',\n                ':host .table td {word-break:break-word;}',\n                ':host .panel-heading h4 {color:floralwhite;}',\n                ':host .panel-heading h4 small {color:#bbbbbb;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        dashboard_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _c || Object, typeof (_f = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _f || Object, typeof (_g = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _g || Object, typeof (_h = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _h || Object, typeof (_k = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _k || Object, typeof (_l = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _l || Object, typeof (_m = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _m || Object])\n    ], AnalyticsDashboardView);\n    return AnalyticsDashboardView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/component/heatmap/heatmap.component.ts\nvar heatmap_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar heatmap_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar heatmap_component_HeatmapComponent = (function () {\n    function HeatmapComponent(el) {\n        this.el = el;\n        this.DEFAULT_ROW_TITLE_WIDTH = 30;\n        this.DEFAULT_ROW_SPACING = 60;\n        this.minVal = \"0\";\n        this.maxVal = \"0\";\n    }\n    HeatmapComponent.prototype.onResize = function (event) {\n        this.squareResize();\n    };\n    HeatmapComponent.prototype.ngOnInit = function () {\n    };\n    HeatmapComponent.prototype.incDate = function (_i) {\n        var _res = new Date(this.firstDay);\n        _res.setDate(_res.getDate() + _i);\n        if (this.Granularity == \"day\") {\n            return _res.getUTCDate().toString() +\n                '-' + (_res.getUTCMonth() + 1).toString() +\n                '-' + _res.getFullYear().toString() + ': ';\n        }\n        else\n            return '';\n    };\n    HeatmapComponent.prototype.ngOnChanges = function () {\n        this.firstDay = new Date(this.beginDate.year, this.beginDate.month, this.beginDate.day);\n        var dataField;\n        var dataRow;\n        var nlCounter = 0;\n        var _rowCounter = 0;\n        this.rowsForDisplay = new Array(0);\n        this.borderWidth = \"1px solid \" + this.ColorSchema;\n        if (!this.ShowBorder)\n            this.borderWidth = \"0px\";\n        if (this.Granularity == 'hour') {\n            nlCounter = 24;\n        }\n        else if (this.Granularity == 'day') {\n            if (this.Data != null) {\n                nlCounter = this.Data.length / 7;\n            }\n            else {\n                nlCounter = 1;\n            }\n        }\n        ;\n        var _maxValue = Math.max.apply(Math, this.Data);\n        this.maxVal = _maxValue.toString();\n        var colCounter = 0;\n        if (this.Data != null) {\n            for (var _i = 0; _i < this.Data.length; _i++) {\n                if (colCounter == 0) {\n                    dataRow = new Array(0);\n                }\n                dataField = { value: this.Data[_i] / _maxValue, info: this.Data[_i].toString() };\n                dataRow.push(dataField);\n                colCounter++;\n                if (colCounter > nlCounter - 1) {\n                    colCounter = 0;\n                    this.rowsForDisplay.push(dataRow);\n                    _rowCounter++;\n                }\n            }\n        }\n        this.squareResize();\n    };\n    HeatmapComponent.prototype.squareResize = function () {\n        if ((this.rowsForDisplay == null) || (this.rowsForDisplay.length == 0) || (this.rowsForDisplay[0].length == 0)) {\n            return;\n        }\n        try {\n            this.componentWidth = this.el.nativeElement.getBoundingClientRect().width;\n            var itemsNum = this.rowsForDisplay[0].length;\n            var spacing = this.DEFAULT_ROW_TITLE_WIDTH + this.DEFAULT_ROW_SPACING;\n            this.squareWidth = (this.componentWidth - spacing) / itemsNum;\n        }\n        catch (e) {\n        }\n    };\n    var _a, _b;\n    heatmap_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        heatmap_component___metadata(\"design:type\", Array)\n    ], HeatmapComponent.prototype, \"Headers\", void 0);\n    heatmap_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        heatmap_component___metadata(\"design:type\", Array)\n    ], HeatmapComponent.prototype, \"Rows\", void 0);\n    heatmap_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        heatmap_component___metadata(\"design:type\", String)\n    ], HeatmapComponent.prototype, \"Granularity\", void 0);\n    heatmap_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        heatmap_component___metadata(\"design:type\", Array)\n    ], HeatmapComponent.prototype, \"Data\", void 0);\n    heatmap_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        heatmap_component___metadata(\"design:type\", String)\n    ], HeatmapComponent.prototype, \"ColorSchema\", void 0);\n    heatmap_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        heatmap_component___metadata(\"design:type\", Boolean)\n    ], HeatmapComponent.prototype, \"ShowBorder\", void 0);\n    heatmap_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        heatmap_component___metadata(\"design:type\", Object)\n    ], HeatmapComponent.prototype, \"beginDate\", void 0);\n    heatmap_component___decorate([\n        Object(core_es5[\"HostListener\"])('window:resize', ['$event']),\n        heatmap_component___metadata(\"design:type\", Function),\n        heatmap_component___metadata(\"design:paramtypes\", [typeof (_a = typeof Event !== \"undefined\" && Event) === \"function\" && _a || Object]),\n        heatmap_component___metadata(\"design:returntype\", void 0)\n    ], HeatmapComponent.prototype, \"onResize\", null);\n    HeatmapComponent = heatmap_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'heat-map',\n            styles: [\n                ':host {display:block;padding:0 10px;}',\n            ],\n            template: \"\\n\\t<style type=\\\"text/css\\\">\\n\\n\\t\\t.square\\n\\t\\t{\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\twidth: 18px;\\n\\t\\t\\theight: 18px;\\n\\t\\t\\tborder-radius: 3px;\\n\\t\\t\\t-moz-border-radius: 3px;\\n\\t\\t\\tmargin: 1px 1px 0px 0px;\\n\\t\\t\\tpadding: 0;\\n\\t\\t\\tfont-family: inherit;\\n\\t\\t\\tvertical-align: middle;\\n\\t\\t\\twhite-space: nowrap;\\n\\t\\t}\\n\\n\\t\\t.square.row-title\\n\\t\\t{\\n\\t\\t\\tborder: 0px;\\n\\t\\t\\twidth : 30px;\\n\\t\\t\\tcolor: #333333;\\n\\t\\t\\ttext-align:right;\\n\\t\\t\\tline-height:18px;\\n\\t\\t\\tfont-size:12px;\\n\\t\\t}\\n\\n\\t\\t.square.col-title\\n\\t\\t{\\n\\t\\t\\tvertical-align: top;\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tcolor: #333333;\\n\\t\\t\\tline-height:18px;\\n\\t\\t\\tfont-size:12px;\\n\\t\\t}\\n\\n\\t\\t.rotate\\n\\t\\t{\\n\\t\\t\\tbackground-color: rgba(0, 0, 0, 0.0);\\n\\t\\t\\tborder: 0px;\\n\\n\\n\\t\\t\\t/* Safari */\\n\\t\\t\\t-webkit-transform: translate(-6px,9px) rotate(-45deg);\\n\\t\\t\\t-webkit-transform-origin: 0 0;\\n\\n\\t\\t\\t/* Firefox */\\n\\t\\t\\t-moz-transform: translate(-6px,9px) rotate(-45deg);\\n\\t\\t\\t-moz-transform-origin: 0 0;\\n\\n\\t\\t\\t/* IE */\\n\\t\\t\\t-ms-transform: translate(-6px,9px) rotate(-45deg);\\n\\t\\t\\t-ms-transform-origin: 0 0;\\n\\n\\t\\t\\t/* Opera */\\n\\t\\t\\t-o-transform: translate(-6px,9px) rotate(-45deg);\\n\\t\\t\\t-o-transform-origin: 0 0;\\n\\t\\t}\\n\\n\\t\\t.ownTooltip {\\n\\t\\t\\tposition: relative;\\n\\t\\t\\tdisplay: inline-block;\\n\\t\\t\\tborder-bottom: 0px dotted black;\\n\\t\\t  }\\n\\t\\t  \\n\\t\\t  .ownTooltip .tooltiptext {\\n\\t\\t\\tvisibility: hidden;\\n\\t\\t\\twidth: 120px;\\n\\t\\t\\tbackground-color: #555;\\n\\t\\t\\tcolor: #fff;\\n\\t\\t\\ttext-align: center;\\n\\t\\t\\tborder-radius: 6px;\\n\\t\\t\\tpadding: 5px 0;\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\tz-index: 1;\\n\\t\\t\\tbottom: 125%;\\n\\t\\t\\tleft: 50%;\\n\\t\\t\\tmargin-left: -60px;\\n\\t\\t\\topacity: 0;\\n\\t\\t\\ttransition: opacity 0.3s;\\n\\t\\t  }\\n\\t\\t  \\n\\t\\t  .ownTooltip .tooltiptext::after {\\n\\t\\t\\tcontent: \\\"\\\";\\n\\t\\t\\tposition: absolute;\\n\\t\\t\\ttop: 100%;\\n\\t\\t\\tleft: 50%;\\n\\t\\t\\tmargin-left: -5px;\\n\\t\\t\\tborder-width: 5px;\\n\\t\\t\\tborder-style: solid;\\n\\t\\t\\tborder-color: #555 transparent transparent transparent;\\n\\t\\t  }\\n\\t\\t  \\n\\t\\t  .ownTooltip:hover .tooltiptext {\\n\\t\\t\\tvisibility: visible;\\n\\t\\t\\topacity: 0.8;\\n\\t\\t  }\\n\\n\\t</style>\\n\\t<div *ngIf=\\\"rowsForDisplay.length>0\\\" class= \\\"row\\\" >\\n\\n\\t\\t<span *ngIf=\\\"Rows\\\" [ngClass]=\\\"{ 'square': true }\\\" [ngStyle]=\\\" {'border': '0px', 'width' : DEFAULT_ROW_TITLE_WIDTH + 'px', 'opacity':'0' }\\\">\\n\\t\\t</span>\\n\\n\\t\\t<span align = \\\"center\\\" *ngFor=\\\"let header of Headers\\\"\\n\\t\\t\\t\\tclass=\\\"square rotate col-title\\\"\\n\\t\\t\\t\\t[ngStyle]=\\\" {'width': squareWidth+'px'}\\\">\\n\\t\\t\\t\\t{{header}}\\n\\t\\t</span>\\n\\t</div>\\n\\n\\t<div *ngFor=\\\"let row of rowsForDisplay; let i = index\\\" class=\\\"row\\\">\\n\\t\\t<span *ngIf=\\\"Rows\\\" class=\\\"square row-title\\\">\\n\\t\\t{{Rows[i]}}\\n\\t\\t</span>\\n\\t\\t<span  *ngFor=\\\"let data of row; let j = index\\\" class=\\\"ownTooltip\\\">\\n\\t\\t\\t<span class=\\\"tooltiptext\\\">{{incDate(7*j+i+1)}}{{data.info}}</span>\\n\\t\\t\\t<span \\n\\t\\t\\t\\tclass=\\\"square\\\"\\n\\t\\t\\t\\t[ngStyle]=\\\" {'background-color': ColorSchema,\\n\\t\\t\\t\\t\\t\\t\\t 'opacity': data.value,\\n\\t\\t\\t\\t\\t\\t\\t 'border': borderWidth,\\n\\t\\t\\t\\t\\t\\t\\t 'width': squareWidth+'px' }\\\" >\\n\\t\\t\\t</span>\\n\\t\\t</span>\\t\\n\\t</div>\\n\\n\\t<span>{{minVal}}</span>\\n\\t<span class=\\\"square\\\" \\n\\t\\t\\t\\t[ngStyle]=\\\" {\\n\\t\\t\\t\\t 'background-color': 'red',\\n\\t\\t\\t\\t 'border': '2px',\\n\\t\\t\\t\\t 'width': '200px',\\n\\t\\t\\t\\t 'margin-top' : '20px',\\n\\t\\t\\t\\t 'margin-bottom': '20px', \\n\\t\\t\\t\\t 'background-image': 'linear-gradient(to right, #FFFFFF , '+ColorSchema+')' }\\\" >\\n\\t</span>\\n\\t<span>{{maxVal}}</span>\\n\\n\\t\"\n        }),\n        heatmap_component___metadata(\"design:paramtypes\", [typeof (_b = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _b || Object])\n    ], HeatmapComponent);\n    return HeatmapComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/dashboard/dashboard.module.ts\nvar dashboard_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar dashboard_module_routes = [\n    { path: '', component: dashboard_view_component_AnalyticsDashboardView },\n];\nvar dashboard_module_AnalyticsDashboardModule = (function () {\n    function AnalyticsDashboardModule() {\n    }\n    AnalyticsDashboardModule = dashboard_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(dashboard_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule\n            ],\n            declarations: [\n                dashboard_view_component_AnalyticsDashboardView,\n                heatmap_component_HeatmapComponent,\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                player_service_PlayerService,\n            ]\n        })\n    ], AnalyticsDashboardModule);\n    return AnalyticsDashboardModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/top-content/top-content.view.component.ts\nvar top_content_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar top_content_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar top_content_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar top_content_view_component_AnalyticsTopContentView = (function (_super) {\n    top_content_view_component___extends(AnalyticsTopContentView, _super);\n    function AnalyticsTopContentView(locale, translation, mediaAnalyticsService, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS = 30;\n        _this.LAST_HOURS_SELECTED_FOR_SCOPE_DEFAULT_VALUE = 720;\n        _this.PAST_TIMESTAMP = 946684800;\n        _this.topMediaList = null;\n        _this.mediaMetadataByMaterialId = new Map();\n        _this.topMediaListTotalLength = 0;\n        _this.topMediaListHasUsersStats = false;\n        _this.pagingOptions = {\n            page: 1,\n            page_size: 10\n        };\n        _this.lastHoursSelectedForScope = _this.LAST_HOURS_SELECTED_FOR_SCOPE_DEFAULT_VALUE;\n        _this.selectedMediaMetadata = null;\n        _this.dateUtil = date_util_DateUtil;\n        return _this;\n    }\n    AnalyticsTopContentView.prototype.ngOnInit = function () {\n        this.loadData();\n    };\n    AnalyticsTopContentView.prototype.selectMediaMetadata = function (materialId) {\n        if (this.selectedMediaMetadata && (this.selectedMediaMetadata.material_id == materialId)) {\n            return;\n        }\n        this.selectedMediaMetadata = this.mediaMetadataByMaterialId.get(materialId);\n        this.loadHistoryStatsForSelectedMedia();\n    };\n    AnalyticsTopContentView.prototype.loadHistoryStatsForSelectedMedia = function () {\n        var _this = this;\n        var endDate = moment_default()().startOf('day');\n        var startDate = endDate.clone().subtract(this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS, 'days');\n        var granularity = 'day';\n        this.previewHistoryStats = null;\n        this.mediaAnalyticsService.getMediaStatsHistory(this.selectedMediaMetadata.material_id, startDate, endDate, granularity)\n            .subscribe(function (data) {\n            _this.previewHistoryStats = {\n                data: data.series,\n                labels: data.labels,\n                startDate: startDate,\n                endDate: endDate,\n                chartType: 'lineTime',\n                granularity: granularity\n            };\n            _this.cdr.markForCheck();\n        });\n        if (this.user.isEngagementRateEnabled()) {\n            this.engagementRateStats = null;\n            this.mediaAnalyticsService.getMediaEngagementRate(this.selectedMediaMetadata.material_id, startDate, endDate)\n                .subscribe(function (data) {\n                _this.engagementRateStats = data;\n                if (!_this.engagementRateStats) {\n                    _this.engagementRateStats = {};\n                }\n                _this.cdr.markForCheck();\n            });\n        }\n    };\n    AnalyticsTopContentView.prototype.loadData = function () {\n        var _this = this;\n        var endDate = (this.lastHoursSelectedForScope > 1) ? moment_default()().startOf('day') : moment_default()();\n        var startDate = null;\n        if (this.lastHoursSelectedForScope > 0) {\n            startDate = endDate.clone().subtract(this.lastHoursSelectedForScope, 'hours');\n        }\n        else {\n            startDate = moment_default.a.unix(this.PAST_TIMESTAMP);\n        }\n        this.topMediaList = null;\n        this.mediaAnalyticsService.getTopViewedMediaMetadataList(startDate, endDate, this.pagingOptions).subscribe(function (data) {\n            _this.topMediaList = data.records;\n            _this.topMediaListTotalLength = data.total_records;\n            _this.topMediaListHasUsersStats = true;\n            _this.mediaMetadataByMaterialId = new Map();\n            for (var _i = 0, _a = data.records; _i < _a.length; _i++) {\n                var mm = _a[_i];\n                _this.mediaMetadataByMaterialId.set(mm.media.material_id, mm.media);\n            }\n            _this.cdr.markForCheck();\n            if ((_this.selectedMediaMetadata == null) && (_this.topMediaList != null) && (_this.topMediaList.length > 0)) {\n                _this.selectMediaMetadata(_this.topMediaList[0].media.material_id);\n            }\n        });\n    };\n    AnalyticsTopContentView.prototype.hasTopMediaListUsersStats = function (topMediaList) {\n        var result = false;\n        if (topMediaList) {\n            for (var _i = 0, topMediaList_1 = topMediaList; _i < topMediaList_1.length; _i++) {\n                var rec = topMediaList_1[_i];\n                if (('users' in rec) && (rec.users > 0)) {\n                    result = true;\n                    break;\n                }\n            }\n        }\n        return result;\n    };\n    AnalyticsTopContentView.prototype.isMediaMetadataSelected = function (material_id) {\n        return material_id && this.selectedMediaMetadata && (this.selectedMediaMetadata.material_id == material_id);\n    };\n    AnalyticsTopContentView.prototype.onLastHoursSelectedChange = function (hours) {\n        if (hours != this.lastHoursSelectedForScope) {\n            this.lastHoursSelectedForScope = hours;\n            this.pagingOptions.page = 1;\n            this.loadData();\n        }\n    };\n    AnalyticsTopContentView.prototype.onPageChanged = function (page) {\n        this.pagingOptions.page = page;\n        this.loadData();\n    };\n    var _a, _b, _c, _d, _e;\n    AnalyticsTopContentView = top_content_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-top-content-view',\n            template: __webpack_require__(1383),\n            viewProviders: [],\n            styles: [\n                ':host .chart-loader {height:200px;position:relative;}',\n                ':host #top-content-list td{cursor:pointer;word-break: break-word;}',\n                ':host .media-list-loader {height:400px;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        top_content_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _c || Object, typeof (_d = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object])\n    ], AnalyticsTopContentView);\n    return AnalyticsTopContentView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/top-content/top-content.module.ts\nvar top_content_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar top_content_module_routes = [\n    { path: '', component: top_content_view_component_AnalyticsTopContentView },\n];\nvar top_content_module_AnalyticsTopContentModule = (function () {\n    function AnalyticsTopContentModule() {\n    }\n    AnalyticsTopContentModule = top_content_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(top_content_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule,\n                pager_module_PagerModule\n            ],\n            declarations: [\n                top_content_view_component_AnalyticsTopContentView,\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                media_service_MediaService,\n            ]\n        })\n    ], AnalyticsTopContentModule);\n    return AnalyticsTopContentModule;\n}());\n\n\n// CONCATENATED MODULE: ./node_modules/ng2-google-charts/google-charts-loader.service.js\n\nvar google_charts_loader_service_GoogleChartsLoaderService = /** @class */ (function () {\n    function GoogleChartsLoaderService(localeId) {\n        this.chartPackage = {\n            AnnotationChart: 'annotationchart',\n            AreaChart: 'corechart',\n            Bar: 'bar',\n            BarChart: 'corechart',\n            BubbleChart: 'corechart',\n            Calendar: 'calendar',\n            CandlestickChart: 'corechart',\n            ColumnChart: 'corechart',\n            ComboChart: 'corechart',\n            PieChart: 'corechart',\n            Gantt: 'gantt',\n            Gauge: 'gauge',\n            GeoChart: 'geochart',\n            Histogram: 'corechart',\n            Line: 'line',\n            LineChart: 'corechart',\n            Map: 'map',\n            OrgChart: 'orgchart',\n            Sankey: 'sankey',\n            Scatter: 'scatter',\n            ScatterChart: 'corechart',\n            SteppedAreaChart: 'corechart',\n            Table: 'table',\n            Timeline: 'timeline',\n            TreeMap: 'treemap',\n            WordTree: 'wordtree'\n        };\n        this.googleScriptLoadingNotifier = new core_es5[\"EventEmitter\"]();\n        this.googleScriptIsLoading = false;\n        this.localeId = localeId;\n    }\n    GoogleChartsLoaderService.prototype.load = function (chartType, apiKey) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            if (resolve === void 0) { resolve = Function.prototype; }\n            if (reject === void 0) { reject = Function.prototype; }\n            _this.loadGoogleChartsScript().then(function () {\n                var initializer = {\n                    packages: [_this.chartPackage[chartType]],\n                    language: _this.localeId,\n                    callback: resolve\n                };\n                if (apiKey) {\n                    initializer.mapsApiKey = apiKey;\n                }\n                google.charts.load('45.2', initializer);\n            }).catch(function (err) { return reject(); });\n        });\n    };\n    GoogleChartsLoaderService.prototype.loadGoogleChartsScript = function () {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            if (resolve === void 0) { resolve = Function.prototype; }\n            if (reject === void 0) { reject = Function.prototype; }\n            if (typeof google !== 'undefined' && google.charts) {\n                resolve();\n            }\n            else if (!_this.googleScriptIsLoading) {\n                _this.googleScriptIsLoading = true;\n                var script = document.createElement('script');\n                script.type = 'text/javascript';\n                script.src = 'https://www.gstatic.com/charts/loader.js';\n                script.async = true;\n                script.defer = true;\n                script.onload = function () {\n                    _this.googleScriptIsLoading = false;\n                    _this.googleScriptLoadingNotifier.emit(true);\n                    resolve();\n                };\n                script.onerror = function () {\n                    _this.googleScriptIsLoading = false;\n                    _this.googleScriptLoadingNotifier.emit(false);\n                    reject();\n                };\n                document.getElementsByTagName('head')[0].appendChild(script);\n            }\n            else {\n                _this.googleScriptLoadingNotifier.subscribe(function (loaded) {\n                    if (loaded) {\n                        resolve();\n                    }\n                    else {\n                        reject();\n                    }\n                });\n            }\n        });\n    };\n    GoogleChartsLoaderService.decorators = [\n        { type: core_es5[\"Injectable\"] },\n    ];\n    /** @nocollapse */\n    GoogleChartsLoaderService.ctorParameters = function () { return [\n        { type: undefined, decorators: [{ type: core_es5[\"Inject\"], args: [core_es5[\"LOCALE_ID\"],] },] },\n    ]; };\n    return GoogleChartsLoaderService;\n}());\n\n\n// CONCATENATED MODULE: ./node_modules/ng2-google-charts/google-chart/chart-html-tooltip.js\nvar ChartHTMLTooltip = /** @class */ (function () {\n    function ChartHTMLTooltip(el) {\n        this.tooltipDOMElement = el;\n    }\n    ChartHTMLTooltip.prototype.setPosition = function (x, y) {\n        this.tooltipDOMElement.nativeElement.style.left = x + ChartHTMLTooltip.PIXELS;\n        this.tooltipDOMElement.nativeElement.style.top = y + ChartHTMLTooltip.PIXELS;\n    };\n    ChartHTMLTooltip.prototype.getDOMElement = function () {\n        return this.tooltipDOMElement;\n    };\n    ChartHTMLTooltip.PIXELS = 'px';\n    return ChartHTMLTooltip;\n}());\n\n\n// CONCATENATED MODULE: ./node_modules/ng2-google-charts/google-chart/google-chart.component.js\n\n\n\nvar google_chart_component_GoogleChartComponent = /** @class */ (function () {\n    function GoogleChartComponent(el, loaderService) {\n        this.el = el;\n        this.loaderService = loaderService;\n        this.chartSelect = new core_es5[\"EventEmitter\"]();\n        this.chartReady = new core_es5[\"EventEmitter\"]();\n        this.chartError = new core_es5[\"EventEmitter\"]();\n        this.mouseOver = new core_es5[\"EventEmitter\"]();\n        this.mouseOut = new core_es5[\"EventEmitter\"]();\n    }\n    GoogleChartComponent.prototype.ngOnChanges = function (changes) {\n        var _this = this;\n        var key = 'data';\n        if (changes[key]) {\n            if (!this.data) {\n                return;\n            }\n            this.options = this.data.options;\n            this.loaderService.load(this.data.chartType, this.data.apiKey).then(function () {\n                if (_this.wrapper === undefined || _this.wrapper.getChartType() !== _this.data.chartType) {\n                    _this.wrapper = new google.visualization.ChartWrapper(_this.data);\n                }\n                else {\n                    _this.unregisterChartEvents();\n                    _this.wrapper.setDataTable(_this.data.dataTable);\n                    _this.wrapper.setOptions(_this.options);\n                }\n                _this.registerChartWrapperEvents();\n                _this.reformat();\n                _this.redraw();\n            });\n        }\n    };\n    GoogleChartComponent.prototype.redraw = function () {\n        this.reformat();\n        this.wrapper.draw(this.el.nativeElement.querySelector('div'));\n    };\n    /**\n     * Applies formatters to data columns, if defined\n     */\n    /**\n       * Applies formatters to data columns, if defined\n       */\n    GoogleChartComponent.prototype.reformat = /**\n       * Applies formatters to data columns, if defined\n       */\n    function () {\n        if (!this.data) {\n            return;\n        }\n        if (this.data.formatters !== undefined) {\n            for (var _i = 0, _a = this.data.formatters; _i < _a.length; _i++) {\n                var formatterConfig = _a[_i];\n                var formatterConstructor = google.visualization[formatterConfig.type];\n                var formatterOptions = formatterConfig.options;\n                var formatter = new formatterConstructor(formatterOptions);\n                for (var _b = 0, _c = formatterConfig.columns; _b < _c.length; _b++) {\n                    var col = _c[_b];\n                    formatter.format(this.wrapper.getDataTable(), col);\n                }\n            }\n        }\n    };\n    GoogleChartComponent.prototype.getSelectorBySeriesType = function (seriesType) {\n        var selectors = {\n            bars: 'bar#%s#%r',\n            haxis: 'hAxis#0#label',\n            line: 'point#%s#%r',\n            legend: 'legendentry#%s',\n            area: 'point#%s#%r'\n        };\n        var selector = selectors[seriesType];\n        return selector;\n    };\n    /**\n     * Given a column number, counts how many\n     * columns have rol==\"data\". Those are mapped\n     * one-to-one to the series array. When rol is not defined\n     * a column of type number means a series column.\n     * @param column to inspect\n     */\n    /**\n      * Given a column number, counts how many\n      * columns have rol==\"data\". Those are mapped\n      * one-to-one to the series array. When rol is not defined\n      * a column of type number means a series column.\n      * @param column to inspect\n      */\n    GoogleChartComponent.prototype.getSeriesByColumn = /**\n      * Given a column number, counts how many\n      * columns have rol==\"data\". Those are mapped\n      * one-to-one to the series array. When rol is not defined\n      * a column of type number means a series column.\n      * @param column to inspect\n      */\n    function (column) {\n        var series = 0;\n        var dataTable = this.wrapper.getDataTable();\n        for (var i = column - 1; i >= 0; i--) {\n            var role = dataTable.getColumnRole(i);\n            var type = dataTable.getColumnType(i);\n            if (role === 'data' || type === 'number') {\n                series++;\n            }\n        }\n        return series;\n    };\n    GoogleChartComponent.prototype.getBoundingBoxForItem = function (item) {\n        var boundingBox = { top: 0, left: 0, width: 0, height: 0 };\n        if (this.cli) {\n            var column = item.column;\n            var series = this.getSeriesByColumn(column);\n            var bar = item.row;\n            var row = item.row;\n            var seriesType = this.options.seriesType;\n            if (this.options.series && this.options.series[series] && this.options.series[series].type) {\n                seriesType = this.options.series[series].type;\n            }\n            if (seriesType) {\n                var selector = this.getSelectorBySeriesType(seriesType);\n                if (selector) {\n                    selector = selector.replace('%s', series + '').replace('%c', column + '').replace('%r', row + '');\n                    var box = this.cli.getBoundingBox(selector);\n                    if (box) {\n                        boundingBox = box;\n                    }\n                }\n            }\n        }\n        return boundingBox;\n    };\n    GoogleChartComponent.prototype.getValueAtPosition = function (position) {\n        if (position.row === null) {\n            return null;\n        }\n        var dataTable = this.wrapper.getDataTable();\n        var value = dataTable.getValue(position.row, position.column);\n        return value;\n    };\n    GoogleChartComponent.prototype.getColumnTypeAtPosition = function (position) {\n        var dataTable = this.wrapper.getDataTable();\n        var type = dataTable.getColumnType(position.column) || '';\n        return type;\n    };\n    GoogleChartComponent.prototype.getColumnLabelAtPosition = function (position) {\n        var dataTable = this.wrapper.getDataTable();\n        var type = dataTable.getColumnLabel(position.column) || '';\n        return type;\n    };\n    GoogleChartComponent.prototype.getHTMLTooltip = function () {\n        var tooltipER = new core_es5[\"ElementRef\"](this.el.nativeElement.querySelector('.google-visualization-tooltip'));\n        return new ChartHTMLTooltip(tooltipER);\n    };\n    GoogleChartComponent.prototype.parseMouseEvent = function (item) {\n        var event = {\n            position: item,\n            boundingBox: this.getBoundingBoxForItem(item),\n            value: this.getValueAtPosition(item),\n            columnType: this.getColumnTypeAtPosition(item),\n            columnLabel: this.getColumnLabelAtPosition(item)\n        };\n        return event;\n    };\n    GoogleChartComponent.prototype.unregisterChartEvents = function () {\n        google.visualization.events.removeAllListeners(this.wrapper);\n    };\n    GoogleChartComponent.prototype.registerChartEvents = function () {\n        var _this = this;\n        if (this.mouseOver.observers.length > 0) {\n            var chart = this.wrapper.getChart();\n            this.cli = chart.getChartLayoutInterface();\n            google.visualization.events.addListener(chart, 'onmouseover', function (item) {\n                var event = _this.parseMouseEvent(item);\n                event.tooltip = _this.getHTMLTooltip();\n                _this.mouseOver.emit(event);\n            });\n        }\n        if (this.mouseOut.observers.length > 0) {\n            var chart = this.wrapper.getChart();\n            this.cli = chart.getChartLayoutInterface();\n            google.visualization.events.addListener(chart, 'onmouseout', function (item) {\n                var event = _this.parseMouseEvent(item);\n                _this.mouseOut.emit(event);\n            });\n        }\n    };\n    GoogleChartComponent.prototype.registerChartWrapperEvents = function () {\n        var _this = this;\n        google.visualization.events.addListener(this.wrapper, 'ready', function () {\n            _this.chartReady.emit({ message: 'Chart ready' });\n            _this.registerChartEvents();\n        });\n        google.visualization.events.addListener(this.wrapper, 'error', function (error) {\n            _this.chartError.emit(error);\n        });\n        google.visualization.events.addListener(this.wrapper, 'select', function () {\n            var event;\n            var selection = _this.wrapper.visualization.getSelection()[0];\n            if (selection !== undefined) {\n                var selectedRowValues = [];\n                var selectedRowFormattedValues = [];\n                if (selection.row !== null) {\n                    var dataTable = _this.wrapper.getDataTable();\n                    var numberOfColumns = dataTable.getNumberOfColumns();\n                    for (var i = 0; i < numberOfColumns; i++) {\n                        selectedRowValues.push(dataTable.getValue(selection.row, i));\n                        selectedRowFormattedValues.push(dataTable.getFormattedValue(selection.row, i));\n                    }\n                }\n                event = (_a = {\n                        message: 'select',\n                        row: selection.row,\n                        column: selection.column\n                    },\n                    _a['selectedRowValues'] = selectedRowValues,\n                    _a['selectedRowFormattedValues'] = selectedRowFormattedValues,\n                    _a);\n            }\n            else {\n                event = {\n                    message: 'deselect',\n                    row: null,\n                    column: null,\n                    selectedRowValues: [],\n                    selectedRowFormattedValues: []\n                };\n            }\n            _this.chartSelect.emit(event);\n            var _a;\n        });\n    };\n    GoogleChartComponent.decorators = [\n        { type: core_es5[\"Component\"], args: [{\n                    selector: 'google-chart',\n                    template: '<div></div>',\n                    changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n                },] },\n    ];\n    /** @nocollapse */\n    GoogleChartComponent.ctorParameters = function () { return [\n        { type: core_es5[\"ElementRef\"], },\n        { type: google_charts_loader_service_GoogleChartsLoaderService, },\n    ]; };\n    GoogleChartComponent.propDecorators = {\n        \"data\": [{ type: core_es5[\"Input\"] },],\n        \"chartReady\": [{ type: core_es5[\"Output\"] },],\n        \"chartError\": [{ type: core_es5[\"Output\"] },],\n        \"chartSelect\": [{ type: core_es5[\"Output\"] },],\n        \"mouseOver\": [{ type: core_es5[\"Output\"] },],\n        \"mouseOut\": [{ type: core_es5[\"Output\"] },],\n    };\n    return GoogleChartComponent;\n}());\n\n\n// CONCATENATED MODULE: ./node_modules/ng2-google-charts/google-chart/chart-mouse-event.js\nvar chart_mouse_event___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar ChartMouseEvent = /** @class */ (function () {\n    function ChartMouseEvent() {\n    }\n    return ChartMouseEvent;\n}());\n\n/**\n * @deprecated Use ChartMouseOverEvent instead\n */\nvar /**\n * @deprecated Use ChartMouseOverEvent instead\n */\nMouseOverEvent = /** @class */ (function (_super) {\n    chart_mouse_event___extends(MouseOverEvent, _super);\n    function MouseOverEvent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return MouseOverEvent;\n}(ChartMouseEvent));\n/**\n * @deprecated Use ChartMouseOverEvent instead\n */\n\nvar ChartMouseOverEvent = /** @class */ (function (_super) {\n    chart_mouse_event___extends(ChartMouseOverEvent, _super);\n    function ChartMouseOverEvent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return ChartMouseOverEvent;\n}(ChartMouseEvent));\n\nvar ChartMouseOutEvent = /** @class */ (function (_super) {\n    chart_mouse_event___extends(ChartMouseOutEvent, _super);\n    function ChartMouseOutEvent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return ChartMouseOutEvent;\n}(ChartMouseEvent));\n\n\n// CONCATENATED MODULE: ./node_modules/ng2-google-charts/google-charts.module.js\n\n\n\nvar google_charts_module_Ng2GoogleChartsModule = /** @class */ (function () {\n    function Ng2GoogleChartsModule() {\n    }\n    Ng2GoogleChartsModule.decorators = [\n        { type: core_es5[\"NgModule\"], args: [{\n                    declarations: [\n                        google_chart_component_GoogleChartComponent\n                    ],\n                    providers: [\n                        google_charts_loader_service_GoogleChartsLoaderService\n                    ],\n                    exports: [\n                        google_chart_component_GoogleChartComponent\n                    ]\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2GoogleChartsModule.ctorParameters = function () { return []; };\n    return Ng2GoogleChartsModule;\n}());\n\n\n// CONCATENATED MODULE: ./node_modules/ng2-google-charts/index.js\n\n\n\n\n\n// CONCATENATED MODULE: ./src/module/analytics/geo/geo.view.component.ts\nvar geo_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar geo_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar geo_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar geo_view_component_AnalyticsGeoView = (function (_super) {\n    geo_view_component___extends(AnalyticsGeoView, _super);\n    function AnalyticsGeoView(locale, translation, url, router, user, analyticsService, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.url = url;\n        _this.router = router;\n        _this.user = user;\n        _this.analyticsService = analyticsService;\n        _this.cdr = cdr;\n        _this.activeGranularity = 'day';\n        _this.granularityTypes = ['all'];\n        _this.chartType = 'lineTime';\n        var range = _this.user.getDateRangeSelection();\n        _this.startDate = range.startDate;\n        _this.endDate = range.endDate;\n        _this.loadingData = true;\n        _this.pagingOptions = {\n            page: 1,\n            page_size: 10,\n            total_items: 0\n        };\n        return _this;\n    }\n    AnalyticsGeoView.prototype.ngOnInit = function () {\n        this.loadData();\n    };\n    AnalyticsGeoView.prototype.loadData = function () {\n        var _this = this;\n        this.loadingData = true;\n        this.analyticsService.getGeoCountriesStats(this.startDate, this.endDate).subscribe(function (data) {\n            var viewsTotal = 0;\n            for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n                var rec = data_1[_i];\n                viewsTotal += parseInt(rec.views);\n            }\n            var geoStats = [];\n            var pos = 0;\n            for (var _a = 0, data_2 = data; _a < data_2.length; _a++) {\n                var rec = data_2[_a];\n                var views = parseInt(rec.views);\n                pos += 1;\n                geoStats.push({\n                    pos: pos,\n                    views: views,\n                    views_share: (100.0 * views / viewsTotal),\n                    country: rec.country\n                });\n            }\n            _this.geoStats = geoStats;\n            _this.geoStatsForPage = geoStats.slice(0, _this.pagingOptions.page_size);\n            _this.pagingOptions.page = 1;\n            _this.pagingOptions.total_items = geoStats.length;\n            var chartData = {\n                chartType: 'GeoChart',\n                dataTable: new Array(),\n                apiKey: _this.analyticsService.getGoogleMapsApiKey(),\n                options: { colorAxis: { colors: ['#d9ebfb', '#348fe2'] } }\n            };\n            chartData.dataTable.push(['Country', 'Views']);\n            for (var _b = 0, data_3 = data; _b < data_3.length; _b++) {\n                var rec = data_3[_b];\n                chartData.dataTable.push([rec.country.country_code, parseInt(rec.views)]);\n            }\n            _this.mapChartData = chartData;\n            _this.loadingData = false;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsGeoView.prototype.onDateRangeChanged = function (dateRange) {\n        if ((this.startDate.unix() == dateRange[0].unix()) && (this.endDate.unix() == dateRange[1].unix())) {\n            return;\n        }\n        this.startDate = dateRange[0].startOf('day');\n        this.endDate = dateRange[1].startOf('day');\n        this.user.setDateRangeSelection(this.startDate, this.endDate);\n        this.loadData();\n    };\n    AnalyticsGeoView.prototype.onPageChanged = function (page) {\n        this.pagingOptions.page = page;\n        var itemsFrom = (page - 1) * this.pagingOptions.page_size;\n        var itemsTo = itemsFrom + this.pagingOptions.page_size;\n        this.geoStatsForPage = this.geoStats.slice(itemsFrom, itemsTo);\n    };\n    AnalyticsGeoView.prototype.onMapRegionClick = function (e) {\n        if (e.selectedRowValues && e.selectedRowValues.length > 0) {\n            var selectedCountryCode = e.selectedRowValues[0].toLowerCase();\n            this.router.navigate(['admin', 'analytics', 'geo', selectedCountryCode]);\n        }\n    };\n    var _a, _b, _c, _d, _e, _f, _g;\n    AnalyticsGeoView = geo_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-geo-view',\n            template: __webpack_require__(1384),\n            styles: [\n                ':host .chart-loader {height:300px;position:relative;}',\n                ':host .table-loader {height:300px;position:relative;}',\n                ':host .table .flag-icon {position:relative;top:-1px;margin-right:10px;}',\n                ':host .table tbody tr {cursor:pointer;}',\n                ':host .analytics-geo-map {padding:0px 200px 20px 200px; max-width: 1200px; margin-left: auto; margin-right: auto;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        geo_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _c || Object, typeof (_d = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _f || Object, typeof (_g = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _g || Object])\n    ], AnalyticsGeoView);\n    return AnalyticsGeoView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/geo/geo.country.view.component.ts\nvar geo_country_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar geo_country_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar geo_country_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar geo_country_view_component_AnalyticsGeoCountryView = (function (_super) {\n    geo_country_view_component___extends(AnalyticsGeoCountryView, _super);\n    function AnalyticsGeoCountryView(locale, translation, route, url, user, analyticsService, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.route = route;\n        _this.url = url;\n        _this.user = user;\n        _this.analyticsService = analyticsService;\n        _this.cdr = cdr;\n        _this.SCOPE_TYPE_REGIONS = 'regions';\n        _this.SCOPE_TYPE_CITIES = 'cities';\n        _this.MAX_CITIES_ON_MAP = 20;\n        _this.activeGranularity = 'day';\n        _this.granularityTypes = ['all'];\n        _this.chartType = 'lineTime';\n        var range = _this.user.getDateRangeSelection();\n        _this.startDate = range.startDate;\n        _this.endDate = range.endDate;\n        _this.loadingData = true;\n        _this.pagingOptions = {\n            page: 1,\n            page_size: 10,\n            total_items: 0\n        };\n        _this.scopeType = _this.SCOPE_TYPE_REGIONS;\n        _this.mapColorRange = ['#d9ebfb', '#348fe2'];\n        _this.route.params.subscribe(function (rec) {\n            _this.countryCode = rec.countryCode;\n            _this.initialLoadData();\n        });\n        var regionsMapChartFix = __webpack_require__(107);\n        _this.mapChartRegionsReducingMappings = regionsMapChartFix.reducingMappings;\n        _this.mapChartRegionsSharingSet = regionsMapChartFix.sharingMapping;\n        _this.mapChartRegionsSkippingsSet = regionsMapChartFix.skippingSet;\n        return _this;\n    }\n    AnalyticsGeoCountryView.prototype.ngOnInit = function () {\n        this.initialLoadData();\n    };\n    AnalyticsGeoCountryView.prototype.initialLoadData = function () {\n        if (this.geoStats == null) {\n            this.geoStats = [];\n            this.loadData();\n        }\n    };\n    AnalyticsGeoCountryView.prototype.loadData = function () {\n        this.loadingData = true;\n        if (!this.countryCode) {\n            return;\n        }\n        if (this.scopeType == this.SCOPE_TYPE_REGIONS) {\n            this.loadDataForRegions();\n        }\n        else {\n            this.loadDataForCities();\n        }\n    };\n    AnalyticsGeoCountryView.prototype.makeRegionDataForMapChart = function (selectedCountryCode, data) {\n        var result = new Array();\n        if (selectedCountryCode in this.mapChartRegionsReducingMappings) {\n            result = this.reduceRegionsForMapChart(selectedCountryCode, data);\n        }\n        else if (selectedCountryCode in this.mapChartRegionsSharingSet) {\n            result = this.makeSharedRegionsDataForMapChart(selectedCountryCode, data);\n        }\n        else if (selectedCountryCode in this.mapChartRegionsSkippingsSet) {\n            var totalViews = 0;\n            for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n                var rec = data_1[_i];\n                totalViews += parseInt(rec.views);\n            }\n            result.push([selectedCountryCode, totalViews]);\n        }\n        else {\n            for (var _a = 0, data_2 = data; _a < data_2.length; _a++) {\n                var rec = data_2[_a];\n                var regName = rec.region.subdiv_code ? rec.region.subdiv_code : rec.region.name;\n                result.push([regName, parseInt(rec.views)]);\n            }\n        }\n        result.unshift(['Region', 'Views']);\n        return result;\n    };\n    AnalyticsGeoCountryView.prototype.makeSharedRegionsDataForMapChart = function (selectedCountryCode, data) {\n        var result = new Array();\n        for (var _i = 0, data_3 = data; _i < data_3.length; _i++) {\n            var rec = data_3[_i];\n            var codeSrc = rec.region.subdiv_code;\n            if (!(codeSrc in this.mapChartRegionsSharingSet[selectedCountryCode])) {\n                continue;\n            }\n            var codesTrg = this.mapChartRegionsSharingSet[selectedCountryCode][codeSrc];\n            for (var _a = 0, codesTrg_1 = codesTrg; _a < codesTrg_1.length; _a++) {\n                var code = codesTrg_1[_a];\n                result.push([code, Math.floor(parseInt(rec.views) / codesTrg.length)]);\n            }\n        }\n        return result;\n    };\n    AnalyticsGeoCountryView.prototype.reduceRegionsForMapChart = function (selectedCountryCode, data) {\n        var m = {};\n        for (var _i = 0, data_4 = data; _i < data_4.length; _i++) {\n            var rec = data_4[_i];\n            var codeSrc = rec.region.subdiv_code;\n            var codeTrg = (codeSrc in this.mapChartRegionsReducingMappings[selectedCountryCode]) ? this.mapChartRegionsReducingMappings[selectedCountryCode][codeSrc] : codeSrc;\n            if (!(codeTrg in m)) {\n                m[codeTrg] = 0;\n            }\n            m[codeTrg] = m[codeTrg] + parseInt(rec.views);\n        }\n        var result = new Array();\n        for (var code in m) {\n            result.push([code, m[code]]);\n        }\n        return result;\n    };\n    AnalyticsGeoCountryView.prototype.loadDataForRegions = function () {\n        var _this = this;\n        this.analyticsService.getGeoRegionsStats(this.startDate, this.endDate, this.countryCode).subscribe(function (data) {\n            var selectedCountryCode = _this.countryCode.toUpperCase();\n            var viewsTotal = 0;\n            for (var _i = 0, data_5 = data; _i < data_5.length; _i++) {\n                var rec = data_5[_i];\n                viewsTotal += parseInt(rec.views);\n            }\n            var geoStats = [];\n            var pos = 0;\n            for (var _a = 0, data_6 = data; _a < data_6.length; _a++) {\n                var rec = data_6[_a];\n                var views = parseInt(rec.views);\n                pos += 1;\n                geoStats.push({\n                    pos: pos,\n                    views: views,\n                    views_share: (100.0 * views / viewsTotal),\n                    name: rec.region.name\n                });\n            }\n            var mapChartResolution = (selectedCountryCode in _this.mapChartRegionsSkippingsSet) ? 'countries' : 'provinces';\n            _this.mapChartData = {\n                chartType: 'GeoChart',\n                dataTable: _this.makeRegionDataForMapChart(selectedCountryCode, data),\n                apiKey: _this.analyticsService.getGoogleMapsApiKey(),\n                options: {\n                    colorAxis: { colors: _this.mapColorRange },\n                    resolution: mapChartResolution,\n                    region: selectedCountryCode\n                }\n            };\n            _this.loadDataUpdateModelOnDataLoad(geoStats);\n        });\n    };\n    AnalyticsGeoCountryView.prototype.loadDataForCities = function () {\n        var _this = this;\n        this.analyticsService.getGeoCitiesStats(this.startDate, this.endDate, this.countryCode).subscribe(function (data) {\n            var viewsTotal = 0;\n            for (var _i = 0, data_7 = data; _i < data_7.length; _i++) {\n                var rec = data_7[_i];\n                viewsTotal += parseInt(rec.views);\n            }\n            var geoStats = [];\n            var pos = 0;\n            for (var _a = 0, data_8 = data; _a < data_8.length; _a++) {\n                var rec = data_8[_a];\n                var views = parseInt(rec.views);\n                pos += 1;\n                geoStats.push({\n                    pos: pos,\n                    views: views,\n                    views_share: (100.0 * views / viewsTotal),\n                    name: rec.city.name\n                });\n            }\n            var chartData = {\n                chartType: 'GeoChart',\n                dataTable: new Array(),\n                apiKey: _this.analyticsService.getGoogleMapsApiKey(),\n                options: {\n                    colorAxis: { colors: _this.mapColorRange },\n                    displayMode: 'markers',\n                    region: _this.countryCode.toUpperCase()\n                }\n            };\n            chartData.dataTable.push(['City', 'Views']);\n            for (var _b = 0, _c = data.slice(0, _this.MAX_CITIES_ON_MAP); _b < _c.length; _b++) {\n                var rec = _c[_b];\n                chartData.dataTable.push([rec.city.name, parseInt(rec.views)]);\n            }\n            _this.mapChartData = chartData;\n            _this.loadDataUpdateModelOnDataLoad(geoStats);\n        });\n    };\n    AnalyticsGeoCountryView.prototype.loadDataUpdateModelOnDataLoad = function (geoStats) {\n        this.geoStats = geoStats;\n        this.geoStatsForPage = geoStats.slice(0, this.pagingOptions.page_size);\n        this.pagingOptions.page = 1;\n        this.pagingOptions.total_items = geoStats.length;\n        this.loadingData = false;\n        this.cdr.markForCheck();\n    };\n    AnalyticsGeoCountryView.prototype.onDateRangeChanged = function (dateRange) {\n        if ((this.startDate.unix() == dateRange[0].unix()) && (this.endDate.unix() == dateRange[1].unix())) {\n            return;\n        }\n        this.startDate = dateRange[0].startOf('day');\n        this.endDate = dateRange[1].startOf('day');\n        this.user.setDateRangeSelection(this.startDate, this.endDate);\n        this.loadData();\n    };\n    AnalyticsGeoCountryView.prototype.onScopeTypeChange = function (t) {\n        this.scopeType = t;\n        this.loadData();\n    };\n    AnalyticsGeoCountryView.prototype.onPageChanged = function (page) {\n        this.pagingOptions.page = page;\n        var itemsFrom = (page - 1) * this.pagingOptions.page_size;\n        var itemsTo = itemsFrom + this.pagingOptions.page_size;\n        this.geoStatsForPage = this.geoStats.slice(itemsFrom, itemsTo);\n    };\n    var _a, _b, _c, _d, _e, _f, _g;\n    AnalyticsGeoCountryView = geo_country_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-geo-view',\n            template: __webpack_require__(1385),\n            styles: [\n                ':host .chart-loader {height:300px;position:relative;}',\n                ':host .table-loader {height:300px;position:relative;}',\n                ':host .table .flag-icon {position:relative;top:-1px;margin-right:10px;}',\n                ':host .analytics-geo-map {padding:0px 200px 20px 200px; max-width: 1200px; margin-left: auto; margin-right: auto;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        geo_country_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _c || Object, typeof (_d = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _f || Object, typeof (_g = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _g || Object])\n    ], AnalyticsGeoCountryView);\n    return AnalyticsGeoCountryView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/geo/geo.module.ts\nvar geo_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar geo_module_routes = [\n    { path: '', component: geo_view_component_AnalyticsGeoView },\n    { path: ':countryCode', component: geo_country_view_component_AnalyticsGeoCountryView },\n];\nvar geo_module_AnalyticsGeoModule = (function () {\n    function AnalyticsGeoModule() {\n    }\n    AnalyticsGeoModule = geo_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(geo_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule,\n                TagInputModule,\n                pager_module_PagerModule,\n                google_charts_module_Ng2GoogleChartsModule,\n            ],\n            declarations: [\n                geo_view_component_AnalyticsGeoView,\n                geo_country_view_component_AnalyticsGeoCountryView\n            ],\n            providers: [\n                analytics_service_AnalyticsService\n            ]\n        })\n    ], AnalyticsGeoModule);\n    return AnalyticsGeoModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/technology/technology.view.component.ts\nvar technology_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar technology_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar technology_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar technology_view_component_AnalyticsTechnologyView = (function (_super) {\n    technology_view_component___extends(AnalyticsTechnologyView, _super);\n    function AnalyticsTechnologyView(locale, translation, analyticsService, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.analyticsService = analyticsService;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.activeGranularity = 'day';\n        _this.granularityTypes = ['all'];\n        _this.chartType = 'lineTime';\n        var range = _this.user.getDateRangeSelection();\n        _this.startDate = range.startDate;\n        _this.endDate = range.endDate;\n        _this.deviceTableStats = [];\n        _this.osTableStats = [];\n        _this.browserTableStats = [];\n        _this.topDeviceChartData = [];\n        _this.topDeviceChartLabels = [];\n        _this.topBrowserChartData = [];\n        _this.topBrowserChartLabels = [];\n        _this.topOsChartData = [];\n        _this.topOsChartLabels = [];\n        _this.loadingData = true;\n        _this.iconClassForDeviceType = {\n            '0': 'fa-question',\n            '1': 'fa-desktop',\n            '2': 'fa-mobile',\n            '3': 'fa-tablet',\n            '4': 'fa-gamepad',\n            '5': 'fa-television',\n            '6': 'fa-car',\n            '7': 'fa-picture-o',\n            '8': 'fa-camera',\n            '9': 'fa-headphones'\n        };\n        return _this;\n    }\n    AnalyticsTechnologyView.prototype.ngOnInit = function () {\n        this.loadData();\n    };\n    AnalyticsTechnologyView.prototype.makeHiddenSeriesMapForQuickSearch = function (series) {\n        var result = {};\n        for (var _i = 0, series_1 = series; _i < series_1.length; _i++) {\n            var rec = series_1[_i];\n            var recObj = rec;\n            var shouldBeHidden = false;\n            if (recObj.hidden) {\n                shouldBeHidden = true;\n            }\n            if (recObj._meta) {\n                for (var k in recObj._meta) {\n                    if ((typeof recObj._meta[k].hidden !== 'undefined') && (recObj._meta[k].hidden !== null)) {\n                        shouldBeHidden = recObj._meta[k].hidden;\n                    }\n                }\n            }\n            if (shouldBeHidden) {\n                result[rec.label] = true;\n            }\n        }\n        return result;\n    };\n    AnalyticsTechnologyView.prototype.loadData = function (onUserAction) {\n        var _this = this;\n        if (onUserAction === void 0) { onUserAction = false; }\n        var hiddenChartSeriesForDeviceTypeLabels = null;\n        var hiddenChartSeriesForBrowserFamilyLabels = null;\n        var hiddenChartSeriesForOsFamilyLabels = null;\n        this.loadingData = true;\n        if (onUserAction) {\n            hiddenChartSeriesForDeviceTypeLabels = this.makeHiddenSeriesMapForQuickSearch(this.topDeviceChartData);\n            hiddenChartSeriesForBrowserFamilyLabels = this.makeHiddenSeriesMapForQuickSearch(this.topBrowserChartData);\n            hiddenChartSeriesForOsFamilyLabels = this.makeHiddenSeriesMapForQuickSearch(this.topOsChartData);\n        }\n        this.analyticsService.getTechnologyStatsForRange(this.startDate, this.endDate, this.activeGranularity).subscribe(function (data) {\n            _this.deviceTableStats = _this.processDeviceTypeData(data.device_type.summary);\n            _this.osTableStats = _this.processOsFamilyData(data.os_family.summary);\n            _this.browserTableStats = _this.processBrowserFamilyData(data.browser_family.summary);\n            var topDeviceChartData = _this.processDeviceTypeDataForCharts(data.account_history, data.device_type.top_history);\n            var topBrowserFamilyChartData = _this.processBrowserFamilyDataForCharts(data.account_history, data.browser_family.top_history);\n            var topOsFamilyChartData = _this.processOsFamilyDataForCharts(data.account_history, data.os_family.top_history);\n            if (onUserAction) {\n                for (var _i = 0, _a = topDeviceChartData.data; _i < _a.length; _i++) {\n                    var rec = _a[_i];\n                    rec.hidden = (rec.label && (rec.label in hiddenChartSeriesForDeviceTypeLabels));\n                }\n                for (var _b = 0, _c = topBrowserFamilyChartData.data; _b < _c.length; _b++) {\n                    var rec = _c[_b];\n                    rec.hidden = (rec.label && (rec.label in hiddenChartSeriesForBrowserFamilyLabels));\n                }\n                for (var _d = 0, _e = topOsFamilyChartData.data; _d < _e.length; _d++) {\n                    var rec = _e[_d];\n                    rec.hidden = (rec.label && (rec.label in hiddenChartSeriesForOsFamilyLabels));\n                }\n            }\n            _this.topDeviceChartData = topDeviceChartData.data;\n            _this.topDeviceChartLabels = topDeviceChartData.labels;\n            _this.topBrowserChartData = topBrowserFamilyChartData.data;\n            _this.topBrowserChartLabels = topBrowserFamilyChartData.labels;\n            _this.topOsChartData = topOsFamilyChartData.data;\n            _this.topOsChartLabels = topOsFamilyChartData.labels;\n            _this.loadingData = false;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsTechnologyView.prototype.processDeviceTypeData = function (deviceType) {\n        var result = [];\n        var totalViews = 0;\n        for (var _i = 0, deviceType_1 = deviceType; _i < deviceType_1.length; _i++) {\n            var rec = deviceType_1[_i];\n            var views = parseInt(rec.views, 10);\n            totalViews += views;\n            var iconClass = this.iconClassForDeviceType[rec.device_type];\n            result.push({\n                name: rec.device_type_name,\n                views: views,\n                iconClass: iconClass ? iconClass : '',\n                bgColorHex: '',\n                views_share: 0\n            });\n        }\n        if (totalViews > 0) {\n            for (var _a = 0, result_1 = result; _a < result_1.length; _a++) {\n                var rec = result_1[_a];\n                rec.views_share = 100.0 * rec.views / totalViews;\n            }\n        }\n        result.sort(function (a, b) {\n            return b.views - a.views;\n        });\n        for (var i = 0; i < result.length; i++) {\n            var rgbArr = ChartConfigData.datasetColors[(i + 1) % ChartConfigData.datasetColors.length];\n            result[i].bgColorHex = '#' + this.toHex(rgbArr[0], 2) + this.toHex(rgbArr[1], 2) + this.toHex(rgbArr[2], 2);\n        }\n        return result;\n    };\n    AnalyticsTechnologyView.prototype.toHex = function (i, minPos) {\n        var result = '';\n        if (i) {\n            result = i.toString(16);\n        }\n        while (result.length < minPos) {\n            result = '0' + result;\n        }\n        return result;\n    };\n    AnalyticsTechnologyView.prototype.processOsFamilyData = function (osFamily) {\n        var result = [];\n        var totalViews = 0;\n        for (var _i = 0, osFamily_1 = osFamily; _i < osFamily_1.length; _i++) {\n            var rec = osFamily_1[_i];\n            var views = parseInt(rec.views, 10);\n            totalViews += views;\n            result.push({\n                name: rec.os_family_name,\n                views: views,\n                views_share: 0\n            });\n        }\n        if (totalViews > 0) {\n            for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n                var rec = result_2[_a];\n                rec.views_share = 100.0 * rec.views / totalViews;\n            }\n        }\n        result.sort(function (a, b) {\n            return b.views - a.views;\n        });\n        return result;\n    };\n    AnalyticsTechnologyView.prototype.processBrowserFamilyData = function (browserFamily) {\n        var result = [];\n        var totalViews = 0;\n        for (var _i = 0, browserFamily_1 = browserFamily; _i < browserFamily_1.length; _i++) {\n            var rec = browserFamily_1[_i];\n            var views = parseInt(rec.views, 10);\n            totalViews += views;\n            result.push({\n                name: rec.browser_family_name,\n                views: views,\n                views_share: 0\n            });\n        }\n        if (totalViews > 0) {\n            for (var _a = 0, result_3 = result; _a < result_3.length; _a++) {\n                var rec = result_3[_a];\n                rec.views_share = 100.0 * rec.views / totalViews;\n            }\n        }\n        result.sort(function (a, b) {\n            return b.views - a.views;\n        });\n        return result;\n    };\n    AnalyticsTechnologyView.prototype.buildDataStructForChartAndInitWithAccountHistory = function (accountHistory) {\n        var result = {\n            data: new Array(),\n            labels: new Array()\n        };\n        var accountData = {\n            data: new Array(),\n            label: this.translation.translate('ANALYTICS_TECHNOLOGY.LABEL_TOTAL_VIEWS'),\n            fill: false,\n            hidden: true\n        };\n        for (var _i = 0, accountHistory_1 = accountHistory; _i < accountHistory_1.length; _i++) {\n            var rec = accountHistory_1[_i];\n            accountData.data.push(parseInt(rec.views, 10));\n            result.labels.push(moment_default.a.unix(rec.from).toISOString());\n        }\n        result.data.push(accountData);\n        return result;\n    };\n    AnalyticsTechnologyView.prototype.processDeviceTypeDataForCharts = function (accountHistory, topHistory) {\n        var result = this.buildDataStructForChartAndInitWithAccountHistory(accountHistory);\n        for (var _i = 0, topHistory_1 = topHistory; _i < topHistory_1.length; _i++) {\n            var itemHistory = topHistory_1[_i];\n            var itemData = {\n                data: new Array(),\n                label: itemHistory.device_type_name\n            };\n            for (var _a = 0, _b = itemHistory.history; _a < _b.length; _a++) {\n                var rec = _b[_a];\n                itemData.data.push(parseInt(rec.views, 10));\n            }\n            result.data.push(itemData);\n        }\n        return result;\n    };\n    AnalyticsTechnologyView.prototype.processBrowserFamilyDataForCharts = function (accountHistory, topHistory) {\n        var result = this.buildDataStructForChartAndInitWithAccountHistory(accountHistory);\n        for (var _i = 0, topHistory_2 = topHistory; _i < topHistory_2.length; _i++) {\n            var itemHistory = topHistory_2[_i];\n            var itemData = {\n                data: new Array(),\n                label: itemHistory.browser_family_name\n            };\n            for (var _a = 0, _b = itemHistory.history; _a < _b.length; _a++) {\n                var rec = _b[_a];\n                itemData.data.push(parseInt(rec.views, 10));\n            }\n            result.data.push(itemData);\n        }\n        return result;\n    };\n    AnalyticsTechnologyView.prototype.processOsFamilyDataForCharts = function (accountHistory, topHistory) {\n        var result = this.buildDataStructForChartAndInitWithAccountHistory(accountHistory);\n        for (var _i = 0, topHistory_3 = topHistory; _i < topHistory_3.length; _i++) {\n            var itemHistory = topHistory_3[_i];\n            var itemData = {\n                data: new Array(),\n                label: itemHistory.os_family_name\n            };\n            for (var _a = 0, _b = itemHistory.history; _a < _b.length; _a++) {\n                var rec = _b[_a];\n                itemData.data.push(parseInt(rec.views, 10));\n            }\n            result.data.push(itemData);\n        }\n        return result;\n    };\n    AnalyticsTechnologyView.prototype.onDateRangeChanged = function (dateRange) {\n        if ((this.startDate.unix() == dateRange[0].unix()) && (this.endDate.unix() == dateRange[1].unix())) {\n            return;\n        }\n        this.startDate = dateRange[0].startOf('day');\n        this.endDate = dateRange[1].startOf('day');\n        this.user.setDateRangeSelection(this.startDate, this.endDate);\n        this.loadData(true);\n    };\n    AnalyticsTechnologyView.prototype.onGranularityChange = function (granularity) {\n        if (this.activeGranularity == granularity) {\n            return;\n        }\n        this.activeGranularity = granularity;\n        this.loadData(true);\n    };\n    var _a, _b, _c, _d, _e;\n    AnalyticsTechnologyView = technology_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-technology-view',\n            template: __webpack_require__(1386),\n            styles: [\n                ':host .chart-loader {height:300px;position:relative;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        technology_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _c || Object, typeof (_d = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object])\n    ], AnalyticsTechnologyView);\n    return AnalyticsTechnologyView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/technology/technology.module.ts\nvar technology_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar technology_module_routes = [\n    { path: '', component: technology_view_component_AnalyticsTechnologyView },\n];\nvar technology_module_AnalyticsTechnologyModule = (function () {\n    function AnalyticsTechnologyModule() {\n    }\n    AnalyticsTechnologyModule = technology_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(technology_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule,\n            ],\n            declarations: [\n                technology_view_component_AnalyticsTechnologyView,\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n            ]\n        })\n    ], AnalyticsTechnologyModule);\n    return AnalyticsTechnologyModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/realtime/realtime.view.component.ts\nvar realtime_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar realtime_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar realtime_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar realtime_view_component_AnalyticsRealtimeView = (function (_super) {\n    realtime_view_component___extends(AnalyticsRealtimeView, _super);\n    function AnalyticsRealtimeView(locale, translation, analyticsService, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.analyticsService = analyticsService;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.REFRESH_DATA_PERIOD = 1000;\n        _this.PAST_TIMESTAMP = 946684800;\n        _this.audienceMinutesChart = { data: [], labels: [] };\n        _this.audienceSecondsChart = { data: [], labels: [] };\n        _this.audienceWatchingUsersNum = 0;\n        _this.topMediaList = null;\n        _this.topMediaListTotalLength = null;\n        _this.topMediaListLoading = false;\n        _this.mediaMetadataByMaterialId = new Map();\n        _this.topMediaListPagingOptions = {\n            page: 1,\n            page_size: 10\n        };\n        _this.selectedMediaMinutesChart = { data: [], labels: [] };\n        _this.selectedMediaSecondsChart = { data: [], labels: [] };\n        _this.selectedMediaMetadata = null;\n        _this.updateNum = 0;\n        _this.updateDataTimer = setInterval(function () { return _this.updateData(); }, _this.REFRESH_DATA_PERIOD);\n        _this.dateUtil = date_util_DateUtil;\n        return _this;\n    }\n    AnalyticsRealtimeView.prototype.ngOnInit = function () {\n        this.loadData();\n    };\n    AnalyticsRealtimeView.prototype.ngOnDestroy = function () {\n        if (this.updateDataTimer) {\n            clearInterval(this.updateDataTimer);\n            this.updateDataTimer = null;\n        }\n    };\n    AnalyticsRealtimeView.prototype.loadData = function () {\n        this.audienceMinutesChart = { data: [], labels: [] };\n        this.audienceSecondsChart = { data: [], labels: [] };\n        for (var i = 0; i < 60; i++) {\n            this.audienceMinutesChart.labels.push('- ' + (60 - i) + ' min');\n            this.audienceSecondsChart.labels.push('- ' + (60 - i) + ' sec');\n        }\n        this.audienceMinutesChart.data.push({\n            data: this.generateInitialData(60),\n            label: 'Watching users'\n        });\n        var dataForSeconds = this.generateInitialData(60);\n        this.audienceSecondsChart.data.push({\n            data: dataForSeconds,\n            label: 'Watching users'\n        });\n        this.loadTopMediaList();\n        this.cdr.markForCheck();\n    };\n    AnalyticsRealtimeView.prototype.updateData = function () {\n        this.updateNum++;\n        this.updateAudienceData();\n        if (this.updateNum % 10 == 0) {\n            this.loadTopMediaList();\n        }\n        this.updateSelectedMediaStats();\n        this.cdr.markForCheck();\n    };\n    AnalyticsRealtimeView.prototype.updateAudienceData = function () {\n        var _this = this;\n        if (!this.audienceMinutesChart\n            || !this.audienceMinutesChart.data\n            || (this.audienceMinutesChart.data.length == 0)\n            || (this.audienceMinutesChart.data[0].data.length == 0)\n            || (this.audienceSecondsChart.data.length == 0)\n            || (this.audienceSecondsChart.data[0].data.length == 0)) {\n            return;\n        }\n        this.analyticsService.getRealtimeAccountViewersNum().subscribe(function (data) {\n            if (_this.updateNum % 60 == 0) {\n                var samples = _this.audienceSecondsChart.data[0].data.slice();\n                var lastMinuteSum = 0;\n                for (var _i = 0, samples_1 = samples; _i < samples_1.length; _i++) {\n                    var v = samples_1[_i];\n                    lastMinuteSum += v;\n                }\n                _this.chartPushValue(_this.audienceMinutesChart, Math.ceil(lastMinuteSum / 60));\n            }\n            _this.audienceWatchingUsersNum = data.viewers_num > 0 ? data.viewers_num : 0;\n            _this.chartPushValue(_this.audienceSecondsChart, _this.audienceWatchingUsersNum);\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsRealtimeView.prototype.updateSelectedMediaStats = function () {\n        var _this = this;\n        if (!this.selectedMediaMinutesChart\n            || !this.selectedMediaMetadata\n            || !this.selectedMediaMinutesChart.data\n            || (this.selectedMediaMinutesChart.data.length == 0)\n            || (this.selectedMediaMinutesChart.data[0].data.length == 0)\n            || (this.selectedMediaSecondsChart.data.length == 0)\n            || (this.selectedMediaSecondsChart.data[0].data.length == 0)) {\n            return;\n        }\n        this.analyticsService.getRealtimeMediaViewersNum(this.selectedMediaMetadata.material_id).subscribe(function (data) {\n            if (_this.updateNum % 60 == 0) {\n                var samples = _this.selectedMediaSecondsChart.data[0].data.slice();\n                var lastMinuteSum = 0;\n                for (var _i = 0, samples_2 = samples; _i < samples_2.length; _i++) {\n                    var v = samples_2[_i];\n                    lastMinuteSum += v;\n                }\n                _this.chartPushValue(_this.selectedMediaMinutesChart, Math.ceil(lastMinuteSum / 60));\n            }\n            var watchingUsers = data.viewers_num > 0 ? data.viewers_num : 0;\n            _this.chartPushValue(_this.selectedMediaSecondsChart, watchingUsers);\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsRealtimeView.prototype.loadSelectedMediaStats = function () {\n        this.selectedMediaMinutesChart = { data: [], labels: [] };\n        this.selectedMediaSecondsChart = { data: [], labels: [] };\n        for (var i = 0; i < 60; i++) {\n            this.selectedMediaMinutesChart.labels.push('- ' + (60 - i) + ' min');\n            this.selectedMediaSecondsChart.labels.push('- ' + (60 - i) + ' sec');\n        }\n        this.selectedMediaMinutesChart.data.push({\n            data: this.generateInitialData(60),\n            label: 'Watching users'\n        });\n        var dataForSeconds = this.generateInitialData(60);\n        this.selectedMediaSecondsChart.data.push({\n            data: dataForSeconds,\n            label: 'Watching users'\n        });\n        this.cdr.markForCheck();\n    };\n    AnalyticsRealtimeView.prototype.chartPushValue = function (chart, val) {\n        var samples = chart.data[0].data;\n        samples.shift();\n        samples.push(val);\n        chart.data = [{\n                data: samples,\n                label: 'Watching users'\n            }];\n    };\n    AnalyticsRealtimeView.prototype.loadTopMediaList = function () {\n        var _this = this;\n        this.topMediaListLoading = true;\n        this.analyticsService.getRealtimeTopViewedMediaMetadataList(this.topMediaListPagingOptions).subscribe(function (data) {\n            _this.topMediaList = data.records;\n            _this.topMediaListTotalLength = data.total_records;\n            _this.mediaMetadataByMaterialId = new Map();\n            for (var _i = 0, _a = data.records; _i < _a.length; _i++) {\n                var mm = _a[_i];\n                _this.mediaMetadataByMaterialId.set(mm.media.material_id, mm.media);\n            }\n            if ((_this.selectedMediaMetadata == null) && (_this.topMediaList != null) && (_this.topMediaList.length > 0)) {\n                _this.selectMediaMetadata(_this.topMediaList[0].media.material_id);\n            }\n            _this.topMediaListLoading = false;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsRealtimeView.prototype.onTopMediaListPageChange = function (page) {\n        this.topMediaListPagingOptions.page = page;\n        this.loadTopMediaList();\n    };\n    AnalyticsRealtimeView.prototype.isMediaMetadataSelected = function (material_id) {\n        return material_id && this.selectedMediaMetadata && (this.selectedMediaMetadata.material_id == material_id);\n    };\n    AnalyticsRealtimeView.prototype.selectMediaMetadata = function (materialId) {\n        if (this.selectedMediaMetadata && (this.selectedMediaMetadata.material_id == materialId)) {\n            return;\n        }\n        this.selectedMediaMetadata = this.mediaMetadataByMaterialId.get(materialId);\n        this.loadSelectedMediaStats();\n    };\n    AnalyticsRealtimeView.prototype.lastVal = function (arr) {\n        if (!arr || (arr.length == 0)) {\n            return null;\n        }\n        return arr[arr.length - 1];\n    };\n    AnalyticsRealtimeView.prototype.generateInitialData = function (len) {\n        var result = [];\n        for (var i = 0; i < len; i++) {\n            result.push(0);\n        }\n        return result;\n    };\n    var _a, _b, _c, _d, _e;\n    AnalyticsRealtimeView = realtime_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-realtime-view',\n            template: __webpack_require__(1387),\n            styles: [\n                ':host .chart-loader {height:300px;position:relative;}',\n                ':host .chart-tile {font-size: 1.5rem;font-weight: 400;padding-bottom: 10px;text-align:center;}',\n                ':host .media-list-loader {height:400px;}',\n                ':host #top-content-list.loading tbody tr td:last-child {opacity:0.5}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        realtime_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _c || Object, typeof (_d = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object])\n    ], AnalyticsRealtimeView);\n    return AnalyticsRealtimeView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/realtime/realtime.module.ts\nvar realtime_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\nvar realtime_module_routes = [\n    { path: '', component: realtime_view_component_AnalyticsRealtimeView },\n];\nvar realtime_module_AnalyticsRealtimeModule = (function () {\n    function AnalyticsRealtimeModule() {\n    }\n    AnalyticsRealtimeModule = realtime_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(realtime_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                pager_module_PagerModule,\n                chart_module_ChartModule,\n            ],\n            declarations: [\n                realtime_view_component_AnalyticsRealtimeView,\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n            ]\n        })\n    ], AnalyticsRealtimeModule);\n    return AnalyticsRealtimeModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/QOS/QOS.view.component.ts\nvar QOS_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar QOS_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar QOS_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar QOS_view_component_QOSView = (function (_super) {\n    QOS_view_component___extends(QOSView, _super);\n    function QOSView(chartService, mediaAnalyticsService, locale, translation, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.stackedData = {\n            sum: 62, data: [\n                { value: 10, color: 'rgb(157, 141, 241)', key: 'Startup time' },\n                { value: 15, color: 'rgb(7, 160, 112)', key: 'Rebuffering' },\n                { value: 7, color: 'rgb(130, 2, 99)', key: 'Advertisment' },\n                { value: 30, color: 'rgb(255, 99, 146)', key: 'Playing' }\n            ]\n        };\n        _this.previewHistoryStats = null;\n        _this.previewFilledStats = null;\n        _this.charts = [\n            { topic: 'Failrue' },\n            { topic: 'Startup' },\n            { topic: 'Rebuffer' },\n            { topic: 'Quality' }\n        ];\n        return _this;\n    }\n    QOSView.prototype.ngOnInit = function () {\n        this.loadMockData();\n    };\n    QOSView.prototype.ngOnDestroy = function () {\n    };\n    QOSView.prototype.loadMockData = function () {\n        var _this = this;\n        var endDate = moment_default()().startOf('day');\n        var startDate = endDate.clone().subtract(30, 'days');\n        this.mediaAnalyticsService.getMediaViewsHistory('MEDIA_ID_1', startDate, endDate, 'day')\n            .subscribe(function (data) {\n            data.data.label = 'label';\n            data.data.fill = false;\n            _this.previewHistoryStats = {\n                data: [data.data],\n                labels: data.labels,\n                startDate: startDate,\n                endDate: endDate,\n                chartType: 'lineTime',\n                granularity: 'day'\n            };\n            _this.cdr.markForCheck();\n        });\n    };\n    var _a, _b, _c, _d, _e, _f;\n    QOSView = QOS_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'qos-view',\n            template: __webpack_require__(1388),\n            styles: [\n                ':host .chart-loader {height:300px;position:relative;}',\n                ':host .chart-tile {font-size: 1.5rem;font-weight: 400;padding-bottom: 10px;text-align:center;}',\n                ':host .media-list-loader {height:400px;}',\n                ':host #top-content-list.loading tbody tr td:last-child {opacity:0.5}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        QOS_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], QOSView);\n    return QOSView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/component/charts/stackedhorizontalchart.component.ts\nvar stackedhorizontalchart_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar stackedhorizontalchart_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar stackedhorizontalchart_component_HorizontalStackedChartComponent = (function () {\n    function HorizontalStackedChartComponent() {\n        this.xLabels = ['10%', '20%', '30%', '40%', '50%', '60%', '70%', '80%', '90%'];\n    }\n    HorizontalStackedChartComponent.prototype.ngOnInit = function () { };\n    stackedhorizontalchart_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        stackedhorizontalchart_component___metadata(\"design:type\", Object)\n    ], HorizontalStackedChartComponent.prototype, \"dataset\", void 0);\n    HorizontalStackedChartComponent = stackedhorizontalchart_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'horizontal-stacked-chart',\n            template: \"\\n\\t<style type=\\\"text/css\\\">\\n\\n\\t\\tspan.bar {\\n\\t\\t  display: inline-block;\\n\\t\\t  height: 200px;\\n\\t\\t  border-radius: 0px;\\n\\t\\t  border: 0px;\\n\\t\\t  -moz-border-radius: 0px;\\n\\t\\t  margin-left: -3px;\\n\\t\\t  margin-right: 0px;\\n\\t\\t  padding: 0;\\n\\t\\t  text-align: right;\\n\\t\\t  color: #555555;\\n\\t\\t  font-family: inherit;\\n\\t\\t  vertical-align: bottom;\\n\\t\\t  white-space: nowrap;\\n\\t\\t}\\n\\t\\t\\n\\t\\t.line{\\n\\t\\t  display: inline-block;\\n\\t\\t  width: 100%;\\n\\t\\t  height: 10px;\\n\\t\\t  border-top: 1px solid black;\\n\\t\\t  position: relative;\\n\\t\\t  padding: 0;\\n\\t\\t  margin-left: -3px;\\n\\t\\t  margin-right: 0px;\\n\\t\\t  }\\n\\n\\t\\t.minor {\\n\\t\\t  display: inline-block;\\n\\t\\t  width: 1px;\\n\\t\\t  height: 5px;\\n\\t\\t  border-left: 1px solid black;\\n\\t\\t  position: relative;\\n\\t\\t  margin-left: -3px;\\n\\t\\t  margin-right: 0px;\\n\\t\\t  padding: 0;\\n\\t\\t  vertical-align: top;\\n\\n\\t\\t  }\\n\\t\\t\\n\\t\\t\\n\\t\\t.key{\\n\\t\\t  display: inline-block;\\n\\t\\t  width: 40px;\\n\\t\\t  height: 20px;\\n\\t\\t  border-radius: 3px;\\n\\t\\t  -moz-border-radius: 3px;\\n\\t\\t  margin: 0px 0px 0px 0px;\\n\\t\\t  padding: 0;\\n\\t\\t  vertical-align: middle;\\n\\t\\t}\\n\\n\\t</style>\\n\\n\\t<!-- bars -->\\n\\t<div>\\n\\t\\t<span *ngFor=\\\"let data of dataset.data\\\">\\n\\t\\t  <span class=\\\"bar\\\" [ngStyle]=\\\"{'width' : data.value/dataset.sum *100 + '%', 'background' : data.color }\\\" > </span>\\n\\t\\t</span>\\n\\t</div>\\n\\n\\t<!-- value display -->\\n\\t<div>\\n\\t\\t<span *ngFor=\\\"let data of dataset.data\\\">\\n\\t\\t  <span class=\\\"bar\\\" [ngStyle]=\\\"{'width' : data.value/dataset.sum *100 + '%', 'background' : 'white', 'height' : '20px' }\\\"> \\n\\t\\t\\t{{data.value/dataset.sum *100 | number:'1.0-0' }} % \\n\\t\\t  </span>\\n\\t\\t</span>\\n\\t</div>\\n\\n\\t<!-- xAxis -->\\n\\t<div class=\\\"minor\\\"></div>\\n\\t<span *ngFor=\\\"let label of xLabels\\\">\\n\\t  <div class=\\\"line\\\" style=\\\"width:10%\\\"></div>\\n\\t  <div class=\\\"minor\\\"></div>\\n\\t</span>\\t\\n\\t<div class=\\\"line\\\" style=\\\"width:10px\\\"></div>\\n\\n\\n\\t<!-- key -->\\n\\t<div>\\n\\t  <span *ngFor=\\\"let data of dataset.data\\\">\\n\\t\\t<span class = \\\"key\\\" [ngStyle]=\\\"{'background': data.color}\\\"></span>\\n\\t\\t  <span> {{data.key}} ({{data.value/dataset.sum *100 | number:'1.0-2' }} %)</span>\\n\\t  </span>\\n\\t</div>\\n  \"\n        }),\n        stackedhorizontalchart_component___metadata(\"design:paramtypes\", [])\n    ], HorizontalStackedChartComponent);\n    return HorizontalStackedChartComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/QOS/QOS.module.ts\nvar QOS_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar QOS_module_routes = [\n    { path: '', component: QOS_view_component_QOSView },\n];\nvar QOS_module_AnalyticsQOSModule = (function () {\n    function AnalyticsQOSModule() {\n    }\n    AnalyticsQOSModule = QOS_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(QOS_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                pager_module_PagerModule,\n                chart_module_ChartModule,\n            ],\n            declarations: [\n                QOS_view_component_QOSView,\n                stackedhorizontalchart_component_HorizontalStackedChartComponent\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n                media_service_MediaService\n            ]\n        })\n    ], AnalyticsQOSModule);\n    return AnalyticsQOSModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/playback-experience/playback-experience.list.view.component.ts\nvar playback_experience_list_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar playback_experience_list_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar playback_experience_list_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar playback_experience_list_view_component_PlaybackExperienceListView = (function (_super) {\n    playback_experience_list_view_component___extends(PlaybackExperienceListView, _super);\n    function PlaybackExperienceListView(chartService, mediaAnalyticsService, locale, translation, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.dateUtil = date_util_DateUtil;\n        _this.playbacksDb = _this.generateMockData();\n        _this.searchOptions = {\n            text: null,\n            sort_by: null,\n            sort_dir: 'asc',\n            page: 1,\n            page_size: 20,\n            total: _this.playbacksDb.length,\n        };\n        _this.columnsAverage = {\n            duration: null,\n            media_duration: null,\n            playback_coverage: null\n        };\n        _this.loadMockData();\n        return _this;\n    }\n    PlaybackExperienceListView.prototype.generateMockData = function () {\n        var mediaList = [\n            { type: \"live\", id: \"4091451\", title: \"TV 2\", duration: null },\n            { type: \"live\", id: \"5366309\", title: \"TV6\", duration: null },\n            { type: \"live\", id: \"4091449\", title: \"TV4 HD\", duration: null },\n            { type: \"live\", id: \"4091452\", title: \"TV 2\", duration: null },\n            { type: \"live\", id: \"5366278\", title: \"TV3\", duration: null },\n            { type: \"live\", id: \"4158956\", title: \"NRK1\", duration: null },\n            { type: \"live\", id: \"4091441\", title: \"SVT1 HD\", duration: null },\n            { type: \"live\", id: \"4091423\", title: \"DR1\", duration: null },\n            { type: \"vod\", id: \"8249858\", title: \"Infinite\", duration: 6116.72021484375 },\n            { type: \"vod\", id: \"8418807\", title: \"Yellowstone S04/E01\", duration: 3327.15991210938 },\n            { type: \"vod\", id: \"8525981\", title: \"1883 S01/E01\", duration: 3843.43994140625 },\n            { type: \"vod\", id: \"8442655\", title: \"Yellowstone S04/E05\", duration: 2637.43994140625 },\n            { type: \"vod\", id: \"8418809\", title: \"Yellowstone S04/E02\", duration: 2850.32006835938 },\n            { type: \"vod\", id: \"8429791\", title: \"Yellowstone S04/E04\", duration: 2865.80004882812 },\n            { type: \"vod\", id: \"8418810\", title: \"Yellowstone S04/E03\", duration: 2740.60009765625 },\n            { type: \"vod\", id: \"8507248\", title: \"Yellowstone S04/E10\", duration: 4379.2001953125 },\n            { type: \"vod\", id: \"8466254\", title: \"Yellowstone S04/E09\", duration: 3293.0400390625 },\n            { type: \"vod\", id: \"8442656\", title: \"Yellowstone S04/E06\", duration: 2819.36010742188 },\n            { type: \"vod\", id: \"8466253\", title: \"Yellowstone S04/E07\", duration: 3189.39990234375 },\n            { type: \"vod\", id: \"8525978\", title: \"1883 S01/E02\", duration: 3396.23999023438 },\n            { type: \"vod\", id: \"8496715\", title: \"Yellowstone S04/E08\", duration: 2627.0400390625 },\n            { type: \"vod\", id: \"8549832\", title: \"Beck - Rage Room (44)\", duration: 5387.1201171875 },\n            { type: \"vod\", id: \"8547415\", title: \"1883 S01/E04\", duration: 3140.23999023438 },\n            { type: \"vod\", id: \"8525979\", title: \"1883 S01/E03\", duration: 2491.15991210938 },\n            { type: \"vod\", id: \"5977031\", title: \"Jack Reacher: Never Go Back\", duration: 6775.759765625 },\n            { type: \"vod\", id: \"8354842\", title: \"Suedi\", duration: 5377.9599609375 },\n            { type: \"vod\", id: \"8347434\", title: \"Furia S01/E01\", duration: 2969.0400390625 },\n            { type: \"vod\", id: \"8418806\", title: \"Dexter: New Blood S01/E01\", duration: 3296.80004882812 },\n            { type: \"vod\", id: \"8459016\", title: \"Final Target\", duration: 5573.27978515625 },\n            { type: \"vod\", id: \"8426043\", title: \"Knutby S01/E03\", duration: 2587.1201171875 },\n            { type: \"vod\", id: \"8413500\", title: \"Dune (2020)\", duration: 8939.9599609375 },\n            { type: \"vod\", id: \"8161235\", title: \"Hummingbird\", duration: 5757.39990234375 },\n            { type: \"vod\", id: \"8305424\", title: \"Threesome S01/E01\", duration: 1476.23999023438 },\n            { type: \"vod\", id: \"7722746\", title: \"Yellowstone S03/E10\", duration: 2744.56005859375 },\n            { type: \"vod\", id: \"8186292\", title: \"13 Hours: The Secret Soldiers of Benghazi\", duration: 8310.16015625 },\n            { type: \"vod\", id: \"8381809\", title: \"Solsidan - onnea onkimassa S07/E01\", duration: 1330.11999511719 },\n            { type: \"vod\", id: \"8409850\", title: \"Knutby S01/E01\", duration: 2522.080078125 },\n            { type: \"vod\", id: \"8356620\", title: \"The Operative\", duration: 6717.1201171875 },\n            { type: \"vod\", id: \"7214745\", title: \"Avengement\", duration: 5052.43994140625 },\n            { type: \"vod\", id: \"8291007\", title: \"A Quiet Place Part II\", duration: 5585.60009765625 },\n            { type: \"vod\", id: \"8291006\", title: \"The Gentlemen\", duration: 6510.64013671875 },\n            { type: \"vod\", id: \"8325351\", title: \"American Rust S01/E01\", duration: 3635.8798828125 },\n            { type: \"vod\", id: \"8163060\", title: \"Parker\", duration: 6828.080078125 },\n        ];\n        var usersUuids = [];\n        for (var i = 0; i < 479; i++) {\n            usersUuids.push(this.generateUuid());\n        }\n        var envs = this.generateEnvs();\n        var startTime = Math.floor((new Date()).getTime() / 1000.0);\n        var result = [];\n        for (var i = 0; i < 7177; i++) {\n            var userPos = (i * 5701) % usersUuids.length;\n            var env = envs[userPos % envs.length];\n            var playbackRatio = (env.device_type == 'PC') ? 1.0 : 0.67;\n            var media = mediaList[(i * 113) % mediaList.length];\n            var watchDuration = playbackRatio * (Math.random() * 1000 + Math.random() * 100 + Math.random() * 40);\n            var coverageStr = '-';\n            if (media.duration > 0) {\n                var coverage = playbackRatio * Math.random();\n                watchDuration = coverage * media.duration;\n                coverageStr = (coverage * 100.0).toFixed(2);\n            }\n            result.push({\n                playback_id: this.generateUuid(),\n                user_id: usersUuids[userPos],\n                start_time: startTime,\n                duration: watchDuration,\n                media_type: media.type,\n                media_id: media.id,\n                media_title: media.title,\n                media_duration: media.duration,\n                playback_coverage: coverageStr,\n                device_type: env.device_type,\n                device_browser: env.device_browser,\n                device_os: env.device_os,\n                isp: env.isp,\n                cdn: env.cdn,\n            });\n            startTime -= Math.floor(100 * Math.random());\n        }\n        return result;\n    };\n    PlaybackExperienceListView.prototype.generateEnvs = function () {\n        var envs = [];\n        envs.push({ device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 11', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'INEA', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 11', isp: 'INEA', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-2' });\n        envs.push({ device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-2' });\n        envs.push({ device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 11', isp: 'Netia', cdn: 'AWS-2' });\n        envs.push({ device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'INEA', cdn: 'AWS-2' });\n        envs.push({ device_type: 'PC', device_browser: 'Safari', device_os: 'MacOS', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Safari', device_os: 'MacOS', isp: 'INEA', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Play', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 10', isp: 'Play', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'Play', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Play', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Play', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Play', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Orange', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 11', isp: 'Orange', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'Orange', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Orange', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Orange', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Orange', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'T-Mobile', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 11', isp: 'T-Mobile', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'T-Mobile', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 10', isp: 'Netia', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'INEA', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Vectra', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Vectra', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Netia', cdn: 'AWS-1' });\n        return envs;\n    };\n    PlaybackExperienceListView.prototype.generateUuid = function () {\n        return 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function (c) {\n            return Math.floor(Math.random() * 16).toString(16);\n        });\n    };\n    PlaybackExperienceListView.prototype.loadMockData = function () {\n        var res = this.playbacksDb.slice();\n        if (this.searchOptions.text) {\n            var text = this.searchOptions.text.toLowerCase();\n            res = [];\n            for (var pos = 0; pos < this.playbacksDb.length; pos++) {\n                var rec = this.playbacksDb[pos];\n                for (var k in rec) {\n                    if ((rec[k] + '').toLowerCase().indexOf(text) !== -1) {\n                        res.push(rec);\n                    }\n                }\n            }\n        }\n        this.searchOptions.total = res.length;\n        var duration_total = 0;\n        var duration_count = 0;\n        var media_duration_total = 0;\n        var media_duration_count = 0;\n        var playback_coverage_total = 0;\n        var playback_coverage_count = 0;\n        for (var pos = 0; pos < res.length; pos++) {\n            var rec = res[pos];\n            if (rec.duration) {\n                duration_total += rec.duration;\n                duration_count += 1;\n            }\n            if (rec.media_duration) {\n                media_duration_total += rec.media_duration;\n                media_duration_count += 1;\n            }\n            if (rec.playback_coverage && parseFloat(rec.playback_coverage)) {\n                playback_coverage_total += parseFloat(rec.playback_coverage);\n                playback_coverage_count += 1;\n            }\n        }\n        this.columnsAverage = {\n            duration: (duration_count ? duration_total / duration_count : null),\n            media_duration: (media_duration_count ? media_duration_total / media_duration_count : null),\n            playback_coverage: (playback_coverage_count ? (playback_coverage_total / playback_coverage_count).toFixed(2) : '-')\n        };\n        if (this.searchOptions.sort_by) {\n            var sort_by = this.searchOptions.sort_by;\n            var cmp = function (a, b) {\n                if (a[sort_by] < b[sort_by]) {\n                    return -1;\n                }\n                else if (a[sort_by] > b[sort_by]) {\n                    return 1;\n                }\n                return 0;\n            };\n            if (this.searchOptions.sort_dir != 'asc') {\n                cmp = function (a, b) {\n                    if (a[sort_by] < b[sort_by]) {\n                        return 1;\n                    }\n                    else if (a[sort_by] > b[sort_by]) {\n                        return -1;\n                    }\n                    return 0;\n                };\n            }\n            res.sort(cmp);\n        }\n        var pageSize = this.searchOptions.page_size;\n        var pageIdx = (this.searchOptions.page - 1) * pageSize;\n        this.playbacks = res.slice(pageIdx, pageIdx + pageSize);\n    };\n    PlaybackExperienceListView.prototype.onSearchKeyPress = function (e) {\n        var code = e.keyCode || e.which;\n        if (code == 13) {\n            this.searchOptions.page = 1;\n            this.loadMockData();\n        }\n    };\n    PlaybackExperienceListView.prototype.onColumnHeaderClick = function (columnName) {\n        if (this.searchOptions.sort_by == columnName) {\n            this.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n        }\n        else {\n            this.searchOptions.sort_by = columnName;\n            this.searchOptions.sort_dir = 'asc';\n        }\n        this.searchOptions.page = 1;\n        this.loadMockData();\n    };\n    PlaybackExperienceListView.prototype.onPageChanged = function (page) {\n        this.searchOptions.page = page;\n        this.loadMockData();\n    };\n    var _a, _b, _c, _d, _e, _f;\n    PlaybackExperienceListView = playback_experience_list_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'playback-experience-list-view',\n            template: __webpack_require__(1389),\n            styles: [\n                ':host .chart-loader {height:300px;position:relative;}',\n                ':host .chart-tile {font-size: 1.5rem;font-weight: 400;padding-bottom: 10px;text-align:center;}',\n                ':host .media-list-loader {height:400px;}',\n                ':host #top-content-list.loading tbody tr td:last-child {opacity:0.5}',\n                ':host .uuid {overflow: hidden;width: 100px;text-overflow: ellipsis;white-space: nowrap;display: inline-block;}',\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        playback_experience_list_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], PlaybackExperienceListView);\n    return PlaybackExperienceListView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/playback-experience/playback-experience.details.view.component.ts\nvar playback_experience_details_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar playback_experience_details_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar playback_experience_details_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar playback_experience_details_view_component_PlaybackExperienceDetailsView = (function (_super) {\n    playback_experience_details_view_component___extends(PlaybackExperienceDetailsView, _super);\n    function PlaybackExperienceDetailsView(chartService, mediaAnalyticsService, locale, translation, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.dateUtil = date_util_DateUtil;\n        _this.playbackStartDate = new Date(1643819651000);\n        _this.bitrateHistogramLabels = ['493 kbps', '762 kbps', '1154 kbps', '1532 kbps', '2127 kbps', '2873 kbps', '3841 kbps'];\n        _this.bitrateHistogramData = [{ label: 'Played bitrate [%]', data: [3.57, 7.14, 10.71, 10.71, 42.85, 21.42, 3.57] }];\n        _this.playbackHistory = [\n            { type: 'Initial buffering', vt: '00:00.0', d: 3.6, avgkbps: 912, class: 'bg-grey', icon: 'fa-spinner' },\n            { type: 'Playing', vt: '00:00.0', d: 4.5, avgkbps: 1718, class: 'bg-green', icon: 'fa-play-circle' },\n            { type: 'Seeking', vt: '00:04.5', d: 2.2, avgkbps: 879, class: 'bg-grey', icon: 'fa-spinner' },\n            { type: 'Playing', vt: '00:40.1', d: 1.2, avgkbps: 1663, class: 'bg-green', icon: 'fa-play-circle' },\n            { type: 'Seeking', vt: '00:41.3', d: 1.6, avgkbps: 945, class: 'bg-grey', icon: 'fa-spinner' },\n            { type: 'Playing', vt: '01:14.7', d: 646.5, avgkbps: 2214, class: 'bg-green', icon: 'fa-play-circle' },\n            { type: 'Paused', vt: '12:01.2', d: 67.1, avgkbps: 2214, class: 'bg-blue', icon: 'fa-pause-circle' },\n            { type: 'Playing', vt: '12:01.2', d: 1.3, avgkbps: 1760, class: 'bg-green', icon: 'fa-play-circle' },\n            { type: 'Seeking', vt: '12:02.7', d: 2.6, avgkbps: 873, class: 'bg-grey', icon: 'fa-spinner' },\n            { type: 'Playing', vt: '11:32.7', d: 1419.3, avgkbps: 2311, class: 'bg-green', icon: 'fa-play-circle' },\n            { type: 'End', vt: '35:23.7', d: 0, avgkbps: 0, class: 'bg-black', icon: 'fa-stop-circle' },\n        ];\n        var walltime = 0;\n        for (var _i = 0, _a = _this.playbackHistory; _i < _a.length; _i++) {\n            var item = _a[_i];\n            walltime += item.d;\n            item.wt = _this.formatWallTime(new Date(_this.playbackStartDate.getTime() + walltime * 1000.0));\n        }\n        return _this;\n    }\n    PlaybackExperienceDetailsView.prototype.formatWallTime = function (wt) {\n        return date_util_DateUtil.addLeadZeroes('' + wt.getHours()) + ':' + date_util_DateUtil.addLeadZeroes('' + wt.getMinutes()) + ':' + date_util_DateUtil.addLeadZeroes('' + wt.getSeconds()) + '.' + Math.floor(wt.getMilliseconds() / 100);\n    };\n    PlaybackExperienceDetailsView.prototype.ngOnInit = function () {\n    };\n    PlaybackExperienceDetailsView.prototype.ngOnDestroy = function () {\n    };\n    var _a, _b, _c, _d, _e, _f;\n    PlaybackExperienceDetailsView = playback_experience_details_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'playback-experience-details-view',\n            template: __webpack_require__(1390),\n            styles: [\n                ':host .chart-loader {height:200px;position:relative;}',\n                ':host .chart-tile {font-size: 1.5rem;font-weight: 400;padding-bottom: 10px;text-align:center;}',\n                ':host #top-content-list.loading tbody tr td:last-child {opacity:0.5}',\n                ':host .playback-history .activity {display:inline-block;width:30%;}',\n                ':host .playback-history .vt {display:inline-block;width:10%;}',\n                ':host .playback-history .wt {display:inline-block;width:15%;}',\n                ':host .playback-history .d {display:inline-block;width:15%;}',\n                ':host .playback-history .kbps {display:inline-block;width:20%;}',\n                ':host .playback-history .header {font-weight:bold;background-color:#242a30;color:#fff;}',\n                ':host .playback-history .items {height:420px;overflow-y:scroll;}',\n                ':host .playback-history .item {color:#fff;border-top:solid 1px #e2e7eb;border-left:solid 1px #e2e7eb;border-right:solid 1px #e2e7eb;text-align:center;line-height:30px;}',\n                ':host .playback-history .item:last-child {border-bottom:solid 1px #e2e7eb;}',\n                ':host ::ng-deep .bitrate-histogram .canvas-wrapper {max-width:400px;margin-left: auto;margin-right: auto;}',\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        playback_experience_details_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], PlaybackExperienceDetailsView);\n    return PlaybackExperienceDetailsView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/playback-experience/playback-experience.module.ts\nvar playback_experience_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar playback_experience_module_routes = [\n    { path: '', component: playback_experience_list_view_component_PlaybackExperienceListView },\n    { path: 'playback', component: playback_experience_details_view_component_PlaybackExperienceDetailsView },\n];\nvar playback_experience_module_AnalyticsPlaybackExperienceModule = (function () {\n    function AnalyticsPlaybackExperienceModule() {\n    }\n    AnalyticsPlaybackExperienceModule = playback_experience_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(playback_experience_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                pager_module_PagerModule,\n                chart_module_ChartModule,\n            ],\n            declarations: [\n                playback_experience_list_view_component_PlaybackExperienceListView,\n                playback_experience_details_view_component_PlaybackExperienceDetailsView\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n                media_service_MediaService\n            ]\n        })\n    ], AnalyticsPlaybackExperienceModule);\n    return AnalyticsPlaybackExperienceModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/errors/errors.view.component.ts\nvar errors_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar errors_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar errors_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar errors_view_component_ErrorsView = (function (_super) {\n    errors_view_component___extends(ErrorsView, _super);\n    function ErrorsView(chartService, mediaAnalyticsService, locale, translation, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.dateUtil = date_util_DateUtil;\n        _this.filterDropdownOs = [{ value: 0, label: 'Windows, MacOS' }, { value: 1, label: 'Windows', markSelected: true }, { value: 2, label: 'Android' }, { value: 3, label: 'iOS' }, { value: 4, label: 'MacOS', markSelected: true }, { value: 5, label: 'Linux' }, { value: 6, label: 'Windows Phone' }, { value: 7, label: 'Chrome OS' }, { value: 8, label: 'BlackBerry' }];\n        _this.filterDropdownBrowser = [{ value: 0, label: 'Chrome, Firefox' }, { value: 1, label: 'Chrome', markSelected: true }, { value: 2, label: 'Firefox', markSelected: true }, { value: 3, label: 'Safari' }, { value: 4, label: 'IE' }, { value: 5, label: 'Samsung Internet' }, { value: 6, label: 'Opera' }, { value: 7, label: 'Edge' }, { value: 8, label: '(unknown)' }, { value: 9, label: 'Vivaldi' }, { value: 10, label: 'Chromium' }, { value: 11, label: 'Android' }, { value: 12, label: 'Maxthon' }, { value: 13, label: 'Pale Moon' }, { value: 14, label: 'Puffin' }, { value: 15, label: 'BlackBerry' }, { value: 16, label: 'UC Browser' }, { value: 17, label: 'Nokia' }];\n        _this.filterDropdownDevice = [{ value: 0, label: 'Desktop' }, { value: 1, label: 'Desktop', markSelected: true }, { value: 2, label: 'Mobile' }];\n        _this.filterDropdownTags = [{ value: 0, label: 'technology, entertainment' }, { value: 1, label: 'technology', markSelected: true }, { value: 2, label: 'science' }, { value: 3, label: 'global issues' }, { value: 4, label: 'design' }, { value: 5, label: 'business' }, { value: 6, label: 'culture' }, { value: 7, label: 'entertainment', markSelected: true }, { value: 8, label: 'health' }, { value: 9, label: 'biology' }, { value: 10, label: 'creativity' }, { value: 11, label: 'environment' }, { value: 12, label: 'art' }, { value: 13, label: 'TEDx' }, { value: 14, label: 'music' }, { value: 15, label: 'medicine' }, { value: 16, label: 'economics' }, { value: 17, label: 'politics' }, { value: 18, label: 'performance' }, { value: 19, label: 'psychology' }, { value: 20, label: 'life' }];\n        _this.filterDropdownAppVersion = [{ value: 0, label: '1.12.11' }, { value: 1, label: '1.12.11', markSelected: true }, { value: 2, label: '1.0.1' }, { value: 3, label: '1.1.9' }, { value: 4, label: '1.7.11' }];\n        _this.filterDropdownPlayer = [{ value: 0, label: 'Video.js' }, { value: 1, label: 'Video.js', markSelected: true }, { value: 2, label: 'ExoPlayer' }, { value: 3, label: 'Bradmax iOS' }];\n        _this.filterDropdownIsp = [{ value: 0, label: 'UPC Polska' }, { value: 1, label: 'UPC Polska', markSelected: true }, { value: 2, label: 'Vectra Broadband' }, { value: 3, label: 'Multimedia Polska S.A.' }, { value: 4, label: 'Orange Polska' }, { value: 5, label: 'T-mobile Polska' }, { value: 6, label: 'Orange Mobile' }, { value: 7, label: 'Netia SA' }, { value: 8, label: 'Play' }, { value: 9, label: 'Plus' }, { value: 10, label: 'Cyfrowy Polsat' }];\n        _this.filterDropdownCdn = [{ value: 0, label: 'AWS, Akamai' }, { value: 1, label: 'AWS', markSelected: true }, { value: 2, label: 'Akamai', markSelected: true }, { value: 3, label: 'CDN77' }, , { value: 4, label: 'Azure' }];\n        _this.errorsHistoryData = [\n            { data: [], label: 'Errors' }\n        ];\n        _this.errorsHistoryLabels = [];\n        var now = new Date();\n        now.setMinutes(0);\n        now.setSeconds(0);\n        now.setMilliseconds(0);\n        var startDate = new Date(now.getTime() - 3 * 24 * 3600 * 1000);\n        var errors72hNorm = [12, 6, 4, 3, 3, 4, 7, 10, 12, 13, 12, 13, 16, 21, 20, 18, 23, 32, 44, 52, 54, 52, 41, 26, 12, 6, 4, 3, 3, 4, 7, 11, 16, 19, 23, 20, 18, 21, 21, 21, 25, 32, 44, 51, 54, 54, 44, 24, 13, 6, 4, 3, 3, 6, 9, 12, 15, 17, 16, 17, 28, 33, 28, 29, 29, 35, 43, 51, 52, 59, 47, 33];\n        for (var i = 0; i < errors72hNorm.length; i++) {\n            var posWithOffset = (i + (startDate.getHours() - 1)) % errors72hNorm.length;\n            _this.errorsHistoryData[0].data.push(errors72hNorm[posWithOffset]);\n            var d = new Date(startDate.getTime() + i * 3600 * 1000);\n            _this.errorsHistoryLabels.push(d.toISOString());\n        }\n        _this.errorsGroupedData = [\n            { data: [40.0, 32.0, 28.00], label: 'By CDN' }\n        ];\n        _this.errorsGroupedLabels = [\n            'AWS-1', 'AWS-2', 'CDN77'\n        ];\n        _this.groupedByDropdown = [{ value: 0, label: 'CDN', markSelected: true }, { value: 1, label: 'OS' }, { value: 2, label: 'Browser' }, { value: 3, label: 'Device' }, { value: 4, label: 'AppVersion' }, { value: 5, label: 'Player' }, { value: 6, label: 'IPS' }];\n        _this.errorsDb = _this.generateMockData();\n        _this.searchOptions = {\n            text: null,\n            sort_by: null,\n            sort_dir: 'asc',\n            page: 1,\n            page_size: 20,\n            total: _this.errorsDb.length,\n            startDate: moment_default()(startDate),\n            endDate: moment_default()(now)\n        };\n        _this.loadMockData();\n        return _this;\n    }\n    ErrorsView.prototype.generateMockData = function () {\n        var mediaList = [\n            { type: \"live\", id: \"4091451\", title: \"TV 2\", duration: null },\n            { type: \"live\", id: \"5366309\", title: \"TV6\", duration: null },\n            { type: \"live\", id: \"4091449\", title: \"TV4 HD\", duration: null },\n            { type: \"live\", id: \"4091452\", title: \"TV 2\", duration: null },\n            { type: \"live\", id: \"5366278\", title: \"TV3\", duration: null },\n            { type: \"live\", id: \"4158956\", title: \"NRK1\", duration: null },\n            { type: \"live\", id: \"4091441\", title: \"SVT1 HD\", duration: null },\n            { type: \"live\", id: \"4091423\", title: \"DR1\", duration: null },\n            { type: \"vod\", id: \"8249858\", title: \"Infinite\", duration: 6116.72021484375 },\n            { type: \"vod\", id: \"8418807\", title: \"Yellowstone S04/E01\", duration: 3327.15991210938 },\n            { type: \"vod\", id: \"8525981\", title: \"1883 S01/E01\", duration: 3843.43994140625 },\n            { type: \"vod\", id: \"8442655\", title: \"Yellowstone S04/E05\", duration: 2637.43994140625 },\n            { type: \"vod\", id: \"8418809\", title: \"Yellowstone S04/E02\", duration: 2850.32006835938 },\n            { type: \"vod\", id: \"8429791\", title: \"Yellowstone S04/E04\", duration: 2865.80004882812 },\n            { type: \"vod\", id: \"8418810\", title: \"Yellowstone S04/E03\", duration: 2740.60009765625 },\n            { type: \"vod\", id: \"8507248\", title: \"Yellowstone S04/E10\", duration: 4379.2001953125 },\n            { type: \"vod\", id: \"8466254\", title: \"Yellowstone S04/E09\", duration: 3293.0400390625 },\n            { type: \"vod\", id: \"8442656\", title: \"Yellowstone S04/E06\", duration: 2819.36010742188 },\n            { type: \"vod\", id: \"8466253\", title: \"Yellowstone S04/E07\", duration: 3189.39990234375 },\n            { type: \"vod\", id: \"8525978\", title: \"1883 S01/E02\", duration: 3396.23999023438 },\n            { type: \"vod\", id: \"8496715\", title: \"Yellowstone S04/E08\", duration: 2627.0400390625 },\n            { type: \"vod\", id: \"8549832\", title: \"Beck - Rage Room (44)\", duration: 5387.1201171875 },\n            { type: \"vod\", id: \"8547415\", title: \"1883 S01/E04\", duration: 3140.23999023438 },\n            { type: \"vod\", id: \"8525979\", title: \"1883 S01/E03\", duration: 2491.15991210938 },\n            { type: \"vod\", id: \"5977031\", title: \"Jack Reacher: Never Go Back\", duration: 6775.759765625 },\n            { type: \"vod\", id: \"8354842\", title: \"Suedi\", duration: 5377.9599609375 },\n            { type: \"vod\", id: \"8347434\", title: \"Furia S01/E01\", duration: 2969.0400390625 },\n            { type: \"vod\", id: \"8418806\", title: \"Dexter: New Blood S01/E01\", duration: 3296.80004882812 },\n            { type: \"vod\", id: \"8459016\", title: \"Final Target\", duration: 5573.27978515625 },\n            { type: \"vod\", id: \"8426043\", title: \"Knutby S01/E03\", duration: 2587.1201171875 },\n            { type: \"vod\", id: \"8413500\", title: \"Dune (2020)\", duration: 8939.9599609375 },\n            { type: \"vod\", id: \"8161235\", title: \"Hummingbird\", duration: 5757.39990234375 },\n            { type: \"vod\", id: \"8305424\", title: \"Threesome S01/E01\", duration: 1476.23999023438 },\n            { type: \"vod\", id: \"7722746\", title: \"Yellowstone S03/E10\", duration: 2744.56005859375 },\n            { type: \"vod\", id: \"8186292\", title: \"13 Hours: The Secret Soldiers of Benghazi\", duration: 8310.16015625 },\n            { type: \"vod\", id: \"8381809\", title: \"Solsidan - onnea onkimassa S07/E01\", duration: 1330.11999511719 },\n            { type: \"vod\", id: \"8409850\", title: \"Knutby S01/E01\", duration: 2522.080078125 },\n            { type: \"vod\", id: \"8356620\", title: \"The Operative\", duration: 6717.1201171875 },\n            { type: \"vod\", id: \"7214745\", title: \"Avengement\", duration: 5052.43994140625 },\n            { type: \"vod\", id: \"8291007\", title: \"A Quiet Place Part II\", duration: 5585.60009765625 },\n            { type: \"vod\", id: \"8291006\", title: \"The Gentlemen\", duration: 6510.64013671875 },\n            { type: \"vod\", id: \"8325351\", title: \"American Rust S01/E01\", duration: 3635.8798828125 },\n            { type: \"vod\", id: \"8163060\", title: \"Parker\", duration: 6828.080078125 },\n        ];\n        var usersUuids = [];\n        for (var i = 0; i < 479; i++) {\n            usersUuids.push(this.generateUuid());\n        }\n        var envs = this.generateEnvs();\n        var startTime = Math.floor((new Date()).getTime() / 1000.0);\n        var result = [];\n        for (var i = 0; i < 7177; i++) {\n            var userPos = (i * 5701) % usersUuids.length;\n            var env = envs[userPos % envs.length];\n            var media = mediaList[(i * 113) % mediaList.length];\n            result.push({\n                error_id: this.generateUuid(),\n                user_id: usersUuids[userPos],\n                time: startTime,\n                media_type: media.type,\n                media_id_title: media.title + ' [' + media.id + ']',\n                media_duration: media.duration,\n                device_type: env.device_type,\n                device_browser: env.device_browser,\n                device_os: env.device_os,\n                isp: env.isp,\n                cdn: env.cdn,\n            });\n            startTime -= Math.floor(100 * Math.random());\n        }\n        return result;\n    };\n    ErrorsView.prototype.generateEnvs = function () {\n        var envs = [];\n        envs.push({ device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 10', isp: 'Netia', cdn: 'CDN77' });\n        envs.push({ device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 11', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'INEA', cdn: 'CDN77' });\n        envs.push({ device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 11', isp: 'INEA', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'Netia', cdn: 'CDN77' });\n        envs.push({ device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-2' });\n        envs.push({ device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 11', isp: 'Netia', cdn: 'AWS-2' });\n        envs.push({ device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'INEA', cdn: 'AWS-2' });\n        envs.push({ device_type: 'PC', device_browser: 'Safari', device_os: 'MacOS', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'PC', device_browser: 'Safari', device_os: 'MacOS', isp: 'INEA', cdn: 'ACDN77' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Play', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 10', isp: 'Play', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'Play', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Play', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Play', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Play', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Orange', cdn: 'CDN77' });\n        envs.push({ device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 11', isp: 'Orange', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'Orange', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Orange', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Orange', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Orange', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'T-Mobile', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 11', isp: 'T-Mobile', cdn: 'CDN77' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'T-Mobile', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Netia', cdn: 'AWS-1' });\n        envs.push({ device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 10', isp: 'Netia', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'INEA', cdn: 'CDN77' });\n        envs.push({ device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Vectra', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Vectra', cdn: 'AWS-2' });\n        envs.push({ device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Netia', cdn: 'AWS-1' });\n        return envs;\n    };\n    ErrorsView.prototype.generateUuid = function () {\n        return 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function (c) {\n            return Math.floor(Math.random() * 16).toString(16);\n        });\n    };\n    ErrorsView.prototype.loadMockData = function () {\n        var res = this.errorsDb.slice();\n        if (this.searchOptions.text) {\n            var text = this.searchOptions.text.toLowerCase();\n            res = [];\n            for (var pos = 0; pos < this.errorsDb.length; pos++) {\n                var rec = this.errorsDb[pos];\n                for (var k in rec) {\n                    if ((rec[k] + '').toLowerCase().indexOf(text) !== -1) {\n                        res.push(rec);\n                    }\n                }\n            }\n        }\n        this.searchOptions.total = res.length;\n        if (this.searchOptions.sort_by) {\n            var sort_by = this.searchOptions.sort_by;\n            var cmp = function (a, b) {\n                if (a[sort_by] < b[sort_by]) {\n                    return -1;\n                }\n                else if (a[sort_by] > b[sort_by]) {\n                    return 1;\n                }\n                return 0;\n            };\n            if (this.searchOptions.sort_dir != 'asc') {\n                cmp = function (a, b) {\n                    if (a[sort_by] < b[sort_by]) {\n                        return 1;\n                    }\n                    else if (a[sort_by] > b[sort_by]) {\n                        return -1;\n                    }\n                    return 0;\n                };\n            }\n            res.sort(cmp);\n        }\n        var pageSize = this.searchOptions.page_size;\n        var pageIdx = (this.searchOptions.page - 1) * pageSize;\n        this.errors = res.slice(pageIdx, pageIdx + pageSize);\n    };\n    ErrorsView.prototype.onSearchKeyPress = function (e) {\n        var code = e.keyCode || e.which;\n        if (code == 13) {\n            this.searchOptions.page = 1;\n            this.loadMockData();\n        }\n    };\n    ErrorsView.prototype.onColumnHeaderClick = function (columnName) {\n        if (this.searchOptions.sort_by == columnName) {\n            this.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n        }\n        else {\n            this.searchOptions.sort_by = columnName;\n            this.searchOptions.sort_dir = 'asc';\n        }\n        this.searchOptions.page = 1;\n        this.loadMockData();\n    };\n    ErrorsView.prototype.onPageChanged = function (page) {\n        this.searchOptions.page = page;\n        this.loadMockData();\n    };\n    ErrorsView.prototype.onErrorItemClick = function (item) {\n        this.selectedError = item;\n    };\n    ErrorsView.prototype.isErrorSelected = function (mm) {\n        return (mm != null) && (this.selectedError != null) && (mm.error_id == this.selectedError.error_id);\n    };\n    var _a, _b, _c, _d, _e, _f;\n    ErrorsView = errors_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'errors-view',\n            template: __webpack_require__(1391),\n            styles: [__webpack_require__(1392)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        errors_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], ErrorsView);\n    return ErrorsView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/errors/errors.module.ts\nvar errors_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar errors_module_routes = [\n    { path: '', component: errors_view_component_ErrorsView },\n];\nvar errors_module_AnalyticsErrorsModule = (function () {\n    function AnalyticsErrorsModule() {\n    }\n    AnalyticsErrorsModule = errors_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(errors_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                pager_module_PagerModule,\n                chart_module_ChartModule,\n            ],\n            declarations: [\n                errors_view_component_ErrorsView\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n                media_service_MediaService\n            ]\n        })\n    ], AnalyticsErrorsModule);\n    return AnalyticsErrorsModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/real-time-marketing/real-time-marketing.view.component.ts\nvar real_time_marketing_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar real_time_marketing_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar real_time_marketing_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar real_time_marketing_view_component_RealTimeMarketingView = (function (_super) {\n    real_time_marketing_view_component___extends(RealTimeMarketingView, _super);\n    function RealTimeMarketingView(chartService, mediaAnalyticsService, locale, translation, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.dateUtil = date_util_DateUtil;\n        _this.campaigns = [];\n        var skiJumpsData = [9, 12, 23, 31, 33, 36, 32, 35, 44, 53, 50, 46, 56, 73, 97, 113, 118, 107, 78, 48, 25, 14, 9, 8, 7, 10, 17, 26, 35, 44, 48, 41, 36, 41, 40, 43, 49, 60, 82, 94, 88, 85, 62, 37, 21, 11, 8, 5, 4, 9, 15, 21, 27, 27, 26, 28, 49, 60, 44, 42, 42, 49, 58, 67, 69, 72, 52, 39, 19, 12, 9, 7, 5, 7, 11, 23, 71, 66, 55, 48, 38, 39, 42, 45, 47, 50, 57, 57, 57, 52, 39, 28, 15, 8, 8, 7, 7, 7, 9, 27, 46, 42, 40, 37, 36, 39, 34, 38, 45, 44, 44, 47, 49, 50, 35, 18, 9, 5, 6, 5, 6, 9, 17, 44, 65, 54, 81, 34, 30, 12];\n        _this.campaigns.push({\n            name: 'Ski Jumps',\n            time: 1644146658,\n            totalViews: 4933,\n            totalUsers: 4094,\n            contents: ['Take Off (2009) [51820123]', ' Eddie the Eagle (2015) [64392197]'],\n            history: {\n                startDate: moment_default()(1644146658000),\n                endDate: moment_default()(1644146658000).add(skiJumpsData.length, 'hours'),\n                data: [{ label: 'Views', data: skiJumpsData }],\n                labels: _this.generateDatesForChart(moment_default()(1643973858000), skiJumpsData.length)\n            }\n        });\n        var winterOlympicsData = [13, 13, 20, 36, 46, 55, 52, 49, 62, 65, 69, 70, 76, 94, 137, 238, 203, 211, 201, 150, 95, 46, 22, 15, 13, 12, 16, 27, 36, 43, 48, 43, 44, 56, 72, 67, 60, 77, 104, 143, 168, 172, 165, 129, 79, 37, 19, 11, 10, 8, 12, 21, 31, 46, 53, 63, 55, 48, 57, 55, 56, 65, 83, 112, 130, 135, 135, 109, 59, 31, 15, 10, 6, 6, 13, 19, 27, 34, 37, 35, 37, 59, 70, 58, 61, 59, 71, 87, 101, 103, 116, 91, 63, 33, 20, 13, 9, 7, 10, 15, 32, 85, 85, 68, 72, 55, 56, 62, 69, 74, 74, 86, 88, 89, 90, 64, 45, 24, 13, 12, 11, 11, 10, 13, 34, 54, 56, 55, 52, 49, 53, 51, 60, 67, 67, 67, 69, 75, 80, 53, 30, 14, 8, 8, 7, 8, 10, 21, 50, 73, 64, 88, 42, 35, 12];\n        _this.campaigns.push({\n            name: 'Winter Olympics',\n            time: 1643973858,\n            totalViews: 9038,\n            totalUsers: 7543,\n            contents: ['Icarus (2017) [78131237]', 'Winter Olympics Opening Ceremony (TV) [891131441]', 'Nerves of Steel (2006) [651231993]'],\n            history: {\n                startDate: moment_default()(1643973858000),\n                endDate: moment_default()(1643973858000).add(winterOlympicsData.length, 'hours'),\n                data: [{ label: 'Views', data: winterOlympicsData }],\n                labels: _this.generateDatesForChart(moment_default()(1643973858000), winterOlympicsData.length)\n            }\n        });\n        _this.contentsDb = _this.generateMockData();\n        _this.searchOptions = {\n            text: null,\n            sort_by: null,\n            sort_dir: 'asc',\n            page: 1,\n            page_size: 5,\n            total: _this.contentsDb.length,\n        };\n        _this.loadMockData();\n        return _this;\n    }\n    RealTimeMarketingView.prototype.generateDatesForChart = function (momentStartTime, hoursNum) {\n        var result = [];\n        var startTs = momentStartTime.unix() * 1000;\n        for (var h = 0; h < hoursNum; h++) {\n            var hm = moment_default()(startTs);\n            result.push(hm.add(h, 'hours').toISOString());\n        }\n        return result;\n    };\n    RealTimeMarketingView.prototype.generateMockData = function () {\n        var result = [\n            { title: \"2022 Winter Olympics opening ceremony\", year: 2022, duration: 120 * 60, tags: \"winter olympics, tv, document, transmission\" },\n            { title: \"Top Gear: Winter Olympics\", year: 2006, duration: 60 * 60, tags: \"englishman abroad, motor vehicle, suv, briton in norway, vehicle, citroen c1, sport utility vehicle, car, briton abroad, audi motor vehicle\" },\n            { title: \"Cool Runnings\", year: 1993, duration: 98 * 60, tags: \"american played by canadian, canada, runner, beard, track, stumble, dream, olympic committee, \" },\n            { title: \"Eddie the Eagle\", year: 2015, duration: 104 * 60, tags: \"ski jumper, coach, 1988 winter olympics, winter olympics, athletic training, winter sports, athlete, ski jumping, based on true story, based\" },\n            { title: \"Take Off\", year: 2009, duration: 137 * 60, tags: \"winter sports sport, ski jumping, winter sports, winter, ski jumper, ski jump\" },\n            { title: \"Olympic Dreams\", year: 2019, duration: 85 * 60, tags: \"olympics, winter olympics, gay athlete, dining, away from home, age difference, older man younger girl, dining out, cross country skiing\" }\n        ];\n        return result;\n    };\n    RealTimeMarketingView.prototype.loadMockData = function () {\n        var res = this.contentsDb.slice();\n        if (this.searchOptions.text) {\n            var text = this.searchOptions.text.toLowerCase();\n            res = [];\n            for (var pos = 0; pos < this.contentsDb.length; pos++) {\n                var rec = this.contentsDb[pos];\n                for (var k in rec) {\n                    if ((rec[k] + '').toLowerCase().indexOf(text) !== -1) {\n                        res.push(rec);\n                    }\n                }\n            }\n        }\n        this.searchOptions.total = res.length;\n        if (this.searchOptions.sort_by) {\n            var sort_by = this.searchOptions.sort_by;\n            var cmp = function (a, b) {\n                if (a[sort_by] < b[sort_by]) {\n                    return -1;\n                }\n                else if (a[sort_by] > b[sort_by]) {\n                    return 1;\n                }\n                return 0;\n            };\n            if (this.searchOptions.sort_dir != 'asc') {\n                cmp = function (a, b) {\n                    if (a[sort_by] < b[sort_by]) {\n                        return 1;\n                    }\n                    else if (a[sort_by] > b[sort_by]) {\n                        return -1;\n                    }\n                    return 0;\n                };\n            }\n            res.sort(cmp);\n        }\n        var pageSize = this.searchOptions.page_size;\n        var pageIdx = (this.searchOptions.page - 1) * pageSize;\n        this.contents = res.slice(pageIdx, pageIdx + pageSize);\n    };\n    RealTimeMarketingView.prototype.onSearchKeyPress = function (e) {\n        var code = e.keyCode || e.which;\n        if (code == 13) {\n            this.searchOptions.page = 1;\n            this.loadMockData();\n        }\n    };\n    RealTimeMarketingView.prototype.onColumnHeaderClick = function (columnName) {\n        if (this.searchOptions.sort_by == columnName) {\n            this.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n        }\n        else {\n            this.searchOptions.sort_by = columnName;\n            this.searchOptions.sort_dir = 'asc';\n        }\n        this.searchOptions.page = 1;\n        this.loadMockData();\n    };\n    RealTimeMarketingView.prototype.onPageChanged = function (page) {\n        this.searchOptions.page = page;\n        this.loadMockData();\n    };\n    var _a, _b, _c, _d, _e, _f;\n    RealTimeMarketingView = real_time_marketing_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'real-time-marketing-view',\n            template: __webpack_require__(1393),\n            styles: [__webpack_require__(1394)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        real_time_marketing_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], RealTimeMarketingView);\n    return RealTimeMarketingView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/real-time-marketing/real-time-marketing.module.ts\nvar real_time_marketing_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar real_time_marketing_module_routes = [\n    { path: '', component: real_time_marketing_view_component_RealTimeMarketingView },\n];\nvar real_time_marketing_module_AnalyticsRealTimeMarketingModule = (function () {\n    function AnalyticsRealTimeMarketingModule() {\n    }\n    AnalyticsRealTimeMarketingModule = real_time_marketing_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(real_time_marketing_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                pager_module_PagerModule,\n                chart_module_ChartModule,\n            ],\n            declarations: [\n                real_time_marketing_view_component_RealTimeMarketingView\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n                media_service_MediaService\n            ]\n        })\n    ], AnalyticsRealTimeMarketingModule);\n    return AnalyticsRealTimeMarketingModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/content-insights/content-insights.view.component.ts\nvar content_insights_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar content_insights_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar content_insights_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar content_insights_view_component_ContentInsightsView = (function (_super) {\n    content_insights_view_component___extends(ContentInsightsView, _super);\n    function ContentInsightsView(chartService, mediaAnalyticsService, locale, translation, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.dateUtil = date_util_DateUtil;\n        _this.viewsByMediaTypeData = [\n            { data: [45.0, 32.0, 18.00], label: 'By Type' }\n        ];\n        _this.viewsByMediaTypeLabels = [\n            'TV', 'Series', 'VOD'\n        ];\n        _this.vodViewsByGenresData = [\n            { data: [91, 89, 89, 86, 84, 83, 83, 77, 77, 75, 71, 70, 64, 62, 47], label: 'By genres' }\n        ];\n        _this.vodViewsByGenresLabels = [\n            'Comedy', 'Adventure', 'Drama', 'Action', 'Crime', 'Mystery', 'Thriller', 'Documentary', 'Romance', 'Animation', 'War', 'Fantasy', 'Music', 'Sci-Fi ', 'Horror'\n        ];\n        _this.tvViewsByGenresData = [\n            { data: [107, 102, 96, 98, 101, 103, 91, 90, 84, 86, 72, 78, 84, 63, 55], label: 'By genres' }\n        ];\n        _this.tvViewsByGenresLabels = [\n            'News programming', 'Talk shows', 'Game shows', 'Variety shows', 'Sketch comedy', 'Sports', 'Sitcoms', 'Romantic comedies', 'Teen dramas', 'Docudramas', 'Police procedurals', 'Sci-fi and fantasy', 'Anime', 'Soap operas', 'Reality TV',\n        ];\n        _this.timeRangeDropdown = [{ value: 0, label: 'All time', markSelected: true }, { value: 1, label: 'Last year' }, { value: 2, label: 'Last month' }, { value: 3, label: 'Last week' }, { value: 4, label: 'Last day' }];\n        _this.contentsDb = _this.generateMockData();\n        _this.searchOptions = {\n            text: null,\n            sort_by: null,\n            sort_dir: 'asc',\n            page: 1,\n            page_size: 10,\n            total: _this.contentsDb.length,\n        };\n        _this.loadMockData();\n        return _this;\n    }\n    ContentInsightsView.prototype.generateMockData = function () {\n        var result = [\n            { id: 7019511, title: \"Arrival (2016)\", duration: 113 * 60, addedIntoSystem: '2016-11-24', views: 12011, users: 10198 },\n            { id: 5928123, title: \"Interstellar (2014)\", duration: 169 * 60, addedIntoSystem: '2015-02-03', views: 25012, users: 22748 },\n            { id: 7512391, title: \"Blade Runner 2049 (2017)\", duration: 164 * 60, addedIntoSystem: '2018-04-01', views: 15109, users: 12871 },\n            { id: 6204154, title: \"Mad Max: Fury Road (2015)\", duration: 120 * 60, addedIntoSystem: '2016-06-04', views: 18914, users: 16912 },\n            { id: 8912319, title: \"Ad Astra (2019)\", duration: 123 * 60, addedIntoSystem: '2020-04-03', views: 19941, users: 18091 },\n            { id: 3781205, title: \"Terminator: Salvation (2009)\", duration: 115 * 60, addedIntoSystem: '2010-09-08', views: 7129, users: 6681 },\n            { id: 3981214, title: \"Avatar (2009)\", duration: 162 * 60, addedIntoSystem: '2011-03-01', views: 34193, users: 29810 },\n            { id: 3221233, title: \"Star Trek (2009)\", duration: 127 * 60, addedIntoSystem: '2010-10-10', views: 6619, users: 5518 },\n            { id: 5120412, title: \"Star Trek: Into Darkness (2013)\", duration: 132 * 60, addedIntoSystem: '2014-02-19', views: 8712, users: 7901 },\n            { id: 4412551, title: \"Prometheus (2012)\", duration: 124 * 60, addedIntoSystem: '2013-06-07', views: 15129, users: 14098 },\n            { id: 6129818, title: \"Tomorrowland (2015)\", duration: 130 * 60, addedIntoSystem: '2016-05-01', views: 16991, users: 16017 },\n        ];\n        return result;\n    };\n    ContentInsightsView.prototype.loadMockData = function () {\n        var res = this.contentsDb.slice();\n        if (this.searchOptions.text) {\n            var text = this.searchOptions.text.toLowerCase();\n            res = [];\n            for (var pos = 0; pos < this.contentsDb.length; pos++) {\n                var rec = this.contentsDb[pos];\n                for (var k in rec) {\n                    if ((rec[k] + '').toLowerCase().indexOf(text) !== -1) {\n                        res.push(rec);\n                    }\n                }\n            }\n        }\n        this.searchOptions.total = res.length;\n        if (this.searchOptions.sort_by) {\n            var sort_by = this.searchOptions.sort_by;\n            var cmp = function (a, b) {\n                if (a[sort_by] < b[sort_by]) {\n                    return -1;\n                }\n                else if (a[sort_by] > b[sort_by]) {\n                    return 1;\n                }\n                return 0;\n            };\n            if (this.searchOptions.sort_dir != 'asc') {\n                cmp = function (a, b) {\n                    if (a[sort_by] < b[sort_by]) {\n                        return 1;\n                    }\n                    else if (a[sort_by] > b[sort_by]) {\n                        return -1;\n                    }\n                    return 0;\n                };\n            }\n            res.sort(cmp);\n        }\n        var pageSize = this.searchOptions.page_size;\n        var pageIdx = (this.searchOptions.page - 1) * pageSize;\n        this.contents = res.slice(pageIdx, pageIdx + pageSize);\n    };\n    ContentInsightsView.prototype.onSearchKeyPress = function (e) {\n        var code = e.keyCode || e.which;\n        if (code == 13) {\n            this.searchOptions.page = 1;\n            this.loadMockData();\n        }\n    };\n    ContentInsightsView.prototype.onColumnHeaderClick = function (columnName) {\n        if (this.searchOptions.sort_by == columnName) {\n            this.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n        }\n        else {\n            this.searchOptions.sort_by = columnName;\n            this.searchOptions.sort_dir = 'asc';\n        }\n        this.searchOptions.page = 1;\n        this.loadMockData();\n    };\n    ContentInsightsView.prototype.onPageChanged = function (page) {\n        this.searchOptions.page = page;\n        this.loadMockData();\n    };\n    var _a, _b, _c, _d, _e, _f;\n    ContentInsightsView = content_insights_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'content-insights-view',\n            template: __webpack_require__(1395),\n            styles: [__webpack_require__(1396)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        content_insights_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], ContentInsightsView);\n    return ContentInsightsView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/content-insights/content-insights.module.ts\nvar content_insights_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar content_insights_module_routes = [\n    { path: '', component: content_insights_view_component_ContentInsightsView },\n];\nvar content_insights_module_AnalyticsContentInsightsModule = (function () {\n    function AnalyticsContentInsightsModule() {\n    }\n    AnalyticsContentInsightsModule = content_insights_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(content_insights_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                pager_module_PagerModule,\n                chart_module_ChartModule,\n            ],\n            declarations: [\n                content_insights_view_component_ContentInsightsView\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n                media_service_MediaService\n            ]\n        })\n    ], AnalyticsContentInsightsModule);\n    return AnalyticsContentInsightsModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/flexmodel/flexmodel.view.component.ts\nvar flexmodel_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar flexmodel_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar flexmodel_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar flexmodel_view_component_FlexModelView = (function (_super) {\n    flexmodel_view_component___extends(FlexModelView, _super);\n    function FlexModelView(chartService, mediaAnalyticsService, locale, translation, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.filterDropdownTimeScope = [{ value: 0, label: 'Fixed dates' }, { value: 1, label: 'Fixed dates', markSelected: true, hasSeparatorBelow: true }, { value: 2, label: 'Now', hasSeparatorBelow: true }, { value: 3, label: 'Last 24h' }, { value: 4, label: 'Last 48h' }, { value: 5, label: 'Last 7d' }, { value: 6, label: 'Last 30d' }, { value: 7, label: 'Last 90d' }, { value: 8, label: 'Last 180d' }];\n        _this.filterDropdownOs = [{ value: 0, label: 'Windows, MacOS' }, { value: 1, label: 'Windows', markSelected: true }, { value: 2, label: 'Android' }, { value: 3, label: 'iOS' }, { value: 4, label: 'MacOS', markSelected: true }, { value: 5, label: 'Linux' }, { value: 6, label: 'Windows Phone' }, { value: 7, label: 'Chrome OS' }, { value: 8, label: 'BlackBerry' }];\n        _this.filterDropdownBrowser = [{ value: 0, label: 'Chrome, Firefox' }, { value: 1, label: 'Chrome', markSelected: true }, { value: 2, label: 'Firefox', markSelected: true }, { value: 3, label: 'Safari' }, { value: 4, label: 'IE' }, { value: 5, label: 'Samsung Internet' }, { value: 6, label: 'Opera' }, { value: 7, label: 'Edge' }, { value: 8, label: '(unknown)' }, { value: 9, label: 'Vivaldi' }, { value: 10, label: 'Chromium' }, { value: 11, label: 'Android' }, { value: 12, label: 'Maxthon' }, { value: 13, label: 'Pale Moon' }, { value: 14, label: 'Puffin' }, { value: 15, label: 'BlackBerry' }, { value: 16, label: 'UC Browser' }, { value: 17, label: 'Nokia' }];\n        _this.filterDropdownDevice = [{ value: 0, label: 'Desktop' }, { value: 1, label: 'Desktop', markSelected: true }, { value: 2, label: 'Mobile' }];\n        _this.filterDropdownTags = [{ value: 0, label: 'technology, entertainment' }, { value: 1, label: 'technology', markSelected: true }, { value: 2, label: 'science' }, { value: 3, label: 'global issues' }, { value: 4, label: 'design' }, { value: 5, label: 'business' }, { value: 6, label: 'culture' }, { value: 7, label: 'entertainment', markSelected: true }, { value: 8, label: 'health' }, { value: 9, label: 'biology' }, { value: 10, label: 'creativity' }, { value: 11, label: 'environment' }, { value: 12, label: 'art' }, { value: 13, label: 'TEDx' }, { value: 14, label: 'music' }, { value: 15, label: 'medicine' }, { value: 16, label: 'economics' }, { value: 17, label: 'politics' }, { value: 18, label: 'performance' }, { value: 19, label: 'psychology' }, { value: 20, label: 'life' }];\n        _this.filterDropdownAppVersion = [{ value: 0, label: '1.12.11' }, { value: 1, label: '1.12.11', markSelected: true }, { value: 2, label: '1.0.1' }, { value: 3, label: '1.1.9' }, { value: 4, label: '1.7.11' }];\n        _this.filterDropdownPlayer = [{ value: 0, label: 'Video.js' }, { value: 1, label: 'Video.js', markSelected: true }, { value: 2, label: 'ExoPlayer' }, { value: 3, label: 'Bradmax iOS' }];\n        _this.filterDropdownIsp = [{ value: 0, label: 'UPC Polska' }, { value: 1, label: 'UPC Polska', markSelected: true }, { value: 2, label: 'Vectra Broadband' }, { value: 3, label: 'Multimedia Polska S.A.' }, { value: 4, label: 'Orange Polska' }, { value: 5, label: 'T-mobile Polska' }, { value: 6, label: 'Orange Mobile' }, { value: 7, label: 'Netia SA' }, { value: 8, label: 'Play' }, { value: 9, label: 'Plus' }, { value: 10, label: 'Cyfrowy Polsat' }];\n        _this.filterDropdownCdn = [{ value: 0, label: 'AWS, Akamai' }, { value: 1, label: 'AWS', markSelected: true }, { value: 2, label: 'Akamai', markSelected: true }, { value: 3, label: 'CDN77' }, , { value: 4, label: 'Azure' }];\n        _this.filterDropdownGeoCountry = [{ value: 0, label: 'All' }, { value: 1, label: ' United States', markSelected: true }, { value: 2, label: ' China' }, { value: 3, label: ' Japan' }, { value: 4, label: ' Canada' }, { value: 5, label: ' Brazil' }, { value: 6, label: ' Germany' }, { value: 7, label: ' United Kingdom' }, { value: 8, label: ' France' }, { value: 9, label: ' Republic of Korea' }, { value: 10, label: ' Netherlands' }, { value: 11, label: ' Russia' }, { value: 12, label: ' Italy' }, { value: 13, label: ' India' }, { value: 14, label: ' Australia' }, { value: 15, label: ' Spain' }, { value: 16, label: ' Taiwan' }, { value: 17, label: ' Mexico' }, { value: 18, label: ' South Africa' }, { value: 19, label: ' Vietnam' }, { value: 20, label: ' Indonesia' }];\n        _this.filterDropdownGeoRegion = [{ value: 0, label: 'All' }];\n        _this.filterDropdownGeoCity = [{ value: 0, label: 'All' }];\n        _this.filterDropdownDemographyAgeFrom = [{ value: -1, label: '0' }, { value: 0, label: '0', markSelected: true }, { value: 3, label: '3' }, { value: 6, label: '6' }, { value: 9, label: '9' }, { value: 12, label: '12' }, { value: 15, label: '15' }, { value: 18, label: '18' }, { value: 21, label: '21' }, { value: 24, label: '24' }, { value: 27, label: '27' }, { value: 30, label: '30' }, { value: 33, label: '33' }, { value: 36, label: '36' }, { value: 39, label: '39' }, { value: 42, label: '42' }, { value: 45, label: '45' }, { value: 48, label: '48' }, { value: 51, label: '51' }, { value: 54, label: '54' }, { value: 57, label: '57' }, { value: 60, label: '60' }, { value: 63, label: '63' }, { value: 66, label: '66' }, { value: 69, label: '69' }, { value: 72, label: '72' }, { value: 75, label: '75' }, { value: 78, label: '78' }, { value: 81, label: '81' }, { value: 84, label: '84' }, { value: 87, label: '87' }, { value: 90, label: '90' }, { value: 93, label: '93' }, { value: 96, label: '96' }, { value: 99, label: '99' }];\n        _this.filterDropdownDemographyAgeTo = [{ value: -1, label: '99' }, { value: 0, label: '0' }, { value: 3, label: '3' }, { value: 6, label: '6' }, { value: 9, label: '9' }, { value: 12, label: '12' }, { value: 15, label: '15' }, { value: 18, label: '18' }, { value: 21, label: '21' }, { value: 24, label: '24' }, { value: 27, label: '27' }, { value: 30, label: '30' }, { value: 33, label: '33' }, { value: 36, label: '36' }, { value: 39, label: '39' }, { value: 42, label: '42' }, { value: 45, label: '45' }, { value: 48, label: '48' }, { value: 51, label: '51' }, { value: 54, label: '54' }, { value: 57, label: '57' }, { value: 60, label: '60' }, { value: 63, label: '63' }, { value: 66, label: '66' }, { value: 69, label: '69' }, { value: 72, label: '72' }, { value: 75, label: '75' }, { value: 78, label: '78' }, { value: 81, label: '81' }, { value: 84, label: '84' }, { value: 87, label: '87' }, { value: 90, label: '90' }, { value: 93, label: '93' }, { value: 96, label: '96' }, { value: 99, label: '99', markSelected: true }];\n        _this.filterDropdownDemographySex = [{ value: 0, label: 'Male' }, { value: 1, label: 'Male', markSelected: true }, { value: 2, label: 'Feale' }];\n        _this.isPanelOpen = {};\n        for (var panelId = 1; panelId < 9; panelId++) {\n            _this.isPanelOpen[panelId] = true;\n        }\n        _this.timeSeries = {\n            \"data\": [\n                { \"data\": [1318, 1280, 1310, 1208, 799, 1071, 1513, 1275, 1372, 1293, 1131, 756, 1067, 1417, 1324, 1278, 1058, 818, 868, 1173, 1569, 1389, 1448, 1311, 1119, 953, 1003, 1139, 1040, 1381, 837], \"label\": \"Users\" },\n                { \"data\": [4276, 4197, 4339, 4108, 2470, 3422, 4804, 4439, 4328, 4154, 3479, 2377, 3181, 4503, 4319, 4006, 3448, 2635, 2818, 3732, 5330, 4960, 4388, 4376, 3573, 2847, 3307, 3709, 2473, 4296, 2611], \"label\": \"Views\" }\n            ],\n            \"labels\": [\"2019-10-14T22:00:00.000Z\", \"2019-10-15T22:00:00.000Z\", \"2019-10-16T22:00:00.000Z\", \"2019-10-17T22:00:00.000Z\", \"2019-10-18T22:00:00.000Z\", \"2019-10-19T22:00:00.000Z\", \"2019-10-20T22:00:00.000Z\", \"2019-10-21T22:00:00.000Z\", \"2019-10-22T22:00:00.000Z\", \"2019-10-23T22:00:00.000Z\", \"2019-10-24T22:00:00.000Z\", \"2019-10-25T22:00:00.000Z\", \"2019-10-26T22:00:00.000Z\", \"2019-10-27T23:00:00.000Z\", \"2019-10-28T23:00:00.000Z\", \"2019-10-29T23:00:00.000Z\", \"2019-10-30T23:00:00.000Z\", \"2019-10-31T23:00:00.000Z\", \"2019-11-01T23:00:00.000Z\", \"2019-11-02T23:00:00.000Z\", \"2019-11-03T23:00:00.000Z\", \"2019-11-04T23:00:00.000Z\", \"2019-11-05T23:00:00.000Z\", \"2019-11-06T23:00:00.000Z\", \"2019-11-07T23:00:00.000Z\", \"2019-11-08T23:00:00.000Z\", \"2019-11-09T23:00:00.000Z\", \"2019-11-10T23:00:00.000Z\", \"2019-11-11T23:00:00.000Z\", \"2019-11-12T23:00:00.000Z\", \"2019-11-13T23:00:00.000Z\"],\n            \"startDate\": moment_default()([2019, 10, 14]),\n            \"endDate\": moment_default()([2019, 11, 13]),\n            \"chartType\": \"lineTime\",\n            \"granularity\": \"day\"\n        };\n        _this.metricsDropdown = [{ value: 0, label: 'Select metrics for next chart' }, { value: 1, label: 'Users' }, { value: 2, label: 'Views' }, { value: 3, label: 'Avg watching time' }, { value: 4, label: 'Views/User' }, { value: 5, label: 'Stream start time' }, { value: 6, label: 'Player start time' }, { value: 7, label: 'Rebuffer duration' }, { value: 8, label: 'Rebuffer percentage' }, { value: 9, label: 'Avg bitrate' }, { value: 10, label: 'Quit time' }, { value: 11, label: 'Quit ratio' }, { value: 12, label: 'Error ratio' }];\n        _this.metricDropdown = [{ value: 0, label: 'Select metric for next chart' }, { value: 1, label: 'Users' }, { value: 2, label: 'Views' }, { value: 3, label: 'Avg watching time' }, { value: 4, label: 'Views/User' }, { value: 5, label: 'Stream start time' }, { value: 6, label: 'Player start time' }, { value: 7, label: 'Rebuffer duration' }, { value: 8, label: 'Rebuffer percentage' }, { value: 9, label: 'Avg bitrate' }, { value: 10, label: 'Quit time' }, { value: 11, label: 'Quit ratio' }, { value: 12, label: 'Error ratio' }];\n        _this.tableDimDropdown = [{ value: 0, label: 'Dimension' }, { value: 1, label: 'OS' }, { value: 2, label: 'Browser' }, { value: 3, label: 'ISP' }, { value: 4, label: 'CDN' }, { value: 5, label: 'Player' }, { value: 6, label: 'App version' }, { value: 7, label: 'Demography/Sex' }];\n        _this.tableCols = ['UPC Polska', 'Vectra Broadband', 'Multimedia Polska S.A.', 'Orange Polska', 'T-mobile Polska', 'Orange Mobile', 'Netia SA', 'Play', 'Plus', 'Cyfrowy Polsat'];\n        _this.tableRows = ['AWS', 'Akamai', 'CDN77', 'Azure'];\n        _this.tableData = [\n            [0.880, 1.157, 1.482, 1.627, 1.268, 1.961, 1.542, 1.523, 1.628, 2.043],\n            [1.015, 1.084, 1.583, 1.372, 1.583, 1.521, 1.298, 1.724, 2.282, 1.504],\n            [0.923, 1.219, 1.306, 0.982, 1.655, 1.767, 1.663, 1.666, 1.801, 2.000],\n            [0.719, 1.055, 1.449, 1.326, 1.575, 1.858, 1.465, 2.071, 1.770, 1.546]\n        ];\n        _this.tableMetricsDropdown = [{ value: 0, label: 'Select metric for next table' }, { value: 1, label: 'Users' }, { value: 2, label: 'Views' }, { value: 3, label: 'Avg watching time' }, { value: 4, label: 'Views/User' }, { value: 5, label: 'Stream start time' }, { value: 6, label: 'Player start time' }, { value: 7, label: 'Rebuffer duration' }, { value: 8, label: 'Rebuffer percentage' }, { value: 9, label: 'Avg bitrate' }, { value: 10, label: 'Quit time' }, { value: 11, label: 'Quit ratio' }, { value: 12, label: 'Error ratio' }];\n        _this.categoriesSeries = {\n            \"data\": [\n                { \"label\": \"Stream start time [sec]\", \"data\": [0.884, 1.128, 1.455, 1.326, 1.52, 1.776, 1.492, 1.746, 1.87, 1.773] },\n                { \"label\": \"Player start time [sec]\", \"data\": [0.645, 0.639, 0.689, 0.672, 0.726, 0.740, 0.737, 0.788, 0.777, 0.895] },\n                { \"label\": \"Rebuffering time [sec]\", \"data\": [1.648, 2.344, 2.296, 2.337, 2.201, 2.450, 2.461, 2.687, 2.754, 2.809] },\n            ],\n            \"labels\": ['UPC Polska', 'Vectra Broadband', 'Multimedia Polska S.A.', 'Orange Polska', 'T-mobile Polska', 'Orange Mobile', 'Netia SA', 'Play', 'Plus', 'Cyfrowy Polsat']\n        };\n        _this.categoriesDimDropdown = [{ value: 0, label: 'Select dimension' }, { value: 1, label: 'OS' }, { value: 2, label: 'Browser' }, { value: 3, label: 'ISP' }, { value: 4, label: 'CDN' }, { value: 5, label: 'Player' }, { value: 6, label: 'App version' }, { value: 7, label: 'Demography/Sex' }];\n        _this.mapChartData = {\n            \"chartType\": \"GeoChart\",\n            \"dataTable\": [\n                [\"Country\", \"Stream start time\"],\n                [\"PL\", 1.522], [\"SE\", 1.268], [\"NO\", 1.216], [\"US\", 1.258], [\"GB\", 1.260], [\"DE\", 1.538], [\"DK\", 1.375], [\"SL\", 1.504], [\"ES\", 1.359], [\"NL\", 1.233],\n                [\"CN\", 1.240], [\"FI\", 1.451], [\"BB\", 1.430], [\"FR\", 1.555], [\"BE\", 1.555], [\"MT\", 1.358], [\"AU\", 1.533], [\"AT\", 1.458], [\"RW\", 1.492], [\"PT\", 1.643],\n                [\"IT\", 1.311], [\"CA\", 1.450], [\"RS\", 1.662], [\"JP\", 1.906], [\"CH\", 1.982], [\"UA\", 2.031], [\"GR\", 2.254], [\"HR\", 2.480], [\"AE\", 2.528], [\"SA\", 3.146],\n                [\"CZ\", 3.141], [\"MA\", 3.463], [\"BA\", 3.372], [\"TR\", 3.855], [\"KW\", 3.962], [\"IE\", 3.908], [\"RU\", 4.226], [\"GW\", 4.364], [\"CY\", 4.507], [\"IN\", 4.429],\n                [\"EE\", 4.731], [\"TH\", 5.278], [\"AZ\", 5.346], [\"ET\", 5.408], [\"LR\", 5.427], [\"BR\", 5.733], [\"BY\", 5.876], [\"HU\", 5.700], [\"BG\", 5.889], [\"LV\", 6.046],\n                [\"IS\", 5.977], [\"MX\", 5.836], [\"HK\", 6.303], [\"QA\", 6.512], [\"RO\", 6.256], [\"ZA\", 6.521], [\"MK\", 6.507], [\"NG\", 6.732], [\"SI\", 6.628], [\"CO\", 6.704],\n                [\"ID\", 6.663], [\"GH\", 6.729], [\"ME\", 6.664], [\"SK\", 6.997], [\"SG\", 7.075], [\"IR\", 6.982], [\"CV\", 7.055], [\"TZ\", 7.387], [\"EG\", 7.103], [\"PK\", 7.227],\n                [\"CI\", 7.095], [\"CL\", 7.456], [\"KE\", 7.347], [\"LT\", 7.342], [\"BD\", 7.443], [\"VN\", 7.294], [\"BM\", 7.295], [\"SV\", 7.663], [\"CD\", 7.553], [\"KH\", 7.745],\n                [\"KR\", 7.645], [\"LU\", 7.644], [\"TT\", 7.485], [\"DM\", 7.623], [\"VC\", 7.827], [\"HN\", 7.674], [\"AO\", 7.894], [\"IL\", 7.802], [\"OM\", 7.864], [\"MD\", 7.869],\n                [\"LS\", 7.979], [\"MU\", 7.795], [\"MY\", 7.894], [\"MM\", 8.032], [\"GN\", 8.054], [\"NE\", 7.912], [\"SJ\", 7.821], [\"AR\", 7.762], [\"BS\", 7.991], [\"LC\", 8.080],\n                [\"NI\", 7.828], [\"EC\", 7.901], [\"BO\", 7.706],\n            ],\n            \"apiKey\": \"AIzaSyAFWd3IeJ83WwKdNSqs1NNTIyKniUREGjo\",\n            \"options\": {\n                \"colorAxis\": {\n                    \"colors\": [\"#d9ebfb\", \"#348fe2\"]\n                },\n                \"defaultColor\": \"#348fe2\",\n                \"datalessRegionColor\": \"#348fe2\"\n            }\n        };\n        return _this;\n    }\n    FlexModelView.prototype.ngOnInit = function () {\n    };\n    FlexModelView.prototype.ngOnDestroy = function () {\n    };\n    FlexModelView.prototype.onTogglePanel = function (panelId) {\n        this.isPanelOpen[panelId] = !this.isPanelOpen[panelId];\n    };\n    var _a, _b, _c, _d, _e, _f;\n    FlexModelView = flexmodel_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'flexmodel-view',\n            template: __webpack_require__(1397),\n            styles: [__webpack_require__(1398)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        flexmodel_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], FlexModelView);\n    return FlexModelView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/flexmodel/flexmodelsetup.view.component.ts\nvar flexmodelsetup_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar flexmodelsetup_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar flexmodelsetup_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar flexmodelsetup_view_component_FlexModelSetupView = (function (_super) {\n    flexmodelsetup_view_component___extends(FlexModelSetupView, _super);\n    function FlexModelSetupView(chartService, mediaAnalyticsService, exportService, locale, translation, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.exportService = exportService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.fieldTypeDropdown = [\n            { value: 'string', label: 'string' },\n            { value: 'int', label: 'int' },\n            { value: 'float', label: 'float' },\n            { value: 'bool', label: 'bool' },\n            { value: 'date', label: 'date' },\n            { value: 'time', label: 'time' },\n            { value: 'type', label: 'type' },\n            { value: 'array.string', label: 'array.string' },\n            { value: 'array.type', label: 'array.type' },\n        ];\n        _this.addFieldDropdown = [\n            { value: 0, label: 'Add basic field' },\n            { value: 1, label: 'Add type field' }\n        ];\n        _this.loadPredefinedJson('qoe');\n        return _this;\n    }\n    FlexModelSetupView.prototype.loadPredefinedJson = function (name) {\n        this.model = JSON.parse(JSON.stringify(__webpack_require__(1399)(\"./\" + name + '.json')));\n        this.modelAsJson = JSON.stringify(this.model, null, 2);\n        this.addParentsToModel(this.model);\n        this.dimensions = this.loadDimensions(this.model);\n        this.metricsByType = this.loadMetrics(this.model);\n        this.cdr.markForCheck();\n    };\n    FlexModelSetupView.prototype.addParentsToModel = function (model) {\n        var root = {\n            type: 'datapoint',\n            fields: model\n        };\n        var queue = [root];\n        while (queue.length) {\n            var n = queue.shift();\n            if (n.fields) {\n                for (var _i = 0, _a = n.fields; _i < _a.length; _i++) {\n                    var nn = _a[_i];\n                    nn.parent = n;\n                    queue.push(nn);\n                }\n            }\n        }\n    };\n    FlexModelSetupView.prototype.loadDimensions = function (model) {\n        var dims = {\n            'Date range': true\n        };\n        var root = {\n            type: 'datapoint',\n            fields: model\n        };\n        var queue = [root];\n        while (queue.length) {\n            var n = queue.shift();\n            if (n.fields) {\n                for (var _i = 0, _a = n.fields; _i < _a.length; _i++) {\n                    var f = _a[_i];\n                    queue.push(f);\n                }\n            }\n            if (n.name && (n.type != 'type') && (n.type != 'array.type') && (n.type != 'datapoint') && !n.aggregable) {\n                var name = n.name;\n                if (n.parent && n.parent.typeName) {\n                    name = n.parent.typeName + '.' + name;\n                }\n                dims[name] = true;\n            }\n        }\n        var result = Object.keys(dims);\n        result.sort();\n        return result;\n    };\n    FlexModelSetupView.prototype.loadMetrics = function (model) {\n        var aggrMetrics = {};\n        var datapointCountMetrics = [];\n        var countMetrics = {};\n        var root = {\n            type: 'datapoint',\n            fields: model\n        };\n        var queue = [root];\n        while (queue.length) {\n            var n = queue.shift();\n            if (n.fields) {\n                for (var _i = 0, _a = n.fields; _i < _a.length; _i++) {\n                    var f = _a[_i];\n                    queue.push(f);\n                }\n            }\n            if (n.name && n.type == 'datapoint') {\n                datapointCountMetrics.push(n.name);\n            }\n            if (n.name && (n.type != 'type') && (n.type != 'array.type') && (n.type != 'datapoint') && !n.aggregable) {\n                var name = n.name;\n                if (n.parent && n.parent.typeName) {\n                    name = n.parent.typeName + '.' + name;\n                }\n                countMetrics[name] = true;\n            }\n            if (n.name && n.aggregable) {\n                var name = n.name;\n                if (n.parent && n.parent.typeName) {\n                    name = n.parent.typeName + '.' + name;\n                }\n                aggrMetrics[name] = true;\n            }\n        }\n        var aggrMetricsList = Object.keys(aggrMetrics);\n        aggrMetricsList.sort();\n        var countMetricsList = Object.keys(countMetrics);\n        countMetricsList.sort();\n        datapointCountMetrics.sort();\n        var result = {\n            'aggr': aggrMetricsList,\n            'count': countMetricsList,\n            'datapoint': datapointCountMetrics,\n        };\n        return result;\n    };\n    FlexModelSetupView.prototype.exportToJson = function () {\n        var exportFileName = 'bradmax_flex_model.json';\n        this.exportService.exportFileFromJs(exportFileName, this.modelAsJson);\n    };\n    FlexModelSetupView.prototype.loadJsonClick = function () {\n        document.getElementById('flex_model_json_upload').click();\n    };\n    FlexModelSetupView.prototype.handleJsonInput = function (files) {\n        var _this = this;\n        var fileTobeRead = files[0];\n        var fileReader = new FileReader();\n        fileReader.onload = function (e) {\n            _this.loadJson(fileReader.result);\n        };\n        fileReader.readAsText(fileTobeRead);\n    };\n    FlexModelSetupView.prototype.loadJson = function (modelJson) {\n        try {\n            this.model = JSON.parse(modelJson);\n        }\n        catch (e) {\n            alert(\"Cannot parse JSON file. \" + e);\n            return;\n        }\n        this.modelAsJson = modelJson;\n        this.addParentsToModel(this.model);\n        this.dimensions = this.loadDimensions(this.model);\n        this.metricsByType = this.loadMetrics(this.model);\n        this.cdr.markForCheck();\n    };\n    var _a, _b, _c, _d, _e, _f, _g;\n    FlexModelSetupView = flexmodelsetup_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'flexmodelsetup-view',\n            template: __webpack_require__(1404),\n            styles: [__webpack_require__(1405)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        flexmodelsetup_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _b || Object, typeof (_c = typeof export_service_ExportService !== \"undefined\" && export_service_ExportService) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _d || Object, typeof (_e = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object, typeof (_g = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _g || Object])\n    ], FlexModelSetupView);\n    return FlexModelSetupView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/flexmodel/flexmodel.module.ts\nvar flexmodel_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar flexmodel_module_routes = [\n    { path: '', component: flexmodel_view_component_FlexModelView },\n    { path: 'setup', component: flexmodelsetup_view_component_FlexModelSetupView },\n];\nvar flexmodel_module_AnalyticsFlexmodelModule = (function () {\n    function AnalyticsFlexmodelModule() {\n    }\n    AnalyticsFlexmodelModule = flexmodel_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(flexmodel_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule,\n                TagInputModule,\n                pager_module_PagerModule,\n                google_charts_module_Ng2GoogleChartsModule,\n            ],\n            declarations: [\n                flexmodel_view_component_FlexModelView,\n                flexmodelsetup_view_component_FlexModelSetupView\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n                media_service_MediaService,\n            ]\n        })\n    ], AnalyticsFlexmodelModule);\n    return AnalyticsFlexmodelModule;\n}());\n\n\n// EXTERNAL MODULE: ./src/service/sidebar.service.ts\nvar sidebar_service = __webpack_require__(36);\n\n// CONCATENATED MODULE: ./src/module/analytics/heartbeat/heartbeat.view.component.ts\nvar heartbeat_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar heartbeat_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar heartbeat_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar heartbeat_view_component_HeartbeatViewComponent = (function (_super) {\n    heartbeat_view_component___extends(HeartbeatViewComponent, _super);\n    function HeartbeatViewComponent(router, sidebar, view, locale, translation, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.router = router;\n        _this.sidebar = sidebar;\n        _this.view = view;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        return _this;\n    }\n    HeartbeatViewComponent.prototype.onShow = function (_option) {\n        this.router.navigate(['admin', 'analytics', 'heartbeat', _option]);\n        this.view.setHeartBeatMode(true);\n        this.sidebar.close();\n    };\n    var _a, _b, _c, _d, _e, _f;\n    HeartbeatViewComponent = heartbeat_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'heartbeat-view',\n            template: __webpack_require__(1406),\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        heartbeat_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _a || Object, typeof (_b = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _b || Object, typeof (_c = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _d || Object, typeof (_e = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], HeartbeatViewComponent);\n    return HeartbeatViewComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/heartbeat/panicdashboard.view.component.ts\nvar panicdashboard_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar panicdashboard_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar panicdashboard_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\nvar panicdashboard_view_component_PanicDashboardViewComponent = (function (_super) {\n    panicdashboard_view_component___extends(PanicDashboardViewComponent, _super);\n    function PanicDashboardViewComponent(pagesService, analyticsService, mediaAnalyticsService, router, sidebar, view, locale, translation, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.pagesService = pagesService;\n        _this.analyticsService = analyticsService;\n        _this.mediaAnalyticsService = mediaAnalyticsService;\n        _this.router = router;\n        _this.sidebar = sidebar;\n        _this.view = view;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        _this.leftChartHeight = '0px';\n        _this.rightPanelHeight = '0px';\n        _this.mapColorRange = ['#AABBFF', '#348fe2'];\n        _this.activeGeoType = 'region';\n        _this.selectedCountry = 'All';\n        return _this;\n    }\n    PanicDashboardViewComponent.prototype.getScreenSize = function () {\n        var _this = this;\n        this.leftChartHeight = ((window.innerHeight - (this.divOSERTable.nativeElement.scrollHeight +\n            this.divBrowserERTable.nativeElement.scrollHeight + 30)) / 3 - 20).toString() + 'px';\n        this.rightPanelHeight = (window.innerHeight - 20).toString() + 'px';\n        setTimeout(function () { _this.loadMapData(); }, 50);\n        setTimeout(function () { _this.cdr.markForCheck(); }, 20);\n    };\n    PanicDashboardViewComponent.prototype.ngAfterViewInit = function () {\n        this.getScreenSize();\n    };\n    PanicDashboardViewComponent.prototype.ngOnInit = function () {\n        this.loadMockData();\n        this.loadCountriesList();\n        this.loadMaterialER();\n        this.loadOSER();\n        this.lodadBrowserER();\n    };\n    PanicDashboardViewComponent.prototype.loadMaterialER = function () {\n        this.material_error_rate = new Array(0);\n        for (var _i = 0; _i < 26; _i++) {\n            this.material_error_rate.push({ id: (_i * 2 + 1).toString(),\n                title: 'Material#' + Math.floor(Math.random() * 100).toString(),\n                error_rate: _i * 10 });\n        }\n    };\n    PanicDashboardViewComponent.prototype.loadOSER = function () {\n        this.os_error_rate = new Array(0);\n        for (var _i = 0; _i < 5; _i++) {\n            this.os_error_rate.push({ os: \"opSys\" + (_i * 2).toString(),\n                error_rate: Math.floor(Math.random() * 100).toString() + \"%\" });\n        }\n    };\n    PanicDashboardViewComponent.prototype.lodadBrowserER = function () {\n        this.browser_error_rate = new Array(0);\n        for (var _i = 0; _i < 5; _i++) {\n            this.browser_error_rate.push({ browser: \"browser\" + (_i * 2).toString(),\n                error_rate: Math.floor(Math.random() * 100).toString() + \"%\" });\n        }\n    };\n    PanicDashboardViewComponent.prototype.loadCountriesList = function () {\n        var _this = this;\n        this.countriesList = null;\n        this.pagesService.listOfCountries().subscribe(function (data) {\n            _this.countriesList = _this.parseGeoData(data);\n            setTimeout(function () { _this.cdr.markForCheck(); }, 20);\n            _this.loadMapData();\n        });\n    };\n    PanicDashboardViewComponent.prototype.loadMapData = function () {\n        var selectedCountryCode = \"PL\";\n        var regionsMapChartFix = __webpack_require__(107);\n        this.mapChartRegionsSkippingsSet = regionsMapChartFix.skippingSet;\n        var mapChartResolution = (selectedCountryCode in this.mapChartRegionsSkippingsSet) ? 'countries' : 'provinces';\n        this.geoData = new Array(0);\n        var geoDataTable = new Array(0);\n        geoDataTable.push([\"Region\", \"Value\"]);\n        var statValue = 0;\n        try {\n            for (var _i = 1; _i < this.countriesList.length; _i++) {\n                statValue = Math.round(Math.random() * 10000);\n                geoDataTable.push([this.countriesList[_i].value, statValue]);\n                this.geoData.push({ country: {\n                        name: this.countriesList[_i].label,\n                        code: this.countriesList[_i].value\n                    },\n                    flag: \"flag-icon flag-icon-\" + this.countriesList[_i].value.toLowerCase(),\n                    views: statValue });\n            }\n            if (this.selectedCountry != 'All') {\n                this.geoData = new Array(0);\n                for (var _i = 1; _i < 100; _i++) {\n                    statValue = Math.round(Math.random() * 10000);\n                    this.geoData.push({ country: {\n                            name: \"Region # \" + _i.toString(),\n                            code: _i.toString()\n                        },\n                        flag: \"flag-icon\",\n                        views: statValue });\n                }\n            }\n        }\n        catch (_e) { }\n        this.mapChartData = {\n            chartType: 'GeoChart',\n            apiKey: this.analyticsService.getGoogleMapsApiKey(),\n            dataTable: geoDataTable,\n            options: {\n                backgroundColor: '#575d63',\n                colorAxis: { colors: this.mapColorRange }\n            }\n        };\n        if (this.selectedCountry != 'All') {\n            this.mapChartData.options.resolution = mapChartResolution;\n            this.mapChartData.options.region = this.selectedCountry;\n            if (this.activeGeoType == \"city\") {\n                this.mapChartData.options.displayMode = 'markers';\n            }\n        }\n    };\n    PanicDashboardViewComponent.prototype.loadMockData = function () {\n        var _this = this;\n        var endDate = moment_default()().startOf('day');\n        var startDate = endDate.clone().subtract(30, 'days');\n        var labels = new Array(0);\n        var datadata = new Array(0);\n        for (var _i = 0; _i < 6; _i++) {\n            datadata.push(new Array(0));\n        }\n        this.mediaAnalyticsService.getMediaViewsHistory('MEDIA_ID_1', startDate, endDate, 'day')\n            .subscribe(function (data) {\n            data.data.label = 'label';\n            for (var _i = 0; _i < data.labels.length; _i++) {\n                labels.push(_i.toString());\n                for (var _i_1 = 0; _i_1 < 5; _i_1++) {\n                    datadata[_i_1].push(Math.floor(Math.random() * 100));\n                }\n            }\n            var data0 = Object.assign([], data.data);\n            var data1 = Object.assign([], data.data);\n            var data2 = Object.assign([], data.data);\n            var data3 = Object.assign([], data.data);\n            var data4 = Object.assign([], data.data);\n            var data5 = Object.assign([], data.data);\n            data1.data = datadata[0];\n            data2.data = datadata[1];\n            data3.data = datadata[2];\n            data4.data = datadata[3];\n            data5.data = datadata[4];\n            data1.fill = true;\n            var values = new Array(0);\n            values = Object.assign([], datadata[0]);\n            var sum = values.reduce(function (previous, current) { return current += previous; });\n            var avg = sum / values.length;\n            for (var _i = 0; _i < data.labels.length; _i++) {\n                datadata[5].push(avg);\n            }\n            data0.data = datadata[5];\n            _this.all24hErrorRate = {\n                data: [data1, data0],\n                labels: labels,\n                startDate: startDate,\n                endDate: endDate,\n                chartType: 'line',\n                granularity: 'day'\n            };\n            _this.browser24hErrorRate = {\n                data: [data5, data2, data3],\n                labels: labels,\n                startDate: startDate,\n                endDate: endDate,\n                chartType: 'line',\n                granularity: 'day'\n            };\n            _this.OS24hErrorRate = {\n                data: [data5, data4, data3],\n                labels: labels,\n                startDate: startDate,\n                endDate: endDate,\n                chartType: 'line',\n                granularity: 'day'\n            };\n            _this.cdr.markForCheck();\n        });\n    };\n    PanicDashboardViewComponent.prototype.ngOnDestroy = function () {\n    };\n    PanicDashboardViewComponent.prototype.onShowHeartbeat = function () {\n        this.router.navigate(['admin', 'analytics', 'heartbeat']);\n        this.view.setHeartBeatMode(false);\n        this.sidebar.openDefault();\n    };\n    PanicDashboardViewComponent.prototype.parseGeoData = function (_data) {\n        var result;\n        if (_data.length == 0) {\n            return [{ value: '', label: '' }];\n        }\n        result = new Array(0);\n        result.push({ value: 'All', label: 'All' });\n        for (var _i = 0; _i < _data.length; _i++) {\n            if (!(_data[_i].code == null)) {\n                result.push({ value: _data[_i].code, label: _data[_i].name });\n            }\n            else if (!(_data[_i].id == null)) {\n                result.push({ value: _data[_i].id, label: _data[_i].name });\n            }\n        }\n        return result;\n    };\n    var _a, _b, _c, _d, _f, _g, _h, _j, _k;\n    panicdashboard_view_component___decorate([\n        Object(core_es5[\"ViewChild\"])('divBrowserERTable'),\n        panicdashboard_view_component___metadata(\"design:type\", Object)\n    ], PanicDashboardViewComponent.prototype, \"divBrowserERTable\", void 0);\n    panicdashboard_view_component___decorate([\n        Object(core_es5[\"ViewChild\"])('divOSERTable'),\n        panicdashboard_view_component___metadata(\"design:type\", Object)\n    ], PanicDashboardViewComponent.prototype, \"divOSERTable\", void 0);\n    panicdashboard_view_component___decorate([\n        Object(core_es5[\"ViewChild\"])('divGeoTable'),\n        panicdashboard_view_component___metadata(\"design:type\", Object)\n    ], PanicDashboardViewComponent.prototype, \"divGeoTable\", void 0);\n    panicdashboard_view_component___decorate([\n        Object(core_es5[\"HostListener\"])('window:resize'),\n        panicdashboard_view_component___metadata(\"design:type\", Function),\n        panicdashboard_view_component___metadata(\"design:paramtypes\", []),\n        panicdashboard_view_component___metadata(\"design:returntype\", void 0)\n    ], PanicDashboardViewComponent.prototype, \"getScreenSize\", null);\n    PanicDashboardViewComponent = panicdashboard_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'panic-dashboard-view',\n            template: __webpack_require__(1407),\n            styles: [\n                \"\"\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        panicdashboard_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof pages_service_PagesService !== \"undefined\" && pages_service_PagesService) === \"function\" && _a || Object, typeof (_b = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _b || Object, typeof (_c = typeof media_service_MediaService !== \"undefined\" && media_service_MediaService) === \"function\" && _c || Object, typeof (_d = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_f = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _f || Object, typeof (_g = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _g || Object, typeof (_h = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _h || Object, typeof (_j = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _j || Object, typeof (_k = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _k || Object])\n    ], PanicDashboardViewComponent);\n    return PanicDashboardViewComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/heartbeat/warroom.view.component.ts\nvar warroom_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar warroom_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar warroom_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\nvar warroom_view_component_WarroomViewComponent = (function (_super) {\n    warroom_view_component___extends(WarroomViewComponent, _super);\n    function WarroomViewComponent(chartService, router, sidebar, view, analyticsService, locale, translation, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.chartService = chartService;\n        _this.router = router;\n        _this.sidebar = sidebar;\n        _this.view = view;\n        _this.analyticsService = analyticsService;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        _this.NUMBER_OF_TOP_MATERIAL_CHARTS = 10;\n        _this.LENGTH_OF_TOP_METERIAL_BUFFER = 20;\n        _this.SEC = 's';\n        _this.MIN = 'm';\n        _this.REFRESH_DATA_PERIOD = 1000;\n        _this.REFRESH_24_DATA_PERIOD = 60000;\n        _this.techChartHeight = '100px';\n        _this.topMatChartHeight = '50px';\n        _this.leftChartHeight = '200px';\n        _this.todaysViews = '0';\n        _this.todaysUsers = '0';\n        _this.yesterdayUsers = '0';\n        _this.yesterdayViews = '0';\n        _this.viewsPerUsers24 = '0';\n        _this.avgWatchingTime24 = '0';\n        _this.audienceWatchingUsersNum = 0;\n        _this.audienceMinutesChart = { data: [], labels: [] };\n        _this.audienceSecondsChart = { data: [], labels: [] };\n        _this.selectedMediaMinutesChart = new Array(0);\n        _this.selectedMediaSecondsChart = new Array(0);\n        _this.selectedMediaMetadata = new Array(0);\n        _this.mediaMetadataByMaterialId = new Map();\n        _this.topMediaListTotalLength = null;\n        _this.topMediaList = null;\n        _this.topMediaListLoading = false;\n        _this.topMediaListPagingOptions = {\n            page: 1,\n            page_size: _this.LENGTH_OF_TOP_METERIAL_BUFFER\n        };\n        _this.updateNum = 0;\n        _this.updateDataTimer = setInterval(function () { return _this.updateData(); }, _this.REFRESH_DATA_PERIOD);\n        _this.chartService.getChartDataChanges().subscribe(function (data) { return _this.cdr.markForCheck(); });\n        return _this;\n    }\n    WarroomViewComponent.prototype.getScreenSize = function () {\n        this.techChartHeight = Math.floor((window.innerHeight - 170) / 3).toString() + 'px';\n        this.topMatChartHeight = Math.floor((window.innerHeight - (80 + this.NUMBER_OF_TOP_MATERIAL_CHARTS * 15)) / this.NUMBER_OF_TOP_MATERIAL_CHARTS).toString() + 'px';\n        this.leftChartHeight = Math.floor((window.innerHeight - (95)) / 4).toString() + 'px';\n    };\n    WarroomViewComponent.prototype.ngOnInit = function () {\n        this.techChartHeight = Math.floor((window.innerHeight - 170) / 3).toString() + 'px';\n        this.topMatChartHeight = Math.floor((window.innerHeight - (40 + 40 + this.NUMBER_OF_TOP_MATERIAL_CHARTS * 15)) / this.NUMBER_OF_TOP_MATERIAL_CHARTS).toString() + 'px';\n        this.leftChartHeight = Math.floor((window.innerHeight - (95)) / 4).toString() + 'px';\n        this.loadData();\n        this.loadStats();\n    };\n    WarroomViewComponent.prototype.ngOnDestroy = function () {\n        if (this.updateDataTimer) {\n            clearInterval(this.updateDataTimer);\n            this.updateDataTimer = null;\n        }\n    };\n    WarroomViewComponent.prototype.loadData = function () {\n        this.audienceMinutesChart = { data: [], labels: [] };\n        this.audienceSecondsChart = { data: [], labels: [] };\n        for (var i = 0; i < 60; i++) {\n            this.audienceMinutesChart.labels.push('- ' + (60 - i) + this.MIN);\n            this.audienceSecondsChart.labels.push('- ' + (60 - i) + this.SEC);\n        }\n        this.audienceMinutesChart.data.push({\n            data: this.generateInitialData(60),\n            label: 'Watching users'\n        });\n        var dataForSeconds = this.generateInitialData(60);\n        this.audienceSecondsChart.data.push({\n            data: dataForSeconds,\n            label: 'Watching users'\n        });\n        this.loadTopMediaList();\n        this.cdr.markForCheck();\n    };\n    WarroomViewComponent.prototype.loadStats = function () {\n        var _this = this;\n        var endDate = moment_default()().startOf('day');\n        var startDate = endDate.clone().subtract(1, 'day');\n        this.analyticsService.getAudienceHistoryForRange(startDate, endDate, 'day').subscribe(function (data) {\n            try {\n                _this.todaysUsers = data[0].users;\n                _this.todaysViews = data[0].views;\n                _this.yesterdayUsers = data[1].users;\n                _this.yesterdayViews = data[1].views;\n            }\n            catch (_a) { }\n            _this.cdr.markForCheck();\n        });\n        this.analyticsService.getAudienceHistoryForRange(startDate, endDate, 'hour').subscribe(function (data) {\n            var todayData = new Array(0);\n            var yesterdayData = new Array(0);\n            _this.chartLabels = new Array(0);\n            _this.chartData = new Array();\n            for (var _i = 0; _i < data.length / 2; _i++) {\n                todayData.push(data[_i].views);\n                yesterdayData.push(data[_i + data.length / 2].views);\n                if (_i % 2 == 0) {\n                    _this.chartLabels.push((-data.length / 2 + _i).toString() + 'h');\n                }\n                else {\n                    _this.chartLabels.push(' ');\n                }\n            }\n            _this.chartData.push({ data: todayData, label: 'Today' });\n            _this.chartData.push({ data: yesterdayData, label: 'Yesterday' });\n            _this.cdr.markForCheck();\n        });\n        var endMoment = moment_default()().startOf('hour');\n        var beginMoment = endMoment.clone().subtract(24, 'hour');\n        this.analyticsService.getAudienceSummaryForRange(beginMoment, endMoment, 'hour').subscribe(function (data) {\n            _this.viewsPerUsers24 = Number(parseFloat(data.views) / parseFloat(data.users)).toString();\n            _this.avgWatchingTime24 = Number(parseFloat(data.watching_time) / parseFloat(data.users)).toString();\n        });\n        var colors = ChartConfigData.datasetColors;\n        this.chartDataDevice = new Array();\n        this.chartLabelsDevice = new Array(0);\n        this.chartDataBrowser = new Array();\n        this.chartLabelsBrowser = new Array(0);\n        this.chartDataOs = new Array();\n        this.chartLabelsOs = new Array(0);\n        this.analyticsService.getTechnologyStatsFor24h(beginMoment).subscribe(function (data) {\n            var chartbgcolor;\n            var chartlbcolor;\n            var chdata;\n            chartbgcolor = new Array(0);\n            chartlbcolor = new Array(0);\n            chdata = new Array(0);\n            for (var _i = 0; _i < data.device_type.summary.length; _i++) {\n                chartbgcolor.push('rgba(' + colors[_i % colors.length][0] + ',' + colors[_i % colors.length][1] + ',' + colors[_i % colors.length][2] + ',0.8)');\n                chartlbcolor.push('rgba(' + colors[_i % colors.length][0] + ',' + colors[_i % colors.length][1] + ',' + colors[_i % colors.length][2] + ',1)');\n                chdata.push(data.device_type.summary[_i].views);\n                _this.chartLabelsDevice.push(data.device_type.summary[_i].device_type_name);\n            }\n            _this.chartDataDevice = new Array();\n            _this.chartDataDevice.push({\n                backgroundColor: chartbgcolor,\n                borderColor: chartlbcolor,\n                data: chdata\n            });\n            chartbgcolor = new Array(0);\n            chartlbcolor = new Array(0);\n            chdata = new Array(0);\n            for (var _i = 0; _i < data.browser_family.summary.length; _i++) {\n                chartbgcolor.push(_this.colorArrToRgbaStr(colors[_i % colors.length], 0.8));\n                chartlbcolor.push(_this.colorArrToRgbaStr(colors[_i % colors.length], 1.0));\n                chdata.push(data.browser_family.summary[_i].views);\n                _this.chartLabelsBrowser.push(data.browser_family.summary[_i].browser_family_name);\n            }\n            _this.chartDataBrowser = new Array();\n            _this.chartDataBrowser.push({\n                backgroundColor: chartbgcolor,\n                borderColor: chartlbcolor,\n                data: chdata\n            });\n            chartbgcolor = new Array(0);\n            chartlbcolor = new Array(0);\n            chdata = new Array(0);\n            for (var _i = 0; _i < data.os_family.summary.length; _i++) {\n                chartbgcolor.push(_this.colorArrToRgbaStr(colors[_i % colors.length], 0.8));\n                chartlbcolor.push(_this.colorArrToRgbaStr(colors[_i % colors.length], 1.0));\n                chdata.push(data.os_family.summary[_i].views);\n                _this.chartLabelsOs.push(data.os_family.summary[_i].os_family_name);\n            }\n            _this.chartDataOs = new Array();\n            _this.chartDataOs.push({\n                backgroundColor: chartbgcolor,\n                borderColor: chartlbcolor,\n                data: chdata\n            });\n            _this.cdr.markForCheck();\n        });\n    };\n    WarroomViewComponent.prototype.colorArrToRgbaStr = function (colorArr, alpha) {\n        return 'rgba(' + colorArr[0] + ',' + colorArr[1] + ',' + colorArr[2] + ',' + alpha + ')';\n    };\n    WarroomViewComponent.prototype.updateData = function () {\n        this.updateNum++;\n        this.updateAudienceData();\n        if (this.updateNum % 10 == 0) {\n            this.loadTopMediaList();\n        }\n        if (this.updateNum % 300 == 0) {\n            this.loadStats();\n        }\n        for (var _i = 0; _i < this.topMediaList.length; _i++) {\n            this.updateSelectedMediaStats(this.topMediaList[_i].media.material_id);\n        }\n        this.cdr.markForCheck();\n    };\n    WarroomViewComponent.prototype.updateAudienceData = function () {\n        var _this = this;\n        if (!this.audienceMinutesChart\n            || !this.audienceMinutesChart.data\n            || (this.audienceMinutesChart.data.length == 0)\n            || (this.audienceMinutesChart.data[0].data.length == 0)\n            || (this.audienceSecondsChart.data.length == 0)\n            || (this.audienceSecondsChart.data[0].data.length == 0)) {\n            return;\n        }\n        this.analyticsService.getRealtimeAccountViewersNum().subscribe(function (data) {\n            if (_this.updateNum % 60 == 0) {\n                var samples = _this.audienceSecondsChart.data[0].data.slice();\n                var lastMinuteSum = 0;\n                for (var _a = 0, samples_1 = samples; _a < samples_1.length; _a++) {\n                    var v = samples_1[_a];\n                    lastMinuteSum += v;\n                }\n                _this.chartPushValue(_this.audienceMinutesChart, Math.ceil(lastMinuteSum / 60));\n            }\n            _this.audienceWatchingUsersNum = data.viewers_num > 0 ? data.viewers_num : 0;\n            _this.chartPushValue(_this.audienceSecondsChart, _this.audienceWatchingUsersNum);\n            _this.cdr.markForCheck();\n        });\n    };\n    WarroomViewComponent.prototype.updateSelectedMediaStats = function (_i) {\n        var _this = this;\n        if (!this.selectedMediaMinutesChart[_i]\n            || !this.selectedMediaMetadata[_i]\n            || !this.selectedMediaMinutesChart[_i].data\n            || (this.selectedMediaMinutesChart[_i].data.length == 0)\n            || (this.selectedMediaMinutesChart[_i].data[0].data.length == 0)\n            || (this.selectedMediaSecondsChart[_i].data.length == 0)\n            || (this.selectedMediaSecondsChart[_i].data[0].data.length == 0)) {\n            return;\n        }\n        this.analyticsService.getRealtimeMediaViewersNum(this.selectedMediaMetadata[_i].material_id).subscribe(function (data) {\n            if (_this.updateNum % 60 == 0) {\n                var samples = _this.selectedMediaSecondsChart[_i].data[0].data.slice();\n                var lastMinuteSum = 0;\n                for (var _a = 0, samples_2 = samples; _a < samples_2.length; _a++) {\n                    var v = samples_2[_a];\n                    lastMinuteSum += v;\n                }\n                _this.chartPushValue(_this.selectedMediaMinutesChart[_i], Math.ceil(lastMinuteSum / 60));\n            }\n            var watchingUsers = data.viewers_num > 0 ? data.viewers_num : 0;\n            _this.chartPushValue(_this.selectedMediaSecondsChart[_i], watchingUsers);\n            _this.cdr.markForCheck();\n        });\n    };\n    WarroomViewComponent.prototype.loadTopMediaList = function () {\n        var _this = this;\n        this.topMediaListLoading = true;\n        this.analyticsService.getRealtimeTopViewedMediaMetadataList(this.topMediaListPagingOptions).subscribe(function (data) {\n            _this.topMediaList = data.records;\n            _this.topMediaListTotalLength = data.total_records;\n            _this.mediaMetadataByMaterialId = new Map();\n            for (var _a = 0, _b = data.records; _a < _b.length; _a++) {\n                var mm = _b[_a];\n                _this.mediaMetadataByMaterialId.set(mm.media.material_id, mm.media);\n            }\n            for (var _i = 0; _i < _this.topMediaList.length; _i++) {\n                _this.selectMediaMetadata(_i, _this.topMediaList[_i].media.material_id);\n            }\n            _this.topMediaListLoading = false;\n            _this.cdr.markForCheck();\n        });\n    };\n    WarroomViewComponent.prototype.selectMediaMetadata = function (_i, materialId) {\n        if (this.selectedMediaMetadata[materialId] && (this.selectedMediaMetadata[materialId].material_id == materialId)) {\n            return;\n        }\n        this.selectedMediaMetadata[materialId] = this.mediaMetadataByMaterialId.get(materialId);\n        for (var _i_1 = 0; _i_1 < this.topMediaList.length; _i_1++) {\n            this.loadSelectedMediaStats(this.topMediaList[_i_1].media.material_id);\n        }\n    };\n    WarroomViewComponent.prototype.loadSelectedMediaStats = function (_i) {\n        this.selectedMediaMinutesChart[_i] = { data: [], labels: [] };\n        this.selectedMediaSecondsChart[_i] = { data: [], labels: [] };\n        for (var i = 0; i < 60; i++) {\n            this.selectedMediaMinutesChart[_i].labels.push('- ' + (60 - i) + this.MIN);\n            this.selectedMediaSecondsChart[_i].labels.push('- ' + (60 - i) + this.SEC);\n        }\n        this.selectedMediaMinutesChart[_i].data.push({\n            data: this.generateInitialData(60),\n            label: 'Watching users'\n        });\n        var dataForSeconds = this.generateInitialData(60);\n        this.selectedMediaSecondsChart[_i].data.push({\n            data: dataForSeconds,\n            label: 'Watching users'\n        });\n        this.cdr.markForCheck();\n    };\n    WarroomViewComponent.prototype.chartPushValue = function (chart, val) {\n        var samples = chart.data[0].data;\n        samples.shift();\n        samples.push(val);\n        chart.data = [{\n                data: samples,\n                label: 'Watching users'\n            }];\n    };\n    WarroomViewComponent.prototype.generateInitialData = function (len) {\n        var result = [];\n        for (var i = 0; i < len; i++) {\n            result.push(0);\n        }\n        return result;\n    };\n    WarroomViewComponent.prototype.onShowHeartbeat = function () {\n        this.router.navigate(['admin', 'analytics', 'heartbeat']);\n        this.view.setHeartBeatMode(false);\n        this.sidebar.openDefault();\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    warroom_view_component___decorate([\n        Object(core_es5[\"HostListener\"])('window:resize'),\n        warroom_view_component___metadata(\"design:type\", Function),\n        warroom_view_component___metadata(\"design:paramtypes\", []),\n        warroom_view_component___metadata(\"design:returntype\", void 0)\n    ], WarroomViewComponent.prototype, \"getScreenSize\", null);\n    WarroomViewComponent = warroom_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'war-room-view',\n            template: __webpack_require__(1408),\n            styles: [\n                \"\"\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        warroom_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof usersAndViewsVSTime_service_UsersAndViewsVsTimeService !== \"undefined\" && usersAndViewsVSTime_service_UsersAndViewsVsTimeService) === \"function\" && _a || Object, typeof (_b = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _b || Object, typeof (_c = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _c || Object, typeof (_d = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _d || Object, typeof (_e = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _e || Object, typeof (_f = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _f || Object, typeof (_g = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _g || Object, typeof (_h = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _h || Object])\n    ], WarroomViewComponent);\n    return WarroomViewComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/heartbeat/heartbeat.module.ts\nvar heartbeat_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar heartbeat_module_routes = [\n    { path: '', component: heartbeat_view_component_HeartbeatViewComponent },\n    { path: 'panicdashboard', component: panicdashboard_view_component_PanicDashboardViewComponent },\n    { path: 'warroom', component: warroom_view_component_WarroomViewComponent },\n];\nvar heartbeat_module_AnalyticsHeartbeatModule = (function () {\n    function AnalyticsHeartbeatModule() {\n    }\n    AnalyticsHeartbeatModule = heartbeat_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(heartbeat_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule,\n                google_charts_module_Ng2GoogleChartsModule\n            ],\n            declarations: [\n                heartbeat_view_component_HeartbeatViewComponent,\n                panicdashboard_view_component_PanicDashboardViewComponent,\n                warroom_view_component_WarroomViewComponent,\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                pages_service_PagesService,\n                media_service_MediaService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n            ]\n        })\n    ], AnalyticsHeartbeatModule);\n    return AnalyticsHeartbeatModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/info/info.view.component.ts\nvar info_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar info_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar info_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar info_view_component_AnalyticsInfoView = (function (_super) {\n    info_view_component___extends(AnalyticsInfoView, _super);\n    function AnalyticsInfoView(locale, translation, analyticsService, urlService, user, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.analyticsService = analyticsService;\n        _this.urlService = urlService;\n        _this.user = user;\n        _this.cdr = cdr;\n        return _this;\n    }\n    AnalyticsInfoView.prototype.ngOnInit = function () {\n        this.loadData();\n    };\n    AnalyticsInfoView.prototype.loadData = function () {\n        var _this = this;\n        this.analyticsService.getClientToken().subscribe(function (data) {\n            _this.clientToken = data;\n            _this.cdr.markForCheck();\n        });\n    };\n    var _a, _b, _c, _d, _e, _f;\n    AnalyticsInfoView = info_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-info-view',\n            template: __webpack_require__(1409),\n            styles: [\n                ':host .note {border-color: #b6c2c9;background: #e9edef;color: #5b6165;}',\n                ':host .client-token {margin: 50px 10px;text-align: center;font-size: 1.5rem;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        info_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _c || Object, typeof (_d = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], AnalyticsInfoView);\n    return AnalyticsInfoView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/info/info.module.ts\nvar info_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\nvar info_module_routes = [\n    { path: '', component: info_view_component_AnalyticsInfoView },\n];\nvar info_module_AnalyticsInfoModule = (function () {\n    function AnalyticsInfoModule() {\n    }\n    AnalyticsInfoModule = info_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(info_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n            ],\n            declarations: [\n                info_view_component_AnalyticsInfoView\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n                product_service[\"a\" /* ProductService */]\n            ]\n        })\n    ], AnalyticsInfoModule);\n    return AnalyticsInfoModule;\n}());\n\n\n// EXTERNAL MODULE: ./node_modules/ngx-virtual-scroller/dist/virtual-scroller.js\nvar virtual_scroller = __webpack_require__(134);\nvar virtual_scroller_default = /*#__PURE__*/__webpack_require__.n(virtual_scroller);\n\n// CONCATENATED MODULE: ./src/module/virtual/dropdown/component/popup/virtual.dropdown.popup.component.ts\nvar virtual_dropdown_popup_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar virtual_dropdown_popup_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar selector = \"virtual-dropdown-popup\";\nvar virtual_dropdown_popup_component_VirtualDropdownPopupComponent = (function () {\n    function VirtualDropdownPopupComponent(cdr) {\n        this.cdr = cdr;\n        this.selector = selector;\n        this.scrolledToEnd = new core_es5[\"EventEmitter\"]();\n        this.selected = new core_es5[\"EventEmitter\"]();\n        this.selectFromTemplate = this.emitSelected.bind(this);\n        this.debug = null;\n        this.itemHeigth = 30;\n    }\n    Object.defineProperty(VirtualDropdownPopupComponent.prototype, \"listHeight\", {\n        get: function () { if (!this.items)\n            return 0; return Math.max(0, this.items.length * this.itemHeigth); },\n        enumerable: true,\n        configurable: true\n    });\n    VirtualDropdownPopupComponent.prototype.ngAfterViewInit = function () {\n        if (!this.virtualScroller || !this.selectedItem)\n            return;\n        this.virtualScroller.scrollInto(this.selectedItem, true, -(this.itemHeigth / 2), 0);\n    };\n    VirtualDropdownPopupComponent.prototype.documentKeyDown = function (e) {\n        if (!this.items || !this.virtualScroller) {\n            return;\n        }\n        switch (e.key) {\n            case 'ArrowUp':\n                dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n                var preSelectedUpIndex = this.findPreSelectedIndex();\n                if (preSelectedUpIndex === 0)\n                    return;\n                this.preSelectedItem = this.items[preSelectedUpIndex - 1];\n                this.cdr.markForCheck();\n                this.virtualScroller.scrollInto(this.preSelectedItem, true, -(this.itemHeigth / 2));\n                break;\n            case 'ArrowDown':\n                dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n                var preSelectedDownIndex = this.findPreSelectedIndex();\n                if (preSelectedDownIndex === this.items.length - 1)\n                    return;\n                this.preSelectedItem = this.items[preSelectedDownIndex + 1];\n                this.cdr.markForCheck();\n                this.virtualScroller.scrollInto(this.preSelectedItem, true, -(this.itemHeigth / 2));\n                break;\n            case 'Enter':\n                dom_util[\"a\" /* DOMUtil */].stopPropagation(e);\n                if (!this.compareItems(this.preSelectedItem, this.selectedItem))\n                    this.selected.emit(this.preSelectedItem);\n                this.preSelectedItem = null;\n                break;\n            default:\n                return;\n        }\n    };\n    VirtualDropdownPopupComponent.prototype.resetScroll = function () {\n        if (!this.virtualScroller)\n            return;\n        this.virtualScroller.scrollToIndex(0, true, 0, 0);\n    };\n    VirtualDropdownPopupComponent.prototype.emitSelected = function (item) {\n        if (!this.compareItems(item, this.selectedItem))\n            this.selected.emit(item);\n    };\n    VirtualDropdownPopupComponent.prototype.emitScrolledToEnd = function (v) { this.scrolledToEnd.emit(v); };\n    VirtualDropdownPopupComponent.prototype.trackGeoListItem = function (_index, item) { return item.uid; };\n    VirtualDropdownPopupComponent.prototype.compareItems = function (a, b) { return a.uid === b.uid; };\n    VirtualDropdownPopupComponent.prototype.iconNgClass = function (o) {\n        var _a;\n        return 'icon' in o && !!o.icon ? (_a = {}, _a[o.icon] = true, _a) : null;\n    };\n    VirtualDropdownPopupComponent.prototype.itemNgClass = function (item) {\n        var _a;\n        return !item ? null : (_a = {\n                disabled: 'fetch' in item && !!item.fetch && !!item.fetch.loading,\n                selected: (!!item && !!this.selectedItem ? item.uid === this.selectedItem.uid : false) || ('markSelected' in item && item.markSelected)\n            },\n            _a[\"pre-selected\"] = (!!item && !!this.preSelectedItem ? item.uid === this.preSelectedItem.uid : false),\n            _a[\"separator-below\"] = 'hasSeparatorBelow' in item && !!item.hasSeparatorBelow,\n            _a);\n    };\n    VirtualDropdownPopupComponent.prototype.updateVieportItems = function (items) {\n        this.viewportItems = items;\n        this.cdr.markForCheck();\n    };\n    VirtualDropdownPopupComponent.prototype.findPreSelectedIndex = function () {\n        var _this = this;\n        var v = 0;\n        if (!!this.preSelectedItem) {\n            v = this.items.findIndex(function (i) { return i.uid === _this.preSelectedItem.uid; });\n        }\n        else if (!!this.selectedItem) {\n            v = this.items.findIndex(function (i) { return i.uid === _this.selectedItem.uid; });\n        }\n        return v;\n    };\n    var _a, _b, _c, _d;\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"HostBinding\"])(\"class\"),\n        virtual_dropdown_popup_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownPopupComponent.prototype, \"selector\", void 0);\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_dropdown_popup_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownPopupComponent.prototype, \"scrolledToEnd\", void 0);\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_dropdown_popup_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownPopupComponent.prototype, \"selected\", void 0);\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_popup_component___metadata(\"design:type\", String)\n    ], VirtualDropdownPopupComponent.prototype, \"debug\", void 0);\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_popup_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownPopupComponent.prototype, \"itemHeigth\", void 0);\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_popup_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"TemplateRef\"] !== \"undefined\" && core_es5[\"TemplateRef\"]) === \"function\" && _a || Object)\n    ], VirtualDropdownPopupComponent.prototype, \"itemTemplate\", void 0);\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_popup_component___metadata(\"design:type\", Array)\n    ], VirtualDropdownPopupComponent.prototype, \"items\", void 0);\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_popup_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownPopupComponent.prototype, \"selectedItem\", void 0);\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"ViewChild\"])(virtual_scroller[\"VirtualScrollerComponent\"]),\n        virtual_dropdown_popup_component___metadata(\"design:type\", typeof (_b = typeof virtual_scroller[\"VirtualScrollerComponent\"] !== \"undefined\" && virtual_scroller[\"VirtualScrollerComponent\"]) === \"function\" && _b || Object)\n    ], VirtualDropdownPopupComponent.prototype, \"virtualScroller\", void 0);\n    virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"HostListener\"])('document:keydown', ['$event']),\n        virtual_dropdown_popup_component___metadata(\"design:type\", Function),\n        virtual_dropdown_popup_component___metadata(\"design:paramtypes\", [typeof (_c = typeof KeyboardEvent !== \"undefined\" && KeyboardEvent) === \"function\" && _c || Object]),\n        virtual_dropdown_popup_component___metadata(\"design:returntype\", void 0)\n    ], VirtualDropdownPopupComponent.prototype, \"documentKeyDown\", null);\n    VirtualDropdownPopupComponent = virtual_dropdown_popup_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: selector,\n            template: __webpack_require__(1412),\n            styles: [__webpack_require__(1413)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n        }),\n        virtual_dropdown_popup_component___metadata(\"design:paramtypes\", [typeof (_d = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _d || Object])\n    ], VirtualDropdownPopupComponent);\n    return VirtualDropdownPopupComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/virtual/dropdown/model/virtual.dropdown.model.ts\nvar VirtualDropdownListDirection;\n(function (VirtualDropdownListDirection) {\n    VirtualDropdownListDirection[VirtualDropdownListDirection[\"down\"] = 0] = \"down\";\n    VirtualDropdownListDirection[VirtualDropdownListDirection[\"up\"] = 1] = \"up\";\n})(VirtualDropdownListDirection || (VirtualDropdownListDirection = {}));\n;\n\n// CONCATENATED MODULE: ./src/module/virtual/dropdown/component/virtual.dropdown.component.ts\nvar virtual_dropdown_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar virtual_dropdown_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar virtual_dropdown_component_selector = \"virtual-dropdown\";\nvar virtual_dropdown_component_VirtualDropdownComponent = (function () {\n    function VirtualDropdownComponent(cdr, element) {\n        this.cdr = cdr;\n        this.element = element;\n        this.selector = virtual_dropdown_component_selector;\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n        this.selected = new core_es5[\"EventEmitter\"]();\n        this.scrolledToEnd = new core_es5[\"EventEmitter\"]();\n        this.searchValueChange = new core_es5[\"EventEmitter\"]();\n        this.filterValueChange = new core_es5[\"EventEmitter\"]();\n        this.debug = null;\n        this.value = null;\n        this.searchValue = null;\n        this.filterValue = null;\n        this.itemHeigth = 30;\n        this.direction = VirtualDropdownListDirection.down;\n        this.withSearch = false;\n        this.searchPlaceholder = 'search values';\n        this.removeSelectedFromList = false;\n        this.withFilter = false;\n        this.filterPlaceholder = 'filter values';\n        this.filterByKey = 'label';\n        this.disabled = false;\n        this.active = false;\n    }\n    Object.defineProperty(VirtualDropdownComponent.prototype, \"isDirUp\", {\n        get: function () { return this.direction === VirtualDropdownListDirection.up; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(VirtualDropdownComponent.prototype, \"isDirDown\", {\n        get: function () { return this.direction === VirtualDropdownListDirection.down; },\n        enumerable: true,\n        configurable: true\n    });\n    VirtualDropdownComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        if (this.$ && this.$.closed === false)\n            this.$ub = this.$.asObservable()\n                .subscribe({\n                next: function (items) {\n                    _this.items = items;\n                    _this.findSelectedByValue(\"$\");\n                    if (!!_this.items && _this.items.length > 0) {\n                        _this.disabled = _this.items.length < 2;\n                    }\n                    else {\n                        _this.disabled = true;\n                    }\n                    if (!!_this.popup) {\n                        _this.popup.cdr.markForCheck();\n                    }\n                    _this.cdr.markForCheck();\n                }\n            });\n    };\n    VirtualDropdownComponent.prototype.ngOnChanges = function (changes) {\n        if (this.items !== null && ('value' in changes || 'items' in changes)) {\n            this.findSelectedByValue(\"ngOnChanges\");\n        }\n    };\n    VirtualDropdownComponent.prototype.ngOnDestroy = function () {\n        if (this.$ub != null && this.$ub.closed == false)\n            this.$ub.unsubscribe();\n        this.$ub = null;\n    };\n    VirtualDropdownComponent.prototype.documentClick = function (e) {\n        if (this.active == true && e != null && e.target != null && e.target instanceof Node\n            && !dom_util[\"a\" /* DOMUtil */].isDescendant(this.element.nativeElement, e.target)) {\n            this.active = false;\n            this.cdr.markForCheck();\n        }\n    };\n    VirtualDropdownComponent.prototype.documentScroll = function () {\n        if (this.active == true) {\n            this.active = false;\n            this.cdr.markForCheck();\n        }\n    };\n    VirtualDropdownComponent.prototype.toggle = function () {\n        var a = this.disabled ? false : !this.active;\n        if (this.active !== a) {\n            this.active = a;\n            this.cdr.markForCheck();\n        }\n    };\n    VirtualDropdownComponent.prototype.select = function (item) {\n        this.active = false;\n        this.filterValue = null;\n        this.cdr.markForCheck();\n        this.valueChange.emit(!!item ? item.value : null);\n        this.selected.emit(item);\n    };\n    VirtualDropdownComponent.prototype.emitSearchValueChange = function (e) {\n        var el = e.target;\n        var v = el ? el.value : null;\n        if (!v || this.searchValue == v)\n            return;\n        this.searchValueChange.emit(v);\n        if (!!this.popup) {\n            this.popup.resetScroll();\n        }\n    };\n    VirtualDropdownComponent.prototype.emitScrolledToEnd = function (v) { this.scrolledToEnd.emit(v); };\n    VirtualDropdownComponent.prototype.handleFilterValueChange = function (e) {\n        var el = e.target;\n        var v = el ? el.value : null;\n        if (!v || this.filterValue == v)\n            return;\n        this.filterValue = v;\n        this.cdr.markForCheck();\n        if (!!this.popup) {\n            this.popup.resetScroll();\n        }\n    };\n    VirtualDropdownComponent.prototype.findSelectedByValue = function (_from) {\n        if (!this.items)\n            return;\n        for (var i = 0, t = this.items.length; i < t; i++) {\n            if (this.value === this.items[i].value) {\n                this.selectedItem = this.items[i];\n                this.cdr.markForCheck();\n                break;\n            }\n        }\n    };\n    var _a, _b, _c, _d, _e, _f;\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"HostBinding\"])(\"class\"),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"selector\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"valueChange\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"selected\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"scrolledToEnd\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"searchValueChange\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"filterValueChange\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", String)\n    ], VirtualDropdownComponent.prototype, \"debug\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", typeof (_a = typeof Rx[\"BehaviorSubject\"] !== \"undefined\" && Rx[\"BehaviorSubject\"]) === \"function\" && _a || Object)\n    ], VirtualDropdownComponent.prototype, \"$\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"value\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", String)\n    ], VirtualDropdownComponent.prototype, \"searchValue\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", String)\n    ], VirtualDropdownComponent.prototype, \"filterValue\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"itemHeigth\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", typeof (_b = typeof core_es5[\"TemplateRef\"] !== \"undefined\" && core_es5[\"TemplateRef\"]) === \"function\" && _b || Object)\n    ], VirtualDropdownComponent.prototype, \"itemTemplate\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"direction\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.with-search'), Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"withSearch\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"searchPlaceholder\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"removeSelectedFromList\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.with-filter'), Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"withFilter\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"filterPlaceholder\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"filterByKey\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.disabled'), Object(core_es5[\"Input\"])(),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"disabled\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.active'),\n        virtual_dropdown_component___metadata(\"design:type\", Object)\n    ], VirtualDropdownComponent.prototype, \"active\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.up'),\n        virtual_dropdown_component___metadata(\"design:type\", Object),\n        virtual_dropdown_component___metadata(\"design:paramtypes\", [])\n    ], VirtualDropdownComponent.prototype, \"isDirUp\", null);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.down'),\n        virtual_dropdown_component___metadata(\"design:type\", Object),\n        virtual_dropdown_component___metadata(\"design:paramtypes\", [])\n    ], VirtualDropdownComponent.prototype, \"isDirDown\", null);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"ViewChild\"])(virtual_dropdown_popup_component_VirtualDropdownPopupComponent),\n        virtual_dropdown_component___metadata(\"design:type\", typeof (_c = typeof virtual_dropdown_popup_component_VirtualDropdownPopupComponent !== \"undefined\" && virtual_dropdown_popup_component_VirtualDropdownPopupComponent) === \"function\" && _c || Object)\n    ], VirtualDropdownComponent.prototype, \"popup\", void 0);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"HostListener\"])('document:click', ['$event']),\n        virtual_dropdown_component___metadata(\"design:type\", Function),\n        virtual_dropdown_component___metadata(\"design:paramtypes\", [typeof (_d = typeof MouseEvent !== \"undefined\" && MouseEvent) === \"function\" && _d || Object]),\n        virtual_dropdown_component___metadata(\"design:returntype\", void 0)\n    ], VirtualDropdownComponent.prototype, \"documentClick\", null);\n    virtual_dropdown_component___decorate([\n        Object(core_es5[\"HostListener\"])('document:scroll'),\n        virtual_dropdown_component___metadata(\"design:type\", Function),\n        virtual_dropdown_component___metadata(\"design:paramtypes\", []),\n        virtual_dropdown_component___metadata(\"design:returntype\", void 0)\n    ], VirtualDropdownComponent.prototype, \"documentScroll\", null);\n    VirtualDropdownComponent = virtual_dropdown_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: virtual_dropdown_component_selector,\n            template: __webpack_require__(1414),\n            styles: [__webpack_require__(1415)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n        }),\n        virtual_dropdown_component___metadata(\"design:paramtypes\", [typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _f || Object])\n    ], VirtualDropdownComponent);\n    return VirtualDropdownComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/virtual/dropdown/pipe/virtual.dropdown.filter.pipe.ts\nvar virtual_dropdown_filter_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar virtual_dropdown_filter_pipe_VirtualDropdownFilterPipe = (function () {\n    function VirtualDropdownFilterPipe() {\n    }\n    VirtualDropdownFilterPipe.prototype.transform = function (input, key, value) {\n        if (!input || input.length < 1 || !key || !value)\n            return input;\n        value = typeof value === 'string' ? value.toLowerCase() : value;\n        var output = input.filter(function (i) {\n            if (!(key in i))\n                return false;\n            return (typeof i[key] === 'string' ? i[key].toLowerCase() : i[key]).indexOf(value) > -1;\n        });\n        return output;\n    };\n    VirtualDropdownFilterPipe = virtual_dropdown_filter_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'virtualDropdownFilter' })\n    ], VirtualDropdownFilterPipe);\n    return VirtualDropdownFilterPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/virtual/dropdown/pipe/virtual.dropdown.list.pipe.ts\nvar virtual_dropdown_list_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar virtual_dropdown_list_pipe_VirtualDropdownRemoveSelectedPipe = (function () {\n    function VirtualDropdownRemoveSelectedPipe() {\n    }\n    VirtualDropdownRemoveSelectedPipe.prototype.transform = function (value, selected, disabled) {\n        if (disabled === void 0) { disabled = false; }\n        if (!!disabled || selected == null)\n            return value;\n        return value.filter(function (i) { return i.value != selected.value; });\n    };\n    VirtualDropdownRemoveSelectedPipe = virtual_dropdown_list_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'virtualDropdownRemoveSelected' })\n    ], VirtualDropdownRemoveSelectedPipe);\n    return VirtualDropdownRemoveSelectedPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/virtual/dropdown/virtual.dropdown.module.ts\nvar virtual_dropdown_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar virtual_dropdown_module_VirtualDropdownModule = (function () {\n    function VirtualDropdownModule() {\n    }\n    VirtualDropdownModule = virtual_dropdown_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                virtual_scroller[\"VirtualScrollerModule\"],\n            ],\n            providers: [],\n            declarations: [\n                virtual_dropdown_component_VirtualDropdownComponent,\n                virtual_dropdown_popup_component_VirtualDropdownPopupComponent,\n                virtual_dropdown_list_pipe_VirtualDropdownRemoveSelectedPipe,\n                virtual_dropdown_filter_pipe_VirtualDropdownFilterPipe,\n            ],\n            exports: [\n                virtual_dropdown_component_VirtualDropdownComponent,\n            ],\n            entryComponents: [\n                virtual_dropdown_component_VirtualDropdownComponent,\n            ],\n        })\n    ], VirtualDropdownModule);\n    return VirtualDropdownModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/camelCaseToSpace/camelCaseToSpace.pipe.ts\nvar camelCaseToSpace_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar camelCaseToSpace_pipe_CamelCaseToSpacePipe = (function () {\n    function CamelCaseToSpacePipe() {\n        this.REGEXP = /([A-Z])/g;\n    }\n    CamelCaseToSpacePipe.prototype.transform = function (input) {\n        return input.replace(this.REGEXP, function (match) { return \" \" + match; });\n    };\n    CamelCaseToSpacePipe = camelCaseToSpace_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'camelCaseToSpace' })\n    ], CamelCaseToSpacePipe);\n    return CamelCaseToSpacePipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/camelCaseToSpace/camelCaseToSpace.module.ts\nvar camelCaseToSpace_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar camelCaseToSpace_module_CamelCaseToSpaceModule = (function () {\n    function CamelCaseToSpaceModule() {\n    }\n    CamelCaseToSpaceModule = camelCaseToSpace_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            declarations: [camelCaseToSpace_pipe_CamelCaseToSpacePipe],\n            exports: [camelCaseToSpace_pipe_CamelCaseToSpacePipe],\n        })\n    ], CamelCaseToSpaceModule);\n    return CamelCaseToSpaceModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/capitalizeFirst/capitalize.first.pipe.ts\nvar capitalize_first_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar capitalize_first_pipe_CapitalizeFirstPipe = (function () {\n    function CapitalizeFirstPipe() {\n    }\n    CapitalizeFirstPipe.prototype.transform = function (value, _exponent) {\n        if (value)\n            return value.charAt(0).toUpperCase() + value.slice(1);\n        return value;\n    };\n    CapitalizeFirstPipe = capitalize_first_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'capitalizeFirst' })\n    ], CapitalizeFirstPipe);\n    return CapitalizeFirstPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/capitalizeFirst/capitalize.first.module.ts\nvar capitalize_first_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar capitalize_first_module_CapitalizeFirstModule = (function () {\n    function CapitalizeFirstModule() {\n    }\n    CapitalizeFirstModule = capitalize_first_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            declarations: [capitalize_first_pipe_CapitalizeFirstPipe],\n            exports: [capitalize_first_pipe_CapitalizeFirstPipe],\n        })\n    ], CapitalizeFirstModule);\n    return CapitalizeFirstModule;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/analytics/st/component/geo-picker/geo.model.ts\nvar geo_model = __webpack_require__(1416);\nvar geo_model_default = /*#__PURE__*/__webpack_require__.n(geo_model);\n\n// CONCATENATED MODULE: ./src/module/analytics/st/component/geo-picker/geo.picker.component.ts\nvar geo_picker_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar geo_picker_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar geo_picker_component_GeoPickerComponent = (function () {\n    function GeoPickerComponent(cdr) {\n        this.cdr = cdr;\n        this.enable = true;\n        this.disabled = false;\n        this.hidden = false;\n        this.granularityTypes = ['city', 'region'];\n        this.activeType = 'region';\n        this.size = 'md';\n        this.geoTypeChanged = new core_es5[\"EventEmitter\"]();\n        this.regionOption = false;\n        this.cityOption = false;\n    }\n    GeoPickerComponent.prototype.ngOnChanges = function (changes) {\n        this.setActiveGeoGranularityTypes();\n        this.cdr.markForCheck();\n    };\n    GeoPickerComponent.prototype.onGeoGranularityTypeChange = function (reportType) {\n        if (reportType != this.activeType && this.geoTypeChanged) {\n            this.activeType = reportType;\n            this.geoTypeChanged.emit(reportType);\n            this.cdr.markForCheck();\n        }\n    };\n    GeoPickerComponent.prototype.setActiveGeoGranularityTypes = function () {\n        var _this = this;\n        this.regionOption = false;\n        this.cityOption = false;\n        if (this.granularityTypes)\n            this.granularityTypes.every(function (value) {\n                switch (value) {\n                    case 'region':\n                        _this.regionOption = true;\n                        break;\n                    case 'city':\n                        _this.cityOption = true;\n                        break;\n                    default:\n                        break;\n                }\n                return true;\n            });\n        this.cdr.markForCheck();\n    };\n    var _a, _b, _c, _d, _e;\n    geo_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        geo_picker_component___metadata(\"design:type\", Boolean)\n    ], GeoPickerComponent.prototype, \"enable\", void 0);\n    geo_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        geo_picker_component___metadata(\"design:type\", Boolean)\n    ], GeoPickerComponent.prototype, \"disabled\", void 0);\n    geo_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        geo_picker_component___metadata(\"design:type\", Boolean)\n    ], GeoPickerComponent.prototype, \"hidden\", void 0);\n    geo_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        geo_picker_component___metadata(\"design:type\", typeof (_a = typeof Array !== \"undefined\" && Array) === \"function\" && _a || Object)\n    ], GeoPickerComponent.prototype, \"granularityTypes\", void 0);\n    geo_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        geo_picker_component___metadata(\"design:type\", typeof (_b = typeof geo_model[\"GeoGranularityType\"] !== \"undefined\" && geo_model[\"GeoGranularityType\"]) === \"function\" && _b || Object)\n    ], GeoPickerComponent.prototype, \"activeType\", void 0);\n    geo_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        geo_picker_component___metadata(\"design:type\", typeof (_c = typeof geo_model[\"ControlSize\"] !== \"undefined\" && geo_model[\"ControlSize\"]) === \"function\" && _c || Object)\n    ], GeoPickerComponent.prototype, \"size\", void 0);\n    geo_picker_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        geo_picker_component___metadata(\"design:type\", typeof (_d = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _d || Object)\n    ], GeoPickerComponent.prototype, \"geoTypeChanged\", void 0);\n    GeoPickerComponent = geo_picker_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'geo-picker',\n            template: \" \\n\\t\\t<div *ngIf=\\\"!hidden\\\" role=\\\"group\\\" aria-label=\\\"chart type selector\\\" [ngClass]=\\\"{\\n\\t\\t\\t'btn-group':true, \\n\\t\\t\\t'btn-group-lg':size==='lg',\\n\\t\\t\\t'btn-group-md':size==='md',\\n\\t\\t\\t'btn-group-sm':size==='sm',\\n\\t\\t\\t'btn-group-xs':size==='xs'}\\\">\\n\\t\\t\\t<button *ngIf=\\\"regionOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'region'\\\" (click)=\\\"onGeoGranularityTypeChange('region')\\\">\\n\\t\\t\\t\\t<span  aria-hidden=\\\"true\\\">{{'ANALYTICS_ST_RAPORT.GEO_GRANULARITY.REGION' | translate:lang }}</span>\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"cityOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'city'\\\" (click)=\\\"onGeoGranularityTypeChange('city')\\\">\\n\\t\\t\\t\\t<span  aria-hidden=\\\"true\\\">{{'ANALYTICS_ST_RAPORT.GEO_GRANULARITY.CITY' | translate:lang }}</span>\\n\\t\\t\\t</button>\\n\\t\\t</div>\",\n            styles: []\n        }),\n        geo_picker_component___metadata(\"design:paramtypes\", [typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object])\n    ], GeoPickerComponent);\n    return GeoPickerComponent;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/analytics/st/component/report-type-picker/report.model.ts\nvar report_model = __webpack_require__(1417);\nvar report_model_default = /*#__PURE__*/__webpack_require__.n(report_model);\n\n// CONCATENATED MODULE: ./src/module/analytics/st/component/report-type-picker/report.picker.component.ts\nvar report_picker_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar report_picker_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar report_picker_component_ReportPickerComponent = (function () {\n    function ReportPickerComponent(cdr) {\n        this.cdr = cdr;\n        this.enable = true;\n        this.size = 'md';\n        this.reportTypeChanged = new core_es5[\"EventEmitter\"]();\n        this.reportOption = false;\n        this.geolocationOption = false;\n        this.tagOption = false;\n        this.genderOption = false;\n        this.ageOption = false;\n    }\n    ReportPickerComponent.prototype.ngOnChanges = function (changes) {\n        this.setActiveReportTypes();\n        this.cdr.markForCheck();\n    };\n    ReportPickerComponent.prototype.onReportTypeChange = function (reportType) {\n        if (reportType != this.activeType && this.reportTypeChanged) {\n            this.activeType = reportType;\n            this.reportTypeChanged.emit(reportType);\n            this.cdr.markForCheck();\n        }\n    };\n    ReportPickerComponent.prototype.setActiveReportTypes = function () {\n        var _this = this;\n        this.reportOption = false;\n        this.geolocationOption = false;\n        this.tagOption = false;\n        this.genderOption = false;\n        this.ageOption = false;\n        if (this.reportTypes)\n            this.reportTypes.every(function (value) {\n                switch (value) {\n                    case 'report':\n                        _this.reportOption = true;\n                        break;\n                    case 'geolocation':\n                        _this.geolocationOption = true;\n                        break;\n                    case 'gender':\n                        _this.genderOption = true;\n                        break;\n                    case 'age':\n                        _this.ageOption = true;\n                        break;\n                    case 'tags':\n                        _this.tagOption = true;\n                        break;\n                    default:\n                        break;\n                }\n                return true;\n            });\n        this.cdr.markForCheck();\n    };\n    var _a, _b, _c, _d, _e;\n    report_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        report_picker_component___metadata(\"design:type\", Boolean)\n    ], ReportPickerComponent.prototype, \"enable\", void 0);\n    report_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        report_picker_component___metadata(\"design:type\", typeof (_a = typeof Array !== \"undefined\" && Array) === \"function\" && _a || Object)\n    ], ReportPickerComponent.prototype, \"reportTypes\", void 0);\n    report_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        report_picker_component___metadata(\"design:type\", typeof (_b = typeof report_model[\"ReportType\"] !== \"undefined\" && report_model[\"ReportType\"]) === \"function\" && _b || Object)\n    ], ReportPickerComponent.prototype, \"activeType\", void 0);\n    report_picker_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        report_picker_component___metadata(\"design:type\", typeof (_c = typeof report_model[\"ControlSize\"] !== \"undefined\" && report_model[\"ControlSize\"]) === \"function\" && _c || Object)\n    ], ReportPickerComponent.prototype, \"size\", void 0);\n    report_picker_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        report_picker_component___metadata(\"design:type\", typeof (_d = typeof core_es5[\"EventEmitter\"] !== \"undefined\" && core_es5[\"EventEmitter\"]) === \"function\" && _d || Object)\n    ], ReportPickerComponent.prototype, \"reportTypeChanged\", void 0);\n    ReportPickerComponent = report_picker_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'report-type-picker',\n            template: \"\\n\\t\\t<div *ngIf=\\\"enable\\\" role=\\\"group\\\" aria-label=\\\"chart type selector\\\" [ngClass]=\\\"{\\n\\t\\t\\t'btn-group':true, \\n\\t\\t\\t'btn-group-lg':size==='lg',\\n\\t\\t\\t'btn-group-md':size==='md',\\n\\t\\t\\t'btn-group-sm':size==='sm',\\n\\t\\t\\t'btn-group-xs':size==='xs'}\\\">\\n\\t\\t\\t<button *ngIf=\\\"reportOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'report'\\\" (click)=\\\"onReportTypeChange('report')\\\">\\n\\t\\t\\t\\t<span  aria-hidden=\\\"true\\\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.REPORT' | translate:lang }}</span>\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"geolocationOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'geolocation'\\\" (click)=\\\"onReportTypeChange('geolocation')\\\">\\n\\t\\t\\t\\t<span  aria-hidden=\\\"true\\\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.GEOLOCATION' | translate:lang }}</span>\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"tagOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'tags'\\\" (click)=\\\"onReportTypeChange('tags')\\\">\\n\\t\\t\\t\\t<span  aria-hidden=\\\"true\\\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.TAGS' | translate:lang }}</span>\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t<button *ngIf=\\\"genderOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'gender'\\\" (click)=\\\"onReportTypeChange('gender')\\\">\\n\\t\\t\\t\\t<span aria-hidden=\\\"true\\\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.GENDER' | translate:lang }}</span>\\n\\t\\t\\t</button>\\n\\n\\t\\t\\t <button *ngIf=\\\"ageOption\\\" class=\\\"btn btn-white\\\" \\n\\t\\t\\t\\t\\t[class.active]=\\\"activeType == 'age'\\\" (click)=\\\"onReportTypeChange('age')\\\">\\n\\t\\t\\t\\t<span  aria-hidden=\\\"true\\\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.AGE' | translate:lang }}</span>\\n\\t\\t\\t</button>\\n\\t\\t</div>\",\n            styles: []\n        }),\n        report_picker_component___metadata(\"design:paramtypes\", [typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object])\n    ], ReportPickerComponent);\n    return ReportPickerComponent;\n}());\n\n\n// EXTERNAL MODULE: ./node_modules/rxjs/observable/forkJoin.js\nvar forkJoin = __webpack_require__(89);\nvar forkJoin_default = /*#__PURE__*/__webpack_require__.n(forkJoin);\n\n// EXTERNAL MODULE: ./node_modules/rxjs/observable/of.js\nvar of = __webpack_require__(54);\nvar of_default = /*#__PURE__*/__webpack_require__.n(of);\n\n// CONCATENATED MODULE: ./src/module/analytics/st/service/prefixed.tags.service.ts\nvar prefixed_tags_service___assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar prefixed_tags_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar prefixed_tags_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar prefixed_tags_service_PrefixedTagsService = (function () {\n    function PrefixedTagsService(tagService) {\n        this.tagService = tagService;\n        this.PAGE_SIZE = 20;\n        this.ALL_LABEL = 'All';\n        this.LOADING_LABEL = 'loading...';\n        this.EMPTY_LABEL = '...';\n        this.PREFIX_SEPARATOR = ':';\n        this.selectedTags = new Map();\n    }\n    Object.defineProperty(PrefixedTagsService.prototype, \"hasData\", {\n        get: function () { return !!this.data; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PrefixedTagsService.prototype, \"selectedTagsList\", {\n        get: function () {\n            var tags = [];\n            this.selectedTags.forEach(function (v) { return tags.push(v); });\n            return tags;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    PrefixedTagsService.prototype.select = function (prefix, search) {\n        if (!!search && search.length > 0)\n            this.selectedTags.set(prefix, search);\n        else\n            this.selectedTags.delete(prefix);\n    };\n    PrefixedTagsService.prototype.prefixes = function () { return (this.data ? this.data.keys() : []); };\n    PrefixedTagsService.prototype.value = function (prefix) { return this.data ? this.data.get(prefix) : null; };\n    PrefixedTagsService.prototype.fetch = function (prefix, pages, search) { this.fetch$.next({ prefix: prefix, pages: pages, search: search }); };\n    PrefixedTagsService.prototype.init = function (accountId, cdr) {\n        var _this = this;\n        this.data$ub = this.tagService.prefixes(accountId)\n            .pipe(Object(operators[\"debounceTime\"])(100))\n            .subscribe({\n            next: function (tags) { return _this.data = _this.parseData(tags); },\n            error: function (error) { return console.error(error); },\n            complete: function () { return cdr.markForCheck(); },\n        });\n        if (!this.fetch$) {\n            this.fetch$ = new Rx[\"BehaviorSubject\"](null);\n        }\n        this.fetch$ub = this.fetch$.asObservable()\n            .pipe(Object(operators[\"filter\"])(function (v) { return !!v && !!_this.data && _this.data.has(v.prefix); }), Object(operators[\"debounceTime\"])(250), Object(operators[\"switchMap\"])(function (req) {\n            console.debug(\" >> fetch$ >> \", req.prefix, { req: req });\n            _this.data.get(req.prefix).loading = true;\n            cdr.markForCheck();\n            return Object(forkJoin[\"forkJoin\"])(req.pages.map(function (page) { return _this.fetchList(accountId, page, req); }))\n                .pipe(Object(operators[\"tap\"])(function () {\n                _this.data.get(req.prefix).loading = false;\n                cdr.markForCheck();\n            }));\n        }))\n            .subscribe({\n            next: function (v) { return console.debug(\"fetch$ub.next\", v); },\n            error: function (e) { return console.error(e); },\n            complete: function () { return cdr.markForCheck(); },\n        });\n    };\n    PrefixedTagsService.prototype.destroy = function () {\n        if (this.data$ub != null && this.data$ub.closed == false)\n            this.data$ub.unsubscribe();\n        this.data$ub = null;\n        if (this.fetch$ub != null && this.fetch$ub.closed == false)\n            this.fetch$ub.unsubscribe();\n        this.fetch$ub = null;\n        if (this.fetch$ != null && this.fetch$.closed == false)\n            this.fetch$.unsubscribe();\n        this.fetch$ = null;\n    };\n    PrefixedTagsService.prototype.parseData = function (recList) {\n        var prefixes = new Map();\n        var model;\n        for (var _i = 0, recList_1 = recList; _i < recList_1.length; _i++) {\n            var rec = recList_1[_i];\n            var prefix = rec.prefix, total_records = rec.total_records, records = rec.records;\n            model = this.initDropdownModel();\n            var fullprefix = \"\" + prefix + this.PREFIX_SEPARATOR;\n            if (total_records > records.length) {\n                for (var index = 0; index < total_records; index++) {\n                    model.push(this.emptyDropdownItem(fullprefix, index));\n                }\n            }\n            else {\n                for (var index = 0; index < total_records; index++) {\n                    model.push(this.dropdownItem(fullprefix, records[index].id, records[index].tag));\n                }\n            }\n            var $ = new Rx[\"BehaviorSubject\"](model);\n            var selected = model[0];\n            prefixes.set(prefix, { prefix: prefix, total: total_records, $: $, model: model, selected: selected, search: { text: \"\", model: null }, loading: false });\n        }\n        return prefixes;\n    };\n    PrefixedTagsService.prototype.fetchList = function (accountId, page, req) {\n        var _this = this;\n        var prefix = req.prefix;\n        var fullprefix = \"\" + prefix + this.PREFIX_SEPARATOR;\n        var tagData = this.data.get(prefix);\n        var searchtext = req.search;\n        var tagModel = searchtext.length > 0 ? tagData.search.model : tagData.model;\n        var startIdx = Math.max(0, Math.min(tagData.total, page * this.PAGE_SIZE));\n        return this.markDropdownModel(tagData, startIdx, true)\n            .pipe(Object(operators[\"switchMap\"])(function () { return _this.tagService.list(accountId, { text: fullprefix + \"*\" + searchtext }, page + 1, _this.PAGE_SIZE); }), Object(operators[\"catchError\"])(function (_e) { return _this.markDropdownModel(tagData, startIdx, false); }), Object(operators[\"map\"])(function (recs) {\n            if (!!recs && recs.records.length > 0) {\n                var _a = _this.updateDropdownModel(recs, tagModel, startIdx, fullprefix), emit = _a.emit, model = _a.model;\n                if (emit) {\n                    if (searchtext.length > 0) {\n                        tagData.search.text = searchtext;\n                        tagData.search.model = model;\n                    }\n                    else {\n                        tagData.search.text = \"\";\n                        tagData.search.model = null;\n                        tagData.model = model;\n                    }\n                    tagData.$.next(model);\n                }\n            }\n            return recs;\n        }));\n    };\n    PrefixedTagsService.prototype.updateDropdownModel = function (data, model, startIdx, fullprefix) {\n        var prefix = data.prefix, total_records = data.total_records, records = data.records;\n        var emit = false;\n        if (model == null || data.page === 1) {\n            model = this.initDropdownModel();\n            for (var index = 0; index < total_records; index++) {\n                if (index in records) {\n                    model.push(this.dropdownItem(fullprefix, records[index].id, records[index].tag));\n                }\n                else {\n                    model.push(this.emptyDropdownItem(fullprefix, index));\n                }\n            }\n            emit = true;\n        }\n        var modelIndex;\n        var newItem;\n        var record;\n        for (var recordIndex = 0; recordIndex < records.length; recordIndex++) {\n            modelIndex = recordIndex + startIdx + 1;\n            if (!!model && modelIndex in model) {\n                if (!!model[modelIndex]\n                    && 'fetch' in model[modelIndex]\n                    && !!model[modelIndex].fetch\n                    && !!model[modelIndex].fetch.loading) {\n                    model[modelIndex].fetch.loading = false;\n                    model[modelIndex].fetch = null;\n                    delete model[modelIndex].fetch;\n                    record = data.records[recordIndex];\n                    newItem = this.dropdownItem(fullprefix, record.id, record.tag);\n                    model[modelIndex].uid = newItem.uid;\n                    model[modelIndex].label = newItem.label;\n                    model[modelIndex].value = newItem.value;\n                    newItem = null;\n                    record = null;\n                    emit = true;\n                }\n            }\n        }\n        return { emit: emit, model: model };\n    };\n    PrefixedTagsService.prototype.markDropdownModel = function (tagData, startIdx, loading) {\n        var searchtext = tagData.search.text;\n        var model = searchtext.length > 0 ? tagData.search.model : tagData.model;\n        var stopIdx = Math.min(tagData.total, startIdx + this.PAGE_SIZE);\n        var emit = false;\n        for (var modelIndex = startIdx + 1; modelIndex <= stopIdx; modelIndex++) {\n            if (!!model[modelIndex] && 'fetch' in model[modelIndex] && !!model[modelIndex].fetch && !model[modelIndex].fetch.loading) {\n                model[modelIndex].fetch.loading = loading;\n                model[modelIndex].label = loading ? this.LOADING_LABEL : this.EMPTY_LABEL;\n                emit = true;\n            }\n        }\n        if (emit) {\n            if (searchtext.length > 0) {\n                tagData.search.model = model;\n            }\n            else {\n                tagData.model = model;\n            }\n            tagData.$.next(model);\n        }\n        return Object(of[\"of\"])(null);\n    };\n    PrefixedTagsService.prototype.dropdownItem = function (fullprefix, uid, tag, partial) {\n        var hasSuffix = !tag ? false : tag.indexOf(fullprefix) === 0;\n        var val = prefixed_tags_service___assign({ uid: uid, label: tag, value: tag }, partial);\n        if (hasSuffix) {\n            if (!!val.label)\n                val.label = val.label.slice(fullprefix.length);\n            val.value = tag;\n        }\n        else {\n            val.value = \"\" + fullprefix + tag;\n        }\n        ;\n        return val;\n    };\n    PrefixedTagsService.prototype.emptyDropdownItem = function (fullprefix, index) {\n        return this.dropdownItem(fullprefix, index, null, {\n            label: this.EMPTY_LABEL,\n            fetch: { loading: false, page: Math.floor(index / this.PAGE_SIZE) }\n        });\n    };\n    PrefixedTagsService.prototype.initDropdownModel = function () {\n        return [{ uid: -1, label: this.ALL_LABEL, value: null }];\n    };\n    var _a;\n    PrefixedTagsService = prefixed_tags_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        prefixed_tags_service___metadata(\"design:paramtypes\", [typeof (_a = typeof tag_service_TagService !== \"undefined\" && tag_service_TagService) === \"function\" && _a || Object])\n    ], PrefixedTagsService);\n    return PrefixedTagsService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/st/component/view/st.view.component.ts\nvar st_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar st_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar st_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar st_view_component_AnalyticsSTView = (function (_super) {\n    st_view_component___extends(AnalyticsSTView, _super);\n    function AnalyticsSTView(locale, translation, pagesService, tagService, prefixedTagsService, user, analyticsService, existingTagSelector, cdr, exportService) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.pagesService = pagesService;\n        _this.tagService = tagService;\n        _this.prefixedTagsService = prefixedTagsService;\n        _this.user = user;\n        _this.analyticsService = analyticsService;\n        _this.existingTagSelector = existingTagSelector;\n        _this.cdr = cdr;\n        _this.exportService = exportService;\n        _this.MAP_REGIONS_SKIP_SET = __webpack_require__(107).skippingSet;\n        _this.MAP_COLOR_RANGE = ['#d9ebfb', '#348fe2'];\n        _this.PAGER = { page: 1, page_size: 10, total_items: 0 };\n        _this.GEO_GRANULARITY_TYPES = ['city', 'region'];\n        _this.GRANULARITY_TYPES = ['all'];\n        _this.REPORT_TYPE_REPORT = 'report';\n        _this.REPORT_TYPE_GEO = 'geolocation';\n        _this.REPORT_TYPE_TAGS = 'tags';\n        _this.REPORT_TYPES = [_this.REPORT_TYPE_REPORT, _this.REPORT_TYPE_GEO, _this.REPORT_TYPE_TAGS];\n        _this.activeReportType = _this.REPORT_TYPE_REPORT;\n        _this.activeGeoType = 'region';\n        _this.activeGranularity = 'day';\n        _this.countries$ = new Rx[\"BehaviorSubject\"](_this.initDropdownModel());\n        _this.regions$ = new Rx[\"BehaviorSubject\"](_this.initDropdownModel());\n        _this.cities$ = new Rx[\"BehaviorSubject\"](_this.initDropdownModel());\n        _this.selectedCountry = null;\n        _this.selectedCountryCode = null;\n        _this.selectedRegion = null;\n        _this.selectedCity = null;\n        _this.isCountrySelectorVisible = true;\n        _this.isRegionSelectorVisible = false;\n        _this.isCitySelectorVisible = false;\n        _this.isLoadingCountry = false;\n        _this.isLoadingRegion = false;\n        _this.isLoadingCity = false;\n        _this.isSearchingTags = false;\n        _this.fetchPages = new Set();\n        return _this;\n    }\n    ;\n    AnalyticsSTView.prototype.ngOnInit = function () {\n        var _this = this;\n        this.loadingTags$ub = this.existingTagSelector.loadingEmitter\n            .subscribe(function (v) {\n            _this.isSearchingTags = v;\n            _this.cdr.markForCheck();\n        });\n        this.isLoadingCountry = true;\n        this.listOfCountries$ub = this.pagesService.listOfCountries()\n            .subscribe(function (data) {\n            _this.isLoadingCountry = false;\n            var countries = _this.formatGeoDropdown(data);\n            _this.selectedCountry = (countries && countries.length) ? countries[0] : null;\n            _this.isCountrySelectorVisible = true;\n            _this.countries$.next(countries);\n            _this.cdr.markForCheck();\n        });\n        this.prefixedTagsService.init(this.user.accountId, this.cdr);\n        this.dateRange = this.user.getDateRangeSelection();\n        this.onDateRangeChanged([this.dateRange.startDate, this.dateRange.endDate]);\n        this.existingTagSelector.reset();\n    };\n    AnalyticsSTView.prototype.ngOnDestroy = function () {\n        this.prefixedTagsService.destroy();\n        if (this.listOfCountries$ub != null && this.listOfCountries$ub.closed == false)\n            this.listOfCountries$ub.unsubscribe();\n        this.listOfCountries$ub = null;\n        if (this.listOfRegions$ub != null && this.listOfRegions$ub.closed == false)\n            this.listOfRegions$ub.unsubscribe();\n        this.listOfRegions$ub = null;\n        if (this.listOfCities$ub != null && this.listOfCities$ub.closed == false)\n            this.listOfCities$ub.unsubscribe();\n        this.listOfCities$ub = null;\n        if (this.loadingTags$ub != null && this.loadingTags$ub.closed == false)\n            this.loadingTags$ub.unsubscribe();\n        this.loadingTags$ub = null;\n        if (this.report$ub != null && this.report$ub.closed == false)\n            this.report$ub.unsubscribe();\n        this.report$ub = null;\n    };\n    AnalyticsSTView.prototype.onGranularityChange = function (granularity) {\n        this.activeGranularity = granularity;\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onGranularitySelect = function (item) {\n        this.activeGranularity = item.value;\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onReportTypeChange = function (_activeReportType) {\n        this.activeReportType = _activeReportType;\n        if (this.activeReportType == this.REPORT_TYPE_TAGS) {\n            this.existingTagSelector.reset();\n        }\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onGeoTypeChanged = function (_geoType) {\n        this.activeGeoType = _geoType;\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.prefixedTagSelect = function (data, item) {\n        data.selected = item;\n        this.prefixedTagsService.select(data.prefix, item.value);\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.prefixedTagReset = function (data) {\n        var model = !!data.search.model ? data.search.model : data.model;\n        data.search.text = \"\";\n        data.selected = !!model && 0 in model ? model[0] : null;\n        this.prefixedTagsService.select(data.prefix, null);\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.prefixedScrollEnd = function (data, event) {\n        var start = event.start, end = event.end;\n        var model = !!data.search.model ? data.search.model : data.model;\n        if (this.fetchPages.size > 0)\n            this.fetchPages.clear();\n        var m;\n        for (var i = start; i <= end; i++) {\n            m = model[i];\n            if (!!m.fetch && m.fetch.loading === false) {\n                this.fetchPages.add(m.fetch.page);\n            }\n        }\n        if (this.fetchPages.size > 0) {\n            var pages_1 = [];\n            this.fetchPages.forEach(function (p) { return pages_1.push(p); });\n            this.fetchPages.clear();\n            this.prefixedTagsService.fetch(data.prefix, pages_1, data.search.text);\n        }\n    };\n    AnalyticsSTView.prototype.prefixedSearch = function (data, text) {\n        this.prefixedTagsService.fetch(data.prefix, [0], text);\n    };\n    AnalyticsSTView.prototype.onValueChangeTag = function (_event) {\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onSelectCountry = function (item) {\n        var _this = this;\n        this.selectedCountryCode = item.value;\n        this.selectedRegion = null;\n        this.isRegionSelectorVisible = (this.selectedCountryCode !== null);\n        this.isCitySelectorVisible = this.isRegionSelectorVisible && (this.selectedRegion !== null);\n        this.regions$.next(this.initDropdownModel());\n        this.cities$.next(this.initDropdownModel());\n        this.cdr.markForCheck();\n        if (this.selectedCountryCode !== null) {\n            this.isLoadingRegion = true;\n            this.cdr.markForCheck();\n            if (this.listOfRegions$ub != null && !this.listOfRegions$ub.closed)\n                this.listOfRegions$ub.unsubscribe();\n            this.listOfRegions$ub = this.pagesService.listOfRegions(item.value)\n                .subscribe(function (data) {\n                _this.regions$.next(_this.formatGeoDropdown(data));\n                _this.isLoadingRegion = false;\n                _this.cdr.markForCheck();\n            });\n        }\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onSelectRegion = function (item) {\n        var _this = this;\n        this.selectedRegion = item.value;\n        this.isCitySelectorVisible = (this.selectedRegion !== null);\n        this.selectedCity = null;\n        this.cities$.next(this.initDropdownModel());\n        this.cdr.markForCheck();\n        if (this.selectedRegion !== null) {\n            this.isLoadingCity = true;\n            this.cdr.markForCheck();\n            if (this.listOfCities$ub != null && !this.listOfCities$ub.closed)\n                this.listOfCities$ub.unsubscribe();\n            this.listOfCities$ub = this.pagesService.listOfCities(this.selectedRegion)\n                .subscribe(function (data) {\n                _this.cities$.next(_this.formatGeoDropdown(data));\n                _this.isLoadingCity = false;\n                _this.cdr.markForCheck();\n            });\n        }\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onSelectCity = function (item) {\n        this.selectedCity = item.value;\n        this.cdr.markForCheck();\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onResetCountry = function () {\n        this.selectedCountry = null;\n        this.selectedCountryCode = null;\n        this.selectedRegion = null;\n        this.selectedCity = null;\n        this.isRegionSelectorVisible = (this.selectedCountryCode !== null);\n        this.isCitySelectorVisible = this.isRegionSelectorVisible && (this.selectedRegion !== null);\n        this.regions$.next(this.initDropdownModel());\n        this.cities$.next(this.initDropdownModel());\n        this.cdr.markForCheck();\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onResetRegion = function () {\n        this.selectedRegion = null;\n        this.selectedCity = null;\n        this.isCitySelectorVisible = false;\n        this.cities$.next(this.initDropdownModel());\n        this.cdr.markForCheck();\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onResetCity = function () {\n        this.selectedCity = null;\n        this.cdr.markForCheck();\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onDateRangeChanged = function (_event) {\n        this.user.setDateRangeSelection(_event[0], _event[1]);\n        this.dateRange = this.user.getDateRangeSelection();\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onPageChanged = function (_page) {\n        this.PAGER.page = _page;\n    };\n    AnalyticsSTView.prototype.onCountryTableRowClick = function (rec) {\n        if ((rec !== null) && ('countryCode' in rec)) {\n            this.selectCountryByCode(rec.countryCode);\n        }\n    };\n    AnalyticsSTView.prototype.onMapRegionClick = function (_data) {\n        if (this.selectedCountryCode === null) {\n            this.selectCountryByCode(_data.selectedRowValues[0]);\n        }\n    };\n    AnalyticsSTView.prototype.onTagAdd = function (_event) {\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.onTagRemove = function (_event) {\n        this.fetchData();\n    };\n    AnalyticsSTView.prototype.exportCsv = function () {\n        this.exportService.exportFileFromJs(this.csvFilename, this.csvData);\n    };\n    AnalyticsSTView.prototype.initDropdownModel = function () {\n        return [{ uid: -1, label: 'All', value: null }];\n    };\n    AnalyticsSTView.prototype.getPageReportFilters = function () {\n        var result = new PageReportFilters();\n        result.geoCountryCode = this.selectedCountryCode;\n        if (this.selectedRegion !== null)\n            result.geoRegionId = parseInt(this.selectedRegion);\n        result.tags = this.prefixedTagsService.selectedTagsList.concat(this.existingTagSelector.selectedTagsList);\n        result.demSex = null;\n        result.demAgeFrom = null;\n        result.demAgeTo = null;\n        return result;\n    };\n    AnalyticsSTView.prototype.selectCountryByCode = function (countryCode) {\n        var countries = this.countries$.getValue();\n        if (countries !== null) {\n            for (var _a = 0, countries_1 = countries; _a < countries_1.length; _a++) {\n                var country = countries_1[_a];\n                if (country.value === countryCode) {\n                    this.selectedCountry = country;\n                    this.onSelectCountry(country);\n                }\n            }\n        }\n    };\n    AnalyticsSTView.prototype.formatGeoDropdown = function (_data) {\n        var result = this.initDropdownModel();\n        if (_data.length == 0) {\n            return result;\n        }\n        for (var _i = 0; _i < _data.length; _i++) {\n            if (!(_data[_i].code == null)) {\n                result.push({ uid: _i, value: _data[_i].code, label: _data[_i].name });\n            }\n            else if (!(_data[_i].id == null)) {\n                result.push({ uid: _i, value: _data[_i].id, label: _data[_i].name });\n            }\n        }\n        return result;\n    };\n    AnalyticsSTView.prototype.fetchData = function () {\n        var _this = this;\n        var tasks = [];\n        if (this.activeReportType == this.REPORT_TYPE_REPORT) {\n            tasks.push(this.loadUsersAndViewsHistoryReport());\n            tasks.push(this.loadSummaryData());\n        }\n        else if (this.activeReportType == this.REPORT_TYPE_GEO) {\n            tasks.push(this.loadGeolocationData());\n        }\n        else {\n            tasks.push(this.loadUsersAndViewsHistoryReport());\n            tasks.push(this.loadSummaryData());\n            tasks.push(this.loadTopViewedTagsReport());\n        }\n        if (this.report$ub != null && this.report$ub.closed == false)\n            this.report$ub.unsubscribe();\n        this.report$ub = Object(forkJoin[\"forkJoin\"])(tasks)\n            .pipe(Object(operators[\"debounceTime\"])(500))\n            .subscribe(function () { return _this.cdr.markForCheck(); });\n    };\n    AnalyticsSTView.prototype.loadGeolocationData = function () {\n        var _this = this;\n        return this.pagesService.getGeoReport(this.user.accountId, this.dateRange, this.getPageReportFilters())\n            .pipe(Object(operators[\"tap\"])(function (data) { return _this.updateGeolocationData(data); }));\n    };\n    AnalyticsSTView.prototype.updateGeolocationData = function (data) {\n        this.geoDataTable = new Array(0);\n        var mapDataTable = [[\"Region\", \"Value\"]];\n        if (this.selectedCountryCode === null) {\n            var countries = data.countries;\n            this.PAGER.page = 1;\n            this.PAGER.total_items = countries.length;\n            for (var _a = 0, countries_2 = countries; _a < countries_2.length; _a++) {\n                var rec = countries_2[_a];\n                var views = parseFloat(rec.views);\n                var users = parseFloat(rec.users);\n                mapDataTable.push([rec.country.country_code, views]);\n                this.geoDataTable.push({\n                    label: rec.country.name,\n                    countryCode: rec.country.country_code,\n                    flag: \"flag-icon flag-icon-\" + rec.country.country_code.toLowerCase(),\n                    views: views,\n                    users: users\n                });\n            }\n        }\n        else {\n            var regions = data.regions;\n            this.PAGER.page = 1;\n            this.PAGER.total_items = regions.length;\n            for (var _b = 0, regions_1 = regions; _b < regions_1.length; _b++) {\n                var rec = regions_1[_b];\n                var views = parseFloat(rec.views);\n                var users = parseFloat(rec.users);\n                mapDataTable.push([rec.region.subdiv_code, views]);\n                this.geoDataTable.push({\n                    label: rec.region.name,\n                    flag: \"flag-icon\",\n                    views: views,\n                    users: users\n                });\n            }\n        }\n        this.updateSummaryData(parseFloat(data.summary.views), parseFloat(data.summary.users));\n        this.mapChartData = {\n            chartType: 'GeoChart',\n            apiKey: this.analyticsService.getGoogleMapsApiKey(),\n            dataTable: mapDataTable,\n            options: {\n                colorAxis: { colors: this.MAP_COLOR_RANGE }\n            }\n        };\n        if (this.selectedCountryCode !== null) {\n            this.mapChartData.options.resolution = (this.selectedCountryCode in this.MAP_REGIONS_SKIP_SET) ? 'countries' : 'provinces';\n            this.mapChartData.options.region = this.selectedCountryCode;\n            if (this.activeGeoType == \"city\") {\n                this.mapChartData.options.displayMode = 'markers';\n            }\n        }\n    };\n    AnalyticsSTView.prototype.loadUsersAndViewsHistoryReport = function () {\n        var _this = this;\n        return this.pagesService.getUsersAndViewsHistoryReport(this.user.accountId, this.dateRange, this.activeGranularity, this.getPageReportFilters())\n            .pipe(Object(operators[\"tap\"])(function (data) {\n            _this.chartUsersViewsHistory = new Array();\n            for (var _i = 0; _i < data.length; _i++)\n                _this.chartUsersViewsHistory.push(data[_i].data);\n            _this.chartLabelsReport = data[0].labels;\n        }));\n    };\n    AnalyticsSTView.prototype.loadTopViewedTagsReport = function () {\n        var _this = this;\n        var MAX_TOP_TAGS = 200;\n        return this.pagesService.getTopViewedTagsReport(this.user.accountId, this.dateRange, this.getPageReportFilters(), MAX_TOP_TAGS)\n            .pipe(Object(operators[\"tap\"])(function (data) {\n            _this.tagsDataTable = data.records;\n            _this.PAGER.page = 1;\n            _this.PAGER.total_items = data.records.length;\n        }));\n    };\n    AnalyticsSTView.prototype.loadSummaryData = function () {\n        var _this = this;\n        return this.pagesService.getUsersAndViewsSummaryReport(this.user.accountId, this.dateRange, this.getPageReportFilters())\n            .pipe(Object(operators[\"tap\"])(function (data) { return _this.updateSummaryData(data.views, data.users); }));\n    };\n    AnalyticsSTView.prototype.updateSummaryData = function (views, users) {\n        var viewsPerUser = (users > 0) ? views / users : null;\n        this.raportItems = [\n            { title: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.USERS'), desc: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.SELECTED_CRITERIA'), value: users, icon: 'fa fa-users fa-fw', color: 'widget widget-stats bg-blue' },\n            { title: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.VIEWS'), desc: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.SELECTED_CRITERIA'), value: views, icon: 'fa fa-play-circle fa-fw', color: 'widget widget-stats bg-black' },\n            { title: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.VIEWS_PER_USER'), desc: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.SELECTED_CRITERIA'), value: viewsPerUser, icon: 'fa fa-eye fa-fw', color: 'widget widget-stats bg-yellow' },\n        ];\n    };\n    Object.defineProperty(AnalyticsSTView.prototype, \"csvFilename\", {\n        get: function () {\n            var start = this.dateRange.startDate.format('YYYYMMDD');\n            var end = this.dateRange.endDate.format('YYYYMMDD');\n            return \"bradmax_st_\" + this.activeReportType + \"_\" + start + \"_\" + end + \"_by_\" + this.activeGranularity + \".csv\";\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AnalyticsSTView.prototype, \"csvData\", {\n        get: function () {\n            var linesNum = this.chartLabelsReport ? this.chartLabelsReport.length : 0;\n            var result = '';\n            var line = '';\n            var dateFormat = 'YYYY-MM-DD HH:mm';\n            if ((this.activeGranularity == 'day') || (this.activeGranularity == 'week')) {\n                dateFormat = 'YYYY-MM-DD';\n            }\n            else if (this.activeGranularity == 'month') {\n                dateFormat = 'YYYY-MM';\n            }\n            else if (this.activeGranularity == 'year') {\n                dateFormat = 'YYYY';\n            }\n            var columns = new Array();\n            columns.push('Date');\n            for (var _a = 0, _b = this.chartUsersViewsHistory; _a < _b.length; _a++) {\n                var col = _b[_a];\n                columns.push(col.label);\n            }\n            result += (columns.join(',') + \"\\r\\n\");\n            for (var i = 0; i < linesNum; i++) {\n                line = '\"' + moment_default()(this.chartLabelsReport[i]).format(dateFormat) + '\"';\n                for (var _c = 0, _d = this.chartUsersViewsHistory; _c < _d.length; _c++) {\n                    var col = _d[_c];\n                    line += (',' + col.data[i]);\n                }\n                line += \"\\r\\n\";\n                result += line;\n            }\n            return result;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n    AnalyticsSTView = st_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-st-view',\n            template: __webpack_require__(1418),\n            styles: [__webpack_require__(1419)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        st_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof pages_service_PagesService !== \"undefined\" && pages_service_PagesService) === \"function\" && _c || Object, typeof (_d = typeof tag_service_TagService !== \"undefined\" && tag_service_TagService) === \"function\" && _d || Object, typeof (_e = typeof prefixed_tags_service_PrefixedTagsService !== \"undefined\" && prefixed_tags_service_PrefixedTagsService) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object, typeof (_g = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _g || Object, typeof (_h = typeof existing_tag_selector_service_ExistingTagSelectorService !== \"undefined\" && existing_tag_selector_service_ExistingTagSelectorService) === \"function\" && _h || Object, typeof (_j = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _j || Object, typeof (_k = typeof export_service_ExportService !== \"undefined\" && export_service_ExportService) === \"function\" && _k || Object])\n    ], AnalyticsSTView);\n    return AnalyticsSTView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/st/raport/stRaport.view.component.ts\nvar stRaport_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar stRaport_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar stRaport_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar stRaport_view_component_AnalyticsSTRaportView = (function (_super) {\n    stRaport_view_component___extends(AnalyticsSTRaportView, _super);\n    function AnalyticsSTRaportView(pagesService, tagService, user, locale, translation, analyticsService, existingTagSelector, cdr, view) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.pagesService = pagesService;\n        _this.tagService = tagService;\n        _this.user = user;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.analyticsService = analyticsService;\n        _this.existingTagSelector = existingTagSelector;\n        _this.cdr = cdr;\n        _this.view = view;\n        _this.reportTypes = ['report', 'geolocation', 'tags',];\n        _this.activeReportType = 'report';\n        _this.geoGranularityTypes = ['city', 'region'];\n        _this.activeGeoType = 'region';\n        _this.granularityTypes = ['all'];\n        _this.activeGranularity = 'day';\n        _this.isBetaMode = false;\n        _this.isBetaMode = _this.view.checkIfBetaMode();\n        _this.pagingOptions = {\n            page: 1,\n            page_size: 10,\n            total_items: 0\n        };\n        _this.chartDemSex = {\n            data: null,\n            labels: new Array()\n        };\n        _this.chartDemAge = {\n            data: null,\n            labels: new Array()\n        };\n        _this.countriesList = null;\n        _this.regionsList = [{ label: 'All', value: null }];\n        _this.citiesList = [{ label: 'All', value: null }];\n        _this.selectedCountryCode = null;\n        _this.selectedCountry = null;\n        _this.selectedRegion = null;\n        _this.selectedCity = null;\n        _this.isRegionSelectorVisible = false;\n        _this.isCitySelectorVisible = false;\n        _this.isCountrySelectorVisible = true;\n        _this.mapColorRange = ['#d9ebfb', '#348fe2'];\n        _this.mapChartRegionsSkippingsSet = null;\n        _this.dateRange = _this.user.getDateRangeSelection();\n        _this.demographyAgeFrom = [];\n        _this.demographyAgeTo = [];\n        for (var age = 0; age <= 100; age++) {\n            var ageStr = age + '';\n            _this.demographyAgeFrom.push({ label: ageStr, value: age });\n            _this.demographyAgeTo.push({ label: ageStr, value: age });\n        }\n        _this.demographyAgeFrom[0].selected = true;\n        _this.demographyAgeTo[100].selected = true;\n        _this.selectedAgeFrom = _this.demographyAgeFrom[0];\n        _this.selectedAgeTo = _this.demographyAgeTo[100];\n        _this.demographySexList = [];\n        _this.demographySexList.push({ label: 'All', value: 0 });\n        _this.demographySexList.push({ label: _this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['MALE'], value: 1 });\n        _this.demographySexList.push({ label: _this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['FEMALE'], value: 2 });\n        _this.demographySexList.push({ label: _this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['OTHER'], value: 3 });\n        _this.selectedSex = _this.demographySexList[0];\n        _this.demographySexToChartMetaMap = {\n            'm': {\n                label: _this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['MALE'],\n                backgroundColor: \"rgba(52,152,219,0.8)\",\n                borderColor: \"rgba(52,152,219,1)\"\n            },\n            'f': {\n                label: _this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['FEMALE'],\n                backgroundColor: \"rgba(46, 204, 103,0.8)\",\n                borderColor: \"rgba(46, 204, 103,1)\"\n            },\n            'o': {\n                label: _this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['OTHER'],\n                backgroundColor: \"rgba(230, 126, 34,0.8)\",\n                borderColor: \"rgba(230, 126, 34,1)\"\n            },\n            '': {\n                label: _this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['UNDEFINED'],\n                backgroundColor: \"rgba(153,153,153,0.8)\",\n                borderColor: \"rgba(153,153,153,1)\"\n            }\n        };\n        _this.tagsDataTable = null;\n        _this.pagesService.listOfCountries().subscribe(function (data) {\n            _this.countriesList = _this.buildDropdownList(data);\n            _this.selectedCountry = (_this.countriesList && _this.countriesList.length) ? _this.countriesList[0] : null;\n            _this.isCountrySelectorVisible = true;\n            _this.cdr.markForCheck();\n        });\n        _this.existingTagSelector.changeDetectionEmitter.subscribe(function () { return _this.cdr.markForCheck(); });\n        _this.existingTagSelector.reset();\n        return _this;\n    }\n    AnalyticsSTRaportView.prototype.ngOnInit = function () {\n        this.onDateRangeChanged([this.dateRange.startDate, this.dateRange.endDate]);\n        this.cdr.markForCheck();\n    };\n    AnalyticsSTRaportView.prototype.getPageReportFilters = function () {\n        var result = new PageReportFilters();\n        result.geoCountryCode = this.selectedCountryCode;\n        if (this.selectedRegion !== null) {\n            result.geoRegionId = parseInt(this.selectedRegion);\n        }\n        result.tags = this.existingTagSelector.selectedTagsList;\n        result.demSex = this.selectedSex.value;\n        result.demAgeFrom = this.selectedAgeFrom.value;\n        result.demAgeTo = this.selectedAgeTo.value;\n        return result;\n    };\n    AnalyticsSTRaportView.prototype.onGranularityChange = function (granularity) {\n        this.activeGranularity = granularity;\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.onReportTypeChange = function (_activeReportType) {\n        this.activeReportType = _activeReportType;\n        if (this.activeReportType == 'tags') {\n            this.existingTagSelector.reset();\n        }\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.onGeoTypeChanged = function (_geoType) {\n        this.activeGeoType = _geoType;\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.onValueChangeTag = function (_event) {\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.onSelectCountry = function (selectedCountryItem) {\n        var _this = this;\n        this.selectedCountryCode = selectedCountryItem.value;\n        this.selectedRegion = null;\n        this.isRegionSelectorVisible = (this.selectedCountryCode !== null);\n        this.isCitySelectorVisible = this.isRegionSelectorVisible && (this.selectedRegion !== null);\n        if (this.selectedCountryCode !== null) {\n            this.pagesService.listOfRegions(selectedCountryItem.value).subscribe(function (data) {\n                _this.selectedRegion = null;\n                _this.regionsList = _this.buildDropdownList(data);\n                setTimeout(function () { _this.cdr.markForCheck(); }, 20);\n            });\n        }\n        else {\n            this.selectedRegion = null;\n            this.regionsList = [{ label: 'All', value: null }];\n            this.citiesList = [{ label: 'All', value: null }];\n        }\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.onSelectRegion = function (_event) {\n        var _this = this;\n        this.selectedRegion = _event['value'];\n        this.isCitySelectorVisible = (this.selectedRegion !== null);\n        if (_event['value'] !== null) {\n            this.pagesService.listOfCities(_event['value']).subscribe(function (data) {\n                _this.citiesList = _this.buildDropdownList(data);\n                _this.selectedCity = null;\n                setTimeout(function () { _this.cdr.markForCheck(); }, 20);\n            });\n        }\n        else {\n            this.citiesList = [{ label: 'All', value: null }];\n            this.selectedCity = null;\n        }\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.onDropdownSelectAgeFrom = function (rec) {\n        if (rec) {\n            this.selectedAgeFrom = rec;\n            this.loadDataForReport();\n        }\n    };\n    AnalyticsSTRaportView.prototype.onDropdownSelectAgeTo = function (rec) {\n        if (rec) {\n            this.selectedAgeTo = rec;\n            this.loadDataForReport();\n        }\n    };\n    AnalyticsSTRaportView.prototype.onDropdownSelectSex = function (rec) {\n        if (rec) {\n            this.selectedSex = rec;\n            this.loadDataForReport();\n        }\n    };\n    AnalyticsSTRaportView.prototype.onSelectCity = function (_event) {\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.onDateRangeChanged = function (_event) {\n        this.user.setDateRangeSelection(_event[0], _event[1]);\n        this.dateRange = this.user.getDateRangeSelection();\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.onPageChanged = function (_page) {\n        this.pagingOptions.page = _page;\n    };\n    AnalyticsSTRaportView.prototype.onCountryTableRowClick = function (rec) {\n        if ((rec !== null) && ('countryCode' in rec)) {\n            this.selectCountryByCode(rec.countryCode);\n        }\n    };\n    AnalyticsSTRaportView.prototype.onMapRegionClick = function (_data) {\n        if (this.selectedCountryCode === null) {\n            this.selectCountryByCode(_data.selectedRowValues[0]);\n        }\n    };\n    AnalyticsSTRaportView.prototype.onTagAdd = function (_event) {\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.onTagRemove = function (_event) {\n        this.loadDataForReport();\n    };\n    AnalyticsSTRaportView.prototype.selectCountryByCode = function (countryCode) {\n        if (this.countriesList !== null) {\n            for (var _a = 0, _b = this.countriesList; _a < _b.length; _a++) {\n                var rec = _b[_a];\n                if (rec.value === countryCode) {\n                    this.selectedCountry = rec;\n                    this.onSelectCountry(rec);\n                }\n            }\n        }\n    };\n    AnalyticsSTRaportView.prototype.buildDropdownList = function (_data) {\n        var result;\n        if (_data.length == 0) {\n            return [{ value: '', label: '' }];\n        }\n        result = new Array(0);\n        result.push({ label: 'All', value: null });\n        for (var _i = 0; _i < _data.length; _i++) {\n            if (!(_data[_i].code == null)) {\n                result.push({ value: _data[_i].code, label: _data[_i].name });\n            }\n            else if (!(_data[_i].id == null)) {\n                result.push({ value: _data[_i].id, label: _data[_i].name });\n            }\n        }\n        return result;\n    };\n    AnalyticsSTRaportView.prototype.loadDataForGeolocation = function () {\n        var _this = this;\n        if (this.mapChartRegionsSkippingsSet === null) {\n            var geoRegionsMapChartFix = __webpack_require__(107);\n            this.mapChartRegionsSkippingsSet = geoRegionsMapChartFix.skippingSet;\n        }\n        this.pagesService.getGeoReport(this.user.accountId, this.dateRange, this.getPageReportFilters()).subscribe(function (data) {\n            _this.geoDataTable = new Array(0);\n            var mapDataTable = [[\"Region\", \"Value\"]];\n            if (_this.selectedCountryCode === null) {\n                var countries = data.countries;\n                _this.pagingOptions.page = 1;\n                _this.pagingOptions.total_items = countries.length;\n                for (var _a = 0, countries_1 = countries; _a < countries_1.length; _a++) {\n                    var rec = countries_1[_a];\n                    var views = parseFloat(rec.views);\n                    var users = parseFloat(rec.users);\n                    mapDataTable.push([rec.country.country_code, views]);\n                    _this.geoDataTable.push({\n                        label: rec.country.name,\n                        countryCode: rec.country.country_code,\n                        flag: \"flag-icon flag-icon-\" + rec.country.country_code.toLowerCase(),\n                        views: views,\n                        users: users\n                    });\n                }\n            }\n            else {\n                var regions = data.regions;\n                _this.pagingOptions.page = 1;\n                _this.pagingOptions.total_items = regions.length;\n                for (var _b = 0, regions_1 = regions; _b < regions_1.length; _b++) {\n                    var rec = regions_1[_b];\n                    var views = parseFloat(rec.views);\n                    var users = parseFloat(rec.users);\n                    mapDataTable.push([rec.region.subdiv_code, views]);\n                    _this.geoDataTable.push({\n                        label: rec.region.name,\n                        flag: \"flag-icon\",\n                        views: views,\n                        users: users\n                    });\n                }\n            }\n            _this.updateSummaryData(parseFloat(data.summary.views), parseFloat(data.summary.users));\n            _this.mapChartData = {\n                chartType: 'GeoChart',\n                apiKey: _this.analyticsService.getGoogleMapsApiKey(),\n                dataTable: mapDataTable,\n                options: {\n                    colorAxis: { colors: _this.mapColorRange }\n                }\n            };\n            if (_this.selectedCountryCode !== null) {\n                _this.mapChartData.options.resolution = (_this.selectedCountryCode in _this.mapChartRegionsSkippingsSet) ? 'countries' : 'provinces';\n                _this.mapChartData.options.region = _this.selectedCountryCode;\n                if (_this.activeGeoType == \"city\") {\n                    _this.mapChartData.options.displayMode = 'markers';\n                }\n            }\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsSTRaportView.prototype.loadUsersAndViewsHistoryReport = function () {\n        var _this = this;\n        this.pagesService.getUsersAndViewsHistoryReport(this.user.accountId, this.dateRange, this.activeGranularity, this.getPageReportFilters()).subscribe(function (data) {\n            _this.chartUsersViewsHistory = new Array();\n            for (var _i = 0; _i < data.length; _i++) {\n                _this.chartUsersViewsHistory.push(data[_i].data);\n            }\n            _this.chartLabelsReport = data[0].labels;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsSTRaportView.prototype.loadDemSexReport = function () {\n        var _this = this;\n        this.pagesService.getDemSexReport(this.user.accountId, this.dateRange, this.getPageReportFilters()).subscribe(function (data) {\n            _this.chartDemSex.labels = new Array();\n            var demographySexStats = {\n                backgroundColor: new Array(),\n                borderColor: new Array(),\n                data: new Array()\n            };\n            for (var _a = 0, _b = data.sex_stats; _a < _b.length; _a++) {\n                var rec = _b[_a];\n                var sexChartInfo = _this.mapSexStrToChartInfo(rec.sex);\n                demographySexStats.backgroundColor.push(sexChartInfo.backgroundColor);\n                demographySexStats.borderColor.push(sexChartInfo.borderColor);\n                demographySexStats.data.push(parseFloat(rec.views));\n                _this.chartDemSex.labels.push(sexChartInfo.label);\n            }\n            _this.chartDemSex.data = new Array();\n            _this.chartDemSex.data.push(demographySexStats);\n            _this.updateSummaryData(parseFloat(data.summary.views), parseFloat(data.summary.users));\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsSTRaportView.prototype.loadDemAgeReport = function () {\n        var _this = this;\n        this.pagesService.getDemAgeReport(this.user.accountId, this.dateRange, this.getPageReportFilters()).subscribe(function (data) {\n            _this.chartDemAge.data = new Array();\n            _this.chartDemAge.labels = new Array();\n            var demographyAgeStats = {\n                backgroundColor: \"‎#0000FF\",\n                barThickness: 40,\n                data: new Array(),\n                label: _this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['SUBPAGES']['VIEWS']\n            };\n            for (var _a = 0, _b = data.age_stats; _a < _b.length; _a++) {\n                var rec = _b[_a];\n                demographyAgeStats.data.push(parseFloat(rec.views));\n                _this.chartDemAge.labels.push(rec.age_from + '..' + rec.age_to);\n            }\n            _this.chartDemAge.data.push(demographyAgeStats);\n            _this.updateSummaryData(parseFloat(data.summary.views), parseFloat(data.summary.users));\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsSTRaportView.prototype.loadTopViewedTagsReport = function () {\n        var _this = this;\n        var MAX_TOP_TAGS = 200;\n        this.pagesService.getTopViewedTagsReport(this.user.accountId, this.dateRange, this.getPageReportFilters(), MAX_TOP_TAGS).subscribe(function (data) {\n            _this.tagsDataTable = data.records;\n            _this.pagingOptions.page = 1;\n            _this.pagingOptions.total_items = data.records.length;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsSTRaportView.prototype.loadDataForReport = function () {\n        if (this.activeReportType == 'report') {\n            this.loadUsersAndViewsHistoryReport();\n            this.loadSummaryData();\n        }\n        else if (this.activeReportType == 'geolocation') {\n            this.loadDataForGeolocation();\n        }\n        else {\n            this.loadUsersAndViewsHistoryReport();\n            this.loadSummaryData();\n            this.loadTopViewedTagsReport();\n        }\n    };\n    AnalyticsSTRaportView.prototype.mapSexStrToChartInfo = function (sexStr) {\n        if (sexStr in this.demographySexToChartMetaMap) {\n            return this.demographySexToChartMetaMap[sexStr];\n        }\n        return this.demographySexToChartMetaMap[''];\n    };\n    AnalyticsSTRaportView.prototype.loadSummaryData = function () {\n        var _this = this;\n        this.pagesService.getUsersAndViewsSummaryReport(this.user.accountId, this.dateRange, this.getPageReportFilters()).subscribe(function (data) {\n            _this.updateSummaryData(data.views, data.users);\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsSTRaportView.prototype.updateSummaryData = function (views, users) {\n        var sumItemTitles = this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['SUMMARY'];\n        var viewsPerUser = (users > 0) ? views / users : null;\n        this.raportItems = [\n            { title: sumItemTitles['USERS'], value: users, desc: sumItemTitles['SELECTED_CRITERIA'], icon: 'fa fa-users fa-fw', color: 'widget widget-stats bg-blue' },\n            { title: sumItemTitles['VIEWS'], value: views, desc: sumItemTitles['SELECTED_CRITERIA'], icon: 'fa fa-play-circle fa-fw', color: 'widget widget-stats bg-black' },\n            { title: sumItemTitles['VIEWS_PER_USER'], value: viewsPerUser, desc: sumItemTitles['SELECTED_CRITERIA'], icon: 'fa fa-eye fa-fw', color: 'widget widget-stats bg-yellow' },\n        ];\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n    AnalyticsSTRaportView = stRaport_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'analytics-st-raport-view',\n            template: __webpack_require__(1420),\n            styles: [\n                ':host .table-loader {height:330px;position:relative;}',\n                ':host .report-criteria tags {background-color:#fafafa;border-left:solid 1px #fafafa;border-right:solid 1px #fafafa;}',\n                ':host .report-criteria label {line-height:30px;}',\n                ':host .report .widget {marging-bottom:0;}',\n                ':host .analytics-geo-table .clickable {cursor:pointer;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        stRaport_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof pages_service_PagesService !== \"undefined\" && pages_service_PagesService) === \"function\" && _a || Object, typeof (_b = typeof tag_service_TagService !== \"undefined\" && tag_service_TagService) === \"function\" && _b || Object, typeof (_c = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _d || Object, typeof (_e = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _e || Object, typeof (_f = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _f || Object, typeof (_g = typeof existing_tag_selector_service_ExistingTagSelectorService !== \"undefined\" && existing_tag_selector_service_ExistingTagSelectorService) === \"function\" && _g || Object, typeof (_h = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _h || Object, typeof (_j = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _j || Object])\n    ], AnalyticsSTRaportView);\n    return AnalyticsSTRaportView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/st/st.module.ts\nvar st_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), 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\nvar st_module_routes = [\n    { path: '', component: stRaport_view_component_AnalyticsSTRaportView },\n    { path: 'beta', component: st_view_component_AnalyticsSTView },\n];\nvar st_module_AnalyticsSTModule = (function () {\n    function AnalyticsSTModule() {\n    }\n    AnalyticsSTModule = st_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(st_module_routes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                chart_module_ChartModule,\n                TagInputModule,\n                pager_module_PagerModule,\n                google_charts_module_Ng2GoogleChartsModule,\n                camelCaseToSpace_module_CamelCaseToSpaceModule,\n                capitalize_first_module_CapitalizeFirstModule,\n                virtual_dropdown_module_VirtualDropdownModule,\n            ],\n            declarations: [\n                stRaport_view_component_AnalyticsSTRaportView,\n                st_view_component_AnalyticsSTView,\n                report_picker_component_ReportPickerComponent,\n                geo_picker_component_GeoPickerComponent\n            ],\n            providers: [\n                analytics_service_AnalyticsService,\n                pages_service_PagesService,\n                usersAndViewsVSTime_service_UsersAndViewsVsTimeService,\n                existing_tag_selector_service_ExistingTagSelectorService,\n                tag_service_TagService,\n                prefixed_tags_service_PrefixedTagsService,\n            ]\n        })\n    ], AnalyticsSTModule);\n    return AnalyticsSTModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/virtual/list/component/virtual.list.component.ts\nvar virtual_list_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar virtual_list_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar virtual_list_component_selector = \"virtual-list\";\nvar virtual_list_component_VirtualListComponent = (function () {\n    function VirtualListComponent(cdr) {\n        this.cdr = cdr;\n        this.selector = virtual_list_component_selector;\n        this.scrollerStart = new core_es5[\"EventEmitter\"]();\n        this.scrollerEnd = new core_es5[\"EventEmitter\"]();\n        this.scrollerChange = new core_es5[\"EventEmitter\"]();\n        this.scrollerUpdate = new core_es5[\"EventEmitter\"]();\n        this.listHeight = 30;\n        this.itemHeight = 30;\n        this.showTopGradient = false;\n    }\n    VirtualListComponent.prototype.handleListVieportUpdate = function (items) {\n        this.listViewportItems = items;\n        this.scrollerUpdate.emit(this.listViewportItems);\n        this.cdr.markForCheck();\n    };\n    VirtualListComponent.prototype.handleListVieportChange = function (event) {\n        var topGrad = event.scrollStartPosition > 0;\n        if (this.showTopGradient != topGrad) {\n            this.showTopGradient = topGrad;\n            this.cdr.markForCheck();\n        }\n        this.scrollerChange.emit(event);\n    };\n    VirtualListComponent.prototype.handleListVieportStart = function (event) { this.scrollerStart.emit(event); };\n    VirtualListComponent.prototype.handleListVieportEnd = function (event) { this.scrollerEnd.emit(event); };\n    var _a, _b;\n    virtual_list_component___decorate([\n        Object(core_es5[\"HostBinding\"])(\"class\"),\n        virtual_list_component___metadata(\"design:type\", Object)\n    ], VirtualListComponent.prototype, \"selector\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_list_component___metadata(\"design:type\", Object)\n    ], VirtualListComponent.prototype, \"scrollerStart\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_list_component___metadata(\"design:type\", Object)\n    ], VirtualListComponent.prototype, \"scrollerEnd\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_list_component___metadata(\"design:type\", Object)\n    ], VirtualListComponent.prototype, \"scrollerChange\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        virtual_list_component___metadata(\"design:type\", Object)\n    ], VirtualListComponent.prototype, \"scrollerUpdate\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_list_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"TemplateRef\"] !== \"undefined\" && core_es5[\"TemplateRef\"]) === \"function\" && _a || Object)\n    ], VirtualListComponent.prototype, \"itemTemplate\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_list_component___metadata(\"design:type\", Object)\n    ], VirtualListComponent.prototype, \"listHeight\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_list_component___metadata(\"design:type\", Object)\n    ], VirtualListComponent.prototype, \"itemHeight\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_list_component___metadata(\"design:type\", Array)\n    ], VirtualListComponent.prototype, \"items\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_list_component___metadata(\"design:type\", Function)\n    ], VirtualListComponent.prototype, \"compareItems\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        virtual_list_component___metadata(\"design:type\", Function)\n    ], VirtualListComponent.prototype, \"trackItem\", void 0);\n    virtual_list_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.top-gradient'),\n        virtual_list_component___metadata(\"design:type\", Object)\n    ], VirtualListComponent.prototype, \"showTopGradient\", void 0);\n    VirtualListComponent = virtual_list_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: virtual_list_component_selector,\n            template: __webpack_require__(1421),\n            styles: [__webpack_require__(1422)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n        }),\n        virtual_list_component___metadata(\"design:paramtypes\", [typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object])\n    ], VirtualListComponent);\n    return VirtualListComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/virtual/list/virtual.list.module.ts\nvar virtual_list_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar virtual_list_module_VirtualListModule = (function () {\n    function VirtualListModule() {\n    }\n    VirtualListModule = virtual_list_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                virtual_scroller[\"VirtualScrollerModule\"],\n            ],\n            providers: [],\n            declarations: [\n                virtual_list_component_VirtualListComponent,\n            ],\n            exports: [\n                virtual_list_component_VirtualListComponent,\n            ],\n            entryComponents: [\n                virtual_list_component_VirtualListComponent,\n            ],\n        })\n    ], VirtualListModule);\n    return VirtualListModule;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/analytics/sampled-traffic/model/sampled-traffc.model.ts\nvar sampled_traffc_model = __webpack_require__(108);\nvar sampled_traffc_model_default = /*#__PURE__*/__webpack_require__.n(sampled_traffc_model);\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/service/sampled-traffic.geo.service.ts\nvar sampled_traffic_geo_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_geo_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService = (function () {\n    function AnalyticsSampledTrafficGeoService(pages) {\n        this.pages = pages;\n        this.regions = new Map();\n    }\n    AnalyticsSampledTrafficGeoService.prototype.isValidCountryCode = function (countryCode) { return this._countryCodes.indexOf(countryCode) > -1; };\n    AnalyticsSampledTrafficGeoService.prototype.countryNameByCode = function (countryCode) {\n        var country = this._countries.find(function (c) { return c.code === countryCode; });\n        if (country)\n            return country.name;\n        return null;\n    };\n    AnalyticsSampledTrafficGeoService.prototype.regionNameById = function (countryCode, regionId) {\n        var regions = this.regions.has(countryCode) ? this.regions.get(countryCode) : null;\n        if (!regions)\n            return null;\n        var region = regions.find(function (c) { return c.id === regionId; });\n        if (!!region)\n            return region.name;\n        return null;\n    };\n    AnalyticsSampledTrafficGeoService.prototype.regionCodeById = function (countryCode, regionId) {\n        var regions = this.regions.has(countryCode) ? this.regions.get(countryCode) : null;\n        if (!regions)\n            return null;\n        var region = regions.find(function (c) { return c.id === regionId; });\n        console.log(region);\n        if (!!region)\n            return region.name;\n        return null;\n    };\n    AnalyticsSampledTrafficGeoService.prototype.countries$ = function () {\n        var _this = this;\n        if (this._countries)\n            return Object(of[\"of\"])(this._countries);\n        return this.pages.listOfCountries()\n            .pipe(Object(operators[\"filter\"])(function (v) { return !!v; }), Object(operators[\"tap\"])(function (countries) {\n            _this._countries = countries;\n            _this._countryCodes = _this._countries.map(function (c) { return c.code.toUpperCase(); });\n        }));\n    };\n    AnalyticsSampledTrafficGeoService.prototype.regions$ = function (countryCode) {\n        var _this = this;\n        if (this.regions.has(countryCode)) {\n            var cached = this.regions.get(countryCode);\n            if (!!cached)\n                return Object(of[\"of\"])(cached);\n        }\n        return this.pages.listOfRegions(countryCode)\n            .pipe(Object(operators[\"tap\"])(function (regions) { return _this.regions.set(countryCode, regions); }));\n    };\n    var _a;\n    AnalyticsSampledTrafficGeoService = sampled_traffic_geo_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        sampled_traffic_geo_service___metadata(\"design:paramtypes\", [typeof (_a = typeof pages_service_PagesService !== \"undefined\" && pages_service_PagesService) === \"function\" && _a || Object])\n    ], AnalyticsSampledTrafficGeoService);\n    return AnalyticsSampledTrafficGeoService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/pipe/tag.prefix.pipe.ts\nvar tag_prefix_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar tag_prefix_pipe___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar tag_prefix_pipe_TagPrefixPipe = (function () {\n    function TagPrefixPipe(lowercase, capitalizeFirst, camelCaseToSpace) {\n        this.lowercase = lowercase;\n        this.capitalizeFirst = capitalizeFirst;\n        this.camelCaseToSpace = camelCaseToSpace;\n    }\n    TagPrefixPipe.prototype.transform = function (input) {\n        if (!input || typeof input !== 'string' || input.length < 1)\n            return input;\n        switch (input) {\n            case 'mid':\n                return \"Media id\";\n            default:\n                return this.capitalizeFirst.transform(this.lowercase.transform(this.camelCaseToSpace.transform(input)));\n        }\n    };\n    var _a, _b, _c;\n    TagPrefixPipe = tag_prefix_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'tagPrefix' }),\n        tag_prefix_pipe___metadata(\"design:paramtypes\", [typeof (_a = typeof common_es5[\"LowerCasePipe\"] !== \"undefined\" && common_es5[\"LowerCasePipe\"]) === \"function\" && _a || Object, typeof (_b = typeof capitalize_first_pipe_CapitalizeFirstPipe !== \"undefined\" && capitalize_first_pipe_CapitalizeFirstPipe) === \"function\" && _b || Object, typeof (_c = typeof camelCaseToSpace_pipe_CamelCaseToSpacePipe !== \"undefined\" && camelCaseToSpace_pipe_CamelCaseToSpacePipe) === \"function\" && _c || Object])\n    ], TagPrefixPipe);\n    return TagPrefixPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/service/sampled-traffic.params.service.ts\nvar sampled_traffic_params_service___assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar sampled_traffic_params_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_params_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar PARAM_RANGE = \"r\";\nvar PARAM_GRANULARITY = \"b\";\nvar PARAM_GEO = \"g\";\nvar PARAM_TAGS = \"t\";\nvar sampled_traffic_params_service_AnalyticsSampledTrafficParamsService = (function () {\n    function AnalyticsSampledTrafficParamsService(router, user, geo) {\n        this.router = router;\n        this.user = user;\n        this.geo = geo;\n        this.defaultGranularity = 'day';\n        this.redirectCounter = 0;\n    }\n    AnalyticsSampledTrafficParamsService.prototype.navigate = function (queryParams, queryParamsHandling) {\n        if (queryParamsHandling === void 0) { queryParamsHandling = 'merge'; }\n        return this.router.navigate(analyticsSampledTrafficRoute, { queryParams: queryParams, queryParamsHandling: queryParamsHandling, replaceUrl: true });\n    };\n    AnalyticsSampledTrafficParamsService.prototype.isRangeKey = function (k) { return PARAM_RANGE === k; };\n    AnalyticsSampledTrafficParamsService.prototype.isGranularityKey = function (k) { return PARAM_GRANULARITY === k; };\n    AnalyticsSampledTrafficParamsService.prototype.isGeolocationKey = function (k) { return PARAM_GEO === k; };\n    AnalyticsSampledTrafficParamsService.prototype.isTagsKey = function (k) { return PARAM_TAGS === k; };\n    AnalyticsSampledTrafficParamsService.prototype.isKey = function (k) { return this.isRangeKey(k) || this.isGranularityKey(k) || this.isGeolocationKey(k) || this.isTagsKey(k); };\n    AnalyticsSampledTrafficParamsService.prototype.formatUserDateRange = function () {\n        var _a;\n        var dateRange = this.user.getDateRangeSelection();\n        return _a = {}, _a[PARAM_RANGE] = dateRange.startDate.unix() + \":\" + dateRange.endDate.unix(), _a;\n    };\n    AnalyticsSampledTrafficParamsService.prototype.formatGeolocation = function (countryCode, regionId) {\n        var _a, _b, _c;\n        if (!!countryCode && !!regionId)\n            return _a = {}, _a[PARAM_GEO] = countryCode + \":\" + regionId, _a;\n        if (!!countryCode)\n            return _b = {}, _b[PARAM_GEO] = \"\" + countryCode, _b;\n        return _c = {}, _c[PARAM_GEO] = '', _c;\n    };\n    AnalyticsSampledTrafficParamsService.prototype.formatGranularity = function (granularity) {\n        var _a;\n        return _a = {}, _a[PARAM_GRANULARITY] = granularity, _a;\n    };\n    AnalyticsSampledTrafficParamsService.prototype.formatTags = function (tags) {\n        var _a, _b;\n        if (!!tags)\n            return _a = {}, _a[PARAM_TAGS] = tags.join(\",\"), _a;\n        return _b = {}, _b[PARAM_TAGS] = \"\", _b;\n    };\n    AnalyticsSampledTrafficParamsService.prototype.parseDateRange = function (map) {\n        if (!map.has(PARAM_RANGE)) {\n            return null;\n        }\n        var raw_range = map.get(PARAM_RANGE);\n        if (typeof raw_range !== 'string' || raw_range.length < 1) {\n            return null;\n        }\n        var raw_range_array = raw_range.split(\":\");\n        if (raw_range_array.length !== 2) {\n            return null;\n        }\n        var unix_range_array;\n        try {\n            unix_range_array = [parseInt(raw_range_array[0]), parseInt(raw_range_array[1])];\n        }\n        catch (error) {\n            return null;\n        }\n        if (unix_range_array[0] > unix_range_array[1]) {\n            return null;\n        }\n        var moment_range_array;\n        try {\n            moment_range_array = [moment_default.a.unix(unix_range_array[0]), moment_default.a.unix(unix_range_array[1])];\n        }\n        catch (error) {\n            return null;\n        }\n        if (!moment_range_array[0].isValid() || !moment_range_array[1].isValid()) {\n            return null;\n        }\n        if (moment_range_array[0].isSameOrAfter(moment_range_array[1])) {\n            return null;\n        }\n        this.user.setDateRangeSelection(moment_range_array[0], moment_range_array[1]);\n        return unix_range_array;\n    };\n    AnalyticsSampledTrafficParamsService.prototype.parseGranularity = function (map) {\n        switch (map.get(PARAM_GRANULARITY)) {\n            case 'hour': return 'hour';\n            case 'day': return 'day';\n            case 'week': return 'week';\n            case 'month': return 'month';\n            case 'year': return 'year';\n            default: return null;\n        }\n    };\n    AnalyticsSampledTrafficParamsService.prototype.parseGeo = function (map) {\n        if (!map.has(PARAM_GEO)) {\n            return null;\n        }\n        var raw_geo = map.get(PARAM_GEO);\n        if (typeof raw_geo !== 'string') {\n            return null;\n        }\n        var raw_geo_array = raw_geo.split(\":\");\n        var countryCode = raw_geo_array[0].length > 0 ? raw_geo_array[0] : null;\n        var _regionId = raw_geo_array.length > 1 ? raw_geo_array[1] : null;\n        return !!_regionId\n            ? { countryCode: countryCode, regionId: parseInt(_regionId) }\n            : { countryCode: countryCode };\n    };\n    AnalyticsSampledTrafficParamsService.prototype.parseTagIds = function (map) {\n        if (!map.has(PARAM_TAGS)) {\n            return null;\n        }\n        var raw_tags = map.get(PARAM_TAGS);\n        if (typeof raw_tags !== 'string') {\n            return null;\n        }\n        var raw_tags_array = raw_tags.split(\",\");\n        if (raw_tags_array.length == 0) {\n            return null;\n        }\n        return raw_tags_array.map(function (t) { return parseInt(t); }).filter(function (i) { return isFinite(i) && i > 0; });\n    };\n    AnalyticsSampledTrafficParamsService.prototype.redirectIfNeeded = function (queryParamMap) {\n        var _this = this;\n        return this.geo.countries$()\n            .pipe(Object(operators[\"switchMap\"])(function () {\n            var needRedirect = false;\n            var fixedParams = {};\n            for (var _i = 0, _a = queryParamMap.keys; _i < _a.length; _i++) {\n                var key = _a[_i];\n                if (_this.isKey(key))\n                    fixedParams[key] = queryParamMap.get(key);\n            }\n            var range = _this.parseDateRange(queryParamMap);\n            if (!range) {\n                fixedParams = sampled_traffic_params_service___assign({}, fixedParams, _this.formatUserDateRange());\n                needRedirect = true;\n            }\n            var granularity = _this.parseGranularity(queryParamMap);\n            if (!granularity) {\n                fixedParams = sampled_traffic_params_service___assign({}, fixedParams, _this.formatGranularity(_this.defaultGranularity));\n                needRedirect = true;\n            }\n            var geolocation = _this.parseGeo(queryParamMap);\n            if (!geolocation) {\n                fixedParams = sampled_traffic_params_service___assign({}, fixedParams, _this.formatGeolocation(null));\n                needRedirect = true;\n            }\n            else if (!!geolocation.countryCode && geolocation.countryCode !== '') {\n                var countryCode = (\"\" + geolocation.countryCode).toUpperCase();\n                var found = _this.geo.isValidCountryCode(countryCode);\n                if (!found) {\n                    fixedParams = sampled_traffic_params_service___assign({}, fixedParams, _this.formatGeolocation(null));\n                    needRedirect = true;\n                }\n            }\n            var tags = _this.parseTagIds(queryParamMap);\n            if (!tags) {\n                fixedParams = sampled_traffic_params_service___assign({}, fixedParams, _this.formatTags(null));\n                needRedirect = true;\n            }\n            if (!!needRedirect) {\n                if (_this.redirectCounter < 10) {\n                    _this.navigate(fixedParams, '');\n                    _this.redirectCounter++;\n                }\n                else {\n                    console.error(\"AnalyticsSampledTrafficParamsService tries to redirect 10 times in row\");\n                }\n                return Object(of[\"of\"])(false);\n            }\n            _this.redirectCounter = 0;\n            return Object(of[\"of\"])(true);\n        }));\n    };\n    var _a, _b, _c;\n    AnalyticsSampledTrafficParamsService = sampled_traffic_params_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        sampled_traffic_params_service___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object, typeof (_c = typeof sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService !== \"undefined\" && sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService) === \"function\" && _c || Object])\n    ], AnalyticsSampledTrafficParamsService);\n    return AnalyticsSampledTrafficParamsService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/service/sampled-traffic.tags.service.ts\nvar sampled_traffic_tags_service___assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar sampled_traffic_tags_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_tags_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar sampled_traffic_tags_service_AnalyticsSampledTrafficTagsService = (function () {\n    function AnalyticsSampledTrafficTagsService(user, tagService, tagPrefix, params) {\n        this.user = user;\n        this.tagService = tagService;\n        this.tagPrefix = tagPrefix;\n        this.params = params;\n        this.PAGE_SIZE = 20;\n        this.change = new core_es5[\"EventEmitter\"]();\n        this.handleTagSearch = this.searchChipsByText.bind(this);\n        this.selectedChips = [];\n        this.isSearchingTags = false;\n        this.PREFIX_SEPARATOR = ':';\n        this.LOADING_LABEL = 'loading...';\n        this.EMPTY_LABEL = '...';\n    }\n    Object.defineProperty(AnalyticsSampledTrafficTagsService.prototype, \"selectedTagRecords\", {\n        get: function () { return [].concat(this.selectedChips.map(function (c) { return ({ id: c.id, tag: c.tag }); })); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AnalyticsSampledTrafficTagsService.prototype, \"hasPrefixedTagData\", {\n        get: function () { return !!this.prefixedTagsData; },\n        enumerable: true,\n        configurable: true\n    });\n    AnalyticsSampledTrafficTagsService.prototype.init = function () {\n        var _this = this;\n        this.prefixedTagsData$ub = this.tagService.prefixes(this.user.accountId)\n            .pipe(Object(operators[\"debounceTime\"])(100))\n            .subscribe({\n            next: function (tags) { return _this.prefixedTagsData = _this.parsePrefixedTagsData(tags); },\n            error: function (error) { return console.error(error); },\n            complete: function () { return _this.change.emit(); },\n        });\n        if (!this.fetchPrefixedTags$) {\n            this.fetchPrefixedTags$ = new Rx[\"BehaviorSubject\"](null);\n        }\n        this.fetchPrefixedTags$ub = this.fetchPrefixedTags$.asObservable()\n            .pipe(Object(operators[\"filter\"])(function (v) { return !!v && !!_this.prefixedTagsData && _this.prefixedTagsData.has(v.prefix); }), Object(operators[\"debounceTime\"])(250), Object(operators[\"switchMap\"])(function (req) {\n            _this.prefixedTagsData.get(req.prefix).loading = true;\n            _this.change.emit();\n            return Object(forkJoin[\"forkJoin\"])(req.pages.map(function (page) { return _this.fetchPrefixedTagsList(page, req); }))\n                .pipe(Object(operators[\"tap\"])(function () {\n                _this.prefixedTagsData.get(req.prefix).loading = false;\n                _this.change.emit();\n            }));\n        }))\n            .subscribe({\n            error: function (e) { return console.error(e); },\n            complete: function () { return _this.change.emit(); },\n        });\n        return this.change;\n    };\n    AnalyticsSampledTrafficTagsService.prototype.destroy = function () {\n        if (this.prefixedTagsData$ub != null && this.prefixedTagsData$ub.closed == false)\n            this.prefixedTagsData$ub.unsubscribe();\n        this.prefixedTagsData$ub = null;\n        if (this.fetchPrefixedTags$ub != null && this.fetchPrefixedTags$ub.closed == false)\n            this.fetchPrefixedTags$ub.unsubscribe();\n        this.fetchPrefixedTags$ub = null;\n        if (this.fetchPrefixedTags$ != null && this.fetchPrefixedTags$.closed == false)\n            this.fetchPrefixedTags$.unsubscribe();\n        this.fetchPrefixedTags$ = null;\n    };\n    AnalyticsSampledTrafficTagsService.prototype.reset = function () {\n        this.selectedChips = [];\n    };\n    AnalyticsSampledTrafficTagsService.prototype.idsToValues = function (ids) {\n        if (!ids || ids.length === 0 || !this.selectedChips || this.selectedChips.length === 0)\n            return [];\n        return this.selectedChips.filter(function (c) { return ids.indexOf(c.id) > -1; }).map(function (c) { return c.tag; });\n    };\n    AnalyticsSampledTrafficTagsService.prototype.formatChip = function (display, value, id, tag) {\n        var arr = display.split(this.PREFIX_SEPARATOR);\n        if (arr && arr.length > 1) {\n            return { display: \"\" + this.tagPrefix.transform(arr[0]) + this.PREFIX_SEPARATOR + arr[1], value: value, id: id, tag: tag };\n        }\n        return { display: this.tagPrefix.transform(display), value: value, id: id, tag: tag };\n    };\n    AnalyticsSampledTrafficTagsService.prototype.resolveFromQueryParams = function (queryParamMap) {\n        var _this = this;\n        var tags = this.params.parseTagIds(queryParamMap);\n        if (!tags) {\n            return null;\n        }\n        var needFetch = [];\n        var alreadySelected = [];\n        if (!!this.selectedChips && this.selectedChips.length > 0) {\n            var _loop_1 = function (tid) {\n                if (this_1.selectedChips.find(function (c) { return c.value === tid; })) {\n                    alreadySelected.push(tid);\n                }\n                else {\n                    needFetch.push(tid);\n                }\n            };\n            var this_1 = this;\n            for (var _i = 0, tags_1 = tags; _i < tags_1.length; _i++) {\n                var tid = tags_1[_i];\n                _loop_1(tid);\n            }\n        }\n        else {\n            for (var _a = 0, tags_2 = tags; _a < tags_2.length; _a++) {\n                var tid = tags_2[_a];\n                needFetch.push(tid);\n            }\n        }\n        if (needFetch.length < 1)\n            return null;\n        return this.searchTagsByIds(needFetch)\n            .pipe(Object(operators[\"map\"])(function (resp) {\n            var rec = resp.records;\n            var rec_ids = rec.map(function (r) { return r.id; });\n            var tagsToRemove = tags.filter(function (tid) { return rec_ids.indexOf(tid) === -1; });\n            if (tagsToRemove.length > 0) {\n                var queryParams = {};\n                for (var _i = 0, _a = queryParamMap.keys; _i < _a.length; _i++) {\n                    var key = _a[_i];\n                    if (_this.params.isKey(key))\n                        queryParams[key] = queryParamMap.get(key);\n                }\n                _this.params.navigate(sampled_traffic_tags_service___assign({}, queryParams, _this.params.formatTags(rec_ids)));\n                return null;\n            }\n            _this.selectedChips = _this.selectedChips.concat(resp.records.map(function (t) { return _this.tagToChip(t); }));\n            return null;\n        }));\n    };\n    AnalyticsSampledTrafficTagsService.prototype.prefixes = function () { return (this.prefixedTagsData ? this.prefixedTagsData.keys() : []); };\n    AnalyticsSampledTrafficTagsService.prototype.prefixedTagData = function (prefix) { return this.prefixedTagsData ? this.prefixedTagsData.get(prefix) : null; };\n    AnalyticsSampledTrafficTagsService.prototype.fetchPrefixedTags = function (prefix, pages, search) { this.fetchPrefixedTags$.next({ prefix: prefix, pages: pages, search: search }); };\n    AnalyticsSampledTrafficTagsService.prototype.parsePrefixedTagsData = function (recList) {\n        var prefixes = new Map();\n        var model;\n        for (var _i = 0, recList_1 = recList; _i < recList_1.length; _i++) {\n            var rec = recList_1[_i];\n            var prefix = rec.prefix, total_records = rec.total_records, records = rec.records;\n            model = this.initVirtualDropdownModel(prefix);\n            var fullprefix = \"\" + prefix + this.PREFIX_SEPARATOR;\n            if (total_records > records.length) {\n                for (var index = 0; index < total_records; index++) {\n                    model.push(this.emptyVirtualDropdownItem(fullprefix, index));\n                }\n            }\n            else {\n                for (var index = 0; index < total_records; index++) {\n                    model.push(this.virtualDropdownItem(fullprefix, records[index].id, records[index].id, records[index].tag));\n                }\n            }\n            var $ = new Rx[\"BehaviorSubject\"](model);\n            var selected = model[0];\n            prefixes.set(prefix, { prefix: prefix, total: total_records, $: $, model: model, selected: selected, search: { text: \"\", model: null }, loading: false });\n        }\n        return prefixes;\n    };\n    AnalyticsSampledTrafficTagsService.prototype.fetchPrefixedTagsList = function (page, req) {\n        var _this = this;\n        var prefix = req.prefix;\n        var fullprefix = \"\" + prefix + this.PREFIX_SEPARATOR;\n        var tagData = this.prefixedTagsData.get(prefix);\n        var searchtext = req.search;\n        var tagModel = searchtext.length > 0 ? tagData.search.model : tagData.model;\n        var startIdx = Math.max(0, Math.min(tagData.total, page * this.PAGE_SIZE));\n        return this.markVirtualDropdownModel(tagData, startIdx, true)\n            .pipe(Object(operators[\"switchMap\"])(function () { return _this.tagService.list(_this.user.accountId, { text: fullprefix + \"*\" + searchtext }, page + 1, _this.PAGE_SIZE); }), Object(operators[\"catchError\"])(function (_e) { return _this.markVirtualDropdownModel(tagData, startIdx, false); }), Object(operators[\"map\"])(function (recs) {\n            if (!!recs && recs.records.length > 0) {\n                var _a = _this.updateVirtualDropdownModel(recs, tagModel, startIdx, fullprefix), emit = _a.emit, model = _a.model;\n                if (emit) {\n                    if (searchtext.length > 0) {\n                        tagData.search.text = searchtext;\n                        tagData.search.model = model;\n                    }\n                    else {\n                        tagData.search.text = \"\";\n                        tagData.search.model = null;\n                        tagData.model = model;\n                    }\n                    tagData.$.next(model);\n                }\n            }\n            return recs;\n        }));\n    };\n    AnalyticsSampledTrafficTagsService.prototype.updateVirtualDropdownModel = function (data, model, startIdx, fullprefix) {\n        var prefix = data.prefix, total_records = data.total_records, records = data.records;\n        var emit = false;\n        if (model == null || data.page === 1) {\n            model = this.initVirtualDropdownModel(prefix);\n            for (var index = 0; index < total_records; index++) {\n                if (index in records) {\n                    model.push(this.virtualDropdownItem(fullprefix, records[index].id, records[index].id, records[index].tag));\n                }\n                else {\n                    model.push(this.emptyVirtualDropdownItem(fullprefix, index));\n                }\n            }\n            emit = true;\n        }\n        var modelIndex;\n        var newItem;\n        var record;\n        for (var recordIndex = 0; recordIndex < records.length; recordIndex++) {\n            modelIndex = recordIndex + startIdx + 1;\n            if (!!model && modelIndex in model) {\n                if (!!model[modelIndex]\n                    && 'fetch' in model[modelIndex]\n                    && !!model[modelIndex].fetch\n                    && !!model[modelIndex].fetch.loading) {\n                    model[modelIndex].fetch.loading = false;\n                    model[modelIndex].fetch = null;\n                    delete model[modelIndex].fetch;\n                    record = data.records[recordIndex];\n                    newItem = this.virtualDropdownItem(fullprefix, record.id, record.id, record.tag);\n                    model[modelIndex].uid = newItem.uid;\n                    model[modelIndex].label = newItem.label;\n                    model[modelIndex].value = newItem.value;\n                    newItem = null;\n                    record = null;\n                    emit = true;\n                }\n            }\n        }\n        return { emit: emit, model: model };\n    };\n    AnalyticsSampledTrafficTagsService.prototype.markVirtualDropdownModel = function (tagData, startIdx, loading) {\n        var searchtext = tagData.search.text;\n        var model = searchtext.length > 0 ? tagData.search.model : tagData.model;\n        var stopIdx = Math.min(tagData.total, startIdx + this.PAGE_SIZE);\n        var emit = false;\n        for (var modelIndex = startIdx + 1; modelIndex <= stopIdx; modelIndex++) {\n            if (!!model[modelIndex] && 'fetch' in model[modelIndex] && !!model[modelIndex].fetch && !model[modelIndex].fetch.loading) {\n                model[modelIndex].fetch.loading = loading;\n                model[modelIndex].label = loading ? this.LOADING_LABEL : this.EMPTY_LABEL;\n                emit = true;\n            }\n        }\n        if (emit) {\n            if (searchtext.length > 0) {\n                tagData.search.model = model;\n            }\n            else {\n                tagData.model = model;\n            }\n            tagData.$.next(model);\n        }\n        return Object(of[\"of\"])(null);\n    };\n    AnalyticsSampledTrafficTagsService.prototype.virtualDropdownItem = function (fullprefix, uid, id, tag, partial) {\n        var hasPrefix = !tag ? false : tag.indexOf(fullprefix) === 0;\n        var val = sampled_traffic_tags_service___assign({ uid: uid, label: tag, value: id }, partial);\n        if (hasPrefix) {\n            if (!!val.label)\n                val.label = val.label.slice(fullprefix.length);\n            val.value = id;\n        }\n        else {\n            val.value = id;\n        }\n        ;\n        return val;\n    };\n    AnalyticsSampledTrafficTagsService.prototype.emptyVirtualDropdownItem = function (fullprefix, index) {\n        return this.virtualDropdownItem(fullprefix, index, NaN, null, {\n            label: this.EMPTY_LABEL,\n            fetch: { loading: false, page: Math.floor(index / this.PAGE_SIZE) }\n        });\n    };\n    AnalyticsSampledTrafficTagsService.prototype.initVirtualDropdownModel = function (label) { return [{ uid: -1, label: this.tagPrefix.transform(label), value: null }]; };\n    AnalyticsSampledTrafficTagsService.prototype.searchTagsByIds = function (ids) { return this.tagService.list(this.user.accountId, { ids: ids }, 1, ids.length); };\n    AnalyticsSampledTrafficTagsService.prototype.tagToChip = function (tag) { return this.formatChip(tag.tag, tag.id, tag.id, tag.tag); };\n    AnalyticsSampledTrafficTagsService.prototype.searchChipsByText = function (text) {\n        var _this = this;\n        this.isSearchingTags = true;\n        this.change.emit();\n        return this.tagService.list(this.user.accountId, { text: text })\n            .pipe(Object(operators[\"map\"])(function (data) { return data.records.map(function (t) { return _this.tagToChip(t); }); }), Object(operators[\"finalize\"])(function () {\n            _this.isSearchingTags = false;\n            _this.change.emit();\n        }));\n    };\n    var _a, _b, _c, _d;\n    AnalyticsSampledTrafficTagsService = sampled_traffic_tags_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        sampled_traffic_tags_service___metadata(\"design:paramtypes\", [typeof (_a = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _a || Object, typeof (_b = typeof tag_service_TagService !== \"undefined\" && tag_service_TagService) === \"function\" && _b || Object, typeof (_c = typeof tag_prefix_pipe_TagPrefixPipe !== \"undefined\" && tag_prefix_pipe_TagPrefixPipe) === \"function\" && _c || Object, typeof (_d = typeof sampled_traffic_params_service_AnalyticsSampledTrafficParamsService !== \"undefined\" && sampled_traffic_params_service_AnalyticsSampledTrafficParamsService) === \"function\" && _d || Object])\n    ], AnalyticsSampledTrafficTagsService);\n    return AnalyticsSampledTrafficTagsService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/component/criteria/sampled-traffic.criteria.component.ts\nvar sampled_traffic_criteria_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar sampled_traffic_criteria_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_criteria_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n;\nvar sampled_traffic_criteria_component_AnalyticsSampledTrafficCriteriaComponent = (function (_super) {\n    sampled_traffic_criteria_component___extends(AnalyticsSampledTrafficCriteriaComponent, _super);\n    function AnalyticsSampledTrafficCriteriaComponent(locale, translation, tag, cdr, geo) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.tag = tag;\n        _this.cdr = cdr;\n        _this.geo = geo;\n        _this.RANGE_PICKER_OPTIONS = { opens: 'right', startDate: null, endDate: null };\n        _this.dateRangeChange = new core_es5[\"EventEmitter\"]();\n        _this.geolocationChange = new core_es5[\"EventEmitter\"]();\n        _this.tagsChange = new core_es5[\"EventEmitter\"]();\n        _this.countriesDropdown$ = new Rx[\"BehaviorSubject\"](_this.initDropdownModel());\n        _this.regionsDropdown$ = new Rx[\"BehaviorSubject\"](_this.initDropdownModel());\n        _this.citiesDropdown$ = new Rx[\"BehaviorSubject\"](_this.initDropdownModel());\n        _this.itemHeight = 32;\n        _this.isLoadingRegion = false;\n        _this.isLoadingCity = false;\n        _this._countryCode = null;\n        _this._regionId = null;\n        return _this;\n    }\n    Object.defineProperty(AnalyticsSampledTrafficCriteriaComponent.prototype, \"dateRange\", {\n        set: function (range) {\n            if (!range)\n                return;\n            this.RANGE_PICKER_OPTIONS.startDate = moment_default.a.unix(range[0]);\n            this.RANGE_PICKER_OPTIONS.endDate = moment_default.a.unix(range[1]);\n            this.cdr.markForCheck();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AnalyticsSampledTrafficCriteriaComponent.prototype, \"countryCode\", {\n        get: function () { return this._countryCode; },\n        set: function (v) { this._countryCode = v; this.fetchRegions(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AnalyticsSampledTrafficCriteriaComponent.prototype, \"regionId\", {\n        get: function () { return this._regionId; },\n        set: function (v) { this._regionId = v; this.cdr.markForCheck(); },\n        enumerable: true,\n        configurable: true\n    });\n    AnalyticsSampledTrafficCriteriaComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.countries$ub = this.geo.countries$()\n            .subscribe({ next: function (countries) { return _this.countriesDropdown$.next(_this.formatGeoDropdown(countries)); }, });\n        this.tag$ub = this.tag.init()\n            .subscribe({ next: function () { return _this.cdr.markForCheck(); } });\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.ngOnDestroy = function () {\n        if (this.tag$ub != null && this.tag$ub.closed == false)\n            this.tag$ub.unsubscribe();\n        this.tag$ub = null;\n        this.tag.destroy();\n        if (this.countries$ub != null && this.countries$ub.closed == false)\n            this.countries$ub.unsubscribe();\n        this.countries$ub = null;\n        if (this.regions$ub != null && this.regions$ub.closed == false)\n            this.regions$ub.unsubscribe();\n        this.regions$ub = null;\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handleDateRangeChanged = function (event) { this.dateRangeChange.emit(event); };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handleSelectCountry = function (item) {\n        this.countryCode = item.value;\n        this.regionId = null;\n        this.regionsDropdown$.next(this.initDropdownModel());\n        this.citiesDropdown$.next(this.initDropdownModel());\n        this.cdr.markForCheck();\n        this.emitGeolocation();\n        this.fetchRegions();\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handleSelectRegion = function (item) {\n        this.regionId = item.value;\n        this.citiesDropdown$.next(this.initDropdownModel());\n        this.cdr.markForCheck();\n        this.emitGeolocation();\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handleResetCountry = function () {\n        this.countryCode = null;\n        this.regionId = null;\n        this.regionsDropdown$.next(this.initDropdownModel());\n        this.citiesDropdown$.next(this.initDropdownModel());\n        this.cdr.markForCheck();\n        this.emitGeolocation();\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handleResetRegion = function () {\n        this.regionId = null;\n        this.citiesDropdown$.next(this.initDropdownModel());\n        this.cdr.markForCheck();\n        this.emitGeolocation();\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handleTagAdd = function (_item) {\n        this.tagsChange.emit(this.tag.selectedTagRecords);\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handleTagRemove = function (_tag) {\n        this.tagsChange.emit(this.tag.selectedTagRecords);\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handlePrefixedTagSelect = function (data, item) {\n        data.selected = !!data.model && 0 in data.model ? data.model[0] : null;\n        if (this.tag.selectedChips.indexOf(item.value) === -1) {\n            var tag = (!!data.prefix ? \"\" + data.prefix + this.tag.PREFIX_SEPARATOR : '') + item.label;\n            this.tag.selectedChips.push(this.tag.formatChip(tag, item.value, item.value, tag));\n            this.tagsChange.emit(this.tag.selectedTagRecords);\n        }\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handlePrefixedTagScrollEnd = function (data, event) {\n        var start = event.start, end = event.end;\n        var model = !!data.search.model ? data.search.model : data.model;\n        var fetchPages = new Set();\n        var m;\n        for (var i = start; i <= end; i++) {\n            m = model[i];\n            if (!!m.fetch && m.fetch.loading === false) {\n                fetchPages.add(m.fetch.page);\n            }\n        }\n        if (fetchPages.size > 0) {\n            var pages_1 = [];\n            fetchPages.forEach(function (p) { return pages_1.push(p); });\n            fetchPages.clear();\n            this.tag.fetchPrefixedTags(data.prefix, pages_1, data.search.text);\n        }\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.handlePrefixedTagSearch = function (data, text) { this.tag.fetchPrefixedTags(data.prefix, [0], text); };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.emitGeolocation = function () { this.geolocationChange.emit({ countryCode: this.countryCode, regionId: this.regionId }); };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.fetchRegions = function () {\n        var _this = this;\n        if (!this.countryCode) {\n            return;\n        }\n        this.isLoadingRegion = true;\n        this.cdr.markForCheck();\n        if (this.regions$ub != null && !this.regions$ub.closed)\n            this.regions$ub.unsubscribe();\n        this.regions$ub = this.geo.regions$(this.countryCode)\n            .subscribe(function (data) {\n            _this.regionsDropdown$.next(_this.formatGeoDropdown(data));\n            _this.isLoadingRegion = false;\n            _this.cdr.markForCheck();\n        });\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.formatGeoDropdown = function (_data) {\n        var result = this.initDropdownModel();\n        if (_data.length == 0) {\n            return result;\n        }\n        for (var _i = 0; _i < _data.length; _i++) {\n            if ('code' in _data[_i] && !!_data[_i].code) {\n                result.push({ uid: _i, value: _data[_i].code, label: _data[_i].name });\n            }\n            else if ('id' in _data[_i] && !!_data[_i].id) {\n                result.push({ uid: _i, value: _data[_i].id, label: _data[_i].name });\n            }\n        }\n        return result;\n    };\n    AnalyticsSampledTrafficCriteriaComponent.prototype.initDropdownModel = function () { return [{ uid: -1, label: 'All', value: null }]; };\n    var _a, _b, _c, _d, _e, _f, _g;\n    sampled_traffic_criteria_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        sampled_traffic_criteria_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficCriteriaComponent.prototype, \"dateRangeChange\", void 0);\n    sampled_traffic_criteria_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        sampled_traffic_criteria_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficCriteriaComponent.prototype, \"geolocationChange\", void 0);\n    sampled_traffic_criteria_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        sampled_traffic_criteria_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficCriteriaComponent.prototype, \"tagsChange\", void 0);\n    sampled_traffic_criteria_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_criteria_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficCriteriaComponent.prototype, \"itemHeight\", void 0);\n    sampled_traffic_criteria_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_criteria_component___metadata(\"design:type\", typeof (_a = typeof sampled_traffc_model[\"UnixDateRange\"] !== \"undefined\" && sampled_traffc_model[\"UnixDateRange\"]) === \"function\" && _a || Object),\n        sampled_traffic_criteria_component___metadata(\"design:paramtypes\", [typeof (_b = typeof sampled_traffc_model[\"UnixDateRange\"] !== \"undefined\" && sampled_traffc_model[\"UnixDateRange\"]) === \"function\" && _b || Object])\n    ], AnalyticsSampledTrafficCriteriaComponent.prototype, \"dateRange\", null);\n    sampled_traffic_criteria_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_criteria_component___metadata(\"design:type\", String),\n        sampled_traffic_criteria_component___metadata(\"design:paramtypes\", [String])\n    ], AnalyticsSampledTrafficCriteriaComponent.prototype, \"countryCode\", null);\n    sampled_traffic_criteria_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_criteria_component___metadata(\"design:type\", Number),\n        sampled_traffic_criteria_component___metadata(\"design:paramtypes\", [Number])\n    ], AnalyticsSampledTrafficCriteriaComponent.prototype, \"regionId\", null);\n    AnalyticsSampledTrafficCriteriaComponent = sampled_traffic_criteria_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'sampled-traffic-criteria',\n            template: __webpack_require__(1423),\n            styles: [__webpack_require__(1424)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n        }),\n        sampled_traffic_criteria_component___metadata(\"design:paramtypes\", [typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof sampled_traffic_tags_service_AnalyticsSampledTrafficTagsService !== \"undefined\" && sampled_traffic_tags_service_AnalyticsSampledTrafficTagsService) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object, typeof (_g = typeof sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService !== \"undefined\" && sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService) === \"function\" && _g || Object])\n    ], AnalyticsSampledTrafficCriteriaComponent);\n    return AnalyticsSampledTrafficCriteriaComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/model/sampled-traffc.model.util.ts\nfunction isGeoCountryItem(v) { return !!v && 'countryCode' in v; }\nfunction isGeoRegionItem(v) { return !!v && 'countryCode' in v && 'regionId' in v && 'subdivCode' in v; }\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/component/geo/sampled-traffic.geo.component.ts\nvar sampled_traffic_geo_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar sampled_traffic_geo_component___assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar sampled_traffic_geo_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_geo_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar sampled_traffic_geo_component_AnalyticsSampledTrafficGeoComponent = (function (_super) {\n    sampled_traffic_geo_component___extends(AnalyticsSampledTrafficGeoComponent, _super);\n    function AnalyticsSampledTrafficGeoComponent(locale, translation, el, cdr, analytics, geo) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.el = el;\n        _this.cdr = cdr;\n        _this.analytics = analytics;\n        _this.geo = geo;\n        _this.LIST_MIN_WIDTH_PX = 300;\n        _this.CHART_ASPECT_RATIO = 0.625;\n        _this.CHART_TEXT_STYLE = { fontName: 'Space Grotesk', fontSize: 12 };\n        _this.CHART_OPTIONS = {\n            keepAspectRatio: false,\n            colorAxis: { colors: ['#7a6900', '#ffdb00'] },\n            backgroundColor: 'transparent',\n            datalessRegionColor: '#2d353c',\n            defaultColor: 'transparent',\n            legend: { textStyle: sampled_traffic_geo_component___assign({}, _this.CHART_TEXT_STYLE, { color: '#fff' }) },\n            tooltip: { textStyle: sampled_traffic_geo_component___assign({}, _this.CHART_TEXT_STYLE, { color: '#222' }) },\n        };\n        _this.selected = new core_es5[\"EventEmitter\"]();\n        _this.chartError = new core_es5[\"EventEmitter\"]();\n        _this.itemHeight = 32;\n        _this.countryCode = null;\n        _this.regionId = null;\n        _this.selectable = true;\n        _this.showListTopGradient = false;\n        return _this;\n    }\n    AnalyticsSampledTrafficGeoComponent.prototype.ngAfterViewInit = function () { this.updateSizes(); };\n    AnalyticsSampledTrafficGeoComponent.prototype.ngOnChanges = function (changes) {\n        if (this.data !== null && ('data' in changes || 'regionId' in changes)) {\n            this.updateData();\n        }\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.ngOnDestroy = function () {\n        this.chartData = null;\n        this.listItems = null;\n        this.listViewportItems = null;\n        this.showListTopGradient = false;\n        this.resolution = null;\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.updateSizes = function () {\n        if (!!this.el && !!this.el.nativeElement) {\n            var rect = this.el.nativeElement.getBoundingClientRect();\n            var width = rect ? rect.width : NaN;\n            if (!!width && !isNaN(width)) {\n                if (this.updateChartSize(width)) {\n                    this.cdr.markForCheck();\n                    this.redrawChart();\n                }\n            }\n        }\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.countryNameByCode = function (countryCode) { return this.geo.countryNameByCode(countryCode); };\n    AnalyticsSampledTrafficGeoComponent.prototype.regionNameById = function (countryCode, regionId) { return this.geo.regionNameById(countryCode, regionId); };\n    AnalyticsSampledTrafficGeoComponent.prototype.handleGoogleChartReady = function (_event) {\n        this.updateSizes();\n        this.cdr.markForCheck();\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.handleGoogleChartError = function (event) { this.chartError.emit(event); };\n    AnalyticsSampledTrafficGeoComponent.prototype.handleGoogleChartSelect = function (event) {\n        if (event.message !== 'select')\n            return;\n        var value = event.selectedRowValues[0];\n        if (this.countryCode === value || this.regionId === value)\n            return;\n        var item = this.listItems.find(function (v) { return isGeoRegionItem(v) ? v.subdivCode === value : v.countryCode === value; });\n        this.selected.emit(item);\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.compareListItems = function (a, b) { return a.label === b.label; };\n    AnalyticsSampledTrafficGeoComponent.prototype.trackListItem = function (_index, item) { return item.label; };\n    AnalyticsSampledTrafficGeoComponent.prototype.handleListVieportUpdate = function (items) {\n        this.listViewportItems = items;\n        this.cdr.markForCheck();\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.handleListVieportChange = function (event) {\n        var topGrad = event.scrollStartPosition > 0;\n        if (this.showListTopGradient != topGrad) {\n            this.showListTopGradient = topGrad;\n            this.cdr.markForCheck();\n        }\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.handleSelectListItem = function (item) {\n        this.selected.emit(item);\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.handleBackClick = function () {\n        this.selected.emit(null);\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.updateData = function () {\n        var _this = this;\n        this.selectable = this.regionId == null;\n        this.resolution = this.data.resolution;\n        var dataTable = this.data.mapItems;\n        var listItems = this.data.listItems;\n        if (!!this.countryCode && !!this.regionId) {\n            var region_1 = !!this.data.listItems\n                ? this.data.listItems.find(function (i) { return isGeoRegionItem(i) && i.countryCode === _this.countryCode && i.regionId === _this.regionId; })\n                : null;\n            if (!!region_1 && !!this.data.mapItems) {\n                dataTable = this.data.mapItems.filter(function (item, index) { return index === 0 || item[0] === region_1.subdivCode; });\n            }\n            else {\n                dataTable = [dataTable[0]];\n            }\n            if (!!this.data.listItems) {\n                listItems = this.data.listItems.filter(function (i) { return isGeoRegionItem(i) && i.countryCode === _this.countryCode && i.regionId === _this.regionId; });\n            }\n            else {\n                listItems = [];\n            }\n        }\n        this.chartData = {\n            chartType: 'GeoChart',\n            apiKey: this.analytics.getGoogleMapsApiKey(),\n            dataTable: dataTable,\n            options: sampled_traffic_geo_component___assign({}, this.CHART_OPTIONS, { resolution: this.resolution })\n        };\n        if (this.data.region) {\n            this.chartData.options.region = this.data.region;\n        }\n        this.listItems = listItems;\n        this.cdr.markForCheck();\n        this.redrawChart();\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.updateChartSize = function (width) {\n        var chartWidthRatio = Math.floor(width * 0.333) < this.LIST_MIN_WIDTH_PX ? 1 : 0.666;\n        var chartWidth = Math.floor(width * chartWidthRatio);\n        if (this.chartData.options.width != chartWidth) {\n            this.chartData.options.width = chartWidth;\n            this.chartData.options.height = Math.floor(chartWidth * this.CHART_ASPECT_RATIO);\n            return true;\n        }\n        return false;\n    };\n    AnalyticsSampledTrafficGeoComponent.prototype.redrawChart = function () {\n        if (!!this.chart && !!this.chart.wrapper) {\n            this.chart.redraw();\n        }\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        sampled_traffic_geo_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"selected\", void 0);\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        sampled_traffic_geo_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"chartError\", void 0);\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_geo_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"itemHeight\", void 0);\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_geo_component___metadata(\"design:type\", typeof (_a = typeof sampled_traffc_model[\"UnixDateRange\"] !== \"undefined\" && sampled_traffc_model[\"UnixDateRange\"]) === \"function\" && _a || Object)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"dateRange\", void 0);\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_geo_component___metadata(\"design:type\", String)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"countryCode\", void 0);\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_geo_component___metadata(\"design:type\", Number)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"regionId\", void 0);\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_geo_component___metadata(\"design:type\", typeof (_b = typeof sampled_traffc_model[\"GeoData\"] !== \"undefined\" && sampled_traffc_model[\"GeoData\"]) === \"function\" && _b || Object)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"data\", void 0);\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.selectable'),\n        sampled_traffic_geo_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"selectable\", void 0);\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"ViewChild\"])(google_chart_component_GoogleChartComponent),\n        sampled_traffic_geo_component___metadata(\"design:type\", typeof (_c = typeof google_chart_component_GoogleChartComponent !== \"undefined\" && google_chart_component_GoogleChartComponent) === \"function\" && _c || Object)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"chart\", void 0);\n    sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"HostListener\"])(\"window:resize\"),\n        sampled_traffic_geo_component___metadata(\"design:type\", Function),\n        sampled_traffic_geo_component___metadata(\"design:paramtypes\", []),\n        sampled_traffic_geo_component___metadata(\"design:returntype\", void 0)\n    ], AnalyticsSampledTrafficGeoComponent.prototype, \"updateSizes\", null);\n    AnalyticsSampledTrafficGeoComponent = sampled_traffic_geo_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'sampled-traffic-geo',\n            template: __webpack_require__(1425),\n            styles: [__webpack_require__(1426)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            providers: [\n                analytics_service_AnalyticsService,\n            ],\n        }),\n        sampled_traffic_geo_component___metadata(\"design:paramtypes\", [typeof (_d = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _d || Object, typeof (_e = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _f || Object, typeof (_g = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _g || Object, typeof (_h = typeof analytics_service_AnalyticsService !== \"undefined\" && analytics_service_AnalyticsService) === \"function\" && _h || Object, typeof (_j = typeof sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService !== \"undefined\" && sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService) === \"function\" && _j || Object])\n    ], AnalyticsSampledTrafficGeoComponent);\n    return AnalyticsSampledTrafficGeoComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/component/history/sampled-traffic.history.component.ts\nvar sampled_traffic_history_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar sampled_traffic_history_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_history_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar sampled_traffic_history_component_AnalyticsSampledTrafficHistoryComponent = (function (_super) {\n    sampled_traffic_history_component___extends(AnalyticsSampledTrafficHistoryComponent, _super);\n    function AnalyticsSampledTrafficHistoryComponent(locale, translation, cdr, geo, save) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        _this.geo = geo;\n        _this.save = save;\n        _this.GRANULARITY_DATA = ['hour', 'day', 'week', 'month', 'year'];\n        _this.CHART_GRID_COLOR = 'rgba(255, 255, 255, 0.1)';\n        _this.CHART_FONT_COLOR = 'rgba(255, 255, 255, 1)';\n        _this.CHART_DATA_COLORS = [[255, 255, 255], [244, 213, 20]];\n        _this.granularity = new core_es5[\"EventEmitter\"]();\n        _this.itemHeight = 32;\n        _this.countryCode = null;\n        _this.regionId = null;\n        _this.granularityData = [];\n        return _this;\n    }\n    Object.defineProperty(AnalyticsSampledTrafficHistoryComponent.prototype, \"data\", {\n        get: function () { return this._data; },\n        set: function (d) {\n            this._data = d;\n            this.granularityData = [];\n            if (!!this._data) {\n                for (var _i = 0, _a = this.GRANULARITY_DATA; _i < _a.length; _i++) {\n                    var g = _a[_i];\n                    var diff = this._data.endDate.diff(this._data.startDate, g, true);\n                    if (diff >= 1)\n                        this.granularityData.push(g);\n                }\n            }\n            this.cdr.markForCheck();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    AnalyticsSampledTrafficHistoryComponent.prototype.trackHistoryGranularity = function (_index, item) { return _index + item; };\n    AnalyticsSampledTrafficHistoryComponent.prototype.handleGranularityChange = function (granularity) { this.granularity.emit(granularity); };\n    AnalyticsSampledTrafficHistoryComponent.prototype.exportCsv = function () {\n        this.save.exportFileFromJs(this.csvFilename, this.csvData);\n    };\n    Object.defineProperty(AnalyticsSampledTrafficHistoryComponent.prototype, \"csvFilename\", {\n        get: function () {\n            var start = this.data.startDate.format('YYYYMMDD');\n            var end = this.data.endDate.format('YYYYMMDD');\n            var geoName = (!!this.countryCode && !!this.regionId\n                ? this.geo.countryNameByCode(this.countryCode) + \"_\" + this.geo.regionNameById(this.countryCode, this.regionId)\n                : !!this.countryCode\n                    ? this.geo.countryNameByCode(this.countryCode)\n                    : 'global').split(' ').join('_');\n            return \"bradmax_sampled_traffic_\" + start + \"_\" + end + \"_\" + geoName + \"_by_\" + this.data.granularity + \".csv\";\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AnalyticsSampledTrafficHistoryComponent.prototype, \"csvData\", {\n        get: function () {\n            var linesNum = this.data.labels ? this.data.labels.length : 0;\n            var result = '';\n            var line = '';\n            var dateFormat = 'YYYY-MM-DD HH:mm';\n            if ((this.data.granularity == 'day') || (this.data.granularity == 'week')) {\n                dateFormat = 'YYYY-MM-DD';\n            }\n            else if (this.data.granularity == 'month') {\n                dateFormat = 'YYYY-MM';\n            }\n            else if (this.data.granularity == 'year') {\n                dateFormat = 'YYYY';\n            }\n            var columns = new Array();\n            columns.push('Date');\n            for (var _i = 0, _a = this.data.datasets; _i < _a.length; _i++) {\n                var col = _a[_i];\n                columns.push(col.label);\n            }\n            result += (columns.join(',') + \"\\r\\n\");\n            for (var i = 0; i < linesNum; i++) {\n                line = '\"' + moment_default()(this.data.labels[i]).format(dateFormat) + '\"';\n                for (var _b = 0, _c = this.data.datasets; _b < _c.length; _b++) {\n                    var col = _c[_b];\n                    line += (',' + col.data[i]);\n                }\n                line += \"\\r\\n\";\n                result += line;\n            }\n            return result;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    var _a, _b, _c, _d, _e, _f, _g;\n    sampled_traffic_history_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        sampled_traffic_history_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficHistoryComponent.prototype, \"granularity\", void 0);\n    sampled_traffic_history_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_history_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficHistoryComponent.prototype, \"itemHeight\", void 0);\n    sampled_traffic_history_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_history_component___metadata(\"design:type\", String)\n    ], AnalyticsSampledTrafficHistoryComponent.prototype, \"countryCode\", void 0);\n    sampled_traffic_history_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_history_component___metadata(\"design:type\", Number)\n    ], AnalyticsSampledTrafficHistoryComponent.prototype, \"regionId\", void 0);\n    sampled_traffic_history_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_history_component___metadata(\"design:type\", typeof (_a = typeof sampled_traffc_model[\"HistoryChart\"] !== \"undefined\" && sampled_traffc_model[\"HistoryChart\"]) === \"function\" && _a || Object),\n        sampled_traffic_history_component___metadata(\"design:paramtypes\", [typeof (_b = typeof sampled_traffc_model[\"HistoryChart\"] !== \"undefined\" && sampled_traffc_model[\"HistoryChart\"]) === \"function\" && _b || Object])\n    ], AnalyticsSampledTrafficHistoryComponent.prototype, \"data\", null);\n    AnalyticsSampledTrafficHistoryComponent = sampled_traffic_history_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'sampled-traffic-history',\n            template: __webpack_require__(1427),\n            styles: [__webpack_require__(1428)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n        }),\n        sampled_traffic_history_component___metadata(\"design:paramtypes\", [typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object, typeof (_f = typeof sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService !== \"undefined\" && sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService) === \"function\" && _f || Object, typeof (_g = typeof export_service_ExportService !== \"undefined\" && export_service_ExportService) === \"function\" && _g || Object])\n    ], AnalyticsSampledTrafficHistoryComponent);\n    return AnalyticsSampledTrafficHistoryComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/component/summary/sampled-traffic.summary.component.ts\nvar sampled_traffic_summary_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar sampled_traffic_summary_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_summary_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar sampled_traffic_summary_component_AnalyticsSampledTrafficSummaryComponent = (function (_super) {\n    sampled_traffic_summary_component___extends(AnalyticsSampledTrafficSummaryComponent, _super);\n    function AnalyticsSampledTrafficSummaryComponent(locale, translation, el, cdr) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.el = el;\n        _this.cdr = cdr;\n        _this.SUMMARY_ITEMS = [\n            { key: 'views', i10n: 'VIEWS', value: 0, fa: 'play-circle' },\n            { key: 'users', i10n: 'USERS', value: 0, fa: 'users' },\n            { key: 'viewsPerUser', i10n: 'VIEWS_PER_USER', value: 0, fa: 'eye' }\n        ];\n        _this.layoutDirection = 'column';\n        _this.show = false;\n        return _this;\n    }\n    Object.defineProperty(AnalyticsSampledTrafficSummaryComponent.prototype, \"data\", {\n        set: function (d) {\n            for (var _i = 0, _a = this.SUMMARY_ITEMS; _i < _a.length; _i++) {\n                var i = _a[_i];\n                if (i.key in d)\n                    i.value = d[i.key];\n            }\n            this.updateLayoutToSize();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    AnalyticsSampledTrafficSummaryComponent.prototype.ngAfterViewInit = function () {\n        this.updateLayoutToSize();\n    };\n    AnalyticsSampledTrafficSummaryComponent.prototype.updateLayoutToSize = function () {\n        var nativeElement = this.el.nativeElement;\n        if (!nativeElement)\n            return;\n        if (this.show != false) {\n            this.show = false;\n            this.cdr.detectChanges();\n        }\n        var rect = nativeElement.getBoundingClientRect();\n        this.layoutDirection = rect.width > (rect.height * 2) ? 'row' : 'column';\n        this.show = true;\n        this.cdr.markForCheck();\n    };\n    AnalyticsSampledTrafficSummaryComponent.prototype.trackSummaryItem = function (_index, item) { return _index + item.i10n; };\n    var _a, _b, _c, _d, _e, _f;\n    sampled_traffic_summary_component___decorate([\n        Object(core_es5[\"HostBinding\"])('style.flexDirection'),\n        sampled_traffic_summary_component___metadata(\"design:type\", String)\n    ], AnalyticsSampledTrafficSummaryComponent.prototype, \"layoutDirection\", void 0);\n    sampled_traffic_summary_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_summary_component___metadata(\"design:type\", typeof (_a = typeof sampled_traffc_model[\"SummaryData\"] !== \"undefined\" && sampled_traffc_model[\"SummaryData\"]) === \"function\" && _a || Object),\n        sampled_traffic_summary_component___metadata(\"design:paramtypes\", [typeof (_b = typeof sampled_traffc_model[\"SummaryData\"] !== \"undefined\" && sampled_traffc_model[\"SummaryData\"]) === \"function\" && _b || Object])\n    ], AnalyticsSampledTrafficSummaryComponent.prototype, \"data\", null);\n    sampled_traffic_summary_component___decorate([\n        Object(core_es5[\"HostListener\"])(\"window:resize\"),\n        sampled_traffic_summary_component___metadata(\"design:type\", Function),\n        sampled_traffic_summary_component___metadata(\"design:paramtypes\", []),\n        sampled_traffic_summary_component___metadata(\"design:returntype\", void 0)\n    ], AnalyticsSampledTrafficSummaryComponent.prototype, \"updateLayoutToSize\", null);\n    AnalyticsSampledTrafficSummaryComponent = sampled_traffic_summary_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'sampled-traffic-summary',\n            template: __webpack_require__(1429),\n            styles: [__webpack_require__(1430)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n        }),\n        sampled_traffic_summary_component___metadata(\"design:paramtypes\", [typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object])\n    ], AnalyticsSampledTrafficSummaryComponent);\n    return AnalyticsSampledTrafficSummaryComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/component/tags/sampled-traffic.tags.component.ts\nvar sampled_traffic_tags_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar sampled_traffic_tags_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_tags_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar sampled_traffic_tags_component_AnalyticsSampledTrafficTagsComponent = (function (_super) {\n    sampled_traffic_tags_component___extends(AnalyticsSampledTrafficTagsComponent, _super);\n    function AnalyticsSampledTrafficTagsComponent(locale, translation) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.fetchMore = new core_es5[\"EventEmitter\"]();\n        _this.itemHeight = 32;\n        _this.isFetching = false;\n        return _this;\n    }\n    Object.defineProperty(AnalyticsSampledTrafficTagsComponent.prototype, \"listHeight\", {\n        get: function () { return this.itemHeight * (Math.min(10, this.data.records.length) + 0.5); },\n        enumerable: true,\n        configurable: true\n    });\n    AnalyticsSampledTrafficTagsComponent.prototype.handleListVieportEnd = function (event) { this.fetchMore.next(event); };\n    AnalyticsSampledTrafficTagsComponent.prototype.compareListItems = function (a, b) { return a.tag === b.tag; };\n    AnalyticsSampledTrafficTagsComponent.prototype.trackListItem = function (_index, item) { return item.tag; };\n    var _a, _b, _c, _d;\n    sampled_traffic_tags_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        sampled_traffic_tags_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficTagsComponent.prototype, \"fetchMore\", void 0);\n    sampled_traffic_tags_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_tags_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficTagsComponent.prototype, \"itemHeight\", void 0);\n    sampled_traffic_tags_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_tags_component___metadata(\"design:type\", typeof (_a = typeof sampled_traffc_model[\"TopViewedTagsRecord\"] !== \"undefined\" && sampled_traffc_model[\"TopViewedTagsRecord\"]) === \"function\" && _a || Object)\n    ], AnalyticsSampledTrafficTagsComponent.prototype, \"data\", void 0);\n    sampled_traffic_tags_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_tags_component___metadata(\"design:type\", Object)\n    ], AnalyticsSampledTrafficTagsComponent.prototype, \"isFetching\", void 0);\n    sampled_traffic_tags_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        sampled_traffic_tags_component___metadata(\"design:type\", typeof (_b = typeof sampled_traffc_model[\"UnixDateRange\"] !== \"undefined\" && sampled_traffc_model[\"UnixDateRange\"]) === \"function\" && _b || Object)\n    ], AnalyticsSampledTrafficTagsComponent.prototype, \"dateRange\", void 0);\n    AnalyticsSampledTrafficTagsComponent = sampled_traffic_tags_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'sampled-traffic-tags',\n            template: __webpack_require__(1431),\n            styles: [__webpack_require__(1432)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n        }),\n        sampled_traffic_tags_component___metadata(\"design:paramtypes\", [typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object])\n    ], AnalyticsSampledTrafficTagsComponent);\n    return AnalyticsSampledTrafficTagsComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/service/sampled-traffic.api.filters.service.ts\nvar sampled_traffic_api_filters_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_api_filters_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar sampled_traffic_api_filters_service_AnalyticsSampledTrafficApiFiltersService = (function () {\n    function AnalyticsSampledTrafficApiFiltersService(user, params, tag) {\n        this.user = user;\n        this.params = params;\n        this.tag = tag;\n    }\n    AnalyticsSampledTrafficApiFiltersService.prototype.parseQueryParams = function (map) {\n        var filters = new SampledTrafficFilters();\n        var parsedRange = this.params.parseDateRange(map);\n        if (!!parsedRange) {\n            filters.dateRange = parsedRange;\n            this.user.setUnixDateRangeSelection(parsedRange[0], parsedRange[1]);\n        }\n        else {\n            var range = this.user.getUnixDateRangeSelection();\n            filters.dateRange = [range.startDate, range.endDate];\n        }\n        var parsedGranularity = this.params.parseGranularity(map);\n        filters.granularity = !!parsedGranularity ? parsedGranularity : this.params.defaultGranularity;\n        var parsedGeo = this.params.parseGeo(map);\n        if (!!parsedGeo) {\n            filters.geoCountryCode = parsedGeo.countryCode;\n            if (!!parsedGeo.regionId) {\n                filters.geoRegionId = parsedGeo.regionId;\n            }\n            else {\n                filters.geoRegionId = null;\n            }\n        }\n        else {\n            filters.geoCountryCode = null;\n        }\n        filters.tags = [];\n        var parsedTagIds = this.params.parseTagIds(map);\n        if (!!parsedTagIds) {\n            var parsedTags = this.tag.idsToValues(parsedTagIds);\n            filters.tags = parsedTags ? parsedTags.map(function (t) { return t.toString(); }) : [];\n        }\n        return filters;\n    };\n    var _a, _b, _c;\n    AnalyticsSampledTrafficApiFiltersService = sampled_traffic_api_filters_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        sampled_traffic_api_filters_service___metadata(\"design:paramtypes\", [typeof (_a = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _a || Object, typeof (_b = typeof sampled_traffic_params_service_AnalyticsSampledTrafficParamsService !== \"undefined\" && sampled_traffic_params_service_AnalyticsSampledTrafficParamsService) === \"function\" && _b || Object, typeof (_c = typeof sampled_traffic_tags_service_AnalyticsSampledTrafficTagsService !== \"undefined\" && sampled_traffic_tags_service_AnalyticsSampledTrafficTagsService) === \"function\" && _c || Object])\n    ], AnalyticsSampledTrafficApiFiltersService);\n    return AnalyticsSampledTrafficApiFiltersService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/component/view/sampled-traffic.view.component.ts\nvar sampled_traffic_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar sampled_traffic_view_component___assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar sampled_traffic_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\nvar sampled_traffic_view_component_AnalyticsSampledTrafficViewComponent = (function (_super) {\n    sampled_traffic_view_component___extends(AnalyticsSampledTrafficViewComponent, _super);\n    function AnalyticsSampledTrafficViewComponent(locale, translation, cdr, route, api, user, params, filter) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        _this.route = route;\n        _this.api = api;\n        _this.user = user;\n        _this.params = params;\n        _this.filter = filter;\n        _this.LIST_ITEM_HEIGHT_PX = 32;\n        _this.MAX_TOP_TAGS = 20;\n        _this.isLoadingCriteria = true;\n        _this.isLoadingSummary = true;\n        _this.isLoadingTags = true;\n        _this.isLoadingHistory = true;\n        _this.isLoadingGeo = true;\n        _this.isFetchingTags = false;\n        return _this;\n    }\n    Object.defineProperty(AnalyticsSampledTrafficViewComponent.prototype, \"isLoading\", {\n        get: function () { return this.isLoadingCriteria || this.isLoadingSummary || this.isLoadingTags || this.isLoadingHistory || this.isLoadingGeo; },\n        enumerable: true,\n        configurable: true\n    });\n    ;\n    AnalyticsSampledTrafficViewComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.data$ub = this.route.queryParamMap\n            .pipe(Object(operators[\"map\"])(function (paramMap) { return _this.filter.parseQueryParams(paramMap); }), Object(operators[\"filter\"])(function (f) { return !!f; }), Object(operators[\"debounceTime\"])(100), Object(operators[\"switchMap\"])(function (filters) {\n            var diff = filters.diff(_this.filters);\n            var reloadDateCountryTags = diff.dateRange || diff.geoCountryCode || diff.tags;\n            _this.isLoadingCriteria = reloadDateCountryTags;\n            _this.isLoadingSummary = reloadDateCountryTags || diff.granularity || diff.geoRegionId;\n            _this.isLoadingTags = reloadDateCountryTags;\n            _this.isLoadingHistory = reloadDateCountryTags || diff.granularity || diff.geoRegionId;\n            _this.isLoadingGeo = reloadDateCountryTags;\n            _this.cdr.markForCheck();\n            return Object(forkJoin[\"forkJoin\"])(Object(of[\"of\"])(filters), _this.isLoadingHistory ? _this.api.usersAndViewsHistory(filters) : Object(of[\"of\"])(_this.historyChart), _this.isLoadingSummary ? _this.api.usersAndViewsSummary(filters) : Object(of[\"of\"])(_this.summaryData), _this.isLoadingGeo ? _this.api.geoReport(filters) : Object(of[\"of\"])(_this.geoData), _this.isLoadingTags ? _this.api.topViewedTags(filters, 1, _this.MAX_TOP_TAGS) : Object(of[\"of\"])(_this.tagsData))\n                .pipe(Object(operators[\"map\"])(function (responses) { return ({ filters: responses[0], historyChart: responses[1], summaryData: responses[2], geoData: responses[3], tagsData: responses[4] }); }));\n        }))\n            .subscribe({\n            next: function (_a) {\n                var filters = _a.filters, historyChart = _a.historyChart, summaryData = _a.summaryData, geoData = _a.geoData, tagsData = _a.tagsData;\n                _this.filters = filters;\n                _this.summaryData = summaryData;\n                _this.historyChart = historyChart;\n                _this.geoData = geoData;\n                tagsData.records = _this.parseTagRecords(tagsData.records, _this.summaryData.views);\n                _this.tagsData = tagsData;\n                _this.isLoadingCriteria = false;\n                _this.isLoadingSummary = false;\n                _this.isLoadingTags = false;\n                _this.isLoadingHistory = false;\n                _this.isLoadingGeo = false;\n                _this.cdr.markForCheck();\n            }\n        });\n    };\n    AnalyticsSampledTrafficViewComponent.prototype.ngOnDestroy = function () {\n        if (this.data$ub != null && this.data$ub.closed == false)\n            this.data$ub.unsubscribe();\n        this.data$ub = null;\n        if (this.moreTags$ub != null && this.moreTags$ub.closed == false)\n            this.moreTags$ub.unsubscribe();\n        this.moreTags$ub = null;\n        this.filters = null;\n        this.summaryData = null;\n        this.historyChart = null;\n        this.geoData = null;\n        this.tagsData = null;\n        this.isLoadingCriteria = false;\n        this.isLoadingSummary = false;\n        this.isLoadingTags = false;\n        this.isLoadingHistory = false;\n        this.isLoadingGeo = false;\n        this.isFetchingTags = false;\n    };\n    AnalyticsSampledTrafficViewComponent.prototype.handleDateRangeChange = function (event) {\n        this.user.setDateRangeSelection(event[0], event[1]);\n        this.params.navigate(this.params.formatUserDateRange());\n    };\n    AnalyticsSampledTrafficViewComponent.prototype.handleGeolocationChange = function (e) {\n        this.params.navigate(this.params.formatGeolocation(e.countryCode, e.regionId));\n    };\n    AnalyticsSampledTrafficViewComponent.prototype.handleGranularityChange = function (granularity) {\n        this.isLoadingHistory = true;\n        this.cdr.markForCheck();\n        this.params.navigate(this.params.formatGranularity(granularity));\n    };\n    AnalyticsSampledTrafficViewComponent.prototype.handleTagsChange = function (tags) {\n        this.params.navigate(this.params.formatTags(tags.map(function (t) { return t.id; })));\n    };\n    AnalyticsSampledTrafficViewComponent.prototype.handleGeoSelect = function (item) {\n        if (isGeoRegionItem(item)) {\n            this.params.navigate(this.params.formatGeolocation(item.countryCode, item.regionId));\n        }\n        else if (isGeoCountryItem(item)) {\n            this.params.navigate(this.params.formatGeolocation(item.countryCode, null));\n        }\n        else {\n            if (!!this.filters.geoCountryCode && !!this.filters.geoRegionId)\n                this.params.navigate(this.params.formatGeolocation(this.filters.geoCountryCode, null));\n            else\n                this.params.navigate(this.params.formatGeolocation(null, null));\n        }\n    };\n    AnalyticsSampledTrafficViewComponent.prototype.handleGeoChartError = function (error) {\n        console.error(error);\n    };\n    AnalyticsSampledTrafficViewComponent.prototype.handleFetchTags = function (event) {\n        var _this = this;\n        if (this.isFetchingTags\n            || event.endIndex === -1\n            || event.endIndex !== this.tagsData.records.length - 1\n            || event.endIndex >= this.tagsData.total_records)\n            return;\n        var fromIndex = this.tagsData.records.length;\n        var fromPage = Math.floor(fromIndex / this.MAX_TOP_TAGS) + 1;\n        this.isFetchingTags = true;\n        this.cdr.markForCheck();\n        if (this.moreTags$ub != null && this.moreTags$ub.closed == false)\n            this.moreTags$ub.unsubscribe();\n        this.moreTags$ub = this.api.topViewedTags(this.filters, fromPage, this.MAX_TOP_TAGS)\n            .subscribe({\n            next: function (resp) {\n                _this.tagsData.records = _this.tagsData.records.concat(_this.parseTagRecords(resp.records, _this.summaryData.views));\n                _this.isFetchingTags = false;\n                _this.cdr.markForCheck();\n            }\n        });\n    };\n    AnalyticsSampledTrafficViewComponent.prototype.parseTagRecords = function (records, summaryViews) { return records.map(function (r) { return (sampled_traffic_view_component___assign({}, r, { viewsShare: (r.views / summaryViews) * 100 })); }); };\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    sampled_traffic_view_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.is-loading'),\n        sampled_traffic_view_component___metadata(\"design:type\", Object),\n        sampled_traffic_view_component___metadata(\"design:paramtypes\", [])\n    ], AnalyticsSampledTrafficViewComponent.prototype, \"isLoading\", null);\n    AnalyticsSampledTrafficViewComponent = sampled_traffic_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'sampled-traffic-view',\n            template: __webpack_require__(1433),\n            styles: [__webpack_require__(1434)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            providers: [\n                google_geo_regions_fix_service_GoogleGeoRegionsFixService,\n                sampled_traffic_api_service_SampledTrafficApiService,\n                sampled_traffic_api_filters_service_AnalyticsSampledTrafficApiFiltersService,\n            ],\n        }),\n        sampled_traffic_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _c || Object, typeof (_d = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _d || Object, typeof (_e = typeof sampled_traffic_api_service_SampledTrafficApiService !== \"undefined\" && sampled_traffic_api_service_SampledTrafficApiService) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object, typeof (_g = typeof sampled_traffic_params_service_AnalyticsSampledTrafficParamsService !== \"undefined\" && sampled_traffic_params_service_AnalyticsSampledTrafficParamsService) === \"function\" && _g || Object, typeof (_h = typeof sampled_traffic_api_filters_service_AnalyticsSampledTrafficApiFiltersService !== \"undefined\" && sampled_traffic_api_filters_service_AnalyticsSampledTrafficApiFiltersService) === \"function\" && _h || Object])\n    ], AnalyticsSampledTrafficViewComponent);\n    return AnalyticsSampledTrafficViewComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/service/sampled-traffic.default.params.guard.ts\nvar sampled_traffic_default_params_guard___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_default_params_guard___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar sampled_traffic_default_params_guard_AnalyticsSampledTrafficDefaultParamsGuard = (function () {\n    function AnalyticsSampledTrafficDefaultParamsGuard(params) {\n        this.params = params;\n    }\n    AnalyticsSampledTrafficDefaultParamsGuard.prototype.canActivate = function (route, _state) {\n        return this.params.redirectIfNeeded(route.queryParamMap);\n    };\n    var _a;\n    AnalyticsSampledTrafficDefaultParamsGuard = sampled_traffic_default_params_guard___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        sampled_traffic_default_params_guard___metadata(\"design:paramtypes\", [typeof (_a = typeof sampled_traffic_params_service_AnalyticsSampledTrafficParamsService !== \"undefined\" && sampled_traffic_params_service_AnalyticsSampledTrafficParamsService) === \"function\" && _a || Object])\n    ], AnalyticsSampledTrafficDefaultParamsGuard);\n    return AnalyticsSampledTrafficDefaultParamsGuard;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/service/sampled-traffic.resolve.query.region.service.ts\nvar sampled_traffic_resolve_query_region_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_resolve_query_region_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar sampled_traffic_resolve_query_region_service_AnalyticsSampledTrafficResolveQueryRegionService = (function () {\n    function AnalyticsSampledTrafficResolveQueryRegionService(params, geo) {\n        this.params = params;\n        this.geo = geo;\n    }\n    AnalyticsSampledTrafficResolveQueryRegionService.prototype.resolve = function (route, _state) {\n        var geo = this.params.parseGeo(route.queryParamMap);\n        return !!geo && !!geo.countryCode\n            ? this.geo.regions$(geo.countryCode)\n            : null;\n    };\n    var _a, _b;\n    AnalyticsSampledTrafficResolveQueryRegionService = sampled_traffic_resolve_query_region_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        sampled_traffic_resolve_query_region_service___metadata(\"design:paramtypes\", [typeof (_a = typeof sampled_traffic_params_service_AnalyticsSampledTrafficParamsService !== \"undefined\" && sampled_traffic_params_service_AnalyticsSampledTrafficParamsService) === \"function\" && _a || Object, typeof (_b = typeof sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService !== \"undefined\" && sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService) === \"function\" && _b || Object])\n    ], AnalyticsSampledTrafficResolveQueryRegionService);\n    return AnalyticsSampledTrafficResolveQueryRegionService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/service/sampled-traffic.resolve.query.tags.service.ts\nvar sampled_traffic_resolve_query_tags_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sampled_traffic_resolve_query_tags_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar sampled_traffic_resolve_query_tags_service_AnalyticsSampledTrafficResolveQueryTagsService = (function () {\n    function AnalyticsSampledTrafficResolveQueryTagsService(tag) {\n        this.tag = tag;\n    }\n    AnalyticsSampledTrafficResolveQueryTagsService.prototype.resolve = function (route, _state) {\n        return this.tag.resolveFromQueryParams(route.queryParamMap);\n    };\n    var _a;\n    AnalyticsSampledTrafficResolveQueryTagsService = sampled_traffic_resolve_query_tags_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        sampled_traffic_resolve_query_tags_service___metadata(\"design:paramtypes\", [typeof (_a = typeof sampled_traffic_tags_service_AnalyticsSampledTrafficTagsService !== \"undefined\" && sampled_traffic_tags_service_AnalyticsSampledTrafficTagsService) === \"function\" && _a || Object])\n    ], AnalyticsSampledTrafficResolveQueryTagsService);\n    return AnalyticsSampledTrafficResolveQueryTagsService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/sampled-traffic/sampled-traffic.module.ts\nvar sampled_traffic_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), 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\nvar analyticsSampledTrafficRoute = ['admin', 'analytics', 'sampled-traffic'];\nvar sampled_traffic_module_routes = [\n    {\n        path: '',\n        component: sampled_traffic_view_component_AnalyticsSampledTrafficViewComponent,\n        canActivate: [sampled_traffic_default_params_guard_AnalyticsSampledTrafficDefaultParamsGuard],\n        resolve: {\n            _region: sampled_traffic_resolve_query_region_service_AnalyticsSampledTrafficResolveQueryRegionService,\n            _tags: sampled_traffic_resolve_query_tags_service_AnalyticsSampledTrafficResolveQueryTagsService,\n        },\n        runGuardsAndResolvers: 'paramsOrQueryParamsChange',\n    },\n];\nvar sampled_traffic_module_AnalyticsSampledTrafficModule = (function () {\n    function AnalyticsSampledTrafficModule() {\n    }\n    AnalyticsSampledTrafficModule = sampled_traffic_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                shared_module_SharedModule,\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(sampled_traffic_module_routes),\n                chart_module_ChartModule,\n                TagInputModule,\n                google_charts_module_Ng2GoogleChartsModule,\n                camelCaseToSpace_module_CamelCaseToSpaceModule,\n                capitalize_first_module_CapitalizeFirstModule,\n                virtual_list_module_VirtualListModule,\n                virtual_scroller[\"VirtualScrollerModule\"],\n                virtual_dropdown_module_VirtualDropdownModule,\n            ],\n            declarations: [\n                tag_prefix_pipe_TagPrefixPipe,\n                sampled_traffic_view_component_AnalyticsSampledTrafficViewComponent,\n                sampled_traffic_criteria_component_AnalyticsSampledTrafficCriteriaComponent,\n                sampled_traffic_summary_component_AnalyticsSampledTrafficSummaryComponent,\n                sampled_traffic_tags_component_AnalyticsSampledTrafficTagsComponent,\n                sampled_traffic_history_component_AnalyticsSampledTrafficHistoryComponent,\n                sampled_traffic_geo_component_AnalyticsSampledTrafficGeoComponent,\n            ],\n            providers: [\n                common_es5[\"LowerCasePipe\"],\n                capitalize_first_pipe_CapitalizeFirstPipe,\n                camelCaseToSpace_pipe_CamelCaseToSpacePipe,\n                tag_prefix_pipe_TagPrefixPipe,\n                pages_service_PagesService,\n                tag_service_TagService,\n                sampled_traffic_tags_service_AnalyticsSampledTrafficTagsService,\n                sampled_traffic_geo_service_AnalyticsSampledTrafficGeoService,\n                sampled_traffic_params_service_AnalyticsSampledTrafficParamsService,\n                sampled_traffic_default_params_guard_AnalyticsSampledTrafficDefaultParamsGuard,\n                sampled_traffic_resolve_query_region_service_AnalyticsSampledTrafficResolveQueryRegionService,\n                sampled_traffic_resolve_query_tags_service_AnalyticsSampledTrafficResolveQueryTagsService,\n            ]\n        })\n    ], AnalyticsSampledTrafficModule);\n    return AnalyticsSampledTrafficModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/analytics/analytics.module.ts\nvar analytics_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar AnalyticsRoutes = [\n    { path: 'audience', loadChildren: function () { return audience_module_AnalyticsAudienceModule; } },\n    { path: 'albums', loadChildren: function () { return albums_module_AnalyticsAlbumsModule; } },\n    { path: 'content', loadChildren: function () { return content_module_AnalyticsContentModule; } },\n    { path: 'dashboard', loadChildren: function () { return dashboard_module_AnalyticsDashboardModule; } },\n    { path: 'top-content', loadChildren: function () { return top_content_module_AnalyticsTopContentModule; } },\n    { path: 'geo', loadChildren: function () { return geo_module_AnalyticsGeoModule; } },\n    { path: 'technology', loadChildren: function () { return technology_module_AnalyticsTechnologyModule; } },\n    { path: 'realtime', loadChildren: function () { return realtime_module_AnalyticsRealtimeModule; } },\n    { path: 'qos', loadChildren: function () { return QOS_module_AnalyticsQOSModule; } },\n    { path: 'playback-experience', loadChildren: function () { return playback_experience_module_AnalyticsPlaybackExperienceModule; } },\n    { path: 'errors', loadChildren: function () { return errors_module_AnalyticsErrorsModule; } },\n    { path: 'real-time-marketing', loadChildren: function () { return real_time_marketing_module_AnalyticsRealTimeMarketingModule; } },\n    { path: 'content-insights', loadChildren: function () { return content_insights_module_AnalyticsContentInsightsModule; } },\n    { path: 'flexmodel', loadChildren: function () { return flexmodel_module_AnalyticsFlexmodelModule; } },\n    { path: 'info', loadChildren: function () { return info_module_AnalyticsInfoModule; } },\n    { path: 'st-report', loadChildren: function () { return st_module_AnalyticsSTModule; } },\n    { path: 'heartbeat', loadChildren: function () { return heartbeat_module_AnalyticsHeartbeatModule; } },\n    { path: 'sampled-traffic', loadChildren: function () { return sampled_traffic_module_AnalyticsSampledTrafficModule; } },\n    { path: '', redirectTo: 'dashboard', pathMatch: 'full' },\n    { path: '**', redirectTo: 'dashboard' }\n];\nvar analytics_module_AnalyticsModule = (function () {\n    function AnalyticsModule() {\n    }\n    AnalyticsModule = analytics_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                router_es5[\"h\" /* RouterModule */].forChild(AnalyticsRoutes),\n            ],\n        })\n    ], AnalyticsModule);\n    return AnalyticsModule;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/header/header.module.ts\nvar header_module = __webpack_require__(346);\n\n// EXTERNAL MODULE: ./src/module/modal/modal.component.ts\nvar modal_component = __webpack_require__(349);\n\n// EXTERNAL MODULE: ./src/module/modal/alert.modal.component.ts\nvar alert_modal_component = __webpack_require__(179);\n\n// CONCATENATED MODULE: ./src/module/modal/close.modal.button.component.ts\nvar close_modal_button_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar close_modal_button_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar close_modal_button_component_STYLES = [\n    ':host{padding: 10px;float: right;cursor: pointer;opacity: 0.75;}',\n    ':host:hover {opacity: 1;}'\n];\nvar close_modal_button_component_ModalCloseButtonComponent = (function () {\n    function ModalCloseButtonComponent(service) {\n        this.service = service;\n    }\n    var _a;\n    ModalCloseButtonComponent = close_modal_button_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'close-modal-button',\n            host: { 'class': 'fa fa-times', '(click)': 'service.close()' },\n            template: '',\n            styles: close_modal_button_component_STYLES,\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        close_modal_button_component___metadata(\"design:paramtypes\", [typeof (_a = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _a || Object])\n    ], ModalCloseButtonComponent);\n    return ModalCloseButtonComponent;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/modal/prompt.modal.component.ts\nvar prompt_modal_component = __webpack_require__(183);\n\n// EXTERNAL MODULE: ./src/module/modal/input.modal.component.ts\nvar input_modal_component = __webpack_require__(180);\n\n// EXTERNAL MODULE: ./src/module/modal/password-change.modal.component.ts\nvar password_change_modal_component = __webpack_require__(182);\n\n// EXTERNAL MODULE: ./src/module/modal/gdpr.info.modal.component.ts\nvar gdpr_info_modal_component = __webpack_require__(184);\n\n// EXTERNAL MODULE: ./src/module/modal/terms.modal.component.ts\nvar terms_modal_component = __webpack_require__(345);\n\n// CONCATENATED MODULE: ./src/service/password-change.service.ts\nvar password_change_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar password_change_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar password_change_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar password_change_service_PasswordChangeService = (function (_super) {\n    password_change_service___extends(PasswordChangeService, _super);\n    function PasswordChangeService(auth, http, exception, router, url) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.url = url;\n        return _this;\n    }\n    PasswordChangeService.prototype.passwordChange = function (oldPassword, newPassword) {\n        var data = { old_password: oldPassword, new_password: newPassword };\n        return this.create('user/password', data);\n    };\n    var _a, _b, _c, _d, _e;\n    PasswordChangeService = password_change_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        password_change_service___metadata(\"design:paramtypes\", [typeof (_a = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof exception_service[\"a\" /* ExceptionService */] !== \"undefined\" && exception_service[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], PasswordChangeService);\n    return PasswordChangeService;\n}(api_service[\"a\" /* BradmaxApi */]));\n\n\n// CONCATENATED MODULE: ./src/module/password-change/password-change.view.ts\nvar password_change_view___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar password_change_view___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar password_change_view_PasswordChangeView = (function () {\n    function PasswordChangeView(formBuilder, passwordChange, cdr, user, flashMessagesService, translation, route, router, sanitizer) {\n        this.formBuilder = formBuilder;\n        this.passwordChange = passwordChange;\n        this.cdr = cdr;\n        this.user = user;\n        this.flashMessagesService = flashMessagesService;\n        this.translation = translation;\n        this.route = route;\n        this.router = router;\n        this.sanitizer = sanitizer;\n        this.passwordChangeError = false;\n        this.loading = false;\n        this.onSuccess = new core_es5[\"EventEmitter\"]();\n        this.clearRemoteErrors();\n    }\n    PasswordChangeView.prototype.clearRemoteErrors = function () {\n        this.remoteErrorsOldPassword = [];\n        this.remoteErrorsNewPassword = [];\n    };\n    PasswordChangeView.prototype.ngOnInit = function () {\n        this.form = this.formBuilder.group({\n            oldPassword: [\"\", forms_es5[\"Validators\"].required],\n            newPassword: [\"\", forms_es5[\"Validators\"].compose([forms_es5[\"Validators\"].required, forms_es5[\"Validators\"].minLength(8)])],\n            newPasswordRepeat: [\"\", forms_es5[\"Validators\"].compose([forms_es5[\"Validators\"].required, forms_es5[\"Validators\"].minLength(8)])]\n        }, {\n            validator: this.matchingPasswords('newPassword', 'newPasswordRepeat')\n        });\n    };\n    PasswordChangeView.prototype.matchingPasswords = function (passwordKey, passwordConfirmationKey) {\n        return function (group) {\n            var passwordInput = group.controls[passwordKey];\n            var passwordConfirmationInput = group.controls[passwordConfirmationKey];\n            if (passwordInput.value !== passwordConfirmationInput.value) {\n                return passwordConfirmationInput.setErrors({ notEquivalent: true });\n            }\n        };\n    };\n    PasswordChangeView.prototype.onPasswordChangeFormSubmit = function () {\n        var _this = this;\n        this.loading = true;\n        var fields = this.form.value;\n        this.clearRemoteErrors();\n        this.cdr.markForCheck();\n        this.passwordChange.passwordChange(fields.oldPassword, fields.newPassword).subscribe(function (success) {\n            _this.loading = false;\n            _this.cdr.markForCheck();\n            _this.onSuccess.emit();\n            _this.flashMessagesService.show(_this.translation.translate('PASSWORD_CHANGE.MESSAGE.SUCCESS'), { cssClass: 'alert-success', timeout: 3000 });\n        }, function (error) {\n            _this.loading = false;\n            if (error.errors && error.errors.old_password && error.errors.old_password.length) {\n                _this.remoteErrorsOldPassword = error.errors.old_password;\n            }\n            if (error.errors && error.errors.new_password && error.errors.new_password.length) {\n                _this.remoteErrorsNewPassword = error.errors.new_password;\n            }\n            _this.cdr.markForCheck();\n        });\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n    PasswordChangeView = password_change_view___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'password-change-view',\n            template: __webpack_require__(1442),\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            outputs: ['onSuccess'],\n        }),\n        password_change_view___metadata(\"design:paramtypes\", [typeof (_a = typeof forms_es5[\"FormBuilder\"] !== \"undefined\" && forms_es5[\"FormBuilder\"]) === \"function\" && _a || Object, typeof (_b = typeof password_change_service_PasswordChangeService !== \"undefined\" && password_change_service_PasswordChangeService) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _c || Object, typeof (_d = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _d || Object, typeof (_e = typeof angular2_flash_messages[\"FlashMessagesService\"] !== \"undefined\" && angular2_flash_messages[\"FlashMessagesService\"]) === \"function\" && _e || Object, typeof (_f = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _f || Object, typeof (_g = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _g || Object, typeof (_h = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _h || Object, typeof (_j = typeof platform_browser_es5[\"c\" /* DomSanitizer */] !== \"undefined\" && platform_browser_es5[\"c\" /* DomSanitizer */]) === \"function\" && _j || Object])\n    ], PasswordChangeView);\n    return PasswordChangeView;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/password-change/password-change.module.ts\nvar password_change_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar password_change_module_PasswordChangeModule = (function () {\n    function PasswordChangeModule() {\n    }\n    PasswordChangeModule = password_change_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                shared_module_SharedModule,\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */],\n                forms_es5[\"FormsModule\"],\n                forms_es5[\"ReactiveFormsModule\"]\n            ],\n            declarations: [password_change_view_PasswordChangeView],\n            entryComponents: [password_change_view_PasswordChangeView],\n            providers: [password_change_service_PasswordChangeService],\n            exports: [password_change_view_PasswordChangeView]\n        })\n    ], PasswordChangeModule);\n    return PasswordChangeModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/password-change/index.ts\n\n\n\n// CONCATENATED MODULE: ./src/module/modal/modal.module.ts\nvar modal_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar modal_module_ModalModule = (function () {\n    function ModalModule() {\n    }\n    ModalModule = modal_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [forms_es5[\"FormsModule\"], common_es5[\"CommonModule\"], password_change_module_PasswordChangeModule],\n            declarations: [\n                modal_component[\"a\" /* ModalComponent */],\n                close_modal_button_component_ModalCloseButtonComponent,\n                alert_modal_component[\"a\" /* AlertModalComponent */],\n                prompt_modal_component[\"a\" /* PromptModalComponent */],\n                input_modal_component[\"a\" /* InputModalComponent */],\n                password_change_modal_component[\"a\" /* PasswordChangeModalComponent */],\n                gdpr_info_modal_component[\"a\" /* GdprInfoModalComponent */],\n                terms_modal_component[\"a\" /* TermsModalComponent */]\n            ],\n            entryComponents: [\n                modal_component[\"a\" /* ModalComponent */],\n                close_modal_button_component_ModalCloseButtonComponent,\n                alert_modal_component[\"a\" /* AlertModalComponent */],\n                prompt_modal_component[\"a\" /* PromptModalComponent */],\n                input_modal_component[\"a\" /* InputModalComponent */],\n                password_change_modal_component[\"a\" /* PasswordChangeModalComponent */],\n                gdpr_info_modal_component[\"a\" /* GdprInfoModalComponent */],\n                terms_modal_component[\"a\" /* TermsModalComponent */]\n            ],\n            providers: [modal_service[\"a\" /* ModalService */]],\n            exports: [modal_component[\"a\" /* ModalComponent */]]\n        })\n    ], ModalModule);\n    return ModalModule;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/player/model/player.model.ts\nvar player_model = __webpack_require__(72);\n\n// CONCATENATED MODULE: ./src/module/colorpicker/colorpicker.model.ts\nvar ColorpickerHsva = (function () {\n    function ColorpickerHsva(h, s, v, a) {\n        this.h = h;\n        this.s = s;\n        this.v = v;\n        this.a = a;\n    }\n    return ColorpickerHsva;\n}());\n\nvar ColorpickerHsla = (function () {\n    function ColorpickerHsla(h, s, l, a) {\n        this.h = h;\n        this.s = s;\n        this.l = l;\n        this.a = a;\n    }\n    return ColorpickerHsla;\n}());\n\nvar ColorpickerRgba = (function () {\n    function ColorpickerRgba(r, g, b, a) {\n        this.r = r;\n        this.g = g;\n        this.b = b;\n        this.a = a;\n    }\n    return ColorpickerRgba;\n}());\n\nvar ColorpickerSliderPosition = (function () {\n    function ColorpickerSliderPosition(h, s, v, a) {\n        this.h = h;\n        this.s = s;\n        this.v = v;\n        this.a = a;\n    }\n    return ColorpickerSliderPosition;\n}());\n\nvar ColorpickerSliderDimension = (function () {\n    function ColorpickerSliderDimension(h, s, v, a) {\n        this.h = h;\n        this.s = s;\n        this.v = v;\n        this.a = a;\n    }\n    return ColorpickerSliderDimension;\n}());\n\nvar ColorpickerPosition;\n(function (ColorpickerPosition) {\n    ColorpickerPosition[ColorpickerPosition[\"right\"] = 0] = \"right\";\n    ColorpickerPosition[ColorpickerPosition[\"left\"] = 1] = \"left\";\n    ColorpickerPosition[ColorpickerPosition[\"top\"] = 2] = \"top\";\n    ColorpickerPosition[ColorpickerPosition[\"bottom\"] = 3] = \"bottom\";\n    ColorpickerPosition[ColorpickerPosition[\"center\"] = 4] = \"center\";\n})(ColorpickerPosition || (ColorpickerPosition = {}));\nvar ColorpickerFormat;\n(function (ColorpickerFormat) {\n    ColorpickerFormat[ColorpickerFormat[\"hex\"] = 0] = \"hex\";\n    ColorpickerFormat[ColorpickerFormat[\"rgba\"] = 1] = \"rgba\";\n    ColorpickerFormat[ColorpickerFormat[\"hsla\"] = 2] = \"hsla\";\n})(ColorpickerFormat || (ColorpickerFormat = {}));\n\n// CONCATENATED MODULE: ./src/module/colorpicker/service/colorpicker.service.ts\nvar colorpicker_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar colorpicker_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar colorpicker_service_ColorpickerService = (function () {\n    function ColorpickerService() {\n        this.closeSubject = new Rx[\"Subject\"]();\n        this.closeStream$ = this.closeSubject.asObservable();\n    }\n    ColorpickerService.prototype.close = function () {\n        this.closeSubject.next(null);\n    };\n    ColorpickerService.prototype.hsla2hsva = function (hsla) {\n        var h = Math.min(hsla.h, 1), s = Math.min(hsla.s, 1), l = Math.min(hsla.l, 1), a = Math.min(hsla.a, 1);\n        if (l === 0) {\n            return { h: h, s: 0, v: 0, a: a };\n        }\n        else {\n            var v = l + s * (1 - Math.abs(2 * l - 1)) / 2;\n            return { h: h, s: 2 * (v - l) / v, v: v, a: a };\n        }\n    };\n    ColorpickerService.prototype.hsva2hsla = function (hsva) {\n        var h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a;\n        if (v === 0) {\n            return new ColorpickerHsla(h, 0, 0, a);\n        }\n        else if (s === 0 && v === 1) {\n            return new ColorpickerHsla(h, 1, 1, a);\n        }\n        else {\n            var l = v * (2 - s) / 2;\n            return new ColorpickerHsla(h, v * s / (1 - Math.abs(2 * l - 1)), l, a);\n        }\n    };\n    ColorpickerService.prototype.rgbaToHsva = function (rgba) {\n        var r = Math.min(rgba.r, 1), g = Math.min(rgba.g, 1), b = Math.min(rgba.b, 1), a = Math.min(rgba.a, 1);\n        var max = Math.max(r, g, b), min = Math.min(r, g, b);\n        var h = NaN, s, v = max;\n        var d = max - min;\n        s = max === 0 ? 0 : d / max;\n        if (max === min) {\n            h = 0;\n        }\n        else {\n            switch (max) {\n                case r:\n                    h = (g - b) / d + (g < b ? 6 : 0);\n                    break;\n                case g:\n                    h = (b - r) / d + 2;\n                    break;\n                case b:\n                    h = (r - g) / d + 4;\n                    break;\n            }\n            h /= 6;\n        }\n        return new ColorpickerHsva(h, s, v, a);\n    };\n    ColorpickerService.prototype.hsvaToRgba = function (hsva) {\n        var h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a;\n        var r = NaN, g = NaN, b = NaN;\n        var i = Math.floor(h * 6);\n        var f = h * 6 - i;\n        var p = v * (1 - s);\n        var q = v * (1 - f * s);\n        var t = v * (1 - (1 - f) * s);\n        switch (i % 6) {\n            case 0:\n                r = v;\n                g = t;\n                b = p;\n                break;\n            case 1:\n                r = q;\n                g = v;\n                b = p;\n                break;\n            case 2:\n                r = p;\n                g = v;\n                b = t;\n                break;\n            case 3:\n                r = p;\n                g = q;\n                b = v;\n                break;\n            case 4:\n                r = t;\n                g = p;\n                b = v;\n                break;\n            case 5:\n                r = v;\n                g = p;\n                b = q;\n                break;\n        }\n        return new ColorpickerRgba(r, g, b, a);\n    };\n    ColorpickerService.prototype.stringToHsva = function (colorString) {\n        var stringParsers = [\n            {\n                re: /(rgb)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*%?,\\s*(\\d{1,3})\\s*%?(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n                parse: function (execResult) {\n                    return new ColorpickerRgba(parseInt(execResult[2]) / 255, parseInt(execResult[3]) / 255, parseInt(execResult[4]) / 255, isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5]));\n                }\n            },\n            {\n                re: /(hsl)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})%\\s*,\\s*(\\d{1,3})%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n                parse: function (execResult) {\n                    return new ColorpickerHsla(parseInt(execResult[2]) / 360, parseInt(execResult[3]) / 100, parseInt(execResult[4]) / 100, isNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5]));\n                }\n            },\n            {\n                re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/,\n                parse: function (execResult) {\n                    return new ColorpickerRgba(parseInt(execResult[1], 16) / 255, parseInt(execResult[2], 16) / 255, parseInt(execResult[3], 16) / 255, 1);\n                }\n            },\n            {\n                re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/,\n                parse: function (execResult) {\n                    return new ColorpickerRgba(parseInt(execResult[1] + execResult[1], 16) / 255, parseInt(execResult[2] + execResult[2], 16) / 255, parseInt(execResult[3] + execResult[3], 16) / 255, 1);\n                }\n            }\n        ];\n        colorString = colorString.toLowerCase();\n        var hsva = null;\n        for (var key in stringParsers) {\n            if (stringParsers.hasOwnProperty(key)) {\n                var parser = stringParsers[key];\n                var match = parser.re.exec(colorString), color = match && parser.parse(match);\n                if (color) {\n                    if (color instanceof ColorpickerRgba) {\n                        hsva = this.rgbaToHsva(color);\n                    }\n                    else if (color instanceof ColorpickerHsla) {\n                        hsva = this.hsla2hsva(color);\n                    }\n                    return hsva;\n                }\n            }\n        }\n        return hsva;\n    };\n    ColorpickerService.prototype.outputFormat = function (hsva, outputFormat) {\n        if (hsva.a < 1) {\n            switch (outputFormat) {\n                case 'hsla':\n                    var hsla = this.hsva2hsla(hsva);\n                    var hslaText = new ColorpickerHsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100), Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\n                    return 'hsla(' + hslaText.h + ',' + hslaText.s + '%,' + hslaText.l + '%,' + hslaText.a + ')';\n                default:\n                    var rgba = this.denormalizeRGBA(this.hsvaToRgba(hsva));\n                    return 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',' + Math.round(rgba.a * 100) / 100 + ')';\n            }\n        }\n        else {\n            switch (outputFormat) {\n                case 'hsla':\n                    var hsla = this.hsva2hsla(hsva);\n                    var hslaText = new ColorpickerHsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100), Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\n                    return 'hsl(' + hslaText.h + ',' + hslaText.s + '%,' + hslaText.l + '%)';\n                case 'rgba':\n                    var rgba = this.denormalizeRGBA(this.hsvaToRgba(hsva));\n                    return 'rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')';\n                default:\n                    return this.hexText(this.denormalizeRGBA(this.hsvaToRgba(hsva)));\n            }\n        }\n    };\n    ColorpickerService.prototype.hexText = function (rgba, shorten) {\n        if (shorten === void 0) { shorten = false; }\n        var hexText = '#' + ((1 << 24) | (rgba.r << 16) | (rgba.g << 8) | rgba.b).toString(16).substr(1);\n        if (shorten && hexText[1] === hexText[2] && hexText[3] === hexText[4] && hexText[5] === hexText[6])\n            hexText = '#' + hexText[1] + hexText[3] + hexText[5];\n        return hexText.toLowerCase();\n    };\n    ColorpickerService.prototype.denormalizeRGBA = function (rgba) {\n        return new ColorpickerRgba(Math.round(rgba.r * 255), Math.round(rgba.g * 255), Math.round(rgba.b * 255), rgba.a);\n    };\n    ColorpickerService = colorpicker_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        colorpicker_service___metadata(\"design:paramtypes\", [])\n    ], ColorpickerService);\n    return ColorpickerService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/colorpicker/service/colorpicker.data.service.ts\nvar colorpicker_data_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar colorpicker_data_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar colorpicker_data_service_ColorpickerDataService = (function () {\n    function ColorpickerDataService(service) {\n        this.service = service;\n        this.formatValue = ColorpickerFormat;\n        this.initialized = false;\n        this.updateSubject = new Rx[\"Subject\"]();\n        this.updateStream$ = this.updateSubject.asObservable();\n    }\n    ColorpickerDataService.prototype.init = function (color, format) {\n        if (this.initialized != true) {\n            this.color = color;\n            this.colorCache = color + '';\n            this.format = format;\n            var hsva = this.service.stringToHsva(color);\n            if (hsva !== null)\n                this.hsva = hsva;\n            else\n                this.hsva = new ColorpickerHsva(0, 1, 1, 1);\n            this.sliderDimMax = new ColorpickerSliderDimension(150, 230, 130, 150);\n            this.slider = new ColorpickerSliderPosition(0, 0, 0, 0);\n            this.update();\n            this.initialized = true;\n        }\n    };\n    ColorpickerDataService.prototype.setSaturation = function (val) {\n        var hsla = this.service.hsva2hsla(this.hsva);\n        hsla.s = val.v / val.rg;\n        this.hsva = this.service.hsla2hsva(hsla);\n        this.update();\n    };\n    ColorpickerDataService.prototype.setLightness = function (val) {\n        var hsla = this.service.hsva2hsla(this.hsva);\n        hsla.l = val.v / val.rg;\n        this.hsva = this.service.hsla2hsva(hsla);\n        this.update();\n    };\n    ColorpickerDataService.prototype.setHue = function (val) {\n        this.hsva.h = val.v / val.rg;\n        this.update();\n    };\n    ColorpickerDataService.prototype.setAlpha = function (val) {\n        this.hsva.a = val.v / val.rg;\n        this.update();\n    };\n    ColorpickerDataService.prototype.setR = function (val) {\n        var rgba = this.service.hsvaToRgba(this.hsva);\n        rgba.r = val.v / val.rg;\n        this.hsva = this.service.rgbaToHsva(rgba);\n        this.update();\n    };\n    ColorpickerDataService.prototype.setG = function (val) {\n        var rgba = this.service.hsvaToRgba(this.hsva);\n        rgba.g = val.v / val.rg;\n        this.hsva = this.service.rgbaToHsva(rgba);\n        this.update();\n    };\n    ColorpickerDataService.prototype.setB = function (val) {\n        var rgba = this.service.hsvaToRgba(this.hsva);\n        rgba.b = val.v / val.rg;\n        this.hsva = this.service.rgbaToHsva(rgba);\n        this.update();\n    };\n    ColorpickerDataService.prototype.setSaturationAndBrightness = function (val) {\n        this.hsva.s = val.s / val.rgX;\n        this.hsva.v = val.v / val.rgY;\n        this.update();\n    };\n    ColorpickerDataService.prototype.setColorFromString = function (value) {\n        var hsva = this.service.stringToHsva(value);\n        if (hsva !== null)\n            this.hsva = hsva;\n        this.update();\n    };\n    ColorpickerDataService.prototype.resetColor = function () {\n        this.setColorFromString(this.colorCache);\n    };\n    ColorpickerDataService.prototype.update = function () {\n        var hsla = this.service.hsva2hsla(this.hsva);\n        var rgba = this.service.denormalizeRGBA(this.service.hsvaToRgba(this.hsva));\n        var hueRgba = this.service.denormalizeRGBA(this.service.hsvaToRgba(new ColorpickerHsva(this.hsva.h, 1, 1, 1)));\n        this.hslaText = new ColorpickerHsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100), Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\n        this.rgbaText = new ColorpickerRgba(rgba.r, rgba.g, rgba.b, Math.round(rgba.a * 100) / 100);\n        this.hexText = this.service.hexText(rgba);\n        this.alphaSliderColor = 'rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')';\n        this.hueSliderColor = 'rgb(' + hueRgba.r + ',' + hueRgba.g + ',' + hueRgba.b + ')';\n        if (this.format === 0 && this.hsva.a < 1)\n            this.format++;\n        this.color = this.service.outputFormat(this.hsva, this.formatValue[this.format]);\n        this.slider = new ColorpickerSliderPosition((this.hsva.h) * this.sliderDimMax.h - 8, this.hsva.s * this.sliderDimMax.s - 8, (1 - this.hsva.v) * this.sliderDimMax.v - 8, this.hsva.a * this.sliderDimMax.a - 8);\n        this.updateSubject.next({ format: this.format, color: this.color });\n    };\n    var _a;\n    ColorpickerDataService = colorpicker_data_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        colorpicker_data_service___metadata(\"design:paramtypes\", [typeof (_a = typeof colorpicker_service_ColorpickerService !== \"undefined\" && colorpicker_service_ColorpickerService) === \"function\" && _a || Object])\n    ], ColorpickerDataService);\n    return ColorpickerDataService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/colorpicker/component/colorpicker.component.ts\nvar colorpicker_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar colorpicker_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar colorpicker_component_ColorpickerComponent = (function () {\n    function ColorpickerComponent(data) {\n        var _this = this;\n        this.data = data;\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n        this.data.updateStream$.subscribe(function (update) { return _this.valueChange.emit(update.color); });\n    }\n    Object.defineProperty(ColorpickerComponent.prototype, \"value\", {\n        set: function (v) {\n            if (v == null)\n                return;\n            var format = ColorpickerFormat.hex;\n            if (v.startsWith('#'))\n                format = ColorpickerFormat.hex;\n            else if (v.startsWith('hsl'))\n                format = ColorpickerFormat.hsla;\n            else if (v.startsWith('rgb'))\n                format = ColorpickerFormat.rgba;\n            if (this.data.format != format) {\n                this.data.format = format;\n            }\n            if (!this.data.initialized) {\n                this.data.init(v, this.data.format);\n            }\n            else {\n                this.data.setColorFromString(v);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    var _a;\n    ColorpickerComponent = colorpicker_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'color-picker',\n            host: { 'class': 'form-inline' },\n            inputs: ['value'],\n            outputs: ['valueChange'],\n            template: __webpack_require__(1443),\n            styles: [__webpack_require__(1444)],\n            viewProviders: [colorpicker_data_service_ColorpickerDataService],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        colorpicker_component___metadata(\"design:paramtypes\", [typeof (_a = typeof colorpicker_data_service_ColorpickerDataService !== \"undefined\" && colorpicker_data_service_ColorpickerDataService) === \"function\" && _a || Object])\n    ], ColorpickerComponent);\n    return ColorpickerComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/colorpicker/component/dialog/colorpicker.dialog.component.ts\nvar colorpicker_dialog_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar colorpicker_dialog_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar colorpicker_dialog_component_ColorpickerDialogComponent = (function () {\n    function ColorpickerDialogComponent(data, cdr, element) {\n        var _this = this;\n        this.data = data;\n        this.cdr = cdr;\n        this.element = element;\n        this.style = { top: 0, left: 0, width: 232, height: 290, position: 'fixed', arrowTop: 0 };\n        this.positionValue = ColorpickerPosition;\n        this.dialogArrowSize = 10;\n        this.dialogArrowOffset = 15;\n        this.data.updateStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n    }\n    ColorpickerDialogComponent.prototype.ngOnInit = function () {\n        this.openColorPicker();\n    };\n    ColorpickerDialogComponent.prototype.onScroll = function () {\n        this.closeColorPicker();\n    };\n    ColorpickerDialogComponent.prototype.onDocumentMouseDown = function (event) {\n        var trg = ('toElement' in event && !!event.toElement ? event.toElement : event.target);\n        if (!dom_util[\"a\" /* DOMUtil */].isDescendant(this.element.nativeElement, trg)\n            && event.target != this.directiveElementRef.nativeElement) {\n            this.closeColorPicker();\n        }\n    };\n    ColorpickerDialogComponent.prototype.onResize = function () {\n        if (this.style.position === 'fixed')\n            this.setDialogPosition();\n    };\n    ColorpickerDialogComponent.prototype.setDialog = function (instance, config) {\n        this.directiveInstance = instance;\n        this.directiveElementRef = instance.element;\n        this.config = {\n            position: ColorpickerPosition.center,\n            positionOffset: 0,\n            outputFormat: ColorpickerFormat.hex,\n            positionRelativeToArrow: false\n        };\n        if (config != null) {\n            if (config.height != null) {\n                this.style.height = config.height;\n            }\n            if (config.position != null)\n                this.config.position = config.position;\n            if (config.positionOffset != null)\n                this.config.positionOffset = config.positionOffset;\n            if (config.outputFormat != null)\n                this.config.outputFormat = config.outputFormat;\n            if (config.positionRelativeToArrow != null)\n                this.config.positionRelativeToArrow = config.positionRelativeToArrow;\n        }\n        if (!this.config.positionRelativeToArrow)\n            this.dialogArrowOffset = 0;\n    };\n    ColorpickerDialogComponent.prototype.openColorPicker = function () {\n        if (!this.show) {\n            this.show = true;\n            this.setDialogPosition();\n        }\n    };\n    ColorpickerDialogComponent.prototype.closeColorPicker = function () {\n        this.show = false;\n        this.data.service.close();\n    };\n    ColorpickerDialogComponent.prototype.setDialogPosition = function () {\n        var node = this.directiveElementRef.nativeElement, position = 'static';\n        var parentNode = null;\n        while (node !== null && node.tagName !== 'HTML') {\n            position = window.getComputedStyle(node).getPropertyValue('position');\n            if (position !== 'static' && parentNode === null)\n                parentNode = node;\n            if (position === 'fixed')\n                break;\n            node = node.parentNode;\n        }\n        var boxDirective = null;\n        if (position !== 'fixed') {\n            boxDirective = this.createBox(this.directiveElementRef.nativeElement, true);\n            if (parentNode === null)\n                parentNode = node;\n            var boxParent = this.createBox(parentNode, true);\n            this.style.top = boxDirective.top - boxParent.top;\n            this.style.left = boxDirective.left - boxParent.left;\n        }\n        else {\n            boxDirective = this.createBox(this.directiveElementRef.nativeElement, false);\n            this.style.top = boxDirective.top;\n            this.style.left = boxDirective.left;\n            this.style.position = 'fixed';\n        }\n        if (this.config.position == ColorpickerPosition.left && this.config.positionOffset) {\n            this.style.top += boxDirective.height * this.config.positionOffset / 100 - this.dialogArrowOffset;\n            this.style.left -= this.style.width + this.dialogArrowSize;\n        }\n        else if (this.config.position == ColorpickerPosition.top && this.config.positionOffset) {\n            this.style.top -= this.style.height + this.dialogArrowSize;\n            this.style.left += this.config.positionOffset / 100 * boxDirective.width - this.dialogArrowOffset;\n            this.style.arrowTop = this.style.height - 1;\n        }\n        else if (this.config.position == ColorpickerPosition.bottom && this.config.positionOffset) {\n            this.style.top += boxDirective.height + this.dialogArrowSize;\n            this.style.left += this.config.positionOffset / 100 * boxDirective.width - this.dialogArrowOffset;\n            this.style.arrowTop = this.style.height - 1;\n        }\n        else if (this.config.position == ColorpickerPosition.center) {\n            this.style.top = -143;\n            this.style.left = 4;\n        }\n        else if (this.config.positionOffset) {\n            this.style.top += boxDirective.height * this.config.positionOffset / 100 - this.dialogArrowOffset;\n            this.style.left += boxDirective.width + this.dialogArrowSize;\n        }\n        this.cdr.markForCheck();\n    };\n    ColorpickerDialogComponent.prototype.resetColor = function () {\n        this.data.resetColor();\n        this.closeColorPicker();\n    };\n    ColorpickerDialogComponent.prototype.createBox = function (element, offset) {\n        return {\n            top: element.getBoundingClientRect().top + (offset ? window.pageYOffset : 0),\n            left: element.getBoundingClientRect().left + (offset ? window.pageXOffset : 0),\n            width: element.offsetWidth,\n            height: element.offsetHeight\n        };\n    };\n    var _a, _b, _c;\n    ColorpickerDialogComponent = colorpicker_dialog_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'color-picker-dialog',\n            host: {\n                '[style.top.px]': 'style.top',\n                '[style.left.px]': 'style.left',\n                '[style.width.px]': 'style.width',\n                '[style.height.px]': 'style.height',\n                '(window:resize)': 'onResize()',\n                '(window:scroll)': 'onScroll()',\n                '(document:mousedown)': 'onDocumentMouseDown($event)'\n            },\n            template: __webpack_require__(1445),\n            styles: [__webpack_require__(1446)]\n        }),\n        colorpicker_dialog_component___metadata(\"design:paramtypes\", [typeof (_a = typeof colorpicker_data_service_ColorpickerDataService !== \"undefined\" && colorpicker_data_service_ColorpickerDataService) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _c || Object])\n    ], ColorpickerDialogComponent);\n    return ColorpickerDialogComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/colorpicker/component/sample/colorpicker.sample.component.ts\nvar colorpicker_sample_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar colorpicker_sample_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar colorpicker_sample_component_ColorpickerSampleComponent = (function () {\n    function ColorpickerSampleComponent(data, cdr) {\n        var _this = this;\n        this.data = data;\n        this.cdr = cdr;\n        this.data.updateStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n    }\n    var _a, _b;\n    ColorpickerSampleComponent = colorpicker_sample_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'colorpicker-sample',\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            template: __webpack_require__(1447),\n            styles: [__webpack_require__(1448)]\n        }),\n        colorpicker_sample_component___metadata(\"design:paramtypes\", [typeof (_a = typeof colorpicker_data_service_ColorpickerDataService !== \"undefined\" && colorpicker_data_service_ColorpickerDataService) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object])\n    ], ColorpickerSampleComponent);\n    return ColorpickerSampleComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/colorpicker/component/text/colorpicker.text.component.ts\nvar colorpicker_text_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar colorpicker_text_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar colorpicker_text_component_ColorpickerTextComponent = (function () {\n    function ColorpickerTextComponent(data, cdr) {\n        var _this = this;\n        this.data = data;\n        this.cdr = cdr;\n        this.data.updateStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n    }\n    ColorpickerTextComponent.prototype.formatPolicy = function () {\n        this.data.format = (this.data.format + 1) % 3;\n        if (this.data.format === 0 && this.data.hsva.a < 1)\n            this.data.format++;\n        return this.data.format;\n    };\n    var _a, _b;\n    ColorpickerTextComponent = colorpicker_text_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'colorpicker-text',\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            template: __webpack_require__(1449),\n            styles: [__webpack_require__(1450)]\n        }),\n        colorpicker_text_component___metadata(\"design:paramtypes\", [typeof (_a = typeof colorpicker_data_service_ColorpickerDataService !== \"undefined\" && colorpicker_data_service_ColorpickerDataService) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object])\n    ], ColorpickerTextComponent);\n    return ColorpickerTextComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/colorpicker/directive/colorpicker.dialog.directive.ts\nvar colorpicker_dialog_directive___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar colorpicker_dialog_directive___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar colorpicker_dialog_directive_ColorpickerDirective = (function () {\n    function ColorpickerDirective(element, data, resolver, viewRef) {\n        var _this = this;\n        this.element = element;\n        this.data = data;\n        this.resolver = resolver;\n        this.viewRef = viewRef;\n        this.created = false;\n        this.data.service.closeStream$.subscribe(function () { return _this.close(); });\n    }\n    ColorpickerDirective.prototype.ngOnDestroy = function () {\n        this.close();\n    };\n    ColorpickerDirective.prototype.onClick = function () {\n        if (!this.created) {\n            this.dialog = this.viewRef\n                .createComponent(this.resolver.resolveComponentFactory(colorpicker_dialog_component_ColorpickerDialogComponent))\n                .instance;\n            if (this.dialog != null) {\n                this.dialog.setDialog(this, { position: ColorpickerPosition.center, outputFormat: ColorpickerFormat.hex });\n                this.created = true;\n            }\n        }\n    };\n    ColorpickerDirective.prototype.close = function () {\n        if (this.created != false)\n            this.viewRef.remove();\n        this.created = false;\n    };\n    var _a, _b, _c, _d;\n    ColorpickerDirective = colorpicker_dialog_directive___decorate([\n        Object(core_es5[\"Directive\"])({ selector: '[colorpicker]', host: { '(click)': 'onClick()' } }),\n        colorpicker_dialog_directive___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object, typeof (_b = typeof colorpicker_data_service_ColorpickerDataService !== \"undefined\" && colorpicker_data_service_ColorpickerDataService) === \"function\" && _b || Object, typeof (_c = typeof core_es5[\"ComponentFactoryResolver\"] !== \"undefined\" && core_es5[\"ComponentFactoryResolver\"]) === \"function\" && _c || Object, typeof (_d = typeof core_es5[\"ViewContainerRef\"] !== \"undefined\" && core_es5[\"ViewContainerRef\"]) === \"function\" && _d || Object])\n    ], ColorpickerDirective);\n    return ColorpickerDirective;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/colorpicker/directive/colorpicker.slider.directive.ts\nvar colorpicker_slider_directive___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar colorpicker_slider_directive___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar colorpicker_slider_directive_ColorpickerSliderDirective = (function () {\n    function ColorpickerSliderDirective(el) {\n        var _this = this;\n        this.el = el;\n        this.newValue = new core_es5[\"EventEmitter\"]();\n        this.listenerMove = function (event) { return _this.move(event); };\n        this.listenerStop = function () { return _this.stop(); };\n    }\n    ColorpickerSliderDirective.prototype.setCursor = function (event) {\n        var height = this.el.nativeElement.offsetHeight;\n        var width = this.el.nativeElement.offsetWidth;\n        var x = Math.max(0, Math.min(this.getX(event), width));\n        var y = Math.max(0, Math.min(this.getY(event), height));\n        if (this.rgX !== undefined && this.rgY !== undefined)\n            this.newValue.emit({ s: x / width, v: (1 - y / height), rgX: this.rgX, rgY: this.rgY });\n        else if (this.rgX === undefined && this.rgY !== undefined)\n            this.newValue.emit({ v: y / height, rg: this.rgY });\n        else\n            this.newValue.emit({ v: x / width, rg: this.rgX });\n    };\n    ColorpickerSliderDirective.prototype.move = function (event) {\n        event.preventDefault();\n        this.setCursor(event);\n    };\n    ColorpickerSliderDirective.prototype.start = function (event) {\n        this.setCursor(event);\n        document.addEventListener('mousemove', this.listenerMove);\n        document.addEventListener('touchmove', this.listenerMove);\n        document.addEventListener('mouseup', this.listenerStop);\n        document.addEventListener('touchend', this.listenerStop);\n    };\n    ColorpickerSliderDirective.prototype.stop = function () {\n        document.removeEventListener('mousemove', this.listenerMove);\n        document.removeEventListener('touchmove', this.listenerMove);\n        document.removeEventListener('mouseup', this.listenerStop);\n        document.removeEventListener('touchend', this.listenerStop);\n    };\n    ColorpickerSliderDirective.prototype.getX = function (event) {\n        return (event.pageX !== undefined ? event.pageX : event.touches[0].pageX)\n            - this.el.nativeElement.getBoundingClientRect().left - window.pageXOffset;\n    };\n    ColorpickerSliderDirective.prototype.getY = function (event) {\n        return (event.pageY !== undefined ? event.pageY : event.touches[0].pageY)\n            - this.el.nativeElement.getBoundingClientRect().top - window.pageYOffset;\n    };\n    var _a;\n    ColorpickerSliderDirective = colorpicker_slider_directive___decorate([\n        Object(core_es5[\"Directive\"])({\n            selector: '[slider]',\n            host: {\n                '(mousedown)': 'start($event)',\n                '(touchstart)': 'start($event)'\n            },\n            inputs: ['slider', 'rgX', 'rgY'],\n            outputs: ['newValue']\n        }),\n        colorpicker_slider_directive___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object])\n    ], ColorpickerSliderDirective);\n    return ColorpickerSliderDirective;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/colorpicker/directive/colorpicker.text.directive.ts\nvar colorpicker_text_directive___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar colorpicker_text_directive_ColorpickerTextDirective = (function () {\n    function ColorpickerTextDirective() {\n        this.newValue = new core_es5[\"EventEmitter\"]();\n    }\n    ColorpickerTextDirective.prototype.changeInput = function (value) {\n        if (this.rg === undefined) {\n            this.newValue.emit(value);\n        }\n        else {\n            var numeric = parseFloat(value);\n            if (!isNaN(numeric) && numeric >= 0 && numeric <= this.rg) {\n                this.newValue.emit({ v: numeric, rg: this.rg });\n            }\n        }\n    };\n    ColorpickerTextDirective = colorpicker_text_directive___decorate([\n        Object(core_es5[\"Directive\"])({\n            selector: '[text]',\n            host: { '(input)': 'changeInput($event.target.value)' },\n            inputs: ['text', 'rg'],\n            outputs: ['newValue']\n        })\n    ], ColorpickerTextDirective);\n    return ColorpickerTextDirective;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/colorpicker/colorpicker.module.ts\nvar colorpicker_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\nvar colorpicker_module_ColorpickerModule = (function () {\n    function ColorpickerModule() {\n    }\n    ColorpickerModule = colorpicker_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"]\n            ],\n            providers: [\n                colorpicker_service_ColorpickerService\n            ],\n            entryComponents: [\n                colorpicker_component_ColorpickerComponent,\n                colorpicker_dialog_component_ColorpickerDialogComponent\n            ],\n            declarations: [\n                colorpicker_component_ColorpickerComponent,\n                colorpicker_dialog_component_ColorpickerDialogComponent,\n                colorpicker_dialog_directive_ColorpickerDirective,\n                colorpicker_text_directive_ColorpickerTextDirective,\n                colorpicker_slider_directive_ColorpickerSliderDirective,\n                colorpicker_text_component_ColorpickerTextComponent,\n                colorpicker_sample_component_ColorpickerSampleComponent\n            ],\n            exports: [\n                colorpicker_component_ColorpickerComponent\n            ]\n        })\n    ], ColorpickerModule);\n    return ColorpickerModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/model/player.builder.model.ts\nvar PlayerBuilderRouteGroup;\n(function (PlayerBuilderRouteGroup) {\n    PlayerBuilderRouteGroup[\"core\"] = \"core\";\n    PlayerBuilderRouteGroup[\"video\"] = \"video\";\n    PlayerBuilderRouteGroup[\"skin\"] = \"skin\";\n})(PlayerBuilderRouteGroup || (PlayerBuilderRouteGroup = {}));\nvar PlayerBuilderRoute;\n(function (PlayerBuilderRoute) {\n    PlayerBuilderRoute[\"general\"] = \"general\";\n    PlayerBuilderRoute[\"playback\"] = \"playback\";\n    PlayerBuilderRoute[\"theme\"] = \"theme\";\n    PlayerBuilderRoute[\"icons\"] = \"icons\";\n    PlayerBuilderRoute[\"features\"] = \"features\";\n    PlayerBuilderRoute[\"branding\"] = \"branding\";\n    PlayerBuilderRoute[\"endsplash\"] = \"endsplash\";\n})(PlayerBuilderRoute || (PlayerBuilderRoute = {}));\nvar PlayerBuilderRouteData;\n(function (PlayerBuilderRouteData) {\n    PlayerBuilderRouteData[\"bxplayer\"] = \"bxplayer\";\n    PlayerBuilderRouteData[\"docksLink\"] = \"docksLink\";\n    PlayerBuilderRouteData[\"dataProvider\"] = \"dataProvider\";\n    PlayerBuilderRouteData[\"seek\"] = \"seek\";\n})(PlayerBuilderRouteData || (PlayerBuilderRouteData = {}));\nvar PlayerBuilderCanLeaveModalAnswer;\n(function (PlayerBuilderCanLeaveModalAnswer) {\n    PlayerBuilderCanLeaveModalAnswer[\"save\"] = \"save\";\n    PlayerBuilderCanLeaveModalAnswer[\"reset\"] = \"reset\";\n    PlayerBuilderCanLeaveModalAnswer[\"abort\"] = \"abort\";\n})(PlayerBuilderCanLeaveModalAnswer || (PlayerBuilderCanLeaveModalAnswer = {}));\n\n// CONCATENATED MODULE: ./node_modules/@bradmax/player-util/dist/es/config/merger.js\nvar merger_isObject = function (obj) { return obj && typeof obj === 'object'; };\nfunction mergeDeep(target, source) {\n    if (!merger_isObject(target) || !merger_isObject(source))\n        return source;\n    Object.keys(source)\n        .forEach(function (k) {\n        var key = k;\n        var sourceValue = source[key];\n        var targetValue = target[key];\n        if (Array.isArray(targetValue) && Array.isArray(sourceValue))\n            target[key] = targetValue.concat(sourceValue);\n        else if (merger_isObject(targetValue) && merger_isObject(sourceValue))\n            target[key] = mergeDeep(Object.assign(Object.create(null), targetValue), sourceValue);\n        else\n            target[key] = sourceValue;\n    });\n    return target;\n}\n\n// CONCATENATED MODULE: ./node_modules/@bradmax/player-util/dist/es/index.js\n\n\n// CONCATENATED MODULE: ./src/util/coercion.ts\nfunction coerceNumberProperty(value, fallbackValue) {\n    if (fallbackValue === void 0) { fallbackValue = 0; }\n    return _isNumberValue(value) ? Number(value) : fallbackValue;\n}\nfunction _isNumberValue(value) {\n    return !isNaN(parseFloat(value)) && !isNaN(Number(value));\n}\nfunction coerceBooleanProperty(value) {\n    return value != null && \"\" + value !== 'false';\n}\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/data/player.builder.data.diff.service.ts\nvar player_builder_data_diff_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar DiffType;\n(function (DiffType) {\n    DiffType[\"created\"] = \"created\";\n    DiffType[\"updated\"] = \"updated\";\n    DiffType[\"deleted\"] = \"deleted\";\n    DiffType[\"unchanged\"] = \"unchanged\";\n})(DiffType || (DiffType = {}));\nvar player_builder_data_diff_service_PlayerBuilderDataDiffService = (function () {\n    function PlayerBuilderDataDiffService() {\n    }\n    PlayerBuilderDataDiffService.prototype.isFunction = function (x) { return Object.prototype.toString.call(x) === '[object Function]'; };\n    PlayerBuilderDataDiffService.prototype.isArray = function (x) { return Object.prototype.toString.call(x) === '[object Array]'; };\n    PlayerBuilderDataDiffService.prototype.isDate = function (x) { return Object.prototype.toString.call(x) === '[object Date]'; };\n    PlayerBuilderDataDiffService.prototype.isObject = function (x) { return Object.prototype.toString.call(x) === '[object Object]'; };\n    PlayerBuilderDataDiffService.prototype.isValue = function (x) { return !this.isObject(x) && !this.isArray(x); };\n    PlayerBuilderDataDiffService.prototype.map = function (obj1, obj2) {\n        if (this.isFunction(obj1) || this.isFunction(obj2)) {\n            throw 'Invalid argument. Function given, object expected.';\n        }\n        if (this.isValue(obj1) || this.isValue(obj2)) {\n            return {\n                type: this.compareValues(obj1, obj2),\n                data: obj1 === undefined ? obj2 : obj1,\n            };\n        }\n        var diff;\n        for (var key in obj1) {\n            if (this.isFunction(obj1[key])) {\n                continue;\n            }\n            var value2 = undefined;\n            if (obj2[key] !== undefined) {\n                value2 = obj2[key];\n            }\n            if (!diff) {\n                diff = {};\n            }\n            diff[key] = this.map(obj1[key], value2);\n        }\n        for (var key in obj2) {\n            if (this.isFunction(obj2[key]) || diff[key] !== undefined) {\n                continue;\n            }\n            if (!diff) {\n                diff = {};\n            }\n            diff[key] = this.map(undefined, obj2[key]);\n        }\n        return diff;\n    };\n    PlayerBuilderDataDiffService.prototype.compare = function (obj1, obj2) {\n        return this.filterChanged(this.map(obj1, obj2));\n    };\n    PlayerBuilderDataDiffService.prototype.filterChanged = function (o) {\n        var filtered = undefined;\n        var _loop_1 = function (okey) {\n            var oval = o[okey];\n            var type = oval.type, data = oval.data;\n            var key = okey;\n            switch (type) {\n                case DiffType.created:\n                    if (!filtered)\n                        filtered = {};\n                    filtered[key] = data;\n                    break;\n                case DiffType.updated:\n                    if (!filtered)\n                        filtered = {};\n                    filtered[key] = data;\n                    break;\n                case DiffType.deleted:\n                    break;\n                case DiffType.unchanged:\n                    break;\n                default:\n                    if (!filtered)\n                        filtered = {};\n                    var filteredObj_1 = this_1.filterChanged(oval);\n                    if (filteredObj_1 != undefined) {\n                        var keys = Object.keys(filteredObj_1);\n                        if (keys.length > 0) {\n                            if (typeof filteredObj_1 === 'object') {\n                                if (keys[0] === '0') {\n                                    filtered[key] = keys.map(function (k) { return filteredObj_1[k]; });\n                                }\n                                else {\n                                    filtered[key] = filteredObj_1;\n                                }\n                            }\n                        }\n                    }\n                    break;\n            }\n        };\n        var this_1 = this;\n        for (var okey in o) {\n            _loop_1(okey);\n        }\n        return filtered;\n    };\n    ;\n    PlayerBuilderDataDiffService.prototype.compareValues = function (value1, value2) {\n        if (value1 === value2) {\n            return DiffType.unchanged;\n        }\n        if (this.isDate(value1) && this.isDate(value2) && value1.getTime() === value2.getTime()) {\n            return DiffType.unchanged;\n        }\n        if (value1 === undefined) {\n            return DiffType.deleted;\n        }\n        if (value2 === undefined) {\n            return DiffType.created;\n        }\n        return DiffType.updated;\n    };\n    PlayerBuilderDataDiffService.prototype.mergeDeep = function (target, source) {\n        var _this = this;\n        var isObject = function (obj) { return obj && typeof obj === 'object'; };\n        if (!isObject(target) || !isObject(source))\n            return source;\n        Object.keys(source).forEach(function (key) {\n            var sourceValue = source[key];\n            var targetValue = target[key];\n            if (Array.isArray(targetValue) && Array.isArray(sourceValue))\n                target[key] = targetValue.concat(sourceValue);\n            else if (isObject(targetValue) && isObject(sourceValue))\n                target[key] = _this.mergeDeep(Object.assign(Object.create(null), targetValue), sourceValue);\n            else\n                target[key] = sourceValue;\n        });\n        return target;\n    };\n    PlayerBuilderDataDiffService = player_builder_data_diff_service___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], PlayerBuilderDataDiffService);\n    return PlayerBuilderDataDiffService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/player.builder.video.service.ts\nvar player_builder_video_service___assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar player_builder_video_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_video_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar player_builder_video_service_PlayerBuilderVideoService = (function () {\n    function PlayerBuilderVideoService(zone) {\n        this.zone = zone;\n        this._config = {};\n        this.seekValue = null;\n        this.currentDuration = NaN;\n        this.$player = new Rx[\"BehaviorSubject\"](null);\n        this.$event = new Rx[\"BehaviorSubject\"](null);\n    }\n    Object.defineProperty(PlayerBuilderVideoService.prototype, \"api\", {\n        get: function () {\n            if (!!this.$player.value && !!this.$player.value.modules && !!this.$player.value.modules.JavascriptApi)\n                return this.$player.value.modules.JavascriptApi;\n            else\n                return null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ;\n    Object.defineProperty(PlayerBuilderVideoService.prototype, \"skin\", {\n        get: function () {\n            if (!!this.$player.value && !!this.$player.value.modules && !!this.$player.value.modules.HtmlSkin)\n                return this.$player.value.modules.HtmlSkin;\n            else\n                return null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ;\n    Object.defineProperty(PlayerBuilderVideoService.prototype, \"isEndSplashVisible\", {\n        get: function () { return !!this.skin ? !!this.skin.state.splash.show.end : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderVideoService.prototype, \"config\", {\n        get: function () {\n            if ('qualitySelectionEnabled' in this._config && this._config.qualitySelectionEnabled === false)\n                delete this._config.qualitySelectionEnabled;\n            return this._config;\n        },\n        set: function (c) { this._config = player_builder_video_service___assign({}, this._config, c); },\n        enumerable: true,\n        configurable: true\n    });\n    ;\n    ;\n    Object.defineProperty(PlayerBuilderVideoService.prototype, \"container\", {\n        get: function () { return this._container; },\n        set: function (c) { this._container = c; },\n        enumerable: true,\n        configurable: true\n    });\n    ;\n    ;\n    Object.defineProperty(PlayerBuilderVideoService.prototype, \"player$\", {\n        get: function () { return this.$player.asObservable(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderVideoService.prototype, \"event$\", {\n        get: function () { return this.$event.asObservable(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderVideoService.prototype, \"playerVer\", {\n        get: function () { return this.api ? this.api.getVersion() : undefined; },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderVideoService.prototype.create = function () {\n        var _this = this;\n        this.destroy();\n        if (!this.container || !this.config || !bradmax.player.create) {\n            return;\n        }\n        this.zone.runOutsideAngular(function () {\n            try {\n                delete _this.config.showSkinOnInit;\n                var player = bradmax.player.create(_this.container, _this.config);\n                _this.$player.next(player);\n                _this.api.add(\"VideoEvent.playing\", function (e) { return _this.$event.next(e); });\n                _this.api.add(\"VideoEvent.paused\", function (e) { return _this.$event.next(e); });\n                _this.api.add(\"VideoEvent.stopped\", function (e) { return _this.$event.next(e); });\n                _this.api.add(\"VideoEvent.durationChange\", function (e) { _this.currentDuration = e.data.duration; _this.$event.next(e); });\n                _this.api.add(\"VideoEvent.currentTimeChange\", function (e) { return _this.$event.next(e); });\n                _this.api.add(\"VideoEvent.complete\", function (e) { return _this.$event.next(e); });\n                _this.api.add(\"VideoEvent.bufferingStart\", function (e) { return _this.$event.next(e); });\n                _this.api.add(\"VideoEvent.bufferingEnd\", function (e) { return _this.$event.next(e); });\n                _this.api.add(\"VideoEvent.seekingStart\", function (e) { return _this.$event.next(e); });\n                _this.api.add(\"VideoEvent.seekingEnd\", function (e) { return _this.$event.next(e); });\n                switch (_this.seekValue) {\n                    case 'end':\n                        _this.seekEnd();\n                        break;\n                    case 'start':\n                    default:\n                        _this.seekStart();\n                        break;\n                }\n            }\n            catch (e) {\n                console.error(\"[VideoService].create.ERROR\", e);\n                console.debug('[VideoService].create.config', _this.config);\n                console.debug('[VideoService].HtmlSkin.plugin', _this.skin);\n            }\n        });\n    };\n    PlayerBuilderVideoService.prototype.destroy = function () {\n        var _this = this;\n        this.currentDuration = NaN;\n        if (this.$player.value != null || !bradmax.player.destroy) {\n            this.zone.runOutsideAngular(function () {\n                try {\n                    bradmax.player.destroy(_this.$player.value);\n                }\n                catch (e) {\n                    console.error(\"[VideoService].destroy.ERROR\", e);\n                }\n            });\n        }\n        this.$player.next(null);\n    };\n    PlayerBuilderVideoService.prototype.seek = function (t) {\n        var _this = this;\n        if (this.seekValue === t)\n            return;\n        this.seekValue = t;\n        if (!!this.api) {\n            this.zone.runOutsideAngular(function () {\n                switch (_this.seekValue) {\n                    case 'end':\n                        _this.seekEnd();\n                        break;\n                    case 'start':\n                        _this.seekStart();\n                        break;\n                    default:\n                        break;\n                }\n            });\n        }\n    };\n    PlayerBuilderVideoService.prototype.seekStart = function () {\n        var _this = this;\n        if (!this.api)\n            return;\n        this.api.seek(0);\n        this.api.addOnce(\"VideoEvent.seekingEnd\", function (_) { return _this.api.pause(); });\n    };\n    PlayerBuilderVideoService.prototype.seekEnd = function () {\n        var _this = this;\n        if (!this.api || isNaN(this.currentDuration))\n            return;\n        this.api.seek(this.currentDuration);\n        this.api.addOnce(\"VideoEvent.seekingEnd\", function (_) { return _this.api.play(); });\n    };\n    var _a;\n    PlayerBuilderVideoService = player_builder_video_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_builder_video_service___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"NgZone\"] !== \"undefined\" && core_es5[\"NgZone\"]) === \"function\" && _a || Object])\n    ], PlayerBuilderVideoService);\n    return PlayerBuilderVideoService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/player.builder.data.service.ts\nvar player_builder_data_service___assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar player_builder_data_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_data_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar player_builder_data_service_PlayerBuilderDataService = (function () {\n    function PlayerBuilderDataService(user, video, diff, cp, api) {\n        this.user = user;\n        this.video = video;\n        this.diff = diff;\n        this.cp = cp;\n        this.api = api;\n        this.skinIconFontVariationSettings = null;\n    }\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"userAdsSupportEnabled\", {\n        get: function () { return this.user.hasAdsSupport(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"isDirty\", {\n        get: function () { return this.buildName != this.savedBuildName || this.formCache !== JSON.stringify(this.formData); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"$\", {\n        get: function () { return this.formSub.asObservable(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"videoPlayer$\", {\n        get: function () { return this.video.player$; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"videoEvent$\", {\n        get: function () { return this.video.event$; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"RESOURCE\", {\n        get: function () { return bradmax.builder.resource; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"DEFAULT\", {\n        get: function () { return this.RESOURCE.defaultSettings; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"VERSION\", {\n        get: function () { return bradmax.builder.resource.version; },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderDataService.prototype.videoSeek = function (t) { this.video.seek(t); };\n    PlayerBuilderDataService.prototype.init = function () {\n        var _this = this;\n        this.formSub = new Rx[\"BehaviorSubject\"](this.DEFAULT);\n        this.video.config = this.DEFAULT.variable;\n        if (!!this.videoPlayerSub && !this.videoPlayerSub.closed)\n            this.videoPlayerSub.unsubscribe();\n        this.videoPlayerSub = this.videoPlayer$\n            .subscribe(function (p) {\n            _this.videoPlayerSkin = p && p.modules && p.modules.HtmlSkin ? p.modules.HtmlSkin : null;\n            _this.videoPlayerJsApi = p && p.modules && p.modules.JavascriptApi ? p.modules.JavascriptApi : null;\n            if (_this.videoPlayerSkin) {\n                _this.playerLocales = _this.videoPlayerSkin.builder.locales();\n                if (_this.skinless) {\n                    _this.videoPlayerSkin.skinElement.classList.add('hide');\n                }\n            }\n        });\n    };\n    PlayerBuilderDataService.prototype.destroy = function () {\n        if (!!this.videoPlayerSub && !this.videoPlayerSub.closed)\n            this.videoPlayerSub.unsubscribe();\n        this.videoPlayerSub = null;\n        this.video.destroy();\n        this.createdAt = undefined;\n        this.updatedAt = undefined;\n        this.publishedAt = undefined;\n        this.accountId = undefined;\n        this.buildId = undefined;\n        this.buildName = undefined;\n        this.savedBuildName = undefined;\n        this.formSub = null;\n        this.formCache = null;\n        this.savedData = null;\n        this.videoPlayerSkin = null;\n        this.videoPlayerJsApi = null;\n        this.skinIconFontVariationSettings = null;\n    };\n    PlayerBuilderDataService.prototype.parseResponseData = function (resp) {\n        this.accountId = resp.account;\n        this.buildId = resp.id;\n        this.createdAt = resp.created_at;\n        this.updatedAt = resp.updated_at;\n        this.buildName = resp.name;\n        this.savedBuildName = resp.name;\n        var conf_json = JSON.parse(resp.conf_json);\n        this.publishedAt = resp.latest_webbuild ? resp.latest_webbuild.created_at : null;\n        this.savedData = {};\n        var typeKey = 'type';\n        if (typeKey in conf_json)\n            this.savedData.type = conf_json.type;\n        var versionKey = 'version';\n        if (versionKey in conf_json)\n            this.savedData.version = conf_json.version;\n        var themeKey = 'theme';\n        if (themeKey in conf_json)\n            this.savedData.theme = conf_json.theme;\n        var variableKey = 'variable';\n        if (variableKey in conf_json)\n            this.savedData.variable = conf_json.variable;\n        var pluginKey = 'plugin';\n        if (pluginKey in conf_json)\n            this.savedData.plugin = conf_json.plugin;\n        var theme = this.savedData.theme ? this.savedData.theme : this.DEFAULT.theme;\n        var skinDefault = player_builder_data_service___assign({}, this.RESOURCE.themes[theme]);\n        var icon = player_builder_data_service___assign({}, skinDefault.icon);\n        var savedSkin = this.savedData.variable && this.savedData.variable.skin ? this.savedData.variable.skin : null;\n        if (!!savedSkin) {\n            if (!!savedSkin.icon) {\n                if (this.isSkinSvg(skinDefault.icon) && this.isSkinSvg(savedSkin.icon)) {\n                    icon = { svg: player_builder_data_service___assign({}, skinDefault.icon.svg, savedSkin.icon.svg) };\n                }\n                else if (this.isSkinFont(skinDefault.icon) && this.isSkinFont(savedSkin.icon)) {\n                    icon = { font: player_builder_data_service___assign({}, skinDefault.icon.font, savedSkin.icon.font) };\n                }\n                else {\n                    icon = player_builder_data_service___assign({}, savedSkin.icon);\n                }\n            }\n        }\n        var skin = savedSkin\n            ? player_builder_data_service___assign({}, mergeDeep(skinDefault, savedSkin), { icon: icon }) : player_builder_data_service___assign({}, skinDefault);\n        var variable = this.savedData.variable\n            ? player_builder_data_service___assign({}, mergeDeep(player_builder_data_service___assign({}, this.DEFAULT.variable), this.savedData.variable), { skin: skin }) : player_builder_data_service___assign({}, this.DEFAULT.variable, { skin: skin });\n        var formData = {\n            version: this.savedData.version ? this.savedData.version : this.DEFAULT.version,\n            type: this.savedData.type ? this.savedData.type : this.DEFAULT.type,\n            theme: theme,\n            variable: variable,\n            plugin: this.savedData.plugin ? this.savedData.plugin : this.DEFAULT.plugin,\n        };\n        this.formCache = JSON.stringify(formData);\n        this.formData = formData;\n        this.resetPlayer();\n    };\n    PlayerBuilderDataService.prototype.reset = function () {\n        if (!this.isDirty)\n            return;\n        this.formData = JSON.parse(this.formCache);\n        this.resetPlayer();\n    };\n    PlayerBuilderDataService.prototype.resetPlayer = function () {\n        this.video.config = this.formData.variable;\n        if (this.videoPlayerJsApi) {\n            this.videoPlayerJsApi.setMute(this.mute);\n            this.videoPlayerJsApi.setVolume(this.volume);\n        }\n        if (this.videoPlayerSkin) {\n            this.videoPlayerSkin.skinElement.classList.remove('hide');\n            this.videoPlayerSkin.builder.pip(this.pictureInPictureButtonVisible);\n            this.videoPlayerSkin.builder.casting(this.videoCastEnabled);\n            this.videoPlayerSkin.builder.fullscreen(this.fullscreenEnabled);\n            this.videoPlayerSkin.builder.playbackRate(this.playbackRateEnabled);\n            this.videoPlayerSkin.builder.contextmenu(this.contextMenuDisabled);\n            this.videoPlayerSkin.builder.quality(this.qualitySelectionEnabled);\n            this.videoPlayerSkin.builder.endSplash(this.endSplash);\n            this.videoPlayerSkin.set_color(this.skinColor);\n        }\n        this.updateBrand();\n        this.updateSkinIconFontVariationSettings();\n        this.video.create();\n    };\n    PlayerBuilderDataService.prototype.save$ = function () {\n        return this.api.updatePlayer(this.accountId, \"\" + this.buildId, {\n            api_version: '2',\n            name: this.buildName,\n            conf_json: this.formatDataToSave()\n        });\n    };\n    PlayerBuilderDataService.prototype.publish$ = function () { return this.api.generateBuild(this.accountId, \"\" + this.buildId); };\n    PlayerBuilderDataService.prototype.formatDataToSave = function () {\n        var value = this.formData;\n        if (this.userAdsSupportEnabled == false) {\n            value.plugin.AdvertisementDataProvider = false;\n            value.plugin.FreeWheel = false;\n        }\n        var formVariable = value.variable;\n        var compareWithVariable = player_builder_data_service___assign({}, this.DEFAULT.variable, { skin: player_builder_data_service___assign({}, this.RESOURCE.themes[this.skinName]) });\n        var variable = this.diff.compare(formVariable, compareWithVariable);\n        var data = {\n            version: this.DEFAULT.version,\n            type: this.DEFAULT.type,\n            theme: this.skinName,\n            variable: variable,\n            plugin: value.plugin,\n        };\n        var formatted = JSON.stringify(data, function (_key, value) {\n            if (value == null)\n                return undefined;\n            if (!!value && typeof value === 'string' && value.length > 0)\n                return value.trim();\n            return value;\n        });\n        return formatted;\n    };\n    PlayerBuilderDataService.prototype.isSkinSvg = function (v) { return 'svg' in v; };\n    PlayerBuilderDataService.prototype.isSkinFont = function (v) { return 'font' in v; };\n    PlayerBuilderDataService.prototype.updateSkinIconFontVariationSettings = function (variation) {\n        if (variation == null) {\n            var fnt = this.player.skin && this.player.skin.icon && 'font' in this.player.skin.icon\n                ? this.player.skin.icon.font\n                : null;\n            variation = fnt && fnt.variation ? fnt.variation : null;\n        }\n        var keys = variation ? Object.keys(variation) : [];\n        if (keys.length > 0)\n            this.skinIconFontVariationSettings = keys\n                .map(function (k) { return \"\\\"\" + k + \"\\\" \" + variation[k]; })\n                .join(\", \");\n        else\n            this.skinIconFontVariationSettings = null;\n    };\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"formData\", {\n        get: function () { return this.formSub && this.formSub.value ? this.formSub.value : this.DEFAULT; },\n        set: function (data) { this.formSub.next(data); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"player\", {\n        get: function () { return this.formData ? this.formData.variable : null; },\n        set: function (cfg) {\n            if (this.video)\n                this.video.config = cfg;\n            var value = this.formData;\n            if (!value)\n                return;\n            this.formData = player_builder_data_service___assign({}, value, { variable: player_builder_data_service___assign({}, value.variable, cfg) });\n        },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderDataService.prototype.readPlayer = function (key) { return !!this.player && key in this.player ? this.player[key] : this.DEFAULT.variable[key]; };\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"plugins\", {\n        get: function () { return this.formData ? this.formData.plugin : null; },\n        set: function (cfg) {\n            var value = this.formData;\n            if (!value)\n                return;\n            this.formData = player_builder_data_service___assign({}, value, { plugin: player_builder_data_service___assign({}, value.plugin, cfg) });\n        },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderDataService.prototype.readPlugins = function (key) { return !!this.plugins && key in this.plugins ? this.plugins[key] : false; };\n    PlayerBuilderDataService.prototype.writePlayer = function (key, value) {\n        var _a;\n        this.player = (_a = {}, _a[key] = value, _a);\n    };\n    PlayerBuilderDataService.prototype.writePlugin = function (key, value) {\n        var _a;\n        this.plugins = (_a = {}, _a[key] = value, _a);\n    };\n    PlayerBuilderDataService.prototype.deletePlugin = function (key) { delete this.plugins[key]; };\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"autoplay\", {\n        get: function () { return this.readPlayer('autoplay'); },\n        set: function (v) { this.writePlayer('autoplay', v); if (!!v && this.mute !== true)\n            this.mute = true; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"mute\", {\n        get: function () { return this.readPlayer('mute'); },\n        set: function (v) { this.writePlayer('mute', v); if (this.videoPlayerJsApi)\n            this.videoPlayerJsApi.setMute(v); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"volume\", {\n        get: function () { return this.readPlayer('volume'); },\n        set: function (v) { this.writePlayer('volume', v); if (this.videoPlayerJsApi)\n            this.videoPlayerJsApi.setVolume(v); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"locale\", {\n        get: function () { return this.readPlayer('locale'); },\n        set: function (v) { this.writePlayer('locale', v); this.video.create(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"audio\", {\n        get: function () { return this.readPlayer('audio'); },\n        set: function (v) { this.writePlayer('audio', v); this.video.create(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"subtitles\", {\n        get: function () { return this.readPlayer('subtitles'); },\n        set: function (v) { this.writePlayer('subtitles', v); this.video.create(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"showSkinOnInit\", {\n        get: function () { return this.readPlayer('showSkinOnInit'); },\n        set: function (v) { this.writePlayer('showSkinOnInit', coerceBooleanProperty(v)); this.video.create(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"pictureInPictureButtonVisible\", {\n        get: function () { return this.readPlayer('pictureInPictureButtonVisible'); },\n        set: function (v) {\n            this.writePlugin('PictureInPicture', coerceBooleanProperty(v));\n            this.writePlayer('pictureInPictureButtonVisible', coerceBooleanProperty(v));\n            if (this.videoPlayerSkin)\n                this.videoPlayerSkin.builder.pip(v);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"videoCastEnabled\", {\n        get: function () { return this.readPlayer('videoCastEnabled'); },\n        set: function (v) {\n            this.writePlugin('AirPlay', coerceBooleanProperty(v));\n            this.writePlugin('Chromecast', coerceBooleanProperty(v));\n            this.writePlayer('videoCastEnabled', coerceBooleanProperty(v));\n            if (this.videoPlayerSkin)\n                this.videoPlayerSkin.builder.casting(v);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"fullscreenEnabled\", {\n        get: function () { return this.readPlayer('fullscreenEnabled'); },\n        set: function (v) { this.writePlayer('fullscreenEnabled', coerceBooleanProperty(v)); if (this.videoPlayerSkin)\n            this.videoPlayerSkin.builder.fullscreen(v); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"contextMenuDisabled\", {\n        get: function () { return !this.readPlayer('contextMenuDisabled'); },\n        set: function (v) { this.writePlayer('contextMenuDisabled', !coerceBooleanProperty(v)); if (this.videoPlayerSkin)\n            this.videoPlayerSkin.builder.contextmenu(!v); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"playbackRateEnabled\", {\n        get: function () { return this.readPlayer('playbackRateEnabled'); },\n        set: function (v) { this.writePlayer('playbackRateEnabled', coerceBooleanProperty(v)); if (this.videoPlayerSkin)\n            this.videoPlayerSkin.builder.playbackRate(v); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"qualitySelectionEnabled\", {\n        get: function () { return this.readPlayer('qualitySelectionEnabled'); },\n        set: function (v) { this.writePlayer('qualitySelectionEnabled', coerceBooleanProperty(v)); if (this.videoPlayerSkin)\n            this.videoPlayerSkin.builder.quality(v); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"qualityLabelType\", {\n        get: function () { return this.readPlayer('qualityLabelType'); },\n        set: function (v) { this.writePlayer('qualityLabelType', v); this.video.create(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"qualityInitialBandwidthKbs\", {\n        get: function () { return this.readPlayer('qualityInitialBandwidthKbs'); },\n        set: function (v) { this.writePlayer('qualityInitialBandwidthKbs', coerceNumberProperty(v)); this.video.create(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"endSplash\", {\n        get: function () { return this.readPlayer('endSplash'); },\n        set: function (v) { this.writePlayer('endSplash', v); if (this.videoPlayerSkin)\n            this.videoPlayerSkin.builder.endSplash(v); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"logoFile\", {\n        get: function () { return this.readPlayer('logoFile'); },\n        set: function (v) { this.writePlayer('logoFile', v); this.updateBrand(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"logoLink\", {\n        get: function () { return this.readPlayer('logoLink'); },\n        set: function (v) { this.writePlayer('logoLink', v); this.updateBrand(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"logoLinkTarget\", {\n        get: function () { return this.readPlayer('logoLinkTarget'); },\n        set: function (v) { this.writePlayer('logoLinkTarget', v); this.updateBrand(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"logoAutohide\", {\n        get: function () { return this.readPlayer('logoAutohide'); },\n        set: function (v) { this.writePlayer('logoAutohide', coerceBooleanProperty(v)); this.updateBrand(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"logoXPosition\", {\n        get: function () { return this.readPlayer('logoXPosition'); },\n        set: function (v) { this.writePlayer('logoXPosition', v); this.updateBrand(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"logoYPosition\", {\n        get: function () { return this.readPlayer('logoYPosition'); },\n        set: function (v) { this.writePlayer('logoYPosition', v); this.updateBrand(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"logoVisibleDuringAdPlayback\", {\n        get: function () { return this.readPlayer('logoVisibleDuringAdPlayback'); },\n        set: function (v) { this.writePlayer('logoVisibleDuringAdPlayback', coerceBooleanProperty(v)); this.updateBrand(); },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderDataService.prototype.updateBrand = function () {\n        var brand = {\n            logoFile: this.logoFile,\n            logoLink: this.logoLink,\n            logoLinkTarget: this.logoLinkTarget,\n            logoAutohide: this.logoAutohide,\n            logoXPosition: this.logoXPosition,\n            logoYPosition: this.logoYPosition,\n            logoVisibleDuringAdPlayback: this.logoVisibleDuringAdPlayback,\n        };\n        if (this.videoPlayerSkin)\n            this.videoPlayerSkin.builder.brand(brand);\n    };\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skin\", {\n        get: function () { return this.readPlayer('skin'); },\n        set: function (v) {\n            var activeColor = this.skinCssVarColor;\n            var oldThemeColor = this.skinThemeDefaultColor;\n            var userColor = null;\n            if (!this.compareColors(activeColor, oldThemeColor))\n                userColor = activeColor;\n            this.writePlayer('skin', player_builder_data_service___assign({}, this.skin, v));\n            if (!!userColor)\n                this.skinColor = userColor;\n            this.updateSkinIconFontVariationSettings();\n            this.video.create();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinName\", {\n        get: function () { return this.skin ? this.skin.name : this.DEFAULT.variable.skin.name; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinCssVarColor\", {\n        get: function () {\n            if (this.videoPlayerSkin)\n                return this.videoPlayerSkin.builder.cssMainColor();\n            return null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinThemeDefaultColor\", {\n        get: function () {\n            return this.RESOURCE.themes[this.skinName].color;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinColor\", {\n        get: function () { return this.skin && this.skin.color ? this.skin.color : this.skinCssVarColor; },\n        set: function (v) {\n            if (this.compareColors(v, this.skinThemeDefaultColor))\n                return;\n            this.writeSkinColor(v);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderDataService.prototype.resetColorToThemeDefault = function () { this.writeSkinColor(this.skinThemeDefaultColor); };\n    PlayerBuilderDataService.prototype.writeSkinColor = function (color) {\n        this.writePlayer('skin', player_builder_data_service___assign({}, this.skin, { color: color }));\n        if (this.videoPlayerSkin)\n            this.videoPlayerSkin.set_color(color);\n    };\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinFont\", {\n        get: function () { return this.skin && !!this.skin.font ? this.skin.font : this.DEFAULT.variable.skin.font; },\n        set: function (font) { this.skin = player_builder_data_service___assign({}, this.skin, { font: font }); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinFontFetch\", {\n        get: function () { return this.skinFont != null && this.skinFont.fetch; },\n        set: function (v) { this.skinFont = player_builder_data_service___assign({}, this.skinFont, { fetch: v }); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinFontSrcToFetch\", {\n        get: function () { return this.RESOURCE.themes[this.skinName].font.src; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinState\", {\n        get: function () { return this.videoPlayerSkin ? this.videoPlayerSkin.state : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinStatePrefix\", {\n        get: function () { return this.skinState.prefix; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinStateIcoPrefix\", {\n        get: function () { return this.videoPlayerSkin.skinIcoPrefix; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinStateIcon\", {\n        get: function () { return this.skinState.icon; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinStateIconType\", {\n        get: function () { return this.skinStateIcon.type; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinStateIconMap\", {\n        get: function () { return this.mapStateIconIdsToArray(this.skinStateIcon); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinIconIsFont\", {\n        get: function () { return !!this.skin && !!this.skin.icon ? this.isSkinFont(this.skin.icon) : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinIcon\", {\n        get: function () { return this.skin.icon; },\n        set: function (icon) { this.skin = player_builder_data_service___assign({}, this.skin, { icon: icon }); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinIconFont\", {\n        get: function () {\n            return !!this.skin && !!this.skin.icon && 'font' in this.skin.icon\n                ? this.skin.icon.font\n                : 'font' in this.DEFAULT.variable.skin.icon\n                    ? this.DEFAULT.variable.skin.icon.font\n                    : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinIconFontFetch\", {\n        get: function () { return this.skinIconFont != null && this.skinIconFont.fetch; },\n        set: function (v) {\n            if (!this.skinIconFont)\n                return;\n            this.skinIcon = { font: player_builder_data_service___assign({}, this.skinIconFont, { fetch: v }) };\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinIconFontSrcToFetch\", {\n        get: function () {\n            var skinDefault = this.RESOURCE.themes[this.skinName];\n            return this.isSkinFont(skinDefault.icon) ? skinDefault.icon.font.src : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinIconFontVariation\", {\n        get: function () {\n            return !!this.skinIconFont && !!this.skinIconFont.variation\n                ? this.skinIconFont.variation\n                : 'font' in this.DEFAULT.variable.skin.icon\n                    ? this.DEFAULT.variable.skin.icon.font.variation\n                    : null;\n        },\n        set: function (variation) {\n            var icon = { font: player_builder_data_service___assign({}, this.skinIconFont, { variation: player_builder_data_service___assign({}, this.skinIconFont.variation, variation) }) };\n            this.skin = player_builder_data_service___assign({}, this.skin, { icon: icon });\n            this.updateSkinIconFontVariationSettings(icon.font.variation);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"advertisement\", {\n        get: function () { return this.readPlugins('AdvertisementDataProvider') && this.readPlugins('FreeWheel'); },\n        set: function (v) {\n            this.writePlugin('AdvertisementDataProvider', coerceBooleanProperty(v));\n            this.writePlugin('FreeWheel', coerceBooleanProperty(v));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"jsapi\", {\n        get: function () { return this.readPlugins('JavascriptApi'); },\n        set: function (v) { this.writePlugin('JavascriptApi', coerceBooleanProperty(v)); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"video360\", {\n        get: function () { return this.readPlugins('Video360'); },\n        set: function (v) { this.writePlugin('Video360', coerceBooleanProperty(v)); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"keyboard\", {\n        get: function () { return this.readPlugins('KeyboardSupport'); },\n        set: function (v) { this.writePlugin('KeyboardSupport', coerceBooleanProperty(v)); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"skinless\", {\n        get: function () { return !this.readPlugins('HtmlSkin'); },\n        set: function (v) {\n            this.writePlugin('HtmlSkin', !coerceBooleanProperty(v));\n            if (!!v)\n                this.videoPlayerSkin.skinElement.classList.add('hide');\n            else\n                this.videoPlayerSkin.skinElement.classList.remove('hide');\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"quanteec\", {\n        get: function () { return this.readPlugins('QuanteecPlugin'); },\n        set: function (v) { if (v)\n            this.writePlugin('QuanteecPlugin', coerceBooleanProperty(v));\n        else\n            this.deletePlugin('QuanteecPlugin'); this.quanteecStreamboost = v; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"quanteecStreamboost\", {\n        get: function () { return this.readPlugins('QuanteecStreamboost'); },\n        set: function (v) { if (v)\n            this.writePlugin('QuanteecStreamboost', coerceBooleanProperty(v));\n        else\n            this.deletePlugin('QuanteecStreamboost'); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderDataService.prototype, \"system73\", {\n        get: function () { return this.readPlugins('System73Plugin'); },\n        set: function (v) { if (v)\n            this.writePlugin('System73Plugin', coerceBooleanProperty(v));\n        else\n            this.deletePlugin('System73Plugin'); },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderDataService.prototype.compareColors = function (firstColor, secondColor) {\n        var c1 = this.cp.stringToHsva(firstColor);\n        var c2 = this.cp.stringToHsva(secondColor);\n        return c1.h === c2.h && c1.s === c2.s && c1.v === c2.v && c1.a === c2.a;\n    };\n    PlayerBuilderDataService.prototype.mapStateIconIdsToArray = function (input) {\n        var v = [];\n        var item;\n        for (var key in input) {\n            if (key == 'type')\n                continue;\n            item = input[key];\n            if ('id' in item)\n                v.push(item.id);\n            else\n                v = v.concat(this.mapStateIconIdsToArray(item));\n        }\n        return v;\n    };\n    var _a, _b, _c, _d, _e;\n    PlayerBuilderDataService = player_builder_data_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_builder_data_service___metadata(\"design:paramtypes\", [typeof (_a = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _a || Object, typeof (_b = typeof player_builder_video_service_PlayerBuilderVideoService !== \"undefined\" && player_builder_video_service_PlayerBuilderVideoService) === \"function\" && _b || Object, typeof (_c = typeof player_builder_data_diff_service_PlayerBuilderDataDiffService !== \"undefined\" && player_builder_data_diff_service_PlayerBuilderDataDiffService) === \"function\" && _c || Object, typeof (_d = typeof colorpicker_service_ColorpickerService !== \"undefined\" && colorpicker_service_ColorpickerService) === \"function\" && _d || Object, typeof (_e = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _e || Object])\n    ], PlayerBuilderDataService);\n    return PlayerBuilderDataService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/component/@core/abstract.player.builder.data.component.ts\nvar abstract_player_builder_data_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar abstract_player_builder_data_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent = (function () {\n    function AbstractPlayerBuilderDataComponent(data, cdr, route) {\n        this.data = data;\n        this.cdr = cdr;\n        this.route = route;\n        this.SWITCH_LABEL_ENABLED = { on: 'enabled', off: 'disabled' };\n        this.SWITCH_LABEL_INJECT_LEFT = { on: 'inject', off: 'inject' };\n        this.SWITCH_LABEL_INJECT_RIGHT = { on: 'with player', off: 'manually' };\n        this.SWITCH_LABEL_SHOW = { on: 'visible', off: 'hidden' };\n        this.SWITCH_LABEL_ON = { on: 'on', off: 'off' };\n        this.SWITCH_LABEL_SIZE = 'xsmall';\n        this.SWITCH_SIZE = 'small';\n    }\n    AbstractPlayerBuilderDataComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.routeSub = this.route.data\n            .subscribe(function (d) { return _this.onRouteDataChange(d); });\n        this.dataSub = this.data.$\n            .pipe(Object(operators[\"debounceTime\"])(100))\n            .subscribe(function (d) { return _this.onUserBuildChange(d); });\n        this.videoPlayerSub = this.data.videoPlayer$\n            .pipe(Object(operators[\"debounceTime\"])(100))\n            .subscribe(function (d) { return _this.onVideoPlayer(d); });\n        this.videoEventSub = this.data.videoEvent$\n            .pipe(Object(operators[\"debounceTime\"])(100))\n            .subscribe(function (d) { return _this.onVideoEvent(d); });\n    };\n    AbstractPlayerBuilderDataComponent.prototype.ngOnDestroy = function () {\n        this.routeSub.unsubscribe();\n        this.dataSub.unsubscribe();\n        this.videoPlayerSub.unsubscribe();\n        this.videoEventSub.unsubscribe();\n    };\n    AbstractPlayerBuilderDataComponent.prototype.onRouteDataChange = function (d) {\n        if (PlayerBuilderRouteData.seek in d) {\n            this.data.videoSeek(d[PlayerBuilderRouteData.seek]);\n        }\n        this.cdr.markForCheck();\n    };\n    AbstractPlayerBuilderDataComponent.prototype.onUserBuildChange = function (_) { this.cdr.markForCheck(); };\n    AbstractPlayerBuilderDataComponent.prototype.onVideoPlayer = function (player) {\n        this.player = player;\n        this.cdr.markForCheck();\n    };\n    AbstractPlayerBuilderDataComponent.prototype.onVideoEvent = function (event) {\n        if (!event || !('type' in event))\n            return;\n        switch (event.type) {\n            case 'currentTimeChange': break;\n            case 'complete':\n                this.cdr.detectChanges();\n                break;\n            default:\n                this.cdr.markForCheck();\n                break;\n        }\n    };\n    var _a, _b, _c;\n    AbstractPlayerBuilderDataComponent = abstract_player_builder_data_component___decorate([\n        Object(core_es5[\"Directive\"])({ selector: 'abstract-player-builder-data' }),\n        abstract_player_builder_data_component___metadata(\"design:paramtypes\", [typeof (_a = typeof player_builder_data_service_PlayerBuilderDataService !== \"undefined\" && player_builder_data_service_PlayerBuilderDataService) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object, typeof (_c = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _c || Object])\n    ], AbstractPlayerBuilderDataComponent);\n    return AbstractPlayerBuilderDataComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/component/player/player.builder.player.component.ts\nvar player_builder_player_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_player_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar player_builder_player_component_PlayerBuilderPlayerComponent = (function () {\n    function PlayerBuilderPlayerComponent(elementRef, route, video) {\n        this.elementRef = elementRef;\n        this.route = route;\n        this.video = video;\n    }\n    Object.defineProperty(PlayerBuilderPlayerComponent.prototype, \"height\", {\n        get: function () { return this.elementRef.nativeElement.getBoundingClientRect().height; },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderPlayerComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.route.data\n            .subscribe(function (d) {\n            if (PlayerBuilderRouteData.dataProvider in d) {\n                _this.video.config = {\n                    dataProvider: d[PlayerBuilderRouteData.dataProvider]\n                };\n            }\n        });\n    };\n    PlayerBuilderPlayerComponent.prototype.ngAfterViewInit = function () {\n        this.video.container = this.player.nativeElement;\n        this.video.create();\n    };\n    PlayerBuilderPlayerComponent.prototype.ngOnDestroy = function () {\n        this.video.destroy();\n    };\n    var _a, _b, _c, _d;\n    player_builder_player_component___decorate([\n        Object(core_es5[\"ViewChild\"])('player'),\n        player_builder_player_component___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], PlayerBuilderPlayerComponent.prototype, \"player\", void 0);\n    PlayerBuilderPlayerComponent = player_builder_player_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-player',\n            template: __webpack_require__(1451),\n            styles: [__webpack_require__(1452)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_builder_player_component___metadata(\"design:paramtypes\", [typeof (_b = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _b || Object, typeof (_c = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _c || Object, typeof (_d = typeof player_builder_video_service_PlayerBuilderVideoService !== \"undefined\" && player_builder_video_service_PlayerBuilderVideoService) === \"function\" && _d || Object])\n    ], PlayerBuilderPlayerComponent);\n    return PlayerBuilderPlayerComponent;\n}());\n\n\n// EXTERNAL MODULE: ./src/model/api.model.ts\nvar api_model = __webpack_require__(133);\n\n// CONCATENATED MODULE: ./src/module/player/service/player.list.data.service.ts\nvar player_list_data_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_list_data_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar player_list_data_service_PlayerListDataService = (function () {\n    function PlayerListDataService(service, user) {\n        this.service = service;\n        this.user = user;\n        this.stream = new Rx[\"BehaviorSubject\"](null);\n    }\n    PlayerListDataService.prototype.fetch = function () {\n        var _this = this;\n        if (this.user.accountId == null)\n            return Object(of[\"of\"])(null);\n        return this.service.listPlayers(this.user.accountId)\n            .pipe(Object(operators[\"tap\"])(function (r) { return _this.stream.next(r); }));\n    };\n    Object.defineProperty(PlayerListDataService.prototype, \"$\", {\n        get: function () {\n            return this.stream.asObservable();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    var _a, _b;\n    PlayerListDataService = player_list_data_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_list_data_service___metadata(\"design:paramtypes\", [typeof (_a = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object])\n    ], PlayerListDataService);\n    return PlayerListDataService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/player.builder.modal.service.ts\nvar player_builder_modal_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_modal_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar player_builder_modal_service_PlayerBuilderModalService = (function () {\n    function PlayerBuilderModalService(translation, modal) {\n        this.translation = translation;\n        this.modal = modal;\n    }\n    PlayerBuilderModalService.prototype.askToPublish = function () {\n        var _this = this;\n        return new Rx[\"Observable\"](function (o) {\n            function click(a) {\n                o.next(a);\n                o.complete();\n            }\n            _this.modal.prompt(_this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.TEXT'), [{\n                    label: _this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.YES'),\n                    fa: 'paper-plane', close: true, click: function () { return click(true); }\n                }, {\n                    label: _this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.NO'),\n                    fa: 'ban', close: true, click: function () { return click(false); }\n                }]);\n            return {\n                unsubscribe: function () {\n                    _this.modal.close();\n                }\n            };\n        });\n    };\n    PlayerBuilderModalService.prototype.askToSave = function () {\n        var _this = this;\n        return new Rx[\"Observable\"](function (o) {\n            function click(a) {\n                o.next(a);\n                o.complete();\n            }\n            _this.modal.prompt(_this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.TEXT'), [\n                {\n                    label: _this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.SAVE'),\n                    fa: 'save', close: true,\n                    click: function () { return click(PlayerBuilderCanLeaveModalAnswer.save); }\n                },\n                {\n                    label: _this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.DONT_SAVE'),\n                    fa: 'trash', close: true,\n                    click: function () { return click(PlayerBuilderCanLeaveModalAnswer.reset); }\n                },\n                {\n                    label: _this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.CANCEL'),\n                    fa: 'ban', close: true,\n                    click: function () { return o.next(PlayerBuilderCanLeaveModalAnswer.abort); }\n                }\n            ]);\n            return {\n                unsubscribe: function () {\n                    _this.modal.close();\n                }\n            };\n        });\n    };\n    var _a, _b;\n    PlayerBuilderModalService = player_builder_modal_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_builder_modal_service___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _a || Object, typeof (_b = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _b || Object])\n    ], PlayerBuilderModalService);\n    return PlayerBuilderModalService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/component/view/player.builder.view.component.ts\nvar player_builder_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar player_builder_view_component___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar player_builder_view_component_PlayerBuilderViewComponent = (function () {\n    function PlayerBuilderViewComponent(data, doc, cdr, api, list, view, modal, flash, sidebar) {\n        this.data = data;\n        this.doc = doc;\n        this.cdr = cdr;\n        this.api = api;\n        this.list = list;\n        this.view = view;\n        this.modal = modal;\n        this.flash = flash;\n        this.sidebar = sidebar;\n        this.TABS = [\n            { route: PlayerBuilderRoute.general, text: 'general', disabled: false, group: [PlayerBuilderRouteGroup.core], },\n            { route: PlayerBuilderRoute.playback, text: 'playback', disabled: false, group: [PlayerBuilderRouteGroup.video], },\n            { route: PlayerBuilderRoute.theme, text: 'theme', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n            { route: PlayerBuilderRoute.icons, text: 'icons', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n            { route: PlayerBuilderRoute.features, text: 'features', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n            { route: PlayerBuilderRoute.branding, text: 'branding', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n            { route: PlayerBuilderRoute.endsplash, text: 'end splash', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n        ];\n        this.SUCCESS_FLASH_CONFIG = { cssClass: 'alert-success', timeout: 2000 };\n        this.WARN_FLASH_CONFIG = { cssClass: 'alert-warning', timeout: 2000 };\n        this.RATIO_CLASSES = [\n            { value: 'ratio21x9', label: '21:9' },\n            { value: 'ratio16x9', label: '16:9' },\n            { value: 'ratio4x3', label: '4:3' },\n            { value: 'ratio3x2', label: '3:2' },\n            { value: 'ratio2x1', label: '2:1' },\n            { value: 'ratio1x1', label: '1:1' },\n        ];\n        this.withHeader = true;\n        this.previewHeight = null;\n        this.previewCss = null;\n        this.previewResizeActive = false;\n        this.previewResizeY = NaN;\n        this.previewResizeH = 0;\n        this.withHeader = !this.view.checkIfAppInIframe();\n    }\n    PlayerBuilderViewComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.data.init();\n        this.doc.body.classList.add('no-overflow');\n        this.dataSub = this.data.$\n            .subscribe(function (d) { return _this.onDataChange(d); });\n        this.playerDataSub = this.api.readPlayer$\n            .pipe(Object(operators[\"tap\"])(function (data) {\n            if (Object(api_model[\"a\" /* isPlayerReadResponseV2 */])(data))\n                _this.data.parseResponseData(data);\n        }), Object(operators[\"switchMap\"])(function () { return _this.list.$; }))\n            .subscribe(function (players) {\n            _this.sidebar.showPlayersMenu(players, _this.data.buildId, player_model[\"a\" /* PlayerRoute */].builder);\n        });\n    };\n    PlayerBuilderViewComponent.prototype.ngOnDestroy = function () {\n        this.data.destroy();\n        this.dataSub.unsubscribe();\n        this.playerDataSub.unsubscribe();\n        if (!!this.saveSub && !this.saveSub.closed)\n            this.saveSub.unsubscribe();\n        this.doc.body.classList.remove('no-overflow');\n    };\n    PlayerBuilderViewComponent.prototype.formatDate = function (uts) { return date_util_DateUtil.unixToDateString(uts); };\n    PlayerBuilderViewComponent.prototype.formatTime = function (uts) { return date_util_DateUtil.unixToTimeString(uts); };\n    PlayerBuilderViewComponent.prototype.canLeave$ = function () {\n        var _this = this;\n        if (!this.data.isDirty)\n            return Object(of[\"of\"])(true);\n        this.view.spinner(false);\n        return this.modal.askToSave()\n            .pipe(Object(operators[\"switchMap\"])(function (answer) {\n            switch (answer) {\n                case PlayerBuilderCanLeaveModalAnswer.save:\n                    return _this.save$();\n                case PlayerBuilderCanLeaveModalAnswer.reset:\n                    _this.data.reset();\n                    return Object(of[\"of\"])(true);\n                case PlayerBuilderCanLeaveModalAnswer.abort:\n                default:\n                    return Object(of[\"of\"])(false);\n            }\n        }));\n    };\n    PlayerBuilderViewComponent.prototype.clickSave = function () {\n        var _this = this;\n        if (!!this.saveSub && !this.saveSub.closed)\n            this.saveSub.unsubscribe();\n        this.saveSub = this.save$()\n            .subscribe(function () { return _this.cdr.markForCheck(); });\n    };\n    PlayerBuilderViewComponent.prototype.save$ = function () {\n        var _this = this;\n        this.view.spinner(true);\n        return this.data.save$()\n            .pipe(Object(operators[\"switchMap\"])(function (saved) {\n            _this.view.spinner(false);\n            if (!!saved) {\n                _this.flash.show(('build saved'), _this.SUCCESS_FLASH_CONFIG);\n                return _this.modal.askToPublish()\n                    .pipe(Object(operators[\"switchMap\"])(function (publish) {\n                    if (publish)\n                        return _this.publish$()\n                            .pipe(Object(operators[\"switchMap\"])(function () {\n                            _this.view.spinner(true);\n                            return _this.list.fetch();\n                        }));\n                    _this.view.spinner(true);\n                    return _this.list.fetch();\n                }), Object(operators[\"map\"])(function (list) {\n                    _this.sidebar.showPlayersMenu(list, _this.data.buildId, player_model[\"a\" /* PlayerRoute */].builder);\n                    _this.view.spinner(false);\n                    return true;\n                }));\n            }\n            _this.flash.show(('build fail to save'), _this.WARN_FLASH_CONFIG);\n            return Object(of[\"of\"])(false);\n        }), Object(operators[\"switchMap\"])(function (v) { return _this.api.readPlayer(_this.data.accountId, _this.data.buildId).pipe(Object(operators[\"map\"])(function (_) { return v; })); }));\n    };\n    PlayerBuilderViewComponent.prototype.publish$ = function () {\n        var _this = this;\n        this.view.spinner(true);\n        return this.data.publish$()\n            .pipe(Object(operators[\"switchMap\"])(function (published) {\n            _this.view.spinner(false);\n            if (published) {\n                _this.flash.show(('build published'), _this.SUCCESS_FLASH_CONFIG);\n                return Object(of[\"of\"])(true);\n            }\n            _this.flash.show(('build fail to publish'), _this.WARN_FLASH_CONFIG);\n            return Object(of[\"of\"])(false);\n        }));\n    };\n    PlayerBuilderViewComponent.prototype.onDataChange = function (cnf) {\n        var skinDisabled = !!cnf && !!cnf.plugin && 'HtmlSkin' in cnf.plugin ? !cnf.plugin.HtmlSkin : false;\n        for (var index = 0; index < this.TABS.length; index++) {\n            if (this.TABS[index].group.indexOf(PlayerBuilderRouteGroup.skin) > -1) {\n                if (this.TABS[index].disabled != skinDisabled) {\n                    this.TABS[index].disabled = skinDisabled;\n                    this.cdr.markForCheck();\n                }\n            }\n        }\n    };\n    PlayerBuilderViewComponent.prototype.handlePreviewResize = function (event) {\n        switch (event.type) {\n            case 'mousedown':\n                event.preventDefault();\n                this.previewResizeActive = true;\n                this.previewResizeY = event.clientY;\n                this.previewResizeH = this.previewComponent.height;\n                break;\n            case 'mousemove':\n                if (!this.previewResizeActive)\n                    return;\n                event.preventDefault();\n                this.previewHeight = this.previewResizeH + (event.clientY - this.previewResizeY) + \"px\";\n                this.previewCss = null;\n                this.cdr.markForCheck();\n                break;\n            case 'mouseup':\n                event.preventDefault();\n                this.previewResizeActive = false;\n                break;\n            default:\n                break;\n        }\n        ;\n    };\n    PlayerBuilderViewComponent.prototype.handlePreviewAspect = function (aspect) {\n        this.previewHeight = null;\n        this.previewCss = \"\" + aspect;\n        this.cdr.markForCheck();\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n    player_builder_view_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.with-header'),\n        player_builder_view_component___metadata(\"design:type\", Object)\n    ], PlayerBuilderViewComponent.prototype, \"withHeader\", void 0);\n    player_builder_view_component___decorate([\n        Object(core_es5[\"ViewChild\"])(player_builder_player_component_PlayerBuilderPlayerComponent),\n        player_builder_view_component___metadata(\"design:type\", typeof (_a = typeof player_builder_player_component_PlayerBuilderPlayerComponent !== \"undefined\" && player_builder_player_component_PlayerBuilderPlayerComponent) === \"function\" && _a || Object)\n    ], PlayerBuilderViewComponent.prototype, \"previewComponent\", void 0);\n    player_builder_view_component___decorate([\n        Object(core_es5[\"HostListener\"])('mousemove', ['$event']),\n        Object(core_es5[\"HostListener\"])('mouseup', ['$event']),\n        player_builder_view_component___metadata(\"design:type\", Function),\n        player_builder_view_component___metadata(\"design:paramtypes\", [typeof (_b = typeof PointerEvent !== \"undefined\" && PointerEvent) === \"function\" && _b || Object]),\n        player_builder_view_component___metadata(\"design:returntype\", void 0)\n    ], PlayerBuilderViewComponent.prototype, \"handlePreviewResize\", null);\n    PlayerBuilderViewComponent = player_builder_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-view',\n            template: __webpack_require__(1453),\n            styles: [__webpack_require__(1454)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_builder_view_component___param(1, Object(core_es5[\"Inject\"])(common_es5[\"DOCUMENT\"])),\n        player_builder_view_component___metadata(\"design:paramtypes\", [typeof (_c = typeof player_builder_data_service_PlayerBuilderDataService !== \"undefined\" && player_builder_data_service_PlayerBuilderDataService) === \"function\" && _c || Object, typeof (_d = typeof Document !== \"undefined\" && Document) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object, typeof (_f = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _f || Object, typeof (_g = typeof player_list_data_service_PlayerListDataService !== \"undefined\" && player_list_data_service_PlayerListDataService) === \"function\" && _g || Object, typeof (_h = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _h || Object, typeof (_j = typeof player_builder_modal_service_PlayerBuilderModalService !== \"undefined\" && player_builder_modal_service_PlayerBuilderModalService) === \"function\" && _j || Object, typeof (_k = typeof angular2_flash_messages[\"FlashMessagesService\"] !== \"undefined\" && angular2_flash_messages[\"FlashMessagesService\"]) === \"function\" && _k || Object, typeof (_l = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _l || Object])\n    ], PlayerBuilderViewComponent);\n    return PlayerBuilderViewComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/model/player.builder.tokens.ts\n\nvar player_builder_tokens_PLAYER_JS_SRC = new core_es5[\"InjectionToken\"]('PLAYER_JS_SRC');\nvar player_builder_tokens_PLAYER_CDN_URL = new core_es5[\"InjectionToken\"]('PLAYER_CDN_URL');\nvar PLAYER_DOCS_URL = new core_es5[\"InjectionToken\"]('PLAYER_DOCS_URL');\nvar PLAYER_DOCS_LINKS_URL = new core_es5[\"InjectionToken\"]('PLAYER_DOCS_LINKS_URL');\nvar PLAYER_SKIN_MEDIA_URL = new core_es5[\"InjectionToken\"]('PLAYER_SKIN_MEDIA_URL');\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/player.builder.docs.service.ts\nvar player_builder_docs_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar player_builder_docs_service_PlayerBuilderDocsService = (function () {\n    function PlayerBuilderDocsService() {\n        this.LINKS = {};\n    }\n    PlayerBuilderDocsService = player_builder_docs_service___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], PlayerBuilderDocsService);\n    return PlayerBuilderDocsService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/@common/docs/component/player.builder.docs.component.ts\nvar player_builder_docs_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_builder_docs_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_docs_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar player_builder_docs_component___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\nvar player_builder_docs_component_PlayerBuilderDocsComponent = (function (_super) {\n    player_builder_docs_component___extends(PlayerBuilderDocsComponent, _super);\n    function PlayerBuilderDocsComponent(BASE, locale, translation, docs) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.BASE = BASE;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.docs = docs;\n        return _this;\n    }\n    Object.defineProperty(PlayerBuilderDocsComponent.prototype, \"link\", {\n        get: function () {\n            if (this.key in this.docs.LINKS)\n                return this.docs.LINKS[this.key];\n            return this.key;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    var _a, _b, _c;\n    player_builder_docs_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        player_builder_docs_component___metadata(\"design:type\", String)\n    ], PlayerBuilderDocsComponent.prototype, \"key\", void 0);\n    PlayerBuilderDocsComponent = player_builder_docs_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-docs',\n            template: __webpack_require__(1455),\n            styles: [__webpack_require__(1456)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_builder_docs_component___param(0, Object(core_es5[\"Inject\"])(PLAYER_DOCS_URL)),\n        player_builder_docs_component___metadata(\"design:paramtypes\", [String, typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof player_builder_docs_service_PlayerBuilderDocsService !== \"undefined\" && player_builder_docs_service_PlayerBuilderDocsService) === \"function\" && _c || Object])\n    ], PlayerBuilderDocsComponent);\n    return PlayerBuilderDocsComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/@common/docs/player.builder.docs.module.ts\nvar player_builder_docs_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar player_builder_docs_module_COMP = [\n    player_builder_docs_component_PlayerBuilderDocsComponent\n];\nvar player_builder_docs_module_PlayerBuilderDocsModule = (function () {\n    function PlayerBuilderDocsModule() {\n    }\n    PlayerBuilderDocsModule = player_builder_docs_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n            ],\n            declarations: player_builder_docs_module_COMP.slice(),\n            entryComponents: player_builder_docs_module_COMP,\n            exports: player_builder_docs_module_COMP\n        })\n    ], PlayerBuilderDocsModule);\n    return PlayerBuilderDocsModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/branding/component/player.builder.branding.component.ts\nvar player_builder_branding_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_builder_branding_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_branding_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar player_builder_branding_component_PlayerBuilderBrandingComponent = (function (_super) {\n    player_builder_branding_component___extends(PlayerBuilderBrandingComponent, _super);\n    function PlayerBuilderBrandingComponent(data, cdr, route, translation, modal) {\n        var _this = _super.call(this, data, cdr, route) || this;\n        _this.data = data;\n        _this.cdr = cdr;\n        _this.route = route;\n        _this.translation = translation;\n        _this.modal = modal;\n        return _this;\n    }\n    PlayerBuilderBrandingComponent.prototype.onTooBigLogo = function (data) {\n        this.modal.prompt(this.translation.translate('PLAYER.CONFIG.TOO_BIG_LOGO', {\n            limitWidth: data.maxWidth,\n            limitHeight: data.maxHeight,\n            limitFileSize: data.maxFileSize\n        }), []);\n    };\n    var _a, _b, _c, _d, _e;\n    PlayerBuilderBrandingComponent = player_builder_branding_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-branding',\n            template: __webpack_require__(1457),\n            styles: [\n                __webpack_require__(73),\n                __webpack_require__(1458)\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_builder_branding_component___metadata(\"design:paramtypes\", [typeof (_a = typeof player_builder_data_service_PlayerBuilderDataService !== \"undefined\" && player_builder_data_service_PlayerBuilderDataService) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object, typeof (_c = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _e || Object])\n    ], PlayerBuilderBrandingComponent);\n    return PlayerBuilderBrandingComponent;\n}(abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/branding/player.builder.branding.module.ts\nvar player_builder_branding_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar PlayerBuilderBrandingRoutes = [\n    { path: '', component: player_builder_branding_component_PlayerBuilderBrandingComponent, },\n    { path: '**', redirectTo: '' }\n];\nvar player_builder_branding_module_COMP = PlayerBuilderBrandingRoutes.filter(function (r) { return !!r.component; }).map(function (r) { return r.component; });\nvar player_builder_branding_module_PlayerBuilderBrandingModule = (function () {\n    function PlayerBuilderBrandingModule() {\n    }\n    PlayerBuilderBrandingModule = player_builder_branding_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerBuilderBrandingRoutes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                player_builder_docs_module_PlayerBuilderDocsModule,\n            ],\n            declarations: player_builder_branding_module_COMP.slice(),\n            entryComponents: player_builder_branding_module_COMP,\n        })\n    ], PlayerBuilderBrandingModule);\n    return PlayerBuilderBrandingModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/end-splash/component/player.builder.end-splash.component.ts\nvar player_builder_end_splash_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_builder_end_splash_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_end_splash_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar player_builder_end_splash_component_PlayerBuilderEndSplashComponent = (function (_super) {\n    player_builder_end_splash_component___extends(PlayerBuilderEndSplashComponent, _super);\n    function PlayerBuilderEndSplashComponent(data, cdr, route, sanitizer, urlService) {\n        var _this = _super.call(this, data, cdr, route) || this;\n        _this.data = data;\n        _this.cdr = cdr;\n        _this.route = route;\n        _this.sanitizer = sanitizer;\n        _this.urlService = urlService;\n        _this.ENDSPLASHED = ['standard', 'countdown', 'tiles'];\n        return _this;\n    }\n    PlayerBuilderEndSplashComponent.prototype.formatImageSrc = function (endsplash) {\n        return this.sanitizer.bypassSecurityTrustUrl(this.urlService.file(\"img/builder/screenshots/end/\" + this.data.skinName + \".\" + endsplash + \".jpg\"));\n    };\n    var _a, _b, _c, _d, _e;\n    PlayerBuilderEndSplashComponent = player_builder_end_splash_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-end-splash',\n            template: __webpack_require__(1459),\n            styles: [\n                __webpack_require__(73),\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_builder_end_splash_component___metadata(\"design:paramtypes\", [typeof (_a = typeof player_builder_data_service_PlayerBuilderDataService !== \"undefined\" && player_builder_data_service_PlayerBuilderDataService) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object, typeof (_c = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _c || Object, typeof (_d = typeof platform_browser_es5[\"c\" /* DomSanitizer */] !== \"undefined\" && platform_browser_es5[\"c\" /* DomSanitizer */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], PlayerBuilderEndSplashComponent);\n    return PlayerBuilderEndSplashComponent;\n}(abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/end-splash/player.builder.end-splash.module.ts\nvar player_builder_end_splash_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar PlayerBuilderEndSplashRoutes = [\n    { path: '', component: player_builder_end_splash_component_PlayerBuilderEndSplashComponent, },\n    { path: '**', redirectTo: '' }\n];\nvar player_builder_end_splash_module_COMP = PlayerBuilderEndSplashRoutes.filter(function (r) { return !!r.component; }).map(function (r) { return r.component; });\nvar player_builder_end_splash_module_PlayerBuilderEndSplashModule = (function () {\n    function PlayerBuilderEndSplashModule() {\n    }\n    PlayerBuilderEndSplashModule = player_builder_end_splash_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerBuilderEndSplashRoutes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                player_builder_docs_module_PlayerBuilderDocsModule,\n            ],\n            declarations: player_builder_end_splash_module_COMP.slice(),\n            entryComponents: player_builder_end_splash_module_COMP,\n        })\n    ], PlayerBuilderEndSplashModule);\n    return PlayerBuilderEndSplashModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/features/component/player.builder.features.component.ts\nvar player_builder_features_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_builder_features_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar player_builder_features_component_PlayerBuilderFeaturesComponent = (function (_super) {\n    player_builder_features_component___extends(PlayerBuilderFeaturesComponent, _super);\n    function PlayerBuilderFeaturesComponent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PlayerBuilderFeaturesComponent = player_builder_features_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-features-view',\n            template: __webpack_require__(1460),\n            styles: [\n                __webpack_require__(73),\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        })\n    ], PlayerBuilderFeaturesComponent);\n    return PlayerBuilderFeaturesComponent;\n}(abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/features/player.builder.features.module.ts\nvar player_builder_features_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar PlayerBuilderGeneralRoutes = [\n    { path: '', component: player_builder_features_component_PlayerBuilderFeaturesComponent, },\n    { path: '**', redirectTo: '' }\n];\nvar player_builder_features_module_COMP = PlayerBuilderGeneralRoutes.filter(function (r) { return !!r.component; }).map(function (r) { return r.component; });\nvar player_builder_features_module_PlayerBuilderFeaturesModule = (function () {\n    function PlayerBuilderFeaturesModule() {\n    }\n    PlayerBuilderFeaturesModule = player_builder_features_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerBuilderGeneralRoutes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                player_builder_docs_module_PlayerBuilderDocsModule,\n            ],\n            declarations: player_builder_features_module_COMP.slice(),\n            entryComponents: player_builder_features_module_COMP,\n        })\n    ], PlayerBuilderFeaturesModule);\n    return PlayerBuilderFeaturesModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/@common/locales/pipe/player.builder.locales.name.pipe.ts\nvar player_builder_locales_name_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar player_builder_locales_name_pipe_PlayerBuilderLocalesNamePipe = (function () {\n    function PlayerBuilderLocalesNamePipe() {\n    }\n    PlayerBuilderLocalesNamePipe.prototype.transform = function (code) {\n        switch (code) {\n            case 'en': return 'english';\n            case 'da': return 'danish';\n            case 'fi': return 'finnish';\n            case 'pl': return 'polish';\n            case 'no': return 'norwegian';\n            case 'sv': return 'swedish';\n            default:\n                return code;\n        }\n        ;\n    };\n    PlayerBuilderLocalesNamePipe = player_builder_locales_name_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'localeName', pure: true })\n    ], PlayerBuilderLocalesNamePipe);\n    return PlayerBuilderLocalesNamePipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/@common/locales/pipe/player.builder.locales.pipe.module.ts\nvar player_builder_locales_pipe_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar PIPES = [\n    player_builder_locales_name_pipe_PlayerBuilderLocalesNamePipe,\n];\nvar player_builder_locales_pipe_module_PlayerBuilderLocalesPipeModule = (function () {\n    function PlayerBuilderLocalesPipeModule() {\n    }\n    PlayerBuilderLocalesPipeModule = player_builder_locales_pipe_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            declarations: PIPES.slice(),\n            exports: PIPES.slice(),\n        })\n    ], PlayerBuilderLocalesPipeModule);\n    return PlayerBuilderLocalesPipeModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/general/component/player.builder.general.component.ts\nvar player_builder_general_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_builder_general_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar player_builder_general_component_PlayerBuilderGeneralComponent = (function (_super) {\n    player_builder_general_component___extends(PlayerBuilderGeneralComponent, _super);\n    function PlayerBuilderGeneralComponent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PlayerBuilderGeneralComponent = player_builder_general_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-general',\n            template: __webpack_require__(1461),\n            styles: [\n                __webpack_require__(73),\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        })\n    ], PlayerBuilderGeneralComponent);\n    return PlayerBuilderGeneralComponent;\n}(abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/general/player.builder.general.module.ts\nvar player_builder_general_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\nvar player_builder_general_module_PlayerBuilderGeneralRoutes = [\n    { path: '', component: player_builder_general_component_PlayerBuilderGeneralComponent, },\n    { path: '**', redirectTo: '' }\n];\nvar player_builder_general_module_COMP = player_builder_general_module_PlayerBuilderGeneralRoutes.filter(function (r) { return !!r.component; }).map(function (r) { return r.component; });\nvar player_builder_general_module_PlayerBuilderGeneralModule = (function () {\n    function PlayerBuilderGeneralModule() {\n    }\n    PlayerBuilderGeneralModule = player_builder_general_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(player_builder_general_module_PlayerBuilderGeneralRoutes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                player_builder_docs_module_PlayerBuilderDocsModule,\n                player_builder_locales_pipe_module_PlayerBuilderLocalesPipeModule,\n            ],\n            declarations: player_builder_general_module_COMP.slice(),\n            entryComponents: player_builder_general_module_COMP,\n            exports: player_builder_general_module_COMP\n        })\n    ], PlayerBuilderGeneralModule);\n    return PlayerBuilderGeneralModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/clipboard/clipboard.service.ts\nvar clipboard_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar clipboard_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar clipboard_service___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\nvar clipboard_service_ClipboardService = (function () {\n    function ClipboardService(doc, flash) {\n        this.doc = doc;\n        this.flash = flash;\n        this.SUCCESS_FLASH_CONFIG = { cssClass: 'alert-success', timeout: 2000 };\n        this.WARN_FLASH_CONFIG = { cssClass: 'alert-warning', timeout: 2000 };\n    }\n    ClipboardService.prototype.copy = function (textOrTextarea) {\n        var _this = this;\n        return new Rx[\"Observable\"](function (o) {\n            var asText = typeof textOrTextarea === 'string';\n            var asTextArea = textOrTextarea instanceof HTMLTextAreaElement;\n            var textArea;\n            if (asText) {\n                textArea = _this.doc.createElement(\"textarea\");\n                textArea.style.position = 'absolute';\n                textArea.style.zIndex = '0';\n                textArea.value = textOrTextarea;\n                _this.doc.body.appendChild(textArea);\n            }\n            if (asTextArea) {\n                textArea = textOrTextarea;\n            }\n            var success = false;\n            if (!!textArea) {\n                textArea.focus();\n                textArea.select();\n                try {\n                    success = _this.doc.execCommand('copy');\n                }\n                catch (err) {\n                    console.error('Oops, unable to copy', err);\n                }\n            }\n            if (success)\n                _this.flash.show('Copied to clipboard', _this.SUCCESS_FLASH_CONFIG);\n            else\n                _this.flash.show('Oops, unable to copy', _this.WARN_FLASH_CONFIG);\n            if (asText) {\n                _this.doc.body.removeChild(textArea);\n            }\n            o.next(success);\n            o.complete();\n            return function copyToClipboardUnsubscribe() {\n            };\n        });\n    };\n    var _a, _b;\n    ClipboardService = clipboard_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        clipboard_service___param(0, Object(core_es5[\"Inject\"])(common_es5[\"DOCUMENT\"])),\n        clipboard_service___metadata(\"design:paramtypes\", [typeof (_a = typeof Document !== \"undefined\" && Document) === \"function\" && _a || Object, typeof (_b = typeof angular2_flash_messages[\"FlashMessagesService\"] !== \"undefined\" && angular2_flash_messages[\"FlashMessagesService\"]) === \"function\" && _b || Object])\n    ], ClipboardService);\n    return ClipboardService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/charCode/char.code.pipe.ts\nvar char_code_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar char_code_pipe_CharCodePipe = (function () {\n    function CharCodePipe() {\n    }\n    CharCodePipe.prototype.transform = function (code) {\n        return String.fromCharCode(parseInt(code, 16));\n    };\n    CharCodePipe = char_code_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'charCode' })\n    ], CharCodePipe);\n    return CharCodePipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/charCode/char.code.module.ts\nvar char_code_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar char_code_module_CharCodePipeModule = (function () {\n    function CharCodePipeModule() {\n    }\n    CharCodePipeModule = char_code_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            declarations: [char_code_pipe_CharCodePipe],\n            exports: [char_code_pipe_CharCodePipe],\n        })\n    ], CharCodePipeModule);\n    return CharCodePipeModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/objectKeys/object.keys.pipe.ts\nvar object_keys_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar object_keys_pipe_ObjectKeysPipe = (function () {\n    function ObjectKeysPipe() {\n    }\n    ObjectKeysPipe.prototype.transform = function (value) {\n        return Object.keys(value);\n    };\n    ObjectKeysPipe = object_keys_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'keys' })\n    ], ObjectKeysPipe);\n    return ObjectKeysPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/objectKeys/object.keys.module.ts\nvar object_keys_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar object_keys_module_ObjectKeysPipeModule = (function () {\n    function ObjectKeysPipeModule() {\n    }\n    ObjectKeysPipeModule = object_keys_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            declarations: [object_keys_pipe_ObjectKeysPipe],\n            exports: [object_keys_pipe_ObjectKeysPipe],\n        })\n    ], ObjectKeysPipeModule);\n    return ObjectKeysPipeModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/@common/icon/component/select/player.builder.icon.select.component.ts\nvar player_builder_icon_select_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_icon_select_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\nvar player_builder_icon_select_component_PlayerBuilderIconSelectComponent = (function () {\n    function PlayerBuilderIconSelectComponent(cdr) {\n        this.cdr = cdr;\n        this.valueChange = new core_es5[\"EventEmitter\"]();\n        this._label = \"\";\n        this._OPTIONS = [];\n    }\n    Object.defineProperty(PlayerBuilderIconSelectComponent.prototype, \"OPTIONS\", {\n        get: function () { return this._OPTIONS; },\n        set: function (v) {\n            this._OPTIONS = v;\n            this.cdr.markForCheck();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderIconSelectComponent.prototype, \"label\", {\n        get: function () { return this._label; },\n        set: function (v) { this._label = v; this.cdr.markForCheck(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderIconSelectComponent.prototype, \"disabled\", {\n        get: function () { return this._disabled; },\n        set: function (v) { this._disabled = v; this.cdr.markForCheck(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderIconSelectComponent.prototype, \"value\", {\n        get: function () { return this._value; },\n        set: function (v) {\n            this._value = v;\n            this.cdr.markForCheck();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderIconSelectComponent.prototype, \"valueId\", {\n        get: function () {\n            if (this._value && 'font' in this._value)\n                return this._value.font.id;\n            if (this._value && 'svg' in this._value)\n                return this._value.svg.id;\n            return null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderIconSelectComponent.prototype, \"isValueFont\", {\n        get: function () { return 'font' in this._value; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderIconSelectComponent.prototype, \"isValueSvg\", {\n        get: function () { return 'svg' in this._value; },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderIconSelectComponent.prototype.formatText = function (fontOrIcon) {\n        if ('family' in fontOrIcon)\n            return \"font | \" + fontOrIcon.name;\n        if ('iconset' in fontOrIcon)\n            return \" svg | \" + fontOrIcon.name;\n        return \"\" + fontOrIcon.name;\n    };\n    PlayerBuilderIconSelectComponent.prototype.emitOptionById = function (id) {\n        var item = this.optionById(id);\n        if ('family' in item)\n            this.valueChange.emit({ font: item });\n        if ('iconset' in item)\n            this.valueChange.emit({ svg: item });\n    };\n    PlayerBuilderIconSelectComponent.prototype.optionById = function (id) {\n        return this.OPTIONS.find(function (f) { return f.id === id; });\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n    player_builder_icon_select_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        player_builder_icon_select_component___metadata(\"design:type\", Array),\n        player_builder_icon_select_component___metadata(\"design:paramtypes\", [Array])\n    ], PlayerBuilderIconSelectComponent.prototype, \"OPTIONS\", null);\n    player_builder_icon_select_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        player_builder_icon_select_component___metadata(\"design:type\", String),\n        player_builder_icon_select_component___metadata(\"design:paramtypes\", [String])\n    ], PlayerBuilderIconSelectComponent.prototype, \"label\", null);\n    player_builder_icon_select_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        player_builder_icon_select_component___metadata(\"design:type\", Boolean),\n        player_builder_icon_select_component___metadata(\"design:paramtypes\", [Boolean])\n    ], PlayerBuilderIconSelectComponent.prototype, \"disabled\", null);\n    player_builder_icon_select_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        player_builder_icon_select_component___metadata(\"design:type\", Object),\n        player_builder_icon_select_component___metadata(\"design:paramtypes\", [Object])\n    ], PlayerBuilderIconSelectComponent.prototype, \"value\", null);\n    player_builder_icon_select_component___decorate([\n        Object(core_es5[\"Output\"])(),\n        player_builder_icon_select_component___metadata(\"design:type\", Object)\n    ], PlayerBuilderIconSelectComponent.prototype, \"valueChange\", void 0);\n    player_builder_icon_select_component___decorate([\n        Object(core_es5[\"HostBinding\"])('class.disabled'),\n        player_builder_icon_select_component___metadata(\"design:type\", Boolean)\n    ], PlayerBuilderIconSelectComponent.prototype, \"_disabled\", void 0);\n    PlayerBuilderIconSelectComponent = player_builder_icon_select_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-icon-select',\n            template: __webpack_require__(1462),\n            styles: [\n                __webpack_require__(73),\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_builder_icon_select_component___metadata(\"design:paramtypes\", [typeof (_j = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _j || Object])\n    ], PlayerBuilderIconSelectComponent);\n    return PlayerBuilderIconSelectComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/@common/icon/pipe/player.builder.icon.svg.href.pipe.ts\nvar player_builder_icon_svg_href_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_icon_svg_href_pipe___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar player_builder_icon_svg_href_pipe___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\nvar player_builder_icon_svg_href_pipe_PlayerBuilderIconSvgHrefPipe = (function () {\n    function PlayerBuilderIconSvgHrefPipe(doc) {\n        this.doc = doc;\n    }\n    PlayerBuilderIconSvgHrefPipe.prototype.transform = function (value, skinStateIcoPrefix) {\n        if (!!this.doc.location.hash && this.doc.location.hash.length > 0) {\n            return this.doc.location.href.split(this.doc.location.hash).join(\"#\" + skinStateIcoPrefix + value);\n        }\n        return this.doc.location.href + \"#\" + skinStateIcoPrefix + value;\n    };\n    var _a;\n    PlayerBuilderIconSvgHrefPipe = player_builder_icon_svg_href_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'iconSvgHref' }),\n        player_builder_icon_svg_href_pipe___param(0, Object(core_es5[\"Inject\"])(common_es5[\"DOCUMENT\"])),\n        player_builder_icon_svg_href_pipe___metadata(\"design:paramtypes\", [typeof (_a = typeof Document !== \"undefined\" && Document) === \"function\" && _a || Object])\n    ], PlayerBuilderIconSvgHrefPipe);\n    return PlayerBuilderIconSvgHrefPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/@common/icon/pipe/player.builder.icon.font.link.pipe.ts\nvar player_builder_icon_font_link_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_icon_font_link_pipe___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar player_builder_icon_font_link_pipe___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\nvar player_builder_icon_font_link_pipe_PlayerBuilderIconFontLinkPipe = (function () {\n    function PlayerBuilderIconFontLinkPipe(doc) {\n        this.doc = doc;\n    }\n    PlayerBuilderIconFontLinkPipe.prototype.transform = function (href, version) {\n        if (!!href && !!version)\n            return \"<link href=\\\"\" + href.split('VERSION').join(version) + \"\\\" rel=\\\"stylesheet\\\">\";\n        return \"<link href=\\\"\" + href + \"\\\" rel=\\\"stylesheet\\\">\";\n    };\n    var _a;\n    PlayerBuilderIconFontLinkPipe = player_builder_icon_font_link_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'iconFontLink' }),\n        player_builder_icon_font_link_pipe___param(0, Object(core_es5[\"Inject\"])(common_es5[\"DOCUMENT\"])),\n        player_builder_icon_font_link_pipe___metadata(\"design:paramtypes\", [typeof (_a = typeof Document !== \"undefined\" && Document) === \"function\" && _a || Object])\n    ], PlayerBuilderIconFontLinkPipe);\n    return PlayerBuilderIconFontLinkPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/@common/icon/player.builder.icon.module.ts\nvar player_builder_icon_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\nvar player_builder_icon_module_COMP = [\n    player_builder_icon_select_component_PlayerBuilderIconSelectComponent,\n];\nvar player_builder_icon_module_PlayerBuilderIconModule = (function () {\n    function PlayerBuilderIconModule() {\n    }\n    PlayerBuilderIconModule = player_builder_icon_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                forms_es5[\"FormsModule\"],\n            ],\n            declarations: [\n                player_builder_icon_svg_href_pipe_PlayerBuilderIconSvgHrefPipe,\n                player_builder_icon_font_link_pipe_PlayerBuilderIconFontLinkPipe\n            ].concat(player_builder_icon_module_COMP),\n            entryComponents: player_builder_icon_module_COMP,\n            exports: [\n                player_builder_icon_svg_href_pipe_PlayerBuilderIconSvgHrefPipe,\n                player_builder_icon_font_link_pipe_PlayerBuilderIconFontLinkPipe,\n                player_builder_icon_module_COMP,\n            ]\n        })\n    ], PlayerBuilderIconModule);\n    return PlayerBuilderIconModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/icons/component/player.builder.icons.component.ts\nvar player_builder_icons_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_builder_icons_component___assign = (this && this.__assign) || Object.assign || function(t) {\n    for (var s, i = 1, n = arguments.length; i < n; i++) {\n        s = arguments[i];\n        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n            t[p] = s[p];\n    }\n    return t;\n};\nvar player_builder_icons_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_icons_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar player_builder_icons_component_PlayerBuilderIconsComponent = (function (_super) {\n    player_builder_icons_component___extends(PlayerBuilderIconsComponent, _super);\n    function PlayerBuilderIconsComponent(data, cdr, route, clipboard) {\n        var _this = _super.call(this, data, cdr, route) || this;\n        _this.data = data;\n        _this.cdr = cdr;\n        _this.route = route;\n        _this.clipboard = clipboard;\n        _this.OPTIONS = _this.data.RESOURCE.icon\n            ? _this.data.RESOURCE.icon.fonts.concat(_this.data.RESOURCE.icon.svgs)\n            : [];\n        return _this;\n    }\n    Object.defineProperty(PlayerBuilderIconsComponent.prototype, \"activeIconFont\", {\n        get: function () {\n            var _this = this;\n            return this.data.skinIconFont ? this.OPTIONS.find(function (f) { return f.id === _this.data.skinIconFont.id; }) : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderIconsComponent.prototype, \"activeIconFontForm\", {\n        get: function () { return 'form' in this.activeIconFont ? this.activeIconFont.form : null; },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderIconsComponent.prototype.emitVariation = function (key, value) {\n        var _a;\n        this.data.skinIconFontVariation = player_builder_icons_component___assign({}, this.data.skinIconFontVariation, (_a = {}, _a[key] = value, _a));\n        this.cdr.markForCheck();\n    };\n    PlayerBuilderIconsComponent.prototype.copyLink = function (element) { this.clipboard.copy(element).subscribe(); };\n    var _a, _b, _c, _d;\n    PlayerBuilderIconsComponent = player_builder_icons_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-icons',\n            template: __webpack_require__(1463),\n            styles: [\n                __webpack_require__(73),\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_builder_icons_component___metadata(\"design:paramtypes\", [typeof (_a = typeof player_builder_data_service_PlayerBuilderDataService !== \"undefined\" && player_builder_data_service_PlayerBuilderDataService) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object, typeof (_c = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _c || Object, typeof (_d = typeof clipboard_service_ClipboardService !== \"undefined\" && clipboard_service_ClipboardService) === \"function\" && _d || Object])\n    ], PlayerBuilderIconsComponent);\n    return PlayerBuilderIconsComponent;\n}(abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/icons/player.builder.icons.module.ts\nvar player_builder_icons_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\nvar PlayerBuilderThemeRoutes = [\n    { path: '', component: player_builder_icons_component_PlayerBuilderIconsComponent, },\n    { path: '**', redirectTo: '' }\n];\nvar player_builder_icons_module_COMP = PlayerBuilderThemeRoutes.filter(function (r) { return !!r.component; }).map(function (r) { return r.component; });\nvar player_builder_icons_module_PlayerBuilderIconsModule = (function () {\n    function PlayerBuilderIconsModule() {\n    }\n    PlayerBuilderIconsModule = player_builder_icons_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerBuilderThemeRoutes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                colorpicker_module_ColorpickerModule,\n                player_builder_docs_module_PlayerBuilderDocsModule,\n                player_builder_icon_module_PlayerBuilderIconModule,\n                object_keys_module_ObjectKeysPipeModule,\n                char_code_module_CharCodePipeModule,\n            ],\n            providers: [clipboard_service_ClipboardService],\n            declarations: player_builder_icons_module_COMP.slice(),\n            entryComponents: player_builder_icons_module_COMP,\n        })\n    ], PlayerBuilderIconsModule);\n    return PlayerBuilderIconsModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/playback/component/player.builder.playback.component.ts\nvar player_builder_playback_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_builder_playback_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\nvar player_builder_playback_component_PlayerBuilderPlaybackComponent = (function (_super) {\n    player_builder_playback_component___extends(PlayerBuilderPlaybackComponent, _super);\n    function PlayerBuilderPlaybackComponent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    PlayerBuilderPlaybackComponent = player_builder_playback_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-playback',\n            template: __webpack_require__(1464),\n            styles: [\n                __webpack_require__(73),\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        })\n    ], PlayerBuilderPlaybackComponent);\n    return PlayerBuilderPlaybackComponent;\n}(abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/playback/player.builder.playback.module.ts\nvar player_builder_playback_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar PlayerBuilderPlaybackRoutes = [\n    { path: '', component: player_builder_playback_component_PlayerBuilderPlaybackComponent, },\n    { path: '**', redirectTo: '' }\n];\nvar player_builder_playback_module_COMP = PlayerBuilderPlaybackRoutes.filter(function (r) { return !!r.component; }).map(function (r) { return r.component; });\nvar player_builder_playback_module_PlayerBuilderPlaybackModule = (function () {\n    function PlayerBuilderPlaybackModule() {\n    }\n    PlayerBuilderPlaybackModule = player_builder_playback_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerBuilderPlaybackRoutes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                player_builder_docs_module_PlayerBuilderDocsModule,\n            ],\n            declarations: player_builder_playback_module_COMP.slice(),\n            entryComponents: player_builder_playback_module_COMP,\n        })\n    ], PlayerBuilderPlaybackModule);\n    return PlayerBuilderPlaybackModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/theme/component/player.builder.theme.component.ts\nvar player_builder_theme_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_builder_theme_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_theme_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar player_builder_theme_component_PlayerBuilderThemeComponent = (function (_super) {\n    player_builder_theme_component___extends(PlayerBuilderThemeComponent, _super);\n    function PlayerBuilderThemeComponent(data, cdr, route, sanitizer, urlService, clipboard) {\n        var _this = _super.call(this, data, cdr, route) || this;\n        _this.data = data;\n        _this.cdr = cdr;\n        _this.route = route;\n        _this.sanitizer = sanitizer;\n        _this.urlService = urlService;\n        _this.clipboard = clipboard;\n        _this.TEXT_FONTS = _this.data.RESOURCE.fonts;\n        _this.SKIN_THEMES = _this.data.RESOURCE.themes;\n        return _this;\n    }\n    PlayerBuilderThemeComponent.prototype.formatImageSrc = function (theme) { return this.sanitizer.bypassSecurityTrustUrl(this.urlService.file(\"img/builder/screenshots/theme/\" + theme + \".jpg\")); };\n    PlayerBuilderThemeComponent.prototype.fontById = function (id) { return this.TEXT_FONTS.find(function (f) { return f.id === id; }); };\n    PlayerBuilderThemeComponent.prototype.copyLink = function (element) { this.clipboard.copy(element).subscribe(); };\n    var _a, _b, _c, _d, _e, _f;\n    PlayerBuilderThemeComponent = player_builder_theme_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-builder-theme',\n            template: __webpack_require__(1465),\n            styles: [\n                __webpack_require__(73),\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_builder_theme_component___metadata(\"design:paramtypes\", [typeof (_a = typeof player_builder_data_service_PlayerBuilderDataService !== \"undefined\" && player_builder_data_service_PlayerBuilderDataService) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object, typeof (_c = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _c || Object, typeof (_d = typeof platform_browser_es5[\"c\" /* DomSanitizer */] !== \"undefined\" && platform_browser_es5[\"c\" /* DomSanitizer */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object, typeof (_f = typeof clipboard_service_ClipboardService !== \"undefined\" && clipboard_service_ClipboardService) === \"function\" && _f || Object])\n    ], PlayerBuilderThemeComponent);\n    return PlayerBuilderThemeComponent;\n}(abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/modules/theme/player.builder.theme.module.ts\nvar player_builder_theme_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar player_builder_theme_module_PlayerBuilderThemeRoutes = [\n    {\n        path: '',\n        component: player_builder_theme_component_PlayerBuilderThemeComponent,\n    },\n    { path: '**', redirectTo: '' }\n];\nvar player_builder_theme_module_COMP = player_builder_theme_module_PlayerBuilderThemeRoutes.filter(function (r) { return !!r.component; }).map(function (r) { return r.component; });\nvar player_builder_theme_module_PlayerBuilderThemeModule = (function () {\n    function PlayerBuilderThemeModule() {\n    }\n    PlayerBuilderThemeModule = player_builder_theme_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(player_builder_theme_module_PlayerBuilderThemeRoutes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                colorpicker_module_ColorpickerModule,\n                player_builder_docs_module_PlayerBuilderDocsModule,\n                object_keys_module_ObjectKeysPipeModule,\n                player_builder_icon_module_PlayerBuilderIconModule,\n            ],\n            providers: [clipboard_service_ClipboardService],\n            declarations: player_builder_theme_module_COMP.slice(),\n            entryComponents: player_builder_theme_module_COMP,\n        })\n    ], PlayerBuilderThemeModule);\n    return PlayerBuilderThemeModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/guard/player.builder.activate.guard.ts\nvar player_builder_activate_guard___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_activate_guard___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar player_builder_activate_guard_PlayerBuilderActivateGuard = (function () {\n    function PlayerBuilderActivateGuard(router, service, user) {\n        this.router = router;\n        this.service = service;\n        this.user = user;\n    }\n    PlayerBuilderActivateGuard.prototype.canActivate = function (route, _state) {\n        var _this = this;\n        var buildId = route.params['id'];\n        if (buildId == null || this.user.accountId == null)\n            return this.gotoPlayers();\n        return this.service.readPlayer(this.user.accountId, buildId)\n            .pipe(Object(operators[\"map\"])(function (resp) {\n            if (!resp || !resp.conf_json)\n                return _this.gotoPlayers();\n            if (Object(api_model[\"b\" /* isPlayerV2 */])(resp))\n                return true;\n            return _this.gotoConfigurator(buildId);\n        }));\n    };\n    PlayerBuilderActivateGuard.prototype.gotoPlayers = function () {\n        this.router.navigate(['admin', 'player']);\n        return false;\n    };\n    PlayerBuilderActivateGuard.prototype.gotoConfigurator = function (buildId) {\n        this.router.navigate(['admin', 'player', buildId, player_model[\"a\" /* PlayerRoute */].configurator]);\n        return false;\n    };\n    var _a, _b, _c;\n    PlayerBuilderActivateGuard = player_builder_activate_guard___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_builder_activate_guard___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _a || Object, typeof (_b = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _b || Object, typeof (_c = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _c || Object])\n    ], PlayerBuilderActivateGuard);\n    return PlayerBuilderActivateGuard;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/guard/player.builder.deactivate.guard.ts\nvar player_builder_deactivate_guard___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar player_builder_deactivate_guard_PlayerBuilderDeactivateGuard = (function () {\n    function PlayerBuilderDeactivateGuard() {\n    }\n    PlayerBuilderDeactivateGuard.prototype.canDeactivate = function (component, _currentRoute, _currentState, _nextState) {\n        return component.canLeave$();\n    };\n    PlayerBuilderDeactivateGuard = player_builder_deactivate_guard___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], PlayerBuilderDeactivateGuard);\n    return PlayerBuilderDeactivateGuard;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/resolve/http/player.builder.docs.links.resolve.service.ts\nvar player_builder_docs_links_resolve_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_docs_links_resolve_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar player_builder_docs_links_resolve_service___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\n\n\nvar player_builder_docs_links_resolve_service_PlayerBuilderDocksLinksResolveService = (function () {\n    function PlayerBuilderDocksLinksResolveService(http, docks, urlService, url) {\n        this.http = http;\n        this.docks = docks;\n        this.urlService = urlService;\n        this.url = url;\n    }\n    PlayerBuilderDocksLinksResolveService.prototype.resolve = function (_route, _state) {\n        var _this = this;\n        return this.http.get(this.urlService.file(this.url))\n            .pipe(Object(operators[\"map\"])(function (response) {\n            try {\n                _this.docks.LINKS = response.json();\n            }\n            catch (e) {\n                console.error(e);\n                return _this.docks.LINKS;\n            }\n            return _this.docks.LINKS;\n        }));\n    };\n    var _a, _b, _c;\n    PlayerBuilderDocksLinksResolveService = player_builder_docs_links_resolve_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_builder_docs_links_resolve_service___param(3, Object(core_es5[\"Inject\"])(PLAYER_DOCS_LINKS_URL)),\n        player_builder_docs_links_resolve_service___metadata(\"design:paramtypes\", [typeof (_a = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _a || Object, typeof (_b = typeof player_builder_docs_service_PlayerBuilderDocsService !== \"undefined\" && player_builder_docs_service_PlayerBuilderDocsService) === \"function\" && _b || Object, typeof (_c = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _c || Object, String])\n    ], PlayerBuilderDocksLinksResolveService);\n    return PlayerBuilderDocksLinksResolveService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/resolve/http/player.builder.media.resolve.service.ts\nvar player_builder_media_resolve_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_media_resolve_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar player_builder_media_resolve_service___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\n\nvar player_builder_media_resolve_service_PlayerBuilderMediaResolveService = (function () {\n    function PlayerBuilderMediaResolveService(http, urlService, url) {\n        this.http = http;\n        this.urlService = urlService;\n        this.url = url;\n    }\n    PlayerBuilderMediaResolveService.prototype.resolve = function (_route, _state) {\n        return this.http.get(this.urlService.file(this.url))\n            .pipe(Object(operators[\"map\"])(function (response) {\n            var media = null;\n            try {\n                var r = response.json();\n                media = r.dataProvider;\n            }\n            catch (e) {\n                console.error(e);\n                return media;\n            }\n            return media;\n        }));\n    };\n    var _a, _b;\n    PlayerBuilderMediaResolveService = player_builder_media_resolve_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_builder_media_resolve_service___param(2, Object(core_es5[\"Inject\"])(PLAYER_SKIN_MEDIA_URL)),\n        player_builder_media_resolve_service___metadata(\"design:paramtypes\", [typeof (_a = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _a || Object, typeof (_b = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _b || Object, String])\n    ], PlayerBuilderMediaResolveService);\n    return PlayerBuilderMediaResolveService;\n}());\n\n\n// CONCATENATED MODULE: ./src/util/url.util.ts\nvar UrlUtil = (function () {\n    function UrlUtil() {\n    }\n    UrlUtil.format = function (base, url) {\n        return (base.endsWith('/') ? base.slice(-1) : base) + (url.startsWith('/') ? url : \"/\" + url);\n    };\n    UrlUtil.map = function (base, urls) {\n        return urls.map(function (u) { return UrlUtil.format(base, u); });\n    };\n    return UrlUtil;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/service/resolve/js/player.builder.js.resolve.service.ts\nvar player_builder_js_resolve_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_js_resolve_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar player_builder_js_resolve_service___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\n\nvar player_builder_js_resolve_service_PlayerBuilderJsResolveService = (function () {\n    function PlayerBuilderJsResolveService(doc, PLAYER_CDN_URL, PLAYER_JS_SRC) {\n        this.doc = doc;\n        this.PLAYER_CDN_URL = PLAYER_CDN_URL;\n        this.PLAYER_JS_SRC = PLAYER_JS_SRC;\n        this.src = UrlUtil.format(this.PLAYER_CDN_URL, this.PLAYER_JS_SRC);\n    }\n    PlayerBuilderJsResolveService.prototype.resolve = function (_route, _state) {\n        var _this = this;\n        var head = this.doc.getElementsByTagName('head')[0];\n        var headScripts = head.getElementsByTagName('script');\n        for (var index = 0; index < headScripts.length; index++) {\n            var element = headScripts.item(index);\n            if (element && 'src' in element && element.src === this.src) {\n                return true;\n            }\n        }\n        return new Rx[\"Observable\"](function (s) {\n            var script = document.createElement('script');\n            script.type = 'text/javascript';\n            script.async = true;\n            script.defer = true;\n            script.charset = 'utf-8';\n            script.addEventListener('error', function (e) { return s.error(e); }, false);\n            script.addEventListener('load', function () {\n                s.next(true);\n                s.complete();\n            }, false);\n            script.src = _this.src;\n            head.appendChild(script);\n        });\n    };\n    var _a;\n    PlayerBuilderJsResolveService = player_builder_js_resolve_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_builder_js_resolve_service___param(0, Object(core_es5[\"Inject\"])(common_es5[\"DOCUMENT\"])),\n        player_builder_js_resolve_service___param(1, Object(core_es5[\"Inject\"])(player_builder_tokens_PLAYER_CDN_URL)),\n        player_builder_js_resolve_service___param(2, Object(core_es5[\"Inject\"])(player_builder_tokens_PLAYER_JS_SRC)),\n        player_builder_js_resolve_service___metadata(\"design:paramtypes\", [typeof (_a = typeof Document !== \"undefined\" && Document) === \"function\" && _a || Object, String, String])\n    ], PlayerBuilderJsResolveService);\n    return PlayerBuilderJsResolveService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/builder/player.builder.module.ts\nvar player_builder_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_builder_module__a, player_builder_module__b, player_builder_module__c, player_builder_module__d, player_builder_module__e, player_builder_module__f, player_builder_module__g, player_builder_module__h;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar player_builder_module_LOCAL_PROVIDERS = [\n    { provide: player_builder_tokens_PLAYER_CDN_URL, useValue: 'https://bradm.ax/build/000000/00/builder' },\n    { provide: player_builder_tokens_PLAYER_JS_SRC, useValue: 'player.js' },\n    { provide: PLAYER_DOCS_URL, useValue: 'https://bradmax.com/static/player-doc' },\n    { provide: PLAYER_DOCS_LINKS_URL, useValue: 'data/builder/docs.links.json' },\n    { provide: PLAYER_SKIN_MEDIA_URL, useValue: 'data/builder/media.json' },\n    player_builder_activate_guard_PlayerBuilderActivateGuard,\n    player_builder_deactivate_guard_PlayerBuilderDeactivateGuard,\n    player_builder_js_resolve_service_PlayerBuilderJsResolveService,\n    player_builder_docs_links_resolve_service_PlayerBuilderDocksLinksResolveService,\n    player_builder_media_resolve_service_PlayerBuilderMediaResolveService,\n    player_builder_data_diff_service_PlayerBuilderDataDiffService,\n    player_builder_data_service_PlayerBuilderDataService,\n    player_builder_modal_service_PlayerBuilderModalService,\n    player_builder_video_service_PlayerBuilderVideoService,\n    player_builder_docs_service_PlayerBuilderDocsService,\n];\nvar player_builder_module_COMP = [\n    player_builder_view_component_PlayerBuilderViewComponent,\n    player_builder_player_component_PlayerBuilderPlayerComponent,\n];\nvar PlayerBuilderRoutes = [\n    {\n        path: '',\n        canActivate: [player_builder_activate_guard_PlayerBuilderActivateGuard],\n        canDeactivate: [player_builder_deactivate_guard_PlayerBuilderDeactivateGuard],\n        resolve: (player_builder_module__a = {},\n            player_builder_module__a[PlayerBuilderRouteData.bxplayer] = player_builder_js_resolve_service_PlayerBuilderJsResolveService,\n            player_builder_module__a[PlayerBuilderRouteData.docksLink] = player_builder_docs_links_resolve_service_PlayerBuilderDocksLinksResolveService,\n            player_builder_module__a[PlayerBuilderRouteData.dataProvider] = player_builder_media_resolve_service_PlayerBuilderMediaResolveService,\n            player_builder_module__a),\n        component: player_builder_view_component_PlayerBuilderViewComponent,\n        children: [\n            { path: PlayerBuilderRoute.general, loadChildren: function () { return player_builder_general_module_PlayerBuilderGeneralModule; }, data: (player_builder_module__b = {}, player_builder_module__b[PlayerBuilderRouteData.seek] = 'start', player_builder_module__b), },\n            { path: PlayerBuilderRoute.playback, loadChildren: function () { return player_builder_playback_module_PlayerBuilderPlaybackModule; }, data: (player_builder_module__c = {}, player_builder_module__c[PlayerBuilderRouteData.seek] = 'start', player_builder_module__c), },\n            { path: PlayerBuilderRoute.theme, loadChildren: function () { return player_builder_theme_module_PlayerBuilderThemeModule; }, data: (player_builder_module__d = {}, player_builder_module__d[PlayerBuilderRouteData.seek] = 'start', player_builder_module__d), },\n            { path: PlayerBuilderRoute.icons, loadChildren: function () { return player_builder_icons_module_PlayerBuilderIconsModule; }, data: (player_builder_module__e = {}, player_builder_module__e[PlayerBuilderRouteData.seek] = 'start', player_builder_module__e), },\n            { path: PlayerBuilderRoute.features, loadChildren: function () { return player_builder_features_module_PlayerBuilderFeaturesModule; }, data: (player_builder_module__f = {}, player_builder_module__f[PlayerBuilderRouteData.seek] = 'start', player_builder_module__f), },\n            { path: PlayerBuilderRoute.branding, loadChildren: function () { return player_builder_branding_module_PlayerBuilderBrandingModule; }, data: (player_builder_module__g = {}, player_builder_module__g[PlayerBuilderRouteData.seek] = 'start', player_builder_module__g), },\n            { path: PlayerBuilderRoute.endsplash, loadChildren: function () { return player_builder_end_splash_module_PlayerBuilderEndSplashModule; }, data: (player_builder_module__h = {}, player_builder_module__h[PlayerBuilderRouteData.seek] = 'end', player_builder_module__h), },\n            { path: '', redirectTo: PlayerBuilderRoute.general, pathMatch: 'full' },\n            { path: '**', redirectTo: PlayerBuilderRoute.general }\n        ]\n    },\n    { path: '**', redirectTo: '' }\n];\nvar player_builder_module_PlayerBuilderModule = (function () {\n    function PlayerBuilderModule() {\n    }\n    PlayerBuilderModule = player_builder_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerBuilderRoutes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                player_builder_docs_module_PlayerBuilderDocsModule,\n                colorpicker_module_ColorpickerModule\n            ],\n            providers: player_builder_module_LOCAL_PROVIDERS.slice(),\n            declarations: [\n                abstract_player_builder_data_component_AbstractPlayerBuilderDataComponent\n            ].concat(player_builder_module_COMP),\n            entryComponents: player_builder_module_COMP,\n            exports: player_builder_module_COMP\n        })\n    ], PlayerBuilderModule);\n    return PlayerBuilderModule;\n}());\n\n\n// EXTERNAL MODULE: ./node_modules/ng2-codemirror/lib/index.js\nvar lib = __webpack_require__(187);\nvar lib_default = /*#__PURE__*/__webpack_require__.n(lib);\n\n// CONCATENATED MODULE: ./src/module/form/index.ts\n\n\n\n\n\n\n\n\n\n\n\n\n\n// CONCATENATED MODULE: ./src/module/pipe/sanitize/sanitize.html.pipe.ts\nvar sanitize_html_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sanitize_html_pipe___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar sanitize_html_pipe_SanitizeHtmlPipe = (function () {\n    function SanitizeHtmlPipe(sanitizer) {\n        this.sanitizer = sanitizer;\n    }\n    SanitizeHtmlPipe.prototype.transform = function (value) {\n        return this.sanitizer.bypassSecurityTrustHtml(value);\n    };\n    var _a;\n    SanitizeHtmlPipe = sanitize_html_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'safeHtml' }),\n        sanitize_html_pipe___metadata(\"design:paramtypes\", [typeof (_a = typeof platform_browser_es5[\"c\" /* DomSanitizer */] !== \"undefined\" && platform_browser_es5[\"c\" /* DomSanitizer */]) === \"function\" && _a || Object])\n    ], SanitizeHtmlPipe);\n    return SanitizeHtmlPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/sanitize/sanitize.src.pipe.ts\nvar sanitize_src_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sanitize_src_pipe___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar sanitize_src_pipe_SanitizeSrcPipe = (function () {\n    function SanitizeSrcPipe(sanitizer) {\n        this.sanitizer = sanitizer;\n    }\n    SanitizeSrcPipe.prototype.transform = function (value) {\n        return this.sanitizer.bypassSecurityTrustResourceUrl(value);\n    };\n    var _a;\n    SanitizeSrcPipe = sanitize_src_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'safeSrc' }),\n        sanitize_src_pipe___metadata(\"design:paramtypes\", [typeof (_a = typeof platform_browser_es5[\"c\" /* DomSanitizer */] !== \"undefined\" && platform_browser_es5[\"c\" /* DomSanitizer */]) === \"function\" && _a || Object])\n    ], SanitizeSrcPipe);\n    return SanitizeSrcPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/sanitize/sanitize.style.pipe.ts\nvar sanitize_style_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar sanitize_style_pipe___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar sanitize_style_pipe_SanitizeStylePipe = (function () {\n    function SanitizeStylePipe(sanitizer) {\n        this.sanitizer = sanitizer;\n    }\n    SanitizeStylePipe.prototype.transform = function (value) {\n        return this.sanitizer.bypassSecurityTrustStyle(value);\n    };\n    var _a;\n    SanitizeStylePipe = sanitize_style_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'safeStyle' }),\n        sanitize_style_pipe___metadata(\"design:paramtypes\", [typeof (_a = typeof platform_browser_es5[\"c\" /* DomSanitizer */] !== \"undefined\" && platform_browser_es5[\"c\" /* DomSanitizer */]) === \"function\" && _a || Object])\n    ], SanitizeStylePipe);\n    return SanitizeStylePipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/pipe/sanitize/sanitize.pipe.module.ts\nvar sanitize_pipe_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\nvar sanitize_pipe_module_PIPES = [\n    sanitize_src_pipe_SanitizeSrcPipe,\n    sanitize_html_pipe_SanitizeHtmlPipe,\n    sanitize_style_pipe_SanitizeStylePipe\n];\nvar sanitize_pipe_module_SanitizePipeModule = (function () {\n    function SanitizePipeModule() {\n    }\n    SanitizePipeModule = sanitize_pipe_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            declarations: sanitize_pipe_module_PIPES.slice(),\n            exports: sanitize_pipe_module_PIPES.slice(),\n        })\n    ], SanitizePipeModule);\n    return SanitizePipeModule;\n}());\n\n\n// EXTERNAL MODULE: ./node_modules/rxjs/observable/zip.js\nvar zip = __webpack_require__(129);\nvar zip_default = /*#__PURE__*/__webpack_require__.n(zip);\n\n// CONCATENATED MODULE: ./src/module/player/modules/embedcode/component/player.embed.code.component.ts\nvar player_embed_code_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_embed_code_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar player_embed_code_component_PlayerBuilderEmbedCodeComponent = (function () {\n    function PlayerBuilderEmbedCodeComponent(cdr, route, url, list, sidebar, clipboard) {\n        this.cdr = cdr;\n        this.route = route;\n        this.url = url;\n        this.list = list;\n        this.sidebar = sidebar;\n        this.clipboard = clipboard;\n        this.CODEMIRROR_CONFIG = {\n            readOnly: true,\n            mode: 'htmlmixed',\n            theme: 'blackboard',\n            lineWrapping: true,\n            lineNumbers: true,\n            lineWiseCopyCut: true,\n            indentUnit: 1,\n            autofocus: false\n        };\n        this.method = 'iframe';\n        this.previewScale = 1;\n        this.playerData = null;\n        this.data = {\n            width: '600px',\n            height: '400px',\n            mediaUrls: ['https://bradmax.com/static/video/tears_of_steel.mp4'],\n            title: 'Tears of steel',\n            duration: 734.097415,\n            splashImageUrl: 'https://bradmax.com/static/images/startsplash.jpg',\n            id: null,\n            adsVmapUrl: null,\n            adsPrerollVastUrl: null\n        };\n        this.jsFrameCachBuster = \"\" + Date.now();\n        this.playerIframeUrl = null;\n        this.playerScriptUrl = null;\n    }\n    PlayerBuilderEmbedCodeComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.routeSub = Object(zip[\"zip\"])(this.list.$, this.route.params)\n            .subscribe(function (r) {\n            var players = r[0], params = r[1];\n            if (players && player_model[\"c\" /* PlayerRouteParam */].id in params) {\n                var playerId_1 = parseInt(params[player_model[\"c\" /* PlayerRouteParam */].id]);\n                _this.sidebar.showPlayersMenu(players, playerId_1, player_model[\"a\" /* PlayerRoute */].embedcode);\n                if (players && players.count > 0 && players.results.length > 0) {\n                    _this.playerData = players.results\n                        .filter(function (player) { return player.id === playerId_1; })\n                        .pop();\n                    _this.playerIframeUrl = _this.playerData.embed_player_page_url;\n                    _this.playerScriptUrl = _this.playerData.latest_webbuild.player_js_url;\n                    _this.cdr.markForCheck();\n                }\n            }\n        });\n    };\n    PlayerBuilderEmbedCodeComponent.prototype.ngOnDestroy = function () {\n        this.routeSub.unsubscribe();\n    };\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"iframeSrc\", {\n        get: function () {\n            var params = [\"mediaUrl=\" + encodeURIComponent(this.data.mediaUrls[0])];\n            if (this.data.mediaUrls.length === 2 && !!this.data.mediaUrls[1])\n                params.push(\"mediaUrl2=\" + encodeURIComponent(this.data.mediaUrls[1]));\n            if (this.data.title)\n                params.push(\"title=\" + encodeURIComponent(this.data.title));\n            if (this.data.duration)\n                params.push(\"duration=\" + this.data.duration);\n            if (this.data.splashImageUrl)\n                params.push(\"splashImgUrl=\" + encodeURIComponent(this.data.splashImageUrl));\n            if (this.data.id)\n                params.push(\"id=\" + encodeURIComponent(this.data.id));\n            if (this.data.adsVmapUrl)\n                params.push(\"a.vmap=\" + encodeURIComponent(this.data.adsVmapUrl));\n            if (this.data.adsPrerollVastUrl)\n                params.push(\"a.pre.vast=\" + encodeURIComponent(this.data.adsPrerollVastUrl));\n            return this.playerIframeUrl + \"?\" + params.join(\"&\");\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"iframeEmbedCode\", {\n        get: function () { return \"<iframe src=\\\"\" + this.iframeSrc + \"\\\" width=\\\"\" + this.data.width + \"\\\" height=\\\"\" + this.data.height + \"\\\" frameBorder=\\\"0\\\" allow=\\\"autoplay; encrypted-media\\\" allowfullscreen></iframe>\"; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"scriptFrameSrc\", {\n        get: function () { return this.url.file(\"html/embed.code.script.frame.html?\" + this.jsFrameCachBuster); },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderEmbedCodeComponent.prototype.handleScriptFrameLoad = function (jsFrame) {\n        if ('createplayer' in jsFrame.contentWindow)\n            jsFrame.contentWindow\n                .createplayer(this.playerScriptUrl, 'player', this.scriptConfig, this.data.width, this.data.height);\n    };\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"scriptConfig\", {\n        get: function () {\n            var cfg = { dataProvider: { source: [{ url: this.data.mediaUrls[0] }] } };\n            if (this.data.mediaUrls.length === 2 && !!this.data.mediaUrls[1])\n                cfg.dataProvider.source.push({ url: this.data.mediaUrls[1] });\n            if (this.data.title)\n                cfg.dataProvider['title'] = this.data.title;\n            if (this.data.duration)\n                cfg.dataProvider['duration'] = this.data.duration;\n            if (this.data.splashImageUrl)\n                cfg.dataProvider['splashImages'] = [{ url: this.data.splashImageUrl }];\n            if (this.data.id)\n                cfg.dataProvider['id'] = this.data.id;\n            if (this.data.adsVmapUrl) {\n                if (!('advertisement' in cfg))\n                    cfg['advertisement'] = {};\n                cfg['advertisement']['vmap'] = this.data.adsVmapUrl;\n            }\n            if (this.data.adsPrerollVastUrl) {\n                if (!('advertisement' in cfg))\n                    cfg['advertisement'] = {};\n                cfg['advertisement']['breaks'] = [{ \"timeOffset\": \"start\", \"vast\": this.data.adsPrerollVastUrl }];\n            }\n            return btoa(JSON.stringify(cfg));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"scriptEmbedCodeDiv\", {\n        get: function () { return \"<div id=\\\"player\\\" style=\\\"width: \" + this.data.width + \";height: \" + this.data.height + \";\\\"></div>\"; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"scriptEmbedCodeScript\", {\n        get: function () { return \"<script src=\\\"\" + this.playerScriptUrl + \"\\\" type=\\\"text/javascript\\\" data-bs-parent-id=\\\"player\\\" data-bs-variables=\\\"\" + this.scriptConfig + \"\\\"></script>\"; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"codemirror\", {\n        get: function () { return this.codeToString('\\n'); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"copyString\", {\n        get: function () { return this.codeToString(''); },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderEmbedCodeComponent.prototype.copyToClipboard = function (element) { this.clipboard.copy(element).subscribe(); };\n    PlayerBuilderEmbedCodeComponent.prototype.codeToString = function (lineSeparator) {\n        if (lineSeparator === void 0) { lineSeparator = ''; }\n        return this.method === 'iframe'\n            ? this.iframeEmbedCode\n            : this.method === 'script'\n                ? \"\" + this.scriptEmbedCodeDiv + lineSeparator + this.scriptEmbedCodeScript\n                : '';\n    };\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"formWidth\", {\n        get: function () { return this.data.width; },\n        set: function (v) { this.data.width = v; this.updateJsFrameCachBuster(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"formHeight\", {\n        get: function () { return this.data.height; },\n        set: function (v) { this.data.height = v; this.updateJsFrameCachBuster(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"formMediaUrls\", {\n        get: function () { return this.data.mediaUrls; },\n        set: function (v) { this.data.mediaUrls = v; this.updateJsFrameCachBuster(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"formTitle\", {\n        get: function () { return this.data.title; },\n        set: function (v) { this.data.title = v; this.updateJsFrameCachBuster(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"formDuration\", {\n        get: function () { return this.data.duration; },\n        set: function (v) { this.data.duration = v; this.updateJsFrameCachBuster(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"formSplashImageUrl\", {\n        get: function () { return this.data.splashImageUrl; },\n        set: function (v) { this.data.splashImageUrl = v; this.updateJsFrameCachBuster(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"formId\", {\n        get: function () { return this.data.id; },\n        set: function (v) { this.data.id = v; this.updateJsFrameCachBuster(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"formAdsVmapUrl\", {\n        get: function () { return this.data.adsVmapUrl; },\n        set: function (v) { this.data.adsVmapUrl = v; this.updateJsFrameCachBuster(); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"formAdsPrerollVastUrl\", {\n        get: function () { return this.data.adsPrerollVastUrl; },\n        set: function (v) { this.data.adsPrerollVastUrl = v; this.updateJsFrameCachBuster(); },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerBuilderEmbedCodeComponent.prototype.formMediaUrlsChange = function (idx, v) {\n        this.data.mediaUrls[idx] = v;\n        this.updateJsFrameCachBuster();\n    };\n    PlayerBuilderEmbedCodeComponent.prototype.updateJsFrameCachBuster = function () {\n        if (this.method == \"script\")\n            this.jsFrameCachBuster = \"\" + Date.now();\n        this.cdr.markForCheck();\n    };\n    PlayerBuilderEmbedCodeComponent.prototype.addMedia = function () {\n        if (!this.canAddMedia)\n            return;\n        this.formMediaUrls.push(null);\n        this.cdr.markForCheck();\n    };\n    PlayerBuilderEmbedCodeComponent.prototype.removeMedia = function () {\n        if (this.formMediaUrls.length === 0)\n            return;\n        this.formMediaUrls.pop();\n        this.cdr.markForCheck();\n    };\n    Object.defineProperty(PlayerBuilderEmbedCodeComponent.prototype, \"canAddMedia\", {\n        get: function () {\n            var last = this.formMediaUrls.length > 0\n                ? this.formMediaUrls[this.formMediaUrls.length - 1]\n                : '';\n            return (!last || last.trim() === '') ? false : true;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    var _a, _b, _c, _d, _e, _f;\n    PlayerBuilderEmbedCodeComponent = player_embed_code_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-embed-code',\n            template: __webpack_require__(1467),\n            styles: [\n                __webpack_require__(1468)\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_embed_code_component___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _a || Object, typeof (_b = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _b || Object, typeof (_c = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _c || Object, typeof (_d = typeof player_list_data_service_PlayerListDataService !== \"undefined\" && player_list_data_service_PlayerListDataService) === \"function\" && _d || Object, typeof (_e = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _e || Object, typeof (_f = typeof clipboard_service_ClipboardService !== \"undefined\" && clipboard_service_ClipboardService) === \"function\" && _f || Object])\n    ], PlayerBuilderEmbedCodeComponent);\n    return PlayerBuilderEmbedCodeComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/embedcode/player.embed.code.module.ts\nvar player_embed_code_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\nvar PlayerEmbedCodeRoutes = [\n    {\n        path: '',\n        component: player_embed_code_component_PlayerBuilderEmbedCodeComponent,\n    },\n    { path: '**', redirectTo: '' }\n];\nvar player_embed_code_module_COMP = PlayerEmbedCodeRoutes.filter(function (r) { return !!r.component; }).map(function (r) { return r.component; });\nvar player_embed_code_module_PlayerEmbedCodeModule = (function () {\n    function PlayerEmbedCodeModule() {\n    }\n    PlayerEmbedCodeModule = player_embed_code_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerEmbedCodeRoutes),\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                lib[\"CodemirrorModule\"],\n                sanitize_pipe_module_SanitizePipeModule,\n            ],\n            providers: [clipboard_service_ClipboardService],\n            declarations: player_embed_code_module_COMP.slice(),\n            entryComponents: player_embed_code_module_COMP,\n            exports: player_embed_code_module_COMP\n        })\n    ], PlayerEmbedCodeModule);\n    return PlayerEmbedCodeModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/embeder/service/player.embeder.service.ts\nvar player_embeder_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar player_embeder_service_PlayerEmbederService = (function () {\n    function PlayerEmbederService() {\n    }\n    PlayerEmbederService = player_embeder_service___decorate([\n        Object(core_es5[\"Injectable\"])()\n    ], PlayerEmbederService);\n    return PlayerEmbederService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/embeder/component/player.embeder.view.component.ts\nvar player_embeder_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_embeder_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_embeder_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\nvar EmbedCodeType;\n(function (EmbedCodeType) {\n    EmbedCodeType[EmbedCodeType[\"IFRAME\"] = 0] = \"IFRAME\";\n    EmbedCodeType[EmbedCodeType[\"DYNAMIC\"] = 1] = \"DYNAMIC\";\n})(EmbedCodeType || (EmbedCodeType = {}));\nvar player_embeder_view_component_PlayerEmbederView = (function (_super) {\n    player_embeder_view_component___extends(PlayerEmbederView, _super);\n    function PlayerEmbederView(view, locale, translation, service, user, cdr, route, list, sidebar, location, sanitizer) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.view = view;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.service = service;\n        _this.user = user;\n        _this.cdr = cdr;\n        _this.route = route;\n        _this.list = list;\n        _this.sidebar = sidebar;\n        _this.location = location;\n        _this.sanitizer = sanitizer;\n        _this.showOptional = true;\n        _this.modelMandatoryNames = ['width', 'height', 'mediaUrl'];\n        _this.modelOptionalNames = ['mediaUrl2', 'title', 'duration', 'id', 'splashImageUrl'];\n        _this.modelAdsFieldsNames = ['adsVmapUrl', 'adsPrerollVastUrl'];\n        _this.modelFieldsCellWidth = {\n            'width': 6,\n            'height': 6,\n            'mediaUrl': 12,\n            'mediaUrl2': 12,\n            'title': 12,\n            'duration': 6,\n            'splashImageUrl': 12,\n            'id': 6,\n            'adsVmapUrl': 12,\n            'adsPrerollVastUrl': 12\n        };\n        _this.model = {\n            width: 600,\n            height: 400,\n            mediaUrl: 'https://bradmax.com/static/video/tears_of_steel.mp4',\n            title: 'Tears of steel',\n            duration: 734.097415,\n            splashImageUrl: 'https://bradmax.com/static/images/startsplash.jpg',\n            id: null,\n            adsVmapUrl: null,\n            adsPrerollVastUrl: null\n        };\n        _this.selectedType = EmbedCodeType.IFRAME;\n        _this.embedCodeType = EmbedCodeType;\n        _this.codemirrorConfig = {\n            readOnly: true,\n            mode: 'htmlmixed',\n            theme: 'blackboard',\n            lineWrapping: true,\n            lineNumbers: true,\n            lineWiseCopyCut: true,\n            indentUnit: 1,\n            autofocus: false\n        };\n        _this.embedCodeString = '';\n        _this.translation.translationChanged.subscribe(function () { return _this.onTranslationChanged(); });\n        _this.view.resizeStream$.subscribe(function () { return _this.redraw(); });\n        _this.route.data.subscribe(function (data) { return _this.parse(data); });\n        for (var _i = 0, _a = _this.user.products; _i < _a.length; _i++) {\n            var prod = _a[_i];\n            if (prod.has_ads_support) {\n                _this.modelOptionalNames = _this.modelOptionalNames.concat(_this.modelAdsFieldsNames);\n            }\n        }\n        return _this;\n    }\n    PlayerEmbederView.prototype.ngOnInit = function () {\n        var _this = this;\n        this.onTranslationChanged();\n        this.updateModelCache();\n        this.routeSub = Object(zip[\"zip\"])(this.list.$, this.route.params)\n            .subscribe(function (r) {\n            var players = r[0], params = r[1];\n            if (player_model[\"c\" /* PlayerRouteParam */].id in params && players) {\n                _this.sidebar.showPlayersMenu(players, parseInt(params[player_model[\"c\" /* PlayerRouteParam */].id]));\n            }\n        });\n    };\n    PlayerEmbederView.prototype.ngOnDestroy = function () {\n        this.routeSub.unsubscribe();\n    };\n    PlayerEmbederView.prototype.onTranslationChanged = function () {\n        this.dropdownModel = [\n            { value: EmbedCodeType.IFRAME, label: this.translation.translate('PLAYER.EMBEDER.INPUT.TYPE.VALUE.0'), icon: 'fa-window-maximize' },\n            { value: EmbedCodeType.DYNAMIC, label: this.translation.translate('PLAYER.EMBEDER.INPUT.TYPE.VALUE.1'), icon: 'fa-code' }\n        ];\n    };\n    PlayerEmbederView.prototype.redraw = function () {\n        this.cdr.markForCheck();\n    };\n    PlayerEmbederView.prototype.onDropdownSelect = function (data) {\n        this.clearModelCache();\n        this.generate();\n    };\n    PlayerEmbederView.prototype.onChange = function () {\n        this.generate();\n    };\n    PlayerEmbederView.prototype.toggleOptional = function () {\n        this.showOptional = !this.showOptional;\n        this.clearModelCache();\n        this.generate();\n    };\n    PlayerEmbederView.prototype.previewDynamic = function () {\n        var previewWindow = window.open(\"\", \"Preview \" + this.formatTypeLabel(), \"width=\" + this.model.width + \",height=\" + (this.model.height + 22));\n        previewWindow.document.write('<style>body {margin:0;padding:0;}</style>' + this.embedCodeString);\n    };\n    PlayerEmbederView.prototype.formatTypeIconNgClass = function () {\n        var _a, _b;\n        if (!this.dropdownModel)\n            return null;\n        if (this.selectedType == EmbedCodeType.IFRAME)\n            return _a = {}, _a[this.dropdownModel[0].icon] = true, _a;\n        else if (this.selectedType == EmbedCodeType.DYNAMIC)\n            return _b = {}, _b[this.dropdownModel[1].icon] = true, _b;\n        return null;\n    };\n    PlayerEmbederView.prototype.formatTypeLabel = function () {\n        if (!this.dropdownModel)\n            return null;\n        if (this.selectedType == EmbedCodeType.IFRAME)\n            return this.dropdownModel[0].label;\n        else if (this.selectedType == EmbedCodeType.DYNAMIC)\n            return this.dropdownModel[1].label;\n        return null;\n    };\n    PlayerEmbederView.prototype.copyToClipboard = function () {\n        var textArea = document.createElement(\"textarea\");\n        textArea.value = this.embedCodeString;\n        document.body.appendChild(textArea);\n        textArea.focus();\n        textArea.select();\n        try {\n            var successful = document.execCommand('copy');\n            var msg = successful ? 'successful' : 'unsuccessful';\n        }\n        catch (err) {\n            console.error('Oops, unable to copy', err);\n        }\n        document.body.removeChild(textArea);\n    };\n    PlayerEmbederView.prototype.generate = function () {\n        if (this.modelCache == JSON.stringify(this.model))\n            return;\n        if (this.selectedType == EmbedCodeType.IFRAME)\n            this.generateIframeEmbedCode();\n        if (this.selectedType == EmbedCodeType.DYNAMIC)\n            this.generateDynamicEmbedCode();\n    };\n    PlayerEmbederView.prototype.generateIframeEmbedCode = function () {\n        var URL = this.service.playerModel.embed_player_page_url + \"?mediaUrl=\" + encodeURIComponent(this.model.mediaUrl);\n        if (this.showOptional) {\n            if (this.model.mediaUrl2)\n                URL += \"&mediaUrl2=\" + encodeURIComponent(this.model.mediaUrl2);\n            if (this.model.title)\n                URL += \"&title=\" + encodeURIComponent(this.model.title);\n            if (this.model.duration)\n                URL += \"&duration=\" + this.model.duration;\n            if (this.model.splashImageUrl)\n                URL += \"&splashImgUrl=\" + encodeURIComponent(this.model.splashImageUrl);\n            if (this.model.id)\n                URL += \"&id=\" + encodeURIComponent(this.model.id);\n            if (this.model.adsVmapUrl) {\n                URL += \"&a.vmap=\" + encodeURIComponent(this.model.adsVmapUrl);\n            }\n            if (this.model.adsPrerollVastUrl) {\n                URL += \"&a.pre.vast=\" + encodeURIComponent(this.model.adsPrerollVastUrl);\n            }\n        }\n        this.embedCodeString = \"<iframe src=\\\"\" + URL + \"\\\" width=\\\"\" + this.model.width + \"\\\" height=\\\"\" + this.model.height + \"\\\" frameBorder=\\\"0\\\" allow=\\\"autoplay; encrypted-media\\\" allowfullscreen></iframe>\";\n        this.embedCodeHtml = this.sanitizer.bypassSecurityTrustHtml(this.embedCodeString);\n    };\n    PlayerEmbederView.prototype.generateDynamicEmbedCode = function () {\n        var cfg = { dataProvider: { source: [{ url: this.model.mediaUrl }] } };\n        if (this.showOptional) {\n            if (this.model.mediaUrl2)\n                cfg.dataProvider.source.push({ url: this.model.mediaUrl2 });\n            if (this.model.title)\n                cfg.dataProvider['title'] = this.model.title;\n            if (this.model.duration)\n                cfg.dataProvider['duration'] = this.model.duration;\n            if (this.model.splashImageUrl)\n                cfg.dataProvider['splashImages'] = [{ url: this.model.splashImageUrl }];\n            if (this.model.id)\n                cfg.dataProvider['id'] = this.model.id;\n            if (this.model.adsVmapUrl) {\n                if (!('advertisement' in cfg)) {\n                    cfg['advertisement'] = {};\n                }\n                cfg['advertisement']['vmap'] = this.model.adsVmapUrl;\n            }\n            if (this.model.adsPrerollVastUrl) {\n                if (!('advertisement' in cfg)) {\n                    cfg['advertisement'] = {};\n                }\n                cfg['advertisement']['breaks'] = [{ \"timeOffset\": \"start\", \"vast\": this.model.adsPrerollVastUrl }];\n            }\n        }\n        var JSON_ESCAPED_CONFIG = btoa(JSON.stringify(cfg));\n        this.embedCodeString = \"<div id=\\\"player\\\" style=\\\"width: \" + this.model.width + \"px; height: \" + this.model.height + \"px;\\\"></div>\\n<script src=\\\"\" + this.service.playerModel.latest_webbuild.player_js_url + \"\\\" type=\\\"text/javascript\\\" data-bs-parent-id=\\\"player\\\" data-bs-variables=\\\"\" + JSON_ESCAPED_CONFIG + \"\\\"></script>\";\n        this.embedCodeHtml = null;\n    };\n    PlayerEmbederView.prototype.parse = function (data) {\n        this.view.spinner(false);\n        if (data != null && data.playerModel != null)\n            this.service.playerModel = data.playerModel;\n        else if (true)\n            throw new Error('EMPTY RESOLVER DATA');\n        this.generate();\n    };\n    PlayerEmbederView.prototype.updateModelCache = function () {\n        this.modelCache = JSON.stringify(this.model);\n    };\n    PlayerEmbederView.prototype.clearModelCache = function () {\n        this.modelCache = null;\n    };\n    PlayerEmbederView.prototype.navigationBack = function () {\n        this.location.back();\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n    PlayerEmbederView = player_embeder_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-embeder-view',\n            template: __webpack_require__(1469),\n            styles: [__webpack_require__(1470)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_embeder_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _c || Object, typeof (_d = typeof player_embeder_service_PlayerEmbederService !== \"undefined\" && player_embeder_service_PlayerEmbederService) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _f || Object, typeof (_g = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _g || Object, typeof (_h = typeof player_list_data_service_PlayerListDataService !== \"undefined\" && player_list_data_service_PlayerListDataService) === \"function\" && _h || Object, typeof (_j = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _j || Object, typeof (_k = typeof common_es5[\"Location\"] !== \"undefined\" && common_es5[\"Location\"]) === \"function\" && _k || Object, typeof (_l = typeof platform_browser_es5[\"c\" /* DomSanitizer */] !== \"undefined\" && platform_browser_es5[\"c\" /* DomSanitizer */]) === \"function\" && _l || Object])\n    ], PlayerEmbederView);\n    return PlayerEmbederView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/embeder/service/player.embeder.resolver.ts\nvar player_embeder_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_embeder_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar player_embeder_resolver_PlayerEmbederResolver = (function () {\n    function PlayerEmbederResolver(player, embeder, user) {\n        this.player = player;\n        this.embeder = embeder;\n        this.user = user;\n    }\n    PlayerEmbederResolver_1 = PlayerEmbederResolver;\n    PlayerEmbederResolver.prototype.resolve = function (route, state) {\n        if (this.embeder.playerModel && (this.embeder.playerModel.id == parseInt(route.params['id']))) {\n            var nowTs = (new Date()).getTime() / 1000.0;\n            var loadedAt = this.embeder.playerModel.loaded_at || 0;\n            var liveTime = nowTs - loadedAt;\n            if (liveTime < PlayerEmbederResolver_1.PLAYER_MODEL_CACHE_LIVETIME) {\n                return Observable[\"Observable\"].of(this.embeder.playerModel);\n            }\n        }\n        return this.player.readPlayer(this.user.accountId, route.params['id']);\n    };\n    var PlayerEmbederResolver_1, _a, _b, _c;\n    PlayerEmbederResolver.PLAYER_MODEL_CACHE_LIVETIME = 20;\n    PlayerEmbederResolver = PlayerEmbederResolver_1 = player_embeder_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_embeder_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _a || Object, typeof (_b = typeof player_embeder_service_PlayerEmbederService !== \"undefined\" && player_embeder_service_PlayerEmbederService) === \"function\" && _b || Object, typeof (_c = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _c || Object])\n    ], PlayerEmbederResolver);\n    return PlayerEmbederResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/embeder/player.embeder.module.ts\nvar player_embeder_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\nvar PlayerEmbederRoutes = [\n    {\n        path: '',\n        component: player_embeder_view_component_PlayerEmbederView,\n        resolve: { playerModel: player_embeder_resolver_PlayerEmbederResolver }\n    },\n    { path: '**', redirectTo: '' }\n];\nvar player_embeder_module_LOCAL_PROVIDERS = [\n    player_embeder_resolver_PlayerEmbederResolver,\n];\nvar player_embeder_module_COMP = [\n    player_embeder_view_component_PlayerEmbederView,\n];\nvar player_embeder_module_PlayerEmbederModule = (function () {\n    function PlayerEmbederModule() {\n    }\n    PlayerEmbederModule = player_embeder_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                common_es5[\"CommonModule\"],\n                forms_es5[\"FormsModule\"],\n                form_module_FormComponentsModule,\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerEmbederRoutes),\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                lib[\"CodemirrorModule\"],\n            ],\n            providers: player_embeder_module_LOCAL_PROVIDERS.slice(),\n            declarations: player_embeder_module_COMP.slice(),\n            entryComponents: player_embeder_module_COMP,\n            exports: player_embeder_module_COMP\n        })\n    ], PlayerEmbederModule);\n    return PlayerEmbederModule;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/sidebar/sidebar.module.ts + 2 modules\nvar sidebar_module = __webpack_require__(185);\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/model/player.configurator.model.ts\nvar BsplayerName;\n(function (BsplayerName) {\n    BsplayerName[BsplayerName[\"gorilla\"] = 0] = \"gorilla\";\n    BsplayerName[BsplayerName[\"mole\"] = 1] = \"mole\";\n    BsplayerName[BsplayerName[\"snake\"] = 2] = \"snake\";\n    BsplayerName[BsplayerName[\"zebra\"] = 3] = \"zebra\";\n})(BsplayerName || (BsplayerName = {}));\nvar HaxeTypes;\n(function (HaxeTypes) {\n    HaxeTypes[HaxeTypes[\"Bool\"] = 0] = \"Bool\";\n    HaxeTypes[HaxeTypes[\"Float\"] = 1] = \"Float\";\n    HaxeTypes[HaxeTypes[\"Int\"] = 2] = \"Int\";\n    HaxeTypes[HaxeTypes[\"String\"] = 3] = \"String\";\n    HaxeTypes[HaxeTypes[\"RGB\"] = 4] = \"RGB\";\n    HaxeTypes[HaxeTypes[\"Tags\"] = 5] = \"Tags\";\n    HaxeTypes[HaxeTypes[\"Link\"] = 6] = \"Link\";\n    HaxeTypes[HaxeTypes[\"TextArea\"] = 7] = \"TextArea\";\n    HaxeTypes[HaxeTypes[\"ImgFile\"] = 8] = \"ImgFile\";\n    HaxeTypes[HaxeTypes[\"P12File\"] = 9] = \"P12File\";\n    HaxeTypes[HaxeTypes[\"List\"] = 10] = \"List\";\n})(HaxeTypes || (HaxeTypes = {}));\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/model/player.configurator.parser.ts\n\nvar player_configurator_parser_PlayerConfiguratorParser = (function () {\n    function PlayerConfiguratorParser() {\n    }\n    PlayerConfiguratorParser.prototype.updateConfigWithColorScheme = function (config, colorScheme, withDefault) {\n        var schemeNames = Object.keys(colorScheme);\n        for (var _i = 0, _a = this.findRGB(config); _i < _a.length; _i++) {\n            var c = _a[_i];\n            if (c.name) {\n                var isHidden = schemeNames.indexOf(c.name) < 0;\n                if (!isHidden) {\n                    var val = colorScheme[c.name];\n                    if (c.defaultValue == null && withDefault == true)\n                        c.defaultValue = val;\n                    c.value = val;\n                }\n            }\n        }\n    };\n    PlayerConfiguratorParser.prototype.fixForSkinMainColorBackwardCompatibility = function (data) {\n        if (data.bs == null\n            || data.bs.player == null\n            || data.bs.player.config == null\n            || data.bs.player.config.SkinAndColor == null)\n            return;\n        if (typeof data.bs.player.config.SkinAndColor.advance === 'undefined')\n            data.bs.player.config.SkinAndColor.advance = true;\n    };\n    PlayerConfiguratorParser.prototype.populateConfigWithPlayerData = function (config, data) {\n        var flat = {};\n        this.flattenObject(data, '', flat);\n        for (var flatKey in flat)\n            this.updateConfigByPath(config, flatKey, flat[flatKey]);\n    };\n    PlayerConfiguratorParser.prototype.addValueAttribute = function (config) {\n        for (var _i = 0, config_1 = config; _i < config_1.length; _i++) {\n            var plugin = config_1[_i];\n            if (plugin.children != null && plugin.children.length > 0) {\n                this.addValueAttribute(plugin.children);\n            }\n            else {\n                if ((typeof plugin.value == undefined || plugin.value == null) && plugin.defaultValue != null)\n                    plugin.value = plugin.defaultValue;\n            }\n        }\n    };\n    PlayerConfiguratorParser.prototype.mapGroups = function (config) {\n        var _this = this;\n        if (config == null)\n            return [];\n        var map = [], g = '';\n        var nameMap = {};\n        config.forEach(function (p) {\n            if (p.group) {\n                g = p.group[0];\n                if (!nameMap.hasOwnProperty(g))\n                    nameMap[g] = { plugins: [], isAdvanceGroup: false };\n                nameMap[g].plugins.push(p);\n                nameMap[g].isAdvanceGroup = _this.checkIfIsAdvanceGroup(p.group) && !nameMap[g].hasOwnProperty('advance');\n            }\n        });\n        Object.keys(nameMap).forEach(function (k) { return map.push({\n            name: k,\n            items: nameMap[k].plugins,\n            collapsed: false,\n            isAdvance: nameMap[k].isAdvanceGroup,\n            advanceValue: _this.getGroupAdvanceValue(nameMap[k])\n        }); });\n        return map;\n    };\n    PlayerConfiguratorParser.prototype.isFormGroups = function (p) { return !this.hasGrandChild(p); };\n    PlayerConfiguratorParser.prototype.isForm = function (p) { return this.hasGrandChild(p); };\n    PlayerConfiguratorParser.prototype.parseOutput = function (config, output, $lvl) {\n        if (output === void 0) { output = {}; }\n        if ($lvl === void 0) { $lvl = 0; }\n        this.resolveDependencies(config);\n        for (var _i = 0, config_2 = config; _i < config_2.length; _i++) {\n            var plugin = config_2[_i];\n            if (plugin.multichoice && !plugin.checked) {\n                continue;\n            }\n            else if (plugin.children != null && plugin.children.length > 0)\n                this.parseOutput(plugin.children, output);\n            else\n                this.setKeyVal(output, (plugin.path + '.' + plugin.name).split('.'), plugin.value);\n        }\n        return output;\n    };\n    PlayerConfiguratorParser.prototype.resolveDependencies = function (mainConfig, resolveConfig) {\n        if (resolveConfig === void 0) { resolveConfig = null; }\n        var config = mainConfig;\n        if (resolveConfig != null)\n            config = resolveConfig;\n        for (var _i = 0, config_3 = config; _i < config_3.length; _i++) {\n            var plugin = config_3[_i];\n            if (plugin.children != null && plugin.children.length > 0)\n                this.resolveDependencies(mainConfig, plugin.children);\n            else\n                this.resolveDependency(mainConfig, '::' + plugin.name + '::', plugin.value);\n        }\n    };\n    PlayerConfiguratorParser.prototype.checkIfIsAdvanceGroup = function (group) {\n        if (group == null || group[1] == null)\n            return null;\n        return group[1].indexOf('advance') > -1;\n    };\n    PlayerConfiguratorParser.prototype.getAdvanceGroupValue = function (group) {\n        if (group == null || group[1] == null)\n            return null;\n        var stringVal = group[1].split(':')[1];\n        return stringVal == 'true';\n    };\n    PlayerConfiguratorParser.prototype.updateAdvanceValue = function (group) {\n        for (var _i = 0, _a = group.items; _i < _a.length; _i++) {\n            var i = _a[_i];\n            if (i.name == 'advance') {\n                i.value = group.advanceValue ? group.advanceValue : i.defaultValue;\n                break;\n            }\n        }\n    };\n    PlayerConfiguratorParser.prototype.findRGB = function (config) {\n        var rgbs = [];\n        for (var _i = 0, config_4 = config; _i < config_4.length; _i++) {\n            var conf = config_4[_i];\n            if (conf.children != null && conf.children.length > 0)\n                rgbs = rgbs.concat(this.findRGB(conf.children));\n            else if (conf.type == 'RGB')\n                rgbs.push(conf);\n        }\n        return rgbs;\n    };\n    PlayerConfiguratorParser.prototype.findPluginByName = function (name, data) {\n        for (var i = 0, t = data.length; i < t; i++)\n            if (data[i].name == name)\n                return data[i];\n        for (var i = 0, t = data.length; i < t; i++)\n            if (data[i].children) {\n                var val = this.findPluginByName(name, data[i].children);\n                if (val != null)\n                    return val;\n            }\n        return null;\n    };\n    PlayerConfiguratorParser.prototype.findConfigByName = function (name, data) {\n        var val = null;\n        for (var i = 0, t = data.length; i < t; i++)\n            if (data[i].name == name) {\n                val = data[i];\n                break;\n            }\n        return val;\n    };\n    PlayerConfiguratorParser.prototype.updateConfigByPath = function (config, searchPath, value, parent) {\n        if (parent === void 0) { parent = null; }\n        for (var _i = 0, config_5 = config; _i < config_5.length; _i++) {\n            var plugin = config_5[_i];\n            if (plugin.children != null && plugin.children.length > 0) {\n                this.updateConfigByPath(plugin.children, searchPath, value, plugin);\n            }\n            else {\n                if (plugin.path + '.' + plugin.name == searchPath) {\n                    plugin.value = value;\n                    if (parent && parent.multichoice) {\n                        parent.checked = true;\n                    }\n                    if (plugin.defaultValue != null\n                        && typeof plugin.defaultValue == 'string'\n                        && plugin.defaultValue.indexOf('::') < 0) {\n                        plugin.defaultValue = plugin.value;\n                    }\n                    break;\n                }\n            }\n        }\n    };\n    PlayerConfiguratorParser.prototype.resolveDependency = function (mainConfig, pattern, value) {\n        for (var _i = 0, mainConfig_1 = mainConfig; _i < mainConfig_1.length; _i++) {\n            var plugin = mainConfig_1[_i];\n            if (plugin.children != null && plugin.children.length > 0)\n                this.resolveDependency(plugin.children, pattern, value);\n            else if (plugin.defaultValue != null\n                && typeof plugin.defaultValue == 'string'\n                && plugin.defaultValue.indexOf(pattern) > -1) {\n                plugin.value = plugin.defaultValue.split(pattern).join(value);\n            }\n        }\n    };\n    PlayerConfiguratorParser.prototype.setKeyVal = function (o, path, value) {\n        var k = path[0];\n        if (path.length == 1) {\n            if (value != null)\n                if (o[k] == null)\n                    o[k] = value;\n                else\n                    o[k] = [value].concat(o[path[0]]);\n        }\n        else {\n            if (o[k] == null)\n                o[k] = {};\n            path.shift();\n            this.setKeyVal(o[k], path, value);\n        }\n    };\n    PlayerConfiguratorParser.prototype.hasGrandChild = function (p) {\n        return (p.children == null) ? false :\n            (p.children.length == 0) ? false :\n                (p.children[0] == null) ? false :\n                    (p.children[0].children != null);\n    };\n    PlayerConfiguratorParser.prototype.flattenObject = function (values, objectPath, ret) {\n        var keys = Object.keys(values);\n        var key = keys[0];\n        var value = values[key];\n        if (keys.length == 1) {\n            objectPath += key + '.';\n            this.flattenObject(value, objectPath, ret);\n        }\n        else\n            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n                var k = keys_1[_i];\n                value = values[k];\n                for (key in value)\n                    ret[objectPath + k + '.' + key] = value[key];\n            }\n    };\n    PlayerConfiguratorParser.prototype.getGroupAdvanceValue = function (item) {\n        for (var _i = 0, _a = item.plugins; _i < _a.length; _i++) {\n            var p = _a[_i];\n            if (p.name == 'advance' && p.type == HaxeTypes[HaxeTypes.Bool])\n                return typeof p.value != undefined ? p.value : p.defaultValue;\n        }\n        return null;\n    };\n    return PlayerConfiguratorParser;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/modal/abstract.modal.component.ts\nvar abstract_modal_component = __webpack_require__(71);\n\n// EXTERNAL MODULE: ./src/module/modal/modal.model.ts\nvar modal_model = __webpack_require__(181);\n\n// CONCATENATED MODULE: ./src/module/modal/index.ts\n\n\n\n\n\n\n\n\n\n\n\n\n// CONCATENATED MODULE: ./src/module/player/PLAYER_VERSION.ts\nvar BRADMAX_PLAYER_VERSION = 'v2.14.398';\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/component/preview/video/player.configurator.preview.video.service.ts\nvar player_configurator_preview_video_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_preview_video_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar PlayerConfiguratorPreviewState;\n(function (PlayerConfiguratorPreviewState) {\n    PlayerConfiguratorPreviewState[PlayerConfiguratorPreviewState[\"start\"] = 0] = \"start\";\n    PlayerConfiguratorPreviewState[PlayerConfiguratorPreviewState[\"middle\"] = 1] = \"middle\";\n    PlayerConfiguratorPreviewState[PlayerConfiguratorPreviewState[\"end\"] = 2] = \"end\";\n})(PlayerConfiguratorPreviewState || (PlayerConfiguratorPreviewState = {}));\nvar player_configurator_preview_video_service_PlayerConfiguratorPreviewVideoService = (function () {\n    function PlayerConfiguratorPreviewVideoService(parser) {\n        var _this = this;\n        this.parser = parser;\n        this.config = __webpack_require__(1471);\n        this.enableSkinAutohide = false;\n        this.playerStates = PlayerConfiguratorPreviewState;\n        this.playerStateSource = new Rx[\"Subject\"]();\n        this.mediaDuration = -1;\n        this.mediaPlayed = false;\n        this.pictureInPictureButtonVisible = false;\n        this.videoCastEnabled = false;\n        this.onVideoCurrentTimeChange = function (e) {\n            if (e.data.currentTime <= 0) {\n                _this.playerState = _this.playerStates.start;\n                _this.playerStateSource.next(_this.playerState);\n            }\n        };\n        this.onVideoPlaying = function (e) {\n            _this.playerState = _this.playerStates.middle;\n            _this.playerStateSource.next(_this.playerState);\n        };\n        this.onVideoComplete = function (e) {\n            _this.playerState = _this.playerStates.end;\n            _this.playerStateSource.next(_this.playerState);\n        };\n        this.initialized = false;\n        this.playerStateStream$ = this.playerStateSource.asObservable();\n    }\n    PlayerConfiguratorPreviewVideoService.prototype.onRoutingChange = function (config) {\n        if (config === void 0) { config = null; }\n        if (config) {\n            var sb = this.findConfigValueByName(config, 'shareButtons');\n            if (sb == null)\n                sb = '';\n            this.changeShareButtons(sb.split(','));\n        }\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.setup = function (con) {\n        this.container = con;\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.destroy = function () {\n        this.initialized = false;\n        if (this.api != null) {\n            this.api.remove('VideoEvent.currentTimeChange', this.onVideoCurrentTimeChange);\n            this.api.remove('VideoEvent.playing', this.onVideoPlaying);\n            this.api.remove('VideoEvent.complete', this.onVideoComplete);\n        }\n        this.api = null;\n        if (this.player != null)\n            bradmax.player.destroy(this.player);\n        this.player = null;\n        this.name = null;\n        this.colorScheme = null;\n        this.defaultColorSchemeCache = null;\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.create = function (name) {\n        if (name === void 0) { name = BsplayerName.zebra; }\n        if (this.name == name)\n            return;\n        this.destroy();\n        this.name = name;\n        try {\n            this.player = bradmax.player.create(this.container, this.config, this.playerName);\n            this.api = this.player.modules.JavascriptApi;\n            this.updateColorScheme();\n            this.defaultColorSchemeCache = JSON.stringify(this.colorScheme);\n            this.changePlayerState(this.playerStates.middle);\n            this.changeSkinAutohide(this.enableSkinAutohide);\n            this.api.add('VideoEvent.currentTimeChange', this.onVideoCurrentTimeChange);\n            this.api.add('VideoEvent.playing', this.onVideoPlaying);\n            this.api.add('VideoEvent.complete', this.onVideoComplete);\n        }\n        catch (e) {\n            console.error(\"Exception during player creation by PlayerConfiguratorPreviewVideoService: \");\n            console.error(e);\n        }\n        this.initialized = true;\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.findConfigValueByName = function (config, searchName) {\n        var value;\n        for (var _i = 0, config_1 = config; _i < config_1.length; _i++) {\n            var plugin = config_1[_i];\n            if (plugin.name == searchName) {\n                value = plugin.value;\n                break;\n            }\n            if (plugin.children != null && plugin.children.length > 0) {\n                value = this.findConfigValueByName(plugin.children, searchName);\n                if (value != null)\n                    break;\n            }\n        }\n        return value;\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.updateColorScheme = function () {\n        if (this.api)\n            this.colorScheme = this.api.skinConfig_getColorScheme();\n        if (this.colorScheme)\n            for (var color in this.colorScheme)\n                this.colorScheme[color] = this.colorScheme[color].toLowerCase();\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeColor = function (config, name, value, force) {\n        if (force === void 0) { force = false; }\n        if (this.api && this.colorScheme && (force || this.colorScheme[name] != value)) {\n            this.colorScheme[name] = value;\n            if (name == 'COLORS_SHADE_MAP_BASE') {\n                this.api.skinConfig_updateColorBase(value);\n                this.updateColorScheme();\n                this.parser.updateConfigWithColorScheme(config, this.colorScheme, false);\n                return;\n            }\n            this.api.skinConfig_updateColorScheme(this.colorScheme);\n        }\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changePlayerState = function (state) {\n        if (this.api == null)\n            return;\n        this.playerState = state;\n        this.playerStateSource.next(state);\n        this.api.skinConfig_setPlayerState(this.playerStates[state]);\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeSkinAutohide = function (value) {\n        this.enableSkinAutohide = value;\n        if (this.api == null)\n            return;\n        this.api.skinConfig_disableAutohide(!value);\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeShareButtons = function (buttons) {\n        if (this.api == null)\n            return;\n        this.api.skinConfig_editShareButtons(buttons);\n        if (this.endSplashName == 'social'\n            && this.playerState == this.playerStates.end\n            && this.shareButtons.length == 0\n            && buttons.length > 0) {\n            this.api.skinConfig_editEndSplash(this.endSplashName);\n        }\n        this.shareButtons = buttons ? buttons.join(',') : '';\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeVolume = function (value) {\n        if (this.api == null)\n            return;\n        this.api.setVolume(value);\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeSkin = function (config, skinName, updateColorScheme) {\n        var name = BsplayerName[skinName];\n        if (this.colorScheme && name != null) {\n            this.create(name);\n            if (updateColorScheme)\n                this.parser.updateConfigWithColorScheme(config, this.colorScheme, true);\n            this.update(config, false);\n        }\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeLogoFile = function (logo) {\n        if (this.api == null)\n            return;\n        this.logoImage = logo;\n        this.dispatchSkinConfigEditLogoEvent();\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeLogoLink = function (link) {\n        if (this.api == null)\n            return;\n        this.logoLink = link;\n        this.dispatchSkinConfigEditLogoEvent();\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeLogoTarget = function (target) {\n        if (this.api == null)\n            return;\n        this.logoTarget = target;\n        this.dispatchSkinConfigEditLogoEvent();\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeLogoXPosition = function (xPos) {\n        if (this.api == null)\n            return;\n        this.logoXPosition = xPos;\n        this.dispatchSkinConfigEditLogoEvent();\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeLogoYPosition = function (yPos) {\n        if (this.api == null)\n            return;\n        this.logoYPosition = yPos;\n        this.dispatchSkinConfigEditLogoEvent();\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeLogoAutohide = function (autohide) {\n        if (this.api == null)\n            return;\n        this.logoAutohide = autohide;\n        this.dispatchSkinConfigEditLogoEvent();\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeEndSplash = function (splash) {\n        if (this.api == null)\n            return;\n        this.endSplashName = splash;\n        this.changePlayerState(this.playerStates.middle);\n        this.api.skinConfig_editEndSplash(splash);\n        this.changePlayerState(this.playerStates.end);\n    };\n    Object.defineProperty(PlayerConfiguratorPreviewVideoService.prototype, \"playerName\", {\n        get: function () {\n            if (this.name == null)\n                return '';\n            return BsplayerName[this.name] + '_' + BRADMAX_PLAYER_VERSION;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerConfiguratorPreviewVideoService.prototype, \"resetColor\", {\n        get: function () {\n            if (this.defaultColorSchemeCache == null)\n                return;\n            var scheme = JSON.parse(this.defaultColorSchemeCache);\n            if (scheme == null)\n                return;\n            return scheme['COLORS_SHADE_MAP_BASE'];\n        },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerConfiguratorPreviewVideoService.prototype.update = function (config, withColors) {\n        var _this = this;\n        this.shareButtons = this.findConfigValueByName(config, 'shareButtons');\n        if (this.shareButtons == null)\n            this.shareButtons = '';\n        this.changeShareButtons(this.shareButtons.split(','));\n        this.pictureInPictureButtonVisible = this.findConfigValueByName(config, 'pictureInPictureButtonVisible');\n        if (this.pictureInPictureButtonVisible == null)\n            this.pictureInPictureButtonVisible = false;\n        this.changePictureInPictureButtonVisibility(this.pictureInPictureButtonVisible);\n        this.videoCastEnabled = this.findConfigValueByName(config, 'videoCastEnabled');\n        if (this.videoCastEnabled == null)\n            this.videoCastEnabled = false;\n        this.changeVideoCastEnabled(this.videoCastEnabled);\n        if (this.colorScheme && withColors)\n            Object.keys(this.colorScheme).forEach(function (name) { return _this.changeColor(config, name, _this.colorScheme[name]); });\n        var vol = this.findConfigValueByName(config, 'volume');\n        if (vol != null)\n            this.changeVolume(vol);\n        this.endSplashName = this.findConfigValueByName(config, 'endSplash');\n        this.logoImage = this.findConfigValueByName(config, 'logoFile');\n        this.logoLink = this.findConfigValueByName(config, 'logoLink');\n        this.logoTarget = this.findConfigValueByName(config, 'logoLinkTarget');\n        this.logoXPosition = this.findConfigValueByName(config, 'logoXPosition');\n        this.logoYPosition = this.findConfigValueByName(config, 'logoYPosition');\n        this.logoAutohide = this.findConfigValueByName(config, 'logoAutohide');\n        if (this.api && (this.logoImage != null\n            || this.logoLink != null\n            || this.logoTarget != null\n            || this.logoXPosition != null\n            || this.logoYPosition != null\n            || this.logoAutohide != null))\n            setTimeout(function () { return _this.dispatchSkinConfigEditLogoEvent(); }, 50);\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changePictureInPictureButtonVisibility = function (isVisible) {\n        if (this.api == null)\n            return;\n        this.api.skinConfig_updatePictureInPictureButtonVisible(isVisible);\n        this.pictureInPictureButtonVisible = isVisible;\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.changeVideoCastEnabled = function (isVisible) {\n        if (this.api == null)\n            return;\n        this.api.skinConfig_updateVideoCastEnabled(isVisible);\n        this.videoCastEnabled = isVisible;\n    };\n    PlayerConfiguratorPreviewVideoService.prototype.dispatchSkinConfigEditLogoEvent = function () {\n        this.api.skinConfig_editLogo(this.logoImage, this.logoLink, this.logoTarget, this.logoXPosition, this.logoYPosition, this.logoAutohide);\n    };\n    var _a;\n    PlayerConfiguratorPreviewVideoService = player_configurator_preview_video_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_configurator_preview_video_service___metadata(\"design:paramtypes\", [typeof (_a = typeof player_configurator_parser_PlayerConfiguratorParser !== \"undefined\" && player_configurator_parser_PlayerConfiguratorParser) === \"function\" && _a || Object])\n    ], PlayerConfiguratorPreviewVideoService);\n    return PlayerConfiguratorPreviewVideoService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/service/player.configurator.service.ts\nvar player_configurator_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar player_configurator_service_PlayerConfiguratorViewService = (function () {\n    function PlayerConfiguratorViewService(video, parser, view, translation, modal) {\n        this.video = video;\n        this.parser = parser;\n        this.view = view;\n        this.translation = translation;\n        this.modal = modal;\n        this.tickSubject = new Rx[\"Subject\"]();\n        this.tickStream$ = this.tickSubject.asObservable();\n    }\n    PlayerConfiguratorViewService.prototype.onRoutingChange = function () {\n        this.video.onRoutingChange(this.config);\n    };\n    PlayerConfiguratorViewService.prototype.destroy = function () {\n        this.id = null;\n        this.name = null;\n        this.updateAt = undefined;\n        this.createdAt = undefined;\n        this.config = undefined;\n        this.playerConfig = null;\n        this.configCacheSub = null;\n    };\n    PlayerConfiguratorViewService.prototype.tick = function () {\n        this.tickSubject.next(null);\n    };\n    PlayerConfiguratorViewService.prototype.parse = function (data) {\n        var _this = this;\n        this.id = data.playerConfig.id;\n        this.name = data.playerConfig.name;\n        this.updateAt = data.playerConfig.updated_at;\n        this.createdAt = data.playerConfig.created_at;\n        this.config = data.playerDefaults;\n        this.playerConfig = JSON.parse(data.playerConfig.conf_json);\n        this.parser.fixForSkinMainColorBackwardCompatibility(this.playerConfig);\n        this.configCacheSub = Rx[\"Observable\"].timer(250).subscribe(function () { return _this.updateCaches(); });\n    };\n    PlayerConfiguratorViewService.prototype.updateCaches = function () {\n        this.configCache = JSON.stringify(this.config);\n        this.checkSkinColorReset();\n    };\n    PlayerConfiguratorViewService.prototype.checkSkinColorReset = function () {\n        var reset = this.parser.findPluginByName('resetColorScheme', this.config);\n        if (reset != null) {\n            reset.hidden = JSON.stringify(this.video.colorScheme) === this.video.defaultColorSchemeCache;\n            this.tick();\n        }\n    };\n    PlayerConfiguratorViewService.prototype.resetColorScheme = function () {\n        var scheme = JSON.parse(this.video.defaultColorSchemeCache);\n        this.parser.updateConfigWithColorScheme(this.config, scheme, true);\n        this.video.colorScheme = scheme;\n        this.checkSkinColorReset();\n        this.updatePlayerWithColorScheme(this.config);\n    };\n    PlayerConfiguratorViewService.prototype.updateConfig = function (colorScheme) {\n        if (this.config == null)\n            return;\n        this.parser.updateConfigWithColorScheme(this.config, colorScheme, true);\n        this.parser.addValueAttribute(this.config);\n        this.parser.populateConfigWithPlayerData(this.config, this.playerConfig);\n        this.parser.resolveDependencies(this.config);\n        this.updatePreview();\n    };\n    PlayerConfiguratorViewService.prototype.updateAdvanceGroupHidden = function (group) {\n        this.parser.updateAdvanceValue(group);\n        for (var _i = 0, _a = group.items; _i < _a.length; _i++) {\n            var p = _a[_i];\n            if (this.parser.checkIfIsAdvanceGroup(p.group)) {\n                p.hidden = group.advanceValue\n                    ? group.advanceValue != this.parser.getAdvanceGroupValue(p.group)\n                    : this.parser.getAdvanceGroupValue(p.group);\n            }\n        }\n    };\n    PlayerConfiguratorViewService.prototype.parseOutput = function () {\n        if (this.config == null)\n            return;\n        return this.parser.parseOutput(this.config);\n    };\n    PlayerConfiguratorViewService.prototype.findConfigByPath = function (path) {\n        var children = this.config, val = {};\n        while (path.length > 0) {\n            var p = path.shift();\n            if (p && children) {\n                val = this.parser.findConfigByName(p, children);\n                children = val.children;\n            }\n        }\n        return val;\n    };\n    PlayerConfiguratorViewService.prototype.askSkinColorReset = function (value, type) {\n        var _this = this;\n        var answer = new Rx[\"Subject\"]();\n        this.modal.prompt(this.translation.translate('PLAYER.CONFIG.MODAL.COLOR_RESET.' + type, { color: value }) + \"<p class=\\\"color-sample\\\"><span style=\\\"background-color:\" + value + \"\\\"></span></p>\", [{\n                label: this.translation.translate('PLAYER.CONFIG.MODAL.COLOR_RESET.YES'),\n                fa: 'check', close: true, click: function () { _this.askSkinColorResetCloseSub = null; answer.next(true); }\n            }, {\n                label: this.translation.translate('PLAYER.CONFIG.MODAL.COLOR_RESET.NO'),\n                fa: 'ban', close: true, click: function () { _this.askSkinColorResetCloseSub = null; answer.next(false); }\n            }]);\n        this.askSkinColorResetCloseSub = this.modal.closeStream$.subscribe(function () { _this.askSkinColorResetCloseSub = null; answer.next(false); });\n        return answer.asObservable();\n    };\n    Object.defineProperty(PlayerConfiguratorViewService.prototype, \"hasChanged\", {\n        get: function () {\n            return JSON.stringify(this.config) !== this.configCache;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerConfiguratorViewService.prototype, \"configCacheSub\", {\n        set: function (s) {\n            if (this.configCacheSubscription != null)\n                this.configCacheSubscription.unsubscribe();\n            this.configCacheSubscription = s;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerConfiguratorViewService.prototype, \"askSkinColorResetCloseSub\", {\n        set: function (s) {\n            if (this.askSkinColorResetCloseSubscription != null)\n                this.askSkinColorResetCloseSubscription.unsubscribe();\n            this.askSkinColorResetCloseSubscription = s;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerConfiguratorViewService.prototype.updatePreview = function (conf) {\n        var c = conf == null ? this.config : conf;\n        if (c == null)\n            return;\n        for (var _i = 0, c_1 = c; _i < c_1.length; _i++) {\n            var plugin = c_1[_i];\n            if (plugin.children != null && plugin.children.length > 0) {\n                this.updatePreview(plugin.children);\n                continue;\n            }\n            if (plugin.name == 'skin' && this.config != null) {\n                this.video.changeSkin(this.config, plugin.value, false);\n                this.parser.resolveDependencies(this.config);\n                continue;\n            }\n            if (plugin.group[0] == 'color' && plugin.name == 'advance') {\n                if (plugin.value == true)\n                    this.updatePlayerWithColorScheme(c);\n                else\n                    this.updatePlayerWithBaseColor(c);\n                continue;\n            }\n            if (plugin.name == 'endSplash' && this.video.api) {\n                this.video.api.skinConfig_editEndSplash(plugin.value);\n                continue;\n            }\n        }\n    };\n    PlayerConfiguratorViewService.prototype.updatePlayerWithColorScheme = function (c) {\n        var configColorScheme = null;\n        for (var _i = 0, _a = this.parser.findRGB(c); _i < _a.length; _i++) {\n            var color = _a[_i];\n            if (color.name == 'COLORS_SHADE_MAP_BASE') {\n                continue;\n            }\n            else {\n                if (configColorScheme == null)\n                    configColorScheme = {};\n                configColorScheme[color.name] = color.value;\n            }\n        }\n        if (configColorScheme != null)\n            this.video.api.skinConfig_updateColorScheme(configColorScheme);\n    };\n    PlayerConfiguratorViewService.prototype.updatePlayerWithBaseColor = function (c) {\n        for (var _i = 0, _a = this.parser.findRGB(c); _i < _a.length; _i++) {\n            var color = _a[_i];\n            if (color.name == 'COLORS_SHADE_MAP_BASE') {\n                this.video.api.skinConfig_updateColorBase(color.value);\n                return;\n            }\n        }\n    };\n    var _a, _b, _c, _d, _e;\n    PlayerConfiguratorViewService = player_configurator_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_configurator_service___metadata(\"design:paramtypes\", [typeof (_a = typeof player_configurator_preview_video_service_PlayerConfiguratorPreviewVideoService !== \"undefined\" && player_configurator_preview_video_service_PlayerConfiguratorPreviewVideoService) === \"function\" && _a || Object, typeof (_b = typeof player_configurator_parser_PlayerConfiguratorParser !== \"undefined\" && player_configurator_parser_PlayerConfiguratorParser) === \"function\" && _b || Object, typeof (_c = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _e || Object])\n    ], PlayerConfiguratorViewService);\n    return PlayerConfiguratorViewService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/component/form/groups/player.configurator.form.groups.ts\nvar player_configurator_form_groups___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_form_groups___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar player_configurator_form_groups_PlayerConfiguratorFormGroups = (function () {\n    function PlayerConfiguratorFormGroups(service, translation, sidebar, cdr, parser, router) {\n        var _this = this;\n        this.service = service;\n        this.translation = translation;\n        this.sidebar = sidebar;\n        this.cdr = cdr;\n        this.parser = parser;\n        this.router = router;\n        this.service.tickStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n        this.parse();\n    }\n    PlayerConfiguratorFormGroups.prototype.ngOnInit = function () {\n        if (this.groups)\n            for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\n                var g = _a[_i];\n                this.service.updateAdvanceGroupHidden(g);\n            }\n    };\n    PlayerConfiguratorFormGroups.prototype.checkedChange = function () {\n        if (this.config) {\n            this.config.checked = !this.config.checked;\n            this.service.tick();\n            this.sidebar.update();\n        }\n    };\n    PlayerConfiguratorFormGroups.prototype.advanceChange = function (group, value) {\n        var _this = this;\n        if (this.config == null || group.advanceValue == value)\n            return;\n        var _loop_1 = function (p) {\n            if (this_1.parser.checkIfIsAdvanceGroup(p.group))\n                if (p.name === 'COLORS_SHADE_MAP_BASE') {\n                    if (!value)\n                        this_1.service.askSkinColorReset(p.value, 'BASE')\n                            .subscribe(function (ok) { return _this.updateAdvanceChange(group, p, !ok); });\n                    else\n                        this_1.updateAdvanceChange(group, p, value);\n                    return { value: void 0 };\n                }\n        };\n        var this_1 = this;\n        for (var _i = 0, _a = group.items; _i < _a.length; _i++) {\n            var p = _a[_i];\n            var state_1 = _loop_1(p);\n            if (typeof state_1 === \"object\")\n                return state_1.value;\n        }\n    };\n    PlayerConfiguratorFormGroups.prototype.getInputNgClass = function (data) {\n        var _a;\n        if (data.group == undefined)\n            return null;\n        var name = data.group[0].split(' ').join('_').toLowerCase();\n        return _a = {}, _a[name] = true, _a;\n    };\n    PlayerConfiguratorFormGroups.prototype.updateAdvanceChange = function (group, p, value) {\n        group.advanceValue = value;\n        this.service.updateAdvanceGroupHidden(group);\n        if (value === false)\n            this.service.video.changeColor(this.service.config, p.name, p.value, true);\n        this.service.tick();\n    };\n    PlayerConfiguratorFormGroups.prototype.parse = function () {\n        if (this.router.url != '/') {\n            var tree = this.router.url.split('/').reverse();\n            this.path = [];\n            for (var i = 0, t = tree.length; i < t; i++) {\n                if (tree[i] == 'configurator')\n                    break;\n                this.path.push(tree[i]);\n            }\n            if (this.path.length > 0) {\n                this.path = this.path.reverse();\n                this.config = this.service.findConfigByPath(this.path.slice(0));\n            }\n            if (this.config != null && this.config.children) {\n                this.groups = this.parser.mapGroups(this.config.children);\n                if (this.config.title == null || this.config.title[0] == null)\n                    return;\n                this.activateSwitchModel = {\n                    left: { on: this.config.title[0], off: this.config.title[0] },\n                    right: { on: 'is active', off: 'is deactivated' }\n                };\n            }\n        }\n    };\n    var _a, _b, _c, _d, _e, _f;\n    PlayerConfiguratorFormGroups = player_configurator_form_groups___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-configurator-form-groups',\n            template: __webpack_require__(1472),\n            styles: [__webpack_require__(1473)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_configurator_form_groups___metadata(\"design:paramtypes\", [typeof (_a = typeof player_configurator_service_PlayerConfiguratorViewService !== \"undefined\" && player_configurator_service_PlayerConfiguratorViewService) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _c || Object, typeof (_d = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _d || Object, typeof (_e = typeof player_configurator_parser_PlayerConfiguratorParser !== \"undefined\" && player_configurator_parser_PlayerConfiguratorParser) === \"function\" && _e || Object, typeof (_f = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _f || Object])\n    ], PlayerConfiguratorFormGroups);\n    return PlayerConfiguratorFormGroups;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/component/form/inputs/docsLink/docsLink.component.ts\nvar docsLink_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar docsLink_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar docsLink_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar docsLink_component_DocsLinkComponent = (function (_super) {\n    docsLink_component___extends(DocsLinkComponent, _super);\n    function DocsLinkComponent(locale, translation) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        return _this;\n    }\n    var _a, _b;\n    docsLink_component___decorate([\n        Object(core_es5[\"Input\"])(),\n        docsLink_component___metadata(\"design:type\", String)\n    ], DocsLinkComponent.prototype, \"link\", void 0);\n    DocsLinkComponent = docsLink_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'docs-link',\n            template: __webpack_require__(1474),\n            styles: [__webpack_require__(1475)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        docsLink_component___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object])\n    ], DocsLinkComponent);\n    return DocsLinkComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/component/form/inputs/player.configurator.form.inputs.ts\nvar player_configurator_form_inputs___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_form_inputs___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar player_configurator_form_inputs_PlayerConfiguratorFormInputs = (function () {\n    function PlayerConfiguratorFormInputs(locale, translation, service, parser, modal, url, view, cdr) {\n        this.locale = locale;\n        this.translation = translation;\n        this.service = service;\n        this.parser = parser;\n        this.modal = modal;\n        this.url = url;\n        this.view = view;\n        this.cdr = cdr;\n        this.dataDelimiter = ',';\n        this.hxType = HaxeTypes;\n        this.codemirrorConfig = {\n            mode: { name: 'javascript', json: true },\n            showCursorWhenSelecting: true,\n            matchBrackets: true,\n            matchTags: true,\n            showTrailingSpace: true,\n            autoCloseBrackets: true,\n            autoCloseTags: true,\n            lineNumbers: true,\n            gutters: ['CodeMirror-lint-markers'],\n            lint: true,\n            indentUnit: 1,\n            autofocus: false\n        };\n    }\n    PlayerConfiguratorFormInputs.prototype.ngOnInit = function () {\n        var _this = this;\n        this.resizeSubscription = this.view.resizeStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n        this.tickSubscription = this.service.tickStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n    };\n    PlayerConfiguratorFormInputs.prototype.ngOnDestroy = function () {\n        if (this.resizeSubscription != null)\n            this.resizeSubscription.unsubscribe();\n        if (this.tickSubscription != null)\n            this.tickSubscription.unsubscribe();\n    };\n    PlayerConfiguratorFormInputs.prototype.onResetData = function (data, value) {\n        var _this = this;\n        this.service.askSkinColorReset(value, data.name == 'COLORS_SHADE_MAP_BASE' ? 'BASE' : 'COLOR').subscribe(function (ok) {\n            if (ok) {\n                _this.onChangeData(data, value);\n                _this.cdr.markForCheck();\n            }\n        });\n    };\n    PlayerConfiguratorFormInputs.prototype.onChangeData = function (data, value) {\n        var _this = this;\n        if (data.type == HaxeTypes[HaxeTypes.RGB] && data.name) {\n            if (data.name == 'COLORS_SHADE_MAP_BASE' && data.value === value)\n                return;\n            data.value = value;\n            this.service.video.changeColor(this.service.config, data.name, data.value);\n            return;\n        }\n        data.value = value;\n        if (data.name == 'shareButtons') {\n            this.service.video.changeShareButtons(data.value.split(','));\n            return;\n        }\n        if (data.name == 'pictureInPictureButtonVisible') {\n            this.service.video.changePictureInPictureButtonVisibility(data.value);\n            return;\n        }\n        if (data.name == 'videoCastEnabled') {\n            this.service.video.changeVideoCastEnabled(data.value);\n            return;\n        }\n        if (data.name == 'skin' && this.service.config) {\n            var baseColorPlugin = this.parser.findPluginByName('COLORS_SHADE_MAP_BASE', this.service.config);\n            var baseColorValue = baseColorPlugin ? baseColorPlugin.value : null;\n            this.service.video.changeSkin(this.service.config, data.value, true);\n            this.parser.resolveDependencies(this.service.config);\n            if (baseColorValue)\n                this.service.video.changeColor(this.service.config, 'COLORS_SHADE_MAP_BASE', baseColorValue);\n            this.service.checkSkinColorReset();\n            return;\n        }\n        if (data.name == 'logoFile') {\n            this.service.video.changeLogoFile(data.value);\n            return;\n        }\n        if (data.name == 'logoLink') {\n            this.service.video.changeLogoLink(data.value);\n            return;\n        }\n        if (data.name == 'logoLinkTarget') {\n            this.service.video.changeLogoTarget(data.value);\n            return;\n        }\n        if (data.name == 'logoXPosition') {\n            this.service.video.changeLogoXPosition(data.value);\n            return;\n        }\n        if (data.name == 'logoYPosition') {\n            this.service.video.changeLogoYPosition(data.value);\n            return;\n        }\n        if (data.name == 'logoAutohide') {\n            this.service.video.changeLogoAutohide(data.value);\n            return;\n        }\n        if (data.name == 'endSplash') {\n            this.service.video.changeEndSplash(data.value);\n            return;\n        }\n        if (data.name == 'volume') {\n            this.service.video.changeVolume(data.value);\n            return;\n        }\n        if (data.name == 'resetColorScheme') {\n            this.service.askSkinColorReset(this.service.video.resetColor, 'BASE').subscribe(function (ok) {\n                if (ok)\n                    _this.service.resetColorScheme();\n            });\n            return;\n        }\n    };\n    PlayerConfiguratorFormInputs.prototype.formatCodeValue = function (input, pretty) {\n        var output = input + '';\n        try {\n            var json = JSON.parse(input);\n            output = JSON.stringify(json, null, pretty ? '\\t' : undefined);\n        }\n        catch (e) { }\n        return output;\n    };\n    PlayerConfiguratorFormInputs.prototype.getDropdownModel = function (data) {\n        var model = [];\n        for (var i = 0; i < data.values.length; i++)\n            model.push({ value: data.values[i], label: data.values[i] });\n        return model;\n    };\n    PlayerConfiguratorFormInputs.prototype.stringToArray = function (data) {\n        if (data == null)\n            return null;\n        return data.split(this.dataDelimiter);\n    };\n    PlayerConfiguratorFormInputs.prototype.getRadioIconMap = function () {\n        return {\n            'embed': 'fa-code',\n            'mail': 'fa-at',\n            'facebook': 'fa-facebook-official',\n            'twitter': 'fa-twitter',\n            'linkedin': 'fa-linkedin'\n        };\n    };\n    PlayerConfiguratorFormInputs.prototype.isFull = function (config) {\n        return !this.isSmall(config);\n    };\n    PlayerConfiguratorFormInputs.prototype.isSmall = function (config) {\n        return this.view.width > 1600 && ((config.type == HaxeTypes[HaxeTypes.RGB] && config.name != 'COLORS_SHADE_MAP_BASE')\n            ||\n                (config.name == 'logoLinkTarget' || config.name == 'logoAutohide' || config.name == 'logoXPosition' || config.name == 'logoYPosition'));\n    };\n    Object.defineProperty(PlayerConfiguratorFormInputs.prototype, \"isResetBtn\", {\n        get: function () {\n            return this.data.type == HaxeTypes[HaxeTypes.String] && this.data.value != null && this.data.value.indexOf('reset') > -1;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(PlayerConfiguratorFormInputs.prototype, \"isHidden\", {\n        get: function () {\n            return this.data.hidden;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    PlayerConfiguratorFormInputs.prototype.arrayToString = function (data) {\n        if (data == null)\n            return '';\n        data = data.filter(function (s) { return s != null && s != '' && typeof s != 'undefined'; });\n        if (data.length > 0)\n            return data.join(this.dataDelimiter);\n        else\n            return '';\n    };\n    PlayerConfiguratorFormInputs.prototype.getImageGridUrlParser = function (name) {\n        var _this = this;\n        if (name == 'skin')\n            return function (v) { return _this.url.file('img/skins/' + v + '/screenshot.png'); };\n        if (name == 'endSplash')\n            return function (v) { return _this.url.file('img/endsplash/' + v + '.png'); };\n        return function (v) { return null; };\n    };\n    PlayerConfiguratorFormInputs.prototype.onTooBigLogo = function (data) {\n        this.modal.prompt(this.translation.translate('PLAYER.CONFIG.TOO_BIG_LOGO', {\n            limitWidth: data.maxWidth,\n            limitHeight: data.maxHeight,\n            limitFileSize: data.maxFileSize\n        }), []);\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    PlayerConfiguratorFormInputs = player_configurator_form_inputs___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-config-form-inputs',\n            host: {\n                '[class.form-group-inputs-full]': 'isFull(data)',\n                '[class.form-group-inputs-small]': 'isSmall(data)',\n                '[class.hidden]': 'isHidden',\n            },\n            template: __webpack_require__(1476),\n            styles: [__webpack_require__(1477)],\n            inputs: ['data', 'dataDelimiter'],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_configurator_form_inputs___metadata(\"design:paramtypes\", [typeof (_a = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _b || Object, typeof (_c = typeof player_configurator_service_PlayerConfiguratorViewService !== \"undefined\" && player_configurator_service_PlayerConfiguratorViewService) === \"function\" && _c || Object, typeof (_d = typeof player_configurator_parser_PlayerConfiguratorParser !== \"undefined\" && player_configurator_parser_PlayerConfiguratorParser) === \"function\" && _d || Object, typeof (_e = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _e || Object, typeof (_f = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _f || Object, typeof (_g = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _g || Object, typeof (_h = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _h || Object])\n    ], PlayerConfiguratorFormInputs);\n    return PlayerConfiguratorFormInputs;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/component/form/player.configurator.form.ts\nvar player_configurator_form___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_form___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar player_configurator_form_PlayerConfiguratorForm = (function () {\n    function PlayerConfiguratorForm(service, route) {\n        var _this = this;\n        this.service = service;\n        this.route = route;\n        this.route.url.subscribe(function (u) { return _this.parse(u.toString()); });\n    }\n    PlayerConfiguratorForm.prototype.parse = function (path) {\n        if (path == 'configurator') {\n            this.children = this.service.config;\n        }\n        else if (path != '') {\n            var config = this.service.findConfigByPath([path]);\n            if (config != null) {\n                this.children = config.children;\n            }\n        }\n    };\n    var _a, _b, _c;\n    player_configurator_form___decorate([\n        Object(core_es5[\"ViewChild\"])('outletContainer'),\n        player_configurator_form___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], PlayerConfiguratorForm.prototype, \"outlet\", void 0);\n    PlayerConfiguratorForm = player_configurator_form___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-configurator-form',\n            template: __webpack_require__(1478),\n            styles: [__webpack_require__(1479)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_configurator_form___metadata(\"design:paramtypes\", [typeof (_b = typeof player_configurator_service_PlayerConfiguratorViewService !== \"undefined\" && player_configurator_service_PlayerConfiguratorViewService) === \"function\" && _b || Object, typeof (_c = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _c || Object])\n    ], PlayerConfiguratorForm);\n    return PlayerConfiguratorForm;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/service/player.configurator.save.service.ts\nvar player_configurator_save_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_save_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar player_configurator_save_service_PlayerConfiguratorSaveService = (function () {\n    function PlayerConfiguratorSaveService(view, configService, translation, playerService, user, modal, flash) {\n        this.view = view;\n        this.configService = configService;\n        this.translation = translation;\n        this.playerService = playerService;\n        this.user = user;\n        this.modal = modal;\n        this.flash = flash;\n    }\n    PlayerConfiguratorSaveService.prototype.ask = function () {\n        var _this = this;\n        this.view.spinner(false);\n        var answer = new Rx[\"Subject\"]();\n        this.modal.prompt(this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.TEXT'), [\n            { label: this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.SAVE'), fa: 'save', close: true, click: function () { return _this.save().subscribe(function (ok) { return answer.next(ok); }); } },\n            { label: this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.DONT_SAVE'), fa: 'trash', close: true, click: function () { return answer.next(true); } },\n            { label: this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.CANCEL'), fa: 'ban', close: true, click: function () { return answer.next(false); } }\n        ]);\n        return answer.asObservable();\n    };\n    PlayerConfiguratorSaveService.prototype.save = function () {\n        var _this = this;\n        this.savedSub = new Rx[\"Subject\"]();\n        this.view.spinner(true);\n        var conf = this.configService.parseOutput();\n        this.playerService.updatePlayer(this.user.accountId, this.configService.id.toString(), {\n            name: this.configService.name ? this.configService.name : 'new player',\n            conf_json: JSON.stringify(conf)\n        }).subscribe(null, function (e) { return _this.showError(e, function () { return _this.save(); }); }, function () {\n            _this.flash.show(_this.translation.translate('PLAYER.VERSIONS.CHANGES_SAVED_NOTIFICATION'), { cssClass: 'alert-success', timeout: 2000 });\n            _this.view.spinner(false);\n            _this.askPublish();\n        });\n        return this.savedSub.asObservable();\n    };\n    PlayerConfiguratorSaveService.prototype.askPublish = function () {\n        var _this = this;\n        this.modal.prompt(this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.TEXT'), [{\n                label: this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.YES'),\n                fa: 'paper-plane', close: true, click: function () { return _this.publish(); }\n            }, {\n                label: this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.NO'),\n                fa: 'ban', close: true, click: function () { return _this.savedSub.next(true); }\n            }]);\n    };\n    PlayerConfiguratorSaveService.prototype.publish = function () {\n        var _this = this;\n        this.view.spinner(true);\n        this.playerService.generateBuild(this.user.accountId, this.configService.id.toString()).subscribe(function () { return _this.configService.updateCaches(); }, function (e) { return _this.showError(e, function () { return _this.publish(); }); }, function () { return _this.savedSub.next(true); });\n    };\n    PlayerConfiguratorSaveService.prototype.showError = function (e, onYes) {\n        this.view.spinner(false);\n        this.savedSub.next(false);\n        this.modal.prompt(this.translation.translate('PLAYER.CONFIG.MODAL.ERROR.SAVE.TEXT'), [{\n                label: this.translation.translate('PLAYER.CONFIG.MODAL.ERROR.SAVE.YES'),\n                fa: 'retweet', close: true, click: function () { return onYes(); }\n            }, {\n                label: this.translation.translate('PLAYER.CONFIG.MODAL.ERROR.SAVE.NO'),\n                fa: 'ban', close: true\n            }]);\n    };\n    var _a, _b, _c, _d, _e, _f, _g;\n    PlayerConfiguratorSaveService = player_configurator_save_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_configurator_save_service___metadata(\"design:paramtypes\", [typeof (_a = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _a || Object, typeof (_b = typeof player_configurator_service_PlayerConfiguratorViewService !== \"undefined\" && player_configurator_service_PlayerConfiguratorViewService) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _c || Object, typeof (_d = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _d || Object, typeof (_e = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _e || Object, typeof (_f = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _f || Object, typeof (_g = typeof angular2_flash_messages[\"FlashMessagesService\"] !== \"undefined\" && angular2_flash_messages[\"FlashMessagesService\"]) === \"function\" && _g || Object])\n    ], PlayerConfiguratorSaveService);\n    return PlayerConfiguratorSaveService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/component/preview/video/player.configurator.preview.video.ts\nvar player_configurator_preview_video___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_preview_video___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar player_configurator_preview_video_PlayerConfiguratorPreviewVideo = (function () {\n    function PlayerConfiguratorPreviewVideo(service) {\n        this.service = service;\n    }\n    PlayerConfiguratorPreviewVideo.prototype.ngOnInit = function () {\n        this.service.video.setup(this.player.nativeElement);\n        this.service.video.create();\n    };\n    PlayerConfiguratorPreviewVideo.prototype.ngAfterViewInit = function () {\n        if (this.service.video.colorScheme)\n            this.service.updateConfig(this.service.video.colorScheme);\n    };\n    PlayerConfiguratorPreviewVideo.prototype.ngOnDestroy = function () {\n        this.service.video.destroy();\n        this.service.destroy();\n    };\n    PlayerConfiguratorPreviewVideo.prototype.resize = function (rect) {\n    };\n    var _a, _b;\n    player_configurator_preview_video___decorate([\n        Object(core_es5[\"ViewChild\"])('player'),\n        player_configurator_preview_video___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], PlayerConfiguratorPreviewVideo.prototype, \"player\", void 0);\n    PlayerConfiguratorPreviewVideo = player_configurator_preview_video___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-configurator-preview-video',\n            template: '<div #player></div>',\n            styles: [':host{position: absolute;top: 0;left: 10px;right: 10px;bottom: 0;}:host > div{width: 100%;height: 100%;}'],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_configurator_preview_video___metadata(\"design:paramtypes\", [typeof (_b = typeof player_configurator_service_PlayerConfiguratorViewService !== \"undefined\" && player_configurator_service_PlayerConfiguratorViewService) === \"function\" && _b || Object])\n    ], PlayerConfiguratorPreviewVideo);\n    return PlayerConfiguratorPreviewVideo;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/component/preview/player.configurator.preview.ts\nvar player_configurator_preview___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_configurator_preview___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_preview___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar player_configurator_preview_PlayerConfiguratorPreview = (function (_super) {\n    player_configurator_preview___extends(PlayerConfiguratorPreview, _super);\n    function PlayerConfiguratorPreview(view, locale, translation, configService, renderer, router, route, cdr, save) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.view = view;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.configService = configService;\n        _this.renderer = renderer;\n        _this.router = router;\n        _this.route = route;\n        _this.cdr = cdr;\n        _this.save = save;\n        return _this;\n    }\n    PlayerConfiguratorPreview.prototype.ngOnInit = function () {\n        var _this = this;\n        this.view.resizeStream$.subscribe(function () { return _this.resize(); });\n        this.configService.video.playerStateStream$\n            .subscribe(function (s) { return _this.handlePlayerState(s); });\n    };\n    PlayerConfiguratorPreview.prototype.ngAfterViewChecked = function () {\n        this.resize();\n    };\n    PlayerConfiguratorPreview.prototype.resize = function () {\n        if (this.head != null && this.body != null && this.foot != null && this.video != null) {\n            var head = this.head.nativeElement.getBoundingClientRect(), foot = this.foot.nativeElement.getBoundingClientRect(), top = (head.bottom - head.top), bottom = (foot.bottom - foot.top);\n            this.renderer.setStyle(this.body.nativeElement, 'top', top + 'px');\n            this.renderer.setStyle(this.body.nativeElement, 'bottom', bottom + 'px');\n            var bodySize = this.body.nativeElement.getBoundingClientRect();\n            this.video.resize(bodySize);\n        }\n    };\n    PlayerConfiguratorPreview.prototype.saveChanges = function () {\n        alert('Sorry updates of this player version are no longer supported. This player is read-only now. Please create new player from players list for applying changes.');\n    };\n    PlayerConfiguratorPreview.prototype.setPlayerState = function (state) {\n        this.configService.video.changePlayerState(state);\n        this.configService.video.changeSkinAutohide(this.configService.video.enableSkinAutohide);\n        this.configService.tick();\n    };\n    PlayerConfiguratorPreview.prototype.changeSkinAutohide = function (v) {\n        this.configService.video.changeSkinAutohide(v);\n    };\n    PlayerConfiguratorPreview.prototype.handlePlayerState = function (s) {\n        if (this.state != s) {\n            this.state = s;\n            this.cdr.markForCheck();\n        }\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n    player_configurator_preview___decorate([\n        Object(core_es5[\"ViewChild\"])('configuratorPreviewFormHead'),\n        player_configurator_preview___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], PlayerConfiguratorPreview.prototype, \"head\", void 0);\n    player_configurator_preview___decorate([\n        Object(core_es5[\"ViewChild\"])('configuratorPreviewFormBody'),\n        player_configurator_preview___metadata(\"design:type\", typeof (_b = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _b || Object)\n    ], PlayerConfiguratorPreview.prototype, \"body\", void 0);\n    player_configurator_preview___decorate([\n        Object(core_es5[\"ViewChild\"])('configuratorPreviewFormFoot'),\n        player_configurator_preview___metadata(\"design:type\", typeof (_c = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _c || Object)\n    ], PlayerConfiguratorPreview.prototype, \"foot\", void 0);\n    player_configurator_preview___decorate([\n        Object(core_es5[\"ViewChild\"])(player_configurator_preview_video_PlayerConfiguratorPreviewVideo),\n        player_configurator_preview___metadata(\"design:type\", typeof (_d = typeof player_configurator_preview_video_PlayerConfiguratorPreviewVideo !== \"undefined\" && player_configurator_preview_video_PlayerConfiguratorPreviewVideo) === \"function\" && _d || Object)\n    ], PlayerConfiguratorPreview.prototype, \"video\", void 0);\n    PlayerConfiguratorPreview = player_configurator_preview___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-configurator-preview',\n            template: __webpack_require__(1480),\n            styles: [__webpack_require__(1481)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_configurator_preview___metadata(\"design:paramtypes\", [typeof (_e = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _e || Object, typeof (_f = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _f || Object, typeof (_g = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _g || Object, typeof (_h = typeof player_configurator_service_PlayerConfiguratorViewService !== \"undefined\" && player_configurator_service_PlayerConfiguratorViewService) === \"function\" && _h || Object, typeof (_j = typeof core_es5[\"Renderer2\"] !== \"undefined\" && core_es5[\"Renderer2\"]) === \"function\" && _j || Object, typeof (_k = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _k || Object, typeof (_l = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _l || Object, typeof (_m = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _m || Object, typeof (_o = typeof player_configurator_save_service_PlayerConfiguratorSaveService !== \"undefined\" && player_configurator_save_service_PlayerConfiguratorSaveService) === \"function\" && _o || Object])\n    ], PlayerConfiguratorPreview);\n    return PlayerConfiguratorPreview;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/component/view/player.configurator.view.ts\nvar player_configurator_view___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_view___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar player_configurator_view_PlayerConfiguratorViewComponent = (function () {\n    function PlayerConfiguratorViewComponent(service, view, translation, save, colorpickers, sidebar, renderer, router, route, parser, user, modal) {\n        this.service = service;\n        this.view = view;\n        this.translation = translation;\n        this.save = save;\n        this.colorpickers = colorpickers;\n        this.sidebar = sidebar;\n        this.renderer = renderer;\n        this.router = router;\n        this.route = route;\n        this.parser = parser;\n        this.user = user;\n        this.modal = modal;\n        this.isAppInIframe = false;\n        this.isAppInIframe = this.view.checkIfAppInIframe();\n    }\n    PlayerConfiguratorViewComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.view.spinner(true);\n        this.service.tickStream$.subscribe(function () { return _this.parseSidebar(); });\n        this.route.params.subscribe(function (params) { return _this.id = params['id']; });\n        this.route.data.subscribe(function (d) { return _this.parse(d); });\n        this.router.events.subscribe(function (e) { return _this.service.onRoutingChange(); });\n    };\n    PlayerConfiguratorViewComponent.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.renderer.listen(this.form.outlet.nativeElement, 'scroll', function () { return _this.colorpickers.close(); });\n        this.view.spinner(false);\n    };\n    PlayerConfiguratorViewComponent.prototype.ngOnDestroy = function () {\n        this.sidebar.openDefault();\n    };\n    PlayerConfiguratorViewComponent.prototype.parse = function (data) {\n        this.data = data;\n        if (this.data != null) {\n            if (this.data.playerConfig != null && this.data.playerDefaults != null) {\n                this.parseRoutes();\n                this.parseSidebar();\n                this.service.parse(this.data);\n            }\n            else if (true)\n                throw new Error('EMPTY RESOLVER DATA');\n        }\n    };\n    PlayerConfiguratorViewComponent.prototype.parseRoutes = function () {\n        if (this.route.routeConfig) {\n            this.route.routeConfig.children = this.mapRoutes(this.data.playerDefaults);\n            this.router.initialNavigation();\n            this.router.navigateByUrl(this.router.url + '/' + this.route.routeConfig.children[0].path);\n        }\n    };\n    PlayerConfiguratorViewComponent.prototype.mapRoutes = function (config) {\n        var _this = this;\n        var routes = [], redirectTo = config[0].name;\n        config.forEach(function (p) {\n            if (_this.parser.isForm(p) && p.children != undefined)\n                routes.push({ path: p.name, component: player_configurator_form_PlayerConfiguratorForm, children: _this.mapRoutes(p.children) });\n            else if (_this.parser.isFormGroups(p))\n                routes.push({ path: p.name, component: player_configurator_form_groups_PlayerConfiguratorFormGroups });\n        });\n        routes.push({ path: '', redirectTo: redirectTo, pathMatch: 'full' });\n        routes.push({ path: '**', redirectTo: redirectTo });\n        return routes;\n    };\n    PlayerConfiguratorViewComponent.prototype.parseSidebar = function () {\n        var items = this.mapSidebar(['admin', 'player', this.id, 'configurator'], this.data.playerDefaults);\n        items.push({ name: 'back', icon: 'fa-arrow-left', route: ['admin', 'player', 'list'], noHoverIcon: true });\n        this.sidebar.open({\n            renderAt: Date.now(),\n            name: 'configuration options',\n            items: items\n        });\n    };\n    PlayerConfiguratorViewComponent.prototype.mapSidebar = function (route, config) {\n        var items = [];\n        for (var _i = 0, config_1 = config; _i < config_1.length; _i++) {\n            var p = config_1[_i];\n            if (p.name == 'advertisements' && !this.user.hasAdsSupport())\n                continue;\n            if (p.title && p.name) {\n                if (this.parser.isForm(p) && p.children) {\n                    items.push({\n                        name: p.title[0] != undefined ? this.mapSidebarName(p.title[0]) : 'undefined',\n                        icon: this.mapSidebarIcon(p),\n                        route: route.concat([p.name]),\n                        data: this.mapSidebar(route.concat([p.name]), p.children)\n                    });\n                }\n                else if (this.parser.isFormGroups(p)) {\n                    items.push({\n                        name: p.title[0] ? this.mapSidebarName(p.title[0]) : 'undefined',\n                        icon: this.mapSidebarIcon(p),\n                        route: route.concat([p.name]),\n                        checked: p.checked\n                    });\n                }\n            }\n        }\n        return items;\n    };\n    PlayerConfiguratorViewComponent.prototype.mapSidebarIcon = function (p) {\n        var icon;\n        switch (p.name) {\n            case 'player':\n                icon = 'fa-play-circle';\n                break;\n            case 'skin':\n                icon = 'fa-sliders';\n                break;\n            case 'advertisements':\n                icon = 'fa-bullhorn';\n                break;\n            case 'statistics':\n                icon = 'fa-pie-chart';\n                break;\n            case 'wrappers':\n                icon = 'fa-television';\n                break;\n            default: icon = undefined;\n        }\n        return icon;\n    };\n    PlayerConfiguratorViewComponent.prototype.mapSidebarName = function (name) {\n        switch (name) {\n            case 'Advertisement plugins': return 'Advertisement';\n            case 'Player configuration': return 'Playback';\n            case 'Skin configuration': return 'Display';\n            case 'Terms and Conditions': return 'Terms';\n            default: return name;\n        }\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n    player_configurator_view___decorate([\n        Object(core_es5[\"ViewChild\"])(player_configurator_form_PlayerConfiguratorForm),\n        player_configurator_view___metadata(\"design:type\", typeof (_a = typeof player_configurator_form_PlayerConfiguratorForm !== \"undefined\" && player_configurator_form_PlayerConfiguratorForm) === \"function\" && _a || Object)\n    ], PlayerConfiguratorViewComponent.prototype, \"form\", void 0);\n    PlayerConfiguratorViewComponent = player_configurator_view___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-configurator-view',\n            template: __webpack_require__(1482),\n            styles: [__webpack_require__(1483)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_configurator_view___metadata(\"design:paramtypes\", [typeof (_b = typeof player_configurator_service_PlayerConfiguratorViewService !== \"undefined\" && player_configurator_service_PlayerConfiguratorViewService) === \"function\" && _b || Object, typeof (_c = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object, typeof (_e = typeof player_configurator_save_service_PlayerConfiguratorSaveService !== \"undefined\" && player_configurator_save_service_PlayerConfiguratorSaveService) === \"function\" && _e || Object, typeof (_f = typeof colorpicker_service_ColorpickerService !== \"undefined\" && colorpicker_service_ColorpickerService) === \"function\" && _f || Object, typeof (_g = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _g || Object, typeof (_h = typeof core_es5[\"Renderer2\"] !== \"undefined\" && core_es5[\"Renderer2\"]) === \"function\" && _h || Object, typeof (_j = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _j || Object, typeof (_k = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _k || Object, typeof (_l = typeof player_configurator_parser_PlayerConfiguratorParser !== \"undefined\" && player_configurator_parser_PlayerConfiguratorParser) === \"function\" && _l || Object, typeof (_m = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _m || Object, typeof (_o = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _o || Object])\n    ], PlayerConfiguratorViewComponent);\n    return PlayerConfiguratorViewComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/service/guard/player.configurator.deactivate.guard.ts\nvar player_configurator_deactivate_guard___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_deactivate_guard___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar player_configurator_deactivate_guard_PlayerConfiguratorCanDeactivateService = (function () {\n    function PlayerConfiguratorCanDeactivateService(service) {\n        this.service = service;\n    }\n    PlayerConfiguratorCanDeactivateService.prototype.canDeactivate = function (component, currentRoute, currentState, nextState) {\n        return true;\n    };\n    var _a;\n    PlayerConfiguratorCanDeactivateService = player_configurator_deactivate_guard___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_configurator_deactivate_guard___metadata(\"design:paramtypes\", [typeof (_a = typeof player_configurator_service_PlayerConfiguratorViewService !== \"undefined\" && player_configurator_service_PlayerConfiguratorViewService) === \"function\" && _a || Object])\n    ], PlayerConfiguratorCanDeactivateService);\n    return PlayerConfiguratorCanDeactivateService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/service/resolve/player.configurator.resolve.config.ts\nvar player_configurator_resolve_config___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_resolve_config___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar player_configurator_resolve_config_PlayerConfiguratorResolveConfig = (function () {\n    function PlayerConfiguratorResolveConfig(service) {\n        this.service = service;\n    }\n    PlayerConfiguratorResolveConfig.prototype.resolve = function (_route, _state) {\n        return this.service.readedPlayer;\n    };\n    var _a;\n    PlayerConfiguratorResolveConfig = player_configurator_resolve_config___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_configurator_resolve_config___metadata(\"design:paramtypes\", [typeof (_a = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _a || Object])\n    ], PlayerConfiguratorResolveConfig);\n    return PlayerConfiguratorResolveConfig;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/service/resolve/player.configurator.resolve.defaults.ts\nvar player_configurator_resolve_defaults___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_resolve_defaults___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar player_configurator_resolve_defaults_PlayerConfiguratorResolveDefaults = (function () {\n    function PlayerConfiguratorResolveDefaults(service, view) {\n        this.service = service;\n        this.view = view;\n    }\n    PlayerConfiguratorResolveDefaults.prototype.resolve = function (route, state) {\n        this.view.spinner(true);\n        return this.service.defaultPlayer();\n    };\n    var _a, _b;\n    PlayerConfiguratorResolveDefaults = player_configurator_resolve_defaults___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_configurator_resolve_defaults___metadata(\"design:paramtypes\", [typeof (_a = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _a || Object, typeof (_b = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _b || Object])\n    ], PlayerConfiguratorResolveDefaults);\n    return PlayerConfiguratorResolveDefaults;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/service/resolve/player.configurator.resolve.sources.ts\nvar player_configurator_resolve_sources___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_resolve_sources___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar player_configurator_resolve_sources_PlayerConfiguratorResolveSources = (function () {\n    function PlayerConfiguratorResolveSources(service, user, view, url) {\n        this.service = service;\n        this.user = user;\n        this.view = view;\n        this.url = url;\n        this.playersPath = 'players/';\n        this.playersExtension = '.js.min';\n        this.actualPlayer = -1;\n        this.players = ['zebra', 'gorilla', 'mole', 'snake'];\n        this.subject = new Subject[\"Subject\"]();\n    }\n    PlayerConfiguratorResolveSources.prototype.resolve = function (route, state) {\n        this.head = document.getElementsByTagName('head')[0];\n        this.view.spinner(true);\n        this.loadNext();\n        return this.subject.asObservable();\n    };\n    PlayerConfiguratorResolveSources.prototype.loadNext = function () {\n        if (this.actualPlayer < this.players.length - 1) {\n            this.actualPlayer++;\n            this.loadScript(this.players[this.actualPlayer]);\n        }\n        else {\n            this.subject.complete();\n        }\n    };\n    PlayerConfiguratorResolveSources.prototype.loadScript = function (name) {\n        var _this = this;\n        var cacheBuster = '?r=' + Math.floor(1000000000 * Math.random());\n        var src = this.url.file(this.playersPath + name + this.playersExtension + cacheBuster);\n        var exist = false;\n        var children = this.head.getElementsByTagName('script');\n        for (var i = 0, t = children.length, s = void 0; i < t; i++) {\n            s = children.item(i);\n            if (s.getAttribute('src') == src) {\n                exist = true;\n                break;\n            }\n        }\n        if (exist) {\n            this.loadNext();\n        }\n        else {\n            var script = document.createElement('script');\n            script.type = 'text/javascript';\n            script.async = true;\n            script.defer = true;\n            script.charset = 'utf-8';\n            script.addEventListener('error', function (e) { return _this.subject.error(e); }, false);\n            script.addEventListener('load', function () { return _this.loadNext(); }, false);\n            script.src = src;\n            this.head.appendChild(script);\n        }\n    };\n    var _a, _b, _c, _d;\n    PlayerConfiguratorResolveSources = player_configurator_resolve_sources___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_configurator_resolve_sources___metadata(\"design:paramtypes\", [typeof (_a = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object, typeof (_c = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _c || Object, typeof (_d = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _d || Object])\n    ], PlayerConfiguratorResolveSources);\n    return PlayerConfiguratorResolveSources;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/service/guard/player.configurator.activate.guard.ts\nvar player_configurator_activate_guard___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_configurator_activate_guard___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\nvar player_configurator_activate_guard_PlayerConfiguratorActivateGuard = (function () {\n    function PlayerConfiguratorActivateGuard(router, service, user) {\n        this.router = router;\n        this.service = service;\n        this.user = user;\n    }\n    PlayerConfiguratorActivateGuard.prototype.canActivate = function (route, _state) {\n        var _this = this;\n        var buildId = route.params['id'];\n        if (buildId == null || this.user.accountId == null)\n            return this.gotoPlayers();\n        return this.service.readPlayer(this.user.accountId, buildId)\n            .pipe(Object(operators[\"map\"])(function (resp) {\n            if (!resp || !resp.conf_json)\n                return _this.gotoPlayers();\n            var conf = {};\n            try {\n                conf = JSON.parse(resp.conf_json);\n            }\n            catch (error) {\n                console.error(error);\n                return _this.gotoPlayers();\n            }\n            var keys = Object.keys(conf);\n            if (keys.length === 1 && keys[0] === 'bs')\n                return true;\n            return _this.gotoBuilder(buildId);\n        }));\n    };\n    PlayerConfiguratorActivateGuard.prototype.gotoPlayers = function () {\n        this.router.navigate(['admin', 'player']);\n        return false;\n    };\n    PlayerConfiguratorActivateGuard.prototype.gotoBuilder = function (buildId) {\n        this.router.navigate(['admin', 'player', buildId, player_model[\"a\" /* PlayerRoute */].builder]);\n        return false;\n    };\n    var _a, _b, _c;\n    PlayerConfiguratorActivateGuard = player_configurator_activate_guard___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_configurator_activate_guard___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _a || Object, typeof (_b = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _b || Object, typeof (_c = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _c || Object])\n    ], PlayerConfiguratorActivateGuard);\n    return PlayerConfiguratorActivateGuard;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/legacy/configurator/player.configurator.module.ts\nvar player_configurator_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), 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\nvar PlayerConfiguratorRoutes = [\n    {\n        path: '',\n        canActivate: [player_configurator_activate_guard_PlayerConfiguratorActivateGuard],\n        canDeactivate: [player_configurator_deactivate_guard_PlayerConfiguratorCanDeactivateService],\n        resolve: {\n            playerSources: player_configurator_resolve_sources_PlayerConfiguratorResolveSources,\n            playerConfig: player_configurator_resolve_config_PlayerConfiguratorResolveConfig,\n            playerDefaults: player_configurator_resolve_defaults_PlayerConfiguratorResolveDefaults\n        },\n        component: player_configurator_view_PlayerConfiguratorViewComponent\n    },\n    { path: '**', redirectTo: '' }\n];\nvar player_configurator_module_LOCAL_PROVIDERS = [\n    player_configurator_resolve_sources_PlayerConfiguratorResolveSources,\n    player_configurator_resolve_config_PlayerConfiguratorResolveConfig,\n    player_configurator_resolve_defaults_PlayerConfiguratorResolveDefaults,\n    player_configurator_service_PlayerConfiguratorViewService,\n    player_configurator_preview_video_service_PlayerConfiguratorPreviewVideoService,\n    player_configurator_parser_PlayerConfiguratorParser,\n    player_configurator_save_service_PlayerConfiguratorSaveService,\n    player_configurator_activate_guard_PlayerConfiguratorActivateGuard,\n    player_configurator_deactivate_guard_PlayerConfiguratorCanDeactivateService,\n];\nvar player_configurator_module_COMP = [\n    player_configurator_view_PlayerConfiguratorViewComponent,\n    player_configurator_preview_PlayerConfiguratorPreview,\n    player_configurator_preview_video_PlayerConfiguratorPreviewVideo,\n    player_configurator_form_PlayerConfiguratorForm,\n    player_configurator_form_groups_PlayerConfiguratorFormGroups,\n    player_configurator_form_inputs_PlayerConfiguratorFormInputs,\n    docsLink_component_DocsLinkComponent\n];\nvar player_configurator_module_PlayerConfiguratorModule = (function () {\n    function PlayerConfiguratorModule() {\n    }\n    PlayerConfiguratorModule = player_configurator_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                common_es5[\"CommonModule\"],\n                forms_es5[\"FormsModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerConfiguratorRoutes),\n                form_module_FormComponentsModule,\n                sidebar_module[\"a\" /* SidebarModule */],\n                lib[\"CodemirrorModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                colorpicker_module_ColorpickerModule,\n                capitalize_first_module_CapitalizeFirstModule,\n            ],\n            providers: player_configurator_module_LOCAL_PROVIDERS.slice(),\n            declarations: player_configurator_module_COMP.slice(),\n            entryComponents: player_configurator_module_COMP,\n            exports: player_configurator_module_COMP\n        })\n    ], PlayerConfiguratorModule);\n    return PlayerConfiguratorModule;\n}());\n\n\n// EXTERNAL MODULE: ./node_modules/rxjs/observable/concat.js\nvar concat = __webpack_require__(88);\nvar concat_default = /*#__PURE__*/__webpack_require__.n(concat);\n\n// CONCATENATED MODULE: ./src/module/player/modules/list/pipe/player.list.sort.pipe.ts\nvar player_list_sort_pipe___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar player_list_sort_pipe_SortPlayerListPipe = (function () {\n    function SortPlayerListPipe() {\n    }\n    SortPlayerListPipe.prototype.transform = function (list, model) {\n        return list.sort(function (a, b) {\n            var aa = parseInt(a[model.by] + '');\n            var bb = parseInt(b[model.by] + '');\n            if (model.type == 'desc')\n                return bb - aa;\n            if (model.type == 'asc')\n                return aa - bb;\n            return 0;\n        });\n    };\n    SortPlayerListPipe = player_list_sort_pipe___decorate([\n        Object(core_es5[\"Pipe\"])({ name: 'sortPlayerListPipe' })\n    ], SortPlayerListPipe);\n    return SortPlayerListPipe;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/list/component/player.list.view.component.ts\nvar player_list_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_list_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_list_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar player_list_view_component_PlayerListViewComponent = (function (_super) {\n    player_list_view_component___extends(PlayerListViewComponent, _super);\n    function PlayerListViewComponent(view, locale, translation, cdr, router, list, sidebar, modal, user, playerService, embederService, pipe) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.view = view;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        _this.router = router;\n        _this.list = list;\n        _this.sidebar = sidebar;\n        _this.modal = modal;\n        _this.user = user;\n        _this.playerService = playerService;\n        _this.embederService = embederService;\n        _this.pipe = pipe;\n        _this.isV2 = api_model[\"b\" /* isPlayerV2 */];\n        _this.sortModel = {\n            by: 'updated_at',\n            type: 'asc',\n        };\n        _this.count = 0;\n        _this.cellClass = {\n            name: {\n                'col-lg-5': true, 'col-md-4': true, 'col-sm-4': true, 'col-xs-12': true, 'cell': true, 'cell-name': true\n            },\n            created: {\n                'col-lg-1': true, 'col-md-4': true, 'col-sm-4': true, 'col-xs-6': true, 'cell': true, 'cell-created': true\n            },\n            updated: {\n                'col-lg-1': true, 'col-md-4': true, 'col-sm-4': true, 'col-xs-6': true, 'cell': true, 'cell-updated': true\n            },\n            buttons: {\n                'col-lg-5': true, 'col-md-12': true, 'col-sm-12': true, 'col-xs-12': true, 'cell': true, 'cell-buttons': true\n            }\n        };\n        _this.isAnyItemSelected = false;\n        _this.selectedItemCount = 0;\n        _this.selectedItems = [];\n        return _this;\n    }\n    PlayerListViewComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.resizeSub = this.view.resizeStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n        this.listSub = this.list.$\n            .subscribe(function (players) {\n            if (players != null) {\n                _this.count = players.count;\n                _this.model = players.results;\n                _this.cdr.markForCheck();\n                _this.sidebar.showPlayersMenu(players);\n            }\n            else if (true)\n                throw new Error('EMPTY RESOLVER DATA');\n        });\n    };\n    PlayerListViewComponent.prototype.ngAfterViewInit = function () {\n        this.view.spinner(false);\n        this.sidebar.update();\n    };\n    PlayerListViewComponent.prototype.ngOnDestroy = function () {\n        this.resizeSub.unsubscribe();\n        this.listSub.unsubscribe();\n        if (this.addNewSub != null && !this.addNewSub.closed)\n            this.addNewSub.unsubscribe();\n        this.addNewSub = null;\n        if (this.cloneSub != null && !this.cloneSub.closed)\n            this.cloneSub.unsubscribe();\n        this.cloneSub = null;\n        if (this.deleteSub != null && !this.deleteSub.closed)\n            this.deleteSub.unsubscribe();\n        this.deleteSub = null;\n    };\n    PlayerListViewComponent.prototype.onItemClickSelect = function (item, e) {\n        if (e && !e.defaultPrevented) {\n            e.preventDefault();\n            e.stopImmediatePropagation();\n            e.stopPropagation();\n        }\n        item.selected = !item.selected;\n        var isAnySelected = false;\n        var selectedCount = 0;\n        for (var _i = 0, _a = this.model; _i < _a.length; _i++) {\n            var mod = _a[_i];\n            if (mod.selected) {\n                selectedCount++;\n                isAnySelected = true;\n            }\n        }\n        this.isAnyItemSelected = isAnySelected;\n        this.selectedItemCount = selectedCount;\n    };\n    PlayerListViewComponent.prototype.formatSortIconObject = function (by) {\n        var _a;\n        if (this.sortModel.by != by)\n            return { 'fa-sort': true };\n        return _a = {}, _a['fa-sort-' + this.sortModel.type] = true, _a['active'] = true, _a;\n    };\n    PlayerListViewComponent.prototype.sort = function (by) {\n        if (this.sortModel.type == 'asc')\n            this.sortModel.type = 'desc';\n        else\n            this.sortModel.type = 'asc';\n        this.sortModel.by = by;\n        this.model = this.pipe.transform(this.model, this.sortModel);\n        this.cdr.markForCheck();\n    };\n    PlayerListViewComponent.prototype.askClone = function () {\n        var _this = this;\n        this.updateSelectedItems();\n        this.modal.prompt(this.translation.translate('PLAYER.LIST.MODAL.DUPLICATE.HEADER'), [{\n                label: this.translation.translate('PLAYER.LIST.MODAL.DUPLICATE.YES'),\n                fa: 'trash', classes: ['test-css-class'], close: true, click: function () { return _this.cloneSelected(); }\n            },\n            {\n                label: this.translation.translate('PLAYER.LIST.MODAL.DUPLICATE.NO'),\n                fa: 'ban', classes: ['test-css-class'], close: true\n            }\n        ]);\n    };\n    PlayerListViewComponent.prototype.cloneSelected = function () {\n        var _this = this;\n        if (this.user.accountId === null || this.selectedItems === null || this.selectedItems.length === 0)\n            return;\n        this.view.spinner(true);\n        this.cloneSub = this.playerService.readPlayer(this.user.accountId, this.selectedItems[0].id)\n            .pipe(Object(operators[\"map\"])(function (r) { return ({ name: r.name, conf_json: r.conf_json, api_version: r.api_version }); }), Object(operators[\"switchMap\"])(function (clonned) { return _this.playerService.createPlayer(_this.user.accountId, clonned); }), this.fetchPlayersPipe())\n            .subscribe(function () { return _this.view.spinner(false); });\n    };\n    PlayerListViewComponent.prototype.askDelete = function () {\n        var _this = this;\n        this.updateSelectedItems();\n        this.modal.prompt(this.translation.translate('PLAYER.LIST.MODAL.DELETE.HEADER'), [{\n                label: this.translation.translate('PLAYER.LIST.MODAL.DELETE.YES'),\n                fa: 'trash', classes: ['test-css-class'], close: true, click: function () { return _this.deleteSelected(); }\n            },\n            {\n                label: this.translation.translate('PLAYER.LIST.MODAL.DELETE.NO'),\n                fa: 'ban', classes: ['test-css-class'], close: true\n            }\n        ]);\n    };\n    PlayerListViewComponent.prototype.deleteSelected = function () {\n        var _this = this;\n        if (this.user.accountId === null || this.selectedItems === null || this.selectedItems.length === 0)\n            return;\n        this.view.spinner(true);\n        this.deleteSub = concat[\"concat\"].apply(void 0, this.selectedItems.map(function (item) { return _this.playerService.deletePlayer(_this.user.accountId, item.id.toString()); })).pipe(this.fetchPlayersPipe())\n            .subscribe(function () {\n            _this.selectedItems = [];\n            _this.selectedItemCount = 0;\n            _this.isAnyItemSelected = false;\n            _this.view.spinner(false);\n        });\n    };\n    PlayerListViewComponent.prototype.askNew = function () {\n        var _this = this;\n        this.modal.input(this.translation.translate('PLAYER.LIST.MODAL.ADD.HEADER'), this.translation.translate('PLAYER.LIST.MODAL.ADD.INPUT'), [{\n                label: this.translation.translate('PLAYER.LIST.MODAL.ADD.ADD'), fa: 'check', close: true,\n                click: function (name) { return _this.addNew(name); }\n            },\n            { label: this.translation.translate('PLAYER.LIST.MODAL.ADD.CANCEL'), fa: 'ban', close: true }\n        ], \"MyPlayer\");\n    };\n    PlayerListViewComponent.prototype.gotoConfigurator = function (playerId, e) {\n        if (e && !e.defaultPrevented) {\n            e.preventDefault();\n            e.stopImmediatePropagation();\n            e.stopPropagation();\n        }\n        this.router.navigate(['admin', 'player', playerId]);\n        return;\n    };\n    PlayerListViewComponent.prototype.setUpEmbeder = function (item) {\n        this.embederService.playerModel = item;\n    };\n    PlayerListViewComponent.prototype.formatDate = function (uts) {\n        return date_util_DateUtil.unixToDateString(uts);\n    };\n    PlayerListViewComponent.prototype.updateSelectedItems = function () {\n        this.selectedItems = [];\n        for (var _i = 0, _a = this.model; _i < _a.length; _i++) {\n            var mod = _a[_i];\n            if (mod.selected)\n                this.selectedItems.push(mod);\n        }\n        this.selectedItemCount = this.selectedItems.length;\n    };\n    PlayerListViewComponent.prototype.addNew = function (name) {\n        var _this = this;\n        if (this.user.accountId != null) {\n            var request = { name: name, conf_json: '{}', api_version: '2' };\n            this.addNewSub = this.playerService\n                .createPlayer(this.user.accountId, request)\n                .pipe(this.fetchPlayersPipe())\n                .subscribe(function (p) { return _this.gotoConfigurator(p.id); });\n        }\n    };\n    PlayerListViewComponent.prototype.fetchPlayersPipe = function () {\n        var _this = this;\n        return Object(operators[\"switchMap\"])(function (r) { return _this.list.fetch().pipe(Object(operators[\"map\"])(function (_) { return r; })); });\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n    PlayerListViewComponent = player_list_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-list-view',\n            template: __webpack_require__(1484),\n            styles: [__webpack_require__(1485)],\n            viewProviders: [player_list_sort_pipe_SortPlayerListPipe],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_list_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _c || Object, typeof (_d = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _d || Object, typeof (_e = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _e || Object, typeof (_f = typeof player_list_data_service_PlayerListDataService !== \"undefined\" && player_list_data_service_PlayerListDataService) === \"function\" && _f || Object, typeof (_g = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _g || Object, typeof (_h = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _h || Object, typeof (_j = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _j || Object, typeof (_k = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _k || Object, typeof (_l = typeof player_embeder_service_PlayerEmbederService !== \"undefined\" && player_embeder_service_PlayerEmbederService) === \"function\" && _l || Object, typeof (_m = typeof player_list_sort_pipe_SortPlayerListPipe !== \"undefined\" && player_list_sort_pipe_SortPlayerListPipe) === \"function\" && _m || Object])\n    ], PlayerListViewComponent);\n    return PlayerListViewComponent;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/list/directive/download.player.js.v2.directive.ts\nvar download_player_js_v2_directive___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar download_player_js_v2_directive___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar download_player_js_v2_directive_DownloadPlayerJsV2Directive = (function () {\n    function DownloadPlayerJsV2Directive(http, sanitizer, cdr, elementRef) {\n        this.http = http;\n        this.sanitizer = sanitizer;\n        this.cdr = cdr;\n        this.elementRef = elementRef;\n        this.mime = 'text/javascript';\n        this.working = false;\n    }\n    DownloadPlayerJsV2Directive.prototype.ngOnDestroy = function () {\n        if (!!this.fetchSub)\n            this.fetchSub.unsubscribe();\n        this.fetchSub = null;\n        if (!!this.blobUrl)\n            URL.revokeObjectURL(this.blobUrl);\n    };\n    DownloadPlayerJsV2Directive.prototype.click = function (e) {\n        if (!this.href) {\n            e.preventDefault();\n            e.stopPropagation();\n            e.stopImmediatePropagation();\n            this.fetch();\n        }\n    };\n    DownloadPlayerJsV2Directive.prototype.fetch = function () {\n        var _this = this;\n        if (!!this.fetchSub)\n            this.fetchSub.unsubscribe();\n        this.working = true;\n        this.cdr.markForCheck();\n        this.fetchSub = this.http.get(this.url, { responseType: http_es5[\"d\" /* ResponseContentType */].Blob })\n            .pipe(Object(operators[\"map\"])(function (response) { return new Blob([response.blob()], { type: _this.mime }); }))\n            .subscribe(function (blob) {\n            _this.blobUrl = URL.createObjectURL(blob);\n            _this.href = _this.sanitizer.bypassSecurityTrustUrl(_this.blobUrl);\n            _this.cdr.markForCheck();\n        }, function (error) {\n            console.error(error);\n            _this.working = false;\n            _this.cdr.markForCheck();\n        }, function () { return requestAnimationFrame(function () {\n            _this.reclick(_this.elementRef.nativeElement);\n            _this.working = false;\n            _this.cdr.markForCheck();\n        }); });\n    };\n    DownloadPlayerJsV2Directive.prototype.reclick = function (element) {\n        try {\n            element.dispatchEvent(new MouseEvent('click'));\n        }\n        catch (e1) {\n            try {\n                console.error(e1);\n                var evt = document.createEvent('MouseEvents');\n                evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\n                element.dispatchEvent(evt);\n            }\n            catch (e2) {\n                console.error(e2);\n                element.click();\n            }\n        }\n    };\n    var _a, _b, _c, _d, _e, _f;\n    download_player_js_v2_directive___decorate([\n        Object(core_es5[\"Input\"])('download-player-js'),\n        download_player_js_v2_directive___metadata(\"design:type\", String)\n    ], DownloadPlayerJsV2Directive.prototype, \"url\", void 0);\n    download_player_js_v2_directive___decorate([\n        Object(core_es5[\"HostBinding\"])('href'),\n        download_player_js_v2_directive___metadata(\"design:type\", Object)\n    ], DownloadPlayerJsV2Directive.prototype, \"href\", void 0);\n    download_player_js_v2_directive___decorate([\n        Object(core_es5[\"HostBinding\"])('type'),\n        download_player_js_v2_directive___metadata(\"design:type\", String)\n    ], DownloadPlayerJsV2Directive.prototype, \"mime\", void 0);\n    download_player_js_v2_directive___decorate([\n        Object(core_es5[\"HostListener\"])('click', ['$event']),\n        download_player_js_v2_directive___metadata(\"design:type\", Function),\n        download_player_js_v2_directive___metadata(\"design:paramtypes\", [typeof (_b = typeof PointerEvent !== \"undefined\" && PointerEvent) === \"function\" && _b || Object]),\n        download_player_js_v2_directive___metadata(\"design:returntype\", void 0)\n    ], DownloadPlayerJsV2Directive.prototype, \"click\", null);\n    DownloadPlayerJsV2Directive = download_player_js_v2_directive___decorate([\n        Object(core_es5[\"Directive\"])({\n            selector: \"[download-player-js]\",\n            exportAs: \"downloadPlayerJsV2\"\n        }),\n        download_player_js_v2_directive___metadata(\"design:paramtypes\", [typeof (_c = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _c || Object, typeof (_d = typeof platform_browser_es5[\"c\" /* DomSanitizer */] !== \"undefined\" && platform_browser_es5[\"c\" /* DomSanitizer */]) === \"function\" && _d || Object, typeof (_e = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _e || Object, typeof (_f = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _f || Object])\n    ], DownloadPlayerJsV2Directive);\n    return DownloadPlayerJsV2Directive;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/list/player.list.module.ts\nvar player_list_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\nvar PlayerListRoutes = [\n    {\n        path: '', component: player_list_view_component_PlayerListViewComponent,\n    },\n    { path: '**', redirectTo: '' }\n];\nvar player_list_module_COMP = [\n    player_list_view_component_PlayerListViewComponent,\n];\nvar player_list_module_PlayerListModule = (function () {\n    function PlayerListModule() {\n    }\n    PlayerListModule = player_list_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerListRoutes),\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n            ],\n            declarations: player_list_module_COMP.concat([\n                player_list_sort_pipe_SortPlayerListPipe,\n                download_player_js_v2_directive_DownloadPlayerJsV2Directive,\n            ]),\n            entryComponents: player_list_module_COMP,\n            exports: player_list_module_COMP\n        })\n    ], PlayerListModule);\n    return PlayerListModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/versions/component/player.versions.view.component.ts\nvar player_versions_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar player_versions_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_versions_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar player_versions_view_component_PlayerVersionsView = (function (_super) {\n    player_versions_view_component___extends(PlayerVersionsView, _super);\n    function PlayerVersionsView(view, locale, translation, cdr, route, list, sidebar) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.view = view;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.cdr = cdr;\n        _this.route = route;\n        _this.list = list;\n        _this.sidebar = sidebar;\n        _this.count = 0;\n        return _this;\n    }\n    PlayerVersionsView.prototype.ngOnInit = function () {\n        var _this = this;\n        this.view.spinner(true);\n        this.routeSub = Object(zip[\"zip\"])(this.route.data, this.route.params, this.list.$)\n            .subscribe(function (r) {\n            var data = r[0], params = r[1], players = r[2];\n            _this.parse(data);\n            if (player_model[\"c\" /* PlayerRouteParam */].id in params) {\n                _this.EMBED_CODE_LINK = ['/', 'admin', 'player', params[player_model[\"c\" /* PlayerRouteParam */].id], player_model[\"a\" /* PlayerRoute */].embeder];\n            }\n            if (players) {\n                _this.sidebar.showPlayersMenu(players, parseInt(params[player_model[\"c\" /* PlayerRouteParam */].id]));\n            }\n        });\n        this.view.resizeStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n    };\n    PlayerVersionsView.prototype.ngAfterViewInit = function () {\n        this.view.spinner(false);\n    };\n    PlayerVersionsView.prototype.ngOnDestroy = function () {\n        this.routeSub.unsubscribe();\n    };\n    PlayerVersionsView.prototype.formatDate = function (unixMs) {\n        return date_util_DateUtil.unixToDateString(unixMs);\n    };\n    PlayerVersionsView.prototype.formatDaysAgo = function (unixMs) {\n        var daysAgo = date_util_DateUtil.unixDiffInDays(unixMs, date_util_DateUtil.dateToUnix(new Date()));\n        daysAgo = Math.abs(daysAgo);\n        return (daysAgo == 0) ? 'today' : daysAgo + ' days ago';\n    };\n    PlayerVersionsView.prototype.formatTime = function (unixMs) {\n        return date_util_DateUtil.unixToTimeString(unixMs);\n    };\n    PlayerVersionsView.prototype.formatAttr = function (build) {\n        return build.active == true\n            ? 'Active version.'\n            : 'build @' + this.formatTime(build.created_at) + ' ' + this.formatDate(build.created_at);\n    };\n    PlayerVersionsView.prototype.parse = function (data) {\n        if (data != null && data.playerVersions != null) {\n            this.count = data.playerVersions.count;\n            this.model = data.playerVersions.results.sort(function (a, b) {\n                return a.created_at < b.created_at ? 1 : a.created_at > b.created_at ? -1 : 0;\n            });\n            if (this.model.length > 0)\n                this.model[0].active = true;\n        }\n        else if (true)\n            throw new Error('EMPTY RESOLVER DATA');\n        this.view.spinner(false);\n    };\n    var _a, _b, _c, _d, _e, _f, _g;\n    PlayerVersionsView = player_versions_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'player-versions-view',\n            template: __webpack_require__(1486),\n            styles: [__webpack_require__(1487)],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        player_versions_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _a || Object, typeof (_b = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _c || Object, typeof (_d = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _d || Object, typeof (_e = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _e || Object, typeof (_f = typeof player_list_data_service_PlayerListDataService !== \"undefined\" && player_list_data_service_PlayerListDataService) === \"function\" && _f || Object, typeof (_g = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _g || Object])\n    ], PlayerVersionsView);\n    return PlayerVersionsView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/versions/service/player.versions.resolver.ts\nvar player_versions_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_versions_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar player_versions_resolver_PlayerVersionsResolver = (function () {\n    function PlayerVersionsResolver(service, user) {\n        this.service = service;\n        this.user = user;\n    }\n    PlayerVersionsResolver.prototype.resolve = function (route, state) {\n        if (this.user.accountId == null)\n            return;\n        return this.service.listBuilds(this.user.accountId, route.params['id']);\n    };\n    var _a, _b;\n    PlayerVersionsResolver = player_versions_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_versions_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof player_service_PlayerService !== \"undefined\" && player_service_PlayerService) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object])\n    ], PlayerVersionsResolver);\n    return PlayerVersionsResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/modules/versions/player.versions.module.ts\nvar player_versions_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar PlayerVersionsRoutes = [\n    {\n        path: '',\n        component: player_versions_view_component_PlayerVersionsView,\n        resolve: { playerVersions: player_versions_resolver_PlayerVersionsResolver }\n    },\n    { path: '**', redirectTo: '' }\n];\nvar player_versions_module_LOCAL_PROVIDERS = [\n    player_versions_resolver_PlayerVersionsResolver,\n];\nvar player_versions_module_COMP = [\n    player_versions_view_component_PlayerVersionsView,\n];\nvar player_versions_module_PlayerVersionsModule = (function () {\n    function PlayerVersionsModule() {\n    }\n    PlayerVersionsModule = player_versions_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerVersionsRoutes),\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n            ],\n            providers: player_versions_module_LOCAL_PROVIDERS.slice(),\n            declarations: player_versions_module_COMP.slice(),\n            entryComponents: player_versions_module_COMP,\n            exports: player_versions_module_COMP\n        })\n    ], PlayerVersionsModule);\n    return PlayerVersionsModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/service/player.list.resolve.service.ts\nvar player_list_resolve_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_list_resolve_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar player_list_resolve_service_PlayerListResolveService = (function () {\n    function PlayerListResolveService(list) {\n        this.list = list;\n    }\n    PlayerListResolveService.prototype.resolve = function (_route, _state) {\n        return this.list.fetch();\n    };\n    var _a;\n    PlayerListResolveService = player_list_resolve_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        player_list_resolve_service___metadata(\"design:paramtypes\", [typeof (_a = typeof player_list_data_service_PlayerListDataService !== \"undefined\" && player_list_data_service_PlayerListDataService) === \"function\" && _a || Object])\n    ], PlayerListResolveService);\n    return PlayerListResolveService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/player/player.module.ts\nvar player_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar player_module__a;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar PlayerRoutes = [\n    {\n        path: '',\n        resolve: (player_module__a = {},\n            player_module__a[player_model[\"b\" /* PlayerRouteData */].playersList] = player_list_resolve_service_PlayerListResolveService,\n            player_module__a),\n        children: [\n            { path: player_model[\"a\" /* PlayerRoute */].list, loadChildren: function () { return player_list_module_PlayerListModule; } },\n            {\n                path: \":\" + player_model[\"c\" /* PlayerRouteParam */].id,\n                children: [\n                    { path: player_model[\"a\" /* PlayerRoute */].builder, loadChildren: function () { return player_builder_module_PlayerBuilderModule; } },\n                    { path: player_model[\"a\" /* PlayerRoute */].configurator, loadChildren: function () { return player_configurator_module_PlayerConfiguratorModule; } },\n                    { path: player_model[\"a\" /* PlayerRoute */].embedcode, loadChildren: function () { return player_embed_code_module_PlayerEmbedCodeModule; } },\n                    { path: player_model[\"a\" /* PlayerRoute */].embeder, loadChildren: function () { return player_embeder_module_PlayerEmbederModule; } },\n                    { path: player_model[\"a\" /* PlayerRoute */].versions, loadChildren: function () { return player_versions_module_PlayerVersionsModule; } },\n                    { path: '', redirectTo: player_model[\"a\" /* PlayerRoute */].builder, pathMatch: 'full' },\n                    { path: '**', redirectTo: player_model[\"a\" /* PlayerRoute */].builder }\n                ]\n            },\n            { path: '', redirectTo: player_model[\"a\" /* PlayerRoute */].list, pathMatch: 'full' },\n            { path: '**', redirectTo: player_model[\"a\" /* PlayerRoute */].list }\n        ]\n    },\n    { path: '**', redirectTo: '' }\n];\nvar player_module_LOCAL_PROVIDERS = [\n    player_service_PlayerService,\n    player_embeder_service_PlayerEmbederService,\n    player_list_resolve_service_PlayerListResolveService,\n    player_list_data_service_PlayerListDataService,\n];\nvar player_module_PlayerModule = (function () {\n    function PlayerModule() {\n    }\n    PlayerModule = player_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(PlayerRoutes),\n            ],\n            providers: player_module_LOCAL_PROVIDERS.slice(),\n        })\n    ], PlayerModule);\n    return PlayerModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/products/service/account.products.resolver.service.ts\nvar account_products_resolver_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar account_products_resolver_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar account_products_resolver_service_AccountProductsResolverService = (function () {\n    function AccountProductsResolverService(products, user) {\n        this.products = products;\n        this.user = user;\n    }\n    AccountProductsResolverService.prototype.resolve = function (route, state) {\n        return this.products.getProductsForAccount(this.user.accountId);\n    };\n    var _a, _b;\n    AccountProductsResolverService = account_products_resolver_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        account_products_resolver_service___metadata(\"design:paramtypes\", [typeof (_a = typeof product_service[\"a\" /* ProductService */] !== \"undefined\" && product_service[\"a\" /* ProductService */]) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object])\n    ], AccountProductsResolverService);\n    return AccountProductsResolverService;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/products/service/products.resolver.service.ts\nvar products_resolver_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar products_resolver_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar products_resolver_service_ProductsResolverService = (function () {\n    function ProductsResolverService(products) {\n        this.products = products;\n    }\n    ProductsResolverService.prototype.resolve = function (route, state) {\n        return this.products.getProducts();\n    };\n    var _a;\n    ProductsResolverService = products_resolver_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        products_resolver_service___metadata(\"design:paramtypes\", [typeof (_a = typeof product_service[\"a\" /* ProductService */] !== \"undefined\" && product_service[\"a\" /* ProductService */]) === \"function\" && _a || Object])\n    ], ProductsResolverService);\n    return ProductsResolverService;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/products/view/products.view.component.ts\nvar products_view_component = __webpack_require__(1488);\n\n// CONCATENATED MODULE: ./src/module/products/products.module.ts\nvar products_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\nvar products_module_routes = [\n    {\n        path: '',\n        component: products_view_component[\"a\" /* ProductsView */],\n        resolve: {\n            products: products_resolver_service_ProductsResolverService,\n            accountProducts: account_products_resolver_service_AccountProductsResolverService\n        }\n    }\n];\nvar products_module_ProductsModule = (function () {\n    function ProductsModule() {\n    }\n    ProductsModule = products_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                shared_module_SharedModule,\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(products_module_routes)\n            ],\n            providers: [\n                products_resolver_service_ProductsResolverService,\n                account_products_resolver_service_AccountProductsResolverService,\n                product_service[\"a\" /* ProductService */],\n                subscription_service[\"a\" /* SubscriptionService */]\n            ],\n            declarations: [products_view_component[\"a\" /* ProductsView */]]\n        })\n    ], ProductsModule);\n    return ProductsModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/subscription/subscription.guard.ts\nvar subscription_guard___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar subscription_guard___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar subscription_guard_SubscriptionGuard = (function () {\n    function SubscriptionGuard(products, user, account, subscription, router) {\n        this.products = products;\n        this.user = user;\n        this.account = account;\n        this.subscription = subscription;\n        this.router = router;\n    }\n    SubscriptionGuard.prototype.canActivate = function (route, state) {\n        var _this = this;\n        var subscriptionId = +route.params['id'];\n        if (this.user.accountId == null)\n            return false;\n        return this.subscription.getSubscriptionOrders(this.user.accountId).map(function (res) {\n            var found = false;\n            if (res && res.count && res.count > 0) {\n                res.results.some(function (sub) {\n                    if (sub.id === subscriptionId) {\n                        found = true;\n                        return true;\n                    }\n                    return false;\n                });\n            }\n            return found;\n        }, function (error) {\n            _this.router.navigate(['admin', '']);\n            return false;\n        }).catch(function (error) {\n            console.error('Subscription.Guard ERROR');\n            _this.router.navigate(['admin', '']);\n            return Observable[\"Observable\"].of(false);\n        });\n    };\n    SubscriptionGuard.prototype.canDeactivate = function (component, route, state) {\n        return new Promise(function (resolve, reject) {\n            if (component.braintreeIntegration)\n                component.braintreeIntegration.teardown(function () {\n                    component.braintreeIntegration = null;\n                    resolve(true);\n                });\n            else\n                resolve(true);\n        });\n    };\n    var _a, _b, _c, _d, _e;\n    SubscriptionGuard = subscription_guard___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        subscription_guard___metadata(\"design:paramtypes\", [typeof (_a = typeof product_service[\"a\" /* ProductService */] !== \"undefined\" && product_service[\"a\" /* ProductService */]) === \"function\" && _a || Object, typeof (_b = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _b || Object, typeof (_c = typeof account_service[\"a\" /* AccountService */] !== \"undefined\" && account_service[\"a\" /* AccountService */]) === \"function\" && _c || Object, typeof (_d = typeof subscription_service[\"a\" /* SubscriptionService */] !== \"undefined\" && subscription_service[\"a\" /* SubscriptionService */]) === \"function\" && _d || Object, typeof (_e = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _e || Object])\n    ], SubscriptionGuard);\n    return SubscriptionGuard;\n}());\n\n\n// EXTERNAL MODULE: ./src/service/buyCookie.service.ts\nvar buyCookie_service = __webpack_require__(188);\n\n// CONCATENATED MODULE: ./src/module/subscription/subscription.view.component.ts\nvar subscription_view_component___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar subscription_view_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar subscription_view_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar subscription_view_component_SubscriptionView = (function (_super) {\n    subscription_view_component___extends(SubscriptionView, _super);\n    function SubscriptionView(cdr, account, user, locale, translation, route, subscriptionService, view, router, modal, ref, buyCookie) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.cdr = cdr;\n        _this.account = account;\n        _this.user = user;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.route = route;\n        _this.subscriptionService = subscriptionService;\n        _this.view = view;\n        _this.router = router;\n        _this.modal = modal;\n        _this.ref = ref;\n        _this.buyCookie = buyCookie;\n        _this.braintreeIsReady = false;\n        _this.paymentError = false;\n        _this.subscriptionError = null;\n        _this.currentStep = 1;\n        _this.today = Date.now();\n        _this.subscriptionFinished = false;\n        _this.termsAccepted = false;\n        return _this;\n    }\n    SubscriptionView_1 = SubscriptionView;\n    SubscriptionView.prototype.ngOnInit = function () {\n        var _this = this;\n        this.resolverSubscription = this.route.data.subscribe(function (data) {\n            _this.isPaidPlan = false;\n            if (data.account && data.account.length >= 4) {\n                _this.subscriptionOrder = data.account[1];\n                if (_this.subscriptionOrder.product_plan && _this.subscriptionOrder.product_plan.base_price.gross > 0) {\n                    _this.braintreeClientToken = data.account[3].bt_client_token;\n                    _this.isPaidPlan = true;\n                    if (!SubscriptionView_1.braintree) {\n                        SubscriptionView_1.braintree = __webpack_require__(1491);\n                    }\n                    _this.setupBrainTree();\n                }\n                else {\n                    _this.braintreeIsReady = true;\n                }\n                _this.cdr.markForCheck();\n            }\n        });\n        this.paramsSubscription = this.route.params.subscribe(function (params) { _this.planId = +params['id']; });\n        this.modalSubscription = this.modal.closeStream$.subscribe(function (closed) { return _this.cdr.markForCheck(); });\n    };\n    SubscriptionView.prototype.ngOnDestroy = function () {\n        if (this.resolverSubscription)\n            this.resolverSubscription.unsubscribe();\n        if (this.paramsSubscription)\n            this.paramsSubscription.unsubscribe();\n        if (this.resolverSubscription)\n            this.resolverSubscription.unsubscribe();\n    };\n    SubscriptionView.prototype.goToProductsView = function () {\n        this.router.navigate(['admin', 'products']);\n    };\n    SubscriptionView.prototype.goToAccountView = function () {\n        this.router.navigate(['admin', 'account', 'details']);\n    };\n    SubscriptionView.prototype.goToPlayerView = function () {\n        this.router.navigate(['admin', 'player']);\n    };\n    SubscriptionView.prototype.goToStep = function (stepId) {\n        if (stepId > 0 && stepId <= 2 && this.currentStep != stepId) {\n            this.currentStep = stepId;\n        }\n    };\n    SubscriptionView.prototype.showTermsAndConditions = function () {\n        var _this = this;\n        this.modal.terms(this.translation.translate('SUBSCRIPTION.TERMS_AND_CONDITIONS.TITLE'), this.translation.translate('SUBSCRIPTION.TERMS_AND_CONDITIONS.BODY'), [{\n                label: this.translation.translate('SUBSCRIPTION.BUTTON.ACCEPT'),\n                fa: 'check',\n                classes: ['btn', 'btn-success'],\n                close: true,\n                click: function () {\n                    _this.termsAccepted = true;\n                    _this.cdr.markForCheck();\n                }\n            }, {\n                label: this.translation.translate('SUBSCRIPTION.BUTTON.NOT_ACCEPT'),\n                fa: 'times',\n                classes: ['btn', 'btn-danger'],\n                close: true, click: function () {\n                    _this.termsAccepted = false;\n                    _this.cdr.markForCheck();\n                }\n            }]);\n    };\n    SubscriptionView.prototype.onPaymentFormSubmit = function () {\n        var _this = this;\n        if (this.braintreeIntegration) {\n            var threeDSecureParameters = {\n                threeDSecure: {\n                    amount: this.subscriptionOrder.product_plan.base_price.gross,\n                }\n            };\n            this.braintreeIntegration.requestPaymentMethod(threeDSecureParameters, function (err, payload) {\n                if (err) {\n                    _this.view.spinner(false);\n                    _this.paymentError = true;\n                    _this.paymentErrorMessage = err.message;\n                    _this.cdr.markForCheck();\n                    _this.ref.tick();\n                    return;\n                }\n                _this.braintreeNonce = payload.nonce;\n                _this.finishSubscription(payload.nonce);\n            });\n            if (this.braintreeIsReady) {\n                this.view.spinner(true);\n                this.paymentError = false;\n                this.paymentErrorMessage = null;\n                this.subscriptionError = null;\n                this.cdr.detectChanges();\n                this.cdr.markForCheck();\n            }\n        }\n        else if (!this.isPaidPlan) {\n            this.braintreeNonce = '';\n            this.finishSubscription('');\n        }\n    };\n    SubscriptionView.prototype.finishSubscription = function (nonce) {\n        var _this = this;\n        if (!this.termsAccepted) {\n            this.view.spinner(false);\n            this.cdr.markForCheck();\n            this.ref.tick();\n            return;\n        }\n        var body = {\n            accept: true,\n            bt_payment_method_nonce: nonce\n        };\n        if (this.user.accountId != null)\n            this.subscriptionService.finishSubscriptionOrder(this.user.accountId, this.subscriptionOrder.id, body)\n                .subscribe(function (response) {\n                if (_this.braintreeIntegration != null) {\n                    _this.braintreeIntegration.teardown(function () { _this.braintreeIntegration = null; });\n                }\n                _this.showThanks();\n            }, function (error) {\n                _this.subscriptionError = error;\n                _this.view.spinner(false);\n                _this.cdr.markForCheck();\n                _this.ref.tick();\n            });\n    };\n    SubscriptionView.prototype.showThanks = function () {\n        this.buyCookie.erase();\n        this.user.refresh();\n        this.view.spinner(false);\n        this.subscriptionFinished = true;\n        this.cdr.markForCheck();\n        this.ref.tick();\n    };\n    SubscriptionView.prototype.setupBrainTree = function () {\n        var _this = this;\n        if (SubscriptionView_1.braintree) {\n            SubscriptionView_1.braintree.create({\n                authorization: this.braintreeClientToken,\n                selector: '#payment-container',\n                gatewayConfiguration: { paypalEnabled: true },\n                paypal: { flow: 'vault' },\n                paypalCredit: { flow: 'vault' },\n                threeDSecure: true,\n            }, function (err, dropinInstance) {\n                if (err) {\n                    _this.view.spinner(false);\n                    _this.paymentError = true;\n                    _this.paymentErrorMessage = err.message;\n                    _this.cdr.markForCheck();\n                    _this.ref.tick();\n                    return;\n                }\n                _this.braintreeIntegration = dropinInstance;\n                _this.braintreeIsReady = true;\n                _this.cdr.markForCheck();\n                _this.cdr.detectChanges();\n            });\n        }\n    };\n    var SubscriptionView_1, _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n    SubscriptionView = SubscriptionView_1 = subscription_view_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'subscription-view',\n            template: __webpack_require__(1492),\n            styles: [\n                ':host .plan-list {padding-left:0;padding-top:20px;}',\n                ':host .plan-list li {list-style: none;font-size:16px;margin-top:16px;}'\n            ],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        subscription_view_component___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _a || Object, typeof (_b = typeof account_service[\"a\" /* AccountService */] !== \"undefined\" && account_service[\"a\" /* AccountService */]) === \"function\" && _b || Object, typeof (_c = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _d || Object, typeof (_e = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _e || Object, typeof (_f = typeof router_es5[\"a\" /* ActivatedRoute */] !== \"undefined\" && router_es5[\"a\" /* ActivatedRoute */]) === \"function\" && _f || Object, typeof (_g = typeof subscription_service[\"a\" /* SubscriptionService */] !== \"undefined\" && subscription_service[\"a\" /* SubscriptionService */]) === \"function\" && _g || Object, typeof (_h = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _h || Object, typeof (_j = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _j || Object, typeof (_k = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _k || Object, typeof (_l = typeof core_es5[\"ApplicationRef\"] !== \"undefined\" && core_es5[\"ApplicationRef\"]) === \"function\" && _l || Object, typeof (_m = typeof buyCookie_service[\"a\" /* BuyCookieService */] !== \"undefined\" && buyCookie_service[\"a\" /* BuyCookieService */]) === \"function\" && _m || Object])\n    ], SubscriptionView);\n    return SubscriptionView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/subscription/subscription.resolver.ts\nvar subscription_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar subscription_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar subscription_resolver_SubscriptionResolver = (function () {\n    function SubscriptionResolver(subscription, payments, user, account, countries) {\n        this.subscription = subscription;\n        this.payments = payments;\n        this.user = user;\n        this.account = account;\n        this.countries = countries;\n    }\n    SubscriptionResolver.prototype.resolve = function (route, state) {\n        var subscriptionOrderId = route.params['id'];\n        if (!subscriptionOrderId)\n            return false;\n        if (this.user.accountId == null)\n            return false;\n        return Observable[\"Observable\"].forkJoin(this.account.get(this.user.accountId), this.subscription.getSubscriptionOrder(this.user.accountId, subscriptionOrderId), this.countries.getCountries(), this.payments.getBraintreeClientToken(this.user.accountId));\n    };\n    var _a, _b, _c, _d, _e;\n    SubscriptionResolver = subscription_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        subscription_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof subscription_service[\"a\" /* SubscriptionService */] !== \"undefined\" && subscription_service[\"a\" /* SubscriptionService */]) === \"function\" && _a || Object, typeof (_b = typeof payments_service[\"a\" /* PaymentsService */] !== \"undefined\" && payments_service[\"a\" /* PaymentsService */]) === \"function\" && _b || Object, typeof (_c = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _c || Object, typeof (_d = typeof account_service[\"a\" /* AccountService */] !== \"undefined\" && account_service[\"a\" /* AccountService */]) === \"function\" && _d || Object, typeof (_e = typeof country_service_CountryService !== \"undefined\" && country_service_CountryService) === \"function\" && _e || Object])\n    ], SubscriptionResolver);\n    return SubscriptionResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/subscription/index.ts\n\n\n\n\n// CONCATENATED MODULE: ./src/module/subscription/subscription.module.ts\nvar subscription_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar subscription_module_routes = [\n    {\n        path: ':id',\n        component: subscription_view_component_SubscriptionView,\n        canActivate: [subscription_guard_SubscriptionGuard],\n        resolve: { account: subscription_resolver_SubscriptionResolver }\n    }\n];\nvar subscription_module_SubscriptionModule = (function () {\n    function SubscriptionModule() {\n    }\n    SubscriptionModule = subscription_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                shared_module_SharedModule,\n                forms_es5[\"ReactiveFormsModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                router_es5[\"h\" /* RouterModule */].forChild(subscription_module_routes)\n            ],\n            declarations: [subscription_view_component_SubscriptionView],\n            entryComponents: [subscription_view_component_SubscriptionView],\n            providers: [\n                subscription_resolver_SubscriptionResolver,\n                subscription_service[\"a\" /* SubscriptionService */],\n                subscription_guard_SubscriptionGuard,\n                validation_service_ValidationService,\n                product_service[\"a\" /* ProductService */],\n                payments_service[\"a\" /* PaymentsService */],\n            ],\n            exports: [subscription_view_component_SubscriptionView]\n        })\n    ], SubscriptionModule);\n    return SubscriptionModule;\n}());\n\n\n// EXTERNAL MODULE: ./src/module/header/header.service.ts\nvar header_service = __webpack_require__(186);\n\n// CONCATENATED MODULE: ./src/service/login.service.ts\nvar login_service___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar login_service___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar login_service___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\nvar login_service_LoginService = (function (_super) {\n    login_service___extends(LoginService, _super);\n    function LoginService(router, auth, http, exception, url, user, modal, translation) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.router = router;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.url = url;\n        _this.user = user;\n        _this.modal = modal;\n        _this.translation = translation;\n        return _this;\n    }\n    LoginService.prototype.login = function (success, fail) {\n        var _this = this;\n        if (this.auth.user != null && this.auth.password != null) {\n            var req = { email: this.auth.user, password: this.auth.password };\n            _super.prototype.create.call(this, this.urlPath(false), req)\n                .subscribe(function (response) {\n                _this.auth.token = response.access_token;\n            }, function (error) {\n                _this.auth.password = null;\n                if (fail != null)\n                    fail(error.detail);\n            }, function () {\n                if (success != null)\n                    success();\n            });\n        }\n    };\n    LoginService.prototype.logout = function (success) {\n        var _this = this;\n        this.modal.prompt(this.translation.translate('MODAL.LOGOUT.ASK'), [{\n                label: this.translation.translate('MODAL.LOGOUT.YES'), fa: 'sign-out', classes: ['test-css-class'],\n                close: true, click: function () {\n                    _super.prototype.create.call(_this, _this.urlPath(true), { 'access_token': _this.auth.token })\n                        .subscribe(undefined, function () { return _this.logoutSuccess(success); }, function () { return _this.logoutSuccess(success); });\n                }\n            },\n            { label: this.translation.translate('MODAL.LOGOUT.NO'), fa: 'ban', classes: ['test-css-class'], close: true }\n        ]);\n    };\n    LoginService.prototype.logoutSuccess = function (success) {\n        this.user.clear();\n        this.auth.clear();\n        if (success != null)\n            success();\n    };\n    LoginService.prototype.urlPath = function (out) {\n        return 'auth/log' + (out == true ? 'out' : 'in');\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    LoginService = login_service___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        login_service___metadata(\"design:paramtypes\", [typeof (_a = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _a || Object, typeof (_b = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _b || Object, typeof (_c = typeof http_es5[\"b\" /* Http */] !== \"undefined\" && http_es5[\"b\" /* Http */]) === \"function\" && _c || Object, typeof (_d = typeof exception_service[\"a\" /* ExceptionService */] !== \"undefined\" && exception_service[\"a\" /* ExceptionService */]) === \"function\" && _d || Object, typeof (_e = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _e || Object, typeof (_f = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _f || Object, typeof (_g = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _g || Object, typeof (_h = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _h || Object])\n    ], LoginService);\n    return LoginService;\n}(api_service[\"a\" /* BradmaxApi */]));\n\n\n// CONCATENATED MODULE: ./src/module/content/content.config.ts\n\nvar isMobile = (!!navigator.userAgent.match(/Android/i)\n    || !!navigator.userAgent.match(/webOS/i)\n    || !!navigator.userAgent.match(/iPhone/i)\n    || !!navigator.userAgent.match(/iPad/i)\n    || !!navigator.userAgent.match(/iPod/i)\n    || !!navigator.userAgent.match(/BlackBerry/i)\n    || !!navigator.userAgent.match(/Windows Phone/i));\nvar ContentConfig = new core_es5[\"InjectionToken\"]('CONTENT_CONFIG');\nvar ContentConfigTestData = {\n    mobile: false,\n    logo: {\n        src: '',\n        alt: '',\n        title: ''\n    }\n};\nvar ContentConfigData = {\n    mobile: isMobile,\n    logo: {\n        src: 'https://bradmax.com/static/sales_v2/img/bradmax/2025/full.black.yellow.svg',\n        alt: 'Bradmax Admin',\n        title: 'Bradmax Admin'\n    }\n};\n\n// EXTERNAL MODULE: ./src/module/content/content.model.ts\nvar content_model = __webpack_require__(1493);\nvar content_model_default = /*#__PURE__*/__webpack_require__.n(content_model);\n\n// CONCATENATED MODULE: ./src/module/content/content.component.ts\nvar content_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar content_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar content_component___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar content_component_ContentComponent = (function () {\n    function ContentComponent(config, view, sidebar, url, translation, header, cdr, router, login, user, modal) {\n        var _this = this;\n        this.config = config;\n        this.view = view;\n        this.sidebar = sidebar;\n        this.url = url;\n        this.translation = translation;\n        this.header = header;\n        this.cdr = cdr;\n        this.router = router;\n        this.login = login;\n        this.user = user;\n        this.modal = modal;\n        this.view.spinner(true);\n        this.active = false;\n        this.isAppInIframe = this.view.checkIfAppInIframe();\n        this.isBetaMode = this.view.checkIfBetaMode();\n        this.router.events.subscribe(function () {\n            if (_this.config.mobile) {\n                _this.sidebar.close();\n            }\n        });\n    }\n    ContentComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.setHeaderLabel();\n        var analyticsMenu = new Array();\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.DASHBOARD'),\n            route: ['admin', 'analytics', 'dashboard']\n        });\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.AUDIENCE'),\n            route: ['admin', 'analytics', 'audience']\n        });\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.REALTIME'),\n            route: ['admin', 'analytics', 'realtime'],\n            isAvailableInDifferentPlan: !this.hasStatsModule('realtime')\n        });\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.TOP_CONTENT'),\n            route: ['admin', 'analytics', 'top-content'],\n            isAvailableInDifferentPlan: !this.hasStatsModule('media')\n        });\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.CONTENT'),\n            route: ['admin', 'analytics', 'content'],\n            isAvailableInDifferentPlan: !this.hasStatsModule('media')\n        });\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.SELECTED_CONTENT'),\n            isHiddenWhenNotActive: true,\n            route: ['admin', 'analytics', 'content', ':materialId'],\n            isAvailableInDifferentPlan: !this.hasStatsModule('media')\n        });\n        if (this.hasStatsModule('st')) {\n            analyticsMenu.push({\n                name: 'Content Reports',\n                route: ['admin', 'analytics', 'st-report'],\n            });\n            if (this.isBetaMode)\n                analyticsMenu.push({\n                    name: 'Sampled Traffic',\n                    route: analyticsSampledTrafficRoute,\n                });\n        }\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.GEO'),\n            route: ['admin', 'analytics', 'geo'],\n            isAvailableInDifferentPlan: !this.hasStatsModule('geo')\n        });\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.GEO_COUNTRY'),\n            isHiddenWhenNotActive: true,\n            route: ['admin', 'analytics', 'geo', ':countryCode'],\n            isAvailableInDifferentPlan: !this.hasStatsModule('geo')\n        });\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.TECHNOLOGY'),\n            route: ['admin', 'analytics', 'technology'],\n            isAvailableInDifferentPlan: !this.hasStatsModule('tech')\n        });\n        if (this.isBetaMode) {\n            analyticsMenu.push({\n                name: 'Playback exp.',\n                route: ['admin', 'analytics', 'playback-experience'],\n                isBeta: true,\n            });\n            analyticsMenu.push({\n                name: 'Selected playback',\n                isHiddenWhenNotActive: true,\n                route: ['admin', 'analytics', 'playback-experience', 'playback'],\n                isBeta: true,\n            });\n            analyticsMenu.push({\n                name: 'Errors & Failures',\n                route: ['admin', 'analytics', 'errors'],\n                isBeta: true,\n            });\n            analyticsMenu.push({\n                name: 'RT Marketing',\n                route: ['admin', 'analytics', 'real-time-marketing'],\n                isBeta: true,\n            });\n            analyticsMenu.push({\n                name: 'Content Insights',\n                route: ['admin', 'analytics', 'content-insights'],\n                isBeta: true,\n            });\n            analyticsMenu.push({\n                name: this.translation.translate('MENU.MAIN.ANALYTICS.QOS'),\n                route: ['admin', 'analytics', 'qos']\n            });\n            analyticsMenu.push({\n                name: 'Flex Model',\n                route: ['admin', 'analytics', 'flexmodel']\n            });\n            analyticsMenu.push({\n                name: 'New model',\n                isHiddenWhenNotActive: true,\n                route: ['admin', 'analytics', 'flexmodel', 'setup']\n            });\n        }\n        if (this.isBetaMode) {\n            analyticsMenu.push({\n                name: this.translation.translate('MENU.MAIN.ANALYTICS.ALBUMS'),\n                route: ['admin', 'analytics', 'albums']\n            });\n            analyticsMenu.push({\n                name: 'Selected album',\n                isHiddenWhenNotActive: true,\n                route: ['admin', 'analytics', 'albums', ':collectionId']\n            });\n        }\n        if (this.isBetaMode) {\n            analyticsMenu.push({\n                name: this.translation.translate('MENU.MAIN.ANALYTICS.HEARTBEAT'),\n                route: ['admin', 'analytics', 'heartbeat']\n            });\n        }\n        analyticsMenu.push({\n            name: this.translation.translate('MENU.MAIN.ANALYTICS.INFO'),\n            route: ['admin', 'analytics', 'info']\n        });\n        var menu = [\n            {\n                name: this.translation.translate('MENU.MAIN.PRODUCTS'),\n                icon: 'fa-shopping-basket',\n                route: ['admin', 'products']\n            }, {\n                name: this.translation.translate('MENU.MAIN.ANALYTICS.NAME'),\n                icon: 'fa-area-chart',\n                openIcon: 'fa-area-chart',\n                route: ['admin', 'analytics'],\n                data: analyticsMenu\n            }, {\n                name: this.translation.translate('MENU.MAIN.PLAYER_CONFIG'),\n                icon: 'fa-play-circle',\n                route: ['admin', 'player'],\n                data: new Array()\n            }\n        ];\n        this.sidebar.setupDefault({\n            renderAt: Date.now(),\n            name: this.translation.translate('MENU.MAIN.NAME'),\n            items: menu\n        });\n        if (!this.config.mobile) {\n            this.sidebar.openDefault();\n        }\n        this.user.userDataChanged.subscribe(function () { return _this.setHeaderLabel(); });\n        this.active = true;\n        this.cdr.markForCheck();\n        this.view.spinner(false);\n        if (!this.user.hasGdprInfoShown) {\n            this.user.hasGdprInfoShown = true;\n            this.user.updateUser({\n                email: this.user.email,\n                first_name: this.user.firstName,\n                last_name: this.user.lastName,\n                has_gdpr_info_shown: true,\n                has_agree_for_newsletter: this.user.hasAgreeForNewsletter\n            });\n            this.showGdprInfo();\n        }\n    };\n    ContentComponent.prototype.showGdprInfo = function () {\n        this.modal.gdprInfo(this.translation.translate('MODAL.GDPR_INFO'));\n    };\n    ContentComponent.prototype.setHeaderLabel = function () {\n        var _this = this;\n        this.header.menu([{\n                label: this.user.firstName + ' ' + this.user.lastName,\n                image: this.url.file('img/user/account.svg'),\n                menu: [{\n                        label: this.translation.translate('MENU.USER.ACCOUNT'),\n                        click: function () { return _this.router.navigate(['admin', 'account']); }\n                    }, {\n                        label: this.translation.translate('MENU.USER.LOGOUT'),\n                        click: function () { return _this.login.logout(function () {\n                            _this.router.initialNavigation();\n                            _this.router.navigate(['login']);\n                        }); }\n                    }]\n            }]);\n    };\n    ContentComponent.prototype.hasStatsModule = function (moduleName) {\n        return (this.user.statsModules != null) && (this.user.statsModules.indexOf(moduleName) != -1);\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n    ContentComponent = content_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'content',\n            template: __webpack_require__(1494),\n            styles: [\n                ':host{display: block;}'\n                    + ':host.with-header{padding-top: 54px;}'\n                    + ':host .content{margin-left: 0 !important;}'\n                    + ':host .content.with-sidebar{margin-left: 200px !important;}'\n            ],\n            host: {\n                'class': 'fade',\n                '[class.out]': '!active',\n                '[class.in]': 'active',\n                '[class.with-header]': '!isAppInIframe'\n            },\n            viewProviders: [login_service_LoginService],\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        content_component___param(0, Object(core_es5[\"Inject\"])(ContentConfig)),\n        content_component___metadata(\"design:paramtypes\", [typeof (_a = typeof content_model[\"ContentConfigModel\"] !== \"undefined\" && content_model[\"ContentConfigModel\"]) === \"function\" && _a || Object, typeof (_b = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _b || Object, typeof (_c = typeof sidebar_service[\"a\" /* SidebarService */] !== \"undefined\" && sidebar_service[\"a\" /* SidebarService */]) === \"function\" && _c || Object, typeof (_d = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _d || Object, typeof (_e = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _e || Object, typeof (_f = typeof header_service[\"a\" /* HeaderService */] !== \"undefined\" && header_service[\"a\" /* HeaderService */]) === \"function\" && _f || Object, typeof (_g = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _g || Object, typeof (_h = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _h || Object, typeof (_j = typeof login_service_LoginService !== \"undefined\" && login_service_LoginService) === \"function\" && _j || Object, typeof (_k = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _k || Object, typeof (_l = typeof modal_service[\"a\" /* ModalService */] !== \"undefined\" && modal_service[\"a\" /* ModalService */]) === \"function\" && _l || Object])\n    ], ContentComponent);\n    return ContentComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/content/content.resolver.ts\nvar content_resolver___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar content_resolver___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar content_resolver_ContentResolver = (function () {\n    function ContentResolver(user) {\n        this.user = user;\n    }\n    ContentResolver.prototype.resolve = function (route, state) {\n        return this.user.get();\n    };\n    var _a;\n    ContentResolver = content_resolver___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        content_resolver___metadata(\"design:paramtypes\", [typeof (_a = typeof user_service[\"a\" /* UserService */] !== \"undefined\" && user_service[\"a\" /* UserService */]) === \"function\" && _a || Object])\n    ], ContentResolver);\n    return ContentResolver;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/content/content.module.ts\nvar content_content_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar content_content_module_routes = [\n    {\n        path: 'admin',\n        component: content_component_ContentComponent,\n        canActivate: [auth_guard_service_AuthGuard],\n        resolve: { content: content_resolver_ContentResolver },\n        children: [\n            { path: 'account', loadChildren: function () { return account_module_AccountModule; } },\n            { path: 'analytics', loadChildren: function () { return analytics_module_AnalyticsModule; } },\n            { path: 'player', loadChildren: function () { return player_module_PlayerModule; } },\n            { path: 'products', loadChildren: function () { return products_module_ProductsModule; } },\n            { path: 'subscription', loadChildren: function () { return subscription_module_SubscriptionModule; } },\n            { path: '', redirectTo: 'analytics', pathMatch: 'full' },\n            { path: '**', redirectTo: 'analytics' }\n        ]\n    },\n    { path: '', redirectTo: 'admin', pathMatch: 'full' },\n    { path: '**', redirectTo: 'admin' }\n];\nvar content_module_ContentModule = (function () {\n    function ContentModule() {\n    }\n    ContentModule = content_content_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                router_es5[\"h\" /* RouterModule */].forChild(content_content_module_routes),\n                http_es5[\"c\" /* HttpModule */],\n                common_es5[\"CommonModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                header_module[\"a\" /* HeaderModule */],\n                sidebar_module[\"a\" /* SidebarModule */],\n                modal_module_ModalModule,\n            ],\n            providers: [\n                auth_guard_service_AuthGuard,\n                content_resolver_ContentResolver,\n                { provide: ContentConfig, useValue: ContentConfigData }\n            ],\n            declarations: VIEW_COMPONENTS.concat([content_component_ContentComponent]),\n            entryComponents: VIEW_COMPONENTS.concat([content_component_ContentComponent]),\n            exports: [router_es5[\"h\" /* RouterModule */]].concat(VIEW_COMPONENTS, [content_component_ContentComponent])\n        })\n    ], ContentModule);\n    return ContentModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/login/login.view.ts\nvar login_view___extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar login_view___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar login_view___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nvar login_view_LoginView = (function (_super) {\n    login_view___extends(LoginView, _super);\n    function LoginView(locale, translation, auth, service, view, cdr, router, renderer, url) {\n        var _this = _super.call(this, locale, translation) || this;\n        _this.locale = locale;\n        _this.translation = translation;\n        _this.auth = auth;\n        _this.service = service;\n        _this.view = view;\n        _this.cdr = cdr;\n        _this.router = router;\n        _this.renderer = renderer;\n        _this.url = url;\n        _this.rememberMe = true;\n        _this.error = '';\n        _this.currentYear = new Date().getFullYear();\n        _this.view.spinner(true);\n        _this.active = false;\n        _this.signInUrl = _this.url.getSignUpPage();\n        _this.passwordResetUrl = _this.url.getPasswordResetPage();\n        return _this;\n    }\n    LoginView.prototype.ngOnInit = function () {\n        var _this = this;\n        var accessTokenMatch = window.location.href.match(/[&\\?]accessToken=([a-zA-Z0-9]+)/);\n        if (accessTokenMatch) {\n            var redirectUrl = null;\n            var redirectUrlMatch = window.location.href.match(/[&\\?]redirectUrl=([a-zA-Z0-9/_\\-%]+)/);\n            if (redirectUrlMatch) {\n                redirectUrl = decodeURIComponent(redirectUrlMatch[1]);\n            }\n            if (!this.initAfterBackRedirectionComplete) {\n                this.initAfterBackRedirectionComplete = this.router.events.subscribe(function (e) {\n                    if (e instanceof router_es5[\"c\" /* NavigationEnd */]) {\n                        _this.initWithDebouncer();\n                    }\n                });\n            }\n            this.autologinWithAccessTokenFromUrl(accessTokenMatch[1], redirectUrl);\n        }\n        else {\n            this.initWithDebouncer();\n        }\n    };\n    LoginView.prototype.ngOnDestroy = function () {\n        if (this.initTimer != null)\n            this.initTimer.unsubscribe();\n        if (this.initAfterBackRedirectionComplete != null)\n            this.initAfterBackRedirectionComplete.unsubscribe();\n    };\n    LoginView.prototype.login = function () {\n        var _this = this;\n        if (!('user' in this.auth) || this.auth.user == null || !validation_service_ValidationService.isValidEmail(this.auth.user)) {\n            this.error = this.translation.translate('LOGIN.INVALID.USER');\n            this.cdr.markForCheck();\n            return;\n        }\n        else if (!('password' in this.auth) || this.auth.password == null) {\n            this.error = this.translation.translate('LOGIN.INVALID.PASSWORD');\n            this.cdr.markForCheck();\n            return;\n        }\n        this.error = '';\n        this.cdr.markForCheck();\n        this.view.spinner(true);\n        this.service.login(function () { return _this.loginSucceed(); }, function (msg) { return _this.loginFail(msg); });\n    };\n    LoginView.prototype.autologinWithAccessTokenFromUrl = function (accessToken, redirectUrl) {\n        this.auth.token = accessToken;\n        if (redirectUrl) {\n            this.auth.redirectUrl = redirectUrl;\n        }\n        this.loginSucceed();\n    };\n    LoginView.prototype.rememberMeChange = function (value) {\n        this.rememberMe = value;\n        this.checkAutocomplete();\n        this.cdr.markForCheck();\n    };\n    LoginView.prototype.init = function () {\n        this.checkAutocomplete();\n        this.rememberMeLabel = {\n            on: this.translation.translate('LOGIN.LABEL.REMEMBER_ME.ON'),\n            off: this.translation.translate('LOGIN.LABEL.REMEMBER_ME.OFF')\n        };\n        this.active = true;\n        this.cdr.markForCheck();\n        this.view.spinner(false);\n    };\n    LoginView.prototype.initWithDebouncer = function () {\n        var _this = this;\n        if (this.initTimer != null)\n            this.initTimer.unsubscribe();\n        this.initTimer = Observable[\"Observable\"].timer(250).subscribe(function () { return _this.init(); });\n    };\n    LoginView.prototype.checkAutocomplete = function () {\n        var val = this.rememberMe == true ? 'on' : 'off';\n        if (this.autocomplete != val)\n            this.autocomplete = val;\n    };\n    LoginView.prototype.loginSucceed = function () {\n        if (this.auth.logged) {\n            if (!this.view.checkIfAppInIframe() && (this.rememberMe == true)) {\n                this.form.nativeElement.submit();\n            }\n            var redirectTo = this.auth.redirectUrl ? this.auth.redirectUrl : this.auth.defaultUrl;\n            if (redirectTo == this.auth.sanitizeUrl(this.router.url))\n                redirectTo = this.auth.defaultUrl;\n            this.router.navigate([redirectTo]);\n        }\n        this.auth.redirectUrl = null;\n    };\n    LoginView.prototype.loginFail = function (msg) {\n        this.view.spinner(false);\n        this.error = msg;\n        this.cdr.markForCheck();\n        this.view.spinner(false);\n    };\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n    login_view___decorate([\n        Object(core_es5[\"ViewChild\"])('form'),\n        login_view___metadata(\"design:type\", typeof (_a = typeof core_es5[\"ElementRef\"] !== \"undefined\" && core_es5[\"ElementRef\"]) === \"function\" && _a || Object)\n    ], LoginView.prototype, \"form\", void 0);\n    login_view___decorate([\n        Object(core_es5[\"HostListener\"])('window:keydown.enter', ['$event']),\n        login_view___metadata(\"design:type\", Function),\n        login_view___metadata(\"design:paramtypes\", []),\n        login_view___metadata(\"design:returntype\", void 0)\n    ], LoginView.prototype, \"login\", null);\n    LoginView = login_view___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'login',\n            template: __webpack_require__(1495),\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        login_view___metadata(\"design:paramtypes\", [typeof (_b = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _c || Object, typeof (_d = typeof auth_service[\"a\" /* AuthService */] !== \"undefined\" && auth_service[\"a\" /* AuthService */]) === \"function\" && _d || Object, typeof (_e = typeof login_service_LoginService !== \"undefined\" && login_service_LoginService) === \"function\" && _e || Object, typeof (_f = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _f || Object, typeof (_g = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _g || Object, typeof (_h = typeof router_es5[\"g\" /* Router */] !== \"undefined\" && router_es5[\"g\" /* Router */]) === \"function\" && _h || Object, typeof (_j = typeof core_es5[\"Renderer2\"] !== \"undefined\" && core_es5[\"Renderer2\"]) === \"function\" && _j || Object, typeof (_k = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _k || Object])\n    ], LoginView);\n    return LoginView;\n}(angular_l10n_es5[\"b\" /* Localization */]));\n\n\n// CONCATENATED MODULE: ./src/module/login/service/can.activete.login.guard.ts\nvar can_activete_login_guard___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar can_activete_login_guard___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar can_activete_login_guard___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\nvar can_activete_login_guard_CanActivateLogin = (function () {\n    function CanActivateLogin(doc) {\n        this.doc = doc;\n    }\n    CanActivateLogin.prototype.canActivate = function (_route, _state) {\n        var _this = this;\n        var query = this.doc.querySelectorAll(\"link#bradmax-kit-css\");\n        if (query.length < 1) {\n            return new Rx[\"Observable\"](function (s) {\n                var link = _this.doc.createElement('link');\n                link.id = 'bradmax-kit-css';\n                link.rel = 'stylesheet';\n                link.href = ( false\n                    ? 'cdn'\n                    : 'https://bradmax.com/static/sales_v2') + '/css/theme.bundle.css';\n                link.onerror = function (e) { return s.error(e); };\n                link.onload = function () { s.next(true); s.complete(); };\n                _this.doc.head.appendChild(link);\n            });\n        }\n        return true;\n    };\n    var _a;\n    CanActivateLogin = can_activete_login_guard___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        can_activete_login_guard___param(0, Object(core_es5[\"Inject\"])(common_es5[\"DOCUMENT\"])),\n        can_activete_login_guard___metadata(\"design:paramtypes\", [typeof (_a = typeof Document !== \"undefined\" && Document) === \"function\" && _a || Object])\n    ], CanActivateLogin);\n    return CanActivateLogin;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/login/service/can.deactivete.login.guard.ts\nvar can_deactivete_login_guard___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar can_deactivete_login_guard___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar can_deactivete_login_guard___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\nvar can_deactivete_login_guard_CanDeactivateLogin = (function () {\n    function CanDeactivateLogin(doc) {\n        this.doc = doc;\n    }\n    CanDeactivateLogin.prototype.canDeactivate = function (_component, _currentRoute, _currentState, _nextState) {\n        var query = this.doc.querySelectorAll(\"link#bradmax-kit-css\");\n        if (query.length > 0)\n            for (var i = 0; i < query.length; i++) {\n                var link = query.item(i);\n                link.parentElement.removeChild(link);\n            }\n        return true;\n    };\n    var _a;\n    CanDeactivateLogin = can_deactivete_login_guard___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        can_deactivete_login_guard___param(0, Object(core_es5[\"Inject\"])(common_es5[\"DOCUMENT\"])),\n        can_deactivete_login_guard___metadata(\"design:paramtypes\", [typeof (_a = typeof Document !== \"undefined\" && Document) === \"function\" && _a || Object])\n    ], CanDeactivateLogin);\n    return CanDeactivateLogin;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/login/login.module.ts\nvar login_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar login_module_routes = [{\n        path: 'login', component: login_view_LoginView,\n        canActivate: [can_activete_login_guard_CanActivateLogin],\n        canDeactivate: [can_deactivete_login_guard_CanDeactivateLogin]\n    }];\nvar login_module_LoginModule = (function () {\n    function LoginModule() {\n    }\n    LoginModule = login_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                http_es5[\"c\" /* HttpModule */],\n                forms_es5[\"FormsModule\"],\n                common_es5[\"CommonModule\"],\n                router_es5[\"h\" /* RouterModule */].forChild(login_module_routes),\n                angular_l10n_es5[\"c\" /* LocalizationModule */],\n                modal_module_ModalModule, form_module_FormComponentsModule\n            ],\n            providers: [\n                login_service_LoginService, validation_service_ValidationService,\n                can_activete_login_guard_CanActivateLogin,\n                can_deactivete_login_guard_CanDeactivateLogin,\n            ],\n            declarations: [login_view_LoginView],\n            entryComponents: [login_view_LoginView],\n            exports: [router_es5[\"h\" /* RouterModule */], login_view_LoginView]\n        })\n    ], LoginModule);\n    return LoginModule;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/spinner/component/spinner.component.ts\nvar spinner_component___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar spinner_component___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar spinner_component_SpinnerComponent = (function () {\n    function SpinnerComponent(view, cdr) {\n        this.view = view;\n        this.cdr = cdr;\n        this.active = true;\n    }\n    SpinnerComponent.prototype.ngOnInit = function () {\n        var _this = this;\n        this.bodySpinnerSub = this.view.bodySpinnerStream$\n            .subscribe(function (spinnerData) {\n            if (_this.active != spinnerData.show || _this.errorInfo != spinnerData.error) {\n                _this.active = spinnerData.show;\n                _this.errorInfo = spinnerData.error;\n                _this.cdr.markForCheck();\n            }\n        });\n    };\n    SpinnerComponent.prototype.ngOnDestroy = function () {\n        this.active = false;\n        if (this.bodySpinnerSub)\n            this.bodySpinnerSub.unsubscribe();\n    };\n    var _a, _b;\n    spinner_component___decorate([\n        Object(core_es5[\"HostBinding\"])(\"class.active\"),\n        spinner_component___metadata(\"design:type\", Object)\n    ], SpinnerComponent.prototype, \"active\", void 0);\n    SpinnerComponent = spinner_component___decorate([\n        Object(core_es5[\"Component\"])({\n            selector: 'spinner',\n            changeDetection: core_es5[\"ChangeDetectionStrategy\"].OnPush,\n            template: __webpack_require__(1496),\n            styles: [__webpack_require__(1497)],\n        }),\n        spinner_component___metadata(\"design:paramtypes\", [typeof (_a = typeof view_service[\"a\" /* ViewService */] !== \"undefined\" && view_service[\"a\" /* ViewService */]) === \"function\" && _a || Object, typeof (_b = typeof core_es5[\"ChangeDetectorRef\"] !== \"undefined\" && core_es5[\"ChangeDetectorRef\"]) === \"function\" && _b || Object])\n    ], SpinnerComponent);\n    return SpinnerComponent;\n}());\n\n\n// CONCATENATED MODULE: ./src/module/spinner/spinner.module.ts\nvar spinner_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\nvar spinner_module_SpinnerModule = (function () {\n    function SpinnerModule() {\n    }\n    SpinnerModule = spinner_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                common_es5[\"CommonModule\"]\n            ],\n            providers: [],\n            entryComponents: [\n                spinner_component_SpinnerComponent,\n            ],\n            declarations: [\n                spinner_component_SpinnerComponent,\n            ],\n            exports: [\n                spinner_component_SpinnerComponent\n            ]\n        })\n    ], SpinnerModule);\n    return SpinnerModule;\n}());\n\n\n// EXTERNAL MODULE: ./src/service/cookie.service.ts\nvar cookie_service = __webpack_require__(178);\n\n// EXTERNAL MODULE: ./src/service/localstorage.service.ts\nvar localstorage_service = __webpack_require__(344);\n\n// EXTERNAL MODULE: ./src/app/index.ts\nvar app = __webpack_require__(1498);\n\n// EXTERNAL MODULE: ./src/app/app.config.ts\nvar app_config = __webpack_require__(189);\n\n// EXTERNAL MODULE: ./src/app/app.model.ts\nvar app_model = __webpack_require__(351);\nvar app_model_default = /*#__PURE__*/__webpack_require__.n(app_model);\n\n// CONCATENATED MODULE: ./src/app/app.localization.ts\nvar app_localization___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar app_localization___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar app_localization___param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\n\n\n\n\n\n\nfunction initLocalization(localizationConfig) {\n    return function () { return localizationConfig.load(); };\n}\nvar app_localization_LocalizationConfig = (function () {\n    function LocalizationConfig(config, url, locale, translation) {\n        this.config = config;\n        this.url = url;\n        this.locale = locale;\n        this.translation = translation;\n        this.langs = [\"en\", \"pl\"];\n        this.jsonCtx = __webpack_require__(1501);\n    }\n    LocalizationConfig.prototype.load = function () {\n        var _this = this;\n        this.locale.addConfiguration()\n            .addLanguages(this.config.languages)\n            .setCookieExpiration(30)\n            .defineDefaultLocale(this.config.default.language, this.config.default.country);\n        this.locale.init();\n        var availableTranslations = {};\n        this.jsonCtx.keys().forEach(function (k) {\n            availableTranslations[k] = k;\n        });\n        var tc = this.translation.addConfiguration();\n        this.config.providers.forEach(function (providerName) { return _this.langs.forEach(function (lang) {\n            var filename = './' + providerName.replace(/^i18n\\//, '') + lang + '.json';\n            if (filename in availableTranslations) {\n                var trans = _this.jsonCtx(filename);\n                tc.addTranslation(lang, trans);\n            }\n        }); });\n        var promise = new Promise(function (resolve) { return _this.translation.translationChanged.subscribe(function () {\n            _this.locale.setDefaultLocale(_this.config.default.language, _this.config.default.country);\n            moment_default.a.locale(_this.locale.getDefaultLocale());\n            resolve(true);\n        }); });\n        this.translation.init();\n        return promise;\n    };\n    var _a, _b, _c, _d;\n    LocalizationConfig = app_localization___decorate([\n        Object(core_es5[\"Injectable\"])(),\n        app_localization___param(0, Object(core_es5[\"Inject\"])(app_config[\"a\" /* AppConfig */])),\n        app_localization___metadata(\"design:paramtypes\", [typeof (_a = typeof app_model[\"AppConfigModel\"] !== \"undefined\" && app_model[\"AppConfigModel\"]) === \"function\" && _a || Object, typeof (_b = typeof url_service[\"a\" /* UrlService */] !== \"undefined\" && url_service[\"a\" /* UrlService */]) === \"function\" && _b || Object, typeof (_c = typeof angular_l10n_es5[\"a\" /* LocaleService */] !== \"undefined\" && angular_l10n_es5[\"a\" /* LocaleService */]) === \"function\" && _c || Object, typeof (_d = typeof angular_l10n_es5[\"d\" /* TranslationService */] !== \"undefined\" && angular_l10n_es5[\"d\" /* TranslationService */]) === \"function\" && _d || Object])\n    ], LocalizationConfig);\n    return LocalizationConfig;\n}());\n\n\n// CONCATENATED MODULE: ./src/app/app.module.ts\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return app_module_AppModule; });\nvar app_module___decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar app_module___metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar app_module_AppModule = (function () {\n    function AppModule(appRef) {\n        this.appRef = appRef;\n    }\n    AppModule.prototype.hmrOnInit = function (store) {\n        if (!store || !store.state)\n            return;\n        if ('restoreInputValues' in store) {\n            store.restoreInputValues();\n        }\n        this.appRef.tick();\n        delete store.state;\n        delete store.restoreInputValues;\n    };\n    AppModule.prototype.hmrOnDestroy = function (store) {\n        console.clear();\n        var cmpLocation = this.appRef.components.map(function (cmp) { return cmp.location.nativeElement; });\n        store.disposeOldHosts = Object(dist[\"createNewHosts\"])(cmpLocation);\n        store.restoreInputValues = Object(dist[\"createInputTransfer\"])();\n        Object(dist[\"removeNgStyles\"])();\n    };\n    AppModule.prototype.hmrAfterDestroy = function (store) {\n        store.disposeOldHosts();\n        delete store.disposeOldHosts;\n    };\n    var _a;\n    AppModule = app_module___decorate([\n        Object(core_es5[\"NgModule\"])({\n            imports: [\n                router_es5[\"h\" /* RouterModule */].forRoot([], {\n                    enableTracing: false,\n                    initialNavigation: true\n                }),\n                http_es5[\"c\" /* HttpModule */],\n                platform_browser_es5[\"a\" /* BrowserModule */],\n                BrowserAnimationsModule,\n                forms_es5[\"FormsModule\"],\n                forms_es5[\"ReactiveFormsModule\"],\n                angular_l10n_es5[\"c\" /* LocalizationModule */].forRoot(),\n                modal_module_ModalModule,\n                spinner_module_SpinnerModule,\n                login_module_LoginModule,\n                content_module_ContentModule,\n                angular2_flash_messages[\"FlashMessagesModule\"]\n            ],\n            declarations: [\n                app[\"AppComponent\"],\n            ],\n            providers: [\n                cookie_service[\"a\" /* CookieService */],\n                localstorage_service[\"a\" /* LocalStorageService */],\n                buyCookie_service[\"a\" /* BuyCookieService */],\n                {\n                    provide: core_es5[\"APP_INITIALIZER\"],\n                    useFactory: buyCookie_service[\"b\" /* initBuyCookieService */],\n                    deps: [buyCookie_service[\"a\" /* BuyCookieService */], cookie_service[\"a\" /* CookieService */]],\n                    multi: true\n                },\n                view_service[\"a\" /* ViewService */],\n                {\n                    provide: core_es5[\"APP_INITIALIZER\"],\n                    useFactory: view_service[\"b\" /* initViewService */],\n                    deps: [view_service[\"a\" /* ViewService */]],\n                    multi: true\n                },\n                app_localization_LocalizationConfig,\n                {\n                    provide: core_es5[\"APP_INITIALIZER\"],\n                    useFactory: initLocalization,\n                    deps: [app_localization_LocalizationConfig, url_service[\"a\" /* UrlService */]],\n                    multi: true\n                },\n                { provide: app_config[\"a\" /* AppConfig */], useValue: app_config[\"b\" /* AppConfigData */] },\n                { provide: core_es5[\"ErrorHandler\"], useClass: exception_service[\"a\" /* ExceptionService */] },\n                auth_service[\"a\" /* AuthService */],\n                api_service[\"a\" /* BradmaxApi */],\n                exception_service[\"a\" /* ExceptionService */],\n                country_service_CountryService,\n                account_service[\"a\" /* AccountService */],\n                url_service[\"a\" /* UrlService */],\n                braintree_service_BraintreeService,\n                sidebar_service[\"a\" /* SidebarService */],\n                user_service[\"a\" /* UserService */],\n                export_service_ExportService,\n            ],\n            bootstrap: [app[\"AppComponent\"]]\n        }),\n        app_module___metadata(\"design:paramtypes\", [typeof (_a = typeof core_es5[\"ApplicationRef\"] !== \"undefined\" && core_es5[\"ApplicationRef\"]) === \"function\" && _a || Object])\n    ], AppModule);\n    return AppModule;\n}());\n\n\n\n/***/ }),\n\n/***/ 344:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return LocalStorageService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\nvar LocalStorageService = (function () {\n    function LocalStorageService() {\n    }\n    LocalStorageService.prototype.write = function (name, value) {\n        window.localStorage.setItem(name, value);\n    };\n    LocalStorageService.prototype.read = function (name) {\n        return window.localStorage.getItem(name);\n    };\n    LocalStorageService.prototype.erase = function (name) {\n        window.localStorage.removeItem(name);\n    };\n    LocalStorageService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])()\n    ], LocalStorageService);\n    return LocalStorageService;\n}());\n\n\n\n/***/ }),\n\n/***/ 345:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return TermsModalComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__ = __webpack_require__(71);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\nvar HTML = ''\n    + '<h4 class=\"title\" *ngIf=\"title\">{{title}}</h4>'\n    + '<div class=\"prompt-message\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>'\n    + '<div class=\"prompt-buttons\">'\n    + '<button *ngFor=\"let btn of buttons\" [ngClass]=\"formatNgClass(btn)\" (click)=\"click(btn)\">'\n    + '<i *ngIf=\"btn.fa!=null\" class=\"fa fa-{{btn.fa}}\"></i>'\n    + '<span> {{btn.label}}</span>'\n    + '</button>'\n    + '</div>'\n    + '';\nvar STYLE = \"\\n:host{display: block;margin: auto;font-weight: 200;background: #fff;max-width: 800px;min-width: 200px; max-height:600px;overflow:auto;}\\n:host .title { padding: 16px 16px 16px 16px; text-align: center; }\\n:host .prompt-message { padding: 0px 16px 16px 16px; text-align: left; white-space: pre-wrap;}\\n:host .prompt-buttons { padding: 2px 16px 16px 16px; text-align: center; }\\n:host .prompt-buttons button {\\n    display: inline-block;\\n    text-align: center;\\n    vertical-align: middle;\\n    touch-action: manipulation;\\n    cursor: pointer;\\n    //background: #FFFFFF;\\n    //border: 1px solid transparent;\\n    white-space: nowrap;\\n    padding: 4px 10px;\\n    margin: 2px 6px;\\n    font-size: inherit;\\n    line-height: 1em;\\n    border-radius: 30;\\n    user-select: none;\\n}\";\nvar TermsModalComponent = (function (_super) {\n    __extends(TermsModalComponent, _super);\n    function TermsModalComponent(sanitizer) {\n        var _this = _super.call(this) || this;\n        _this.sanitizer = sanitizer;\n        return _this;\n    }\n    TermsModalComponent.prototype.formatNgClass = function (btn) {\n        var classes = {};\n        if (btn.classes != null)\n            for (var i = 0; i < btn.classes.length; i++)\n                classes[btn.classes[i]] = true;\n        return classes;\n    };\n    TermsModalComponent.prototype.click = function (btn) {\n        if (btn.click != null)\n            btn.click();\n        if (btn.close && btn.close == true)\n            this.close();\n    };\n    var _a;\n    TermsModalComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'prompt-modal-component',\n            template: HTML, styles: [STYLE],\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"c\" /* DomSanitizer */]) === \"function\" && _a || Object])\n    ], TermsModalComponent);\n    return TermsModalComponent;\n}(__WEBPACK_IMPORTED_MODULE_2__abstract_modal_component__[\"a\" /* AbstractModalComponent */]));\n\n\n\n/***/ }),\n\n/***/ 346:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return HeaderModule; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_common__ = __webpack_require__(5);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__sidebar_sidebar_module__ = __webpack_require__(185);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4____ = __webpack_require__(1439);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__header_burger_component__ = __webpack_require__(348);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__header_menu_component__ = __webpack_require__(347);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n\n\n\n\n\n\n\nvar HeaderModule = (function () {\n    function HeaderModule() {\n    }\n    HeaderModule = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"NgModule\"])({\n            imports: [__WEBPACK_IMPORTED_MODULE_2__angular_router__[\"h\" /* RouterModule */], __WEBPACK_IMPORTED_MODULE_0__angular_common__[\"CommonModule\"], __WEBPACK_IMPORTED_MODULE_3__sidebar_sidebar_module__[\"a\" /* SidebarModule */]],\n            declarations: [__WEBPACK_IMPORTED_MODULE_4____[\"HeaderComponent\"], __WEBPACK_IMPORTED_MODULE_5__header_burger_component__[\"a\" /* BurgerComponent */], __WEBPACK_IMPORTED_MODULE_6__header_menu_component__[\"a\" /* HeaderMenuComponent */]],\n            providers: [__WEBPACK_IMPORTED_MODULE_4____[\"HeaderService\"]],\n            exports: [__WEBPACK_IMPORTED_MODULE_4____[\"HeaderComponent\"]]\n        })\n    ], HeaderModule);\n    return HeaderModule;\n}());\n\n\n\n/***/ }),\n\n/***/ 347:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return HeaderMenuComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__service_view_service__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__header_service__ = __webpack_require__(186);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__util_dom_util__ = __webpack_require__(55);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar HTML = '<ng-template [ngIf]=\"model!=null\">'\n    + '<span *ngFor=\"let menu of model\" [class.active]=\"menu.active\">'\n    + '<a (click)=\"toggle(menu)\">'\n    + '<img *ngIf=\"menu.image\" [src]=\"menu.image\" />'\n    + '<span *ngIf=\"menu.label\">{{menu.label}}</span> <b class=\"caret\"></b>'\n    + '</a>'\n    + '<ul *ngIf=\"menu.active && menu.menu\">'\n    + '<li *ngFor=\"let item of menu.menu\"><a (click)=\"click(item)\" >{{item.label}}</a></li>'\n    + '</ul>'\n    + '</span>'\n    + '</ng-template>';\nvar STYLE = ''\n    + ':host {display: block;float: right;height: 56px;line-height: 56px;}'\n    + ':host > span {display: inline-block;position: relative;border: none;float: left;'\n    + 'border-left: 1px solid #efefef;min-width: 80px;text-align: right;overflow: hidden;}'\n    + ':host > span.active {box-shadow: 0px 0px 3px 0px #888;z-index: 1;}'\n    + ':host > span a {display: inline-block;cursor: pointer;border: none;width: 100%;margin: 0;padding: 0 10px;'\n    + 'text-decoration: none !important;color: inherit;}'\n    + ':host > span > a:hover, :host > span.active > a {background: #fafafa;}'\n    + ':host > span > a > img {width: 30px;height: 30px;margin-right: 5px;border-radius: 30px;}'\n    + ':host > span > ul {background: #fafafa;padding: 0;margin: 0;border-radius: 0;}'\n    + ':host > span > ul > li {list-style: none;line-height: 32px;text-align: center;}'\n    + ':host > span > ul > li > a {text-align: center;}'\n    + ':host > span > ul > li > a:hover {background: #fefefe;}';\nvar HeaderMenuComponent = (function () {\n    function HeaderMenuComponent(view, element, cdr, router, service) {\n        var _this = this;\n        this.view = view;\n        this.element = element;\n        this.cdr = cdr;\n        this.router = router;\n        this.service = service;\n        this.active = false;\n        this.view.resizeStream$.subscribe(function () { return _this.cdr.markForCheck(); });\n        this.router.events.subscribe(function () { return _this.closeAll(); });\n        if (this.service.lastMenuData) {\n            this.model = this.service.lastMenuData;\n        }\n        this.service.menuStream$.subscribe(function (data) {\n            _this.model = data;\n            _this.cdr.markForCheck();\n        });\n    }\n    HeaderMenuComponent.prototype.toggle = function (m) {\n        m.active = !m.active;\n        if (m.active)\n            this.active = true;\n    };\n    HeaderMenuComponent.prototype.click = function (i) {\n        this.closeAll();\n        if (i.click != null)\n            i.click();\n    };\n    HeaderMenuComponent.prototype.onDocumentClick = function (e) {\n        if (this.active == true && !__WEBPACK_IMPORTED_MODULE_4__util_dom_util__[\"a\" /* DOMUtil */].isDescendant(this.element.nativeElement, e.target))\n            this.closeAll();\n    };\n    HeaderMenuComponent.prototype.closeAll = function () {\n        if (this.active == true && this.model != null && this.model.length > 0) {\n            this.active = false;\n            this.model.forEach(function (m) { return m.active = false; });\n            this.cdr.markForCheck();\n        }\n    };\n    var _a, _b, _c, _d, _e;\n    HeaderMenuComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'header-menu', template: HTML, styles: [STYLE],\n            host: { '(document:click)': 'onDocumentClick($event)' },\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_2__service_view_service__[\"a\" /* ViewService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__service_view_service__[\"a\" /* ViewService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"g\" /* Router */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_3__header_service__[\"a\" /* HeaderService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_3__header_service__[\"a\" /* HeaderService */]) === \"function\" && _e || Object])\n    ], HeaderMenuComponent);\n    return HeaderMenuComponent;\n}());\n\n\n\n/***/ }),\n\n/***/ 348:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return BurgerComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(2);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar HTML = '<span></span><span></span><span></span><span></span><span></span><span></span>';\nvar STYLE = \"* {margin: 0;padding: 0;}\\n:host {display:block;width: 32px;height: 24px;position: relative;margin: 16px 10px; float: right;\\n    transform: rotate(0deg);transition: .5s ease-in-out;cursor: pointer;}\\n:host span {display: block;position: absolute;height: 4px;width: 50%;opacity: 1;transition: .25s ease-in-out;\\n    -webkit-transform: rotate(0deg);-moz-transform: rotate(0deg);-o-transform: rotate(0deg);transform: rotate(0deg);\\n    -webkit-transition: .25s ease-in-out;-moz-transition: .25s ease-in-out;-o-transition: .25s ease-in-out;}\\n:host span:nth-child(even) {left: 50%;border-radius: 0;}\\n:host span:nth-child(odd) {left: 0;border-radius: 0;  }\\n:host span:nth-child(1),:host span:nth-child(2) {top: 0;}\\n:host span:nth-child(3),:host span:nth-child(4) {top: 10px;}\\n:host span:nth-child(5),:host span:nth-child(6) {top: 20px;}\\n:host.active span:nth-child(1),\\n:host.active span:nth-child(6) {-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);\\n\\t-o-transform: rotate(45deg);transform: rotate(45deg);}\\n:host.active span:nth-child(2),\\n:host.active span:nth-child(5) {\\n    -webkit-transform: rotate(-45deg);-moz-transform: rotate(-45deg);-o-transform: rotate(-45deg);\\n    transform: rotate(-45deg);}\\n:host.active span:nth-child(1) {left: 4px; top: 4px; }\\n:host.active span:nth-child(2) {left: calc(50% - 1px);top: 4px; }\\n:host.active span:nth-child(3) {left: -50%;opacity: 0; }\\n:host.active span:nth-child(4) {left: 100%;opacity: 0; }\\n:host.active span:nth-child(5) {left: 4px;top: 15px; }\\n:host.active span:nth-child(6) {left: calc(50% - 1px);top: 15px; }\";\nvar BurgerComponent = (function () {\n    function BurgerComponent(router, cdr) {\n        var _this = this;\n        this.router = router;\n        this.cdr = cdr;\n        this.active = false;\n        this.change = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        this.router.events.subscribe(function () {\n            if (_this.active != false) {\n                _this.active = false;\n                _this.cdr.markForCheck();\n            }\n        });\n    }\n    BurgerComponent.prototype.onClick = function () {\n        this.active = !this.active;\n        this.change.emit(this.active);\n    };\n    var _a, _b;\n    BurgerComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'burger', template: HTML, styles: [STYLE],\n            host: { '(click)': 'onClick()', '[class.active]': 'active' },\n            outputs: ['change'],\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"g\" /* Router */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"g\" /* Router */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]) === \"function\" && _b || Object])\n    ], BurgerComponent);\n    return BurgerComponent;\n}());\n\n\n\n/***/ }),\n\n/***/ 349:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ModalComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__abstract_modal_component__ = __webpack_require__(71);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__modal_model__ = __webpack_require__(181);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__modal_service__ = __webpack_require__(29);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\nvar STYLES = [\n    ':host{display: none;position: fixed;top: 0;bottom: 0;left: 0;right: 0;width: 100%;height: 100%;'\n        + 'z-index: 9998;background: rgba(0, 0, 0, 0.5);}',\n    ':host.active {display: table;}',\n    ':host .content {position: relative;display: table-cell;vertical-align: middle;margin: auto;}',\n    ':host .close {position: absolute;top: 5px;left: 5px;}'\n];\nvar ModalComponent = (function () {\n    function ModalComponent(service, cdr, resolver) {\n        var _this = this;\n        this.service = service;\n        this.cdr = cdr;\n        this.resolver = resolver;\n        this.closeOnBackdropClick = true;\n        this.active = false;\n        this.service.createStream$.subscribe(function (data) {\n            _this.closeOnBackdropClick = data.closeOnBackdropClick == null ? true : data.closeOnBackdropClick;\n            _this.active = true;\n            _this.placeholder.clear();\n            var modal = _this.placeholder.createComponent(_this.resolver.resolveComponentFactory(data.component));\n            if ((data.type == __WEBPACK_IMPORTED_MODULE_2__modal_model__[\"a\" /* ModalType */].alert || __WEBPACK_IMPORTED_MODULE_2__modal_model__[\"a\" /* ModalType */].prompt)\n                && modal.instance instanceof __WEBPACK_IMPORTED_MODULE_1__abstract_modal_component__[\"a\" /* AbstractModalComponent */]) {\n                var inst = modal.instance;\n                inst.title = data.title ? data.title : null;\n                inst.html = data.html ? data.html : null;\n                inst.inputLabel = data.inputLabel ? data.inputLabel : null;\n                inst.inputDefaultValue = data.inputDefaultValue ? data.inputDefaultValue : null;\n                inst.buttons = data.buttons ? data.buttons : [];\n                inst.close = function () { return _this.close(); };\n            }\n            $('body').addClass('modal-open');\n            _this.cdr.markForCheck();\n        });\n        this.service.closeStream$.subscribe(function () { return _this.close(); });\n    }\n    ModalComponent.prototype.click = function (e) {\n        if (this.active == true && this.closeOnBackdropClick == true && e.className.indexOf('content') > -1)\n            this.close();\n    };\n    ModalComponent.prototype.close = function () {\n        $('body').removeClass('modal-open');\n        if (this.active == true) {\n            this.active = false;\n            this.placeholder.clear();\n            this.cdr.markForCheck();\n            this.service.closedSource.next(null);\n        }\n    };\n    var _a, _b, _c, _d;\n    __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewChild\"])('placeholder', { read: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"] }),\n        __metadata(\"design:type\", typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"]) === \"function\" && _a || Object)\n    ], ModalComponent.prototype, \"placeholder\", void 0);\n    ModalComponent = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"])({\n            selector: 'modal',\n            host: { '[class.active]': 'active', '(click)': 'click($event.target)' },\n            template: ''\n                + '<div class=\"content\">'\n                + '<ng-template #placeholder></ng-template>'\n                + '</div>',\n            styles: STYLES,\n            changeDetection: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectionStrategy\"].OnPush\n        }),\n        __metadata(\"design:paramtypes\", [typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_3__modal_service__[\"a\" /* ModalService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_3__modal_service__[\"a\" /* ModalService */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ComponentFactoryResolver\"] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ComponentFactoryResolver\"]) === \"function\" && _d || Object])\n    ], ModalComponent);\n    return ModalComponent;\n}());\n\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(21)))\n\n/***/ }),\n\n/***/ 35:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ExceptionService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_rxjs_add_operator_map__ = __webpack_require__(174);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_rxjs_add_operator_map___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_rxjs_add_operator_map__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_http__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__auth_service__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__view_service__ = __webpack_require__(15);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar ExceptionService = (function () {\n    function ExceptionService(view, access, http) {\n        this.view = view;\n        this.access = access;\n        this.http = http;\n        this.isSendingReport = false;\n    }\n    ExceptionService.prototype.handleError = function (error) {\n        console.groupCollapsed('================= ExceptionService.handleError =================');\n        this.print(error);\n        console.groupEnd();\n        this.view.error(error.message);\n    };\n    ExceptionService.prototype.print = function (error, stackTrace) {\n        if (stackTrace === void 0) { stackTrace = null; }\n        console.error(error);\n        console.log(error.stack);\n        console.log(error.message);\n    };\n    var _a, _b, _c;\n    ExceptionService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_4__view_service__[\"a\" /* ViewService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_4__view_service__[\"a\" /* ViewService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_3__auth_service__[\"a\" /* AuthService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_3__auth_service__[\"a\" /* AuthService */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_2__angular_http__[\"b\" /* Http */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__angular_http__[\"b\" /* Http */]) === \"function\" && _c || Object])\n    ], ExceptionService);\n    return ExceptionService;\n}());\n\n\n\n/***/ }),\n\n/***/ 350:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Imports\nvar core_1 = __webpack_require__(0);\nvar forms_1 = __webpack_require__(9);\nvar CodeMirror = __webpack_require__(81);\n/**\n * CodeMirror component\n * Usage :\n * <codemirror [(ngModel)]=\"data\" [config]=\"{...}\"></codemirror>\n */\nvar CodemirrorComponent = (function () {\n    /**\n     * Constructor\n     */\n    function CodemirrorComponent() {\n        this.change = new core_1.EventEmitter();\n        this.focus = new core_1.EventEmitter();\n        this.blur = new core_1.EventEmitter();\n        this.cursorActivity = new core_1.EventEmitter();\n        this.instance = null;\n        this._value = '';\n    }\n    Object.defineProperty(CodemirrorComponent.prototype, \"value\", {\n        get: function () { return this._value; },\n        set: function (v) {\n            if (v !== this._value) {\n                this._value = v;\n                this.onChange(v);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * On component destroy\n     */\n    CodemirrorComponent.prototype.ngOnDestroy = function () {\n    };\n    /**\n     * On component view init\n     */\n    CodemirrorComponent.prototype.ngAfterViewInit = function () {\n        this.config = this.config || {};\n        this.codemirrorInit(this.config);\n    };\n    /**\n     * Initialize codemirror\n     */\n    CodemirrorComponent.prototype.codemirrorInit = function (config) {\n        var _this = this;\n        this.instance = CodeMirror.fromTextArea(this.host.nativeElement, config);\n        this.instance.setValue(this._value);\n        this.instance.on('change', function () {\n            _this.updateValue(_this.instance.getValue());\n        });\n        this.instance.on('focus', function (instance, event) {\n            _this.focus.emit({ instance: instance, event: event });\n        });\n        this.instance.on('cursorActivity', function (instance) {\n            _this.cursorActivity.emit({ instance: instance });\n        });\n        this.instance.on('blur', function (instance, event) {\n            _this.blur.emit({ instance: instance, event: event });\n        });\n    };\n    /**\n     * Value update process\n     */\n    CodemirrorComponent.prototype.updateValue = function (value) {\n        this.value = value;\n        this.onTouched();\n        this.change.emit(value);\n    };\n    /**\n     * Implements ControlValueAccessor\n     */\n    CodemirrorComponent.prototype.writeValue = function (value) {\n        this._value = value || '';\n        if (this.instance) {\n            this.instance.setValue(this._value);\n        }\n    };\n    CodemirrorComponent.prototype.onChange = function (_) { };\n    CodemirrorComponent.prototype.onTouched = function () { };\n    CodemirrorComponent.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n    CodemirrorComponent.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    return CodemirrorComponent;\n}());\nCodemirrorComponent.decorators = [\n    { type: core_1.Component, args: [{\n                selector: 'codemirror',\n                providers: [\n                    {\n                        provide: forms_1.NG_VALUE_ACCESSOR,\n                        useExisting: core_1.forwardRef(function () { return CodemirrorComponent; }),\n                        multi: true\n                    }\n                ],\n                template: \"<textarea #host></textarea>\",\n            },] },\n];\n/** @nocollapse */\nCodemirrorComponent.ctorParameters = function () { return []; };\nCodemirrorComponent.propDecorators = {\n    'config': [{ type: core_1.Input },],\n    'change': [{ type: core_1.Output },],\n    'focus': [{ type: core_1.Output },],\n    'blur': [{ type: core_1.Output },],\n    'cursorActivity': [{ type: core_1.Output },],\n    'host': [{ type: core_1.ViewChild, args: ['host',] },],\n    'instance': [{ type: core_1.Output },],\n    'value': [{ type: core_1.Input },],\n};\nexports.CodemirrorComponent = CodemirrorComponent;\n//# sourceMappingURL=codemirror.component.js.map\n\n/***/ }),\n\n/***/ 351:\n/***/ (function(module, exports) {\n\n\n\n/***/ }),\n\n/***/ 36:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SidebarService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__model_api_model__ = __webpack_require__(133);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__module_player_model_player_model__ = __webpack_require__(72);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__view_service__ = __webpack_require__(15);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\nvar SidebarService = (function () {\n    function SidebarService(viewService) {\n        this.viewService = viewService;\n        this.openSubject = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__[\"Subject\"]();\n        this.updateSubject = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__[\"Subject\"]();\n        this.closeSubject = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__[\"Subject\"]();\n        this.openStream$ = this.openSubject.asObservable();\n        this.updateStream$ = this.openSubject.asObservable();\n        this.closeStream$ = this.closeSubject.asObservable();\n    }\n    SidebarService.prototype.setupDefault = function (data) {\n        this.cache = JSON.stringify(data);\n    };\n    SidebarService.prototype.openDefault = function () {\n        if (this.cache != null)\n            this.open(JSON.parse(this.cache));\n        this.playersMenuData = null;\n    };\n    SidebarService.prototype.showPlayersMenu = function (playersList, playerId, route) {\n        if (route === void 0) { route = __WEBPACK_IMPORTED_MODULE_3__module_player_model_player_model__[\"a\" /* PlayerRoute */].configurator; }\n        if (!this.cache)\n            return;\n        var data = JSON.parse(this.cache);\n        var playerListRoute = ['admin', 'player'];\n        if (playersList && playersList.count > 0 && playersList.results.length > 0) {\n            playersList.results\n                .forEach(function (player, i) {\n                var v2 = Object(__WEBPACK_IMPORTED_MODULE_2__model_api_model__[\"b\" /* isPlayerV2 */])(player);\n                var v1plublished = !v2 && !!player.latest_webbuild && !!player.latest_webbuild.zip_url;\n                var v2plublished = v2 && !!player.latest_webbuild && !!player.latest_webbuild.player_js_url;\n                var item = {\n                    name: \"'\" + player.name + \"'\",\n                    route: playerListRoute.concat([\"\" + player.id]),\n                    data: player.id === playerId\n                        ? [{\n                                name: v2 ? __WEBPACK_IMPORTED_MODULE_3__module_player_model_player_model__[\"a\" /* PlayerRoute */][__WEBPACK_IMPORTED_MODULE_3__module_player_model_player_model__[\"a\" /* PlayerRoute */].builder] : route,\n                                route: playerListRoute.concat([\"\" + player.id, v2 ? __WEBPACK_IMPORTED_MODULE_3__module_player_model_player_model__[\"a\" /* PlayerRoute */].builder : route])\n                            }]\n                            .concat(v2\n                            ? v2plublished\n                                ? [\n                                    { name: \"embedcode\", route: playerListRoute.concat([\"\" + player.id, __WEBPACK_IMPORTED_MODULE_3__module_player_model_player_model__[\"a\" /* PlayerRoute */].embedcode]) }\n                                ]\n                                : []\n                            : v1plublished\n                                ? [\n                                    { name: \"embedcode\", route: playerListRoute.concat([\"\" + player.id, __WEBPACK_IMPORTED_MODULE_3__module_player_model_player_model__[\"a\" /* PlayerRoute */].embeder]) },\n                                    { name: \"history\", route: playerListRoute.concat([\"\" + player.id, __WEBPACK_IMPORTED_MODULE_3__module_player_model_player_model__[\"a\" /* PlayerRoute */].versions]) },\n                                ]\n                                : [])\n                        : []\n                };\n                data.items[2].data.push(item);\n            });\n        }\n        data.renderAt = Date.now();\n        this.playersMenuData = data;\n        this.open(this.playersMenuData);\n    };\n    SidebarService.prototype.update = function () {\n        this.updateSubject.next();\n    };\n    SidebarService.prototype.open = function (data) {\n        var isPlayerConfigurator = data && data.items && (data.items.length > 0) &&\n            data.items[0] && data.items[0].route && (data.items[0].route.length > 1) &&\n            (data.items[0].route[0] == 'admin') && (data.items[0].route[1] == 'player');\n        if (isPlayerConfigurator || !this.viewService.checkIfAppInIframe()) {\n            this.isOpen = true;\n            this.openSubject.next(data);\n        }\n        else {\n            this.isOpen = false;\n            this.closeSubject.next();\n        }\n    };\n    SidebarService.prototype.close = function () {\n        this.isOpen = false;\n        this.closeSubject.next();\n    };\n    var _a;\n    SidebarService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_4__view_service__[\"a\" /* ViewService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_4__view_service__[\"a\" /* ViewService */]) === \"function\" && _a || Object])\n    ], SidebarService);\n    return SidebarService;\n}());\n\n\n\n/***/ }),\n\n/***/ 41:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return BradmaxApi; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_http__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__auth_service__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__exception_service__ = __webpack_require__(35);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__url_service__ = __webpack_require__(18);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_catch__ = __webpack_require__(258);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_catch___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_rxjs_add_operator_catch__);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar BradmaxApi = (function () {\n    function BradmaxApi(auth, http, exception, router, urlService) {\n        this.auth = auth;\n        this.http = http;\n        this.exception = exception;\n        this.router = router;\n        this.urlService = urlService;\n    }\n    BradmaxApi.prototype.create = function (url, body) {\n        var _this = this;\n        body = body == null ? null : JSON.stringify(body);\n        return this.http\n            .post(this.formatUrl(url), body, this.options(body))\n            .map(function (res) { return _this.response(res); })\n            .catch(function (e) { return _this.handleError(e); });\n    };\n    BradmaxApi.prototype.update = function (url, body) {\n        var _this = this;\n        body = body == null ? null : JSON.stringify(body);\n        return this.http\n            .put(this.formatUrl(url), body, this.options(body))\n            .map(function (res) { return _this.response(res); })\n            .catch(function (e) { return _this.handleError(e); });\n    };\n    BradmaxApi.prototype.read = function (url, data) {\n        var _this = this;\n        var params = [];\n        if (data != null)\n            for (var key in data)\n                params.push(key + '=' + data[key]);\n        var address = null;\n        if (params.length == 0) {\n            address = this.formatUrl(url);\n        }\n        else if (url.indexOf('?') != -1) {\n            var parts = url.split('?');\n            var urlWithoutQuery = parts[0];\n            var paramsFromQuery = (parts[1] != '') ? parts[1].split('&') : [];\n            var concatParams = paramsFromQuery.concat(params);\n            address = this.formatUrl(urlWithoutQuery + (concatParams.length > 0 ? '?' + concatParams.join('&') : ''));\n        }\n        else {\n            address = this.formatUrl(url + '?' + params.join('&'));\n        }\n        return this.http.get(address, this.options())\n            .map(function (res) { return _this.response(res); })\n            .catch(function (e) { return _this.handleError(e); });\n    };\n    BradmaxApi.prototype.delete = function (url) {\n        var _this = this;\n        return this.http\n            .delete(this.formatUrl(url), this.options())\n            .map(function (res) { return _this.response(res); })\n            .catch(function (e) { return _this.handleError(e); });\n    };\n    BradmaxApi.prototype.formatUrl = function (url) {\n        return this.urlService.api(url);\n    };\n    BradmaxApi.prototype.response = function (response) {\n        var r;\n        try {\n            r = response.json();\n        }\n        catch (e) {\n            try {\n                r = response.text();\n            }\n            catch (e) {\n                console.warn('response UNKNOWN FORMAT', response);\n                r = response;\n            }\n        }\n        return r;\n    };\n    BradmaxApi.prototype.options = function (body, contentType) {\n        if (body === void 0) { body = ''; }\n        if (contentType === void 0) { contentType = 'application/json'; }\n        var o = { body: body, headers: new __WEBPACK_IMPORTED_MODULE_3__angular_http__[\"a\" /* Headers */]() };\n        o.headers.append('Accept', contentType);\n        o.headers.append('Content-Type', contentType);\n        o.headers.append('AccessToken', this.auth && this.auth.token ? this.auth.token : '');\n        return o;\n    };\n    BradmaxApi.prototype.handleError = function (error) {\n        if (error.status == 403) {\n            this.auth.redirectUrl = this.router.url;\n            console.warn('navigate to login page and back to : ' + this.auth.redirectUrl);\n            this.router.navigate(['login']);\n        }\n        var parsedError;\n        try {\n            parsedError = error.json();\n        }\n        catch (e) {\n            parsedError = error;\n        }\n        return __WEBPACK_IMPORTED_MODULE_2_rxjs_Observable__[\"Observable\"].throw(parsedError);\n    };\n    var _a, _b, _c, _d, _e;\n    BradmaxApi = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_4__auth_service__[\"a\" /* AuthService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_4__auth_service__[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_3__angular_http__[\"b\" /* Http */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_3__angular_http__[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_5__exception_service__[\"a\" /* ExceptionService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_5__exception_service__[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"g\" /* Router */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_router__[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_6__url_service__[\"a\" /* UrlService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__url_service__[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], BradmaxApi);\n    return BradmaxApi;\n}());\n\n\n\n/***/ }),\n\n/***/ 45:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(1342));\n//# sourceMappingURL=index.js.map\n\n/***/ }),\n\n/***/ 46:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return ProductService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__api_service__ = __webpack_require__(41);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__auth_service__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__exception_service__ = __webpack_require__(35);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__url_service__ = __webpack_require__(18);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar ProductService = (function (_super) {\n    __extends(ProductService, _super);\n    function ProductService(auth, http, exception, router, url) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.url = url;\n        return _this;\n    }\n    ProductService.prototype.getProducts = function () {\n        return _super.prototype.read.call(this, 'products');\n    };\n    ProductService.prototype.getProductsForAccount = function (accountId, lastUsageStats) {\n        if (lastUsageStats && lastUsageStats > 0) {\n            return _super.prototype.read.call(this, 'accounts/' + accountId + '/products?last-usage-stats=' + lastUsageStats);\n        }\n        else {\n            return _super.prototype.read.call(this, 'accounts/' + accountId + '/products');\n        }\n    };\n    ProductService.prototype.updateProductPlanPaymentMethod = function (accountId, productPlanId, paymentMethodNonce) {\n        var body = { client_plan_id: productPlanId, bt_pm_nonce: paymentMethodNonce };\n        return _super.prototype.update.call(this, 'accounts/' + accountId + '/subscription', body);\n    };\n    var _a, _b, _c, _d, _e;\n    ProductService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_4__auth_service__[\"a\" /* AuthService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_4__auth_service__[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_5__exception_service__[\"a\" /* ExceptionService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_5__exception_service__[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_6__url_service__[\"a\" /* UrlService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__url_service__[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], ProductService);\n    return ProductService;\n}(__WEBPACK_IMPORTED_MODULE_3__api_service__[\"a\" /* BradmaxApi */]));\n\n\n\n/***/ }),\n\n/***/ 55:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return DOMUtil; });\nvar DOMUtil = (function () {\n    function DOMUtil() {\n    }\n    DOMUtil.isDescendant = function (parent, child) {\n        var node = child;\n        while (node != null) {\n            if (node === parent) {\n                return true;\n            }\n            else {\n                node = node.parentNode;\n            }\n        }\n        return false;\n    };\n    DOMUtil.stopPropagation = function (event) {\n        if (event != null) {\n            if (!event.defaultPrevented)\n                event.preventDefault();\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n        }\n    };\n    return DOMUtil;\n}());\n\n\n\n/***/ }),\n\n/***/ 6:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return UserService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_BehaviorSubject__ = __webpack_require__(124);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_BehaviorSubject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_BehaviorSubject__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_Subject__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_rxjs_Subject__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__api_service__ = __webpack_require__(41);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__auth_service__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__exception_service__ = __webpack_require__(35);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__url_service__ = __webpack_require__(18);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_moment__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_moment___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_9_moment__);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\nvar UserService = (function (_super) {\n    __extends(UserService, _super);\n    function UserService(router, auth, http, exception, url) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.router = router;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.url = url;\n        _this.userDataChanged = new __WEBPACK_IMPORTED_MODULE_3_rxjs_BehaviorSubject__[\"BehaviorSubject\"](false);\n        var endDate = __WEBPACK_IMPORTED_MODULE_9_moment___default()().startOf('day');\n        var startDate = endDate.clone().subtract(30, 'days');\n        _this.dateRangeSelection = {\n            startDateTs: startDate.unix(),\n            endDateTs: endDate.unix()\n        };\n        return _this;\n    }\n    UserService.prototype.get = function () {\n        var _this = this;\n        this.resolveSource = new __WEBPACK_IMPORTED_MODULE_4_rxjs_Subject__[\"Subject\"]();\n        _super.prototype.read.call(this, 'user').subscribe(function (response) {\n            _this.mapUserResponseToUser(response);\n            _this.notifyUserDataChanged();\n            _this.resolveSource.next(response);\n        }, function (error) { return _this.resolveSource.error(error); }, function () { return _this.resolveSource.complete(); });\n        return this.resolveSource.asObservable();\n    };\n    UserService.prototype.refresh = function () {\n        var _this = this;\n        _super.prototype.read.call(this, 'user').subscribe(function (response) { return _this.mapUserResponseToUser(response); }, function (error) { return _this.resolveSource.error(error); }, function () { return _this.notifyUserDataChanged(); });\n    };\n    UserService.prototype.updateUser = function (data) {\n        var _this = this;\n        this.resolveSource = new __WEBPACK_IMPORTED_MODULE_4_rxjs_Subject__[\"Subject\"]();\n        _super.prototype.update.call(this, 'user', data).subscribe(function (response) {\n            _this.mapUserResponseToUser(response);\n            _this.notifyUserDataChanged();\n            _this.resolveSource.next(response);\n        }, function (error) { return _this.resolveSource.error(error); }, function () { return _this.resolveSource.complete(); });\n        return this.resolveSource.asObservable();\n    };\n    UserService.prototype.clear = function () {\n        this.email = null;\n        this.firstName = null;\n        this.lastName = null;\n        this.accountId = null;\n        this.accountCreatedAtTs = null;\n        this.company = null;\n        this.products = null;\n        this.statsModules = null;\n        this.statsModulesByKeys = null;\n        this.notifyUserDataChanged();\n    };\n    UserService.prototype.hasAdsSupport = function () {\n        if (this.products == null || this.products.length < 1)\n            return false;\n        return this.products[0].has_ads_support;\n    };\n    UserService.prototype.mapUserResponseToUser = function (userResponse) {\n        this.accountId = userResponse.default_account.id;\n        this.accountCreatedAtTs = userResponse.default_account.created_at;\n        this.email = userResponse.email;\n        this.firstName = userResponse.first_name;\n        this.lastName = userResponse.last_name;\n        this.company = userResponse.company_name_cache;\n        this.products = userResponse.default_account.products;\n        this.statsModules = userResponse.default_account.stats_modules;\n        this.hasGdprInfoShown = userResponse.has_gdpr_info_shown;\n        this.hasAgreeForNewsletter = userResponse.has_agree_for_newsletter;\n        if (this.statsModules) {\n            this.statsModulesByKeys = {};\n            for (var _i = 0, _a = this.statsModules; _i < _a.length; _i++) {\n                var k = _a[_i];\n                this.statsModulesByKeys[k] = true;\n            }\n        }\n    };\n    UserService.prototype.notifyUserDataChanged = function () {\n        this.userDataChanged.next(true);\n    };\n    UserService.prototype.getDateRangeSelection = function () {\n        return { startDate: __WEBPACK_IMPORTED_MODULE_9_moment___default.a.unix(this.dateRangeSelection.startDateTs), endDate: __WEBPACK_IMPORTED_MODULE_9_moment___default.a.unix(this.dateRangeSelection.endDateTs) };\n    };\n    UserService.prototype.setDateRangeSelection = function (startDate, endDate) {\n        this.dateRangeSelection.startDateTs = startDate.unix();\n        this.dateRangeSelection.endDateTs = endDate.unix();\n    };\n    UserService.prototype.getUnixDateRangeSelection = function () {\n        return { startDate: this.dateRangeSelection.startDateTs, endDate: this.dateRangeSelection.endDateTs };\n    };\n    UserService.prototype.setUnixDateRangeSelection = function (startDate, endDate) {\n        this.dateRangeSelection.startDateTs = startDate;\n        this.dateRangeSelection.endDateTs = endDate;\n    };\n    UserService.prototype.isEngagementRateEnabled = function () {\n        if (!this.statsModulesByKeys) {\n            return false;\n        }\n        return ('engagement' in this.statsModulesByKeys);\n    };\n    UserService.prototype.areTechStatsEnabled = function () {\n        if (!this.statsModulesByKeys) {\n            return false;\n        }\n        return ('tech' in this.statsModulesByKeys);\n    };\n    UserService.prototype.areMediaStatsEnabled = function () {\n        if (!this.statsModulesByKeys) {\n            return false;\n        }\n        return ('media' in this.statsModulesByKeys);\n    };\n    UserService.prototype.areAdsStatsEnabled = function () {\n        if (!this.statsModulesByKeys) {\n            return false;\n        }\n        return ('ads' in this.statsModulesByKeys);\n    };\n    UserService.prototype.areGeoStatsEnabled = function () {\n        if (!this.statsModulesByKeys) {\n            return false;\n        }\n        return ('geo' in this.statsModulesByKeys);\n    };\n    var _a, _b, _c, _d, _e;\n    UserService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_6__auth_service__[\"a\" /* AuthService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__auth_service__[\"a\" /* AuthService */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_7__exception_service__[\"a\" /* ExceptionService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_7__exception_service__[\"a\" /* ExceptionService */]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_8__url_service__[\"a\" /* UrlService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_8__url_service__[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], UserService);\n    return UserService;\n}(__WEBPACK_IMPORTED_MODULE_5__api_service__[\"a\" /* BradmaxApi */]));\n\n\n\n/***/ }),\n\n/***/ 63:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return PaymentsService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__auth_service__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__exception_service__ = __webpack_require__(35);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__api_service__ = __webpack_require__(41);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__url_service__ = __webpack_require__(18);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar PaymentsService = (function (_super) {\n    __extends(PaymentsService, _super);\n    function PaymentsService(auth, http, exception, router, url) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.url = url;\n        return _this;\n    }\n    PaymentsService.prototype.getPaymentTransactions = function (accountId) {\n        return _super.prototype.read.call(this, 'accounts/' + accountId + '/payment-transactions');\n    };\n    PaymentsService.prototype.getPaymentMethods = function (accountId) {\n        return _super.prototype.read.call(this, 'accounts/' + accountId + '/payment-methods');\n    };\n    PaymentsService.prototype.updateInvoice = function (accountId, invoice) {\n        return _super.prototype.update.call(this, 'accounts/' + accountId + '/invoices/' + invoice.id, invoice);\n    };\n    PaymentsService.prototype.updatePaymentMethod = function (accountId, body) {\n        return _super.prototype.update.call(this, 'accounts/' + accountId + '/payment-methods', body);\n    };\n    PaymentsService.prototype.deletePaymentMethod = function (accountId, paymentToken) {\n        return _super.prototype.delete.call(this, 'accounts/' + accountId + '/payment-methods/' + paymentToken);\n    };\n    PaymentsService.prototype.getBraintreeClientToken = function (accountId) {\n        return _super.prototype.read.call(this, 'accounts/' + accountId + '/bt-client-token');\n    };\n    var _a, _b, _c, _d, _e;\n    PaymentsService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_3__auth_service__[\"a\" /* AuthService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_3__auth_service__[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_4__exception_service__[\"a\" /* ExceptionService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_4__exception_service__[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_6__url_service__[\"a\" /* UrlService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__url_service__[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], PaymentsService);\n    return PaymentsService;\n}(__WEBPACK_IMPORTED_MODULE_5__api_service__[\"a\" /* BradmaxApi */]));\n\n\n\n/***/ }),\n\n/***/ 64:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return SubscriptionService; });\n/* unused harmony export SubscriptionStatuses */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__auth_service__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__exception_service__ = __webpack_require__(35);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__api_service__ = __webpack_require__(41);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__url_service__ = __webpack_require__(18);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\nvar SubscriptionService = (function (_super) {\n    __extends(SubscriptionService, _super);\n    function SubscriptionService(auth, http, exception, router, url) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.url = url;\n        return _this;\n    }\n    SubscriptionService.prototype.getSubscriptionOrders = function (accountId) {\n        return _super.prototype.read.call(this, 'accounts/' + accountId + '/subscription-orders');\n    };\n    SubscriptionService.prototype.getSubscriptionOrder = function (accountId, subscriptionOrderId) {\n        return _super.prototype.read.call(this, 'accounts/' + accountId + '/subscription-orders/' + subscriptionOrderId);\n    };\n    SubscriptionService.prototype.createSubscriptionOrder = function (accountId, planId) {\n        var body = { product_plan: planId };\n        return _super.prototype.create.call(this, 'accounts/' + accountId + '/subscription-orders', body);\n    };\n    SubscriptionService.prototype.finishSubscriptionOrder = function (accountId, subscriptionOrderId, body) {\n        return _super.prototype.update.call(this, 'accounts/' + accountId + '/subscription-orders/' + subscriptionOrderId, body);\n    };\n    SubscriptionService.prototype.cancelSubscriptionOrder = function (accountId, subscriptionOrderId) {\n        var body = { cancel: true };\n        return _super.prototype.update.call(this, 'accounts/' + accountId + '/subscription-orders/' + subscriptionOrderId, body);\n    };\n    var _a, _b, _c, _d, _e;\n    SubscriptionService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_3__auth_service__[\"a\" /* AuthService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_3__auth_service__[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_4__exception_service__[\"a\" /* ExceptionService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_4__exception_service__[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_6__url_service__[\"a\" /* UrlService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__url_service__[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], SubscriptionService);\n    return SubscriptionService;\n}(__WEBPACK_IMPORTED_MODULE_5__api_service__[\"a\" /* BradmaxApi */]));\n\nvar SubscriptionStatuses;\n(function (SubscriptionStatuses) {\n    SubscriptionStatuses[SubscriptionStatuses[\"Init\"] = 0] = \"Init\";\n    SubscriptionStatuses[SubscriptionStatuses[\"Waiting for acceptance\"] = 10] = \"Waiting for acceptance\";\n    SubscriptionStatuses[SubscriptionStatuses[\"Creating subscription\"] = 20] = \"Creating subscription\";\n    SubscriptionStatuses[SubscriptionStatuses[\"Finalized\"] = 30] = \"Finalized\";\n    SubscriptionStatuses[SubscriptionStatuses[\"Fail\"] = 40] = \"Fail\";\n    SubscriptionStatuses[SubscriptionStatuses[\"Rejected by user\"] = 41] = \"Rejected by user\";\n    SubscriptionStatuses[SubscriptionStatuses[\"Error from Braintree\"] = 42] = \"Error from Braintree\";\n    SubscriptionStatuses[SubscriptionStatuses[\"Operation timeout\"] = 43] = \"Operation timeout\";\n})(SubscriptionStatuses || (SubscriptionStatuses = {}));\n\n\n/***/ }),\n\n/***/ 65:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AccountService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_router__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_Subject__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_Subject__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__api_service__ = __webpack_require__(41);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__auth_service__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__exception_service__ = __webpack_require__(35);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__url_service__ = __webpack_require__(18);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\nvar AccountService = (function (_super) {\n    __extends(AccountService, _super);\n    function AccountService(auth, http, exception, router, url) {\n        var _this = _super.call(this, auth, http, exception, router, url) || this;\n        _this.auth = auth;\n        _this.http = http;\n        _this.exception = exception;\n        _this.router = router;\n        _this.url = url;\n        return _this;\n    }\n    AccountService.prototype.get = function (accountId) {\n        var _this = this;\n        this.resolveSource = new __WEBPACK_IMPORTED_MODULE_3_rxjs_Subject__[\"Subject\"]();\n        _super.prototype.read.call(this, 'accounts/' + accountId).subscribe(function (response) {\n            _this.account = response;\n            _this.resolveSource.next(response);\n        }, function (error) { return _this.resolveSource.error(error); }, function () { return _this.resolveSource.complete(); });\n        return this.resolveSource.asObservable();\n    };\n    AccountService.prototype.updateAccount = function (accountId, accountDetails) {\n        var _this = this;\n        this.resolveSource = new __WEBPACK_IMPORTED_MODULE_3_rxjs_Subject__[\"Subject\"]();\n        _super.prototype.update.call(this, 'accounts/' + accountId + '/details', accountDetails)\n            .subscribe(function (response) {\n            if (_this.account != null)\n                _this.account.details = response;\n            _this.resolveSource.next(response);\n        }, function (error) { return _this.resolveSource.error(error); }, function () { return _this.resolveSource.complete(); });\n        return this.resolveSource.asObservable();\n    };\n    AccountService.prototype.clear = function () {\n        this.account = null;\n    };\n    AccountService.prototype.isAccountDetailsValidForPayments = function () {\n        if (this.account && this.account.details && this.account.details.company_name)\n            return true;\n        return false;\n    };\n    Object.defineProperty(AccountService.prototype, \"companyName\", {\n        get: function () {\n            if (this.account.details && this.account.details.company_name)\n                return this.account.details.company_name;\n            else if (this.account.owner && this.account.owner.company_name_cache)\n                return this.account.owner.company_name_cache;\n            return null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    var _a, _b, _c, _d, _e;\n    AccountService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_5__auth_service__[\"a\" /* AuthService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_5__auth_service__[\"a\" /* AuthService */]) === \"function\" && _a || Object, typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_1__angular_http__[\"b\" /* Http */]) === \"function\" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_6__exception_service__[\"a\" /* ExceptionService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_6__exception_service__[\"a\" /* ExceptionService */]) === \"function\" && _c || Object, typeof (_d = typeof __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_2__angular_router__[\"g\" /* Router */]) === \"function\" && _d || Object, typeof (_e = typeof __WEBPACK_IMPORTED_MODULE_7__url_service__[\"a\" /* UrlService */] !== \"undefined\" && __WEBPACK_IMPORTED_MODULE_7__url_service__[\"a\" /* UrlService */]) === \"function\" && _e || Object])\n    ], AccountService);\n    return AccountService;\n}(__WEBPACK_IMPORTED_MODULE_4__api_service__[\"a\" /* BradmaxApi */]));\n\n\n\n/***/ }),\n\n/***/ 71:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AbstractModalComponent; });\nvar AbstractModalComponent = (function () {\n    function AbstractModalComponent() {\n    }\n    return AbstractModalComponent;\n}());\n\n\n\n/***/ }),\n\n/***/ 72:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return PlayerRoute; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return PlayerRouteParam; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return PlayerRouteData; });\nvar PlayerRoute;\n(function (PlayerRoute) {\n    PlayerRoute[\"list\"] = \"list\";\n    PlayerRoute[\"builder\"] = \"builder\";\n    PlayerRoute[\"embedcode\"] = \"embedcode\";\n    PlayerRoute[\"configurator\"] = \"configurator\";\n    PlayerRoute[\"embeder\"] = \"embed-code\";\n    PlayerRoute[\"versions\"] = \"versions\";\n})(PlayerRoute || (PlayerRoute = {}));\nvar PlayerRouteParam;\n(function (PlayerRouteParam) {\n    PlayerRouteParam[\"id\"] = \"id\";\n})(PlayerRouteParam || (PlayerRouteParam = {}));\nvar PlayerRouteData;\n(function (PlayerRouteData) {\n    PlayerRouteData[\"playersList\"] = \"playersList\";\n})(PlayerRouteData || (PlayerRouteData = {}));\n\n\n/***/ }),\n\n/***/ 73:\n/***/ (function(module, exports) {\n\nmodule.exports = \":host {\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1;\\n          flex: 1;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  -webkit-box-pack: start;\\n      -ms-flex-pack: start;\\n          justify-content: flex-start;\\n  -webkit-box-align: start;\\n      -ms-flex-align: start;\\n          align-items: flex-start;\\n  -ms-flex-line-pack: start;\\n      align-content: flex-start;\\n  padding-bottom: 48px; }\\n  :host .form-alert, :host .form-group {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    margin: 0.5rem; }\\n  :host .form-alert, :host .form-group {\\n    width: 300px;\\n    min-width: 300px;\\n    max-width: 300px;\\n    min-height: 105px; }\\n  :host .form-group.disabled /deep/.form-label {\\n    pointer-events: none;\\n    cursor: not-allowed;\\n    opacity: 0.5; }\\n  :host .form-group .form-alert {\\n    margin: 0.5rem 0;\\n    width: unset;\\n    min-width: unset;\\n    max-width: calc(300px - (0.5rem + 2px + (8px * 2))); }\\n  :host .form-alert .alert {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 0 100%;\\n            flex: 1 0 100%;\\n    border-radius: 6px;\\n    border: 2px solid #f8f8f8;\\n    margin: 0; }\\n  :host .form-alert.inject-font-info {\\n    font-size: 0.9em; }\\n  :host .form-alert.inject-font-info .alert {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column;\\n      width: 100%; }\\n  :host .form-alert.inject-font-info .alert .code-example {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: vertical;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: column;\\n                flex-direction: column;\\n        border-radius: inherit; }\\n  :host .form-alert.inject-font-info .alert .code-example-text {\\n          resize: vertical;\\n          line-break: anywhere;\\n          background-color: white;\\n          border-radius: inherit;\\n          margin: 0.5em 0;\\n          font-size: 0.8em; }\\n  :host .form-alert.inject-font-info .alert .code-example-copy {\\n          -webkit-box-flex: 0;\\n              -ms-flex: 0;\\n                  flex: 0;\\n          -ms-flex-item-align: end;\\n              align-self: end;\\n          color: inherit;\\n          cursor: pointer; }\\n  :host .form-group {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 0 300px;\\n            flex: 1 0 300px;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    -webkit-box-pack: space-evenly;\\n        -ms-flex-pack: space-evenly;\\n            justify-content: space-evenly;\\n    border-radius: 6px;\\n    padding: 8px;\\n    border: 2px solid #f8f8f8; }\\n  :host .form-group /deep/.form-label {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      -webkit-box-align: baseline;\\n          -ms-flex-align: baseline;\\n              align-items: baseline;\\n      -webkit-box-pack: justify;\\n          -ms-flex-pack: justify;\\n              justify-content: space-between;\\n      width: 100%; }\\n  :host .form-group /deep/.form-label.with-icon {\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center; }\\n  :host .form-group /deep/.form-label.with-icon > label {\\n          display: -webkit-box;\\n          display: -ms-flexbox;\\n          display: flex;\\n          -webkit-box-align: center;\\n              -ms-flex-align: center;\\n                  align-items: center; }\\n  :host .form-group /deep/.form-label-switch {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex; }\\n  :host .form-group /deep/.form-label-switch .switch-label {\\n          font-size: x-small; }\\n  :host .form-group /deep/.form-row {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      max-width: inherit; }\\n  :host .form-group /deep/.form-fields {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column;\\n      max-width: inherit;\\n      width: 100%; }\\n  :host .form-group /deep/.form-fields rangeslider > p {\\n        margin: 0; }\\n  :host .form-group /deep/.form-fields .rangeslider-values {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: justify;\\n            -ms-flex-pack: justify;\\n                justify-content: space-between; }\\n  :host .form-group.full-w {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1 0 calc(100% - ((0.5rem + 2px) * 2));\\n              flex: 1 0 calc(100% - ((0.5rem + 2px) * 2));\\n      min-width: calc(100% - ((0.5rem + 2px) * 2));\\n      max-width: calc(100% - ((0.5rem + 2px) * 2)); }\\n  :host .form-group.screenshots .form-fields {\\n      -ms-flex-wrap: wrap;\\n          flex-wrap: wrap;\\n      -webkit-box-orient: horizontal !important;\\n      -webkit-box-direction: normal !important;\\n          -ms-flex-direction: row !important;\\n              flex-direction: row !important; }\\n  :host .form-group.screenshots .form-fields .screenshot {\\n        -webkit-box-flex: 0;\\n            -ms-flex: 0 1 150px;\\n                flex: 0 1 150px;\\n        position: relative;\\n        color: white;\\n        padding: 4px; }\\n  :host .form-group.screenshots .form-fields .screenshot-img {\\n          border-radius: 6px;\\n          opacity: 0.75; }\\n  :host .form-group.screenshots .form-fields .screenshot-info {\\n          font-weight: 200;\\n          position: absolute;\\n          top: 4px;\\n          right: 4px;\\n          bottom: 4px;\\n          left: 4px;\\n          -webkit-box-flex: 1;\\n              -ms-flex: 1;\\n                  flex: 1;\\n          display: -webkit-box;\\n          display: -ms-flexbox;\\n          display: flex;\\n          -webkit-box-orient: vertical;\\n          -webkit-box-direction: normal;\\n              -ms-flex-direction: column;\\n                  flex-direction: column;\\n          -webkit-box-pack: justify;\\n              -ms-flex-pack: justify;\\n                  justify-content: space-between; }\\n  :host .form-group.screenshots .form-fields .screenshot-info span {\\n            position: absolute;\\n            font-size: 14px;\\n            text-shadow: 1px 1px black;\\n            top: 2px;\\n            left: 6px; }\\n  :host .form-group.screenshots .form-fields .screenshot-info span small {\\n              display: -webkit-box;\\n              display: -ms-flexbox;\\n              display: flex;\\n              -webkit-box-align: center;\\n                  -ms-flex-align: center;\\n                      align-items: center;\\n              font-weight: 200;\\n              font-size: 0.7em; }\\n  :host .form-group.screenshots .form-fields .screenshot-info i {\\n            position: absolute;\\n            top: 6px;\\n            right: 4px; }\\n  :host .form-group.screenshots .form-fields .screenshot.active {\\n          background-color: #FAD600; }\\n  :host .form-group.screenshots .form-fields .screenshot.active i {\\n            opacity: 1; }\\n  :host .form-group.screenshots .form-fields .screenshot.active .screenshot-img {\\n            opacity: 1; }\\n  :host .form-group.screenshots .form-fields .screenshot[disabled] {\\n          opacity: 0.64; }\\n  :host .form-group .icon-sample {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -ms-flex-wrap: wrap;\\n          flex-wrap: wrap;\\n      -webkit-box-pack: start;\\n          -ms-flex-pack: start;\\n              justify-content: flex-start;\\n      -webkit-box-align: start;\\n          -ms-flex-align: start;\\n              align-items: flex-start;\\n      padding: 4px; }\\n  :host .form-group .icon-sample-icon {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: horizontal;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: row;\\n                flex-direction: row;\\n        -ms-flex-wrap: nowrap;\\n            flex-wrap: nowrap;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: center;\\n            -ms-flex-pack: center;\\n                justify-content: center;\\n        min-height: 32px;\\n        max-height: 32px;\\n        line-height: 32px;\\n        border: 1px solid rgba(0, 0, 0, 0.14);\\n        border-radius: 6px;\\n        padding: 3px;\\n        margin: 1px; }\\n  :host .form-group .icon-sample-icon {\\n        position: relative;\\n        min-width: 32px;\\n        max-width: 32px;\\n        opacity: 0.8;\\n        overflow: hidden; }\\n  :host .form-group .icon-sample-icon:hover {\\n          opacity: 1; }\\n  :host .form-group .icon-sample-icon svg {\\n          pointer-events: none;\\n          width: 100%;\\n          height: 100%; }\\n\"\n\n/***/ }),\n\n/***/ 9:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AbstractControlDirective\", function() { return AbstractControlDirective; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AbstractFormGroupDirective\", function() { return AbstractFormGroupDirective; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CheckboxControlValueAccessor\", function() { return CheckboxControlValueAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ControlContainer\", function() { return ControlContainer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NG_VALUE_ACCESSOR\", function() { return NG_VALUE_ACCESSOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"COMPOSITION_BUFFER_MODE\", function() { return COMPOSITION_BUFFER_MODE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DefaultValueAccessor\", function() { return DefaultValueAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgControl\", function() { return NgControl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgControlStatus\", function() { return NgControlStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgControlStatusGroup\", function() { return NgControlStatusGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgForm\", function() { return NgForm; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgModel\", function() { return NgModel; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgModelGroup\", function() { return NgModelGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RadioControlValueAccessor\", function() { return RadioControlValueAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormControlDirective\", function() { return FormControlDirective; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormControlName\", function() { return FormControlName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupDirective\", function() { return FormGroupDirective; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormArrayName\", function() { return FormArrayName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupName\", function() { return FormGroupName; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NgSelectOption\", function() { return NgSelectOption; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SelectControlValueAccessor\", function() { return SelectControlValueAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SelectMultipleControlValueAccessor\", function() { return SelectMultipleControlValueAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CheckboxRequiredValidator\", function() { return CheckboxRequiredValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"EmailValidator\", function() { return EmailValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MaxLengthValidator\", function() { return MaxLengthValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"MinLengthValidator\", function() { return MinLengthValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"PatternValidator\", function() { return PatternValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"RequiredValidator\", function() { return RequiredValidator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormBuilder\", function() { return FormBuilder; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AbstractControl\", function() { return AbstractControl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormArray\", function() { return FormArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormControl\", function() { return FormControl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroup\", function() { return FormGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NG_ASYNC_VALIDATORS\", function() { return NG_ASYNC_VALIDATORS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NG_VALIDATORS\", function() { return NG_VALIDATORS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Validators\", function() { return Validators; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"VERSION\", function() { return VERSION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormsModule\", function() { return FormsModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ReactiveFormsModule\", function() { return ReactiveFormsModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵba\", function() { return InternalFormsSharedModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵz\", function() { return REACTIVE_DRIVEN_DIRECTIVES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵx\", function() { return SHARED_FORM_DIRECTIVES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵy\", function() { return TEMPLATE_DRIVEN_DIRECTIVES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵa\", function() { return CHECKBOX_VALUE_ACCESSOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵb\", function() { return DEFAULT_VALUE_ACCESSOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵc\", function() { return AbstractControlStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵd\", function() { return ngControlStatusHost; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵe\", function() { return formDirectiveProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵf\", function() { return formControlBinding; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵg\", function() { return modelGroupProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵbf\", function() { return NgNoValidate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵbb\", function() { return NUMBER_VALUE_ACCESSOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵbc\", function() { return NumberValueAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵh\", function() { return RADIO_VALUE_ACCESSOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵi\", function() { return RadioControlRegistry; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵbd\", function() { return RANGE_VALUE_ACCESSOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵbe\", function() { return RangeValueAccessor; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵj\", function() { return formControlBinding$1; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵk\", function() { return controlNameBinding; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵl\", function() { return formDirectiveProvider$1; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵn\", function() { return formArrayNameProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵm\", function() { return formGroupNameProvider; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵo\", function() { return SELECT_VALUE_ACCESSOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵq\", function() { return NgSelectMultipleOption; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵp\", function() { return SELECT_MULTIPLE_VALUE_ACCESSOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵs\", function() { return CHECKBOX_REQUIRED_VALIDATOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵt\", function() { return EMAIL_VALIDATOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵv\", function() { return MAX_LENGTH_VALIDATOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵu\", function() { return MIN_LENGTH_VALIDATOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵw\", function() { return PATTERN_VALIDATOR; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵr\", function() { return REQUIRED_VALIDATOR; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_tslib__ = __webpack_require__(52);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__ = __webpack_require__(89);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__ = __webpack_require__(167);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__ = __webpack_require__(162);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__ = __webpack_require__(23);\n\n/**\n * @license Angular v4.4.7\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\n\n\n\n\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 * Base class for control directives.\n *\n * Only used internally in the forms module.\n *\n * \\@stable\n * @abstract\n */\nvar AbstractControlDirective = (function () {\n    function AbstractControlDirective() {\n    }\n    /**\n     * The {\\@link FormControl}, {\\@link FormGroup}, or {\\@link FormArray}\n     * that backs this directive. Most properties fall through to that\n     * instance.\n     * @abstract\n     * @return {?}\n     */\n    AbstractControlDirective.prototype.control = function () { };\n    Object.defineProperty(AbstractControlDirective.prototype, \"value\", {\n        /**\n         * The value of the control.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.value : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"valid\", {\n        /**\n         * A control is `valid` when its `status === VALID`.\n         *\n         * In order to have this status, the control must have passed all its\n         * validation checks.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.valid : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"invalid\", {\n        /**\n         * A control is `invalid` when its `status === INVALID`.\n         *\n         * In order to have this status, the control must have failed\n         * at least one of its validation checks.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.invalid : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"pending\", {\n        /**\n         * A control is `pending` when its `status === PENDING`.\n         *\n         * In order to have this status, the control must be in the\n         * middle of conducting a validation check.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.pending : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"disabled\", {\n        /**\n         * A control is `disabled` when its `status === DISABLED`.\n         *\n         * Disabled controls are exempt from validation checks and\n         * are not included in the aggregate value of their ancestor\n         * controls.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.disabled : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"enabled\", {\n        /**\n         * A control is `enabled` as long as its `status !== DISABLED`.\n         *\n         * In other words, it has a status of `VALID`, `INVALID`, or\n         * `PENDING`.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.enabled : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"errors\", {\n        /**\n         * Returns any errors generated by failing validation. If there\n         * are no errors, it will return null.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.errors : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"pristine\", {\n        /**\n         * A control is `pristine` if the user has not yet changed\n         * the value in the UI.\n         *\n         * Note that programmatic changes to a control's value will\n         * *not* mark it dirty.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.pristine : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"dirty\", {\n        /**\n         * A control is `dirty` if the user has changed the value\n         * in the UI.\n         *\n         * Note that programmatic changes to a control's value will\n         * *not* mark it dirty.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.dirty : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"touched\", {\n        /**\n         * A control is marked `touched` once the user has triggered\n         * a `blur` event on it.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.touched : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"untouched\", {\n        /**\n         * A control is `untouched` if the user has not yet triggered\n         * a `blur` event on it.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.untouched : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"statusChanges\", {\n        /**\n         * Emits an event every time the validation status of the control\n         * is re-calculated.\n         * @return {?}\n         */\n        get: function () {\n            return this.control ? this.control.statusChanges : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"valueChanges\", {\n        /**\n         * Emits an event every time the value of the control changes, in\n         * the UI or programmatically.\n         * @return {?}\n         */\n        get: function () {\n            return this.control ? this.control.valueChanges : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"path\", {\n        /**\n         * Returns an array that represents the path from the top-level form\n         * to this control. Each index is the string name of the control on\n         * that level.\n         * @return {?}\n         */\n        get: function () { return null; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Resets the form control. This means by default:\n     *\n     * * it is marked as `pristine`\n     * * it is marked as `untouched`\n     * * value is set to null\n     *\n     * For more information, see {\\@link AbstractControl}.\n     * @param {?=} value\n     * @return {?}\n     */\n    AbstractControlDirective.prototype.reset = function (value) {\n        if (value === void 0) { value = undefined; }\n        if (this.control)\n            this.control.reset(value);\n    };\n    /**\n     * Returns true if the control with the given path has the error specified. Otherwise\n     * returns false.\n     *\n     * If no path is given, it checks for the error on the present control.\n     * @param {?} errorCode\n     * @param {?=} path\n     * @return {?}\n     */\n    AbstractControlDirective.prototype.hasError = function (errorCode, path) {\n        return this.control ? this.control.hasError(errorCode, path) : false;\n    };\n    /**\n     * Returns error data if the control with the given path has the error specified. Otherwise\n     * returns null or undefined.\n     *\n     * If no path is given, it checks for the error on the present control.\n     * @param {?} errorCode\n     * @param {?=} path\n     * @return {?}\n     */\n    AbstractControlDirective.prototype.getError = function (errorCode, path) {\n        return this.control ? this.control.getError(errorCode, path) : null;\n    };\n    return AbstractControlDirective;\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 * A directive that contains multiple {\\@link NgControl}s.\n *\n * Only used by the forms module.\n *\n * \\@stable\n * @abstract\n */\nvar ControlContainer = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](ControlContainer, _super);\n    function ControlContainer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(ControlContainer.prototype, \"formDirective\", {\n        /**\n         * Get the form to which this container belongs.\n         * @return {?}\n         */\n        get: function () { return null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ControlContainer.prototype, \"path\", {\n        /**\n         * Get the path to this container.\n         * @return {?}\n         */\n        get: function () { return null; },\n        enumerable: true,\n        configurable: true\n    });\n    return ControlContainer;\n}(AbstractControlDirective));\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 * @param {?} value\n * @return {?}\n */\nfunction isEmptyInputValue(value) {\n    // we don't check for string here so it also works with arrays\n    return value == null || value.length === 0;\n}\n/**\n * Providers for validators to be used for {\\@link FormControl}s in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * \\@stable\n */\nvar NG_VALIDATORS = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"InjectionToken\"]('NgValidators');\n/**\n * Providers for asynchronous validators to be used for {\\@link FormControl}s\n * in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * See {\\@link NG_VALIDATORS} for more details.\n *\n * \\@stable\n */\nvar NG_ASYNC_VALIDATORS = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"InjectionToken\"]('NgAsyncValidators');\nvar EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n/**\n * Provides a set of validators used by form controls.\n *\n * A validator is a function that processes a {\\@link FormControl} or collection of\n * controls and returns a map of errors. A null map means that validation has passed.\n *\n * ### Example\n *\n * ```typescript\n * var loginControl = new FormControl(\"\", Validators.required)\n * ```\n *\n * \\@stable\n */\nvar Validators = (function () {\n    function Validators() {\n    }\n    /**\n     * Validator that requires controls to have a value greater than a number.\n     * @param {?} min\n     * @return {?}\n     */\n    Validators.min = function (min) {\n        return function (control) {\n            if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n                return null; // don't validate empty values to allow optional controls\n            }\n            var /** @type {?} */ value = parseFloat(control.value);\n            // Controls with NaN values after parsing should be treated as not having a\n            // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n            return !isNaN(value) && value < min ? { 'min': { 'min': min, 'actual': control.value } } : null;\n        };\n    };\n    /**\n     * Validator that requires controls to have a value less than a number.\n     * @param {?} max\n     * @return {?}\n     */\n    Validators.max = function (max) {\n        return function (control) {\n            if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n                return null; // don't validate empty values to allow optional controls\n            }\n            var /** @type {?} */ value = parseFloat(control.value);\n            // Controls with NaN values after parsing should be treated as not having a\n            // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n            return !isNaN(value) && value > max ? { 'max': { 'max': max, 'actual': control.value } } : null;\n        };\n    };\n    /**\n     * Validator that requires controls to have a non-empty value.\n     * @param {?} control\n     * @return {?}\n     */\n    Validators.required = function (control) {\n        return isEmptyInputValue(control.value) ? { 'required': true } : null;\n    };\n    /**\n     * Validator that requires control value to be true.\n     * @param {?} control\n     * @return {?}\n     */\n    Validators.requiredTrue = function (control) {\n        return control.value === true ? null : { 'required': true };\n    };\n    /**\n     * Validator that performs email validation.\n     * @param {?} control\n     * @return {?}\n     */\n    Validators.email = function (control) {\n        return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };\n    };\n    /**\n     * Validator that requires controls to have a value of a minimum length.\n     * @param {?} minLength\n     * @return {?}\n     */\n    Validators.minLength = function (minLength) {\n        return function (control) {\n            if (isEmptyInputValue(control.value)) {\n                return null; // don't validate empty values to allow optional controls\n            }\n            var /** @type {?} */ length = control.value ? control.value.length : 0;\n            return length < minLength ?\n                { 'minlength': { 'requiredLength': minLength, 'actualLength': length } } :\n                null;\n        };\n    };\n    /**\n     * Validator that requires controls to have a value of a maximum length.\n     * @param {?} maxLength\n     * @return {?}\n     */\n    Validators.maxLength = function (maxLength) {\n        return function (control) {\n            var /** @type {?} */ length = control.value ? control.value.length : 0;\n            return length > maxLength ?\n                { 'maxlength': { 'requiredLength': maxLength, 'actualLength': length } } :\n                null;\n        };\n    };\n    /**\n     * Validator that requires a control to match a regex to its value.\n     * @param {?} pattern\n     * @return {?}\n     */\n    Validators.pattern = function (pattern) {\n        if (!pattern)\n            return Validators.nullValidator;\n        var /** @type {?} */ regex;\n        var /** @type {?} */ regexStr;\n        if (typeof pattern === 'string') {\n            regexStr = \"^\" + pattern + \"$\";\n            regex = new RegExp(regexStr);\n        }\n        else {\n            regexStr = pattern.toString();\n            regex = pattern;\n        }\n        return function (control) {\n            if (isEmptyInputValue(control.value)) {\n                return null; // don't validate empty values to allow optional controls\n            }\n            var /** @type {?} */ value = control.value;\n            return regex.test(value) ? null :\n                { 'pattern': { 'requiredPattern': regexStr, 'actualValue': value } };\n        };\n    };\n    /**\n     * No-op validator.\n     * @param {?} c\n     * @return {?}\n     */\n    Validators.nullValidator = function (c) { return null; };\n    /**\n     * @param {?} validators\n     * @return {?}\n     */\n    Validators.compose = function (validators) {\n        if (!validators)\n            return null;\n        var /** @type {?} */ presentValidators = (validators.filter(isPresent));\n        if (presentValidators.length == 0)\n            return null;\n        return function (control) {\n            return _mergeErrors(_executeValidators(control, presentValidators));\n        };\n    };\n    /**\n     * @param {?} validators\n     * @return {?}\n     */\n    Validators.composeAsync = function (validators) {\n        if (!validators)\n            return null;\n        var /** @type {?} */ presentValidators = (validators.filter(isPresent));\n        if (presentValidators.length == 0)\n            return null;\n        return function (control) {\n            var /** @type {?} */ observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n            return __WEBPACK_IMPORTED_MODULE_4_rxjs_operator_map__[\"map\"].call(Object(__WEBPACK_IMPORTED_MODULE_2_rxjs_observable_forkJoin__[\"forkJoin\"])(observables), _mergeErrors);\n        };\n    };\n    return Validators;\n}());\n/**\n * @param {?} o\n * @return {?}\n */\nfunction isPresent(o) {\n    return o != null;\n}\n/**\n * @param {?} r\n * @return {?}\n */\nfunction toObservable(r) {\n    var /** @type {?} */ obs = Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵisPromise\"])(r) ? Object(__WEBPACK_IMPORTED_MODULE_3_rxjs_observable_fromPromise__[\"fromPromise\"])(r) : r;\n    if (!(Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵisObservable\"])(obs))) {\n        throw new Error(\"Expected validator to return Promise or Observable.\");\n    }\n    return obs;\n}\n/**\n * @param {?} control\n * @param {?} validators\n * @return {?}\n */\nfunction _executeValidators(control, validators) {\n    return validators.map(function (v) { return v(control); });\n}\n/**\n * @param {?} control\n * @param {?} validators\n * @return {?}\n */\nfunction _executeAsyncValidators(control, validators) {\n    return validators.map(function (v) { return v(control); });\n}\n/**\n * @param {?} arrayOfErrors\n * @return {?}\n */\nfunction _mergeErrors(arrayOfErrors) {\n    var /** @type {?} */ res = arrayOfErrors.reduce(function (res, errors) {\n        return errors != null ? Object.assign({}, /** @type {?} */ ((res)), errors) : ((res));\n    }, {});\n    return Object.keys(res).length === 0 ? null : res;\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 * Used to provide a {\\@link ControlValueAccessor} for form controls.\n *\n * See {\\@link DefaultValueAccessor} for how to implement one.\n * \\@stable\n */\nvar NG_VALUE_ACCESSOR = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"InjectionToken\"]('NgValueAccessor');\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 */\nvar CHECKBOX_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return CheckboxControlValueAccessor; }),\n    multi: true,\n};\n/**\n * The accessor for writing a value and listening to changes on a checkbox input element.\n *\n *  ### Example\n *  ```\n *  <input type=\"checkbox\" name=\"rememberLogin\" ngModel>\n *  ```\n *\n *  \\@stable\n */\nvar CheckboxControlValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function CheckboxControlValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    CheckboxControlValueAccessor.prototype.writeValue = function (value) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    CheckboxControlValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    CheckboxControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    CheckboxControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    return CheckboxControlValueAccessor;\n}());\nCheckboxControlValueAccessor.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n                host: { '(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()' },\n                providers: [CHECKBOX_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nCheckboxControlValueAccessor.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer2\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\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 */\nvar DEFAULT_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return DefaultValueAccessor; }),\n    multi: true\n};\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n * @return {?}\n */\nfunction _isAndroid() {\n    var /** @type {?} */ userAgent = Object(__WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__[\"f\" /* ɵgetDOM */])() ? Object(__WEBPACK_IMPORTED_MODULE_5__angular_platform_browser__[\"f\" /* ɵgetDOM */])().getUserAgent() : '';\n    return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n/**\n * Turn this mode on if you want form directives to buffer IME input until compositionend\n * \\@experimental\n */\nvar COMPOSITION_BUFFER_MODE = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"InjectionToken\"]('CompositionEventMode');\n/**\n * The default accessor for writing a value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n *  ### Example\n *  ```\n *  <input type=\"text\" name=\"searchQuery\" ngModel>\n *  ```\n *\n *  \\@stable\n */\nvar DefaultValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     * @param {?} _compositionMode\n     */\n    function DefaultValueAccessor(_renderer, _elementRef, _compositionMode) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this._compositionMode = _compositionMode;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n        /**\n         * Whether the user is creating a composition string (IME events).\n         */\n        this._composing = false;\n        if (this._compositionMode == null) {\n            this._compositionMode = !_isAndroid();\n        }\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype.writeValue = function (value) {\n        var /** @type {?} */ normalizedValue = value == null ? '' : value;\n        this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype._handleInput = function (value) {\n        if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n            this.onChange(value);\n        }\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype._compositionStart = function () { this._composing = true; };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype._compositionEnd = function (value) {\n        this._composing = false;\n        this._compositionMode && this.onChange(value);\n    };\n    return DefaultValueAccessor;\n}());\nDefaultValueAccessor.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n                // TODO: vsavkin replace the above selector with the one below it once\n                // https://github.com/angular/angular/issues/3011 is implemented\n                // selector: '[ngModel],[formControl],[formControlName]',\n                host: {\n                    '(input)': '_handleInput($event.target.value)',\n                    '(blur)': 'onTouched()',\n                    '(compositionstart)': '_compositionStart()',\n                    '(compositionend)': '_compositionEnd($event.target.value)'\n                },\n                providers: [DEFAULT_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nDefaultValueAccessor.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer2\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\n    { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [COMPOSITION_BUFFER_MODE,] },] },\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 * @param {?} validator\n * @return {?}\n */\nfunction normalizeValidator(validator) {\n    if (((validator)).validate) {\n        return function (c) { return ((validator)).validate(c); };\n    }\n    else {\n        return (validator);\n    }\n}\n/**\n * @param {?} validator\n * @return {?}\n */\nfunction normalizeAsyncValidator(validator) {\n    if (((validator)).validate) {\n        return function (c) { return ((validator)).validate(c); };\n    }\n    else {\n        return (validator);\n    }\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 */\nvar NUMBER_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return NumberValueAccessor; }),\n    multi: true\n};\n/**\n * The accessor for writing a number value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n *  ### Example\n *  ```\n *  <input type=\"number\" [(ngModel)]=\"age\">\n *  ```\n */\nvar NumberValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function NumberValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    NumberValueAccessor.prototype.writeValue = function (value) {\n        // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n        var /** @type {?} */ normalizedValue = value == null ? '' : value;\n        this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NumberValueAccessor.prototype.registerOnChange = function (fn) {\n        this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NumberValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    NumberValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    return NumberValueAccessor;\n}());\nNumberValueAccessor.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n                host: {\n                    '(change)': 'onChange($event.target.value)',\n                    '(input)': 'onChange($event.target.value)',\n                    '(blur)': 'onTouched()'\n                },\n                providers: [NUMBER_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nNumberValueAccessor.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer2\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\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 * @return {?}\n */\nfunction unimplemented() {\n    throw new Error('unimplemented');\n}\n/**\n * A base class that all control directive extend.\n * It binds a {\\@link FormControl} object to a DOM element.\n *\n * Used internally by Angular forms.\n *\n * \\@stable\n * @abstract\n */\nvar NgControl = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](NgControl, _super);\n    function NgControl() {\n        var _this = _super.apply(this, arguments) || this;\n        /**\n         * \\@internal\n         */\n        _this._parent = null;\n        _this.name = null;\n        _this.valueAccessor = null;\n        /**\n         * \\@internal\n         */\n        _this._rawValidators = [];\n        /**\n         * \\@internal\n         */\n        _this._rawAsyncValidators = [];\n        return _this;\n    }\n    Object.defineProperty(NgControl.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return (unimplemented()); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgControl.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return (unimplemented()); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @abstract\n     * @param {?} newValue\n     * @return {?}\n     */\n    NgControl.prototype.viewToModelUpdate = function (newValue) { };\n    return NgControl;\n}(AbstractControlDirective));\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 */\nvar RADIO_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return RadioControlValueAccessor; }),\n    multi: true\n};\n/**\n * Internal class used by Angular to uncheck radio buttons with the matching name.\n */\nvar RadioControlRegistry = (function () {\n    function RadioControlRegistry() {\n        this._accessors = [];\n    }\n    /**\n     * @param {?} control\n     * @param {?} accessor\n     * @return {?}\n     */\n    RadioControlRegistry.prototype.add = function (control, accessor) {\n        this._accessors.push([control, accessor]);\n    };\n    /**\n     * @param {?} accessor\n     * @return {?}\n     */\n    RadioControlRegistry.prototype.remove = function (accessor) {\n        for (var /** @type {?} */ i = this._accessors.length - 1; i >= 0; --i) {\n            if (this._accessors[i][1] === accessor) {\n                this._accessors.splice(i, 1);\n                return;\n            }\n        }\n    };\n    /**\n     * @param {?} accessor\n     * @return {?}\n     */\n    RadioControlRegistry.prototype.select = function (accessor) {\n        var _this = this;\n        this._accessors.forEach(function (c) {\n            if (_this._isSameGroup(c, accessor) && c[1] !== accessor) {\n                c[1].fireUncheck(accessor.value);\n            }\n        });\n    };\n    /**\n     * @param {?} controlPair\n     * @param {?} accessor\n     * @return {?}\n     */\n    RadioControlRegistry.prototype._isSameGroup = function (controlPair, accessor) {\n        if (!controlPair[0].control)\n            return false;\n        return controlPair[0]._parent === accessor._control._parent &&\n            controlPair[1].name === accessor.name;\n    };\n    return RadioControlRegistry;\n}());\nRadioControlRegistry.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nRadioControlRegistry.ctorParameters = function () { return []; };\n/**\n * \\@whatItDoes Writes radio control values and listens to radio control changes.\n *\n * Used by {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName}\n * to keep the view synced with the {\\@link FormControl} model.\n *\n * \\@howToUse\n *\n * If you have imported the {\\@link FormsModule} or the {\\@link ReactiveFormsModule}, this\n * value accessor will be active on any radio control that has a form directive. You do\n * **not** need to add a special selector to activate it.\n *\n * ### How to use radio buttons with form directives\n *\n * To use radio buttons in a template-driven form, you'll want to ensure that radio buttons\n * in the same group have the same `name` attribute.  Radio buttons with different `name`\n * attributes do not affect each other.\n *\n * {\\@example forms/ts/radioButtons/radio_button_example.ts region='TemplateDriven'}\n *\n * When using radio buttons in a reactive form, radio buttons in the same group should have the\n * same `formControlName`. You can also add a `name` attribute, but it's optional.\n *\n * {\\@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n *  * **npm package**: `\\@angular/forms`\n *\n *  \\@stable\n */\nvar RadioControlValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     * @param {?} _registry\n     * @param {?} _injector\n     */\n    function RadioControlValueAccessor(_renderer, _elementRef, _registry, _injector) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this._registry = _registry;\n        this._injector = _injector;\n        this.onChange = function () { };\n        this.onTouched = function () { };\n    }\n    /**\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.ngOnInit = function () {\n        this._control = this._injector.get(NgControl);\n        this._checkName();\n        this._registry.add(this._control, this);\n    };\n    /**\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.ngOnDestroy = function () { this._registry.remove(this); };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.writeValue = function (value) {\n        this._state = value === this.value;\n        this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.registerOnChange = function (fn) {\n        var _this = this;\n        this._fn = fn;\n        this.onChange = function () {\n            fn(_this.value);\n            _this._registry.select(_this);\n        };\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.fireUncheck = function (value) { this.writeValue(value); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    /**\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype._checkName = function () {\n        if (this.name && this.formControlName && this.name !== this.formControlName) {\n            this._throwNameError();\n        }\n        if (!this.name && this.formControlName)\n            this.name = this.formControlName;\n    };\n    /**\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype._throwNameError = function () {\n        throw new Error(\"\\n      If you define both a name and a formControlName attribute on your radio button, their values\\n      must match. Ex: <input type=\\\"radio\\\" formControlName=\\\"food\\\" name=\\\"food\\\">\\n    \");\n    };\n    return RadioControlValueAccessor;\n}());\nRadioControlValueAccessor.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n                host: { '(change)': 'onChange()', '(blur)': 'onTouched()' },\n                providers: [RADIO_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nRadioControlValueAccessor.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer2\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\n    { type: RadioControlRegistry, },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injector\"], },\n]; };\nRadioControlValueAccessor.propDecorators = {\n    'name': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n    'formControlName': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n    'value': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\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 */\nvar RANGE_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return RangeValueAccessor; }),\n    multi: true\n};\n/**\n * The accessor for writing a range value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n *  ### Example\n *  ```\n *  <input type=\"range\" [(ngModel)]=\"age\" >\n *  ```\n */\nvar RangeValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function RangeValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    RangeValueAccessor.prototype.writeValue = function (value) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RangeValueAccessor.prototype.registerOnChange = function (fn) {\n        this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RangeValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    RangeValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    return RangeValueAccessor;\n}());\nRangeValueAccessor.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n                host: {\n                    '(change)': 'onChange($event.target.value)',\n                    '(input)': 'onChange($event.target.value)',\n                    '(blur)': 'onTouched()'\n                },\n                providers: [RANGE_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nRangeValueAccessor.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer2\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\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 */\nvar SELECT_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return SelectControlValueAccessor; }),\n    multi: true\n};\n/**\n * @param {?} id\n * @param {?} value\n * @return {?}\n */\nfunction _buildValueString(id, value) {\n    if (id == null)\n        return \"\" + value;\n    if (value && typeof value === 'object')\n        value = 'Object';\n    return (id + \": \" + value).slice(0, 50);\n}\n/**\n * @param {?} valueString\n * @return {?}\n */\nfunction _extractId(valueString) {\n    return valueString.split(':')[0];\n}\n/**\n * \\@whatItDoes Writes values and listens to changes on a select element.\n *\n * Used by {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName}\n * to keep the view synced with the {\\@link FormControl} model.\n *\n * \\@howToUse\n *\n * If you have imported the {\\@link FormsModule} or the {\\@link ReactiveFormsModule}, this\n * value accessor will be active on any select control that has a form directive. You do\n * **not** need to add a special selector to activate it.\n *\n * ### How to use select controls with form directives\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * If your option values are simple strings, you can bind to the normal `value` property\n * on the option.  If your option values happen to be objects (and you'd like to save the\n * selection in your form as an object), use `ngValue` instead:\n *\n * {\\@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * In reactive forms, you'll also want to add your form directive (`formControlName` or\n * `formControl`) on the main `<select>` tag. Like in the former example, you have the\n * choice of binding to the  `value` or `ngValue` property on the select's options.\n *\n * {\\@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Caveat: Option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * #### Syntax\n *\n * ```\n * <select [compareWith]=\"compareFn\"  [(ngModel)]=\"selectedCountries\">\n *     <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n *         {{country.name}}\n *     </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n *     return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * Note: We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nvar SelectControlValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function SelectControlValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        /**\n         * \\@internal\n         */\n        this._optionMap = new Map();\n        /**\n         * \\@internal\n         */\n        this._idCounter = 0;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n        this._compareWith = __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵlooseIdentical\"];\n    }\n    Object.defineProperty(SelectControlValueAccessor.prototype, \"compareWith\", {\n        /**\n         * @param {?} fn\n         * @return {?}\n         */\n        set: function (fn) {\n            if (typeof fn !== 'function') {\n                throw new Error(\"compareWith must be a function, but received \" + JSON.stringify(fn));\n            }\n            this._compareWith = fn;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype.writeValue = function (value) {\n        this.value = value;\n        var /** @type {?} */ id = this._getOptionId(value);\n        if (id == null) {\n            this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n        }\n        var /** @type {?} */ valueString = _buildValueString(id, value);\n        this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype.registerOnChange = function (fn) {\n        var _this = this;\n        this.onChange = function (valueString) {\n            _this.value = _this._getOptionValue(valueString);\n            fn(_this.value);\n        };\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype._registerOption = function () { return (this._idCounter++).toString(); };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype._getOptionId = function (value) {\n        for (var _i = 0, _a = Array.from(this._optionMap.keys()); _i < _a.length; _i++) {\n            var id = _a[_i];\n            if (this._compareWith(this._optionMap.get(id), value))\n                return id;\n        }\n        return null;\n    };\n    /**\n     * \\@internal\n     * @param {?} valueString\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype._getOptionValue = function (valueString) {\n        var /** @type {?} */ id = _extractId(valueString);\n        return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n    };\n    return SelectControlValueAccessor;\n}());\nSelectControlValueAccessor.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n                host: { '(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },\n                providers: [SELECT_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nSelectControlValueAccessor.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer2\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\n]; };\nSelectControlValueAccessor.propDecorators = {\n    'compareWith': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * \\@whatItDoes Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * \\@howToUse\n *\n * See docs for {\\@link SelectControlValueAccessor} for usage examples.\n *\n * \\@stable\n */\nvar NgSelectOption = (function () {\n    /**\n     * @param {?} _element\n     * @param {?} _renderer\n     * @param {?} _select\n     */\n    function NgSelectOption(_element, _renderer, _select) {\n        this._element = _element;\n        this._renderer = _renderer;\n        this._select = _select;\n        if (this._select)\n            this.id = this._select._registerOption();\n    }\n    Object.defineProperty(NgSelectOption.prototype, \"ngValue\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            if (this._select == null)\n                return;\n            this._select._optionMap.set(this.id, value);\n            this._setElementValue(_buildValueString(this.id, value));\n            this._select.writeValue(this._select.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgSelectOption.prototype, \"value\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            this._setElementValue(value);\n            if (this._select)\n                this._select.writeValue(this._select.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    NgSelectOption.prototype._setElementValue = function (value) {\n        this._renderer.setProperty(this._element.nativeElement, 'value', value);\n    };\n    /**\n     * @return {?}\n     */\n    NgSelectOption.prototype.ngOnDestroy = function () {\n        if (this._select) {\n            this._select._optionMap.delete(this.id);\n            this._select.writeValue(this._select.value);\n        }\n    };\n    return NgSelectOption;\n}());\nNgSelectOption.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: 'option' },] },\n];\n/**\n * @nocollapse\n */\nNgSelectOption.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer2\"], },\n    { type: SelectControlValueAccessor, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] },] },\n]; };\nNgSelectOption.propDecorators = {\n    'ngValue': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['ngValue',] },],\n    'value': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['value',] },],\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 */\nvar SELECT_MULTIPLE_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return SelectMultipleControlValueAccessor; }),\n    multi: true\n};\n/**\n * @param {?} id\n * @param {?} value\n * @return {?}\n */\nfunction _buildValueString$1(id, value) {\n    if (id == null)\n        return \"\" + value;\n    if (typeof value === 'string')\n        value = \"'\" + value + \"'\";\n    if (value && typeof value === 'object')\n        value = 'Object';\n    return (id + \": \" + value).slice(0, 50);\n}\n/**\n * @param {?} valueString\n * @return {?}\n */\nfunction _extractId$1(valueString) {\n    return valueString.split(':')[0];\n}\n/**\n * The accessor for writing a value and listening to changes on a select element.\n *\n *  ### Caveat: Options selection\n *\n * Angular uses object identity to select options. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select multiple>` supports `compareWith`\n * input. `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects options by the return value of the function.\n *\n * #### Syntax\n *\n * ```\n * <select multiple [compareWith]=\"compareFn\"  [(ngModel)]=\"selectedCountries\">\n *     <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n *         {{country.name}}\n *     </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n *     return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * \\@stable\n */\nvar SelectMultipleControlValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function SelectMultipleControlValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        /**\n         * \\@internal\n         */\n        this._optionMap = new Map();\n        /**\n         * \\@internal\n         */\n        this._idCounter = 0;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n        this._compareWith = __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵlooseIdentical\"];\n    }\n    Object.defineProperty(SelectMultipleControlValueAccessor.prototype, \"compareWith\", {\n        /**\n         * @param {?} fn\n         * @return {?}\n         */\n        set: function (fn) {\n            if (typeof fn !== 'function') {\n                throw new Error(\"compareWith must be a function, but received \" + JSON.stringify(fn));\n            }\n            this._compareWith = fn;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype.writeValue = function (value) {\n        var _this = this;\n        this.value = value;\n        var /** @type {?} */ optionSelectedStateSetter;\n        if (Array.isArray(value)) {\n            // convert values to ids\n            var /** @type {?} */ ids_1 = value.map(function (v) { return _this._getOptionId(v); });\n            optionSelectedStateSetter = function (opt, o) { opt._setSelected(ids_1.indexOf(o.toString()) > -1); };\n        }\n        else {\n            optionSelectedStateSetter = function (opt, o) { opt._setSelected(false); };\n        }\n        this._optionMap.forEach(optionSelectedStateSetter);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype.registerOnChange = function (fn) {\n        var _this = this;\n        this.onChange = function (_) {\n            var /** @type {?} */ selected = [];\n            if (_.hasOwnProperty('selectedOptions')) {\n                var /** @type {?} */ options = _.selectedOptions;\n                for (var /** @type {?} */ i = 0; i < options.length; i++) {\n                    var /** @type {?} */ opt = options.item(i);\n                    var /** @type {?} */ val = _this._getOptionValue(opt.value);\n                    selected.push(val);\n                }\n            }\n            else {\n                var /** @type {?} */ options = (_.options);\n                for (var /** @type {?} */ i = 0; i < options.length; i++) {\n                    var /** @type {?} */ opt = options.item(i);\n                    if (opt.selected) {\n                        var /** @type {?} */ val = _this._getOptionValue(opt.value);\n                        selected.push(val);\n                    }\n                }\n            }\n            _this.value = selected;\n            fn(selected);\n        };\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype._registerOption = function (value) {\n        var /** @type {?} */ id = (this._idCounter++).toString();\n        this._optionMap.set(id, value);\n        return id;\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype._getOptionId = function (value) {\n        for (var _i = 0, _a = Array.from(this._optionMap.keys()); _i < _a.length; _i++) {\n            var id = _a[_i];\n            if (this._compareWith(/** @type {?} */ ((this._optionMap.get(id)))._value, value))\n                return id;\n        }\n        return null;\n    };\n    /**\n     * \\@internal\n     * @param {?} valueString\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype._getOptionValue = function (valueString) {\n        var /** @type {?} */ id = _extractId$1(valueString);\n        return this._optionMap.has(id) ? ((this._optionMap.get(id)))._value : valueString;\n    };\n    return SelectMultipleControlValueAccessor;\n}());\nSelectMultipleControlValueAccessor.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n                host: { '(change)': 'onChange($event.target)', '(blur)': 'onTouched()' },\n                providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nSelectMultipleControlValueAccessor.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer2\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\n]; };\nSelectMultipleControlValueAccessor.propDecorators = {\n    'compareWith': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * ### Example\n *\n * ```\n * <select multiple name=\"city\" ngModel>\n *   <option *ngFor=\"let c of cities\" [value]=\"c\"></option>\n * </select>\n * ```\n */\nvar NgSelectMultipleOption = (function () {\n    /**\n     * @param {?} _element\n     * @param {?} _renderer\n     * @param {?} _select\n     */\n    function NgSelectMultipleOption(_element, _renderer, _select) {\n        this._element = _element;\n        this._renderer = _renderer;\n        this._select = _select;\n        if (this._select) {\n            this.id = this._select._registerOption(this);\n        }\n    }\n    Object.defineProperty(NgSelectMultipleOption.prototype, \"ngValue\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            if (this._select == null)\n                return;\n            this._value = value;\n            this._setElementValue(_buildValueString$1(this.id, value));\n            this._select.writeValue(this._select.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgSelectMultipleOption.prototype, \"value\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            if (this._select) {\n                this._value = value;\n                this._setElementValue(_buildValueString$1(this.id, value));\n                this._select.writeValue(this._select.value);\n            }\n            else {\n                this._setElementValue(value);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    NgSelectMultipleOption.prototype._setElementValue = function (value) {\n        this._renderer.setProperty(this._element.nativeElement, 'value', value);\n    };\n    /**\n     * \\@internal\n     * @param {?} selected\n     * @return {?}\n     */\n    NgSelectMultipleOption.prototype._setSelected = function (selected) {\n        this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n    };\n    /**\n     * @return {?}\n     */\n    NgSelectMultipleOption.prototype.ngOnDestroy = function () {\n        if (this._select) {\n            this._select._optionMap.delete(this.id);\n            this._select.writeValue(this._select.value);\n        }\n    };\n    return NgSelectMultipleOption;\n}());\nNgSelectMultipleOption.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: 'option' },] },\n];\n/**\n * @nocollapse\n */\nNgSelectMultipleOption.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ElementRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Renderer2\"], },\n    { type: SelectMultipleControlValueAccessor, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] },] },\n]; };\nNgSelectMultipleOption.propDecorators = {\n    'ngValue': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['ngValue',] },],\n    'value': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['value',] },],\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 * @param {?} name\n * @param {?} parent\n * @return {?}\n */\nfunction controlPath(name, parent) {\n    return ((parent.path)).concat([name]);\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpControl(control, dir) {\n    if (!control)\n        _throwError(dir, 'Cannot find control with');\n    if (!dir.valueAccessor)\n        _throwError(dir, 'No value accessor for form control with');\n    control.validator = Validators.compose([/** @type {?} */ ((control.validator)), dir.validator]);\n    control.asyncValidator = Validators.composeAsync([/** @type {?} */ ((control.asyncValidator)), dir.asyncValidator]); /** @type {?} */\n    ((dir.valueAccessor)).writeValue(control.value); /** @type {?} */\n    ((\n    // view -> model\n    dir.valueAccessor)).registerOnChange(function (newValue) {\n        dir.viewToModelUpdate(newValue);\n        control.markAsDirty();\n        control.setValue(newValue, { emitModelToViewChange: false });\n    }); /** @type {?} */\n    ((\n    // touched\n    dir.valueAccessor)).registerOnTouched(function () { return control.markAsTouched(); });\n    control.registerOnChange(function (newValue, emitModelEvent) {\n        ((\n        // control -> view\n        dir.valueAccessor)).writeValue(newValue);\n        // control -> ngModel\n        if (emitModelEvent)\n            dir.viewToModelUpdate(newValue);\n    });\n    if (((dir.valueAccessor)).setDisabledState) {\n        control.registerOnDisabledChange(function (isDisabled) { /** @type {?} */ ((((dir.valueAccessor)).setDisabledState))(isDisabled); });\n    }\n    // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n    dir._rawValidators.forEach(function (validator) {\n        if (((validator)).registerOnValidatorChange)\n            ((((validator)).registerOnValidatorChange))(function () { return control.updateValueAndValidity(); });\n    });\n    dir._rawAsyncValidators.forEach(function (validator) {\n        if (((validator)).registerOnValidatorChange)\n            ((((validator)).registerOnValidatorChange))(function () { return control.updateValueAndValidity(); });\n    });\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction cleanUpControl(control, dir) {\n    ((dir.valueAccessor)).registerOnChange(function () { return _noControlError(dir); }); /** @type {?} */\n    ((dir.valueAccessor)).registerOnTouched(function () { return _noControlError(dir); });\n    dir._rawValidators.forEach(function (validator) {\n        if (validator.registerOnValidatorChange) {\n            validator.registerOnValidatorChange(null);\n        }\n    });\n    dir._rawAsyncValidators.forEach(function (validator) {\n        if (validator.registerOnValidatorChange) {\n            validator.registerOnValidatorChange(null);\n        }\n    });\n    if (control)\n        control._clearChangeFns();\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpFormContainer(control, dir) {\n    if (control == null)\n        _throwError(dir, 'Cannot find control with');\n    control.validator = Validators.compose([control.validator, dir.validator]);\n    control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n/**\n * @param {?} dir\n * @return {?}\n */\nfunction _noControlError(dir) {\n    return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n/**\n * @param {?} dir\n * @param {?} message\n * @return {?}\n */\nfunction _throwError(dir, message) {\n    var /** @type {?} */ messageEnd;\n    if (((dir.path)).length > 1) {\n        messageEnd = \"path: '\" + ((dir.path)).join(' -> ') + \"'\";\n    }\n    else if (((dir.path))[0]) {\n        messageEnd = \"name: '\" + dir.path + \"'\";\n    }\n    else {\n        messageEnd = 'unspecified name attribute';\n    }\n    throw new Error(message + \" \" + messageEnd);\n}\n/**\n * @param {?} validators\n * @return {?}\n */\nfunction composeValidators(validators) {\n    return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n/**\n * @param {?} validators\n * @return {?}\n */\nfunction composeAsyncValidators(validators) {\n    return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n        null;\n}\n/**\n * @param {?} changes\n * @param {?} viewModel\n * @return {?}\n */\nfunction isPropertyUpdated(changes, viewModel) {\n    if (!changes.hasOwnProperty('model'))\n        return false;\n    var /** @type {?} */ change = changes['model'];\n    if (change.isFirstChange())\n        return true;\n    return !Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"ɵlooseIdentical\"])(viewModel, change.currentValue);\n}\nvar BUILTIN_ACCESSORS = [\n    CheckboxControlValueAccessor,\n    RangeValueAccessor,\n    NumberValueAccessor,\n    SelectControlValueAccessor,\n    SelectMultipleControlValueAccessor,\n    RadioControlValueAccessor,\n];\n/**\n * @param {?} valueAccessor\n * @return {?}\n */\nfunction isBuiltInAccessor(valueAccessor) {\n    return BUILTIN_ACCESSORS.some(function (a) { return valueAccessor.constructor === a; });\n}\n/**\n * @param {?} dir\n * @param {?} valueAccessors\n * @return {?}\n */\nfunction selectValueAccessor(dir, valueAccessors) {\n    if (!valueAccessors)\n        return null;\n    var /** @type {?} */ defaultAccessor = undefined;\n    var /** @type {?} */ builtinAccessor = undefined;\n    var /** @type {?} */ customAccessor = undefined;\n    valueAccessors.forEach(function (v) {\n        if (v.constructor === DefaultValueAccessor) {\n            defaultAccessor = v;\n        }\n        else if (isBuiltInAccessor(v)) {\n            if (builtinAccessor)\n                _throwError(dir, 'More than one built-in value accessor matches form control with');\n            builtinAccessor = v;\n        }\n        else {\n            if (customAccessor)\n                _throwError(dir, 'More than one custom value accessor matches form control with');\n            customAccessor = v;\n        }\n    });\n    if (customAccessor)\n        return customAccessor;\n    if (builtinAccessor)\n        return builtinAccessor;\n    if (defaultAccessor)\n        return defaultAccessor;\n    _throwError(dir, 'No valid value accessor for form control with');\n    return null;\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 * This is a base class for code shared between {\\@link NgModelGroup} and {\\@link FormGroupName}.\n *\n * \\@stable\n */\nvar AbstractFormGroupDirective = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](AbstractFormGroupDirective, _super);\n    function AbstractFormGroupDirective() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @return {?}\n     */\n    AbstractFormGroupDirective.prototype.ngOnInit = function () {\n        this._checkParentType(); /** @type {?} */\n        ((this.formDirective)).addFormGroup(this);\n    };\n    /**\n     * @return {?}\n     */\n    AbstractFormGroupDirective.prototype.ngOnDestroy = function () {\n        if (this.formDirective) {\n            this.formDirective.removeFormGroup(this);\n        }\n    };\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"control\", {\n        /**\n         * Get the {\\@link FormGroup} backing this binding.\n         * @return {?}\n         */\n        get: function () { return ((this.formDirective)).getFormGroup(this); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"path\", {\n        /**\n         * Get the path to this control group.\n         * @return {?}\n         */\n        get: function () { return controlPath(this.name, this._parent); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"formDirective\", {\n        /**\n         * Get the {\\@link Form} to which this group belongs.\n         * @return {?}\n         */\n        get: function () { return this._parent ? this._parent.formDirective : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._validators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return composeAsyncValidators(this._asyncValidators);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    AbstractFormGroupDirective.prototype._checkParentType = function () { };\n    return AbstractFormGroupDirective;\n}(ControlContainer));\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 */\nvar AbstractControlStatus = (function () {\n    /**\n     * @param {?} cd\n     */\n    function AbstractControlStatus(cd) {\n        this._cd = cd;\n    }\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassUntouched\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.untouched : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassTouched\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.touched : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassPristine\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.pristine : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassDirty\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.dirty : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassValid\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.valid : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassInvalid\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.invalid : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassPending\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.pending : false; },\n        enumerable: true,\n        configurable: true\n    });\n    return AbstractControlStatus;\n}());\nvar ngControlStatusHost = {\n    '[class.ng-untouched]': 'ngClassUntouched',\n    '[class.ng-touched]': 'ngClassTouched',\n    '[class.ng-pristine]': 'ngClassPristine',\n    '[class.ng-dirty]': 'ngClassDirty',\n    '[class.ng-valid]': 'ngClassValid',\n    '[class.ng-invalid]': 'ngClassInvalid',\n    '[class.ng-pending]': 'ngClassPending',\n};\n/**\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status. The following classes are applied as the properties\n * become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * \\@stable\n */\nvar NgControlStatus = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](NgControlStatus, _super);\n    /**\n     * @param {?} cd\n     */\n    function NgControlStatus(cd) {\n        return _super.call(this, cd) || this;\n    }\n    return NgControlStatus;\n}(AbstractControlStatus));\nNgControlStatus.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost },] },\n];\n/**\n * @nocollapse\n */\nNgControlStatus.ctorParameters = function () { return [\n    { type: NgControl, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] },] },\n]; };\n/**\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n *\n * \\@stable\n */\nvar NgControlStatusGroup = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](NgControlStatusGroup, _super);\n    /**\n     * @param {?} cd\n     */\n    function NgControlStatusGroup(cd) {\n        return _super.call(this, cd) || this;\n    }\n    return NgControlStatusGroup;\n}(AbstractControlStatus));\nNgControlStatusGroup.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n                host: ngControlStatusHost\n            },] },\n];\n/**\n * @nocollapse\n */\nNgControlStatusGroup.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] },] },\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 * Indicates that a FormControl is valid, i.e. that no errors exist in the input value.\n */\nvar VALID = 'VALID';\n/**\n * Indicates that a FormControl is invalid, i.e. that an error exists in the input value.\n */\nvar INVALID = 'INVALID';\n/**\n * Indicates that a FormControl is pending, i.e. that async validation is occurring and\n * errors are not yet available for the input value.\n */\nvar PENDING = 'PENDING';\n/**\n * Indicates that a FormControl is disabled, i.e. that the control is exempt from ancestor\n * calculations of validity or value.\n */\nvar DISABLED = 'DISABLED';\n/**\n * @param {?} control\n * @param {?} path\n * @param {?} delimiter\n * @return {?}\n */\nfunction _find(control, path, delimiter) {\n    if (path == null)\n        return null;\n    if (!(path instanceof Array)) {\n        path = ((path)).split(delimiter);\n    }\n    if (path instanceof Array && (path.length === 0))\n        return null;\n    return ((path)).reduce(function (v, name) {\n        if (v instanceof FormGroup) {\n            return v.controls[name] || null;\n        }\n        if (v instanceof FormArray) {\n            return v.at(/** @type {?} */ (name)) || null;\n        }\n        return null;\n    }, control);\n}\n/**\n * @param {?=} validator\n * @return {?}\n */\nfunction coerceToValidator(validator) {\n    return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n/**\n * @param {?=} asyncValidator\n * @return {?}\n */\nfunction coerceToAsyncValidator(asyncValidator) {\n    return Array.isArray(asyncValidator) ? composeAsyncValidators(asyncValidator) :\n        asyncValidator || null;\n}\n/**\n * \\@whatItDoes This is the base class for {\\@link FormControl}, {\\@link FormGroup}, and\n * {\\@link FormArray}.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * \\@stable\n * @abstract\n */\nvar AbstractControl = (function () {\n    /**\n     * @param {?} validator\n     * @param {?} asyncValidator\n     */\n    function AbstractControl(validator, asyncValidator) {\n        this.validator = validator;\n        this.asyncValidator = asyncValidator;\n        /**\n         * \\@internal\n         */\n        this._onCollectionChange = function () { };\n        this._pristine = true;\n        this._touched = false;\n        /**\n         * \\@internal\n         */\n        this._onDisabledChange = [];\n    }\n    Object.defineProperty(AbstractControl.prototype, \"value\", {\n        /**\n         * The value of the control.\n         * @return {?}\n         */\n        get: function () { return this._value; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"parent\", {\n        /**\n         * The parent control.\n         * @return {?}\n         */\n        get: function () { return this._parent; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"status\", {\n        /**\n         * The validation status of the control. There are four possible\n         * validation statuses:\n         *\n         * * **VALID**:  control has passed all validation checks\n         * * **INVALID**: control has failed at least one validation check\n         * * **PENDING**: control is in the midst of conducting a validation check\n         * * **DISABLED**: control is exempt from validation checks\n         *\n         * These statuses are mutually exclusive, so a control cannot be\n         * both valid AND invalid or invalid AND disabled.\n         * @return {?}\n         */\n        get: function () { return this._status; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"valid\", {\n        /**\n         * A control is `valid` when its `status === VALID`.\n         *\n         * In order to have this status, the control must have passed all its\n         * validation checks.\n         * @return {?}\n         */\n        get: function () { return this._status === VALID; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"invalid\", {\n        /**\n         * A control is `invalid` when its `status === INVALID`.\n         *\n         * In order to have this status, the control must have failed\n         * at least one of its validation checks.\n         * @return {?}\n         */\n        get: function () { return this._status === INVALID; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"pending\", {\n        /**\n         * A control is `pending` when its `status === PENDING`.\n         *\n         * In order to have this status, the control must be in the\n         * middle of conducting a validation check.\n         * @return {?}\n         */\n        get: function () { return this._status == PENDING; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"disabled\", {\n        /**\n         * A control is `disabled` when its `status === DISABLED`.\n         *\n         * Disabled controls are exempt from validation checks and\n         * are not included in the aggregate value of their ancestor\n         * controls.\n         * @return {?}\n         */\n        get: function () { return this._status === DISABLED; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"enabled\", {\n        /**\n         * A control is `enabled` as long as its `status !== DISABLED`.\n         *\n         * In other words, it has a status of `VALID`, `INVALID`, or\n         * `PENDING`.\n         * @return {?}\n         */\n        get: function () { return this._status !== DISABLED; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"errors\", {\n        /**\n         * Returns any errors generated by failing validation. If there\n         * are no errors, it will return null.\n         * @return {?}\n         */\n        get: function () { return this._errors; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"pristine\", {\n        /**\n         * A control is `pristine` if the user has not yet changed\n         * the value in the UI.\n         *\n         * Note that programmatic changes to a control's value will\n         * *not* mark it dirty.\n         * @return {?}\n         */\n        get: function () { return this._pristine; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"dirty\", {\n        /**\n         * A control is `dirty` if the user has changed the value\n         * in the UI.\n         *\n         * Note that programmatic changes to a control's value will\n         * *not* mark it dirty.\n         * @return {?}\n         */\n        get: function () { return !this.pristine; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"touched\", {\n        /**\n         * A control is marked `touched` once the user has triggered\n         * a `blur` event on it.\n         * @return {?}\n         */\n        get: function () { return this._touched; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"untouched\", {\n        /**\n         * A control is `untouched` if the user has not yet triggered\n         * a `blur` event on it.\n         * @return {?}\n         */\n        get: function () { return !this._touched; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"valueChanges\", {\n        /**\n         * Emits an event every time the value of the control changes, in\n         * the UI or programmatically.\n         * @return {?}\n         */\n        get: function () { return this._valueChanges; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"statusChanges\", {\n        /**\n         * Emits an event every time the validation status of the control\n         * is re-calculated.\n         * @return {?}\n         */\n        get: function () { return this._statusChanges; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Sets the synchronous validators that are active on this control.  Calling\n     * this will overwrite any existing sync validators.\n     * @param {?} newValidator\n     * @return {?}\n     */\n    AbstractControl.prototype.setValidators = function (newValidator) {\n        this.validator = coerceToValidator(newValidator);\n    };\n    /**\n     * Sets the async validators that are active on this control. Calling this\n     * will overwrite any existing async validators.\n     * @param {?} newValidator\n     * @return {?}\n     */\n    AbstractControl.prototype.setAsyncValidators = function (newValidator) {\n        this.asyncValidator = coerceToAsyncValidator(newValidator);\n    };\n    /**\n     * Empties out the sync validator list.\n     * @return {?}\n     */\n    AbstractControl.prototype.clearValidators = function () { this.validator = null; };\n    /**\n     * Empties out the async validator list.\n     * @return {?}\n     */\n    AbstractControl.prototype.clearAsyncValidators = function () { this.asyncValidator = null; };\n    /**\n     * Marks the control as `touched`.\n     *\n     * This will also mark all direct ancestors as `touched` to maintain\n     * the model.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsTouched = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._touched = true;\n        if (this._parent && !opts.onlySelf) {\n            this._parent.markAsTouched(opts);\n        }\n    };\n    /**\n     * Marks the control as `untouched`.\n     *\n     * If the control has any children, it will also mark all children as `untouched`\n     * to maintain the model, and re-calculate the `touched` status of all parent\n     * controls.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsUntouched = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._touched = false;\n        this._forEachChild(function (control) { control.markAsUntouched({ onlySelf: true }); });\n        if (this._parent && !opts.onlySelf) {\n            this._parent._updateTouched(opts);\n        }\n    };\n    /**\n     * Marks the control as `dirty`.\n     *\n     * This will also mark all direct ancestors as `dirty` to maintain\n     * the model.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsDirty = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._pristine = false;\n        if (this._parent && !opts.onlySelf) {\n            this._parent.markAsDirty(opts);\n        }\n    };\n    /**\n     * Marks the control as `pristine`.\n     *\n     * If the control has any children, it will also mark all children as `pristine`\n     * to maintain the model, and re-calculate the `pristine` status of all parent\n     * controls.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsPristine = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._pristine = true;\n        this._forEachChild(function (control) { control.markAsPristine({ onlySelf: true }); });\n        if (this._parent && !opts.onlySelf) {\n            this._parent._updatePristine(opts);\n        }\n    };\n    /**\n     * Marks the control as `pending`.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsPending = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._status = PENDING;\n        if (this._parent && !opts.onlySelf) {\n            this._parent.markAsPending(opts);\n        }\n    };\n    /**\n     * Disables the control. This means the control will be exempt from validation checks and\n     * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n     *\n     * If the control has children, all children will be disabled to maintain the model.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.disable = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._status = DISABLED;\n        this._errors = null;\n        this._forEachChild(function (control) { control.disable({ onlySelf: true }); });\n        this._updateValue();\n        if (opts.emitEvent !== false) {\n            this._valueChanges.emit(this._value);\n            this._statusChanges.emit(this._status);\n        }\n        this._updateAncestors(!!opts.onlySelf);\n        this._onDisabledChange.forEach(function (changeFn) { return changeFn(true); });\n    };\n    /**\n     * Enables the control. This means the control will be included in validation checks and\n     * the aggregate value of its parent. Its status is re-calculated based on its value and\n     * its validators.\n     *\n     * If the control has children, all children will be enabled.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.enable = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._status = VALID;\n        this._forEachChild(function (control) { control.enable({ onlySelf: true }); });\n        this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n        this._updateAncestors(!!opts.onlySelf);\n        this._onDisabledChange.forEach(function (changeFn) { return changeFn(false); });\n    };\n    /**\n     * @param {?} onlySelf\n     * @return {?}\n     */\n    AbstractControl.prototype._updateAncestors = function (onlySelf) {\n        if (this._parent && !onlySelf) {\n            this._parent.updateValueAndValidity();\n            this._parent._updatePristine();\n            this._parent._updateTouched();\n        }\n    };\n    /**\n     * @param {?} parent\n     * @return {?}\n     */\n    AbstractControl.prototype.setParent = function (parent) { this._parent = parent; };\n    /**\n     * Sets the value of the control. Abstract method (implemented in sub-classes).\n     * @abstract\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    AbstractControl.prototype.setValue = function (value, options) { };\n    /**\n     * Patches the value of the control. Abstract method (implemented in sub-classes).\n     * @abstract\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    AbstractControl.prototype.patchValue = function (value, options) { };\n    /**\n     * Resets the control. Abstract method (implemented in sub-classes).\n     * @abstract\n     * @param {?=} value\n     * @param {?=} options\n     * @return {?}\n     */\n    AbstractControl.prototype.reset = function (value, options) { };\n    /**\n     * Re-calculates the value and validation status of the control.\n     *\n     * By default, it will also update the value and validity of its ancestors.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.updateValueAndValidity = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._setInitialStatus();\n        this._updateValue();\n        if (this.enabled) {\n            this._cancelExistingSubscription();\n            this._errors = this._runValidator();\n            this._status = this._calculateStatus();\n            if (this._status === VALID || this._status === PENDING) {\n                this._runAsyncValidator(opts.emitEvent);\n            }\n        }\n        if (opts.emitEvent !== false) {\n            this._valueChanges.emit(this._value);\n            this._statusChanges.emit(this._status);\n        }\n        if (this._parent && !opts.onlySelf) {\n            this._parent.updateValueAndValidity(opts);\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype._updateTreeValidity = function (opts) {\n        if (opts === void 0) { opts = { emitEvent: true }; }\n        this._forEachChild(function (ctrl) { return ctrl._updateTreeValidity(opts); });\n        this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n    };\n    /**\n     * @return {?}\n     */\n    AbstractControl.prototype._setInitialStatus = function () { this._status = this._allControlsDisabled() ? DISABLED : VALID; };\n    /**\n     * @return {?}\n     */\n    AbstractControl.prototype._runValidator = function () {\n        return this.validator ? this.validator(this) : null;\n    };\n    /**\n     * @param {?=} emitEvent\n     * @return {?}\n     */\n    AbstractControl.prototype._runAsyncValidator = function (emitEvent) {\n        var _this = this;\n        if (this.asyncValidator) {\n            this._status = PENDING;\n            var /** @type {?} */ obs = toObservable(this.asyncValidator(this));\n            this._asyncValidationSubscription =\n                obs.subscribe(function (errors) { return _this.setErrors(errors, { emitEvent: emitEvent }); });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AbstractControl.prototype._cancelExistingSubscription = function () {\n        if (this._asyncValidationSubscription) {\n            this._asyncValidationSubscription.unsubscribe();\n        }\n    };\n    /**\n     * Sets errors on a form control.\n     *\n     * This is used when validations are run manually by the user, rather than automatically.\n     *\n     * Calling `setErrors` will also update the validity of the parent control.\n     *\n     * ### Example\n     *\n     * ```\n     * const login = new FormControl(\"someLogin\");\n     * login.setErrors({\n     *   \"notUnique\": true\n     * });\n     *\n     * expect(login.valid).toEqual(false);\n     * expect(login.errors).toEqual({\"notUnique\": true});\n     *\n     * login.setValue(\"someOtherLogin\");\n     *\n     * expect(login.valid).toEqual(true);\n     * ```\n     * @param {?} errors\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.setErrors = function (errors, opts) {\n        if (opts === void 0) { opts = {}; }\n        this._errors = errors;\n        this._updateControlsErrors(opts.emitEvent !== false);\n    };\n    /**\n     * Retrieves a child control given the control's name or path.\n     *\n     * Paths can be passed in as an array or a string delimited by a dot.\n     *\n     * To get a control nested within a `person` sub-group:\n     *\n     * * `this.form.get('person.name');`\n     *\n     * -OR-\n     *\n     * * `this.form.get(['person', 'name']);`\n     * @param {?} path\n     * @return {?}\n     */\n    AbstractControl.prototype.get = function (path) { return _find(this, path, '.'); };\n    /**\n     * Returns error data if the control with the given path has the error specified. Otherwise\n     * returns null or undefined.\n     *\n     * If no path is given, it checks for the error on the present control.\n     * @param {?} errorCode\n     * @param {?=} path\n     * @return {?}\n     */\n    AbstractControl.prototype.getError = function (errorCode, path) {\n        var /** @type {?} */ control = path ? this.get(path) : this;\n        return control && control._errors ? control._errors[errorCode] : null;\n    };\n    /**\n     * Returns true if the control with the given path has the error specified. Otherwise\n     * returns false.\n     *\n     * If no path is given, it checks for the error on the present control.\n     * @param {?} errorCode\n     * @param {?=} path\n     * @return {?}\n     */\n    AbstractControl.prototype.hasError = function (errorCode, path) { return !!this.getError(errorCode, path); };\n    Object.defineProperty(AbstractControl.prototype, \"root\", {\n        /**\n         * Retrieves the top-level ancestor of this control.\n         * @return {?}\n         */\n        get: function () {\n            var /** @type {?} */ x = this;\n            while (x._parent) {\n                x = x._parent;\n            }\n            return x;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@internal\n     * @param {?} emitEvent\n     * @return {?}\n     */\n    AbstractControl.prototype._updateControlsErrors = function (emitEvent) {\n        this._status = this._calculateStatus();\n        if (emitEvent) {\n            this._statusChanges.emit(this._status);\n        }\n        if (this._parent) {\n            this._parent._updateControlsErrors(emitEvent);\n        }\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    AbstractControl.prototype._initObservables = function () {\n        this._valueChanges = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"EventEmitter\"]();\n        this._statusChanges = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"EventEmitter\"]();\n    };\n    /**\n     * @return {?}\n     */\n    AbstractControl.prototype._calculateStatus = function () {\n        if (this._allControlsDisabled())\n            return DISABLED;\n        if (this._errors)\n            return INVALID;\n        if (this._anyControlsHaveStatus(PENDING))\n            return PENDING;\n        if (this._anyControlsHaveStatus(INVALID))\n            return INVALID;\n        return VALID;\n    };\n    /**\n     * \\@internal\n     * @abstract\n     * @return {?}\n     */\n    AbstractControl.prototype._updateValue = function () { };\n    /**\n     * \\@internal\n     * @abstract\n     * @param {?} cb\n     * @return {?}\n     */\n    AbstractControl.prototype._forEachChild = function (cb) { };\n    /**\n     * \\@internal\n     * @abstract\n     * @param {?} condition\n     * @return {?}\n     */\n    AbstractControl.prototype._anyControls = function (condition) { };\n    /**\n     * \\@internal\n     * @abstract\n     * @return {?}\n     */\n    AbstractControl.prototype._allControlsDisabled = function () { };\n    /**\n     * \\@internal\n     * @param {?} status\n     * @return {?}\n     */\n    AbstractControl.prototype._anyControlsHaveStatus = function (status) {\n        return this._anyControls(function (control) { return control.status === status; });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    AbstractControl.prototype._anyControlsDirty = function () {\n        return this._anyControls(function (control) { return control.dirty; });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    AbstractControl.prototype._anyControlsTouched = function () {\n        return this._anyControls(function (control) { return control.touched; });\n    };\n    /**\n     * \\@internal\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype._updatePristine = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._pristine = !this._anyControlsDirty();\n        if (this._parent && !opts.onlySelf) {\n            this._parent._updatePristine(opts);\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype._updateTouched = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._touched = this._anyControlsTouched();\n        if (this._parent && !opts.onlySelf) {\n            this._parent._updateTouched(opts);\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?} formState\n     * @return {?}\n     */\n    AbstractControl.prototype._isBoxedValue = function (formState) {\n        return typeof formState === 'object' && formState !== null &&\n            Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n    };\n    /**\n     * \\@internal\n     * @param {?} fn\n     * @return {?}\n     */\n    AbstractControl.prototype._registerOnCollectionChange = function (fn) { this._onCollectionChange = fn; };\n    return AbstractControl;\n}());\n/**\n * \\@whatItDoes Tracks the value and validation status of an individual form control.\n *\n * It is one of the three fundamental building blocks of Angular forms, along with\n * {\\@link FormGroup} and {\\@link FormArray}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormControl}, you can pass in an initial value as the\n * first argument. Example:\n *\n * ```ts\n * const ctrl = new FormControl('some value');\n * console.log(ctrl.value);     // 'some value'\n * ```\n *\n * You can also initialize the control with a form state object on instantiation,\n * which includes both the value and whether or not the control is disabled.\n * You can't use the value key without the disabled key; both are required\n * to use this way of initialization.\n *\n * ```ts\n * const ctrl = new FormControl({value: 'n/a', disabled: true});\n * console.log(ctrl.value);     // 'n/a'\n * console.log(ctrl.status);   // 'DISABLED'\n * ```\n *\n * To include a sync validator (or an array of sync validators) with the control,\n * pass it in as the second argument. Async validators are also supported, but\n * have to be passed in separately as the third arg.\n *\n * ```ts\n * const ctrl = new FormControl('', Validators.required);\n * console.log(ctrl.value);     // ''\n * console.log(ctrl.status);   // 'INVALID'\n * ```\n *\n * See its superclass, {\\@link AbstractControl}, for more properties and methods.\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nvar FormControl = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](FormControl, _super);\n    /**\n     * @param {?=} formState\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     */\n    function FormControl(formState, validator, asyncValidator) {\n        if (formState === void 0) { formState = null; }\n        var _this = _super.call(this, coerceToValidator(validator), coerceToAsyncValidator(asyncValidator)) || this;\n        /**\n         * \\@internal\n         */\n        _this._onChange = [];\n        _this._applyFormState(formState);\n        _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n        _this._initObservables();\n        return _this;\n    }\n    /**\n     * Set the value of the form control to `value`.\n     *\n     * If `onlySelf` is `true`, this change will only affect the validation of this `FormControl`\n     * and not its parent component. This defaults to false.\n     *\n     * If `emitEvent` is `true`, this\n     * change will cause a `valueChanges` event on the `FormControl` to be emitted. This defaults\n     * to true (as it falls through to `updateValueAndValidity`).\n     *\n     * If `emitModelToViewChange` is `true`, the view will be notified about the new value\n     * via an `onChange` event. This is the default behavior if `emitModelToViewChange` is not\n     * specified.\n     *\n     * If `emitViewToModelChange` is `true`, an ngModelChange event will be fired to update the\n     * model.  This is the default behavior if `emitViewToModelChange` is not specified.\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormControl.prototype.setValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        this._value = value;\n        if (this._onChange.length && options.emitModelToViewChange !== false) {\n            this._onChange.forEach(function (changeFn) { return changeFn(_this._value, options.emitViewToModelChange !== false); });\n        }\n        this.updateValueAndValidity(options);\n    };\n    /**\n     * Patches the value of a control.\n     *\n     * This function is functionally the same as {\\@link FormControl#setValue} at this level.\n     * It exists for symmetry with {\\@link FormGroup#patchValue} on `FormGroups` and `FormArrays`,\n     * where it does behave differently.\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormControl.prototype.patchValue = function (value, options) {\n        if (options === void 0) { options = {}; }\n        this.setValue(value, options);\n    };\n    /**\n     * Resets the form control. This means by default:\n     *\n     * * it is marked as `pristine`\n     * * it is marked as `untouched`\n     * * value is set to null\n     *\n     * You can also reset to a specific form state by passing through a standalone\n     * value or a form state object that contains both a value and a disabled state\n     * (these are the only two properties that cannot be calculated).\n     *\n     * Ex:\n     *\n     * ```ts\n     * this.control.reset('Nancy');\n     *\n     * console.log(this.control.value);  // 'Nancy'\n     * ```\n     *\n     * OR\n     *\n     * ```\n     * this.control.reset({value: 'Nancy', disabled: true});\n     *\n     * console.log(this.control.value);  // 'Nancy'\n     * console.log(this.control.status);  // 'DISABLED'\n     * ```\n     * @param {?=} formState\n     * @param {?=} options\n     * @return {?}\n     */\n    FormControl.prototype.reset = function (formState, options) {\n        if (formState === void 0) { formState = null; }\n        if (options === void 0) { options = {}; }\n        this._applyFormState(formState);\n        this.markAsPristine(options);\n        this.markAsUntouched(options);\n        this.setValue(this._value, options);\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormControl.prototype._updateValue = function () { };\n    /**\n     * \\@internal\n     * @param {?} condition\n     * @return {?}\n     */\n    FormControl.prototype._anyControls = function (condition) { return false; };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormControl.prototype._allControlsDisabled = function () { return this.disabled; };\n    /**\n     * Register a listener for change events.\n     * @param {?} fn\n     * @return {?}\n     */\n    FormControl.prototype.registerOnChange = function (fn) { this._onChange.push(fn); };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormControl.prototype._clearChangeFns = function () {\n        this._onChange = [];\n        this._onDisabledChange = [];\n        this._onCollectionChange = function () { };\n    };\n    /**\n     * Register a listener for disabled events.\n     * @param {?} fn\n     * @return {?}\n     */\n    FormControl.prototype.registerOnDisabledChange = function (fn) {\n        this._onDisabledChange.push(fn);\n    };\n    /**\n     * \\@internal\n     * @param {?} cb\n     * @return {?}\n     */\n    FormControl.prototype._forEachChild = function (cb) { };\n    /**\n     * @param {?} formState\n     * @return {?}\n     */\n    FormControl.prototype._applyFormState = function (formState) {\n        if (this._isBoxedValue(formState)) {\n            this._value = formState.value;\n            formState.disabled ? this.disable({ onlySelf: true, emitEvent: false }) :\n                this.enable({ onlySelf: true, emitEvent: false });\n        }\n        else {\n            this._value = formState;\n        }\n    };\n    return FormControl;\n}(AbstractControl));\n/**\n * \\@whatItDoes Tracks the value and validity state of a group of {\\@link FormControl}\n * instances.\n *\n * A `FormGroup` aggregates the values of each child {\\@link FormControl} into one object,\n * with each control name as the key.  It calculates its status by reducing the statuses\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with {\\@link FormControl} and {\\@link FormArray}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormGroup}, pass in a collection of child controls as the first\n * argument. The key for each child will be the name under which it is registered.\n *\n * ### Example\n *\n * ```\n * const form = new FormGroup({\n *   first: new FormControl('Nancy', Validators.minLength(2)),\n *   last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value);   // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status);  // 'VALID'\n * ```\n *\n * You can also include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ### Example\n *\n * ```\n * const form = new FormGroup({\n *   password: new FormControl('', Validators.minLength(2)),\n *   passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n *    return g.get('password').value === g.get('passwordConfirm').value\n *       ? null : {'mismatch': true};\n * }\n * ```\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nvar FormGroup = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](FormGroup, _super);\n    /**\n     * @param {?} controls\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     */\n    function FormGroup(controls, validator, asyncValidator) {\n        var _this = _super.call(this, validator || null, asyncValidator || null) || this;\n        _this.controls = controls;\n        _this._initObservables();\n        _this._setUpControls();\n        _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n        return _this;\n    }\n    /**\n     * Registers a control with the group's list of controls.\n     *\n     * This method does not update value or validity of the control, so for\n     * most cases you'll want to use {\\@link FormGroup#addControl} instead.\n     * @param {?} name\n     * @param {?} control\n     * @return {?}\n     */\n    FormGroup.prototype.registerControl = function (name, control) {\n        if (this.controls[name])\n            return this.controls[name];\n        this.controls[name] = control;\n        control.setParent(this);\n        control._registerOnCollectionChange(this._onCollectionChange);\n        return control;\n    };\n    /**\n     * Add a control to this group.\n     * @param {?} name\n     * @param {?} control\n     * @return {?}\n     */\n    FormGroup.prototype.addControl = function (name, control) {\n        this.registerControl(name, control);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Remove a control from this group.\n     * @param {?} name\n     * @return {?}\n     */\n    FormGroup.prototype.removeControl = function (name) {\n        if (this.controls[name])\n            this.controls[name]._registerOnCollectionChange(function () { });\n        delete (this.controls[name]);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Replace an existing control.\n     * @param {?} name\n     * @param {?} control\n     * @return {?}\n     */\n    FormGroup.prototype.setControl = function (name, control) {\n        if (this.controls[name])\n            this.controls[name]._registerOnCollectionChange(function () { });\n        delete (this.controls[name]);\n        if (control)\n            this.registerControl(name, control);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Check whether there is an enabled control with the given name in the group.\n     *\n     * It will return false for disabled controls. If you'd like to check for\n     * existence in the group only, use {\\@link AbstractControl#get} instead.\n     * @param {?} controlName\n     * @return {?}\n     */\n    FormGroup.prototype.contains = function (controlName) {\n        return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n    };\n    /**\n     *  Sets the value of the {\\@link FormGroup}. It accepts an object that matches\n     *  the structure of the group, with control names as keys.\n     *\n     * This method performs strict checks, so it will throw an error if you try\n     * to set the value of a control that doesn't exist or if you exclude the\n     * value of a control.\n     *\n     *  ### Example\n     *\n     *  ```\n     *  const form = new FormGroup({\n     *     first: new FormControl(),\n     *     last: new FormControl()\n     *  });\n     *  console.log(form.value);   // {first: null, last: null}\n     *\n     *  form.setValue({first: 'Nancy', last: 'Drew'});\n     *  console.log(form.value);   // {first: 'Nancy', last: 'Drew'}\n     *\n     *  ```\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormGroup.prototype.setValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        this._checkAllValuesPresent(value);\n        Object.keys(value).forEach(function (name) {\n            _this._throwIfControlMissing(name);\n            _this.controls[name].setValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n        });\n        this.updateValueAndValidity(options);\n    };\n    /**\n     *  Patches the value of the {\\@link FormGroup}. It accepts an object with control\n     *  names as keys, and will do its best to match the values to the correct controls\n     *  in the group.\n     *\n     *  It accepts both super-sets and sub-sets of the group without throwing an error.\n     *\n     *  ### Example\n     *\n     *  ```\n     *  const form = new FormGroup({\n     *     first: new FormControl(),\n     *     last: new FormControl()\n     *  });\n     *  console.log(form.value);   // {first: null, last: null}\n     *\n     *  form.patchValue({first: 'Nancy'});\n     *  console.log(form.value);   // {first: 'Nancy', last: null}\n     *\n     *  ```\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormGroup.prototype.patchValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        Object.keys(value).forEach(function (name) {\n            if (_this.controls[name]) {\n                _this.controls[name].patchValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n            }\n        });\n        this.updateValueAndValidity(options);\n    };\n    /**\n     * Resets the {\\@link FormGroup}. This means by default:\n     *\n     * * The group and all descendants are marked `pristine`\n     * * The group and all descendants are marked `untouched`\n     * * The value of all descendants will be null or null maps\n     *\n     * You can also reset to a specific form state by passing in a map of states\n     * that matches the structure of your form, with control names as keys. The state\n     * can be a standalone value or a form state object with both a value and a disabled\n     * status.\n     *\n     * ### Example\n     *\n     * ```ts\n     * this.form.reset({first: 'name', last: 'last name'});\n     *\n     * console.log(this.form.value);  // {first: 'name', last: 'last name'}\n     * ```\n     *\n     * - OR -\n     *\n     * ```\n     * this.form.reset({\n     *   first: {value: 'name', disabled: true},\n     *   last: 'last'\n     * });\n     *\n     * console.log(this.form.value);  // {first: 'name', last: 'last name'}\n     * console.log(this.form.get('first').status);  // 'DISABLED'\n     * ```\n     * @param {?=} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormGroup.prototype.reset = function (value, options) {\n        if (value === void 0) { value = {}; }\n        if (options === void 0) { options = {}; }\n        this._forEachChild(function (control, name) {\n            control.reset(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n        });\n        this.updateValueAndValidity(options);\n        this._updatePristine(options);\n        this._updateTouched(options);\n    };\n    /**\n     * The aggregate value of the {\\@link FormGroup}, including any disabled controls.\n     *\n     * If you'd like to include all values regardless of disabled status, use this method.\n     * Otherwise, the `value` property is the best way to get the value of the group.\n     * @return {?}\n     */\n    FormGroup.prototype.getRawValue = function () {\n        return this._reduceChildren({}, function (acc, control, name) {\n            acc[name] = control instanceof FormControl ? control.value : ((control)).getRawValue();\n            return acc;\n        });\n    };\n    /**\n     * \\@internal\n     * @param {?} name\n     * @return {?}\n     */\n    FormGroup.prototype._throwIfControlMissing = function (name) {\n        if (!Object.keys(this.controls).length) {\n            throw new Error(\"\\n        There are no form controls registered with this group yet.  If you're using ngModel,\\n        you may want to check next tick (e.g. use setTimeout).\\n      \");\n        }\n        if (!this.controls[name]) {\n            throw new Error(\"Cannot find form control with name: \" + name + \".\");\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?} cb\n     * @return {?}\n     */\n    FormGroup.prototype._forEachChild = function (cb) {\n        var _this = this;\n        Object.keys(this.controls).forEach(function (k) { return cb(_this.controls[k], k); });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroup.prototype._setUpControls = function () {\n        var _this = this;\n        this._forEachChild(function (control) {\n            control.setParent(_this);\n            control._registerOnCollectionChange(_this._onCollectionChange);\n        });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroup.prototype._updateValue = function () { this._value = this._reduceValue(); };\n    /**\n     * \\@internal\n     * @param {?} condition\n     * @return {?}\n     */\n    FormGroup.prototype._anyControls = function (condition) {\n        var _this = this;\n        var /** @type {?} */ res = false;\n        this._forEachChild(function (control, name) {\n            res = res || (_this.contains(name) && condition(control));\n        });\n        return res;\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroup.prototype._reduceValue = function () {\n        var _this = this;\n        return this._reduceChildren({}, function (acc, control, name) {\n            if (control.enabled || _this.disabled) {\n                acc[name] = control.value;\n            }\n            return acc;\n        });\n    };\n    /**\n     * \\@internal\n     * @param {?} initValue\n     * @param {?} fn\n     * @return {?}\n     */\n    FormGroup.prototype._reduceChildren = function (initValue, fn) {\n        var /** @type {?} */ res = initValue;\n        this._forEachChild(function (control, name) { res = fn(res, control, name); });\n        return res;\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroup.prototype._allControlsDisabled = function () {\n        for (var _i = 0, _a = Object.keys(this.controls); _i < _a.length; _i++) {\n            var controlName = _a[_i];\n            if (this.controls[controlName].enabled) {\n                return false;\n            }\n        }\n        return Object.keys(this.controls).length > 0 || this.disabled;\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    FormGroup.prototype._checkAllValuesPresent = function (value) {\n        this._forEachChild(function (control, name) {\n            if (value[name] === undefined) {\n                throw new Error(\"Must supply a value for form control with name: '\" + name + \"'.\");\n            }\n        });\n    };\n    return FormGroup;\n}(AbstractControl));\n/**\n * \\@whatItDoes Tracks the value and validity state of an array of {\\@link FormControl},\n * {\\@link FormGroup} or {\\@link FormArray} instances.\n *\n * A `FormArray` aggregates the values of each child {\\@link FormControl} into an array.\n * It calculates its status by reducing the statuses of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with {\\@link FormControl} and {\\@link FormGroup}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormArray}, pass in an array of child controls as the first\n * argument.\n *\n * ### Example\n *\n * ```\n * const arr = new FormArray([\n *   new FormControl('Nancy', Validators.minLength(2)),\n *   new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value);   // ['Nancy', 'Drew']\n * console.log(arr.status);  // 'VALID'\n * ```\n *\n * You can also include array-level validators as the second arg, or array-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ### Adding or removing controls\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that will result in strange and unexpected behavior such\n * as broken change detection.\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nvar FormArray = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](FormArray, _super);\n    /**\n     * @param {?} controls\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     */\n    function FormArray(controls, validator, asyncValidator) {\n        var _this = _super.call(this, validator || null, asyncValidator || null) || this;\n        _this.controls = controls;\n        _this._initObservables();\n        _this._setUpControls();\n        _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n        return _this;\n    }\n    /**\n     * Get the {\\@link AbstractControl} at the given `index` in the array.\n     * @param {?} index\n     * @return {?}\n     */\n    FormArray.prototype.at = function (index) { return this.controls[index]; };\n    /**\n     * Insert a new {\\@link AbstractControl} at the end of the array.\n     * @param {?} control\n     * @return {?}\n     */\n    FormArray.prototype.push = function (control) {\n        this.controls.push(control);\n        this._registerControl(control);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Insert a new {\\@link AbstractControl} at the given `index` in the array.\n     * @param {?} index\n     * @param {?} control\n     * @return {?}\n     */\n    FormArray.prototype.insert = function (index, control) {\n        this.controls.splice(index, 0, control);\n        this._registerControl(control);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Remove the control at the given `index` in the array.\n     * @param {?} index\n     * @return {?}\n     */\n    FormArray.prototype.removeAt = function (index) {\n        if (this.controls[index])\n            this.controls[index]._registerOnCollectionChange(function () { });\n        this.controls.splice(index, 1);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Replace an existing control.\n     * @param {?} index\n     * @param {?} control\n     * @return {?}\n     */\n    FormArray.prototype.setControl = function (index, control) {\n        if (this.controls[index])\n            this.controls[index]._registerOnCollectionChange(function () { });\n        this.controls.splice(index, 1);\n        if (control) {\n            this.controls.splice(index, 0, control);\n            this._registerControl(control);\n        }\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    Object.defineProperty(FormArray.prototype, \"length\", {\n        /**\n         * Length of the control array.\n         * @return {?}\n         */\n        get: function () { return this.controls.length; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     *  Sets the value of the {\\@link FormArray}. It accepts an array that matches\n     *  the structure of the control.\n     *\n     * This method performs strict checks, so it will throw an error if you try\n     * to set the value of a control that doesn't exist or if you exclude the\n     * value of a control.\n     *\n     *  ### Example\n     *\n     *  ```\n     *  const arr = new FormArray([\n     *     new FormControl(),\n     *     new FormControl()\n     *  ]);\n     *  console.log(arr.value);   // [null, null]\n     *\n     *  arr.setValue(['Nancy', 'Drew']);\n     *  console.log(arr.value);   // ['Nancy', 'Drew']\n     *  ```\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormArray.prototype.setValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        this._checkAllValuesPresent(value);\n        value.forEach(function (newValue, index) {\n            _this._throwIfControlMissing(index);\n            _this.at(index).setValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n        });\n        this.updateValueAndValidity(options);\n    };\n    /**\n     *  Patches the value of the {\\@link FormArray}. It accepts an array that matches the\n     *  structure of the control, and will do its best to match the values to the correct\n     *  controls in the group.\n     *\n     *  It accepts both super-sets and sub-sets of the array without throwing an error.\n     *\n     *  ### Example\n     *\n     *  ```\n     *  const arr = new FormArray([\n     *     new FormControl(),\n     *     new FormControl()\n     *  ]);\n     *  console.log(arr.value);   // [null, null]\n     *\n     *  arr.patchValue(['Nancy']);\n     *  console.log(arr.value);   // ['Nancy', null]\n     *  ```\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormArray.prototype.patchValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        value.forEach(function (newValue, index) {\n            if (_this.at(index)) {\n                _this.at(index).patchValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n            }\n        });\n        this.updateValueAndValidity(options);\n    };\n    /**\n     * Resets the {\\@link FormArray}. This means by default:\n     *\n     * * The array and all descendants are marked `pristine`\n     * * The array and all descendants are marked `untouched`\n     * * The value of all descendants will be null or null maps\n     *\n     * You can also reset to a specific form state by passing in an array of states\n     * that matches the structure of the control. The state can be a standalone value\n     * or a form state object with both a value and a disabled status.\n     *\n     * ### Example\n     *\n     * ```ts\n     * this.arr.reset(['name', 'last name']);\n     *\n     * console.log(this.arr.value);  // ['name', 'last name']\n     * ```\n     *\n     * - OR -\n     *\n     * ```\n     * this.arr.reset([\n     *   {value: 'name', disabled: true},\n     *   'last'\n     * ]);\n     *\n     * console.log(this.arr.value);  // ['name', 'last name']\n     * console.log(this.arr.get(0).status);  // 'DISABLED'\n     * ```\n     * @param {?=} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormArray.prototype.reset = function (value, options) {\n        if (value === void 0) { value = []; }\n        if (options === void 0) { options = {}; }\n        this._forEachChild(function (control, index) {\n            control.reset(value[index], { onlySelf: true, emitEvent: options.emitEvent });\n        });\n        this.updateValueAndValidity(options);\n        this._updatePristine(options);\n        this._updateTouched(options);\n    };\n    /**\n     * The aggregate value of the array, including any disabled controls.\n     *\n     * If you'd like to include all values regardless of disabled status, use this method.\n     * Otherwise, the `value` property is the best way to get the value of the array.\n     * @return {?}\n     */\n    FormArray.prototype.getRawValue = function () {\n        return this.controls.map(function (control) {\n            return control instanceof FormControl ? control.value : ((control)).getRawValue();\n        });\n    };\n    /**\n     * \\@internal\n     * @param {?} index\n     * @return {?}\n     */\n    FormArray.prototype._throwIfControlMissing = function (index) {\n        if (!this.controls.length) {\n            throw new Error(\"\\n        There are no form controls registered with this array yet.  If you're using ngModel,\\n        you may want to check next tick (e.g. use setTimeout).\\n      \");\n        }\n        if (!this.at(index)) {\n            throw new Error(\"Cannot find form control at index \" + index);\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?} cb\n     * @return {?}\n     */\n    FormArray.prototype._forEachChild = function (cb) {\n        this.controls.forEach(function (control, index) { cb(control, index); });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormArray.prototype._updateValue = function () {\n        var _this = this;\n        this._value = this.controls.filter(function (control) { return control.enabled || _this.disabled; })\n            .map(function (control) { return control.value; });\n    };\n    /**\n     * \\@internal\n     * @param {?} condition\n     * @return {?}\n     */\n    FormArray.prototype._anyControls = function (condition) {\n        return this.controls.some(function (control) { return control.enabled && condition(control); });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormArray.prototype._setUpControls = function () {\n        var _this = this;\n        this._forEachChild(function (control) { return _this._registerControl(control); });\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    FormArray.prototype._checkAllValuesPresent = function (value) {\n        this._forEachChild(function (control, i) {\n            if (value[i] === undefined) {\n                throw new Error(\"Must supply a value for form control at index: \" + i + \".\");\n            }\n        });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormArray.prototype._allControlsDisabled = function () {\n        for (var _i = 0, _a = this.controls; _i < _a.length; _i++) {\n            var control = _a[_i];\n            if (control.enabled)\n                return false;\n        }\n        return this.controls.length > 0 || this.disabled;\n    };\n    /**\n     * @param {?} control\n     * @return {?}\n     */\n    FormArray.prototype._registerControl = function (control) {\n        control.setParent(this);\n        control._registerOnCollectionChange(this._onCollectionChange);\n    };\n    return FormArray;\n}(AbstractControl));\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 */\nvar formDirectiveProvider = {\n    provide: ControlContainer,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return NgForm; })\n};\nvar resolvedPromise = Promise.resolve(null);\n/**\n * \\@whatItDoes Creates a top-level {\\@link FormGroup} instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * \\@howToUse\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags.  You don't need to add a special selector.\n *\n * You can export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful.  Many properties from the underlying\n * {\\@link FormGroup} instance are duplicated on the directive itself, so a reference to it\n * will give you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, you'll want to use {\\@link NgModel} with a\n * `name` attribute.  You can also use {\\@link NgModelGroup} if you'd like to create\n * sub-groups within the form.\n *\n * You can listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event will be emitted with the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * If you want to import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, you can add `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * {\\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `FormsModule`\n *\n *  \\@stable\n */\nvar NgForm = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](NgForm, _super);\n    /**\n     * @param {?} validators\n     * @param {?} asyncValidators\n     */\n    function NgForm(validators, asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._submitted = false;\n        _this.ngSubmit = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"EventEmitter\"]();\n        _this.form =\n            new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n        return _this;\n    }\n    Object.defineProperty(NgForm.prototype, \"submitted\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._submitted; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.form; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return []; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"controls\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.form.controls; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.addControl = function (dir) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ container = _this._findContainer(dir.path);\n            dir._control = (container.registerControl(dir.name, dir.control));\n            setUpControl(dir.control, dir);\n            dir.control.updateValueAndValidity({ emitEvent: false });\n        });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.getControl = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.removeControl = function (dir) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ container = _this._findContainer(dir.path);\n            if (container) {\n                container.removeControl(dir.name);\n            }\n        });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.addFormGroup = function (dir) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ container = _this._findContainer(dir.path);\n            var /** @type {?} */ group = new FormGroup({});\n            setUpFormContainer(group, dir);\n            container.registerControl(dir.name, group);\n            group.updateValueAndValidity({ emitEvent: false });\n        });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.removeFormGroup = function (dir) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ container = _this._findContainer(dir.path);\n            if (container) {\n                container.removeControl(dir.name);\n            }\n        });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.getFormGroup = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @param {?} value\n     * @return {?}\n     */\n    NgForm.prototype.updateModel = function (dir, value) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ ctrl = (_this.form.get(/** @type {?} */ ((dir.path))));\n            ctrl.setValue(value);\n        });\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    NgForm.prototype.setValue = function (value) { this.control.setValue(value); };\n    /**\n     * @param {?} $event\n     * @return {?}\n     */\n    NgForm.prototype.onSubmit = function ($event) {\n        this._submitted = true;\n        this.ngSubmit.emit($event);\n        return false;\n    };\n    /**\n     * @return {?}\n     */\n    NgForm.prototype.onReset = function () { this.resetForm(); };\n    /**\n     * @param {?=} value\n     * @return {?}\n     */\n    NgForm.prototype.resetForm = function (value) {\n        if (value === void 0) { value = undefined; }\n        this.form.reset(value);\n        this._submitted = false;\n    };\n    /**\n     * \\@internal\n     * @param {?} path\n     * @return {?}\n     */\n    NgForm.prototype._findContainer = function (path) {\n        path.pop();\n        return path.length ? (this.form.get(path)) : this.form;\n    };\n    return NgForm;\n}(ControlContainer));\nNgForm.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,[ngForm]',\n                providers: [formDirectiveProvider],\n                host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n                outputs: ['ngSubmit'],\n                exportAs: 'ngForm'\n            },] },\n];\n/**\n * @nocollapse\n */\nNgForm.ctorParameters = function () { return [\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_ASYNC_VALIDATORS,] },] },\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 */\nvar FormErrorExamples = {\n    formControlName: \"\\n    <div [formGroup]=\\\"myGroup\\\">\\n      <input formControlName=\\\"firstName\\\">\\n    </div>\\n\\n    In your class:\\n\\n    this.myGroup = new FormGroup({\\n       firstName: new FormControl()\\n    });\",\n    formGroupName: \"\\n    <div [formGroup]=\\\"myGroup\\\">\\n       <div formGroupName=\\\"person\\\">\\n          <input formControlName=\\\"firstName\\\">\\n       </div>\\n    </div>\\n\\n    In your class:\\n\\n    this.myGroup = new FormGroup({\\n       person: new FormGroup({ firstName: new FormControl() })\\n    });\",\n    formArrayName: \"\\n    <div [formGroup]=\\\"myGroup\\\">\\n      <div formArrayName=\\\"cities\\\">\\n        <div *ngFor=\\\"let city of cityArray.controls; index as i\\\">\\n          <input [formControlName]=\\\"i\\\">\\n        </div>\\n      </div>\\n    </div>\\n\\n    In your class:\\n\\n    this.cityArray = new FormArray([new FormControl('SF')]);\\n    this.myGroup = new FormGroup({\\n      cities: this.cityArray\\n    });\",\n    ngModelGroup: \"\\n    <form>\\n       <div ngModelGroup=\\\"person\\\">\\n          <input [(ngModel)]=\\\"person.name\\\" name=\\\"firstName\\\">\\n       </div>\\n    </form>\",\n    ngModelWithFormGroup: \"\\n    <div [formGroup]=\\\"myGroup\\\">\\n       <input formControlName=\\\"firstName\\\">\\n       <input [(ngModel)]=\\\"showMoreControls\\\" [ngModelOptions]=\\\"{standalone: true}\\\">\\n    </div>\\n  \"\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 */\nvar TemplateDrivenErrors = (function () {\n    function TemplateDrivenErrors() {\n    }\n    /**\n     * @return {?}\n     */\n    TemplateDrivenErrors.modelParentException = function () {\n        throw new Error(\"\\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\\n      formGroup's partner directive \\\"formControlName\\\" instead.  Example:\\n\\n      \" + FormErrorExamples.formControlName + \"\\n\\n      Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\\n\\n      Example:\\n\\n      \" + FormErrorExamples.ngModelWithFormGroup);\n    };\n    /**\n     * @return {?}\n     */\n    TemplateDrivenErrors.formGroupNameException = function () {\n        throw new Error(\"\\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\\n\\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\\n\\n      \" + FormErrorExamples.formGroupName + \"\\n\\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\\n\\n      \" + FormErrorExamples.ngModelGroup);\n    };\n    /**\n     * @return {?}\n     */\n    TemplateDrivenErrors.missingNameException = function () {\n        throw new Error(\"If ngModel is used within a form tag, either the name attribute must be set or the form\\n      control must be defined as 'standalone' in ngModelOptions.\\n\\n      Example 1: <input [(ngModel)]=\\\"person.firstName\\\" name=\\\"first\\\">\\n      Example 2: <input [(ngModel)]=\\\"person.firstName\\\" [ngModelOptions]=\\\"{standalone: true}\\\">\");\n    };\n    /**\n     * @return {?}\n     */\n    TemplateDrivenErrors.modelGroupParentException = function () {\n        throw new Error(\"\\n      ngModelGroup cannot be used with a parent formGroup directive.\\n\\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\\n\\n      \" + FormErrorExamples.formGroupName + \"\\n\\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\\n\\n      \" + FormErrorExamples.ngModelGroup);\n    };\n    return TemplateDrivenErrors;\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 */\nvar modelGroupProvider = {\n    provide: ControlContainer,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return NgModelGroup; })\n};\n/**\n * \\@whatItDoes Creates and binds a {\\@link FormGroup} instance to a DOM element.\n *\n * \\@howToUse\n *\n * This directive can only be used as a child of {\\@link NgForm} (or in other words,\n * within `<form>` tags).\n *\n * Use this directive if you'd like to create a sub-group within a form. This can\n * come in handy if you want to validate a sub-group of your form separately from\n * the rest of your form, or if some values in your domain model make more sense to\n * consume together in a nested object.\n *\n * Pass in the name you'd like this sub-group to have and it will become the key\n * for the sub-group in the form's full value. You can also export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * {\\@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `FormsModule`\n *\n * \\@stable\n */\nvar NgModelGroup = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](NgModelGroup, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     */\n    function NgModelGroup(parent, validators, asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._parent = parent;\n        _this._validators = validators;\n        _this._asyncValidators = asyncValidators;\n        return _this;\n    }\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    NgModelGroup.prototype._checkParentType = function () {\n        if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n            TemplateDrivenErrors.modelGroupParentException();\n        }\n    };\n    return NgModelGroup;\n}(AbstractFormGroupDirective));\nNgModelGroup.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' },] },\n];\n/**\n * @nocollapse\n */\nNgModelGroup.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"SkipSelf\"] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_ASYNC_VALIDATORS,] },] },\n]; };\nNgModelGroup.propDecorators = {\n    'name': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['ngModelGroup',] },],\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 */\nvar formControlBinding = {\n    provide: NgControl,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return NgModel; })\n};\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nvar resolvedPromise$1 = Promise.resolve(null);\n/**\n * \\@whatItDoes Creates a {\\@link FormControl} instance from a domain model and binds it\n * to a form control element.\n *\n * The {\\@link FormControl} instance will track the value, user interaction, and\n * validation status of the control and keep the view synced with the model. If used\n * within a parent form, the directive will also register itself with the form as a child\n * control.\n *\n * \\@howToUse\n *\n * This directive can be used by itself or as part of a larger form. All you need is the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional {\\@link Input}. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class will set the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI will always be synced back to\n * the domain model in your class as well.\n *\n * If you wish to inspect the properties of the associated {\\@link FormControl} (like\n * validity state), you can also export the directive into a local template variable using\n * `ngModel` as the key (ex: `#myVar=\"ngModel\"`). You can then access the control using the\n * directive's `control` property, but most properties you'll need (like `valid` and `dirty`)\n * will fall through to the control anyway, so you can access them directly. You can see a\n * full list of properties directly available in {\\@link AbstractControlDirective}.\n *\n * The following is an example of a simple standalone control using `ngModel`:\n *\n * {\\@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * It's worth noting that in the context of a parent form, you often can skip one-way or\n * two-way binding because the parent form will sync the value for you. You can access\n * its properties by exporting it into a local template variable using `ngForm` (ex:\n * `#f=\"ngForm\"`). Then you can pass it where it needs to go on submit.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n *\n * Take a look at an example of using `ngModel` within a form:\n *\n * {\\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * To see `ngModel` examples with different form control types, see:\n *\n * * Radio buttons: {\\@link RadioControlValueAccessor}\n * * Selects: {\\@link SelectControlValueAccessor}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: `FormsModule`\n *\n *  \\@stable\n */\nvar NgModel = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](NgModel, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     * @param {?} valueAccessors\n     */\n    function NgModel(parent, validators, asyncValidators, valueAccessors) {\n        var _this = _super.call(this) || this;\n        /**\n         * \\@internal\n         */\n        _this._control = new FormControl();\n        /**\n         * \\@internal\n         */\n        _this._registered = false;\n        _this.update = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"EventEmitter\"]();\n        _this._parent = parent;\n        _this._rawValidators = validators || [];\n        _this._rawAsyncValidators = asyncValidators || [];\n        _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n        return _this;\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgModel.prototype.ngOnChanges = function (changes) {\n        this._checkForErrors();\n        if (!this._registered)\n            this._setUpControl();\n        if ('isDisabled' in changes) {\n            this._updateDisabled(changes);\n        }\n        if (isPropertyUpdated(changes, this.viewModel)) {\n            this._updateValue(this.model);\n            this.viewModel = this.model;\n        }\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype.ngOnDestroy = function () { this.formDirective && this.formDirective.removeControl(this); };\n    Object.defineProperty(NgModel.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._control; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return this._parent ? controlPath(this.name, this._parent) : [this.name];\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._parent ? this._parent.formDirective : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._rawValidators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return composeAsyncValidators(this._rawAsyncValidators);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} newValue\n     * @return {?}\n     */\n    NgModel.prototype.viewToModelUpdate = function (newValue) {\n        this.viewModel = newValue;\n        this.update.emit(newValue);\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._setUpControl = function () {\n        this._isStandalone() ? this._setUpStandalone() :\n            this.formDirective.addControl(this);\n        this._registered = true;\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._isStandalone = function () {\n        return !this._parent || !!(this.options && this.options.standalone);\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._setUpStandalone = function () {\n        setUpControl(this._control, this);\n        this._control.updateValueAndValidity({ emitEvent: false });\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._checkForErrors = function () {\n        if (!this._isStandalone()) {\n            this._checkParentType();\n        }\n        this._checkName();\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._checkParentType = function () {\n        if (!(this._parent instanceof NgModelGroup) &&\n            this._parent instanceof AbstractFormGroupDirective) {\n            TemplateDrivenErrors.formGroupNameException();\n        }\n        else if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n            TemplateDrivenErrors.modelParentException();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._checkName = function () {\n        if (this.options && this.options.name)\n            this.name = this.options.name;\n        if (!this._isStandalone() && !this.name) {\n            TemplateDrivenErrors.missingNameException();\n        }\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    NgModel.prototype._updateValue = function (value) {\n        var _this = this;\n        resolvedPromise$1.then(function () { _this.control.setValue(value, { emitViewToModelChange: false }); });\n    };\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgModel.prototype._updateDisabled = function (changes) {\n        var _this = this;\n        var /** @type {?} */ disabledValue = changes['isDisabled'].currentValue;\n        var /** @type {?} */ isDisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');\n        resolvedPromise$1.then(function () {\n            if (isDisabled && !_this.control.disabled) {\n                _this.control.disable();\n            }\n            else if (!isDisabled && _this.control.disabled) {\n                _this.control.enable();\n            }\n        });\n    };\n    return NgModel;\n}(NgControl));\nNgModel.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: '[ngModel]:not([formControlName]):not([formControl])',\n                providers: [formControlBinding],\n                exportAs: 'ngModel'\n            },] },\n];\n/**\n * @nocollapse\n */\nNgModel.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_ASYNC_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALUE_ACCESSOR,] },] },\n]; };\nNgModel.propDecorators = {\n    'name': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n    'isDisabled': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['disabled',] },],\n    'model': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['ngModel',] },],\n    'options': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['ngModelOptions',] },],\n    'update': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Output\"], args: ['ngModelChange',] },],\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 */\nvar ReactiveErrors = (function () {\n    function ReactiveErrors() {\n    }\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.controlParentException = function () {\n        throw new Error(\"formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\\n       directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n      Example:\\n\\n      \" + FormErrorExamples.formControlName);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.ngModelGroupException = function () {\n        throw new Error(\"formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\\n       that also have a \\\"form\\\" prefix: formGroupName, formArrayName, or formGroup.\\n\\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\\n\\n        \" + FormErrorExamples.formGroupName + \"\\n\\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\\n\\n        \" + FormErrorExamples.ngModelGroup);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.missingFormException = function () {\n        throw new Error(\"formGroup expects a FormGroup instance. Please pass one in.\\n\\n       Example:\\n\\n       \" + FormErrorExamples.formControlName);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.groupParentException = function () {\n        throw new Error(\"formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\\n      directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n      Example:\\n\\n      \" + FormErrorExamples.formGroupName);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.arrayParentException = function () {\n        throw new Error(\"formArrayName must be used with a parent formGroup directive.  You'll want to add a formGroup\\n       directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n        Example:\\n\\n        \" + FormErrorExamples.formArrayName);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.disabledAttrWarning = function () {\n        console.warn(\"\\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\\n      you. We recommend using this approach to avoid 'changed after checked' errors.\\n       \\n      Example: \\n      form = new FormGroup({\\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\\n        last: new FormControl('Drew', Validators.required)\\n      });\\n    \");\n    };\n    return ReactiveErrors;\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 */\nvar formControlBinding$1 = {\n    provide: NgControl,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return FormControlDirective; })\n};\n/**\n * \\@whatItDoes Syncs a standalone {\\@link FormControl} instance to a form control element.\n *\n * In other words, this directive ensures that any values written to the {\\@link FormControl}\n * instance programmatically will be written to the DOM element (model -> view). Conversely,\n * any values written to the DOM element through user input will be reflected in the\n * {\\@link FormControl} instance (view -> model).\n *\n * \\@howToUse\n *\n * Use this directive if you'd like to create and manage a {\\@link FormControl} instance directly.\n * Simply create a {\\@link FormControl}, save it to your component class, and pass it into the\n * {\\@link FormControlDirective}.\n *\n * This directive is designed to be used as a standalone control.  Unlike {\\@link FormControlName},\n * it does not require that your {\\@link FormControl} instance be part of any parent\n * {\\@link FormGroup}, and it won't be registered to any {\\@link FormGroupDirective} that\n * exists above it.\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormControl} instance. See a full list of available properties in\n * {\\@link AbstractControl}.\n *\n * **Set the value**: You can pass in an initial value when instantiating the {\\@link FormControl},\n * or you can set it programmatically later using {\\@link AbstractControl#setValue setValue} or\n * {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the control, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event.  You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * {\\@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n *  \\@stable\n */\nvar FormControlDirective = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](FormControlDirective, _super);\n    /**\n     * @param {?} validators\n     * @param {?} asyncValidators\n     * @param {?} valueAccessors\n     */\n    function FormControlDirective(validators, asyncValidators, valueAccessors) {\n        var _this = _super.call(this) || this;\n        _this.update = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"EventEmitter\"]();\n        _this._rawValidators = validators || [];\n        _this._rawAsyncValidators = asyncValidators || [];\n        _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n        return _this;\n    }\n    Object.defineProperty(FormControlDirective.prototype, \"isDisabled\", {\n        /**\n         * @param {?} isDisabled\n         * @return {?}\n         */\n        set: function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    FormControlDirective.prototype.ngOnChanges = function (changes) {\n        if (this._isControlChanged(changes)) {\n            setUpControl(this.form, this);\n            if (this.control.disabled && ((this.valueAccessor)).setDisabledState) {\n                ((((this.valueAccessor)).setDisabledState))(true);\n            }\n            this.form.updateValueAndValidity({ emitEvent: false });\n        }\n        if (isPropertyUpdated(changes, this.viewModel)) {\n            this.form.setValue(this.model);\n            this.viewModel = this.model;\n        }\n    };\n    Object.defineProperty(FormControlDirective.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return []; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlDirective.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._rawValidators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlDirective.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return composeAsyncValidators(this._rawAsyncValidators);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlDirective.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.form; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} newValue\n     * @return {?}\n     */\n    FormControlDirective.prototype.viewToModelUpdate = function (newValue) {\n        this.viewModel = newValue;\n        this.update.emit(newValue);\n    };\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    FormControlDirective.prototype._isControlChanged = function (changes) {\n        return changes.hasOwnProperty('form');\n    };\n    return FormControlDirective;\n}(NgControl));\nFormControlDirective.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[formControl]', providers: [formControlBinding$1], exportAs: 'ngForm' },] },\n];\n/**\n * @nocollapse\n */\nFormControlDirective.ctorParameters = function () { return [\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_ASYNC_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALUE_ACCESSOR,] },] },\n]; };\nFormControlDirective.propDecorators = {\n    'form': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['formControl',] },],\n    'model': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['ngModel',] },],\n    'update': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Output\"], args: ['ngModelChange',] },],\n    'isDisabled': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['disabled',] },],\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 */\nvar formDirectiveProvider$1 = {\n    provide: ControlContainer,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return FormGroupDirective; })\n};\n/**\n * \\@whatItDoes Binds an existing {\\@link FormGroup} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive accepts an existing {\\@link FormGroup} instance. It will then use this\n * {\\@link FormGroup} instance to match any child {\\@link FormControl}, {\\@link FormGroup},\n * and {\\@link FormArray} instances to child {\\@link FormControlName}, {\\@link FormGroupName},\n * and {\\@link FormArrayName} directives.\n *\n * **Set value**: You can set the form's initial value when instantiating the\n * {\\@link FormGroup}, or you can set it programmatically later using the {\\@link FormGroup}'s\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}\n * methods.\n *\n * **Listen to value**: If you want to listen to changes in the value of the form, you can subscribe\n * to the {\\@link FormGroup}'s {\\@link AbstractControl#valueChanges valueChanges} event.  You can also\n * listen to its {\\@link AbstractControl#statusChanges statusChanges} event to be notified when the\n * validation status is re-calculated.\n *\n * Furthermore, you can listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event will be emitted with the original form\n * submission event.\n *\n * ### Example\n *\n * In this example, we create form controls for first name and last name.\n *\n * {\\@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: {\\@link ReactiveFormsModule}\n *\n *  \\@stable\n */\nvar FormGroupDirective = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](FormGroupDirective, _super);\n    /**\n     * @param {?} _validators\n     * @param {?} _asyncValidators\n     */\n    function FormGroupDirective(_validators, _asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._validators = _validators;\n        _this._asyncValidators = _asyncValidators;\n        _this._submitted = false;\n        _this.directives = [];\n        _this.form = ((null));\n        _this.ngSubmit = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"EventEmitter\"]();\n        return _this;\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    FormGroupDirective.prototype.ngOnChanges = function (changes) {\n        this._checkFormPresent();\n        if (changes.hasOwnProperty('form')) {\n            this._updateValidators();\n            this._updateDomValue();\n            this._updateRegistrations();\n        }\n    };\n    Object.defineProperty(FormGroupDirective.prototype, \"submitted\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._submitted; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormGroupDirective.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormGroupDirective.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.form; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormGroupDirective.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return []; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.addControl = function (dir) {\n        var /** @type {?} */ ctrl = this.form.get(dir.path);\n        setUpControl(ctrl, dir);\n        ctrl.updateValueAndValidity({ emitEvent: false });\n        this.directives.push(dir);\n        return ctrl;\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.getControl = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.removeControl = function (dir) { remove(this.directives, dir); };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.addFormGroup = function (dir) {\n        var /** @type {?} */ ctrl = this.form.get(dir.path);\n        setUpFormContainer(ctrl, dir);\n        ctrl.updateValueAndValidity({ emitEvent: false });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.removeFormGroup = function (dir) { };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.getFormGroup = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.addFormArray = function (dir) {\n        var /** @type {?} */ ctrl = this.form.get(dir.path);\n        setUpFormContainer(ctrl, dir);\n        ctrl.updateValueAndValidity({ emitEvent: false });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.removeFormArray = function (dir) { };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.getFormArray = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @param {?} value\n     * @return {?}\n     */\n    FormGroupDirective.prototype.updateModel = function (dir, value) {\n        var /** @type {?} */ ctrl = (this.form.get(dir.path));\n        ctrl.setValue(value);\n    };\n    /**\n     * @param {?} $event\n     * @return {?}\n     */\n    FormGroupDirective.prototype.onSubmit = function ($event) {\n        this._submitted = true;\n        this.ngSubmit.emit($event);\n        return false;\n    };\n    /**\n     * @return {?}\n     */\n    FormGroupDirective.prototype.onReset = function () { this.resetForm(); };\n    /**\n     * @param {?=} value\n     * @return {?}\n     */\n    FormGroupDirective.prototype.resetForm = function (value) {\n        if (value === void 0) { value = undefined; }\n        this.form.reset(value);\n        this._submitted = false;\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroupDirective.prototype._updateDomValue = function () {\n        var _this = this;\n        this.directives.forEach(function (dir) {\n            var /** @type {?} */ newCtrl = _this.form.get(dir.path);\n            if (dir._control !== newCtrl) {\n                cleanUpControl(dir._control, dir);\n                if (newCtrl)\n                    setUpControl(newCtrl, dir);\n                dir._control = newCtrl;\n            }\n        });\n        this.form._updateTreeValidity({ emitEvent: false });\n    };\n    /**\n     * @return {?}\n     */\n    FormGroupDirective.prototype._updateRegistrations = function () {\n        var _this = this;\n        this.form._registerOnCollectionChange(function () { return _this._updateDomValue(); });\n        if (this._oldForm)\n            this._oldForm._registerOnCollectionChange(function () { });\n        this._oldForm = this.form;\n    };\n    /**\n     * @return {?}\n     */\n    FormGroupDirective.prototype._updateValidators = function () {\n        var /** @type {?} */ sync = composeValidators(this._validators);\n        this.form.validator = Validators.compose([/** @type {?} */ ((this.form.validator)), /** @type {?} */ ((sync))]);\n        var /** @type {?} */ async = composeAsyncValidators(this._asyncValidators);\n        this.form.asyncValidator = Validators.composeAsync([/** @type {?} */ ((this.form.asyncValidator)), /** @type {?} */ ((async))]);\n    };\n    /**\n     * @return {?}\n     */\n    FormGroupDirective.prototype._checkFormPresent = function () {\n        if (!this.form) {\n            ReactiveErrors.missingFormException();\n        }\n    };\n    return FormGroupDirective;\n}(ControlContainer));\nFormGroupDirective.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: '[formGroup]',\n                providers: [formDirectiveProvider$1],\n                host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n                exportAs: 'ngForm'\n            },] },\n];\n/**\n * @nocollapse\n */\nFormGroupDirective.ctorParameters = function () { return [\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_ASYNC_VALIDATORS,] },] },\n]; };\nFormGroupDirective.propDecorators = {\n    'form': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['formGroup',] },],\n    'ngSubmit': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Output\"] },],\n};\n/**\n * @template T\n * @param {?} list\n * @param {?} el\n * @return {?}\n */\nfunction remove(list, el) {\n    var /** @type {?} */ index = list.indexOf(el);\n    if (index > -1) {\n        list.splice(index, 1);\n    }\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 */\nvar formGroupNameProvider = {\n    provide: ControlContainer,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return FormGroupName; })\n};\n/**\n * \\@whatItDoes Syncs a nested {\\@link FormGroup} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive can only be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested {\\@link FormGroup} you want to link, and\n * will look for a {\\@link FormGroup} registered with that name in the parent\n * {\\@link FormGroup} instance you passed into {\\@link FormGroupDirective}.\n *\n * Nested form groups can come in handy when you want to validate a sub-group of a\n * form separately from the rest or when you'd like to group the values of certain\n * controls into their own nested object.\n *\n * **Access the group**: You can access the associated {\\@link FormGroup} using the\n * {\\@link AbstractControl#get} method. Ex: `this.form.get('name')`.\n *\n * You can also access individual controls within the group using dot syntax.\n * Ex: `this.form.get('name.first')`\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormGroup}. See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set the value**: You can set an initial value for each child control when instantiating\n * the {\\@link FormGroup}, or you can set it programmatically later using\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the group, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event.  You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * {\\@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nvar FormGroupName = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](FormGroupName, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     */\n    function FormGroupName(parent, validators, asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._parent = parent;\n        _this._validators = validators;\n        _this._asyncValidators = asyncValidators;\n        return _this;\n    }\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroupName.prototype._checkParentType = function () {\n        if (_hasInvalidParent(this._parent)) {\n            ReactiveErrors.groupParentException();\n        }\n    };\n    return FormGroupName;\n}(AbstractFormGroupDirective));\nFormGroupName.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[formGroupName]', providers: [formGroupNameProvider] },] },\n];\n/**\n * @nocollapse\n */\nFormGroupName.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"SkipSelf\"] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_ASYNC_VALIDATORS,] },] },\n]; };\nFormGroupName.propDecorators = {\n    'name': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['formGroupName',] },],\n};\nvar formArrayNameProvider = {\n    provide: ControlContainer,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return FormArrayName; })\n};\n/**\n * \\@whatItDoes Syncs a nested {\\@link FormArray} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive is designed to be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested {\\@link FormArray} you want to link, and\n * will look for a {\\@link FormArray} registered with that name in the parent\n * {\\@link FormGroup} instance you passed into {\\@link FormGroupDirective}.\n *\n * Nested form arrays can come in handy when you have a group of form controls but\n * you're not sure how many there will be. Form arrays allow you to create new\n * form controls dynamically.\n *\n * **Access the array**: You can access the associated {\\@link FormArray} using the\n * {\\@link AbstractControl#get} method on the parent {\\@link FormGroup}.\n * Ex: `this.form.get('cities')`.\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormArray}. See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set the value**: You can set an initial value for each child control when instantiating\n * the {\\@link FormArray}, or you can set the value programmatically later using the\n * {\\@link FormArray}'s {\\@link AbstractControl#setValue} or {\\@link AbstractControl#patchValue}\n * methods.\n *\n * **Listen to value**: If you want to listen to changes in the value of the array, you can\n * subscribe to the {\\@link FormArray}'s {\\@link AbstractControl#valueChanges} event.  You can also\n * listen to its {\\@link AbstractControl#statusChanges} event to be notified when the validation\n * status is re-calculated.\n *\n * **Add new controls**: You can add new controls to the {\\@link FormArray} dynamically by\n * calling its {\\@link FormArray#push} method.\n *  Ex: `this.form.get('cities').push(new FormControl());`\n *\n * ### Example\n *\n * {\\@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nvar FormArrayName = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](FormArrayName, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     */\n    function FormArrayName(parent, validators, asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._parent = parent;\n        _this._validators = validators;\n        _this._asyncValidators = asyncValidators;\n        return _this;\n    }\n    /**\n     * @return {?}\n     */\n    FormArrayName.prototype.ngOnInit = function () {\n        this._checkParentType(); /** @type {?} */\n        ((this.formDirective)).addFormArray(this);\n    };\n    /**\n     * @return {?}\n     */\n    FormArrayName.prototype.ngOnDestroy = function () {\n        if (this.formDirective) {\n            this.formDirective.removeFormArray(this);\n        }\n    };\n    Object.defineProperty(FormArrayName.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return ((this.formDirective)).getFormArray(this); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormArrayName.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return this._parent ? (this._parent.formDirective) : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormArrayName.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return controlPath(this.name, this._parent); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormArrayName.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._validators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormArrayName.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return composeAsyncValidators(this._asyncValidators);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    FormArrayName.prototype._checkParentType = function () {\n        if (_hasInvalidParent(this._parent)) {\n            ReactiveErrors.arrayParentException();\n        }\n    };\n    return FormArrayName;\n}(ControlContainer));\nFormArrayName.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[formArrayName]', providers: [formArrayNameProvider] },] },\n];\n/**\n * @nocollapse\n */\nFormArrayName.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"SkipSelf\"] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_ASYNC_VALIDATORS,] },] },\n]; };\nFormArrayName.propDecorators = {\n    'name': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['formArrayName',] },],\n};\n/**\n * @param {?} parent\n * @return {?}\n */\nfunction _hasInvalidParent(parent) {\n    return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n        !(parent instanceof FormArrayName);\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 */\nvar controlNameBinding = {\n    provide: NgControl,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return FormControlName; })\n};\n/**\n * \\@whatItDoes Syncs a {\\@link FormControl} in an existing {\\@link FormGroup} to a form control\n * element by name.\n *\n * In other words, this directive ensures that any values written to the {\\@link FormControl}\n * instance programmatically will be written to the DOM element (model -> view). Conversely,\n * any values written to the DOM element through user input will be reflected in the\n * {\\@link FormControl} instance (view -> model).\n *\n * \\@howToUse\n *\n * This directive is designed to be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the {\\@link FormControl} instance you want to\n * link, and will look for a {\\@link FormControl} registered with that name in the\n * closest {\\@link FormGroup} or {\\@link FormArray} above it.\n *\n * **Access the control**: You can access the {\\@link FormControl} associated with\n * this directive by using the {\\@link AbstractControl#get get} method.\n * Ex: `this.form.get('first');`\n *\n * **Get value**: the `value` property is always synced and available on the {\\@link FormControl}.\n * See a full list of available properties in {\\@link AbstractControl}.\n *\n *  **Set value**: You can set an initial value for the control when instantiating the\n *  {\\@link FormControl}, or you can set it programmatically later using\n *  {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the control, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event.  You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * In this example, we create form controls for first name and last name.\n *\n * {\\@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: {\\@link RadioControlValueAccessor}\n * * Selects: {\\@link SelectControlValueAccessor}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: {\\@link ReactiveFormsModule}\n *\n *  \\@stable\n */\nvar FormControlName = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](FormControlName, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     * @param {?} valueAccessors\n     */\n    function FormControlName(parent, validators, asyncValidators, valueAccessors) {\n        var _this = _super.call(this) || this;\n        _this._added = false;\n        _this.update = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"EventEmitter\"]();\n        _this._parent = parent;\n        _this._rawValidators = validators || [];\n        _this._rawAsyncValidators = asyncValidators || [];\n        _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n        return _this;\n    }\n    Object.defineProperty(FormControlName.prototype, \"isDisabled\", {\n        /**\n         * @param {?} isDisabled\n         * @return {?}\n         */\n        set: function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    FormControlName.prototype.ngOnChanges = function (changes) {\n        if (!this._added)\n            this._setUpControl();\n        if (isPropertyUpdated(changes, this.viewModel)) {\n            this.viewModel = this.model;\n            this.formDirective.updateModel(this, this.model);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    FormControlName.prototype.ngOnDestroy = function () {\n        if (this.formDirective) {\n            this.formDirective.removeControl(this);\n        }\n    };\n    /**\n     * @param {?} newValue\n     * @return {?}\n     */\n    FormControlName.prototype.viewToModelUpdate = function (newValue) {\n        this.viewModel = newValue;\n        this.update.emit(newValue);\n    };\n    Object.defineProperty(FormControlName.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return controlPath(this.name, /** @type {?} */ ((this._parent))); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlName.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._parent ? this._parent.formDirective : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlName.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._rawValidators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlName.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return ((composeAsyncValidators(this._rawAsyncValidators)));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlName.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._control; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    FormControlName.prototype._checkParentType = function () {\n        if (!(this._parent instanceof FormGroupName) &&\n            this._parent instanceof AbstractFormGroupDirective) {\n            ReactiveErrors.ngModelGroupException();\n        }\n        else if (!(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n            !(this._parent instanceof FormArrayName)) {\n            ReactiveErrors.controlParentException();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    FormControlName.prototype._setUpControl = function () {\n        this._checkParentType();\n        this._control = this.formDirective.addControl(this);\n        if (this.control.disabled && ((this.valueAccessor)).setDisabledState) {\n            ((((this.valueAccessor)).setDisabledState))(true);\n        }\n        this._added = true;\n    };\n    return FormControlName;\n}(NgControl));\nFormControlName.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{ selector: '[formControlName]', providers: [controlNameBinding] },] },\n];\n/**\n * @nocollapse\n */\nFormControlName.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Host\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"SkipSelf\"] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_ASYNC_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Self\"] }, { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Inject\"], args: [NG_VALUE_ACCESSOR,] },] },\n]; };\nFormControlName.propDecorators = {\n    'name': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['formControlName',] },],\n    'model': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['ngModel',] },],\n    'update': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Output\"], args: ['ngModelChange',] },],\n    'isDisabled': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"], args: ['disabled',] },],\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 */\nvar REQUIRED_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return RequiredValidator; }),\n    multi: true\n};\nvar CHECKBOX_REQUIRED_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return CheckboxRequiredValidator; }),\n    multi: true\n};\n/**\n * A Directive that adds the `required` validator to any controls marked with the\n * `required` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * \\@stable\n */\nvar RequiredValidator = (function () {\n    function RequiredValidator() {\n    }\n    Object.defineProperty(RequiredValidator.prototype, \"required\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._required; },\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            this._required = value != null && value !== false && \"\" + value !== 'false';\n            if (this._onChange)\n                this._onChange();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    RequiredValidator.prototype.validate = function (c) {\n        return this.required ? Validators.required(c) : null;\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RequiredValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    return RequiredValidator;\n}());\nRequiredValidator.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n                providers: [REQUIRED_VALIDATOR],\n                host: { '[attr.required]': 'required ? \"\" : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nRequiredValidator.ctorParameters = function () { return []; };\nRequiredValidator.propDecorators = {\n    'required': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * \\@experimental\n */\nvar CheckboxRequiredValidator = (function (_super) {\n    __WEBPACK_IMPORTED_MODULE_0_tslib__[\"a\" /* __extends */](CheckboxRequiredValidator, _super);\n    function CheckboxRequiredValidator() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    CheckboxRequiredValidator.prototype.validate = function (c) {\n        return this.required ? Validators.requiredTrue(c) : null;\n    };\n    return CheckboxRequiredValidator;\n}(RequiredValidator));\nCheckboxRequiredValidator.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n                providers: [CHECKBOX_REQUIRED_VALIDATOR],\n                host: { '[attr.required]': 'required ? \"\" : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nCheckboxRequiredValidator.ctorParameters = function () { return []; };\n/**\n * Provider which adds {\\@link EmailValidator} to {\\@link NG_VALIDATORS}.\n */\nvar EMAIL_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return EmailValidator; }),\n    multi: true\n};\n/**\n * A Directive that adds the `email` validator to controls marked with the\n * `email` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * \\@experimental\n */\nvar EmailValidator = (function () {\n    function EmailValidator() {\n    }\n    Object.defineProperty(EmailValidator.prototype, \"email\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            this._enabled = value === '' || value === true || value === 'true';\n            if (this._onChange)\n                this._onChange();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    EmailValidator.prototype.validate = function (c) {\n        return this._enabled ? Validators.email(c) : null;\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    EmailValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    return EmailValidator;\n}());\nEmailValidator.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n                providers: [EMAIL_VALIDATOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nEmailValidator.ctorParameters = function () { return []; };\nEmailValidator.propDecorators = {\n    'email': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * Provider which adds {\\@link MinLengthValidator} to {\\@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {\\@example common/forms/ts/validators/validators.ts region='min'}\n */\nvar MIN_LENGTH_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return MinLengthValidator; }),\n    multi: true\n};\n/**\n * A directive which installs the {\\@link MinLengthValidator} for any `formControlName`,\n * `formControl`, or control with `ngModel` that also has a `minlength` attribute.\n *\n * \\@stable\n */\nvar MinLengthValidator = (function () {\n    function MinLengthValidator() {\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    MinLengthValidator.prototype.ngOnChanges = function (changes) {\n        if ('minlength' in changes) {\n            this._createValidator();\n            if (this._onChange)\n                this._onChange();\n        }\n    };\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    MinLengthValidator.prototype.validate = function (c) {\n        return this.minlength == null ? null : this._validator(c);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    MinLengthValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    /**\n     * @return {?}\n     */\n    MinLengthValidator.prototype._createValidator = function () {\n        this._validator = Validators.minLength(parseInt(this.minlength, 10));\n    };\n    return MinLengthValidator;\n}());\nMinLengthValidator.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n                providers: [MIN_LENGTH_VALIDATOR],\n                host: { '[attr.minlength]': 'minlength ? minlength : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nMinLengthValidator.ctorParameters = function () { return []; };\nMinLengthValidator.propDecorators = {\n    'minlength': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\n/**\n * Provider which adds {\\@link MaxLengthValidator} to {\\@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {\\@example common/forms/ts/validators/validators.ts region='max'}\n */\nvar MAX_LENGTH_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return MaxLengthValidator; }),\n    multi: true\n};\n/**\n * A directive which installs the {\\@link MaxLengthValidator} for any `formControlName,\n * `formControl`,\n * or control with `ngModel` that also has a `maxlength` attribute.\n *\n * \\@stable\n */\nvar MaxLengthValidator = (function () {\n    function MaxLengthValidator() {\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    MaxLengthValidator.prototype.ngOnChanges = function (changes) {\n        if ('maxlength' in changes) {\n            this._createValidator();\n            if (this._onChange)\n                this._onChange();\n        }\n    };\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    MaxLengthValidator.prototype.validate = function (c) {\n        return this.maxlength != null ? this._validator(c) : null;\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    MaxLengthValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    /**\n     * @return {?}\n     */\n    MaxLengthValidator.prototype._createValidator = function () {\n        this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n    };\n    return MaxLengthValidator;\n}());\nMaxLengthValidator.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n                providers: [MAX_LENGTH_VALIDATOR],\n                host: { '[attr.maxlength]': 'maxlength ? maxlength : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nMaxLengthValidator.ctorParameters = function () { return []; };\nMaxLengthValidator.propDecorators = {\n    'maxlength': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\n};\nvar PATTERN_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_1__angular_core__[\"forwardRef\"])(function () { return PatternValidator; }),\n    multi: true\n};\n/**\n * A Directive that adds the `pattern` validator to any controls marked with the\n * `pattern` attribute, via the {\\@link NG_VALIDATORS} binding. Uses attribute value\n * as the regex to validate Control value against.  Follows pattern attribute\n * semantics; i.e. regex must match entire Control value.\n *\n * ### Example\n *\n * ```\n * <input [name]=\"fullName\" pattern=\"[a-zA-Z ]*\" ngModel>\n * ```\n * \\@stable\n */\nvar PatternValidator = (function () {\n    function PatternValidator() {\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    PatternValidator.prototype.ngOnChanges = function (changes) {\n        if ('pattern' in changes) {\n            this._createValidator();\n            if (this._onChange)\n                this._onChange();\n        }\n    };\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    PatternValidator.prototype.validate = function (c) { return this._validator(c); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    PatternValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    /**\n     * @return {?}\n     */\n    PatternValidator.prototype._createValidator = function () { this._validator = Validators.pattern(this.pattern); };\n    return PatternValidator;\n}());\nPatternValidator.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n                providers: [PATTERN_VALIDATOR],\n                host: { '[attr.pattern]': 'pattern ? pattern : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nPatternValidator.ctorParameters = function () { return []; };\nPatternValidator.propDecorators = {\n    'pattern': [{ type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Input\"] },],\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 * \\@whatItDoes Creates an {\\@link AbstractControl} from a user-specified configuration.\n *\n * It is essentially syntactic sugar that shortens the `new FormGroup()`,\n * `new FormControl()`, and `new FormArray()` boilerplate that can build up in larger\n * forms.\n *\n * \\@howToUse\n *\n * To use, inject `FormBuilder` into your component class. You can then call its methods\n * directly.\n *\n * {\\@example forms/ts/formBuilder/form_builder_example.ts region='Component'}\n *\n *  * **npm package**: `\\@angular/forms`\n *\n *  * **NgModule**: {\\@link ReactiveFormsModule}\n *\n * \\@stable\n */\nvar FormBuilder = (function () {\n    function FormBuilder() {\n    }\n    /**\n     * Construct a new {\\@link FormGroup} with the given map of configuration.\n     * Valid keys for the `extra` parameter map are `validator` and `asyncValidator`.\n     *\n     * See the {\\@link FormGroup} constructor for more details.\n     * @param {?} controlsConfig\n     * @param {?=} extra\n     * @return {?}\n     */\n    FormBuilder.prototype.group = function (controlsConfig, extra) {\n        if (extra === void 0) { extra = null; }\n        var /** @type {?} */ controls = this._reduceControls(controlsConfig);\n        var /** @type {?} */ validator = extra != null ? extra['validator'] : null;\n        var /** @type {?} */ asyncValidator = extra != null ? extra['asyncValidator'] : null;\n        return new FormGroup(controls, validator, asyncValidator);\n    };\n    /**\n     * Construct a new {\\@link FormControl} with the given `formState`,`validator`, and\n     * `asyncValidator`.\n     *\n     * `formState` can either be a standalone value for the form control or an object\n     * that contains both a value and a disabled status.\n     *\n     * @param {?} formState\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     * @return {?}\n     */\n    FormBuilder.prototype.control = function (formState, validator, asyncValidator) {\n        return new FormControl(formState, validator, asyncValidator);\n    };\n    /**\n     * Construct a {\\@link FormArray} from the given `controlsConfig` array of\n     * configuration, with the given optional `validator` and `asyncValidator`.\n     * @param {?} controlsConfig\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     * @return {?}\n     */\n    FormBuilder.prototype.array = function (controlsConfig, validator, asyncValidator) {\n        var _this = this;\n        var /** @type {?} */ controls = controlsConfig.map(function (c) { return _this._createControl(c); });\n        return new FormArray(controls, validator, asyncValidator);\n    };\n    /**\n     * \\@internal\n     * @param {?} controlsConfig\n     * @return {?}\n     */\n    FormBuilder.prototype._reduceControls = function (controlsConfig) {\n        var _this = this;\n        var /** @type {?} */ controls = {};\n        Object.keys(controlsConfig).forEach(function (controlName) {\n            controls[controlName] = _this._createControl(controlsConfig[controlName]);\n        });\n        return controls;\n    };\n    /**\n     * \\@internal\n     * @param {?} controlConfig\n     * @return {?}\n     */\n    FormBuilder.prototype._createControl = function (controlConfig) {\n        if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n            controlConfig instanceof FormArray) {\n            return controlConfig;\n        }\n        else if (Array.isArray(controlConfig)) {\n            var /** @type {?} */ value = controlConfig[0];\n            var /** @type {?} */ validator = controlConfig.length > 1 ? controlConfig[1] : null;\n            var /** @type {?} */ asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;\n            return this.control(value, validator, asyncValidator);\n        }\n        else {\n            return this.control(controlConfig);\n        }\n    };\n    return FormBuilder;\n}());\nFormBuilder.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nFormBuilder.ctorParameters = function () { return []; };\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 * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n/**\n * \\@stable\n */\nvar VERSION = new __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Version\"]('4.4.7');\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 * \\@whatItDoes Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * \\@experimental\n */\nvar NgNoValidate = (function () {\n    function NgNoValidate() {\n    }\n    return NgNoValidate;\n}());\nNgNoValidate.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"Directive\"], args: [{\n                selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n                host: { 'novalidate': '' },\n            },] },\n];\n/**\n * @nocollapse\n */\nNgNoValidate.ctorParameters = function () { return []; };\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 */\nvar SHARED_FORM_DIRECTIVES = [\n    NgNoValidate,\n    NgSelectOption,\n    NgSelectMultipleOption,\n    DefaultValueAccessor,\n    NumberValueAccessor,\n    RangeValueAccessor,\n    CheckboxControlValueAccessor,\n    SelectControlValueAccessor,\n    SelectMultipleControlValueAccessor,\n    RadioControlValueAccessor,\n    NgControlStatus,\n    NgControlStatusGroup,\n    RequiredValidator,\n    MinLengthValidator,\n    MaxLengthValidator,\n    PatternValidator,\n    CheckboxRequiredValidator,\n    EmailValidator,\n];\nvar TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];\nvar REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\nvar InternalFormsSharedModule = (function () {\n    function InternalFormsSharedModule() {\n    }\n    return InternalFormsSharedModule;\n}());\nInternalFormsSharedModule.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"NgModule\"], args: [{\n                declarations: SHARED_FORM_DIRECTIVES,\n                exports: SHARED_FORM_DIRECTIVES,\n            },] },\n];\n/**\n * @nocollapse\n */\nInternalFormsSharedModule.ctorParameters = function () { return []; };\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 * The ng module for forms.\n * \\@stable\n */\nvar FormsModule = (function () {\n    function FormsModule() {\n    }\n    return FormsModule;\n}());\nFormsModule.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"NgModule\"], args: [{\n                declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n                providers: [RadioControlRegistry],\n                exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n            },] },\n];\n/**\n * @nocollapse\n */\nFormsModule.ctorParameters = function () { return []; };\n/**\n * The ng module for reactive forms.\n * \\@stable\n */\nvar ReactiveFormsModule = (function () {\n    function ReactiveFormsModule() {\n    }\n    return ReactiveFormsModule;\n}());\nReactiveFormsModule.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_1__angular_core__[\"NgModule\"], args: [{\n                declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n                providers: [FormBuilder, RadioControlRegistry],\n                exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n            },] },\n];\n/**\n * @nocollapse\n */\nReactiveFormsModule.ctorParameters = function () { return []; };\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 * @module\n * @description\n * This module is used for handling user input, by defining and building a {@link FormGroup} that\n * consists of {@link FormControl} objects, and mapping them onto the DOM. {@link FormControl}\n * objects can then be used to read information from the form DOM elements.\n *\n * Forms providers are not included in default providers; you must import these providers\n * explicitly.\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 * @module\n * @description\n * Entry point for all public APIs of the forms package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n/**\n * Generated bundle index. Do not edit.\n */\n\n//# sourceMappingURL=forms.es5.js.map\n\n\n/***/ }),\n\n/***/ 90:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return TabService; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__);\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\nvar TabService = (function () {\n    function TabService() {\n        this.navigatedTo = new __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__[\"Subject\"]();\n        this.onNavigatedTo$ = this.navigatedTo.asObservable();\n    }\n    TabService.prototype.onNavigatedTo = function (tabId) {\n        this.navigatedTo.next(tabId);\n    };\n    TabService = __decorate([\n        Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n        __metadata(\"design:paramtypes\", [])\n    ], TabService);\n    return TabService;\n}());\n\n\n\n/***/ })\n\n},[1336]);\n\n\n// WEBPACK FOOTER //\n// js/entry.b2293883c5a18e5bdfd4.js","module.exports = {\"reducingMappings\":{\"CD\":{\"CD-KG\":\"CD-BN\",\"CD-KL\":\"CD-BN\",\"CD-MN\":\"CD-BN\",\"CD-KS\":\"CD-KW\",\"CD-KC\":\"CD-KW\",\"CD-KE\":\"CD-KE\",\"CD-LO\":\"CD-KE\",\"CD-SA\":\"CD-KE\",\"CD-IT\":\"CD-OR\",\"CD-HU\":\"CD-OR\",\"CD-TO\":\"CD-OR\",\"CD-BU\":\"CD-OR\",\"CD-NU\":\"CD-EQ\",\"CD-MO\":\"CD-EQ\",\"CD-SU\":\"CD-EQ\",\"CD-EQ\":\"CD-EQ\",\"CD-TU\":\"CD-EQ\",\"CD-TA\":\"CD-KA\",\"CD-HL\":\"CD-KA\",\"CD-LU\":\"CD-KA\",\"CD-HK\":\"CD-KA\"},\"CN\":{\"CN-NM\":\"CN-15\",\"CN-GX\":\"CN-45\",\"CN-XZ\":\"CN-54\",\"CN-NX\":\"CN-64\",\"CN-XJ\":\"CN-65\",\"CN-BJ\":\"CN-11\",\"CN-TJ\":\"CN-12\",\"CN-SH\":\"CN-31\",\"CN-CQ\":\"CN-50\",\"CN-HE\":\"CN-13\",\"CN-SX\":\"CN-14\",\"CN-LN\":\"CN-21\",\"CN-JL\":\"CN-22\",\"CN-HL\":\"CN-23\",\"CN-JS\":\"CN-32\",\"CN-ZJ\":\"CN-33\",\"CN-AH\":\"CN-34\",\"CN-FJ\":\"CN-35\",\"CN-JX\":\"CN-36\",\"CN-SD\":\"CN-37\",\"CN-HA\":\"CN-41\",\"CN-HB\":\"CN-42\",\"CN-HN\":\"CN-43\",\"CN-GD\":\"CN-44\",\"CN-HI\":\"CN-46\",\"CN-SC\":\"CN-51\",\"CN-GZ\":\"CN-52\",\"CN-YN\":\"CN-53\",\"CN-SN\":\"CN-61\",\"CN-GS\":\"CN-62\",\"CN-QH\":\"CN-63\",\"CN-TW\":\"CN-71\",\"CN-HK\":\"CN-91\",\"CN-MO\":\"CN-92\"},\"CZ\":{\"CZ-31\":\"CZ-JC\",\"CZ-64\":\"CZ-JM\",\"CZ-41\":\"CZ-KA\",\"CZ-52\":\"CZ-KR\",\"CZ-51\":\"CZ-LI\",\"CZ-80\":\"CZ-O\",\"CZ-71\":\"CZ-OL\",\"CZ-53\":\"CZ-PA\",\"CZ-32\":\"CZ-PL\",\"CZ-20\":\"CZ-ST\",\"CZ-42\":\"CZ-US\",\"CZ-63\":\"CZ-VY\",\"CZ-72\":\"CZ-ZL\",\"CZ-10\":\"CZ-PR\"},\"LU\":{\"LU-CL\":\"LU-D\",\"LU-DI\":\"LU-D\",\"LU-RD\":\"LU-D\",\"LU-VD\":\"LU-D\",\"LU-WI\":\"LU-D\",\"LU-EC\":\"LU-G\",\"LU-GR\":\"LU-G\",\"LU-RM\":\"LU-G\",\"LU-CA\":\"LU-L\",\"LU-ES\":\"LU-L\",\"LU-LU\":\"LU-L\",\"LU-ME\":\"LU-L\"}},\"sharingMapping\":{\"FR\":{\"FR-ARA\":[\"FR-C\",\"FR-V\"],\"FR-BFC\":[\"FR-D\",\"FR-I\"],\"FR-BRE\":[\"FR-E\"],\"FR-COR\":[\"FR-H\"],\"FR-CVL\":[\"FR-F\"],\"FR-HDF\":[\"FR-O\",\"FR-S\"],\"FR-GES\":[\"FR-A\",\"FR-G\",\"FR-M\"],\"FR-IDF\":[\"FR-J\"],\"FR-OCC\":[\"FR-K\",\"FR-N\"],\"FR-NAQ\":[\"FR-B\",\"FR-L\",\"FR-T\"],\"FR-NOR\":[\"FR-P\",\"FR-Q\"],\"FR-PAC\":[\"FR-U\"],\"FR-PDL\":[\"FR-R\"]},\"IE\":{\"IE-C\":[\"IE-G\",\"IE-LM\",\"IE-MO\",\"IE-RN\",\"IE-SO\"],\"IE-L\":[\"IE-CW\",\"IE-D\",\"IE-KE\",\"IE-KK\",\"IE-LD\",\"IE-LH\",\"IE-LS\",\"IE-MH\",\"IE-OY\",\"IE-WH\",\"IE-WW\",\"IE-WX\"],\"IE-M\":[\"IE-CE\",\"IE-CO\",\"IE-KY\",\"IE-LK\",\"IE-TA\",\"IE-WD\"],\"IE-U\":[\"IE-CN\",\"IE-DL\",\"IE-MN\"]}},\"skippingSet\":{\"AS\":true,\"BM\":true,\"CI\":true,\"CK\":true,\"HK\":true,\"KE\":true,\"MP\":true,\"MV\":true,\"NC\":true,\"OM\":true,\"PF\":true,\"PM\":true,\"PS\":true,\"RS\":true,\"SG\":true,\"SJ\":true,\"TJ\":true,\"TK\":true,\"TV\":true,\"TW\":true,\"VI\":true,\"WF\":true}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/geo/geo.country.view.regions.fix.json\n// module id = 107\n// module chunks = 1","/**\n * Created by mthk on 04/10/16.\n */\n\n/** Error */\nexport type ErrorResponse = { detail: string, error: any };\n\n/** Login */\nexport type LoginRequest = {\n\temail: string;\n\tpassword: string;\n};\n\nexport type LoginResponse = {\n\taccess_token: string;\n};\n\n/** User profile */\nexport type UserRequest = {\n\tfirst_name: string | null;\n\tlast_name: string | null;\n\temail: string | null;\n\thas_gdpr_info_shown: boolean;\n\thas_agree_for_newsletter: boolean;\n};\n\nexport interface UserResponse extends AccountUser {\n\tcreated_at: number;\n\tupdated_at: number;\n\thas_gdpr_info_shown: boolean;\n\thas_agree_for_newsletter: boolean;\n\tdefault_account: {\n\t\tid: number;\n\t\tname: string;\n\t\tcreated_at: number;\n\t\towner: string;\n\t\tproducts: AccountProduct[];\n\t\tstats_modules: string[];\n\t};\n}\n\n\n/*User profile - additional details*/\nexport type AccountResponse = {\n\tid: number;\n\tname: string;\n\towner: AccountUser;\n\tdetails: AccountDetails;\n\tmembers: [AccountUser];\n};\n\nexport interface AccountDetails {\n\tcompany_name: string | null;\n\taddress: string | null;\n\tcity: string | null;\n\tstate: string | null;\n\tpostal_code: string | null;\n\tcountry: string | null;\n\tphone_number: string | null;\n\ttax_no: string | null;\n}\n\nexport interface AccountUser {\n\tid: number;\n\tfirst_name: string;\n\tlast_name: string;\n\temail: string;\n\tcompany_name_cache: string | null;\n}\n\nexport type AccountProductItemInfo = {\n\tid: number;\n\tname: string;\n};\n\nexport type AccountPlanItemInfo = {\n\tid: number;\n\tname: string;\n\tdescription: string;\n\tlevel: number;\n\tstatistics_type: string;\n};\n\nexport type AccountProduct = {\n\tid: string;\n\tproduct_plan: AccountPlanItemInfo;\n\tproduct: AccountProductItemInfo;\n\tbase_price: PriceDetail;\n\tusage_unit_price: PriceDetail;\n\tbase_views_size: number;\n\tusage_unit_size: number;\n\tsla_info: string;\n\thas_statistics: boolean;\n\thas_ads_support: boolean;\n\thas_drm_support: boolean;\n\tcreated_at: number;\n\tupdated_at: number;\n\tnext_billing_at: number;\n\tbt_pm_token: string;\n\tstatus: string;\n\t//additional properties\n\tcurrent_views?: number;\n\tcurrent_total?: number;\n\tpayment_method?: PaymentMethod;\n\tusage_stats?: any;\n\tstatistics_type: string;\n};\n\nexport type AccountProductsListResponse = {\n\tcount: number;\n\tresults: AccountProduct[];\n};\n\n/** Country */\nexport type Country = {\n\tcode: string;\n\tname: string;\n};\n\n/** Player Configurator Profile */\nexport interface PlayerModel extends PlayerReadResponse {\n\tselected?: boolean;\n\tlatest_webbuild: {\n\t\tcreated_at: number;\n\t\tid: number;\n\t\tzip_url: string;\n\t\tplayer_js_url: string;\n\t};\n\t// Support field for identifying, when object was loaded (for caching).\n\tloaded_at?: number;\n}\n\nexport type PlayerListResponse = {\n\tcount: number;\n\tresults: PlayerModel[];\n};\n\nexport type PlayerConfiguratorPlugin = {\n\tname: string;\n\tpath: string;\n\ttype: string\n\tdefaultValue?: any | null;\n\ttitle?: string[];\n\tgroup?: string[];\n\trange?: any[];\n\trangestep?: number[];\n\tvalues?: any[];\n\tsinglechoice?: boolean;\n\tmultichoice?: boolean;\n\tchecked?: boolean;\n\thidden?: boolean;\n\tdescription?: string;\n\tdocsLink?: string;\n\tchildren?: PlayerConfiguratorPlugin[];\n\t///////\n\tvalue?: any;\n};\n\nexport type PlayerConfiguratorResponse = PlayerConfiguratorPlugin[];\n\nexport type ApiVersion2 = {\n\tapi_version: '2';\n}\n\nexport function isPlayerV2(d?: any): boolean { return d != null && 'api_version' in d && d.api_version === '2'; }\n\nexport type PlayerCreateRequest = {\n\tname: string;\n\tconf_json: string;\n\tapi_version?: string;\n\tcreated_at?: number;\n\tupdated_at?: number;\n}\nexport type PlayerCreateRequestV2 = PlayerCreateRequest & ApiVersion2;\n\nexport type PlayerReadResponse = {\n\tid: number;\n\tconf_json: string;\n\tname: string;\n\tembed_player_page_url: string;\n\tcreated_at?: number;\n\tupdated_at?: number;\n\taccount: number;\n\tapi_version: string | null;\n};\nexport type PlayerReadResponseV2 = PlayerReadResponse & ApiVersion2 & {\n\tlatest_webbuild?: ApiVersion2 & {\n\t\tcreated_at: number;\n\t\tid: number;\n\t\tplayer_js_url: string;\n\t}\n};\nexport function isPlayerReadResponseV2(d?: any): d is PlayerReadResponseV2 { return isPlayerV2(d); }\n\nexport type PlayerBuild = {\n\tcommit_id: string;\n\tcreated_at: number;\n\tid: number;\n\tversion: string;\n\tzip_url: string;\n\tactive?: boolean;\n\tconf_json?: string;\n\tplayer?: number;\n};\n\nexport type PlayerBuildResponse = {\n\tplayerVersions: {\n\t\tcount: number;\n\t\tresults: Array<PlayerBuild>;\n\t}\n};\n\nexport interface ProductPlan {\n\tid: number;\n\tname: string;\n\tdescription: string;\n\tbase_price: PriceDetail;\n\tusage_unit_price: PriceDetail;\n\tbase_views_size: number;\n\tusage_unit_size: number;\n\tis_contact_required: boolean;\n\tlevel: number;\n\tsla_info: string;\n\tnext_billing_at: number;\n\tbt_pm_token: string;\n\thas_statistics: boolean;\n\thas_ads_support: boolean;\n\thas_drm_support: boolean;\n\tstatistics_type: string;\n}\n\nexport type Product = {\n\tid: number;\n\tname: string;\n\tdescription: string;\n\tplans: [ProductPlan];\n};\n\nexport type ProductsListResponse = {\n\tcount: number;\n\tresults: Product[];\n};\n\nexport type PriceDetail = {\n\tgross: number;\n\tnet: number;\n\ttax: number | 'reverse-charge';\n\tcurrency: string;\n};\n\nexport type BtClientToken = {\n\tbt_client_token: string;\n};\n\nexport type SubscriptionOrdersResponse = {\n\tresults: [{\n\t\tid: number;\n\t\tcreated_at: number;\n\t\tupdated_at: number;\n\t\tstatus: number;\n\t\tstatus_label: string;\n\t\tnext_billing_at: number;\n\t\tselected_currency: string;\n\t\tbt_payment_method_token: string;\n\t\tbt_payment_method_nonce: string;\n\t\taccount: number\n\t\tproduct_plan: number;\n\t}],\n\tcount: number;\n};\n\nexport type SubscriptionOrderResponse = {\n\tid: number;\n\tcreated_at: number;\n\tupdated_at: number;\n\tstatus: number;\n\tstatus_label: string;\n\tnext_billing_at: number;\n\tselected_currency: string;\n\tbt_payment_method_token: string;\n\tbt_payment_method_nonce: string;\n\taccount: number\n\tproduct_plan: ProductPlan;\n};\n\nexport type SubscriptionOrderCreateRequest = {\n\tproduct_plan: number;\n};\n\nexport type SubOrderNonce = {\n\tbt_payment_method_nonce: string | null;\n\taccept: boolean;\n};\n\nexport type SubOrderPaymentMethod = {\n\tbt_payment_method_token: string;\n\taccept: boolean;\n};\n\n//Payment transactions Models\nexport type PaymentTransactionsList = {\n\tcount: number;\n\tresults: PaymentTransaction[];\n};\nexport type Invoice = {\n\tid: string;\n\tcompany_name: string;\n\taddress: string;\n\tcity: string;\n\tstate: string;\n\tpostal_code: string;\n\tcountry: string;\n\tphone_number: string;\n\ttax_no: string;\n\tdownload_url: string;\n};\n\nexport interface PaymentTransaction {\n\tid: number;\n\tcreated_at: number;\n\tupdated_at: number;\n\tamount: number;\n\tcurrency: string;\n\tstatus: string;\n\taccount_subscription: {\n\t\tproduct: {\n\t\t\tid: number;\n\t\t\tname: string;\n\t\t};\n\t\tid: number;\n\t\tproduct_plan: {\n\t\t\tlevel: number;\n\t\t\tid: number;\n\t\t\tname: string;\n\t\t};\n\t};\n\tinvoice: Invoice;\n}\n//Payment Methods Models\nexport type PaymentMethodsList = {\n\tcount: number;\n\tresults: PaymentMethod[];\n};\nexport interface PaymentMethod {\n\ttoken: string;\n\ttype: string;\n\timage_url: string;\n\tcreated_at: number;\n\tupdated_at: number;\n\tpay_pal_account: {\n\t\temail: string;\n\t};\n\tcredit_card: {\n\t\tcard_type: string;\n\t\tcardholder_name: string;\n\t\texpiration_year: number;\n\t\texpiration_month: number;\n\t\tmasked_number: string;\n\t};\n\tactive: boolean;\n\tvalid: boolean;\n\tdefault: boolean;\n}\n\nexport type PaymentMethodUpdateBody = {\n\ttoken: string;\n\tnonce: string;\n\tmake_default: boolean;\n};\n\nexport type ClientToken = {\n\tbt_client_token: string;\n};\n\nexport type ContactRequest = {\n\tmessage: string;\n\tproduct_plan_id: number;\n};\n\n/*User profile - additional details*/\nexport type AnalyticsAudienceHistoryResponseItem = {\n\tfrom: number; // Time range begin as timestamp.\n\tto: number;   // Time range end as timestamp (not included in range).\n\tusers: string; // It can be a big number not fitting into in32.\n\tviews: string; // It can be a big number not fitting into in32.\n\twatching_time: string; // Time spend on watching video by all users. Time in seconds.\n};\n\nexport type AnalyticsAudienceHistoryResponse = Array<AnalyticsAudienceHistoryResponseItem>;\n\n/* Analytics Technology data */\nexport type AccountTechStatsHistoryViewsRec = {\n\tfrom: number;\n\tto: number;\n\tviews: string;\n};\n\n// Browser family.\nexport type AccountTechStatsBrowserFamilySummaryRec = {\n\tbrowser_family_id: number;\n\tbrowser_family_name: string;\n\tviews: string;\n};\n\nexport type AccountTechStatsBrowserFamilyTopHistoryRec = {\n\tbrowser_family_id: number;\n\tbrowser_family_name: string;\n\thistory: Array<AccountTechStatsHistoryViewsRec>;\n};\n\nexport type AccountTechStatsBrowserFamilyReport = {\n\tsummary: Array<AccountTechStatsBrowserFamilySummaryRec>;\n\ttop_history: Array<AccountTechStatsBrowserFamilyTopHistoryRec>;\n};\n\n// OS family.\nexport type AccountTechStatsOsFamilySummaryRec = {\n\tos_family_id: number;\n\tos_family_name: string;\n\tviews: string;\n};\n\nexport type AccountTechStatsOsFamilyTopHistoryRec = {\n\tos_family_id: number;\n\tos_family_name: string;\n\thistory: Array<AccountTechStatsHistoryViewsRec>;\n};\n\nexport type AccountTechStatsOsFamilyReport = {\n\tsummary: Array<AccountTechStatsOsFamilySummaryRec>;\n\ttop_history: Array<AccountTechStatsOsFamilyTopHistoryRec>;\n};\n\n// Device type.\nexport type AccountTechStatsDeviceTypeSummaryRec = {\n\tdevice_type: number;\n\tdevice_type_name: string;\n\tviews: string;\n};\n\nexport type AccountTechStatsDeviceTypeTopHistoryRec = {\n\tdevice_type: number;\n\tdevice_type_name: string;\n\thistory: Array<AccountTechStatsHistoryViewsRec>;\n};\n\nexport type AccountTechStatsDeviceTypeReport = {\n\tsummary: Array<AccountTechStatsDeviceTypeSummaryRec>;\n\ttop_history: Array<AccountTechStatsDeviceTypeTopHistoryRec>;\n};\n\n// Whole report\nexport type AccountTechStatsReport = {\n\taccount_history: Array<AccountTechStatsHistoryViewsRec>;\n\tbrowser_family: AccountTechStatsBrowserFamilyReport;\n\tos_family: AccountTechStatsOsFamilyReport;\n\tdevice_type: AccountTechStatsDeviceTypeReport;\n};\n\n// Media metadata\nexport type MediaMetadata = {\n\tmaterial_id: string;\n\trelated_id: string;\n\ttitle: string;\n\tduration: number;\n\tcreated_at_ts: number;\n\ttags: Array<string>;\n\tis_live_stream: boolean;\n};\n\nexport type MediaMetadataListResponse = {\n\ttotal_records: number;\n\tpage: number;\n\tpage_size: number;\n\trecords: Array<MediaMetadata>;\n};\n\n// Top viewed media statistics.\nexport type TopViewedMediaMetadataListResponse = {\n\ttotal_records: number;\n\tpage: number;\n\tpage_size: number;\n\trecords: Array<TopViewedMediaRecord>;\n};\n\nexport type TopViewedMediaRecord = {\n\tposition: number;\n\tviews: string;\n\tmedia: MediaMetadata;\n};\n\n// Viewers num record.\nexport type ViewersNumResponse = {\n\tviewers_num: number;\n};\n\n// Top streamed media statistics.\nexport type TopStreamedMediaMetadataListResponse = {\n\ttotal_records: number;\n\tpage: number;\n\tpage_size: number;\n\trecords: Array<TopStreamedMediaRecord>;\n};\n\nexport type TopStreamedMediaRecord = {\n\tposition: number;\n\tstreams: string;\n\tmedia: MediaMetadata;\n};\n\n/* Analytics Media stats history */\nexport type MediaStatsHistoryViewsRec = {\n\tfrom: number;\n\tto: number;\n\tviews: string;\n\t// Optional property, available only when additional stats are enabled for media module.\n\tusers: string;\n};\n\n/* Geo stats */\nexport type GeoCountryRec = {\n\tname: string;\n\tcountry_code: string;\n};\n\nexport type GeoCountryStatsRec = {\n\tcountry: GeoCountryRec;\n\tviews: string;\n};\n\nexport type GeoRegionRec = {\n\tid: number;\n\tsubdiv_code: string;\n\tname: string;\n};\n\nexport type GeoRegionStatsRec = {\n\tregion: GeoRegionRec;\n\tviews: string;\n};\n\nexport type GeoCityRec = {\n\tid: number;\n\tname: string;\n};\n\nexport type GeoCityStatsRec = {\n\tcity: GeoCityRec;\n\tviews: string;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/model/api.model.ts","if (process.env.NODE_ENV == 'production')\n\tmodule.exports = require('./entry/prod.ts');\n\nif (process.env.NODE_ENV == 'development') \n   module.exports = require('./entry/dev.ts');\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/entry.ts","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { bootloader } from '@angularclass/bootloader';\n\nimport { AppModule } from './../app/app.module';\n\nexport function main() {\n   return platformBrowserDynamic().bootstrapModule(AppModule);\n}\n\nenableProdMode();\nbootloader(main);\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/entry/prod.ts","/*\n * @AngularClass\n */\nexport function bootloader(main) {\n    switch (document.readyState) {\n        case 'loading':\n            document.addEventListener('DOMContentLoaded', function () { return main(); });\n            break;\n        case 'interactive':\n        case 'complete':\n        default:\n            main();\n    }\n}\n//# sourceMappingURL=index.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angularclass/bootloader/esm/index.js\n// module id = null\n// module chunks = ","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Hot Module Replacement\n__export(require(\"./helpers\"));\n__export(require(\"./experimental\"));\n__export(require(\"./hmr\"));\n//# sourceMappingURL=index.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angularclass/hmr/dist/index.js\n// module id = 1338\n// module chunks = 1","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Hot Module Replacement\nfunction identity(val) {\n    return val;\n}\nfunction bootloader(main, before, after) {\n    if (typeof main === 'object') {\n        var _main = main.main;\n        before = main.before;\n        after = main.after;\n        main = _main;\n    }\n    before = before || identity;\n    after = after || identity;\n    var readyState = document.readyState;\n    function __domReadyHandler() {\n        document.removeEventListener('DOMContentLoaded', __domReadyHandler);\n        after(main(before(readyState)));\n    }\n    switch (readyState) {\n        case 'loading':\n            document.addEventListener('DOMContentLoaded', __domReadyHandler);\n            break;\n        case 'interactive':\n        case 'complete':\n        default:\n            after(main(before(readyState)));\n    }\n}\nexports.bootloader = bootloader;\n// create new host elements and remove the old elements\nfunction createNewHosts(cmps) {\n    var components = Array.prototype.map.call(cmps, function (componentNode) {\n        var newNode = document.createElement(componentNode.tagName);\n        var parentNode = componentNode.parentNode;\n        var currentDisplay = newNode.style.display;\n        newNode.style.display = 'none';\n        parentNode.insertBefore(newNode, componentNode);\n        function removeOldHost() {\n            newNode.style.display = currentDisplay;\n            try {\n                parentNode.removeChild(componentNode);\n            }\n            catch (e) { }\n        }\n        return removeOldHost;\n    });\n    return function removeOldHosts() {\n        components.forEach(function (removeOldHost) { return removeOldHost(); });\n    };\n}\nexports.createNewHosts = createNewHosts;\n// remove old styles\nfunction removeNgStyles() {\n    var docHead = document.head;\n    var _styles = docHead.querySelectorAll('style');\n    var styles = Array.prototype.slice.call(_styles);\n    styles\n        .filter(function (style) { return style.innerText.indexOf('_ng') !== -1; })\n        .map(function (el) { return docHead.removeChild(el); });\n}\nexports.removeNgStyles = removeNgStyles;\n// get input values\nfunction getInputValues() {\n    var _inputs = document.querySelectorAll('input');\n    var inputs = Array.prototype.slice.call(_inputs);\n    return inputs.map(function (input) { return input.value; });\n}\nexports.getInputValues = getInputValues;\n// set input values\nfunction setInputValues(_inputs) {\n    var inputs = document.querySelectorAll('input');\n    if (_inputs && inputs.length === _inputs.length) {\n        _inputs.forEach(function (value, i) {\n            var el = inputs[i];\n            el.value = value;\n            el.dispatchEvent(new CustomEvent('input', { detail: el.value }));\n        });\n        // clear array\n        _inputs.length = 0;\n    }\n}\nexports.setInputValues = setInputValues;\n// get/set input values\nfunction createInputTransfer() {\n    var _inputs = getInputValues();\n    return function restoreInputValues() {\n        return setInputValues(_inputs);\n    };\n}\nexports.createInputTransfer = createInputTransfer;\n//# sourceMappingURL=helpers.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angularclass/hmr/dist/helpers.js\n// module id = 1339\n// module chunks = 1","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar core_1 = require(\"@angular/core\");\r\nvar core_2 = require(\"@angular/core\");\r\nvar common_1 = require(\"@angular/common\");\r\nvar common_2 = require(\"@angular/common\");\r\nvar tween = require(\"@tweenjs/tween.js\");\r\nvar VirtualScrollerComponent = (function () {\r\n    function VirtualScrollerComponent(element, renderer, zone, changeDetectorRef, platformId, scrollThrottlingTime, scrollDebounceTime, scrollAnimationTime, scrollbarWidth, scrollbarHeight, checkResizeInterval, resizeBypassRefreshThreshold, modifyOverflowStyleOfParentScroll, stripedTable) {\r\n        this.element = element;\r\n        this.renderer = renderer;\r\n        this.zone = zone;\r\n        this.changeDetectorRef = changeDetectorRef;\r\n        this.window = window;\r\n        this.executeRefreshOutsideAngularZone = false;\r\n        this._enableUnequalChildrenSizes = false;\r\n        this.useMarginInsteadOfTranslate = false;\r\n        this.ssrViewportWidth = 1920;\r\n        this.ssrViewportHeight = 1080;\r\n        this._bufferAmount = 0;\r\n        this.scrollAnimationTime = 750;\r\n        this.resizeBypassRefreshThreshold = 5;\r\n        this._checkResizeInterval = 1000;\r\n        this._items = [];\r\n        this.compareItems = function (item1, item2) { return item1 === item2; };\r\n        this.update = new core_1.EventEmitter();\r\n        this.vsUpdate = new core_1.EventEmitter();\r\n        this.change = new core_1.EventEmitter();\r\n        this.vsChange = new core_1.EventEmitter();\r\n        this.start = new core_1.EventEmitter();\r\n        this.vsStart = new core_1.EventEmitter();\r\n        this.end = new core_1.EventEmitter();\r\n        this.vsEnd = new core_1.EventEmitter();\r\n        this.calculatedScrollbarWidth = 0;\r\n        this.calculatedScrollbarHeight = 0;\r\n        this.padding = 0;\r\n        this.previousViewPort = {};\r\n        this.cachedPageSize = 0;\r\n        this.previousScrollNumberElements = 0;\r\n        this.isAngularUniversalSSR = common_1.isPlatformServer(platformId);\r\n        this.scrollThrottlingTime = typeof (scrollThrottlingTime) === 'number' ? scrollThrottlingTime : 0;\r\n        this.scrollDebounceTime = typeof (scrollDebounceTime) === 'number' ? scrollDebounceTime : 0;\r\n        if (typeof (scrollAnimationTime) === 'number') {\r\n            this.scrollAnimationTime = scrollAnimationTime;\r\n        }\r\n        if (typeof (scrollbarWidth) === 'number') {\r\n            this.scrollbarWidth = scrollbarWidth;\r\n        }\r\n        if (typeof (scrollbarHeight) === 'number') {\r\n            this.scrollbarHeight = scrollbarHeight;\r\n        }\r\n        if (typeof (checkResizeInterval) === 'number') {\r\n            this.checkResizeInterval = checkResizeInterval;\r\n        }\r\n        if (typeof (resizeBypassRefreshThreshold) === 'number') {\r\n            this.resizeBypassRefreshThreshold = resizeBypassRefreshThreshold;\r\n        }\r\n        this.modifyOverflowStyleOfParentScroll = true;\r\n        if (typeof (modifyOverflowStyleOfParentScroll) === 'boolean') {\r\n            this.modifyOverflowStyleOfParentScroll = modifyOverflowStyleOfParentScroll;\r\n        }\r\n        this.stripedTable = false;\r\n        if (typeof (stripedTable) === 'boolean') {\r\n            this.stripedTable = stripedTable;\r\n        }\r\n        this.horizontal = false;\r\n        this.resetWrapGroupDimensions();\r\n    }\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"viewPortInfo\", {\r\n        get: function () {\r\n            var pageInfo = this.previousViewPort || {};\r\n            return {\r\n                startIndex: pageInfo.startIndex || 0,\r\n                endIndex: pageInfo.endIndex || 0,\r\n                scrollStartPosition: pageInfo.scrollStartPosition || 0,\r\n                scrollEndPosition: pageInfo.scrollEndPosition || 0,\r\n                maxScrollPosition: pageInfo.maxScrollPosition || 0,\r\n                startIndexWithBuffer: pageInfo.startIndexWithBuffer || 0,\r\n                endIndexWithBuffer: pageInfo.endIndexWithBuffer || 0\r\n            };\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"enableUnequalChildrenSizes\", {\r\n        get: function () {\r\n            return this._enableUnequalChildrenSizes;\r\n        },\r\n        set: function (value) {\r\n            if (this._enableUnequalChildrenSizes === value) {\r\n                return;\r\n            }\r\n            this._enableUnequalChildrenSizes = value;\r\n            this.minMeasuredChildWidth = undefined;\r\n            this.minMeasuredChildHeight = undefined;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"bufferAmount\", {\r\n        get: function () {\r\n            return Math.max(this._bufferAmount, this.enableUnequalChildrenSizes ? 5 : 0);\r\n        },\r\n        set: function (value) {\r\n            this._bufferAmount = value;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"scrollThrottlingTime\", {\r\n        get: function () {\r\n            return this._scrollThrottlingTime;\r\n        },\r\n        set: function (value) {\r\n            this._scrollThrottlingTime = value;\r\n            this.updateOnScrollFunction();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"scrollDebounceTime\", {\r\n        get: function () {\r\n            return this._scrollDebounceTime;\r\n        },\r\n        set: function (value) {\r\n            this._scrollDebounceTime = value;\r\n            this.updateOnScrollFunction();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    VirtualScrollerComponent.prototype.updateOnScrollFunction = function () {\r\n        var _this = this;\r\n        if (this.scrollDebounceTime) {\r\n            this.onScroll = this.debounce(function () {\r\n                _this.refresh_internal(false);\r\n            }, this.scrollDebounceTime);\r\n        }\r\n        else if (this.scrollThrottlingTime) {\r\n            this.onScroll = this.throttleTrailing(function () {\r\n                _this.refresh_internal(false);\r\n            }, this.scrollThrottlingTime);\r\n        }\r\n        else {\r\n            this.onScroll = function () {\r\n                _this.refresh_internal(false);\r\n            };\r\n        }\r\n    };\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"checkResizeInterval\", {\r\n        get: function () {\r\n            return this._checkResizeInterval;\r\n        },\r\n        set: function (value) {\r\n            if (this._checkResizeInterval === value) {\r\n                return;\r\n            }\r\n            this._checkResizeInterval = value;\r\n            this.addScrollEventHandlers();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"items\", {\r\n        get: function () {\r\n            return this._items;\r\n        },\r\n        set: function (value) {\r\n            if (value === this._items) {\r\n                return;\r\n            }\r\n            this._items = value || [];\r\n            this.refresh_internal(true);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"horizontal\", {\r\n        get: function () {\r\n            return this._horizontal;\r\n        },\r\n        set: function (value) {\r\n            this._horizontal = value;\r\n            this.updateDirection();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    VirtualScrollerComponent.prototype.revertParentOverscroll = function () {\r\n        var scrollElement = this.getScrollElement();\r\n        if (scrollElement && this.oldParentScrollOverflow) {\r\n            scrollElement.style['overflow-y'] = this.oldParentScrollOverflow.y;\r\n            scrollElement.style['overflow-x'] = this.oldParentScrollOverflow.x;\r\n        }\r\n        this.oldParentScrollOverflow = undefined;\r\n    };\r\n    Object.defineProperty(VirtualScrollerComponent.prototype, \"parentScroll\", {\r\n        get: function () {\r\n            return this._parentScroll;\r\n        },\r\n        set: function (value) {\r\n            if (this._parentScroll === value) {\r\n                return;\r\n            }\r\n            this.revertParentOverscroll();\r\n            this._parentScroll = value;\r\n            this.addScrollEventHandlers();\r\n            var scrollElement = this.getScrollElement();\r\n            if (this.modifyOverflowStyleOfParentScroll && scrollElement !== this.element.nativeElement) {\r\n                this.oldParentScrollOverflow = { x: scrollElement.style['overflow-x'], y: scrollElement.style['overflow-y'] };\r\n                scrollElement.style['overflow-y'] = this.horizontal ? 'visible' : 'auto';\r\n                scrollElement.style['overflow-x'] = this.horizontal ? 'auto' : 'visible';\r\n            }\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    VirtualScrollerComponent.prototype.ngOnInit = function () {\r\n        this.addScrollEventHandlers();\r\n    };\r\n    VirtualScrollerComponent.prototype.ngOnDestroy = function () {\r\n        this.removeScrollEventHandlers();\r\n        this.revertParentOverscroll();\r\n    };\r\n    VirtualScrollerComponent.prototype.ngOnChanges = function (changes) {\r\n        var indexLengthChanged = this.cachedItemsLength !== this.items.length;\r\n        this.cachedItemsLength = this.items.length;\r\n        var firstRun = !changes.items || !changes.items.previousValue || changes.items.previousValue.length === 0;\r\n        this.refresh_internal(indexLengthChanged || firstRun);\r\n    };\r\n    VirtualScrollerComponent.prototype.ngDoCheck = function () {\r\n        if (this.cachedItemsLength !== this.items.length) {\r\n            this.cachedItemsLength = this.items.length;\r\n            this.refresh_internal(true);\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.refresh = function () {\r\n        this.refresh_internal(true);\r\n    };\r\n    VirtualScrollerComponent.prototype.invalidateAllCachedMeasurements = function () {\r\n        this.wrapGroupDimensions = {\r\n            maxChildSizePerWrapGroup: [],\r\n            numberOfKnownWrapGroupChildSizes: 0,\r\n            sumOfKnownWrapGroupChildWidths: 0,\r\n            sumOfKnownWrapGroupChildHeights: 0\r\n        };\r\n        this.minMeasuredChildWidth = undefined;\r\n        this.minMeasuredChildHeight = undefined;\r\n        this.refresh_internal(false);\r\n    };\r\n    VirtualScrollerComponent.prototype.invalidateCachedMeasurementForItem = function (item) {\r\n        if (this.enableUnequalChildrenSizes) {\r\n            var index = this.items && this.items.indexOf(item);\r\n            if (index >= 0) {\r\n                this.invalidateCachedMeasurementAtIndex(index);\r\n            }\r\n        }\r\n        else {\r\n            this.minMeasuredChildWidth = undefined;\r\n            this.minMeasuredChildHeight = undefined;\r\n        }\r\n        this.refresh_internal(false);\r\n    };\r\n    VirtualScrollerComponent.prototype.invalidateCachedMeasurementAtIndex = function (index) {\r\n        if (this.enableUnequalChildrenSizes) {\r\n            var cachedMeasurement = this.wrapGroupDimensions.maxChildSizePerWrapGroup[index];\r\n            if (cachedMeasurement) {\r\n                this.wrapGroupDimensions.maxChildSizePerWrapGroup[index] = undefined;\r\n                --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n                this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= cachedMeasurement.childWidth || 0;\r\n                this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= cachedMeasurement.childHeight || 0;\r\n            }\r\n        }\r\n        else {\r\n            this.minMeasuredChildWidth = undefined;\r\n            this.minMeasuredChildHeight = undefined;\r\n        }\r\n        this.refresh_internal(false);\r\n    };\r\n    VirtualScrollerComponent.prototype.scrollInto = function (item, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback) {\r\n        if (alignToBeginning === void 0) { alignToBeginning = true; }\r\n        if (additionalOffset === void 0) { additionalOffset = 0; }\r\n        if (animationMilliseconds === void 0) { animationMilliseconds = undefined; }\r\n        if (animationCompletedCallback === void 0) { animationCompletedCallback = undefined; }\r\n        var index = this.items.indexOf(item);\r\n        if (index === -1) {\r\n            return;\r\n        }\r\n        this.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\r\n    };\r\n    VirtualScrollerComponent.prototype.scrollToIndex = function (index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback) {\r\n        var _this = this;\r\n        if (alignToBeginning === void 0) { alignToBeginning = true; }\r\n        if (additionalOffset === void 0) { additionalOffset = 0; }\r\n        if (animationMilliseconds === void 0) { animationMilliseconds = undefined; }\r\n        if (animationCompletedCallback === void 0) { animationCompletedCallback = undefined; }\r\n        var maxRetries = 5;\r\n        var retryIfNeeded = function () {\r\n            --maxRetries;\r\n            if (maxRetries <= 0) {\r\n                if (animationCompletedCallback) {\r\n                    animationCompletedCallback();\r\n                }\r\n                return;\r\n            }\r\n            var dimensions = _this.calculateDimensions();\r\n            var desiredStartIndex = Math.min(Math.max(index, 0), dimensions.itemCount - 1);\r\n            if (_this.previousViewPort.startIndex === desiredStartIndex) {\r\n                if (animationCompletedCallback) {\r\n                    animationCompletedCallback();\r\n                }\r\n                return;\r\n            }\r\n            _this.scrollToIndex_internal(index, alignToBeginning, additionalOffset, 0, retryIfNeeded);\r\n        };\r\n        this.scrollToIndex_internal(index, alignToBeginning, additionalOffset, animationMilliseconds, retryIfNeeded);\r\n    };\r\n    VirtualScrollerComponent.prototype.scrollToIndex_internal = function (index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback) {\r\n        if (alignToBeginning === void 0) { alignToBeginning = true; }\r\n        if (additionalOffset === void 0) { additionalOffset = 0; }\r\n        if (animationMilliseconds === void 0) { animationMilliseconds = undefined; }\r\n        if (animationCompletedCallback === void 0) { animationCompletedCallback = undefined; }\r\n        animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n        var dimensions = this.calculateDimensions();\r\n        var scroll = this.calculatePadding(index, dimensions) + additionalOffset;\r\n        if (!alignToBeginning) {\r\n            scroll -= dimensions.wrapGroupsPerPage * dimensions[this._childScrollDim];\r\n        }\r\n        this.scrollToPosition(scroll, animationMilliseconds, animationCompletedCallback);\r\n    };\r\n    VirtualScrollerComponent.prototype.scrollToPosition = function (scrollPosition, animationMilliseconds, animationCompletedCallback) {\r\n        var _this = this;\r\n        if (animationMilliseconds === void 0) { animationMilliseconds = undefined; }\r\n        if (animationCompletedCallback === void 0) { animationCompletedCallback = undefined; }\r\n        scrollPosition += this.getElementsOffset();\r\n        animationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n        var scrollElement = this.getScrollElement();\r\n        var animationRequest;\r\n        if (this.currentTween) {\r\n            this.currentTween.stop();\r\n            this.currentTween = undefined;\r\n        }\r\n        if (!animationMilliseconds) {\r\n            this.renderer.setProperty(scrollElement, this._scrollType, scrollPosition);\r\n            this.refresh_internal(false, animationCompletedCallback);\r\n            return;\r\n        }\r\n        var tweenConfigObj = { scrollPosition: scrollElement[this._scrollType] };\r\n        var newTween = new tween.Tween(tweenConfigObj)\r\n            .to({ scrollPosition: scrollPosition }, animationMilliseconds)\r\n            .easing(tween.Easing.Quadratic.Out)\r\n            .onUpdate(function (data) {\r\n            if (isNaN(data.scrollPosition)) {\r\n                return;\r\n            }\r\n            _this.renderer.setProperty(scrollElement, _this._scrollType, data.scrollPosition);\r\n            _this.refresh_internal(false);\r\n        })\r\n            .onStop(function () {\r\n            cancelAnimationFrame(animationRequest);\r\n        })\r\n            .start();\r\n        var animate = function (time) {\r\n            if (!newTween[\"isPlaying\"]()) {\r\n                return;\r\n            }\r\n            newTween.update(time);\r\n            if (tweenConfigObj.scrollPosition === scrollPosition) {\r\n                _this.refresh_internal(false, animationCompletedCallback);\r\n                return;\r\n            }\r\n            _this.zone.runOutsideAngular(function () {\r\n                animationRequest = requestAnimationFrame(animate);\r\n            });\r\n        };\r\n        animate();\r\n        this.currentTween = newTween;\r\n    };\r\n    VirtualScrollerComponent.prototype.checkScrollElementResized = function () {\r\n        var boundingRect = this.getScrollElement().getBoundingClientRect();\r\n        var sizeChanged;\r\n        if (!this.previousScrollBoundingRect) {\r\n            sizeChanged = true;\r\n        }\r\n        else {\r\n            var widthChange = Math.abs(boundingRect.width - this.previousScrollBoundingRect.width);\r\n            var heightChange = Math.abs(boundingRect.height - this.previousScrollBoundingRect.height);\r\n            sizeChanged = widthChange > this.resizeBypassRefreshThreshold || heightChange > this.resizeBypassRefreshThreshold;\r\n        }\r\n        if (sizeChanged) {\r\n            this.previousScrollBoundingRect = boundingRect;\r\n            if (boundingRect.width > 0 && boundingRect.height > 0) {\r\n                this.refresh_internal(false);\r\n            }\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.updateDirection = function () {\r\n        if (this.horizontal) {\r\n            this._invisiblePaddingProperty = 'width';\r\n            this._offsetType = 'offsetLeft';\r\n            this._pageOffsetType = 'pageXOffset';\r\n            this._childScrollDim = 'childWidth';\r\n            this._marginDir = 'margin-left';\r\n            this._translateDir = 'translateX';\r\n            this._scrollType = 'scrollLeft';\r\n        }\r\n        else {\r\n            this._invisiblePaddingProperty = 'height';\r\n            this._offsetType = 'offsetTop';\r\n            this._pageOffsetType = 'pageYOffset';\r\n            this._childScrollDim = 'childHeight';\r\n            this._marginDir = 'margin-top';\r\n            this._translateDir = 'translateY';\r\n            this._scrollType = 'scrollTop';\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.debounce = function (func, wait) {\r\n        var throttled = this.throttleTrailing(func, wait);\r\n        var result = function () {\r\n            throttled['cancel']();\r\n            throttled.apply(this, arguments);\r\n        };\r\n        result['cancel'] = function () {\r\n            throttled['cancel']();\r\n        };\r\n        return result;\r\n    };\r\n    VirtualScrollerComponent.prototype.throttleTrailing = function (func, wait) {\r\n        var timeout = undefined;\r\n        var result = function () {\r\n            var _this = this;\r\n            var _arguments = arguments;\r\n            if (timeout) {\r\n                return;\r\n            }\r\n            if (wait <= 0) {\r\n                func.apply(_this, _arguments);\r\n            }\r\n            else {\r\n                timeout = setTimeout(function () {\r\n                    timeout = undefined;\r\n                    func.apply(_this, _arguments);\r\n                }, wait);\r\n            }\r\n        };\r\n        result['cancel'] = function () {\r\n            if (timeout) {\r\n                clearTimeout(timeout);\r\n                timeout = undefined;\r\n            }\r\n        };\r\n        return result;\r\n    };\r\n    VirtualScrollerComponent.prototype.refresh_internal = function (itemsArrayModified, refreshCompletedCallback, maxRunTimes) {\r\n        //note: maxRunTimes is to force it to keep recalculating if the previous iteration caused a re-render (different sliced items in viewport or scrollPosition changed).\r\n        //The default of 2x max will probably be accurate enough without causing too large a performance bottleneck\r\n        //The code would typically quit out on the 2nd iteration anyways. The main time it'd think more than 2 runs would be necessary would be for vastly different sized child items or if this is the 1st time the items array was initialized.\r\n        //Without maxRunTimes, If the user is actively scrolling this code would become an infinite loop until they stopped scrolling. This would be okay, except each scroll event would start an additional infinte loop. We want to short-circuit it to prevent his.\r\n        var _this = this;\r\n        if (refreshCompletedCallback === void 0) { refreshCompletedCallback = undefined; }\r\n        if (maxRunTimes === void 0) { maxRunTimes = 2; }\r\n        this.zone.runOutsideAngular(function () {\r\n            requestAnimationFrame(function () {\r\n                if (itemsArrayModified) {\r\n                    _this.resetWrapGroupDimensions();\r\n                }\r\n                var viewport = _this.calculateViewport();\r\n                var startChanged = itemsArrayModified || viewport.startIndex !== _this.previousViewPort.startIndex;\r\n                var endChanged = itemsArrayModified || viewport.endIndex !== _this.previousViewPort.endIndex;\r\n                var scrollLengthChanged = viewport.scrollLength !== _this.previousViewPort.scrollLength;\r\n                var paddingChanged = viewport.padding !== _this.previousViewPort.padding;\r\n                var scrollPositionChanged = viewport.scrollStartPosition !== _this.previousViewPort.scrollStartPosition || viewport.scrollEndPosition !== _this.previousViewPort.scrollEndPosition || viewport.maxScrollPosition !== _this.previousViewPort.maxScrollPosition;\r\n                _this.previousViewPort = viewport;\r\n                if (scrollLengthChanged) {\r\n                    _this.renderer.setStyle(_this.invisiblePaddingElementRef.nativeElement, _this._invisiblePaddingProperty, viewport.scrollLength + \"px\");\r\n                }\r\n                if (paddingChanged) {\r\n                    if (_this.useMarginInsteadOfTranslate) {\r\n                        _this.renderer.setStyle(_this.contentElementRef.nativeElement, _this._marginDir, viewport.padding + \"px\");\r\n                    }\r\n                    else {\r\n                        _this.renderer.setStyle(_this.contentElementRef.nativeElement, 'transform', _this._translateDir + \"(\" + viewport.padding + \"px)\");\r\n                        _this.renderer.setStyle(_this.contentElementRef.nativeElement, 'webkitTransform', _this._translateDir + \"(\" + viewport.padding + \"px)\");\r\n                    }\r\n                }\r\n                if (_this.headerElementRef) {\r\n                    var scrollPosition = _this.getScrollElement()[_this._scrollType];\r\n                    var containerOffset = _this.getElementsOffset();\r\n                    var offset = Math.max(scrollPosition - viewport.padding - containerOffset + _this.headerElementRef.nativeElement.clientHeight, 0);\r\n                    _this.renderer.setStyle(_this.headerElementRef.nativeElement, 'transform', _this._translateDir + \"(\" + offset + \"px)\");\r\n                    _this.renderer.setStyle(_this.headerElementRef.nativeElement, 'webkitTransform', _this._translateDir + \"(\" + offset + \"px)\");\r\n                }\r\n                var changeEventArg = (startChanged || endChanged) ? {\r\n                    start: viewport.startIndex,\r\n                    end: viewport.endIndex,\r\n                    startIndex: viewport.startIndex,\r\n                    endIndex: viewport.endIndex,\r\n                    scrollStartPosition: viewport.scrollStartPosition,\r\n                    scrollEndPosition: viewport.scrollEndPosition,\r\n                    startIndexWithBuffer: viewport.startIndexWithBuffer,\r\n                    endIndexWithBuffer: viewport.endIndexWithBuffer,\r\n                    maxScrollPosition: viewport.maxScrollPosition\r\n                } : undefined;\r\n                if (startChanged || endChanged || scrollPositionChanged) {\r\n                    var handleChanged = function () {\r\n                        // update the scroll list to trigger re-render of components in viewport\r\n                        _this.viewPortItems = viewport.startIndexWithBuffer >= 0 && viewport.endIndexWithBuffer >= 0 ? _this.items.slice(viewport.startIndexWithBuffer, viewport.endIndexWithBuffer + 1) : [];\r\n                        _this.update.emit(_this.viewPortItems);\r\n                        _this.vsUpdate.emit(_this.viewPortItems);\r\n                        if (startChanged) {\r\n                            _this.start.emit(changeEventArg);\r\n                            _this.vsStart.emit(changeEventArg);\r\n                        }\r\n                        if (endChanged) {\r\n                            _this.end.emit(changeEventArg);\r\n                            _this.vsEnd.emit(changeEventArg);\r\n                        }\r\n                        if (startChanged || endChanged) {\r\n                            _this.changeDetectorRef.markForCheck();\r\n                            _this.change.emit(changeEventArg);\r\n                            _this.vsChange.emit(changeEventArg);\r\n                        }\r\n                        if (maxRunTimes > 0) {\r\n                            _this.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n                            return;\r\n                        }\r\n                        if (refreshCompletedCallback) {\r\n                            refreshCompletedCallback();\r\n                        }\r\n                    };\r\n                    if (_this.executeRefreshOutsideAngularZone) {\r\n                        handleChanged();\r\n                    }\r\n                    else {\r\n                        _this.zone.run(handleChanged);\r\n                    }\r\n                }\r\n                else {\r\n                    if (maxRunTimes > 0 && (scrollLengthChanged || paddingChanged)) {\r\n                        _this.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n                        return;\r\n                    }\r\n                    if (refreshCompletedCallback) {\r\n                        refreshCompletedCallback();\r\n                    }\r\n                }\r\n            });\r\n        });\r\n    };\r\n    VirtualScrollerComponent.prototype.getScrollElement = function () {\r\n        return this.parentScroll instanceof Window ? document.scrollingElement || document.documentElement || document.body : this.parentScroll || this.element.nativeElement;\r\n    };\r\n    VirtualScrollerComponent.prototype.addScrollEventHandlers = function () {\r\n        var _this = this;\r\n        if (this.isAngularUniversalSSR) {\r\n            return;\r\n        }\r\n        var scrollElement = this.getScrollElement();\r\n        this.removeScrollEventHandlers();\r\n        this.zone.runOutsideAngular(function () {\r\n            if (_this.parentScroll instanceof Window) {\r\n                _this.disposeScrollHandler = _this.renderer.listen('window', 'scroll', _this.onScroll);\r\n                _this.disposeResizeHandler = _this.renderer.listen('window', 'resize', _this.onScroll);\r\n            }\r\n            else {\r\n                _this.disposeScrollHandler = _this.renderer.listen(scrollElement, 'scroll', _this.onScroll);\r\n                if (_this._checkResizeInterval > 0) {\r\n                    _this.checkScrollElementResizedTimer = setInterval(function () { _this.checkScrollElementResized(); }, _this._checkResizeInterval);\r\n                }\r\n            }\r\n        });\r\n    };\r\n    VirtualScrollerComponent.prototype.removeScrollEventHandlers = function () {\r\n        if (this.checkScrollElementResizedTimer) {\r\n            clearInterval(this.checkScrollElementResizedTimer);\r\n        }\r\n        if (this.disposeScrollHandler) {\r\n            this.disposeScrollHandler();\r\n            this.disposeScrollHandler = undefined;\r\n        }\r\n        if (this.disposeResizeHandler) {\r\n            this.disposeResizeHandler();\r\n            this.disposeResizeHandler = undefined;\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.getElementsOffset = function () {\r\n        if (this.isAngularUniversalSSR) {\r\n            return 0;\r\n        }\r\n        var offset = 0;\r\n        if (this.containerElementRef && this.containerElementRef.nativeElement) {\r\n            offset += this.containerElementRef.nativeElement[this._offsetType];\r\n        }\r\n        if (this.parentScroll) {\r\n            var scrollElement = this.getScrollElement();\r\n            var elementClientRect = this.element.nativeElement.getBoundingClientRect();\r\n            var scrollClientRect = scrollElement.getBoundingClientRect();\r\n            if (this.horizontal) {\r\n                offset += elementClientRect.left - scrollClientRect.left;\r\n            }\r\n            else {\r\n                offset += elementClientRect.top - scrollClientRect.top;\r\n            }\r\n            if (!(this.parentScroll instanceof Window)) {\r\n                offset += scrollElement[this._scrollType];\r\n            }\r\n        }\r\n        return offset;\r\n    };\r\n    VirtualScrollerComponent.prototype.countItemsPerWrapGroup = function () {\r\n        if (this.isAngularUniversalSSR) {\r\n            return Math.round(this.horizontal ? this.ssrViewportHeight / this.ssrChildHeight : this.ssrViewportWidth / this.ssrChildWidth);\r\n        }\r\n        var propertyName = this.horizontal ? 'offsetLeft' : 'offsetTop';\r\n        var children = ((this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement).children;\r\n        var childrenLength = children ? children.length : 0;\r\n        if (childrenLength === 0) {\r\n            return 1;\r\n        }\r\n        var firstOffset = children[0][propertyName];\r\n        var result = 1;\r\n        while (result < childrenLength && firstOffset === children[result][propertyName]) {\r\n            ++result;\r\n        }\r\n        return result;\r\n    };\r\n    VirtualScrollerComponent.prototype.getScrollStartPosition = function () {\r\n        var windowScrollValue = undefined;\r\n        if (this.parentScroll instanceof Window) {\r\n            windowScrollValue = window[this._pageOffsetType];\r\n        }\r\n        return windowScrollValue || this.getScrollElement()[this._scrollType] || 0;\r\n    };\r\n    VirtualScrollerComponent.prototype.resetWrapGroupDimensions = function () {\r\n        var oldWrapGroupDimensions = this.wrapGroupDimensions;\r\n        this.invalidateAllCachedMeasurements();\r\n        if (!this.enableUnequalChildrenSizes || !oldWrapGroupDimensions || oldWrapGroupDimensions.numberOfKnownWrapGroupChildSizes === 0) {\r\n            return;\r\n        }\r\n        var itemsPerWrapGroup = this.countItemsPerWrapGroup();\r\n        for (var wrapGroupIndex = 0; wrapGroupIndex < oldWrapGroupDimensions.maxChildSizePerWrapGroup.length; ++wrapGroupIndex) {\r\n            var oldWrapGroupDimension = oldWrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n            if (!oldWrapGroupDimension || !oldWrapGroupDimension.items || !oldWrapGroupDimension.items.length) {\r\n                continue;\r\n            }\r\n            if (oldWrapGroupDimension.items.length !== itemsPerWrapGroup) {\r\n                return;\r\n            }\r\n            var itemsChanged = false;\r\n            var arrayStartIndex = itemsPerWrapGroup * wrapGroupIndex;\r\n            for (var i = 0; i < itemsPerWrapGroup; ++i) {\r\n                if (!this.compareItems(oldWrapGroupDimension.items[i], this.items[arrayStartIndex + i])) {\r\n                    itemsChanged = true;\r\n                    break;\r\n                }\r\n            }\r\n            if (!itemsChanged) {\r\n                ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n                this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += oldWrapGroupDimension.childWidth || 0;\r\n                this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += oldWrapGroupDimension.childHeight || 0;\r\n                this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = oldWrapGroupDimension;\r\n            }\r\n        }\r\n    };\r\n    VirtualScrollerComponent.prototype.calculateDimensions = function () {\r\n        var scrollElement = this.getScrollElement();\r\n        var maxCalculatedScrollBarSize = 25; // Note: Formula to auto-calculate doesn't work for ParentScroll, so we default to this if not set by consuming application\r\n        this.calculatedScrollbarHeight = Math.max(Math.min(scrollElement.offsetHeight - scrollElement.clientHeight, maxCalculatedScrollBarSize), this.calculatedScrollbarHeight);\r\n        this.calculatedScrollbarWidth = Math.max(Math.min(scrollElement.offsetWidth - scrollElement.clientWidth, maxCalculatedScrollBarSize), this.calculatedScrollbarWidth);\r\n        var viewportWidth = scrollElement.offsetWidth - (this.scrollbarWidth || this.calculatedScrollbarWidth || (this.horizontal ? 0 : maxCalculatedScrollBarSize));\r\n        var viewportHeight = scrollElement.offsetHeight - (this.scrollbarHeight || this.calculatedScrollbarHeight || (this.horizontal ? maxCalculatedScrollBarSize : 0));\r\n        var content = (this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement;\r\n        var itemsPerWrapGroup = this.countItemsPerWrapGroup();\r\n        var wrapGroupsPerPage;\r\n        var defaultChildWidth;\r\n        var defaultChildHeight;\r\n        if (this.isAngularUniversalSSR) {\r\n            viewportWidth = this.ssrViewportWidth;\r\n            viewportHeight = this.ssrViewportHeight;\r\n            defaultChildWidth = this.ssrChildWidth;\r\n            defaultChildHeight = this.ssrChildHeight;\r\n            var itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n            var itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n            wrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n        }\r\n        else if (!this.enableUnequalChildrenSizes) {\r\n            if (content.children.length > 0) {\r\n                if (!this.childWidth || !this.childHeight) {\r\n                    if (!this.minMeasuredChildWidth && viewportWidth > 0) {\r\n                        this.minMeasuredChildWidth = viewportWidth;\r\n                    }\r\n                    if (!this.minMeasuredChildHeight && viewportHeight > 0) {\r\n                        this.minMeasuredChildHeight = viewportHeight;\r\n                    }\r\n                }\r\n                var child = content.children[0];\r\n                var clientRect = child.getBoundingClientRect();\r\n                this.minMeasuredChildWidth = Math.min(this.minMeasuredChildWidth, clientRect.width);\r\n                this.minMeasuredChildHeight = Math.min(this.minMeasuredChildHeight, clientRect.height);\r\n            }\r\n            defaultChildWidth = this.childWidth || this.minMeasuredChildWidth || viewportWidth;\r\n            defaultChildHeight = this.childHeight || this.minMeasuredChildHeight || viewportHeight;\r\n            var itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n            var itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n            wrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n        }\r\n        else {\r\n            var scrollOffset = scrollElement[this._scrollType] - (this.previousViewPort ? this.previousViewPort.padding : 0);\r\n            var arrayStartIndex = this.previousViewPort.startIndexWithBuffer || 0;\r\n            var wrapGroupIndex = Math.ceil(arrayStartIndex / itemsPerWrapGroup);\r\n            var maxWidthForWrapGroup = 0;\r\n            var maxHeightForWrapGroup = 0;\r\n            var sumOfVisibleMaxWidths = 0;\r\n            var sumOfVisibleMaxHeights = 0;\r\n            wrapGroupsPerPage = 0;\r\n            for (var i = 0; i < content.children.length; ++i) {\r\n                ++arrayStartIndex;\r\n                var child = content.children[i];\r\n                var clientRect = child.getBoundingClientRect();\r\n                maxWidthForWrapGroup = Math.max(maxWidthForWrapGroup, clientRect.width);\r\n                maxHeightForWrapGroup = Math.max(maxHeightForWrapGroup, clientRect.height);\r\n                if (arrayStartIndex % itemsPerWrapGroup === 0) {\r\n                    var oldValue = this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n                    if (oldValue) {\r\n                        --this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n                        this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= oldValue.childWidth || 0;\r\n                        this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= oldValue.childHeight || 0;\r\n                    }\r\n                    ++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n                    var items = this.items.slice(arrayStartIndex - itemsPerWrapGroup, arrayStartIndex);\r\n                    this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = {\r\n                        childWidth: maxWidthForWrapGroup,\r\n                        childHeight: maxHeightForWrapGroup,\r\n                        items: items\r\n                    };\r\n                    this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += maxWidthForWrapGroup;\r\n                    this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += maxHeightForWrapGroup;\r\n                    if (this.horizontal) {\r\n                        var maxVisibleWidthForWrapGroup = Math.min(maxWidthForWrapGroup, Math.max(viewportWidth - sumOfVisibleMaxWidths, 0));\r\n                        if (scrollOffset > 0) {\r\n                            var scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleWidthForWrapGroup);\r\n                            maxVisibleWidthForWrapGroup -= scrollOffsetToRemove;\r\n                            scrollOffset -= scrollOffsetToRemove;\r\n                        }\r\n                        sumOfVisibleMaxWidths += maxVisibleWidthForWrapGroup;\r\n                        if (maxVisibleWidthForWrapGroup > 0 && viewportWidth >= sumOfVisibleMaxWidths) {\r\n                            ++wrapGroupsPerPage;\r\n                        }\r\n                    }\r\n                    else {\r\n                        var maxVisibleHeightForWrapGroup = Math.min(maxHeightForWrapGroup, Math.max(viewportHeight - sumOfVisibleMaxHeights, 0));\r\n                        if (scrollOffset > 0) {\r\n                            var scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleHeightForWrapGroup);\r\n                            maxVisibleHeightForWrapGroup -= scrollOffsetToRemove;\r\n                            scrollOffset -= scrollOffsetToRemove;\r\n                        }\r\n                        sumOfVisibleMaxHeights += maxVisibleHeightForWrapGroup;\r\n                        if (maxVisibleHeightForWrapGroup > 0 && viewportHeight >= sumOfVisibleMaxHeights) {\r\n                            ++wrapGroupsPerPage;\r\n                        }\r\n                    }\r\n                    ++wrapGroupIndex;\r\n                    maxWidthForWrapGroup = 0;\r\n                    maxHeightForWrapGroup = 0;\r\n                }\r\n            }\r\n            var averageChildWidth = this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n            var averageChildHeight = this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n            defaultChildWidth = this.childWidth || averageChildWidth || viewportWidth;\r\n            defaultChildHeight = this.childHeight || averageChildHeight || viewportHeight;\r\n            if (this.horizontal) {\r\n                if (viewportWidth > sumOfVisibleMaxWidths) {\r\n                    wrapGroupsPerPage += Math.ceil((viewportWidth - sumOfVisibleMaxWidths) / defaultChildWidth);\r\n                }\r\n            }\r\n            else {\r\n                if (viewportHeight > sumOfVisibleMaxHeights) {\r\n                    wrapGroupsPerPage += Math.ceil((viewportHeight - sumOfVisibleMaxHeights) / defaultChildHeight);\r\n                }\r\n            }\r\n        }\r\n        var itemCount = this.items.length;\r\n        var itemsPerPage = itemsPerWrapGroup * wrapGroupsPerPage;\r\n        var pageCount_fractional = itemCount / itemsPerPage;\r\n        var numberOfWrapGroups = Math.ceil(itemCount / itemsPerWrapGroup);\r\n        var scrollLength = 0;\r\n        var defaultScrollLengthPerWrapGroup = this.horizontal ? defaultChildWidth : defaultChildHeight;\r\n        if (this.enableUnequalChildrenSizes) {\r\n            var numUnknownChildSizes = 0;\r\n            for (var i = 0; i < numberOfWrapGroups; ++i) {\r\n                var childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n                if (childSize) {\r\n                    scrollLength += childSize;\r\n                }\r\n                else {\r\n                    ++numUnknownChildSizes;\r\n                }\r\n            }\r\n            scrollLength += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n        }\r\n        else {\r\n            scrollLength = numberOfWrapGroups * defaultScrollLengthPerWrapGroup;\r\n        }\r\n        if (this.headerElementRef) {\r\n            scrollLength += this.headerElementRef.nativeElement.clientHeight;\r\n        }\r\n        var viewportLength = this.horizontal ? viewportWidth : viewportHeight;\r\n        var maxScrollPosition = Math.max(scrollLength - viewportLength, 0);\r\n        return {\r\n            itemCount: itemCount,\r\n            itemsPerWrapGroup: itemsPerWrapGroup,\r\n            wrapGroupsPerPage: wrapGroupsPerPage,\r\n            itemsPerPage: itemsPerPage,\r\n            pageCount_fractional: pageCount_fractional,\r\n            childWidth: defaultChildWidth,\r\n            childHeight: defaultChildHeight,\r\n            scrollLength: scrollLength,\r\n            viewportLength: viewportLength,\r\n            maxScrollPosition: maxScrollPosition\r\n        };\r\n    };\r\n    VirtualScrollerComponent.prototype.calculatePadding = function (arrayStartIndexWithBuffer, dimensions) {\r\n        if (dimensions.itemCount === 0) {\r\n            return 0;\r\n        }\r\n        var defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n        var startingWrapGroupIndex = Math.floor(arrayStartIndexWithBuffer / dimensions.itemsPerWrapGroup) || 0;\r\n        if (!this.enableUnequalChildrenSizes) {\r\n            return defaultScrollLengthPerWrapGroup * startingWrapGroupIndex;\r\n        }\r\n        var numUnknownChildSizes = 0;\r\n        var result = 0;\r\n        for (var i = 0; i < startingWrapGroupIndex; ++i) {\r\n            var childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n            if (childSize) {\r\n                result += childSize;\r\n            }\r\n            else {\r\n                ++numUnknownChildSizes;\r\n            }\r\n        }\r\n        result += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n        return result;\r\n    };\r\n    VirtualScrollerComponent.prototype.calculatePageInfo = function (scrollPosition, dimensions) {\r\n        var scrollPercentage = 0;\r\n        if (this.enableUnequalChildrenSizes) {\r\n            var numberOfWrapGroups = Math.ceil(dimensions.itemCount / dimensions.itemsPerWrapGroup);\r\n            var totalScrolledLength = 0;\r\n            var defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n            for (var i = 0; i < numberOfWrapGroups; ++i) {\r\n                var childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n                if (childSize) {\r\n                    totalScrolledLength += childSize;\r\n                }\r\n                else {\r\n                    totalScrolledLength += defaultScrollLengthPerWrapGroup;\r\n                }\r\n                if (scrollPosition < totalScrolledLength) {\r\n                    scrollPercentage = i / numberOfWrapGroups;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            scrollPercentage = scrollPosition / dimensions.scrollLength;\r\n        }\r\n        var startingArrayIndex_fractional = Math.min(Math.max(scrollPercentage * dimensions.pageCount_fractional, 0), dimensions.pageCount_fractional) * dimensions.itemsPerPage;\r\n        var maxStart = dimensions.itemCount - dimensions.itemsPerPage - 1;\r\n        var arrayStartIndex = Math.min(Math.floor(startingArrayIndex_fractional), maxStart);\r\n        arrayStartIndex -= arrayStartIndex % dimensions.itemsPerWrapGroup; // round down to start of wrapGroup\r\n        if (this.stripedTable) {\r\n            var bufferBoundary = 2 * dimensions.itemsPerWrapGroup;\r\n            if (arrayStartIndex % bufferBoundary !== 0) {\r\n                arrayStartIndex = Math.max(arrayStartIndex - arrayStartIndex % bufferBoundary, 0);\r\n            }\r\n        }\r\n        var arrayEndIndex = Math.ceil(startingArrayIndex_fractional) + dimensions.itemsPerPage - 1;\r\n        var endIndexWithinWrapGroup = (arrayEndIndex + 1) % dimensions.itemsPerWrapGroup;\r\n        if (endIndexWithinWrapGroup > 0) {\r\n            arrayEndIndex += dimensions.itemsPerWrapGroup - endIndexWithinWrapGroup; // round up to end of wrapGroup\r\n        }\r\n        if (isNaN(arrayStartIndex)) {\r\n            arrayStartIndex = 0;\r\n        }\r\n        if (isNaN(arrayEndIndex)) {\r\n            arrayEndIndex = 0;\r\n        }\r\n        arrayStartIndex = Math.min(Math.max(arrayStartIndex, 0), dimensions.itemCount - 1);\r\n        arrayEndIndex = Math.min(Math.max(arrayEndIndex, 0), dimensions.itemCount - 1);\r\n        var bufferSize = this.bufferAmount * dimensions.itemsPerWrapGroup;\r\n        var startIndexWithBuffer = Math.min(Math.max(arrayStartIndex - bufferSize, 0), dimensions.itemCount - 1);\r\n        var endIndexWithBuffer = Math.min(Math.max(arrayEndIndex + bufferSize, 0), dimensions.itemCount - 1);\r\n        return {\r\n            startIndex: arrayStartIndex,\r\n            endIndex: arrayEndIndex,\r\n            startIndexWithBuffer: startIndexWithBuffer,\r\n            endIndexWithBuffer: endIndexWithBuffer,\r\n            scrollStartPosition: scrollPosition,\r\n            scrollEndPosition: scrollPosition + dimensions.viewportLength,\r\n            maxScrollPosition: dimensions.maxScrollPosition\r\n        };\r\n    };\r\n    VirtualScrollerComponent.prototype.calculateViewport = function () {\r\n        var dimensions = this.calculateDimensions();\r\n        var offset = this.getElementsOffset();\r\n        var scrollStartPosition = this.getScrollStartPosition();\r\n        if (scrollStartPosition > (dimensions.scrollLength + offset) && !(this.parentScroll instanceof Window)) {\r\n            scrollStartPosition = dimensions.scrollLength;\r\n        }\r\n        else {\r\n            scrollStartPosition -= offset;\r\n        }\r\n        scrollStartPosition = Math.max(0, scrollStartPosition);\r\n        var pageInfo = this.calculatePageInfo(scrollStartPosition, dimensions);\r\n        var newPadding = this.calculatePadding(pageInfo.startIndexWithBuffer, dimensions);\r\n        var newScrollLength = dimensions.scrollLength;\r\n        return {\r\n            startIndex: pageInfo.startIndex,\r\n            endIndex: pageInfo.endIndex,\r\n            startIndexWithBuffer: pageInfo.startIndexWithBuffer,\r\n            endIndexWithBuffer: pageInfo.endIndexWithBuffer,\r\n            padding: Math.round(newPadding),\r\n            scrollLength: Math.round(newScrollLength),\r\n            scrollStartPosition: pageInfo.scrollStartPosition,\r\n            scrollEndPosition: pageInfo.scrollEndPosition,\r\n            maxScrollPosition: pageInfo.maxScrollPosition\r\n        };\r\n    };\r\n    VirtualScrollerComponent.decorators = [\r\n        { type: core_1.Component, args: [{\r\n                    selector: 'virtual-scroller,[virtualScroller]',\r\n                    exportAs: 'virtualScroller',\r\n                    template: \"\\n    <div class=\\\"total-padding\\\" #invisiblePadding></div>\\n    <div class=\\\"scrollable-content\\\" #content>\\n      <ng-content></ng-content>\\n    </div>\\n  \",\r\n                    host: {\r\n                        '[class.horizontal]': \"horizontal\",\r\n                        '[class.vertical]': \"!horizontal\",\r\n                        '[class.selfScroll]': \"!parentScroll\"\r\n                    },\r\n                    styles: [\"\\n    :host {\\n      position: relative;\\n\\t  display: block;\\n      -webkit-overflow-scrolling: touch;\\n    }\\n\\t\\n\\t:host.horizontal.selfScroll {\\n      overflow-y: visible;\\n      overflow-x: auto;\\n\\t}\\n\\t:host.vertical.selfScroll {\\n      overflow-y: auto;\\n      overflow-x: visible;\\n\\t}\\n\\t\\n    .scrollable-content {\\n      top: 0;\\n      left: 0;\\n      width: 100%;\\n      height: 100%;\\n      max-width: 100vw;\\n      max-height: 100vh;\\n      position: absolute;\\n    }\\n\\n\\t.scrollable-content ::ng-deep > * {\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t\\n\\t:host.horizontal {\\n\\t\\twhite-space: nowrap;\\n\\t}\\n\\t\\n\\t:host.horizontal .scrollable-content {\\n\\t\\tdisplay: flex;\\n\\t}\\n\\t\\n\\t:host.horizontal .scrollable-content ::ng-deep > * {\\n\\t\\tflex-shrink: 0;\\n\\t\\tflex-grow: 0;\\n\\t\\twhite-space: initial;\\n\\t}\\n\\t\\n    .total-padding {\\n      width: 1px;\\n      opacity: 0;\\n    }\\n    \\n    :host.horizontal .total-padding {\\n      height: 100%;\\n    }\\n  \"]\r\n                },] },\r\n    ];\r\n    /** @nocollapse */\r\n    VirtualScrollerComponent.ctorParameters = function () { return [\r\n        { type: core_1.ElementRef, },\r\n        { type: core_1.Renderer2, },\r\n        { type: core_1.NgZone, },\r\n        { type: core_1.ChangeDetectorRef, },\r\n        { type: Object, decorators: [{ type: core_1.Inject, args: [core_2.PLATFORM_ID,] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollThrottlingTime',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollDebounceTime',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollAnimationTime',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollbarWidth',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.scrollbarHeight',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.checkResizeInterval',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.resizeBypassRefreshThreshold',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.modifyOverflowStyleOfParentScroll',] },] },\r\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: ['virtualScroller.stripedTable',] },] },\r\n    ]; };\r\n    VirtualScrollerComponent.propDecorators = {\r\n        'executeRefreshOutsideAngularZone': [{ type: core_1.Input },],\r\n        'enableUnequalChildrenSizes': [{ type: core_1.Input },],\r\n        'useMarginInsteadOfTranslate': [{ type: core_1.Input },],\r\n        'modifyOverflowStyleOfParentScroll': [{ type: core_1.Input },],\r\n        'stripedTable': [{ type: core_1.Input },],\r\n        'scrollbarWidth': [{ type: core_1.Input },],\r\n        'scrollbarHeight': [{ type: core_1.Input },],\r\n        'childWidth': [{ type: core_1.Input },],\r\n        'childHeight': [{ type: core_1.Input },],\r\n        'ssrChildWidth': [{ type: core_1.Input },],\r\n        'ssrChildHeight': [{ type: core_1.Input },],\r\n        'ssrViewportWidth': [{ type: core_1.Input },],\r\n        'ssrViewportHeight': [{ type: core_1.Input },],\r\n        'bufferAmount': [{ type: core_1.Input },],\r\n        'scrollAnimationTime': [{ type: core_1.Input },],\r\n        'resizeBypassRefreshThreshold': [{ type: core_1.Input },],\r\n        'scrollThrottlingTime': [{ type: core_1.Input },],\r\n        'scrollDebounceTime': [{ type: core_1.Input },],\r\n        'checkResizeInterval': [{ type: core_1.Input },],\r\n        'items': [{ type: core_1.Input },],\r\n        'compareItems': [{ type: core_1.Input },],\r\n        'horizontal': [{ type: core_1.Input },],\r\n        'parentScroll': [{ type: core_1.Input },],\r\n        'update': [{ type: core_1.Output },],\r\n        'vsUpdate': [{ type: core_1.Output },],\r\n        'change': [{ type: core_1.Output },],\r\n        'vsChange': [{ type: core_1.Output },],\r\n        'start': [{ type: core_1.Output },],\r\n        'vsStart': [{ type: core_1.Output },],\r\n        'end': [{ type: core_1.Output },],\r\n        'vsEnd': [{ type: core_1.Output },],\r\n        'contentElementRef': [{ type: core_1.ViewChild, args: ['content', { read: core_1.ElementRef },] },],\r\n        'invisiblePaddingElementRef': [{ type: core_1.ViewChild, args: ['invisiblePadding', { read: core_1.ElementRef },] },],\r\n        'headerElementRef': [{ type: core_1.ContentChild, args: ['header', { read: core_1.ElementRef },] },],\r\n        'containerElementRef': [{ type: core_1.ContentChild, args: ['container', { read: core_1.ElementRef },] },],\r\n    };\r\n    return VirtualScrollerComponent;\r\n}());\r\nexports.VirtualScrollerComponent = VirtualScrollerComponent;\r\nvar VirtualScrollerModule = (function () {\r\n    function VirtualScrollerModule() {\r\n    }\r\n    VirtualScrollerModule.decorators = [\r\n        { type: core_1.NgModule, args: [{\r\n                    exports: [VirtualScrollerComponent],\r\n                    declarations: [VirtualScrollerComponent],\r\n                    imports: [common_2.CommonModule]\r\n                },] },\r\n    ];\r\n    /** @nocollapse */\r\n    VirtualScrollerModule.ctorParameters = function () { return []; };\r\n    return VirtualScrollerModule;\r\n}());\r\nexports.VirtualScrollerModule = VirtualScrollerModule;\r\n//# sourceMappingURL=virtual-scroller.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ngx-virtual-scroller/dist/virtual-scroller.js\n// module id = 134\n// module chunks = 1","\"use strict\";\n// Experimental API below\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * get input values\n *\n * Extended by: Gabriel Schuster <github.com@actra.de>\n * Now gets values of inputs (including \"checked\" status radios, checkboxes), textareas and selects (including multiselects)\n * Tries to identify the elements as exact as possible, falls back to numeric index when identification fails\n * WIP refactor by: PatrickJS\n */\nfunction __getInputValues() {\n    var _inputs = document.querySelectorAll('input, textarea, select');\n    var inputs = Array.prototype.slice.call(_inputs);\n    return inputs.map(function (input) {\n        var inputTagName = input.tagName.toLowerCase();\n        var inputType = input.type;\n        var inputId = (input.id && typeof input.id === 'string') ? input.id : null;\n        var inputName = (input.name && typeof input.name === 'string') ? input.name : null;\n        var inputValue = (input.value && typeof input.value === 'string') ? input.value : null;\n        var inputChildNodes = input.childNodes;\n        var inputSelected = Boolean(input.selected);\n        var elementStore = {\n            'tag': inputTagName,\n            'type': null,\n            'id': inputId,\n            'name': inputName,\n            'value': '',\n            'checked': false,\n            'options': []\n        };\n        if ('input' === inputTagName || 'textarea' === inputTagName) {\n            elementStore['type'] = inputType;\n            if ('input' !== inputTagName) {\n                elementStore['value'] = inputValue;\n                return elementStore;\n            }\n            switch (inputType) {\n                case 'checkbox':\n                case 'radio':\n                    elementStore['checked'] = inputSelected;\n                    elementStore['value'] = inputValue;\n                    return elementStore;\n                case 'image':\n                case 'button':\n                case 'submit':\n                case 'reset':\n                default:\n                    // These types don't need any config and thus need no update, they only were stored because they match \"input\"\n                    return elementStore;\n            }\n        }\n        else if ('select' === inputTagName) {\n            var childNodes = Array.prototype.slice.call(inputChildNodes);\n            var options = childNodes.map(function (option, i) {\n                return { value: option['value'], selected: Boolean(option['selected']) };\n            });\n            elementStore['options'] = options;\n            return elementStore;\n        }\n        return elementStore;\n    });\n}\nexports.__getInputValues = __getInputValues;\n/**\n * set input values\n *\n * Extended by: Gabriel Schuster <github.com@actra.de>\n * WIP refactor by: PatrickJS\n */\nfunction __setInputValues($inputs) {\n    var inputs = document.querySelectorAll('input, textarea');\n    $inputs.forEach(function (store, i) {\n        if ('input' === store.tag || 'textarea' === store.tag) {\n            if ('input' === store.tag && ('checkbox' === store.type || 'radio' === store.type)) {\n                var selector = 'input' + (null !== store.id ? '#' + store.id : '') + '[type=\"' + store.type + '\"]' + (null !== store.name ? '[name=\"' + store.name + '\"]' : '') +\n                    '[value=\"' + store.value + '\"]';\n                var element = document.body.querySelector(selector);\n                if (element && Boolean(store['checked'])) {\n                    element['checked'] = 'checked';\n                    element.dispatchEvent(new CustomEvent('input', { detail: element['checked'] }));\n                }\n            }\n            else if ('input' === store.tagName.toLowerCase() &&\n                ('image' === store.type || 'button' === store.type || 'submit' === store.type || 'reset' === store.type)) {\n                // These types don't need any config and thus need no update, they only were stored because they match \"input\"\n            }\n            else {\n                if (null === store.id && null === store.name) {\n                    if (store.value.length &&\n                        inputs[i] &&\n                        inputs[i].tagName.toLowerCase() === store.tag &&\n                        ('textarea' === store.tag || inputs[i].getAttribute('type') === store.type) &&\n                        ('string' !== typeof inputs[i].id || !inputs[i].id.length) &&\n                        ('string' !== typeof inputs[i].getAttribute('name') ||\n                            !inputs[i].getAttribute('name').length)) {\n                        inputs[i]['value'] = store.value;\n                        inputs[i].dispatchEvent(new CustomEvent('input', { detail: inputs[i]['value'] }));\n                    }\n                }\n                else {\n                    var selector = 'input' +\n                        (null !== store.id ? '#' + store.id : '') + ('input' === store.tag ? '[type=\"' + store.type + '\"]' : '') +\n                        (null !== store.name ? '[name=\"' + store.name + '\"]' : '');\n                    var element = document.body.querySelector(selector);\n                    if (element && store.value.length) {\n                        element['value'] = store.value;\n                        element.dispatchEvent(new CustomEvent('input', { detail: element['value'] }));\n                    }\n                }\n            }\n        }\n        else if ('select' === store.tag) {\n            var select_1 = null;\n            if (null === store.id && null === store.name) {\n                if (inputs[i] && inputs[i].tagName.toLowerCase() === store.tag && ('string' !== typeof inputs[i].id || !inputs[i].id.length) &&\n                    ('string' !== typeof inputs[i].getAttribute('name') || !inputs[i].getAttribute('name').length)) {\n                    select_1 = inputs[i];\n                }\n            }\n            else {\n                var selector = 'select' + (null !== store.id ? '#' + store.id : '') + (null !== store.name ? '[name=\"' + store.name + '\"]' : '');\n                var element = document.body.querySelector(selector);\n                if (element) {\n                    select_1 = element;\n                }\n            }\n            if (select_1) {\n                store.options.forEach(function (storedOption, j) {\n                    var option = select_1.querySelector('option[value=\"' + storedOption.value + '\"]');\n                    if (!option &&\n                        select_1.childNodes[j] &&\n                        ('string' !== typeof select_1.childNodes[j]['value'] || !select_1.childNodes[j]['value'].length)) {\n                        option = select_1.childNodes[j];\n                    }\n                    if (option && !!storedOption.selected) {\n                        option['selected'] = 'selected';\n                        option.dispatchEvent(new CustomEvent('input', { detail: option['selected'] }));\n                    }\n                });\n            }\n        }\n    });\n}\nexports.__setInputValues = __setInputValues;\nfunction __createInputTransfer() {\n    var $inputs = __getInputValues();\n    return function restoreInputValues() {\n        return __setInputValues($inputs);\n    };\n}\nexports.__createInputTransfer = __createInputTransfer;\n//# sourceMappingURL=experimental.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angularclass/hmr/dist/experimental.js\n// module id = 1340\n// module chunks = 1","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MODULE_CONFIG = {\n    'OnInit': 'hmrOnInit',\n    'OnStatus': 'hmrOnStatus',\n    'OnCheck': 'hmrOnCheck',\n    'OnDecline': 'hmrOnDecline',\n    'OnDestroy': 'hmrOnDestroy',\n    'AfterDestroy': 'hmrAfterDestroy'\n};\nfunction hmrModule(MODULE_REF, MODULE, CONFIG) {\n    if (CONFIG === void 0) { CONFIG = exports.MODULE_CONFIG; }\n    if (MODULE['hot']) {\n        MODULE['hot']['accept']();\n        if (MODULE_REF.instance[exports.MODULE_CONFIG['OnInit']]) {\n            if (MODULE['hot']['data']) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnInit']](MODULE['hot']['data']);\n            }\n        }\n        if (MODULE_REF.instance[exports.MODULE_CONFIG['OnStatus']]) {\n            MODULE['hot']['apply'](function hmrOnStatus(status) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnStatus']](status);\n            });\n        }\n        if (MODULE_REF.instance[exports.MODULE_CONFIG['OnCheck']]) {\n            MODULE['hot']['check'](function hmrOnCheck(err, outdatedModules) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnCheck']](err, outdatedModules);\n            });\n        }\n        if (MODULE_REF.instance[exports.MODULE_CONFIG['OnDecline']]) {\n            MODULE['hot']['decline'](function hmrOnDecline(dependencies) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnDecline']](dependencies);\n            });\n        }\n        MODULE['hot']['dispose'](function hmrOnDestroy(store) {\n            if (MODULE_REF.instance[exports.MODULE_CONFIG['OnDestroy']]) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['OnDestroy']](store);\n            }\n            MODULE_REF.destroy();\n            if (MODULE_REF.instance[exports.MODULE_CONFIG['AfterDestroy']]) {\n                MODULE_REF.instance[exports.MODULE_CONFIG['AfterDestroy']](store);\n            }\n        });\n    }\n    return MODULE_REF;\n}\nexports.hmrModule = hmrModule;\n//# sourceMappingURL=hmr.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angularclass/hmr/dist/hmr.js\n// module id = 1341\n// module chunks = 1","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar module_1 = require(\"./module\");\nexports.FlashMessagesModule = module_1.FlashMessagesModule;\nvar flash_messages_service_1 = require(\"./flash-messages.service\");\nexports.FlashMessagesService = flash_messages_service_1.FlashMessagesService;\n//# sourceMappingURL=index.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/angular2-flash-messages/module/index.js\n// module id = 1342\n// module chunks = 1","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar flash_messages_component_1 = require(\"./flash-messages.component\");\nvar flash_messages_service_1 = require(\"./flash-messages.service\");\nvar FlashMessagesModule = (function () {\n    function FlashMessagesModule() {\n    }\n    return FlashMessagesModule;\n}());\nFlashMessagesModule.decorators = [\n    { type: core_1.NgModule, args: [{\n                imports: [common_1.CommonModule],\n                declarations: [flash_messages_component_1.FlashMessagesComponent],\n                exports: [flash_messages_component_1.FlashMessagesComponent],\n                providers: [flash_messages_service_1.FlashMessagesService]\n            },] },\n];\n/** @nocollapse */\nFlashMessagesModule.ctorParameters = function () { return []; };\nexports.FlashMessagesModule = FlashMessagesModule;\n//# sourceMappingURL=module.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/angular2-flash-messages/module/module.js\n// module id = 1343\n// module chunks = 1","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar flash_message_1 = require(\"./flash-message\");\nvar flash_messages_service_1 = require(\"./flash-messages.service\");\nvar FlashMessagesComponent = (function () {\n    function FlashMessagesComponent(_flashMessagesService, _cdRef) {\n        this._flashMessagesService = _flashMessagesService;\n        this._cdRef = _cdRef;\n        this._defaults = {\n            text: 'default message',\n            cssClass: ''\n        };\n        this.messages = [];\n        this.classes = '';\n        this._grayOut = false;\n        this._flashMessagesService.show = this.show.bind(this);\n        this._flashMessagesService.grayOut = this.grayOut.bind(this);\n    }\n    FlashMessagesComponent.prototype.ngOnInit = function () { };\n    FlashMessagesComponent.prototype.show = function (text, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        var defaults = {\n            timeout: 2500,\n            cssClass: ''\n        };\n        for (var attrname in options) {\n            defaults[attrname] = options[attrname];\n        }\n        var message = new flash_message_1.FlashMessage(text, defaults.cssClass);\n        this.messages.push(message);\n        this._cdRef.detectChanges();\n        window.setTimeout(function () {\n            _this._remove(message);\n            _this._cdRef.detectChanges();\n        }, defaults.timeout);\n    };\n    FlashMessagesComponent.prototype.grayOut = function (value) {\n        if (value === void 0) { value = false; }\n        this._grayOut = value;\n    };\n    FlashMessagesComponent.prototype._remove = function (message) {\n        this.messages = this.messages.filter(function (msg) { return msg.id !== message.id; });\n    };\n    return FlashMessagesComponent;\n}());\nFlashMessagesComponent.decorators = [\n    { type: core_1.Component, args: [{\n                selector: 'flash-messages',\n                template: \"\\n      <div id=\\\"flashMessages\\\" class=\\\"flash-messages {{classes}}\\\">\\n          <div id=\\\"grayOutDiv\\\" *ngIf='_grayOut && messages.length'></div>\\n          <div class=\\\"alert flash-message {{message.cssClass}}\\\" *ngFor='let message of messages'>\\n              <p>{{message.text}}</p>\\n          </div> \\n      </div>\\n  \"\n            },] },\n];\n/** @nocollapse */\nFlashMessagesComponent.ctorParameters = function () { return [\n    { type: flash_messages_service_1.FlashMessagesService, },\n    { type: core_1.ChangeDetectorRef, },\n]; };\nexports.FlashMessagesComponent = FlashMessagesComponent;\n//# sourceMappingURL=flash-messages.component.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/angular2-flash-messages/module/flash-messages.component.js\n// module id = 1344\n// module chunks = 1","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar FlashMessage = (function () {\n    function FlashMessage(text, cssClass) {\n        this.id = (FlashMessage.nextId++);\n        this.text = 'default text';\n        this.cssClass = '';\n        this.text = text;\n        this.cssClass = cssClass;\n    }\n    return FlashMessage;\n}());\nFlashMessage.nextId = 0;\nexports.FlashMessage = FlashMessage;\n//# sourceMappingURL=flash-message.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/angular2-flash-messages/module/flash-message.js\n// module id = 1345\n// module chunks = 1","module.exports = \"<div class=\\\"account\\\">\\n    <h1 class=\\\"page-header\\\">\\n        {{'ACCOUNT.TITLE' | translate:lang}}\\n        <small>{{'ACCOUNT.SUBTITLE' | translate:lang}}</small>\\n    </h1>\\n    <div class=\\\"account-tabs\\\">\\n        <ul class=\\\"nav nav-tabs nav-tabs-inverse\\\" role=\\\"tablist\\\">\\n            <li role=\\\"presentation tab\\\" *ngFor=\\\"let tab of tabs; let i = index\\\" [class.active]=\\\"tab.active\\\">\\n                <a href=\\\"javascript:;\\\" (click)=\\\"onTabClick(i)\\\">{{tab.title}}</a>\\n            </li>\\n        </ul>\\n        <div role=\\\"tabpanel\\\" class=\\\"tab-pane panel-body\\\">\\n            <div class=\\\"loading-container\\\" [hidden]=\\\"!loadingContent\\\">\\n                <span class=\\\"spinner-small\\\"></span>\\n            </div>\\n            <ng-content></ng-content>\\n        </div>\\n    </div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/account/account.view.html\n// module id = 1346\n// module chunks = 1","module.exports = \":host .account .account-tabs .nav-tabs a {\\n  color: #a7a7a7; }\\n\\n:host .account .account-tabs .nav-tabs .active a {\\n  color: #242a30; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/account/account.view.scss\n// module id = 1347\n// module chunks = 1","import { AfterViewInit, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { FlashMessagesService } from 'angular2-flash-messages';\n\nimport {\n    AccountProduct,\n    AccountProductsListResponse,\n    PaymentMethod,\n    PaymentMethodsList,\n    SubscriptionOrderResponse,\n} from '../../../model/api.model';\nimport { PaymentsService } from '../../../service/payments.service';\nimport { SubscriptionService } from '../../../service/subscription.service';\nimport { TabService } from '../../../service/tab.service';\nimport { UserService } from '../../../service/user.service';\nimport { ViewService } from '../../../service/view.service';\nimport { ProductService } from '../../../service/product.service';\nimport { ModalService } from './../../modal/modal.service';\n\n@Component({\n    selector: 'account-subscriptions',\n    template: require('./account.subscriptions.view.html'),\n    styles: [\n         ':host .subscriptions .result-list .plan-info ul{padding-left:20px;}'\n     ],\n})\nexport class AccountSubscriptionsView extends Localization implements OnInit, AfterViewInit {\n    accountProducts: AccountProductsListResponse;\n    accountPaymentMethods: PaymentMethodsList;\n    showPaymentsModal = false;\n    showSpinner = false;\n    braintreeClientToken: string;\n    private planOnEdit: AccountProduct;\n    constructor(\n        private route: ActivatedRoute,\n        private tabService: TabService,\n        private userService: UserService,\n        private productService: ProductService,\n        private paymentsService: PaymentsService,\n        private subscriptionService: SubscriptionService,\n        private modal: ModalService,\n        private view: ViewService,\n        private flashMessagesService: FlashMessagesService,\n        public locale: LocaleService,\n        public translation: TranslationService,\n        public cdr: ChangeDetectorRef) {\n        super(locale, translation);\n        //get data from resolver\n        this.route.data.subscribe(\n            (data: any) => {\n                if (data && data.account) {\n                    this.accountProducts = data.account[1];\n                    this.accountPaymentMethods = data.account[2];\n                    this.addAdditionalProperties();\n                    if (data.account[3] != null)\n                        this.braintreeClientToken = data.account[3].bt_client_token;\n                }\n            });\n    }\n\n    ngOnInit() {\n        this.tabService.onNavigatedTo(0);\n    }\n\n    ngAfterViewInit() {\n        let items: any = $('[data-toggle=\"tooltip\"]');\n        items.tooltip();\n    }\n\n    onPaymentsModalClosed(): void {\n        this.showPaymentsModal = false;\n    }\n\n    calcViewsUsagePerc(viewsMade: number, viewsSize: number): number {\n        let result = 0;\n        // Count share if it is possible.\n        if (viewsSize > 0) {\n            result = 100 * viewsMade / viewsSize;\n        }\n        // Result has upper boundary '100'. Limit to it if it is bigger.\n        if (result > 100) {\n            result = 100;\n        }\n        return result;\n    }\n\n    private addAdditionalProperties(): void {\n        if (this.accountProducts)\n            this.accountProducts.results.forEach((plan: AccountProduct) => {\n                //set payment method\n                this.accountPaymentMethods.results.some((pm: PaymentMethod) => {\n                    if (pm.token == plan.bt_pm_token) {\n                        plan.payment_method = pm;\n                        return true;\n                    }\n                    return false;\n                });\n                let total = plan.base_price.net;\n                //calculate current total\n                if (plan.current_views > 0) {\n                    if (plan.base_views_size > 0) {\n                        if (plan.current_views > plan.base_views_size \n                            && plan.usage_unit_price.net > 0 && plan.usage_unit_size > 0) {\n                            let usage_count = (plan.current_views - plan.base_views_size) / plan.usage_unit_size + 1;\n                            total += usage_count * plan.usage_unit_price.net;\n                        }\n                    }\n                    else\n                        if (plan.usage_unit_price.net > 0 && plan.usage_unit_size > 0) {\n                            let usage_count = plan.current_views / plan.usage_unit_size + 1;\n                            total += usage_count * plan.usage_unit_price.net;\n                        }\n                }\n                plan.current_total = total;\n            });\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/subscriptions/account.subscriptions.view.ts","module.exports = \"<account-view>\\n<div class=\\\"subscriptions\\\">\\n    <fieldset>\\n        <legend>{{'ACCOUNT_SUBS.TITLE' | translate:lang}}</legend>\\n        <h5 class=\\\"empty-message\\\" *ngIf=\\\"accountProducts == null || accountProducts.count <= 0\\\">{{'ACCOUNT_SUBS.MESSAGE.EMPTY' | translate:lang}}</h5>\\n        <!--Begin Products List-->\\n        <div class=\\\"panel panel-inverse\\\" *ngFor=\\\"let plan of accountProducts.results\\\">\\n            <ul class=\\\"result-list\\\">\\n                <li>\\n                    <div class=\\\"plan-info\\\">\\n                        <h3 class=\\\"panel-title\\\">\\n                            <span *ngIf=\\\"plan.status == 'active'\\\" class=\\\"label label-success m-r-10\\\">{{'ACCOUNT_SUBS.LABEL.ACTIVE' | translate:lang}}</span>\\n                            <span *ngIf=\\\"plan.status == 'inactive'\\\" class=\\\"label label-danger m-r-10\\\">{{'ACCOUNT_SUBS.LABEL.INACTIVE' | translate:lang}}</span>                            {{plan.product_plan.name}}\\n                            <span class=\\\"product-title\\\">{{plan.product.name}}</span></h3>\\n                        <ul>\\n                            <li *ngIf=\\\"plan?.product_plan?.level <= 1\\\">\\n                               <h5>Basic player for testing (Web)</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan?.product_plan?.level > 1\\\">\\n                               <h5>Player for commercial use</h5>\\n                               <h5>(Web, iOS, Android)</h5>\\n                            </li>\\n                            <li *ngIf=\\\"!plan.sla_info || plan.sla_info == 'none'\\\">\\n                               <h5>Support (not guaranteed)</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan.sla_info && plan.sla_info != 'none'\\\">\\n                               <h5>Support: {{plan.sla_info}}</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan?.statistics_type\\\">\\n                               <h5>{{ 'PLAN_CARROUSEL.EXTRA.STATS' | translate:lang }}: {{ plan?.statistics_type }}</h5>\\n                               <h5 *ngIf=\\\"plan?.statistics_type == 'basic'\\\">(audience stats only)</h5>\\n                               <h5 *ngIf=\\\"plan?.statistics_type == 'extended'\\\">(audience, geo, tech, realtime analytics, engagement rate)</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan.has_ads_support\\\">\\n                               <h5>{{ 'PLAN_CARROUSEL.EXTRA.ADS' | translate:lang }}</h5>\\n                            </li>\\n                            <li *ngIf=\\\"plan.has_drm_support\\\">\\n                               <h5>{{ 'PLAN_CARROUSEL.EXTRA.DRM' | translate:lang }}</h5>\\n                            </li>\\n                        </ul>\\n                    </div>\\n\\n                    <div class=\\\"loading-container\\\" *ngIf=\\\"showSpinner\\\">\\n                        <span class=\\\"spinner-small\\\"></span>\\n                    </div>\\n\\n                    <div class=\\\"plan-subscription\\\" *ngIf=\\\"!showSpinner\\\">\\n                        <h4 class=\\\"title\\\">{{plan.product_plan.description}}</h4>\\n                        <table>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.CREATED_AT' | translate:lang}}:</span></td>\\n                                <td>{{plan.created_at * 1000 | date:'longDate'}}</td>\\n                            </tr>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.UPDATED_AT' | translate:lang}}:</span></td>\\n                                <td>{{plan.updated_at * 1000 | date:'longDate'}}</td>\\n                            </tr>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.NEXT_BILLING' | translate:lang}}:</span></td>\\n                                <td *ngIf=\\\"plan.next_billing_at\\\">{{plan.next_billing_at * 1000 | date:'longDate'}}</td>\\n                                <td *ngIf=\\\"!plan.next_billing_at\\\">{{'ACCOUNT_SUBS.LABEL.NOT_AVAILABLE' | translate:lang}}</td>\\n                            </tr>\\n                        </table>\\n                    </div>\\n\\n                    <div class=\\\"plan-price\\\" *ngIf=\\\"!showSpinner\\\">\\n                        <table>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.BASE_PRICE' | translate:lang}}</span></td>\\n                                <td>{{plan.base_price.gross | currency:plan.base_price.currency:true:'1.0-2'}}</td>\\n                            </tr>\\n                            <tr>\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.CURRENT_TOTAL' | translate:lang}}</span></td>\\n                                <td>{{plan.base_price.gross | currency:plan.base_price.currency:true:'1.0-2'}}</td>\\n                            </tr>\\n                            <tr *ngIf=\\\"plan.payment_method\\\">\\n                                <td><span class=\\\"subtitle\\\">{{'ACCOUNT_SUBS.LABEL.PM' | translate:lang}}</span></td>\\n                                <td><img class=\\\"type-img\\\" [src]=\\\"plan.payment_method.image_url\\\" /> <span *ngIf=\\\"plan.payment_method.credit_card\\\">{{plan.payment_method.credit_card.masked_number}}</span>\\n                                    <span *ngIf=\\\"plan.payment_method.pay_pal_account\\\">{{plan.payment_method.pay_pal_account.email}}</span></td>\\n                            </tr>\\n                        </table>\\n                    </div>\\n                </li>\\n            </ul>\\n        </div>\\n        <!--End Products List-->\\n    </fieldset>\\n    <pmModal [btClientToken]=\\\"braintreeClientToken\\\" [active]=\\\"showPaymentsModal\\\" (onPaymentNonceReceived)=\\\"onPaymentNonceReceived($event)\\\"\\n        (onCloseModal)=\\\"onPaymentsModalClosed()\\\"></pmModal>\\n</div>\\n</account-view>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/account/subscriptions/account.subscriptions.view.html\n// module id = 1349\n// module chunks = 1","import { Component, OnInit, AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Localization, LocaleService, TranslationService } from 'angular-l10n';\nimport { FlashMessagesService } from 'angular2-flash-messages';\nimport { UserService } from '../../../service/user.service';\nimport { TabService } from '../../../service/tab.service';\nimport { PaymentsService } from '../../../service/payments.service';\nimport { PaymentTransactionsList, PaymentTransaction, Invoice } from '../../../model/api.model';\nimport { ModalService } from './../../modal/modal.service';\n\n//\ninterface PaymentTransactionEdit extends PaymentTransaction {\n    terms: boolean;\n}\n//\n@Component({\n    selector: 'account-invoices',\n    template: require('./account.invoices.view.html'),\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AccountInvoicesView extends Localization implements OnInit, AfterViewInit {\n    transactionsList: PaymentTransactionsList;\n    transactionOnEdit: PaymentTransactionEdit | null = null;\n    transactionDetails: PaymentTransaction | null = null;\n    //\n    constructor(\n        private userService: UserService,\n        private route: ActivatedRoute,\n        private tabService: TabService,\n        private flashMessagesService: FlashMessagesService,\n        private cdr: ChangeDetectorRef,\n        private paymentsService: PaymentsService,\n        private modal: ModalService,\n        public locale: LocaleService,\n        public translation: TranslationService,\n        public payments: PaymentsService) {\n        super(locale, translation);\n        //get data from PaymentsResolver\n        this.route.data.subscribe((data: any) => {\n            if (data && data.account) {\n                this.transactionsList = data.account;\n                // Preselect first transaction.\n                if (this.transactionsList.count > 0) {\n                    this.transactionDetails = this.transactionsList.results[0];\n                }\n            }\n        });\n    }\n    //\n    ngOnInit() {\n        this.tabService.onNavigatedTo(2);\n        var itemsSet: any = $('.panel-body.products [rel=\"tooltip\"]');\n        itemsSet.tooltip();\n    }\n    //\n    ngAfterViewInit() {\n        //Start DataTables with first column (created date) on descending order\n        $('#data-table').DataTable({ 'order': [[0, 'desc']] });\n    }\n    //\n    public onSaveEdit(form: any): void {\n        //Show spinner on container\n        //Call endpoint\n        if (form.valid && this.userService.accountId && this.transactionOnEdit)\n            this.paymentsService.updateInvoice(this.userService.accountId, this.transactionOnEdit.invoice).subscribe(\n                (data: Invoice) => {\n                    //find this transaction on transactions List and update it\n                    this.transactionsList.results.some((transaction: PaymentTransaction, index: number) => {\n                        if (transaction.invoice && (transaction.invoice.id == data.id)) {\n                            this.transactionsList.results[index].invoice = data;\n                            return true;\n                        }\n                        return false;\n                    });\n                    this.flashMessagesService.show(this.translation.translate('ACCOUNT_INVOICES.MESSAGE.EDIT_SUCCESS'),\n                        { cssClass: 'alert-success', timeout: 3000 });\n                    this.transactionOnEdit = null;\n                    this.cdr.markForCheck();\n                },\n                (error) => {\n                    this.flashMessagesService.show(this.translation.translate('ACCOUNT_INVOICES.MESSAGE.EDIT_ERROR'),\n                        { cssClass: 'alert-failure', timeout: 3000 });\n                }\n            );\n    }\n    //\n    public editTransaction(transaction: PaymentTransaction): void {\n        this.transactionOnEdit = JSON.parse(JSON.stringify(transaction));\n        if (transaction && this.transactionOnEdit)\n            this.transactionOnEdit.terms = false;\n    }\n    //\n    public showTermsForEdit(): boolean {\n        this.modal.prompt(this.translation.translate('ACCOUNT_INVOICES.MESSAGE.AGREEMENT.TEXT'), [{\n            label: this.translation.translate('ACCOUNT_INVOICES.BUTTON.AGREE'), fa: 'check',\n            close: true, click: () => {\n                if (this.transactionOnEdit)\n                    this.transactionOnEdit.terms = true;\n                this.cdr.markForCheck();\n            }\n        },\n        {\n            label: this.translation.translate('ACCOUNT_INVOICES.BUTTON.NOT_AGREE'),\n            fa: 'ban', close: true, click: () => {\n                if (this.transactionOnEdit)\n                    this.transactionOnEdit.terms = false;\n                this.cdr.markForCheck();\n            }\n        }\n        ]);\n        return false;\n    }\n    //\n    public showReceiptDetails(receipt: PaymentTransaction): void {\n        if (this.transactionDetails != null && receipt.id != this.transactionDetails.id) {\n            this.transactionDetails = receipt;\n            this.transactionOnEdit = null;\n        }\n        this.cdr.markForCheck();\n    }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/invoices/account.invoices.view.ts","module.exports = \"<account-view>\\n<div class=\\\"invoices\\\">\\n    <fieldset>\\n        <legend> {{'ACCOUNT_INVOICES.SUBTITLE' | translate:lang}}</legend>\\n        <h5 class=\\\"empty-message\\\" *ngIf=\\\"!transactionsList || transactionsList.count <= 0\\\">{{'ACCOUNT_INVOICES.MESSAGE.EMPTY' | translate:lang}}</h5>\\n        <div class=\\\"row\\\" *ngIf=\\\"transactionsList && this.transactionsList.count > 0\\\">\\n            <!--Start Invoices table-->\\n            <div class=\\\"col-md-6\\\">\\n                <table id=\\\"data-table\\\" class=\\\"table table-striped table-bordered table-hover\\\">\\n                    <thead>\\n                        <tr>\\n                            <th>{{'ACCOUNT_INVOICES.LABEL.CREATED' | translate:lang}}</th>\\n                            <th>{{'ACCOUNT_INVOICES.LABEL.PLAN_NAME' | translate:lang}}</th>\\n                            <th>{{'ACCOUNT_INVOICES.LABEL.TOTAL' | translate:lang}}</th>\\n                            <th>{{'ACCOUNT_INVOICES.LABEL.STATUS' | translate:lang}}</th>\\n                        </tr>\\n                    </thead>\\n                    <tbody>\\n                        <tr *ngFor=\\\"let receipt of transactionsList.results;let i = index\\\" [ngClass]=\\\"{selected:receipt.id == transactionDetails.id}\\\"\\n                            (click)=\\\"showReceiptDetails(receipt)\\\">\\n                            <td>{{receipt.created_at * 1000 | date:'yyyy-MM-dd'}}</td>\\n                            <td>\\n                                <span *ngIf=\\\"receipt.account_subscription\\\">{{receipt.account_subscription.product_plan.name}}</span>\\n                                <span *ngIf=\\\"!receipt.account_subscription\\\">{{'ACCOUNT_INVOICES.MESSAGE.NOT_AVAILABLE' | translate:lang}}</span>\\n                            </td>\\n                            <td>\\n                                <span *ngIf=\\\"receipt.total_cost\\\">{{receipt.total_cost.gross | currency:receipt.total_cost.currency:true:'1.2-2'}}‎</span>\\n                                <span *ngIf=\\\"!receipt.total_cost\\\">{{'ACCOUNT_INVOICES.MESSAGE.NOT_AVAILABLE' | translate:lang}}</span>\\n                            <td>\\n                                <span class=\\\"label\\\" [ngClass]=\\\"{'bg-green':receipt.status == 'settled', 'label-warning':status != 'settled'}\\\">{{receipt.status}}</span>\\n                            </td>\\n                        </tr>\\n                    </tbody>\\n                </table>\\n            </div>\\n            <!--End Invoices table-->\\n            <!--Start Invoice Details -->\\n            <div class=\\\"col-md-6\\\">\\n                <h5>{{'ACCOUNT_INVOICES.LABEL.SELECTED_INVOICE' | translate:lang}}</h5>\\n                <div class=\\\"well invoice-container\\\" *ngIf=\\\"!transactionDetails || !transactionDetails.invoice\\\">\\n                    <div class=\\\"invoice-not-ready-note\\\">{{'ACCOUNT_INVOICES.LABEL.INVOICE_NOT_READY' | translate:lang}}</div>\\n                </div>\\n                <div class=\\\"well invoice-container\\\" *ngIf=\\\"transactionDetails && transactionDetails.invoice\\\">\\n                    <div class=\\\"invoice\\\">\\n                        <div class=\\\"invoice-company\\\">\\n                            <span class=\\\"pull-right\\\">\\n                    <a [href]=\\\"transactionDetails.invoice.download_url\\\" class=\\\"btn btn-sm btn-primary m-b-10\\\" target=\\\"_blank\\\"><i class=\\\"fa fa-download m-r-5\\\"></i>{{'ACCOUNT_INVOICES.LABEL.EXPORT_PDF' | translate:lang}}</a>\\n                    </span> {{transactionDetails.invoice.company_name}}\\n                        </div>\\n                        <div class=\\\"invoice-header\\\">\\n                            <div class=\\\"invoice-from\\\">\\n                                <small>{{'ACCOUNT_INVOICES.LABEL.ADDRESS' | translate:lang}} <a href=\\\"javascript:;\\\" (click)=\\\"editTransaction(transactionDetails)\\\" *ngIf=\\\"!transactionOnEdit || transactionOnEdit.id != transactionDetails.id\\\">{{'ACCOUNT_INVOICES.LABEL.EDIT' | translate:lang}}</a></small>\\n\\n                                <address *ngIf=\\\"!transactionOnEdit || transactionOnEdit.id != transactionDetails.id\\\">\\n                                    <strong>{{transactionDetails.invoice.company_name}}</strong>\\n                                    <br /><small>{{'ACCOUNT_INVOICES.LABEL.TAX_NO' | translate:lang}}:</small>{{transactionDetails.invoice.tax_no}}\\n                                    <br />{{transactionDetails.invoice.address}}\\n                                    <br />{{transactionDetails.invoice.city}}, {{transactionDetails.invoice.postal_code}}\\n                                    <br />{{transactionDetails.invoice.country}}\\n                                    <br/><span *ngIf=\\\"transactionDetails.invoice.phone_number\\\"> <small>{{'ACCOUNT_INVOICES.LABEL.PHONE' | translate:lang}}:</small> {{transactionDetails.invoice.phone_number}}</span>\\n                                </address>\\n                                <form *ngIf=\\\"transactionOnEdit && transactionOnEdit.id == transactionDetails.id\\\" #receiptEditForm=\\\"ngForm\\\">\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{'ACCOUNT_DETAILS.FORM.PLACEHOLDER.COMPANY' | translate:lang}}\\\" [(ngModel)]=\\\"transactionOnEdit.invoice.company_name\\\"\\n                                        name=\\\"company_name\\\" required/>\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.TAX_NO' | translate:lang }}\\\" [(ngModel)]=\\\"transactionOnEdit.invoice.tax_no\\\"\\n                                        name=\\\"tax_no\\\" required/>\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.ADDRESS' | translate:lang }}\\\" [(ngModel)]=\\\"transactionOnEdit.invoice.address\\\"\\n                                        name=\\\"address\\\" required/>\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.CITY' | translate:lang }}\\\" [(ngModel)]=\\\"transactionOnEdit.invoice.city\\\"\\n                                        name=\\\"city\\\" required/>\\n                                    <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.POSTAL_CODE' | translate:lang }}\\\"\\n                                        [(ngModel)]=\\\"transactionOnEdit.invoice.postal_code\\\" name=\\\"postal_code\\\" required/>\\n                                    <br /> {{transactionDetails.invoice.country}}\\n                                    <br /> <input class=\\\"pretty-input\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.PHONE_NUMBER' | translate:lang }}\\\"\\n                                        [(ngModel)]=\\\"transactionOnEdit.invoice.phone_number\\\" name=\\\"phone_number\\\" required/>\\n                                    <label>\\n                                                <input type=\\\"checkbox\\\" required name=\\\"terms\\\" [(ngModel)]=\\\"transactionOnEdit.terms\\\"/> {{ 'ACCOUNT_INVOICES.MESSAGE.AGREEMENT.1' | translate:lang }} \\n                                                <a href=\\\"javascript:;\\\" (click)=\\\"showTermsForEdit()\\\">\\n                                                    {{ 'ACCOUNT_INVOICES.MESSAGE.AGREEMENT.2' | translate:lang }}\\n                                                </a> \\n                                            </label>\\n                                    <div class=\\\"button-container\\\">\\n                                        <button *ngIf=\\\"transactionOnEdit.id == transactionDetails.id\\\" type=\\\"submit\\\" class=\\\"btn btn-success\\\" (click)=\\\"onSaveEdit(receiptEditForm)\\\"> {{ 'ACCOUNT_DETAILS.BUTTON.SAVE' | translate:lang }}</button>\\n                                        <button *ngIf=\\\"transactionOnEdit.id == transactionDetails.id\\\" type=\\\"button\\\" class=\\\"btn btn-danger\\\" (click)=\\\"editTransaction(null)\\\"> {{ 'ACCOUNT_DETAILS.BUTTON.CANCEL' | translate:lang }}</button>\\n                                    </div>\\n                                </form>\\n                            </div>\\n                            <div class=\\\"invoice-to\\\">\\n                                <small>{{'ACCOUNT_INVOICES.LABEL.DESCRIPTION' | translate:lang}}</small>\\n                                <br /><strong>\\n                                        <span *ngIf=\\\"transactionDetails.account_subscription\\\">{{transactionDetails.account_subscription.product_plan.name}}</span>\\n                                        <span *ngIf=\\\"!transactionDetails.account_subscription\\\">{{'ACCOUNT_INVOICES.MESSAGE.NOT_AVAILABLE' | translate:lang}}</span>\\n                                    </strong>\\n                                <br />{{'ACCOUNT_INVOICES.LABEL.BASE_PRICE' | translate:lang}}:\\n                                {{transactionDetails.invoice.total_cost.gross | currency:transactionDetails.invoice.total_cost.currency:true:'1.2-2'}}‎\\n                                <br />{{'ACCOUNT_INVOICES.LABEL.TAX' | translate:lang}}: \\n                                <span *ngIf=\\\"transactionDetails.invoice.total_cost.tax >= 0\\\">{{transactionDetails.invoice.total_cost.tax}} %‎</span>\\n                                <span *ngIf=\\\"!(transactionDetails.invoice.total_cost.tax >= 0)\\\" class=\\\"small\\\">{{transactionDetails.invoice.total_cost.tax}}</span>\\n\\n                            </div>\\n                            <div class=\\\"invoice-date\\\">\\n                                <div class=\\\"date m-t-5\\\">{{'ACCOUNT_INVOICES.LABEL.TOTAL' | translate:lang}}</div>\\n                                <div class=\\\"invoice-total\\\">\\n                                    <span>{{transactionDetails.invoice.total_cost.gross | currency:transactionDetails.invoice.total_cost.currency:true:'1.2-2'}}‎</span>\\n                                </div>\\n                            </div>\\n\\n                        </div>\\n                        <small>*{{'ACCOUNT_INVOICES.MESSAGE.MORE_DETAILS' | translate:lang}}</small>\\n                    </div>\\n                </div>\\n            </div>\\n            <!--End Invoice Details -->\\n        </div>\\n    </fieldset>\\n</div>\\n</account-view>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/account/invoices/account.invoices.view.html\n// module id = 1351\n// module chunks = 1","module.exports = \"<account-view>\\n<div class=\\\"account-details\\\">\\n\\t<!-- USER DETAILS  !-->\\n\\t<fieldset [hidden]=\\\"!showUserForm\\\">\\n\\t\\t<legend>\\n\\t\\t\\t<div>\\n\\t\\t\\t\\t<span>{{ 'ACCOUNT_DETAILS.FORM.SUBTITLE_1' | translate:lang }}</span>\\n\\t\\t\\t\\t<button *ngIf=\\\"!userFormEditMode && !userLoading\\\" [disabled]=\\\"detailsFormEditMode\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm pull-right\\\"\\n\\t\\t\\t\\t (click)=\\\"onUserEditModeChange(true)\\\"><i class=\\\"fa fa-edit\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.EDIT' | translate:lang }}</button>\\n\\t\\t\\t\\t<button *ngIf=\\\"userFormEditMode && !userLoading\\\" type=\\\"button\\\" class=\\\"btn btn-danger btn-sm pull-right\\\" (click)=\\\"onUserEditModeChange(false)\\\"><i class=\\\"fa fa-times\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.CANCEL' | translate:lang }}</button>\\n\\t\\t\\t\\t<button *ngIf=\\\"userFormEditMode && !userLoading\\\" [disabled]=\\\"!userForm.form.valid || !userForm.form.dirty\\\" form=\\\"userForm\\\" type=\\\"submit\\\" class=\\\"btn btn-success btn-sm pull-right m-r-5\\\"><i class=\\\"fa fa-check\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.SAVE' | translate:lang }}</button>\\n\\t\\t\\t</div>\\n\\t\\t</legend>\\n\\n\\t\\t<div class=\\\"loading-container\\\" [hidden]=\\\"!userLoading\\\">\\n\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t</div>\\n\\n\\t\\t<form id=\\\"userForm\\\" #userForm=\\\"ngForm\\\" class=\\\"form-horizontal\\\" [formGroup]=\\\"accountUserForm\\\" (ngSubmit)=\\\"onUserFormSubmit()\\\" [hidden]=\\\"userLoading\\\">\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.FIRST_NAME' | translate:lang\\\" [inputErrors]=\\\"accountUserForm.controls['first_name'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"userFormRemoteErrors.first_name\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"first_name\\\" [ngModel]=\\\"user.firstName\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.FIRST_NAME' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.LAST_NAME' | translate:lang\\\" [inputErrors]=\\\"accountUserForm.controls['last_name'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"userFormRemoteErrors.last_name\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"last_name\\\" [ngModel]=\\\"user.lastName\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.LAST_NAME' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.EMAIL' | translate:lang\\\" [inputErrors]=\\\"accountUserForm.controls['email'].errors\\\"\\n\\t\\t\\t [customError]=\\\"emailErr\\\" [remoteError]=\\\"userFormRemoteErrors.email\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"email\\\" [ngModel]=\\\"user.email\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.EMAIL' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.AGREE_FOR_NEWSLETTER' | translate:lang\\\" [canValidate]=\\\"canValidate\\\">\\n                <input class=\\\"form-control form-check-input\\\" type=\\\"checkbox\\\" formControlName=\\\"has_agree_for_newsletter\\\" [ngModel]=\\\"user.hasAgreeForNewsletter\\\">\\n\\t\\t\\t</extended-input>\\n\\t\\t</form>\\n\\n\\t\\t<form class=\\\"form-horizontal m-b-40\\\" [hidden]=\\\"userLoading\\\">\\n\\t\\t\\t<div class=\\\"form-group\\\" ng-reflect-klass=\\\"form-group\\\">\\n\\t\\t\\t\\t<label class=\\\"col-md-2 control-label\\\"> Password </label>\\n\\t\\t\\t\\t<div class=\\\"col-md-10\\\">\\n\\t\\t\\t\\t\\t<button *ngIf=\\\"!userLoading\\\" type=\\\"button\\\" class=\\\"btn btn-success btn-sm m-t-0 \\\" (click)=\\\"onPasswordChangeClick()\\\"><i class=\\\"fa fa-key\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.CHANGE_PASSWORD' | translate:lang }} </button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</form>\\n\\t</fieldset>\\n\\n\\t<!-- ACCOUNT DETAILS  !-->\\n\\t<fieldset [hidden]=\\\"!showCompanyForm\\\">\\n\\t\\t<legend>\\n\\t\\t\\t<div>\\n\\t\\t\\t\\t<span>{{ 'ACCOUNT_DETAILS.FORM.SUBTITLE_2' | translate:lang }}</span>\\n\\t\\t\\t\\t<button *ngIf=\\\"!detailsFormEditMode && !companyDetailsLoading\\\" [disabled]=\\\"userFormEditMode\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm pull-right\\\"\\n\\t\\t\\t\\t (click)=\\\"onDetailsEditModeChange(true)\\\"><i class=\\\"fa fa-edit\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.EDIT' | translate:lang }}</button>\\n\\t\\t\\t\\t<button *ngIf=\\\"detailsFormEditMode && !companyDetailsLoading\\\" type=\\\"button\\\" class=\\\"btn btn-danger btn-sm pull-right\\\" (click)=\\\"onDetailsEditModeChange(false)\\\"><i class=\\\"fa fa-times\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.CANCEL' | translate:lang }}</button>\\n\\t\\t\\t\\t<button *ngIf=\\\"detailsFormEditMode && !companyDetailsLoading\\\" [disabled]=\\\"!detailsForm.form.valid || !detailsForm.form.dirty\\\"\\n\\t\\t\\t\\t form=\\\"detailsForm\\\" type=\\\"submit\\\" class=\\\"btn btn-success btn-sm pull-right m-r-5\\\"><i class=\\\"fa fa-check\\\"></i> {{ 'ACCOUNT_DETAILS.BUTTON.SAVE' | translate:lang }}</button>\\n\\t\\t\\t</div>\\n\\t\\t</legend>\\n\\n\\t\\t<div class=\\\"loading-container\\\" [hidden]=\\\"!companyDetailsLoading\\\">\\n\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t</div>\\n\\n\\t\\t<form id=\\\"detailsForm\\\" #detailsForm=\\\"ngForm\\\" class=\\\"form-horizontal\\\" [formGroup]=\\\"accountDetailsForm\\\" (ngSubmit)=\\\"onAccountDetailsFormSubmit()\\\"\\n\\t\\t [hidden]=\\\"companyDetailsLoading\\\">\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.COMPANY' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['company_name'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.company_name\\\" [canValidate]=\\\"canValidate\\\" [toolText]=\\\"'ACCOUNT_DETAILS.MESSAGE.COMPANY' | translate:lang\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"company_name\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.COMPANY' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.TAX_NO' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['tax_no'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.tax_no\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"tax_no\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.TAX_NO' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.COUNTRY' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['country'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.country\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<select class=\\\"form-control\\\" formControlName=\\\"country\\\">\\n\\t\\t\\t\\t\\t<option selected value=\\\"default\\\">{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.COUNTRY' | translate:lang }}</option>\\n\\t\\t\\t\\t\\t<option *ngFor=\\\"let country of countries.countries\\\" ngValue=\\\"{{country.code}}\\\">{{country.name}}</option>\\n\\t\\t\\t\\t</select>\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.STATE' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['state'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.state\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"state\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.STATE' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.CITY' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['city'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.city\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"city\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.CITY' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.ADDRESS' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['address'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.address\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<textarea class=\\\"form-control\\\" formControlName=\\\"address\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.ADDRESS' | translate:lang }}\\\"\\n\\t\\t\\t\\t rows=\\\"5\\\"></textarea>\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.POSTAL_CODE' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['postal_code'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.postal_code\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"postal_code\\\" type=\\\"text\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.POSTAL_CODE' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\n\\t\\t\\t<extended-input [labelText]=\\\"'ACCOUNT_DETAILS.FORM.LABEL.PHONE_NUMBER' | translate:lang\\\" [inputErrors]=\\\"accountDetailsForm.controls['phone_number'].errors\\\"\\n\\t\\t\\t [remoteError]=\\\"detailsFormRemoteErrors.phone_number\\\" [canValidate]=\\\"canValidate\\\">\\n\\t\\t\\t\\t<input class=\\\"form-control\\\" formControlName=\\\"phone_number\\\" type=\\\"tel\\\" placeholder=\\\"{{ 'ACCOUNT_DETAILS.FORM.PLACEHOLDER.PHONE_NUMBER' | translate:lang }}\\\">\\n\\t\\t\\t</extended-input>\\n\\t\\t</form>\\n\\t</fieldset>\\n</div>\\n</account-view>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/account/details/account.details.view.html\n// module id = 1352\n// module chunks = 1","module.exports = \"<account-view>\\n<div class=\\\"payments\\\">\\n    <fieldset>\\n        <legend>{{'ACC_PAY.TITLE' | translate:lang}}</legend>\\n        <h5 class=\\\"empty-message\\\" *ngIf=\\\"paymentMethods.count <= 0\\\">{{'ACC_PAY.MESSAGE.EMPTY' | translate:lang}}</h5>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <!-------------ACCORDION----------- !-->\\n                <div class=\\\"panel-group\\\" id=\\\"accordion\\\" role=\\\"tablist\\\" aria-multiselectable=\\\"true\\\">\\n                    <div *ngFor=\\\"let pmethod of paymentMethods.results;let i = index\\\" class=\\\"panel overflow-hidden\\\">\\n                        <!-------------ACCORDION HEADER----------- !-->\\n                        <div class=\\\"panel-heading\\\" role=\\\"tab\\\" [id]=\\\"'heading' + i\\\">\\n                            <h3 class=\\\"panel-title\\\">\\n                                <a role=\\\"button\\\" data-toggle=\\\"collapse\\\" data-parent=\\\"#accordion\\\" [href]=\\\"'#collapse'+i\\\" [attr.aria-expanded]=\\\"(i==0) ? true : false\\\"\\n                                    [attr.aria-controls]=\\\"'collapse' + i\\\" class=\\\"accordion-toggle accordion-toggle-styled\\\">\\n                                    <img class=\\\"type-img\\\" [src]=\\\"pmethod.image_url\\\" /> <span *ngIf=\\\"pmethod.credit_card\\\">{{pmethod.credit_card.masked_number}}</span>\\n                                    <span *ngIf=\\\"pmethod.pay_pal_account\\\">{{pmethod.pay_pal_account.email}}</span>\\n                                    <span *ngIf=\\\"pmethod.active\\\" class=\\\"label label-success\\\">{{'ACC_PAY.STATE.ACTIVE' | translate:lang}}</span>\\n                                    <!--<span *ngIf=\\\"!pmethod.valid\\\" class=\\\"label label-danger\\\">{{'ACC_PAY.STATE.INVALID' | translate:lang}}</span>!-->\\n                                    <span *ngIf=\\\"pmethod.default\\\" class=\\\"label label-primary\\\">{{'ACC_PAY.STATE.DEFAULT' | translate:lang}}</span>\\n                                    <i class=\\\"fa fa-plus-circle pull-right\\\"></i>\\n                                </a>\\n                            </h3>\\n                        </div>\\n                        <!-------------ACCORDION BODY----------- !-->\\n                        <div [id]=\\\"'collapse' + i\\\" class=\\\"panel-collapse collapse\\\" role=\\\"tabpanel\\\" [attr.aria-labelledby]=\\\"'heading' + i\\\" [ngClass]=\\\"{in: i == 0}\\\">\\n                            <div class=\\\"item-content\\\">\\n                                <!-------------LOADING SPINNER----------- !-->\\n                                <div class=\\\"loading-container\\\" [hidden]=\\\"paymentOnEdit == null || paymentOnEdit.token != pmethod.token || !paymentOnEdit.loading\\\">\\n                                    <span class=\\\"spinner-small\\\"></span>\\n                                </div>\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-md-12\\\">\\n                                        <div *ngIf=\\\"!paymentOnEdit || paymentOnEdit.token != pmethod.token\\\">\\n                                            <table>\\n                                                <tr *ngIf=\\\"pmethod.pay_pal_account\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.EMAIL' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.pay_pal_account.email}}</td>\\n                                                </tr>\\n                                                <tr *ngIf=\\\"pmethod.credit_card && pmethod.credit_card.cardholder_name\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.NAME' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.credit_card.cardholder_name}}</td>\\n                                                </tr>\\n                                                <tr *ngIf=\\\"pmethod.credit_card\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.EXPIRES' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.credit_card.expiration_month}}/{{pmethod.credit_card.expiration_year}}</td>\\n                                                </tr>\\n                                                <tr *ngIf=\\\"pmethod.credit_card\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.CREATED' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.created_at * 1000 | date:'medium'}}</td>\\n                                                </tr>\\n                                                <tr *ngIf=\\\"pmethod.credit_card\\\">\\n                                                    <td><span class=\\\"subtitle\\\">{{'ACC_PAY.LABEL.UPDATED' | translate:lang}}</span></td>\\n                                                    <td>{{pmethod.updated_at * 1000 | date:'medium'}}</td>\\n                                                </tr>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"row\\\" [hidden]=\\\"paymentOnEdit && paymentOnEdit.token == pmethod.token && paymentOnEdit.loading\\\">\\n                                    <div class=\\\"col-md-12\\\">\\n                                        <!--EDIT FORM !-->\\n                                        <form (ngSubmit)=\\\"onCardEditSubmit()\\\" #cardEditForm=\\\"ngForm\\\" *ngIf=\\\"paymentOnEdit && paymentOnEdit.token == pmethod.token\\\"\\n                                            action=\\\"/\\\" id=\\\"card-edit-form\\\" method=\\\"post\\\">\\n                                            <div class=\\\"alert alert-danger m-b-10\\\" *ngIf=\\\"paymentOnEdit.serverValidation.other\\\">\\n                                                {{paymentOnEdit.serverValidation.other}}\\n                                            </div>\\n                                            <!--CVV !-->\\n                                            <label for=\\\"cvv\\\" [ngClass]=\\\"{'label-invalid':paymentOnEdit.serverValidation.cvv}\\\">{{'ACC_PAY.LABEL.CVV' | translate:lang}}</label>\\n                                            <div id=\\\"cvv\\\" class=\\\"hosted-field\\\" [ngClass]=\\\"{'input-invalid':paymentOnEdit.serverValidation.cvv}\\\"></div>\\n                                            <!--EXPIRATION DATE !-->\\n                                            <label for=\\\"expiration-date\\\" [ngClass]=\\\"{'label-invalid':paymentOnEdit.serverValidation.expiration_date}\\\">{{'ACC_PAY.LABEL.EXP_DATE' | translate:lang}}</label>\\n                                            <div id=\\\"expiration-date\\\" class=\\\"hosted-field\\\" [ngClass]=\\\"{'input-invalid':paymentOnEdit.serverValidation.expiration_date}\\\"></div>\\n                                            <!--DEFAULT-->\\n                                            <label>\\n                                                <input type=\\\"checkbox\\\" name=\\\"make_default\\\" [(ngModel)]=\\\"paymentOnEdit.make_default\\\"/> {{ 'ACC_PAY.MESSAGE.MAKE_DEFAULT' | translate:lang }} \\n                                            </label>\\n                                            <!--SUBMIT AND EDIT BUTTONS !-->\\n                                            <div class=\\\"buttons-container m-t-10\\\">\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-success btn-sm\\\"><i class=\\\"fa fa-check\\\"></i> {{'ACC_PAY.BUTTON.SAVE' | translate:lang}}</button>\\n                                            </div>\\n                                        </form>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </fieldset>\\n</div>\\n</account-view>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/account/payments/account.payments.view.html\n// module id = 1353\n// module chunks = 1","import {\n\tAfterViewInit,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInput,\n\tOnDestroy,\n\tOnInit,\n\tOutput,\n\tViewChild,\n} from '@angular/core';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { Locale as DateRangeLocale, Settings } from 'daterangepicker';\nimport moment from 'moment';\n\nexport type IconPlacement = 'left' | 'right' | 'none';\n\n@Component({\n\tselector: 'date-range-picker',\n\ttemplate: `\n\t\t<div *ngIf=\"enable\" class=\"input-group input-group-sm\" [style.width]=\"width\">\n\t\t\t<span *ngIf=\"showIcon !== 'none' && showIcon === 'left'\"\n\t\t\t\t\tclass=\"input-group-addon\"><i class=\"fa fa-calendar\"></i></span>\n\t\t\t<input #picker class=\"form-control\" type=\"text\" value=\"{{range}}\"/>\n\t\t\t<span *ngIf=\"showIcon !== 'none' && showIcon === 'right'\"\n\t\t\t\t\tclass=\"input-group-addon\"><i class=\"fa fa-calendar\"></i></span>\n\t\t</div>`,\n})\nexport class DateRangePickerComponent extends Localization implements OnInit, AfterViewInit, OnDestroy {\n\t@Input() enable: boolean = true;\n\t@Input() showIcon: IconPlacement = 'right';\n\t@Input() options: Settings;\n\t@Input() width = '200px';\n\t@Input() opens = 'left';\n\n\t@Output() selectionChanged = new EventEmitter<[moment.Moment, moment.Moment]>();\n\n\t@ViewChild('picker') picker: ElementRef;\n\n\trange: string;\n\tprivate pickerJQuery: any;\n\n\tconstructor(public locale: LocaleService, public translation: TranslationService) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit() {\n\t\t//if the options Input value is not defined use the default options\n\t\tlet defaultOptions = this.getDefaultSettings();\n\n\t\tif (!this.options) {\n\t\t\tthis.options = defaultOptions;\n\t\t} else {\n\t\t\t// Merge provided options with default values.\n\t\t\t// Default option should be overwrite by provided one.\n\t\t\tlet options = this.options;\n\t\t\tthis.options = defaultOptions;\n\t\t\tfor(let k in options) {\n\t\t\t\tthis.options[k] = options[k]\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.startDate && this.options.endDate)\n\t\t\tthis.range = this.options.startDate.toString() + ' - ' + this.options.endDate.toString();\n\n\t\t//Set localization\n\t\tif (!this.options.locale)\n\t\t\tthis.options.locale = this.getDateRangePickerLocale();\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.pickerJQuery = $(this.picker.nativeElement);\n\t\tif (this.pickerJQuery != null)\n\t\t\tthis.pickerJQuery.daterangepicker(this.options, this.dateChangedCallback.bind(this));\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.pickerJQuery != null)\n\t\t\tthis.pickerJQuery.data('daterangepicker').remove();\n\t}\n\n\tdateChangedCallback(start: moment.Moment, end: moment.Moment, label: any): void {\n\t\tthis.selectionChanged.emit([start, end]);\n\t}\n\n\tprivate getDefaultSettings(): any {\n\t\tlet last7days: string = this.translation.translate('DATERANGEPICKER.RANGE.LAST_7DAYS');\n\t\tlet last30days: string = this.translation.translate('DATERANGEPICKER.RANGE.LAST_30DAYS');\n\t\tlet lastmonth: string = this.translation.translate('DATERANGEPICKER.RANGE.LAST_MONTH');\n\t\tlet currentmonth: string = this.translation.translate('DATERANGEPICKER.RANGE.CURRENT_MONTH');\n\t\tlet currentweek: string = this.translation.translate('DATERANGEPICKER.RANGE.CURRENT_WEEK');\n\t\tlet lastweek: string = this.translation.translate('DATERANGEPICKER.RANGE.LAST_WEEK');\n\n\t\tlet m = moment();\n\t\tlet sod = m.clone().startOf('day');\n\t\tlet som = m.clone().startOf('month');\n\t\tlet sow = m.clone().startOf('week');\n\t\t// let date =  new Date;\n\t\t// date = new Date(Date.now());\n\t\t// console.log('today',date.getDay());\n\t\treturn {\n\t\t\tshowDropdowns: true,\n\t\t\tranges: {\n\t\t\t\t[last7days]: [sod.clone().subtract(6, 'days'), m],\n\t\t\t\t[lastweek]: [\n\t\t\t\t\tsod.clone().subtract(1,'week').startOf('week'),\n\t\t\t\t\tm.clone().subtract(1,'week').endOf('week')\n\t\t\t\t],\n\t\t\t\t[currentweek]: [sow, sod],\n\t\t\t\t[last30days]: [sod.clone().subtract(29, 'days'), m],\n\t\t\t\t[lastmonth]: [\n\t\t\t\t\tsod.clone().subtract(1, 'month').startOf('month'),\n\t\t\t\t\tm.clone().subtract(1, 'month').endOf('month')\n\t\t\t\t],\n\t\t\t\t[currentmonth]: [som, sod],\n\t\t\t},\n\t\t\tstartDate: sod.clone().subtract(30, 'days').format('L'),\n\t\t\tendDate: sod.format('L'),\n\t\t\topens: 'left',\n\t\t\tbuttonClasses: ['btn btn-sm'],\n\t\t\tapplyClass: 'btn-success',\n\t\t\tcancelClass: 'btn-default',\n\t\t\tshowCustomRangeLabel: false,\n\t\t\tlinkedCalendars: false,\n\t\t\tautoApply: false,\n\t\t\talwaysShowCalendars: true,\n\t\t\tmaxDate: m\n\t\t};\n\t}\n\n\tprivate getDateRangePickerLocale(): DateRangeLocale {\n\t\t//moment.js already has locale for some languages so there is no need to create translations for dates strings\n\t\tlet locale = (this.locale.getCurrentLanguage() || 'en').toLowerCase();\n\t\tlet localeData = moment.localeData(locale);\n\t\treturn {\n\t\t\tcancelLabel: this.translation.translate('DATERANGEPICKER.LABEL.CANCEL'),\n\t\t\tapplyLabel: this.translation.translate('DATERANGEPICKER.LABEL.APPLY'),\n\t\t\tformat: localeData.longDateFormat('L'),\n\t\t\tseparator: '-',\n\t\t\tweekLabel: this.translation.translate('DATERANGEPICKER.LABEL.WEEK'),\n\t\t\tcustomRangeLabel: this.translation.translate('DATERANGEPICKER.LABEL.CUSTOM_RANGE'),\n\t\t\tfirstDay: localeData.firstDayOfWeek(), // firstDay: localeData.week.dow,\n\t\t\tdaysOfWeek: localeData.weekdaysMin(),\n\t\t\tmonthNames: localeData.monthsShort()\n\t\t};\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/date-range-picker/daterangepicker.component.ts","module.exports = \"<a class=\\\"btn btn-sm btn-white\\\" *ngFor=\\\"let item of model\\\" [class.active]=\\\"isActive(item)\\\" (click)=\\\"click(item)\\\">\\n\\n    <i class=\\\"fa fa-fw\\\" [ngClass]=\\\"icon(item)\\\"></i>\\n    <span>{{item}}</span>\\n\\n</a>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/check/check.buttons.component.html\n// module id = 1355\n// module chunks = 1","module.exports = \"@charset \\\"UTF-8\\\";\\n:host {\\n  display: block;\\n  position: relative; }\\n:host .btn {\\n    margin: 2px;\\n    border-radius: 0;\\n    min-width: 120px;\\n    opacity: 0.5;\\n    text-align: left; }\\n:host .btn:before {\\n      display: inline-block;\\n      font: normal normal normal 14px/1 FontAwesome;\\n      font-size: inherit;\\n      text-rendering: auto;\\n      -webkit-font-smoothing: antialiased;\\n      -moz-osx-font-smoothing: grayscale;\\n      content: '';\\n      vertical-align: middle;\\n      width: 20px;\\n      margin: 0;\\n      color: #335eea; }\\n:host .btn:active, :host .btn.active, :host .btn:hover, :host .btn.hover {\\n      background: white;\\n      -webkit-box-shadow: none;\\n              box-shadow: none; }\\n:host .btn:hover, :host .btn.hover {\\n      opacity: 0.7; }\\n:host .btn:active, :host .btn.active {\\n      opacity: 1; }\\n:host .btn:active:before, :host .btn.active:before {\\n        content: \\\"\\\"; }\\n:host .btn input {\\n      visibility: hidden;\\n      width: 0;\\n      height: 0;\\n      position: absolute; }\\n:host .btn i {\\n      color: inherit; }\\n:host .btn span {\\n      color: inherit;\\n      font-weight: 200; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/check/check.buttons.component.scss\n// module id = 1356\n// module chunks = 1","module.exports = \"\\n<label *ngIf=\\\"label\\\">{{label}}: </label>\\n\\n<button class=\\\"btn btn-sm\\\"\\n        [disabled]=\\\"disabled\\\"\\n        [style.background-color]=\\\"selectedItem?.color\\\"\\n        [style.border-color]=\\\"selectedItem?.color\\\"\\n        [style.color]=\\\"selectedItem?.textColor\\\"\\n        [class.active]=\\\"active\\\"\\n        [@ShadowAnimation]=\\\"active?'active':'inactive'\\\"\\n        (click)=\\\"onToggle()\\\">\\n\\n    <i *ngIf=\\\"selectedItem?.icon\\\"\\n       class=\\\"dropdown-ico fa fa-fw\\\"\\n       [ngClass]=\\\"getIcoCssClasses(selectedItem)\\\"></i>\\n\\n    <span>{{selectedItem?.label}}</span>\\n\\n    <i *ngIf=\\\"!disabled\\\"\\n       class=\\\"dropdown-dir-ico fa\\\"\\n       [class.fa-sort-desc]=\\\"active\\\"\\n       [class.fa-sort-asc]=\\\"!active\\\">\\n    </i>\\n</button>\\n\\n<dropdown-list *ngIf=\\\"!disabled && active\\\"\\n               [model]=\\\"model\\\"\\n               [selected]=\\\"selectedItem\\\"\\n               [direction]=\\\"direction\\\"\\n               (onSelect)=\\\"select($event)\\\"></dropdown-list>\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/dropdown/dropdown.component.html\n// module id = 1357\n// module chunks = 1","module.exports = \":host {\\n  position: relative;\\n  display: inline-block;\\n  vertical-align: middle;\\n  text-align: center; }\\n  :host button {\\n    width: 100%;\\n    min-width: 150px;\\n    margin-left: 0 !important;\\n    margin-right: 0 !important;\\n    text-transform: none;\\n    background: none;\\n    border-color: lightgray !important; }\\n  :host button[disabled] {\\n      opacity: 1; }\\n  :host button span {\\n      margin: auto; }\\n  :host button i.dropdown-dir-ico {\\n      position: absolute;\\n      top: 50%;\\n      margin-left: 8px;\\n      margin-top: -0.3em; }\\n  :host.small button {\\n    min-width: 75px; }\\n  :host.small button span {\\n      position: relative;\\n      left: -5px; }\\n  :host.small button i.dropdown-dir-ico {\\n      margin-left: 2px; }\\n  :host.active button i.dropdown-dir-ico {\\n    margin-top: -0.7em; }\\n  :host.active.up button {\\n    border-top-color: transparent !important;\\n    border-top-left-radius: 0;\\n    border-top-right-radius: 0; }\\n  :host.active.down button {\\n    border-bottom-color: transparent !important;\\n    border-bottom-left-radius: 0;\\n    border-bottom-right-radius: 0; }\\n  .input-group :host {\\n  background: white; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/dropdown/dropdown.component.scss\n// module id = 1358\n// module chunks = 1","module.exports = \"<!--[ngClass]=\\\"directionClass()\\\"-->\\n<ul #list class=\\\"dropdown-list\\\"\\n    [@ShadowAnimation]=\\\"'active'\\\"\\n    [style.border-color]=\\\"selected?.color\\\">\\n    <li *ngFor=\\\"let item of model|dropdownListPipe:selected;let idx = index\\\" [class.selected]=\\\"selectedListIdx == idx || item.markSelected\\\" [class.separator-below]=\\\"item.hasSeparatorBelow\\\">\\n        <a (click)=\\\"select(item)\\\" class=\\\"btn btn-xs\\\">\\n            <i *ngIf=\\\"item?.icon\\\" class=\\\"dropdown-ico fa fa-fw pull-left\\\" [ngClass]=\\\"iconClasses(item)\\\"></i>\\n            <span>{{item?.label}}</span>\\n        </a>\\n    </li>\\n</ul>\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/dropdown/list/dropdown.list.component.html\n// module id = 1359\n// module chunks = 1","module.exports = \":host {\\n  display: block;\\n  color: inherit; }\\n  :host ul.dropdown-list {\\n    position: absolute;\\n    z-index: 99999;\\n    list-style-type: none;\\n    padding: 0;\\n    width: 100%;\\n    min-width: 150px;\\n    max-height: 200px;\\n    overflow-x: hidden;\\n    overflow-y: auto;\\n    background: white;\\n    border: 1px solid lightgray;\\n    border-radius: 0 0 3px 3px;\\n    color: inherit; }\\n  :host ul.dropdown-list::-webkit-scrollbar {\\n      width: 8px;\\n      height: 8px;\\n      background: none; }\\n  :host ul.dropdown-list::-webkit-scrollbar-track {\\n      -webkit-box-shadow: none;\\n              box-shadow: none;\\n      background: #EEEEEE; }\\n  :host ul.dropdown-list::-webkit-scrollbar-thumb:window-inactive {\\n      background: #DDDDDD; }\\n  :host ul.dropdown-list::-webkit-scrollbar-thumb {\\n      background: #CCCCCC; }\\n  :host ul.dropdown-list li {\\n      cursor: pointer;\\n      color: inherit; }\\n  :host ul.dropdown-list li a {\\n        color: inherit;\\n        padding: 5px 10px;\\n        display: inline-block;\\n        width: 100%;\\n        text-decoration: none;\\n        border-radius: 0;\\n        -webkit-box-shadow: none;\\n                box-shadow: none;\\n        background-color: transparent; }\\n  :host ul.dropdown-list li a i {\\n          margin-left: 5px; }\\n  :host ul.dropdown-list li a span {\\n          margin: auto;\\n          text-decoration: none;\\n          color: inherit; }\\n  :host ul.dropdown-list li:hover a {\\n        background-color: #EFEFEF; }\\n  :host ul.dropdown-list li.selected {\\n      background: #EFEFEF; }\\n  :host ul.dropdown-list li.separator-below {\\n      border-bottom: solid 1px #d3d3d3; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/dropdown/list/dropdown.list.component.scss\n// module id = 1360\n// module chunks = 1","module.exports = \"\\n<div *ngFor=\\\"let val of values\\\" [ngClass]=\\\"getImageClass(val)\\\" (click)=\\\"onClick(val)\\\">\\n    <img [src]=\\\"urlParser(val)\\\">\\n    <span>{{val}}</span>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/grid/image/image.grid.component.html\n// module id = 1361\n// module chunks = 1","module.exports = \":host {\\n  display: block;\\n  width: 100%;\\n  overflow: hidden; }\\n  :host div {\\n    position: relative;\\n    float: left;\\n    margin: 1%;\\n    width: 48%;\\n    overflow: hidden;\\n    cursor: pointer;\\n    -webkit-transition: -webkit-box-shadow 200ms;\\n    transition: -webkit-box-shadow 200ms;\\n    transition: box-shadow 200ms;\\n    transition: box-shadow 200ms, -webkit-box-shadow 200ms; }\\n  :host div img {\\n      width: 100%;\\n      padding: 2px;\\n      background: #ffffff;\\n      opacity: 0.5; }\\n  :host div span {\\n      position: absolute;\\n      left: 4px;\\n      bottom: 4px;\\n      color: #EFEFEF;\\n      font-size: 16px;\\n      font-weight: 200;\\n      text-shadow: 0 0 8px #000; }\\n  :host div:hover, :host div.active {\\n      -webkit-box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.8);\\n              box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.8); }\\n  :host div:hover img {\\n      opacity: 0.75; }\\n  :host div.active img {\\n      opacity: 1; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/grid/image/image.grid.component.scss\n// module id = 1362\n// module chunks = 1","module.exports = \":host {\\n  position: relative;\\n  display: block; }\\n\\n:host input {\\n  display: inline-block;\\n  border-radius: 0;\\n  background: none;\\n  border: 1px solid transparent;\\n  margin: 0;\\n  width: 100%;\\n  height: 3em;\\n  padding: 0.5em 2em 0.5em 1em;\\n  line-height: 1.42857;\\n  color: #333;\\n  border-bottom-color: #333; }\\n\\n:host.on, :host.on input {\\n  width: 100%; }\\n\\n:host.off, :host.off {\\n  width: auto; }\\n\\n:host input, :host input:hover, :host input:active, :host input:focus {\\n  outline: none; }\\n\\n:host input:-webkit-autofill, :host input:-webkit-autofill:hover, :host input:-webkit-autofill:active, :host input:-webkit-autofill:focus {\\n  -webkit-transition: background-color 5000s ease-in-out 0s;\\n  transition: background-color 5000s ease-in-out 0s; }\\n\\n:host input::-webkit-input-placeholder, :host input::-moz-placeholder, :host input:-ms-input-placeholder, :host input:-moz-placeholder {\\n  color: #333; }\\n\\n:host.off input {\\n  /*border: none;*/\\n  /*margin: 1px;*/\\n  /*padding-left: 5px;*/\\n  /*cursor: default;*/ }\\n\\n:host.on input, :host.over input {\\n  /*background: #F00;*/\\n  /*border: 1px solid #F00;*/\\n  /*margin: 0;*/\\n  /*padding-left: 5px;*/\\n  /*cursor: pointer;*/ }\\n\\n:host i.fa.edit-ico {\\n  /*position: absolute;*/\\n  display: inline-block;\\n  margin-left: -1em;\\n  pointer-events: none; }\\n\\n:host.off i.fa.edit-ico {\\n  /*display: none;*/ }\\n\\n:host.on i.fa.edit-ico, :host.over i.fa.edit-ico {\\n  /*display: initial;*/\\n  /*color: #F00;*/ }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/input/editable.input.component.scss\n// module id = 1363\n// module chunks = 1","module.exports = \"<table class=\\\"table table-valign-middle\\\">\\n    <thead>\\n        <tr>\\n            <th *ngFor=\\\"let column of columns;\\\">{{column}}</th>\\n            <th>&nbsp;</th>\\n        </tr>\\n    </thead>\\n    <tbody>\\n        <tr *ngFor=\\\"let item of value\\\">\\n            <td *ngFor=\\\"let column of columns;\\\">{{item[column]}}</td>\\n            <td style=\\\"width:20%;\\\">\\n                <div class=\\\"btn-group\\\">\\n                    <a class=\\\"\\\">\\n                        <i class=\\\"fa fa-edit\\\"></i>\\n                    </a>\\n                    <a class=\\\"\\\">\\n                        <i class=\\\"fa fa-trash\\\"></i>\\n                    </a>\\n                </div>\\n            </td>\\n        </tr>\\n    </tbody>\\n</table>\\n<a class=\\\"\\\">add new item <i class=\\\"fa fa-plus\\\"></i></a>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/list/data/data.list.component.html\n// module id = 1364\n// module chunks = 1","module.exports = \":host {\\n  outline: 1px solid red; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/list/data/data.list.component.scss\n// module id = 1365\n// module chunks = 1","module.exports = \"<ng-template [ngIf]=\\\"!dropdownMode\\\">\\n\\n    <button *ngIf=\\\"showPrevBtn\\\" class=\\\"btn btn-sm btn-white\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n        (click)=\\\"prevPage()\\\" aria-label=\\\"Poprzednia strona\\\">&laquo;</button>\\n\\n    <button *ngIf=\\\"showPrevPortionBtn\\\" class=\\\"btn btn-sm btn-white\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n     (click)=\\\"prevPortion()\\\" aria-label=\\\"Poprzednie strony\\\">...</button>\\n\\n    <button class=\\\"btn btn-sm btn-white\\\"\\n        *ngFor=\\\"let page of pagesData;\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n        [disabled]=\\\"page==service?.model.actual\\\" (click)=\\\"click(page)\\\" >{{page}}</button>\\n\\n    <button *ngIf=\\\"showNextPortionBtn\\\" class=\\\"btn btn-sm btn-white\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n        (click)=\\\"nextPortion()\\\" aria-label=\\\"Następne strony\\\">...</button>\\n\\n    <button *ngIf=\\\"showNextBtn\\\" class=\\\"btn btn-sm btn-white\\\"\\n        [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n        (click)=\\\"nextPage()\\\" aria-label=\\\"Następna strona\\\">&raquo;</button>\\n\\n</ng-template>\\n\\n<dropdown *ngIf=\\\"dropdownMode\\\" [model]=\\\"dropdownModel\\\" [style.visibility]=\\\"visible==true?'visible':'hidden'\\\"\\n          direction=\\\"1\\\" (onSelect)=\\\"dropdownSelectPage($event)\\\"></dropdown>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/pagination/buttons/pagination.buttons.component.html\n// module id = 1366\n// module chunks = 1","module.exports = \":host button {\\n  border: none; }\\n\\n:host.dropdownMode {\\n  -webkit-box-pack: start;\\n      -ms-flex-pack: start;\\n          justify-content: flex-start; }\\n\\n:host /deep/ dropdown {\\n  float: left; }\\n\\n:host /deep/ dropdown button:not(.active) {\\n  border: none;\\n  margin: 1px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/pagination/buttons/pagination.buttons.component.scss\n// module id = 1367\n// module chunks = 1","module.exports = \"<div *ngIf=\\\"service.model && service.model.total > service.model.size\\\" class=\\\"row\\\">\\n    <div class=\\\"pagination-info col-xs-3\\\">\\n        <p>Strona {{(service.model.actual)}} z {{formatTotalPages}}</p>\\n        <p><small>pozycje {{formatActivePage + 1}} - {{formatPageMax}} z {{service.model.total}}</small></p>\\n    </div>\\n    <pagination-btns class=\\\"pagination-buttons col-xs-6\\\" ></pagination-btns>\\n    <pagination-size class=\\\"pagination-size col-xs-3\\\"></pagination-size>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/pagination/bar/pagination.bar.component.html\n// module id = 1368\n// module chunks = 1","module.exports = \":host {\\n  width: 100%;\\n  text-align: center; }\\n  :host .pagination-info p {\\n    margin: 0; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/pagination/bar/pagination.bar.component.scss\n// module id = 1369\n// module chunks = 1","module.exports = \":host input[type='range'] {\\n  padding: 0;\\n  width: 100%;\\n  height: 1em;\\n  background: transparent;\\n  font-size: 16px;\\n  cursor: pointer;\\n  margin-top: 5px; }\\n  :host input[type='range'], :host input[type='range']::-webkit-slider-runnable-track, :host input[type='range']::-webkit-slider-thumb {\\n    -webkit-appearance: none; }\\n  :host input[type='range']::-webkit-slider-runnable-track {\\n    margin: 0 0.75em;\\n    border: none;\\n    padding: 0 0.125em;\\n    width: 100%;\\n    height: 0.25em;\\n    border-radius: 0.125em;\\n    background: #EEE; }\\n  :host input[type='range']::-moz-range-track {\\n    border: none;\\n    padding: 0 0.125em;\\n    width: 100%;\\n    height: 0.25em;\\n    border-radius: 0.125em;\\n    background: #EEE; }\\n  :host input[type='range']::-ms-track {\\n    margin: 0 0.75em;\\n    border: none;\\n    padding: 0 0.125em;\\n    width: 100%;\\n    height: 0.25em;\\n    border-radius: 0.125em;\\n    background: #EEE;\\n    color: transparent; }\\n  :host input[type='range']::-webkit-slider-thumb {\\n    margin-top: -0.625em;\\n    -webkit-box-sizing: border-box;\\n            box-sizing: border-box;\\n    border: solid 0.25em #FFF;\\n    width: 1.5em;\\n    height: 1.5em;\\n    border-radius: 50%;\\n    background: #EEE;\\n    -webkit-transition: .3s;\\n    transition: .3s; }\\n  :host input[type='range']::-moz-range-thumb {\\n    box-sizing: border-box;\\n    border: solid 0.25em #FFF;\\n    width: 1.5em;\\n    height: 1.5em;\\n    border-radius: 50%;\\n    background: #EEE;\\n    -webkit-transition: .3s;\\n    transition: .3s;\\n    cursor: ew-resize; }\\n  :host input[type='range']::-ms-thumb {\\n    box-sizing: border-box;\\n    border: solid 0.25em #FFF;\\n    width: 1.5em;\\n    height: 1.5em;\\n    border-radius: 50%;\\n    background: #EEE;\\n    -webkit-transition: .3s;\\n    transition: .3s; }\\n  :host input[type='range']::-ms-fill-lower, :host input[type='range']::-ms-fill-upper {\\n    background: transparent; }\\n  :host input[type='range']:focus {\\n    outline: none; }\\n  :host input[type='range']:focus::-webkit-slider-runnable-track {\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-moz-range-track {\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-ms-fill-lower {\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-webkit-slider-thumb {\\n      border: solid 0 rgba(255, 255, 255, 0);\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-moz-range-thumb {\\n      border: solid 0 rgba(255, 255, 255, 0);\\n      background: #0f9d58; }\\n  :host input[type='range']:focus::-ms-thumb {\\n      border: solid 0 rgba(255, 255, 255, 0);\\n      background: #0f9d58; }\\n  :host input[type='range']:focus /deep/ #thumb:before {\\n      -webkit-transform: translate(-50%, -4.5em) rotate(45deg) scale(1);\\n              transform: translate(-50%, -4.5em) rotate(45deg) scale(1);\\n      opacity: .99; }\\n  :host input[type='range']:focus /deep/ #thumb:after {\\n      -webkit-transform: translate(-50%, -3.375em) scale(1);\\n              transform: translate(-50%, -3.375em) scale(1);\\n      opacity: .99; }\\n  :host input[type='range']:active::-webkit-slider-thumb {\\n    border: solid 0 rgba(255, 255, 255, 0);\\n    background: #0f9d58; }\\n  :host input[type='range']:active::-moz-range-thumb {\\n    border: solid 0 rgba(255, 255, 255, 0);\\n    background: #0f9d58; }\\n  :host input[type='range']:active::-ms-thumb {\\n    border: solid 0 rgba(255, 255, 255, 0);\\n    background: #0f9d58; }\\n  :host.disabled {\\n  opacity: 0.46;\\n  pointer-events: none; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/rangeslider/rangeslider.component.scss\n// module id = 1370\n// module chunks = 1","module.exports = \"<div *ngFor=\\\"let item of model\\\" class=\\\"singlechoiche-switch\\\">\\n\\t<switch size=\\\"small\\\" \\n\\t\\t[checked]=\\\"isItemChecked(item)\\\" (checkedChange)=\\\"onChange(item, $event)\\\"\\n\\t\\t[labelLeft]=\\\"{on: item + ' :', off: item + ' :'}\\\" [labelRight]=\\\"{on: 'enable', off: 'disable'}\\\">\\n\\t</switch>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/singlechoice/singlechoice.input.component.html\n// module id = 1371\n// module chunks = 1","module.exports = \":host .singlechoiche-switch {\\n  margin: 5px 0;\\n  padding: 10px 15px;\\n  font-size: 1.25em; }\\n  :host .singlechoiche-switch /deep/.switch-label.left {\\n    display: inline-block;\\n    width: 80px;\\n    text-align: right; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/singlechoice/singlechoice.input.component.scss\n// module id = 1372\n// module chunks = 1","module.exports = \"<input type=\\\"file\\\" multiple (change)=\\\"onFileBrowse()\\\" #browse/>\\n\\n<div *ngIf=\\\"!fileData\\\" class=\\\"upload-title\\\">\\n    <a (click)=\\\"onBrowse()\\\" >Choose file</a><span> or drag it here.</span>\\n</div>\\n\\n<p class=\\\"upload-preview\\\" #preview>{{fileMessage}}</p>\\n\\n\\n<div *ngIf=\\\"fileData\\\" class=\\\"upload-buttons\\\">\\n    <button (click)=\\\"onRemove()\\\"><i class=\\\"fa fa-trash\\\"></i> delete </button>\\n    <button (click)=\\\"onBrowse()\\\"><i class=\\\"fa fa-refresh\\\"></i> change </button>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/upload/file/upload.file.component.html\n// module id = 1373\n// module chunks = 1","module.exports = \":host {\\n  display: block;\\n  position: relative;\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVR42u3PMREAMAwDsfBHYhhh1oLwkEXDrz55krym3a0aAAAAAAAAgHNAO9AeAAAAAAAAADgHfOyWbLWYpELvAAAAAElFTkSuQmCC\\\") repeat;\\n  text-align: center;\\n  margin: 5px; }\\n  :host input[type=\\\"file\\\"] {\\n    visibility: hidden;\\n    height: 0;\\n    width: 0;\\n    position: absolute; }\\n  :host .upload-title {\\n    position: relative;\\n    color: #fcfcfc;\\n    font-size: 2em;\\n    padding: 1em;\\n    line-height: 1em;\\n    white-space: normal; }\\n  :host .upload-title a {\\n      cursor: pointer;\\n      text-decoration: none; }\\n  :host .upload-preview {\\n    position: absolute;\\n    padding: 0;\\n    visibility: hidden;\\n    width: 100%;\\n    height: 0;\\n    color: #FFF;\\n    font-size: 1.5em;\\n    line-height: 1.6em; }\\n  :host .upload-preview.visible {\\n      position: relative;\\n      visibility: visible;\\n      padding: 0.5em;\\n      height: auto; }\\n  :host .upload-buttons {\\n    position: absolute;\\n    left: 0;\\n    right: 0;\\n    bottom: 0;\\n    height: 32px;\\n    width: 100%;\\n    visibility: hidden; }\\n  :host .upload-buttons button {\\n      float: left;\\n      color: white;\\n      width: 50%;\\n      height: 32px;\\n      background: none;\\n      border: none;\\n      font-weight: 200;\\n      background: rgba(0, 0, 0, 0.1); }\\n  :host .upload-buttons button:hover {\\n        background: rgba(0, 0, 0, 0.25); }\\n  :host.hover {\\n    -webkit-box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.7);\\n            box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.7); }\\n  :host:hover .upload-buttons {\\n    visibility: visible; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/upload/file/upload.file.component.scss\n// module id = 1374\n// module chunks = 1","module.exports = \"<div *ngIf=\\\"resample && (imageData != null)\\\" class=\\\"resample-image-con\\\">\\n    <small>Sample down logo <span *ngIf=\\\"resampleSizeValue < 100\\\"> by {{100 - resampleSizeValue}} %</span></small>\\n    <rangeslider [value]=\\\"resampleSizeValue\\\" (valueChange)=\\\"onResamplePreview($event)\\\" (onMouseUp)=\\\"onResampleImage($event)\\\"\\n                [step]=\\\"1\\\" [min]=\\\"1\\\" [max]=\\\"100\\\" [showLabels]=\\\"false\\\"></rangeslider>\\n</div>\\n<div class=\\\"upload-image-con\\\">\\n    <input type=\\\"file\\\" multiple (change)=\\\"onFileBrowse()\\\" #browse/>\\n\\n    <div *ngIf=\\\"!imageData\\\" class=\\\"upload-title\\\">\\n        <a (click)=\\\"onBrowse()\\\" >Choose logo file</a><span> or drag it here.</span>\\n    </div>\\n\\n    <img class=\\\"upload-preview\\\" #preview>\\n\\n    <div *ngIf=\\\"imageData\\\" class=\\\"upload-buttons\\\">\\n        <button (click)=\\\"onRemove()\\\"><i class=\\\"fa fa-trash\\\"></i> delete </button>\\n        <button (click)=\\\"onChange()\\\"><i class=\\\"fa fa-refresh\\\"></i> change </button>\\n    </div>\\n</div>\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/upload/image/upload.image.component.html\n// module id = 1375\n// module chunks = 1","module.exports = \":host {\\n  display: block;\\n  position: relative; }\\n  :host .upload-image-con {\\n    display: block;\\n    position: relative;\\n    text-align: center;\\n    margin: 5px;\\n    padding: 5px;\\n    min-height: 32px; }\\n  :host .upload-image-con::before {\\n      content: '';\\n      position: absolute;\\n      top: 0;\\n      right: 0;\\n      left: 0;\\n      bottom: 0;\\n      background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVR42u3PMREAMAwDsfBHYhhh1oLwkEXDrz55krym3a0aAAAAAAAAgHNAO9AeAAAAAAAAADgHfOyWbLWYpELvAAAAAElFTkSuQmCC\\\");\\n      background-repeat: repeat; }\\n  :host .upload-image-con input[type=\\\"file\\\"] {\\n      visibility: hidden;\\n      height: 0;\\n      width: 0;\\n      position: absolute; }\\n  :host .upload-image-con .upload-title {\\n      position: relative;\\n      color: #fcfcfc;\\n      font-size: 2em;\\n      padding: 1em;\\n      line-height: 1em;\\n      white-space: normal; }\\n  :host .upload-image-con .upload-title a {\\n        cursor: pointer;\\n        text-decoration: none; }\\n  :host .upload-image-con .upload-preview {\\n      position: absolute;\\n      max-width: 100%;\\n      height: 0;\\n      padding: 0;\\n      visibility: hidden; }\\n  :host .upload-image-con .upload-preview.visible {\\n        position: relative;\\n        visibility: visible;\\n        height: auto; }\\n  :host .upload-image-con .upload-buttons {\\n      position: absolute;\\n      left: 0;\\n      right: 0;\\n      bottom: 0;\\n      height: 32px;\\n      width: 100%;\\n      visibility: hidden; }\\n  :host .upload-image-con .upload-buttons button {\\n        float: left;\\n        color: white;\\n        width: 50%;\\n        height: 32px;\\n        background: none;\\n        border: none;\\n        font-weight: 200;\\n        background: rgba(0, 0, 0, 0.1); }\\n  :host .upload-image-con .upload-buttons button:hover {\\n          background: rgba(0, 0, 0, 0.25); }\\n  :host .upload-image-con.hover {\\n      -webkit-box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.7);\\n              box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.7); }\\n  :host .upload-image-con:hover .upload-buttons {\\n      visibility: visible; }\\n  :host .resample-image-con {\\n    text-align: center;\\n    padding: 5px 0;\\n    min-height: 50px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/form/upload/image/upload.image.component.scss\n// module id = 1376\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_AUDIENCE.TITLE' | translate:lang }}</h1>\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_AUDIENCE.HEADER.1' | translate:lang }}</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-left m-l-10\\\">\\n\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"chartDataExportCsv()\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-download\\\"></i> CSV\\n\\t\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<chart-granularity #granularity size=\\\"sm\\\" \\n\\t\\t\\t\\t\\t\\t\\t[types]=\\\"chartService.granularityTypes\\\" \\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"chartService.activeGranularity\\\"\\n\\t\\t\\t\\t\\t\\t\\t(onTypeChange)=\\\"chartService.onGranularityChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-granularity>\\n\\t\\t\\t\\t\\t\\t<chart-picker #picker size=\\\"sm\\\" class=\\\"m-l-10\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartTypes]=\\\"chartService.chartTypes\\\" \\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"chartService.activeChartType\\\" \\n\\t\\t\\t\\t\\t\\t\\t(chartTypeChanged)=\\\"chartService.onChartTypeChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-picker>\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:chartService.startDate, endDate:chartService.endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<chart #chartElement \\n\\t\\t\\t\\t\\t[chartData]=\\\"chartService.chartData\\\" \\n\\t\\t\\t\\t\\t[chartLabels]=\\\"chartService.chartLabels\\\" \\n\\t\\t\\t\\t\\t[chartType]=\\\"chartService.activeChartType\\\" \\n\\t\\t\\t\\t\\t[startDate]=\\\"chartService.startDate\\\" \\n\\t\\t\\t\\t\\t[endDate]=\\\"chartService.endDate\\\" \\n\\t\\t\\t\\t\\t[granularity]=\\\"chartService.activeGranularity\\\">\\n\\t\\t\\t\\t</chart>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n<div class=\\\"row\\\">\\n\\t<div [ngClass]=\\\"{'col-md-3 col-sm-4': user.isEngagementRateEnabled(), 'col-md-4':!user.isEngagementRateEnabled()}\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-blue\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.USERS' | translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.users !== null\\\">{{summary.users | number}}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.users === null\\\">-</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div [ngClass]=\\\"{'col-md-3 col-sm-4': user.isEngagementRateEnabled(), 'col-md-4':!user.isEngagementRateEnabled()}\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-black\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS' | translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.views !== null\\\">{{summary.views | number}}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.views === null\\\">-</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div [ngClass]=\\\"{'col-md-3 col-sm-4': user.isEngagementRateEnabled(), 'col-md-4':!user.isEngagementRateEnabled()}\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-yellow\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS_PER_USER' | translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.viewsPerUser !== null\\\">{{summary.viewsPerUser | number:'1.0-2'}}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.viewsPerUser === null\\\">-</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-3 col-sm-4\\\" *ngIf=\\\"user.isEngagementRateEnabled()\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-blue\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.AVG_WATCHING_TIME' | translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.avgWatchingTime !== null\\\">{{summary.avgWatchingTime | number:'1.0-0'}} [s]</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.avgWatchingTime === null\\\">-</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6 col-sm-6\\\" *ngIf=\\\"currentAccountingPeriodFromDate && (currentAccountingBaseViewsSize > 0)\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-black\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.VIEWS' | translate:lang }} ({{ 'ANALYTICS_AUDIENCE.VIEWS_OPEN_PERIOD' | translate:lang }})</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\">{{ currentAccountingPeriodViews | number}} / {{ currentAccountingBaseViewsSize  | number}}</div>\\n\\t\\t\\t<div class=\\\"stats-progress progress\\\">\\n\\t\\t\\t\\t<div class=\\\"progress-bar\\\" [style.width]=\\\"calcViewsUsagePercent(currentAccountingPeriodViews, currentAccountingBaseViewsSize)+'%'\\\"></div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.FOR_CURR_ACCOUNTING_MONTH' | translate:lang }} ({{currentAccountingPeriodFromDate.format('L')}} - {{currentAccountingPeriodToDate.format('L')}})</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6 col-sm-6\\\" *ngIf=\\\"lastAccountingPeriodFromDate && (lastAccountingBaseViewsSize > 0)\\\">\\n\\t\\t<div class=\\\"widget widget-stats bg-yellow\\\">\\n\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.VIEWS' | translate:lang }} ({{ 'ANALYTICS_AUDIENCE.VIEWS_PREVIOUS_PERIOD' | translate:lang }})</div>\\n\\t\\t\\t<div class=\\\"stats-number\\\">{{ lastAccountingPeriodViews | number}} / {{ lastAccountingBaseViewsSize | number}}</div>\\n\\t\\t\\t<div class=\\\"stats-progress progress\\\">\\n\\t\\t\\t\\t<div class=\\\"progress-bar\\\" [style.width]=\\\"calcViewsUsagePercent(lastAccountingPeriodViews, lastAccountingBaseViewsSize)+'%'\\\"></div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.FOR_PREV_ACCOUNTING_MONTH' | translate:lang }} ({{lastAccountingPeriodFromDate.format('L')}} - {{lastAccountingPeriodToDate.format('L')}})</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_AUDIENCE.HEADER.2' | translate:lang }}<span style=\\\"float:right;line-height:20px;font-size:9px; font-style: italic;\\\">( * - {{ 'ANALYTICS_AUDIENCE.SUBHEADER.6' | translate:lang }} )</span></h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"monthlyStats && (monthlyStats.length > 0)\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 m-b-10\\\">\\n\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"monthlyStatsExportCsv()\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-download\\\"></i> CSV\\n\\t\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"monthlyStats && (monthlyStats.length > 0)\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-6\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_AUDIENCE.WORD.MONTH' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_AUDIENCE.WORD.VIEWS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_AUDIENCE.WORD.USERS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of monthlyStats.slice(0, 6); let idx = index\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.date.format('YYYY MMM')}} <span *ngIf=\\\"idx == 0\\\">*</span></td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.users}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-6\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>Month</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>Views</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>Users</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of monthlyStats.slice(6, 12)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.date.format('YYYY MMM')}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.users}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"!monthlyStats || !monthlyStats.length\\\" class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"table-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/audience/audience.view.component.html\n// module id = 1377\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_HEADER' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<span style=\\\"font-size:20px;\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.FILTERS' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 m-t-10\\\">\\n\\t\\t\\t\\t\\t\\t<span style=\\\"color:#242a30;font-size:14px;margin-right:10px;display:inline-block;line-height:44px;width:50px;\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.FILTERS_TITLE' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" (keypress)=\\\"onSearchKeyPress($event)\\\" [(ngModel)]=\\\"filters.text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\tplaceholder=\\\"{{ 'ANALYTICS_CONTENT.PLACEHOLDER.SEARCH' | translate:lang }}\\\" style=\\\"width: 300px; margin-top:5px; display:inline-block;vertical-align: top;\\\">\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 m-t-10\\\">\\n\\t\\t\\t\\t\\t\\t<span style=\\\"color:#242a30;font-size:14px;margin-right:10px;display:inline-block;line-height:44px;width:50px;\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.FILTERS_TAGS' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t<tag-input class=\\\"m-l-0\\\" style=\\\"display:inline-block; width:300px;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[(ngModel)] = \\\"existingTagSelector.selectedTagsList\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tmodelAsStrings=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(onAdd)=\\\"onTagAdd($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[onAdding]=\\\"existingTagSelector.onTagAdding\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(onRemove)=\\\"onTagRemove($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\ttheme=\\\"ngx-chips-bradmax-theme\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tplaceholder=\\\"{{ 'ANALYTICS_TAG_SERVICE.PLACEHOLDER' | translate:lang }}\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tsecondaryPlaceholder=\\\"{{ 'ANALYTICS_TAG_SERVICE.INITIAL_PLACEHOLDER' | translate:lang }}\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<tag-input-dropdown [autocompleteObservable]=\\\"existingTagSelector.onTagSearch\\\"></tag-input-dropdown>\\n\\t\\t\\t\\t\\t\\t</tag-input>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\" *ngIf=\\\"(collectionMetadataList != null) && (collectionMetadataList.length > 0)\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"albums-list\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">Id</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.TITLE' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.ITEMS_IN_COLLECTION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"3\\\" *ngIf=\\\"hasCollectionMetadataListUsersStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.SUMMARY' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"2\\\" *ngIf=\\\"!hasCollectionMetadataListUsersStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.SUMMARY' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th class=\\\"sortable\\\" (click)=\\\"onColumnHeaderClick(TOP_LIST_TYPE_ITEM_VIEWS)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.VIEWS' | translate:lang }} <i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\" *ngIf=\\\"topListType==TOP_LIST_TYPE_ITEM_VIEWS\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th class=\\\"sortable\\\" (click)=\\\"onColumnHeaderClick(TOP_LIST_TYPE_COMPLETE_VIEWS)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.COMPLETE_VIEWS' | translate:lang }} <i class=\\\"fa fa-caret-down\\\" aria-hidden=\\\"true\\\" *ngIf=\\\"topListType==TOP_LIST_TYPE_COMPLETE_VIEWS\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th *ngIf=\\\"hasCollectionMetadataListUsersStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.TOP_LIST_COLUMN.USERS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let mm of collectionMetadataList\\\" (click)=\\\"selectMediaMetadata(mm.collection_id)\\\" [class.selected]=\\\"isMediaMetadataSelected(mm.collection_id)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'albums', mm.collection_id]\\\">{{mm.collection_id}}</a></td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.title}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.itemsNum}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.mediaViews}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.collectionViews}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"hasCollectionMetadataListUsersStats\\\">{{mm.collectionUsers}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t\\t<pager [page]=\\\"topListPagingOptions.page\\\" [pageSize]=\\\"topListPagingOptions.page_size\\\" [totalItems]=\\\"collectionMetadataTotalNum\\\"\\n\\t\\t\\t\\t\\t\\t\\t[pagesVisibleNum]=\\\"5\\\" (pageChanged)=\\\"onTopListPageChanged($event)\\\"></pager>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"collectionMetadataList == null\\\" class=\\\"media-list-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"(collectionMetadataList != null) && (collectionMetadataList.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.NO_DATA' | translate:lang }}\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedCollectionMetadata\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ALBUM_DETAIL_HEADER' | translate:lang }}<span style=\\\"float:right;\\\">[{{selectedCollectionMetadata.collection_id}}]\\n\\t\\t\\t\\t\\t\\t{{selectedCollectionMetadata.title}}</span></h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"previewHistoryStats\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>Listenings</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"previewHistoryStats.data\\\" [chartLabels]=\\\"previewHistoryStats.labels\\\" [chartType]=\\\"previewHistoryStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t[startDate]=\\\"previewHistoryStats.startDate\\\" [endDate]=\\\"previewHistoryStats.endDate\\\" [granularity]=\\\"previewHistoryStats.granularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"!previewHistoryStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"(collectionItemsStats != null) && (collectionItemsStats.length > 0)\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4 style=\\\"margin-top:38px;\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ALBUM_ITEM_STATS_HEADER' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.POSITION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.ID' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.TITLE' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.DURATION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"4\\\" *ngIf=\\\"hasUsersInCollectionItemsStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.STATS_GROUP' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"3\\\" *ngIf=\\\"!hasUsersInCollectionItemsStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.STATS_GROUP' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.VIEWS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th *ngIf=\\\"hasUsersInCollectionItemsStats\\\">{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.USERS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.WATCHING_TIME' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.TOP_LIST.ITEM_STATS_COLUMN.AVG_WATCHING_TIME' | translate:lang }}Time per list.</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let mm of collectionItemsStats\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.pos}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', mm.material_id]\\\">{{mm.material_id}}</a></td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.title}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"hasUsersInCollectionItemsStats\\\">{{mm.users}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.time)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.avgtime)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t\\t\\t<pager [page]=\\\"selectedCollectionItemsPaging.page\\\" [pageSize]=\\\"selectedCollectionItemsPaging.page_size\\\" \\n\\t\\t\\t\\t\\t\\t\\t\\t[totalItems]=\\\"selectedCollectionItemsPaging.items.length\\\" (pageChanged)=\\\"onSelectedCollectionItemsListPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"collectionItemsStats == null\\\" class=\\\"collection-items-list-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"(collectionItemsStats != null) && (collectionItemsStats.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.NO_DATA' | translate:lang }}\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"padding-top: 12px;font-size: 12px;color: #242a30;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 text-center\\\">\\n\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary m-r-5 m-b-5 m-t-5\\\" [routerLink]=\\\"['/admin', 'analytics', 'albums', selectedCollectionMetadata.collection_id]\\\">\\n\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_ALBUMS.TOP_LIST.ALBUM_DETAILS_BUTTON' | translate:lang }}\\n\\t\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/albums/albums.view.component.html\n// module id = 1378\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.TITLE' | translate:lang }}</h1>\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.CHART_TITLE' | translate:lang }}: {{collectionMetadata.title}} [{{collectionMetadata.collection_id}}]</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\" *ngIf=\\\"historyStats && (historyStats.data !== null)\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-left m-l-10\\\">\\n\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"chartDataExportCsv()\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-download\\\"></i> CSV\\n\\t\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<chart-granularity size=\\\"sm\\\"\\n\\t\\t\\t\\t\\t\\t\\t[types]=\\\"granularityTypes\\\"\\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"historyStats.granularity\\\"\\n\\t\\t\\t\\t\\t\\t\\t(onTypeChange)=\\\"onGranularityChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-granularity>\\n\\t\\t\\t\\t\\t\\t<chart-picker size=\\\"sm\\\" class=\\\"m-l-10\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartTypes]=\\\"chartTypes\\\"\\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"historyStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t\\t(chartTypeChanged)=\\\"onChartTypeChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-picker>\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:historyStats.startDate, endDate:historyStats.endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<chart\\n\\t\\t\\t\\t\\t[chartData]=\\\"historyStats.data\\\"\\n\\t\\t\\t\\t\\t[chartLabels]=\\\"historyStats.labels\\\"\\n\\t\\t\\t\\t\\t[chartType]=\\\"historyStats.chartType\\\"\\n\\t\\t\\t\\t\\t[startDate]=\\\"historyStats.startDate\\\"\\n\\t\\t\\t\\t\\t[endDate]=\\\"historyStats.endDate\\\"\\n\\t\\t\\t\\t\\t[granularity]=\\\"historyStats.granularity\\\">\\n\\t\\t\\t\\t</chart>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div *ngIf=\\\"!historyStats || (historyStats.data === null)\\\" class=\\\"panel-body chart-loader\\\">\\n\\t\\t\\t\\t <span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t<div [ngClass]=\\\"{'col-md-3': (totalCollectionUsersInRange > 0), 'col-md-4': !totalCollectionUsersInRange }\\\">\\n\\t\\t\\t\\t<div class=\\\"widget widget-stats bg-green\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.BOX_VIEWS' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalMediaViewsInRange | number:'1.0-3'}}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div [ngClass]=\\\"{'col-md-3': (totalCollectionUsersInRange > 0), 'col-md-4': !totalCollectionUsersInRange }\\\">\\n\\t\\t\\t\\t<div class=\\\"widget widget-stats bg-blue-darker\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.BOX_COMPLETE_VIEWS' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalCollectionViewsInRange | number:'1.0-3'}}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"col-md-3\\\" *ngIf=\\\"totalCollectionUsersInRange > 0\\\">\\n\\t\\t\\t\\t<div class=\\\"widget widget-stats bg-green\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.BOX_USERS' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalCollectionUsersInRange | number:'1.0-3'}}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div [ngClass]=\\\"{'col-md-3': (totalCollectionUsersInRange > 0), 'col-md-4': !totalCollectionUsersInRange }\\\">\\n\\t\\t\\t\\t<div class=\\\"widget widget-stats bg-blue\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.BOX_WATCHING_TIME' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n\\t\\t\\t\\t\\t\\t{{dateUtil.formatDuration(totalAvgWatchingTime)}}\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.META_HEADER' | translate:lang }}</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\" *ngIf=\\\"collectionMetadata\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-6\\\">\\n\\t\\t\\t\\t\\t\\t<dl class=\\\"dl-horizontal\\\">\\n\\t\\t\\t\\t\\t\\t\\t<dt>ID:</dt> <dd>{{collectionMetadata.collection_id}}</dd>\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_CONTENT.WORD.TITLE' | translate:lang }}:</dt> <dd>{{collectionMetadata.title}}</dd>\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_CONTENT.WORD.DURATION' | translate:lang }}:</dt> <dd>{{collectionMetadata.duration | number:'1.0-3'}} [s] ({{dateUtil.formatDuration(collectionMetadata.duration)}})</dd>\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TAGS' | translate:lang }}:</dt>\\n\\t\\t\\t\\t\\t\\t\\t<dd>\\n\\t\\t\\t\\t\\t\\t\\t\\t<span *ngFor=\\\"let tag of collectionMetadata.tags ; let isLast=last\\\" style=\\\"text-decoration:underline;\\\">{{tag}}{{isLast ? '' : ', '}}</span>\\n\\t\\t\\t\\t\\t\\t\\t</dd>\\n\\t\\t\\t\\t\\t\\t</dl>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-6\\\">\\n\\t\\t\\t\\t\\t\\t<dl class=\\\"dl-horizontal\\\">\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.META_REL_ID' | translate:lang }}:</dt> <dd>{{collectionMetadata.related_id}}</dd>\\n\\t\\t\\t\\t\\t\\t\\t<dt>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.META_ADDED_AT' | translate:lang }}:</dt> <dd>{{dateUtil.unixToDateString(collectionMetadata.created_at_ts)}} {{dateUtil.unixToTimeString(collectionMetadata.created_at_ts)}}</dd>\\n\\t\\t\\t\\t\\t\\t</dl>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_HEADER' | translate:lang }}</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"songs-list\\\" style=\\\"margin-top: 18px;\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\" class=\\\"hidden-xlg-below\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.POSITION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.ID' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.TITLE' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th rowspan=\\\"2\\\" class=\\\"hidden-xlg-below\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.DURATION' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"4\\\" *ngIf=\\\"hasUsersInCollectionItemStats\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.STATS_GROUP' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th colspan=\\\"3\\\" *ngIf=\\\"!hasUsersInCollectionItemStats\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.STATS_GROUP' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.ITEM_VIEWS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th *ngIf=\\\"hasUsersInCollectionItemStats\\\">{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.USERS' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.WATCHING_TIME' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th>{{ 'ANALYTICS_ALBUMS.DETAILS_VIEW.ITEM_STATS_COL.AVG_WATCHING_TIME' | translate:lang }}</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let mm of mediaStatsList\\\" (click)=\\\"selectMediaStats(mm.material_id)\\\" [class.selected]=\\\"isMediaStatsSelected(mm.material_id)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td class=\\\"hidden-xlg-below\\\">{{mm.pos}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.material_id}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.title}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td class=\\\"hidden-xlg-below\\\">{{dateUtil.formatDuration(mm.duration)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"hasUsersInCollectionItemStats\\\">{{mm.users}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.time)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.avgtime)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t\\t<pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"collectionItemStats.length\\\"\\n\\t\\t\\t\\t\\t\\t\\t [pagesVisibleNum]=\\\"5\\\" (pageChanged)=\\\"onPageChanged($event)\\\"></pager>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedMediaStats\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT.HEADER.2' | translate:lang }}<span style=\\\"float:right;\\\">[{{selectedMediaStats.material_id}}]\\n\\t\\t\\t\\t\\t\\t{{selectedMediaStats.title}}</span></h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"previewHistoryStats\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.3' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"previewHistoryStats.data\\\" [chartLabels]=\\\"previewHistoryStats.labels\\\" [chartType]=\\\"previewHistoryStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t [startDate]=\\\"previewHistoryStats.startDate\\\" [endDate]=\\\"previewHistoryStats.endDate\\\" [granularity]=\\\"previewHistoryStats.granularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"!previewHistoryStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && engagementRateStats.data\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"engagementRateStats.data\\\" [chartLabels]=\\\"engagementRateStats.labels\\\" [chartType]=\\\"engagementRateStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t [granularity]=\\\"engagementRateStats.granularity\\\" [startDate]=\\\"engagementRateStats.startDate\\\" [endDate]=\\\"engagementRateStats.endDate\\\"></chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && !engagementRateStats.data\\\" class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"user.isEngagementRateEnabled() && !engagementRateStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"padding-top: 12px;font-size: 12px;color: #242a30;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 text-center\\\">\\n\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary m-r-5 m-b-5 m-t-5\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', selectedMediaStats.material_id]\\\">{{\\n\\t\\t\\t\\t\\t\\t\\t'ANALYTICS_CONTENT.SUBHEADER.3' | translate:lang }}</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/albums/album.details.view.component.html\n// module id = 1379\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_CONTENT.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT.HEADER.1' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">{{\\n\\t\\t\\t\\t\\t\\t\\t'ANALYTICS_CONTENT.WORD.SEARCH' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t<input type=\\\"text\\\" (keypress)=\\\"onSearchKeyPress($event)\\\" [(ngModel)]=\\\"searchOptions.text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t placeholder=\\\"{{ 'ANALYTICS_CONTENT.PLACEHOLDER.SEARCH' | translate:lang }}\\\" style=\\\"width: 300px; display:inline-block;vertical-align: top;\\\">\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\" *ngIf=\\\"(mediaMetadataList != null) && (mediaMetadataList.length > 0)\\\">\\n\\t\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n\\t\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th (click)=\\\"onColumnHeaderClick('material_id')\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tId\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'material_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'material_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th (click)=\\\"onColumnHeaderClick('title')\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_CONTENT.WORD.TITLE' | translate:lang }}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'title') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'title') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th (click)=\\\"onColumnHeaderClick('duration')\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_CONTENT.WORD.DURATION' | translate:lang }}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'duration') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'duration') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<th (click)=\\\"onColumnHeaderClick('created_at_ts')\\\" style=\\\"width:22%\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_CONTENT.SUBHEADER.4' | translate:lang }}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'created_at_ts') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t<i *ngIf=\\\"(searchOptions.sort_by == 'created_at_ts') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t aria-hidden=\\\"true\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t</th>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let mm of mediaMetadataList\\\" (click)=\\\"selectMediaMetadata(mm.material_id)\\\" [class.selected]=\\\"isMediaMetadataSelected(mm.material_id)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', mm.material_id]\\\">{{mm.material_id}}</a></td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{mm.title}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td style=\\\"width:22%\\\">{{dateUtil.unixToDateString(mm.created_at_ts)}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t\\t<pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"mediaMetadataTotalNum\\\"\\n\\t\\t\\t\\t\\t\\t (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"mediaMetadataList == null\\\" class=\\\"media-list-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"(mediaMetadataList != null) && (mediaMetadataList.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n\\t\\t\\t\\t\\t\\t{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedMediaMetadata\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT.HEADER.2' | translate:lang }}<span style=\\\"float:right;\\\">[{{selectedMediaMetadata.material_id}}]\\n\\t\\t\\t\\t\\t\\t{{selectedMediaMetadata.title}}</span></h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"previewHistoryStats\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.3' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"previewHistoryStats.data\\\" [chartLabels]=\\\"previewHistoryStats.labels\\\" [chartType]=\\\"previewHistoryStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t [startDate]=\\\"previewHistoryStats.startDate\\\" [endDate]=\\\"previewHistoryStats.endDate\\\" [granularity]=\\\"previewHistoryStats.granularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"!previewHistoryStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && engagementRateStats.data\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<chart [chartData]=\\\"engagementRateStats.data\\\" [chartLabels]=\\\"engagementRateStats.labels\\\" [chartType]=\\\"engagementRateStats.chartType\\\"\\n\\t\\t\\t\\t\\t\\t [granularity]=\\\"engagementRateStats.granularity\\\" [startDate]=\\\"engagementRateStats.startDate\\\" [endDate]=\\\"engagementRateStats.endDate\\\"></chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && !engagementRateStats.data\\\" class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n\\t\\t\\t\\t\\t\\t<div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"user.isEngagementRateEnabled() && !engagementRateStats\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"padding-top: 12px;font-size: 12px;color: #242a30;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 text-center\\\">\\n\\t\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn btn-primary m-r-5 m-b-5 m-t-5\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', selectedMediaMetadata.material_id]\\\">{{\\n\\t\\t\\t\\t\\t\\t\\t'ANALYTICS_CONTENT.SUBHEADER.3' | translate:lang }}</button>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/content/content.view.component.html\n// module id = 1380\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_CONTENT_DETAILS.TITLE' | translate:lang }}</h1>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.HEADER.STATS_HISTORY' | translate:lang }}: {{mediaMetadata.title}} [{{mediaMetadata.material_id}}]</h4></div>\\n            <div class=\\\"panel-body\\\" *ngIf=\\\"historyStats && (historyStats.data !== null)\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"chartDataExportCsv()\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <chart-granularity size=\\\"sm\\\"\\n                            [types]=\\\"granularityTypes\\\"\\n                            [activeType]=\\\"historyStats.granularity\\\"\\n                            (onTypeChange)=\\\"onGranularityChange($event)\\\">\\n                        </chart-granularity>\\n                        <chart-picker size=\\\"sm\\\" class=\\\"m-l-10\\\"\\n                            [chartTypes]=\\\"chartTypes\\\"\\n                            [activeType]=\\\"historyStats.chartType\\\"\\n                            (chartTypeChanged)=\\\"onChartTypeChange($event)\\\">\\n                        </chart-picker>\\n                        <date-range-picker class=\\\"m-l-10 pull-right\\\"\\n                            showIcon=\\\"right\\\"\\n                            [enable]=\\\"true\\\"\\n                            [options]=\\\"{startDate:historyStats.startDate, endDate:historyStats.endDate}\\\"\\n                            (selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n                        </date-range-picker>\\n                    </div>\\n                </div>\\n                <chart\\n                   [chartData]=\\\"historyStats.data\\\"\\n                   [chartLabels]=\\\"historyStats.labels\\\"\\n                   [chartType]=\\\"historyStats.chartType\\\"\\n                   [startDate]=\\\"historyStats.startDate\\\"\\n                   [endDate]=\\\"historyStats.endDate\\\"\\n                   [granularity]=\\\"historyStats.granularity\\\">\\n               </chart>\\n            </div>\\n            <div *ngIf=\\\"!historyStats || (historyStats.data === null)\\\" class=\\\"panel-body chart-loader\\\">\\n                 <span class=\\\"spinner-small\\\"></span>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"(engagementRateSummary.totalWatchingTime > 0) && (totalViewsInRange > 0)\\\">\\n    <div *ngIf=\\\"totalUsersInRange > 0\\\" class=\\\"col-md-3\\\">\\n        <div class=\\\"widget widget-stats bg-blue\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TOTAL_USERS' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">{{totalUsersInRange | number:'1.0-3'}}</div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div [ngClass]=\\\"{'col-md-3': (totalUsersInRange > 0), 'col-md-4': !(totalUsersInRange > 0) }\\\">\\n        <div class=\\\"widget widget-stats bg-black\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TOTAL_VIEWS' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalViewsInRange | number:'1.0-3'}}</div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div [ngClass]=\\\"{'col-md-3': (totalUsersInRange > 0), 'col-md-4': !(totalUsersInRange > 0) }\\\">\\n        <div class=\\\"widget widget-stats bg-yellow\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.ENG_RATE_SUMMARY_TOTAL_WATCHING_TIME' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n                {{engagementRateSummary.totalWatchingTime | number:'1.0-3'}} [s]\\n                <small style=\\\"font-size: 0.6em;\\\">({{dateUtil.formatDuration(engagementRateSummary.totalWatchingTime)}})</small>\\n            </div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div [ngClass]=\\\"{'col-md-3': (totalUsersInRange > 0), 'col-md-4': !(totalUsersInRange > 0) }\\\">\\n        <div class=\\\"widget widget-stats bg-blue\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.ENG_RATE_SUMMARY_AVG_WATCHING_TIME' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n                {{engagementRateSummary.totalWatchingTime / totalViewsInRange | number:'1.0-3'}} [s]\\n                <small style=\\\"font-size: 0.6em;\\\">({{dateUtil.formatDuration(engagementRateSummary.totalWatchingTime / totalViewsInRange)}})</small>\\n            </div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div [ngClass]=\\\"{'col-md-12 col-lg-6': user.isEngagementRateEnabled(), 'col-md-12': !user.isEngagementRateEnabled() }\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.HEADER.METADATA' | translate:lang }}</h4></div>\\n            <div class=\\\"panel-body\\\" *ngIf=\\\"historyStats && (historyStats.data !== null)\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt>ID:</dt> <dd>{{mediaMetadata.material_id}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT.WORD.TITLE' | translate:lang }}:</dt> <dd>{{mediaMetadata.title}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT.WORD.DURATION' | translate:lang }}:</dt> <dd>{{mediaMetadata.duration | number:'1.0-3'}} [s] ({{dateUtil.formatDuration(mediaMetadata.duration)}})</dd>\\n                       </dl>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.RELATED_ID' | translate:lang }}:</dt> <dd>{{mediaMetadata.related_id}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.CREATED_AT' | translate:lang }}:</dt> <dd>{{dateUtil.unixToDateString(mediaMetadata.created_at_ts)}} {{dateUtil.unixToTimeString(mediaMetadata.created_at_ts)}}</dd>\\n                       </dl>\\n                    </div>\\n                </div>\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TAGS' | translate:lang }}:</dt>\\n                           <dd>\\n                               <span *ngFor=\\\"let tag of mediaMetadata.tags ; let isLast=last\\\">{{tag}}{{isLast ? '' : ', '}}</span>\\n                               <table *ngIf=\\\"tagGroups && tagGroups.length\\\" class=\\\"table table-striped table-bordered\\\" style=\\\"margin-top:20px;\\\">\\n                                <thead>\\n                                    <tr>\\n                                        <th>Tags group</th>\\n                                        <th>Value</th>\\n                                        <th>Frequency [%]</th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let tagGroup of tagGroups\\\" >\\n                                        <td>{{tagGroup.prefix}}</td>\\n                                        <td>{{tagGroup.sufix}}</td>\\n                                        <td style=\\\"text-align: right;\\\">{{tagGroup.frequency | number:'1.0-2'}} %</td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                           </dd>\\n                       </dl>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\" *ngIf=\\\"!(engagementRateSummary.totalWatchingTime > 0) && (totalViewsInRange > 0)\\\">\\n            <div [ngClass]=\\\"{'col-md-12': user.isEngagementRateEnabled(), 'col-md-4': !user.isEngagementRateEnabled() }\\\">\\n               <div class=\\\"widget widget-stats bg-green\\\">\\n                   <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n                   <div class=\\\"stats-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.TOTAL_VIEWS' | translate:lang }}</div>\\n                   <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" >{{totalViewsInRange | number:'1.0-3'}}</div>\\n                   <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.IN_SELECTED_PERIOD' | translate:lang }}</div>\\n               </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-12 col-lg-6\\\" *ngIf=\\\"user.isEngagementRateEnabled()\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_CONTENT_DETAILS.HEADER.ENGAGEMENT_RATE' | translate:lang }}</h4></div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && engagementRateStats.data\\\" >\\n                     <div class=\\\"row\\\" *ngIf=\\\"mediaMetadata.is_live_stream\\\">\\n                        <div class=\\\"btn-group btn-group-sm pull-right m-b-10 m-r-5\\\">\\n                           <button class=\\\"btn btn-white\\\" (click)=\\\"changeEngRateLiveStreamClockType('wall')\\\" [ngClass]=\\\"{'active':(engagementRateLiveStreamClockType == 'wall')}\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.ENG_RATE_LIVE_STREAM_CLOCK_TYPE_WALL' | translate:lang }}</button>\\n                           <button class=\\\"btn btn-white\\\" (click)=\\\"changeEngRateLiveStreamClockType('content')\\\" [ngClass]=\\\"{'active':(engagementRateLiveStreamClockType == 'content')}\\\">{{ 'ANALYTICS_CONTENT_DETAILS.WORD.ENG_RATE_LIVE_STREAM_CLOCK_TYPE_CONTENT' | translate:lang }}</button>\\n                        </div>\\n                     </div>\\n                     <chart [chartData]=\\\"engagementRateStats.data\\\"\\n                            [chartLabels]=\\\"engagementRateStats.labels\\\"\\n                            [chartType]=\\\"engagementRateStats.chartType\\\"\\n                            [granularity]=\\\"engagementRateStats.granularity\\\"\\n                            [startDate]=\\\"engagementRateStats.startDate\\\"\\n                            [endDate]=\\\"engagementRateStats.endDate\\\"></chart>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && !engagementRateStats.data\\\" class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                     <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && !engagementRateStats\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"hasTvMetrics && !tvStatsLoading\\\">\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"!tvStatsAmr || !tvStatsAmr.labels || !tvStatsAmr.labels.length\\\">\\n        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"loadTvMetrics()\\\">\\n            <i class=\\\"fa fa-download\\\"></i> Load TV metrics\\n        </button>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"hasTvMetrics\\\">\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"tvStatsLoading || (tvStatsAmr && tvStatsAmr.labels && tvStatsAmr.labels.length)\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">TV metrics - Average Minute Rating (AMR)</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"!tvStatsLoading && tvStatsAmr && tvStatsAmr.data\\\" >\\n                     <chart [chartData]=\\\"tvStatsAmr.data\\\"\\n                            [chartLabels]=\\\"tvStatsAmr.labels\\\"\\n                            [chartType]=\\\"tvStatsAmr.chartType\\\"\\n                            [granularity]=\\\"tvStatsAmr.granularity\\\"\\n                            [startDate]=\\\"tvStatsAmr.startDate\\\"\\n                            [endDate]=\\\"tvStatsAmr.endDate\\\"></chart>\\n                </div>\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsAmr && !tvStatsAmr.data\\\" class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                     <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && tvStatsLoading\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"tvStatsLoading || (tvStatsAvgReach && tvStatsAvgReach.labels && tvStatsAvgReach.labels.length)\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">TV metrics - Average Reach</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsAvgReach && tvStatsAvgReach.data\\\" >\\n                     <chart [chartData]=\\\"tvStatsAvgReach.data\\\"\\n                            [chartLabels]=\\\"tvStatsAvgReach.labels\\\"\\n                            [chartType]=\\\"tvStatsAvgReach.chartType\\\"\\n                            [granularity]=\\\"tvStatsAvgReach.granularity\\\"\\n                            [startDate]=\\\"tvStatsAvgReach.startDate\\\"\\n                            [endDate]=\\\"tvStatsAvgReach.endDate\\\"></chart>\\n                </div>\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsAvgReach && !tvStatsAvgReach.data\\\" class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                     <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && tvStatsLoading\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"tvStatsLoading || (tvStatsCumReach && tvStatsCumReach.labels && tvStatsCumReach.labels.length)\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">TV metrics - Cumulative Reach</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsCumReach && tvStatsCumReach.data\\\" >\\n                     <chart [chartData]=\\\"tvStatsCumReach.data\\\"\\n                            [chartLabels]=\\\"tvStatsCumReach.labels\\\"\\n                            [chartType]=\\\"tvStatsCumReach.chartType\\\"\\n                            [granularity]=\\\"tvStatsCumReach.granularity\\\"\\n                            [startDate]=\\\"tvStatsCumReach.startDate\\\"\\n                            [endDate]=\\\"tvStatsCumReach.endDate\\\"></chart>\\n                </div>\\n                <div *ngIf=\\\"!tvStatsLoading && user.isEngagementRateEnabled() && tvStatsCumReach && !tvStatsCumReach.data\\\" class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                     <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && tvStatsLoading\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"hasTvMetrics\\\">\\n    <div class=\\\"col-md-12 col-lg-4\\\" *ngIf=\\\"tvStatsAmr && tvStatsAmr.labels && tvStatsAmr.labels.length\\\">\\n        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"exportTvMetricsToCsv()\\\">\\n            <i class=\\\"fa fa-download\\\"></i> Export TV metrics to CSV\\n        </button>\\n    </div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/content/content.details.view.component.html\n// module id = 1381\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_DASHBOARD.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"showWelcomeBox\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    Welcome to Bradmax!\\n                </h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-md-12\\\">\\n                            Let's get your first video player up and running.\\n                            <br/>\\n                            Quick intro:\\n                            <ol>\\n                                <li>Create a new player,</li>\\n                                <li>Configure it as you wish and save it,</li>\\n                                <li>Embed player on your page with \\\"embedcode\\\".</li>\\n                            </ol>\\n                            After that you will see how your users are watching video in panel below.\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-md-12\\\">\\n                            <button class=\\\"btn btn-primary\\\" type=\\\"button\\\" (click)=\\\"askForNewPlayer()\\\"><i _class=\\\"fa fa-plus\\\"></i>&nbsp;Create your first player</button>\\n                        </div>\\n                    </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\"  *ngIf=\\\"!showWelcomeBox\\\">\\n    <div [ngClass]=\\\"{'col-md-4 col-sm-6': user.areTechStatsEnabled(), 'col-md-6': !user.areTechStatsEnabled()}\\\">\\n        <div class=\\\"widget widget-stats bg-purple\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.USERS_IN_MONTH' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.last30d.users !== null\\\">{{summary.last30d.users | number}}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.last30d.users === null\\\">-</div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.LAST_30D' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div [ngClass]=\\\"{'col-md-4 col-sm-6': user.areTechStatsEnabled(), 'col-md-6': !user.areTechStatsEnabled()}\\\">\\n        <div class=\\\"widget widget-stats bg-black\\\">\\n            <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.VIEWS_IN_MONTH' | translate:lang }}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.last30d.views !== null\\\">{{summary.last30d.views | number}}</div>\\n            <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\" *ngIf=\\\"summary.last30d.views === null\\\">-</div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.LAST_30D' | translate:lang }}</div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-4 col-sm-6\\\" *ngIf=\\\"user.areTechStatsEnabled()\\\">\\n        <div class=\\\"widget widget-stats bg-yellow\\\">\\n            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.DESKTOP_VS_MOBILE' | translate:lang }}</div>\\n            <div class=\\\"row\\\" style=\\\"height:58px;padding-top:10px;\\\">\\n                <div class=\\\"col-xs-6\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-desktop\\\" style=\\\"font-size:36px;\\\"></i>\\n                    <span style=\\\"font-size: 16px;margin-left: 5px;\\\" *ngIf=\\\"summary.devices.desktopPerc !== null\\\">{{summary.devices.desktopPerc.toFixed(0)}}%</span>\\n                    <span style=\\\"font-size: 16px;margin-left: 5px;\\\" *ngIf=\\\"summary.devices.desktopPerc === null\\\">-</span>\\n                </div>\\n                <div class=\\\"col-xs-6\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-mobile\\\" style=\\\"font-size:36px;\\\"></i>\\n                    <span style=\\\"font-size: 16px;margin-left: 5px;\\\" *ngIf=\\\"summary.devices.otherPerc !== null\\\">{{summary.devices.otherPerc.toFixed(0)}}%</span>\\n                    <span style=\\\"font-size: 16px;margin-left: 5px;\\\" *ngIf=\\\"summary.devices.otherPerc === null\\\">-</span>\\n                </div>\\n            </div>\\n            <div class=\\\"stats-desc\\\">{{ 'ANALYTICS_DASHBOARD.SUMMARY.LAST_30D' | translate:lang }}</div>\\n        </div>\\n    </div>\\n</div>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    {{ 'ANALYTICS_DASHBOARD.HEADER.CHART_LAST_48H' | translate:lang }}\\n                    <small>{{ 'ANALYTICS_DASHBOARD.HEADER.CHART_LAST_48H_SUB' | translate:lang }}</small>\\n                </h4>\\n            </div>\\n\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"widget-chart with-sidebar \\\">\\n                    <div class=\\\"widget-chart-content\\\" style=\\\"margin-right:0;\\\">\\n                        <!--<h4 class=\\\"chart-title m-b-30\\\"></h4>-->\\n                        <chart\\n                        [chartHeight]=\\\"'260px'\\\"\\n                        [chartData]=\\\"audienceHistory48h.data\\\"\\n                        [chartLabels]=\\\"audienceHistory48h.labels\\\"\\n                        [chartType]=\\\"audienceHistory48h.chartType\\\"\\n                        [startDate]=\\\"audienceHistory48h.startDate\\\"\\n                        [endDate]=\\\"audienceHistory48h.endDate\\\"\\n                        [granularity]=\\\"audienceHistory48h.granularity\\\">\\n                    </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    {{ 'ANALYTICS_DASHBOARD.HEADER.CHART_LAST_30D' | translate:lang }}\\n                    <small>{{ 'ANALYTICS_DASHBOARD.HEADER.CHART_LAST_30D_SUB' | translate:lang }}</small>\\n                </h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"widget-chart with-sidebar\\\">\\n                    <div class=\\\"widget-chart-content\\\" style=\\\"margin-right:0;\\\">\\n                        <chart\\n                        [chartHeight]=\\\"'260px'\\\"\\n                        [chartData]=\\\"audienceHistory30d.data\\\"\\n                        [chartLabels]=\\\"audienceHistory30d.labels\\\"\\n                        [chartType]=\\\"audienceHistory30d.chartType\\\"\\n                        [startDate]=\\\"audienceHistory30d.startDate\\\"\\n                        [endDate]=\\\"audienceHistory30d.endDate\\\"\\n                        [granularity]=\\\"audienceHistory30d.granularity\\\">\\n                    </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\" *ngIf=\\\"user.areMediaStatsEnabled()\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    {{ 'ANALYTICS_DASHBOARD.HEADER.TOP_MEDIA_30D' | translate:lang }}\\n                    <small>{{ 'ANALYTICS_DASHBOARD.SUMMARY.LAST_30D' | translate:lang }}</small>\\n                </h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                    <div style=\\\"margin-right:0;\\\">\\n                        <table class=\\\"table table-striped table-bordered\\\" *ngIf=\\\"topMedia30d && topMedia30d.length > 0\\\" >\\n                            <thead>\\n                                <tr >\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.POSITION' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.ID' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.TITLE' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.VIEWS' | translate:lang }}</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let rec of topMedia30d\\\">\\n                                    <td>{{rec.position}}</td>\\n                                    <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', rec.media.material_id]\\\">{{rec.media.material_id}}</a></td>\\n                                    <td>{{rec.media.title}}</td>\\n                                    <td>{{rec.views | number}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <div *ngIf=\\\"topMedia30d && topMedia30d.length == 0\\\" style=\\\"color:#fff;padding-top:30px;\\\">{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                        <div *ngIf=\\\"!topMedia30d\\\" class=\\\"table-loader\\\">\\n                            <span class=\\\"spinner-small\\\"></span>\\n                        </div>\\n                    </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4>\\n                    {{ 'ANALYTICS_DASHBOARD.HEADER.TOP_MEDIA_24H' | translate:lang }}\\n                    <small>{{ 'ANALYTICS_DASHBOARD.HEADER.TOP_MEDIA_24H_SUB' | translate:lang }}</small>\\n                </h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                    <div style=\\\"margin-right:0;\\\">\\n                        <table class=\\\"table table-striped table-bordered\\\" *ngIf=\\\"topMedia24h && topMedia24h.length > 0\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.POSITION' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.ID' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.TITLE' | translate:lang }}</th>\\n                                    <th>{{ 'ANALYTICS_DASHBOARD.TOP_MEDIA_TABLE.VIEWS' | translate:lang }}</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let rec of topMedia24h\\\">\\n                                    <td>{{rec.position}}</td>\\n                                    <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', rec.media.material_id]\\\">{{rec.media.material_id}}</a></td>\\n                                    <td>{{rec.media.title}}</td>\\n                                    <td>{{rec.views | number}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <div *ngIf=\\\"topMedia24h && topMedia24h.length == 0\\\" style=\\\"color:#fff;padding-top:30px;\\\">{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                        <div *ngIf=\\\"!topMedia24h\\\" class=\\\"table-loader\\\">\\n                            <span class=\\\"spinner-small\\\"></span>\\n                        </div>\\n                    </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n        <div class=\\\"col-md-12\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\" >\\n                    <h4>\\n                        {{ 'ANALYTICS_DASHBOARD.HEADER.HEATMAP' | translate:lang }}\\n                        <small>{{ 'ANALYTICS_DASHBOARD.HEADER.HEATMAP_SUB' | translate:lang }}</small>\\n                    </h4>\\n                </div>\\n\\n                <div class=\\\"panel-body\\\">\\n                <div style=\\\"margin-right:0;\\\">\\n\\n                    <div role=\\\"group\\\" style=\\\"float: right;\\\">\\n                          <dropdown  [model]=\\\"dropdownHeatMap\\\" [value]=\\\"dropdownHeatMapSelectedValue\\\" [style.visibility]=\\\"true\\\" style=\\\"background: white\\\"\\n                               direction=\\\"-1\\\" (onSelect)=\\\"dropdownHeatMapSelect($event)\\\"></dropdown>\\n                    </div>\\n\\n                    <div class=\\\"row\\\" style=\\\"clear:both;padding-bottom:15px;\\\">\\n                        <div class=\\\"col-lg-6 col-md-12\\\">\\n                           <h5 style=\\\"color: #333;padding-left: 6px;\\\"> {{ 'ANALYTICS_AUDIENCE.WORD.VIEWS' | translate:lang }}</h5>\\n                           <heat-map style=\\\"margin-left:6px;\\\"\\n                               [Granularity] = \\\"heatMapGranularity\\\"\\n                               [Data] = \\\"heatMapViewsData\\\"\\n                               [ColorSchema] = \\\"'#9d8df1'\\\"\\n                               [Rows] = \\\"heatMapRowDescriptors\\\"\\n                               [Headers] = \\\"heatMapHeaders\\\"\\n                               [beginDate] = \\\"firstDay\\\"\\n                           ></heat-map>\\n                        </div>\\n                        <!--rgba(52,152,219,0.8)\\\",\\\"rgba(46, 204, 103,0.8)\\\",-->\\n                        <div class=\\\"col-lg-6 col-md-12\\\">\\n                           <h5 style=\\\"color: #333;padding-left: 6px;\\\">{{ 'ANALYTICS_AUDIENCE.WORD.USERS' | translate:lang }}</h5>\\n                           <heat-map style=\\\"margin-left:6px;\\\"\\n                               [Granularity] = \\\"heatMapGranularity\\\"\\n                               [Data] = \\\"heatMapUsersData\\\"\\n                               [ColorSchema] = \\\"'#f9d500'\\\"\\n                               [Rows] = \\\"heatMapRowDescriptors\\\"\\n                               [Headers] = \\\"heatMapHeaders\\\"\\n                               [beginDate] = \\\"firstDay\\\"\\n                               [beginDate] = \\\"firstDay\\\"\\n                           ></heat-map>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n </div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/dashboard/dashboard.view.component.html\n// module id = 1382\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_TOPCONTENT.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TOPCONTENT.HEADER.1' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.DATE_RANGE_SELECTION' | translate:lang }}</span>\\n                        <div class=\\\"btn-group\\\" style=\\\"vertical-align: top;\\\">\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 1)}\\\" (click)=\\\"onLastHoursSelectedChange(1)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.HOUR' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 24)}\\\" (click)=\\\"onLastHoursSelectedChange(24)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.24H' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 168)}\\\" (click)=\\\"onLastHoursSelectedChange(168)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.7D' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 720)}\\\" (click)=\\\"onLastHoursSelectedChange(720)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.30D' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == 8544)}\\\" (click)=\\\"onLastHoursSelectedChange(8544)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.365D' | translate:lang }}</button>\\n                            <button class=\\\"btn btn-white btn-sm\\\" [ngClass]=\\\"{'active': (lastHoursSelectedForScope == -1)}\\\" (click)=\\\"onLastHoursSelectedChange(-1)\\\">{{ 'ANALYTICS_TOPCONTENT.WORD.ALL_TIME' | translate:lang }}</button>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(topMediaList != null) && (topMediaList.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"top-content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th>\\n                                        {{ 'ANALYTICS_TOPCONTENT.WORD.POSITION' | translate:lang }}\\n                                    </th>\\n                                    <th>\\n                                        Id\\n                                    </th>\\n                                    <th>\\n                                        {{ 'ANALYTICS_TOPCONTENT.WORD.TITLE' | translate:lang }}\\n                                    </th>\\n                                    <th>\\n                                        {{ 'ANALYTICS_TOPCONTENT.WORD.VIEWS' | translate:lang }}\\n                                    </th>\\n                                    <th *ngIf=\\\"topMediaListHasUsersStats\\\">\\n                                        {{ 'ANALYTICS_TOPCONTENT.WORD.USERS' | translate:lang }}\\n                                    </th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of topMediaList\\\" (click)=\\\"selectMediaMetadata(mm.media.material_id)\\\" [class.selected]=\\\"isMediaMetadataSelected(mm.media.material_id)\\\">\\n                                    <td>{{mm.position}}</td>\\n                                    <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', mm.media.material_id]\\\">{{mm.media.material_id}}</a></td>\\n                                    <td>{{mm.media.title}}</td>\\n                                    <td>{{mm.views}}</td>\\n                                    <td *ngIf=\\\"topMediaListHasUsersStats\\\">{{mm.users}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"topMediaListTotalLength\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                    <div *ngIf=\\\"topMediaList == null\\\" class=\\\"media-list-loader\\\">\\n                       <span class=\\\"spinner-small\\\"></span>\\n                   </div>\\n                    <div *ngIf=\\\"(topMediaList != null) && (topMediaList.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n                        {{ 'ANALYTICS_TOPCONTENT.NO_DATA' | translate:lang }}\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedMediaMetadata\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TOPCONTENT.HEADER.2' | translate:lang }}<span style=\\\"float:right;\\\">[{{selectedMediaMetadata.material_id}}] {{selectedMediaMetadata.title}}</span></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" *ngIf=\\\"previewHistoryStats\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4>{{ 'ANALYTICS_TOPCONTENT.HEADER.3' | translate:lang }}</h4>\\n                        <chart\\n                            [chartData]=\\\"previewHistoryStats.data\\\"\\n                            [chartLabels]=\\\"previewHistoryStats.labels\\\"\\n                            [chartType]=\\\"previewHistoryStats.chartType\\\"\\n                            [startDate]=\\\"previewHistoryStats.startDate\\\"\\n                            [endDate]=\\\"previewHistoryStats.endDate\\\"\\n                            [granularity]=\\\"previewHistoryStats.granularity\\\">\\n                        </chart>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"!previewHistoryStats\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n\\n                <div class=\\\"row\\\" *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && engagementRateStats.data\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n                        <chart [chartData]=\\\"engagementRateStats.data\\\"\\n                                [chartLabels]=\\\"engagementRateStats.labels\\\"\\n                                [chartType]=\\\"engagementRateStats.chartType\\\"\\n                                [granularity]=\\\"engagementRateStats.granularity\\\"\\n                                [startDate]=\\\"engagementRateStats.startDate\\\"\\n                                [endDate]=\\\"engagementRateStats.endDate\\\"></chart>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && engagementRateStats && !engagementRateStats.data\\\" class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4>{{ 'ANALYTICS_CONTENT.HEADER.4' | translate:lang }}</h4>\\n                        <div>{{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}</div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"user.isEngagementRateEnabled() && !engagementRateStats\\\" class=\\\"chart-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n\\n                <div class=\\\"row\\\" style=\\\"padding-top: 12px;font-size: 12px;color: #242a30;\\\">\\n                    <div class=\\\"col-md-12 text-center\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-primary m-r-5 m-b-5 m-t-5\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', selectedMediaMetadata.material_id]\\\">{{ 'ANALYTICS_TOPCONTENT.SUBHEADER.3' | translate:lang }}</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/top-content/top-content.view.component.html\n// module id = 1383\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_GEO.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_GEO.HEADER.MAP' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:startDate, endDate:endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"analytics-geo-map\\\"  *ngIf=\\\"!loadingData\\\"> \\n\\t\\t\\t\\t\\t<google-chart [data]=\\\"mapChartData\\\" (chartSelect)=\\\"onMapRegionClick($event)\\\"></google-chart>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_GEO.HEADER.DETAILS' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered analytics-geo-table\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t<td>#</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.COUNTRY' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of geoStatsForPage\\\" [routerLink]=\\\"['/admin', 'analytics', 'geo', rec.country.country_code.toLowerCase()]\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.pos}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td><span class=\\\"flag-icon flag-icon-{{rec.country.country_code.toLowerCase()}}\\\" ></span> {{rec.country.name}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views_share  | number:'1.1-2':lang}} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"pagingOptions.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"table-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/geo/geo.view.component.html\n// module id = 1384\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_GEO_COUNTRY.TITLE' | translate:lang  }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_GEO.HEADER.MAP' | translate:lang  }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-left m-l-10\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"btn-group btn-group-sm\\\">\\n\\t\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-white\\\" [ngClass]=\\\"(scopeType == SCOPE_TYPE_REGIONS) ? 'active' : ''\\\" (click)=\\\"onScopeTypeChange(SCOPE_TYPE_REGIONS)\\\">{{ 'ANALYTICS_GEO_COUNTRY.TYPE.REGIONS' | translate:lang }}</button>\\n\\t\\t\\t\\t\\t\\t\\t<button class=\\\"btn btn-white\\\" [ngClass]=\\\"(scopeType == SCOPE_TYPE_CITIES) ? 'active' : ''\\\" (click)=\\\"onScopeTypeChange(SCOPE_TYPE_CITIES)\\\">{{ 'ANALYTICS_GEO_COUNTRY.TYPE.CITIES' | translate:lang }}</button>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:startDate, endDate:endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"analytics-geo-map\\\"  *ngIf=\\\"!loadingData\\\"> \\n\\t\\t\\t\\t\\t<google-chart [data]=\\\"mapChartData\\\"></google-chart>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">\\n\\t\\t\\t\\t\\t{{ 'ANALYTICS_GEO.HEADER.DETAILS' | translate:lang  }} -\\n\\t\\t\\t\\t\\t<span *ngIf=\\\"scopeType == SCOPE_TYPE_REGIONS\\\">{{ 'ANALYTICS_GEO_COUNTRY.TYPE.REGIONS' | translate:lang  }}</span>\\n\\t\\t\\t\\t\\t<span *ngIf=\\\"scopeType == SCOPE_TYPE_CITIES\\\">{{ 'ANALYTICS_GEO_COUNTRY.TYPE.CITIES' | translate:lang }}</span>\\n\\t\\t\\t\\t</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered analytics-geo-table\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t<td>#</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"scopeType == SCOPE_TYPE_REGIONS\\\">{{ 'ANALYTICS_GEO_COUNTRY.WORD.REGION' | translate:lang  }}</span>\\n\\t\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"scopeType == SCOPE_TYPE_CITIES\\\">{{ 'ANALYTICS_GEO_COUNTRY.WORD.CITY' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t\\t</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of geoStatsForPage\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.pos}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.name}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views_share  | number:'1.1-2':lang}} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"pagingOptions.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"table-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/geo/geo.country.view.component.html\n// module id = 1385\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_TECHNOLOGY.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TECHNOLOGY.DEVICES' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"pull-right m-r-10\\\">\\n\\t\\t\\t\\t\\t\\t<chart-granularity #granularity size=\\\"sm\\\"\\n\\t\\t\\t\\t\\t\\t\\t[types]=\\\"granularityTypes\\\"\\n\\t\\t\\t\\t\\t\\t\\t[activeType]=\\\"activeGranularity\\\"\\n\\t\\t\\t\\t\\t\\t\\t(onTypeChange)=\\\"onGranularityChange($event)\\\">\\n\\t\\t\\t\\t\\t\\t</chart-granularity>\\n\\t\\t\\t\\t\\t\\t<date-range-picker class=\\\"m-l-10 pull-right\\\"\\n\\t\\t\\t\\t\\t\\t\\tshowIcon=\\\"right\\\"\\n\\t\\t\\t\\t\\t\\t\\t[enable]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t[options]=\\\"{startDate:startDate, endDate:endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t(selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<chart #chartElement\\n\\t\\t\\t\\t\\t\\t\\t[chartData]=\\\"topDeviceChartData\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartLabels]=\\\"topDeviceChartLabels\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartType]=\\\"chartType\\\"\\n\\t\\t\\t\\t\\t\\t\\t[startDate]=\\\"startDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[endDate]=\\\"endDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[granularity]=\\\"activeGranularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"row\\\" *ngIf=\\\"deviceTableStats.length > 0\\\">\\n\\t\\t\\t\\t\\t<div *ngFor=\\\"let deviceTypeRec of deviceTableStats\\\" class=\\\"col-md-3 col-sm-6\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"widget widget-stats\\\" [style.backgroundColor]=\\\"deviceTypeRec.bgColorHex\\\">\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ deviceTypeRec.name }}</div>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"row\\\" style=\\\"height:58px;padding-top:10px;\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"col-xs-5\\\" style=\\\"text-align: center;\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa {{deviceTypeRec.iconClass}}\\\" style=\\\"font-size:44px;padding-top:5px;\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"col-xs-7\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div style=\\\"font-size: 20px;\\\" *ngIf=\\\"deviceTypeRec.views_share >= 0.01\\\">{{ deviceTypeRec.views_share | number:'1.1-2':lang }} %</div>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div style=\\\"font-size: 20px;\\\" *ngIf=\\\"deviceTypeRec.views_share < 0.01\\\">&lt; 0.01 %</div>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<div class=\\\"m-t-5\\\" style=\\\"font-size: 12px;color:#fff;color:hsla(0,0%,100%,.6);\\\">views: {{ deviceTypeRec.views }}</div>\\n\\t\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"deviceTableStats.length == 0\\\" class=\\\"row\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12 col-sm-12 p-20\\\" style=\\\"text-align:center;font-size:16px;\\\">\\n\\t\\t\\t\\t\\t\\t<span>{{ 'ANALYTICS_TECHNOLOGY.MESSAGE.NO_DATA' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TECHNOLOGY.BROWSERS' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<chart #chartElement\\n\\t\\t\\t\\t\\t\\t\\t[chartData]=\\\"topBrowserChartData\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartLabels]=\\\"topBrowserChartLabels\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartType]=\\\"chartType\\\"\\n\\t\\t\\t\\t\\t\\t\\t[startDate]=\\\"startDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[endDate]=\\\"endDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[granularity]=\\\"activeGranularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\" *ngIf=\\\"browserTableStats.length > 0\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr style=\\\"font-weight: bolder;\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.BROWSER' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.VIEWS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.VIEWS' | translate:lang }} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of browserTableStats\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.name}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"rec.views_share >= 0.01\\\">{{rec.views_share | number:'1.1-2':lang}} %</td>\\n\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"rec.views_share < 0.01\\\">&lt; 0.01 %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<div class=\\\"p-20\\\" style=\\\"text-align:center;font-size:16px;\\\" *ngIf=\\\"browserTableStats.length == 0\\\">\\n\\t\\t\\t\\t\\t<span>{{ 'ANALYTICS_TECHNOLOGY.MESSAGE.NO_DATA' | translate:lang }}</span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\n\\t<div class=\\\"col-md-6\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_TECHNOLOGY.OS' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row m-b-10\\\" *ngIf=\\\"!loadingData\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"col-md-12\\\">\\n\\t\\t\\t\\t\\t\\t<chart #chartElement\\n\\t\\t\\t\\t\\t\\t\\t[chartData]=\\\"topOsChartData\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartLabels]=\\\"topOsChartLabels\\\"\\n\\t\\t\\t\\t\\t\\t\\t[chartType]=\\\"chartType\\\"\\n\\t\\t\\t\\t\\t\\t\\t[startDate]=\\\"startDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[endDate]=\\\"endDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t[granularity]=\\\"activeGranularity\\\">\\n\\t\\t\\t\\t\\t\\t</chart>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div *ngIf=\\\"loadingData\\\" class=\\\"chart-loader\\\">\\n\\t\\t\\t\\t\\t<span class=\\\"spinner-small\\\"></span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered\\\" *ngIf=\\\"osTableStats.length > 0\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr style=\\\"font-weight: bolder;\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.OS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.VIEWS' | translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_TECHNOLOGY.TABLE.VIEWS' | translate:lang }} %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<tr *ngFor=\\\"let rec of osTableStats\\\">\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.name}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"rec.views_share >= 0.01\\\">{{rec.views_share | number:'1.1-2':lang}} %</td>\\n\\t\\t\\t\\t\\t\\t\\t<td *ngIf=\\\"rec.views_share < 0.01\\\">&lt; 0.01 %</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<div class=\\\"p-20\\\" style=\\\"text-align:center;font-size:16px;\\\" *ngIf=\\\"osTableStats.length == 0\\\">\\n\\t\\t\\t\\t\\t<span>{{ 'ANALYTICS_TECHNOLOGY.MESSAGE.NO_DATA' | translate:lang }}</span>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/technology/technology.view.component.html\n// module id = 1386\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_REALTIME.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_REALTIME.AUDIENCE' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body row\\\">\\n                <div class=\\\"col-md-2 text-center\\\">\\n                    <div style=\\\"font-size:2rem;padding: 20px 0 5px;\\\">Right now</div>\\n                    <div style=\\\"font-size:5rem;padding: 5px 0 5px;font-weight: bold;\\\">{{audienceWatchingUsersNum}}</div>\\n                    <div style=\\\"font-size:1.5rem;padding: 5px 0 5px;\\\">watching users</div>\\n                </div>\\n                <div class=\\\"col-md-5\\\">\\n                    <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_MIN' | translate:lang }}</div>\\n                    <chart-realtime\\n                        [chartData]=\\\"audienceMinutesChart.data\\\"\\n                        [chartLabels]=\\\"audienceMinutesChart.labels\\\"\\n                        [chartHeight]=\\\"'200px'\\\"\\n                    ></chart-realtime>\\n                </div>\\n                <div class=\\\"col-md-5\\\">\\n                    <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_SEC' | translate:lang }}</div>\\n                    <chart-realtime\\n                        [chartData]=\\\"audienceSecondsChart.data\\\"\\n                        [chartLabels]=\\\"audienceSecondsChart.labels\\\"\\n                        [chartHeight]=\\\"'200px'\\\"\\n                    ></chart-realtime>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_REALTIME.TOP_CONTENT' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                 <div class=\\\"col-md-12\\\" *ngIf=\\\"(topMediaList != null) && (topMediaList.length > 0)\\\">\\n                     <table id=\\\"top-content-list\\\" [ngClass]=\\\"{'table table-striped table-bordered table-selectable': true, 'loading':topMediaListLoading}\\\">\\n                         <thead>\\n                             <tr>\\n                                 <th>\\n                                     {{ 'ANALYTICS_REALTIME.WORD.POSITION' | translate:lang }}\\n                                 </th>\\n                                 <th>\\n                                     Id\\n                                 </th>\\n                                 <th>\\n                                     {{ 'ANALYTICS_REALTIME.WORD.TITLE' | translate:lang }}\\n                                 </th>\\n                                 <th>\\n                                     {{ 'ANALYTICS_REALTIME.WORD.STREAMS' | translate:lang }}<br/>\\n                                     <small>({{ 'ANALYTICS_REALTIME.WORD.STREAMS_APROX_NOTE' | translate:lang }})</small>\\n                                 </th>\\n                             </tr>\\n                         </thead>\\n                         <tbody>\\n                             <tr *ngFor=\\\"let mm of topMediaList\\\" (click)=\\\"selectMediaMetadata(mm.media.material_id)\\\" [class.selected]=\\\"isMediaMetadataSelected(mm.media.material_id)\\\">\\n                                 <td>{{mm.position}}</td>\\n                                 <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'content', mm.media.material_id]\\\">{{mm.media.material_id}}</a></td>\\n                                 <td>{{mm.media.title}}</td>\\n                                 <td>{{mm.streams}}</td>\\n                             </tr>\\n                         </tbody>\\n                     </table>\\n                     <pager [page]=\\\"topMediaListPagingOptions.page\\\" [pageSize]=\\\"topMediaListPagingOptions.page_size\\\" [totalItems]=\\\"topMediaListTotalLength\\\" (pageChanged)=\\\"onTopMediaListPageChange($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                 </div>\\n                 <div *ngIf=\\\"topMediaList == null\\\" class=\\\"media-list-loader\\\">\\n                    <span class=\\\"spinner-small\\\"></span>\\n                </div>\\n                 <div *ngIf=\\\"(topMediaList != null) && (topMediaList.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n                     {{ 'ANALYTICS_TOPCONTENT.NO_DATA' | translate:lang }}\\n                 </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\" *ngIf=\\\"selectedMediaMetadata\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Selected content</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt>ID:</dt> <dd>{{selectedMediaMetadata.material_id}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT_DETAILS.WORD.RELATED_ID' | translate:lang }}:</dt> <dd>{{selectedMediaMetadata.related_id}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT.WORD.TITLE' | translate:lang }}:</dt> <dd>{{selectedMediaMetadata.title}}</dd>\\n                           <dt>{{ 'ANALYTICS_CONTENT.WORD.DURATION' | translate:lang }}:</dt> <dd>{{selectedMediaMetadata.duration | number:'1.0-3'}} [s] ({{dateUtil.formatDuration(selectedMediaMetadata.duration)}})</dd>\\n                       </dl>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                   <div class=\\\"col-lg-6\\\">\\n                       <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_MIN' | translate:lang }}</div>\\n                       <chart-realtime\\n                           [chartData]=\\\"selectedMediaMinutesChart.data\\\"\\n                           [chartLabels]=\\\"selectedMediaMinutesChart.labels\\\"\\n                           [chartHeight]=\\\"'200px'\\\"\\n                       ></chart-realtime>\\n                   </div>\\n                   <div class=\\\"col-lg-6\\\">\\n                       <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_SEC' | translate:lang }}</div>\\n                       <chart-realtime\\n                           [chartData]=\\\"selectedMediaSecondsChart.data\\\"\\n                           [chartLabels]=\\\"selectedMediaSecondsChart.labels\\\"\\n                           [chartHeight]=\\\"'200px'\\\"\\n                       ></chart-realtime>\\n                   </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/realtime/realtime.view.component.html\n// module id = 1387\n// module chunks = 1","module.exports = \"<style type=\\\"text/css\\\">\\nspan.square {\\n          display: inline-block;\\n          height: 200px;\\n          width: 20%;\\n          border: 1px solid black;\\n          margin-right: 2%;\\n          margin-left: 2%;\\n          padding: 0;\\n          color: #000000;\\n          vertical-align: bottom;\\n        }\\n</style>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">{{ 'QOS.TITLE' | translate:lang }}</h4></div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n                    <div class=\\\"row m-b-10\\\">\\n                            <div class=\\\"pull-left m-l-10\\\">\\n                                <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\" (click)=\\\"chartDataExportCsv()\\\">\\n                                    <i class=\\\"fa fa-download\\\"></i> CSV\\n                                </button>\\n                            </div>\\n                            <div class=\\\"pull-right m-r-10\\\">\\n                                <chart-granularity #granularity size=\\\"sm\\\" \\n                                    [types]=\\\"chartService.granularityTypes\\\" \\n                                    [activeType]=\\\"chartService.activeGranularity\\\">\\n                                </chart-granularity>\\n\\n                                <date-range-picker class=\\\"m-l-10 pull-right\\\"\\n                                    showIcon=\\\"right\\\"\\n                                    [enable]=\\\"true\\\"\\n                                    [options]=\\\"{startDate:chartService.startDate, endDate:chartService.endDate}\\\">\\n                                </date-range-picker>\\n                            </div>\\n                        </div>\\n\\n                <horizontal-stacked-chart style=\\\"margin-right: 20px\\\"\\n                        [dataset] = \\\"stackedData\\\"\\n                >\\n                \\n                </horizontal-stacked-chart>\\n                \\n            </div>\\n\\n            <div class=\\\"panel-body\\\" *ngIf=\\\"previewHistoryStats\\\">\\n                <span *ngFor=\\\"let chart of charts\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                            <h4>{{chart.topic}}</h4>\\n                            <chart\\n                                [chartData]=\\\"previewHistoryStats.data\\\"\\n                                [chartLabels]=\\\"previewHistoryStats.labels\\\"\\n                                [chartType]=\\\"previewHistoryStats.chartType\\\"\\n                                [startDate]=\\\"previewHistoryStats.startDate\\\"\\n                                [endDate]=\\\"previewHistoryStats.endDate\\\"\\n                                [granularity]=\\\"previewHistoryStats.granularity\\\">\\n                            </chart>\\n                    </div>\\n                </span>\\n                <!--<span>\\n                    <div class=\\\"col-md-3\\\">\\n                        <h4>Quality</h4>\\n                        <chart\\n                        [chartData]=\\\"chartService.chartData\\\" \\n                        [chartLabels]=\\\"chartService.chartLabels\\\" \\n                        [chartType]=\\\"previewHistoryStats.chartType\\\" \\n                        [startDate]=\\\"previewHistoryStats.startDate\\\" \\n                        [endDate]=\\\"previewHistoryStats.endDate\\\" \\n                        [granularity]=\\\"previewHistoryStats.activeGranularity\\\"    \\n                        >\\n                        </chart>\\n                    </div>\\n                </span>-->\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/QOS/QOS.view.component.html\n// module id = 1388\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">Analytics - Playback Experience</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Users playbacks</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">Filter</span>\\n                        <input type=\\\"text\\\" (keypress)=\\\"onSearchKeyPress($event)\\\" [(ngModel)]=\\\"searchOptions.text\\\" class=\\\"form-control\\\"\\n                         placeholder=\\\"Filter\\\" style=\\\"width: 300px; display:inline-block;vertical-align: top;\\\">\\n                        <span style=\\\"margin-left:20px\\\"><strong>Matching samples:</strong> {{searchOptions.total}}</span>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(playbacks != null) && (playbacks.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th colspan=\\\"5\\\">Playback</th>\\n                                    <th colspan=\\\"4\\\">Media</th>\\n                                    <th colspan=\\\"5\\\">Environment</th>\\n                                </tr>\\n                                <tr>\\n                                    <th (click)=\\\"onColumnHeaderClick('playback_id')\\\">\\n                                        Playback ID\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'playback_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'playback_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('user_id')\\\">\\n                                        User ID\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'user_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'user_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('start_time')\\\">\\n                                        Start time\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'start_time') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'start_time') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('duration')\\\">\\n                                        Duration\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'duration') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'duration') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('playback_coverage')\\\" title=\\\"Playback coverage\\\">\\n                                        Coverage [%]\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'playback_coverage') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'playback_coverage') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_type')\\\">\\n                                        Type\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_id')\\\">\\n                                        Media ID\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_title')\\\">\\n                                        Title\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_title') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_title') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_duration')\\\">\\n                                        Duration\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_duration') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_duration') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_type')\\\">\\n                                        Type\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_browser')\\\">\\n                                        Browser\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_browser') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_browser') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_os')\\\">\\n                                        OS\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_os') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_os') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('isp')\\\">\\n                                        ISP\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'isp') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'isp') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('cdn')\\\">\\n                                        CDN\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'cdn') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'cdn') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of playbacks\\\">\\n                                    <td><a class=\\\"analytics-content-details-link\\\" [routerLink]=\\\"['/admin', 'analytics', 'playback-experience', 'playback']\\\">\\n                                        <span class=\\\"uuid\\\" [title]=\\\"mm.playback_id\\\">{{mm.playback_id}}</span></a>\\n                                    </td>\\n                                    <td><span class=\\\"uuid\\\" [title]=\\\"mm.user_id\\\">{{mm.user_id}}</span></td>\\n                                    <td>{{dateUtil.unixToDateString(mm.start_time)}}</td>\\n                                    <td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n                                    <td>{{mm.playback_coverage}}</td>\\n                                    <td>{{mm.media_type}}</td>\\n                                    <td>{{mm.media_id}}</td>\\n                                    <td>{{mm.media_title}}</td>\\n                                    <td>{{dateUtil.formatDuration(mm.media_duration)}}</td>\\n                                    <td>{{mm.device_type}}</td>\\n                                    <td>{{mm.device_browser}}</td>\\n                                    <td>{{mm.device_os}}</td>\\n                                    <td>{{mm.isp}}</td>\\n                                    <td>{{mm.cdn}}</td>\\n                                </tr>\\n                            </tbody>\\n                            <tfoot>\\n                                <tr>\\n                                    <td><strong>Average:</strong></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td>{{dateUtil.formatDuration(columnsAverage.duration)}}</td>\\n                                    <td>{{columnsAverage.playback_coverage}}</td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td>{{dateUtil.formatDuration(columnsAverage.media_duration)}}</td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                    <td></td>\\n                                </tr>\\n                            </tfoot>\\n                        </table>\\n                        <pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"searchOptions.total\\\"\\n                         (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                    <div *ngIf=\\\"playbacks == null\\\" class=\\\"media-list-loader\\\">\\n                        <span class=\\\"spinner-small\\\"></span>\\n                    </div>\\n                    <div *ngIf=\\\"(playbacks != null) && (playbacks.length == 0)\\\" style=\\\"text-align:center;padding:60px;\\\">\\n                        {{ 'ANALYTICS_CONTENT.NO_DATA' | translate:lang }}\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/playback-experience/playback-experience.list.view.component.html\n// module id = 1389\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">Analytics - Playback Experience - Playback</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-md-6\\\" >\\n              <div class=\\\"widget widget-stats bg-blue\\\">\\n                  <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n                  <div class=\\\"stats-title\\\">Watch time</div>\\n                  <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">35m 12s</div>\\n              </div>\\n          </div>\\n          <div class=\\\"col-md-6\\\" >\\n              <div class=\\\"widget widget-stats bg-black\\\">\\n                  <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-bar-chart fa-fw\\\"></i></div>\\n                  <div class=\\\"stats-title\\\">Avg bitrate</div>\\n                  <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">2.2 Mb/s</div>\\n              </div>\\n          </div>\\n          <div class=\\\"col-md-6\\\" >\\n              <div class=\\\"widget widget-stats bg-yellow\\\">\\n                  <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                  <div class=\\\"stats-title\\\">Total buffering time</div>\\n                  <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n                      11s\\n                      <small style=\\\"font-size: 0.6em;\\\">[0.5%]</small>\\n                  </div>\\n              </div>\\n          </div>\\n          <div class=\\\"col-md-6\\\" >\\n              <div class=\\\"widget widget-stats bg-blue\\\">\\n                  <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                  <div class=\\\"stats-title\\\">Startup time</div>\\n                  <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">\\n                      3.6 [s]\\n                  </div>\\n              </div>\\n          </div>\\n      </div>\\n\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\" >\\n           <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4  class=\\\"panel-title\\\">Content &amp; Playback metadata</h4></div>\\n                <div  class=\\\"panel-body\\\">\\n                <div  class=\\\"row m-b-10\\\">\\n                    <div  class=\\\"col-md-12\\\">\\n                        <dl  class=\\\"dl-horizontal\\\">\\n                           <dt >Media ID:</dt> <dd >6725239</dd>\\n                           <dt >Type:</dt> <dd >VOD</dd>\\n                           <dt >Title:</dt> <dd >Yellowstone S01/E04</dd>\\n                           <dt >Duration:</dt> <dd >2,464 [s] (41m 4s)</dd>\\n                           <dt >Related content ID:</dt> <dd ></dd>\\n                           <dt >Added into system:</dt> <dd >11/17/2021 1:55:32 PM</dd>\\n                           <dt >Tags:</dt>\\n                           <dd >\\n                                cowboy hat, equestrian, ranch, ranch owner, cattle ranch, father son relationship, father daughter relationship, financier, parent child relationship, land owner, widower, native american tribe\\n                           </dd>\\n                           <dt class=\\\"m-t-15\\\">Playback ID:</dt> <dd class=\\\"m-t-15\\\">a9801178-2364-4e83-03ac-1b731c670503</dd>\\n                           <dt >Playback coverage:</dt> <dd >85% <small class=\\\"m-l-15\\\">2,112 [s] (35m 12s)</small></dd>\\n                           <dt >Playback start date:</dt> <dd >2022-02-02 17:34:11</dd>\\n                       </dl>\\n                    </div>\\n                </div>\\n            </div>\\n            </div>\\n         </div>\\n         </div>\\n\\n         <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\" >\\n            <div class=\\\"panel panel-inverse\\\">\\n               <div class=\\\"panel-heading\\\"><h4  class=\\\"panel-title\\\">Bitrate histogram</h4></div>\\n                   <div class=\\\"panel-body\\\">\\n                   <div class=\\\"row m-b-10\\\">\\n                       <div class=\\\"col-md-12 bitrate-histogram\\\">\\n                            <chart [chartHeight]=\\\"'200px'\\\" [chartData]=\\\"bitrateHistogramData\\\" [chartLabels]=\\\"bitrateHistogramLabels\\\" [chartType]=\\\"'bar'\\\">\\n                              </chart>\\n                       </div>\\n                   </div>\\n               </div>\\n            </div>\\n            </div>\\n         </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\"><h4 class=\\\"panel-title\\\">Playback history [a9801178-2364-4e83-03ac-1b731c670503]</h4></div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"playback-history\\\">\\n                    <div class=\\\"header\\\">\\n                        <div class=\\\"item\\\">\\n                           <span class=\\\"activity\\\">Activity</span>\\n                           <span class=\\\"vt\\\">Pleayhead position</span>\\n                           <span class=\\\"wt\\\">Wall clock time</span>\\n                           <span class=\\\"d\\\">Duration [sec]</span>\\n                           <span class=\\\"kbps\\\">Avg. bitrate [kbps]</span>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"items\\\">\\n                       <div *ngFor=\\\"let item of playbackHistory\\\" class=\\\"item\\\" [style.height]=\\\"item.d+'px'\\\" style=\\\"min-height:30px;\\\" [ngClass]=\\\"item.class\\\">\\n                           <span class=\\\"activity\\\"><i class=\\\"fa\\\" [ngClass]=\\\"item.icon\\\"></i>  {{item.type}}</span>\\n                           <span class=\\\"vt\\\">{{item.vt}}</span>\\n                           <span class=\\\"wt\\\">{{item.wt}}</span>\\n                           <span class=\\\"d\\\">{{item.d}}</span>\\n                           <span class=\\\"kbps\\\">{{item.avgkbps}}</span>\\n                       </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/playback-experience/playback-experience.details.view.component.html\n// module id = 1390\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">Analytics - Errors &amp; Failures</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Filters</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div class=\\\"col-md-4\\\">\\n                        <date-range-picker\\n                            showIcon=\\\"right\\\"\\n                            [enable]=\\\"true\\\"\\n                            [options]=\\\"{startDate:searchOptions.startDate, endDate:searchOptions.endDate}\\\">\\n                        </date-range-picker>\\n                    </div>\\n                    <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">OS</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownOs\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <button class=\\\"btn btn-primary\\\">Add filter</button>\\n                      </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">History</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <chart [chartHeight]=\\\"'200px'\\\"\\n                    [chartData]=\\\"errorsHistoryData\\\"\\n                    [chartLabels]=\\\"errorsHistoryLabels\\\"\\n                    [startDate]=\\\"searchOptions.startDate\\\"\\n                    [endDate]=\\\"searchOptions.endDate\\\"\\n                    [chartType]=\\\"'lineTime'\\\"\\n                    [granularity]=\\\"'hour'\\\"></chart>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-6\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Grouped by <dropdown class=\\\"m-l-10\\\" [model]=\\\"groupedByDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <chart [chartHeight]=\\\"'200px'\\\"\\n                    [chartData]=\\\"errorsGroupedData\\\"\\n                    [chartLabels]=\\\"errorsGroupedLabels\\\"\\n                    [chartType]=\\\"'doughnut'\\\"></chart>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Errors list</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(errors != null) && (errors.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th (click)=\\\"onColumnHeaderClick('user_id')\\\">\\n                                        User ID\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'user_id') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'user_id') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('time')\\\">\\n                                        Time\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'time') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'time') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_type')\\\">\\n                                        Media Type\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_id_title')\\\">\\n                                        Media\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id_title') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id_title') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_type')\\\">\\n                                        Device\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_browser')\\\">\\n                                        Browser\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_browser') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_browser') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('device_os')\\\">\\n                                        OS\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_os') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'device_os') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('isp')\\\">\\n                                        ISP\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'isp') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'isp') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('cdn')\\\">\\n                                        CDN\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'cdn') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'cdn') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of errors\\\" (click)=\\\"onErrorItemClick(mm)\\\" [class.selected]=\\\"isErrorSelected(mm)\\\">\\n                                    <td><span class=\\\"uuid\\\" [title]=\\\"mm.user_id\\\">{{mm.user_id}}</span></td>\\n                                    <td>{{dateUtil.unixToDateString(mm.time)}}</td>\\n                                    <td>{{mm.media_type}}</td>\\n                                    <td>{{mm.media_id_title}}</td>\\n                                    <td>{{mm.device_type}}</td>\\n                                    <td>{{mm.device_browser}}</td>\\n                                    <td>{{mm.device_os}}</td>\\n                                    <td>{{mm.isp}}</td>\\n                                    <td>{{mm.cdn}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"searchOptions.total\\\"\\n                         (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Error details</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-bottom:20px;\\\">\\n                    <div *ngIf=\\\"selectedError\\\" class=\\\"col-md-12\\\">\\n                        <dl class=\\\"dl-horizontal\\\">\\n                           <dt >Error ID:</dt> <dd >{{selectedError.error_id}}</dd>\\n                           <dt >User ID:</dt> <dd >{{selectedError.user_id}}</dd>\\n                           <dt >Media:</dt> <dd >{{selectedError.media_id_title}}</dd>\\n                           <dt >Media type:</dt> <dd >{{selectedError.media_type}}</dd>\\n                           <dt >Duration:</dt> <dd >{{dateUtil.formatDuration(selectedError.media_duration)}}</dd>\\n                           <dt >Occurrence date:</dt> <dd >{{dateUtil.unixToDateString(selectedError.time)}} {{dateUtil.unixToTimeString(selectedError.time)}}</dd>\\n                           <dt >Device:</dt> <dd >{{selectedError.device_type}}</dd>\\n                           <dt >Browser:</dt> <dd >{{selectedError.device_browser}}</dd>\\n                           <dt >OS:</dt> <dd >{{selectedError.device_os}}</dd>\\n                           <dt >ISP:</dt> <dd >{{selectedError.isp}}</dd>\\n                           <dt >CDN:</dt> <dd >{{selectedError.cdn}}</dd>\\n                           <dt >Error type:</dt> <dd >Temporary network problem</dd>\\n                           <dt >Error message:</dt> <dd >Details [VideoDashJs]: http://bradmax.com/static/video/tos/440272.mpd is not available (net::ERR_INTERNET_DISCONNECTED)</dd>\\n                           <dt >Stack trace</dt> <dd >\\n                            <textarea style=\\\"width:100%;height:100px;\\\">\\nonDashJsError   @   bradmax_player.js:20288\\n(anonymous) @   bradmax_player.js:57\\ntrigger @   bradmax_player.js:57\\nerror   @   bradmax_player.js:57\\nf   @   bradmax_player.js:57\\nerror (async)\\nload    @   bradmax_player.js:57\\nN   @   bradmax_player.js:57\\n(anonymous) @   bradmax_player.js:57\\nsetTimeout (async)\\n(anonymous) @   bradmax_player.js:57\\nf   @   bradmax_player.js:57\\nerror (async)\\nload    @   bradmax_player.js:57\\nN   @   bradmax_player.js:57\\n(anonymous) @   bradmax_player.js:57\\nsetTimeout (async)\\n(anonymous) @   bradmax_player.js:57\\nf   @   bradmax_player.js:57\\nerror (async)\\nload    @   bradmax_player.js:57\\nN   @   bradmax_player.js:57\\n(anonymous) @   bradmax_player.js:57\\nsetTimeout (async)\\n(anonymous) @   bradmax_player.js:57\\nf   @   bradmax_player.js:57\\nerror (async)\\nload    @   bradmax_player.js:57\\nN   @   bradmax_player.js:57\\nload    @   bradmax_player.js:57\\nload    @   bradmax_player.js:57\\nload    @   bradmax_player.js:57\\nload    @   bradmax_player.js:57\\nae  @   bradmax_player.js:57\\nQ   @   bradmax_player.js:57\\nattachPlayerSourceUrl   @   bradmax_player.js:20819\\nsetWidevineDrmSupportPlayback   @   bradmax_player.js:20898\\ninitSource  @   bradmax_player.js:20703\\nplay    @   bradmax_player.js:20737\\nplayPause   @   bradmax_player.js:20801\\nonPlayPauseEvent    @   bradmax_player.js:18714\\ndispatch    @   bradmax_player.js:2278\\ndispatch    @   bradmax_player.js:1777\\nonBtnClick  @   bradmax_player.js:12333\\nf   @   bradmax_player.js:1968\\n                            </textarea>\\n                       </dd>\\n                       </dl>\\n                    </div>\\n                    <div *ngIf=\\\"!selectedError\\\">\\n                        <div class=\\\"no-item-selected\\\">No item selected</div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/errors/errors.view.component.html\n// module id = 1391\n// module chunks = 1","module.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .nav-link.active {\\n  background-color: #242a30;\\n  color: #fff; }\\n  :host .nav-link.active:hover {\\n  color: #a7a7a7; }\\n  :host .nav-link.add {\\n  color: #111;\\n  font-size: 20px;\\n  line-height: 16px;\\n  padding: 10px 12px; }\\n  :host .nav-link.add span {\\n  position: relative;\\n  top: -2px; }\\n  :host ::ng-deep date-range-picker .input-group {\\n  width: auto !important;\\n  margin-bottom: 10px; }\\n  :host ::ng-deep h4 dropdown-list {\\n  color: #333 !important; }\\n  :host ::ng-deep h4 dropdown {\\n  margin-bottom: -10px;\\n  top: -5px; }\\n  :host ::ng-deep h4 dropdown button.active {\\n  background-color: #efefef !important; }\\n  :host .date-filter-item {\\n  float: left;\\n  margin-right: 20px; }\\n  :host .input-group.input-group-filter {\\n  position: relative;\\n  display: block;\\n  margin-bottom: 10px; }\\n  :host .input-group.input-group-filter .input-group-prepend {\\n  display: inline-block;\\n  border: solid 1px #aaa;\\n  padding: 5px 5px 6px 5px;\\n  border-top-left-radius: 3px;\\n  border-bottom-left-radius: 3px;\\n  background-color: #e2e7eb;\\n  position: absolute;\\n  z-index: 100; }\\n  :host .input-group.input-group-filter .input-group-prepend .input-group-text {\\n  line-height: 16px;\\n  display: inline-block;\\n  vertical-align: bottom;\\n  min-width: 75px;\\n  text-align: center; }\\n  :host .input-group.input-group-filter dropdown {\\n  width: 100%; }\\n  :host .widget.widget-stats.widget-stats-small .progress-sm {\\n  height: 20px;\\n  background: #727cb6 !important;\\n  margin-bottom: 5px;\\n  margin-top: 25px; }\\n  :host .no-item-selected {\\n  text-align: center;\\n  font-size: 1.5rem;\\n  margin-top: 20px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/errors/errors.view.component.scss\n// module id = 1392\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">Analytics - Real Time Marketing</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-4\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Find best matching contents by subject, keywords</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-12\\\">\\n                           <div class=\\\"row m-b-10\\\">\\n                              <div class=\\\"col-md-12\\\">\\n                                 <span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">URL</span>\\n                                 <input class=\\\"form-control\\\" style=\\\"width:80%; display:inline-block;vertical-align: top;\\\" type=\\\"text\\\" placeholder=\\\"Put page URL for loading sample text, keywords, tags\\\">\\n                             </div>\\n                          </div>\\n                          <div class=\\\"row m-b-10\\\">\\n                              <div class=\\\"col-md-12\\\">\\n                                 <textarea class=\\\"form-control\\\" style=\\\"width:100%;height:209px;\\\"placeholder=\\\"Put sample text, post, keywords or tags here for finding matching, related contents.\\\" ></textarea>\\n                             </div>\\n                          </div>\\n                          <div class=\\\"row\\\">\\n                              <div class=\\\"col-md-12\\\">\\n                                 <button class=\\\"btn btn-primary pull-right\\\">Search for content</button>\\n                             </div>\\n                          </div>\\n                      </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-8\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Possible contents for RTM matching to subject</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(contents != null) && (contents.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_id_title')\\\">\\n                                        Media\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id_title') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_id_title') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('time')\\\">\\n                                        Time\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'time') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'time') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_type')\\\">\\n                                        Media Type\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"onColumnHeaderClick('media_type')\\\">\\n                                        Media Tags\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'asc')\\\" class=\\\"fa fa-caret-up\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                        <i *ngIf=\\\"(searchOptions.sort_by == 'media_type') && (searchOptions.sort_dir == 'desc')\\\" class=\\\"fa fa-caret-down\\\"\\n                                         aria-hidden=\\\"true\\\"></i>\\n                                    </th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of contents\\\">\\n                                    <td>{{mm.title}}</td>\\n                                    <td>{{mm.year}}</td>\\n                                    <td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n                                    <td><span class=\\\"content-tags\\\">{{mm.tags}}</span></td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"searchOptions.total\\\"\\n                         (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Campaigns with monitored contents</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\" *ngIf=\\\"(contents != null) && (contents.length > 0)\\\">\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th>Name</th>\\n                                    <th>Started at</th>\\n                                    <th>Linked contents</th>\\n                                    <th>Stats</th>\\n                                    <th>History</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let c of campaigns\\\">\\n                                    <td>{{c.name}}</td>\\n                                    <td>{{dateUtil.unixToDateString(c.time)}}</td>\\n                                    <td>\\n                                        <div *ngFor=\\\"let mm_title of c.contents\\\">{{mm_title}}</div>\\n                                    </td>\\n                                    <td>\\n                                        Total views: {{c.totalViews}}<br/>\\n                                        Total users: {{c.totalUsers}}\\n                                    </td>\\n                                    <td>\\n                                        <chart [chartHeight]=\\\"'200px'\\\"\\n                                            [chartData]=\\\"c.history.data\\\"\\n                                            [chartLabels]=\\\"c.history.labels\\\"\\n                                            [startDate]=\\\"c.history.startDate\\\"\\n                                            [endDate]=\\\"c.history.endDate\\\"\\n                                            [chartType]=\\\"'lineTime'\\\"\\n                                            [granularity]=\\\"'hour'\\\"></chart>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                     <div class=\\\"col-md-12\\\">\\n                        <button class=\\\"btn btn-primary pull-right\\\">Add campaign +</button>\\n                    </div>\\n                 </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/real-time-marketing/real-time-marketing.view.component.html\n// module id = 1393\n// module chunks = 1","module.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .content-tags {\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  max-width: 400px;\\n  display: inline-block;\\n  line-height: 1rem; }\\n  :host .nav-link.active {\\n  background-color: #242a30;\\n  color: #fff; }\\n  :host .nav-link.active:hover {\\n  color: #a7a7a7; }\\n  :host .nav-link.add {\\n  color: #111;\\n  font-size: 20px;\\n  line-height: 16px;\\n  padding: 10px 12px; }\\n  :host .nav-link.add span {\\n  position: relative;\\n  top: -2px; }\\n  :host ::ng-deep date-range-picker .input-group {\\n  width: auto !important;\\n  margin-bottom: 10px; }\\n  :host ::ng-deep h4 dropdown-list {\\n  color: #333 !important; }\\n  :host ::ng-deep h4 dropdown button.active {\\n  background-color: #efefef !important; }\\n  :host .date-filter-item {\\n  float: left;\\n  margin-right: 20px; }\\n  :host .input-group.input-group-filter {\\n  position: relative;\\n  display: block;\\n  margin-bottom: 10px; }\\n  :host .input-group.input-group-filter .input-group-prepend {\\n  display: inline-block;\\n  border: solid 1px #aaa;\\n  padding: 5px 5px 6px 5px;\\n  border-top-left-radius: 3px;\\n  border-bottom-left-radius: 3px;\\n  background-color: #e2e7eb;\\n  position: absolute;\\n  z-index: 100; }\\n  :host .input-group.input-group-filter .input-group-prepend .input-group-text {\\n  line-height: 16px;\\n  display: inline-block;\\n  vertical-align: bottom;\\n  min-width: 75px;\\n  text-align: center; }\\n  :host .input-group.input-group-filter dropdown {\\n  width: 100%; }\\n  :host .widget.widget-stats.widget-stats-small .progress-sm {\\n  height: 20px;\\n  background: #727cb6 !important;\\n  margin-bottom: 5px;\\n  margin-top: 25px; }\\n  :host .no-item-selected {\\n  text-align: center;\\n  font-size: 1.5rem;\\n  margin-top: 20px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/real-time-marketing/real-time-marketing.view.component.scss\n// module id = 1394\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">Analytics - Content insights</h1>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-4\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Views by media type <dropdown class=\\\"m-l-10\\\" [model]=\\\"timeRangeDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-12\\\">\\n                            <chart [chartHeight]=\\\"'300px'\\\"\\n                             [chartData]=\\\"viewsByMediaTypeData\\\"\\n                             [chartLabels]=\\\"viewsByMediaTypeLabels\\\"\\n                             [chartType]=\\\"'doughnut'\\\"></chart>\\n                      </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-4\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">VOD/Series views by genres <dropdown class=\\\"m-l-10\\\" [model]=\\\"timeRangeDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                            <chart [chartHeight]=\\\"'300px'\\\"\\n                             [chartData]=\\\"vodViewsByGenresData\\\"\\n                             [chartLabels]=\\\"vodViewsByGenresLabels\\\"\\n                             [chartType]=\\\"'doughnut'\\\"></chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"col-md-4\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">TV/Catchups views by genres <dropdown class=\\\"m-l-10\\\" [model]=\\\"timeRangeDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown></h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                            <chart [chartHeight]=\\\"'300px'\\\"\\n                             [chartData]=\\\"tvViewsByGenresData\\\"\\n                             [chartLabels]=\\\"tvViewsByGenresLabels\\\"\\n                             [chartType]=\\\"'doughnut'\\\"></chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Search for new content and estimate audience</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-md-12\\\">\\n                                 <span style=\\\"color:#242a30;font-size:16px;margin-right:10px;display:inline-block;line-height:34px;\\\">Search in IMDB</span>\\n                                 <input class=\\\"form-control\\\" style=\\\"width:80%; display:inline-block;vertical-align: top;\\\" type=\\\"text\\\" placeholder=\\\"Search for video title\\\" value=\\\"Dune (2021)\\\">\\n                             </div>\\n                        </div>\\n                        <div class=\\\"row m-t-15\\\">\\n                            <div class=\\\"col-md-12\\\">\\n                                <h4>Media info</h4>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-md-6\\\">\\n                                 <dl  class=\\\"dl-horizontal\\\">\\n                                    <dt >Type:</dt> <dd >VOD</dd>\\n                                    <dt >Title:</dt> <dd >Dune (2021)</dd>\\n                                    <dt >Duration:</dt> <dd >9,300 [s] (2h 35m)</dd>\\n                                    <dt >Genres:</dt> <dd >Action, Adventure, Drama, Sci-Fi</dd>\\n                                    <dt >Tags:</dt>\\n                                    <dd >\\n                                         prescience, future, empire, sandworm, doctor, mother son relationship, spy, premonition, desert, sand, chosen one, based on novel, adaptation, duke, nobility, desert planet, science fantasy, destiny, giant creature, giant worm, title same as book, mind control\\n                                    </dd>\\n                                </dl>\\n                             </div>\\n                             <div class=\\\"col-md-6\\\" style=\\\"text-align: center;\\\">\\n                                 <img class=\\\"movie-poster\\\" src=\\\"https://m.media-amazon.com/images/M/MV5BN2FjNmEyNWMtYzM0ZS00NjIyLTg5YzYtYThlMGVjNzE1OGViXkEyXkFqcGdeQXVyMTkxNjUyNQ@@._V1_QL75_UX380_CR0,1,380,562_.jpg\\\">\\n                             </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-md-12\\\">\\n                                <h4>Estimated audience</h4>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-md-6\\\">\\n                                 <div class=\\\"widget widget-stats bg-blue\\\">\\n                                    <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n                                    <div class=\\\"stats-title\\\">Users</div>\\n                                    <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">15,600</div>\\n                                </div>\\n                             </div>\\n                             <div class=\\\"col-md-6\\\">\\n                                 <div class=\\\"widget widget-stats bg-black\\\">\\n                                    <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n                                    <div class=\\\"stats-title\\\">Views</div>\\n                                    <div class=\\\"stats-number\\\" style=\\\"padding-top:14px;\\\">18,200</div>\\n                                </div>\\n                             </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <h4>Similar VOD already in system</h4>\\n                        <table class=\\\"table table-striped table-bordered table-selectable\\\" id=\\\"content-list\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th>Media ID</th>\\n                                    <th>Title</th>\\n                                    <th>Added at</th>\\n                                    <th>Duration</th>\\n                                    <th>Views</th>\\n                                    <th>Users</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let mm of contents\\\">\\n                                    <td><a href=\\\"#\\\">{{mm.id}}</a></td>\\n                                    <td>{{mm.title}}</td>\\n                                    <td>{{mm.addedIntoSystem}}</td>\\n                                    <td>{{dateUtil.formatDuration(mm.duration)}}</td>\\n                                    <td>{{mm.views}}</td>\\n                                    <td>{{mm.users}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                        <pager [page]=\\\"searchOptions.page\\\" [pageSize]=\\\"searchOptions.page_size\\\" [totalItems]=\\\"searchOptions.total\\\"\\n                         (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/content-insights/content-insights.view.component.html\n// module id = 1395\n// module chunks = 1","module.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .content-tags {\\n  white-space: nowrap;\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  max-width: 400px;\\n  display: inline-block;\\n  line-height: 1rem; }\\n  :host .nav-link.active {\\n  background-color: #242a30;\\n  color: #fff; }\\n  :host .nav-link.active:hover {\\n  color: #a7a7a7; }\\n  :host .nav-link.add {\\n  color: #111;\\n  font-size: 20px;\\n  line-height: 16px;\\n  padding: 10px 12px; }\\n  :host .nav-link.add span {\\n  position: relative;\\n  top: -2px; }\\n  :host ::ng-deep date-range-picker .input-group {\\n  width: auto !important;\\n  margin-bottom: 10px; }\\n  :host ::ng-deep h4 dropdown {\\n  margin-bottom: -10px;\\n  top: -5px; }\\n  :host ::ng-deep h4 dropdown-list {\\n  color: #333 !important; }\\n  :host ::ng-deep h4 dropdown button.active {\\n  background-color: #efefef !important; }\\n  :host .date-filter-item {\\n  float: left;\\n  margin-right: 20px; }\\n  :host .input-group.input-group-filter {\\n  position: relative;\\n  display: block;\\n  margin-bottom: 10px; }\\n  :host .input-group.input-group-filter .input-group-prepend {\\n  display: inline-block;\\n  border: solid 1px #aaa;\\n  padding: 5px 5px 6px 5px;\\n  border-top-left-radius: 3px;\\n  border-bottom-left-radius: 3px;\\n  background-color: #e2e7eb;\\n  position: absolute;\\n  z-index: 100; }\\n  :host .input-group.input-group-filter .input-group-prepend .input-group-text {\\n  line-height: 16px;\\n  display: inline-block;\\n  vertical-align: bottom;\\n  min-width: 75px;\\n  text-align: center; }\\n  :host .input-group.input-group-filter dropdown {\\n  width: 100%; }\\n  :host .widget.widget-stats.widget-stats-small .progress-sm {\\n  height: 20px;\\n  background: #727cb6 !important;\\n  margin-bottom: 5px;\\n  margin-top: 25px; }\\n  :host .no-item-selected {\\n  text-align: center;\\n  font-size: 1.5rem;\\n  margin-top: 20px; }\\n  :host .movie-poster {\\n  width: 50%;\\n  margin-left: auto;\\n  margin-right: auto;\\n  border: solid 1px #a7a7a7; }\\n  @media (min-width: 768px) {\\n  :host .dl-horizontal dt {\\n    width: 100px;\\n    padding-right: 10px; }\\n  :host .dl-horizontal dd {\\n    margin-left: 100px; } }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/content-insights/content-insights.view.component.scss\n// module id = 1396\n// module chunks = 1","module.exports = \"<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n    <ul class=\\\"nav nav-pills mb-2\\\">\\n         <li class=\\\"nav-item\\\">\\n             <a href=\\\"#nav-pills-tab-1\\\" data-toggle=\\\"tab\\\" class=\\\"nav-link active\\\">\\n                 <span class=\\\"d-sm-block d-none\\\">Report 1</span>\\n             </a>\\n         </li>\\n         <li class=\\\"nav-item\\\">\\n             <a href=\\\"#nav-pills-tab-2\\\" data-toggle=\\\"tab\\\" class=\\\"nav-link\\\">\\n                 <span class=\\\"d-sm-block d-none\\\">Report 2</span>\\n             </a>\\n         </li>\\n         <li class=\\\"nav-item\\\">\\n             <a href=\\\"#nav-pills-tab-3\\\" data-toggle=\\\"tab\\\" class=\\\"nav-link\\\">\\n                 <span class=\\\"d-sm-block d-none\\\">Report 3</span>\\n             </a>\\n         </li>\\n         <li class=\\\"nav-item\\\">\\n             <a href=\\\"#nav-pills-tab-4\\\" data-toggle=\\\"tab\\\" class=\\\"nav-link add\\\">\\n                 <span class=\\\"d-sm-block d-none\\\">+</span>\\n             </a>\\n         </li>\\n         <li class=\\\"nav-item pull-right\\\">\\n             <a href=\\\"javascript:;\\\" [routerLink]=\\\"['/admin', 'analytics', 'flexmodel', 'setup']\\\" class=\\\"nav-link btn btn-default\\\">\\n                 Setup\\n             </a>\\n         </li>\\n     </ul>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Analytics - Flex Model - Filters</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(1)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[1], 'fa-plus':!isPanelOpen[1]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[1]\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Datetime</h4>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-12\\\">\\n\\n                          <chart-granularity #granularity size=\\\"sm\\\"\\n                              class=\\\"date-filter-item\\\"\\n                              [types]=\\\"chartService.granularityTypes\\\"\\n                              [activeType]=\\\"chartService.activeGranularity\\\"\\n                              (onTypeChange)=\\\"chartService.onGranularityChange($event)\\\">\\n                          </chart-granularity>\\n\\n                          <dropdown  [model]=\\\"filterDropdownTimeScope\\\" [style.visibility]=\\\"true\\\" style=\\\"float:left;margin-right:10px;\\\"></dropdown>\\n\\n                          <date-range-picker\\n                              class=\\\"date-filter-item\\\"\\n                              showIcon=\\\"right\\\"\\n                              [enable]=\\\"true\\\"\\n                              [options]=\\\"{startDate:chartService.startDate, endDate:chartService.endDate}\\\"\\n                              (selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n                          </date-range-picker>\\n\\n                          <div style=\\\"clear:both;\\\"></div>\\n                      </div>\\n                  </div>\\n\\n                  <div class=\\\"row m-t-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Client</h4>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">OS</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownOs\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Browser</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownBrowser\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Device</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownDevice\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Tags</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownTags\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">App version</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownAppVersion\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Player</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownPlayer\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                  </div>\\n\\n                  <div class=\\\"row m-t-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Network</h4>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-6\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">ISP</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownIsp\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-6\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">CDN</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownCdn\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                  </div>\\n\\n                  <div class=\\\"row m-t-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Geolocation</h4>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Country</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownGeoCountry\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Region</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownGeoRegion\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">City</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownGeoCity\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                  </div>\\n\\n                  <div class=\\\"row m-t-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block;\\\">Demography</h4>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"row\\\">\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Age from</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownDemographyAgeFrom\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Age to</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownDemographyAgeTo\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                      <div class=\\\"col-md-4\\\">\\n                            <div class=\\\"input-group input-group-filter\\\">\\n                                <div class=\\\"input-group-prepend\\\">\\n                                    <span class=\\\"input-group-text\\\">Sex</span>\\n                                </div>\\n                                <dropdown  [model]=\\\"filterDropdownDemographySex\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                            </div>\\n                      </div>\\n                  </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Totals</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(2)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[2], 'fa-plus':!isPanelOpen[2]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[2]\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-yellow\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-play-circle fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Views</div>\\n                           <div class=\\\"stats-number\\\">116,904</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-yellow\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Users</div>\\n                           <div class=\\\"stats-number\\\">29,843</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-yellow\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Avg watch time</div>\\n                           <div class=\\\"stats-number\\\">12m 43s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-yellow\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Views/User</div>\\n                           <div class=\\\"stats-number\\\">3.92</div>\\n                       </div>\\n                    </div>\\n                 </div>\\n                 <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-blue\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Stream start time</div>\\n                           <div class=\\\"stats-number\\\">1.42s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-blue\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Player start time</div>\\n                           <div class=\\\"stats-number\\\">0.72s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-blue\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Rebuffer duration</div>\\n                           <div class=\\\"stats-number\\\">2.48s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-blue\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-bar-chart fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Rebuffer percentage</div>\\n                           <div class=\\\"stats-number\\\">3.71%</div>\\n                       </div>\\n                    </div>\\n                 </div>\\n                 <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-black\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-video-camera fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">FPS rendered / encoded</div>\\n                           <div class=\\\"stats-number\\\">30/30</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-black\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-wifi fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Avg bitrate</div>\\n                           <div class=\\\"stats-number\\\">8502 kbp</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-black\\\">\\n                           <div class=\\\"stats-title\\\">Bitrate distribution</div>\\n                           <div class=\\\"progress progress-sm\\\">\\n                                <div class=\\\"progress-bar progress-bar-striped bg-yellow p-t-5 f-s-10\\\" style=\\\"width: 45%;\\\">Hi: 45%</div>\\n                                <div class=\\\"progress-bar progress-bar-striped bg-blue p-t-5 f-s-10\\\" style=\\\"width: 28%;\\\">Med: 28%</div>\\n                                <div class=\\\"progress-bar progress-bar-striped bg-black text-yellow p-t-5 f-s-10\\\" style=\\\"width: 27%;\\\">Low: 27%</div>\\n                           </div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Quit time</div>\\n                           <div class=\\\"stats-number\\\">8.15s</div>\\n                       </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-times-circle fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Quit ratio</div>\\n                           <div class=\\\"stats-number\\\">2.09%</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Ad quit time</div>\\n                           <div class=\\\"stats-number\\\">1.53s</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-bar-chart fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Ad quit ratio</div>\\n                           <div class=\\\"stats-number\\\">16.57%</div>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                        <div class=\\\"widget widget-stats widget-stats-small bg-red-darker\\\">\\n                           <div class=\\\"stats-icon stats-icon-lg\\\"><i class=\\\"fa fa-bar-chart fa-fw\\\"></i></div>\\n                           <div class=\\\"stats-title\\\">Error ratio</div>\\n                           <div class=\\\"stats-number\\\">0.002%</div>\\n                       </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Time series</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(3)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[3], 'fa-plus':!isPanelOpen[3]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[3]\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                           <i class=\\\"fa fa-times\\\"></i> Remove\\n                        </button>\\n                    </div>\\n                </div>\\n                <chart [chartData]=\\\"timeSeries.data\\\" [chartLabels]=\\\"timeSeries.labels\\\" [chartType]=\\\"timeSeries.chartType\\\"\\n                   [startDate]=\\\"timeSeries.startDate\\\" [endDate]=\\\"timeSeries.endDate\\\" [granularity]=\\\"timeSeries.granularity\\\">\\n                </chart>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Metrics</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"metricsDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-1\\\">\\n                        <button class=\\\"btn btn-primary\\\">Add chart</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Table</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(4)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[4], 'fa-plus':!isPanelOpen[4]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[4]\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                           <i class=\\\"fa fa-times\\\"></i> Remove\\n                        </button>\\n                    </div>\\n                </div>\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h5 style=\\\"font-size: 16px;text-align: center;\\\">Stream start time [sec]<small style=\\\"font-size:80%\\\">(CDN vs ISP)</small></h5>\\n                    </div>\\n                </div>\\n                <table class=\\\"table table-striped table-bordered\\\">\\n                            <thead>\\n                                <tr>\\n                                    <th width=\\\"100\\\">CDN \\\\ ISP</th>\\n                                    <th *ngFor=\\\"let colName of tableCols\\\">{{colName}}</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let rowName of tableRows; let rowIdx = index\\\">\\n                                    <td>{{rowName}}</td>\\n                                    <td *ngFor=\\\"let val of tableData[rowIdx]\\\">{{val | number:'1.3-3'}}</td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-3\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Row</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"tableDimDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-3\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Col</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"tableDimDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Metrics</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"tableMetricsDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-1\\\">\\n                        <button class=\\\"btn btn-primary\\\">Add table</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Bar chart</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(5)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[5], 'fa-plus':!isPanelOpen[5]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[5]\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                           <i class=\\\"fa fa-times\\\"></i> Remove\\n                        </button>\\n                    </div>\\n                </div>\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h5 style=\\\"font-size: 16px;text-align: center;\\\">ISP info</h5>\\n                    </div>\\n                </div>\\n                <chart-categories [chartData]=\\\"categoriesSeries.data\\\" [chartLabels]=\\\"categoriesSeries.labels\\\">\\n                </chart-categories>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Dimension</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"categoriesDimDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Metrics</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"metricsDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-1\\\">\\n                        <button class=\\\"btn btn-primary\\\">Add chart</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Geo</h4>\\n                <div class=\\\"panel-heading-btn\\\">\\n                    <a href=\\\"javascript:;\\\" (click)=\\\"onTogglePanel(6)\\\" class=\\\"btn btn-xs btn-icon btn-circle btn-default\\\">\\n                        <i class=\\\"fa\\\" [ngClass]=\\\"{'fa-minus':isPanelOpen[6], 'fa-plus':!isPanelOpen[6]}\\\"></i>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"panel-body\\\" [hidden]=\\\"!isPanelOpen[6]\\\">\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"pull-left m-l-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                            <i class=\\\"fa fa-download\\\"></i> CSV\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right m-r-10\\\">\\n                        <button class=\\\"btn btn-sm btn-white\\\" type=\\\"button\\\">\\n                           <i class=\\\"fa fa-times\\\"></i> Remove\\n                        </button>\\n                    </div>\\n                </div>\\n                <div class=\\\"row m-b-10\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h5 style=\\\"font-size: 16px;text-align: center;\\\">Stream start time [sec]</h5>\\n                    </div>\\n                </div>\\n\\n                <google-chart [data]=\\\"mapChartData\\\"></google-chart>\\n\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-4\\\">\\n                       <div class=\\\"input-group input-group-filter\\\">\\n                          <div class=\\\"input-group-prepend\\\">\\n                              <span class=\\\"input-group-text\\\">Metrics</span>\\n                          </div>\\n                          <dropdown  [model]=\\\"metricDropdown\\\" [style.visibility]=\\\"true\\\"></dropdown>\\n                       </div>\\n                    </div>\\n                    <div class=\\\"col-md-1\\\">\\n                        <button class=\\\"btn btn-primary\\\">Add chart</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/flexmodel/flexmodel.view.component.html\n// module id = 1397\n// module chunks = 1","module.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .nav-link.active {\\n  background-color: #242a30;\\n  color: #fff; }\\n  :host .nav-link.active:hover {\\n  color: #a7a7a7; }\\n  :host .nav-link.add {\\n  color: #111;\\n  font-size: 20px;\\n  line-height: 16px;\\n  padding: 10px 12px; }\\n  :host .nav-link.add span {\\n  position: relative;\\n  top: -2px; }\\n  :host .date-filter-item {\\n  float: left;\\n  margin-right: 20px; }\\n  :host .input-group.input-group-filter {\\n  position: relative;\\n  display: block;\\n  margin-bottom: 10px; }\\n  :host .input-group.input-group-filter .input-group-prepend {\\n  display: inline-block;\\n  border: solid 1px #aaa;\\n  padding: 5px 5px 6px 5px;\\n  border-top-left-radius: 3px;\\n  border-bottom-left-radius: 3px;\\n  background-color: #e2e7eb;\\n  position: absolute;\\n  z-index: 100; }\\n  :host .input-group.input-group-filter .input-group-prepend .input-group-text {\\n  line-height: 16px;\\n  display: inline-block;\\n  vertical-align: bottom;\\n  min-width: 75px;\\n  text-align: center; }\\n  :host .input-group.input-group-filter dropdown {\\n  width: 100%; }\\n  :host .widget.widget-stats.widget-stats-small .progress-sm {\\n  height: 20px;\\n  background: #727cb6 !important;\\n  margin-bottom: 5px;\\n  margin-top: 25px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/flexmodel/flexmodel.view.component.scss\n// module id = 1398\n// module chunks = 1","var map = {\n\t\"./clickstream.json\": 1400,\n\t\"./gaming.json\": 1401,\n\t\"./qoe.json\": 1402,\n\t\"./telemetry.json\": 1403\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1399;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/flexmodel/data ^\\.\\/.*\\.json$\n// module id = 1399\n// module chunks = 1","module.exports = [{\"type\":\"datapoint\",\"name\":\"SessionHeartbeat\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"},{\"name\":\"lastLoginAt\",\"type\":\"date\"}]},{\"name\":\"device\",\"type\":\"type\",\"typeName\":\"Device\",\"fields\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"os\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"}]},{\"name\":\"sessionSource\",\"type\":\"type\",\"typeName\":\"SessionSource\",\"fields\":[{\"name\":\"pageUrl\",\"type\":\"string\"},{\"name\":\"adCampaignId\",\"type\":\"string\"},{\"name\":\"sourceTags\",\"type\":\"array.string\"}]},{\"name\":\"eventsLog\",\"type\":\"array.type\",\"typeName\":\"Event\",\"fields\":[{\"name\":\"pageUrl\",\"type\":\"string\"},{\"name\":\"pageTags\",\"type\":\"array.string\"},{\"name\":\"pageCategory\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"date\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"basketChanges\",\"type\":\"type\",\"typeName\":\"BasketChange\",\"fields\":[{\"name\":\"changeType\",\"type\":\"string\"},{\"name\":\"productId\",\"type\":\"string\"},{\"name\":\"productTags\",\"type\":\"array.string\"},{\"name\":\"productItems\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"itemPrice\",\"type\":\"float\",\"aggregable\":true}]}]}]}]\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/flexmodel/data/clickstream.json\n// module id = 1400\n// module chunks = 1","module.exports = [{\"type\":\"datapoint\",\"name\":\"GamePlay\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"}]},{\"name\":\"game\",\"type\":\"type\",\"typeName\":\"Game\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tags\",\"type\":\"array.string\"},{\"name\":\"genre\",\"type\":\"type\",\"typeName\":\"GameGenre\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"isForKids\",\"type\":\"bool\"}]}]},{\"name\":\"playTime\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"loadingTime\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"iddleTime\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"totalTime\",\"type\":\"time\",\"aggregable\":true}]},{\"type\":\"datapoint\",\"name\":\"GamePurchase\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"}]},{\"name\":\"game\",\"type\":\"type\",\"typeName\":\"Game\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tags\",\"type\":\"array.string\"},{\"name\":\"genre\",\"type\":\"type\",\"typeName\":\"GameGenre\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"isForKids\",\"type\":\"bool\"}]}]},{\"name\":\"price\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"currency\",\"type\":\"string\"}]}]\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/flexmodel/data/gaming.json\n// module id = 1401\n// module chunks = 1","module.exports = [{\"type\":\"datapoint\",\"name\":\"VideoStartPlay\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"}]},{\"name\":\"startStats\",\"type\":\"type\",\"typeName\":\"StartStats\",\"fields\":[{\"name\":\"streamStartTime\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"playerStartTime\",\"type\":\"time\",\"aggregable\":true}]},{\"name\":\"link\",\"type\":\"type\",\"typeName\":\"Link\",\"fields\":[{\"name\":\"bitrate\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"ISP\",\"type\":\"string\"},{\"name\":\"CDN\",\"type\":\"string\"}]},{\"name\":\"media\",\"type\":\"type\",\"typeName\":\"Media\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"tags\",\"type\":\"array.string\"}]},{\"name\":\"device\",\"type\":\"type\",\"typeName\":\"Device\",\"fields\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"os\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"}]}]},{\"type\":\"datapoint\",\"name\":\"VideoPlaybackHeartbeat\",\"fields\":[{\"name\":\"user\",\"type\":\"type\",\"typeName\":\"User\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"age\",\"type\":\"int\"},{\"name\":\"sex\",\"type\":\"string\"}]},{\"name\":\"link\",\"type\":\"type\",\"typeName\":\"Link\",\"fields\":[{\"name\":\"ISP\",\"type\":\"string\"},{\"name\":\"CDN\",\"type\":\"string\"}]},{\"name\":\"eventLog\",\"type\":\"array.type\",\"typeName\":\"Event\",\"fields\":[{\"name\":\"bitrate\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"date\",\"type\":\"date\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"rebufferDuration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"rebufferNum\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"renderedFps\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"decodedFps\",\"type\":\"float\",\"aggregable\":true}]},{\"name\":\"media\",\"type\":\"type\",\"typeName\":\"Media\",\"fields\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"tags\",\"type\":\"array.string\"}]},{\"name\":\"device\",\"type\":\"type\",\"typeName\":\"Device\",\"fields\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"os\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"}]}]}]\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/flexmodel/data/qoe.json\n// module id = 1402\n// module chunks = 1","module.exports = [{\"type\":\"datapoint\",\"name\":\"NetworkNodeHeartbeat\",\"fields\":[{\"name\":\"nodeId\",\"type\":\"string\"},{\"name\":\"nodeRegion\",\"type\":\"string\"},{\"name\":\"nodeType\",\"type\":\"string\"},{\"name\":\"nodeTags\",\"type\":\"array.string\"},{\"name\":\"nodeMaxBandwidth\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"events\",\"type\":\"array.type\",\"typeName\":\"NetworkEvent\",\"fields\":[{\"name\":\"eventType\",\"type\":\"string\"},{\"name\":\"bitrate\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"date\",\"type\":\"date\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"cpuUsage\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"memoryUsage\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"openConnections\",\"type\":\"int\",\"aggregable\":true}]}]},{\"type\":\"datapoint\",\"name\":\"ServerHeartbeat\",\"fields\":[{\"name\":\"serverId\",\"type\":\"string\"},{\"name\":\"serverRegion\",\"type\":\"string\"},{\"name\":\"serverType\",\"type\":\"string\"},{\"name\":\"serverTags\",\"type\":\"array.string\"},{\"name\":\"serverNetworkNodes\",\"type\":\"array.string\"},{\"name\":\"serverCpuType\",\"type\":\"string\"},{\"name\":\"serverCpuCores\",\"type\":\"int\"},{\"name\":\"serverRam\",\"type\":\"int\"},{\"name\":\"serverNetworkNodes\",\"type\":\"array.string\"},{\"name\":\"events\",\"type\":\"array.type\",\"typeName\":\"ServerEvent\",\"fields\":[{\"name\":\"eventType\",\"type\":\"string\"},{\"name\":\"bitrate\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"date\",\"type\":\"date\"},{\"name\":\"duration\",\"type\":\"time\",\"aggregable\":true},{\"name\":\"cpuUsage\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"memoryUsage\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"openConnections\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"requestsPerSec\",\"type\":\"float\",\"aggregable\":true},{\"name\":\"storageInfo\",\"type\":\"array.type\",\"typeName\":\"StorageInfo\",\"fields\":[{\"name\":\"storageId\",\"type\":\"string\"},{\"name\":\"storageType\",\"type\":\"string\"},{\"name\":\"availSpace\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"freeSpace\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"totalSpace\",\"type\":\"int\",\"aggregable\":true},{\"name\":\"operationsPerSec\",\"type\":\"int\",\"aggregable\":true}]}]}]}]\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/flexmodel/data/telemetry.json\n// module id = 1403\n// module chunks = 1","module.exports = \"<div class=\\\"row\\\">\\n    <div class=\\\"col-md-12\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">Analytics - Flex Model - Model</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                        <h4 style=\\\"display:inline-block\\\">Model</h4>\\n                        <div class=\\\"btn-group m-r-5 m-b-5 pull-right\\\">\\n                            <a href=\\\"javascript:;\\\" class=\\\"btn btn-default\\\"><i class=\\\"fa fa-cog\\\"></i></a>\\n                            <a href=\\\"#\\\" data-toggle=\\\"dropdown\\\" class=\\\"btn btn-default dropdown-toggle\\\" aria-expanded=\\\"false\\\"><b class=\\\"caret\\\"></b></a>\\n                            <div class=\\\"dropdown-menu dropdown-menu-right\\\">\\n                                <input type=\\\"file\\\" id=\\\"flex_model_json_upload\\\" (change)=\\\"handleJsonInput($event.target.files)\\\" accept=\\\".json\\\"/>\\n                                <a (click)=\\\"loadJsonClick($event)\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Load</a>\\n                                <a (click)=\\\"exportToJson($event)\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Export</a>\\n                                <div class=\\\"dropdown-divider\\\"></div>\\n                                <a (click)=\\\"loadPredefinedJson('qoe')\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Video QOE</a>\\n                                <a (click)=\\\"loadPredefinedJson('clickstream')\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Clickstream analytics</a>\\n                                <a (click)=\\\"loadPredefinedJson('telemetry')\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Network/server telemetry</a>\\n                                <a (click)=\\\"loadPredefinedJson('gaming')\\\" href=\\\"javascript:;\\\" class=\\\"dropdown-item\\\">Gaming</a>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-md-8 events-list\\\">\\n                        <h5>Data points</h5>\\n\\n                        <div *ngFor=\\\"let dataPoint of model\\\">\\n                           <div class=\\\"input-group-row\\\">\\n                              <div class=\\\"input-group input-group-field\\\">\\n                                  <div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">Data Point</span></div>\\n                                  <input type=\\\"text\\\" value=\\\"{{dataPoint.name}}\\\"/>\\n                              </div>\\n                              <button class=\\\"btn btn-default btn-sm\\\">Add field</button>\\n                              <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                           </div>\\n                           <ul>\\n                              <li *ngFor=\\\"let dpField of dataPoint.fields\\\">\\n                                  <div class=\\\"input-group-row\\\">\\n                                     <div class=\\\"input-group input-group-field\\\"><div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">field</span></div><input type=\\\"text\\\" value=\\\"{{dpField.name}}\\\"/></div>\\n                                     <dropdown  [model]=\\\"fieldTypeDropdown\\\" [style.visibility]=\\\"true\\\" [value]=\\\"{value:dpField.type}\\\" class=\\\"small\\\"></dropdown>\\n                                     <div *ngIf=\\\"dpField.type=='int' || dpField.type=='float' || dpField.type=='time'\\\" class=\\\"aggr-switch\\\">\\n                                         <span>Aggr</span>\\n                                         <switch size=\\\"small\\\" [checked]=\\\"dpField.aggregable\\\"></switch>\\n                                      </div>\\n                                      <div class=\\\"input-group input-group-field\\\" *ngIf=\\\"(dpField.type=='type' || dpField.type=='array.type')\\\">\\n                                        <input type=\\\"text\\\" class=\\\"input-type-name\\\" value=\\\"{{dpField.typeName}}\\\"/>\\n                                     </div>\\n                                     <button class=\\\"btn btn-default btn-sm\\\" *ngIf=\\\"(dpField.type=='type' || dpField.type=='array.type')\\\">Add field</button>\\n                                     <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                                  </div>\\n                                  <ul *ngIf=\\\"(dpField.type=='type' || dpField.type=='array.type') && dpField.fields\\\">\\n                                      <li *ngFor=\\\"let tField of dpField.fields\\\">\\n                                         <div class=\\\"input-group-row\\\">\\n                                              <div class=\\\"input-group input-group-field\\\"><div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">field</span></div><input type=\\\"text\\\" value=\\\"{{tField.name}}\\\"/></div>\\n                                              <dropdown  [model]=\\\"fieldTypeDropdown\\\" [style.visibility]=\\\"true\\\" [value]=\\\"{value:tField.type}\\\" class=\\\"small\\\"></dropdown>\\n                                              <div *ngIf=\\\"tField.type=='int' || tField.type=='float' || tField.type=='time'\\\" class=\\\"aggr-switch\\\">\\n                                                  <span>Aggr</span>\\n                                                  <switch size=\\\"small\\\" [checked]=\\\"tField.aggregable\\\"></switch>\\n                                               </div>\\n                                               <div class=\\\"input-group input-group-field\\\" *ngIf=\\\"(tField.type=='type' || tField.type=='array.type')\\\">\\n                                                  <input type=\\\"text\\\" class=\\\"input-type-name\\\" value=\\\"{{tField.typeName}}\\\"/>\\n                                               </div>\\n                                               <button class=\\\"btn btn-default btn-sm\\\" *ngIf=\\\"(tField.type=='type' || tField.type=='array.type')\\\">Add field</button>\\n                                               <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                                         </div>\\n                                         <ul *ngIf=\\\"(tField.type=='type' || tField.type=='array.type') && tField.fields\\\">\\n                                               <li *ngFor=\\\"let ttField of tField.fields\\\">\\n                                                  <div class=\\\"input-group-row\\\">\\n                                                       <div class=\\\"input-group input-group-field\\\"><div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">field</span></div><input type=\\\"text\\\" value=\\\"{{ttField.name}}\\\"/></div>\\n                                                       <dropdown  [model]=\\\"fieldTypeDropdown\\\" [style.visibility]=\\\"true\\\" [value]=\\\"{value:ttField.type}\\\" class=\\\"small\\\"></dropdown>\\n                                                       <div *ngIf=\\\"ttField.type=='int' || ttField.type=='float' || ttField.type=='time'\\\" class=\\\"aggr-switch\\\">\\n                                                           <span>Aggr</span>\\n                                                           <switch size=\\\"small\\\" [checked]=\\\"ttField.aggregable\\\"></switch>\\n                                                        </div>\\n                                                        <div class=\\\"input-group input-group-field\\\" *ngIf=\\\"(ttField.type=='type' || ttField.type=='array.type')\\\">\\n                                                           <input type=\\\"text\\\" class=\\\"input-type-name\\\" value=\\\"{{ttField.typeName}}\\\"/>\\n                                                        </div>\\n                                                        <button class=\\\"btn btn-default btn-sm\\\" *ngIf=\\\"(ttField.type=='type' || ttField.type=='array.type')\\\">Add field</button>\\n                                                        <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                                                  </div>\\n                                                  <ul *ngIf=\\\"(ttField.type=='type' || ttField.type=='array.type') && ttField.fields\\\">\\n                                                        <li *ngFor=\\\"let tttField of ttField.fields\\\">\\n                                                           <div class=\\\"input-group-row\\\">\\n                                                                <div class=\\\"input-group input-group-field\\\"><div class=\\\"input-group-prepend\\\"><span class=\\\"input-group-text\\\">field</span></div><input type=\\\"text\\\" value=\\\"{{tttField.name}}\\\"/></div>\\n                                                                <dropdown  [model]=\\\"fieldTypeDropdown\\\" [style.visibility]=\\\"true\\\" [value]=\\\"{value:tttField.type}\\\" class=\\\"small\\\"></dropdown>\\n                                                                <div *ngIf=\\\"tttField.type=='int' || tttField.type=='float' || tttField.type=='time'\\\" class=\\\"aggr-switch\\\">\\n                                                                    <span>Aggr</span>\\n                                                                    <switch size=\\\"small\\\" [checked]=\\\"tttField.aggregable\\\"></switch>\\n                                                                 </div>\\n                                                                 <button class=\\\"btn btn-default btn-sm item-remove\\\"><i class=\\\"fa fa-times\\\"></i></button>\\n                                                           </div>\\n                                                        </li>\\n                                                  </ul>\\n                                               </li>\\n                                          </ul>\\n                                      </li>\\n                                  </ul>\\n                              </li>\\n                           </ul>\\n                        </div>\\n                        <button class=\\\"btn btn-default btn-sm\\\">Add event</button>\\n                    </div>\\n                    <div class=\\\"col-md-4 olap-info\\\">\\n                        <h5>Dimmensions</h5>\\n                        <ul>\\n                            <li *ngFor=\\\"let dim of dimensions\\\">{{dim}}</li>\\n                        </ul>\\n\\n                        <h5>Metrics</h5>\\n                        <ul>\\n                            <li>\\n                                Data points count\\n                                <ul>\\n                                    <li *ngFor=\\\"let name of metricsByType['datapoint']\\\">{{name}}</li>\\n                                </ul>\\n                            </li>\\n                            <li>\\n                                Count / Unique count\\n                                <ul>\\n                                    <li *ngFor=\\\"let name of metricsByType['count']\\\">{{name}}</li>\\n                                </ul>\\n                            </li>\\n                            <li>\\n                                Aggregable (sum, min, max, avg, etc.)\\n                                <ul>\\n                                    <li *ngFor=\\\"let name of metricsByType['aggr']\\\">{{name}}</li>\\n                                </ul>\\n                            </li>\\n                      </ul>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/flexmodel/flexmodelsetup.view.component.html\n// module id = 1404\n// module chunks = 1","module.exports = \":host .panel-heading {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex; }\\n  :host .panel-heading h4 {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .panel-heading .panel-heading-btn {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .panel-body .btn-group.pull-right .dropdown-menu a {\\n  display: block;\\n  font-size: 12px;\\n  line-height: 30px;\\n  padding: 0 10px;\\n  color: #444;\\n  text-decoration: none; }\\n  :host .panel-body .btn-group.pull-right .dropdown-menu a:hover {\\n  background-color: lightgray; }\\n  :host .panel-body .btn-group.pull-right .dropdown-menu .dropdown-divider {\\n  border-bottom: solid 1px lightgray; }\\n  :host .panel-body .btn-group.pull-right .dropdown-menu #flex_model_json_upload {\\n  display: none; }\\n  :host .events-list ul {\\n  list-style-type: none; }\\n  :host .olap-info li {\\n  line-height: 24px;\\n  font-size: 14px; }\\n  :host .olap-info > ul {\\n  overflow-y: scroll;\\n  max-height: 500px;\\n  border: solid 1px lightgray !important;\\n  border-radius: 3px;\\n  margin-bottom: 30px; }\\n  :host .input-group-row .btn, :host .input-group-row dropdown {\\n  vertical-align: top; }\\n  :host .input-group-row dropdown.small button {\\n  min-width: 100px; }\\n  :host .input-group-row .aggr-switch {\\n  display: inline-block;\\n  vertical-align: top;\\n  height: 32px;\\n  padding: 5px 0px 0 10px;\\n  line-height: 24px; }\\n  :host .input-group-row .item-remove {\\n  display: none; }\\n  :host .input-group-row:hover > .item-remove {\\n  display: inline-block; }\\n  :host .input-group-row .input-group.input-group-field {\\n  position: relative;\\n  display: inline-block;\\n  margin-bottom: 10px; }\\n  :host .input-group-row .input-group.input-group-field > input[type=\\\"text\\\"] {\\n    border: 1px solid #ccd0d4;\\n    -webkit-box-shadow: none;\\n    box-shadow: none;\\n    font-size: 12px;\\n    border-radius: 3px;\\n    -webkit-border-radius: 3px;\\n    -moz-border-radius: 3px;\\n    height: 32px;\\n    padding: 6px 12px;\\n    background-color: #fff;\\n    background-image: none;\\n    border: 1px solid #ccc;\\n    border-radius: 4px;\\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\\n    -webkit-transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;\\n    -webkit-transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;\\n    transition: border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;\\n    transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;\\n    transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;\\n    border-top-left-radius: 0;\\n    border-bottom-left-radius: 0;\\n    display: inline-block;\\n    font-size: 14px;\\n    line-height: 1.42857;\\n    color: #555;\\n    vertical-align: bottom; }\\n  :host .input-group-row .input-group.input-group-field > input[type=\\\"text\\\"].input-type-name {\\n    width: 120px;\\n    border-top-left-radius: 3px;\\n    border-bottom-left-radius: 3px; }\\n  :host .input-group-row .input-group.input-group-field .input-group-prepend {\\n    display: inline-block;\\n    border: solid 1px #aaa;\\n    padding: 7px 5px 6px 5px;\\n    border-top-left-radius: 3px;\\n    border-bottom-left-radius: 3px;\\n    background-color: #e2e7eb;\\n    vertical-align: bottom;\\n    margin-right: -4px; }\\n  :host .input-group-row .input-group.input-group-field .input-group-prepend .input-group-text {\\n      line-height: 16px;\\n      font-size: 14px;\\n      display: inline-block;\\n      min-width: 75px;\\n      text-align: center;\\n      vertical-align: bottom; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/flexmodel/flexmodelsetup.view.component.scss\n// module id = 1405\n// module chunks = 1","module.exports = \"<!--<div style=\\\"width: 50%; height: 500%; position: absolute; top: 0; left: 0;\\\">\\n    warrom\\n</div>\\n\\n\\n<button type=\\\"button\\\" \\n        style=\\\"margin-right: 20px;\\\"\\n        class=\\\"btn  btn-white btn-lg pull-left\\\"\\n        (click)=\\\"onShow('warroom')\\\">\\n        War room\\n</button>\\n<button type=\\\"button\\\" \\n        style=\\\"margin-right: 20px;\\\"\\n        class=\\\"btn btn-white btn-lg pull-left\\\"\\n        (click)=\\\"onShow('panicdashboard')\\\">\\n        Panic dashboard\\n</button>-->  \\n\\n<div class=\\\"widget widget-stats bg-blue col-md-3\\\" style=\\\"float:left; cursor: pointer; margin: 10px 10px 10px 10px;\\\"\\n    (click)=\\\"onShow('warroom')\\\">\\n    <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-line-chart fa-fw\\\"></i></div>\\n    <div class=\\\"stats-title\\\" style=\\\"padding-top:10px;\\\"></div>\\n    <div class=\\\"stats-number\\\" style=\\\"padding-top:10px;\\\" >War room</div>\\n\\n</div>\\n<div class=\\\"widget widget-stats bg-red-lighter col-md-3\\\" style=\\\"float:left; cursor: pointer; margin: 10px 10px 10px 10px;\\\"\\n    (click)=\\\"onShow('panicdashboard')\\\">\\n    <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-exclamation fa-fw\\\"></i></div>\\n    <div class=\\\"stats-title\\\" style=\\\"padding-top:10px;\\\"> </div>\\n    <div class=\\\"stats-number\\\" style=\\\"padding-top:10px;\\\" >Panic dashboard</div>\\n\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/heartbeat/heartbeat.view.component.html\n// module id = 1406\n// module chunks = 1","module.exports = \"<!--\\n.no-scrollbar-wrap {\\n  position: absolute;\\n  top: 0;\\n  bottom: 0;\\n  left: 0;\\n  right: 0;\\n  \\n  /* OR */\\n  \\n  /* width: 100%;\\n  height: 250px; */\\n  \\n  overflow: hidden;\\n}\\n\\n-->\\n\\n<style type=\\\"text/css\\\">\\n.no-scrollbar-wrap {\\n  position: absolute;\\n  top: 0;\\n  bottom: 0;\\n  left: 0;\\n  right: 0;\\n  \\n  /* OR */\\n  \\n  /* width: 100%;\\n  height: 250px; */\\n  \\n  overflow: hidden;\\n}\\n\\n.no-scrollbar {\\n  position: relative;\\n  overflow-x: hidden;\\n  overflow-y: hidden;\\n  width: 100%;\\n  height: 100%;\\n  /* Padding the width of the scrollbar will be added to the right */\\n  box-sizing: content-box;\\n}\\n\\n</style>\\n\\n\\n<div (click)=\\\"onShowHeartbeat()\\\" class=\\\"no-scrollbar\\\" style=\\\"width: 100%; height: 100%; position: absolute; top: 0; left: 0; background-color: #333;\\\">\\n\\n    <!-- left panel -->\\n    <div class=\\\"col-md-4\\\" style=\\\"color: #DDD\\\">\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\" >\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"stats-title\\\" style=\\\"padding-top:5px; float: right; margin-right: 10px;\\\">{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }} </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <chart *ngIf=\\\"all24hErrorRate\\\"\\n                                    [chartData]=\\\"all24hErrorRate.data\\\"\\n                                    [chartLabels]=\\\"all24hErrorRate.labels\\\"\\n                                    [chartType]=\\\"all24hErrorRate.chartType\\\"\\n                                    [startDate]=\\\"all24hErrorRate.startDate\\\"\\n                                    [endDate]=\\\"all24hErrorRate.endDate\\\"\\n                                    [granularity]=\\\"all24hErrorRate.granularity\\\"\\n                                    [fontColor]=\\\"'#DDD'\\\"\\n                                    [gridColor]=\\\"'#DDD'\\\"\\n                                    [chartHeight] = \\\"leftChartHeight\\\"\\n                                    [pointRadius]=\\\"0\\\"\\n                                    >\\n                        </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\">\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"stats-title\\\" style=\\\"padding-top:5px; float: right; margin-right: 10px;\\\">{{ 'HEARTBEAT.WORD.BROWSERS_ERROR_RATE' | translate:lang }} </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <chart *ngIf=\\\"browser24hErrorRate\\\"\\n                                        [chartData]=\\\"browser24hErrorRate.data\\\"\\n                                        [chartLabels]=\\\"browser24hErrorRate.labels\\\"\\n                                        [chartType]=\\\"browser24hErrorRate.chartType\\\"\\n                                        [startDate]=\\\"browser24hErrorRate.startDate\\\"\\n                                        [endDate]=\\\"browser24hErrorRate.endDate\\\"\\n                                        [granularity]=\\\"browser24hErrorRate.granularity\\\"\\n                                        [fontColor]=\\\"'#DDD'\\\"\\n                                        [gridColor]=\\\"'#DDD'\\\"\\n                                        [chartHeight] = \\\"leftChartHeight\\\"\\n                                        [pointRadius]=\\\"0\\\"\\n                                        >\\n                        </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\" #divBrowserERTable>\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                <div class = \\\"row col-md-12\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                            <table class=\\\"table table-inverse col-md-6\\\" >\\n                                    <thead>\\n                                        <tr>\\n                                            <td>{{ 'HEARTBEAT.WORD.BROWSER' | translate:lang }}</td>\\n                                            <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let rec of browser_error_rate; let i = index\\\" >\\n                                            <td>{{rec.browser}}</td>\\n                                            <td>{{rec.error_rate}}</td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>   \\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                            <table class=\\\"table table-inverse col-md-6\\\" >\\n                                    <thead>\\n                                        <tr>\\n                                            <td>{{ 'HEARTBEAT.WORD.BROWSER' | translate:lang }}</td>\\n                                            <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let rec of browser_error_rate; let i = index\\\" >\\n                                            <td>{{rec.browser}}</td>\\n                                            <td>{{rec.error_rate}}</td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>   \\n                    </div>\\n \\n                </div>        \\n            </div>\\n        </div>\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\">\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"stats-title\\\" style=\\\"padding-top:5px; float: right; margin-right: 10px;\\\" >{{ 'HEARTBEAT.WORD.OS_ERROR_RATE' | translate:lang }} </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <chart *ngIf=\\\"OS24hErrorRate\\\"\\n                                            [chartData]=\\\"OS24hErrorRate.data\\\"\\n                                            [chartLabels]=\\\"OS24hErrorRate.labels\\\"\\n                                            [chartType]=\\\"OS24hErrorRate.chartType\\\"\\n                                            [startDate]=\\\"OS24hErrorRate.startDate\\\"\\n                                            [endDate]=\\\"OS24hErrorRate.endDate\\\"\\n                                            [granularity]=\\\"OS24hErrorRate.granularity\\\"\\n                                            [fontColor]=\\\"'#DDD'\\\"\\n                                            [gridColor]=\\\"'#DDD'\\\"\\n                                            [chartHeight] = \\\"leftChartHeight\\\"\\n                                            [pointRadius]=\\\"0\\\"\\n                                            >\\n                        </chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\" #divOSERTable>\\n                <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                    <div class = \\\"row col-md-12\\\">\\n                        <div class=\\\"col-md-6\\\">\\n                                <table class=\\\"table table-inverse col-md-6\\\" >\\n                                        <thead>\\n                                            <tr>\\n                                                <td>{{ 'HEARTBEAT.WORD.OS' | translate:lang }}</td>\\n                                                <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let rec of browser_error_rate; let i = index\\\" >\\n                                                <td>{{rec.browser}}</td>\\n                                                <td>{{rec.error_rate}}</td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>   \\n                        </div>\\n                        <div class=\\\"col-md-6\\\">\\n                                <table class=\\\"table table-inverse col-md-6\\\" >\\n                                        <thead>\\n                                            <tr>\\n                                                <td>{{ 'HEARTBEAT.WORD.OS' | translate:lang }}</td>\\n                                                <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let rec of browser_error_rate; let i = index\\\" >\\n                                                <td>{{rec.browser}}</td>\\n                                                <td>{{rec.error_rate}}</td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>   \\n                        </div>\\n     \\n                    </div>        \\n                </div>\\n            </div>\\n\\n        \\n    </div>\\n\\n<!-- central panel-->\\n    <div class=\\\"col-md-5\\\" style=\\\"color: #DDD; padding-left: 0; padding-right: 0;\\\">\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px; \\\">\\n                <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n                        <div class=\\\"stats-title\\\" style=\\\"margin-bottom: 10px;\\\"> ... </div>\\n\\n                        <div class=\\\"analytics-geo-map\\\" style= \\\"width: auto; height: auto;\\\">\\n                                <!--</google-chart>(chartSelect)=\\\"onMapRegionClick($event)\\\"-->\\n                                <google-chart \\n                                        [data]=\\\"mapChartData\\\" \\n                                ></google-chart>\\n                        </div>\\n                </div> \\n        </div>\\n        <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 0px 0px 0px 0px;\\\" #divGeoTable>\\n                <div  class=\\\"panel-body\\\">\\n\\n                        <table class=\\\"table table-inverse analytics-geo-table\\\">\\n                                <thead>\\n                                        <tr>\\n                                            <td >{{ 'HEARTBEAT.WORD.COUNTRY' | translate:lang }}</td>\\n                                            <td >{{ 'HEARTBEAT.WORD.REGION' | translate:lang }}</td>\\n                                            <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                                        </tr>\\n                                </thead>\\n                                <tbody>\\n                                        <tr *ngFor=\\\"let rec of geoData; let i = index\\\" >\\n                                                <td *ngIf=\\\"i < 10\\\" ><span [ngClass]=\\\"rec.flag\\\" ></span> {{rec.country.name}}</td>\\n                                                <td *ngIf=\\\"i < 10\\\" >{{i+1}}</td>\\n                                                <td *ngIf=\\\"i < 10\\\" >{{rec.views}}</td>\\n                                        </tr>\\n                                </tbody>\\n                        </table>\\n\\n                </div> \\n        </div>\\n\\n                \\n    </div>\\n\\n<!-- right panel -->\\n    <div class=\\\"col-md-3\\\" style=\\\"color: #DDD;\\\">\\n\\n        <div class=\\\"panel panel-inverse bg-black\\\" [ngStyle]=\\\"{ 'margin': '0px 0px 0px 0px', 'height': rightPanelHeight , 'display': 'inline-block !important' }\\\">\\n            <div class=\\\"panel-body\\\" style=\\\"margin: 5px 5px 5px 5px; padding: 0;\\\">\\n        \\n                <table class=\\\"table table-inverse\\\" >\\n                    <thead>\\n                        <tr>\\n                            <td>{{ 'HEARTBEAT.WORD.ID' | translate:lang }}</td>\\n                            <td>{{ 'HEARTBEAT.WORD.TITLE' | translate:lang }}</td>\\n                            <td>{{ 'HEARTBEAT.WORD.ERROR_RATE' | translate:lang }}</td>\\n                        </tr>\\n                    </thead>\\n                    <tbody>\\n                        <tr *ngFor=\\\"let rec of material_error_rate; let i = index\\\" >\\n                            <td>{{rec.id}}</td>\\n                            <td>{{rec.title}}</td>\\n                            <td>{{rec.error_rate}}</td>\\n                        </tr>\\n                    </tbody>\\n                </table>\\n        \\n            </div>\\n        </div>\\n                \\n    </div>\\n\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/heartbeat/panicdashboard.view.component.html\n// module id = 1407\n// module chunks = 1","module.exports = \"<div (click)=\\\"onShowHeartbeat()\\\" style=\\\"width: 100%; height: 100%; position: absolute; top: 0; left: 0; background-color: #333; padding: 20px;\\\">               \\n\\n    <div class=\\\"row\\\" >\\n        <div class=\\\"col-md-4\\\" style=\\\"color: #DDD\\\">\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px; height: 25%\\\">\\n                <div class=\\\"panel-body row\\\" style=\\\"padding: 20px;\\\" >\\n                    <div class=\\\"col-md-2 text-center\\\" [ngStyle]=\\\"{'height': leftChartHeight}\\\">\\n                        <div style=\\\"font-size:2rem;padding: 20px 0 5px;\\\">Right now</div>\\n                        <div style=\\\"font-size:5rem;padding: 5px 0 5px;font-weight: bold;\\\">{{audienceWatchingUsersNum}}</div>\\n                        <div style=\\\"font-size:1.5rem;padding: 5px 0 5px;\\\">watching users</div>\\n                    </div>\\n                    \\n                    <div class=\\\"col-md-5\\\">\\n                        <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_MIN' | translate:lang }}</div>\\n                        <chart-realtime\\n                            [chartData]=\\\"audienceMinutesChart.data\\\"\\n                            [chartLabels]=\\\"audienceMinutesChart.labels\\\"\\n                            [chartHeight]=\\\"leftChartHeight\\\"\\n                            [chartType]=\\\"'line'\\\"\\n                            [fontColor]=\\\"'#DDD'\\\"\\n                            [gridColor]=\\\"'#DDD'\\\"\\n                        ></chart-realtime>\\n                    </div>\\n                    \\n                    <div class=\\\"col-md-5\\\">\\n                        <div class=\\\"chart-tile\\\">{{ 'ANALYTICS_REALTIME.WORD.WATCHING_USERS_PER_SEC' | translate:lang }}</div>\\n                        <chart-realtime\\n                            [chartData]=\\\"audienceSecondsChart.data\\\"\\n                            [chartLabels]=\\\"audienceSecondsChart.labels\\\"\\n                            [chartHeight]=\\\"leftChartHeight\\\"\\n                            [chartType]=\\\"'line'\\\"\\n                            [fontColor]=\\\"'#DDD'\\\"\\n                            [gridColor]=\\\"'#DDD'\\\"\\n                        ></chart-realtime>\\n                    </div>\\n                    \\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px;\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                        <chart \\n                        [chartHeight]=\\\"leftChartHeight\\\"\\n                        [chartData]=\\\"chartData\\\" \\n                        [chartLabels]=\\\"chartLabels\\\" \\n                        [chartType]=\\\"'line'\\\" \\n                        [fontColor]=\\\"'#DDD'\\\"\\n                        [granularity]=\\\"'hour'\\\">\\n                    </chart>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px; \\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"widget widget-stats bg-blue\\\" style=\\\"float:left; width:44%; margin-left: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\" style=\\\"padding-top:0px;\\\">{{ 'ANALYTICS_AUDIENCE.WORD.TODAY' | translate:lang }} {{ 'ANALYTICS_AUDIENCE.SUMMARY.USERS' | translate:lang }}</div>\\n                            <div class=\\\"stats-number\\\" style=\\\"padding-top:0px;\\\" >{{todaysUsers | number}}</div>\\n                        </div>\\n                        <div class=\\\"widget widget-stats bg-black\\\" style=\\\"float:right; width:44%; margin-right: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.TODAY' | translate:lang }} {{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS' | translate:lang }}</div>\\n                            <div class=\\\"stats-number\\\" >{{todaysViews | number}}</div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"widget widget-stats bg-yellow\\\" style=\\\"float:left; width:44%; margin-left: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-users fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.YESTERDAY' | translate:lang }} {{ 'ANALYTICS_AUDIENCE.SUMMARY.USERS' | translate:lang }}</div>\\n                            <div class=\\\"stats-number\\\" >{{yesterdayUsers | number}}</div>\\n\\n                        </div>\\n                        <div class=\\\"widget widget-stats bg-blue\\\" style=\\\"float:right; width:44%; margin-right: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.WORD.YESTERDAY' | translate:lang }} {{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS' | translate:lang }}</div>\\n                            <div class=\\\"stats-number\\\" >{{yesterdayViews | number}}</div>\\n\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px; height: auto; \\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"widget widget-stats bg-green\\\" style=\\\"float:left; width:44%; margin-left: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-eye fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.VIEWS_PER_USER' | translate:lang }} ({{ 'ANALYTICS_AUDIENCE.WORD.LAST' | translate:lang }} 24h)</div>\\n                            <div class=\\\"stats-number\\\" >{{viewsPerUsers24 | number:'1.0-0'}} [s]</div>\\n                        </div>\\n                        <div class=\\\"widget widget-stats bg-orange\\\" style=\\\"float:right; width:44%; margin-right: 3%; margin-bottom: 10px; padding-top: 2px; padding-bottom: 2px;\\\">\\n                            <div class=\\\"stats-icon stats-icon-sm\\\"><i class=\\\"fa fa-clock-o fa-fw\\\"></i></div>\\n                            <div class=\\\"stats-title\\\">{{ 'ANALYTICS_AUDIENCE.SUMMARY.AVG_WATCHING_TIME' | translate:lang }} ({{ 'ANALYTICS_AUDIENCE.WORD.LAST' | translate:lang }} 24h)</div>\\n                            <div class=\\\"stats-number\\\" >{{avgWatchingTime24 | number:'1.0-2'}}</div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"col-md-5\\\">\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 1px 5px; height: 40px;\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 5px;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-md-2\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.ID' | translate:lang }}</h4>\\n                        </div>\\n                        <div class=\\\"col-md-2\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.NAME' | translate:lang }}</h4>\\n                        </div>\\n                        <div class=\\\"col-md-1\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.STREAMS' | translate:lang }}</h4>\\n                        </div>\\n                        <div class=\\\"col-md-3\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.LAST_HOUR' | translate:lang }}</h4>\\n                        </div>\\n                        <div class=\\\"col-md-4\\\">\\n                            <h4 style=\\\"color: #DDD; text-align: center;\\\">{{ 'ANALYTICS_REALTIME.WORD.LAST_MINUTE' | translate:lang }}</h4>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div *ngFor=\\\"let row of topMediaList; let i = index\\\" class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 5px;\\\" *ngIf=\\\"i < NUMBER_OF_TOP_MATERIAL_CHARTS \\\">\\n                    <div class=\\\"row\\\" >\\n                        <div class=\\\"col-md-2\\\" style=\\\"color: #DDD;\\\">\\n                            {{row.media.material_id}}\\n                        </div>\\n                        <div class=\\\"col-md-2\\\" style=\\\"color: #DDD;\\\">\\n                            {{row.media.title}}\\n                        </div>\\n                        <div class=\\\"col-md-1\\\" style=\\\"color: #DDD;\\\">\\n                            {{row.streams}}\\n                        </div>\\n                        <div class=\\\"col-md-3\\\">\\n                            <chart-realtime\\n                                [chartData]=\\\"selectedMediaMinutesChart[row.media.material_id].data\\\"\\n                                [chartLabels]=\\\"selectedMediaMinutesChart[row.media.material_id].labels\\\"\\n                                [chartHeight]=\\\"topMatChartHeight\\\"\\n                                [chartType]=\\\"'line'\\\"\\n                                [fontColor]=\\\"'#DDD'\\\"\\n                                [gridColor]=\\\"'#DDD'\\\"\\n                                [pointRadius]=\\\"0\\\"\\n                            ></chart-realtime>\\n                        </div>\\n                        <div class=\\\"col-md-4\\\">\\n                            <chart-realtime\\n                                [chartData]=\\\"selectedMediaSecondsChart[row.media.material_id].data\\\"\\n                                [chartLabels]=\\\"selectedMediaSecondsChart[row.media.material_id].labels\\\"\\n                                [chartHeight]=\\\"topMatChartHeight\\\"\\n                                [chartType]=\\\"'line'\\\"\\n                                [fontColor]=\\\"'#DDD'\\\"\\n                                [gridColor]=\\\"'#DDD'\\\"\\n                                [pointRadius]=\\\"0\\\"\\n                            ></chart-realtime>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"col-md-3\\\">\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <chart  *ngIf=\\\"chartDataDevice\\\"\\n                        [chartData]=\\\"chartDataDevice\\\"\\n                        [chartLabels]=\\\"chartLabelsDevice\\\"\\n                        [chartType]=\\\"'doughnut'\\\"\\n                        [fontColor]=\\\"'#DDD'\\\"\\n                        [chartHeight]=\\\"techChartHeight\\\"\\n                        >\\n                    </chart>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <chart  *ngIf=\\\"chartDataBrowser\\\"\\n                        [chartData]=\\\"chartDataBrowser\\\"\\n                        [chartLabels]=\\\"chartLabelsBrowser\\\"\\n                        [chartType]=\\\"'doughnut'\\\"\\n                        [fontColor]=\\\"'#DDD'\\\"\\n                        [chartHeight]=\\\"techChartHeight\\\"\\n\\n                        >\\n                    </chart>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"panel panel-inverse bg-black\\\" style=\\\"margin: 5px 5px 5px 5px\\\">\\n                <div class=\\\"panel-body\\\" style=\\\"padding: 20px;\\\">\\n                    <chart  *ngIf=\\\"chartLabelsOs\\\"\\n                        [chartData]=\\\"chartDataOs\\\"\\n                        [chartLabels]=\\\"chartLabelsOs\\\"\\n                        [chartType]=\\\"'doughnut'\\\"\\n                        [fontColor]=\\\"'#DDD'\\\"\\n                        [chartHeight]=\\\"techChartHeight\\\"\\n\\n                        >\\n                    </chart>\\n                </div>\\n            </div>\\n\\n        </div>\\n\\n    </div>\\n\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/heartbeat/warroom.view.component.html\n// module id = 1408\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_INFO.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"row\\\">\\n\\t<div class=\\\"col-md-12\\\">\\n\\t\\t<div class=\\\"panel panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_INFO.CLIENT_TOKEN.TITLE' | translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"row\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <div class=\\\"client-token\\\"><strong>clientToken:</strong> \\\"{{clientToken}}\\\"</div>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <div class=\\\"note note-secondary\\\">\\n                            <h4>clientToken</h4>\\n                            {{ 'ANALYTICS_INFO.CLIENT_TOKEN.DESC' | translate:lang }}\\n                            {{ 'ANALYTICS_INFO.CLIENT_TOKEN.DOC_LINK_TEXT' | translate:lang }} - <a href=\\\"{{ urlService.playersPluginsDocumentationPage }}\\\" target=\\\"_blank\\\">{{ urlService.playersPluginsDocumentationPage }}</a>\\n                        </div>\\n                    </div>\\n                </div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/info/info.view.component.html\n// module id = 1409\n// module chunks = 1","/**\n * Tween.js - Licensed under the MIT license\n * https://github.com/tweenjs/tween.js\n * ----------------------------------------------\n *\n * See https://github.com/tweenjs/tween.js/graphs/contributors for the full list of contributors.\n * Thank you all, you're awesome!\n */\n\n\nvar _Group = function () {\n\tthis._tweens = {};\n\tthis._tweensAddedDuringUpdate = {};\n};\n\n_Group.prototype = {\n\tgetAll: function () {\n\n\t\treturn Object.keys(this._tweens).map(function (tweenId) {\n\t\t\treturn this._tweens[tweenId];\n\t\t}.bind(this));\n\n\t},\n\n\tremoveAll: function () {\n\n\t\tthis._tweens = {};\n\n\t},\n\n\tadd: function (tween) {\n\n\t\tthis._tweens[tween.getId()] = tween;\n\t\tthis._tweensAddedDuringUpdate[tween.getId()] = tween;\n\n\t},\n\n\tremove: function (tween) {\n\n\t\tdelete this._tweens[tween.getId()];\n\t\tdelete this._tweensAddedDuringUpdate[tween.getId()];\n\n\t},\n\n\tupdate: function (time, preserve) {\n\n\t\tvar tweenIds = Object.keys(this._tweens);\n\n\t\tif (tweenIds.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttime = time !== undefined ? time : TWEEN.now();\n\n\t\t// Tweens are updated in \"batches\". If you add a new tween during an update, then the\n\t\t// new tween will be updated in the next batch.\n\t\t// If you remove a tween during an update, it may or may not be updated. However,\n\t\t// if the removed tween was added during the current batch, then it will not be updated.\n\t\twhile (tweenIds.length > 0) {\n\t\t\tthis._tweensAddedDuringUpdate = {};\n\n\t\t\tfor (var i = 0; i < tweenIds.length; i++) {\n\n\t\t\t\tvar tween = this._tweens[tweenIds[i]];\n\n\t\t\t\tif (tween && tween.update(time) === false) {\n\t\t\t\t\ttween._isPlaying = false;\n\n\t\t\t\t\tif (!preserve) {\n\t\t\t\t\t\tdelete this._tweens[tweenIds[i]];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttweenIds = Object.keys(this._tweensAddedDuringUpdate);\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\nvar TWEEN = new _Group();\n\nTWEEN.Group = _Group;\nTWEEN._nextId = 0;\nTWEEN.nextId = function () {\n\treturn TWEEN._nextId++;\n};\n\n\n// Include a performance.now polyfill.\n// In node.js, use process.hrtime.\nif (typeof (self) === 'undefined' && typeof (process) !== 'undefined' && process.hrtime) {\n\tTWEEN.now = function () {\n\t\tvar time = process.hrtime();\n\n\t\t// Convert [seconds, nanoseconds] to milliseconds.\n\t\treturn time[0] * 1000 + time[1] / 1000000;\n\t};\n}\n// In a browser, use self.performance.now if it is available.\nelse if (typeof (self) !== 'undefined' &&\n         self.performance !== undefined &&\n\t\t self.performance.now !== undefined) {\n\t// This must be bound, because directly assigning this function\n\t// leads to an invocation exception in Chrome.\n\tTWEEN.now = self.performance.now.bind(self.performance);\n}\n// Use Date.now if it is available.\nelse if (Date.now !== undefined) {\n\tTWEEN.now = Date.now;\n}\n// Otherwise, use 'new Date().getTime()'.\nelse {\n\tTWEEN.now = function () {\n\t\treturn new Date().getTime();\n\t};\n}\n\n\nTWEEN.Tween = function (object, group) {\n\tthis._object = object;\n\tthis._valuesStart = {};\n\tthis._valuesEnd = {};\n\tthis._valuesStartRepeat = {};\n\tthis._duration = 1000;\n\tthis._repeat = 0;\n\tthis._repeatDelayTime = undefined;\n\tthis._yoyo = false;\n\tthis._isPlaying = false;\n\tthis._reversed = false;\n\tthis._delayTime = 0;\n\tthis._startTime = null;\n\tthis._easingFunction = TWEEN.Easing.Linear.None;\n\tthis._interpolationFunction = TWEEN.Interpolation.Linear;\n\tthis._chainedTweens = [];\n\tthis._onStartCallback = null;\n\tthis._onStartCallbackFired = false;\n\tthis._onUpdateCallback = null;\n\tthis._onRepeatCallback = null;\n\tthis._onCompleteCallback = null;\n\tthis._onStopCallback = null;\n\tthis._group = group || TWEEN;\n\tthis._id = TWEEN.nextId();\n\n};\n\nTWEEN.Tween.prototype = {\n\tgetId: function () {\n\t\treturn this._id;\n\t},\n\n\tisPlaying: function () {\n\t\treturn this._isPlaying;\n\t},\n\n\tto: function (properties, duration) {\n\n\t\tthis._valuesEnd = properties;\n\n\t\tif (duration !== undefined) {\n\t\t\tthis._duration = duration;\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tduration: function duration(d) {\n\t\tthis._duration = d;\n\t\treturn this;\n\t},\n\n\tstart: function (time) {\n\n\t\tthis._group.add(this);\n\n\t\tthis._isPlaying = true;\n\n\t\tthis._onStartCallbackFired = false;\n\n\t\tthis._startTime = time !== undefined ? typeof time === 'string' ? TWEEN.now() + parseFloat(time) : time : TWEEN.now();\n\t\tthis._startTime += this._delayTime;\n\n\t\tfor (var property in this._valuesEnd) {\n\n\t\t\t// Check if an Array was provided as property value\n\t\t\tif (this._valuesEnd[property] instanceof Array) {\n\n\t\t\t\tif (this._valuesEnd[property].length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Create a local copy of the Array with the start value at the front\n\t\t\t\tthis._valuesEnd[property] = [this._object[property]].concat(this._valuesEnd[property]);\n\n\t\t\t}\n\n\t\t\t// If `to()` specifies a property that doesn't exist in the source object,\n\t\t\t// we should not set that property in the object\n\t\t\tif (this._object[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Save the starting value.\n\t\t\tthis._valuesStart[property] = this._object[property];\n\n\t\t\tif ((this._valuesStart[property] instanceof Array) === false) {\n\t\t\t\tthis._valuesStart[property] *= 1.0; // Ensures we're using numbers, not strings\n\t\t\t}\n\n\t\t\tthis._valuesStartRepeat[property] = this._valuesStart[property] || 0;\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tstop: function () {\n\n\t\tif (!this._isPlaying) {\n\t\t\treturn this;\n\t\t}\n\n\t\tthis._group.remove(this);\n\t\tthis._isPlaying = false;\n\n\t\tif (this._onStopCallback !== null) {\n\t\t\tthis._onStopCallback(this._object);\n\t\t}\n\n\t\tthis.stopChainedTweens();\n\t\treturn this;\n\n\t},\n\n\tend: function () {\n\n\t\tthis.update(Infinity);\n\t\treturn this;\n\n\t},\n\n\tstopChainedTweens: function () {\n\n\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\tthis._chainedTweens[i].stop();\n\t\t}\n\n\t},\n\n\tgroup: function (group) {\n\t\tthis._group = group;\n\t\treturn this;\n\t},\n\n\tdelay: function (amount) {\n\n\t\tthis._delayTime = amount;\n\t\treturn this;\n\n\t},\n\n\trepeat: function (times) {\n\n\t\tthis._repeat = times;\n\t\treturn this;\n\n\t},\n\n\trepeatDelay: function (amount) {\n\n\t\tthis._repeatDelayTime = amount;\n\t\treturn this;\n\n\t},\n\n\tyoyo: function (yoyo) {\n\n\t\tthis._yoyo = yoyo;\n\t\treturn this;\n\n\t},\n\n\teasing: function (easingFunction) {\n\n\t\tthis._easingFunction = easingFunction;\n\t\treturn this;\n\n\t},\n\n\tinterpolation: function (interpolationFunction) {\n\n\t\tthis._interpolationFunction = interpolationFunction;\n\t\treturn this;\n\n\t},\n\n\tchain: function () {\n\n\t\tthis._chainedTweens = arguments;\n\t\treturn this;\n\n\t},\n\n\tonStart: function (callback) {\n\n\t\tthis._onStartCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonUpdate: function (callback) {\n\n\t\tthis._onUpdateCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonRepeat: function onRepeat(callback) {\n\n\t\tthis._onRepeatCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonComplete: function (callback) {\n\n\t\tthis._onCompleteCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tonStop: function (callback) {\n\n\t\tthis._onStopCallback = callback;\n\t\treturn this;\n\n\t},\n\n\tupdate: function (time) {\n\n\t\tvar property;\n\t\tvar elapsed;\n\t\tvar value;\n\n\t\tif (time < this._startTime) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._onStartCallbackFired === false) {\n\n\t\t\tif (this._onStartCallback !== null) {\n\t\t\t\tthis._onStartCallback(this._object);\n\t\t\t}\n\n\t\t\tthis._onStartCallbackFired = true;\n\t\t}\n\n\t\telapsed = (time - this._startTime) / this._duration;\n\t\telapsed = (this._duration === 0 || elapsed > 1) ? 1 : elapsed;\n\n\t\tvalue = this._easingFunction(elapsed);\n\n\t\tfor (property in this._valuesEnd) {\n\n\t\t\t// Don't update properties that do not exist in the source object\n\t\t\tif (this._valuesStart[property] === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar start = this._valuesStart[property] || 0;\n\t\t\tvar end = this._valuesEnd[property];\n\n\t\t\tif (end instanceof Array) {\n\n\t\t\t\tthis._object[property] = this._interpolationFunction(end, value);\n\n\t\t\t} else {\n\n\t\t\t\t// Parses relative end values with start as base (e.g.: +10, -3)\n\t\t\t\tif (typeof (end) === 'string') {\n\n\t\t\t\t\tif (end.charAt(0) === '+' || end.charAt(0) === '-') {\n\t\t\t\t\t\tend = start + parseFloat(end);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tend = parseFloat(end);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Protect against non numeric properties.\n\t\t\t\tif (typeof (end) === 'number') {\n\t\t\t\t\tthis._object[property] = start + (end - start) * value;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (this._onUpdateCallback !== null) {\n\t\t\tthis._onUpdateCallback(this._object, elapsed);\n\t\t}\n\n\t\tif (elapsed === 1) {\n\n\t\t\tif (this._repeat > 0) {\n\n\t\t\t\tif (isFinite(this._repeat)) {\n\t\t\t\t\tthis._repeat--;\n\t\t\t\t}\n\n\t\t\t\t// Reassign starting values, restart by making startTime = now\n\t\t\t\tfor (property in this._valuesStartRepeat) {\n\n\t\t\t\t\tif (typeof (this._valuesEnd[property]) === 'string') {\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesStartRepeat[property] + parseFloat(this._valuesEnd[property]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._yoyo) {\n\t\t\t\t\t\tvar tmp = this._valuesStartRepeat[property];\n\n\t\t\t\t\t\tthis._valuesStartRepeat[property] = this._valuesEnd[property];\n\t\t\t\t\t\tthis._valuesEnd[property] = tmp;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._valuesStart[property] = this._valuesStartRepeat[property];\n\n\t\t\t\t}\n\n\t\t\t\tif (this._yoyo) {\n\t\t\t\t\tthis._reversed = !this._reversed;\n\t\t\t\t}\n\n\t\t\t\tif (this._repeatDelayTime !== undefined) {\n\t\t\t\t\tthis._startTime = time + this._repeatDelayTime;\n\t\t\t\t} else {\n\t\t\t\t\tthis._startTime = time + this._delayTime;\n\t\t\t\t}\n\n\t\t\t\tif (this._onRepeatCallback !== null) {\n\t\t\t\t\tthis._onRepeatCallback(this._object);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\tif (this._onCompleteCallback !== null) {\n\n\t\t\t\t\tthis._onCompleteCallback(this._object);\n\t\t\t\t}\n\n\t\t\t\tfor (var i = 0, numChainedTweens = this._chainedTweens.length; i < numChainedTweens; i++) {\n\t\t\t\t\t// Make the chained tweens start exactly at the time they should,\n\t\t\t\t\t// even if the `update()` method was called way past the duration of the tween\n\t\t\t\t\tthis._chainedTweens[i].start(this._startTime + this._duration);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n};\n\n\nTWEEN.Easing = {\n\n\tLinear: {\n\n\t\tNone: function (k) {\n\n\t\t\treturn k;\n\n\t\t}\n\n\t},\n\n\tQuadratic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k * (2 - k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * (--k * (k - 2) - 1);\n\n\t\t}\n\n\t},\n\n\tCubic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tQuartic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn 1 - (--k * k * k * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn - 0.5 * ((k -= 2) * k * k * k - 2);\n\n\t\t}\n\n\t},\n\n\tQuintic: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k * k * k * k * k;\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn --k * k * k * k * k + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * k * k * k * k * k;\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * k * k * k + 2);\n\n\t\t}\n\n\t},\n\n\tSinusoidal: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.cos(k * Math.PI / 2);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sin(k * Math.PI / 2);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\treturn 0.5 * (1 - Math.cos(Math.PI * k));\n\n\t\t}\n\n\t},\n\n\tExponential: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn k === 0 ? 0 : Math.pow(1024, k - 1);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn k === 1 ? 1 : 1 - Math.pow(2, - 10 * k);\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * Math.pow(1024, k - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (- Math.pow(2, - 10 * (k - 1)) + 2);\n\n\t\t}\n\n\t},\n\n\tCircular: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - Math.sqrt(1 - k * k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\treturn Math.sqrt(1 - (--k * k));\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn - 0.5 * (Math.sqrt(1 - k * k) - 1);\n\t\t\t}\n\n\t\t\treturn 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n\n\t\t}\n\n\t},\n\n\tElastic: {\n\n\t\tIn: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn Math.pow(2, -10 * k) * Math.sin((k - 0.1) * 5 * Math.PI) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k === 0) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (k === 1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tk *= 2;\n\n\t\t\tif (k < 1) {\n\t\t\t\treturn -0.5 * Math.pow(2, 10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI);\n\t\t\t}\n\n\t\t\treturn 0.5 * Math.pow(2, -10 * (k - 1)) * Math.sin((k - 1.1) * 5 * Math.PI) + 1;\n\n\t\t}\n\n\t},\n\n\tBack: {\n\n\t\tIn: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn k * k * ((s + 1) * k - s);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tvar s = 1.70158;\n\n\t\t\treturn --k * k * ((s + 1) * k + s) + 1;\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tvar s = 1.70158 * 1.525;\n\n\t\t\tif ((k *= 2) < 1) {\n\t\t\t\treturn 0.5 * (k * k * ((s + 1) * k - s));\n\t\t\t}\n\n\t\t\treturn 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n\n\t\t}\n\n\t},\n\n\tBounce: {\n\n\t\tIn: function (k) {\n\n\t\t\treturn 1 - TWEEN.Easing.Bounce.Out(1 - k);\n\n\t\t},\n\n\t\tOut: function (k) {\n\n\t\t\tif (k < (1 / 2.75)) {\n\t\t\t\treturn 7.5625 * k * k;\n\t\t\t} else if (k < (2 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n\t\t\t} else if (k < (2.5 / 2.75)) {\n\t\t\t\treturn 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n\t\t\t} else {\n\t\t\t\treturn 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n\t\t\t}\n\n\t\t},\n\n\t\tInOut: function (k) {\n\n\t\t\tif (k < 0.5) {\n\t\t\t\treturn TWEEN.Easing.Bounce.In(k * 2) * 0.5;\n\t\t\t}\n\n\t\t\treturn TWEEN.Easing.Bounce.Out(k * 2 - 1) * 0.5 + 0.5;\n\n\t\t}\n\n\t}\n\n};\n\nTWEEN.Interpolation = {\n\n\tLinear: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.Linear;\n\n\t\tif (k < 0) {\n\t\t\treturn fn(v[0], v[1], f);\n\t\t}\n\n\t\tif (k > 1) {\n\t\t\treturn fn(v[m], v[m - 1], m - f);\n\t\t}\n\n\t\treturn fn(v[i], v[i + 1 > m ? m : i + 1], f - i);\n\n\t},\n\n\tBezier: function (v, k) {\n\n\t\tvar b = 0;\n\t\tvar n = v.length - 1;\n\t\tvar pw = Math.pow;\n\t\tvar bn = TWEEN.Interpolation.Utils.Bernstein;\n\n\t\tfor (var i = 0; i <= n; i++) {\n\t\t\tb += pw(1 - k, n - i) * pw(k, i) * v[i] * bn(n, i);\n\t\t}\n\n\t\treturn b;\n\n\t},\n\n\tCatmullRom: function (v, k) {\n\n\t\tvar m = v.length - 1;\n\t\tvar f = m * k;\n\t\tvar i = Math.floor(f);\n\t\tvar fn = TWEEN.Interpolation.Utils.CatmullRom;\n\n\t\tif (v[0] === v[m]) {\n\n\t\t\tif (k < 0) {\n\t\t\t\ti = Math.floor(f = m * (1 + k));\n\t\t\t}\n\n\t\t\treturn fn(v[(i - 1 + m) % m], v[i], v[(i + 1) % m], v[(i + 2) % m], f - i);\n\n\t\t} else {\n\n\t\t\tif (k < 0) {\n\t\t\t\treturn v[0] - (fn(v[0], v[0], v[1], v[1], -f) - v[0]);\n\t\t\t}\n\n\t\t\tif (k > 1) {\n\t\t\t\treturn v[m] - (fn(v[m], v[m], v[m - 1], v[m - 1], f - m) - v[m]);\n\t\t\t}\n\n\t\t\treturn fn(v[i ? i - 1 : 0], v[i], v[m < i + 1 ? m : i + 1], v[m < i + 2 ? m : i + 2], f - i);\n\n\t\t}\n\n\t},\n\n\tUtils: {\n\n\t\tLinear: function (p0, p1, t) {\n\n\t\t\treturn (p1 - p0) * t + p0;\n\n\t\t},\n\n\t\tBernstein: function (n, i) {\n\n\t\t\tvar fc = TWEEN.Interpolation.Utils.Factorial;\n\n\t\t\treturn fc(n) / fc(i) / fc(n - i);\n\n\t\t},\n\n\t\tFactorial: (function () {\n\n\t\t\tvar a = [1];\n\n\t\t\treturn function (n) {\n\n\t\t\t\tvar s = 1;\n\n\t\t\t\tif (a[n]) {\n\t\t\t\t\treturn a[n];\n\t\t\t\t}\n\n\t\t\t\tfor (var i = n; i > 1; i--) {\n\t\t\t\t\ts *= i;\n\t\t\t\t}\n\n\t\t\t\ta[n] = s;\n\t\t\t\treturn s;\n\n\t\t\t};\n\n\t\t})(),\n\n\t\tCatmullRom: function (p0, p1, p2, p3, t) {\n\n\t\t\tvar v0 = (p2 - p0) * 0.5;\n\t\t\tvar v1 = (p3 - p1) * 0.5;\n\t\t\tvar t2 = t * t;\n\t\t\tvar t3 = t * t2;\n\n\t\t\treturn (2 * p1 - 2 * p2 + v0 + v1) * t3 + (- 3 * p1 + 3 * p2 - 2 * v0 - v1) * t2 + v0 * t + p1;\n\n\t\t}\n\n\t}\n\n};\n\n// UMD (Universal Module Definition)\n(function (root) {\n\n\tif (typeof define === 'function' && define.amd) {\n\n\t\t// AMD\n\t\tdefine([], function () {\n\t\t\treturn TWEEN;\n\t\t});\n\n\t} else if (typeof module !== 'undefined' && typeof exports === 'object') {\n\n\t\t// Node.js\n\t\tmodule.exports = TWEEN;\n\n\t} else if (root !== undefined) {\n\n\t\t// Global variable\n\t\troot.TWEEN = TWEEN;\n\n\t}\n\n})(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@tweenjs/tween.js/src/Tween.js\n// module id = 1410\n// module chunks = 1","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/node_modules/process/browser.js\n// module id = 1411\n// module chunks = 1","module.exports = \"<ng-content selector=\\\".virtual-dropdown-input\\\"></ng-content>\\n\\n<virtual-scroller [horizontal]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"items\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[style.height.px]=\\\"listHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[compareItems]=\\\"compareItems\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsUpdate)=\\\"updateVieportItems($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsEnd)=\\\"emitScrolledToEnd($event)\\\">\\n\\n\\t<div *ngFor=\\\"let item of viewportItems;trackBy:trackItems;\\\"\\n\\t\\t\\t class=\\\"{{ selector }}-item-con\\\"\\n\\t\\t\\t [ngClass]=\\\"itemNgClass(item)\\\"\\n\\t\\t\\t [style.height.px]=\\\"itemHeigth\\\">\\n\\n\\t\\t<ng-container *ngIf=\\\"itemTemplate;else defaultItemTemplate;\\\">\\n\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"itemTemplate;context:{item:item, select:selectFromTemplate};\\\"></ng-container>\\n\\t\\t</ng-container>\\n\\n\\t\\t<ng-template #defaultItemTemplate>\\n\\t\\t\\t<a (click)=\\\"emitSelected(item)\\\" class=\\\"{{ selector }}-item btn btn-xs\\\" [title]=\\\"item?.label\\\">\\n\\t\\t\\t\\t<i *ngIf=\\\"item?.icon\\\" class=\\\"{{ selector }}-ico fa fa-fw pull-left\\\" [ngClass]=\\\"iconClasses(item)\\\"></i>\\n\\t\\t\\t\\t{{item?.label}}\\n\\t\\t\\t</a>\\n\\t\\t</ng-template>\\n\\n\\t</div>\\n\\n</virtual-scroller>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/virtual/dropdown/component/popup/virtual.dropdown.popup.component.html\n// module id = 1412\n// module chunks = 1","module.exports = \":host {\\n  position: absolute;\\n  z-index: 99999;\\n  display: block;\\n  min-width: inherit;\\n  max-width: inherit;\\n  background: white;\\n  border: 1px solid lightgray;\\n  border-radius: 0 0 3px 3px;\\n  color: inherit; }\\n  :host virtual-scroller {\\n    list-style-type: none;\\n    padding: 0;\\n    width: 100%;\\n    min-width: 150px;\\n    max-height: 200px;\\n    overflow-x: hidden;\\n    overflow-y: auto;\\n    color: inherit;\\n    margin-bottom: 0; }\\n  :host virtual-scroller::-webkit-scrollbar {\\n      width: 8px;\\n      height: 8px;\\n      background: none; }\\n  :host virtual-scroller::-webkit-scrollbar-track {\\n      -webkit-box-shadow: none;\\n              box-shadow: none;\\n      background: #EEEEEE; }\\n  :host virtual-scroller::-webkit-scrollbar-thumb:window-inactive {\\n      background: #DDDDDD; }\\n  :host virtual-scroller::-webkit-scrollbar-thumb {\\n      background: #CCCCCC; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con {\\n      cursor: pointer;\\n      color: inherit; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con ::ng-deep .virtual-dropdown-popup-item {\\n        color: inherit;\\n        padding: 5px 10px;\\n        display: inline-block;\\n        width: 100%;\\n        text-decoration: none;\\n        border-radius: 0;\\n        -webkit-box-shadow: none;\\n                box-shadow: none;\\n        background-color: transparent; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con ::ng-deep .virtual-dropdown-popup-item i {\\n          margin-left: 5px; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con ::ng-deep .virtual-dropdown-popup-item span {\\n          margin: auto;\\n          text-decoration: none;\\n          color: inherit; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con:hover ::ng-deep .virtual-dropdown-popup-item {\\n        background-color: #EFEFEF; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.pre-selected ::ng-deep .virtual-dropdown-popup-item {\\n        background-color: #EFEFEF; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.pre-selected ::ng-deep .virtual-dropdown-popup-item::before {\\n          pointer-events: none;\\n          content: '>';\\n          position: absolute;\\n          left: 3px;\\n          opacity: 0.5; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.selected ::ng-deep .virtual-dropdown-popup-item {\\n        background: #335eea;\\n        color: #ffffff;\\n        pointer-events: none;\\n        cursor: not-allowed; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.separator-below {\\n        border-bottom: solid 1px #d3d3d3; }\\n  :host virtual-scroller .virtual-dropdown-popup-item-con.disabled {\\n        opacity: 0.64;\\n        pointer-events: none;\\n        cursor: not-allowed; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/virtual/dropdown/component/popup/virtual.dropdown.popup.component.scss\n// module id = 1413\n// module chunks = 1","module.exports = \"<!-- TRIGGER -->\\n<button class=\\\"{{ selector }}-trigger btn btn-sm\\\"\\n\\t\\t\\t\\t[disabled]=\\\"disabled\\\"\\n\\t\\t\\t\\t[style.background-color]=\\\"selectedItem?.color\\\"\\n\\t\\t\\t\\t[style.border-color]=\\\"selectedItem?.color\\\"\\n\\t\\t\\t\\t[style.color]=\\\"selectedItem?.textColor\\\"\\n\\t\\t\\t\\t(click)=\\\"toggle()\\\">\\n\\t\\t<i *ngIf=\\\"selectedItem?.icon\\\" class=\\\"{{ selector }}-ico fa fa-fw\\\" [ngClass]=\\\"iconNgClass(selectedItem)\\\"></i>\\n\\t\\t<ng-content selector=\\\".trigger-label-prefix\\\"></ng-content>\\n\\t\\t{{ selectedItem?.label }}\\n\\t\\t<i *ngIf=\\\"!disabled\\\" class=\\\"{{ selector }}-dir-ico fa\\\" [class.fa-sort-desc]=\\\"active\\\" [class.fa-sort-asc]=\\\"!active\\\"></i>\\n</button>\\n\\n<!-- POPUP -->\\n<virtual-dropdown-popup *ngIf=\\\"!disabled && active\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"items|virtualDropdownRemoveSelected:selectedItem:!removeSelectedFromList|virtualDropdownFilter:filterByKey:filterValue\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemHeigth]=\\\"itemHeigth\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemTemplate]=\\\"itemTemplate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[selectedItem]=\\\"selectedItem\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"select($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(scrolledToEnd)=\\\"emitScrolledToEnd($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"debug\\\">\\n\\t<!-- |dropdownListPipe:selectedItem -->\\n\\t<!-- SEARCH -->\\n\\t<input *ngIf=\\\"withSearch\\\"\\n\\t\\t\\t\\t type=\\\"search\\\"\\n\\t\\t\\t\\t class=\\\"form-control virtual-dropdown-input {{ selector }}-search-input\\\"\\n\\t\\t\\t\\t [placeholder]=\\\"searchPlaceholder\\\"\\n\\t\\t\\t\\t [value]=\\\"searchValue\\\"\\n\\t\\t\\t\\t (keyup)=\\\"emitSearchValueChange($event)\\\"\\n\\t\\t\\t\\t (change)=\\\"emitSearchValueChange($event)\\\" />\\n\\n\\t<!-- FILTER -->\\n\\t<input *ngIf=\\\"withFilter\\\"\\n\\t\\t\\t\\t type=\\\"search\\\"\\n\\t\\t\\t\\t class=\\\"form-control virtual-dropdown-input {{ selector }}-filter-input\\\"\\n\\t\\t\\t\\t [placeholder]=\\\"filterPlaceholder\\\"\\n\\t\\t\\t\\t [value]=\\\"filterValue\\\"\\n\\t\\t\\t\\t (keyup)=\\\"handleFilterValueChange($event)\\\"\\n\\t\\t\\t\\t (change)=\\\"handleFilterValueChange($event)\\\" />\\n\\n</virtual-dropdown-popup>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/virtual/dropdown/component/virtual.dropdown.component.html\n// module id = 1414\n// module chunks = 1","module.exports = \":host {\\n  position: relative;\\n  display: inline-block;\\n  vertical-align: middle;\\n  text-align: center; }\\n  :host .virtual-dropdown-trigger {\\n    position: relative;\\n    width: 100%;\\n    min-width: 150px;\\n    margin-left: 0 !important;\\n    margin-right: 0 !important;\\n    text-transform: none;\\n    background: none;\\n    border-color: lightgray !important;\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n    overflow: hidden;\\n    text-overflow: ellipsis; }\\n  :host .virtual-dropdown-dir-ico {\\n    position: absolute;\\n    top: 50%;\\n    margin-left: 8px;\\n    margin-top: -3px;\\n    color: lightgray; }\\n  :host .virtual-dropdown-popup .virtual-dropdown-input {\\n    width: 100%;\\n    min-width: 150px;\\n    border-radius: 0;\\n    border: 1px solid lightgray;\\n    margin: -1px;\\n    color: inherit; }\\n  :host.small .virtual-dropdown-trigger {\\n    min-width: 75px; }\\n  :host.small .virtual-dropdown-trigger span {\\n      position: relative;\\n      left: -5px; }\\n  :host.small .virtual-dropdown-dir-ico {\\n    margin-left: 2px; }\\n  :host.disabled {\\n    opacity: 0.64; }\\n  :host.active .virtual-dropdown-trigger {\\n    -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25);\\n            box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25); }\\n  :host.active .virtual-dropdown-dir-ico {\\n    margin-top: -0.7em; }\\n  :host.active.up .virtual-dropdown-trigger {\\n    border-top-color: transparent !important;\\n    border-top-left-radius: 0;\\n    border-top-right-radius: 0; }\\n  :host.active.down .virtual-dropdown-trigger {\\n    border-bottom-color: transparent !important;\\n    border-bottom-left-radius: 0;\\n    border-bottom-right-radius: 0; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/virtual/dropdown/component/virtual.dropdown.component.scss\n// module id = 1415\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_ST_RAPORT.TITLE'|translate:lang }}</h1>\\n\\n<!-- top panel(s) -->\\n<div class=\\\"panel-row\\\">\\n\\n\\t<!-- CRITERIA -->\\n\\t<div class=\\\"panel criteria panel-inverse\\\">\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<h4 class=\\\"panel-title\\\">{{ 'ANALYTICS_ST_RAPORT.HEADER.1'|translate:lang }}</h4>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<div class=\\\"row\\\">\\n\\t\\t\\t\\t<!-- type & daterange -->\\n\\t\\t\\t\\t<div class=\\\"ctrl-block\\\">\\n\\t\\t\\t\\t\\t<!-- type -->\\n\\t\\t\\t\\t\\t<div class=\\\"ctrl-con type\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.REPORT_TYPE'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t<report-type-picker size=\\\"sm\\\" [enable]=\\\"true\\\" [reportTypes]=\\\"REPORT_TYPES\\\" [activeType]=\\\"activeReportType\\\" (reportTypeChanged)=\\\"onReportTypeChange($event)\\\"></report-type-picker>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"false\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<!-- daterange -->\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"dateRange\\\" class=\\\"ctrl-con daterange\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.DATE_RANGE_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t<date-range-picker size=\\\"sm\\\" showIcon=\\\"none\\\" width=\\\"200px\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [options]=\\\"{opens: 'right', startDate:dateRange.startDate, endDate:dateRange.endDate}\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n\\t\\t\\t\\t\\t\\t</date-range-picker>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"false\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- geolocation -->\\n\\t\\t\\t\\t<div class=\\\"ctrl-block\\\">\\n\\t\\t\\t\\t\\t<!-- country -->\\n\\t\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.disabled]=\\\"!isCountrySelectorVisible\\\" [attr.title]=\\\"'select country'\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.COUNTRY_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'COUNTRY'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"countries$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"selectedCountryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[disabled]=\\\"!isCountrySelectorVisible\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"onSelectCountry($event)\\\">\\n\\t\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"isLoadingCountry;else resetCountryTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t<ng-template #resetCountryTmpl>\\n\\t\\t\\t\\t\\t\\t\\t\\t<button *ngIf=\\\"!!selectedCountryCode\\\" (click)=\\\"onResetCountry()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t<!-- region / city -->\\n\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"activeReportType!=REPORT_TYPE_GEO\\\">\\n\\t\\t\\t\\t\\t\\t<!-- region -->\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.disabled]=\\\"!isRegionSelectorVisible\\\" [attr.title]=\\\"!isRegionSelectorVisible?('ANALYTICS_ST_RAPORT.WORD.REGION_DISABLED'|translate:lang):null\\\">\\n\\t\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.REGION_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'REGION'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"regions$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"selectedRegion\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[disabled]=\\\"!isRegionSelectorVisible\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"onSelectRegion($event)\\\">\\n\\t\\t\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"isLoadingRegion;else resetRegionTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-template #resetRegionTmpl>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<button *ngIf=\\\"!!selectedRegion\\\" (click)=\\\"onResetRegion()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t<!-- city -->\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.disabled]=\\\"!isCitySelectorVisible\\\" [attr.title]=\\\"!isCitySelectorVisible?('ANALYTICS_ST_RAPORT.WORD.CITY_DISABLED'|translate:lang):null\\\">\\n\\t\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.CITY_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'CITY'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"selectedCity\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"cities$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[disabled]=\\\"!isCitySelectorVisible\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"onSelectCity($event)\\\">\\n\\t\\t\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"isLoadingCity;else resetCityTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-template #resetCityTmpl>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<button *ngIf=\\\"!!selectedCity\\\" (click)=\\\"onResetCity()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</ng-container>\\n\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- prefixed tags -->\\n\\t\\t\\t\\t<div *ngIf=\\\"prefixedTagsService.hasData; else smallSpinnerCon;\\\" class=\\\"ctrl-block\\\">\\n\\t\\t\\t\\t\\t<ng-container *ngFor=\\\"let prefix of prefixedTagsService.prefixes();\\\">\\n\\t\\t\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"prefixedTagTmpl;context:{name: prefix, data:prefixedTagsService.value(prefix)}\\\"></ng-container>\\n\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t<ng-template #prefixedTagTmpl let-name=\\\"name\\\" let-data=\\\"data\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.active]=\\\"!!data.selected?.value\\\">\\n\\t\\t\\t\\t\\t\\t\\t<label>{{ name|camelCaseToSpace|lowercase|capitalizeFirst }}</label>\\n\\t\\t\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"data.selected?.value\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"data.$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withSearch]=\\\"data.total > 50\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[searchValue]=\\\"data.search.text\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(searchValueChange)=\\\"prefixedSearch(data, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(scrolledToEnd)=\\\"prefixedScrollEnd(data, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"prefixedTagSelect(data, $event)\\\">\\n\\t\\t\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"data.loading;else resetPrefixedTagTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-template #resetPrefixedTagTmpl>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<button *ngIf=\\\"!!data.selected?.value\\\" (click)=\\\"prefixedTagReset(data)\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- tags -->\\n\\t\\t\\t\\t<div *ngIf=\\\"activeReportType != REPORT_TYPE_TAGS\\\" class=\\\"ctrl-block\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"ctrl-con tags\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'ANALYTICS_ST_RAPORT.WORD.TAG_SELECTION'|translate:lang }}</label>\\n\\t\\t\\t\\t\\t\\t<tag-input theme=\\\"ngx-chips-bradmax-theme\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t modelAsStrings=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'ANALYTICS_TAG_SERVICE.PLACEHOLDER'|translate:lang\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [secondaryPlaceholder]=\\\"'ANALYTICS_TAG_SERVICE.INITIAL_PLACEHOLDER'|translate:lang\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (onAdd)=\\\"onTagAdd($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [onAdding]=\\\"existingTagSelector.onTagAdding\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (onRemove)=\\\"onTagRemove($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"existingTagSelector.selectedTagsList\\\">\\n\\t\\t\\t\\t\\t\\t\\t<tag-input-dropdown [autocompleteObservable]=\\\"existingTagSelector.onTagSearch\\\"></tag-input-dropdown>\\n\\t\\t\\t\\t\\t\\t</tag-input>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"isSearchingTags\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"smallSpinnerCon\\\"></ng-container>\\n\\t\\t\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!--tmpl:smallSpinnerCon -->\\n\\t\\t\\t\\t<ng-template #smallSpinnerCon>\\n\\t\\t\\t\\t\\t<div class=\\\"spinner-con\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"spinner-small\\\"></div>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\n\\t<!-- STATS -->\\n\\t<div class=\\\"panel stats\\\">\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<!-- class=\\\"row\\\" -->\\n\\t\\t\\t<ng-container *ngIf=\\\"raportItems; else noteBlock\\\">\\n\\t\\t\\t\\t<!-- class=\\\"col-lg-12 col-md-4\\\" -->\\n\\t\\t\\t\\t<ng-container *ngFor=\\\"let raportItem of raportItems;\\\">\\n\\t\\t\\t\\t\\t<div [ngClass]=\\\"raportItem.color\\\">\\n\\t\\t\\t\\t\\t\\t<div class=\\\"stats-icon stats-icon-lg\\\"><i [ngClass]=\\\"raportItem.icon\\\"></i></div>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"stats-title\\\">{{ raportItem.title }}</div>\\n\\t\\t\\t\\t\\t\\t<div class=\\\"stats-number\\\">{{ (!!raportItem.value?raportItem.value:0) | number:'1.0-2' }}</div>\\n\\t\\t\\t\\t\\t\\t<!-- <div class=\\\"stats-desc\\\">{{ raportItem.desc }}</div> -->\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t</ng-container>\\n\\n\\t\\t\\t<ng-template #noteBlock>\\n\\t\\t\\t\\t<div class=\\\"note note-secondary\\\">\\n\\t\\t\\t\\t\\t<h4> {{'ANALYTICS_ST_RAPORT.INFO.HEADER'|translate:lang }}</h4>{{'ANALYTICS_ST_RAPORT.INFO.NOTE'|translate:lang }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n\\n</div>\\n\\n<!-- bottom panel(s) -->\\n<div class=\\\"panel-row\\\">\\n\\n\\t<!-- chart panel -->\\n\\t<div *ngIf=\\\"chartUsersViewsHistory && (activeReportType === REPORT_TYPE_REPORT || activeReportType === REPORT_TYPE_TAGS)\\\" class=\\\"panel chart panel-inverse\\\">\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<div class=\\\"panel-title\\\">\\n\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white m-r-5\\\" type=\\\"button\\\" (click)=\\\"exportCsv()\\\"><i class=\\\"fa fa-download\\\"></i>CSV</button>\\n\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"activeReportType === REPORT_TYPE_REPORT\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_AND_USERS_HISTORY'|translate:lang }}</ng-container>\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"activeReportType === REPORT_TYPE_TAGS\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.TAGS'|translate:lang }}</ng-container>\\n\\n\\t\\t\\t\\t<chart-granularity size=\\\"sm\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [types]=\\\"GRANULARITY_TYPES\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [activeType]=\\\"activeGranularity\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (onTypeChange)=\\\"onGranularityChange($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t #granularity>\\n\\t\\t\\t\\t</chart-granularity>\\n\\t\\t\\t</div>\\n\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<chart [chartType]=\\\"'lineTime'\\\"\\n\\t\\t\\t\\t\\t\\t [chartData]=\\\"chartUsersViewsHistory\\\"\\n\\t\\t\\t\\t\\t\\t [chartLabels]=\\\"chartLabelsReport\\\"\\n\\t\\t\\t\\t\\t\\t [startDate]=\\\"dateRange.startDate\\\"\\n\\t\\t\\t\\t\\t\\t [endDate]=\\\"dateRange.endDate\\\"\\n\\t\\t\\t\\t\\t\\t [granularity]=\\\"activeGranularity\\\">\\n\\t\\t\\t</chart>\\n\\n\\n\\n\\t\\t\\t<ng-container *ngIf=\\\"activeReportType === REPORT_TYPE_TAGS\\\">\\n\\n\\t\\t\\t\\t<div *ngIf=\\\"tagsDataTable == null || tagsDataTable?.length == 0; else tagsTable;\\\" style=\\\"text-align:center;line-height:100px;font-size:16px;\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.NO_DATA_FOR_TAGS_LIST'|translate:lang }}</div>\\n\\n\\t\\t\\t\\t<ng-template #tagsTable>\\n\\t\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered analytics-geo-table m-t-30\\\">\\n\\t\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>#</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_ST_RAPORT.WORD.TAG'|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_ST_RAPORT.WORD.VIEWS'|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngFor=\\\"let rec of tagsDataTable; let i = index\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<tr *ngIf=\\\"i >= (PAGER.page-1) * PAGER.page_size && i < PAGER.page * PAGER.page_size\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.position}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.tag}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t<td>{{rec.views}}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t\\t<pager [page]=\\\"PAGER.page\\\" [pageSize]=\\\"PAGER.page_size\\\" [totalItems]=\\\"PAGER.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</ng-container>\\n\\n\\n\\t\\t</div>\\n\\n\\t</div>\\n\\n\\t<!-- geolocation panels-->\\n\\t<ng-container *ngIf=\\\"activeReportType === REPORT_TYPE_GEO\\\">\\n\\t\\t<div class=\\\"panel geolocation panel-inverse \\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">\\n\\t\\t\\t\\t\\t{{'ANALYTICS_ST_RAPORT.SUBTITLES.MAP_VIEWS'|translate:lang }}\\n\\t\\t\\t\\t\\t<geo-picker *ngIf=\\\"isRegionSelectorVisible\\\" size=\\\"sm\\\" [enable]=\\\"true\\\" [granularityTypes]=\\\"GEO_GRANULARITY_TYPES\\\" [activeType]=\\\"activeGeoType\\\" (geoTypeChanged)=\\\"onGeoTypeChanged($event)\\\"></geo-picker>\\n\\t\\t\\t\\t</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<div class=\\\"analytics-geo-map\\\">\\n\\t\\t\\t\\t\\t<google-chart [data]=\\\"mapChartData\\\" (chartSelect)=\\\"onMapRegionClick($event)\\\"></google-chart>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"panel geolocation panel-inverse\\\">\\n\\t\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t\\t<h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.DETAILS_GEOLOCATION'|translate:lang }}</h4>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t\\t<table class=\\\"table table-striped table-bordered analytics-geo-table\\\">\\n\\t\\t\\t\\t\\t<thead>\\n\\t\\t\\t\\t\\t\\t<tr>\\n\\t\\t\\t\\t\\t\\t\\t<td>#</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ ('ANALYTICS_GEO.WORD.' + (!!selectedCountryCode ? 'REGION' : 'COUNTRY'))|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.VIEWS'|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t\\t<td>{{ 'ANALYTICS_GEO.WORD.USERS'|translate:lang }}</td>\\n\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t</thead>\\n\\t\\t\\t\\t\\t<tbody>\\n\\t\\t\\t\\t\\t\\t<ng-container *ngFor=\\\"let rec of geoDataTable; let i = index;\\\">\\n\\t\\t\\t\\t\\t\\t\\t<tr *ngIf=\\\"i >= (PAGER.page - 1) * PAGER.page_size && i < PAGER.page * PAGER.page_size\\\" [ngClass]=\\\"{'clickable': (selectedCountryCode===null)}\\\" (click)=\\\"onCountryTableRowClick(rec)\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ i+1 }}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td><span [ngClass]=\\\"rec.flag\\\"></span> {{ rec.label }}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ rec.views }}</td>\\n\\t\\t\\t\\t\\t\\t\\t\\t<td>{{ rec.users }}</td>\\n\\t\\t\\t\\t\\t\\t\\t</tr>\\n\\t\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t</tbody>\\n\\t\\t\\t\\t</table>\\n\\t\\t\\t\\t<pager [page]=\\\"PAGER.page\\\" [pageSize]=\\\"PAGER.page_size\\\" [totalItems]=\\\"PAGER.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</ng-container>\\n\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/st/component/view/st.view.component.html\n// module id = 1418\n// module chunks = 1","module.exports = \":host {\\n  /* .date-range-ctrl {\\n\\t\\toutline: 10px dashed orangered;\\n\\t\\tdisplay: flex;\\n\\t\\tflex-wrap: wrap;\\n\\t\\tflex-direction: row;\\n\\t\\tjustify-content: space-between;\\n\\t\\t// max-width: 650px;\\n\\n\\t\\tlabel {\\n\\t\\t\\tmin-width: 150px;\\n\\t\\t}\\n\\n\\t\\t.date-range-inputs {\\n\\t\\t\\tflex: 1;\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tflex-wrap: nowrap;\\n\\t\\t\\tflex-direction: column;\\n\\t\\t\\t// justify-content: space-between;\\n\\t\\t\\talign-items: flex-start;\\n\\n\\t\\t\\tchart-granularity,\\n\\t\\t\\tdate-range-picker {\\n\\t\\t\\t\\tmargin-bottom: 8px;\\n\\t\\t\\t}\\n\\n\\t\\t\\tchart-granularity {\\n\\t\\t\\t\\t::ng-deep {\\n\\t\\t\\t\\t\\t.btn-group {\\n\\t\\t\\t\\t\\t\\tdisplay: flex;\\n\\t\\t\\t\\t\\t\\tflex-direction: row;\\n\\t\\t\\t\\t\\t\\tflex-wrap: nowrap;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n*/ }\\n  :host .panel-row {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -ms-flex-wrap: wrap;\\n        flex-wrap: wrap;\\n    margin: 0 -6px; }\\n  :host .panel-row .panel {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column;\\n      margin: 6px;\\n      max-width: 100%; }\\n  :host .panel-row .panel .panel-heading {\\n        max-width: 100%; }\\n  :host .panel-row .panel .panel-body {\\n        max-width: 100%; }\\n  :host .panel-row .panel .table-loader {\\n        height: 330px;\\n        position: relative; }\\n  :host .panel-row .panel .spinner-con {\\n        position: relative; }\\n  :host .panel-row .panel.criteria {\\n        -webkit-box-flex: 3;\\n            -ms-flex: 3;\\n                flex: 3; }\\n  :host .panel-row .panel.criteria .ctrl-block {\\n          -webkit-box-flex: 1;\\n              -ms-flex: 1;\\n                  flex: 1;\\n          display: -webkit-box !important;\\n          display: -ms-flexbox !important;\\n          display: flex !important;\\n          -ms-flex-wrap: wrap;\\n              flex-wrap: wrap; }\\n  :host .panel-row .panel.criteria .ctrl-con {\\n          display: -webkit-box;\\n          display: -ms-flexbox;\\n          display: flex;\\n          -webkit-box-align: center;\\n              -ms-flex-align: center;\\n                  align-items: center;\\n          max-width: 450px;\\n          padding: 4px; }\\n  :host .panel-row .panel.criteria .ctrl-con.tags {\\n            min-width: unset;\\n            max-width: unset; }\\n  :host .panel-row .panel.criteria .ctrl-con label {\\n            min-width: 100px;\\n            max-width: 100px;\\n            font-size: 0.75em;\\n            text-align: end;\\n            padding-left: 4px;\\n            padding-right: 6px;\\n            margin: 0; }\\n  :host .panel-row .panel.criteria .ctrl-con label::after {\\n              content: \\\":\\\"; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep date-range-picker {\\n            -webkit-box-flex: 1;\\n                -ms-flex: 1;\\n                    flex: 1;\\n            margin: 0;\\n            min-width: 150px;\\n            max-width: 150px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep date-range-picker .form-control {\\n              text-align: center; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep virtual-dropdown {\\n            -webkit-box-flex: 1;\\n                -ms-flex: 1;\\n                    flex: 1;\\n            margin: 0;\\n            min-width: 150px;\\n            max-width: 150px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep virtual-dropdown-trigger {\\n              border-color: lightgray !important; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep chart-granularity {\\n            -webkit-box-flex: 1;\\n                -ms-flex: 1;\\n                    flex: 1;\\n            margin: 0;\\n            min-width: 150px;\\n            max-width: 150px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep chart-granularity .btn-group {\\n              display: -webkit-box;\\n              display: -ms-flexbox;\\n              display: flex;\\n              -webkit-box-orient: horizontal;\\n              -webkit-box-direction: normal;\\n                  -ms-flex-direction: row;\\n                      flex-direction: row;\\n              -ms-flex-wrap: nowrap;\\n                  flex-wrap: nowrap;\\n              -webkit-box-pack: justify;\\n                  -ms-flex-pack: justify;\\n                      justify-content: space-between; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep chart-granularity .btn-group .btn {\\n                padding-left: 4px;\\n                padding-right: 4px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input {\\n            font-size: 0.75em; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag-input-form form input.ng2-tag-input__text-input {\\n              height: 30px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag {\\n              border-color: #335eea !important;\\n              background: #335eea !important;\\n              color: #fff !important;\\n              border-radius: 3px;\\n              height: 30px;\\n              line-height: 26px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon {\\n                color: rgba(255, 255, 255, 0.64) !important; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon svg {\\n                  height: 26px; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon svg path {\\n                    fill: currentColor !important; }\\n  :host .panel-row .panel.criteria .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon:hover {\\n                  -webkit-transform: none !important;\\n                          transform: none !important;\\n                  color: #fff !important; }\\n  :host .panel-row .panel.criteria .ctrl-con .ctrl-addon {\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-align: center;\\n                -ms-flex-align: center;\\n                    align-items: center;\\n            -webkit-box-pack: center;\\n                -ms-flex-pack: center;\\n                    justify-content: center;\\n            min-width: 24px;\\n            max-width: 24px;\\n            min-height: 24px;\\n            max-height: 24px; }\\n  :host .panel-row .panel.criteria .ctrl-con .ctrl-addon .btn {\\n              background: transparent; }\\n  :host .panel-row .panel.criteria .ctrl-con .ctrl-addon .spinner-con .spinner-small {\\n              width: 16px;\\n              height: 16px;\\n              margin: -8px 0 0 -8px; }\\n  :host .panel-row .panel.criteria .ctrl-con.disabled {\\n            cursor: not-allowed; }\\n  :host .panel-row .panel.criteria .ctrl-con.disabled label {\\n              opacity: 0.64; }\\n  :host .panel-row .panel.criteria .ctrl-con.disabled * {\\n              pointer-events: none; }\\n  :host .panel-row .panel.criteria .ctrl-con.active ::ng-deep virtual-dropdown .virtual-dropdown-trigger {\\n            border-color: #335eea !important;\\n            background: #335eea !important;\\n            color: #fff !important; }\\n  :host .panel-row .panel.stats {\\n        -webkit-box-flex: 1;\\n            -ms-flex: 1;\\n                flex: 1;\\n        background-color: transparent;\\n        border-color: transparent;\\n        border-radius: 3px;\\n        overflow: hidden; }\\n  :host .panel-row .panel.stats .panel-body {\\n          -webkit-box-flex: 1;\\n              -ms-flex: 1;\\n                  flex: 1;\\n          display: -webkit-box;\\n          display: -ms-flexbox;\\n          display: flex;\\n          -webkit-box-orient: vertical;\\n          -webkit-box-direction: normal;\\n              -ms-flex-direction: column;\\n                  flex-direction: column;\\n          -ms-flex-wrap: wrap;\\n              flex-wrap: wrap;\\n          padding: 0; }\\n  :host .panel-row .panel.stats .panel-body .widget {\\n            -webkit-box-flex: 1;\\n                -ms-flex: 1;\\n                    flex: 1;\\n            margin-bottom: 0;\\n            border-radius: 0; }\\n  :host .panel-row .panel.chart .panel-title {\\n        position: relative; }\\n  :host .panel-row .panel.chart .panel-title ::ng-deep chart-granularity {\\n          position: absolute;\\n          right: 0;\\n          top: 0;\\n          bottom: 0;\\n          height: 30px;\\n          margin: auto; }\\n  :host .panel-row .panel.chart .panel-title ::ng-deep chart-granularity .btn {\\n            margin: 0; }\\n  :host .panel-row .panel.geolocation .panel-title {\\n        position: relative; }\\n  :host .panel-row .panel.geolocation .panel-title ::ng-deep geo-picker {\\n          position: absolute;\\n          right: 0;\\n          top: 0;\\n          bottom: 0;\\n          height: 30px;\\n          margin: auto; }\\n  :host .panel-row .panel.geolocation .panel-title ::ng-deep geo-picker .btn {\\n            margin: 0; }\\n  :host .analytics-geo-table .clickable {\\n    cursor: pointer; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/st/component/view/st.view.component.scss\n// module id = 1419\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_ST_RAPORT.TITLE' | translate:lang }}<a *ngIf=\\\"isBetaMode\\\" class=\\\"btn btn-xs\\\" [routerLink]=\\\"['.', 'beta']\\\">&beta;</a></h1>\\n\\n<div class=\\\"row m-b-10\\\">\\n    <report-type-picker\\n        size=\\\"lg\\\" class=\\\"m-l-10\\\"\\n        [enable] = \\\"true\\\"\\n        [reportTypes]=\\\"reportTypes\\\"\\n        [activeType]=\\\"activeReportType\\\"\\n        (reportTypeChanged)=\\\"onReportTypeChange($event)\\\"\\n    >\\n    </report-type-picker>\\n</div>\\n<div class=\\\"row\\\">\\n    <div class=\\\"col-md-7\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\"> {{'ANALYTICS_ST_RAPORT.HEADER.1' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div class=\\\"row\\\">\\n\\n                    <div class=\\\"report-criteria col-md-12 m-b-30\\\">\\n                        <div class=\\\"form-group row m-b-10\\\">\\n                            <label class=\\\"col-form-label col-md-3\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.DATE_RANGE_SELECTION' | translate:lang }}</label>\\n                            <div class=\\\"m-r-10\\\">\\n                              <date-range-picker class=\\\"m-l-10 pull-right\\\"\\n                                  size=\\\"sm\\\"\\n                                  showIcon=\\\"right\\\"\\n                                  [enable]=\\\"true\\\"\\n                                  [options]=\\\"{startDate:dateRange.startDate, endDate:dateRange.endDate}\\\"\\n                                  (selectionChanged)=\\\"onDateRangeChanged($event)\\\">\\n                              </date-range-picker></div>\\n                              <div class=\\\"col-md-5\\\">\\n\\n                              <chart-granularity *ngIf=\\\"activeReportType!='geolocation'\\\" #granularity size=\\\"sm\\\"\\n                                [types]=\\\"granularityTypes\\\"\\n                                [activeType]=\\\"activeGranularity\\\"\\n                                (onTypeChange)=\\\"onGranularityChange($event)\\\">\\n                              </chart-granularity>\\n                            </div>\\n\\n                        </div>\\n                        <div class=\\\"form-group row m-b-10\\\">\\n                            <label class=\\\"col-form-label col-md-3\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.GEO_SELECTION' | translate:lang }}</label>\\n                            <div class=\\\"col-md-9\\\" >\\n                              <div *ngIf=\\\"countriesList; else smallSpinnerBlock;\\\" >\\n                                <dropdown style=\\\"vertical-align: top; margin-top: 2;\\\" class=\\\"m-r-10 m-b-10\\\" [disabled]=\\\"!isCountrySelectorVisible\\\" [hidden]=\\\"!isCountrySelectorVisible\\\" [model]=\\\"countriesList\\\" [value]=\\\"selectedCountry\\\" (onSelect)=\\\"onSelectCountry($event)\\\" ></dropdown>\\n                                <span *ngIf=\\\"activeReportType!='geolocation'; else GEOBLOCK;\\\">\\n                                    <dropdown class=\\\"m-r-10 m-b-10\\\" [disabled]=\\\"!isRegionSelectorVisible\\\" [hidden]=\\\"!isRegionSelectorVisible\\\" [model]=\\\"regionsList\\\" (onSelect)=\\\"onSelectRegion($event)\\\" ></dropdown>\\n                                    <dropdown class=\\\"m-r-10 m-b-10\\\" [disabled]=\\\"!isCitySelectorVisible\\\" [hidden]=\\\"!isCitySelectorVisible\\\" [model]=\\\"citiesList\\\" (onSelect)=\\\"onSelectCity($event)\\\"></dropdown>\\n                                </span>\\n                                <ng-template #GEOBLOCK>\\n                                    <!---->\\n                                    <geo-picker\\n                                        [hidden]=\\\"!isRegionSelectorVisible\\\"\\n                                        size=\\\"sm\\\" class=\\\"m-l-10\\\"\\n                                        [enable] = \\\"true\\\"\\n                                        [granularityTypes]=\\\"geoGranularityTypes\\\"\\n                                        [activeType]=\\\"activeGeoType\\\"\\n                                        (geoTypeChanged)=\\\"onGeoTypeChanged($event)\\\"\\n                                    > </geo-picker>\\n                                </ng-template>\\n                              </div>\\n                              <ng-template #smallSpinnerBlock>\\n                                <span class=\\\"spinner-small\\\"></span>\\n                              </ng-template>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"activeReportType!='tags'\\\" class=\\\"form-group row\\\" style=\\\"margin-bottom:10px;\\\" >\\n                            <label class=\\\"col-form-label col-md-3\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.TAG_SELECTION' | translate:lang }}</label>\\n                            <div class=\\\"col-md-9\\\">\\n                              <tag-input class=\\\"m-l-0\\\"\\n                                    [(ngModel)] = \\\"existingTagSelector.selectedTagsList\\\"\\n                                    modelAsStrings=\\\"true\\\"\\n                                    (onAdd)=\\\"onTagAdd($event)\\\"\\n                                    [onAdding]=\\\"existingTagSelector.onTagAdding\\\"\\n                                    (onRemove)=\\\"onTagRemove($event)\\\"\\n                                    theme=\\\"ngx-chips-bradmax-theme\\\"\\n                                    placeholder=\\\"{{ 'ANALYTICS_TAG_SERVICE.PLACEHOLDER' | translate:lang }}\\\"\\n                                    secondaryPlaceholder=\\\"{{ 'ANALYTICS_TAG_SERVICE.INITIAL_PLACEHOLDER' | translate:lang }}\\\">\\n                                <tag-input-dropdown [autocompleteObservable]=\\\"existingTagSelector.onTagSearch\\\"></tag-input-dropdown>\\n                              </tag-input>\\n                            </div>\\n                        </div>\\n                        <!-- \\n                        <div class=\\\"form-group row m-b-10\\\">\\n                            <label class=\\\"col-form-label col-md-3\\\">{{ 'ANALYTICS_ST_RAPORT.WORD.DEMOGRAPHY_SELECTION' | translate:lang }}</label>\\n                            <div class=\\\"col-md-9 form-check form-check-inline\\\">\\n                               <div class=\\\"row\\\" >\\n                                <div *ngIf=\\\"activeReportType!='gender'\\\" class=\\\"col-md-12\\\">\\n                                   <span class=\\\"m-r-10 m-b-10\\\" style=\\\"display:inline-block;position:relative;vertical-align: middle;width:60px;line-height: 30px;\\\">\\n                                      {{ 'ANALYTICS_ST_RAPORT.WORD.GENDER_SELECTION' | translate:lang }}\\n                                   </span>\\n                                   <dropdown class=\\\"m-r-10 m-b-10\\\" [model]=\\\"demographySexList\\\" [value]=\\\"selectedSex\\\" (onSelect)=\\\"onDropdownSelectSex($event)\\\"></dropdown>\\n                                </div>\\n                               </div>\\n                               <div *ngIf=\\\"activeReportType!='age'\\\" class=\\\"row\\\">\\n                                   <div class=\\\"col-md-12 demography-age-selector\\\">\\n                                     <span class=\\\"m-r-10 m-b-10\\\" style=\\\"width:60px;display:inline-block;position:relative;vertical-align: middle;line-height: 30px;\\\">\\n                                      {{ 'ANALYTICS_ST_RAPORT.WORD.AGE_RANGE_SELECTION' | translate:lang }}\\n                                     </span>\\n                                     <dropdown class=\\\"m-r-10 m-b-10\\\" [model]=\\\"demographyAgeFrom\\\" [value]=\\\"selectedAgeFrom\\\" (onSelect)=\\\"onDropdownSelectAgeFrom($event)\\\" ></dropdown>\\n                                     <dropdown class=\\\"m-r-10 m-b-10\\\" [model]=\\\"demographyAgeTo\\\" [value]=\\\"selectedAgeTo\\\" (onSelect)=\\\"onDropdownSelectAgeTo($event)\\\"></dropdown>\\n                                   </div>\\n                               </div>\\n                            </div>\\n                        </div>\\n                         -->\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"col-md-5\\\">\\n        <div class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\"> {{'ANALYTICS_ST_RAPORT.HEADER.3' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <div *ngIf=\\\"raportItems; else noteBlock\\\" class=\\\"row report\\\">\\n                        <div *ngFor=\\\"let raportItem of raportItems;\\\" class=\\\"col-md-4 col-sm-4\\\">\\n                            <div [ngClass]=\\\"raportItem.color\\\">\\n                                <div class=\\\"stats-icon stats-icon-lg\\\"><i [ngClass]=\\\"raportItem.icon\\\"></i></div>\\n                                <div class=\\\"stats-title\\\">{{ raportItem.title }}</div>\\n                                <div class=\\\"stats-number\\\">{{ raportItem.value | number:'1.0-2' }}</div>\\n                                <div class=\\\"stats-desc\\\">{{ raportItem.desc }}</div>\\n                            </div>\\n                        </div>\\n                </div>\\n                <ng-template #noteBlock>\\n                    <div class=\\\"note note-secondary\\\">\\n                        <h4> {{'ANALYTICS_ST_RAPORT.INFO.HEADER' | translate:lang }}</h4>\\n                        {{'ANALYTICS_ST_RAPORT.INFO.NOTE' | translate:lang }}\\n                    </div>\\n                </ng-template>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<!-- bottom panel(s) -->\\n\\n<!--\\n\\n\\n-->\\n<div class=\\\"row\\\" >\\n    <!-- report panel -->\\n    <div *ngIf=\\\"activeReportType == 'report'\\\" class=\\\"col-md-12\\\">\\n        <div *ngIf=\\\"chartUsersViewsHistory\\\" class=\\\"panel panel-inverse\\\">\\n            <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_AND_USERS_HISTORY' | translate:lang }}</h4>\\n            </div>\\n            <div class=\\\"panel-body\\\">\\n                <chart\\n                    [chartData]=\\\"chartUsersViewsHistory\\\"\\n                    [chartLabels]=\\\"chartLabelsReport\\\"\\n                    [chartType]=\\\"'lineTime'\\\"\\n                    [startDate]=\\\"dateRange.startDate\\\" [endDate]=\\\"dateRange.endDate\\\"\\n                    [granularity]=\\\"activeGranularity\\\">\\n                </chart>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <!-- geolocation panels-->\\n        <div *ngIf=\\\"activeReportType == 'geolocation'\\\" class=\\\"col-md-6\\\">\\n            <div class=\\\"panel panel-inverse \\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.MAP_VIEWS' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <div class=\\\"analytics-geo-map\\\" >\\n                        <google-chart\\n                            [data]=\\\"mapChartData\\\"\\n                            (chartSelect)=\\\"onMapRegionClick($event)\\\"\\n                        ></google-chart>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"activeReportType == 'geolocation'\\\" class=\\\"col-md-6\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.DETAILS_GEOLOCATION' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n\\n                    <table class=\\\"table table-striped table-bordered analytics-geo-table\\\">\\n                        <thead>\\n                            <tr>\\n                                <td>#</td>\\n                                <td *ngIf=\\\"selectedCountryCode===null\\\">{{ 'ANALYTICS_GEO.WORD.COUNTRY' | translate:lang }}</td>\\n                                <td *ngIf=\\\"selectedCountryCode!==null\\\">{{ 'ANALYTICS_GEO.WORD.REGION' | translate:lang }}</td>\\n                                <td>{{ 'ANALYTICS_GEO.WORD.VIEWS' | translate:lang }}</td>\\n                                <td>{{ 'ANALYTICS_GEO.WORD.USERS' | translate:lang }}</td>\\n                            </tr>\\n                        </thead>\\n                        <tbody>\\n                            <tr *ngFor=\\\"let rec of geoDataTable; let i = index\\\" [ngClass]=\\\"{'clickable': (selectedCountryCode===null)}\\\" (click)=\\\"onCountryTableRowClick(rec)\\\">\\n                                <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{i+1}}</td>\\n                                <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" ><span [ngClass]=\\\"rec.flag\\\" ></span> {{rec.label}}</td>\\n                                <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.views}}</td>\\n                                <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.users}}</td>\\n                            </tr>\\n                        </tbody>\\n                    </table>\\n                    <pager [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"pagingOptions.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n                </div>\\n            </div>\\n        </div>\\n\\n    <!-- gender panels-->\\n        <div *ngIf=\\\"activeReportType == 'gender'\\\" class=\\\"col-md-4\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_PER_GENDER' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <chart *ngIf=\\\"(chartDemSex.labels != null) && (chartDemSex.labels.length > 0)\\\"\\n                        [chartData]=\\\"chartDemSex.data\\\"\\n                        [chartLabels]=\\\"chartDemSex.labels\\\"\\n                        [chartType]=\\\"'doughnut'\\\"\\n                        >\\n                    </chart>\\n                    <div *ngIf=\\\"(chartDemSex.labels != null) && (chartDemSex.labels.length == 0)\\\" style=\\\"text-align:center;line-height:300px;font-size:16px;\\\">\\n                        {{ 'ANALYTICS_ST_RAPORT.WORD.NO_DATA' | translate:lang }}\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"activeReportType == 'gender'\\\" class=\\\"col-md-8\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_AND_USERS_HISTORY' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <chart\\n                       [chartData]=\\\"chartUsersViewsHistory\\\"\\n                       [chartLabels]=\\\"chartLabelsReport\\\"\\n                       [chartType]=\\\"'lineTime'\\\"\\n                       [startDate]=\\\"dateRange.startDate\\\" [endDate]=\\\"dateRange.endDate\\\"\\n                       [granularity]=\\\"activeGranularity\\\">\\n                   </chart>\\n                </div>\\n            </div>\\n        </div>\\n\\n    <!-- age panels-->\\n        <div *ngIf=\\\"activeReportType == 'age'\\\" class=\\\"col-md-4\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                    <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_PER_AGE_SEGMENT' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <chart *ngIf=\\\"(chartDemAge.labels != null) && (chartDemAge.labels.length > 0)\\\"\\n                        [chartData]=\\\"chartDemAge.data\\\"\\n                        [chartLabels]=\\\"chartDemAge.labels\\\"\\n                        [chartType]=\\\"'horizontalBar'\\\"\\n                        >\\n                    </chart>\\n                    <div *ngIf=\\\"(chartDemAge != null) && (chartDemAge.labels != null) && (chartDemAge.labels.length == 0)\\\" style=\\\"text-align:center;line-height:300px;font-size:16px;\\\">\\n                        {{ 'ANALYTICS_ST_RAPORT.WORD.NO_DATA' | translate:lang }}\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"activeReportType == 'age'\\\" class=\\\"col-md-8\\\">\\n            <div class=\\\"panel panel-inverse\\\">\\n                <div class=\\\"panel-heading\\\">\\n                <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.VIEWS_AND_USERS_HISTORY' | translate:lang }}</h4>\\n                </div>\\n                <div class=\\\"panel-body\\\">\\n                    <chart\\n                       [chartData]=\\\"chartUsersViewsHistory\\\"\\n                       [chartLabels]=\\\"chartLabelsReport\\\"\\n                       [chartType]=\\\"'lineTime'\\\"\\n                       [startDate]=\\\"dateRange.startDate\\\" [endDate]=\\\"dateRange.endDate\\\"\\n                       [granularity]=\\\"activeGranularity\\\">\\n                     </chart>\\n                </div>\\n            </div>\\n        </div>\\n\\n    <!-- tags panel-->\\n    <div *ngIf=\\\"activeReportType == 'tags'\\\" class=\\\"col-md-12\\\">\\n\\n    <div class=\\\"panel panel-inverse\\\">\\n        <div class=\\\"panel-heading\\\">\\n            <h4 class=\\\"panel-title\\\">{{'ANALYTICS_ST_RAPORT.SUBTITLES.TAGS' | translate:lang }}</h4>\\n        </div>\\n        <div class=\\\"panel-body\\\">\\n            <chart\\n              [chartData]=\\\"chartUsersViewsHistory\\\"\\n              [chartLabels]=\\\"chartLabelsReport\\\"\\n              [chartType]=\\\"'lineTime'\\\"\\n              [startDate]=\\\"dateRange.startDate\\\" [endDate]=\\\"dateRange.endDate\\\"\\n              [granularity]=\\\"activeGranularity\\\">\\n            </chart>\\n\\n            <div *ngIf=\\\"(tagsDataTable == null) || (tagsDataTable.length == 0)\\\" style=\\\"text-align:center;line-height:100px;font-size:16px;\\\">\\n                     {{ 'ANALYTICS_ST_RAPORT.WORD.NO_DATA_FOR_TAGS_LIST' | translate:lang }}\\n            </div>\\n\\n            <table *ngIf=\\\"(tagsDataTable != null) && (tagsDataTable.length > 0)\\\" class=\\\"table table-striped table-bordered analytics-geo-table m-t-30\\\">\\n                <thead>\\n                    <tr>\\n                        <td>#</td>\\n                        <td>{{ 'ANALYTICS_ST_RAPORT.WORD.TAG' | translate:lang }}</td>\\n                        <td>{{ 'ANALYTICS_ST_RAPORT.WORD.VIEWS' | translate:lang }}</td>\\n                    </tr>\\n                </thead>\\n                <tbody>\\n                        <tr *ngFor=\\\"let rec of tagsDataTable; let i = index\\\">\\n                          <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.position}}</td>\\n                          <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.tag}}</td>\\n                          <td *ngIf=\\\" i >= (pagingOptions.page-1)*pagingOptions.page_size && i < pagingOptions.page*pagingOptions.page_size \\\" >{{rec.views}}</td>\\n                        </tr>\\n                </tbody>\\n            </table>\\n            <pager *ngIf=\\\"(tagsDataTable != null) && (tagsDataTable.length > 0)\\\" [page]=\\\"pagingOptions.page\\\" [pageSize]=\\\"pagingOptions.page_size\\\" [totalItems]=\\\"pagingOptions.total_items\\\" (pageChanged)=\\\"onPageChanged($event)\\\" [pagesVisibleNum]=\\\"5\\\"></pager>\\n        </div>\\n    </div>\\n\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/st/raport/stRaport.view.component.html\n// module id = 1420\n// module chunks = 1","module.exports = \"<virtual-scroller *ngIf=\\\"items\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[style.height.px]=\\\"listHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[horizontal]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"items\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[compareItems]=\\\"compareListItems\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsUpdate)=\\\"handleListVieportUpdate($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsChange)=\\\"handleListVieportChange($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsStart)=\\\"handleListVieportStart($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(vsEnd)=\\\"handleListVieportEnd($event)\\\">\\n\\t<div class=\\\"list-top\\\"></div>\\n\\t<div class=\\\"list-scroller\\\" #container>\\n\\t\\t<ng-content selector=\\\".list-first-item\\\"></ng-content>\\n\\t\\t<ng-container *ngFor=\\\"let item of listViewportItems;trackBy: trackListItem;\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"itemTemplate;else defaultItemTemplate;\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"itemTemplate;context:{item:item};\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-template #defaultItemTemplate>{{ item|json }}</ng-template>\\n\\t\\t\\t<ng-content selector=\\\".list-last-item\\\"></ng-content>\\n\\t\\t</ng-container>\\n\\t</div>\\n\\t<div class=\\\"list-bottom\\\"></div>\\n</virtual-scroller>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/virtual/list/component/virtual.list.component.html\n// module id = 1421\n// module chunks = 1","module.exports = \":host {\\n  position: relative; }\\n  :host::before, :host::after {\\n    content: '';\\n    position: absolute;\\n    left: 0;\\n    right: 20px;\\n    pointer-events: none;\\n    height: 12px;\\n    z-index: 2; }\\n  :host::before {\\n    top: 0;\\n    background: transparent; }\\n  :host::after {\\n    bottom: 0; }\\n  :host virtual-scroller {\\n    height: inherit;\\n    max-height: inherit; }\\n  :host virtual-scroller .list-top {\\n      height: 2px; }\\n  :host virtual-scroller .list-bottom {\\n      height: 12px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/virtual/list/component/virtual.list.component.scss\n// module id = 1422\n// module chunks = 1","module.exports = \"<!-- HEADER -->\\n<!-- <div class=\\\"header\\\" [style.height.px]=\\\"itemHeight\\\"> -->\\n<!-- <span class=\\\"title\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.TITLE'|translate:lang }}</span> -->\\n<!-- </div> -->\\n<!-- BODY -->\\n\\n<!-- daterange -->\\n<div class=\\\"ctrl-con daterange\\\" [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.DATE_RANGE.SELECT'|translate:lang\\\">\\n\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.DATE_RANGE.LABEL'|translate:lang }}</label>\\n\\t<date-range-picker *ngIf=\\\"!!RANGE_PICKER_OPTIONS?.startDate && !!RANGE_PICKER_OPTIONS?.endDate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t size=\\\"sm\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t showIcon=\\\"none\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t width=\\\"unset\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [options]=\\\"RANGE_PICKER_OPTIONS\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (selectionChanged)=\\\"handleDateRangeChanged($event)\\\">\\n\\t</date-range-picker>\\n</div>\\n\\n<!-- geolocation -->\\n<div class=\\\"ctrl-block\\\">\\n\\t<!-- country -->\\n\\t<div class=\\\"ctrl-con country\\\"\\n\\t\\t\\t [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.COUNTRY.SELECT'|translate:lang\\\">\\n\\t\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.COUNTRY.LABEL'|translate:lang }}</label>\\n\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'COUNTRY'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemTemplate]=\\\"countryItemTemplate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"countriesDropdown$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"countryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"handleSelectCountry($event)\\\">\\n\\t\\t\\t<span *ngIf=\\\"countryCode\\\" class=\\\"trigger-label-prefix\\\"><span class=\\\"flag-icon flag-icon-{{countryCode|lowercase}}\\\"></span>&nbsp;</span>\\n\\t\\t</virtual-dropdown>\\n\\t\\t<!-- LIST ITEM -->\\n\\t\\t<ng-template #countryItemTemplate let-item=\\\"item\\\" let-select=\\\"select\\\">\\n\\t\\t\\t<a class=\\\"virtual-dropdown-popup-item btn btn-xs country-list-item\\\" (click)=\\\"select(item)\\\" [title]=\\\"item?.label\\\">\\n\\t\\t\\t\\t<small class=\\\"country-list-item-icon\\\">\\n\\t\\t\\t\\t\\t<span *ngIf=\\\"item.value\\\" class=\\\"flag-icon flag-icon-{{item.value|lowercase}}\\\"></span>\\n\\t\\t\\t\\t</small>\\n\\t\\t\\t\\t<small class=\\\"country-list-item-label\\\">{{item?.label}}</small>\\n\\t\\t\\t</a>\\n\\t\\t</ng-template>\\n\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingCountry;else resetCountryTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"spinnerTmpl\\\"></ng-container></ng-container>\\n\\t\\t\\t<ng-template #resetCountryTmpl>\\n\\t\\t\\t\\t<button *ngIf=\\\"!!countryCode\\\" (click)=\\\"handleResetCountry()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n\\n\\t<!-- region -->\\n\\t<div class=\\\"ctrl-con\\\"\\n\\t\\t\\t [class.disabled]=\\\"!countryCode\\\"\\n\\t\\t\\t [attr.title]=\\\"('ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.REGION.'+(!countryCode?'DISABLED':'SELECT'))|translate:lang\\\">\\n\\t\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.REGION.LABEL'|translate:lang }}</label>\\n\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"'REGION'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"regionsDropdown$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"regionId\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withFilter]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[disabled]=\\\"!countryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"handleSelectRegion($event)\\\">\\n\\t\\t</virtual-dropdown>\\n\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingRegion;else resetRegionTmpl;\\\"><ng-container *ngTemplateOutlet=\\\"spinnerTmpl\\\"></ng-container></ng-container>\\n\\t\\t\\t<ng-template #resetRegionTmpl>\\n\\t\\t\\t\\t<button *ngIf=\\\"!!regionId\\\" (click)=\\\"handleResetRegion()\\\" class=\\\"btn btn-sm close\\\">&times;</button>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n\\n</div>\\n\\n<!-- filters / prefixed tags -->\\n<div *ngIf=\\\"tag.hasPrefixedTagData;\\\" class=\\\"ctrl-block\\\">\\n\\t<div class=\\\"ctrl-con prefixed-tags\\\"\\n\\t\\t\\t [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.FILTERS.SELECT'|translate:lang\\\">\\n\\t\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.FILTERS.LABEL'|translate:lang }}</label>\\n\\t\\t<div class=\\\"ctrl-block\\\">\\n\\t\\t\\t<ng-container *ngFor=\\\"let prefix of tag.prefixes();\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"prefixedTagTmpl;context:{name: prefix, data:tag.prefixedTagData(prefix)}\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-template #prefixedTagTmpl let-name=\\\"name\\\" let-data=\\\"data\\\">\\n\\t\\t\\t\\t<div class=\\\"ctrl-con\\\" [class.active]=\\\"!!data.selected?.value\\\">\\n\\t\\t\\t\\t\\t<virtual-dropdown class=\\\"small\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[debug]=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"data.selected?.value\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[$]=\\\"data.$\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[removeSelectedFromList]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[withSearch]=\\\"data.total > 50\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[searchValue]=\\\"data.search.text\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(searchValueChange)=\\\"handlePrefixedTagSearch(data, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(scrolledToEnd)=\\\"handlePrefixedTagScrollEnd(data, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(selected)=\\\"handlePrefixedTagSelect(data, $event)\\\">\\n\\t\\t\\t\\t\\t</virtual-dropdown>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<!-- tags -->\\n<div class=\\\"ctrl-block\\\">\\n\\t<div class=\\\"ctrl-con tags\\\"\\n\\t\\t\\t [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.TAGS.SELECT'|translate:lang\\\">\\n\\t\\t<label>{{ 'ANALYTICS_SAMPLED_TRAFFIC.CRITERIA.TAGS.LABEL'|translate:lang }}</label>\\n\\t\\t<tag-input theme=\\\"ngx-chips-bradmax-theme\\\"\\n\\t\\t\\t\\t\\t\\t\\t [ripple]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t [onlyFromAutocomplete]=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t\\t [secondaryPlaceholder]=\\\"'ANALYTICS_TAG_SERVICE.INITIAL_PLACEHOLDER'|translate:lang\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'ANALYTICS_TAG_SERVICE.PLACEHOLDER'|translate:lang\\\"\\n\\t\\t\\t\\t\\t\\t\\t (onAdd)=\\\"handleTagAdd($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t (onRemove)=\\\"handleTagRemove($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"tag.selectedChips\\\">\\n\\t\\t\\t<tag-input-dropdown [showDropdownIfEmpty]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[autocompleteObservable]=\\\"tag.handleTagSearch\\\">\\n\\t\\t\\t</tag-input-dropdown>\\n\\t\\t</tag-input>\\n\\t\\t<div class=\\\"ctrl-addon\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"isSearchingTags\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"spinnerTmpl\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\\n<!-- -- -->\\n<!-- SPINNER -->\\n<ng-template #spinnerTmpl>\\n\\t<div class=\\\"spinner-con\\\">\\n\\t\\t<div class=\\\"spinner-small\\\"></div>\\n\\t</div>\\n</ng-template>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/criteria/sampled-traffic.criteria.component.html\n// module id = 1423\n// module chunks = 1","module.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap; }\\n  :host .ctrl-block {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    display: -webkit-box !important;\\n    display: -ms-flexbox !important;\\n    display: flex !important;\\n    -ms-flex-wrap: wrap;\\n        flex-wrap: wrap; }\\n  :host .ctrl-con {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-align: baseline;\\n        -ms-flex-align: baseline;\\n            align-items: baseline;\\n    max-width: 450px;\\n    padding: 4px; }\\n  :host .ctrl-con.daterange {\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center; }\\n  :host .ctrl-con.country .country-list-item {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-pack: start;\\n          -ms-flex-pack: start;\\n              justify-content: flex-start;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      width: 100%;\\n      height: 100%;\\n      overflow: hidden; }\\n  :host .ctrl-con.country .country-list-item-icon {\\n        -webkit-box-flex: 0;\\n            -ms-flex: 0 0 24px;\\n                flex: 0 0 24px; }\\n  :host .ctrl-con.country .country-list-item-label {\\n        -webkit-box-flex: 1;\\n            -ms-flex: 1;\\n                flex: 1;\\n        text-align: center;\\n        white-space: nowrap; }\\n  :host .ctrl-con.tags {\\n      min-width: unset;\\n      max-width: unset; }\\n  :host .ctrl-con.prefixed-tags {\\n      max-width: unset; }\\n  :host .ctrl-con label {\\n      min-width: 100px;\\n      max-width: 100px;\\n      font-size: 0.75em;\\n      text-align: end;\\n      padding-left: 4px;\\n      padding-right: 6px;\\n      margin: 0; }\\n  :host .ctrl-con label::after {\\n        content: \\\":\\\"; }\\n  :host .ctrl-con ::ng-deep date-range-picker {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      margin: 0; }\\n  :host .ctrl-con ::ng-deep date-range-picker .form-control {\\n        text-align: center; }\\n  :host .ctrl-con ::ng-deep virtual-dropdown {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      margin: 0;\\n      min-width: 160px;\\n      max-width: 160px; }\\n  :host .ctrl-con ::ng-deep virtual-dropdown-trigger {\\n        border-color: lightgray !important; }\\n  :host .ctrl-con ::ng-deep tag-input {\\n      font-size: 0.75em; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag-input-form form input.ng2-tag-input__text-input {\\n        height: 30px; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag {\\n        border-color: #335eea !important;\\n        background: #335eea !important;\\n        color: #fff !important;\\n        border-radius: 3px;\\n        height: 30px;\\n        line-height: 26px; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon {\\n          color: rgba(255, 255, 255, 0.64) !important; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon svg {\\n            height: 26px; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon svg path {\\n              fill: currentColor !important; }\\n  :host .ctrl-con ::ng-deep tag-input .ng2-tag-input.ngx-chips-bradmax-theme tag delete-icon:hover {\\n            -webkit-transform: none !important;\\n                    transform: none !important;\\n            color: #fff !important; }\\n  :host .ctrl-con .ctrl-addon {\\n      position: relative;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: center;\\n          -ms-flex-pack: center;\\n              justify-content: center;\\n      min-width: 24px;\\n      max-width: 24px;\\n      min-height: 24px;\\n      max-height: 24px;\\n      margin: auto; }\\n  :host .ctrl-con .ctrl-addon .btn {\\n        background: transparent; }\\n  :host .ctrl-con .ctrl-addon .spinner-con .spinner-small {\\n        width: 16px;\\n        height: 16px;\\n        margin: -8px 0 0 -8px; }\\n  :host .ctrl-con.disabled {\\n      cursor: not-allowed; }\\n  :host .ctrl-con.disabled label {\\n        opacity: 0.64; }\\n  :host .ctrl-con.disabled * {\\n        pointer-events: none; }\\n  :host .ctrl-con.active ::ng-deep virtual-dropdown .virtual-dropdown-trigger {\\n      border-color: #335eea !important;\\n      background: #335eea !important;\\n      color: #fff !important; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/criteria/sampled-traffic.criteria.component.scss\n// module id = 1424\n// module chunks = 1","module.exports = \"<!-- CHART -->\\n<div class=\\\"chart-con\\\" *ngIf=\\\"!!chartData && !!chartData?.dataTable;\\\">\\n\\t<!-- HEADER -->\\n\\t<div class=\\\"header\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t<div class=\\\"title\\\">\\n\\t\\t\\t<span class=\\\"title-text\\\">\\n\\t\\t\\t\\t{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TITLE')|translate:lang }}\\n\\t\\t\\t\\t<!-- country flag & name -->\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"countryCode\\\">\\n\\t\\t\\t\\t\\t<small>:&nbsp;</small>\\n\\t\\t\\t\\t\\t<span class=\\\"flag-icon flag-icon-{{countryCode|lowercase}}\\\"></span>\\n\\t\\t\\t\\t\\t<small>&nbsp;{{countryNameByCode(countryCode)}}</small>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t<!-- region name -->\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"regionId\\\">\\n\\t\\t\\t\\t\\t<small>&nbsp;/&nbsp;{{regionNameById(countryCode, regionId)}}</small>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t<!--  -->\\n\\t\\t\\t</span>\\n\\t\\t\\t<small *ngIf=\\\"dateRange\\\" class=\\\"title-date\\\">{{(dateRange[0]*1000)|date:'MM/dd/y'}} - {{(dateRange[1]*1000)|date:'MM/dd/y'}}</small>\\n\\t\\t</div>\\n\\t\\t<ng-container *ngIf=\\\"resolution !== 'countries'\\\">\\n\\t\\t\\t<button *ngIf=\\\"!!regionId; else backToWorld;\\\" class=\\\"btn btn-sm btn-inverse\\\" (click)=\\\"handleBackClick()\\\">{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.MAP.BACK_TO_COUNTRY')|translate:lang }}</button>\\n\\t\\t\\t<ng-template #backToWorld>\\n\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-inverse\\\" (click)=\\\"handleBackClick()\\\">{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.MAP.BACK_TO_WORLD')|translate:lang }}</button>\\n\\t\\t\\t</ng-template>\\n\\t\\t</ng-container>\\n\\t</div>\\n\\t<!-- BODY -->\\n\\t<google-chart [data]=\\\"chartData\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t(chartReady)=\\\"handleGoogleChartReady($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t(chartSelect)=\\\"handleGoogleChartSelect($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t(chartError)=\\\"handleGoogleChartError($event)\\\">\\n\\t</google-chart>\\n</div>\\n<!-- LIST -->\\n<div class=\\\"list-con\\\" *ngIf=\\\"!!listItems && !!chartData?.options?.height;\\\" [style.minHeight.px]=\\\"itemHeight\\\">\\n\\t<!-- HEADER -->\\n\\t<div class=\\\"list-header\\\">\\n\\t\\t<div class=\\\"list-row\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<div class=\\\"cell cell-no\\\">#</div>\\n\\t\\t\\t<div class=\\\"cell cell-label\\\">{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.LIST.' + (resolution|uppercase))|translate:lang }}</div>\\n\\t\\t\\t<div class=\\\"cell cell-views\\\">\\n\\t\\t\\t\\t<span>{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.VIEWS')|translate:lang }}</span>\\n\\t\\t\\t\\t<small>{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TOTAL_PERCENT')|translate:lang }}</small>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"cell cell-users\\\">\\n\\t\\t\\t\\t<span>{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.USERS')|translate:lang }}</span>\\n\\t\\t\\t\\t<small>{{ ('ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TOTAL_PERCENT')|translate:lang }}</small>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- BODY -->\\n\\t<virtual-list *ngIf=\\\"listItems?.length > 0; else NODATA;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[itemHeight]=\\\"itemHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[listHeight]=\\\"chartData.options.height\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[compareItems]=\\\"compareListItems\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[trackItem]=\\\"trackListItem\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[itemTemplate]=\\\"itemTemplate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"listItems\\\">\\n\\t</virtual-list>\\n\\t<!-- LIST ITEM -->\\n\\t<ng-template #itemTemplate let-item=\\\"item\\\">\\n\\t\\t<div class=\\\"list-row\\\" [style.height.px]=\\\"itemHeight\\\" (click)=\\\"handleSelectListItem(item)\\\">\\n\\t\\t\\t<!-- no -->\\n\\t\\t\\t<div class=\\\"cell cell-no\\\">\\n\\t\\t\\t\\t<small>{{ item.index | number:'2.0' }}.</small>\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"item.countryCode\\\">&nbsp;<span class=\\\"flag-icon flag-icon-{{item.countryCode|lowercase}}\\\"></span></ng-container>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- label & bars -->\\n\\t\\t\\t<div class=\\\"cell cell-label\\\">\\n\\t\\t\\t\\t<!-- bars -->\\n\\t\\t\\t\\t<div class=\\\"bar-con\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"bar bar-views\\\" [style.width.%]=\\\"item.viewsShare\\\"></div>\\n\\t\\t\\t\\t\\t<div class=\\\"bar bar-users\\\" [style.width.%]=\\\"item.usersShare\\\"></div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<!-- label -->\\n\\t\\t\\t\\t<span>{{ item.label }}</span>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- views -->\\n\\t\\t\\t<div class=\\\"cell cell-views\\\">\\n\\t\\t\\t\\t<span [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.VIEWS'|translate:lang\\\">{{ item.views | number:'1.0' }}</span>\\n\\t\\t\\t\\t<small [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TOTAL_PERCENT'|translate:lang\\\"><ng-container *ngIf=\\\"item.viewsShare > 0.01;else BELOW_0_01;\\\">{{ item.viewsShare | number:'1.0-2' }}</ng-container><small>&nbsp;%</small></small>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- users -->\\n\\t\\t\\t<div class=\\\"cell cell-users\\\">\\n\\t\\t\\t\\t<span [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.USERS'|translate:lang\\\">{{ item.users | number:'1.0' }}</span>\\n\\t\\t\\t\\t<small [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.TOTAL_PERCENT'|translate:lang\\\"><ng-container *ngIf=\\\"item.usersShare > 0.01;else BELOW_0_01;\\\">{{ item.usersShare | number:'1.0-2' }}</ng-container><small>&nbsp;%</small></small>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</ng-template>\\n\\t<!-- BELOW_0_01 -->\\n\\t<ng-template #BELOW_0_01><small>></small>0.01</ng-template>\\n\\t<!-- NODATA -->\\n\\t<ng-template #NODATA>\\n\\t\\t<div class=\\\"list-row no-data\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<small>{{ 'ANALYTICS_SAMPLED_TRAFFIC.GEOLOCATION.NODATA'|translate:lang }}</small>\\n\\t\\t</div>\\n\\t</ng-template>\\n\\t<!-- - -->\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/geo/sampled-traffic.geo.component.html\n// module id = 1425\n// module chunks = 1","module.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap; }\\n  :host .list-con {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1; }\\n  :host .list-con ::ng-deep .list-row {\\n      position: relative;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      margin-right: 20px;\\n      font-size: 0.8em;\\n      border-bottom: 1px solid #2d353c; }\\n  :host .list-con ::ng-deep .list-row .cell {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: horizontal;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: row;\\n                flex-direction: row;\\n        -ms-flex-wrap: nowrap;\\n            flex-wrap: nowrap;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: start;\\n            -ms-flex-pack: start;\\n                justify-content: flex-start;\\n        padding: 0 4px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-no {\\n          -webkit-box-orient: horizontal;\\n          -webkit-box-direction: normal;\\n              -ms-flex-direction: row;\\n                  flex-direction: row;\\n          -ms-flex-wrap: nowrap;\\n              flex-wrap: nowrap;\\n          -webkit-box-pack: justify;\\n              -ms-flex-pack: justify;\\n                  justify-content: space-between;\\n          text-align: right;\\n          min-width: 36px;\\n          max-width: 36px;\\n          font-size: 0.8em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label {\\n          position: relative;\\n          -webkit-box-flex: 1;\\n              -ms-flex: 1;\\n                  flex: 1;\\n          white-space: nowrap;\\n          text-overflow: ellipsis;\\n          overflow: hidden; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label > span {\\n            position: relative;\\n            z-index: 1; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label .bar-con {\\n            z-index: 0;\\n            position: absolute;\\n            left: 0;\\n            right: 0;\\n            bottom: 0;\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-orient: vertical;\\n            -webkit-box-direction: normal;\\n                -ms-flex-direction: column;\\n                    flex-direction: column;\\n            -ms-flex-wrap: nowrap;\\n                flex-wrap: nowrap;\\n            -webkit-box-pack: end;\\n                -ms-flex-pack: end;\\n                    justify-content: flex-end;\\n            pointer-events: none; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label .bar-con .bar {\\n              height: 4px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label .bar-con .bar.bar-views {\\n                background-color: #a2a2a2;\\n                margin-bottom: 1px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-label .bar-con .bar.bar-users {\\n                background-color: #2d353c; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-users, :host .list-con ::ng-deep .list-row .cell.cell-views {\\n          position: relative;\\n          display: -webkit-box;\\n          display: -ms-flexbox;\\n          display: flex;\\n          -webkit-box-orient: horizontal;\\n          -webkit-box-direction: normal;\\n              -ms-flex-direction: row;\\n                  flex-direction: row;\\n          -ms-flex-wrap: wrap;\\n              flex-wrap: wrap;\\n          -webkit-box-pack: end;\\n              -ms-flex-pack: end;\\n                  justify-content: flex-end;\\n          text-align: right;\\n          min-width: 64px;\\n          max-width: 64px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-users > *, :host .list-con ::ng-deep .list-row .cell.cell-views > * {\\n            min-width: inherit;\\n            max-width: inherit;\\n            font-weight: 200;\\n            line-height: normal; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-users > span, :host .list-con ::ng-deep .list-row .cell.cell-views > span {\\n            font-size: 0.92em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-users > small, :host .list-con ::ng-deep .list-row .cell.cell-views > small {\\n            font-size: 0.82em; }\\n  :host .list-con ::ng-deep .list-row.no-data {\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: center;\\n            -ms-flex-pack: center;\\n                justify-content: center; }\\n  :host .list-con ::ng-deep virtual-list {\\n      position: relative; }\\n  :host .list-con ::ng-deep virtual-list .list-row {\\n        pointer-events: all; }\\n  :host .list-con ::ng-deep virtual-list .list-row:last-of-type {\\n          border-bottom: 1px solid transparent; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover {\\n          border-bottom-color: #888888; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-label .bar-con .bar.bar-views {\\n            background-color: #F4D514; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-label .bar-con .bar.bar-users {\\n            background-color: #888888; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-views {\\n            color: #F4D514; }\\n  :host .chart-con .header .flag-icon {\\n    border: 1px solid #2d353c; }\\n  :host .chart-con ::ng-deep google-chart svg {\\n    /* FIX:start */\\n    /* FIX:end */ }\\n  :host .chart-con ::ng-deep google-chart svg defs#defs pattern rect {\\n      fill: none !important; }\\n  :host .chart-con ::ng-deep google-chart svg defs#defs pattern line {\\n      stroke: none !important;\\n      stroke-width: 0 !important; }\\n  :host .chart-con ::ng-deep google-chart svg text {\\n      stroke: none !important; }\\n  :host.selectable ::ng-deep virtual-list .list-row {\\n    cursor: pointer; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/geo/sampled-traffic.geo.component.scss\n// module id = 1426\n// module chunks = 1","module.exports = \"<!-- HEADER -->\\n<div class=\\\"header\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t<div class=\\\"title-con\\\">\\n\\t\\t<div class=\\\"title\\\">\\n\\t\\t\\t<span class=\\\"title-text\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.HISTORY.TITLE'|translate:lang }}</span>\\n\\t\\t\\t<small *ngIf=\\\"data\\\" class=\\\"title-date\\\">{{data.startDate.utc()|date:'MM/dd/y' }} - {{data.endDate.utc()|date:'MM/dd/y'}}</small>\\n\\t\\t</div>\\n\\t</div>\\n\\t<div class=\\\"btn-group\\\">\\n\\t\\t<button *ngFor=\\\"let item of granularityData;trackBy:trackHistoryGranularity;\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"btn btn-sm\\\"\\n\\t\\t\\t\\t\\t\\t[class.btn-primary]=\\\"data?.granularity !== item\\\"\\n\\t\\t\\t\\t\\t\\t[disabled]=\\\"data?.granularity === item\\\"\\n\\t\\t\\t\\t\\t\\t(click)=\\\"handleGranularityChange(item)\\\">\\n\\t\\t\\t{{ 'ANALYTICS_SAMPLED_TRAFFIC.HISTORY.GRANULARITY.' + (item|uppercase) | translate:lang }}\\n\\t\\t</button>\\n\\t</div>\\n\\t<div class=\\\"btn-group\\\">\\n\\t\\t<button class=\\\"btn btn-sm btn-primary\\\" (click)=\\\"exportCsv()\\\" [attr.title]=\\\"csvFilename\\\">\\n\\t\\t\\t<i class=\\\"fa fa-download\\\"></i>&nbsp;{{ 'ANALYTICS_SAMPLED_TRAFFIC.HISTORY.EXPORT_TO_CSV'|translate:lang }}\\n\\t\\t</button>\\n\\t</div>\\n</div>\\n<!-- BODY -->\\n<chart *ngIf=\\\"data\\\"\\n\\t\\t\\t chartType=\\\"lineTime\\\"\\n\\t\\t\\t [gridColor]=\\\"CHART_GRID_COLOR\\\"\\n\\t\\t\\t [fontColor]=\\\"CHART_FONT_COLOR\\\"\\n\\t\\t\\t [datasetColors]=\\\"CHART_DATA_COLORS\\\"\\n\\t\\t\\t [chartData]=\\\"data.datasets\\\"\\n\\t\\t\\t [chartLabels]=\\\"data.labels\\\"\\n\\t\\t\\t [granularity]=\\\"data.granularity\\\"\\n\\t\\t\\t [startDate]=\\\"data.startDate\\\"\\n\\t\\t\\t [endDate]=\\\"data.endDate\\\">\\n</chart>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/history/sampled-traffic.history.component.html\n// module id = 1427\n// module chunks = 1","module.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap; }\\n  :host .header .title-con {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host chart {\\n    margin-top: 16px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/history/sampled-traffic.history.component.scss\n// module id = 1428\n// module chunks = 1","module.exports = \"<ng-container *ngIf=\\\"show;\\\">\\n\\t<div *ngFor=\\\"let item of SUMMARY_ITEMS;trackBy:trackSummaryItem;\\\" class=\\\"summary-con\\\">\\n\\t\\t<div class=\\\"summary-icon\\\"><i class=\\\"fa fa-fw fa-{{item.fa}}\\\"></i></div>\\n\\t\\t<svg width=\\\"100%\\\" height=\\\"100%\\\" viewBox=\\\"0 0 60 20\\\" preserveAspectRatio=\\\"xMinYMid meet\\\" class=\\\"summary-number\\\">\\n\\t\\t\\t<text x=\\\"100%\\\" y=\\\"80%\\\" text-anchor=\\\"end\\\" font-size=\\\"15\\\" fill=\\\"currentColor\\\">{{ (item.value || 0) | number:'1.0-2' }}</text>\\n\\t\\t</svg>\\n\\t\\t<small class=\\\"summary-title\\\">{{ ('ANALYTICS_SAMPLED_TRAFFIC.SUMMARY.' + item.i10n)|translate:lang }}</small>\\n\\t</div>\\n</ng-container>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/summary/sampled-traffic.summary.component.html\n// module id = 1429\n// module chunks = 1","module.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap;\\n  -webkit-box-pack: space-evenly;\\n      -ms-flex-pack: space-evenly;\\n          justify-content: space-evenly;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  min-width: 100%;\\n  min-height: 100%; }\\n  :host .summary-con {\\n    position: relative;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    -ms-flex-wrap: nowrap;\\n        flex-wrap: nowrap;\\n    -webkit-box-align: end;\\n        -ms-flex-align: end;\\n            align-items: flex-end;\\n    -webkit-box-pack: end;\\n        -ms-flex-pack: end;\\n            justify-content: flex-end;\\n    margin: 8px;\\n    text-overflow: ellipsis;\\n    white-space: nowrap; }\\n  :host .summary-con .summary-number {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      z-index: 1; }\\n  :host .summary-con .summary-title {\\n      font-weight: 400;\\n      line-height: 1em;\\n      z-index: 1; }\\n  :host .summary-con .summary-icon {\\n      pointer-events: none;\\n      position: absolute;\\n      bottom: 0;\\n      left: 0;\\n      font-size: 5em;\\n      z-index: 0;\\n      text-align: right; }\\n  :host .summary-con .summary-icon .fa::before {\\n        color: #ebcb00 !important; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/summary/sampled-traffic.summary.component.scss\n// module id = 1430\n// module chunks = 1","module.exports = \"<!-- HEADER -->\\n<div class=\\\"header\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t<div class=\\\"title\\\">\\n\\t\\t<span class=\\\"title-text\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.TITLE'|translate:lang }}</span>\\n\\t\\t<small *ngIf=\\\"dateRange\\\" class=\\\"title-date\\\">{{(dateRange[0]*1000)|date:'MM/dd/y'}} - {{(dateRange[1]*1000)|date:'MM/dd/y'}}</small>\\n\\t</div>\\n</div>\\n<!-- LIST -->\\n<div class=\\\"list-con\\\" *ngIf=\\\"!!data;\\\" [style.minHeight.px]=\\\"itemHeight\\\">\\n\\t<!-- HEADER -->\\n\\t<div class=\\\"list-header\\\">\\n\\t\\t<div class=\\\"list-row\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<div class=\\\"cell cell-no\\\">#</div>\\n\\t\\t\\t<div class=\\\"cell cell-tag\\\">\\n\\t\\t\\t\\t<div class=\\\"tag-con\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"tag-prefix\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.TAG'|translate:lang }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"tag-value\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.VALUE'|translate:lang }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"cell cell-views\\\">\\n\\t\\t\\t\\t<span>{{ ('ANALYTICS_SAMPLED_TRAFFIC.TAGS.VIEWS')|translate:lang }}</span>\\n\\t\\t\\t\\t<small>{{ ('ANALYTICS_SAMPLED_TRAFFIC.TAGS.TOTAL_PERCENT')|translate:lang }}</small>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- LIST -->\\n\\t<virtual-list *ngIf=\\\"data?.records?.length > 0; else NODATA;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[itemHeight]=\\\"itemHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[listHeight]=\\\"listHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[compareItems]=\\\"compareListItems\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[trackItem]=\\\"trackListItem\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[itemTemplate]=\\\"itemTemplate\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[items]=\\\"data.records\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t(scrollerEnd)=\\\"handleListVieportEnd($event)\\\">\\n\\t\\t<!-- loader -->\\n\\t\\t<div *ngIf=\\\"isFetching\\\" class=\\\"list-last-item list-loader\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<div class=\\\"spinner-con\\\">\\n\\t\\t\\t\\t<div class=\\\"spinner-small\\\"></div>\\n\\t\\t\\t</div><small>{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.LOADING'|translate:lang }}</small>\\n\\t\\t</div>\\n\\t</virtual-list>\\n\\t<!-- LIST ITEM -->\\n\\t<ng-template #itemTemplate let-item=\\\"item\\\">\\n\\t\\t<div class=\\\"list-row\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<!-- no -->\\n\\t\\t\\t<div class=\\\"cell cell-no\\\">\\n\\t\\t\\t\\t<small>{{ item.position | number:'2.0' }}.</small>\\n\\t\\t\\t\\t<!-- <small class=\\\"fa fa-fw fa-search\\\"></small> -->\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- tag & bars -->\\n\\t\\t\\t<div class=\\\"cell cell-tag\\\">\\n\\t\\t\\t\\t<!-- bars -->\\n\\t\\t\\t\\t<div *ngIf=\\\"!!item.viewsShare\\\" class=\\\"bar-con\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"bar bar-views\\\" [style.width.%]=\\\"item.viewsShare\\\"></div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<!-- tag -->\\n\\t\\t\\t\\t<div class=\\\"tag-con\\\" [class.prefixed]=\\\"!!item.prefix\\\">\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"!!item.prefix\\\" class=\\\"tag-prefix\\\">{{ item.prefix|tagPrefix }}</div>\\n\\t\\t\\t\\t\\t<div class=\\\"tag-value\\\">{{ item.value }}</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- views -->\\n\\t\\t\\t<div class=\\\"cell cell-views\\\">\\n\\t\\t\\t\\t<span [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.TAGS.VIEWS'|translate:lang\\\">{{ item.views | number:'1.0' }}</span>\\n\\t\\t\\t\\t<small [attr.title]=\\\"'ANALYTICS_SAMPLED_TRAFFIC.TAGS.TOTAL_PERCENT'|translate:lang\\\"><ng-container *ngIf=\\\"item.viewsShare > 0.01;else BELOW_0_01;\\\">{{ item.viewsShare | number:'1.0-2' }}</ng-container><small>&nbsp;%</small></small>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- - -->\\n\\t</ng-template>\\n\\t<!-- BELOW_0_01 -->\\n\\t<ng-template #BELOW_0_01><small>></small>0.01</ng-template>\\n\\t<!-- NODATA -->\\n\\t<ng-template #NODATA>\\n\\t\\t<div class=\\\"list-row no-data\\\" [style.height.px]=\\\"itemHeight\\\">\\n\\t\\t\\t<small>{{ 'ANALYTICS_SAMPLED_TRAFFIC.TAGS.NODATA'|translate:lang }}</small>\\n\\t\\t</div>\\n\\t</ng-template>\\n\\t<!-- === -->\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/tags/sampled-traffic.tags.component.html\n// module id = 1431\n// module chunks = 1","module.exports = \":host {\\n  position: relative;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap; }\\n  :host .list-con {\\n    position: relative;\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    -ms-flex-wrap: nowrap;\\n        flex-wrap: nowrap;\\n    height: inherit;\\n    max-height: inherit; }\\n  :host .list-con .list-header .list-row .cell-tag .tag-con .tag-value {\\n      font-weight: lighter;\\n      font-size: 0.9em;\\n      font-style: italic; }\\n  :host .list-con ::ng-deep .list-row {\\n      position: relative;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      margin-right: 20px;\\n      font-size: 0.8em;\\n      border-bottom: 1px solid #867400; }\\n  :host .list-con ::ng-deep .list-row .cell {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: horizontal;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: row;\\n                flex-direction: row;\\n        -ms-flex-wrap: nowrap;\\n            flex-wrap: nowrap;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: start;\\n            -ms-flex-pack: start;\\n                justify-content: flex-start;\\n        padding: 0 4px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-no {\\n          -webkit-box-pack: justify;\\n              -ms-flex-pack: justify;\\n                  justify-content: space-between;\\n          text-align: right;\\n          min-width: 32px;\\n          max-width: 32px;\\n          font-size: 0.8em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag {\\n          -webkit-box-flex: 1;\\n              -ms-flex: 1;\\n                  flex: 1;\\n          position: relative;\\n          white-space: nowrap;\\n          text-overflow: ellipsis;\\n          overflow: hidden; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .bar-con {\\n            z-index: 0;\\n            position: absolute;\\n            left: 0;\\n            right: 0;\\n            bottom: 0;\\n            height: 4px;\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-orient: vertical;\\n            -webkit-box-direction: normal;\\n                -ms-flex-direction: column;\\n                    flex-direction: column;\\n            -ms-flex-wrap: nowrap;\\n                flex-wrap: nowrap;\\n            -webkit-box-pack: end;\\n                -ms-flex-pack: end;\\n                    justify-content: flex-end;\\n            pointer-events: none; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .bar-con .bar {\\n              height: 4px; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .bar-con .bar.bar-views {\\n                background-color: #867400; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con {\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-orient: horizontal;\\n            -webkit-box-direction: normal;\\n                -ms-flex-direction: row;\\n                    flex-direction: row; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con .tag-prefix, :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con .tag-value {\\n              position: relative;\\n              z-index: 1;\\n              font-weight: normal;\\n              font-size: 1em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con .tag-prefix {\\n              min-width: 120px;\\n              max-width: 120px;\\n              font-style: normal; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con .tag-value {\\n              -webkit-box-flex: 1;\\n                  -ms-flex: 1;\\n                      flex: 1;\\n              font-style: normal; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-tag .tag-con.prefixed .tag-value {\\n              font-weight: lighter;\\n              font-size: 0.9em;\\n              font-style: italic; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-views {\\n          position: relative;\\n          -ms-flex-wrap: wrap;\\n              flex-wrap: wrap;\\n          text-align: right;\\n          min-width: 64px;\\n          max-width: 64px;\\n          -webkit-box-pack: end;\\n              -ms-flex-pack: end;\\n                  justify-content: flex-end; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-views > * {\\n            min-width: inherit;\\n            max-width: inherit;\\n            line-height: normal; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-views > span {\\n            font-size: 0.92em; }\\n  :host .list-con ::ng-deep .list-row .cell.cell-views > small {\\n            font-size: 0.82em;\\n            font-weight: 200; }\\n  :host .list-con ::ng-deep .list-row.no-data {\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: center;\\n            -ms-flex-pack: center;\\n                justify-content: center; }\\n  :host .list-con ::ng-deep .list-loader {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-pack: center;\\n          -ms-flex-pack: center;\\n              justify-content: center;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center; }\\n  :host .list-con ::ng-deep .list-loader .spinner-con {\\n        position: relative;\\n        width: 32px; }\\n  :host .list-con ::ng-deep .list-loader .spinner-con .spinner-small {\\n          border-top: 1px solid currentColor !important;\\n          max-height: 18px;\\n          min-height: 18px;\\n          max-width: 18px;\\n          min-width: 18px;\\n          margin: -9px 0 0 -9px; }\\n  :host .list-con ::ng-deep virtual-list {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      height: 100%; }\\n  :host .list-con ::ng-deep virtual-list .list-row:last-of-type {\\n        border-bottom: 1px solid transparent; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover {\\n        border-bottom-color: #2c2600; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-tag .bar-con .bar.bar-views {\\n          background-color: #2c2600; }\\n  :host .list-con ::ng-deep virtual-list .list-row:hover .cell.cell-views {\\n          color: #2c2600; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/tags/sampled-traffic.tags.component.scss\n// module id = 1432\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'ANALYTICS_SAMPLED_TRAFFIC.VIEW.TITLE'|translate:lang }}</h1>\\n\\n<div class=\\\"panel-grid\\\">\\n\\t<!-- CRITERIA -->\\n\\t<div class=\\\"panel criteria bg-white text-black\\\">\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<sampled-traffic-criteria *ngIf=\\\"!!filters?.dateRange;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemHeight]=\\\"LIST_ITEM_HEIGHT_PX\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[dateRange]=\\\"filters.dateRange\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[countryCode]=\\\"filters.geoCountryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[regionId]=\\\"filters.geoRegionId\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(dateRangeChange)=\\\"handleDateRangeChange($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(geolocationChange)=\\\"handleGeolocationChange($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(tagsChange)=\\\"handleTagsChange($event)\\\">\\n\\t\\t\\t</sampled-traffic-criteria>\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingCriteria;\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- SUMMARY -->\\n\\t<div class=\\\"panel summary bg-yellow text-dark\\\">\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<ng-container *ngIf=\\\"!!summaryData;\\\">\\n\\t\\t\\t\\t<sampled-traffic-summary [data]=\\\"summaryData\\\"></sampled-traffic-summary>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingSummary;\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- TAGS -->\\n\\t<div class=\\\"panel tags bg-yellow text-dark\\\">\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<sampled-traffic-tags *ngIf=\\\"!!tagsData;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[itemHeight]=\\\"LIST_ITEM_HEIGHT_PX\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[dateRange]=\\\"filters.dateRange\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[data]=\\\"tagsData\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[isFetching]=\\\"isFetchingTags\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(search)=\\\"handleSearchTag($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t(fetchMore)=\\\"handleFetchTags($event)\\\">\\n\\t\\t\\t</sampled-traffic-tags>\\n\\t\\t\\t<ng-container *ngIf=\\\"isLoadingTags;\\\">\\n\\t\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t</div>\\n\\t</div>\\n\\t<!-- - -->\\n</div>\\n\\n<!-- HISTORY -->\\n<div class=\\\"panel history bg-blue text-white\\\">\\n\\t<div class=\\\"panel-body\\\">\\n\\t\\t<sampled-traffic-history *ngIf=\\\"!!historyChart;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [itemHeight]=\\\"LIST_ITEM_HEIGHT_PX\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [countryCode]=\\\"filters.geoCountryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [regionId]=\\\"filters.geoRegionId\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [data]=\\\"historyChart\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (granularity)=\\\"handleGranularityChange($event)\\\">\\n\\t\\t</sampled-traffic-history>\\n\\t\\t<ng-container *ngIf=\\\"isLoadingHistory;\\\">\\n\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t</ng-container>\\n\\t</div>\\n</div>\\n\\n<!-- GEO -->\\n<div class=\\\"panel geolocation bg-black text-white\\\">\\n\\t<div class=\\\"panel-body\\\">\\n\\t\\t<sampled-traffic-geo *ngIf=\\\"!!geoData;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [itemHeight]=\\\"LIST_ITEM_HEIGHT_PX\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [dateRange]=\\\"filters.dateRange\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [countryCode]=\\\"filters.geoCountryCode\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [regionId]=\\\"filters.geoRegionId\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t [data]=\\\"geoData\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (selected)=\\\"handleGeoSelect($event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t (chartError)=\\\"handleGeoChartError($event)\\\">\\n\\t\\t</sampled-traffic-geo>\\n\\t\\t<ng-container *ngIf=\\\"isLoadingGeo;\\\">\\n\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"panelSpinner;\\\"></ng-container>\\n\\t\\t</ng-container>\\n\\t</div>\\n</div>\\n\\n<!-- - -->\\n\\n\\n<!-- SPINNER -->\\n<ng-template #panelSpinner>\\n\\t<div class=\\\"spinner-con\\\">\\n\\t\\t<div class=\\\"spinner-small\\\"></div>\\n\\t</div>\\n</ng-template>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/view/sampled-traffic.view.component.html\n// module id = 1433\n// module chunks = 1","module.exports = \":host .panel-grid {\\n  position: relative;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  margin-left: -10px;\\n  margin-right: -10px; }\\n  :host .panel-grid .panel {\\n    margin-left: 10px;\\n    margin-right: 10px; }\\n  :host .panel {\\n  position: relative;\\n  width: 100%;\\n  max-width: 100%;\\n  z-index: 0; }\\n  :host .panel.bg-yellow ::ng-deep virtual-list {\\n    scrollbar-width: thin; }\\n  :host .panel.bg-yellow ::ng-deep virtual-list.top-gradient::before {\\n    background: -webkit-gradient(linear, left bottom, left top, from(rgba(244, 213, 20, 0)), to(#F4D514));\\n    background: linear-gradient(0deg, rgba(244, 213, 20, 0) 0%, #F4D514 100%); }\\n  :host .panel.bg-yellow ::ng-deep virtual-list::after {\\n    background: -webkit-gradient(linear, left top, left bottom, from(rgba(244, 213, 20, 0)), to(#F4D514));\\n    background: linear-gradient(180deg, rgba(244, 213, 20, 0) 0%, #F4D514 100%); }\\n  :host .panel.bg-blue ::ng-deep virtual-list {\\n    scrollbar-width: thin; }\\n  :host .panel.bg-blue ::ng-deep virtual-list.top-gradient::before {\\n    background: -webkit-gradient(linear, left bottom, left top, from(rgba(51, 94, 234, 0)), to(#335eea));\\n    background: linear-gradient(0deg, rgba(51, 94, 234, 0) 0%, #335eea 100%); }\\n  :host .panel.bg-blue ::ng-deep virtual-list::after {\\n    background: -webkit-gradient(linear, left top, left bottom, from(rgba(51, 94, 234, 0)), to(#335eea));\\n    background: linear-gradient(180deg, rgba(51, 94, 234, 0) 0%, #335eea 100%); }\\n  :host .panel.bg-black ::ng-deep virtual-list {\\n    scrollbar-width: thin;\\n    scrollbar-color: #444444 #222222; }\\n  :host .panel.bg-black ::ng-deep virtual-list.top-gradient::before {\\n    background: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0)), to(#000000));\\n    background: linear-gradient(0deg, rgba(0, 0, 0, 0) 0%, #000000 100%); }\\n  :host .panel.bg-black ::ng-deep virtual-list::after {\\n    background: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(#000000));\\n    background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, #000000 100%); }\\n  :host .panel .panel-body .spinner-con .spinner-small {\\n    border-top-color: currentColor !important; }\\n  :host .panel ::ng-deep .header {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -webkit-box-pack: justify;\\n        -ms-flex-pack: justify;\\n            justify-content: space-between;\\n    -webkit-box-align: center;\\n        -ms-flex-align: center;\\n            align-items: center;\\n    -ms-flex-wrap: nowrap;\\n        flex-wrap: nowrap;\\n    padding-right: 8px; }\\n  :host .panel ::ng-deep .header .title {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column; }\\n  :host .panel ::ng-deep .header .title small {\\n        font-size: 0.6em;\\n        font-weight: 200; }\\n  :host .panel ::ng-deep .header > .btn {\\n      padding-top: 2px;\\n      padding-bottom: 2px; }\\n  :host .panel.criteria {\\n    z-index: 100;\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 800px;\\n            flex: 1 1 800px;\\n    min-width: 200px;\\n    min-height: 100px;\\n    border: 1px solid #FEFEFE; }\\n  :host .panel.summary, :host .panel.tags {\\n    min-height: 150px; }\\n  :host .panel.summary .panel-body, :host .panel.tags .panel-body {\\n      position: relative;\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1; }\\n  :host .panel.summary {\\n    position: relative;\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 150px;\\n            flex: 1 1 150px;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    overflow: hidden; }\\n  :host .panel.summary .panel-body {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -ms-flex-wrap: wrap;\\n          flex-wrap: wrap;\\n      -webkit-box-align: end;\\n          -ms-flex-align: end;\\n              align-items: flex-end;\\n      -webkit-box-pack: end;\\n          -ms-flex-pack: end;\\n              justify-content: flex-end;\\n      margin: -8px; }\\n  :host .panel.tags {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 500px;\\n            flex: 1 1 500px;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex; }\\n  :host .panel.tags .panel-body sampled-traffic-tags {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1; }\\n  :host .panel.history {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 100%;\\n            flex: 1 1 100%;\\n    min-height: 378px; }\\n  :host .panel.geolocation {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1 1 100%;\\n            flex: 1 1 100%;\\n    min-height: 347px; }\\n  :host.is-loading .panel-con .panel .panel-body {\\n  position: unset; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/analytics/sampled-traffic/component/view/sampled-traffic.view.component.scss\n// module id = 1434\n// module chunks = 1","module.exports = \"<a *ngIf=\\\"model.isAvailableInDifferentPlan && (!model.isHiddenWhenNotActive || model.active)\\\" [ngClass]=\\\"getCssClass()\\\" (click)=\\\"showInfoAboutAvaliabilityInOtherPlan(model)\\\">\\n\\t<i *ngIf=\\\"model.icon\\\" class=\\\"fa {{ model.icon }}\\\"></i>\\n\\t<span>{{ model.name }}</span>\\n</a>\\n<ng-template [ngIf]=\\\"model.externalUrl\\\">\\n\\t<a *ngIf=\\\"!model.isAvailableInDifferentPlan && !isParent && (!model.isHiddenWhenNotActive || model.active)\\\" href=\\\"{{ model.externalUrl }}\\\" target=\\\"_blank\\\" [ngClass]=\\\"getCssClass()\\\">\\n\\t\\t<ng-container *ngTemplateOutlet=\\\"itemContent\\\"></ng-container>\\n\\t</a>\\n</ng-template>\\n<ng-template [ngIf]=\\\"!model.externalUrl\\\">\\n\\t<a *ngIf=\\\"!model.isAvailableInDifferentPlan && !isParent && (!model.isHiddenWhenNotActive || model.active)\\\" [routerLink]=\\\"formatRoute()\\\" routerLinkActive=\\\"active\\\" [ngClass]=\\\"getCssClass()\\\">\\n\\t\\t<ng-container *ngTemplateOutlet=\\\"itemContent\\\"></ng-container>\\n\\t</a>\\n</ng-template>\\n<ng-template #itemContent>\\n\\t<i *ngIf=\\\"model.icon\\\" class=\\\"fa {{ model.icon }}\\\"></i>\\n\\t<span>{{ model.name }}</span>\\n\\t<span *ngIf=\\\"model.isBeta\\\" class=\\\"menu-item-beta\\\">&beta;</span>\\n</ng-template>\\n\\n<a *ngIf=\\\"!model.isAvailableInDifferentPlan && isParent && (!model.isHiddenWhenNotActive || model.active)\\\" [routerLink]=\\\"formatRoute()\\\" (click)=\\\"onCollapse.emit(model)\\\" routerLinkActive=\\\"active\\\" [ngClass]=\\\"getCssClass()\\\">\\n\\t<i *ngIf=\\\"model.icon\\\" class=\\\"fa {{ !model.collapsed && model.openIcon ? model.openIcon : model.icon }}\\\"></i>\\n\\t<span>{{ model.name }}</span>\\n\\t<span *ngIf=\\\"model.isBeta\\\" class=\\\"menu-item-beta\\\">&beta;</span>\\n</a>\\n<ul *ngIf=\\\"isSubMenuActive()\\\" class=\\\"sub-menu\\\">\\n\\t<li *ngFor=\\\"let item of model.data\\\" sidebar-menu-item [model]=\\\"item\\\"></li>\\n</ul>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/sidebar/item/sidebar.item.component.html\n// module id = 1435\n// module chunks = 1","module.exports = \"@charset \\\"UTF-8\\\";\\n:host a {\\n  overflow: hidden;\\n  text-overflow: ellipsis;\\n  font-size: 14px !important; }\\n:host a.active, :host a:active, :host a:focus {\\n    color: inherit;\\n    background: transparent !important; }\\n:host a.active > span:not(.menu-item-beta), :host a:active > span:not(.menu-item-beta), :host a:focus > span:not(.menu-item-beta) {\\n      text-decoration: underline;\\n      -webkit-text-decoration-color: #335eea;\\n              text-decoration-color: #335eea;\\n      text-underline-offset: 4px;\\n      text-decoration-thickness: 1px; }\\n:host a:visited {\\n    color: inherit;\\n    background: transparent !important; }\\n:host:not(.nohovericon).active > a:after, :host:not(.nohovericon) > a.active:after, :host:not(.nohovericon) > a:hover:after {\\n  display: inline-block;\\n  font: normal normal normal 14px/1 FontAwesome;\\n  font-size: inherit;\\n  text-rendering: auto;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n  position: absolute;\\n  font-size: 1em;\\n  top: 50%;\\n  margin-top: -0.5em;\\n  color: #335eea;\\n  right: 1em;\\n  content: \\\"\\\"; }\\n:host:not(.nohovericon).active > a > span:not(.menu-item-beta), :host:not(.nohovericon) > a.active > span:not(.menu-item-beta), :host:not(.nohovericon) > a:hover > span:not(.menu-item-beta) {\\n  text-decoration: underline;\\n  -webkit-text-decoration-color: #335eea;\\n          text-decoration-color: #335eea;\\n  text-underline-offset: 4px;\\n  text-decoration-thickness: 1px; }\\n:host.nohovericon a::after {\\n  display: none !important; }\\n:host:not(.disabled) > a {\\n  cursor: pointer; }\\n:host.checked > a:before {\\n  content: \\\"\\\" !important; }\\n:host.active.checked > a:before {\\n  content: \\\"\\\" !important; }\\n:host.has-sub > a:hover:after {\\n  display: inline-block;\\n  font: normal normal normal 14px/1 FontAwesome;\\n  font-size: inherit;\\n  text-rendering: auto;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n  position: absolute;\\n  font-size: 1em;\\n  top: 50%;\\n  margin-top: -0.5em;\\n  color: #335eea;\\n  right: 1em;\\n  content: \\\"\\\"; }\\n:host.has-sub.collapse-open > .sub-menu {\\n  display: block !important; }\\n:host.has-sub.collapse-open > a:after {\\n  display: inline-block;\\n  font: normal normal normal 14px/1 FontAwesome;\\n  font-size: inherit;\\n  text-rendering: auto;\\n  -webkit-font-smoothing: antialiased;\\n  -moz-osx-font-smoothing: grayscale;\\n  position: absolute;\\n  font-size: 1em;\\n  top: 50%;\\n  margin-top: -0.5em;\\n  color: #335eea;\\n  right: 1em;\\n  content: \\\"\\\"; }\\n:host.has-sub > ul.sub-menu {\\n  background: transparent !important; }\\n:host.has-sub > ul.sub-menu:before {\\n    width: 2px;\\n    background: transparent;\\n    opacity: 0.5;\\n    left: 29px; }\\n:host.has-sub > ul.sub-menu li:not(.disabled) a {\\n    cursor: pointer; }\\n:host.has-sub > ul.sub-menu li > a {\\n    color: #335eea !important; }\\n:host.has-sub > ul.sub-menu li > a:before {\\n      content: ''; }\\n:host.has-sub > ul.sub-menu li > a:hover {\\n      color: #335eea !important; }\\n:host.has-sub > ul.sub-menu li > a:hover:after {\\n        display: inline-block;\\n        font: normal normal normal 14px/1 FontAwesome;\\n        font-size: inherit;\\n        text-rendering: auto;\\n        -webkit-font-smoothing: antialiased;\\n        -moz-osx-font-smoothing: grayscale;\\n        position: absolute;\\n        font-size: 1em;\\n        top: 50%;\\n        margin-top: -0.5em;\\n        color: #335eea;\\n        right: 1em;\\n        content: \\\"\\\"; }\\n:host.has-sub > ul.sub-menu li > a:hover:before {\\n        color: #335eea !important; }\\n:host.has-sub > ul.sub-menu li > a .menu-item-beta {\\n      font-size: 10px;\\n      position: relative;\\n      top: -5px;\\n      letter-spacing: 2px; }\\n:host.has-sub > ul.sub-menu li .available-in-different-plan {\\n    color: #aaa !important; }\\n:host.has-sub > ul.sub-menu li .available-in-different-plan span {\\n      text-decoration: none !important;\\n      color: #aaa !important; }\\n:host.has-sub > ul.sub-menu li .available-in-different-plan:after {\\n      content: none !important; }\\n:host.has-sub > ul.sub-menu li.active > a {\\n    color: !important; }\\n:host.has-sub > ul.sub-menu li.active > a:after {\\n      display: inline-block;\\n      font: normal normal normal 14px/1 FontAwesome;\\n      font-size: inherit;\\n      text-rendering: auto;\\n      -webkit-font-smoothing: antialiased;\\n      -moz-osx-font-smoothing: grayscale;\\n      position: absolute;\\n      font-size: 1em;\\n      top: 50%;\\n      margin-top: -0.5em;\\n      color: #335eea;\\n      right: 1em;\\n      content: \\\"\\\"; }\\n:host.has-sub > ul.sub-menu li.active > a:before {\\n      content: ''; }\\n:host.has-sub > ul.sub-menu li.active .hidden-when-not-active {\\n    padding-left: 30px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/sidebar/item/sidebar.item.component.scss\n// module id = 1436\n// module chunks = 1","module.exports = \"<ul class=\\\"nav\\\" *ngIf=\\\"active\\\">\\n\\t<li *ngIf=\\\"name!=null\\\" class=\\\"nav-header\\\">{{ name }}</li>\\n\\t<li *ngFor=\\\"let item of model\\\" sidebar-menu-item [model]=\\\"item\\\" (onCollapse)=\\\"onCollapse($event)\\\"></li>\\n</ul>\\n<ul class=\\\"nav foot\\\" *ngIf=\\\"active && !isAppInIframe\\\">\\n\\t<li *ngFor=\\\"let item of footMenu\\\" sidebar-menu-item [model]=\\\"item\\\" (onCollapse)=\\\"onCollapse($event)\\\"></li>\\n</ul>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/sidebar/sidebar.component.html\n// module id = 1437\n// module chunks = 1","module.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  max-height: 100%;\\n  -webkit-box-pack: justify;\\n      -ms-flex-pack: justify;\\n          justify-content: space-between;\\n  -webkit-box-align: stretch;\\n      -ms-flex-align: stretch;\\n          align-items: stretch;\\n  -ms-flex-line-pack: start;\\n      align-content: flex-start;\\n  -ms-flex-wrap: nowrap;\\n      flex-wrap: nowrap;\\n  width: 200px;\\n  padding-top: 0;\\n  position: fixed;\\n  top: 0;\\n  bottom: 0;\\n  left: -200px;\\n  background: transparent !important; }\\n  :host.active {\\n    left: 0;\\n    overflow-y: auto; }\\n  :host > ul.nav {\\n    overflow-y: auto;\\n    direction: rtl;\\n    text-align: end;\\n    padding-right: 0; }\\n  :host > ul.nav::-webkit-scrollbar {\\n      width: 8px;\\n      height: 8px;\\n      background: none; }\\n  :host > ul.nav::-webkit-scrollbar-track {\\n      -webkit-box-shadow: none;\\n              box-shadow: none;\\n      background: #EEEEEE; }\\n  :host > ul.nav::-webkit-scrollbar-thumb:window-inactive {\\n      background: #DDDDDD; }\\n  :host > ul.nav::-webkit-scrollbar-thumb {\\n      background: #CCCCCC; }\\n  :host > ul.nav * {\\n      direction: ltr; }\\n  :host > ul.nav li:not(:last-of-type) {\\n    border-bottom: 1px solid transparent !important; }\\n  :host > ul.nav li /deep/ > a {\\n    color: #335eea !important;\\n    font-weight: 600;\\n    line-height: 2em !important; }\\n  :host > ul.nav li /deep/ > a:before {\\n      font-size: 2em; }\\n  :host > ul.nav li /deep/ > a > i {\\n      float: none; }\\n  :host > ul.nav li /deep/ > a:hover {\\n      background: transparent !important;\\n      color: #335eea; }\\n  :host > ul.nav li /deep/ > a .menu-item-beta {\\n      font-size: 10px;\\n      position: relative;\\n      top: -8px;\\n      letter-spacing: 2px; }\\n  :host > ul.nav li.active /deep/ > a {\\n    background: transparent !important;\\n    color: #335eea !important; }\\n  :host ul.nav.foot {\\n    overflow: hidden;\\n    bottom: 0;\\n    width: 100%;\\n    padding-top: 1em;\\n    padding-bottom: 1em;\\n    border-top: 2px solid white; }\\n  :host ul.nav.foot li > /deep/ a {\\n      padding: 0 20px !important; }\\n  :host.with-header {\\n  top: 54px;\\n  height: calc(100% - 54px); }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/sidebar/sidebar.component.scss\n// module id = 1438\n// module chunks = 1","export * from './header.component';\nexport * from './header.menu.component';\nexport * from './header.burger.component';\nexport * from './header.model';\nexport * from './header.module';\nexport * from './header.service';\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/header/index.ts","/**\n * Created by mthk on 25/05/16.\n */\nimport {Component, ChangeDetectionStrategy, ChangeDetectorRef} from '@angular/core';\nimport {ViewService} from '../../service/view.service';\nimport {SidebarService} from '../../service/sidebar.service';\n\n@Component({\n\tselector: 'header',\n\thost: { 'class': 'header navbar' },\n\ttemplate: `<ng-content></ng-content><burger *ngIf=\"mobile\" (change)=\"onBurgerClick($event)\"></burger><header-menu></header-menu>`,\n\tstyles: [\n\t\t':host{position:fixed;top:0;left:0;right:0;height:56px;padding-left:10px;background:#FFF;min-width:350px;font-size: 12px;}'\n\t],\n\tinputs: ['mobile'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class HeaderComponent {\n\t\n\tmobile: boolean;\n\t\n\tconstructor(public view: ViewService,\n\t\t\t\tprivate sidebar: SidebarService,\n\t\t\t\tprivate cdr: ChangeDetectorRef) {\n\t\tthis.view.resizeStream$.subscribe(() => this.cdr.markForCheck());\n\t}\n\t\n\tonBurgerClick(active: boolean) {\n\t\tif (active == true)\n\t\t\tthis.sidebar.openDefault();\n\t\telse\n\t\t\tthis.sidebar.close();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/header/header.component.ts","module.exports = \"<div *ngIf=\\\"!messageSent\\\" class=\\\"panel-body\\\">\\n    <form class=\\\"form-horizontal\\\" [formGroup]=\\\"form\\\" (ngSubmit)=\\\"onPasswordChangeFormSubmit()\\\">\\n         <fieldset>\\n            <legend>{{'PASSWORD_CHANGE.TITLE' | translate : lang }}</legend>\\n\\n            <div class=\\\"form-group\\\">\\n                 <label class=\\\"col-md-4 control-label\\\"> {{'PASSWORD_CHANGE.FIELD.OLD_PASSWORD' | translate : lang }} </label>\\n                 <div class=\\\"col-md-8\\\">\\n                     <input class=\\\"form-control\\\" formControlName=\\\"oldPassword\\\" type=\\\"password\\\" placeholder=\\\"{{'PASSWORD_CHANGE.PLACEHOLDER.OLD_PASSWORD' | translate : lang }}\\\">\\n                     <span *ngIf=\\\"form.controls['oldPassword'].hasError('required') && form.controls['oldPassword'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.FIELD_REQUIRED' | translate : lang }}</span>\\n                     <span *ngFor=\\\"let errorMsg of remoteErrorsOldPassword\\\" class=\\\"alert alert-danger\\\">{{ errorMsg }}</span>\\n                 </div>\\n            </div>\\n\\n            <div class=\\\"form-group\\\">\\n                 <label class=\\\"col-md-4 control-label\\\"> {{'PASSWORD_CHANGE.FIELD.NEW_PASSWORD' | translate : lang }} </label>\\n                 <div class=\\\"col-md-8\\\">\\n                     <input class=\\\"form-control\\\" formControlName=\\\"newPassword\\\" type=\\\"password\\\" placeholder=\\\"{{'PASSWORD_CHANGE.PLACEHOLDER.NEW_PASSWORD' | translate : lang }}\\\">\\n                     <span *ngIf=\\\"form.controls['newPassword'].hasError('required') && form.controls['newPassword'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.FIELD_REQUIRED' | translate : lang }}</span>\\n                     <span *ngIf=\\\"form.controls['newPassword'].hasError('minlength') && form.controls['newPassword'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.MIN_LEN_8_CHARACTERS' | translate : lang }}</span>\\n                     <span *ngFor=\\\"let errorMsg of remoteErrorsNewPassword\\\" class=\\\"alert alert-danger\\\">{{ errorMsg }}</span>\\n                 </div>\\n            </div>\\n\\n            <div class=\\\"form-group\\\">\\n                 <label class=\\\"col-md-4 control-label\\\"> {{'PASSWORD_CHANGE.FIELD.NEW_PASSWORD_REPEAT' | translate : lang }} </label>\\n                 <div class=\\\"col-md-8\\\">\\n                     <input class=\\\"form-control\\\" formControlName=\\\"newPasswordRepeat\\\" type=\\\"password\\\" placeholder=\\\"{{'PASSWORD_CHANGE.PLACEHOLDER.NEW_PASSWORD_REPEAT' | translate : lang }}\\\">\\n                     <span class=\\\"help-block\\\" *ngIf=\\\"form.controls['newPasswordRepeat'].hasError('required') && form.controls['newPasswordRepeat'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.FIELD_REQUIRED' | translate : lang }}</span>\\n                     <span class=\\\"help-block\\\" *ngIf=\\\"form.controls['newPasswordRepeat'].hasError('minlength') && form.controls['newPasswordRepeat'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.MIN_LEN_8_CHARACTERS' | translate : lang }}</span>\\n                     <span class=\\\"help-block\\\" *ngIf=\\\"form.controls['newPasswordRepeat'].hasError('notEquivalent') && form.controls['newPasswordRepeat'].touched\\\" class=\\\"alert alert-danger\\\">{{'PASSWORD_CHANGE.ERROR.PASSWORDS_DIFFER' | translate : lang }}</span>\\n                 </div>\\n            </div>\\n\\n         </fieldset>\\n\\n         <button type=\\\"submit\\\" class=\\\"btn btn-bradmax\\\" [disabled]=\\\"loading || !form.controls['oldPassword'].valid || !form.controls['newPassword'].valid || !form.controls['newPasswordRepeat'].valid\\\"> {{'PASSWORD_CHANGE.BUTTON.SAVE' | translate : lang }} </button>\\n     </form>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/password-change/password-change.view.html\n// module id = 1442\n// module chunks = 1","module.exports = \"<table>\\n\\t<tbody>\\n\\t\\t<tr>\\n\\t\\t\\t<td class=\\\"colorpicker-cell\\\">\\n\\t\\t\\t\\t<colorpicker-sample colorpicker></colorpicker-sample>\\n\\t\\t\\t</td>\\n\\t\\t\\t<td class=\\\"colorpicker-cell\\\">\\n\\t\\t\\t\\t<colorpicker-text></colorpicker-text>\\n\\t\\t\\t</td>\\n\\t\\t</tr>\\n\\t</tbody>\\n</table>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/colorpicker/component/colorpicker.component.html\n// module id = 1443\n// module chunks = 1","module.exports = \":host {\\n  display: block;\\n  position: relative;\\n  margin: 0px;\\n  width: 100%; }\\n  :host table {\\n    width: 100%; }\\n  :host table tbody tr td {\\n      position: relative; }\\n  :host table tbody tr td:first-child {\\n        width: 33%; }\\n  :host table tbody tr td:last-child {\\n        width: 66%; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/colorpicker/component/colorpicker.component.scss\n// module id = 1444\n// module chunks = 1","module.exports = \"<div class=\\\"arrow arrow-{{positionValue[config.position]}}\\\" [style.top.px]=\\\"style.arrowTop\\\"></div>\\n<div class=\\\"saturation-lightness\\\" [slider] [style.background-color]=\\\"data.hueSliderColor\\\" [rgX]=\\\"1\\\" [rgY]=\\\"1\\\"\\n\\t(newValue)=\\\"data.setSaturationAndBrightness($event)\\\">\\n\\t<div class=\\\"cursor\\\" [style.left.px]=\\\"data.slider.s\\\" [style.top.px]=\\\"data.slider.v\\\"></div>\\n</div>\\n<div class=\\\"hue\\\" [slider] [rgX]=\\\"1\\\" (newValue)=\\\"data.setHue($event)\\\">\\n\\t<div class=\\\"cursor\\\" [style.left.px]=\\\"data.slider.h\\\"></div>\\n</div>\\n<div class=\\\"alpha\\\" [slider] [style.background-color]=\\\"data.alphaSliderColor\\\" [rgX]=\\\"1\\\"\\n\\t (newValue)=\\\"data.setAlpha($event)\\\">\\n\\t<div class=\\\"cursor\\\" [style.left.px]=\\\"data.slider.a\\\"></div>\\n</div>\\n<colorpicker-sample></colorpicker-sample>\\n<colorpicker-text></colorpicker-text>\\n<div class=\\\"buttons\\\">\\n\\t<button type=\\\"button\\\" (click)=\\\"resetColor()\\\" >reset</button>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/colorpicker/component/dialog/colorpicker.dialog.component.html\n// module id = 1445\n// module chunks = 1","module.exports = \":host {\\n  position: absolute;\\n  top: 0;\\n  left: 40px;\\n  width: 232px;\\n  height: 290px;\\n  border: 1px solid lightgray;\\n  z-index: 99999;\\n  background-color: white;\\n  -webkit-user-select: none;\\n     -moz-user-select: none;\\n      -ms-user-select: none;\\n          user-select: none;\\n  -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25);\\n          box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.25); }\\n  :host, :host * {\\n    -webkit-box-sizing: border-box;\\n            box-sizing: border-box;\\n    margin: 0;\\n    font-size: 11px; }\\n  :host .saturation-lightness {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    width: 230px;\\n    height: 130px;\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOYAAACCCAYAAABSD7T3AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwksPWR6lgAAIABJREFUeNrtnVuT47gRrAHN+P//Or/61Y5wONZ7mZ1u3XAeLMjJZGZVgdKsfc5xR3S0RIIUW+CHzCpc2McYo7XGv3ex7UiZd57rjyzzv+v+33X/R/+3r/f7vR386Y+TvKNcf/wdhTLPcv9qU2wZd74uth0t1821jkIZLPcsI/6nWa4XvutquU0Z85mnx80S/ZzgpnLnOtHNt7/ofx1TKXcSNzN/7qbMQ3ju7rNQmMYYd/4s2j9aa+P+gGaMcZrb1M/tdrvf7/d2v99P9/t93O/3cbvdxu12G9frdVwul3E+n8c///nP+2+//Xb66aefxl//+tfx5z//2YK5Al2rgvf4UsbpdGrB52bAvArXpuzjmiqAVSGz5eDmGYXzhbAZmCrnmzddpUU+8Y1dAOYeXCtDUwVwV7YCGH6uAmyMcZ9l5vkUaBPGMUZ7/J5w/792/fvv9Xq93263dr/fTxPECeME8nK5jM/Pz/HTTz/dv337dvrll1/GP/7xj/G3v/1t/OUvfwkVswongjdOp9PzH3U3D3zmWGnZVXn4jCqs7wC2BKP4/8tAzkZsoWx6XrqeHZymvp4ABCBJhTQwKfDT8gzrZCIqi5AhiACjBfEB2rP8/X63MM7f6/V6v9/v7Xa7bYC83W7jcrlsVHIq5ffv30+//fbb+OWXX8ZPP/00/v73v4+ff/75JSvbeu+bL2WMMaFbAlpBNM85QX+ct6qoSqkPAwuQlBVKqGNFSUOAA3Bmu7gC5hNOd15nSwvAOUW7C4giUCV8Sgn5L9hNFIqTsp0GxI0ysioyjAjkY/tGJVEpz+fz+OWXX+7fv38//f777+Pbt2/j119/HT///PP49ddfx8fHRwrmTjV779EXu2px2xhjwtdJZQcAWQIPLPISsMJaSwiD8gzIKrwSyATE5j5nAbR5c1dBUwBlsEWW0h6LqiYsqFPAQxCyRZ3wOSARxmlXMX5k64pQfvv27f75+dk+Pj5OHx8f4/v37+Pbt2/jt99+G9++fRsfHx/jcrmUFLO31gYDWblxRIs/TqfT7ousxJsAxXA2Gc7TA9XdgfdoHbFsj76X2+1WArgI1ageGwA3qupqoHsmcbI6Fu93quggFa9d7LeDtgKfAFHBJ+NEByIkcJ5KervdTmhhGcgJJSZ5vn//fj+fz+18Pp8+Pz/H5+fnmGD+/vvv4/v37+Pj42N8fn6O2+1Ws7JjjP6wraMI5E4RZ8x2vV5TSwkquotV7/d7Tz6HFWsD/qNcdw0CQ3q/321c686TwDVIdbuy73zNldhSHb8I2klZznm+InBS4U6n0302aBFsLhHDAKJVJVglfI9jhvu53W53sLANYNxAiDA6MCeUHx8f9+v12i6XS7tcLqcZW57P5yeY8/fz83Ocz+fnsSmYUyknWEG85WBst9stzSLyMdfr9Qi08iY15UZ0LlDGLhR3o5zK2j7OPUTD0E+nU3tk7Xb/16NFbhloAMuY1zjLUOO3BKeIDe+Z8s3/J4gFo4TM5jPmuRg28foUKKVSwo16TgA5npywcWLHgYl/Pz8/73/605/ab7/91m63W7tcLie0sZj4mao5gTyfz88E0f1+j8EcYzwTPEG2cqjyfHNF0M8fuqEiaOVnRzZZQNh5fwQyHg/HDGfJo89Q1zb/quu5XC6773I2XKfTqd/v9+d3wuqWva/YTdUdEV3fhIv/Viyps6YE3x3r43K5bJQS66zaxVGFsvd+//j4aF+/fm3fv39vt9utff36tf3+++/tdrudvn37ZuNLBaaCMgUzC+rZRiFowxUuJI8YMqcCp9Opq5vagaYU6lGJA1XQqejchw6Cj0Gw5nYBrGw01A2O206n04BGouNNyTfp/FwElhUey6nXrIKw7QQWddxuN2ldL5fL839gSPF8ahu/JvBO48CPSuqMf8Vp9/P53L58+dLu93s7n8/tfr8/39/v9/b5+TkhPJ3P56mQ436/j+/fv+/iSgbzer0+AZx/5+88bv6OMda6S5z6kd21fYC9dxv7cIJJ2d9AOS30fPMzyHiTM8B4DF6XUlYHp4KQW3W+1t77MNB1vGHxWq7Xa7vf78+y5/N5A+H1et29xuP5dbYtyaRu4AksbPq6936fjRzXRxBbPr/b+b18+fKljTHaBBBfn8/n0/1+H1++fBnn8zm0sB8fH5u4cr5GuBhMVk0EEn9RsctgVhM+ixlJtMA23R8B6yysAstBOgFXIKKCMIgToMqNEu2fYMH7ztc732dQKkCj1ytAZtY0Kx8pIr8GGJ+AT3V+2Hirhl++fBmXy2Wz73w+b17P8p+fn8/tUwGVleVkTyUb68DkfayWY4zxNRihU4EpLJPZVrK+u7J4/mgfKqeLW9X2REWlItL1diynbDDb3+jXgYjQqn0rrxWc+NkILP7F7xIbMvx7vV53x40xnlbWJF12ZSag/N0pW6t+ZzmOMzHjajKwDfond78zYTdfq18up97zr2q8v3IioBprRtBl0EZ9og5WBRGOdOHjIjXF7UotFbgOWnXzIJyzYvjG5IYgsmMOxHkz8OsMSrVNWeq5T8DaOcbEv1Od5rbs9aO7YvMet63EkF++fMExq+MRl4/L5bLZN/+ez+fnZ6KazuMqXSQVO5spJXflHAIzes/xJseckRJiDMog9d6VfRrqXMr6KpVV27jRwJacGovOAM1zMdQMnwK1AubK63kdCChvI1C7g0z9nf/D+Xze2Vj8H7Gx4P9duQlsYCrqyN8XqG3Hm/10Oj3jw/n+crlstuM+jPmmxT2dTuPz83Pzt2pn1XsEHX/bnPaVqVmh0xwOt0o6XLLAHePUU203wHfcrspCwmV3TryB5s0Mseeg97x/BwzCjBlbB+pRAPla0BVQuT6V6QHdBlj3d0KG147b+DqxQeUymDO43W4dQar+TIjwmAd0z8/h65vf0/yLv3Pb5XLpru/ydDo9s7ET0I+Pj6dKK9VUEIeKWQWPAOrJ8LKd4vE+t91Y3e7UFlWatg2VwJnb+HPmtvm/sfK59/OaWF3x/eP1UPHvA5DDYDpYXfb0drv1V2DkBkxtw/tEWVVlXWdC9pFYs5/jfh9dS/16vW7s6lTG+TfqsxSJHxkXXq/Xdr1eu4LsfD6P3vsT3N77DkL+zPm5jSdKL4zR3AxQd6rHkLkYlSowsrq7znzu6wSwdsMJOXmA5fBcjxtgMGBYHlr5zokhtsMCTgXLQOW4XC6dEyEMprL8mAQzXRgduix2yZzorxkYsDn3hB1VeMLGsXsVtgl2pW8S3svk0vw7R4hNaHvv4cACl5HFzwIH0Kc6zu4XjDPR/jpAVxWzO1Xk2DDb3vTcxeGU1iWZHkmIDWziWKvirCJ4Dravs6IJ/GG6cTqWdXDy+fArQDVVkLqkVjAoZIITdmmIqXwqa95N3+MGYoZQdRVNO53Y1xRkhO16vY7eu507Ca9lJnbGpxOemQhSw/AQsmmp5zU9BiU8G6wvX76M6/U6Pj4+do0Bz4CpgiknTUeDqwlKBmg3u4OVjrZ1A+rAcgaejWq6eJCvCYFDONSwOgHX4EQRw8lxbzDOdEK6gZ3Hk1b+8g2o1JFtKXyv/fEdTXuWjWXdAZiBp6ADeDrCFiim7B6ZFneeI7Gvm/PMkUDX67W7xI8b0D7/v8dA9qfN5oaCf74WZjH0mf1cmfY1Y0JUFmVrTWu8uzkNcLtEj7u5FXBTkfC6GOA5q8YMxO8KVvF6sAVGdcrUbsKODcQKkLMOMdmlxum642YrPm26AlhZW1YB1R+rrGswE8TaYAWeUMxdf+WjwSvZ2Ef3ytOyfn5+PpVPAaqOn43MtNBqvmjjxbjM4lZjZY4gqNMI5ktaW/sYKNwS+9lFQzGihmMCKPa7+Z0V6Eb0GRmobtpX8JljWu5FMLN5ja6hG9kwQgZqf5+1NH5UxzkFReCdWhJ8XdlGUkxO7HRlYRm4mVO43W7ter12TPJEw/rmEN3L5SKHIWZg9mz+pUoKOYq5bJTJdX2gme1UcxMZQFaEQIlHct32M+Y1BzGkGuzfiyAN9z+ugplZ1symCrDCYYkGxDTpI9RzBy0rHyeDUC1nWaeUaD9n4xkNyYMBDZtzZ3B++fJlY21XFDOcARJlabOyiS3uCpLI9jrZjCDkaVvcCCjwognKShWdzXZWlZMvVTgD8LpqlCLrqgbcB+qYwrgKYpT0ccCqbKyCValkEabn/FynogCrPKfqf51xJ7sGB2ZXcZmxoSOztjx300DZi7a0/2AIR0UlBag9SuDw6KcAzlaB7vHZvWpjK90dyrq6bKyDUZQbR0B05biLQkHIcSUmgIK+SwuqgHCnoio2RQU1yj+BnBy9pphVKLGyC7ZzFK1pxWK+E8IhVCWLN/uLtnUU4ayoYLoaANz8FdtaSvY4pV0BEW2ls61czqllBKpTyKgMAhrZ1cdc1RROtPmvWNkdcKZ7ZKxaWjiPLJMpp7OZKxA+rqG/oJLjxf0pnJlqLoDZo3gyU0mKGys2taKecj/d1C+rJSplBqlTyAqgR+D8KjKlmRL2gtUcAdCtsL+ijCNT1oqqqkH2OHEbG5sDFnUg5Aa+yLou2VU1ptj1S2ZQqv1ORZN9IWzRfgaRBxKoBE8UWyqlJFtrIc0AxNjSjed99CTY/XDfSzCz5M0IZoVEsWnPFNTsl8ooVC1TzbGgqFZNDSgVwKK+1sGDMKqxZCWGVMDysiEr1jVSQJUYwj5iHOlThdHt44SQg9CN+nl8D90NMIgAdgr46JqRiR9I8vRdFvbr17m/yxUMKjNLMiVUADwu2CWGhhi+F55TWM9M9cogzms1dnM4uOF/LAEYWdcqnM7yFmyq3IfwmOROd7Y1iFWtOjoY8To41mTV5IysgFFuRzsbWFGbNIIJCDv1dOo4lZG7jWBwRFtVTKuWyeCByJKOan8oZ3ep9XddNl0tDuaywLz9cXPYeDAA0SpkBO9sbVcTOVWldPv4uyzEkzxHtjvonHoSkFEWNoo1d8DhcQputd2ppNon4BzoAiJ1hBFQg0dVtdbGHHDQWushmNEQukLM2QO1G2Y8bgTXqFhcBJj7EjPgcPts8US8qPpPB/dXznOh5Z438tzH5ec6QgrOKrRRfKmysBmUDB+PhYabMlVPER+GCSITTzr7am2tArH3bgcEzPJm+cr5jJ4NnHNFDVrFXcI5Le9k5Jnw+bedbV+FfRzZIHaOOaOsLY0/7UGs58DjrGwKMIMFIGzOEW1/jGsdAtCN6hEAI4hBe9YXeRROBSVPAVPAqvIM5bx5hVKWAMP6zBRy3iescridVdFBinBxXDnG2GRY2XbCvp1lhvGtO9Bxu5h908XQu42lnSArMFdizMim8uwRCxPGnnOS8lwpnbOiDqTAjsrRN/PcoAScCbaACqVM40ylnjjTBs+bwWlAG23/UKbdkiwKWIQPGzWaczpoSlxPEj822cNWkpS7FyzsDrqpfgpG3jahw2vgbaSQAxuLWZYt7JzyNe8JoZpNAcvDFOdw0wqYT9AK1rZz/DdbSlLPp0ryIxgQJlK9AZlEq7IOXpohg9PIhrCng88JsOxiV4ZWAYfg4sikx/8ky2Z9l862uqwrfscIH8+ugTmVGyiddeVYUgEMn4GZzg14EwIsh9sx2cKKiWXReuOE5gzGOQgdlRKVVdlevqb279Xq0Qnsts2VDaBO0coezsruWtHApu6sKG4IBhN0aGU2kLrMKGRTN3HmbCDwKV14zvkMEDG4QfZVspVlaNU2mhc5TEZ3N1h/zqTheuLpW05ZWTGVjb3dbnNmxKZBnN8JqidaVLKAOyARNLS+MB54Z2+VaqoMLKroVBlngefnTPAcoHNWCSvlfA8CI0HEmBNBnBlXyMrzU7A7WVm94PPqQ2gmqKx+WDGsnvilmcSOBJqOK1nYyAIzuAyesq3UdSK3KfWcYKD95HmfYOU3qser2CtYEUA+FpfqdNvgPBZUBhDrGONRVlQsh8rLcaUCykHG0OOUwTlLBrsh5soEMGezi1E4HRVt1icp5wZEFXdibCkG8Y8vX75sbO4E0iom9z+hjSiOfy3DhpXItpVhE+UGQdvoWjtChmrGHf4YAzKgBNnGtuJxFCeGdhUAfQLLK8kBYAP6gvFJZajMG3Xkycy8KuC0q4Eyymwtwdxdv2M0mIBtK0LKnf640j00Auq4gUkdWGlhs22qJc6dZCsL19oxnlTJG4SYVRIGpD8TPFBuM6OElbS1pldid4mGAyN6ZIupbC5bXJN9fdpbThSxLUaI8IG1XIYBxW3Tjs6KQosKcxfxcQmdnwRGM10GnFcCy2XYunLMyAkdgk4mePiczsLygthcBut6goOqS7YVFXADLjaosB6s6ofcZWAZSIRYqSUkizYwttYab3vUOQ9w2HRxIIg8WwRVeE68xi4UtL3zRphxplzwuZrcqYCq1I3jPI5dnJIygEohMbPqVJSzrwzxBJTs5zN+ReUSgxikPQVF3JVBeNQxbHENrEMNvEdFZVV9lH9+ORGEsNZQpyTNc4C3AG7XF4ngzq+DrO2zbuaaOXgdaFcdkEotoSFBVX2qJ0C8OWZeG4KGlpghA0XfTOPCqV2qqwQ26QWfF2PMLhI2w1lVAa2aPsYd0za25MQRwgcZN6uQDCi+ZxiD4XEM2kZxOT41FnZnaRlcpZouzlRqqdbQVWopQoSB58RV50lBNrHi/AwXS5LrwDVlpY3Fc3ByiYGc52Trist6kOXdwInAQtJpp5QchyaquYOV7Su+fxVMaV3dc0RE2S6mUY0gLt2pMcYqrKIQ9w2l1gpQUMtQYcmmbt5DTNxdhnUCjQqtbK9SUSzvrC0mmhhE1e2FS2+oxypy/ZASutkmtjx3vcBC24PX65nbqkBCRhfjS9kIYPnee8cMagVOhI/3T1fAmdtAWZsCswTJCkQVNa0qWKSKPOpHAUhD9DrbVcyoYkwqhvh17vYAayXLQyKGYdxlUDFp494rBXRjYgO17DDYetNIUj/ezp6S0lnlpEwsWmJMkOwsKXeZKEAjIHn0EQJISaRBcO6UMINz7p/bEjjnw4ft+xmDvksxX4G2rIris7qaeKwAFMP2Oi7n4criuZwtpSUwpfLxSnORSrIqusc5ZFaXysqRWjiZ2DyAWEIL35tVSoQElFACjOeGGSE7AHEQgdo/LSvCOgGBvkxsmDbvlS3Fp5vhaB2TAGqRKrKKMrhLVpaGzEVjZ0OQxDhaCTA+QyRR1d15aQzrJntL3RibsipjG6jlgL4yqbS0sNYg1e84vhbBVrElK64CUcWYXDfKxhpIuxiVJZUxsbMy/uRBKTNRQ4kQ3LdRYLS0rJjRPlTPqY6gdJsEDc+aQXAn+HgsNUCbRuF0Oj0zwnA7bWDkbhO5Ens00qeQhS1laBMl5M/cAaxsLF8rKyql+Tf7ELLEGu/ixiimdCvo0TjfpjKwaggen4eh5v7LokLKbLuyvHhcZG8dhGrEDx7Hg93ZppJF7qBqO3iVveXEDQNInzeoe8Yq6ePaZBZ2JviM3W2UAGotekRCAGq4EkF1X3DOnR11yRsBL1tRa0PVcZiNFXZ2c34FskvomInQQ6lzpJoZbJxk43NwKJFBquJSsrByHydxKOnTxQASBmS3j+JMnsHSla3Ec6K9VWoJVn9zfjwOM7hqYAAqJQwE2a3nA48J2QGegRkpZNivSY+ys3EkKd4oJIwsvIHl3cWgLt5k4NH6OmtLWdpurOkwEMupYc7eMtDRhOcI2ui5JhVIzXzLyto/GAPuZoyo8wkoduVgJglCt7OhGbgID4Mq4si+63zUS1FuFFXFlqyaj2emHlLMcBqYu0FMuR28BbB7lOxRMSiCQXFhCKuwkhZ+pYDiGSgbsKKV8MiSRsuHSIWM9rklRiIlZZuqXjsQK8ooYJMgq3JKWVkhHbhsVxFUzthOWPkYijcbx54IKsSdT+uLr3crGKyoYgFiGR9iBk4kfloUX+JIlQRQqabmpgnhqtpQpb6RVQ1WH5DnrS4hEoGZqaerQ2dhFbz8XePxShmDbo70eISjoorO2vK8SJXI4SUmEU4zWKDzUDtWTYw7xXlbSTEj4FRg7zKnKoGRALv0Gs9Tgc1BpCywGZRQAtqVz2xrBcAMzEpfZwFSa2G5W0QBFjSMapWAEFa3HcGN7CxDzECyIkJ97qwrqWNTWVo876PPsjPkj2wvgroM5lLZKMETKVql/CvnWVFiFa/SzJUQwkoZsr67Y6vlSRV3/2tmNTOY3vnaxYwMuoPKqdzR1w7IqHymlPxaAThfU7Ko2ZXYj4AYJHL+kNdKwRQYESTRa5fsUZ/rVC1TMTyWVyYoqNtuzaHsMyv2tvoarxdfqwYgU1axFo/cnql1FGsqK+uAROV8BX4GU8WcZTATi2q7Qcyi0O0V+GhWBMNRUkn8H1SsWVE5By3Gi0ECqUeJoBfAtDa4amkdXG37AGP5Ggeb84p7UazpoKRzdFzeQ8HkoHGxprKy/Hpm5t12p47J6xTYDEz7uINEXSuxYXvFskYAc+ySxH9sf5ftKzU6IbwVBcUGg5e5FMCEXSErZR0wGayV19woM9guPjTqJdVTqR4uE4nJnLldWVkECCZLd2VLF+xtamex7IpiriSDUpvrpn9lrwGMCHyppMH+ps6LILsuFGUj1XEOXiqbqSHPUKnClpWV68kqtURVNDY4TNaocykoYeTU5ngGEQa/S1DnnE4AeXMcKjHPAmFVjCBENaeyLVNHfr3px8xUstJ94hIpfH4HKE/eDaArK6lSyVVFbdt1gxTIVk3pppVlFXi4pEhVBTObquohU85MLXn1iahvUkHJjSCMc01tLFveVVBx0DodM6jftCu7DOtIzYxrc0qp1JGP2ayYFz2Gb6HvMrO8cnGtV6Gjm3uImSfD2GpWK6uowbZGMxFKQCo1pOMtcMXFpRst+hXGoAomF3sSTBGgTglbBKWwsQ3tZqaYSp0Z1CimRDWFcCJUPYJ00BI5FkKYNoifuQxmN88SWVXWLMaUqqqgC0BmQJR6sk3u9NCf6jYLXxAfqsYEgVLAhRY2AtgtflZNFmFyhxdrLkAdWlk4D88M2ixHyepIdhMHrG/iR1ZGtq0MGpbDbRPYOXeSY1M6Ny4ZstvGSktK+XbFPATj2D371saPEsAMXhXrsZ0km/XStkhhMyBfsa6uXFZe2VCe+YMr1+GKgwrQyNYq1VRrB+EizAow6NsdNKcyVEkYeM73ys6q4kAHp6BiFklTkIrVC5oYV7uzwOGCz4UJ0Stq2lWMJy4wtb+RetL6tZFicnJmBw5UjCvXXMZVJX2MQkbf+XN5EWd78Vz8/JEsMZTBiKNzsm1inLRUQ74H4NidaqI68j5sAFgxcRveC7ieLJXfQYxjZZ2CsiWFewZXJmBIlZ1tdtrX4hSuateKso/RZOtOKW2nmq1oTzeK6dRWAWu2NRVb4hq0SXm1GvtugHrbr5IXqmSktg5CuDE2MSlPwsY5kNE2Wp3AqiZbWVLAxiBF+2iBZbuNj6MB6rsMLC7FyasaYDyo7KkoPyEtw3pEMXfPvxAJi2jAQQgjrz0rLIZSWZlIoNhwd5xK4AR9mYNjWAaLrnuImJeBVN9zBORObVvbr+mTTfFSEJLSRnHo7hEJoIi8MFqjxmvgmF5URZz4zLFgZZ8Ctu2X7ggVccKm9gVxIsOHqxXgNMKnFWZYnf1dBnOhayXq17QwFlWW09eNKyVJFmXqaONGA5aCegMbJ3UUkGY1ic3nKWgjq8qfVYGQG1gRt6rs62a6HiqqUOqdesK5NmX4nGofJoiE1d0dF9lVVkvT1/kEEaaCoYOwFpcVcoLM+7669PxC9rWqktH0sWUYld0VCpuBZ/stVRcGgy9WX2+U1Qthi9SzAqSxzZsy+OiFzBYnySGV6Gku44rD8BCOZBV3BvD5+AKRHNwMEsB6EzHnJpkTAeiUlEGkcECeB6GDZTp5YEJTlvdrknxYjTllMkfNtXwDjM7uVjK5JXUUn43rrqpK2jytaxHW0M5G8DC8rtHMYs7KSgduVQMGTYFqFvVS6rkD3sDJ46afdYFwoq11AOKCBLhvwoUgc8IGANycR6knZrdJPdsuxnyjfd3FovTlRMdEdtOl5CMV5EHsXQBis7TOwvIDZaGj2Vnpbh7cpK63VwYEMLwqbjzyl699sawFFkF1yqjUU31HfC6sW1ZFVFuXVXVgz9keEaw0ys1lWfm+azQAQSWA+hKYVfsZjPncAcUB9oIayy/UZXRNckDGji77GsWbvBo6tPrWPqOyVkBUq+INeqpzNdYs/u0ifh5qmpqIW+33JVSUcwY70KL4U9lYdU6ljtSls7lmfi9g3YzeQfVkaGFaV3ODCnaD2N8wsEDFklE3RzM3ZghdYkWHsszq70FIecnKkVkt8ezMzRq9bkGuKojRLBVSod3Y1yPqKgYW7JRQTPVyy5xIYLjOgxgT52RKJUY1dOrIiRd4futQx/A5AcSmEjz0vFWrkLzvbWAu9HOWbGgxFk1VNTpnBKk6TgwisI/HcxYXP1uAWO72ULFlBTq+aSu2VTUs6hrxM2CF+hEor1VIA9ZmFUaab1lSSgZsVs4sxzHlVLoJHr9H4DhONTkI1XC0/wiY2NoWAG5RlnHFnq6oLccpQddMuJ/O17JVA5OHLi0BqCztq7Y1++ucCd98qLI8MIHBV/cKjxQTme3hFBS3MyCqnDsuym2o80HjvFFTtrURmNaGJsmVahImjTsUXKtQZTAVs7Mvv8/+fzUrZAXcLJ6M4koe6XP0b6SmWWNDzyUpQ8bl+LtWx4tuqZ36cRYV3yuVxPNwvIiqiQCSmu7srgTzR6nkyhpCarXwFy1vGd5iP2cY06lFr5Njhhg1Y6+NB28ftbK83s8rf7kLJbKwDFPbLg25a0AdZJEiqr5phixKMDlRUtcssq1hriLqGoH+zeNgVm9OemjsETV8JdF0NHnkIFxWY1OB4Yrp7rtWJ7NgAAAPXklEQVQ3oNs5nplyVf8u2FoLu1JrHveaZWQjqAkshtFa2gzsSG3Zpkbvg3HafF9slPPlldjFlK80Gysm8Mr4MPhneNWENPGjAIpmilTPATdTRTXlCBYHYAQuPwA36xIpWtGN4q3Y2MhiGsUpuSSnlEJRD8PorC7CFYVw+F51qThgabxsTxWzCGY0ZSsb3lfqAy0OPNjNy8xiQQKsHYFQ2HBZVvVbBuq3m1oWKajqaonsM6uZUr6CjXWNZ0l5E3h3jURma6kP3MJIiy1Lm+kahQq41N2iZja5sjtlLYNZHZrH6qUGm4vMbDp6Rw2CFmvuyFkrBcCyMtFqBaECmsHoK9BZ2LA/lJcRqSaDqnaWbrZdGaz3DLgIvBln4woGztbyJGqslwxkhhHrTjTYFXCtOoKS8uLdofVdAbOylGU6nlYpXWZts4nXBq6WxJitMNokHUJnbnJplQm+aGpY2a5GMV2QD1hRubBPFKdumf5OHkLHz0F9luE5kjBjRa0nFE5CUGqHw32MmjZ6xkgINVnSnZ1VZStK2qKlRaLlQgK7uTq7JFXJwM+3SOEKyhZNI+tJ0I5qMYy9k2qJD7dVWdqKXa0CKNR0Ccjg+B2IYu2fcBZJZkMFgM11r0X92wilghFGgzVnexlqB7xL9mS29SiYUVY2nXOZjNBRsyDsQPRWW5hrZ4XcdC4HVWRbjgJr4sFofK5SzjQ7rhI1UebdPdEbj6sqIvTZQZ5va08rABsAW0UxeWytAk7A2KJ9ZpxzCioB24XFtYAeXYxr6anSqhLgppEqWbGwLunTgrV+IjWlL29ljaAl4EQMGsErp4apeZiquwRXLXAqOCeru32mmydc6oWTSWpFAGdzeTB8RTHVMEtlM90CbbQCYhPjq3egYr1FGdYIQjiuDGZ5zZ/AzobKGOyLxti6c4Rwtv2anyWlLICnlLhxJRXt6A5ebDBWFNONbxWZ2d02mnu4S9YECpeppV1zSWRBWxHYzVIv1CXSouwqqX3jBBBDZdYQbpTQW4ZQlS8r5kH4suSRmg2++3JN10x1PaAmEkmtYlEdeGpJEM6kOuCqCR22oSujj5IV2HdT0zj5prLKTjXFAPjdQlyq7xIBxAQP5yMczG4VxAKw0n6ilZ2QBce2pLulkuxxqnoIzFfgqyqjil9S1VNwBrFmeyeops8yOjZUybZdfS8CuaTIJumzs5tODaNtLpFDQ/PcJGweLhmeL1nB0KqiUDScsiUVD89Di3HtrKtSULw3RLiygZD+7sF8JTObgYsrGvDNUFRGl1iy0Ll1YkUc2aJYMog920I8qW6YDCg1Mqk0JHJFKXkbgbRreI+qpYNOZHrVcDUba7pjsphSJNtK6upgRNAVoOS0mugBeN4bIZgHhuPZ/s1ENaX6KsVr+YNrh1Nb7ipR0PE5zbNRegCbrHRUw6Yf07dLBJl1f8KB9as2V1nNqAsl62LBBhehwalerkHmB1JFIEZKSEusdl5JQj1nJlHXSCF342gJ9CYGrXelknJIXqVP8sD+qtplCR3XH2qfKq0ygMp+KnVkKxNlZ8m2YkIlVMiCnXUwl7qznBKSvQz3m3Pt6oQbXO5b5FixCh/fHxUQW/AEcK6zCNqKQnL9sywqmKuwvqSYzT/aPVNNpVyhvRW21aqciCsjdWvBwILUvh5VyCzbWoC1pJjJ680CWsl+udKB6T5RwG1mlohnlpbg47iz5U9ha0FGtmRLFYBtO99y97Ap0z+ZDTAog6kSLZsMHg/IFkkgp6CpvU2U0cYVSdnmkjwBdOmXbxTWNWzuIbipMioVxEckZEoahSOiy2M3K0jcC1LhVDwaqG0ZvkcWqCnrG4GIxykrqlbWdw6LQyBaZR8HmLRIhQWsHswD42ZXVLNkf9l+FlW0HVQ2lwFsC/Z1FdzlQR0KaPfo+Fdfu+/dwVRICu1CGR7AEIiAhc+AZUF0kOBaPxmUqg4i64vQnU4nFDYJ9Nz+1fVXveH9qmr+kPILx8oKcRV/BFbxbE0JMT0kSD4w6L/lNY8ocsqagVdU3A3MjxhxcGuqzsPH4irpaow1q6OyrVjvp9Npc59E91LldboYVzJWdimWfAW2SNEKcDaX2FmBLLA/uKxlmhh613Is1URQApbKfttwxL02q6Onx5pQxSbPojAg+v5hAnN6LHVRDXIsvKtRjiS0qJUyZTAXVbAK82ElFJWaQdVoqUC1Unt7BVaTQudM6SuqexjQJN4+0icaxv/utbKv83ETbT8H8gjcOKxOJmbUa6OOVXht3dFY6rHv9XoNzFLceEA1o8+pKm0LAHPHZ2rYKjFq0hfZFixsqHJgD3eD5n+U0kb1mFjXkn2lvMSSOsNE/CdIAKF0Sytq6urOHUN5gwg4GZosgbmggM5ucra2qrS2Ig1cbiBBcxYzgzUDNLCvL8GbZXNp6ORy3LmS+Kk83zRIAK6A1ioKa2I9NapIuiUFdfC9766PFZUtqUr6KbWk+zZU1a/ZrIXEztrjTOfz7hwKziCeXIaraHtbZIMz+2pGgazCmw4qWAFvEdhodYp0Xq0pV7G1YWYWbO4qhGq42+Z8BYtrLWvluNPpZAeaFFS1vubPgbgxsqcpnAaszBovKaFoDQ8BGtjfUOl4NAG2nmQV04feJgumvX2fsrQEWZghL0JnVdYkn3DOZIeRN86RqPWCmsvGVqEMRnwxQAxwS8EMYo3IzmY2+BCcLp4MKiuyuhImamlbZFcNoNl7tp+RHd18ZjQIRKyXdFRhN98/hyKqwXWNo7O1wiaXoHN108REZZWEq6grnIfjzeg8jdRf1XEL4kkXa5bBjKxoKaljBjeHlVxQ4GaycpW4lDOAKtnTxHAtOfzOtZwHAM7sqVXkV6yu6kap1nHkXKqWF/4XHqjenNKqBjpR3l1ch3Ejg1+EsgdQhsdG0B4FM9sWAVWpuAyiwTPleZxt9VyZVS2qXfReWqTAilpr9ApoWTjxymit7NwV4JTriZyOA9B0k7HFfULourmKYHVnRQvqGL5HMHdqFcR2qWpmcK6eTwx2dipWrviDilr+fKWq3OWRWdHKwA4eu8wjchbeRzFilqjjZN3ufCpfkJ0/scVpnYk6L0PI77lxdWCZ87WiWm7B/AGquQSnujGKsB8CJmiJq8q1pKIVWyqOiTK66r18BN8r74/AE71fdC3yPS2MxdOpnE1tlVxD9JmVOoggN+r4PjAXVFPa3Eg5jVJGFVUGNolH20GVrUB7BOySWq6WqYQdWR92pcFMYMwckbSgCKCqD67DiiWu1g8MQC9ByfcFqW1L+jL714qNCuznoSxt0da2gtWN1G8F0BK0NN0nuimelUF9dIdAfjO44UT3CjQLoUeLHJFTO3gmpRuIIOvwBQCbqNeo3qtZ9iF6xVK13GRlo4zqimq+CGdTiR1uRY8oqgE02hZBa79kZXPMquxRHKla2saZWN4mRqZUj0vLCKhkjKnqOQHNuSZVJoKvAqS1wpEquvWDC1B2ypwrCPsRMEPVTODMLJMDv6qeKXwi2JYV5Sq4qKyvgGsHCLiuj2jR59V8gMqSJ2FJZRXEHVRHj3sFPrct6OpqlW1GpatQdt0GvwfM6n63InsGVFhJGaBqgqqIV6IsXllZgySPq4R3bnt3wi5cv+cN2yqQLW1T95KYVsWWtKk4cB9W53WQQflQYR6Wl4HaJZjvVE0D5yvq+RKgZCs5qdBEP5sD94cAvQLlSgNaSMAtHx88BuNQ41zdFsX30zKbcs0MLD/ihkpQzl0wiTqKLTfbKmCmyYICnK0IbaieC4CG9iSyLQ7cIMGQwau6TKoq60Apl3WN40LZpca1CKKK9VQyyIEn8w0F8F6CL2h8o3ixGwC7s7EWzCOqmcApYxYD4jsAzVS0sl2t98pA7vrKophCVSonbYpgH6mvSn24pTBV4sdtV3BtMq5k82y+IADvUJ0uAlkCVTxIaPm+UNu/qkV4F1TzHXCGrXIAqItBKypqK99VtAOVs64O4ObX7pHLVCpYHcRmwvLR7TvYAKBBN58LGVzDuFz+hQbWgncQyCZAk+VbsPSouf93261iZgmfCpwRbAvqmSqriU2PwhjaoOyYqtIegVXViTsmyta6bGySpY3gyRrpIyAeaWDDxtpsXwKyalMDKNP7YBXMqEskUsi2uC8FNAPxAKTVfT1o6VzM0E0jF+1rWcUuHvdyg7vgoFplX8HpvHpMCOMRUPHzZkInsqlFKNX/EIO52E0SxSzOwob2VmRLW5D1XIU0rbgM1AzWgyC7fe8G7xUAK/taEBat7luqtyP7EmsaJQOj5F+mrnZfCuYCfBUAWwShyd6pMY/vAHG1UqOYpbI/gy5T0CMKm+UO3gFuC85dgfDVeguPDfITrIBLsLrcgdh3CFgFZjaKJ4Iv3F8ANEqvuxR1tVKOgLoCa1jxboBAkj6v7j/icFbA7f4rfRnQDLRViG13i0vqBQrYVqBbADZT0ZpiHoSzvQpopKIFS3sE1HfBWlHXd0H7LnArqvougMtljHBgZnh3Eoz/BKjLML4Z2Aq0+hEJr9jaVUBbvNzCIUiroC7AWmmFw4o5AK3MtB5VypZMSFgs05JyGVwlwBqsEGAAa2ZU1CjUexXGsE4rKriilBvFzOKKo3AuAroE6QFQU3u8YpNXwS5k+1TZt5UrwouN4KiUEw+k3ZWDp1RXHNRqXb21Ts39945yZSg3VnZFNQ9CF3XeZyr5DgBXKiwCMa2MxeTDYXgP1Fsf9QNKZc0k81RJk3r6EQ3rCmBVyLL75EjZ1pIVDHoFtiOAHoB0BdTVylqBsKKKS+AeBXJVLY+CXASuGvO/Auq7GuEjDfGKg1oKa1z/dmmi9I9SUGNhl0AtfulHAawoYrnSkmNXAVuGEhrEVXvUF+A5Ct2PqNOjDetyna4CmeUolmeXLN4Aq7C5Sj10Q7yjgl+t6CNxSRHmI5X+CpwreYB3Qfdqna4q21KdBuc4GoZsn49ZOOiVinwHqK9WzjvgeweEh2AU5+vtxZ9Cd9Wqkh49V18E5oj6vVyn0RStAyGIO5edXRKd5B0VGVXq2yr3xYp+5Ut+C4QJ4P1N339pQMjRejj4vb/Dcr6rQc3O/0rjmtZpeYCBiCHfCemRbNhbK/pNUPc3wfKy5f2D7OlL3/uPhve/oU4T0F8f+VNM2vyoiv0jK+KHQfdHq+0bncz4oz73/+Y6LbKw1o/5B7eOf1Rl/0du9B9tn/9bvrf/j+v0h6ttn2tp/r/4819y4/zv5391uvzzfwDifz6phT1MPgAAAABJRU5ErkJggg==\\\"); }\\n  :host .hue {\\n    position: absolute;\\n    top: 147px;\\n    left: 70px;\\n    width: 150px;\\n    height: 16px;\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwkUFWbCCAAAAFxJREFUaN7t0kEKg0AQAME2x83/n2qu5qCgD1iDhCoYdpnbQC9bbY1qVO/jvc6k3ad91s7/7F1/csgPrujuQ17BDYSFsBAWwgJhISyEBcJCWAgLhIWwEBYIi2f7Ar/1TCgFH2X9AAAAAElFTkSuQmCC\\\"); }\\n  :host .alpha {\\n    position: absolute;\\n    top: 172px;\\n    left: 70px;\\n    width: 150px;\\n    height: 16px;\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwYQlZMa3gAAAWVJREFUaN7tmEGO6jAQRCsOArHgBpyAJYGjcGocxAm4A2IHpmoWE0eBH+ezmFlNvU06shJ3W6VEelWMUQAIIF9f6qZpimsA1LYtS2uF51/u27YVAFZVRUkEoGHdPV/sIcbIEIIkUdI/9Xa7neyv61+SWFUVAVCSct00TWn2fv6u3+Ecfd3tXzy/0+nEUu+SPjo/kqzrmiQpScN6v98XewfA8/lMkiLJ2WxGSUopcT6fM6U0NX9/frfbjev1WtfrlZfLhYfDQQHG/AIOlnGwjINlHCxjHCzjYJm/TJWdCwquJXseFFzGwDNNeiKMOJTO8xQdDQaeB29+K9efeLaBo9J7vdvtJj1RjFFjfiv7qv95tjx/7leSQgh93e1ffMeIp6O+YQjho/N791t1XVOSSI7N//K+4/GoxWLBx+PB5/Op5XLJ+/3OlJJWqxU3m83ovv5iGf8KjYNlHCxjHCzjYBkHy5gf5gusvQU7U37jTAAAAABJRU5ErkJggg==\\\"); }\\n  :host colorpicker-sample {\\n    position: absolute;\\n    top: 147px;\\n    left: 15px;\\n    width: 40px;\\n    height: 40px; }\\n  :host colorpicker-text {\\n    position: absolute;\\n    top: 205px;\\n    left: 0;\\n    width: 230px;\\n    height: 50px;\\n    padding: 5px 15px;\\n    border-top: 1px solid lightgray; }\\n  :host .buttons {\\n    position: absolute;\\n    top: 255px;\\n    left: 0px;\\n    width: 230px;\\n    height: 32px;\\n    border-top: 1px solid lightgray; }\\n  :host .buttons button, :host .buttons button:active, :host .buttons button:focus, :host .buttons button:hover {\\n      outline: none !important;\\n      border: none !important;\\n      -webkit-box-shadow: none !important;\\n              box-shadow: none !important;\\n      background: none !important;\\n      color: inherit !important;\\n      width: inherit !important;\\n      height: inherit !important; }\\n  :host .buttons button:hover {\\n      background: #EFEFEF !important; }\\n  :host input {\\n    text-align: center;\\n    font-size: 13px;\\n    height: 26px;\\n    -moz-appearance: textfield; }\\n  :host input:invalid {\\n      -webkit-box-shadow: none;\\n              box-shadow: none; }\\n  :host input:-moz-submit-invalid {\\n      box-shadow: none; }\\n  :host input:-moz-ui-invalid {\\n      box-shadow: none; }\\n  :host input::-webkit-inner-spin-button, :host input::-webkit-outer-spin-button {\\n      -webkit-appearance: none;\\n      margin: 0; }\\n  :host i {\\n    cursor: default;\\n    position: relative; }\\n  :host .cursor-sv {\\n    cursor: default;\\n    position: relative;\\n    border-radius: 50%;\\n    width: 15px;\\n    height: 15px;\\n    border: #ddd solid 1px; }\\n  :host .cursor {\\n    cursor: default;\\n    position: relative;\\n    border-radius: 50%;\\n    width: 16px;\\n    height: 16px;\\n    border: #222 solid 2px; }\\n  :host .arrow {\\n    height: 0;\\n    width: 0;\\n    border-style: solid;\\n    position: absolute;\\n    z-index: 999999; }\\n  :host .arrow.arrow-center {\\n      display: none; }\\n  :host .arrow.arrow-right {\\n      border-width: 5px 10px;\\n      border-color: transparent lightgrey transparent transparent;\\n      top: 10px;\\n      left: -20px; }\\n  :host .arrow.arrow-left {\\n      border-width: 5px 10px;\\n      border-color: transparent transparent transparent lightgrey;\\n      top: 10px;\\n      left: 231px; }\\n  :host .arrow.arrow-bottom {\\n      border-width: 10px 5px;\\n      border-color: transparent transparent lightgrey transparent;\\n      top: -20px;\\n      left: 10px; }\\n  :host .arrow.arrow-top {\\n      border-width: 10px 5px;\\n      border-color: lightgrey transparent transparent transparent;\\n      left: 10px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/colorpicker/component/dialog/colorpicker.dialog.component.scss\n// module id = 1446\n// module chunks = 1","module.exports = \"<div class=\\\"selected-color-background\\\"></div>\\n<div [style.background-color]=\\\"data.color\\\" class=\\\"selected-color\\\"></div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/colorpicker/component/sample/colorpicker.sample.component.html\n// module id = 1447\n// module chunks = 1","module.exports = \":host {\\n  position: absolute;\\n  display: block;\\n  width: 40px;\\n  height: 40px;\\n  top: 50%;\\n  left: 50%;\\n  margin-top: -20px;\\n  margin-left: -20px;\\n  background-color: inherit;\\n  border: 1px solid lightgray;\\n  border-radius: 50%;\\n  overflow: hidden; }\\n  :host .selected-color, :host .selected-color-background {\\n    position: absolute;\\n    width: 100%;\\n    height: 100%;\\n    border-radius: 50%;\\n    background-color: inherit; }\\n  :host .selected-color-background {\\n    background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAh0lEQVRYR+2W0QlAMQgD60zdfwOdqa8TmI/wQMr5K0I5bZLIzLOa2nt37VVVbd+dDx5obgCC3KBLwJ2ff4PnVidkf+ucIhw80HQaCLo3DMH3CRK3iFsmAWVl6hPNDwt8EvNE5q+YuEXcMgkonVM6SdyCoEvAnZ8v1Hjx817MilmxSUB5rdLJDycZgUAZUch/AAAAAElFTkSuQmCC\\\"); }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/colorpicker/component/sample/colorpicker.sample.component.scss\n// module id = 1448\n// module chunks = 1","module.exports = \"<div  *ngIf=\\\"data.format == data.formatValue.hsla\\\"  class=\\\"hsla-text\\\">\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"360\\\" [rg]=\\\"360\\\" (newValue)=\\\"data.setHue($event)\\\" \\n\\t\\t[value]=\\\"data.hslaText.h\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [rg]=\\\"100\\\" (newValue)=\\\"data.setSaturation($event)\\\" \\n\\t\\t[value]=\\\"data.hslaText.s\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"100\\\" [rg]=\\\"100\\\" (newValue)=\\\"data.setLightness($event)\\\" \\n\\t\\t[value]=\\\"data.hslaText.l\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]+([\\\\.,][0-9]{1,2})?\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" [rg]=\\\"1\\\" \\n\\t\\t(newValue)=\\\"data.setAlpha($event)\\\" [value]=\\\"data.hslaText.a\\\"/>\\n\\t<div>H</div>\\n\\t<div>S</div>\\n\\t<div>L</div>\\n\\t<div>A</div>\\n</div>\\n\\n<div  *ngIf=\\\"data.format == data.formatValue.rgba\\\"  class=\\\"rgba-text\\\">\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"255\\\" [rg]=\\\"255\\\" (newValue)=\\\"data.setR($event)\\\" \\n\\t\\t[value]=\\\"data.rgbaText.r\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"255\\\" [rg]=\\\"255\\\" (newValue)=\\\"data.setG($event)\\\" \\n\\t\\t[value]=\\\"data.rgbaText.g\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]*\\\" min=\\\"0\\\" max=\\\"255\\\" [rg]=\\\"255\\\" (newValue)=\\\"data.setB($event)\\\" \\n\\t\\t[value]=\\\"data.rgbaText.b\\\"/>\\n\\t<input [text] type=\\\"number\\\" pattern=\\\"[0-9]+([\\\\.,][0-9]{1,2})?\\\" min=\\\"0\\\" max=\\\"1\\\" step=\\\"0.1\\\" [rg]=\\\"1\\\" \\n\\t\\t(newValue)=\\\"data.setAlpha($event)\\\" [value]=\\\"data.rgbaText.a\\\"/>\\n\\t<div>R</div>\\n\\t<div>G</div>\\n\\t<div>B</div>\\n\\t<div>A</div>\\n</div>\\n\\n<div *ngIf=\\\"data.format == data.formatValue.hex\\\" class=\\\"hex-text\\\">\\n\\t<input [text] (newValue)=\\\"data.setColorFromString($event)\\\" [value]=\\\"data.hexText\\\"/>\\n\\t<div>Hex</div>\\n</div>\\n\\n<a (click)=\\\"formatPolicy()\\\" class=\\\"type-policy\\\"></a>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/colorpicker/component/text/colorpicker.text.component.html\n// module id = 1449\n// module chunks = 1","module.exports = \":host {\\n  display: inline-block;\\n  position: relative;\\n  width: 200px;\\n  height: auto;\\n  white-space: nowrap;\\n  overflow: hidden; }\\n  :host input {\\n    text-align: center;\\n    font-size: 13px;\\n    height: 26px;\\n    -moz-appearance: textfield; }\\n  :host input:invalid {\\n      -webkit-box-shadow: none;\\n              box-shadow: none; }\\n  :host input:-moz-submit-invalid {\\n      box-shadow: none; }\\n  :host input:-moz-ui-invalid {\\n      box-shadow: none; }\\n  :host input::-webkit-inner-spin-button, :host input::-webkit-outer-spin-button {\\n      -webkit-appearance: none;\\n      margin: 0; }\\n  :host i {\\n    cursor: default;\\n    position: relative; }\\n  :host .type-policy {\\n    float: left;\\n    background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAYAAAAffCjxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAACewAAAnsB01CO3AAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAIASURBVEiJ7ZY9axRRFIafsxMStrLQJpAgpBFhi+C9w1YSo00I6RZ/g9vZpBf/QOr4GyRgkSKNSrAadsZqQGwCkuAWyRZJsySwvhZ7N/vhzrgbLH3Ld8597jlzz50zJokyxXH8DqDVar0qi6v8BbItqSGpEcfxdlmsFWXkvX8AfAVWg3UKPEnT9GKujMzsAFgZsVaCN1VTQd77XUnrgE1kv+6935268WRpzrnHZvYRWC7YvC3pRZZl3wozqtVqiyH9IgjAspkd1Gq1xUJQtVrdB9ZKIAOthdg/Qc65LUk7wNIMoCVJO865rYFhkqjX6/d7vV4GPJwBMqofURS5JEk6FYBer/eeYb/Mo9WwFnPOvQbeAvfuAAK4BN4sAJtAG/gJIElmNuiJyba3EGNmZiPeZuEVmVell/Y/6N+CzDn3AXhEOOo7Hv/3BeAz8IzQkMPnJbuPx1wC+yYJ7/0nYIP5S/0FHKdp+rwCEEXRS/rf5Hl1Gtb2M0iSpCOpCZzPATmX1EySpHMLAsiy7MjMDoHrGSDXZnaYZdnRwBh7J91utwmczAA6CbG3GgPleX4jqUH/a1CktqRGnuc3hSCAMB32gKspkCtgb3KCQMmkjeP4WNJThrNNZval1WptTIsv7JtQ4tmIdRa8qSoEpWl6YWZNoAN0zKxZNPehpLSBZv2t+Q0CJ9lLnARQLAAAAABJRU5ErkJggg==\\\") no-repeat center;\\n    background-size: 8px 16px;\\n    margin-top: 7px;\\n    width: 16px;\\n    height: 24px; }\\n  :host .hsla-text, :host .rgba-text, :host .hex-text {\\n    float: left; }\\n  :host .hsla-text input, :host .rgba-text input, :host .hex-text input {\\n      float: left;\\n      border: lightgray solid 1px;\\n      padding: 5px 1px;\\n      text-align: center;\\n      -webkit-box-shadow: none;\\n              box-shadow: none;\\n      outline: none; }\\n  :host .hsla-text div, :host .rgba-text div, :host .hex-text div {\\n      float: left;\\n      text-align: center;\\n      font-size: 11px;\\n      font-weight: 200; }\\n  :host .hsla-text input, :host .rgba-text input {\\n    width: 40px;\\n    margin: 0 0 0 7px; }\\n  :host .hsla-text input:first-of-type, :host .rgba-text input:first-of-type {\\n      margin-left: 0; }\\n  :host .hsla-text div, :host .rgba-text div {\\n    width: 40px;\\n    margin-left: 7px; }\\n  :host .hsla-text div:first-of-type, :host .rgba-text div:first-of-type {\\n      margin-left: 0; }\\n  :host .hsla-text div:nth-child(5), :host .rgba-text div:nth-child(5) {\\n      clear: left; }\\n  :host .hex-text input {\\n    width: 181px; }\\n  :host .hex-text div {\\n    clear: left;\\n    width: 181px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/colorpicker/component/text/colorpicker.text.component.scss\n// module id = 1450\n// module chunks = 1","module.exports = \"<div class=\\\"player-holder\\\">\\n\\t<div class=\\\"player-con\\\" #player></div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/component/player/player.builder.player.component.html\n// module id = 1451\n// module chunks = 1","module.exports = \":host {\\n  -webkit-box-flex: 1;\\n      -ms-flex: 1;\\n          flex: 1;\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: horizontal;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: row;\\n          flex-direction: row;\\n  -ms-flex-wrap: wrap;\\n      flex-wrap: wrap;\\n  -webkit-box-pack: justify;\\n      -ms-flex-pack: justify;\\n          justify-content: space-between;\\n  -webkit-box-align: stretch;\\n      -ms-flex-align: stretch;\\n          align-items: stretch;\\n  height: 100%; }\\n  :host .player-holder {\\n    position: relative;\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -ms-flex-wrap: nowrap;\\n        flex-wrap: nowrap;\\n    -webkit-box-pack: center;\\n        -ms-flex-pack: center;\\n            justify-content: center;\\n    -webkit-box-align: stretch;\\n        -ms-flex-align: stretch;\\n            align-items: stretch; }\\n  :host .player-holder .player-con {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      background-color: black; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/component/player/player.builder.player.component.scss\n// module id = 1452\n// module chunks = 1","module.exports = \"<!-- preview bar -->\\n<div class=\\\"build-bar preview\\\">\\n\\t<div class=\\\"build-bar-label\\\">\\n\\t\\t<label><small>preview&nbsp;of&nbsp;</small><i>'<strong>{{data.buildName}}</strong>'</i>&nbsp;player</label>\\n\\t\\t<small class=\\\"date-data\\\"><small>created&nbsp;at:</small> {{formatDate(data.createdAt)}}&nbsp;<small>{{formatTime(data.createdAt)}}</small></small>\\n\\t</div>\\n\\t<div class=\\\"build-bar-label aspect-ratio\\\">\\n\\t\\t<label for=\\\"aspect-ratio\\\"><small>set&nbsp;</small><strong>preview</strong><small>&nbsp;aspect&nbsp;ratio:&nbsp;</small></label>\\n\\t\\t<select id=\\\"aspect-ratio\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t[ngModel]=\\\"previewCss\\\"\\n\\t\\t\\t\\t\\t\\t(ngModelChange)=\\\"handlePreviewAspect($event)\\\">\\n\\t\\t\\t<option *ngFor=\\\"let option of RATIO_CLASSES;\\\" [value]=\\\"option.value\\\">{{ option.label }}</option>\\n\\t\\t\\t<option [value]=\\\"null\\\">none</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- preview player -->\\n<div class=\\\"player-preview\\\" [ngClass]=\\\"previewCss\\\" [style.height]=\\\"previewHeight\\\">\\n\\t<player-builder-player></player-builder-player>\\n</div>\\n\\n<!-- preview size -->\\n<div class=\\\"size-bar\\\" (mousedown)=\\\"handlePreviewResize($event)\\\"></div>\\n\\n<!-- form bar -->\\n<div class=\\\"build-bar form\\\">\\n\\t<!-- options -->\\n\\t<div class=\\\"build-bar-con options\\\">\\n\\t\\t<div class=\\\"build-bar-label\\\">\\n\\t\\t\\t<label>options:&nbsp;</label>\\n\\t\\t</div>\\n\\t\\t<ul class=\\\"nav nav-pills\\\">\\n\\t\\t\\t<li *ngFor=\\\"let tab of TABS;\\\" role=\\\"presentation\\\" routerLink=\\\"{{tab.route}}\\\" routerLinkActive=\\\"active\\\" [class.disabled]=\\\"tab.disabled\\\">\\n\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn\\\" routerLink=\\\"{{tab.route}}\\\" routerLinkActive=\\\"active btn-bradmax\\\" [disabled]=\\\"tab.disabled\\\">{{tab.text}}</button>\\n\\t\\t\\t</li>\\n\\t\\t</ul>\\n\\t</div>\\n\\t<!-- submit -->\\n\\t<div class=\\\"build-bar-con submit\\\">\\n\\t\\t<div class=\\\"build-bar-label\\\">\\n\\t\\t\\t<span class=\\\"spacer\\\">&nbsp;</span>\\n\\t\\t\\t<small class=\\\"date-data\\\"><small>updated&nbsp;at:</small> {{formatDate(data.updatedAt)}}&nbsp;<small>{{formatTime(data.updatedAt)}}</small></small>\\n\\t\\t\\t<small class=\\\"date-data\\\">\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"!!data.publishedAt; else notPublished;\\\">\\n\\t\\t\\t\\t\\t<small>published&nbsp;at:</small> {{formatDate(data.publishedAt)}}&nbsp;<small>{{formatTime(data.publishedAt)}}</small>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t<ng-template #notPublished>\\n\\t\\t\\t\\t\\t<small class=\\\"date-data\\\"><small>&nbsp;not&nbsp;published</small></small>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</small>\\n\\t\\t</div>\\n\\t\\t<ul class=\\\"nav nav-pills\\\">\\n\\t\\t\\t<ng-container *ngTemplateOutlet=\\\"statusButtons;context:{dirty:data.isDirty, wasPublished:!!data.publishedAt}\\\"></ng-container>\\n\\t\\t\\t<ng-template #statusButtons let-dirty=\\\"dirty\\\" let-wasPublished=\\\"wasPublished\\\">\\n\\t\\t\\t\\t<!-- reset -->\\n\\t\\t\\t\\t<li [class.disabled]=\\\"!dirty\\\">\\n\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn\\\" (click)=\\\"data.reset()\\\" [disabled]=\\\"!dirty\\\">reset&nbsp;<i class=\\\"fa fa-history\\\"></i></button>\\n\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t<!-- save -->\\n\\t\\t\\t\\t<li>\\n\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn\\\" [class.btn-warning]=\\\"dirty\\\" (click)=\\\"clickSave()\\\">save&nbsp;<i class=\\\"fa fa-save\\\"></i></button>\\n\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t<!-- publish -->\\n\\t\\t\\t\\t<!-- <li [class.disabled]=\\\"!!wasPublished || (wasPublished && !dirty)\\\">\\n\\t\\t\\t\\t\\t<button type=\\\"button\\\" class=\\\"btn\\\" [class.btn-warning]=\\\"dirty\\\" (click)=\\\"clickPublish()\\\" [disabled]=\\\"!!wasPublished || (wasPublished && !dirty)\\\">publish&nbsp;<i class=\\\"fa fa-paper-plane\\\"></i></button>\\n\\t\\t\\t\\t</li> -->\\n\\t\\t\\t</ng-template>\\n\\t\\t</ul>\\n\\t</div>\\n</div>\\n\\n<!-- outlet -->\\n<div class=\\\"forms-outlet\\\">\\n\\t<router-outlet></router-outlet>\\n\\t<!-- <code style=\\\"display: flex;\\\">\\n\\t\\t<small style=\\\"display: flex;flex-direction: column;max-width: 50%;\\\">\\n\\t\\t\\t<label>publishedAt: {{data.publishedAt|json}}</label>\\n\\t\\t\\t<label>formData:</label>\\n\\t\\t\\t<small><pre>{{data.formData?.variable|json}}</pre></small>\\n\\t\\t</small>\\n\\t\\t<small style=\\\"display: flex;flex-direction: column;max-width: 50%;\\\">\\n\\t\\t\\t<label>savedData:</label>\\n\\t\\t\\t<small><pre>{{data.savedData?.variable|json}}</pre></small>\\n\\t\\t</small>\\n\\t</code> -->\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/component/view/player.builder.view.component.html\n// module id = 1453\n// module chunks = 1","module.exports = \"@use \\\"sass:math\\\" as math;\\n:host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  height: 100vh;\\n  margin: -16px -24px;\\n  overflow-x: visible;\\n  overflow-y: auto; }\\n:host::-webkit-scrollbar {\\n    width: 8px;\\n    height: 8px;\\n    background: none; }\\n:host::-webkit-scrollbar-track {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n    background: #EEEEEE; }\\n:host::-webkit-scrollbar-thumb:window-inactive {\\n    background: #DDDDDD; }\\n:host::-webkit-scrollbar-thumb {\\n    background: #CCCCCC; }\\n:host.with-header {\\n    height: calc(100vh - 56px);\\n    margin: -16px -24px; }\\n:host .date-data {\\n    font-size: 1.2rem; }\\n:host .date-data small {\\n      color: #808080; }\\n:host .player-preview {\\n    min-height: 200px;\\n    height: 46%; }\\n@supports (aspect-ratio: 1) {\\n      :host .player-preview.ratio21x9 {\\n        aspect-ratio: 21/9;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio16x9 {\\n        aspect-ratio: 16/9;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio4x3 {\\n        aspect-ratio: 4/3;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio3x2 {\\n        aspect-ratio: 3/2;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio2x1 {\\n        aspect-ratio: 2/1;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; }\\n      :host .player-preview.ratio1x1 {\\n        aspect-ratio: 1;\\n        width: auto;\\n        height: auto;\\n        max-width: 100%;\\n        max-height: 100%; } }\\n:host .player-preview {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    padding: 0.5rem 1rem; }\\n:host .size-bar, :host .build-bar {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    border-top: 2px solid transparent;\\n    border-bottom: 2px solid #f8f8f8; }\\n:host .size-bar {\\n    cursor: ns-resize;\\n    -webkit-box-align: center;\\n        -ms-flex-align: center;\\n            align-items: center;\\n    -webkit-box-pack: center;\\n        -ms-flex-pack: center;\\n            justify-content: center;\\n    min-height: 1.2rem;\\n    height: 1.2rem;\\n    max-height: 1.2rem;\\n    border-top-color: #f8f8f8; }\\n:host .size-bar * {\\n      pointer-events: none; }\\n:host .size-bar:after {\\n      content: 'drag to resize player';\\n      font-weight: 100;\\n      line-height: 1rem;\\n      font-size: 1rem;\\n      opacity: 0.45; }\\n:host .size-bar:hover {\\n      min-height: 2rem;\\n      height: 2rem;\\n      max-height: 2rem;\\n      margin: -0.4rem 0;\\n      background-color: whitesmoke; }\\n:host .size-bar:hover:after {\\n        opacity: 1; }\\n:host .build-bar {\\n    padding: 0 1rem;\\n    -webkit-box-align: end;\\n        -ms-flex-align: end;\\n            align-items: flex-end; }\\n:host .build-bar-label {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      font-size: 1.5rem;\\n      padding: 1rem 0; }\\n:host .build-bar-label label {\\n        margin: 0;\\n        white-space: nowrap; }\\n:host .build-bar-con {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: vertical;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: column;\\n              flex-direction: column;\\n      -ms-flex-wrap: nowrap;\\n          flex-wrap: nowrap;\\n      -webkit-box-align: start;\\n          -ms-flex-align: start;\\n              align-items: flex-start;\\n      -ms-flex-line-pack: start;\\n          align-content: flex-start;\\n      margin: 0 0.5em; }\\n:host .build-bar-con:first-child {\\n        margin-left: 0; }\\n:host .build-bar-con:last-child {\\n        margin-right: 0; }\\n:host .build-bar-con.submit {\\n        -webkit-box-align: end;\\n            -ms-flex-align: end;\\n                align-items: flex-end; }\\n:host .build-bar.preview {\\n      -webkit-box-pack: justify;\\n          -ms-flex-pack: justify;\\n              justify-content: space-between; }\\n:host .build-bar.preview .build-bar-label {\\n        -webkit-box-orient: vertical;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: column;\\n                flex-direction: column; }\\n:host .build-bar.preview .build-bar-label.aspect-ratio {\\n          display: none; }\\n@supports (aspect-ratio: 1) {\\n          :host .build-bar.preview .build-bar-label.aspect-ratio {\\n            display: -webkit-box;\\n            display: -ms-flexbox;\\n            display: flex;\\n            -webkit-box-orient: horizontal;\\n            -webkit-box-direction: normal;\\n                -ms-flex-direction: row;\\n                    flex-direction: row;\\n            -webkit-box-align: center;\\n                -ms-flex-align: center;\\n                    align-items: center;\\n            -webkit-box-pack: center;\\n                -ms-flex-pack: center;\\n                    justify-content: center;\\n            -ms-flex-wrap: nowrap;\\n                flex-wrap: nowrap; }\\n            :host .build-bar.preview .build-bar-label.aspect-ratio label {\\n              font-weight: 200; } }\\n:host .build-bar.preview .nav-pills {\\n        margin: 0; }\\n:host .build-bar.form {\\n      -webkit-box-pack: justify;\\n          -ms-flex-pack: justify;\\n              justify-content: space-between;\\n      -webkit-box-align: start;\\n          -ms-flex-align: start;\\n              align-items: flex-start; }\\n:host .build-bar.form .build-bar-label {\\n        width: 100%;\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: horizontal;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: row;\\n                flex-direction: row;\\n        -webkit-box-align: end;\\n            -ms-flex-align: end;\\n                align-items: flex-end;\\n        -webkit-box-pack: justify;\\n            -ms-flex-pack: justify;\\n                justify-content: space-between; }\\n:host .build-bar.form .build-bar-label .date-data {\\n          margin-left: 1rem; }\\n:host .build-bar .nav-pills {\\n      margin-bottom: 0.5rem; }\\n:host .build-bar .nav-pills li {\\n        margin: 2px; }\\n:host .build-bar .nav-pills li .btn[disabled] {\\n          opacity: 0.44; }\\n:host .forms-outlet {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    max-width: 100%;\\n    min-height: 200px;\\n    padding: 0.5rem 0; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/component/view/player.builder.view.component.scss\n// module id = 1454\n// module chunks = 1","module.exports = \"\\n<a href=\\\"{{BASE}}/{{link}}\\\" target=\\\"_blank\\\" title=\\\"{{'PLAYER.CONFIG.DOCS.TEXT'|translate:lang}} {{'PLAYER.CONFIG.DOCS.LINK'|translate:lang}}\\\"><i class=\\\"fa fa-fw fa-question-circle\\\"></i></a>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/@common/docs/component/player.builder.docs.component.html\n// module id = 1455\n// module chunks = 1","module.exports = \":host {\\n  display: inline-block;\\n  white-space: normal;\\n  color: #868686;\\n  font-weight: 400;\\n  font-size: 0.9em; }\\n  :host a {\\n    color: inherit;\\n    text-decoration: none;\\n    opacity: 0.64; }\\n  :host a:hover {\\n      opacity: 1; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/@common/docs/component/player.builder.docs.component.scss\n// module id = 1456\n// module chunks = 1","module.exports = \"<!-- logoFile -->\\n<div class=\\\"form-group full-w\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo image:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoFile\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<upload-image [resample]=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[minWidth]=\\\"20\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[minHeight]=\\\"20\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[maxWidth]=\\\"1000\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[maxHeight]=\\\"1000\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[maxFileSize]=\\\"60000\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[imageData]=\\\"data.logoFile\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(imageChange)=\\\"data.logoFile = $event\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t(maxSizeCallback)=\\\"onTooBigLogo($event)\\\">\\n\\t\\t</upload-image>\\n\\t</div>\\n</div>\\n\\n<!-- logoLink -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo link address:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoLink\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<input type=\\\"text\\\" class=\\\"form-control input-sm\\\" [(ngModel)]=\\\"data.logoLink\\\" [disabled]=\\\"!data.logoFile\\\" />\\n\\t</div>\\n</div>\\n\\n<!-- logoLinkTarget -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo link target:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoLinkTarget\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select class=\\\"form-control\\\" [(ngModel)]=\\\"data.logoLinkTarget\\\" [disabled]=\\\"!data.logoFile || !data.logoLink\\\">\\n\\t\\t\\t<option>none</option>\\n\\t\\t\\t<option value=\\\"_blank\\\">_blank</option>\\n\\t\\t\\t<option value=\\\"_self\\\">_self</option>\\n\\t\\t\\t<option value=\\\"_parent\\\">_parent</option>\\n\\t\\t\\t<option value=\\\"_top\\\">_top</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- logoAutohide -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Autohide brand button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoAutohide\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"jsapi\\\" [(checked)]=\\\"data.logoAutohide\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\" [disabled]=\\\"!data.logoFile\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- logoVisibleDuringAdPlayback -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Show brand during ads playback:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoVisibleDuringAdPlayback\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"jsapi\\\" [(checked)]=\\\"data.logoVisibleDuringAdPlayback\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\" [disabled]=\\\"!data.logoFile\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- logoXPosition -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo horizontal position:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoXPosition\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select class=\\\"form-control\\\" [(ngModel)]=\\\"data.logoXPosition\\\" [disabled]=\\\"!data.logoFile\\\">\\n\\t\\t\\t<option [value]=\\\"'left'\\\">left</option>\\n\\t\\t\\t<option [value]=\\\"'right'\\\">right</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- logoYPosition -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>Logo vertical position:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"logoYPosition\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select class=\\\"form-control\\\" [(ngModel)]=\\\"data.logoYPosition\\\" [disabled]=\\\"!data.logoFile\\\">\\n\\t\\t\\t<option [value]=\\\"'top'\\\">top</option>\\n\\t\\t\\t<option [value]=\\\"'bottom'\\\">bottom</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/branding/component/player.builder.branding.component.html\n// module id = 1457\n// module chunks = 1","module.exports = \":host /deep/ upload-image .upload-image-con::before {\\n  -webkit-filter: opacity(0.14);\\n          filter: opacity(0.14); }\\n\\n:host /deep/ upload-image .upload-image-con .upload-title {\\n  font-size: 28px !important;\\n  line-height: 40px !important; }\\n\\n:host /deep/ upload-image .upload-image-con .upload-title span {\\n    color: #2c2c2c !important; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/branding/component/player.builder.branding.component.scss\n// module id = 1458\n// module chunks = 1","module.exports = \"<div class=\\\"form-group full-w screenshots\\\">\\n\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label>End splash <strong>type</strong>:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"endSplash\\\"></player-builder-docs>\\n\\t</div>\\n\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<ng-container *ngFor=\\\"let splash of ENDSPLASHED; first as isFirst;\\\">\\n\\n\\t\\t\\t<button (click)=\\\"data.endSplash = splash\\\" type=\\\"button\\\" class=\\\"btn screenshot\\\" [class.active]=\\\"data.endSplash === splash\\\">\\n\\t\\t\\t\\t<img class=\\\"screenshot-img\\\" [src]=\\\"formatImageSrc(splash)\\\" [alt]=\\\"splash\\\">\\n\\t\\t\\t\\t<span class=\\\"screenshot-info {{data.skinName}}\\\">\\n\\t\\t\\t\\t\\t<span>{{splash}}</span>\\n\\t\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [class.fa-check-circle-o]=\\\"data.endSplash === splash\\\" [class.fa-circle-o]=\\\"!(data.endSplash === splash)\\\"></i>\\n\\t\\t\\t\\t</span>\\n\\t\\t\\t</button>\\n\\n\\t\\t</ng-container>\\n\\t</div>\\n\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/end-splash/component/player.builder.end-splash.component.html\n// module id = 1459\n// module chunks = 1","module.exports = \"<!-- <div class=\\\"form-con\\\"> -->\\n\\n<!-- pictureInPictureButtonVisible -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"pictureInPictureButtonVisible\\\"><strong>Picture-in-Picture</strong>&nbsp;button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"pictureInPictureButtonVisible\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"pictureInPictureButtonVisible\\\" [(checked)]=\\\"data.pictureInPictureButtonVisible\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- videoCastEnabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"videoCastEnabled\\\"><strong>Chromecast</strong>&nbsp;/&nbsp;<strong>AirPlay</strong>&nbsp;buttons:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"videoCastEnabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"videoCastEnabled\\\" [(checked)]=\\\"data.videoCastEnabled\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- fullscreenEnabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"fullscreenEnabled\\\"><strong>Fullscreen</strong>&nbsp;button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"fullscreenEnabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"fullscreenEnabled\\\" [(checked)]=\\\"data.fullscreenEnabled\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- playbackRateEnabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"playbackRateEnabled\\\"><strong>Playback rate </strong>&nbsp;button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"playbackRateEnabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"playbackRateEnabled\\\" [(checked)]=\\\"data.playbackRateEnabled\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- contextMenuDisabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"contextMenuDisabled\\\"><strong>Context menu</strong>&nbsp;support:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"contextMenuDisabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"contextMenuDisabled\\\" [(checked)]=\\\"data.contextMenuDisabled\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- qualitySelectionEnabled -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"qualitySelectionEnabled\\\"><strong>Quality&nbsp;selection</strong>&nbsp;button:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"qualitySelectionEnabled\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"qualitySelectionEnabled\\\" [(checked)]=\\\"data.qualitySelectionEnabled\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"> </switch>\\n\\t</div>\\n</div>\\n\\n<!-- qualityLabelType -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"qualityLabelType\\\"><strong>Quality&nbsp;selection</strong>&nbsp;label:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"qualityLabelType\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select id=\\\"qualityLabelType\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"data.qualityLabelType\\\" [disabled]=\\\"!data.qualitySelectionEnabled\\\">\\n\\t\\t\\t<option value=\\\"resolution\\\">resolution</option>\\n\\t\\t\\t<option value=\\\"bitrate\\\">bitrate</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- quanteec -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label with-icon\\\">\\n\\t\\t<label for=\\\"quanteec\\\">\\n\\t\\t\\t<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 86 78\\\" width=\\\"36px\\\" height=\\\"36px\\\" fill=\\\"#2F90B0\\\">\\n\\t\\t\\t\\t<path d=\\\"M28.047 38.6229L25.8402 34.9695L21.6368 34.9631L19.5296 38.6101L21.6258 42.2633L25.8292 42.2697L28.047 38.6229Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M31.0332 26.2381L26.7689 26.2317L24.6311 29.8786L26.7577 33.5319L31.022 33.5382L33.1598 29.8913L31.0332 26.2381Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M40.141 21.2653L42.2371 24.9186L46.5511 24.9251L48.6583 21.2782L46.5621 17.6249L42.2482 17.6184L40.141 21.2653Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M35.806 29.7054L37.5872 32.6841L41.0395 32.6893L42.8296 29.7161L41.0485 26.7374L37.5962 26.7322L35.806 29.7054Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M50.8188 27.1529L47.4454 27.1478L45.8668 29.9107L47.4368 32.6783L50.8103 32.6833L52.3888 29.9204L50.8188 27.1529Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M41.527 48.2666L40.3136 46.0526L37.7695 46.0487L36.5494 48.2591L37.7628 50.4731L40.3069 50.4769L41.527 48.2666Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M51.5908 48.2814L50.3774 46.0674L47.8332 46.0635L46.5025 48.2737L47.8265 50.4879L50.3707 50.4917L51.5908 48.2814Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M45.9343 57.7841L44.8309 56.0127L42.7292 56.0095L41.6204 57.7776L42.7237 59.6596L44.8254 59.6628L45.9343 57.7841Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M55.9515 17.6248L51.7482 17.6184L49.641 21.2653L51.7371 24.9186L55.9405 24.925L58.1583 21.2782L55.9515 17.6248Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M31.9509 35.5316L30.3688 38.286L31.9423 41.0449L35.3085 41.0499L36.8907 38.2955L35.3171 35.5366L31.9509 35.5316Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M46.7376 38.5402L45.3035 35.994L42.3169 35.9895L40.8751 38.5313L42.3092 41.0775L45.2958 41.082L46.7376 38.5402Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M31.3204 48.1835L29.6683 45.4242L26.4591 45.4195L24.7985 48.1737L26.4506 50.9329L29.6598 50.9377L31.3204 48.1835Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M32.2159 59.6449L34.3175 59.6481L35.4265 57.7694L34.3231 55.998L32.2214 55.9948L31.1126 57.7629L32.2159 59.6449Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M52.5715 57.7629L53.6748 59.6449L55.7765 59.6481L56.8855 57.7694L55.782 55.998L53.6804 55.9948L52.5715 57.7629Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M58.7805 64.3558L57.91 65.7309L58.7762 67.1947L60.4262 67.1972L61.2969 65.7361L60.4305 64.3583L58.7805 64.3558Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M57.9522 50.0238L60.0539 50.027L61.1629 48.1483L60.0594 46.3769L57.9577 46.3737L56.8489 48.1418L57.9522 50.0238Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M54.7414 36.4354L52.1972 36.4315L50.9771 38.6419L52.1905 40.8559L54.7347 40.8597L55.9548 38.6494L54.7414 36.4354Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M64.6414 36.9785L62.5397 36.9753L61.4309 38.7434L62.5342 40.6254L64.6359 40.6286L65.7449 38.7499L64.6414 36.9785Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M55.4001 29.9042L57.0522 32.6634L60.2614 32.6682L61.922 29.9139L60.2699 27.1547L57.0607 27.1499L55.4001 29.9042Z\\\" />\\n\\t\\t\\t\\t<path d=\\\"M29.2183 21.4464L31.6259 25.6425L36.5808 25.6499L39.0011 21.4611L36.5935 17.265L31.6386 17.2576L29.2183 21.4464Z\\\" />\\n\\t\\t\\t</svg>\\n\\t\\t\\t<strong>Quanteec</strong>&nbsp;p2p&nbsp;plugin:&nbsp;\\n\\t\\t</label>\\n\\t\\t<player-builder-docs key=\\\"quanteec\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"quanteec\\\" [(checked)]=\\\"data.quanteec\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t\\t<small style=\\\"font-size: 12px;font-weight: 400;\\\">\\n\\t\\t\\t<switch class=\\\"pull-right\\\" [disabled]=\\\"!data.quanteec\\\" [(checked)]=\\\"data.quanteecStreamboost\\\" [labelLeft]=\\\"{on:'with streamboost panel',off:'without streamboost panel'}\\\" size=\\\"xsmall\\\"></switch>\\n\\t\\t</small>\\n\\t</div>\\n</div>\\n\\n<!-- system73 -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label with-icon\\\">\\n\\t\\t<label for=\\\"system73\\\">\\n\\t\\t\\t<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 87.25 94.52\\\" width=\\\"24px\\\" height=\\\"24px\\\" fill=\\\"#001F42\\\">\\n\\t\\t\\t\\t<path d=\\\"M80.26,46.41a6.91,6.91,0,0,0,6.93-6.9l0-9.83a6.92,6.92,0,0,0-13.84,0l-.05,9.82a6.92,6.92,0,0,0,6.91,6.93\\\" />\\n\\t\\t\\t\\t<path d=\\\"M27.8,38.17A8.38,8.38,0,0,1,38.33,41l0-34.1a6.92,6.92,0,1,0-13.84,0l0,34.1a8.32,8.32,0,0,1,3.31-2.85\\\" />\\n\\t\\t\\t\\t<path d=\\\"M55.89,11.9a8.42,8.42,0,0,1,6.92,3.64V6.92A6.92,6.92,0,0,0,49,6.92v8.62a8.43,8.43,0,0,1,6.92-3.64\\\" />\\n\\t\\t\\t\\t<path d=\\\"M59.47,81.31a8.35,8.35,0,0,1-3.59.81,8.45,8.45,0,0,1-6.94-3.63l0,9.1a6.92,6.92,0,0,0,13.84,0l0-9.16a8.25,8.25,0,0,1-3.31,2.86\\\" />\\n\\t\\t\\t\\t<path d=\\\"M7,47.65A6.92,6.92,0,0,0,.1,54.56l0,9.83a6.92,6.92,0,0,0,13.84,0l0-9.83A6.91,6.91,0,0,0,7,47.65\\\" />\\n\\t\\t\\t\\t<path d=\\\"M55.89,28.76A8.42,8.42,0,0,1,49,25.13V39.54a6.92,6.92,0,1,0,13.84,0V25.13a8.41,8.41,0,0,1-6.92,3.63\\\" />\\n\\t\\t\\t\\t<path d=\\\"M35,53.41a8.44,8.44,0,0,1-6.44.32,8.31,8.31,0,0,1-4.07-3.14V61.08a6.92,6.92,0,0,0,13.84,0V50.53A8.45,8.45,0,0,1,35,53.41\\\" />\\n\\t\\t\\t\\t<path d=\\\"M52.26,66.07A8.42,8.42,0,0,1,62.8,69V66A6.92,6.92,0,1,0,49,66v3a8.24,8.24,0,0,1,3.29-2.84\\\" />\\n\\t\\t\\t\\t<path d=\\\"M31.4,78.52a7,7,0,1,0,7,7,7,7,0,0,0-7-7\\\" />\\n\\t\\t\\t\\t<path d=\\\"M7,22.92a7,7,0,1,0,7,7,7,7,0,0,0-7-7\\\" />\\n\\t\\t\\t\\t<path d=\\\"M80.29,57.16a7,7,0,1,0,7,7,7,7,0,0,0-7-7\\\" />\\n\\t\\t\\t\\t<path fill=\\\"#dd271b\\\" d=\\\"M55.89,15.32a5,5,0,1,0,5,5,5,5,0,0,0-5-5\\\" />\\n\\t\\t\\t\\t<path fill=\\\"#dd271b\\\" d=\\\"M35.93,43.64a5,5,0,0,0-2.84-2.57,4.93,4.93,0,0,0-1.69-.29,5,5,0,0,0-2.14.48,5,5,0,0,0-2.39,6.67,5,5,0,0,0,6.68,2.39,5,5,0,0,0,2.38-6.67Z\\\" />\\n\\t\\t\\t\\t<path fill=\\\"#dd271b\\\" d=\\\"M55.86,68.68a5.09,5.09,0,0,0-2.14.48A5,5,0,0,0,51.15,72a4.92,4.92,0,0,0,.19,3.82,5,5,0,1,0,4.52-7.15\\\" />\\n\\t\\t\\t</svg>\\n\\t\\t\\t<strong>&nbsp;System&nbsp;73</strong>&nbsp;p2p&nbsp;plugin:&nbsp;\\n\\t\\t</label>\\n\\t\\t<player-builder-docs key=\\\"system73\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"system73\\\" [(checked)]=\\\"data.system73\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/features/component/player.builder.features.component.html\n// module id = 1460\n// module chunks = 1","module.exports = \"<!-- name -->\\n<div class=\\\"form-group\\\">\\n\\t<label for=\\\"build-name-ctrl\\\">Build&nbsp;<strong>name</strong>:&nbsp;</label>\\n\\t<input id=\\\"build-name-ctrl\\\" type=\\\"text\\\" class=\\\"form-control input-sm\\\" [(ngModel)]=\\\"data.buildName\\\" />\\n</div>\\n\\n<!-- skinless -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"skinless\\\"><strong>Skinless</strong>&nbsp;player:&nbsp;</label>\\n\\t\\t<!-- <player-builder-docs key=\\\"skinless\\\"></player-builder-docs> -->\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"skinless\\\" [(checked)]=\\\"data.skinless\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- jsapi -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"jsapi\\\"><strong>JavaScript</strong>&nbsp;api:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"jsapi\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"jsapi\\\" [(checked)]=\\\"data.jsapi\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- vast -->\\n<div *ngIf=\\\"data.userAdsSupportEnabled\\\" class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"iab\\\"><strong>Advertisements</strong>&nbsp;support:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"iab\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"iab\\\" [(checked)]=\\\"data.advertisement\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- keyboard -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"keyboard\\\"><strong>Keyboard</strong>&nbsp;support:&nbsp;</label>\\n\\t\\t<!-- <player-builder-docs key=\\\"keyboard\\\"></player-builder-docs> -->\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"keyboard\\\" [(checked)]=\\\"data.keyboard\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n\\n<!-- locale -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"locale\\\"><strong>Localization</strong>:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"locale\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<select *ngIf=\\\"data.playerLocales\\\" id=\\\"locale\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"data.locale\\\">\\n\\t\\t\\t<option *ngFor=\\\"let locale of data.playerLocales;\\\" [value]=\\\"locale\\\">{{locale|localeName}}</option>\\n\\t\\t</select>\\n\\t</div>\\n</div>\\n\\n<!-- audio -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"audio\\\">Default&nbsp;<strong>audio&nbsp;track</strong>&nbsp;country:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"audio\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"data.audio\\\" minlength=\\\"2\\\" maxlength=\\\"2\\\">\\n\\t</div>\\n</div>\\n\\n<!-- subtitles -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"subtitles\\\">Default&nbsp;<strong>subtitles&nbsp;track</strong>&nbsp;country:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"subtitles\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"data.subtitles\\\" minlength=\\\"2\\\" maxlength=\\\"2\\\">\\n\\t</div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/general/component/player.builder.general.component.html\n// module id = 1461\n// module chunks = 1","module.exports = \"<div class=\\\"form-label\\\">\\n\\t<label><strong>{{label}}</strong></label>\\n\\t<ng-content select=\\\".form-label-after\\\"></ng-content>\\n</div>\\n<div class=\\\"form-fields\\\">\\n\\t<select class=\\\"form-control\\\" [ngModel]=\\\"valueId\\\" (ngModelChange)=\\\"emitOptionById($event)\\\" [disabled]=\\\"disabled\\\">\\n\\t\\t<option *ngFor=\\\"let option of OPTIONS;\\\" [value]=\\\"option.id\\\">{{formatText(option)}}</option>\\n\\t</select>\\n\\t<ng-content select=\\\".form-fields-after\\\"></ng-content>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/@common/icon/component/select/player.builder.icon.select.component.html\n// module id = 1462\n// module chunks = 1","module.exports = \"<!-- icon samples-->\\n<div class=\\\"form-group full-w\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label><strong>Icon</strong> <small>sample</small></label>\\n\\t</div>\\n\\t<ng-container *ngIf=\\\"data.skinState\\\">\\n\\t\\t<ng-container [ngSwitch]=\\\"data.skinStateIconType\\\">\\n\\t\\t\\t<ng-container *ngSwitchCase=\\\"'css'\\\">\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"data.skinIconFont.code;\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"icon-sample\\\"\\n\\t\\t\\t\\t\\t\\t\\t [style.fontFamily]=\\\"data.skinIconFont.family.join(', ')\\\"\\n\\t\\t\\t\\t\\t\\t\\t [style.fontSize]=\\\"data.skinIconFont.size\\\"\\n\\t\\t\\t\\t\\t\\t\\t [style.fontVariationSettings]=\\\"data.skinIconFontVariationSettings\\\">\\n\\t\\t\\t\\t\\t\\t<span *ngFor=\\\"let item of data.skinIconFont.code|keys;\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t[title]=\\\"item +': '+data.skinIconFont.code[item]\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tclass=\\\"icon-sample-icon\\\">{{data.skinIconFont.code[item]|charCode}}</span>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-container *ngSwitchCase=\\\"'svg'\\\">\\n\\t\\t\\t\\t<div class=\\\"icon-sample\\\">\\n\\t\\t\\t\\t\\t<div *ngFor=\\\"let id of data.skinStateIconMap;\\\" class=\\\"icon-sample-icon\\\" [title]=\\\"id\\\">\\n\\t\\t\\t\\t\\t\\t<svg xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t\\t\\t\\t\\t\\t\\t<use [attr.xlink:href]=\\\"id|iconSvgHref:data.skinStateIcoPrefix\\\"></use>\\n\\t\\t\\t\\t\\t\\t</svg>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</ng-container>\\n\\t\\t\\t<ng-container *ngSwitchDefault></ng-container>\\n\\t\\t</ng-container>\\n\\t</ng-container>\\n</div>\\n\\n<!-- icon font -->\\n<player-builder-icon-select label=\\\"Icon\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[OPTIONS]=\\\"OPTIONS\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t[(value)]=\\\"data.skinIcon\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tclass=\\\"form-group\\\">\\n\\t<!-- inject switch -->\\n\\t<div *ngIf=\\\"data.skinIconIsFont && !!data.skinIconFont\\\" class=\\\"form-label-after form-label-switch\\\">\\n\\t\\t<switch [(checked)]=\\\"data.skinIconFontFetch\\\" [labelLeft]=\\\"SWITCH_LABEL_INJECT_LEFT\\\" [labelRight]=\\\"SWITCH_LABEL_INJECT_RIGHT\\\" [size]=\\\"SWITCH_LABEL_SIZE\\\"></switch>\\n\\t</div>\\n\\t<!-- inject info -->\\n\\t<div *ngIf=\\\"data.skinIconIsFont &&!!data.skinIconFont && !data.skinIconFontFetch\\\" class=\\\"form-fields-after form-alert inject-font-info\\\">\\n\\t\\t<div class=\\\"alert alert-warning\\\">\\n\\t\\t\\t<small><i class=\\\"fa fa-fw fa-exclamation fa-warn\\\"></i>&nbsp;Please add the link to the font manually along with the player.</small>\\n\\t\\t\\t<div class=\\\"code-example\\\">\\n\\t\\t\\t\\t<textarea class=\\\"code-example-text\\\" readonly #copyLinkFrom>{{ data.skinIconFontSrcToFetch|iconFontLink:data.VERSION }}</textarea>\\n\\t\\t\\t\\t<button class=\\\"btn btn-xs code-example-copy\\\" (click)=\\\"copyLink(copyLinkFrom)\\\"><small><i class=\\\"fa fa-fw fa-clipboard\\\"></i> copy <strong>font link</strong> to clipboard</small></button>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</player-builder-icon-select>\\n\\n<!-- icon variation-->\\n<ng-container *ngIf=\\\"data.skinIconFontVariationSettings && activeIconFontForm\\\">\\n\\t<div *ngFor=\\\"let key of activeIconFontForm|keys;\\\" class=\\\"form-group\\\">\\n\\t\\t<ng-container *ngTemplateOutlet=\\\"variationTmpl; context: {key:key, value: data.skinIconFontVariationSettings[key]||0, form: activeIconFontForm[key] }\\\"></ng-container>\\n\\t</div>\\n\\t<ng-template #variationTmpl let-key=\\\"key\\\" let-value=\\\"value\\\" let-form=\\\"form\\\">\\n\\t\\t<div class=\\\"form-label\\\">\\n\\t\\t\\t<label><strong>Icon</strong> <small><i>{{data.skinIconFont.family[0]}}</i> {{form.name|lowercase}}:</small></label>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t<rangeslider [value]=\\\"(value?value:0)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t (onMouseUp)=\\\"emitVariation(key, $event)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t [step]=\\\"form.step\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t [min]=\\\"form.range[0]\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t [max]=\\\"form.range[1]\\\">\\n\\t\\t\\t</rangeslider>\\n\\t\\t</div>\\n\\t</ng-template>\\n</ng-container>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/icons/component/player.builder.icons.component.html\n// module id = 1463\n// module chunks = 1","module.exports = \"<!-- <div class=\\\"form-con\\\"> -->\\n\\n<!-- autoplay -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"autoplay\\\">Autoplay video on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"autoplay\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"autoplay\\\" [(checked)]=\\\"data.autoplay\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- mute -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"mute\\\">Mute video on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"mute\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"mute\\\" [(checked)]=\\\"data.mute\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- volume -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"volume\\\">Volume on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"volume\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<rangeslider id=\\\"volume\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(value)]=\\\"data.volume\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t step=\\\"0.01\\\" min=\\\"0\\\" max=\\\"1\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [disabled]=\\\"data.mute\\\">\\n\\t\\t</rangeslider>\\n\\t</div>\\n</div>\\n\\n<!-- qualityInitialBandwidthKbs -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"qualityInitialBandwidthKbs\\\">Quality bandwidth on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"qualityInitialBandwidthKbs\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<rangeslider id=\\\"qualityInitialBandwidthKbs\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(value)]=\\\"data.qualityInitialBandwidthKbs\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t min=\\\"0\\\" step=\\\"1000\\\" max=\\\"20000\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [showLabels]=\\\"false\\\">\\n\\t\\t</rangeslider>\\n\\t\\t<div class=\\\"rangeslider-values\\\">\\n\\t\\t\\t<small>0</small>\\n\\t\\t\\t<small>{{data.qualityInitialBandwidthKbs}} (in Kbs)</small>\\n\\t\\t\\t<small>20000</small>\\n\\t\\t</div>\\n\\t</div>\\n\\n</div>\\n\\n<!-- Video360 -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"video360\\\"><strong>Spherical videos</strong>&nbsp;(360 degreess) support:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"spherical\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"video360\\\" [(checked)]=\\\"data.video360\\\" [labelRight]=\\\"SWITCH_LABEL_ENABLED\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- </div> -->\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/playback/component/player.builder.playback.component.html\n// module id = 1464\n// module chunks = 1","module.exports = \"<!-- theme -->\\n<div class=\\\"form-group full-w screenshots\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"skintheme\\\">Theme&nbsp;<strong>variant</strong>:&nbsp;</label>\\n\\t\\t<!-- <player-builder-docs key=\\\"skintheme\\\"></player-builder-docs> -->\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<ng-container *ngFor=\\\"let theme of SKIN_THEMES|keys; first as isFirst;\\\">\\n\\t\\t\\t<button (click)=\\\"data.skin = SKIN_THEMES[theme]\\\" type=\\\"button\\\" class=\\\"btn screenshot\\\" [class.active]=\\\"data.skinName === theme\\\">\\n\\t\\t\\t\\t<img class=\\\"screenshot-img\\\" [src]=\\\"formatImageSrc(theme)\\\" [alt]=\\\"theme\\\">\\n\\t\\t\\t\\t<span class=\\\"screenshot-info {{theme}}\\\">\\n\\t\\t\\t\\t\\t<span>{{theme}}</span>\\n\\t\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [class.fa-check-circle-o]=\\\"data.skinName === theme\\\" [class.fa-circle-o]=\\\"!(data.skinName === theme)\\\"></i>\\n\\t\\t\\t\\t</span>\\n\\t\\t\\t</button>\\n\\t\\t</ng-container>\\n\\t</div>\\n</div>\\n\\n<!-- color -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"skinColor\\\">Theme&nbsp;<strong>color</strong>:&nbsp;</label>\\n\\t\\t<button *ngIf=\\\"data.skinColor!=data.skinThemeDefaultColor\\\" class=\\\"btn btn-xs\\\" (click)=\\\"data.resetColorToThemeDefault()\\\">\\n\\t\\t\\t<small>reset to theme default</small>\\n\\t\\t\\t<strong [style.backgroundColor]=\\\"data.skinThemeDefaultColor\\\" style=\\\"display: inline-block;width: 1em;height: 1em;margin: -.25em 0 -.25em .25em;border-radius: 50%;\\\"></strong>\\n\\t\\t</button>\\n\\t\\t<player-builder-docs key=\\\"skincolor\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<color-picker id=\\\"skinColor\\\" [(value)]=\\\"data.skinColor\\\"></color-picker>\\n\\t</div>\\n</div>\\n\\n<!-- showSkinOnInit -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<label for=\\\"showSkinOnInit\\\"><strong>Visibility</strong> on initialize:&nbsp;</label>\\n\\t\\t<player-builder-docs key=\\\"showSkinOnInit\\\"></player-builder-docs>\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<switch id=\\\"showSkinOnInit\\\" [(checked)]=\\\"data.showSkinOnInit\\\" [labelRight]=\\\"SWITCH_LABEL_SHOW\\\" [size]=\\\"SWITCH_SIZE\\\"></switch>\\n\\t</div>\\n</div>\\n\\n<!-- text font -->\\n<div class=\\\"form-group\\\">\\n\\t<div class=\\\"form-label\\\">\\n\\t\\t<!-- label -->\\n\\t\\t<label for=\\\"skinFont\\\"><strong>Text</strong>&nbsp;font</label>\\n\\t\\t<!-- inject switch -->\\n\\t\\t<div class=\\\"form-label-switch\\\">\\n\\t\\t\\t<switch [(checked)]=\\\"data.skinFontFetch\\\" [labelLeft]=\\\"SWITCH_LABEL_INJECT_LEFT\\\" [labelRight]=\\\"SWITCH_LABEL_INJECT_RIGHT\\\" [size]=\\\"SWITCH_LABEL_SIZE\\\"></switch>\\n\\t\\t</div>\\n\\t\\t<!--  -->\\n\\t</div>\\n\\t<div class=\\\"form-fields\\\">\\n\\t\\t<!-- select -->\\n\\t\\t<select id=\\\"skinFont\\\" class=\\\"form-control\\\" [ngModel]=\\\"data.skinFont.id\\\" (ngModelChange)=\\\"data.skinFont = fontById($event)\\\" [disabled]=\\\"disabled\\\">\\n\\t\\t\\t<option *ngFor=\\\"let option of TEXT_FONTS;\\\" [value]=\\\"option.id\\\">{{option.name}}</option>\\n\\t\\t</select>\\n\\t\\t<!-- inject info -->\\n\\t\\t<div *ngIf=\\\"!data.skinFontFetch\\\" class=\\\"form-alert inject-font-info\\\">\\n\\t\\t\\t<div class=\\\"alert alert-warning\\\">\\n\\t\\t\\t\\t<small><i class=\\\"fa fa-fw fa-exclamation fa-warn\\\"></i>&nbsp;Please add the link to the font manually along with the player.</small>\\n\\t\\t\\t\\t<div class=\\\"code-example\\\">\\n\\t\\t\\t\\t\\t<textarea class=\\\"code-example-text\\\" readonly #copyLinkFrom>{{ data.skinFontSrcToFetch|iconFontLink:data.VERSION }}</textarea>\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-xs code-example-copy\\\" (click)=\\\"copyLink(copyLinkFrom)\\\"><small><i class=\\\"fa fa-fw fa-clipboard\\\"></i> copy <strong>font link</strong> to clipboard</small></button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!--  -->\\n\\t</div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/builder/modules/theme/component/player.builder.theme.component.html\n// module id = 1465\n// module chunks = 1","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar codemirror_component_1 = require(\"./codemirror.component\");\n/**\n * CodemirrorModule\n */\nvar CodemirrorModule = (function () {\n    function CodemirrorModule() {\n    }\n    return CodemirrorModule;\n}());\nCodemirrorModule.decorators = [\n    { type: core_1.NgModule, args: [{\n                imports: [\n                    common_1.CommonModule\n                ],\n                declarations: [\n                    codemirror_component_1.CodemirrorComponent,\n                ],\n                exports: [\n                    codemirror_component_1.CodemirrorComponent,\n                ]\n            },] },\n];\n/** @nocollapse */\nCodemirrorModule.ctorParameters = function () { return []; };\nexports.CodemirrorModule = CodemirrorModule;\n//# sourceMappingURL=codemirror.module.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-codemirror/lib/codemirror.module.js\n// module id = 1466\n// module chunks = 1","module.exports = \"<!-- LABEL -->\\n<h4 class=\\\"view-label\\\">\\n\\t<span>Embed code generator <small>for player named: <i>\\\"{{playerData.name}}\\\"</i></small></span>\\n\\t<div class=\\\"embed-method\\\">\\n\\t\\t<span class=\\\"embed-method-label\\\">embed method:</span>\\n\\t\\t<div class=\\\"embed-btn\\\">\\n\\t\\t\\t<input type=\\\"radio\\\" id=\\\"iframe\\\" name=\\\"method\\\" value=\\\"iframe\\\" [(ngModel)]=\\\"method\\\">\\n\\t\\t\\t<label for=\\\"iframe\\\">iframe</label>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"embed-btn\\\">\\n\\t\\t\\t<input type=\\\"radio\\\" id=\\\"script\\\" name=\\\"method\\\" value=\\\"script\\\" [(ngModel)]=\\\"method\\\">\\n\\t\\t\\t<label for=\\\"script\\\">script</label>\\n\\t\\t</div>\\n\\t</div>\\n\\n</h4>\\n<!-- PREVIEW -->\\n<div class=\\\"preview\\\">\\n\\t<!-- player -->\\n\\t<div class=\\\"preview-label\\\">\\n\\t\\t<label>{{method}} player <small>preview:</small></label>\\n\\t\\t<!-- scale -->\\n\\t\\t<span class=\\\"preview-scale\\\">\\n\\t\\t\\t<small>preview&nbsp;scale:&nbsp;</small>\\n\\t\\t\\t<rangeslider [(value)]=\\\"previewScale\\\" [step]=\\\"0.1\\\" [min]=\\\"0\\\" [max]=\\\"1\\\" [showLabels]=\\\"false\\\"> </rangeslider>\\n\\t\\t\\t<small>&nbsp;{{previewScale * 100}}%</small>\\n\\t\\t</span>\\n\\t</div>\\n\\t<!-- frames -->\\n\\t<div class=\\\"preview-frames\\\"\\n\\t\\t\\t [style.transform]=\\\"'scale('+previewScale+')'|safeStyle\\\"\\n\\t\\t\\t [style.maxHeight]=\\\"'calc(('+formHeight+' * '+previewScale+') + 1em)'|safeStyle\\\">\\n\\t\\t<iframe *ngIf=\\\"method === 'iframe'\\\"\\n\\t\\t\\t\\t\\t\\t[src]=\\\"iframeSrc|safeSrc\\\"\\n\\t\\t\\t\\t\\t\\t[style.width]=\\\"formWidth|safeStyle\\\"\\n\\t\\t\\t\\t\\t\\t[style.height]=\\\"formHeight|safeStyle\\\"\\n\\t\\t\\t\\t\\t\\tframeBorder=\\\"0\\\"\\n\\t\\t\\t\\t\\t\\tallow=\\\"autoplay; encrypted-media\\\"\\n\\t\\t\\t\\t\\t\\tallowfullscreen>\\n\\t\\t</iframe>\\n\\t\\t<iframe *ngIf=\\\"method === 'script'\\\"\\n\\t\\t\\t\\t\\t\\t[src]=\\\"scriptFrameSrc|safeSrc\\\"\\n\\t\\t\\t\\t\\t\\t[style.width]=\\\"formWidth|safeStyle\\\"\\n\\t\\t\\t\\t\\t\\t[style.height]=\\\"formHeight|safeStyle\\\"\\n\\t\\t\\t\\t\\t\\t(load)=\\\"handleScriptFrameLoad(jsFrame)\\\"\\n\\t\\t\\t\\t\\t\\tframeBorder=\\\"0\\\"\\n\\t\\t\\t\\t\\t\\tallow=\\\"autoplay; encrypted-media\\\"\\n\\t\\t\\t\\t\\t\\tallowfullscreen\\n\\t\\t\\t\\t\\t\\tsandbox=\\\"allow-same-origin allow-scripts allow-popups allow-forms allow-pointer-lock allow-top-navigation allow-presentation\\\"\\n\\t\\t\\t\\t\\t\\t#jsFrame>\\n\\t\\t</iframe>\\n\\t</div>\\n</div>\\n<!-- CODE -->\\n<div class=\\\"code\\\">\\n\\t<codemirror [config]=\\\"CODEMIRROR_CONFIG\\\" [ngModel]=\\\"codemirror\\\"></codemirror>\\n</div>\\n<!-- COPY -->\\n<div class=\\\"copy\\\">\\n\\t<label>{{method}} generator <small>settings:</small></label>\\n\\t<textarea class=\\\"copy-from\\\" [innerHTML]=\\\"copyString|safeHtml\\\" #copyFrom></textarea>\\n\\t<button class=\\\"btn btn-bradmax\\\" (click)=\\\"copyToClipboard(copyFrom)\\\"><i class=\\\"fa fa-fw fa-copy\\\"></i>&nbsp;copy <strong>{{method}}</strong> embed code to clipboard</button>\\n</div>\\n<!-- FORM -->\\n<div class=\\\"form\\\">\\n\\t<div class=\\\"form-con\\\">\\n\\t\\t<!-- width / height -->\\n\\t\\t<div class=\\\"form-row\\\">\\n\\t\\t\\t<!-- width -->\\n\\t\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"width\\\">width<small> (required)</small></label></div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"width\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formWidth\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'video width'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t min=\\\"1\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- height -->\\n\\t\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"height\\\">height<small> (required)</small></label></div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"height\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formHeight\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'video height'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t min=\\\"1\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- mediaUrl s -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div *ngFor=\\\"let mediaUrl of formMediaUrls;index as idx;first as fst;last as lst;\\\" class=\\\"form-fields media-src\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\">\\n\\t\\t\\t\\t\\t<label for=\\\"mediaUrl-{{idx}}\\\"><small *ngIf=\\\"!fst\\\">fallback </small>media source url<small *ngIf=\\\"fst\\\"> (required)</small></label>\\n\\t\\t\\t\\t\\t<!-- + -->\\n\\t\\t\\t\\t\\t<button *ngIf=\\\"fst\\\" class=\\\"btn btn-xs\\\" (click)=\\\"addMedia()\\\" [disabled]=\\\"!canAddMedia\\\">\\n\\t\\t\\t\\t\\t\\t<small><i class=\\\"fa fa-fw fa-plus\\\"></i>&nbsp;additional format fallback</small>\\n\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t\\t<!-- - -->\\n\\t\\t\\t\\t\\t<button *ngIf=\\\"!fst\\\" class=\\\"btn btn-xs\\\" (click)=\\\"removeMedia()\\\">\\n\\t\\t\\t\\t\\t\\t<small><i class=\\\"fa fa-fw fa-minus\\\"></i>&nbsp;remove format fallback</small>\\n\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"mediaUrl-{{idx}}\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t (change)=\\\"formMediaUrlsChange(idx, $event.target.value)\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [ngModel]=\\\"formMediaUrls[idx]\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [minlength]=\\\"5\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'enter url to valid media file' + (!fst ? ' (used when problem with other media url)':'')\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- duration / title -->\\n\\t\\t<div class=\\\"form-row\\\">\\n\\t\\t\\t<!-- \\tduration -->\\n\\t\\t\\t<div class=\\\"form-group duration\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"duration\\\">duration<small> (optional)</small></label></div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"duration\\\" type=\\\"number\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formDuration\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'duration in seconds'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t min=\\\"1\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- title -->\\n\\t\\t\\t<div class=\\\"form-group title\\\">\\n\\t\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"title\\\">title<small> (optional)</small></label></div>\\n\\t\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t\\t<input id=\\\"title\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formTitle\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'media title'\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- splash image -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"splashImageUrl\\\">splash image url<small> (optional)</small></label></div>\\n\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t<input id=\\\"splashImageUrl\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formSplashImageUrl\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'url to valid media image file'\\\"\\n\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- media id for bradmax content statistics -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"id\\\">id for bradmax content statistics<small> (optional)</small></label></div>\\n\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t<input id=\\\"id\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formId\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'media id for bradmax content statistics'\\\"\\n\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- VMAP -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"adsVmapUrl\\\">ads VMAP URL<small> (optional)</small></label></div>\\n\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t<input id=\\\"adsVmapUrl\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formAdsVmapUrl\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'VMAP URL for ads'\\\"\\n\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t\\t<!-- VAST preroll -->\\n\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t<div class=\\\"form-label\\\"><label for=\\\"adsPrerollVastUrl\\\">preroll ads VAST URL<small> (optional)</small></label></div>\\n\\t\\t\\t<div class=\\\"form-fields\\\">\\n\\t\\t\\t\\t<input id=\\\"adsPrerollVastUrl\\\" type=\\\"text\\\" class=\\\"form-control\\\"\\n\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"formAdsPrerollVastUrl\\\"\\n\\t\\t\\t\\t\\t\\t\\t [placeholder]=\\\"'VAST URL for preroll ads'\\\"\\n\\t\\t\\t\\t\\t\\t\\t minlength=\\\"1\\\">\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\n\\t</div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/embedcode/component/player.embed.code.component.html\n// module id = 1467\n// module chunks = 1","module.exports = \":host {\\n  display: -webkit-box;\\n  display: -ms-flexbox;\\n  display: flex;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  min-width: 400px;\\n  max-width: 1024px; }\\n  :host .view-label, :host .copy, :host .code, :host .preview, :host .preview-label, :host .preview-frames {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    margin: 0 0 0.5em 0; }\\n  :host .view-label {\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -webkit-box-align: start;\\n        -ms-flex-align: start;\\n            align-items: flex-start;\\n    -webkit-box-pack: justify;\\n        -ms-flex-pack: justify;\\n            justify-content: space-between; }\\n  :host .view-label .embed-method {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: end;\\n          -ms-flex-pack: end;\\n              justify-content: flex-end;\\n      -ms-flex-wrap: wrap;\\n          flex-wrap: wrap;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      font-size: 0.9em; }\\n  :host .view-label .embed-method .embed-method-label {\\n        margin: 0 0.25em 0 0; }\\n  :host .view-label .embed-method .embed-btn {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: start;\\n            -ms-flex-pack: start;\\n                justify-content: flex-start; }\\n  :host .view-label .embed-method .embed-btn * {\\n          cursor: pointer; }\\n  :host .view-label .embed-method .embed-btn label {\\n          height: 26px;\\n          line-height: 26px;\\n          margin: 0 0.25em 0 0; }\\n  :host .view-label .embed-method .embed-btn input[type=radio] {\\n          margin: 0 0.25em 0 0;\\n          height: 26px; }\\n  :host .preview {\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    border: 1px solid #e8e8e8;\\n    padding: 0.5em;\\n    border-radius: 3px;\\n    background-color: rgba(255, 255, 255, 0.69); }\\n  :host .preview-label {\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: justify;\\n          -ms-flex-pack: justify;\\n              justify-content: space-between; }\\n  :host .preview-scale {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: center;\\n          -ms-flex-pack: center;\\n              justify-content: center;\\n      white-space: nowrap; }\\n  :host .preview-scale small {\\n        pointer-events: none; }\\n  :host .preview-frames {\\n      position: relative;\\n      z-index: 0;\\n      -webkit-box-flex: 1;\\n          -ms-flex: 1;\\n              flex: 1;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-align: center;\\n          -ms-flex-align: center;\\n              align-items: center;\\n      -webkit-box-pack: center;\\n          -ms-flex-pack: center;\\n              justify-content: center; }\\n  :host .preview-frames iframe {\\n        background-color: black; }\\n  :host .code {\\n    -webkit-box-flex: 1;\\n        -ms-flex: 1;\\n            flex: 1;\\n    -webkit-box-orient: vertical;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: column;\\n            flex-direction: column;\\n    font-size: 0.9em; }\\n  :host .code /deep/.CodeMirror {\\n      height: inherit;\\n      border-radius: 3px;\\n      font-size: 0.9em; }\\n  :host .code /deep/.CodeMirror .cm-string {\\n        line-break: anywhere; }\\n  :host .copy {\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -webkit-box-align: center;\\n        -ms-flex-align: center;\\n            align-items: center;\\n    -webkit-box-pack: justify;\\n        -ms-flex-pack: justify;\\n            justify-content: space-between; }\\n  :host .copy-from {\\n      width: 0 !important;\\n      height: 0 !important;\\n      resize: none !important;\\n      border: none !important;\\n      outline: none !important;\\n      background: transparent !important;\\n      color: transparent !important; }\\n  :host .form-con {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-orient: horizontal;\\n    -webkit-box-direction: normal;\\n        -ms-flex-direction: row;\\n            flex-direction: row;\\n    -ms-flex-wrap: wrap;\\n        flex-wrap: wrap;\\n    -webkit-box-align: stretch;\\n        -ms-flex-align: stretch;\\n            align-items: stretch;\\n    -webkit-box-pack: start;\\n        -ms-flex-pack: start;\\n            justify-content: flex-start; }\\n  :host .form-con .form-row {\\n      display: -webkit-box;\\n      display: -ms-flexbox;\\n      display: flex;\\n      -webkit-box-orient: horizontal;\\n      -webkit-box-direction: normal;\\n          -ms-flex-direction: row;\\n              flex-direction: row;\\n      -webkit-box-align: end;\\n          -ms-flex-align: end;\\n              align-items: flex-end;\\n      -webkit-box-pack: start;\\n          -ms-flex-pack: start;\\n              justify-content: flex-start; }\\n  :host .form-label label small {\\n    font-weight: 200;\\n    font-size: x-small; }\\n  :host .form .form-group, :host .form .form-row {\\n    width: 100%; }\\n  :host .form .form-group .form-fields, :host .form .form-row .form-fields {\\n      width: 100%; }\\n  :host .form .media-src .form-label {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    -webkit-box-align: center;\\n        -ms-flex-align: center;\\n            align-items: center;\\n    -webkit-box-pack: justify;\\n        -ms-flex-pack: justify;\\n            justify-content: space-between; }\\n  :host .form .duration {\\n    margin-right: 0.5em;\\n    max-width: 150px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/embedcode/component/player.embed.code.component.scss\n// module id = 1468\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'PLAYER.EMBEDER.TITLE' | translate:lang }}</h1>\\n\\n<div class=\\\"col-lg-12\\\">\\n\\t<div class=\\\"panel panel-inverse form-panel\\\">\\n\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<div class=\\\"panel-title\\\">{{ 'PLAYER.EMBEDER.PANEL_TITLE.PLAYER_INFO' | translate:lang }}</div>\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"panel-body player-info-summary\\\">\\n\\t\\t\\t<div class=\\\"col-lg-6\\\">\\n\\t\\t\\t\\t\\t<span>{{ 'PLAYER.EMBEDER.PLAYER_NAME' | translate:lang }}:</span>\\n\\t\\t\\t\\t\\t<span>{{service.playerModel.name}}</span>\\n\\t\\t\\t</div>\\n\\t\\t\\t<a class=\\\"btn btn-sm btn-white back-button\\\" (click)=\\\"navigationBack()\\\">\\n\\t\\t\\t\\t<i class=\\\"fa fa-arrow-left\\\"></i> &nbsp;{{ 'PLAYER.EMBEDER.BACK' | translate:lang }}\\n\\t\\t\\t</a>\\n\\n\\t\\t\\t<a class=\\\"btn btn-sm btn-white download-zip\\\" href=\\\"{{service.playerModel.latest_webbuild.zip_url}}\\\" target=\\\"_blank\\\">\\n\\t\\t\\t\\t  <i class=\\\"fa fa-file-archive-o\\\"></i> &nbsp;{{ 'PLAYER.EMBEDER.DOWNLOAD_ZIP' | translate:lang }}\\n\\t\\t\\t</a>\\n\\t\\t</div>\\n\\n\\t</div>\\n\\t<div class=\\\"panel panel-inverse form-panel\\\">\\n\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<div class=\\\"panel-title\\\">{{ 'PLAYER.EMBEDER.PANEL_TITLE.FORM' | translate:lang }}</div>\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<!-- FORM -->\\n\\t\\t\\t<div class=\\\"col-lg-6\\\">\\n\\n\\t\\t\\t\\t<!-- type -->\\n\\t\\t\\t\\t<div class=\\\"col-sm-12 input-cell\\\">\\n\\t\\t\\t\\t\\t<label>{{ 'PLAYER.EMBEDER.INPUT.TYPE.LABEL' | translate:lang }}</label>:<br/>\\n\\t\\t\\t\\t\\t<dropdown [model]=\\\"dropdownModel\\\" [(value)]=\\\"selectedType\\\" (onSelect)=\\\"onDropdownSelect($event)\\\"></dropdown>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- mandatory -->\\n\\t\\t\\t\\t<div *ngFor=\\\"let name of modelMandatoryNames;\\\" class=\\\"input-cell\\\" [ngClass]=\\\"'col-sm-' + modelFieldsCellWidth[name]\\\">\\n\\t\\t\\t\\t\\t<label>{{ 'PLAYER.EMBEDER.INPUT.' + name.toUpperCase() + '.LABEL' | translate:lang }}:</label>\\n\\t\\t\\t\\t\\t<editable-input [name]=\\\"name\\\" placeholder=\\\"{{ 'PLAYER.EMBEDER.INPUT.' + name.toUpperCase() + '.PLACEHOLDER' | translate:lang }}\\\"\\n\\t\\t\\t\\t\\t\\t[integerOnly]=\\\"name != 'mediaUrl'\\\" [(value)]=\\\"model[name]\\\" (valueChange)=\\\"onChange()\\\">\\n\\t\\t\\t\\t\\t</editable-input>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- optional -->\\n\\t\\t\\t\\t<div class=\\\"col-sm-12 optional-parameters-btn-con\\\">\\n\\t\\t\\t\\t\\t<a class=\\\"optional-parameters-btn\\\" (click)=\\\"toggleOptional()\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [ngClass]=\\\"{ 'fa-angle-up': showOptional, 'fa-angle-down': !showOptional }\\\"></i>\\n\\t\\t\\t\\t\\t\\t&nbsp;{{ 'PLAYER.EMBEDER.TOGGLE_OPTIONAL.' + (showOptional?1:0) | translate:lang }}\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"showOptional\\\">\\n\\t\\t\\t\\t\\t<div *ngFor=\\\"let name of modelOptionalNames;\\\" class=\\\"input-cell\\\" [ngClass]=\\\"'col-md-' + modelFieldsCellWidth[name]\\\">\\n\\t\\t\\t\\t\\t\\t<label>{{ 'PLAYER.EMBEDER.INPUT.' + name.toUpperCase() + '.LABEL' | translate:lang }}:</label>\\n\\t\\t\\t\\t\\t\\t<editable-input [name]=\\\"name\\\" placeholder=\\\"{{ 'PLAYER.EMBEDER.INPUT.' + name.toUpperCase() + '.PLACEHOLDER' | translate:lang }}\\\"\\n\\t\\t\\t\\t\\t\\t\\t[floatOnly]=\\\"name == 'duration'\\\" [(value)]=\\\"model[name]\\\" (valueChange)=\\\"onChange()\\\">\\n\\t\\t\\t\\t\\t\\t</editable-input>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- CODE -->\\n\\t\\t\\t<div class=\\\"col-lg-6\\\">\\n\\t\\t\\t\\t<div class=\\\"panel-title\\\">\\n\\t\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [ngClass]=\\\"formatTypeIconNgClass()\\\"></i>&nbsp;<strong>{{formatTypeLabel()}}</strong>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<codemirror [config]=\\\"codemirrorConfig\\\" [ngModel]=\\\"embedCodeString\\\"></codemirror>\\n\\t\\t\\t\\t<!-- copy -->\\n\\t\\t\\t\\t<a class=\\\"copy-btn\\\" (click)=\\\"copyToClipboard()\\\"><i class=\\\"fa fa-fw fa-clipboard\\\"></i>&nbsp;{{ 'PLAYER.EMBEDER.COPY_TO_CLIPBOARD' | translate:lang }}</a>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\n\\t</div>\\n</div>\\n\\n<div class=\\\"col-lg-12\\\">\\n\\t<!-- PREVIEW -->\\n\\t<div class=\\\"panel panel-inverse preview-panel\\\">\\n\\t\\t<div class=\\\"panel-heading\\\">\\n\\t\\t\\t<div class=\\\"panel-title\\\">{{ 'PLAYER.EMBEDER.PANEL_TITLE.PREVIEW' | translate:lang }}&nbsp;{{formatTypeLabel()}}</div>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"panel-body\\\">\\n\\t\\t\\t<div class=\\\"iframe-preview\\\" *ngIf=\\\"selectedType==embedCodeType.IFRAME\\\" [innerHTML]=\\\"embedCodeHtml\\\"></div>\\n\\t\\t\\t<button class=\\\"dynamic-preview\\\" *ngIf=\\\"selectedType==embedCodeType.DYNAMIC\\\" class=\\\"btn btn-md btn-white\\\" (click)=\\\"previewDynamic()\\\">preview in new window</button>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/embeder/component/player.embeder.view.component.html\n// module id = 1469\n// module chunks = 1","module.exports = \".player-info-summary span {\\n  font-size: 14px;\\n  line-height: 30px; }\\n\\n.player-info-summary .download-zip {\\n  float: right;\\n  margin-left: 15px; }\\n\\n.player-info-summary .back-button {\\n  float: right;\\n  margin-left: 15px; }\\n\\n.form-panel .input-cell {\\n  padding: 10px 15px; }\\n\\n.form-panel .input-cell dropdown {\\n    width: 190px; }\\n\\n.form-panel .input-cell dropdown /deep/.btn {\\n      font-weight: 400; }\\n\\n.form-panel .optional-parameters-btn-con {\\n  padding: 10px 15px; }\\n\\n.form-panel .optional-parameters-btn-con .optional-parameters-btn {\\n    cursor: pointer;\\n    text-decoration: none; }\\n\\n.form-panel .copy-btn {\\n  float: right;\\n  cursor: pointer;\\n  text-decoration: none;\\n  margin-top: 5px; }\\n\\n@media screen and (max-width: 1200px) {\\n  .form-panel .col-lg-6 {\\n    clear: both; } }\\n\\n.preview-panel .panel-body {\\n  text-align: center; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/embeder/component/player.embeder.view.component.scss\n// module id = 1470\n// module chunks = 1","module.exports = {\"target\":\"html5\",\"dataReportErrors\":true,\"dataProvider\":[{\"title\":\"Tears of steel\",\"duration\":45,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\",\"contentType\":\"movie\",\"width\":1280,\"height\":534,\"bitrate\":191999}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/startsplash.jpg\",\"width\":956,\"height\":397}],\"mediaDetails\":{\"tags\":[\"bradmax.com\",\"landing page\",\"Tears of steal\",\"mp4\",\"Open Movie\",\"Blender Foundation\"],\"genres\":[{\"name\":\"sci-fi\"},{\"name\":\"adventure\"}],\"descriptionLong\":\"This is the fourth Open Movie by Blender Foundation, re-rendered and re-graded in 4k resolution. (This is the HD scaled down version). Visit http://www.tearsofsteel.org for more information or downloads. All data for the film is available under Creative Commons Attribution. \\\"Tears of Steel\\\" was realized with crowd-funding by users of the open source 3D creation tool Blender. Target was to improve and test a complete open and free pipeline for visual effects in film - and to make a compelling sci-fi film in Amsterdam, the Netherlands.\",\"descriptionShort\":\"\\\"Tears of Steel\\\" was realized with crowd-funding by users of the open source 3D creation tool Blender.\",\"year\":2013,\"mediaCast\":[\"Derek de Lint\",\"Sergio Hasselbaink\",\"Rogier Schippers\",\"Vanja Rukavina\",\"Denise Rebergen\",\"Jody Bhe\",\"Chris Haley\"],\"directors\":[\"Ian Hubert\"]}},{\"title\":\"Big Buck Bunny\",\"duration\":573.6,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_big.buck.bunny.jpg\",\"width\":620,\"height\":348}]},{\"title\":\"Cosmos Laundromat\",\"duration\":726.6,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_cosmos.laundromat.jpg\",\"width\":1200,\"height\":800}]},{\"title\":\"Elephants Dream\",\"duration\":632.4,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_elephant.dream.jpg\",\"width\":1920,\"height\":1080}]},{\"title\":\"Sintel\",\"duration\":868.8,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_sintel.png\",\"width\":1920,\"height\":817}]},{\"title\":\"Sita Sings the Blues\",\"duration\":4879.2,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_sita.sings.the.blues.jpg\",\"width\":960,\"height\":540}]},{\"title\":\"Caminandes 1: Llama Drama\",\"duration\":91,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_caminandes.1.jpg\",\"width\":1920,\"height\":1080}]},{\"title\":\"Caminandes 2: Gran Dillama\",\"duration\":136.2,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_caminandes.2.jpg\",\"width\":1920,\"height\":1080}]},{\"title\":\"Caminandes 3: Llamigos\",\"duration\":138.6,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_caminandes.3.jpg\",\"width\":1920,\"height\":1080}]},{\"title\":\"Tears of steel\",\"duration\":734.097415,\"source\":[{\"url\":\"https://bradmax.com/static/video/tears_of_steel.mp4\"}],\"splashImages\":[{\"url\":\"https://bradmax.com/static/images/splash_tears.of.steel.jpg\",\"width\":1615,\"height\":675}]}]}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/preview/video/player.configurator.preview.video.provider.json\n// module id = 1471\n// module chunks = 1","module.exports = \"<ng-template [ngIf]=\\\"config != null\\\">\\n\\t<switch *ngIf=\\\"activateSwitchModel != null && config.multichoice\\\" size=\\\"small\\\" [checked]=\\\"config.checked\\\"\\n\\t\\t\\t(checkedChange)=\\\"checkedChange()\\\" [labelLeft]=\\\"activateSwitchModel.left\\\"\\n\\t\\t\\t[labelRight]=\\\"activateSwitchModel.right\\\"></switch>\\n\\t<div class=\\\"list-group\\\">\\n\\t\\t<div *ngFor=\\\"let group of groups;\\\" class=\\\"list-group-item\\\" \\n\\t\\t\\t [class.disabled]=\\\"config.multichoice && !config.checked\\\">\\n\\t\\t\\t<div class=\\\"list-group-item-heading\\\">\\n\\t\\t\\t\\t<h4 (click)=\\\"group.collapsed=!group.collapsed\\\">\\n\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-angle-right]=\\\"group.collapsed\\\" [class.fa-angle-down]=\\\"!group.collapsed\\\"></i>\\n\\t\\t\\t\\t\\t<span>{{ group.name | capitalizeFirst }} setup:</span>\\n\\t\\t\\t\\t\\t<small *ngIf=\\\"group.collapsed\\\">( expand section )</small>\\n\\t\\t\\t\\t\\t<small *ngIf=\\\"!group.collapsed\\\">( fold section )</small>\\n\\t\\t\\t\\t</h4>\\n\\t\\t\\t\\t<div class=\\\"btn-group pull-right\\\" *ngIf=\\\"group.isAdvance != null\\\">\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" (click)=\\\"advanceChange(group, false)\\\" [class.active]=\\\"group.advanceValue==false\\\">Basic setup</button>\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-sm btn-white\\\" (click)=\\\"advanceChange(group, true)\\\" [class.active]=\\\"group.advanceValue==true\\\">Advanced setup</button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<ng-template [ngIf]=\\\"!group.collapsed\\\">\\n\\t\\t\\t\\t<player-config-form-inputs *ngFor=\\\"let item of group.items\\\" \\n\\t\\t\\t\\t\\t[data]=\\\"item\\\" [ngClass]=\\\"getInputNgClass(item)\\\">\\n\\t\\t\\t\\t</player-config-form-inputs>\\n\\t\\t\\t</ng-template>\\n\\t\\t</div>\\n\\t</div>\\n</ng-template>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/form/groups/player.configurator.form.groups.html\n// module id = 1472\n// module chunks = 1","module.exports = \":host {\\n  /** enable/disable switch */\\n  /** disabled form */ }\\n  :host switch {\\n    display: block;\\n    margin: 25px 15px;\\n    font-size: 1.2em; }\\n  :host .disabled {\\n    pointer-events: none;\\n    cursor: default;\\n    opacity: 0.25; }\\n  :host .list-group {\\n    margin: 0;\\n    padding: 0; }\\n  :host .list-group .list-group-item {\\n      border-radius: 0;\\n      border-bottom: none;\\n      border-right: none;\\n      border-left: none;\\n      margin: 0;\\n      padding: 10px;\\n      background: none; }\\n  :host .list-group .list-group-item:first-of-type {\\n        border-top: none; }\\n  :host .list-group .list-group-item:last-of-type {\\n        border-bottom: none; }\\n  :host .list-group .list-group-item .list-group-item-heading {\\n        margin: 0; }\\n  :host .list-group .list-group-item .list-group-item-heading > * {\\n          display: inline-block; }\\n  :host .list-group .list-group-item .list-group-item-heading > .btn-group {\\n          margin-top: 10px; }\\n  :host .list-group .list-group-item .list-group-item-heading > .btn-group .btn.active {\\n            cursor: auto;\\n            pointer-events: none; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4 {\\n          position: relative;\\n          color: inherit;\\n          cursor: pointer;\\n          opacity: 0.85;\\n          text-decoration: none; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4 i {\\n            opacity: 0.5;\\n            font-size: 0.9em;\\n            margin: 0 5px; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4 small {\\n            position: absolute;\\n            left: 2em;\\n            top: 2em;\\n            opacity: 0;\\n            visibility: hidden; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4:hover {\\n            opacity: 1; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4:hover i {\\n              opacity: 1; }\\n  :host .list-group .list-group-item .list-group-item-heading > h4:hover small {\\n              opacity: 1;\\n              visibility: visible; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/form/groups/player.configurator.form.groups.scss\n// module id = 1473\n// module chunks = 1","module.exports = \"\\n{{'PLAYER.CONFIG.DOCS.TEXT'|translate:lang}} <a href=\\\"{{link}}\\\" target=\\\"_blank\\\"> {{'PLAYER.CONFIG.DOCS.LINK'|translate:lang}} </a>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/form/inputs/docsLink/docsLink.component.html\n// module id = 1474\n// module chunks = 1","module.exports = \":host {\\n  display: inline-block;\\n  white-space: normal;\\n  padding-top: 10px;\\n  color: #868686;\\n  font-weight: 400;\\n  font-size: 0.9em; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/form/inputs/docsLink/docsLink.component.scss\n// module id = 1475\n// module chunks = 1","module.exports = \"<div *ngIf=\\\"data!=null\\\" [ngSwitch]=\\\"data.type\\\">\\n\\t<!--Bool-->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.Bool]\\\" class=\\\"form-group\\\" [class.hide]=\\\"data.hidden\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<switch size=\\\"medium\\\" \\n\\t\\t\\t\\t[checked]=\\\"data.value\\\" \\n\\t\\t\\t\\t(checkedChange)=\\\"onChangeData(data, $event)\\\" \\n\\t\\t\\t\\t[labelRight]=\\\"{on: 'on', off: 'off'}\\\">\\n\\t\\t\\t</switch>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!--RGB-->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.RGB]\\\" class=\\\"form-group\\\" [class.hide]=\\\"data.hidden\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<span *ngIf=\\\"data.defaultValue && data.defaultValue != data.value\\\" [attr.title]=\\\"'reset to: ' + data.defaultValue\\\" \\n\\t\\t\\t(click)=\\\"onResetData(data, data.defaultValue)\\\" class=\\\"btn btn-xs btn-white form-reset-btn\\\">reset</span>\\n\\t\\t<div class=\\\"form-comp overflow-visible\\\">\\n\\t\\t\\t<color-picker *ngIf=\\\"data.value\\\" [value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\"></color-picker>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!--String-->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.String]\\\" class=\\\"form-group\\\" [class.hide]=\\\"data.hidden\\\">\\n\\t\\t<!--String:hidden-->\\n\\t\\t<ng-template [ngIf]=\\\"data.hidden\\\">\\n\\t\\t\\t<input class=\\\"form-control\\\" type=\\\"hidden\\\" [attr.name]=\\\"data.name\\\" [(ngModel)]=\\\"data.value\\\" >\\n\\t\\t</ng-template>\\n\\t\\t<!--String:!hidden-->\\n\\t\\t<ng-template [ngIf]=\\\"!data.hidden\\\">\\n\\t\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t\\t<ng-template [ngIf]=\\\"data.values != null\\\">\\n\\t\\t\\t\\t<!-- !singlechoice && !multichoice -->\\n\\t\\t\\t\\t<ng-template [ngIf]=\\\"!data.singlechoice && !data.multichoice\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"form-comp overflow-visible\\\">\\n\\t\\t\\t\\t\\t\\t<!--dropdown-->\\n\\t\\t\\t\\t\\t\\t<ng-template [ngIf]=\\\"data.name != 'skin' && data.name != 'startSplash' && data.name != 'endSplash'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<dropdown [model]=\\\"getDropdownModel(data)\\\" [value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\"></dropdown>\\n\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t<!--image-grid-->\\n\\t\\t\\t\\t\\t\\t<ng-template [ngIf]=\\\"data.name == 'skin' || data.name == 'startSplash' || data.name == 'endSplash'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<image-grid [name]=\\\"data.name\\\" [(value)]=\\\"data.value\\\" [values]=\\\"data.values\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[urlParser]=\\\"getImageGridUrlParser(data.name)\\\" (valueChange)=\\\"onChangeData(data, $event)\\\">\\n\\t\\t\\t\\t\\t\\t\\t</image-grid>\\n\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t<!-- singlechoice -->\\n\\t\\t\\t\\t<ng-template [ngIf]=\\\"data.singlechoice\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t\\t\\t\\t<singlechoice-input [name]=\\\"data.name\\\" [model]=\\\"data.values\\\" \\n\\t\\t\\t\\t\\t\\t\\t[value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\">\\n\\t\\t\\t\\t\\t\\t</singlechoice-input>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t<!-- multichoice -->\\n\\t\\t\\t\\t<ng-template [ngIf]=\\\"data.multichoice\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t\\t\\t\\t<check-buttons [name]=\\\"data.name\\\" [model]=\\\"data.values\\\" [iconMap]=\\\"getRadioIconMap()\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t[value]=\\\"stringToArray(data.value)\\\" (valueChange)=\\\"onChangeData(data, arrayToString($event))\\\">\\n\\t\\t\\t\\t\\t\\t</check-buttons>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</ng-template>\\n\\t\\t\\t<!-- text -->\\n\\t\\t\\t<div class=\\\"form-comp\\\" *ngIf=\\\"data.values == null\\\">\\n\\t\\t\\t\\t<!-- singlechoice -->\\n\\t\\t\\t\\t<button *ngIf=\\\"data.singlechoice\\\" class=\\\"btn btn-sm btn-white pull-right\\\" [class.btn-reset]=\\\"isResetBtn\\\" (click)=\\\"onChangeData(data, data.value)\\\">{{ data.value }}</button>\\n\\t\\t\\t\\t<!-- !singlechoice -->\\n\\t\\t\\t\\t<editable-input *ngIf=\\\"!data.singlechoice\\\" [name]=\\\"data.name\\\" [placeholder]=\\\"data.title\\\" [value]=\\\"data.value\\\"\\n\\t\\t\\t\\t\\t(valueChange)=\\\"onChangeData(data, $event)\\\">\\n\\t\\t\\t\\t</editable-input>\\n\\t\\t\\t</div>\\n\\t\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t\\t</ng-template>\\n\\t</div>\\n\\t<!-- Float || Int -->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.Float] || hxType[hxType.Int]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<rangeslider [value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\"\\n\\t\\t\\t\\t[step]=\\\"0.01\\\" [min]=\\\"data.range[0]\\\" [max]=\\\"data.range[1]\\\">\\n\\t\\t\\t</rangeslider>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!-- Link -->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.Link]\\\" class=\\\"form-group\\\">\\n\\t\\t<a class=\\\"btn btn-sm btn-link\\\" [href]=\\\"data.value\\\" target=\\\"_blank\\\">\\n\\t\\t\\t<i class=\\\"fa fa-link\\\"></i>&nbsp;{{ data.title }}\\n\\t\\t</a>\\n\\t</div>\\n\\t<!-- ImgFile -->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.ImgFile]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<upload-image [imageData]=\\\"data.value\\\" (imageChange)=\\\"onChangeData(data, $event)\\\" [resample]=\\\"false\\\"\\n\\t\\t\\t\\tminWidth=\\\"20\\\" minHeight=\\\"20\\\" maxWidth=\\\"1000\\\" maxHeight=\\\"1000\\\" maxFileSize=\\\"60000\\\" (maxSizeCallback)=\\\"onTooBigLogo($event)\\\"></upload-image>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!-- P12File -->\\n\\t<!-- <div *ngSwitchCase=\\\"hxType[hxType.P12File]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<upload-file (fileChange)=\\\"onChangeData(data, $event)\\\"></upload-file>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div> -->\\n\\t<!-- TextArea -->\\n\\t<div *ngSwitchCase=\\\"hxType[hxType.TextArea]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp\\\">\\n\\t\\t\\t<codemirror [config]=\\\"codemirrorConfig\\\"\\n\\t\\t\\t\\t[ngModel]=\\\"formatCodeValue(data.value, true)\\\"\\n\\t\\t\\t\\t(ngModelChange)=\\\"onChangeData(data, formatCodeValue($event, false))\\\"></codemirror>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div>\\n\\t<!-- TODO:List -->\\n\\t<!-- <div *ngSwitchCase=\\\"hxType[hxType.List]\\\" class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">TODO:{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp todo\\\" *ngIf=\\\"data.itemType == 'VastItem'\\\">\\n\\t\\t\\t<data-list [value]=\\\"data.value\\\" (valueChange)=\\\"onChangeData(data, $event)\\\"></data-list>\\n\\t\\t</div>\\n\\t\\t<div class=\\\"form-comp todo\\\" *ngIf=\\\"data.itemType == 'FreewheelSlot'\\\">\\n\\t\\t\\t<p> >>>>>>>>>>> 'FreewheelSlot' List <<<<<<<<<<<< </p>\\n\\t\\t</div>\\n\\t\\t<small>{{ data.type }}</small>\\n\\t\\t<small>{{ data.value }}</small>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div> -->\\n\\t<!-- UNKNOWN -->\\n\\t<!-- <div *ngSwitchDefault class=\\\"form-group\\\">\\n\\t\\t<label class=\\\"form-label\\\">UNKNOWN:{{ data.title }}</label>\\n\\t\\t<div class=\\\"form-comp todo\\\">\\n\\t\\t\\t<p>name: {{ data.name }} </p>\\n\\t\\t\\t<small>type: {{ data.type }}</small>\\n\\t\\t\\t<small>values: {{ data.values }}</small>\\n\\t\\t\\t<small>range: {{ data.range }}</small>\\n\\t\\t</div>\\n\\t\\t<docs-link *ngIf=\\\"data.docsLink\\\" [link]=\\\"data.docsLink\\\"></docs-link>\\n\\t</div> -->\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/form/inputs/player.configurator.form.inputs.html\n// module id = 1476\n// module chunks = 1","module.exports = \":host {\\n  display: inline-block;\\n  vertical-align: top; }\\n  :host.form-group-inputs-full {\\n    width: 100%; }\\n  :host.form-group-inputs-small {\\n    width: 50%;\\n    min-width: 265px; }\\n  :host.color {\\n    float: left; }\\n  :host.hidden {\\n    display: block; }\\n  :host .form-group {\\n    position: relative;\\n    margin: 10px 0 0 0;\\n    padding: 10px 15px;\\n    border: 1px solid #efefef;\\n    white-space: nowrap; }\\n  :host .form-group .form-label {\\n      color: #212121;\\n      white-space: normal;\\n      font-weight: 400; }\\n  :host .form-group .form-reset-btn {\\n      cursor: pointer;\\n      float: right;\\n      opacity: 0.9;\\n      margin-bottom: 5px; }\\n  :host .form-group .form-reset-btn:hover {\\n        opacity: 1; }\\n  :host .form-group .form-comp {\\n      min-width: 250px;\\n      overflow: hidden;\\n      white-space: normal; }\\n  :host .form-group .form-comp.todo {\\n        background: lightgoldenrodyellow; }\\n  :host .form-group .form-comp.overflow-visible {\\n        overflow: visible; }\\n  :host .form-group .form-comp /deep/ image-grid .skin-gorilla span {\\n        left: 4%;\\n        bottom: 22%; }\\n  :host .form-group .form-comp /deep/ image-grid .skin-mole span {\\n        left: 5%;\\n        bottom: 15%; }\\n  :host .form-group .form-comp /deep/ image-grid .skin-snake span {\\n        left: 3%;\\n        bottom: 15%; }\\n  :host .form-group .form-comp /deep/ image-grid .skin-zebra span {\\n        left: 6%;\\n        bottom: 21%; }\\n  :host .form-group .form-comp .btn-reset {\\n        position: absolute;\\n        top: 6px;\\n        right: 0; }\\n  :host.reset .form-group {\\n    border: none; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/form/inputs/player.configurator.form.inputs.scss\n// module id = 1477\n// module chunks = 1","module.exports = \"<div class=\\\"outlet\\\" #outletContainer>\\n\\t<router-outlet></router-outlet>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/form/player.configurator.form.html\n// module id = 1478\n// module chunks = 1","module.exports = \":host {\\n  display: block;\\n  margin: 0; }\\n  :host .outlet {\\n    display: block;\\n    position: relative;\\n    padding-bottom: 50px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/form/player.configurator.form.scss\n// module id = 1479\n// module chunks = 1","module.exports = \"<div class=\\\"player-panel-body\\\" #configuratorPreviewFormBody>\\n    <player-configurator-preview-video></player-configurator-preview-video>\\n</div>\\n<div class=\\\"player-panel-head\\\" #configuratorPreviewFormHead>\\n    <div class=\\\"btn-group configuration-buttons\\\">\\n        <button class=\\\"btn btn-sm btn-bradmax pull-right\\\" (click)=\\\"saveChanges()\\\">\\n            save changes <i class=\\\"fa fa-save\\\"></i>\\n        </button>\\n    </div>\\n    <div class=\\\"form-group configuration-name\\\">\\n        <label>configuration name: </label>\\n        <input type=\\\"text\\\" class=\\\"form-control input-sm\\\" [(ngModel)]=\\\"configService.name\\\"/>\\n    </div>\\n</div>\\n<div class=\\\"player-panel-foot\\\" #configuratorPreviewFormFoot>\\n    <!--{{configService.video.playerStates[state]}}-->\\n    <switch size=\\\"small\\\" [checked]=\\\"configService.video.enableSkinAutohide\\\" (checkedChange)=\\\"changeSkinAutohide($event)\\\"\\n        [labelRight]=\\\"{on: 'enabled autohide skin (works only in preview)',off: 'disabled autohide skin (works only in preview)'}\\\">\\n    </switch>\\n    <div class=\\\"player-state\\\">\\n        <span [class.active]=\\\"state == configService.video.playerStates.start\\\" \\n            (click)=\\\"setPlayerState(configService.video.playerStates.start)\\\"><small>show</small> <i>Start</i>\\n        </span>\\n        <span [class.active]=\\\"state == configService.video.playerStates.middle\\\" \\n            (click)=\\\"setPlayerState(configService.video.playerStates.middle)\\\"><small>show while</small> <i>Playing</i>\\n        </span>\\n        <span [class.active]=\\\"state == configService.video.playerStates.end\\\" \\n            (click)=\\\"setPlayerState(configService.video.playerStates.end)\\\"><small>show</small> <i>End</i>\\n        </span>\\n    </div>\\n</div>\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/preview/player.configurator.preview.html\n// module id = 1480\n// module chunks = 1","module.exports = \":host {\\n  display: block;\\n  padding: 20px 10px;\\n  overflow: hidden;\\n  margin: auto;\\n  /** HEAD */\\n  /** BODY */\\n  /** FOOT */ }\\n  :host .player-panel-head {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    height: 100px;\\n    overflow: hidden;\\n    padding: 20px;\\n    background: #eeeeee; }\\n  :host .player-panel-head .configuration-name {\\n      width: 50%;\\n      margin: 0; }\\n  :host .player-panel-head .configuration-name label {\\n        color: inherit;\\n        width: 100%;\\n        margin-top: 0.5em;\\n        font-weight: 200; }\\n  :host .player-panel-head .configuration-name input {\\n        margin: 0 0 10px;\\n        color: inherit; }\\n  :host .player-panel-head .configuration-buttons {\\n      float: right;\\n      width: 50%;\\n      text-align: right; }\\n  :host .player-panel-head .configuration-buttons button {\\n        padding: 10px 20px;\\n        font-size: 1.4rem;\\n        margin: 10px 0;\\n        color: white; }\\n  :host .player-panel-body {\\n    position: absolute;\\n    top: 0;\\n    left: 0;\\n    right: 0;\\n    bottom: 0;\\n    padding: 10px;\\n    overflow: hidden;\\n    background: #eeeeee; }\\n  :host .player-panel-foot {\\n    position: absolute;\\n    bottom: 0;\\n    left: 0;\\n    right: 0;\\n    padding: 20px;\\n    background: #eeeeee; }\\n  :host .player-panel-foot .player-state {\\n      margin-top: 5px;\\n      position: relative;\\n      margin-right: 64px; }\\n  :host .player-panel-foot .player-state span {\\n        padding: 15px 0;\\n        float: left;\\n        text-align: center;\\n        cursor: pointer;\\n        background: #FFF;\\n        border: 1px solid #FFF;\\n        opacity: 0.5; }\\n  :host .player-panel-foot .player-state span:hover {\\n          opacity: 0.75; }\\n  :host .player-panel-foot .player-state span.active {\\n          opacity: 1; }\\n  :host .player-panel-foot .player-state span:nth-child(1) {\\n          width: 25%;\\n          border-right-color: #888; }\\n  :host .player-panel-foot .player-state span:nth-child(2) {\\n          width: 50%;\\n          border-right-color: #888;\\n          border-left-color: #888; }\\n  :host .player-panel-foot .player-state span:nth-child(3) {\\n          width: 25%;\\n          border-left-color: #888; }\\n  :host .player-panel-foot .player-state span i {\\n          color: #333;\\n          font-weight: bold; }\\n  :host .player-panel-foot .player-state span small {\\n          color: #666; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/preview/player.configurator.preview.scss\n// module id = 1481\n// module chunks = 1","module.exports = \"<div class=\\\"preview\\\" [class.with-header]=\\\"!isAppInIframe\\\">\\n    <player-configurator-preview></player-configurator-preview>\\n</div>\\n<div class=\\\"form\\\" [class.with-header]=\\\"!isAppInIframe\\\">\\n    <player-configurator-form></player-configurator-form>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/view/player.configurator.view.html\n// module id = 1482\n// module chunks = 1","module.exports = \":host .preview {\\n  position: fixed;\\n  top: 0px;\\n  left: 500px;\\n  right: 0;\\n  bottom: 0;\\n  min-width: 500px; }\\n\\n:host .form {\\n  position: absolute;\\n  top: 0px;\\n  left: 200px;\\n  bottom: 0;\\n  width: 300px;\\n  overflow-x: hidden;\\n  overflow-y: auto;\\n  background: #fefefe; }\\n\\n:host .form::-webkit-scrollbar {\\n    width: 8px;\\n    height: 8px;\\n    background: none; }\\n\\n:host .form::-webkit-scrollbar-track {\\n    -webkit-box-shadow: none;\\n            box-shadow: none;\\n    background: #EEEEEE; }\\n\\n:host .form::-webkit-scrollbar-thumb:window-inactive {\\n    background: #DDDDDD; }\\n\\n:host .form::-webkit-scrollbar-thumb {\\n    background: #CCCCCC; }\\n\\n:host .preview.with-header, :host .form.with-header {\\n  top: 56px; }\\n\\n@media (min-width: 1201px) {\\n  :host .preview {\\n    left: 600px; }\\n  :host .form {\\n    width: 400px; } }\\n\\n@media (min-width: 1401px) {\\n  :host .preview {\\n    left: 700px; }\\n  :host .form {\\n    width: 500px; } }\\n\\n@media (min-width: 1601px) {\\n  :host .preview {\\n    left: 800px; }\\n  :host .form {\\n    width: 600px; } }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/legacy/configurator/component/view/player.configurator.view.scss\n// module id = 1483\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">\\n\\t{{ 'PLAYER.LIST.LABEL' | translate : lang }}\\n\\t<small>{{ 'PLAYER.LIST.TOTAL_COUNT' | translate : lang }}:&nbsp;{{ count }}</small>\\n\\n\\t<a class=\\\"pull-right pull-right btn btn-white\\\" href=\\\"//bradmax.com/static/player-doc\\\" target=\\\"_blank\\\"><i class=\\\"fa fa-book\\\"></i> {{ 'PLAYER.LIST.SEE_DOCS' | translate : lang }}</a>\\n</h1>\\n<div class=\\\"config-btns\\\">\\n\\t<button type=\\\"button\\\" class=\\\"btn btn-md btn-bradmax\\\" (click)=\\\"askNew()\\\">\\n\\t\\t<i class=\\\"fa fa-plus\\\"></i>&nbsp;{{ 'PLAYER.LIST.BUTTON.ADD' | translate : lang }}\\n\\t</button>\\n\\t<button *ngIf=\\\"isAnyItemSelected && selectedItemCount == 1\\\" type=\\\"button\\\" class=\\\"btn btn-md btn-info\\\" (click)=\\\"askClone()\\\">\\n\\t\\t<i class=\\\"fa fa-files-o\\\"></i>&nbsp;{{ 'PLAYER.LIST.BUTTON.CLONE' | translate : lang }}\\n\\t</button>\\n\\t<button *ngIf=\\\"isAnyItemSelected\\\" type=\\\"button\\\" class=\\\"btn btn-md btn-danger\\\" (click)=\\\"askDelete()\\\">\\n\\t\\t<i class=\\\"fa fa-trash\\\"></i>&nbsp;{{ 'PLAYER.LIST.BUTTON.DELETE' | translate : lang }}\\n\\t</button>\\n</div>\\n<div class=\\\"list-container\\\">\\n\\t<div *ngIf=\\\"isAnyItemSelected\\\" class=\\\"config-info\\\">\\n\\t\\t<p class=\\\"pull-left m-r-15\\\">{{ 'PLAYER.LIST.SELECTED_COUNT' | translate : lang }}: {{ selectedItemCount }}</p>\\n\\t\\t<!-- <a class=\\\"pull-right m-r-15\\\" href=\\\"//bradmax.com/static/player-doc\\\" target=\\\"_blank\\\"><i class=\\\"fa fa-book\\\"></i> {{ 'PLAYER.LIST.SEE_DOCS' | translate : lang }}</a> -->\\n\\t</div>\\n\\t<div class=\\\"container config-list\\\">\\n\\t\\t<div class=\\\"row config-list-header\\\" *ngIf=\\\"model && model.length > 0\\\">\\n\\t\\t\\t<span [ngClass]=\\\"cellClass.name\\\">{{ 'PLAYER.LIST.COLUMN.NAME' | translate : lang }}</span>\\n\\t\\t\\t<a (click)=\\\"sort('updated_at')\\\" [ngClass]=\\\"cellClass.updated\\\">\\n\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [ngClass]=\\\"formatSortIconObject('updated_at')\\\"></i>\\n\\t\\t\\t\\t<span>&nbsp;{{ 'PLAYER.LIST.COLUMN.UPDATED_AT' | translate : lang }}</span>\\n\\t\\t\\t</a>\\n\\t\\t\\t<a (click)=\\\"sort('created_at')\\\" [ngClass]=\\\"cellClass.created\\\">\\n\\t\\t\\t\\t<i class=\\\"fa fa-fw\\\" [ngClass]=\\\"formatSortIconObject('created_at')\\\"></i>\\n\\t\\t\\t\\t<span>&nbsp;{{ 'PLAYER.LIST.COLUMN.CREATED_AT' | translate : lang }}</span>\\n\\t\\t\\t</a>\\n\\t\\t\\t<span [ngClass]=\\\"cellClass.buttons\\\" class=\\\"hidden-sm hidden-xs\\\">&nbsp;</span>\\n\\t\\t</div>\\n\\t\\t<div *ngFor=\\\"let item of model;let i = index;let even = even; let odd = odd\\\" class=\\\"row config-item\\\" [ngClass]=\\\"{ odd: odd, even: even, selected: item.selected }\\\">\\n\\t\\t\\t<span [ngClass]=\\\"cellClass.name\\\">\\n\\t\\t\\t\\t<span [attr.title]=\\\"'select: ' + item.name\\\" (click)=\\\"onItemClickSelect(item, $event)\\\">\\n\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-square-o]=\\\"!item.selected\\\" [class.fa-check-square-o]=\\\"item.selected\\\"></i>\\n\\t\\t\\t\\t</span>\\n\\t\\t\\t\\t<span class=\\\"clickable\\\" [attr.title]=\\\"'edit: ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\">\\n\\t\\t\\t\\t\\t<strong>{{ item.name }}</strong>\\n\\t\\t\\t\\t</span>\\n\\t\\t\\t</span>\\n\\t\\t\\t<span class=\\\"clickable\\\" [attr.title]=\\\"'edit: ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\" [ngClass]=\\\"cellClass.updated\\\">\\n\\t\\t\\t\\t<i>{{ formatDate(item.updated_at) }}</i>\\n\\t\\t\\t</span>\\n\\t\\t\\t<span class=\\\"clickable\\\" [attr.title]=\\\"'edit: ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\" [ngClass]=\\\"cellClass.created\\\">\\n\\t\\t\\t\\t<i>{{ formatDate(item.created_at) }}</i>\\n\\t\\t\\t</span>\\n\\t\\t\\t<!-- buttons -->\\n\\t\\t\\t<span [ngClass]=\\\"cellClass.buttons\\\">\\n\\t\\t\\t\\t<!-- v2 -->\\n\\t\\t\\t\\t<ng-container *ngIf=\\\"isV2(item); else buttonsV1;\\\">\\n\\t\\t\\t\\t\\t<a class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'edit player ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-edit\\\"></i>\\n\\t\\t\\t\\t\\t\\t<span>&nbsp;{{ 'PLAYER.LIST.BUTTON.EDIT' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"item.latest_webbuild?.player_js_url\\\">\\n\\t\\t\\t\\t\\t\\t<a class=\\\"btn btn-sm btn-white\\\"\\n\\t\\t\\t\\t\\t\\t\\t [download-player-js]=\\\"item.latest_webbuild.player_js_url\\\"\\n\\t\\t\\t\\t\\t\\t\\t [attr.download]=\\\"'bradmax_player.js'\\\"\\n\\t\\t\\t\\t\\t\\t\\t [attr.title]=\\\"'get js file for: ' + item.name\\\"\\n\\t\\t\\t\\t\\t\\t\\t type=\\\"text/javascript\\\" target=\\\"_blank\\\" rel=\\\"noopener\\\"\\n\\t\\t\\t\\t\\t\\t\\t #dpjv2=\\\"downloadPlayerJsV2\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-download]=\\\"!dpjv2.working\\\" [class.fa-spinner]=\\\"!!dpjv2.working\\\" [class.rotation]=\\\"!!dpjv2.working\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>&nbsp;download player js</span>\\n\\t\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t\\t<a type=\\\"button\\\" class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'get embed code for: ' + item.name\\\"\\n\\t\\t\\t\\t\\t\\t\\t [routerLink]=\\\"['/', 'admin', 'player', item.id, 'embedcode']\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-code\\\"></i><span>&nbsp;{{ 'PLAYER.LIST.BUTTON.GO_EMBEDER' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t<!-- v1 -->\\n\\t\\t\\t\\t<ng-template #buttonsV1>\\n\\t\\t\\t\\t\\t<a class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'edit player ' + item.name\\\" (click)=\\\"gotoConfigurator(item.id, $event)\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-edit\\\"></i>\\n\\t\\t\\t\\t\\t\\t<span>&nbsp;{{ 'PLAYER.LIST.BUTTON.EDIT' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t<a type=\\\"button\\\" class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'download: ' + item.name\\\" *ngIf=\\\"item.latest_webbuild?.zip_url\\\"\\n\\t\\t\\t\\t\\t\\t href=\\\"{{ item.latest_webbuild?.zip_url }}\\\" target=\\\"_blank\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-file-archive-o\\\"></i><span>&nbsp;{{ 'PLAYER.LIST.BUTTON.GET_ZIP' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t<a type=\\\"button\\\" class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'get embed code for: ' + item.name\\\" *ngIf=\\\"item.latest_webbuild?.zip_url\\\" (click)=\\\"setUpEmbeder(item)\\\" [routerLink]=\\\"['/', 'admin', 'player', item.id, 'embed-code']\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-code\\\"></i><span>&nbsp;{{ 'PLAYER.LIST.BUTTON.GO_EMBEDER' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t\\t<a type=\\\"button\\\" class=\\\"btn btn-sm btn-white\\\" [attr.title]=\\\"'see versions of: ' + item.name\\\" [routerLink]=\\\"['/', 'admin', 'player', item.id, 'versions']\\\">\\n\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-eye\\\"></i><span>&nbsp;{{ 'PLAYER.LIST.BUTTON.SEE_VER' | translate : lang }}</span>\\n\\t\\t\\t\\t\\t</a>\\n\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t</span>\\n\\t\\t</div>\\n\\t</div>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/list/component/player.list.view.component.html\n// module id = 1484\n// module chunks = 1","module.exports = \"@-webkit-keyframes fa-spinner-rotate-animation {\\n  0% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg); }\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n            transform: rotate(360deg); } }\\n\\n@keyframes fa-spinner-rotate-animation {\\n  0% {\\n    -webkit-transform: rotate(0deg);\\n            transform: rotate(0deg); }\\n  100% {\\n    -webkit-transform: rotate(360deg);\\n            transform: rotate(360deg); } }\\n\\n:host .fa-spinner.rotation {\\n  -webkit-animation: fa-spinner-rotate-animation 0.7s infinite steps(8);\\n          animation: fa-spinner-rotate-animation 0.7s infinite steps(8);\\n  -webkit-transform: translateZ(0);\\n          transform: translateZ(0);\\n  -webkit-transform-origin: 50% 50%;\\n          transform-origin: 50% 50%; }\\n\\n:host .list-container {\\n  padding: 10px;\\n  border-radius: 5px; }\\n\\n:host .config-btns {\\n  margin-bottom: 15px; }\\n\\n:host .config-btns .btn {\\n    margin: 2px; }\\n\\n:host .config-info {\\n  width: 100%;\\n  height: 20px; }\\n\\n:host .config-list {\\n  display: inline-block;\\n  font-size: 0;\\n  padding: 0;\\n  width: 100%;\\n  height: auto; }\\n\\n:host .config-list .config-list-header, :host .config-list .config-item {\\n    display: inline-block;\\n    width: inherit;\\n    margin: 0;\\n    padding: 0;\\n    color: inherit;\\n    text-decoration: none;\\n    -webkit-box-shadow: none;\\n            box-shadow: none; }\\n\\n:host .config-list .config-list-header::after, :host .config-list .config-list-header::before, :host .config-list .config-item::after, :host .config-list .config-item::before {\\n      display: none;\\n      content: ''; }\\n\\n:host .config-list .config-list-header .cell, :host .config-list .config-item .cell {\\n      display: inline-block;\\n      white-space: nowrap; }\\n\\n:host .config-list .config-list-header .cell.cell-name, :host .config-list .config-item .cell.cell-name {\\n        text-align: left;\\n        padding-left: 32px;\\n        overflow: hidden; }\\n\\n:host .config-list .config-list-header .cell.cell-created, :host .config-list .config-item .cell.cell-created {\\n        text-align: center;\\n        font-size: 0.9em; }\\n\\n:host .config-list .config-list-header .cell.cell-updated, :host .config-list .config-item .cell.cell-updated {\\n        text-align: center;\\n        font-size: 0.9em; }\\n\\n:host .config-list .config-list-header .cell.cell-buttons, :host .config-list .config-item .cell.cell-buttons {\\n        text-align: right; }\\n\\n@media (max-width: 640px) {\\n          :host .config-list .config-list-header .cell.cell-buttons span, :host .config-list .config-item .cell.cell-buttons span {\\n            display: none; } }\\n\\n:host .config-list .config-list-header .cell.small-line, :host .config-list .config-item .cell.small-line {\\n        line-height: 15px; }\\n\\n:host .config-list .config-list-header {\\n    font-size: 12px; }\\n\\n:host .config-list .config-list-header .cell {\\n      vertical-align: bottom; }\\n\\n:host .config-list .config-list-header .cell-updated, :host .config-list .config-list-header .cell-created {\\n      cursor: pointer;\\n      color: inherit;\\n      text-decoration: none; }\\n\\n:host .config-list .config-list-header .cell-updated i, :host .config-list .config-list-header .cell-created i {\\n        opacity: 0.25; }\\n\\n:host .config-list .config-list-header .cell-updated i.active, :host .config-list .config-list-header .cell-created i.active {\\n          opacity: 1; }\\n\\n:host .config-list .config-item {\\n    position: relative;\\n    padding: 0 0;\\n    font-size: 14px;\\n    border-top: 2px solid white; }\\n\\n:host .config-list .config-item .cell {\\n      vertical-align: middle;\\n      height: 38px;\\n      line-height: 38px;\\n      padding-right: 0; }\\n\\n:host .config-list .config-item .cell.cell-name {\\n        position: relative;\\n        color: #335eea; }\\n\\n:host .config-list .config-item .cell.cell-name i.fa {\\n          cursor: pointer;\\n          position: absolute;\\n          left: 10px;\\n          top: 12px;\\n          opacity: 0.24; }\\n\\n:host .config-list .config-item .cell.cell-buttons {\\n        display: -webkit-box;\\n        display: -ms-flexbox;\\n        display: flex;\\n        -webkit-box-orient: horizontal;\\n        -webkit-box-direction: normal;\\n            -ms-flex-direction: row;\\n                flex-direction: row;\\n        -ms-flex-line-pack: center;\\n            align-content: center;\\n        -webkit-box-align: center;\\n            -ms-flex-align: center;\\n                align-items: center;\\n        -webkit-box-pack: end;\\n            -ms-flex-pack: end;\\n                justify-content: flex-end; }\\n\\n:host .config-list .config-item .cell.cell-buttons .btn {\\n          margin-left: 0.25em;\\n          margin-right: 0.25em; }\\n\\n:host .config-list .config-item .cell.cell-buttons .btn:first-child {\\n            margin-left: 0; }\\n\\n:host .config-list .config-item .cell.cell-buttons .btn:last-child {\\n            margin-right: 0; }\\n\\n:host .config-list .config-item .clickable {\\n      cursor: pointer;\\n      background: transparent;\\n      display: block; }\\n\\n:host .config-list .config-item:last-of-type {\\n      border-bottom: 2px solid white; }\\n\\n:host .config-list .config-item:hover, :host .config-list .config-item:focus, :host .config-list .config-item:active {\\n      color: inherit;\\n      text-decoration: none;\\n      -webkit-box-shadow: none;\\n              box-shadow: none; }\\n\\n:host .config-list .config-item:hover {\\n      background: #EEE; }\\n\\n:host .config-list .config-item.selected {\\n      background: #DDD; }\\n\\n:host .config-list .config-item.selected .cell-name i.fa {\\n        opacity: 1; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/list/component/player.list.view.component.scss\n// module id = 1485\n// module chunks = 1","module.exports = \"<!-- <h4> {{'PLAYER.LIST.LABEL' | translate : lang}} </h4> -->\\n<h4> <i class=\\\"fa fa-history\\\"></i>&nbsp;Build versions history</h4>\\n<div class=\\\"versions-container\\\">\\n\\t<h5 class=\\\"empty-message\\\" *ngIf=\\\"model.length <= 0\\\">{{'PLAYER.VERSIONS.MESSAGE.EMPTY' | translate:lang}}</h5>\\n\\t<ul class=\\\"timeline\\\" *ngIf=\\\"model.length > 0\\\">\\n\\t\\t<li *ngFor=\\\"let build of model;\\\" [class.active]=\\\"build.active\\\">\\n\\t\\t\\t<div class=\\\"timeline-time\\\">\\n\\t\\t\\t\\t<span class=\\\"date\\\">{{formatDate(build.created_at)}}</span>\\n\\t\\t\\t\\t<span class=\\\"time\\\">{{formatTime(build.created_at)}}</span>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"timeline-icon\\\">\\n\\t\\t\\t\\t<a href=\\\"javascript:;\\\" style=\\\"cursor:default;\\\" [attr.title]=\\\"formatAttr(build)\\\">\\n\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [ngClass]=\\\"{'fa-chevron-right':!build.active,'fa-check':build.active}\\\"></i>\\n\\t\\t\\t\\t</a>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div class=\\\"timeline-body\\\">\\n\\t\\t\\t\\t<div class=\\\"timeline-content\\\">\\n\\t\\t\\t\\t\\t<p>Player version: {{build.version}}<br />Player commit id: {{build.commit_id}}</p>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"timeline-footer\\\">\\n\\t\\t\\t\\t\\t<span><i class=\\\"fa fa-calendar\\\"></i> {{formatDaysAgo(build.created_at)}}</span>\\n\\t\\t\\t\\t\\t<div class=\\\"btn-group pull-right\\\">\\n\\t\\t\\t\\t\\t\\t<a href=\\\"//bradmax.com/static/player-doc\\\" target=\\\"_blank\\\"><i class=\\\"fa fa-book\\\"></i>&nbsp;{{'PLAYER.VERSIONS.LINK.DOC' | translate:lang}}</a>\\n\\t\\t\\t\\t\\t\\t<a href=\\\"{{build.zip_url}}\\\" target=\\\"_blank\\\" class=\\\"m-l-15\\\"><i class=\\\"fa fa-file-archive-o\\\"></i>&nbsp;{{'PLAYER.VERSIONS.LINK.ZIP' | translate:lang}}</a>\\n\\t\\t\\t\\t\\t\\t<a *ngIf=\\\"build.active\\\" [routerLink]=\\\"EMBED_CODE_LINK\\\" class=\\\"m-l-15\\\"><i class=\\\"fa fa-code\\\"></i>&nbsp;{{'PLAYER.VERSIONS.LINK.EMBED' | translate:lang}}</a>\\n\\t\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</li>\\n\\t\\t<li>\\n\\t\\t\\t<div class=\\\"timeline-icon\\\">\\n\\t\\t\\t\\t<a href=\\\"javascript:;\\\"><i class=\\\"fa fa-chevron-up\\\"></i></a>\\n\\t\\t\\t</div>\\n\\t\\t</li>\\n\\t</ul>\\n</div>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/versions/component/player.versions.view.component.html\n// module id = 1486\n// module chunks = 1","module.exports = \":host .versions-container {\\n  padding: 10px;\\n  background: #fff;\\n  border-radius: 5px; }\\n\\n:host .timeline:before {\\n  content: '';\\n  position: absolute;\\n  top: 54px;\\n  bottom: 44px;\\n  width: 5px;\\n  left: 20%;\\n  margin-left: -2.5px;\\n  background: #c8c8c8; }\\n\\n:host .timeline li .timeline-time {\\n  padding-top: 1.7rem; }\\n\\n:host .timeline li .timeline-time .date {\\n    line-height: 1.55rem;\\n    font-size: 1.5rem;\\n    color: #212121; }\\n\\n:host .timeline li .timeline-time .time {\\n    line-height: 1.15rem;\\n    font-size: 1.1rem;\\n    color: #212121; }\\n\\n:host .timeline li .timeline-icon a {\\n  background-color: #c8c8c8;\\n  border-color: #c8c8c8; }\\n\\n:host .timeline li .timeline-body {\\n  border: 1px solid transparent;\\n  border-color: #c8c8c8;\\n  color: #212121; }\\n\\n:host .timeline li .timeline-body:before {\\n    border-right-color: #c8c8c8; }\\n\\n:host .timeline li .timeline-body .timeline-footer {\\n    background: #c8c8c8; }\\n\\n:host .timeline li .timeline-body .timeline-footer, :host .timeline li .timeline-body .timeline-footer a {\\n      color: #212121; }\\n\\n:host .timeline li.active:before {\\n  content: '';\\n  position: absolute;\\n  top: 54px;\\n  bottom: 44px;\\n  width: 5px;\\n  left: 20%;\\n  margin-left: -2.5px;\\n  background: #c8c8c8; }\\n\\n:host .timeline li.active:before {\\n  background: #c8c8c8;\\n  background: -webkit-gradient(linear, left bottom, left top, from(#c8c8c8), color-stop(75%, #335eea));\\n  background: linear-gradient(to top, #c8c8c8 0%, #335eea 75%); }\\n\\n:host .timeline li.active .timeline-time .date {\\n  color: #335eea; }\\n\\n:host .timeline li.active .timeline-time .time {\\n  color: #335eea; }\\n\\n:host .timeline li.active .timeline-icon a {\\n  background-color: #335eea;\\n  border-color: #335eea; }\\n\\n:host .timeline li.active .timeline-body {\\n  border-color: #335eea; }\\n\\n:host .timeline li.active .timeline-body:before {\\n    border-right-color: #335eea; }\\n\\n:host .timeline li.active .timeline-body .timeline-footer {\\n    background: #335eea; }\\n\\n:host .timeline li.active .timeline-body .timeline-footer, :host .timeline li.active .timeline-body .timeline-footer a {\\n      color: #fcfcfc; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/player/modules/versions/component/player.versions.view.component.scss\n// module id = 1487\n// module chunks = 1","import { AfterViewInit, ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ActivatedRoute } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { FlashMessagesService } from 'angular2-flash-messages';\n\nimport { AccountResponse, Product, ProductPlan } from '../../../model/api.model';\nimport { AccountService } from '../../../service/account.service';\nimport { BuyCookieService } from '../../../service/buyCookie.service';\nimport { SubscriptionService } from '../../../service/subscription.service';\nimport { UserService } from '../../../service/user.service';\nimport { ViewService } from '../../../service/view.service';\nimport { ModalService } from './../../modal/modal.service';\n\n@Component({\n\tselector: 'products-view',\n\ttemplate: require('./products.view.component.html'),\n\tstyles: [require('./products.view.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductsView extends Localization implements OnInit, AfterViewInit {\n\tproducts: Product[];\n\taccountProductsIds: Object;\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate router: Router,\n\t\tprivate user: UserService,\n\t\tprivate accountService: AccountService,\n\t\tprivate view: ViewService,\n\t\tprivate flashMessagesService: FlashMessagesService,\n\t\tprivate subscriptionService: SubscriptionService,\n\t\tprivate modal: ModalService,\n\t\tprivate buyCookie: BuyCookieService) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit() {\n\t\tthis.route.data.subscribe(d => {\n\t\t\tthis.products = d.products.results;\n\t\t\tthis.accountProductsIds = {};\n\t\t\tfor (let ap of d.accountProducts.results)\n\t\t\t\tthis.accountProductsIds[ap.product_plan.id] = true;\n\n\t\t\t// Preselect product plan if product plan id stored in cookie.\n\t\t\tlet buyCookiePlan = this.buyCookie.read();\n\t\t\tif (buyCookiePlan != null) {\n\t\t\t\t// Find product id by plan id.\n\t\t\t\tlet buyCookieProdId = null;\n\t\t\t\tfor (let p of this.products) {\n\t\t\t\t\tfor(let pp of p.plans) {\n\t\t\t\t\t\tif(pp.id == buyCookiePlan) {\n\t\t\t\t\t\t\tbuyCookieProdId = p.id;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.onPlanSelect(buyCookieProdId, buyCookiePlan);\n\t\t\t}\n\t\t});\n\t}\n\n\tngAfterViewInit() {\n\t\tvar itemsSet: any = $('.panel-body.products [rel=\"tooltip\"]');\n\t\titemsSet.tooltip();\n\t}\n\n\tisPlanSelectedForAccount(planId: number): boolean {\n\t\treturn (planId in this.accountProductsIds);\n\t}\n\n\tonPlanSelect(productId: number, planId: number): void {\n\t\tfor (let prod of this.products) {\n\t\t\tif (prod.id == productId) {\n\t\t\t\tfor (let plan of prod.plans) {\n\t\t\t\t\tif (plan.id === planId) {\n\t\t\t\t\t\tthis.checkPlan(plan);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tonPlanContact(planId: number): void {\n\t\t// @HARD FIX: replacing embed contact form with from web page. \n\t\twindow.open('https://www.bradmax.com/site/en/#contact', '_blank');\n\t}\n\n\tprivate checkPlan(plan: ProductPlan) {\n\t\tif (plan.is_contact_required) {\n\t\t\tthis.onPlanContact(plan.id);\n\t\t\treturn;\n\t\t}\n\t\tthis.accountService.get(this.user.accountId).subscribe(\n\t\t\tr => this.checkAccount(r, plan),\n\t\t\te => this.handleError());\n\t}\n\n\tprivate checkAccount(a: AccountResponse, plan: ProductPlan) {\n\t\tif (a.details && a.details.company_name && this.user.accountId) {\n\t\t\tthis.subscriptionService.getSubscriptionOrders(this.user.accountId).subscribe(d => {\n\t\t\t\tlet subscriptionOrderId: number = null;\n\t\t\t\tif (d.count > 0) {\n\t\t\t\t\tfor (let item of d.results) {\n\t\t\t\t\t\tif (item.product_plan === plan.id) {\n\t\t\t\t\t\t\tsubscriptionOrderId = item.id;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//If an SubscriptionOrder for this account+plan already exists, ask the user if he wants to resume\n\t\t\t\tif (subscriptionOrderId !== null)\n\t\t\t\t\tthis.askToReuse(plan, subscriptionOrderId);\n\t\t\t\telse\n\t\t\t\t\tthis.createSubscriptionOrderAction(plan.id);\n\t\t\t}, e => this.handleError());\n\t\t} else\n\t\t\tthis.accountDetailsInvalidAction(plan.id);\n\t}\n\n\tprivate createSubscriptionOrderAction(planId: number) {\n\t\tif (this.user.accountId)\n\t\t\tthis.subscriptionService.createSubscriptionOrder(this.user.accountId, planId).subscribe(\n\t\t\t\td => this.router.navigate(['admin', 'subscription', d.id]),\n\t\t\t\te => this.handleError());\n\t}\n\n\tprivate accountDetailsInvalidAction(planId: number): void {\n\t\tthis.view.spinner(false);\n\t\tthis.modal.prompt(this.translation.translate('PRODUCTS.MESSAGE.ACCOUNT_INVALID'), [\n\t\t\t{\n\t\t\t\tlabel: this.translation.translate('PRODUCTS.BUTTON.YES'), fa: 'check',\n\t\t\t\tclose: true, click: () => this.router.navigate(['admin', 'account', 'details', { plan: planId }])\n\t\t\t}, {\n\t\t\t\tlabel: this.translation.translate('PRODUCTS.BUTTON.CANCEL'), fa: 'times', close: true\n\t\t\t}\n\t\t]);\n\t}\n\n\tprivate askToReuse(plan: ProductPlan, subscriptionOrderId: number) {\n\t\tthis.view.spinner(false);\n\t\tthis.modal.prompt(this.translation.translate('PRODUCTS.MESSAGE.SUBSCRIPTION_REUSE', { name: plan.name }), [\n\t\t\t{\n\t\t\t\tlabel: this.translation.translate('PRODUCTS.BUTTON.CONTINUE'), fa: 'check',\n\t\t\t\tclose: true, click: () => this.router.navigate(['admin', 'subscription', subscriptionOrderId])\n\t\t\t}, {\n\t\t\t\tlabel: this.translation.translate('PRODUCTS.BUTTON.CREATE_NEW'), fa: 'plus',\n\t\t\t\tclose: true, click: () => {\n\t\t\t\t\tif (this.user.accountId)\n\t\t\t\t\t\tthis.subscriptionService.cancelSubscriptionOrder(this.user.accountId, subscriptionOrderId)\n\t\t\t\t\t\t\t.subscribe(\n\t\t\t\t\t\t\tr => { this.buyCookie.erase(); this.createSubscriptionOrderAction(plan.id); },\n\t\t\t\t\t\t\te => this.handleError());\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tlabel: this.translation.translate('PRODUCTS.BUTTON.CANCEL'), fa: 'times',\n\t\t\t\tclose: true, click: () => this.buyCookie.erase()\n\t\t\t}\n\t\t]);\n\t}\n\n\tprivate handleError() {\n\t\tthis.view.spinner(false);\n\t\tthis.flashMessagesService.show(this.translation.translate('PRODUCTS.MESSAGE.DEFAULT_ERROR'),\n\t\t\t{ cssClass: 'alert-warning' });\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/products/view/products.view.component.ts","module.exports = \"<h1 class=\\\"page-header\\\">{{ 'PRODUCTS.TITLE' | translate:lang }}</h1>\\n<div class=\\\"panel-body products\\\">\\n\\t<div *ngFor=\\\"let product of products\\\" class=\\\"row\\\">\\n\\t\\t<!-- item -->\\n\\t\\t<div *ngFor=\\\"let plan of product.plans; let i = index\\\" class=\\\"plan col-12 col-sm-6 col-md-6 col-lg-4\\\">\\n\\t\\t\\t<div class=\\\"panel\\\" [class.selected]=\\\"isPlanSelectedForAccount(plan.id)\\\">\\n\\t\\t\\t\\t<h2 class=\\\"panel-heading text-center\\\"><span>{{ plan.name }}</span></h2>\\n\\t\\t\\t\\t<ul class=\\\"list-group\\\">\\n\\t\\t\\t\\t\\t<!-- base price -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item doubled text-center\\\">\\n\\t\\t\\t\\t\\t\\t<h2>\\n\\t\\t\\t\\t\\t\\t\\t<ng-container *ngIf=\\\"plan.is_contact_required; else pricingAvailable\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t<span>Custom Price</span>&nbsp;<small><i class=\\\"fa fa-info-circle\\\" rel=\\\"tooltip\\\" title=\\\"Please contact with us for getting pricing.\\\"></i></small>\\n\\t\\t\\t\\t\\t\\t\\t</ng-container>\\n\\t\\t\\t\\t\\t\\t\\t<ng-template #pricingAvailable>\\n\\t\\t\\t\\t\\t\\t\\t\\t<span>{{plan.base_price.gross | currency:plan.base_price.currency:true:'1.0-2'}}</span>\\n\\t\\t\\t\\t\\t\\t\\t\\t<small *ngIf=\\\"plan.name=='free'; else byMonth\\\"></small>\\n\\t\\t\\t\\t\\t\\t\\t\\t<ng-template #byMonth><small><i>/ month</i></small></ng-template>\\n\\t\\t\\t\\t\\t\\t\\t</ng-template>\\n\\t\\t\\t\\t\\t\\t</h2>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- formats -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.level <= 1\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Basic player for testing</span>\\n\\t\\t\\t\\t\\t\\t\\t<span>(Web) - for commercial use, no support</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.level > 1\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Player for commercial use</span>\\n\\t\\t\\t\\t\\t\\t\\t<span>(Web, iOS, Android)</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"!plan.sla_info || plan.sla_info == 'none'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-times\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Support (not guaranteed)</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.sla_info && plan.sla_info != 'none'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Support: {{plan.sla_info}}</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- 3rd -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.statistics_type == 'N/A'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-times\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Statistics</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.statistics_type == 'basic'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Basic statistics</span>\\n\\t\\t\\t\\t\\t\\t\\t<span>(audience stats only)</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t\\t<p *ngIf=\\\"plan.statistics_type == 'extended'\\\">\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa fa-check-circle\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Extended statistics</span>\\n\\t\\t\\t\\t\\t\\t\\t<span>(audience, geo, tech, realtime analytics, engagement rate)</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- ads -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-check-circle]=\\\"plan.has_ads_support\\\" [class.fa-times]=\\\"!plan.has_ads_support\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>Ads support</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- drm -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t\\t\\t<i class=\\\"fa\\\" [class.fa-check-circle]=\\\"plan.has_drm_support\\\" [class.fa-times]=\\\"!plan.has_drm_support\\\"></i>\\n\\t\\t\\t\\t\\t\\t\\t<span>DRM support</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- views limit -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"!plan.is_contact_required && plan.id != 1\\\">Views limit &lt; 500 000 / month</span>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"!plan.is_contact_required && plan.id == 1\\\">Views limit &lt; 5 000 / month</span>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"plan.is_contact_required\\\">Views over 500 000 / month</span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t\\t<!-- price / view -->\\n\\t\\t\\t\\t\\t<li class=\\\"list-group-item\\\">\\n\\t\\t\\t\\t\\t\\t<p>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"!plan.is_contact_required && (plan.usage_unit_price.gross > 0)\\\"><strong>{{plan.usage_unit_price.gross | currency:plan.usage_unit_price.currency:true:'1.0-2'}}</strong> extra / {{plan.usage_unit_size}} {{ 'PLAN_CARROUSEL.VIEWS' | translate:lang }}</span>\\n\\t\\t\\t\\t\\t\\t\\t<span *ngIf=\\\"plan.is_contact_required\\\"><strong>Custom features and limits</strong></span>\\n\\t\\t\\t\\t\\t\\t</p>\\n\\t\\t\\t\\t\\t</li>\\n\\t\\t\\t\\t</ul>\\n\\t\\t\\t\\t<div class=\\\"panel-footer\\\">\\n\\t\\t\\t\\t\\t<a *ngIf=\\\"!isPlanSelectedForAccount(plan.id) && !plan.is_contact_required\\\" class=\\\"btn btn-lg btn-block\\\" (click)=\\\"onPlanSelect(product.id,plan.id)\\\">Select</a>\\n\\t\\t\\t\\t\\t<a *ngIf=\\\"!isPlanSelectedForAccount(plan.id) && plan.is_contact_required\\\" class=\\\"btn btn-lg btn-block\\\" (click)=\\\"onPlanContact(product.id,plan.id)\\\">Contact us</a>\\n\\t\\t\\t\\t\\t<a *ngIf=\\\"isPlanSelectedForAccount(plan.id)\\\" class=\\\"btn btn-lg btn-block disabled\\\" disabled=\\\"disabled\\\"><i class=\\\"fa fa-check\\\"></i> Selected</a>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/products/view/products.view.component.html\n// module id = 1489\n// module chunks = 1","module.exports = \":host .products {\\n  margin: 0 auto;\\n  max-width: 1600px; }\\n  :host .products .plan {\\n    padding: 0;\\n    min-height: 625px; }\\n  :host .products .plan .panel {\\n      border: solid 1px #f0f3f5;\\n      margin: 20px !important;\\n      padding: 0 !important; }\\n  :host .products .plan .panel, :host .products .plan .panel * {\\n        -webkit-transition: all .3s ease;\\n        transition: all .3s ease; }\\n  :host .products .plan .panel .panel-heading {\\n        margin: 0;\\n        padding: 20px 10px;\\n        height: 106px;\\n        line-height: 106px;\\n        background: #335eea;\\n        color: #fcfcfc;\\n        text-align: center;\\n        -webkit-box-sizing: content-box;\\n                box-sizing: content-box; }\\n  :host .products .plan .panel .panel-heading span {\\n          display: inline-block;\\n          vertical-align: middle;\\n          line-height: normal; }\\n  :host .products .plan .panel .list-group {\\n        padding: 0; }\\n  :host .products .plan .panel .list-group .list-group-item {\\n          color: #777777;\\n          border-bottom: 1px solid rgba(250, 250, 250, 0.5);\\n          padding: 7px 15px;\\n          margin-bottom: -7px; }\\n  :host .products .plan .panel .list-group .list-group-item:last-child {\\n            border-bottom-right-radius: 0px;\\n            border-bottom-left-radius: 0px; }\\n  :host .products .plan .panel .list-group .list-group-item:first-child {\\n            border-top-right-radius: 0px;\\n            border-top-left-radius: 0px; }\\n  :host .products .plan .panel .list-group .list-group-item.doubled {\\n            padding: 25px 15px;\\n            font-size: 18px;\\n            white-space: nowrap; }\\n  :host .products .plan .panel .list-group .list-group-item p {\\n            position: relative;\\n            display: inline-block;\\n            width: 90%;\\n            margin: 0 10%;\\n            line-height: 2rem;\\n            white-space: nowrap;\\n            overflow: hidden;\\n            text-overflow: ellipsis; }\\n  @media (max-width: 600px) {\\n              :host .products .plan .panel .list-group .list-group-item p {\\n                width: 90%;\\n                margin: 0 5%; } }\\n  @media (min-width: 1200px) and (max-width: 1500px) {\\n              :host .products .plan .panel .list-group .list-group-item p {\\n                width: 90%;\\n                margin: 0 5%; } }\\n  :host .products .plan .panel .list-group .list-group-item p .fa {\\n              position: relative;\\n              top: 1px; }\\n  :host .products .plan .panel .list-group .list-group-item p .fa.fa-check-circle, :host .products .plan .panel .list-group .list-group-item p .fa.fa-times {\\n                font-size: 1.5em; }\\n  :host .products .plan .panel .list-group .list-group-item p .fa.fa-check-circle {\\n                color: green; }\\n  :host .products .plan .panel .list-group .list-group-item p .fa.fa-times {\\n                color: red; }\\n  :host .products .plan .panel .list-group .list-group-item p .fa.fa-info-circle {\\n                margin-left: 5px; }\\n  :host .products .plan .panel .list-group .list-group-item p span {\\n              margin-left: 18px;\\n              display: block; }\\n  :host .products .plan .panel .list-group .list-group-item p span:nth-of-type(1) {\\n              margin-left: 0;\\n              display: inline; }\\n  :host .products .plan .panel .list-group .list-group-item p:after {\\n            content: \\\"\\\";\\n            width: 20px;\\n            height: 100%;\\n            position: absolute;\\n            top: 0;\\n            right: 0;\\n            background: -webkit-gradient(linear, left top, right top, from(rgba(255, 255, 255, 0)), color-stop(56%, white), to(white));\\n            background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, white 56%, white 100%); }\\n  :host .products .plan .panel .panel-footer {\\n        padding: 10px 0 0 0; }\\n  :host .products .plan .panel .panel-footer .btn-block {\\n          border-top-left-radius: 0;\\n          border-top-right-radius: 0;\\n          color: #335eea;\\n          padding: 20px 32px; }\\n  :host .products .plan .panel.selected {\\n        border: solid 1px #335eea; }\\n  :host .products .plan .panel.selected, :host .products .plan .panel:hover {\\n        -webkit-box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.4);\\n                box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.4);\\n        margin: 10px !important;\\n        padding: 10px !important; }\\n  :host .products .plan .panel.selected .panel-heading, :host .products .plan .panel:hover .panel-heading {\\n          margin: -10px -10px 0 -10px; }\\n  :host .products .plan .panel.selected .list-group, :host .products .plan .panel:hover .list-group {\\n          padding: 10px 0 0 0;\\n          margin: 0 -10px 0 -10px; }\\n  :host .products .plan .panel.selected .panel-footer, :host .products .plan .panel:hover .panel-footer {\\n          padding: 20px 0 0 0;\\n          margin: 0 -10px -10px -10px; }\\n  :host .products .plan .panel.selected .panel-footer:hover .btn-block:not([disabled]), :host .products .plan .panel:hover .panel-footer:hover .btn-block:not([disabled]) {\\n            background: #335eea;\\n            color: #fcfcfc;\\n            padding: 20px 32px; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/products/view/products.view.component.scss\n// module id = 1490\n// module chunks = 1","(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}(g.braintree || (g.braintree = {})).dropin = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadStylesheet = exports.loadScript = void 0;\nvar loadScript = require(\"./load-script\");\nexports.loadScript = loadScript;\nvar loadStylesheet = require(\"./load-stylesheet\");\nexports.loadStylesheet = loadStylesheet;\n\n},{\"./load-script\":3,\"./load-stylesheet\":4}],2:[function(require,module,exports){\n\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PromiseGlobal = void 0;\nvar promise_polyfill_1 = __importDefault(require(\"promise-polyfill\"));\nvar PromiseGlobal = \n// eslint-disable-next-line no-undef\ntypeof Promise !== \"undefined\" ? Promise : promise_polyfill_1.default;\nexports.PromiseGlobal = PromiseGlobal;\n\n},{\"promise-polyfill\":191}],3:[function(require,module,exports){\n\"use strict\";\nvar promise_1 = require(\"./lib/promise\");\nvar scriptPromiseCache = {};\nfunction loadScript(options) {\n    var scriptLoadPromise;\n    var stringifiedOptions = JSON.stringify(options);\n    if (!options.forceScriptReload) {\n        scriptLoadPromise = scriptPromiseCache[stringifiedOptions];\n        if (scriptLoadPromise) {\n            return scriptLoadPromise;\n        }\n    }\n    var script = document.createElement(\"script\");\n    var attrs = options.dataAttributes || {};\n    var container = options.container || document.head;\n    script.src = options.src;\n    script.id = options.id || \"\";\n    script.async = true;\n    if (options.crossorigin) {\n        script.setAttribute(\"crossorigin\", \"\" + options.crossorigin);\n    }\n    Object.keys(attrs).forEach(function (key) {\n        script.setAttribute(\"data-\" + key, \"\" + attrs[key]);\n    });\n    scriptLoadPromise = new promise_1.PromiseGlobal(function (resolve, reject) {\n        script.addEventListener(\"load\", function () {\n            resolve(script);\n        });\n        script.addEventListener(\"error\", function () {\n            reject(new Error(options.src + \" failed to load.\"));\n        });\n        script.addEventListener(\"abort\", function () {\n            reject(new Error(options.src + \" has aborted.\"));\n        });\n        container.appendChild(script);\n    });\n    scriptPromiseCache[stringifiedOptions] = scriptLoadPromise;\n    return scriptLoadPromise;\n}\nloadScript.clearCache = function () {\n    scriptPromiseCache = {};\n};\nmodule.exports = loadScript;\n\n},{\"./lib/promise\":2}],4:[function(require,module,exports){\n\"use strict\";\nvar promise_1 = require(\"./lib/promise\");\nmodule.exports = function loadStylesheet(options) {\n    var stylesheet = document.querySelector(\"link[href=\\\"\" + options.href + \"\\\"]\");\n    if (stylesheet) {\n        return promise_1.PromiseGlobal.resolve(stylesheet);\n    }\n    stylesheet = document.createElement(\"link\");\n    var container = options.container || document.head;\n    stylesheet.setAttribute(\"rel\", \"stylesheet\");\n    stylesheet.setAttribute(\"type\", \"text/css\");\n    stylesheet.setAttribute(\"href\", options.href);\n    stylesheet.setAttribute(\"id\", options.id);\n    if (container.firstChild) {\n        container.insertBefore(stylesheet, container.firstChild);\n    }\n    else {\n        container.appendChild(stylesheet);\n    }\n    return promise_1.PromiseGlobal.resolve(stylesheet);\n};\n\n},{\"./lib/promise\":2}],5:[function(require,module,exports){\nmodule.exports = require(\"./dist/load-script\");\n\n},{\"./dist/load-script\":3}],6:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isAndroid(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /Android/i.test(ua);\n};\n\n},{}],7:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isChromeOS(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /CrOS/i.test(ua);\n};\n\n},{}],8:[function(require,module,exports){\n\"use strict\";\nvar isEdge = require(\"./is-edge\");\nvar isSamsung = require(\"./is-samsung\");\nvar isDuckDuckGo = require(\"./is-duckduckgo\");\nvar isOpera = require(\"./is-opera\");\nvar isSilk = require(\"./is-silk\");\nmodule.exports = function isChrome(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ((ua.indexOf(\"Chrome\") !== -1 || ua.indexOf(\"CriOS\") !== -1) &&\n        !isEdge(ua) &&\n        !isSamsung(ua) &&\n        !isDuckDuckGo(ua) &&\n        !isOpera(ua) &&\n        !isSilk(ua));\n};\n\n},{\"./is-duckduckgo\":9,\"./is-edge\":10,\"./is-opera\":22,\"./is-samsung\":23,\"./is-silk\":24}],9:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isDuckDuckGo(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"DuckDuckGo/\") !== -1;\n};\n\n},{}],10:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isEdge(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Edge/\") !== -1;\n};\n\n},{}],11:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isFirefox(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /Firefox/i.test(ua);\n};\n\n},{}],12:[function(require,module,exports){\n\"use strict\";\nvar isIE11 = require(\"./is-ie11\");\nmodule.exports = function isIE(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"MSIE\") !== -1 || isIE11(ua);\n};\n\n},{\"./is-ie11\":14}],13:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIe10(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"MSIE 10\") !== -1;\n};\n\n},{}],14:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIe11(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Trident/7\") !== -1;\n};\n\n},{}],15:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIe9(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"MSIE 9\") !== -1;\n};\n\n},{}],16:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIosFirefox(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /FxiOS/i.test(ua);\n};\n\n},{}],17:[function(require,module,exports){\n\"use strict\";\nvar isIos = require(\"./is-ios\");\nfunction isGoogleSearchApp(ua) {\n    return /\\bGSA\\b/.test(ua);\n}\nmodule.exports = function isIosGoogleSearchApp(ua) {\n    ua = ua || window.navigator.userAgent;\n    return isIos(ua) && isGoogleSearchApp(ua);\n};\n\n},{\"./is-ios\":21}],18:[function(require,module,exports){\n\"use strict\";\nvar isIos = require(\"./is-ios\");\nvar isIosFirefox = require(\"./is-ios-firefox\");\nvar webkitRegexp = /webkit/i;\nfunction isWebkit(ua) {\n    return webkitRegexp.test(ua);\n}\nfunction isIosChrome(ua) {\n    return ua.indexOf(\"CriOS\") > -1;\n}\nfunction isFacebook(ua) {\n    return ua.indexOf(\"FBAN\") > -1;\n}\nmodule.exports = function isIosSafari(ua) {\n    ua = ua || window.navigator.userAgent;\n    return (isIos(ua) &&\n        isWebkit(ua) &&\n        !isIosChrome(ua) &&\n        !isIosFirefox(ua) &&\n        !isFacebook(ua));\n};\n\n},{\"./is-ios\":21,\"./is-ios-firefox\":16}],19:[function(require,module,exports){\n\"use strict\";\nvar isIos = require(\"./is-ios\");\nvar isIosGoogleSearchApp = require(\"./is-ios-google-search-app\");\nmodule.exports = function isIosWebview(ua) {\n    ua = ua || window.navigator.userAgent;\n    if (isIos(ua)) {\n        // The Google Search iOS app is technically a webview and doesn't support popups.\n        if (isIosGoogleSearchApp(ua)) {\n            return true;\n        }\n        // Historically, a webview could be identified by the presence of AppleWebKit and _no_ presence of Safari after.\n        return /.+AppleWebKit(?!.*Safari)/i.test(ua);\n    }\n    return false;\n};\n\n},{\"./is-ios\":21,\"./is-ios-google-search-app\":17}],20:[function(require,module,exports){\n\"use strict\";\nvar isIosWebview = require(\"./is-ios-webview\");\nmodule.exports = function isIosWKWebview(ua, statusBarVisible) {\n    statusBarVisible =\n        typeof statusBarVisible !== \"undefined\"\n            ? statusBarVisible\n            : window.statusbar.visible;\n    return isIosWebview(ua) && statusBarVisible;\n};\n\n},{\"./is-ios-webview\":19}],21:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isIos(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /iPhone|iPod|iPad/i.test(ua);\n};\n\n},{}],22:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isOpera(ua) {\n    ua = ua || window.navigator.userAgent;\n    return (ua.indexOf(\"OPR/\") !== -1 ||\n        ua.indexOf(\"Opera/\") !== -1 ||\n        ua.indexOf(\"OPT/\") !== -1);\n};\n\n},{}],23:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isSamsungBrowser(ua) {\n    ua = ua || window.navigator.userAgent;\n    return /SamsungBrowser/i.test(ua);\n};\n\n},{}],24:[function(require,module,exports){\n\"use strict\";\nmodule.exports = function isSilk(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Silk/\") !== -1;\n};\n\n},{}],25:[function(require,module,exports){\n\"use strict\";\nvar MINIMUM_SUPPORTED_CHROME_IOS_VERSION = 48;\nvar isAndroid = require(\"./is-android\");\nvar isIosFirefox = require(\"./is-ios-firefox\");\nvar isIosWebview = require(\"./is-ios-webview\");\nvar isChrome = require(\"./is-chrome\");\nvar isSamsungBrowser = require(\"./is-samsung\");\nvar isDuckDuckGo = require(\"./is-duckduckgo\");\nfunction isUnsupportedIosChrome(ua) {\n    ua = ua || window.navigator.userAgent;\n    var match = ua.match(/CriOS\\/(\\d+)\\./);\n    if (!match) {\n        return false;\n    }\n    var version = parseInt(match[1], 10);\n    return version < MINIMUM_SUPPORTED_CHROME_IOS_VERSION;\n}\nfunction isOperaMini(ua) {\n    ua = ua || window.navigator.userAgent;\n    return ua.indexOf(\"Opera Mini\") > -1;\n}\nfunction isAndroidWebview(ua) {\n    var androidWebviewRegExp = /Version\\/[\\d.]+/i;\n    ua = ua || window.navigator.userAgent;\n    if (isAndroid(ua)) {\n        return (androidWebviewRegExp.test(ua) && !isOperaMini(ua) && !isDuckDuckGo(ua));\n    }\n    return false;\n}\nfunction isOldSamsungBrowserOrSamsungWebview(ua) {\n    return !isChrome(ua) && !isSamsungBrowser(ua) && /samsung/i.test(ua);\n}\nmodule.exports = function supportsPopups(ua) {\n    ua = ua || window.navigator.userAgent;\n    return !(isIosWebview(ua) ||\n        isIosFirefox(ua) ||\n        isAndroidWebview(ua) ||\n        isOperaMini(ua) ||\n        isUnsupportedIosChrome(ua) ||\n        isOldSamsungBrowserOrSamsungWebview(ua));\n};\n\n},{\"./is-android\":6,\"./is-chrome\":8,\"./is-duckduckgo\":9,\"./is-ios-firefox\":16,\"./is-ios-webview\":19,\"./is-samsung\":23}],26:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-android\");\n\n},{\"./dist/is-android\":6}],27:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-chrome-os\");\n\n},{\"./dist/is-chrome-os\":7}],28:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-chrome\");\n\n},{\"./dist/is-chrome\":8}],29:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-edge\");\n\n},{\"./dist/is-edge\":10}],30:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-firefox\");\n\n},{\"./dist/is-firefox\":11}],31:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ie\");\n\n},{\"./dist/is-ie\":12}],32:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ie10\");\n\n},{\"./dist/is-ie10\":13}],33:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ie9\");\n\n},{\"./dist/is-ie9\":15}],34:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ios-safari\");\n\n},{\"./dist/is-ios-safari\":18}],35:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ios-webview\");\n\n},{\"./dist/is-ios-webview\":19}],36:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ios-wkwebview\");\n\n},{\"./dist/is-ios-wkwebview\":20}],37:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-ios\");\n\n},{\"./dist/is-ios\":21}],38:[function(require,module,exports){\nmodule.exports = require(\"./dist/is-samsung\");\n\n},{\"./dist/is-samsung\":23}],39:[function(require,module,exports){\nmodule.exports = require(\"./dist/supports-popups\");\n\n},{\"./dist/supports-popups\":25}],40:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toggle = exports.remove = exports.add = void 0;\nfunction _classesOf(element) {\n    return element.className.trim().split(/\\s+/);\n}\nfunction add(element) {\n    var toAdd = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        toAdd[_i - 1] = arguments[_i];\n    }\n    element.className = _classesOf(element)\n        .filter(function (classname) { return toAdd.indexOf(classname) === -1; })\n        .concat(toAdd)\n        .join(\" \");\n}\nexports.add = add;\nfunction remove(element) {\n    var toRemove = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        toRemove[_i - 1] = arguments[_i];\n    }\n    element.className = _classesOf(element)\n        .filter(function (classname) { return toRemove.indexOf(classname) === -1; })\n        .join(\" \");\n}\nexports.remove = remove;\nfunction toggle(element, classname, adding) {\n    if (adding) {\n        add(element, classname);\n    }\n    else {\n        remove(element, classname);\n    }\n}\nexports.toggle = toggle;\n\n},{}],41:[function(require,module,exports){\n\"use strict\";\nvar EventEmitter = /** @class */ (function () {\n    function EventEmitter() {\n        this._events = {};\n    }\n    EventEmitter.prototype.on = function (event, callback) {\n        if (this._events[event]) {\n            this._events[event].push(callback);\n        }\n        else {\n            this._events[event] = [callback];\n        }\n    };\n    EventEmitter.prototype.off = function (event, callback) {\n        var eventCallbacks = this._events[event];\n        if (!eventCallbacks) {\n            return;\n        }\n        var indexOfCallback = eventCallbacks.indexOf(callback);\n        eventCallbacks.splice(indexOfCallback, 1);\n    };\n    EventEmitter.prototype._emit = function (event) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        var eventCallbacks = this._events[event];\n        if (!eventCallbacks) {\n            return;\n        }\n        eventCallbacks.forEach(function (callback) {\n            callback.apply(void 0, args);\n        });\n    };\n    EventEmitter.prototype.hasListener = function (event) {\n        var eventCallbacks = this._events[event];\n        if (!eventCallbacks) {\n            return false;\n        }\n        return eventCallbacks.length > 0;\n    };\n    EventEmitter.createChild = function (ChildObject) {\n        ChildObject.prototype = Object.create(EventEmitter.prototype, {\n            constructor: ChildObject,\n        });\n    };\n    return EventEmitter;\n}());\nmodule.exports = EventEmitter;\n\n},{}],42:[function(require,module,exports){\n\"use strict\";\nvar GlobalPromise = (typeof Promise !== \"undefined\"\n    ? Promise // eslint-disable-line no-undef\n    : null);\nvar ExtendedPromise = /** @class */ (function () {\n    function ExtendedPromise(options) {\n        var _this = this;\n        if (typeof options === \"function\") {\n            this._promise = new ExtendedPromise.Promise(options);\n            return;\n        }\n        this._promise = new ExtendedPromise.Promise(function (resolve, reject) {\n            _this._resolveFunction = resolve;\n            _this._rejectFunction = reject;\n        });\n        options = options || {};\n        this._onResolve = options.onResolve || ExtendedPromise.defaultOnResolve;\n        this._onReject = options.onReject || ExtendedPromise.defaultOnReject;\n        if (ExtendedPromise.shouldCatchExceptions(options)) {\n            this._promise.catch(function () {\n                // prevents unhandled promise rejection warning\n                // in the console for extended promises that\n                // that catch the error in an asynchronous manner\n            });\n        }\n        this._resetState();\n    }\n    ExtendedPromise.defaultOnResolve = function (result) {\n        return ExtendedPromise.Promise.resolve(result);\n    };\n    ExtendedPromise.defaultOnReject = function (err) {\n        return ExtendedPromise.Promise.reject(err);\n    };\n    ExtendedPromise.setPromise = function (PromiseClass) {\n        ExtendedPromise.Promise = PromiseClass;\n    };\n    ExtendedPromise.shouldCatchExceptions = function (options) {\n        if (options.hasOwnProperty(\"suppressUnhandledPromiseMessage\")) {\n            return Boolean(options.suppressUnhandledPromiseMessage);\n        }\n        return Boolean(ExtendedPromise.suppressUnhandledPromiseMessage);\n    };\n    // start Promise methods documented in:\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#Methods\n    ExtendedPromise.all = function (args) {\n        return ExtendedPromise.Promise.all(args);\n    };\n    ExtendedPromise.allSettled = function (args) {\n        return ExtendedPromise.Promise.allSettled(args);\n    };\n    ExtendedPromise.race = function (args) {\n        return ExtendedPromise.Promise.race(args);\n    };\n    ExtendedPromise.reject = function (arg) {\n        return ExtendedPromise.Promise.reject(arg);\n    };\n    ExtendedPromise.resolve = function (arg) {\n        return ExtendedPromise.Promise.resolve(arg);\n    };\n    ExtendedPromise.prototype.then = function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return (_a = this._promise).then.apply(_a, args);\n    };\n    ExtendedPromise.prototype.catch = function () {\n        var _a;\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return (_a = this._promise).catch.apply(_a, args);\n    };\n    ExtendedPromise.prototype.resolve = function (arg) {\n        var _this = this;\n        if (this.isFulfilled) {\n            return this;\n        }\n        this._setResolved();\n        ExtendedPromise.Promise.resolve()\n            .then(function () {\n            return _this._onResolve(arg);\n        })\n            .then(function (argForResolveFunction) {\n            _this._resolveFunction(argForResolveFunction);\n        })\n            .catch(function (err) {\n            _this._resetState();\n            _this.reject(err);\n        });\n        return this;\n    };\n    ExtendedPromise.prototype.reject = function (arg) {\n        var _this = this;\n        if (this.isFulfilled) {\n            return this;\n        }\n        this._setRejected();\n        ExtendedPromise.Promise.resolve()\n            .then(function () {\n            return _this._onReject(arg);\n        })\n            .then(function (result) {\n            _this._setResolved();\n            _this._resolveFunction(result);\n        })\n            .catch(function (err) {\n            return _this._rejectFunction(err);\n        });\n        return this;\n    };\n    ExtendedPromise.prototype._resetState = function () {\n        this.isFulfilled = false;\n        this.isResolved = false;\n        this.isRejected = false;\n    };\n    ExtendedPromise.prototype._setResolved = function () {\n        this.isFulfilled = true;\n        this.isResolved = true;\n        this.isRejected = false;\n    };\n    ExtendedPromise.prototype._setRejected = function () {\n        this.isFulfilled = true;\n        this.isResolved = false;\n        this.isRejected = true;\n    };\n    ExtendedPromise.Promise = GlobalPromise;\n    return ExtendedPromise;\n}());\nmodule.exports = ExtendedPromise;\n\n},{}],43:[function(require,module,exports){\n\"use strict\";\nvar set_attributes_1 = require(\"./lib/set-attributes\");\nvar default_attributes_1 = require(\"./lib/default-attributes\");\nvar assign_1 = require(\"./lib/assign\");\nmodule.exports = function createFrame(options) {\n    if (options === void 0) { options = {}; }\n    var iframe = document.createElement(\"iframe\");\n    var config = assign_1.assign({}, default_attributes_1.defaultAttributes, options);\n    if (config.style && typeof config.style !== \"string\") {\n        assign_1.assign(iframe.style, config.style);\n        delete config.style;\n    }\n    set_attributes_1.setAttributes(iframe, config);\n    if (!iframe.getAttribute(\"id\")) {\n        iframe.id = iframe.name;\n    }\n    return iframe;\n};\n\n},{\"./lib/assign\":44,\"./lib/default-attributes\":45,\"./lib/set-attributes\":46}],44:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.assign = void 0;\nfunction assign(\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntarget) {\n    var objs = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        objs[_i - 1] = arguments[_i];\n    }\n    objs.forEach(function (obj) {\n        if (typeof obj !== \"object\") {\n            return;\n        }\n        Object.keys(obj).forEach(function (key) {\n            target[key] = obj[key];\n        });\n    });\n    return target;\n}\nexports.assign = assign;\n\n},{}],45:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultAttributes = void 0;\nexports.defaultAttributes = {\n    src: \"about:blank\",\n    frameBorder: 0,\n    allowtransparency: true,\n    scrolling: \"no\",\n};\n\n},{}],46:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.setAttributes = void 0;\nfunction setAttributes(element, \n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nattributes) {\n    for (var key in attributes) {\n        if (attributes.hasOwnProperty(key)) {\n            var value = attributes[key];\n            if (value == null) {\n                element.removeAttribute(key);\n            }\n            else {\n                element.setAttribute(key, value);\n            }\n        }\n    }\n}\nexports.setAttributes = setAttributes;\n\n},{}],47:[function(require,module,exports){\n'use strict';\n\nfunction uuid() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    var r = Math.random() * 16 | 0;\n    var v = c === 'x' ? r : r & 0x3 | 0x8;\n\n    return v.toString(16);\n  });\n}\n\nmodule.exports = uuid;\n\n},{}],48:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction deferred(fn) {\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        setTimeout(function () {\n            try {\n                fn.apply(void 0, args);\n            }\n            catch (err) {\n                /* eslint-disable no-console */\n                console.log(\"Error in callback function\");\n                console.log(err);\n                /* eslint-enable no-console */\n            }\n        }, 1);\n    };\n}\nexports.deferred = deferred;\n\n},{}],49:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction once(fn) {\n    var called = false;\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        if (!called) {\n            called = true;\n            fn.apply(void 0, args);\n        }\n    };\n}\nexports.once = once;\n\n},{}],50:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* eslint-disable consistent-return */\nfunction promiseOrCallback(promise, callback) {\n    if (!callback) {\n        return promise;\n    }\n    promise.then(function (data) { return callback(null, data); }).catch(function (err) { return callback(err); });\n}\nexports.promiseOrCallback = promiseOrCallback;\n\n},{}],51:[function(require,module,exports){\n\"use strict\";\nvar deferred_1 = require(\"./lib/deferred\");\nvar once_1 = require(\"./lib/once\");\nvar promise_or_callback_1 = require(\"./lib/promise-or-callback\");\nfunction wrapPromise(fn) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        var callback;\n        var lastArg = args[args.length - 1];\n        if (typeof lastArg === \"function\") {\n            callback = args.pop();\n            callback = once_1.once(deferred_1.deferred(callback));\n        }\n        // I know, I know, this looks bad. But it's a quirk of the library that\n        // we need to allow passing the this context to the original function\n        // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n        // @ts-ignore: this has an implicit any\n        return promise_or_callback_1.promiseOrCallback(fn.apply(this, args), callback); // eslint-disable-line no-invalid-this\n    };\n}\nwrapPromise.wrapPrototype = function (target, options) {\n    if (options === void 0) { options = {}; }\n    var ignoreMethods = options.ignoreMethods || [];\n    var includePrivateMethods = options.transformPrivateMethods === true;\n    var methods = Object.getOwnPropertyNames(target.prototype).filter(function (method) {\n        var isNotPrivateMethod;\n        var isNonConstructorFunction = method !== \"constructor\" &&\n            typeof target.prototype[method] === \"function\";\n        var isNotAnIgnoredMethod = ignoreMethods.indexOf(method) === -1;\n        if (includePrivateMethods) {\n            isNotPrivateMethod = true;\n        }\n        else {\n            isNotPrivateMethod = method.charAt(0) !== \"_\";\n        }\n        return (isNonConstructorFunction && isNotPrivateMethod && isNotAnIgnoredMethod);\n    });\n    methods.forEach(function (method) {\n        var original = target.prototype[method];\n        target.prototype[method] = wrapPromise(original);\n    });\n    return target;\n};\nmodule.exports = wrapPromise;\n\n},{\"./lib/deferred\":48,\"./lib/once\":49,\"./lib/promise-or-callback\":50}],52:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar analytics = require(\"../lib/analytics\");\nvar errors = require(\"./errors\");\nvar Promise = require(\"../lib/promise\");\nvar methods = require(\"../lib/methods\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\n/**\n * @typedef {object} ApplePay~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} details Additional details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.cardHolderName The name of the card holder.\n * @property {string} details.dpanLastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `ApplePayCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n */\n\n/**\n * An Apple Pay Payment Authorization Event object.\n * @typedef {object} ApplePayPaymentAuthorizedEvent\n * @external ApplePayPaymentAuthorizedEvent\n * @see {@link https://developer.apple.com/reference/applepayjs/applepaypaymentauthorizedevent ApplePayPaymentAuthorizedEvent}\n */\n\n/**\n * An Apple Pay Payment Request object.\n * @typedef {object} ApplePayPaymentRequest\n * @external ApplePayPaymentRequest\n * @see {@link https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types/paymentrequest PaymentRequest}\n */\n\n/**\n * @class\n * @param {object} options Options\n * @description <strong>You cannot use this constructor directly. Use {@link module:braintree-web/apple-pay.create|braintree.applePay.create} instead.</strong>\n * @classdesc This class represents an Apple Pay component. Instances of this class have methods for validating the merchant server and tokenizing payments.\n */\nfunction ApplePay(options) {\n  this._instantiatedWithClient = Boolean(!options.useDeferredClient);\n  this._client = options.client;\n  this._createPromise = options.createPromise;\n\n  if (this._client) {\n    this._setMerchantIdentifier();\n  }\n}\n\nApplePay.prototype._waitForClient = function () {\n  if (this._client) {\n    return Promise.resolve();\n  }\n\n  return this._createPromise.then(\n    function (client) {\n      this._client = client;\n\n      this._setMerchantIdentifier();\n    }.bind(this)\n  );\n};\n\nApplePay.prototype._setMerchantIdentifier = function () {\n  var applePayConfig =\n    this._client.getConfiguration().gatewayConfiguration.applePayWeb;\n\n  if (!applePayConfig) {\n    return;\n  }\n  /**\n   * @name ApplePay#merchantIdentifier\n   * @description A special merchant ID which represents the merchant association with Braintree. Required when using `ApplePaySession.canMakePaymentsWithActiveCard`.\n   * @example\n   * var promise = ApplePaySession.canMakePaymentsWithActiveCard(applePayInstance.merchantIdentifier);\n   * promise.then(function (canMakePaymentsWithActiveCard) {\n   *   if (canMakePaymentsWithActiveCard) {\n   *     // Set up Apple Pay buttons\n   *   }\n   * });\n   */\n  Object.defineProperty(this, \"merchantIdentifier\", {\n    value: applePayConfig.merchantIdentifier,\n    configurable: false,\n    writable: false,\n  });\n};\n\n/**\n * Merges a payment request with Braintree defaults to return an {external:ApplePayPaymentRequest}.\n *\n * The following properties are assigned to `paymentRequest` if not already defined. Their default values come from the Braintree gateway.\n * - `countryCode`\n * - `currencyCode`\n * - `merchantCapabilities`\n * - `supportedNetworks`\n * @public\n * @param {external:ApplePayPaymentRequest} paymentRequest The payment request details to apply on top of those from Braintree.\n * @returns {external:ApplePayPaymentRequest|Promise} The decorated `paymentRequest` object. If `useDeferredClient` is used along with an `authorization`, this method will return a promise that resolves with the `paymentRequest` object.\n * @example\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({client: clientInstance}, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   var paymentRequest = applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   });\n *\n *   var session = new ApplePaySession(3, paymentRequest);\n *\n *   // ...\n * @example <caption>With deferred client</caption>\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({\n *   authorization: 'client-token-or-tokenization-key',\n *   useDeferredClient: true\n * }, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   }).then(function (paymentRequest) {\n *     var session = new ApplePaySession(3, paymentRequest);\n *\n *     // ...\n *   });\n */\nApplePay.prototype.createPaymentRequest = function (paymentRequest) {\n  if (this._instantiatedWithClient) {\n    return this._createPaymentRequestSynchronously(paymentRequest);\n  }\n\n  return this._waitForClient().then(\n    function () {\n      return this._createPaymentRequestSynchronously(paymentRequest);\n    }.bind(this)\n  );\n};\n\nApplePay.prototype._createPaymentRequestSynchronously = function (\n  paymentRequest\n) {\n  var applePay =\n    this._client.getConfiguration().gatewayConfiguration.applePayWeb;\n  var defaults = {\n    countryCode: applePay.countryCode,\n    currencyCode: applePay.currencyCode,\n    merchantCapabilities: applePay.merchantCapabilities || [\"supports3DS\"],\n    supportedNetworks: applePay.supportedNetworks.map(function (network) {\n      return network === \"mastercard\" ? \"masterCard\" : network;\n    }),\n  };\n\n  return Object.assign({}, defaults, paymentRequest);\n};\n\n/**\n * Validates your merchant website, as required by `ApplePaySession` before payment can be authorized.\n * @public\n * @param {object} options Options\n * @param {string} options.validationURL The validationURL from an `ApplePayValidateMerchantEvent`.\n * @param {string} options.displayName The canonical name for your store. Use a non-localized name. This parameter should be a UTF-8 string that is a maximum of 128 characters. The system may display this name to the user.\n * @param {callback} [callback] The second argument, <code>data</code>, is the Apple Pay merchant session object. If no callback is provided, `performValidation` returns a promise.\n * Pass the merchant session to your Apple Pay session's `completeMerchantValidation` method.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({client: clientInstance}, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   var paymentRequest = applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   });\n *   var session = new ApplePaySession(3, paymentRequest);\n *\n *   session.onvalidatemerchant = function (event) {\n *     applePayInstance.performValidation({\n *       validationURL: event.validationURL,\n *       displayName: 'My Great Store'\n *     }, function (validationErr, validationData) {\n *       if (validationErr) {\n *         console.error(validationErr);\n *         session.abort();\n *         return;\n *       }\n *\n *       session.completeMerchantValidation(validationData);\n *     });\n *   };\n * });\n */\nApplePay.prototype.performValidation = function (options) {\n  var self = this;\n\n  if (!options || !options.validationURL) {\n    return Promise.reject(\n      new BraintreeError(errors.APPLE_PAY_VALIDATION_URL_REQUIRED)\n    );\n  }\n\n  return this._waitForClient()\n    .then(function () {\n      var applePayWebSession = {\n        validationUrl: options.validationURL,\n        domainName: options.domainName || window.location.hostname,\n        merchantIdentifier:\n          options.merchantIdentifier || self.merchantIdentifier,\n      };\n\n      if (options.displayName != null) {\n        applePayWebSession.displayName = options.displayName;\n      }\n\n      return self._client.request({\n        method: \"post\",\n        endpoint: \"apple_pay_web/sessions\",\n        data: {\n          _meta: { source: \"apple-pay\" },\n          applePayWebSession: applePayWebSession,\n        },\n      });\n    })\n    .then(function (response) {\n      analytics.sendEvent(self._client, \"applepay.performValidation.succeeded\");\n\n      return Promise.resolve(response);\n    })\n    .catch(function (err) {\n      analytics.sendEvent(self._client, \"applepay.performValidation.failed\");\n\n      if (err.code === \"CLIENT_REQUEST_ERROR\") {\n        return Promise.reject(\n          new BraintreeError({\n            type: errors.APPLE_PAY_MERCHANT_VALIDATION_FAILED.type,\n            code: errors.APPLE_PAY_MERCHANT_VALIDATION_FAILED.code,\n            message: errors.APPLE_PAY_MERCHANT_VALIDATION_FAILED.message,\n            details: {\n              originalError: err.details.originalError,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.APPLE_PAY_MERCHANT_VALIDATION_NETWORK.type,\n          code: errors.APPLE_PAY_MERCHANT_VALIDATION_NETWORK.code,\n          message: errors.APPLE_PAY_MERCHANT_VALIDATION_NETWORK.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Tokenizes an Apple Pay payment. This will likely be called in your `ApplePaySession`'s `onpaymentauthorized` callback.\n * @public\n * @param {object} options Options\n * @param {object} options.token The `payment.token` property of an {@link external:ApplePayPaymentAuthorizedEvent}.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link ApplePay~tokenizePayload|tokenizePayload}. If no callback is provided, `tokenize` returns a promise that resolves with a {@link ApplePay~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var applePay = require('braintree-web/apple-pay');\n *\n * applePay.create({client: clientInstance}, function (applePayErr, applePayInstance) {\n *   if (applePayErr) {\n *     // Handle error here\n *     return;\n *   }\n *\n *   var paymentRequest = applePayInstance.createPaymentRequest({\n *     total: {\n *       label: 'My Company',\n *       amount: '19.99'\n *     }\n *   });\n *   var session = new ApplePaySession(3, paymentRequest);\n *\n *   session.onpaymentauthorized = function (event) {\n *     applePayInstance.tokenize({\n *       token: event.payment.token\n *     }, function (tokenizeErr, tokenizedPayload) {\n *       if (tokenizeErr) {\n *         session.completePayment(ApplePaySession.STATUS_FAILURE);\n *         return;\n *       }\n *       // Send the tokenizedPayload to your server here!\n *\n *       // Once the transaction is complete, call completePayment\n *       // to close the Apple Pay sheet\n *       session.completePayment(ApplePaySession.STATUS_SUCCESS);\n *     });\n *   };\n *\n *   // ...\n * });\n */\nApplePay.prototype.tokenize = function (options) {\n  var self = this;\n\n  if (!options.token) {\n    return Promise.reject(\n      new BraintreeError(errors.APPLE_PAY_PAYMENT_TOKEN_REQUIRED)\n    );\n  }\n\n  return this._waitForClient()\n    .then(function () {\n      return self._client.request({\n        method: \"post\",\n        endpoint: \"payment_methods/apple_payment_tokens\",\n        data: {\n          _meta: {\n            source: \"apple-pay\",\n          },\n          applePaymentToken: Object.assign({}, options.token, {\n            // The gateway requires this key to be base64-encoded.\n            paymentData: btoa(JSON.stringify(options.token.paymentData)),\n          }),\n        },\n      });\n    })\n    .then(function (response) {\n      analytics.sendEvent(self._client, \"applepay.tokenize.succeeded\");\n\n      return Promise.resolve(response.applePayCards[0]);\n    })\n    .catch(function (err) {\n      analytics.sendEvent(self._client, \"applepay.tokenize.failed\");\n\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.APPLE_PAY_TOKENIZATION.type,\n          code: errors.APPLE_PAY_TOKENIZATION.code,\n          message: errors.APPLE_PAY_TOKENIZATION.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/apple-pay.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * applePayInstance.teardown();\n * @example <caption>With callback</caption>\n * applePayInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nApplePay.prototype.teardown = function () {\n  convertMethodsToError(this, methods(ApplePay.prototype));\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(ApplePay);\n\n},{\"../lib/analytics\":94,\"../lib/braintree-error\":99,\"../lib/convert-methods-to-error\":101,\"../lib/methods\":129,\"../lib/promise\":131,\"./errors\":53,\"@braintree/wrap-promise\":51}],53:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Apple Pay - Creation Error Codes\n * @description Errors that occur when [creating the Apple Pay component](./module-braintree-web_apple-pay.html#.create).\n * @property {MERCHANT} APPLE_PAY_NOT_ENABLED Occurs when the authorization used is not authorized to process Apple Pay.\n */\n\n/**\n * @name BraintreeError.Apple Pay - performValidation Error Codes\n * @description Errors that occur when [validating](./ApplePay.html#performValidation).\n * @property {MERCHANT} APPLE_PAY_VALIDATION_URL_REQUIRED Occurs when the `validationURL` option is not passed in.\n * @property {MERCHANT} APPLE_PAY_MERCHANT_VALIDATION_FAILED Occurs when the website domain has not been registered in the Braintree control panel.\n * @property {NETWORK} APPLE_PAY_MERCHANT_VALIDATION_NETWORK Occurs when an unknown network error occurs.\n */\n\n/**\n * @name BraintreeError.Apple Pay - tokenize Error Codes\n * @description Errors that occur when [tokenizing](./ApplePay.html#tokenize).\n * @property {MERCHANT} APPLE_PAY_PAYMENT_TOKEN_REQUIRED Occurs when the `token` option is not passed in.\n * @property {NETWORK} APPLE_PAY_TOKENIZATION Occurs when an unknown network error occurs.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  APPLE_PAY_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_NOT_ENABLED\",\n    message: \"Apple Pay is not enabled for this merchant.\",\n  },\n  APPLE_PAY_VALIDATION_URL_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_VALIDATION_URL_REQUIRED\",\n    message: \"performValidation must be called with a validationURL.\",\n  },\n  APPLE_PAY_MERCHANT_VALIDATION_NETWORK: {\n    type: BraintreeError.types.NETWORK,\n    code: \"APPLE_PAY_MERCHANT_VALIDATION_NETWORK\",\n    message: \"A network error occurred when validating the Apple Pay merchant.\",\n  },\n  APPLE_PAY_MERCHANT_VALIDATION_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_MERCHANT_VALIDATION_FAILED\",\n    message:\n      \"Make sure you have registered your domain name in the Braintree Control Panel.\",\n  },\n  APPLE_PAY_PAYMENT_TOKEN_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"APPLE_PAY_PAYMENT_TOKEN_REQUIRED\",\n    message: \"tokenize must be called with a payment token.\",\n  },\n  APPLE_PAY_TOKENIZATION: {\n    type: BraintreeError.types.NETWORK,\n    code: \"APPLE_PAY_TOKENIZATION\",\n    message: \"A network error occurred when processing the Apple Pay payment.\",\n  },\n};\n\n},{\"../lib/braintree-error\":99}],54:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @module braintree-web/apple-pay\n * @description Accept Apple Pay on the Web. *This component is currently in beta and is subject to change.*\n */\n\nvar ApplePay = require(\"./apple-pay\");\nvar analytics = require(\"../lib/analytics\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar Promise = require(\"../lib/promise\");\nvar errors = require(\"./errors\");\nvar VERSION = \"3.88.3\";\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.useDeferredClient] Used in conjunction with `authorization`, allows the Apple Pay instance to be available right away by fetching the client configuration in the background. When this option is used, {@link ApplePay#createPaymentRequest} will return a promise that resolves with the configuration instead of returning synchronously.\n * @param {callback} [callback] The second argument, `data`, is the {@link ApplePay} instance. If no callback is provided, `create` returns a promise that resolves with the {@link ApplePay} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Apple Pay\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var applePayInstance;\n      var createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          if (!client.getConfiguration().gatewayConfiguration.applePayWeb) {\n            return Promise.reject(\n              new BraintreeError(errors.APPLE_PAY_NOT_ENABLED)\n            );\n          }\n\n          analytics.sendEvent(client, \"applepay.initialized\");\n\n          return client;\n        });\n\n      options.createPromise = createPromise;\n      applePayInstance = new ApplePay(options);\n\n      if (!options.useDeferredClient) {\n        return createPromise.then(function (client) {\n          applePayInstance._client = client;\n\n          return applePayInstance;\n        });\n      }\n\n      return applePayInstance;\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":94,\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"../lib/promise\":131,\"./apple-pay\":52,\"./errors\":53,\"@braintree/wrap-promise\":51}],55:[function(require,module,exports){\n\"use strict\";\n\nvar isIe = require(\"@braintree/browser-detection/is-ie\");\nvar isIe9 = require(\"@braintree/browser-detection/is-ie9\");\n\nmodule.exports = {\n  isIe: isIe,\n  isIe9: isIe9,\n};\n\n},{\"@braintree/browser-detection/is-ie\":31,\"@braintree/browser-detection/is-ie9\":33}],56:[function(require,module,exports){\n\"use strict\";\n\nvar BRAINTREE_VERSION = require(\"./constants\").BRAINTREE_VERSION;\n\nvar GraphQL = require(\"./request/graphql\");\nvar request = require(\"./request\");\nvar isVerifiedDomain = require(\"../lib/is-verified-domain\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar convertToBraintreeError = require(\"../lib/convert-to-braintree-error\");\nvar getGatewayConfiguration = require(\"./get-configuration\").getConfiguration;\nvar createAuthorizationData = require(\"../lib/create-authorization-data\");\nvar addMetadata = require(\"../lib/add-metadata\");\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar once = require(\"../lib/once\");\nvar deferred = require(\"../lib/deferred\");\nvar assign = require(\"../lib/assign\").assign;\nvar analytics = require(\"../lib/analytics\");\nvar errors = require(\"./errors\");\nvar VERSION = require(\"../lib/constants\").VERSION;\nvar GRAPHQL_URLS = require(\"../lib/constants\").GRAPHQL_URLS;\nvar methods = require(\"../lib/methods\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar assets = require(\"../lib/assets\");\nvar FRAUDNET_FNCLS = require(\"../lib/constants\").FRAUDNET_FNCLS;\nvar FRAUDNET_SOURCE = require(\"../lib/constants\").FRAUDNET_SOURCE;\nvar FRAUDNET_URL = require(\"../lib/constants\").FRAUDNET_URL;\n\nvar cachedClients = {};\n\n/**\n * This object is returned by {@link Client#getConfiguration|getConfiguration}. This information is used extensively by other Braintree modules to properly configure themselves.\n * @typedef {object} Client~configuration\n * @property {object} client The braintree-web/client parameters.\n * @property {string} client.authorization A tokenizationKey or clientToken.\n * @property {object} gatewayConfiguration Gateway-supplied configuration.\n * @property {object} analyticsMetadata Analytics-specific data.\n * @property {string} analyticsMetadata.sessionId Uniquely identifies a browsing session.\n * @property {string} analyticsMetadata.sdkVersion The braintree.js version.\n * @property {string} analyticsMetadata.merchantAppId Identifies the merchant's web app.\n */\n\n/**\n * @class\n * @param {Client~configuration} configuration Options\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/client.create|braintree.client.create} instead.</strong>\n * @classdesc This class is required by many other Braintree components. It serves as the base API layer that communicates with our servers. It is also capable of being used to formulate direct calls to our servers, such as direct credit card tokenization. See {@link Client#request}.\n */\nfunction Client(configuration) {\n  var configurationJSON, gatewayConfiguration;\n\n  configuration = configuration || {};\n\n  configurationJSON = JSON.stringify(configuration);\n  gatewayConfiguration = configuration.gatewayConfiguration;\n\n  if (!gatewayConfiguration) {\n    throw new BraintreeError(errors.CLIENT_MISSING_GATEWAY_CONFIGURATION);\n  }\n\n  [\"assetsUrl\", \"clientApiUrl\", \"configUrl\"].forEach(function (property) {\n    if (\n      property in gatewayConfiguration &&\n      !isVerifiedDomain(gatewayConfiguration[property])\n    ) {\n      throw new BraintreeError({\n        type: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.type,\n        code: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.code,\n        message: property + \" property is on an invalid domain.\",\n      });\n    }\n  });\n\n  /**\n   * Returns a copy of the configuration values.\n   * @public\n   * @returns {Client~configuration} configuration\n   */\n  this.getConfiguration = function () {\n    return JSON.parse(configurationJSON);\n  };\n\n  this._request = request;\n  this._configuration = this.getConfiguration();\n\n  this._clientApiBaseUrl = gatewayConfiguration.clientApiUrl + \"/v1/\";\n\n  if (gatewayConfiguration.graphQL) {\n    if (!isVerifiedDomain(gatewayConfiguration.graphQL.url)) {\n      throw new BraintreeError({\n        type: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.type,\n        code: errors.CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN.code,\n        message: \"graphQL.url property is on an invalid domain.\",\n      });\n    }\n\n    this._graphQL = new GraphQL({\n      graphQL: gatewayConfiguration.graphQL,\n    });\n  }\n}\n\nClient.initialize = function (options) {\n  var clientInstance, authData;\n  var promise = cachedClients[options.authorization];\n\n  if (promise) {\n    analytics.sendEvent(promise, \"custom.client.load.cached\");\n\n    return promise;\n  }\n\n  try {\n    authData = createAuthorizationData(options.authorization);\n  } catch (err) {\n    return Promise.reject(\n      new BraintreeError(errors.CLIENT_INVALID_AUTHORIZATION)\n    );\n  }\n\n  promise = getGatewayConfiguration(authData).then(function (configuration) {\n    if (options.debug) {\n      configuration.isDebug = true;\n    }\n\n    configuration.authorization = options.authorization;\n\n    clientInstance = new Client(configuration);\n\n    return clientInstance;\n  });\n\n  cachedClients[options.authorization] = promise;\n\n  analytics.sendEvent(promise, \"custom.client.load.initialized\");\n\n  return promise\n    .then(function (client) {\n      analytics.sendEvent(clientInstance, \"custom.client.load.succeeded\");\n\n      return client;\n    })\n    .catch(function (err) {\n      delete cachedClients[options.authorization];\n\n      return Promise.reject(err);\n    });\n};\n\n// Primarily used for testing the client initalization call\nClient.clearCache = function () {\n  cachedClients = {};\n};\n\nClient.prototype._findOrCreateFraudnetJSON = function (clientMetadataId) {\n  var el = document.querySelector('script[fncls=\"' + FRAUDNET_FNCLS + '\"]');\n  var config, additionalData, authorizationFingerprint, parameters;\n\n  if (!el) {\n    el = document.body.appendChild(document.createElement(\"script\"));\n    el.type = \"application/json\";\n    el.setAttribute(\"fncls\", FRAUDNET_FNCLS);\n  }\n\n  config = this.getConfiguration();\n  additionalData = {\n    rda_tenant: \"bt_card\", // eslint-disable-line camelcase\n    mid: config.gatewayConfiguration.merchantId,\n  };\n  authorizationFingerprint = config.authorizationFingerprint;\n\n  if (authorizationFingerprint) {\n    authorizationFingerprint.split(\"&\").forEach(function (pieces) {\n      var component = pieces.split(\"=\");\n\n      if (component[0] === \"customer_id\" && component.length > 1) {\n        additionalData.cid = component[1];\n      }\n    });\n  }\n\n  parameters = {\n    f: clientMetadataId.substr(0, 32),\n    fp: additionalData,\n    bu: false,\n    s: FRAUDNET_SOURCE,\n  };\n  el.text = JSON.stringify(parameters);\n};\n\n/**\n * Used by other modules to formulate all network requests to the Braintree gateway. It is also capable of being used directly from your own form to tokenize credit card information. However, be sure to satisfy PCI compliance if you use direct card tokenization.\n * @public\n * @param {object} options Request options:\n * @param {string} options.method HTTP method, e.g. \"get\" or \"post\".\n * @param {string} options.endpoint Endpoint path, e.g. \"payment_methods\".\n * @param {object} options.data Data to send with the request.\n * @param {number} [options.timeout=60000] Set a timeout (in milliseconds) for the request.\n * @param {callback} [callback] The second argument, <code>data</code>, is the returned server data.\n * @example\n * <caption>Direct Credit Card Tokenization</caption>\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   var form = document.getElementById('my-form-id');\n *   var data = {\n *     creditCard: {\n *       number: form['cc-number'].value,\n *       cvv: form['cc-cvv'].value,\n *       expirationDate: form['cc-expiration-date'].value,\n *       billingAddress: {\n *         postalCode: form['cc-postal-code'].value\n *       },\n *       options: {\n *         validate: false\n *       }\n *     }\n *   };\n *\n *   // Warning: For a merchant to be eligible for the easiest level of PCI compliance (SAQ A),\n *   // payment fields cannot be hosted on your checkout page.\n *   // For an alternative to the following, use Hosted Fields.\n *   clientInstance.request({\n *     endpoint: 'payment_methods/credit_cards',\n *     method: 'post',\n *     data: data\n *   }, function (requestErr, response) {\n *     // More detailed example of handling API errors: https://codepen.io/braintree/pen/MbwjdM\n *     if (requestErr) { throw new Error(requestErr); }\n *\n *     console.log('Got nonce:', response.creditCards[0].nonce);\n *   });\n * });\n * @example\n * <caption>Tokenizing Fields for AVS Checks</caption>\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   var form = document.getElementById('my-form-id');\n *   var data = {\n *     creditCard: {\n *       number: form['cc-number'].value,\n *       cvv: form['cc-cvv'].value,\n *       expirationDate: form['cc-date'].value,\n *       // The billing address can be checked with AVS rules.\n *       // See: https://articles.braintreepayments.com/support/guides/fraud-tools/basic/avs-cvv-rules\n *       billingAddress: {\n *         postalCode: form['cc-postal-code'].value,\n *         streetAddress: form['cc-street-address'].value,\n *         countryName: form['cc-country-name'].value,\n *         countryCodeAlpha2: form['cc-country-alpha2'].value,\n *         countryCodeAlpha3: form['cc-country-alpha3'].value,\n *         countryCodeNumeric: form['cc-country-numeric'].value\n *       },\n *       options: {\n *         validate: false\n *       }\n *     }\n *   };\n *\n *   // Warning: For a merchant to be eligible for the easiest level of PCI compliance (SAQ A),\n *   // payment fields cannot be hosted on your checkout page.\n *   // For an alternative to the following, use Hosted Fields.\n *   clientInstance.request({\n *     endpoint: 'payment_methods/credit_cards',\n *     method: 'post',\n *     data: data\n *   }, function (requestErr, response) {\n *     // More detailed example of handling API errors: https://codepen.io/braintree/pen/MbwjdM\n *     if (requestErr) { throw new Error(requestErr); }\n *\n *     console.log('Got nonce:', response.creditCards[0].nonce);\n *   });\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nClient.prototype.request = function (options, callback) {\n  var self = this; // eslint-disable-line no-invalid-this\n  var requestPromise = new Promise(function (resolve, reject) {\n    var optionName, api, baseUrl, requestOptions;\n    var shouldCollectData = Boolean(\n      options.endpoint === \"payment_methods/credit_cards\" &&\n        self.getConfiguration().gatewayConfiguration.creditCards\n          .collectDeviceData\n    );\n\n    if (options.api !== \"graphQLApi\") {\n      if (!options.method) {\n        optionName = \"options.method\";\n      } else if (!options.endpoint) {\n        optionName = \"options.endpoint\";\n      }\n    }\n\n    if (optionName) {\n      throw new BraintreeError({\n        type: errors.CLIENT_OPTION_REQUIRED.type,\n        code: errors.CLIENT_OPTION_REQUIRED.code,\n        message: optionName + \" is required when making a request.\",\n      });\n    }\n\n    if (\"api\" in options) {\n      api = options.api;\n    } else {\n      api = \"clientApi\";\n    }\n\n    requestOptions = {\n      method: options.method,\n      graphQL: self._graphQL,\n      timeout: options.timeout,\n      metadata: self._configuration.analyticsMetadata,\n    };\n\n    if (api === \"clientApi\") {\n      baseUrl = self._clientApiBaseUrl;\n\n      requestOptions.data = addMetadata(self._configuration, options.data);\n    } else if (api === \"graphQLApi\") {\n      baseUrl =\n        GRAPHQL_URLS[self._configuration.gatewayConfiguration.environment];\n      options.endpoint = \"\";\n      requestOptions.method = \"post\";\n      requestOptions.data = assign(\n        {\n          clientSdkMetadata: {\n            platform: self._configuration.analyticsMetadata.platform,\n            source: self._configuration.analyticsMetadata.source,\n            integration: self._configuration.analyticsMetadata.integration,\n            sessionId: self._configuration.analyticsMetadata.sessionId,\n            version: VERSION,\n          },\n        },\n        options.data\n      );\n\n      requestOptions.headers = getAuthorizationHeadersForGraphQL(\n        self._configuration\n      );\n    } else {\n      throw new BraintreeError({\n        type: errors.CLIENT_OPTION_INVALID.type,\n        code: errors.CLIENT_OPTION_INVALID.code,\n        message: \"options.api is invalid.\",\n      });\n    }\n\n    requestOptions.url = baseUrl + options.endpoint;\n    requestOptions.sendAnalyticsEvent = function (kind) {\n      analytics.sendEvent(self, kind);\n    };\n\n    self._request(requestOptions, function (err, data, status) {\n      var resolvedData, requestError;\n\n      requestError = formatRequestError(status, err);\n\n      if (requestError) {\n        reject(requestError);\n\n        return;\n      }\n\n      if (api === \"graphQLApi\" && data.errors) {\n        reject(\n          convertToBraintreeError(data.errors, {\n            type: errors.CLIENT_GRAPHQL_REQUEST_ERROR.type,\n            code: errors.CLIENT_GRAPHQL_REQUEST_ERROR.code,\n            message: errors.CLIENT_GRAPHQL_REQUEST_ERROR.message,\n          })\n        );\n\n        return;\n      }\n\n      resolvedData = assign({ _httpStatus: status }, data);\n\n      if (\n        shouldCollectData &&\n        resolvedData.creditCards &&\n        resolvedData.creditCards.length > 0\n      ) {\n        self._findOrCreateFraudnetJSON(resolvedData.creditCards[0].nonce);\n\n        assets.loadScript({\n          src: FRAUDNET_URL,\n          forceScriptReload: true,\n        });\n      }\n      resolve(resolvedData);\n    });\n  });\n\n  if (typeof callback === \"function\") {\n    callback = once(deferred(callback));\n\n    requestPromise\n      .then(function (response) {\n        callback(null, response, response._httpStatus);\n      })\n      .catch(function (err) {\n        var status = err && err.details && err.details.httpStatus;\n\n        callback(err, null, status);\n      });\n\n    return;\n  }\n\n  return requestPromise; // eslint-disable-line consistent-return\n};\n\n// eslint-disable-next-line consistent-return\nfunction formatRequestError(status, err) {\n  var requestError;\n\n  if (status === -1) {\n    requestError = new BraintreeError(errors.CLIENT_REQUEST_TIMEOUT);\n  } else if (status === 401) {\n    requestError = new BraintreeError(errors.CLIENT_AUTHORIZATION_INVALID);\n  } else if (status === 403) {\n    requestError = new BraintreeError(errors.CLIENT_AUTHORIZATION_INSUFFICIENT);\n  } else if (status === 429) {\n    requestError = new BraintreeError(errors.CLIENT_RATE_LIMITED);\n  } else if (status >= 500) {\n    requestError = new BraintreeError(errors.CLIENT_GATEWAY_NETWORK);\n  } else if (status < 200 || status >= 400) {\n    requestError = convertToBraintreeError(err, {\n      type: errors.CLIENT_REQUEST_ERROR.type,\n      code: errors.CLIENT_REQUEST_ERROR.code,\n      message: errors.CLIENT_REQUEST_ERROR.message,\n    });\n  }\n\n  if (requestError) {\n    requestError.details = requestError.details || {};\n    requestError.details.httpStatus = status;\n\n    return requestError;\n  }\n}\n\nClient.prototype.toJSON = function () {\n  return this.getConfiguration();\n};\n\n/**\n * Returns the Client version.\n * @public\n * @returns {String} The created client's version.\n * @example\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   console.log(clientInstance.getVersion()); // Ex: 1.0.0\n * });\n * @returns {void}\n */\nClient.prototype.getVersion = function () {\n  return VERSION;\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/client.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * clientInstance.teardown();\n * @example <caption>With callback</caption>\n * clientInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nClient.prototype.teardown = wrapPromise(function () {\n  var self = this; // eslint-disable-line no-invalid-this\n\n  delete cachedClients[self.getConfiguration().authorization];\n  convertMethodsToError(self, methods(Client.prototype));\n\n  return Promise.resolve();\n});\n\nfunction getAuthorizationHeadersForGraphQL(configuration) {\n  var token =\n    configuration.authorizationFingerprint || configuration.authorization;\n\n  return {\n    Authorization: \"Bearer \" + token,\n    \"Braintree-Version\": BRAINTREE_VERSION,\n  };\n}\n\nmodule.exports = Client;\n\n},{\"../lib/add-metadata\":93,\"../lib/analytics\":94,\"../lib/assets\":95,\"../lib/assign\":96,\"../lib/braintree-error\":99,\"../lib/constants\":100,\"../lib/convert-methods-to-error\":101,\"../lib/convert-to-braintree-error\":102,\"../lib/create-authorization-data\":104,\"../lib/deferred\":106,\"../lib/is-verified-domain\":127,\"../lib/methods\":129,\"../lib/once\":130,\"../lib/promise\":131,\"./constants\":57,\"./errors\":58,\"./get-configuration\":59,\"./request\":71,\"./request/graphql\":69,\"@braintree/wrap-promise\":51}],57:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  BRAINTREE_VERSION: \"2018-05-10\",\n};\n\n},{}],58:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Client - Internal Error Codes\n * @ignore\n * @description These codes should never be experienced by the merchant directly.\n * @property {MERCHANT} CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN An error to prevent client creation for domains that are not allowed in the JS.\n * @property {INTERNAL} CLIENT_MISSING_GATEWAY_CONFIGURATION Occurs when the client is created without a gateway configuration. Should never happen.\n */\n\n/**\n * @name BraintreeError.Client - Create Error Codes\n * @description Errors that may occur when [creating the client](./module-braintree-web_client.html#.create)\n * @property {MERCHANT} CLIENT_INVALID_AUTHORIZATION Occurs when client token cannot be parsed.\n */\n\n/**\n * @name BraintreeError.Client - Request Error Codes\n * @description Errors that may occur when [using the request method](./Client.html#request)\n * @property {MERCHANT} CLIENT_OPTION_REQUIRED An option required in the request method was not provided. Usually `options.method` or `options.endpoint`\n * @property {MERCHANT} CLIENT_OPTION_INVALID The request option provided is invalid.\n * @property {MERCHANT} CLIENT_GATEWAY_NETWORK The Braintree gateway could not be contacted.\n * @property {NETWORK} CLIENT_REQUEST_TIMEOUT The request took too long to complete and timed out.\n * @property {NETWORK} CLIENT_REQUEST_ERROR The response from a request had status 400 or greater.\n * @property {NETWORK} CLIENT_GRAPHQL_REQUEST_ERROR The response from a request to GraphQL contained an error.\n * @property {MERCHANT} CLIENT_RATE_LIMITED The response from a request had a status of 429, indicating rate limiting.\n * @property {MERCHANT} CLIENT_AUTHORIZATION_INSUFFICIENT The user associated with the client token or tokenization key does not have permissions to make the request.\n * @property {MERCHANT} CLIENT_AUTHORIZATION_INVALID The provided authorization could not be found. Either the client token has expired and a new client token must be generated or the tokenization key used is set to be inactive or has been deleted.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_GATEWAY_CONFIGURATION_INVALID_DOMAIN\",\n  },\n  CLIENT_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_OPTION_REQUIRED\",\n  },\n  CLIENT_OPTION_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_OPTION_INVALID\",\n  },\n  CLIENT_MISSING_GATEWAY_CONFIGURATION: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"CLIENT_MISSING_GATEWAY_CONFIGURATION\",\n    message: \"Missing gatewayConfiguration.\",\n  },\n  CLIENT_INVALID_AUTHORIZATION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_INVALID_AUTHORIZATION\",\n    message:\n      \"Authorization is invalid. Make sure your client token or tokenization key is valid.\",\n  },\n  CLIENT_GATEWAY_NETWORK: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_GATEWAY_NETWORK\",\n    message: \"Cannot contact the gateway at this time.\",\n  },\n  CLIENT_REQUEST_TIMEOUT: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_REQUEST_TIMEOUT\",\n    message: \"Request timed out waiting for a reply.\",\n  },\n  CLIENT_REQUEST_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_REQUEST_ERROR\",\n    message: \"There was a problem with your request.\",\n  },\n  CLIENT_GRAPHQL_REQUEST_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_GRAPHQL_REQUEST_ERROR\",\n    message: \"There was a problem with your request.\",\n  },\n  CLIENT_RATE_LIMITED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_RATE_LIMITED\",\n    message: \"You are being rate-limited; please try again in a few minutes.\",\n  },\n  CLIENT_AUTHORIZATION_INSUFFICIENT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_AUTHORIZATION_INSUFFICIENT\",\n    message: \"The authorization used has insufficient privileges.\",\n  },\n  CLIENT_AUTHORIZATION_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"CLIENT_AUTHORIZATION_INVALID\",\n    message:\n      \"Either the client token has expired and a new one should be generated or the tokenization key has been deactivated or deleted.\",\n  },\n};\n\n},{\"../lib/braintree-error\":99}],59:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar request = require(\"./request\");\nvar uuid = require(\"@braintree/uuid\");\nvar constants = require(\"../lib/constants\");\nvar errors = require(\"./errors\");\nvar GraphQL = require(\"./request/graphql\");\nvar GRAPHQL_URLS = require(\"../lib/constants\").GRAPHQL_URLS;\nvar isDateStringBeforeOrOn = require(\"../lib/is-date-string-before-or-on\");\n\nvar BRAINTREE_VERSION = require(\"./constants\").BRAINTREE_VERSION;\n\nfunction getConfiguration(authData) {\n  return new Promise(function (resolve, reject) {\n    var configuration, attrs, configUrl, reqOptions;\n    var sessionId = uuid();\n    var analyticsMetadata = {\n      merchantAppId: window.location.host,\n      platform: constants.PLATFORM,\n      sdkVersion: constants.VERSION,\n      source: constants.SOURCE,\n      integration: constants.INTEGRATION,\n      integrationType: constants.INTEGRATION,\n      sessionId: sessionId,\n    };\n\n    attrs = authData.attrs;\n    configUrl = authData.configUrl;\n\n    attrs._meta = analyticsMetadata;\n    attrs.braintreeLibraryVersion = constants.BRAINTREE_LIBRARY_VERSION;\n    attrs.configVersion = \"3\";\n\n    reqOptions = {\n      url: configUrl,\n      method: \"GET\",\n      data: attrs,\n    };\n\n    if (attrs.authorizationFingerprint && authData.graphQL) {\n      if (isDateStringBeforeOrOn(authData.graphQL.date, BRAINTREE_VERSION)) {\n        reqOptions.graphQL = new GraphQL({\n          graphQL: {\n            url: authData.graphQL.url,\n            features: [\"configuration\"],\n          },\n        });\n      }\n\n      reqOptions.metadata = analyticsMetadata;\n    } else if (attrs.tokenizationKey) {\n      reqOptions.graphQL = new GraphQL({\n        graphQL: {\n          url: GRAPHQL_URLS[authData.environment],\n          features: [\"configuration\"],\n        },\n      });\n\n      reqOptions.metadata = analyticsMetadata;\n    }\n\n    // NEXT_MAJOR_VERSION\n    // there are various issues with the config endpoint where the values returned\n    // do not match the values from the merchant account id passed into a client token\n    // we need to update the configuration request endpoint to be able to pass the\n    // correct values. The following ones are incorrect\n    // * applePayWeb - definitely supportedNetworks, which compiles all the card\n    //    networks from all the merchant accounts instead of providing just the\n    //    ones from the specified one. The same is probably true for ios apple pay\n    //    Also the merchantidentifier\n    // NEXT_MAJOR_VERSION Allow passing in merchant account id when creating the component\n    // to fetch the config for that merchant account id (particularly helpful when using\n    // a tokenization key for authorization)\n    request(reqOptions, function (err, response, status) {\n      var errorTemplate;\n\n      if (err) {\n        if (status === 403) {\n          errorTemplate = errors.CLIENT_AUTHORIZATION_INSUFFICIENT;\n        } else if (status === 401) {\n          errorTemplate = errors.CLIENT_AUTHORIZATION_INVALID;\n        } else {\n          errorTemplate = errors.CLIENT_GATEWAY_NETWORK;\n        }\n\n        reject(\n          new BraintreeError({\n            type: errorTemplate.type,\n            code: errorTemplate.code,\n            message: errorTemplate.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n\n        return;\n      }\n\n      configuration = {\n        authorizationType: attrs.tokenizationKey\n          ? \"TOKENIZATION_KEY\"\n          : \"CLIENT_TOKEN\",\n        authorizationFingerprint: attrs.authorizationFingerprint,\n        analyticsMetadata: analyticsMetadata,\n        gatewayConfiguration: response,\n      };\n\n      resolve(configuration);\n    });\n  });\n}\n\nmodule.exports = {\n  getConfiguration: wrapPromise(getConfiguration),\n};\n\n},{\"../lib/braintree-error\":99,\"../lib/constants\":100,\"../lib/is-date-string-before-or-on\":125,\"../lib/promise\":131,\"./constants\":57,\"./errors\":58,\"./request\":71,\"./request/graphql\":69,\"@braintree/uuid\":47,\"@braintree/wrap-promise\":51}],60:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Client = require(\"./client\");\nvar VERSION = \"3.88.3\";\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar sharedErrors = require(\"../lib/errors\");\n\n/** @module braintree-web/client */\n\n/**\n * @function create\n * @description This function is the entry point for the <code>braintree.client</code> module. It is used for creating {@link Client} instances that service communication to Braintree servers.\n * @param {object} options Object containing all {@link Client} options:\n * @param {string} options.authorization A tokenizationKey or clientToken.\n * @param {callback} [callback] The second argument, <code>data</code>, is the {@link Client} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * var createClient = require('braintree-web/client').create;\n *\n * createClient({\n *   authorization: CLIENT_AUTHORIZATION\n * }, function (createErr, clientInstance) {\n *   if (createErr) {\n *     if (createErr.code === 'CLIENT_AUTHORIZATION_INVALID') {\n *       // either the client token has expired, and a new one should be generated\n *       // or the tokenization key was deactivated or deleted\n *     } else {\n *       console.log('something went wrong creating the client instance', createErr);\n *     }\n *     return;\n *   }\n *\n *  // set up other components\n * });\n * @static\n */\nfunction create(options) {\n  if (!options.authorization) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type,\n        code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code,\n        message:\n          \"options.authorization is required when instantiating a client.\",\n      })\n    );\n  }\n\n  return Client.initialize(options);\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/braintree-error\":99,\"../lib/errors\":109,\"../lib/promise\":131,\"./client\":56,\"@braintree/wrap-promise\":51}],61:[function(require,module,exports){\n\"use strict\";\n\nvar querystring = require(\"../../lib/querystring\");\nvar assign = require(\"../../lib/assign\").assign;\nvar prepBody = require(\"./prep-body\");\nvar parseBody = require(\"./parse-body\");\nvar xhr = require(\"./xhr\");\nvar isXHRAvailable = xhr.isAvailable;\nvar GraphQLRequest = require(\"./graphql/request\");\nvar DefaultRequest = require(\"./default-request\");\n\nvar MAX_TCP_RETRYCOUNT = 1;\nvar TCP_PRECONNECT_BUG_STATUS_CODE = 408;\n\nfunction requestShouldRetry(status) {\n  return !status || status === TCP_PRECONNECT_BUG_STATUS_CODE;\n}\n\nfunction graphQLRequestShouldRetryWithClientApi(body) {\n  var errorClass =\n    !body.data &&\n    body.errors &&\n    body.errors[0] &&\n    body.errors[0].extensions &&\n    body.errors[0].extensions.errorClass;\n\n  return errorClass === \"UNKNOWN\" || errorClass === \"INTERNAL\";\n}\n\nfunction _requestWithRetry(options, tcpRetryCount, cb) {\n  var status, resBody, ajaxRequest, body, method, headers, parsedBody;\n  var url = options.url;\n  var graphQL = options.graphQL;\n  var timeout = options.timeout;\n  var req = xhr.getRequestObject();\n  var callback = cb;\n  var isGraphQLRequest = Boolean(\n    graphQL && graphQL.isGraphQLRequest(url, options.data)\n  );\n\n  options.headers = assign(\n    { \"Content-Type\": \"application/json\" },\n    options.headers\n  );\n\n  if (isGraphQLRequest) {\n    ajaxRequest = new GraphQLRequest(options);\n  } else {\n    ajaxRequest = new DefaultRequest(options);\n  }\n\n  url = ajaxRequest.getUrl();\n  body = ajaxRequest.getBody();\n  method = ajaxRequest.getMethod();\n  headers = ajaxRequest.getHeaders();\n\n  if (method === \"GET\") {\n    url = querystring.queryify(url, body);\n    body = null;\n  }\n\n  if (isXHRAvailable) {\n    req.onreadystatechange = function () {\n      if (req.readyState !== 4) {\n        return;\n      }\n\n      if (req.status === 0 && isGraphQLRequest) {\n        // If a merchant experiences a connection\n        // issue to the GraphQL endpoint (possibly\n        // due to a Content Security Policy), retry\n        // the request against the old client API.\n        delete options.graphQL;\n        _requestWithRetry(options, tcpRetryCount, cb);\n\n        return;\n      }\n\n      parsedBody = parseBody(req.responseText);\n      resBody = ajaxRequest.adaptResponseBody(parsedBody);\n      status = ajaxRequest.determineStatus(req.status, parsedBody);\n\n      if (status >= 400 || status < 200) {\n        if (\n          isGraphQLRequest &&\n          graphQLRequestShouldRetryWithClientApi(parsedBody)\n        ) {\n          delete options.graphQL;\n          _requestWithRetry(options, tcpRetryCount, cb);\n\n          return;\n        }\n\n        if (tcpRetryCount < MAX_TCP_RETRYCOUNT && requestShouldRetry(status)) {\n          tcpRetryCount++;\n          _requestWithRetry(options, tcpRetryCount, cb);\n\n          return;\n        }\n        callback(resBody || \"error\", null, status || 500);\n      } else {\n        callback(null, resBody, status);\n      }\n    };\n  } else {\n    if (options.headers) {\n      url = querystring.queryify(url, headers);\n    }\n\n    req.onload = function () {\n      callback(null, parseBody(req.responseText), req.status);\n    };\n\n    req.onerror = function () {\n      // XDomainRequest does not report a body or status for errors, so\n      // hardcode to 'error' and 500, respectively\n      callback(\"error\", null, 500);\n    };\n\n    // This must remain for IE9 to work\n    req.onprogress = function () {};\n\n    req.ontimeout = function () {\n      callback(\"timeout\", null, -1);\n    };\n  }\n\n  try {\n    req.open(method, url, true);\n  } catch (requestOpenError) {\n    // If a merchant has a Content Security Policy and they have\n    // not allowed our endpoints, some browsers may\n    // synchronously throw an error. If it is not a GraphQL\n    // request, we throw the error. If it is a GraphQL request\n    // we remove the GraphQL option and try the request against\n    // the old client API.\n    if (!isGraphQLRequest) {\n      throw requestOpenError;\n    }\n\n    delete options.graphQL;\n\n    _requestWithRetry(options, tcpRetryCount, cb);\n\n    return;\n  }\n\n  req.timeout = timeout;\n\n  if (isXHRAvailable) {\n    Object.keys(headers).forEach(function (headerKey) {\n      req.setRequestHeader(headerKey, headers[headerKey]);\n    });\n  }\n\n  try {\n    req.send(prepBody(method, body));\n  } catch (e) {\n    /* ignored */\n  }\n}\n\nfunction request(options, cb) {\n  _requestWithRetry(options, 0, cb);\n}\n\nmodule.exports = {\n  request: request,\n};\n\n},{\"../../lib/assign\":96,\"../../lib/querystring\":132,\"./default-request\":62,\"./graphql/request\":70,\"./parse-body\":74,\"./prep-body\":75,\"./xhr\":76}],62:[function(require,module,exports){\n\"use strict\";\n\nfunction DefaultRequest(options) {\n  this._url = options.url;\n  this._data = options.data;\n  this._method = options.method;\n  this._headers = options.headers;\n}\n\nDefaultRequest.prototype.getUrl = function () {\n  return this._url;\n};\n\nDefaultRequest.prototype.getBody = function () {\n  return this._data;\n};\n\nDefaultRequest.prototype.getMethod = function () {\n  return this._method;\n};\n\nDefaultRequest.prototype.getHeaders = function () {\n  return this._headers;\n};\n\nDefaultRequest.prototype.adaptResponseBody = function (parsedBody) {\n  return parsedBody;\n};\n\nDefaultRequest.prototype.determineStatus = function (status) {\n  return status;\n};\n\nmodule.exports = DefaultRequest;\n\n},{}],63:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function getUserAgent() {\n  return window.navigator.userAgent;\n};\n\n},{}],64:[function(require,module,exports){\n\"use strict\";\n\nvar errorResponseAdapter = require(\"./error\");\nvar assign = require(\"../../../../lib/assign\").assign;\n\n/* eslint-disable camelcase */\nvar cardTypeTransforms = {\n  creditCard: {\n    AMERICAN_EXPRESS: \"American Express\",\n    DISCOVER: \"Discover\",\n    INTERNATIONAL_MAESTRO: \"Maestro\",\n    JCB: \"JCB\",\n    MASTERCARD: \"MasterCard\",\n    SOLO: \"Solo\",\n    UK_MAESTRO: \"UK Maestro\",\n    UNION_PAY: \"UnionPay\",\n    VISA: \"Visa\",\n    ELO: \"Elo\",\n    HIPER: \"Hiper\",\n    HIPERCARD: \"Hipercard\",\n  },\n  applePayWeb: {\n    VISA: \"visa\",\n    MASTERCARD: \"mastercard\",\n    DISCOVER: \"discover\",\n    AMERICAN_EXPRESS: \"amex\",\n    INTERNATIONAL_MAESTRO: \"maestro\",\n    ELO: \"elo\",\n  },\n  visaCheckout: {\n    VISA: \"Visa\",\n    MASTERCARD: \"MasterCard\",\n    DISCOVER: \"Discover\",\n    AMERICAN_EXPRESS: \"American Express\",\n  },\n  googlePay: {\n    VISA: \"visa\",\n    MASTERCARD: \"mastercard\",\n    DISCOVER: \"discover\",\n    AMERICAN_EXPRESS: \"amex\",\n    INTERNATIONAL_MAESTRO: \"maestro\",\n    ELO: \"elo\",\n  },\n  masterpass: {\n    VISA: \"visa\",\n    MASTERCARD: \"master\",\n    DISCOVER: \"discover\",\n    AMERICAN_EXPRESS: \"amex\",\n    DINERS: \"diners\",\n    INTERNATIONAL_MAESTRO: \"maestro\",\n    JCB: \"jcb\",\n  },\n};\n/* eslint-enable camelcase */\n\nfunction configurationResponseAdapter(responseBody, ctx) {\n  var adaptedResponse;\n\n  if (responseBody.data && !responseBody.errors) {\n    adaptedResponse = adaptConfigurationResponseBody(responseBody, ctx);\n  } else {\n    adaptedResponse = errorResponseAdapter(responseBody);\n  }\n\n  return adaptedResponse;\n}\n\nfunction adaptConfigurationResponseBody(body, ctx) {\n  var configuration = body.data.clientConfiguration;\n  var response;\n\n  response = {\n    environment: configuration.environment.toLowerCase(),\n    clientApiUrl: configuration.clientApiUrl,\n    assetsUrl: configuration.assetsUrl,\n    analytics: {\n      url: configuration.analyticsUrl,\n    },\n    merchantId: configuration.merchantId,\n    venmo: \"off\",\n  };\n\n  if (configuration.supportedFeatures) {\n    response.graphQL = {\n      url: ctx._graphQL._config.url,\n      features: configuration.supportedFeatures.map(function (feature) {\n        return feature.toLowerCase();\n      }),\n    };\n  }\n\n  if (configuration.braintreeApi) {\n    response.braintreeApi = configuration.braintreeApi;\n  }\n\n  if (configuration.applePayWeb) {\n    response.applePayWeb = configuration.applePayWeb;\n    response.applePayWeb.supportedNetworks = mapCardTypes(\n      configuration.applePayWeb.supportedCardBrands,\n      cardTypeTransforms.applePayWeb\n    );\n\n    delete response.applePayWeb.supportedCardBrands;\n  }\n\n  if (configuration.ideal) {\n    response.ideal = configuration.ideal;\n  }\n\n  if (configuration.kount) {\n    response.kount = {\n      kountMerchantId: configuration.kount.merchantId,\n    };\n  }\n\n  if (configuration.creditCard) {\n    response.challenges = configuration.creditCard.challenges.map(function (\n      challenge\n    ) {\n      return challenge.toLowerCase();\n    });\n\n    response.creditCards = {\n      supportedCardTypes: mapCardTypes(\n        configuration.creditCard.supportedCardBrands,\n        cardTypeTransforms.creditCard\n      ),\n    };\n    response.threeDSecureEnabled = configuration.creditCard.threeDSecureEnabled;\n    response.threeDSecure = configuration.creditCard.threeDSecure;\n  } else {\n    response.challenges = [];\n    response.creditCards = {\n      supportedCardTypes: [],\n    };\n    response.threeDSecureEnabled = false;\n  }\n\n  if (configuration.googlePay) {\n    response.androidPay = {\n      displayName: configuration.googlePay.displayName,\n      enabled: true,\n      environment: configuration.googlePay.environment.toLowerCase(),\n      googleAuthorizationFingerprint:\n        configuration.googlePay.googleAuthorization,\n      paypalClientId: configuration.googlePay.paypalClientId,\n      supportedNetworks: mapCardTypes(\n        configuration.googlePay.supportedCardBrands,\n        cardTypeTransforms.googlePay\n      ),\n    };\n  }\n\n  if (configuration.venmo) {\n    response.payWithVenmo = {\n      merchantId: configuration.venmo.merchantId,\n      accessToken: configuration.venmo.accessToken,\n      environment: configuration.venmo.environment.toLowerCase(),\n    };\n  }\n\n  if (configuration.paypal) {\n    response.paypalEnabled = true;\n    response.paypal = assign({}, configuration.paypal);\n    response.paypal.currencyIsoCode = response.paypal.currencyCode;\n    response.paypal.environment = response.paypal.environment.toLowerCase();\n\n    delete response.paypal.currencyCode;\n  } else {\n    response.paypalEnabled = false;\n  }\n\n  if (configuration.unionPay) {\n    response.unionPay = {\n      enabled: true,\n      merchantAccountId: configuration.unionPay.merchantAccountId,\n    };\n  }\n\n  if (configuration.visaCheckout) {\n    response.visaCheckout = {\n      apikey: configuration.visaCheckout.apiKey,\n      encryptionKey: configuration.visaCheckout.encryptionKey,\n      externalClientId: configuration.visaCheckout.externalClientId,\n      supportedCardTypes: mapCardTypes(\n        configuration.visaCheckout.supportedCardBrands,\n        cardTypeTransforms.visaCheckout\n      ),\n    };\n  }\n\n  if (configuration.masterpass) {\n    response.masterpass = {\n      merchantCheckoutId: configuration.masterpass.merchantCheckoutId,\n      supportedNetworks: mapCardTypes(\n        configuration.masterpass.supportedCardBrands,\n        cardTypeTransforms.masterpass\n      ),\n    };\n  }\n\n  if (configuration.usBankAccount) {\n    response.usBankAccount = {\n      routeId: configuration.usBankAccount.routeId,\n      plaid: {\n        publicKey: configuration.usBankAccount.plaidPublicKey,\n      },\n    };\n  }\n\n  return response;\n}\n\nfunction mapCardTypes(cardTypes, cardTypeTransformMap) {\n  return cardTypes.reduce(function (acc, type) {\n    if (cardTypeTransformMap.hasOwnProperty(type)) {\n      return acc.concat(cardTypeTransformMap[type]);\n    }\n\n    return acc;\n  }, []);\n}\n\nmodule.exports = configurationResponseAdapter;\n\n},{\"../../../../lib/assign\":96,\"./error\":66}],65:[function(require,module,exports){\n\"use strict\";\n\nvar errorResponseAdapter = require(\"./error\");\n\nvar CARD_BRAND_MAP = {\n  /* eslint-disable camelcase */\n  AMERICAN_EXPRESS: \"American Express\",\n  DINERS: \"Discover\",\n  DISCOVER: \"Discover\",\n  ELO: \"Elo\",\n  HIPER: \"Hiper\",\n  HIPERCARD: \"Hipercard\",\n  INTERNATIONAL_MAESTRO: \"Maestro\",\n  JCB: \"JCB\",\n  MASTERCARD: \"MasterCard\",\n  UK_MAESTRO: \"Maestro\",\n  UNION_PAY: \"UnionPay\",\n  VISA: \"Visa\",\n  /* eslint-enable camelcase */\n};\n\nvar BIN_DATA_MAP = {\n  YES: \"Yes\",\n  NO: \"No\",\n  UNKNOWN: \"Unknown\",\n};\n\nvar AUTHENTICATION_INSIGHT_MAP = {\n  PSDTWO: \"psd2\",\n};\n\nfunction creditCardTokenizationResponseAdapter(responseBody) {\n  var adaptedResponse;\n\n  if (responseBody.data && !responseBody.errors) {\n    adaptedResponse = adaptTokenizeCreditCardResponseBody(responseBody);\n  } else {\n    adaptedResponse = errorResponseAdapter(responseBody);\n  }\n\n  return adaptedResponse;\n}\n\nfunction adaptTokenizeCreditCardResponseBody(body) {\n  var data = body.data.tokenizeCreditCard;\n  var creditCard = data.creditCard;\n  var lastTwo = creditCard.last4 ? creditCard.last4.substr(2, 4) : \"\";\n  var binData = creditCard.binData;\n  var response, regulationEnvironment;\n\n  if (binData) {\n    [\n      \"commercial\",\n      \"debit\",\n      \"durbinRegulated\",\n      \"healthcare\",\n      \"payroll\",\n      \"prepaid\",\n    ].forEach(function (key) {\n      if (binData[key]) {\n        binData[key] = BIN_DATA_MAP[binData[key]];\n      } else {\n        binData[key] = \"Unknown\";\n      }\n    });\n\n    [\"issuingBank\", \"countryOfIssuance\", \"productId\"].forEach(function (key) {\n      if (!binData[key]) {\n        binData[key] = \"Unknown\";\n      }\n    });\n  }\n\n  response = {\n    creditCards: [\n      {\n        binData: binData,\n        consumed: false,\n        description: lastTwo ? \"ending in \" + lastTwo : \"\",\n        nonce: data.token,\n        details: {\n          cardholderName: creditCard.cardholderName,\n          expirationMonth: creditCard.expirationMonth,\n          expirationYear: creditCard.expirationYear,\n          bin: creditCard.bin || \"\",\n          cardType: CARD_BRAND_MAP[creditCard.brandCode] || \"Unknown\",\n          lastFour: creditCard.last4 || \"\",\n          lastTwo: lastTwo,\n        },\n        type: \"CreditCard\",\n        threeDSecureInfo: null,\n      },\n    ],\n  };\n\n  if (data.authenticationInsight) {\n    regulationEnvironment =\n      data.authenticationInsight.customerAuthenticationRegulationEnvironment;\n    response.creditCards[0].authenticationInsight = {\n      regulationEnvironment:\n        AUTHENTICATION_INSIGHT_MAP[regulationEnvironment] ||\n        regulationEnvironment.toLowerCase(),\n    };\n  }\n\n  return response;\n}\n\nmodule.exports = creditCardTokenizationResponseAdapter;\n\n},{\"./error\":66}],66:[function(require,module,exports){\n\"use strict\";\n\nfunction errorResponseAdapter(responseBody) {\n  var response;\n  var errorClass =\n    responseBody.errors &&\n    responseBody.errors[0] &&\n    responseBody.errors[0].extensions &&\n    responseBody.errors[0].extensions.errorClass;\n\n  if (errorClass === \"VALIDATION\") {\n    response = userErrorResponseAdapter(responseBody);\n  } else if (errorClass) {\n    response = errorWithClassResponseAdapter(responseBody);\n  } else {\n    response = {\n      error: { message: \"There was a problem serving your request\" },\n      fieldErrors: [],\n    };\n  }\n\n  return response;\n}\n\nfunction errorWithClassResponseAdapter(responseBody) {\n  return {\n    error: { message: responseBody.errors[0].message },\n    fieldErrors: [],\n  };\n}\n\nfunction userErrorResponseAdapter(responseBody) {\n  var fieldErrors = buildFieldErrors(responseBody.errors);\n\n  if (fieldErrors.length === 0) {\n    return { error: { message: responseBody.errors[0].message } };\n  }\n\n  return {\n    error: { message: getLegacyMessage(fieldErrors) },\n    fieldErrors: fieldErrors,\n  };\n}\n\nfunction buildFieldErrors(errors) {\n  var fieldErrors = [];\n\n  errors.forEach(function (error) {\n    if (!(error.extensions && error.extensions.inputPath)) {\n      return;\n    }\n    addFieldError(error.extensions.inputPath.slice(1), error, fieldErrors);\n  });\n\n  return fieldErrors;\n}\n\nfunction addFieldError(inputPath, errorDetail, fieldErrors) {\n  var fieldError;\n  var legacyCode = errorDetail.extensions.legacyCode;\n  var inputField = inputPath[0];\n\n  if (inputPath.length === 1) {\n    fieldErrors.push({\n      code: legacyCode,\n      field: inputField,\n      message: errorDetail.message,\n    });\n\n    return;\n  }\n\n  fieldErrors.forEach(function (candidate) {\n    if (candidate.field === inputField) {\n      fieldError = candidate;\n    }\n  });\n\n  if (!fieldError) {\n    fieldError = { field: inputField, fieldErrors: [] };\n    fieldErrors.push(fieldError);\n  }\n\n  addFieldError(inputPath.slice(1), errorDetail, fieldError.fieldErrors);\n}\n\nfunction getLegacyMessage(errors) {\n  var legacyMessages = {\n    creditCard: \"Credit card is invalid\",\n  };\n\n  var field = errors[0].field;\n\n  return legacyMessages[field];\n}\n\nmodule.exports = errorResponseAdapter;\n\n},{}],67:[function(require,module,exports){\n\"use strict\";\n\nvar CONFIGURATION_QUERY =\n  \"query ClientConfiguration { \" +\n  \"  clientConfiguration { \" +\n  \"    analyticsUrl \" +\n  \"    environment \" +\n  \"    merchantId \" +\n  \"    assetsUrl \" +\n  \"    clientApiUrl \" +\n  \"    creditCard { \" +\n  \"      supportedCardBrands \" +\n  \"      challenges \" +\n  \"      threeDSecureEnabled \" +\n  \"      threeDSecure { \" +\n  \"        cardinalAuthenticationJWT \" +\n  \"      } \" +\n  \"    } \" +\n  \"    applePayWeb { \" +\n  \"      countryCode \" +\n  \"      currencyCode \" +\n  \"      merchantIdentifier \" +\n  \"      supportedCardBrands \" +\n  \"    } \" +\n  \"    googlePay { \" +\n  \"      displayName \" +\n  \"      supportedCardBrands \" +\n  \"      environment \" +\n  \"      googleAuthorization \" +\n  \"      paypalClientId \" +\n  \"    } \" +\n  \"    ideal { \" +\n  \"      routeId \" +\n  \"      assetsUrl \" +\n  \"    } \" +\n  \"    kount { \" +\n  \"      merchantId \" +\n  \"    } \" +\n  \"    masterpass { \" +\n  \"      merchantCheckoutId \" +\n  \"      supportedCardBrands \" +\n  \"    } \" +\n  \"    paypal { \" +\n  \"      displayName \" +\n  \"      clientId \" +\n  \"      privacyUrl \" +\n  \"      userAgreementUrl \" +\n  \"      assetsUrl \" +\n  \"      environment \" +\n  \"      environmentNoNetwork \" +\n  \"      unvettedMerchant \" +\n  \"      braintreeClientId \" +\n  \"      billingAgreementsEnabled \" +\n  \"      merchantAccountId \" +\n  \"      currencyCode \" +\n  \"      payeeEmail \" +\n  \"    } \" +\n  \"    unionPay { \" +\n  \"      merchantAccountId \" +\n  \"    } \" +\n  \"    usBankAccount { \" +\n  \"      routeId \" +\n  \"      plaidPublicKey \" +\n  \"    } \" +\n  \"    venmo { \" +\n  \"      merchantId \" +\n  \"      accessToken \" +\n  \"      environment \" +\n  \"    } \" +\n  \"    visaCheckout { \" +\n  \"      apiKey \" +\n  \"      externalClientId \" +\n  \"      supportedCardBrands \" +\n  \"    } \" +\n  \"    braintreeApi { \" +\n  \"      accessToken \" +\n  \"      url \" +\n  \"    } \" +\n  \"    supportedFeatures \" +\n  \"  } \" +\n  \"}\";\n\nfunction configuration() {\n  return {\n    query: CONFIGURATION_QUERY,\n    operationName: \"ClientConfiguration\",\n  };\n}\n\nmodule.exports = configuration;\n\n},{}],68:[function(require,module,exports){\n\"use strict\";\n\nvar assign = require(\"../../../../lib/assign\").assign;\n\nfunction createMutation(config) {\n  var hasAuthenticationInsight = config.hasAuthenticationInsight;\n  var mutation = \"mutation TokenizeCreditCard($input: TokenizeCreditCardInput!\";\n\n  if (hasAuthenticationInsight) {\n    mutation += \", $authenticationInsightInput: AuthenticationInsightInput!\";\n  }\n\n  mutation +=\n    \") { \" +\n    \"  tokenizeCreditCard(input: $input) { \" +\n    \"    token \" +\n    \"    creditCard { \" +\n    \"      bin \" +\n    \"      brandCode \" +\n    \"      last4 \" +\n    \"      cardholderName \" +\n    \"      expirationMonth\" +\n    \"      expirationYear\" +\n    \"      binData { \" +\n    \"        prepaid \" +\n    \"        healthcare \" +\n    \"        debit \" +\n    \"        durbinRegulated \" +\n    \"        commercial \" +\n    \"        payroll \" +\n    \"        issuingBank \" +\n    \"        countryOfIssuance \" +\n    \"        productId \" +\n    \"      } \" +\n    \"    } \";\n\n  if (hasAuthenticationInsight) {\n    mutation +=\n      \"    authenticationInsight(input: $authenticationInsightInput) {\" +\n      \"      customerAuthenticationRegulationEnvironment\" +\n      \"    }\";\n  }\n\n  mutation += \"  } }\";\n\n  return mutation;\n}\n\nfunction createCreditCardTokenizationBody(body, options) {\n  var cc = body.creditCard;\n  var billingAddress = cc && cc.billingAddress;\n  var expDate = cc && cc.expirationDate;\n  var expirationMonth =\n    cc && (cc.expirationMonth || (expDate && expDate.split(\"/\")[0].trim()));\n  var expirationYear =\n    cc && (cc.expirationYear || (expDate && expDate.split(\"/\")[1].trim()));\n  var variables = {\n    input: {\n      creditCard: {\n        number: cc && cc.number,\n        expirationMonth: expirationMonth,\n        expirationYear: expirationYear,\n        cvv: cc && cc.cvv,\n        cardholderName: cc && cc.cardholderName,\n      },\n      options: {},\n    },\n  };\n\n  if (options.hasAuthenticationInsight) {\n    variables.authenticationInsightInput = {\n      merchantAccountId: body.merchantAccountId,\n    };\n  }\n\n  if (billingAddress) {\n    variables.input.creditCard.billingAddress = billingAddress;\n  }\n\n  variables.input = addValidationRule(body, variables.input);\n\n  return variables;\n}\n\nfunction addValidationRule(body, input) {\n  var validate;\n\n  if (\n    body.creditCard &&\n    body.creditCard.options &&\n    typeof body.creditCard.options.validate === \"boolean\"\n  ) {\n    validate = body.creditCard.options.validate;\n  } else if (\n    (body.authorizationFingerprint && body.tokenizationKey) ||\n    body.authorizationFingerprint\n  ) {\n    validate = true;\n  } else if (body.tokenizationKey) {\n    validate = false;\n  }\n\n  if (typeof validate === \"boolean\") {\n    input.options = assign(\n      {\n        validate: validate,\n      },\n      input.options\n    );\n  }\n\n  return input;\n}\n\nfunction creditCardTokenization(body) {\n  var options = {\n    hasAuthenticationInsight: Boolean(\n      body.authenticationInsight && body.merchantAccountId\n    ),\n  };\n\n  return {\n    query: createMutation(options),\n    variables: createCreditCardTokenizationBody(body, options),\n    operationName: \"TokenizeCreditCard\",\n  };\n}\n\nmodule.exports = creditCardTokenization;\n\n},{\"../../../../lib/assign\":96}],69:[function(require,module,exports){\n\"use strict\";\n\nvar browserDetection = require(\"../../browser-detection\");\n\nvar features = {\n  tokenize_credit_cards: \"payment_methods/credit_cards\", // eslint-disable-line camelcase\n  configuration: \"configuration\",\n};\n\nvar disallowedInputPaths = [\"creditCard.options.unionPayEnrollment\"];\n\nfunction GraphQL(config) {\n  this._config = config.graphQL;\n}\n\nGraphQL.prototype.getGraphQLEndpoint = function () {\n  return this._config.url;\n};\n\nGraphQL.prototype.isGraphQLRequest = function (url, body) {\n  var featureEnabled;\n  var path = this.getClientApiPath(url);\n\n  if (!this._isGraphQLEnabled() || !path || browserDetection.isIe9()) {\n    return false;\n  }\n\n  featureEnabled = this._config.features.some(function (feature) {\n    return features[feature] === path;\n  });\n\n  if (containsDisallowedlistedKeys(body)) {\n    return false;\n  }\n\n  return featureEnabled;\n};\n\nGraphQL.prototype.getClientApiPath = function (url) {\n  var path;\n  var clientApiPrefix = \"/client_api/v1/\";\n  var pathParts = url.split(clientApiPrefix);\n\n  if (pathParts.length > 1) {\n    path = pathParts[1].split(\"?\")[0];\n  }\n\n  return path;\n};\n\nGraphQL.prototype._isGraphQLEnabled = function () {\n  return Boolean(this._config);\n};\n\nfunction containsDisallowedlistedKeys(body) {\n  return disallowedInputPaths.some(function (keys) {\n    var value = keys.split(\".\").reduce(function (accumulator, key) {\n      return accumulator && accumulator[key];\n    }, body);\n\n    return value !== undefined; // eslint-disable-line no-undefined\n  });\n}\n\nmodule.exports = GraphQL;\n\n},{\"../../browser-detection\":55}],70:[function(require,module,exports){\n\"use strict\";\n\nvar BRAINTREE_VERSION = require(\"../../constants\").BRAINTREE_VERSION;\n\nvar assign = require(\"../../../lib/assign\").assign;\nvar snakeCaseToCamelCase = require(\"../../../lib/snake-case-to-camel-case\");\n\nvar creditCardTokenizationBodyGenerator = require(\"./generators/credit-card-tokenization\");\nvar creditCardTokenizationResponseAdapter = require(\"./adapters/credit-card-tokenization\");\n\nvar configurationBodyGenerator = require(\"./generators/configuration\");\nvar configurationResponseAdapter = require(\"./adapters/configuration\");\n\nvar generators = {\n  \"payment_methods/credit_cards\": creditCardTokenizationBodyGenerator,\n  configuration: configurationBodyGenerator,\n};\nvar adapters = {\n  \"payment_methods/credit_cards\": creditCardTokenizationResponseAdapter,\n  configuration: configurationResponseAdapter,\n};\n\nfunction GraphQLRequest(options) {\n  var clientApiPath = options.graphQL.getClientApiPath(options.url);\n\n  this._graphQL = options.graphQL;\n  this._data = options.data;\n  this._method = options.method;\n  this._headers = options.headers;\n  this._clientSdkMetadata = {\n    source: options.metadata.source,\n    integration: options.metadata.integration,\n    sessionId: options.metadata.sessionId,\n  };\n  this._sendAnalyticsEvent = options.sendAnalyticsEvent || Function.prototype;\n\n  this._generator = generators[clientApiPath];\n  this._adapter = adapters[clientApiPath];\n\n  this._sendAnalyticsEvent(\"graphql.init\");\n}\n\nGraphQLRequest.prototype.getUrl = function () {\n  return this._graphQL.getGraphQLEndpoint();\n};\n\nGraphQLRequest.prototype.getBody = function () {\n  var formattedBody = formatBodyKeys(this._data);\n  var generatedBody = this._generator(formattedBody);\n  var body = assign(\n    { clientSdkMetadata: this._clientSdkMetadata },\n    generatedBody\n  );\n\n  return JSON.stringify(body);\n};\n\nGraphQLRequest.prototype.getMethod = function () {\n  return \"POST\";\n};\n\nGraphQLRequest.prototype.getHeaders = function () {\n  var authorization, headers;\n\n  if (this._data.authorizationFingerprint) {\n    this._sendAnalyticsEvent(\"graphql.authorization-fingerprint\");\n    authorization = this._data.authorizationFingerprint;\n  } else {\n    this._sendAnalyticsEvent(\"graphql.tokenization-key\");\n    authorization = this._data.tokenizationKey;\n  }\n\n  headers = {\n    Authorization: \"Bearer \" + authorization,\n    \"Braintree-Version\": BRAINTREE_VERSION,\n  };\n\n  return assign({}, this._headers, headers);\n};\n\nGraphQLRequest.prototype.adaptResponseBody = function (parsedBody) {\n  return this._adapter(parsedBody, this);\n};\n\nGraphQLRequest.prototype.determineStatus = function (\n  httpStatus,\n  parsedResponse\n) {\n  var status, errorClass;\n\n  if (httpStatus === 200) {\n    errorClass =\n      parsedResponse.errors &&\n      parsedResponse.errors[0] &&\n      parsedResponse.errors[0].extensions &&\n      parsedResponse.errors[0].extensions.errorClass;\n\n    if (parsedResponse.data && !parsedResponse.errors) {\n      status = 200;\n    } else if (errorClass === \"VALIDATION\") {\n      status = 422;\n    } else if (errorClass === \"AUTHORIZATION\") {\n      status = 403;\n    } else if (errorClass === \"AUTHENTICATION\") {\n      status = 401;\n    } else if (isGraphQLError(errorClass, parsedResponse)) {\n      status = 403;\n    } else {\n      status = 500;\n    }\n  } else if (!httpStatus) {\n    status = 500;\n  } else {\n    status = httpStatus;\n  }\n\n  this._sendAnalyticsEvent(\"graphql.status.\" + httpStatus);\n  this._sendAnalyticsEvent(\"graphql.determinedStatus.\" + status);\n\n  return status;\n};\n\nfunction isGraphQLError(errorClass, parsedResponse) {\n  return !errorClass && parsedResponse.errors[0].message;\n}\n\nfunction formatBodyKeys(originalBody) {\n  var body = {};\n\n  Object.keys(originalBody).forEach(function (key) {\n    var camelCaseKey = snakeCaseToCamelCase(key);\n\n    if (typeof originalBody[key] === \"object\") {\n      body[camelCaseKey] = formatBodyKeys(originalBody[key]);\n    } else if (typeof originalBody[key] === \"number\") {\n      body[camelCaseKey] = String(originalBody[key]);\n    } else {\n      body[camelCaseKey] = originalBody[key];\n    }\n  });\n\n  return body;\n}\n\nmodule.exports = GraphQLRequest;\n\n},{\"../../../lib/assign\":96,\"../../../lib/snake-case-to-camel-case\":134,\"../../constants\":57,\"./adapters/configuration\":64,\"./adapters/credit-card-tokenization\":65,\"./generators/configuration\":67,\"./generators/credit-card-tokenization\":68}],71:[function(require,module,exports){\n\"use strict\";\n\nvar ajaxIsAvaliable;\nvar once = require(\"../../lib/once\");\nvar JSONPDriver = require(\"./jsonp-driver\");\nvar AJAXDriver = require(\"./ajax-driver\");\nvar getUserAgent = require(\"./get-user-agent\");\nvar isHTTP = require(\"./is-http\");\n\nfunction isAjaxAvailable() {\n  if (ajaxIsAvaliable == null) {\n    ajaxIsAvaliable = !(isHTTP() && /MSIE\\s(8|9)/.test(getUserAgent()));\n  }\n\n  return ajaxIsAvaliable;\n}\n\nmodule.exports = function (options, cb) {\n  cb = once(cb || Function.prototype);\n  options.method = (options.method || \"GET\").toUpperCase();\n  options.timeout = options.timeout == null ? 60000 : options.timeout;\n  options.data = options.data || {};\n\n  if (isAjaxAvailable()) {\n    AJAXDriver.request(options, cb);\n  } else {\n    JSONPDriver.request(options, cb);\n  }\n};\n\n},{\"../../lib/once\":130,\"./ajax-driver\":61,\"./get-user-agent\":63,\"./is-http\":72,\"./jsonp-driver\":73}],72:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function () {\n  return window.location.protocol === \"http:\";\n};\n\n},{}],73:[function(require,module,exports){\n\"use strict\";\n\nvar head;\nvar uuid = require(\"@braintree/uuid\");\nvar querystring = require(\"../../lib/querystring\");\nvar timeouts = {};\n\nfunction _removeScript(script) {\n  if (script && script.parentNode) {\n    script.parentNode.removeChild(script);\n  }\n}\n\nfunction _createScriptTag(url, callbackName) {\n  var script = document.createElement(\"script\");\n  var done = false;\n\n  script.src = url;\n  script.async = true;\n  script.onerror = function () {\n    window[callbackName]({ message: \"error\", status: 500 });\n  };\n\n  script.onload = script.onreadystatechange = function () {\n    if (done) {\n      return;\n    }\n\n    if (\n      !this.readyState ||\n      this.readyState === \"loaded\" ||\n      this.readyState === \"complete\"\n    ) {\n      done = true;\n      script.onload = script.onreadystatechange = null;\n    }\n  };\n\n  return script;\n}\n\nfunction _cleanupGlobal(callbackName) {\n  try {\n    delete window[callbackName];\n  } catch (_) {\n    window[callbackName] = null;\n  }\n}\n\nfunction _setupTimeout(timeout, callbackName) {\n  timeouts[callbackName] = setTimeout(function () {\n    timeouts[callbackName] = null;\n\n    window[callbackName]({\n      error: \"timeout\",\n      status: -1,\n    });\n\n    window[callbackName] = function () {\n      _cleanupGlobal(callbackName);\n    };\n  }, timeout);\n}\n\nfunction _setupGlobalCallback(script, callback, callbackName) {\n  window[callbackName] = function (response) {\n    var status = response.status || 500;\n    var err = null;\n    var data = null;\n\n    delete response.status;\n\n    if (status >= 400 || status < 200) {\n      err = response;\n    } else {\n      data = response;\n    }\n\n    _cleanupGlobal(callbackName);\n    _removeScript(script);\n\n    clearTimeout(timeouts[callbackName]);\n    callback(err, data, status);\n  };\n}\n\nfunction request(options, callback) {\n  var script;\n  var callbackName = \"callback_json_\" + uuid().replace(/-/g, \"\");\n  var url = options.url;\n  var attrs = options.data;\n  var method = options.method;\n  var timeout = options.timeout;\n\n  url = querystring.queryify(url, attrs);\n  url = querystring.queryify(url, {\n    _method: method,\n    callback: callbackName,\n  });\n\n  script = _createScriptTag(url, callbackName);\n  _setupGlobalCallback(script, callback, callbackName);\n  _setupTimeout(timeout, callbackName);\n\n  if (!head) {\n    head = document.getElementsByTagName(\"head\")[0];\n  }\n\n  head.appendChild(script);\n}\n\nmodule.exports = {\n  request: request,\n};\n\n},{\"../../lib/querystring\":132,\"@braintree/uuid\":47}],74:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (body) {\n  try {\n    body = JSON.parse(body);\n  } catch (e) {\n    /* ignored */\n  }\n\n  return body;\n};\n\n},{}],75:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (method, body) {\n  if (typeof method !== \"string\") {\n    throw new Error(\"Method must be a string\");\n  }\n\n  if (method.toLowerCase() !== \"get\" && body != null) {\n    body = typeof body === \"string\" ? body : JSON.stringify(body);\n  }\n\n  return body;\n};\n\n},{}],76:[function(require,module,exports){\n\"use strict\";\n\nvar isXHRAvailable =\n  typeof window !== \"undefined\" &&\n  window.XMLHttpRequest &&\n  \"withCredentials\" in new window.XMLHttpRequest();\n\nfunction getRequestObject() {\n  return isXHRAvailable\n    ? new window.XMLHttpRequest()\n    : new window.XDomainRequest();\n}\n\nmodule.exports = {\n  isAvailable: isXHRAvailable,\n  getRequestObject: getRequestObject,\n};\n\n},{}],77:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Google Payment - Creation Error Codes\n * @description Errors that occur when [creating the Google Payment component](./module-braintree-web_google-payment.html#.create).\n * @property {MERCHANT} GOOGLE_PAYMENT_NOT_ENABLED Occurs when Google Pay is not enabled on the Braintree control panel.\n * @property {MERCHANT} GOOGLE_PAYMENT_UNSUPPORTED_VERSION Occurs when a Google Pay version is used that is not supported by the Braintree SDK.\n */\n\n/**\n * @name BraintreeError.Google Payment - parseResponse Error Codes\n * @description Errors that occur when [parsing the response from Google](./GooglePayment.html#parseResponse).\n * @property {UNKNOWN} GOOGLE_PAYMENT_GATEWAY_ERROR Occurs when Google Pay could not be tokenized.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  GOOGLE_PAYMENT_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"GOOGLE_PAYMENT_NOT_ENABLED\",\n    message: \"Google Pay is not enabled for this merchant.\",\n  },\n  GOOGLE_PAYMENT_GATEWAY_ERROR: {\n    code: \"GOOGLE_PAYMENT_GATEWAY_ERROR\",\n    message:\n      \"There was an error when tokenizing the Google Pay payment method.\",\n    type: BraintreeError.types.UNKNOWN,\n  },\n  GOOGLE_PAYMENT_UNSUPPORTED_VERSION: {\n    code: \"GOOGLE_PAYMENT_UNSUPPORTED_VERSION\",\n    type: BraintreeError.types.MERCHANT,\n  },\n};\n\n},{\"../lib/braintree-error\":99}],78:[function(require,module,exports){\n\"use strict\";\n\nvar analytics = require(\"../lib/analytics\");\nvar assign = require(\"../lib/assign\").assign;\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar find = require(\"../lib/find\");\nvar generateGooglePayConfiguration = require(\"../lib/generate-google-pay-configuration\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar errors = require(\"./errors\");\nvar methods = require(\"../lib/methods\");\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\nvar CREATE_PAYMENT_DATA_REQUEST_METHODS = {\n  1: \"_createV1PaymentDataRequest\",\n  2: \"_createV2PaymentDataRequest\",\n};\n\n/**\n * @typedef {object} GooglePayment~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} details Additional account details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {boolean} details.isNetworkTokenized True if the card is network tokenized.\n * @property {string} details.bin First six digits of card number.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, `CreditCard` or `AndroidPayCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n */\n\n/**\n * @class GooglePayment\n * @param {object} options Google Payment {@link module:braintree-web/google-payment.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/google-payment.create|braintree-web.google-payment.create} instead.</strong>\n * @classdesc This class represents a Google Payment component produced by {@link module:braintree-web/google-payment.create|braintree-web/google-payment.create}. Instances of this class have methods for initializing the Google Pay flow.\n */\nfunction GooglePayment(options) {\n  this._createPromise = options.createPromise;\n  this._client = options.client;\n  this._useDeferredClient = options.useDeferredClient;\n  // NEXT_MAJOR_VERSION this should be updated to 2 (or whatever the current latest version is)\n  this._googlePayVersion = options.googlePayVersion || 1;\n  this._googleMerchantId = options.googleMerchantId;\n\n  if (this._isUnsupportedGooglePayAPIVersion()) {\n    throw new BraintreeError({\n      code: errors.GOOGLE_PAYMENT_UNSUPPORTED_VERSION.code,\n      message:\n        \"The Braintree SDK does not support Google Pay version \" +\n        this._googlePayVersion +\n        \". Please upgrade the version of your Braintree SDK and contact support if this error persists.\",\n      type: errors.GOOGLE_PAYMENT_UNSUPPORTED_VERSION.type,\n    });\n  }\n}\n\nGooglePayment.prototype._waitForClient = function () {\n  if (this._client) {\n    return Promise.resolve();\n  }\n\n  return this._createPromise.then(\n    function (client) {\n      this._client = client;\n    }.bind(this)\n  );\n};\n\nGooglePayment.prototype._isUnsupportedGooglePayAPIVersion = function () {\n  // if we don't have createPaymentDatqRequest method for the specific\n  // API version, then the version is not supported\n  return !(this._googlePayVersion in CREATE_PAYMENT_DATA_REQUEST_METHODS);\n};\n\nGooglePayment.prototype._getDefaultConfig = function () {\n  if (!this._defaultConfig) {\n    this._defaultConfig = generateGooglePayConfiguration(\n      this._client.getConfiguration(),\n      this._googlePayVersion,\n      this._googleMerchantId\n    );\n  }\n\n  return this._defaultConfig;\n};\n\nGooglePayment.prototype._createV1PaymentDataRequest = function (\n  paymentDataRequest\n) {\n  var defaultConfig = this._getDefaultConfig();\n  var overrideCardNetworks =\n    paymentDataRequest.cardRequirements &&\n    paymentDataRequest.cardRequirements.allowedCardNetworks;\n  var defaultConfigCardNetworks =\n    defaultConfig.cardRequirements.allowedCardNetworks;\n  var allowedCardNetworks = overrideCardNetworks || defaultConfigCardNetworks;\n\n  paymentDataRequest = assign({}, defaultConfig, paymentDataRequest);\n\n  // this way we can preserve allowedCardNetworks from default integration\n  // if merchant did not pass any in `cardRequirements`\n  paymentDataRequest.cardRequirements.allowedCardNetworks = allowedCardNetworks;\n\n  return paymentDataRequest;\n};\n\nGooglePayment.prototype._createV2PaymentDataRequest = function (\n  paymentDataRequest\n) {\n  var defaultConfig = this._getDefaultConfig();\n\n  if (paymentDataRequest.allowedPaymentMethods) {\n    paymentDataRequest.allowedPaymentMethods.forEach(function (paymentMethod) {\n      var defaultPaymentMethod = find(\n        defaultConfig.allowedPaymentMethods,\n        \"type\",\n        paymentMethod.type\n      );\n\n      if (defaultPaymentMethod) {\n        applyDefaultsToPaymentMethodConfiguration(\n          paymentMethod,\n          defaultPaymentMethod\n        );\n      }\n    });\n  }\n\n  paymentDataRequest = assign({}, defaultConfig, paymentDataRequest);\n\n  return paymentDataRequest;\n};\n\n/**\n * Create a configuration object for use in the `loadPaymentData` method.\n *\n * **Note**: Version 1 of the Google Pay Api is deprecated and will become unsupported in a future version. Until then, version 1 will continue to be used by default, and version 1 schema parameters and overrides will remain functional on existing integrations. However, new integrations and all following examples will be presented in the GooglePay version 2 schema. See [Google Pay's upgrade guide](https://developers.google.com/pay/api/web/guides/resources/update-to-latest-version) to see how to update your integration.\n *\n * If `options.googlePayVersion === 2` was set during the initial {@link module:braintree-web/google-payment.create|create} call, overrides must match the Google Pay v2 schema to be valid.\n *\n * @public\n * @param {object} overrides The supplied parameters for creating the PaymentDataRequest object. Required parameters are:\n *  @param {object} overrides.transactionInfo Object according to the [Google Pay Transaction Info](https://developers.google.com/pay/api/web/reference/object#TransactionInfo) spec.\n *  Optionally, any of the parameters in the [PaymentDataRequest](https://developers.google.com/pay/api/web/reference/object#PaymentDataRequest) parameters can be overridden, but note that it is recommended only to override top level parameters to avoid squashing deeply nested configuration objects. An example can be found below showing how to safely edit these deeply nested objects.\n * @example\n * var paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n *   merchantInfo: {\n *     merchantId: 'my-merchant-id-from-google'\n *   },\n *   transactionInfo: {\n *     currencyCode: 'USD',\n *     totalPriceStatus: 'FINAL',\n *     totalPrice: '100.00'\n *   }\n * });\n *\n * // Update card payment methods to require billing address\n * var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods;\n * cardPaymentMethod.parameters.billingAddressRequired = true;\n * cardPaymentMethod.parameters.billingAddressParameters = {\n *   format: 'FULL',\n *   phoneNumberRequired: true\n * };\n *\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * })\n *\n * paymentsClient.loadPaymentData(paymentDataRequest).then(function (response) {\n *   // handle response with googlePaymentInstance.parseResponse\n *   // (see below)\n * });\n * @example <caption>With deferred client</caption>\n * googlePaymentInstance.createPaymentDataRequest({\n *   merchantInfo: {\n *     merchantId: 'my-merchant-id-from-google'\n *   },\n *   transactionInfo: {\n *     currencyCode: 'USD',\n *     totalPriceStatus: 'FINAL',\n *     totalPrice: '100.00'\n *   }\n * }).then(function (paymentDataRequest) {\n *   // Update card payment methods to require billing address\n *   var cardPaymentMethod = paymentDataRequest.allowedPaymentMethods;\n *   cardPaymentMethod.parameters.billingAddressRequired = true;\n *   cardPaymentMethod.parameters.billingAddressParameters = {\n *     format: 'FULL',\n *     phoneNumberRequired: true\n *   };\n *\n *   var paymentsClient = new google.payments.api.PaymentsClient({\n *     environment: 'TEST' // or 'PRODUCTION'\n *   })\n *\n *   return paymentsClient.loadPaymentData(paymentDataRequest);\n * }).then(function (response) {\n *   // handle response with googlePaymentInstance.parseResponse\n *   // (see below)\n * });\n * @returns {object|Promise} Returns a configuration object for Google PaymentDataRequest. If instantiated with `useDeferredClient` and an `authorization` it will return a promise that resolves with the configuration.\n */\nGooglePayment.prototype.createPaymentDataRequest = function (overrides) {\n  if (!this._useDeferredClient) {\n    return this._createPaymentDataRequestSyncronously(overrides);\n  }\n\n  return this._waitForClient().then(\n    function () {\n      return this._createPaymentDataRequestSyncronously(overrides);\n    }.bind(this)\n  );\n};\n\nGooglePayment.prototype._createPaymentDataRequestSyncronously = function (\n  overrides\n) {\n  var paymentDataRequest = assign({}, overrides);\n  var version = this._googlePayVersion;\n  var createPaymentDataRequestMethod =\n    CREATE_PAYMENT_DATA_REQUEST_METHODS[version];\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"google-payment.v\" + version + \".createPaymentDataRequest\"\n  );\n\n  return this[createPaymentDataRequestMethod](paymentDataRequest);\n};\n\n/**\n * Parse the response from the tokenization.\n * @public\n * @param {object} response The response back from the Google Pay tokenization.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link GooglePay~tokenizePayload|tokenizePayload}. If no callback is provided, `parseResponse` returns a promise that resolves with a {@link GooglePayment~tokenizePayload|tokenizePayload}.\n * @example with callback\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * })\n *\n * paymentsClient.loadPaymentData(paymentDataRequestFromCreatePaymentDataRequest).then(function (response) {\n *   googlePaymentInstance.parseResponse(response, function (err, data) {\n *     if (err) {\n *       // handle errors\n *     }\n *     // send parsedResponse.nonce to your server\n *   });\n * });\n * @example with promise\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * })\n *\n * paymentsClient.loadPaymentData(paymentDataRequestFromCreatePaymentDataRequest).then(function (response) {\n *   return googlePaymentInstance.parseResponse(response);\n * }).then(function (parsedResponse) {\n *   // send parsedResponse.nonce to your server\n * }).catch(function (err) {\n *   // handle errors\n * });\n * @returns {(Promise|void)} Returns a promise that resolves the parsed response if no callback is provided.\n */\nGooglePayment.prototype.parseResponse = function (response) {\n  var self = this;\n\n  return Promise.resolve()\n    .then(function () {\n      var payload;\n      var rawResponse =\n        response.apiVersion === 2\n          ? response.paymentMethodData.tokenizationData.token\n          : response.paymentMethodToken.token;\n      var parsedResponse = JSON.parse(rawResponse);\n      var error = parsedResponse.error;\n\n      if (error) {\n        return Promise.reject(error);\n      }\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"google-payment.parseResponse.succeeded\"\n      );\n\n      if (parsedResponse.paypalAccounts) {\n        payload = parsedResponse.paypalAccounts[0];\n        analytics.sendEvent(\n          self._createPromise,\n          \"google-payment.parseResponse.succeeded.paypal\"\n        );\n\n        return Promise.resolve({\n          nonce: payload.nonce,\n          type: payload.type,\n          description: payload.description,\n        });\n      }\n      payload = parsedResponse.androidPayCards[0];\n      analytics.sendEvent(\n        self._createPromise,\n        \"google-payment.parseResponse.succeeded.google-payment\"\n      );\n\n      return Promise.resolve({\n        nonce: payload.nonce,\n        type: payload.type,\n        description: payload.description,\n        details: {\n          cardType: payload.details.cardType,\n          lastFour: payload.details.lastFour,\n          lastTwo: payload.details.lastTwo,\n          isNetworkTokenized: payload.details.isNetworkTokenized,\n          bin: payload.details.bin,\n        },\n        binData: payload.binData,\n      });\n    })\n    .catch(function (error) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"google-payment.parseResponse.failed\"\n      );\n\n      return Promise.reject(\n        new BraintreeError({\n          code: errors.GOOGLE_PAYMENT_GATEWAY_ERROR.code,\n          message: errors.GOOGLE_PAYMENT_GATEWAY_ERROR.message,\n          type: errors.GOOGLE_PAYMENT_GATEWAY_ERROR.type,\n          details: {\n            originalError: error,\n          },\n        })\n      );\n    });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/google-payment.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * googlePaymentInstance.teardown();\n * @example <caption>With callback</caption>\n * googlePaymentInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nGooglePayment.prototype.teardown = function () {\n  convertMethodsToError(this, methods(GooglePayment.prototype));\n\n  return Promise.resolve();\n};\n\nfunction applyDefaultsToPaymentMethodConfiguration(\n  merchantSubmittedPaymentMethod,\n  defaultPaymentMethod\n) {\n  Object.keys(defaultPaymentMethod).forEach(function (parameter) {\n    if (typeof defaultPaymentMethod[parameter] === \"object\") {\n      merchantSubmittedPaymentMethod[parameter] = assign(\n        {},\n        defaultPaymentMethod[parameter],\n        merchantSubmittedPaymentMethod[parameter]\n      );\n    } else {\n      merchantSubmittedPaymentMethod[parameter] =\n        merchantSubmittedPaymentMethod[parameter] ||\n        defaultPaymentMethod[parameter];\n    }\n  });\n}\n\nmodule.exports = wrapPromise.wrapPrototype(GooglePayment);\n\n},{\"../lib/analytics\":94,\"../lib/assign\":96,\"../lib/braintree-error\":99,\"../lib/convert-methods-to-error\":101,\"../lib/find\":111,\"../lib/generate-google-pay-configuration\":123,\"../lib/methods\":129,\"../lib/promise\":131,\"./errors\":77,\"@braintree/wrap-promise\":51}],79:[function(require,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/google-payment\n * @description A component to integrate with Google Pay. The majority of the integration uses [Google's pay.js JavaScript file](https://pay.google.com/gp/p/js/pay.js). The Braintree component generates the configuration object necessary for Google Pay to initiate the Payment Request and parse the returned data to retrieve the payment method nonce which is used to process the transaction on the server.\n */\n\nvar GooglePayment = require(\"./google-payment\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Promise = require(\"../lib/promise\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar VERSION = \"3.88.3\";\nvar errors = require(\"./errors\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.useDeferredClient] Used in conjunction with `authorization`, allows the Google Payment instance to be available right away by fetching the client configuration in the background. When this option is used, {@link GooglePayment#createPaymentDataRequest} will return a promise that resolves with the configuration instead of returning synchronously.\n * @param {number} [options.googlePayVersion] The version of the Google Pay API to use. Value of 2 is required to accept parameters documented [by Google](https://developers.google.com/pay/api/web/reference/object). Omit this parameter to use the deprecated Google Pay Version 1.\n * @param {string} [options.googleMerchantId] A Google merchant identifier issued after your website is approved by Google. Required when PaymentsClient is initialized with an environment property of PRODUCTION, but may be omitted in TEST environment.\n * @param {callback} [callback] The second argument, `data`, is the {@link GooglePayment} instance. If no callback is provided, `create` returns a promise that resolves with the {@link GooglePayment} instance.\n * @example <caption>Simple Example</caption>\n * // include https://pay.google.com/gp/p/js/pay.js in a script tag\n * // on your page to load the `google.payments.api.PaymentsClient` global object.\n *\n * var paymentButton = document.querySelector('#google-pay-button');\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * });\n *\n * braintree.client.create({\n *   authorization: 'tokenization-key-or-client-token'\n * }).then(function (clientInstance) {\n *   return braintree.googlePayment.create({\n *     client: clientInstance,\n *      googlePayVersion: 2,\n *      googleMerchantId: 'your-merchant-id-from-google'\n *   });\n * }).then(function (googlePaymentInstance) {\n *   paymentButton.addEventListener('click', function (event) {\n *     var paymentDataRequest;\n *\n *     event.preventDefault();\n *\n *     paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n *       transactionInfo: {\n *         currencyCode: 'USD',\n *         totalPriceStatus: 'FINAL',\n *         totalPrice: '100.00'\n *       }\n *     });\n *\n *     paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n *       return googlePaymentInstance.parseResponse(paymentData);\n *     }).then(function (result) {\n *       // send result.nonce to your server\n *     }).catch(function (err) {\n *       // handle err\n *     });\n *   });\n * });\n * @example <caption>Check Browser and Customer Compatibility</caption>\n * var paymentsClient = new google.payments.api.PaymentsClient({\n *   environment: 'TEST' // or 'PRODUCTION'\n * });\n *\n * function setupGooglePayButton(googlePaymentInstance) {\n *   var button = document.createElement('button');\n *\n *   button.id = 'google-pay';\n *   button.appendChild(document.createTextNode('Google Pay'));\n *   button.addEventListener('click', function (event) {\n *     var paymentRequestData;\n *\n *     event.preventDefault();\n *\n *     paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({\n *       transactionInfo: {\n *         currencyCode: 'USD',\n *         totalPriceStatus: 'FINAL',\n *         totalPrice: '100.00' // your amount\n *       }\n *     });\n *\n *     paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n *       return googlePaymentInstance.parseResponse(paymentData);\n *       }).then(function (result) {\n *       // send result.nonce to your server\n *     }).catch(function (err) {\n *       // handle errors\n *     });\n *   });\n *\n *   document.getElementById('container').appendChild(button);\n * }\n *\n * braintree.client.create({\n *   authorization: 'tokenization-key-or-client-token'\n * }).then(function (clientInstance) {\n *   return braintree.googlePayment.create({\n *     client: clientInstance,\n *     googlePayVersion: 2,\n *     googleMerchantId: 'your-merchant-id-from-google'\n *   });\n * }).then(function (googlePaymentInstance) {\n *\n *   return paymentsClient.isReadyToPay({\n *     // see https://developers.google.com/pay/api/web/reference/object#IsReadyToPayRequest for all options\n *     apiVersion: 2,\n *     apiVersionMinor: 0,\n *     allowedPaymentMethods: googlePaymentInstance.createPaymentDataRequest().allowedPaymentMethods,\n *     existingPaymentMethodRequired: true\n *   });\n * }).then(function (response) {\n *   if (response.result) {\n *     setupGooglePayButton(googlePaymentInstance);\n *   }\n * }).catch(function (err) {\n *   // handle setup errors\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"Google Pay\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var createPromise, instance;\n\n      createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          var configuration = client.getConfiguration();\n\n          options.client = client;\n          if (!configuration.gatewayConfiguration.androidPay) {\n            return Promise.reject(\n              new BraintreeError(errors.GOOGLE_PAYMENT_NOT_ENABLED)\n            );\n          }\n\n          return client;\n        });\n\n      options.createPromise = createPromise;\n      instance = new GooglePayment(options);\n\n      if (!options.useDeferredClient) {\n        return createPromise.then(function (client) {\n          instance._client = client;\n\n          return instance;\n        });\n      }\n\n      return instance;\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"../lib/promise\":131,\"./errors\":77,\"./google-payment\":78,\"@braintree/wrap-promise\":51}],80:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../../lib/braintree-error\");\nvar errors = require(\"../shared/errors\");\nvar allowedAttributes = require(\"../shared/constants\").allowedAttributes;\n\nfunction attributeValidationError(attribute, value) {\n  var err;\n\n  if (!allowedAttributes.hasOwnProperty(attribute)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED.type,\n      code: errors.HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED.code,\n      message:\n        'The \"' + attribute + '\" attribute is not supported in Hosted Fields.',\n    });\n  } else if (value != null && !_isValid(attribute, value)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED.type,\n      code: errors.HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED.code,\n      message:\n        'Value \"' +\n        value +\n        '\" is not allowed for \"' +\n        attribute +\n        '\" attribute.',\n    });\n  }\n\n  return err;\n}\n\nfunction _isValid(attribute, value) {\n  if (allowedAttributes[attribute] === \"string\") {\n    return typeof value === \"string\" || typeof value === \"number\";\n  } else if (allowedAttributes[attribute] === \"boolean\") {\n    return String(value) === \"true\" || String(value) === \"false\";\n  }\n\n  return false;\n}\n\nmodule.exports = attributeValidationError;\n\n},{\"../../lib/braintree-error\":99,\"../shared/constants\":88,\"../shared/errors\":89}],81:[function(require,module,exports){\n\"use strict\";\n\nvar constants = require(\"../shared/constants\");\nvar useMin = require(\"../../lib/use-min\");\n\nmodule.exports = function composeUrl(assetsUrl, componentId, isDebug) {\n  return (\n    assetsUrl +\n    \"/web/\" +\n    constants.VERSION +\n    \"/html/hosted-fields-frame\" +\n    useMin(isDebug) +\n    \".html#\" +\n    componentId\n  );\n};\n\n},{\"../../lib/use-min\":135,\"../shared/constants\":88}],82:[function(require,module,exports){\n\"use strict\";\n\nvar directions = require(\"../shared/constants\").navigationDirections;\nvar browserDetection = require(\"../shared/browser-detection\");\nvar focusIntercept = require(\"../shared/focus-intercept\");\nvar findParentTags = require(\"../shared/find-parent-tags\");\nvar userFocusableTagNames = [\"INPUT\", \"SELECT\", \"TEXTAREA\"];\n// Devices with software keyboards do not or cannot focus on input types\n// that do not require keyboard-based interaction.\nvar unfocusedInputTypes = [\n  \"hidden\",\n  \"button\",\n  \"reset\",\n  \"submit\",\n  \"checkbox\",\n  \"radio\",\n  \"file\",\n];\n\nfunction _isUserFocusableElement(element) {\n  if (!browserDetection.hasSoftwareKeyboard()) {\n    // on desktop browsers, the only input type that isn't focusable\n    // is the hidden input\n    return element.type !== \"hidden\";\n  }\n\n  return (\n    userFocusableTagNames.indexOf(element.tagName) > -1 &&\n    unfocusedInputTypes.indexOf(element.type) < 0\n  );\n}\n\nfunction _createNavigationHelper(direction, numberOfElementsInForm) {\n  switch (direction) {\n    case directions.BACK:\n      return {\n        checkIndexBounds: function (index) {\n          return index < 0;\n        },\n        indexChange: -1,\n      };\n    case directions.FORWARD:\n      return {\n        checkIndexBounds: function (index) {\n          return index > numberOfElementsInForm - 1;\n        },\n        indexChange: 1,\n      };\n    default:\n  }\n\n  return {};\n}\n\nfunction _findFirstFocusableElement(elementsInForm) {\n  var elementsIndex, element;\n\n  for (\n    elementsIndex = 0;\n    elementsIndex < elementsInForm.length;\n    elementsIndex++\n  ) {\n    element = elementsInForm[elementsIndex];\n\n    if (_isUserFocusableElement(element)) {\n      return element;\n    }\n  }\n\n  return null;\n}\n\nmodule.exports = {\n  removeExtraFocusElements: function (checkoutForm, onRemoveFocusIntercepts) {\n    var elements = Array.prototype.slice.call(checkoutForm.elements);\n    var firstFocusableInput = _findFirstFocusableElement(elements);\n    var lastFocusableInput = _findFirstFocusableElement(elements.reverse());\n\n    // these should never be identical, because there will at least be the\n    // before and the after input\n    [firstFocusableInput, lastFocusableInput].forEach(function (input) {\n      if (!input) {\n        return;\n      }\n\n      if (focusIntercept.matchFocusElement(input.getAttribute(\"id\"))) {\n        onRemoveFocusIntercepts(input.getAttribute(\"id\"));\n      }\n    });\n  },\n\n  createFocusChangeHandler: function (hostedFieldsId, callbacks) {\n    return function (data) {\n      var currentIndex, targetElement, checkoutForm, navHelper;\n      var sourceElement = document.getElementById(\n        \"bt-\" + data.field + \"-\" + data.direction + \"-\" + hostedFieldsId\n      );\n\n      if (!sourceElement) {\n        return;\n      }\n\n      checkoutForm = findParentTags(sourceElement, \"form\")[0];\n\n      if (document.forms.length < 1 || !checkoutForm) {\n        callbacks.onRemoveFocusIntercepts();\n\n        return;\n      }\n\n      checkoutForm = [].slice.call(checkoutForm.elements);\n      currentIndex = checkoutForm.indexOf(sourceElement);\n      navHelper = _createNavigationHelper(data.direction, checkoutForm.length);\n\n      do {\n        currentIndex += navHelper.indexChange;\n        if (navHelper.checkIndexBounds(currentIndex)) {\n          return;\n        }\n        targetElement = checkoutForm[currentIndex];\n      } while (!_isUserFocusableElement(targetElement));\n\n      if (focusIntercept.matchFocusElement(targetElement.getAttribute(\"id\"))) {\n        callbacks.onTriggerInputFocus(\n          targetElement.getAttribute(\"data-braintree-type\")\n        );\n      } else {\n        targetElement.focus();\n      }\n    };\n  },\n};\n\n},{\"../shared/browser-detection\":87,\"../shared/constants\":88,\"../shared/find-parent-tags\":90,\"../shared/focus-intercept\":91}],83:[function(require,module,exports){\n\"use strict\";\n\nvar allowedStyles = require(\"../shared/constants\").allowedStyles;\n\nmodule.exports = function getStylesFromClass(cssClass) {\n  var element = document.createElement(\"input\");\n  var styles = {};\n  var computedStyles;\n\n  if (cssClass[0] === \".\") {\n    cssClass = cssClass.substring(1);\n  }\n\n  element.className = cssClass;\n  element.style.display = \"none !important\";\n  element.style.position = \"fixed !important\";\n  element.style.left = \"-99999px !important\";\n  element.style.top = \"-99999px !important\";\n  document.body.appendChild(element);\n\n  computedStyles = window.getComputedStyle(element);\n\n  allowedStyles.forEach(function (style) {\n    var value = computedStyles[style];\n\n    if (value) {\n      styles[style] = value;\n    }\n  });\n\n  document.body.removeChild(element);\n\n  return styles;\n};\n\n},{\"../shared/constants\":88}],84:[function(require,module,exports){\n\"use strict\";\n\nvar assign = require(\"../../lib/assign\").assign;\nvar createAssetsUrl = require(\"../../lib/create-assets-url\");\nvar isVerifiedDomain = require(\"../../lib/is-verified-domain\");\nvar Destructor = require(\"../../lib/destructor\");\nvar classList = require(\"@braintree/class-list\");\nvar iFramer = require(\"@braintree/iframer\");\nvar Bus = require(\"framebus\");\nvar createDeferredClient = require(\"../../lib/create-deferred-client\");\nvar BraintreeError = require(\"../../lib/braintree-error\");\nvar composeUrl = require(\"./compose-url\");\nvar getStylesFromClass = require(\"./get-styles-from-class\");\nvar constants = require(\"../shared/constants\");\nvar errors = require(\"../shared/errors\");\nvar INTEGRATION_TIMEOUT_MS =\n  require(\"../../lib/constants\").INTEGRATION_TIMEOUT_MS;\nvar uuid = require(\"@braintree/uuid\");\nvar findParentTags = require(\"../shared/find-parent-tags\");\nvar browserDetection = require(\"../shared/browser-detection\");\nvar events = constants.events;\nvar EventEmitter = require(\"@braintree/event-emitter\");\nvar injectFrame = require(\"./inject-frame\");\nvar analytics = require(\"../../lib/analytics\");\nvar allowedFields = constants.allowedFields;\nvar methods = require(\"../../lib/methods\");\nvar shadow = require(\"../../lib/shadow\");\nvar findRootNode = require(\"../../lib/find-root-node\");\nvar convertMethodsToError = require(\"../../lib/convert-methods-to-error\");\nvar sharedErrors = require(\"../../lib/errors\");\nvar getCardTypes = require(\"../shared/get-card-types\");\nvar attributeValidationError = require(\"./attribute-validation-error\");\nvar Promise = require(\"../../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar focusChange = require(\"./focus-change\");\nvar destroyFocusIntercept = require(\"../shared/focus-intercept\").destroy;\n\nvar SAFARI_FOCUS_TIMEOUT = 5;\n\n/**\n * @typedef {object} HostedFields~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {object} authenticationInsight Info about the [regulatory environment](https://developer.paypal.com/braintree/docs/guides/3d-secure/advanced-options/javascript/v3#authentication-insight) of the tokenized card. Only available if `authenticationInsight.merchantAccountId` is passed in the `tokenize` method options.\n * @property {string} authenticationInsight.regulationEnvironment The [regulation environment](https://developer.paypal.com/braintree/docs/guides/3d-secure/advanced-options/javascript/v3#authentication-insight) for the tokenized card.\n * @property {object} details Additional account details.\n * @property {string} details.bin The BIN number of the card.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.expirationMonth The expiration month of the card.\n * @property {string} details.expirationYear The expiration year of the card.\n * @property {string} details.cardholderName The cardholder name tokenized with the card.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `CreditCard`.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n */\n\n/**\n * @typedef {object} HostedFields~stateObject\n * @description The event payload sent from {@link HostedFields#on|on} or {@link HostedFields#getState|getState}.\n * @property {HostedFields~hostedFieldsCard[]} cards\n * This will return an array of potential {@link HostedFields~hostedFieldsCard|cards}. If the card type has been determined, the array will contain only one card.\n * Internally, Hosted Fields uses <a href=\"https://github.com/braintree/credit-card-type\">credit-card-type</a>,\n * an open-source card detection library.\n * @property {string} emittedBy\n * The name of the field associated with an event. This will not be included if returned by {@link HostedFields#getState|getState}. It will be one of the following strings:<br>\n * - `\"number\"`\n * - `\"cvv\"`\n * - `\"expirationDate\"`\n * - `\"expirationMonth\"`\n * - `\"expirationYear\"`\n * - `\"postalCode\"`\n * - `\"cardholderName\"`\n * @property {object} fields\n * @property {?HostedFields~hostedFieldsFieldData} fields.number {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the number field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.cvv {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the CVV field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.expirationDate {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the expiration date field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.expirationMonth {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the expiration month field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.expirationYear {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the expiration year field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.postalCode {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the postal code field, if it is present.\n * @property {?HostedFields~hostedFieldsFieldData} fields.cardholderName {@link HostedFields~hostedFieldsFieldData|hostedFieldsFieldData} for the cardholder name field, if it is present.\n */\n\n/**\n * @typedef {object} HostedFields~binPayload\n * @description The event payload sent from {@link HostedFields#on|on} when the {@link HostedFields#event:binAvailable|binAvailable} event is emitted.\n * @property {string} bin The first 6 digits of the card number.\n */\n\n/**\n * @typedef {object} HostedFields~hostedFieldsFieldData\n * @description Data about Hosted Fields fields, sent in {@link HostedFields~stateObject|stateObjects}.\n * @property {HTMLElement} container Reference to the container DOM element on your page associated with the current event.\n * @property {boolean} isFocused Whether or not the input is currently focused.\n * @property {boolean} isEmpty Whether or not the user has entered a value in the input.\n * @property {boolean} isPotentiallyValid\n * A determination based on the future validity of the input value.\n * This is helpful when a user is entering a card number and types <code>\"41\"</code>.\n * While that value is not valid for submission, it is still possible for\n * it to become a fully qualified entry. However, if the user enters <code>\"4x\"</code>\n * it is clear that the card number can never become valid and isPotentiallyValid will\n * return false.\n * @property {boolean} isValid Whether or not the value of the associated input is <i>fully</i> qualified for submission.\n */\n\n/**\n * @typedef {object} HostedFields~hostedFieldsCard\n * @description Information about the card type, sent in {@link HostedFields~stateObject|stateObjects}.\n * @property {string} type The code-friendly representation of the card type. It will be one of the following strings:\n * - `american-express`\n * - `diners-club`\n * - `discover`\n * - `jcb`\n * - `maestro`\n * - `master-card`\n * - `unionpay`\n * - `visa`\n * @property {string} niceType The pretty-printed card type. It will be one of the following strings:\n * - `American Express`\n * - `Diners Club`\n * - `Discover`\n * - `JCB`\n * - `Maestro`\n * - `MasterCard`\n * - `UnionPay`\n * - `Visa`\n * @property {object} code\n * This object contains data relevant to the security code requirements of the card brand.\n * For example, on a Visa card there will be a <code>CVV</code> of 3 digits, whereas an\n * American Express card requires a 4-digit <code>CID</code>.\n * @property {string} code.name <code>\"CVV\"</code> <code>\"CID\"</code> <code>\"CVC\"</code>\n * @property {number} code.size The expected length of the security code. Typically, this is 3 or 4.\n */\n\n/**\n * @name HostedFields#on\n * @function\n * @param {string} event The name of the event to which you are subscribing.\n * @param {function} handler A callback to handle the event.\n * @description Subscribes a handler function to a named event.\n *\n * **Events that emit a {@link HostedFields~stateObject|stateObject}.**\n * * {@link HostedFields#event:blur|blur}\n * * {@link HostedFields#event:focus|focus}\n * * {@link HostedFields#event:empty|empty}\n * * {@link HostedFields#event:notEmpty|notEmpty}\n * * {@link HostedFields#event:cardTypeChange|cardTypeChange}\n * * {@link HostedFields#event:validityChange|validityChange}\n * * {@link HostedFields#event:inputSubmitRequest|inputSubmitRequest}\n *\n * **Other Events**\n * * {@link HostedFields#event:binAvailable|binAvailable} - emits a {@link HostedFields~binPayload|bin payload}. Note: If you are using a [Referrer-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy) header that prevents the origin from being sent, this event will not fire.\n * @example\n * <caption>Listening to a Hosted Field event, in this case 'focus'</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('focus', function (event) {\n *     console.log(event.emittedBy, 'has been focused');\n *   });\n * });\n * @returns {void}\n */\n\n/**\n * @name HostedFields#off\n * @function\n * @param {string} event The name of the event to which you are unsubscribing.\n * @param {function} handler The callback for the event you are unsubscribing from.\n * @description Unsubscribes the handler function to a named event.\n * @example\n * <caption>Subscribing and then unsubscribing from a Hosted Field event, in this case 'focus'</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   var callback = function (event) {\n *     console.log(event.emittedBy, 'has been focused');\n *   };\n *   hostedFieldsInstance.on('focus', callback);\n *\n *   // later on\n *   hostedFieldsInstance.off('focus', callback);\n * });\n * @returns {void}\n */\n\n/**\n * This event is emitted when the user requests submission of an input field, such as by pressing the Enter or Return key on their keyboard, or mobile equivalent.\n * @event HostedFields#inputSubmitRequest\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Clicking a submit button upon hitting Enter (or equivalent) within a Hosted Field</caption>\n * var hostedFields = require('braintree-web/hosted-fields');\n * var submitButton = document.querySelector('input[type=\"submit\"]');\n *\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('inputSubmitRequest', function () {\n *     // User requested submission, e.g. by pressing Enter or equivalent\n *     submitButton.click();\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field transitions from having data to being empty.\n * @event HostedFields#empty\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to an empty event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('empty', function (event) {\n *     console.log(event.emittedBy, 'is now empty');\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field transitions from being empty to having data.\n * @event HostedFields#notEmpty\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to an notEmpty event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('notEmpty', function (event) {\n *     console.log(event.emittedBy, 'is now not empty');\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field loses focus.\n * @event HostedFields#blur\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a blur event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('blur', function (event) {\n *     console.log(event.emittedBy, 'lost focus');\n *   });\n * });\n */\n\n/**\n * This event is emitted when a field gains focus.\n * @event HostedFields#focus\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a focus event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('focus', function (event) {\n *     console.log(event.emittedBy, 'gained focus');\n *   });\n * });\n */\n\n/**\n * This event is emitted when activity within the number field has changed such that the possible card type has changed.\n * @event HostedFields#cardTypeChange\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a cardTypeChange event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('cardTypeChange', function (event) {\n *     if (event.cards.length === 1) {\n *       console.log(event.cards[0].type);\n *     } else {\n *       console.log('Type of card not yet known');\n *     }\n *   });\n * });\n */\n\n/**\n * This event is emitted when the validity of a field has changed. Validity is represented in the {@link HostedFields~stateObject|stateObject} as two booleans: `isValid` and `isPotentiallyValid`.\n * @event HostedFields#validityChange\n * @type {HostedFields~stateObject}\n * @example\n * <caption>Listening to a validityChange event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('validityChange', function (event) {\n *     var field = event.fields[event.emittedBy];\n *\n *     if (field.isValid) {\n *       console.log(event.emittedBy, 'is fully valid');\n *     } else if (field.isPotentiallyValid) {\n *       console.log(event.emittedBy, 'is potentially valid');\n *     } else {\n *       console.log(event.emittedBy, 'is not valid');\n *     }\n *   });\n * });\n */\n\n/**\n * This event is emitted when the first 6 digits of the card number have been entered by the customer.\n * @event HostedFields#binAvailable\n * @type {string}\n * @example\n * <caption>Listening to a `binAvailable` event</caption>\n * hostedFields.create({ ... }, function (createErr, hostedFieldsInstance) {\n *   hostedFieldsInstance.on('binAvailable', function (event) {\n *     event.bin // send bin to 3rd party bin service\n *   });\n * });\n */\n\nfunction createInputEventHandler(fields) {\n  return function (eventData) {\n    var field;\n    var merchantPayload = eventData.merchantPayload;\n    var emittedBy = merchantPayload.emittedBy;\n    var container = fields[emittedBy].containerElement;\n\n    Object.keys(merchantPayload.fields).forEach(function (key) {\n      merchantPayload.fields[key].container = fields[key].containerElement;\n    });\n\n    field = merchantPayload.fields[emittedBy];\n\n    classList.toggle(\n      container,\n      constants.externalClasses.FOCUSED,\n      field.isFocused\n    );\n    classList.toggle(container, constants.externalClasses.VALID, field.isValid);\n    classList.toggle(\n      container,\n      constants.externalClasses.INVALID,\n      !field.isPotentiallyValid\n    );\n\n    // eslint-disable-next-line no-invalid-this\n    this._state = {\n      cards: merchantPayload.cards,\n      fields: merchantPayload.fields,\n    };\n\n    this._emit(eventData.type, merchantPayload); // eslint-disable-line no-invalid-this\n  };\n}\n\nfunction isVisibleEnough(node) {\n  var boundingBox = node.getBoundingClientRect();\n  var verticalMidpoint = Math.floor(boundingBox.height / 2);\n  var horizontalMidpoint = Math.floor(boundingBox.width / 2);\n\n  return (\n    boundingBox.top <\n      (window.innerHeight - verticalMidpoint ||\n        document.documentElement.clientHeight - verticalMidpoint) &&\n    boundingBox.right > horizontalMidpoint &&\n    boundingBox.bottom > verticalMidpoint &&\n    boundingBox.left <\n      (window.innerWidth - horizontalMidpoint ||\n        document.documentElement.clientWidth - horizontalMidpoint)\n  );\n}\n\n/**\n * @class HostedFields\n * @param {object} options The Hosted Fields {@link module:braintree-web/hosted-fields.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/hosted-fields.create|braintree-web.hosted-fields.create} instead.</strong>\n * @classdesc This class represents a Hosted Fields component produced by {@link module:braintree-web/hosted-fields.create|braintree-web/hosted-fields.create}. Instances of this class have methods for interacting with the input fields within Hosted Fields' iframes.\n */\nfunction HostedFields(options) {\n  var failureTimeout, clientConfig, assetsUrl, isDebug, hostedFieldsUrl;\n  var self = this;\n  var fields = {};\n  var frameReadyPromiseResolveFunctions = {};\n  var frameReadyPromises = [];\n  var componentId = uuid();\n\n  this._merchantConfigurationOptions = assign({}, options);\n\n  if (options.client) {\n    clientConfig = options.client.getConfiguration();\n    assetsUrl = clientConfig.gatewayConfiguration.assetsUrl;\n    isDebug = clientConfig.isDebug;\n  } else {\n    assetsUrl = createAssetsUrl.create(options.authorization);\n    isDebug = Boolean(options.isDebug);\n  }\n\n  this._clientPromise = createDeferredClient.create({\n    client: options.client,\n    authorization: options.authorization,\n    debug: isDebug,\n    assetsUrl: assetsUrl,\n    name: \"Hosted Fields\",\n  });\n\n  hostedFieldsUrl = composeUrl(assetsUrl, componentId, isDebug);\n\n  if (!options.fields || Object.keys(options.fields).length === 0) {\n    throw new BraintreeError({\n      type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type,\n      code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code,\n      message: \"options.fields is required when instantiating Hosted Fields.\",\n    });\n  }\n\n  EventEmitter.call(this);\n\n  this._injectedNodes = [];\n  this._destructor = new Destructor();\n  this._fields = fields;\n  this._state = {\n    fields: {},\n    cards: getCardTypes(\"\"),\n  };\n\n  this._bus = new Bus({\n    channel: componentId,\n    verifyDomain: isVerifiedDomain,\n    targetFrames: [],\n  });\n\n  this._destructor.registerFunctionForTeardown(function () {\n    self._bus.teardown();\n  });\n\n  // NEXT_MAJOR_VERSION analytics events should have present tense verbs\n  if (!options.client) {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"custom.hosted-fields.initialized.deferred-client\"\n    );\n  } else {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"custom.hosted-fields.initialized\"\n    );\n  }\n\n  Object.keys(options.fields).forEach(\n    function (key) {\n      var field, externalContainer, internalContainer, frame, frameReadyPromise;\n\n      if (!constants.allowedFields.hasOwnProperty(key)) {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_INVALID_FIELD_KEY.type,\n          code: errors.HOSTED_FIELDS_INVALID_FIELD_KEY.code,\n          message: '\"' + key + '\" is not a valid field.',\n        });\n      }\n\n      field = options.fields[key];\n      // NEXT_MAJOR_VERSION remove selector as an option\n      // and simply make the API take a container\n      externalContainer = field.container || field.selector;\n\n      if (typeof externalContainer === \"string\") {\n        externalContainer = document.querySelector(externalContainer);\n      }\n\n      if (!externalContainer || externalContainer.nodeType !== 1) {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.type,\n          code: errors.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.code,\n          message: errors.HOSTED_FIELDS_INVALID_FIELD_SELECTOR.message,\n          details: {\n            fieldSelector: field.selector,\n            fieldContainer: field.container,\n            fieldKey: key,\n          },\n        });\n      } else if (\n        externalContainer.querySelector('iframe[name^=\"braintree-\"]')\n      ) {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.type,\n          code: errors.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.code,\n          message: errors.HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME.message,\n          details: {\n            fieldSelector: field.selector,\n            fieldContainer: field.container,\n            fieldKey: key,\n          },\n        });\n      }\n\n      internalContainer = externalContainer;\n\n      if (shadow.isShadowElement(internalContainer)) {\n        internalContainer = shadow.transformToSlot(\n          internalContainer,\n          \"height: 100%\"\n        );\n      }\n\n      if (field.maxlength && typeof field.maxlength !== \"number\") {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,\n          code: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,\n          message: \"The value for maxlength must be a number.\",\n          details: {\n            fieldKey: key,\n          },\n        });\n      }\n\n      if (field.minlength && typeof field.minlength !== \"number\") {\n        throw new BraintreeError({\n          type: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,\n          code: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,\n          message: \"The value for minlength must be a number.\",\n          details: {\n            fieldKey: key,\n          },\n        });\n      }\n\n      frame = iFramer({\n        type: key,\n        name: \"braintree-hosted-field-\" + key,\n        style: constants.defaultIFrameStyle,\n        title:\n          field.iframeTitle ||\n          \"Secure Credit Card Frame - \" + constants.allowedFields[key].label,\n      });\n      this._bus.addTargetFrame(frame);\n\n      this._injectedNodes.push.apply(\n        this._injectedNodes,\n        injectFrame(componentId, frame, internalContainer, function () {\n          self.focus(key);\n        })\n      );\n\n      this._setupLabelFocus(key, externalContainer);\n      fields[key] = {\n        frameElement: frame,\n        containerElement: externalContainer,\n      };\n      frameReadyPromise = new Promise(function (resolve) {\n        frameReadyPromiseResolveFunctions[key] = resolve;\n      });\n      frameReadyPromises.push(frameReadyPromise);\n\n      this._state.fields[key] = {\n        isEmpty: true,\n        isValid: false,\n        isPotentiallyValid: true,\n        isFocused: false,\n        container: externalContainer,\n      };\n\n      setTimeout(function () {\n        // Edge has an intermittent issue where\n        // the iframes load, but the JavaScript\n        // can't message out to the parent page.\n        // We can fix this by setting the src\n        // to about:blank first followed by\n        // the actual source. Both instances\n        // of setting the src need to be in a\n        // setTimeout to work.\n        if (browserDetection.isIE() || browserDetection.isEdge()) {\n          frame.src = \"about:blank\";\n          setTimeout(function () {\n            frame.src = hostedFieldsUrl;\n          }, 0);\n        } else {\n          frame.src = hostedFieldsUrl;\n        }\n      }, 0);\n    }.bind(this)\n  );\n\n  if (this._merchantConfigurationOptions.styles) {\n    Object.keys(this._merchantConfigurationOptions.styles).forEach(function (\n      selector\n    ) {\n      var className = self._merchantConfigurationOptions.styles[selector];\n\n      if (typeof className === \"string\") {\n        self._merchantConfigurationOptions.styles[selector] =\n          getStylesFromClass(className);\n      }\n    });\n  }\n\n  this._bus.on(events.REMOVE_FOCUS_INTERCEPTS, function (data) {\n    destroyFocusIntercept(data && data.id);\n  });\n\n  this._bus.on(\n    events.TRIGGER_FOCUS_CHANGE,\n    focusChange.createFocusChangeHandler(componentId, {\n      onRemoveFocusIntercepts: function (element) {\n        self._bus.emit(events.REMOVE_FOCUS_INTERCEPTS, {\n          id: element,\n        });\n      },\n      onTriggerInputFocus: function (targetType) {\n        self.focus(targetType);\n      },\n    })\n  );\n\n  this._bus.on(events.READY_FOR_CLIENT, function (reply) {\n    self._clientPromise.then(function (client) {\n      reply(client);\n    });\n  });\n\n  this._bus.on(events.CARD_FORM_ENTRY_HAS_BEGUN, function () {\n    analytics.sendEvent(self._clientPromise, \"hosted-fields.input.started\");\n  });\n\n  this._bus.on(events.BIN_AVAILABLE, function (bin) {\n    self._emit(\"binAvailable\", {\n      bin: bin,\n    });\n  });\n\n  failureTimeout = setTimeout(function () {\n    analytics.sendEvent(\n      self._clientPromise,\n      \"custom.hosted-fields.load.timed-out\"\n    );\n    self._emit(\"timeout\");\n  }, INTEGRATION_TIMEOUT_MS);\n\n  Promise.all(frameReadyPromises).then(function (results) {\n    var reply = results[0];\n\n    clearTimeout(failureTimeout);\n    reply(\n      formatMerchantConfigurationForIframes(self._merchantConfigurationOptions)\n    );\n\n    self._cleanUpFocusIntercepts();\n\n    self._emit(\"ready\");\n  });\n\n  this._bus.on(events.FRAME_READY, function (data, reply) {\n    frameReadyPromiseResolveFunctions[data.field](reply);\n  });\n\n  this._bus.on(events.INPUT_EVENT, createInputEventHandler(fields).bind(this));\n\n  this._destructor.registerFunctionForTeardown(function () {\n    var j, node, parent;\n\n    for (j = 0; j < self._injectedNodes.length; j++) {\n      node = self._injectedNodes[j];\n      parent = node.parentNode;\n\n      parent.removeChild(node);\n\n      classList.remove(\n        parent,\n        constants.externalClasses.FOCUSED,\n        constants.externalClasses.INVALID,\n        constants.externalClasses.VALID\n      );\n    }\n  });\n\n  this._destructor.registerFunctionForTeardown(function () {\n    destroyFocusIntercept();\n  });\n\n  this._destructor.registerFunctionForTeardown(function () {\n    var methodNames = methods(HostedFields.prototype).concat(\n      methods(EventEmitter.prototype)\n    );\n\n    convertMethodsToError(self, methodNames);\n  });\n}\n\nEventEmitter.createChild(HostedFields);\n\nHostedFields.prototype._setupLabelFocus = function (type, container) {\n  var labels, i;\n  var self = this;\n  var rootNode = findRootNode(container);\n\n  if (container.id == null) {\n    return;\n  }\n\n  function triggerFocus() {\n    self.focus(type);\n  }\n\n  // find any labels in the normal DOM\n  labels = Array.prototype.slice.call(\n    document.querySelectorAll('label[for=\"' + container.id + '\"]')\n  );\n  if (rootNode !== document) {\n    // find any labels within the shadow dom\n    labels = labels.concat(\n      Array.prototype.slice.call(\n        rootNode.querySelectorAll('label[for=\"' + container.id + '\"]')\n      )\n    );\n  }\n  // find any labels surrounding the container that don't also have the `for` attribute\n  labels = labels.concat(findParentTags(container, \"label\"));\n  // filter out any accidental duplicates\n  labels = labels.filter(function (label, index, arr) {\n    return arr.indexOf(label) === index;\n  });\n\n  for (i = 0; i < labels.length; i++) {\n    labels[i].addEventListener(\"click\", triggerFocus, false);\n  }\n\n  this._destructor.registerFunctionForTeardown(function () {\n    for (i = 0; i < labels.length; i++) {\n      labels[i].removeEventListener(\"click\", triggerFocus, false);\n    }\n  });\n};\n\nHostedFields.prototype._getAnyFieldContainer = function () {\n  var self = this;\n\n  return Object.keys(this._fields).reduce(function (found, field) {\n    return found || self._fields[field].containerElement;\n  }, null);\n};\n\nHostedFields.prototype._cleanUpFocusIntercepts = function () {\n  var iframeContainer, checkoutForm;\n\n  if (document.forms.length < 1) {\n    this._bus.emit(events.REMOVE_FOCUS_INTERCEPTS);\n  } else {\n    iframeContainer = this._getAnyFieldContainer();\n    checkoutForm = findParentTags(iframeContainer, \"form\")[0];\n\n    if (checkoutForm) {\n      focusChange.removeExtraFocusElements(\n        checkoutForm,\n        function (id) {\n          this._bus.emit(events.REMOVE_FOCUS_INTERCEPTS, {\n            id: id,\n          });\n        }.bind(this)\n      );\n    } else {\n      this._bus.emit(events.REMOVE_FOCUS_INTERCEPTS);\n    }\n  }\n};\n\nHostedFields.prototype._attachInvalidFieldContainersToError = function (err) {\n  if (\n    !(\n      err.details &&\n      err.details.invalidFieldKeys &&\n      err.details.invalidFieldKeys.length > 0\n    )\n  ) {\n    return;\n  }\n  err.details.invalidFields = {};\n  err.details.invalidFieldKeys.forEach(\n    function (field) {\n      err.details.invalidFields[field] = this._fields[field].containerElement;\n    }.bind(this)\n  );\n};\n\n/**\n * Get card verification challenges, such as requirements for cvv and postal code.\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. If no callback is provided, `getChallenges` returns a promise.\n * @example\n * hostedFieldsInstance.getChallenges().then(function (challenges) {\n *   challenges // ['cvv', 'postal_code']\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.getChallenges = function () {\n  return this._clientPromise.then(function (client) {\n    return client.getConfiguration().gatewayConfiguration.challenges;\n  });\n};\n\n/**\n * Get supported card types configured in the Braintree Control Panel\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. If no callback is provided, `getSupportedCardTypes` returns a promise.\n * @example\n * hostedFieldsInstance.getSupportedCardTypes().then(function (cardTypes) {\n *   cardTypes // ['Visa', 'American Express', 'Mastercard']\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.getSupportedCardTypes = function () {\n  return this._clientPromise.then(function (client) {\n    var cards = client\n      .getConfiguration()\n      .gatewayConfiguration.creditCards.supportedCardTypes.map(function (\n        cardType\n      ) {\n        if (cardType === \"MasterCard\") {\n          // Mastercard changed their branding. We can't update our\n          // config without creating a breaking change, so we just\n          // hard code the change here\n          return \"Mastercard\";\n        }\n\n        return cardType;\n      });\n\n    return cards;\n  });\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/hosted-fields.create|create}.\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. No data is returned if teardown completes successfully. If no callback is provided, `teardown` returns a promise.\n * @example\n * hostedFieldsInstance.teardown(function (teardownErr) {\n *   if (teardownErr) {\n *     console.error('Could not tear down Hosted Fields!');\n *   } else {\n *     console.info('Hosted Fields has been torn down!');\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.teardown = function () {\n  var self = this;\n\n  return new Promise(function (resolve, reject) {\n    self._destructor.teardown(function (err) {\n      analytics.sendEvent(\n        self._clientPromise,\n        \"custom.hosted-fields.teardown-completed\"\n      );\n\n      if (err) {\n        reject(err);\n      } else {\n        resolve();\n      }\n    });\n  });\n};\n\n/**\n * Tokenizes fields and returns a nonce payload.\n * @public\n * @param {object} [options] All tokenization options for the Hosted Fields component.\n * @param {boolean} [options.vault=false] When true, will vault the tokenized card. Cards will only be vaulted when using a client created with a client token that includes a customer ID. Note: merchants using Advanced Fraud Tools should not use this option, as device data will not be included.\n * @param {object} [options.authenticationInsight] Options for checking authentication insight - the [regulatory environment](https://developer.paypal.com/braintree/docs/guides/3d-secure/advanced-options/javascript/v3#authentication-insight) of the tokenized card.\n * @param {string} options.authenticationInsight.merchantAccountId The Braintree merchant account id to use to look up the authentication insight information.\n * @param {array} [options.fieldsToTokenize] By default, all fields will be tokenized. You may specify which fields specifically you wish to tokenize with this property. Valid options are `'number'`, `'cvv'`, `'expirationDate'`, `'expirationMonth'`, `'expirationYear'`, `'postalCode'`, `'cardholderName'`.\n * @param {string} [options.cardholderName] When supplied, the cardholder name to be tokenized with the contents of the fields.\n * @param {string} [options.billingAddress.postalCode] When supplied, this postal code will be tokenized along with the contents of the fields. If a postal code is provided as part of the Hosted Fields configuration, the value of the field will be tokenized and this value will be ignored.\n * @param {string} [options.billingAddress.firstName] When supplied, this customer first name will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.lastName] When supplied, this customer last name will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.company] When supplied, this company name will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.streetAddress] When supplied, this street address will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.extendedAddress] When supplied, this extended address will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.locality] When supplied, this locality (the city) will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.region] When supplied, this region (the state) will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryCodeNumeric] When supplied, this numeric country code will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryCodeAlpha2] When supplied, this alpha 2 representation of a country will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryCodeAlpha3] When supplied, this alpha 3 representation of a country will be tokenized along with the contents of the fields.\n * @param {string} [options.billingAddress.countryName] When supplied, this country name will be tokenized along with the contents of the fields.\n *\n * @param {callback} [callback] May be used as the only parameter of the function if no options are passed in. The second argument, <code>data</code>, is a {@link HostedFields~tokenizePayload|tokenizePayload}. If no callback is provided, `tokenize` returns a function that resolves with a {@link HostedFields~tokenizePayload|tokenizePayload}.\n * @example <caption>Tokenize a card</caption>\n * hostedFieldsInstance.tokenize(function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     switch (tokenizeErr.code) {\n *       case 'HOSTED_FIELDS_FIELDS_EMPTY':\n *         // occurs when none of the fields are filled in\n *         console.error('All fields are empty! Please fill out the form.');\n *         break;\n *       case 'HOSTED_FIELDS_FIELDS_INVALID':\n *         // occurs when certain fields do not pass client side validation\n *         console.error('Some fields are invalid:', tokenizeErr.details.invalidFieldKeys);\n *\n *         // you can also programmatically access the field containers for the invalid fields\n *         tokenizeErr.details.invalidFields.forEach(function (fieldContainer) {\n *           fieldContainer.className = 'invalid';\n *         });\n *         break;\n *       case 'HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE':\n *         // occurs when:\n *         //   * the client token used for client authorization was generated\n *         //     with a customer ID and the fail on duplicate payment method\n *         //     option is set to true\n *         //   * the card being tokenized has previously been vaulted (with any customer)\n *         // See: https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#options.fail_on_duplicate_payment_method\n *         console.error('This payment method already exists in your vault.');\n *         break;\n *       case 'HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED':\n *         // occurs when:\n *         //   * the client token used for client authorization was generated\n *         //     with a customer ID and the verify card option is set to true\n *         //     and you have credit card verification turned on in the Braintree\n *         //     control panel\n *         //   * the cvv does not pass verification (https://developer.paypal.com/braintree/docs/reference/general/testing#avs-and-cvv/cid-responses)\n *         // See: https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#options.verify_card\n *         console.error('CVV did not pass verification');\n *         break;\n *       case 'HOSTED_FIELDS_FAILED_TOKENIZATION':\n *         // occurs for any other tokenization error on the server\n *         console.error('Tokenization failed server side. Is the card valid?');\n *         break;\n *       case 'HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR':\n *         // occurs when the Braintree gateway cannot be contacted\n *         console.error('Network error occurred when tokenizing.');\n *         break;\n *       default:\n *         console.error('Something bad happened!', tokenizeErr);\n *     }\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize and vault a card</caption>\n * hostedFieldsInstance.tokenize({\n *   vault: true\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize a card with non-Hosted Fields cardholder name</caption>\n * hostedFieldsInstance.tokenize({\n *   cardholderName: 'First Last'\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize a card with non-Hosted Fields postal code option</caption>\n * hostedFieldsInstance.tokenize({\n *   billingAddress: {\n *     postalCode: '11111'\n *   }\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Tokenize a card with additional billing address options</caption>\n * hostedFieldsInstance.tokenize({\n *   billingAddress: {\n *     firstName: 'First',\n *     lastName: 'Last',\n *     company: 'Company',\n *     streetAddress: '123 Street',\n *     extendedAddress: 'Unit 1',\n *     // passing just one of the country options is sufficient to\n *     // associate the card details with a particular country\n *     // valid country names and codes can be found here:\n *     // https://developer.paypal.com/braintree/docs/reference/general/countries/ruby#list-of-countries\n *     countryName: 'United States',\n *     countryCodeAlpha2: 'US',\n *     countryCodeAlpha3: 'USA',\n *     countryCodeNumeric: '840'\n *   }\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @example <caption>Allow tokenization with empty cardholder name field</caption>\n * var state = hostedFieldsInstance.getState();\n * var fields = Object.keys(state.fields);\n *\n * // normally, if you tried to tokenize an empty cardholder name field\n * // you would get an error, to allow making this field optional,\n * // tokenize all the fields except for the cardholder name field\n * // when the cardholder name field is empty. Otherwise, tokenize\n * // all the fields\n * if (state.fields.cardholderName.isEmpty) {\n *  fields = fields.filter(function (field) {\n *    return field !== 'cardholderName';\n *  });\n * }\n *\n * hostedFieldsInstance.tokenize({\n *  fieldsToTokenize: fields\n * }, function (tokenizeErr, payload) {\n *   if (tokenizeErr) {\n *     console.error(tokenizeErr);\n *   } else {\n *     console.log('Got nonce:', payload.nonce);\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.tokenize = function (options) {\n  var self = this;\n\n  if (!options) {\n    options = {};\n  }\n\n  return new Promise(function (resolve, reject) {\n    self._bus.emit(events.TOKENIZATION_REQUEST, options, function (response) {\n      var err = response[0];\n      var payload = response[1];\n\n      if (err) {\n        self._attachInvalidFieldContainersToError(err);\n        reject(new BraintreeError(err));\n      } else {\n        resolve(payload);\n      }\n    });\n  });\n};\n\n/**\n * Add a class to a {@link module:braintree-web/hosted-fields~field field}. Useful for updating field styles when events occur elsewhere in your checkout.\n * @public\n * @param {string} field The field you wish to add a class to. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} classname The class to be added.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the class is added successfully.\n *\n * @example\n * hostedFieldsInstance.addClass('number', 'custom-class', function (addClassErr) {\n *   if (addClassErr) {\n *     console.error(addClassErr);\n *   }\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.addClass = function (field, classname) {\n  var err;\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when adding a class.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot add class to \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    this._bus.emit(events.ADD_CLASS, {\n      field: field,\n      classname: classname,\n    });\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Removes a class to a {@link module:braintree-web/hosted-fields~field field}. Useful for updating field styles when events occur elsewhere in your checkout.\n * @public\n * @param {string} field The field you wish to remove a class from. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} classname The class to be removed.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the class is removed successfully.\n *\n * @example\n * hostedFieldsInstance.addClass('number', 'custom-class', function (addClassErr) {\n *   if (addClassErr) {\n *     console.error(addClassErr);\n *     return;\n *   }\n *\n *   // some time later...\n *   hostedFieldsInstance.removeClass('number', 'custom-class');\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.removeClass = function (field, classname) {\n  var err;\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when removing a class.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot remove class from \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    this._bus.emit(events.REMOVE_CLASS, {\n      field: field,\n      classname: classname,\n    });\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Sets an attribute of a {@link module:braintree-web/hosted-fields~field field}.\n * Supported attributes are `aria-invalid`, `aria-required`, `disabled`, and `placeholder`.\n *\n * @public\n * @param {object} options The options for the attribute you wish to set.\n * @param {string} options.field The field to which you wish to add an attribute. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} options.attribute The name of the attribute you wish to add to the field.\n * @param {string} options.value The value for the attribute.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the attribute is set successfully.\n *\n * @example <caption>Set the placeholder attribute of a field</caption>\n * hostedFieldsInstance.setAttribute({\n *   field: 'number',\n *   attribute: 'placeholder',\n *   value: '1111 1111 1111 1111'\n * }, function (attributeErr) {\n *   if (attributeErr) {\n *     console.error(attributeErr);\n *   }\n * });\n *\n * @example <caption>Set the aria-required attribute of a field</caption>\n * hostedFieldsInstance.setAttribute({\n *   field: 'number',\n *   attribute: 'aria-required',\n *   value: true\n * }, function (attributeErr) {\n *   if (attributeErr) {\n *     console.error(attributeErr);\n *   }\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.setAttribute = function (options) {\n  var attributeErr, err;\n\n  if (!allowedFields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        options.field +\n        '\" is not a valid field. You must use a valid field option when setting an attribute.',\n    });\n  } else if (!this._fields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot set attribute for \"' +\n        options.field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    attributeErr = attributeValidationError(options.attribute, options.value);\n\n    if (attributeErr) {\n      err = attributeErr;\n    } else {\n      this._bus.emit(events.SET_ATTRIBUTE, {\n        field: options.field,\n        attribute: options.attribute,\n        value: options.value,\n      });\n    }\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Sets the month options for the expiration month field when presented as a select element.\n *\n * @public\n * @param {array} options An array of 12 entries corresponding to the 12 months.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the options are updated successfully. Errors if expirationMonth is not configured on the Hosted Fields instance or if the expirationMonth field is not configured to be a select input.\n *\n * @example <caption>Update the month options to spanish</caption>\n * hostedFieldsInstance.setMonthOptions([\n *   '01 - enero',\n *   '02 - febrero',\n *   '03 - marzo',\n *   '04 - abril',\n *   '05 - mayo',\n *   '06 - junio',\n *   '07 - julio',\n *   '08 - agosto',\n *   '09 - septiembre',\n *   '10 - octubre',\n *   '11 - noviembre',\n *   '12 - diciembre'\n * ]);\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.setMonthOptions = function (options) {\n  var self = this;\n  var merchantOptions = this._merchantConfigurationOptions.fields;\n  var errorMessage;\n\n  if (!merchantOptions.expirationMonth) {\n    errorMessage = \"Expiration month field must exist to use setMonthOptions.\";\n  } else if (!merchantOptions.expirationMonth.select) {\n    errorMessage = \"Expiration month field must be a select element.\";\n  }\n\n  if (errorMessage) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.type,\n        code: errors.HOSTED_FIELDS_FIELD_PROPERTY_INVALID.code,\n        message: errorMessage,\n      })\n    );\n  }\n\n  return new Promise(function (resolve) {\n    self._bus.emit(events.SET_MONTH_OPTIONS, options, resolve);\n  });\n};\n\n/**\n * Sets a visually hidden message (for screen readers) on a {@link module:braintree-web/hosted-fields~field field}.\n *\n * @public\n * @param {object} options The options for the attribute you wish to set.\n * @param {string} options.field The field to which you wish to add an attribute. Must be a valid {@link module:braintree-web/hosted-fields~field field}.\n * @param {string} options.message The message to set.\n *\n * @example <caption>Set an error message on a field</caption>\n * hostedFieldsInstance.setMessage({\n *   field: 'number',\n *   message: 'Invalid card number'\n * });\n *\n * @example <caption>Remove the message on a field</caption>\n * hostedFieldsInstance.setMessage({\n *   field: 'number',\n *   message: ''\n * });\n *\n * @returns {void}\n */\nHostedFields.prototype.setMessage = function (options) {\n  this._bus.emit(events.SET_MESSAGE, {\n    field: options.field,\n    message: options.message,\n  });\n};\n\n/**\n * Removes a supported attribute from a {@link module:braintree-web/hosted-fields~field field}.\n *\n * @public\n * @param {object} options The options for the attribute you wish to remove.\n * @param {string} options.field The field from which you wish to remove an attribute. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} options.attribute The name of the attribute you wish to remove from the field.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the attribute is removed successfully.\n *\n * @example <caption>Remove the placeholder attribute of a field</caption>\n * hostedFieldsInstance.removeAttribute({\n *   field: 'number',\n *   attribute: 'placeholder'\n * }, function (attributeErr) {\n *   if (attributeErr) {\n *     console.error(attributeErr);\n *   }\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.removeAttribute = function (options) {\n  var attributeErr, err;\n\n  if (!allowedFields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        options.field +\n        '\" is not a valid field. You must use a valid field option when removing an attribute.',\n    });\n  } else if (!this._fields.hasOwnProperty(options.field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot remove attribute for \"' +\n        options.field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    attributeErr = attributeValidationError(options.attribute);\n\n    if (attributeErr) {\n      err = attributeErr;\n    } else {\n      this._bus.emit(events.REMOVE_ATTRIBUTE, {\n        field: options.field,\n        attribute: options.attribute,\n      });\n    }\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * @deprecated since version 3.8.0. Use {@link HostedFields#setAttribute|setAttribute} instead.\n *\n * @public\n * @param {string} field The field whose placeholder you wish to change. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {string} placeholder Will be used as the `placeholder` attribute of the input.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the placeholder updated successfully.\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nHostedFields.prototype.setPlaceholder = function (field, placeholder) {\n  return this.setAttribute({\n    field: field,\n    attribute: \"placeholder\",\n    value: placeholder,\n  });\n};\n\n/**\n * Clear the value of a {@link module:braintree-web/hosted-fields~field field}.\n * @public\n * @param {string} field The field you wish to clear. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the field cleared successfully.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * hostedFieldsInstance.clear('number', function (clearErr) {\n *   if (clearErr) {\n *     console.error(clearErr);\n *   }\n * });\n *\n * @example <caption>Clear several fields</caption>\n * hostedFieldsInstance.clear('number');\n * hostedFieldsInstance.clear('cvv');\n * hostedFieldsInstance.clear('expirationDate');\n */\nHostedFields.prototype.clear = function (field) {\n  var err;\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when clearing a field.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot clear \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    this._bus.emit(events.CLEAR_FIELD, {\n      field: field,\n    });\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Programmatically focus a {@link module:braintree-web/hosted-fields~field field}.\n * @public\n * @param {string} field The field you want to focus. Must be a valid {@link module:braintree-web/hosted-fields~fieldOptions fieldOption}.\n * @param {callback} [callback] Callback executed on completion, containing an error if one occurred. No data is returned if the field focused successfully.\n * @returns {void}\n * @example\n * hostedFieldsInstance.focus('number', function (focusErr) {\n *   if (focusErr) {\n *     console.error(focusErr);\n *   }\n * });\n * @example <caption>Using an event listener</caption>\n * myElement.addEventListener('click', function (e) {\n *   // In Firefox, the focus method can be suppressed\n *   //   if the element has a tabindex property or the element\n *   //   is an anchor link with an href property.\n *   e.preventDefault();\n *   hostedFieldsInstance.focus('number');\n * });\n */\nHostedFields.prototype.focus = function (field) {\n  var err;\n  var fieldConfig = this._fields[field];\n\n  if (!allowedFields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_INVALID.type,\n      code: errors.HOSTED_FIELDS_FIELD_INVALID.code,\n      message:\n        '\"' +\n        field +\n        '\" is not a valid field. You must use a valid field option when focusing a field.',\n    });\n  } else if (!this._fields.hasOwnProperty(field)) {\n    err = new BraintreeError({\n      type: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.type,\n      code: errors.HOSTED_FIELDS_FIELD_NOT_PRESENT.code,\n      message:\n        'Cannot focus \"' +\n        field +\n        '\" field because it is not part of the current Hosted Fields options.',\n    });\n  } else {\n    fieldConfig.frameElement.focus();\n\n    this._bus.emit(events.TRIGGER_INPUT_FOCUS, {\n      field: field,\n    });\n\n    if (browserDetection.isIos()) {\n      // Inputs outside of the viewport don't always scroll into view on\n      // focus in iOS Safari. 5ms timeout gives the browser a chance to\n      // do the right thing and prevents stuttering.\n      setTimeout(function () {\n        if (!isVisibleEnough(fieldConfig.containerElement)) {\n          fieldConfig.containerElement.scrollIntoView();\n        }\n      }, SAFARI_FOCUS_TIMEOUT);\n    }\n  }\n\n  if (err) {\n    return Promise.reject(err);\n  }\n\n  return Promise.resolve();\n};\n\n/**\n * Returns an {@link HostedFields~stateObject|object} that includes the state of all fields and possible card types.\n * @public\n * @returns {object} {@link HostedFields~stateObject|stateObject}\n * @example <caption>Check if all fields are valid</caption>\n * var state = hostedFieldsInstance.getState();\n *\n * var formValid = Object.keys(state.fields).every(function (key) {\n *   return state.fields[key].isValid;\n * });\n */\nHostedFields.prototype.getState = function () {\n  return this._state;\n};\n\n// React adds decorations to DOM nodes that cause\n// circular dependencies, so we remove them from the\n// config before sending it to the iframes. However,\n// we don't want to mutate the original object that\n// was passed in, so we create fresh objects via assign\nfunction formatMerchantConfigurationForIframes(config) {\n  var formattedConfig = assign({}, config);\n\n  formattedConfig.fields = assign({}, formattedConfig.fields);\n  Object.keys(formattedConfig.fields).forEach(function (field) {\n    formattedConfig.fields[field] = assign({}, formattedConfig.fields[field]);\n    delete formattedConfig.fields[field].container;\n  });\n\n  return formattedConfig;\n}\n\nmodule.exports = wrapPromise.wrapPrototype(HostedFields);\n\n},{\"../../lib/analytics\":94,\"../../lib/assign\":96,\"../../lib/braintree-error\":99,\"../../lib/constants\":100,\"../../lib/convert-methods-to-error\":101,\"../../lib/create-assets-url\":103,\"../../lib/create-deferred-client\":105,\"../../lib/destructor\":107,\"../../lib/errors\":109,\"../../lib/find-root-node\":110,\"../../lib/is-verified-domain\":127,\"../../lib/methods\":129,\"../../lib/promise\":131,\"../../lib/shadow\":133,\"../shared/browser-detection\":87,\"../shared/constants\":88,\"../shared/errors\":89,\"../shared/find-parent-tags\":90,\"../shared/focus-intercept\":91,\"../shared/get-card-types\":92,\"./attribute-validation-error\":80,\"./compose-url\":81,\"./focus-change\":82,\"./get-styles-from-class\":83,\"./inject-frame\":85,\"@braintree/class-list\":40,\"@braintree/event-emitter\":41,\"@braintree/iframer\":43,\"@braintree/uuid\":47,\"@braintree/wrap-promise\":51,\"framebus\":176}],85:[function(require,module,exports){\n\"use strict\";\n\nvar focusIntercept = require(\"../shared/focus-intercept\");\nvar directions = require(\"../shared/constants\").navigationDirections;\n\nmodule.exports = function injectFrame(id, frame, container, focusHandler) {\n  var frameType = frame.getAttribute(\"type\");\n  var clearboth = document.createElement(\"div\");\n  var fragment = document.createDocumentFragment();\n  var focusInterceptBefore = focusIntercept.generate(\n    id,\n    frameType,\n    directions.BACK,\n    focusHandler\n  );\n  var focusInterceptAfter = focusIntercept.generate(\n    id,\n    frameType,\n    directions.FORWARD,\n    focusHandler\n  );\n\n  clearboth.style.clear = \"both\";\n\n  fragment.appendChild(focusInterceptBefore);\n  fragment.appendChild(frame);\n  fragment.appendChild(focusInterceptAfter);\n  fragment.appendChild(clearboth);\n\n  container.appendChild(fragment);\n\n  return [frame, clearboth];\n};\n\n},{\"../shared/constants\":88,\"../shared/focus-intercept\":91}],86:[function(require,module,exports){\n\"use strict\";\n/** @module braintree-web/hosted-fields */\n\nvar HostedFields = require(\"./external/hosted-fields\");\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar errors = require(\"./shared/errors\");\nvar supportsInputFormatting = require(\"restricted-input/supports-input-formatting\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Promise = require(\"../lib/promise\");\nvar VERSION = \"3.88.3\";\n\n/**\n * Fields used in {@link module:braintree-web/hosted-fields~fieldOptions fields options}\n * @typedef {object} field\n * @property {string} selector Deprecated: Now an alias for `options.container`.\n * @property {(string|HTMLElement)} container A DOM node or CSS selector to find the container where the hosted field will be inserted.\n * @property {string} [placeholder] Will be used as the `placeholder` attribute of the input. If `placeholder` is not natively supported by the browser, it will be polyfilled.\n * @property {string} [type] Will be used as the `type` attribute of the input. To mask `cvv` input, for instance, `type: \"password\"` can be used.\n * @property {string} [iframeTitle] The title used for the iframe containing the credit card input. By default, this will be `Secure Credit Card Frame - <the name of the specific field>`.\n * @property {string} [internalLabel] Each Hosted Field iframe has a hidden label that is used by screen readers to identify the input. The `internalLabel` property can be used to customize the field for localization purposes. The default values are:\n * * number: Credit Card Number\n * * cvv: CVV\n * * expirationDate: Expiration Date\n * * expirationMonth: Expiration Month\n * * expirationYear: Expiration Year\n * * postalCode: Postal Code\n * * cardholderName: Cardholder Name\n * @property {boolean} [formatInput=true] Enable or disable automatic formatting on this field.\n * @property {(object|boolean)} [maskInput=false] Enable or disable input masking when input is not focused. If set to `true` instead of an object, the defaults for the `maskInput` parameters will be used.\n * @property {string} [maskInput.character=•] The character to use when masking the input. The default character ('•') uses a unicode symbol, so the webpage must support UTF-8 characters when using the default.\n * @property {Boolean} [maskInput.showLastFour=false] Only applicable for the credit card field. Whether or not to show the last 4 digits of the card when masking.\n * @property {(object|boolean)} [select] If truthy, this field becomes a `<select>` dropdown list. This can only be used for `expirationMonth` and `expirationYear` fields. If you do not use a `placeholder` property for the field, the current month/year will be the default selected value.\n * @property {string[]} [select.options] An array of 12 strings, one per month. This can only be used for the `expirationMonth` field. For example, the array can look like `['01 - January', '02 - February', ...]`.\n * @property {number} [maxCardLength] This option applies only to the number field. Allows a limit to the length of the card number, even if the card brand may support numbers of a greater length. If the value passed is greater than the max length for a card brand, the smaller number of the 2 values will be used. For example, is `maxCardLength` is set to 16, but an American Express card is entered (which has a max card length of 15), a max card length of 15 will be used.\n * @property {number} [maxlength] This option applies only to the CVV and postal code fields. Will be used as the `maxlength` attribute of the input. The primary use cases for the `maxlength` option are: limiting the length of the CVV input for CVV-only verifications when the card type is known and setting the length of the postal code input when cards are coming from a known region. The default `maxlength` for the postal code input is `10`.\n * @property {number} [minlength=3] This option applies only to the cvv and postal code fields. Will be used as the `minlength` attribute of the input.\n * For postal code fields, the default value is 3, representing the Icelandic postal code length. This option's primary use case is to increase the `minlength`, e.g. for US customers, the postal code `minlength` can be set to 5.\n * For cvv fields, the default value is 3. The `minlength` attribute only applies to integrations capturing a cvv without a number field.\n * @property {string} [prefill] A value to prefill the field with. For example, when creating an update card form, you can prefill the expiration date fields with the old expiration date data.\n * @property {boolean} [rejectUnsupportedCards=false] Deprecated since version 3.46.0, use `supportedCardBrands` instead. Only allow card types that your merchant account is able to process. Unsupported card types will invalidate the card form. e.g. if you only process Visa cards, a customer entering a American Express card would get an invalid card field. This can only be used for the `number` field.\n * @property {object} [supportedCardBrands] Override card brands that are supported by the card form. Pass `'card-brand-id': true` to override the default in the merchant configuration and enable a card brand. Pass `'card-brand-id': false` to disable a card brand. Unsupported card types will invalidate the card form. e.g. if you only process Visa cards, a customer entering an American Express card would get an invalid card field. This can only be used for the  `number` field. (Note: only allow card types that your merchant account is actually able to process.)\n *\n * Valid card brand ids are:\n * * visa\n * * mastercard\n * * american-express\n * * diners-club\n * * discover\n * * jcb\n * * union-pay\n * * maestro\n * * elo\n * * mir\n * * hiper\n * * hipercard\n */\n\n/**\n * An object that has {@link module:braintree-web/hosted-fields~field field objects} for each field. Used in {@link module:braintree-web/hosted-fields~create create}.\n * @typedef {object} fieldOptions\n * @property {field} [number] A field for card number.\n * @property {field} [expirationDate] A field for expiration date in `MM/YYYY` or `MM/YY` format. This should not be used with the `expirationMonth` and `expirationYear` properties.\n * @property {field} [expirationMonth] A field for expiration month in `MM` format. This should be used with the `expirationYear` property.\n * @property {field} [expirationYear] A field for expiration year in `YYYY` or `YY` format. This should be used with the `expirationMonth` property.\n * @property {field} [cvv] A field for 3 or 4 digit card verification code (like CVV or CID). If you wish to create a CVV-only payment method nonce to verify a card already stored in your Vault, omit all other fields to only collect CVV.\n * @property {field} [postalCode] A field for postal or region code.\n * @property {field} [cardholderName] A field for the cardholder name on the customer's credit card.\n */\n\n/**\n * An object that represents CSS that will be applied in each hosted field. This object looks similar to CSS. Typically, these styles involve fonts (such as `font-family` or `color`).\n *\n * You may also pass the name of a class on your site that contains the styles you would like to apply. The style properties will be automatically pulled off the class and applied to the Hosted Fields inputs. Note: this is recommended for `input` elements only. If using a `select` for the expiration date, unexpected styling may occur.\n *\n * These are the CSS properties that Hosted Fields supports. Any other CSS should be specified on your page and outside of any Braintree configuration. Trying to set unsupported properties will fail and put a warning in the console.\n *\n * Supported CSS properties are:\n * `appearance`\n * `box-shadow`\n * `color`\n * `direction`\n * `font-family`\n * `font-size-adjust`\n * `font-size`\n * `font-stretch`\n * `font-style`\n * `font-variant-alternates`\n * `font-variant-caps`\n * `font-variant-east-asian`\n * `font-variant-ligatures`\n * `font-variant-numeric`\n * `font-variant`\n * `font-weight`\n * `font`\n * `letter-spacing`\n * `line-height`\n * `opacity`\n * `outline`\n * `margin`\n * `margin-top`\n * `margin-right`\n * `margin-bottom`\n * `margin-left`\n * `padding`\n * `padding-top`\n * `padding-right`\n * `padding-bottom`\n * `padding-left`\n * `text-align`\n * `text-shadow`\n * `transition`\n * `-moz-appearance`\n * `-moz-box-shadow`\n * `-moz-osx-font-smoothing`\n * `-moz-tap-highlight-color`\n * `-moz-transition`\n * `-webkit-appearance`\n * `-webkit-box-shadow`\n * `-webkit-font-smoothing`\n * `-webkit-tap-highlight-color`\n * `-webkit-transition`\n * @typedef {object} styleOptions\n */\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {fieldOptions} options.fields A {@link module:braintree-web/hosted-fields~fieldOptions set of options for each field}.\n * @param {styleOptions} [options.styles] {@link module:braintree-web/hosted-fields~styleOptions Styles} applied to each field.\n * @param {boolean} [options.preventAutofill=false] When true, browsers will not try to prompt the customer to autofill their credit card information.\n * @param {callback} [callback] The second argument, `data`, is the {@link HostedFields} instance. If no callback is provided, `create` returns a promise that resolves with the {@link HostedFields} instance.\n * @returns {void}\n * @example\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   styles: {\n *     'input': {\n *       'font-size': '16pt',\n *       'color': '#3A3A3A'\n *     },\n *     '.number': {\n *       'font-family': 'monospace'\n *     },\n *     '.valid': {\n *       'color': 'green'\n *     }\n *   },\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '•••'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date'\n *     }\n *   }\n * }, callback);\n * @example <caption>With cardholder name</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     cardholderName: {\n *       container: '#cardholder-name'\n *     },\n *     cvv: {\n *       container: '#cvv',\n *     },\n *     expirationDate: {\n *       container: '#expiration-date'\n *     }\n *   }\n * }, callback);\n * @example <caption>Applying styles with a class name</caption>\n * // in document head\n * <style>\n *   .braintree-input-class {\n *     color: black;\n *   }\n *   .braintree-valid-class {\n *     color: green;\n *   }\n *   .braintree-invalid-class {\n *     color: red;\n *   }\n * </style>\n * // in a script tag\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   styles: {\n *     'input': 'braintree-input-class',\n *     '.invalid': 'braintree-invalid-class',\n *     '.valid': {\n *       // you can also use the object syntax alongside\n *       // the class name syntax\n *       color: green;\n *     }\n *   },\n *   fields: {\n *     number: {\n *       container: '#card-number'\n *     },\n *     // etc...\n *   }\n * }, callback);\n * @example <caption>Right to Left Language Support</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   styles: {\n *     'input': {\n *       // other styles\n *       direction: 'rtl'\n *     },\n *   },\n *   fields: {\n *     number: {\n *       container: '#card-number',\n *       // Credit card formatting is not currently supported\n *       // with RTL languages, so we need to turn it off for the number input\n *       formatInput: false\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '•••'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date',\n *       type: 'month'\n *     }\n *   }\n * }, callback);\n * @example <caption>Setting up Hosted Fields to tokenize CVV only</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     // Only add the `cvv` option.\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '•••'\n *     }\n *   }\n * }, callback);\n * @example <caption>Creating an expiration date update form with prefilled data</caption>\n * var storedCreditCardInformation = {\n *   // get this info from your server\n *   // with a payment method lookup\n *   month: '09',\n *   year: '2017'\n * };\n *\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     expirationMonth: {\n *       container: '#expiration-month',\n *       prefill: storedCreditCardInformation.month\n *     },\n *     expirationYear: {\n *       container: '#expiration-year',\n *       prefill: storedCreditCardInformation.year\n *     }\n *   }\n * }, callback);\n * @example <caption>Validate the card form for supported card types</caption>\n * braintree.hostedFields.create({\n *   client: clientInstance,\n *   fields: {\n *     number: {\n *       container: '#card-number',\n *       supportedCardBrands: {\n *         visa: false, // prevents Visas from showing up as valid even when the Braintree control panel is configured to allow them\n *         'diners-club': true // allow Diners Club cards to be valid (processed as Discover cards on the Braintree backend)\n *       }\n *     },\n *     cvv: {\n *       container: '#cvv',\n *       placeholder: '•••'\n *     },\n *     expirationDate: {\n *       container: '#expiration-date',\n *       type: 'month'\n *     }\n *   },\n * }, callback);\n */\nfunction create(options) {\n  return basicComponentVerification\n    .verify({\n      name: \"Hosted Fields\",\n      authorization: options.authorization,\n      client: options.client,\n    })\n    .then(function () {\n      var integration = new HostedFields(options);\n\n      return new Promise(function (resolve, reject) {\n        integration.on(\"ready\", function () {\n          resolve(integration);\n        });\n        integration.on(\"timeout\", function () {\n          reject(new BraintreeError(errors.HOSTED_FIELDS_TIMEOUT));\n        });\n      });\n    });\n}\n\nmodule.exports = {\n  /**\n   * @static\n   * @function supportsInputFormatting\n   * @description Returns false if input formatting will be automatically disabled due to browser incompatibility. Otherwise, returns true. For a list of unsupported browsers, [go here](https://github.com/braintree/restricted-input/blob/main/README.md#browsers-where-formatting-is-turned-off-automatically).\n   * @returns {Boolean} Returns false if input formatting will be automatically disabled due to browser incompatibility. Otherwise, returns true.\n   * @example\n   * <caption>Conditionally choosing split expiration date inputs if formatting is unavailable</caption>\n   * var canFormat = braintree.hostedFields.supportsInputFormatting();\n   * var fields = {\n   *   number: {\n   *     container: '#card-number'\n   *   },\n   *   cvv: {\n   *     container: '#cvv'\n   *   }\n   * };\n   *\n   * if (canFormat) {\n   *   fields.expirationDate = {\n   *     selection: '#expiration-date'\n   *   };\n   *   functionToCreateAndInsertExpirationDateDivToForm();\n   * } else {\n   *   fields.expirationMonth = {\n   *     selection: '#expiration-month'\n   *   };\n   *   fields.expirationYear = {\n   *     selection: '#expiration-year'\n   *   };\n   *   functionToCreateAndInsertExpirationMonthAndYearDivsToForm();\n   * }\n   *\n   * braintree.hostedFields.create({\n   *   client: clientInstance,\n   *   styles: {\n   *     // Styles\n   *   },\n   *   fields: fields\n   * }, callback);\n   */\n  supportsInputFormatting: supportsInputFormatting,\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/promise\":131,\"./external/hosted-fields\":84,\"./shared/errors\":89,\"@braintree/wrap-promise\":51,\"restricted-input/supports-input-formatting\":194}],87:[function(require,module,exports){\n\"use strict\";\n\nvar isAndroid = require(\"@braintree/browser-detection/is-android\");\nvar isChromeOS = require(\"@braintree/browser-detection/is-chrome-os\");\nvar isIos = require(\"@braintree/browser-detection/is-ios\");\nvar isChrome = require(\"@braintree/browser-detection/is-chrome\");\n\nfunction hasSoftwareKeyboard() {\n  return isAndroid() || isChromeOS() || isIos();\n}\n\nfunction isChromeIos() {\n  return isChrome() && isIos();\n}\n\nmodule.exports = {\n  isIE: require(\"@braintree/browser-detection/is-ie\"),\n  isEdge: require(\"@braintree/browser-detection/is-edge\"),\n  isIe9: require(\"@braintree/browser-detection/is-ie9\"),\n  isIe10: require(\"@braintree/browser-detection/is-ie10\"),\n  isAndroid: isAndroid,\n  isChromeOS: isChromeOS,\n  isChromeIos: isChromeIos,\n  isFirefox: require(\"@braintree/browser-detection/is-firefox\"),\n  isIos: isIos,\n  isIosWebview: require(\"@braintree/browser-detection/is-ios-webview\"),\n  hasSoftwareKeyboard: hasSoftwareKeyboard,\n};\n\n},{\"@braintree/browser-detection/is-android\":26,\"@braintree/browser-detection/is-chrome\":28,\"@braintree/browser-detection/is-chrome-os\":27,\"@braintree/browser-detection/is-edge\":29,\"@braintree/browser-detection/is-firefox\":30,\"@braintree/browser-detection/is-ie\":31,\"@braintree/browser-detection/is-ie10\":32,\"@braintree/browser-detection/is-ie9\":33,\"@braintree/browser-detection/is-ios\":37,\"@braintree/browser-detection/is-ios-webview\":35}],88:[function(require,module,exports){\n\"use strict\";\n\nvar enumerate = require(\"../../lib/enumerate\");\nvar errors = require(\"./errors\");\nvar VERSION = \"3.88.3\";\n\nvar constants = {\n  VERSION: VERSION,\n  maxExpirationYearAge: 19,\n  externalEvents: {\n    FOCUS: \"focus\",\n    BLUR: \"blur\",\n    EMPTY: \"empty\",\n    NOT_EMPTY: \"notEmpty\",\n    VALIDITY_CHANGE: \"validityChange\",\n    CARD_TYPE_CHANGE: \"cardTypeChange\",\n  },\n  defaultMaxLengths: {\n    number: 19,\n    postalCode: 8,\n    expirationDate: 7,\n    expirationMonth: 2,\n    expirationYear: 4,\n    cvv: 3,\n  },\n  externalClasses: {\n    FOCUSED: \"braintree-hosted-fields-focused\",\n    INVALID: \"braintree-hosted-fields-invalid\",\n    VALID: \"braintree-hosted-fields-valid\",\n  },\n  navigationDirections: {\n    BACK: \"before\",\n    FORWARD: \"after\",\n  },\n  defaultIFrameStyle: {\n    border: \"none\",\n    width: \"100%\",\n    height: \"100%\",\n    float: \"left\",\n  },\n  tokenizationErrorCodes: {\n    81724: errors.HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE,\n    // NEXT_MAJOR_VERSION this error triggers for both AVS and CVV errors\n    // but the code name implies that it would only trigger for CVV verification\n    // failures\n    81736: errors.HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED,\n  },\n  allowedStyles: [\n    \"-moz-appearance\",\n    \"-moz-box-shadow\",\n    \"-moz-osx-font-smoothing\",\n    \"-moz-tap-highlight-color\",\n    \"-moz-transition\",\n    \"-webkit-appearance\",\n    \"-webkit-box-shadow\",\n    \"-webkit-font-smoothing\",\n    \"-webkit-tap-highlight-color\",\n    \"-webkit-transition\",\n    \"appearance\",\n    \"box-shadow\",\n    \"color\",\n    \"direction\",\n    \"font\",\n    \"font-family\",\n    \"font-size\",\n    \"font-size-adjust\",\n    \"font-stretch\",\n    \"font-style\",\n    \"font-variant\",\n    \"font-variant-alternates\",\n    \"font-variant-caps\",\n    \"font-variant-east-asian\",\n    \"font-variant-ligatures\",\n    \"font-variant-numeric\",\n    \"font-weight\",\n    \"letter-spacing\",\n    \"line-height\",\n    \"margin\",\n    \"margin-top\",\n    \"margin-right\",\n    \"margin-bottom\",\n    \"margin-left\",\n    \"opacity\",\n    \"outline\",\n    \"padding\",\n    \"padding-top\",\n    \"padding-right\",\n    \"padding-bottom\",\n    \"padding-left\",\n    \"text-align\",\n    \"text-shadow\",\n    \"transition\",\n  ],\n  allowedFields: {\n    cardholderName: {\n      name: \"cardholder-name\",\n      label: \"Cardholder Name\",\n    },\n    number: {\n      name: \"credit-card-number\",\n      label: \"Credit Card Number\",\n    },\n    cvv: {\n      name: \"cvv\",\n      label: \"CVV\",\n    },\n    expirationDate: {\n      name: \"expiration\",\n      label: \"Expiration Date\",\n    },\n    expirationMonth: {\n      name: \"expiration-month\",\n      label: \"Expiration Month\",\n    },\n    expirationYear: {\n      name: \"expiration-year\",\n      label: \"Expiration Year\",\n    },\n    postalCode: {\n      name: \"postal-code\",\n      label: \"Postal Code\",\n    },\n  },\n  allowedAttributes: {\n    \"aria-invalid\": \"boolean\",\n    \"aria-required\": \"boolean\",\n    disabled: \"boolean\",\n    placeholder: \"string\",\n  },\n  autocompleteMappings: {\n    \"cardholder-name\": \"cc-name\",\n    \"credit-card-number\": \"cc-number\",\n    expiration: \"cc-exp\",\n    \"expiration-month\": \"cc-exp-month\",\n    \"expiration-year\": \"cc-exp-year\",\n    cvv: \"cc-csc\",\n    \"postal-code\": \"billing postal-code\",\n  },\n};\n\nconstants.events = enumerate(\n  [\n    \"ADD_CLASS\",\n    \"AUTOFILL_DATA_AVAILABLE\",\n    \"BIN_AVAILABLE\",\n    \"CARD_FORM_ENTRY_HAS_BEGUN\",\n    \"CLEAR_FIELD\",\n    \"CONFIGURATION\",\n    \"FRAME_READY\",\n    \"INPUT_EVENT\",\n    \"READY_FOR_CLIENT\",\n    \"REMOVE_ATTRIBUTE\",\n    \"REMOVE_CLASS\",\n    \"REMOVE_FOCUS_INTERCEPTS\",\n    \"SET_ATTRIBUTE\",\n    \"SET_MESSAGE\",\n    \"SET_MONTH_OPTIONS\",\n    \"TOKENIZATION_REQUEST\",\n    \"TRIGGER_FOCUS_CHANGE\",\n    \"TRIGGER_INPUT_FOCUS\",\n    \"VALIDATE_STRICT\",\n  ],\n  \"hosted-fields:\"\n);\n\nmodule.exports = constants;\n\n},{\"../../lib/enumerate\":108,\"./errors\":89}],89:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Hosted Fields - Creation Error Codes\n * @description Errors that occur when [creating the Hosted Fields component](./module-braintree-web_hosted-fields.html#.create).\n * @property {UNKNOWN} HOSTED_FIELDS_TIMEOUT Occurs when Hosted Fields does not finish setting up within 60 seconds.\n * @property {MERCHANT} HOSTED_FIELDS_INVALID_FIELD_KEY Occurs when Hosted Fields is instantiated with an invalid Field option.\n * @property {MERCHANT} HOSTED_FIELDS_INVALID_FIELD_SELECTOR Occurs when Hosted Fields given a field selector that is not valid.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME Occurs when Hosted Fields given a field selector that already contains an iframe.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_PROPERTY_INVALID Occurs when a field configuration option is not valid.\n */\n\n/**\n * @name BraintreeError.Hosted Fields - Field Manipulation Error Codes\n * @description Errors that occur when modifying fields through [`addClass`](./HostedFields.html#addClass), [`removeClass`](./HostedFields.html#removeClass), [`setAttribute`](./HostedFields.html#setAttribute), [`removeAttribute`](./HostedFields.html#removeAttribute), [`clear`](./HostedFields.html#clear), [`focus`](./HostedFields.html#focus), and [`setMonthOptions`](./HostedFields.html#setMonthOptions).\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_INVALID Occurs when attempting to modify a field that is not a valid Hosted Fields option.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_NOT_PRESENT Occurs when attempting to modify a field that is not configured with Hosted Fields.\n * @property {MERCHANT} HOSTED_FIELDS_FIELD_PROPERTY_INVALID Occurs when a field configuration option is not valid.\n */\n\n/**\n * @name BraintreeError.Hosted Fields - Set Attribute Error Codes\n * @description Errors that occur when using the [`setAttribute` method](./HostedFields.html#setAttribute)\n * @property {MERCHANT} HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED Occurs when trying to set an attribute that is not supported to be set.\n * @property {MERCHANT} HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED Occurs when the type of value for an attribute is not allowed to be set.\n */\n\n/**\n * @name BraintreeError.Hosted Fields - Tokenize Error Codes\n * @description Errors that occur when [tokenizing the card details with Hosted Fields](./HostedFields.html#tokenize).\n * @property {NETWORK} HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR Occurs when the Braintree gateway cannot be contacted.\n * @property {CUSTOMER} HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE Occurs when attempting to vault a card, but the client token being used is configured to fail if the card already exists in the vault.\n * @property {CUSTOMER} HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED Occurs when cvv verification is turned on in the Braintree control panel.\n * @property {CUSTOMER} HOSTED_FIELDS_FAILED_TOKENIZATION Occurs when the credit card details were sent to Braintree, but failed to tokenize.\n * @property {CUSTOMER} HOSTED_FIELDS_FIELDS_EMPTY Occurs when all the Hosted Fields inputs are empty.\n * @property {CUSTOMER} HOSTED_FIELDS_FIELDS_INVALID Occurs when one ore more fields are invalid.\n */\n\nvar BraintreeError = require(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  HOSTED_FIELDS_TIMEOUT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"HOSTED_FIELDS_TIMEOUT\",\n    message: \"Hosted Fields timed out when attempting to set up.\",\n  },\n  HOSTED_FIELDS_INVALID_FIELD_KEY: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_INVALID_FIELD_KEY\",\n  },\n  HOSTED_FIELDS_INVALID_FIELD_SELECTOR: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_INVALID_FIELD_SELECTOR\",\n    message: \"Selector does not reference a valid DOM node.\",\n  },\n  HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_DUPLICATE_IFRAME\",\n    message: \"Element already contains a Braintree iframe.\",\n  },\n  HOSTED_FIELDS_FIELD_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_INVALID\",\n  },\n  HOSTED_FIELDS_FIELD_NOT_PRESENT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_NOT_PRESENT\",\n  },\n  HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"HOSTED_FIELDS_TOKENIZATION_NETWORK_ERROR\",\n    message: \"A tokenization network error occurred.\",\n  },\n  HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_TOKENIZATION_FAIL_ON_DUPLICATE\",\n    message: \"This credit card already exists in the merchant's vault.\",\n  },\n  HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_TOKENIZATION_CVV_VERIFICATION_FAILED\",\n    message: \"CVV verification failed during tokenization.\",\n  },\n  HOSTED_FIELDS_FAILED_TOKENIZATION: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_FAILED_TOKENIZATION\",\n    message: \"The supplied card data failed tokenization.\",\n  },\n  HOSTED_FIELDS_FIELDS_EMPTY: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_FIELDS_EMPTY\",\n    message: \"All fields are empty. Cannot tokenize empty card fields.\",\n  },\n  HOSTED_FIELDS_FIELDS_INVALID: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"HOSTED_FIELDS_FIELDS_INVALID\",\n    message:\n      \"Some payment input fields are invalid. Cannot tokenize invalid card fields.\",\n  },\n  HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_ATTRIBUTE_NOT_SUPPORTED\",\n  },\n  HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_ATTRIBUTE_VALUE_NOT_ALLOWED\",\n  },\n  HOSTED_FIELDS_FIELD_PROPERTY_INVALID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"HOSTED_FIELDS_FIELD_PROPERTY_INVALID\",\n  },\n};\n\n},{\"../../lib/braintree-error\":99}],90:[function(require,module,exports){\n\"use strict\";\n\nfunction findParentTags(element, tag) {\n  var parent = element.parentNode;\n  var parents = [];\n\n  while (parent != null) {\n    if (parent.tagName != null && parent.tagName.toLowerCase() === tag) {\n      parents.push(parent);\n    }\n\n    parent = parent.parentNode;\n  }\n\n  return parents;\n}\n\nmodule.exports = findParentTags;\n\n},{}],91:[function(require,module,exports){\n\"use strict\";\n\nvar browserDetection = require(\"./browser-detection\");\nvar classList = require(\"@braintree/class-list\");\nvar constants = require(\"./constants\");\nvar allowedFields = Object.keys(constants.allowedFields);\nvar directions = constants.navigationDirections;\n\nvar focusIntercept = {\n  generate: function (hostedFieldsId, type, direction, handler) {\n    var input = document.createElement(\"input\");\n    var focusInterceptStyles = {\n      border: \"none !important\",\n      display: \"block !important\",\n      height: \"1px !important\",\n      left: \"-1px !important\",\n      opacity: \"0 !important\",\n      position: \"absolute !important\",\n      top: \"-1px !important\",\n      width: \"1px !important\",\n    };\n    var shouldCreateFocusIntercept =\n      browserDetection.hasSoftwareKeyboard() ||\n      browserDetection.isFirefox() ||\n      browserDetection.isIE();\n\n    if (!shouldCreateFocusIntercept) {\n      return document.createDocumentFragment();\n    }\n\n    input.setAttribute(\"aria-hidden\", \"true\");\n    input.setAttribute(\"autocomplete\", \"off\");\n    input.setAttribute(\"data-braintree-direction\", direction);\n    input.setAttribute(\"data-braintree-type\", type);\n    input.setAttribute(\n      \"id\",\n      \"bt-\" + type + \"-\" + direction + \"-\" + hostedFieldsId\n    );\n    input.setAttribute(\n      \"style\",\n      JSON.stringify(focusInterceptStyles)\n        .replace(/[{}\"]/g, \"\")\n        .replace(/,/g, \";\")\n    );\n\n    classList.add(input, \"focus-intercept\");\n\n    input.addEventListener(\"focus\", function (event) {\n      handler(event);\n\n      /*\n        Certain browsers without software keyboards (Firefox, Internet\n        Explorer) need the focus intercept inputs that get inserted\n        around the actual input to blur themselves, otherwise the\n        browser gets confused about what should have focus. Can't\n        apply this to browsers with software keyboards however,\n        because it blurs everything, and focus on the actual input is\n        also lost.\n      */\n      if (!browserDetection.hasSoftwareKeyboard()) {\n        input.blur();\n      }\n    });\n\n    return input;\n  },\n  destroy: function (idString) {\n    var focusInputs;\n\n    if (!idString) {\n      focusInputs = document.querySelectorAll(\"[data-braintree-direction]\");\n      focusInputs = [].slice.call(focusInputs);\n    } else {\n      focusInputs = [document.getElementById(idString)];\n    }\n\n    focusInputs.forEach(function (node) {\n      if (\n        node &&\n        node.nodeType === 1 &&\n        focusIntercept.matchFocusElement(node.getAttribute(\"id\"))\n      ) {\n        node.parentNode.removeChild(node);\n      }\n    });\n  },\n  matchFocusElement: function (idString) {\n    var idComponents, hasBTPrefix, isAllowedType, isValidDirection;\n\n    if (!idString) {\n      return false;\n    }\n\n    idComponents = idString.split(\"-\");\n\n    if (idComponents.length < 4) {\n      return false;\n    }\n\n    hasBTPrefix = idComponents[0] === \"bt\";\n    isAllowedType = allowedFields.indexOf(idComponents[1]) > -1;\n    isValidDirection =\n      idComponents[2] === directions.BACK ||\n      idComponents[2] === directions.FORWARD;\n\n    return Boolean(hasBTPrefix && isAllowedType && isValidDirection);\n  },\n};\n\nmodule.exports = focusIntercept;\n\n},{\"./browser-detection\":87,\"./constants\":88,\"@braintree/class-list\":40}],92:[function(require,module,exports){\n\"use strict\";\n\nvar creditCardType = require(\"credit-card-type\");\n\nmodule.exports = function (number) {\n  var results = creditCardType(number);\n\n  results.forEach(function (card) {\n    // NEXT_MAJOR_VERSION credit-card-type fixed the mastercard enum\n    // but we still pass master-card in the braintree API\n    // in a major version bump, we can remove this and\n    // this will be mastercard instead of master-card\n    if (card.type === \"mastercard\") {\n      card.type = \"master-card\";\n    }\n  });\n\n  return results;\n};\n\n},{\"credit-card-type\":168}],93:[function(require,module,exports){\n\"use strict\";\n\nvar createAuthorizationData = require(\"./create-authorization-data\");\nvar jsonClone = require(\"./json-clone\");\nvar constants = require(\"./constants\");\n\nfunction addMetadata(configuration, data) {\n  var key;\n  var attrs = data ? jsonClone(data) : {};\n  var authAttrs = createAuthorizationData(configuration.authorization).attrs;\n  var _meta = jsonClone(configuration.analyticsMetadata);\n\n  attrs.braintreeLibraryVersion = constants.BRAINTREE_LIBRARY_VERSION;\n\n  for (key in attrs._meta) {\n    if (attrs._meta.hasOwnProperty(key)) {\n      _meta[key] = attrs._meta[key];\n    }\n  }\n\n  attrs._meta = _meta;\n\n  if (authAttrs.tokenizationKey) {\n    attrs.tokenizationKey = authAttrs.tokenizationKey;\n  } else {\n    attrs.authorizationFingerprint = authAttrs.authorizationFingerprint;\n  }\n\n  return attrs;\n}\n\nmodule.exports = addMetadata;\n\n},{\"./constants\":100,\"./create-authorization-data\":104,\"./json-clone\":128}],94:[function(require,module,exports){\n\"use strict\";\n\nvar Promise = require(\"./promise\");\nvar constants = require(\"./constants\");\nvar addMetadata = require(\"./add-metadata\");\n\nfunction sendAnalyticsEvent(clientInstanceOrPromise, kind, callback) {\n  var timestamp = Date.now(); // milliseconds\n\n  return Promise.resolve(clientInstanceOrPromise)\n    .then(function (client) {\n      var timestampInPromise = Date.now();\n      var configuration = client.getConfiguration();\n      var request = client._request;\n      var url = configuration.gatewayConfiguration.analytics.url;\n      var data = {\n        analytics: [\n          {\n            kind: constants.ANALYTICS_PREFIX + kind,\n            isAsync:\n              Math.floor(timestampInPromise / 1000) !==\n              Math.floor(timestamp / 1000),\n            timestamp: timestamp,\n          },\n        ],\n      };\n\n      request(\n        {\n          url: url,\n          method: \"post\",\n          data: addMetadata(configuration, data),\n          timeout: constants.ANALYTICS_REQUEST_TIMEOUT_MS,\n        },\n        callback\n      );\n    })\n    .catch(function (err) {\n      // for all non-test cases, we don't provide a callback,\n      // so this error will always be swallowed. In this case,\n      // that's fine, it should only error when the deferred\n      // client fails to set up, in which case we don't want\n      // that error to report over and over again via these\n      // deferred analytics events\n      if (callback) {\n        callback(err);\n      }\n    });\n}\n\nmodule.exports = {\n  sendEvent: sendAnalyticsEvent,\n};\n\n},{\"./add-metadata\":93,\"./constants\":100,\"./promise\":131}],95:[function(require,module,exports){\n\"use strict\";\n\nvar loadScript = require(\"@braintree/asset-loader/load-script\");\n\nmodule.exports = {\n  loadScript: loadScript,\n};\n\n},{\"@braintree/asset-loader/load-script\":5}],96:[function(require,module,exports){\n\"use strict\";\n\nvar assignNormalized =\n  typeof Object.assign === \"function\" ? Object.assign : assignPolyfill;\n\nfunction assignPolyfill(destination) {\n  var i, source, key;\n\n  for (i = 1; i < arguments.length; i++) {\n    source = arguments[i];\n    for (key in source) {\n      if (source.hasOwnProperty(key)) {\n        destination[key] = source[key];\n      }\n    }\n  }\n\n  return destination;\n}\n\nmodule.exports = {\n  assign: assignNormalized,\n  _assign: assignPolyfill,\n};\n\n},{}],97:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"./braintree-error\");\nvar Promise = require(\"./promise\");\nvar sharedErrors = require(\"./errors\");\nvar VERSION = \"3.88.3\";\n\nfunction basicComponentVerification(options) {\n  var client, authorization, name;\n\n  if (!options) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INVALID_USE_OF_INTERNAL_FUNCTION.type,\n        code: sharedErrors.INVALID_USE_OF_INTERNAL_FUNCTION.code,\n        message:\n          \"Options must be passed to basicComponentVerification function.\",\n      })\n    );\n  }\n\n  name = options.name;\n  client = options.client;\n  authorization = options.authorization;\n\n  if (!client && !authorization) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INSTANTIATION_OPTION_REQUIRED.type,\n        code: sharedErrors.INSTANTIATION_OPTION_REQUIRED.code,\n        // NEXT_MAJOR_VERSION in major version, we expose passing in authorization for all components\n        // instead of passing in a client instance. Leave this a silent feature for now.\n        message: \"options.client is required when instantiating \" + name + \".\",\n      })\n    );\n  }\n\n  if (!authorization && client.getVersion() !== VERSION) {\n    return Promise.reject(\n      new BraintreeError({\n        type: sharedErrors.INCOMPATIBLE_VERSIONS.type,\n        code: sharedErrors.INCOMPATIBLE_VERSIONS.code,\n        message:\n          \"Client (version \" +\n          client.getVersion() +\n          \") and \" +\n          name +\n          \" (version \" +\n          VERSION +\n          \") components must be from the same SDK version.\",\n      })\n    );\n  }\n\n  return Promise.resolve();\n}\n\nmodule.exports = {\n  verify: basicComponentVerification,\n};\n\n},{\"./braintree-error\":99,\"./errors\":109,\"./promise\":131}],98:[function(require,module,exports){\n\"use strict\";\n\nvar once = require(\"./once\");\n\nfunction call(fn, callback) {\n  var isSync = fn.length === 0;\n\n  if (isSync) {\n    fn();\n    callback(null);\n  } else {\n    fn(callback);\n  }\n}\n\nmodule.exports = function (functions, cb) {\n  var i;\n  var length = functions.length;\n  var remaining = length;\n  var callback = once(cb);\n\n  if (length === 0) {\n    callback(null);\n\n    return;\n  }\n\n  function finish(err) {\n    if (err) {\n      callback(err);\n\n      return;\n    }\n\n    remaining -= 1;\n    if (remaining === 0) {\n      callback(null);\n    }\n  }\n\n  for (i = 0; i < length; i++) {\n    call(functions[i], finish);\n  }\n};\n\n},{\"./once\":130}],99:[function(require,module,exports){\n\"use strict\";\n\nvar enumerate = require(\"./enumerate\");\n\n/**\n * @class\n * @global\n * @param {object} options Construction options\n * @classdesc This class is used to report error conditions, frequently as the first parameter to callbacks throughout the Braintree SDK.\n * @description <strong>You cannot use this constructor directly. Interact with instances of this class through {@link callback callbacks}.</strong>\n */\nfunction BraintreeError(options) {\n  if (!BraintreeError.types.hasOwnProperty(options.type)) {\n    throw new Error(options.type + \" is not a valid type.\");\n  }\n\n  if (!options.code) {\n    throw new Error(\"Error code required.\");\n  }\n\n  if (!options.message) {\n    throw new Error(\"Error message required.\");\n  }\n\n  this.name = \"BraintreeError\";\n\n  /**\n   * @type {string}\n   * @description A code that corresponds to specific errors.\n   */\n  this.code = options.code;\n\n  /**\n   * @type {string}\n   * @description A short description of the error.\n   */\n  this.message = options.message;\n\n  /**\n   * @type {BraintreeError.types}\n   * @description The type of error.\n   */\n  this.type = options.type;\n\n  /**\n   * @type {object=}\n   * @description Additional information about the error, such as an underlying network error response.\n   */\n  this.details = options.details;\n}\n\nBraintreeError.prototype = Object.create(Error.prototype);\nBraintreeError.prototype.constructor = BraintreeError;\n\n/**\n * Enum for {@link BraintreeError} types.\n * @name BraintreeError.types\n * @enum\n * @readonly\n * @memberof BraintreeError\n * @property {string} CUSTOMER An error caused by the customer.\n * @property {string} MERCHANT An error that is actionable by the merchant.\n * @property {string} NETWORK An error due to a network problem.\n * @property {string} INTERNAL An error caused by Braintree code.\n * @property {string} UNKNOWN An error where the origin is unknown.\n */\nBraintreeError.types = enumerate([\n  \"CUSTOMER\",\n  \"MERCHANT\",\n  \"NETWORK\",\n  \"INTERNAL\",\n  \"UNKNOWN\",\n]);\n\nBraintreeError.findRootError = function (err) {\n  if (\n    err instanceof BraintreeError &&\n    err.details &&\n    err.details.originalError\n  ) {\n    return BraintreeError.findRootError(err.details.originalError);\n  }\n\n  return err;\n};\n\nmodule.exports = BraintreeError;\n\n},{\"./enumerate\":108}],100:[function(require,module,exports){\n\"use strict\";\n\nvar VERSION = \"3.88.3\";\nvar PLATFORM = \"web\";\n\nvar CLIENT_API_URLS = {\n  production: \"https://api.braintreegateway.com:443\",\n  sandbox: \"https://api.sandbox.braintreegateway.com:443\",\n};\n\nvar ASSETS_URLS = {\n  production: \"https://assets.braintreegateway.com\",\n  sandbox: \"https://assets.braintreegateway.com\",\n};\n\nvar GRAPHQL_URLS = {\n  production: \"https://payments.braintree-api.com/graphql\",\n  sandbox: \"https://payments.sandbox.braintree-api.com/graphql\",\n};\n\nmodule.exports = {\n  ANALYTICS_PREFIX: PLATFORM + \".\",\n  ANALYTICS_REQUEST_TIMEOUT_MS: 2000,\n  ASSETS_URLS: ASSETS_URLS,\n  CLIENT_API_URLS: CLIENT_API_URLS,\n  FRAUDNET_SOURCE: \"BRAINTREE_SIGNIN\",\n  FRAUDNET_FNCLS: \"fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99\",\n  FRAUDNET_URL: \"https://c.paypal.com/da/r/fb.js\",\n  BUS_CONFIGURATION_REQUEST_EVENT: \"BUS_CONFIGURATION_REQUEST\",\n  GRAPHQL_URLS: GRAPHQL_URLS,\n  INTEGRATION_TIMEOUT_MS: 60000,\n  VERSION: VERSION,\n  INTEGRATION: \"custom\",\n  SOURCE: \"client\",\n  PLATFORM: PLATFORM,\n  BRAINTREE_LIBRARY_VERSION: \"braintree/\" + PLATFORM + \"/\" + VERSION,\n};\n\n},{}],101:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"./braintree-error\");\nvar sharedErrors = require(\"./errors\");\n\nmodule.exports = function (instance, methodNames) {\n  methodNames.forEach(function (methodName) {\n    instance[methodName] = function () {\n      throw new BraintreeError({\n        type: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.type,\n        code: sharedErrors.METHOD_CALLED_AFTER_TEARDOWN.code,\n        message: methodName + \" cannot be called after teardown.\",\n      });\n    };\n  });\n};\n\n},{\"./braintree-error\":99,\"./errors\":109}],102:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"./braintree-error\");\n\nfunction convertToBraintreeError(originalErr, btErrorObject) {\n  if (originalErr instanceof BraintreeError) {\n    return originalErr;\n  }\n\n  return new BraintreeError({\n    type: btErrorObject.type,\n    code: btErrorObject.code,\n    message: btErrorObject.message,\n    details: {\n      originalError: originalErr,\n    },\n  });\n}\n\nmodule.exports = convertToBraintreeError;\n\n},{\"./braintree-error\":99}],103:[function(require,module,exports){\n\"use strict\";\n\nvar ASSETS_URLS = require(\"./constants\").ASSETS_URLS;\n\nfunction createAssetsUrl(authorization) {\n  return ASSETS_URLS.production;\n}\n/* eslint-enable */\n\nmodule.exports = {\n  create: createAssetsUrl,\n};\n\n},{\"./constants\":100}],104:[function(require,module,exports){\n\"use strict\";\n\nvar atob = require(\"../lib/vendor/polyfill\").atob;\nvar CLIENT_API_URLS = require(\"../lib/constants\").CLIENT_API_URLS;\n\nfunction _isTokenizationKey(str) {\n  return /^[a-zA-Z0-9]+_[a-zA-Z0-9]+_[a-zA-Z0-9_]+$/.test(str);\n}\n\nfunction _parseTokenizationKey(tokenizationKey) {\n  var tokens = tokenizationKey.split(\"_\");\n  var environment = tokens[0];\n  var merchantId = tokens.slice(2).join(\"_\");\n\n  return {\n    merchantId: merchantId,\n    environment: environment,\n  };\n}\n\nfunction createAuthorizationData(authorization) {\n  var parsedClientToken, parsedTokenizationKey;\n  var data = {\n    attrs: {},\n    configUrl: \"\",\n  };\n\n  if (_isTokenizationKey(authorization)) {\n    parsedTokenizationKey = _parseTokenizationKey(authorization);\n    data.environment = parsedTokenizationKey.environment;\n    data.attrs.tokenizationKey = authorization;\n    data.configUrl =\n      CLIENT_API_URLS[parsedTokenizationKey.environment] +\n      \"/merchants/\" +\n      parsedTokenizationKey.merchantId +\n      \"/client_api/v1/configuration\";\n  } else {\n    parsedClientToken = JSON.parse(atob(authorization));\n    data.environment = parsedClientToken.environment;\n    data.attrs.authorizationFingerprint =\n      parsedClientToken.authorizationFingerprint;\n    data.configUrl = parsedClientToken.configUrl;\n    data.graphQL = parsedClientToken.graphQL;\n  }\n\n  return data;\n}\n\nmodule.exports = createAuthorizationData;\n\n},{\"../lib/constants\":100,\"../lib/vendor/polyfill\":136}],105:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"./braintree-error\");\nvar Promise = require(\"./promise\");\nvar assets = require(\"./assets\");\nvar sharedErrors = require(\"./errors\");\n\nvar VERSION = \"3.88.3\";\n\nfunction createDeferredClient(options) {\n  var promise = Promise.resolve();\n\n  if (options.client) {\n    return Promise.resolve(options.client);\n  }\n\n  if (!(window.braintree && window.braintree.client)) {\n    promise = assets\n      .loadScript({\n        src: options.assetsUrl + \"/web/\" + VERSION + \"/js/client.min.js\",\n      })\n      .catch(function (err) {\n        return Promise.reject(\n          new BraintreeError({\n            type: sharedErrors.CLIENT_SCRIPT_FAILED_TO_LOAD.type,\n            code: sharedErrors.CLIENT_SCRIPT_FAILED_TO_LOAD.code,\n            message: sharedErrors.CLIENT_SCRIPT_FAILED_TO_LOAD.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      });\n  }\n\n  return promise.then(function () {\n    if (window.braintree.client.VERSION !== VERSION) {\n      return Promise.reject(\n        new BraintreeError({\n          type: sharedErrors.INCOMPATIBLE_VERSIONS.type,\n          code: sharedErrors.INCOMPATIBLE_VERSIONS.code,\n          message:\n            \"Client (version \" +\n            window.braintree.client.VERSION +\n            \") and \" +\n            options.name +\n            \" (version \" +\n            VERSION +\n            \") components must be from the same SDK version.\",\n        })\n      );\n    }\n\n    return window.braintree.client.create({\n      authorization: options.authorization,\n      debug: options.debug,\n    });\n  });\n}\n\nmodule.exports = {\n  create: createDeferredClient,\n};\n\n},{\"./assets\":95,\"./braintree-error\":99,\"./errors\":109,\"./promise\":131}],106:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (fn) {\n  return function () {\n    // IE9 doesn't support passing arguments to setTimeout so we have to emulate it.\n    var args = arguments;\n\n    setTimeout(function () {\n      fn.apply(null, args);\n    }, 1);\n  };\n};\n\n},{}],107:[function(require,module,exports){\n\"use strict\";\n\nvar batchExecuteFunctions = require(\"./batch-execute-functions\");\n\nfunction Destructor() {\n  this._teardownRegistry = [];\n\n  this._isTearingDown = false;\n}\n\nDestructor.prototype.registerFunctionForTeardown = function (fn) {\n  if (typeof fn === \"function\") {\n    this._teardownRegistry.push(fn);\n  }\n};\n\nDestructor.prototype.teardown = function (callback) {\n  if (this._isTearingDown) {\n    callback(new Error(\"Destructor is already tearing down\"));\n\n    return;\n  }\n\n  this._isTearingDown = true;\n\n  batchExecuteFunctions(\n    this._teardownRegistry,\n    function (err) {\n      this._teardownRegistry = [];\n      this._isTearingDown = false;\n\n      if (typeof callback === \"function\") {\n        callback(err);\n      }\n    }.bind(this)\n  );\n};\n\nmodule.exports = Destructor;\n\n},{\"./batch-execute-functions\":98}],108:[function(require,module,exports){\n\"use strict\";\n\nfunction enumerate(values, prefix) {\n  prefix = prefix == null ? \"\" : prefix;\n\n  return values.reduce(function (enumeration, value) {\n    enumeration[value] = prefix + value;\n\n    return enumeration;\n  }, {});\n}\n\nmodule.exports = enumerate;\n\n},{}],109:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Shared Internal Error Codes\n * @ignore\n * @description These codes should never be experienced by the merchant directly.\n * @property {INTERNAL} INVALID_USE_OF_INTERNAL_FUNCTION Occurs when the client is created without a gateway configuration. Should never happen.\n */\n\n/**\n * @name BraintreeError.Shared Errors - Component Creation Error Codes\n * @description Errors that occur when creating components.\n * @property {MERCHANT} INSTANTIATION_OPTION_REQUIRED Occurs when a component is created that is missing a required option.\n * @property {MERCHANT} INCOMPATIBLE_VERSIONS Occurs when a component is created with a client with a different version than the component.\n * @property {NETWORK} CLIENT_SCRIPT_FAILED_TO_LOAD Occurs when a component attempts to load the Braintree client script, but the request fails.\n */\n\n/**\n * @name BraintreeError.Shared Errors - Component Instance Error Codes\n * @description Errors that occur when using instances of components.\n * @property {MERCHANT} METHOD_CALLED_AFTER_TEARDOWN Occurs when a method is called on a component instance after it has been torn down.\n */\n\nvar BraintreeError = require(\"./braintree-error\");\n\nmodule.exports = {\n  INVALID_USE_OF_INTERNAL_FUNCTION: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"INVALID_USE_OF_INTERNAL_FUNCTION\",\n  },\n  INSTANTIATION_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INSTANTIATION_OPTION_REQUIRED\",\n  },\n  INCOMPATIBLE_VERSIONS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"INCOMPATIBLE_VERSIONS\",\n  },\n  CLIENT_SCRIPT_FAILED_TO_LOAD: {\n    type: BraintreeError.types.NETWORK,\n    code: \"CLIENT_SCRIPT_FAILED_TO_LOAD\",\n    message: \"Braintree client script could not be loaded.\",\n  },\n  METHOD_CALLED_AFTER_TEARDOWN: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"METHOD_CALLED_AFTER_TEARDOWN\",\n  },\n};\n\n},{\"./braintree-error\":99}],110:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function findRootNode(element) {\n  while (element.parentNode) {\n    element = element.parentNode;\n  }\n\n  return element;\n};\n\n},{}],111:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (array, key, value) {\n  var i;\n\n  for (i = 0; i < array.length; i++) {\n    if (array[i].hasOwnProperty(key) && array[i][key] === value) {\n      return array[i];\n    }\n  }\n\n  return null;\n};\n\n},{}],112:[function(require,module,exports){\n\"use strict\";\n\nvar Popup = require(\"./strategies/popup\");\nvar PopupBridge = require(\"./strategies/popup-bridge\");\nvar Modal = require(\"./strategies/modal\");\nvar Bus = require(\"framebus\");\nvar events = require(\"../shared/events\");\nvar errors = require(\"../shared/errors\");\nvar constants = require(\"../shared/constants\");\nvar uuid = require(\"@braintree/uuid\");\nvar iFramer = require(\"@braintree/iframer\");\nvar BraintreeError = require(\"../../braintree-error\");\nvar browserDetection = require(\"../shared/browser-detection\");\nvar isHTTPS = require(\"../../is-https\");\nvar assign = require(\"./../../assign\").assign;\nvar BUS_CONFIGURATION_REQUEST_EVENT =\n  require(\"../../constants\").BUS_CONFIGURATION_REQUEST_EVENT;\n\nvar REQUIRED_CONFIG_KEYS = [\"name\", \"dispatchFrameUrl\", \"openFrameUrl\"];\n\nfunction noop() {}\n\nfunction _validateFrameConfiguration(options) {\n  if (!options) {\n    throw new Error(\"Valid configuration is required\");\n  }\n\n  REQUIRED_CONFIG_KEYS.forEach(function (key) {\n    if (!options.hasOwnProperty(key)) {\n      throw new Error(\"A valid frame \" + key + \" must be provided\");\n    }\n  });\n\n  if (!/^[\\w_]+$/.test(options.name)) {\n    throw new Error(\"A valid frame name must be provided\");\n  }\n}\n\nfunction FrameService(options) {\n  _validateFrameConfiguration(options);\n\n  this._serviceId = uuid().replace(/-/g, \"\");\n\n  this._options = {\n    name: options.name + \"_\" + this._serviceId,\n    dispatchFrameUrl: options.dispatchFrameUrl,\n    openFrameUrl: options.openFrameUrl,\n    height: options.height,\n    width: options.width,\n    top: options.top,\n    left: options.left,\n  };\n  this.state = options.state || {};\n\n  this._bus = new Bus({ channel: this._serviceId });\n  this._setBusEvents();\n}\n\nFrameService.prototype.initialize = function (callback) {\n  var dispatchFrameReadyHandler = function () {\n    callback();\n    this._bus.off(events.DISPATCH_FRAME_READY, dispatchFrameReadyHandler);\n  }.bind(this);\n\n  this._bus.on(events.DISPATCH_FRAME_READY, dispatchFrameReadyHandler);\n  this._writeDispatchFrame();\n};\n\nFrameService.prototype._writeDispatchFrame = function () {\n  var frameName = constants.DISPATCH_FRAME_NAME + \"_\" + this._serviceId;\n  var frameSrc = this._options.dispatchFrameUrl;\n\n  this._dispatchFrame = iFramer({\n    \"aria-hidden\": true,\n    name: frameName,\n    title: frameName,\n    src: frameSrc,\n    class: constants.DISPATCH_FRAME_CLASS,\n    height: 0,\n    width: 0,\n    style: {\n      position: \"absolute\",\n      left: \"-9999px\",\n    },\n  });\n\n  document.body.appendChild(this._dispatchFrame);\n};\n\nFrameService.prototype._setBusEvents = function () {\n  this._bus.on(\n    events.DISPATCH_FRAME_REPORT,\n    function (res, reply) {\n      if (this._onCompleteCallback) {\n        this._onCompleteCallback.call(null, res.err, res.payload);\n      }\n      this._frame.close();\n\n      this._onCompleteCallback = null;\n\n      if (reply) {\n        reply();\n      }\n    }.bind(this)\n  );\n\n  this._bus.on(\n    BUS_CONFIGURATION_REQUEST_EVENT,\n    function (reply) {\n      reply(this.state);\n    }.bind(this)\n  );\n};\n\nFrameService.prototype.open = function (options, callback) {\n  var error;\n\n  options = options || {};\n  this._frame = this._getFrameForEnvironment(options);\n\n  this._frame.initialize(callback);\n\n  if (this._frame instanceof PopupBridge) {\n    return;\n  }\n\n  assign(this.state, options.state);\n\n  this._onCompleteCallback = callback;\n  this._frame.open();\n\n  if (this.isFrameClosed()) {\n    this._cleanupFrame();\n    if (callback) {\n      if (browserDetection.isIE() && !isHTTPS.isHTTPS()) {\n        error = new BraintreeError(\n          errors.FRAME_SERVICE_FRAME_OPEN_FAILED_IE_BUG\n        );\n      } else {\n        error = new BraintreeError(errors.FRAME_SERVICE_FRAME_OPEN_FAILED);\n      }\n      callback(error);\n    }\n\n    return;\n  }\n  this._pollForPopupClose();\n};\n\nFrameService.prototype.redirect = function (url) {\n  if (this._frame && !this.isFrameClosed()) {\n    this._frame.redirect(url);\n  }\n};\n\nFrameService.prototype.close = function () {\n  if (!this.isFrameClosed()) {\n    this._frame.close();\n  }\n};\n\nFrameService.prototype.focus = function () {\n  if (!this.isFrameClosed()) {\n    this._frame.focus();\n  }\n};\n\nFrameService.prototype.createHandler = function (options) {\n  options = options || {};\n\n  return {\n    close: function () {\n      if (options.beforeClose) {\n        options.beforeClose();\n      }\n\n      this.close();\n    }.bind(this),\n    focus: function () {\n      if (options.beforeFocus) {\n        options.beforeFocus();\n      }\n\n      this.focus();\n    }.bind(this),\n  };\n};\n\nFrameService.prototype.createNoopHandler = function () {\n  return {\n    close: noop,\n    focus: noop,\n  };\n};\n\nFrameService.prototype.teardown = function () {\n  this.close();\n  this._dispatchFrame.parentNode.removeChild(this._dispatchFrame);\n  this._dispatchFrame = null;\n  this._cleanupFrame();\n};\n\nFrameService.prototype.isFrameClosed = function () {\n  return this._frame == null || this._frame.isClosed();\n};\n\nFrameService.prototype._cleanupFrame = function () {\n  this._frame = null;\n  clearInterval(this._popupInterval);\n  this._popupInterval = null;\n};\n\nFrameService.prototype._pollForPopupClose = function () {\n  this._popupInterval = setInterval(\n    function () {\n      if (this.isFrameClosed()) {\n        this._cleanupFrame();\n        if (this._onCompleteCallback) {\n          this._onCompleteCallback(\n            new BraintreeError(errors.FRAME_SERVICE_FRAME_CLOSED)\n          );\n        }\n      }\n    }.bind(this),\n    constants.POPUP_POLL_INTERVAL\n  );\n\n  return this._popupInterval;\n};\n\nFrameService.prototype._getFrameForEnvironment = function (options) {\n  var usePopup = browserDetection.supportsPopups();\n  var popupBridgeExists = Boolean(window.popupBridge);\n\n  var initOptions = assign({}, this._options, options);\n\n  if (popupBridgeExists) {\n    return new PopupBridge(initOptions);\n  } else if (usePopup) {\n    return new Popup(initOptions);\n  }\n\n  return new Modal(initOptions);\n};\n\nmodule.exports = FrameService;\n\n},{\"../../braintree-error\":99,\"../../constants\":100,\"../../is-https\":126,\"../shared/browser-detection\":119,\"../shared/constants\":120,\"../shared/errors\":121,\"../shared/events\":122,\"./../../assign\":96,\"./strategies/modal\":114,\"./strategies/popup\":117,\"./strategies/popup-bridge\":115,\"@braintree/iframer\":43,\"@braintree/uuid\":47,\"framebus\":176}],113:[function(require,module,exports){\n\"use strict\";\n\nvar FrameService = require(\"./frame-service\");\n\nmodule.exports = {\n  create: function createFrameService(options, callback) {\n    var frameService = new FrameService(options);\n\n    frameService.initialize(function () {\n      callback(frameService);\n    });\n  },\n};\n\n},{\"./frame-service\":112}],114:[function(require,module,exports){\n\"use strict\";\n\nvar iFramer = require(\"@braintree/iframer\");\nvar assign = require(\"../../../assign\").assign;\nvar browserDetection = require(\"../../shared/browser-detection\");\n\nvar ELEMENT_STYLES = {\n  position: \"fixed\",\n  top: 0,\n  left: 0,\n  bottom: 0,\n  padding: 0,\n  margin: 0,\n  border: 0,\n  outline: \"none\",\n  zIndex: 20001,\n  background: \"#FFFFFF\",\n};\n\nfunction noop() {}\n\nfunction Modal(options) {\n  this._closed = null;\n  this._frame = null;\n  this._options = options || {};\n  this._container = this._options.container || document.body;\n}\n\nModal.prototype.initialize = noop;\n\nModal.prototype.open = function () {\n  var iframerConfig = {\n    src: this._options.openFrameUrl,\n    name: this._options.name,\n    scrolling: \"yes\",\n    height: \"100%\",\n    width: \"100%\",\n    style: assign({}, ELEMENT_STYLES),\n    title: \"Lightbox Frame\",\n  };\n\n  if (browserDetection.isIos()) {\n    // WKWebView has buggy behavior when scrolling a fixed position modal. The workaround is to lock scrolling in\n    // the background. When modal is closed, we restore scrolling and return to the previous scroll position.\n    if (browserDetection.isIosWKWebview()) {\n      this._lockScrolling();\n      // Allows WKWebView to scroll all the way down to bottom\n      iframerConfig.style = {};\n    }\n\n    this._el = document.createElement(\"div\");\n\n    assign(this._el.style, ELEMENT_STYLES, {\n      height: \"100%\",\n      width: \"100%\",\n      overflow: \"auto\",\n      \"-webkit-overflow-scrolling\": \"touch\",\n    });\n\n    this._frame = iFramer(iframerConfig);\n    this._el.appendChild(this._frame);\n  } else {\n    this._el = this._frame = iFramer(iframerConfig);\n  }\n  this._closed = false;\n\n  this._container.appendChild(this._el);\n};\n\nModal.prototype.focus = noop;\n\nModal.prototype.close = function () {\n  this._container.removeChild(this._el);\n  this._frame = null;\n  this._closed = true;\n  if (browserDetection.isIosWKWebview()) {\n    this._unlockScrolling();\n  }\n};\n\nModal.prototype.isClosed = function () {\n  return Boolean(this._closed);\n};\n\nModal.prototype.redirect = function (redirectUrl) {\n  this._frame.src = redirectUrl;\n};\n\nModal.prototype._unlockScrolling = function () {\n  document.body.style.overflow = this._savedBodyProperties.overflowStyle;\n  document.body.style.position = this._savedBodyProperties.positionStyle;\n  window.scrollTo(\n    this._savedBodyProperties.left,\n    this._savedBodyProperties.top\n  );\n  delete this._savedBodyProperties;\n};\n\nModal.prototype._lockScrolling = function () {\n  var doc = document.documentElement;\n\n  // From https://stackoverflow.com/questions/9538868/prevent-body-from-scrolling-when-a-modal-is-opened#comment65626743_24727206\n  this._savedBodyProperties = {\n    left: (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),\n    top: (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0),\n    overflowStyle: document.body.style.overflow,\n    positionStyle: document.body.style.position,\n  };\n  document.body.style.overflow = \"hidden\";\n  document.body.style.position = \"fixed\";\n  window.scrollTo(0, 0);\n};\n\nmodule.exports = Modal;\n\n},{\"../../../assign\":96,\"../../shared/browser-detection\":119,\"@braintree/iframer\":43}],115:[function(require,module,exports){\n\"use strict\";\n\nvar BraintreeError = require(\"../../../braintree-error\");\nvar errors = require(\"../../shared/errors\");\n\nfunction noop() {}\n\nfunction PopupBridge(options) {\n  this._closed = null;\n  this._options = options;\n}\n\nPopupBridge.prototype.initialize = function (callback) {\n  var self = this;\n\n  window.popupBridge.onComplete = function (err, payload) {\n    var popupDismissed = !payload && !err;\n\n    self._closed = true;\n\n    if (err || popupDismissed) {\n      // User clicked \"Done\" button of browser view\n      callback(new BraintreeError(errors.FRAME_SERVICE_FRAME_CLOSED));\n\n      return;\n    }\n    // User completed popup flow (includes success and cancel cases)\n    callback(null, payload);\n  };\n};\n\nPopupBridge.prototype.open = function (options) {\n  var url;\n\n  options = options || {};\n  url = options.openFrameUrl || this._options.openFrameUrl;\n\n  this._closed = false;\n  window.popupBridge.open(url);\n};\n\nPopupBridge.prototype.focus = noop;\n\nPopupBridge.prototype.close = noop;\n\nPopupBridge.prototype.isClosed = function () {\n  return Boolean(this._closed);\n};\n\nPopupBridge.prototype.redirect = function (redirectUrl) {\n  this.open({ openFrameUrl: redirectUrl });\n};\n\nmodule.exports = PopupBridge;\n\n},{\"../../../braintree-error\":99,\"../../shared/errors\":121}],116:[function(require,module,exports){\n\"use strict\";\n\nvar constants = require(\"../../../shared/constants\");\nvar position = require(\"./position\");\n\nfunction calculatePosition(type, userDefinedPosition, size) {\n  if (typeof userDefinedPosition !== \"undefined\") {\n    return userDefinedPosition;\n  }\n\n  return position[type](size);\n}\n\nmodule.exports = function composePopupOptions(options) {\n  var height = options.height || constants.DEFAULT_POPUP_HEIGHT;\n  var width = options.width || constants.DEFAULT_POPUP_WIDTH;\n  var top = calculatePosition(\"top\", options.top, height);\n  var left = calculatePosition(\"left\", options.left, width);\n\n  return [\n    constants.POPUP_BASE_OPTIONS,\n    \"height=\" + height,\n    \"width=\" + width,\n    \"top=\" + top,\n    \"left=\" + left,\n  ].join(\",\");\n};\n\n},{\"../../../shared/constants\":120,\"./position\":118}],117:[function(require,module,exports){\n\"use strict\";\n\nvar composeOptions = require(\"./compose-options\");\n\nfunction noop() {}\n\nfunction Popup(options) {\n  this._frame = null;\n  this._options = options || {};\n\n  this.open();\n}\n\nPopup.prototype.initialize = noop;\n\nPopup.prototype.open = function () {\n  this._frame = window.open(\n    this._options.openFrameUrl,\n    this._options.name,\n    composeOptions(this._options)\n  );\n};\n\nPopup.prototype.focus = function () {\n  this._frame.focus();\n};\n\nPopup.prototype.close = function () {\n  if (this._frame.closed) {\n    return;\n  }\n  this._frame.close();\n};\n\nPopup.prototype.isClosed = function () {\n  return !this._frame || Boolean(this._frame.closed);\n};\n\nPopup.prototype.redirect = function (redirectUrl) {\n  this._frame.location.href = redirectUrl;\n};\n\nmodule.exports = Popup;\n\n},{\"./compose-options\":116}],118:[function(require,module,exports){\n\"use strict\";\n\nfunction top(height) {\n  var windowHeight =\n    window.outerHeight || document.documentElement.clientHeight;\n  var windowTop = window.screenY == null ? window.screenTop : window.screenY;\n\n  return center(windowHeight, height, windowTop);\n}\n\nfunction left(width) {\n  var windowWidth = window.outerWidth || document.documentElement.clientWidth;\n  var windowLeft = window.screenX == null ? window.screenLeft : window.screenX;\n\n  return center(windowWidth, width, windowLeft);\n}\n\nfunction center(windowMetric, popupMetric, offset) {\n  return (windowMetric - popupMetric) / 2 + offset;\n}\n\nmodule.exports = {\n  top: top,\n  left: left,\n  center: center,\n};\n\n},{}],119:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  isIos: require(\"@braintree/browser-detection/is-ios\"),\n  isIosWKWebview: require(\"@braintree/browser-detection/is-ios-wkwebview\"),\n  isIE: require(\"@braintree/browser-detection/is-ie\"),\n  supportsPopups: require(\"@braintree/browser-detection/supports-popups\"),\n};\n\n},{\"@braintree/browser-detection/is-ie\":31,\"@braintree/browser-detection/is-ios\":37,\"@braintree/browser-detection/is-ios-wkwebview\":36,\"@braintree/browser-detection/supports-popups\":39}],120:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  DISPATCH_FRAME_NAME: \"dispatch\",\n  DISPATCH_FRAME_CLASS: \"braintree-dispatch-frame\",\n  POPUP_BASE_OPTIONS: \"resizable,scrollbars\",\n  DEFAULT_POPUP_WIDTH: 450,\n  DEFAULT_POPUP_HEIGHT: 535,\n  POPUP_POLL_INTERVAL: 100,\n  POPUP_CLOSE_TIMEOUT: 100,\n};\n\n},{}],121:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Popup Related Error Codes\n * @ignore\n * @description Errors that occur when using a component that opens a popup window.\n * @property {INTERNAL} FRAME_SERVICE_FRAME_CLOSED - Occurs when the frame is closed before tokenization can occur.\n * @property {INTERNAL} FRAME_SERVICE_FRAME_OPEN_FAILED - Occurs when the popup could not be opened.\n * @property {INTERNAL} FRAME_SERVICE_FRAME_OPEN_FAILED_IE_BUG - Occurs when the frame could not be opened because of a specific bug in Internet Explorer - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11324352/.\n */\n\nvar BraintreeError = require(\"../../braintree-error\");\n\nmodule.exports = {\n  FRAME_SERVICE_FRAME_CLOSED: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"FRAME_SERVICE_FRAME_CLOSED\",\n    message: \"Frame closed before tokenization could occur.\",\n  },\n  FRAME_SERVICE_FRAME_OPEN_FAILED: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"FRAME_SERVICE_FRAME_OPEN_FAILED\",\n    message: \"Frame failed to open.\",\n  },\n  FRAME_SERVICE_FRAME_OPEN_FAILED_IE_BUG: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"FRAME_SERVICE_FRAME_OPEN_FAILED_IE_BUG\",\n    message:\n      \"Could not open frame. This may be due to a bug in IE browsers when attempting to open an HTTPS page from a HTTP page. https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11324352/\",\n  },\n};\n\n},{\"../../braintree-error\":99}],122:[function(require,module,exports){\n\"use strict\";\n\nvar enumerate = require(\"../../enumerate\");\n\nmodule.exports = enumerate(\n  [\"DISPATCH_FRAME_READY\", \"DISPATCH_FRAME_REPORT\"],\n  \"frameService:\"\n);\n\n},{\"../../enumerate\":108}],123:[function(require,module,exports){\n\"use strict\";\n\nvar VERSION = \"3.88.3\";\nvar assign = require(\"./assign\").assign;\n\nfunction generateTokenizationParameters(configuration, overrides) {\n  var metadata = configuration.analyticsMetadata;\n  var basicTokenizationParameters = {\n    gateway: \"braintree\",\n    \"braintree:merchantId\": configuration.gatewayConfiguration.merchantId,\n    \"braintree:apiVersion\": \"v1\",\n    \"braintree:sdkVersion\": VERSION,\n    \"braintree:metadata\": JSON.stringify({\n      source: metadata.source,\n      integration: metadata.integration,\n      sessionId: metadata.sessionId,\n      version: VERSION,\n      platform: metadata.platform,\n    }),\n  };\n\n  return assign({}, basicTokenizationParameters, overrides);\n}\n\nmodule.exports = function (configuration, googlePayVersion, googleMerchantId) {\n  var data, paypalPaymentMethod;\n  var androidPayConfiguration = configuration.gatewayConfiguration.androidPay;\n  var environment =\n    configuration.gatewayConfiguration.environment === \"production\"\n      ? \"PRODUCTION\"\n      : \"TEST\";\n\n  if (googlePayVersion === 2) {\n    data = {\n      apiVersion: 2,\n      apiVersionMinor: 0,\n      environment: environment,\n      allowedPaymentMethods: [\n        {\n          type: \"CARD\",\n          parameters: {\n            allowedAuthMethods: [\"PAN_ONLY\", \"CRYPTOGRAM_3DS\"],\n            allowedCardNetworks: androidPayConfiguration.supportedNetworks.map(\n              function (card) {\n                return card.toUpperCase();\n              }\n            ),\n          },\n          tokenizationSpecification: {\n            type: \"PAYMENT_GATEWAY\",\n            parameters: generateTokenizationParameters(configuration, {\n              \"braintree:authorizationFingerprint\":\n                androidPayConfiguration.googleAuthorizationFingerprint,\n            }),\n          },\n        },\n      ],\n    };\n\n    if (googleMerchantId) {\n      data.merchantInfo = {\n        merchantId: googleMerchantId,\n      };\n    }\n\n    if (androidPayConfiguration.paypalClientId) {\n      paypalPaymentMethod = {\n        type: \"PAYPAL\",\n        parameters: {\n          /* eslint-disable camelcase */\n          purchase_context: {\n            purchase_units: [\n              {\n                payee: {\n                  client_id: androidPayConfiguration.paypalClientId,\n                },\n                recurring_payment: true,\n              },\n            ],\n          },\n          /* eslint-enable camelcase */\n        },\n        tokenizationSpecification: {\n          type: \"PAYMENT_GATEWAY\",\n          parameters: generateTokenizationParameters(configuration, {\n            \"braintree:paypalClientId\": androidPayConfiguration.paypalClientId,\n          }),\n        },\n      };\n\n      data.allowedPaymentMethods.push(paypalPaymentMethod);\n    }\n  } else {\n    data = {\n      environment: environment,\n      allowedPaymentMethods: [\"CARD\", \"TOKENIZED_CARD\"],\n      paymentMethodTokenizationParameters: {\n        tokenizationType: \"PAYMENT_GATEWAY\",\n        parameters: generateTokenizationParameters(configuration, {\n          \"braintree:authorizationFingerprint\":\n            androidPayConfiguration.googleAuthorizationFingerprint,\n        }),\n      },\n      cardRequirements: {\n        allowedCardNetworks: androidPayConfiguration.supportedNetworks.map(\n          function (card) {\n            return card.toUpperCase();\n          }\n        ),\n      },\n    };\n\n    if (configuration.authorizationType === \"TOKENIZATION_KEY\") {\n      data.paymentMethodTokenizationParameters.parameters[\n        \"braintree:clientKey\"\n      ] = configuration.authorization;\n    }\n\n    if (googleMerchantId) {\n      data.merchantId = googleMerchantId;\n    }\n\n    if (googlePayVersion) {\n      data.apiVersion = googlePayVersion;\n    }\n  }\n\n  return data;\n};\n\n},{\"./assign\":96}],124:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function inIframe(win) {\n  win = win || window;\n\n  try {\n    return win.self !== win.top;\n  } catch (e) {\n    return true;\n  }\n};\n\n},{}],125:[function(require,module,exports){\n\"use strict\";\n\nfunction convertDateStringToDate(dateString) {\n  var splitDate = dateString.split(\"-\");\n\n  return new Date(splitDate[0], splitDate[1], splitDate[2]);\n}\n\nfunction isDateStringBeforeOrOn(firstDate, secondDate) {\n  return (\n    convertDateStringToDate(firstDate) <= convertDateStringToDate(secondDate)\n  );\n}\n\nmodule.exports = isDateStringBeforeOrOn;\n\n},{}],126:[function(require,module,exports){\n\"use strict\";\n\nfunction isHTTPS(protocol) {\n  protocol = protocol || window.location.protocol;\n\n  return protocol === \"https:\";\n}\n\nmodule.exports = {\n  isHTTPS: isHTTPS,\n};\n\n},{}],127:[function(require,module,exports){\n\"use strict\";\n\nvar parser;\nvar legalHosts = {\n  \"paypal.com\": 1,\n  \"braintreepayments.com\": 1,\n  \"braintreegateway.com\": 1,\n  \"braintree-api.com\": 1,\n};\n\nfunction stripSubdomains(domain) {\n  return domain.split(\".\").slice(-2).join(\".\");\n}\n\nfunction isVerifiedDomain(url) {\n  var mainDomain;\n\n  url = url.toLowerCase();\n\n  if (!/^https:/.test(url)) {\n    return false;\n  }\n\n  parser = parser || document.createElement(\"a\");\n  parser.href = url;\n  mainDomain = stripSubdomains(parser.hostname);\n\n  return legalHosts.hasOwnProperty(mainDomain);\n}\n\nmodule.exports = isVerifiedDomain;\n\n},{}],128:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (value) {\n  return JSON.parse(JSON.stringify(value));\n};\n\n},{}],129:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (obj) {\n  return Object.keys(obj).filter(function (key) {\n    return typeof obj[key] === \"function\";\n  });\n};\n\n},{}],130:[function(require,module,exports){\n\"use strict\";\n\nfunction once(fn) {\n  var called = false;\n\n  return function () {\n    if (!called) {\n      called = true;\n      fn.apply(null, arguments);\n    }\n  };\n}\n\nmodule.exports = once;\n\n},{}],131:[function(require,module,exports){\n\"use strict\";\n\nvar PromisePolyfill = require(\"promise-polyfill\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\n\n// eslint-disable-next-line no-undef\nvar PromiseGlobal = typeof Promise !== \"undefined\" ? Promise : PromisePolyfill;\n\nExtendedPromise.suppressUnhandledPromiseMessage = true;\nExtendedPromise.setPromise(PromiseGlobal);\n\nmodule.exports = PromiseGlobal;\n\n},{\"@braintree/extended-promise\":42,\"promise-polyfill\":191}],132:[function(require,module,exports){\n\"use strict\";\n\nfunction _notEmpty(obj) {\n  var key;\n\n  for (key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\n/* eslint-disable no-mixed-operators */\nfunction _isArray(value) {\n  return (\n    (value &&\n      typeof value === \"object\" &&\n      typeof value.length === \"number\" &&\n      Object.prototype.toString.call(value) === \"[object Array]\") ||\n    false\n  );\n}\n/* eslint-enable no-mixed-operators */\n\nfunction hasQueryParams(url) {\n  url = url || window.location.href;\n\n  return /\\?/.test(url);\n}\n\nfunction parse(url) {\n  var query, params;\n\n  url = url || window.location.href;\n\n  if (!hasQueryParams(url)) {\n    return {};\n  }\n\n  query = url.split(\"?\")[1] || \"\";\n  query = query.replace(/#.*$/, \"\").split(\"&\");\n\n  params = query.reduce(function (toReturn, keyValue) {\n    var parts = keyValue.split(\"=\");\n    var key = decodeURIComponent(parts[0]);\n    var value = decodeURIComponent(parts[1]);\n\n    toReturn[key] = value;\n\n    return toReturn;\n  }, {});\n\n  return params;\n}\n\nfunction stringify(params, namespace) {\n  var k, v, p;\n  var query = [];\n\n  for (p in params) {\n    if (!params.hasOwnProperty(p)) {\n      continue;\n    }\n\n    v = params[p];\n\n    if (namespace) {\n      if (_isArray(params)) {\n        k = namespace + \"[]\";\n      } else {\n        k = namespace + \"[\" + p + \"]\";\n      }\n    } else {\n      k = p;\n    }\n    if (typeof v === \"object\") {\n      query.push(stringify(v, k));\n    } else {\n      query.push(encodeURIComponent(k) + \"=\" + encodeURIComponent(v));\n    }\n  }\n\n  return query.join(\"&\");\n}\n\nfunction queryify(url, params) {\n  url = url || \"\";\n\n  if (params != null && typeof params === \"object\" && _notEmpty(params)) {\n    url += url.indexOf(\"?\") === -1 ? \"?\" : \"\";\n    url += url.indexOf(\"=\") !== -1 ? \"&\" : \"\";\n    url += stringify(params);\n  }\n\n  return url;\n}\n\nmodule.exports = {\n  parse: parse,\n  stringify: stringify,\n  queryify: queryify,\n  hasQueryParams: hasQueryParams,\n};\n\n},{}],133:[function(require,module,exports){\n\"use strict\";\n\nvar uuid = require(\"@braintree/uuid\");\nvar findRootNode = require(\"./find-root-node\");\n\n// based on https://github.com/krakenjs/belter/blob/cdddc4f8ddb172d29db9e7e1ad1eeeacfb93e215/src/dom.js#L981-L1031\n// thanks @bluepnume\n\nfunction isShadowElement(element) {\n  element = findRootNode(element);\n\n  return element.toString() === \"[object ShadowRoot]\";\n}\n\nfunction getShadowHost(element) {\n  element = findRootNode(element);\n\n  if (!isShadowElement(element)) {\n    return null;\n  }\n\n  return element.host;\n}\n\nfunction transformToSlot(element, styles) {\n  var styleNode = findRootNode(element).querySelector(\"style\");\n  var shadowHost = getShadowHost(element);\n  var slotName = \"shadow-slot-\" + uuid();\n  var slot = document.createElement(\"slot\");\n  var slotProvider = document.createElement(\"div\");\n\n  slot.setAttribute(\"name\", slotName);\n  element.appendChild(slot);\n\n  slotProvider.setAttribute(\"slot\", slotName);\n  shadowHost.appendChild(slotProvider);\n\n  if (styles) {\n    if (!styleNode) {\n      styleNode = document.createElement(\"style\");\n      element.appendChild(styleNode);\n    }\n\n    styleNode.sheet.insertRule(\n      '::slotted([slot=\"' + slotName + '\"]) { ' + styles + \" }\"\n    );\n  }\n\n  if (isShadowElement(shadowHost)) {\n    return transformToSlot(slotProvider, styles);\n  }\n\n  return slotProvider;\n}\n\nmodule.exports = {\n  isShadowElement: isShadowElement,\n  getShadowHost: getShadowHost,\n  transformToSlot: transformToSlot,\n};\n\n},{\"./find-root-node\":110,\"@braintree/uuid\":47}],134:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = function (snakeString) {\n  if (snakeString.indexOf(\"_\") === -1) {\n    return snakeString;\n  }\n\n  return snakeString.toLowerCase().replace(/(\\_\\w)/g, function (match) {\n    return match[1].toUpperCase();\n  });\n};\n\n},{}],135:[function(require,module,exports){\n\"use strict\";\n\nfunction useMin(isDebug) {\n  return isDebug ? \"\" : \".min\";\n}\n\nmodule.exports = useMin;\n\n},{}],136:[function(require,module,exports){\n\"use strict\";\n\n// NEXT_MAJOR_VERSION old versions of IE don't have atob, in the\n// next major version, we're dropping support for those versions\n// so we can eliminate the need to have this atob polyfill\nvar atobNormalized = typeof atob === \"function\" ? atob : atobPolyfill;\n\nfunction atobPolyfill(base64String) {\n  var a, b, c, b1, b2, b3, b4, i;\n  var base64Matcher = new RegExp(\n    \"^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$\"\n  );\n  var characters =\n    \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n  var result = \"\";\n\n  if (!base64Matcher.test(base64String)) {\n    throw new Error(\"Non base64 encoded input passed to window.atob polyfill\");\n  }\n\n  i = 0;\n  do {\n    b1 = characters.indexOf(base64String.charAt(i++));\n    b2 = characters.indexOf(base64String.charAt(i++));\n    b3 = characters.indexOf(base64String.charAt(i++));\n    b4 = characters.indexOf(base64String.charAt(i++));\n\n    a = ((b1 & 0x3f) << 2) | ((b2 >> 4) & 0x3);\n    b = ((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf);\n    c = ((b3 & 0x3) << 6) | (b4 & 0x3f);\n\n    result +=\n      String.fromCharCode(a) +\n      (b ? String.fromCharCode(b) : \"\") +\n      (c ? String.fromCharCode(c) : \"\");\n  } while (i < base64String.length);\n\n  return result;\n}\n\nmodule.exports = {\n  atob: function (base64String) {\n    return atobNormalized.call(window, base64String);\n  },\n  _atob: atobPolyfill,\n};\n\n},{}],137:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.PayPal Checkout - Creation Error Codes\n * @description Errors that occur when [creating the PayPal Checkout component](./module-braintree-web_paypal-checkout.html#.create).\n * @property {MERCHANT} PAYPAL_NOT_ENABLED Occurs when PayPal is not enabled on the Braintree control panel.\n * @property {MERCHANT} PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED Occurs only when testing in Sandbox, when a PayPal sandbox account is not linked to the merchant account in the Braintree control panel.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout - createPayment Error Codes\n * @description Errors that occur when using the [`createPayment` method](./PayPalCheckout.html#createPayment).\n * @property {MERCHANT} PAYPAL_FLOW_OPTION_REQUIRED Occurs when a required option is missing.\n * @property {MERCHANT} PAYPAL_INVALID_PAYMENT_OPTION Occurs when an option contains an invalid value.\n * @property {NETWORK} PAYPAL_FLOW_FAILED Occurs when something goes wrong when initializing the flow.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout - startVaultInitiatedCheckout Error Codes\n * @description Errors that occur when using the [`startVaultInitiatedCheckout` method](./PayPalCheckout.html#startVaultInitiatedCheckout).\n * @property {MERCHANT} PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED Occurs when a required param is missing when calling the method.\n * @property {MERCHANT} PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED Occurs when PayPal window could not be opened. This often occurs because the call to start the vault initiated flow was not triggered from a click event.\n * @property {CUSTOMER} PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED Occurs when a customer closes the PayPal flow before completion.\n * @property {MERCHANT} PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS Occurs when the flow is initialized while an authorization is already in progress.\n * @property {NETWORK} PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED Occurs when something went wrong setting up the flow.\n */\n\n/**\n * @name BraintreeError.PayPal Checkout - tokenizePayment Error Codes\n * @description Errors that occur when using the [`tokenizePayment` method](./PayPalCheckout.html#tokenizePayment).\n * @property {NETWORK} PAYPAL_ACCOUNT_TOKENIZATION_FAILED Occurs when PayPal account could not be tokenized.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  PAYPAL_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_NOT_ENABLED\",\n    message: \"PayPal is not enabled for this merchant.\",\n  },\n  PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED\",\n    message:\n      \"A linked PayPal Sandbox account is required to use PayPal Checkout in Sandbox. See https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#linked-paypal-testing for details on linking your PayPal sandbox with Braintree.\",\n  },\n  PAYPAL_ACCOUNT_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_ACCOUNT_TOKENIZATION_FAILED\",\n    message: \"Could not tokenize user's PayPal account.\",\n  },\n  PAYPAL_FLOW_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_FLOW_FAILED\",\n    message: \"Could not initialize PayPal flow.\",\n  },\n  PAYPAL_FLOW_OPTION_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_FLOW_OPTION_REQUIRED\",\n    message: \"PayPal flow property is invalid or missing.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED\",\n    message: \"Something went wrong when setting up the checkout workflow.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\",\n    message:\n      \"PayPal popup failed to open, make sure to initiate the vault checkout in response to a user action.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED\",\n    message: \"Customer closed PayPal popup before authorizing.\",\n  },\n  PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS\",\n    message: \"Vault initiated checkout already in progress.\",\n  },\n  PAYPAL_INVALID_PAYMENT_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"PAYPAL_INVALID_PAYMENT_OPTION\",\n    message: \"PayPal payment options are invalid.\",\n  },\n};\n\n},{\"../lib/braintree-error\":99}],138:[function(require,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/paypal-checkout\n * @description A component to integrate with the [PayPal JS SDK](https://github.com/paypal/paypal-checkout-components).\n */\n\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar PayPalCheckout = require(\"./paypal-checkout\");\nvar VERSION = \"3.88.3\";\n\n/**\n * @static\n * @function create\n * @description There are two ways to integrate the PayPal Checkout component. See the [PayPal Checkout constructor documentation](PayPalCheckout.html#PayPalCheckout) for more information and examples.\n *\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {string} [options.merchantAccountId] A non-default merchant account ID to use for tokenization.\n * @param {boolean} [options.autoSetDataUserIdToken=false] Whether or not to render the PayPal SDK button with a customer's vaulted PayPal account. Must be used in conjunction with a Client Token generated with a customer id.\n * @param {callback} [callback] The second argument, `data`, is the {@link PayPalCheckout} instance.\n * @example\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   // set up the PayPal JS SDK\n * }).catch(function (err) {\n *   console.error('Error!', err);\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nfunction create(options) {\n  var name = \"PayPal Checkout\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var instance = new PayPalCheckout(options);\n\n      return instance._initialize(options);\n    });\n}\n\n/**\n * @static\n * @function isSupported\n * @description Returns true if PayPal Checkout [supports this browser](index.html#browser-support-webviews).\n * @deprecated Previously, this method checked for Popup support in the browser. The PayPal JS SDK now falls back to a modal if popups are not supported.\n * @returns {Boolean} Returns true if PayPal Checkout supports this browser.\n */\nfunction isSupported() {\n  return true;\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  isSupported: isSupported,\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":97,\"./paypal-checkout\":139,\"@braintree/wrap-promise\":51}],139:[function(require,module,exports){\n\"use strict\";\n\nvar analytics = require(\"../lib/analytics\");\nvar assign = require(\"../lib/assign\").assign;\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar Promise = require(\"../lib/promise\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar convertToBraintreeError = require(\"../lib/convert-to-braintree-error\");\nvar errors = require(\"./errors\");\nvar constants = require(\"../paypal/shared/constants\");\nvar frameService = require(\"../lib/frame-service/external\");\nvar createAuthorizationData = require(\"../lib/create-authorization-data\");\nvar methods = require(\"../lib/methods\");\nvar useMin = require(\"../lib/use-min\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar querystring = require(\"../lib/querystring\");\nvar VERSION = \"3.88.3\";\nvar INTEGRATION_TIMEOUT_MS = require(\"../lib/constants\").INTEGRATION_TIMEOUT_MS;\n\nvar REQUIRED_PARAMS_FOR_START_VAULT_INITIATED_CHECKOUT = [\n  \"amount\",\n  \"currency\",\n  \"vaultInitiatedCheckoutPaymentMethodToken\",\n];\n\nvar PAYPAL_SDK_PRELOAD_URL =\n  \"https://www.{ENV}paypal.com/smart/buttons/preload\";\n\n/**\n * PayPal Checkout tokenized payload. Returned in {@link PayPalCheckout#tokenizePayment}'s callback as the second argument, `data`.\n * @typedef {object} PayPalCheckout~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type The payment method type, always `PayPalAccount`.\n * @property {object} details Additional PayPal account details.\n * @property {string} details.email User's email address.\n * @property {string} details.payerId User's payer ID, the unique identifier for each PayPal account.\n * @property {string} details.firstName User's given name.\n * @property {string} details.lastName User's surname.\n * @property {?string} details.countryCode User's 2 character country code.\n * @property {?string} details.phone User's phone number (e.g. 555-867-5309).\n * @property {?object} details.shippingAddress User's shipping address details, only available if shipping address is enabled.\n * @property {string} details.shippingAddress.recipientName Recipient of postage.\n * @property {string} details.shippingAddress.line1 Street number and name.\n * @property {string} details.shippingAddress.line2 Extended address.\n * @property {string} details.shippingAddress.city City or locality.\n * @property {string} details.shippingAddress.state State or region.\n * @property {string} details.shippingAddress.postalCode Postal code.\n * @property {string} details.shippingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} details.billingAddress User's billing address details.\n * Not available to all merchants; [contact support](https://developer.paypal.com/braintree/help) for details on eligibility and enabling this feature.\n * Alternatively, see `shippingAddress` above as an available client option.\n * @property {string} details.billingAddress.line1 Street number and name.\n * @property {string} details.billingAddress.line2 Extended address.\n * @property {string} details.billingAddress.city City or locality.\n * @property {string} details.billingAddress.state State or region.\n * @property {string} details.billingAddress.postalCode Postal code.\n * @property {string} details.billingAddress.countryCode 2 character country code (e.g. US).\n * @property {?object} creditFinancingOffered This property will only be present when the customer pays with PayPal Credit.\n * @property {object} creditFinancingOffered.totalCost This is the estimated total payment amount including interest and fees the user will pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalCost.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.totalCost.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {number} creditFinancingOffered.term Length of financing terms in months.\n * @property {object} creditFinancingOffered.monthlyPayment This is the estimated amount per month that the customer will need to pay including fees and interest.\n * @property {string} creditFinancingOffered.monthlyPayment.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.monthlyPayment.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {object} creditFinancingOffered.totalInterest Estimated interest or fees amount the payer will have to pay during the lifetime of the loan.\n * @property {string} creditFinancingOffered.totalInterest.value An amount defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm) for the given currency.\n * @property {string} creditFinancingOffered.totalInterest.currency 3 letter currency code as defined by [ISO 4217](https://www.iso.org/iso/home/standards/currency_codes.htm).\n * @property {boolean} creditFinancingOffered.payerAcceptance Status of whether the customer ultimately was approved for and chose to make the payment using the approved installment credit.\n * @property {boolean} creditFinancingOffered.cartAmountImmutable Indicates whether the cart amount is editable after payer's acceptance on PayPal side.\n */\n\n/**\n * @class\n * @param {object} options see {@link module:braintree-web/paypal-checkout.create|paypal-checkout.create}\n * @classdesc This class represents a PayPal Checkout component that coordinates with the {@link https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page|PayPal SDK}. Instances of this class can generate payment data and tokenize authorized payments.\n *\n * All UI (such as preventing actions on the parent page while authentication is in progress) is managed by the {@link https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page|PayPal SDK}. You must provide your PayPal `client-id` as a query parameter. You can [retrieve this value from the PayPal Dashboard](https://developer.paypal.com/docs/checkout/integrate/#1-get-paypal-rest-api-credentials).\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/paypal-checkout.create|braintree-web.paypal-checkout.create} instead.</strong>\n *\n * #### Integrate Checkout Flow with PayPal SDK\n *\n * You must have [PayPal's script, configured with various query parameters](https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page), loaded on your page:\n *\n * ```html\n * <script src=\"https://www.paypal.com/sdk/js?client-id=your-sandbox-or-prod-client-id\"></script>\n * <div id=\"paypal-button\"></div>\n * ```\n *\n * When passing values in the `createPayment` method, make sure they match the [corresponding parameters in the query parameters for the PayPal SDK script](https://developer.paypal.com/docs/checkout/reference/customize-sdk/).\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Buttons({\n *     createOrder: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'checkout',\n *         currency: 'USD',\n *         amount: '10.00',\n *         intent: 'capture' // this value must either be `capture` or match the intent passed into the PayPal SDK intent query parameter\n *         // your other createPayment options here\n *       });\n *     },\n *\n *     onApprove: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     },\n *\n *     onCancel: function () {\n *       // handle case where user cancels\n *     },\n *\n *     onError: function (err) {\n *       // handle case where error occurs\n *     }\n *   }).render('#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * #### Integrate Vault Flow with PayPal SDK\n *\n * You must have [PayPal's script, configured with various query parameters](https://developer.paypal.com/docs/checkout/integrate/#2-add-the-paypal-script-to-your-web-page), loaded on your page:\n *\n * ```html\n * <script src=\"https://www.paypal.com/sdk/js?client-id=your-sandbox-or-prod-client-id&vault=true\"></script>\n * <div id=\"paypal-button\"></div>\n * ```\n *\n * When passing values in the `createPayment` method, make sure they match the [corresponding parameters in the query parameters for the PayPal SDK script](https://developer.paypal.com/docs/checkout/reference/customize-sdk/).\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Buttons({\n *     createBillingAgreement: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'vault'\n *         // your other createPayment options here\n *       });\n *     },\n *\n *     onApprove: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     },\n *\n *     onCancel: function () {\n *       // handle case where user cancels\n *     },\n *\n *     onError: function (err) {\n *       // handle case where error occurs\n *     }\n *   }).render('#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * #### Integrate with Checkout.js (deprecated PayPal SDK)\n *\n * If you are creating a new PayPal integration, please follow the previous integration guide to use the current version of the PayPal SDK. Use this integration guide only as a reference if you are already integrated with Checkout.js.\n *\n * You must have PayPal's Checkout.js script loaded on your page.\n *\n * ```html\n * <script src=\"https://www.paypalobjects.com/api/checkout.js\" data-version-4 log-level=\"warn\"></script>\n * ```\n *\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Button.render({\n *     env: 'production', // or 'sandbox'\n *\n *     payment: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         // your createPayment options here\n *       });\n *     },\n *\n *     onAuthorize: function (data, actions) {\n *       // some logic here before tokenization happens below\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     }\n *   }, '#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n */\nfunction PayPalCheckout(options) {\n  this._merchantAccountId = options.merchantAccountId;\n  // TODO remove this requirement for it to be opt in.\n  // This feature is not yet GA, so we're intentionally making\n  // it opt in and not publicly documenting it yet. Once it's\n  // GA, we can remove the requirement to opt in to it\n  this._autoSetDataUserIdToken = Boolean(options.autoSetDataUserIdToken);\n}\n\nPayPalCheckout.prototype._initialize = function (options) {\n  var config;\n\n  if (options.client) {\n    config = options.client.getConfiguration();\n    this._authorizationInformation = {\n      fingerprint: config.authorizationFingerprint,\n      environment: config.gatewayConfiguration.environment,\n    };\n  } else {\n    config = createAuthorizationData(options.authorization);\n    this._authorizationInformation = {\n      fingerprint: config.attrs.authorizationFingerprint,\n      environment: config.environment,\n    };\n  }\n\n  this._clientPromise = createDeferredClient\n    .create({\n      authorization: options.authorization,\n      client: options.client,\n      debug: options.debug,\n      assetsUrl: createAssetsUrl.create(options.authorization),\n      name: \"PayPal Checkout\",\n    })\n    .then(\n      function (client) {\n        this._configuration = client.getConfiguration();\n\n        // we skip these checks if a merchant account id is\n        // passed in, because the default merchant account\n        // may not have paypal enabled\n        if (!this._merchantAccountId) {\n          if (!this._configuration.gatewayConfiguration.paypalEnabled) {\n            this._setupError = new BraintreeError(errors.PAYPAL_NOT_ENABLED);\n          } else if (\n            this._configuration.gatewayConfiguration.paypal\n              .environmentNoNetwork === true\n          ) {\n            this._setupError = new BraintreeError(\n              errors.PAYPAL_SANDBOX_ACCOUNT_NOT_LINKED\n            );\n          }\n        }\n\n        if (this._setupError) {\n          return Promise.reject(this._setupError);\n        }\n\n        analytics.sendEvent(client, \"paypal-checkout.initialized\");\n        this._frameServicePromise = this._setupFrameService(client);\n\n        return client;\n      }.bind(this)\n    );\n\n  // if client was passed in, let config checks happen before\n  // resolving the instance. Otherwise, just resolve the instance\n  if (options.client) {\n    return this._clientPromise.then(\n      function () {\n        return this;\n      }.bind(this)\n    );\n  }\n\n  return Promise.resolve(this);\n};\n\nPayPalCheckout.prototype._setupFrameService = function (client) {\n  var frameServicePromise = new ExtendedPromise();\n  var config = client.getConfiguration();\n  var timeoutRef = setTimeout(function () {\n    analytics.sendEvent(client, \"paypal-checkout.frame-service.timed-out\");\n    frameServicePromise.reject(\n      new BraintreeError(\n        errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_SETUP_FAILED\n      )\n    );\n  }, INTEGRATION_TIMEOUT_MS);\n\n  this._assetsUrl =\n    config.gatewayConfiguration.paypal.assetsUrl + \"/web/\" + VERSION;\n  this._isDebug = config.isDebug;\n  // Note: this is using the static landing frame that the deprecated PayPal component builds and uses\n  this._loadingFrameUrl =\n    this._assetsUrl +\n    \"/html/paypal-landing-frame\" +\n    useMin(this._isDebug) +\n    \".html\";\n\n  frameService.create(\n    {\n      name: \"braintreepaypallanding\",\n      dispatchFrameUrl:\n        this._assetsUrl +\n        \"/html/dispatch-frame\" +\n        useMin(this._isDebug) +\n        \".html\",\n      openFrameUrl: this._loadingFrameUrl,\n    },\n    function (service) {\n      this._frameService = service;\n      clearTimeout(timeoutRef);\n\n      frameServicePromise.resolve();\n    }.bind(this)\n  );\n\n  return frameServicePromise;\n};\n\n/**\n * @typedef {object} PayPalCheckout~lineItem\n * @property {string} quantity Number of units of the item purchased. This value must be a whole number and can't be negative or zero.\n * @property {string} unitAmount Per-unit price of the item. Can include up to 2 decimal places. This value can't be negative or zero.\n * @property {string} name Item name. Maximum 127 characters.\n * @property {string} kind Indicates whether the line item is a debit (sale) or credit (refund) to the customer. Accepted values: `debit` and `credit`.\n * @property {?string} unitTaxAmount Per-unit tax price of the item. Can include up to 2 decimal places. This value can't be negative or zero.\n * @property {?string} description Item description. Maximum 127 characters.\n * @property {?string} productCode Product or UPC code for the item. Maximum 127 characters.\n * @property {?string} url The URL to product information.\n */\n\n/**\n * @typedef {object} PayPalCheckout~shippingOption\n * @property {string} id A unique ID that identifies a payer-selected shipping option.\n * @property {string} label A description that the payer sees, which helps them choose an appropriate shipping option. For example, `Free Shipping`, `USPS Priority Shipping`, `Expédition prioritaire USPS`, or `USPS yōuxiān fā huò`. Localize this description to the payer's locale.\n * @property {boolean} selected If `selected = true` is specified as part of the API request it represents the shipping option that the payee/merchant expects to be pre-selected for the payer when they first view the shipping options within the PayPal checkout experience. As part of the response if a shipping option has `selected = true` it represents the shipping option that the payer selected during the course of checkout with PayPal. Only 1 `shippingOption` can be set to `selected = true`.\n * @property {string} type The method by which the payer wants to get their items. The possible values are:\n * * `SHIPPING` - The payer intends to receive the items at a specified address.\n * * `PICKUP` - The payer intends to pick up the items at a specified address. For example, a store address.\n * @property {object} amount The shipping cost for the selected option.\n * @property {string} amount.currency The three-character ISO-4217 currency code. PayPal does not support all currencies.\n * @property {string} amount.value The amount the shipping option will cost. Includes the specified number of digits after decimal separator for the ISO-4217 currency code.\n */\n\n/**\n * Creates a PayPal payment ID or billing token using the given options. This is meant to be passed to the PayPal JS SDK.\n * When a {@link callback} is defined, the function returns undefined and invokes the callback with the id to be used with the PayPal JS SDK. Otherwise, it returns a Promise that resolves with the id.\n * @public\n * @param {object} options All options for the PayPalCheckout component.\n * @param {string} options.flow Set to 'checkout' for one-time payment flow, or 'vault' for Vault flow. If 'vault' is used with a client token generated with a customer ID, the PayPal account will be added to that customer as a saved payment method.\n * @param {string} [options.intent=authorize]\n * * `authorize` - Submits the transaction for authorization but not settlement.\n * * `order` - Validates the transaction without an authorization (i.e. without holding funds). Useful for authorizing and capturing funds up to 90 days after the order has been placed. Only available for Checkout flow.\n * * `capture` - Payment will be immediately submitted for settlement upon creating a transaction. `sale` can be used as an alias for this value.\n * @param {boolean} [options.offerCredit=false] Offers PayPal Credit as the default funding instrument for the transaction. If the customer isn't pre-approved for PayPal Credit, they will be prompted to apply for it.\n * @param {(string|number)} [options.amount] The amount of the transaction. Required when using the Checkout flow.\n * @param {string} [options.currency] The currency code of the amount, such as 'USD'. Required when using the Checkout flow.\n * @param {string} [options.displayName] The merchant name displayed inside of the PayPal lightbox; defaults to the company name on your Braintree account\n * @param {boolean} [options.requestBillingAgreement] If `true` and `flow = checkout`, the customer will be prompted to consent to a billing agreement during the checkout flow. This value is ignored when `flow = vault`.\n * @param {object} [options.billingAgreementDetails] When `requestBillingAgreement = true`, allows for details to be set for the billing agreement portion of the flow.\n * @param {string} [options.billingAgreementDetails.description] Description of the billing agreement to display to the customer.\n * @param {string} [options.vaultInitiatedCheckoutPaymentMethodToken] Use the payment method nonce representing a PayPal account with a Billing Agreement ID to create the payment and redirect the customer to select a new financial instrument. This option is only applicable to the `checkout` flow.\n * @param {shippingOption[]} [options.shippingOptions] List of shipping options offered by the payee or merchant to the payer to ship or pick up their items. **Note:** `shippingOptions` may not be passed with `intent=\"order\"`.\n * @param {boolean} [options.enableShippingAddress=false] Returns a shipping address object in {@link PayPal#tokenize}.\n * @param {object} [options.shippingAddressOverride] Allows you to pass a shipping address you have already collected into the PayPal payment flow.\n * @param {string} options.shippingAddressOverride.line1 Street address.\n * @param {string} [options.shippingAddressOverride.line2] Street address (extended).\n * @param {string} options.shippingAddressOverride.city City.\n * @param {string} options.shippingAddressOverride.state State.\n * @param {string} options.shippingAddressOverride.postalCode Postal code.\n * @param {string} options.shippingAddressOverride.countryCode Country.\n * @param {string} [options.shippingAddressOverride.phone] Phone number.\n * @param {string} [options.shippingAddressOverride.recipientName] Recipient's name.\n * @param {boolean} [options.shippingAddressEditable=true] Set to false to disable user editing of the shipping address.\n * @param {string} [options.billingAgreementDescription] Use this option to set the description of the preapproved payment agreement visible to customers in their PayPal profile during Vault flows. Max 255 characters.\n * @param {string} [options.landingPageType] Use this option to specify the PayPal page to display when a user lands on the PayPal site to complete the payment.\n * * `login` - A PayPal account login page is used.\n * * `billing` - A non-PayPal account landing page is used.\n * @param {lineItem[]} [options.lineItems] The {@link PayPalCheckout~lineItem|line items} for this transaction. It can include up to 249 line items.\n * @param {callback} [callback] The second argument is a PayPal `paymentId` or `billingToken` string, depending on whether `options.flow` is `checkout` or `vault`. This is also what is resolved by the promise if no callback is provided.\n * @example\n * // this paypal object is created by the PayPal JS SDK\n * // see https://github.com/paypal/paypal-checkout-components\n * paypal.Buttons({\n *   createOrder: function () {\n *     // when createPayment resolves, it is automatically passed to the PayPal JS SDK\n *     return paypalCheckoutInstance.createPayment({\n *       flow: 'checkout',\n *       amount: '10.00',\n *       currency: 'USD',\n *       intent: 'capture' // this value must either be `capture` or match the intent passed into the PayPal SDK intent query parameter\n *     });\n *   },\n *   // Add other options, e.g. onApproved, onCancel, onError\n * }).render('#paypal-button');\n *\n * @example\n * // shippingOptions are passed to createPayment. You can review the result from onAuthorize to determine which shipping option id was selected.\n * ```javascript\n * braintree.client.create({\n *   authorization: 'authorization'\n * }).then(function (clientInstance) {\n *   return braintree.paypalCheckout.create({\n *     client: clientInstance\n *   });\n * }).then(function (paypalCheckoutInstance) {\n *   return paypal.Button.render({\n *     env: 'production'\n *\n *     payment: function () {\n *       return paypalCheckoutInstance.createPayment({\n *         flow: 'checkout',\n *         amount: '10.00',\n *         currency: 'USD',\n *         shippingOptions: [\n *           {\n *             id: 'UUID-9',\n *             type: 'PICKUP',\n *             label: 'Store Location Five',\n *             selected: true,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           },\n *           {\n *             id: 'shipping-speed-fast',\n *             type: 'SHIPPING',\n *             label: 'Fast Shipping',\n *             selected: false,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           },\n *           {\n *             id: 'shipping-speed-slow',\n *             type: 'SHIPPING',\n *             label: 'Slow Shipping',\n *             selected: false,\n *             amount: {\n *               value: '1.00',\n *               currency: 'USD'\n *             }\n *           }\n *         ]\n *       });\n *     },\n *\n *     onAuthorize: function (data, actions) {\n *       return paypalCheckoutInstance.tokenizePayment(data).then(function (payload) {\n *         // Submit payload.nonce to your server\n *       });\n *     }\n *   }, '#paypal-button');\n * }).catch(function (err) {\n *  console.error('Error!', err);\n * });\n * ```\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.createPayment = function (options) {\n  if (!options || !constants.FLOW_ENDPOINTS.hasOwnProperty(options.flow)) {\n    return Promise.reject(\n      new BraintreeError(errors.PAYPAL_FLOW_OPTION_REQUIRED)\n    );\n  }\n\n  analytics.sendEvent(this._clientPromise, \"paypal-checkout.createPayment\");\n\n  return this._createPaymentResource(options).then(function (response) {\n    var flowToken;\n\n    if (options.flow === \"checkout\") {\n      flowToken = response.paymentResource.redirectUrl.match(/EC-\\w+/)[0];\n    } else {\n      flowToken = response.agreementSetup.tokenId;\n    }\n\n    return flowToken;\n  });\n};\n\nPayPalCheckout.prototype._createPaymentResource = function (options, config) {\n  var self = this;\n  var endpoint = \"paypal_hermes/\" + constants.FLOW_ENDPOINTS[options.flow];\n\n  delete this.intentFromCreatePayment;\n\n  config = config || {};\n\n  if (options.offerCredit === true) {\n    analytics.sendEvent(this._clientPromise, \"paypal-checkout.credit.offered\");\n  }\n\n  return this._clientPromise\n    .then(function (client) {\n      return client\n        .request({\n          endpoint: endpoint,\n          method: \"post\",\n          data: self._formatPaymentResourceData(options, config),\n        })\n        .then(function (data) {\n          self.intentFromCreatePayment = options.intent;\n\n          return data;\n        });\n    })\n    .catch(function (err) {\n      var status;\n\n      if (self._setupError) {\n        return Promise.reject(self._setupError);\n      }\n\n      status = err.details && err.details.httpStatus;\n\n      if (status === 422) {\n        return Promise.reject(\n          new BraintreeError({\n            type: errors.PAYPAL_INVALID_PAYMENT_OPTION.type,\n            code: errors.PAYPAL_INVALID_PAYMENT_OPTION.code,\n            message: errors.PAYPAL_INVALID_PAYMENT_OPTION.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.PAYPAL_FLOW_FAILED.type,\n          code: errors.PAYPAL_FLOW_FAILED.code,\n          message: errors.PAYPAL_FLOW_FAILED.message,\n        })\n      );\n    });\n};\n\n/**\n * Initializes the PayPal checkout flow with a payment method nonce that represents a vaulted PayPal account.\n * When a {@link callback} is defined, the function returns undefined and invokes the callback with the id to be used with the PayPal JS SDK. Otherwise, it returns a Promise that resolves with the id.\n * @public\n * @ignore\n * @param {object} options These options are identical to the {@link PayPalCheckout#createPayment|options for creating a payment resource}, except for the following:\n * * `flow` cannot be set (will always be `'checkout'`)\n * * `amount`, `currency`, and `vaultInitiatedCheckoutPaymentMethodToken` are required instead of optional\n * * Additional configuration is available (listed below)\n * @param {boolean} [options.optOutOfModalBackdrop=false] By default, the webpage will darken and become unusable while the PayPal window is open. For full control of the UI, pass `true` for this option.\n * @param {callback} [callback] The second argument, <code>payload</code>, is a {@link PayPalCheckout~tokenizePayload|tokenizePayload}. If no callback is provided, the promise resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.\n * @example\n * paypalCheckoutInstance.startVaultInitiatedCheckout({\n *   vaultInitiatedCheckoutPaymentMethodToken: 'nonce-that-represents-a-vaulted-paypal-account',\n *   amount: '10.00',\n *   currency: 'USD'\n * }).then(function (payload) {\n *   // send payload.nonce to your server\n * }).catch(function (err) {\n *   if (err.code === 'PAYPAL_POPUP_CLOSED') {\n *     // indicates that customer canceled by\n *     // manually closing the PayPal popup\n *   }\n *\n *   // handle other errors\n * });\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.startVaultInitiatedCheckout = function (options) {\n  var missingRequiredParam;\n  var self = this;\n\n  if (this._vaultInitiatedCheckoutInProgress) {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"paypal-checkout.startVaultInitiatedCheckout.error.already-in-progress\"\n    );\n\n    return Promise.reject(\n      new BraintreeError(\n        errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_IN_PROGRESS\n      )\n    );\n  }\n\n  REQUIRED_PARAMS_FOR_START_VAULT_INITIATED_CHECKOUT.forEach(function (param) {\n    if (!options.hasOwnProperty(param)) {\n      missingRequiredParam = param;\n    }\n  });\n\n  if (missingRequiredParam) {\n    return Promise.reject(\n      new BraintreeError({\n        type: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED.type,\n        code: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_PARAM_REQUIRED.code,\n        message: \"Required param \" + missingRequiredParam + \" is missing.\",\n      })\n    );\n  }\n\n  this._vaultInitiatedCheckoutInProgress = true;\n  this._addModalBackdrop(options);\n\n  options = assign({}, options, {\n    flow: \"checkout\",\n  });\n\n  analytics.sendEvent(\n    this._clientPromise,\n    \"paypal-checkout.startVaultInitiatedCheckout.started\"\n  );\n\n  return this._waitForVaultInitiatedCheckoutDependencies()\n    .then(function () {\n      var frameCommunicationPromise = new ExtendedPromise();\n      var startVaultInitiatedCheckoutPromise = self\n        ._createPaymentResource(options, {\n          returnUrl: self._constructVaultCheckutUrl(\"redirect-frame\"),\n          cancelUrl: self._constructVaultCheckutUrl(\"cancel-frame\"),\n        })\n        .then(function (response) {\n          var redirectUrl = response.paymentResource.redirectUrl;\n\n          self._frameService.redirect(redirectUrl);\n\n          return frameCommunicationPromise;\n        });\n\n      self._frameService.open(\n        {},\n        self._createFrameServiceCallback(frameCommunicationPromise)\n      );\n\n      return startVaultInitiatedCheckoutPromise;\n    })\n    .catch(function (err) {\n      self._vaultInitiatedCheckoutInProgress = false;\n      self._removeModalBackdrop();\n\n      if (err.code === \"FRAME_SERVICE_FRAME_CLOSED\") {\n        analytics.sendEvent(\n          self._clientPromise,\n          \"paypal-checkout.startVaultInitiatedCheckout.canceled.by-customer\"\n        );\n\n        return Promise.reject(\n          new BraintreeError(\n            errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_CANCELED\n          )\n        );\n      }\n\n      if (self._frameService) {\n        self._frameService.close();\n      }\n\n      if (\n        err.code &&\n        err.code.indexOf(\"FRAME_SERVICE_FRAME_OPEN_FAILED\") > -1\n      ) {\n        analytics.sendEvent(\n          self._clientPromise,\n          \"paypal-checkout.startVaultInitiatedCheckout.failed.popup-not-opened\"\n        );\n\n        return Promise.reject(\n          new BraintreeError({\n            code: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\n              .code,\n            type: errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\n              .type,\n            message:\n              errors.PAYPAL_START_VAULT_INITIATED_CHECKOUT_POPUP_OPEN_FAILED\n                .message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      }\n\n      return Promise.reject(err);\n    })\n    .then(function (response) {\n      self._frameService.close();\n      self._vaultInitiatedCheckoutInProgress = false;\n      self._removeModalBackdrop();\n      analytics.sendEvent(\n        self._clientPromise,\n        \"paypal-checkout.startVaultInitiatedCheckout.succeeded\"\n      );\n\n      return Promise.resolve(response);\n    });\n};\n\nPayPalCheckout.prototype._addModalBackdrop = function (options) {\n  if (options.optOutOfModalBackdrop) {\n    return;\n  }\n\n  if (!this._modalBackdrop) {\n    this._modalBackdrop = document.createElement(\"div\");\n    this._modalBackdrop.setAttribute(\n      \"data-braintree-paypal-vault-initiated-checkout-modal\",\n      true\n    );\n    this._modalBackdrop.style.position = \"fixed\";\n    this._modalBackdrop.style.top = 0;\n    this._modalBackdrop.style.bottom = 0;\n    this._modalBackdrop.style.left = 0;\n    this._modalBackdrop.style.right = 0;\n    this._modalBackdrop.style.zIndex = 9999;\n    this._modalBackdrop.style.background = \"black\";\n    this._modalBackdrop.style.opacity = \"0.7\";\n    this._modalBackdrop.addEventListener(\n      \"click\",\n      function () {\n        this.focusVaultInitiatedCheckoutWindow();\n      }.bind(this)\n    );\n  }\n\n  document.body.appendChild(this._modalBackdrop);\n};\n\nPayPalCheckout.prototype._removeModalBackdrop = function () {\n  if (!(this._modalBackdrop && this._modalBackdrop.parentNode)) {\n    return;\n  }\n\n  this._modalBackdrop.parentNode.removeChild(this._modalBackdrop);\n};\n\n/**\n * Closes the PayPal window if it is opened via `startVaultInitiatedCheckout`.\n * @public\n * @ignore\n * @param {callback} [callback] Gets called when window is closed.\n * @example\n * paypalCheckoutInstance.closeVaultInitiatedCheckoutWindow();\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.closeVaultInitiatedCheckoutWindow = function () {\n  if (this._vaultInitiatedCheckoutInProgress) {\n    analytics.sendEvent(\n      this._clientPromise,\n      \"paypal-checkout.startVaultInitiatedCheckout.canceled.by-merchant\"\n    );\n  }\n\n  return this._waitForVaultInitiatedCheckoutDependencies().then(\n    function () {\n      this._frameService.close();\n    }.bind(this)\n  );\n};\n\n/**\n * Focuses the PayPal window if it is opened via `startVaultInitiatedCheckout`.\n * @public\n * @ignore\n * @param {callback} [callback] Gets called when window is focused.\n * @example\n * paypalCheckoutInstance.focusVaultInitiatedCheckoutWindow();\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.focusVaultInitiatedCheckoutWindow = function () {\n  return this._waitForVaultInitiatedCheckoutDependencies().then(\n    function () {\n      this._frameService.focus();\n    }.bind(this)\n  );\n};\n\nPayPalCheckout.prototype._createFrameServiceCallback = function (\n  frameCommunicationPromise\n) {\n  var self = this;\n\n  // TODO when a merchant integrates an iOS or Android integration\n  // with a webview using the web SDK, we will have to add popupbridge\n  // support\n  return function (err, payload) {\n    if (err) {\n      frameCommunicationPromise.reject(err);\n    } else if (payload) {\n      self._frameService.redirect(self._loadingFrameUrl);\n      self\n        .tokenizePayment({\n          paymentToken: payload.token,\n          payerID: payload.PayerID,\n          paymentID: payload.paymentId,\n        })\n        .then(function (res) {\n          frameCommunicationPromise.resolve(res);\n        })\n        .catch(function (tokenizationError) {\n          frameCommunicationPromise.reject(tokenizationError);\n        });\n    }\n  };\n};\n\nPayPalCheckout.prototype._waitForVaultInitiatedCheckoutDependencies =\n  function () {\n    var self = this;\n\n    return this._clientPromise.then(function () {\n      return self._frameServicePromise;\n    });\n  };\n\nPayPalCheckout.prototype._constructVaultCheckutUrl = function (frameName) {\n  var serviceId = this._frameService._serviceId;\n\n  return (\n    this._assetsUrl +\n    \"/html/\" +\n    frameName +\n    useMin(this._isDebug) +\n    \".html?channel=\" +\n    serviceId\n  );\n};\n\n/**\n * Tokenizes the authorize data from the PayPal JS SDK when completing a buyer approval flow.\n * When a {@link callback} is defined, invokes the callback with {@link PayPalCheckout~tokenizePayload|tokenizePayload} and returns undefined. Otherwise, returns a Promise that resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.\n * @public\n * @param {object} tokenizeOptions Tokens and IDs required to tokenize the payment.\n * @param {string} tokenizeOptions.payerId Payer ID returned by PayPal `onApproved` callback.\n * @param {string} [tokenizeOptions.paymentId] Payment ID returned by PayPal `onApproved` callback.\n * @param {string} [tokenizeOptions.billingToken] Billing Token returned by PayPal `onApproved` callback.\n * @param {boolean} [tokenizeOptions.vault=true] Whether or not to vault the resulting PayPal account (if using a client token generated with a customer id and the vault flow).\n * @param {callback} [callback] The second argument, <code>payload</code>, is a {@link PayPalCheckout~tokenizePayload|tokenizePayload}. If no callback is provided, the promise resolves with a {@link PayPalCheckout~tokenizePayload|tokenizePayload}.\n * @example <caption>Opt out of auto-vaulting behavior</caption>\n * // create the paypalCheckoutInstance with a client token generated with a customer id\n * paypal.Buttons({\n *   createBillingAgreement: function () {\n *     return paypalCheckoutInstance.createPayment({\n *       flow: 'vault'\n *       // your other createPayment options here\n *     });\n *   },\n *   onApproved: function (data) {\n *     data.vault = false;\n *\n *     return paypalCheckoutInstance.tokenizePayment(data);\n *   },\n *   // Add other options, e.g. onCancel, onError\n * }).render('#paypal-button');\n *\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.tokenizePayment = function (tokenizeOptions) {\n  var self = this;\n  var shouldVault = true;\n  var payload;\n  var options = {\n    flow:\n      tokenizeOptions.billingToken && !tokenizeOptions.paymentID\n        ? \"vault\"\n        : \"checkout\",\n    intent: tokenizeOptions.intent || this.intentFromCreatePayment,\n  };\n  var params = {\n    // The paymentToken provided by the PayPal JS SDK is the EC Token\n    ecToken: tokenizeOptions.paymentToken,\n    billingToken: tokenizeOptions.billingToken,\n    payerId: tokenizeOptions.payerID,\n    paymentId: tokenizeOptions.paymentID,\n    shippingOptionsId: tokenizeOptions.shippingOptionsId,\n  };\n\n  if (tokenizeOptions.hasOwnProperty(\"vault\")) {\n    shouldVault = tokenizeOptions.vault;\n  }\n\n  options.vault = shouldVault;\n\n  analytics.sendEvent(\n    this._clientPromise,\n    \"paypal-checkout.tokenization.started\"\n  );\n\n  return this._clientPromise\n    .then(function (client) {\n      return client.request({\n        endpoint: \"payment_methods/paypal_accounts\",\n        method: \"post\",\n        data: self._formatTokenizeData(options, params),\n      });\n    })\n    .then(function (response) {\n      payload = self._formatTokenizePayload(response);\n\n      analytics.sendEvent(\n        self._clientPromise,\n        \"paypal-checkout.tokenization.success\"\n      );\n      if (payload.creditFinancingOffered) {\n        analytics.sendEvent(\n          self._clientPromise,\n          \"paypal-checkout.credit.accepted\"\n        );\n      }\n\n      return payload;\n    })\n    .catch(function (err) {\n      if (self._setupError) {\n        return Promise.reject(self._setupError);\n      }\n\n      analytics.sendEvent(\n        self._clientPromise,\n        \"paypal-checkout.tokenization.failed\"\n      );\n\n      return Promise.reject(\n        convertToBraintreeError(err, {\n          type: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.type,\n          code: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.code,\n          message: errors.PAYPAL_ACCOUNT_TOKENIZATION_FAILED.message,\n        })\n      );\n    });\n};\n\n/**\n * Resolves with the PayPal client id to be used when loading the PayPal SDK.\n * @public\n * @param {callback} [callback] The second argument, <code>id</code>, is a the PayPal client id. If no callback is provided, the promise resolves with the PayPal client id.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * paypalCheckoutInstance.getClientId().then(function (id) {\n *  var script = document.createElement('script');\n *\n *  script.src = 'https://www.paypal.com/sdk/js?client-id=' + id;\n *  script.onload = function () {\n *    // setup the PayPal SDK\n *  };\n *\n *  document.body.appendChild(script);\n * });\n */\nPayPalCheckout.prototype.getClientId = function () {\n  return this._clientPromise.then(function (client) {\n    return client.getConfiguration().gatewayConfiguration.paypal.clientId;\n  });\n};\n\n/**\n * Resolves when the PayPal SDK has been successfully loaded onto the page.\n * @public\n * @param {object} [options] A configuration object to modify the query params and data-attributes on the PayPal SDK. A subset of the parameters are listed below. For a full list of query params, see the [PayPal docs](https://developer.paypal.com/docs/checkout/reference/customize-sdk/?mark=query#query-parameters).\n * @param {string} [options.client-id] By default, this will be the client id associated with the authorization used to create the Braintree component. When used in conjunction with passing `authorization` when creating the PayPal Checkout component, you can speed up the loading of the PayPal SDK.\n * @param {string} [options.intent=\"authorize\"] By default, the PayPal SDK defaults to an intent of `capture`. Since the default intent when calling {@link PayPalCheckout#createPayment|`createPayment`} is `authorize`, the PayPal SDK will be loaded with `intent=authorize`. If you wish to use a different intent when calling {@link PayPalCheckout#createPayment|`createPayment`}, make sure it matches here. If `sale` is used, it will be converted to `capture` for the PayPal SDK. If the `vault: true` param is used, `tokenize` will be passed as the default intent.\n * @param {string} [options.locale=en_US] Use this option to change the language, links, and terminology used in the PayPal flow. This locale will be used unless the buyer has set a preferred locale for their account. If an unsupported locale is supplied, a fallback locale (determined by buyer preference or browser data) will be used and no error will be thrown.\n *\n * Supported locales are:\n * `da_DK`,\n * `de_DE`,\n * `en_AU`,\n * `en_GB`,\n * `en_US`,\n * `es_ES`,\n * `fr_CA`,\n * `fr_FR`,\n * `id_ID`,\n * `it_IT`,\n * `ja_JP`,\n * `ko_KR`,\n * `nl_NL`,\n * `no_NO`,\n * `pl_PL`,\n * `pt_BR`,\n * `pt_PT`,\n * `ru_RU`,\n * `sv_SE`,\n * `th_TH`,\n * `zh_CN`,\n * `zh_HK`,\n * and `zh_TW`.\n *\n * @param {string} [options.currency=\"USD\"] If a currency is passed in {@link PayPalCheckout#createPayment|`createPayment`}, it must match the currency passed here.\n * @param {boolean} [options.vault] Must be `true` when using `flow: vault` in {@link PayPalCheckout#createPayment|`createPayment`}.\n * @param {string} [options.components=buttons] By default, the Braintree SDK will only load the PayPal smart buttons component. If you would like to load just the [messages component](https://developer.paypal.com/docs/business/checkout/add-capabilities/credit-messaging/), pass `messages`. If you would like to load both, pass `buttons,messages`\n * @param {object} [options.dataAttributes] The data attributes to apply to the script. Any data attribute can be passed. A subset of the parameters are listed below. For a full list of data attributes, see the [PayPal docs](https://developer.paypal.com/docs/checkout/reference/customize-sdk/#script-parameters).\n * @param {string} [options.dataAttributes.client-token] The client token to use in the script. (usually not needed)\n * @param {string} [options.dataAttributes.csp-nonce] See the [PayPal docs about content security nonces](https://developer.paypal.com/docs/checkout/reference/customize-sdk/#csp-nonce).\n * @param {callback} [callback] Called when the PayPal SDK has been loaded onto the page. The second argument is the PayPal Checkout instance. If no callback is provided, the promise resolves with the PayPal Checkout instance when the PayPal SDK has been loaded onto the page.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example <caption>Without options</caption>\n * paypalCheckoutInstance.loadPayPalSDK().then(function () {\n *   // window.paypal.Buttons is now available to use\n * });\n * @example <caption>With options</caption>\n * paypalCheckoutInstance.loadPayPalSDK({\n *   'client-id': 'PayPal Client Id', // Can speed up rendering time to hardcode this value\n *\n *   intent: 'capture', // Make sure this value matches the value in createPayment\n *   currency: 'USD', // Make sure this value matches the value in createPayment\n * }).then(function () {\n *   // window.paypal.Buttons is now available to use\n * });\n * @example <caption>With Vaulting</caption>\n * paypalCheckoutInstance.loadPayPalSDK({\n *   vault: true\n * }).then(function () {\n *   // window.paypal.Buttons is now available to use\n * });\n */\nPayPalCheckout.prototype.loadPayPalSDK = function (options) {\n  var idPromise, src;\n  var loadPromise = new ExtendedPromise();\n  var dataAttributes = (options && options.dataAttributes) || {};\n  var userIdToken =\n    dataAttributes[\"user-id-token\"] || dataAttributes[\"data-user-id-token\"];\n\n  if (!userIdToken) {\n    userIdToken =\n      this._authorizationInformation.fingerprint &&\n      this._authorizationInformation.fingerprint.split(\"?\")[0];\n  }\n\n  this._paypalScript = document.createElement(\"script\");\n\n  // NEXT_MAJOR_VERSION\n  // this options object should have 2 properties:\n  // * queryParams\n  // * dataAttributes\n  // should make organizing this better than squashing\n  // all the query params at the top level and extracting\n  // the data attributes\n  options = assign(\n    {},\n    {\n      components: \"buttons\",\n    },\n    options\n  );\n  delete options.dataAttributes;\n\n  // NEXT_MAJOR_VERSION if merchant passes an explicit intent,\n  // currency, amount, etc, save those for use in createPayment\n  // if no explicit param of that type is passed in when calling\n  // createPayment to reduce the number of items that need to be\n  // duplicated here and in createPayment\n  if (options.vault) {\n    options.intent = options.intent || \"tokenize\";\n  } else {\n    options.intent = options.intent || \"authorize\";\n    options.currency = options.currency || \"USD\";\n  }\n\n  src = \"https://www.paypal.com/sdk/js?\";\n  this._paypalScript.onload = function () {\n    loadPromise.resolve();\n  };\n\n  Object.keys(dataAttributes).forEach(\n    function (attribute) {\n      this._paypalScript.setAttribute(\n        \"data-\" + attribute.replace(/^data\\-/, \"\"),\n        dataAttributes[attribute]\n      );\n    }.bind(this)\n  );\n\n  if (options[\"client-id\"]) {\n    idPromise = Promise.resolve(options[\"client-id\"]);\n  } else {\n    idPromise = this.getClientId();\n  }\n\n  idPromise.then(\n    function (id) {\n      options[\"client-id\"] = id;\n\n      if (this._autoSetDataUserIdToken && userIdToken) {\n        this._paypalScript.setAttribute(\"data-user-id-token\", userIdToken);\n\n        // preloading improves the rendering time of the PayPal button\n        this._attachPreloadPixel({\n          id: id,\n          userIdToken: userIdToken,\n          amount: dataAttributes.amount,\n          currency: options.currency,\n          merchantId: options[\"merchant-id\"],\n        });\n      }\n\n      this._paypalScript.src = querystring.queryify(src, options);\n      document.head.insertBefore(\n        this._paypalScript,\n        document.head.firstElementChild\n      );\n    }.bind(this)\n  );\n\n  return loadPromise.then(\n    function () {\n      return this;\n    }.bind(this)\n  );\n};\n\nPayPalCheckout.prototype._attachPreloadPixel = function (options) {\n  var request;\n  var id = options.id;\n  var userIdToken = options.userIdToken;\n  var env = this._authorizationInformation.environment;\n  var subdomain = env === \"production\" ? \"\" : \"sandbox.\";\n  var url = PAYPAL_SDK_PRELOAD_URL.replace(\"{ENV}\", subdomain);\n  var preloadOptions = {\n    \"client-id\": id,\n    \"user-id-token\": userIdToken,\n  };\n\n  if (options.amount) {\n    preloadOptions.amount = options.amount;\n  }\n  if (options.currency) {\n    preloadOptions.currency = options.currency;\n  }\n  if (options.merchantId) {\n    preloadOptions[\"merchant-id\"] = options.merchantId;\n  }\n\n  request = new XMLHttpRequest();\n  request.open(\"GET\", querystring.queryify(url, preloadOptions));\n  request.send();\n};\n\nPayPalCheckout.prototype._formatPaymentResourceData = function (\n  options,\n  config\n) {\n  var key;\n  var gatewayConfiguration = this._configuration.gatewayConfiguration;\n  // NEXT_MAJOR_VERSION default value for intent in PayPal SDK is capture\n  // but our integrations default value is authorize. Default this to capture\n  // in the next major version.\n  var intent = options.intent;\n  var paymentResource = {\n    // returnUrl and cancelUrl are required in hermes create_payment_resource route\n    // but are not used by the PayPal sdk, except to redirect to an error page\n    returnUrl: config.returnUrl || \"https://www.paypal.com/checkoutnow/error\",\n    cancelUrl: config.cancelUrl || \"https://www.paypal.com/checkoutnow/error\",\n    offerPaypalCredit: options.offerCredit === true,\n    merchantAccountId: this._merchantAccountId,\n    experienceProfile: {\n      brandName: options.displayName || gatewayConfiguration.paypal.displayName,\n      localeCode: options.locale,\n      noShipping: (!options.enableShippingAddress).toString(),\n      addressOverride: options.shippingAddressEditable === false,\n      landingPageType: options.landingPageType,\n    },\n    shippingOptions: options.shippingOptions,\n  };\n\n  if (options.flow === \"checkout\") {\n    paymentResource.amount = options.amount;\n    paymentResource.currencyIsoCode = options.currency;\n    paymentResource.requestBillingAgreement = options.requestBillingAgreement;\n\n    if (intent) {\n      // 'sale' has been changed to 'capture' in PayPal's backend, but\n      // we use an old version with 'sale'. We provide capture as an alias\n      // to match the PayPal SDK\n      if (intent === \"capture\") {\n        intent = \"sale\";\n      }\n      paymentResource.intent = intent;\n    }\n\n    if (options.hasOwnProperty(\"lineItems\")) {\n      paymentResource.lineItems = options.lineItems;\n    }\n\n    if (options.hasOwnProperty(\"vaultInitiatedCheckoutPaymentMethodToken\")) {\n      paymentResource.vaultInitiatedCheckoutPaymentMethodToken =\n        options.vaultInitiatedCheckoutPaymentMethodToken;\n    }\n\n    if (options.hasOwnProperty(\"shippingOptions\")) {\n      paymentResource.shippingOptions = options.shippingOptions;\n    }\n\n    for (key in options.shippingAddressOverride) {\n      if (options.shippingAddressOverride.hasOwnProperty(key)) {\n        paymentResource[key] = options.shippingAddressOverride[key];\n      }\n    }\n\n    if (options.hasOwnProperty(\"billingAgreementDetails\")) {\n      paymentResource.billingAgreementDetails = options.billingAgreementDetails;\n    }\n  } else {\n    paymentResource.shippingAddress = options.shippingAddressOverride;\n\n    if (options.billingAgreementDescription) {\n      paymentResource.description = options.billingAgreementDescription;\n    }\n  }\n\n  // this needs to be set outside of the block where add it to the\n  // payment request so that a follow up tokenization call can use it,\n  // but if a second create payment resource call is made without\n  // the correlation id, we want to reset it to undefined so that the\n  // tokenization call does not use a stale correlation id\n  this._riskCorrelationId = options.riskCorrelationId;\n  if (options.riskCorrelationId) {\n    paymentResource.correlationId = this._riskCorrelationId;\n  }\n\n  return paymentResource;\n};\n\nPayPalCheckout.prototype._formatTokenizeData = function (options, params) {\n  var clientConfiguration = this._configuration;\n  var gatewayConfiguration = clientConfiguration.gatewayConfiguration;\n  var isTokenizationKey =\n    clientConfiguration.authorizationType === \"TOKENIZATION_KEY\";\n  var isVaultFlow = options.flow === \"vault\";\n  var correlationId =\n    this._riskCorrelationId || params.billingToken || params.ecToken;\n  var data = {\n    paypalAccount: {\n      correlationId: correlationId,\n      options: {\n        validate: isVaultFlow && !isTokenizationKey && options.vault,\n      },\n    },\n  };\n\n  if (isVaultFlow) {\n    data.paypalAccount.billingAgreementToken = params.billingToken;\n  } else {\n    data.paypalAccount.paymentToken = params.paymentId;\n    data.paypalAccount.payerId = params.payerId;\n    data.paypalAccount.unilateral =\n      gatewayConfiguration.paypal.unvettedMerchant;\n\n    if (options.intent) {\n      data.paypalAccount.intent = options.intent;\n    }\n  }\n\n  if (this._merchantAccountId) {\n    data.merchantAccountId = this._merchantAccountId;\n  }\n\n  return data;\n};\n\nPayPalCheckout.prototype._formatTokenizePayload = function (response) {\n  var payload;\n  var account = {};\n\n  if (response.paypalAccounts) {\n    account = response.paypalAccounts[0];\n  }\n\n  payload = {\n    nonce: account.nonce,\n    details: {},\n    type: account.type,\n  };\n\n  if (account.details && account.details.payerInfo) {\n    payload.details = account.details.payerInfo;\n  }\n\n  if (account.details && account.details.creditFinancingOffered) {\n    payload.creditFinancingOffered = account.details.creditFinancingOffered;\n  }\n\n  if (account.details && account.details.shippingOptionId) {\n    payload.shippingOptionId = account.details.shippingOptionId;\n  }\n\n  if (account.details && account.details.cobrandedCardLabel) {\n    payload.cobrandedCardLabel = account.details.cobrandedCardLabel;\n  }\n\n  return payload;\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/paypal-checkout.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * paypalCheckoutInstance.teardown();\n * @example <caption>With callback</caption>\n * paypalCheckoutInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nPayPalCheckout.prototype.teardown = function () {\n  var self = this;\n\n  convertMethodsToError(this, methods(PayPalCheckout.prototype));\n\n  if (this._paypalScript && this._paypalScript.parentNode) {\n    this._paypalScript.parentNode.removeChild(this._paypalScript);\n  }\n\n  return this._frameServicePromise\n    .catch(function () {\n      // no need to error in teardown for an error setting up the frame service\n    })\n    .then(function () {\n      if (!self._frameService) {\n        return Promise.resolve();\n      }\n\n      return self._frameService.teardown();\n    });\n};\n\nmodule.exports = wrapPromise.wrapPrototype(PayPalCheckout);\n\n},{\"../lib/analytics\":94,\"../lib/assign\":96,\"../lib/braintree-error\":99,\"../lib/constants\":100,\"../lib/convert-methods-to-error\":101,\"../lib/convert-to-braintree-error\":102,\"../lib/create-assets-url\":103,\"../lib/create-authorization-data\":104,\"../lib/create-deferred-client\":105,\"../lib/frame-service/external\":113,\"../lib/methods\":129,\"../lib/promise\":131,\"../lib/querystring\":132,\"../lib/use-min\":135,\"../paypal/shared/constants\":140,\"./errors\":137,\"@braintree/extended-promise\":42,\"@braintree/wrap-promise\":51}],140:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  LANDING_FRAME_NAME: \"braintreepaypallanding\",\n  FLOW_ENDPOINTS: {\n    checkout: \"create_payment_resource\",\n    vault: \"setup_billing_agreement\",\n  },\n};\n\n},{}],141:[function(require,module,exports){\n\"use strict\";\n\nvar assign = require(\"../../../lib/assign\").assign;\nvar analytics = require(\"../../../lib/analytics\");\nvar BraintreeError = require(\"../../../lib/braintree-error\");\nvar Promise = require(\"../../../lib/promise\");\nvar isVerifiedDomain = require(\"../../../lib/is-verified-domain\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\nvar EventEmitter = require(\"@braintree/event-emitter\");\nvar errors = require(\"../../shared/errors\");\nvar iFramer = require(\"@braintree/iframer\");\nvar Bus = require(\"framebus\");\nvar constants = require(\"../../shared/constants\");\nvar uuid = require(\"@braintree/uuid\");\nvar events = require(\"../../shared/events\");\nvar useMin = require(\"../../../lib/use-min\");\nvar BUS_CONFIGURATION_REQUEST_EVENT =\n  require(\"../../../lib/constants\").BUS_CONFIGURATION_REQUEST_EVENT;\n\nvar VERSION = \"3.88.3\";\nvar IFRAME_HEIGHT = 400;\nvar IFRAME_WIDTH = 400;\n\nfunction BaseFramework(options) {\n  EventEmitter.call(this);\n\n  this._client = options.client;\n  this._createPromise = options.createPromise;\n  this._createOptions = options;\n\n  if (this._client) {\n    this._isDebug = this._client.getConfiguration().isDebug;\n    this._assetsUrl =\n      this._client.getConfiguration().gatewayConfiguration.assetsUrl;\n  } else {\n    this._isDebug = Boolean(options.isDebug);\n    this._assetsUrl = options.assetsUrl;\n  }\n  this._assetsUrl = this._assetsUrl + \"/web/\" + VERSION;\n}\n\nEventEmitter.createChild(BaseFramework);\n\nBaseFramework.prototype._waitForClient = function () {\n  if (this._client) {\n    return Promise.resolve();\n  }\n\n  return this._createPromise.then(\n    function (client) {\n      this._client = client;\n    }.bind(this)\n  );\n};\n\nBaseFramework.prototype.setUpEventListeners = function () {\n  throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n};\n\nBaseFramework.prototype.verifyCard = function (options, privateOptions) {\n  var formattedOptions, error;\n  var self = this;\n\n  privateOptions = privateOptions || {};\n\n  error = this._checkForVerifyCardError(options, privateOptions);\n\n  if (error) {\n    return Promise.reject(error);\n  }\n\n  this._verifyCardInProgress = true;\n\n  formattedOptions = this._formatVerifyCardOptions(options);\n\n  return this._formatLookupData(formattedOptions)\n    .then(function (data) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.started\"\n      );\n\n      return self._performLookup(formattedOptions.nonce, data);\n    })\n    .then(function (response) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.3ds-version.\" +\n          response.lookup.threeDSecureVersion\n      );\n\n      return self._onLookupComplete(response, formattedOptions);\n    })\n    .then(function (response) {\n      return self.initializeChallengeWithLookupResponse(\n        response,\n        formattedOptions\n      );\n    })\n    .then(function (payload) {\n      self._resetVerificationState();\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.completed\"\n      );\n\n      return payload;\n    })\n    .catch(function (err) {\n      self._resetVerificationState();\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.failed\"\n      );\n\n      return Promise.reject(err);\n    });\n};\n\nBaseFramework.prototype._checkForFrameworkSpecificVerifyCardErrors =\n  function () {\n    throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n  };\n\nBaseFramework.prototype._presentChallenge = function () {\n  throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n};\n\nBaseFramework.prototype.prepareLookup = function () {\n  throw new BraintreeError(errors.THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED);\n};\n\nBaseFramework.prototype._resetVerificationState = function () {\n  this._verifyCardInProgress = false;\n  this._verifyCardPromisePlus = null;\n};\n\nBaseFramework.prototype._performLookup = function (nonce, data) {\n  var self = this;\n  var url = \"payment_methods/\" + nonce + \"/three_d_secure/lookup\";\n\n  return this._waitForClient().then(function () {\n    return self._client\n      .request({\n        endpoint: url,\n        method: \"post\",\n        data: data,\n      })\n      .catch(function (err) {\n        var status = err && err.details && err.details.httpStatus;\n        var analyticsMessage = \"three-d-secure.verification-flow.lookup-failed\";\n        var lookupError;\n\n        if (status === 404) {\n          lookupError = errors.THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR;\n          analyticsMessage += \".404\";\n        } else if (status === 422) {\n          lookupError = errors.THREEDS_LOOKUP_VALIDATION_ERROR;\n          analyticsMessage += \".422\";\n        } else {\n          lookupError = errors.THREEDS_LOOKUP_ERROR;\n        }\n\n        analytics.sendEvent(self._createPromise, analyticsMessage);\n\n        return Promise.reject(\n          new BraintreeError({\n            type: lookupError.type,\n            code: lookupError.code,\n            message: lookupError.message,\n            details: {\n              originalError: err,\n            },\n          })\n        );\n      });\n  });\n};\n\nBaseFramework.prototype._checkForVerifyCardError = function (\n  options,\n  privateOptions\n) {\n  var errorOption;\n\n  if (this._verifyCardInProgress === true) {\n    return new BraintreeError(errors.THREEDS_AUTHENTICATION_IN_PROGRESS);\n  } else if (!options.nonce) {\n    errorOption = \"a nonce\";\n  } else if (!options.amount) {\n    errorOption = \"an amount\";\n  }\n\n  if (!errorOption) {\n    errorOption = this._checkForFrameworkSpecificVerifyCardErrors(\n      options,\n      privateOptions\n    );\n  }\n\n  if (errorOption) {\n    return new BraintreeError({\n      type: errors.THREEDS_MISSING_VERIFY_CARD_OPTION.type,\n      code: errors.THREEDS_MISSING_VERIFY_CARD_OPTION.code,\n      message: \"verifyCard options must include \" + errorOption + \".\",\n    });\n  }\n\n  return null;\n};\n\nBaseFramework.prototype.initializeChallengeWithLookupResponse = function (\n  lookupResponse,\n  options\n) {\n  var self = this;\n\n  options = options || {};\n\n  this._lookupPaymentMethod = lookupResponse.paymentMethod;\n\n  // sets this in the case that initializeChallengeWithLookupResponse is\n  // called as a standalone method from a server side lookup. In a normal\n  // verifyCard flow, this promise will already exist\n  self._verifyCardPromisePlus =\n    self._verifyCardPromisePlus || new ExtendedPromise();\n  self._handleLookupResponse(lookupResponse, options);\n\n  return self._verifyCardPromisePlus.then(function (payload) {\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.verification-flow.liability-shifted.\" +\n        String(payload.liabilityShifted)\n    );\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.verification-flow.liability-shift-possible.\" +\n        String(payload.liabilityShiftPossible)\n    );\n\n    return payload;\n  });\n};\n\nBaseFramework.prototype._handleLookupResponse = function (\n  lookupResponse,\n  options\n) {\n  var challengeShouldBePresented = Boolean(\n    lookupResponse.lookup && lookupResponse.lookup.acsUrl\n  );\n  var details;\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"three-d-secure.verification-flow.challenge-presented.\" +\n      String(challengeShouldBePresented)\n  );\n\n  if (challengeShouldBePresented) {\n    this._presentChallenge(lookupResponse, options);\n  } else {\n    details = this._formatAuthResponse(\n      lookupResponse.paymentMethod,\n      lookupResponse.threeDSecureInfo\n    );\n    details.verificationDetails = lookupResponse.threeDSecureInfo;\n\n    this._verifyCardPromisePlus.resolve(details);\n  }\n};\n\nBaseFramework.prototype._onLookupComplete = function (response) {\n  this._lookupPaymentMethod = response.paymentMethod;\n  this._verifyCardPromisePlus = new ExtendedPromise();\n\n  return Promise.resolve(response);\n};\n\nBaseFramework.prototype._formatAuthResponse = function (\n  paymentMethod,\n  threeDSecureInfo\n) {\n  return {\n    nonce: paymentMethod.nonce,\n    type: paymentMethod.type,\n    binData: paymentMethod.binData,\n    details: paymentMethod.details,\n    description:\n      paymentMethod.description &&\n      paymentMethod.description.replace(/\\+/g, \" \"),\n    liabilityShifted: threeDSecureInfo && threeDSecureInfo.liabilityShifted,\n    liabilityShiftPossible:\n      threeDSecureInfo && threeDSecureInfo.liabilityShiftPossible,\n    threeDSecureInfo: paymentMethod.threeDSecureInfo,\n  };\n};\n\nBaseFramework.prototype._formatVerifyCardOptions = function (options) {\n  return assign({}, options);\n};\n\nBaseFramework.prototype._formatLookupData = function (options) {\n  var data = {\n    amount: options.amount,\n  };\n\n  return Promise.resolve(data);\n};\n\nBaseFramework.prototype._handleV1AuthResponse = function (data) {\n  var authResponse = JSON.parse(data.auth_response);\n\n  if (authResponse.success) {\n    this._verifyCardPromisePlus.resolve(\n      this._formatAuthResponse(\n        authResponse.paymentMethod,\n        authResponse.threeDSecureInfo\n      )\n    );\n  } else if (\n    authResponse.threeDSecureInfo &&\n    authResponse.threeDSecureInfo.liabilityShiftPossible\n  ) {\n    this._verifyCardPromisePlus.resolve(\n      this._formatAuthResponse(\n        this._lookupPaymentMethod,\n        authResponse.threeDSecureInfo\n      )\n    );\n  } else {\n    this._verifyCardPromisePlus.reject(\n      new BraintreeError({\n        type: BraintreeError.types.UNKNOWN,\n        code: \"UNKNOWN_AUTH_RESPONSE\",\n        message: authResponse.error.message,\n      })\n    );\n  }\n};\n\nBaseFramework.prototype.cancelVerifyCard = function () {\n  var response, threeDSecureInfo;\n\n  this._verifyCardInProgress = false;\n\n  if (!this._lookupPaymentMethod) {\n    return Promise.reject(\n      new BraintreeError(errors.THREEDS_NO_VERIFICATION_PAYLOAD)\n    );\n  }\n\n  threeDSecureInfo = this._lookupPaymentMethod.threeDSecureInfo;\n\n  response = assign({}, this._lookupPaymentMethod, {\n    liabilityShiftPossible:\n      threeDSecureInfo && threeDSecureInfo.liabilityShiftPossible,\n    liabilityShifted: threeDSecureInfo && threeDSecureInfo.liabilityShifted,\n    verificationDetails:\n      threeDSecureInfo && threeDSecureInfo.verificationDetails,\n  });\n\n  return Promise.resolve(response);\n};\n\nBaseFramework.prototype._setupV1Bus = function (options) {\n  var clientConfiguration = this._client.getConfiguration();\n  var parentURL = window.location.href.split(\"#\")[0];\n  var lookupResponse = options.lookupResponse;\n  var channel = uuid();\n  var bus = new Bus({\n    channel: channel,\n    verifyDomain: isVerifiedDomain,\n  });\n  var authenticationCompleteBaseUrl =\n    this._assetsUrl +\n    \"/html/three-d-secure-authentication-complete-frame.html?channel=\" +\n    encodeURIComponent(channel) +\n    \"&\";\n\n  bus.on(BUS_CONFIGURATION_REQUEST_EVENT, function (reply) {\n    reply({\n      clientConfiguration: clientConfiguration,\n      nonce: options.nonce,\n      acsUrl: lookupResponse.acsUrl,\n      pareq: lookupResponse.pareq,\n      termUrl:\n        lookupResponse.termUrl +\n        \"&three_d_secure_version=\" +\n        VERSION +\n        \"&authentication_complete_base_url=\" +\n        encodeURIComponent(authenticationCompleteBaseUrl),\n      md: lookupResponse.md,\n      parentUrl: parentURL,\n    });\n  });\n\n  bus.on(events.AUTHENTICATION_COMPLETE, options.handleAuthResponse);\n\n  return bus;\n};\n\nBaseFramework.prototype._setupV1Iframe = function (options) {\n  var url =\n    this._assetsUrl +\n    \"/html/three-d-secure-bank-frame\" +\n    useMin(this._isDebug) +\n    \".html?showLoader=\" +\n    options.showLoader;\n  var bankIframe = iFramer({\n    src: url,\n    height: IFRAME_HEIGHT,\n    width: IFRAME_WIDTH,\n    name: constants.LANDING_FRAME_NAME + \"_\" + this._v1Bus.channel,\n    title: \"3D Secure Authorization Frame\",\n  });\n\n  return bankIframe;\n};\n\nBaseFramework.prototype._setupV1Elements = function (options) {\n  this._v1Bus = this._setupV1Bus(options);\n  this._v1Iframe = this._setupV1Iframe(options);\n};\n\nBaseFramework.prototype._teardownV1Elements = function () {\n  if (this._v1Bus) {\n    this._v1Bus.teardown();\n    this._v1Bus = null;\n  }\n\n  if (this._v1Iframe && this._v1Iframe.parentNode) {\n    this._v1Iframe.parentNode.removeChild(this._v1Iframe);\n    this._v1Iframe = null;\n  }\n\n  if (this._onV1Keyup) {\n    document.removeEventListener(\"keyup\", this._onV1Keyup);\n    this._onV1Keyup = null;\n  }\n};\n\nBaseFramework.prototype.teardown = function () {\n  analytics.sendEvent(this._createPromise, \"three-d-secure.teardown-completed\");\n\n  this._teardownV1Elements();\n\n  return Promise.resolve();\n};\n\nmodule.exports = BaseFramework;\n\n},{\"../../../lib/analytics\":94,\"../../../lib/assign\":96,\"../../../lib/braintree-error\":99,\"../../../lib/constants\":100,\"../../../lib/is-verified-domain\":127,\"../../../lib/promise\":131,\"../../../lib/use-min\":135,\"../../shared/constants\":150,\"../../shared/errors\":151,\"../../shared/events\":152,\"@braintree/event-emitter\":41,\"@braintree/extended-promise\":42,\"@braintree/iframer\":43,\"@braintree/uuid\":47,\"framebus\":176}],142:[function(require,module,exports){\n\"use strict\";\n// NEXT_MAJOR_VERSION drop support for Bootstrap framework,\n// recomend using inline frame version and putting it in\n// the merchant's own bootstrap modal\n\nvar SongbirdFramework = require(\"./songbird\");\n\nfunction Bootstrap3ModalFramework(options) {\n  SongbirdFramework.call(this, options);\n}\n\nBootstrap3ModalFramework.prototype = Object.create(\n  SongbirdFramework.prototype,\n  {\n    constructor: SongbirdFramework,\n  }\n);\n\nBootstrap3ModalFramework.prototype._createV1IframeModalElement = function (\n  iframe\n) {\n  var modal = document.createElement(\"div\");\n\n  modal.innerHTML =\n    '<div class=\"modal fade in\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"CCAFrameModal-label\" aria-hidden=\"true\" style=\"display: block;\">' +\n    '<div class=\"modal-dialog\" style=\"width:440px;z-index:999999;\">' +\n    '<div class=\"modal-content\">' +\n    '<div class=\"modal-body\" data-braintree-v1-fallback-iframe-container>' +\n    '<button type=\"button\" data-braintree-v1-fallback-close-button class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">×</button>' +\n    \"</div>\" +\n    \"</div>\" +\n    \"</div>\" +\n    '<div data-braintree-v1-fallback-backdrop style=\"' +\n    \"position: fixed;\" +\n    \"cursor: pointer;\" +\n    \"z-index: 999998;\" +\n    \"top: 0;\" +\n    \"left: 0;\" +\n    \"width: 100%;\" +\n    \"height: 100%;\" +\n    '\"></div>' +\n    \"</div>\";\n\n  modal\n    .querySelector(\"[data-braintree-v1-fallback-iframe-container]\")\n    .appendChild(iframe);\n\n  return modal;\n};\n\nBootstrap3ModalFramework.prototype._createCardinalConfigurationOptions =\n  function (setupOptions) {\n    var options =\n      SongbirdFramework.prototype._createCardinalConfigurationOptions.call(\n        this,\n        setupOptions\n      );\n\n    options.payment.framework = \"bootstrap3\";\n\n    return options;\n  };\n\nmodule.exports = Bootstrap3ModalFramework;\n\n},{\"./songbird\":147}],143:[function(require,module,exports){\n\"use strict\";\n\nvar SongbirdFramework = require(\"./songbird\");\n\nfunction CardinalModalFramework(options) {\n  SongbirdFramework.call(this, options);\n}\n\nCardinalModalFramework.prototype = Object.create(SongbirdFramework.prototype, {\n  constructor: SongbirdFramework,\n});\n\nCardinalModalFramework.prototype._createV1IframeModalElement = function (\n  iframe\n) {\n  var modal = document.createElement(\"div\");\n  var addCloseButton = Boolean(\n    this._createOptions &&\n      this._createOptions.cardinalSDKConfig &&\n      this._createOptions.cardinalSDKConfig.payment &&\n      this._createOptions.cardinalSDKConfig.payment.displayExitButton\n  );\n\n  modal.innerHTML =\n    '<div style=\"' +\n    \"position: fixed;\" +\n    \"z-index: 999999;\" +\n    \"top: 50%;\" +\n    \"left: 50%;\" +\n    \"padding: 24px 20px;\" +\n    \"transform: translate(-50%,-50%);\" +\n    \"border-radius: 2px;\" +\n    \"background: #fff;\" +\n    \"max-width: 100%;\" +\n    \"overflow: auto;\" +\n    '\">' +\n    \"<div>\" +\n    \"<button data-braintree-v1-fallback-close-button \" +\n    'style=\"' +\n    \"font-family: Helvetica,Arial,sans-serif;\" +\n    \"font-size: 25px;\" +\n    \"line-height: 12px;\" +\n    \"position: absolute;\" +\n    \"top: 2px;\" +\n    \"right: 0px;\" +\n    \"cursor: pointer;\" +\n    \"color: #999;\" +\n    \"border: 0;\" +\n    \"outline: none;\" +\n    \"background: none;\" +\n    '\" ' +\n    \"onMouseOver=\\\"this.style.color='#000'\\\" \" +\n    \"onMouseOut=\\\"this.style.color='#999'\\\"\" +\n    \">×</button>\" +\n    \"</div>\" +\n    // iframe container\n    '<div data-braintree-v1-fallback-iframe-container style=\"' +\n    \"height: 400px;\" +\n    '\"></div>' +\n    \"</div>\" +\n    // modal backdrop\n    '<div data-braintree-v1-fallback-backdrop style=\"' +\n    \"position: fixed;\" +\n    \"z-index: 999998;\" +\n    \"cursor: pointer;\" +\n    \"top: 0;\" +\n    \"left: 0;\" +\n    \"width: 100%;\" +\n    \"height: 100%;\" +\n    \"transition: opacity 1ms ease;\" +\n    \"background: rgba(0,0,0,.6);\" +\n    '\"></div>';\n\n  if (!addCloseButton) {\n    modal.querySelector(\n      \"[data-braintree-v1-fallback-close-button]\"\n    ).style.display = \"none\";\n  }\n  modal\n    .querySelector(\"[data-braintree-v1-fallback-iframe-container]\")\n    .appendChild(iframe);\n\n  return modal;\n};\n\nmodule.exports = CardinalModalFramework;\n\n},{\"./songbird\":147}],144:[function(require,module,exports){\n\"use strict\";\n\nvar LegacyFramework = require(\"./legacy\");\nvar CardinalModalFramework = require(\"./cardinal-modal\");\nvar Bootstrap3ModalFramework = require(\"./bootstrap3-modal\");\nvar InlineIframeFramework = require(\"./inline-iframe\");\n\nmodule.exports = {\n  legacy: LegacyFramework,\n  \"cardinal-modal\": CardinalModalFramework,\n  \"bootstrap3-modal\": Bootstrap3ModalFramework,\n  \"inline-iframe\": InlineIframeFramework,\n};\n\n},{\"./bootstrap3-modal\":142,\"./cardinal-modal\":143,\"./inline-iframe\":145,\"./legacy\":146}],145:[function(require,module,exports){\n\"use strict\";\n\nvar SongbirdFramework = require(\"./songbird\");\nvar BraintreeError = require(\"../../../lib/braintree-error\");\nvar errors = require(\"../../shared/errors\");\nvar enumerate = require(\"../../../lib/enumerate\");\n\nfunction InlineIframeFramework(options) {\n  SongbirdFramework.call(this, options);\n}\n\nInlineIframeFramework.prototype = Object.create(SongbirdFramework.prototype, {\n  constructor: SongbirdFramework,\n});\n\nInlineIframeFramework.events = enumerate(\n  [\"AUTHENTICATION_IFRAME_AVAILABLE\"],\n  \"inline-iframe-framework:\"\n);\n\nInlineIframeFramework.prototype.setUpEventListeners = function (reply) {\n  SongbirdFramework.prototype.setUpEventListeners.call(this, reply);\n\n  this.on(\n    InlineIframeFramework.events.AUTHENTICATION_IFRAME_AVAILABLE,\n    function (payload, next) {\n      reply(\"authentication-iframe-available\", payload, next);\n    }\n  );\n};\n\nInlineIframeFramework.prototype._createCardinalConfigurationOptions = function (\n  setupOptions\n) {\n  var options =\n    SongbirdFramework.prototype._createCardinalConfigurationOptions.call(\n      this,\n      setupOptions\n    );\n\n  options.payment.framework = \"inline\";\n\n  return options;\n};\n\nInlineIframeFramework.prototype._addV1IframeToPage = function () {\n  this._emit(\n    InlineIframeFramework.events.AUTHENTICATION_IFRAME_AVAILABLE,\n    {\n      element: this._v1Modal,\n    },\n    function () {\n      // NOOP\n    }\n  );\n};\n\nInlineIframeFramework.prototype._setupFrameworkSpecificListeners = function () {\n  this.setCardinalListener(\"ui.inline.setup\", this._onInlineSetup.bind(this));\n};\n\nInlineIframeFramework.prototype._onInlineSetup = function (\n  htmlTemplate,\n  details,\n  resolve,\n  reject\n) {\n  var container, hasError;\n\n  if (!htmlTemplate || !details) {\n    hasError = true;\n  } else if (details.paymentType !== \"CCA\") {\n    hasError = true;\n  } else if (\n    !(details.data.mode === \"suppress\" || details.data.mode === \"static\")\n  ) {\n    hasError = true;\n  }\n\n  if (hasError) {\n    reject(new BraintreeError(errors.THREEDS_INLINE_IFRAME_DETAILS_INCORRECT));\n\n    return;\n  }\n\n  container = document.createElement(\"div\");\n  container.innerHTML = htmlTemplate;\n\n  if (details.data.mode === \"suppress\") {\n    container.style.display = \"none\";\n    document.body.appendChild(container);\n    resolve();\n  } else if (details.data.mode === \"static\") {\n    this._emit(\n      InlineIframeFramework.events.AUTHENTICATION_IFRAME_AVAILABLE,\n      {\n        element: container,\n      },\n      function () {\n        resolve();\n      }\n    );\n  }\n};\n\nmodule.exports = InlineIframeFramework;\n\n},{\"../../../lib/braintree-error\":99,\"../../../lib/enumerate\":108,\"../../shared/errors\":151,\"./songbird\":147}],146:[function(require,module,exports){\n\"use strict\";\n\nvar BaseFramework = require(\"./base\");\nvar deferred = require(\"../../../lib/deferred\");\n\nfunction LegacyFramework(options) {\n  BaseFramework.call(this, options);\n}\n\nLegacyFramework.prototype = Object.create(BaseFramework.prototype, {\n  constructor: LegacyFramework,\n});\n\nLegacyFramework.prototype.setUpEventListeners = function () {\n  // noop\n};\n\nLegacyFramework.prototype.transformV1CustomerBillingAddress = function (\n  customer\n) {\n  customer.billingAddress.line1 = customer.billingAddress.streetAddress;\n  customer.billingAddress.line2 = customer.billingAddress.extendedAddress;\n  customer.billingAddress.city = customer.billingAddress.locality;\n  customer.billingAddress.state = customer.billingAddress.region;\n  customer.billingAddress.countryCode =\n    customer.billingAddress.countryCodeAlpha2;\n  delete customer.billingAddress.streetAddress;\n  delete customer.billingAddress.extendedAddress;\n  delete customer.billingAddress.locality;\n  delete customer.billingAddress.region;\n  delete customer.billingAddress.countryCodeAlpha2;\n\n  return customer;\n};\n\nLegacyFramework.prototype._createIframe = function (options) {\n  var self = this;\n\n  this._setupV1Elements({\n    nonce: options.nonce,\n    lookupResponse: options.lookupResponse,\n    showLoader: options.showLoader,\n    handleAuthResponse: function (data) {\n      self._handleAuthResponse(data, options);\n    },\n  });\n\n  return this._v1Iframe;\n};\n\nLegacyFramework.prototype._handleAuthResponse = function (data, options) {\n  this._v1Bus.teardown();\n\n  options.removeFrame();\n\n  // This also has to be in a setTimeout so it executes after the `removeFrame`.\n  deferred(\n    function () {\n      this._handleV1AuthResponse(data);\n    }.bind(this)\n  )();\n};\n\nLegacyFramework.prototype._checkForFrameworkSpecificVerifyCardErrors =\n  function (options) {\n    var errorOption;\n\n    if (typeof options.addFrame !== \"function\") {\n      errorOption = \"an addFrame function\";\n    } else if (typeof options.removeFrame !== \"function\") {\n      errorOption = \"a removeFrame function\";\n    }\n\n    return errorOption;\n  };\n\nLegacyFramework.prototype._formatVerifyCardOptions = function (options) {\n  var modifiedOptions = BaseFramework.prototype._formatVerifyCardOptions.call(\n    this,\n    options\n  );\n\n  modifiedOptions.addFrame = deferred(options.addFrame);\n  modifiedOptions.removeFrame = deferred(options.removeFrame);\n  modifiedOptions.showLoader = options.showLoader !== false;\n\n  return modifiedOptions;\n};\n\nLegacyFramework.prototype._formatLookupData = function (options) {\n  var self = this;\n\n  return BaseFramework.prototype._formatLookupData\n    .call(this, options)\n    .then(function (data) {\n      if (options.customer && options.customer.billingAddress) {\n        data.customer = self.transformV1CustomerBillingAddress(\n          options.customer\n        );\n      }\n\n      return data;\n    });\n};\n\nLegacyFramework.prototype._presentChallenge = function (\n  lookupResponse,\n  options\n) {\n  options.addFrame(\n    null,\n    this._createIframe({\n      showLoader: options.showLoader,\n      lookupResponse: lookupResponse.lookup,\n      nonce: lookupResponse.paymentMethod.nonce,\n      removeFrame: options.removeFrame,\n    })\n  );\n};\n\nmodule.exports = LegacyFramework;\n\n},{\"../../../lib/deferred\":106,\"./base\":141}],147:[function(require,module,exports){\n\"use strict\";\n\nvar BaseFramework = require(\"./base\");\nvar assign = require(\"../../../lib/assign\").assign;\nvar deferred = require(\"../../../lib/deferred\");\nvar BraintreeError = require(\"../../../lib/braintree-error\");\nvar convertToBraintreeError = require(\"../../../lib/convert-to-braintree-error\");\nvar analytics = require(\"../../../lib/analytics\");\nvar assets = require(\"../../../lib/assets\");\nvar errors = require(\"../../shared/errors\");\nvar enumerate = require(\"../../../lib/enumerate\");\nvar constants = require(\"../../shared/constants\");\nvar Promise = require(\"../../../lib/promise\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\n\nvar INTEGRATION_TIMEOUT_MS =\n  require(\"../../../lib/constants\").INTEGRATION_TIMEOUT_MS;\nvar PLATFORM = require(\"../../../lib/constants\").PLATFORM;\nvar VERSION = \"3.88.3\";\nvar CUSTOMER_CANCELED_SONGBIRD_MODAL = \"01\";\nvar SONGBIRD_UI_EVENTS = [\n  \"ui.close\",\n  \"ui.render\",\n\n  // TODO these events are not documented in the\n  // client reference because so far we have\n  // not been able to trigger them in our testing\n  \"ui.renderHidden\",\n  \"ui.loading.close\",\n  \"ui.loading.render\",\n];\n\nfunction SongbirdFramework(options) {\n  BaseFramework.call(this, options);\n\n  this._useV1Fallback = false;\n  this._clientMetadata = {\n    requestedThreeDSecureVersion: \"2\",\n    sdkVersion: PLATFORM + \"/\" + VERSION,\n  };\n  this._getDfReferenceIdPromisePlus = new ExtendedPromise();\n  this.setupSongbird(options);\n  this._cardinalEvents = [];\n}\n\nSongbirdFramework.prototype = Object.create(BaseFramework.prototype, {\n  constructor: SongbirdFramework,\n});\n\nSongbirdFramework.events = enumerate(\n  [\n    \"LOOKUP_COMPLETE\",\n    \"CUSTOMER_CANCELED\",\n    \"UI.CLOSE\",\n    \"UI.RENDER\",\n    \"UI.RENDERHIDDEN\",\n    \"UI.LOADING.CLOSE\",\n    \"UI.LOADING.RENDER\",\n  ],\n  \"songbird-framework:\"\n);\n\nSongbirdFramework.prototype.setUpEventListeners = function (reply) {\n  this.on(SongbirdFramework.events.LOOKUP_COMPLETE, function (data, next) {\n    reply(\"lookup-complete\", data, next);\n  });\n  this.on(SongbirdFramework.events.CUSTOMER_CANCELED, function () {\n    reply(\"customer-canceled\");\n  });\n  this.on(SongbirdFramework.events[\"UI.CLOSE\"], function () {\n    reply(\"authentication-modal-close\");\n  });\n  this.on(SongbirdFramework.events[\"UI.RENDER\"], function () {\n    reply(\"authentication-modal-render\");\n  });\n  this.on(SongbirdFramework.events[\"UI.RENDERHIDDEN\"], function () {\n    reply(\"authentication-modal-render-hidden\");\n  });\n  this.on(SongbirdFramework.events[\"UI.LOADING.CLOSE\"], function () {\n    reply(\"authentication-modal-loader-close\");\n  });\n  this.on(SongbirdFramework.events[\"UI.LOADING.RENDER\"], function () {\n    reply(\"authentication-modal-loader-render\");\n  });\n};\n\nSongbirdFramework.prototype.prepareLookup = function (options) {\n  var data = assign({}, options);\n  var self = this;\n\n  return this.getDfReferenceId()\n    .then(function (id) {\n      data.dfReferenceId = id;\n    })\n    .then(function () {\n      return self._triggerCardinalBinProcess(options.bin);\n    })\n    .catch(function () {\n      // catch and ignore errors from looking up\n      // df reference and Cardinal bin process\n    })\n    .then(function () {\n      return self._waitForClient();\n    })\n    .then(function () {\n      data.clientMetadata = self._clientMetadata;\n      data.authorizationFingerprint =\n        self._client.getConfiguration().authorizationFingerprint;\n      data.braintreeLibraryVersion = \"braintree/web/\" + VERSION;\n\n      return data;\n    });\n};\n\nSongbirdFramework.prototype.initializeChallengeWithLookupResponse = function (\n  lookupResponse,\n  options\n) {\n  return this.setupSongbird().then(\n    function () {\n      return BaseFramework.prototype.initializeChallengeWithLookupResponse.call(\n        this,\n        lookupResponse,\n        options\n      );\n    }.bind(this)\n  );\n};\n\nSongbirdFramework.prototype.initiateV1Fallback = function (errorType) {\n  this._useV1Fallback = true;\n  this._removeSongbirdListeners();\n  analytics.sendEvent(\n    this._createPromise,\n    \"three-d-secure.v1-fallback.\" + errorType\n  );\n\n  if (this._songbirdPromise) {\n    this._songbirdPromise.resolve();\n  }\n};\n\nSongbirdFramework.prototype._triggerCardinalBinProcess = function (bin) {\n  var self = this;\n  var issuerStartTime = Date.now();\n\n  if (!bin) {\n    // skip bin lookup because bin wasn't passed in\n    return Promise.resolve();\n  }\n\n  return window.Cardinal.trigger(\"bin.process\", bin).then(function (\n    binResults\n  ) {\n    self._clientMetadata.issuerDeviceDataCollectionTimeElapsed =\n      Date.now() - issuerStartTime;\n    self._clientMetadata.issuerDeviceDataCollectionResult =\n      binResults && binResults.Status;\n  });\n};\n\nSongbirdFramework.prototype.transformBillingAddress = function (\n  additionalInformation,\n  billingAddress\n) {\n  if (billingAddress) {\n    // map from public API to the API that the Gateway expects\n    extractAddressData(billingAddress, additionalInformation, \"billing\");\n    additionalInformation.billingPhoneNumber = billingAddress.phoneNumber;\n    additionalInformation.billingGivenName = billingAddress.givenName;\n    additionalInformation.billingSurname = billingAddress.surname;\n  }\n\n  return additionalInformation;\n};\n\nSongbirdFramework.prototype.transformShippingAddress = function (\n  additionalInformation\n) {\n  var shippingAddress = additionalInformation.shippingAddress;\n\n  if (shippingAddress) {\n    // map from public API to the API that the Gateway expects\n    extractAddressData(shippingAddress, additionalInformation, \"shipping\");\n\n    delete additionalInformation.shippingAddress;\n  }\n\n  return additionalInformation;\n};\n\nSongbirdFramework.prototype._createV1IframeModalElement = function (iframe) {\n  var modal = document.createElement(\"div\");\n\n  modal.innerHTML =\n    '<div data-braintree-v1-fallback-iframe-container=\"true\" style=\"' +\n    \"height: 400px;\" +\n    '\"></div>';\n  modal\n    .querySelector('[data-braintree-v1-fallback-iframe-container=\"true\"]')\n    .appendChild(iframe);\n\n  return modal;\n};\n\nSongbirdFramework.prototype._createV1IframeModal = function (iframe) {\n  var modal = this._createV1IframeModalElement(iframe);\n  var btn = modal.querySelector(\"[data-braintree-v1-fallback-close-button]\");\n  var backdrop = modal.querySelector(\"[data-braintree-v1-fallback-backdrop]\");\n  var self = this;\n\n  function closeHandler() {\n    modal.parentNode.removeChild(modal);\n    self.cancelVerifyCard(errors.THREEDS_CARDINAL_SDK_CANCELED);\n    document.removeEventListener(\"keyup\", self._onV1Keyup);\n    self._onV1Keyup = null;\n  }\n\n  this._onV1Keyup = function (e) {\n    if (e.key !== \"Escape\") {\n      return;\n    }\n\n    if (!modal.parentNode) {\n      // modal not on page\n      return;\n    }\n\n    closeHandler();\n  };\n\n  if (btn) {\n    btn.addEventListener(\"click\", closeHandler);\n  }\n\n  if (backdrop) {\n    backdrop.addEventListener(\"click\", closeHandler);\n  }\n\n  document.addEventListener(\"keyup\", this._onV1Keyup);\n\n  return modal;\n};\n\nSongbirdFramework.prototype._addV1IframeToPage = function () {\n  document.body.appendChild(this._v1Modal);\n};\n\nSongbirdFramework.prototype._handleAuthResponseFromV1Fallback = function (\n  data\n) {\n  this._teardownV1Elements();\n  this._v1Modal.parentNode.removeChild(this._v1Modal);\n  this._handleV1AuthResponse(data);\n};\n\nSongbirdFramework.prototype._presentChallengeWithV1Fallback = function (\n  lookupResponse\n) {\n  var self = this;\n\n  this._setupV1Elements({\n    lookupResponse: lookupResponse,\n    showLoader: true,\n    handleAuthResponse: function (data) {\n      self._handleAuthResponseFromV1Fallback(data);\n    },\n  });\n  this._v1Modal = this._createV1IframeModal(this._v1Iframe);\n  this._addV1IframeToPage();\n};\n\nSongbirdFramework.prototype.setupSongbird = function (setupOptions) {\n  var self = this;\n  var startTime = Date.now();\n\n  if (this._songbirdPromise) {\n    return this._songbirdPromise;\n  }\n\n  setupOptions = setupOptions || {};\n\n  this._songbirdPromise = new ExtendedPromise();\n  this._v2SetupFailureReason = \"reason-unknown\";\n\n  self\n    ._loadCardinalScript(setupOptions)\n    .then(function () {\n      if (!window.Cardinal) {\n        self._v2SetupFailureReason = \"cardinal-global-unavailable\";\n\n        return Promise.reject(\n          new BraintreeError(errors.THREEDS_CARDINAL_SDK_SETUP_FAILED)\n        );\n      }\n\n      return self._configureCardinalSdk({\n        setupOptions: setupOptions,\n        setupStartTime: startTime,\n      });\n    })\n    .catch(function (err) {\n      var error = convertToBraintreeError(err, {\n        type: errors.THREEDS_CARDINAL_SDK_SETUP_FAILED.type,\n        code: errors.THREEDS_CARDINAL_SDK_SETUP_FAILED.code,\n        message: errors.THREEDS_CARDINAL_SDK_SETUP_FAILED.message,\n      });\n\n      self._getDfReferenceIdPromisePlus.reject(error);\n\n      window.clearTimeout(self._songbirdSetupTimeoutReference);\n      analytics.sendEvent(\n        self._client,\n        \"three-d-secure.cardinal-sdk.init.setup-failed\"\n      );\n      self.initiateV1Fallback(\n        \"cardinal-sdk-setup-failed.\" + self._v2SetupFailureReason\n      );\n    });\n\n  return this._songbirdPromise;\n};\n\nSongbirdFramework.prototype._configureCardinalSdk = function (config) {\n  var self = this;\n\n  return this._waitForClient()\n    .then(function () {\n      var threeDSConfig =\n        self._client.getConfiguration().gatewayConfiguration.threeDSecure;\n\n      return threeDSConfig;\n    })\n    .then(function (threeDSConfig) {\n      var jwt = threeDSConfig.cardinalAuthenticationJWT;\n      var setupOptions = config.setupOptions;\n      var setupStartTime = config.setupStartTime;\n      var cardinalConfiguration =\n        self._createCardinalConfigurationOptions(setupOptions);\n\n      SONGBIRD_UI_EVENTS.forEach(function (eventName) {\n        self.setCardinalListener(eventName, function () {\n          self._emit(SongbirdFramework.events[eventName.toUpperCase()]);\n        });\n      });\n      self.setCardinalListener(\n        \"payments.setupComplete\",\n        self._createPaymentsSetupCompleteCallback()\n      );\n\n      self._setupFrameworkSpecificListeners();\n\n      window.Cardinal.configure(cardinalConfiguration);\n\n      window.Cardinal.setup(\"init\", {\n        jwt: jwt,\n      });\n\n      self._clientMetadata.cardinalDeviceDataCollectionTimeElapsed =\n        Date.now() - setupStartTime;\n\n      self.setCardinalListener(\n        \"payments.validated\",\n        self._createPaymentsValidatedCallback()\n      );\n    })\n    .catch(function (err) {\n      self._v2SetupFailureReason = \"cardinal-configuration-threw-error\";\n\n      return Promise.reject(err);\n    });\n};\n\nSongbirdFramework.prototype.setCardinalListener = function (eventName, cb) {\n  this._cardinalEvents.push(eventName);\n  window.Cardinal.on(eventName, cb);\n};\n\nSongbirdFramework.prototype._setupFrameworkSpecificListeners = function () {\n  // noop\n};\n\nSongbirdFramework.prototype._createCardinalConfigurationOptions = function (\n  setupOptions\n) {\n  var cardinalConfiguration = setupOptions.cardinalSDKConfig || {};\n  var paymentSettings = cardinalConfiguration.payment || {};\n\n  if (!cardinalConfiguration.logging && setupOptions.loggingEnabled) {\n    cardinalConfiguration.logging = {\n      level: \"verbose\",\n    };\n  }\n\n  cardinalConfiguration.payment = {};\n\n  if (paymentSettings.hasOwnProperty(\"displayLoading\")) {\n    cardinalConfiguration.payment.displayLoading =\n      paymentSettings.displayLoading;\n  }\n  if (paymentSettings.hasOwnProperty(\"displayExitButton\")) {\n    cardinalConfiguration.payment.displayExitButton =\n      paymentSettings.displayExitButton;\n  }\n\n  return cardinalConfiguration;\n};\n\nSongbirdFramework.prototype._loadCardinalScript = function (setupOptions) {\n  var self = this;\n  var scriptSource = constants.CARDINAL_SCRIPT_SOURCE.sandbox;\n\n  return this._waitForClient()\n    .then(function () {\n      var isProduction =\n        self._client.getConfiguration().gatewayConfiguration.environment ===\n        \"production\";\n\n      self._songbirdSetupTimeoutReference = window.setTimeout(function () {\n        analytics.sendEvent(\n          self._client,\n          \"three-d-secure.cardinal-sdk.init.setup-timeout\"\n        );\n        self.initiateV1Fallback(\"cardinal-sdk-setup-timeout\");\n      }, setupOptions.timeout || INTEGRATION_TIMEOUT_MS);\n\n      if (isProduction) {\n        scriptSource = constants.CARDINAL_SCRIPT_SOURCE.production;\n      }\n\n      return assets.loadScript({ src: scriptSource });\n    })\n    .catch(function (err) {\n      self._v2SetupFailureReason = \"songbird-js-failed-to-load\";\n\n      return Promise.reject(\n        convertToBraintreeError(\n          err,\n          errors.THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED\n        )\n      );\n    });\n};\n\nSongbirdFramework.prototype._createPaymentsSetupCompleteCallback = function () {\n  var self = this;\n\n  return function (data) {\n    self._getDfReferenceIdPromisePlus.resolve(data.sessionId);\n\n    window.clearTimeout(self._songbirdSetupTimeoutReference);\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.cardinal-sdk.init.setup-completed\"\n    );\n\n    self._songbirdPromise.resolve();\n  };\n};\n\nSongbirdFramework.prototype.getDfReferenceId = function () {\n  return this._getDfReferenceIdPromisePlus;\n};\n\nSongbirdFramework.prototype._performJWTValidation = function (\n  rawCardinalSDKVerificationData,\n  jwt\n) {\n  var self = this;\n  var nonce = this._lookupPaymentMethod.nonce;\n  var url =\n    \"payment_methods/\" + nonce + \"/three_d_secure/authenticate_from_jwt\";\n  var cancelCode =\n    rawCardinalSDKVerificationData &&\n    rawCardinalSDKVerificationData.Payment &&\n    rawCardinalSDKVerificationData.Payment.ExtendedData &&\n    rawCardinalSDKVerificationData.Payment.ExtendedData.ChallengeCancel;\n\n  if (cancelCode) {\n    // see ChallengeCancel docs here for different values:\n    // https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/98315/Response+Objects\n    analytics.sendEvent(\n      this._createPromise,\n      \"three-d-secure.verification-flow.cardinal-sdk.cancel-code.\" + cancelCode\n    );\n\n    if (cancelCode === CUSTOMER_CANCELED_SONGBIRD_MODAL) {\n      this._emit(SongbirdFramework.events.CUSTOMER_CANCELED);\n    }\n  }\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"three-d-secure.verification-flow.upgrade-payment-method.started\"\n  );\n\n  return this._waitForClient()\n    .then(function () {\n      return self._client.request({\n        method: \"post\",\n        endpoint: url,\n        data: {\n          jwt: jwt,\n          paymentMethodNonce: nonce,\n        },\n      });\n    })\n    .then(function (response) {\n      var paymentMethod = response.paymentMethod || self._lookupPaymentMethod;\n      var formattedResponse = self._formatAuthResponse(\n        paymentMethod,\n        response.threeDSecureInfo\n      );\n\n      formattedResponse.rawCardinalSDKVerificationData =\n        rawCardinalSDKVerificationData;\n      analytics.sendEvent(\n        self._client,\n        \"three-d-secure.verification-flow.upgrade-payment-method.succeeded\"\n      );\n\n      return Promise.resolve(formattedResponse);\n    })\n    .catch(function (err) {\n      var error = new BraintreeError({\n        type: errors.THREEDS_JWT_AUTHENTICATION_FAILED.type,\n        code: errors.THREEDS_JWT_AUTHENTICATION_FAILED.code,\n        message: errors.THREEDS_JWT_AUTHENTICATION_FAILED.message,\n        details: {\n          originalError: err,\n        },\n      });\n\n      analytics.sendEvent(\n        self._client,\n        \"three-d-secure.verification-flow.upgrade-payment-method.errored\"\n      );\n\n      return Promise.reject(error);\n    });\n};\n\nSongbirdFramework.prototype._createPaymentsValidatedCallback = function () {\n  var self = this;\n\n  /**\n   * @param {object} data Response Data\n   * @see {@link https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/98315/Response+Objects#ResponseObjects-ObjectDefinition}\n   * @param {string} data.ActionCode The resulting state of the transaction.\n   * @param {boolean} data.Validated Represents whether transaction was successfully or not.\n   * @param {object} data.Payment Represents additional information about the verification.\n   * @param {number} data.ErrorNumber A non-zero value represents the error encountered while attempting the process the message request.\n   * @param {string} data.ErrorDescription Application error description for the associated error number.\n   * @param {string} validatedJwt Response JWT\n   * @returns {void}\n   * */\n  return function (data, validatedJwt) {\n    var formattedError;\n\n    if (self._useV1Fallback) {\n      // TODO since we've removed the listeners for the payments validated callback when initiating the v1 fallback,\n      // we should never get to this point. Leave this analtyics event in for now and review if that is indeed the\n      // case before removing this block.\n      analytics.sendEvent(\n        self._createPromise,\n        \"three-d-secure.verification-flow.cardinal-sdk.payments-validated-callback-called-in-v1-fallback-flow\"\n      );\n\n      return;\n    }\n\n    analytics.sendEvent(\n      self._createPromise,\n      \"three-d-secure.verification-flow.cardinal-sdk.action-code.\" +\n        data.ActionCode.toLowerCase()\n    );\n\n    if (!self._verifyCardPromisePlus) {\n      self.initiateV1Fallback(\n        \"cardinal-sdk-setup-error.number-\" + data.ErrorNumber\n      );\n\n      return;\n    }\n\n    switch (data.ActionCode) {\n      // Handle these scenarios based on liability shift information in the response.\n      case \"SUCCESS\":\n      case \"NOACTION\":\n      case \"FAILURE\":\n        self\n          ._performJWTValidation(data, validatedJwt)\n          .then(function (result) {\n            self._verifyCardPromisePlus.resolve(result);\n          })\n          .catch(function (err) {\n            self._verifyCardPromisePlus.reject(err);\n          });\n        break;\n\n      case \"ERROR\":\n        analytics.sendEvent(\n          self._createPromise,\n          \"three-d-secure.verification-flow.cardinal-sdk-error.\" +\n            data.ErrorNumber\n        );\n\n        switch (data.ErrorNumber) {\n          case 10001: // Cardinal Docs: Timeout when sending an /Init message\n          case 10002: // Cardinal Docs: Timeout when sending an /Start message\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT\n            );\n            break;\n          case 10003: // Cardinal Docs: Timeout when sending an /Validate message. Although this code exists we do not yet have a flow where a validate message is sent to Midas. This error should not yet be triggered\n          case 10007: // Cardinal Docs: Timeout when sending an /Confirm message\n          case 10009: // Cardinal Docs: Timeout when sending an /Continue message\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT\n            );\n            break;\n          case 10005: // Cardinal Docs: Songbird was started without a request jwt.\n          case 10006: // Cardinal Docs: This is a general configuration error. The description is populated by the specific configuration error that caused the error.\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_BAD_CONFIG\n            );\n            break;\n          case 10008: // Cardinal Docs: Songbird was initialized without a merchant JWT.\n          case 10010: // Cardinal Docs: The response JWT was\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_BAD_JWT\n            );\n            break;\n          case 10011:\n            // This may never get called, according to the Cardinal docs:\n            // The user has canceled the transaction. This is generally found in alternative\n            // payments that supply a cancel button on the payment brand side.\n            analytics.sendEvent(\n              self._createPromise,\n              \"three-d-secure.verification-flow.canceled\"\n            );\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_CANCELED\n            );\n            break;\n          default:\n            formattedError = new BraintreeError(\n              errors.THREEDS_CARDINAL_SDK_ERROR\n            );\n        }\n\n        formattedError.details = {\n          originalError: {\n            code: data.ErrorNumber,\n            description: data.ErrorDescription,\n          },\n        };\n\n        self._verifyCardPromisePlus.reject(formattedError);\n        break;\n\n      default:\n    }\n  };\n};\n\nSongbirdFramework.prototype._checkForVerifyCardError = function (\n  options,\n  privateOptions\n) {\n  return BaseFramework.prototype._checkForVerifyCardError.call(\n    this,\n    options,\n    privateOptions\n  );\n};\n\nSongbirdFramework.prototype._checkForFrameworkSpecificVerifyCardErrors =\n  function (options, privateOptions) {\n    var errorOption;\n\n    if (\n      typeof options.onLookupComplete !== \"function\" &&\n      !privateOptions.ignoreOnLookupCompleteRequirement\n    ) {\n      errorOption = \"an onLookupComplete function\";\n    }\n\n    return errorOption;\n  };\n\nSongbirdFramework.prototype._formatVerifyCardOptions = function (options) {\n  var modifiedOptions = BaseFramework.prototype._formatVerifyCardOptions.call(\n    this,\n    options\n  );\n  var additionalInformation = modifiedOptions.additionalInformation || {};\n\n  additionalInformation = this.transformBillingAddress(\n    additionalInformation,\n    options.billingAddress\n  );\n  additionalInformation = this.transformShippingAddress(additionalInformation);\n\n  if (options.onLookupComplete) {\n    modifiedOptions.onLookupComplete = deferred(options.onLookupComplete);\n  }\n  if (options.email) {\n    additionalInformation.email = options.email;\n  }\n  if (options.mobilePhoneNumber) {\n    additionalInformation.mobilePhoneNumber = options.mobilePhoneNumber;\n  }\n\n  modifiedOptions.additionalInformation = additionalInformation;\n\n  return modifiedOptions;\n};\n\nSongbirdFramework.prototype._onLookupComplete = function (\n  lookupResponse,\n  options\n) {\n  var self = this;\n\n  return BaseFramework.prototype._onLookupComplete\n    .call(this, lookupResponse)\n    .then(function (response) {\n      return new Promise(function (resolve, reject) {\n        // NEXT_MAJOR_VERSION format this response object to look like the mobile sdk response\n        // which is basically the lookup param at the top level with some additional accessors\n        response.requiresUserAuthentication = Boolean(\n          response.lookup && response.lookup.acsUrl\n        );\n\n        function next() {\n          resolve(response);\n        }\n\n        self._verifyCardPromisePlus.catch(reject);\n\n        // If both event and callback are mistakenly used together,\n        // prefer the callback when it is passed into the verifyCard options\n        if (options.onLookupComplete) {\n          options.onLookupComplete(response, next);\n        } else {\n          self._emit(SongbirdFramework.events.LOOKUP_COMPLETE, response, next);\n        }\n      });\n    });\n};\n\nSongbirdFramework.prototype._presentChallenge = function (lookupResponse) {\n  // transactionId is required for the Songbird flow, so if it\n  // does not exist, we fallback to the 3ds v1 flow\n  if (this._useV1Fallback || !lookupResponse.lookup.transactionId) {\n    this._presentChallengeWithV1Fallback(lookupResponse.lookup);\n\n    return;\n  }\n\n  // set up listener for ref id to call out to bt before calling verify callback\n  window.Cardinal.continue(\n    \"cca\",\n    {\n      AcsUrl: lookupResponse.lookup.acsUrl,\n      Payload: lookupResponse.lookup.pareq,\n    },\n    {\n      OrderDetails: { TransactionId: lookupResponse.lookup.transactionId },\n    }\n  );\n};\n\nSongbirdFramework.prototype._formatLookupData = function (options) {\n  var self = this;\n\n  return BaseFramework.prototype._formatLookupData\n    .call(this, options)\n    .then(function (data) {\n      data.additionalInfo = options.additionalInformation;\n\n      if (options.accountType) {\n        data.accountType = options.accountType;\n      }\n      if (options.challengeRequested) {\n        data.challengeRequested = options.challengeRequested;\n      }\n      if (options.dataOnlyRequested) {\n        data.dataOnlyRequested = options.dataOnlyRequested;\n      }\n      if (options.exemptionRequested) {\n        data.exemptionRequested = options.exemptionRequested;\n      }\n      if (options.bin) {\n        data.bin = options.bin;\n      }\n      // NEXT_MAJOR_VERSION remove cardAdd in favor of cardAddChallengeRequested\n      if (options.cardAdd != null) {\n        data.cardAdd = options.cardAdd;\n      }\n      if (options.cardAddChallengeRequested != null) {\n        data.cardAdd = options.cardAddChallengeRequested;\n      }\n\n      return self.prepareLookup(data);\n    });\n};\n\nSongbirdFramework.prototype.cancelVerifyCard = function (verifyCardError) {\n  var self = this;\n\n  return BaseFramework.prototype.cancelVerifyCard\n    .call(this)\n    .then(function (response) {\n      if (self._verifyCardPromisePlus) {\n        verifyCardError =\n          verifyCardError ||\n          new BraintreeError(errors.THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT);\n\n        self._verifyCardPromisePlus.reject(verifyCardError);\n      }\n\n      return response;\n    });\n};\n\nSongbirdFramework.prototype._removeSongbirdListeners = function () {\n  this._cardinalEvents.forEach(function (eventName) {\n    window.Cardinal.off(eventName);\n  });\n\n  this._cardinalEvents = [];\n};\n\nSongbirdFramework.prototype.teardown = function () {\n  if (window.Cardinal) {\n    this._removeSongbirdListeners();\n  }\n\n  // we intentionally do not remove the Cardinal SDK\n  // from the page when tearing down. Subsequent\n  // component creations will be faster because\n  // the asset is already on the page\n\n  return BaseFramework.prototype.teardown.call(this);\n};\n\nfunction extractAddressData(source, target, prefix) {\n  target[prefix + \"Line1\"] = source.streetAddress;\n  target[prefix + \"Line2\"] = source.extendedAddress;\n  target[prefix + \"Line3\"] = source.line3;\n  target[prefix + \"City\"] = source.locality;\n  target[prefix + \"State\"] = source.region;\n  target[prefix + \"PostalCode\"] = source.postalCode;\n  target[prefix + \"CountryCode\"] = source.countryCodeAlpha2;\n}\n\nmodule.exports = SongbirdFramework;\n\n},{\"../../../lib/analytics\":94,\"../../../lib/assets\":95,\"../../../lib/assign\":96,\"../../../lib/braintree-error\":99,\"../../../lib/constants\":100,\"../../../lib/convert-to-braintree-error\":102,\"../../../lib/deferred\":106,\"../../../lib/enumerate\":108,\"../../../lib/promise\":131,\"../../shared/constants\":150,\"../../shared/errors\":151,\"./base\":141,\"@braintree/extended-promise\":42}],148:[function(require,module,exports){\n\"use strict\";\n\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar methods = require(\"../../lib/methods\");\nvar convertMethodsToError = require(\"../../lib/convert-methods-to-error\");\nvar EventEmitter = require(\"@braintree/event-emitter\");\nvar FRAMEWORKS = require(\"./frameworks\");\n\n/**\n * @deprecated\n * @callback ThreeDSecure~addFrameCallback\n * @param {?BraintreeError} [err] `null` or `undefined` if there was no error.\n * @param {HTMLIFrameElement} iframe An iframe element containing the bank's authentication page that you must put on your page.\n * @description **Deprecated** The callback used for options.addFrame in 3DS 1.0's {@link ThreeDSecure#verifyCard|verifyCard}.\n * @returns {void}\n */\n\n/**\n * @deprecated\n * @callback ThreeDSecure~removeFrameCallback\n * @description **Deprecated** The callback used for options.removeFrame in 3DS 1.0's {@link ThreeDSecure#verifyCard|verifyCard}.\n * @returns {void}\n */\n\n/**\n * @deprecated\n * @typedef {object} ThreeDSecure~verifyCardCustomerObject\n * @property {string} [customer.mobilePhoneNumber] The mobile phone number used for verification. Only numbers; remove dashes, parenthesis and other characters.\n * @property {string} [customer.email] The email used for verification.\n * @property {string} [customer.shippingMethod] The 2-digit string indicating the shipping method chosen for the transaction.\n * @property {string} [customer.billingAddress.firstName] The first name associated with the address.\n * @property {string} [customer.billingAddress.lastName] The last name associated with the address.\n * @property {string} [customer.billingAddress.streetAddress] Line 1 of the Address (eg. number, street, etc).\n * @property {string} [customer.billingAddress.extendedAddress] Line 2 of the Address (eg. suite, apt #, etc.).\n * @property {string} [customer.billingAddress.locality] The locality (city) name associated with the address.\n * @property {string} [customer.billingAddress.region] The 2 letter code for US states or an ISO-3166-2 country subdivision code of up to three letters.\n * @property {string} [customer.billingAddress.postalCode] The zip code or equivalent for countries that have them.\n * @property {string} [customer.billingAddress.countryCodeAlpha2] The 2 character country code.\n * @property {string} [customer.billingAddress.phoneNumber] The phone number associated with the address. Only numbers; remove dashes, parenthesis and other characters.\n * @description **Deprecated** Optional customer information to be passed to 3DS 1.0 for verification.\n */\n\n/**\n * @typedef {object} ThreeDSecure~verifyPayload\n * @property {string} nonce The new payment method nonce produced by the 3D Secure lookup. The original nonce passed into {@link ThreeDSecure#verifyCard|verifyCard} was consumed. This new nonce should be used to transact on your server.\n * @property {string} type The payment method type.\n * @property {object} details Additional account details.\n * @property {string} details.cardType Type of card, ex: Visa, MasterCard.\n * @property {string} details.lastFour Last four digits of card number.\n * @property {string} details.lastTwo Last two digits of card number.\n * @property {string} description A human-readable description.\n * @property {object} binData Information about the card based on the bin.\n * @property {string} binData.commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.countryOfIssuance The country of issuance.\n * @property {string} binData.debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.issuingBank The issuing bank.\n * @property {string} binData.payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} binData.productId The product id.\n * @property {boolean} liabilityShiftPossible *Deprecated:* Use `threeDSecureInfo.liabilityShiftPossible` instead.\n * @property {boolean} liabilityShifted *Deprecated:* Use `threeDSecureInfo.liabilityShifted` instead.\n * @property {object} threeDSecureInfo 3DS information about the card. Note: This information should be verified on the server by using the [payment method nonce find method](https://developer.paypal.com/braintree/docs/reference/request/payment-method-nonce/find). The values provided here are merely for convenience. Only values looked up on the server should determine the logic about how to process a transaction.\n * @property {string} threeDSecureInfo.acsTransactionId The transaction identifier from the issuing bank.\n * @property {string} threeDSecureInfo.cavv Cardholder authentication verification value or CAVV. The main encrypted message issuers and card networks use to verify authentication has occurred. Mastercard uses an AVV message and American Express uses an AEVV message, each of which should also be passed in the cavv parameter.\n * @property {boolean} threeDSecureInfo.dataOnlyRequested Indicates whether to use the data only flow. In this flow, frictionless 3DS is ensured for Mastercard cardholders as the card scheme provides a risk score for the issuer to determine whether to approve. If data only is not supported by the processor, a validation error will be raised. Non-Mastercard cardholders will fallback to a normal 3DS flow.\n * @property {string} threeDSecureInfo.dsTransactionId Transaction identifier resulting from 3D Secure 2 authentication.\n * @property {string} threeDSecureInfo.eciFlag The value of the electronic commerce indicator (ECI) flag, which indicates the outcome of the 3DS authentication. This will be a two-digit value.\n * @property {boolean} threeDSecureInfo.enrolled Indicates the status of 3D Secure authentication eligibility with the card issuer.\n * @property {boolean} threeDSecureInfo.liabilityShifted Indicates whether the liability for fraud has been shifted away from the merchant.\n * @property {boolean} threeDSecureInfo.liabilityShiftPossible Indicates whether liability shift is still possible on a retry.\n * @property {string} threeDSecureInfo.paresStatus Transaction status result identifier.\n * @property {string} threeDSecureInfo.status Indicates the outcome of the 3D Secure event.\n * @property {string} threeDSecureInfo.threeDSecureAuthenticationId ID of the 3D Secure authentication performed for this transaction. Do not provide this field as a transaction sale parameter if you are using the returned payment method nonce from the payload.\n * @property {string} threeDSecureInfo.threeDSecureServerTransactionId Transaction identifier provided by the issuing bank who recieved the 3D Secure event.\n * @property {string} threeDSecureInfo.threeDSecureVersion The version of 3D Secure authentication used for the transaction.\n * @property {string} threeDSecureInfo.xid Transaction identifier resulting from 3D Secure authentication. Uniquely identifies the transaction and sometimes required in the authorization message. This is a base64-encoded value. This field will no longer be used in 3D Secure 2 authentications for Visa and Mastercard, however it will be supported by American Express.\n * @property {string} threeDSecureInfo.lookup.transStatus Error code returned from the 3D Secure MPI provider.\n * @property {string} threeDSecureInfo.lookup.transStatusReason Description correlating to the transStatus error code.\n * @property {string} threeDSecureInfo.authentication.transStatus Error code returned from the 3D Secure MPI provider.\n * @property {string} threeDSecureInfo.authentication.transStatusReason Description correlating to the transStatus error code.\n * @property {object} rawCardinalSDKVerificationData The response back from the Cardinal SDK after verification has completed. See [Cardinal's Documentation](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/98315/Response+Objects) for more information. If the customer was not required to do a 3D Secure challenge, this object will not be available.\n */\n\n/**\n * @typedef {string} ThreeDSecure~prepareLookupPayload The client data to pass on when doing a server side lookup call.\n */\n\n/**\n * @typedef {object} ThreeDSecure~verificationData\n * @property {boolean} requiresUserAuthentication When `true`, the user will be presented with a 3D Secure challenge when calling `next` in the {@link ThreeDSecure#event:lookup-complete|`lookup-complete` event}.\n * @property {object} threeDSecureInfo Contains liability shift details.\n * @property {boolean} threeDSecureInfo.liabilityShiftPossible Indicates whether the card was eligible for 3D Secure.\n * @property {boolean} threeDSecureInfo.liabilityShifted Indicates whether the liability for fraud has been shifted away from the merchant.\n * @property {object} paymentMethod A {@link ThreeDSecure~verifyPayload|verifyPayload} object.\n * @property {object} lookup Details about the 3D Secure lookup.\n * @property {string} lookup.threeDSecureVersion The version of 3D Secure that will be used for the 3D Secure challenge.\n */\n\n/**\n * @typedef {object} ThreeDSecure~billingAddress\n * @property {string} [givenName] The first name associated with the billing address. (maximum length 50)\n * @property {string} [surname] The last name associated with the billing address. (maximum length 50)\n * @property {string} [phoneNumber] The phone number associated with the billing address. Only numbers; remove dashes, parenthesis and other characters.\n * @property {string} [streetAddress] Line 1 of the billing address (eg. number, street, etc). (maximum length 50)\n * @property {string} [extendedAddress] Line 2 of the billing address (eg. suite, apt #, etc.). (maximum length 50)\n * @property {string} [line3] Line 3 of the billing address if needed (eg. suite, apt #, etc). (maximum length 50)\n * @property {string} [locality] The locality (city) name associated with the billing address.\n * @property {string} [region] This field expects an ISO3166-2 subdivision code. The subdivision code is what follows the hyphen separator in the full ISO 3166-2 code. For example, the state of Ohio in the United States we expect \"OH\" as opposed to the full ISO 3166-2 code \"US-OH\".\n * @property {string} [postalCode] The zip code or equivalent for countries that have them.\n * @property {string} [countryCodeAlpha2] The 2 character country code.\n */\n\n/**\n * @typedef {object} ThreeDSecure~additionalInformation\n * @property {string} [workPhoneNumber] The work phone number used for verification. Only numbers; remove dashes, parenthesis and other characters. (maximum length 25)\n * @property {string} [shippingGivenName] The first name associated with the shipping address. (maximum length 50)\n * @property {string} [shippingSurname] The last name associated with the shipping address. (maximum length 50)\n * @property {object} [shippingAddress]\n * @property {string} [shippingAddress.streetAddress] Line 1 of the shipping address (eg. number, street, etc). (maximum length 50)\n * @property {string} [shippingAddress.extendedAddress] Line 2 of the shipping address (eg. suite, apt #, etc.). (maximum length 50)\n * @property {string} [shippingAddress.line3] Line 3 of the shipping address if needed (eg. suite, apt #, etc). (maximum length 50)\n * @property {string} [shippingAddress.locality] The locality (city) name associated with the shipping address. (maximum length 50)\n * @property {string} [shippingAddress.region] This field expects an ISO3166-2 subdivision code. The subdivision code is what follows the hyphen separator in the full ISO 3166-2 code. For example, the state of Ohio in the United States we expect \"OH\" as opposed to the full ISO 3166-2 code \"US-OH\".\n * @property {string} [shippingAddress.postalCode] The zip code or equivalent for countries that have them. (maximum length 10)\n * @property {string} [shippingAddress.countryCodeAlpha2] The 2 character country code. (maximum length 2)\n * @property {string} [shippingPhone] The phone number associated with the shipping address. Only numbers; remove dashes, parenthesis and other characters. (maximum length 20)\n * @property {string} [shippingMethod] The 2-digit string indicating the name of the shipping method chosen for the transaction. (maximum length 50) Possible values:\n * - `01` Same Day\n * - `02` Overnight / Expedited\n * - `03` Priority (2-3 Days)\n * - `04` Ground\n * - `05` Electronic Delivery\n * - `06` Ship to Store\n * @property {string} [shippingMethodIndicator] The 2-digit string indicating the shipping method chosen for the transaction Possible values.\n * - `01` Ship to cardholder billing address\n * - `02` Ship to another verified address on file with merchant\n * - `03` Ship to address that is different from billing address\n * - `04` Ship to store (store address should be populated on request)\n * - `05` Digital goods\n * - `06` Travel and event tickets, not shipped\n * - `07` Other\n * @property {string} [productCode] The 3-letter string representing the merchant product code. Possible values:\n * - `AIR` Airline\n * - `GEN` General Retail\n * - `DIG` Digital Goods\n * - `SVC` Services\n * - `RES` Restaurant\n * - `TRA` Travel\n * - `DSP` Cash Dispensing\n * - `REN` Car Rental\n * - `GAS` Fuel\n * - `LUX` Luxury Retail\n * - `ACC` Accommodation Retail\n * - `TBD` Other\n * @property {string} [deliveryTimeframe] The 2-digit number indicating the delivery time frame. Possible values:\n * - `01` Electronic delivery\n * - `02` Same day shipping\n * - `03` Overnight shipping\n * - `04` Two or more day shipping\n * @property {string} [deliveryEmail] For electronic delivery, email address to which the merchandise was delivered. (maximum length 254)\n * @property {string} [reorderindicator] The 2-digit number indicating whether the cardholder is reordering previously purchased merchandise. possible values:\n * - `01` First time ordered\n * - `02` Reordered\n * @property {string} [preorderIndicator] The 2-digit number indicating whether cardholder is placing an order with a future availability or release date. possible values:\n * - `01` Merchandise available\n * - `02` Future availability\n * @property {string} [preorderDate] The 8-digit number (format: YYYYMMDD) indicating expected date that a pre-ordered purchase will be available.\n * @property {string} [giftCardAmount] The purchase amount total for prepaid gift cards in major units. (maximum length 15)\n * @property {string} [giftCardCurrencyCode] ISO 4217 currency code for the gift card purchased. (maximum length 3)\n * @property {string} [giftCardCount] Total count of individual prepaid gift cards purchased. (maximum length 2)\n * @property {string} [accountAgeIndicator] The 2-digit value representing the length of time cardholder has had account. Possible values:\n * - `01` No Account\n * - `02` Created during transaction\n * - `03` Less than 30 days\n * - `04` 30-60 days\n * - `05` More than 60 days\n * @property {string} [accountCreateDate] The 8-digit number (format: YYYYMMDD) indicating the date the cardholder opened the account.\n * @property {string} [accountChangeIndicator] The 2-digit value representing the length of time since the last change to the cardholder account. This includes shipping address, new payment account or new user added. Possible values:\n * - `01` Changed during transaction\n * - `02` Less than 30 days\n * - `03` 30-60 days\n * - `04` More than 60 days\n * @property {string} [accountChangeDate] The 8-digit number (format: YYYYMMDD) indicating the date the cardholder's account was last changed. This includes changes to the billing or shipping address, new payment accounts or new users added.\n * @property {string} [accountPwdChangeIndicator] The 2-digit value representing the length of time since the cardholder changed or reset the password on the account. Possible values:\n * - `01` No change\n * - `02` Changed during transaction\n * - `03` Less than 30 days\n * - `04` 30-60 days\n * - `05` More than 60 days\n * @property {string} [accountPwdChangeDate] The 8-digit number (format: YYYYMMDD) indicating the date the cardholder last changed or reset password on account.\n * @property {string} [shippingAddressUsageIndicator] The 2-digit value indicating when the shipping address used for transaction was first used. Possible values:\n * - `01` This transaction\n * - `02` Less than 30 days\n * - `03` 30-60 days\n * - `04` More than 60 days\n * @property {string} [shippingAddressUsageDate] The 8-digit number (format: YYYYMMDD) indicating the date when the shipping address used for this transaction was first used.\n * @property {string} [transactionCountDay] Number of transactions (successful or abandoned) for this cardholder account within the last 24 hours. (maximum length 3)\n * @property {string} [transactionCountYear] Number of transactions (successful or abandoned) for this cardholder account within the last year. (maximum length 3)\n * @property {string} [addCardAttempts] Number of add card attempts in the last 24 hours. (maximum length 3)\n * @property {string} [accountPurchases] Number of purchases with this cardholder account during the previous six months.\n * @property {string} [fraudActivity] The 2-digit value indicating whether the merchant experienced suspicious activity (including previous fraud) on the account. Possible values:\n * - `01` No suspicious activity\n * - `02` Suspicious activity observed\n * @property {string} [shippingNameIndicator] The 2-digit value indicating if the cardholder name on the account is identical to the shipping name used for the transaction. Possible values:\n * - `01` Account and shipping name identical\n * - `02` Account and shipping name differ\n * @property {string} [paymentAccountIndicator] The 2-digit value indicating the length of time that the payment account was enrolled in the merchant account. Possible values:\n * - `01` No account (guest checkout)\n * - `02` During the transaction\n * - `03` Less than 30 days\n * - `04` 30-60 days\n * - `05` More than 60 days\n * @property {string} [paymentAccountAge] The 8-digit number (format: YYYYMMDD) indicating the date the payment account was added to the cardholder account.\n * @property {string} [acsWindowSize] The 2-digit number to set the challenge window size to display to the end cardholder.  The ACS will reply with content that is formatted appropriately to this window size to allow for the best user experience.  The sizes are width x height in pixels of the window displayed in the cardholder browser window. Possible values:\n * - `01` 250x400\n * - `02` 390x400\n * - `03` 500x600\n * - `04` 600x400\n * - `05` Full page\n * @property {string} [sdkMaxTimeout] The 2-digit number of minutes (minimum 05) to set the maximum amount of time for all 3DS 2.0 messages to be communicated between all components.\n * @property {string} [addressMatch] The 1-character value (Y/N) indicating whether cardholder billing and shipping addresses match.\n * @property {string} [accountId] Additional cardholder account information. (maximum length 64)\n * @property {string} [ipAddress] The IP address of the consumer. IPv4 and IPv6 are supported.\n * @property {string} [orderDescription] Brief description of items purchased. (maximum length 256)\n * @property {string} [taxAmount] Unformatted tax amount without any decimalization (ie. $123.67 = 12367). (maximum length 20)\n * @property {string} [userAgent] The exact content of the HTTP user agent header. (maximum length 500)\n * @property {string} [authenticationIndicator] The 2-digit number indicating the type of authentication request. Possible values:\n *  - `01` Payment\n *  - `02` Recurring transaction\n *  - `03` Installment\n *  - `04` Add card\n *  - `05` Maintain card\n *  - `06` Cardholder verification as part of EMV token ID&V\n * @property {string} [installment] An integer value greater than 1 indicating the maximum number of permitted authorizations for installment payments. (maximum length 3)\n * @property {string} [purchaseDate] The 14-digit number (format: YYYYMMDDHHMMSS) indicating the date in UTC of original purchase.\n * @property {string} [recurringEnd] The 8-digit number (format: YYYYMMDD) indicating the date after which no further recurring authorizations should be performed.\n * @property {string} [recurringFrequency] Integer value indicating the minimum number of days between recurring authorizations. A frequency of monthly is indicated by the value 28. Multiple of 28 days will be used to indicate months (ex. 6 months = 168). (maximum length 3)\n */\n\n/**\n * @name ThreeDSecure#on\n * @function\n * @param {string} event The name of the event to which you are subscribing.\n * @param {function} handler A callback to handle the event.\n * @description Subscribes a handler function to a named event. The following events are available:\n *   * {@link ThreeDSecure#event:lookup-complete|lookup-complete}\n *   * {@link ThreeDSecure#event:customer-canceled|customer-canceled}\n *   * {@link ThreeDSecure#event:authentication-iframe-available|authentication-iframe-available}\n *   * {@link ThreeDSecure#event:authentication-modal-render|authentication-modal-render}\n *   * {@link ThreeDSecure#event:authentication-modal-close|authentication-modal-close}\n * @example\n * <caption>Listening to a 3D Secure event</caption>\n * braintree.threeDSecure.create({ ... }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('lookup-complete', function (data, next) {\n *     console.log('data from the lookup', data);\n *     next();\n *   });\n *   threeDSecureInstance.on('customer-canceled', function () {\n *     console.log('log that the customer canceled');\n *   });\n * });\n * @returns {void}\n */\n\n/**\n * @name ThreeDSecure#off\n * @function\n * @param {string} event The name of the event to which you are unsubscribing.\n * @param {function} handler The callback for the event you are unsubscribing from.\n * @description Unsubscribes the handler function to a named event.\n * @example\n * <caption>Subscribing and then unsubscribing from a 3D Secure eld event</caption>\n * braintree.threeDSecure.create({ ... }, function (createErr, threeDSecureInstance) {\n *   var lookupCallback = function (data, next) {\n *     console.log(data);\n *     next();\n *   };\n *   var cancelCallback = function () {\n *     // log the cancelation\n *     // or update UI\n *   };\n *\n *   threeDSecureInstance.on('lookup-complete', lookupCallback);\n *   threeDSecureInstance.on('customer-canceled', cancelCallback);\n *\n *   // later on\n *   threeDSecureInstance.off('lookup-complete', lookupCallback);\n *   threeDSecureInstance.off('customer-canceled', cancelCallback);\n * });\n * @returns {void}\n */\n\n/**\n * This event is emitted when the `2-inline-iframe` version is specified when creating the 3D Secure instance and the authentication iframe becomes available.\n * @event ThreeDSecure#authentication-iframe-available\n * @example\n * <caption>Listening for the authentication iframe to be available</caption>\n *   threeDSecureInstance.on('authentication-iframe-available', function (event, next) {\n *     document.body.appendChild(event.element); // add iframe element to page\n *\n *     next(); // let the SDK know the iframe is ready\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the initial lookup request completes. If this is not used, a `onLookupComplete` callback must be passed into the `verifyCard` method.\n * @event ThreeDSecure#lookup-complete\n * @example\n * <caption>Listening for when the lookup request is complete</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('lookup-complete', function (data, next) {\n *     // inspect the data\n *\n *     // call next when ready to proceed with the challenge\n *     next();\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the customer cancels the 3D Secure challenge.\n * @event ThreeDSecure#customer-canceled\n * @example\n * <caption>Listening for when the customer cancels the 3D Secure challenge</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('customer-canceled', function () {\n *     // the customer canceled the 3D Secure challenge\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the authentication modal closes, either because the authentication was completed or because the customer canceled the process.\n * @event ThreeDSecure#authentication-modal-close\n * @example\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('authentication-modal-close', function () {\n *     // the modal was closed\n *   });\n * });\n */\n\n/**\n * This event is emitted when using the 3D Secure 2.0 flow and the authentication modal is rendered.\n * @event ThreeDSecure#authentication-modal-render\n * @example\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createErr, threeDSecureInstance) {\n *   threeDSecureInstance.on('authentication-modal-render', function () {\n *     // the modal was rendered, presenting the authentication form to the customer\n *   });\n * });\n */\n\n/**\n * @class\n * @param {object} options 3D Secure {@link module:braintree-web/three-d-secure.create create} options\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/three-d-secure.create|braintree.threeDSecure.create} instead.</strong>\n * @classdesc This class represents a ThreeDSecure component produced by {@link module:braintree-web/three-d-secure.create|braintree.threeDSecure.create}. Instances of this class have a method for launching a 3D Secure authentication flow.\n *\n * If you use the Braintree SDK from within an iframe, you must not use the `sandbox` attribute on your iframe or the 3D Secure modal will not function correctly.\n *\n * **Note**: 3D Secure 2.0 is documented below and will become the default integration method in a future version of Braintree-web. Until then, version 1.0 will continue to be supported. To view 3D Secure 1.0 documentation, look at Braintree-web documentation from version [3.40.0](https://braintree.github.io/braintree-web/3.40.0/ThreeDSecure.html) and earlier, or upgrade your integration by referring to the [3D Secure 2.0 adoption guide](https://developer.paypal.com/braintree/docs/guides/3d-secure/migration/javascript/v3).\n */\nfunction ThreeDSecure(options) {\n  var self = this;\n  var Framework = FRAMEWORKS[options.framework];\n\n  EventEmitter.call(this);\n\n  this._framework = new Framework(options);\n  this._framework.setUpEventListeners(function () {\n    self._emit.apply(self, arguments);\n  });\n}\n\nEventEmitter.createChild(ThreeDSecure);\n\n/**\n * Launch the 3D Secure login flow, returning a nonce payload.\n *\n * @public\n * @param {object} options Options for card verification.\n * @param {string} options.nonce The nonce representing the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.nonce`.\n * @param {string} options.bin The numeric Bank Identification Number (bin) of the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.details.bin`.\n * @param {string} options.amount The amount of the transaction in the current merchant account's currency. This must be expressed in numbers with an optional decimal (using `.`) and precision up to the hundredths place. For example, if you're processing a transaction for 1.234,56 € then `amount` should be `1234.56`.\n * @param {string} [options.accountType] The account type for the card (if known). Accepted values: `credit` or `debit`.\n * @param {boolean} [options.cardAddChallengeRequested] If set to `true`, a card-add challenge will be requested from the issuer. If set to `false`, a card-add challenge will not be requested. If the param is missing, a card-add challenge will only be requested for $0 amount. An authentication created using this flag should only be used for vaulting operations (creation of customers' credit cards or payment methods) and not for creating transactions.\n * @param {boolean} [options.cardAdd] *Deprecated:* Use `cardAddChallengeRequested` instead.\n * @param {boolean} [options.challengeRequested] If set to true, an authentication challenge will be forced if possible.\n * @param {boolean} [options.exemptionRequested] If set to true, an exemption to the authentication challenge will be requested.\n * @param {function} [options.onLookupComplete] *Deprecated:* Use {@link ThreeDSecure#event:lookup-complete|`threeDSecureInstance.on('lookup-complete')`} instead. Function to execute when lookup completes. The first argument, `data`, is a {@link ThreeDSecure~verificationData|verificationData} object, and the second argument, `next`, is a callback. `next` must be called to continue.\n * @param {string} [options.email] The email used for verification. (maximum length 255)\n * @param {string} [options.mobilePhoneNumber] The mobile phone number used for verification. Only numbers; remove dashes, parenthesis and other characters. (maximum length 25)\n * @param {object} [options.billingAddress] An {@link ThreeDSecure~billingAddress|billingAddress} object for verification.\n * @param {object} [options.additionalInformation] An {@link ThreeDSecure~additionalInformation|additionalInformation} object for verification.\n * @param {object} [options.customer] **Deprecated** Customer information for use in 3DS 1.0 verifications. Can contain any subset of a {@link ThreeDSecure~verifyCardCustomerObject|verifyCardCustomerObject}. Only to be used for 3DS 1.0 integrations.\n * @param {callback} options.addFrame **Deprecated** This {@link ThreeDSecure~addFrameCallback|addFrameCallback} will be called when the bank frame needs to be added to your page. Only to be used for 3DS 1.0 integrations.\n * @param {callback} options.removeFrame **Deprecated** For use in 3DS 1.0 Flows. This {@link ThreeDSecure~removeFrameCallback|removeFrameCallback} will be called when the bank frame needs to be removed from your page. Only to be used in 3DS 1.0 integrations.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link ThreeDSecure~verifyPayload|verifyPayload}. If no callback is provided, it will return a promise that resolves {@link ThreeDSecure~verifyPayload|verifyPayload}.\n\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * <caption>Verifying a payment method nonce with 3DS 2.0</caption>\n * var my3DSContainer;\n *\n * // set up listener after initialization\n * threeDSecure.on(('lookup-complete', function (data, next) {\n *   // use `data` here, then call `next()`\n *   next();\n * });\n *\n * // call verifyCard after tokenizing a card\n * threeDSecure.verifyCard({\n *   amount: '123.45',\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin,\n *   email: 'test@example.com'\n *   billingAddress: {\n *     givenName: 'Jill',\n *     surname: 'Doe',\n *     phoneNumber: '8101234567',\n *     streetAddress: '555 Smith St.',\n *     extendedAddress: '#5',\n *     locality: 'Oakland',\n *     region: 'CA',\n *     postalCode: '12345',\n *     countryCodeAlpha2: 'US'\n *   },\n *   additionalInformation: {\n *     workPhoneNumber: '5555555555',\n *     shippingGivenName: 'Jill',\n *     shippingSurname: 'Doe',\n *     shippingAddress: {\n *       streetAddress: '555 Smith st',\n *       extendedAddress: '#5',\n *       locality: 'Oakland',\n *       region: 'CA',\n *       postalCode: '12345',\n *       countryCodeAlpha2: 'US'\n *     }\n *     shippingPhone: '8101234567'\n *   }\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n * <caption>Verifying a payment method nonce with 3DS 2.0 with onLookupComplete callback</caption>\n * var my3DSContainer;\n *\n * threeDSecure.verifyCard({\n *   amount: '123.45',\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin,\n *   email: 'test@example.com'\n *   billingAddress: {\n *     givenName: 'Jill',\n *     surname: 'Doe',\n *     phoneNumber: '8101234567',\n *     streetAddress: '555 Smith St.',\n *     extendedAddress: '#5',\n *     locality: 'Oakland',\n *     region: 'CA',\n *     postalCode: '12345',\n *     countryCodeAlpha2: 'US'\n *   },\n *   additionalInformation: {\n *     workPhoneNumber: '5555555555',\n *     shippingGivenName: 'Jill',\n *     shippingSurname: 'Doe',\n *     shippingAddress: {\n *       streetAddress: '555 Smith st',\n *       extendedAddress: '#5',\n *       locality: 'Oakland',\n *       region: 'CA',\n *       postalCode: '12345',\n *       countryCodeAlpha2: 'US'\n *     }\n *     shippingPhone: '8101234567'\n *   },\n *   onLookupComplete: function (data, next) {\n *     // use `data` here, then call `next()`\n *     next();\n *   }\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n * @example\n * <caption>Handling 3DS lookup errors</caption>\n * var my3DSContainer;\n *\n * // set up listener after initialization\n * threeDSecure.on(('lookup-complete', function (data, next) {\n *   // use `data` here, then call `next()`\n *   next();\n * });\n *\n * // call verifyCard after tokenizing a card\n * threeDSecure.verifyCard({\n *   amount: '123.45',\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin,\n *   email: 'test@example.com',\n *   billingAddress: billingAddressFromCustomer,\n *   additionalInformation: additionalInfoFromCustomer\n * }, function (err, payload) {\n *   if (err) {\n *     if (err.code.indexOf('THREEDS_LOOKUP') === 0) {\n *       // an error occurred during the initial lookup request\n *\n *       if (err.code === 'THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR') {\n *         // either the passed payment method nonce does not exist\n *         // or it was already consumed before the lookup call was made\n *       } else if (err.code.indexOf('THREEDS_LOOKUP_VALIDATION') === 0) {\n *         // a validation error occurred\n *         // likely some non-ascii characters were included in the billing\n *         // address given name or surname fields, or the cardholdername field\n *\n *         // Instruct your user to check their data and try again\n *       } else {\n *         // an unknown lookup error occurred\n *       }\n *     } else {\n *       // some other kind of error\n *     }\n *     return;\n *   }\n *\n *   // handle success\n * });\n * @example\n * <caption>Deprecated: Verifying an existing nonce with 3DS 1.0</caption>\n * var my3DSContainer;\n *\n * threeDSecure.verifyCard({\n *   nonce: existingNonce,\n *   amount: 123.45,\n *   addFrame: function (err, iframe) {\n *     // Set up your UI and add the iframe.\n *     my3DSContainer = document.createElement('div');\n *     my3DSContainer.appendChild(iframe);\n *     document.body.appendChild(my3DSContainer);\n *   },\n *   removeFrame: function () {\n *     // Remove UI that you added in addFrame.\n *     document.body.removeChild(my3DSContainer);\n *   }\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n */\nThreeDSecure.prototype.verifyCard = function (options) {\n  var privateOptions;\n\n  if (this.hasListener(\"lookup-complete\")) {\n    privateOptions = {\n      ignoreOnLookupCompleteRequirement: true,\n    };\n  }\n\n  return this._framework.verifyCard(options, privateOptions);\n};\n\n/* eslint-disable-next-line valid-jsdoc */\n/**\n * Launch the iframe challenge using a 3D Secure lookup response from a server side lookup.\n *\n * @public\n * @param {(object|string)} lookupResponse The lookup response from the server side call to lookup the 3D Secure information. The raw string or a parsed object can be passed.\n * @returns {Promise} Returns a promise.\n * @example\n * var my3DSContainer;\n *\n * threeDSecure.initializeChallengeWithLookupResponse(lookupResponseFromServer).then(function (payload) {\n *   if (payload.liabilityShifted) {\n *     // Liability has shifted\n *     submitNonceToServer(payload.nonce);\n *   } else if (payload.liabilityShiftPossible) {\n *     // Liability may still be shifted\n *     // Decide if you want to submit the nonce\n *   } else {\n *     // Liability has not shifted and will not shift\n *     // Decide if you want to submit the nonce\n *   }\n * });\n */\nThreeDSecure.prototype.initializeChallengeWithLookupResponse = function (\n  lookupResponse\n) {\n  if (typeof lookupResponse === \"string\") {\n    lookupResponse = JSON.parse(lookupResponse);\n  }\n\n  return this._framework.initializeChallengeWithLookupResponse(lookupResponse);\n};\n\n/**\n * Gather the data needed for a 3D Secure lookup call.\n *\n * @public\n * @param {object} options Options for 3D Secure lookup.\n * @param {string} options.nonce The nonce representing the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.nonce`.\n * @param {string} [options.bin] The numeric Bank Identification Number (bin) of the card from a tokenization payload. For example, this can be a {@link HostedFields~tokenizePayload|tokenizePayload} returned by Hosted Fields under `payload.details.bin`. Though not required to start the verification, it is required to receive a 3DS 2.0 lookup response.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link ThreeDSecure~prepareLookupPayload|prepareLookupPayload}. If no callback is provided, it will return a promise that resolves {@link ThreeDSecure~prepareLookupPayload|prepareLookupPayload}.\n\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * <caption>Preparing data for a 3D Secure lookup</caption>\n * threeDSecure.prepareLookup({\n *   nonce: hostedFieldsTokenizationPayload.nonce,\n *   bin: hostedFieldsTokenizationPayload.details.bin\n * }, function (err, payload) {\n *   if (err) {\n *     console.error(err);\n *     return;\n *   }\n *\n *   // send payload to server to do server side lookup\n * });\n */\nThreeDSecure.prototype.prepareLookup = function (options) {\n  return this._framework.prepareLookup(options).then(function (data) {\n    return JSON.stringify(data);\n  });\n};\n\n/**\n * Cancel the 3DS flow and return the verification payload if available. If using 3D Secure version 2, this will not close the UI of the authentication modal. It is recommended that this method only be used in the {@link ThreeDSecure#event:lookup-complete|`lookup-complete`} event or the `onLookupComplete` callback.\n * @public\n * @param {callback} [callback] The second argument is a {@link ThreeDSecure~verifyPayload|verifyPayload}. If there is no verifyPayload (the initial lookup did not complete), an error will be returned. If no callback is passed, `cancelVerifyCard` will return a promise.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example <caption>Cancel the verification in `lookup-complete` event</caption>\n * // set up listener after instantiation\n * threeDSecure.on('lookup-complete', function (data, next) {\n *   // determine if you want to call next to start the challenge,\n *   // if not, call cancelVerifyCard\n *   threeDSecure.cancelVerifyCard(function (err, verifyPayload) {\n *     if (err) {\n *       // Handle error\n *       console.log(err.message); // No verification payload available\n *       return;\n *     }\n *\n *     verifyPayload.nonce; // The nonce returned from the 3ds lookup call\n *     verifyPayload.liabilityShifted; // boolean\n *     verifyPayload.liabilityShiftPossible; // boolean\n *   });\n * });\n *\n * // after tokenizing a credit card\n * threeDSecure.verifyCard({\n *   amount: '100.00',\n *   nonce: nonceFromTokenizationPayload,\n *   bin: binFromTokenizationPayload\n *   // other fields such as billing address\n * }, function (verifyError, payload) {\n *   if (verifyError) {\n *     if (verifyError.code === 'THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT ') {\n *       // flow was canceled by merchant, 3ds info can be found in the payload\n *       // for cancelVerifyCard\n *     }\n *   }\n * });\n * @example <caption>Cancel the verification in onLookupComplete callback</caption>\n * threeDSecure.verifyCard({\n *   amount: '100.00',\n *   nonce: nonceFromTokenizationPayload,\n *   bin: binFromTokenizationPayload,\n *   // other fields such as billing address\n *   onLookupComplete: function (data, next) {\n *     // determine if you want to call next to start the challenge,\n *     // if not, call cancelVerifyCard\n *     threeDSecure.cancelVerifyCard(function (err, verifyPayload) {\n *       if (err) {\n *         // Handle error\n *         console.log(err.message); // No verification payload available\n *         return;\n *       }\n *\n *       verifyPayload.nonce; // The nonce returned from the 3ds lookup call\n *       verifyPayload.liabilityShifted; // boolean\n *       verifyPayload.liabilityShiftPossible; // boolean\n *     });\n *   }\n * }, function (verifyError, payload) {\n *   if (verifyError) {\n *     if (verifyError.code === 'THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT ') {\n *       // flow was canceled by merchant, 3ds info can be found in the payload\n *       // for cancelVerifyCard\n *     }\n *   }\n * });\n * @example <caption>Cancel the verification in 3D Secure version 1</caption>\n * // unlike with v2, this will not cause `verifyCard` to error, it will simply\n * // never call the callback\n * threeDSecure.cancelVerifyCard(function (err, verifyPayload) {\n *   if (err) {\n *     // Handle error\n *     console.log(err.message); // No verification payload available\n *     return;\n *   }\n *\n *   verifyPayload.nonce; // The nonce returned from the 3ds lookup call\n *   verifyPayload.liabilityShifted; // boolean\n *   verifyPayload.liabilityShiftPossible; // boolean\n * });\n */\nThreeDSecure.prototype.cancelVerifyCard = function () {\n  return this._framework.cancelVerifyCard();\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web/three-d-secure.create|create}, with the exception that the Cardinal SDK, on window.Cardinal, will remain.\n * @public\n * @param {callback} [callback] Called on completion. If no callback is passed, `teardown` will return a promise.\n * @example\n * threeDSecure.teardown();\n * @example <caption>With callback</caption>\n * threeDSecure.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nThreeDSecure.prototype.teardown = function () {\n  var methodNames = methods(ThreeDSecure.prototype).concat(\n    methods(EventEmitter.prototype)\n  );\n\n  convertMethodsToError(this, methodNames);\n\n  return this._framework.teardown();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(ThreeDSecure);\n\n},{\"../../lib/convert-methods-to-error\":101,\"../../lib/methods\":129,\"./frameworks\":144,\"@braintree/event-emitter\":41,\"@braintree/wrap-promise\":51}],149:[function(require,module,exports){\n\"use strict\";\n/** @module braintree-web/three-d-secure */\n\nvar ThreeDSecure = require(\"./external/three-d-secure\");\nvar isHTTPS = require(\"../lib/is-https\").isHTTPS;\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar analytics = require(\"../lib/analytics\");\nvar errors = require(\"./shared/errors\");\nvar VERSION = \"3.88.3\";\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {object} [options.cardinalSDKConfig] A config for the underlying Cardinal SDK.\n * @param {object} [options.cardinalSDKConfig.logging] The logging configuration for the Cardinal SDK. See [Cardinal's documentation for the logging object](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-Logging) for more information.\n * @param {number} [options.cardinalSDKConfig.timeout] The time in milliseconds to wait before a request to Cardinal's API times out. See [Cardinal's documentation for root level configuration](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-RootLevelConfiguration) for more information.\n * @param {number} [options.cardinalSDKConfig.maxRequestRetries] How many times a request should be re-attempted to Cardinal's API before giving up as a failure. See [Cardinal's documentation for root level configuration](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-RootLevelConfiguration) for more information.\n * @param {object} [options.cardinalSDKConfig.payment] An object to describe how you want the user interactions to behave. Only a subset of the [Cardinal SDK payment configuration object](https://cardinaldocs.atlassian.net/wiki/spaces/CC/pages/1409568/Configurations#Configurations-Payment) are supported: `displayLoading` and `displayExitButton`.\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {(number|string)} [options.version=1] The version of 3D Secure to use. Possible options:\n * * 1 - The legacy 3D Secure v1.0 integration.\n * * 2 - A 3D Secure v2.0 integration that uses a modal to host the 3D Secure iframe.\n * * 2-bootstrap3-modal - A 3D Secure v2.0 integration that uses a modal styled with Bootstrap 3 styles to host the 3D Secure iframe. Requires having the Bootstrap 3 script files and stylesheets on your page.\n * * 2-inline-iframe - A 3D Secure v2.0 integration that provides the authentication iframe directly to the merchant.\n * @param {callback} [callback] The second argument, `data`, is the {@link ThreeDSecure} instance. If no callback is provided, it returns a promise that resolves the {@link ThreeDSecure} instance.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n@example\n * <caption>Creating a v2 3D Secure component using 2 version (Cardinal modal)</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2'\n * }, function (createError, threeDSecure) {\n *   // set up lookup-complete listener\n *   threeDSecure.on('lookup-complete', function (data, next) {\n *     // check lookup data\n *\n *     next();\n *   });\n *\n *   // using Hosted Fields, use `tokenize` to get back a credit card nonce\n *\n *   threeDSecure.verifyCard({\n *     nonce: nonceFromTokenizationPayload,,\n *     bin: binFromTokenizationPayload,\n *     amount: '100.00'\n *   }, function (verifyError, payload) {\n *     // inspect payload\n *     // send payload.nonce to your server\n *   });\n * });\n * @example\n * <caption>Creating a v2 3D Secure component using 2-bootstrap3-modal version</caption>\n * // must have the boostrap js, css and jquery files on your page\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2-bootstrap3-modal'\n * }, function (createError, threeDSecure) {\n *   // set up lookup-complete listener\n *   threeDSecure.on('lookup-complete', function (data, next) {\n *     // check lookup data\n *\n *     next();\n *   });\n *\n *   // using Hosted Fields, use `tokenize` to get back a credit card nonce\n *\n *   // challenge will be presented in a bootstrap 3 modal\n *   threeDSecure.verifyCard({\n *     nonce: nonceFromTokenizationPayload,\n *     bin: binFromTokenizationPayload,\n *     amount: '100.00'\n *   }, function (verifyError, payload) {\n *     // inspect payload\n *     // send payload.nonce to your server\n *   });\n * });\n * @example\n * <caption>Creating a v2 3D Secure component using 2-inline-iframe version</caption>\n * braintree.threeDSecure.create({\n *   client: clientInstance,\n *   version: '2-inline-iframe'\n * }, function (createError, threeDSecure) {\n *   // set up lookup-complete listener\n *   threeDSecure.on('lookup-complete', function (data, next) {\n *     // check lookup data\n *\n *     next();\n *   });\n *   // set up iframe listener\n *   threeDSecure.on('authentication-iframe-available', function (event, next) {\n *     var element = event.element; // an html element that contains the iframe\n *\n *     document.body.appendChild(element); // put it on your page\n *\n *     next(); // let the sdk know the element has been added to the page\n *   });\n *\n *   // using Hosted Fields, use `tokenize` to get back a credit card nonce\n *\n *   threeDSecure.verifyCard({\n *     nonce: nonceFromTokenizationPayload,,\n *     bin: binFromTokenizationPayload,\n *     amount: '100.00'\n *   }, function (verifyError, payload) {\n *     // inspect payload\n *     // send payload.nonce to your server\n *   });\n * });\n */\nfunction create(options) {\n  var name = \"3D Secure\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var assetsUrl = createAssetsUrl.create(options.authorization);\n      var framework = getFramework(options);\n      var createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: assetsUrl,\n          name: name,\n        })\n        .then(function (client) {\n          var error, isProduction;\n          var config = client.getConfiguration();\n          var gwConfig = config.gatewayConfiguration;\n\n          options.client = client;\n\n          if (!gwConfig.threeDSecureEnabled) {\n            error = errors.THREEDS_NOT_ENABLED;\n          }\n\n          if (config.authorizationType === \"TOKENIZATION_KEY\") {\n            error = errors.THREEDS_CAN_NOT_USE_TOKENIZATION_KEY;\n          }\n\n          isProduction = gwConfig.environment === \"production\";\n\n          if (isProduction && !isHTTPS()) {\n            error = errors.THREEDS_HTTPS_REQUIRED;\n          }\n\n          if (\n            framework !== \"legacy\" &&\n            !(\n              gwConfig.threeDSecure &&\n              gwConfig.threeDSecure.cardinalAuthenticationJWT\n            )\n          ) {\n            analytics.sendEvent(\n              options.client,\n              \"three-d-secure.initialization.failed.missing-cardinalAuthenticationJWT\"\n            );\n            error = errors.THREEDS_NOT_ENABLED_FOR_V2;\n          }\n\n          if (error) {\n            return Promise.reject(new BraintreeError(error));\n          }\n\n          analytics.sendEvent(options.client, \"three-d-secure.initialized\");\n\n          return client;\n        });\n      var instance = new ThreeDSecure({\n        client: options.client,\n        assetsUrl: assetsUrl,\n        createPromise: createPromise,\n        loggingEnabled: options.loggingEnabled,\n        cardinalSDKConfig: options.cardinalSDKConfig,\n        framework: framework,\n      });\n\n      if (options.client) {\n        return createPromise.then(function () {\n          return instance;\n        });\n      }\n\n      return instance;\n    });\n}\n\nfunction getFramework(options) {\n  var version = String(options.version || \"\");\n\n  if (!version || version === \"1\") {\n    return \"legacy\";\n  }\n\n  switch (version) {\n    case \"2\":\n    case \"2-cardinal-modal\":\n      return \"cardinal-modal\";\n    case \"2-bootstrap3-modal\":\n      return \"bootstrap3-modal\";\n    case \"2-inline-iframe\":\n      return \"inline-iframe\";\n    default:\n      throw new BraintreeError({\n        code: errors.THREEDS_UNRECOGNIZED_VERSION.code,\n        type: errors.THREEDS_UNRECOGNIZED_VERSION.type,\n        message:\n          \"Version `\" +\n          options.version +\n          \"` is not a recognized version. You may need to update the version of your Braintree SDK to support this version.\",\n      });\n  }\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":94,\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"../lib/is-https\":126,\"../lib/promise\":131,\"./external/three-d-secure\":148,\"./shared/errors\":151,\"@braintree/wrap-promise\":51}],150:[function(require,module,exports){\n\"use strict\";\n\nmodule.exports = {\n  LANDING_FRAME_NAME: \"braintreethreedsecurelanding\",\n  CARDINAL_SCRIPT_SOURCE: {\n    production: \"https://songbird.cardinalcommerce.com/edge/v1/songbird.js\",\n    sandbox: \"https://songbirdstag.cardinalcommerce.com/edge/v1/songbird.js\",\n  },\n};\n\n},{}],151:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.3D Secure - Creation Error Codes\n * @description Errors that occur when [creating the 3D Secure component](./module-braintree-web_three-d-secure.html#.create).\n * @property {MERCHANT} THREEDS_NOT_ENABLED Occurs when 3D Secure is not enabled in the Braintree control panel.\n * @property {MERCHANT} THREEDS_CAN_NOT_USE_TOKENIZATION_KEY Occurs when 3D Secure component is created without a Client Token.\n * @property {MERCHANT} THREEDS_HTTPS_REQUIRED Occurs when 3D Secure component is created in production over HTTPS.\n * @property {MERCHANT} THREEDS_NOT_ENABLED_FOR_V2 Occurs when 3D Secure component is created with version 2 parameter, but merchant is not enabled to use version 2.\n * @property {MERCHANT} THREEDS_UNRECOGNIZED_VERSION Occurs when unrecognized version enum is passed into the create call.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_SETUP_FAILED Occurs when Cardinal's Songbird.js library fails to setup for an unknown reason.\n * @property {NETWORK} THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED Occurs when using version 2 and Cardinal's Songbird.js script could not be loaded.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT Occurs when Cardinal's Songbird.js library takes longer than 60 seconds to set up.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT Occurs when Cardinal sends a response indicating a timeout on /Validate, /Confirm, or /Continue.\n * @property {MERCHANT} THREEDS_CARDINAL_SDK_BAD_CONFIG Occurs when there is no JWT in the request. Also when there's some other malformed aspect of config.\n * @property {MERCHANT} THREEDS_CARDINAL_SDK_BAD_JWT Occurs when a malformed config causes a either a missing response JWT or a malformed Cardinal response.\n * @property {UNKNOWN} THREEDS_CARDINAL_SDK_ERROR Occurs when a \"general error\" or a Cardinal hosted fields error happens. Description contains more details.\n * @property {CUSTOMER} THREEDS_CARDINAL_SDK_CANCELED Occurs when customer cancels the transaction mid-flow, usually with alt-pays that have their own cancel buttons.\n */\n\n/**\n * @name BraintreeError.3D Secure - verifyCard Error Codes\n * @description Errors that occur when using the [`verifyCard` method](./ThreeDSecure.html#verifyCard).\n * @property {MERCHANT} THREEDS_AUTHENTICATION_IN_PROGRESS Occurs when another verification is already in progress.\n * @property {MERCHANT} THREEDS_MISSING_VERIFY_CARD_OPTION Occurs when a required option is missing.\n * @property {UNKNOWN} THREEDS_JWT_AUTHENTICATION_FAILED Occurs when something went wrong authenticating the JWT from the Cardinal SDK.\n * @property {MERCHANT} THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR Occurs when the supplied payment method nonce does not exist or the payment method nonce has already been consumed.\n * @property {CUSTOMER} THREEDS_LOOKUP_VALIDATION_ERROR Occurs when a validation error occurs during the 3D Secure lookup.\n * @property {UNKNOWN} THREEDS_LOOKUP_ERROR An unknown error occurred while attempting the 3D Secure lookup.\n * @property {MERCHANT} THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT Occurs when the 3D Secure flow is canceled by the merchant using `cancelVerifyCard` (3D Secure v2 flows only).\n * @property {UNKNOWN} THREEDS_INLINE_IFRAME_DETAILS_INCORRECT An unknown error occurred while attempting to use the inline iframe framework.\n */\n\n/**\n * @name BraintreeError.3D Secure - cancelVerifyCard Error Codes\n * @description Errors that occur when using the [`cancelVerifyCard` method](./ThreeDSecure.html#cancelVerifyCard).\n * @property {MERCHANT} THREEDS_NO_VERIFICATION_PAYLOAD Occurs when the 3D Secure flow is canceled, but there is no 3D Secure information available.\n */\n\n/**\n * @name BraintreeError.3D Secure - Internal Error Codes\n * @ignore\n * @description Errors that occur internally\n * @property {INTERNAL} THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN Occurs when iframe is initialized on a non-verified domain.\n * @property {INTERNAL} THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED Occurs when a 3D Secure framework method is not implemented.\n */\n\nvar BraintreeError = require(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  THREEDS_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_NOT_ENABLED\",\n    message: \"3D Secure is not enabled for this merchant.\",\n  },\n  THREEDS_CAN_NOT_USE_TOKENIZATION_KEY: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_CAN_NOT_USE_TOKENIZATION_KEY\",\n    message: \"3D Secure can not use a tokenization key for authorization.\",\n  },\n  THREEDS_HTTPS_REQUIRED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_HTTPS_REQUIRED\",\n    message: \"3D Secure requires HTTPS.\",\n  },\n  THREEDS_NOT_ENABLED_FOR_V2: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_NOT_ENABLED_FOR_V2\",\n    message:\n      \"3D Secure version 2 is not enabled for this merchant. Contact Braintree Support for assistance at https://help.braintreepayments.com/\",\n  },\n  THREEDS_UNRECOGNIZED_VERSION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_UNRECOGNIZED_VERSION\",\n  },\n  THREEDS_CARDINAL_SDK_SETUP_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_SETUP_FAILED\",\n    message: \"Something went wrong setting up Cardinal's Songbird.js library.\",\n  },\n  THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"THREEDS_CARDINAL_SDK_SCRIPT_LOAD_FAILED\",\n    message: \"Cardinal's Songbird.js library could not be loaded.\",\n  },\n  THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_SETUP_TIMEDOUT\",\n    message: \"Cardinal's Songbird.js took too long to setup.\",\n  },\n  THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_RESPONSE_TIMEDOUT\",\n    message: \"Cardinal's API took too long to respond.\",\n  },\n  THREEDS_CARDINAL_SDK_BAD_CONFIG: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_CARDINAL_SDK_BAD_CONFIG\",\n    message:\n      \"JWT or other required field missing. Please check your setup configuration.\",\n  },\n  THREEDS_CARDINAL_SDK_BAD_JWT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_CARDINAL_SDK_BAD_JWT\",\n    message:\n      \"Cardinal JWT missing or malformed. Please check your setup configuration.\",\n  },\n  THREEDS_CARDINAL_SDK_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_CARDINAL_SDK_ERROR\",\n    message:\n      \"A general error has occurred with Cardinal. See description for more information.\",\n  },\n  THREEDS_CARDINAL_SDK_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"THREEDS_CARDINAL_SDK_CANCELED\",\n    message: \"Canceled by user.\",\n  },\n  THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_VERIFY_CARD_CANCELED_BY_MERCHANT\",\n    message: \"3D Secure verfication canceled by merchant.\",\n  },\n  THREEDS_AUTHENTICATION_IN_PROGRESS: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_AUTHENTICATION_IN_PROGRESS\",\n    message:\n      \"Cannot call verifyCard while existing authentication is in progress.\",\n  },\n  THREEDS_MISSING_VERIFY_CARD_OPTION: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_MISSING_VERIFY_CARD_OPTION\",\n  },\n  THREEDS_JWT_AUTHENTICATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_JWT_AUTHENTICATION_FAILED\",\n    message: \"Something went wrong authenticating the JWT from Cardinal\",\n  },\n  THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_LOOKUP_TOKENIZED_CARD_NOT_FOUND_ERROR\",\n    message:\n      \"Either the payment method nonce passed to `verifyCard` does not exist, or it was already consumed\",\n  },\n  THREEDS_LOOKUP_VALIDATION_ERROR: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"THREEDS_LOOKUP_VALIDATION_ERROR\",\n    message:\n      \"The data passed in `verifyCard` did not pass validation checks. See details for more info\",\n  },\n  THREEDS_LOOKUP_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_LOOKUP_ERROR\",\n    message: \"Something went wrong during the 3D Secure lookup\",\n  },\n  THREEDS_INLINE_IFRAME_DETAILS_INCORRECT: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"THREEDS_INLINE_IFRAME_DETAILS_INCORRECT\",\n    message:\n      \"Something went wrong when attempting to add the authentication iframe to the page.\",\n  },\n  THREEDS_NO_VERIFICATION_PAYLOAD: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"THREEDS_NO_VERIFICATION_PAYLOAD\",\n    message: \"No verification payload available.\",\n  },\n  THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"THREEDS_TERM_URL_REQUIRES_BRAINTREE_DOMAIN\",\n    message: \"Term Url must be on a Braintree domain.\",\n  },\n  THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED: {\n    type: BraintreeError.types.INTERNAL,\n    code: \"THREEDS_FRAMEWORK_METHOD_NOT_IMPLEMENTED\",\n    message: \"Method not implemented for this framework.\",\n  },\n};\n\n},{\"../../lib/braintree-error\":99}],152:[function(require,module,exports){\n\"use strict\";\n\nvar enumerate = require(\"../../lib/enumerate\");\n\nmodule.exports = enumerate([\"AUTHENTICATION_COMPLETE\"], \"threedsecure:\");\n\n},{\"../../lib/enumerate\":108}],153:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Vault Manager - deletePaymentMethod Error Codes\n * @description Errors that occur when using the [`deletePaymentMethod` method](./VaultManager.html#deletePaymentMethod).\n * @property {MERCHANT} VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN Occurs when vault manager is initialized with a tokenization key instead of a Client Token.\n * @property {MERCHANT} VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND Occurs when the specified payment method can not be found.\n * @property {UNKNOWN} VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR Occurs when there is an error attempting to delete the payment method.\n */\n\nvar BraintreeError = require(\"../lib/braintree-error\");\n\nmodule.exports = {\n  VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN\",\n    message:\n      \"A client token with a customer id must be used to delete a payment method nonce.\",\n  },\n  VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND\",\n  },\n  VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR\",\n  },\n};\n\n},{\"../lib/braintree-error\":99}],154:[function(require,module,exports){\n\"use strict\";\n/**\n * @module braintree-web/vault-manager\n * @description Manages customer's payment methods.\n */\n\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar VaultManager = require(\"./vault-manager\");\nvar VERSION = \"3.88.3\";\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {callback} callback The second argument, `data`, is the {@link VaultManager} instance.\n * @returns {void}\n */\nfunction create(options) {\n  var name = \"Vault Manager\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      return new VaultManager({\n        createPromise: createDeferredClient.create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        }),\n      });\n    });\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/basic-component-verification\":97,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"./vault-manager\":155,\"@braintree/wrap-promise\":51}],155:[function(require,module,exports){\n\"use strict\";\n\nvar analytics = require(\"../lib/analytics\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar errors = require(\"./errors\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar methods = require(\"../lib/methods\");\nvar Promise = require(\"../lib/promise\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\n\nvar DELETE_PAYMENT_METHOD_MUTATION =\n  \"mutation DeletePaymentMethodFromSingleUseToken($input: DeletePaymentMethodFromSingleUseTokenInput!) {\" +\n  \"  deletePaymentMethodFromSingleUseToken(input: $input) {\" +\n  \"    clientMutationId\" +\n  \"  }\" +\n  \"}\";\n\n/**\n * @typedef {array} VaultManager~fetchPaymentMethodsPayload The customer's payment methods.\n * @property {object} paymentMethod The payment method object.\n * @property {string} paymentMethod.nonce A nonce that can be sent to your server to transact on the payment method.\n * @property {boolean} paymentMethod.default Whether or not this is the default payment method for the customer.\n * @property {object} paymentMethod.details Any additional details about the payment method. Varies depending on the type of payment method.\n * @property {string} paymentMethod.type A constant indicating the type of payment method.\n * @property {?string} paymentMethod.description Additional description about the payment method.\n * @property {?object} paymentMethod.binData Bin data about the payment method.\n *\n */\n\n/**\n * @class\n * @param {object} options Options\n * @description <strong>You cannot use this constructor directly. Use {@link module:braintree-web/vault-manager.create|braintree.vault-manager.create} instead.</strong>\n * @classdesc This class allows you to manage a customer's payment methods on the client.\n */\nfunction VaultManager(options) {\n  this._createPromise = options.createPromise;\n}\n\n/**\n * Fetches payment methods owned by the customer whose id was used to generate the client token used to create the {@link module:braintree-web/client|client}.\n * @public\n * @param {object} [options] Options for fetching payment methods.\n * @param {boolean} [options.defaultFirst = false] If `true`, the payment methods will be returned with the default payment method for the customer first. Otherwise, order is not guaranteed.\n * @param {callback} [callback] The second argument is a {@link VaultManager~fetchPaymentMethodsPayload|fetchPaymentMethodsPayload}. This is also what is resolved by the promise if no callback is provided.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * vaultManagerInstance.fetchPaymentMethods(function (err, paymentMethods) {\n *   paymentMethods.forEach(function (paymentMethod) {\n *     // add payment method to UI\n *     // paymentMethod.nonce <- transactable nonce associated with payment method\n *     // paymentMethod.details <- object with additional information about payment method\n *     // paymentMethod.type <- a constant signifying the type\n *   });\n * });\n */\nVaultManager.prototype.fetchPaymentMethods = function (options) {\n  var defaultFirst;\n\n  options = options || {};\n\n  defaultFirst = options.defaultFirst === true ? 1 : 0;\n\n  return this._createPromise\n    .then(function (client) {\n      return client.request({\n        endpoint: \"payment_methods\",\n        method: \"get\",\n        data: {\n          defaultFirst: defaultFirst,\n        },\n      });\n    })\n    .then(\n      function (paymentMethodsPayload) {\n        analytics.sendEvent(\n          this._createPromise,\n          \"vault-manager.fetch-payment-methods.succeeded\"\n        );\n\n        return paymentMethodsPayload.paymentMethods.map(\n          formatPaymentMethodPayload\n        );\n      }.bind(this)\n    );\n};\n\n// TODO hide from jsdoc for now until the GraphQL API is on for all merchants by default\n/**\n * Deletes a payment method owned by the customer whose id was used to generate the client token used to create the {@link module:braintree-web/client|client}.\n * @public\n * @ignore\n * @param {string} paymentMethodNonce The payment method nonce that references a vaulted payment method.\n * @param {callback} [callback] No data is returned if the operation is successful.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * vaultManagerInstance.deletePaymentMethod('nonce-to-delete', function (err) {\n *   // handle err if it exists\n * });\n */\nVaultManager.prototype.deletePaymentMethod = function (paymentMethodNonce) {\n  return this._createPromise.then(function (client) {\n    var usesClientToken =\n      client.getConfiguration().authorizationType === \"CLIENT_TOKEN\";\n\n    if (!usesClientToken) {\n      return Promise.reject(\n        new BraintreeError(\n          errors.VAULT_MANAGER_DELETE_PAYMENT_METHOD_NONCE_REQUIRES_CLIENT_TOKEN\n        )\n      );\n    }\n\n    return client\n      .request({\n        api: \"graphQLApi\",\n        data: {\n          query: DELETE_PAYMENT_METHOD_MUTATION,\n          variables: {\n            input: {\n              singleUseTokenId: paymentMethodNonce,\n            },\n          },\n          operationName: \"DeletePaymentMethodFromSingleUseToken\",\n        },\n      })\n      .then(function () {\n        analytics.sendEvent(\n          client,\n          \"vault-manager.delete-payment-method.succeeded\"\n        );\n\n        // noop to prevent sending back the raw graphql data\n      })\n      .catch(function (error) {\n        var originalError = error.details.originalError;\n        var formattedError;\n\n        analytics.sendEvent(\n          client,\n          \"vault-manager.delete-payment-method.failed\"\n        );\n\n        if (\n          originalError[0] &&\n          originalError[0].extensions.errorClass === \"NOT_FOUND\"\n        ) {\n          formattedError = new BraintreeError({\n            type: errors.VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND.type,\n            code: errors.VAULT_MANAGER_PAYMENT_METHOD_NONCE_NOT_FOUND.code,\n            message:\n              \"A payment method for payment method nonce `\" +\n              paymentMethodNonce +\n              \"` could not be found.\",\n            details: {\n              originalError: originalError,\n            },\n          });\n        }\n\n        if (!formattedError) {\n          formattedError = new BraintreeError({\n            type: errors.VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR.type,\n            code: errors.VAULT_MANAGER_DELETE_PAYMENT_METHOD_UNKNOWN_ERROR.code,\n            message:\n              \"An unknown error occured when attempting to delete the payment method assocaited with the payment method nonce `\" +\n              paymentMethodNonce +\n              \"`.\",\n            details: {\n              originalError: originalError,\n            },\n          });\n        }\n\n        return Promise.reject(formattedError);\n      });\n  });\n};\n\nfunction formatPaymentMethodPayload(paymentMethod) {\n  var formattedPaymentMethod = {\n    nonce: paymentMethod.nonce,\n    default: paymentMethod.default,\n    details: paymentMethod.details,\n    hasSubscription: paymentMethod.hasSubscription,\n    type: paymentMethod.type,\n  };\n\n  if (paymentMethod.description) {\n    formattedPaymentMethod.description = paymentMethod.description;\n  }\n\n  if (paymentMethod.binData) {\n    formattedPaymentMethod.binData = paymentMethod.binData;\n  }\n\n  return formattedPaymentMethod;\n}\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/vault-manager.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * vaultManagerInstance.teardown();\n * @example <caption>With callback</caption>\n * vaultManagerInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nVaultManager.prototype.teardown = function () {\n  convertMethodsToError(this, methods(VaultManager.prototype));\n\n  return Promise.resolve();\n};\n\nmodule.exports = wrapPromise.wrapPrototype(VaultManager);\n\n},{\"../lib/analytics\":94,\"../lib/braintree-error\":99,\"../lib/convert-methods-to-error\":101,\"../lib/methods\":129,\"../lib/promise\":131,\"./errors\":153,\"@braintree/wrap-promise\":51}],156:[function(require,module,exports){\n\"use strict\";\nvar __importDefault =\n  (this && this.__importDefault) ||\n  function (mod) {\n    return mod && mod.__esModule ? mod : { default: mod };\n  };\nvar venmo_desktop_1 = __importDefault(require(\"./venmo-desktop\"));\nmodule.exports = function createVenmoDesktop(options) {\n  var instance = new venmo_desktop_1.default(options);\n  return instance.initialize();\n};\n\n},{\"./venmo-desktop\":158}],157:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  exports.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  exports.UPDATE_PAYMENT_CONTEXT_QUERY =\n  exports.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY =\n  exports.CREATE_PAYMENT_CONTEXT_QUERY =\n  exports.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY =\n    void 0;\nexports.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation CreateVenmoQRCodePaymentContext($input: CreateVenmoQRCodePaymentContextInput!) {\\n  createVenmoQRCodePaymentContext(input: $input) {\\n    clientMutationId\\n    venmoQRCodePaymentContext {\\n      id\\n      merchantId\\n      createdAt\\n      expiresAt\\n    }\\n  }\\n}\";\nexports.CREATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation CreateVenmoPaymentContext($input: CreateVenmoPaymentContextInput!) {\\n  createVenmoPaymentContext(input: $input) {\\n    clientMutationId\\n    venmoPaymentContext {\\n      id\\n      merchantId\\n      createdAt\\n      expiresAt\\n    }\\n  }\\n}\";\nexports.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation UpdateVenmoQRCodePaymentContext($input: UpdateVenmoQRCodePaymentContextInput!) {\\n  updateVenmoQRCodePaymentContext(input: $input) {\\n    clientMutationId\\n  }\\n}\";\nexports.UPDATE_PAYMENT_CONTEXT_QUERY =\n  \"mutation UpdateVenmoPaymentContextStatus($input: UpdateVenmoPaymentContextStatusInput!) {\\n  updateVenmoPaymentContextStatus(input: $input) {\\n    clientMutationId\\n  }\\n}\";\nexports.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  \"query PaymentContext($id: ID!) {\\n  node(id: $id) {\\n    ... on VenmoQRCodePaymentContext {\\n      status\\n      paymentMethodId\\n      userName\\n    }\\n  }\\n}\";\nexports.VENMO_PAYMENT_CONTEXT_STATUS_QUERY =\n  \"query PaymentContext($id: ID!) {\\n  node(id: $id) {\\n    ... on VenmoPaymentContext {\\n      status\\n      paymentMethodId\\n      userName\\n      payerInfo {\\n        firstName\\n        lastName\\n        phoneNumber\\n        email\\n        externalId\\n        userName\\n      }\\n    }\\n  }\\n}\";\n\n},{}],158:[function(require,module,exports){\n\"use strict\";\nvar __assign =\n  (this && this.__assign) ||\n  function () {\n    __assign =\n      Object.assign ||\n      function (t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s)\n            if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n        }\n        return t;\n      };\n    return __assign.apply(this, arguments);\n  };\nvar __importDefault =\n  (this && this.__importDefault) ||\n  function (mod) {\n    return mod && mod.__esModule ? mod : { default: mod };\n  };\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar framebus_1 = __importDefault(require(\"framebus\"));\nvar iframer_1 = __importDefault(require(\"@braintree/iframer\"));\nvar uuid_1 = __importDefault(require(\"@braintree/uuid\"));\nvar events_1 = require(\"../shared/events\");\nvar queries_1 = require(\"./queries\");\nvar VENMO_DESKTOP_POLLING_INTERVAL = 1000; // 1 second\nvar VISUAL_DELAY_BEFORE_SIGNALLING_COMPLETION = 2000; // 2 seconds\nvar VenmoDesktop = /** @class */ (function () {\n  function VenmoDesktop(options) {\n    this.isHidden = true;\n    this.env = options.environment;\n    this.id = uuid_1.default();\n    this.profileId = options.profileId;\n    this.displayName = options.displayName;\n    this.paymentMethodUsage = options.paymentMethodUsage;\n    this.shouldUseLegacyQRCodeMutation = !this.paymentMethodUsage;\n    var frameUrl = options.url + \"#\" + this.env + \"_\" + this.id;\n    this.bus = new framebus_1.default({\n      channel: this.id,\n      verifyDomain: options.verifyDomain,\n    });\n    this.apiRequest = options.apiRequest;\n    this.sendEvent = options.sendEvent;\n    this.Promise = options.Promise;\n    this.alertBox = document.createElement(\"div\");\n    this.alertBox.setAttribute(\"data-venmo-desktop-id\", this.id);\n    this.alertBox.setAttribute(\"role\", \"alert\");\n    this.alertBox.style.position = \"fixed\";\n    this.alertBox.style.display = \"none\";\n    this.alertBox.style.height = \"1px\";\n    this.alertBox.style.width = \"1px\";\n    this.alertBox.style.overflow = \"hidden\";\n    this.alertBox.style.zIndex = \"0\";\n    this.iframe = iframer_1.default({\n      src: frameUrl,\n      name: \"venmo-desktop-iframe\",\n      style: {\n        display: \"none\",\n        position: \"fixed\",\n        top: \"0\",\n        bottom: \"0\",\n        right: \"0\",\n        left: \"0\",\n        height: \"100%\",\n        width: \"100%\",\n        zIndex: \"9999999\",\n      },\n      title: \"Venmo Desktop\",\n    });\n  }\n  VenmoDesktop.prototype.initialize = function () {\n    var _this = this;\n    return new this.Promise(function (resolve) {\n      _this.bus.on(events_1.VENMO_DESKTOP_IFRAME_READY, function () {\n        resolve(_this);\n      });\n      _this.bus.on(events_1.VENMO_DESKTOP_REQUEST_NEW_QR_CODE, function () {\n        _this.sendEvent(\"venmo.tokenize.desktop.restarted-from-error-view\");\n        _this.startPolling();\n      });\n      document.body.appendChild(_this.iframe);\n      document.body.appendChild(_this.alertBox);\n    });\n  };\n  VenmoDesktop.prototype.launchDesktopFlow = function () {\n    var _this = this;\n    this.isHidden = false;\n    var promise = new this.Promise(function (resolve, reject) {\n      _this.launchDesktopPromiseRejectFunction = reject;\n      var removeListeners = function () {\n        /* eslint-disable @typescript-eslint/no-use-before-define */\n        _this.bus.off(\n          events_1.VENMO_DESKTOP_CUSTOMER_CANCELED,\n          customerCancelledHandler\n        );\n        _this.bus.off(\n          events_1.VENMO_DESKTOP_AUTHORIZATION_COMPLETED,\n          completedHandler\n        );\n        _this.bus.off(\n          events_1.VENMO_DESKTOP_UNKNOWN_ERROR,\n          unknownErrorHandler\n        );\n        /* eslint-enable @typescript-eslint/no-use-before-define */\n      };\n      var unknownErrorHandler = function (err) {\n        removeListeners();\n        _this.sendEvent(\"venmo.tokenize.desktop.unknown-error\");\n        reject({\n          allowUIToHandleError: false,\n          reason: \"UNKNOWN_ERROR\",\n          err: err,\n        });\n      };\n      var customerCancelledHandler = function () {\n        removeListeners();\n        _this.updateVenmoDesktopPaymentContext(\"CANCELED\");\n        _this.sendEvent(\n          \"venmo.tokenize.desktop.status-change.canceled-from-modal\"\n        );\n        reject({\n          allowUIToHandleError: false,\n          reason: \"CUSTOMER_CANCELED\",\n        });\n      };\n      var completedHandler = function (payload) {\n        removeListeners();\n        resolve(payload);\n      };\n      _this.bus.on(\n        events_1.VENMO_DESKTOP_CUSTOMER_CANCELED,\n        customerCancelledHandler\n      );\n      _this.bus.on(\n        events_1.VENMO_DESKTOP_AUTHORIZATION_COMPLETED,\n        completedHandler\n      );\n      _this.bus.on(events_1.VENMO_DESKTOP_UNKNOWN_ERROR, unknownErrorHandler);\n    });\n    this.iframe.style.display = \"block\";\n    this.setAlert(\"Generating a QR code, get your Venmo app ready\");\n    this.iframe.focus();\n    this.startPolling();\n    return promise\n      .then(function (result) {\n        delete _this.venmoContextId;\n        delete _this.launchDesktopPromiseRejectFunction;\n        return result;\n      })\n      .catch(function (err) {\n        delete _this.venmoContextId;\n        delete _this.launchDesktopPromiseRejectFunction;\n        return _this.Promise.reject(err);\n      });\n  };\n  VenmoDesktop.prototype.triggerCompleted = function (result) {\n    var _this = this;\n    if (this.isHidden) {\n      return;\n    }\n    setTimeout(function () {\n      _this.bus.emit(events_1.VENMO_DESKTOP_AUTHORIZATION_COMPLETED, result);\n    }, VISUAL_DELAY_BEFORE_SIGNALLING_COMPLETION);\n  };\n  VenmoDesktop.prototype.triggerRejected = function (err) {\n    if (this.launchDesktopPromiseRejectFunction) {\n      this.launchDesktopPromiseRejectFunction(err);\n    }\n  };\n  VenmoDesktop.prototype.hideDesktopFlow = function () {\n    this.setAlert(\"\");\n    this.iframe.style.display = \"none\";\n    this.bus.emit(events_1.VENMO_DESKTOP_CLOSED_FROM_PARENT);\n    this.isHidden = true;\n  };\n  VenmoDesktop.prototype.displayError = function (message) {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_DISPLAY_ERROR, {\n      message: message,\n    });\n    this.setAlert(message);\n  };\n  VenmoDesktop.prototype.displayQRCode = function (id, merchantId) {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_DISPLAY_QR_CODE, {\n      id: id,\n      merchantId: merchantId,\n    });\n    this.setAlert(\"To scan the QR code, open your Venmo app\");\n  };\n  VenmoDesktop.prototype.authorize = function () {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_AUTHORIZE);\n    this.setAlert(\"Venmo account authorized\");\n  };\n  VenmoDesktop.prototype.authorizing = function () {\n    if (this.isHidden) {\n      return;\n    }\n    this.bus.emit(events_1.VENMO_DESKTOP_AUTHORIZING);\n    this.setAlert(\"Authorize on your Venmo app\");\n  };\n  VenmoDesktop.prototype.startPolling = function () {\n    var _this = this;\n    return this.createVenmoDesktopPaymentContext()\n      .then(function (result) {\n        var expiresIn =\n          new Date(result.expiresAt).getTime() -\n          new Date(result.createdAt).getTime();\n        var expiredTime = Date.now() + expiresIn;\n        _this.displayQRCode(result.id, result.merchantId);\n        return _this.pollForStatusChange(result.status, expiredTime);\n      })\n      .then(function (result) {\n        if (!result) {\n          return;\n        }\n        // since we are manually adding a prepended @ sign\n        // we want to make sure that the username does not\n        // start giving us the @ sign up front in the future\n        var username = result.userName || \"\";\n        username = \"@\" + username.replace(\"@\", \"\");\n        _this.triggerCompleted({\n          paymentMethodNonce: result.paymentMethodId,\n          username: username,\n          payerInfo: result.payerInfo,\n          id: _this.venmoContextId || \"\",\n        });\n      })\n      .catch(function (err) {\n        if (err.allowUIToHandleError) {\n          // noop here and let the UI handle the customer error\n          return;\n        }\n        _this.sendEvent(\"venmo.tokenize.desktop.unhandled-error\");\n        _this.triggerRejected(err);\n      });\n  };\n  VenmoDesktop.prototype.pollForStatusChange = function (status, expiredTime) {\n    var _this = this;\n    if (!this.venmoContextId) {\n      return this.Promise.resolve();\n    }\n    if (Date.now() > expiredTime) {\n      return this.updateVenmoDesktopPaymentContext(\"EXPIRED\").then(function () {\n        _this.displayError(\"Something went wrong\");\n        _this.sendEvent(\"venmo.tokenize.desktop.status-change.sdk-timeout\");\n        return _this.Promise.reject({\n          allowUIToHandleError: true,\n          reason: \"TIMEOUT\",\n        });\n      });\n    }\n    return this.lookupVenmoDesktopPaymentContext().then(function (response) {\n      if (!_this.venmoContextId || !response) {\n        return _this.Promise.resolve();\n      }\n      var newStatus = response.status;\n      if (newStatus !== status) {\n        status = newStatus;\n        _this.sendEvent(\n          \"venmo.tokenize.desktop.status-change.\" + status.toLowerCase()\n        );\n        switch (status) {\n          case \"CREATED\":\n            // noop, no need to do anything here\n            // should never be able to get to this point\n            // but we'll keep it in to enumerate the statuses\n            break;\n          case \"EXPIRED\":\n          case \"FAILED\":\n          case \"CANCELED\":\n            var message =\n              status === \"CANCELED\"\n                ? \"The authorization was canceled\"\n                : \"Something went wrong\";\n            _this.displayError(message);\n            // these are all terminal states, so we end it here\n            return _this.Promise.reject({\n              allowUIToHandleError: true,\n              reason: status,\n            });\n          case \"SCANNED\":\n            _this.authorizing();\n            break;\n          case \"APPROVED\":\n            _this.authorize();\n            return _this.Promise.resolve(response);\n          default:\n          // any other statuses are irrelevant to the polling\n          // and can just be ignored\n        }\n      }\n      return new _this.Promise(function (resolve, reject) {\n        setTimeout(function () {\n          _this\n            .pollForStatusChange(status, expiredTime)\n            .then(resolve)\n            .catch(reject);\n        }, VENMO_DESKTOP_POLLING_INTERVAL);\n      });\n    });\n  };\n  VenmoDesktop.prototype.teardown = function () {\n    this.bus.teardown();\n    if (this.iframe.parentNode) {\n      this.iframe.parentNode.removeChild(this.iframe);\n    }\n    if (this.alertBox.parentNode) {\n      this.alertBox.parentNode.removeChild(this.alertBox);\n    }\n  };\n  VenmoDesktop.prototype.setAlert = function (message) {\n    this.alertBox.style.display = message ? \"block\" : \"none\";\n    this.alertBox.textContent = message;\n  };\n  VenmoDesktop.prototype.createPaymentContextFromGraphqlLegacyQRCodeMutation =\n    function (intent) {\n      return this.apiRequest(queries_1.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY, {\n        input: {\n          environment: this.env,\n          intent: intent,\n        },\n      }).then(function (response) {\n        return response\n          .createVenmoQRCodePaymentContext.venmoQRCodePaymentContext;\n      });\n    };\n  VenmoDesktop.prototype.createPaymentContextFromGraphQL = function (intent) {\n    var input = {\n      intent: intent,\n      paymentMethodUsage: this.paymentMethodUsage,\n      customerClient: \"DESKTOP\",\n    };\n    if (this.profileId) {\n      input.merchantProfileId = this.profileId;\n    }\n    if (this.displayName) {\n      input.displayName = this.displayName;\n    }\n    return this.apiRequest(queries_1.CREATE_PAYMENT_CONTEXT_QUERY, {\n      input: input,\n    }).then(function (response) {\n      return response.createVenmoPaymentContext.venmoPaymentContext;\n    });\n  };\n  VenmoDesktop.prototype.createVenmoDesktopPaymentContext = function () {\n    var _this = this;\n    var contextPromise = this.shouldUseLegacyQRCodeMutation\n      ? this.createPaymentContextFromGraphqlLegacyQRCodeMutation(\"PAY_FROM_APP\")\n      : this.createPaymentContextFromGraphQL(\"PAY_FROM_APP\");\n    return contextPromise.then(function (context) {\n      _this.venmoContextId = context.id;\n      var merchantId = _this.profileId || context.merchantId;\n      return {\n        id: context.id,\n        status: context.status,\n        merchantId: merchantId,\n        createdAt: context.createdAt,\n        expiresAt: context.expiresAt,\n      };\n    });\n  };\n  VenmoDesktop.prototype.updateVenmoDesktopPaymentContext = function (\n    status,\n    additionalOptions\n  ) {\n    if (additionalOptions === void 0) {\n      additionalOptions = {};\n    }\n    if (!this.venmoContextId) {\n      return this.Promise.resolve();\n    }\n    var data = {\n      input: __assign(\n        { id: this.venmoContextId, status: status },\n        additionalOptions\n      ),\n    };\n    var query = this.shouldUseLegacyQRCodeMutation\n      ? queries_1.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY\n      : queries_1.UPDATE_PAYMENT_CONTEXT_QUERY;\n    return this.apiRequest(query, data).then(function () {\n      // noop so we can resolve without any data to match the type\n    });\n  };\n  VenmoDesktop.prototype.lookupVenmoDesktopPaymentContext = function () {\n    if (!this.venmoContextId) {\n      return this.Promise.resolve();\n    }\n    var query = this.shouldUseLegacyQRCodeMutation\n      ? queries_1.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY\n      : queries_1.VENMO_PAYMENT_CONTEXT_STATUS_QUERY;\n    return this.apiRequest(query, {\n      id: this.venmoContextId,\n    }).then(function (response) {\n      return response.node;\n    });\n  };\n  return VenmoDesktop;\n})();\nexports.default = VenmoDesktop;\n\n},{\"../shared/events\":163,\"./queries\":157,\"@braintree/iframer\":43,\"@braintree/uuid\":47,\"framebus\":176}],159:[function(require,module,exports){\n\"use strict\";\n/** @module braintree-web/venmo */\n\nvar analytics = require(\"../lib/analytics\");\nvar basicComponentVerification = require(\"../lib/basic-component-verification\");\nvar createDeferredClient = require(\"../lib/create-deferred-client\");\nvar createAssetsUrl = require(\"../lib/create-assets-url\");\nvar errors = require(\"./shared/errors\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar Venmo = require(\"./venmo\");\nvar Promise = require(\"../lib/promise\");\nvar supportsVenmo = require(\"./shared/supports-venmo\");\nvar VERSION = \"3.88.3\";\n\n/**\n * @static\n * @function create\n * @param {object} options Creation options:\n * @param {Client} [options.client] A {@link Client} instance.\n * @param {string} [options.authorization] A tokenizationKey or clientToken. Can be used in place of `options.client`.\n * @param {boolean} [options.allowNewBrowserTab=true] This should be set to false if your payment flow requires returning to the same tab, e.g. single page applications. Doing so causes {@link Venmo#isBrowserSupported|isBrowserSupported} to return true only for mobile web browsers that support returning from the Venmo app to the same tab.\n * @param {boolean} [options.allowWebviews=true] This should be set to false if your payment flow does not occur from within a webview that you control. Doing so causes {@link Venmo#isBrowserSupported|isBrowserSupported} to return true only for mobile web browsers that are not webviews.\n * @param {boolean} [options.ignoreHistoryChanges=false] When the Venmo app returns to the website, it will modify the hash of the url to include data about the tokenization. By default, the SDK will put the state of the hash back to where it was before the change was made. Pass `true` to handle the hash change instead of the SDK.\n * @param {string} [options.profileId] The Venmo profile ID to be used during payment authorization. Customers will see the business name and logo associated with this Venmo profile, and it will show up in the Venmo app as a \"Connected Merchant\". Venmo profile IDs can be found in the Braintree Control Panel. Omitting this value will use the default Venmo profile.\n * @param {string} [options.deepLinkReturnUrl] An override for the URL that the Venmo iOS app opens to return from an app switch.\n * @param {boolean} [options.requireManualReturn=false] When `true`, the customer will have to manually switch back to the browser/webview that is presenting Venmo to complete the payment.\n * @param {boolean} [options.useRedirectForIOS=false] Normally, the Venmo flow is launched using `window.open` and the Venmo app intercepts that call and opens the Venmo app instead. If the customer does not have the Venmo app installed, it opens the Venmo website in a new window and instructs the customer to install the app.\n \n * In iOS webviews and Safari View Controllers (a webview-like environment which is indistinguishable from Safari for JavaScript environments), this call to `window.open` will always fail to app switch to Venmo, resulting instead in a white screen. Because of this, an alternate approach is required to launch the Venmo flow.\n *\n * When `useRedirectForIOS` is `true` and the Venmo flow is started in an iOS environment, the Venmo flow will be started by setting `window.location.href` to the Venmo website (which will still be intercepted by the Venmo app and should be the same behavior as if `window.open` was called). However, if the customer does not have the Venmo app installed, the merchant page will instead be replaced with the Venmo website and the customer will need to use the browser's back button to return to the merchant's website. Ensure that your customer's checkout information will not be lost if they are navigated away from the website and return using the browser back button.\n *\n * Due to a bug in iOS's implementation of `window.open` in iOS webviews and Safari View Controllers, if `useRedirectForIOS` is not set to `true` and the flow is launched from an iOS webview or Safari View Controller, the customer will be presented with a blank screen, halting the flow and leaving the customer unable to return to the merchant's website. Setting `useRedirectForIOS` to `true` will allow the flow to continue, but the Venmo app will be unable to return back to the webview/Safari View Controller. It will instead open the merchant's site in a new window in the customer's browser, which means the merchant site must be able to process the Venmo payment. If the SDK is configured with `allowNewBrowserTab = false`, it is unlikely that the website is set up to process the Venmo payment from a new window.\n *\n * If processing the payment from a new window is not possible, use this flag in conjunction with `requireManualReturn` so that the customer may start the flow from a webview/Safari View Controller or their Safari browser and manually return to the place that originated the flow once the Venmo app has authorized the payment and instructed them to do so.\n * @param {string} [options.paymentMethodUsage] The intended usage for the Venmo payment method nonce. Possible options are:\n * * single_use - intended as a one time transaction\n * * multi_use - intended to be vaulted and used for multiple transactions\n * @param {string} [options.displayName] The business name that will be displayed in the Venmo app payment approval screen. Only applicable when used with `paymentMethodUsage` and used by merchants onboarded as PayFast channel partners.\n * @param {boolean} [options.allowDesktop] Used to support desktop users. When enabled, the default mode is to render a scannable QR-code customers scan with their phone's to approve via the mobile app.\n * @param {boolean} [options.allowDesktopWebLogin=false] When `true`, the customer will authorize payment via a window popup that allows them to sign in to their Venmo account. This is used explicitly for customers operating from desktop browsers wanting to avoid the QR Code flow.\n * @param {boolean} [options.mobileWebFallBack] Use this option when you want to use a web-login experience, such as if on mobile and the Venmo app isn't installed.\n * @param {boolean} [options.allowAndroidRecreation=true] This flag is for when your integration uses the [Android PopupBridge](https://github.com/braintree/popup-bridge-android). Setting this flag to false will avoid a page refresh when returning to your page after payment authorization. If not specified, it defaults to true and the Android activity will be recreated, resulting in a page refresh.\n *\n * Note: This flow currently requires a full page redirect, which means to utilize this flow your page will need to be able to handle the checkout session across different pages.\n * @param {callback} [callback] The second argument, `data`, is the {@link Venmo} instance. If no callback is provided, `create` returns a promise that resolves with the {@link Venmo} instance.\n * @example\n * braintree.venmo.create({\n *   client: clientInstance\n * }).then(function (venmoInstance) {\n *   // venmoInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating Venmo instance', createErr);\n * });\n * @example <caption>Allow desktop flow to be used</caption>\n * braintree.venmo.create({\n *   client: clientInstance,\n *   allowDesktop: true\n * }).then(function (venmoInstance) {\n *   // venmoInstance is ready to be used.\n * }).catch(function (createErr) {\n *   console.error('Error creating Venmo instance', createErr);\n * });\n * @returns {(Promise|void)} Returns the Venmo instance.\n */\nfunction create(options) {\n  var name = \"Venmo\";\n\n  return basicComponentVerification\n    .verify({\n      name: name,\n      client: options.client,\n      authorization: options.authorization,\n    })\n    .then(function () {\n      var createPromise, instance;\n\n      if (options.profileId && typeof options.profileId !== \"string\") {\n        return Promise.reject(\n          new BraintreeError(errors.VENMO_INVALID_PROFILE_ID)\n        );\n      }\n\n      if (\n        options.deepLinkReturnUrl &&\n        typeof options.deepLinkReturnUrl !== \"string\"\n      ) {\n        return Promise.reject(\n          new BraintreeError(errors.VENMO_INVALID_DEEP_LINK_RETURN_URL)\n        );\n      }\n\n      createPromise = createDeferredClient\n        .create({\n          authorization: options.authorization,\n          client: options.client,\n          debug: options.debug,\n          assetsUrl: createAssetsUrl.create(options.authorization),\n          name: name,\n        })\n        .then(function (client) {\n          var configuration = client.getConfiguration();\n\n          options.client = client;\n\n          if (!configuration.gatewayConfiguration.payWithVenmo) {\n            return Promise.reject(new BraintreeError(errors.VENMO_NOT_ENABLED));\n          }\n\n          return client;\n        });\n\n      options.createPromise = createPromise;\n      instance = new Venmo(options);\n\n      analytics.sendEvent(createPromise, \"venmo.initialized\");\n\n      return createPromise.then(function () {\n        return instance;\n      });\n    });\n}\n\n/**\n * @static\n * @function isBrowserSupported\n * @param {object} [options] browser support options:\n * @param {boolean} [options.allowNewBrowserTab=true] This should be set to false if your payment flow requires returning to the same tab, e.g. single page applications.\n * @param {boolean} [options.allowWebviews=true] This should be set to false if your payment flow does not occur from within a webview that you control.\n * @example\n * if (braintree.venmo.isBrowserSupported()) {\n *   // set up Venmo\n * }\n * @example <caption>Explicitly require browser support returning to the same tab</caption>\n * if (braintree.venmo.isBrowserSupported({\n *   allowNewBrowserTab: false\n * })) {\n *   // set up Venmo\n * }\n * @example <caption>Explicitly set webviews as disallowed browsers</caption>\n * if (braintree.venmo.isBrowserSupported({\n *   allowWebviews: false\n * })) {\n *   // set up Venmo\n * }\n * @returns {boolean} Whether or not the browser supports Venmo.\n */\nfunction isBrowserSupported(options) {\n  return supportsVenmo.isBrowserSupported(options);\n}\n\nmodule.exports = {\n  create: wrapPromise(create),\n  isBrowserSupported: isBrowserSupported,\n  /**\n   * @description The current version of the SDK, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION,\n};\n\n},{\"../lib/analytics\":94,\"../lib/basic-component-verification\":97,\"../lib/braintree-error\":99,\"../lib/create-assets-url\":103,\"../lib/create-deferred-client\":105,\"../lib/promise\":131,\"./shared/errors\":162,\"./shared/supports-venmo\":165,\"./venmo\":167,\"@braintree/wrap-promise\":51}],160:[function(require,module,exports){\n\"use strict\";\n\nvar isAndroid = require(\"@braintree/browser-detection/is-android\");\nvar isChrome = require(\"@braintree/browser-detection/is-chrome\");\nvar isIos = require(\"@braintree/browser-detection/is-ios\");\nvar isIosSafari = require(\"@braintree/browser-detection/is-ios-safari\");\nvar isIosWebview = require(\"@braintree/browser-detection/is-ios-webview\");\nvar isSamsung = require(\"@braintree/browser-detection/is-samsung\");\n\nfunction isAndroidWebview() {\n  return (\n    isAndroid() && window.navigator.userAgent.toLowerCase().indexOf(\"wv\") > -1\n  );\n}\n\nfunction doesNotSupportWindowOpenInIos() {\n  if (!isIos()) {\n    return false;\n  }\n\n  return isIosWebview() || !isIosSafari();\n}\n\nfunction isFacebookOwnedBrowserOnAndroid() {\n  var ua = window.navigator.userAgent.toLowerCase();\n\n  // Huawei's Facebook useragent does not include Android\n  if (ua.indexOf(\"huawei\") > -1 && ua.indexOf(\"fban\") > -1) {\n    return true;\n  }\n\n  if (!isAndroid()) {\n    return false;\n  }\n\n  return ua.indexOf(\"fb_iab\") > -1 || ua.indexOf(\"instagram\") > -1;\n}\n\n// iOS chrome used to work with Venmo, but now it does not\n// we are unsure if something changed in the iOS Chrome app\n// itself, or if something about iOS webviews has changed\n// until we find out more info, we've created a helper to\n// easilly turn off iOS Chrome as a supported browser in\n// the isBrowserSupported helper function\nfunction isIosChrome() {\n  return isIos() && isChrome();\n}\n\nmodule.exports = {\n  isAndroid: isAndroid,\n  isAndroidWebview: isAndroidWebview,\n  isChrome: isChrome,\n  isIos: isIos,\n  isIosChrome: isIosChrome,\n  isSamsung: isSamsung,\n  isIosSafari: isIosSafari,\n  isIosWebview: isIosWebview,\n  isFacebookOwnedBrowserOnAndroid: isFacebookOwnedBrowserOnAndroid,\n  doesNotSupportWindowOpenInIos: doesNotSupportWindowOpenInIos,\n};\n\n},{\"@braintree/browser-detection/is-android\":26,\"@braintree/browser-detection/is-chrome\":28,\"@braintree/browser-detection/is-ios\":37,\"@braintree/browser-detection/is-ios-safari\":34,\"@braintree/browser-detection/is-ios-webview\":35,\"@braintree/browser-detection/is-samsung\":38}],161:[function(require,module,exports){\n\"use strict\";\n\n/**\n * Venmo shared constants\n * @typedef {object} Venmo~venmoConstants\n * @ignore\n * @property {string} VENMO_APP_OR_MOBILE_AUTH_URL A deep-linked url that will open the Venmo app if installed, or navigate to a Venmo web-login experience if the Venmo app is not present.\n * @property {string} VENMO_MOBILE_APP_AUTH_ONLY_URL A deep-linked url that leads to a Venmo dead-end page if the Venmo app is not installed (page asks customer to download the app).\n * @property {string} VENMO_WEB_LOGIN_URL A non-deeplinked url that leads to a Venmo login page. For use when explicitly wanting to avoid using the Venmo mobile app via a deep-linked url.\n */\nmodule.exports = {\n  DOCUMENT_VISIBILITY_CHANGE_EVENT_DELAY: 500,\n  DEFAULT_PROCESS_RESULTS_DELAY: 1000,\n  VENMO_APP_OR_MOBILE_AUTH_URL: \"https://account.venmo.com/go/checkout\",\n  VENMO_MOBILE_APP_AUTH_ONLY_URL: \"https://venmo.com/braintree/checkout\",\n  VENMO_WEB_LOGIN_URL: \"https://account.venmo.com/go/web\",\n};\n\n},{}],162:[function(require,module,exports){\n\"use strict\";\n\n/**\n * @name BraintreeError.Venmo - Creation Error Codes\n * @description Errors that occur when [creating the Venmo component](./module-braintree-web_venmo.html#.create).\n * @property {MERCHANT} VENMO_NOT_ENABLED Occurs when Venmo is not enabled on the Braintree control panel.\n * @property {MERCHANT} VENMO_INVALID_PROFILE_ID Occurs when Venmo is initialized with a profile id, but it is invalid.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_SETUP_FAILED __Deprecated__ No longer returned. Use `VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED` instead.\n * @property {UNKNOWN} VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED Occurs when the request to set up a Venmo Payment Context object fails.\n */\n\n/**\n * @name BraintreeError.Venmo - tokenize Error Codes\n * @description Errors that occur when using the [`tokenize` method](./Venmo.html#tokenize).\n * @property {CUSTOMER} VENMO_APP_CANCELED Occurs when customer cancels flow from the Venmo app.\n * @property {UNKNOWN} VENMO_APP_FAILED Occurs when tokenization fails.\n * @property {CUSTOMER} VENMO_CANCELED Occurs when customer cancels the flow or Venmo app is not available.\n * @property {CUSTOMER} VENMO_CUSTOMER_CANCELED Occurs when customer cancels the flow.\n * @property {CUSTOMER} VENMO_DESKTOP_CANCELED Occurs when customer cancels the Venmo Desktop flow by closing the modal.\n * @property {UNKNOWN} VENMO_DESKTOP_UNKNOWN_ERROR Occurs when an unknown error causes the Venmo Desktop flow to fail.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR Occurs when an unknown network error causes the mobile polling process to fail.\n * @property {CUSTOMER} VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED Occurs when the polling has expired and the payment cannot be completed.\n * @property {CUSTOMER} VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED Occurs when the polling operation is canceled by the customer.\n * @property {CUSTOMER} VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT Occurs when customer takes too long to complete payment.\n * @property {UNKNOWN} VENMO_MOBILE_POLLING_TOKENIZATION_FAILED Occurs if there is an unknown error during the mobile polling process.\n * @property {NETWORK} VENMO_NETWORK_ERROR Occurs when a network error causes a request to fail.\n * @property {MERCHANT} VENMO_TOKENIZATION_CANCELED_BY_MERCHANT Occurs when `cancelTokenization` is called while tokenization is in progress.\n * @property {UNKNOWN} VENMO_TOKENIZATION_FAILED Occurs when there is an unknown error during the web login experience.\n * @property {MERCHANT} VENMO_TOKENIZATION_REQUEST_ACTIVE Occurs when `tokenize` is called when the flow is already in progress.\n * @property {MERCHANT} VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE Occurs when `cancelTokenization` is called when the flow is not in progress.\n */\n\nvar BraintreeError = require(\"../../lib/braintree-error\");\n\nmodule.exports = {\n  VENMO_NOT_ENABLED: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_NOT_ENABLED\",\n    message: \"Venmo is not enabled for this merchant.\",\n  },\n  VENMO_TOKENIZATION_REQUEST_ACTIVE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_TOKENIZATION_REQUEST_ACTIVE\",\n    message: \"Another tokenization request is active.\",\n  },\n  VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE\",\n    message: \"No tokenization in progress.\",\n  },\n  VENMO_APP_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_APP_FAILED\",\n    message: \"Venmo app encountered a problem.\",\n  },\n  VENMO_APP_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_APP_CANCELED\",\n    message: \"Venmo app authorization was canceled.\",\n  },\n  VENMO_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_CANCELED\",\n    message:\n      \"User canceled Venmo authorization, or Venmo app is not available.\",\n  },\n  VENMO_CUSTOMER_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_CUSTOMER_CANCELED\",\n    message: \"User canceled Venmo authorization.\",\n  },\n  VENMO_NETWORK_ERROR: {\n    type: BraintreeError.types.NETWORK,\n    code: \"VENMO_NETWORK_ERROR\",\n    message: \"Something went wrong making the request\",\n  },\n  VENMO_DESKTOP_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_DESKTOP_CANCELED\",\n    message:\n      \"User canceled Venmo authorization by closing the Venmo Desktop modal.\",\n  },\n  VENMO_TOKENIZATION_CANCELED_BY_MERCHANT: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_TOKENIZATION_CANCELED_BY_MERCHANT\",\n    message: \"The Venmo tokenization was canceled by the merchant.\",\n  },\n  VENMO_DESKTOP_UNKNOWN_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_DESKTOP_UNKNOWN_ERROR\",\n    message: \"Something went wrong with the Venmo Desktop flow.\",\n  },\n  VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED: {\n    type: BraintreeError.types.NETWORK,\n    code: \"VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED\",\n    message: \"Something went wrong creating the Venmo Payment Context.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR\",\n    message: \"Something went wrong during mobile polling.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_EXPIRED\",\n    message: \"The Venmo authorization request is expired.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED\",\n    message: \"The Venmo authorization was canceled\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT: {\n    type: BraintreeError.types.CUSTOMER,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT\",\n    message: \"Customer took too long to authorize Venmo payment.\",\n  },\n  VENMO_MOBILE_POLLING_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_MOBILE_POLLING_TOKENIZATION_FAILED\",\n    message: \"The Venmo authorization failed.\",\n  },\n  VENMO_INVALID_PROFILE_ID: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_INVALID_PROFILE_ID\",\n    message: \"Venmo profile ID is invalid.\",\n  },\n  VENMO_INVALID_DEEP_LINK_RETURN_URL: {\n    type: BraintreeError.types.MERCHANT,\n    code: \"VENMO_INVALID_DEEP_LINK_RETURN_URL\",\n    message: \"Venmo deep link return URL is invalid.\",\n  },\n  VENMO_TOKENIZATION_FAILED: {\n    type: BraintreeError.types.UNKNOWN,\n    code: \"VENMO_TOKENIZATION_FAILED\",\n    message: \"Venmo encountered a problem\",\n  },\n};\n\n},{\"../../lib/braintree-error\":99}],163:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VENMO_DESKTOP_UNKNOWN_ERROR =\n  exports.VENMO_DESKTOP_REQUEST_NEW_QR_CODE =\n  exports.VENMO_DESKTOP_CLOSED_FROM_PARENT =\n  exports.VENMO_DESKTOP_IFRAME_READY =\n  exports.VENMO_DESKTOP_DISPLAY_QR_CODE =\n  exports.VENMO_DESKTOP_DISPLAY_ERROR =\n  exports.VENMO_DESKTOP_CUSTOMER_CANCELED =\n  exports.VENMO_DESKTOP_AUTHORIZATION_COMPLETED =\n  exports.VENMO_DESKTOP_AUTHORIZING =\n  exports.VENMO_DESKTOP_AUTHORIZE =\n  exports.VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT =\n    void 0;\nexports.VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT =\n  \"VENMO_DESKTOP_AUTHORIZATION_TIMED_OUT\";\nexports.VENMO_DESKTOP_AUTHORIZE = \"VENMO_DESKTOP_AUTHORIZE\";\nexports.VENMO_DESKTOP_AUTHORIZING = \"VENMO_DESKTOP_AUTHORIZING\";\nexports.VENMO_DESKTOP_AUTHORIZATION_COMPLETED =\n  \"VENMO_DESKTOP_AUTHORIZATION_COMPLETED\";\nexports.VENMO_DESKTOP_CUSTOMER_CANCELED = \"VENMO_DESKTOP_CUSTOMER_CANCELED\";\nexports.VENMO_DESKTOP_DISPLAY_ERROR = \"VENMO_DESKTOP_DISPLAY_ERROR\";\nexports.VENMO_DESKTOP_DISPLAY_QR_CODE = \"VENMO_DESKTOP_DISPLAY_QR_CODE\";\nexports.VENMO_DESKTOP_IFRAME_READY = \"VENMO_DESKTOP_IFRAME_READY\";\nexports.VENMO_DESKTOP_CLOSED_FROM_PARENT = \"VENMO_DESKTOP_CLOSED_FROM_PARENT\";\nexports.VENMO_DESKTOP_REQUEST_NEW_QR_CODE = \"VENMO_DESKTOP_REQUEST_NEW_QR_CODE\";\nexports.VENMO_DESKTOP_UNKNOWN_ERROR = \"VENMO_DESKTOP_UNKNOWN_ERROR\";\n\n},{}],164:[function(require,module,exports){\n\"use strict\";\nvar venmoConstants = require(\"./constants\");\n\nfunction getVenmoUrl(options) {\n  if (options.useAllowDesktopWebLogin)\n    return venmoConstants.VENMO_WEB_LOGIN_URL;\n\n  if (options.mobileWebFallBack)\n    return venmoConstants.VENMO_APP_OR_MOBILE_AUTH_URL;\n\n  return venmoConstants.VENMO_MOBILE_APP_AUTH_ONLY_URL;\n}\n\nmodule.exports = getVenmoUrl;\n\n},{\"./constants\":161}],165:[function(require,module,exports){\n\"use strict\";\n\nvar browserDetection = require(\"./browser-detection\");\n\nfunction isBrowserSupported(options) {\n  var merchantAllowsReturningToNewBrowserTab,\n    merchantAllowsWebviews,\n    merchantAllowsDesktopBrowsers;\n  var isAndroid = browserDetection.isAndroid();\n  var isMobileDevice = isAndroid || browserDetection.isIos();\n  var isAndroidChrome = isAndroid && browserDetection.isChrome();\n  var isMobileDeviceThatSupportsReturnToSameTab =\n    browserDetection.isIosSafari() || isAndroidChrome;\n  var isKnownUnsupportedMobileBrowser =\n    browserDetection.isIosChrome() ||\n    browserDetection.isFacebookOwnedBrowserOnAndroid() ||\n    browserDetection.isSamsung();\n\n  options = options || {};\n  // NEXT_MAJOR_VERSION allowDesktop will default to true, but can be opted out\n  merchantAllowsDesktopBrowsers = options.allowDesktop === true;\n  merchantAllowsReturningToNewBrowserTab = options.hasOwnProperty(\n    \"allowNewBrowserTab\"\n  )\n    ? options.allowNewBrowserTab\n    : true;\n  // NEXT_MAJOR_VERSION webviews are not supported, except for the case where\n  // the merchant themselves is presenting venmo in a webview using the deep\n  // link url to get back to their app. For the next major version, we should\n  // just not have this option and instead require the merchant to determine\n  // if the venmo button should be displayed when presenting it in the\n  // merchant's app via a webview.\n  merchantAllowsWebviews = options.hasOwnProperty(\"allowWebviews\")\n    ? options.allowWebviews\n    : true;\n\n  if (isKnownUnsupportedMobileBrowser) {\n    return false;\n  }\n\n  if (\n    !merchantAllowsWebviews &&\n    (browserDetection.isAndroidWebview() || browserDetection.isIosWebview())\n  ) {\n    return false;\n  }\n\n  if (!isMobileDevice) {\n    return merchantAllowsDesktopBrowsers;\n  }\n\n  if (!merchantAllowsReturningToNewBrowserTab) {\n    return isMobileDeviceThatSupportsReturnToSameTab;\n  }\n\n  return isMobileDevice;\n}\n\nmodule.exports = {\n  isBrowserSupported: isBrowserSupported,\n};\n\n},{\"./browser-detection\":160}],166:[function(require,module,exports){\n\"use strict\";\n\nvar frameService = require(\"../../lib/frame-service/external\");\nvar useMin = require(\"../../lib/use-min\");\nvar Promise = require(\"../../lib/promise\");\n\nvar VERSION = \"3.88.3\";\nvar VENMO_LOGO_SVG =\n  '<svg width=\"198\" height=\"58\" viewBox=\"0 0 198 58\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M43.0702 13.6572C44.1935 15.4585 44.6999 17.3139 44.6999 19.6576C44.6999 27.1328 38.1277 36.8436 32.7935 43.6625H20.6099L15.7236 15.2939L26.3917 14.3105L28.9751 34.4966C31.389 30.6783 34.3678 24.6779 34.3678 20.587C34.3678 18.3477 33.9727 16.8225 33.3553 15.5666L43.0702 13.6572Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M56.8965 26.1491C58.8596 26.1491 63.8018 25.2772 63.8018 22.5499C63.8018 21.2402 62.8481 20.587 61.7242 20.587C59.7579 20.587 57.1776 22.8763 56.8965 26.1491ZM56.6715 31.5506C56.6715 34.8807 58.5787 36.1873 61.107 36.1873C63.8603 36.1873 66.4966 35.534 69.923 33.8433L68.6324 42.3523C66.2183 43.4976 62.4559 44.2617 58.8039 44.2617C49.5403 44.2617 46.2249 38.8071 46.2249 31.9879C46.2249 23.1496 51.6179 13.765 62.7365 13.765C68.858 13.765 72.2809 17.0949 72.2809 21.7317C72.2815 29.2066 62.4005 31.4965 56.6715 31.5506Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M103.067 20.3142C103.067 21.4052 102.897 22.9875 102.727 24.0216L99.5262 43.6622H89.1385L92.0585 25.658C92.1139 25.1696 92.284 24.1865 92.284 23.6411C92.284 22.3314 91.4414 22.0047 90.4282 22.0047C89.0826 22.0047 87.7337 22.6042 86.8354 23.0418L83.5234 43.6625H73.0772L77.8495 14.257H86.8908L87.0052 16.6041C89.1382 15.2404 91.9469 13.7656 95.932 13.7656C101.212 13.765 103.067 16.3845 103.067 20.3142Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M133.906 16.9841C136.881 14.9131 139.69 13.765 143.563 13.765C148.897 13.765 150.753 16.3845 150.753 20.3142C150.753 21.4052 150.583 22.9875 150.413 24.0216L147.216 43.6622H136.825L139.801 25.2774C139.855 24.786 139.971 24.1865 139.971 23.8063C139.971 22.3317 139.128 22.0047 138.115 22.0047C136.824 22.0047 135.535 22.5501 134.577 23.0418L131.266 43.6625H120.878L123.854 25.2777C123.908 24.7863 124.02 24.1868 124.02 23.8065C124.02 22.332 123.177 22.0049 122.167 22.0049C120.819 22.0049 119.473 22.6045 118.574 23.0421L115.26 43.6628H104.817L109.589 14.2573H118.52L118.8 16.7122C120.878 15.241 123.684 13.7662 127.446 13.7662C130.704 13.765 132.837 15.129 133.906 16.9841Z\" fill=\"white\"/>\\n  <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M171.426 25.5502C171.426 23.1496 170.808 21.513 168.956 21.513C164.857 21.513 164.015 28.55 164.015 32.1498C164.015 34.8807 164.802 36.5709 166.653 36.5709C170.528 36.5709 171.426 29.1497 171.426 25.5502ZM153.458 31.7152C153.458 22.442 158.511 13.765 170.136 13.765C178.896 13.765 182.098 18.7854 182.098 25.7148C182.098 34.8805 177.099 44.3723 165.194 44.3723C156.378 44.3723 153.458 38.7525 153.458 31.7152Z\" fill=\"white\"/>\\n</svg>';\nvar CONTINUE_OR_CANCEL_INSTRUCTIONS =\n  \"Tap cancel payment to cancel and return to the business. Continue payment will relaunch the payment window.\";\n\nvar POPUP_WIDTH = 400;\nvar POPUP_HEIGHT = 570;\nvar ELEMENT_IDS = {\n  backdrop: \"venmo-desktop-web-backdrop\",\n  backdropHidden: \"venmo-desktop-web-backdrop.hidden\",\n  backdropContainer: \"venmo-backdrop-container\",\n  cancelButton: \"venmo-popup-cancel-button\",\n  continueButton: \"venmo-popup-continue-button\",\n  message: \"venmo-message\",\n  instructions: \"venmo-instructions\",\n  venmoLogo: \"venmo-full-logo\",\n};\n\nfunction openPopup(options) {\n  var popupName = \"venmoDesktopWebLogin\";\n  var checkForStatusChange = options.checkForStatusChange;\n  var cancelTokenization = options.cancelTokenization;\n  var venmoUrl = options.venmoUrl;\n  var assetsUrl = options.assetsUrl;\n  var debug = options.debug || false;\n  var popupLocation = centeredPopupDimensions();\n  var assetsBaseUrl = assetsUrl + \"/web/\" + VERSION + \"/html\";\n\n  return new Promise(function (resolve, reject) {\n    frameService.create(\n      {\n        name: popupName,\n        dispatchFrameUrl:\n          assetsBaseUrl + \"/dispatch-frame\" + useMin(debug) + \".html\",\n        openFrameUrl:\n          assetsBaseUrl + \"/venmo-landing-frame\" + useMin(debug) + \".html\",\n        top: popupLocation.top,\n        left: popupLocation.left,\n        height: POPUP_HEIGHT,\n        width: POPUP_WIDTH,\n      },\n      function (frameServiceInstance) {\n        document\n          .getElementById(ELEMENT_IDS.continueButton)\n          .addEventListener(\"click\", function () {\n            frameServiceInstance.focus();\n          });\n        document\n          .getElementById(ELEMENT_IDS.cancelButton)\n          .addEventListener(\"click\", function () {\n            frameServiceInstance.close();\n            cancelTokenization();\n            closeBackdrop();\n          });\n        frameServiceInstance.open({}, function (err) {\n          var retryStartingCount = 1;\n\n          if (err) {\n            reject(err);\n          } else {\n            checkForStatusChange(retryStartingCount)\n              .then(resolve)\n              .catch(reject);\n          }\n          frameServiceInstance.close();\n          closeBackdrop();\n        });\n        frameServiceInstance.redirect(venmoUrl);\n      }\n    );\n  });\n}\n\nfunction centeredPopupDimensions() {\n  var popupTop =\n    Math.round((window.outerHeight - POPUP_HEIGHT) / 2) + window.screenTop;\n  var popupLeft =\n    Math.round((window.outerWidth - POPUP_WIDTH) / 2) + window.screenLeft;\n\n  return {\n    top: popupTop,\n    left: popupLeft,\n  };\n}\n\nfunction closeBackdrop() {\n  document.getElementById(\"venmo-desktop-web-backdrop\").classList.add(\"hidden\");\n}\n\nfunction getElementStyles() {\n  var backdropStyles = [\n    \"#\" + ELEMENT_IDS.backdropHidden + \" {\",\n    \"display: none;\",\n    \"}\",\n    \"#\" + ELEMENT_IDS.backdrop + \" {\",\n    \"cursor: pointer;\",\n    \"position: absolute;\",\n    \"top: 0;\",\n    \"left: 0;\",\n    \"bottom: 0;\",\n    \"width: 100%;\",\n    \"background: rgba(0, 0, 0, 0.4);\",\n    \"}\",\n  ];\n  var backdropContainerStyles = [\n    \"#\" + ELEMENT_IDS.backdropContainer + \" {\",\n    \"display: flex;\",\n    \"align-content: center;\",\n    \"justify-content: center;\",\n    \"align-items: center;\",\n    \"width: 100%;\",\n    \"height: 100%;\",\n    \"flex-direction: column;\",\n    \"}\",\n  ];\n\n  var cancelButtonStyles = [\n    \"#\" + ELEMENT_IDS.cancelButton + \" {\",\n    \"height: 24px;\",\n    \"width: 380px;\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 700;\",\n    \"font-size: 18px;\",\n    \"line-height: 24px;\",\n    \"text-align: center;\",\n    \"background-color: transparent;\",\n    \"border: none;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 28px;\",\n    \"}\",\n  ];\n\n  var continueButtonStyles = [\n    \"#\" + ELEMENT_IDS.continueButton + \" {\",\n    \"width: 400px;\",\n    \"height: 50px;\",\n    \"background: #0074DE;\",\n    \"border-radius: 24px;\",\n    \"border: none;\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 700;\",\n    \"font-size: 18px;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 44px;\",\n    \"}\",\n  ];\n\n  var messageStyles = [\n    \"#\" + ELEMENT_IDS.message + \" {\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 500;\",\n    \"font-size: 24px;\",\n    \"line-height: 32px;\",\n    \"text-align: center;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 32px;\",\n    \"}\",\n  ];\n\n  var instructionStyles = [\n    \"#\" + ELEMENT_IDS.instructions + \" {\",\n    \"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\",\n    \"font-style: normal;\",\n    \"font-weight: 400;\",\n    \"font-size: 16px;\",\n    \"line-height: 20px;\",\n    \"text-align: center;\",\n    \"color: #FFFFFF;\",\n    \"margin-top: 16px;\",\n    \"width: 400px;\",\n    \"}\",\n  ];\n\n  var allStyles = backdropStyles.concat(\n    backdropContainerStyles,\n    cancelButtonStyles,\n    continueButtonStyles,\n    messageStyles,\n    instructionStyles\n  );\n\n  return allStyles.join(\"\\n\");\n}\n\nfunction buildAndStyleElements() {\n  var alreadyRenderedBackdrop = document.getElementById(ELEMENT_IDS.backdrop);\n  var backdropStylesElement,\n    backdropDiv,\n    backDropContentContainer,\n    venmoLogoDiv,\n    venmoMessageDiv,\n    instructionsDiv,\n    continueButton,\n    cancelButton;\n\n  if (alreadyRenderedBackdrop) {\n    alreadyRenderedBackdrop.classList.remove(\"hidden\");\n\n    return;\n  }\n  backdropStylesElement = document.createElement(\"style\");\n  backdropDiv = document.createElement(\"div\");\n  backDropContentContainer = document.createElement(\"div\");\n  venmoLogoDiv = document.createElement(\"div\");\n  venmoMessageDiv = document.createElement(\"div\");\n  instructionsDiv = document.createElement(\"div\");\n  continueButton = document.createElement(\"button\");\n  cancelButton = document.createElement(\"button\");\n\n  backdropStylesElement.id = \"venmo-desktop-web__injected-styles\";\n  backdropStylesElement.innerHTML = getElementStyles();\n\n  backdropDiv.id = ELEMENT_IDS.backdrop;\n\n  backDropContentContainer.id = ELEMENT_IDS.backdropContainer;\n\n  venmoLogoDiv.id = ELEMENT_IDS.venmoLogo;\n  venmoLogoDiv.innerHTML = VENMO_LOGO_SVG;\n\n  venmoMessageDiv.id = ELEMENT_IDS.message;\n  venmoMessageDiv.innerText = \"What would you like to do?\";\n\n  instructionsDiv.id = ELEMENT_IDS.instructions;\n  instructionsDiv.innerText = CONTINUE_OR_CANCEL_INSTRUCTIONS;\n\n  continueButton.id = ELEMENT_IDS.continueButton;\n  continueButton.innerText = \"Continue payment\";\n\n  cancelButton.id = ELEMENT_IDS.cancelButton;\n  cancelButton.innerText = \"Cancel payment\";\n\n  document.head.appendChild(backdropStylesElement);\n  backDropContentContainer.appendChild(venmoLogoDiv);\n  backDropContentContainer.appendChild(venmoMessageDiv);\n  backDropContentContainer.appendChild(instructionsDiv);\n  backDropContentContainer.appendChild(continueButton);\n  backDropContentContainer.appendChild(cancelButton);\n  backdropDiv.appendChild(backDropContentContainer);\n  document.body.appendChild(backdropDiv);\n}\n\n/**\n * Applies a backdrop over the page, and opens a popup to the supplied url. Uses supplied status and cancel functions to handle the flow.\n * @function runWebLogin\n * @ignore\n * @param {object} [options] Options for running the web login flow.\n * @param {string} [options.venmoUrl] Venmo url that is to be used for logging in.\n * @param {string} [options.assetsUrl] Url that points to the hosted Braintree assets.\n * @param {Venmo~checkPaymentContextStatusAndProcessResult} [options.checkForStatusChange] {@link Venmo~checkPaymentContextStatusAndProcessResult} to be invoked in order to check for a payment context status update.\n * @param {Venmo~cancelTokenization} [options.cancelTokenization] {@link Venmo~cancelTokenization} to be invoked when the appropriate payment context status is retrieved.\n * @returns {Promise} Returns a promise\n */\nfunction runWebLogin(options) {\n  buildAndStyleElements();\n\n  return openPopup(options);\n}\n\nmodule.exports = {\n  runWebLogin: runWebLogin,\n  openPopup: openPopup,\n  POPUP_WIDTH: POPUP_WIDTH,\n  POPUP_HEIGHT: POPUP_HEIGHT,\n};\n\n},{\"../../lib/frame-service/external\":113,\"../../lib/promise\":131,\"../../lib/use-min\":135}],167:[function(require,module,exports){\n\"use strict\";\n\nvar analytics = require(\"../lib/analytics\");\nvar isBrowserSupported = require(\"./shared/supports-venmo\");\nvar browserDetection = require(\"./shared/browser-detection\");\nvar constants = require(\"./shared/constants\");\nvar errors = require(\"./shared/errors\");\nvar querystring = require(\"../lib/querystring\");\nvar isVerifiedDomain = require(\"../lib/is-verified-domain\");\nvar methods = require(\"../lib/methods\");\nvar convertMethodsToError = require(\"../lib/convert-methods-to-error\");\nvar wrapPromise = require(\"@braintree/wrap-promise\");\nvar BraintreeError = require(\"../lib/braintree-error\");\nvar inIframe = require(\"../lib/in-iframe\");\nvar Promise = require(\"../lib/promise\");\nvar ExtendedPromise = require(\"@braintree/extended-promise\");\nvar getVenmoUrl = require(\"./shared/get-venmo-url\");\nvar runWebLogin = require(\"./shared/web-login-backdrop\").runWebLogin;\nvar snakeCaseToCamelCase = require(\"../lib/snake-case-to-camel-case\");\n\n// NEXT_MAJOR_VERSION the source code for this is actually in a\n// typescript repo called venmo-desktop, once the SDK is migrated\n// to typescript, we can move the TS files out of that separate\n// repo and into the web SDK properly\nvar createVenmoDesktop = require(\"./external/\");\nvar graphqlQueries = require(\"./external/queries\");\n\nvar VERSION = \"3.88.3\";\nvar DEFAULT_MOBILE_POLLING_INTERVAL = 250; // 1/4 second\nvar DEFAULT_MOBILE_EXPIRING_THRESHOLD = 300000; // 5 minutes\n\n/**\n * Venmo tokenize payload.\n * @typedef {object} Venmo~tokenizePayload\n * @property {string} nonce The payment method nonce.\n * @property {string} type The payment method type, always `VenmoAccount`.\n * @property {object} details Additional Venmo account details.\n * @property {string} details.username The username of the Venmo account.\n * @property {string} details.paymentContextId The context ID of the Venmo payment. Only available when used with {@link https://braintree.github.io/braintree-web/current/module-braintree-web_venmo.html#.create|`paymentMethodUsage`}.\n */\n\n/**\n * @class\n * @param {object} options The Venmo {@link module:braintree-web/venmo.create create} options.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web/venmo.create|braintree-web.venmo.create} instead.</strong>\n * @classdesc This class represents a Venmo component produced by {@link module:braintree-web/venmo.create|braintree-web/venmo.create}. Instances of this class have methods for tokenizing Venmo payments.\n */\nfunction Venmo(options) {\n  var self = this;\n\n  this._allowDesktopWebLogin = options.allowDesktopWebLogin || false;\n  this._mobileWebFallBack = options.mobileWebFallBack || false;\n  this._createPromise = options.createPromise;\n  this._allowNewBrowserTab = options.allowNewBrowserTab !== false;\n  this._allowWebviews = options.allowWebviews !== false;\n  this._allowDesktop = options.allowDesktop === true;\n  this._useRedirectForIOS = options.useRedirectForIOS === true;\n  this._profileId = options.profileId;\n  this._displayName = options.displayName;\n  this._deepLinkReturnUrl = options.deepLinkReturnUrl;\n  this._ignoreHistoryChanges = options.ignoreHistoryChanges;\n  this._paymentMethodUsage = (options.paymentMethodUsage || \"\").toUpperCase();\n  this._shouldUseLegacyFlow = !this._paymentMethodUsage;\n  this._requireManualReturn = options.requireManualReturn === true;\n  this._useDesktopQRFlow =\n    this._allowDesktop && this._isDesktop() && !this._allowDesktopWebLogin;\n  this._useAllowDesktopWebLogin =\n    this._allowDesktopWebLogin && this._isDesktop();\n  this._cannotHaveReturnUrls = inIframe() || this._requireManualReturn;\n  this._allowAndroidRecreation = options.allowAndroidRecreation !== false;\n  this._maxRetryCount = 3;\n\n  this._shouldCreateVenmoPaymentContext =\n    this._cannotHaveReturnUrls || !this._shouldUseLegacyFlow;\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"venmo.desktop-flow.configured.\" + String(Boolean(this._allowDesktop))\n  );\n\n  // if the url has a tokenization result, that indicates\n  // that it cannot be the desktop flow or the manual return\n  // flow. If it's the hash change with paymentMethodUsage\n  // flow, we want to skip creating a new payment context, since\n  // there is already a pending payment context waiting to be\n  // processed. For the hash change flow without paymentMethodUsage,\n  // no further actions are needed.\n  if (this.hasTokenizationResult()) {\n    analytics.sendEvent(\n      this._createPromise,\n      \"venmo.appswitch.return-in-new-tab\"\n    );\n  } else if (this._useDesktopQRFlow) {\n    this._createPromise = this._createPromise.then(function (client) {\n      var config = client.getConfiguration().gatewayConfiguration;\n\n      return createVenmoDesktop({\n        url:\n          config.assetsUrl +\n          \"/web/\" +\n          VERSION +\n          \"/html/venmo-desktop-frame.html\",\n        environment:\n          config.environment === \"production\" ? \"PRODUCTION\" : \"SANDBOX\",\n        profileId: self._profileId || config.payWithVenmo.merchantId,\n        paymentMethodUsage: self._paymentMethodUsage,\n        displayName: self._displayName,\n        Promise: Promise,\n        apiRequest: function (query, data) {\n          return client\n            .request({\n              api: \"graphQLApi\",\n              data: {\n                query: query,\n                variables: data,\n              },\n            })\n            .then(function (response) {\n              return response.data;\n            });\n        },\n        sendEvent: function (eventName) {\n          analytics.sendEvent(self._createPromise, eventName);\n        },\n        verifyDomain: isVerifiedDomain,\n      })\n        .then(function (venmoDesktopInstance) {\n          self._venmoDesktopInstance = venmoDesktopInstance;\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.desktop-flow.presented\"\n          );\n\n          return client;\n        })\n        .catch(function () {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.desktop-flow.setup-failed\"\n          );\n          self._useDesktopQRFlow = false;\n\n          return client;\n        });\n    });\n  } else if (this._shouldCreateVenmoPaymentContext) {\n    // these variables are only relevant for the manual return flow\n    // and they are only set to make testing easier (so they can\n    // be overwritten with smaller values in the tests)\n    this._mobilePollingInterval = DEFAULT_MOBILE_POLLING_INTERVAL;\n    this._mobilePollingExpiresThreshold = DEFAULT_MOBILE_EXPIRING_THRESHOLD;\n\n    this._createPromise = this._createPromise.then(function (client) {\n      var analyticsCategory = self._cannotHaveReturnUrls\n        ? \"manual-return\"\n        : \"mobile-payment-context\";\n      var config = client.getConfiguration().gatewayConfiguration;\n\n      self._mobilePollingContextEnvironment = config.environment.toUpperCase();\n\n      return self\n        ._createVenmoPaymentContext(client)\n        .then(function () {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.\" + analyticsCategory + \".presented\"\n          );\n\n          return client;\n        })\n        .catch(function (err) {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.\" + analyticsCategory + \".setup-failed\"\n          );\n\n          return Promise.reject(\n            new BraintreeError({\n              type: errors.VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED.type,\n              code: errors.VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED.code,\n              message: errors.VENMO_MOBILE_PAYMENT_CONTEXT_SETUP_FAILED.message,\n              details: {\n                originalError: err,\n              },\n            })\n          );\n        });\n    });\n  }\n}\n\nVenmo.prototype._createVenmoPaymentContext = function (\n  client,\n  cancelIfTokenizationInProgress\n) {\n  var self = this;\n  var promise;\n\n  if (!this._shouldCreateVenmoPaymentContext) {\n    return Promise.resolve();\n  }\n\n  if (this._shouldUseLegacyFlow) {\n    promise = client\n      .request({\n        api: \"graphQLApi\",\n        data: {\n          query: graphqlQueries.LEGACY_CREATE_PAYMENT_CONTEXT_QUERY,\n          variables: {\n            input: {\n              environment: this._mobilePollingContextEnvironment,\n              intent: \"PAY_FROM_APP\",\n            },\n          },\n        },\n      })\n      .then(function (response) {\n        return response\n          .data.createVenmoQRCodePaymentContext.venmoQRCodePaymentContext;\n      });\n  } else {\n    promise = client\n      .request({\n        api: \"graphQLApi\",\n        data: {\n          query: graphqlQueries.CREATE_PAYMENT_CONTEXT_QUERY,\n          variables: {\n            input: {\n              paymentMethodUsage: this._paymentMethodUsage,\n              intent: \"CONTINUE\",\n              customerClient: \"MOBILE_WEB\",\n              displayName: this._displayName,\n            },\n          },\n        },\n      })\n      .then(function (response) {\n        return response.data.createVenmoPaymentContext.venmoPaymentContext;\n      });\n  }\n\n  return promise.then(function (context) {\n    var expiredTime = new Date(context.expiresAt) - new Date(context.createdAt);\n    var refreshIn = expiredTime * 0.6666;\n\n    // prevents multiple setTimeouts from firing from separate calls\n    // to create a payment context by canceling the previous one\n    // if there is a pending call\n    clearTimeout(self._refreshPaymentContextTimeout);\n    self._refreshPaymentContextTimeout = setTimeout(function () {\n      if (self._tokenizationInProgress) {\n        return;\n      }\n      self._createVenmoPaymentContext(client, true);\n    }, refreshIn);\n\n    if (cancelIfTokenizationInProgress && self._tokenizationInProgress) {\n      return;\n    }\n\n    self._venmoPaymentContextStatus = context.status;\n    self._venmoPaymentContextId = context.id;\n  });\n};\n\nVenmo.prototype.appSwitch = function (url) {\n  if (this._deepLinkReturnUrl) {\n    if (isIosWebviewInDeepLinkReturnUrlFlow()) {\n      analytics.sendEvent(\n        this._createPromise,\n        \"venmo.appswitch.start.ios-webview\"\n      );\n      // Deep link URLs do not launch iOS apps from a webview when using window.open or PopupBridge.open.\n      window.location.href = url;\n    } else if (\n      window.popupBridge &&\n      typeof window.popupBridge.open === \"function\"\n    ) {\n      analytics.sendEvent(\n        this._createPromise,\n        \"venmo.appswitch.start.popup-bridge\"\n      );\n      window.popupBridge.open(url);\n    } else {\n      analytics.sendEvent(this._createPromise, \"venmo.appswitch.start.webview\");\n      window.open(url);\n    }\n  } else {\n    analytics.sendEvent(this._createPromise, \"venmo.appswitch.start.browser\");\n\n    if (\n      browserDetection.doesNotSupportWindowOpenInIos() ||\n      this._shouldUseRedirectStrategy()\n    ) {\n      window.location.href = url;\n    } else {\n      window.open(url);\n    }\n  }\n};\n\nVenmo.prototype.getUrl = function () {\n  return this._createPromise.then(\n    function (client) {\n      var configuration = client.getConfiguration();\n      var params = {};\n      var currentUrl =\n        this._deepLinkReturnUrl ||\n        window.location.href.replace(window.location.hash, \"\");\n      var venmoConfiguration = configuration.gatewayConfiguration.payWithVenmo;\n      var analyticsMetadata = configuration.analyticsMetadata;\n      var accessToken = venmoConfiguration.accessToken;\n      var braintreeData = {\n        _meta: {\n          version: analyticsMetadata.sdkVersion,\n          integration: analyticsMetadata.integration,\n          platform: analyticsMetadata.platform,\n          sessionId: analyticsMetadata.sessionId,\n        },\n      };\n\n      this._isDebug = configuration.isDebug;\n      this._assetsUrl = configuration.gatewayConfiguration.assetsUrl;\n\n      currentUrl = currentUrl.replace(/#*$/, \"\");\n\n      /* eslint-disable camelcase */\n      if (this._venmoPaymentContextId) {\n        if (this._shouldUseLegacyFlow) {\n          // NEXT_MAJOR_VERSION stop adding the context id to the access token.\n          // the context id is placed here for backwards compatiblity\n          // with versions of the venmo app that did not support\n          // pulling the resource id off of the query params\n          accessToken += \"|pcid:\" + this._venmoPaymentContextId;\n        } else {\n          params.resource_id = this._venmoPaymentContextId;\n        }\n      }\n\n      if (this._shouldIncludeReturnUrls()) {\n        if (this._useAllowDesktopWebLogin) {\n          currentUrl =\n            this._assetsUrl + \"/web/\" + VERSION + \"/html/redirect-frame.html\";\n        }\n\n        params[\"x-success\"] = currentUrl + \"#venmoSuccess=1\";\n        params[\"x-cancel\"] = currentUrl + \"#venmoCancel=1\";\n        params[\"x-error\"] = currentUrl + \"#venmoError=1\";\n      } else {\n        params[\"x-success\"] = \"NOOP\";\n        params[\"x-cancel\"] = \"NOOP\";\n        params[\"x-error\"] = \"NOOP\";\n      }\n\n      if (!this._allowAndroidRecreation) {\n        params.allowAndroidRecreation = 0;\n      } else {\n        params.allowAndroidRecreation = 1;\n      }\n\n      params.ua = window.navigator.userAgent;\n      params.braintree_merchant_id =\n        this._profileId || venmoConfiguration.merchantId;\n      params.braintree_access_token = accessToken;\n      params.braintree_environment = venmoConfiguration.environment;\n      params.braintree_sdk_data = btoa(JSON.stringify(braintreeData));\n\n      return (\n        getVenmoUrl({\n          useAllowDesktopWebLogin: this._useAllowDesktopWebLogin,\n          mobileWebFallBack: this._mobileWebFallBack,\n        }) +\n        \"?\" +\n        querystring.stringify(params)\n      );\n    }.bind(this)\n  );\n};\n\n/**\n * Returns a boolean indicating whether the current browser supports Venmo as a payment method.\n *\n * If `options.allowNewBrowserTab` is false when calling {@link module:braintree-web/venmo.create|venmo.create}, this method will return true only for browsers known to support returning from the Venmo app to the same browser tab. Currently, this is limited to iOS Safari and Android Chrome.\n * If `options.allowWebviews` is false when calling {@link module:braintree-web/venmo.create|venmo.create}, this method will return true only for mobile browsers that are not webviews.\n * @public\n * @returns {boolean} True if the current browser is supported, false if not.\n */\nVenmo.prototype.isBrowserSupported = function () {\n  return isBrowserSupported.isBrowserSupported({\n    allowNewBrowserTab: this._allowNewBrowserTab,\n    allowWebviews: this._allowWebviews,\n    allowDesktop: this._allowDesktop,\n  });\n};\n\n/**\n * Returns a boolean indicating whether a Venmo tokenization result is ready to be processed immediately.\n *\n * This method should be called after initialization to see if the result of Venmo authorization is available. If it returns true, call {@link Venmo#tokenize|tokenize} immediately to process the results.\n *\n * @public\n * @returns {boolean} True if the results of Venmo payment authorization are available and ready to process.\n */\nVenmo.prototype.hasTokenizationResult = function () {\n  return this._hasTokenizationResult();\n};\n\n// a private version that lets us pass in a custom hash\n// when listening on a hashchange event\nVenmo.prototype._hasTokenizationResult = function (hash) {\n  var params = getFragmentParameters(hash);\n\n  return (\n    typeof (params.venmoSuccess || params.venmoError || params.venmoCancel) !==\n    \"undefined\"\n  );\n};\n\nVenmo.prototype._shouldIncludeReturnUrls = function () {\n  // when a deep link return url is passed, we should always\n  // respect it and include the return urls so the venmo app\n  // can app switch back to it\n  if (this._deepLinkReturnUrl) {\n    return true;\n  }\n\n  // when the sdk is initialized within an iframe, it's\n  // impossible to return back to the correct place automatically\n  // without also setting a deepLinkReturnUrl. When the return\n  // urls are omitted, the Venmo app prompts the user to return\n  // manually.\n  return !this._cannotHaveReturnUrls;\n};\n\nVenmo.prototype._isDesktop = function () {\n  return !(browserDetection.isIos() || browserDetection.isAndroid());\n};\n\n/**\n * Launches the Venmo flow and returns a nonce payload.\n *\n * If {@link Venmo#hasTokenizationResult|hasTokenizationResult} returns true, calling tokenize will immediately process and return the results without initiating the Venmo payment authorization flow.\n *\n * Only one Venmo flow can be active at a time. One way to achieve this is to disable your Venmo button while the flow is open.\n * @public\n * @param {object} [options] Options for tokenization.\n * @param {number} [options.processResultsDelay=500] The amount of time in milliseconds to delay processing the results. In most cases, this value should be left as the default.\n * @param {callback} [callback] The second argument, <code>data</code>, is a {@link Venmo~tokenizePayload|tokenizePayload}. If no callback is provided, the method will return a Promise that resolves with a {@link Venmo~tokenizePayload|tokenizePayload}.\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * button.addEventListener('click', function () {\n *   // Disable the button so that we don't attempt to open multiple popups.\n *   button.setAttribute('disabled', 'disabled');\n *\n *   // Because tokenize opens a new window, this must be called\n *   // as a result of a user action, such as a button click.\n *   venmoInstance.tokenize().then(function (payload) {\n *     // Submit payload.nonce to your server\n *     // Use payload.username to get the Venmo username and display any UI\n *   }).catch(function (tokenizeError) {\n *     // Handle flow errors or premature flow closure\n *     switch (tokenizeErr.code) {\n *       case 'VENMO_APP_CANCELED':\n *         console.log('User canceled Venmo flow.');\n *         break;\n *       case 'VENMO_CANCELED':\n *         console.log('User canceled Venmo, or Venmo app is not available.');\n *         break;\n *       default:\n *         console.error('Error!', tokenizeErr);\n *     }\n *   }).then(function () {\n *     button.removeAttribute('disabled');\n *   });\n * });\n */\nVenmo.prototype.tokenize = function (options) {\n  var self = this;\n  var tokenizationPromise;\n\n  options = options || {};\n\n  if (this._tokenizationInProgress === true) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_TOKENIZATION_REQUEST_ACTIVE)\n    );\n  }\n\n  this._tokenizationInProgress = true;\n  if (this._useDesktopQRFlow) {\n    // for the desktop flow, we create a venmo payment\n    // context and then present a qr code modal to the\n    // customer and they will open up their venmo app\n    // and scan it and approve the purchase on their\n    // mobile device. The sdk will start polling\n    // in order to determine when the status of the\n    // payment context has updated and then pass the\n    // resulting nonce back to the merchant.\n    tokenizationPromise = this._tokenizeForDesktopQRFlow(options);\n  } else if (this._useAllowDesktopWebLogin) {\n    /**\n     * For Desktop Web Login, we open a browser popup to allow for authorization. Once authorized, the redirect urls are used by Venmo, and we query the API for a payment context status update.\n     *\n     * - Payment context is created on initialization\n     * - Popup is opened to Venmo login url.\n     *  - The payment is authorized or canceled, and the popup is closed\n     * - Once the popup is closed, we query the API for a payment context status update\n     *\n     * This is an alternate, opt-in flow to be used the Desktop QR Flow is not desired for Pay with Venmo desktop experiences.\n     */\n    tokenizationPromise = this._tokenizeWebLoginWithRedirect();\n  } else if (this._cannotHaveReturnUrls) {\n    // in the manual return strategy, we create the payment\n    // context on initialization, then continually poll once\n    // the app switch begins until we get a response indiciating\n    // the payment context was approved by the customer on the\n    // Venmo app. The payment context response also includes a\n    // nonce. There are 2 cases where we use the manual return\n    // strategy:\n    // 1. the sdk is instantiated in an iframe, because\n    //    the venmo app is unable to redirect automatically\n    //    when that is the case so we rely on the customer\n    //    to do a manual redirect and continunally poll for\n    //    updates on the payment context to get the nonce\n    // 2. same deal for when `requireManualReturn` is configured\n    tokenizationPromise = this._tokenizeForMobileWithManualReturn();\n  } else {\n    // the default mobile flow is to app switch to the\n    // venmo app, and then have the venmo app switch\n    // back to the page with the venmo nonce details\n    // encoded into the hash portion of the url. If\n    // `paymentMethodUsage` is provided when instantiating\n    // the sdk, we also create a payment context and pass\n    // the resource id to the Venmo app during the app switch.\n    // Once we get a succesful return, we ping the payment\n    // context query to get any additional data needed\n    // to send back to the merchant.\n    tokenizationPromise =\n      this._tokenizeForMobileWithHashChangeListeners(options);\n  }\n\n  return tokenizationPromise\n    .then(function (payload) {\n      return self._createPromise\n        .then(function (client) {\n          return self._createVenmoPaymentContext(client);\n        })\n        .then(function () {\n          self._tokenizationInProgress = false;\n\n          return formatTokenizePayload(payload);\n        });\n    })\n    .catch(function (err) {\n      return self._createPromise\n        .then(function (client) {\n          return self._createVenmoPaymentContext(client);\n        })\n        .then(function () {\n          self._tokenizationInProgress = false;\n\n          return Promise.reject(err);\n        });\n    });\n};\n\n/**\n * Cancels the venmo tokenization process\n *\n * @public\n * @function Venmo~cancelTokenization\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n * @example\n * venmoTokenizeButton.addEventListener('click', function () {\n *   venmoInstance.tokenize().then(function (payload) {\n *     // handle payload\n *   }).catch(function (err) {\n *     if (err.code === 'VENMO_TOKENIZATION_CANCELED_BY_MERCHANT') {\n *       // tokenization was canceled by calling cancelTokenization\n *     }\n *   });\n * });\n *\n * venmoCancelButton.addEventListener('click', function () {\n *   // Hide the button when the venmo flow is not in progress\n *   venmoCancelButton.style.display = \"none\";\n *\n *   venmoInstance.cancelTokenization().then(function () {\n *     // done canceling the flow\n *   }).catch(function (err) {\n *     // should only get here if there is no tokenization in progress\n *   });\n * });\n */\nVenmo.prototype.cancelTokenization = function () {\n  if (!this._tokenizationInProgress) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_TOKENIZATION_REQUEST_NOT_ACTIVE)\n    );\n  }\n\n  this._removeVisibilityEventListener();\n\n  // important to reject the tokenization promise first\n  // so the tokenize method rejects with this error\n  // rather than a customer canceled error in the mobile\n  // polling and desktop flows\n  if (this._tokenizePromise) {\n    this._tokenizePromise.reject(\n      new BraintreeError(errors.VENMO_TOKENIZATION_CANCELED_BY_MERCHANT)\n    );\n  }\n\n  return Promise.all([\n    this._cancelMobilePaymentContext(),\n    this._cancelVenmoDesktopContext(),\n  ]);\n};\n\nVenmo.prototype._tokenizeWebLoginWithRedirect = function () {\n  var self = this;\n\n  analytics.sendEvent(self._createPromise, \"venmo.tokenize.web-login.start\");\n  this._tokenizePromise = new ExtendedPromise();\n\n  return this.getUrl().then(function (url) {\n    runWebLogin({\n      checkForStatusChange:\n        self._checkPaymentContextStatusAndProcessResult.bind(self),\n      cancelTokenization: self.cancelTokenization.bind(self),\n      venmoUrl: url,\n      assetsUrl: self._assetsUrl,\n      debug: self._isDebug,\n    })\n      .then(function (payload) {\n        analytics.sendEvent(\n          self._createPromise,\n          \"venmo.tokenize.web-login.success\"\n        );\n\n        return self._tokenizePromise.resolve({\n          paymentMethodNonce: payload.paymentMethodId,\n          username: payload.userName,\n          payerInfo: payload.payerInfo,\n          id: self._venmoPaymentContextId,\n        });\n      })\n      .catch(function (err) {\n        analytics.sendEvent(\n          self._createPromise,\n          \"venmo.tokenize.web-login.failure\"\n        );\n\n        return self._tokenizePromise.reject(err);\n      });\n\n    return self._tokenizePromise;\n  });\n};\n\nVenmo.prototype._queryPaymentContextStatus = function (id) {\n  var self = this;\n\n  return this._createPromise\n    .then(function (client) {\n      var query = self._shouldUseLegacyFlow\n        ? graphqlQueries.LEGACY_VENMO_PAYMENT_CONTEXT_STATUS_QUERY\n        : graphqlQueries.VENMO_PAYMENT_CONTEXT_STATUS_QUERY;\n\n      return client.request({\n        api: \"graphQLApi\",\n        data: {\n          query: query,\n          variables: {\n            id: id,\n          },\n        },\n      });\n    })\n    .then(function (response) {\n      return response.data.node;\n    });\n};\n\n/**\n * Queries the GraphQL API to get the payment context and process the status. Retries until there is an update to the payment context status.\n * @name Venmo~checkPaymentContextStatusAndProcessResult\n * @ignore\n * @param {number} retryCount The counter for tracking number of retries made against the API.\n * @returns {Promise} Returns a promise\n */\nVenmo.prototype._checkPaymentContextStatusAndProcessResult = function (\n  retryCount\n) {\n  var self = this;\n\n  return self\n    ._queryPaymentContextStatus(self._venmoPaymentContextId)\n    .catch(function (networkError) {\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.VENMO_NETWORK_ERROR.type,\n          code: errors.VENMO_NETWORK_ERROR.code,\n          message: errors.VENMO_NETWORK_ERROR.message,\n          details: networkError,\n        })\n      );\n    })\n    .then(function (node) {\n      var resultStatus = node.status;\n\n      if (resultStatus !== self._venmoPaymentContextStatus) {\n        self._venmoPaymentContextStatus = resultStatus;\n\n        analytics.sendEvent(\n          self._createPromise,\n          \"venmo.tokenize.web-login.status-change\"\n        );\n\n        switch (resultStatus) {\n          case \"APPROVED\":\n            return Promise.resolve(node);\n          case \"CANCELED\":\n            return Promise.reject(\n              new BraintreeError(errors.VENMO_CUSTOMER_CANCELED)\n            );\n          case \"FAILED\":\n            return Promise.reject(\n              new BraintreeError(errors.VENMO_TOKENIZATION_FAILED)\n            );\n          default:\n        }\n      }\n\n      return new Promise(function (resolve, reject) {\n        if (retryCount < self._maxRetryCount) {\n          retryCount++;\n\n          return self\n            ._checkPaymentContextStatusAndProcessResult(retryCount)\n            .then(resolve)\n            .catch(reject);\n        }\n\n        return reject(new BraintreeError(errors.VENMO_TOKENIZATION_FAILED));\n      });\n    });\n};\n\nVenmo.prototype._pollForStatusChange = function () {\n  var self = this;\n\n  if (Date.now() > self._mobilePollingContextExpiresIn) {\n    return Promise.reject(\n      new BraintreeError(errors.VENMO_MOBILE_POLLING_TOKENIZATION_TIMEOUT)\n    );\n  }\n\n  return this._queryPaymentContextStatus(this._venmoPaymentContextId)\n    .catch(function (networkError) {\n      return Promise.reject(\n        new BraintreeError({\n          type: errors.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.type,\n          code: errors.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.code,\n          message:\n            errors.VENMO_MOBILE_POLLING_TOKENIZATION_NETWORK_ERROR.message,\n          details: {\n            originalError: networkError,\n          },\n        })\n      );\n    })\n    .then(function (node) {\n      var newStatus = node.status;\n\n      if (newStatus !== self._venmoPaymentContextStatus) {\n        self._venmoPaymentContextStatus = newStatus;\n\n        analytics.sendEvent(\n          self._createPromise,\n          \"venmo.tokenize.manual-return.status-change.\" +\n            newStatus.toLowerCase()\n        );\n\n        switch (newStatus) {\n          case \"EXPIRED\":\n          case \"FAILED\":\n          case \"CANCELED\":\n            return Promise.reject(\n              new BraintreeError(\n                errors[\"VENMO_MOBILE_POLLING_TOKENIZATION_\" + newStatus]\n              )\n            );\n          case \"APPROVED\":\n            return Promise.resolve(node);\n          case \"CREATED\":\n          case \"SCANNED\":\n          default:\n          // any other statuses are irrelevant to the polling\n          // and can just be ignored\n        }\n      }\n\n      return new Promise(function (resolve, reject) {\n        setTimeout(function () {\n          self._pollForStatusChange().then(resolve).catch(reject);\n        }, self._mobilePollingInterval);\n      });\n    });\n};\n\nVenmo.prototype._tokenizeForMobileWithManualReturn = function () {\n  var self = this;\n\n  analytics.sendEvent(\n    this._createPromise,\n    \"venmo.tokenize.manual-return.start\"\n  );\n\n  this._mobilePollingContextExpiresIn =\n    Date.now() + this._mobilePollingExpiresThreshold;\n  this._tokenizePromise = new ExtendedPromise();\n\n  this._pollForStatusChange()\n    .then(function (payload) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.tokenize.manual-return.success\"\n      );\n\n      self._tokenizePromise.resolve({\n        paymentMethodNonce: payload.paymentMethodId,\n        username: payload.userName,\n        payerInfo: payload.payerInfo,\n        id: self._venmoPaymentContextId,\n      });\n    })\n    .catch(function (err) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.tokenize.manual-return.failure\"\n      );\n\n      self._tokenizePromise.reject(err);\n    });\n\n  return this.getUrl().then(function (url) {\n    self.appSwitch(url);\n\n    return self._tokenizePromise;\n  });\n};\n\nVenmo.prototype._shouldUseRedirectStrategy = function () {\n  if (!browserDetection.isIos()) {\n    return false;\n  }\n\n  if (this._mobileWebFallBack === true) {\n    return true;\n  }\n\n  return this._useRedirectForIOS;\n};\n\nVenmo.prototype._tokenizeForMobileWithHashChangeListeners = function (options) {\n  var self = this;\n  var resultProcessingInProgress, visibilityChangeListenerTimeout;\n\n  if (this.hasTokenizationResult()) {\n    return this.processHashChangeFlowResults();\n  }\n\n  analytics.sendEvent(this._createPromise, \"venmo.tokenize.mobile.start\");\n  this._tokenizePromise = new ExtendedPromise();\n\n  this._previousHash = window.location.hash;\n\n  function completeFlow(hash) {\n    var error;\n\n    self\n      .processHashChangeFlowResults(hash)\n      .catch(function (err) {\n        error = err;\n      })\n      .then(function (res) {\n        if (\n          !self._ignoreHistoryChanges &&\n          window.location.hash !== self._previousHash\n        ) {\n          window.location.hash = self._previousHash;\n        }\n        self._removeVisibilityEventListener();\n\n        if (error) {\n          self._tokenizePromise.reject(error);\n        } else {\n          self._tokenizePromise.resolve(res);\n        }\n        delete self._tokenizePromise;\n      });\n  }\n\n  // The Venmo SDK app switches back with the results of the\n  // tokenization encoded in the hash\n  this._onHashChangeListener = function (e) {\n    var hash = e.newURL.split(\"#\")[1];\n\n    if (!self._hasTokenizationResult(hash)) {\n      return;\n    }\n\n    resultProcessingInProgress = true;\n    clearTimeout(visibilityChangeListenerTimeout);\n    completeFlow(hash);\n  };\n\n  window.addEventListener(\"hashchange\", this._onHashChangeListener, false);\n\n  // Subscribe to document visibility change events to detect when app switch\n  // has returned. Acts as a fallback for the hashchange listener and catches\n  // the cancel case via manual app switch back\n  this._visibilityChangeListener = function () {\n    var delay =\n      options.processResultsDelay || constants.DEFAULT_PROCESS_RESULTS_DELAY;\n\n    if (!window.document.hidden) {\n      if (!resultProcessingInProgress) {\n        visibilityChangeListenerTimeout = setTimeout(completeFlow, delay);\n      }\n    }\n  };\n\n  return this.getUrl().then(function (url) {\n    self.appSwitch(url);\n\n    // Add a brief delay to ignore visibility change events that occur right before app switch\n    setTimeout(function () {\n      window.document.addEventListener(\n        documentVisibilityChangeEventName(),\n        self._visibilityChangeListener\n      );\n    }, constants.DOCUMENT_VISIBILITY_CHANGE_EVENT_DELAY);\n\n    return self._tokenizePromise;\n  });\n};\n\nVenmo.prototype._tokenizeForDesktopQRFlow = function () {\n  var self = this;\n\n  analytics.sendEvent(this._createPromise, \"venmo.tokenize.desktop.start\");\n\n  this._tokenizePromise = new ExtendedPromise();\n\n  this._createPromise\n    .then(function () {\n      return self._venmoDesktopInstance.launchDesktopFlow();\n    })\n    .then(function (payload) {\n      self._venmoDesktopInstance.hideDesktopFlow();\n\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.tokenize.desktop.success\"\n      );\n\n      self._tokenizePromise.resolve(payload);\n    })\n    .catch(function (err) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.tokenize.desktop.failure\"\n      );\n\n      if (self._venmoDesktopInstance) {\n        self._venmoDesktopInstance.hideDesktopFlow();\n      }\n\n      if (err && err.reason === \"CUSTOMER_CANCELED\") {\n        self._tokenizePromise.reject(\n          new BraintreeError(errors.VENMO_DESKTOP_CANCELED)\n        );\n\n        return;\n      }\n\n      self._tokenizePromise.reject(\n        new BraintreeError({\n          type: errors.VENMO_DESKTOP_UNKNOWN_ERROR.type,\n          code: errors.VENMO_DESKTOP_UNKNOWN_ERROR.code,\n          message: errors.VENMO_DESKTOP_UNKNOWN_ERROR.message,\n          details: {\n            originalError: err,\n          },\n        })\n      );\n    });\n\n  return this._tokenizePromise;\n};\n\nVenmo.prototype._cancelMobilePaymentContext = function () {\n  var self = this;\n\n  return this._createPromise.then(function (client) {\n    var query;\n\n    if (self._venmoPaymentContextId) {\n      query = self._shouldUseLegacyFlow\n        ? graphqlQueries.LEGACY_UPDATE_PAYMENT_CONTEXT_QUERY\n        : graphqlQueries.UPDATE_PAYMENT_CONTEXT_QUERY;\n\n      return client.request({\n        api: \"graphQLApi\",\n        data: {\n          query: query,\n          variables: {\n            input: {\n              id: self._venmoPaymentContextId,\n              status: \"CANCELED\",\n            },\n          },\n        },\n      });\n    }\n\n    return Promise.resolve();\n  });\n};\n\nVenmo.prototype._cancelVenmoDesktopContext = function () {\n  var self = this;\n\n  return this._createPromise.then(function () {\n    if (self._venmoDesktopInstance) {\n      self._venmoDesktopInstance.updateVenmoDesktopPaymentContext(\"CANCELED\");\n    }\n\n    return Promise.resolve();\n  });\n};\n\n/**\n * Cleanly tear down anything set up by {@link module:braintree-web/venmo.create|create}.\n * @public\n * @param {callback} [callback] Called once teardown is complete. No data is returned if teardown completes successfully.\n * @example\n * venmoInstance.teardown();\n * @example <caption>With callback</caption>\n * venmoInstance.teardown(function () {\n *   // teardown is complete\n * });\n * @returns {(Promise|void)} Returns a promise if no callback is provided.\n */\nVenmo.prototype.teardown = function () {\n  var self = this;\n\n  this._removeVisibilityEventListener();\n\n  return this._createPromise.then(\n    function () {\n      if (self._venmoDesktopInstance) {\n        self._venmoDesktopInstance.teardown();\n      }\n\n      clearTimeout(self._refreshPaymentContextTimeout);\n      self._cancelMobilePaymentContext();\n\n      convertMethodsToError(this, methods(Venmo.prototype));\n    }.bind(this)\n  );\n};\n\nVenmo.prototype._removeVisibilityEventListener = function () {\n  window.removeEventListener(\"hashchange\", this._onHashChangeListener);\n  window.document.removeEventListener(\n    documentVisibilityChangeEventName(),\n    this._visibilityChangeListener\n  );\n\n  delete this._visibilityChangeListener;\n  delete this._onHashChangeListener;\n};\n\n/**\n * The hash parameter in this function is optional. If no hash parameter is passed, the `getFragmentParameters` function will default to the hash present in the website's URL instead.\n *\n * There are two scenarios where this method is called:\n *\n * 1. When called within a browser that is capable of returning to the same tab that started the Venmo flow, we set up a listener to detect hash changes in the url. Part of the return to the merchant's website from the Venmo app includes encoding the details of the purchase in the hash of the url. The callback is invoked and the hash is pulled off from the event payload. The reason we pull the hash off of the event payload instead of pulling it directly from the URL is because sometimes a single page app will use the hash parameter for it's routing system, and it's possible to hit a race condition where the routing code has already removed the Venmo specific attributes from the hash before we are able to pull it off the url. Grabbing the hash from the event handler instead ensures we get the Venmo details, no matter what the url is converted to.\n * 2. The other scenario is for browsers that cannot return to the same tab, and instead the Venmo app must open a new tab. Since there is no hash listener to pull the hash from, we pull the hash details directly from the url using the `getFragmentParameters` method.\n *\n * @ignore\n * @param {string} [hash] Optionally provided browser url hash.\n * @returns {Promise} Returns a promise\n */\nVenmo.prototype.processHashChangeFlowResults = function (hash) {\n  var self = this;\n  var params = getFragmentParameters(hash);\n\n  // NEXT_MAJOR_VERSION only rely on payment context status call and stop relying on the\n  // content of the hash\n\n  return new Promise(function (resolve, reject) {\n    if (!self._shouldUseLegacyFlow) {\n      self\n        ._pollForStatusChange()\n        .then(function (payload) {\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.appswitch.handle.payment-context-status-query.success\"\n          );\n\n          return resolve({\n            paymentMethodNonce: payload.paymentMethodId,\n            username: payload.userName,\n            payerInfo: payload.payerInfo,\n            id: self._venmoPaymentContextId,\n          });\n        })\n        .catch(function (err) {\n          if (\n            err.type === errors.VENMO_MOBILE_POLLING_TOKENIZATION_CANCELED.type\n          ) {\n            // We want to reject in this case because if it the process was canceled, we don't want to take the happy path\n            reject(err);\n          }\n\n          analytics.sendEvent(\n            self._createPromise,\n            \"venmo.process-results.payment-context-status-query-failed\"\n          );\n          // If the polling request fails, but not because of cancelization, we will rely on the params provided from the hash\n          resolve(params);\n        });\n    } else if (params.venmoSuccess) {\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.appswitch.handle.success\"\n      );\n\n      resolve(params);\n    } else if (params.venmoError) {\n      analytics.sendEvent(self._createPromise, \"venmo.appswitch.handle.error\");\n      reject(\n        new BraintreeError({\n          type: errors.VENMO_APP_FAILED.type,\n          code: errors.VENMO_APP_FAILED.code,\n          message: errors.VENMO_APP_FAILED.message,\n          details: {\n            originalError: {\n              message: decodeURIComponent(params.errorMessage),\n              code: params.errorCode,\n            },\n          },\n        })\n      );\n    } else if (params.venmoCancel) {\n      analytics.sendEvent(self._createPromise, \"venmo.appswitch.handle.cancel\");\n      reject(new BraintreeError(errors.VENMO_APP_CANCELED));\n    } else {\n      // User has either manually switched back to browser, or app is not available for app switch\n      analytics.sendEvent(\n        self._createPromise,\n        \"venmo.appswitch.cancel-or-unavailable\"\n      );\n      reject(new BraintreeError(errors.VENMO_CANCELED));\n    }\n\n    self._clearFragmentParameters();\n  });\n};\n\nVenmo.prototype._clearFragmentParameters = function () {\n  if (this._ignoreHistoryChanges) {\n    return;\n  }\n\n  if (\n    typeof window.history.replaceState === \"function\" &&\n    window.location.hash\n  ) {\n    history.pushState(\n      {},\n      \"\",\n      window.location.href.slice(0, window.location.href.indexOf(\"#\"))\n    );\n  }\n};\n\nfunction getFragmentParameters(hash) {\n  var keyValuesArray = (hash || window.location.hash.substring(1)).split(\"&\");\n\n  var parsedParams = keyValuesArray.reduce(function (toReturn, keyValue) {\n    var parts = keyValue.split(\"=\");\n    // some Single Page Apps may pre-pend a / to the first value\n    // in the hash, assuming it's a route in their app\n    // instead of information from Venmo, this removes all\n    // non-alphanumeric characters from the keys in the params\n    var decodedKey = decodeURIComponent(parts[0]).replace(/\\W/g, \"\");\n    var key = snakeCaseToCamelCase(decodedKey);\n    var value = decodeURIComponent(parts[1]);\n\n    toReturn[key] = value;\n\n    return toReturn;\n  }, {});\n\n  if (parsedParams.resourceId) {\n    parsedParams.id = parsedParams.resourceId;\n  }\n\n  return parsedParams;\n}\n\nfunction formatUserName(username) {\n  username = username || \"\";\n\n  // NEXT_MAJOR_VERSION the web sdks have a prepended @ sign\n  // but the ios and android ones do not. This should be standardized\n  return \"@\" + username.replace(\"@\", \"\");\n}\n\nfunction formatTokenizePayload(payload) {\n  var formattedPayload = {\n    nonce: payload.paymentMethodNonce,\n    type: \"VenmoAccount\",\n    details: {\n      username: formatUserName(payload.username),\n      paymentContextId: payload.id,\n    },\n  };\n\n  if (payload.payerInfo) {\n    formattedPayload.details.payerInfo = payload.payerInfo;\n    formattedPayload.details.payerInfo.userName = formatUserName(\n      payload.payerInfo.userName\n    );\n  }\n\n  return formattedPayload;\n}\n\n// From https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API\nfunction documentVisibilityChangeEventName() {\n  var visibilityChange;\n\n  if (typeof window.document.hidden !== \"undefined\") {\n    // Opera 12.10 and Firefox 18 and later support\n    visibilityChange = \"visibilitychange\";\n  } else if (typeof window.document.msHidden !== \"undefined\") {\n    visibilityChange = \"msvisibilitychange\";\n  } else if (typeof window.document.webkitHidden !== \"undefined\") {\n    visibilityChange = \"webkitvisibilitychange\";\n  }\n\n  return visibilityChange;\n}\n\nfunction isIosWebviewInDeepLinkReturnUrlFlow() {\n  // we know it's a webview because this flow only gets\n  // used when checking the deep link flow\n  // test the platform here to get around custom useragents\n  return (\n    window.navigator.platform &&\n    /iPhone|iPad|iPod/.test(window.navigator.platform)\n  );\n}\n\nmodule.exports = wrapPromise.wrapPrototype(Venmo);\n\n},{\"../lib/analytics\":94,\"../lib/braintree-error\":99,\"../lib/convert-methods-to-error\":101,\"../lib/in-iframe\":124,\"../lib/is-verified-domain\":127,\"../lib/methods\":129,\"../lib/promise\":131,\"../lib/querystring\":132,\"../lib/snake-case-to-camel-case\":134,\"./external/\":156,\"./external/queries\":157,\"./shared/browser-detection\":160,\"./shared/constants\":161,\"./shared/errors\":162,\"./shared/get-venmo-url\":164,\"./shared/supports-venmo\":165,\"./shared/web-login-backdrop\":166,\"@braintree/extended-promise\":42,\"@braintree/wrap-promise\":51}],168:[function(require,module,exports){\n\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar cardTypes = require(\"./lib/card-types\");\nvar add_matching_cards_to_results_1 = require(\"./lib/add-matching-cards-to-results\");\nvar is_valid_input_type_1 = require(\"./lib/is-valid-input-type\");\nvar find_best_match_1 = require(\"./lib/find-best-match\");\nvar clone_1 = require(\"./lib/clone\");\nvar customCards = {};\nvar cardNames = {\n    VISA: \"visa\",\n    MASTERCARD: \"mastercard\",\n    AMERICAN_EXPRESS: \"american-express\",\n    DINERS_CLUB: \"diners-club\",\n    DISCOVER: \"discover\",\n    JCB: \"jcb\",\n    UNIONPAY: \"unionpay\",\n    MAESTRO: \"maestro\",\n    ELO: \"elo\",\n    MIR: \"mir\",\n    HIPER: \"hiper\",\n    HIPERCARD: \"hipercard\",\n};\nvar ORIGINAL_TEST_ORDER = [\n    cardNames.VISA,\n    cardNames.MASTERCARD,\n    cardNames.AMERICAN_EXPRESS,\n    cardNames.DINERS_CLUB,\n    cardNames.DISCOVER,\n    cardNames.JCB,\n    cardNames.UNIONPAY,\n    cardNames.MAESTRO,\n    cardNames.ELO,\n    cardNames.MIR,\n    cardNames.HIPER,\n    cardNames.HIPERCARD,\n];\nvar testOrder = clone_1.clone(ORIGINAL_TEST_ORDER);\nfunction findType(cardType) {\n    return customCards[cardType] || cardTypes[cardType];\n}\nfunction getAllCardTypes() {\n    return testOrder.map(function (cardType) { return clone_1.clone(findType(cardType)); });\n}\nfunction getCardPosition(name, ignoreErrorForNotExisting) {\n    if (ignoreErrorForNotExisting === void 0) { ignoreErrorForNotExisting = false; }\n    var position = testOrder.indexOf(name);\n    if (!ignoreErrorForNotExisting && position === -1) {\n        throw new Error('\"' + name + '\" is not a supported card type.');\n    }\n    return position;\n}\nfunction creditCardType(cardNumber) {\n    var results = [];\n    if (!is_valid_input_type_1.isValidInputType(cardNumber)) {\n        return results;\n    }\n    if (cardNumber.length === 0) {\n        return getAllCardTypes();\n    }\n    testOrder.forEach(function (cardType) {\n        var cardConfiguration = findType(cardType);\n        add_matching_cards_to_results_1.addMatchingCardsToResults(cardNumber, cardConfiguration, results);\n    });\n    var bestMatch = find_best_match_1.findBestMatch(results);\n    if (bestMatch) {\n        return [bestMatch];\n    }\n    return results;\n}\ncreditCardType.getTypeInfo = function (cardType) {\n    return clone_1.clone(findType(cardType));\n};\ncreditCardType.removeCard = function (name) {\n    var position = getCardPosition(name);\n    testOrder.splice(position, 1);\n};\ncreditCardType.addCard = function (config) {\n    var existingCardPosition = getCardPosition(config.type, true);\n    customCards[config.type] = config;\n    if (existingCardPosition === -1) {\n        testOrder.push(config.type);\n    }\n};\ncreditCardType.updateCard = function (cardType, updates) {\n    var originalObject = customCards[cardType] || cardTypes[cardType];\n    if (!originalObject) {\n        throw new Error(\"\\\"\" + cardType + \"\\\" is not a recognized type. Use `addCard` instead.'\");\n    }\n    if (updates.type && originalObject.type !== updates.type) {\n        throw new Error(\"Cannot overwrite type parameter.\");\n    }\n    var clonedCard = clone_1.clone(originalObject);\n    clonedCard = __assign(__assign({}, clonedCard), updates);\n    customCards[clonedCard.type] = clonedCard;\n};\ncreditCardType.changeOrder = function (name, position) {\n    var currentPosition = getCardPosition(name);\n    testOrder.splice(currentPosition, 1);\n    testOrder.splice(position, 0, name);\n};\ncreditCardType.resetModifications = function () {\n    testOrder = clone_1.clone(ORIGINAL_TEST_ORDER);\n    customCards = {};\n};\ncreditCardType.types = cardNames;\nmodule.exports = creditCardType;\n\n},{\"./lib/add-matching-cards-to-results\":169,\"./lib/card-types\":170,\"./lib/clone\":171,\"./lib/find-best-match\":172,\"./lib/is-valid-input-type\":173}],169:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.addMatchingCardsToResults = void 0;\nvar clone_1 = require(\"./clone\");\nvar matches_1 = require(\"./matches\");\nfunction addMatchingCardsToResults(cardNumber, cardConfiguration, results) {\n    var i, patternLength;\n    for (i = 0; i < cardConfiguration.patterns.length; i++) {\n        var pattern = cardConfiguration.patterns[i];\n        if (!matches_1.matches(cardNumber, pattern)) {\n            continue;\n        }\n        var clonedCardConfiguration = clone_1.clone(cardConfiguration);\n        if (Array.isArray(pattern)) {\n            patternLength = String(pattern[0]).length;\n        }\n        else {\n            patternLength = String(pattern).length;\n        }\n        if (cardNumber.length >= patternLength) {\n            clonedCardConfiguration.matchStrength = patternLength;\n        }\n        results.push(clonedCardConfiguration);\n        break;\n    }\n}\nexports.addMatchingCardsToResults = addMatchingCardsToResults;\n\n},{\"./clone\":171,\"./matches\":174}],170:[function(require,module,exports){\n\"use strict\";\nvar cardTypes = {\n    visa: {\n        niceType: \"Visa\",\n        type: \"visa\",\n        patterns: [4],\n        gaps: [4, 8, 12],\n        lengths: [16, 18, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    mastercard: {\n        niceType: \"Mastercard\",\n        type: \"mastercard\",\n        patterns: [[51, 55], [2221, 2229], [223, 229], [23, 26], [270, 271], 2720],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    \"american-express\": {\n        niceType: \"American Express\",\n        type: \"american-express\",\n        patterns: [34, 37],\n        gaps: [4, 10],\n        lengths: [15],\n        code: {\n            name: \"CID\",\n            size: 4,\n        },\n    },\n    \"diners-club\": {\n        niceType: \"Diners Club\",\n        type: \"diners-club\",\n        patterns: [[300, 305], 36, 38, 39],\n        gaps: [4, 10],\n        lengths: [14, 16, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    discover: {\n        niceType: \"Discover\",\n        type: \"discover\",\n        patterns: [6011, [644, 649], 65],\n        gaps: [4, 8, 12],\n        lengths: [16, 19],\n        code: {\n            name: \"CID\",\n            size: 3,\n        },\n    },\n    jcb: {\n        niceType: \"JCB\",\n        type: \"jcb\",\n        patterns: [2131, 1800, [3528, 3589]],\n        gaps: [4, 8, 12],\n        lengths: [16, 17, 18, 19],\n        code: {\n            name: \"CVV\",\n            size: 3,\n        },\n    },\n    unionpay: {\n        niceType: \"UnionPay\",\n        type: \"unionpay\",\n        patterns: [\n            620,\n            [624, 626],\n            [62100, 62182],\n            [62184, 62187],\n            [62185, 62197],\n            [62200, 62205],\n            [622010, 622999],\n            622018,\n            [622019, 622999],\n            [62207, 62209],\n            [622126, 622925],\n            [623, 626],\n            6270,\n            6272,\n            6276,\n            [627700, 627779],\n            [627781, 627799],\n            [6282, 6289],\n            6291,\n            6292,\n            810,\n            [8110, 8131],\n            [8132, 8151],\n            [8152, 8163],\n            [8164, 8171],\n        ],\n        gaps: [4, 8, 12],\n        lengths: [14, 15, 16, 17, 18, 19],\n        code: {\n            name: \"CVN\",\n            size: 3,\n        },\n    },\n    maestro: {\n        niceType: \"Maestro\",\n        type: \"maestro\",\n        patterns: [\n            493698,\n            [500000, 504174],\n            [504176, 506698],\n            [506779, 508999],\n            [56, 59],\n            63,\n            67,\n            6,\n        ],\n        gaps: [4, 8, 12],\n        lengths: [12, 13, 14, 15, 16, 17, 18, 19],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    elo: {\n        niceType: \"Elo\",\n        type: \"elo\",\n        patterns: [\n            401178,\n            401179,\n            438935,\n            457631,\n            457632,\n            431274,\n            451416,\n            457393,\n            504175,\n            [506699, 506778],\n            [509000, 509999],\n            627780,\n            636297,\n            636368,\n            [650031, 650033],\n            [650035, 650051],\n            [650405, 650439],\n            [650485, 650538],\n            [650541, 650598],\n            [650700, 650718],\n            [650720, 650727],\n            [650901, 650978],\n            [651652, 651679],\n            [655000, 655019],\n            [655021, 655058],\n        ],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVE\",\n            size: 3,\n        },\n    },\n    mir: {\n        niceType: \"Mir\",\n        type: \"mir\",\n        patterns: [[2200, 2204]],\n        gaps: [4, 8, 12],\n        lengths: [16, 17, 18, 19],\n        code: {\n            name: \"CVP2\",\n            size: 3,\n        },\n    },\n    hiper: {\n        niceType: \"Hiper\",\n        type: \"hiper\",\n        patterns: [637095, 63737423, 63743358, 637568, 637599, 637609, 637612],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n    hipercard: {\n        niceType: \"Hipercard\",\n        type: \"hipercard\",\n        patterns: [606282],\n        gaps: [4, 8, 12],\n        lengths: [16],\n        code: {\n            name: \"CVC\",\n            size: 3,\n        },\n    },\n};\nmodule.exports = cardTypes;\n\n},{}],171:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clone = void 0;\nfunction clone(originalObject) {\n    if (!originalObject) {\n        return null;\n    }\n    return JSON.parse(JSON.stringify(originalObject));\n}\nexports.clone = clone;\n\n},{}],172:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.findBestMatch = void 0;\nfunction hasEnoughResultsToDetermineBestMatch(results) {\n    var numberOfResultsWithMaxStrengthProperty = results.filter(function (result) { return result.matchStrength; }).length;\n    /*\n     * if all possible results have a maxStrength property that means the card\n     * number is sufficiently long enough to determine conclusively what the card\n     * type is\n     * */\n    return (numberOfResultsWithMaxStrengthProperty > 0 &&\n        numberOfResultsWithMaxStrengthProperty === results.length);\n}\nfunction findBestMatch(results) {\n    if (!hasEnoughResultsToDetermineBestMatch(results)) {\n        return null;\n    }\n    return results.reduce(function (bestMatch, result) {\n        if (!bestMatch) {\n            return result;\n        }\n        /*\n         * If the current best match pattern is less specific than this result, set\n         * the result as the new best match\n         * */\n        if (Number(bestMatch.matchStrength) < Number(result.matchStrength)) {\n            return result;\n        }\n        return bestMatch;\n    });\n}\nexports.findBestMatch = findBestMatch;\n\n},{}],173:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidInputType = void 0;\nfunction isValidInputType(cardNumber) {\n    return typeof cardNumber === \"string\" || cardNumber instanceof String;\n}\nexports.isValidInputType = isValidInputType;\n\n},{}],174:[function(require,module,exports){\n\"use strict\";\n/*\n * Adapted from https://github.com/polvo-labs/card-type/blob/aaab11f80fa1939bccc8f24905a06ae3cd864356/src/cardType.js#L37-L42\n * */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.matches = void 0;\nfunction matchesRange(cardNumber, min, max) {\n    var maxLengthToCheck = String(min).length;\n    var substr = cardNumber.substr(0, maxLengthToCheck);\n    var integerRepresentationOfCardNumber = parseInt(substr, 10);\n    min = parseInt(String(min).substr(0, substr.length), 10);\n    max = parseInt(String(max).substr(0, substr.length), 10);\n    return (integerRepresentationOfCardNumber >= min &&\n        integerRepresentationOfCardNumber <= max);\n}\nfunction matchesPattern(cardNumber, pattern) {\n    pattern = String(pattern);\n    return (pattern.substring(0, cardNumber.length) ===\n        cardNumber.substring(0, pattern.length));\n}\nfunction matches(cardNumber, pattern) {\n    if (Array.isArray(pattern)) {\n        return matchesRange(cardNumber, pattern[0], pattern[1]);\n    }\n    return matchesPattern(cardNumber, pattern);\n}\nexports.matches = matches;\n\n},{}],175:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Framebus = void 0;\nvar is_not_string_1 = require(\"./lib/is-not-string\");\nvar subscription_args_invalid_1 = require(\"./lib/subscription-args-invalid\");\nvar broadcast_1 = require(\"./lib/broadcast\");\nvar package_payload_1 = require(\"./lib/package-payload\");\nvar send_message_1 = require(\"./lib/send-message\");\nvar constants_1 = require(\"./lib/constants\");\nvar DefaultPromise = (typeof window !== \"undefined\" &&\n    window.Promise);\nvar Framebus = /** @class */ (function () {\n    function Framebus(options) {\n        if (options === void 0) { options = {}; }\n        this.origin = options.origin || \"*\";\n        this.channel = options.channel || \"\";\n        this.verifyDomain = options.verifyDomain;\n        // if a targetFrames configuration is not passed in,\n        // the default behavior is to broadcast the payload\n        // to the top level window or to the frame itself.\n        // By default, the broadcast function will loop through\n        // all the known siblings and children of the window.\n        // If a targetFrames array is passed, it will instead\n        // only broadcast to those specified targetFrames\n        this.targetFrames = options.targetFrames || [];\n        this.limitBroadcastToFramesArray = Boolean(options.targetFrames);\n        this.isDestroyed = false;\n        this.listeners = [];\n        this.hasAdditionalChecksForOnListeners = Boolean(this.verifyDomain || this.limitBroadcastToFramesArray);\n    }\n    Framebus.setPromise = function (PromiseGlobal) {\n        Framebus.Promise = PromiseGlobal;\n    };\n    Framebus.target = function (options) {\n        return new Framebus(options);\n    };\n    Framebus.prototype.addTargetFrame = function (frame) {\n        if (!this.limitBroadcastToFramesArray) {\n            return;\n        }\n        this.targetFrames.push(frame);\n    };\n    Framebus.prototype.include = function (childWindow) {\n        if (childWindow == null) {\n            return false;\n        }\n        if (childWindow.Window == null) {\n            return false;\n        }\n        if (childWindow.constructor !== childWindow.Window) {\n            return false;\n        }\n        constants_1.childWindows.push(childWindow);\n        return true;\n    };\n    Framebus.prototype.target = function (options) {\n        return Framebus.target(options);\n    };\n    Framebus.prototype.emit = function (eventName, data, reply) {\n        if (this.isDestroyed) {\n            return false;\n        }\n        var origin = this.origin;\n        eventName = this.namespaceEvent(eventName);\n        if ((0, is_not_string_1.isntString)(eventName)) {\n            return false;\n        }\n        if ((0, is_not_string_1.isntString)(origin)) {\n            return false;\n        }\n        if (typeof data === \"function\") {\n            reply = data;\n            data = undefined; // eslint-disable-line no-undefined\n        }\n        var payload = (0, package_payload_1.packagePayload)(eventName, origin, data, reply);\n        if (!payload) {\n            return false;\n        }\n        if (this.limitBroadcastToFramesArray) {\n            this.targetFramesAsWindows().forEach(function (frame) {\n                (0, send_message_1.sendMessage)(frame, payload, origin);\n            });\n        }\n        else {\n            (0, broadcast_1.broadcast)(payload, {\n                origin: origin,\n                frame: window.top || window.self,\n            });\n        }\n        return true;\n    };\n    Framebus.prototype.emitAsPromise = function (eventName, data) {\n        var _this = this;\n        return new Framebus.Promise(function (resolve, reject) {\n            var didAttachListener = _this.emit(eventName, data, function (payload) {\n                resolve(payload);\n            });\n            if (!didAttachListener) {\n                reject(new Error(\"Listener not added for \\\"\".concat(eventName, \"\\\"\")));\n            }\n        });\n    };\n    Framebus.prototype.on = function (eventName, originalHandler) {\n        if (this.isDestroyed) {\n            return false;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        var self = this;\n        var origin = this.origin;\n        var handler = originalHandler;\n        eventName = this.namespaceEvent(eventName);\n        if ((0, subscription_args_invalid_1.subscriptionArgsInvalid)(eventName, handler, origin)) {\n            return false;\n        }\n        if (this.hasAdditionalChecksForOnListeners) {\n            /* eslint-disable no-invalid-this, @typescript-eslint/ban-ts-comment */\n            handler = function () {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                // @ts-ignore\n                if (!self.passesVerifyDomainCheck(this && this.origin)) {\n                    return;\n                }\n                // @ts-ignore\n                if (!self.hasMatchingTargetFrame(this && this.source)) {\n                    return;\n                }\n                originalHandler.apply(void 0, args);\n            };\n            /* eslint-enable no-invalid-this, @typescript-eslint/ban-ts-comment */\n        }\n        this.listeners.push({\n            eventName: eventName,\n            handler: handler,\n            originalHandler: originalHandler,\n        });\n        constants_1.subscribers[origin] = constants_1.subscribers[origin] || {};\n        constants_1.subscribers[origin][eventName] = constants_1.subscribers[origin][eventName] || [];\n        constants_1.subscribers[origin][eventName].push(handler);\n        return true;\n    };\n    Framebus.prototype.off = function (eventName, originalHandler) {\n        var handler = originalHandler;\n        if (this.isDestroyed) {\n            return false;\n        }\n        if (this.verifyDomain) {\n            for (var i = 0; i < this.listeners.length; i++) {\n                var listener = this.listeners[i];\n                if (listener.originalHandler === originalHandler) {\n                    handler = listener.handler;\n                }\n            }\n        }\n        eventName = this.namespaceEvent(eventName);\n        var origin = this.origin;\n        if ((0, subscription_args_invalid_1.subscriptionArgsInvalid)(eventName, handler, origin)) {\n            return false;\n        }\n        var subscriberList = constants_1.subscribers[origin] && constants_1.subscribers[origin][eventName];\n        if (!subscriberList) {\n            return false;\n        }\n        for (var i = 0; i < subscriberList.length; i++) {\n            if (subscriberList[i] === handler) {\n                subscriberList.splice(i, 1);\n                return true;\n            }\n        }\n        return false;\n    };\n    Framebus.prototype.teardown = function () {\n        if (this.isDestroyed) {\n            return;\n        }\n        this.isDestroyed = true;\n        for (var i = 0; i < this.listeners.length; i++) {\n            var listener = this.listeners[i];\n            this.off(listener.eventName, listener.handler);\n        }\n        this.listeners.length = 0;\n    };\n    Framebus.prototype.passesVerifyDomainCheck = function (origin) {\n        if (!this.verifyDomain) {\n            // always pass this check if no verifyDomain option was set\n            return true;\n        }\n        return this.checkOrigin(origin);\n    };\n    Framebus.prototype.targetFramesAsWindows = function () {\n        if (!this.limitBroadcastToFramesArray) {\n            return [];\n        }\n        return this.targetFrames\n            .map(function (frame) {\n            // we can't pull off the contentWindow\n            // when the iframe is originally added\n            // to the array, because if it is not\n            // in the DOM at that time, it will have\n            // a contentWindow of `null`\n            if (frame instanceof HTMLIFrameElement) {\n                return frame.contentWindow;\n            }\n            return frame;\n        })\n            .filter(function (win) {\n            // just in case an iframe element\n            // was removed from the DOM\n            // and the contentWindow property\n            // is null\n            return win;\n        });\n    };\n    Framebus.prototype.hasMatchingTargetFrame = function (source) {\n        if (!this.limitBroadcastToFramesArray) {\n            // always pass this check if we aren't limiting to the target frames\n            return true;\n        }\n        var matchingFrame = this.targetFramesAsWindows().find(function (frame) {\n            return frame === source;\n        });\n        return Boolean(matchingFrame);\n    };\n    Framebus.prototype.checkOrigin = function (postMessageOrigin) {\n        var merchantHost;\n        var a = document.createElement(\"a\");\n        a.href = location.href;\n        if (a.protocol === \"https:\") {\n            merchantHost = a.host.replace(/:443$/, \"\");\n        }\n        else if (a.protocol === \"http:\") {\n            merchantHost = a.host.replace(/:80$/, \"\");\n        }\n        else {\n            merchantHost = a.host;\n        }\n        var merchantOrigin = a.protocol + \"//\" + merchantHost;\n        if (merchantOrigin === postMessageOrigin) {\n            return true;\n        }\n        if (this.verifyDomain) {\n            return this.verifyDomain(postMessageOrigin);\n        }\n        return true;\n    };\n    Framebus.prototype.namespaceEvent = function (eventName) {\n        if (!this.channel) {\n            return eventName;\n        }\n        return \"\".concat(this.channel, \":\").concat(eventName);\n    };\n    Framebus.Promise = DefaultPromise;\n    return Framebus;\n}());\nexports.Framebus = Framebus;\n\n},{\"./lib/broadcast\":179,\"./lib/constants\":180,\"./lib/is-not-string\":183,\"./lib/package-payload\":185,\"./lib/send-message\":186,\"./lib/subscription-args-invalid\":188}],176:[function(require,module,exports){\n\"use strict\";\nvar attach_1 = require(\"./lib/attach\");\nvar framebus_1 = require(\"./framebus\");\n(0, attach_1.attach)();\nmodule.exports = framebus_1.Framebus;\n\n},{\"./framebus\":175,\"./lib/attach\":177}],177:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.detach = exports.attach = void 0;\nvar message_1 = require(\"./message\");\nvar isAttached = false;\nfunction attach() {\n    if (isAttached || typeof window === \"undefined\") {\n        return;\n    }\n    isAttached = true;\n    window.addEventListener(\"message\", message_1.onmessage, false);\n}\nexports.attach = attach;\n// removeIf(production)\nfunction detach() {\n    isAttached = false;\n    window.removeEventListener(\"message\", message_1.onmessage, false);\n}\nexports.detach = detach;\n// endRemoveIf(production)\n\n},{\"./message\":184}],178:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.broadcastToChildWindows = void 0;\nvar broadcast_1 = require(\"./broadcast\");\nvar constants_1 = require(\"./constants\");\nfunction broadcastToChildWindows(payload, origin, source) {\n    for (var i = constants_1.childWindows.length - 1; i >= 0; i--) {\n        var childWindow = constants_1.childWindows[i];\n        if (childWindow.closed) {\n            constants_1.childWindows.splice(i, 1);\n        }\n        else if (source !== childWindow) {\n            (0, broadcast_1.broadcast)(payload, {\n                origin: origin,\n                frame: childWindow.top,\n            });\n        }\n    }\n}\nexports.broadcastToChildWindows = broadcastToChildWindows;\n\n},{\"./broadcast\":179,\"./constants\":180}],179:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.broadcast = void 0;\nvar has_opener_1 = require(\"./has-opener\");\nfunction broadcast(payload, options) {\n    var i = 0;\n    var frameToBroadcastTo;\n    var origin = options.origin, frame = options.frame;\n    try {\n        frame.postMessage(payload, origin);\n        if ((0, has_opener_1.hasOpener)(frame) && frame.opener.top !== window.top) {\n            broadcast(payload, {\n                origin: origin,\n                frame: frame.opener.top,\n            });\n        }\n        // previously, our max value was frame.frames.length\n        // but frames.length inherits from window.length\n        // which can be overwritten if a developer does\n        // `var length = value;` outside of a function\n        // scope, it'll prevent us from looping through\n        // all the frames. With this, we loop through\n        // until there are no longer any frames\n        // eslint-disable-next-line no-cond-assign\n        while ((frameToBroadcastTo = frame.frames[i])) {\n            broadcast(payload, {\n                origin: origin,\n                frame: frameToBroadcastTo,\n            });\n            i++;\n        }\n    }\n    catch (_) {\n        /* ignored */\n    }\n}\nexports.broadcast = broadcast;\n\n},{\"./has-opener\":182}],180:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscribers = exports.childWindows = exports.prefix = void 0;\nexports.prefix = \"/*framebus*/\";\nexports.childWindows = [];\nexports.subscribers = {};\n\n},{}],181:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dispatch = void 0;\nvar constants_1 = require(\"./constants\");\nfunction dispatch(origin, event, data, reply, e) {\n    if (!constants_1.subscribers[origin]) {\n        return;\n    }\n    if (!constants_1.subscribers[origin][event]) {\n        return;\n    }\n    var args = [];\n    if (data) {\n        args.push(data);\n    }\n    if (reply) {\n        args.push(reply);\n    }\n    for (var i = 0; i < constants_1.subscribers[origin][event].length; i++) {\n        constants_1.subscribers[origin][event][i].apply(e, args);\n    }\n}\nexports.dispatch = dispatch;\n\n},{\"./constants\":180}],182:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasOpener = void 0;\nfunction hasOpener(frame) {\n    if (frame.top !== frame) {\n        return false;\n    }\n    if (frame.opener == null) {\n        return false;\n    }\n    if (frame.opener === frame) {\n        return false;\n    }\n    if (frame.opener.closed === true) {\n        return false;\n    }\n    return true;\n}\nexports.hasOpener = hasOpener;\n\n},{}],183:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isntString = void 0;\nfunction isntString(str) {\n    return typeof str !== \"string\";\n}\nexports.isntString = isntString;\n\n},{}],184:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.onmessage = void 0;\nvar is_not_string_1 = require(\"./is-not-string\");\nvar unpack_payload_1 = require(\"./unpack-payload\");\nvar dispatch_1 = require(\"./dispatch\");\nvar broadcast_to_child_windows_1 = require(\"./broadcast-to-child-windows\");\nfunction onmessage(e) {\n    if ((0, is_not_string_1.isntString)(e.data)) {\n        return;\n    }\n    var payload = (0, unpack_payload_1.unpackPayload)(e);\n    if (!payload) {\n        return;\n    }\n    var data = payload.eventData;\n    var reply = payload.reply;\n    (0, dispatch_1.dispatch)(\"*\", payload.event, data, reply, e);\n    (0, dispatch_1.dispatch)(e.origin, payload.event, data, reply, e);\n    (0, broadcast_to_child_windows_1.broadcastToChildWindows)(e.data, payload.origin, e.source);\n}\nexports.onmessage = onmessage;\n\n},{\"./broadcast-to-child-windows\":178,\"./dispatch\":181,\"./is-not-string\":183,\"./unpack-payload\":189}],185:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.packagePayload = void 0;\nvar subscribe_replier_1 = require(\"./subscribe-replier\");\nvar constants_1 = require(\"./constants\");\nfunction packagePayload(event, origin, data, reply) {\n    var packaged;\n    var payload = {\n        event: event,\n        origin: origin,\n    };\n    if (typeof reply === \"function\") {\n        payload.reply = (0, subscribe_replier_1.subscribeReplier)(reply, origin);\n    }\n    payload.eventData = data;\n    try {\n        packaged = constants_1.prefix + JSON.stringify(payload);\n    }\n    catch (e) {\n        throw new Error(\"Could not stringify event: \".concat(e.message));\n    }\n    return packaged;\n}\nexports.packagePayload = packagePayload;\n\n},{\"./constants\":180,\"./subscribe-replier\":187}],186:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sendMessage = void 0;\n/**\n * A basic function for wrapping the sending of postMessages to frames.\n */\nfunction sendMessage(frame, payload, origin) {\n    try {\n        frame.postMessage(payload, origin);\n    }\n    catch (error) {\n        /* ignored */\n    }\n}\nexports.sendMessage = sendMessage;\n\n},{}],187:[function(require,module,exports){\n\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscribeReplier = void 0;\nvar framebus_1 = require(\"../framebus\");\nvar uuid_1 = __importDefault(require(\"@braintree/uuid\"));\nfunction subscribeReplier(fn, origin) {\n    var uuid = (0, uuid_1.default)();\n    function replier(data, replyOriginHandler) {\n        fn(data, replyOriginHandler);\n        framebus_1.Framebus.target({\n            origin: origin,\n        }).off(uuid, replier);\n    }\n    framebus_1.Framebus.target({\n        origin: origin,\n    }).on(uuid, replier);\n    return uuid;\n}\nexports.subscribeReplier = subscribeReplier;\n\n},{\"../framebus\":175,\"@braintree/uuid\":47}],188:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.subscriptionArgsInvalid = void 0;\nvar is_not_string_1 = require(\"./is-not-string\");\nfunction subscriptionArgsInvalid(event, fn, origin) {\n    if ((0, is_not_string_1.isntString)(event)) {\n        return true;\n    }\n    if (typeof fn !== \"function\") {\n        return true;\n    }\n    return (0, is_not_string_1.isntString)(origin);\n}\nexports.subscriptionArgsInvalid = subscriptionArgsInvalid;\n\n},{\"./is-not-string\":183}],189:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.unpackPayload = void 0;\nvar constants_1 = require(\"./constants\");\nvar package_payload_1 = require(\"./package-payload\");\nfunction unpackPayload(e) {\n    var payload;\n    if (e.data.slice(0, constants_1.prefix.length) !== constants_1.prefix) {\n        return false;\n    }\n    try {\n        payload = JSON.parse(e.data.slice(constants_1.prefix.length));\n    }\n    catch (err) {\n        return false;\n    }\n    if (payload.reply) {\n        var replyOrigin_1 = e.origin;\n        var replySource_1 = e.source;\n        var replyEvent_1 = payload.reply;\n        payload.reply = function reply(replyData) {\n            if (!replySource_1) {\n                return;\n            }\n            var replyPayload = (0, package_payload_1.packagePayload)(replyEvent_1, replyOrigin_1, replyData);\n            if (!replyPayload) {\n                return;\n            }\n            replySource_1.postMessage(replyPayload, replyOrigin_1);\n        };\n    }\n    return payload;\n}\nexports.unpackPayload = unpackPayload;\n\n},{\"./constants\":180,\"./package-payload\":185}],190:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],191:[function(require,module,exports){\n(function (setImmediate){(function (){\n'use strict';\n\n/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n  var constructor = this.constructor;\n  return this.then(\n    function(value) {\n      // @ts-ignore\n      return constructor.resolve(callback()).then(function() {\n        return value;\n      });\n    },\n    function(reason) {\n      // @ts-ignore\n      return constructor.resolve(callback()).then(function() {\n        // @ts-ignore\n        return constructor.reject(reason);\n      });\n    }\n  );\n}\n\nfunction allSettled(arr) {\n  var P = this;\n  return new P(function(resolve, reject) {\n    if (!(arr && typeof arr.length !== 'undefined')) {\n      return reject(\n        new TypeError(\n          typeof arr +\n            ' ' +\n            arr +\n            ' is not iterable(cannot read property Symbol(Symbol.iterator))'\n        )\n      );\n    }\n    var args = Array.prototype.slice.call(arr);\n    if (args.length === 0) return resolve([]);\n    var remaining = args.length;\n\n    function res(i, val) {\n      if (val && (typeof val === 'object' || typeof val === 'function')) {\n        var then = val.then;\n        if (typeof then === 'function') {\n          then.call(\n            val,\n            function(val) {\n              res(i, val);\n            },\n            function(e) {\n              args[i] = { status: 'rejected', reason: e };\n              if (--remaining === 0) {\n                resolve(args);\n              }\n            }\n          );\n          return;\n        }\n      }\n      args[i] = { status: 'fulfilled', value: val };\n      if (--remaining === 0) {\n        resolve(args);\n      }\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i]);\n    }\n  });\n}\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction isArray(x) {\n  return Boolean(x && typeof x.length !== 'undefined');\n}\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n  return function() {\n    fn.apply(thisArg, arguments);\n  };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n  if (!(this instanceof Promise))\n    throw new TypeError('Promises must be constructed via new');\n  if (typeof fn !== 'function') throw new TypeError('not a function');\n  /** @type {!number} */\n  this._state = 0;\n  /** @type {!boolean} */\n  this._handled = false;\n  /** @type {Promise|undefined} */\n  this._value = undefined;\n  /** @type {!Array<!Function>} */\n  this._deferreds = [];\n\n  doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n  while (self._state === 3) {\n    self = self._value;\n  }\n  if (self._state === 0) {\n    self._deferreds.push(deferred);\n    return;\n  }\n  self._handled = true;\n  Promise._immediateFn(function() {\n    var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n    if (cb === null) {\n      (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n      return;\n    }\n    var ret;\n    try {\n      ret = cb(self._value);\n    } catch (e) {\n      reject(deferred.promise, e);\n      return;\n    }\n    resolve(deferred.promise, ret);\n  });\n}\n\nfunction resolve(self, newValue) {\n  try {\n    // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n    if (newValue === self)\n      throw new TypeError('A promise cannot be resolved with itself.');\n    if (\n      newValue &&\n      (typeof newValue === 'object' || typeof newValue === 'function')\n    ) {\n      var then = newValue.then;\n      if (newValue instanceof Promise) {\n        self._state = 3;\n        self._value = newValue;\n        finale(self);\n        return;\n      } else if (typeof then === 'function') {\n        doResolve(bind(then, newValue), self);\n        return;\n      }\n    }\n    self._state = 1;\n    self._value = newValue;\n    finale(self);\n  } catch (e) {\n    reject(self, e);\n  }\n}\n\nfunction reject(self, newValue) {\n  self._state = 2;\n  self._value = newValue;\n  finale(self);\n}\n\nfunction finale(self) {\n  if (self._state === 2 && self._deferreds.length === 0) {\n    Promise._immediateFn(function() {\n      if (!self._handled) {\n        Promise._unhandledRejectionFn(self._value);\n      }\n    });\n  }\n\n  for (var i = 0, len = self._deferreds.length; i < len; i++) {\n    handle(self, self._deferreds[i]);\n  }\n  self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n  this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n  this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n  var done = false;\n  try {\n    fn(\n      function(value) {\n        if (done) return;\n        done = true;\n        resolve(self, value);\n      },\n      function(reason) {\n        if (done) return;\n        done = true;\n        reject(self, reason);\n      }\n    );\n  } catch (ex) {\n    if (done) return;\n    done = true;\n    reject(self, ex);\n  }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n  return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n  // @ts-ignore\n  var prom = new this.constructor(noop);\n\n  handle(this, new Handler(onFulfilled, onRejected, prom));\n  return prom;\n};\n\nPromise.prototype['finally'] = finallyConstructor;\n\nPromise.all = function(arr) {\n  return new Promise(function(resolve, reject) {\n    if (!isArray(arr)) {\n      return reject(new TypeError('Promise.all accepts an array'));\n    }\n\n    var args = Array.prototype.slice.call(arr);\n    if (args.length === 0) return resolve([]);\n    var remaining = args.length;\n\n    function res(i, val) {\n      try {\n        if (val && (typeof val === 'object' || typeof val === 'function')) {\n          var then = val.then;\n          if (typeof then === 'function') {\n            then.call(\n              val,\n              function(val) {\n                res(i, val);\n              },\n              reject\n            );\n            return;\n          }\n        }\n        args[i] = val;\n        if (--remaining === 0) {\n          resolve(args);\n        }\n      } catch (ex) {\n        reject(ex);\n      }\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i]);\n    }\n  });\n};\n\nPromise.allSettled = allSettled;\n\nPromise.resolve = function(value) {\n  if (value && typeof value === 'object' && value.constructor === Promise) {\n    return value;\n  }\n\n  return new Promise(function(resolve) {\n    resolve(value);\n  });\n};\n\nPromise.reject = function(value) {\n  return new Promise(function(resolve, reject) {\n    reject(value);\n  });\n};\n\nPromise.race = function(arr) {\n  return new Promise(function(resolve, reject) {\n    if (!isArray(arr)) {\n      return reject(new TypeError('Promise.race accepts an array'));\n    }\n\n    for (var i = 0, len = arr.length; i < len; i++) {\n      Promise.resolve(arr[i]).then(resolve, reject);\n    }\n  });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n  // @ts-ignore\n  (typeof setImmediate === 'function' &&\n    function(fn) {\n      // @ts-ignore\n      setImmediate(fn);\n    }) ||\n  function(fn) {\n    setTimeoutFunc(fn, 0);\n  };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n  if (typeof console !== 'undefined' && console) {\n    console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n  }\n};\n\nmodule.exports = Promise;\n\n}).call(this)}).call(this,require(\"timers\").setImmediate)\n},{\"timers\":195}],192:[function(require,module,exports){\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isIos = exports.isIE9 = exports.isSamsungBrowser = exports.isAndroidChrome = exports.isKitKatWebview = void 0;\n// server side rendering check\nvar UA = (typeof window !== \"undefined\" &&\n    window.navigator &&\n    window.navigator.userAgent);\n// TODO remove this when browser detection is converted to typescript\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n// @ts-ignore\nvar isAndroid = require(\"@braintree/browser-detection/is-android\");\n// @ts-ignore\nvar isChromeOs = require(\"@braintree/browser-detection/is-chrome-os\");\n// @ts-ignore\nvar isChrome = require(\"@braintree/browser-detection/is-chrome\");\n// @ts-ignore\nvar isIos = require(\"@braintree/browser-detection/is-ios\");\nexports.isIos = isIos;\n// @ts-ignore\nvar isIE9 = require(\"@braintree/browser-detection/is-ie9\");\nexports.isIE9 = isIE9;\n/* eslint-enable @typescript-eslint/ban-ts-comment */\n// Old Android Webviews used specific versions of Chrome with 0.0.0 as their version suffix\n// https://developer.chrome.com/multidevice/user-agent#webview_user_agent\nvar KITKAT_WEBVIEW_REGEX = /Version\\/\\d\\.\\d* Chrome\\/\\d*\\.0\\.0\\.0/;\nfunction isOldSamsungBrowserOrSamsungWebview(ua) {\n    return !isChrome(ua) && ua.indexOf(\"Samsung\") > -1;\n}\nfunction isKitKatWebview(ua) {\n    if (ua === void 0) { ua = UA; }\n    return isAndroid(ua) && KITKAT_WEBVIEW_REGEX.test(ua);\n}\nexports.isKitKatWebview = isKitKatWebview;\nfunction isAndroidChrome(ua) {\n    if (ua === void 0) { ua = UA; }\n    return (isAndroid(ua) || isChromeOs(ua)) && isChrome(ua);\n}\nexports.isAndroidChrome = isAndroidChrome;\nfunction isSamsungBrowser(ua) {\n    if (ua === void 0) { ua = UA; }\n    return /SamsungBrowser/.test(ua) || isOldSamsungBrowserOrSamsungWebview(ua);\n}\nexports.isSamsungBrowser = isSamsungBrowser;\n\n},{\"@braintree/browser-detection/is-android\":26,\"@braintree/browser-detection/is-chrome\":28,\"@braintree/browser-detection/is-chrome-os\":27,\"@braintree/browser-detection/is-ie9\":33,\"@braintree/browser-detection/is-ios\":37}],193:[function(require,module,exports){\n\"use strict\";\nvar device_1 = require(\"./lib/device\");\nmodule.exports = function supportsInputFormatting() {\n    // Digits get dropped in samsung browser\n    return !(0, device_1.isSamsungBrowser)();\n};\n\n},{\"./lib/device\":192}],194:[function(require,module,exports){\nmodule.exports = require(\"./dist/supports-input-formatting\");\n\n},{\"./dist/supports-input-formatting\":193}],195:[function(require,module,exports){\n(function (setImmediate,clearImmediate){(function (){\nvar nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n  var id = nextImmediateId++;\n  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n  immediateIds[id] = true;\n\n  nextTick(function onNextTick() {\n    if (immediateIds[id]) {\n      // fn.call() is faster so we optimize for the common use-case\n      // @see http://jsperf.com/call-apply-segu\n      if (args) {\n        fn.apply(null, args);\n      } else {\n        fn.call(null);\n      }\n      // Prevent ids from leaking\n      exports.clearImmediate(id);\n    }\n  });\n\n  return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n  delete immediateIds[id];\n};\n}).call(this)}).call(this,require(\"timers\").setImmediate,require(\"timers\").clearImmediate)\n},{\"process/browser.js\":190,\"timers\":195}],196:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  paymentOptionIDs: {\n    card: 'card',\n    paypal: 'paypal',\n    paypalCredit: 'paypalCredit',\n    applePay: 'applePay',\n    venmo: 'venmo',\n    googlePay: 'googlePay'\n  },\n  paymentMethodTypes: {\n    card: 'CreditCard',\n    paypal: 'PayPalAccount',\n    paypalCredit: 'PayPalAccount',\n    applePay: 'ApplePayCard',\n    venmo: 'VenmoAccount',\n    googlePay: 'AndroidPayCard'\n  },\n  analyticsKinds: {\n    CreditCard: 'card',\n    PayPalAccount: 'paypal',\n    ApplePayCard: 'applepay',\n    VenmoAccount: 'venmo',\n    AndroidPayCard: 'googlepay'\n  },\n  paymentMethodCardTypes: {\n    Visa: 'visa',\n    MasterCard: 'master-card',\n    'American Express': 'american-express',\n    'Diners Club': 'diners-club',\n    Discover: 'discover',\n    JCB: 'jcb',\n    UnionPay: 'unionpay',\n    Maestro: 'maestro',\n    Elo: 'elo',\n    Hiper: 'hiper',\n    Hipercard: 'hipercard'\n  },\n  configurationCardTypes: {\n    visa: 'Visa',\n    'master-card': 'MasterCard',\n    'american-express': 'American Express',\n    'diners-club': 'Discover',\n    discover: 'Discover',\n    jcb: 'JCB',\n    unionpay: 'UnionPay',\n    maestro: 'Maestro',\n    elo: 'Elo',\n    hiper: 'Hiper',\n    hipercard: 'Hipercard'\n  },\n  dependencySetupStates: {\n    DONE: 'done',\n    FAILED: 'failed',\n    INITIALIZING: 'initializing',\n    NOT_ENABLED: 'not-enabled'\n  },\n  errors: {\n    NO_PAYMENT_METHOD_ERROR: 'No payment method is available.',\n    DEVELOPER_MISCONFIGURATION_MESSAGE: 'Developer Error: Something went wrong. Check the console for details.'\n  },\n  ANALYTICS_REQUEST_TIMEOUT_MS: 2000,\n  ANALYTICS_PREFIX: 'web.dropin.',\n  CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT: 200,\n  CHECKOUT_JS_SOURCE: 'https://www.paypalobjects.com/api/checkout.min.js',\n  GOOGLE_PAYMENT_SOURCE: 'https://pay.google.com/gp/p/js/pay.js',\n  INTEGRATION: 'dropin2',\n  PAYPAL_CHECKOUT_SCRIPT_ID: 'braintree-dropin-paypal-checkout-script',\n  GOOGLE_PAYMENT_SCRIPT_ID: 'braintree-dropin-google-payment-script',\n  DATA_COLLECTOR_SCRIPT_ID: 'braintree-dropin-data-collector-script',\n  STYLESHEET_ID: 'braintree-dropin-stylesheet'\n};\n\n},{}],197:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('./lib/analytics');\nvar DropinError = require('./lib/dropin-error');\nvar EventEmitter = require('@braintree/event-emitter');\nvar constants = require('./constants');\nvar paymentMethodTypes = constants.paymentMethodTypes;\nvar paymentOptionIDs = constants.paymentOptionIDs;\nvar dependencySetupStates = constants.dependencySetupStates;\nvar isGuestCheckout = require('./lib/is-guest-checkout');\nvar Promise = require('./lib/promise');\nvar paymentSheetViews = require('./views/payment-sheet-views');\nvar vaultManager = require('braintree-web/vault-manager');\nvar paymentOptionsViewID = require('./views/payment-options-view').ID;\n\nvar VAULTED_PAYMENT_METHOD_TYPES_THAT_SHOULD_BE_HIDDEN = [\n  paymentMethodTypes.applePay,\n  paymentMethodTypes.googlePay,\n  paymentMethodTypes.venmo\n];\nvar DEFAULT_PAYMENT_OPTION_PRIORITY = [\n  paymentOptionIDs.card,\n  paymentOptionIDs.paypal,\n  paymentOptionIDs.paypalCredit,\n  paymentOptionIDs.venmo,\n  paymentOptionIDs.applePay,\n  paymentOptionIDs.googlePay\n];\nvar NON_PAYMENT_OPTION_DEPENDENCIES = ['threeDSecure', 'dataCollector'];\nvar ASYNC_DEPENDENCIES = DEFAULT_PAYMENT_OPTION_PRIORITY.concat(NON_PAYMENT_OPTION_DEPENDENCIES);\nvar DEPENDENCY_READY_CHECK_INTERVAL = 200;\n\nfunction DropinModel(options) {\n  this.rootNode = options.container;\n  this.componentID = options.componentID;\n  this.merchantConfiguration = options.merchantConfiguration;\n  this.isGuestCheckout = isGuestCheckout(options.client);\n  this.dependencyStates = ASYNC_DEPENDENCIES.reduce(function (total, dependencyKey) {\n    if (this._shouldIncludeDependency(dependencyKey)) {\n      total[dependencyKey] = dependencySetupStates.INITIALIZING;\n    }\n\n    return total;\n  }.bind(this), {});\n\n  this.failedDependencies = {};\n  this._options = options;\n  this._setupComplete = false;\n\n  while (this.rootNode.parentNode) {\n    this.rootNode = this.rootNode.parentNode;\n  }\n  this.isInShadowDom = this.rootNode.toString() === '[object ShadowRoot]';\n\n  EventEmitter.call(this);\n}\n\nEventEmitter.createChild(DropinModel);\n\nDropinModel.prototype.initialize = function () {\n  var dep;\n  var self = this;\n  var dependencyReadyInterval = setInterval(function () {\n    for (dep in self.dependencyStates) {\n      if (self.dependencyStates[dep] === dependencySetupStates.INITIALIZING) {\n        return;\n      }\n    }\n\n    clearInterval(dependencyReadyInterval);\n\n    self._emit('asyncDependenciesReady');\n  }, DEPENDENCY_READY_CHECK_INTERVAL);\n\n  return vaultManager.create({\n    client: self._options.client\n  }).then(function (vaultManagerInstance) {\n    self._vaultManager = vaultManagerInstance;\n\n    return self._getSupportedPaymentOptions(self._options);\n  }).then(function (paymentOptions) {\n    self.supportedPaymentOptions = paymentOptions;\n\n    return self.getVaultedPaymentMethods();\n  }).then(function (paymentMethods) {\n    self._paymentMethods = paymentMethods;\n    self._paymentMethodIsRequestable = self._paymentMethods.length > 0;\n  });\n};\n\nDropinModel.prototype.confirmDropinReady = function () {\n  this._setupComplete = true;\n};\n\nDropinModel.prototype.isPaymentMethodRequestable = function () {\n  return Boolean(this._paymentMethodIsRequestable);\n};\n\nDropinModel.prototype.addPaymentMethod = function (paymentMethod) {\n  this._paymentMethods.push(paymentMethod);\n  this._emit('addPaymentMethod', paymentMethod);\n  this.changeActivePaymentMethod(paymentMethod);\n};\n\nDropinModel.prototype.removePaymentMethod = function (paymentMethod) {\n  var paymentMethodLocation = this._paymentMethods.indexOf(paymentMethod);\n\n  if (paymentMethodLocation === -1) {\n    return;\n  }\n\n  this._paymentMethods.splice(paymentMethodLocation, 1);\n  this._emit('removePaymentMethod', paymentMethod);\n};\n\nDropinModel.prototype.refreshPaymentMethods = function () {\n  var self = this;\n\n  return self.getVaultedPaymentMethods().then(function (paymentMethods) {\n    self._paymentMethods = paymentMethods;\n\n    self._emit('refreshPaymentMethods');\n  });\n};\n\nDropinModel.prototype.changeActivePaymentMethod = function (paymentMethod) {\n  this._activePaymentMethod = paymentMethod;\n  this._emit('changeActivePaymentMethod', paymentMethod);\n};\n\nDropinModel.prototype.changeActiveView = function (paymentViewID) {\n  var previousViewId = this._activePaymentViewId;\n\n  this._activePaymentViewId = paymentViewID;\n  this._emit('changeActiveView', {\n    previousViewId: previousViewId,\n    newViewId: paymentViewID\n  });\n};\n\nDropinModel.prototype.removeActivePaymentMethod = function () {\n  this._activePaymentMethod = null;\n  this._emit('removeActivePaymentMethod');\n  this.setPaymentMethodRequestable({\n    isRequestable: false\n  });\n};\n\nDropinModel.prototype.selectPaymentOption = function (paymentViewID) {\n  this._emit('paymentOptionSelected', {\n    paymentOption: paymentViewID\n  });\n};\n\nDropinModel.prototype.enableEditMode = function () {\n  analytics.sendEvent(this._options.client, 'manager.appeared');\n  this._isInEditMode = true;\n  this._emit('enableEditMode');\n};\n\nDropinModel.prototype.disableEditMode = function () {\n  this._isInEditMode = false;\n  this._emit('disableEditMode');\n};\n\nDropinModel.prototype.isInEditMode = function () {\n  return Boolean(this._isInEditMode);\n};\n\nDropinModel.prototype.confirmPaymentMethodDeletion = function (paymentMethod) {\n  this._paymentMethodWaitingToBeDeleted = paymentMethod;\n  this._emit('confirmPaymentMethodDeletion', paymentMethod);\n};\n\nDropinModel.prototype._shouldIncludeDependency = function (key) {\n  if (key === 'card') {\n    // card is turned on by default unless the merchant explicitly\n    // passes a value of `false` or omits it from a custom\n    // `paymentOptionPriority` array\n    if (this.merchantConfiguration.card === false) {\n      return false;\n    }\n  } else if (!this.merchantConfiguration[key]) {\n    // if the merchant does not have the non-card dependency\n    // configured, do not include the dependency\n    return false;\n  }\n\n  if (NON_PAYMENT_OPTION_DEPENDENCIES.indexOf(key) > -1) {\n    // if the dependency is not a payment option (3DS, data collector)\n    // include it since the merchant configured Drop-in for it\n\n    return true;\n  }\n\n  if (this.merchantConfiguration.paymentOptionPriority) {\n    // if the merchant passed a custom `paymentOptionPriority` array,\n    // only include the dependency if it was configured _and_\n    // included in the array\n    return this.merchantConfiguration.paymentOptionPriority.indexOf(key) > -1;\n  }\n\n  // otherwise, include it if it is a valid payment option\n  return DEFAULT_PAYMENT_OPTION_PRIORITY.indexOf(key) > -1;\n};\n\nDropinModel.prototype._shouldEmitRequestableEvent = function (options) {\n  var requestableStateHasNotChanged = this.isPaymentMethodRequestable() === options.isRequestable;\n  var nonce = options.selectedPaymentMethod && options.selectedPaymentMethod.nonce;\n  var nonceHasNotChanged = nonce === this._paymentMethodRequestableNonce;\n\n  if (!this._setupComplete) {\n    // don't emit event until after Drop-in is fully set up\n    // fixes issues with lazy loading of imports where event\n    // should not be emitted\n    // https://github.com/braintree/braintree-web-drop-in/issues/511\n    return false;\n  }\n\n  if (requestableStateHasNotChanged && (!options.isRequestable || nonceHasNotChanged)) {\n    return false;\n  }\n\n  return true;\n};\n\nDropinModel.prototype.setPaymentMethodRequestable = function (options) {\n  var shouldEmitEvent = this._shouldEmitRequestableEvent(options);\n  var paymentMethodRequestableResponse = {\n    paymentMethodIsSelected: Boolean(options.selectedPaymentMethod),\n    type: options.type\n  };\n\n  this._paymentMethodIsRequestable = options.isRequestable;\n\n  if (options.isRequestable) {\n    this._paymentMethodRequestableNonce = options.selectedPaymentMethod && options.selectedPaymentMethod.nonce;\n  } else {\n    delete this._paymentMethodRequestableNonce;\n  }\n\n  if (!shouldEmitEvent) {\n    return;\n  }\n\n  if (options.isRequestable) {\n    this._emit('paymentMethodRequestable', paymentMethodRequestableResponse);\n  } else {\n    this._emit('noPaymentMethodRequestable');\n  }\n};\n\nDropinModel.prototype.getPaymentMethods = function () {\n  // we want to return a copy of the Array\n  // so we can loop through it in dropin.updateConfiguration\n  // while calling model.removePaymentMethod\n  // which updates the original array\n  return this._paymentMethods.slice();\n};\n\nDropinModel.prototype.getActivePaymentMethod = function () {\n  return this._activePaymentMethod;\n};\n\nDropinModel.prototype.hasPaymentMethods = function () {\n  return this.getPaymentMethods().length > 0;\n};\n\nDropinModel.prototype.getInitialViewId = function () {\n  if (this.supportedPaymentOptions.length > 1) {\n    return paymentOptionsViewID;\n  }\n\n  return this.supportedPaymentOptions[0];\n};\n\nDropinModel.prototype.getActivePaymentViewId = function () {\n  return this._activePaymentViewId;\n};\n\nDropinModel.prototype.reportAppSwitchPayload = function (payload) {\n  this.appSwitchPayload = payload;\n};\n\nDropinModel.prototype.reportAppSwitchError = function (sheetId, error) {\n  this.appSwitchError = {\n    id: sheetId,\n    error: error\n  };\n};\n\nDropinModel.prototype.hasAtLeastOneAvailablePaymentOption = function () {\n  var self = this;\n  var i;\n\n  for (i = 0; i < this.supportedPaymentOptions.length; i++) {\n    if (self.dependencyStates[this.supportedPaymentOptions[i]] === dependencySetupStates.DONE) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\nDropinModel.prototype.asyncDependencyReady = function (key) {\n  this.dependencyStates[key] = dependencySetupStates.DONE;\n};\n\nDropinModel.prototype.asyncDependencyFailed = function (options) {\n  if (this.failedDependencies.hasOwnProperty(options.view)) {\n    return;\n  }\n  this.failedDependencies[options.view] = options.error;\n  this.dependencyStates[options.view] = dependencySetupStates.FAILED;\n};\n\nDropinModel.prototype.cancelInitialization = function (error) {\n  this._emit('cancelInitialization', error);\n};\n\nDropinModel.prototype.reportError = function (error) {\n  this._emit('errorOccurred', error);\n};\n\nDropinModel.prototype.clearError = function () {\n  this._emit('errorCleared');\n};\n\nDropinModel.prototype.preventUserAction = function () {\n  this._emit('preventUserAction');\n};\n\nDropinModel.prototype.allowUserAction = function () {\n  this._emit('allowUserAction');\n};\n\nDropinModel.prototype.deleteVaultedPaymentMethod = function () {\n  var self = this;\n  var promise = Promise.resolve();\n  var error;\n\n  this._emit('startVaultedPaymentMethodDeletion');\n\n  if (!self.isGuestCheckout) {\n    promise = this._vaultManager.deletePaymentMethod(this._paymentMethodWaitingToBeDeleted.nonce).catch(function (err) {\n      error = err;\n    });\n  }\n\n  return promise.then(function () {\n    delete self._paymentMethodWaitingToBeDeleted;\n\n    return self.refreshPaymentMethods();\n  }).then(function () {\n    self.disableEditMode();\n    self._emit('finishVaultedPaymentMethodDeletion', error);\n  });\n};\n\nDropinModel.prototype.cancelDeleteVaultedPaymentMethod = function () {\n  this._emit('cancelVaultedPaymentMethodDeletion');\n\n  delete this._paymentMethodWaitingToBeDeleted;\n};\n\nDropinModel.prototype.getVaultedPaymentMethods = function () {\n  var self = this;\n\n  if (self.isGuestCheckout) {\n    return Promise.resolve([]);\n  }\n\n  return self._vaultManager.fetchPaymentMethods({\n    defaultFirst: this.merchantConfiguration.showDefaultPaymentMethodFirst !== false\n  }).then(function (paymentMethods) {\n    return self._getSupportedPaymentMethods(paymentMethods).map(function (paymentMethod) {\n      paymentMethod.vaulted = true;\n\n      return paymentMethod;\n    });\n  }).catch(function () {\n    return Promise.resolve([]);\n  });\n};\n\nDropinModel.prototype._getSupportedPaymentMethods = function (paymentMethods) {\n  var supportedPaymentMethods = this.supportedPaymentOptions.reduce(function (array, key) {\n    var paymentMethodType = paymentMethodTypes[key];\n\n    if (canShowVaultedPaymentMethodType(paymentMethodType)) {\n      array.push(paymentMethodType);\n    }\n\n    return array;\n  }, []);\n\n  return paymentMethods.filter(function (paymentMethod) {\n    return supportedPaymentMethods.indexOf(paymentMethod.type) > -1;\n  });\n};\n\nDropinModel.prototype._getSupportedPaymentOptions = function (options) {\n  var self = this;\n  var paymentOptionPriority = options.merchantConfiguration.paymentOptionPriority || DEFAULT_PAYMENT_OPTION_PRIORITY;\n  var promises;\n\n  if (!(paymentOptionPriority instanceof Array)) {\n    throw new DropinError('paymentOptionPriority must be an array.');\n  }\n\n  // Remove duplicates\n  paymentOptionPriority = paymentOptionPriority.filter(function (item, pos) { return paymentOptionPriority.indexOf(item) === pos; });\n\n  promises = paymentOptionPriority.map(function (paymentOption) {\n    return getPaymentOption(paymentOption, options).then(function (result) {\n      if (!result.success) {\n        self.dependencyStates[result.id] = dependencySetupStates.NOT_ENABLED;\n      }\n\n      return result;\n    });\n  });\n\n  return Promise.all(promises).then(function (result) {\n    result = result.filter(function (item) {\n      return item.success;\n    });\n\n    if (result.length === 0) {\n      return Promise.reject(new DropinError('No valid payment options available.'));\n    }\n\n    return result.map(function (item) { return item.id; });\n  });\n};\n\nfunction getPaymentOption(paymentOption, options) {\n  return isPaymentOptionEnabled(paymentOption, options).then(function (success) {\n    return {\n      success: success,\n      id: paymentOptionIDs[paymentOption]\n    };\n  });\n}\n\nfunction isPaymentOptionEnabled(paymentOption, options) {\n  var SheetView = paymentSheetViews[paymentOptionIDs[paymentOption]];\n\n  if (!SheetView) {\n    return Promise.reject(new DropinError('paymentOptionPriority: Invalid payment option specified.'));\n  }\n\n  return SheetView.isEnabled({\n    client: options.client,\n    merchantConfiguration: options.merchantConfiguration\n  }).catch(function (error) {\n    console.error(SheetView.ID + ' view errored when checking if it was supported.'); // eslint-disable-line no-console\n    console.error(error); // eslint-disable-line no-console\n\n    return Promise.resolve(false);\n  });\n}\n\nfunction canShowVaultedPaymentMethodType(paymentMethodType) {\n  return paymentMethodType && VAULTED_PAYMENT_METHOD_TYPES_THAT_SHOULD_BE_HIDDEN.indexOf(paymentMethodType) === -1;\n}\n\nmodule.exports = DropinModel;\n\n},{\"./constants\":196,\"./lib/analytics\":201,\"./lib/dropin-error\":206,\"./lib/is-guest-checkout\":208,\"./lib/promise\":213,\"./views/payment-options-view\":259,\"./views/payment-sheet-views\":264,\"@braintree/event-emitter\":41,\"braintree-web/vault-manager\":154}],198:[function(require,module,exports){\n'use strict';\n\nvar assign = require('./lib/assign').assign;\nvar analytics = require('./lib/analytics');\nvar classList = require('@braintree/class-list');\nvar constants = require('./constants');\nvar DropinError = require('./lib/dropin-error');\nvar DropinModel = require('./dropin-model');\nvar EventEmitter = require('@braintree/event-emitter');\nvar assets = require('@braintree/asset-loader');\n\nvar MainView = require('./views/main-view');\nvar paymentMethodsViewID = require('./views/payment-methods-view').ID;\nvar paymentOptionIDs = constants.paymentOptionIDs;\nvar translations = require('./translations').translations;\nvar isUtf8 = require('./lib/is-utf-8');\nvar uuid = require('@braintree/uuid');\nvar Promise = require('./lib/promise');\nvar sanitizeHtml = require('./lib/sanitize-html');\nvar DataCollector = require('./lib/data-collector');\nvar ThreeDSecure = require('./lib/three-d-secure');\nvar wrapPrototype = require('@braintree/wrap-promise').wrapPrototype;\n\nvar mainHTML = \"<div class=\\\"braintree-dropin\\\">\\n  <div data-braintree-id=\\\"methods-label\\\" class=\\\"braintree-heading\\\">&nbsp;</div>\\n  <div data-braintree-id=\\\"methods-edit\\\" class=\\\"braintree-hidden braintree-heading\\\" role=\\\"button\\\" tabindex=\\\"0\\\">{{edit}}</div>\\n  <div data-braintree-id=\\\"choose-a-way-to-pay\\\" class=\\\"braintree-heading\\\">{{chooseAWayToPay}}</div>\\n  <div class=\\\"braintree-placeholder\\\">&nbsp;</div>\\n\\n  <div data-braintree-id=\\\"upper-container\\\" class=\\\"braintree-upper-container\\\">\\n    <div data-braintree-id=\\\"loading-container\\\" class=\\\"braintree-loader__container\\\">\\n      <div data-braintree-id=\\\"loading-indicator\\\" class=\\\"braintree-loader__indicator\\\">\\n        <svg width=\\\"14\\\" height=\\\"16\\\" class=\\\"braintree-loader__lock\\\">\\n          <use xlink:href=\\\"#iconLockLoader\\\"></use>\\n        </svg>\\n      </div>\\n    </div>\\n\\n    <div data-braintree-id=\\\"delete-confirmation\\\" class=\\\"braintree-delete-confirmation braintree-sheet\\\">\\n      <div data-braintree-id=\\\"delete-confirmation__message\\\"></div>\\n      <div class=\\\"braintree-delete-confirmation__button-container\\\">\\n        <div tabindex=\\\"0\\\" role=\\\"button\\\" data-braintree-id=\\\"delete-confirmation__no\\\" class=\\\"braintree-delete-confirmation__button\\\">{{deleteCancelButton}}</div>\\n        <div tabindex=\\\"0\\\" role=\\\"button\\\" data-braintree-id=\\\"delete-confirmation__yes\\\" class=\\\"braintree-delete-confirmation__button\\\">{{deleteConfirmationButton}}</div>\\n      </div>\\n    </div>\\n\\n    <div data-braintree-id=\\\"methods\\\" class=\\\"braintree-methods braintree-methods-initial\\\">\\n      <div data-braintree-id=\\\"methods-container\\\"></div>\\n    </div>\\n\\n    <div data-braintree-id=\\\"options\\\" class=\\\"braintree-test-class braintree-options braintree-options-initial\\\">\\n      <div data-braintree-id=\\\"payment-options-container\\\" class=\\\"braintree-options-list\\\"></div>\\n    </div>\\n\\n    <div data-braintree-id=\\\"sheet-container\\\" class=\\\"braintree-sheet__container\\\">\\n      <div data-braintree-id=\\\"paypal\\\" class=\\\"braintree-paypal braintree-sheet\\\">\\n        <div data-braintree-id=\\\"paypal-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg width=\\\"40\\\" height=\\\"24\\\">\\n                <use xlink:href=\\\"#logoPayPal\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{PayPal}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <div data-braintree-id=\\\"paypal-button\\\" class=\\\"braintree-sheet__button--paypal\\\"></div>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"paypalCredit\\\" class=\\\"braintree-paypalCredit braintree-sheet\\\">\\n        <div data-braintree-id=\\\"paypal-credit-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg width=\\\"40\\\" height=\\\"24\\\">\\n                <use xlink:href=\\\"#logoPayPalCredit\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{PayPal Credit}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <div data-braintree-id=\\\"paypal-credit-button\\\" class=\\\"braintree-sheet__button--paypal\\\"></div>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"applePay\\\" class=\\\"braintree-applePay braintree-sheet\\\">\\n        <div data-braintree-id=\\\"apple-pay-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg height=\\\"24\\\" width=\\\"40\\\">\\n              <use xlink:href=\\\"#logoApplePay\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{Apple Pay}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <div data-braintree-id=\\\"apple-pay-button\\\" class=\\\"braintree-sheet__button--apple-pay apple-pay-button\\\"></div>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"googlePay\\\" class=\\\"braintree-googlePay braintree-sheet\\\">\\n        <div data-braintree-id=\\\"google-pay-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg height=\\\"24\\\" width=\\\"40\\\">\\n              <use xlink:href=\\\"#logoGooglePay\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{Google Pay}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <div data-braintree-id=\\\"google-pay-button\\\"></div>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"venmo\\\" class=\\\"braintree-venmo braintree-sheet\\\">\\n        <div data-braintree-id=\\\"venmo-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg height=\\\"24\\\" width=\\\"40\\\">\\n              <use xlink:href=\\\"#logoVenmo\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__label\\\">{{Venmo}}</div>\\n          </div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--button\\\">\\n          <svg data-braintree-id=\\\"venmo-button\\\" class=\\\"braintree-sheet__button--venmo\\\">\\n            <use xlink:href=\\\"#buttonVenmo\\\"></use>\\n          </svg>\\n        </div>\\n      </div>\\n      <div data-braintree-id=\\\"card\\\" class=\\\"braintree-card braintree-form braintree-sheet\\\">\\n        <div data-braintree-id=\\\"card-sheet-header\\\" class=\\\"braintree-sheet__header\\\">\\n          <div class=\\\"braintree-sheet__header-label\\\">\\n            <div class=\\\"braintree-sheet__logo--header\\\">\\n              <svg width=\\\"40\\\" height=\\\"24\\\" class=\\\"braintree-icon--bordered\\\">\\n                <use xlink:href=\\\"#iconCardFront\\\"></use>\\n              </svg>\\n            </div>\\n            <div class=\\\"braintree-sheet__text\\\">{{payWithCard}}</div>\\n          </div>\\n          <div data-braintree-id=\\\"card-view-icons\\\" class=\\\"braintree-sheet__icons\\\"></div>\\n        </div>\\n        <div class=\\\"braintree-sheet__content braintree-sheet__content--form\\\">\\n          <div data-braintree-id=\\\"cardholder-name-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n            <label for=\\\"braintree__card-view-input__cardholder-name\\\">\\n              <div class=\\\"braintree-form__label\\\">{{cardholderNameLabel}}</div>\\n              <div class=\\\"braintree-form__field\\\">\\n                <div class=\\\"braintree-form-cardholder-name braintree-form__hosted-field\\\"></div>\\n                <div class=\\\"braintree-form__icon-container\\\">\\n                  <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                    <svg width=\\\"24\\\" height=\\\"24\\\">\\n                      <use xlink:href=\\\"#iconError\\\"></use>\\n                    </svg>\\n                  </div>\\n                </div>\\n              </div>\\n            </label>\\n            <div data-braintree-id=\\\"cardholder-name-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n          </div>\\n          <div data-braintree-id=\\\"number-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n            <label>\\n              <div class=\\\"braintree-form__label\\\">{{cardNumberLabel}}</div>\\n              <div class=\\\"braintree-form__field\\\">\\n                <div class=\\\"braintree-form-number braintree-form__hosted-field\\\"></div>\\n                <div class=\\\"braintree-form__icon-container\\\">\\n                  <div data-braintree-id=\\\"card-number-icon\\\" class=\\\"braintree-form__icon braintree-form__field-secondary-icon\\\">\\n                    <svg width=\\\"40\\\" height=\\\"24\\\" class=\\\"braintree-icon--bordered\\\">\\n                    <use data-braintree-id=\\\"card-number-icon-svg\\\" xlink:href=\\\"#iconCardFront\\\"></use>\\n                    </svg>\\n                  </div>\\n                  <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                    <svg width=\\\"24\\\" height=\\\"24\\\">\\n                      <use xlink:href=\\\"#iconError\\\"></use>\\n                    </svg>\\n                  </div>\\n                </div>\\n              </div>\\n            </label>\\n            <div data-braintree-id=\\\"number-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n          </div>\\n\\n          <div class=\\\"braintree-form__flexible-fields\\\">\\n            <div data-braintree-id=\\\"expiration-date-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n              <label>\\n                <div class=\\\"braintree-form__label\\\">{{expirationDateLabel}}\\n                  <span class=\\\"braintree-form__descriptor\\\">{{expirationDateLabelSubheading}}</span>\\n                </div>\\n                <div class=\\\"braintree-form__field\\\">\\n                  <div class=\\\"braintree-form__hosted-field braintree-form-expiration\\\"></div>\\n                  <div class=\\\"braintree-form__icon-container\\\">\\n                    <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                      <svg width=\\\"24\\\" height=\\\"24\\\">\\n                        <use xlink:href=\\\"#iconError\\\"></use>\\n                      </svg>\\n                    </div>\\n                  </div>\\n                </div>\\n              </label>\\n              <div data-braintree-id=\\\"expiration-date-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n            </div>\\n\\n\\n            <div data-braintree-id=\\\"cvv-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n              <label>\\n                <div class=\\\"braintree-form__label\\\">{{cvvLabel}}\\n                  <span data-braintree-id=\\\"cvv-label-descriptor\\\" class=\\\"braintree-form__descriptor\\\">{{cvvThreeDigitLabelSubheading}}</span>\\n                </div>\\n                <div class=\\\"braintree-form__field\\\">\\n                  <div class=\\\"braintree-form__hosted-field braintree-form-cvv\\\"></div>\\n                  <div class=\\\"braintree-form__icon-container\\\">\\n                    <div data-braintree-id=\\\"cvv-icon\\\" class=\\\"braintree-form__icon braintree-form__field-secondary-icon\\\">\\n                      <svg width=\\\"40\\\" height=\\\"24\\\" class=\\\"braintree-icon--bordered\\\">\\n                      <use data-braintree-id=\\\"cvv-icon-svg\\\" xlink:href=\\\"#iconCVVBack\\\"></use>\\n                      </svg>\\n                    </div>\\n                    <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                      <svg width=\\\"24\\\" height=\\\"24\\\">\\n                        <use xlink:href=\\\"#iconError\\\"></use>\\n                      </svg>\\n                    </div>\\n                  </div>\\n                </div>\\n              </label>\\n              <div data-braintree-id=\\\"cvv-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n            </div>\\n\\n            <div data-braintree-id=\\\"postal-code-field-group\\\" class=\\\"braintree-form__field-group\\\">\\n              <label>\\n                <div class=\\\"braintree-form__label\\\">{{postalCodeLabel}}</div>\\n                <div class=\\\"braintree-form__field\\\">\\n                  <div class=\\\"braintree-form__hosted-field braintree-form-postal-code\\\"></div>\\n                  <div class=\\\"braintree-form__icon-container\\\">\\n                    <div class=\\\"braintree-form__icon braintree-form__field-error-icon\\\">\\n                      <svg width=\\\"24\\\" height=\\\"24\\\">\\n                        <use xlink:href=\\\"#iconError\\\"></use>\\n                      </svg>\\n                    </div>\\n                  </div>\\n                </div>\\n              </label>\\n              <div data-braintree-id=\\\"postal-code-field-error\\\" class=\\\"braintree-form__field-error\\\"></div>\\n            </div>\\n          </div>\\n\\n          <div data-braintree-id=\\\"save-card-field-group\\\" class=\\\"braintree-form__field-group braintree-hidden\\\">\\n            <label>\\n              <div class=\\\"braintree-form__field braintree-form__checkbox\\\">\\n                <input type=\\\"checkbox\\\" data-braintree-id=\\\"save-card-input\\\" checked />\\n              </div>\\n              <div class=\\\"braintree-form__label\\\">{{saveCardLabel}}</div>\\n            </label>\\n          </div>\\n        </div>\\n      </div>\\n\\n      <div data-braintree-id=\\\"sheet-error\\\" class=\\\"braintree-sheet__error\\\">\\n        <div class=\\\"braintree-form__icon braintree-sheet__error-icon\\\">\\n          <svg width=\\\"24\\\" height=\\\"24\\\">\\n            <use xlink:href=\\\"#iconError\\\"></use>\\n          </svg>\\n        </div>\\n        <div data-braintree-id=\\\"sheet-error-text\\\" class=\\\"braintree-sheet__error-text\\\"></div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div data-braintree-id=\\\"lower-container\\\" class=\\\"braintree-test-class braintree-options braintree-hidden\\\">\\n    <div data-braintree-id=\\\"other-ways-to-pay\\\" class=\\\"braintree-heading\\\">{{otherWaysToPay}}</div>\\n  </div>\\n\\n  <div data-braintree-id=\\\"toggle\\\" class=\\\"braintree-large-button braintree-toggle braintree-hidden\\\" tabindex=\\\"0\\\" role=\\\"button\\\">\\n    <span>{{chooseAnotherWayToPay}}</span>\\n  </div>\\n</div>\\n<div data-braintree-id=\\\"disable-wrapper\\\" class=\\\"braintree-dropin__disabled braintree-hidden\\\"></div>\\n\";\nvar svgHTML = \"<svg data-braintree-id=\\\"svgs\\\">\\n  <defs>\\n    <symbol id=\\\"icon-visa\\\" viewBox=\\\"0 0 44 14.2\\\">\\n      <title>Visa</title>\\n      <path fill=\\\"#1434CB\\\" d=\\\"M16.8,0.2L11,13.9H7.3L4.5,3C4.3,2.3,4.2,2.1,3.6,1.8C2.8,1.3,1.4,0.9,0.1,0.6l0.1-0.4h6   c0.8,0,1.5,0.5,1.6,1.4l1.5,7.9L13,0.2H16.8z M31.4,9.4c0-3.6-5-3.8-5-5.4c0-0.5,0.5-1,1.5-1.1c0.5-0.1,1.9-0.1,3.5,0.6L32,0.6   C31.2,0.3,30.1,0,28.7,0c-3.5,0-6,1.9-6,4.5c0,2,1.8,3.1,3.1,3.7c1.4,0.7,1.8,1.1,1.8,1.7c0,0.9-1.1,1.3-2.1,1.3   c-1.8,0-2.8-0.5-3.6-0.9l-0.6,3c0.8,0.4,2.3,0.7,3.9,0.7C28.9,14.1,31.4,12.3,31.4,9.4 M40.6,13.9h3.3L41,0.2h-3   c-0.7,0-1.3,0.4-1.5,1l-5.3,12.7h3.7l0.7-2h4.5L40.6,13.9z M36.7,9.1l1.9-5.1l1.1,5.1H36.7z M21.8,0.2l-2.9,13.7h-3.5l2.9-13.7   H21.8z\\\"/>\\n    </symbol>\\n\\n    <symbol id=\\\"icon-master-card\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>MasterCard</title>\\n      <path d=\\\"M0 1.927C0 .863.892 0 1.992 0h36.016C39.108 0 40 .863 40 1.927v20.146C40 23.137 39.108 24 38.008 24H1.992C.892 24 0 23.137 0 22.073V1.927z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M11.085 22.2v-1.36c0-.522-.318-.863-.864-.863-.272 0-.568.09-.773.386-.16-.25-.386-.386-.727-.386-.228 0-.455.068-.637.318v-.272h-.478V22.2h.478v-1.202c0-.386.204-.567.523-.567.318 0 .478.205.478.568V22.2h.477v-1.202c0-.386.23-.567.524-.567.32 0 .478.205.478.568V22.2h.523zm7.075-2.177h-.774v-.658h-.478v.658h-.432v.43h.432v.998c0 .5.205.795.75.795.206 0 .433-.068.592-.16l-.136-.407c-.136.09-.296.114-.41.114-.227 0-.318-.137-.318-.363v-.976h.774v-.43zm4.048-.046c-.273 0-.454.136-.568.318v-.272h-.478V22.2h.478v-1.225c0-.363.16-.567.455-.567.09 0 .204.023.295.046l.137-.454c-.09-.023-.228-.023-.32-.023zm-6.118.227c-.228-.16-.546-.227-.888-.227-.546 0-.91.272-.91.703 0 .363.274.567.75.635l.23.023c.25.045.385.113.385.227 0 .16-.182.272-.5.272-.32 0-.57-.113-.728-.227l-.228.363c.25.18.59.272.932.272.637 0 1-.295 1-.703 0-.385-.295-.59-.75-.658l-.227-.022c-.205-.023-.364-.068-.364-.204 0-.16.16-.25.41-.25.272 0 .545.114.682.182l.205-.386zm12.692-.227c-.273 0-.455.136-.568.318v-.272h-.478V22.2h.478v-1.225c0-.363.16-.567.455-.567.09 0 .203.023.294.046L29.1 20c-.09-.023-.227-.023-.318-.023zm-6.096 1.134c0 .66.455 1.135 1.16 1.135.32 0 .546-.068.774-.25l-.228-.385c-.182.136-.364.204-.57.204-.385 0-.658-.272-.658-.703 0-.407.273-.68.66-.702.204 0 .386.068.568.204l.228-.385c-.228-.182-.455-.25-.774-.25-.705 0-1.16.477-1.16 1.134zm4.413 0v-1.087h-.48v.272c-.158-.204-.385-.318-.68-.318-.615 0-1.093.477-1.093 1.134 0 .66.478 1.135 1.092 1.135.317 0 .545-.113.68-.317v.272h.48v-1.09zm-1.753 0c0-.384.25-.702.66-.702.387 0 .66.295.66.703 0 .387-.273.704-.66.704-.41-.022-.66-.317-.66-.703zm-5.71-1.133c-.636 0-1.09.454-1.09 1.134 0 .682.454 1.135 1.114 1.135.32 0 .638-.09.888-.295l-.228-.34c-.18.136-.41.227-.636.227-.296 0-.592-.136-.66-.522h1.615v-.18c.022-.704-.388-1.158-1.002-1.158zm0 .41c.297 0 .502.18.547.52h-1.137c.045-.295.25-.52.59-.52zm11.852.724v-1.95h-.48v1.135c-.158-.204-.385-.318-.68-.318-.615 0-1.093.477-1.093 1.134 0 .66.478 1.135 1.092 1.135.318 0 .545-.113.68-.317v.272h.48v-1.09zm-1.752 0c0-.384.25-.702.66-.702.386 0 .66.295.66.703 0 .387-.274.704-.66.704-.41-.022-.66-.317-.66-.703zm-15.97 0v-1.087h-.476v.272c-.16-.204-.387-.318-.683-.318-.615 0-1.093.477-1.093 1.134 0 .66.478 1.135 1.092 1.135.318 0 .545-.113.682-.317v.272h.477v-1.09zm-1.773 0c0-.384.25-.702.66-.702.386 0 .66.295.66.703 0 .387-.274.704-.66.704-.41-.022-.66-.317-.66-.703z\\\" fill=\\\"#000\\\" />\\n      <path fill=\\\"#FF5F00\\\" d=\\\"M23.095 3.49H15.93v12.836h7.165\\\" />\\n      <path d=\\\"M16.382 9.91c0-2.61 1.23-4.922 3.117-6.42-1.39-1.087-3.14-1.745-5.05-1.745-4.528 0-8.19 3.65-8.19 8.164 0 4.51 3.662 8.162 8.19 8.162 1.91 0 3.66-.657 5.05-1.746-1.89-1.474-3.118-3.81-3.118-6.417z\\\" fill=\\\"#EB001B\\\" />\\n      <path d=\\\"M32.76 9.91c0 4.51-3.664 8.162-8.19 8.162-1.91 0-3.662-.657-5.05-1.746 1.91-1.496 3.116-3.81 3.116-6.417 0-2.61-1.228-4.922-3.116-6.42 1.388-1.087 3.14-1.745 5.05-1.745 4.526 0 8.19 3.674 8.19 8.164z\\\" fill=\\\"#F79E1B\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-unionpay\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>Union Pay</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M9.877 2h8.126c1.135 0 1.84.93 1.575 2.077l-3.783 16.35c-.267 1.142-1.403 2.073-2.538 2.073H5.13c-1.134 0-1.84-.93-1.574-2.073L7.34 4.076C7.607 2.93 8.74 2 9.878 2z\\\" fill=\\\"#E21836\\\" />\\n      <path d=\\\"M17.325 2h9.345c1.134 0 .623.93.356 2.077l-3.783 16.35c-.265 1.142-.182 2.073-1.32 2.073H12.58c-1.137 0-1.84-.93-1.574-2.073l3.783-16.35C15.056 2.93 16.19 2 17.324 2z\\\" fill=\\\"#00447B\\\" />\\n      <path d=\\\"M26.3 2h8.126c1.136 0 1.84.93 1.575 2.077l-3.782 16.35c-.266 1.142-1.402 2.073-2.54 2.073h-8.122c-1.137 0-1.842-.93-1.574-2.073l3.78-16.35C24.03 2.93 25.166 2 26.303 2z\\\" fill=\\\"#007B84\\\" />\\n      <path d=\\\"M27.633 14.072l-.99 3.3h.266l-.208.68h-.266l-.062.212h-.942l.064-.21H23.58l.193-.632h.194l1.005-3.35.2-.676h.962l-.1.34s.255-.184.498-.248c.242-.064 1.636-.088 1.636-.088l-.206.672h-.33zm-1.695 0l-.254.843s.285-.13.44-.172c.16-.04.395-.057.395-.057l.182-.614h-.764zm-.38 1.262l-.263.877s.29-.15.447-.196c.157-.037.396-.066.396-.066l.185-.614h-.766zm-.614 2.046h.767l.222-.74h-.765l-.223.74z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path d=\\\"M28.055 13.4h1.027l.01.385c-.005.065.05.096.17.096h.208l-.19.637h-.555c-.48.035-.662-.172-.65-.406l-.02-.71zM28.193 16.415h-.978l.167-.566H28.5l.16-.517h-1.104l.19-.638h3.072l-.193.638h-1.03l-.16.516h1.032l-.17.565H29.18l-.2.24h.454l.11.712c.013.07.014.116.036.147.023.026.158.038.238.038h.137l-.21.694h-.348c-.054 0-.133-.004-.243-.01-.105-.008-.18-.07-.25-.105-.064-.03-.16-.11-.182-.24l-.11-.712-.507.7c-.162.222-.38.39-.748.39h-.712l.186-.62h.273c.078 0 .15-.03.2-.056.052-.023.098-.05.15-.126l.74-1.05zM17.478 14.867h2.59l-.19.622H18.84l-.16.53h1.06l-.194.64h-1.06l-.256.863c-.03.095.25.108.353.108l.53-.072-.212.71h-1.193c-.096 0-.168-.013-.272-.037-.1-.023-.145-.07-.19-.138-.043-.07-.11-.128-.064-.278l.343-1.143h-.588l.195-.65h.592l.156-.53h-.588l.188-.623zM19.223 13.75h1.063l-.194.65H18.64l-.157.136c-.067.066-.09.038-.18.087-.08.04-.254.123-.477.123h-.466l.19-.625h.14c.118 0 .198-.01.238-.036.046-.03.098-.096.157-.203l.267-.487h1.057l-.187.356zM20.74 13.4h.905l-.132.46s.286-.23.487-.313c.2-.075.65-.143.65-.143l1.464-.007-.498 1.672c-.085.286-.183.472-.244.555-.055.087-.12.16-.248.23-.124.066-.236.104-.34.115-.096.007-.244.01-.45.012h-1.41l-.4 1.324c-.037.13-.055.194-.03.23.02.03.068.066.135.066l.62-.06-.21.726h-.698c-.22 0-.383-.004-.495-.013-.108-.01-.22 0-.295-.058-.065-.058-.164-.133-.162-.21.007-.073.037-.192.082-.356l1.268-4.23zm1.922 1.69h-1.484l-.09.3h1.283c.152-.018.184.004.196-.003l.096-.297zm-1.402-.272s.29-.266.786-.353c.112-.022.82-.015.82-.015l.106-.357h-1.496l-.216.725z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path d=\\\"M23.382 16.1l-.084.402c-.036.125-.067.22-.16.302-.1.084-.216.172-.488.172l-.502.02-.004.455c-.006.13.028.117.048.138.024.022.045.032.067.04l.157-.008.48-.028-.198.663h-.552c-.385 0-.67-.008-.765-.084-.092-.057-.105-.132-.103-.26l.035-1.77h.88l-.013.362h.212c.072 0 .12-.007.15-.026.027-.02.047-.048.06-.093l.087-.282h.692zM10.84 7.222c-.032.143-.596 2.763-.598 2.764-.12.53-.21.91-.508 1.152-.172.14-.37.21-.6.21-.37 0-.587-.185-.624-.537l-.007-.12.113-.712s.593-2.388.7-2.703c.002-.017.005-.026.007-.035-1.152.01-1.357 0-1.37-.018-.007.024-.037.173-.037.173l-.605 2.688-.05.23-.1.746c0 .22.042.4.13.553.275.485 1.06.557 1.504.557.573 0 1.11-.123 1.47-.345.63-.375.797-.962.944-1.48l.067-.267s.61-2.48.716-2.803c.003-.017.006-.026.01-.035-.835.01-1.08 0-1.16-.018zM14.21 12.144c-.407-.006-.55-.006-1.03.018l-.018-.036c.042-.182.087-.363.127-.548l.06-.25c.086-.39.173-.843.184-.98.007-.084.036-.29-.2-.29-.1 0-.203.048-.307.096-.058.207-.174.79-.23 1.055-.118.558-.126.62-.178.897l-.036.037c-.42-.006-.566-.006-1.05.018l-.024-.04c.08-.332.162-.668.24-.998.203-.9.25-1.245.307-1.702l.04-.028c.47-.067.585-.08 1.097-.185l.043.047-.077.287c.086-.052.168-.104.257-.15.242-.12.51-.155.658-.155.223 0 .468.062.57.323.098.232.034.52-.094 1.084l-.066.287c-.13.627-.152.743-.225 1.174l-.05.036zM15.87 12.144c-.245 0-.405-.006-.56 0-.153 0-.303.008-.532.018l-.013-.02-.015-.02c.062-.238.097-.322.128-.406.03-.084.06-.17.115-.41.072-.315.116-.535.147-.728.033-.187.052-.346.075-.53l.02-.014.02-.018c.244-.036.4-.057.56-.082.16-.024.32-.055.574-.103l.008.023.008.022c-.047.195-.094.39-.14.588-.047.197-.094.392-.137.587-.093.414-.13.57-.152.68-.02.105-.026.163-.063.377l-.022.02-.023.017zM19.542 10.728c.143-.633.033-.928-.108-1.11-.213-.273-.59-.36-.978-.36-.235 0-.793.023-1.23.43-.312.29-.458.687-.546 1.066-.088.387-.19 1.086.447 1.344.198.085.48.108.662.108.466 0 .945-.13 1.304-.513.278-.312.405-.775.448-.965zm-1.07-.046c-.02.106-.113.503-.24.673-.086.123-.19.198-.305.198-.033 0-.235 0-.238-.3-.003-.15.027-.304.063-.47.108-.478.236-.88.56-.88.255 0 .27.298.16.78zM29.536 12.187c-.493-.004-.635-.004-1.09.015l-.03-.037c.124-.472.248-.943.358-1.42.142-.62.175-.882.223-1.244l.037-.03c.49-.07.625-.09 1.135-.186l.015.044c-.093.388-.186.777-.275 1.166-.19.816-.258 1.23-.33 1.658l-.044.035z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path d=\\\"M29.77 10.784c.144-.63-.432-.056-.525-.264-.14-.323-.052-.98-.62-1.2-.22-.085-.732.025-1.17.428-.31.29-.458.683-.544 1.062-.088.38-.19 1.078.444 1.328.2.085.384.11.567.103.638-.034 1.124-1.002 1.483-1.386.277-.303.326.115.368-.07zm-.974-.047c-.024.1-.117.503-.244.67-.083.117-.283.192-.397.192-.032 0-.232 0-.24-.3 0-.146.03-.3.067-.467.11-.47.235-.87.56-.87.254 0 .363.293.254.774zM22.332 12.144c-.41-.006-.55-.006-1.03.018l-.018-.036c.04-.182.087-.363.13-.548l.057-.25c.09-.39.176-.843.186-.98.008-.084.036-.29-.198-.29-.1 0-.203.048-.308.096-.057.207-.175.79-.232 1.055-.115.558-.124.62-.176.897l-.035.037c-.42-.006-.566-.006-1.05.018l-.022-.04.238-.998c.203-.9.25-1.245.307-1.702l.038-.028c.472-.067.587-.08 1.098-.185l.04.047-.073.287c.084-.052.17-.104.257-.15.24-.12.51-.155.655-.155.224 0 .47.062.575.323.095.232.03.52-.098 1.084l-.065.287c-.133.627-.154.743-.225 1.174l-.05.036zM26.32 8.756c-.07.326-.282.603-.554.736-.225.114-.498.123-.78.123h-.183l.013-.074.336-1.468.01-.076.007-.058.132.015.71.062c.275.105.388.38.31.74zM25.88 7.22l-.34.003c-.883.01-1.238.006-1.383-.012l-.037.182-.315 1.478-.793 3.288c.77-.01 1.088-.01 1.22.004l.21-1.024s.153-.644.163-.667c0 0 .047-.066.096-.092h.07c.665 0 1.417 0 2.005-.437.4-.298.675-.74.797-1.274.03-.132.054-.29.054-.446 0-.205-.04-.41-.16-.568-.3-.423-.896-.43-1.588-.433zM33.572 9.28l-.04-.043c-.502.1-.594.118-1.058.18l-.034.034-.005.023-.003-.007c-.345.803-.334.63-.615 1.26-.003-.03-.003-.048-.004-.077l-.07-1.37-.044-.043c-.53.1-.542.118-1.03.18l-.04.034-.006.056.003.007c.06.315.047.244.108.738.03.244.065.49.093.73.05.4.077.6.134 1.21-.328.55-.408.757-.722 1.238l.017.044c.478-.018.587-.018.94-.018l.08-.088c.265-.578 2.295-4.085 2.295-4.085zM16.318 9.62c.27-.19.304-.45.076-.586-.23-.137-.634-.094-.906.095-.273.186-.304.45-.075.586.228.134.633.094.905-.096z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path d=\\\"M31.238 13.415l-.397.684c-.124.232-.357.407-.728.41l-.632-.01.184-.618h.124c.064 0 .11-.004.148-.022.03-.01.054-.035.08-.072l.233-.373h.988z\\\" fill=\\\"#FEFEFE\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-american-express\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>American Express</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path fill=\\\"#1478BE\\\" d=\\\"M6.26 12.32h2.313L7.415 9.66M27.353 9.977h-3.738v1.23h3.666v1.384h-3.675v1.385h3.821v1.005c.623-.77 1.33-1.466 2.025-2.235l.707-.77c-.934-1.004-1.87-2.08-2.804-3.075v1.077z\\\" />\\n      <path d=\\\"M38.25 7h-5.605l-1.328 1.4L30.072 7H16.984l-1.017 2.416L14.877 7h-9.58L1.25 16.5h4.826l.623-1.556h1.4l.623 1.556H29.99l1.327-1.483 1.328 1.483h5.605l-4.36-4.667L38.25 7zm-17.685 8.1h-1.557V9.883L16.673 15.1h-1.33L13.01 9.883l-.084 5.217H9.73l-.623-1.556h-3.27L5.132 15.1H3.42l2.884-6.772h2.42l2.645 6.233V8.33h2.646l2.107 4.51 1.868-4.51h2.575V15.1zm14.727 0h-2.024l-2.024-2.26-2.023 2.26H22.06V8.328H29.53l1.795 2.177 2.024-2.177h2.025L32.26 11.75l3.032 3.35z\\\" fill=\\\"#1478BE\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-jcb\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>JCB</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M33.273 2.01h.013v17.062c-.004 1.078-.513 2.103-1.372 2.746-.63.47-1.366.67-2.14.67-.437 0-4.833.026-4.855 0-.01-.01 0-.07 0-.082v-6.82c0-.04.004-.064.033-.064h5.253c.867 0 1.344-.257 1.692-.61.44-.448.574-1.162.294-1.732-.24-.488-.736-.78-1.244-.913-.158-.04-.32-.068-.483-.083-.01 0-.064 0-.07-.006-.03-.034.023-.04.038-.046.102-.033.215-.042.32-.073.532-.164.993-.547 1.137-1.105.15-.577-.05-1.194-.524-1.552-.34-.257-.768-.376-1.187-.413-.43-.038-4.774-.022-5.21-.022-.072 0-.05-.02-.05-.09V5.63c0-.31.01-.616.073-.92.126-.592.41-1.144.815-1.59.558-.615 1.337-1.01 2.16-1.093.478-.048 4.89-.017 5.305-.017zm-4.06 8.616c.06.272-.01.567-.204.77-.173.176-.407.25-.648.253-.195.003-1.725 0-1.788 0l.003-1.645c.012-.027.02-.018.06-.018.097 0 1.713-.004 1.823.005.232.02.45.12.598.306.076.096.128.208.155.328zm-2.636 2.038h1.944c.242.002.47.063.652.228.226.204.327.515.283.815-.04.263-.194.5-.422.634-.187.112-.39.125-.6.125h-1.857v-1.8z\\\" fill=\\\"#53B230\\\" />\\n      <path d=\\\"M6.574 13.89c-.06-.03-.06-.018-.07-.06-.006-.026-.005-8.365.003-8.558.04-.95.487-1.857 1.21-2.47.517-.434 1.16-.71 1.83-.778.396-.04.803-.018 1.2-.018.69 0 4.11-.013 4.12 0 .008.008.002 16.758 0 17.074-.003.956-.403 1.878-1.105 2.523-.506.465-1.15.77-1.83.86-.41.056-5.02.032-5.363.032-.066 0-.054.013-.066-.024-.01-.025 0-7 0-7.17.66.178 1.35.28 2.03.348.662.067 1.33.093 1.993.062.93-.044 1.947-.192 2.712-.762.32-.238.574-.553.73-.922.148-.353.2-.736.2-1.117 0-.348.006-3.93-.016-3.942-.023-.014-2.885-.015-2.9.012-.012.022 0 3.87 0 3.95-.003.47-.16.933-.514 1.252-.468.42-1.11.47-1.707.423-.687-.055-1.357-.245-1.993-.508-.157-.065-.312-.135-.466-.208z\\\" fill=\\\"#006CB9\\\" />\\n      <path d=\\\"M15.95 9.835c-.025.02-.05.04-.072.06V6.05c0-.295-.012-.594.01-.888.12-1.593 1.373-2.923 2.944-3.126.382-.05 5.397-.042 5.41-.026.01.01 0 .062 0 .074v16.957c0 1.304-.725 2.52-1.89 3.1-.504.25-1.045.35-1.605.35-.322 0-4.757.015-4.834 0-.05-.01-.023.01-.035-.02-.007-.022 0-6.548 0-7.44v-.422c.554.48 1.256.75 1.96.908.536.12 1.084.176 1.63.196.537.02 1.076.01 1.61-.037.546-.05 1.088-.136 1.625-.244.137-.028.274-.057.41-.09.033-.006.17-.017.187-.044.013-.02 0-.097 0-.12v-1.324c-.582.292-1.19.525-1.83.652-.778.155-1.64.198-2.385-.123-.752-.326-1.2-1.024-1.274-1.837-.076-.837.173-1.716.883-2.212.736-.513 1.7-.517 2.553-.38.634.1 1.245.305 1.825.58.078.037.154.075.23.113V9.322c0-.02.013-.1 0-.118-.02-.028-.152-.038-.188-.046-.066-.016-.133-.03-.2-.045C22.38 9 21.84 8.908 21.3 8.85c-.533-.06-1.068-.077-1.603-.066-.542.01-1.086.054-1.62.154-.662.125-1.32.337-1.883.716-.085.056-.167.117-.245.18z\\\" fill=\\\"#E20138\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-discover\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>Discover</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M38.995 11.75S27.522 20.1 6.5 23.5h31.495c.552 0 1-.448 1-1V11.75z\\\" fill=\\\"#F48024\\\" />\\n      <path d=\\\"M5.332 11.758c-.338.305-.776.438-1.47.438h-.29V8.55h.29c.694 0 1.115.124 1.47.446.37.33.595.844.595 1.372 0 .53-.224 1.06-.595 1.39zM4.077 7.615H2.5v5.515h1.57c.833 0 1.435-.197 1.963-.637.63-.52 1-1.305 1-2.116 0-1.628-1.214-2.762-2.956-2.762zM7.53 13.13h1.074V7.616H7.53M11.227 9.732c-.645-.24-.834-.397-.834-.695 0-.347.338-.61.8-.61.322 0 .587.132.867.446l.562-.737c-.462-.405-1.015-.612-1.618-.612-.975 0-1.718.678-1.718 1.58 0 .76.346 1.15 1.355 1.513.42.148.635.247.743.314.215.14.322.34.322.57 0 .448-.354.78-.834.78-.51 0-.924-.258-1.17-.736l-.695.67c.495.726 1.09 1.05 1.907 1.05 1.116 0 1.9-.745 1.9-1.812 0-.876-.363-1.273-1.585-1.72zM13.15 10.377c0 1.62 1.27 2.877 2.907 2.877.462 0 .858-.09 1.347-.32v-1.267c-.43.43-.81.604-1.297.604-1.082 0-1.85-.785-1.85-1.9 0-1.06.792-1.895 1.8-1.895.512 0 .9.183 1.347.62V7.83c-.472-.24-.86-.34-1.322-.34-1.627 0-2.932 1.283-2.932 2.887zM25.922 11.32l-1.468-3.705H23.28l2.337 5.656h.578l2.38-5.655H27.41M29.06 13.13h3.046v-.934h-1.973v-1.488h1.9v-.934h-1.9V8.55h1.973v-.935H29.06M34.207 10.154h-.314v-1.67h.33c.67 0 1.034.28 1.034.818 0 .554-.364.852-1.05.852zm2.155-.91c0-1.033-.71-1.628-1.95-1.628H32.82v5.514h1.073v-2.215h.14l1.487 2.215h1.32l-1.733-2.323c.81-.165 1.255-.72 1.255-1.563z\\\" fill=\\\"#221F20\\\" />\\n      <path d=\\\"M23.6 10.377c0 1.62-1.31 2.93-2.927 2.93-1.617.002-2.928-1.31-2.928-2.93s1.31-2.932 2.928-2.932c1.618 0 2.928 1.312 2.928 2.932z\\\" fill=\\\"#F48024\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-diners-club\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>Diners Club</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M9.02 11.83c0-5.456 4.54-9.88 10.14-9.88 5.6 0 10.139 4.424 10.139 9.88-.002 5.456-4.54 9.88-10.14 9.88-5.6 0-10.14-4.424-10.14-9.88z\\\" fill=\\\"#FEFEFE\\\" />\\n      <path fill=\\\"#FFF\\\" d=\\\"M32.522 22H8.5V1.5h24.022\\\" />\\n      <path d=\\\"M25.02 11.732c-.003-2.534-1.607-4.695-3.868-5.55v11.102c2.26-.857 3.865-3.017 3.87-5.552zm-8.182 5.55V6.18c-2.26.86-3.86 3.017-3.867 5.55.007 2.533 1.61 4.69 3.868 5.55zm2.158-14.934c-5.25.002-9.503 4.202-9.504 9.384 0 5.182 4.254 9.38 9.504 9.382 5.25 0 9.504-4.2 9.505-9.382 0-5.182-4.254-9.382-9.504-9.384zM18.973 22C13.228 22.027 8.5 17.432 8.5 11.84 8.5 5.726 13.228 1.5 18.973 1.5h2.692c5.677 0 10.857 4.225 10.857 10.34 0 5.59-5.18 10.16-10.857 10.16h-2.692z\\\" fill=\\\"#004A97\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-maestro\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>Maestro</title>\\n      <path d=\\\"M38.333 24H1.667C.75 24 0 23.28 0 22.4V1.6C0 .72.75 0 1.667 0h36.666C39.25 0 40 .72 40 1.6v20.8c0 .88-.75 1.6-1.667 1.6z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M14.67 22.39V21c.022-.465-.303-.86-.767-.882h-.116c-.3-.023-.603.14-.788.394-.164-.255-.442-.417-.743-.394-.256-.023-.51.116-.65.324v-.278h-.487v2.203h.487v-1.183c-.046-.278.162-.533.44-.58h.094c.325 0 .488.21.488.58v1.23h.487v-1.23c-.047-.278.162-.556.44-.58h.093c.325 0 .487.21.487.58v1.23l.534-.024zm2.712-1.09v-1.113h-.487v.28c-.162-.21-.417-.326-.695-.326-.65 0-1.16.51-1.16 1.16 0 .65.51 1.16 1.16 1.16.278 0 .533-.117.695-.325v.278h.487V21.3zm-1.786 0c.024-.37.348-.65.72-.626.37.023.65.348.626.72-.023.347-.302.625-.673.625-.372 0-.674-.28-.674-.65-.023-.047-.023-.047 0-.07zm12.085-1.16c.163 0 .325.024.465.094.14.046.278.14.37.255.117.115.186.23.256.37.117.3.117.626 0 .927-.046.14-.138.255-.254.37-.116.117-.232.186-.37.256-.303.116-.65.116-.952 0-.14-.046-.28-.14-.37-.255-.118-.116-.187-.232-.257-.37-.116-.302-.116-.627 0-.928.047-.14.14-.255.256-.37.115-.117.23-.187.37-.256.163-.07.325-.116.488-.093zm0 .465c-.092 0-.185.023-.278.046-.092.024-.162.094-.232.14-.07.07-.116.14-.14.232-.068.185-.068.394 0 .58.024.092.094.162.14.23.07.07.14.117.232.14.186.07.37.07.557 0 .092-.023.16-.092.23-.14.07-.068.117-.138.14-.23.07-.186.07-.395 0-.58-.023-.093-.093-.162-.14-.232-.07-.07-.138-.116-.23-.14-.094-.045-.187-.07-.28-.045zm-7.677.695c0-.695-.44-1.16-1.043-1.16-.65 0-1.16.534-1.137 1.183.023.65.534 1.16 1.183 1.136.325 0 .65-.093.905-.302l-.23-.348c-.187.14-.42.232-.65.232-.326.023-.627-.21-.673-.533h1.646v-.21zm-1.646-.21c.023-.3.278-.532.58-.532.3 0 .556.232.556.533h-1.136zm3.664-.346c-.207-.116-.44-.186-.695-.186-.255 0-.417.093-.417.255 0 .163.162.186.37.21l.233.022c.488.07.766.278.766.672 0 .395-.37.72-1.02.72-.348 0-.673-.094-.95-.28l.23-.37c.21.162.465.232.743.232.324 0 .51-.094.51-.28 0-.115-.117-.185-.395-.23l-.232-.024c-.487-.07-.765-.302-.765-.65 0-.44.37-.718.927-.718.325 0 .627.07.905.232l-.21.394zm2.32-.116h-.788v.997c0 .23.07.37.325.37.14 0 .3-.046.417-.115l.14.417c-.186.116-.395.162-.604.162-.58 0-.765-.302-.765-.812v-1.02h-.44v-.44h.44v-.673h.487v.672h.79v.44zm1.67-.51c.117 0 .233.023.35.07l-.14.463c-.093-.045-.21-.045-.302-.045-.325 0-.464.208-.464.58v1.25h-.487v-2.2h.487v.277c.116-.255.325-.37.557-.394z\\\" fill=\\\"#000\\\" />\\n      <path fill=\\\"#7673C0\\\" d=\\\"M23.64 3.287h-7.305V16.41h7.306\\\" />\\n      <path d=\\\"M16.8 9.848c0-2.55 1.183-4.985 3.2-6.56C16.384.435 11.12 1.06 8.29 4.7 5.435 8.32 6.06 13.58 9.703 16.41c3.038 2.387 7.283 2.387 10.32 0-2.04-1.578-3.223-3.99-3.223-6.562z\\\" fill=\\\"#EB001B\\\" />\\n      <path d=\\\"M33.5 9.848c0 4.613-3.735 8.346-8.35 8.346-1.88 0-3.69-.626-5.15-1.785 3.618-2.83 4.245-8.092 1.415-11.71-.418-.532-.882-.996-1.415-1.413C23.618.437 28.883 1.06 31.736 4.7 32.873 6.163 33.5 7.994 33.5 9.85z\\\" fill=\\\"#00A1DF\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-elo\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>Elo</title>\\n      <path d=\\\"M46.177 29H1.823C.9 29 0 28.13 0 27.187V1.813C0 .87.9 0 1.823 0h44.354C47.1 0 48 .87 48 1.813v25.375C48 28.13 47.1 29 46.177 29z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M4.8 9.14c0-.427.57-.973 1.067-.973h7.466c.496 0 1.067.546 1.067.972v3.888c0 .425-.57.972-1.067.972H5.867c-.496 0-1.067-.547-1.067-.972v-3.89z\\\" fill=\\\"#828282\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"10.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"4.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <path d=\\\"M6.55 16.333h34.9c.966 0 1.75.784 1.75 1.75 0 .967-.784 1.75-1.75 1.75H6.55c-.966 0-1.75-.783-1.75-1.75 0-.966.784-1.75 1.75-1.75z\\\" fill=\\\"#828282\\\" />\\n      <ellipse fill=\\\"#828282\\\" cx=\\\"40.2\\\" cy=\\\"6.417\\\" rx=\\\"3\\\" ry=\\\"2.917\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-hiper\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>Hiper</title>\\n      <path d=\\\"M46.177 29H1.823C.9 29 0 28.13 0 27.187V1.813C0 .87.9 0 1.823 0h44.354C47.1 0 48 .87 48 1.813v25.375C48 28.13 47.1 29 46.177 29z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M4.8 9.14c0-.427.57-.973 1.067-.973h7.466c.496 0 1.067.546 1.067.972v3.888c0 .425-.57.972-1.067.972H5.867c-.496 0-1.067-.547-1.067-.972v-3.89z\\\" fill=\\\"#828282\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"10.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"4.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <path d=\\\"M6.55 16.333h34.9c.966 0 1.75.784 1.75 1.75 0 .967-.784 1.75-1.75 1.75H6.55c-.966 0-1.75-.783-1.75-1.75 0-.966.784-1.75 1.75-1.75z\\\" fill=\\\"#828282\\\" />\\n      <ellipse fill=\\\"#828282\\\" cx=\\\"40.2\\\" cy=\\\"6.417\\\" rx=\\\"3\\\" ry=\\\"2.917\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"icon-hipercard\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>Hipercard</title>\\n      <path d=\\\"M46.177 29H1.823C.9 29 0 28.13 0 27.187V1.813C0 .87.9 0 1.823 0h44.354C47.1 0 48 .87 48 1.813v25.375C48 28.13 47.1 29 46.177 29z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M4.8 9.14c0-.427.57-.973 1.067-.973h7.466c.496 0 1.067.546 1.067.972v3.888c0 .425-.57.972-1.067.972H5.867c-.496 0-1.067-.547-1.067-.972v-3.89z\\\" fill=\\\"#828282\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"10.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"4.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <path d=\\\"M6.55 16.333h34.9c.966 0 1.75.784 1.75 1.75 0 .967-.784 1.75-1.75 1.75H6.55c-.966 0-1.75-.783-1.75-1.75 0-.966.784-1.75 1.75-1.75z\\\" fill=\\\"#828282\\\" />\\n      <ellipse fill=\\\"#828282\\\" cx=\\\"40.2\\\" cy=\\\"6.417\\\" rx=\\\"3\\\" ry=\\\"2.917\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"logoPayPal\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>PayPal Logo</title>\\n      <path d=\\\"M46 29H2c-1.1 0-2-.87-2-1.932V1.934C0 .87.9 0 2 0h44c1.1 0 2 .87 2 1.934v25.134C48 28.13 47.1 29 46 29z\\\" fill-opacity=\\\"0\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M31.216 16.4c.394-.7.69-1.5.886-2.4.196-.8.196-1.6.1-2.2-.1-.7-.396-1.2-.79-1.7-.195-.3-.59-.5-.885-.7.1-.8.1-1.5 0-2.1-.1-.6-.394-1.1-.886-1.6-.885-1-2.56-1.6-4.922-1.6h-6.4c-.492 0-.787.3-.886.8l-2.658 17.2c0 .2 0 .3.1.4.097.1.294.2.393.2h4.036l-.295 1.8c0 .1 0 .3.1.4.098.1.195.2.393.2h3.35c.393 0 .688-.3.786-.7v-.2l.59-4.1v-.2c.1-.4.395-.7.788-.7h.59c1.675 0 3.152-.4 4.137-1.1.59-.5 1.083-1 1.478-1.7h-.002z\\\" fill=\\\"#263B80\\\" />\\n      <path d=\\\"M21.364 9.4c0-.3.196-.5.492-.6.098-.1.196-.1.394-.1h5.02c.592 0 1.183 0 1.675.1.1 0 .295.1.394.1.098 0 .294.1.393.1.1 0 .1 0 .197.102.295.1.492.2.69.3.295-1.6 0-2.7-.887-3.8-.985-1.1-2.658-1.6-4.923-1.6h-6.4c-.49 0-.885.3-.885.8l-2.758 17.3c-.098.3.197.6.59.6h3.94l.985-6.4 1.083-6.9z\\\" fill=\\\"#263B80\\\" />\\n      <path d=\\\"M30.523 9.4c0 .1 0 .3-.098.4-.887 4.4-3.742 5.9-7.484 5.9h-1.87c-.492 0-.787.3-.886.8l-.985 6.2-.296 1.8c0 .3.196.6.492.6h3.348c.394 0 .69-.3.787-.7v-.2l.592-4.1v-.2c.1-.4.394-.7.787-.7h.69c3.248 0 5.808-1.3 6.497-5.2.296-1.6.197-3-.69-3.9-.196-.3-.49-.5-.885-.7z\\\" fill=\\\"#159BD7\\\" />\\n      <path d=\\\"M29.635 9c-.098 0-.295-.1-.394-.1-.098 0-.294-.1-.393-.1-.492-.102-1.083-.102-1.673-.102h-5.022c-.1 0-.197 0-.394.1-.198.1-.394.3-.492.6l-1.083 6.9v.2c.1-.5.492-.8.886-.8h1.87c3.742 0 6.598-1.5 7.484-5.9 0-.1 0-.3.098-.4-.196-.1-.492-.2-.69-.3 0-.1-.098-.1-.196-.1z\\\" fill=\\\"#232C65\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"logoPayPalCredit\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>PayPal Credit Logo</title>\\n      <path d=\\\"M46 29H2c-1.1 0-2-.87-2-1.932V1.934C0 .87.9 0 2 0h44c1.1 0 2 .87 2 1.934v25.134C48 28.13 47.1 29 46 29z\\\" fill-opacity=\\\"0\\\" fill=\\\"#FFF\\\" fill-rule=\\\"nonzero\\\" />\\n      <path d=\\\"M27.44 21.6h.518c1.377 0 2.67-.754 2.953-2.484.248-1.588-.658-2.482-2.14-2.482h-.38c-.093 0-.172.067-.187.16l-.763 4.805zm-1.254-6.646c.024-.158.16-.273.32-.273h2.993c2.47 0 4.2 1.942 3.81 4.436-.4 2.495-2.752 4.436-5.21 4.436h-3.05c-.116 0-.205-.104-.187-.218l1.323-8.38zM22.308 16.907l-.192 1.21h2.38c.116 0 .204.103.186.217l-.23 1.462c-.023.157-.16.273-.318.273h-2.048c-.16 0-.294.114-.32.27l-.203 1.26h2.52c.117 0 .205.102.187.217l-.228 1.46c-.025.16-.16.275-.32.275h-4.55c-.116 0-.204-.104-.186-.218l1.322-8.38c.025-.158.16-.273.32-.273h4.55c.116 0 .205.104.187.22l-.23 1.46c-.024.158-.16.274-.32.274H22.63c-.16 0-.295.115-.32.273M35.325 23.552h-1.81c-.115 0-.203-.104-.185-.218l1.322-8.38c.025-.158.16-.273.32-.273h1.81c.115 0 .203.104.185.22l-1.322 8.38c-.025.156-.16.272-.32.272M14.397 18.657h.224c.754 0 1.62-.14 1.777-1.106.158-.963-.345-1.102-1.15-1.104h-.326c-.097 0-.18.07-.197.168l-.326 2.043zm3.96 4.895h-2.37c-.102 0-.194-.058-.238-.15l-1.565-3.262h-.023l-.506 3.19c-.02.128-.13.222-.26.222h-1.86c-.116 0-.205-.104-.187-.218l1.33-8.432c.02-.128.13-.22.26-.22h3.222c1.753 0 2.953.834 2.66 2.728-.2 1.224-1.048 2.283-2.342 2.506l2.037 3.35c.076.125-.014.286-.16.286zM40.216 23.552h-1.808c-.116 0-.205-.104-.187-.218l1.06-6.7h-1.684c-.116 0-.205-.104-.187-.218l.228-1.462c.025-.157.16-.273.32-.273h5.62c.116 0 .205.104.186.22l-.228 1.46c-.025.158-.16.274-.32.274h-1.63l-1.05 6.645c-.025.156-.16.272-.32.272M11.467 17.202c-.027.164-.228.223-.345.104-.395-.405-.975-.62-1.6-.62-1.41 0-2.526 1.083-2.75 2.458-.21 1.4.588 2.41 2.022 2.41.592 0 1.22-.225 1.74-.6.144-.105.34.02.313.194l-.328 2.03c-.02.12-.108.22-.226.254-.702.207-1.24.355-1.9.355-3.823 0-4.435-3.266-4.238-4.655.553-3.894 3.712-4.786 5.65-4.678.623.034 1.182.117 1.73.323.177.067.282.25.252.436l-.32 1.99\\\" fill=\\\"#21306F\\\" />\\n      <path d=\\\"M23.184 7.67c-.11.717-.657.717-1.186.717h-.302l.212-1.34c.013-.08.082-.14.164-.14h.138c.36 0 .702 0 .877.206.105.123.137.305.097.557zm-.23-1.87h-1.998c-.137 0-.253.098-.274.233l-.808 5.123c-.016.1.062.192.165.192h1.024c.095 0 .177-.07.192-.164l.23-1.452c.02-.135.136-.235.273-.235h.63c1.317 0 2.076-.636 2.275-1.898.09-.553.003-.987-.255-1.29-.284-.334-.788-.51-1.456-.51z\\\" fill=\\\"#0093C7\\\" />\\n      <path d=\\\"M8.936 7.67c-.11.717-.656.717-1.186.717h-.302l.212-1.34c.013-.08.082-.14.164-.14h.138c.36 0 .702 0 .877.206.104.123.136.305.096.557zm-.23-1.87H6.708c-.136 0-.253.098-.274.233l-.808 5.123c-.016.1.062.192.165.192h.955c.136 0 .252-.1.274-.234l.217-1.382c.02-.135.137-.235.274-.235h.633c1.316 0 2.075-.636 2.274-1.898.09-.553.003-.987-.255-1.29-.284-.334-.788-.51-1.456-.51zM13.343 9.51c-.092.545-.526.912-1.08.912-.277 0-.5-.09-.642-.258-.14-.168-.193-.406-.148-.672.086-.542.527-.92 1.072-.92.27 0 .492.09.637.26.148.172.205.412.163.677zm1.334-1.863h-.957c-.082 0-.152.06-.164.14l-.042.268-.067-.097c-.208-.3-.67-.4-1.13-.4-1.057 0-1.96.8-2.135 1.923-.092.56.038 1.097.356 1.47.29.344.708.487 1.204.487.852 0 1.325-.548 1.325-.548l-.043.265c-.016.1.062.193.164.193h.862c.136 0 .253-.1.274-.234l.517-3.275c.017-.102-.06-.193-.163-.193z\\\" fill=\\\"#21306F\\\" />\\n      <path d=\\\"M27.59 9.51c-.09.545-.525.912-1.078.912-.278 0-.5-.09-.643-.258-.142-.168-.195-.406-.15-.672.086-.542.526-.92 1.07-.92.273 0 .494.09.64.26.146.172.203.412.16.677zm1.334-1.863h-.956c-.082 0-.152.06-.164.14l-.043.268-.065-.097c-.208-.3-.67-.4-1.13-.4-1.057 0-1.96.8-2.136 1.923-.092.56.038 1.097.355 1.47.292.344.71.487 1.205.487.852 0 1.325-.548 1.325-.548l-.043.265c-.016.1.062.193.164.193h.862c.136 0 .253-.1.274-.234l.517-3.275c.015-.102-.063-.193-.166-.193z\\\" fill=\\\"#0093C7\\\" />\\n      <path d=\\\"M19.77 7.647h-.96c-.092 0-.178.045-.23.122L17.254 9.72l-.562-1.877c-.035-.118-.143-.198-.266-.198h-.945c-.113 0-.194.112-.157.22l1.06 3.108-.997 1.404c-.078.11 0 .262.136.262h.96c.092 0 .177-.044.23-.12l3.196-4.614c.077-.11-.002-.26-.137-.26\\\" fill=\\\"#21306F\\\" />\\n      <path d=\\\"M30.052 5.94l-.82 5.216c-.016.1.062.192.165.192h.824c.138 0 .254-.1.275-.234l.81-5.122c.015-.1-.064-.193-.166-.193h-.924c-.082 0-.15.06-.164.14\\\" fill=\\\"#0093C7\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconCardFront\\\" viewBox=\\\"0 0 48 29\\\">\\n      <title>Generic Card</title>\\n      <path d=\\\"M46.177 29H1.823C.9 29 0 28.13 0 27.187V1.813C0 .87.9 0 1.823 0h44.354C47.1 0 48 .87 48 1.813v25.375C48 28.13 47.1 29 46.177 29z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M4.8 9.14c0-.427.57-.973 1.067-.973h7.466c.496 0 1.067.546 1.067.972v3.888c0 .425-.57.972-1.067.972H5.867c-.496 0-1.067-.547-1.067-.972v-3.89z\\\" fill=\\\"#828282\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"10.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <rect fill=\\\"#828282\\\" x=\\\"4.8\\\" y=\\\"22.167\\\" width=\\\"3.6\\\" height=\\\"2.333\\\" rx=\\\"1.167\\\" />\\n      <path d=\\\"M6.55 16.333h34.9c.966 0 1.75.784 1.75 1.75 0 .967-.784 1.75-1.75 1.75H6.55c-.966 0-1.75-.783-1.75-1.75 0-.966.784-1.75 1.75-1.75z\\\" fill=\\\"#828282\\\" />\\n      <ellipse fill=\\\"#828282\\\" cx=\\\"40.2\\\" cy=\\\"6.417\\\" rx=\\\"3\\\" ry=\\\"2.917\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconCVVBack\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>CVV Back</title>\\n      <path d=\\\"M38.48 24H1.52C.75 24 0 23.28 0 22.5v-21C0 .72.75 0 1.52 0h36.96C39.25 0 40 .72 40 1.5v21c0 .78-.75 1.5-1.52 1.5z\\\" fill=\\\"#FFF\\\"/>\\n      <path fill=\\\"#828282\\\" d=\\\"M0 5h40v4H0z\\\" />\\n      <path d=\\\"M20 13.772v5.456c0 .423.37.772.82.772h13.36c.45 0 .82-.35.82-.772v-5.456c0-.423-.37-.772-.82-.772H20.82c-.45 0-.82.35-.82.772zm-1-.142c0-.9.76-1.63 1.68-1.63h13.64c.928 0 1.68.737 1.68 1.63v5.74c0 .9-.76 1.63-1.68 1.63H20.68c-.928 0-1.68-.737-1.68-1.63v-5.74z\\\" fill=\\\"#000\\\" fill-rule=\\\"nonzero\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"23.5\\\" cy=\\\"16.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"27.5\\\" cy=\\\"16.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"31.5\\\" cy=\\\"16.5\\\" r=\\\"1.5\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconCVVFront\\\" viewBox=\\\"0 0 40 24\\\">\\n      <title>CVV Front</title>\\n      <path d=\\\"M38.48 24H1.52C.75 24 0 23.28 0 22.5v-21C0 .72.75 0 1.52 0h36.96C39.25 0 40 .72 40 1.5v21c0 .78-.75 1.5-1.52 1.5z\\\" fill=\\\"#FFF\\\" />\\n      <path d=\\\"M16 5.772v5.456c0 .423.366.772.81.772h17.38c.444 0 .81-.348.81-.772V5.772C35 5.35 34.634 5 34.19 5H16.81c-.444 0-.81.348-.81.772zm-1-.142c0-.9.75-1.63 1.66-1.63h17.68c.917 0 1.66.737 1.66 1.63v5.74c0 .9-.75 1.63-1.66 1.63H16.66c-.917 0-1.66-.737-1.66-1.63V5.63z\\\" fill=\\\"#000\\\" fill-rule=\\\"nonzero\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"19.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"27.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"23.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\" />\\n      <circle fill=\\\"#828282\\\" cx=\\\"31.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\" />\\n      <path d=\\\"M4 7.833C4 7.47 4.476 7 4.89 7h6.22c.414 0 .89.47.89.833v3.334c0 .364-.476.833-.89.833H4.89c-.414 0-.89-.47-.89-.833V7.833zM4 18.5c0-.828.668-1.5 1.5-1.5h29c.828 0 1.5.666 1.5 1.5 0 .828-.668 1.5-1.5 1.5h-29c-.828 0-1.5-.666-1.5-1.5z\\\" fill=\\\"#828282\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconCheck\\\" viewBox=\\\"0 0 42 32\\\">\\n      <title>Check</title>\\n      <path class=\\\"path1\\\" d=\\\"M14.379 29.76L39.741 3.415 36.194.001l-21.815 22.79-10.86-11.17L0 15.064z\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconX\\\" viewBox=\\\"0 0 32 32\\\">\\n      <title>X</title>\\n      <path d=\\\"M29 3.54L25.46 0 14.5 10.97 3.54 0.01 0 3.54 10.96 14.5 0.01 25.46 3.54 28.99 14.5 18.04 25.46 29 28.99 25.46 18.03 14.5 29 3.54z\\\"/>\\n    </symbol>\\n\\n    <symbol id=\\\"iconLockLoader\\\" viewBox=\\\"0 0 28 32\\\">\\n      <title>Lock Loader</title>\\n      <path d=\\\"M6 10V8c0-4.422 3.582-8 8-8 4.41 0 8 3.582 8 8v2h-4V7.995C18 5.79 16.205 4 14 4c-2.21 0-4 1.792-4 3.995V10H6zM.997 14c-.55 0-.997.445-.997.993v16.014c0 .548.44.993.997.993h26.006c.55 0 .997-.445.997-.993V14.993c0-.548-.44-.993-.997-.993H.997z\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"iconError\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\">\\n      <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\" />\\n      <path d=\\\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\\\" />\\n    </symbol>\\n\\n    <symbol id=\\\"logoApplePay\\\" viewBox=\\\"0 0 165.52 105.97\\\" width=\\\"24\\\">\\n      <title>Apple Pay Logo</title>\\n      <path id=\\\"_Path_\\\" data-name=\\\"&lt;Path&gt;\\\" fill=\\\"#231f20\\\" d=\\\"M150.7 0h-139a20.78 20.78 0 0 0-3.12.3 10.51 10.51 0 0 0-3 1 9.94 9.94 0 0 0-4.31 4.32 10.46 10.46 0 0 0-1 3A20.65 20.65 0 0 0 0 11.7v82.57a20.64 20.64 0 0 0 .3 3.11 10.46 10.46 0 0 0 1 3 9.94 9.94 0 0 0 4.35 4.35 10.47 10.47 0 0 0 3 1 20.94 20.94 0 0 0 3.11.27h142.06a21 21 0 0 0 3.11-.27 10.48 10.48 0 0 0 3-1 9.94 9.94 0 0 0 4.35-4.35 10.4 10.4 0 0 0 1-3 20.63 20.63 0 0 0 .27-3.11V11.69a20.64 20.64 0 0 0-.27-3.11 10.4 10.4 0 0 0-1-3 9.94 9.94 0 0 0-4.35-4.35 10.52 10.52 0 0 0-3-1 20.84 20.84 0 0 0-3.1-.23h-1.43z\\\"/>\\n      <path id=\\\"_Path_2\\\" data-name=\\\"&lt;Path&gt;\\\" fill=\\\"#fff\\\" d=\\\"M150.7 3.53h3.03a17.66 17.66 0 0 1 2.58.22 7 7 0 0 1 2 .65 6.41 6.41 0 0 1 2.8 2.81 6.88 6.88 0 0 1 .64 2 17.56 17.56 0 0 1 .22 2.58v82.38a17.54 17.54 0 0 1-.22 2.59 6.85 6.85 0 0 1-.64 2 6.41 6.41 0 0 1-2.81 2.81 6.92 6.92 0 0 1-2 .65 18 18 0 0 1-2.57.22H11.79a18 18 0 0 1-2.58-.22 6.94 6.94 0 0 1-2-.65 6.41 6.41 0 0 1-2.8-2.8 6.93 6.93 0 0 1-.65-2 17.47 17.47 0 0 1-.22-2.58v-82.4a17.49 17.49 0 0 1 .22-2.59 6.92 6.92 0 0 1 .65-2 6.41 6.41 0 0 1 2.8-2.8 7 7 0 0 1 2-.65 17.63 17.63 0 0 1 2.58-.22H150.7\\\"/>\\n      <g id=\\\"_Group_\\\" data-name=\\\"&lt;Group&gt;\\\">\\n      <g id=\\\"_Group_2\\\" data-name=\\\"&lt;Group&gt;\\\">\\n      <path id=\\\"_Path_3\\\" data-name=\\\"&lt;Path&gt;\\\" class=\\\"cls-1\\\" d=\\\"M43.51 35.77a9.15 9.15 0 0 0 2.1-6.52 9.07 9.07 0 0 0-6 3.11 8.56 8.56 0 0 0-2.16 6.27 7.57 7.57 0 0 0 6.06-2.86\\\"/>\\n      <path id=\\\"_Path_4\\\" data-name=\\\"&lt;Path&gt;\\\" class=\\\"cls-1\\\" d=\\\"M45.59 39.08c-3.35-.2-6.2 1.9-7.79 1.9s-4-1.8-6.7-1.75a9.87 9.87 0 0 0-8.4 5.1c-3.6 6.2-.95 15.4 2.55 20.45 1.7 2.5 3.75 5.25 6.45 5.15s3.55-1.65 6.65-1.65 4 1.65 6.7 1.6 4.55-2.5 6.25-5a22.2 22.2 0 0 0 2.8-5.75 9.08 9.08 0 0 1-5.45-8.25A9.26 9.26 0 0 1 53 43.13a9.57 9.57 0 0 0-7.45-4\\\"/>\\n      </g>\\n      <g id=\\\"_Group_3\\\" data-name=\\\"&lt;Group&gt;\\\">\\n      <path id=\\\"_Compound_Path_\\\" data-name=\\\"&lt;Compound Path&gt;\\\" fill=\\\"#231f20\\\" d=\\\"M79 32.11c7.28 0 12.35 5 12.35 12.32S86.15 56.8 78.79 56.8h-8.06v12.82h-5.82V32.11zm-8.27 19.81h6.68c5.07 0 8-2.73 8-7.46S82.48 37 77.44 37h-6.71z\\\"/>\\n      <path id=\\\"_Compound_Path_2\\\" data-name=\\\"&lt;Compound Path&gt;\\\" fill=\\\"#231f20\\\" d=\\\"M92.76 61.85c0-4.81 3.67-7.56 10.42-8l7.25-.44v-2.06c0-3-2-4.7-5.56-4.7-2.94 0-5.07 1.51-5.51 3.82h-5.24c.16-4.86 4.73-8.4 10.92-8.4 6.65 0 11 3.48 11 8.89v18.66h-5.38v-4.5h-.13a9.59 9.59 0 0 1-8.58 4.78c-5.42 0-9.19-3.22-9.19-8.05zm17.68-2.42v-2.11l-6.47.42c-3.64.23-5.54 1.59-5.54 4s2 3.77 5.07 3.77c3.95-.05 6.94-2.57 6.94-6.08z\\\"/>\\n      <path id=\\\"_Compound_Path_3\\\" data-name=\\\"&lt;Compound Path&gt;\\\" fill=\\\"#231f20\\\" d=\\\"M121 79.65v-4.5a17.14 17.14 0 0 0 1.72.1c2.57 0 4-1.09 4.91-3.9l.52-1.66-9.88-27.29h6.08l6.86 22.15h.13l6.86-22.15h5.93l-10.21 28.67c-2.34 6.58-5 8.73-10.68 8.73a15.93 15.93 0 0 1-2.24-.15z\\\"/>\\n      </g>\\n      </g>\\n    </symbol>\\n    <symbol id=\\\"logoGooglePay\\\" viewbox=\\\"0 0 752 400\\\" >\\n      <g>\\n        <title>Google Pay Mark</title>\\n        <path d=\\\"m552.7,0l-352,0c-110,0 -200,90 -200,200l0,0c0,110 90,200 200,200l352,0c110,0 200,-90 200,-200l0,0c0,-110 -90,-200 -200,-200z\\\" fill=\\\"#FFFFFF\\\" id=\\\"Base_1_\\\"/>\\n        <path d=\\\"m552.7,16.2c24.7,0 48.7,4.9 71.3,14.5c21.9,9.3 41.5,22.6 58.5,39.5c16.9,16.9 30.2,36.6 39.5,58.5c9.6,22.6 14.5,46.6 14.5,71.3s-4.9,48.7 -14.5,71.3c-9.3,21.9 -22.6,41.5 -39.5,58.5c-16.9,16.9 -36.6,30.2 -58.5,39.5c-22.6,9.6 -46.6,14.5 -71.3,14.5l-352,0c-24.7,0 -48.7,-4.9 -71.3,-14.5c-21.9,-9.3 -41.5,-22.6 -58.5,-39.5c-16.9,-16.9 -30.2,-36.6 -39.5,-58.5c-9.6,-22.6 -14.5,-46.6 -14.5,-71.3s4.9,-48.7 14.5,-71.3c9.3,-21.9 22.6,-41.5 39.5,-58.5c16.9,-16.9 36.6,-30.2 58.5,-39.5c22.6,-9.6 46.6,-14.5 71.3,-14.5l352,0m0,-16.2l-352,0c-110,0 -200,90 -200,200l0,0c0,110 90,200 200,200l352,0c110,0 200,-90 200,-200l0,0c0,-110 -90,-200 -200,-200l0,0z\\\" fill=\\\"#3C4043\\\" id=\\\"Outline\\\"/>\\n        <g id=\\\"G_Pay_Lockup_1_\\\">\\n         <g id=\\\"Pay_Typeface_3_\\\">\\n          <path d=\\\"m359.3,214.2l0,60.5l-19.2,0l0,-149.4l50.9,0c12.9,0 23.9,4.3 32.9,12.9c9.2,8.6 13.8,19.1 13.8,31.5c0,12.7 -4.6,23.2 -13.8,31.7c-8.9,8.5 -19.9,12.7 -32.9,12.7l-31.7,0l0,0.1zm0,-70.5l0,52.1l32.1,0c7.6,0 14,-2.6 19,-7.7c5.1,-5.1 7.7,-11.3 7.7,-18.3c0,-6.9 -2.6,-13 -7.7,-18.1c-5,-5.3 -11.3,-7.9 -19,-7.9l-32.1,0l0,-0.1z\\\" fill=\\\"#3C4043\\\" id=\\\"Letter_p_3_\\\"/>\\n          <path d=\\\"m487.9,169.1c14.2,0 25.4,3.8 33.6,11.4c8.2,7.6 12.3,18 12.3,31.2l0,63l-18.3,0l0,-14.2l-0.8,0c-7.9,11.7 -18.5,17.5 -31.7,17.5c-11.3,0 -20.7,-3.3 -28.3,-10s-11.4,-15 -11.4,-25c0,-10.6 4,-19 12,-25.2c8,-6.3 18.7,-9.4 32,-9.4c11.4,0 20.8,2.1 28.1,6.3l0,-4.4c0,-6.7 -2.6,-12.3 -7.9,-17c-5.3,-4.7 -11.5,-7 -18.6,-7c-10.7,0 -19.2,4.5 -25.4,13.6l-16.9,-10.6c9.3,-13.5 23.1,-20.2 41.3,-20.2zm-24.8,74.2c0,5 2.1,9.2 6.4,12.5c4.2,3.3 9.2,5 14.9,5c8.1,0 15.3,-3 21.6,-9s9.5,-13 9.5,-21.1c-6,-4.7 -14.3,-7.1 -25,-7.1c-7.8,0 -14.3,1.9 -19.5,5.6c-5.3,3.9 -7.9,8.6 -7.9,14.1z\\\" fill=\\\"#3C4043\\\" id=\\\"Letter_a_3_\\\"/>\\n          <path d=\\\"m638.2,172.4l-64,147.2l-19.8,0l23.8,-51.5l-42.2,-95.7l20.9,0l30.4,73.4l0.4,0l29.6,-73.4l20.9,0z\\\" fill=\\\"#3C4043\\\" id=\\\"Letter_y_3_\\\"/>\\n         </g>\\n         <g id=\\\"G_Mark_1_\\\">\\n          <path d=\\\"m282.93,202c0,-6.26 -0.56,-12.25 -1.6,-18.01l-80.48,0l0,33l46.35,0.01c-1.88,10.98 -7.93,20.34 -17.2,26.58l0,21.41l27.59,0c16.11,-14.91 25.34,-36.95 25.34,-62.99z\\\" fill=\\\"#4285F4\\\" id=\\\"Blue_500\\\"/>\\n          <path d=\\\"m230.01,243.58c-7.68,5.18 -17.57,8.21 -29.14,8.21c-22.35,0 -41.31,-15.06 -48.1,-35.36l-28.46,0l0,22.08c14.1,27.98 43.08,47.18 76.56,47.18c23.14,0 42.58,-7.61 56.73,-20.71l-27.59,-21.4z\\\" fill=\\\"#34A853\\\" id=\\\"Green_500_1_\\\"/>\\n          <path d=\\\"m150.09,200.05c0,-5.7 0.95,-11.21 2.68,-16.39l0,-22.08l-28.46,0c-5.83,11.57 -9.11,24.63 -9.11,38.47s3.29,26.9 9.11,38.47l28.46,-22.08c-1.73,-5.18 -2.68,-10.69 -2.68,-16.39z\\\" fill=\\\"#FABB05\\\" id=\\\"Yellow_500_1_\\\"/>\\n          <path d=\\\"m200.87,148.3c12.63,0 23.94,4.35 32.87,12.85l24.45,-24.43c-14.85,-13.83 -34.21,-22.32 -57.32,-22.32c-33.47,0 -62.46,19.2 -76.56,47.18l28.46,22.08c6.79,-20.3 25.75,-35.36 48.1,-35.36z\\\" fill=\\\"#E94235\\\" id=\\\"Red_500\\\"/>\\n         </g>\\n        </g>\\n       </g>\\n    </symbol>\\n\\n    <symbol id=\\\"logoVenmo\\\" viewBox=\\\"0 0 48 32\\\">\\n      <title>Venmo</title>\\n      <g fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n        <rect fill=\\\"#3D95CE\\\" width=\\\"47.4074074\\\" height=\\\"31.6049383\\\" rx=\\\"3.16049383\\\"/>\\n        <path d=\\\"M33.1851852,10.1131555 C33.1851852,14.8373944 29.2425262,20.9745161 26.0425868,25.2839506 L18.7337285,25.2839506 L15.8024691,7.35534396 L22.202175,6.73384536 L23.7519727,19.4912014 C25.2000422,17.0781163 26.9870326,13.2859484 26.9870326,10.7005 C26.9870326,9.28531656 26.7500128,8.32139205 26.3796046,7.52770719 L32.207522,6.32098765 C32.8813847,7.45939896 33.1851852,8.63196439 33.1851852,10.1131555 Z\\\" fill=\\\"#FFF\\\"/>\\n      </g>\\n    </symbol>\\n    <symbol id=\\\"buttonVenmo\\\" viewBox=\\\"0 0 295 42\\\">\\n      <g fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n        <rect fill=\\\"#3D95CE\\\" width=\\\"295\\\" height=\\\"42\\\" rx=\\\"3\\\"/>\\n        <path d=\\\"M11.3250791 0C11.7902741.780434316 12 1.58428287 12 2.59970884 12 5.838396 9.27822123 10.0456806 7.06917212 13L2.02356829 13 0 .709099732 4.41797878.283033306 5.48786751 9.02879887C6.48752911 7.3745159 7.72116169 4.77480706 7.72116169 3.00236102 7.72116169 2.03218642 7.55753727 1.37137098 7.30182933.827262801L11.3250791 0 11.3250791 0zM17.5051689 5.68512193C18.333931 5.68512193 20.4203856 5.28483546 20.4203856 4.03281548 20.4203856 3.43161451 20.0177536 3.13172102 19.5432882 3.13172102 18.7131868 3.13172102 17.6238766 4.18269796 17.5051689 5.68512193L17.5051689 5.68512193zM17.4102028 8.1647385C17.4102028 9.69351403 18.2153451 10.293301 19.2827401 10.293301 20.4451012 10.293301 21.5580312 9.99340752 23.0045601 9.21725797L22.4597224 13.1234575C21.440541 13.649203 19.8521716 14 18.310433 14 14.3996547 14 13 11.49596 13 8.36552446 13 4.30815704 15.2767521 0 19.9706358 0 22.554932 0 24 1.52864698 24 3.65720949 24.0002435 7.08869546 19.8287953 8.13992948 17.4102028 8.1647385L17.4102028 8.1647385zM37 2.84753211C37 3.32189757 36.9261179 4.00994664 36.8526108 4.45959542L35.4649774 12.9998782 30.9621694 12.9998782 32.2279161 5.1711436C32.2519185 4.95879931 32.3256755 4.53131032 32.3256755 4.29412759 32.3256755 3.72466988 31.9603904 3.5825794 31.5212232 3.5825794 30.9379171 3.5825794 30.3532359 3.84326124 29.9638234 4.03356751L28.5281854 13 24 13 26.0686989.213683657 29.9878258.213683657 30.0374555 1.23425123C30.9620444.641294408 32.1795365 3.90379019e-8 33.9069526 3.90379019e-8 36.1955476-.000243475057 37 1.1387937 37 2.84753211L37 2.84753211zM51.2981937 1.39967969C52.6582977.49918987 53.9425913 0 55.7133897 0 58.1518468 0 59 1.13900518 59 2.84769558 59 3.32204771 58.9223438 4.01007745 58.8448195 4.4597136L57.3830637 12.9997565 52.6328518 12.9997565 53.9932194 5.00577861C54.0182698 4.792101 54.0708756 4.53142648 54.0708756 4.36608506 54.0708756 3.72493046 53.6854953 3.58272222 53.2224587 3.58272222 52.6325881 3.58272222 52.0429812 3.81989829 51.6052587 4.03369766L50.0914245 12.9998782 45.3423992 12.9998782 46.7027668 5.00590037C46.7278172 4.79222275 46.7788409 4.53154824 46.7788409 4.36620681 46.7788409 3.72505221 46.3933287 3.58284398 45.9318743 3.58284398 45.3153711 3.58284398 44.7000546 3.84351849 44.2893602 4.03381941L42.7740757 13 38 13 40.1814929.214042876 44.2643098.214042876 44.3925941 1.28145692C45.3423992.641763367 46.6253743.000487014507 48.3452809.000487014507 49.8344603 0 50.8094476.593061916 51.2981937 1.39967969L51.2981937 1.39967969zM67.5285327 5.39061542C67.5285327 4.29258876 67.2694573 3.54396333 66.4936812 3.54396333 64.7759775 3.54396333 64.4232531 6.76273249 64.4232531 8.4093242 64.4232531 9.65848482 64.7530184 10.4315735 65.5285529 10.4315735 67.1521242 10.4315735 67.5285327 7.03707905 67.5285327 5.39061542L67.5285327 5.39061542zM60 8.21054461C60 3.96893154 62.1170713 0 66.988027 0 70.6583423 0 72 2.29633967 72 5.46592624 72 9.65835674 69.905767 14 64.9173573 14 61.2233579 14 60 11.4294418 60 8.21054461L60 8.21054461z\\\" transform=\\\"translate(112 14)\\\" fill=\\\"#FFF\\\"/>\\n      </g>\\n    </symbol>\\n\\n    <symbol id=\\\"iconClose\\\" width=\\\"21\\\" height=\\\"21\\\" viewBox=\\\"0 0 21 21\\\" overflow=\\\"visible\\\">\\n      <path d=\\\"M16 5.414L14.586 4 10 8.586 5.414 4 4 5.414 8.586 10 4 14.586 5.414 16 10 11.414 14.586 16 16 14.586 11.414 10\\\"/>\\n    </symbol>\\n  </defs>\\n</svg>\\n\";\n\nvar PASS_THROUGH_EVENTS = [\n  'changeActiveView',\n  'paymentMethodRequestable',\n  'noPaymentMethodRequestable',\n  'paymentOptionSelected',\n\n  // Card View Events\n  'card:binAvailable',\n  'card:blur',\n  'card:cardTypeChange',\n  'card:empty',\n  'card:focus',\n  'card:inputSubmitRequest',\n  'card:notEmpty',\n  'card:validityChange',\n\n  // 3DS Events\n  '3ds:customer-canceled',\n  '3ds:authentication-modal-render',\n  '3ds:authentication-modal-close'\n];\nvar UPDATABLE_CONFIGURATION_OPTIONS = [\n  paymentOptionIDs.paypal,\n  paymentOptionIDs.paypalCredit,\n  paymentOptionIDs.applePay,\n  paymentOptionIDs.googlePay,\n  'threeDSecure'\n];\nvar UPDATABLE_CONFIGURATION_OPTIONS_THAT_REQUIRE_UNVAULTED_PAYMENT_METHODS_TO_BE_REMOVED = [\n  paymentOptionIDs.paypal,\n  paymentOptionIDs.paypalCredit,\n  paymentOptionIDs.applePay,\n  paymentOptionIDs.googlePay\n];\nvar HAS_RAW_PAYMENT_DATA = {};\nvar VERSION = '1.33.7';\n\nHAS_RAW_PAYMENT_DATA[constants.paymentMethodTypes.googlePay] = true;\nHAS_RAW_PAYMENT_DATA[constants.paymentMethodTypes.applePay] = true;\n\n/**\n * @typedef {object} Dropin~cardPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the card.\n * @property {object} details Additional account details. See a full list of details in the [Hosted Fields client reference](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#~tokenizePayload).\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `CreditCard` when the method requested is a card.\n * @property {object} binData Information about the card based on the bin. Documented {@link Dropin~binData|here}.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n * @property {?boolean} liabilityShifted If 3D Secure is configured, whether or not liability did shift.\n * @property {?boolean} liabilityShiftPossible If 3D Secure is configured, whether or not liability shift is possible.\n * @property {?object} threeDSecureInfo If 3D Secure is configured, the `threeDSecureInfo` documented in the [Three D Secure client reference](http://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#~verifyPayload)\n */\n\n/**\n * @typedef {object} Dropin~paypalPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the PayPal account.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {object} details Additional PayPal account details. See a full list of details in the [PayPal client reference](http://braintree.github.io/braintree-web/3.88.3/PayPalCheckout.html#~tokenizePayload).\n * @property {string} type The payment method type, always `PayPalAccount` when the method requested is a PayPal account.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n */\n\n/**\n * @typedef {object} Dropin~applePayPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the Apple Pay provided card.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {string} details.cardType Type of card, ex: Visa, Mastercard.\n * @property {string} details.cardHolderName The name of the card holder.\n * @property {string} details.dpanLastTwo Last two digits of card number.\n * @property {external:ApplePayPayment} details.rawPaymentData The raw response back from the Apple Pay flow, which includes billing/shipping address, phone and email if passed in as required parameters.\n * @property {string} description A human-readable description.\n * @property {string} type The payment method type, always `ApplePayCard` when the method requested is an Apple Pay provided card.\n * @property {object} binData Information about the card based on the bin. Documented {@link Dropin~binData|here}.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n */\n\n/**\n * @typedef {object} ApplePayPayment An [Apple Pay Payment object](https://developer.apple.com/documentation/apple_pay_on_the_web/applepaypayment).\n * @external ApplePayPayment\n * @see {@link https://developer.apple.com/documentation/apple_pay_on_the_web/applepaypayment ApplePayPayment}\n */\n\n/**\n * @typedef {object} Dropin~venmoPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the Venmo account.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {string} details.username The Venmo username.\n * @property {string} type The payment method type, always `VenmoAccount` when the method requested is a Venmo account.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n */\n\n/**\n * @typedef {object} Dropin~googlePayPaymentMethodPayload\n * @property {string} nonce The payment method nonce, used by your server to charge the Google Pay card.\n * @property {?boolean} vaulted If present and true, indicates that the payment method refers to a vaulted payment method.\n * @property {string} details.cardType Type of card, ex: Visa, Mastercard.\n * @property {string} details.lastFour The last 4 digits of the card.\n * @property {string} details.lastTwo The last 2 digits of the card.\n * @property {boolean} details.isNetworkTokenized True if the card is network tokenized. A network tokenized card is a generated virtual card with a device-specific account number (DPAN) that is used in place of the underlying source card.\n * @property {string} details.bin First six digits of card number.\n * @property {external:GooglePayPaymentData} details.rawPaymentData The raw response back from the Google Pay flow, which includes shipping address, phone and email if passed in as required parameters.\n * @property {string} type The payment method type, always `AndroidPayCard` when the method requested is a Google Pay Card.\n * @property {object} binData Information about the card based on the bin. Documented {@link Dropin~binData|here}.\n * @property {?string} deviceData If data collector is configured, the device data property to be used when making a transaction.\n */\n\n/**\n * @typedef {object} GooglePayPaymentData A [Google Pay Payment Data object](https://developers.google.com/pay/api/web/object-reference#PaymentData).\n * @external GooglePayPaymentData\n * @see {@link https://developers.google.com/pay/api/web/object-reference#PaymentData PaymentData}\n */\n\n/**\n * @typedef {object} Dropin~binData Information about the card based on the bin.\n * @property {string} commercial Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} countryOfIssuance The country of issuance.\n * @property {string} debit Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} durbinRegulated Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} healthcare Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} issuingBank The issuing bank.\n * @property {string} payroll Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} prepaid Possible values: 'Yes', 'No', 'Unknown'.\n * @property {string} productId The product id.\n */\n\n/**\n * @name Dropin#on\n * @function\n * @param {string} event The name of the event to which you are subscribing.\n * @param {function} handler A callback to handle the event.\n * @description Subscribes a handler function to a named event. `event` should be one of the following:\n *\n *  * [`changeActiveView`](#event:changeActiveView)\n *  * [`paymentMethodRequestable`](#event:paymentMethodRequestable)\n *  * [`noPaymentMethodRequestable`](#event:noPaymentMethodRequestable)\n *  * [`paymentOptionSelected`](#event:paymentOptionSelected)\n *\n *  _Card View Specific Events_\n *  * [`card:binAvailable`](#event:card:binAvailable)\n *  * [`card:blur`](#event:card:blur)\n *  * [`card:cardTypeChange`](#event:card:cardTypeChange)\n *  * [`card:empty`](#event:card:empty)\n *  * [`card:focus`](#event:card:focus)\n *  * [`card:inputSubmitRequest`](#event:card:inputSubmitRequest)\n *  * [`card:notEmpty`](#event:card:notEmpty)\n *  * [`card:validityChange`](#event:card:validityChange)\n *\n *  _3DS Specific Events_\n *  * [`3ds:customer-canceled`](#event:3ds:customer-canceled)\n *  * [`3ds:authentication-modal-render`](#event:3ds:authentication-modal-render)\n *  * [`3ds:authentication-modal-close`](#event:3ds:authentication-modal-close)\n * @returns {void}\n * @example\n * <caption>Dynamically enable or disable your submit button based on whether or not the payment method is requestable</caption>\n * var submitButton = document.querySelector('#submit-button');\n *\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container'\n * }, function (err, dropinInstance) {\n *   submitButton.addEventListener('click', function () {\n *     dropinInstance.requestPaymentMethod(function (err, payload) {\n *       // Send payload.nonce to your server.\n *     });\n *   });\n *\n *   if (dropinInstance.isPaymentMethodRequestable()) {\n *     // This will be true if you generated the client token\n *     // with a customer ID and there is a saved payment method\n *     // available to tokenize with that customer.\n *     submitButton.removeAttribute('disabled');\n *   }\n *\n *   dropinInstance.on('paymentMethodRequestable', function (event) {\n *     console.log(event.type); // The type of Payment Method, e.g 'CreditCard', 'PayPalAccount'.\n *     console.log(event.paymentMethodIsSelected); // true if a customer has selected a payment method when paymentMethodRequestable fires\n *\n *     submitButton.removeAttribute('disabled');\n *   });\n *\n *   dropinInstance.on('noPaymentMethodRequestable', function () {\n *     submitButton.setAttribute('disabled', true);\n *   });\n * });\n *\n * @example\n * <caption>Automatically submit nonce to server as soon as it becomes available</caption>\n * var submitButton = document.querySelector('#submit-button');\n *\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container'\n * }, function (err, dropinInstance) {\n *   function sendNonceToServer() {\n *     dropinInstance.requestPaymentMethod(function (err, payload) {\n *       if (err) {\n *         // handle errors\n *       }\n *\n *       // send payload.nonce to your server\n *     });\n *   }\n *\n *   // allows us to still request the payment method manually, such as\n *   // when filling out a credit card form\n *   submitButton.addEventListener('click', sendNonceToServer);\n *\n *   dropinInstance.on('paymentMethodRequestable', function (event) {\n *     // if the nonce is already available (via PayPal authentication\n *     // or by using a stored payment method), we can request the\n *     // nonce right away. Otherwise, we wait for the customer to\n *     // request the nonce by pressing the submit button once they\n *     // are finished entering their credit card details. This is\n *     // particularly important if your credit card form includes a\n *     // postal code input. The `paymentMethodRequestable` event\n *     // could fire before the customer has finished entering their\n *     // postal code. (International postal codes can be as few as 3\n *     // characters in length)\n *     if (event.paymentMethodIsSelected) {\n *       sendNonceToServer();\n *     }\n *   });\n * });\n * @example\n * <caption>Listen for when the customer navigates to different views in Drop-in</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container'\n * }, function (err, dropinInstance) {\n *   dropinInstance.on('changeActiveView', function (event) {\n *     // fires when the view changes, such as going from the\n *     // credit card view to the saved payment methods view\n *     event.oldActivePaymentViewId; // card\n *     event.newActivePaymentViewId; // methods\n *   });\n * });\n * @example\n * <caption>Listen on various events from the card view</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container'\n * }, function (err, dropinInstance) {\n *   dropinInstance.on('card:focus', function (event) {\n *     // a card field was focussed\n *   });\n *   dropinInstance.on('card:blur', function (event) {\n *     // a card field was blurred\n *   });\n *   dropinInstance.on('card:validityChange', function (event) {\n *     // the card form went from invalid to valid or valid to invalid\n *   });\n * });\n */\n\n/**\n * @name Dropin#off\n * @function\n * @param {string} event The name of the event to which you are unsubscribing.\n * @param {function} handler A callback to unsubscribe from the event.\n * @description Unsubscribes a handler function to a named event.\n * @returns {void}\n * @example\n * <caption>Subscribe and then unsubscribe from event</caption>\n * var callback = function (event) {\n *   // do something\n * };\n * dropinInstance.on('paymentMethodRequestable', callback);\n *\n * // later on\n * dropinInstance.off('paymentMethodRequestable', callback);\n */\n\n/**\n * This event is emitted when the payment method available in Drop-in changes. This includes when the state of Drop-in transitions from having no payment method available to having a payment method available and when the kind of payment method available changes. This event is not fired if there is no payment method available on initialization. To check if there is a payment method requestable on initialization, use {@link Dropin#isPaymentMethodRequestable|`isPaymentMethodRequestable`}.\n * @event Dropin#paymentMethodRequestable\n * @type {Dropin~paymentMethodRequestablePayload}\n */\n\n/**\n * @typedef {object} Dropin~paymentMethodRequestablePayload\n * @description The event payload sent from {@link Dropin#on|`on`} with the {@link Dropin#event:paymentMethodRequestable|`paymentMethodRequestable`} event.\n * @property {string} type The type of payment method that is requestable. Either `CreditCard` or `PayPalAccount`.\n * @property {boolean} paymentMethodIsSelected A property to determine if a payment method is currently selected when the payment method becomes requestable.\n *\n * This will be `true` any time a payment method is visibly selected in the Drop-in UI, such as when PayPal authentication completes or a stored payment method is selected.\n *\n * This will be `false` when {@link Dropin#requestPaymentMethod|`requestPaymentMethod`} can be called, but a payment method is not currently selected. For instance, when a card form has been filled in with valid values, but has not been submitted to be converted into a payment method nonce.\n */\n\n/**\n * This event is emitted when there is no payment method available in Drop-in. This event is not fired if there is no payment method available on initialization. To check if there is a payment method requestable on initialization, use {@link Dropin#isPaymentMethodRequestable|`isPaymentMethodRequestable`}. No payload is available in the callback for this event.\n * @event Dropin#noPaymentMethodRequestable\n */\n\n/**\n * This event is emitted when the customer selects a new payment option type (e.g. PayPal, PayPal Credit, credit card). This event is not emitted when the user changes between existing saved payment methods. Only relevant when accepting multiple payment options.\n * @event Dropin#paymentOptionSelected\n * @type {Dropin~paymentOptionSelectedPayload}\n */\n\n/**\n * This event is emitted when the Drop-in view changes what is presented as the active view.\n * @event Dropin#changeActiveView\n * @type {Dropin~changeActiveView}\n */\n\n/**\n * @typedef {object} Dropin~changeActiveView\n * @description The event payload sent from {@link Dropin#on|`on`} with the {@link Dropin#event:changeActiveView|`changeActiveView`} event.\n * @property {string} previousViewId The id for the previously active view. Possible values are:\n * * `card` - The credit card form view\n * * `paypal` - The PayPal view\n * * `payapCredit` - The PayPal Credit view\n * * `venmo` - The Venmo View\n * * `googlePay` - The Google Pay view\n * * `applePay` - The Apple Pay view\n * * `methods` - The view presenting the available payment methods (already vaulted or tokenized payment methods)\n * * `options` - The view presenting the available payment options (where the customer chooses what payment method option to use). Note, if both the methods view and the options view are presented at the same time, `methods` will be shown as the view id.\n * * `delete-confirmation` - The view where the customer confirms they would like to delete their saved payment method.\n * @property {string} newViewId The id for the new active view. The possible values are the same as `previousViewId`.\n */\n\n/**\n * The underlying [hosted fields `binAvailable` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:binAvailable).\n * @event Dropin#card:binAvailable\n * @type {Dropin~card:binAvailable}\n */\n\n/**\n * The underlying [hosted fields `blur` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:blur).\n * @event Dropin#card:blur\n * @type {Dropin~card:blur}\n */\n\n/**\n * The underlying [hosted fields `cardTypeChange` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:cardTypeChange).\n * @event Dropin#card:cardTypeChange\n * @type {Dropin~card:cardTypeChange}\n */\n\n/**\n * The underlying [hosted fields `empty` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:empty).\n * @event Dropin#card:empty\n * @type {Dropin~card:empty}\n */\n\n/**\n * The underlying [hosted fields `focus` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:focus).\n * @event Dropin#card:focus\n * @type {Dropin~card:focus}\n */\n\n/**\n * The underlying [hosted fields `inputSubmitRequest` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:inputSubmitRequest).\n * @event Dropin#card:inputSubmitRequest\n * @type {Dropin~card:inputSubmitRequest}\n */\n\n/**\n * The underlying [hosted fields `notEmpty` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:notEmpty).\n * @event Dropin#card:notEmpty\n * @type {Dropin~card:notEmpty}\n */\n\n/**\n * The underlying [hosted fields `validityChange` event](http://braintree.github.io/braintree-web/3.88.3/HostedFields.html#event:validityChange).\n * @event Dropin#card:validityChange\n * @type {Dropin~card:validityChange}\n */\n\n/**\n * The underlying [3D Secure `customer-canceled` event](http://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#event:customer-canceled).\n * @event Dropin#3ds:customer-canceled\n * @type {Dropin~3ds:customer-canceled}\n */\n\n/**\n * The underlying [3D Secure `authentication-modal-render` event](http://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#event:authentication-modal-render).\n * @event Dropin#3ds:authentication-modal-render\n * @type {Dropin~3ds:authentication-modal-render}\n */\n\n/**\n * The underlying [3D Secure `authentication-modal-close` event](http://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#event:authentication-modal-close).\n * @event Dropin#3ds:authentication-modal-close\n * @type {Dropin~3ds:authentication-modal-close}\n */\n\n/**\n * @typedef {object} Dropin~paymentOptionSelectedPayload\n * @description The event payload sent from {@link Dropin#on|`on`} with the {@link Dropin#event:paymentOptionSelected|`paymentOptionSelected`} event.\n * @property {string} paymentOption The payment option view selected. Either `card`, `paypal`, or `paypalCredit`.\n */\n\n/**\n * @class\n * @param {object} options For create options, see {@link module:braintree-web-drop-in|dropin.create}.\n * @description <strong>Do not use this constructor directly. Use {@link module:braintree-web-drop-in|dropin.create} instead.</strong>\n * @classdesc This class represents a Drop-in component, that will create a pre-made UI for accepting cards and PayPal on your page. Instances of this class have methods for requesting a payment method and subscribing to events. For more information, see the [Drop-in guide](https://developer.paypal.com/braintree/docs/guides/drop-in/overview/javascript/v3) in the Braintree Developer Docs. To be used in conjunction with the [Braintree Server SDKs](https://developer.paypal.com/braintree/docs/start/hello-server).\n */\nfunction Dropin(options) {\n  this._client = options.client;\n  this._componentID = uuid();\n  this._dropinWrapper = document.createElement('div');\n  this._dropinWrapper.id = 'braintree--dropin__' + this._componentID;\n  this._dropinWrapper.setAttribute('data-braintree-id', 'wrapper');\n  this._dropinWrapper.style.display = 'none';\n  this._dropinWrapper.className = 'braintree-loading';\n  this._merchantConfiguration = options.merchantConfiguration;\n\n  EventEmitter.call(this);\n}\n\nEventEmitter.createChild(Dropin);\n\nDropin.prototype._initialize = function (callback) {\n  var localizedStrings, localizedHTML;\n  var self = this;\n  var container = self._merchantConfiguration.container || self._merchantConfiguration.selector;\n\n  if (!container) {\n    analytics.sendEvent(self._client, 'configuration-error');\n    callback(new DropinError('options.container is required.'));\n\n    return;\n  } else if (self._merchantConfiguration.container && self._merchantConfiguration.selector) {\n    analytics.sendEvent(self._client, 'configuration-error');\n    callback(new DropinError('Must only have one options.selector or options.container.'));\n\n    return;\n  }\n\n  if (typeof container === 'string') {\n    container = document.querySelector(container);\n  }\n\n  if (!container || container.nodeType !== 1) {\n    analytics.sendEvent(self._client, 'configuration-error');\n    callback(new DropinError('options.selector or options.container must reference a valid DOM node.'));\n\n    return;\n  }\n\n  if (container.innerHTML.trim()) {\n    analytics.sendEvent(self._client, 'configuration-error');\n    callback(new DropinError('options.selector or options.container must reference an empty DOM node.'));\n\n    return;\n  }\n\n  // Backfill with `en`\n  self._strings = assign({}, translations.en);\n  if (self._merchantConfiguration.locale) {\n    localizedStrings = translations[self._merchantConfiguration.locale] || translations[self._merchantConfiguration.locale.split('_')[0]];\n    // Fill `strings` with `localizedStrings` that may exist\n    self._strings = assign(self._strings, localizedStrings);\n  }\n\n  if (!isUtf8()) {\n    // non-utf-8 encodings often don't support the bullet character\n    self._strings.endingIn = self._strings.endingIn.replace(/•/g, '*');\n  }\n\n  if (self._merchantConfiguration.translations) {\n    Object.keys(self._merchantConfiguration.translations).forEach(function (key) {\n      self._strings[key] = sanitizeHtml(self._merchantConfiguration.translations[key]);\n    });\n  }\n\n  localizedHTML = Object.keys(self._strings).reduce(function (result, stringKey) {\n    var stringValue = self._strings[stringKey];\n\n    return result.replace(RegExp('{{' + stringKey + '}}', 'g'), stringValue);\n  }, mainHTML);\n\n  self._dropinWrapper.innerHTML = svgHTML + localizedHTML;\n  container.appendChild(self._dropinWrapper);\n\n  self._model = new DropinModel({\n    client: self._client,\n    container: container,\n    componentID: self._componentID,\n    merchantConfiguration: self._merchantConfiguration\n  });\n\n  self._injectStylesheet();\n\n  self._model.initialize().then(function () {\n    self._model.on('cancelInitialization', function (err) {\n      self._dropinWrapper.innerHTML = '';\n      analytics.sendEvent(self._client, 'load-error');\n      callback(err);\n    });\n\n    self._model.on('asyncDependenciesReady', function () {\n      if (self._model.hasAtLeastOneAvailablePaymentOption()) {\n        analytics.sendEvent(self._client, 'appeared');\n        self._disableErroredPaymentMethods();\n\n        self._handleAppSwitch();\n\n        self._model.confirmDropinReady();\n\n        callback(null, self);\n      } else {\n        self._model.cancelInitialization(new DropinError('All payment options failed to load.'));\n      }\n    });\n\n    PASS_THROUGH_EVENTS.forEach(function (eventName) {\n      self._model.on(eventName, function (event) {\n        self._emit(eventName, event);\n      });\n    });\n\n    return self._setUpDependenciesAndViews();\n  }).catch(function (err) {\n    self.teardown().then(function () {\n      callback(err);\n    });\n  });\n};\n\n/**\n * Modify your configuration initially set in {@link module:braintree-web-drop-in|`dropin.create`}.\n *\n * If `updateConfiguration` is called after a user completes the PayPal authorization flow, any PayPal accounts not stored in the Vault record will be removed.\n * @public\n * @param {string} property The top-level property to update. Either `paypal`, `paypalCredit`, `applePay`, or `googlePay`.\n * @param {string} key The key of the property to update, such as `amount` or `currency`.\n * @param {any} value The value of the property to update. Must be the type of the property specified in {@link module:braintree-web-drop-in|`dropin.create`}.\n * @returns {void}\n * @example\n * dropinInstance.updateConfiguration('paypal', 'amount', '10.00');\n */\nDropin.prototype.updateConfiguration = function (property, key, value) {\n  var view;\n\n  if (UPDATABLE_CONFIGURATION_OPTIONS.indexOf(property) === -1) {\n    return;\n  }\n\n  if (property === 'threeDSecure') {\n    if (this._threeDSecure) {\n      this._threeDSecure.updateConfiguration(key, value);\n    }\n\n    return;\n  }\n\n  view = this._mainView.getView(property);\n\n  if (!view) {\n    return;\n  }\n\n  view.updateConfiguration(key, value);\n\n  if (UPDATABLE_CONFIGURATION_OPTIONS_THAT_REQUIRE_UNVAULTED_PAYMENT_METHODS_TO_BE_REMOVED.indexOf(property) === -1) {\n    return;\n  }\n\n  this._removeUnvaultedPaymentMethods(function (paymentMethod) {\n    return paymentMethod.type === constants.paymentMethodTypes[property];\n  });\n  this._navigateToInitialView();\n};\n\n/**\n * Get a list of the available payment methods presented to the user. This is useful for knowing if a paricular payment option was presented to a customer that is browser dependant such as Apple Pay, Google Pay and Venmo. Returns an array of strings. Possible values:\n * * `applePay`\n * * `card`\n * * `googlePay`\n * * `paypalCredit`\n * * `paypal`\n * * `venmo`\n *\n * @public\n * @returns {string[]} An array of possible payment options.\n * @example\n * var paymentOptions = dropinInstance.getAvailablePaymentOptions(); // ['card', 'venmo', 'paypal']\n *\n * if (paymentOptions.includes('venmo')) {\n *   // special logic for when venmo is displayed\n * }\n */\nDropin.prototype.getAvailablePaymentOptions = function () {\n  return this._model.supportedPaymentOptions;\n};\n\n/**\n * Removes the currently selected payment method and returns the customer to the payment options view. Does not remove vaulted payment methods.\n * @public\n * @returns {void}\n * @example\n * dropinInstance.requestPaymentMethod(function (requestPaymentMethodError, payload) {\n *   if (requestPaymentMethodError) {\n *     // handle errors\n *     return;\n *   }\n *\n *   functionToSendNonceToServer(payload.nonce, function (transactionError, response) {\n *     if (transactionError) {\n *       // transaction sale with selected payment method failed\n *       // clear the selected payment method and add a message\n *       // to the checkout page about the failure\n *       dropinInstance.clearSelectedPaymentMethod();\n *       divForErrorMessages.textContent = 'my error message about entering a different payment method.';\n *     } else {\n *       // redirect to success page\n *     }\n *   });\n * });\n */\nDropin.prototype.clearSelectedPaymentMethod = function () {\n  this._removeUnvaultedPaymentMethods();\n  this._model.removeActivePaymentMethod();\n\n  if (this._model.getPaymentMethods().length === 0) {\n    this._navigateToInitialView();\n\n    return;\n  }\n\n  this._mainView.showLoadingIndicator();\n\n  this._model.refreshPaymentMethods().then(function () {\n    this._navigateToInitialView();\n    this._mainView.hideLoadingIndicator();\n  }.bind(this));\n};\n\nDropin.prototype._setUpDataCollector = function () {\n  var self = this;\n  var config = assign({}, self._merchantConfiguration.dataCollector, {client: self._client});\n\n  this._dataCollector = new DataCollector(config);\n\n  this._dataCollector.initialize().then(function () {\n    self._model.asyncDependencyReady('dataCollector');\n  }).catch(function (err) {\n    self._model.cancelInitialization(new DropinError({\n      message: 'Data Collector failed to set up.',\n      braintreeWebError: err\n    }));\n  });\n};\n\nDropin.prototype._setUpThreeDSecure = function () {\n  var self = this;\n\n  this._threeDSecure = new ThreeDSecure(this._client, this._model);\n\n  this._threeDSecure.initialize().then(function () {\n    self._model.asyncDependencyReady('threeDSecure');\n  }).catch(function (err) {\n    self._model.cancelInitialization(new DropinError({\n      message: '3D Secure failed to set up.',\n      braintreeWebError: err\n    }));\n  });\n};\n\nDropin.prototype._setUpDependenciesAndViews = function () {\n  if (this._merchantConfiguration.dataCollector) {\n    this._setUpDataCollector();\n  }\n\n  if (this._merchantConfiguration.threeDSecure) {\n    this._setUpThreeDSecure();\n  }\n\n  this._mainView = new MainView({\n    client: this._client,\n    element: this._dropinWrapper,\n    model: this._model,\n    strings: this._strings\n  });\n};\n\nDropin.prototype._removeUnvaultedPaymentMethods = function (filter) {\n  filter = filter || function () { return true; };\n\n  this._model.getPaymentMethods().forEach(function (paymentMethod) {\n    if (filter(paymentMethod) && !paymentMethod.vaulted) {\n      this._model.removePaymentMethod(paymentMethod);\n    }\n  }.bind(this));\n};\n\nDropin.prototype._navigateToInitialView = function () {\n  var isOnMethodsView = this._mainView.primaryView.ID === paymentMethodsViewID;\n\n  if (!isOnMethodsView) {\n    return;\n  }\n\n  if (this._model.hasPaymentMethods()) {\n    return;\n  }\n\n  this._mainView.setPrimaryView(this._model.getInitialViewId());\n};\n\nDropin.prototype._supportsPaymentOption = function (paymentOption) {\n  return this._model.supportedPaymentOptions.indexOf(paymentOption) !== -1;\n};\n\nDropin.prototype._disableErroredPaymentMethods = function () {\n  var paymentMethodOptionsElements;\n  var failedDependencies = Object.keys(this._model.failedDependencies);\n\n  if (failedDependencies.length === 0) {\n    return;\n  }\n\n  paymentMethodOptionsElements = this._mainView.getOptionsElements();\n\n  failedDependencies.forEach(function (paymentMethodId) {\n    var element = paymentMethodOptionsElements[paymentMethodId];\n    var div = element.div;\n    var clickHandler = element.clickHandler;\n    var error = this._model.failedDependencies[paymentMethodId];\n    var errorMessageDiv = div.querySelector('.braintree-option__disabled-message');\n\n    classList.add(div, 'braintree-disabled');\n    div.removeEventListener('click', clickHandler);\n    errorMessageDiv.innerHTML = constants.errors.DEVELOPER_MISCONFIGURATION_MESSAGE;\n    console.error(error); // eslint-disable-line no-console\n  }.bind(this));\n};\n\nDropin.prototype._sendVaultedPaymentMethodAppearAnalyticsEvents = function () {\n  var i, type;\n  var typesThatSentAnEvent = {};\n  var paymentMethods = this._model._paymentMethods;\n\n  for (i = 0; i < paymentMethods.length; i++) {\n    type = paymentMethods[i].type;\n\n    if (type in typesThatSentAnEvent) {\n      // prevents us from sending the analytic multiple times\n      // for the same payment method type\n      continue;\n    }\n\n    typesThatSentAnEvent[type] = true;\n\n    analytics.sendEvent(this._client, 'vaulted-' + constants.analyticsKinds[type] + '.appear');\n  }\n};\n\nDropin.prototype._handleAppSwitch = function () {\n  if (this._model.appSwitchError) {\n    this._mainView.setPrimaryView(this._model.appSwitchError.id);\n    this._model.reportError(this._model.appSwitchError.error);\n  } else if (this._model.appSwitchPayload) {\n    this._model.addPaymentMethod(this._model.appSwitchPayload);\n  } else {\n    this._sendVaultedPaymentMethodAppearAnalyticsEvents();\n  }\n};\n\n/**\n * Requests a payment method object which includes the payment method nonce used by by the [Braintree Server SDKs](https://developer.paypal.com/braintree/docs/start/hello-server).\n *\n * If a payment method is not available, an error will appear in the UI. When a callback is used, an error will be passed to it. If no callback is used, the returned Promise will be rejected with an error.\n * @public\n * @param {object} [options] All options for requesting a payment method.\n * @param {object} [options.threeDSecure] Any of the options in the [Braintree 3D Secure client reference](https://braintree.github.io/braintree-web/3.88.3/ThreeDSecure.html#verifyCard) except for `nonce`, `bin`, and `onLookupComplete`. If `amount` is provided, it will override the value of `amount` in the [3D Secure create options](module-braintree-web-drop-in.html#~threeDSecureOptions). The more options provided, the more likely the customer will not need to answer a 3DS challenge. When 3DS is enabled, both credit cards and non-network tokenized Google Pay cards will perform verfication. The recommended fields for achieving a 3DS v2 verification are:\n * * `email`\n * * `mobilePhoneNumber`\n * * `billingAddress`\n *\n * For an example of verifying 3D Secure within Drop-in, [check out this codepen](https://codepen.io/braintree/pen/KjWqGx).\n * @param {callback} [callback] May be used as the only parameter in requestPaymentMethod if no `options` are provided. The first argument will be an error if no payment method is available and will otherwise be null. The second argument will be an object containing a payment method nonce; either a {@link Dropin~cardPaymentMethodPayload|cardPaymentMethodPayload}, a {@link Dropin~paypalPaymentMethodPayload|paypalPaymentMethodPayload}, a {@link Dropin~venmoPaymentMethodPayload|venmoPaymentMethodPayload}, a {@link Dropin~googlePayPaymentMethodPayload|googlePayPaymentMethodPayload} or an {@link Dropin~applePayPaymentMethodPayload|applePayPaymentMethodPayload}. If no callback is provided, `requestPaymentMethod` will return a promise.\n * @returns {(void|Promise)} Returns a promise if no callback is provided.\n * @example <caption>Requesting a payment method</caption>\n * var form = document.querySelector('#my-form');\n * var hiddenNonceInput = document.querySelector('#my-nonce-input');\n *\n * form.addEventListener('submit', function (event) {\n *  event.preventDefault();\n *\n *  dropinInstance.requestPaymentMethod(function (err, payload) {\n *    if (err) {\n *      // handle error\n *      return;\n *    }\n *    hiddenNonceInput.value = payload.nonce;\n *    form.submit();\n *  });\n * });\n * @example <caption>Requesting a payment method with data collector</caption>\n * var form = document.querySelector('#my-form');\n * var hiddenNonceInput = document.querySelector('#my-nonce-input');\n * var hiddenDeviceDataInput = document.querySelector('#my-device-data-input');\n *\n * form.addEventListener('submit', function (event) {\n *  event.preventDefault();\n *\n *  dropinInstance.requestPaymentMethod(function (err, payload) {\n *    if (err) {\n *      // handle error\n *      return;\n *    }\n *    hiddenNonceInput.value = payload.nonce;\n *    hiddenDeviceDataInput.value = payload.deviceData;\n *    form.submit();\n *  });\n * });\n *\n * @example <caption>Requesting a payment method with 3D Secure</caption>\n * var form = document.querySelector('#my-form');\n * var hiddenNonceInput = document.querySelector('#my-nonce-input');\n *\n * form.addEventListener('submit', function (event) {\n *  event.preventDefault();\n *\n *  dropinInstance.requestPaymentMethod(function (err, payload) {\n *    if (err) {\n *      // Handle error\n *      return;\n *    }\n *\n *    if (payload.liabilityShifted || (payload.type !== 'CreditCard' && payload.type !== 'AndroidPayCard')) {\n *      hiddenNonceInput.value = payload.nonce;\n *      form.submit();\n *    } else {\n *      // Decide if you will force the user to enter a different payment method\n *      // if liability was not shifted\n *      dropinInstance.clearSelectedPaymentMethod();\n *    }\n *  });\n * });\n */\nDropin.prototype.requestPaymentMethod = function (options) {\n  // NEXT_MAJOR_VERSION\n  // what should happen when this method is called while a payment\n  // method is already being requested? Should it error? Should\n  // they both resolve with the payload from the original request?\n  // this is only important because when doing 3ds, multiple\n  // requests in quick succession can get you into a state\n  // where it errors because the 3ds verification is called twice\n  var self = this;\n\n  options = options || {};\n\n  return this._mainView.requestPaymentMethod().then(function (payload) {\n    if (self._shouldPerformThreeDSecureVerification(payload)) {\n      self._mainView.showLoadingIndicator();\n\n      return self._threeDSecure.verify(payload, options.threeDSecure).then(function (newPayload) {\n        payload.nonce = newPayload.nonce;\n        payload.liabilityShifted = newPayload.liabilityShifted;\n        payload.liabilityShiftPossible = newPayload.liabilityShiftPossible;\n        payload.threeDSecureInfo = newPayload.threeDSecureInfo;\n\n        self._mainView.hideLoadingIndicator();\n\n        return payload;\n      }).catch(function (err) {\n        self.clearSelectedPaymentMethod();\n\n        return self._model.refreshPaymentMethods().then(function () {\n          self._mainView.hideLoadingIndicator();\n\n          return Promise.reject(new DropinError({\n            message: 'Something went wrong during 3D Secure authentication. Please try again.',\n            braintreeWebError: err\n          }));\n        });\n      });\n    }\n\n    return payload;\n  }).then(function (payload) {\n    if (self._dataCollector) {\n      payload.deviceData = self._dataCollector.getDeviceData();\n    }\n\n    return payload;\n  }).then(function (payload) {\n    return formatPaymentMethodPayload(payload);\n  });\n};\n\nDropin.prototype._shouldPerformThreeDSecureVerification = function (payload) {\n  if (!this._threeDSecure) {\n    return false;\n  }\n\n  if (payload.liabilityShifted != null) {\n    return false;\n  }\n\n  if (payload.type === constants.paymentMethodTypes.card) {\n    return true;\n  }\n\n  if (payload.type === constants.paymentMethodTypes.googlePay && payload.details.isNetworkTokenized === false) {\n    return true;\n  }\n\n  return false;\n};\n\nDropin.prototype._removeStylesheet = function () {\n  var stylesheet = document.getElementById(constants.STYLESHEET_ID);\n\n  if (stylesheet) {\n    stylesheet.parentNode.removeChild(stylesheet);\n  }\n};\n\nDropin.prototype._injectStylesheet = function () {\n  var assetsUrl;\n  var loadStylesheetOptions = {\n    id: constants.STYLESHEET_ID\n  };\n\n  if (document.getElementById(constants.STYLESHEET_ID)) { return; }\n\n  assetsUrl = this._client.getConfiguration().gatewayConfiguration.assetsUrl;\n  loadStylesheetOptions.href = assetsUrl + '/web/dropin/' + VERSION + '/css/dropin.css';\n\n  if (this._model.isInShadowDom) {\n    // if Drop-in is in the shadow DOM, put the\n    // style sheet in the shadow DOM node instead of\n    // in the head of the document\n    loadStylesheetOptions.container = this._model.rootNode;\n  }\n\n  assets.loadStylesheet(loadStylesheetOptions);\n};\n\n/**\n * Cleanly remove anything set up by {@link module:braintree-web-drop-in|dropin.create}. This may be be useful in a single-page app.\n * @public\n * @param {callback} [callback] Called on completion, containing an error if one occurred. No data is returned if teardown completes successfully. If no callback is provided, `teardown` will return a promise.\n * @returns {(void|Promise)} Returns a promise if no callback is provided.\n */\nDropin.prototype.teardown = function () {\n  var teardownError;\n  var promise = Promise.resolve();\n  var self = this;\n\n  this._removeStylesheet();\n\n  if (this._mainView) {\n    promise.then(function () {\n      return self._mainView.teardown().catch(function (err) {\n        teardownError = err;\n      });\n    });\n  }\n\n  if (this._dataCollector) {\n    promise.then(function () {\n      return this._dataCollector.teardown().catch(function (error) {\n        teardownError = new DropinError({\n          message: 'Drop-in errored tearing down Data Collector.',\n          braintreeWebError: error\n        });\n      });\n    }.bind(this));\n  }\n\n  if (this._threeDSecure) {\n    promise.then(function () {\n      return this._threeDSecure.teardown().catch(function (error) {\n        teardownError = new DropinError({\n          message: 'Drop-in errored tearing down 3D Secure.',\n          braintreeWebError: error\n        });\n      });\n    }.bind(this));\n  }\n\n  return promise.then(function () {\n    return self._removeDropinWrapper();\n  }).then(function () {\n    if (teardownError) {\n      return Promise.reject(teardownError);\n    }\n\n    return Promise.resolve();\n  });\n};\n\n/**\n * Returns a boolean indicating if a payment method is available through {@link Dropin#requestPaymentMethod|requestPaymentMethod}. Particularly useful for detecting if using a client token with a customer ID to show vaulted payment methods.\n * @public\n * @returns {Boolean} True if a payment method is available, otherwise false.\n */\nDropin.prototype.isPaymentMethodRequestable = function () {\n  return this._model.isPaymentMethodRequestable();\n};\n\nDropin.prototype._removeDropinWrapper = function () {\n  this._dropinWrapper.parentNode.removeChild(this._dropinWrapper);\n\n  return Promise.resolve();\n};\n\nfunction formatPaymentMethodPayload(paymentMethod) {\n  var formattedPaymentMethod = {\n    nonce: paymentMethod.nonce,\n    details: paymentMethod.details,\n    type: paymentMethod.type\n  };\n\n  if (paymentMethod.vaulted != null) {\n    formattedPaymentMethod.vaulted = paymentMethod.vaulted;\n  }\n\n  if (paymentMethod.type === constants.paymentMethodTypes.card) {\n    formattedPaymentMethod.description = paymentMethod.description;\n  }\n\n  if (paymentMethod.type in HAS_RAW_PAYMENT_DATA) {\n    formattedPaymentMethod.details.rawPaymentData = paymentMethod.rawPaymentData;\n  }\n\n  if (typeof paymentMethod.liabilityShiftPossible === 'boolean') {\n    formattedPaymentMethod.liabilityShifted = paymentMethod.liabilityShifted;\n    formattedPaymentMethod.liabilityShiftPossible = paymentMethod.liabilityShiftPossible;\n  }\n\n  if (paymentMethod.threeDSecureInfo) {\n    formattedPaymentMethod.threeDSecureInfo = paymentMethod.threeDSecureInfo;\n  }\n\n  if (paymentMethod.deviceData) {\n    formattedPaymentMethod.deviceData = paymentMethod.deviceData;\n  }\n\n  if (paymentMethod.binData) {\n    formattedPaymentMethod.binData = paymentMethod.binData;\n  }\n\n  return formattedPaymentMethod;\n}\n\nmodule.exports = wrapPrototype(Dropin);\n\n},{\"./constants\":196,\"./dropin-model\":197,\"./lib/analytics\":201,\"./lib/assign\":202,\"./lib/data-collector\":205,\"./lib/dropin-error\":206,\"./lib/is-utf-8\":210,\"./lib/promise\":213,\"./lib/sanitize-html\":214,\"./lib/three-d-secure\":216,\"./translations\":237,\"./views/main-view\":256,\"./views/payment-methods-view\":258,\"@braintree/asset-loader\":1,\"@braintree/class-list\":40,\"@braintree/event-emitter\":41,\"@braintree/uuid\":47,\"@braintree/wrap-promise\":51}],199:[function(require,module,exports){\n'use strict';\n/**\n * @module braintree-web-drop-in\n * @description There are two ways to integrate Drop-in into your page: a script tag integration and a JavaScript integration using [`dropin.create`](#.create).\n *\n * The script tag integration is the fastest way to integrate. All you need to do is add the Drop-in script inside your form element where you want Drop-in to appear and include a `data-braintree-dropin-authorization` property with your [tokenization key](https://developer.paypal.com/braintree/docs/guides/authorization/tokenization-key/javascript/v3) or [client token](https://developer.paypal.com/braintree/docs/guides/authorization/client-token).\n *\n * When your form is submitted, Drop-in will intercept the form submission and attempt to tokenize the payment method. If the tokenization is successful, it will insert the payment method nonce into a hidden input with the name `payment_method_nonce` and then submit your form. If the tokenization is unsuccessful, a relevant error will be shown in the UI.\n *\n * If you have data collector enabled, the device data will be injected into a hidden input with the name `device_data` before form submission.\n *\n * Specify creation options as data attributes in your script tag, as shown in the examples below. The following configuration properties may be set:\n *\n * * `data-locale`\n * * `data-card.cardholder-name.required`\n * * `data-payment-option-priority`\n * * `data-data-collector.kount`\n * * `data-data-collector.paypal`\n * * `data-paypal.amount`\n * * `data-paypal.currency`\n * * `data-paypal.flow`\n * * `data-paypal-credit.amount`\n * * `data-paypal-credit.currency`\n * * `data-paypal-credit.flow`\n *\n * For more control and customization, use [`dropin.create` instead](#.create).\n *\n * See our [demo app](../../script-tag-integration.html) for an example of using our script tag integration.\n *\n * @example\n * <caption>A full example accepting only cards</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <form id=\"payment-form\" action=\"/\" method=\"post\">\n *       <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *        data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *       ></script>\n *       <input type=\"submit\" value=\"Purchase\"></input>\n *     </form>\n *   </body>\n * </html>\n *\n * @example\n * <caption>A full example accepting cards, PayPal, and PayPal credit</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <form id=\"payment-form\" action=\"/\" method=\"post\">\n *       <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *        data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *        data-paypal.flow=\"checkout\"\n *        data-paypal.amount=\"10.00\"\n *        data-paypal.currency=\"USD\"\n *        data-paypal-credit.flow=\"vault\"\n *       ></script>\n *       <input type=\"submit\" value=\"Purchase\"></input>\n *     </form>\n *   </body>\n * </html>\n *\n * @example\n * <caption>Specifying a locale and payment option priority</caption>\n * <form id=\"payment-form\" action=\"/\" method=\"post\">\n *   <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *    data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *    data-locale=\"de_DE\"\n *    data-payment-option-priority='[\"paypal\",\"card\", \"paypalCredit\"]'\n *    data-paypal.flow=\"checkout\"\n *    data-paypal.amount=\"10.00\"\n *    data-paypal.currency=\"USD\"\n *    data-paypal-credit.flow=\"vault\"\n *   ></script>\n *   <input type=\"submit\" value=\"Purchase\"></input>\n * </form>\n *\n * @example\n * <caption>Including an optional cardholder name field in card form</caption>\n * <form id=\"payment-form\" action=\"/\" method=\"post\">\n *   <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *    data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *    data-card.cardholder-name.required=\"false\"\n *   ></script>\n *   <input type=\"submit\" value=\"Purchase\"></input>\n * </form>\n *\n * @example\n * <caption>Including a required cardholder name field in card form</caption>\n * <form id=\"payment-form\" action=\"/\" method=\"post\">\n *   <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"\n *    data-braintree-dropin-authorization=\"CLIENT_AUTHORIZATION\"\n *    data-card.cardholder-name.required=\"true\"\n *   ></script>\n *   <input type=\"submit\" value=\"Purchase\"></input>\n * </form>\n */\n\nvar Dropin = require('./dropin');\nvar client = require('braintree-web/client');\nvar createFromScriptTag = require('./lib/create-from-script-tag');\nvar constants = require('./constants');\nvar analytics = require('./lib/analytics');\nvar DropinError = require('./lib/dropin-error');\nvar Promise = require('./lib/promise');\nvar wrapPromise = require('@braintree/wrap-promise');\n\nvar VERSION = '1.33.7';\n\n/**\n * @typedef {object} cardCreateOptions The configuration options for cards. Internally, Drop-in uses [Hosted Fields](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_hosted-fields.html) to render the card form. The `overrides.fields` and `overrides.styles` allow the Hosted Fields to be customized.\n *\n * @param {(boolean|object)} [cardholderName] Will enable a cardholder name field above the card number field. If set to an object, you can specify whether or not the field is required. If set to a `true`, it will default the field to being present, but not required.\n * @param {boolean} [cardholderName.required=false] When true, the cardholder name field will be required to request the payment method nonce.\n * @param {object} [overrides.fields] The Hosted Fields [`fields` options](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_hosted-fields.html#~fieldOptions). Only `number`, `cvv`, `expirationDate` and `postalCode` can be configured. Each is a [Hosted Fields `field` object](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_hosted-fields.html#~field). `selector` cannot be modified.\n * @param {object} [overrides.styles] The Hosted Fields [`styles` options](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_hosted-fields.html#~styleOptions). These can be used to add custom styles to the Hosted Fields iframes. To style the rest of Drop-in, [review the documentation for customizing Drop-in](https://developer.paypal.com/braintree/docs/guides/drop-in/customization/javascript/v3#customize-your-ui).\n * @param {boolean} [clearFieldsAfterTokenization=true] When false, the card form will not clear the card data when the customer returns to the card view after a successful tokenization.\n * @param {object} [vault] Configuration for vaulting credit cards. Only applies when using a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id).\n * @param {boolean} [vault.allowVaultCardOverride=false] When true, the card form will include an option to let the customer decide not to vault the credit card they enter.\n * @param {boolean} [vault.vaultCard=true] Whether or not to vault the card upon tokenization. When set to `false` with `allowVaultCardOverride` set to `false`, then cards will not be vaulted.\n */\n\n/**\n * @typedef {object} dataCollectorOptions The configuration options for Data Collector. Requires [advanced fraud protection](https://developer.paypal.com/braintree/docs/guides/premium-fraud-management-tools/client-side/javascript/v3) to be enabled in the Braintree gateway. If using Kount, contact our [support team](https://developer.paypal.com/braintree/help) to configure your Kount ID. The device data will be included on the {@link Dropin#requestPaymentMethod|requestPaymentMethod payload}.\n *\n * @param {boolean} [kount] If true, Kount fraud data collection is enabled.\n */\n\n/**\n * @typedef {object} threeDSecureOptions Configuration options to pass when creating the 3D Secure module used in Drop-in. `amount` for 3D Secure verification can be passed here, but it's recomended that it and all other 3D Secure verification options be passed to the {@link Dropin#requestPaymentMethod|requestPaymentMethod options} instead. Any `cardinalSDKConfig` options must be passed here when creating Drop-in.\n *\n * @param {options} cardinalSDKConfig A configuration object to adjust the configuration for the underlying Cardinal SDK (Braintree's 3D Secure provider). See [`cardinalSDKConfig` options](http://braintree.github.io/braintree-web/3.88.3/module-braintree-web_three-d-secure.html#.create) for all options.\n * @param {string} amount __Deprecated__ The amount to verify with 3D Secure. Set amount in the {@link Dropin#requestPaymentMethod|requestPaymentMethod options} instead.\n */\n\n/** @typedef {object} paypalCreateOptions The configuration options for PayPal and PayPalCredit. For a full list of options see the [PayPal Checkout client reference options](http://braintree.github.io/braintree-web/3.88.3/PayPalCheckout.html#createPayment).\n *\n * @param {string} flow Either `checkout` for a one-time [Checkout with PayPal](https://developer.paypal.com/braintree/docs/guides/paypal/checkout-with-paypal/javascript/v3) flow or `vault` for a [Vault flow](https://developer.paypal.com/braintree/docs/guides/paypal/vault/javascript/v3). Required when using PayPal or PayPal Credit.\n * @param {(string|number)} [amount] The amount of the transaction. Required when using the Checkout flow.\n * @param {string} [currency] The currency code of the amount, such as `USD`. Required when using the Checkout flow.\n * @param {object} [buttonStyle] The style object to apply to the PayPal button. Button customization includes color, shape, size, and label. The options [found here](https://developer.paypal.com/docs/integration/direct/express-checkout/integration-jsv4/customize-button/#button-styles) are available.\n * @param {boolean} [commit] The user action to show on the PayPal review page. If true, a `Pay Now` button will be shown. If false, a `Continue` button will be shown.\n * @param {object} [vault] Configuration for vaulting PayPal accounts. Only applies when using a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id).\n * @param {boolean} [vault.vaultPayPal=true] Whether or not to vault the PayPal account upon tokenization.\n */\n\n/** @typedef {object} applePayCreateOptions The configuration options for Apple Pay.\n *\n * @param {string} [buttonStyle=black] Configures the Apple Pay button style. Valid values are `black`, `white`, `white-outline`.\n * @param {string} displayName The canonical name for your store. Use a non-localized name. This parameter should be a utf-8 string that is a maximum of 128 characters. The system may display this name to the user.\n * @param {number} [applePaySessionVersion=2] The [version of the `ApplePaySession`](https://developer.apple.com/documentation/apple_pay_on_the_web/apple_pay_on_the_web_version_history) to use. It's recommended to use the lowest version that contains all the features you need for your checkout to maximize compatibility.\n * @param {external:ApplePayPaymentRequest} paymentRequest The payment request details to apply on top of those from Braintree.\n */\n\n/** @typedef {object} googlePayCreateOptions The configuration options for Google Pay. Additional options from the few listed here are available, many have default values applied based on the settings found in the Braintree Gateway. For more information, see [Google's Documentation](https://developers.google.com/pay/api/web/object-reference#request-objects).\n *\n * @param {string} merchantId The ID provided by Google for processing transactions in production. Not necessary for testing in sandbox.\n * @param {string} [googlePayVersion=1] The version of the Google Pay API to use. Defaults to 1, but 2 can be passed in.\n * @param {external:GooglePayTransactionInfo} transactionInfo The transaction details necessary for processing the payment.\n * @param {external:GooglePayButtonOptions} [button] The button options for configuring the look of the Google Pay button. The `onClick` property cannot be overwritten.\n */\n\n/**\n * @typedef {object} ApplePayPaymentRequest An [Apple Pay Payment Request object](https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types/paymentrequest).\n * @external ApplePayPaymentRequest\n * @see {@link https://developer.apple.com/reference/applepayjs/1916082-applepay_js_data_types/paymentrequest PaymentRequest}\n */\n\n/**\n * @typedef {object} GooglePayTransactionInfo A [Google Pay TransactionInfo object](https://developers.google.com/pay/api/web/object-reference#TransactionInfo).\n * @external GooglePayTransactionInfo\n * @see {@link https://developers.google.com/pay/api/web/object-reference#TransactionInfo TransactionInfo}\n */\n\n/**\n * @typedef {object} GooglePayButtonOptions A [Google Pay ButtonOptions object](https://developers.google.com/pay/api/web/reference/object#ButtonOptions).\n * @external GooglePayButtonOptions\n * @see {@link https://developers.google.com/pay/api/web/reference/object#ButtonOptions ButtonOptions}\n */\n\n/** @typedef {(object|boolean)} venmoCreateOptions The configuration options for Venmo. If `true` is passed instead of a configuration object, the default settings listed will be used.\n *\n * @param {boolean} [allowNewBrowserTab=true] If false, it restricts supported browsers to those that can app switch to the Venmo app without opening a new tab.\n */\n\n/**\n * @static\n * @function create\n * @description This function is the entry point for `braintree.dropin`. It is used for creating {@link Dropin} instances.\n * @param {object} options Object containing all {@link Dropin} options:\n * @param {string} options.authorization A [tokenization key](https://developer.paypal.com/braintree/docs/guides/authorization/tokenization-key/javascript/v3) or a [client token](https://developer.paypal.com/braintree/docs/guides/authorization/client-token). If authorization is a client token created with a [customer ID](https://developer.paypal.com/braintree/docs/guides/drop-in/customization/javascript/v3#display-a-saved-payment-method), Drop-in will render saved payment methods and automatically store any newly-added payment methods in their Vault record.\n * @param {(string|HTMLElement)} options.container A reference to an empty element, such as a `<div>`, where Drop-in will be included on your page or the selector for the empty element. e.g. `#dropin-container`.\n * @param {string} options.selector Deprecated: Now an alias for `options.container`.\n * @param {string} [options.locale=`en_US`] Use this option to change the language, links, and terminology used throughout Drop-in. Supported locales include:\n * `ar_EG`,\n * `cs_CZ`,\n * `da_DK`,\n * `de_DE`,\n * `el_GR`,\n * `en_AU`,\n * `en_GB`,\n * `en_IN`,\n * `en_US`,\n * `es_ES`,\n * `es_XC`,\n * `fi_FI`,\n * `fr_CA`,\n * `fr_FR`,\n * `fr_XC`,\n * `he_IL`,\n * `hu_HU`,\n * `id_ID`,\n * `it_IT`,\n * `ja_JP`,\n * `ko_KR`,\n * `nl_NL`,\n * `no_NO`,\n * `pl_PL`,\n * `pt_BR`,\n * `pt_PT`,\n * `ru_RU`,\n * `sk_SK`,\n * `sv_SE`,\n * `th_TH`,\n * `zh_CN`,\n * `zh_HK`,\n * `zh_TW`,\n * `zh_XC`.\n *\n * @param {object} [options.translations] To use your own translations, pass an object with the strings you wish to replace. This object must use the same structure as the object used internally for supported translations, which can be found [here](https://github.com/braintree/braintree-web-drop-in/blob/main/src/translations/en_US.js). Any strings that are not included will be those from the provided `locale` or `en_US` if no `locale` is provided. See below for an example of creating Drop-in with custom translations.\n * @param {array} [options.paymentOptionPriority] Use this option to indicate the order in which enabled payment options should appear when multiple payment options are enabled. By default, payment options will appear in this order: `['card', 'paypal', 'paypalCredit', 'venmo', 'applePay', 'googlePay']`. Payment options omitted from this array will not be offered to the customer.\n *\n * @param {(boolean|object)} [options.card] The configuration options for cards. See [`cardCreateOptions`](#~cardCreateOptions) for all `card` options. If this option is omitted, cards will still appear as a payment option. To remove cards, pass `false` for the value.\n * @param {object} [options.paypal] The configuration options for PayPal. To include a PayPal option in your Drop-in integration, include the `paypal` parameter and [enable PayPal in the Braintree Control Panel](https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#go-live). To test in Sandbox, you will need to [link a PayPal sandbox test account to your Braintree sandbox account](https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#linked-paypal-testing).\n *\n * Some of the PayPal configuration options are listed [here](#~paypalCreateOptions), but for a full list see the [PayPal Checkout client reference options](http://braintree.github.io/braintree-web/3.88.3/PayPalCheckout.html#createPayment).\n *\n * PayPal is not [supported in Internet Explorer versions lower than 11](https://developer.paypal.com/docs/archive/checkout/reference/faq/#link-whichbrowsersdoespaypalcheckoutsupport).\n *\n * @param {object} [options.paypalCredit] The configuration options for PayPal Credit. To include a PayPal Credit option in your Drop-in integration, include the `paypalCredit` parameter and [enable PayPal in the Braintree Control Panel](https://developer.paypal.com/braintree/docs/guides/paypal/testing-go-live#go-live).\n *\n * Some of the PayPal Credit configuration options are listed [here](#~paypalCreateOptions), but for a full list see the [PayPal Checkout client reference options](http://braintree.github.io/braintree-web/3.88.3/PayPalCheckout.html#createPayment). For more information on PayPal Credit, see the [Braintree Developer Docs](https://developer.paypal.com/braintree/docs/guides/paypal/paypal-credit/javascript/v3).\n *\n * PayPal Credit is not [supported in Internet Explorer versions lower than 11](https://developer.paypal.com/docs/archive/checkout/reference/faq/#link-whichbrowsersdoespaypalcheckoutsupport).\n *\n * @param {(object|boolean)} [options.venmo] The configuration options for Pay with Venmo. To include a Venmo option in your Drop-in integration, include the `venmo` parameter and [follow the documentation for setting up Venmo in the Braintree control panel](https://articles.braintreepayments.com/guides/payment-methods/venmo#setup). If a user's browser does not support Venmo, the Venmo option will not be rendered.\n *\n * See [`venmoCreateOptions`](#~venmoCreateOptions) for `venmo` options.\n *\n * @param {object} [options.applePay] The configuration options for Apple Pay. To include an Apple Pay option in your Drop-in integration, include the `applePay` parameter and [enable Apple Pay in the Braintree Control Panel](https://developer.paypal.com/braintree/docs/guides/apple-pay/configuration/javascript/v3). If a user's browser does not support Apple Pay, the Apple Pay option will not be rendered. See [Apple's documentation](https://support.apple.com/en-us/HT201469) for browser and device support.\n *\n * See [`applePayCreateOptions`](#~applePayCreateOptions) for `applePay` options.\n *\n * @param {object} [options.googlePay] The configuration options for Google Pay. To include a Google Pay option in your Drop-in integration, include the `googlePay` parameter and [enable Google Pay in the Braintree Control Panel](https://developer.paypal.com/braintree/docs/guides/google-pay/configuration/javascript/v3). If a user's browser does not support Google Pay, the Google Pay option will not be rendered. See [Google's documentation](https://developers.google.com/pay/api/web/test-and-deploy) for browser and device support.\n *\n * See [`googlePayCreateOptions`](#~googlePayCreateOptions) for `googlePay` options.\n *\n * @param {object|boolean} [options.dataCollector] If `true` is passed, Drop-in will be configured to collect data for use with Advanced Fraud Protection. If collecting data via Kount, pass a [`dataCollectorOptions` object](#~dataCollectorOptions) with `kount: true` instead. If Data Collector is configured and fails to load, Drop-in creation will fail.\n *\n * @param {(boolean|object)} [options.threeDSecure] When `true` is passed, the 3D Secure module will be created with a default configuration. See [`threeDSecureOptions`](#~threeDSecureOptions) for additional create options. If 3D Secure is configured and fails to load, Drop-in creation will fail.\n *\n * @param {boolean} [options.vaultManager=false] Whether or not to allow a customer to delete saved payment methods when used with a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id). *Note:* Deleting a payment method from Drop-in will permanently delete the payment method, so this option is not recommended for merchants using Braintree's recurring billing system. This feature is not supported in Internet Explorer 9.\n *\n * @param {boolean} [options.preselectVaultedPaymentMethod=true] Whether or not to initialize Drop-in with a vaulted payment method pre-selected. Only applicable when using a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id) and a customer with saved payment methods.\n *\n * @param {boolean} [options.showDefaultPaymentMethodFirst=true] When `true` or left out, the customer's default payment method will be displayed first in the list of vaulted payment methods. When `false`, the order of the displayed payment methods is not guaranteed. Only applicable when using a [client token with a customer id](https://developer.paypal.com/braintree/docs/reference/request/client-token/generate#customer_id) and a customer with saved payment methods.\n *\n * @param {function} [callback] The second argument, `data`, is the {@link Dropin} instance. Returns a promise if no callback is provided.\n * @returns {(void|Promise)} Returns a promise if no callback is provided.\n * @example\n * <caption>A full example of accepting credit cards with callback API</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <div id=\"dropin-container\"></div>\n *     <button id=\"submit-button\">Purchase</button>\n *\n *     <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"></script>\n *\n *     <script>\n *       var submitButton = document.querySelector('#submit-button');\n *\n *       braintree.dropin.create({\n *         authorization: 'CLIENT_AUTHORIZATION',\n *         container: '#dropin-container'\n *       }, function (err, dropinInstance) {\n *         if (err) {\n *           // Handle any errors that might've occurred when creating Drop-in\n *           console.error(err);\n *           return;\n *         }\n *         submitButton.addEventListener('click', function () {\n *           dropinInstance.requestPaymentMethod(function (err, payload) {\n *             if (err) {\n *               // Handle errors in requesting payment method\n *             }\n *\n *             // Send payload.nonce to your server\n *           });\n *         });\n *       });\n *     </script>\n *   </body>\n * </html>\n * @example\n * <caption>A full example of accepting credit cards with promise API</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <div id=\"dropin-container\"></div>\n *     <button id=\"submit-button\">Purchase</button>\n *\n *     <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"></script>\n *\n *     <script>\n *       var submitButton = document.querySelector('#submit-button');\n *\n *       braintree.dropin.create({\n *         authorization: 'CLIENT_AUTHORIZATION',\n *         container: '#dropin-container'\n *       }).then(function (dropinInstance) {\n *         submitButton.addEventListener('click', function () {\n *           dropinInstance.requestPaymentMethod().then(function (payload) {\n *             // Send payload.nonce to your server\n *           }).catch(function (err) {\n *             // Handle errors in requesting payment method\n *           });\n *         });\n *       }).catch(function (err) {\n *         // Handle any errors that might've occurred when creating Drop-in\n *         console.error(err);\n *       });\n *     </script>\n *   </body>\n * </html>\n * @example\n * <caption>Setting up a Drop-in instance to accept credit cards, PayPal, PayPal Credit, Venmo, and Apple Pay</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   applePay: {\n *     displayName: 'Merchant Name',\n *     paymentRequest: {\n *       total: {\n *         label: 'Localized Name',\n *         amount: '10.00'\n *       }\n *     }\n *   },\n *   paypal: {\n *     flow: 'checkout',\n *     amount: '10.00',\n *     currency: 'USD'\n *   },\n *  paypalCredit: {\n *    flow: 'checkout',\n *    amount: '10.00',\n *    currency: 'USD'\n *   },\n *   venmo: true\n * }, function (err, dropinInstance) {\n *   // Set up a handler to request a payment method and\n *   // submit the payment method nonce to your server\n * });\n * @example\n * <caption>Setting up a Drop-in instance to accept Venmo with restricted browser support</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   venmo: {\n *     allowNewBrowserTab: false\n *   }\n * }, function (err, dropinInstance) {\n *   // Set up a handler to request a payment method and\n *   // submit the payment method nonce to your server\n * });\n *\n * @example\n * <caption>Submitting the payment method nonce to the server using a form</caption>\n * <!DOCTYPE html>\n * <html lang=\"en\">\n *   <head>\n *     <meta charset=\"utf-8\">\n *     <title>Checkout</title>\n *   </head>\n *   <body>\n *     <form id=\"payment-form\" action=\"/\" method=\"post\">\n *       <div id=\"dropin-container\"></div>\n *       <input type=\"submit\" value=\"Purchase\"></input>\n *       <input type=\"hidden\" id=\"nonce\" name=\"payment_method_nonce\"></input>\n *     </form>\n *\n *     <script src=\"https://js.braintreegateway.com/web/dropin/1.33.7/js/dropin.min.js\"></script>\n *\n *     <script>\n *       var form = document.querySelector('#payment-form');\n *       var nonceInput = document.querySelector('#nonce');\n *\n *       braintree.dropin.create({\n *         authorization: 'CLIENT_AUTHORIZATION',\n *         container: '#dropin-container'\n *       }, function (err, dropinInstance) {\n *         if (err) {\n *           // Handle any errors that might've occurred when creating Drop-in\n *           console.error(err);\n *           return;\n *         }\n *         form.addEventListener('submit', function (event) {\n *           event.preventDefault();\n *\n *           dropinInstance.requestPaymentMethod(function (err, payload) {\n *             if (err) {\n *               // Handle errors in requesting payment method\n *               return;\n *             }\n *\n *             // Send payload.nonce to your server\n *             nonceInput.value = payload.nonce;\n *             form.submit();\n *           });\n *         });\n *       });\n *     </script>\n *   </body>\n * </html>\n *\n * @example\n * <caption>Use your own translations</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   translations: {\n *     payingWith: 'You are paying with {{paymentSource}}',\n *     chooseAnotherWayToPay: 'My custom chooseAnotherWayToPay string',\n *     // Any other custom translation strings\n *   }\n * }, callback);\n *\n * @example\n * <caption>Customizing Drop-in with card form overrides</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   card: {\n *     overrides: {\n *       fields: {\n *         number: {\n *           placeholder: '1111 1111 1111 1111' // Update the number field placeholder\n *         },\n *         postalCode: {\n *           minlength: 5 // Set the minimum length of the postal code field\n *         },\n *         cvv: null // Remove the CVV field from your form\n *       },\n *       styles: {\n *         input: {\n *           'font-size': '18px' // Change the font size for all inputs\n *         },\n *         ':focus': {\n *           color: 'red' // Change the focus color to red for all inputs\n *         }\n *       }\n *     }\n *   }\n * }, callback);\n *\n * @example\n * <caption>Mask Card Inputs</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   card: {\n *     overrides: {\n *       fields: {\n *         number: {\n *           maskInput: {\n *             showLastFour: true\n *           }\n *         },\n *         cvv: {\n *           maskInput: true\n *         }\n *       }\n *     }\n *   }\n * }, callback);\n *\n * @example\n * <caption>Including a cardholder name field</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   card: {\n *     cardholderName: true\n *   }\n * }, callback);\n *\n * @example\n * <caption>Including a required cardholder name field</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   card: {\n *     cardholderName: {\n *       required: true\n *     }\n *   }\n * }, callback);\n *\n * @example\n * <caption>Enabling 3D Secure</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   threeDSecure: true\n * }, function (err, dropinInstance) {\n *   // setup payment button\n *   btn.addEventListener('click', function (e) {\n *     e.preventDefault();\n *\n *     dropinInstance.requestPaymentMethod(|\n *       threeDSecure: {\n *         amount: '100.00',\n *         billingAddress: {\n *           givenName: 'Jill', // ASCII-printable characters required, else will throw a validation error\n *           surname: 'Doe', // ASCII-printable characters required, else will throw a validation error\n *           phoneNumber: '8101234567',\n *           streetAddress: '555 Smith St.',\n *           extendedAddress: '#5',\n *           locality: 'Oakland',\n *           region: 'CA',\n *           postalCode: '12345',\n *           countryCodeAlpha2: 'US'\n *         },\n *         // additional 3ds params\n *       }\n *     }, function (err, payload) {\n *       // inspect payload.liablityShifted\n *       // send payload.nonce to server\n *     });\n *   });\n * });\n *\n * @example\n * <caption>Enabled Vault Manager</caption>\n * braintree.dropin.create({\n *   authorization: 'CLIENT_AUTHORIZATION',\n *   container: '#dropin-container',\n *   vaultManager: true\n * }, callback);\n */\n\nfunction create(options) {\n  if (!options.authorization) {\n    return Promise.reject(new DropinError('options.authorization is required.'));\n  }\n\n  return client.create({\n    authorization: options.authorization\n  }).catch(function (err) {\n    return Promise.reject(new DropinError({\n      message: 'There was an error creating Drop-in.',\n      braintreeWebError: err\n    }));\n  }).then(function (clientInstance) {\n    clientInstance = setAnalyticsIntegration(clientInstance);\n\n    if (clientInstance.getConfiguration().authorizationType === 'TOKENIZATION_KEY') {\n      analytics.sendEvent(clientInstance, 'started.tokenization-key');\n    } else {\n      analytics.sendEvent(clientInstance, 'started.client-token');\n    }\n\n    return new Promise(function (resolve, reject) {\n      new Dropin({\n        merchantConfiguration: options,\n        client: clientInstance\n      })._initialize(function (err, instance) {\n        if (err) {\n          reject(err);\n\n          return;\n        }\n\n        resolve(instance);\n      });\n    });\n  });\n}\n\nfunction setAnalyticsIntegration(clientInstance) {\n  var configuration = clientInstance.getConfiguration();\n\n  configuration.analyticsMetadata.integration = constants.INTEGRATION;\n  configuration.analyticsMetadata.integrationType = constants.INTEGRATION;\n  configuration.analyticsMetadata.dropinVersion = VERSION;\n\n  clientInstance.getConfiguration = function () {\n    return configuration;\n  };\n\n  return clientInstance;\n}\n\n// we check for document's existence to support server side rendering\ncreateFromScriptTag(create, typeof document !== 'undefined' && document.querySelector('script[data-braintree-dropin-authorization]'));\n\nmodule.exports = {\n  create: wrapPromise(create),\n  /**\n   * @description The current version of Drop-in, i.e. `1.33.7`.\n   * @type {string}\n   */\n  VERSION: VERSION\n};\n\n},{\"./constants\":196,\"./dropin\":198,\"./lib/analytics\":201,\"./lib/create-from-script-tag\":204,\"./lib/dropin-error\":206,\"./lib/promise\":213,\"@braintree/wrap-promise\":51,\"braintree-web/client\":60}],200:[function(require,module,exports){\n'use strict';\n\nfunction addSelectionEventHandler(element, func) {\n  element.addEventListener('click', func);\n  element.addEventListener('keyup', function (event) {\n    if (event.keyCode === 13) {\n      func();\n    }\n  });\n}\n\nmodule.exports = addSelectionEventHandler;\n\n},{}],201:[function(require,module,exports){\n'use strict';\n\nvar atob = require('./polyfill').atob;\nvar constants = require('../constants');\nvar braintreeClientVersion = require('braintree-web/client').VERSION;\n\nfunction _millisToSeconds(millis) {\n  return Math.floor(millis / 1000);\n}\n\nfunction sendAnalyticsEvent(client, kind, callback) {\n  var configuration = client.getConfiguration();\n  var analyticsRequest = client._request;\n  var timestamp = _millisToSeconds(Date.now());\n  var url = configuration.gatewayConfiguration.analytics.url;\n  var data = {\n    analytics: [{\n      kind: constants.ANALYTICS_PREFIX + kind,\n      timestamp: timestamp\n    }],\n    _meta: configuration.analyticsMetadata,\n    braintreeLibraryVersion: braintreeClientVersion\n  };\n\n  if (configuration.authorizationType === 'TOKENIZATION_KEY') {\n    data.tokenizationKey = configuration.authorization;\n  } else {\n    data.authorizationFingerprint = JSON.parse(atob(configuration.authorization)).authorizationFingerprint;\n  }\n\n  analyticsRequest({\n    url: url,\n    method: 'post',\n    data: data,\n    timeout: constants.ANALYTICS_REQUEST_TIMEOUT_MS\n  }, callback);\n}\n\nmodule.exports = {\n  sendEvent: sendAnalyticsEvent\n};\n\n},{\"../constants\":196,\"./polyfill\":212,\"braintree-web/client\":60}],202:[function(require,module,exports){\n'use strict';\n\nvar assignNormalized = typeof Object.assign === 'function' ? Object.assign : assignPolyfill;\n\nfunction assignPolyfill(destination) {\n  var i, source, key;\n\n  for (i = 1; i < arguments.length; i++) {\n    source = arguments[i];\n    for (key in source) {\n      if (source.hasOwnProperty(key)) {\n        destination[key] = source[key];\n      }\n    }\n  }\n\n  return destination;\n}\n\nmodule.exports = {\n  assign: assignNormalized,\n  _assign: assignPolyfill\n};\n\n},{}],203:[function(require,module,exports){\n'use strict';\n\nvar isIe9 = require('@braintree/browser-detection/is-ie9');\nvar isIe10 = require('@braintree/browser-detection/is-ie10');\n\nmodule.exports = {\n  isIe9: isIe9,\n  isIe10: isIe10\n};\n\n},{\"@braintree/browser-detection/is-ie10\":32,\"@braintree/browser-detection/is-ie9\":33}],204:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('./analytics');\nvar find = require('./find-parent-form');\nvar uuid = require('@braintree/uuid');\nvar DropinError = require('./dropin-error');\nvar kebabCaseToCamelCase = require('./kebab-case-to-camel-case');\nvar WHITELISTED_DATA_ATTRIBUTES = [\n  'locale',\n  'payment-option-priority',\n\n  'data-collector.kount',\n  'data-collector.paypal',\n\n  // camelcase version was accidentally used initially.\n  // we add the kebab case version to match the docs, but\n  // we retain the camelcase version for backwards compatibility\n  'card.cardholderName',\n  'card.cardholderName.required',\n  'card.cardholder-name',\n  'card.cardholder-name.required',\n\n  'paypal.amount',\n  'paypal.currency',\n  'paypal.flow',\n  'paypal.landing-page-type',\n\n  'paypal-credit.amount',\n  'paypal-credit.currency',\n  'paypal-credit.flow',\n  'paypal-credit.landing-page-type'\n];\n\nfunction injectHiddenInput(name, value, form) {\n  var input = form.querySelector('[name=\"' + name + '\"]');\n\n  if (!input) {\n    input = document.createElement('input');\n    input.type = 'hidden';\n    input.name = name;\n    form.appendChild(input);\n  }\n\n  input.value = value;\n}\n\nfunction addCompositeKeyValuePairToObject(obj, key, value) {\n  var decomposedKeys = key.split('.');\n  var topLevelKey = kebabCaseToCamelCase(decomposedKeys[0]);\n\n  if (decomposedKeys.length === 1) {\n    obj[topLevelKey] = deserialize(value);\n  } else {\n    obj[topLevelKey] = obj[topLevelKey] || {};\n    addCompositeKeyValuePairToObject(obj[topLevelKey], decomposedKeys.slice(1).join('.'), value);\n  }\n}\n\nfunction deserialize(value) {\n  try {\n    return JSON.parse(value);\n  } catch (e) {\n    return value;\n  }\n}\n\nfunction createFromScriptTag(createFunction, scriptTag) {\n  var authorization, container, createOptions, form;\n\n  if (!scriptTag) {\n    return;\n  }\n\n  authorization = scriptTag.getAttribute('data-braintree-dropin-authorization');\n\n  if (!authorization) {\n    throw new DropinError('Authorization not found in data-braintree-dropin-authorization attribute');\n  }\n\n  container = document.createElement('div');\n  container.id = 'braintree-dropin-' + uuid();\n\n  form = find.findParentForm(scriptTag);\n\n  if (!form) {\n    throw new DropinError('No form found for script tag integration.');\n  }\n\n  form.addEventListener('submit', function (event) {\n    event.preventDefault();\n  });\n\n  scriptTag.parentNode.insertBefore(container, scriptTag);\n\n  createOptions = {\n    authorization: authorization,\n    container: container\n  };\n\n  WHITELISTED_DATA_ATTRIBUTES.forEach(function (compositeKey) {\n    var value = scriptTag.getAttribute('data-' + compositeKey);\n\n    if (value == null) {\n      return;\n    }\n\n    addCompositeKeyValuePairToObject(createOptions, compositeKey, value);\n  });\n\n  createFunction(createOptions).then(function (instance) {\n    analytics.sendEvent(instance._client, 'integration-type.script-tag');\n    form.addEventListener('submit', function () {\n      instance.requestPaymentMethod(function (requestPaymentError, payload) {\n        if (requestPaymentError) {\n          return;\n        }\n\n        injectHiddenInput('payment_method_nonce', payload.nonce, form);\n\n        if (payload.deviceData) {\n          injectHiddenInput('device_data', payload.deviceData, form);\n        }\n\n        form.submit();\n      });\n    });\n  });\n}\n\nmodule.exports = createFromScriptTag;\n\n},{\"./analytics\":201,\"./dropin-error\":206,\"./find-parent-form\":207,\"./kebab-case-to-camel-case\":211,\"@braintree/uuid\":47}],205:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar constants = require('../constants');\nvar analytics = require('./analytics');\nvar assets = require('@braintree/asset-loader');\nvar Promise = require('./promise');\n\nfunction DataCollector(config) {\n  this._config = config;\n}\n\nDataCollector.prototype.initialize = function () {\n  var self = this;\n\n  return Promise.resolve().then(function () {\n    var braintreeWebVersion;\n\n    if (global.braintree && global.braintree.dataCollector) {\n      return Promise.resolve();\n    }\n\n    braintreeWebVersion = self._config.client.getVersion();\n\n    return assets.loadScript({\n      src: 'https://js.braintreegateway.com/web/' + braintreeWebVersion + '/js/data-collector.min.js',\n      id: constants.DATA_COLLECTOR_SCRIPT_ID\n    });\n  }).then(function () {\n    return global.braintree.dataCollector.create(self._config);\n  }).then(function (instance) {\n    self._instance = instance;\n  }).catch(function (err) {\n    analytics.sendEvent(self._config.client, 'data-collector.setup-failed');\n    // log the Data Collector setup error\n    // but do not prevent Drop-in from loading\n    self.log(err);\n  });\n};\n\nDataCollector.prototype.log = function (message) {\n  console.log(message); // eslint-disable-line no-console\n};\n\nDataCollector.prototype.getDeviceData = function () {\n  if (!this._instance) {\n    return '';\n  }\n\n  return this._instance.deviceData;\n};\n\nDataCollector.prototype.teardown = function () {\n  if (!this._instance) {\n    return Promise.resolve();\n  }\n\n  return this._instance.teardown();\n};\n\nmodule.exports = DataCollector;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../constants\":196,\"./analytics\":201,\"./promise\":213,\"@braintree/asset-loader\":1}],206:[function(require,module,exports){\n'use strict';\n\nfunction isBraintreeWebError(err) {\n  return err.name === 'BraintreeError';\n}\n\nfunction DropinError(err) {\n  this.name = 'DropinError';\n\n  if (typeof err === 'string') {\n    this.message = err;\n  } else {\n    this.message = err.message;\n  }\n\n  if (isBraintreeWebError(err)) {\n    this._braintreeWebError = err;\n  } else {\n    this._braintreeWebError = err.braintreeWebError;\n  }\n}\n\nDropinError.prototype = Object.create(Error.prototype);\nDropinError.prototype.constructor = DropinError;\n\nmodule.exports = DropinError;\n\n},{}],207:[function(require,module,exports){\n'use strict';\n\nfunction findParentForm(element) {\n  var parentNode = element.parentNode;\n\n  if (!parentNode || parentNode.nodeName === 'FORM') {\n    return parentNode;\n  }\n\n  return findParentForm(parentNode);\n}\n\nmodule.exports = {\n  findParentForm: findParentForm\n};\n\n},{}],208:[function(require,module,exports){\n'use strict';\n\nvar atob = require('./polyfill').atob;\n\nmodule.exports = function (client) {\n  var authorizationFingerprint;\n  var configuration = client.getConfiguration();\n\n  if (configuration.authorizationType !== 'TOKENIZATION_KEY') {\n    authorizationFingerprint = JSON.parse(atob(configuration.authorization)).authorizationFingerprint;\n\n    return !authorizationFingerprint || authorizationFingerprint.indexOf('customer_id=') === -1;\n  }\n\n  return true;\n};\n\n},{\"./polyfill\":212}],209:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nfunction isHTTPS() {\n  return global.location.protocol === 'https:';\n}\n\nmodule.exports = {\n  isHTTPS: isHTTPS\n};\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],210:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nmodule.exports = function (win) {\n  win = win || global;\n\n  return Boolean(win.document.characterSet && win.document.characterSet.toLowerCase() === 'utf-8');\n};\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],211:[function(require,module,exports){\n'use strict';\n\nfunction kebabCaseToCamelCase(kebab) {\n  var parts = kebab.split('-');\n  var first = parts.shift();\n  var capitalizedParts = parts.map(function (part) {\n    return part.charAt(0).toUpperCase() + part.substring(1);\n  });\n\n  return [first].concat(capitalizedParts).join('');\n}\n\nmodule.exports = kebabCaseToCamelCase;\n\n},{}],212:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n/* eslint-disable no-mixed-operators */\n\nvar atobNormalized = typeof global.atob === 'function' ? global.atob : atob;\n\nfunction atob(base64String) {\n  var a, b, c, b1, b2, b3, b4, i;\n  var base64Matcher = new RegExp('^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})([=]{1,2})?$');\n  var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n  var result = '';\n\n  if (!base64Matcher.test(base64String)) {\n    throw new Error('Non base64 encoded input passed to window.atob polyfill');\n  }\n\n  i = 0;\n  do {\n    b1 = characters.indexOf(base64String.charAt(i++));\n    b2 = characters.indexOf(base64String.charAt(i++));\n    b3 = characters.indexOf(base64String.charAt(i++));\n    b4 = characters.indexOf(base64String.charAt(i++));\n\n    a = (b1 & 0x3F) << 2 | b2 >> 4 & 0x3;\n    b = (b2 & 0xF) << 4 | b3 >> 2 & 0xF;\n    c = (b3 & 0x3) << 6 | b4 & 0x3F;\n\n    result += String.fromCharCode(a) + (b ? String.fromCharCode(b) : '') + (c ? String.fromCharCode(c) : '');\n  } while (i < base64String.length);\n\n  return result;\n}\n\nmodule.exports = {\n  atob: function (base64String) {\n    return atobNormalized.call(global, base64String);\n  },\n  _atob: atob\n};\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],213:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar Promise = global.Promise || require('promise-polyfill');\n\nmodule.exports = Promise;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"promise-polyfill\":191}],214:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function (string) {\n  if (typeof string !== 'string') {\n    return '';\n  }\n\n  return string\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n};\n\n},{}],215:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function () {\n  var el = document.createElement('div');\n  var prop = 'flex-basis: 1px';\n  var prefixes = [\n    '-webkit-',\n    '-moz-',\n    '-ms-',\n    '-o-',\n    ''\n  ];\n\n  prefixes.forEach(function (prefix) {\n    el.style.cssText += prefix + prop;\n  });\n\n  return Boolean(el.style.length);\n};\n\n},{}],216:[function(require,module,exports){\n'use strict';\n\nvar assign = require('./assign').assign;\nvar threeDSecure = require('braintree-web/three-d-secure');\n\nvar DEFAULT_ACS_WINDOW_SIZE = '03';\nvar PASSTHROUGH_EVENTS = [\n  'customer-canceled',\n  'authentication-modal-render',\n  'authentication-modal-close'\n];\n\nfunction ThreeDSecure(client, model) {\n  this._client = client;\n  this._model = model;\n  this._config = assign({}, model.merchantConfiguration.threeDSecure);\n}\n\nThreeDSecure.prototype.initialize = function () {\n  var self = this;\n  var options = {\n    client: this._client,\n    version: 2\n  };\n\n  if (this._config.cardinalSDKConfig) {\n    options.cardinalSDKConfig = this._config.cardinalSDKConfig;\n  }\n\n  return threeDSecure.create(options).then(function (instance) {\n    self._instance = instance;\n\n    PASSTHROUGH_EVENTS.forEach(function (eventName) {\n      self._instance.on(eventName, function (event) {\n        self._model._emit('3ds:' + eventName, event);\n      });\n    });\n  });\n};\n\nThreeDSecure.prototype.verify = function (payload, merchantProvidedData) {\n  var verifyOptions = assign({\n    amount: this._config.amount\n  }, merchantProvidedData, {\n    nonce: payload.nonce,\n    bin: payload.details.bin,\n    // TODO in the future, we will allow\n    // merchants to pass in a custom\n    // onLookupComplete hook\n    onLookupComplete: function (data, next) {\n      next();\n    }\n  });\n\n  verifyOptions.additionalInformation = verifyOptions.additionalInformation || {};\n  verifyOptions.additionalInformation.acsWindowSize = verifyOptions.additionalInformation.acsWindowSize || DEFAULT_ACS_WINDOW_SIZE;\n\n  return this._instance.verifyCard(verifyOptions);\n};\n\nThreeDSecure.prototype.updateConfiguration = function (key, value) {\n  this._config[key] = value;\n};\n\nThreeDSecure.prototype.teardown = function () {\n  return this._instance.teardown();\n};\n\nmodule.exports = ThreeDSecure;\n\n},{\"./assign\":202,\"braintree-web/three-d-secure\":149}],217:[function(require,module,exports){\n'use strict';\n\nvar browserDetection = require('./browser-detection');\n\nfunction isHidden(element) {\n  if (!element) { // no parentNode, so nothing containing the element is hidden\n    return false;\n  }\n\n  if (element.style.display === 'none') {\n    return true;\n  }\n\n  return isHidden(element.parentNode);\n}\n\nfunction onTransitionEnd(element, propertyName, callback) {\n  if (browserDetection.isIe9() || isHidden(element)) {\n    callback();\n\n    return;\n  }\n\n  function transitionEventListener(event) {\n    if (event.propertyName === propertyName) {\n      element.removeEventListener('transitionend', transitionEventListener);\n      callback();\n    }\n  }\n\n  element.addEventListener('transitionend', transitionEventListener);\n}\n\nmodule.exports = {\n  onTransitionEnd: onTransitionEnd\n};\n\n},{\"./browser-detection\":203}],218:[function(require,module,exports){\n'use strict';\n\nvar Promise = require('./promise');\n\nfunction delay(time) {\n  time = time || 0;\n\n  return new Promise(function (resolve) {\n    window.setTimeout(resolve, time);\n  });\n}\n\nmodule.exports = {\n  delay: delay\n};\n\n},{\"./promise\":213}],219:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"الدفع بواسطة {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"اختر طريقة دفع أخرى\",\n  \"chooseAWayToPay\" : \"اختر طريقة الدفع\",\n  \"otherWaysToPay\" : \"طرق أخرى للدفع\",\n  \"edit\" : \"تحرير\",\n  \"doneEditing\" : \"تم\",\n  \"editPaymentMethods\" : \"تحرير طرق الدفع\",\n  \"CreditCardDeleteConfirmationMessage\" : \"هل تريد حذف بطاقة {{secondaryIdentifier}} التي تنتهي بالأرقام {{identifier}}؟\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"هل تريد حذف {{identifier}}الحساب PayPal؟\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"هل تريد فعلاً حذف حساب Venmo الذي يحمل اسم المستخدم {{identifier}}؟\",\n  \"genericDeleteConfirmationMessage\" : \"هل تريد بالفعل حذف طريقة الدفع؟\",\n  \"deleteCancelButton\" : \"إلغاء\",\n  \"deleteConfirmationButton\" : \"حذف\",\n  \"fieldEmptyForCvv\" : \"يرجى إدخال رمز حماية البطاقة.\",\n  \"fieldEmptyForExpirationDate\" : \"يرجى إدخال تاريخ انتهاء الصلاحية.\",\n  \"fieldEmptyForCardholderName\" : \"يرجى إدخال اسم صاحب البطاقة.\",\n  \"fieldTooLongForCardholderName\" : \"يجب أن يقل اسم صاحب البطاقة عن 256 حرفاً.\",\n  \"fieldEmptyForNumber\" : \"يرجى إدخال رقم.\",\n  \"fieldEmptyForPostalCode\" : \"يرجى إدخال الرمز البريدي.\",\n  \"fieldInvalidForCardholderName\" : \"اسم حامل البطاقة غير صحيح.\",\n  \"fieldInvalidForCvv\" : \"رمز الحماية غير صحيح.\",\n  \"fieldInvalidForExpirationDate\" : \"تاريخ انتهاء الصلاحية غير صحيح.\",\n  \"fieldInvalidForNumber\" : \"رقم البطاقة غير صحيح.\",\n  \"fieldInvalidForPostalCode\" : \"الرمز البريدي غير صحيح.\",\n  \"genericError\" : \"حدث خطأ ما من جانبنا.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"هذه البطاقة الائتمانية محفوظة كطريقة دفع حالياً.\",\n  \"hostedFieldsFailedTokenizationError\" : \"يرجى مراجعة معلوماتك وإعادة المحاولة.\",\n  \"hostedFieldsFieldsInvalidError\" : \"يرجى مراجعة معلوماتك وإعادة المحاولة.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"خطأ في الشبكة. يرجى المحاولة مجدداً.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"فشلت مصادقة بطاقة الائتمان. يرجى مراجعة معلوماتك وإعادة المحاولة.\",\n  \"paypalButtonMustBeUsed\" : \"استخدم زر PayPal لاستئناف الدفع.\",\n  \"paypalAccountTokenizationFailedError\" : \"وقع خطأ أثناء إضافة حساب PayPal. يرجى إعادة المحاولة.\",\n  \"paypalFlowFailedError\" : \"وقع خطأ أثناء الاتصال بـ PayPal. يرجى إعادة المحاولة.\",\n  \"paypalTokenizationRequestActiveError\" : \"تفويض الدفع عبر PayPal قيد التنفيذ.\",\n  \"venmoCanceledError\" : \"وقع خطأ. تأكد أن أحدث إصدار من تطبيق Venmo مثبت في جهازك وأن متصفحك يدعم التبديل إلى Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"فشل حذف طريقة الدفع. أعد المحاولة.\",\n  \"venmoAppFailedError\" : \"تطبيق Venmo غير موجود في جهازك.\",\n  \"unsupportedCardTypeError\" : \"نوع البطاقة غير مدعوم. يرجى تجربة بطاقة أخرى.\",\n  \"applePayTokenizationError\" : \"وقع خطأ في الشبكة أثناء معالجة الدفع عبر Apple Pay. يرجى إعادة المحاولة.\",\n  \"applePayActiveCardError\" : \"إضافة بطاقة مدعومة إلى محفظة Apple Pay.\",\n  \"cardholderNameLabel\" : \"اسم صاحب البطاقة\",\n  \"cardNumberLabel\" : \"رقم البطاقة\",\n  \"cvvLabel\" : \"رمز CVV‏\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 أرقام)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 أرقام)\",\n  \"cardholderNamePlaceholder\" : \"اسم صاحب البطاقة\",\n  \"expirationDateLabel\" : \"تاريخ انتهاء الصلاحية\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"الشهر/ السنة\",\n  \"postalCodeLabel\" : \"الرمز البريدي\",\n  \"saveCardLabel\" : \"حفظ البطاقة\",\n  \"payWithCard\" : \"الدفع ببطاقة سحب أو ائتمان\",\n  \"endingIn\" : \"تنتهي بتاريخ {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo‏\",\n  \"Card\" : \"البطاقة\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express‏\",\n  \"Discover\" : \"Discover‏\",\n  \"Diners Club\" : \"Diners Club‏\",\n  \"Elo\" : \"Elo‏\",\n  \"Hiper\" : \"Hiper‏\",\n  \"Hipercard\" : \"Hipercard‏\",\n  \"MasterCard\" : \"Mastercard‏\",\n  \"Visa\" : \"Visa‏\",\n  \"JCB\" : \"JCB‏\",\n  \"Maestro\" : \"Maestro‏\",\n  \"UnionPay\" : \"UnionPay‏\"\n}\n;\n\n},{}],220:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Forma úhrady: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Vybrat jiný způsob platby\",\n  \"chooseAWayToPay\" : \"Vybrat způsob platby\",\n  \"otherWaysToPay\" : \"Jiné způsoby platby\",\n  \"edit\" : \"Upravit\",\n  \"doneEditing\" : \"Hotovo\",\n  \"editPaymentMethods\" : \"Upravit způsoby platby\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Chcete kartu {{secondaryIdentifier}} s koncovým číslem {{identifier}}odstranit?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Chcete {{identifier}}účtu PayPal odstranit?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Opravdu chcete účet Venmo s uživatelským jménem {{identifier}} odstranit?\",\n  \"genericDeleteConfirmationMessage\" : \"Opravdu chcete tento způsob platby odstranit?\",\n  \"deleteCancelButton\" : \"Zrušit\",\n  \"deleteConfirmationButton\" : \"Odstranit\",\n  \"fieldEmptyForCvv\" : \"Vyplňte kód CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Vyplňte datum vypršení platnosti.\",\n  \"fieldEmptyForCardholderName\" : \"Vyplňte jméno držitele karty.\",\n  \"fieldTooLongForCardholderName\" : \"Jméno držitele karty musí obsahovat méně než 256 znaků.\",\n  \"fieldEmptyForNumber\" : \"Vyplňte číslo.\",\n  \"fieldEmptyForPostalCode\" : \"Vyplňte poštovní směrovací číslo.\",\n  \"fieldInvalidForCardholderName\" : \"Toto jméno držitele karty není platné.\",\n  \"fieldInvalidForCvv\" : \"Tento bezpečnostní kód není platný.\",\n  \"fieldInvalidForExpirationDate\" : \"Toto datum vypršení platnosti není platné.\",\n  \"fieldInvalidForNumber\" : \"Toto číslo karty není platné.\",\n  \"fieldInvalidForPostalCode\" : \"Toto poštovní směrovací číslo není platné.\",\n  \"genericError\" : \"Došlo k chybě na naší straně.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Tato kreditní karta je již jako způsob platby uložena.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Zkontrolujte zadané informace a zkuste to znovu.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Zkontrolujte zadané informace a zkuste to znovu.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Došlo k chybě sítě. Zkuste to znovu.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Ověření kreditní karty se nezdařilo. Zkontrolujte zadané informace a zkuste to znovu.\",\n  \"paypalButtonMustBeUsed\" : \"Chcete-li přejít k platbě, použijte tlačítko PayPal.\",\n  \"paypalAccountTokenizationFailedError\" : \"Při přidávání účtu PayPal došlo k chybě. Zkuste to znovu.\",\n  \"paypalFlowFailedError\" : \"Při připojování ke službě PayPal došlo k chybě. Zkuste to znovu.\",\n  \"paypalTokenizationRequestActiveError\" : \"Autorizace platby přes PayPal již probíhá.\",\n  \"venmoCanceledError\" : \"Došlo k chybě. Zkontrolujte, zda máte v zařízení nainstalovanou nejnovější verzi aplikace Venmo a zda prohlížeč přechod na aplikaci Venmo podporuje.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Způsob platby se nepodařilo odstranit. Zkuste to znovu.\",\n  \"venmoAppFailedError\" : \"Aplikaci Venmo se ve vašem zařízení nepodařilo najít.\",\n  \"unsupportedCardTypeError\" : \"Tento typ karty není podporován. Vyzkoušejte jinou kartu.\",\n  \"applePayTokenizationError\" : \"Při zpracování platby přes Apple Pay došlo k chybě sítě. Zkuste to znovu.\",\n  \"applePayActiveCardError\" : \"Přidejte si podporovanou kartu do peněženky Apple Pay.\",\n  \"cardholderNameLabel\" : \"Jméno držitele karty\",\n  \"cardNumberLabel\" : \"Číslo karty\",\n  \"cvvLabel\" : \"Kód CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 číslice)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 číslice)\",\n  \"cardholderNamePlaceholder\" : \"Jméno držitele karty\",\n  \"expirationDateLabel\" : \"Datum vypršení platnosti\",\n  \"expirationDateLabelSubheading\" : \"(MM/RR)\",\n  \"expirationDatePlaceholder\" : \"MM/RR\",\n  \"postalCodeLabel\" : \"Poštovní směrovací číslo\",\n  \"saveCardLabel\" : \"Uložit kartu\",\n  \"payWithCard\" : \"Zaplatit kartou\",\n  \"endingIn\" : \"Koncové číslo {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Karta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],221:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Betaling med {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Vælg en anden betalingsmetode\",\n  \"chooseAWayToPay\" : \"Vælg, hvordan du vil betale\",\n  \"otherWaysToPay\" : \"Andre måder at betale på\",\n  \"edit\" : \"Rediger\",\n  \"doneEditing\" : \"Udført\",\n  \"editPaymentMethods\" : \"Rediger betalingsmetode\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Vil du slette dit {{secondaryIdentifier}}-kort, der slutter på {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Vil du slette PayPal-kontoen for {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Er du sikker på, at du vil slette Venmo-konto med brugernavnet {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Er du sikker på, at du vil slette denne betalingsmetode?\",\n  \"deleteCancelButton\" : \"Annuller\",\n  \"deleteConfirmationButton\" : \"Slet\",\n  \"fieldEmptyForCvv\" : \"Du skal indtaste kontrolcifrene.\",\n  \"fieldEmptyForExpirationDate\" : \"Du skal indtaste en udløbsdato.\",\n  \"fieldEmptyForCardholderName\" : \"Du skal indtaste kortholderens navn.\",\n  \"fieldTooLongForCardholderName\" : \"Kortholders navn skal være mindre end 256 tegn.\",\n  \"fieldEmptyForNumber\" : \"Du skal indtaste et nummer.\",\n  \"fieldEmptyForPostalCode\" : \"Du skal indtaste et postnummer.\",\n  \"fieldInvalidForCardholderName\" : \"Kortindehaverens navn er ugyldigt.\",\n  \"fieldInvalidForCvv\" : \"Denne sikkerhedskode er ugyldig.\",\n  \"fieldInvalidForExpirationDate\" : \"Denne udløbsdato er ugyldig.\",\n  \"fieldInvalidForNumber\" : \"Dette kortnummer er ikke gyldigt.\",\n  \"fieldInvalidForPostalCode\" : \"Dette postnummer er ikke gyldigt.\",\n  \"genericError\" : \"Der opstod en fejl.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Dette betalingskort findes allerede som en gemt betalingsmetode.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Tjek oplysningerne, og prøv igen.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Tjek oplysningerne, og prøv igen.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Netværksfejl. Prøv igen.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Bekræftelse af betalingskort mislykkedes. Tjek oplysningerne, og prøv igen.\",\n  \"paypalButtonMustBeUsed\" : \"Brug PayPal-knappen til at fortsætte med din betaling.\",\n  \"paypalAccountTokenizationFailedError\" : \"Der opstod en fejl under tilføjelsen af PayPal-kontoen. Prøv igen.\",\n  \"paypalFlowFailedError\" : \"Det lykkedes ikke at oprette forbindelse til PayPal. Prøv igen.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPals betalingsautorisation er allerede i gang.\",\n  \"venmoCanceledError\" : \"Der opstod et problem. Sørg for, at den nyeste version af Venmo-appen er installeret på din enhed, og at din browser understøtter skift til Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Betalingsmetoden kunne ikke slettes. Prøv igen.\",\n  \"venmoAppFailedError\" : \"Venmo-appen blev ikke fundet på din enhed.\",\n  \"unsupportedCardTypeError\" : \"Korttypen understøttes ikke. Prøv et andet kort.\",\n  \"applePayTokenizationError\" : \"Der opstod en netværksfejl under behandling af Apple Pay-betalingen. Prøv igen.\",\n  \"applePayActiveCardError\" : \"Føj et understøttet kort til din Apple Pay-e-pung.\",\n  \"cardholderNameLabel\" : \"Kortindehaverens navn\",\n  \"cardNumberLabel\" : \"Kortnummer\",\n  \"cvvLabel\" : \"Kontrolcifre\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 cifre)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 cifre)\",\n  \"cardholderNamePlaceholder\" : \"Kortindehaverens navn\",\n  \"expirationDateLabel\" : \"Udløbsdato\",\n  \"expirationDateLabelSubheading\" : \"(MM/ÅÅ)\",\n  \"expirationDatePlaceholder\" : \"MM/ÅÅ\",\n  \"postalCodeLabel\" : \"Postnummer\",\n  \"saveCardLabel\" : \"Gem kort\",\n  \"payWithCard\" : \"Betal med betalingskort\",\n  \"endingIn\" : \"Slutter på {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kort\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],222:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Zahlen mit {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Wählen Sie eine andere Zahlungsquelle\",\n  \"chooseAWayToPay\" : \"Wählen Sie eine Zahlungsquelle\",\n  \"otherWaysToPay\" : \"Sonstige Zahlungsquellen\",\n  \"edit\" : \"Ändern\",\n  \"doneEditing\" : \"Fertig\",\n  \"editPaymentMethods\" : \"Zahlungsquellen bearbeiten\",\n  \"CreditCardDeleteConfirmationMessage\" : \"{{secondaryIdentifier}}-Karte mit den Endziffern {{identifier}} löschen?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"PayPal-Konto {{identifier}} löschen?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Wollen Sie das Venmo-Konto mit dem Benutzernamen {{identifier}} wirklich löschen?\",\n  \"genericDeleteConfirmationMessage\" : \"Möchten Sie diese Zahlungsquelle wirklich löschen?\",\n  \"deleteCancelButton\" : \"Abbrechen\",\n  \"deleteConfirmationButton\" : \"Löschen\",\n  \"fieldEmptyForCvv\" : \"Geben Sie die Kartenprüfnummer (CVV) ein.\",\n  \"fieldEmptyForExpirationDate\" : \"Geben Sie das Ablaufdatum ein.\",\n  \"fieldEmptyForCardholderName\" : \"Geben Sie den Namen des Karteninhabers ein.\",\n  \"fieldTooLongForCardholderName\" : \"Der Name des Karteninhabers darf nicht länger als 256 Zeichen sein.\",\n  \"fieldEmptyForNumber\" : \"Geben Sie eine Nummer ein.\",\n  \"fieldEmptyForPostalCode\" : \"Geben Sie eine Postleitzahl ein.\",\n  \"fieldInvalidForCardholderName\" : \"Der Name des Karteninhabers ist nicht gültig.\",\n  \"fieldInvalidForCvv\" : \"Diese Kartenprüfnummer ist ungültig.\",\n  \"fieldInvalidForExpirationDate\" : \"Dieses Ablaufdatum ist ungültig.\",\n  \"fieldInvalidForNumber\" : \"Diese Kartennummer ist ungültig.\",\n  \"fieldInvalidForPostalCode\" : \"Diese Postleitzahl ist ungültig.\",\n  \"genericError\" : \"Bei uns ist ein Fehler aufgetreten.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Diese Kreditkarte ist bereits als gespeicherte Zahlungsquelle vorhanden.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Bitte prüfen Sie die Informationen und versuchen Sie es erneut.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Bitte prüfen Sie die Informationen und versuchen Sie es erneut.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Netzwerkfehler. Versuchen Sie es bitte erneut.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Die Kreditkartenverifizierung ist fehlgeschlagen. Bitte prüfen Sie die Informationen und versuchen Sie es erneut.\",\n  \"paypalButtonMustBeUsed\" : \"Verwenden Sie den PayPal-Button, um mit der Zahlung fortzufahren.\",\n  \"paypalAccountTokenizationFailedError\" : \"Beim Hinzufügen des PayPal-Kontos ist ein Fehler aufgetreten. Versuchen Sie es bitte erneut.\",\n  \"paypalFlowFailedError\" : \"Bei der Verbindung mit PayPal ist ein Fehler aufgetreten. Versuchen Sie es bitte erneut.\",\n  \"paypalTokenizationRequestActiveError\" : \"Die PayPal-Zahlungsautorisierung wird bereits vorgenommen.\",\n  \"venmoCanceledError\" : \"Etwas ist schief gelaufen. Vergewissern Sie sich, dass Sie die neueste Version der Venmo-App auf Ihrem Gerät installiert haben und Ihr Browser den Wechsel zu Venmo unterstützt.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Die Zahlungsquelle konnte nicht gelöscht werden. Versuchen Sie es erneut.\",\n  \"venmoAppFailedError\" : \"Die Venmo-App wurde nicht auf Ihrem Gerät gefunden.\",\n  \"unsupportedCardTypeError\" : \"Dieser Kartentyp wird nicht unterstützt. Versuchen Sie es mit einer anderen Karte.\",\n  \"applePayTokenizationError\" : \"Bei der Verarbeitung der Apple Pay-Zahlung ist ein Netzwerkfehler aufgetreten. Versuchen Sie es bitte erneut.\",\n  \"applePayActiveCardError\" : \"Fügen Sie Ihrem Apple Pay-Wallet eine unterstützte Karte hinzu.\",\n  \"cardholderNameLabel\" : \"Name des Karteninhabers\",\n  \"cardNumberLabel\" : \"Kartennummer\",\n  \"cvvLabel\" : \"Kartenprüfnummer\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3-stellig)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4-stellig)\",\n  \"cardholderNamePlaceholder\" : \"Name des Karteninhabers\",\n  \"expirationDateLabel\" : \"Gültig bis\",\n  \"expirationDateLabelSubheading\" : \"(MM/JJ)\",\n  \"expirationDatePlaceholder\" : \"MM/JJ\",\n  \"postalCodeLabel\" : \"Postleitzahl\",\n  \"saveCardLabel\" : \"Karte speichern\",\n  \"payWithCard\" : \"Mit Karte zahlen\",\n  \"endingIn\" : \"Mit den Endziffern {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Karte\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],223:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Πληρωμή με {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Επιλογή ενός άλλου τρόπου πληρωμής\",\n  \"chooseAWayToPay\" : \"Επιλογή τρόπου πληρωμής\",\n  \"otherWaysToPay\" : \"Άλλοι τρόποι πληρωμής\",\n  \"edit\" : \"Επεξεργασία\",\n  \"doneEditing\" : \"Τέλος\",\n  \"editPaymentMethods\" : \"Επεξεργασία μεθόδων πληρωμής\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Διαγραφή της κάρτας {{secondaryIdentifier}} που λήγει σε {{identifier}};\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Διαγραφή {{identifier}}λογαριασμού PayPal;\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Θέλετε σίγουρα να διαγράψετε τον λογαριασμό Venmo με το όνομα χρήστη {{identifier}};\",\n  \"genericDeleteConfirmationMessage\" : \"Θέλετε σίγουρα να διαγράψετε αυτήν τη μέθοδο πληρωμής;\",\n  \"deleteCancelButton\" : \"Ακύρωση\",\n  \"deleteConfirmationButton\" : \"Διαγραφή\",\n  \"fieldEmptyForCvv\" : \"Συμπληρώστε έναν κωδικό ασφαλείας (CVV).\",\n  \"fieldEmptyForExpirationDate\" : \"Συμπληρώστε ημερομηνία λήξης.\",\n  \"fieldEmptyForCardholderName\" : \"Συμπληρώστε το όνομα ενός κατόχου κάρτας.\",\n  \"fieldTooLongForCardholderName\" : \"Το όνομα του κατόχου της κάρτας πρέπει να περιέχει λιγότερους από 256 χαρακτήρες.\",\n  \"fieldEmptyForNumber\" : \"Συμπληρώστε έναν αριθμό.\",\n  \"fieldEmptyForPostalCode\" : \"Συμπληρώστε έναν ταχυδρομικό κώδικα.\",\n  \"fieldInvalidForCardholderName\" : \"Αυτό το όνομα κατόχου κάρτας δεν είναι έγκυρο.\",\n  \"fieldInvalidForCvv\" : \"Αυτός ο κωδικός ασφαλείας δεν είναι έγκυρος.\",\n  \"fieldInvalidForExpirationDate\" : \"Αυτή η ημερομηνία λήξης δεν είναι έγκυρη.\",\n  \"fieldInvalidForNumber\" : \"Αυτός ο αριθμός κάρτας δεν είναι έγκυρος.\",\n  \"fieldInvalidForPostalCode\" : \"Αυτός ο ταχυδρομικός κώδικας δεν είναι έγκυρος.\",\n  \"genericError\" : \"Προέκυψε πρόβλημα στο σύστημά μας.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Αυτή η πιστωτική κάρτα υπάρχει ήδη ως αποθηκευμένη μέθοδος πληρωμής.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Ελέγξτε τα στοιχεία σας και δοκιμάστε ξανά.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Ελέγξτε τα στοιχεία σας και δοκιμάστε ξανά.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Σφάλμα δικτύου. Δοκιμάστε ξανά.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Η επαλήθευση της πιστωτικής κάρτας απέτυχε. Ελέγξτε τα στοιχεία σας και δοκιμάστε ξανά.\",\n  \"paypalButtonMustBeUsed\" : \"Χρησιμοποιήστε το κουμπί PayPal για να συνεχίσετε με την πληρωμή.\",\n  \"paypalAccountTokenizationFailedError\" : \"Προέκυψε κάποιο πρόβλημα με την προσθήκη του λογαριασμού PayPal. Δοκιμάστε ξανά.\",\n  \"paypalFlowFailedError\" : \"Προέκυψε κάποιο πρόβλημα με τη σύνδεση στην PayPal. Δοκιμάστε ξανά.\",\n  \"paypalTokenizationRequestActiveError\" : \"Η εξουσιοδότηση πληρωμής μέσω PayPal βρίσκεται ήδη σε εξέλιξη.\",\n  \"venmoCanceledError\" : \"Προέκυψε πρόβλημα. Βεβαιωθείτε ότι έχετε την πιο πρόσφατη έκδοση της εφαρμογής Venmo εγκατεστημένη στη συσκευή σας και ότι το πρόγραμμα περιήγησής σας υποστηρίζει τη μετάβαση στη Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Η διαγραφή της μεθόδου πληρωμής είναι αδύνατη, δοκιμάστε ξανά.\",\n  \"venmoAppFailedError\" : \"Η εφαρμογή Venmo δεν βρέθηκε στη συσκευή σας.\",\n  \"unsupportedCardTypeError\" : \"Αυτός ο τύπος κάρτας δεν υποστηρίζεται. Δοκιμάστε μια άλλη κάρτα.\",\n  \"applePayTokenizationError\" : \"Προέκυψε σφάλμα δικτύου κατά την επεξεργασία της πληρωμής μέσω Apple Pay. Δοκιμάστε ξανά.\",\n  \"applePayActiveCardError\" : \"Προσθέστε μια υποστηριζόμενη κάρτα στο ψηφιακό πορτοφόλι Apple Pay.\",\n  \"cardholderNameLabel\" : \"Όνομα κατόχου κάρτας\",\n  \"cardNumberLabel\" : \"Αριθμός κάρτας\",\n  \"cvvLabel\" : \"Κωδικός ασφαλείας (CVV)\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 ψηφία)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 ψηφία)\",\n  \"cardholderNamePlaceholder\" : \"Όνομα κατόχου κάρτας\",\n  \"expirationDateLabel\" : \"Ημερομηνία λήξης\",\n  \"expirationDateLabelSubheading\" : \"(ΜΜ/ΕΕ)\",\n  \"expirationDatePlaceholder\" : \"ΜΜ/ΕΕ\",\n  \"postalCodeLabel\" : \"Ταχυδρομικός κώδικας\",\n  \"saveCardLabel\" : \"Αποθήκευση κάρτας\",\n  \"payWithCard\" : \"Πληρωμή με κάρτα\",\n  \"endingIn\" : \"Που λήγει σε {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Κάρτα\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],224:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Paying with {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choose another way to pay\",\n  \"chooseAWayToPay\" : \"Choose a way to pay\",\n  \"otherWaysToPay\" : \"Other ways to pay\",\n  \"edit\" : \"Edit\",\n  \"doneEditing\" : \"Done\",\n  \"editPaymentMethods\" : \"Edit payment methods\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Delete {{secondaryIdentifier}} card ending in {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Delete PayPal account {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Are you sure you want to delete Venmo account with username {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Are you sure you want to delete this payment method?\",\n  \"deleteCancelButton\" : \"Cancel\",\n  \"deleteConfirmationButton\" : \"Delete\",\n  \"fieldEmptyForCvv\" : \"Please enter a CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Please enter an expiry date.\",\n  \"fieldEmptyForCardholderName\" : \"Please enter a cardholder name.\",\n  \"fieldTooLongForCardholderName\" : \"Cardholder name must be less than 256 characters.\",\n  \"fieldEmptyForNumber\" : \"Please enter a number.\",\n  \"fieldEmptyForPostalCode\" : \"Please enter a postcode.\",\n  \"fieldInvalidForCardholderName\" : \"This cardholder name isn't valid.\",\n  \"fieldInvalidForCvv\" : \"This CVV isn't valid.\",\n  \"fieldInvalidForExpirationDate\" : \"This expiry date isn't valid.\",\n  \"fieldInvalidForNumber\" : \"This card number isn't valid.\",\n  \"fieldInvalidForPostalCode\" : \"This postcode isn't valid.\",\n  \"genericError\" : \"We're sorry, something seems to have gone wrong.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"This card already exists as a saved payment method.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Please check your entries and try again.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Please check your entries and try again.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Network error. Please try again.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Card verification failed. Please check your entries and try again.\",\n  \"paypalButtonMustBeUsed\" : \"Use the PayPal button to continue with your payment.\",\n  \"paypalAccountTokenizationFailedError\" : \"Something went wrong adding the PayPal account. Please try again.\",\n  \"paypalFlowFailedError\" : \"Something went wrong connecting to PayPal. Please try again.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal payment authorisation is already in progress.\",\n  \"venmoCanceledError\" : \"We're sorry, something seems to have gone wrong. Please make sure you have the most recent version of the Venmo app installed on your device and that your browser supports switching to Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Unable to delete payment method. Please try again.\",\n  \"venmoAppFailedError\" : \"The Venmo app couldn't be found on your device.\",\n  \"unsupportedCardTypeError\" : \"This card type isn't supported. Please try another card.\",\n  \"applePayTokenizationError\" : \"A network error occurred while processing the Apple Pay payment. Please try again.\",\n  \"applePayActiveCardError\" : \"Add a supported card to your Apple Pay wallet.\",\n  \"cardholderNameLabel\" : \"Cardholder name\",\n  \"cardNumberLabel\" : \"Card number\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 digits)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 digits)\",\n  \"cardholderNamePlaceholder\" : \"Cardholder name\",\n  \"expirationDateLabel\" : \"Expiry date\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"Postcode\",\n  \"saveCardLabel\" : \"Save card\",\n  \"payWithCard\" : \"Pay with card\",\n  \"endingIn\" : \"Ending in {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Card\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],225:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Paying with {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choose another way to pay\",\n  \"chooseAWayToPay\" : \"Choose a way to pay\",\n  \"otherWaysToPay\" : \"Other ways to pay\",\n  \"edit\" : \"Edit\",\n  \"doneEditing\" : \"Done\",\n  \"editPaymentMethods\" : \"Edit funding sources\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Delete {{secondaryIdentifier}} card ending in {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Delete PayPal account {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Are you sure you want to delete Venmo account with username {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Are you sure you want to delete this funding source?\",\n  \"deleteCancelButton\" : \"Cancel\",\n  \"deleteConfirmationButton\" : \"Delete\",\n  \"fieldEmptyForCvv\" : \"Please enter a security code.\",\n  \"fieldEmptyForExpirationDate\" : \"Please enter an expiry date.\",\n  \"fieldEmptyForCardholderName\" : \"Please enter a cardholder name.\",\n  \"fieldTooLongForCardholderName\" : \"Cardholder name must be less than 256 characters.\",\n  \"fieldEmptyForNumber\" : \"Please enter a number.\",\n  \"fieldEmptyForPostalCode\" : \"Please enter a postcode.\",\n  \"fieldInvalidForCardholderName\" : \"This cardholder name isn't valid.\",\n  \"fieldInvalidForCvv\" : \"This security code isn't valid.\",\n  \"fieldInvalidForExpirationDate\" : \"This expiry date isn't valid.\",\n  \"fieldInvalidForNumber\" : \"This card number isn't valid.\",\n  \"fieldInvalidForPostalCode\" : \"This postcode isn't valid.\",\n  \"genericError\" : \"Something went wrong on our end.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"This credit card already exists as a saved funding source.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Please check your information and try again.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Please check your information and try again.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Network error. Please try again.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Credit card verification failed. Please check your information and try again.\",\n  \"paypalButtonMustBeUsed\" : \"Use the PayPal button to continue with your payment.\",\n  \"paypalAccountTokenizationFailedError\" : \"Something went wrong adding the PayPal account. Please try again.\",\n  \"paypalFlowFailedError\" : \"Something went wrong connecting to PayPal. Please try again.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal payment authorisation is already in progress.\",\n  \"venmoCanceledError\" : \"Something went wrong. Ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"We were unable to delete the funding source. Please try again.\",\n  \"venmoAppFailedError\" : \"The Venmo app couldn't be found on your device.\",\n  \"unsupportedCardTypeError\" : \"This card type isn't supported. Please try another card.\",\n  \"applePayTokenizationError\" : \"A network error occurred while processing the Apple Pay payment. Please try again.\",\n  \"applePayActiveCardError\" : \"Add a supported card to your Apple Pay wallet.\",\n  \"cardholderNameLabel\" : \"Cardholder name\",\n  \"cardNumberLabel\" : \"Card number\",\n  \"cvvLabel\" : \"Security code\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 digits)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 digits)\",\n  \"cardholderNamePlaceholder\" : \"Cardholder name\",\n  \"expirationDateLabel\" : \"Expiry date\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"Postcode\",\n  \"saveCardLabel\" : \"Save card\",\n  \"payWithCard\" : \"Pay with card\",\n  \"endingIn\" : \"Ending in {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Card\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],226:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Paying with {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choose another way to pay\",\n  \"chooseAWayToPay\" : \"Choose a way to pay\",\n  \"otherWaysToPay\" : \"Other ways to pay\",\n  \"edit\" : \"Edit\",\n  \"doneEditing\" : \"Done\",\n  \"editPaymentMethods\" : \"Edit payment methods\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Delete {{secondaryIdentifier}} card ending in {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Delete PayPal account {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Are you sure you want to delete Venmo account with username {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Are you sure you want to delete this payment method?\",\n  \"deleteCancelButton\" : \"Cancel\",\n  \"deleteConfirmationButton\" : \"Delete\",\n  \"fieldEmptyForCvv\" : \"Please enter a CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Please enter an expiry date.\",\n  \"fieldEmptyForCardholderName\" : \"Please enter a cardholder name.\",\n  \"fieldTooLongForCardholderName\" : \"Cardholder name must be less than 256 characters.\",\n  \"fieldEmptyForNumber\" : \"Please enter a number.\",\n  \"fieldEmptyForPostalCode\" : \"Please enter a PIN code.\",\n  \"fieldInvalidForCardholderName\" : \"This cardholder name isn't valid.\",\n  \"fieldInvalidForCvv\" : \"This CVV isn't valid.\",\n  \"fieldInvalidForExpirationDate\" : \"This expiry date isn't valid.\",\n  \"fieldInvalidForNumber\" : \"This card number isn't valid.\",\n  \"fieldInvalidForPostalCode\" : \"This PIN code isn't valid.\",\n  \"genericError\" : \"We're sorry, something seems to have gone wrong.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"This card already exists as a saved payment method.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Please check your information and try again.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Please check your information and try again.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Network error. Please try again.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Card verification failed. Please check your information and try again.\",\n  \"paypalButtonMustBeUsed\" : \"Use the PayPal button to continue with your payment.\",\n  \"paypalAccountTokenizationFailedError\" : \"Something went wrong adding the PayPal account. Please try again.\",\n  \"paypalFlowFailedError\" : \"Something went wrong connecting to PayPal. Please try again.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal payment authorisation is already in progress.\",\n  \"venmoCanceledError\" : \"We're sorry, something seems to have gone wrong. Ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Unable to delete payment method. Please try again.\",\n  \"venmoAppFailedError\" : \"The Venmo app couldn't be found on your device.\",\n  \"unsupportedCardTypeError\" : \"This card type isn't supported. Please try another card.\",\n  \"applePayTokenizationError\" : \"A network error occurred while processing the Apple Pay payment. Please try again.\",\n  \"applePayActiveCardError\" : \"Add a supported card to your Apple Pay digital wallet.\",\n  \"cardholderNameLabel\" : \"Cardholder name\",\n  \"cardNumberLabel\" : \"Card number\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 digits)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 digits)\",\n  \"cardholderNamePlaceholder\" : \"Cardholder name\",\n  \"expirationDateLabel\" : \"Expiry date\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"PIN code\",\n  \"saveCardLabel\" : \"Save card\",\n  \"payWithCard\" : \"Pay with card\",\n  \"endingIn\" : \"Ending in {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Card\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],227:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  payingWith: 'Paying with {{paymentSource}}',\n  chooseAnotherWayToPay: 'Choose another way to pay',\n  chooseAWayToPay: 'Choose a way to pay',\n  otherWaysToPay: 'Other ways to pay',\n  edit: 'Edit',\n  doneEditing: 'Done',\n  editPaymentMethods: 'Edit payment methods',\n  CreditCardDeleteConfirmationMessage: 'Delete {{secondaryIdentifier}} card ending in {{identifier}}?',\n  PayPalAccountDeleteConfirmationMessage: 'Delete PayPal account {{identifier}}?',\n  VenmoAccountDeleteConfirmationMessage: 'Are you sure you want to delete Venmo account with username {{identifier}}?',\n  genericDeleteConfirmationMessage: 'Are you sure you want to delete this payment method?',\n  deleteCancelButton: 'Cancel',\n  deleteConfirmationButton: 'Delete',\n  // Errors\n  fieldEmptyForCvv: 'Please fill out a CVV.',\n  fieldEmptyForExpirationDate: 'Please fill out an expiration date.',\n  fieldEmptyForCardholderName: 'Please fill out a cardholder name.',\n  fieldEmptyForNumber: 'Please fill out a card number.',\n  fieldEmptyForPostalCode: 'Please fill out a postal code.',\n  fieldInvalidForCardholderName: 'This cardholder name is not valid.',\n  fieldInvalidForCvv: 'This security code is not valid.',\n  fieldInvalidForExpirationDate: 'This expiration date is not valid.',\n  fieldInvalidForNumber: 'This card number is not valid.',\n  fieldInvalidForPostalCode: 'This postal code is not valid.',\n  fieldTooLongForCardholderName: 'Cardholder name must be less than 256 characters.',\n  genericError: 'Something went wrong on our end.',\n  hostedFieldsTokenizationFailOnDuplicateError: 'This credit card already exists as a saved payment method.',\n  hostedFieldsFailedTokenizationError: 'Please check your information and try again.',\n  hostedFieldsTokenizationCvvVerificationFailedError: 'Credit card verification failed. Please check your information and try again.',\n  hostedFieldsTokenizationNetworkErrorError: 'Network error. Please try again.',\n  hostedFieldsFieldsInvalidError: 'Please check your information and try again.',\n  paypalButtonMustBeUsed: 'Use the PayPal button to continue with your payment.',\n  paypalAccountTokenizationFailedError: 'Something went wrong adding the PayPal account. Please try again.',\n  paypalFlowFailedError: 'Something went wrong connecting to PayPal. Please try again.',\n  paypalTokenizationRequestActiveError: 'PayPal payment authorization is already in progress.',\n  applePayTokenizationError: 'A network error occurred while processing the Apple Pay payment. Please try again.',\n  applePayActiveCardError: 'Add a supported card to your Apple Pay wallet.',\n  vaultManagerPaymentMethodDeletionError: 'Unable to delete payment method, try again.',\n  venmoCanceledError: 'Something went wrong. Ensure you have the most recent version of the Venmo app installed on your device and your browser supports switching to Venmo.',\n  venmoAppFailedError: 'The Venmo app could not be found on your device.',\n  unsupportedCardTypeError: 'This card type is not supported. Please try another card.',\n  // Card form\n  cardholderNameLabel: 'Cardholder Name',\n  cardNumberLabel: 'Card Number',\n  cvvLabel: 'CVV',\n  cvvThreeDigitLabelSubheading: '(3 digits)',\n  cvvFourDigitLabelSubheading: '(4 digits)',\n  expirationDateLabel: 'Expiration Date',\n  expirationDateLabelSubheading: '(MM/YY)',\n  cardholderNamePlaceholder: 'Cardholder Name',\n  expirationDatePlaceholder: 'MM/YY',\n  postalCodeLabel: 'Postal Code',\n  saveCardLabel: 'Save card',\n  payWithCard: 'Pay with card',\n  // Payment Method descriptions\n  endingIn: 'Ending in {{lastFourCardDigits}}',\n  Card: 'Card',\n  PayPal: 'PayPal',\n  'PayPal Credit': 'PayPal Credit',\n  'Apple Pay': 'Apple Pay',\n  'Google Pay': 'Google Pay',\n  'Venmo': 'Venmo',\n  'American Express': 'American Express',\n  Discover: 'Discover',\n  'Diners Club': 'Diners Club',\n  Elo: 'Elo',\n  Hiper: 'Hiper',\n  Hipercard: 'Hipercard',\n  MasterCard: 'Mastercard',\n  Visa: 'Visa',\n  JCB: 'JCB',\n  Maestro: 'Maestro',\n  UnionPay: 'UnionPay'\n};\n\n},{}],228:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Pagar con {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Seleccionar otra forma de pago\",\n  \"chooseAWayToPay\" : \"Seleccionar forma de pago\",\n  \"otherWaysToPay\" : \"Otras formas de pago\",\n  \"edit\" : \"Editar\",\n  \"doneEditing\" : \"Hecho\",\n  \"editPaymentMethods\" : \"Editar formas de pago\",\n  \"CreditCardDeleteConfirmationMessage\" : \"¿Eliminar la tarjeta {{secondaryIdentifier}} terminada en {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"¿Eliminar la cuenta PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"¿Seguro que deseas eliminar la cuenta de Venmo con el nombre de usuario {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"¿Seguro que deseas eliminar esta forma de pago?\",\n  \"deleteCancelButton\" : \"Cancelar\",\n  \"deleteConfirmationButton\" : \"Eliminar\",\n  \"fieldEmptyForCvv\" : \"Introduce el CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Introduce una fecha de vencimiento.\",\n  \"fieldEmptyForCardholderName\" : \"Introduce el nombre del titular de la tarjeta.\",\n  \"fieldTooLongForCardholderName\" : \"El nombre del titular de la tarjeta debe tener menos de 256 caracteres.\",\n  \"fieldEmptyForNumber\" : \"Introduce un número.\",\n  \"fieldEmptyForPostalCode\" : \"Introduce un código postal.\",\n  \"fieldInvalidForCardholderName\" : \"El nombre del titular de la tarjeta no es válido.\",\n  \"fieldInvalidForCvv\" : \"El código de seguridad no es válido.\",\n  \"fieldInvalidForExpirationDate\" : \"La fecha de vencimiento no es válida.\",\n  \"fieldInvalidForNumber\" : \"El número de tarjeta no es válido.\",\n  \"fieldInvalidForPostalCode\" : \"El código postal no es válido.\",\n  \"genericError\" : \"Ha habido un problema.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Esta tarjeta de crédito ya existe como forma de pago guardada.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Comprueba la información e inténtalo de nuevo.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Comprueba la información e inténtalo de nuevo.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Error de red. Inténtalo de nuevo.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Error al verificar la tarjeta de crédito. Comprueba la información e inténtalo de nuevo.\",\n  \"paypalButtonMustBeUsed\" : \"Utiliza el botón de PayPal para continuar con el pago.\",\n  \"paypalAccountTokenizationFailedError\" : \"Se ha producido un error al añadir la cuenta PayPal. Inténtalo de nuevo.\",\n  \"paypalFlowFailedError\" : \"Se ha producido un error al conectar con PayPal. Inténtalo de nuevo.\",\n  \"paypalTokenizationRequestActiveError\" : \"La autorización del pago de PayPal ya está en curso.\",\n  \"venmoCanceledError\" : \"Ha habido un error. Asegúrate de tener la versión más reciente de la aplicación de Venmo instalada en el dispositivo y de que el navegador admita el cambio a Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"No se puede eliminar la forma de pago. Inténtalo de nuevo.\",\n  \"venmoAppFailedError\" : \"No se ha podido encontrar la aplicación de Venmo en tu dispositivo.\",\n  \"unsupportedCardTypeError\" : \"No se admite este tipo de tarjeta. Prueba con otra tarjeta.\",\n  \"applePayTokenizationError\" : \"Se ha producido un error de red al procesar el pago de Apple Pay. Inténtalo de nuevo.\",\n  \"applePayActiveCardError\" : \"Añade una tarjeta compatible a tu cartera de Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nombre del titular de la tarjeta\",\n  \"cardNumberLabel\" : \"Número de tarjeta\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 dígitos)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 dígitos)\",\n  \"cardholderNamePlaceholder\" : \"Nombre del titular de la tarjeta\",\n  \"expirationDateLabel\" : \"Fecha de vencimiento\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Código postal\",\n  \"saveCardLabel\" : \"Guardar tarjeta\",\n  \"payWithCard\" : \"Pagar con tarjeta\",\n  \"endingIn\" : \"Terminada en {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Tarjeta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],229:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Pagar con {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Elija otra forma de pago\",\n  \"chooseAWayToPay\" : \"Seleccione una forma de pago\",\n  \"otherWaysToPay\" : \"Otras formas de pago\",\n  \"edit\" : \"Editar\",\n  \"doneEditing\" : \"Listo\",\n  \"editPaymentMethods\" : \"Editar métodos de pago\",\n  \"CreditCardDeleteConfirmationMessage\" : \"¿Eliminar tarjeta {{secondaryIdentifier}} con terminación {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"¿Desea eliminar la cuenta de PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"¿Seguro que desea eliminar la cuenta de Venmo con el nombre de usuario {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"¿Seguro que desea eliminar esta forma de pago?\",\n  \"deleteCancelButton\" : \"Cancelar\",\n  \"deleteConfirmationButton\" : \"Eliminar\",\n  \"fieldEmptyForCvv\" : \"Ingrese un CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Ingrese una fecha de vencimiento.\",\n  \"fieldEmptyForCardholderName\" : \"Ingrese un nombre de titular de tarjeta.\",\n  \"fieldTooLongForCardholderName\" : \"El nombre del titular de la tarjeta debe tener menos de 256 caracteres.\",\n  \"fieldEmptyForNumber\" : \"Ingrese un número.\",\n  \"fieldEmptyForPostalCode\" : \"Ingrese un código postal.\",\n  \"fieldInvalidForCardholderName\" : \"El nombre del titular de la tarjeta no es válido.\",\n  \"fieldInvalidForCvv\" : \"Este código de seguridad no es válido.\",\n  \"fieldInvalidForExpirationDate\" : \"Esta fecha de vencimiento no es válida.\",\n  \"fieldInvalidForNumber\" : \"Este número de tarjeta no es válido.\",\n  \"fieldInvalidForPostalCode\" : \"Este código postal no es válido.\",\n  \"genericError\" : \"Se ha producido un error.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Esta tarjeta de crédito ya existe como forma de pago guardada.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Revise la información e inténtelo de nuevo.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Revise la información e inténtelo de nuevo.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Error de red. Inténtelo de nuevo.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"La verificación de la tarjeta de crédito falló. Revise la información e inténtelo de nuevo.\",\n  \"paypalButtonMustBeUsed\" : \"Utilice el botón de PayPal para continuar con su pago.\",\n  \"paypalAccountTokenizationFailedError\" : \"Se ha producido un error al agregar la cuenta de PayPal. Inténtelo de nuevo.\",\n  \"paypalFlowFailedError\" : \"Se ha producido un error al conectar con PayPal. Inténtelo de nuevo.\",\n  \"paypalTokenizationRequestActiveError\" : \"La autorización de pago de PayPal ya está en curso.\",\n  \"venmoCanceledError\" : \"Se ha producido un error. Asegúrese de que tiene la versión más reciente de la aplicación de Venmo instalada en su dispositivo y que su navegador admita el sitio web Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"No se pudo eliminar la forma de pago, inténtelo de nuevo.\",\n  \"venmoAppFailedError\" : \"No se pudo encontrar la aplicación de Venmo en su dispositivo.\",\n  \"unsupportedCardTypeError\" : \"Este tipo de tarjeta no es compatible. Inténtelo con otra tarjeta.\",\n  \"applePayTokenizationError\" : \"Se ha producido un error de red al procesar el pago de Apple Pay. Inténtelo de nuevo.\",\n  \"applePayActiveCardError\" : \"Agregue una tarjeta compatible a su cartera de Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nombre del titular de la tarjeta\",\n  \"cardNumberLabel\" : \"Número de tarjeta\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 dígitos)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 dígitos)\",\n  \"cardholderNamePlaceholder\" : \"Nombre del titular de la tarjeta\",\n  \"expirationDateLabel\" : \"Fecha de vencimiento\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Código postal\",\n  \"saveCardLabel\" : \"Guardar tarjeta\",\n  \"payWithCard\" : \"Pagar con tarjeta\",\n  \"endingIn\" : \"Con terminación {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Tarjeta\",\n  \"PayPal\" : \"Paypal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],230:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Maksuväline: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Valitse toinen maksutapa\",\n  \"chooseAWayToPay\" : \"Valitse maksutapa\",\n  \"otherWaysToPay\" : \"Muita maksutapoja\",\n  \"edit\" : \"Muokkaa\",\n  \"doneEditing\" : \"Valmis\",\n  \"editPaymentMethods\" : \"Muokkaa maksutapoja\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Haluatko poistaa {{secondaryIdentifier}}} -kortin, joka päättyy {{identifier}}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Haluatko poistaa PayPal-tilin {{identifier}}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Haluatko varmasti poistaa Venmo-tilin, jonka käyttäjätunnus on {{identifier}}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Haluatko varmasti poistaa tämän maksutavan?\",\n  \"deleteCancelButton\" : \"Peruuta\",\n  \"deleteConfirmationButton\" : \"Poista\",\n  \"fieldEmptyForCvv\" : \"Anna turvakoodi.\",\n  \"fieldEmptyForExpirationDate\" : \"Anna voimassaolon päättymispäivämäärä.\",\n  \"fieldEmptyForCardholderName\" : \"Anna kortinhaltijan nimi.\",\n  \"fieldTooLongForCardholderName\" : \"Kortinhaltijan nimen on oltava alle 256 merkkiä.\",\n  \"fieldEmptyForNumber\" : \"Anna numero.\",\n  \"fieldEmptyForPostalCode\" : \"Anna postinumero.\",\n  \"fieldInvalidForCardholderName\" : \"Kortinhaltijan nimi ei ole kelvollinen.\",\n  \"fieldInvalidForCvv\" : \"Turvakoodi ei ole kelvollinen.\",\n  \"fieldInvalidForExpirationDate\" : \"Päättymispäivämäärä ei ole kelvollinen.\",\n  \"fieldInvalidForNumber\" : \"Kortin numero ei ole kelvollinen.\",\n  \"fieldInvalidForPostalCode\" : \"Postinumero ei ole kelvollinen.\",\n  \"genericError\" : \"Jokin meni pieleen tässä päässä.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Tämä luottokortti on jo tallennettu maksutavaksi.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Tarkista tiedot ja yritä uudelleen.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Tarkista tiedot ja yritä uudelleen.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Verkkovirhe. Yritä uudelleen.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Luottokortin varmennus epäonnistui. Tarkista tiedot ja yritä uudelleen.\",\n  \"paypalButtonMustBeUsed\" : \"Jatka maksua PayPal-painikkeen avulla.\",\n  \"paypalAccountTokenizationFailedError\" : \"Jotain meni pieleen PayPal-tiliä lisätessä. Yritä uudelleen.\",\n  \"paypalFlowFailedError\" : \"Jotain meni pieleen muodostettaessa yhteyttä PayPaliin. Yritä uudelleen.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal-maksun valtuutus on jo meneillään.\",\n  \"venmoCanceledError\" : \"Jokin meni pieleen. Varmista, että laitteeseesi on asennettu Venmo-sovelluksen viimeisin versio, ja että selain tukee vaihtamista Venmoon.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Maksutavan poistaminen ei onnistu, yritä uudelleen.\",\n  \"venmoAppFailedError\" : \"Venmo-sovellusta ei löytynyt laitteesta.\",\n  \"unsupportedCardTypeError\" : \"Tätä korttityyppiä ei tueta. Kokeile toista korttia.\",\n  \"applePayTokenizationError\" : \"Tapahtui verkkovirhe Apple Pay -maksun käsittelyssä. Yritä uudelleen.\",\n  \"applePayActiveCardError\" : \"Lisää tuettu kortti Apple Pay -lompakkoon.\",\n  \"cardholderNameLabel\" : \"Kortinhaltijan nimi\",\n  \"cardNumberLabel\" : \"Kortin numero\",\n  \"cvvLabel\" : \"Kortin turvakoodi\",\n  \"cvvThreeDigitLabelSubheading\" : \"(kolme numeroa)\",\n  \"cvvFourDigitLabelSubheading\" : \"(neljä numeroa)\",\n  \"cardholderNamePlaceholder\" : \"Kortinhaltijan nimi\",\n  \"expirationDateLabel\" : \"Päättymispäivämäärä\",\n  \"expirationDateLabelSubheading\" : \"(KK/VV)\",\n  \"expirationDatePlaceholder\" : \"KK/VV\",\n  \"postalCodeLabel\" : \"Postinumero\",\n  \"saveCardLabel\" : \"Tallenna kortti\",\n  \"payWithCard\" : \"Maksa kortilla\",\n  \"endingIn\" : \"Päättyy {{lastFourCardDigits}}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kortti\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],231:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Payer avec {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choisir un autre mode de paiement\",\n  \"chooseAWayToPay\" : \"Choisir un mode de paiement\",\n  \"otherWaysToPay\" : \"Autres modes de paiement\",\n  \"edit\" : \"Modifier\",\n  \"doneEditing\" : \"Terminé\",\n  \"editPaymentMethods\" : \"Modifier les modes de paiement\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Supprimer la carte {{secondaryIdentifier}} se terminant par {{identifier}} ?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Supprimer le compte PayPal {{identifier}} ?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer le compte Venmo dont le nom d'utilisateur est {{identifier}} ?\",\n  \"genericDeleteConfirmationMessage\" : \"Voulez-vous vraiment supprimer ce mode paiement ?\",\n  \"deleteCancelButton\" : \"Annuler\",\n  \"deleteConfirmationButton\" : \"Supprimer\",\n  \"fieldEmptyForCvv\" : \"Saisissez un CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Saisissez une date d'expiration.\",\n  \"fieldEmptyForCardholderName\" : \"Saisissez le nom du titulaire de la carte.\",\n  \"fieldTooLongForCardholderName\" : \"Le nom du titulaire de la carte doit contenir moins de 256 caractères.\",\n  \"fieldEmptyForNumber\" : \"Saisissez un numéro.\",\n  \"fieldEmptyForPostalCode\" : \"Saisissez un code postal.\",\n  \"fieldInvalidForCardholderName\" : \"Le nom de ce titulaire de la carte n'est pas valide.\",\n  \"fieldInvalidForCvv\" : \"Ce cryptogramme visuel n'est pas valide.\",\n  \"fieldInvalidForExpirationDate\" : \"Cette date d'expiration n'est pas valide.\",\n  \"fieldInvalidForNumber\" : \"Ce numéro de carte n'est pas valide.\",\n  \"fieldInvalidForPostalCode\" : \"Ce code postal n'est pas valide.\",\n  \"genericError\" : \"Une erreur s'est produite de notre côté.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Cette carte de crédit est déjà enregistrée en tant que mode de paiement.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Veuillez vérifier vos informations, puis réessayer.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Veuillez vérifier vos informations, puis réessayer.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erreur de réseau. Réessayez.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Échec de vérification de la carte de crédit. Veuillez vérifier vos informations, puis réessayer.\",\n  \"paypalButtonMustBeUsed\" : \"Utilisez le bouton PayPal pour poursuivre votre paiement.\",\n  \"paypalAccountTokenizationFailedError\" : \"Une erreur s'est produite lors de l'ajout du compte PayPal. Veuillez réessayer.\",\n  \"paypalFlowFailedError\" : \"Une erreur s'est produite lors de la connexion à PayPal. Veuillez réessayer.\",\n  \"paypalTokenizationRequestActiveError\" : \"L'autorisation de paiement PayPal est déjà en cours.\",\n  \"venmoCanceledError\" : \"Une erreur s'est produite. Assurez-vous que la version la plus récente de l'application Venmo est installée sur votre appareil et que votre navigateur prend en charge la redirection vers Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Impossible de supprimer le mode de paiement. Réessayez.\",\n  \"venmoAppFailedError\" : \"L'application Venmo n'est pas présente sur votre appareil.\",\n  \"unsupportedCardTypeError\" : \"Ce type de carte n'est pas pris en charge. Veuillez essayer une autre carte.\",\n  \"applePayTokenizationError\" : \"Une erreur de réseau s'est produite lors du traitement du paiement Apple Pay. Veuillez réessayer.\",\n  \"applePayActiveCardError\" : \"Ajoutez une carte prise en charge à votre portefeuille Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nom du titulaire de la carte\",\n  \"cardNumberLabel\" : \"Numéro de carte\",\n  \"cvvLabel\" : \"Cryptogramme visuel\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 chiffres)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 chiffres)\",\n  \"cardholderNamePlaceholder\" : \"Nom du titulaire de la carte\",\n  \"expirationDateLabel\" : \"Date d'expiration\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Code postal\",\n  \"saveCardLabel\" : \"Enregistrer la carte\",\n  \"payWithCard\" : \"Payer par carte\",\n  \"endingIn\" : \"Se terminant par {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Carte\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],232:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Payer avec : {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choisir un autre mode de paiement\",\n  \"chooseAWayToPay\" : \"Choisir un mode de paiement\",\n  \"otherWaysToPay\" : \"Autres modes de paiement\",\n  \"edit\" : \"Modifier\",\n  \"doneEditing\" : \"Terminé\",\n  \"editPaymentMethods\" : \"Modifier les modes de paiement\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Supprimer la carte {{secondaryIdentifier}} se terminant par {{identifier}} ?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Supprimer le compte PayPal {{identifier}} ?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer le compte Venmo associé au nom d'utilisateur {{identifier}} ?\",\n  \"genericDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer ce mode de paiement ?\",\n  \"deleteCancelButton\" : \"Annuler\",\n  \"deleteConfirmationButton\" : \"Supprimer\",\n  \"fieldEmptyForCvv\" : \"Renseignez un cryptogramme visuel.\",\n  \"fieldEmptyForExpirationDate\" : \"Renseignez une date d'expiration.\",\n  \"fieldEmptyForCardholderName\" : \"Renseignez le nom du titulaire de la carte.\",\n  \"fieldTooLongForCardholderName\" : \"Le nom du titulaire de la carte doit comporter moins de 256 caractères.\",\n  \"fieldEmptyForNumber\" : \"Renseignez un numéro.\",\n  \"fieldEmptyForPostalCode\" : \"Renseignez un code postal.\",\n  \"fieldInvalidForCardholderName\" : \"Le nom de ce titulaire de la carte est incorrect.\",\n  \"fieldInvalidForCvv\" : \"Ce cryptogramme visuel est incorrect.\",\n  \"fieldInvalidForExpirationDate\" : \"Cette date d'expiration est incorrecte.\",\n  \"fieldInvalidForNumber\" : \"Ce numéro de carte est incorrect.\",\n  \"fieldInvalidForPostalCode\" : \"Ce code postal est incorrect.\",\n  \"genericError\" : \"Une erreur est survenue.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Cette carte bancaire existe déjà en tant que mode de paiement enregistré.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Vérifiez vos informations et réessayez.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Vérifiez vos informations et réessayez.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erreur réseau. Réessayez.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Échec de la vérification de carte bancaire. Vérifiez vos informations et réessayez.\",\n  \"paypalButtonMustBeUsed\" : \"Utilisez le bouton PayPal pour poursuivre le paiement.\",\n  \"paypalAccountTokenizationFailedError\" : \"Une erreur est survenue lors de l'ajout du compte PayPal. Réessayez.\",\n  \"paypalFlowFailedError\" : \"Une erreur est survenue lors de la connexion à PayPal. Réessayez.\",\n  \"paypalTokenizationRequestActiveError\" : \"L'autorisation de paiement PayPal est déjà en cours.\",\n  \"venmoCanceledError\" : \"Une erreur est survenue. Vérifiez que la dernière version de l'application Venmo est installée sur votre appareil et que votre navigateur prend en charge la redirection vers Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Impossible de supprimer le mode de paiement, réessayez.\",\n  \"venmoAppFailedError\" : \"Nous n'avons pas trouvé l'application Venmo sur votre appareil.\",\n  \"unsupportedCardTypeError\" : \"Ce type de carte n'est pas pris en charge. Essayez une autre carte.\",\n  \"applePayTokenizationError\" : \"Une erreur réseau est survenue lors du traitement du paiement Apple Pay. Réessayez.\",\n  \"applePayActiveCardError\" : \"Enregistrez une carte prise en charge sur votre portefeuille Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nom du titulaire de la carte\",\n  \"cardNumberLabel\" : \"Numéro de carte\",\n  \"cvvLabel\" : \"Crypto.\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 chiffres)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 chiffres)\",\n  \"cardholderNamePlaceholder\" : \"Nom du titulaire de la carte\",\n  \"expirationDateLabel\" : \"Date d'expiration\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Code postal\",\n  \"saveCardLabel\" : \"Enregistrer la carte\",\n  \"payWithCard\" : \"Payer par carte\",\n  \"endingIn\" : \"Se terminant par {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Carte\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],233:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Payer avec {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Choisir un autre mode de paiement\",\n  \"chooseAWayToPay\" : \"Choisir un mode de paiement\",\n  \"otherWaysToPay\" : \"Autres modes de paiement\",\n  \"edit\" : \"Modifier\",\n  \"doneEditing\" : \"Terminé\",\n  \"editPaymentMethods\" : \"Modifier les modes de paiement\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Supprimer la carte {{secondaryIdentifier}}} se terminant par {{identifier}}} ?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Supprimer le compte PayPal {{identifier}}} ?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer le compte Venmo associé au nom d'utilisateur {{identifier}}} ?\",\n  \"genericDeleteConfirmationMessage\" : \"Souhaitez-vous vraiment supprimer ce mode de paiement ?\",\n  \"deleteCancelButton\" : \"Annuler\",\n  \"deleteConfirmationButton\" : \"Supprimer\",\n  \"fieldEmptyForCvv\" : \"Renseignez un cryptogramme visuel.\",\n  \"fieldEmptyForExpirationDate\" : \"Renseignez une date d'expiration.\",\n  \"fieldEmptyForCardholderName\" : \"Renseignez le nom du titulaire de la carte.\",\n  \"fieldTooLongForCardholderName\" : \"Le nom du titulaire de la carte doit comporter moins de 256 caractères.\",\n  \"fieldEmptyForNumber\" : \"Renseignez un numéro.\",\n  \"fieldEmptyForPostalCode\" : \"Renseignez un code postal.\",\n  \"fieldInvalidForCardholderName\" : \"Le nom de ce titulaire de la carte est incorrect.\",\n  \"fieldInvalidForCvv\" : \"Ce cryptogramme visuel est incorrect.\",\n  \"fieldInvalidForExpirationDate\" : \"Cette date d'expiration est incorrecte.\",\n  \"fieldInvalidForNumber\" : \"Ce numéro de carte est incorrect.\",\n  \"fieldInvalidForPostalCode\" : \"Ce code postal est incorrect.\",\n  \"genericError\" : \"Une erreur est survenue.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Cette carte bancaire existe déjà en tant que mode de paiement enregistré.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Vérifiez vos informations et réessayez.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Vérifiez vos informations et réessayez.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erreur réseau. Réessayez.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Échec de la vérification de carte bancaire. Vérifiez vos informations et réessayez.\",\n  \"paypalButtonMustBeUsed\" : \"Utilisez le bouton PayPal pour poursuivre le paiement.\",\n  \"paypalAccountTokenizationFailedError\" : \"Une erreur est survenue lors de l'ajout du compte PayPal. Réessayez.\",\n  \"paypalFlowFailedError\" : \"Une erreur est survenue lors de la connexion à PayPal. Réessayez.\",\n  \"paypalTokenizationRequestActiveError\" : \"L'autorisation de paiement PayPal est déjà en cours.\",\n  \"venmoCanceledError\" : \"Une erreur est survenue. Vérifiez que la dernière version de l'application Venmo est installée sur votre appareil et que votre navigateur prend en charge la redirection vers Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Impossible de supprimer le mode de paiement, réessayez.\",\n  \"venmoAppFailedError\" : \"Nous n'avons pas trouvé l'application Venmo sur votre appareil.\",\n  \"unsupportedCardTypeError\" : \"Ce type de carte n'est pas pris en charge. Essayez une autre carte.\",\n  \"applePayTokenizationError\" : \"Une erreur réseau est survenue lors du traitement du paiement Apple Pay. Réessayez.\",\n  \"applePayActiveCardError\" : \"Enregistrez une carte prise en charge sur votre portefeuille Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nom du titulaire de la carte\",\n  \"cardNumberLabel\" : \"Numéro de carte\",\n  \"cvvLabel\" : \"Crypto.\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 chiffres)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 chiffres)\",\n  \"cardholderNamePlaceholder\" : \"Nom du titulaire de la carte\",\n  \"expirationDateLabel\" : \"Date d'expiration\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Code postal\",\n  \"saveCardLabel\" : \"Enregistrer la carte\",\n  \"payWithCard\" : \"Payer par carte\",\n  \"endingIn\" : \"Se termine le {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Carte\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],234:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"תשלום באמצעות {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"עליך לבחור שיטת תשלום אחרת\",\n  \"chooseAWayToPay\" : \"כיצד ברצונך לשלם?\",\n  \"otherWaysToPay\" : \"שיטות תשלום אחרות\",\n  \"edit\" : \"עריכה\",\n  \"doneEditing\" : \"בוצע\",\n  \"editPaymentMethods\" : \"עריכת שיטות תשלום\",\n  \"CreditCardDeleteConfirmationMessage\" : \"למחוק {{secondaryIdentifier}} הכרטיס המסתיים {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"למחוק PayPal החשבון {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"האם אתה בטוח שברצונך למחוק את חשבון Venmo הרשום תחת שם המשתמש {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"האם אתה בטוח שברצונך למחוק שיטת תשלום זו?\",\n  \"deleteCancelButton\" : \"ביטול\",\n  \"deleteConfirmationButton\" : \"מחיקה\",\n  \"fieldEmptyForCvv\" : \"עליך למלא את מספר האבטחה של כרטיס האשראי.\",\n  \"fieldEmptyForExpirationDate\" : \"עליך למלא את תאריך פקיעת התוקף.\",\n  \"fieldEmptyForCardholderName\" : \"עליך למלא את שם בעל הכרטיס.\",\n  \"fieldTooLongForCardholderName\" : \"שם בעל הכרטיס יכול להכיל 256 תווים לכל היותר.\",\n  \"fieldEmptyForNumber\" : \"עליך למלא את המספר.\",\n  \"fieldEmptyForPostalCode\" : \"עליך למלא את המיקוד.\",\n  \"fieldInvalidForCardholderName\" : \"שם בעל הכרטיס אינו חוקי.\",\n  \"fieldInvalidForCvv\" : \"קוד אבטחה אינו חוקי.\",\n  \"fieldInvalidForExpirationDate\" : \"תאריך פקיעת התוקף אינו חוקי.\",\n  \"fieldInvalidForNumber\" : \"מספר כרטיס האשראי אינו חוקי.\",\n  \"fieldInvalidForPostalCode\" : \"המיקוד אינו חוקי.\",\n  \"genericError\" : \"נראה שמשהו השתבש בצד שלנו.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"כרטיס אשראי זה כבר שמור כשיטת תשלום.\",\n  \"hostedFieldsFailedTokenizationError\" : \"עליך לבדוק את הפרטים שלך ולנסות שוב.\",\n  \"hostedFieldsFieldsInvalidError\" : \"עליך לבדוק את הפרטים שלך ולנסות שוב.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"שגיאת רשת. עליך לנסות שוב.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"אימות כרטיס האשראי נכשל. עליך לבדוק את הפרטים שלך ולנסות שוב.\",\n  \"paypalButtonMustBeUsed\" : \"להשתמש בלחצן PayPal כדי להמשיך בביצוע התשלום שלך.\",\n  \"paypalAccountTokenizationFailedError\" : \"משהו השתבש בעת הוספת חשבון PayPal. עליך לנסות שוב.\",\n  \"paypalFlowFailedError\" : \"משהו השתבש בהתחברות ל-PayPal. עליך לנסות שוב.\",\n  \"paypalTokenizationRequestActiveError\" : \"אישור התשלום של PayPal כבר מתבצע.\",\n  \"venmoCanceledError\" : \"נראה שמשהו השתבש. עליך לוודא שהגרסה העדכנית ביותר של אפליקציית Venmo מותקנת במכשיר שלך, ושהדפדפן שלך תומך במעבר ל-Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"לא הצלחנו למחוק את שיטת התשלום, עליך לנסות שוב.\",\n  \"venmoAppFailedError\" : \"לא מצאנו למצוא את אפליקציית Venmo במכשיר שלך.\",\n  \"unsupportedCardTypeError\" : \"סוג כרטיס זה אינו נתמך. עליך לנסות כרטיס אחר.\",\n  \"applePayTokenizationError\" : \"אירעה שגיאת רשת בעת עיבוד תשלום התשלומים של Apple Pay. עליך לנסות שוב.\",\n  \"applePayActiveCardError\" : \"הוספת כרטיס נתמך לארנק Apple Pay שלך.\",\n  \"cardholderNameLabel\" : \"שם בעל הכרטיס\",\n  \"cardNumberLabel\" : \"מספר כרטיס\",\n  \"cvvLabel\" : \"קוד אבטחת כרטיס (CVV)\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 ספרות)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 ספרות)\",\n  \"cardholderNamePlaceholder\" : \"שם בעל הכרטיס\",\n  \"expirationDateLabel\" : \"תאריך פקיעת תוקף\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY‏\",\n  \"postalCodeLabel\" : \"מיקוד\",\n  \"saveCardLabel\" : \"שמירת כרטיס אשראי\",\n  \"payWithCard\" : \"לשלם באמצעות כרטיס אשראי\",\n  \"endingIn\" : \"מסתיים בתאריך {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"כרטיס\",\n  \"PayPal\" : \"PayPal‏\",\n  \"PayPal Credit\" : \"PayPal Credit‏\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"אמריקן אקספרס\",\n  \"Discover\" : \"Discover‏\",\n  \"Diners Club\" : \"דיינרס קלאב\",\n  \"Elo\" : \"Elo‏\",\n  \"Hiper\" : \"Hiper‏\",\n  \"Hipercard\" : \"HiperCard‏\",\n  \"MasterCard\" : \"מאסטרקארד\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB‏\",\n  \"Maestro\" : \"Maestro‏\",\n  \"UnionPay\" : \"UnionPay‏\"\n}\n;\n\n},{}],235:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Fizetés ezzel: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Válasszon másik fizetési módot\",\n  \"chooseAWayToPay\" : \"Válasszon fizetési módot\",\n  \"otherWaysToPay\" : \"Egyéb fizetési módok\",\n  \"edit\" : \"Szerkesztés\",\n  \"doneEditing\" : \"Kész\",\n  \"editPaymentMethods\" : \"Fizetési módok szerkesztése\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Törli a(z) {{identifier}}} végű {{secondaryIdentifier}}} kártyát?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Törli a(z) {{identifier}} PayPal-számlát?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Biztosan törli a(z) {{identifier}} felhasználónévhez tartozó Venmo-számlát?\",\n  \"genericDeleteConfirmationMessage\" : \"Biztosan törli ezt a fizetési módot?\",\n  \"deleteCancelButton\" : \"Mégse\",\n  \"deleteConfirmationButton\" : \"Törlés\",\n  \"fieldEmptyForCvv\" : \"Kérjük, töltse ki a CVV-számot.\",\n  \"fieldEmptyForExpirationDate\" : \"Töltse ki a lejárati dátumot.\",\n  \"fieldEmptyForCardholderName\" : \"Töltse ki a kártyabirtokos nevét.\",\n  \"fieldTooLongForCardholderName\" : \"A kártyatulajdonos neve nem lehet hosszabb mint 256 karakter.\",\n  \"fieldEmptyForNumber\" : \"Töltse ki a számot.\",\n  \"fieldEmptyForPostalCode\" : \"Töltse ki az irányítószámot.\",\n  \"fieldInvalidForCardholderName\" : \"Ez a kártyabirtokos neve nem érvényes.\",\n  \"fieldInvalidForCvv\" : \"Ez a biztonsági kód nem érvényes.\",\n  \"fieldInvalidForExpirationDate\" : \"Ez a lejárati dátum érvénytelen.\",\n  \"fieldInvalidForNumber\" : \"Ez a kártyaszám nem érvényes.\",\n  \"fieldInvalidForPostalCode\" : \"Ez az irányítószám nem érvényes.\",\n  \"genericError\" : \"Hiba történt a mi oldalunkon.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Ez a hitelkártya már szerepel mentett fizetési módként.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Ellenőrizze az adatait, majd próbálja újra.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Ellenőrizze az adatait, majd próbálja újra.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Hálózati hiba. Próbálja újra.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"A hitelkártya hitelesítése sikertelen. Ellenőrizze az adatait, majd próbálja újra.\",\n  \"paypalButtonMustBeUsed\" : \"A fizetés folytatásához használja a PayPal-gombot.\",\n  \"paypalAccountTokenizationFailedError\" : \"Hiba történt a PayPal-számla hozzáadása közben. Próbálja újra.\",\n  \"paypalFlowFailedError\" : \"Hiba történt a PayPalhoz való kapcsolódás közben. Próbálja újra.\",\n  \"paypalTokenizationRequestActiveError\" : \"A PayPal-fizetés engedélyezése már folyamatban van.\",\n  \"venmoCanceledError\" : \"Hiba történt. Ellenőrizze, hogy eszközére a Venmo-alkalmazás legfrissebb verziója van-e telepítve, és hogy a böngészője támogatja-e a Venmo-ra történő átváltást.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Nem sikerült törölni a fizetési módot, próbálja újra.\",\n  \"venmoAppFailedError\" : \"A Venmo alkalmazást nem találja a rendszer az eszközön.\",\n  \"unsupportedCardTypeError\" : \"Ez a kártyatípus nem támogatott. Próbáljon meg egy másik kártyát.\",\n  \"applePayTokenizationError\" : \"Hálózati hiba történt az Apple Pay-kifizetés közben. Próbálja újra.\",\n  \"applePayActiveCardError\" : \"Adjon egy támogatott kártyát az Apple Pay pénztárcához.\",\n  \"cardholderNameLabel\" : \"Kártyabirtokos neve\",\n  \"cardNumberLabel\" : \"Kártyaszám\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 számjegy)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 számjegy)\",\n  \"cardholderNamePlaceholder\" : \"Kártyabirtokos neve\",\n  \"expirationDateLabel\" : \"Lejárati dátum\",\n  \"expirationDateLabelSubheading\" : \"(HH/ÉÉ)\",\n  \"expirationDatePlaceholder\" : \"HH/ÉÉ\",\n  \"postalCodeLabel\" : \"Irányítószám\",\n  \"saveCardLabel\" : \"Kártya mentése\",\n  \"payWithCard\" : \"Fizetés bankkártyával vagy hitelkártyával\",\n  \"endingIn\" : \"{{lastFourCardDigits}}} végű\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kártya\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],236:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Membayar dengan {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Pilih metode pembayaran lain\",\n  \"chooseAWayToPay\" : \"Pilih cara pembayaran\",\n  \"otherWaysToPay\" : \"Cara lain untuk membayar\",\n  \"edit\" : \"Edit\",\n  \"doneEditing\" : \"Selesai\",\n  \"editPaymentMethods\" : \"Edit metode pembayaran\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Hapus kartu {{secondaryIdentifier}} yang berakhiran dengan {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Hapus rekening PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Yakin ingin menghapus rekening Venmo dengan nama pengguna {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Yakin ingin menghapus metode pembayaran ini?\",\n  \"deleteCancelButton\" : \"Batalkan\",\n  \"deleteConfirmationButton\" : \"Hapus\",\n  \"fieldEmptyForCvv\" : \"Mohon mengisi CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Silakan mengisi tanggal kedaluwarsa.\",\n  \"fieldEmptyForCardholderName\" : \"Silakan mengisi nama pemilik kartu.\",\n  \"fieldTooLongForCardholderName\" : \"Nama pemilik kartu harus kurang dari 256 karakter.\",\n  \"fieldEmptyForNumber\" : \"Mohon mengisi angkanya.\",\n  \"fieldEmptyForPostalCode\" : \"Mohon mengisi kode pos.\",\n  \"fieldInvalidForCardholderName\" : \"Nama pemilik kartu ini tidak valid.\",\n  \"fieldInvalidForCvv\" : \"Kode keamanan ini tidak valid.\",\n  \"fieldInvalidForExpirationDate\" : \"Tanggal kedaluwarsa ini tidak valid.\",\n  \"fieldInvalidForNumber\" : \"Nomor kartu ini tidak valid.\",\n  \"fieldInvalidForPostalCode\" : \"Kode pos ini tidak valid.\",\n  \"genericError\" : \"Ada yang salah pada sistem kami.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Kartu kredit ini telah ada sebelumnya sebagai metode pembayaran tersimpan.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Mohon periksa informasi Anda dan coba lagi.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Mohon periksa informasi Anda dan coba lagi.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Kesalahan jaringan. Mohon coba lagi.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Verifikasi kartu kredit gagal. Mohon periksa informasi Anda dan coba lagi.\",\n  \"paypalButtonMustBeUsed\" : \"Gunakan tombol PayPal untuk melanjutkan pembayaran.\",\n  \"paypalAccountTokenizationFailedError\" : \"Terjadi kesalahan saat menambahkan rekening PayPal. Mohon coba lagi.\",\n  \"paypalFlowFailedError\" : \"Terjadi kesalahan ketika menghubungkan ke PayPal. Mohon coba lagi.\",\n  \"paypalTokenizationRequestActiveError\" : \"Otorisasi pembayaran PayPal sedang diproses.\",\n  \"venmoCanceledError\" : \"Terjadi kesalahan. Pastikan Anda memiliki aplikasi Venmo versi terbaru di perangkat dan peramban Anda mendukung peralihan ke Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Tidak dapat menghapus metode pembayaran, coba lagi.\",\n  \"venmoAppFailedError\" : \"Aplikasi Venmo tidak dapat ditemukan di perangkat Anda.\",\n  \"unsupportedCardTypeError\" : \"Jenis kartu ini tidak didukung. Mohon coba kartu lainnya.\",\n  \"applePayTokenizationError\" : \"Terjadi kesalahan pada jaringan saat memproses pembayaran Apple Pay. Mohon coba lagi.\",\n  \"applePayActiveCardError\" : \"Tambahkan kartu yang didukung oleh wallet Apple Pay Anda.\",\n  \"cardholderNameLabel\" : \"Nama Pemilik Kartu\",\n  \"cardNumberLabel\" : \"Nomor Kartu\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 angka)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 angka)\",\n  \"cardholderNamePlaceholder\" : \"Nama Pemilik Kartu\",\n  \"expirationDateLabel\" : \"Tanggal Kedaluwarsa\",\n  \"expirationDateLabelSubheading\" : \"(BB/TT)\",\n  \"expirationDatePlaceholder\" : \"BB/TT\",\n  \"postalCodeLabel\" : \"Kode Pos\",\n  \"saveCardLabel\" : \"Simpan kartu\",\n  \"payWithCard\" : \"Bayar dengan kartu\",\n  \"endingIn\" : \"Berakhiran dengan {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kartu\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Jelajahi\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],237:[function(require,module,exports){\n/* eslint-disable camelcase */\n'use strict';\n\nvar assign = require('../lib/assign').assign;\n\nvar fiveCharacterLocales = {\n  ar_EG: require('./ar_EG'),\n  cs_CZ: require('./cs_CZ'),\n  da_DK: require('./da_DK'),\n  de_DE: require('./de_DE'),\n  el_GR: require('./el_GR'),\n  en_AU: require('./en_AU'),\n  en_GB: require('./en_GB'),\n  en_IN: require('./en_IN'),\n  en_US: require('./en_US'),\n  es_ES: require('./es_ES'),\n  es_XC: require('./es_XC'),\n  fi_FI: require('./fi_FI'),\n  fr_CA: require('./fr_CA'),\n  fr_FR: require('./fr_FR'),\n  fr_XC: require('./fr_XC'),\n  he_IL: require('./he_IL'),\n  hu_HU: require('./hu_HU'),\n  id_ID: require('./id_ID'),\n  it_IT: require('./it_IT'),\n  ja_JP: require('./ja_JP'),\n  ko_KR: require('./ko_KR'),\n  nl_NL: require('./nl_NL'),\n  no_NO: require('./no_NO'),\n  pl_PL: require('./pl_PL'),\n  pt_BR: require('./pt_BR'),\n  pt_PT: require('./pt_PT'),\n  ru_RU: require('./ru_RU'),\n  sk_SK: require('./sk_SK'),\n  sv_SE: require('./sv_SE'),\n  th_TH: require('./th_TH'),\n  zh_CN: require('./zh_CN'),\n  zh_HK: require('./zh_HK'),\n  zh_TW: require('./zh_TW'),\n  zh_XC: require('./zh_XC')\n};\n\nvar twoCharacterLocaleAliases = {\n  ar: fiveCharacterLocales.ar_EG,\n  cs: fiveCharacterLocales.cs_CZ,\n  da: fiveCharacterLocales.da_DK,\n  de: fiveCharacterLocales.de_DE,\n  el: fiveCharacterLocales.el_GR,\n  en: fiveCharacterLocales.en_US,\n  es: fiveCharacterLocales.es_ES,\n  fi: fiveCharacterLocales.fi_FI,\n  fr: fiveCharacterLocales.fr_FR,\n  id: fiveCharacterLocales.id_ID,\n  it: fiveCharacterLocales.it_IT,\n  hu: fiveCharacterLocales.hu_HU,\n  ja: fiveCharacterLocales.ja_JP,\n  ko: fiveCharacterLocales.ko_KR,\n  nl: fiveCharacterLocales.nl_NL,\n  no: fiveCharacterLocales.no_NO,\n  pl: fiveCharacterLocales.pl_PL,\n  pt: fiveCharacterLocales.pt_PT,\n  ru: fiveCharacterLocales.ru_RU,\n  sk: fiveCharacterLocales.sk_SK,\n  sv: fiveCharacterLocales.sv_SE,\n  th: fiveCharacterLocales.th_TH,\n  zh: fiveCharacterLocales.zh_CN\n};\n\nmodule.exports = {\n  twoCharacterLocaleAliases: twoCharacterLocaleAliases,\n  fiveCharacterLocales: fiveCharacterLocales,\n  translations: assign({}, twoCharacterLocaleAliases, fiveCharacterLocales)\n};\n/* eslint-enable camelcase */\n\n},{\"../lib/assign\":202,\"./ar_EG\":219,\"./cs_CZ\":220,\"./da_DK\":221,\"./de_DE\":222,\"./el_GR\":223,\"./en_AU\":224,\"./en_GB\":225,\"./en_IN\":226,\"./en_US\":227,\"./es_ES\":228,\"./es_XC\":229,\"./fi_FI\":230,\"./fr_CA\":231,\"./fr_FR\":232,\"./fr_XC\":233,\"./he_IL\":234,\"./hu_HU\":235,\"./id_ID\":236,\"./it_IT\":238,\"./ja_JP\":239,\"./ko_KR\":240,\"./nl_NL\":241,\"./no_NO\":242,\"./pl_PL\":243,\"./pt_BR\":244,\"./pt_PT\":245,\"./ru_RU\":246,\"./sk_SK\":247,\"./sv_SE\":248,\"./th_TH\":249,\"./zh_CN\":250,\"./zh_HK\":251,\"./zh_TW\":252,\"./zh_XC\":253}],238:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Metodo di pagamento: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Scegli un altro metodo di pagamento\",\n  \"chooseAWayToPay\" : \"Scegli un metodo di pagamento\",\n  \"otherWaysToPay\" : \"Altri metodi di pagamento\",\n  \"edit\" : \"Modifica\",\n  \"doneEditing\" : \"Fine\",\n  \"editPaymentMethods\" : \"Modifica metodi di pagamento\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Eliminare la carta {{secondaryIdentifier}} le cui ultime cifre sono {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Eliminare il conto PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Vuoi davvero eliminare il conto Venmo con il nome utente {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Vuoi davvero eliminare questo metodo di pagamento?\",\n  \"deleteCancelButton\" : \"Annulla\",\n  \"deleteConfirmationButton\" : \"Rimuovi\",\n  \"fieldEmptyForCvv\" : \"Compila un CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Compila una data di scadenza.\",\n  \"fieldEmptyForCardholderName\" : \"Compila un nome del titolare.\",\n  \"fieldTooLongForCardholderName\" : \"Il nome del titolare della carta non può contenere più di 256 caratteri.\",\n  \"fieldEmptyForNumber\" : \"Compila un numero.\",\n  \"fieldEmptyForPostalCode\" : \"Compila un CAP.\",\n  \"fieldInvalidForCardholderName\" : \"Il nome del titolare non è valido.\",\n  \"fieldInvalidForCvv\" : \"Il codice di sicurezza non è valido.\",\n  \"fieldInvalidForExpirationDate\" : \"La data di scadenza non è valida.\",\n  \"fieldInvalidForNumber\" : \"Il numero di carta non è valido.\",\n  \"fieldInvalidForPostalCode\" : \"Il CAP non è valido.\",\n  \"genericError\" : \"Si è verificato un errore nei nostri sistemi.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Questa carta di credito esiste già come metodo di pagamento salvato.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Controlla i tuoi dati e riprova.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Controlla i tuoi dati e riprova.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Errore di rete. Riprova.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Verifica della carta di credito non riuscita. Controlla i tuoi dati e riprova.\",\n  \"paypalButtonMustBeUsed\" : \"Usa il pulsante PayPal per continuare con il pagamento.\",\n  \"paypalAccountTokenizationFailedError\" : \"Si è verificato un errore durante l'aggiunta del conto PayPal. Riprova.\",\n  \"paypalFlowFailedError\" : \"Si è verificato un errore durante la connessione a PayPal. Riprova.\",\n  \"paypalTokenizationRequestActiveError\" : \"Autorizzazione di pagamento PayPal già in corso.\",\n  \"venmoCanceledError\" : \"Si è verificato un errore. Assicurati di avere installato la versione più recente dell'app Venmo sul tuo dispositivo e che il tuo browser supporti il passaggio a Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Impossibile eliminare il metodo di pagamento, riprova.\",\n  \"venmoAppFailedError\" : \"Impossibile trovare l'app Venmo sul tuo dispositivo.\",\n  \"unsupportedCardTypeError\" : \"Questo tipo di carta non è supportato. Prova con un'altra carta.\",\n  \"applePayTokenizationError\" : \"Si è verificato un errore di rete durante l'elaborazione del pagamento Apple Pay. Riprova.\",\n  \"applePayActiveCardError\" : \"Aggiungi una carta supportata al tuo portafoglio Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nome del titolare\",\n  \"cardNumberLabel\" : \"Numero di carta\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 cifre)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 cifre)\",\n  \"cardholderNamePlaceholder\" : \"Nome del titolare\",\n  \"expirationDateLabel\" : \"Data di scadenza\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"CAP\",\n  \"saveCardLabel\" : \"Salva carta\",\n  \"payWithCard\" : \"Paga con una carta\",\n  \"endingIn\" : \"Le ultime cifre sono {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Carta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],239:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"{{paymentSource}}でのお支払い\",\n  \"chooseAnotherWayToPay\" : \"別の支払方法を選択してください\",\n  \"chooseAWayToPay\" : \"支払方法を選択してください\",\n  \"otherWaysToPay\" : \"その他の支払方法\",\n  \"edit\" : \"編集\",\n  \"doneEditing\" : \"完了\",\n  \"editPaymentMethods\" : \"支払方法の編集\",\n  \"CreditCardDeleteConfirmationMessage\" : \"{{secondaryIdentifier}}カード(末尾番号: {{identifier}})を削除しますか?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"PayPalアカウント{{identifier}}を削除しますか?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"ユーザー名{{identifier}}のVenmoアカウントを削除してよろしいですか?\",\n  \"genericDeleteConfirmationMessage\" : \"この支払方法を削除しますか?\",\n  \"deleteCancelButton\" : \"キャンセル\",\n  \"deleteConfirmationButton\" : \"削除\",\n  \"fieldEmptyForCvv\" : \"CVVを入力してください。\",\n  \"fieldEmptyForExpirationDate\" : \"有効期限を入力してください。\",\n  \"fieldEmptyForCardholderName\" : \"カード保有者の名前を入力してください。\",\n  \"fieldTooLongForCardholderName\" : \"カード保有者の名前は256文字未満にしてください。\",\n  \"fieldEmptyForNumber\" : \"番号を入力してください。\",\n  \"fieldEmptyForPostalCode\" : \"郵便番号を入力してください。\",\n  \"fieldInvalidForCardholderName\" : \"このカード保有者の名前は無効です。\",\n  \"fieldInvalidForCvv\" : \"このセキュリティコードは無効です。\",\n  \"fieldInvalidForExpirationDate\" : \"この有効期限は無効です。\",\n  \"fieldInvalidForNumber\" : \"このカード番号は無効です。\",\n  \"fieldInvalidForPostalCode\" : \"この郵便番号は無効です。\",\n  \"genericError\" : \"弊社側で問題が発生しました。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"このクレジットカードは、保存済みの支払方法としてすでに存在します。\",\n  \"hostedFieldsFailedTokenizationError\" : \"情報を確認してもう一度お試しください。\",\n  \"hostedFieldsFieldsInvalidError\" : \"情報を確認してもう一度お試しください。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"ネットワークエラーです。再度お試しください。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"クレジットカードの認証に失敗しました。情報を確認してもう一度お試しください。\",\n  \"paypalButtonMustBeUsed\" : \"支払いを続行するには、PayPalボタンを使用します。\",\n  \"paypalAccountTokenizationFailedError\" : \"PayPalアカウントの追加中に問題が発生しました。再度お試しください。\",\n  \"paypalFlowFailedError\" : \"PayPalへの接続に問題が発生しました。再度お試しください。\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPalの支払い承認はすでに処理中です。\",\n  \"venmoCanceledError\" : \"問題が発生しました。お使いの端末にVenmoアプリの最新バージョンがインストールされており、お使いのブラウザがVenmoへの切り替えをサポートしていることをご確認ください。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"支払方法を削除できない場合は、もう一度お試しください。\",\n  \"venmoAppFailedError\" : \"お客さまの端末でVenmoアプリを見つけることができませんでした。\",\n  \"unsupportedCardTypeError\" : \"このカードのタイプはサポートされていません。別のカードをご使用ください。\",\n  \"applePayTokenizationError\" : \"Apple Payの支払いの処理中にネットワークエラーが発生しました。再度お試しください。\",\n  \"applePayActiveCardError\" : \"Apple Payウォレットに対応しているカードを追加してください。\",\n  \"cardholderNameLabel\" : \"カード保有者の名前\",\n  \"cardNumberLabel\" : \"カード番号\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3桁)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4桁)\",\n  \"cardholderNamePlaceholder\" : \"カード保有者の名前\",\n  \"expirationDateLabel\" : \"有効期限\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"郵便番号\",\n  \"saveCardLabel\" : \"カードを保存\",\n  \"payWithCard\" : \"カードで支払う\",\n  \"endingIn\" : \"末尾番号: {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"カード\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"銀聯(UnionPay)\"\n}\n;\n\n},{}],240:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"결제수단: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"다른 결제수단을 선택해 주세요.\",\n  \"chooseAWayToPay\" : \"결제수단 선택\",\n  \"otherWaysToPay\" : \"다른 결제수단\",\n  \"edit\" : \"편집\",\n  \"doneEditing\" : \"완료\",\n  \"editPaymentMethods\" : \"결제수단 편집\",\n  \"CreditCardDeleteConfirmationMessage\" : \"{{identifier}}(으)로 끝나는 {{secondaryIdentifier}} 카드를 삭제하시겠습니까?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"PayPal 계정 {{identifier}}을(를) 삭제하시겠습니까?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"사용자 이름 {{identifier}}의 Venmo 계정을 정말 삭제하시겠습니까?\",\n  \"genericDeleteConfirmationMessage\" : \"이 결제수단을 삭제하시겠습니까?\",\n  \"deleteCancelButton\" : \"취소\",\n  \"deleteConfirmationButton\" : \"삭제\",\n  \"fieldEmptyForCvv\" : \"CVV를 입력하세요.\",\n  \"fieldEmptyForExpirationDate\" : \"만료일을 입력하세요.\",\n  \"fieldEmptyForCardholderName\" : \"카드 소유자 이름을 입력하세요.\",\n  \"fieldTooLongForCardholderName\" : \"카드 소유자 이름은 256자 미만이어야 합니다.\",\n  \"fieldEmptyForNumber\" : \"번호를 입력하세요.\",\n  \"fieldEmptyForPostalCode\" : \"우편번호를 입력하세요.\",\n  \"fieldInvalidForCardholderName\" : \"이 카드 소유자 이름은 유효하지 않습니다.\",\n  \"fieldInvalidForCvv\" : \"이 보안 코드는 유효하지 않습니다.\",\n  \"fieldInvalidForExpirationDate\" : \"이 만료일은 유효하지 않습니다.\",\n  \"fieldInvalidForNumber\" : \"이 카드 번호는 유효하지 않습니다.\",\n  \"fieldInvalidForPostalCode\" : \"이 우편번호는 유효하지 않습니다.\",\n  \"genericError\" : \"저희 쪽에 문제가 발생했습니다.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"이 신용카드는 이미 저장된 결제수단으로 설정되어 있습니다.\",\n  \"hostedFieldsFailedTokenizationError\" : \"정보를 확인하고 다시 시도해 주세요.\",\n  \"hostedFieldsFieldsInvalidError\" : \"정보를 확인하고 다시 시도해 주세요.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"네트워크 오류입니다. 다시 시도해 주세요.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"신용카드 인증에 실패했습니다. 정보를 확인하고 다시 시도해 주세요.\",\n  \"paypalButtonMustBeUsed\" : \"PayPal 버튼을 사용하여 결제를 계속 진행하세요.\",\n  \"paypalAccountTokenizationFailedError\" : \"PayPal 계정을 추가하는 중에 문제가 발생했습니다. 다시 시도해 주세요.\",\n  \"paypalFlowFailedError\" : \"PayPal에 연결하는 데 문제가 발생했습니다. 다시 시도해 주세요.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal 결제 승인이 이미 진행 중입니다.\",\n  \"venmoCanceledError\" : \"오류가 발생했습니다. 기기에 최신 버전의 Venmo 앱이 설치되어 있고 브라우저가 Venmo로의 전환을 지원하는지 확인하세요.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"결제수단을 삭제할 수 없습니다. 다시 시도해 주세요.\",\n  \"venmoAppFailedError\" : \"기기에서 Venmo 앱을 찾을 수 없습니다.\",\n  \"unsupportedCardTypeError\" : \"이 카드 유형은 지원되지 않습니다. 다른 카드로 시도해 주세요.\",\n  \"applePayTokenizationError\" : \"Apple Pay 결제를 처리하는 동안 네트워크 오류가 발생했습니다. 다시 시도해 주세요.\",\n  \"applePayActiveCardError\" : \"Apple Pay 전자지갑에 지원되는 카드를 추가하세요.\",\n  \"cardholderNameLabel\" : \"카드 소유자 이름\",\n  \"cardNumberLabel\" : \"카드 번호\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3자리)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4자리)\",\n  \"cardholderNamePlaceholder\" : \"카드 소유자 이름\",\n  \"expirationDateLabel\" : \"만료일\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"우편번호\",\n  \"saveCardLabel\" : \"카드 저장\",\n  \"payWithCard\" : \"카드로 결제\",\n  \"endingIn\" : \"다음으로 끝남: {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"카드\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],241:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Betalen met {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Kies een andere betaalmethode\",\n  \"chooseAWayToPay\" : \"Kies een betaalmethode\",\n  \"otherWaysToPay\" : \"Andere betaalmethoden\",\n  \"edit\" : \"Bewerken\",\n  \"doneEditing\" : \"Klaar\",\n  \"editPaymentMethods\" : \"Betaalmethoden bewerken\",\n  \"CreditCardDeleteConfirmationMessage\" : \"{{secondaryIdentifier}}-kaart eindigend op {{identifier}} verwijderen?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"PayPal-rekening {{identifier}} verwijderen?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Weet je zeker dat je de Venmo-rekening met gebruikersnaam {{identifier}} wilt verwijderen?\",\n  \"genericDeleteConfirmationMessage\" : \"Weet je zeker dat je deze betaalmethode wilt verwijderen?\",\n  \"deleteCancelButton\" : \"Annuleren\",\n  \"deleteConfirmationButton\" : \"Verwijderen\",\n  \"fieldEmptyForCvv\" : \"Vul een CVV in.\",\n  \"fieldEmptyForExpirationDate\" : \"Vul een vervaldatum in.\",\n  \"fieldEmptyForCardholderName\" : \"Vul de naam van de kaarthouder in.\",\n  \"fieldTooLongForCardholderName\" : \"Naam kaarthouder moet minder dan 256 tekens bevatten.\",\n  \"fieldEmptyForNumber\" : \"Vul een nummer in.\",\n  \"fieldEmptyForPostalCode\" : \"Vul een postcode in.\",\n  \"fieldInvalidForCardholderName\" : \"Naam kaarthouder is ongeldig.\",\n  \"fieldInvalidForCvv\" : \"Deze beveiligingscode is ongeldig.\",\n  \"fieldInvalidForExpirationDate\" : \"Deze vervaldatum is ongeldig.\",\n  \"fieldInvalidForNumber\" : \"Dit kaartnummer is ongeldig.\",\n  \"fieldInvalidForPostalCode\" : \"Deze postcode is ongeldig.\",\n  \"genericError\" : \"Er is aan onze kant iets fout gegaan.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Deze creditcard bestaat al als opgeslagen betaalmethode.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Controleer je gegevens en probeer het opnieuw.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Controleer je gegevens en probeer het opnieuw.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Netwerkfout. Probeer het opnieuw.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Verificatie van creditcard is mislukt. Controleer je gegevens en probeer het opnieuw.\",\n  \"paypalButtonMustBeUsed\" : \"Gebruik de PayPal-knop om door te gaan met je betaling.\",\n  \"paypalAccountTokenizationFailedError\" : \"Er is iets fout gegaan bij het toevoegen van de PayPal-rekening. Probeer het opnieuw.\",\n  \"paypalFlowFailedError\" : \"Er is iets fout gegaan bij het verbinden met PayPal. Probeer het opnieuw.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal-betaalautorisatie is al in voortgang.\",\n  \"venmoCanceledError\" : \"Er is iets fout gegaan. Zorg ervoor dat je de recentste versie van de Venmo-app op je apparaat geïnstalleerd hebt en dat je browser ondersteuning biedt voor overschakelen naar Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Kan betaalmethode niet verwijderen. Probeer het opnieuw.\",\n  \"venmoAppFailedError\" : \"De Venmo-app is niet gevonden op je apparaat.\",\n  \"unsupportedCardTypeError\" : \"Dit kaarttype wordt niet ondersteund. Gebruik een andere kaart.\",\n  \"applePayTokenizationError\" : \"Er is een netwerkfout opgetreden bij het verwerken van de Apple Pay-betaling. Probeer het opnieuw.\",\n  \"applePayActiveCardError\" : \"Voeg een ondersteunde kaart toe aan je Apple Pay-wallet.\",\n  \"cardholderNameLabel\" : \"Naam kaarthouder\",\n  \"cardNumberLabel\" : \"Kaartnummer\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 cijfers)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 cijfers)\",\n  \"cardholderNamePlaceholder\" : \"Naam kaarthouder\",\n  \"expirationDateLabel\" : \"Vervaldatum\",\n  \"expirationDateLabelSubheading\" : \"(mm/jj)\",\n  \"expirationDatePlaceholder\" : \"mm/jj\",\n  \"postalCodeLabel\" : \"Postcode\",\n  \"saveCardLabel\" : \"Kaart opslaan\",\n  \"payWithCard\" : \"Betalen met kaart\",\n  \"endingIn\" : \"Eindigend op {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kaart\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],242:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Betaler med {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Velg en annen betalingsmåte\",\n  \"chooseAWayToPay\" : \"Velg betalingsmåte\",\n  \"otherWaysToPay\" : \"Andre betalingsmåter\",\n  \"edit\" : \"Endre\",\n  \"doneEditing\" : \"Ferdig\",\n  \"editPaymentMethods\" : \"Rediger betalingsmetode\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Vil du slette {{secondaryIdentifier}}-kortet som slutter på {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Vil du slette PayPal-konto {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Er du sikker på at du vil slette Venmo-kontoen med brukernavnet {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Er du sikker på at du vil slette denne betalingsmetoden?\",\n  \"deleteCancelButton\" : \"Avbryt\",\n  \"deleteConfirmationButton\" : \"Slett\",\n  \"fieldEmptyForCvv\" : \"Fyll ut sikkerhetskode (CVV).\",\n  \"fieldEmptyForExpirationDate\" : \"Fyll ut utløpsdato.\",\n  \"fieldEmptyForCardholderName\" : \"Fyll ut kortinnehavers navn.\",\n  \"fieldTooLongForCardholderName\" : \"Kortinnehaverens må ha mindre enn 256 tegn.\",\n  \"fieldEmptyForNumber\" : \"Fyll ut nummer.\",\n  \"fieldEmptyForPostalCode\" : \"Fyll ut postnummer.\",\n  \"fieldInvalidForCardholderName\" : \"Denne kortinnehaverens navn er ikke gyldig.\",\n  \"fieldInvalidForCvv\" : \"Denne sikkerhetskoden er ikke gyldig.\",\n  \"fieldInvalidForExpirationDate\" : \"Denne utløpsdatoen er ikke gyldig.\",\n  \"fieldInvalidForNumber\" : \"Dette kortnummeret er ikke gyldig.\",\n  \"fieldInvalidForPostalCode\" : \"Dette postnummeret er ikke gyldig.\",\n  \"genericError\" : \"Noe gikk galt hos oss.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Dette betalingskortet finnes allerede som en lagret betalingsmetode.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Kontroller informasjonen, og prøv på nytt.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Kontroller informasjonen, og prøv på nytt.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Nettverksfeil. Prøv på nytt.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Kontroll av betalingskort mislyktes. Kontroller informasjonen, og prøv på nytt.\",\n  \"paypalButtonMustBeUsed\" : \"Bruk PayPal-knappen for å fortsette med betalingen.\",\n  \"paypalAccountTokenizationFailedError\" : \"Kan ikke legge til PayPal-kontoen. Prøv på nytt.\",\n  \"paypalFlowFailedError\" : \"Kan ikke koble til PayPal. Prøv på nytt.\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPals prosess for betalingsgodkjenning har allerede startet.\",\n  \"venmoCanceledError\" : \"Noe gikk galt. Kontroller at den nyeste versjonen av Venmo-appen er installert på enheten din, og at nettleseren din støtter bruk av Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Kan ikke slette betalingsmetoden. Prøv på nytt.\",\n  \"venmoAppFailedError\" : \"Finner ikke Venmo-appen på enheten.\",\n  \"unsupportedCardTypeError\" : \"Denne korttypen støttes ikke. Prøv et annet kort.\",\n  \"applePayTokenizationError\" : \"Nettverksfeil under behandling av Apple Pay-betalingen. Prøv på nytt.\",\n  \"applePayActiveCardError\" : \"Legg til et støttet kort i e-lommeboken for Apple Pay.\",\n  \"cardholderNameLabel\" : \"Kortinnehavers navn\",\n  \"cardNumberLabel\" : \"Kortnummer\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 sifre)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 sifre)\",\n  \"cardholderNamePlaceholder\" : \"Kortinnehavers navn\",\n  \"expirationDateLabel\" : \"Utløpsdato\",\n  \"expirationDateLabelSubheading\" : \"(MM/ÅÅ)\",\n  \"expirationDatePlaceholder\" : \"MM/ÅÅ\",\n  \"postalCodeLabel\" : \"Postnummer\",\n  \"saveCardLabel\" : \"Lagre kort\",\n  \"payWithCard\" : \"Betal med kort\",\n  \"endingIn\" : \"Slutter på {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kort\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],243:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Źródło finansowania płatności: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Wybierz inny sposób płatności.\",\n  \"chooseAWayToPay\" : \"Wybierz sposób płatności\",\n  \"otherWaysToPay\" : \"Inne sposoby płatności\",\n  \"edit\" : \"Edytuj\",\n  \"doneEditing\" : \"Gotowe\",\n  \"editPaymentMethods\" : \"Edytuj formy płatności\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Usunąć kartę {{secondaryIdentifier}} o numerze zakończonym cyframi {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Usunąć {{identifier}}konta PayPal?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Czy na pewno chcesz usunąć konto Venmo o nazwie użytkownika {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Na pewno chcesz usunąć tę formę płatności?\",\n  \"deleteCancelButton\" : \"Anuluj\",\n  \"deleteConfirmationButton\" : \"Usuń\",\n  \"fieldEmptyForCvv\" : \"Wpisz kod CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Wpisz datę ważności.\",\n  \"fieldEmptyForCardholderName\" : \"Podaj imię i nazwisko posiadacza karty.\",\n  \"fieldTooLongForCardholderName\" : \"Imię i nazwisko posiadacza karty musi mieć mniej niż 256 znaków.\",\n  \"fieldEmptyForNumber\" : \"Podaj numer.\",\n  \"fieldEmptyForPostalCode\" : \"Podaj kod pocztowy.\",\n  \"fieldInvalidForCardholderName\" : \"To imię i nazwisko posiadacza karty jest nieprawidłowe.\",\n  \"fieldInvalidForCvv\" : \"Ten kod bezpieczeństwa jest nieprawidłowy.\",\n  \"fieldInvalidForExpirationDate\" : \"Ta data ważności jest nieprawidłowa.\",\n  \"fieldInvalidForNumber\" : \"Numer karty jest nieprawidłowy.\",\n  \"fieldInvalidForPostalCode\" : \"Kod pocztowy jest nieprawidłowy.\",\n  \"genericError\" : \"Wystąpił błąd po naszej stronie.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Ta karta kredytowa istnieje jako zapisana forma płatności.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Sprawdź swoje informacje i spróbuj ponownie.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Sprawdź swoje informacje i spróbuj ponownie.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Błąd sieci. Spróbuj ponownie.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Weryfikacja karty kredytowej nie powiodła się. Sprawdź swoje informacje i spróbuj ponownie.\",\n  \"paypalButtonMustBeUsed\" : \"Aby kontynuować płatność, użyj przycisku PayPal.\",\n  \"paypalAccountTokenizationFailedError\" : \"Coś poszło nie tak przy dodawaniu konta PayPal. Spróbuj ponownie.\",\n  \"paypalFlowFailedError\" : \"Wystąpił problem przy nawiązywaniu połączenia z PayPal. Spróbuj ponownie.\",\n  \"paypalTokenizationRequestActiveError\" : \"Autoryzacja płatności PayPal jest w trakcie realizacji.\",\n  \"venmoCanceledError\" : \"Coś poszło nie tak. Upewnij się, że na Twoim urządzeniu jest zainstalowana najnowsza wersja aplikacji Venmo, a Twoja przeglądarka obsługuje przełączanie na Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Nie można usunąć formy płatności, spróbuj ponownie.\",\n  \"venmoAppFailedError\" : \"Aplikacja Venmo nie została odnaleziona na Twoim urządzeniu.\",\n  \"unsupportedCardTypeError\" : \"Ten typ karty nie jest obsługiwany. Spróbuj użyć innej karty.\",\n  \"applePayTokenizationError\" : \"Wystąpił błąd sieciowy podczas przetwarzania płatności Apple Pay. Spróbuj ponownie.\",\n  \"applePayActiveCardError\" : \"Dodaj obsługiwaną kartę do portfela Apple Pay.\",\n  \"cardholderNameLabel\" : \"Imię i nazwisko posiadacza karty\",\n  \"cardNumberLabel\" : \"Numer karty\",\n  \"cvvLabel\" : \"Kod CVV/CVC2\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 cyfry)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 cyfry)\",\n  \"cardholderNamePlaceholder\" : \"Imię i nazwisko posiadacza karty\",\n  \"expirationDateLabel\" : \"Data ważności\",\n  \"expirationDateLabelSubheading\" : \"(MM/RR)\",\n  \"expirationDatePlaceholder\" : \"MM/RR\",\n  \"postalCodeLabel\" : \"Kod pocztowy\",\n  \"saveCardLabel\" : \"Zapisz kartę\",\n  \"payWithCard\" : \"Zapłać kartą\",\n  \"endingIn\" : \"Numer zakończonym cyframi {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Karta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],244:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Pagando com {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Escolha outro meio de pagamento\",\n  \"chooseAWayToPay\" : \"Escolha um meio de pagamento\",\n  \"otherWaysToPay\" : \"Outras formas de pagar\",\n  \"edit\" : \"Editar\",\n  \"doneEditing\" : \"Concluído\",\n  \"editPaymentMethods\" : \"Editar meios de pagamento\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Excluir cartão {{secondaryIdentifier}} de final {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Excluir conta do PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Tem certeza de que deseja excluir a conta do Venmo com nome de usuário {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Tem certeza que deseja excluir este meio de pagamento?\",\n  \"deleteCancelButton\" : \"Cancelar\",\n  \"deleteConfirmationButton\" : \"Excluir\",\n  \"fieldEmptyForCvv\" : \"Preencha um CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Preencha uma data de vencimento.\",\n  \"fieldEmptyForCardholderName\" : \"Preencha um nome para o titular do cartão.\",\n  \"fieldTooLongForCardholderName\" : \"O nome do titular do cartão deve ter menos de 256 caracteres.\",\n  \"fieldEmptyForNumber\" : \"Preencha um número.\",\n  \"fieldEmptyForPostalCode\" : \"Preencha um código postal.\",\n  \"fieldInvalidForCardholderName\" : \"O nome do titular do cartão é inválido.\",\n  \"fieldInvalidForCvv\" : \"Este código de segurança é inválido.\",\n  \"fieldInvalidForExpirationDate\" : \"Esta data de vencimento é inválida.\",\n  \"fieldInvalidForNumber\" : \"O número do cartão é inválido.\",\n  \"fieldInvalidForPostalCode\" : \"Este código postal é inválido.\",\n  \"genericError\" : \"Ocorreu um erro.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Este cartão de crédito já existe como um meio de pagamento salvo.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Verifique as informações e tente novamente.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Verifique as informações e tente novamente.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erro de rede. Tente novamente.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Falha na verificação do cartão de crédito. Verifique as informações e tente novamente.\",\n  \"paypalButtonMustBeUsed\" : \"Use o botão do PayPal para prosseguir com o pagamento.\",\n  \"paypalAccountTokenizationFailedError\" : \"Ocorreu um erro ao adicionar a conta do PayPal. Tente novamente.\",\n  \"paypalFlowFailedError\" : \"Ocorreu um erro na conexão com o PayPal. Tente novamente.\",\n  \"paypalTokenizationRequestActiveError\" : \"A autorização de pagamento do PayPal já está em andamento.\",\n  \"venmoCanceledError\" : \"Ocorreu um erro. Certifique-se de que você tenha a versão mais recente do aplicativo Venmo instalada no seu dispositivo, e que seu navegador aceite a mudança para o Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Não é possível excluir o meio de pagamento, tente novamente.\",\n  \"venmoAppFailedError\" : \"O aplicativo Venmo não foi encontrado no seu dispositivo.\",\n  \"unsupportedCardTypeError\" : \"Este tipo de cartão não é aceito. Tente outro cartão.\",\n  \"applePayTokenizationError\" : \"Ocorreu um erro de rede ao processar o pagamento do Apple Pay. Tente novamente.\",\n  \"applePayActiveCardError\" : \"Adicione um cartão compatível à sua carteira Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nome do titular do cartão\",\n  \"cardNumberLabel\" : \"Número do cartão\",\n  \"cvvLabel\" : \"CSC\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 dígitos)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 dígitos)\",\n  \"cardholderNamePlaceholder\" : \"Nome do titular do cartão\",\n  \"expirationDateLabel\" : \"Data de vencimento\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"CEP\",\n  \"saveCardLabel\" : \"Salvar cartão\",\n  \"payWithCard\" : \"Pague com seu cartão de crédito\",\n  \"endingIn\" : \"De final {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Cartão\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"Crédito do PayPal\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Descobrir\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],245:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Pagamento com {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Escolher outra forma de pagamento\",\n  \"chooseAWayToPay\" : \"Escolher forma de pagamento\",\n  \"otherWaysToPay\" : \"Outras formas de pagamento\",\n  \"edit\" : \"Editar\",\n  \"doneEditing\" : \"Concluído\",\n  \"editPaymentMethods\" : \"Editar meios de pagamento\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Eliminar cartão {{secondaryIdentifier}} terminado em {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Eliminar conta PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Quer mesmo eliminar a conta Venmo com o nome de utilizador {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Quer mesmo eliminar este meio de pagamento?\",\n  \"deleteCancelButton\" : \"Cancelar\",\n  \"deleteConfirmationButton\" : \"Eliminar\",\n  \"fieldEmptyForCvv\" : \"Introduza um CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Introduza uma data de validade.\",\n  \"fieldEmptyForCardholderName\" : \"Introduza um nome do titular do cartão.\",\n  \"fieldTooLongForCardholderName\" : \"O Nome do titular do cartão deve ter menos de 256 carateres.\",\n  \"fieldEmptyForNumber\" : \"Introduza um número.\",\n  \"fieldEmptyForPostalCode\" : \"Introduza um código postal.\",\n  \"fieldInvalidForCardholderName\" : \"Este nome do titular do cartão não é válido.\",\n  \"fieldInvalidForCvv\" : \"Este código de segurança não é válido.\",\n  \"fieldInvalidForExpirationDate\" : \"Esta data de validade não é válida.\",\n  \"fieldInvalidForNumber\" : \"Este número de cartão não é válido.\",\n  \"fieldInvalidForPostalCode\" : \"Este código postal não é válido.\",\n  \"genericError\" : \"Tudo indica que houve um problema.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Este cartão de crédito já existe como meio de pagamento guardado.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Verifique as suas informações e tente novamente.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Verifique as suas informações e tente novamente.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Erro de rede. Tente novamente.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"A verificação do cartão de crédito falhou. Verifique as suas informações e tente novamente.\",\n  \"paypalButtonMustBeUsed\" : \"Use o botão PayPal para continuar o seu pagamento.\",\n  \"paypalAccountTokenizationFailedError\" : \"Ocorreu um erro ao adicionar a conta PayPal. Tente novamente.\",\n  \"paypalFlowFailedError\" : \"Ocorreu um erro ao ligar ao PayPal. Tente novamente.\",\n  \"paypalTokenizationRequestActiveError\" : \"A autorização de pagamento com PayPal já está em curso.\",\n  \"venmoCanceledError\" : \"Ocorreu um erro. Certifique-se de que tem a versão mais recente da aplicação Venmo instalada no seu dispositivo e que o seu navegador suporta a mudança para Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Não é possível eliminar o meio de pagamento; tente novamente.\",\n  \"venmoAppFailedError\" : \"A aplicação Venmo não foi encontrada no seu dispositivo.\",\n  \"unsupportedCardTypeError\" : \"Este tipo de cartão não é suportado. Tente com outro cartão.\",\n  \"applePayTokenizationError\" : \"Ocorreu um erro de rede ao processar o pagamento com Apple Pay. Tente novamente.\",\n  \"applePayActiveCardError\" : \"Adicione um cartão suportado à sua carteira Apple Pay.\",\n  \"cardholderNameLabel\" : \"Nome do titular do cartão\",\n  \"cardNumberLabel\" : \"Número do cartão\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 dígitos)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 dígitos)\",\n  \"cardholderNamePlaceholder\" : \"Nome do titular do cartão\",\n  \"expirationDateLabel\" : \"Data de validade\",\n  \"expirationDateLabelSubheading\" : \"(MM/AA)\",\n  \"expirationDatePlaceholder\" : \"MM/AA\",\n  \"postalCodeLabel\" : \"Código postal\",\n  \"saveCardLabel\" : \"Guardar cartão\",\n  \"payWithCard\" : \"Pagar com cartão\",\n  \"endingIn\" : \"Termina em {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Cartão\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],246:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Оплата с помощью {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Выберите другой способ оплаты\",\n  \"chooseAWayToPay\" : \"Выберите способ оплаты\",\n  \"otherWaysToPay\" : \"Другие способы оплаты\",\n  \"edit\" : \"Изменить\",\n  \"doneEditing\" : \"Готово\",\n  \"editPaymentMethods\" : \"Изменить способы оплаты\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Удалить карту {{secondaryIdentifier}} с номером, заканчивающимся на {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Удалить счет PayPal {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Вы действительно хотите удалить счет Venmo с именем пользователя {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Вы действительно хотите удалить этот способ оплаты?\",\n  \"deleteCancelButton\" : \"Отмена\",\n  \"deleteConfirmationButton\" : \"Удалить\",\n  \"fieldEmptyForCvv\" : \"Укажите код безопасности.\",\n  \"fieldEmptyForExpirationDate\" : \"Укажите дату окончания срока действия.\",\n  \"fieldEmptyForCardholderName\" : \"Укажите имя владельца карты.\",\n  \"fieldTooLongForCardholderName\" : \"Имя владельца карты должно содержать не более 256 символов.\",\n  \"fieldEmptyForNumber\" : \"Укажите номер.\",\n  \"fieldEmptyForPostalCode\" : \"Укажите почтовый индекс.\",\n  \"fieldInvalidForCardholderName\" : \"Недопустимое имя владельца карты.\",\n  \"fieldInvalidForCvv\" : \"Недопустимый код безопасности.\",\n  \"fieldInvalidForExpirationDate\" : \"Недопустимая дата истечения срока действия.\",\n  \"fieldInvalidForNumber\" : \"Недопустимый номер карты.\",\n  \"fieldInvalidForPostalCode\" : \"Недопустимый почтовый индекс.\",\n  \"genericError\" : \"Возникла проблема с нашей стороны.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Данная кредитная карта уже существует как сохраненный способ оплаты.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Проверьте правильность ввода данных и повторите попытку.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Проверьте правильность ввода данных и повторите попытку.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Сбой сети. Повторите попытку.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Сбой при проверке кредитной карты. Проверьте правильность ввода данных и повторите попытку.\",\n  \"paypalButtonMustBeUsed\" : \"Используйте кнопку PayPal, чтобы продолжить оплату.\",\n  \"paypalAccountTokenizationFailedError\" : \"Возникла ошибка при добавлении счета PayPal. Повторите попытку.\",\n  \"paypalFlowFailedError\" : \"Возникла ошибка при подключении к PayPal. Повторите попытку.\",\n  \"paypalTokenizationRequestActiveError\" : \"Авторизация платежа через PayPal уже выполняется.\",\n  \"venmoCanceledError\" : \"Возникла ошибка. Убедитесь, что на вашем устройстве установлена самая последняя версия приложения Venmo и браузер поддерживает переход на Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Не удалось удалить способ оплаты, повторите попытку.\",\n  \"venmoAppFailedError\" : \"Приложение Venmo не удается обнаружить на вашем устройстве.\",\n  \"unsupportedCardTypeError\" : \"Данный тип карты не поддерживается. Попробуйте воспользоваться другой картой.\",\n  \"applePayTokenizationError\" : \"Возникла ошибка сети при обработке платежа Apple Pay. Повторите попытку.\",\n  \"applePayActiveCardError\" : \"Добавьте поддерживаемую карту в ваш счет Apple Pay.\",\n  \"cardholderNameLabel\" : \"Имя владельца карты\",\n  \"cardNumberLabel\" : \"Номер карты\",\n  \"cvvLabel\" : \"Код безопасности карты CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 цифры)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 цифры)\",\n  \"cardholderNamePlaceholder\" : \"Имя владельца карты\",\n  \"expirationDateLabel\" : \"Дата окончания срока действия\",\n  \"expirationDateLabelSubheading\" : \"(ММ/ГГ)\",\n  \"expirationDatePlaceholder\" : \"ММ/ГГ\",\n  \"postalCodeLabel\" : \"Индекс\",\n  \"saveCardLabel\" : \"Сохранить карту\",\n  \"payWithCard\" : \"Оплатить банковской картой\",\n  \"endingIn\" : \"Заканчивается на {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Карта\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Полезное\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],247:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Spôsob platby: {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Vyberte iný spôsob platby\",\n  \"chooseAWayToPay\" : \"Zvoľte spôsob platby\",\n  \"otherWaysToPay\" : \"Iné spôsoby platby\",\n  \"edit\" : \"Upraviť\",\n  \"doneEditing\" : \"Hotovo\",\n  \"editPaymentMethods\" : \"Upraviť spôsoby platby\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Chcete odstrániť kartu {{secondaryIdentifier}} končiacu sa na {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Chcete odstrániť {{identifier}}účtu PayPal?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Naozaj chcete odstrániť účet Venmo s menom používateľa {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Ste si istí, že chcete tento spôsob platby odstrániť?\",\n  \"deleteCancelButton\" : \"Zrušiť\",\n  \"deleteConfirmationButton\" : \"Odstrániť\",\n  \"fieldEmptyForCvv\" : \"Vyplňte kód CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Zadajte dátum skončenia platnosti.\",\n  \"fieldEmptyForCardholderName\" : \"Zadajte meno majiteľa karty.\",\n  \"fieldTooLongForCardholderName\" : \"Meno majiteľa karty musí obsahovať menej ako 256 znakov.\",\n  \"fieldEmptyForNumber\" : \"Zadajte číslo.\",\n  \"fieldEmptyForPostalCode\" : \"Zadajte PSČ.\",\n  \"fieldInvalidForCardholderName\" : \"Toto meno majiteľa karty je neplatné.\",\n  \"fieldInvalidForCvv\" : \"Tento bezpečnostný kód je neplatný.\",\n  \"fieldInvalidForExpirationDate\" : \"Tento dátum skončenia platnosti je neplatný.\",\n  \"fieldInvalidForNumber\" : \"Toto číslo karty je neplatné.\",\n  \"fieldInvalidForPostalCode\" : \"Toto PSČ je neplatné.\",\n  \"genericError\" : \"Vyskytla sa chyba na našej strane.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Táto kreditná karta už existuje ako uložený spôsob platby.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Skontrolujte údaje a skúste to znova.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Skontrolujte údaje a skúste to znova.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Chyba v sieti. Skúste to znova.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Overenie kreditnej karty nebolo úspešné. Skontrolujte údaje a skúste to znova.\",\n  \"paypalButtonMustBeUsed\" : \"Ak chcete pokračovať v platbe, použite tlačidlo PayPal.\",\n  \"paypalAccountTokenizationFailedError\" : \"Vyskytla sa chyba pri pridávaní účtu PayPal. Skúste to znova.\",\n  \"paypalFlowFailedError\" : \"Vyskytla sa chyba pri pripájaní do účtu PayPal. Skúste to znova.\",\n  \"paypalTokenizationRequestActiveError\" : \"Autorizácia platby PayPal už prebieha.\",\n  \"venmoCanceledError\" : \"Vyskytla sa chyba. Skontrolujte, či máte v zariadení nainštalovanú najnovšiu verziu aplikácie Venmo a či prehliadač podporuje prechod na aplikáciu Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Nebolo možné odstrániť spôsob platby, skúste to znova.\",\n  \"venmoAppFailedError\" : \"Aplikáciu Venmo sa vo vašom zariadení nepodarilo nájsť.\",\n  \"unsupportedCardTypeError\" : \"Tento typ karty nie je podporovaný. Prosím skúste inú kartu.\",\n  \"applePayTokenizationError\" : \"Počas spracúvania platby cez Apple Pay došlo k chybe siete. Skúste to znova.\",\n  \"applePayActiveCardError\" : \"Pridajte si podporovanú kartu do peňaženky Apple Pay.\",\n  \"cardholderNameLabel\" : \"Meno majiteľa karty\",\n  \"cardNumberLabel\" : \"Číslo karty\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 číslice)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 číslice)\",\n  \"cardholderNamePlaceholder\" : \"Meno majiteľa karty\",\n  \"expirationDateLabel\" : \"Dátum skončenia platnosti\",\n  \"expirationDateLabelSubheading\" : \"(MM/RR)\",\n  \"expirationDatePlaceholder\" : \"MM/RR\",\n  \"postalCodeLabel\" : \"PSČ\",\n  \"saveCardLabel\" : \"Uložiť kartu\",\n  \"payWithCard\" : \"Zaplatiť kartou\",\n  \"endingIn\" : \"Končí {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Karta\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],248:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"Betalar med {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"Välj ett annat sätt att betala\",\n  \"chooseAWayToPay\" : \"Välj ett sätt att betala\",\n  \"otherWaysToPay\" : \"Andra sätt att betala\",\n  \"edit\" : \"Ändra\",\n  \"doneEditing\" : \"Klart\",\n  \"editPaymentMethods\" : \"Ändra betalningsmetoder\",\n  \"CreditCardDeleteConfirmationMessage\" : \"Ta bort {{secondaryIdentifier}}-kortet som slutar på {{identifier}}?\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"Ta bort PayPal-konto {{identifier}}?\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"Är du säker på att du vill ta bort Venmo-kontot med användarnamnet {{identifier}}?\",\n  \"genericDeleteConfirmationMessage\" : \"Är du säker på att du vill ta bort den här betalningsmetoden?\",\n  \"deleteCancelButton\" : \"Avbryt\",\n  \"deleteConfirmationButton\" : \"Ta bort\",\n  \"fieldEmptyForCvv\" : \"Fyll i ett CVV.\",\n  \"fieldEmptyForExpirationDate\" : \"Fyll i ett utgångsdatum.\",\n  \"fieldEmptyForCardholderName\" : \"Fyll i kortinnehavarens namn.\",\n  \"fieldTooLongForCardholderName\" : \"Namnet på kortinnehavaren måste vara kortare än 256 tecken.\",\n  \"fieldEmptyForNumber\" : \"Fyll i ett nummer.\",\n  \"fieldEmptyForPostalCode\" : \"Fyll i ett postnummer.\",\n  \"fieldInvalidForCardholderName\" : \"Namnet på kortinnehavaren är ogiltigt.\",\n  \"fieldInvalidForCvv\" : \"Den här säkerhetskoden är inte giltig.\",\n  \"fieldInvalidForExpirationDate\" : \"Utgångsdatumet är ogiltigt.\",\n  \"fieldInvalidForNumber\" : \"Det här kortnumret är ogiltigt.\",\n  \"fieldInvalidForPostalCode\" : \"Postnumret är ogiltigt.\",\n  \"genericError\" : \"Ett fel uppstod.\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"Det här kreditkortet finns redan som en sparad betalningsmetod.\",\n  \"hostedFieldsFailedTokenizationError\" : \"Kontrollera uppgifterna och försök igen.\",\n  \"hostedFieldsFieldsInvalidError\" : \"Kontrollera uppgifterna och försök igen.\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"Nätverksfel. Försök igen.\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"Verifiering av kreditkortet misslyckades. Kontrollera uppgifterna och försök igen.\",\n  \"paypalButtonMustBeUsed\" : \"Använd PayPal-knappen för att fortsätta med din betalning.\",\n  \"paypalAccountTokenizationFailedError\" : \"Något gick fel när du lade till PayPal-kontot. Försök igen.\",\n  \"paypalFlowFailedError\" : \"Något gick fel med att ansluta till PayPal. Försök igen.\",\n  \"paypalTokenizationRequestActiveError\" : \"Godkännande av PayPal-betalning pågår redan.\",\n  \"venmoCanceledError\" : \"Något gick fel. Se till att du har den senaste versionen av Venmo-appen installerad på din enhet och att din webbläsare stöder byte till Venmo.\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"Kan inte ta bort betalningsmetoden, försök igen.\",\n  \"venmoAppFailedError\" : \"Det gick inte att hitta Venmo-appen på din enhet.\",\n  \"unsupportedCardTypeError\" : \"Den här korttypen stöds inte. Prova med ett annat kort.\",\n  \"applePayTokenizationError\" : \"Ett nätverksfel uppstod när Apple Pay-betalningen behandlades. Försök igen.\",\n  \"applePayActiveCardError\" : \"Lägg till ett kort som stöds i din Apple Pay e-plånbok.\",\n  \"cardholderNameLabel\" : \"Kortinnehavarens namn\",\n  \"cardNumberLabel\" : \"Kortnummer\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 siffror)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 siffror)\",\n  \"cardholderNamePlaceholder\" : \"Kortinnehavarens namn\",\n  \"expirationDateLabel\" : \"Utgångsdatum\",\n  \"expirationDateLabelSubheading\" : \"(MM/ÅÅ)\",\n  \"expirationDatePlaceholder\" : \"MM/ÅÅ\",\n  \"postalCodeLabel\" : \"Postnummer\",\n  \"saveCardLabel\" : \"Spara kort\",\n  \"payWithCard\" : \"Betala med kort\",\n  \"endingIn\" : \"Slutar på {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"Kort\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],249:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"ชำระเงินด้วย {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"เลือกวิธีการชำระเงินอื่น\",\n  \"chooseAWayToPay\" : \"โปรดเลือกวิธีชำระเงิน\",\n  \"otherWaysToPay\" : \"วิธีอื่นในการชำระเงิน\",\n  \"edit\" : \"แก้ไข\",\n  \"doneEditing\" : \"เสร็จแล้ว\",\n  \"editPaymentMethods\" : \"แก้ไขวิธีการชำระเงิน\",\n  \"CreditCardDeleteConfirmationMessage\" : \"ลบบัตร {{secondaryIdentifier}} ที่ลงท้ายด้วย {{identifier}} หรือไม่\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"คุณต้องการลบบัญชี PayPal {{identifier}} หรือไม่\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"คุณแน่ใจหรือไม่ว่าต้องการลบบัญชี Venmo ที่มีชื่อผู้ใช้ {{identifier}}\",\n  \"genericDeleteConfirmationMessage\" : \"คุณแน่ใจหรือไม่ว่าต้องการลบการชำระเงินรายการนี้ออก\",\n  \"deleteCancelButton\" : \"ยกเลิก\",\n  \"deleteConfirmationButton\" : \"ลบ\",\n  \"fieldEmptyForCvv\" : \"โปรดกรอกข้อมูลในบัตร CVV\",\n  \"fieldEmptyForExpirationDate\" : \"โปรดกรอกข้อมูลวันที่หมดอายุ\",\n  \"fieldEmptyForCardholderName\" : \"โปรดกรอกชื่อผู้ถือบัตร\",\n  \"fieldTooLongForCardholderName\" : \"ชื่อผู้ถือบัตรต้องไม่เกิน 256 อักขระ\",\n  \"fieldEmptyForNumber\" : \"โปรดกรอกหมายเลข\",\n  \"fieldEmptyForPostalCode\" : \"โปรดกรอกข้อมูลในรหัสไปรษณีย์\",\n  \"fieldInvalidForCardholderName\" : \"ชื่อผู้ถือบัตรนี้ไม่ถูกต้อง\",\n  \"fieldInvalidForCvv\" : \"รหัสความปลอดภัยนี้ไม่ถูกต้อง\",\n  \"fieldInvalidForExpirationDate\" : \"วันที่หมดอายุนี้ไม่ถูกต้อง\",\n  \"fieldInvalidForNumber\" : \"หมายเลขบัตรนี้ไม่ถูกต้อง\",\n  \"fieldInvalidForPostalCode\" : \"รหัสไปรษณีย์นี้ไม่ถูกต้อง\",\n  \"genericError\" : \"เกิดข้อผิดพลาดขึ้นในระบบของเรา\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"บัตรเครดิตนี้เป็นวิธีการชำระเงินที่บันทึกไว้แล้ว\",\n  \"hostedFieldsFailedTokenizationError\" : \"โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง\",\n  \"hostedFieldsFieldsInvalidError\" : \"โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"ข้อผิดพลาดของเครือข่าย โปรดลองอีกครั้ง\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"การตรวจสอบยืนยันบัตรเครดิตไม่สำเร็จ โปรดตรวจสอบข้อมูลของคุณ แล้วลองใหม่อีกครั้ง\",\n  \"paypalButtonMustBeUsed\" : \"ใช้ปุ่ม PayPal เพื่อดำเนินการชำระเงินต่อไป\",\n  \"paypalAccountTokenizationFailedError\" : \"เกิดข้อผิดพลาดบางอย่างในการเพิ่มบัญชี PayPal โปรดลองอีกครั้ง\",\n  \"paypalFlowFailedError\" : \"เกิดข้อผิดพลาดในการเชื่อมต่อกับ PayPal โปรดลองอีกครั้ง\",\n  \"paypalTokenizationRequestActiveError\" : \"การอนุมัติการชำระเงิน PayPal อยู่ในระหว่างดำเนินการแล้ว\",\n  \"venmoCanceledError\" : \"เกิดข้อผิดพลาดบางประการ ตรวจสอบให้แน่ใจว่าคุณมีแอปพลิเคชัน Venmo เวอร์ชันล่าสุดที่ติดตั้งไว้ในอุปกรณ์ของคุณและเบราว์เซอร์ของคุณรองรับการเปลี่ยนเป็น Venmo\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"ไม่สามารถลบวิธีการชำระเงินได้โปรดลองอีกครั้ง\",\n  \"venmoAppFailedError\" : \"ไม่พบแอป Venmo ในอุปกรณ์ของคุณ\",\n  \"unsupportedCardTypeError\" : \"ไม่รองรับบัตรประเภทนี้ โปรดลองใช้บัตรใบอื่น\",\n  \"applePayTokenizationError\" : \"เกิดข้อผิดพลาดในเครือข่ายขณะประมวลผลการชำระเงินของ Apple Pay โปรดลองอีกครั้ง\",\n  \"applePayActiveCardError\" : \"เพิ่มบัตรที่รองรับไปยังกระเป๋าสตางค์ Apple Pay ของคุณ\",\n  \"cardholderNameLabel\" : \"ชื่อของผู้ถือบัตร\",\n  \"cardNumberLabel\" : \"หมายเลขบัตร\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"(3 หลัก)\",\n  \"cvvFourDigitLabelSubheading\" : \"(4 หลัก)\",\n  \"cardholderNamePlaceholder\" : \"ชื่อของผู้ถือบัตร\",\n  \"expirationDateLabel\" : \"วันหมดอายุ\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"รหัสไปรษณีย์\",\n  \"saveCardLabel\" : \"บันทึกบัตร\",\n  \"payWithCard\" : \"ชำระด้วยบัตรเดบิตหรือบัตรเครดิต\",\n  \"endingIn\" : \"ลงท้ายด้วย {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"บัตร\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],250:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"使用{{paymentSource}}付款\",\n  \"chooseAnotherWayToPay\" : \"请选择其它付款方式。\",\n  \"chooseAWayToPay\" : \"选择付款方式\",\n  \"otherWaysToPay\" : \"其他付款方式\",\n  \"edit\" : \"编辑\",\n  \"doneEditing\" : \"完成\",\n  \"editPaymentMethods\" : \"编辑付款方式\",\n  \"CreditCardDeleteConfirmationMessage\" : \"删除尾号为{{identifier}}的{{secondaryIdentifier}}卡？\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"删除PayPal账户{{identifier}}？\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"您确定要删除用户名为{{identifier}}的Venmo账户吗？\",\n  \"genericDeleteConfirmationMessage\" : \"确定要删除此付款方式吗？\",\n  \"deleteCancelButton\" : \"取消\",\n  \"deleteConfirmationButton\" : \"删除\",\n  \"fieldEmptyForCvv\" : \"请填写CVV。\",\n  \"fieldEmptyForExpirationDate\" : \"请填写有效期限。\",\n  \"fieldEmptyForCardholderName\" : \"请填写持卡人姓名。\",\n  \"fieldTooLongForCardholderName\" : \"持卡人姓名必须少于256个字符。\",\n  \"fieldEmptyForNumber\" : \"请填写一个号码。\",\n  \"fieldEmptyForPostalCode\" : \"请填写邮政编码。\",\n  \"fieldInvalidForCardholderName\" : \"此持卡人姓名无效。\",\n  \"fieldInvalidForCvv\" : \"此安全码无效。\",\n  \"fieldInvalidForExpirationDate\" : \"此有效期限无效。\",\n  \"fieldInvalidForNumber\" : \"此卡号无效。\",\n  \"fieldInvalidForPostalCode\" : \"此邮政编码无效。\",\n  \"genericError\" : \"我们遇到了一些问题。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"此信用卡已存在于已保存的付款方式。\",\n  \"hostedFieldsFailedTokenizationError\" : \"请检查您的信息，然后重试。\",\n  \"hostedFieldsFieldsInvalidError\" : \"请检查您的信息，然后重试。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"网络错误。请重试。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"信用卡验证失败。请检查您的信息，然后重试。\",\n  \"paypalButtonMustBeUsed\" : \"使用PayPal按钮继续付款。\",\n  \"paypalAccountTokenizationFailedError\" : \"添加PayPal账户时遇到了一些问题。请重试。\",\n  \"paypalFlowFailedError\" : \"连接到PayPal遇到了一些问题。请重试。\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal付款授权已在处理中。\",\n  \"venmoCanceledError\" : \"遇到了一些问题。请确保您的设备上安装了最新版本的Venmo应用，并且您的浏览器支持切换到Venmo。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"无法删除付款方式，请重试。\",\n  \"venmoAppFailedError\" : \"在您的设备上找不到Venmo应用程序。\",\n  \"unsupportedCardTypeError\" : \"不支持该卡类型。请尝试其他卡。\",\n  \"applePayTokenizationError\" : \"处理Apple Pay付款时发生了网络错误。请重试。\",\n  \"applePayActiveCardError\" : \"在您的Apple Pay钱包中添加一张受支持的卡。\",\n  \"cardholderNameLabel\" : \"持卡人姓名\",\n  \"cardNumberLabel\" : \"卡号\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"（3位数）\",\n  \"cvvFourDigitLabelSubheading\" : \"（4位数）\",\n  \"cardholderNamePlaceholder\" : \"持卡人姓名\",\n  \"expirationDateLabel\" : \"有效期限\",\n  \"expirationDateLabelSubheading\" : \"（月/年）\",\n  \"expirationDatePlaceholder\" : \"月/年\",\n  \"postalCodeLabel\" : \"邮政编码\",\n  \"saveCardLabel\" : \"保存此卡\",\n  \"payWithCard\" : \"使用卡支付\",\n  \"endingIn\" : \"尾号为{{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"卡\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"发现\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"银联\"\n}\n;\n\n},{}],251:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"付款方式為 {{paymentSource}}\",\n  \"chooseAnotherWayToPay\" : \"請選擇其他付款方式\",\n  \"chooseAWayToPay\" : \"選擇付款方式\",\n  \"otherWaysToPay\" : \"其他付款方式\",\n  \"edit\" : \"編輯\",\n  \"doneEditing\" : \"完成\",\n  \"editPaymentMethods\" : \"編輯付款方式\",\n  \"CreditCardDeleteConfirmationMessage\" : \"刪除最後數字為 {{identifier}} 的 {{secondaryIdentifier}} 卡嗎？\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"刪除 {{identifier}} PayPal 帳戶嗎？\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"確定要刪除用戶名稱為 {{identifier}} 的 Venmo 帳戶嗎？\",\n  \"genericDeleteConfirmationMessage\" : \"確定要刪除此付款方式嗎？\",\n  \"deleteCancelButton\" : \"取消\",\n  \"deleteConfirmationButton\" : \"刪除\",\n  \"fieldEmptyForCvv\" : \"請填寫信用卡認證碼（CVV）。\",\n  \"fieldEmptyForExpirationDate\" : \"請填寫到期日。\",\n  \"fieldEmptyForCardholderName\" : \"請填寫持卡人姓名。\",\n  \"fieldTooLongForCardholderName\" : \"持卡人姓名必須少於 256 個字元。\",\n  \"fieldEmptyForNumber\" : \"請填寫數字。\",\n  \"fieldEmptyForPostalCode\" : \"請填寫郵遞區號。\",\n  \"fieldInvalidForCardholderName\" : \"持卡人姓名無效。\",\n  \"fieldInvalidForCvv\" : \"此安全代碼無效。\",\n  \"fieldInvalidForExpirationDate\" : \"此到期日無效。\",\n  \"fieldInvalidForNumber\" : \"此卡號無效。\",\n  \"fieldInvalidForPostalCode\" : \"郵遞區號無效。\",\n  \"genericError\" : \"系統發生錯誤。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"此信用卡為已儲存的付款方式。\",\n  \"hostedFieldsFailedTokenizationError\" : \"請檢查你的資料，然後重試。\",\n  \"hostedFieldsFieldsInvalidError\" : \"請檢查你的資料，然後重試。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"網絡錯誤。請再試一次。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"信用卡認證失敗。請檢查你的資料，然後重試。\",\n  \"paypalButtonMustBeUsed\" : \"使用「PayPal 按鈕」繼續付款。\",\n  \"paypalAccountTokenizationFailedError\" : \"新增 PayPal 帳戶出現問題，請再試一次。\",\n  \"paypalFlowFailedError\" : \"連接至 PayPal 出現問題，請再試一次。\",\n  \"paypalTokenizationRequestActiveError\" : \"正在處理 PayPal 授權付款。\",\n  \"venmoCanceledError\" : \"系統出現錯誤，請確保裝置已安裝最新版本的 Venmo 應用程式，及瀏覽器支援切換至 Venmo。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"無法刪除付款方式，請再試一次。\",\n  \"venmoAppFailedError\" : \"無法在裝置上找到 Venmo 應用程式。\",\n  \"unsupportedCardTypeError\" : \"不支援此卡類型。請改用其他信用卡。\",\n  \"applePayTokenizationError\" : \"處理 Apple Pay 付款時網路發生錯誤。請再試一次。\",\n  \"applePayActiveCardError\" : \"新增可用的信用卡到 Apple Pay 錢包。\",\n  \"cardholderNameLabel\" : \"持卡人姓名\",\n  \"cardNumberLabel\" : \"卡號\",\n  \"cvvLabel\" : \"CVV\",\n  \"cvvThreeDigitLabelSubheading\" : \"（3 位數）\",\n  \"cvvFourDigitLabelSubheading\" : \"（4 位數）\",\n  \"cardholderNamePlaceholder\" : \"持卡人姓名\",\n  \"expirationDateLabel\" : \"到期日\",\n  \"expirationDateLabelSubheading\" : \"(MM/YY)\",\n  \"expirationDatePlaceholder\" : \"MM/YY\",\n  \"postalCodeLabel\" : \"郵遞區號\",\n  \"saveCardLabel\" : \"儲存卡\",\n  \"payWithCard\" : \"使用扣帳卡或信用卡付款\",\n  \"endingIn\" : \"最後數字為 {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"信用卡\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"Discover\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"UnionPay\"\n}\n;\n\n},{}],252:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"使用 {{paymentSource}} 付款\",\n  \"chooseAnotherWayToPay\" : \"選擇其他付款方式\",\n  \"chooseAWayToPay\" : \"選擇付款方式\",\n  \"otherWaysToPay\" : \"其他付款方式\",\n  \"edit\" : \"編輯\",\n  \"doneEditing\" : \"完成\",\n  \"editPaymentMethods\" : \"編輯付款方式\",\n  \"CreditCardDeleteConfirmationMessage\" : \"刪除末碼為 {{identifier}} 的 {{secondaryIdentifier}} 卡片？\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"刪除 {{identifier}} 的 PayPal 帳戶？\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"確定要刪除用戶名稱為 {{identifier}} 的 Venmo 帳戶？\",\n  \"genericDeleteConfirmationMessage\" : \"確定要刪除此付款方式？\",\n  \"deleteCancelButton\" : \"取消\",\n  \"deleteConfirmationButton\" : \"刪除\",\n  \"fieldEmptyForCvv\" : \"填寫信用卡驗證碼。\",\n  \"fieldEmptyForExpirationDate\" : \"填寫到期日。\",\n  \"fieldEmptyForCardholderName\" : \"填寫持卡人姓名。\",\n  \"fieldTooLongForCardholderName\" : \"持卡人姓名必須少於 256 個字元。\",\n  \"fieldEmptyForNumber\" : \"填寫數字。\",\n  \"fieldEmptyForPostalCode\" : \"填寫郵遞區號。\",\n  \"fieldInvalidForCardholderName\" : \"此持卡人姓名無效。\",\n  \"fieldInvalidForCvv\" : \"此安全代碼無效。\",\n  \"fieldInvalidForExpirationDate\" : \"此到期日無效。\",\n  \"fieldInvalidForNumber\" : \"此卡號無效。\",\n  \"fieldInvalidForPostalCode\" : \"此郵遞區號無效。\",\n  \"genericError\" : \"我們的系統發生問題。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"此信用卡已經是儲存的付款方式。\",\n  \"hostedFieldsFailedTokenizationError\" : \"請檢查你的資料並重試。\",\n  \"hostedFieldsFieldsInvalidError\" : \"請檢查你的資料並重試。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"網路錯誤。請重試。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"信用卡認證失敗。請檢查你的資料並重試。\",\n  \"paypalButtonMustBeUsed\" : \"使用 PayPal 按鈕繼續付款。\",\n  \"paypalAccountTokenizationFailedError\" : \"新增 PayPal 帳戶時發生錯誤。請重試。\",\n  \"paypalFlowFailedError\" : \"連結至 PayPal 時發生錯誤。請重試。\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal 付款授權已在進行中。\",\n  \"venmoCanceledError\" : \"系統發生錯誤。確保你在裝置上安裝了最新版本的 Venmo 應用程式，且瀏覽器支援轉換至 Venmo。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"無法刪除付款方式，請重試。\",\n  \"venmoAppFailedError\" : \"你的裝置上找不到 Venmo 應用程式。\",\n  \"unsupportedCardTypeError\" : \"不支援此卡片類型，請改用其他卡片。\",\n  \"applePayTokenizationError\" : \"處理 Apple Pay 付款時發生網路連線錯誤。請重試。\",\n  \"applePayActiveCardError\" : \"將支援卡片新增至你的 Apple Pay 錢包。\",\n  \"cardholderNameLabel\" : \"持卡人姓名\",\n  \"cardNumberLabel\" : \"卡號\",\n  \"cvvLabel\" : \"信用卡驗證碼\",\n  \"cvvThreeDigitLabelSubheading\" : \"（3 位數）\",\n  \"cvvFourDigitLabelSubheading\" : \"（4 位數）\",\n  \"cardholderNamePlaceholder\" : \"持卡人姓名\",\n  \"expirationDateLabel\" : \"到期日\",\n  \"expirationDateLabelSubheading\" : \"（月 / 年）\",\n  \"expirationDatePlaceholder\" : \"月 / 年\",\n  \"postalCodeLabel\" : \"郵遞區號\",\n  \"saveCardLabel\" : \"儲存卡片\",\n  \"payWithCard\" : \"使用卡片付款\",\n  \"endingIn\" : \"末碼為 {{lastFourCardDigits}}\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"卡片\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"美國運通\",\n  \"Discover\" : \"發現卡\",\n  \"Diners Club\" : \"大來卡\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"銀聯\"\n}\n;\n\n},{}],253:[function(require,module,exports){\n'use strict';\n\nmodule.exports = {\n  \"payingWith\" : \"使用{{paymentSource}}付款\",\n  \"chooseAnotherWayToPay\" : \"选择其他付款方式\",\n  \"chooseAWayToPay\" : \"选择付款方式\",\n  \"otherWaysToPay\" : \"其他付款方式\",\n  \"edit\" : \"编辑\",\n  \"doneEditing\" : \"完成\",\n  \"editPaymentMethods\" : \"编辑付款方式\",\n  \"CreditCardDeleteConfirmationMessage\" : \"删除以{{identifier}}}结尾的{{secondaryIdentifier}}}卡？\",\n  \"PayPalAccountDeleteConfirmationMessage\" : \"删除PayPal账户{{identifier}}}？\",\n  \"VenmoAccountDeleteConfirmationMessage\" : \"确定要删除用户名为{{identifier}}}的Venmo账户吗？\",\n  \"genericDeleteConfirmationMessage\" : \"确定要删除此付款方式吗？\",\n  \"deleteCancelButton\" : \"取消\",\n  \"deleteConfirmationButton\" : \"删除\",\n  \"fieldEmptyForCvv\" : \"请填写卡校验值。\",\n  \"fieldEmptyForExpirationDate\" : \"请填写有效期限。\",\n  \"fieldEmptyForCardholderName\" : \"请填写持卡人姓名。\",\n  \"fieldTooLongForCardholderName\" : \"持卡人姓名必须少于256个字符。\",\n  \"fieldEmptyForNumber\" : \"请填写号码。\",\n  \"fieldEmptyForPostalCode\" : \"请填写邮政编码。\",\n  \"fieldInvalidForCardholderName\" : \"此持卡人姓名无效。\",\n  \"fieldInvalidForCvv\" : \"此验证码无效。\",\n  \"fieldInvalidForExpirationDate\" : \"此有效期限无效。\",\n  \"fieldInvalidForNumber\" : \"此卡号无效。\",\n  \"fieldInvalidForPostalCode\" : \"此邮政编码无效。\",\n  \"genericError\" : \"我们遇到了一些问题。\",\n  \"hostedFieldsTokenizationFailOnDuplicateError\" : \"此信用卡已存在于已保存的付款方式中。\",\n  \"hostedFieldsFailedTokenizationError\" : \"请检查您的信息，然后重试。\",\n  \"hostedFieldsFieldsInvalidError\" : \"请检查您的信息，然后重试。\",\n  \"hostedFieldsTokenizationNetworkErrorError\" : \"网络错误。请重试。\",\n  \"hostedFieldsTokenizationCvvVerificationFailedError\" : \"信用卡认证失败。请检查您的信息，然后重试。\",\n  \"paypalButtonMustBeUsed\" : \"使用PayPal按钮以便继续进行您的付款。\",\n  \"paypalAccountTokenizationFailedError\" : \"添加PayPal账户时遇到了问题。请重试。\",\n  \"paypalFlowFailedError\" : \"连接到PayPal时遇到了问题。请重试。\",\n  \"paypalTokenizationRequestActiveError\" : \"PayPal付款授权正在处理中。\",\n  \"venmoCanceledError\" : \"遇到了一些问题。请确保您的设备上安装了最新版本的Venmo应用，并且您的浏览器支持切换到Venmo。\",\n  \"vaultManagerPaymentMethodDeletionError\" : \"无法删除付款方式，请重试。\",\n  \"venmoAppFailedError\" : \"未能在您的设备上找到Venmo应用。\",\n  \"unsupportedCardTypeError\" : \"不支持该卡类型。请尝试其它卡。\",\n  \"applePayTokenizationError\" : \"处理Apple Pay付款时出现了网络错误。请重试。\",\n  \"applePayActiveCardError\" : \"在您的Apple Pay钱包中添加一张受支持的卡。\",\n  \"cardholderNameLabel\" : \"持卡人姓名\",\n  \"cardNumberLabel\" : \"卡号\",\n  \"cvvLabel\" : \"卡校验值\",\n  \"cvvThreeDigitLabelSubheading\" : \"（3位数）\",\n  \"cvvFourDigitLabelSubheading\" : \"（4位数）\",\n  \"cardholderNamePlaceholder\" : \"持卡人姓名\",\n  \"expirationDateLabel\" : \"有效期限\",\n  \"expirationDateLabelSubheading\" : \"（月/年）\",\n  \"expirationDatePlaceholder\" : \"月/年\",\n  \"postalCodeLabel\" : \"邮政编码\",\n  \"saveCardLabel\" : \"保存卡\",\n  \"payWithCard\" : \"使用卡支付\",\n  \"endingIn\" : \"以{{lastFourCardDigits}}}结尾\",\n  \"Apple Pay\" : \"Apple Pay\",\n  \"Venmo\" : \"Venmo\",\n  \"Card\" : \"卡\",\n  \"PayPal\" : \"PayPal\",\n  \"PayPal Credit\" : \"PayPal Credit\",\n  \"Google Pay\" : \"Google Pay\",\n  \"American Express\" : \"American Express\",\n  \"Discover\" : \"发现\",\n  \"Diners Club\" : \"Diners Club\",\n  \"Elo\" : \"Elo\",\n  \"Hiper\" : \"Hiper\",\n  \"Hipercard\" : \"Hipercard\",\n  \"MasterCard\" : \"Mastercard\",\n  \"Visa\" : \"Visa\",\n  \"JCB\" : \"JCB\",\n  \"Maestro\" : \"Maestro\",\n  \"UnionPay\" : \"银联\"\n}\n;\n\n},{}],254:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../lib/assign').assign;\nvar classList = require('@braintree/class-list');\nvar DropinError = require('../lib/dropin-error');\nvar errors = require('../constants').errors;\nvar Promise = require('../lib/promise');\n\nfunction BaseView(options) {\n  options = options || {};\n\n  assign(this, options);\n}\n\nBaseView.prototype.getElementById = function (id) {\n  if (!this.element) { return null; }\n\n  return this.element.querySelector('[data-braintree-id=\"' + id + '\"]');\n};\n\nBaseView.prototype.requestPaymentMethod = function () {\n  return Promise.reject(new DropinError(errors.NO_PAYMENT_METHOD_ERROR));\n};\n\nBaseView.prototype.getPaymentMethod = function () {\n  return this.activeMethodView && this.activeMethodView.paymentMethod;\n};\n\nBaseView.prototype.onSelection = function () {};\n\nBaseView.prototype.teardown = function () {\n  return Promise.resolve();\n};\n\nBaseView.prototype.preventUserAction = function () {\n  if (this.element) {\n    classList.add(this.element, 'braintree-sheet--loading');\n  }\n\n  this.model.preventUserAction();\n};\n\nBaseView.prototype.allowUserAction = function () {\n  if (this.element) {\n    classList.remove(this.element, 'braintree-sheet--loading');\n  }\n\n  this.model.allowUserAction();\n};\n\nmodule.exports = BaseView;\n\n},{\"../constants\":196,\"../lib/assign\":202,\"../lib/dropin-error\":206,\"../lib/promise\":213,\"@braintree/class-list\":40}],255:[function(require,module,exports){\n'use strict';\n\nvar BaseView = require('./base-view');\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\nvar paymentMethodTypes = require('../constants').paymentMethodTypes;\n\nfunction DeleteConfirmationView() {\n  BaseView.apply(this, arguments);\n\n  this._initialize();\n}\n\nDeleteConfirmationView.prototype = Object.create(BaseView.prototype);\nDeleteConfirmationView.prototype.constructor = DeleteConfirmationView;\nDeleteConfirmationView.ID = DeleteConfirmationView.prototype.ID = 'delete-confirmation';\n\nDeleteConfirmationView.prototype._initialize = function () {\n  this._yesButton = this.getElementById('delete-confirmation__yes');\n  this._noButton = this.getElementById('delete-confirmation__no');\n  this._messageBox = this.getElementById('delete-confirmation__message');\n\n  addSelectionEventHandler(this._yesButton, function () {\n    this.model.deleteVaultedPaymentMethod();\n  }.bind(this));\n  addSelectionEventHandler(this._noButton, function () {\n    this.model.cancelDeleteVaultedPaymentMethod();\n  }.bind(this));\n};\n\nDeleteConfirmationView.prototype.applyPaymentMethod = function (paymentMethod) {\n  var identifier, secondaryIdentifier;\n  var messageText = this.strings[paymentMethod.type + 'DeleteConfirmationMessage'];\n\n  if (messageText) {\n    switch (paymentMethod.type) {\n      case paymentMethodTypes.card:\n        identifier = paymentMethod.details.lastFour;\n        secondaryIdentifier = paymentMethod.details.cardType;\n        secondaryIdentifier = this.strings[secondaryIdentifier] || secondaryIdentifier;\n        break;\n      case paymentMethodTypes.paypal:\n        identifier = paymentMethod.details.email;\n        break;\n      case paymentMethodTypes.venmo:\n        identifier = paymentMethod.details.username;\n        break;\n      default:\n        break;\n    }\n\n    messageText = messageText.replace('{{identifier}}', identifier);\n    if (secondaryIdentifier) {\n      messageText = messageText.replace('{{secondaryIdentifier}}', secondaryIdentifier);\n    }\n  } else {\n    messageText = this.strings.genericDeleteConfirmationMessage;\n  }\n  this._messageBox.innerText = messageText;\n};\n\nDeleteConfirmationView.prototype.onSelection = function () {\n  window.requestAnimationFrame(function () {\n    this._yesButton.focus();\n  }.bind(this));\n};\n\nmodule.exports = DeleteConfirmationView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"./base-view\":254}],256:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('../lib/analytics');\nvar analyticsKinds = require('../constants').analyticsKinds;\nvar BaseView = require('./base-view');\nvar classList = require('@braintree/class-list');\nvar sheetViews = require('./payment-sheet-views');\nvar PaymentMethodsView = require('./payment-methods-view');\nvar PaymentOptionsView = require('./payment-options-view');\nvar DeleteConfirmationView = require('./delete-confirmation-view');\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\nvar Promise = require('../lib/promise');\nvar wait = require('../lib/wait');\nvar supportsFlexbox = require('../lib/supports-flexbox');\n\nvar CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT = require('../constants').CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT;\nvar DEVELOPER_MISCONFIGURATION_MESSAGE = require('../constants').errors.DEVELOPER_MISCONFIGURATION_MESSAGE;\n\nfunction MainView() {\n  BaseView.apply(this, arguments);\n\n  this.dependenciesInitializing = 0;\n\n  this._initialize();\n}\n\nMainView.prototype = Object.create(BaseView.prototype);\nMainView.prototype.constructor = MainView;\n\nMainView.prototype._initialize = function () {\n  var paymentOptionsView;\n\n  this._hasMultiplePaymentOptions = this.model.supportedPaymentOptions.length > 1;\n\n  this._views = {};\n\n  this.sheetContainer = this.getElementById('sheet-container');\n  this.sheetErrorText = this.getElementById('sheet-error-text');\n\n  this.toggle = this.getElementById('toggle');\n  this.disableWrapper = this.getElementById('disable-wrapper');\n  this.lowerContainer = this.getElementById('lower-container');\n\n  this.loadingContainer = this.getElementById('loading-container');\n  this.dropinContainer = this.element.querySelector('.braintree-dropin');\n\n  this.supportsFlexbox = supportsFlexbox();\n\n  this.model.on('asyncDependenciesReady', this.hideLoadingIndicator.bind(this));\n\n  this.model.on('errorOccurred', this.showSheetError.bind(this));\n  this.model.on('errorCleared', this.hideSheetError.bind(this));\n  this.model.on('preventUserAction', this.preventUserAction.bind(this));\n  this.model.on('allowUserAction', this.allowUserAction.bind(this));\n\n  this.paymentSheetViewIDs = Object.keys(sheetViews).reduce(function (ids, sheetViewKey) {\n    var PaymentSheetView, paymentSheetView;\n\n    if (this.model.supportedPaymentOptions.indexOf(sheetViewKey) !== -1) {\n      PaymentSheetView = sheetViews[sheetViewKey];\n\n      paymentSheetView = new PaymentSheetView({\n        element: this.getElementById(PaymentSheetView.ID),\n        mainView: this,\n        model: this.model,\n        client: this.client,\n        strings: this.strings\n      });\n      paymentSheetView.initialize();\n\n      this.addView(paymentSheetView);\n      ids.push(paymentSheetView.ID);\n    }\n\n    return ids;\n  }.bind(this), []);\n\n  this.paymentMethodsViews = new PaymentMethodsView({\n    element: this.element,\n    model: this.model,\n    client: this.client,\n    strings: this.strings\n  });\n  this.addView(this.paymentMethodsViews);\n\n  this.deleteConfirmationView = new DeleteConfirmationView({\n    element: this.getElementById('delete-confirmation'),\n    model: this.model,\n    strings: this.strings\n  });\n  this.addView(this.deleteConfirmationView);\n\n  addSelectionEventHandler(this.toggle, this.toggleAdditionalOptions.bind(this));\n\n  this.model.on('changeActivePaymentMethod', function () {\n    wait.delay(CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT).then(function () {\n      var id = PaymentMethodsView.ID;\n\n      // if Drop-in gets into the state where it's told to go to the methods\n      // view, but there are no saved payment methods, it should instead\n      // redirect to the view it started on\n      if (!this.model.hasPaymentMethods()) {\n        id = this.model.getInitialViewId();\n      }\n\n      this.setPrimaryView(id);\n    }.bind(this));\n  }.bind(this));\n\n  this.model.on('changeActiveView', this._onChangeActiveView.bind(this));\n\n  this.model.on('removeActivePaymentMethod', function () {\n    var activePaymentView = this.getView(this.model.getActivePaymentViewId());\n\n    if (activePaymentView && typeof activePaymentView.removeActivePaymentMethod === 'function') {\n      activePaymentView.removeActivePaymentMethod();\n    }\n  }.bind(this));\n\n  this.model.on('enableEditMode', this.enableEditMode.bind(this));\n\n  this.model.on('disableEditMode', this.disableEditMode.bind(this));\n\n  this.model.on('confirmPaymentMethodDeletion', this.openConfirmPaymentMethodDeletionDialog.bind(this));\n  this.model.on('cancelVaultedPaymentMethodDeletion', this.cancelVaultedPaymentMethodDeletion.bind(this));\n  this.model.on('startVaultedPaymentMethodDeletion', this.startVaultedPaymentMethodDeletion.bind(this));\n  this.model.on('finishVaultedPaymentMethodDeletion', this.finishVaultedPaymentMethodDeletion.bind(this));\n\n  if (this._hasMultiplePaymentOptions) {\n    paymentOptionsView = new PaymentOptionsView({\n      client: this.client,\n      element: this.getElementById(PaymentOptionsView.ID),\n      mainView: this,\n      model: this.model,\n      strings: this.strings\n    });\n\n    this.addView(paymentOptionsView);\n  }\n\n  this._sendToDefaultView();\n};\n\nMainView.prototype._onChangeActiveView = function (data) {\n  var id = data.newViewId;\n  var activePaymentView = this.getView(id);\n\n  if (id === PaymentMethodsView.ID) {\n    classList.add(this.paymentMethodsViews.container, 'braintree-methods--active');\n    classList.remove(this.sheetContainer, 'braintree-sheet--active');\n  } else {\n    wait.delay(0).then(function () {\n      classList.add(this.sheetContainer, 'braintree-sheet--active');\n    }.bind(this));\n    classList.remove(this.paymentMethodsViews.container, 'braintree-methods--active');\n    if (!this.getView(id).getPaymentMethod()) {\n      this.model.setPaymentMethodRequestable({\n        isRequestable: false\n      });\n    }\n  }\n\n  activePaymentView.onSelection();\n};\n\nMainView.prototype.addView = function (view) {\n  this._views[view.ID] = view;\n};\n\nMainView.prototype.getView = function (id) {\n  return this._views[id];\n};\n\nMainView.prototype.setPrimaryView = function (id, secondaryViewId) {\n  var paymentMethod;\n\n  wait.delay(0).then(function () {\n    this.element.className = prefixShowClass(id);\n    if (secondaryViewId) {\n      classList.add(this.element, prefixShowClass(secondaryViewId));\n    }\n  }.bind(this));\n\n  this.primaryView = this.getView(id);\n  this.model.changeActiveView(id);\n\n  if (this.paymentSheetViewIDs.indexOf(id) !== -1) {\n    if (this.model.getPaymentMethods().length > 0 || this.getView(PaymentOptionsView.ID)) {\n      this.showToggle();\n    } else {\n      this.hideToggle();\n    }\n  } else if (id === PaymentMethodsView.ID) {\n    this.showToggle();\n    // Move options below the upper-container\n    this.getElementById('lower-container').appendChild(this.getElementById('options'));\n  } else if (id === PaymentOptionsView.ID) {\n    this.hideToggle();\n  }\n\n  if (!this.supportsFlexbox) {\n    this.element.setAttribute('data-braintree-no-flexbox', true);\n  }\n\n  paymentMethod = this.primaryView.getPaymentMethod();\n\n  this.model.setPaymentMethodRequestable({\n    isRequestable: Boolean(paymentMethod && !this.model.isInEditMode()),\n    type: paymentMethod && paymentMethod.type,\n    selectedPaymentMethod: paymentMethod\n  });\n\n  this.model.clearError();\n};\n\nMainView.prototype.requestPaymentMethod = function () {\n  var activePaymentView = this.getView(this.model.getActivePaymentViewId());\n\n  return activePaymentView.requestPaymentMethod().then(function (payload) {\n    analytics.sendEvent(this.client, 'request-payment-method.' + analyticsKinds[payload.type]);\n\n    return payload;\n  }.bind(this)).catch(function (err) {\n    analytics.sendEvent(this.client, 'request-payment-method.error');\n\n    return Promise.reject(err);\n  }.bind(this));\n};\n\nMainView.prototype.hideLoadingIndicator = function () {\n  classList.remove(this.dropinContainer, 'braintree-loading');\n  classList.add(this.dropinContainer, 'braintree-loaded');\n  classList.add(this.loadingContainer, 'braintree-hidden');\n};\n\nMainView.prototype.showLoadingIndicator = function () {\n  classList.add(this.dropinContainer, 'braintree-loading');\n  classList.remove(this.dropinContainer, 'braintree-loaded');\n  classList.remove(this.loadingContainer, 'braintree-hidden');\n};\n\nMainView.prototype.toggleAdditionalOptions = function () {\n  var sheetViewID;\n  var isPaymentSheetView = this.paymentSheetViewIDs.indexOf(this.primaryView.ID) !== -1;\n\n  this.hideToggle();\n\n  if (!this._hasMultiplePaymentOptions) {\n    sheetViewID = this.paymentSheetViewIDs[0];\n\n    classList.add(this.element, prefixShowClass(sheetViewID));\n    this.model.changeActiveView(sheetViewID);\n  } else if (isPaymentSheetView) {\n    if (this.model.getPaymentMethods().length === 0) {\n      this.setPrimaryView(PaymentOptionsView.ID);\n    } else {\n      this.setPrimaryView(PaymentMethodsView.ID, PaymentOptionsView.ID);\n      this.hideToggle();\n    }\n  } else {\n    classList.add(this.element, prefixShowClass(PaymentOptionsView.ID));\n  }\n};\n\nMainView.prototype.showToggle = function () {\n  if (this.model.isInEditMode()) {\n    return;\n  }\n  classList.remove(this.toggle, 'braintree-hidden');\n  classList.add(this.lowerContainer, 'braintree-hidden');\n};\n\nMainView.prototype.hideToggle = function () {\n  classList.add(this.toggle, 'braintree-hidden');\n  classList.remove(this.lowerContainer, 'braintree-hidden');\n};\n\nMainView.prototype.showSheetError = function (error) {\n  var errorMessage;\n  var genericErrorMessage = this.strings.genericError;\n\n  if (this.strings.hasOwnProperty(error)) {\n    errorMessage = this.strings[error];\n  } else if (error && typeof error.code === 'string') {\n    errorMessage = this.strings[snakeCaseToCamelCase(error.code) + 'Error'] || genericErrorMessage;\n  } else if (error === 'developerError') {\n    errorMessage = DEVELOPER_MISCONFIGURATION_MESSAGE;\n  } else {\n    errorMessage = genericErrorMessage;\n  }\n\n  classList.add(this.dropinContainer, 'braintree-sheet--has-error');\n  this.sheetErrorText.innerHTML = errorMessage;\n};\n\nMainView.prototype.hideSheetError = function () {\n  classList.remove(this.dropinContainer, 'braintree-sheet--has-error');\n};\n\nMainView.prototype.getOptionsElements = function () {\n  return this._views.options.elements;\n};\n\nMainView.prototype.preventUserAction = function () {\n  classList.remove(this.disableWrapper, 'braintree-hidden');\n};\n\nMainView.prototype.allowUserAction = function () {\n  classList.add(this.disableWrapper, 'braintree-hidden');\n};\n\nMainView.prototype.teardown = function () {\n  var error;\n  var viewNames = Object.keys(this._views);\n  var teardownPromises = viewNames.map(function (view) {\n    return this._views[view].teardown().catch(function (err) {\n      error = err;\n    });\n  }.bind(this));\n\n  return Promise.all(teardownPromises).then(function () {\n    if (error) {\n      return Promise.reject(error);\n    }\n\n    return Promise.resolve();\n  });\n};\n\nMainView.prototype.enableEditMode = function () {\n  this.setPrimaryView(this.paymentMethodsViews.ID);\n  this.paymentMethodsViews.enableEditMode();\n  this.hideToggle();\n\n  this.model.setPaymentMethodRequestable({\n    isRequestable: false\n  });\n};\n\nMainView.prototype.disableEditMode = function () {\n  var paymentMethod;\n\n  this.hideSheetError();\n  this.paymentMethodsViews.disableEditMode();\n  this.showToggle();\n\n  paymentMethod = this.primaryView.getPaymentMethod();\n\n  this.model.setPaymentMethodRequestable({\n    isRequestable: Boolean(paymentMethod),\n    type: paymentMethod && paymentMethod.type,\n    selectedPaymentMethod: paymentMethod\n  });\n};\n\nMainView.prototype.openConfirmPaymentMethodDeletionDialog = function (paymentMethod) {\n  this.deleteConfirmationView.applyPaymentMethod(paymentMethod);\n  this.setPrimaryView(this.deleteConfirmationView.ID);\n};\n\nMainView.prototype.cancelVaultedPaymentMethodDeletion = function () {\n  this.setPrimaryView(this.paymentMethodsViews.ID);\n};\n\nMainView.prototype.startVaultedPaymentMethodDeletion = function () {\n  this.element.className = '';\n  this.showLoadingIndicator();\n};\n\nMainView.prototype.finishVaultedPaymentMethodDeletion = function (error) {\n  var self = this;\n\n  this.paymentMethodsViews.refreshPaymentMethods();\n\n  if (error && this.model.getPaymentMethods().length > 0) {\n    this.model.enableEditMode();\n    this.showSheetError('vaultManagerPaymentMethodDeletionError');\n  } else {\n    this._sendToDefaultView();\n  }\n\n  return new Promise(function (resolve) {\n    wait.delay(500).then(function () {\n      // allow all the views to reset before hiding the loading indicator\n      self.hideLoadingIndicator();\n      resolve();\n    });\n  });\n};\n\nMainView.prototype._sendToDefaultView = function () {\n  var paymentMethods = this.model.getPaymentMethods();\n  var preselectVaultedPaymentMethod = this.model.merchantConfiguration.preselectVaultedPaymentMethod !== false;\n\n  if (paymentMethods.length > 0) {\n    if (preselectVaultedPaymentMethod) {\n      analytics.sendEvent(this.client, 'vaulted-card.preselect');\n\n      this.model.changeActivePaymentMethod(paymentMethods[0]);\n    } else {\n      this.setPrimaryView(this.paymentMethodsViews.ID);\n    }\n  } else if (this._hasMultiplePaymentOptions) {\n    this.setPrimaryView(PaymentOptionsView.ID);\n  } else {\n    this.setPrimaryView(this.paymentSheetViewIDs[0]);\n  }\n};\nfunction snakeCaseToCamelCase(s) {\n  return s.toLowerCase().replace(/(\\_\\w)/g, function (m) {\n    return m[1].toUpperCase();\n  });\n}\n\nfunction prefixShowClass(classname) {\n  return 'braintree-show-' + classname;\n}\n\nmodule.exports = MainView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"../lib/analytics\":201,\"../lib/promise\":213,\"../lib/supports-flexbox\":215,\"../lib/wait\":218,\"./base-view\":254,\"./delete-confirmation-view\":255,\"./payment-methods-view\":258,\"./payment-options-view\":259,\"./payment-sheet-views\":264,\"@braintree/class-list\":40}],257:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('../lib/analytics');\nvar BaseView = require('./base-view');\nvar classList = require('@braintree/class-list');\nvar constants = require('../constants');\n\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\n\nvar paymentMethodHTML = \"<div class=\\\"braintree-method__icon-container braintree-method__delete-container\\\">\\n  <div class=\\\"braintree-method__icon braintree-method__delete\\\">\\n    <svg width=\\\"48\\\" height=\\\"29\\\">\\n      <use xlink:href=\\\"#iconX\\\"></use>\\n    </svg>\\n  </div>\\n</div>\\n\\n<div class=\\\"braintree-method__logo\\\">\\n  <svg width=\\\"40\\\" height=\\\"24\\\" class=\\\"@CLASSNAME\\\">\\n    <use xlink:href=\\\"#@ICON\\\"></use>\\n  </svg>\\n</div>\\n\\n<div class=\\\"braintree-method__label\\\">@TITLE<br><div class=\\\"braintree-method__label--small\\\">@SUBTITLE</div></div>\\n\\n<div class=\\\"braintree-method__icon-container braintree-method__check-container\\\">\\n  <div class=\\\"braintree-method__icon braintree-method__check\\\">\\n    <svg height=\\\"100%\\\" width=\\\"100%\\\">\\n      <use xlink:href=\\\"#iconCheck\\\"></use>\\n    </svg>\\n  </div>\\n</div>\\n\";\n\nfunction PaymentMethodView() {\n  BaseView.apply(this, arguments);\n\n  this._initialize();\n}\n\nPaymentMethodView.prototype = Object.create(BaseView.prototype);\nPaymentMethodView.prototype.constructor = PaymentMethodView;\n\nPaymentMethodView.prototype._initialize = function () {\n  var endingInText;\n  var html = paymentMethodHTML;\n  var paymentMethodCardTypes = constants.paymentMethodCardTypes;\n  var paymentMethodTypes = constants.paymentMethodTypes;\n\n  this.element = document.createElement('div');\n  this.element.className = 'braintree-method';\n  this.element.setAttribute('tabindex', '0');\n  this.element.setAttribute('role', 'button');\n\n  addSelectionEventHandler(this.element, function () {\n    if (this.model.isInEditMode()) {\n      this._selectDelete();\n    } else {\n      this._choosePaymentMethod();\n    }\n  }.bind(this));\n\n  switch (this.paymentMethod.type) {\n    case paymentMethodTypes.applePay:\n      html = html.replace(/@ICON/g, 'logoApplePay')\n        .replace(/@CLASSNAME/g, '')\n        .replace(/@TITLE/g, this.strings['Apple Pay'])\n        .replace(/@SUBTITLE/g, '');\n      break;\n    case paymentMethodTypes.card:\n      endingInText = this.strings.endingIn.replace('{{lastFourCardDigits}}', this.paymentMethod.details.lastFour);\n      html = html.replace(/@ICON/g, 'icon-' + paymentMethodCardTypes[this.paymentMethod.details.cardType])\n        .replace(/@CLASSNAME/g, ' braintree-icon--bordered')\n        .replace(/@TITLE/g, endingInText)\n        .replace(/@SUBTITLE/g, this.strings[this.paymentMethod.details.cardType]);\n      break;\n    case paymentMethodTypes.googlePay:\n      html = html.replace(/@ICON/g, 'logoGooglePay')\n        .replace(/@CLASSNAME/g, '')\n        .replace(/@TITLE/g, this.strings['Google Pay'])\n        .replace(/@SUBTITLE/g, '');\n      break;\n    case paymentMethodTypes.paypal:\n      html = html.replace(/@ICON/g, 'logoPayPal')\n        .replace(/@CLASSNAME/g, '')\n        .replace(/@TITLE/g, this.paymentMethod.details.email)\n        .replace(/@SUBTITLE/g, this.strings.PayPal);\n      break;\n    case paymentMethodTypes.venmo:\n      html = html.replace(/@ICON/g, 'logoVenmo')\n        .replace(/@CLASSNAME/g, '')\n        .replace(/@TITLE/g, this.paymentMethod.details.username)\n        .replace(/@SUBTITLE/g, this.strings.Venmo);\n      break;\n    default:\n      break;\n  }\n\n  this.element.innerHTML = html;\n  this.checkMark = this.element.querySelector('.braintree-method__check-container');\n};\n\nPaymentMethodView.prototype.setActive = function (isActive) {\n  // setTimeout required to animate addition of new payment methods\n  setTimeout(function () {\n    classList.toggle(this.element, 'braintree-method--active', isActive);\n  }.bind(this), 0);\n};\n\nPaymentMethodView.prototype.enableEditMode = function () {\n  classList.add(this.checkMark, 'braintree-hidden');\n  if (this.paymentMethod.hasSubscription) {\n    classList.add(this.element, 'braintree-method--disabled');\n  }\n};\n\nPaymentMethodView.prototype.disableEditMode = function () {\n  classList.remove(this.checkMark, 'braintree-hidden');\n  classList.remove(this.element, 'braintree-method--disabled');\n};\n\nPaymentMethodView.prototype.teardown = function () {\n  if (this.element.parentNode) {\n    this.element.parentNode.removeChild(this.element);\n  }\n};\n\nPaymentMethodView.prototype._choosePaymentMethod = function () {\n  if (this.paymentMethod.vaulted) {\n    analytics.sendEvent(this.client, 'vaulted-' + constants.analyticsKinds[this.paymentMethod.type] + '.select');\n  }\n\n  this.model.changeActivePaymentMethod(this.paymentMethod);\n};\n\nPaymentMethodView.prototype._selectDelete = function () {\n  this.model.confirmPaymentMethodDeletion(this.paymentMethod);\n};\n\nmodule.exports = PaymentMethodView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"../lib/analytics\":201,\"./base-view\":254,\"@braintree/class-list\":40}],258:[function(require,module,exports){\n'use strict';\n\nvar BaseView = require('./base-view');\nvar PaymentMethodView = require('./payment-method-view');\nvar DropinError = require('../lib/dropin-error');\nvar classList = require('@braintree/class-list');\nvar errors = require('../constants').errors;\nvar Promise = require('../lib/promise');\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\n\nvar PAYMENT_METHOD_TYPE_TO_TRANSLATION_STRING = {\n  CreditCard: 'Card',\n  PayPalAccount: 'PayPal',\n  ApplePayCard: 'Apple Pay',\n  AndroidPayCard: 'Google Pay',\n  VenmoAccount: 'Venmo'\n};\n\nfunction PaymentMethodsView() {\n  BaseView.apply(this, arguments);\n\n  this._initialize();\n}\n\nPaymentMethodsView.prototype = Object.create(BaseView.prototype);\nPaymentMethodsView.prototype.constructor = PaymentMethodsView;\nPaymentMethodsView.ID = PaymentMethodsView.prototype.ID = 'methods';\n\nPaymentMethodsView.prototype._initialize = function () {\n  this.views = [];\n  this.container = this.getElementById('methods-container');\n  this._headingLabel = this.getElementById('methods-label');\n  this._editButton = this.getElementById('methods-edit');\n\n  this.model.on('addPaymentMethod', this._addPaymentMethod.bind(this));\n  this.model.on('changeActivePaymentMethod', this._changeActivePaymentMethodView.bind(this));\n  this.model.on('refreshPaymentMethods', this.refreshPaymentMethods.bind(this));\n\n  this.refreshPaymentMethods();\n\n  if (this.model.merchantConfiguration.vaultManager) {\n    this.model.on('removePaymentMethod', this._removePaymentMethod.bind(this));\n\n    addSelectionEventHandler(this._editButton, function () {\n      if (this.model.isInEditMode()) {\n        this.model.disableEditMode();\n      } else {\n        this.model.enableEditMode();\n      }\n    }.bind(this));\n\n    classList.remove(this._editButton, 'braintree-hidden');\n  }\n};\n\nPaymentMethodsView.prototype.removeActivePaymentMethod = function () {\n  if (!this.activeMethodView) {\n    return;\n  }\n  this.activeMethodView.setActive(false);\n  this.activeMethodView = null;\n  classList.add(this._headingLabel, 'braintree-no-payment-method-selected');\n};\n\nPaymentMethodsView.prototype._getPaymentMethodString = function () {\n  var stringKey, paymentMethodTypeString;\n\n  if (!this.activeMethodView) {\n    return '';\n  }\n\n  stringKey = PAYMENT_METHOD_TYPE_TO_TRANSLATION_STRING[this.activeMethodView.paymentMethod.type];\n  paymentMethodTypeString = this.strings[stringKey];\n\n  return this.strings.payingWith.replace('{{paymentSource}}', paymentMethodTypeString);\n};\n\nPaymentMethodsView.prototype.enableEditMode = function () {\n  classList.add(this.container, 'braintree-methods--edit');\n\n  this._editButton.innerHTML = this.strings.deleteCancelButton;\n  this._headingLabel.innerHTML = this.strings.editPaymentMethods;\n\n  this.views.forEach(function (view) {\n    view.enableEditMode();\n  });\n};\n\nPaymentMethodsView.prototype.disableEditMode = function () {\n  classList.remove(this.container, 'braintree-methods--edit');\n\n  this._editButton.innerHTML = this.strings.edit;\n  this._headingLabel.innerHTML = this._getPaymentMethodString();\n\n  this.views.forEach(function (view) {\n    view.disableEditMode();\n  });\n};\n\nPaymentMethodsView.prototype._addPaymentMethod = function (paymentMethod) {\n  var paymentMethodView = new PaymentMethodView({\n    model: this.model,\n    paymentMethod: paymentMethod,\n    client: this.client,\n    strings: this.strings\n  });\n\n  if (this.model.isGuestCheckout && this.container.firstChild) {\n    this.views[0].teardown();\n    this.views.pop();\n  }\n\n  if (this.container.firstChild) {\n    this.container.insertBefore(paymentMethodView.element, this.container.firstChild);\n  } else {\n    this.container.appendChild(paymentMethodView.element);\n  }\n\n  this.views.push(paymentMethodView);\n};\n\nPaymentMethodsView.prototype._removePaymentMethod = function (paymentMethod) {\n  var i;\n\n  for (i = 0; i < this.views.length; i++) {\n    if (this.views[i].paymentMethod === paymentMethod) {\n      this.views[i].teardown();\n      this._headingLabel.innerHTML = '&nbsp;';\n      this.views.splice(i, 1);\n      break;\n    }\n  }\n};\n\nPaymentMethodsView.prototype._changeActivePaymentMethodView = function (paymentMethod) {\n  var i;\n  var previousActiveMethodView = this.activeMethodView;\n\n  for (i = 0; i < this.views.length; i++) {\n    if (this.views[i].paymentMethod === paymentMethod) {\n      this.activeMethodView = this.views[i];\n      this._headingLabel.innerHTML = this._getPaymentMethodString();\n      break;\n    }\n  }\n\n  if (previousActiveMethodView) {\n    previousActiveMethodView.setActive(false);\n  }\n  this.activeMethodView.setActive(true);\n  classList.remove(this._headingLabel, 'braintree-no-payment-method-selected');\n};\n\nPaymentMethodsView.prototype.requestPaymentMethod = function () {\n  if (!this.activeMethodView || this.model.isInEditMode()) {\n    return Promise.reject(new DropinError(errors.NO_PAYMENT_METHOD_ERROR));\n  }\n\n  return Promise.resolve(this.activeMethodView.paymentMethod);\n};\n\nPaymentMethodsView.prototype.refreshPaymentMethods = function () {\n  var i;\n  var paymentMethods = this.model.getPaymentMethods();\n\n  this.views.forEach(function (view) {\n    view.teardown();\n  });\n\n  this.views = [];\n\n  for (i = paymentMethods.length - 1; i >= 0; i--) {\n    this._addPaymentMethod(paymentMethods[i]);\n  }\n};\n\nmodule.exports = PaymentMethodsView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"../lib/dropin-error\":206,\"../lib/promise\":213,\"./base-view\":254,\"./payment-method-view\":257,\"@braintree/class-list\":40}],259:[function(require,module,exports){\n'use strict';\n\nvar analytics = require('../lib/analytics');\nvar addSelectionEventHandler = require('../lib/add-selection-event-handler');\nvar BaseView = require('./base-view');\n\nvar paymentOptionIDs = require('../constants').paymentOptionIDs;\n\nvar paymentMethodOptionHTML = \"<div class=\\\"braintree-option__logo\\\">\\n  <svg width=\\\"48\\\" height=\\\"29\\\" class=\\\"@CLASSNAME\\\">\\n    <use xlink:href=\\\"#@ICON\\\"></use>\\n  </svg>\\n</div>\\n\\n<div class=\\\"braintree-option__label\\\" aria-label=\\\"@OPTION_LABEL\\\">\\n  @OPTION_TITLE\\n  <div class=\\\"braintree-option__disabled-message\\\"></div>\\n</div>\\n\";\n\nfunction PaymentOptionsView() {\n  BaseView.apply(this, arguments);\n\n  this._initialize();\n}\n\nPaymentOptionsView.prototype = Object.create(BaseView.prototype);\nPaymentOptionsView.prototype.constructor = PaymentOptionsView;\nPaymentOptionsView.ID = PaymentOptionsView.prototype.ID = 'options';\n\nPaymentOptionsView.prototype._initialize = function () {\n  this.container = this.getElementById('payment-options-container');\n  this.elements = {};\n\n  this.model.supportedPaymentOptions.forEach(function (paymentOptionID) {\n    this._addPaymentOption(paymentOptionID);\n  }.bind(this));\n};\n\nPaymentOptionsView.prototype._addPaymentOption = function (paymentOptionID) {\n  var paymentSource;\n  var div = document.createElement('div');\n  var html = paymentMethodOptionHTML;\n  var clickHandler = function clickHandler() {\n    this.mainView.setPrimaryView(paymentOptionID);\n    this.model.selectPaymentOption(paymentOptionID);\n    analytics.sendEvent(this.client, 'selected.' + paymentOptionIDs[paymentOptionID]);\n  }.bind(this);\n\n  div.className = 'braintree-option braintree-option__' + paymentOptionID;\n  div.setAttribute('tabindex', '0');\n  div.setAttribute('role', 'button');\n\n  switch (paymentOptionID) {\n    case paymentOptionIDs.applePay:\n      paymentSource = this.strings['Apple Pay'];\n      html = html.replace(/@ICON/g, 'logoApplePay');\n      break;\n    case paymentOptionIDs.card:\n      paymentSource = this.strings.Card;\n      html = html.replace(/@ICON/g, 'iconCardFront');\n      html = html.replace(/@CLASSNAME/g, 'braintree-icon--bordered');\n      break;\n    case paymentOptionIDs.googlePay:\n      paymentSource = this.strings['Google Pay'];\n      html = html.replace(/@ICON/g, 'logoGooglePay');\n      break;\n    case paymentOptionIDs.paypal:\n      paymentSource = this.strings.PayPal;\n      html = html.replace(/@ICON/g, 'logoPayPal');\n      break;\n    case paymentOptionIDs.paypalCredit:\n      paymentSource = this.strings['PayPal Credit'];\n      html = html.replace(/@ICON/g, 'logoPayPalCredit');\n      break;\n    case paymentOptionIDs.venmo:\n      paymentSource = this.strings.Venmo;\n      html = html.replace(/@ICON/g, 'logoVenmo');\n      break;\n    default:\n      break;\n  }\n\n  html = html.replace(/@OPTION_LABEL/g, this._generateOptionLabel(paymentSource));\n  html = html.replace(/@OPTION_TITLE/g, paymentSource);\n  html = html.replace(/@CLASSNAME/g, '');\n\n  div.innerHTML = html;\n\n  addSelectionEventHandler(div, clickHandler);\n\n  this.container.appendChild(div);\n  this.elements[paymentOptionID] = {\n    div: div,\n    clickHandler: clickHandler\n  };\n};\n\nPaymentOptionsView.prototype._generateOptionLabel = function (paymentSourceString) {\n  return this.strings.payingWith.replace('{{paymentSource}}', paymentSourceString);\n};\n\nmodule.exports = PaymentOptionsView;\n\n},{\"../constants\":196,\"../lib/add-selection-event-handler\":200,\"../lib/analytics\":201,\"./base-view\":254}],260:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar BaseView = require('../base-view');\nvar btApplePay = require('braintree-web/apple-pay');\nvar DropinError = require('../../lib/dropin-error');\nvar isHTTPS = require('../../lib/is-https');\nvar Promise = require('../../lib/promise');\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\n\nvar DEFAULT_APPLE_PAY_SESSION_VERSION = 2;\n\nfunction ApplePayView() {\n  BaseView.apply(this, arguments);\n}\n\nApplePayView.prototype = Object.create(BaseView.prototype);\nApplePayView.prototype.constructor = ApplePayView;\nApplePayView.ID = ApplePayView.prototype.ID = paymentOptionIDs.applePay;\n\nApplePayView.prototype.initialize = function () {\n  var self = this;\n\n  self.applePayConfiguration = assign({}, self.model.merchantConfiguration.applePay);\n  self.applePaySessionVersion = self.applePayConfiguration.applePaySessionVersion || DEFAULT_APPLE_PAY_SESSION_VERSION;\n\n  delete self.applePayConfiguration.applePaySessionVersion;\n\n  return btApplePay.create({client: this.client}).then(function (applePayInstance) {\n    self.buttonDiv = self.getElementById('apple-pay-button');\n\n    self.applePayInstance = applePayInstance;\n\n    self.buttonDiv.onclick = self._showPaymentSheet.bind(self);\n    self.buttonDiv.style['-apple-pay-button-style'] = self.model.merchantConfiguration.applePay.buttonStyle || 'black';\n\n    self.model.asyncDependencyReady(ApplePayView.ID);\n  }).catch(function (err) {\n    self.model.asyncDependencyFailed({\n      view: self.ID,\n      error: new DropinError(err)\n    });\n  });\n};\n\nApplePayView.prototype._showPaymentSheet = function () {\n  var self = this;\n  var request, session;\n\n  if (this._sessionInProgress) {\n    return false;\n  }\n\n  this._sessionInProgress = true;\n\n  request = this.applePayInstance.createPaymentRequest(this.applePayConfiguration.paymentRequest);\n  session = new global.ApplePaySession(self.applePaySessionVersion, request);\n\n  session.onvalidatemerchant = function (event) {\n    self.applePayInstance.performValidation({\n      validationURL: event.validationURL,\n      displayName: self.applePayConfiguration.displayName\n    }).then(function (validationData) {\n      session.completeMerchantValidation(validationData);\n    }).catch(function (validationErr) {\n      self.model.reportError(validationErr);\n      self._sessionInProgress = false;\n      session.abort();\n    });\n  };\n\n  session.onpaymentauthorized = function (event) {\n    self.applePayInstance.tokenize({\n      token: event.payment.token\n    }).then(function (payload) {\n      self._sessionInProgress = false;\n      session.completePayment(global.ApplePaySession.STATUS_SUCCESS);\n      payload.rawPaymentData = event.payment;\n      self.model.addPaymentMethod(payload);\n    }).catch(function (tokenizeErr) {\n      self.model.reportError(tokenizeErr);\n      self._sessionInProgress = false;\n      session.completePayment(global.ApplePaySession.STATUS_FAILURE);\n    });\n  };\n\n  session.oncancel = function () {\n    self._sessionInProgress = false;\n  };\n\n  session.begin();\n\n  return false;\n};\n\nApplePayView.prototype.updateConfiguration = function (key, value) {\n  this.applePayConfiguration[key] = value;\n};\n\nApplePayView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n  var applePayEnabled = gatewayConfiguration.applePayWeb && Boolean(options.merchantConfiguration.applePay);\n  var applePaySessionVersion = options.merchantConfiguration.applePay && options.merchantConfiguration.applePay.applePaySessionVersion;\n  var applePayBrowserSupported;\n\n  applePaySessionVersion = applePaySessionVersion || DEFAULT_APPLE_PAY_SESSION_VERSION;\n\n  if (!applePayEnabled) {\n    return Promise.resolve(false);\n  }\n\n  applePayBrowserSupported = global.ApplePaySession && isHTTPS.isHTTPS();\n\n  if (!applePayBrowserSupported) {\n    return Promise.resolve(false);\n  }\n\n  if (!global.ApplePaySession.supportsVersion(applePaySessionVersion)) {\n    return Promise.resolve(false);\n  }\n\n  return Promise.resolve(Boolean(global.ApplePaySession.canMakePayments()));\n};\n\nmodule.exports = ApplePayView;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/dropin-error\":206,\"../../lib/is-https\":209,\"../../lib/promise\":213,\"../base-view\":254,\"braintree-web/apple-pay\":54}],261:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar analytics = require('../../lib/analytics');\nvar assign = require('../../lib/assign').assign;\nvar browserDetection = require('../../lib/browser-detection');\nvar BaseView = require('../base-view');\nvar btPaypal = require('braintree-web/paypal-checkout');\nvar DropinError = require('../../lib/dropin-error');\nvar constants = require('../../constants');\nvar assets = require('@braintree/asset-loader');\nvar translations = require('../../translations').fiveCharacterLocales;\nvar Promise = require('../../lib/promise');\n\nvar ASYNC_DEPENDENCY_TIMEOUT = 30000;\nvar READ_ONLY_CONFIGURATION_OPTIONS = ['offerCredit', 'locale'];\nvar DEFAULT_CHECKOUTJS_LOG_LEVEL = 'warn';\n\nvar paypalScriptLoadInProgressPromise;\n\nfunction BasePayPalView() {\n  BaseView.apply(this, arguments);\n}\n\nBasePayPalView.prototype = Object.create(BaseView.prototype);\n\nBasePayPalView.prototype.initialize = function () {\n  var asyncDependencyTimeoutHandler;\n  var isCredit = Boolean(this._isPayPalCredit);\n  var setupComplete = false;\n  var self = this;\n  var paypalType = isCredit ? 'paypalCredit' : 'paypal';\n  var paypalConfiguration = this.model.merchantConfiguration[paypalType];\n  var dropinWrapperId = '#braintree--dropin__' + this.model.componentID;\n\n  this.paypalConfiguration = assign({}, paypalConfiguration);\n\n  asyncDependencyTimeoutHandler = setTimeout(function () {\n    self.model.asyncDependencyFailed({\n      view: self.ID,\n      error: new DropinError('There was an error connecting to PayPal.')\n    });\n  }, ASYNC_DEPENDENCY_TIMEOUT);\n\n  return btPaypal.create({client: this.client}).then(function (paypalInstance) {\n    var checkoutJSConfiguration;\n    var buttonSelector = '[data-braintree-id=\"paypal-button\"]';\n    var environment = self.client.getConfiguration().gatewayConfiguration.environment === 'production' ? 'production' : 'sandbox';\n    var locale = self.model.merchantConfiguration.locale;\n\n    self.paypalInstance = paypalInstance;\n\n    self.paypalConfiguration.offerCredit = Boolean(isCredit);\n    checkoutJSConfiguration = {\n      env: environment,\n      style: self.paypalConfiguration.buttonStyle || {},\n      commit: self.paypalConfiguration.commit,\n      payment: function () {\n        return paypalInstance.createPayment(self.paypalConfiguration).catch(reportError);\n      },\n      onAuthorize: function (data) {\n        // NEXT_MAJOR_VERSION change out this vaultPayPal property\n        // to something more generic, such as vaultOnTokenization so\n        // all the vault objects can have the same shape (instead\n        // of being specific to PayPal accounts here)\n        var shouldNotVault = self.paypalConfiguration.vault && self.paypalConfiguration.vault.vaultPayPal === false;\n\n        if (shouldNotVault) {\n          data.vault = false;\n        }\n\n        return paypalInstance.tokenizePayment(data).then(function (tokenizePayload) {\n          if (!shouldNotVault && self.paypalConfiguration.flow === 'vault' && !self.model.isGuestCheckout) {\n            tokenizePayload.vaulted = true;\n          }\n          self.model.addPaymentMethod(tokenizePayload);\n        }).catch(reportError);\n      },\n      onError: reportError\n    };\n\n    if (locale && locale in translations) {\n      self.paypalConfiguration.locale = locale;\n      checkoutJSConfiguration.locale = locale;\n    }\n    checkoutJSConfiguration.funding = {\n      disallowed: []\n    };\n\n    Object.keys(global.paypal.FUNDING).forEach(function (key) {\n      if (key === 'PAYPAL' || key === 'CREDIT') {\n        return;\n      }\n      checkoutJSConfiguration.funding.disallowed.push(global.paypal.FUNDING[key]);\n    });\n\n    if (isCredit) {\n      buttonSelector = '[data-braintree-id=\"paypal-credit-button\"]';\n      checkoutJSConfiguration.style.label = 'credit';\n    } else {\n      checkoutJSConfiguration.funding.disallowed.push(global.paypal.FUNDING.CREDIT);\n    }\n\n    buttonSelector = dropinWrapperId + ' ' + buttonSelector;\n\n    return global.paypal.Button.render(checkoutJSConfiguration, buttonSelector).then(function () {\n      self.model.asyncDependencyReady(paypalType);\n      setupComplete = true;\n      clearTimeout(asyncDependencyTimeoutHandler);\n    });\n  }).catch(reportError);\n\n  function reportError(err) {\n    if (setupComplete) {\n      self.model.reportError(err);\n    } else {\n      self.model.asyncDependencyFailed({\n        view: self.ID,\n        error: err\n      });\n      clearTimeout(asyncDependencyTimeoutHandler);\n    }\n  }\n};\n\nBasePayPalView.prototype.requestPaymentMethod = function () {\n  this.model.reportError('paypalButtonMustBeUsed');\n\n  return BaseView.prototype.requestPaymentMethod.call(this);\n};\n\nBasePayPalView.prototype.updateConfiguration = function (key, value) {\n  if (READ_ONLY_CONFIGURATION_OPTIONS.indexOf(key) === -1) {\n    this.paypalConfiguration[key] = value;\n  }\n};\n\nBasePayPalView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n  var merchantPayPalConfig = options.merchantConfiguration.paypal || options.merchantConfiguration.paypalCredit;\n\n  if (!gatewayConfiguration.paypalEnabled) {\n    return Promise.resolve(false);\n  }\n\n  if (browserDetection.isIe9() || browserDetection.isIe10()) {\n    analytics.sendEvent(options.client, options.viewID + '.checkout.js-browser-not-supported');\n\n    return Promise.resolve(false);\n  }\n\n  if (global.paypal && global.paypal.Button) {\n    return Promise.resolve(true);\n  }\n\n  if (paypalScriptLoadInProgressPromise) {\n    return paypalScriptLoadInProgressPromise;\n  }\n\n  paypalScriptLoadInProgressPromise = assets.loadScript({\n    src: constants.CHECKOUT_JS_SOURCE,\n    id: constants.PAYPAL_CHECKOUT_SCRIPT_ID,\n    dataAttributes: {\n      'log-level': merchantPayPalConfig.logLevel || DEFAULT_CHECKOUTJS_LOG_LEVEL\n    }\n  }).then(function () {\n    return Promise.resolve(true);\n  }).catch(function () {\n    return Promise.resolve(false);\n  }).then(function (result) {\n    paypalScriptLoadInProgressPromise = null;\n\n    return Promise.resolve(result);\n  });\n\n  return paypalScriptLoadInProgressPromise;\n};\n\nmodule.exports = BasePayPalView;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../constants\":196,\"../../lib/analytics\":201,\"../../lib/assign\":202,\"../../lib/browser-detection\":203,\"../../lib/dropin-error\":206,\"../../lib/promise\":213,\"../../translations\":237,\"../base-view\":254,\"@braintree/asset-loader\":1,\"braintree-web/paypal-checkout\":138}],262:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\n\nvar BaseView = require('../base-view');\nvar classList = require('@braintree/class-list');\nvar constants = require('../../constants');\nvar DropinError = require('../../lib/dropin-error');\nvar hostedFields = require('braintree-web/hosted-fields');\nvar isUtf8 = require('../../lib/is-utf-8');\nvar transitionHelper = require('../../lib/transition-helper');\nvar Promise = require('../../lib/promise');\n\nvar cardIconHTML = \"<div data-braintree-id=\\\"visa-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-visa\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"master-card-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-master-card\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"unionpay-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-unionpay\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"american-express-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-american-express\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"jcb-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-jcb\\\"></use>\\n    </svg>\\n</div>\\n<!--Elo, Hiper, and Hipercard currently use the generic icon.\\nThe  braintree-hidden class should be removed here once we get icons for these cards-->\\n<div data-braintree-id=\\\"elo-card-icon\\\" class=\\\"braintree-sheet__card-icon braintree-hidden\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-elo\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"hiper-card-icon\\\" class=\\\"braintree-sheet__card-icon braintree-hidden\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-hiper\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"hipercard-card-icon\\\" class=\\\"braintree-sheet__card-icon braintree-hidden\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-hipercard\\\"></use>\\n    </svg>\\n</div>\\n<!-- Remove braintree-hidden class when supportedCardType accurately indicates Diners Club support -->\\n<div data-braintree-id=\\\"diners-club-card-icon\\\" class=\\\"braintree-sheet__card-icon braintree-hidden\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-diners-club\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"discover-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-discover\\\"></use>\\n    </svg>\\n</div>\\n<div data-braintree-id=\\\"maestro-card-icon\\\" class=\\\"braintree-sheet__card-icon\\\">\\n    <svg width=\\\"40\\\" height=\\\"24\\\">\\n        <use xlink:href=\\\"#icon-maestro\\\"></use>\\n    </svg>\\n</div>\\n\";\n\nvar PASSTHROUGH_EVENTS = [\n  'empty',\n  // TODO should intercept this event and call tokenize\n  'inputSubmitRequest',\n  'binAvailable'\n];\n\nfunction CardView() {\n  BaseView.apply(this, arguments);\n}\n\nCardView.prototype = Object.create(BaseView.prototype);\nCardView.prototype.constructor = CardView;\nCardView.ID = CardView.prototype.ID = constants.paymentOptionIDs.card;\n\nCardView.prototype.initialize = function () {\n  var cvvFieldGroup, postalCodeFieldGroup, hfOptions;\n  var cardholderNameGroup = this.getElementById('cardholder-name-field-group');\n  var cardIcons = this.getElementById('card-view-icons');\n\n  // If merchant explicty passes a value of `true` for card configuration,\n  // we need to treat it as if no card configuration was passed, and provide\n  // the default configuration\n  if (this.model.merchantConfiguration.card && this.model.merchantConfiguration.card !== true) {\n    this.merchantConfiguration = this.model.merchantConfiguration.card;\n  } else {\n    this.merchantConfiguration = {};\n  }\n  this.merchantConfiguration.vault = this.merchantConfiguration.vault || {};\n  this.hasCardholderName = Boolean(this.merchantConfiguration.cardholderName);\n  this.cardholderNameRequired = this.hasCardholderName && this.merchantConfiguration.cardholderName.required === true;\n  hfOptions = this._generateHostedFieldsOptions();\n\n  cardIcons.innerHTML = cardIconHTML;\n  this._hideUnsupportedCardIcons();\n\n  this.hasCVV = hfOptions.fields.cvv;\n  this.saveCardInput = this.getElementById('save-card-input');\n  this.cardNumberIcon = this.getElementById('card-number-icon');\n  this.cardNumberIconSvg = this.getElementById('card-number-icon-svg');\n  this.cvvIcon = this.getElementById('cvv-icon');\n  this.cvvIconSvg = this.getElementById('cvv-icon-svg');\n  this.cvvLabelDescriptor = this.getElementById('cvv-label-descriptor');\n  this.fieldErrors = {};\n\n  if (!this.hasCardholderName) {\n    cardholderNameGroup.parentNode.removeChild(cardholderNameGroup);\n  }\n\n  if (!this.hasCVV) {\n    cvvFieldGroup = this.getElementById('cvv-field-group');\n    cvvFieldGroup.parentNode.removeChild(cvvFieldGroup);\n  }\n\n  if (!hfOptions.fields.postalCode) {\n    postalCodeFieldGroup = this.getElementById('postal-code-field-group');\n    postalCodeFieldGroup.parentNode.removeChild(postalCodeFieldGroup);\n  }\n\n  if (!this.model.isGuestCheckout && this.merchantConfiguration.vault.allowVaultCardOverride === true) {\n    classList.remove(this.getElementById('save-card-field-group'), 'braintree-hidden');\n  }\n\n  // NEXT_MAJOR_VERSION change out this vaultCard property\n  // to something more generic, such as vaultOnTokenization so\n  // all the vault objects can have the same shape (instead\n  // of being specific to cards here)\n  if (this.merchantConfiguration.vault.vaultCard === false) {\n    this.saveCardInput.checked = false;\n  }\n\n  return hostedFields.create(hfOptions).then(function (hostedFieldsInstance) {\n    this.hostedFieldsInstance = hostedFieldsInstance;\n    this.hostedFieldsInstance.on('blur', this._onBlurEvent.bind(this));\n    this.hostedFieldsInstance.on('cardTypeChange', this._onCardTypeChangeEvent.bind(this));\n    this.hostedFieldsInstance.on('focus', this._onFocusEvent.bind(this));\n    this.hostedFieldsInstance.on('notEmpty', this._onNotEmptyEvent.bind(this));\n    this.hostedFieldsInstance.on('validityChange', this._onValidityChangeEvent.bind(this));\n\n    PASSTHROUGH_EVENTS.forEach(function (eventName) {\n      this.hostedFieldsInstance.on(eventName, function (event) {\n        this.model._emit('card:' + eventName, event);\n      }.bind(this));\n    }.bind(this));\n\n    this.model.asyncDependencyReady(CardView.ID);\n  }.bind(this)).catch(function (err) {\n    this.model.asyncDependencyFailed({\n      view: this.ID,\n      error: err\n    });\n  }.bind(this));\n};\n\nCardView.prototype._sendRequestableEvent = function () {\n  if (!this._isTokenizing) {\n    this.model.setPaymentMethodRequestable({\n      isRequestable: this._validateForm(),\n      type: constants.paymentMethodTypes.card\n    });\n  }\n};\n\nCardView.prototype._generateHostedFieldsOptions = function () {\n  var challenges = this.client.getConfiguration().gatewayConfiguration.challenges;\n  var hasCVVChallenge = challenges.indexOf('cvv') !== -1;\n  var hasPostalCodeChallenge = challenges.indexOf('postal_code') !== -1;\n  var overrides = this.merchantConfiguration.overrides;\n  var options = {\n    client: this.client,\n    fields: {\n      cardholderName: {\n        container: this._getFieldContainer('cardholder-name'),\n        placeholder: this.strings.cardholderNamePlaceholder\n      },\n      number: {\n        container: this._getFieldContainer('number'),\n        placeholder: generateCardNumberPlaceholder()\n      },\n      expirationDate: {\n        container: this._getFieldContainer('expiration'),\n        placeholder: this.strings.expirationDatePlaceholder\n      },\n      cvv: {\n        container: this._getFieldContainer('cvv'),\n        placeholder: addBullets(3)\n      },\n      postalCode: {\n        container: this._getFieldContainer('postal-code')\n      }\n    },\n    styles: {\n      input: {\n        'font-size': '16px',\n        'font-family': '-apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif',\n        color: '#000'\n      },\n      ':focus': {\n        color: 'black'\n      },\n      '::-webkit-input-placeholder': {\n        color: '#6a6a6a'\n      },\n      ':-moz-placeholder': {\n        color: '#6a6a6a'\n      },\n      '::-moz-placeholder': {\n        color: '#6a6a6a'\n      },\n      ':-ms-input-placeholder ': {\n        color: '#6a6a6a'\n      },\n      'input::-ms-clear': {\n        color: 'transparent'\n      }\n    }\n  };\n\n  if (!this.hasCardholderName) {\n    delete options.fields.cardholderName;\n  }\n\n  if (!hasCVVChallenge) {\n    delete options.fields.cvv;\n  }\n\n  if (!hasPostalCodeChallenge) {\n    delete options.fields.postalCode;\n  }\n\n  if (!overrides) { return options; }\n\n  if (overrides.fields) {\n    if (overrides.fields.cvv && typeof overrides.fields.cvv.placeholder !== 'undefined') {\n      this._hasCustomCVVPlaceholder = true;\n    }\n\n    Object.keys(overrides.fields).forEach(function (field) {\n      if ((field === 'cvv' || field === 'postalCode') && overrides.fields[field] === null) {\n        delete options.fields[field];\n\n        return;\n      }\n\n      if (!options.fields[field]) {\n        return;\n      }\n\n      assign(options.fields[field], overrides.fields[field], {\n        selector: options.fields[field].selector\n      });\n    });\n  }\n\n  if (overrides.styles) {\n    Object.keys(overrides.styles).forEach(function (style) {\n      if (overrides.styles[style] === null) {\n        delete options.styles[style];\n\n        return;\n      } else if (typeof overrides.styles[style] === 'string') {\n        // it's a class name, and should override the configured styles entirely\n        options.styles[style] = overrides.styles[style];\n\n        return;\n      }\n\n      normalizeStyles(overrides.styles[style]);\n      options.styles[style] = options.styles[style] || {};\n\n      assign(options.styles[style], overrides.styles[style]);\n    });\n  }\n\n  return options;\n};\n\nCardView.prototype._validateForm = function (showFieldErrors) {\n  var card, cardType, cardTypeSupported, state;\n  var isValid = true;\n  var supportedCardTypes = this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes;\n\n  if (!this.hostedFieldsInstance) {\n    return false;\n  }\n\n  state = this.hostedFieldsInstance.getState();\n\n  Object.keys(state.fields).forEach(function (key) {\n    var field = state.fields[key];\n\n    if (!showFieldErrors && !isValid) {\n      // return early if form is already invalid\n      // and we don't need to display all field errors\n      return;\n    }\n\n    if (field.isEmpty) {\n      if (!this.cardholderNameRequired && key === 'cardholderName') {\n        isValid = true;\n      } else {\n        isValid = false;\n\n        if (showFieldErrors) {\n          this.showFieldError(key, this.strings['fieldEmptyFor' + capitalize(key)]);\n        }\n      }\n    } else if (!field.isValid) {\n      isValid = false;\n\n      if (showFieldErrors) {\n        this.showFieldError(key, this.strings['fieldInvalidFor' + capitalize(key)]);\n      }\n    }\n  }.bind(this));\n\n  if (state.fields.number.isValid) {\n    card = state.cards[0];\n    cardType = card && constants.configurationCardTypes[card.type];\n    cardTypeSupported = cardType && supportedCardTypes.indexOf(cardType) !== -1;\n\n    if (!cardTypeSupported) {\n      isValid = false;\n\n      if (showFieldErrors) {\n        this.showFieldError('number', this.strings.unsupportedCardTypeError);\n      }\n    }\n  }\n\n  return isValid;\n};\n\nCardView.prototype.getPaymentMethod = function () { // eslint-disable-line consistent-return\n  var formIsValid = this._validateForm();\n\n  if (formIsValid) {\n    return {\n      type: constants.paymentMethodTypes.card\n    };\n  }\n};\n\nCardView.prototype.tokenize = function () {\n  var transitionCallback;\n  var self = this;\n  var state = self.hostedFieldsInstance.getState();\n  var tokenizeOptions = {\n    vault: this._shouldVault()\n  };\n\n  this.model.clearError();\n\n  if (!this._validateForm(true)) {\n    self.model.reportError('hostedFieldsFieldsInvalidError');\n    self.allowUserAction();\n\n    return Promise.reject(new DropinError(constants.errors.NO_PAYMENT_METHOD_ERROR));\n  }\n\n  if (!this.cardholderNameRequired && state.fields.cardholderName && state.fields.cardholderName.isEmpty) {\n    tokenizeOptions.fieldsToTokenize = Object.keys(state.fields).filter(function (field) {\n      return field !== 'cardholderName';\n    });\n  }\n\n  self._isTokenizing = true;\n\n  return self.hostedFieldsInstance.tokenize(tokenizeOptions).then(function (payload) {\n    var retainCardFields = self.merchantConfiguration.clearFieldsAfterTokenization === false;\n\n    if (!retainCardFields) {\n      Object.keys(state.fields).forEach(function (field) {\n        self.hostedFieldsInstance.clear(field);\n      });\n    }\n\n    if (self._shouldVault()) {\n      payload.vaulted = true;\n    }\n\n    return new Promise(function (resolve) {\n      transitionCallback = function () {\n        // Wait for braintree-sheet--tokenized class to be added in IE 9\n        // before attempting to remove it\n        setTimeout(function () {\n          self.model.addPaymentMethod(payload);\n          resolve(payload);\n          classList.remove(self.element, 'braintree-sheet--tokenized');\n        }, 0);\n      };\n\n      transitionHelper.onTransitionEnd(self.element, 'max-height', transitionCallback);\n\n      setTimeout(function () {\n        self.allowUserAction();\n        self._isTokenizing = false;\n      }, constants.CHANGE_ACTIVE_PAYMENT_METHOD_TIMEOUT);\n\n      classList.add(self.element, 'braintree-sheet--tokenized');\n    });\n  }).catch(function (err) {\n    self._isTokenizing = false;\n    // this is a little magical, but if the code property exists\n    // in the translations with the word Error appended to the end,\n    // then reportError will automatically print that translation.\n    // See https://github.com/braintree/braintree-web-drop-in/blob/6ecba73f2f16e8b7ae2119702ac162a1a985908e/src/views/main-view.js#L255-L256\n    self.model.reportError(err);\n    self.allowUserAction();\n\n    return Promise.reject(new DropinError({\n      message: constants.errors.NO_PAYMENT_METHOD_ERROR,\n      braintreeWebError: err\n    }));\n  });\n};\n\nCardView.prototype.showFieldError = function (field, errorMessage) {\n  var fieldError;\n  var fieldGroup = this.getElementById(camelCaseToKebabCase(field) + '-field-group');\n  var input = fieldGroup.querySelector('input');\n\n  if (!this.fieldErrors.hasOwnProperty(field)) {\n    this.fieldErrors[field] = this.getElementById(camelCaseToKebabCase(field) + '-field-error');\n  }\n\n  classList.add(fieldGroup, 'braintree-form__field-group--has-error');\n\n  fieldError = this.fieldErrors[field];\n  fieldError.innerHTML = errorMessage;\n\n  if (input) {\n    input.setAttribute('aria-invalid', true);\n  } else {\n    this.hostedFieldsInstance.setAttribute({\n      field: field,\n      attribute: 'aria-invalid',\n      value: true\n    });\n    this.hostedFieldsInstance.setMessage({\n      field: field,\n      message: errorMessage\n    });\n  }\n};\n\nCardView.prototype.hideFieldError = function (field) {\n  var fieldGroup = this.getElementById(camelCaseToKebabCase(field) + '-field-group');\n  var input = fieldGroup.querySelector('input');\n\n  if (!this.fieldErrors.hasOwnProperty(field)) {\n    this.fieldErrors[field] = this.getElementById(camelCaseToKebabCase(field) + '-field-error');\n  }\n\n  classList.remove(fieldGroup, 'braintree-form__field-group--has-error');\n\n  if (input) {\n    input.removeAttribute('aria-invalid');\n  } else {\n    this.hostedFieldsInstance.removeAttribute({\n      field: field,\n      attribute: 'aria-invalid'\n    });\n    this.hostedFieldsInstance.setMessage({\n      field: field,\n      message: ''\n    });\n  }\n};\n\nCardView.prototype.teardown = function () {\n  return this.hostedFieldsInstance.teardown();\n};\n\nCardView.prototype._shouldVault = function () {\n  return !this.model.isGuestCheckout && this.saveCardInput.checked;\n};\n\nCardView.prototype._getFieldContainer = function (field) {\n  // we committed to not changing the data-braintree-id fields\n  // so we need to convert this field to the id used in the HTML\n  if (field === 'expiration') {\n    field = 'expiration-date';\n  }\n\n  return this.getElementById(field + '-field-group').querySelector('.braintree-form__hosted-field');\n};\n\nCardView.prototype._onBlurEvent = function (event) {\n  var field = event.fields[event.emittedBy];\n  var fieldGroup = this.getElementById(camelCaseToKebabCase(event.emittedBy) + '-field-group');\n\n  classList.remove(fieldGroup, 'braintree-form__field-group--is-focused');\n\n  if (field.isPotentiallyValid) {\n    this.hideFieldError(event.emittedBy);\n  }\n\n  if (this._shouldApplyFieldEmptyError(event.emittedBy, field)) {\n    this.showFieldError(event.emittedBy, this.strings['fieldEmptyFor' + capitalize(event.emittedBy)]);\n  } else if (!field.isEmpty && !field.isValid) {\n    this.showFieldError(event.emittedBy, this.strings['fieldInvalidFor' + capitalize(event.emittedBy)]);\n  } else if (event.emittedBy === 'number' && !this._isCardTypeSupported(event.cards[0])) {\n    this.showFieldError('number', this.strings.unsupportedCardTypeError);\n  }\n\n  this.model._emit('card:blur', event);\n\n  setTimeout(function () {\n    // when focusing on a field by clicking the label,\n    // we need to wait a bit for the iframe to be\n    // focused properly before applying validations\n    if (this._shouldApplyFieldEmptyError(event.emittedBy, field)) {\n      this.showFieldError(event.emittedBy, this.strings['fieldEmptyFor' + capitalize(event.emittedBy)]);\n    }\n  }.bind(this), 150);\n};\n\nCardView.prototype._onCardTypeChangeEvent = function (event) {\n  var cardType;\n  var cardNumberHrefLink = '#iconCardFront';\n  var cvvHrefLink = '#iconCVVBack';\n  var cvvDescriptor = this.strings.cvvThreeDigitLabelSubheading;\n  var cvvPlaceholder = addBullets(3);\n  var numberFieldGroup = this.getElementById('number-field-group');\n\n  if (event.cards.length === 1) {\n    cardType = event.cards[0].type;\n    cardNumberHrefLink = '#icon-' + cardType;\n    if (cardType === 'american-express') {\n      cvvHrefLink = '#iconCVVFront';\n      cvvDescriptor = this.strings.cvvFourDigitLabelSubheading;\n      cvvPlaceholder = addBullets(4);\n    }\n    // Keep icon visible when field is not focused\n    classList.add(numberFieldGroup, 'braintree-form__field-group--card-type-known');\n  } else {\n    classList.remove(numberFieldGroup, 'braintree-form__field-group--card-type-known');\n  }\n\n  // if the number field emitted the card change event fires\n  // and the card type is supported, we need to clear out the errors\n  // field in case that there was a \"card type is unsupported\" error\n  if (event.emittedBy === 'number' && this._isCardTypeSupported(event.cards[0])) {\n    this.hideFieldError(event.emittedBy);\n  }\n\n  this.cardNumberIconSvg.setAttribute('xlink:href', cardNumberHrefLink);\n\n  if (this.hasCVV) {\n    this.cvvIconSvg.setAttribute('xlink:href', cvvHrefLink);\n    this.cvvLabelDescriptor.innerHTML = cvvDescriptor;\n\n    if (!this._hasCustomCVVPlaceholder) {\n      this.hostedFieldsInstance.setAttribute({\n        field: 'cvv',\n        attribute: 'placeholder',\n        value: cvvPlaceholder\n      });\n    }\n  }\n\n  this.model._emit('card:cardTypeChange', event);\n};\n\nCardView.prototype._onFocusEvent = function (event) {\n  var fieldGroup = this.getElementById(camelCaseToKebabCase(event.emittedBy) + '-field-group');\n\n  classList.add(fieldGroup, 'braintree-form__field-group--is-focused');\n\n  this.model._emit('card:focus', event);\n};\n\nCardView.prototype._onNotEmptyEvent = function (event) {\n  this.hideFieldError(event.emittedBy);\n\n  this.model._emit('card:notEmpty', event);\n};\n\nCardView.prototype._onValidityChangeEvent = function (event) {\n  var isValid;\n  var field = event.fields[event.emittedBy];\n\n  if (event.emittedBy === 'number' && event.cards[0]) {\n    isValid = field.isValid && this._isCardTypeSupported(event.cards[0]);\n  } else {\n    isValid = field.isValid;\n  }\n\n  classList.toggle(field.container, 'braintree-form__field--valid', isValid);\n\n  if (field.isPotentiallyValid) {\n    this.hideFieldError(event.emittedBy);\n  }\n\n  this._sendRequestableEvent();\n\n  this.model._emit('card:validityChange', event);\n};\n\nCardView.prototype.requestPaymentMethod = function () {\n  this.preventUserAction();\n\n  return this.tokenize();\n};\n\nCardView.prototype.onSelection = function () {\n  if (!this.hostedFieldsInstance) {\n    return;\n  }\n\n  setTimeout(function () {\n    if (this.hasCardholderName) {\n      this.hostedFieldsInstance.focus('cardholderName');\n    } else {\n      this.hostedFieldsInstance.focus('number');\n    }\n  }.bind(this), 50);\n\n  this._sendRequestableEvent();\n};\n\nCardView.prototype._hideUnsupportedCardIcons = function () {\n  var supportedCardTypes = this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes;\n\n  Object.keys(constants.configurationCardTypes).forEach(function (paymentMethodCardType) {\n    var cardIcon;\n    var configurationCardType = constants.configurationCardTypes[paymentMethodCardType];\n\n    if (supportedCardTypes.indexOf(configurationCardType) === -1) {\n      cardIcon = this.getElementById(paymentMethodCardType + '-card-icon');\n      classList.add(cardIcon, 'braintree-hidden');\n    }\n  }.bind(this));\n};\n\nCardView.prototype._isCardTypeSupported = function (card) {\n  var cardType = card && card.type;\n  var configurationCardType = constants.configurationCardTypes[cardType];\n  var supportedCardTypes = this.client.getConfiguration().gatewayConfiguration.creditCards.supportedCardTypes;\n\n  return supportedCardTypes.indexOf(configurationCardType) !== -1;\n};\n\nCardView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n  var disabledByMerchant = options.merchantConfiguration.card === false;\n\n  return Promise.resolve(!disabledByMerchant && gatewayConfiguration.creditCards.supportedCardTypes.length > 0);\n};\n\nCardView.prototype._shouldApplyFieldEmptyError = function (fieldId, field) {\n  if (!field.isEmpty) {\n    return false;\n  }\n\n  if (fieldId === 'cardholderName' && !this.cardholderNameRequired) {\n    return false;\n  }\n\n  return isCardViewElement();\n};\n\nfunction isCardViewElement() {\n  var activeId = document.activeElement && document.activeElement.id;\n  var isHostedFieldsElement = document.activeElement instanceof HTMLIFrameElement && activeId.indexOf('braintree-hosted-field') !== -1;\n\n  return isHostedFieldsElement;\n}\n\nfunction camelCaseToKebabCase(string) {\n  return string.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\nfunction capitalize(string) {\n  return string[0].toUpperCase() + string.substr(1);\n}\n\nfunction normalizeStyles(styles) {\n  Object.keys(styles).forEach(function (style) {\n    var transformedKeyName = camelCaseToKebabCase(style);\n\n    styles[transformedKeyName] = styles[style];\n  });\n}\n\nfunction addBullets(number) {\n  var bulletCharacter = isUtf8() ? '•' : '*';\n\n  return Array(number + 1).join(bulletCharacter);\n}\n\nfunction generateCardNumberPlaceholder() {\n  var four = addBullets(4);\n\n  return [four, four, four, four].join(' ');\n}\n\nmodule.exports = CardView;\n\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/dropin-error\":206,\"../../lib/is-utf-8\":210,\"../../lib/promise\":213,\"../../lib/transition-helper\":217,\"../base-view\":254,\"@braintree/class-list\":40,\"braintree-web/hosted-fields\":86}],263:[function(require,module,exports){\n(function (global){(function (){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar BaseView = require('../base-view');\nvar btGooglePay = require('braintree-web/google-payment');\nvar DropinError = require('../../lib/dropin-error');\nvar constants = require('../../constants');\nvar assets = require('@braintree/asset-loader');\nvar Promise = require('../../lib/promise');\nvar analytics = require('../../lib/analytics');\n\nfunction GooglePayView() {\n  BaseView.apply(this, arguments);\n}\n\nGooglePayView.prototype = Object.create(BaseView.prototype);\nGooglePayView.prototype.constructor = GooglePayView;\nGooglePayView.ID = GooglePayView.prototype.ID = constants.paymentOptionIDs.googlePay;\n\nGooglePayView.prototype.initialize = function () {\n  var self = this;\n  var buttonOptions, googlePayVersion, merchantId;\n\n  self.googlePayConfiguration = assign({}, self.model.merchantConfiguration.googlePay);\n  googlePayVersion = self.googlePayConfiguration.googlePayVersion;\n  merchantId = self.googlePayConfiguration.merchantId;\n\n  buttonOptions = assign({\n    buttonType: 'short'\n  }, self.googlePayConfiguration.button, {\n    onClick: function (event) {\n      event.preventDefault();\n\n      self.preventUserAction();\n\n      self.tokenize().then(function () {\n        self.allowUserAction();\n      });\n    }\n  });\n\n  delete self.googlePayConfiguration.googlePayVersion;\n  delete self.googlePayConfiguration.merchantId;\n  delete self.googlePayConfiguration.button;\n\n  return btGooglePay.create({\n    client: self.client,\n    googlePayVersion: googlePayVersion,\n    googleMerchantId: merchantId\n  }).then(function (googlePayInstance) {\n    self.googlePayInstance = googlePayInstance;\n    self.paymentsClient = createPaymentsClient(self.client);\n  }).then(function () {\n    var buttonContainer = self.getElementById('google-pay-button');\n\n    buttonContainer.appendChild(self.paymentsClient.createButton(buttonOptions));\n\n    self.model.asyncDependencyReady(GooglePayView.ID);\n  }).catch(function (err) {\n    self.model.asyncDependencyFailed({\n      view: self.ID,\n      error: new DropinError(err)\n    });\n  });\n};\n\nGooglePayView.prototype.tokenize = function () {\n  var self = this;\n  var paymentDataRequest = self.googlePayInstance.createPaymentDataRequest(self.googlePayConfiguration);\n  var rawPaymentData;\n\n  return self.paymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) {\n    rawPaymentData = paymentData;\n\n    return self.googlePayInstance.parseResponse(paymentData);\n  }).then(function (tokenizePayload) {\n    tokenizePayload.rawPaymentData = rawPaymentData;\n    self.model.addPaymentMethod(tokenizePayload);\n  }).catch(function (err) {\n    var reportedError = err;\n\n    if (err.statusCode === 'DEVELOPER_ERROR') {\n      console.error(err); // eslint-disable-line no-console\n      reportedError = 'developerError';\n    } else if (err.statusCode === 'CANCELED') {\n      analytics.sendEvent(self.client, 'googlepay.loadPaymentData.canceled');\n\n      return;\n    } else if (err.statusCode) {\n      analytics.sendEvent(self.client, 'googlepay.loadPaymentData.failed');\n    }\n\n    self.model.reportError(reportedError);\n  });\n};\n\nGooglePayView.prototype.updateConfiguration = function (key, value) {\n  this.googlePayConfiguration[key] = value;\n};\n\nGooglePayView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n\n  if (!(gatewayConfiguration.androidPay && Boolean(options.merchantConfiguration.googlePay))) {\n    return Promise.resolve(false);\n  }\n\n  return Promise.resolve().then(function () {\n    if (!(global.google && global.google.payments && global.google.payments.api && global.google.payments.api.PaymentsClient)) {\n      return assets.loadScript({\n        id: constants.GOOGLE_PAYMENT_SCRIPT_ID,\n        src: constants.GOOGLE_PAYMENT_SOURCE\n      });\n    }\n\n    return Promise.resolve();\n  }).then(function () {\n    var paymentsClient = createPaymentsClient(options.client);\n\n    return paymentsClient.isReadyToPay({\n      allowedPaymentMethods: ['CARD', 'TOKENIZED_CARD']\n    });\n  }).then(function (response) {\n    return Boolean(response.result);\n  });\n};\n\nfunction createPaymentsClient(client) {\n  return new global.google.payments.api.PaymentsClient({\n    environment: client.getConfiguration().gatewayConfiguration.environment === 'production' ? 'PRODUCTION' : 'TEST'\n  });\n}\n\nmodule.exports = GooglePayView;\n\n}).call(this)}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../constants\":196,\"../../lib/analytics\":201,\"../../lib/assign\":202,\"../../lib/dropin-error\":206,\"../../lib/promise\":213,\"../base-view\":254,\"@braintree/asset-loader\":1,\"braintree-web/google-payment\":79}],264:[function(require,module,exports){\n'use strict';\n\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\n\nvar result = {};\n\nresult[paymentOptionIDs.applePay] = require('./apple-pay-view');\nresult[paymentOptionIDs.card] = require('./card-view');\nresult[paymentOptionIDs.googlePay] = require('./google-pay-view');\nresult[paymentOptionIDs.paypal] = require('./paypal-view');\nresult[paymentOptionIDs.paypalCredit] = require('./paypal-credit-view');\nresult[paymentOptionIDs.venmo] = require('./venmo-view');\n\nmodule.exports = result;\n\n},{\"../../constants\":196,\"./apple-pay-view\":260,\"./card-view\":262,\"./google-pay-view\":263,\"./paypal-credit-view\":265,\"./paypal-view\":266,\"./venmo-view\":267}],265:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar Promise = require('../../lib/promise');\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\nvar BasePayPalView = require('./base-paypal-view');\n\nfunction PayPalCreditView() {\n  BasePayPalView.apply(this, arguments);\n\n  this._isPayPalCredit = true;\n}\n\nPayPalCreditView.prototype = Object.create(BasePayPalView.prototype);\nPayPalCreditView.prototype.constructor = PayPalCreditView;\nPayPalCreditView.ID = PayPalCreditView.prototype.ID = paymentOptionIDs.paypalCredit;\n\nPayPalCreditView.isEnabled = function (options) {\n  if (!options.merchantConfiguration.paypalCredit) {\n    return Promise.resolve(false);\n  }\n\n  return BasePayPalView.isEnabled(assign({\n    viewID: PayPalCreditView.ID\n  }, options));\n};\nmodule.exports = PayPalCreditView;\n\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/promise\":213,\"./base-paypal-view\":261}],266:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar Promise = require('../../lib/promise');\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\nvar BasePayPalView = require('./base-paypal-view');\n\nfunction PayPalView() {\n  BasePayPalView.apply(this, arguments);\n}\n\nPayPalView.prototype = Object.create(BasePayPalView.prototype);\nPayPalView.prototype.constructor = PayPalView;\nPayPalView.ID = PayPalView.prototype.ID = paymentOptionIDs.paypal;\n\nPayPalView.isEnabled = function (options) {\n  if (!options.merchantConfiguration.paypal) {\n    return Promise.resolve(false);\n  }\n\n  return BasePayPalView.isEnabled(assign({\n    viewID: PayPalView.ID\n  }, options));\n};\n\nmodule.exports = PayPalView;\n\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/promise\":213,\"./base-paypal-view\":261}],267:[function(require,module,exports){\n'use strict';\n\nvar assign = require('../../lib/assign').assign;\nvar BaseView = require('../base-view');\nvar btVenmo = require('braintree-web/venmo');\nvar DropinError = require('../../lib/dropin-error');\nvar Promise = require('../../lib/promise');\nvar paymentOptionIDs = require('../../constants').paymentOptionIDs;\n\nfunction VenmoView() {\n  BaseView.apply(this, arguments);\n}\n\nVenmoView.prototype = Object.create(BaseView.prototype);\nVenmoView.prototype.constructor = VenmoView;\nVenmoView.ID = VenmoView.prototype.ID = paymentOptionIDs.venmo;\n\nVenmoView.prototype.initialize = function () {\n  var self = this;\n  var venmoConfiguration = assign({}, self.model.merchantConfiguration.venmo, {client: this.client});\n\n  return btVenmo.create(venmoConfiguration).then(function (venmoInstance) {\n    self.venmoInstance = venmoInstance;\n\n    if (!self.venmoInstance.hasTokenizationResult()) {\n      return Promise.resolve();\n    }\n\n    return self.venmoInstance.tokenize().then(function (payload) {\n      self.model.reportAppSwitchPayload(payload);\n    }).catch(function (err) {\n      if (self._isIgnorableError(err)) {\n        return;\n      }\n      self.model.reportAppSwitchError(paymentOptionIDs.venmo, err);\n    });\n  }).then(function () {\n    var button = self.getElementById('venmo-button');\n\n    button.addEventListener('click', function (event) {\n      event.preventDefault();\n\n      self.preventUserAction();\n\n      return self.venmoInstance.tokenize().then(function (payload) {\n        self.model.addPaymentMethod(payload);\n      }).catch(function (tokenizeErr) {\n        if (self._isIgnorableError(tokenizeErr)) {\n          return;\n        }\n\n        self.model.reportError(tokenizeErr);\n      }).then(function () {\n        self.allowUserAction();\n      });\n    });\n\n    self.model.asyncDependencyReady(VenmoView.ID);\n  }).catch(function (err) {\n    self.model.asyncDependencyFailed({\n      view: self.ID,\n      error: new DropinError(err)\n    });\n  });\n};\n\nVenmoView.prototype._isIgnorableError = function (error) {\n  // customer cancels the flow in the app\n  // we don't emit an error because the customer\n  // initiated that action\n  return error.code === 'VENMO_APP_CANCELED' || error.code === 'VENMO_DESKTOP_CANCELED';\n};\n\nVenmoView.isEnabled = function (options) {\n  var gatewayConfiguration = options.client.getConfiguration().gatewayConfiguration;\n  var venmoEnabled = gatewayConfiguration.payWithVenmo && Boolean(options.merchantConfiguration.venmo);\n\n  if (!venmoEnabled) {\n    return Promise.resolve(false);\n  }\n\n  return Promise.resolve(btVenmo.isBrowserSupported(options.merchantConfiguration.venmo));\n};\n\nmodule.exports = VenmoView;\n\n},{\"../../constants\":196,\"../../lib/assign\":202,\"../../lib/dropin-error\":206,\"../../lib/promise\":213,\"../base-view\":254,\"braintree-web/venmo\":159}]},{},[199])(199)\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/braintree-web-drop-in/dist/browser/dropin.js\n// module id = 1491\n// module chunks = 1","module.exports = \"<h1 class=\\\"page-header\\\">\\n    {{'SUBSCRIPTION.TITLE' | translate:lang}}\\n</h1>\\n<div class=\\\"panel-body subscription\\\">\\n    <div class=\\\"sub-wizard clearfix\\\" *ngIf=\\\"!subscriptionFinished\\\">\\n        <ol class=\\\"row wizard-steps clearfix clickable\\\" role=\\\"tablist\\\">\\n            <li class=\\\"col-md-6\\\" role=\\\"tab\\\" aria-selected=\\\"true\\\" [ngClass]=\\\"{active:currentStep == 1}\\\" (click)=\\\"goToStep(1)\\\">\\n                <span class=\\\"label badge-inverse\\\">1</span>\\n                <a href=\\\"javascript:;\\\">{{'SUBSCRIPTION.STEPS.STEP_1.TITLE' | translate:lang}}</a>\\n                <a href=\\\"javascript:;\\\"><small>{{'SUBSCRIPTION.STEPS.STEP_1.SUBTITLE' | translate:lang}}</small></a>\\n            </li>\\n            <li class=\\\"col-md-6\\\" role=\\\"tab\\\" aria-selected=\\\"false\\\" [ngClass]=\\\"{active:currentStep == 2}\\\" (click)=\\\"goToStep(2)\\\">\\n                <span class=\\\"label badge-inverse\\\">2</span>\\n                <a href=\\\"javascript:;\\\">{{'SUBSCRIPTION.STEPS.STEP_2.TITLE' | translate:lang}}</a>\\n                <a href=\\\"javascript:;\\\"><small>{{'SUBSCRIPTION.STEPS.STEP_2.SUBTITLE' | translate:lang}}</small></a>\\n            </li>\\n        </ol>\\n        <!-- begin wizard step-1 -->\\n        <div class=\\\"row row-eq-height\\\" [hidden]=\\\"currentStep != 1\\\">\\n            <div class=\\\"col-md-6\\\">\\n                <div class=\\\"well\\\">\\n                    <fieldset>\\n                        <legend class=\\\"width-full\\\">{{'SUBSCRIPTION.STEPS.STEP_1.SECTION_1.TITLE' | translate:lang}}</legend>\\n                        <div class=\\\"plan\\\">\\n                            <div class=\\\"inner-box selected-full\\\">\\n                                <div class=\\\"plan-header text-center\\\">\\n                                    <h3 class=\\\"plan-title\\\">{{subscriptionOrder?.product_plan.name}}</h3>\\n                                    <h2 class=\\\"plan-price\\\">\\n                                        <span>{{subscriptionOrder?.product_plan.base_price.gross | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}} / {{ 'PLAN_CARROUSEL.MONTH' | translate:lang }}</span>\\n                                    </h2>\\n                                </div>\\n\\n                                <ul class=\\\"plan-list text-center\\\">\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.level <= 1\\\">\\n                                        <span>Basic player for testing (Web)</span>\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.level > 1\\\">\\n                                        <span>Player for commercial use</span>\\n                                        <span>(Web, iOS, Android)</span>\\n                                    </li>\\n                                    <li *ngIf=\\\"!subscriptionOrder?.product_plan.sla_info || subscriptionOrder?.product_plan.sla_info == 'none'\\\">\\n                                        Support (not guaranteed)\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.sla_info && subscriptionOrder?.product_plan.sla_info != 'none'\\\">\\n                                        Support: {{subscriptionOrder?.product_plan.sla_info}}\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan?.statistics_type\\\">\\n                                        {{ 'PLAN_CARROUSEL.EXTRA.STATS' | translate:lang }}: {{ subscriptionOrder?.product_plan?.statistics_type }}\\n                                        <span *ngIf=\\\"subscriptionOrder?.product_plan?.statistics_type == 'basic'\\\"><br/>(audience stats only)</span>\\n                                        <span *ngIf=\\\"subscriptionOrder?.product_plan?.statistics_type == 'extended'\\\"><br/>(audience, geo, tech, realtime analytics, engagement rate)</span>\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.has_ads_support\\\">\\n                                        {{ 'PLAN_CARROUSEL.EXTRA.ADS' | translate:lang }}\\n                                    </li>\\n                                    <li *ngIf=\\\"subscriptionOrder?.product_plan.has_drm_support\\\">\\n                                        {{ 'PLAN_CARROUSEL.EXTRA.DRM' | translate:lang }}\\n                                    </li>\\n                                </ul>\\n                            </div>\\n\\n                        </div>\\n                    </fieldset>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-6\\\">\\n                <div class=\\\"well\\\">\\n                    <fieldset>\\n                        <legend class=\\\"width-full\\\">{{'SUBSCRIPTION.STEPS.STEP_1.SECTION_2.TITLE' | translate:lang}} <small>{{'SUBSCRIPTION.STEPS.STEP_1.SECTION_2.SUBTITLE' | translate:lang}}</small>\\n                        </legend>\\n                        <div class=\\\"well billing-container\\\">\\n                            <table>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.COMPANY' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h4>{{account?.account?.details.company_name}}</h4>\\n                                    </td>\\n                                </tr>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.TAX_NO' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h5>{{account?.account?.details.tax_no}}</h5>\\n                                    </td>\\n                                </tr>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.ADDRESS' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h5>{{account?.account?.details.address}}</h5>\\n                                    </td>\\n                                </tr>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.CITY' | translate:lang}}, {{'SUBSCRIPTION.LABEL.POSTAL_CODE' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h5>{{account?.account?.details.city}}, {{account?.account?.details.postal_code}}</h5>\\n                                    </td>\\n                                </tr>\\n                                <tr>\\n                                    <td><span class=\\\"subtitle\\\" *ngIf=\\\"account?.account?.details.state\\\">{{'SUBSCRIPTION.LABEL.STATE' | translate:lang}}, </span>\\n                                        <span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.COUNTRY' | translate:lang}}:</span>\\n                                    </td>\\n                                    <td>\\n                                        <h5><span class=\\\"subtitle\\\" *ngIf=\\\"account?.account?.details.state\\\">{{account?.account?.details.state}} - </span>{{account?.account?.details.country}}</h5>\\n                                    </td>\\n                                </tr>\\n                                <tr *ngIf=\\\"account?.account?.details.phone_number\\\">\\n                                    <td><span class=\\\"subtitle\\\">{{'SUBSCRIPTION.LABEL.PHONE_NUMBER' | translate:lang}}:</span></td>\\n                                    <td>\\n                                        <h5>{{account?.account?.details.phone_number}}</h5>\\n                                    </td>\\n                                </tr>\\n                            </table>\\n                            <button class=\\\"btn btn-primary m-t-20\\\" (click)=\\\"goToAccountView()\\\">{{'SUBSCRIPTION.BUTTON.EDIT' | translate:lang}}</button>\\n                        </div>\\n                    </fieldset>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- end wizard step-1 -->\\n        <!-- begin wizard step-2 -->\\n        <div class=\\\"row row-eq-height\\\" [hidden]=\\\"currentStep != 2\\\">\\n            <!-- begin Payment method -->\\n            <div class=\\\"col-md-6\\\">\\n                <div class=\\\"well\\\">\\n                    <fieldset>\\n                        <legend class=\\\"width-full\\\">{{'SUBSCRIPTION.STEPS.STEP_2.SECTION_1.TITLE' | translate:lang}} <small>{{'SUBSCRIPTION.STEPS.STEP_2.SECTION_1.SUBTITLE' | translate:lang}}</small></legend>\\n                        <div>\\n                            <div class=\\\"alert alert-danger fade in m-b-15\\\" *ngIf=\\\"paymentError\\\">\\n                                {{paymentErrorMessage}}\\n                                <span class=\\\"close\\\" data-dismiss=\\\"alert\\\" (click)=\\\"paymentError=false\\\">x</span>\\n                            </div>\\n                            <form #paymentForm=\\\"ngForm\\\" id=\\\"paymentForm\\\" method=\\\"post\\\" (ngSubmit)=\\\"onPaymentFormSubmit()\\\">\\n                                <div id=\\\"payment-container\\\"></div>\\n                            </form>\\n                        </div>\\n                    </fieldset>\\n                </div>\\n            </div>\\n            <!-- begin invoice -->\\n            <div class=\\\"col-md-6\\\">\\n                <div class=\\\"well\\\">\\n                    <fieldset>\\n                        <legend class=\\\"width-full\\\">{{'SUBSCRIPTION.STEPS.STEP_2.SECTION_2.TITLE' | translate:lang}} <small>{{'SUBSCRIPTION.STEPS.STEP_2.SECTION_2.TITLE' | translate:lang}}</small></legend>\\n                        <div class=\\\"alert alert-danger fade in m-b-15\\\" *ngIf=\\\"subscriptionError\\\">\\n                            {{subscriptionError}}\\n                            <span class=\\\"close\\\" data-dismiss=\\\"alert\\\" (click)=\\\"subscriptionError=null\\\">x</span>\\n                        </div>\\n                        <div class=\\\"invoice\\\">\\n                            <div class=\\\"invoice-content\\\">\\n                                <div class=\\\"table-responsive\\\">\\n                                    <table class=\\\"table table-invoice\\\">\\n                                        <thead>\\n                                            <tr>\\n                                                <th>PRODUCT DESCRIPTION</th>\\n                                                <th>PRICE</th>\\n                                                <th>LINE TOTAL</th>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr>\\n                                                <td>\\n                                                    <strong>{{subscriptionOrder?.product_plan.name}}</strong><br />\\n                                                    <small>{{subscriptionOrder?.product_plan.description}}</small>\\n                                                </td>\\n                                                <td>{{subscriptionOrder?.product_plan.base_price.gross | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}</td>\\n                                                <td>{{subscriptionOrder?.product_plan.base_price.gross | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}</td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                                <div class=\\\"invoice-price\\\">\\n                                    <div class=\\\"invoice-price-left\\\">\\n                                        <div class=\\\"invoice-price-row\\\">\\n                                            <div class=\\\"sub-price\\\">\\n                                                <small>SUBTOTAL</small>{{subscriptionOrder?.product_plan.base_price.net |\\n                                                currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}\\n                                            </div>\\n                                            <div class=\\\"sub-price\\\" *ngIf=\\\"subscriptionOrder?.product_plan.base_price.net > 0\\\">\\n                                                <i class=\\\"fa fa-plus\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"sub-price\\\" *ngIf=\\\"subscriptionOrder?.product_plan.base_price.net > 0\\\">\\n                                                <small>Tax(\\n                                                <span *ngIf=\\\"subscriptionOrder?.product_plan.base_price.tax >= 0\\\">{{ subscriptionOrder?.product_plan.base_price.tax }}%</span>\\n                                                <span *ngIf=\\\"!(subscriptionOrder?.product_plan.base_price.tax >= 0)\\\">{{ subscriptionOrder?.product_plan.base_price.tax }}</span>\\n                                                )</small>\\n                                                <span *ngIf=\\\"subscriptionOrder?.product_plan.base_price.tax >= 0\\\">\\n                                                    {{subscriptionOrder?.product_plan.base_price.net\\n                                                        * subscriptionOrder?.product_plan.base_price.tax/100 | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}\\n                                                </span>\\n                                                <span *ngIf=\\\"!(subscriptionOrder?.product_plan.base_price.tax >= 0)\\\">{{ subscriptionOrder?.product_plan.base_price.tax }}</span>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"invoice-price-right\\\">\\n                                        <small>TOTAL</small> {{subscriptionOrder?.product_plan.base_price.gross | currency:subscriptionOrder?.product_plan.base_price.currency:true:'1.0-2'}}\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!-- end invoice -->\\n                        <div class=\\\"text-center m-t-15\\\">\\n                            <div class=\\\"checkbox\\\">\\n                                <label [ngClass]=\\\"{'danger':(termsAccepted == false && braintreeNonce != null)}\\\">\\n                                <input type=\\\"checkbox\\\" [(ngModel)]=\\\"termsAccepted\\\">{{'SUBSCRIPTION.TERMS_AND_CONDITIONS.LABEL.1' | translate:lang}}<a href='javascript:;' class='link' (click)='showTermsAndConditions()'>{{'SUBSCRIPTION.TERMS_AND_CONDITIONS.LABEL.2' | translate:lang}}</a>\\n                            </label>\\n                                <div *ngIf=\\\"!termsAccepted && braintreeNonce\\\" class=\\\"required\\\">{{'SUBSCRIPTION.TERMS_AND_CONDITIONS.ERROR' | translate:lang}}</div>\\n                            </div>\\n                            <button class=\\\"btn btn-success btn-lg\\\" type=\\\"submit\\\" form=\\\"paymentForm\\\">{{'SUBSCRIPTION.BUTTON.SUBMIT' | translate:lang}}</button>\\n                        </div>\\n                    </fieldset>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- end wizard step-2 -->\\n        <div class=\\\"nav-buttons\\\">\\n            <button class=\\\"btn btn-bradmax btn-lg\\\" *ngIf=\\\"currentStep == 2\\\" type=\\\"button\\\" (click)=\\\"goToStep(currentStep - 1)\\\"><i class=\\\"fa fa-chevron-left\\\"></i> {{'SUBSCRIPTION.BUTTON.PREVIOUS' | translate:lang}}</button>\\n            <button class=\\\"btn btn-bradmax btn-lg\\\" *ngIf=\\\"currentStep == 1\\\" type=\\\"button\\\" (click)=\\\"goToStep(currentStep + 1)\\\">{{'SUBSCRIPTION.BUTTON.NEXT' | translate:lang}} <i class=\\\"fa fa-chevron-right\\\"></i></button>\\n        </div>\\n    </div>\\n    <!-- begin Thanks view -->\\n    <div *ngIf=\\\"subscriptionFinished\\\" class=\\\"fadeInUpBig thanks\\\">\\n        <div class=\\\"jumbotron m-b-0 text-center\\\">\\n            <h1>{{'SUBSCRIPTION.MESSAGE.THANKS.TITLE' | translate:lang}}</h1>\\n            <p>{{'SUBSCRIPTION.MESSAGE.THANKS.P1' | translate:lang}}</p>\\n            <p><a class=\\\"btn btn-bradmax btn-lg\\\" role=\\\"button\\\" (click)=\\\"goToPlayerView()\\\">{{'SUBSCRIPTION.BUTTON.NAV_PLAYER' | translate:lang}}</a></p>\\n        </div>\\n    </div>\\n    <!-- end Thanks view -->\\n</div>\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/subscription/subscription.view.component.html\n// module id = 1492\n// module chunks = 1","module.exports = \"<div class=\\\"content\\\"\\n\\t  [class.with-sidebar]=\\\"sidebar.isOpen && !config.mobile\\\"\\n\\t  [class.with-header]=\\\"!isAppInIframe && !view.heartbeatMode\\\">\\n\\t<router-outlet></router-outlet>\\n</div>\\n\\n<sidebar></sidebar>\\n\\n<header *ngIf=\\\"!isAppInIframe && !view.heartbeatMode\\\"\\n\\t\\t  [mobile]=\\\"config.mobile\\\">\\n\\t<ng-template [ngIf]=\\\"!config.mobile\\\">\\n\\t\\t<a routerLink=\\\"\\\" title=\\\"bradmax admin\\\">\\n\\t\\t\\t<img [src]=\\\"url.file(config.logo.src)\\\" style=\\\"margin: 8px;\\\"\\n\\t\\t\\t\\t  [alt]=\\\"config.logo.alt\\\" [title]=\\\"config.logo.title\\\" width=\\\"150px\\\" height=\\\"38px\\\" />\\n\\t\\t</a>\\n\\t</ng-template>\\n</header>\\n<view-to-top></view-to-top>\\n\\n<!--<div style=\\\"position: absolute;z-index: 99999;top: 0;left: 50%;margin-left:-30px;\\\">\\n\\t<small>\\n\\t\\t<code [class.text-success]=\\\"view.xs\\\">xs</code>\\n\\t\\t<code [class.text-success]=\\\"view.sm\\\">sm</code>\\n\\t\\t<code [class.text-success]=\\\"view.md\\\">md</code>\\n\\t\\t<code [class.text-success]=\\\"view.lg\\\">lg</code>\\n\\t</small>\\n</div>-->\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/content/content.component.html\n// module id = 1494\n// module chunks = 1","module.exports = \"<section class=\\\"\\\">\\n\\t<div class=\\\"container d-flex flex-column\\\">\\n\\t\\t<div class=\\\"row align-items-center justify-content-center gx-0 min-vh-100\\\">\\n\\t\\t\\t<!-- Image -->\\n\\t\\t\\t<div class=\\\"col-8 col-md-6 col-lg-7 offset-md-1 order-md-2 mt-auto mt-md-0 pt-8 pb-4 py-md-11\\\">\\n\\t\\t\\t\\t<img src=\\\"https://bradmax.com/static/client/client_panel/img/login/banner.svg\\\" alt=\\\"banner\\\" class=\\\"img-fluid\\\">\\n\\t\\t\\t</div>\\n\\t\\t\\t<!-- Form -->\\n\\t\\t\\t<div class=\\\"col-12 col-md-5 col-lg-4 order-md-1 mb-auto mb-md-0 pb-8 py-md-11\\\">\\n\\n\\t\\t\\t\\t<!-- Heading -->\\n\\t\\t\\t\\t<div class=\\\"header-brand mb-3\\\">\\n\\t\\t\\t\\t\\t<img src=\\\"https://bradmax.com/static/sales_v2/img/bradmax/2025/full.black.yellow.svg\\\" alt=\\\"Bradmax\\\" class=\\\"img-brand mb-2\\\">\\n\\t\\t\\t\\t\\t<p class=\\\"fs-4 lh-1 font-monospace text-start text-black text-wide text-uppercase\\\">Media Player</p>\\n\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t<!-- Form -->\\n\\t\\t\\t\\t<iframe name=\\\"auth-form\\\" style=\\\"display:none\\\" src=\\\"about:blank\\\"></iframe>\\n\\t\\t\\t\\t<form action=\\\"about:blank\\\" #form method=\\\"post\\\" target=\\\"auth-form\\\" class=\\\"mb-5\\\"\\n\\t\\t\\t\\t\\t\\t[class.was-validated]=\\\"!!error\\\"\\n\\t\\t\\t\\t\\t\\t[attr.autocomplete]=\\\"autocomplete\\\">\\n\\n\\t\\t\\t\\t\\t<!-- Email -->\\n\\t\\t\\t\\t\\t<div class=\\\"form-group\\\">\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label fs-3\\\" for=\\\"user\\\">{{'LOGIN.PLACEHOLDER.EMAIL' | translate : lang}}</label>\\n\\t\\t\\t\\t\\t\\t<input id=\\\"user\\\" name=\\\"user\\\" type=\\\"email\\\" class=\\\"form-control fs-4\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [attr.autocomplete]=\\\"autocomplete\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"auth.user\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t required\\n\\t\\t\\t\\t\\t\\t\\t\\t (enter)=\\\"login()\\\">\\n\\t\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t\\t<!-- Password -->\\n\\t\\t\\t\\t\\t<div class=\\\"form-group mb-5\\\">\\n\\t\\t\\t\\t\\t\\t<label class=\\\"form-label fs-3\\\" for=\\\"password\\\">{{'LOGIN.PLACEHOLDER.PASSWORD' | translate:lang}}</label>\\n\\t\\t\\t\\t\\t\\t<input id=\\\"password\\\" name=\\\"password\\\" type=\\\"password\\\" class=\\\"form-control fs-4\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [attr.autocomplete]=\\\"autocomplete\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t [(ngModel)]=\\\"auth.password\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t required\\n\\t\\t\\t\\t\\t\\t\\t\\t (enter)=\\\"login()\\\">\\n\\t\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t\\t<!-- Error -->\\n\\t\\t\\t\\t\\t<div *ngIf=\\\"error\\\" class=\\\"alert text-danger border-danger show mb-5\\\">\\n\\t\\t\\t\\t\\t\\t<strong>{{ error }}</strong>\\n\\t\\t\\t\\t\\t\\t<span class=\\\"close text-danger display-6\\\" data-dismiss=\\\"alert\\\">×</span>\\n\\t\\t\\t\\t\\t</div>\\n\\n\\t\\t\\t\\t\\t<!-- Submit -->\\n\\t\\t\\t\\t\\t<button class=\\\"btn btn-primary fs-3 w-100\\\" type=\\\"button\\\" (click)=\\\"login()\\\">{{ 'LOGIN.LABEL.SIGN_ME_IN' | translate:lang }}</button>\\n\\n\\t\\t\\t\\t</form>\\n\\n\\t\\t\\t\\t<!-- Text -->\\n\\t\\t\\t\\t<p class=\\\"mb-2 fs-4 text-muted\\\" [innerHtml]=\\\"'LOGIN.MESSAGE.FORGOT_PASSWORD' | translate:lang:{ url : passwordResetUrl }\\\"></p>\\n\\t\\t\\t\\t<p class=\\\"mb-2 fs-4 text-muted\\\" [innerHtml]=\\\"'LOGIN.MESSAGE.NOT_A_MEMBER' | translate:lang:{ url : signInUrl }\\\"></p>\\n\\n\\t\\t\\t</div>\\n\\t\\t</div>\\n\\t</div>\\n</section>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/login/login.view.html\n// module id = 1495\n// module chunks = 1","module.exports = \"<svg viewBox=\\\"0 0 38 38\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n\\t<defs>\\n\\t\\t<linearGradient id=\\\"bx-spinner-rim-ray\\\" x1=\\\"8.042%\\\" y1=\\\"0%\\\" x2=\\\"65.682%\\\" y2=\\\"23.865%\\\">\\n\\t\\t\\t<stop stop-color=\\\"currentColor\\\" stop-opacity=\\\"0\\\" offset=\\\"0%\\\" />\\n\\t\\t\\t<stop stop-color=\\\"currentColor\\\" stop-opacity=\\\".631\\\" offset=\\\"63.146%\\\" />\\n\\t\\t\\t<stop stop-color=\\\"currentColor\\\" offset=\\\"100%\\\" />\\n\\t\\t</linearGradient>\\n\\t</defs>\\n\\t<g fill=\\\"none\\\" fill-rule=\\\"evenodd\\\">\\n\\t\\t<!-- logo -->\\n\\t\\t<g transform=\\\"translate(1 1)\\\">\\n\\t\\t\\t<circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"18\\\" fill=\\\"#000000\\\" stroke=\\\"currentColor\\\" stroke-width=\\\"1\\\" style=\\\"filter: brightness(0.64) opacity(0.24);\\\" />\\n\\t\\t\\t<path d=\\\"M5.48145 2.74075V13.1556L13.1555 7.90621L5.48145 2.74075Z\\\" fill=\\\"currentColor\\\" style=\\\"\\ttransform: scale(2) translate(26%, 28%);transform-origin: center;\\\" />\\n\\t\\t</g>\\n\\t\\t<!-- ray -->\\n\\t\\t<g transform=\\\"translate(1 1)\\\" style=\\\"filter: opacity(0.5) blur(1px);\\\">\\n\\t\\t\\t<path d=\\\"M36 18c0-9.94-8.06-18-18-18\\\" stroke=\\\"url(#bx-spinner-rim-ray)\\\" stroke-width=\\\"2\\\">\\n\\t\\t\\t\\t<animateTransform attributeName=\\\"transform\\\" type=\\\"rotate\\\" from=\\\"0 18 18\\\" to=\\\"360 18 18\\\" dur=\\\"0.9s\\\" repeatCount=\\\"indefinite\\\" />\\n\\t\\t\\t</path>\\n\\t\\t\\t<circle fill=\\\"currentColor\\\" cx=\\\"36\\\" cy=\\\"18\\\" r=\\\"1\\\">\\n\\t\\t\\t\\t<animateTransform attributeName=\\\"transform\\\" type=\\\"rotate\\\" from=\\\"0 18 18\\\" to=\\\"360 18 18\\\" dur=\\\"0.9s\\\" repeatCount=\\\"indefinite\\\" />\\n\\t\\t\\t</circle>\\n\\t\\t</g>\\n\\t</g>\\n</svg>\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/spinner/component/spinner.component.html\n// module id = 1496\n// module chunks = 1","module.exports = \":host {\\n  pointer-events: all;\\n  position: fixed;\\n  top: 0;\\n  right: 0;\\n  bottom: 0;\\n  left: 0;\\n  -webkit-box-align: center;\\n      -ms-flex-align: center;\\n          align-items: center;\\n  -webkit-box-orient: vertical;\\n  -webkit-box-direction: normal;\\n      -ms-flex-direction: column;\\n          flex-direction: column;\\n  -webkit-box-pack: center;\\n      -ms-flex-pack: center;\\n          justify-content: center;\\n  -webkit-backdrop-filter: grayscale(1);\\n          backdrop-filter: grayscale(1);\\n  background-color: rgba(255, 255, 255, 0.4);\\n  color: #FAD600;\\n  display: none;\\n  z-index: 0; }\\n  :host.active {\\n    display: -webkit-box;\\n    display: -ms-flexbox;\\n    display: flex;\\n    z-index: 10000; }\\n  :host svg {\\n    position: relative;\\n    z-index: 1;\\n    min-width: 48px;\\n    max-width: 96px;\\n    min-height: 48px;\\n    max-height: 96px;\\n    width: 100%;\\n    height: 100%; }\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/module/spinner/component/spinner.component.scss\n// module id = 1497\n// module chunks = 1","export * from './app.component';\nexport * from './app.config';\nexport * from './app.model';\nexport * from './app.module';\nexport * from './app.spinner.component';\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/app/index.ts","import { ViewService } from '../service/view.service';\nimport { ChangeDetectionStrategy, Component, HostListener } from '@angular/core';\n\n@Component({\n\tselector: 'bradmax-admin',\n\ttemplate: '<flash-messages></flash-messages><router-outlet></router-outlet><modal></modal><spinner></spinner>',\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class AppComponent {\n\n\t@HostListener('window:resize') onResize() {\n\t\tthis.view.calculateSize();\n\t}\n\n\tconstructor(private view: ViewService) {}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/app/app.component.ts","/**\n * Created by mthk on 05/10/16.\n */\nimport { Injectable, Injector, isDevMode } from '@angular/core';\nimport {\n\tEvent as RouterEvent,\n\tNavigationCancel,\n\tNavigationEnd,\n\tNavigationError,\n\tNavigationStart,\n\tRouter,\n} from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\n\nimport { Size, SpinnerData } from '../model/global.vars.model';\n\n// AoT compilation requires a reference to an exported function.\nexport function initViewService(s: ViewService): Function {\n\treturn () => s.init();\n}\n\n@Injectable()\nexport class ViewService {\n\t/** size */\n\twidth: number;\n\theight: number;\n\theartbeatMode = false;\n\n\t/** booststrap sizes */\n\t// xs = false;\n\t// sm = false;\n\t// md = false;\n\t// lg = false;\n\t/** scroll */\n\t// showScroll: boolean;\n\t/** spinner */\n\tspinnerActive: boolean;\n\tbodySpinnerStream$: Observable<SpinnerData>;\n\tprotected bodySpinnerSource = new Subject<SpinnerData>();\n\t/** resize */\n\tresizeStream$: Observable<Size>;\n\tprotected resizeSource = new Subject<Size>();\n\n\tprivate router: Router;\n\tprivate routerSubscription: Subscription;\n\tprivate set routerSub(s: Subscription) {\n\t\tif (this.routerSubscription != null) this.routerSubscription.unsubscribe();\n\t\tthis.routerSubscription = s;\n\t}\n\t/** */\n\tconstructor(private injector: Injector) { }\n\n\tinit() {\n\t\tthis.bodySpinnerStream$ = this.bodySpinnerSource.asObservable();\n\t\tthis.resizeStream$ = this.resizeSource.asObservable();\n\t\tthis.calculateSize();\n\t\tthis.router = this.injector.get(Router);\n\t\tthis.routerSub = this.router.events\n\t\t\t.subscribe((event: RouterEvent) => this.navigationInterceptor(event));\n\n\t\t// Attach 'message' listener, when app is iframed.\n\t\twindow.removeEventListener('message', this.onPostMessage);\n\t\tif(this.checkIfAppInIframe()) {\n\t\t\twindow.addEventListener('message', this.onPostMessage);\n\t\t}\n\n\t\t// Check if custom styles parameter is defined.\n\t\t// If so then inject associated styles into page.\n\t\tlet customColorPalettePattern = window.location.href.match(/[&\\?]customColorPalette=([a-zA-Z0-9_\\-]+)/);\n\t\tif(customColorPalettePattern && !document.getElementById('custom-color-palette')) {\n\t\t\tthis.injectCustomColorPalette(customColorPalettePattern[1]);\n\t\t}\n\t}\n\n\tinjectCustomColorPalette(name: string) {\n\t\tlet styles: string = null;\n\t\tif(name == 'cdn77') {\n\t\t\tstyles = `\nbody { background: #ebf3f5 !important; }\nh1, h2, h3, h4, h5, h6 { color: #636773; }\n.panel-inverse>.panel-heading { background: #0f1e46; }\n.panel-inverse>.panel-heading h4 small{ color:#fff !important; opacity:0.6; }\nbody bradmax-admin .panel {box-shadow: 0 5px 15px 0 rgba(8,4,45,.1);}\n.config-list .config-item .cell.cell-name { color: #4b4b4b !important; }\nbody bradmax-admin .btn-bradmax { color: #fcfcfc; background-color: #0f1e46; border-color: #0f1e46; }\nbody bradmax-admin .btn-bradmax:hover { background-color: #006cad; border-color: #006cad; }\nbody bradmax-admin .widget {box-shadow: 0 5px 15px 0 rgba(8,4,45,.1);}\nbody bradmax-admin .widget-chart {background: #ffffff !important;}\nbody bradmax-admin .widget-chart .widget-chart-content .table>tbody>tr>td, body bradmax-admin .widget-chart .widget-chart-content .table>thead>tr>th{color: #242a30;}\nbody bradmax-admin .widget-chart .chart-title {color:#4b4b4b !important;}\nbody bradmax-admin .widget-chart .chart-title small {color:#616d72 !important;}\nbradmax-admin .sidebar, bradmax-admin .sidebar-bg { background: #0f1e46 !important; }\n.fade.in .sidebar.active ul.nav > li.active > a { background-color: #01466f !important; color:#fafafa !important;}\n.fade.in .sidebar.active ul.nav > li.active > a:after {color:#fafafa !important;}\n.fade.in .sidebar.active ul.nav > li.active > .sub-menu { background-color: #006cad !important; color:#fafafa !important;}\n.fade.in .sidebar.active ul.nav > li.active > ul.sub-menu > li > a { color:#fafafa !important;}\n.fade.in .sidebar.active ul.nav > li.active > ul.sub-menu > li > a >span { text-decoration-color:#fafafa !important;}\n.fade.in .sidebar.active ul.nav > li > a { color:#fafafa !important;}\n.fade.in .sidebar.active ul.nav > li > a > span { text-decoration:none !important;}\n.fade.in .sidebar.active ul.nav > li > a:hover { background-color: #006cad !important; color:#ffffff !important;}\n.sidebar .nav>li.nav-header {color:#e1e1e1; }\n.has-sub > ul.sub-menu:before {width:0px !important;}\n.sidebar ul.nav li:not(:last-of-type) {border-bottom: none !important;}\n.timeline li.active .timeline-body .timeline-footer {background: #0f1e46 !important;}\n.timeline li.active .timeline-body {border-color: #0f1e46 !important;}\n.timeline li.active .timeline-body:before {border-right-color: #0f1e46 !important;}\n.timeline li.active .timeline-icon a {background-color: #0f1e46 !important; border-color: #0f1e46 !important;}\n.timeline li.active:before {background: #c8c8c8 !important;}\n.timeline li.active .timeline-time .date, .timeline li.active .timeline-time .time { color: #4b4b4b !important; }\n\t\t\t`;\n\t\t} else if(name == 'a-and-s') {\n\t\t\tstyles = `\nbody { background: transparent !important; }\nh1, h2, h3, h4, h5, h6 { color: #000; }\n.page-header {text-shadow: 0px 0px 5px #ffffff;}\n.panel-inverse>.panel-heading { background: #fff; color:#000; border-bottom: 1px solid #cecece;}\n.panel-inverse>.panel-heading h4 { color:#000 !important; }\n.panel-inverse>.panel-heading h4 small{ opacity:0.6; }\n.panel {border: solid 1px #ddd;}\n.breadcrumb {text-shadow: 0px 0px 3px #fff;}\n.breadcrumb a.active {color:#232323 !important;}\n\t\t\t`;\n\t\t} else if(name == 'irdeto') {\n\t\t\tstyles = `\n.panel-inverse>.panel-heading {background: #5b246a;}\nbradmax-admin .sidebar, bradmax-admin .sidebar-bg {background: #5b246a !important;}\n.fade.in .sidebar.active ul.nav > li.active > a {background-color: #3d1648 !important;}\n.fade.in .sidebar.active ul.nav > li.active > .sub-menu {background-color: #6c327b !important;}\n body bradmax-admin .btn-bradmax {color: #fcfcfc;background-color: #5b246a;border-color: #4e1e5a;}\n .sidebar .nav>li.nav-header {color: #dee5ea;}\n .timeline li.active .timeline-body .timeline-footer {background: #5b266a !important;}\n .timeline li.active .timeline-body {border-color: #5b266a !important;}\n .timeline li.active .timeline-body:before {border-right-color: #5b266a !important;}\n .timeline li.active .timeline-icon a {background-color: #5b266a !important; border-color: #5b266a !important;}\n .timeline li.active:before {background: #5b266a !important;}\n .timeline li.active .timeline-time .date, .timeline li.active .timeline-time .time { color: #5b266a !important; }\n .config-list .config-item .cell.cell-name { color: #5b266a !important; }\n .fade.in .sidebar.active ul.nav > li > a:hover { background-color: #451e50 !important; }\n\t\t\t`;\n\t\t} else {\n\t\t\tconsole.warn('Cannot inject custom color palette. Not recognized name of palette: ' + name);\n\t\t}\n\n\t\tif(styles !== null) {\n\t\t\tlet scriptElement = document.createElement('style');\n\t\t\tscriptElement.setAttribute('id', 'custom-color-palette');\n\t\t\tscriptElement.innerHTML = styles;\n\t\t\tdocument.head.appendChild(scriptElement);\n\t\t}\n\t}\n\n\t/** size */\n\tcalculateSize() {\n\t\tlet change = false;\n\t\tif (this.height != document.documentElement.clientHeight) {\n\t\t\tthis.height = document.documentElement.clientHeight;\n\t\t\tchange = true;\n\t\t}\n\t\tif (this.width != document.documentElement.clientWidth) {\n\t\t\tthis.width = document.documentElement.clientWidth;\n\t\t\tchange = true;\n\t\t\t// change = this.getBootstrapSize();\n\t\t}\n\t\tif (change == true)\n\t\t\tthis.resizeSource.next({ width: this.width, height: document.documentElement.clientHeight });\n\t}\n\n\t/** booststrap sizes */\n\t// getBootstrapSize() {\n\t// \tlet change = false;\n\t// \tlet xs = (this.width < 768);\n\t// \tlet sm = (this.width >= 768 && this.width < 992);\n\t// \tlet md = (this.width >= 992 && this.width < 1200);\n\t// \tlet lg = (this.width >= 1200);\n\t// \tif (xs != this.xs) {\n\t// \t\tchange = true;\n\t// \t\tthis.xs = xs;\n\t// \t}\n\t// \tif (sm != this.sm) {\n\t// \t\tchange = true;\n\t// \t\tthis.sm = sm;\n\t// \t}\n\t// \tif (md != this.md) {\n\t// \t\tchange = true;\n\t// \t\tthis.md = md;\n\t// \t}\n\t// \tif (lg != this.lg) {\n\t// \t\tchange = true;\n\t// \t\tthis.lg = lg;\n\t// \t}\n\t// \treturn change;\n\t// }\n\t/** spinner */\n\t// scroll(on: boolean) { this.showScroll = on; }\n\t/** spinner */\n\tspinner(show: boolean) {\n\t\tthis.spinnerActive = show;\n\t\tthis.bodySpinnerSource.next({ show: this.spinnerActive });\n\t}\n\terror(errorInfo: string) {\n\t\tthis.spinnerActive = true;\n\t\tthis.bodySpinnerSource.next({ show: this.spinnerActive, error: errorInfo });\n\t}\n\t/** page title */\n\tformatPageTitle(...text: string[]) {\n\t\treturn (text == null || text.length == 0) ? 'Proinvest' : text.join(' - ');\n\t}\n\tgetViewport(): { width: number; height: number; } {\n\t\tlet vp = { width: 0, height: 0 };\n\t\t/** the more standards compliant browsers use window.innerWidth and window.innerHeight */\n\t\tif (typeof window.innerWidth != 'undefined') {\n\t\t\tvp.width = window.innerWidth;\n\t\t\tvp.height = window.innerHeight;\n\t\t}/** IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document) */\n\t\telse if (typeof document.documentElement != 'undefined'\n\t\t\t&& typeof document.documentElement.clientWidth != 'undefined'\n\t\t\t&& document.documentElement.clientWidth != 0) {\n\t\t\tvp.width = document.documentElement.clientWidth;\n\t\t\tvp.height = document.documentElement.clientHeight;\n\t\t}/** older versions of IE */\n\t\telse {\n\t\t\tvp.width = document.getElementsByTagName('body')[0].clientWidth;\n\t\t\tvp.height = document.getElementsByTagName('body')[0].clientHeight;\n\t\t}\n\t\treturn vp;\n\t}\n\n\tprivate navigationInterceptor(e: RouterEvent): void {\n\t\tif (e instanceof NavigationStart)\n\t\t\tthis.spinner(true);\n\t\tif (e instanceof NavigationEnd)\n\t\t\tthis.spinner(false);\n\t\tif (e instanceof NavigationCancel)\n\t\t\tthis.spinner(false);\n\t\tif (e instanceof NavigationError)\n\t\t\tthis.spinner(false);\n\t}\n\n\tpublic checkIfAppInIframe () {\n\t\tlet result = false;\n\t\ttry {\n\t\t\tresult = (window.self !== window.top);\n\t\t} catch (e) {\n\t\t\tresult = true;\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic checkIfHeartBeatMode() {\n\t\treturn this.heartbeatMode;\n\t}\n\n\tpublic checkIfBetaMode() {\n\t\tconst betaPattern = /[\\?&#]beta=1/;\n\t\treturn isDevMode() || betaPattern.test(window.location.href);\n\t}\n\n\tpublic setHeartBeatMode(_mode: boolean) {\n\t\tthis.heartbeatMode = _mode;\n\t}\n\n\t// Listener with scope to ViewService attached by closure.\n\tpublic onPostMessage = (event: any) => {\n\t\tif(event && event.data && event.data.bradmaxPath) {\n\t\t\tthis.router.navigateByUrl(event.data.bradmaxPath);\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/view.service.ts","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tOnDestroy,\n\tOnInit,\n\tRenderer2,\n\tViewChild,\n} from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { Subscription } from 'rxjs/Subscription';\n\nimport { SpinnerData } from '../model/global.vars.model';\nimport { ViewService } from '../service/view.service';\n\n/**\n * Created by mthk on 25/05/16.\n */\nlet DEFS = '<defs>'\n\t+ '<radialGradient id=\"gradient\" cx=\"75%\" cy=\"45%\">'\n\t+ '<stop offset=\"0%\" stop-color=\"rgb(124,21,68)\"/>'\n\t+ '<stop offset=\"25%\" stop-color=\"rgb(106,12,57)\"/>'\n\t+ '<stop offset=\"50%\" stop-color=\"rgb(80,23,59)\"/>'\n\t+ '<stop offset=\"100%\" stop-color=\"transparent\"/>'\n\t+ '</radialGradient>'\n\t+ '<clipPath id=\"clip\">'\n\t+ '<path d=\"M50,24 L80,76 L20,76 L50,24 Z M50,29 L25,73 L75,73 L50,29 Z\"></path>'\n\t+ '</clipPath>'\n\t+ '</defs>';\n\nlet TRIANGLE = '<g clip-path=\"url(#clip)\">'\n\t+ '<g #rotate>'\n\t+ '<path d=\"M 50,58 L10,20 L90,20 L50,58 Z\" fill=\"url(#gradient)\"></path>'\n\t+ '</g>'\n\t+ '</g>';\n\nlet s = 96;\nlet s2 = s >> 1;\n\nlet HTML = '<div *ngIf=\"active\" class=\"con\">'\n\t+ '<svg viewBox=\"0 0 100 100\" width=\"' + s + 'px\" height=\"' + s + 'px\" '\n\t+ 'version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xml:space=\"preserve\" '\n\t+ 'style=\"fill-rule:nonzero;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;\">'\n\t+ DEFS + TRIANGLE\n\t+ '</svg>'\n\t+ '<div *ngIf=\"errorInfo\" class=\"errorInfo\">{{errorInfo}}</div>'\n\t+ '</div>';\n\nlet STYLE = ''\n\t+ ':host.active{position: fixed;top: 0;left: 0;bottom: 0;right: 0;z-index: 9999;}'\n\t+ '.con{position: absolute;top: 0;left: 0;bottom: 0;right: 0;background: rgba(255, 255, 255, 0.75);}'\n\t+ 'svg{position: absolute;left: 50%;top: 50%;width:' + s + 'px;height:' + s + 'px;'\n\t+ 'margin-top: -' + s2 + 'px;margin-left: -' + s2 + 'px;}'\n\t+ '.errorInfo{position: absolute;top: 50%;left:0;right:0;text-align:center;margin-top:20px;}'\n\t+ '';\n\n@Component({\n\tselector: 'spinner', host: { '[class.active]': 'active' },\n\tchangeDetection: ChangeDetectionStrategy.OnPush, template: HTML, styles: [STYLE]\n})\nexport class AppSpinner implements OnInit, AfterViewInit, OnDestroy {\n\n\t@ViewChild('rotate') rotate: ElementRef;\n\n\tactive = true;\n\terrorInfo: String | null | undefined;\n\tdeg = 0;\n\ttimer = 33;\n\tsubscription: Subscription;\n\tbodySpinnerSubscription: Subscription;\n\n\tconstructor(private view: ViewService, private cdr: ChangeDetectorRef, private renderer: Renderer2) { }\n\n\tngOnInit() {\n\t\tthis.bodySpinnerSubscription = this.view.bodySpinnerStream$.subscribe((spinnerData: SpinnerData) => {\n\t\t\tif (this.active != spinnerData.show || this.errorInfo != spinnerData.error) {\n\t\t\t\tthis.active = spinnerData.show;\n\t\t\t\tthis.errorInfo = spinnerData.error;\n\t\t\t\tthis.check();\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnDestroy() {\n\t\tthis.active = false;\n\t\tif (this.bodySpinnerSubscription)\n\t\t\tthis.bodySpinnerSubscription.unsubscribe();\n\t\tthis.check();\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.check();\n\t}\n\n\tcheck() {\n\t\tif (this.active)\n\t\t\tthis.subscription = Observable.interval(this.timer).subscribe(() => this.rotation());\n\t\telse if (this.subscription)\n\t\t\tthis.subscription.unsubscribe();\n\t}\n\n\trotation() {\n\t\tif (this.rotate != null) {\n\t\t\tthis.deg += 6;\n\t\t\tif (this.deg > 360)\n\t\t\t\tthis.deg = 0;\n\t\t\tthis.renderer.setAttribute(this.rotate.nativeElement, 'transform', 'rotate(' + this.deg + ', 50, 58)');\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/app/app.spinner.component.ts","var map = {\n\t\"./account/details/en.json\": 1502,\n\t\"./account/details/pl.json\": 1503,\n\t\"./account/en.json\": 1504,\n\t\"./account/invoices/en.json\": 1505,\n\t\"./account/invoices/pl.json\": 1506,\n\t\"./account/payments/en.json\": 1507,\n\t\"./account/payments/pl.json\": 1508,\n\t\"./account/pl.json\": 1509,\n\t\"./account/subscriptions/en.json\": 1510,\n\t\"./account/subscriptions/pl.json\": 1511,\n\t\"./analytics/QOS/en.json\": 1512,\n\t\"./analytics/QOS/pl.json\": 1513,\n\t\"./analytics/albums/en.json\": 1514,\n\t\"./analytics/albums/pl.json\": 1515,\n\t\"./analytics/audience/en.json\": 1516,\n\t\"./analytics/audience/pl.json\": 1517,\n\t\"./analytics/content/en.json\": 1518,\n\t\"./analytics/content/pl.json\": 1519,\n\t\"./analytics/dashboard/en.json\": 1520,\n\t\"./analytics/dashboard/pl.json\": 1521,\n\t\"./analytics/geo/en.json\": 1522,\n\t\"./analytics/geo/pl.json\": 1523,\n\t\"./analytics/heartbeat/en.json\": 1524,\n\t\"./analytics/heartbeat/pl.json\": 1525,\n\t\"./analytics/info/en.json\": 1526,\n\t\"./analytics/info/pl.json\": 1527,\n\t\"./analytics/realtime/en.json\": 1528,\n\t\"./analytics/realtime/pl.json\": 1529,\n\t\"./analytics/sampled-traffic/en.json\": 1530,\n\t\"./analytics/sampled-traffic/pl.json\": 1531,\n\t\"./analytics/st-raport/en.json\": 1532,\n\t\"./analytics/st-raport/pl.json\": 1533,\n\t\"./analytics/tag-service/en.json\": 1534,\n\t\"./analytics/tag-service/pl.json\": 1535,\n\t\"./analytics/technology/en.json\": 1536,\n\t\"./analytics/technology/pl.json\": 1537,\n\t\"./analytics/top-content/en.json\": 1538,\n\t\"./analytics/top-content/pl.json\": 1539,\n\t\"./components/en.json\": 1540,\n\t\"./components/pl.json\": 1541,\n\t\"./contact/en.json\": 1542,\n\t\"./contact/pl.json\": 1543,\n\t\"./content/en.json\": 1544,\n\t\"./content/pl.json\": 1545,\n\t\"./login/en.json\": 1546,\n\t\"./login/pl.json\": 1547,\n\t\"./password-change/en.json\": 1548,\n\t\"./password-change/pl.json\": 1549,\n\t\"./player/en.json\": 1550,\n\t\"./player/pl.json\": 1551,\n\t\"./products/en.json\": 1552,\n\t\"./products/pl.json\": 1553,\n\t\"./products/plan-carrousel/en.json\": 1554,\n\t\"./products/plan-carrousel/pl.json\": 1555,\n\t\"./subscription/en.json\": 1556,\n\t\"./subscription/pl.json\": 1557\n};\nfunction webpackContext(req) {\n\treturn __webpack_require__(webpackContextResolve(req));\n};\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) // check for number or string\n\t\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n\treturn id;\n};\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 1501;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n (pl|en)\\.json\n// module id = 1501\n// module chunks = 1","module.exports = {\"ACCOUNT_DETAILS\":{\"TITLE\":\"Account Details\",\"DATA_ERROR\":\"An error occurred! It was not possible to retrieve the necessary data from the server.\",\"FORM\":{\"SUBTITLE_1\":\"User Details\",\"SUBTITLE_2\":\"Company Details\",\"LABEL\":{\"FIRST_NAME\":\"First name\",\"LAST_NAME\":\"Last name\",\"EMAIL\":\"Email\",\"AGREE_FOR_NEWSLETTER\":\"Agree for newsletter\",\"COMPANY\":\"Company\",\"COUNTRY\":\"Country\",\"STATE\":\"State\",\"CITY\":\"City\",\"ADDRESS\":\"Address\",\"POSTAL_CODE\":\"Postal code\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax Identification No.\"},\"PLACEHOLDER\":{\"FIRST_NAME\":\"Your first name\",\"LAST_NAME\":\"Your last name\",\"EMAIL\":\"Your email\",\"COMPANY\":\"Company name\",\"COUNTRY\":\"Choose your country\",\"STATE\":\"State name\",\"CITY\":\"City name\",\"ADDRESS\":\"Stree name and house/flat number\",\"POSTAL_CODE\":\"Postal code number\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax Identification No.\"},\"VALIDATION_ERROR\":{\"REQUIRED\":\"This field is required\",\"INVALID\":\"Invalid value\",\"INVALID_FIELD\":\"Invalid {{field}} format\"},\"SUBMIT_SUCCESS\":\"Changes were saved\"},\"BUTTON\":{\"SAVE\":\"save\",\"EDIT\":\"edit\",\"CANCEL\":\"cancel\",\"UPDATE\":\"update\",\"CONTINUE\":\"continue\",\"CLOSE\":\"close\",\"CHANGE_PASSWORD\":\"Change\"},\"MESSAGE\":{\"ACCOUNT_READY\":\"Account is ready for billing. Do you wish to continue your subscription process?\",\"COMPANY\":\"If you don't have a company you can put here your first and last name.\",\"PAY_VALID\":\"company details ready for payments\",\"PAY_INVALID\":\"company details not ready for payments\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/details/en.json\n// module id = 1502\n// module chunks = 1","module.exports = {\"ACCOUNT_DETAILS\":{\"TITLE\":\"Account Details\",\"DATA_ERROR\":\"An error occurred! It was not possible to retrieve the necessary data from the server.\",\"FORM\":{\"SUBTITLE_1\":\"Basic info\",\"SUBTITLE_2\":\"Company details\",\"LABEL\":{\"FIRST_NAME\":\"First name\",\"LAST_NAME\":\"Last name\",\"EMAIL\":\"Email\",\"AGREE_FOR_NEWSLETTER\":\"Agree for newsletter\",\"COMPANY\":\"Company\",\"COUNTRY\":\"Country\",\"STATE\":\"State\",\"CITY\":\"City\",\"ADDRESS\":\"Address\",\"POSTAL_CODE\":\"Postal code\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax identification no.\"},\"PLACEHOLDER\":{\"FIRST_NAME\":\"Your first name\",\"LAST_NAME\":\"Your last name\",\"EMAIL\":\"Your email\",\"COMPANY\":\"Company name\",\"COUNTRY\":\"Choose your country\",\"STATE\":\"State name\",\"CITY\":\"City name\",\"ADDRESS\":\"Stree name and house/flat number\",\"POSTAL_CODE\":\"Postal code number\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax identification no.\"},\"VALIDATION_ERROR\":{\"REQUIRED\":\"This field is required\",\"INVALID\":\"Invalid value\",\"INVALID_FIELD\":\"Invalid {{field}} format\"},\"SUBMIT_SUCCESS\":\"Changes were saved\"},\"BUTTON\":{\"SAVE\":\"save\",\"EDIT\":\"edit\",\"CANCEL\":\"cancel\",\"UPDATE\":\"update\",\"CONTINUE\":\"Continue\",\"CLOSE\":\"close\",\"CHANGE_PASSWORD\":\"Change\"},\"MESSAGE\":{\"ACCOUNT_READY\":\"Account is ready for billing. Do you wish to continue your subscription process?\",\"COMPANY\":\"If you don't have a company you can put here your first and last name.\",\"PAY_VALID\":\"company details ready for payments\",\"PAY_INVALID\":\"company details not ready for payments\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/details/pl.json\n// module id = 1503\n// module chunks = 1","module.exports = {\"ACCOUNT\":{\"TITLE\":\"Account Information\",\"SUBTITLE\":\"here you can find and change all the information concerning your account\",\"DETAILS\":{\"TITLE\":\"My Info\"},\"PAYMENTS\":{\"TITLE\":\"My Payment Methods\"},\"SUBSCRIPTIONS\":{\"TITLE\":\"My Subscriptions\"},\"INVOICES\":{\"TITLE\":\"My Invoices\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/en.json\n// module id = 1504\n// module chunks = 1","module.exports = {\"ACCOUNT_INVOICES\":{\"TITLE\":\"My Invoices\",\"SUBTITLE\":\"My Invoices\",\"MESSAGE\":{\"EDIT_SUCCESS\":\"Invoice details updated.\",\"EDIT_ERROR\":\"Error updating invoice details.\",\"MORE_DETAILS\":\"for detailed invoice please download the pdf\",\"AGREEMENT\":{\"1\":\"I agree with the \",\"2\":\"Terms and Conditions.\",\"TEXT\":\"The changes made to an invoice are of the full responsibility of the user.\"},\"EMPTY\":\"You don't have any invoices.\",\"NOT_AVAILABLE\":\"Not available\"},\"LABEL\":{\"DESCRIPTION\":\"Description\",\"BASE_PRICE\":\"Base Price\",\"TOTAL\":\"Total\",\"EXPORT_PDF\":\"Export as PDF\",\"ADDRESS\":\"Address\",\"EDIT\":\"Edit\",\"TAX_NO\":\"Tax.No.\",\"TAX\":\"Tax\",\"PHONE\":\"phone\",\"CREATED\":\"Created\",\"PLAN_NAME\":\"Product Name\",\"STATUS\":\"Status\",\"SELECTED_INVOICE\":\"Selected Invoice Details\",\"INVOICE_NOT_READY\":\"Invoice for this payment will be generated after settling payment transaction.\"},\"BUTTON\":{\"AGREE\":\"I Agree\",\"NOT_AGREE\":\"I Don't Agree\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/invoices/en.json\n// module id = 1505\n// module chunks = 1","module.exports = {\"ACCOUNT_INVOICES\":{\"TITLE\":\"My Invoices\",\"SUBTITLE\":\"My Invoices\",\"MESSAGE\":{\"EDIT_SUCCESS\":\"Invoice details updated.\",\"EDIT_ERROR\":\"Error updating invoice details.\",\"MORE_DETAILS\":\"for detailed invoice please download the pdf\",\"AGREEMENT\":{\"1\":\"I agree with the \",\"2\":\"Terms and Conditions.\",\"TEXT\":\"The changes made to an invoice are of the full responsibility of the user.\"},\"EMPTY\":\"I don't have any invoices.\",\"NOT_AVAILABLE\":\"Not available\"},\"LABEL\":{\"DESCRIPTION\":\"Description\",\"BASE_PRICE\":\"Base Price\",\"TOTAL\":\"Total\",\"EXPORT_PDF\":\"Export as PDF\",\"ADDRESS\":\"Address\",\"EDIT\":\"Edit\",\"TAX_NO\":\"Tax.No.\",\"TAX\":\"Tax\",\"PHONE\":\"phone\",\"CREATED\":\"Created\",\"PLAN_NAME\":\"Product Name\",\"STATUS\":\"Status\",\"SELECTED_INVOICE\":\"Selected Invoice Details\",\"INVOICE_NOT_READY\":\"Invoice for this payment will be generated after settling payment transaction.\"},\"BUTTON\":{\"AGREE\":\"I Agree\",\"NOT_AGREE\":\"I Don't Agree\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/invoices/pl.json\n// module id = 1506\n// module chunks = 1","module.exports = {\"ACC_PAY\":{\"TITLE\":\"Your saved payment methods\",\"MESSAGE\":{\"EMPTY\":\"You don't have any payment methods saved.\",\"EDIT_SUCCESS\":\"Payment method edited successfully.\",\"MAKE_DEFAULT\":\"make this payment default\",\"CONFIRM_DELETE\":\"Are you sure you want to remove this payment method?\",\"DELETE_SUCCESS\":\"Payment method deleted.\",\"DELETE_ERROR\":\"Error deleting payment method.\"},\"STATE\":{\"ACTIVE\":\"active\",\"VALID\":\"valid\",\"INVALID\":\"invalid\",\"DEFAULT\":\"default\"},\"LABEL\":{\"EMAIL\":\"Email\",\"EXPIRES\":\"Expires at\",\"CREATED\":\"Created at\",\"UPDATED\":\"Updated at\",\"CVV\":\"CVV\",\"EXP_DATE\":\"Expiration Date\",\"NAME\":\"Name\",\"CONTINUE\":\"Continue\",\"CANCEL\":\"Cancel\",\"YES\":\"Yes\"},\"BUTTON\":{\"EDIT\":\"edit\",\"DELETE\":\"delete\",\"SAVE\":\"save\",\"CANCEL\":\"cancel\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/payments/en.json\n// module id = 1507\n// module chunks = 1","module.exports = {\"ACC_PAY\":{\"TITLE\":\"Your saved payment methods\",\"MESSAGE\":{\"EMPTY\":\"You don't have any payment methods saved.\",\"EDIT_SUCCESS\":\"Payment method edited successfully.\",\"MAKE_DEFAULT\":\"make this payment default\",\"CONFIRM_DELETE\":\"Are you sure you want to remove this payment method?\",\"DELETE_SUCCESS\":\"Payment method deleted.\",\"DELETE_ERROR\":\"Error deleting payment method.\"},\"STATE\":{\"ACTIVE\":\"active\",\"VALID\":\"valid\",\"INVALID\":\"invalid\",\"DEFAULT\":\"default\"},\"LABEL\":{\"EMAIL\":\"Email\",\"EXPIRES\":\"Expires at\",\"CREATED\":\"Created at\",\"UPDATED\":\"Updated at\",\"CVV\":\"CVV\",\"EXP_DATE\":\"Expiration Date\",\"NAME\":\"Name\",\"CONTINUE\":\"Continue\",\"CANCEL\":\"Cancel\",\"YES\":\"Yes\"},\"BUTTON\":{\"EDIT\":\"Edit\",\"DELETE\":\"Delete\",\"SAVE\":\"Save\",\"CANCEL\":\"Cancel\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/payments/pl.json\n// module id = 1508\n// module chunks = 1","module.exports = {\"ACCOUNT\":{\"TITLE\":\"Account Information\",\"SUBTITLE\":\"here you can find and change all the information concerning your account\",\"DETAILS\":{\"TITLE\":\"My Info\"},\"PAYMENTS\":{\"TITLE\":\"My Payment Methods\"},\"SUBSCRIPTIONS\":{\"TITLE\":\"My Subscriptions\"},\"INVOICES\":{\"TITLE\":\"My Invoices\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/pl.json\n// module id = 1509\n// module chunks = 1","module.exports = {\"ACCOUNT_SUBS\":{\"TITLE\":\"My Subscriptions\",\"MESSAGE\":{\"EMPTY\":\"You don't have any subscriptions. What are you waiting for!\",\"ERROR_UPDATE_PM\":\"Error updating payment method.Please try again.\",\"SUCCESS_UPDATE_PM\":\"Subscription payment method updated.\"},\"LABEL\":{\"ACTIVE\":\"active\",\"INACTIVE\":\"inactive\",\"CREATED_AT\":\"Created at\",\"UPDATED_AT\":\"Updated at\",\"NEXT_BILLING\":\"Next billing at\",\"BASE_PRICE\":\"Base price\",\"PER_MONTH\":\"per month\",\"INCLUDED_VIEWS\":\"Included views\",\"INCLUDED_VIEWS_USAGE\":\"Views usage\",\"USAGE_PRICE\":\"Usage price\",\"VIEWS\":\"views\",\"CURRENT_TOTAL\":\"Current Total\",\"PM\":\"Payment method\",\"NOT_AVAILABLE\":\"Not available\"},\"BUTTON\":{\"CHANGE_PM\":\"Change PM\",\"CANCEL_PLAN\":\"Cancel\"},\"PM_MODAL\":{\"TITLE\":\"Select a payment method\",\"SUBMIT_BUTTON\":\"Select this one\",\"CANCEL\":\"Cancel\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/subscriptions/en.json\n// module id = 1510\n// module chunks = 1","module.exports = {\"ACCOUNT_SUBS\":{\"TITLE\":\"My Subscriptions\",\"MESSAGE\":{\"EMPTY\":\"You don't have any subscriptions. What are you waiting for!\",\"ERROR_UPDATE_PM\":\"Error updating payment method.Please try again.\",\"SUCCESS_UPDATE_PM\":\"Subscription payment method updated.\"},\"LABEL\":{\"ACTIVE\":\"active\",\"INACTIVE\":\"inactive\",\"CREATED_AT\":\"Created at\",\"UPDATED_AT\":\"Updated at\",\"NEXT_BILLING\":\"Next billing at\",\"BASE_PRICE\":\"Base price\",\"PER_MONTH\":\"per month\",\"INCLUDED_VIEWS\":\"Included views\",\"INCLUDED_VIEWS_USAGE\":\"Views usage\",\"USAGE_PRICE\":\"Usage price\",\"VIEWS\":\"views\",\"CURRENT_TOTAL\":\"Current Total\",\"PM\":\"Payment method\",\"NOT_AVAILABLE\":\"Not available\"},\"BUTTON\":{\"CHANGE_PM\":\"Change PM\",\"CANCEL_PLAN\":\"Cancel\"},\"PM_MODAL\":{\"TITLE\":\"Select a payment method\",\"SUBMIT_BUTTON\":\"Select this one\",\"CANCEL\":\"Cancel\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/account/subscriptions/pl.json\n// module id = 1511\n// module chunks = 1","module.exports = {\"QOS\":{\"TITLE\":\"Analytics - QOS\",\"AUDIENCE\":\"Audience\",\"QOS\":\"QOS\",\"SELECTED_CONTENR\":\"Selected content\",\"WORD\":{\"POSITION\":\"Position\",\"TITLE\":\"Title\",\"STREAMS\":\"Streams\",\"STREAMS_APROX_NOTE\":\"aprox. last 20 min\",\"WATCHING_USERS_PER_SEC\":\"Watching users - per second\",\"WATCHING_USERS_PER_MIN\":\"Watching users - per minute\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/QOS/en.json\n// module id = 1512\n// module chunks = 1","module.exports = {\"QOS\":{\"TITLE\":\"Analytics - QOS\",\"AUDIENCE\":\"Audience\",\"QOS\":\"QOS\",\"SELECTED_CONTENR\":\"Selected content\",\"WORD\":{\"POSITION\":\"Position\",\"TITLE\":\"Title\",\"STREAMS\":\"Streams\",\"STREAMS_APROX_NOTE\":\"aprox. last 20 min\",\"WATCHING_USERS_PER_SEC\":\"Watching users - per second\",\"WATCHING_USERS_PER_MIN\":\"Watching users - per minute\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/QOS/pl.json\n// module id = 1513\n// module chunks = 1","module.exports = {\"ANALYTICS_ALBUMS\":{\"TOP_LIST\":{\"TITLE\":\"Analytics - Albums\",\"TOP_LIST_HEADER\":\"Album list\",\"FILTERS\":\"Filters\",\"FILTERS_TITLE\":\"Title\",\"FILTERS_ARTIST\":\"Artist\",\"FILTERS_TAGS\":\"Tags\",\"TOP_LIST_COLUMN\":{\"TITLE\":\"Title\",\"ITEMS_IN_COLLECTION\":\"Songs in album\",\"SUMMARY\":\"Summary statistics\",\"VIEWS\":\"Songs listenings\",\"COMPLETE_VIEWS\":\"Full listenings of album\",\"USERS\":\"Listening users\"},\"ALBUM_DETAIL_HEADER\":\"Album details\",\"ALBUM_ITEM_STATS_HEADER\":\"Songs statistics\",\"ITEM_STATS_COLUMN\":{\"POSITION\":\"Pos\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"DURATION\":\"Length\",\"STATS_GROUP\":\"Last 30 days stats\",\"VIEWS\":\"Listenings\",\"USERS\":\"Users\",\"WATCHING_TIME\":\"Time\",\"AVG_WATCHING_TIME\":\"Time per list.\"},\"ALBUM_DETAILS_BUTTON\":\"More details\"},\"DETAILS_VIEW\":{\"TITLE\":\"Analytics - Album details\",\"CHART_TITLE\":\"Album views history\",\"BOX_VIEWS\":\"Songs listenings\",\"BOX_COMPLETE_VIEWS\":\"Album listenings\",\"BOX_USERS\":\"Listening users\",\"BOX_WATCHING_TIME\":\"Time per listening\",\"META_HEADER\":\"Album info\",\"META_REL_ID\":\"Rel. ID\",\"META_ADDED_AT\":\"Added at\",\"ITEM_STATS_HEADER\":\"Album songs\",\"ITEM_STATS_COL\":{\"POSITION\":\"Pos\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"DURATION\":\"Length\",\"STATS_GROUP\":\"For selected time range\",\"ITEM_VIEWS\":\"List.\",\"USERS\":\"Users\",\"WATCHING_TIME\":\"Time\",\"AVG_WATCHING_TIME\":\"Time per list.\"}},\"NO_DATA\":\"There is no data\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/albums/en.json\n// module id = 1514\n// module chunks = 1","module.exports = {\"ANALYTICS_ALBUMS\":{\"TOP_LIST\":{\"TITLE\":\"Analytics - Albums\",\"TOP_LIST_HEADER\":\"Album list\",\"FILTERS\":\"Filters\",\"FILTERS_TITLE\":\"Title\",\"FILTERS_ARTIST\":\"Artist\",\"FILTERS_TAGS\":\"Tags\",\"TOP_LIST_COLUMN\":{\"TITLE\":\"Title\",\"ITEMS_IN_COLLECTION\":\"Songs in album\",\"SUMMARY\":\"Summary statistics\",\"VIEWS\":\"Songs listenings\",\"COMPLETE_VIEWS\":\"Full listenings of album\",\"USERS\":\"Listening users\"},\"ALBUM_DETAIL_HEADER\":\"Album details\",\"ALBUM_ITEM_STATS_HEADER\":\"Songs statistics\",\"ITEM_STATS_COLUMN\":{\"POSITION\":\"Pos\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"DURATION\":\"Length\",\"STATS_GROUP\":\"Last 30 days stats\",\"VIEWS\":\"Listenings\",\"USERS\":\"Users\",\"WATCHING_TIME\":\"Time\",\"AVG_WATCHING_TIME\":\"Time per list.\"},\"ALBUM_DETAILS_BUTTON\":\"More details\"},\"DETAILS_VIEW\":{\"TITLE\":\"Analytics - Album details\",\"CHART_TITLE\":\"Album views history\",\"BOX_VIEWS\":\"Songs listenings\",\"BOX_COMPLETE_VIEWS\":\"Album listenings\",\"BOX_USERS\":\"Listening users\",\"BOX_WATCHING_TIME\":\"Time per listening\",\"META_HEADER\":\"Album info\",\"META_REL_ID\":\"Rel. ID\",\"META_ADDED_AT\":\"Added at\",\"ITEM_STATS_HEADER\":\"Album songs\",\"ITEM_STATS_COL\":{\"POSITION\":\"Pos\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"DURATION\":\"Length\",\"STATS_GROUP\":\"For selected time range\",\"ITEM_VIEWS\":\"List.\",\"USERS\":\"Users\",\"WATCHING_TIME\":\"Time\",\"AVG_WATCHING_TIME\":\"Time per list.\"}},\"NO_DATA\":\"There is no data\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/albums/pl.json\n// module id = 1515\n// module chunks = 1","module.exports = {\"ANALYTICS_AUDIENCE\":{\"TITLE\":\"Analytics - Audience\",\"HEADER\":{\"1\":\"Changes in time for account\",\"2\":\"Monthly statistics\",\"3\":\"Heatmap\"},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\"},\"FOR_CURR_ACCOUNTING_MONTH\":\"For current accounting month\",\"FOR_PREV_ACCOUNTING_MONTH\":\"For previous accounting month\",\"VIEWS_OPEN_PERIOD\":\"open period\",\"VIEWS_PREVIOUS_PERIOD\":\"previous period\",\"SUBHEADER\":{\"1\":\"Trends for last current and previous day\",\"2\":\"Trends for last 30 days\",\"3\":\"In selected period\",\"4\":\"Views per user\",\"5\":\"Avg. watching time per user\",\"6\":\"open month, statistics not closed\"},\"WORD\":{\"HOUR\":\"Hour\",\"DAY\":\"Day\",\"MONTH\":\"Month\",\"WEEK\":\"Week\",\"YEAR\":\"Year\",\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TODAY\":\"Today\",\"YESTERDAY\":\"Yesterday\",\"LAST\":\"Last\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/audience/en.json\n// module id = 1516\n// module chunks = 1","module.exports = {\"ANALYTICS_AUDIENCE\":{\"TITLE\":\"Analytics - Audience\",\"HEADER\":{\"1\":\"Changes in time for account\",\"2\":\"Monthly statistics\",\"3\":\"Heatmap\"},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\"},\"FOR_CURR_ACCOUNTING_MONTH\":\"For current accounting month\",\"FOR_PREV_ACCOUNTING_MONTH\":\"For previous accounting month\",\"VIEWS_OPEN_PERIOD\":\"open period\",\"VIEWS_PREVIOUS_PERIOD\":\"previous period\",\"SUBHEADER\":{\"1\":\"Trends for last current and previous day\",\"2\":\"Trends for last 30 days\",\"3\":\"In selected period\",\"4\":\"Views per user\",\"5\":\"Avg. watching time per user\",\"6\":\"open month, statistics not closed\"},\"WORD\":{\"HOUR\":\"Hour\",\"DAY\":\"Day\",\"MONTH\":\"Month\",\"WEEK\":\"Week\",\"YEAR\":\"Year\",\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TODAY\":\"Today\",\"YESTERDAY\":\"Yesterday\",\"LAST\":\"Last\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/audience/pl.json\n// module id = 1517\n// module chunks = 1","module.exports = {\"ANALYTICS_CONTENT\":{\"TITLE\":\"Analytics - Content\",\"HEADER\":{\"1\":\"Contents list\",\"2\":\"Content details\",\"3\":\"Views history\",\"4\":\"Engagement\"},\"SUBHEADER\":{\"1\":\"Views per user\",\"2\":\"Time per user\",\"3\":\"More details\",\"4\":\"Added to system\"},\"WORD\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TITLE\":\"Title\",\"SEARCH\":\"Search\",\"DURATION\":\"Duration\"},\"PLACEHOLDER\":{\"SEARCH\":\"Put title / id here and press Enter button\"},\"NO_DATA\":\"There is no data\"},\"ANALYTICS_CONTENT_DETAILS\":{\"TITLE\":\"Analytics - Content details\",\"HEADER\":{\"STATS_HISTORY\":\"Views history\",\"METADATA\":\"Content metadata\",\"ENGAGEMENT_RATE\":\"Engagement rate\"},\"WORD\":{\"RELATED_ID\":\"Related content ID\",\"CREATED_AT\":\"Added into system\",\"TAGS\":\"Tags\",\"TOTAL_VIEWS\":\"Views\",\"TOTAL_USERS\":\"Users\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"ENG_RATE_LIVE_STREAM_CLOCK_TYPE_WALL\":\"Wall clock time\",\"ENG_RATE_LIVE_STREAM_CLOCK_TYPE_CONTENT\":\"Content time\",\"ENG_RATE_SUMMARY_TOTAL_WATCHING_TIME\":\"Total watching time\",\"ENG_RATE_SUMMARY_AVG_WATCHING_TIME\":\"Time per view\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/content/en.json\n// module id = 1518\n// module chunks = 1","module.exports = {\"ANALYTICS_CONTENT\":{\"TITLE\":\"Analytics - Content\",\"HEADER\":{\"1\":\"Contents list\",\"2\":\"Content details\",\"3\":\"Views history\",\"4\":\"Engagement\"},\"SUBHEADER\":{\"1\":\"Views per user\",\"2\":\"Time per user\",\"3\":\"More details\",\"4\":\"Added to system\"},\"WORD\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TITLE\":\"Title\",\"SEARCH\":\"Search\",\"DURATION\":\"Duration\"},\"PLACEHOLDER\":{\"SEARCH\":\"Put title / id here and press Enter button\"},\"NO_DATA\":\"There is no data\"},\"ANALYTICS_CONTENT_DETAILS\":{\"TITLE\":\"Analytics - Content details\",\"HEADER\":{\"STATS_HISTORY\":\"Views history\",\"METADATA\":\"Content metadata\",\"ENGAGEMENT_RATE\":\"Engagement rate\"},\"WORD\":{\"RELATED_ID\":\"Related content ID\",\"CREATED_AT\":\"Added into system\",\"TAGS\":\"Tags\",\"TOTAL_VIEWS\":\"Views\",\"TOTAL_USERS\":\"Users\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"ENG_RATE_LIVE_STREAM_CLOCK_TYPE_WALL\":\"Wall clock time\",\"ENG_RATE_LIVE_STREAM_CLOCK_TYPE_CONTENT\":\"Content time\",\"ENG_RATE_SUMMARY_TOTAL_WATCHING_TIME\":\"Total watching time\",\"ENG_RATE_SUMMARY_AVG_WATCHING_TIME\":\"Time per view\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/content/pl.json\n// module id = 1519\n// module chunks = 1","module.exports = {\"ANALYTICS_DASHBOARD\":{\"TITLE\":\"Analytics - Dashboard\",\"SUMMARY\":{\"DESKTOP_VS_MOBILE\":\"Desktop vs Mobile\",\"USERS_IN_MONTH\":\"Users in month\",\"VIEWS_IN_MONTH\":\"Views in month\",\"LAST_30D\":\"In last 30 days\"},\"HEADER\":{\"CHART_LAST_48H\":\"Day views\",\"CHART_LAST_48H_SUB\":\"Trends for last current and previous day\",\"CHART_LAST_30D\":\"Last 30 days stats\",\"CHART_LAST_30D_SUB\":\"Trends for last 30 days\",\"TOP_MEDIA_30D\":\"Top watched contents\",\"TOP_MEDIA_24H\":\"Rising contents\",\"TOP_MEDIA_24H_SUB\":\"Views in last 24 hours\",\"HEATMAP\":\"Traffic heatmap\",\"HEATMAP_SUB\":\"Views and users over hours and week days\"},\"TOP_MEDIA_TABLE\":{\"POSITION\":\"Positon\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"VIEWS\":\"Views\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/dashboard/en.json\n// module id = 1520\n// module chunks = 1","module.exports = {\"ANALYTICS_DASHBOARD\":{\"TITLE\":\"Analytics - Dashboard\",\"SUMMARY\":{\"DESKTOP_VS_MOBILE\":\"Desktop vs Mobile\",\"USERS_IN_MONTH\":\"Users in month\",\"VIEWS_IN_MONTH\":\"Views in month\",\"LAST_30D\":\"In last 30 days\"},\"HEADER\":{\"CHART_LAST_48H\":\"Day views\",\"CHART_LAST_48H_SUB\":\"Trends for last current and previous day\",\"CHART_LAST_30D\":\"Last 30 days stats\",\"CHART_LAST_30D_SUB\":\"Trends for last 30 days\",\"TOP_MEDIA_30D\":\"Top watched contents\",\"TOP_MEDIA_24H\":\"Rising contents\",\"TOP_MEDIA_24H_SUB\":\"Views in last 24 hours\",\"HEATMAP\":\"Traffic heatmap\",\"HEATMAP_SUB\":\"Views and users over hours and week days\"},\"TOP_MEDIA_TABLE\":{\"POSITION\":\"Positon\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"VIEWS\":\"Views\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/dashboard/pl.json\n// module id = 1521\n// module chunks = 1","module.exports = {\"ANALYTICS_GEO\":{\"TITLE\":\"Analytics - Geo\",\"HEADER\":{\"MAP\":\"Map\",\"DETAILS\":\"Details\"},\"WORD\":{\"COUNTRY\":\"Country\",\"REGION\":\"Region\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"}},\"ANALYTICS_GEO_COUNTRY\":{\"TITLE\":\"Analytics - Geo for country\",\"TYPE\":{\"REGIONS\":\"Regions\",\"CITIES\":\"Cities\"},\"WORD\":{\"REGION\":\"Region\",\"CITY\":\"City\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/geo/en.json\n// module id = 1522\n// module chunks = 1","module.exports = {\"ANALYTICS_GEO\":{\"TITLE\":\"Analytics - Geo\",\"HEADER\":{\"MAP\":\"Map\",\"DETAILS\":\"Details\"},\"WORD\":{\"COUNTRY\":\"Country\",\"REGION\":\"Region\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"}},\"ANALYTICS_GEO_COUNTRY\":{\"TITLE\":\"Analytics - Geo for country\",\"TYPE\":{\"REGIONS\":\"Regions\",\"CITIES\":\"Cities\"},\"WORD\":{\"REGION\":\"Region\",\"CITY\":\"City\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/geo/pl.json\n// module id = 1523\n// module chunks = 1","module.exports = {\"HEARTBEAT\":{\"WORD\":{\"MOBILE_VIEWS\":\"Mobile views\",\"DESKTOP_VIEWS\":\"Desktop views\",\"TABLET_VIEWS\":\"Tablet views\",\"MOBILE\":\"Mobile\",\"DESKTOP\":\"Desktop\",\"TABLET\":\"Tablet\",\"CURRENT\":\"Current\",\"AVG\":\"Average\",\"NETWORK_STATUS\":\"Network status\",\"ERROR_RATE\":\"Error rate\",\"BROWSERS_ERROR_RATE\":\"Browsers error rate\",\"OS_ERROR_RATE\":\"OS error rate\",\"MATERIAL\":\"Materials\",\"SERVICES\":\"Services\",\"FAILRUES\":\"Failrues\",\"STARTUP\":\"Sartup\",\"REBUFFER\":\"Rebuffer\",\"QUALITY\":\"Quality\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"COUNTRY\":\"Country\",\"REGION\":\"Region\",\"BROWSER\":\"Browser\",\"OS\":\"OS\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/heartbeat/en.json\n// module id = 1524\n// module chunks = 1","module.exports = {\"HEARTBEAT\":{\"WORD\":{\"MOBILE_VIEWS\":\"Mobile views\",\"DESKTOP_VIEWS\":\"Desktop views\",\"TABLET_VIEWS\":\"Tablet views\",\"MOBILE\":\"Mobile\",\"DESKTOP\":\"Desktop\",\"TABLET\":\"Tablet\",\"CURRENT\":\"Current\",\"AVG\":\"Average\",\"NETWORK_STATUS\":\"Network status\",\"ERROR_RATE\":\"Error rate\",\"BROWSERS_ERROR_RATE\":\"Browsers error rate\",\"OS_ERROR_RATE\":\"OS error rate\",\"MATERIAL\":\"Materials\",\"SERVICES\":\"Services\",\"FAILRUES\":\"Failrues\",\"STARTUP\":\"Sartup\",\"REBUFFER\":\"Rebuffer\",\"QUALITY\":\"Quality\",\"ID\":\"Id\",\"TITLE\":\"Title\",\"COUNTRY\":\"Country\",\"REGION\":\"Region\",\"BROWSER\":\"Browser\",\"OS\":\"OS\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/heartbeat/pl.json\n// module id = 1525\n// module chunks = 1","module.exports = {\"ANALYTICS_INFO\":{\"TITLE\":\"Analytics - Info\",\"CLIENT_TOKEN\":{\"TITLE\":\"clientToken for tracking scripts\",\"DESC\":\"clientToken field is used by trackins scripts for data collection. You can need it if you are using 3-rd party player with bradmax analytics statistics.\",\"DOC_LINK_TEXT\":\"More info about plugins you can find on page\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/info/en.json\n// module id = 1526\n// module chunks = 1","module.exports = {\"ANALYTICS_INFO\":{\"TITLE\":\"Analytics - Info\",\"CLIENT_TOKEN\":{\"TITLE\":\"clientToken for tracking scripts\",\"DESC\":\"clientToken field is used by trackins scripts for data collection. You can need it if you are using 3-rd party player with bradmax analytics statistics.\",\"DOC_LINK_TEXT\":\"More info about plugins you can find on page\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/info/pl.json\n// module id = 1527\n// module chunks = 1","module.exports = {\"ANALYTICS_REALTIME\":{\"TITLE\":\"Analytics - Realtime\",\"AUDIENCE\":\"Audience\",\"TOP_CONTENT\":\"Top content\",\"SELECTED_CONTENR\":\"Selected content\",\"WORD\":{\"POSITION\":\"Position\",\"TITLE\":\"Title\",\"STREAMS\":\"Streams\",\"STREAMS_APROX_NOTE\":\"aprox. last 20 min\",\"WATCHING_USERS_PER_SEC\":\"Watching users - per second\",\"WATCHING_USERS_PER_MIN\":\"Watching users - per minute\",\"ID\":\"Id\",\"NAME\":\"Name\",\"USERS\":\"Users\",\"LAST_HOUR\":\"Last hour\",\"LAST_MINUTE\":\"Last minute\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/realtime/en.json\n// module id = 1528\n// module chunks = 1","module.exports = {\"ANALYTICS_REALTIME\":{\"TITLE\":\"Analytics - Realtime\",\"AUDIENCE\":\"Audience\",\"TOP_CONTENT\":\"Top content\",\"SELECTED_CONTENR\":\"Selected content\",\"WORD\":{\"POSITION\":\"Position\",\"TITLE\":\"Title\",\"STREAMS\":\"Streams\",\"STREAMS_APROX_NOTE\":\"aprox. last 20 min\",\"WATCHING_USERS_PER_SEC\":\"Watching users - per second\",\"WATCHING_USERS_PER_MIN\":\"Watching users - per minute\",\"ID\":\"Id\",\"NAME\":\"Name\",\"USERS\":\"Users\",\"LAST_HOUR\":\"Last hour\",\"LAST_MINUTE\":\"Last minute\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/realtime/pl.json\n// module id = 1529\n// module chunks = 1","module.exports = {\"ANALYTICS_SAMPLED_TRAFFIC\":{\"VIEW\":{\"TITLE\":\"Analytics - Content Report\"},\"CRITERIA\":{\"TITLE\":\"Criteria\",\"DATE_RANGE\":{\"LABEL\":\"Date range\",\"SELECT\":\"select date range\"},\"COUNTRY\":{\"LABEL\":\"Country\",\"SELECT\":\"select country\"},\"REGION\":{\"LABEL\":\"Region\",\"SELECT\":\"select region\",\"DISABLED\":\"first select country\"},\"FILTERS\":{\"LABEL\":\"Filters\",\"SELECT\":\"filter data\"},\"TAGS\":{\"LABEL\":\"Search tags\",\"SELECT\":\"search tags\"}},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"SELECTED_CRITERIA\":\"according to selected criteria\"},\"HISTORY\":{\"TITLE\":\"User and views\",\"EXPORT_TO_CSV\":\"export to .csv\",\"GRANULARITY\":{\"HOUR\":\"hour\",\"DAY\":\"day\",\"WEEK\":\"week\",\"MONTH\":\"month\",\"YEAR\":\"year\"}},\"GEOLOCATION\":{\"TITLE\":\"Geolocation\",\"USERS\":\"users\",\"VIEWS\":\"views\",\"TOTAL_PERCENT\":\"total %\",\"MAP\":{\"BACK_TO_WORLD\":\"back to world map\",\"BACK_TO_COUNTRY\":\"back to country map\"},\"LIST\":{\"COUNTRIES\":\"country\",\"PROVINCES\":\"region\"},\"NODATA\":\"no data available for selected criteria\"},\"TAGS\":{\"TITLE\":\"Top viewed tags\",\"TAG\":\"tag\",\"VALUE\":\"value\",\"VIEWS\":\"views\",\"TOTAL_PERCENT\":\"total %\",\"NODATA\":\"no data available for selected criteria\",\"LOADING\":\"loading ...\"},\"--HEADER\":{\"1\":\"Criteria\",\"2\":\"\",\"3\":\"Report\"},\"--INFO\":{\"HEADER\":\"Information\",\"NOTE\":\"There is no available data, plase select criteria\"},\"--PLACEHOLDER\":{\"TAG\":\"Click to add tag\"},\"--SUBPAGES\":{\"POSITION\":\"Position\",\"SUBPAGE\":\"Page\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"},\"--SUBTITLES\":{\"VIEWS_AND_USERS_HISTORY\":\"Views and users history\",\"MAP_VIEWS\":\"Map - views\",\"DETAILS_GEOLOCATION\":\"Details - geolocation\",\"VIEWS_PER_GENDER\":\"Views per gender\",\"VIEWS_PER_AGE_SEGMENT\":\"Views per age segment\",\"TAGS\":\"Tags\"},\"--WORD\":{\"REPORT_TYPE\":\"Type\",\"GRANULARITY_SELECTION\":\"Granularity\",\"DATE_RANGE_SELECTION\":\"Date range\",\"GEO_SELECTION\":\"Geolocation\",\"COUNTRY_SELECTION\":\"Country\",\"REGION_SELECTION\":\"Region\",\"CITY_SELECTION\":\"City\",\"REGION_DISABLED\":\"First select country\",\"CITY_DISABLED\":\"First select region\",\"TAG_SELECTION\":\"Tags\",\"GENDER_SELECTION\":\"Gender\",\"DEMOGRAPHY_SELECTION\":\"Demography\",\"AGE_RANGE_SELECTION\":\"Age range\",\"MALE\":\"Male\",\"FEMALE\":\"Female\",\"OTHER\":\"Other\",\"UNDEFINED\":\"Undefined\",\"GENERATE\":\"Generate report\",\"NO_DATA\":\"No data\",\"VIEWS\":\"Views\",\"TAG\":\"Tag\",\"NO_DATA_FOR_TAGS_LIST\":\"No tags for selected criteria\"},\"--REPORT_TYPE\":{\"REPORT\":\"Report\",\"GEOLOCATION\":\"Geolocation\",\"TAGS\":\"Tags\",\"GENDER\":\"Gender\",\"AGE\":\"Age\"},\"--GEO_GRANULARITY\":{\"REGION\":\"Region\",\"CITY\":\"City\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/sampled-traffic/en.json\n// module id = 1530\n// module chunks = 1","module.exports = {\"ANALYTICS_SAMPLED_TRAFFIC\":{\"TITLE\":\"Analytics - Content Report\",\"CRITERIA\":{\"TITLE\":\"Criteria\",\"DATE_RANGE\":{\"LABEL\":\"Date range\",\"SELECT\":\"select date range\"},\"COUNTRY\":{\"LABEL\":\"Country\",\"SELECT\":\"select country\"},\"REGION\":{\"LABEL\":\"Region\",\"SELECT\":\"select region\",\"DISABLED\":\"first select country\"},\"FILTERS\":{\"LABEL\":\"Filters\",\"SELECT\":\"filter data\"},\"TAGS\":{\"LABEL\":\"Search tags\",\"SELECT\":\"search tags\"}},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"SELECTED_CRITERIA\":\"according to selected criteria\"},\"HISTORY\":{\"TITLE\":\"User and views\",\"EXPORT_TO_CSV\":\"export to .csv\",\"GRANULARITY\":{\"HOUR\":\"hour\",\"DAY\":\"day\",\"WEEK\":\"week\",\"MONTH\":\"month\",\"YEAR\":\"year\"}},\"GEOLOCATION\":{\"TITLE\":\"Geolocation\",\"USERS\":\"users\",\"VIEWS\":\"views\",\"TOTAL_PERCENT\":\"total %\",\"MAP\":{\"BACK_TO_WORLD\":\"back to world map\",\"BACK_TO_COUNTRY\":\"back to country map\"},\"LIST\":{\"COUNTRIES\":\"country\",\"PROVINCES\":\"region\"},\"NODATA\":\"no data available for selected criteria\"},\"TAGS\":{\"TITLE\":\"Tags\",\"TAG\":\"tag\",\"VALUE\":\"value\",\"VIEWS\":\"views\",\"TOTAL_PERCENT\":\"total %\",\"NODATA\":\"no data available for selected criteria\",\"LOADING\":\"loading ...\"},\"--HEADER\":{\"1\":\"Criteria\",\"2\":\"\",\"3\":\"Report\"},\"--INFO\":{\"HEADER\":\"Information\",\"NOTE\":\"There is no available data, plase select criteria\"},\"--PLACEHOLDER\":{\"TAG\":\"Click to add tag\"},\"--SUBPAGES\":{\"POSITION\":\"Position\",\"SUBPAGE\":\"Page\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"},\"--SUBTITLES\":{\"VIEWS_AND_USERS_HISTORY\":\"Views and users history\",\"MAP_VIEWS\":\"Map - views\",\"DETAILS_GEOLOCATION\":\"Details - geolocation\",\"VIEWS_PER_GENDER\":\"Views per gender\",\"VIEWS_PER_AGE_SEGMENT\":\"Views per age segment\",\"TAGS\":\"Tags\"},\"--WORD\":{\"REPORT_TYPE\":\"Type\",\"GRANULARITY_SELECTION\":\"Granularity\",\"DATE_RANGE_SELECTION\":\"Date range\",\"GEO_SELECTION\":\"Geolocation\",\"COUNTRY_SELECTION\":\"Country\",\"REGION_SELECTION\":\"Region\",\"CITY_SELECTION\":\"City\",\"REGION_DISABLED\":\"First select country\",\"CITY_DISABLED\":\"First select region\",\"TAG_SELECTION\":\"Tags\",\"GENDER_SELECTION\":\"Gender\",\"DEMOGRAPHY_SELECTION\":\"Demography\",\"AGE_RANGE_SELECTION\":\"Age range\",\"MALE\":\"Male\",\"FEMALE\":\"Female\",\"OTHER\":\"Other\",\"UNDEFINED\":\"Undefined\",\"GENERATE\":\"Generate report\",\"NO_DATA\":\"No data\",\"VIEWS\":\"Views\",\"TAG\":\"Tag\",\"NO_DATA_FOR_TAGS_LIST\":\"No tags for selected criteria\"},\"--REPORT_TYPE\":{\"REPORT\":\"Report\",\"GEOLOCATION\":\"Geolocation\",\"TAGS\":\"Tags\",\"GENDER\":\"Gender\",\"AGE\":\"Age\"},\"--GEO_GRANULARITY\":{\"REGION\":\"Region\",\"CITY\":\"City\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/sampled-traffic/pl.json\n// module id = 1531\n// module chunks = 1","module.exports = {\"ANALYTICS_ST_RAPORT\":{\"TITLE\":\"Analytics - Content Report\",\"HEADER\":{\"1\":\"Criteria\",\"2\":\"\",\"3\":\"Report\"},\"INFO\":{\"HEADER\":\"Information\",\"NOTE\":\"There is no available data, plase select criteria\"},\"PLACEHOLDER\":{\"TAG\":\"Click to add tag\"},\"SUBPAGES\":{\"POSITION\":\"Position\",\"SUBPAGE\":\"Page\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"},\"SUBTITLES\":{\"VIEWS_AND_USERS_HISTORY\":\"Views and users history\",\"MAP_VIEWS\":\"Map - views\",\"DETAILS_GEOLOCATION\":\"Details - geolocation\",\"VIEWS_PER_GENDER\":\"Views per gender\",\"VIEWS_PER_AGE_SEGMENT\":\"Views per age segment\",\"TAGS\":\"Tags\"},\"WORD\":{\"REPORT_TYPE\":\"Type\",\"GRANULARITY_SELECTION\":\"Granularity\",\"DATE_RANGE_SELECTION\":\"Date range\",\"GEO_SELECTION\":\"Geolocation\",\"COUNTRY_SELECTION\":\"Country\",\"REGION_SELECTION\":\"Region\",\"CITY_SELECTION\":\"City\",\"REGION_DISABLED\":\"First select country\",\"CITY_DISABLED\":\"First select region\",\"TAG_SELECTION\":\"Tags\",\"GENDER_SELECTION\":\"Gender\",\"DEMOGRAPHY_SELECTION\":\"Demography\",\"AGE_RANGE_SELECTION\":\"Age range\",\"MALE\":\"Male\",\"FEMALE\":\"Female\",\"OTHER\":\"Other\",\"UNDEFINED\":\"Undefined\",\"GENERATE\":\"Generate report\",\"NO_DATA\":\"No data\",\"VIEWS\":\"Views\",\"TAG\":\"Tag\",\"NO_DATA_FOR_TAGS_LIST\":\"No tags for selected criteria\"},\"REPORT_TYPE\":{\"REPORT\":\"Report\",\"GEOLOCATION\":\"Geolocation\",\"TAGS\":\"Tags\",\"GENDER\":\"Gender\",\"AGE\":\"Age\"},\"GEO_GRANULARITY\":{\"REGION\":\"Region\",\"CITY\":\"City\"},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"SELECTED_CRITERIA\":\"according to selected criteria\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/st-raport/en.json\n// module id = 1532\n// module chunks = 1","module.exports = {\"ANALYTICS_ST_RAPORT\":{\"TITLE\":\"Analytics - Content Report\",\"HEADER\":{\"1\":\"Criteria\",\"2\":\"\",\"3\":\"Report\"},\"INFO\":{\"HEADER\":\"Information\",\"NOTE\":\"There is no available data, plase select criteria\"},\"PLACEHOLDER\":{\"TAG\":\"Click to add tag\"},\"SUBPAGES\":{\"POSITION\":\"Position\",\"SUBPAGE\":\"Page\",\"VIEWS\":\"Views\",\"USERS\":\"Users\"},\"SUBTITLES\":{\"VIEWS_AND_USERS_HISTORY\":\"Views and users history\",\"MAP_VIEWS\":\"Map - views\",\"DETAILS_GEOLOCATION\":\"Details - geolocation\",\"VIEWS_PER_GENDER\":\"Views per gender\",\"VIEWS_PER_AGE_SEGMENT\":\"Views per age segment\",\"TAGS\":\"Tags\"},\"WORD\":{\"REPORT_TYPE\":\"Type\",\"GRANULARITY_SELECTION\":\"Granularity\",\"DATE_RANGE_SELECTION\":\"Date range\",\"GEO_SELECTION\":\"Geolocation\",\"COUNTRY_SELECTION\":\"Country\",\"REGION_SELECTION\":\"Region\",\"CITY_SELECTION\":\"City\",\"REGION_DISABLED\":\"First select country\",\"CITY_DISABLED\":\"First select region\",\"TAG_SELECTION\":\"Tags\",\"GENDER_SELECTION\":\"Gender\",\"DEMOGRAPHY_SELECTION\":\"Demography\",\"AGE_RANGE_SELECTION\":\"Age range\",\"MALE\":\"Male\",\"FEMALE\":\"Female\",\"OTHER\":\"Other\",\"UNDEFINED\":\"Undefined\",\"GENERATE\":\"Generate report\",\"NO_DATA\":\"No data\",\"VIEWS\":\"Views\",\"TAG\":\"Tag\",\"NO_DATA_FOR_TAGS_LIST\":\"No tags for selected criteria\"},\"REPORT_TYPE\":{\"REPORT\":\"Report\",\"GEOLOCATION\":\"Geolocation\",\"TAGS\":\"Tags\",\"GENDER\":\"Gender\",\"AGE\":\"Age\"},\"GEO_GRANULARITY\":{\"REGION\":\"Region\",\"CITY\":\"City\"},\"SUMMARY\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"VIEWS_PER_USER\":\"Views per user\",\"AVG_WATCHING_TIME\":\"Avg. watching time per user\",\"IN_SELECTED_PERIOD\":\"In selected period\",\"SELECTED_CRITERIA\":\"according to selected criteria\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/st-raport/pl.json\n// module id = 1533\n// module chunks = 1","module.exports = {\"ANALYTICS_TAG_SERVICE\":{\"SELECT_EXISTING_TIP\":\"Please choose tag on list or type it in exact form\",\"PLACEHOLDER\":\"Find additional tag\",\"INITIAL_PLACEHOLDER\":\"Find and select tags\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/tag-service/en.json\n// module id = 1534\n// module chunks = 1","module.exports = {\"ANALYTICS_TAG_SERVICE\":{\"SELECT_EXISTING_TIP\":\"Please choose tag on list or type it in exact form\",\"PLACEHOLDER\":\"Find additional tag\",\"INITIAL_PLACEHOLDER\":\"Find and select tags\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/tag-service/pl.json\n// module id = 1535\n// module chunks = 1","module.exports = {\"ANALYTICS_TECHNOLOGY\":{\"TITLE\":\"Analytics - Technology\",\"DEVICES\":\"Devices\",\"OS\":\"Operating systems\",\"BROWSERS\":\"Browsers\",\"LABEL_TOTAL_VIEWS\":\"Total views\",\"TABLE\":{\"OS\":\"OS\",\"VIEWS\":\"Views\",\"BROWSER\":\"Browser\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/technology/en.json\n// module id = 1536\n// module chunks = 1","module.exports = {\"ANALYTICS_TECHNOLOGY\":{\"TITLE\":\"Analytics - Technology\",\"DEVICES\":\"Devices\",\"OS\":\"Operating systems\",\"BROWSERS\":\"Browsers\",\"LABEL_TOTAL_VIEWS\":\"Total views\",\"TABLE\":{\"OS\":\"OS\",\"VIEWS\":\"Views\",\"BROWSER\":\"Browser\"},\"MESSAGE\":{\"NO_DATA\":\"There is no data for selected time range.\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/technology/pl.json\n// module id = 1537\n// module chunks = 1","module.exports = {\"ANALYTICS_TOPCONTENT\":{\"TITLE\":\"Analytics - Top viewed content\",\"HEADER\":{\"1\":\"Contents list\",\"2\":\"Content details\",\"3\":\"Views history\",\"4\":\"Engagement\"},\"SUBHEADER\":{\"1\":\"Views per user\",\"2\":\"Time per user\",\"3\":\"More details\",\"4\":\"Added to system\"},\"WORD\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TITLE\":\"Title\",\"SEARCH\":\"Search\",\"DURATION\":\"Duration\",\"DATE_RANGE_SELECTION\":\"Top views for last:\",\"ALL_TIME\":\"All time\",\"POSITION\":\"Pos\",\"HOUR\":\"Hour\",\"24H\":\"24h\",\"7D\":\"7d\",\"30D\":\"30d\",\"365D\":\"365d\"},\"NO_DATA\":\"There is no data\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/top-content/en.json\n// module id = 1538\n// module chunks = 1","module.exports = {\"ANALYTICS_TOPCONTENT\":{\"TITLE\":\"Analytics - Top viewed content\",\"HEADER\":{\"1\":\"Contents list\",\"2\":\"Content details\",\"3\":\"Views history\",\"4\":\"Engagement\"},\"SUBHEADER\":{\"1\":\"Views per user\",\"2\":\"Time per user\",\"3\":\"More details\",\"4\":\"Added to system\"},\"WORD\":{\"USERS\":\"Users\",\"VIEWS\":\"Views\",\"TITLE\":\"Title\",\"SEARCH\":\"Search\",\"DURATION\":\"Duration\",\"DATE_RANGE_SELECTION\":\"Top views for last:\",\"ALL_TIME\":\"All time\",\"POSITION\":\"Pos\",\"HOUR\":\"Hour\",\"24H\":\"24h\",\"7D\":\"7d\",\"30D\":\"30d\",\"365D\":\"365d\"},\"NO_DATA\":\"There is no data\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/analytics/top-content/pl.json\n// module id = 1539\n// module chunks = 1","module.exports = {\"DATERANGEPICKER\":{\"RANGE\":{\"LAST_7DAYS\":\"Last 7 days\",\"LAST_30DAYS\":\"Last 30 days\",\"LAST_MONTH\":\"Last month\",\"CURRENT_MONTH\":\"Current month\",\"CURRENT_WEEK\":\"Current week\",\"LAST_WEEK\":\"Last week\"},\"LABEL\":{\"CANCEL\":\"Cancel\",\"APPLY\":\"Apply\",\"WEEK\":\"Week\",\"CUSTOM_RANGE\":\"Custom range\"},\"WORD\":{\"WEEK\":\"week\",\"WEEKS\":\"weeks\",\"LAST\":\"Last\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/components/en.json\n// module id = 1540\n// module chunks = 1","module.exports = {\"DATERANGEPICKER\":{\"RANGE\":{\"LAST_7DAYS\":\"Ostatnie 7 dni\",\"LAST_30DAYS\":\"Ostatnie 30 dni\",\"LAST_MONTH\":\"Ostatni miesiąc\",\"CURRENT_MONTH\":\"Bieżacy miesiąc\",\"CURRENT_WEEK\":\"Bieżacy tydzień\",\"LAST_WEEK\":\"Ostatni tydzień\"},\"LABEL\":{\"CANCEL\":\"Anuluj\",\"APPLY\":\"Zastosuj\",\"WEEK\":\"Tydzień\",\"CUSTOM_RANGE\":\"Własny zakres\"},\"WORD\":{\"WEEK\":\"week\",\"WEEKS\":\"weeks\",\"LAST\":\"Last\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/components/pl.json\n// module id = 1541\n// module chunks = 1","module.exports = {\"CONTACT\":{\"TITLE\":\"Contact us\",\"MESSAGE\":{\"ERROR\":\"It was not possible to send your message. Please try again.\",\"THANKS\":{\"TITLE\":\"Thank you for your interest!\",\"P1\":\"We will contact you as soon as possible with a reply.\",\"P2\":\"See you soon! =)\"}},\"BUTTON\":{\"CLOSE\":\"close\",\"SEND\":\"Send\",\"AGAIN\":\"Write Another Message\"},\"PLACEHOLDER\":{\"NAME\":\"Name\",\"EMAIL\":\"Email\",\"MESSAGE\":\"Type your message here...\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/contact/en.json\n// module id = 1542\n// module chunks = 1","module.exports = {\"CONTACT\":{\"TITLE\":\"Contact us\",\"MESSAGE\":{\"ERROR\":\"It was not possible to send your message. Please try again.\",\"THANKS\":{\"TITLE\":\"Thank you for your interest!\",\"P1\":\"We will contact you as soon as possible with a reply.\",\"P2\":\"See you soon! =)\"}},\"BUTTON\":{\"CLOSE\":\"close\",\"SEND\":\"Send\",\"AGAIN\":\"Write Another Message\"},\"PLACEHOLDER\":{\"NAME\":\"Name\",\"EMAIL\":\"Email\",\"MESSAGE\":\"Type your message here...\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/contact/pl.json\n// module id = 1543\n// module chunks = 1","module.exports = {\"NAME\":\"Bradmax Admin - english version\",\"MENU\":{\"USER\":{\"ACCOUNT\":\"Account\",\"LOGOUT\":\"Log out\"},\"MAIN\":{\"NAME\":\"navigation\",\"PRODUCTS\":\"Products\",\"ACCOUNT\":{\"NAME\":\"Account\",\"SUBSCRIPTIONS\":\"Subscriptions\",\"DETAILS\":\"Details\",\"INVOICES\":\"Invoices\",\"PAYMENTS\":\"Payments\"},\"ANALYTICS\":{\"NAME\":\"Analytics\",\"DASHBOARD\":\"Dashboard\",\"REALTIME\":\"Realtime\",\"AUDIENCE\":\"Audience\",\"TOP_CONTENT\":\"Top content\",\"CONTENT\":\"Content\",\"SELECTED_CONTENT\":\"Selected content\",\"GEO\":\"Geo\",\"GEO_COUNTRY\":\"Selected country\",\"TECHNOLOGY\":\"Technology\",\"QOS\":\"QOS\",\"ALBUMS\":\"Albums\",\"HEARTBEAT\":\"Hearbeat\",\"INFO\":\"Info\"},\"PLAYER_CONFIG\":\"Players List\",\"UPLOAD\":\"Upload\",\"MEDIA\":\"Media\",\"SETTINGS\":\"Settings\",\"CHANGELOG\":\"Changelog\",\"HELP\":{\"NAME\":\"Help\",\"DOCS\":\"Player documentation\",\"TUTORIAL\":\"Player tutorial\",\"PLAYERS_PLUGINS_DOCS\":\"Bradmax analytics players plugins\"},\"TERMS_AND_CONDITIONS\":\"Terms of use\",\"EU_FUNDS\":\"EU Funds\"}},\"MODAL\":{\"LOGOUT\":{\"ASK\":\"<strong>Do you want to log out ?</strong>\",\"YES\":\"log out\",\"NO\":\"stay\"},\"GDPR_INFO\":\"Hello,\\n\\nAt Bradmax, we are constantly striving to provide the best protection for your personal information. It is also important to us that the information regarding the manner in which we use and process them are transparent to you. That is why we are introducing a new privacy policy that meets both of these assumptions and, at the same time, meets the requirements of the General Data Protection Regulation (GDPR) (EU) 2016/679.\\n\\nFamiliarise yourself with the information clause in which we indicate how the personal data you provide will be processed.\\n\\nMay the peace be with you,\\nBradmax Team\\n\\n\\n\\nThe Bradmax information clause\\n<strong>Who is the administrator of your personal data?</strong>\\n\\nThe administrator, which is the entity deciding how your personal data will be used, is Bradmax pinok.io Sp. z o.o. Sp. k. (hereinafter \\\"Bradmax\\\") with registered office and address in Warsaw at  Jana Pawła II Avenue 61/164.\\n\\n<strong>Who can you contact for more information on the processing of personal data by Bradmax?</strong>\\nIf you have questions related to the processing of your personal data on Bradmax websites, you can contact a Bradmax representative using the contact details provided: office@bradmax.com\\n\\n<strong>Where does Bradmax have your data?</strong>\\nWe have received your personal information from you during the registration of your Bradmax account, as well as later, as a result of your activity on Bradmax websites. Information about you also comes from cookies collected by Bradmax and similar mechanisms of recording information in users' devices of the sites, as long as they allow you to identify you.\\n\\nIn addition, we receive information about you from payment operators, that is entities that enable you to make online payments for services purchased from Bradmax. We receive information from them about the status of your payment for the service.\\n\\nMore information on the scope of personal data being processed and the cookie files used can be found in the Privacy Policy.\\n\\n\\n\\n<strong>What is the purpose and basis of the processing of your personal data by Bradmax?</strong>\\n\\nBradmax processes your personal data to enable you to use Bradmax services, provide support for your Bradmax account and contact us, provide functionality of services offered, including technical problems, fulfill agreements with you, handle complaints about the operation of Bradmax services, perform duties resulting from legal provisions, including tax and accounting regulations, enable payment for services, monitor your activity on these websites and conduct research and analyses related to it, conduct direct marketing activities, including those related to the organisation of competitions and promotional campaigns.\\n\\nData that identifies you may also be used to match the content and ads displayed to your interests, to measure the quality and effectiveness of these activities, to improve the content and services provided, to inform about the content and services of Bradmax and our Partners (\\\"Partners\\\"), which list is available here, sharing on advertising space, ensuring security of information processing, IT systems management and for protection or redress purposes, for statistical and archival purposes, as well as to ensure accountability of legal obligations.\\n\\nBradmax is entitled to process your personal data, because it is necessary to perform the agreement (concluded with you by accepting the terms of service), as well as on the basis of law, e.g. when these laws require us to process your data for tax purposes and accounting (provisions of the Tax Ordinance Act and the Accounting Act).\\n\\nThe legal basis for the processing of personal data is also the legitimate interest of Bradmax. It includes improving services, ensuring their best quality and informing users about them, providing support for your Bradmax account, conducting research and analysis, conducting direct marketing, protecting or pursuing claims, creating statistics and ensuring accountability. Displaying advertisements tailored to your interests on websites, thanks to the automated comparison of your interests and preferences with the model interests and preferences of Internet users (profiling), allows you to cover the costs of services provided free of charge. In some of our services, the basis for processing personal data may be consent, which you will always be informed about. You can manage your consent, including withdrawal.\\n\\nPartners, as personal data controllers separate from Bradmax, process your personal data based on their legitimate interest or your consent.\\n\\n\\n\\n<strong>Do you have to provide Bradmax with your personal details?</strong>\\n\\nProviding personal data by you is a statutory requirement only to the extent resulting from the provisions of tax or accounting law, when we settle payments received from you. However, the requirement to conclude a contract with Bradmax (setting up a Bradmax account) is to provide the name of your company and e-mail address.\\n\\nIf you do not give us all this information about yourself, we will not be able to set up a Bradmax account for you, which will limit your ability to use some of the Bradmax services. In the remaining scope, providing data is voluntary.\\n\\n<strong>What are your rights to Bradmax regarding the data being processed?</strong>\\n\\nYou can request from Bradmax: access to your personal data, rectification, deletion, processing restrictions, portability, and non-automated decision making, including profiling, and you have the right to object to the processing of your personal data.\\n\\nYou can do these permissions when:\\n\\nregarding the request for data rectification: the data is incorrect or incomplete;\\nin relation to a request to delete data: the data is no longer necessary for the purposes for which it was collected by Bradmax; you will withdraw your consent to data processing; you object to the processing of this data beforehand; data is processed unlawfully; data should be deleted in order to fulfil the obligation arising from the law; or data have been collected in connection with the provision of electronic services offered to the child;\\nregarding the request to limit the processing of data: data is incorrect - for a period allowing Bradmax to check the accuracy of your data; the data is processed unlawfully, but you will not want to be removed; Your data is no longer needed by Bradmax but you may need it for defending or pursuing claims; or you object to the processing of the data - pending the determination of whether the legitimate grounds prevail over the basis of the opposition;\\nin relation to a request for transfer of data: the processing of data is carried out on the basis of your consent or contract concluded with you and this processing is carried out automatically.\\nYou have the right to lodge a complaint regarding the processing of your personal data by Bradmax to the President of the Office for Personal Data Protection.\\n\\n<strong>In what situations can you oppose the processing of your data?</strong>\\n\\nYou have the right to object to the processing of personal data when:\\n\\nthe processing of personal data takes place on the basis of a legitimate interest, or for statistical purposes, and the opposition is justified by your special situation,\\npersonal data are processed for direct marketing purposes.\\n\\n<strong>Who does Bradmax share your personal information with?</strong>\\n\\nBradmax, in principle, does not disclose your personal data to third parties, except in cases where we have a legal basis, including at the request of entities authorised by law, or when we use the services of Bradmax supporters, eg entrepreneurs providing hosting of our services , software maintenance support.\\n\\nDue to the need to prevent certain functions on Bradmax services from Internet robots, we use the Google reCAPTCH mechanism to sporadically investigate whether the behaviour of website users is not characteristic of robotic behaviour. For this reason, Bradmax may disclose Google Inc. the IP address of your computer.\\n\\n<strong>How long does Bradmax store your personal data?</strong>\\n\\nBradmax stores your personal data for the duration of the contract concluded with you, as well as - after its completion - for the period during which it is possible to pursue claims in connection with the performance of the contract, a maximum of 10 years from the date of termination of the contract. In addition, Bradmax stores your data for tax and accounting purposes for a period of 5 years after the end of the year in which the financial event took place.\\n\\nBradmax stores your personal data for marketing purposes for the duration of the legal basis and the purpose of data processing.\\n\\nBradmax stores data for statistical and archival purposes for the duration of the existence of the legal basis and the purpose of data processing.\\nDoes Bradmax transfer your data to countries outside the European Economic Area?\\nSome of our service providers may store website users' data outside of the European Economic Area. In such cases, Users' data may be stored in countries that provide an adequate level of protection of personal data, or in countries that do not provide such level. In the latter case, Bradmax secures your data by entering into contracts with Bradmax service providers containing so-called Standard Contractual Clauses accepted by the European Commission, which guarantee adequate protection of Users' data in third countries, use the EU - US Privacy Shield program (eg in the case of Google reCAPTCHA) or other grounds for the transfer of personal data.\\n\\n<strong>Does Bradmax profile your personal data or process it automatically in a way that affects your rights?</strong>\\n\\nProfiling of personal data is understood as the automated processing of your data, which is based on their use to assess certain factors, in particular to analyse or forecast aspects regarding the effects of your work, economic situation, health, personal preferences, interests, credibility, behaviour, location or movement.\\nBased on monitoring your activity on Bradmax websites, we perform analyses that result in:\\noptimisation of websites (including appearance, content, offers), in terms of user preferences;\\nrecommending content that matches your viewing profile;\\nthe emission of advertisements addressed to the groups of recipients to which you have been qualified;\\nrecommending offers tailored to your viewing profile and behaviours.\\n \\nHowever, we do not use this data for automated decision-making with you that could affect your rights.\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/content/en.json\n// module id = 1544\n// module chunks = 1","module.exports = {\"NAME\":\"Bradmax Admin - english version\",\"MENU\":{\"USER\":{\"ACCOUNT\":\"Account\",\"LOGOUT\":\"Log out\"},\"MAIN\":{\"NAME\":\"navigation\",\"PRODUCTS\":\"Products\",\"ACCOUNT\":{\"NAME\":\"Account\",\"SUBSCRIPTIONS\":\"Subscriptions\",\"DETAILS\":\"Details\",\"INVOICES\":\"Invoices\",\"PAYMENTS\":\"Payments\"},\"ANALYTICS\":{\"NAME\":\"Analytics\",\"DASHBOARD\":\"Dashboard\",\"REALTIME\":\"Realtime\",\"AUDIENCE\":\"Audience\",\"TOP_CONTENT\":\"Top content\",\"CONTENT\":\"Content\",\"SELECTED_CONTENT\":\"Selected content\",\"GEO\":\"Geo\",\"GEO_COUNTRY\":\"Selected country\",\"TECHNOLOGY\":\"Technology\",\"QOS\":\"QOS\",\"ALBUMS\":\"Albums\",\"HEARTBEAT\":\"Hearbeat\",\"INFO\":\"Info\"},\"PLAYER_CONFIG\":\"Players List\",\"UPLOAD\":\"Upload\",\"MEDIA\":\"Media\",\"SETTINGS\":\"Settings\",\"CHANGELOG\":\"Changelog\",\"HELP\":{\"NAME\":\"Help\",\"DOCS\":\"Player documentation\",\"TUTORIAL\":\"Player tutorial\",\"PLAYERS_PLUGINS_DOCS\":\"Bradmax analytics players plugins\"},\"TERMS_AND_CONDITIONS\":\"Terms of use\",\"EU_FUNDS\":\"EU Funds\"}},\"MODAL\":{\"LOGOUT\":{\"ASK\":\"<strong>Do you want to log out ?</strong>\",\"YES\":\"log out\",\"NO\":\"stay\"},\"GDPR_INFO\":\"Hello,\\n\\nAt Bradmax, we are constantly striving to provide the best protection for your personal information. It is also important to us that the information regarding the manner in which we use and process them are transparent to you. That is why we are introducing a new privacy policy that meets both of these assumptions and, at the same time, meets the requirements of the General Data Protection Regulation (GDPR) (EU) 2016/679.\\n\\nFamiliarise yourself with the information clause in which we indicate how the personal data you provide will be processed.\\n\\nMay the peace be with you,\\nBradmax Team\\n\\n\\n\\nThe Bradmax information clause\\n<strong>Who is the administrator of your personal data?</strong>\\n\\nThe administrator, which is the entity deciding how your personal data will be used, is Bradmax pinok.io Sp. z o.o. Sp. k. (hereinafter \\\"Bradmax\\\") with registered office and address in Warsaw at  Jana Pawła II Avenue 61/164.\\n\\n<strong>Who can you contact for more information on the processing of personal data by Bradmax?</strong>\\nIf you have questions related to the processing of your personal data on Bradmax websites, you can contact a Bradmax representative using the contact details provided: office@bradmax.com\\n\\n<strong>Where does Bradmax have your data?</strong>\\nWe have received your personal information from you during the registration of your Bradmax account, as well as later, as a result of your activity on Bradmax websites. Information about you also comes from cookies collected by Bradmax and similar mechanisms of recording information in users' devices of the sites, as long as they allow you to identify you.\\n\\nIn addition, we receive information about you from payment operators, that is entities that enable you to make online payments for services purchased from Bradmax. We receive information from them about the status of your payment for the service.\\n\\nMore information on the scope of personal data being processed and the cookie files used can be found in the Privacy Policy.\\n\\n\\n\\n<strong>What is the purpose and basis of the processing of your personal data by Bradmax?</strong>\\n\\nBradmax processes your personal data to enable you to use Bradmax services, provide support for your Bradmax account and contact us, provide functionality of services offered, including technical problems, fulfill agreements with you, handle complaints about the operation of Bradmax services, perform duties resulting from legal provisions, including tax and accounting regulations, enable payment for services, monitor your activity on these websites and conduct research and analyses related to it, conduct direct marketing activities, including those related to the organisation of competitions and promotional campaigns.\\n\\nData that identifies you may also be used to match the content and ads displayed to your interests, to measure the quality and effectiveness of these activities, to improve the content and services provided, to inform about the content and services of Bradmax and our Partners (\\\"Partners\\\"), which list is available here, sharing on advertising space, ensuring security of information processing, IT systems management and for protection or redress purposes, for statistical and archival purposes, as well as to ensure accountability of legal obligations.\\n\\nBradmax is entitled to process your personal data, because it is necessary to perform the agreement (concluded with you by accepting the terms of service), as well as on the basis of law, e.g. when these laws require us to process your data for tax purposes and accounting (provisions of the Tax Ordinance Act and the Accounting Act).\\n\\nThe legal basis for the processing of personal data is also the legitimate interest of Bradmax. It includes improving services, ensuring their best quality and informing users about them, providing support for your Bradmax account, conducting research and analysis, conducting direct marketing, protecting or pursuing claims, creating statistics and ensuring accountability. Displaying advertisements tailored to your interests on websites, thanks to the automated comparison of your interests and preferences with the model interests and preferences of Internet users (profiling), allows you to cover the costs of services provided free of charge. In some of our services, the basis for processing personal data may be consent, which you will always be informed about. You can manage your consent, including withdrawal.\\n\\nPartners, as personal data controllers separate from Bradmax, process your personal data based on their legitimate interest or your consent.\\n\\n\\n\\n<strong>Do you have to provide Bradmax with your personal details?</strong>\\n\\nProviding personal data by you is a statutory requirement only to the extent resulting from the provisions of tax or accounting law, when we settle payments received from you. However, the requirement to conclude a contract with Bradmax (setting up a Bradmax account) is to provide the name of your company and e-mail address.\\n\\nIf you do not give us all this information about yourself, we will not be able to set up a Bradmax account for you, which will limit your ability to use some of the Bradmax services. In the remaining scope, providing data is voluntary.\\n\\n<strong>What are your rights to Bradmax regarding the data being processed?</strong>\\n\\nYou can request from Bradmax: access to your personal data, rectification, deletion, processing restrictions, portability, and non-automated decision making, including profiling, and you have the right to object to the processing of your personal data.\\n\\nYou can do these permissions when:\\n\\nregarding the request for data rectification: the data is incorrect or incomplete;\\nin relation to a request to delete data: the data is no longer necessary for the purposes for which it was collected by Bradmax; you will withdraw your consent to data processing; you object to the processing of this data beforehand; data is processed unlawfully; data should be deleted in order to fulfil the obligation arising from the law; or data have been collected in connection with the provision of electronic services offered to the child;\\nregarding the request to limit the processing of data: data is incorrect - for a period allowing Bradmax to check the accuracy of your data; the data is processed unlawfully, but you will not want to be removed; Your data is no longer needed by Bradmax but you may need it for defending or pursuing claims; or you object to the processing of the data - pending the determination of whether the legitimate grounds prevail over the basis of the opposition;\\nin relation to a request for transfer of data: the processing of data is carried out on the basis of your consent or contract concluded with you and this processing is carried out automatically.\\nYou have the right to lodge a complaint regarding the processing of your personal data by Bradmax to the President of the Office for Personal Data Protection.\\n\\n<strong>In what situations can you oppose the processing of your data?</strong>\\n\\nYou have the right to object to the processing of personal data when:\\n\\nthe processing of personal data takes place on the basis of a legitimate interest, or for statistical purposes, and the opposition is justified by your special situation,\\npersonal data are processed for direct marketing purposes.\\n\\n<strong>Who does Bradmax share your personal information with?</strong>\\n\\nBradmax, in principle, does not disclose your personal data to third parties, except in cases where we have a legal basis, including at the request of entities authorised by law, or when we use the services of Bradmax supporters, eg entrepreneurs providing hosting of our services , software maintenance support.\\n\\nDue to the need to prevent certain functions on Bradmax services from Internet robots, we use the Google reCAPTCH mechanism to sporadically investigate whether the behaviour of website users is not characteristic of robotic behaviour. For this reason, Bradmax may disclose Google Inc. the IP address of your computer.\\n\\n<strong>How long does Bradmax store your personal data?</strong>\\n\\nBradmax stores your personal data for the duration of the contract concluded with you, as well as - after its completion - for the period during which it is possible to pursue claims in connection with the performance of the contract, a maximum of 10 years from the date of termination of the contract. In addition, Bradmax stores your data for tax and accounting purposes for a period of 5 years after the end of the year in which the financial event took place.\\n\\nBradmax stores your personal data for marketing purposes for the duration of the legal basis and the purpose of data processing.\\n\\nBradmax stores data for statistical and archival purposes for the duration of the existence of the legal basis and the purpose of data processing.\\nDoes Bradmax transfer your data to countries outside the European Economic Area?\\nSome of our service providers may store website users' data outside of the European Economic Area. In such cases, Users' data may be stored in countries that provide an adequate level of protection of personal data, or in countries that do not provide such level. In the latter case, Bradmax secures your data by entering into contracts with Bradmax service providers containing so-called Standard Contractual Clauses accepted by the European Commission, which guarantee adequate protection of Users' data in third countries, use the EU - US Privacy Shield program (eg in the case of Google reCAPTCHA) or other grounds for the transfer of personal data.\\n\\n<strong>Does Bradmax profile your personal data or process it automatically in a way that affects your rights?</strong>\\n\\nProfiling of personal data is understood as the automated processing of your data, which is based on their use to assess certain factors, in particular to analyse or forecast aspects regarding the effects of your work, economic situation, health, personal preferences, interests, credibility, behaviour, location or movement.\\nBased on monitoring your activity on Bradmax websites, we perform analyses that result in:\\noptimisation of websites (including appearance, content, offers), in terms of user preferences;\\nrecommending content that matches your viewing profile;\\nthe emission of advertisements addressed to the groups of recipients to which you have been qualified;\\nrecommending offers tailored to your viewing profile and behaviours.\\n \\nHowever, we do not use this data for automated decision-making with you that could affect your rights.\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/content/pl.json\n// module id = 1545\n// module chunks = 1","module.exports = {\"LOGIN\":{\"TITLE\":\"Login\",\"COMPANY_NAME\":\"Bradmax Ltd.\",\"MESSAGE\":{\"NOT_A_MEMBER\":\"Not a member yet? Click <a href='{{url}}' class='text-bradmax'>here</a> to register.\",\"FORGOT_PASSWORD\":\"Did you forget your password? Click <a href='{{url}}' class='text-bradmax'>here</a> to open page for resetting it.\"},\"LABEL\":{\"REMEMBER_ME\":{\"ON\":\"Remember Me\",\"OFF\":\"Don't remember Me\"},\"SIGN_ME_IN\":\"Log in\"},\"PLACEHOLDER\":{\"EMAIL\":\"Email Address\",\"PASSWORD\":\"Password\"},\"INVALID\":{\"USER\":\"Invalid email Address\",\"PASSWORD\":\"Invalid password\"},\"COPYRIGHT\":\"Copyright\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/login/en.json\n// module id = 1546\n// module chunks = 1","module.exports = {\"LOGIN\":{\"TITLE\":\"Login\",\"COMPANY_NAME\":\"Bradmax Ltd.\",\"MESSAGE\":{\"NOT_A_MEMBER\":\"Kliknij <a href='{{url}}' class='text-bradmax'>tu</a> aby się zarejestrować.\",\"FORGOT_PASSWORD\":\"Zapomniałeś hasła? Kliknij <a href='{{url}}' class='text-bradmax'>tu</a>, aby otworzyć stronę do resetowania hasła.\"},\"LABEL\":{\"REMEMBER_ME\":{\"ON\":\"Zapamiętaj mnie\",\"OFF\":\"Nie pamiętaj mnie\"},\"SIGN_ME_IN\":\"Zaloguj się\"},\"PLACEHOLDER\":{\"EMAIL\":\"Adres Email\",\"PASSWORD\":\"Hasło\"},\"INVALID\":{\"USER\":\"Nieprawidłowy adres email\",\"PASSWORD\":\"Nieprawidłowe hasło\"},\"COPYRIGHT\":\"Prawa autorskie\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/login/pl.json\n// module id = 1547\n// module chunks = 1","module.exports = {\"PASSWORD_CHANGE\":{\"MESSAGE\":{\"SUCCESS\":\"Your password was changed.\"},\"ERROR\":{\"FIELD_REQUIRED\":\"This field is required.\",\"MIN_LEN_8_CHARACTERS\":\"Password should have at last 8 characters.\",\"PASSWORDS_DIFFER\":\"New password differ with repeated version.\"},\"BUTTON\":{\"SAVE\":\"Save\"},\"FIELD\":{\"OLD_PASSWORD\":\"Old password\",\"NEW_PASSWORD\":\"New password\",\"NEW_PASSWORD_REPEAT\":\"New password repeat\"},\"PLACEHOLDER\":{\"OLD_PASSWORD\":\"Old password\",\"NEW_PASSWORD\":\"New password\",\"NEW_PASSWORD_REPEAT\":\"New password repeat\"},\"TITLE\":\"Password change\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/password-change/en.json\n// module id = 1548\n// module chunks = 1","module.exports = {\"PASSWORD_CHANGE\":{\"MESSAGE\":{\"SUCCESS\":\"Your password was changed.\"},\"ERROR\":{\"FIELD_REQUIRED\":\"This field is required.\",\"MIN_LEN_8_CHARACTERS\":\"Password should have at last 8 characters.\",\"PASSWORDS_DIFFER\":\"New password differ with repeated version.\"},\"BUTTON\":{\"SAVE\":\"Save\"},\"FIELD\":{\"OLD_PASSWORD\":\"Old password\",\"NEW_PASSWORD\":\"New password\",\"NEW_PASSWORD_REPEAT\":\"New password repeat\"},\"PLACEHOLDER\":{\"OLD_PASSWORD\":\"Old password\",\"NEW_PASSWORD\":\"New password\",\"NEW_PASSWORD_REPEAT\":\"New password repeat\"},\"TITLE\":\"Password change\"}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/password-change/pl.json\n// module id = 1549\n// module chunks = 1","module.exports = {\"PLAYER\":{\"LIST\":{\"LABEL\":\"Player configurations list\",\"TOTAL_COUNT\":\"items on list\",\"SELECTED_COUNT\":\"selected items\",\"SEE_DOCS\":\"see documentation\",\"BUTTON\":{\"ADD\":\"create new\",\"CLONE\":\"duplicate\",\"DELETE\":\"delete\",\"GET_ZIP\":\"get zip\",\"SEE_VER\":\"versions\",\"GO_EMBEDER\":\"get embed code\",\"EDIT\":\"edit\"},\"COLUMN\":{\"NAME\":\"name\",\"CREATED_AT\":\"created at\",\"UPDATED_AT\":\"updated at\"},\"MODAL\":{\"ADD\":{\"HEADER\":\"Create new player configuration\",\"INPUT\":\"name\",\"ADD\":\"create\",\"CANCEL\":\"discard\"},\"DELETE\":{\"HEADER\":\"Do You want to delete configuration ?\",\"YES\":\"yes\",\"NO\":\"no\"},\"DUPLICATE\":{\"HEADER\":\"Do You want to clon configuration ?\",\"YES\":\"yes\",\"NO\":\"no\"}}},\"CONFIG\":{\"LABEL\":\"Player configurator\",\"TOO_BIG_LOGO\":\"<p>Image size exceed limits for logo image witch is:</p><p>width:{{limitWidth}}px,</p><p>height: {{limitHeight}}px.</p><p>file size: {{limitFileSize}} bytes.</p><p>Plaease select different image.</p>\",\"MODAL\":{\"ERROR\":{\"SAVE\":{\"TEXT\":\"<h4>Error during api request.</h4><br>Do you want to try again ?\",\"YES\":\"yes, try again\",\"NO\":\"no\"}},\"PUBLISH\":{\"TEXT\":\"<h4>Do You also want to generate player files,<br> for download and use on your site ?</h4>\",\"YES\":\"yes, generate files\",\"NO\":\"no, just save settings\"},\"COLOR_RESET\":{\"BASE\":\"<h4>This will reset skin to default color scheme.</h4><h5> to base color: {{ color }}</h5>.\",\"COLOR\":\"<h4>This will reset color </h4><h5> to value: {{ color }}</h5>.\",\"YES\":\"yes, reset\",\"NO\":\"no, don't reset\"},\"SAVE_CHANGES\":{\"TEXT\":\"<h4>Detected changes without, saving.</h4><h5>Do you want to save them now ?</h5>\",\"SAVE\":\"yes, save and close\",\"DONT_SAVE\":\"close, without saving\",\"CANCEL\":\"cancel\"}},\"DOCS\":{\"TEXT\":\"for more details please see\",\"LINK\":\"documentation page\"}},\"EMBEDER\":{\"TITLE\":\"Player embed code generator\",\"PANEL_TITLE\":{\"PLAYER_INFO\":\"Player info\",\"FORM\":\"Configuration\",\"PREVIEW\":\"Preview\"},\"PLAYER_NAME\":\"Player name\",\"COPY_TO_CLIPBOARD\":\"copy embed code to clipboard\",\"TOGGLE_OPTIONAL\":[\"show optional parameters\",\"hide optional parameters\"],\"DOWNLOAD_ZIP\":\"Download related zip file with examples and player.\",\"BACK\":\"back\",\"INPUT\":{\"TYPE\":{\"LABEL\":\"embed code type\",\"VALUE\":[\"Iframe embed code\",\"Dynamic embed code\"]},\"WIDTH\":{\"LABEL\":\"player width in pixels\",\"PLACEHOLDER\":\"enter player width in pixels\"},\"HEIGHT\":{\"LABEL\":\"player height in pixels\",\"PLACEHOLDER\":\"enter player height in pixels\"},\"MEDIAURL\":{\"LABEL\":\"media url\",\"PLACEHOLDER\":\"enter url to valid media file\"},\"MEDIAURL2\":{\"LABEL\":\"media url [2] (additional fallback format)\",\"PLACEHOLDER\":\"enter url to valid media file (used when problem with other media url)\"},\"TITLE\":{\"LABEL\":\"media title\",\"PLACEHOLDER\":\"enter media title displayed in player\"},\"DURATION\":{\"LABEL\":\"media duration\",\"PLACEHOLDER\":\"enter media duration in seconds\"},\"SPLASHIMAGEURL\":{\"LABEL\":\"splash image url\",\"PLACEHOLDER\":\"enter url to valid media image file\"},\"ID\":{\"LABEL\":\"ID\",\"PLACEHOLDER\":\"enter media id for bradmax content statistics\"},\"ADSVMAPURL\":{\"LABEL\":\"ads VMAP URL\",\"PLACEHOLDER\":\"enter VMAP URL for ads\"},\"ADSPREROLLVASTURL\":{\"LABEL\":\"preroll ads VAST URL\",\"PLACEHOLDER\":\"enter preroll ads VAST URL\"}}},\"VERSIONS\":{\"CHANGES_SAVED_NOTIFICATION\":\"Changes were saved\",\"MESSAGE\":{\"EMPTY\":\"There are no version available yet.\"},\"LINK\":{\"DOC\":\"documentation\",\"ZIP\":\"download\",\"EMBED\":\"embed code\"}}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/player/en.json\n// module id = 1550\n// module chunks = 1","module.exports = {\"PLAYER\":{\"LIST\":{\"LABEL\":\"Lista konfiguracji\",\"TOTAL_COUNT\":\"odnaleziono pozycji\",\"SELECTED_COUNT\":\"zaznaczono pozycji\",\"SEE_DOCS\":\"zobacz dokumentację\",\"BUTTON\":{\"ADD\":\"dodaj nowy\",\"CLONE\":\"klonuj\",\"DELETE\":\"usuń\",\"GET_ZIP\":\"pobierz zip\",\"SEE_VER\":\"wersje\",\"GO_EMBEDER\":\"kod osadzania\",\"EDIT\":\"edytuj\"},\"COLUMN\":{\"NAME\":\"dodaj nowy\",\"CREATED_AT\":\"klonuj\",\"UPDATED_AT\":\"usuń\"},\"MODAL\":{\"ADD\":{\"HEADER\":\"Dodaj nową konfigurację\",\"INPUT\":\"nazwa\",\"ADD\":\"dodaj\",\"CANCEL\":\"zamknij\"},\"DELETE\":{\"HEADER\":\"Czy chcesz usunąć konfiguracje ?\",\"YES\":\"tak\",\"NO\":\"nie\"},\"DUPLICATE\":{\"HEADER\":\"Czy chcesz sklonować konfigurację ?\",\"YES\":\"tak\",\"NO\":\"nie\"}}},\"CONFIG\":{\"LABEL\":\"Konfigurator\",\"TOO_BIG_LOGO\":\"<p>Rozmiar obrazka przekroczył limit, który wynosi:</p> <p>długosc{{limitWidth}}px,</p><p> szerokosc{{limitHeight}}px.</p><p>wielkość pliku: {{limitFileSize}} bajtów.</p><p> Proszę wybrac inny mniejszy plik.</p>\",\"MODAL\":{\"ERROR\":{\"SAVE\":\"<p>Wystąpił błąd podczas zapisu.</p><p>Proszą spróbowajeszcze raz.</p>\"},\"PUBLISH\":{\"TEXT\":\"<h4>Czy chcesz wygenerować pliki odtwarzaczas do pobrania i użycia na twojej stronie ?</h4>\",\"YES\":\"tak, wygeneruj pliki\",\"NO\":\"nie, zapisz tylko ustawienia\"},\"COLOR_RESET\":{\"BASE\":\"<h4>Zmiana spowoduje reset schematu kolorów do domyślnego.</h4><h5>przy uyciu koloru bazowego: {{ color }}.</h5>\",\"COLOR\":\"<h4>Zmiana spowoduje reset koloru.</h4><h5>Do wartości: {{ color }}</h5>\",\"YES\":\"tak, resetuj\",\"NO\":\"nie, pozostaw\"},\"SAVE_CHANGES\":{\"TEXT\":\"<h4>Dokonano zmian, które nie zostały zapisane.</h4><h5>Czy chcesz je teraz zapisać ?</h5>\",\"SAVE\":\"tak, zapisz i wyjdź\",\"DONT_SAVE\":\"wyjdź, bez zapisu\",\"CANCEL\":\"zamknij\"}},\"DOCS\":{\"TEXT\":\"for more details please see\",\"LINK\":\"documentation page\"}},\"EMBEDER\":{\"TITLE\":\"Generator kodu osadzania playera\",\"PANEL_TITLE\":{\"PLAYER_INFO\":\"Player\",\"FORM\":\"Konfiguracja\",\"CODE\":\"kod osadzania\",\"PREVIEW\":\"Player preview\"},\"PLAYER_NAME\":\"Player name\",\"COPY_TO_CLIPBOARD\":\"kopiuj kod osadzania do schowka\",\"TOGGLE_OPTIONAL\":[\"pokaz dodatkowe parametry\",\"ukryj dodatkowe parametry\"],\"DOWNLOAD_ZIP\":\"Pobierz plik zip dla tej wersji z przykładami i odtwarzaczem.\",\"BACK\":\"wróć\",\"INPUT\":{\"TYPE\":{\"LABEL\":\"Typ kodu osadzania\",\"VALUE\":[\"Iframe\",\"Dynamiczny\"]},\"WIDTH\":{\"LABEL\":\"szerokośc odtwarzacza w pikselach\",\"PLACEHOLDER\":\"podaj szerokośc odtwarzacza w pikselach\"},\"HEIGHT\":{\"LABEL\":\"wysokośc odtwarzacza w pikselach\",\"PLACEHOLDER\":\"podaj wysokośc odtwarzacza w pikselach\"},\"MEDIAURL\":{\"LABEL\":\"źródło\",\"PLACEHOLDER\":\"podaj url do pliku z video\"},\"MEDIAURL2\":{\"LABEL\":\"źródło [2] (zapasowy format)\",\"PLACEHOLDER\":\"podaj url do pliku z video (wykorzystywany, gdy problem z innym źródłem wideo)\"},\"TITLE\":{\"LABEL\":\"tytuł\",\"PLACEHOLDER\":\"podaj tytuł do wyświetlenia \"},\"DURATION\":{\"LABEL\":\"czas trwania\",\"PLACEHOLDER\":\"podaj czas trwania w sekundach\"},\"SPLASHIMAGEURL\":{\"LABEL\":\"obraz splash\",\"PLACEHOLDER\":\"podaj url do pliku z obrazem\"},\"ID\":{\"LABEL\":\"ID\",\"PLACEHOLDER\":\"podaj identyfikator wideo dla statystyk bradmax\"},\"ADSVMAPURL\":{\"LABEL\":\"ads VMAP URL\",\"PLACEHOLDER\":\"enter VMAP URL for ads\"},\"ADSPREROLLVASTURL\":{\"LABEL\":\"preroll ads VAST URL\",\"PLACEHOLDER\":\"enter preroll ads VAST URL\"}}},\"VERSIONS\":{\"CHANGES_SAVED_NOTIFICATION\":\"Zmiany zostały zapisane\",\"MESSAGE\":{\"EMPTY\":\"Brak dostępnych wersji.\"},\"LINK\":{\"DOC\":\"dokumentacja\",\"ZIP\":\"pobierz\",\"EMBED\":\"kod osadzania\"}}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/player/pl.json\n// module id = 1551\n// module chunks = 1","module.exports = {\"PRODUCTS\":{\"TITLE\":\"Our Products\",\"SUBTITLE\":\"here you can find the available products. Have a look!\",\"BUTTON\":{\"YES\":\"Yes\",\"CONTINUE\":\"Continue\",\"CREATE_NEW\":\"Create new\",\"CANCEL\":\"Cancel\"},\"MESSAGE\":{\"ACCOUNT_INVALID\":\"Your account details are not ready for payments, do you wish to update them?\",\"SUBSCRIPTION_REUSE\":\"You have a pending order for plan {{ name }} already. Do you wish to continue it?\",\"DEFAULT_ERROR\":\"An error ocurred when processing your request. Please try again.\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/products/en.json\n// module id = 1552\n// module chunks = 1","module.exports = {\"PRODUCTS\":{\"TITLE\":\"Our Products\",\"SUBTITLE\":\"here you can find the available products. Have a look!\",\"BUTTON\":{\"YES\":\"yes\"},\"MESSAGE\":{\"ACCOUNT_INVALID\":\"Your account details are not ready for payments, do you wish to update them?\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/products/pl.json\n// module id = 1553\n// module chunks = 1","module.exports = {\"PLAN_CARROUSEL\":{\"VIEWS\":\"views\",\"RECOMMENDED\":\"RECOMMENDED\",\"VIEWS_INC\":\"video views\",\"MONTH\":\"month\",\"BASE\":\"Base\",\"ESTIMATED\":\"Estimated\",\"CURRENT_PLAN\":\"CURRENT PLAN\",\"EXTRA\":{\"STATS\":\"Statistics\",\"ADS\":\"Advertisements\",\"DRM\":\"DRM support\",\"EMAIL\":{\"BASIC\":\"Basic e-mail support\",\"FULL\":\"Full e-mail support\"},\"PHONE\":{\"BASIC\":\"Basic phone support\",\"FULL\":\"Full phone support\"},\"VIDEO\":{\"BASIC\":\"Basic video support\",\"FULL\":\"Full video support\"}},\"BUTTON\":{\"BUY\":\"Buy\",\"CONTACT\":\"Contact us\",\"CURRENT\":\"Current\",\"USED\":\"Current Plan\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/products/plan-carrousel/en.json\n// module id = 1554\n// module chunks = 1","module.exports = {\"PLAN_CARROUSEL\":{\"VIEWS\":\"views\",\"RECOMMENDED\":\"RECOMMENDED\",\"VIEWS_INC\":\"video views\",\"MONTH\":\"month\",\"BASE\":\"Base\",\"ESTIMATED\":\"Estimated\",\"CURRENT_PLAN\":\"CURRENT PLAN\",\"EXTRA\":{\"STATS\":\"Statistics\",\"ADS\":\"Advertisements\",\"DRM\":\"DRM support\",\"EMAIL\":{\"BASIC\":\"Basic e-mail support\",\"FULL\":\"Full e-mail support\"},\"PHONE\":{\"BASIC\":\"Basic phone support\",\"FULL\":\"Full phone support\"},\"VIDEO\":{\"BASIC\":\"Basic video support\",\"FULL\":\"Full video support\"}},\"BUTTON\":{\"BUY\":\"Buy\",\"CONTACT\":\"Contact us\",\"CURRENT\":\"Current\",\"USED\":\"Current Plan\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/products/plan-carrousel/pl.json\n// module id = 1555\n// module chunks = 1","module.exports = {\"SUBSCRIPTION\":{\"TITLE\":\"Subscription\",\"MESSAGE\":{\"THANKS\":{\"TITLE\":\"Thank You for choosing us!\",\"P1\":\"Congratulations, you have just subscribed to Bradmax Video Player. Start right away customizing your player!\"}},\"BUTTON\":{\"NAV_PLAYER\":\"Go To Player List\",\"NEXT\":\"Next\",\"PREVIOUS\":\"Previous\",\"SUBMIT\":\"Confirm and Finish\",\"EDIT\":\"Edit\",\"ACCEPT\":\"I Agree\",\"NOT_ACCEPT\":\"I Don't Agree\"},\"STEPS\":{\"STEP_1\":{\"TITLE\":\"Subscription Details\",\"SUBTITLE\":\"Your subscripion details\",\"SECTION_1\":{\"TITLE\":\"Your Selected Plan\"},\"SECTION_2\":{\"TITLE\":\"Billing Details\",\"SUBTITLE\":\"Make sure your billing details are correct\"}},\"STEP_2\":{\"TITLE\":\"Payment & Finish\",\"SUBTITLE\":\"Select a payment method and finish\",\"SECTION_1\":{\"TITLE\":\"Payment Method\",\"SUBTITLE\":\"Select or add a new payment method\"},\"SECTION_2\":{\"TITLE\":\"Confirm & Finish\",\"SUBTITLE\":\"Confirm that all the information is correct and Finish\"}}},\"LABEL\":{\"COMPANY\":\"Company\",\"COUNTRY\":\"Country\",\"STATE\":\"State\",\"CITY\":\"City\",\"ADDRESS\":\"Address\",\"POSTAL_CODE\":\"Postal code\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax Identification No.\"},\"TERMS_AND_CONDITIONS\":{\"TITLE\":\"Terms And Conditions\",\"BODY\":\"This Terms of Service are binding to all Publishers and Users. The use of the Player is tantamount with the acceptance of this Terms of Service. If you do not accept the terms of service you are prohibited from using the player. The Player is available in different Editions, including unpaid and paid options. Certain rights, obligations and features or restrictions vary by Edition. Unless otherwise stated this Terms of Service apply to all Editions. The Player requires a browser that supports HTML5 / MSE and H264. Older browsers like Internet Explorer 10 are not supported without additional plug-ins i.e. flash. The Player supports the following: (a) codecs: H264 for video and AAC for audio. MP3 is not supported with HTML5, (b) advertisements formats: VAST, VMAP, VPAID, (c) video formats: HLS and Smooth streaming integrated into the Player without plugins, Dash, MP4, Webm, live streaming.\\n\\nThe Player is adjustable to every device with internet connection, including smartphones, tablets, smart TV, desktops.\\n\\n<strong>Definitions</strong>\\n\\n“Adaptation” means any work that modifies, adds to, deletes from, edits, affects the function of or is based on a Player or any previous Adaptation thereof, including but not limited to all plug-ins and other derivative works as such term is defined by the applicable law.\\n\\n“Analytics Plug-In” means a plug-in or other code that enables Company to collect information regarding Publisher’s Use (such as browser type, Internet Service Provider, IP address and operating system). Company’s collection and utilization of such information is governed by these Terms of Service.\\n\\n“Company” means Bradmax pinok.io Sp. z o.o. Sp. k., Jana Pawła II 61/164, 01-031 Warsaw, NIP: 7010497796.\\n\\n“Content” means media including videos, images, graphics, animations, sounds, text and music and any related submissions (e.g. viewer comments) hosted, streamed, or played through the Player.\\n\\n“Data” means all transactional and Content data obtained by, processed by or provided to the Company in connection with the use of the Player. Data may include metadata (such as title, author, description and other information pertaining to Content), IP addresses, URLs, browser and operating system. Use of Data is governed by these Terms of Service.\\n\\n“Distribute” means to sell, transfer, assign, circulate or make available to any third party, or the facilitation of the foregoing.\\n\\n“Edition” means a particular edition of the Player, including the Free Edition, Basic Edition, Basic+ Edition, Pro Edition, Pro+ Edition, Infinity Edition and DRM Edition.\\n\\n“Upgraded Edition” means a particular edition of the Player with extended features or functionalities offered for the higher price in comparison to the licensed Edition.\\n\\n“Downgraded Edition” means a particular edition of the Player with limited features or functionalities offered for the lower price in comparison to the licensed Edition.\\n\\n“Effective Date” means the earliest date a Player is Used by Publisher or User.\\n\\n“End User” means an individual or entity that accesses or Uses Publisher’s or User’s Content.\\n\\n“Fee” means the amount payable to the Company for Use of the Player.\\n\\n“License Scope” means the features, rights, obligations and limitations authorized for a particular Edition of the Player.\\n\\n“OEM” means incorporation of the Player into any goods or services other than Publisher’s websites, including SDK Applications and other goods and services.\\n\\n“On-line Order Form” is an agreement between Company and Publisher setting forth custom pricing and terms for the use of Player and includes any contemporaneous Addendum thereto. In the event of any conflict between the terms of an On-line Order Form and these Terms of Service, the On-line Order Form shall take precedence.\\n\\n“Play” means each instance of Content streamed, in whole or in part, through the Player. In case the Content is streamed with breaks without reloading, it shall be treated as a single act of Play.\\n\\n“Player” means the Licensed Bradmax HTML 5 Player, software and any features, plug-ins and updates provided by Company, owned and developed by the Company together with associated services and/or SDK or SDK Applications.\\n\\n“Publisher” any individual or entity running commercial activity with the Use of Player.\\n\\n“User” any individual or entity using free of charge Edition of the Player.\\n\\n“Publisher Information” means personal and non-personal information about Publisher including but not limited to Publisher’s name, address, email address, telephone number, and, if Publisher transacts business with the Company, financial information such as payment method (valid credit card number, type, expiration date or other financial information).\\n\\n“Purpose” means (i) Use to facilitate Content playback and streaming on Publisher’s websites, (ii) Use of the SDK to develop and Distribute SDK Applications, (iii) other OEM Use.\\n\\n“SDK” means the Player Software Development Kits for Android and iOS, including all components thereof (documentation, code, tools, libraries, data, files and materials) and all updates thereto[ARM4] .\\n\\n“SDK Applications” means application software for Operating Systems, created with the SDK and incorporating the Player .\\n\\n“Services” means services provided to Publisher under these Terms of Service, including cloud-hosted versions of the Player and SDK provided as software as a service (SaaS), hosting and streaming functionality and maintenance and support services.\\n\\n“Terms of Service” means this document and any applicable addendum or new or revised versions.\\n\\n“Free Edition” means the Edition of the Player for which Fees are not required.\\n\\n“Use” means operating, accessing, downloading, installing, integrating or providing Content through a Player or Adaptation.\\n\\n<strong>Player</strong>\\n\\nPublisher’s or User’s rights and licenses to Use Player are limited to the Editions for which it has enrolled, is eligible and has paid all Fees (for paid Editions) in accordance with these Terms of Service. Any Use of the Player other than as permitted by these Terms of Service is strictly prohibited. The Company reserves all rights and licenses not expressly granted hereunder.\\n\\n<strong>Licenses</strong>\\n\\nThe License Scope varies by Edition and the licenses granted hereunder are limited accordingly. Unless otherwise provided, licenses are personal to Publisher or User for its own Use.\\n\\nSubject to the terms and conditions of these Terms of Service and Publisher’s (User’s) observance thereof, Company hereby grants to Publisher (User) and Publisher (User) hereby accepts a limited in time, non-exclusive, non-transferable, non-sublicensable, limited right and license to (a) Use, access and install the Player, solely for the Purpose, (b) Use, access, integrate and install the SDK for use in connection with the Purpose, (c) publicly Distribute SDK Applications for the Operating Systems, and (e) operate and allow end users of SDK Applications to operate the Player incorporated into such SDK Applications.\\n\\nUse of the Free Editions with advertising of any kind is prohibited.\\n\\n<strong>License Scope, Edition, Fees</strong>\\n\\nEditions have the following License Scope (volume per month where applicable) per Play (views) as defined above. Invoice is issued by the Company in the electronic form within the term defined by the applicable law after the effective payment.\\n\\n<strong>Change of the Edition</strong>\\n\\nIf you would like upgrading to the Upgraded Edition you have to file the upgrading form and pay the respective fee for the Upgraded Edition. In such a case, you may use the Upgraded Edition as of the date on which the Fee for the Upgraded Edition has been booked on the Company’s account. With that moment the previous license is terminated. All Fees paid before change to the Upgraded Edition are not refund.\\n\\nIf you would like downgrading to the Downgraded Edition you have to file the downgrading form. In such a case, you may use the Downgraded Edition after the expiration of the actual Edition licensed to you upon payment of the Fee for the Downgraded Edition, if applicable.\\n\\n<strong>Advertisements</strong>\\n\\nPublishers who are using Free Edition are strictly prohibited from using the Player in any manner to display advertisements. Such prohibition includes actions such as (i) the making or use of any Adaptation that enables any type of advertisement to be shown in, on or around the Player (e.g., a skin), (ii) interoperation of the Player with any software that serves advertisements and (iii) adding advertisements to a playlist.\\n\\n<strong>Registration</strong>\\n\\nPublisher and User must create a username and password as well as provide an accurate email address and name and surname. Publisher (User) is strictly prohibited from: (i) providing false sign-up information, (ii) using a name, address or email address owned or controlled by another person with the intent to impersonate that person or (iii) providing an email address subject to any rights of a person other than Publisher without appropriate authorization. The Company reserves the right to refuse registration or cancel any account that it reasonably believes is in violation of the foregoing. Publisher (User) shall be responsible for maintaining the confidentiality of its password and is liable for all activities that occur on its account. Publisher (User) agrees to immediately notify the Company of any unauthorized use of Publisher’s (User’s) username, password or other breach of security.\\n\\n<strong>Adaptations and OEM</strong>\\n\\nPublisher is authorized to make Adaptations reasonably necessary to exercise its rights under these Terms of Service, e.g., Adaptations to integrate the Player into Publisher’s websites. All Adaptations created by Publisher are strictly for its own Use. The Company reserves the right to prohibit the Use of any Adaptation in its sole discretion.\\n\\nOEM is authorized only in connection with the paid Edition. Publishers who use Free Edition are strictly prohibited from incorporation of a Player into any goods or services[ARM8] .\\n\\n<strong>SDK</strong>\\n\\nCompany may update the SDK at any time and is under no obligation to provide notice thereof. Updates may have features or functionality that differ from that of the current SDK. Company may identify certain updates as being critical by written notice (including e-mail to the address provided by Publisher). Publisher shall promptly incorporate such critical updates into its SDK Applications and, if such SDK Applications have been Distributed, shall provide a public update thereto no later than ten (10) days after such notice unless a different period is specified by the Company.\\n\\nPublisher acknowledges that development for each Operating System may be subject to the applicable Operating System provider’s own rules, regulations, standards and requirements and that Company has no control or responsibility therefore. Publisher is solely responsible for its compliance with the foregoing and Company makes no representations or warranties of compatibility with any Operating System.\\n\\n<strong>Distribution</strong>\\n\\nExcept as specifically set forth herein, Publisher shall not Distribute, re-license, sell, lease, transfer, encumber, assign or make available for public use the Player or any Adaptation thereof. Any attempt to take any such actions is void, and will automatically terminate Publisher’s rights under these Terms of Service. Notwithstanding the foregoing, Publisher may duplicate the licensed programs delivered with the Player and its own permitted Adaptations solely for its own use, provided, all copyright notices, disclaimers and other identifications on the licensed programs must also be duplicated and displayed on any copies thereof.\\n\\n<strong>Analytics Plug-In</strong>\\n\\nThe Player utilize Analytics Plug-In to power data tracking and reporting functionality. Information gathered by Analytics Plug-In is used in accordance with this Terms of Service. Publisher or User is strictly prohibited from removing, altering, disabling or circumventing Analytics Plug-In or otherwise interfering with the operation thereof.\\n\\nThe Company will not share personally identifiable information gathered from the Analytics Plug-In with any third party without Publisher’s or User’s express written consent, provided, nothing herein shall limit the Company’s right to use and share aggregated, non-personally identifiable data. Publisher and User grants Company a limited, royalty-free license to use the information collected by Analytics Plug-In to facilitate the operation of Player or other Company’s products, ensure compliance and for its internal business purposes.\\n\\n<strong>Term</strong>\\n\\nThese Terms of Service shall become effective on the Effective Date. For all Editions other than the Free Edition, these Terms of Service shall remain effective for a period of one (1) month (the “Initial Term”) and, upon the conclusion of the Initial Term, shall automatically renew for additional successive one (1) month terms (each a “Renewal Term” and together with the Initial Term, the “Term”).\\n\\nEither party may elect to not renew these Terms of Service by notifying the other prior to the expiration of then-current Initial Term or Renewal Term. Notice for such termination must be provided in writing/email no later than thirty (30) days prior to such expiration.\\n\\n<strong>Termination</strong>\\n\\nThese Terms of Service are subject to termination by the Company immediately if (a) Publisher fails to timely pay a Fee, (b) Publisher or User violates any term of these Terms of Service, (c) the Company has a reasonable basis to believe that Publisher or User is not abiding by the spirit of these Terms of Service, (d) Publisher becomes insolvent, declares bankruptcy or a receiver or trustee is appointed for Publisher, (e) the Company has a reasonable basis to believe that Publisher is impairing the Company’s business, (f) Publisher is or becomes engaged in a business that is directly or indirectly competitive with the Company’s business or (g) Publisher exceeds the license scope permitted for its Edition and Publisher fails to cure any of the foregoing within seven (7) days of notice thereof., (h) the Publisher or User uses the Player for the purposes violating law or honest business practices, (i) such termination is requested by the court judgment, including temporary injunctions or administrative decisions.\\n\\nThe Company may terminate Free Edition for its convenience at any time.\\n\\nIn the event of any termination by the Company pursuant to (a) – (i) above, the Company is under no obligation to provide a refund for the Fees received from Publisher or apply such fees to future services. In the event Publisher switches to a different Edition, any pre-paid Fee balance shall be applied towards the Fees due for such Edition until exhausted; no refund shall be available for Publishers switching to an Free Edition.\\n\\n<strong>Effects of Termination</strong>\\n\\nUpon termination of these Terms of Service for any reason, Publisher or User shall immediately cease Using the Player and uninstall, delete and destroy any copies of the software delivered by the Company with the Player.\\n\\nUpon termination, all rights, obligations and licenses of the parties shall cease, except that all obligations that accrued prior to the effective date of termination and remedies for breach of these Terms of Service shall survive.\\n\\n<strong>Maintenance and Support</strong>\\n\\nThe Company shall provide reasonable technical support and maintenance for the Player in its sole discretion. The Company shall have no obligation to provide additional technical support, maintenance, updates or enhancements to the Player or to provide customer service or support to Publisher’s End Users. All installation and maintenance of the Player by Publisher shall be at the sole expense of Publisher. The Company is not responsible for performance issues caused by low-performance end-user computers, low-bandwidth end user Internet connections, periodic network congestion among network providers, low-bandwidth connectivity from redirected image and video sources, improperly configured campaigns and low-bandwidth connectivity from any Publisher Content servers. In the event Company identifies slow performance due to its system, Company shall use commercially reasonable efforts to restore the Services to acceptable performance levels. Publisher’s sole remedy for any disruption or failure to provide support shall be a pro rata refund of 1/30 of the Fee paid by Publisher for the relevant period for each 24 hours of any foregoing disruption or failure.\\n\\n<strong>Intellectual Property</strong>\\n\\nThe Company is the sole owner of all intellectual property rights pertaining to the Player and software or Services delivered with the Player, including but not limited to copyright, trademark and patent rights and all rights not expressly granted herein are reserved. If Publisher creates an Adaptation, Publisher shall obtain all intellectual property rights in and to the elements of such Adaptation created by Publisher and the Company shall retain all intellectual property rights in and to any elements of the Player incorporated in such Adaptation. Publisher is prohibited from creating any Adaptation that in any manner infringes the patents, trademarks, copyrights, trade secret rights or other rights of the Company or any third party.\\n\\n<strong>Privacy</strong>\\n\\nThe Company may use the Publisher Information and Data to: deliver the Player and or Services; manage Publisher’s account; provide customer support; perform research and analysis about Publishers Use of or interest in the Player or Content or the products, services or content of others; communicate with Publisher by email, postal mail, telephone and/or mobile devices about products or services that may be of interest to you either from the Company, our partners or other third parties; develop and display content and advertising tailored to your interests on our site and other sites; enforce our Terms of Service; manage our business; and perform functions otherwise described to you at the time of collection.\\n\\nUser hereby agrees to process his/her personal data, namely (“Personal Data”) by the Company according to this Terms of Service and applicable law.\\n\\nThe Company as an administrator of personal data informs User that Personal Data provided during registration process are gathered and processed by the Administrator for the purpose of preparation of the Personal Data Collection as well as for Administrator marketing purposes.\\n\\nPublisher and User agrees to receive Administrator’s or its successors commercial information via electronic means in line with the law on Providing services via electronic means of 18 July 2002 (Journal of Laws 2002 No. 144 item. 1204 with further amendments).\\n\\nAs defined in the data protection laws, User shall have an access to its Personal Data and to the amendment of personal data or to demand its deletion. The collection of personal data of Users is done voluntarily.\\n\\nAdministrator informs that the Service may use small text file called “cookies”. A cookie is a small text file that is necessary for proper functioning of internet portals, in particular those which require authorization. Cookies do not allow to identify User. Cookies files do not process or store personal data.\\n\\nAdministrator informs that Personal Data are protected and secured according to EU law requirements.\\n\\n<strong>Fees and Payment</strong>\\n\\nFees are published at www.bradmax.com or provided on an applicable On-line Order Form. Unless otherwise provided, Company may modify the Fees prior to the commencement of each Renewal Term. The Company shall provide to the Publishers written notice of any such modification no later than sixty (60) days prior to such commencement, with exception to Free Edition.\\n\\nPublisher agrees to timely pay all Fees due during the Term. Company reserves the right to suspend Publisher’s access to Player or Editions if Fees are not timely paid. Such suspension shall not obviate Publisher’s duty to pay all Fees due under any On-line Order Form or Addendum or constitute termination of these Terms of Service absent Company’s notice of termination pursuant to the Termination section hereof. Past-due fees shall incur per month interest at an actual rate allowed by applicable law. Publisher shall be liable to, and fully reimburse, Company for all costs (including attorney’s fees) incurred in connection with Company’s collection of past-due Fees or other enforcement of this Terms of Service. All Fees are non-refundable except as otherwise provided in these Terms of Service. Publisher shall be responsible to pay all taxes due in connection with the Fees and Publisher’s use of the Products.\\n\\nPeriodic (e.g. annual) Fees are billed in advance and payment is due on receipt of invoice. In case of Paid Edition Publishers must provide a valid form of payment (e.g. credit card, debit card, PayPal account) and accurate billing information, do hereby authorize the Company to charge all Fees incurred to the designated payment form and acknowledge that periodic Fees may be charged automatically and without separate authorization.\\n\\n<strong>Content</strong>\\n\\nBy uploading Content, Publisher agrees to and hereby does grant, and does represent and warrant that it has the right to grant, the Company a royalty-free, fully paid up, worldwide license to use the Content solely in connection with the operation and provision of Services that entail the Company’s hosting, streaming or storage of such Content.\\n\\nPublisher is solely responsible for any Content or other material that Publisher posts, uploads, submits or Distributes. The Company may review and delete any Content that violates the terms of this Section. Prohibited Content includes any Content that (i) infringes any copyright, trademark, patent, trade secret, right of publicity or other right of any person or entity, (ii) is unlawful, threatening, abusive, harassing, defamatory, libelous, deceptive, fraudulent, invasive, tortious, obscene, offensive, vulgar, pornographic, profane or is otherwise inappropriate as determined by the Company in its sole discretion, (iii) contains any virus, malicious code, Trojan horse or other program designed, intended or likely to disrupt, damage, limit or interfere with the proper function of any software, hardware or telecommunications equipment or to damage or obtain unauthorized access to any system, data, password or other information of the Company or any person or entity, (iv) encourages illegal activity or (v) falsely suggests or implies sponsorship or endorsement by the Company.\\n\\nPublisher is responsible for taking its own steps to backup its Content and Company recommends routinely archiving your Content. Company disclaims any responsibility for deleted, lost, corrupted or inaccessible Content, regardless whether Company hosts such Content.\\n\\n<strong>Restrictions on Use</strong>\\n\\nPublisher shall not (i) interfere or attempt to interfere with the proper operation of the Player or any activities conducted through the Player, (ii) use any robot, spider or other device to retrieve, index, scrape, data mine or in any way gather information, Content or other materials from the Player, (iii) decipher, decompile, disassemble, reverse engineer, simulate or derive any source code or algorithms from the Player or use any of the foregoing to create any software or service similar to the Player, (iv) create any derivative work or modification of the Player other than Adaptations permitted by these Terms of Service or (v) license, sublicense, sell, encumber, rent, lease, Distribute, transfer or similarly exploit the Player.\\n\\n<strong>Representations and Warranties</strong>\\n\\nPublisher (respectively User) represents and warrants that (i) if Publisher is an individual, Publisher is at least eighteen (18) years old, (ii) if Publisher is an entity, its consent to these Terms of Service has been duly ratified, (iii) all its Content conforms to the standards set forth in the Section of these Terms of Service titled Content and Restrictions on Use, (iv) all information provided during the registration process is true and accurate, (v) its Adaptations do not infringe the intellectual property rights of any third party and (vi) its Use of the Player is in compliance with all applicable laws and regulations.\\n\\n<strong>Limited Product Warranty</strong>\\n\\nThe Company warrants that it will provide the Player (except Unpaid Editions) in a manner consistent with general industry standards reasonably applicable to the provision thereof. The Company does not warrant that the Player will be error-free or that any errors in the Player will be corrected.\\n\\n<strong>Disclaimer</strong>\\n\\nEXCEPT AS OTHERWISE PROVIDED AND TO THE MAXIMUM EXTENT ALLOWED BY LAW, THE PLAYER AND SERVICES ARE PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. EXCEPT AS OTHERWISE PROVIDED, USE OF THE PLAYER IS AT PUBLISHER’S OWN RISK AND PUBLISHER IS SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF EXERCISING THE RIGHTS GRANTED UNDER THIS AGREEMENT AND ASSUMES ALL RISKS ASSOCIATED THEREWITH, INCLUDING BUT NOT LIMITED TO THE RISKS AND COSTS OF PROGRAM ERRORS, COMPLIANCE WITH APPLICABLE LAWS, DAMAGE TO OR LOSS OF DATA, PROGRAMS OR EQUIPMENT, SUITABILITY FOR HOSTING AND UNAVAILABILITY OR INTERRUPTION.\\n\\n<strong>Limitation of Liability</strong>\\n\\nEXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW OR TO THE EXTENT THAT ANY EXCLUSION OR LIMITATION OF ITS LIABILITY IS VOID, PROHIBITED OR UNENFORCEABLE, IN NO EVENT SHALL THE COMPANY BE LIABLE ON ANY LEGAL THEORY (A) FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES INCLUDING LOSS OF REVENUE, PROFITS OR GOODWILL, (B) FOR ANY MATTER BEYOND ITS REASONABLE CONTROL, (C) FOR ANY LOSS OR INACCURACY OF DATA, LOSS OR INTERRUPTION OF USER OR COST OF PROCURING SUBSTITUTE TECHNOLOGY OR (D) DIRECT DAMAGES IN EXCESS OF THE TOTAL FEES PAID BY PUBLISHER TO THE COMPANY PURSUANT TO THESE TERMS OF SERVICE, EVEN IF THE COMPANY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS ARE INDEPENDENT FROM ALL OTHER PROVISIONS OF THIS AGREEMENT AND SHALL APPLY NOTWITHSTANDING THE FAILURE OF ANY REMEDY PROVIDED HEREIN.\\n\\n<strong>Publicity</strong>\\n\\nCompany shall be permitted to publicly identify Publisher as a user of the Player, including on Company’s websites and marketing materials. Publisher hereby grants Company a non-exclusive, non-transferable, non-sublicensable, royalty-free license during the Term to use Publisher’s name and marks solely for this purpose. Company agrees to state on all materials using Publisher’s marks that such marks are property of Publisher and to include the trademark registration symbol if applicable.\\n\\n<strong>Independent Contractors</strong>\\n\\nThe parties hereto are independent contractors and nothing herein constitutes or creates an employer-employee, agency, joint venture or representative relationship between the parties.\\n\\n<strong>Choice of Law and Jurisdiction</strong>\\n\\nThese Terms of Service shall be governed by and construed in accordance with the laws of the Republic of Poland and specifically excluding from application to this Agreement that law known as the United Nations Convention on Contracts for the International Sale of Goods. Each party irrevocably consents to the exclusive jurisdiction, forum and venue of the court proper to the Company’s registered seat over any and all claims, disputes, controversies or disagreements between the parties or any of their respective subsidiaries, affiliates, successors and assigns under or related to these Terms of Service or the subject matter thereof.\\n\\n<strong>Complete Agreement</strong>\\n\\nThese Terms of Service constitute the entire agreement between the Company and Publisher with respect to the subject matter hereof and supersedes all prior or contemporaneous understandings or agreements, written or oral, regarding such subject matter.\\n\\n<strong>Modification</strong>\\n\\nThe Company may modify the terms of these Terms of Service in its sole discretion and such modifications shall take effect and be binding on Publisher on the earliest date which they are posted to the Company’s publicly available website or delivered to Publisher via electronic or physical delivery. No one other than the Company has the right to modify these Terms of Service.\\n\\n<strong>No Assignment</strong>\\n\\nPublisher may not assign or transfer this agreement to any third party without the Company’s express written consent. Any assignment or transfer made in the absence of such consent shall be void and in the event of such unauthorized assignment or transfer the Company may immediately terminate these Terms of Service.\\n\\n<strong>Final provision</strong>\\n\\nThis Terms of Service enter into force on 01.06.2017.\",\"LABEL\":{\"1\":\"I Agree with the \",\"2\":\"Terms and Conditions.\"},\"ERROR\":\"You have to agree to finish your subscription.\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/subscription/en.json\n// module id = 1556\n// module chunks = 1","module.exports = {\"SUBSCRIPTION\":{\"TITLE\":\"Subscription process\",\"MESSAGE\":{\"THANKS\":{\"TITLE\":\"Thank You for choosing us!\",\"P1\":\"Congratulations, you have just subscribed to Bradmax Video Player. Start right away customizing your player!\"}},\"BUTTON\":{\"NAV_PLAYER\":\"Go To Player List\",\"NEXT\":\"Next\",\"PREVIOUS\":\"Previous\",\"SUBMIT\":\"Confirm and Finish\",\"EDIT\":\"Edit\",\"ACCEPT\":\"I Agree\",\"NOT_ACCEPT\":\"I Don't Agree\"},\"STEPS\":{\"STEP_1\":{\"TITLE\":\"Subscription Details\",\"SUBTITLE\":\"Your subscripion details\",\"SECTION_1\":{\"TITLE\":\"Your Selected Plan\"},\"SECTION_2\":{\"TITLE\":\"Billing Details\",\"SUBTITLE\":\"Make sure your billing details are correct\"}},\"STEP_2\":{\"TITLE\":\"Payment & Finish\",\"SUBTITLE\":\"Select a payment method and finish\",\"SECTION_1\":{\"TITLE\":\"Payment Method\",\"SUBTITLE\":\"Select or add a new payment method\"},\"SECTION_2\":{\"TITLE\":\"Confirm & Finish\",\"SUBTITLE\":\"Confirm that all the information is correct and Finish\"}}},\"LABEL\":{\"COMPANY\":\"Company\",\"COUNTRY\":\"Country\",\"STATE\":\"State\",\"CITY\":\"City\",\"ADDRESS\":\"Address\",\"POSTAL_CODE\":\"Postal code\",\"PHONE_NUMBER\":\"Phone number\",\"TAX_NO\":\"Tax Identification No.\"},\"TERMS_AND_CONDITIONS\":{\"TITLE\":\"Terms And Conditions\",\"BODY\":\"This Terms of Service are binding to all Publishers and Users. The use of the Player is tantamount with the acceptance of this Terms of Service. If you do not accept the terms of service you are prohibited from using the player. The Player is available in different Editions, including unpaid and paid options. Certain rights, obligations and features or restrictions vary by Edition. Unless otherwise stated this Terms of Service apply to all Editions. The Player requires a browser that supports HTML5 / MSE and H264. Older browsers like Internet Explorer 10 are not supported without additional plug-ins i.e. flash. The Player supports the following: (a) codecs: H264 for video and AAC for audio. MP3 is not supported with HTML5, (b) advertisements formats: VAST, VMAP, VPAID, (c) video formats: HLS and Smooth streaming integrated into the Player without plugins, Dash, MP4, Webm, live streaming.\\n\\nThe Player is adjustable to every device with internet connection, including smartphones, tablets, smart TV, desktops.\\n\\n<strong>Definitions</strong>\\n\\n“Adaptation” means any work that modifies, adds to, deletes from, edits, affects the function of or is based on a Player or any previous Adaptation thereof, including but not limited to all plug-ins and other derivative works as such term is defined by the applicable law.\\n\\n“Analytics Plug-In” means a plug-in or other code that enables Company to collect information regarding Publisher’s Use (such as browser type, Internet Service Provider, IP address and operating system). Company’s collection and utilization of such information is governed by these Terms of Service.\\n\\n“Company” means Bradmax pinok.io Sp. z o.o. Sp. k., Jana Pawła II 61/164, 01-031 Warsaw, NIP: 7010497796.\\n\\n“Content” means media including videos, images, graphics, animations, sounds, text and music and any related submissions (e.g. viewer comments) hosted, streamed, or played through the Player.\\n\\n“Data” means all transactional and Content data obtained by, processed by or provided to the Company in connection with the use of the Player. Data may include metadata (such as title, author, description and other information pertaining to Content), IP addresses, URLs, browser and operating system. Use of Data is governed by these Terms of Service.\\n\\n“Distribute” means to sell, transfer, assign, circulate or make available to any third party, or the facilitation of the foregoing.\\n\\n“Edition” means a particular edition of the Player, including the Free Edition, Basic Edition, Basic+ Edition, Pro Edition, Pro+ Edition, Infinity Edition and DRM Edition.\\n\\n“Upgraded Edition” means a particular edition of the Player with extended features or functionalities offered for the higher price in comparison to the licensed Edition.\\n\\n“Downgraded Edition” means a particular edition of the Player with limited features or functionalities offered for the lower price in comparison to the licensed Edition.\\n\\n“Effective Date” means the earliest date a Player is Used by Publisher or User.\\n\\n“End User” means an individual or entity that accesses or Uses Publisher’s or User’s Content.\\n\\n“Fee” means the amount payable to the Company for Use of the Player.\\n\\n“License Scope” means the features, rights, obligations and limitations authorized for a particular Edition of the Player.\\n\\n“OEM” means incorporation of the Player into any goods or services other than Publisher’s websites, including SDK Applications and other goods and services.\\n\\n“On-line Order Form” is an agreement between Company and Publisher setting forth custom pricing and terms for the use of Player and includes any contemporaneous Addendum thereto. In the event of any conflict between the terms of an On-line Order Form and these Terms of Service, the On-line Order Form shall take precedence.\\n\\n“Play” means each instance of Content streamed, in whole or in part, through the Player. In case the Content is streamed with breaks without reloading, it shall be treated as a single act of Play.\\n\\n“Player” means the Licensed Bradmax HTML 5 Player, software and any features, plug-ins and updates provided by Company, owned and developed by the Company together with associated services and/or SDK or SDK Applications.\\n\\n“Publisher” any individual or entity running commercial activity with the Use of Player.\\n\\n“User” any individual or entity using free of charge Edition of the Player.\\n\\n“Publisher Information” means personal and non-personal information about Publisher including but not limited to Publisher’s name, address, email address, telephone number, and, if Publisher transacts business with the Company, financial information such as payment method (valid credit card number, type, expiration date or other financial information).\\n\\n“Purpose” means (i) Use to facilitate Content playback and streaming on Publisher’s websites, (ii) Use of the SDK to develop and Distribute SDK Applications, (iii) other OEM Use.\\n\\n“SDK” means the Player Software Development Kits for Android and iOS, including all components thereof (documentation, code, tools, libraries, data, files and materials) and all updates thereto[ARM4] .\\n\\n“SDK Applications” means application software for Operating Systems, created with the SDK and incorporating the Player .\\n\\n“Services” means services provided to Publisher under these Terms of Service, including cloud-hosted versions of the Player and SDK provided as software as a service (SaaS), hosting and streaming functionality and maintenance and support services.\\n\\n“Terms of Service” means this document and any applicable addendum or new or revised versions.\\n\\n“Free Edition” means the Edition of the Player for which Fees are not required.\\n\\n“Use” means operating, accessing, downloading, installing, integrating or providing Content through a Player or Adaptation.\\n\\n<strong>Player</strong>\\n\\nPublisher’s or User’s rights and licenses to Use Player are limited to the Editions for which it has enrolled, is eligible and has paid all Fees (for paid Editions) in accordance with these Terms of Service. Any Use of the Player other than as permitted by these Terms of Service is strictly prohibited. The Company reserves all rights and licenses not expressly granted hereunder.\\n\\n<strong>Licenses</strong>\\n\\nThe License Scope varies by Edition and the licenses granted hereunder are limited accordingly. Unless otherwise provided, licenses are personal to Publisher or User for its own Use.\\n\\nSubject to the terms and conditions of these Terms of Service and Publisher’s (User’s) observance thereof, Company hereby grants to Publisher (User) and Publisher (User) hereby accepts a limited in time, non-exclusive, non-transferable, non-sublicensable, limited right and license to (a) Use, access and install the Player, solely for the Purpose, (b) Use, access, integrate and install the SDK for use in connection with the Purpose, (c) publicly Distribute SDK Applications for the Operating Systems, and (e) operate and allow end users of SDK Applications to operate the Player incorporated into such SDK Applications.\\n\\nUse of the Free Editions with advertising of any kind is prohibited.\\n\\n<strong>License Scope, Edition, Fees</strong>\\n\\nEditions have the following License Scope (volume per month where applicable) per Play (views) as defined above. Invoice is issued by the Company in the electronic form within the term defined by the applicable law after the effective payment.\\n\\n<strong>Change of the Edition</strong>\\n\\nIf you would like upgrading to the Upgraded Edition you have to file the upgrading form and pay the respective fee for the Upgraded Edition. In such a case, you may use the Upgraded Edition as of the date on which the Fee for the Upgraded Edition has been booked on the Company’s account. With that moment the previous license is terminated. All Fees paid before change to the Upgraded Edition are not refund.\\n\\nIf you would like downgrading to the Downgraded Edition you have to file the downgrading form. In such a case, you may use the Downgraded Edition after the expiration of the actual Edition licensed to you upon payment of the Fee for the Downgraded Edition, if applicable.\\n\\n<strong>Advertisements</strong>\\n\\nPublishers who are using Free Edition are strictly prohibited from using the Player in any manner to display advertisements. Such prohibition includes actions such as (i) the making or use of any Adaptation that enables any type of advertisement to be shown in, on or around the Player (e.g., a skin), (ii) interoperation of the Player with any software that serves advertisements and (iii) adding advertisements to a playlist.\\n\\n<strong>Registration</strong>\\n\\nPublisher and User must create a username and password as well as provide an accurate email address and name and surname. Publisher (User) is strictly prohibited from: (i) providing false sign-up information, (ii) using a name, address or email address owned or controlled by another person with the intent to impersonate that person or (iii) providing an email address subject to any rights of a person other than Publisher without appropriate authorization. The Company reserves the right to refuse registration or cancel any account that it reasonably believes is in violation of the foregoing. Publisher (User) shall be responsible for maintaining the confidentiality of its password and is liable for all activities that occur on its account. Publisher (User) agrees to immediately notify the Company of any unauthorized use of Publisher’s (User’s) username, password or other breach of security.\\n\\n<strong>Adaptations and OEM</strong>\\n\\nPublisher is authorized to make Adaptations reasonably necessary to exercise its rights under these Terms of Service, e.g., Adaptations to integrate the Player into Publisher’s websites. All Adaptations created by Publisher are strictly for its own Use. The Company reserves the right to prohibit the Use of any Adaptation in its sole discretion.\\n\\nOEM is authorized only in connection with the paid Edition. Publishers who use Free Edition are strictly prohibited from incorporation of a Player into any goods or services[ARM8] .\\n\\n<strong>SDK</strong>\\n\\nCompany may update the SDK at any time and is under no obligation to provide notice thereof. Updates may have features or functionality that differ from that of the current SDK. Company may identify certain updates as being critical by written notice (including e-mail to the address provided by Publisher). Publisher shall promptly incorporate such critical updates into its SDK Applications and, if such SDK Applications have been Distributed, shall provide a public update thereto no later than ten (10) days after such notice unless a different period is specified by the Company.\\n\\nPublisher acknowledges that development for each Operating System may be subject to the applicable Operating System provider’s own rules, regulations, standards and requirements and that Company has no control or responsibility therefore. Publisher is solely responsible for its compliance with the foregoing and Company makes no representations or warranties of compatibility with any Operating System.\\n\\n<strong>Distribution</strong>\\n\\nExcept as specifically set forth herein, Publisher shall not Distribute, re-license, sell, lease, transfer, encumber, assign or make available for public use the Player or any Adaptation thereof. Any attempt to take any such actions is void, and will automatically terminate Publisher’s rights under these Terms of Service. Notwithstanding the foregoing, Publisher may duplicate the licensed programs delivered with the Player and its own permitted Adaptations solely for its own use, provided, all copyright notices, disclaimers and other identifications on the licensed programs must also be duplicated and displayed on any copies thereof.\\n\\n<strong>Analytics Plug-In</strong>\\n\\nThe Player utilize Analytics Plug-In to power data tracking and reporting functionality. Information gathered by Analytics Plug-In is used in accordance with this Terms of Service. Publisher or User is strictly prohibited from removing, altering, disabling or circumventing Analytics Plug-In or otherwise interfering with the operation thereof.\\n\\nThe Company will not share personally identifiable information gathered from the Analytics Plug-In with any third party without Publisher’s or User’s express written consent, provided, nothing herein shall limit the Company’s right to use and share aggregated, non-personally identifiable data. Publisher and User grants Company a limited, royalty-free license to use the information collected by Analytics Plug-In to facilitate the operation of Player or other Company’s products, ensure compliance and for its internal business purposes.\\n\\n<strong>Term</strong>\\n\\nThese Terms of Service shall become effective on the Effective Date. For all Editions other than the Free Edition, these Terms of Service shall remain effective for a period of one (1) month (the “Initial Term”) and, upon the conclusion of the Initial Term, shall automatically renew for additional successive one (1) month terms (each a “Renewal Term” and together with the Initial Term, the “Term”).\\n\\nEither party may elect to not renew these Terms of Service by notifying the other prior to the expiration of then-current Initial Term or Renewal Term. Notice for such termination must be provided in writing/email no later than thirty (30) days prior to such expiration.\\n\\n<strong>Termination</strong>\\n\\nThese Terms of Service are subject to termination by the Company immediately if (a) Publisher fails to timely pay a Fee, (b) Publisher or User violates any term of these Terms of Service, (c) the Company has a reasonable basis to believe that Publisher or User is not abiding by the spirit of these Terms of Service, (d) Publisher becomes insolvent, declares bankruptcy or a receiver or trustee is appointed for Publisher, (e) the Company has a reasonable basis to believe that Publisher is impairing the Company’s business, (f) Publisher is or becomes engaged in a business that is directly or indirectly competitive with the Company’s business or (g) Publisher exceeds the license scope permitted for its Edition and Publisher fails to cure any of the foregoing within seven (7) days of notice thereof., (h) the Publisher or User uses the Player for the purposes violating law or honest business practices, (i) such termination is requested by the court judgment, including temporary injunctions or administrative decisions.\\n\\nThe Company may terminate Free Edition for its convenience at any time.\\n\\nIn the event of any termination by the Company pursuant to (a) – (i) above, the Company is under no obligation to provide a refund for the Fees received from Publisher or apply such fees to future services. In the event Publisher switches to a different Edition, any pre-paid Fee balance shall be applied towards the Fees due for such Edition until exhausted; no refund shall be available for Publishers switching to an Free Edition.\\n\\n<strong>Effects of Termination</strong>\\n\\nUpon termination of these Terms of Service for any reason, Publisher or User shall immediately cease Using the Player and uninstall, delete and destroy any copies of the software delivered by the Company with the Player.\\n\\nUpon termination, all rights, obligations and licenses of the parties shall cease, except that all obligations that accrued prior to the effective date of termination and remedies for breach of these Terms of Service shall survive.\\n\\n<strong>Maintenance and Support</strong>\\n\\nThe Company shall provide reasonable technical support and maintenance for the Player in its sole discretion. The Company shall have no obligation to provide additional technical support, maintenance, updates or enhancements to the Player or to provide customer service or support to Publisher’s End Users. All installation and maintenance of the Player by Publisher shall be at the sole expense of Publisher. The Company is not responsible for performance issues caused by low-performance end-user computers, low-bandwidth end user Internet connections, periodic network congestion among network providers, low-bandwidth connectivity from redirected image and video sources, improperly configured campaigns and low-bandwidth connectivity from any Publisher Content servers. In the event Company identifies slow performance due to its system, Company shall use commercially reasonable efforts to restore the Services to acceptable performance levels. Publisher’s sole remedy for any disruption or failure to provide support shall be a pro rata refund of 1/30 of the Fee paid by Publisher for the relevant period for each 24 hours of any foregoing disruption or failure.\\n\\n<strong>Intellectual Property</strong>\\n\\nThe Company is the sole owner of all intellectual property rights pertaining to the Player and software or Services delivered with the Player, including but not limited to copyright, trademark and patent rights and all rights not expressly granted herein are reserved. If Publisher creates an Adaptation, Publisher shall obtain all intellectual property rights in and to the elements of such Adaptation created by Publisher and the Company shall retain all intellectual property rights in and to any elements of the Player incorporated in such Adaptation. Publisher is prohibited from creating any Adaptation that in any manner infringes the patents, trademarks, copyrights, trade secret rights or other rights of the Company or any third party.\\n\\n<strong>Privacy</strong>\\n\\nThe Company may use the Publisher Information and Data to: deliver the Player and or Services; manage Publisher’s account; provide customer support; perform research and analysis about Publishers Use of or interest in the Player or Content or the products, services or content of others; communicate with Publisher by email, postal mail, telephone and/or mobile devices about products or services that may be of interest to you either from the Company, our partners or other third parties; develop and display content and advertising tailored to your interests on our site and other sites; enforce our Terms of Service; manage our business; and perform functions otherwise described to you at the time of collection.\\n\\nUser hereby agrees to process his/her personal data, namely (“Personal Data”) by the Company according to this Terms of Service and applicable law.\\n\\nThe Company as an administrator of personal data informs User that Personal Data provided during registration process are gathered and processed by the Administrator for the purpose of preparation of the Personal Data Collection as well as for Administrator marketing purposes.\\n\\nPublisher and User agrees to receive Administrator’s or its successors commercial information via electronic means in line with the law on Providing services via electronic means of 18 July 2002 (Journal of Laws 2002 No. 144 item. 1204 with further amendments).\\n\\nAs defined in the data protection laws, User shall have an access to its Personal Data and to the amendment of personal data or to demand its deletion. The collection of personal data of Users is done voluntarily.\\n\\nAdministrator informs that the Service may use small text file called “cookies”. A cookie is a small text file that is necessary for proper functioning of internet portals, in particular those which require authorization. Cookies do not allow to identify User. Cookies files do not process or store personal data.\\n\\nAdministrator informs that Personal Data are protected and secured according to EU law requirements.\\n\\n<strong>Fees and Payment</strong>\\n\\nFees are published at www.bradmax.com or provided on an applicable On-line Order Form. Unless otherwise provided, Company may modify the Fees prior to the commencement of each Renewal Term. The Company shall provide to the Publishers written notice of any such modification no later than sixty (60) days prior to such commencement, with exception to Free Edition.\\n\\nPublisher agrees to timely pay all Fees due during the Term. Company reserves the right to suspend Publisher’s access to Player or Editions if Fees are not timely paid. Such suspension shall not obviate Publisher’s duty to pay all Fees due under any On-line Order Form or Addendum or constitute termination of these Terms of Service absent Company’s notice of termination pursuant to the Termination section hereof. Past-due fees shall incur per month interest at an actual rate allowed by applicable law. Publisher shall be liable to, and fully reimburse, Company for all costs (including attorney’s fees) incurred in connection with Company’s collection of past-due Fees or other enforcement of this Terms of Service. All Fees are non-refundable except as otherwise provided in these Terms of Service. Publisher shall be responsible to pay all taxes due in connection with the Fees and Publisher’s use of the Products.\\n\\nPeriodic (e.g. annual) Fees are billed in advance and payment is due on receipt of invoice. In case of Paid Edition Publishers must provide a valid form of payment (e.g. credit card, debit card, PayPal account) and accurate billing information, do hereby authorize the Company to charge all Fees incurred to the designated payment form and acknowledge that periodic Fees may be charged automatically and without separate authorization.\\n\\n<strong>Content</strong>\\n\\nBy uploading Content, Publisher agrees to and hereby does grant, and does represent and warrant that it has the right to grant, the Company a royalty-free, fully paid up, worldwide license to use the Content solely in connection with the operation and provision of Services that entail the Company’s hosting, streaming or storage of such Content.\\n\\nPublisher is solely responsible for any Content or other material that Publisher posts, uploads, submits or Distributes. The Company may review and delete any Content that violates the terms of this Section. Prohibited Content includes any Content that (i) infringes any copyright, trademark, patent, trade secret, right of publicity or other right of any person or entity, (ii) is unlawful, threatening, abusive, harassing, defamatory, libelous, deceptive, fraudulent, invasive, tortious, obscene, offensive, vulgar, pornographic, profane or is otherwise inappropriate as determined by the Company in its sole discretion, (iii) contains any virus, malicious code, Trojan horse or other program designed, intended or likely to disrupt, damage, limit or interfere with the proper function of any software, hardware or telecommunications equipment or to damage or obtain unauthorized access to any system, data, password or other information of the Company or any person or entity, (iv) encourages illegal activity or (v) falsely suggests or implies sponsorship or endorsement by the Company.\\n\\nPublisher is responsible for taking its own steps to backup its Content and Company recommends routinely archiving your Content. Company disclaims any responsibility for deleted, lost, corrupted or inaccessible Content, regardless whether Company hosts such Content.\\n\\n<strong>Restrictions on Use</strong>\\n\\nPublisher shall not (i) interfere or attempt to interfere with the proper operation of the Player or any activities conducted through the Player, (ii) use any robot, spider or other device to retrieve, index, scrape, data mine or in any way gather information, Content or other materials from the Player, (iii) decipher, decompile, disassemble, reverse engineer, simulate or derive any source code or algorithms from the Player or use any of the foregoing to create any software or service similar to the Player, (iv) create any derivative work or modification of the Player other than Adaptations permitted by these Terms of Service or (v) license, sublicense, sell, encumber, rent, lease, Distribute, transfer or similarly exploit the Player.\\n\\n<strong>Representations and Warranties</strong>\\n\\nPublisher (respectively User) represents and warrants that (i) if Publisher is an individual, Publisher is at least eighteen (18) years old, (ii) if Publisher is an entity, its consent to these Terms of Service has been duly ratified, (iii) all its Content conforms to the standards set forth in the Section of these Terms of Service titled Content and Restrictions on Use, (iv) all information provided during the registration process is true and accurate, (v) its Adaptations do not infringe the intellectual property rights of any third party and (vi) its Use of the Player is in compliance with all applicable laws and regulations.\\n\\n<strong>Limited Product Warranty</strong>\\n\\nThe Company warrants that it will provide the Player (except Unpaid Editions) in a manner consistent with general industry standards reasonably applicable to the provision thereof. The Company does not warrant that the Player will be error-free or that any errors in the Player will be corrected.\\n\\n<strong>Disclaimer</strong>\\n\\nEXCEPT AS OTHERWISE PROVIDED AND TO THE MAXIMUM EXTENT ALLOWED BY LAW, THE PLAYER AND SERVICES ARE PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. EXCEPT AS OTHERWISE PROVIDED, USE OF THE PLAYER IS AT PUBLISHER’S OWN RISK AND PUBLISHER IS SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF EXERCISING THE RIGHTS GRANTED UNDER THIS AGREEMENT AND ASSUMES ALL RISKS ASSOCIATED THEREWITH, INCLUDING BUT NOT LIMITED TO THE RISKS AND COSTS OF PROGRAM ERRORS, COMPLIANCE WITH APPLICABLE LAWS, DAMAGE TO OR LOSS OF DATA, PROGRAMS OR EQUIPMENT, SUITABILITY FOR HOSTING AND UNAVAILABILITY OR INTERRUPTION.\\n\\n<strong>Limitation of Liability</strong>\\n\\nEXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW OR TO THE EXTENT THAT ANY EXCLUSION OR LIMITATION OF ITS LIABILITY IS VOID, PROHIBITED OR UNENFORCEABLE, IN NO EVENT SHALL THE COMPANY BE LIABLE ON ANY LEGAL THEORY (A) FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES INCLUDING LOSS OF REVENUE, PROFITS OR GOODWILL, (B) FOR ANY MATTER BEYOND ITS REASONABLE CONTROL, (C) FOR ANY LOSS OR INACCURACY OF DATA, LOSS OR INTERRUPTION OF USER OR COST OF PROCURING SUBSTITUTE TECHNOLOGY OR (D) DIRECT DAMAGES IN EXCESS OF THE TOTAL FEES PAID BY PUBLISHER TO THE COMPANY PURSUANT TO THESE TERMS OF SERVICE, EVEN IF THE COMPANY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS ARE INDEPENDENT FROM ALL OTHER PROVISIONS OF THIS AGREEMENT AND SHALL APPLY NOTWITHSTANDING THE FAILURE OF ANY REMEDY PROVIDED HEREIN.\\n\\n<strong>Publicity</strong>\\n\\nCompany shall be permitted to publicly identify Publisher as a user of the Player, including on Company’s websites and marketing materials. Publisher hereby grants Company a non-exclusive, non-transferable, non-sublicensable, royalty-free license during the Term to use Publisher’s name and marks solely for this purpose. Company agrees to state on all materials using Publisher’s marks that such marks are property of Publisher and to include the trademark registration symbol if applicable.\\n\\n<strong>Independent Contractors</strong>\\n\\nThe parties hereto are independent contractors and nothing herein constitutes or creates an employer-employee, agency, joint venture or representative relationship between the parties.\\n\\n<strong>Choice of Law and Jurisdiction</strong>\\n\\nThese Terms of Service shall be governed by and construed in accordance with the laws of the Republic of Poland and specifically excluding from application to this Agreement that law known as the United Nations Convention on Contracts for the International Sale of Goods. Each party irrevocably consents to the exclusive jurisdiction, forum and venue of the court proper to the Company’s registered seat over any and all claims, disputes, controversies or disagreements between the parties or any of their respective subsidiaries, affiliates, successors and assigns under or related to these Terms of Service or the subject matter thereof.\\n\\n<strong>Complete Agreement</strong>\\n\\nThese Terms of Service constitute the entire agreement between the Company and Publisher with respect to the subject matter hereof and supersedes all prior or contemporaneous understandings or agreements, written or oral, regarding such subject matter.\\n\\n<strong>Modification</strong>\\n\\nThe Company may modify the terms of these Terms of Service in its sole discretion and such modifications shall take effect and be binding on Publisher on the earliest date which they are posted to the Company’s publicly available website or delivered to Publisher via electronic or physical delivery. No one other than the Company has the right to modify these Terms of Service.\\n\\n<strong>No Assignment</strong>\\n\\nPublisher may not assign or transfer this agreement to any third party without the Company’s express written consent. Any assignment or transfer made in the absence of such consent shall be void and in the event of such unauthorized assignment or transfer the Company may immediately terminate these Terms of Service.\\n\\n<strong>Final provision</strong>\\n\\nThis Terms of Service enter into force on 01.06.2017.\",\"LABEL\":{\"1\":\"I Agree with the \",\"2\":\"Terms and Conditions.\"},\"ERROR\":\"You have to agree to finish your subscription.\"}}}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./assets/i18n/subscription/pl.json\n// module id = 1557\n// module chunks = 1","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar FlashMessagesService = (function () {\n    function FlashMessagesService() {\n    }\n    return FlashMessagesService;\n}());\nFlashMessagesService.decorators = [\n    { type: core_1.Injectable },\n];\n/** @nocollapse */\nFlashMessagesService.ctorParameters = function () { return []; };\nexports.FlashMessagesService = FlashMessagesService;\n//# sourceMappingURL=flash-messages.service.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/angular2-flash-messages/module/flash-messages.service.js\n// module id = 177\n// module chunks = 1","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CookieService {\n\n\twrite(name: string, value: string | null, days = 90) {\n\t\tlet date = new Date();\n\t\tdate.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\n\t\tlet expires = '; expires=' + date.toUTCString();\n\t\tdocument.cookie = name + '=' + value + expires + '; path=/';\n\t}\n\n\tread(name: string) {\n\t\tlet nameEQ = name + '=', ca = document.cookie.split(';');\n\t\tfor (let i = 0; i < ca.length; i++) {\n\t\t\tlet c = ca[i];\n\t\t\twhile (c.charAt(0) == ' ')\n\t\t\t\tc = c.substring(1, c.length);\n\t\t\tif (c.indexOf(nameEQ) == 0)\n\t\t\t\treturn c.substring(nameEQ.length, c.length);\n\t\t}\n\t\treturn null;\n\t}\n\n\terase(name: string) {\n\t\tthis.write(name, '', -1);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/cookie.service.ts","import {Component, ChangeDetectionStrategy} from '@angular/core';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {AbstractModalComponent} from './abstract.modal.component';\n\nlet HTML = '<close-modal-button></close-modal-button>'\n\t\t+ '<div class=\"modal-message\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>';\n\nlet STYLE = 'alert-modal-component {display: block;margin: auto;color: #fff;font-weight: 200;'\n\t\t\t\t\t+ 'background: #ff281c;max-width: 400px;min-width: 200px;}'\n\t\t\t+ 'alert-modal-component .modal-message { padding: 32px 16px 16px 16px; }';\n\n@Component({\n\tselector: 'alert-modal-component',\n\ttemplate: HTML, styles: [STYLE],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AlertModalComponent extends AbstractModalComponent{\n\tconstructor(public sanitizer: DomSanitizer) {\n\t\tsuper();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/alert.modal.component.ts","/**\n * Simple service to hold the validators used thru the app\n */\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class UrlService {\n\n\tconstructor() {\n\t\t// console.log(' --> NEW URL SERVICE <--');\n\t}\n\n\tapi(url: string): string {\n\t\tlet apiUrl: string = API_URL;\n\t\tif (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.apiUrl) {\n\t\t\tapiUrl = window.bradmaxAdminConfig.apiUrl;\n\t\t}\n\t\tif (apiUrl.charAt(apiUrl.length - 1) != '/') {\n\t\t\tapiUrl += '/';\n\t\t}\n\t\treturn apiUrl + url;\n\t}\n\n\tfile(url: string): string {\n\n\t\tlet staticFilesBaseUrl = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.staticFilesBaseUrl)\n\t\t\t? window.bradmaxAdminConfig.staticFilesBaseUrl : '';\n\t\tlet baseUrl: string = '';\n\t\tif (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.staticFilesBaseUrl && (url.indexOf('http') != 0)) {\n\t\t\tbaseUrl = window.bradmaxAdminConfig.staticFilesBaseUrl;\n\t\t}\n\t\tif ((baseUrl.length > 0) && (baseUrl.charAt(baseUrl.length - 1) != '/')) {\n\t\t\tbaseUrl += '/';\n\t\t}\n\t\treturn baseUrl + url;\n\t}\n\n\tgetSignUpPage(): string {\n\t\t// Use signInUrl if defined in settings.\n\t\tlet defaultSignInUrl = '//bigsoda.pl:8888/site/en/signup';\n\t\tif (window && window.location && (window.location.href.indexOf('0.0.0.0') > -1)) {\n\t\t\tdefaultSignInUrl = '//localhost:8080/site/en/signup';\n\t\t}\n\t\tconst result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.signInUrl)\n\t\t\t? window.bradmaxAdminConfig.signInUrl : defaultSignInUrl;\n\t\treturn result;\n\t}\n\n\tgetPasswordResetPage(): string {\n\t\t// Use passwordResetUrl if defined in settings.\n\t\tlet defaultUrl = '//bigsoda.pl:8888/site/en/password-reset';\n\t\tif (window && window.location && (window.location.href.indexOf('0.0.0.0') > -1)) {\n\t\t\tdefaultUrl = '//localhost:8080/site/en/password-reset';\n\t\t}\n\t\tconst result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.passwordResetUrl)\n\t\t\t? window.bradmaxAdminConfig.passwordResetUrl : defaultUrl;\n\t\treturn result;\n\t}\n\n\tget termsPage(): string {\n\t\t// Use passwordResetUrl if defined in settings.\n\t\tlet defaultUrl = '//bigsoda.pl:8888/site/en/terms';\n\t\tif (window && window.location && (window.location.href.indexOf('0.0.0.0') > -1)) {\n\t\t\tdefaultUrl = '//localhost:8080/site/en/terms';\n\t\t}\n\t\tconst result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.termsPageUrl)\n\t\t\t? window.bradmaxAdminConfig.termsPageUrl : defaultUrl;\n\t\treturn result;\n\t}\n\n\tget documentationPage(): string {\n\t\tlet defaultUrl = '//bradmax.com/static/player-doc/';\n\t\tconst result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.docsPageUrl)\n\t\t\t? window.bradmaxAdminConfig.docsPageUrl : defaultUrl;\n\t\treturn result;\n\t}\n\n\tget tutorialPage(): string {\n\t\tlet defaultUrl = '//bradmax.com/static/client-panel-doc/how_to_create_your_first_bradmax_player.pdf';\n\t\tconst result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.tutorialPageUrl)\n\t\t\t? window.bradmaxAdminConfig.tutorialPageUrl : defaultUrl;\n\t\treturn result;\n\t}\n\n\tget playersPluginsDocumentationPage(): string {\n\t\tlet defaultUrl = 'https://bradmax.com/static/bradmax-analytics-for-players/latest/doc/';\n\t\tconst result = (window && window.bradmaxAdminConfig && window.bradmaxAdminConfig.docsPageUrl)\n\t\t\t? window.bradmaxAdminConfig.docsPageUrl : defaultUrl;\n\t\treturn result;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/url.service.ts","import {Component, ChangeDetectionStrategy, ViewChild, ElementRef} from '@angular/core';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {AbstractModalComponent} from './abstract.modal.component';\nimport {ModalButton} from './modal.model';\n\nlet HTML = ''\n\t+ '<div class=\"input-header\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>'\n\t+ '<div class=\"input-group\">'\n\t\t+ '<label for=\"input-field\">{{inputLabel}}</label>'\n\t\t+ '<input #inputField id=\"input-field\" type=\"text\" maxlength=\"64\" [(ngModel)]=\"value\" required (keyup.enter)=\"onKeyupEnter()\">'\n\t+ '</div>'\n\t+ '<div class=\"input-buttons\">'\n\t\t+ '<button *ngFor=\"let btn of buttons\" [ngClass]=\"formatNgClass(btn)\" (click)=\"click(btn)\">'\n\t\t\t+ '<i *ngIf=\"btn.fa!=null\" class=\"fa fa-{{btn.fa}}\"></i>'\n\t\t\t+ '<span>{{btn.label}}</span>'\n\t\t+ '</button>'\n\t+ '</div>'\n+ '';\n\nlet STYLE = `\n\t:host {display: block;margin: auto;font-weight: 200;background: #fff;max-width: 400px;min-width: 200px;}\n\t:host .input-header { padding: 32px 16px 16px 16px; text-align: center; }\n\t:host .input-group {padding: 0 32px 16px 32px;width: 100%;text-align: left;}\n\t:host .input-group label {width: 70px;}\n\t:host .input-group input {width: 200px;}\n\t:host .input-group input:active,:host .input-group input:focus {box-shadow: none;}\n\t:host .input-buttons { padding: 2px 16px 8px 16px; text-align: center; }\n\t:host .input-buttons button {\n\t\tdisplay: inline-block;  text-align: center;  vertical-align: middle;\n\t\ttouch-action: manipulation;  cursor: pointer;  background: #FFFFFF;\n\t\tborder: 1px solid transparent;  white-space: nowrap;  padding: 4px 10px;  margin: 2px 6px;\n\t\tfont-size: inherit;  line-height: 1em;  border-radius: 30px;\n\t\tuser-select: none;\n\t}\n\t:host .input-buttons button:focus {outline: 0;}\n\t:host .input-buttons button:active,\n\t:host .input-buttons button:hover {outline: 0;background: #EFEFEF;border-color: #EFEFEF;}\n\t:host .input-buttons button:active {box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.1);}\n\t:host .input-buttons button i {margin-right: 3px;}\n`;\n\n@Component({\n\tselector: 'input-modal-component',\n\ttemplate: HTML, styles: [STYLE],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class InputModalComponent extends AbstractModalComponent {\n\t//\n\tvalue: string;\n\t@ViewChild('inputField') input: ElementRef;\n\t//\n\tconstructor(public sanitizer: DomSanitizer) {\n\t\tsuper();\n\t}\n\t//\n\tngOnInit() {\n\t\tif(this.inputDefaultValue) {\n\t\t\tthis.value = this.inputDefaultValue;\n\t\t}\n\t}\n\t//\n\tngAfterViewInit() {\n\t\tif(this.inputDefaultValue) {\n\t\t\tconst input: HTMLInputElement = this.input.nativeElement as HTMLInputElement;\n\t\t\tsetTimeout(() => {\n\t\t\t\tinput.focus();\n\t\t\t\tinput.select();\n\t\t\t}, 0);\n\t\t}\n\t}\n\t//\n\tformatNgClass(btn: ModalButton) {\n\t\tlet classes: { [name: string]: boolean } = {};\n\t\tif (btn.classes != null)\n\t\t\tfor (let i = 0; i < btn.classes.length; i++)\n\t\t\t\tclasses[btn.classes[i]] = true;\n\t\treturn classes;\n\t}\n\t//\n\tonKeyupEnter() {\n\t\tfor(let btn of this.buttons) {\n\t\t\tif (btn.click != null) {\n\t\t\t\tbtn.click(this.value)\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t}\n\t//\n\tclick(btn: ModalButton) {\n\t\tif (btn.click != null)\n\t\t\tbtn.click(this.value);\n\t\tif (btn.close && btn.close == true)\n\t\t\tthis.close();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/input.modal.component.ts","/**\n * Created by mthk on 10/10/16.\n */\nimport { Component, Type } from '@angular/core';\n\nexport enum ModalType {\n\talert,\n\tprompt,\n\tinput,\n\tmodal,\n\taccountDetails,\n\t//contact,\n\tterms,\n\tpasswordChange\n}\n\nexport type ModalButton = {\n\tfa?: string;\n\tlabel?: string;\n\tclasses?: string[];\n\tclick?: (data?: any) => void;\n\tclose?: boolean;\n};\n\nexport type ModalModel = {\n\ttype?: ModalType;\n\tcomponent?: any | null; //Type<Component> | null;\n\ttitle?: string | null;\n\thtml?: string | null;\n\tinputLabel?: string | null;\n\tinputDefaultValue?: string | null;\n\tcloseOnBackdropClick?: boolean | null;\n\tbuttons?: ModalButton[],\n\tinputData?: any\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/modal.model.ts","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractModalComponent } from './abstract.modal.component';\nimport { ModalButton } from './modal.model';\n\nlet HTML = `<div class=\"modal-password-change\">\n                <close-modal-button></close-modal-button>\n                <password-change-view (onSuccess)=\"close()\"></password-change-view>\n            </div>`;\n\nlet STYLES = ':host {display: block;margin: auto;width: 400px;text-align:center;background:#fff;border-radius-5px;} ' +\n             ':host close-modal-button {padding: 5px 5px 0 0;}';\n\n@Component({\n    selector: 'password-change-modal',\n    template: HTML,\n    styles: [STYLES],\n    changeDetection: ChangeDetectionStrategy.OnPush\n\n})\nexport class PasswordChangeModalComponent extends AbstractModalComponent {\n    constructor() {\n        super();\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/password-change.modal.component.ts","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nimport { AbstractModalComponent } from './abstract.modal.component';\nimport { ModalButton } from './modal.model';\n\nlet HTML = ''\n\t+ '<div class=\"prompt-message\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>'\n\t+ '<div class=\"prompt-buttons\">'\n\t\t+ '<button *ngFor=\"let btn of buttons\" [ngClass]=\"formatNgClass(btn)\" (click)=\"click(btn)\">'\n\t\t\t+ '<i *ngIf=\"btn.fa!=null\" class=\"fa fa-{{btn.fa}}\"></i>'\n\t\t\t+ '<span>{{btn.label}}</span>'\n\t\t+ '</button>'\n\t+ '</div>'\n+ '';\n\nlet STYLE = `\n:host{display: block;margin: auto;font-weight: 400;background: #fff;max-width: 400px;min-width: 200px;}\n:host .prompt-message { padding: 16px 16px 16px 16px; text-align: center; }\n:host .prompt-buttons { padding: 2px 16px 8px 16px; text-align: center; }\n:host .prompt-buttons button {\n    display: inline-block;\n    text-align: center;\n    vertical-align: middle;\n    touch-action: manipulation;\n    cursor: pointer;\n    background: #FFFFFF;\n    border: 1px solid transparent;\n    white-space: nowrap;\n    padding: 4px 10px;\n    margin: 2px 6px;\n    font-size: inherit;\n    line-height: 1em;\n    border-radius: 30;\n    user-select: none;\n}\n:host .prompt-buttons button:focus {outline: 0;}\n:host .prompt-buttons button:active,\n:host .prompt-buttons button:hover {outline: 0;background: #EFEFEF;border-color: #EFEFEF;}\n:host .prompt-buttons button:active {box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.1);}\n:host .prompt-buttons button i {margin-right: 3px;}\n:host .prompt-message /deep/.color-sample span { display: block; width: 30px; height: 30px; border-radius: 50%; margin: auto; border:1px solid #888; }`;\n\n@Component({\n\tselector: 'prompt-modal-component',\n\ttemplate: HTML, styles: [STYLE],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PromptModalComponent extends AbstractModalComponent {\n\t//\n\tconstructor(public sanitizer: DomSanitizer) {\n\t\tsuper();\n\t}\n\t//\n\tformatNgClass(btn: ModalButton) {\n\t\tlet classes: { [name: string]: boolean } = {};\n\t\tif (btn.classes != null)\n\t\t\tfor (let i = 0; i < btn.classes.length; i++)\n\t\t\t\tclasses[btn.classes[i]] = true;\n\t\treturn classes;\n\t}\n\t//\n\tclick(btn: ModalButton) {\n\t\tif (btn.click != null)\n\t\t\tbtn.click();\n\t\tif (btn.close && btn.close == true)\n\t\t\tthis.close();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/prompt.modal.component.ts","import {Component, ChangeDetectionStrategy} from '@angular/core';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {AbstractModalComponent} from './abstract.modal.component';\nimport {ModalButton} from './modal.model';\n\nlet HTML = ''\n\t+ '<close-modal-button></close-modal-button>'\n    + '<div class=\"gdpr-info-modal\">'\n\t  + '<div class=\"prompt-message\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>'\n\t+ '</div>';\n\nlet STYLE = `\n:host{display: block;margin: auto;font-weight: 200;background: #fff;max-width: 800px;min-width: 200px; max-height:600px;overflow:hidden;}\n:host .gdpr-info-modal{margin-top:30px;width:100%;max-height:570px;overflow:auto;}\n:host .prompt-message { padding: 0px 16px 16px 16px; text-align: left; white-space: pre-wrap;}\n:host .prompt-buttons { padding: 2px 16px 16px 16px; text-align: center; }\n:host .prompt-buttons button {\n    display: inline-block;\n    text-align: center;\n    vertical-align: middle;\n    touch-action: manipulation;\n    cursor: pointer;\n    //background: #FFFFFF;\n    //border: 1px solid transparent;\n    white-space: nowrap;\n    padding: 4px 10px;\n    margin: 2px 6px;\n    font-size: inherit;\n    line-height: 1em;\n    border-radius: 30;\n    user-select: none;\n}`;\n\n@Component({\n\tselector: 'prompt-modal-component',\n\ttemplate: HTML, styles: [STYLE],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class GdprInfoModalComponent extends AbstractModalComponent {\n\t//\n\tconstructor(public sanitizer: DomSanitizer) {\n\t\tsuper();\n\t}\n\t//\n\tformatNgClass(btn: ModalButton) {\n\t\tlet classes: { [name: string]: boolean } = {};\n\t\tif (btn.classes != null)\n\t\t\tfor (let i = 0; i < btn.classes.length; i++)\n\t\t\t\tclasses[btn.classes[i]] = true;\n\t\treturn classes;\n\t}\n\t//\n\tclick(btn: ModalButton) {\n\t\tif (btn.click != null)\n\t\t\tbtn.click();\n\t\tif (btn.close && btn.close == true)\n\t\t\tthis.close();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/gdpr.info.modal.component.ts","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tOnChanges,\n\tOnDestroy,\n\tOnInit,\n\tSimpleChanges,\n} from '@angular/core';\nimport { Router, UrlTree, PRIMARY_OUTLET } from '@angular/router';\nimport { Subscription } from 'rxjs';\n\nimport { SidebarItem } from '../../../service/sidebar.model';\nimport { ModalService } from '../../../module/modal/modal.service';\n\n/**\n * Created by mthk on 24/05/16.\n */\n@Component({\n\tselector: '[sidebar-menu-item]',\n\thost: {\n\t\t'[class.active]': 'model?.active',\n\t\t'[class.collapse-open]': 'model?.collapsed==false',\n\t\t'[class.nohovericon]': 'model?.noHoverIcon',\n\t\t'[class.checked]': 'model?.checked',\n\t\t'[class.disabled]': 'model?.disabled'\n\t},\n\ttemplate: require('./sidebar.item.component.html'),\n\t//compiled from sidebar.item.component.scss file\n\tstyles: [require('./sidebar.item.component.scss')],\n\tinputs: ['model'],\n\toutputs: ['onCollapse'],\n\tchangeDetection: ChangeDetectionStrategy.Default\n})\nexport class SidebarItemComponent implements OnInit, OnChanges, OnDestroy {\n\n\tmodel: SidebarItem;\n\tisDisabled: boolean | undefined;\n\tisParent: boolean;\n\tonCollapse = new EventEmitter<SidebarItem>();\n\tprivate routeTree: UrlTree;\n\tprivate routerSubscription: Subscription;\n\n\tconstructor(private element: ElementRef,\n\t\tprivate router: Router,\n\t\tprivate modal: ModalService,\n\t\tprivate cdr: ChangeDetectorRef) { }\n\n\tngOnInit() {\n\t\tthis.routerSubscription = this.router.events.subscribe(() => this.checkRouteTree());\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.routerSubscription) this.routerSubscription.unsubscribe();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.hasOwnProperty('model')) {\n\t\t\tthis.isParent = this.checkIfIsParent(this.model);\n\t\t\tif (this.isParent) {\n\t\t\t\tthis.element.nativeElement.classList.add('has-sub');\n\t\t\t\tthis.checkRouteTree();\n\t\t\t}\n\t\t\tif (this.model.route != null) {\n\t\t\t\tthis.routeTree = this.router.createUrlTree(this.model.route);\n\t\t\t\tthis.checkRouteTree();\n\t\t\t}\n\t\t}\n\t}\n\n\tformatRoute() {\n\t\tif (this.model != null && this.model.route == null)\n\t\t\treturn null;\n\t\treturn ['..', ...this.model.route];\n\t}\n\n\tgetCssClass(): string {\n\t\tif(this.model && this.model.isHiddenWhenNotActive) {\n\t\t\treturn 'hidden-when-not-active';\n\t\t}\n\t\tif(this.model && this.model.isAvailableInDifferentPlan) {\n\t\t\treturn 'available-in-different-plan';\n\t\t}\n\t\treturn '';\n\t}\n\n\tisSubMenuActive(): boolean {\n\t\tif(!this.isParent || !this.model) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif(this.model.isHiddenWhenNotActive && !this.model.active) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif(this.model.collapsed) {\n\t\t\treturn false;\n\t\t}\n\n\t\tlet hasVisibleChild = false;\n\t\tfor(let item of this.model.data) {\n\t\t\tif(!item.isHiddenWhenNotActive || this.isCurrentUrlMatchingWithSegmentPatterns(item.route)) {\n\t\t\t\thasVisibleChild = true;\n\t\t\t}\n\t\t}\n\n\t\treturn hasVisibleChild;\n\t}\n\n\tpublic showInfoAboutAvaliabilityInOtherPlan() {\n\t\t// Google Analytics info\n\t\tlet w: any = window;\n\t\tif(w.gtag) {\n\t\t\tw.gtag('event', 'stats_not_available_click', {});\n\t\t}\n\t\tthis.modal.prompt('Sorry but these statistics are not available in the free plan. Please subscribe to a paid plan or contact us for a demo.', [\n\t\t{\n\t\t\tlabel: 'Show plans', fa: 'shopping-cart', classes: ['test-css-class'],\n\t\t\tclose: true,\n\t\t\tclick: () => {\n\t\t\t\tlet w: any = window;\n\t\t\t\tif(w.gtag) {\n\t\t\t\t\tw.gtag('event', 'stats_not_available_show_plans', {});\n\t\t\t\t}\n\t\t\t\tthis.router.navigate(['admin', 'products']);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlabel: 'Contact with us', fa: 'envelope', classes: ['test-css-class'],\n\t\t\tclose: true,\n\t\t\tclick: () => {\n\t\t\t\tlet w: any = window;\n\t\t\t\tif(w.gtag) {\n\t\t\t\t\tw.gtag('event', 'stats_not_available_contact', {});\n\t\t\t\t}\n\t\t\t\tif(w && w.LeadBooster) {\n\t\t\t\t\tw.LeadBooster.trigger('open');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ label: \"Close\", fa: 'close', classes: ['test-css-class'], close: true }\n\t\t]);\n\t}\n\n\tprivate checkIfIsParent(d: SidebarItem): boolean { return d != null && d.data != null; }\n\n\tprivate checkRouteTree() {\n\t\tlet activate = false;\n\t\tif (this.isParent && this.model.data) {\n\t\t\tactivate = this.model.route && this.router.isActive(this.router.createUrlTree(<any[]>this.model.route), false);\n\t\t\tthis.model.collapsed = !activate;\n\t\t} else if (this.routeTree != null) {\n\t\t\tactivate = this.isCurrentUrlMatchingWithSegmentPatterns(this.model.route);\n\t\t}\n\t\tif (this.model.active != activate) {\n\t\t\tthis.model.active = activate;\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\n\tprivate isCurrentUrlMatchingWithSegmentPatterns(route: Array<String>): boolean {\n\t\tlet segments = this.router.parseUrl(this.router.url).root.children[PRIMARY_OUTLET].segments;\n\n\t\tif(route.length != segments.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tfor(let i = 0; i < route.length; i++) {\n\t\t\tlet routeSeg = route[i];\n\t\t\tlet urlSeg = segments[i].path;\n\n\t\t\t// Parameter segment - skip exact matching.\n\t\t\tif(typeof routeSeg === 'string' && routeSeg.charAt(0) === ':') {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif(routeSeg !== urlSeg) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/sidebar/item/sidebar.item.component.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, QueryList, ViewChildren } from '@angular/core';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\n\nimport { UrlService } from './../../service/url.service';\nimport { ViewService } from './../../service/view.service';\nimport { SidebarItem, SidebarModel } from '../../service/sidebar.model';\nimport { SidebarService } from '../../service/sidebar.service';\n\n/**\n * Created by mthk on 24/05/16.\n */\n@Component({\n\tselector: 'sidebar', host: { 'class': 'sidebar', '[class.active]': 'active', '[class.with-header]': '!isAppInIframe' },\n\ttemplate: require('./sidebar.component.html'),\n\tstyles: [require('./sidebar.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SidebarComponent extends Localization {\n\n\tactive: boolean;\n\tisAppInIframe: boolean = false;\n\tmodel: SidebarItem[] | null;\n\tname: string | null;\n\tfootMenu: SidebarItem[] = [{\n\t\tname: this.translation.translate('MENU.MAIN.HELP.NAME'),\n\t\ticon: 'fa-question',\n\t\topenIcon: 'fa-question-circle',\n\t\tdata: [\n\t\t\t{\n\t\t\t\tname: this.translation.translate('MENU.MAIN.HELP.DOCS'),\n\t\t\t\texternalUrl: this.url.documentationPage\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: this.translation.translate('MENU.MAIN.HELP.TUTORIAL'),\n\t\t\t\texternalUrl: this.url.tutorialPage\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: this.translation.translate('MENU.MAIN.HELP.PLAYERS_PLUGINS_DOCS'),\n\t\t\t\texternalUrl: this.url.playersPluginsDocumentationPage\n\t\t\t}\n\t\t]\n\t}, {\n\t\tname: this.translation.translate('MENU.MAIN.TERMS_AND_CONDITIONS'),\n\t\ticon: 'fa-balance-scale',\n\t\texternalUrl: this.url.termsPage\n\t}];\n\n\tprivate renderAt: number;\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate service: SidebarService,\n\t\tprivate url: UrlService,\n\t\tprivate view: ViewService) {\n\t\tsuper(locale, translation);\n\t\tthis.service.openStream$.subscribe((data: SidebarModel) => this.show(data));\n\t\tthis.service.updateStream$.subscribe(() => this.cdr.markForCheck());\n\t\tthis.service.closeStream$.subscribe(() => this.close());\n\t\tthis.isAppInIframe = this.view.checkIfAppInIframe();\n\t}\n\n\tshow(data: SidebarModel) {\n\t\tif (this.active != true || this.name != data.name || this.renderAt != data.renderAt) {\n\t\t\tthis.active = true;\n\t\t\tthis.name = data.name;\n\t\t\tthis.model = data.items;\n\t\t\tthis.renderAt = data.renderAt;\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\n\tclose() {\n\t\tif (this.active != false) {\n\t\t\tthis.active = false;\n\t\t\tthis.name = null;\n\t\t\tthis.model = null;\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\n\tonCollapse(i: SidebarItem) {\n\t\tif (this.model)\n\t\t\tthis.model.forEach((si: SidebarItem) => si.collapsed = (si.name !== i.name));\n\t\tif (this.footMenu)\n\t\t\tthis.footMenu.forEach((si: SidebarItem) => {\n\t\t\t\tif (si.name === i.name)\n\t\t\t\t\tsi.collapsed = !si.collapsed;\n\t\t\t\telse\n\t\t\t\t\tsi.collapsed = true;\n\t\t\t});\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/sidebar/sidebar.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { SidebarItemComponent } from './item/sidebar.item.component';\nimport { SidebarComponent } from './sidebar.component';\n\n@NgModule({\n\timports: [RouterModule, CommonModule, LocalizationModule],\n\tdeclarations: [SidebarComponent, SidebarItemComponent],\n\texports: [SidebarComponent]\n})\nexport class SidebarModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/sidebar/sidebar.module.ts","/**\n * Created by mthk on 19/07/16.\n */\nimport {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs/Subject';\nimport {Observable} from 'rxjs/Observable';\nimport {HeaderMenuModel} from './header.model';\n\n@Injectable()\nexport class HeaderService {\n\t//\n\tmenuStream$: Observable<HeaderMenuModel[]>;\n\tprotected menuSubject = new Subject<HeaderMenuModel[]>();\n\tlastMenuData: HeaderMenuModel[];\n\t//\n\tconstructor() {\n\t\tthis.menuStream$ = this.menuSubject.asObservable();\n\t}\n\t//\n\tmenu(data: HeaderMenuModel[]) {\n\t\tthis.lastMenuData = data;\n\t\tthis.menuSubject.next(data);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/header/header.service.ts","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar codemirror_module_1 = require(\"./codemirror.module\");\nexports.CodemirrorModule = codemirror_module_1.CodemirrorModule;\nvar codemirror_component_1 = require(\"./codemirror.component\");\nexports.CodemirrorComponent = codemirror_component_1.CodemirrorComponent;\n//# sourceMappingURL=index.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-codemirror/lib/index.js\n// module id = 187\n// module chunks = 1","import { Event as RouterEvent, Router, NavigationStart } from '@angular/router';\nimport { Injectable, Injector } from '@angular/core';\n\nimport { CookieService } from './cookie.service';\nimport { Subscription } from 'rxjs';\n\n// AoT compilation requires a reference to an exported function.\nexport function initBuyCookieService(cookie: BuyCookieService): Function {\n\treturn () => cookie.init();\n}\n\n@Injectable()\nexport class BuyCookieService {\n\n\t/* \n\t\n\tthis cookie is set on player landing page, when user click buy button,\n\t\t\n\t*/\n\n\tpublic url = '/admin/products';\n\tprivate name = 'bradmax-chosen-plan';\n\tprivate value: number | null;\n\tprivate routerSubscription: Subscription;\n\tprivate wasRedirected: Boolean = false;\n\n\tconstructor(private injector: Injector) { }\n\n\tinit() {\n\t\tthis.routerSub = this.injector.get(Router).events.subscribe(e => this.routerInterceptor(e));\n\t}\n\n\tread() {\n\t\tif (this.value == null) {\n\t\t\tvar i: number | null = null;\n\t\t\tvar c = this.injector.get(CookieService).read(this.name);\n\t\t\tif (c != null)\n\t\t\t\ti = parseInt(c);\n\t\t\tif (i != null && !isNaN(i))\n\t\t\t\tthis.value = parseInt(c);\n\t\t}\n\t\treturn this.value;\n\t}\n\n\terase() {\n\t\tif (this.value != null) {\n\t\t\tthis.injector.get(CookieService).erase(this.name);\n\t\t\tthis.value = null;\n\t\t}\n\t}\n\t\n\tprivate routerInterceptor(event: RouterEvent): void {\n\t\tif (event instanceof NavigationStart && this.wasRedirected == false && this.read() != null) {\n\t\t\tthis.wasRedirected = true;\n\t\t\tthis.injector.get(Router).navigate([this.url]);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprivate set routerSub(s: Subscription) {\n\t\tif (this.routerSubscription != null) this.routerSubscription.unsubscribe();\n\t\tthis.routerSubscription = s;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/buyCookie.service.ts","/**\n * Created by mthk on 07/10/16.\n */\nimport { InjectionToken } from '@angular/core';\nimport { AppConfigModel } from './app.model';\n\nexport let AppConfig = new InjectionToken('APP_CONFIG');\n\nexport let AppConfigTestData: AppConfigModel = {\n\tgoogleAnalyticsId: 'UA-xxxxxxxx-x',\n\tlivechatLicenseNumber: 1234567,\n\tlanguages: [''],\n\tdefault: {\n\t\tlanguage: '',\n\t\tcountry: ''\n\t},\n\tproviders: []\n};\n\n// Notice: GoogleAnalytics and LiveChat were disabled.\nexport const AppConfigData: AppConfigModel = {\n\tlanguages: ['en'],\n\tdefault: {\n\t\tlanguage: 'en',\n\t\tcountry: 'EN'\n\t},\n\tproviders: [\n\t\t'i18n/login/',\n\t\t'i18n/account/',\n\t\t'i18n/account/subscriptions/',\n\t\t'i18n/account/details/',\n\t\t'i18n/account/invoices/',\n\t\t'i18n/account/payments/',\n\t\t'i18n/analytics/albums/',\n\t\t'i18n/analytics/audience/',\n\t\t'i18n/analytics/content/',\n\t\t'i18n/analytics/dashboard/',\n\t\t'i18n/analytics/geo/',\n\t\t'i18n/analytics/realtime/',\n\t\t'i18n/analytics/info/',\n\t\t'i18n/analytics/technology/',\n\t\t'i18n/analytics/QOS/',\n\t\t'i18n/analytics/heartbeat/',\n\t\t'i18n/analytics/top-content/',\n\t\t'i18n/analytics/st-raport/',\n\t\t'i18n/analytics/sampled-traffic/',\n\t\t'i18n/analytics/tag-service/',\n\t\t'i18n/content/',\n\t\t'i18n/components/',\n\t\t'i18n/player/',\n\t\t'i18n/products/',\n\t\t'i18n/subscription/',\n\t\t'i18n/products/plan-carrousel/',\n\t\t'i18n/password-change/'\n\t]\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/app/app.config.ts","import { Injectable } from '@angular/core';\n\nimport { CookieService } from './cookie.service';\nimport { LocalStorageService } from './localstorage.service';\n\n/**\n * Created by mthk on 01/07/16.\n */\n@Injectable()\nexport class AuthService {\n\n\tuser: string | null;\n\tpassword: string | null;\n\n\tget defaultUrl(): string {\n\t\t// TODO: value should be from Config not hard coded\n\t\treturn this.defaultUrlCache || 'analytics/dashboard';\n\t}\n\tset defaultUrl(value: string) {\n\t\tthis.defaultUrlCache = this.sanitizeUrl(value);\n\t}\n\n\tset redirectUrl(value: string | null) {\n\t\tthis.redirectUrlCache = this.sanitizeUrl(value);\n\t}\n\tget redirectUrl(): string | null {\n\t\treturn this.redirectUrlCache;\n\t}\n\n\tget logged(): boolean {\n\t\tthis.isLoggedIn = (this.token != null);\n\t\treturn this.isLoggedIn;\n\t}\n\n\tset token(v: string | null) {\n\t\tthis.user = null;\n\t\tthis.password = null;\n\t\tthis.localStorage.write(this.LOCAL_STORAGE_TOKEN_KEY, v);\n\t}\n\n\tget token(): string | null {\n\t\tlet result = this.localStorage.read(this.LOCAL_STORAGE_TOKEN_KEY);\n\t\t// Back compatibility with token stored in cookie.\n\t\tif(!result) {\n\t\t\tresult = this.cookie.read(this.LOCAL_STORAGE_TOKEN_KEY_OLD);\n\t\t}\n\t\t// Format result. Not empty string or null.\n\t\tresult = result ? result : null;\n\t\treturn result;\n\t}\n\n\tprivate isLoggedIn = false;\n\tprivate redirectUrlCache: string | null;\n\tprivate defaultUrlCache: string | null;\n\tprivate LOCAL_STORAGE_TOKEN_KEY_OLD = 'token';\n\tprivate LOCAL_STORAGE_TOKEN_KEY = 'btoken';\n\n\tconstructor(private localStorage: LocalStorageService, private cookie: CookieService) { }\n\n\tclear() {\n\t\tthis.user = null;\n\t\tthis.password = null;\n\t\tthis.localStorage.erase(this.LOCAL_STORAGE_TOKEN_KEY);\n\t\tthis.cookie.erase(this.LOCAL_STORAGE_TOKEN_KEY_OLD);\n\t}\n\n\tsanitizeUrl(url: string | null): string | null {\n\t\tif (url && url.length > 0 && url.indexOf('/') == 0)\n\t\t\turl = url.substring(1);\n\t\treturn url;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/auth.service.ts","/**\n * Created by mthk on 04/10/16.\n */\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\n\n//import { AccountDetailsModal } from './account.details.modal';\nimport { AlertModalComponent } from './alert.modal.component';\n//import { ContactModalComponent } from './contact.modal.component';\nimport { InputModalComponent } from './input.modal.component';\nimport { ModalButton, ModalModel, ModalType } from './modal.model';\nimport { PasswordChangeModalComponent } from './password-change.modal.component';\nimport { PromptModalComponent } from './prompt.modal.component';\nimport { GdprInfoModalComponent } from './gdpr.info.modal.component';\nimport { TermsModalComponent } from './terms.modal.component';\n\n@Injectable()\nexport class ModalService {\n\n\tcreateStream$: Observable<ModalModel>;\n\tcloseStream$: Observable<any>;\n\tclosedStream$: Observable<any>;\n\tclosedSource = new Subject<null>();\n\tprivate createSource = new Subject<ModalModel>();\n\tprivate closeSource = new Subject<any>();\n\n\tconstructor() {\n\t\tthis.createStream$ = this.createSource.asObservable();\n\t\tthis.closeStream$ = this.closeSource.asObservable();\n\t\tthis.closedStream$ = this.closedSource.asObservable();\n\t}\n\n\talert(html: string) {\n\t\tthis.createSource.next({\n\t\t\ttype: ModalType.alert,\n\t\t\tcloseOnBackdropClick: true,\n\t\t\tcomponent: AlertModalComponent,\n\t\t\thtml: html\n\t\t});\n\t}\n\n\tprompt(html: string, buttons: ModalButton[]) {\n\t\tthis.createSource.next({\n\t\t\ttype: ModalType.prompt,\n\t\t\tcloseOnBackdropClick: true,\n\t\t\tcomponent: PromptModalComponent,\n\t\t\thtml: html,\n\t\t\tbuttons: buttons\n\t\t});\n\t}\n\n\tterms(title: string, html: string, buttons: ModalButton[]) {\n\t\tthis.createSource.next({\n\t\t\ttype: ModalType.prompt,\n\t\t\tcloseOnBackdropClick: true,\n\t\t\tcomponent: TermsModalComponent,\n\t\t\ttitle: title,\n\t\t\thtml: html,\n\t\t\tbuttons: buttons\n\t\t});\n\t}\n\n\tgdprInfo( html: string) {\n\t\tthis.createSource.next({\n\t\t\ttype: ModalType.prompt,\n\t\t\tcloseOnBackdropClick: true,\n\t\t\tcomponent: GdprInfoModalComponent,\n\t\t\thtml: html\n\t\t});\n\t}\n\n\tinput(header: string, label: string, buttons: ModalButton[], inputDefaultValue: string | null = null) {\n\t\tthis.createSource.next({\n\t\t\ttype: ModalType.input,\n\t\t\tcloseOnBackdropClick: true,\n\t\t\tcomponent: InputModalComponent,\n\t\t\thtml: header,\n\t\t\tinputLabel: label,\n\t\t\tinputDefaultValue: inputDefaultValue,\n\t\t\tbuttons: buttons\n\t\t});\n\t}\n\n\tcreate(model: ModalModel) {\n\t\tmodel.type = ModalType.modal;\n\t\tthis.createSource.next(model);\n\t}\n\n//\taccountDetails(buttons?: ModalButton[]) {\n//\t\tthis.createSource.next({\n//\t\t\ttype: ModalType.accountDetails,\n//\t\t\tcloseOnBackdropClick: true,\n//\t\t\tcomponent: AccountDetailsModal,\n//\t\t\tbuttons: buttons\n//\t\t});\n//\t}\n\n//\tcontact(buttons?: ModalButton[], planId?: number) {\n//\t\tthis.createSource.next({\n//\t\t\ttype: ModalType.contact,\n//\t\t\tcloseOnBackdropClick: true,\n//\t\t\tcomponent: ContactModalComponent,\n//\t\t\tbuttons: buttons,\n//\t\t\tinputData: planId\n//\t\t});\n//\t}\n\n\tclose() {\n\t\tthis.closeSource.next(null);\n\t}\n\n\tpasswordChange() {\n\t\tthis.createSource.next({\n\t\t\ttype: ModalType.passwordChange,\n\t\t\tcloseOnBackdropClick: true,\n\t\t\tcomponent: PasswordChangeModalComponent,\n\t\t\tbuttons: [],\n\t\t\tinputData: null\n\t\t});\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/modal.service.ts","var __extends = (this && this.__extends) || (function () {\r\n    var extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return function (d, b) {\r\n        extendStatics(d, b);\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    };\r\n})();\r\nvar __generator = (this && this.__generator) || function (thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [0, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n};\r\nimport { ChangeDetectorRef, Directive, ElementRef, EventEmitter, Injectable, Injector, Input, NgModule, Output, Pipe, Renderer2, forwardRef } from '@angular/core';\r\nimport { Subject } from 'rxjs/Subject';\r\nimport { Observable } from 'rxjs/Observable';\r\nimport 'rxjs/add/operator/toPromise';\r\nimport 'rxjs/add/observable/merge';\r\nimport { Http } from '@angular/http';\r\nimport 'rxjs/add/operator/map';\r\nimport { CurrencyPipe, DatePipe, DecimalPipe, PercentPipe } from '@angular/common';\r\nimport { NG_VALIDATORS } from '@angular/forms';\r\n/**\r\n * Allows to get the dependencies at the module level or component.\r\n */\r\nvar InjectorRef = (function () {\r\n    /**\r\n     * @param {?} injector\r\n     */\r\n    function InjectorRef(injector) {\r\n        this.injector = injector;\r\n        InjectorRef.injector = this.injector;\r\n    }\r\n    /**\r\n     * @template T\r\n     * @param {?} token\r\n     * @return {?}\r\n     */\r\n    InjectorRef.get = function (token) {\r\n        return this.injector.get(token);\r\n    };\r\n    return InjectorRef;\r\n}());\r\nInjectorRef.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nInjectorRef.ctorParameters = function () { return [\r\n    { type: Injector, },\r\n]; };\r\nvar LocaleConfig = (function () {\r\n    function LocaleConfig() {\r\n        this.languageCodes = [];\r\n        this.storageIsDisabled = false;\r\n        this.localStorage = false;\r\n        this.sessionStorage = false;\r\n    }\r\n    return LocaleConfig;\r\n}());\r\nLocaleConfig.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleConfig.ctorParameters = function () { return []; };\r\nvar LocaleConfigAPI = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     */\r\n    function LocaleConfigAPI(configuration) {\r\n        this.configuration = configuration;\r\n    }\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?=} textDirection\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.addLanguage = function (languageCode, textDirection) {\r\n        if (textDirection === void 0) { textDirection = \"LTR\"; }\r\n        this.configuration.languageCodes.push({ code: languageCode, direction: textDirection });\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} languageCodes\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.addLanguages = function (languageCodes) {\r\n        for (var _i = 0, languageCodes_1 = languageCodes; _i < languageCodes_1.length; _i++) {\r\n            var languageCode = languageCodes_1[_i];\r\n            this.configuration.languageCodes.push({ code: languageCode, direction: \"ltr\" });\r\n        }\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.disableStorage = function () {\r\n        this.configuration.storageIsDisabled = true;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?=} days\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.setCookieExpiration = function (days) {\r\n        this.configuration.cookiesExpirationDays = days;\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.useLocalStorage = function () {\r\n        this.configuration.localStorage = true;\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.useSessionStorage = function () {\r\n        this.configuration.sessionStorage = true;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.defineLanguage = function (languageCode) {\r\n        this.configuration.languageCode = languageCode;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?} countryCode\r\n     * @param {?=} scriptCode\r\n     * @param {?=} numberingSystem\r\n     * @param {?=} calendar\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.defineDefaultLocale = function (languageCode, countryCode, scriptCode, numberingSystem, calendar) {\r\n        this.configuration.languageCode = languageCode;\r\n        this.configuration.countryCode = countryCode;\r\n        this.configuration.scriptCode = scriptCode;\r\n        this.configuration.numberingSystem = numberingSystem;\r\n        this.configuration.calendar = calendar;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} currencyCode\r\n     * @return {?}\r\n     */\r\n    LocaleConfigAPI.prototype.defineCurrency = function (currencyCode) {\r\n        this.configuration.currencyCode = currencyCode;\r\n        return this;\r\n    };\r\n    return LocaleConfigAPI;\r\n}());\r\nvar __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try {\r\n            step(generator.next(value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function rejected(value) { try {\r\n            step(generator[\"throw\"](value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\n/**\r\n * Implement this class-interface to create a custom storage for default locale & currency.\r\n * @abstract\r\n */\r\nvar LocaleStorage = (function () {\r\n    function LocaleStorage() {\r\n    }\r\n    /**\r\n     * This method must contain the logic to read the storage.\r\n    \\@param name 'defaultLocale' or 'currency'\r\n    \\@return A promise with the value of the given name\r\n     * @abstract\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    LocaleStorage.prototype.read = function (name) { };\r\n    /**\r\n     * This method must contain the logic to write the storage.\r\n    \\@param name 'defaultLocale' or 'currency'\r\n    \\@param value The value for the given name\r\n     * @abstract\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    LocaleStorage.prototype.write = function (name, value) { };\r\n    return LocaleStorage;\r\n}());\r\nLocaleStorage.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleStorage.ctorParameters = function () { return []; };\r\nvar BrowserStorage = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     */\r\n    function BrowserStorage(configuration) {\r\n        this.configuration = configuration;\r\n        this.hasCookie = typeof navigator !== \"undefined\" && navigator.cookieEnabled;\r\n        this.hasStorage = typeof Storage !== \"undefined\";\r\n    }\r\n    /**\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.read = function (name) {\r\n        return __awaiter$1(this, void 0, void 0, function () {\r\n            var value;\r\n            return __generator(this, function (_a) {\r\n                value = null;\r\n                if (!this.configuration.storageIsDisabled) {\r\n                    if (this.configuration.localStorage && this.hasStorage) {\r\n                        value = this.getLocalStorage(name);\r\n                    }\r\n                    else if (this.configuration.sessionStorage && this.hasStorage) {\r\n                        value = this.getSessionStorage(name);\r\n                    }\r\n                    else if (this.hasCookie) {\r\n                        value = this.getCookie(name);\r\n                    }\r\n                }\r\n                return [2 /*return*/, value];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.write = function (name, value) {\r\n        return __awaiter$1(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                if (!this.configuration.storageIsDisabled) {\r\n                    if (this.configuration.localStorage && this.hasStorage) {\r\n                        this.setLocalStorage(name, value);\r\n                    }\r\n                    else if (this.configuration.sessionStorage && this.hasStorage) {\r\n                        this.setSessionStorage(name, value);\r\n                    }\r\n                    else if (this.hasCookie) {\r\n                        this.setCookie(name, value);\r\n                    }\r\n                }\r\n                return [2 /*return*/];\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.getLocalStorage = function (name) {\r\n        return localStorage.getItem(name);\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.getSessionStorage = function (name) {\r\n        return sessionStorage.getItem(name);\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.getCookie = function (name) {\r\n        var /** @type {?} */ result = null;\r\n        if (typeof document !== \"undefined\") {\r\n            result = new RegExp(\"(?:^|; )\" + encodeURIComponent(name) + \"=([^;]*)\").exec(document.cookie);\r\n        }\r\n        return result ? result[1] : null;\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.setLocalStorage = function (name, value) {\r\n        localStorage.setItem(name, value);\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.setSessionStorage = function (name, value) {\r\n        sessionStorage.setItem(name, value);\r\n    };\r\n    /**\r\n     * @param {?} name\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BrowserStorage.prototype.setCookie = function (name, value) {\r\n        var /** @type {?} */ expires = \"\";\r\n        if (this.configuration.cookiesExpirationDays != null) {\r\n            var /** @type {?} */ expirationDate = new Date();\r\n            expirationDate.setTime(expirationDate.getTime() +\r\n                (this.configuration.cookiesExpirationDays * 24 * 60 * 60 * 1000));\r\n            expires = \"; expires=\" + expirationDate.toUTCString();\r\n        }\r\n        if (typeof document !== \"undefined\") {\r\n            document.cookie = name + \"=\" + value + expires + \"; path=/\";\r\n        }\r\n    };\r\n    return BrowserStorage;\r\n}());\r\nBrowserStorage.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nBrowserStorage.ctorParameters = function () { return [\r\n    { type: LocaleConfig, },\r\n]; };\r\nvar DefaultLocale = (function () {\r\n    function DefaultLocale() {\r\n    }\r\n    Object.defineProperty(DefaultLocale.prototype, \"value\", {\r\n        /**\r\n         * @return {?}\r\n         */\r\n        get: function () {\r\n            return this._value;\r\n        },\r\n        /**\r\n         * @param {?} defaultLocale\r\n         * @return {?}\r\n         */\r\n        set: function (defaultLocale) {\r\n            this._value = defaultLocale;\r\n            this.parseValue();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?=} countryCode\r\n     * @param {?=} scriptCode\r\n     * @param {?=} numberingSystem\r\n     * @param {?=} calendar\r\n     * @return {?}\r\n     */\r\n    DefaultLocale.prototype.build = function (languageCode, countryCode, scriptCode, numberingSystem, calendar) {\r\n        this.languageCode = languageCode;\r\n        this.scriptCode = scriptCode;\r\n        this.countryCode = countryCode;\r\n        this.numberingSystem = numberingSystem;\r\n        this.calendar = calendar;\r\n        var /** @type {?} */ value = [];\r\n        value.push(languageCode);\r\n        value.push(!!scriptCode ? \"-\" + scriptCode : \"\");\r\n        value.push(!!countryCode ? \"-\" + countryCode : \"\");\r\n        // Adds the 'u' (Unicode) extension.\r\n        value.push((!!numberingSystem || !!calendar) ? \"-u\" : \"\");\r\n        value.push(!!numberingSystem ? \"-nu-\" + numberingSystem : \"\");\r\n        value.push(!!calendar ? \"-ca-\" + calendar : \"\");\r\n        this._value = value.join(\"\");\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    DefaultLocale.prototype.parseValue = function () {\r\n        if (!!this.value) {\r\n            var /** @type {?} */ value = this.value;\r\n            // Looks for the 'u' (Unicode) extension.\r\n            var /** @type {?} */ index = value.search(\"-u\");\r\n            if (index != -1) {\r\n                var /** @type {?} */ extensions = value.substring(index + 1).split(\"-\");\r\n                switch (extensions.length) {\r\n                    case 3:\r\n                        if (extensions[1] == \"nu\") {\r\n                            this.numberingSystem = extensions[2];\r\n                        }\r\n                        else if (extensions[1] == \"ca\") {\r\n                            this.calendar = extensions[2];\r\n                        }\r\n                        break;\r\n                    default:\r\n                        this.numberingSystem = extensions[2];\r\n                        this.calendar = extensions[4];\r\n                        break;\r\n                }\r\n                // Extracts the codes.\r\n                value = value.substring(0, index);\r\n            }\r\n            var /** @type {?} */ codes = value.split(\"-\");\r\n            switch (codes.length) {\r\n                case 1:\r\n                    this.languageCode = codes[0];\r\n                    break;\r\n                case 2:\r\n                    this.languageCode = codes[0];\r\n                    this.countryCode = codes[1];\r\n                    break;\r\n                default:\r\n                    this.languageCode = codes[0];\r\n                    this.scriptCode = codes[1];\r\n                    this.countryCode = codes[2];\r\n                    break;\r\n            }\r\n        }\r\n    };\r\n    return DefaultLocale;\r\n}());\r\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try {\r\n            step(generator.next(value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function rejected(value) { try {\r\n            step(generator[\"throw\"](value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar LocaleService = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     * @param {?} storage\r\n     */\r\n    function LocaleService(configuration, storage) {\r\n        this.configuration = configuration;\r\n        this.storage = storage;\r\n        this.languageCodeChanged = new EventEmitter(true);\r\n        this.defaultLocaleChanged = new EventEmitter(true);\r\n        this.currencyCodeChanged = new EventEmitter(true);\r\n        this.loadTranslation = new Subject();\r\n        this.defaultLocale = new DefaultLocale();\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.addConfiguration = function () {\r\n        return new LocaleConfigAPI(this.configuration);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getConfiguration = function () {\r\n        return this.configuration;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.init = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.initStorage()];\r\n                    case 1:\r\n                        _a.sent();\r\n                        if (!!this.configuration.languageCode && !!this.configuration.countryCode) {\r\n                            this.initDefaultLocale();\r\n                        }\r\n                        else if (!!this.configuration.languageCode) {\r\n                            this.initLanguage();\r\n                        }\r\n                        if (!!this.configuration.currencyCode) {\r\n                            this.initCurrency();\r\n                        }\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getAvailableLanguages = function () {\r\n        return this.configuration.languageCodes.map(function (language) { return language.code; });\r\n    };\r\n    /**\r\n     * @param {?=} languageCode\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getLanguageDirection = function (languageCode) {\r\n        if (languageCode === void 0) { languageCode = this.defaultLocale.languageCode; }\r\n        var /** @type {?} */ matchedLanguages = this.matchLanguage(languageCode);\r\n        return matchedLanguages[0].direction;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentLanguage = function () {\r\n        return this.defaultLocale.languageCode;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentCountry = function () {\r\n        if (!!this.defaultLocale.countryCode) {\r\n            return this.defaultLocale.countryCode;\r\n        }\r\n        return \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentScript = function () {\r\n        if (!!this.defaultLocale.scriptCode) {\r\n            return this.defaultLocale.scriptCode;\r\n        }\r\n        return \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentLocale = function () {\r\n        var /** @type {?} */ locale = !!this.defaultLocale.countryCode\r\n            ? this.defaultLocale.languageCode + \"-\" + this.defaultLocale.countryCode\r\n            : this.defaultLocale.languageCode;\r\n        return locale;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentNumberingSystem = function () {\r\n        if (!!this.defaultLocale.numberingSystem) {\r\n            return this.defaultLocale.numberingSystem;\r\n        }\r\n        return \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentCalendar = function () {\r\n        if (!!this.defaultLocale.calendar) {\r\n            return this.defaultLocale.calendar;\r\n        }\r\n        return \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getDefaultLocale = function () {\r\n        return this.defaultLocale.value;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getCurrentCurrency = function () {\r\n        return this.currencyCode;\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.setCurrentLanguage = function (languageCode) {\r\n        if (this.defaultLocale.languageCode != languageCode) {\r\n            this.defaultLocale.build(languageCode);\r\n            this.storage.write(\"defaultLocale\", this.defaultLocale.value);\r\n            this.sendLanguageEvents();\r\n            this.sendTranslationEvents();\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?} countryCode\r\n     * @param {?=} scriptCode\r\n     * @param {?=} numberingSystem\r\n     * @param {?=} calendar\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.setDefaultLocale = function (languageCode, countryCode, scriptCode, numberingSystem, calendar) {\r\n        if (this.defaultLocale.languageCode != languageCode ||\r\n            this.defaultLocale.countryCode != countryCode ||\r\n            this.defaultLocale.scriptCode != scriptCode ||\r\n            this.defaultLocale.numberingSystem != numberingSystem ||\r\n            this.defaultLocale.calendar != calendar) {\r\n            this.defaultLocale.build(languageCode, countryCode, scriptCode, numberingSystem, calendar);\r\n            this.storage.write(\"defaultLocale\", this.defaultLocale.value);\r\n            this.sendDefaultLocaleEvents();\r\n            this.sendTranslationEvents();\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} currencyCode\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.setCurrentCurrency = function (currencyCode) {\r\n        if (this.currencyCode != currencyCode) {\r\n            this.currencyCode = currencyCode;\r\n            this.storage.write(\"currency\", this.currencyCode);\r\n            this.sendCurrencyEvents();\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.initStorage = function () {\r\n        return __awaiter(this, void 0, void 0, function () {\r\n            var defaultLocale, currencyCode;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        if (!!this.defaultLocale.value) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.storage.read(\"defaultLocale\")];\r\n                    case 1:\r\n                        defaultLocale = _a.sent();\r\n                        if (!!defaultLocale) {\r\n                            this.defaultLocale.value = defaultLocale;\r\n                        }\r\n                        _a.label = 2;\r\n                    case 2:\r\n                        if (!(this.currencyCode == null)) return [3 /*break*/, 4];\r\n                        return [4 /*yield*/, this.storage.read(\"currency\")];\r\n                    case 3:\r\n                        currencyCode = _a.sent();\r\n                        if (!!currencyCode) {\r\n                            this.currencyCode = currencyCode;\r\n                        }\r\n                        _a.label = 4;\r\n                    case 4: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.initLanguage = function () {\r\n        if (!this.defaultLocale.languageCode) {\r\n            var /** @type {?} */ browserLanguage = this.getBrowserLanguage();\r\n            var /** @type {?} */ matchedLanguages = [];\r\n            if (!!browserLanguage) {\r\n                matchedLanguages = this.matchLanguage(browserLanguage);\r\n            }\r\n            if (!!browserLanguage && matchedLanguages.length > 0) {\r\n                this.defaultLocale.build(browserLanguage);\r\n            }\r\n            else {\r\n                this.defaultLocale.build(this.configuration.languageCode);\r\n            }\r\n            this.storage.write(\"defaultLocale\", this.defaultLocale.value);\r\n        }\r\n        this.sendLanguageEvents();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.initDefaultLocale = function () {\r\n        if (!this.defaultLocale.value) {\r\n            this.defaultLocale.build(this.configuration.languageCode, this.configuration.countryCode, this.configuration.scriptCode, this.configuration.numberingSystem, this.configuration.calendar);\r\n            this.storage.write(\"defaultLocale\", this.defaultLocale.value);\r\n        }\r\n        this.sendDefaultLocaleEvents();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.initCurrency = function () {\r\n        if (this.currencyCode == null) {\r\n            this.currencyCode = this.configuration.currencyCode;\r\n            this.storage.write(\"currency\", this.currencyCode);\r\n        }\r\n        this.sendCurrencyEvents();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getBrowserLanguage = function () {\r\n        var /** @type {?} */ browserLanguage = null;\r\n        if (typeof navigator !== \"undefined\" && navigator.language) {\r\n            browserLanguage = navigator.language;\r\n        }\r\n        if (browserLanguage != null) {\r\n            var /** @type {?} */ index = browserLanguage.indexOf(\"-\");\r\n            if (index != -1) {\r\n                browserLanguage = browserLanguage.substring(0, index);\r\n            }\r\n        }\r\n        return browserLanguage;\r\n    };\r\n    /**\r\n     * @param {?} languageCode\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.matchLanguage = function (languageCode) {\r\n        var /** @type {?} */ matchedLanguages = this.configuration.languageCodes.filter(function (language) {\r\n            return language.code == languageCode;\r\n        });\r\n        return matchedLanguages;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.sendLanguageEvents = function () {\r\n        this.languageCodeChanged.emit(this.defaultLocale.languageCode);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.sendDefaultLocaleEvents = function () {\r\n        this.defaultLocaleChanged.emit(this.defaultLocale.value);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.sendCurrencyEvents = function () {\r\n        this.currencyCodeChanged.emit(this.currencyCode);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.sendTranslationEvents = function () {\r\n        // This event is subscribed by TranslationService to load the translation data.\r\n        this.loadTranslation.next();\r\n    };\r\n    return LocaleService;\r\n}());\r\nLocaleService.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleService.ctorParameters = function () { return [\r\n    { type: LocaleConfig, },\r\n    { type: LocaleStorage, },\r\n]; };\r\nLocaleService.propDecorators = {\r\n    'languageCodeChanged': [{ type: Output },],\r\n    'defaultLocaleChanged': [{ type: Output },],\r\n    'currencyCodeChanged': [{ type: Output },],\r\n};\r\nvar TranslationConfig = (function () {\r\n    function TranslationConfig() {\r\n        this.translationData = {};\r\n        this.providers = [];\r\n        this.localeAsLanguage = false;\r\n        this.keySeparator = \".\";\r\n        this.i18nPlural = true;\r\n    }\r\n    return TranslationConfig;\r\n}());\r\nTranslationConfig.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationConfig.ctorParameters = function () { return []; };\r\n/**\r\n * Provides the methods to check if Intl APIs are supported.\r\n */\r\nvar IntlAPI = (function () {\r\n    function IntlAPI() {\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntlAPI.hasDateTimeFormat = function () {\r\n        return this.hasIntl && Intl.hasOwnProperty(\"DateTimeFormat\");\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntlAPI.hasNumberFormat = function () {\r\n        return this.hasIntl && Intl.hasOwnProperty(\"NumberFormat\");\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntlAPI.hasCollator = function () {\r\n        return this.hasIntl && Intl.hasOwnProperty(\"Collator\");\r\n    };\r\n    return IntlAPI;\r\n}());\r\nIntlAPI.hasIntl = typeof Intl === \"object\" && !!Intl;\r\nvar TranslationConfigAPI = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     */\r\n    function TranslationConfigAPI(configuration) {\r\n        this.configuration = configuration;\r\n    }\r\n    /**\r\n     * @param {?} languageCode\r\n     * @param {?} translation\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.addTranslation = function (languageCode, translation) {\r\n        this.configuration.translationData[languageCode] =\r\n            typeof this.configuration.translationData[languageCode] !== \"undefined\"\r\n                ? Object.assign({}, this.configuration.translationData[languageCode], translation) : translation;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} prefix\r\n     * @param {?=} dataFormat\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.addProvider = function (prefix, dataFormat) {\r\n        if (dataFormat === void 0) { dataFormat = \"json\"; }\r\n        this.configuration.providers.push({ args: { type: \"Static\", prefix: prefix, dataFormat: dataFormat } });\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} path\r\n     * @param {?=} dataFormat\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.addWebAPIProvider = function (path, dataFormat) {\r\n        if (dataFormat === void 0) { dataFormat = \"json\"; }\r\n        this.configuration.providers.push({ args: { type: \"WebAPI\", path: path, dataFormat: dataFormat } });\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?=} args\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.addCustomProvider = function (args) {\r\n        this.configuration.providers.push({ args: args });\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.useLocaleAsLanguage = function () {\r\n        this.configuration.localeAsLanguage = true;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.setMissingValue = function (value) {\r\n        this.configuration.missingValue = value;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.setMissingKey = function (key) {\r\n        this.configuration.missingKey = key;\r\n        return this;\r\n    };\r\n    /**\r\n     * @param {?} keySeparator\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.setComposedKeySeparator = function (keySeparator) {\r\n        this.configuration.keySeparator = keySeparator;\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationConfigAPI.prototype.disableI18nPlural = function () {\r\n        this.configuration.i18nPlural = false;\r\n        return this;\r\n    };\r\n    return TranslationConfigAPI;\r\n}());\r\n/**\r\n * Implement this class-interface to create a custom provider for translation data.\r\n * @abstract\r\n */\r\nvar TranslationProvider = (function () {\r\n    function TranslationProvider() {\r\n    }\r\n    /**\r\n     * This method must contain the logic of data access.\r\n    \\@param language The current language\r\n    \\@param args The parameter of addCustomProvider method\r\n    \\@return An observable of an object of translation data: {key: value}\r\n     * @abstract\r\n     * @param {?} language\r\n     * @param {?} args\r\n     * @return {?}\r\n     */\r\n    TranslationProvider.prototype.getTranslation = function (language, args) { };\r\n    return TranslationProvider;\r\n}());\r\nTranslationProvider.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationProvider.ctorParameters = function () { return []; };\r\nvar HttpTranslationProvider = (function () {\r\n    /**\r\n     * @param {?} http\r\n     */\r\n    function HttpTranslationProvider(http) {\r\n        this.http = http;\r\n    }\r\n    /**\r\n     * @param {?} language\r\n     * @param {?} args\r\n     * @return {?}\r\n     */\r\n    HttpTranslationProvider.prototype.getTranslation = function (language, args) {\r\n        var /** @type {?} */ url = \"\";\r\n        switch (args.type) {\r\n            case \"WebAPI\":\r\n                url += args.path + language;\r\n                break;\r\n            default:\r\n                url += args.prefix + language + \".\" + args.dataFormat;\r\n        }\r\n        return this.http.get(url)\r\n            .map(function (res) { return res.json(); });\r\n    };\r\n    return HttpTranslationProvider;\r\n}());\r\nHttpTranslationProvider.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nHttpTranslationProvider.ctorParameters = function () { return [\r\n    { type: Http, },\r\n]; };\r\n/**\r\n * Implement this class-interface to create a custom handler for translated values.\r\n * @abstract\r\n */\r\nvar TranslationHandler = (function () {\r\n    function TranslationHandler() {\r\n    }\r\n    /**\r\n     * This method must contain the logic to parse the translated value.\r\n    \\@param path The path of the key\r\n    \\@param key The key that has been requested\r\n    \\@param value The translated value\r\n    \\@param args The parameters passed along with the key\r\n    \\@param lang The current language\r\n    \\@return The parsed value\r\n     * @abstract\r\n     * @param {?} path\r\n     * @param {?} key\r\n     * @param {?} value\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    TranslationHandler.prototype.parseValue = function (path, key, value, args, lang) { };\r\n    return TranslationHandler;\r\n}());\r\nTranslationHandler.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationHandler.ctorParameters = function () { return []; };\r\nvar DefaultTranslationHandler = (function () {\r\n    /**\r\n     * @param {?} configuration\r\n     */\r\n    function DefaultTranslationHandler(configuration) {\r\n        this.configuration = configuration;\r\n    }\r\n    /**\r\n     * @param {?} path\r\n     * @param {?} key\r\n     * @param {?} value\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    DefaultTranslationHandler.prototype.parseValue = function (path, key, value, args, lang) {\r\n        if (value == null) {\r\n            return this.handleMissingValue(path);\r\n        }\r\n        else if (args) {\r\n            return this.handleArgs(value, args);\r\n        }\r\n        return value;\r\n    };\r\n    /**\r\n     * @param {?} path\r\n     * @return {?}\r\n     */\r\n    DefaultTranslationHandler.prototype.handleMissingValue = function (path) {\r\n        if (this.configuration.missingValue != null) {\r\n            return this.configuration.missingValue;\r\n        }\r\n        // The same path is returned.\r\n        return path;\r\n    };\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} args\r\n     * @return {?}\r\n     */\r\n    DefaultTranslationHandler.prototype.handleArgs = function (value, args) {\r\n        var /** @type {?} */ TEMPLATE_REGEXP = /{{\\s?([^{}\\s]*)\\s?}}/g;\r\n        return value.replace(TEMPLATE_REGEXP, function (substring, parsedKey) {\r\n            var /** @type {?} */ replacer = (args[parsedKey]);\r\n            return typeof replacer !== \"undefined\" ? replacer : substring;\r\n        });\r\n    };\r\n    return DefaultTranslationHandler;\r\n}());\r\nDefaultTranslationHandler.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nDefaultTranslationHandler.ctorParameters = function () { return [\r\n    { type: TranslationConfig, },\r\n]; };\r\nvar LoadingMode = {};\r\nLoadingMode.Direct = 0;\r\nLoadingMode.Async = 1;\r\nLoadingMode[LoadingMode.Direct] = \"Direct\";\r\nLoadingMode[LoadingMode.Async] = \"Async\";\r\nvar ServiceState = {};\r\nServiceState.isReady = 0;\r\nServiceState.isLoading = 1;\r\nServiceState.isWaiting = 2;\r\nServiceState[ServiceState.isReady] = \"isReady\";\r\nServiceState[ServiceState.isLoading] = \"isLoading\";\r\nServiceState[ServiceState.isWaiting] = \"isWaiting\";\r\nvar __awaiter$2 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try {\r\n            step(generator.next(value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function rejected(value) { try {\r\n            step(generator[\"throw\"](value));\r\n        }\r\n        catch (e) {\r\n            reject(e);\r\n        } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n};\r\nvar TranslationService = (function () {\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} configuration\r\n     * @param {?} translationProvider\r\n     * @param {?} translationHandler\r\n     */\r\n    function TranslationService(locale, configuration, translationProvider, translationHandler) {\r\n        this.locale = locale;\r\n        this.configuration = configuration;\r\n        this.translationProvider = translationProvider;\r\n        this.translationHandler = translationHandler;\r\n        this.translationChanged = new EventEmitter(true);\r\n        this.translationError = new EventEmitter(true);\r\n        /**\r\n         * The translation data: {language: {key: value}}.\r\n         */\r\n        this.translationData = {};\r\n        this.serviceState = ServiceState.isWaiting;\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.addConfiguration = function () {\r\n        return new TranslationConfigAPI(this.configuration);\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.getConfiguration = function () {\r\n        return this.configuration;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.init = function () {\r\n        return __awaiter$2(this, void 0, void 0, function () {\r\n            var _this = this;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: \r\n                    // Waiting for LocaleService initialization.\r\n                    return [4 /*yield*/, this.locale.init()];\r\n                    case 1:\r\n                        // Waiting for LocaleService initialization.\r\n                        _a.sent();\r\n                        if (this.configuration.providers.length > 0) {\r\n                            this.loadingMode = LoadingMode.Async;\r\n                        }\r\n                        else {\r\n                            this.loadingMode = LoadingMode.Direct;\r\n                        }\r\n                        // When the language changes, loads translation data.\r\n                        this.locale.loadTranslation.subscribe(function () { _this.loadTranslation(); });\r\n                        return [4 /*yield*/, this.loadTranslation()];\r\n                    case 2:\r\n                        _a.sent();\r\n                        return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.getLanguage = function () {\r\n        return this.language;\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @param {?=} args\r\n     * @param {?=} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translate = function (keys, args, lang) {\r\n        if (args === void 0) { args = null; }\r\n        if (lang === void 0) { lang = this.language; }\r\n        // If the service is not ready, returns the keys.\r\n        if (this.serviceState != ServiceState.isReady)\r\n            return keys;\r\n        if (Array.isArray(keys)) {\r\n            var /** @type {?} */ data = {};\r\n            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\r\n                var key = keys_1[_i];\r\n                data[key] = this.translateKey(key, args, lang);\r\n            }\r\n            return data;\r\n        }\r\n        return this.translateKey(keys, args, lang);\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @param {?=} args\r\n     * @param {?=} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translateAsync = function (keys, args, lang) {\r\n        var _this = this;\r\n        if (lang === void 0) { lang = this.language; }\r\n        return Observable.create(function (observer) {\r\n            var /** @type {?} */ values = _this.translate(keys, args, lang);\r\n            observer.next(values);\r\n            observer.complete();\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translateKey = function (key, args, lang) {\r\n        if (key == null || key == \"\")\r\n            return null;\r\n        // I18n plural.\r\n        if (this.configuration.i18nPlural && /^\\d+\\b/.exec(key)) {\r\n            return this.translateI18nPlural(key, args, lang);\r\n        }\r\n        return this.getValue(key, args, lang);\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.getValue = function (key, args, lang) {\r\n        var /** @type {?} */ path = key;\r\n        var /** @type {?} */ value = null;\r\n        if (this.translationData[lang]) {\r\n            var /** @type {?} */ translation = this.translationData[lang];\r\n            // Composed key.\r\n            var /** @type {?} */ sequences = key.split(this.configuration.keySeparator);\r\n            do {\r\n                key = ((sequences.shift()));\r\n                if (translation[key] && typeof translation[key] === \"object\") {\r\n                    translation = translation[key];\r\n                }\r\n            } while (sequences.length > 0);\r\n            value = translation[key] || translation[this.configuration.missingKey];\r\n        }\r\n        return this.translationHandler.parseValue(path, key, value, args, lang);\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} args\r\n     * @param {?} lang\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translateI18nPlural = function (key, args, lang) {\r\n        var /** @type {?} */ keyText = key.replace(/^\\d+\\b/, \"\");\r\n        keyText = keyText.trim();\r\n        var /** @type {?} */ keyNumber = parseFloat(key);\r\n        key = key.replace(/^\\d+/, this.translateNumber(keyNumber));\r\n        return key.replace(keyText, this.getValue(keyText, args, lang));\r\n    };\r\n    /**\r\n     * @param {?} keyNumber\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.translateNumber = function (keyNumber) {\r\n        if (!isNaN(keyNumber) && IntlAPI.hasNumberFormat()) {\r\n            var /** @type {?} */ localeNumber = new Intl.NumberFormat(this.language).format(keyNumber);\r\n            return localeNumber;\r\n        }\r\n        return keyNumber.toString();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.loadTranslation = function () {\r\n        return __awaiter$2(this, void 0, void 0, function () {\r\n            var language;\r\n            return __generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        language = !this.configuration.localeAsLanguage\r\n                            ? this.locale.getCurrentLanguage()\r\n                            : this.locale.getCurrentLocale();\r\n                        if (!(language != null && language != this.language)) return [3 /*break*/, 3];\r\n                        if (!(this.loadingMode == LoadingMode.Async)) return [3 /*break*/, 2];\r\n                        return [4 /*yield*/, this.getTranslation(language).toPromise()];\r\n                    case 1:\r\n                        _a.sent();\r\n                        return [3 /*break*/, 3];\r\n                    case 2:\r\n                        this.translationData = {};\r\n                        this.translationData[language] = this.configuration.translationData[language];\r\n                        this.releaseTranslation(language);\r\n                        _a.label = 3;\r\n                    case 3: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} language\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.getTranslation = function (language) {\r\n        var _this = this;\r\n        return Observable.create(function (observer) {\r\n            _this.translationData = {};\r\n            _this.serviceState = ServiceState.isLoading;\r\n            var /** @type {?} */ sequencesOfTranslationData = [];\r\n            for (var _i = 0, _a = _this.configuration.providers; _i < _a.length; _i++) {\r\n                var provider = _a[_i];\r\n                sequencesOfTranslationData.push(_this.translationProvider.getTranslation(language, provider.args));\r\n            }\r\n            // Merges all the sequences into a single observable sequence.\r\n            Observable.merge.apply(Observable, sequencesOfTranslationData).subscribe(function (data) {\r\n                _this.addData(data, language);\r\n            }, function (error) {\r\n                // Sends an event for custom actions.\r\n                _this.translationError.emit(error);\r\n                _this.releaseTranslation(language);\r\n                observer.next(null);\r\n                observer.complete();\r\n            }, function () {\r\n                _this.releaseTranslation(language);\r\n                observer.next(null);\r\n                observer.complete();\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} data\r\n     * @param {?} language\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.addData = function (data, language) {\r\n        this.translationData[language] = typeof this.translationData[language] !== \"undefined\"\r\n            ? Object.assign({}, this.translationData[language], data) : data;\r\n    };\r\n    /**\r\n     * @param {?} language\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.releaseTranslation = function (language) {\r\n        this.serviceState = ServiceState.isReady;\r\n        this.language = language;\r\n        this.sendEvents();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslationService.prototype.sendEvents = function () {\r\n        // Sends an event for the components.\r\n        this.translationChanged.emit(this.language);\r\n    };\r\n    return TranslationService;\r\n}());\r\nTranslationService.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationService.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: TranslationConfig, },\r\n    { type: TranslationProvider, },\r\n    { type: TranslationHandler, },\r\n]; };\r\nTranslationService.propDecorators = {\r\n    'translationChanged': [{ type: Output },],\r\n    'translationError': [{ type: Output },],\r\n};\r\n/**\r\n * Provides 'lang' to the translate pipe.\r\n */\r\nvar Translation = (function () {\r\n    /**\r\n     * @param {?=} translation\r\n     * @param {?=} changeDetectorRef\r\n     */\r\n    function Translation(translation, changeDetectorRef) {\r\n        if (translation === void 0) { translation = InjectorRef.get(TranslationService); }\r\n        var _this = this;\r\n        this.translation = translation;\r\n        this.changeDetectorRef = changeDetectorRef;\r\n        this.paramSubscriptions = [];\r\n        this.lang = this.translation.getLanguage();\r\n        // When the language changes, subscribes to the event & updates lang property.\r\n        this.paramSubscriptions.push(this.translation.translationChanged.subscribe(function (language) {\r\n            _this.lang = language;\r\n            // OnPush Change Detection strategy.\r\n            if (_this.changeDetectorRef) {\r\n                _this.changeDetectorRef.markForCheck();\r\n            }\r\n        }));\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    Translation.prototype.cancelParamSubscriptions = function () {\r\n        this.paramSubscriptions.forEach(function (subscription) {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n        });\r\n    };\r\n    return Translation;\r\n}());\r\nTranslation.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslation.ctorParameters = function () { return [\r\n    { type: TranslationService, },\r\n    { type: ChangeDetectorRef, },\r\n]; };\r\n/**\r\n * Provides 'lang' to the translate pipe,\r\n'defaultLocale' & 'currency' to localeDecimal, localePercent & localeCurrency pipes.\r\n */\r\nvar Localization = (function (_super) {\r\n    __extends(Localization, _super);\r\n    /**\r\n     * @param {?=} locale\r\n     * @param {?=} translation\r\n     * @param {?=} changeDetectorRef\r\n     */\r\n    function Localization(locale, translation, changeDetectorRef) {\r\n        if (locale === void 0) { locale = InjectorRef.get(LocaleService); }\r\n        if (translation === void 0) { translation = InjectorRef.get(TranslationService); }\r\n        var _this = _super.call(this, translation, changeDetectorRef) || this;\r\n        _this.locale = locale;\r\n        _this.translation = translation;\r\n        _this.changeDetectorRef = changeDetectorRef;\r\n        _this.defaultLocale = _this.locale.getDefaultLocale();\r\n        // When the default locale changes, subscribes to the event & updates defaultLocale property.\r\n        _this.paramSubscriptions.push(_this.locale.defaultLocaleChanged.subscribe(function (defaultLocale) {\r\n            _this.defaultLocale = defaultLocale;\r\n            // OnPush Change Detection strategy.\r\n            if (_this.changeDetectorRef) {\r\n                _this.changeDetectorRef.markForCheck();\r\n            }\r\n        }));\r\n        _this.currency = _this.locale.getCurrentCurrency();\r\n        // When the currency changes, subscribes to the event & updates currency property.\r\n        _this.paramSubscriptions.push(_this.locale.currencyCodeChanged.subscribe(function (currency) {\r\n            _this.currency = currency;\r\n            // OnPush Change Detection strategy.\r\n            if (_this.changeDetectorRef) {\r\n                _this.changeDetectorRef.markForCheck();\r\n            }\r\n        }));\r\n        return _this;\r\n    }\r\n    return Localization;\r\n}(Translation));\r\nLocalization.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocalization.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: TranslationService, },\r\n    { type: ChangeDetectorRef, },\r\n]; };\r\n/**\r\n * @abstract\r\n */\r\nvar NumberCode = (function () {\r\n    /**\r\n     * @param {?} locale\r\n     */\r\n    function NumberCode(locale) {\r\n        this.locale = locale;\r\n    }\r\n    Object.defineProperty(NumberCode.prototype, \"numberCodes\", {\r\n        /**\r\n         * @return {?}\r\n         */\r\n        get: function () {\r\n            var /** @type {?} */ numberCodes = [];\r\n            for (var /** @type {?} */ num = 0; num <= 9; num++) {\r\n                numberCodes.push(this.toUnicode(num.toString()));\r\n            }\r\n            if (IntlAPI.hasNumberFormat()) {\r\n                for (var /** @type {?} */ num = 0; num <= 9; num++) {\r\n                    numberCodes[num] = this.toUnicode(new Intl.NumberFormat(this.locale.getDefaultLocale()).format(num));\r\n                }\r\n            }\r\n            return numberCodes;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @abstract\r\n     * @param {?} s\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.parse = function (s) { };\r\n    /**\r\n     * @abstract\r\n     * @param {?} digits\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.getRegExp = function (digits) { };\r\n    /**\r\n     * @param {?} pattern\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.toChar = function (pattern) {\r\n        return pattern.replace(/\\\\u[\\dA-F]{4}/gi, function (match) {\r\n            return String.fromCharCode(parseInt(match.replace(/\\\\u/g, \"\"), 16));\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} c\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.toUnicode = function (c) {\r\n        return \"\\\\u\" + this.toHex(c.charCodeAt(0));\r\n    };\r\n    /**\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    NumberCode.prototype.toHex = function (value) {\r\n        var /** @type {?} */ hex = value.toString(16).toUpperCase();\r\n        // With padding.\r\n        hex = \"0000\".substr(0, 4 - hex.length) + hex;\r\n        return hex;\r\n    };\r\n    return NumberCode;\r\n}());\r\nNumberCode.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nNumberCode.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n]; };\r\nvar DecimalCode = (function (_super) {\r\n    __extends(DecimalCode, _super);\r\n    /**\r\n     * @param {?} locale\r\n     */\r\n    function DecimalCode(locale) {\r\n        var _this = _super.call(this, locale) || this;\r\n        _this.locale = locale;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(DecimalCode.prototype, \"decimalCodes\", {\r\n        /**\r\n         * @return {?}\r\n         */\r\n        get: function () {\r\n            var /** @type {?} */ decimalCodes = {\r\n                minusSign: this.toUnicode(\"-\"),\r\n                decimalSeparator: this.toUnicode(\".\"),\r\n                thousandSeparator: this.toUnicode(\",\")\r\n            };\r\n            if (IntlAPI.hasNumberFormat()) {\r\n                var /** @type {?} */ value = -1000.9; // Reference value.\r\n                var /** @type {?} */ localeValue = new Intl.NumberFormat(this.locale.getDefaultLocale()).format(value);\r\n                var /** @type {?} */ unicodeChars = [];\r\n                for (var /** @type {?} */ i = 0; i <= 7; i++) {\r\n                    unicodeChars.push(this.toUnicode(localeValue.charAt(i)));\r\n                }\r\n                // Right to left:\r\n                // checks Unicode characters 'RIGHT-TO-LEFT MARK' (U+200F) & 'Arabic Letter Mark' (U+061C),\r\n                // or the reverse order.\r\n                // Left to right:\r\n                // checks Unicode character 'LEFT-TO-RIGHT MARK' (U+200E).\r\n                if (unicodeChars[0] == \"\\\\u200F\" || unicodeChars[0] == \"\\\\u061C\") {\r\n                    decimalCodes = {\r\n                        minusSign: unicodeChars[1],\r\n                        decimalSeparator: unicodeChars[7],\r\n                        thousandSeparator: unicodeChars[3]\r\n                    };\r\n                }\r\n                else if (unicodeChars[0] == this.toUnicode(new Intl.NumberFormat(this.locale.getDefaultLocale()).format(1))) {\r\n                    decimalCodes = {\r\n                        minusSign: unicodeChars[7],\r\n                        decimalSeparator: unicodeChars[5],\r\n                        thousandSeparator: unicodeChars[1]\r\n                    };\r\n                }\r\n                else if (unicodeChars[0] == \"\\\\u200E\") {\r\n                    decimalCodes = {\r\n                        minusSign: unicodeChars[1],\r\n                        decimalSeparator: unicodeChars[7],\r\n                        thousandSeparator: unicodeChars[3]\r\n                    };\r\n                }\r\n                else {\r\n                    decimalCodes = {\r\n                        minusSign: unicodeChars[0],\r\n                        decimalSeparator: unicodeChars[6],\r\n                        thousandSeparator: unicodeChars[2]\r\n                    };\r\n                }\r\n            }\r\n            return decimalCodes;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @param {?} s\r\n     * @return {?}\r\n     */\r\n    DecimalCode.prototype.parse = function (s) {\r\n        var /** @type {?} */ value = \"\";\r\n        var /** @type {?} */ decimalCodes = this.decimalCodes;\r\n        var /** @type {?} */ characters = s.split(\"\");\r\n        for (var _i = 0, characters_1 = characters; _i < characters_1.length; _i++) {\r\n            var char = characters_1[_i];\r\n            var /** @type {?} */ charCode = this.toUnicode(char);\r\n            var /** @type {?} */ index = this.numberCodes.indexOf(charCode);\r\n            if (index != -1) {\r\n                value += index;\r\n            }\r\n            else if (charCode == decimalCodes.minusSign) {\r\n                value += \"-\";\r\n            }\r\n            else if (charCode == decimalCodes.decimalSeparator) {\r\n                value += \".\";\r\n            }\r\n            else if (charCode == decimalCodes.thousandSeparator) {\r\n                continue;\r\n            }\r\n            else {\r\n                return NaN;\r\n            }\r\n        }\r\n        return parseFloat(value);\r\n    };\r\n    /**\r\n     * @param {?} digits\r\n     * @return {?}\r\n     */\r\n    DecimalCode.prototype.getRegExp = function (digits) {\r\n        var /** @type {?} */ minInt = 1;\r\n        var /** @type {?} */ minFraction = 0;\r\n        var /** @type {?} */ maxFraction = 3;\r\n        if (!!digits) {\r\n            var /** @type {?} */ NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(\\-(\\d+))?)?$/;\r\n            var /** @type {?} */ parts = digits.match(NUMBER_FORMAT_REGEXP);\r\n            if (parts != null) {\r\n                if (parts[1] != null) {\r\n                    minInt = parseInt(parts[1]);\r\n                }\r\n                if (parts[3] != null) {\r\n                    minFraction = parseInt(parts[3]);\r\n                }\r\n                if (parts[5] != null) {\r\n                    maxFraction = parseInt(parts[5]);\r\n                }\r\n            }\r\n        }\r\n        var /** @type {?} */ minusSign = this.decimalCodes.minusSign;\r\n        var /** @type {?} */ zero = this.numberCodes[0];\r\n        var /** @type {?} */ decimalSeparator = this.decimalCodes.decimalSeparator;\r\n        var /** @type {?} */ thousandSeparator = this.decimalCodes.thousandSeparator;\r\n        var /** @type {?} */ nine = this.numberCodes[9];\r\n        // Pattern for 1.2-2 digits: /^-?[0-9,]{1,}\\.[0-9]{2,2}$/\r\n        // Unicode pattern = \"^\\u002d?[\\u0030-\\u0039,\\u002c]{1,}\\\\u002e[\\u0030-\\u0039]{2,2}$\"\r\n        var /** @type {?} */ pattern;\r\n        if (minFraction > 0 && maxFraction > 0) {\r\n            pattern = \"^\"\r\n                + minusSign\r\n                + \"?[\" + zero + \"-\" + nine + thousandSeparator\r\n                + \"]{\" + minInt + \",}\\\\\"\r\n                + decimalSeparator\r\n                + \"[\" + zero + \"-\" + nine\r\n                + \"]{\" + minFraction + \",\" + maxFraction\r\n                + \"}$\";\r\n        }\r\n        else if (minFraction == 0 && maxFraction > 0) {\r\n            // Decimal separator is optional.\r\n            pattern = \"^\"\r\n                + minusSign\r\n                + \"?[\" + zero + \"-\" + nine + thousandSeparator\r\n                + \"]{\" + minInt + \",}\\\\\"\r\n                + decimalSeparator\r\n                + \"?[\" + zero + \"-\" + nine\r\n                + \"]{\" + minFraction + \",\" + maxFraction\r\n                + \"}$\";\r\n        }\r\n        else {\r\n            // Integer number.\r\n            pattern = \"^\"\r\n                + minusSign\r\n                + \"?[\" + zero + \"-\" + nine + thousandSeparator\r\n                + \"]{\" + minInt + \",}$\";\r\n        }\r\n        pattern = this.toChar(pattern);\r\n        var /** @type {?} */ regExp = new RegExp(pattern);\r\n        return regExp;\r\n    };\r\n    return DecimalCode;\r\n}(NumberCode));\r\nDecimalCode.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nDecimalCode.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n]; };\r\nvar LocaleValidation = (function () {\r\n    /**\r\n     * @param {?} decimalCode\r\n     */\r\n    function LocaleValidation(decimalCode) {\r\n        this.decimalCode = decimalCode;\r\n    }\r\n    /**\r\n     * @param {?} s\r\n     * @return {?}\r\n     */\r\n    LocaleValidation.prototype.parseNumber = function (s) {\r\n        if (s == \"\") {\r\n            return null;\r\n        }\r\n        return this.decimalCode.parse(s);\r\n    };\r\n    return LocaleValidation;\r\n}());\r\nLocaleValidation.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleValidation.ctorParameters = function () { return [\r\n    { type: DecimalCode, },\r\n]; };\r\nvar Collator = (function () {\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} translation\r\n     */\r\n    function Collator(locale, translation) {\r\n        this.locale = locale;\r\n        this.translation = translation;\r\n    }\r\n    /**\r\n     * @param {?} key1\r\n     * @param {?} key2\r\n     * @param {?=} extension\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.compare = function (key1, key2, extension, options) {\r\n        if (options === void 0) { options = { usage: 'sort', sensitivity: 'variant' }; }\r\n        if (!IntlAPI.hasCollator()) {\r\n            return 0;\r\n        }\r\n        var /** @type {?} */ value1 = this.translation.translate(key1);\r\n        var /** @type {?} */ value2 = this.translation.translate(key2);\r\n        var /** @type {?} */ locale = this.addExtension(this.locale.getCurrentLocale(), extension);\r\n        return new Intl.Collator(locale, options).compare(value1, value2);\r\n    };\r\n    /**\r\n     * @param {?} list\r\n     * @param {?} keyName\r\n     * @param {?=} order\r\n     * @param {?=} extension\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.sort = function (list, keyName, order, extension, options) {\r\n        var _this = this;\r\n        if (order === void 0) { order = \"asc\"; }\r\n        if (options === void 0) { options = { usage: 'sort', sensitivity: 'variant' }; }\r\n        if (!list || !keyName || !IntlAPI.hasCollator()) {\r\n            return list;\r\n        }\r\n        list.sort(function (key1, key2) {\r\n            return _this.compare(key1[keyName], key2[keyName], extension, options);\r\n        });\r\n        if (order == \"desc\") {\r\n            list.reverse();\r\n        }\r\n        return list;\r\n    };\r\n    /**\r\n     * @param {?} list\r\n     * @param {?} keyName\r\n     * @param {?=} order\r\n     * @param {?=} extension\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.sortAsync = function (list, keyName, order, extension, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = { usage: 'sort', sensitivity: 'variant' }; }\r\n        return Observable.create(function (observer) {\r\n            observer.next(_this.sort(list, keyName, order, extension, options));\r\n            observer.complete();\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} s\r\n     * @param {?} list\r\n     * @param {?} keyNames\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.search = function (s, list, keyNames, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = { usage: 'search' }; }\r\n        if (!list || !keyNames || s == \"\" || s == null || !IntlAPI.hasCollator()) {\r\n            return list;\r\n        }\r\n        var /** @type {?} */ locale = this.locale.getCurrentLocale();\r\n        var /** @type {?} */ collator = new Intl.Collator(locale, options);\r\n        var /** @type {?} */ matches = list.filter(function (key) {\r\n            var /** @type {?} */ found = false;\r\n            for (var /** @type {?} */ i = 0; i < keyNames.length; i++) {\r\n                if (_this.match(key[keyNames[i]], s, collator)) {\r\n                    found = true;\r\n                    break;\r\n                }\r\n            }\r\n            return found;\r\n        });\r\n        return matches;\r\n    };\r\n    /**\r\n     * @param {?} s\r\n     * @param {?} list\r\n     * @param {?} keyNames\r\n     * @param {?=} options\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.searchAsync = function (s, list, keyNames, options) {\r\n        var _this = this;\r\n        if (options === void 0) { options = { usage: 'search' }; }\r\n        return Observable.create(function (observer) {\r\n            observer.next(_this.search(s, list, keyNames, options));\r\n            observer.complete();\r\n        });\r\n    };\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?=} extension\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.addExtension = function (locale, extension) {\r\n        if (!!extension) {\r\n            locale = locale + \"-u-\" + extension;\r\n        }\r\n        return locale;\r\n    };\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} s\r\n     * @param {?} collator\r\n     * @return {?}\r\n     */\r\n    Collator.prototype.match = function (key, s, collator) {\r\n        var /** @type {?} */ value = this.translation.translate(key);\r\n        var /** @type {?} */ valueLength = value.length;\r\n        var /** @type {?} */ sLength = s.length;\r\n        if (sLength > valueLength) {\r\n            return false;\r\n        }\r\n        if (sLength == valueLength) {\r\n            return collator.compare(value, s) == 0;\r\n        }\r\n        var /** @type {?} */ found = false;\r\n        for (var /** @type {?} */ i = 0; i < valueLength - (sLength - 1); i++) {\r\n            var /** @type {?} */ str = value.substr(i, sLength);\r\n            if (collator.compare(str, s) == 0) {\r\n                found = true;\r\n                break;\r\n            }\r\n        }\r\n        return found;\r\n    };\r\n    return Collator;\r\n}());\r\nCollator.decorators = [\r\n    { type: Injectable },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nCollator.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: TranslationService, },\r\n]; };\r\n/**\r\n * Property decorator for components to provide the parameter to the translate pipe.\r\n * @return {?}\r\n */\r\nfunction Language() {\r\n    /**\r\n     * @param {?} target\r\n     * @param {?=} propertyKey\r\n     * @return {?}\r\n     */\r\n    function DecoratorFactory(target, propertyKey) {\r\n        var /** @type {?} */ subscription;\r\n        var /** @type {?} */ targetNgOnInit = target.ngOnInit;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnInit() {\r\n            var _this = this;\r\n            var /** @type {?} */ translation = InjectorRef.get(TranslationService);\r\n            if (typeof propertyKey !== \"undefined\") {\r\n                this[propertyKey] = translation.getLanguage();\r\n                // When the language changes, subscribes to the event & updates language property.\r\n                subscription = translation.translationChanged.subscribe(function (language) {\r\n                    _this[propertyKey] = language;\r\n                });\r\n            }\r\n            if (targetNgOnInit) {\r\n                targetNgOnInit.apply(this);\r\n            }\r\n        }\r\n        target.ngOnInit = ngOnInit;\r\n        var /** @type {?} */ targetNgOnDestroy = target.ngOnDestroy;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnDestroy() {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n            if (targetNgOnDestroy) {\r\n                targetNgOnDestroy.apply(this);\r\n            }\r\n        }\r\n        target.ngOnDestroy = ngOnDestroy;\r\n        if (typeof propertyKey !== \"undefined\") {\r\n            Object.defineProperty(target, propertyKey, {\r\n                writable: true,\r\n                value: undefined\r\n            });\r\n        }\r\n    }\r\n    return DecoratorFactory;\r\n}\r\n/**\r\n * Property decorator for components to provide the parameter\r\nto localeDecimal, localePercent & localeCurrency pipes.\r\n * @return {?}\r\n */\r\nfunction DefaultLocale$1() {\r\n    /**\r\n     * @param {?} target\r\n     * @param {?=} propertyKey\r\n     * @return {?}\r\n     */\r\n    function DecoratorFactory(target, propertyKey) {\r\n        var /** @type {?} */ subscription;\r\n        var /** @type {?} */ targetNgOnInit = target.ngOnInit;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnInit() {\r\n            var _this = this;\r\n            var /** @type {?} */ locale = InjectorRef.get(LocaleService);\r\n            if (typeof propertyKey !== \"undefined\") {\r\n                this[propertyKey] = locale.getDefaultLocale();\r\n                // When the default locale changes, subscribes to the event & updates defaultLocale property.\r\n                subscription = locale.defaultLocaleChanged.subscribe(function (defaultLocale) {\r\n                    _this[propertyKey] = defaultLocale;\r\n                });\r\n            }\r\n            if (targetNgOnInit) {\r\n                targetNgOnInit.apply(this);\r\n            }\r\n        }\r\n        target.ngOnInit = ngOnInit;\r\n        var /** @type {?} */ targetNgOnDestroy = target.ngOnDestroy;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnDestroy() {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n            if (targetNgOnDestroy) {\r\n                targetNgOnDestroy.apply(this);\r\n            }\r\n        }\r\n        target.ngOnDestroy = ngOnDestroy;\r\n        if (typeof propertyKey !== \"undefined\") {\r\n            Object.defineProperty(target, propertyKey, {\r\n                writable: true,\r\n                value: undefined\r\n            });\r\n        }\r\n    }\r\n    return DecoratorFactory;\r\n}\r\n/**\r\n * Property decorator for components to provide the parameter to the localeCurrency pipe.\r\n * @return {?}\r\n */\r\nfunction Currency() {\r\n    /**\r\n     * @param {?} target\r\n     * @param {?=} propertyKey\r\n     * @return {?}\r\n     */\r\n    function DecoratorFactory(target, propertyKey) {\r\n        var /** @type {?} */ subscription;\r\n        var /** @type {?} */ targetNgOnInit = target.ngOnInit;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnInit() {\r\n            var _this = this;\r\n            var /** @type {?} */ locale = InjectorRef.get(LocaleService);\r\n            if (typeof propertyKey !== \"undefined\") {\r\n                this[propertyKey] = locale.getCurrentCurrency();\r\n                // When the currency changes, subscribes to the event & updates currency property.\r\n                subscription = locale.currencyCodeChanged.subscribe(function (currency) {\r\n                    _this[propertyKey] = currency;\r\n                });\r\n            }\r\n            if (targetNgOnInit) {\r\n                targetNgOnInit.apply(this);\r\n            }\r\n        }\r\n        target.ngOnInit = ngOnInit;\r\n        var /** @type {?} */ targetNgOnDestroy = target.ngOnDestroy;\r\n        /**\r\n         * @this {?}\r\n         * @return {?}\r\n         */\r\n        function ngOnDestroy() {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n            if (targetNgOnDestroy) {\r\n                targetNgOnDestroy.apply(this);\r\n            }\r\n        }\r\n        target.ngOnDestroy = ngOnDestroy;\r\n        if (typeof propertyKey !== \"undefined\") {\r\n            Object.defineProperty(target, propertyKey, {\r\n                writable: true,\r\n                value: undefined\r\n            });\r\n        }\r\n    }\r\n    return DecoratorFactory;\r\n}\r\nvar TranslatePipe = (function () {\r\n    /**\r\n     * @param {?} translation\r\n     */\r\n    function TranslatePipe(translation) {\r\n        this.translation = translation;\r\n    }\r\n    /**\r\n     * @param {?} key\r\n     * @param {?} lang\r\n     * @param {?=} args\r\n     * @return {?}\r\n     */\r\n    TranslatePipe.prototype.transform = function (key, lang, args) {\r\n        return this.translation.translate(key, args, lang);\r\n    };\r\n    return TranslatePipe;\r\n}());\r\nTranslatePipe.decorators = [\r\n    { type: Pipe, args: [{\r\n                name: 'translate',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslatePipe.ctorParameters = function () { return [\r\n    { type: TranslationService, },\r\n]; };\r\nvar LocaleDatePipe = (function () {\r\n    function LocaleDatePipe() {\r\n    }\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} defaultLocale\r\n     * @param {?=} pattern\r\n     * @return {?}\r\n     */\r\n    LocaleDatePipe.prototype.transform = function (value, defaultLocale, pattern) {\r\n        if (pattern === void 0) { pattern = 'mediumDate'; }\r\n        if (typeof defaultLocale === \"undefined\")\r\n            return null;\r\n        if (IntlAPI.hasDateTimeFormat()) {\r\n            var /** @type {?} */ localeDate = new DatePipe(defaultLocale);\r\n            return localeDate.transform(value, pattern);\r\n        }\r\n        // Returns the date without localization.\r\n        return value;\r\n    };\r\n    return LocaleDatePipe;\r\n}());\r\nLocaleDatePipe.decorators = [\r\n    { type: Pipe, args: [{\r\n                name: 'localeDate',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleDatePipe.ctorParameters = function () { return []; };\r\nvar LocaleDecimalPipe = (function () {\r\n    function LocaleDecimalPipe() {\r\n    }\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} defaultLocale\r\n     * @param {?=} digits\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalPipe.prototype.transform = function (value, defaultLocale, digits) {\r\n        if (typeof defaultLocale === \"undefined\")\r\n            return null;\r\n        if (IntlAPI.hasNumberFormat()) {\r\n            var /** @type {?} */ localeDecimal = new DecimalPipe(defaultLocale);\r\n            return localeDecimal.transform(value, digits);\r\n        }\r\n        // Returns the number without localization.\r\n        return value;\r\n    };\r\n    return LocaleDecimalPipe;\r\n}());\r\nLocaleDecimalPipe.decorators = [\r\n    { type: Pipe, args: [{\r\n                name: 'localeDecimal',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleDecimalPipe.ctorParameters = function () { return []; };\r\nvar LocalePercentPipe = (function () {\r\n    function LocalePercentPipe() {\r\n    }\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} defaultLocale\r\n     * @param {?=} digits\r\n     * @return {?}\r\n     */\r\n    LocalePercentPipe.prototype.transform = function (value, defaultLocale, digits) {\r\n        if (typeof defaultLocale === \"undefined\")\r\n            return null;\r\n        if (IntlAPI.hasNumberFormat()) {\r\n            var /** @type {?} */ localePercent = new PercentPipe(defaultLocale);\r\n            return localePercent.transform(value, digits);\r\n        }\r\n        // Returns the number without localization.\r\n        return value;\r\n    };\r\n    return LocalePercentPipe;\r\n}());\r\nLocalePercentPipe.decorators = [\r\n    { type: Pipe, args: [{\r\n                name: 'localePercent',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocalePercentPipe.ctorParameters = function () { return []; };\r\nvar LocaleCurrencyPipe = (function () {\r\n    function LocaleCurrencyPipe() {\r\n    }\r\n    /**\r\n     * @param {?} value\r\n     * @param {?} defaultLocale\r\n     * @param {?} currency\r\n     * @param {?=} symbolDisplay\r\n     * @param {?=} digits\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyPipe.prototype.transform = function (value, defaultLocale, currency, symbolDisplay, digits) {\r\n        if (symbolDisplay === void 0) { symbolDisplay = false; }\r\n        if (typeof defaultLocale === \"undefined\" || typeof currency === \"undefined\")\r\n            return null;\r\n        if (IntlAPI.hasNumberFormat()) {\r\n            var /** @type {?} */ localeCurrency = new CurrencyPipe(defaultLocale);\r\n            return localeCurrency.transform(value, currency, symbolDisplay, digits);\r\n        }\r\n        // Returns the number & currency without localization.\r\n        return value + \" \" + currency;\r\n    };\r\n    return LocaleCurrencyPipe;\r\n}());\r\nLocaleCurrencyPipe.decorators = [\r\n    { type: Pipe, args: [{\r\n                name: 'localeCurrency',\r\n                pure: true\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleCurrencyPipe.ctorParameters = function () { return []; };\r\n/**\r\n * Breadth First Search (BFS) algorithm for traversing & searching tree data structure of DOM\r\nexplores the neighbor nodes first, before moving to the next level neighbors.\r\nTime complexity: between O(1) and O(|V|^2).\r\n */\r\nvar BFS = (function () {\r\n    function BFS() {\r\n    }\r\n    /**\r\n     * Target node is a non empty text node.\r\n     * @param {?} rootNode\r\n     * @return {?}\r\n     */\r\n    BFS.getTargetNode = function (rootNode) {\r\n        return this.walk(rootNode);\r\n    };\r\n    /**\r\n     * @param {?} rootNode\r\n     * @return {?}\r\n     */\r\n    BFS.walk = function (rootNode) {\r\n        var /** @type {?} */ queue = [];\r\n        var /** @type {?} */ iNode;\r\n        var /** @type {?} */ depth = 0;\r\n        var /** @type {?} */ nodeToDepthIncrease = 1;\r\n        queue.push(rootNode);\r\n        while (queue.length > 0 && depth <= this.MAX_DEPTH) {\r\n            iNode = queue.shift();\r\n            if (this.isTargetNode(iNode)) {\r\n                return iNode;\r\n            }\r\n            if (depth < this.MAX_DEPTH && iNode.childNodes != null) {\r\n                for (var _i = 0, _a = iNode.childNodes; _i < _a.length; _i++) {\r\n                    var child = _a[_i];\r\n                    if (this.isValidNode(child)) {\r\n                        queue.push(child);\r\n                    }\r\n                }\r\n            }\r\n            if (--nodeToDepthIncrease == 0) {\r\n                depth++;\r\n                nodeToDepthIncrease = queue.length;\r\n            }\r\n        }\r\n        return rootNode;\r\n    };\r\n    /**\r\n     * @param {?} node\r\n     * @return {?}\r\n     */\r\n    BFS.isTargetNode = function (node) {\r\n        return typeof node !== \"undefined\" &&\r\n            node.nodeType == 3 &&\r\n            node.nodeValue != null &&\r\n            node.nodeValue.trim() != \"\";\r\n    };\r\n    /**\r\n     * A valid node is not marked for translation.\r\n     * @param {?} node\r\n     * @return {?}\r\n     */\r\n    BFS.isValidNode = function (node) {\r\n        if (typeof node !== \"undefined\" && node.nodeType == 1 && node.attributes) {\r\n            for (var _i = 0, _a = node.attributes; _i < _a.length; _i++) {\r\n                var attr = _a[_i];\r\n                if (this.SELECTOR.test(attr.name))\r\n                    return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    return BFS;\r\n}());\r\nBFS.SELECTOR = /^l10n|translate|locale/;\r\nBFS.MAX_DEPTH = 10;\r\n/**\r\n * @abstract\r\n */\r\nvar BaseDirective = (function () {\r\n    /**\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function BaseDirective(el, renderer) {\r\n        this.el = el;\r\n        this.renderer = renderer;\r\n        this.attributes = [];\r\n        this.subscriptions = [];\r\n        this.TEXT_MUTATION_CONFIG = { subtree: true, characterData: true };\r\n        this.SELECTOR = /^l10n-/;\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.ngAfterViewInit = function () {\r\n        if (this.el && this.el.nativeElement) {\r\n            this.element = this.el.nativeElement;\r\n            this.renderNode = BFS.getTargetNode(this.element);\r\n            this.getKey();\r\n            this.getAttributes();\r\n            this.addTextListener();\r\n            this.setup();\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} changes\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.ngOnChanges = function (changes) {\r\n        if (!!this.key) {\r\n            if (this.nodeValue == null || this.nodeValue == \"\") {\r\n                if (!!this.valueAttribute) {\r\n                    this.key = this.valueAttribute;\r\n                }\r\n                else if (!!this.innerHTMLProperty) {\r\n                    this.key = this.innerHTMLProperty;\r\n                }\r\n            }\r\n            this.replaceText();\r\n        }\r\n        if (this.attributes.length > 0) {\r\n            this.replaceAttributes();\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.ngOnDestroy = function () {\r\n        this.removeTextListener();\r\n        this.cancelSubscriptions();\r\n    };\r\n    /**\r\n     * @abstract\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.setup = function () { };\r\n    /**\r\n     * @abstract\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.replace = function () { };\r\n    /**\r\n     * @abstract\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.replaceText = function () { };\r\n    /**\r\n     * @abstract\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.replaceAttributes = function () { };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getAttributesData = function () {\r\n        var /** @type {?} */ keys = this.getAttributesKeys();\r\n        var /** @type {?} */ data = {};\r\n        for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\r\n            var key = keys_2[_i];\r\n            data[key] = this.getValues(key);\r\n        }\r\n        return data;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getAttributesKeys = function () {\r\n        return this.attributes.map(function (attr) { return attr.key; });\r\n    };\r\n    /**\r\n     * @abstract\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getValues = function (keys) { };\r\n    /**\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.setText = function (value) {\r\n        if (!!value) {\r\n            if (!!this.nodeValue && !!this.key) {\r\n                this.removeTextListener();\r\n                this.renderer.setValue(this.renderNode, this.nodeValue.replace(this.key, value));\r\n                this.addTextListener();\r\n            }\r\n            else if (!!this.valueAttribute) {\r\n                this.renderer.setAttribute(this.element, \"value\", value);\r\n            }\r\n            else if (!!this.innerHTMLProperty) {\r\n                this.renderer.setProperty(this.element, \"innerHTML\", value);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} data\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.setAttributes = function (data) {\r\n        for (var _i = 0, _a = this.attributes; _i < _a.length; _i++) {\r\n            var attr = _a[_i];\r\n            this.renderer.setAttribute(this.element, attr.name, data[attr.key]);\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.addTextListener = function () {\r\n        var _this = this;\r\n        if (typeof MutationObserver !== \"undefined\") {\r\n            this.textObserver = new MutationObserver(function (mutations) {\r\n                _this.renderNode = BFS.getTargetNode(_this.element);\r\n                _this.getKey();\r\n                _this.replaceText();\r\n            });\r\n            this.textObserver.observe(this.renderNode, this.TEXT_MUTATION_CONFIG);\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.removeTextListener = function () {\r\n        if (typeof this.textObserver !== \"undefined\") {\r\n            this.textObserver.disconnect();\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getText = function () {\r\n        this.nodeValue = this.renderNode != null ? (this.renderNode.nodeValue) : \"\";\r\n        return !!this.nodeValue ? this.nodeValue.trim() : \"\";\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getKey = function () {\r\n        if (this.element.childNodes.length > 0) {\r\n            this.key = this.getText();\r\n        }\r\n        else if (!!this.valueAttribute) {\r\n            this.key = this.valueAttribute;\r\n        }\r\n        else if (!!this.innerHTMLProperty) {\r\n            this.key = this.innerHTMLProperty;\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.getAttributes = function () {\r\n        if (this.element.attributes) {\r\n            for (var _i = 0, _a = this.element.attributes; _i < _a.length; _i++) {\r\n                var attr = _a[_i];\r\n                if (this.SELECTOR.test(attr.name)) {\r\n                    var /** @type {?} */ name = attr.name.substr(5);\r\n                    for (var _b = 0, _c = this.element.attributes; _b < _c.length; _b++) {\r\n                        var targetAttr = _c[_b];\r\n                        if (new RegExp(\"^\" + name + \"$\").test(targetAttr.name)) {\r\n                            this.attributes.push({ name: name, key: targetAttr.value });\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    BaseDirective.prototype.cancelSubscriptions = function () {\r\n        this.subscriptions.forEach(function (subscription) {\r\n            if (typeof subscription !== \"undefined\") {\r\n                subscription.unsubscribe();\r\n            }\r\n        });\r\n    };\r\n    return BaseDirective;\r\n}());\r\nBaseDirective.propDecorators = {\r\n    'valueAttribute': [{ type: Input, args: ['value',] },],\r\n    'innerHTMLProperty': [{ type: Input, args: ['innerHTML',] },],\r\n};\r\nvar TranslateDirective = (function (_super) {\r\n    __extends(TranslateDirective, _super);\r\n    /**\r\n     * @param {?} translation\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function TranslateDirective(translation, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.translation = translation;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        return _this;\r\n    }\r\n    Object.defineProperty(TranslateDirective.prototype, \"l10nTranslate\", {\r\n        /**\r\n         * @param {?} params\r\n         * @return {?}\r\n         */\r\n        set: function (params) {\r\n            this.params = params;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(TranslateDirective.prototype, \"translate\", {\r\n        /**\r\n         * @param {?} params\r\n         * @return {?}\r\n         */\r\n        set: function (params) {\r\n            this.params = params;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.translation.translationChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            var /** @type {?} */ keys = this.getAttributesKeys();\r\n            this.setAttributes(this.getValues(keys));\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    TranslateDirective.prototype.getValues = function (keys) {\r\n        return this.translation.translate(keys, this.params);\r\n    };\r\n    return TranslateDirective;\r\n}(BaseDirective));\r\nTranslateDirective.decorators = [\r\n    { type: Directive, args: [{\r\n                selector: '[l10nTranslate],[translate]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslateDirective.ctorParameters = function () { return [\r\n    { type: TranslationService, },\r\n    { type: ElementRef, },\r\n    { type: Renderer2, },\r\n]; };\r\nTranslateDirective.propDecorators = {\r\n    'l10nTranslate': [{ type: Input },],\r\n    'translate': [{ type: Input },],\r\n};\r\nvar LocaleDateDirective = (function (_super) {\r\n    __extends(LocaleDateDirective, _super);\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function LocaleDateDirective(locale, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.locale = locale;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        _this.defaultPattern = 'mediumDate';\r\n        _this.localeDatePipe = new LocaleDatePipe();\r\n        return _this;\r\n    }\r\n    Object.defineProperty(LocaleDateDirective.prototype, \"l10nDate\", {\r\n        /**\r\n         * @param {?} pattern\r\n         * @return {?}\r\n         */\r\n        set: function (pattern) {\r\n            this.pattern = pattern;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocaleDateDirective.prototype, \"localeDate\", {\r\n        /**\r\n         * @param {?} pattern\r\n         * @return {?}\r\n         */\r\n        set: function (pattern) {\r\n            this.pattern = pattern;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.locale.defaultLocaleChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            this.setAttributes(this.getAttributesData());\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    LocaleDateDirective.prototype.getValues = function (keys) {\r\n        return this.localeDatePipe.transform(keys, this.locale.getDefaultLocale(), this.pattern || this.defaultPattern);\r\n    };\r\n    return LocaleDateDirective;\r\n}(BaseDirective));\r\nLocaleDateDirective.decorators = [\r\n    { type: Directive, args: [{\r\n                selector: '[l10nDate],[localeDate]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleDateDirective.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: ElementRef, },\r\n    { type: Renderer2, },\r\n]; };\r\nLocaleDateDirective.propDecorators = {\r\n    'l10nDate': [{ type: Input },],\r\n    'localeDate': [{ type: Input },],\r\n};\r\nvar LocaleDecimalDirective = (function (_super) {\r\n    __extends(LocaleDecimalDirective, _super);\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function LocaleDecimalDirective(locale, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.locale = locale;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        _this.localeDecimalPipe = new LocaleDecimalPipe();\r\n        return _this;\r\n    }\r\n    Object.defineProperty(LocaleDecimalDirective.prototype, \"l10nDecimal\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocaleDecimalDirective.prototype, \"localeDecimal\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.locale.defaultLocaleChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            this.setAttributes(this.getAttributesData());\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    LocaleDecimalDirective.prototype.getValues = function (keys) {\r\n        return this.localeDecimalPipe.transform(keys, this.locale.getDefaultLocale(), this.digits);\r\n    };\r\n    return LocaleDecimalDirective;\r\n}(BaseDirective));\r\nLocaleDecimalDirective.decorators = [\r\n    { type: Directive, args: [{\r\n                selector: '[l10nDecimal],[localeDecimal]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleDecimalDirective.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: ElementRef, },\r\n    { type: Renderer2, },\r\n]; };\r\nLocaleDecimalDirective.propDecorators = {\r\n    'l10nDecimal': [{ type: Input },],\r\n    'localeDecimal': [{ type: Input },],\r\n};\r\nvar LocalePercentDirective = (function (_super) {\r\n    __extends(LocalePercentDirective, _super);\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function LocalePercentDirective(locale, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.locale = locale;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        _this.localePercentPipe = new LocalePercentPipe();\r\n        return _this;\r\n    }\r\n    Object.defineProperty(LocalePercentDirective.prototype, \"l10nPercent\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocalePercentDirective.prototype, \"localePercent\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.locale.defaultLocaleChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            this.setAttributes(this.getAttributesData());\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    LocalePercentDirective.prototype.getValues = function (keys) {\r\n        return this.localePercentPipe.transform(keys, this.locale.getDefaultLocale(), this.digits);\r\n    };\r\n    return LocalePercentDirective;\r\n}(BaseDirective));\r\nLocalePercentDirective.decorators = [\r\n    { type: Directive, args: [{\r\n                selector: '[l10nPercent],[localePercent]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocalePercentDirective.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: ElementRef, },\r\n    { type: Renderer2, },\r\n]; };\r\nLocalePercentDirective.propDecorators = {\r\n    'l10nPercent': [{ type: Input },],\r\n    'localePercent': [{ type: Input },],\r\n};\r\nvar LocaleCurrencyDirective = (function (_super) {\r\n    __extends(LocaleCurrencyDirective, _super);\r\n    /**\r\n     * @param {?} locale\r\n     * @param {?} el\r\n     * @param {?} renderer\r\n     */\r\n    function LocaleCurrencyDirective(locale, el, renderer) {\r\n        var _this = _super.call(this, el, renderer) || this;\r\n        _this.locale = locale;\r\n        _this.el = el;\r\n        _this.renderer = renderer;\r\n        _this.localeCurrencyPipe = new LocaleCurrencyPipe();\r\n        return _this;\r\n    }\r\n    Object.defineProperty(LocaleCurrencyDirective.prototype, \"l10nCurrency\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocaleCurrencyDirective.prototype, \"localeCurrency\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.setup = function () {\r\n        var _this = this;\r\n        this.replace();\r\n        this.subscriptions.push(this.locale.defaultLocaleChanged.subscribe(function () { _this.replace(); }));\r\n        this.subscriptions.push(this.locale.currencyCodeChanged.subscribe(function () { _this.replace(); }));\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.replace = function () {\r\n        this.replaceText();\r\n        this.replaceAttributes();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.replaceText = function () {\r\n        if (!!this.key) {\r\n            this.setText(this.getValues(this.key));\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.replaceAttributes = function () {\r\n        if (this.attributes.length > 0) {\r\n            this.setAttributes(this.getAttributesData());\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} keys\r\n     * @return {?}\r\n     */\r\n    LocaleCurrencyDirective.prototype.getValues = function (keys) {\r\n        return this.localeCurrencyPipe.transform(keys, this.locale.getDefaultLocale(), this.locale.getCurrentCurrency(), this.symbol, this.digits);\r\n    };\r\n    return LocaleCurrencyDirective;\r\n}(BaseDirective));\r\nLocaleCurrencyDirective.decorators = [\r\n    { type: Directive, args: [{\r\n                selector: '[l10nCurrency],[localeCurrency]'\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleCurrencyDirective.ctorParameters = function () { return [\r\n    { type: LocaleService, },\r\n    { type: ElementRef, },\r\n    { type: Renderer2, },\r\n]; };\r\nLocaleCurrencyDirective.propDecorators = {\r\n    'l10nCurrency': [{ type: Input },],\r\n    'localeCurrency': [{ type: Input },],\r\n    'symbol': [{ type: Input },],\r\n};\r\n/**\r\n * Function that takes a control and returns either null when it’s valid, or an error object if it’s not.\r\n\\@param digits The format of the number\r\n\\@param MIN_VALUE The minimum value for the number\r\n\\@param MAX_VALUE The maximum value for the number\r\n\\@return An error object: 'format', 'minValue' or 'maxValue'; null in case the value is valid\r\n * @param {?} digits\r\n * @param {?=} MIN_VALUE\r\n * @param {?=} MAX_VALUE\r\n * @return {?}\r\n */\r\nfunction validateLocaleNumber(digits, MIN_VALUE, MAX_VALUE) {\r\n    if (MIN_VALUE === void 0) { MIN_VALUE = Number.MIN_VALUE; }\r\n    if (MAX_VALUE === void 0) { MAX_VALUE = Number.MAX_VALUE; }\r\n    var /** @type {?} */ locale = InjectorRef.get(LocaleService);\r\n    var /** @type {?} */ decimalCode = InjectorRef.get(DecimalCode);\r\n    var /** @type {?} */ defaultLocale;\r\n    var /** @type {?} */ NUMBER_REGEXP;\r\n    return function (formControl) {\r\n        if (formControl.value == null || formControl.value == \"\")\r\n            return null;\r\n        if (defaultLocale != locale.getDefaultLocale()) {\r\n            NUMBER_REGEXP = decimalCode.getRegExp(digits);\r\n            defaultLocale = locale.getDefaultLocale();\r\n        }\r\n        if (NUMBER_REGEXP.test(formControl.value)) {\r\n            var /** @type {?} */ parsedValue = decimalCode.parse(formControl.value);\r\n            if (parsedValue != null && parsedValue < MIN_VALUE) {\r\n                return {\r\n                    minValue: {\r\n                        valid: false\r\n                    }\r\n                };\r\n            }\r\n            else if (parsedValue != null && parsedValue > MAX_VALUE) {\r\n                return {\r\n                    maxValue: {\r\n                        valid: false\r\n                    }\r\n                };\r\n            }\r\n            return null; // The number is valid.\r\n        }\r\n        else {\r\n            return {\r\n                format: {\r\n                    valid: false\r\n                }\r\n            };\r\n        }\r\n    };\r\n}\r\nvar LocaleNumberValidatorDirective = (function () {\r\n    function LocaleNumberValidatorDirective() {\r\n        this.MIN_VALUE = Number.MIN_VALUE;\r\n        this.MAX_VALUE = Number.MAX_VALUE;\r\n    }\r\n    Object.defineProperty(LocaleNumberValidatorDirective.prototype, \"l10nValidateNumber\", {\r\n        /**\r\n         * Format: {minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}.\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(LocaleNumberValidatorDirective.prototype, \"validateLocaleNumber\", {\r\n        /**\r\n         * @param {?} digits\r\n         * @return {?}\r\n         */\r\n        set: function (digits) {\r\n            this.digits = digits;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {?}\r\n     */\r\n    LocaleNumberValidatorDirective.prototype.ngOnInit = function () {\r\n        this.validator = validateLocaleNumber(this.digits, this.minValue || this.MIN_VALUE, this.maxValue || this.MAX_VALUE);\r\n    };\r\n    /**\r\n     * @param {?} formControl\r\n     * @return {?}\r\n     */\r\n    LocaleNumberValidatorDirective.prototype.validate = function (formControl) {\r\n        return this.validator(formControl);\r\n    };\r\n    return LocaleNumberValidatorDirective;\r\n}());\r\nLocaleNumberValidatorDirective.decorators = [\r\n    { type: Directive, args: [{\r\n                selector: '[l10nValidateNumber][ngModel],[l10nValidateNumber][formControl], \\\r\n        [validateLocaleNumber][ngModel],[validateLocaleNumber][formControl]',\r\n                providers: [\r\n                    { provide: NG_VALIDATORS, useExisting: forwardRef(function () { return LocaleNumberValidatorDirective; }), multi: true }\r\n                ]\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleNumberValidatorDirective.ctorParameters = function () { return []; };\r\nLocaleNumberValidatorDirective.propDecorators = {\r\n    'l10nValidateNumber': [{ type: Input },],\r\n    'validateLocaleNumber': [{ type: Input },],\r\n    'minValue': [{ type: Input },],\r\n    'maxValue': [{ type: Input },],\r\n};\r\n/**\r\n * Provides dependencies, pipes & directives for translating messages.\r\n */\r\nvar TranslationModule = (function () {\r\n    /**\r\n     * @param {?} injector\r\n     */\r\n    function TranslationModule(injector) {\r\n        this.injector = injector;\r\n        // Creates the instance of the InjectorRef, so that module dependencies are available.\r\n    }\r\n    /**\r\n     * Use in AppModule: new instances of LocaleService & TranslationService.\r\n     * @param {?=} token\r\n     * @return {?}\r\n     */\r\n    TranslationModule.forRoot = function (token) {\r\n        if (token === void 0) { token = {}; }\r\n        return {\r\n            ngModule: TranslationModule,\r\n            providers: [\r\n                InjectorRef,\r\n                LocaleConfig,\r\n                LocaleService,\r\n                {\r\n                    provide: LocaleStorage,\r\n                    useClass: token.localeStorage || BrowserStorage\r\n                },\r\n                TranslationConfig,\r\n                TranslationService,\r\n                {\r\n                    provide: TranslationProvider,\r\n                    useClass: token.translationProvider || HttpTranslationProvider\r\n                },\r\n                {\r\n                    provide: TranslationHandler,\r\n                    useClass: token.translationHandler || DefaultTranslationHandler\r\n                }\r\n            ]\r\n        };\r\n    };\r\n    /**\r\n     * Use in feature modules with lazy loading: new instance of TranslationService.\r\n     * @param {?=} token\r\n     * @return {?}\r\n     */\r\n    TranslationModule.forChild = function (token) {\r\n        if (token === void 0) { token = {}; }\r\n        return {\r\n            ngModule: TranslationModule,\r\n            providers: [\r\n                InjectorRef,\r\n                TranslationConfig,\r\n                TranslationService,\r\n                {\r\n                    provide: TranslationProvider,\r\n                    useClass: token.translationProvider || HttpTranslationProvider\r\n                },\r\n                {\r\n                    provide: TranslationHandler,\r\n                    useClass: token.translationHandler || DefaultTranslationHandler\r\n                }\r\n            ]\r\n        };\r\n    };\r\n    return TranslationModule;\r\n}());\r\nTranslationModule.decorators = [\r\n    { type: NgModule, args: [{\r\n                declarations: [\r\n                    TranslatePipe,\r\n                    TranslateDirective\r\n                ],\r\n                exports: [\r\n                    TranslatePipe,\r\n                    TranslateDirective\r\n                ]\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nTranslationModule.ctorParameters = function () { return [\r\n    { type: InjectorRef, },\r\n]; };\r\n/**\r\n * Provides dependencies, pipes & directives for translating messages, dates & numbers.\r\n */\r\nvar LocalizationModule = (function () {\r\n    /**\r\n     * @param {?} injector\r\n     */\r\n    function LocalizationModule(injector) {\r\n        this.injector = injector;\r\n        // Creates the instance of the InjectorRef, so that module dependencies are available.\r\n    }\r\n    /**\r\n     * Use in AppModule: new instances of LocaleService & TranslationService.\r\n     * @param {?=} token\r\n     * @return {?}\r\n     */\r\n    LocalizationModule.forRoot = function (token) {\r\n        if (token === void 0) { token = {}; }\r\n        return {\r\n            ngModule: LocalizationModule,\r\n            providers: [\r\n                InjectorRef,\r\n                LocaleConfig,\r\n                LocaleService,\r\n                {\r\n                    provide: LocaleStorage,\r\n                    useClass: token.localeStorage || BrowserStorage\r\n                },\r\n                TranslationConfig,\r\n                TranslationService,\r\n                {\r\n                    provide: TranslationProvider,\r\n                    useClass: token.translationProvider || HttpTranslationProvider\r\n                },\r\n                {\r\n                    provide: TranslationHandler,\r\n                    useClass: token.translationHandler || DefaultTranslationHandler\r\n                }\r\n            ]\r\n        };\r\n    };\r\n    /**\r\n     * Use in feature modules with lazy loading: new instance of TranslationService.\r\n     * @param {?=} token\r\n     * @return {?}\r\n     */\r\n    LocalizationModule.forChild = function (token) {\r\n        if (token === void 0) { token = {}; }\r\n        return {\r\n            ngModule: LocalizationModule,\r\n            providers: [\r\n                InjectorRef,\r\n                TranslationConfig,\r\n                TranslationService,\r\n                {\r\n                    provide: TranslationProvider,\r\n                    useClass: token.translationProvider || HttpTranslationProvider\r\n                },\r\n                {\r\n                    provide: TranslationHandler,\r\n                    useClass: token.translationHandler || DefaultTranslationHandler\r\n                }\r\n            ]\r\n        };\r\n    };\r\n    return LocalizationModule;\r\n}());\r\nLocalizationModule.decorators = [\r\n    { type: NgModule, args: [{\r\n                declarations: [\r\n                    LocaleDatePipe,\r\n                    LocaleDecimalPipe,\r\n                    LocalePercentPipe,\r\n                    LocaleCurrencyPipe,\r\n                    LocaleDateDirective,\r\n                    LocaleDecimalDirective,\r\n                    LocalePercentDirective,\r\n                    LocaleCurrencyDirective\r\n                ],\r\n                imports: [\r\n                    TranslationModule\r\n                ],\r\n                exports: [\r\n                    TranslationModule,\r\n                    LocaleDatePipe,\r\n                    LocaleDecimalPipe,\r\n                    LocalePercentPipe,\r\n                    LocaleCurrencyPipe,\r\n                    LocaleDateDirective,\r\n                    LocaleDecimalDirective,\r\n                    LocalePercentDirective,\r\n                    LocaleCurrencyDirective\r\n                ]\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocalizationModule.ctorParameters = function () { return [\r\n    { type: InjectorRef, },\r\n]; };\r\n/**\r\n * Provides dependencies & directives for locale validation.\r\n */\r\nvar LocaleValidationModule = (function () {\r\n    function LocaleValidationModule() {\r\n    }\r\n    /**\r\n     * Use in AppModule: new instance of LocaleValidation.\r\n     * @return {?}\r\n     */\r\n    LocaleValidationModule.forRoot = function () {\r\n        return {\r\n            ngModule: LocaleValidationModule,\r\n            providers: [DecimalCode, LocaleValidation]\r\n        };\r\n    };\r\n    return LocaleValidationModule;\r\n}());\r\nLocaleValidationModule.decorators = [\r\n    { type: NgModule, args: [{\r\n                declarations: [\r\n                    LocaleNumberValidatorDirective\r\n                ],\r\n                exports: [\r\n                    LocaleNumberValidatorDirective\r\n                ]\r\n            },] },\r\n];\r\n/**\r\n * @nocollapse\r\n */\r\nLocaleValidationModule.ctorParameters = function () { return []; };\r\n/**\r\n * Angular l10n.\r\n * An Angular library to translate messages, dates and numbers.\r\n * Written by Roberto Simonetti.\r\n * MIT license.\r\n * https://github.com/robisim74/angular-l10n\r\n */\r\n/**\r\n * Entry point for all public APIs of the package.\r\n */\r\n/**\r\n * Generated bundle index. Do not edit.\r\n */\r\nexport { InjectorRef, LocaleConfig, LocaleService, LocaleStorage, BrowserStorage, TranslationConfig, TranslationService, TranslationProvider, HttpTranslationProvider, TranslationHandler, DefaultTranslationHandler, Translation, Localization, NumberCode, DecimalCode, LocaleValidation, Collator, IntlAPI, Language, DefaultLocale$1 as DefaultLocale, Currency, TranslatePipe, LocaleDatePipe, LocaleDecimalPipe, LocalePercentPipe, LocaleCurrencyPipe, BaseDirective, TranslateDirective, LocaleDateDirective, LocaleDecimalDirective, LocalePercentDirective, LocaleCurrencyDirective, LocaleNumberValidatorDirective, validateLocaleNumber, TranslationModule, LocalizationModule, LocaleValidationModule };\r\n//# sourceMappingURL=angular-l10n.es5.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/angular-l10n/modules/angular-l10n.es5.js\n// module id = 3\n// module chunks = 1","/**\n * @license Angular v4.4.7\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\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 * AnimationBuilder is an injectable service that is available when the {\\@link\n * BrowserAnimationsModule BrowserAnimationsModule} or {\\@link NoopAnimationsModule\n * NoopAnimationsModule} modules are used within an application.\n *\n * The purpose if this service is to produce an animation sequence programmatically within an\n * angular component or directive.\n *\n * Programmatic animations are first built and then a player is created when the build animation is\n * attached to an element.\n *\n * ```ts\n * // remember to include the BrowserAnimationsModule module for this to work...\n * import {AnimationBuilder} from '\\@angular/animations';\n *\n * class MyCmp {\n *   constructor(private _builder: AnimationBuilder) {}\n *\n *   makeAnimation(element: any) {\n *     // first build the animation\n *     const myAnimation = this._builder.build([\n *       style({ width: 0 }),\n *       animate(1000, style({ width: '100px' }))\n *     ]);\n *\n *     // then create a player from it\n *     const player = myAnimation.create(element);\n *\n *     player.play();\n *   }\n * }\n * ```\n *\n * When an animation is built an instance of {\\@link AnimationFactory AnimationFactory} will be\n * returned. Using that an {\\@link AnimationPlayer AnimationPlayer} can be created which can then be\n * used to start the animation.\n *\n * \\@experimental Animation support is experimental.\n * @abstract\n */\nvar AnimationBuilder = (function () {\n    function AnimationBuilder() {\n    }\n    /**\n     * @abstract\n     * @param {?} animation\n     * @return {?}\n     */\n    AnimationBuilder.prototype.build = function (animation) { };\n    return AnimationBuilder;\n}());\n/**\n * An instance of `AnimationFactory` is returned from {\\@link AnimationBuilder#build\n * AnimationBuilder.build}.\n *\n * \\@experimental Animation support is experimental.\n * @abstract\n */\nvar AnimationFactory = (function () {\n    function AnimationFactory() {\n    }\n    /**\n     * @abstract\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    AnimationFactory.prototype.create = function (element, options) { };\n    return AnimationFactory;\n}());\n/**\n * \\@experimental Animation support is experimental.\n */\nvar AUTO_STYLE = '*';\n/**\n * `trigger` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the\n * {\\@link Component#animations component animations metadata page} to gain a better\n * understanding of how animations in Angular are used.\n *\n * `trigger` Creates an animation trigger which will a list of {\\@link state state} and\n * {\\@link transition transition} entries that will be evaluated when the expression\n * bound to the trigger changes.\n *\n * Triggers are registered within the component annotation data under the\n * {\\@link Component#animations animations section}. An animation trigger can be placed on an element\n * within a template by referencing the name of the trigger followed by the expression value that\n * the\n * trigger is bound to (in the form of `[\\@triggerName]=\"expression\"`.\n *\n * Animation trigger bindings strigify values and then match the previous and current values against\n * any linked transitions. If a boolean value is provided into the trigger binding then it will both\n * be represented as `1` or `true` and `0` or `false` for a true and false boolean values\n * respectively.\n *\n * ### Usage\n *\n * `trigger` will create an animation trigger reference based on the provided `name` value. The\n * provided `animation` value is expected to be an array consisting of {\\@link state state} and\n * {\\@link transition transition} declarations.\n *\n * ```typescript\n * \\@Component({\n *   selector: 'my-component',\n *   templateUrl: 'my-component-tpl.html',\n *   animations: [\n *     trigger(\"myAnimationTrigger\", [\n *       state(...),\n *       state(...),\n *       transition(...),\n *       transition(...)\n *     ])\n *   ]\n * })\n * class MyComponent {\n *   myStatusExp = \"something\";\n * }\n * ```\n *\n * The template associated with this component will make use of the `myAnimationTrigger` animation\n * trigger by binding to an element within its template code.\n *\n * ```html\n * <!-- somewhere inside of my-component-tpl.html -->\n * <div [\\@myAnimationTrigger]=\"myStatusExp\">...</div>\n * ```\n *\n * ## Disable Animations\n * A special animation control binding called `\\@.disabled` can be placed on an element which will\n * then disable animations for any inner animation triggers situated within the element as well as\n * any animations on the element itself.\n *\n * When true, the `\\@.disabled` binding will prevent all animations from rendering. The example\n * below shows how to use this feature:\n *\n * ```ts\n * \\@Component({\n *   selector: 'my-component',\n *   template: `\n *     <div [\\@.disabled]=\"isDisabled\">\n *       <div [\\@childAnimation]=\"exp\"></div>\n *     </div>\n *   `,\n *   animations: [\n *     trigger(\"childAnimation\", [\n *       // ...\n *     ])\n *   ]\n * })\n * class MyComponent {\n *   isDisabled = true;\n *   exp = '...';\n * }\n * ```\n *\n * The `\\@childAnimation` trigger will not animate because `\\@.disabled` prevents it from happening\n * (when true).\n *\n * Note that `\\@.disbled` will only disable all animations (this means any animations running on\n * the same element will also be disabled).\n *\n * ### Disabling Animations Application-wide\n * When an area of the template is set to have animations disabled, **all** inner components will\n * also have their animations disabled as well. This means that all animations for an angular\n * application can be disabled by placing a host binding set on `\\@.disabled` on the topmost Angular\n * component.\n *\n * ```ts\n * import {Component, HostBinding} from '\\@angular/core';\n *\n * \\@Component({\n *   selector: 'app-component',\n *   templateUrl: 'app.component.html',\n * })\n * class AppComponent {\n *   \\@HostBinding('\\@.disabled')\n *   public animationsDisabled = true;\n * }\n * ```\n *\n * ### What about animations that us `query()` and `animateChild()`?\n * Despite inner animations being disabled, a parent animation can {\\@link query query} for inner\n * elements located in disabled areas of the template and still animate them as it sees fit. This is\n * also the case for when a sub animation is queried by a parent and then later animated using {\\@link\n * animateChild animateChild}.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} definitions\n * @return {?}\n */\nfunction trigger(name, definitions) {\n    return { type: 7 /* Trigger */, name: name, definitions: definitions, options: {} };\n}\n/**\n * `animate` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `animate` specifies an animation step that will apply the provided `styles` data for a given\n * amount of time based on the provided `timing` expression value. Calls to `animate` are expected\n * to be used within {\\@link sequence an animation sequence}, {\\@link group group}, or {\\@link\n * transition transition}.\n *\n * ### Usage\n *\n * The `animate` function accepts two input parameters: `timing` and `styles`:\n *\n * - `timing` is a string based value that can be a combination of a duration with optional delay\n * and easing values. The format for the expression breaks down to `duration delay easing`\n * (therefore a value such as `1s 100ms ease-out` will be parse itself into `duration=1000,\n * delay=100, easing=ease-out`. If a numeric value is provided then that will be used as the\n * `duration` value in millisecond form.\n * - `styles` is the style input data which can either be a call to {\\@link style style} or {\\@link\n * keyframes keyframes}. If left empty then the styles from the destination state will be collected\n * and used (this is useful when describing an animation step that will complete an animation by\n * {\\@link transition#the-final-animate-call animating to the final state}).\n *\n * ```typescript\n * // various functions for specifying timing data\n * animate(500, style(...))\n * animate(\"1s\", style(...))\n * animate(\"100ms 0.5s\", style(...))\n * animate(\"5s ease\", style(...))\n * animate(\"5s 10ms cubic-bezier(.17,.67,.88,.1)\", style(...))\n *\n * // either style() of keyframes() can be used\n * animate(500, style({ background: \"red\" }))\n * animate(500, keyframes([\n *   style({ background: \"blue\" })),\n *   style({ background: \"red\" }))\n * ])\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} timings\n * @param {?=} styles\n * @return {?}\n */\nfunction animate(timings, styles) {\n    if (styles === void 0) { styles = null; }\n    return { type: 4 /* Animate */, styles: styles, timings: timings };\n}\n/**\n * `group` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `group` specifies a list of animation steps that are all run in parallel. Grouped animations are\n * useful when a series of styles must be animated/closed off at different starting/ending times.\n *\n * The `group` function can either be used within a {\\@link sequence sequence} or a {\\@link transition\n * transition} and it will only continue to the next instruction once all of the inner animation\n * steps have completed.\n *\n * ### Usage\n *\n * The `steps` data that is passed into the `group` animation function can either consist of {\\@link\n * style style} or {\\@link animate animate} function calls. Each call to `style()` or `animate()`\n * within a group will be executed instantly (use {\\@link keyframes keyframes} or a {\\@link\n * animate#usage animate() with a delay value} to offset styles to be applied at a later time).\n *\n * ```typescript\n * group([\n *   animate(\"1s\", { background: \"black\" }))\n *   animate(\"2s\", { color: \"white\" }))\n * ])\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction group(steps, options) {\n    if (options === void 0) { options = null; }\n    return { type: 3 /* Group */, steps: steps, options: options };\n}\n/**\n * `sequence` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `sequence` Specifies a list of animation steps that are run one by one. (`sequence` is used by\n * default when an array is passed as animation data into {\\@link transition transition}.)\n *\n * The `sequence` function can either be used within a {\\@link group group} or a {\\@link transition\n * transition} and it will only continue to the next instruction once each of the inner animation\n * steps have completed.\n *\n * To perform animation styling in parallel with other animation steps then have a look at the\n * {\\@link group group} animation function.\n *\n * ### Usage\n *\n * The `steps` data that is passed into the `sequence` animation function can either consist of\n * {\\@link style style} or {\\@link animate animate} function calls. A call to `style()` will apply the\n * provided styling data immediately while a call to `animate()` will apply its styling data over a\n * given time depending on its timing data.\n *\n * ```typescript\n * sequence([\n *   style({ opacity: 0 })),\n *   animate(\"1s\", { opacity: 1 }))\n * ])\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction sequence(steps, options) {\n    if (options === void 0) { options = null; }\n    return { type: 2 /* Sequence */, steps: steps, options: options };\n}\n/**\n * `style` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `style` declares a key/value object containing CSS properties/styles that can then be used for\n * {\\@link state animation states}, within an {\\@link sequence animation sequence}, or as styling data\n * for both {\\@link animate animate} and {\\@link keyframes keyframes}.\n *\n * ### Usage\n *\n * `style` takes in a key/value string map as data and expects one or more CSS property/value pairs\n * to be defined.\n *\n * ```typescript\n * // string values are used for css properties\n * style({ background: \"red\", color: \"blue\" })\n *\n * // numerical (pixel) values are also supported\n * style({ width: 100, height: 0 })\n * ```\n *\n * #### Auto-styles (using `*`)\n *\n * When an asterix (`*`) character is used as a value then it will be detected from the element\n * being animated and applied as animation data when the animation starts.\n *\n * This feature proves useful for a state depending on layout and/or environment factors; in such\n * cases the styles are calculated just before the animation starts.\n *\n * ```typescript\n * // the steps below will animate from 0 to the\n * // actual height of the element\n * style({ height: 0 }),\n * animate(\"1s\", style({ height: \"*\" }))\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} tokens\n * @return {?}\n */\nfunction style(tokens) {\n    return { type: 6 /* Style */, styles: tokens, offset: null };\n}\n/**\n * `state` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `state` declares an animation state within the given trigger. When a state is active within a\n * component then its associated styles will persist on the element that the trigger is attached to\n * (even when the animation ends).\n *\n * To animate between states, have a look at the animation {\\@link transition transition} DSL\n * function. To register states to an animation trigger please have a look at the {\\@link trigger\n * trigger} function.\n *\n * #### The `void` state\n *\n * The `void` state value is a reserved word that angular uses to determine when the element is not\n * apart of the application anymore (e.g. when an `ngIf` evaluates to false then the state of the\n * associated element is void).\n *\n * #### The `*` (default) state\n *\n * The `*` state (when styled) is a fallback state that will be used if the state that is being\n * animated is not declared within the trigger.\n *\n * ### Usage\n *\n * `state` will declare an animation state with its associated styles\n * within the given trigger.\n *\n * - `stateNameExpr` can be one or more state names separated by commas.\n * - `styles` refers to the {\\@link style styling data} that will be persisted on the element once\n * the state has been reached.\n *\n * ```typescript\n * // \"void\" is a reserved name for a state and is used to represent\n * // the state in which an element is detached from from the application.\n * state(\"void\", style({ height: 0 }))\n *\n * // user-defined states\n * state(\"closed\", style({ height: 0 }))\n * state(\"open, visible\", style({ height: \"*\" }))\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} styles\n * @param {?=} options\n * @return {?}\n */\nfunction state(name, styles, options) {\n    return { type: 0 /* State */, name: name, styles: styles, options: options };\n}\n/**\n * `keyframes` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `keyframes` specifies a collection of {\\@link style style} entries each optionally characterized\n * by an `offset` value.\n *\n * ### Usage\n *\n * The `keyframes` animation function is designed to be used alongside the {\\@link animate animate}\n * animation function. Instead of applying animations from where they are currently to their\n * destination, keyframes can describe how each style entry is applied and at what point within the\n * animation arc (much like CSS Keyframe Animations do).\n *\n * For each `style()` entry an `offset` value can be set. Doing so allows to specifiy at what\n * percentage of the animate time the styles will be applied.\n *\n * ```typescript\n * // the provided offset values describe when each backgroundColor value is applied.\n * animate(\"5s\", keyframes([\n *   style({ backgroundColor: \"red\", offset: 0 }),\n *   style({ backgroundColor: \"blue\", offset: 0.2 }),\n *   style({ backgroundColor: \"orange\", offset: 0.3 }),\n *   style({ backgroundColor: \"black\", offset: 1 })\n * ]))\n * ```\n *\n * Alternatively, if there are no `offset` values used within the style entries then the offsets\n * will be calculated automatically.\n *\n * ```typescript\n * animate(\"5s\", keyframes([\n *   style({ backgroundColor: \"red\" }) // offset = 0\n *   style({ backgroundColor: \"blue\" }) // offset = 0.33\n *   style({ backgroundColor: \"orange\" }) // offset = 0.66\n *   style({ backgroundColor: \"black\" }) // offset = 1\n * ]))\n * ```\n *\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @return {?}\n */\nfunction keyframes(steps) {\n    return { type: 5 /* Keyframes */, steps: steps };\n}\n/**\n * `transition` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. If this information is new, please navigate to the {\\@link\n * Component#animations component animations metadata page} to gain a better understanding of\n * how animations in Angular are used.\n *\n * `transition` declares the {\\@link sequence sequence of animation steps} that will be run when the\n * provided `stateChangeExpr` value is satisfied. The `stateChangeExpr` consists of a `state1 =>\n * state2` which consists of two known states (use an asterix (`*`) to refer to a dynamic starting\n * and/or ending state).\n *\n * A function can also be provided as the `stateChangeExpr` argument for a transition and this\n * function will be executed each time a state change occurs. If the value returned within the\n * function is true then the associated animation will be run.\n *\n * Animation transitions are placed within an {\\@link trigger animation trigger}. For an transition\n * to animate to a state value and persist its styles then one or more {\\@link state animation\n * states} is expected to be defined.\n *\n * ### Usage\n *\n * An animation transition is kicked off the `stateChangeExpr` predicate evaluates to true based on\n * what the previous state is and what the current state has become. In other words, if a transition\n * is defined that matches the old/current state criteria then the associated animation will be\n * triggered.\n *\n * ```typescript\n * // all transition/state changes are defined within an animation trigger\n * trigger(\"myAnimationTrigger\", [\n *   // if a state is defined then its styles will be persisted when the\n *   // animation has fully completed itself\n *   state(\"on\", style({ background: \"green\" })),\n *   state(\"off\", style({ background: \"grey\" })),\n *\n *   // a transition animation that will be kicked off when the state value\n *   // bound to \"myAnimationTrigger\" changes from \"on\" to \"off\"\n *   transition(\"on => off\", animate(500)),\n *\n *   // it is also possible to do run the same animation for both directions\n *   transition(\"on <=> off\", animate(500)),\n *\n *   // or to define multiple states pairs separated by commas\n *   transition(\"on => off, off => void\", animate(500)),\n *\n *   // this is a catch-all state change for when an element is inserted into\n *   // the page and the destination state is unknown\n *   transition(\"void => *\", [\n *     style({ opacity: 0 }),\n *     animate(500)\n *   ]),\n *\n *   // this will capture a state change between any states\n *   transition(\"* => *\", animate(\"1s 0s\")),\n *\n *   // you can also go full out and include a function\n *   transition((fromState, toState) => {\n *     // when `true` then it will allow the animation below to be invoked\n *     return fromState == \"off\" && toState == \"on\";\n *   }, animate(\"1s 0s\"))\n * ])\n * ```\n *\n * The template associated with this component will make use of the `myAnimationTrigger` animation\n * trigger by binding to an element within its template code.\n *\n * ```html\n * <!-- somewhere inside of my-component-tpl.html -->\n * <div [\\@myAnimationTrigger]=\"myStatusExp\">...</div>\n * ```\n *\n * #### The final `animate` call\n *\n * If the final step within the transition steps is a call to `animate()` that **only** uses a\n * timing value with **no style data** then it will be automatically used as the final animation arc\n * for the element to animate itself to the final state. This involves an automatic mix of\n * adding/removing CSS styles so that the element will be in the exact state it should be for the\n * applied state to be presented correctly.\n *\n * ```\n * // start off by hiding the element, but make sure that it animates properly to whatever state\n * // is currently active for \"myAnimationTrigger\"\n * transition(\"void => *\", [\n *   style({ opacity: 0 }),\n *   animate(500)\n * ])\n * ```\n *\n * ### Transition Aliases (`:enter` and `:leave`)\n *\n * Given that enter (insertion) and leave (removal) animations are so common, the `transition`\n * function accepts both `:enter` and `:leave` values which are aliases for the `void => *` and `*\n * => void` state changes.\n *\n * ```\n * transition(\":enter\", [\n *   style({ opacity: 0 }),\n *   animate(500, style({ opacity: 1 }))\n * ])\n * transition(\":leave\", [\n *   animate(500, style({ opacity: 0 }))\n * ])\n * ```\n *\n * ### Boolean values\n * if a trigger binding value is a boolean value then it can be matched using a transition\n * expression that compares `true` and `false` or `1` and `0`.\n *\n * ```\n * // in the template\n * <div [\\@openClose]=\"open ? true : false\">...</div>\n *\n * // in the component metadata\n * trigger('openClose', [\n *   state('true', style({ height: '*' })),\n *   state('false', style({ height: '0px' })),\n *   transition('false <=> true', animate(500))\n * ])\n * ```\n * {\\@example core/animation/ts/dsl/animation_example.ts region='Component'}\n *\n * \\@experimental Animation support is experimental.\n * @param {?} stateChangeExpr\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction transition(stateChangeExpr, steps, options) {\n    if (options === void 0) { options = null; }\n    return { type: 1 /* Transition */, expr: stateChangeExpr, animation: steps, options: options };\n}\n/**\n * `animation` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language.\n *\n * `var myAnimation = animation(...)` is designed to produce a reusable animation that can be later\n * invoked in another animation or sequence. Reusable animations are designed to make use of\n * animation parameters and the produced animation can be used via the `useAnimation` method.\n *\n * ```\n * var fadeAnimation = animation([\n *   style({ opacity: '{{ start }}' }),\n *   animate('{{ time }}',\n *     style({ opacity: '{{ end }}'}))\n * ], { params: { time: '1000ms', start: 0, end: 1 }});\n * ```\n *\n * If parameters are attached to an animation then they act as **default parameter values**. When an\n * animation is invoked via `useAnimation` then parameter values are allowed to be passed in\n * directly. If any of the passed in parameter values are missing then the default values will be\n * used.\n *\n * ```\n * useAnimation(fadeAnimation, {\n *   params: {\n *     time: '2s',\n *     start: 1,\n *     end: 0\n *   }\n * })\n * ```\n *\n * If one or more parameter values are missing before animated then an error will be thrown.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} steps\n * @param {?=} options\n * @return {?}\n */\nfunction animation(steps, options) {\n    if (options === void 0) { options = null; }\n    return { type: 8 /* Reference */, animation: steps, options: options };\n}\n/**\n * `animateChild` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. It works by allowing a queried element to execute its own\n * animation within the animation sequence.\n *\n * Each time an animation is triggered in angular, the parent animation\n * will always get priority and any child animations will be blocked. In order\n * for a child animation to run, the parent animation must query each of the elements\n * containing child animations and then allow the animations to run using `animateChild`.\n *\n * The example HTML code below shows both parent and child elements that have animation\n * triggers that will execute at the same time.\n *\n * ```html\n * <!-- parent-child.component.html -->\n * <button (click)=\"exp =! exp\">Toggle</button>\n * <hr>\n *\n * <div [\\@parentAnimation]=\"exp\">\n *   <header>Hello</header>\n *   <div [\\@childAnimation]=\"exp\">\n *       one\n *   </div>\n *   <div [\\@childAnimation]=\"exp\">\n *       two\n *   </div>\n *   <div [\\@childAnimation]=\"exp\">\n *       three\n *   </div>\n * </div>\n * ```\n *\n * Now when the `exp` value changes to true, only the `parentAnimation` animation will animate\n * because it has priority. However, using `query` and `animateChild` each of the inner animations\n * can also fire:\n *\n * ```ts\n * // parent-child.component.ts\n * import {trigger, transition, animate, style, query, animateChild} from '\\@angular/animations';\n * \\@Component({\n *   selector: 'parent-child-component',\n *   animations: [\n *     trigger('parentAnimation', [\n *       transition('false => true', [\n *         query('header', [\n *           style({ opacity: 0 }),\n *           animate(500, style({ opacity: 1 }))\n *         ]),\n *         query('\\@childAnimation', [\n *           animateChild()\n *         ])\n *       ])\n *     ]),\n *     trigger('childAnimation', [\n *       transition('false => true', [\n *         style({ opacity: 0 }),\n *         animate(500, style({ opacity: 1 }))\n *       ])\n *     ])\n *   ]\n * })\n * class ParentChildCmp {\n *   exp: boolean = false;\n * }\n * ```\n *\n * In the animation code above, when the `parentAnimation` transition kicks off it first queries to\n * find the header element and fades it in. It then finds each of the sub elements that contain the\n * `\\@childAnimation` trigger and then allows for their animations to fire.\n *\n * This example can be further extended by using stagger:\n *\n * ```ts\n * query('\\@childAnimation', stagger(100, [\n *   animateChild()\n * ]))\n * ```\n *\n * Now each of the sub animations start off with respect to the `100ms` staggering step.\n *\n * ## The first frame of child animations\n * When sub animations are executed using `animateChild` the animation engine will always apply the\n * first frame of every sub animation immediately at the start of the animation sequence. This way\n * the parent animation does not need to set any initial styling data on the sub elements before the\n * sub animations kick off.\n *\n * In the example above the first frame of the `childAnimation`'s `false => true` transition\n * consists of a style of `opacity: 0`. This is applied immediately when the `parentAnimation`\n * animation transition sequence starts. Only then when the `\\@childAnimation` is queried and called\n * with `animateChild` will it then animate to its destination of `opacity: 1`.\n *\n * Note that this feature designed to be used alongside {\\@link query query()} and it will only work\n * with animations that are assigned using the Angular animation DSL (this means that CSS keyframes\n * and transitions are not handled by this API).\n *\n * \\@experimental Animation support is experimental.\n * @param {?=} options\n * @return {?}\n */\nfunction animateChild(options) {\n    if (options === void 0) { options = null; }\n    return { type: 9 /* AnimateChild */, options: options };\n}\n/**\n * `useAnimation` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. It is used to kick off a reusable animation that is created using {\\@link\n * animation animation()}.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} animation\n * @param {?=} options\n * @return {?}\n */\nfunction useAnimation(animation, options) {\n    if (options === void 0) { options = null; }\n    return { type: 10 /* AnimateRef */, animation: animation, options: options };\n}\n/**\n * `query` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language.\n *\n * query() is used to find one or more inner elements within the current element that is\n * being animated within the sequence. The provided animation steps are applied\n * to the queried element (by default, an array is provided, then this will be\n * treated as an animation sequence).\n *\n * ### Usage\n *\n * query() is designed to collect mutiple elements and works internally by using\n * `element.querySelectorAll`. An additional options object can be provided which\n * can be used to limit the total amount of items to be collected.\n *\n * ```js\n * query('div', [\n *   animate(...),\n *   animate(...)\n * ], { limit: 1 })\n * ```\n *\n * query(), by default, will throw an error when zero items are found. If a query\n * has the `optional` flag set to true then this error will be ignored.\n *\n * ```js\n * query('.some-element-that-may-not-be-there', [\n *   animate(...),\n *   animate(...)\n * ], { optional: true })\n * ```\n *\n * ### Special Selector Values\n *\n * The selector value within a query can collect elements that contain angular-specific\n * characteristics\n * using special pseudo-selectors tokens.\n *\n * These include:\n *\n *  - Querying for newly inserted/removed elements using `query(\":enter\")`/`query(\":leave\")`\n *  - Querying all currently animating elements using `query(\":animating\")`\n *  - Querying elements that contain an animation trigger using `query(\"\\@triggerName\")`\n *  - Querying all elements that contain an animation triggers using `query(\"\\@*\")`\n *  - Including the current element into the animation sequence using `query(\":self\")`\n *\n *\n *  Each of these pseudo-selector tokens can be merged together into a combined query selector\n * string:\n *\n *  ```\n *  query(':self, .record:enter, .record:leave, \\@subTrigger', [...])\n *  ```\n *\n * ### Demo\n *\n * ```\n * \\@Component({\n *   selector: 'inner',\n *   template: `\n *     <div [\\@queryAnimation]=\"exp\">\n *       <h1>Title</h1>\n *       <div class=\"content\">\n *         Blah blah blah\n *       </div>\n *     </div>\n *   `,\n *   animations: [\n *    trigger('queryAnimation', [\n *      transition('* => goAnimate', [\n *        // hide the inner elements\n *        query('h1', style({ opacity: 0 })),\n *        query('.content', style({ opacity: 0 })),\n *\n *        // animate the inner elements in, one by one\n *        query('h1', animate(1000, style({ opacity: 1 })),\n *        query('.content', animate(1000, style({ opacity: 1 })),\n *      ])\n *    ])\n *  ]\n * })\n * class Cmp {\n *   exp = '';\n *\n *   goAnimate() {\n *     this.exp = 'goAnimate';\n *   }\n * }\n * ```\n *\n * \\@experimental Animation support is experimental.\n * @param {?} selector\n * @param {?} animation\n * @param {?=} options\n * @return {?}\n */\nfunction query(selector, animation, options) {\n    if (options === void 0) { options = null; }\n    return { type: 11 /* Query */, selector: selector, animation: animation, options: options };\n}\n/**\n * `stagger` is an animation-specific function that is designed to be used inside of Angular's\n * animation DSL language. It is designed to be used inside of an animation {\\@link query query()}\n * and works by issuing a timing gap between after each queried item is animated.\n *\n * ### Usage\n *\n * In the example below there is a container element that wraps a list of items stamped out\n * by an ngFor. The container element contains an animation trigger that will later be set\n * to query for each of the inner items.\n *\n * ```html\n * <!-- list.component.html -->\n * <button (click)=\"toggle()\">Show / Hide Items</button>\n * <hr />\n * <div [\\@listAnimation]=\"items.length\">\n *   <div *ngFor=\"let item of items\">\n *     {{ item }}\n *   </div>\n * </div>\n * ```\n *\n * The component code for this looks as such:\n *\n * ```ts\n * import {trigger, transition, style, animate, query, stagger} from '\\@angular/animations';\n * \\@Component({\n *   templateUrl: 'list.component.html',\n *   animations: [\n *     trigger('listAnimation', [\n *        //...\n *     ])\n *   ]\n * })\n * class ListComponent {\n *   items = [];\n *\n *   showItems() {\n *     this.items = [0,1,2,3,4];\n *   }\n *\n *   hideItems() {\n *     this.items = [];\n *   }\n *\n *   toggle() {\n *     this.items.length ? this.hideItems() : this.showItems();\n *   }\n * }\n * ```\n *\n * And now for the animation trigger code:\n *\n * ```ts\n * trigger('listAnimation', [\n *   transition('* => *', [ // each time the binding value changes\n *     query(':leave', [\n *       stagger(100, [\n *         animate('0.5s', style({ opacity: 0 }))\n *       ])\n *     ]),\n *     query(':enter', [\n *       style({ opacity: 0 }),\n *       stagger(100, [\n *         animate('0.5s', style({ opacity: 1 }))\n *       ])\n *     ])\n *   ])\n * ])\n * ```\n *\n * Now each time the items are added/removed then either the opacity\n * fade-in animation will run or each removed item will be faded out.\n * When either of these animations occur then a stagger effect will be\n * applied after each item's animation is started.\n *\n * \\@experimental Animation support is experimental.\n * @param {?} timings\n * @param {?} animation\n * @return {?}\n */\nfunction stagger(timings, animation) {\n    return { type: 12 /* Stagger */, timings: timings, animation: animation };\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 * @param {?} cb\n * @return {?}\n */\nfunction scheduleMicroTask(cb) {\n    Promise.resolve(null).then(cb);\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 * \\@experimental Animation support is experimental.\n */\nvar NoopAnimationPlayer = (function () {\n    function NoopAnimationPlayer() {\n        this._onDoneFns = [];\n        this._onStartFns = [];\n        this._onDestroyFns = [];\n        this._started = false;\n        this._destroyed = false;\n        this._finished = false;\n        this.parentPlayer = null;\n        this.totalTime = 0;\n    }\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype._onFinish = function () {\n        if (!this._finished) {\n            this._finished = true;\n            this._onDoneFns.forEach(function (fn) { return fn(); });\n            this._onDoneFns = [];\n        }\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.onStart = function (fn) { this._onStartFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.onDone = function (fn) { this._onDoneFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.onDestroy = function (fn) { this._onDestroyFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.hasStarted = function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.init = function () { };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.play = function () {\n        if (!this.hasStarted()) {\n            this.triggerMicrotask();\n            this._onStart();\n        }\n        this._started = true;\n    };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.triggerMicrotask = function () {\n        var _this = this;\n        scheduleMicroTask(function () { return _this._onFinish(); });\n    };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype._onStart = function () {\n        this._onStartFns.forEach(function (fn) { return fn(); });\n        this._onStartFns = [];\n    };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.pause = function () { };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.restart = function () { };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.finish = function () { this._onFinish(); };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.destroy = function () {\n        if (!this._destroyed) {\n            this._destroyed = true;\n            if (!this.hasStarted()) {\n                this._onStart();\n            }\n            this.finish();\n            this._onDestroyFns.forEach(function (fn) { return fn(); });\n            this._onDestroyFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.reset = function () { };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.setPosition = function (p) { };\n    /**\n     * @return {?}\n     */\n    NoopAnimationPlayer.prototype.getPosition = function () { return 0; };\n    return NoopAnimationPlayer;\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 */\nvar AnimationGroupPlayer = (function () {\n    /**\n     * @param {?} _players\n     */\n    function AnimationGroupPlayer(_players) {\n        var _this = this;\n        this._players = _players;\n        this._onDoneFns = [];\n        this._onStartFns = [];\n        this._finished = false;\n        this._started = false;\n        this._destroyed = false;\n        this._onDestroyFns = [];\n        this.parentPlayer = null;\n        this.totalTime = 0;\n        var doneCount = 0;\n        var destroyCount = 0;\n        var startCount = 0;\n        var total = this._players.length;\n        if (total == 0) {\n            scheduleMicroTask(function () { return _this._onFinish(); });\n        }\n        else {\n            this._players.forEach(function (player) {\n                player.parentPlayer = _this;\n                player.onDone(function () {\n                    if (++doneCount >= total) {\n                        _this._onFinish();\n                    }\n                });\n                player.onDestroy(function () {\n                    if (++destroyCount >= total) {\n                        _this._onDestroy();\n                    }\n                });\n                player.onStart(function () {\n                    if (++startCount >= total) {\n                        _this._onStart();\n                    }\n                });\n            });\n        }\n        this.totalTime = this._players.reduce(function (time, player) { return Math.max(time, player.totalTime); }, 0);\n    }\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype._onFinish = function () {\n        if (!this._finished) {\n            this._finished = true;\n            this._onDoneFns.forEach(function (fn) { return fn(); });\n            this._onDoneFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.init = function () { this._players.forEach(function (player) { return player.init(); }); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.onStart = function (fn) { this._onStartFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype._onStart = function () {\n        if (!this.hasStarted()) {\n            this._onStartFns.forEach(function (fn) { return fn(); });\n            this._onStartFns = [];\n            this._started = true;\n        }\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.onDone = function (fn) { this._onDoneFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.onDestroy = function (fn) { this._onDestroyFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.hasStarted = function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.play = function () {\n        if (!this.parentPlayer) {\n            this.init();\n        }\n        this._onStart();\n        this._players.forEach(function (player) { return player.play(); });\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.pause = function () { this._players.forEach(function (player) { return player.pause(); }); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.restart = function () { this._players.forEach(function (player) { return player.restart(); }); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.finish = function () {\n        this._onFinish();\n        this._players.forEach(function (player) { return player.finish(); });\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.destroy = function () { this._onDestroy(); };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype._onDestroy = function () {\n        if (!this._destroyed) {\n            this._destroyed = true;\n            this._onFinish();\n            this._players.forEach(function (player) { return player.destroy(); });\n            this._onDestroyFns.forEach(function (fn) { return fn(); });\n            this._onDestroyFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.reset = function () {\n        this._players.forEach(function (player) { return player.reset(); });\n        this._destroyed = false;\n        this._finished = false;\n        this._started = false;\n    };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.setPosition = function (p) {\n        var /** @type {?} */ timeAtPosition = p * this.totalTime;\n        this._players.forEach(function (player) {\n            var /** @type {?} */ position = player.totalTime ? Math.min(1, timeAtPosition / player.totalTime) : 1;\n            player.setPosition(position);\n        });\n    };\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.getPosition = function () {\n        var /** @type {?} */ min = 0;\n        this._players.forEach(function (player) {\n            var /** @type {?} */ p = player.getPosition();\n            min = Math.min(p, min);\n        });\n        return min;\n    };\n    Object.defineProperty(AnimationGroupPlayer.prototype, \"players\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._players; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    AnimationGroupPlayer.prototype.beforeDestroy = function () {\n        this.players.forEach(function (player) {\n            if (player.beforeDestroy) {\n                player.beforeDestroy();\n            }\n        });\n    };\n    return AnimationGroupPlayer;\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 */\nvar ɵPRE_STYLE = '!';\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 * @module\n * @description\n * Entry point for all animation APIs of the animation package.\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 * @module\n * @description\n * Entry point for all public APIs of the animation package.\n */\n/**\n * Generated bundle index. Do not edit.\n */\nexport { AnimationBuilder, AnimationFactory, AUTO_STYLE, animate, animateChild, animation, group, keyframes, query, sequence, stagger, state, style, transition, trigger, useAnimation, NoopAnimationPlayer, AnimationGroupPlayer as ɵAnimationGroupPlayer, ɵPRE_STYLE };\n//# sourceMappingURL=animations.es5.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angular/animations/@angular/animations.es5.js\n// module id = null\n// module chunks = ","import * as tslib_1 from \"tslib\";\n/**\n * @license Angular v4.4.7\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { AUTO_STYLE, NoopAnimationPlayer, sequence, style, ɵAnimationGroupPlayer, ɵPRE_STYLE } from '@angular/animations';\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 */\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}\nfunction normalizeKeyframes(driver, normalizer, element, keyframes, preStyles, postStyles) {\n    if (preStyles === void 0) { preStyles = {}; }\n    if (postStyles === void 0) { postStyles = {}; }\n    var errors = [];\n    var normalizedKeyframes = [];\n    var previousOffset = -1;\n    var previousKeyframe = null;\n    keyframes.forEach(function (kf) {\n        var offset = kf['offset'];\n        var isSameOffset = offset == previousOffset;\n        var normalizedKeyframe = (isSameOffset && previousKeyframe) || {};\n        Object.keys(kf).forEach(function (prop) {\n            var normalizedProp = prop;\n            var 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        var 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}\nfunction listenOnPlayer(player, eventName, event, callback) {\n    switch (eventName) {\n        case 'start':\n            player.onStart(function () { return callback(event && copyAnimationEvent(event, 'start', player.totalTime)); });\n            break;\n        case 'done':\n            player.onDone(function () { return callback(event && copyAnimationEvent(event, 'done', player.totalTime)); });\n            break;\n        case 'destroy':\n            player.onDestroy(function () { return callback(event && copyAnimationEvent(event, 'destroy', player.totalTime)); });\n            break;\n    }\n}\nfunction copyAnimationEvent(e, phaseName, totalTime) {\n    var event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime);\n    var data = e['_data'];\n    if (data != null) {\n        event['_data'] = data;\n    }\n    return event;\n}\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName, totalTime) {\n    if (phaseName === void 0) { phaseName = ''; }\n    if (totalTime === void 0) { totalTime = 0; }\n    return { element: element, triggerName: triggerName, fromState: fromState, toState: toState, phaseName: phaseName, totalTime: totalTime };\n}\nfunction getOrSetAsInMap(map, key, defaultValue) {\n    var 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}\nfunction parseTimelineCommand(command) {\n    var separatorPos = command.indexOf(':');\n    var id = command.substring(1, separatorPos);\n    var action = command.substr(separatorPos + 1);\n    return [id, action];\n}\nvar _contains = function (elm1, elm2) { return false; };\nvar _matches = function (element, selector) { return false; };\nvar _query = function (element, selector, multi) {\n    return [];\n};\nif (typeof Element != 'undefined') {\n    // this is well supported in all browsers\n    _contains = function (elm1, elm2) { return elm1.contains(elm2); };\n    if (Element.prototype.matches) {\n        _matches = function (element, selector) { return element.matches(selector); };\n    }\n    else {\n        var proto = Element.prototype;\n        var fn_1 = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector ||\n            proto.oMatchesSelector || proto.webkitMatchesSelector;\n        if (fn_1) {\n            _matches = function (element, selector) { return fn_1.apply(element, [selector]); };\n        }\n    }\n    _query = function (element, selector, multi) {\n        var results = [];\n        if (multi) {\n            results.push.apply(results, element.querySelectorAll(selector));\n        }\n        else {\n            var elm = element.querySelector(selector);\n            if (elm) {\n                results.push(elm);\n            }\n        }\n        return results;\n    };\n}\nvar matchesElement = _matches;\nvar containsElement = _contains;\nvar invokeQuery = _query;\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 * @experimental\n */\nvar NoopAnimationDriver = (function () {\n    function NoopAnimationDriver() {\n    }\n    NoopAnimationDriver.prototype.matchesElement = function (element, selector) {\n        return matchesElement(element, selector);\n    };\n    NoopAnimationDriver.prototype.containsElement = function (elm1, elm2) { return containsElement(elm1, elm2); };\n    NoopAnimationDriver.prototype.query = function (element, selector, multi) {\n        return invokeQuery(element, selector, multi);\n    };\n    NoopAnimationDriver.prototype.computeStyle = function (element, prop, defaultValue) {\n        return defaultValue || '';\n    };\n    NoopAnimationDriver.prototype.animate = function (element, keyframes, duration, delay, easing, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        return new NoopAnimationPlayer();\n    };\n    return NoopAnimationDriver;\n}());\n/**\n * @experimental\n */\nvar AnimationDriver = (function () {\n    function AnimationDriver() {\n    }\n    return AnimationDriver;\n}());\nAnimationDriver.NOOP = new NoopAnimationDriver();\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 */\nvar ONE_SECOND = 1000;\nvar SUBSTITUTION_EXPR_START = '{{';\nvar SUBSTITUTION_EXPR_END = '}}';\nvar ENTER_CLASSNAME = 'ng-enter';\nvar LEAVE_CLASSNAME = 'ng-leave';\nvar ENTER_SELECTOR = '.ng-enter';\nvar LEAVE_SELECTOR = '.ng-leave';\nvar NG_TRIGGER_CLASSNAME = 'ng-trigger';\nvar NG_TRIGGER_SELECTOR = '.ng-trigger';\nvar NG_ANIMATING_CLASSNAME = 'ng-animating';\nvar NG_ANIMATING_SELECTOR = '.ng-animating';\nfunction resolveTimingValue(value) {\n    if (typeof value == 'number')\n        return value;\n    var matches = value.match(/^(-?[\\.\\d]+)(m?s)/);\n    if (!matches || matches.length < 2)\n        return 0;\n    return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\nfunction _convertTimeValueToMS(value, unit) {\n    switch (unit) {\n        case 's':\n            return value * ONE_SECOND;\n        default:\n            return value;\n    }\n}\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n    return timings.hasOwnProperty('duration') ?\n        timings :\n        parseTimeExpression(timings, errors, allowNegativeValues);\n}\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n    var regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n    var duration;\n    var delay = 0;\n    var easing = '';\n    if (typeof exp === 'string') {\n        var 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        var delayMatch = matches[3];\n        if (delayMatch != null) {\n            delay = _convertTimeValueToMS(Math.floor(parseFloat(delayMatch)), matches[4]);\n        }\n        var easingVal = matches[5];\n        if (easingVal) {\n            easing = easingVal;\n        }\n    }\n    else {\n        duration = exp;\n    }\n    if (!allowNegativeValues) {\n        var containsErrors = false;\n        var 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: duration, delay: delay, easing: easing };\n}\nfunction copyObj(obj, destination) {\n    if (destination === void 0) { destination = {}; }\n    Object.keys(obj).forEach(function (prop) { destination[prop] = obj[prop]; });\n    return destination;\n}\nfunction normalizeStyles(styles) {\n    var normalizedStyles = {};\n    if (Array.isArray(styles)) {\n        styles.forEach(function (data) { return copyStyles(data, false, normalizedStyles); });\n    }\n    else {\n        copyStyles(styles, false, normalizedStyles);\n    }\n    return normalizedStyles;\n}\nfunction copyStyles(styles, readPrototype, destination) {\n    if (destination === void 0) { 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 (var prop in styles) {\n            destination[prop] = styles[prop];\n        }\n    }\n    else {\n        copyObj(styles, destination);\n    }\n    return destination;\n}\nfunction setStyles(element, styles) {\n    if (element['style']) {\n        Object.keys(styles).forEach(function (prop) {\n            var camelProp = dashCaseToCamelCase(prop);\n            element.style[camelProp] = styles[prop];\n        });\n    }\n}\nfunction eraseStyles(element, styles) {\n    if (element['style']) {\n        Object.keys(styles).forEach(function (prop) {\n            var camelProp = dashCaseToCamelCase(prop);\n            element.style[camelProp] = '';\n        });\n    }\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 steps;\n}\nfunction validateStyleParams(value, options, errors) {\n    var params = options.params || {};\n    var matches = extractStyleParams(value);\n    if (matches.length) {\n        matches.forEach(function (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}\nvar PARAM_REGEX = new RegExp(SUBSTITUTION_EXPR_START + \"\\\\s*(.+?)\\\\s*\" + SUBSTITUTION_EXPR_END, 'g');\nfunction extractStyleParams(value) {\n    var params = [];\n    if (typeof value === 'string') {\n        var val = value.toString();\n        var match = void 0;\n        while (match = PARAM_REGEX.exec(val)) {\n            params.push(match[1]);\n        }\n        PARAM_REGEX.lastIndex = 0;\n    }\n    return params;\n}\nfunction interpolateParams(value, params, errors) {\n    var original = value.toString();\n    var str = original.replace(PARAM_REGEX, function (_, varName) {\n        var localVal = params[varName];\n        // this means that the value was never overidden 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}\nfunction iteratorToArray(iterator) {\n    var arr = [];\n    var item = iterator.next();\n    while (!item.done) {\n        arr.push(item.value);\n        item = iterator.next();\n    }\n    return arr;\n}\nvar DASH_CASE_REGEXP = /-+([a-z0-9])/g;\nfunction dashCaseToCamelCase(input) {\n    return input.replace(DASH_CASE_REGEXP, function () {\n        var m = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            m[_i] = arguments[_i];\n        }\n        return m[1].toUpperCase();\n    });\n}\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n    return duration === 0 || delay === 0;\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 * @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 */\nvar ANY_STATE = '*';\n/**\n * @param {?} transitionValue\n * @param {?} errors\n * @return {?}\n */\nfunction parseTransitionExpr(transitionValue, errors) {\n    var /** @type {?} */ expressions = [];\n    if (typeof transitionValue == 'string') {\n        ((transitionValue))\n            .split(/\\s*,\\s*/)\n            .forEach(function (str) { return 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        eventStr = parseAnimationAlias(eventStr, errors);\n    }\n    var /** @type {?} */ 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    var /** @type {?} */ fromState = match[1];\n    var /** @type {?} */ separator = match[2];\n    var /** @type {?} */ toState = match[3];\n    expressions.push(makeLambdaFromStates(fromState, toState));\n    var /** @type {?} */ 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        default:\n            errors.push(\"The transition alias value \\\"\" + alias + \"\\\" is not supported\");\n            return '* => *';\n    }\n}\nvar TRUE_BOOLEAN_VALUES = new Set();\nTRUE_BOOLEAN_VALUES.add('true');\nTRUE_BOOLEAN_VALUES.add('1');\nvar FALSE_BOOLEAN_VALUES = new Set();\nFALSE_BOOLEAN_VALUES.add('false');\nFALSE_BOOLEAN_VALUES.add('0');\n/**\n * @param {?} lhs\n * @param {?} rhs\n * @return {?}\n */\nfunction makeLambdaFromStates(lhs, rhs) {\n    var /** @type {?} */ LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n    var /** @type {?} */ RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n    return function (fromState, toState) {\n        var /** @type {?} */ lhsMatch = lhs == ANY_STATE || lhs == fromState;\n        var /** @type {?} */ 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 * @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 */\nvar SELF_TOKEN = ':self';\nvar SELF_TOKEN_REGEX = new RegExp(\"s*\" + SELF_TOKEN + \"s*,?\", 'g');\n/**\n * @param {?} metadata\n * @param {?} errors\n * @return {?}\n */\nfunction buildAnimationAst(metadata, errors) {\n    return new AnimationAstBuilderVisitor().build(metadata, errors);\n}\nvar LEAVE_TOKEN = ':leave';\nvar LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');\nvar ENTER_TOKEN = ':enter';\nvar ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');\nvar ROOT_SELECTOR = '';\nvar AnimationAstBuilderVisitor = (function () {\n    function AnimationAstBuilderVisitor() {\n    }\n    /**\n     * @param {?} metadata\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.build = function (metadata, errors) {\n        var /** @type {?} */ context = new AnimationAstBuilderContext(errors);\n        this._resetContextStyleTimingState(context);\n        return (visitDslNode(this, normalizeAnimationEntry(metadata), context));\n    };\n    /**\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._resetContextStyleTimingState = function (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    AnimationAstBuilderVisitor.prototype.visitTrigger = function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ queryCount = context.queryCount = 0;\n        var /** @type {?} */ depCount = context.depCount = 0;\n        var /** @type {?} */ states = [];\n        var /** @type {?} */ transitions = [];\n        metadata.definitions.forEach(function (def) {\n            _this._resetContextStyleTimingState(context);\n            if (def.type == 0 /* State */) {\n                var /** @type {?} */ stateDef_1 = (def);\n                var /** @type {?} */ name = stateDef_1.name;\n                name.split(/\\s*,\\s*/).forEach(function (n) {\n                    stateDef_1.name = n;\n                    states.push(_this.visitState(stateDef_1, context));\n                });\n                stateDef_1.name = name;\n            }\n            else if (def.type == 1 /* Transition */) {\n                var /** @type {?} */ 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: states, transitions: transitions, queryCount: queryCount, depCount: depCount,\n            options: null\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitState = function (metadata, context) {\n        var /** @type {?} */ styleAst = this.visitStyle(metadata.styles, context);\n        var /** @type {?} */ astParams = (metadata.options && metadata.options.params) || null;\n        if (styleAst.containsDynamicStyles) {\n            var /** @type {?} */ missingSubs_1 = new Set();\n            var /** @type {?} */ params_1 = astParams || {};\n            styleAst.styles.forEach(function (value) {\n                if (isObject(value)) {\n                    var /** @type {?} */ stylesObj_1 = (value);\n                    Object.keys(stylesObj_1).forEach(function (prop) {\n                        extractStyleParams(stylesObj_1[prop]).forEach(function (sub) {\n                            if (!params_1.hasOwnProperty(sub)) {\n                                missingSubs_1.add(sub);\n                            }\n                        });\n                    });\n                }\n            });\n            if (missingSubs_1.size) {\n                var /** @type {?} */ missingSubsArr = iteratorToArray(missingSubs_1.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    AnimationAstBuilderVisitor.prototype.visitTransition = function (metadata, context) {\n        context.queryCount = 0;\n        context.depCount = 0;\n        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n        var /** @type {?} */ matchers = parseTransitionExpr(metadata.expr, context.errors);\n        return {\n            type: 1 /* Transition */,\n            matchers: matchers,\n            animation: 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    AnimationAstBuilderVisitor.prototype.visitSequence = function (metadata, context) {\n        var _this = this;\n        return {\n            type: 2 /* Sequence */,\n            steps: metadata.steps.map(function (s) { return visitDslNode(_this, s, context); }),\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitGroup = function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ currentTime = context.currentTime;\n        var /** @type {?} */ furthestTime = 0;\n        var /** @type {?} */ steps = metadata.steps.map(function (step) {\n            context.currentTime = currentTime;\n            var /** @type {?} */ 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: steps,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitAnimate = function (metadata, context) {\n        var /** @type {?} */ timingAst = constructTimingAst(metadata.timings, context.errors);\n        context.currentAnimateTimings = timingAst;\n        var /** @type {?} */ styleAst;\n        var /** @type {?} */ styleMetadata = metadata.styles ? metadata.styles : style({});\n        if (styleMetadata.type == 5 /* Keyframes */) {\n            styleAst = this.visitKeyframes(/** @type {?} */ (styleMetadata), context);\n        }\n        else {\n            var /** @type {?} */ styleMetadata_1 = (metadata.styles);\n            var /** @type {?} */ isEmpty = false;\n            if (!styleMetadata_1) {\n                isEmpty = true;\n                var /** @type {?} */ newStyleData = {};\n                if (timingAst.easing) {\n                    newStyleData['easing'] = timingAst.easing;\n                }\n                styleMetadata_1 = style(newStyleData);\n            }\n            context.currentTime += timingAst.duration + timingAst.delay;\n            var /** @type {?} */ _styleAst = this.visitStyle(styleMetadata_1, 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    AnimationAstBuilderVisitor.prototype.visitStyle = function (metadata, context) {\n        var /** @type {?} */ ast = this._makeStyleAst(metadata, context);\n        this._validateStyleAst(ast, context);\n        return ast;\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._makeStyleAst = function (metadata, context) {\n        var /** @type {?} */ styles = [];\n        if (Array.isArray(metadata.styles)) {\n            ((metadata.styles)).forEach(function (styleTuple) {\n                if (typeof styleTuple == 'string') {\n                    if (styleTuple == AUTO_STYLE) {\n                        styles.push(/** @type {?} */ (styleTuple));\n                    }\n                    else {\n                        context.errors.push(\"The provided style string value \" + styleTuple + \" is not allowed.\");\n                    }\n                }\n                else {\n                    styles.push(/** @type {?} */ (styleTuple));\n                }\n            });\n        }\n        else {\n            styles.push(metadata.styles);\n        }\n        var /** @type {?} */ containsDynamicStyles = false;\n        var /** @type {?} */ collectedEasing = null;\n        styles.forEach(function (styleData) {\n            if (isObject(styleData)) {\n                var /** @type {?} */ styleMap = (styleData);\n                var /** @type {?} */ easing = styleMap['easing'];\n                if (easing) {\n                    collectedEasing = (easing);\n                    delete styleMap['easing'];\n                }\n                if (!containsDynamicStyles) {\n                    for (var /** @type {?} */ prop in styleMap) {\n                        var /** @type {?} */ 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: styles,\n            easing: collectedEasing,\n            offset: metadata.offset, containsDynamicStyles: containsDynamicStyles,\n            options: null\n        };\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._validateStyleAst = function (ast, context) {\n        var /** @type {?} */ timings = context.currentAnimateTimings;\n        var /** @type {?} */ endTime = context.currentTime;\n        var /** @type {?} */ startTime = context.currentTime;\n        if (timings && startTime > 0) {\n            startTime -= timings.duration + timings.delay;\n        }\n        ast.styles.forEach(function (tuple) {\n            if (typeof tuple == 'string')\n                return;\n            Object.keys(tuple).forEach(function (prop) {\n                var /** @type {?} */ collectedStyles = context.collectedStyles[((context.currentQuerySelector))];\n                var /** @type {?} */ collectedEntry = collectedStyles[prop];\n                var /** @type {?} */ 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: startTime, endTime: 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    AnimationAstBuilderVisitor.prototype.visitKeyframes = function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ 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        var /** @type {?} */ MAX_KEYFRAME_OFFSET = 1;\n        var /** @type {?} */ totalKeyframesWithOffsets = 0;\n        var /** @type {?} */ offsets = [];\n        var /** @type {?} */ offsetsOutOfOrder = false;\n        var /** @type {?} */ keyframesOutOfRange = false;\n        var /** @type {?} */ previousOffset = 0;\n        var /** @type {?} */ keyframes = metadata.steps.map(function (styles) {\n            var /** @type {?} */ style$$1 = _this._makeStyleAst(styles, context);\n            var /** @type {?} */ offsetVal = style$$1.offset != null ? style$$1.offset : consumeOffset(style$$1.styles);\n            var /** @type {?} */ offset = 0;\n            if (offsetVal != null) {\n                totalKeyframesWithOffsets++;\n                offset = style$$1.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$$1;\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        var /** @type {?} */ length = metadata.steps.length;\n        var /** @type {?} */ 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        var /** @type {?} */ limit = length - 1;\n        var /** @type {?} */ currentTime = context.currentTime;\n        var /** @type {?} */ currentAnimateTimings = ((context.currentAnimateTimings));\n        var /** @type {?} */ animateDuration = currentAnimateTimings.duration;\n        keyframes.forEach(function (kf, i) {\n            var /** @type {?} */ offset = generatedOffset > 0 ? (i == limit ? 1 : (generatedOffset * i)) : offsets[i];\n            var /** @type {?} */ 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    AnimationAstBuilderVisitor.prototype.visitReference = function (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    AnimationAstBuilderVisitor.prototype.visitAnimateChild = function (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    AnimationAstBuilderVisitor.prototype.visitAnimateRef = function (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    AnimationAstBuilderVisitor.prototype.visitQuery = function (metadata, context) {\n        var /** @type {?} */ parentSelector = ((context.currentQuerySelector));\n        var /** @type {?} */ options = ((metadata.options || {}));\n        context.queryCount++;\n        context.currentQuery = metadata;\n        var _a = normalizeSelector(metadata.selector), selector = _a[0], includeSelf = _a[1];\n        context.currentQuerySelector =\n            parentSelector.length ? (parentSelector + ' ' + selector) : selector;\n        getOrSetAsInMap(context.collectedStyles, context.currentQuerySelector, {});\n        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n        context.currentQuery = null;\n        context.currentQuerySelector = parentSelector;\n        return {\n            type: 11 /* Query */,\n            selector: selector,\n            limit: options.limit || 0,\n            optional: !!options.optional, includeSelf: includeSelf, animation: animation,\n            originalSelector: metadata.selector,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitStagger = function (metadata, context) {\n        if (!context.currentQuery) {\n            context.errors.push(\"stagger() can only be used inside of query()\");\n        }\n        var /** @type {?} */ 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: timings,\n            options: null\n        };\n    };\n    return AnimationAstBuilderVisitor;\n}());\n/**\n * @param {?} selector\n * @return {?}\n */\nfunction normalizeSelector(selector) {\n    var /** @type {?} */ hasAmpersand = selector.split(/\\s*,\\s*/).find(function (token) { return token == SELF_TOKEN; }) ? true : false;\n    if (hasAmpersand) {\n        selector = selector.replace(SELF_TOKEN_REGEX, '');\n    }\n    selector = selector.replace(ENTER_TOKEN_REGEX, ENTER_SELECTOR)\n        .replace(LEAVE_TOKEN_REGEX, LEAVE_SELECTOR)\n        .replace(/@\\*/g, NG_TRIGGER_SELECTOR)\n        .replace(/@\\w+/g, function (match) { return 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}\nvar AnimationAstBuilderContext = (function () {\n    /**\n     * @param {?} errors\n     */\n    function AnimationAstBuilderContext(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    return AnimationAstBuilderContext;\n}());\n/**\n * @param {?} styles\n * @return {?}\n */\nfunction consumeOffset(styles) {\n    if (typeof styles == 'string')\n        return null;\n    var /** @type {?} */ offset = null;\n    if (Array.isArray(styles)) {\n        styles.forEach(function (styleTuple) {\n            if (isObject(styleTuple) && styleTuple.hasOwnProperty('offset')) {\n                var /** @type {?} */ obj = (styleTuple);\n                offset = parseFloat(/** @type {?} */ (obj['offset']));\n                delete obj['offset'];\n            }\n        });\n    }\n    else if (isObject(styles) && styles.hasOwnProperty('offset')) {\n        var /** @type {?} */ 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    var /** @type {?} */ timings = null;\n    if (value.hasOwnProperty('duration')) {\n        timings = (value);\n    }\n    else if (typeof value == 'number') {\n        var /** @type {?} */ duration = resolveTiming(/** @type {?} */ (value), errors).duration;\n        return makeTimingAst(/** @type {?} */ (duration), 0, '');\n    }\n    var /** @type {?} */ strValue = (value);\n    var /** @type {?} */ isDynamic = strValue.split(/\\s+/).some(function (v) { return v.charAt(0) == '{' && v.charAt(1) == '{'; });\n    if (isDynamic) {\n        var /** @type {?} */ ast = (makeTimingAst(0, 0, ''));\n        ast.dynamic = true;\n        ast.strValue = strValue;\n        return (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'] = ((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: duration, delay: delay, easing: easing };\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 * @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, subTimeline) {\n    if (easing === void 0) { easing = null; }\n    if (subTimeline === void 0) { subTimeline = false; }\n    return {\n        type: 1 /* TimelineAnimation */,\n        element: element,\n        keyframes: keyframes,\n        preStyleProps: preStyleProps,\n        postStyleProps: postStyleProps,\n        duration: duration,\n        delay: delay,\n        totalTime: duration + delay, easing: easing, subTimeline: subTimeline\n    };\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 */\nvar ElementInstructionMap = (function () {\n    function ElementInstructionMap() {\n        this._map = new Map();\n    }\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.consume = function (element) {\n        var /** @type {?} */ 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    ElementInstructionMap.prototype.append = function (element, instructions) {\n        var /** @type {?} */ existingInstructions = this._map.get(element);\n        if (!existingInstructions) {\n            this._map.set(element, existingInstructions = []);\n        }\n        existingInstructions.push.apply(existingInstructions, instructions);\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.has = function (element) { return this._map.has(element); };\n    /**\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.clear = function () { this._map.clear(); };\n    return ElementInstructionMap;\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 */\nvar ONE_FRAME_IN_MILLISECONDS = 1;\n/**\n * @param {?} driver\n * @param {?} rootElement\n * @param {?} ast\n * @param {?=} startingStyles\n * @param {?=} finalStyles\n * @param {?=} options\n * @param {?=} subInstructions\n * @param {?=} errors\n * @return {?}\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, startingStyles, finalStyles, options, subInstructions, errors) {\n    if (startingStyles === void 0) { startingStyles = {}; }\n    if (finalStyles === void 0) { finalStyles = {}; }\n    if (errors === void 0) { errors = []; }\n    return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, startingStyles, finalStyles, options, subInstructions, errors);\n}\nvar AnimationTimelineBuilderVisitor = (function () {\n    function AnimationTimelineBuilderVisitor() {\n    }\n    /**\n     * @param {?} driver\n     * @param {?} rootElement\n     * @param {?} ast\n     * @param {?} startingStyles\n     * @param {?} finalStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @param {?=} errors\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.buildKeyframes = function (driver, rootElement, ast, startingStyles, finalStyles, options, subInstructions, errors) {\n        if (errors === void 0) { errors = []; }\n        subInstructions = subInstructions || new ElementInstructionMap();\n        var /** @type {?} */ context = new AnimationTimelineContext(driver, rootElement, subInstructions, 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        var /** @type {?} */ timelines = context.timelines.filter(function (timeline) { return timeline.containsAnimation(); });\n        if (timelines.length && Object.keys(finalStyles).length) {\n            var /** @type {?} */ 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(function (timeline) { return timeline.buildKeyframes(); }) :\n            [createTimelineInstruction(rootElement, [], [], [], 0, 0, '', false)];\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitTrigger = function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitState = function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitTransition = function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitAnimateChild = function (ast, context) {\n        var /** @type {?} */ elementInstructions = context.subInstructions.consume(context.element);\n        if (elementInstructions) {\n            var /** @type {?} */ innerContext = context.createSubContext(ast.options);\n            var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n            var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitAnimateRef = function (ast, context) {\n        var /** @type {?} */ 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     * @param {?} instructions\n     * @param {?} context\n     * @param {?} options\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype._visitSubInstructions = function (instructions, context, options) {\n        var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ furthestTime = startTime;\n        // this is a special-case for when a user wants to skip a sub\n        // animation from being fired entirely.\n        var /** @type {?} */ duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n        var /** @type {?} */ delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n        if (duration !== 0) {\n            instructions.forEach(function (instruction) {\n                var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitReference = function (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    AnimationTimelineBuilderVisitor.prototype.visitSequence = function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ subContextCount = context.subContextCount;\n        var /** @type {?} */ ctx = context;\n        var /** @type {?} */ 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                var /** @type {?} */ delay = resolveTimingValue(options.delay);\n                ctx.delayNextStep(delay);\n            }\n        }\n        if (ast.steps.length) {\n            ast.steps.forEach(function (s) { return 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    AnimationTimelineBuilderVisitor.prototype.visitGroup = function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ innerTimelines = [];\n        var /** @type {?} */ furthestTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n        ast.steps.forEach(function (s) {\n            var /** @type {?} */ 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(function (timeline) { return context.currentTimeline.mergeTimelineCollectedStyles(timeline); });\n        context.transformIntoNewTimeline(furthestTime);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype._visitTiming = function (ast, context) {\n        if (((ast)).dynamic) {\n            var /** @type {?} */ strValue = ((ast)).strValue;\n            var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitAnimate = function (ast, context) {\n        var /** @type {?} */ timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);\n        var /** @type {?} */ timeline = context.currentTimeline;\n        if (timings.delay) {\n            context.incrementTime(timings.delay);\n            timeline.snapshotCurrentStyles();\n        }\n        var /** @type {?} */ style$$1 = ast.style;\n        if (style$$1.type == 5 /* Keyframes */) {\n            this.visitKeyframes(style$$1, context);\n        }\n        else {\n            context.incrementTime(timings.duration);\n            this.visitStyle(/** @type {?} */ (style$$1), 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    AnimationTimelineBuilderVisitor.prototype.visitStyle = function (ast, context) {\n        var /** @type {?} */ timeline = context.currentTimeline;\n        var /** @type {?} */ timings = ((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        var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitKeyframes = function (ast, context) {\n        var /** @type {?} */ currentAnimateTimings = ((context.currentAnimateTimings));\n        var /** @type {?} */ startTime = (((context.currentTimeline))).duration;\n        var /** @type {?} */ duration = currentAnimateTimings.duration;\n        var /** @type {?} */ innerContext = context.createSubContext();\n        var /** @type {?} */ innerTimeline = innerContext.currentTimeline;\n        innerTimeline.easing = currentAnimateTimings.easing;\n        ast.styles.forEach(function (step) {\n            var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitQuery = function (ast, context) {\n        var _this = this;\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        var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ options = ((ast.options || {}));\n        var /** @type {?} */ 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        var /** @type {?} */ furthestTime = startTime;\n        var /** @type {?} */ elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n        context.currentQueryTotal = elms.length;\n        var /** @type {?} */ sameElementTimeline = null;\n        elms.forEach(function (element, i) {\n            context.currentQueryIndex = i;\n            var /** @type {?} */ 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            var /** @type {?} */ 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    AnimationTimelineBuilderVisitor.prototype.visitStagger = function (ast, context) {\n        var /** @type {?} */ parentContext = ((context.parentContext));\n        var /** @type {?} */ tl = context.currentTimeline;\n        var /** @type {?} */ timings = ast.timings;\n        var /** @type {?} */ duration = Math.abs(timings.duration);\n        var /** @type {?} */ maxTime = duration * (context.currentQueryTotal - 1);\n        var /** @type {?} */ delay = duration * context.currentQueryIndex;\n        var /** @type {?} */ 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        var /** @type {?} */ timeline = context.currentTimeline;\n        if (delay) {\n            timeline.delayNextStep(delay);\n        }\n        var /** @type {?} */ 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    return AnimationTimelineBuilderVisitor;\n}());\nvar DEFAULT_NOOP_PREVIOUS_NODE = ({});\nvar AnimationTimelineContext = (function () {\n    /**\n     * @param {?} _driver\n     * @param {?} element\n     * @param {?} subInstructions\n     * @param {?} errors\n     * @param {?} timelines\n     * @param {?=} initialTimeline\n     */\n    function AnimationTimelineContext(_driver, element, subInstructions, errors, timelines, initialTimeline) {\n        this._driver = _driver;\n        this.element = element;\n        this.subInstructions = subInstructions;\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(element, 0);\n        timelines.push(this.currentTimeline);\n    }\n    Object.defineProperty(AnimationTimelineContext.prototype, \"params\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.options.params; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} options\n     * @param {?=} skipIfExists\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.updateOptions = function (options, skipIfExists) {\n        var _this = this;\n        if (!options)\n            return;\n        var /** @type {?} */ newOptions = (options);\n        var /** @type {?} */ optionsToUpdate = this.options;\n        // NOTE: this will get patched up when other animation methods support duration overrides\n        if (newOptions.duration != null) {\n            ((optionsToUpdate)).duration = resolveTimingValue(newOptions.duration);\n        }\n        if (newOptions.delay != null) {\n            optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n        }\n        var /** @type {?} */ newParams = newOptions.params;\n        if (newParams) {\n            var /** @type {?} */ paramsToUpdate_1 = ((optionsToUpdate.params));\n            if (!paramsToUpdate_1) {\n                paramsToUpdate_1 = this.options.params = {};\n            }\n            Object.keys(newParams).forEach(function (name) {\n                if (!skipIfExists || !paramsToUpdate_1.hasOwnProperty(name)) {\n                    paramsToUpdate_1[name] = interpolateParams(newParams[name], paramsToUpdate_1, _this.errors);\n                }\n            });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype._copyOptions = function () {\n        var /** @type {?} */ options = {};\n        if (this.options) {\n            var /** @type {?} */ oldParams_1 = this.options.params;\n            if (oldParams_1) {\n                var /** @type {?} */ params_2 = options['params'] = {};\n                Object.keys(oldParams_1).forEach(function (name) { params_2[name] = oldParams_1[name]; });\n            }\n        }\n        return options;\n    };\n    /**\n     * @param {?=} options\n     * @param {?=} element\n     * @param {?=} newTime\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.createSubContext = function (options, element, newTime) {\n        if (options === void 0) { options = null; }\n        var /** @type {?} */ target = element || this.element;\n        var /** @type {?} */ context = new AnimationTimelineContext(this._driver, target, this.subInstructions, 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    AnimationTimelineContext.prototype.transformIntoNewTimeline = function (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    AnimationTimelineContext.prototype.appendInstructionToTimeline = function (instruction, duration, delay) {\n        var /** @type {?} */ updatedTimings = {\n            duration: duration != null ? duration : instruction.duration,\n            delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n            easing: ''\n        };\n        var /** @type {?} */ builder = new SubTimelineBuilder(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    AnimationTimelineContext.prototype.incrementTime = function (time) {\n        this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n    };\n    /**\n     * @param {?} delay\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.delayNextStep = function (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    AnimationTimelineContext.prototype.invokeQuery = function (selector, originalSelector, limit, includeSelf, optional, errors) {\n        var /** @type {?} */ results = [];\n        if (includeSelf) {\n            results.push(this.element);\n        }\n        if (selector.length > 0) {\n            var /** @type {?} */ multi = limit != 1;\n            var /** @type {?} */ elements = this._driver.query(this.element, selector, multi);\n            if (limit !== 0) {\n                elements = elements.slice(0, limit);\n            }\n            results.push.apply(results, 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    return AnimationTimelineContext;\n}());\nvar TimelineBuilder = (function () {\n    /**\n     * @param {?} element\n     * @param {?} startTime\n     * @param {?=} _elementTimelineStylesLookup\n     */\n    function TimelineBuilder(element, startTime, _elementTimelineStylesLookup) {\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 = 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    TimelineBuilder.prototype.containsAnimation = function () {\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    TimelineBuilder.prototype.getCurrentStyleProperties = function () { return Object.keys(this._currentKeyframe); };\n    Object.defineProperty(TimelineBuilder.prototype, \"currentTime\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.startTime + this.duration; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} delay\n     * @return {?}\n     */\n    TimelineBuilder.prototype.delayNextStep = function (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        var /** @type {?} */ 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    TimelineBuilder.prototype.fork = function (element, currentTime) {\n        this.applyStylesToKeyframe();\n        return new TimelineBuilder(element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype._loadKeyframe = function () {\n        if (this._currentKeyframe) {\n            this._previousKeyframe = this._currentKeyframe;\n        }\n        this._currentKeyframe = ((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    TimelineBuilder.prototype.forwardFrame = function () {\n        this.duration += ONE_FRAME_IN_MILLISECONDS;\n        this._loadKeyframe();\n    };\n    /**\n     * @param {?} time\n     * @return {?}\n     */\n    TimelineBuilder.prototype.forwardTime = function (time) {\n        this.applyStylesToKeyframe();\n        this.duration = time;\n        this._loadKeyframe();\n    };\n    /**\n     * @param {?} prop\n     * @param {?} value\n     * @return {?}\n     */\n    TimelineBuilder.prototype._updateStyle = function (prop, value) {\n        this._localTimelineStyles[prop] = value;\n        this._globalTimelineStyles[prop] = value;\n        this._styleSummary[prop] = { time: this.currentTime, value: value };\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.allowOnlyTimelineStyles = function () { return this._currentEmptyStepKeyframe !== this._currentKeyframe; };\n    /**\n     * @param {?} easing\n     * @return {?}\n     */\n    TimelineBuilder.prototype.applyEmptyStep = function (easing) {\n        var _this = this;\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(function (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    TimelineBuilder.prototype.setStyles = function (input, easing, errors, options) {\n        var _this = this;\n        if (easing) {\n            this._previousKeyframe['easing'] = easing;\n        }\n        var /** @type {?} */ params = (options && options.params) || {};\n        var /** @type {?} */ styles = flattenStyles(input, this._globalTimelineStyles);\n        Object.keys(styles).forEach(function (prop) {\n            var /** @type {?} */ 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    TimelineBuilder.prototype.applyStylesToKeyframe = function () {\n        var _this = this;\n        var /** @type {?} */ styles = this._pendingStyles;\n        var /** @type {?} */ props = Object.keys(styles);\n        if (props.length == 0)\n            return;\n        this._pendingStyles = {};\n        props.forEach(function (prop) {\n            var /** @type {?} */ val = styles[prop];\n            _this._currentKeyframe[prop] = val;\n        });\n        Object.keys(this._localTimelineStyles).forEach(function (prop) {\n            if (!_this._currentKeyframe.hasOwnProperty(prop)) {\n                _this._currentKeyframe[prop] = _this._localTimelineStyles[prop];\n            }\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.snapshotCurrentStyles = function () {\n        var _this = this;\n        Object.keys(this._localTimelineStyles).forEach(function (prop) {\n            var /** @type {?} */ val = _this._localTimelineStyles[prop];\n            _this._pendingStyles[prop] = val;\n            _this._updateStyle(prop, val);\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.getFinalKeyframe = function () { return this._keyframes.get(this.duration); };\n    Object.defineProperty(TimelineBuilder.prototype, \"properties\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            var /** @type {?} */ properties = [];\n            for (var /** @type {?} */ prop in this._currentKeyframe) {\n                properties.push(prop);\n            }\n            return properties;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} timeline\n     * @return {?}\n     */\n    TimelineBuilder.prototype.mergeTimelineCollectedStyles = function (timeline) {\n        var _this = this;\n        Object.keys(timeline._styleSummary).forEach(function (prop) {\n            var /** @type {?} */ details0 = _this._styleSummary[prop];\n            var /** @type {?} */ 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    TimelineBuilder.prototype.buildKeyframes = function () {\n        var _this = this;\n        this.applyStylesToKeyframe();\n        var /** @type {?} */ preStyleProps = new Set();\n        var /** @type {?} */ postStyleProps = new Set();\n        var /** @type {?} */ isEmpty = this._keyframes.size === 1 && this.duration === 0;\n        var /** @type {?} */ finalKeyframes = [];\n        this._keyframes.forEach(function (keyframe, time) {\n            var /** @type {?} */ finalKeyframe = copyStyles(keyframe, true);\n            Object.keys(finalKeyframe).forEach(function (prop) {\n                var /** @type {?} */ 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        var /** @type {?} */ preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];\n        var /** @type {?} */ 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            var /** @type {?} */ kf0 = finalKeyframes[0];\n            var /** @type {?} */ 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    return TimelineBuilder;\n}());\nvar SubTimelineBuilder = (function (_super) {\n    tslib_1.__extends(SubTimelineBuilder, _super);\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} preStyleProps\n     * @param {?} postStyleProps\n     * @param {?} timings\n     * @param {?=} _stretchStartingKeyframe\n     */\n    function SubTimelineBuilder(element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe) {\n        if (_stretchStartingKeyframe === void 0) { _stretchStartingKeyframe = false; }\n        var _this = _super.call(this, element, timings.delay) || this;\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        return _this;\n    }\n    /**\n     * @return {?}\n     */\n    SubTimelineBuilder.prototype.containsAnimation = function () { return this.keyframes.length > 1; };\n    /**\n     * @return {?}\n     */\n    SubTimelineBuilder.prototype.buildKeyframes = function () {\n        var /** @type {?} */ keyframes = this.keyframes;\n        var _a = this.timings, delay = _a.delay, duration = _a.duration, easing = _a.easing;\n        if (this._stretchStartingKeyframe && delay) {\n            var /** @type {?} */ newKeyframes = [];\n            var /** @type {?} */ totalTime = duration + delay;\n            var /** @type {?} */ startingGap = delay / totalTime;\n            // the original starting keyframe now starts once the delay is done\n            var /** @type {?} */ newFirstKeyframe = copyStyles(keyframes[0], false);\n            newFirstKeyframe['offset'] = 0;\n            newKeyframes.push(newFirstKeyframe);\n            var /** @type {?} */ 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            var /** @type {?} */ limit = keyframes.length - 1;\n            for (var /** @type {?} */ i = 1; i <= limit; i++) {\n                var /** @type {?} */ kf = copyStyles(keyframes[i], false);\n                var /** @type {?} */ oldOffset = (kf['offset']);\n                var /** @type {?} */ 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    return SubTimelineBuilder;\n}(TimelineBuilder));\n/**\n * @param {?} offset\n * @param {?=} decimalPoints\n * @return {?}\n */\nfunction roundOffset(offset, decimalPoints) {\n    if (decimalPoints === void 0) { decimalPoints = 3; }\n    var /** @type {?} */ 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    var /** @type {?} */ styles = {};\n    var /** @type {?} */ allProperties;\n    input.forEach(function (token) {\n        if (token === '*') {\n            allProperties = allProperties || Object.keys(allStyles);\n            allProperties.forEach(function (prop) { styles[prop] = AUTO_STYLE; });\n        }\n        else {\n            copyStyles(/** @type {?} */ (token), false, styles);\n        }\n    });\n    return styles;\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 */\nvar Animation = (function () {\n    /**\n     * @param {?} _driver\n     * @param {?} input\n     */\n    function Animation(_driver, input) {\n        this._driver = _driver;\n        var errors = [];\n        var ast = buildAnimationAst(input, errors);\n        if (errors.length) {\n            var 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    Animation.prototype.buildTimelines = function (element, startingStyles, destinationStyles, options, subInstructions) {\n        var /** @type {?} */ start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) : (startingStyles);\n        var /** @type {?} */ dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) : (destinationStyles);\n        var /** @type {?} */ errors = [];\n        subInstructions = subInstructions || new ElementInstructionMap();\n        var /** @type {?} */ result = buildAnimationTimelines(this._driver, element, this._animationAst, start, dest, options, subInstructions, errors);\n        if (errors.length) {\n            var /** @type {?} */ errorMessage = \"animation building failed:\\n\" + errors.join(\"\\n\");\n            throw new Error(errorMessage);\n        }\n        return result;\n    };\n    return Animation;\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 * @experimental Animation support is experimental.\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 */ var AnimationStyleNormalizer = (function () {\n    function AnimationStyleNormalizer() {\n    }\n    return AnimationStyleNormalizer;\n}());\n/**\n * @experimental Animation support is experimental.\n */\nvar NoopAnimationStyleNormalizer = (function () {\n    function NoopAnimationStyleNormalizer() {\n    }\n    NoopAnimationStyleNormalizer.prototype.normalizePropertyName = function (propertyName, errors) { return propertyName; };\n    NoopAnimationStyleNormalizer.prototype.normalizeStyleValue = function (userProvidedProperty, normalizedProperty, value, errors) {\n        return value;\n    };\n    return NoopAnimationStyleNormalizer;\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 */\nvar WebAnimationsStyleNormalizer = (function (_super) {\n    tslib_1.__extends(WebAnimationsStyleNormalizer, _super);\n    function WebAnimationsStyleNormalizer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    WebAnimationsStyleNormalizer.prototype.normalizePropertyName = function (propertyName, errors) {\n        return dashCaseToCamelCase(propertyName);\n    };\n    /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    WebAnimationsStyleNormalizer.prototype.normalizeStyleValue = function (userProvidedProperty, normalizedProperty, value, errors) {\n        var /** @type {?} */ unit = '';\n        var /** @type {?} */ 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                var /** @type {?} */ 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    return WebAnimationsStyleNormalizer;\n}(AnimationStyleNormalizer));\nvar DIMENSIONAL_PROP_MAP = 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/**\n * @param {?} keys\n * @return {?}\n */\nfunction makeBooleanMap(keys) {\n    var /** @type {?} */ map = {};\n    keys.forEach(function (key) { return map[key] = true; });\n    return map;\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 * @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 {?=} errors\n * @return {?}\n */\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, errors) {\n    return {\n        type: 0 /* TransitionAnimation */,\n        element: element,\n        triggerName: triggerName,\n        isRemovalTransition: isRemovalTransition,\n        fromState: fromState,\n        fromStyles: fromStyles,\n        toState: toState,\n        toStyles: toStyles,\n        timelines: timelines,\n        queriedElements: queriedElements,\n        preStyleProps: preStyleProps,\n        postStyleProps: postStyleProps,\n        errors: errors\n    };\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 */\nvar EMPTY_OBJECT = {};\nvar AnimationTransitionFactory = (function () {\n    /**\n     * @param {?} _triggerName\n     * @param {?} ast\n     * @param {?} _stateStyles\n     */\n    function AnimationTransitionFactory(_triggerName, ast, _stateStyles) {\n        this._triggerName = _triggerName;\n        this.ast = ast;\n        this._stateStyles = _stateStyles;\n    }\n    /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.match = function (currentState, nextState) {\n        return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState);\n    };\n    /**\n     * @param {?} stateName\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.buildStyles = function (stateName, params, errors) {\n        var /** @type {?} */ backupStateStyler = this._stateStyles['*'];\n        var /** @type {?} */ stateStyler = this._stateStyles[stateName];\n        var /** @type {?} */ 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 {?=} currentOptions\n     * @param {?=} nextOptions\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.build = function (driver, element, currentState, nextState, currentOptions, nextOptions, subInstructions) {\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;\n        var /** @type {?} */ currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;\n        var /** @type {?} */ currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n        var /** @type {?} */ nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;\n        var /** @type {?} */ nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n        var /** @type {?} */ queriedElements = new Set();\n        var /** @type {?} */ preStyleMap = new Map();\n        var /** @type {?} */ postStyleMap = new Map();\n        var /** @type {?} */ isRemoval = nextState === 'void';\n        var /** @type {?} */ animationOptions = { params: Object.assign({}, transitionAnimationParams, nextAnimationParams) };\n        var /** @type {?} */ timelines = buildAnimationTimelines(driver, element, this.ast.animation, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n        if (errors.length) {\n            return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, errors);\n        }\n        timelines.forEach(function (tl) {\n            var /** @type {?} */ elm = tl.element;\n            var /** @type {?} */ preProps = getOrSetAsInMap(preStyleMap, elm, {});\n            tl.preStyleProps.forEach(function (prop) { return preProps[prop] = true; });\n            var /** @type {?} */ postProps = getOrSetAsInMap(postStyleMap, elm, {});\n            tl.postStyleProps.forEach(function (prop) { return postProps[prop] = true; });\n            if (elm !== element) {\n                queriedElements.add(elm);\n            }\n        });\n        var /** @type {?} */ queriedElementsList = iteratorToArray(queriedElements.values());\n        return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap);\n    };\n    return AnimationTransitionFactory;\n}());\n/**\n * @param {?} matchFns\n * @param {?} currentState\n * @param {?} nextState\n * @return {?}\n */\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState) {\n    return matchFns.some(function (fn) { return fn(currentState, nextState); });\n}\nvar AnimationStateStyles = (function () {\n    /**\n     * @param {?} styles\n     * @param {?} defaultParams\n     */\n    function AnimationStateStyles(styles, defaultParams) {\n        this.styles = styles;\n        this.defaultParams = defaultParams;\n    }\n    /**\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationStateStyles.prototype.buildStyles = function (params, errors) {\n        var /** @type {?} */ finalStyles = {};\n        var /** @type {?} */ combinedParams = copyObj(this.defaultParams);\n        Object.keys(params).forEach(function (key) {\n            var /** @type {?} */ value = params[key];\n            if (value != null) {\n                combinedParams[key] = value;\n            }\n        });\n        this.styles.styles.forEach(function (value) {\n            if (typeof value !== 'string') {\n                var /** @type {?} */ styleObj_1 = (value);\n                Object.keys(styleObj_1).forEach(function (prop) {\n                    var /** @type {?} */ val = styleObj_1[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    return AnimationStateStyles;\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 * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} ast\n * @return {?}\n */\nfunction buildTrigger(name, ast) {\n    return new AnimationTrigger(name, ast);\n}\n/**\n * \\@experimental Animation support is experimental.\n */\nvar AnimationTrigger = (function () {\n    /**\n     * @param {?} name\n     * @param {?} ast\n     */\n    function AnimationTrigger(name, ast) {\n        var _this = this;\n        this.name = name;\n        this.ast = ast;\n        this.transitionFactories = [];\n        this.states = {};\n        ast.states.forEach(function (ast) {\n            var 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(function (ast) {\n            _this.transitionFactories.push(new AnimationTransitionFactory(name, ast, _this.states));\n        });\n        this.fallbackTransition = createFallbackTransition(name, this.states);\n    }\n    Object.defineProperty(AnimationTrigger.prototype, \"containsQueries\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.ast.queryCount > 0; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    AnimationTrigger.prototype.matchTransition = function (currentState, nextState) {\n        var /** @type {?} */ entry = this.transitionFactories.find(function (f) { return f.match(currentState, nextState); });\n        return entry || null;\n    };\n    /**\n     * @param {?} currentState\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTrigger.prototype.matchStyles = function (currentState, params, errors) {\n        return this.fallbackTransition.buildStyles(currentState, params, errors);\n    };\n    return AnimationTrigger;\n}());\n/**\n * @param {?} triggerName\n * @param {?} states\n * @return {?}\n */\nfunction createFallbackTransition(triggerName, states) {\n    var /** @type {?} */ matchers = [function (fromState, toState) { return true; }];\n    var /** @type {?} */ animation = { type: 2 /* Sequence */, steps: [], options: null };\n    var /** @type {?} */ transition = {\n        type: 1 /* Transition */,\n        animation: animation,\n        matchers: 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 * @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 */\nvar EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();\nvar TimelineAnimationEngine = (function () {\n    /**\n     * @param {?} _driver\n     * @param {?} _normalizer\n     */\n    function TimelineAnimationEngine(_driver, _normalizer) {\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    TimelineAnimationEngine.prototype.register = function (id, metadata) {\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = buildAnimationAst(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     * @param {?} i\n     * @param {?} preStyles\n     * @param {?=} postStyles\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype._buildPlayer = function (i, preStyles, postStyles) {\n        var /** @type {?} */ element = i.element;\n        var /** @type {?} */ keyframes = normalizeKeyframes(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles);\n        return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, []);\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.create = function (id, element, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = this._animations[id];\n        var /** @type {?} */ instructions;\n        var /** @type {?} */ autoStylesMap = new Map();\n        if (ast) {\n            instructions = buildAnimationTimelines(this._driver, element, ast, {}, {}, options, EMPTY_INSTRUCTION_MAP, errors);\n            instructions.forEach(function (inst) {\n                var /** @type {?} */ styles = getOrSetAsInMap(autoStylesMap, inst.element, {});\n                inst.postStyleProps.forEach(function (prop) { return 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(function (styles, element) {\n            Object.keys(styles).forEach(function (prop) { styles[prop] = _this._driver.computeStyle(element, prop, AUTO_STYLE); });\n        });\n        var /** @type {?} */ players = instructions.map(function (i) {\n            var /** @type {?} */ styles = autoStylesMap.get(i.element);\n            return _this._buildPlayer(i, {}, styles);\n        });\n        var /** @type {?} */ player = optimizeGroupPlayer(players);\n        this._playersById[id] = player;\n        player.onDestroy(function () { return _this.destroy(id); });\n        this.players.push(player);\n        return player;\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.destroy = function (id) {\n        var /** @type {?} */ player = this._getPlayer(id);\n        player.destroy();\n        delete this._playersById[id];\n        var /** @type {?} */ index = this.players.indexOf(player);\n        if (index >= 0) {\n            this.players.splice(index, 1);\n        }\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype._getPlayer = function (id) {\n        var /** @type {?} */ 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    TimelineAnimationEngine.prototype.listen = function (id, element, eventName, callback) {\n        // triggerName, fromState, toState are all ignored for timeline animations\n        var /** @type {?} */ baseEvent = makeAnimationEvent(element, '', '', '');\n        listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n        return function () { };\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} command\n     * @param {?} args\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.command = function (id, element, command, args) {\n        if (command == 'register') {\n            this.register(id, /** @type {?} */ (args[0]));\n            return;\n        }\n        if (command == 'create') {\n            var /** @type {?} */ options = ((args[0] || {}));\n            this.create(id, element, options);\n            return;\n        }\n        var /** @type {?} */ 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    return TimelineAnimationEngine;\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 */\nvar QUEUED_CLASSNAME = 'ng-animate-queued';\nvar QUEUED_SELECTOR = '.ng-animate-queued';\nvar DISABLED_CLASSNAME = 'ng-animate-disabled';\nvar DISABLED_SELECTOR = '.ng-animate-disabled';\nvar EMPTY_PLAYER_ARRAY = [];\nvar NULL_REMOVAL_STATE = {\n    namespaceId: '',\n    setForRemoval: null,\n    hasAnimation: false,\n    removedBeforeQueried: false\n};\nvar NULL_REMOVED_QUERIED_STATE = {\n    namespaceId: '',\n    setForRemoval: null,\n    hasAnimation: false,\n    removedBeforeQueried: true\n};\nvar REMOVAL_FLAG = '__ng_removed';\nvar StateValue = (function () {\n    /**\n     * @param {?} input\n     */\n    function StateValue(input) {\n        var isObj = input && input.hasOwnProperty('value');\n        var value = isObj ? input['value'] : input;\n        this.value = normalizeTriggerValue(value);\n        if (isObj) {\n            var options = copyObj(input);\n            delete options['value'];\n            this.options = options;\n        }\n        else {\n            this.options = {};\n        }\n        if (!this.options.params) {\n            this.options.params = {};\n        }\n    }\n    Object.defineProperty(StateValue.prototype, \"params\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return (this.options.params); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} options\n     * @return {?}\n     */\n    StateValue.prototype.absorbOptions = function (options) {\n        var /** @type {?} */ newParams = options.params;\n        if (newParams) {\n            var /** @type {?} */ oldParams_2 = ((this.options.params));\n            Object.keys(newParams).forEach(function (prop) {\n                if (oldParams_2[prop] == null) {\n                    oldParams_2[prop] = newParams[prop];\n                }\n            });\n        }\n    };\n    return StateValue;\n}());\nvar VOID_VALUE = 'void';\nvar DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);\nvar DELETED_STATE_VALUE = new StateValue('DELETED');\nvar AnimationTransitionNamespace = (function () {\n    /**\n     * @param {?} id\n     * @param {?} hostElement\n     * @param {?} _engine\n     */\n    function AnimationTransitionNamespace(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    AnimationTransitionNamespace.prototype.listen = function (element, name, phase, callback) {\n        var _this = this;\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        var /** @type {?} */ listeners = getOrSetAsInMap(this._elementListeners, element, []);\n        var /** @type {?} */ data = { name: name, phase: phase, callback: callback };\n        listeners.push(data);\n        var /** @type {?} */ 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] = null;\n        }\n        return function () {\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(function () {\n                var /** @type {?} */ 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    AnimationTransitionNamespace.prototype.register = function (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     * @param {?} name\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype._getTrigger = function (name) {\n        var /** @type {?} */ 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    AnimationTransitionNamespace.prototype.trigger = function (element, triggerName, value, defaultToFallback) {\n        var _this = this;\n        if (defaultToFallback === void 0) { defaultToFallback = true; }\n        var /** @type {?} */ trigger = this._getTrigger(triggerName);\n        var /** @type {?} */ player = new TransitionAnimationPlayer(this.id, triggerName, element);\n        var /** @type {?} */ 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        var /** @type {?} */ fromState = triggersWithStates[triggerName];\n        var /** @type {?} */ toState = new StateValue(value);\n        var /** @type {?} */ 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        else if (fromState === DELETED_STATE_VALUE) {\n            return player;\n        }\n        var /** @type {?} */ 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                var /** @type {?} */ errors = [];\n                var /** @type {?} */ fromStyles_1 = trigger.matchStyles(fromState.value, fromState.params, errors);\n                var /** @type {?} */ toStyles_1 = trigger.matchStyles(toState.value, toState.params, errors);\n                if (errors.length) {\n                    this._engine.reportError(errors);\n                }\n                else {\n                    this._engine.afterFlush(function () {\n                        eraseStyles(element, fromStyles_1);\n                        setStyles(element, toStyles_1);\n                    });\n                }\n            }\n            return;\n        }\n        var /** @type {?} */ playersOnElement = getOrSetAsInMap(this._engine.playersByElement, element, []);\n        playersOnElement.forEach(function (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        var /** @type {?} */ transition = trigger.matchTransition(fromState.value, toState.value);\n        var /** @type {?} */ 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: element, triggerName: triggerName, transition: transition, fromState: fromState, toState: toState, player: player, isFallbackTransition: isFallbackTransition });\n        if (!isFallbackTransition) {\n            addClass(element, QUEUED_CLASSNAME);\n            player.onStart(function () { removeClass(element, QUEUED_CLASSNAME); });\n        }\n        player.onDone(function () {\n            var /** @type {?} */ index = _this.players.indexOf(player);\n            if (index >= 0) {\n                _this.players.splice(index, 1);\n            }\n            var /** @type {?} */ players = _this._engine.playersByElement.get(element);\n            if (players) {\n                var /** @type {?} */ index_1 = players.indexOf(player);\n                if (index_1 >= 0) {\n                    players.splice(index_1, 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    AnimationTransitionNamespace.prototype.deregister = function (name) {\n        var _this = this;\n        delete this._triggers[name];\n        this._engine.statesByElement.forEach(function (stateMap, element) { delete stateMap[name]; });\n        this._elementListeners.forEach(function (listeners, element) {\n            _this._elementListeners.set(element, listeners.filter(function (entry) { return entry.name != name; }));\n        });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.clearElementCache = function (element) {\n        this._engine.statesByElement.delete(element);\n        this._elementListeners.delete(element);\n        var /** @type {?} */ elementPlayers = this._engine.playersByElement.get(element);\n        if (elementPlayers) {\n            elementPlayers.forEach(function (player) { return player.destroy(); });\n            this._engine.playersByElement.delete(element);\n        }\n    };\n    /**\n     * @param {?} rootElement\n     * @param {?} context\n     * @param {?=} animate\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype._destroyInnerNodes = function (rootElement, context, animate) {\n        var _this = this;\n        if (animate === void 0) { animate = false; }\n        this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true).forEach(function (elm) {\n            if (animate && containsClass(elm, _this._hostClassName)) {\n                var /** @type {?} */ innerNs = _this._engine.namespacesByHostElement.get(elm);\n                // special case for a host element with animations on the same element\n                if (innerNs) {\n                    innerNs.removeNode(elm, context, true);\n                }\n                _this.removeNode(elm, context, true);\n            }\n            else {\n                _this.clearElementCache(elm);\n            }\n        });\n    };\n    /**\n     * @param {?} element\n     * @param {?} context\n     * @param {?=} doNotRecurse\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.removeNode = function (element, context, doNotRecurse) {\n        var _this = this;\n        var /** @type {?} */ engine = this._engine;\n        if (!doNotRecurse && element.childElementCount) {\n            this._destroyInnerNodes(element, context, true);\n        }\n        var /** @type {?} */ triggerStates = engine.statesByElement.get(element);\n        if (triggerStates) {\n            var /** @type {?} */ players_1 = [];\n            Object.keys(triggerStates).forEach(function (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                    var /** @type {?} */ player = _this.trigger(element, triggerName, VOID_VALUE, false);\n                    if (player) {\n                        players_1.push(player);\n                    }\n                }\n            });\n            if (players_1.length) {\n                engine.markElementAsRemoved(this.id, element, true, context);\n                optimizeGroupPlayer(players_1).onDone(function () { return engine.processLeaveNode(element); });\n                return;\n            }\n        }\n        // find the player that is animating and make sure that the\n        // removal is delayed until that player has completed\n        var /** @type {?} */ containsPotentialParentTransition = false;\n        if (engine.totalAnimations) {\n            var /** @type {?} */ 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 fowards and\n            // allow the element to be queued up for animation later.\n            if (currentPlayers && currentPlayers.length) {\n                containsPotentialParentTransition = true;\n            }\n            else {\n                var /** @type {?} */ parent = element;\n                while (parent = parent.parentNode) {\n                    var /** @type {?} */ 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        var /** @type {?} */ listeners = this._elementListeners.get(element);\n        if (listeners) {\n            var /** @type {?} */ visitedTriggers_1 = new Set();\n            listeners.forEach(function (listener) {\n                var /** @type {?} */ triggerName = listener.name;\n                if (visitedTriggers_1.has(triggerName))\n                    return;\n                visitedTriggers_1.add(triggerName);\n                var /** @type {?} */ trigger = _this._triggers[triggerName];\n                var /** @type {?} */ transition = trigger.fallbackTransition;\n                var /** @type {?} */ elementStates = ((engine.statesByElement.get(element)));\n                var /** @type {?} */ fromState = elementStates[triggerName] || DEFAULT_STATE_VALUE;\n                var /** @type {?} */ toState = new StateValue(VOID_VALUE);\n                var /** @type {?} */ player = new TransitionAnimationPlayer(_this.id, triggerName, element);\n                _this._engine.totalQueuedPlayers++;\n                _this._queue.push({\n                    element: element,\n                    triggerName: triggerName,\n                    transition: transition,\n                    fromState: fromState,\n                    toState: toState,\n                    player: player,\n                    isFallbackTransition: true\n                });\n            });\n        }\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            // we do this after the flush has occurred such\n            // that the callbacks can be fired\n            engine.afterFlush(function () { return _this.clearElementCache(element); });\n            engine.destroyInnerAnimations(element);\n            engine._onRemovalComplete(element, context);\n        }\n    };\n    /**\n     * @param {?} element\n     * @param {?} parent\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.insertNode = function (element, parent) { addClass(element, this._hostClassName); };\n    /**\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.drainQueuedTransitions = function (microtaskId) {\n        var _this = this;\n        var /** @type {?} */ instructions = [];\n        this._queue.forEach(function (entry) {\n            var /** @type {?} */ player = entry.player;\n            if (player.destroyed)\n                return;\n            var /** @type {?} */ element = entry.element;\n            var /** @type {?} */ listeners = _this._elementListeners.get(element);\n            if (listeners) {\n                listeners.forEach(function (listener) {\n                    if (listener.name == entry.triggerName) {\n                        var /** @type {?} */ baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n                        ((baseEvent))['_data'] = microtaskId;\n                        listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n                    }\n                });\n            }\n            if (player.markedForDestroy) {\n                _this._engine.afterFlush(function () {\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(function (a, b) {\n            // if depCount == 0 them move to front\n            // otherwise if a contains b then move back\n            var /** @type {?} */ d0 = a.transition.ast.depCount;\n            var /** @type {?} */ 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    AnimationTransitionNamespace.prototype.destroy = function (context) {\n        this.players.forEach(function (p) { return p.destroy(); });\n        this._destroyInnerNodes(this.hostElement, context);\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.elementContainsData = function (element) {\n        var /** @type {?} */ containsData = false;\n        if (this._elementListeners.has(element))\n            containsData = true;\n        containsData =\n            (this._queue.find(function (entry) { return entry.element === element; }) ? true : false) || containsData;\n        return containsData;\n    };\n    return AnimationTransitionNamespace;\n}());\nvar TransitionAnimationEngine = (function () {\n    /**\n     * @param {?} driver\n     * @param {?} _normalizer\n     */\n    function TransitionAnimationEngine(driver, _normalizer) {\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.onRemovalComplete = function (element, context) { };\n    }\n    /**\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._onRemovalComplete = function (element, context) { this.onRemovalComplete(element, context); };\n    Object.defineProperty(TransitionAnimationEngine.prototype, \"queuedPlayers\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            var /** @type {?} */ players = [];\n            this._namespaceList.forEach(function (ns) {\n                ns.players.forEach(function (player) {\n                    if (player.queued) {\n                        players.push(player);\n                    }\n                });\n            });\n            return players;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.createNamespace = function (namespaceId, hostElement) {\n        var /** @type {?} */ 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     * @param {?} ns\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._balanceNamespaceList = function (ns, hostElement) {\n        var /** @type {?} */ limit = this._namespaceList.length - 1;\n        if (limit >= 0) {\n            var /** @type {?} */ found = false;\n            for (var /** @type {?} */ i = limit; i >= 0; i--) {\n                var /** @type {?} */ 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    TransitionAnimationEngine.prototype.register = function (namespaceId, hostElement) {\n        var /** @type {?} */ 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    TransitionAnimationEngine.prototype.registerTrigger = function (namespaceId, name, trigger) {\n        var /** @type {?} */ 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    TransitionAnimationEngine.prototype.destroy = function (namespaceId, context) {\n        var _this = this;\n        if (!namespaceId)\n            return;\n        var /** @type {?} */ ns = this._fetchNamespace(namespaceId);\n        this.afterFlush(function () {\n            _this.namespacesByHostElement.delete(ns.hostElement);\n            delete _this._namespaceLookup[namespaceId];\n            var /** @type {?} */ index = _this._namespaceList.indexOf(ns);\n            if (index >= 0) {\n                _this._namespaceList.splice(index, 1);\n            }\n        });\n        this.afterFlushAnimationsDone(function () { return ns.destroy(context); });\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._fetchNamespace = function (id) { return this._namespaceLookup[id]; };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.trigger = function (namespaceId, element, name, value) {\n        if (isElementNode(element)) {\n            this._fetchNamespace(namespaceId).trigger(element, name, value);\n            return true;\n        }\n        return false;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.insertNode = function (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        var /** @type {?} */ details = (element[REMOVAL_FLAG]);\n        if (details && details.setForRemoval) {\n            details.setForRemoval = false;\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            this._fetchNamespace(namespaceId).insertNode(element, parent);\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    TransitionAnimationEngine.prototype.collectEnterElement = function (element) { this.collectedEnterElements.push(element); };\n    /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.markElementAsDisabled = function (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 {?} context\n     * @param {?=} doNotRecurse\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.removeNode = function (namespaceId, element, context, doNotRecurse) {\n        if (!isElementNode(element)) {\n            this._onRemovalComplete(element, context);\n            return;\n        }\n        var /** @type {?} */ ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n        if (ns) {\n            ns.removeNode(element, context, doNotRecurse);\n        }\n        else {\n            this.markElementAsRemoved(namespaceId, element, false, context);\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?=} hasAnimation\n     * @param {?=} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.markElementAsRemoved = function (namespaceId, element, hasAnimation, context) {\n        this.collectedLeaveElements.push(element);\n        element[REMOVAL_FLAG] = {\n            namespaceId: namespaceId,\n            setForRemoval: context, hasAnimation: 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    TransitionAnimationEngine.prototype.listen = function (namespaceId, element, name, phase, callback) {\n        if (isElementNode(element)) {\n            return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n        }\n        return function () { };\n    };\n    /**\n     * @param {?} entry\n     * @param {?} subTimelines\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildInstruction = function (entry, subTimelines) {\n        return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, entry.fromState.options, entry.toState.options, subTimelines);\n    };\n    /**\n     * @param {?} containerElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.destroyInnerAnimations = function (containerElement) {\n        var _this = this;\n        var /** @type {?} */ elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n        elements.forEach(function (element) {\n            var /** @type {?} */ players = _this.playersByElement.get(element);\n            if (players) {\n                players.forEach(function (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            var /** @type {?} */ stateMap = _this.statesByElement.get(element);\n            if (stateMap) {\n                Object.keys(stateMap).forEach(function (triggerName) { return stateMap[triggerName] = DELETED_STATE_VALUE; });\n            }\n        });\n        if (this.playersByQueriedElement.size == 0)\n            return;\n        elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n        if (elements.length) {\n            elements.forEach(function (element) {\n                var /** @type {?} */ players = _this.playersByQueriedElement.get(element);\n                if (players) {\n                    players.forEach(function (player) { return player.finish(); });\n                }\n            });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.whenRenderingDone = function () {\n        var _this = this;\n        return new Promise(function (resolve) {\n            if (_this.players.length) {\n                return optimizeGroupPlayer(_this.players).onDone(function () { return resolve(); });\n            }\n            else {\n                resolve();\n            }\n        });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.processLeaveNode = function (element) {\n        var _this = this;\n        var /** @type {?} */ details = (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                var /** @type {?} */ 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(function (node) {\n            _this.markElementAsDisabled(element, false);\n        });\n    };\n    /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.flush = function (microtaskId) {\n        var _this = this;\n        if (microtaskId === void 0) { microtaskId = -1; }\n        var /** @type {?} */ players = [];\n        if (this.newHostElements.size) {\n            this.newHostElements.forEach(function (ns, element) { return _this._balanceNamespaceList(ns, element); });\n            this.newHostElements.clear();\n        }\n        if (this._namespaceList.length &&\n            (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n            var /** @type {?} */ cleanupFns = [];\n            try {\n                players = this._flushAnimations(cleanupFns, microtaskId);\n            }\n            finally {\n                for (var /** @type {?} */ i = 0; i < cleanupFns.length; i++) {\n                    cleanupFns[i]();\n                }\n            }\n        }\n        else {\n            for (var /** @type {?} */ i = 0; i < this.collectedLeaveElements.length; i++) {\n                var /** @type {?} */ 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(function (fn) { return 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            var /** @type {?} */ quietFns_1 = this._whenQuietFns;\n            this._whenQuietFns = [];\n            if (players.length) {\n                optimizeGroupPlayer(players).onDone(function () { quietFns_1.forEach(function (fn) { return fn(); }); });\n            }\n            else {\n                quietFns_1.forEach(function (fn) { return fn(); });\n            }\n        }\n    };\n    /**\n     * @param {?} errors\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.reportError = function (errors) {\n        throw new Error(\"Unable to process animations due to the following failed trigger transitions\\n \" + errors.join('\\n'));\n    };\n    /**\n     * @param {?} cleanupFns\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._flushAnimations = function (cleanupFns, microtaskId) {\n        var _this = this;\n        var /** @type {?} */ subTimelines = new ElementInstructionMap();\n        var /** @type {?} */ skippedPlayers = [];\n        var /** @type {?} */ skippedPlayersMap = new Map();\n        var /** @type {?} */ queuedInstructions = [];\n        var /** @type {?} */ queriedElements = new Map();\n        var /** @type {?} */ allPreStyleElements = new Map();\n        var /** @type {?} */ allPostStyleElements = new Map();\n        var /** @type {?} */ disabledElementsSet = new Set();\n        this.disabledNodes.forEach(function (node) {\n            disabledElementsSet.add(node);\n            var /** @type {?} */ nodesThatAreDisabled = _this.driver.query(node, QUEUED_SELECTOR, true);\n            for (var /** @type {?} */ i = 0; i < nodesThatAreDisabled.length; i++) {\n                disabledElementsSet.add(nodesThatAreDisabled[i]);\n            }\n        });\n        var /** @type {?} */ bodyNode = getBodyNode();\n        var /** @type {?} */ allEnterNodes = this.collectedEnterElements.length ?\n            this.collectedEnterElements.filter(createIsRootFilterFn(this.collectedEnterElements)) :\n            [];\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        for (var /** @type {?} */ i = 0; i < allEnterNodes.length; i++) {\n            addClass(allEnterNodes[i], ENTER_CLASSNAME);\n        }\n        var /** @type {?} */ allLeaveNodes = [];\n        var /** @type {?} */ leaveNodesWithoutAnimations = new Set();\n        for (var /** @type {?} */ i = 0; i < this.collectedLeaveElements.length; i++) {\n            var /** @type {?} */ element = this.collectedLeaveElements[i];\n            var /** @type {?} */ details = (element[REMOVAL_FLAG]);\n            if (details && details.setForRemoval) {\n                addClass(element, LEAVE_CLASSNAME);\n                allLeaveNodes.push(element);\n                if (!details.hasAnimation) {\n                    leaveNodesWithoutAnimations.add(element);\n                }\n            }\n        }\n        cleanupFns.push(function () {\n            allEnterNodes.forEach(function (element) { return removeClass(element, ENTER_CLASSNAME); });\n            allLeaveNodes.forEach(function (element) {\n                removeClass(element, LEAVE_CLASSNAME);\n                _this.processLeaveNode(element);\n            });\n        });\n        var /** @type {?} */ allPlayers = [];\n        var /** @type {?} */ erroneousTransitions = [];\n        for (var /** @type {?} */ i = this._namespaceList.length - 1; i >= 0; i--) {\n            var /** @type {?} */ ns = this._namespaceList[i];\n            ns.drainQueuedTransitions(microtaskId).forEach(function (entry) {\n                var /** @type {?} */ player = entry.player;\n                allPlayers.push(player);\n                var /** @type {?} */ element = entry.element;\n                if (!bodyNode || !_this.driver.containsElement(bodyNode, element)) {\n                    player.destroy();\n                    return;\n                }\n                var /** @type {?} */ instruction = ((_this._buildInstruction(entry, subTimelines)));\n                if (instruction.errors && instruction.errors.length) {\n                    erroneousTransitions.push(instruction);\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(function () { return eraseStyles(element, instruction.fromStyles); });\n                    player.onDestroy(function () { return 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(function (tl) { return tl.stretchStartingKeyframe = true; });\n                subTimelines.append(element, instruction.timelines);\n                var /** @type {?} */ tuple = { instruction: instruction, player: player, element: element };\n                queuedInstructions.push(tuple);\n                instruction.queriedElements.forEach(function (element) { return getOrSetAsInMap(queriedElements, element, []).push(player); });\n                instruction.preStyleProps.forEach(function (stringMap, element) {\n                    var /** @type {?} */ props = Object.keys(stringMap);\n                    if (props.length) {\n                        var /** @type {?} */ setVal_1 = ((allPreStyleElements.get(element)));\n                        if (!setVal_1) {\n                            allPreStyleElements.set(element, setVal_1 = new Set());\n                        }\n                        props.forEach(function (prop) { return setVal_1.add(prop); });\n                    }\n                });\n                instruction.postStyleProps.forEach(function (stringMap, element) {\n                    var /** @type {?} */ props = Object.keys(stringMap);\n                    var /** @type {?} */ setVal = ((allPostStyleElements.get(element)));\n                    if (!setVal) {\n                        allPostStyleElements.set(element, setVal = new Set());\n                    }\n                    props.forEach(function (prop) { return setVal.add(prop); });\n                });\n            });\n        }\n        if (erroneousTransitions.length) {\n            var /** @type {?} */ errors_1 = [];\n            erroneousTransitions.forEach(function (instruction) {\n                errors_1.push(\"@\" + instruction.triggerName + \" has failed due to:\\n\"); /** @type {?} */\n                ((instruction.errors)).forEach(function (error) { return errors_1.push(\"- \" + error + \"\\n\"); });\n            });\n            allPlayers.forEach(function (player) { return player.destroy(); });\n            this.reportError(errors_1);\n        }\n        // these can only be detected here since we have a map of all the elements\n        // that have animations attached to them... We use a set here in the event\n        // multiple enter captures on the same element were caught in different\n        // renderer namespaces (e.g. when a @trigger was on a host binding that had *ngIf)\n        var /** @type {?} */ enterNodesWithoutAnimations = new Set();\n        for (var /** @type {?} */ i = 0; i < allEnterNodes.length; i++) {\n            var /** @type {?} */ element = allEnterNodes[i];\n            if (!subTimelines.has(element)) {\n                enterNodesWithoutAnimations.add(element);\n            }\n        }\n        var /** @type {?} */ allPreviousPlayersMap = new Map();\n        var /** @type {?} */ sortedParentElements = [];\n        queuedInstructions.forEach(function (entry) {\n            var /** @type {?} */ element = entry.element;\n            if (subTimelines.has(element)) {\n                sortedParentElements.unshift(element);\n                _this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n            }\n        });\n        skippedPlayers.forEach(function (player) {\n            var /** @type {?} */ element = player.element;\n            var /** @type {?} */ previousPlayers = _this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n            previousPlayers.forEach(function (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        var /** @type {?} */ replaceNodes = allLeaveNodes.filter(function (node) {\n            return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n        });\n        // POST STAGE: fill the * styles\n        var _a = cloakAndComputeStyles(this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE), postStylesMap = _a[0], allLeaveQueriedNodes = _a[1];\n        allLeaveQueriedNodes.forEach(function (node) {\n            if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n                replaceNodes.push(node);\n            }\n        });\n        // PRE STAGE: fill the ! styles\n        var preStylesMap = (allPreStyleElements.size ?\n            cloakAndComputeStyles(this.driver, enterNodesWithoutAnimations, allPreStyleElements, ɵPRE_STYLE) :\n            [new Map()])[0];\n        replaceNodes.forEach(function (node) {\n            var /** @type {?} */ post = postStylesMap.get(node);\n            var /** @type {?} */ pre = preStylesMap.get(node);\n            postStylesMap.set(node, /** @type {?} */ (Object.assign({}, post, pre)));\n        });\n        var /** @type {?} */ rootPlayers = [];\n        var /** @type {?} */ subPlayers = [];\n        queuedInstructions.forEach(function (entry) {\n            var element = entry.element, player = entry.player, instruction = entry.instruction;\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                    skippedPlayers.push(player);\n                    return;\n                }\n                var /** @type {?} */ innerPlayer = _this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n                player.setRealPlayer(innerPlayer);\n                var /** @type {?} */ parentHasPriority = null;\n                for (var /** @type {?} */ i = 0; i < sortedParentElements.length; i++) {\n                    var /** @type {?} */ parent = sortedParentElements[i];\n                    if (parent === element)\n                        break;\n                    if (_this.driver.containsElement(parent, element)) {\n                        parentHasPriority = parent;\n                        break;\n                    }\n                }\n                if (parentHasPriority) {\n                    var /** @type {?} */ parentPlayers = _this.playersByElement.get(parentHasPriority);\n                    if (parentPlayers && parentPlayers.length) {\n                        player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n                    }\n                    skippedPlayers.push(player);\n                }\n                else {\n                    rootPlayers.push(player);\n                }\n            }\n            else {\n                eraseStyles(element, instruction.fromStyles);\n                player.onDestroy(function () { return 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(function (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            var /** @type {?} */ playersForElement = skippedPlayersMap.get(player.element);\n            if (playersForElement && playersForElement.length) {\n                var /** @type {?} */ 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(function (player) {\n            if (player.parentPlayer) {\n                player.parentPlayer.onDestroy(function () { return player.destroy(); });\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 (var /** @type {?} */ i = 0; i < allLeaveNodes.length; i++) {\n            var /** @type {?} */ element = allLeaveNodes[i];\n            var /** @type {?} */ details = (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            var /** @type {?} */ 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                var /** @type {?} */ queriedPlayerResults = queriedElements.get(element);\n                if (queriedPlayerResults && queriedPlayerResults.length) {\n                    players.push.apply(players, queriedPlayerResults);\n                }\n                var /** @type {?} */ queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n                for (var /** @type {?} */ j = 0; j < queriedInnerElements.length; j++) {\n                    var /** @type {?} */ queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n                    if (queriedPlayers && queriedPlayers.length) {\n                        players.push.apply(players, queriedPlayers);\n                    }\n                }\n            }\n            var /** @type {?} */ activePlayers = players.filter(function (p) { return !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(function (player) {\n            _this.players.push(player);\n            player.onDone(function () {\n                player.destroy();\n                var /** @type {?} */ 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    TransitionAnimationEngine.prototype.elementContainsData = function (namespaceId, element) {\n        var /** @type {?} */ containsData = false;\n        var /** @type {?} */ details = (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    TransitionAnimationEngine.prototype.afterFlush = function (callback) { this._flushFns.push(callback); };\n    /**\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.afterFlushAnimationsDone = function (callback) { this._whenQuietFns.push(callback); };\n    /**\n     * @param {?} element\n     * @param {?} isQueriedElement\n     * @param {?=} namespaceId\n     * @param {?=} triggerName\n     * @param {?=} toStateValue\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._getPreviousPlayers = function (element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n        var /** @type {?} */ players = [];\n        if (isQueriedElement) {\n            var /** @type {?} */ queriedElementPlayers = this.playersByQueriedElement.get(element);\n            if (queriedElementPlayers) {\n                players = queriedElementPlayers;\n            }\n        }\n        else {\n            var /** @type {?} */ elementPlayers = this.playersByElement.get(element);\n            if (elementPlayers) {\n                var /** @type {?} */ isRemovalAnimation_1 = !toStateValue || toStateValue == VOID_VALUE;\n                elementPlayers.forEach(function (player) {\n                    if (player.queued)\n                        return;\n                    if (!isRemovalAnimation_1 && player.triggerName != triggerName)\n                        return;\n                    players.push(player);\n                });\n            }\n        }\n        if (namespaceId || triggerName) {\n            players = players.filter(function (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     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._beforeAnimationBuild = function (namespaceId, instruction, allPreviousPlayersMap) {\n        var _this = this;\n        var /** @type {?} */ triggerName = instruction.triggerName;\n        var /** @type {?} */ 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        var /** @type {?} */ targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;\n        var /** @type {?} */ targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;\n        instruction.timelines.map(function (timelineInstruction) {\n            var /** @type {?} */ element = timelineInstruction.element;\n            var /** @type {?} */ isQueriedElement = element !== rootElement;\n            var /** @type {?} */ players = getOrSetAsInMap(allPreviousPlayersMap, element, []);\n            var /** @type {?} */ previousPlayers = _this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n            previousPlayers.forEach(function (player) {\n                var /** @type {?} */ realPlayer = (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     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @param {?} skippedPlayersMap\n     * @param {?} preStylesMap\n     * @param {?} postStylesMap\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildAnimation = function (namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n        var _this = this;\n        var /** @type {?} */ triggerName = instruction.triggerName;\n        var /** @type {?} */ 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        var /** @type {?} */ allQueriedPlayers = [];\n        var /** @type {?} */ allConsumedElements = new Set();\n        var /** @type {?} */ allSubElements = new Set();\n        var /** @type {?} */ allNewPlayers = instruction.timelines.map(function (timelineInstruction) {\n            var /** @type {?} */ element = timelineInstruction.element;\n            allConsumedElements.add(element);\n            // FIXME (matsko): make sure to-be-removed animations are removed properly\n            var /** @type {?} */ details = element[REMOVAL_FLAG];\n            if (details && details.removedBeforeQueried)\n                return new NoopAnimationPlayer();\n            var /** @type {?} */ isQueriedElement = element !== rootElement;\n            var /** @type {?} */ previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY)\n                .map(function (p) { return p.getRealPlayer(); }))\n                .filter(function (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                var /** @type {?} */ pp = (p);\n                return pp.element ? pp.element === element : false;\n            });\n            var /** @type {?} */ preStyles = preStylesMap.get(element);\n            var /** @type {?} */ postStyles = postStylesMap.get(element);\n            var /** @type {?} */ keyframes = normalizeKeyframes(_this.driver, _this._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles);\n            var /** @type {?} */ 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                var /** @type {?} */ wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);\n                wrappedPlayer.setRealPlayer(player);\n                allQueriedPlayers.push(wrappedPlayer);\n            }\n            return player;\n        });\n        allQueriedPlayers.forEach(function (player) {\n            getOrSetAsInMap(_this.playersByQueriedElement, player.element, []).push(player);\n            player.onDone(function () { return deleteOrUnsetInMap(_this.playersByQueriedElement, player.element, player); });\n        });\n        allConsumedElements.forEach(function (element) { return addClass(element, NG_ANIMATING_CLASSNAME); });\n        var /** @type {?} */ player = optimizeGroupPlayer(allNewPlayers);\n        player.onDestroy(function () {\n            allConsumedElements.forEach(function (element) { return 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(function (element) { getOrSetAsInMap(skippedPlayersMap, element, []).push(player); });\n        return player;\n    };\n    /**\n     * @param {?} instruction\n     * @param {?} keyframes\n     * @param {?} previousPlayers\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildPlayer = function (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();\n    };\n    return TransitionAnimationEngine;\n}());\nvar TransitionAnimationPlayer = (function () {\n    /**\n     * @param {?} namespaceId\n     * @param {?} triggerName\n     * @param {?} element\n     */\n    function TransitionAnimationPlayer(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    }\n    Object.defineProperty(TransitionAnimationPlayer.prototype, \"queued\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._containsRealPlayer == false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(TransitionAnimationPlayer.prototype, \"destroyed\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._destroyed; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} player\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.setRealPlayer = function (player) {\n        var _this = this;\n        if (this._containsRealPlayer)\n            return;\n        this._player = player;\n        Object.keys(this._queuedCallbacks).forEach(function (phase) {\n            _this._queuedCallbacks[phase].forEach(function (callback) { return listenOnPlayer(player, phase, undefined, callback); });\n        });\n        this._queuedCallbacks = {};\n        this._containsRealPlayer = true;\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.getRealPlayer = function () { return this._player; };\n    /**\n     * @param {?} name\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype._queueEvent = function (name, callback) {\n        getOrSetAsInMap(this._queuedCallbacks, name, []).push(callback);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.onDone = function (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    TransitionAnimationPlayer.prototype.onStart = function (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    TransitionAnimationPlayer.prototype.onDestroy = function (fn) {\n        if (this.queued) {\n            this._queueEvent('destroy', fn);\n        }\n        this._player.onDestroy(fn);\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.init = function () { this._player.init(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.hasStarted = function () { return this.queued ? false : this._player.hasStarted(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.play = function () { !this.queued && this._player.play(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.pause = function () { !this.queued && this._player.pause(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.restart = function () { !this.queued && this._player.restart(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.finish = function () { this._player.finish(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.destroy = function () {\n        this._destroyed = true;\n        this._player.destroy();\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.reset = function () { !this.queued && this._player.reset(); };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.setPosition = function (p) {\n        if (!this.queued) {\n            this._player.setPosition(p);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.getPosition = function () { return this.queued ? 0 : this._player.getPosition(); };\n    Object.defineProperty(TransitionAnimationPlayer.prototype, \"totalTime\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._player.totalTime; },\n        enumerable: true,\n        configurable: true\n    });\n    return TransitionAnimationPlayer;\n}());\n/**\n * @param {?} map\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\nfunction deleteOrUnsetInMap(map, key, value) {\n    var /** @type {?} */ currentValues;\n    if (map instanceof Map) {\n        currentValues = map.get(key);\n        if (currentValues) {\n            if (currentValues.length) {\n                var /** @type {?} */ 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                var /** @type {?} */ 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    var /** @type {?} */ oldValue = element.style.display;\n    element.style.display = value != null ? value : 'none';\n    return oldValue;\n}\n/**\n * @param {?} driver\n * @param {?} elements\n * @param {?} elementPropsMap\n * @param {?} defaultStyle\n * @return {?}\n */\nfunction cloakAndComputeStyles(driver, elements, elementPropsMap, defaultStyle) {\n    var /** @type {?} */ cloakVals = [];\n    elements.forEach(function (element) { return cloakVals.push(cloakElement(element)); });\n    var /** @type {?} */ valuesMap = new Map();\n    var /** @type {?} */ failedElements = [];\n    elementPropsMap.forEach(function (props, element) {\n        var /** @type {?} */ styles = {};\n        props.forEach(function (prop) {\n            var /** @type {?} */ 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    var /** @type {?} */ i = 0;\n    elements.forEach(function (element) { return cloakElement(element, cloakVals[i++]); });\n    return [valuesMap, failedElements];\n}\n/**\n * @param {?} nodes\n * @return {?}\n */\nfunction createIsRootFilterFn(nodes) {\n    var /** @type {?} */ nodeSet = new Set(nodes);\n    var /** @type {?} */ knownRootContainer = new Set();\n    var /** @type {?} */ isRoot;\n    isRoot = function (node) {\n        if (!node)\n            return true;\n        if (nodeSet.has(node.parentNode))\n            return false;\n        if (knownRootContainer.has(node.parentNode))\n            return true;\n        if (isRoot(node.parentNode)) {\n            knownRootContainer.add(node);\n            return true;\n        }\n        return false;\n    };\n    return isRoot;\n}\nvar 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        var /** @type {?} */ 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        var /** @type {?} */ 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        var /** @type {?} */ classes = element[CLASSES_CACHE_KEY];\n        if (classes) {\n            delete classes[className];\n        }\n    }\n}\n/**\n * @return {?}\n */\nfunction getBodyNode() {\n    if (typeof document != 'undefined') {\n        return document.body;\n    }\n    return null;\n}\n/**\n * @param {?} engine\n * @param {?} element\n * @param {?} players\n * @return {?}\n */\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n    optimizeGroupPlayer(players).onDone(function () { return engine.processLeaveNode(element); });\n}\n/**\n * @param {?} players\n * @return {?}\n */\nfunction flattenGroupPlayers(players) {\n    var /** @type {?} */ 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 (var /** @type {?} */ i = 0; i < players.length; i++) {\n        var /** @type {?} */ player = players[i];\n        if (player instanceof ɵAnimationGroupPlayer) {\n            _flattenGroupPlayersRecur(player.players, finalPlayers);\n        }\n        else {\n            finalPlayers.push(/** @type {?} */ (player));\n        }\n    }\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction objEquals(a, b) {\n    var /** @type {?} */ k1 = Object.keys(a);\n    var /** @type {?} */ k2 = Object.keys(b);\n    if (k1.length != k2.length)\n        return false;\n    for (var /** @type {?} */ i = 0; i < k1.length; i++) {\n        var /** @type {?} */ 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    var /** @type {?} */ postEntry = allPostStyleElements.get(element);\n    if (!postEntry)\n        return false;\n    var /** @type {?} */ preEntry = allPreStyleElements.get(element);\n    if (preEntry) {\n        postEntry.forEach(function (data) { return ((preEntry)).add(data); });\n    }\n    else {\n        allPreStyleElements.set(element, postEntry);\n    }\n    allPostStyleElements.delete(element);\n    return true;\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 */\nvar AnimationEngine = (function () {\n    /**\n     * @param {?} driver\n     * @param {?} normalizer\n     */\n    function AnimationEngine(driver, normalizer) {\n        var _this = this;\n        this._triggerCache = {};\n        this.onRemovalComplete = function (element, context) { };\n        this._transitionEngine = new TransitionAnimationEngine(driver, normalizer);\n        this._timelineEngine = new TimelineAnimationEngine(driver, normalizer);\n        this._transitionEngine.onRemovalComplete = function (element, context) { return _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    AnimationEngine.prototype.registerTrigger = function (componentId, namespaceId, hostElement, name, metadata) {\n        var /** @type {?} */ cacheKey = componentId + '-' + name;\n        var /** @type {?} */ trigger = this._triggerCache[cacheKey];\n        if (!trigger) {\n            var /** @type {?} */ errors = [];\n            var /** @type {?} */ ast = (buildAnimationAst(/** @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    AnimationEngine.prototype.register = function (namespaceId, hostElement) {\n        this._transitionEngine.register(namespaceId, hostElement);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationEngine.prototype.destroy = function (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    AnimationEngine.prototype.onInsert = function (namespaceId, element, parent, insertBefore) {\n        this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationEngine.prototype.onRemove = function (namespaceId, element, context) {\n        this._transitionEngine.removeNode(namespaceId, element, context);\n    };\n    /**\n     * @param {?} element\n     * @param {?} disable\n     * @return {?}\n     */\n    AnimationEngine.prototype.disableAnimations = function (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    AnimationEngine.prototype.process = function (namespaceId, element, property, value) {\n        if (property.charAt(0) == '@') {\n            var _a = parseTimelineCommand(property), id = _a[0], action = _a[1];\n            var /** @type {?} */ args = (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    AnimationEngine.prototype.listen = function (namespaceId, element, eventName, eventPhase, callback) {\n        // @@listen\n        if (eventName.charAt(0) == '@') {\n            var _a = parseTimelineCommand(eventName), id = _a[0], action = _a[1];\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    AnimationEngine.prototype.flush = function (microtaskId) {\n        if (microtaskId === void 0) { microtaskId = -1; }\n        this._transitionEngine.flush(microtaskId);\n    };\n    Object.defineProperty(AnimationEngine.prototype, \"players\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return ((this._transitionEngine.players))\n                .concat(/** @type {?} */ (this._timelineEngine.players));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    AnimationEngine.prototype.whenRenderingDone = function () { return this._transitionEngine.whenRenderingDone(); };\n    return AnimationEngine;\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 */\nvar WebAnimationsPlayer = (function () {\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} options\n     * @param {?=} previousPlayers\n     */\n    function WebAnimationsPlayer(element, keyframes, options, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        var _this = this;\n        this.element = element;\n        this.keyframes = keyframes;\n        this.options = options;\n        this.previousPlayers = previousPlayers;\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.previousStyles = {};\n        this.currentSnapshot = {};\n        this._duration = options['duration'];\n        this._delay = options['delay'] || 0;\n        this.time = this._duration + this._delay;\n        if (allowPreviousPlayerStylesMerge(this._duration, this._delay)) {\n            previousPlayers.forEach(function (player) {\n                var styles = player.currentSnapshot;\n                Object.keys(styles).forEach(function (prop) { return _this.previousStyles[prop] = styles[prop]; });\n            });\n        }\n    }\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._onFinish = function () {\n        if (!this._finished) {\n            this._finished = true;\n            this._onDoneFns.forEach(function (fn) { return fn(); });\n            this._onDoneFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.init = function () {\n        this._buildPlayer();\n        this._preparePlayerBeforeStart();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._buildPlayer = function () {\n        var _this = this;\n        if (this._initialized)\n            return;\n        this._initialized = true;\n        var /** @type {?} */ keyframes = this.keyframes.map(function (styles) { return copyStyles(styles, false); });\n        var /** @type {?} */ previousStyleProps = Object.keys(this.previousStyles);\n        if (previousStyleProps.length) {\n            var /** @type {?} */ startingKeyframe_1 = keyframes[0];\n            var /** @type {?} */ missingStyleProps_1 = [];\n            previousStyleProps.forEach(function (prop) {\n                if (!startingKeyframe_1.hasOwnProperty(prop)) {\n                    missingStyleProps_1.push(prop);\n                }\n                startingKeyframe_1[prop] = _this.previousStyles[prop];\n            });\n            if (missingStyleProps_1.length) {\n                var /** @type {?} */ self_1 = this;\n                var _loop_1 = function () {\n                    var /** @type {?} */ kf = keyframes[i];\n                    missingStyleProps_1.forEach(function (prop) {\n                        kf[prop] = _computeStyle(self_1.element, prop);\n                    });\n                };\n                // tslint:disable-next-line\n                for (var /** @type {?} */ i = 1; i < keyframes.length; i++) {\n                    _loop_1();\n                }\n            }\n        }\n        this._player = this._triggerWebAnimation(this.element, keyframes, this.options);\n        this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : {};\n        this._player.addEventListener('finish', function () { return _this._onFinish(); });\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._preparePlayerBeforeStart = function () {\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._player.pause();\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} options\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._triggerWebAnimation = function (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 (element['animate'](keyframes, options));\n    };\n    Object.defineProperty(WebAnimationsPlayer.prototype, \"domPlayer\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._player; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onStart = function (fn) { this._onStartFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onDone = function (fn) { this._onDoneFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onDestroy = function (fn) { this._onDestroyFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.play = function () {\n        this._buildPlayer();\n        if (!this.hasStarted()) {\n            this._onStartFns.forEach(function (fn) { return fn(); });\n            this._onStartFns = [];\n            this._started = true;\n        }\n        this._player.play();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.pause = function () {\n        this.init();\n        this._player.pause();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.finish = function () {\n        this.init();\n        this._onFinish();\n        this._player.finish();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.reset = function () {\n        this._resetDomPlayerState();\n        this._destroyed = false;\n        this._finished = false;\n        this._started = false;\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._resetDomPlayerState = function () {\n        if (this._player) {\n            this._player.cancel();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.restart = function () {\n        this.reset();\n        this.play();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.hasStarted = function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.destroy = function () {\n        if (!this._destroyed) {\n            this._destroyed = true;\n            this._resetDomPlayerState();\n            this._onFinish();\n            this._onDestroyFns.forEach(function (fn) { return fn(); });\n            this._onDestroyFns = [];\n        }\n    };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.setPosition = function (p) { this._player.currentTime = p * this.time; };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.getPosition = function () { return this._player.currentTime / this.time; };\n    Object.defineProperty(WebAnimationsPlayer.prototype, \"totalTime\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._delay + this._duration; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.beforeDestroy = function () {\n        var _this = this;\n        var /** @type {?} */ styles = {};\n        if (this.hasStarted()) {\n            Object.keys(this._finalKeyframe).forEach(function (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    return WebAnimationsPlayer;\n}());\n/**\n * @param {?} element\n * @param {?} prop\n * @return {?}\n */\nfunction _computeStyle(element, prop) {\n    return ((window.getComputedStyle(element)))[prop];\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 */\nvar WebAnimationsDriver = (function () {\n    function WebAnimationsDriver() {\n    }\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.matchesElement = function (element, selector) {\n        return matchesElement(element, selector);\n    };\n    /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.containsElement = function (elm1, elm2) { return containsElement(elm1, elm2); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.query = function (element, selector, multi) {\n        return invokeQuery(element, selector, multi);\n    };\n    /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.computeStyle = function (element, prop, defaultValue) {\n        return (((window.getComputedStyle(element)))[prop]);\n    };\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.animate = function (element, keyframes, duration, delay, easing, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        var /** @type {?} */ fill = delay == 0 ? 'both' : 'forwards';\n        var /** @type {?} */ playerOptions = { duration: duration, delay: delay, fill: 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        var /** @type {?} */ previousWebAnimationPlayers = (previousPlayers.filter(function (player) { return player instanceof WebAnimationsPlayer; }));\n        return new WebAnimationsPlayer(element, keyframes, playerOptions, previousWebAnimationPlayers);\n    };\n    return WebAnimationsDriver;\n}());\n/**\n * @return {?}\n */\nfunction supportsWebAnimations() {\n    return typeof Element !== 'undefined' && typeof ((Element)).prototype['animate'] === 'function';\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 * @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 * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\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 * @module\n * @description\n * Entry point for all public APIs of the animation package.\n */\n/**\n * Generated bundle index. Do not edit.\n */\nexport { AnimationDriver, Animation as ɵAnimation, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, NoopAnimationDriver as ɵNoopAnimationDriver, AnimationEngine as ɵAnimationEngine, WebAnimationsDriver as ɵWebAnimationsDriver, supportsWebAnimations as ɵsupportsWebAnimations, WebAnimationsPlayer as ɵWebAnimationsPlayer };\n//# sourceMappingURL=browser.es5.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angular/animations/@angular/animations/browser.es5.js\n// module id = null\n// module chunks = ","import * as tslib_1 from \"tslib\";\n/**\n * @license Angular v4.4.7\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { Inject, Injectable, NgModule, NgZone, RendererFactory2, ViewEncapsulation } from '@angular/core';\nimport { BrowserModule, DOCUMENT, ɵDomRendererFactory2 } from '@angular/platform-browser';\nimport { AnimationBuilder, AnimationFactory, sequence } from '@angular/animations';\nimport { AnimationDriver, ɵAnimationEngine, ɵAnimationStyleNormalizer, ɵNoopAnimationDriver, ɵWebAnimationsDriver, ɵWebAnimationsStyleNormalizer, ɵsupportsWebAnimations } from '@angular/animations/browser';\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 */\nvar BrowserAnimationBuilder = (function (_super) {\n    tslib_1.__extends(BrowserAnimationBuilder, _super);\n    /**\n     * @param {?} rootRenderer\n     * @param {?} doc\n     */\n    function BrowserAnimationBuilder(rootRenderer, doc) {\n        var _this = _super.call(this) || this;\n        _this._nextAnimationId = 0;\n        var typeData = {\n            id: '0',\n            encapsulation: ViewEncapsulation.None,\n            styles: [],\n            data: { animation: [] }\n        };\n        _this._renderer = rootRenderer.createRenderer(doc.body, typeData);\n        return _this;\n    }\n    /**\n     * @param {?} animation\n     * @return {?}\n     */\n    BrowserAnimationBuilder.prototype.build = function (animation) {\n        var /** @type {?} */ id = this._nextAnimationId.toString();\n        this._nextAnimationId++;\n        var /** @type {?} */ entry = Array.isArray(animation) ? sequence(animation) : animation;\n        issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n        return new BrowserAnimationFactory(id, this._renderer);\n    };\n    return BrowserAnimationBuilder;\n}(AnimationBuilder));\nBrowserAnimationBuilder.decorators = [\n    { type: Injectable },\n];\n/**\n * @nocollapse\n */\nBrowserAnimationBuilder.ctorParameters = function () { return [\n    { type: RendererFactory2, },\n    { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] },] },\n]; };\nvar BrowserAnimationFactory = (function (_super) {\n    tslib_1.__extends(BrowserAnimationFactory, _super);\n    /**\n     * @param {?} _id\n     * @param {?} _renderer\n     */\n    function BrowserAnimationFactory(_id, _renderer) {\n        var _this = _super.call(this) || this;\n        _this._id = _id;\n        _this._renderer = _renderer;\n        return _this;\n    }\n    /**\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    BrowserAnimationFactory.prototype.create = function (element, options) {\n        return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n    };\n    return BrowserAnimationFactory;\n}(AnimationFactory));\nvar RendererAnimationPlayer = (function () {\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} options\n     * @param {?} _renderer\n     */\n    function RendererAnimationPlayer(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     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype._listen = function (eventName, callback) {\n        return this._renderer.listen(this.element, \"@@\" + this.id + \":\" + eventName, callback);\n    };\n    /**\n     * @param {?} command\n     * @param {...?} args\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype._command = function (command) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        return issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onDone = function (fn) { this._listen('done', fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onStart = function (fn) { this._listen('start', fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onDestroy = function (fn) { this._listen('destroy', fn); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.init = function () { this._command('init'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.hasStarted = function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.play = function () {\n        this._command('play');\n        this._started = true;\n    };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.pause = function () { this._command('pause'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.restart = function () { this._command('restart'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.finish = function () { this._command('finish'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.destroy = function () { this._command('destroy'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.reset = function () { this._command('reset'); };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.setPosition = function (p) { this._command('setPosition', p); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.getPosition = function () { return 0; };\n    return RendererAnimationPlayer;\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 * @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 */\nvar ANIMATION_PREFIX = '@';\nvar DISABLE_ANIMATIONS_FLAG = '@.disabled';\nvar AnimationRendererFactory = (function () {\n    /**\n     * @param {?} delegate\n     * @param {?} engine\n     * @param {?} _zone\n     */\n    function AnimationRendererFactory(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        engine.onRemovalComplete = function (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    AnimationRendererFactory.prototype.createRenderer = function (hostElement, type) {\n        var _this = this;\n        var /** @type {?} */ EMPTY_NAMESPACE_ID = '';\n        // cache the delegates to find out which cached delegate can\n        // be used by which cached renderer\n        var /** @type {?} */ delegate = this.delegate.createRenderer(hostElement, type);\n        if (!hostElement || !type || !type.data || !type.data['animation']) {\n            var /** @type {?} */ 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        var /** @type {?} */ componentId = type.id;\n        var /** @type {?} */ namespaceId = type.id + '-' + this._currentId;\n        this._currentId++;\n        this.engine.register(namespaceId, hostElement);\n        var /** @type {?} */ animationTriggers = (type.data['animation']);\n        animationTriggers.forEach(function (trigger) { return _this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger); });\n        return new AnimationRenderer(this, namespaceId, delegate, this.engine);\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.begin = function () {\n        this._cdRecurDepth++;\n        if (this.delegate.begin) {\n            this.delegate.begin();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype._scheduleCountTask = function () {\n        var _this = this;\n        Zone.current.scheduleMicroTask('incremenet the animation microtask', function () { return _this._microtaskId++; });\n    };\n    /**\n     * @param {?} count\n     * @param {?} fn\n     * @param {?} data\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.scheduleListenerCallback = function (count, fn, data) {\n        var _this = this;\n        if (count >= 0 && count < this._microtaskId) {\n            this._zone.run(function () { return fn(data); });\n            return;\n        }\n        if (this._animationCallbacksBuffer.length == 0) {\n            Promise.resolve(null).then(function () {\n                _this._zone.run(function () {\n                    _this._animationCallbacksBuffer.forEach(function (tuple) {\n                        var fn = tuple[0], data = tuple[1];\n                        fn(data);\n                    });\n                    _this._animationCallbacksBuffer = [];\n                });\n            });\n        }\n        this._animationCallbacksBuffer.push([fn, data]);\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.end = function () {\n        var _this = this;\n        this._cdRecurDepth--;\n        // this is to prevent animations from running twice when an inner\n        // component does CD when a parent component insted has inserted it\n        if (this._cdRecurDepth == 0) {\n            this._zone.runOutsideAngular(function () {\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    AnimationRendererFactory.prototype.whenRenderingDone = function () { return this.engine.whenRenderingDone(); };\n    return AnimationRendererFactory;\n}());\nAnimationRendererFactory.decorators = [\n    { type: Injectable },\n];\n/**\n * @nocollapse\n */\nAnimationRendererFactory.ctorParameters = function () { return [\n    { type: RendererFactory2, },\n    { type: ɵAnimationEngine, },\n    { type: NgZone, },\n]; };\nvar BaseAnimationRenderer = (function () {\n    /**\n     * @param {?} namespaceId\n     * @param {?} delegate\n     * @param {?} engine\n     */\n    function BaseAnimationRenderer(namespaceId, delegate, engine) {\n        this.namespaceId = namespaceId;\n        this.delegate = delegate;\n        this.engine = engine;\n        this.destroyNode = this.delegate.destroyNode ? function (n) { return delegate.destroyNode(n); } : null;\n    }\n    Object.defineProperty(BaseAnimationRenderer.prototype, \"data\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.delegate.data; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.destroy = function () {\n        this.engine.destroy(this.namespaceId, this.delegate);\n        this.delegate.destroy();\n    };\n    /**\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createElement = function (name, namespace) {\n        return this.delegate.createElement(name, namespace);\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createComment = function (value) { return this.delegate.createComment(value); };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createText = function (value) { return this.delegate.createText(value); };\n    /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.appendChild = function (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    BaseAnimationRenderer.prototype.insertBefore = function (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     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeChild = function (parent, oldChild) {\n        this.engine.onRemove(this.namespaceId, oldChild, this.delegate);\n    };\n    /**\n     * @param {?} selectorOrNode\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.selectRootElement = function (selectorOrNode) { return this.delegate.selectRootElement(selectorOrNode); };\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.parentNode = function (node) { return this.delegate.parentNode(node); };\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.nextSibling = function (node) { return this.delegate.nextSibling(node); };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setAttribute = function (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    BaseAnimationRenderer.prototype.removeAttribute = function (el, name, namespace) {\n        this.delegate.removeAttribute(el, name, namespace);\n    };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.addClass = function (el, name) { this.delegate.addClass(el, name); };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeClass = function (el, name) { this.delegate.removeClass(el, name); };\n    /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?} value\n     * @param {?=} flags\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setStyle = function (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    BaseAnimationRenderer.prototype.removeStyle = function (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    BaseAnimationRenderer.prototype.setProperty = function (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    BaseAnimationRenderer.prototype.setValue = function (node, value) { this.delegate.setValue(node, value); };\n    /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.listen = function (target, eventName, callback) {\n        return this.delegate.listen(target, eventName, callback);\n    };\n    /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.disableAnimations = function (element, value) {\n        this.engine.disableAnimations(element, value);\n    };\n    return BaseAnimationRenderer;\n}());\nvar AnimationRenderer = (function (_super) {\n    tslib_1.__extends(AnimationRenderer, _super);\n    /**\n     * @param {?} factory\n     * @param {?} namespaceId\n     * @param {?} delegate\n     * @param {?} engine\n     */\n    function AnimationRenderer(factory, namespaceId, delegate, engine) {\n        var _this = _super.call(this, namespaceId, delegate, engine) || this;\n        _this.factory = factory;\n        _this.namespaceId = namespaceId;\n        return _this;\n    }\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    AnimationRenderer.prototype.setProperty = function (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    AnimationRenderer.prototype.listen = function (target, eventName, callback) {\n        var _this = this;\n        if (eventName.charAt(0) == ANIMATION_PREFIX) {\n            var /** @type {?} */ element = resolveElementFromTarget(target);\n            var /** @type {?} */ name = eventName.substr(1);\n            var /** @type {?} */ phase = '';\n            // @listener.phase is for trigger animation callbacks\n            // @@listener is for animation builder callbacks\n            if (name.charAt(0) != ANIMATION_PREFIX) {\n                _a = parseTriggerCallbackName(name), name = _a[0], phase = _a[1];\n            }\n            return this.engine.listen(this.namespaceId, element, name, phase, function (event) {\n                var /** @type {?} */ countId = ((event))['_data'] || -1;\n                _this.factory.scheduleListenerCallback(countId, callback, event);\n            });\n        }\n        return this.delegate.listen(target, eventName, callback);\n        var _a;\n    };\n    return AnimationRenderer;\n}(BaseAnimationRenderer));\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    var /** @type {?} */ dotIndex = triggerName.indexOf('.');\n    var /** @type {?} */ trigger = triggerName.substring(0, dotIndex);\n    var /** @type {?} */ phase = triggerName.substr(dotIndex + 1);\n    return [trigger, phase];\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 */\nvar InjectableAnimationEngine = (function (_super) {\n    tslib_1.__extends(InjectableAnimationEngine, _super);\n    /**\n     * @param {?} driver\n     * @param {?} normalizer\n     */\n    function InjectableAnimationEngine(driver, normalizer) {\n        return _super.call(this, driver, normalizer) || this;\n    }\n    return InjectableAnimationEngine;\n}(ɵAnimationEngine));\nInjectableAnimationEngine.decorators = [\n    { type: Injectable },\n];\n/**\n * @nocollapse\n */\nInjectableAnimationEngine.ctorParameters = function () { return [\n    { type: AnimationDriver, },\n    { type: ɵAnimationStyleNormalizer, },\n]; };\n/**\n * @return {?}\n */\nfunction instantiateSupportedAnimationDriver() {\n    if (ɵsupportsWebAnimations()) {\n        return new ɵWebAnimationsDriver();\n    }\n    return new ɵNoopAnimationDriver();\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}\nvar 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 */\nvar BROWSER_ANIMATIONS_PROVIDERS = [\n    { provide: AnimationDriver, useFactory: instantiateSupportedAnimationDriver }\n].concat(SHARED_ANIMATION_PROVIDERS);\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 */\nvar BROWSER_NOOP_ANIMATIONS_PROVIDERS = [{ provide: AnimationDriver, useClass: ɵNoopAnimationDriver }].concat(SHARED_ANIMATION_PROVIDERS);\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 * \\@experimental Animation support is experimental.\n */\nvar BrowserAnimationsModule = (function () {\n    function BrowserAnimationsModule() {\n    }\n    return BrowserAnimationsModule;\n}());\nBrowserAnimationsModule.decorators = [\n    { type: NgModule, args: [{\n                exports: [BrowserModule],\n                providers: BROWSER_ANIMATIONS_PROVIDERS,\n            },] },\n];\n/**\n * @nocollapse\n */\nBrowserAnimationsModule.ctorParameters = function () { return []; };\n/**\n * \\@experimental Animation support is experimental.\n */\nvar NoopAnimationsModule = (function () {\n    function NoopAnimationsModule() {\n    }\n    return NoopAnimationsModule;\n}());\nNoopAnimationsModule.decorators = [\n    { type: NgModule, args: [{\n                exports: [BrowserModule],\n                providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,\n            },] },\n];\n/**\n * @nocollapse\n */\nNoopAnimationsModule.ctorParameters = function () { return []; };\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 * @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 * @module\n * @description\n * Entry point for all animation APIs of the animation browser package.\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 * @module\n * @description\n * Entry point for all public APIs of the animation package.\n */\n/**\n * Generated bundle index. Do not edit.\n */\nexport { BrowserAnimationsModule, NoopAnimationsModule, BrowserAnimationBuilder as ɵBrowserAnimationBuilder, BrowserAnimationFactory as ɵBrowserAnimationFactory, AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory, BaseAnimationRenderer as ɵa, BROWSER_ANIMATIONS_PROVIDERS as ɵf, BROWSER_NOOP_ANIMATIONS_PROVIDERS as ɵg, InjectableAnimationEngine as ɵb, instantiateDefaultStyleNormalizer as ɵd, instantiateRendererFactory as ɵe, instantiateSupportedAnimationDriver as ɵc };\n//# sourceMappingURL=animations.es5.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angular/platform-browser/@angular/platform-browser/animations.es5.js\n// module id = null\n// module chunks = ","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ngx-chips/node_modules/tslib/tslib.es6.js\n// module id = null\n// module chunks = ","import { Component, Output, Input, EventEmitter, ElementRef, Injectable, Renderer, ContentChildren, HostListener, ContentChild, NgModule } from '@angular/core';\nimport { trigger, style, transition, animate, keyframes, state } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2DropdownButton = /** @class */ (function () {\n    function Ng2DropdownButton(element) {\n        this.element = element;\n        this.onMenuToggled = new EventEmitter();\n        this.showCaret = true;\n    }\n    /**\n     * \\@name toggleMenu\n     * @desc emits event to toggle menu\n     * @return {?}\n     */\n    Ng2DropdownButton.prototype.toggleMenu = /**\n     * \\@name toggleMenu\n     * @desc emits event to toggle menu\n     * @return {?}\n     */\n    function () {\n        this.onMenuToggled.emit(true);\n    };\n    /**\n     * \\@name getPosition\n     * @desc returns position of the button\n     * @return {?}\n     */\n    Ng2DropdownButton.prototype.getPosition = /**\n     * \\@name getPosition\n     * @desc returns position of the button\n     * @return {?}\n     */\n    function () {\n        return this.element.nativeElement.getBoundingClientRect();\n    };\n    Ng2DropdownButton.decorators = [\n        { type: Component, args: [{\n                    selector: 'ng2-dropdown-button',\n                    styles: [\".ng2-dropdown-button{font-family:Roboto,\\\"Helvetica Neue\\\",Helvetica,Arial;background:#fff;padding:.45rem .25rem;font-size:14px;letter-spacing:.08rem;color:#444;outline:0;cursor:pointer;font-weight:400;border:none;border-bottom:1px solid #efefef;text-align:left;min-width:100px;width:100%;display:flex;flex-direction:row;max-width:150px}.ng2-dropdown-button:hover{color:#222}.ng2-dropdown-button:active,.ng2-dropdown-button:focus{color:#222;border-bottom:2px solid #2196f3}.ng2-dropdown-button__label{flex:1 1 95%}.ng2-dropdown-button__caret{width:12px;height:12px;display:flex;flex:1 1 6%}:host-context(.ng2-dropdown-button--icon) .ng2-dropdown-button{border:none;min-width:40px;width:40px;border-radius:100%;transition:all .2s;text-align:center;height:40px;padding:.5em}:host-context(.ng2-dropdown-button--icon) .ng2-dropdown-button:active{background:rgba(0,0,0,.2)}\"],\n                    template: \"<button class='ng2-dropdown-button' type=\\\"button\\\" (click)=\\\"toggleMenu()\\\" tabindex=\\\"0s\\\">\\n    <span class=\\\"ng2-dropdown-button__label\\\">\\n        <ng-content></ng-content>\\n    </span>\\n\\n    <span class=\\\"ng2-dropdown-button__caret\\\" *ngIf=\\\"showCaret\\\">\\n        <svg enable-background=\\\"new 0 0 32 32\\\" height=\\\"16px\\\" id=\\\"\\u0421\\u043B\\u043E\\u0439_1\\\" version=\\\"1.1\\\" viewBox=\\\"0 0 32 32\\\" width=\\\"16px\\\" xml:space=\\\"preserve\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"><path d=\\\"M24.285,11.284L16,19.571l-8.285-8.288c-0.395-0.395-1.034-0.395-1.429,0  c-0.394,0.395-0.394,1.035,0,1.43l8.999,9.002l0,0l0,0c0.394,0.395,1.034,0.395,1.428,0l8.999-9.002  c0.394-0.395,0.394-1.036,0-1.431C25.319,10.889,24.679,10.889,24.285,11.284z\\\" fill=\\\"#121313\\\" id=\\\"Expand_More\\\"/><g/><g/><g/><g/><g/><g/></svg>\\n    </span>\\n</button>\\n\"\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2DropdownButton.ctorParameters = function () { return [\n        { type: ElementRef, },\n    ]; };\n    Ng2DropdownButton.propDecorators = {\n        \"onMenuToggled\": [{ type: Output },],\n        \"showCaret\": [{ type: Input },],\n    };\n    return Ng2DropdownButton;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar /** @type {?} */ KEYS = {\n    BACKSPACE: 9,\n    PREV: 38,\n    NEXT: 40,\n    ENTER: 13,\n    ESCAPE: 27\n};\n/**\n * \\@name onSwitchNext\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onSwitchNext = function (index, items, state$$1) {\n    if (index < items.length - 1) {\n        state$$1.select(items[index + 1], true);\n    }\n};\n/**\n * \\@name onSwitchPrev\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onSwitchPrev = function (index, items, state$$1) {\n    if (index > 0) {\n        state$$1.select(items[index - 1], true);\n    }\n};\n/**\n * \\@name onBackspace\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onBackspace = function (index, items, state$$1) {\n    if (index < items.length - 1) {\n        state$$1.select(items[index + 1], true);\n    }\n    else {\n        state$$1.select(items[0], true);\n    }\n};\n/**\n * @this {?}\n * @return {?}\n */\nfunction onEscape() {\n    this.hide();\n}\n/**\n * \\@name onItemClicked\n * @param index\n * @param items\n * @param state\n */\nvar /** @type {?} */ onItemClicked = function (index, items, state$$1) {\n    return state$$1.selectedItem ? state$$1.selectedItem.click() : undefined;\n};\nvar /** @type {?} */ ACTIONS = (_a = {},\n    _a[KEYS.BACKSPACE] = onBackspace,\n    _a[KEYS.PREV] = onSwitchPrev,\n    _a[KEYS.NEXT] = onSwitchNext,\n    _a[KEYS.ENTER] = onItemClicked,\n    _a[KEYS.ESCAPE] = onEscape,\n    _a);\n/**\n * @param {?} event\n * @return {?}\n */\nfunction arrowKeysHandler(event) {\n    if ([38, 40].indexOf(event.keyCode) > -1) {\n        event.preventDefault();\n    }\n}\nvar _a;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2DropdownState = /** @class */ (function () {\n    function Ng2DropdownState() {\n        this.onItemSelected = new EventEmitter();\n        this.onItemClicked = new EventEmitter();\n        this.onItemDestroyed = new EventEmitter();\n    }\n    Object.defineProperty(Ng2DropdownState.prototype, \"selectedItem\", {\n        get: /**\n         * \\@name selectedItem\n         * @desc getter for _selectedItem\n         * @return {?}\n         */\n        function () {\n            return this._selectedItem;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@name selects a menu item and emits event\n     * @param {?} item\n     * @param {?=} dispatchEvent\n     * @return {?}\n     */\n    Ng2DropdownState.prototype.select = /**\n     * \\@name selects a menu item and emits event\n     * @param {?} item\n     * @param {?=} dispatchEvent\n     * @return {?}\n     */\n    function (item, dispatchEvent) {\n        if (dispatchEvent === void 0) { dispatchEvent = true; }\n        this._selectedItem = item;\n        if (!dispatchEvent || !item) {\n            return;\n        }\n        item.focus();\n        this.onItemSelected.emit(item);\n    };\n    /**\n     * \\@name unselect\n     * @desc sets _selectedItem as undefined\n     * @return {?}\n     */\n    Ng2DropdownState.prototype.unselect = /**\n     * \\@name unselect\n     * @desc sets _selectedItem as undefined\n     * @return {?}\n     */\n    function () {\n        this._selectedItem = undefined;\n    };\n    return Ng2DropdownState;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar DropdownStateService = /** @class */ (function () {\n    function DropdownStateService() {\n        this.menuState = {\n            isVisible: /** @type {?} */ (false),\n            toString: /**\n             * @return {?}\n             */\n            function () {\n                return this.isVisible === true ? 'visible' : 'hidden';\n            }\n        };\n        this.dropdownState = new Ng2DropdownState();\n    }\n    DropdownStateService.decorators = [\n        { type: Injectable },\n    ];\n    return DropdownStateService;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2MenuItem = /** @class */ (function () {\n    function Ng2MenuItem(state$$1, element, renderer) {\n        this.state = state$$1;\n        this.element = element;\n        this.renderer = renderer;\n        /**\n         * \\@preventClose\n         * @desc if true, clicking on the item won't close the dropdown\n         */\n        this.preventClose = false;\n    }\n    /**\n     * @return {?}\n     */\n    Ng2MenuItem.prototype.ngOnDestroy = /**\n     * @return {?}\n     */\n    function () {\n        this.state.dropdownState.onItemDestroyed.emit(this);\n    };\n    Object.defineProperty(Ng2MenuItem.prototype, \"isSelected\", {\n        get: /**\n         * \\@name isSelected\n         * @desc returns current selected item\n         * @return {?}\n         */\n        function () {\n            return this === this.state.dropdownState.selectedItem;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@name click\n     * @desc emits select event\n     * @param {?=} $event\n     * @return {?}\n     */\n    Ng2MenuItem.prototype.select = /**\n     * \\@name click\n     * @desc emits select event\n     * @param {?=} $event\n     * @return {?}\n     */\n    function ($event) {\n        this.state.dropdownState.select(this, true);\n        if ($event) {\n            $event.stopPropagation();\n            $event.preventDefault();\n        }\n    };\n    /**\n     * \\@name click\n     * @desc emits click event\n     * @return {?}\n     */\n    Ng2MenuItem.prototype.click = /**\n     * \\@name click\n     * @desc emits click event\n     * @return {?}\n     */\n    function () {\n        this.state.dropdownState.onItemClicked.emit(this);\n    };\n    /**\n     * \\@name focus\n     * @return {?}\n     */\n    Ng2MenuItem.prototype.focus = /**\n     * \\@name focus\n     * @return {?}\n     */\n    function () {\n        this.renderer.invokeElementMethod(this.element.nativeElement.children[0], 'focus');\n    };\n    Ng2MenuItem.decorators = [\n        { type: Component, args: [{\n                    selector: 'ng2-menu-item',\n                    styles: [\".ng2-menu-item{font-family:Roboto,\\\"Helvetica Neue\\\",Helvetica,Arial;background:#fff;color:rgba(0,0,0,.87);cursor:pointer;font-size:.9em;text-transform:none;font-weight:400;letter-spacing:.03em;height:48px;line-height:48px;padding:.3em 1.25rem;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;transition:background .25s}.ng2-menu-item--selected{background:rgba(158,158,158,.2);outline:0}.ng2-menu-item:focus{outline:0}.ng2-menu-item:active{background:rgba(158,158,158,.4)}:host(ng2-menu-item) /deep/ [ng2-menu-item-icon]{vertical-align:middle;font-size:28px;width:1.5em;height:30px;color:rgba(0,0,0,.44)}\"],\n                    template: \"<div class='ng2-menu-item'\\n     role=\\\"button\\\"\\n     tabindex=\\\"0\\\"\\n     [class.ng2-menu-item--selected]=\\\"isSelected\\\"\\n     (keydown.enter)=\\\"click()\\\"\\n     (click)=\\\"click()\\\"\\n     (mouseover)=\\\"select()\\\">\\n        <ng-content></ng-content>\\n</div>\\n\"\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2MenuItem.ctorParameters = function () { return [\n        { type: DropdownStateService, },\n        { type: ElementRef, },\n        { type: Renderer, },\n    ]; };\n    Ng2MenuItem.propDecorators = {\n        \"preventClose\": [{ type: Input },],\n        \"value\": [{ type: Input },],\n    };\n    return Ng2MenuItem;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2DropdownMenu = /** @class */ (function () {\n    function Ng2DropdownMenu(state$$1, element, renderer) {\n        this.state = state$$1;\n        this.element = element;\n        this.renderer = renderer;\n        /**\n         * \\@name width\n         */\n        this.width = 4;\n        /**\n         * \\@description if set to true, the first element of the dropdown will be automatically focused\n         * \\@name focusFirstElement\n         */\n        this.focusFirstElement = true;\n        /**\n         * \\@name appendToBody\n         */\n        this.appendToBody = true;\n        /**\n         * \\@name zIndex\n         */\n        this.zIndex = 1000;\n        this.listeners = {\n            arrowHandler: undefined,\n            handleKeypress: undefined\n        };\n    }\n    /**\n     * \\@name show\n     * \\@shows menu and selects first item\n     * @param {?=} position\n     * @param {?=} dynamic\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.show = /**\n     * \\@name show\n     * \\@shows menu and selects first item\n     * @param {?=} position\n     * @param {?=} dynamic\n     * @return {?}\n     */\n    function (position, dynamic) {\n        if (dynamic === void 0) { dynamic = true; }\n        var /** @type {?} */ dc = typeof document !== 'undefined' ? document : undefined;\n        var /** @type {?} */ wd = typeof window !== 'undefined' ? window : undefined;\n        if (!this.state.menuState.isVisible) {\n            // setting handlers\n            this.listeners.handleKeypress = this.renderer.listen(dc.body, 'keydown', this.handleKeypress.bind(this));\n            this.listeners.arrowHandler = this.renderer.listen(wd, 'keydown', arrowKeysHandler);\n        }\n        // update state\n        this.state.menuState.isVisible = true;\n        if (position) {\n            this.updatePosition(position, dynamic);\n        }\n    };\n    /**\n     * \\@name hide\n     * @desc hides menu\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.hide = /**\n     * \\@name hide\n     * @desc hides menu\n     * @return {?}\n     */\n    function () {\n        this.state.menuState.isVisible = false;\n        // reset selected item state\n        this.state.dropdownState.unselect();\n        // call function to unlisten\n        this.listeners.arrowHandler ? this.listeners.arrowHandler() : undefined;\n        this.listeners.handleKeypress ? this.listeners.handleKeypress() : undefined;\n    };\n    /**\n     * \\@name updatePosition\n     * @desc updates the menu position every time it is toggled\n     * @param {?} position {ClientRect}\n     * @param {?} dynamic {boolean}\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.updatePosition = /**\n     * \\@name updatePosition\n     * @desc updates the menu position every time it is toggled\n     * @param {?} position {ClientRect}\n     * @param {?} dynamic {boolean}\n     * @return {?}\n     */\n    function (position, dynamic) {\n        this.position = position;\n        this.updateOnChange(dynamic);\n    };\n    /**\n     * \\@name handleKeypress\n     * @desc executes functions on keyPress based on the key pressed\n     * @param {?} $event\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.handleKeypress = /**\n     * \\@name handleKeypress\n     * @desc executes functions on keyPress based on the key pressed\n     * @param {?} $event\n     * @return {?}\n     */\n    function ($event) {\n        var /** @type {?} */ key = $event.keyCode;\n        var /** @type {?} */ items = this.items.toArray();\n        var /** @type {?} */ index = items.indexOf(this.state.dropdownState.selectedItem);\n        if (!ACTIONS.hasOwnProperty(key)) {\n            return;\n        }\n        ACTIONS[key].call(this, index, items, this.state.dropdownState);\n    };\n    /**\n     * \\@name getMenuElement\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.getMenuElement = /**\n     * \\@name getMenuElement\n     * @return {?}\n     */\n    function () {\n        return this.element.nativeElement.children[0];\n    };\n    /**\n     * \\@name calcPositionOffset\n     * @param {?} position\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.calcPositionOffset = /**\n     * \\@name calcPositionOffset\n     * @param {?} position\n     * @return {?}\n     */\n    function (position) {\n        var /** @type {?} */ wd = typeof window !== 'undefined' ? window : undefined;\n        var /** @type {?} */ dc = typeof document !== 'undefined' ? document : undefined;\n        if (!wd || !dc || !position) {\n            return;\n        }\n        var /** @type {?} */ element = this.getMenuElement();\n        var /** @type {?} */ supportPageOffset = wd.pageXOffset !== undefined;\n        var /** @type {?} */ isCSS1Compat = ((dc.compatMode || '') === 'CSS1Compat');\n        var /** @type {?} */ x = supportPageOffset ? wd.pageXOffset : isCSS1Compat ?\n            dc.documentElement.scrollLeft : dc.body.scrollLeft;\n        var /** @type {?} */ y = supportPageOffset ? wd.pageYOffset : isCSS1Compat ?\n            dc.documentElement.scrollTop : dc.body.scrollTop;\n        var _a = this.applyOffset(position.top + (this.appendToBody ? y - 15 : 0) + \"px\", position.left + x - 5 + \"px\"), top = _a.top, left = _a.left;\n        var /** @type {?} */ clientWidth = element.clientWidth;\n        var /** @type {?} */ clientHeight = element.clientHeight;\n        var /** @type {?} */ marginFromBottom = parseInt(top) + clientHeight + (this.appendToBody ? 0 : y - 15);\n        var /** @type {?} */ marginFromRight = parseInt(left) + clientWidth;\n        var /** @type {?} */ windowScrollHeight = wd.innerHeight + wd.scrollY;\n        var /** @type {?} */ windowScrollWidth = wd.innerWidth + wd.scrollX;\n        if (marginFromBottom >= windowScrollHeight) {\n            top = parseInt(top.replace('px', '')) - clientHeight + \"px\";\n        }\n        if (marginFromRight >= windowScrollWidth) {\n            var /** @type {?} */ marginRight = marginFromRight - windowScrollWidth + 30;\n            left = parseInt(left.replace('px', '')) - marginRight + \"px\";\n        }\n        return { top: top, left: left };\n    };\n    /**\n     * @param {?} top\n     * @param {?} left\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.applyOffset = /**\n     * @param {?} top\n     * @param {?} left\n     * @return {?}\n     */\n    function (top, left) {\n        if (!this.offset) {\n            return { top: top, left: left };\n        }\n        var /** @type {?} */ offset = this.offset.split(' ');\n        if (!offset[1]) {\n            offset[1] = '0';\n        }\n        top = parseInt(top.replace('px', '')) + parseInt(offset[0]) + \"px\";\n        left = parseInt(left.replace('px', '')) + parseInt(offset[1]) + \"px\";\n        return { top: top, left: left };\n    };\n    /**\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.ngOnInit = /**\n     * @return {?}\n     */\n    function () {\n        var /** @type {?} */ dc = typeof document !== 'undefined' ? document : undefined;\n        if (this.appendToBody) {\n            // append menu element to the body\n            dc.body.appendChild(this.element.nativeElement);\n        }\n    };\n    /**\n     * @param {?=} dynamic\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.updateOnChange = /**\n     * @param {?=} dynamic\n     * @return {?}\n     */\n    function (dynamic) {\n        if (dynamic === void 0) { dynamic = true; }\n        var /** @type {?} */ element = this.getMenuElement();\n        var /** @type {?} */ position = this.calcPositionOffset(this.position);\n        if (position) {\n            this.renderer.setElementStyle(element, 'top', position.top.toString());\n            this.renderer.setElementStyle(element, 'left', position.left.toString());\n        }\n        // select first item unless user disabled this option\n        if (this.focusFirstElement &&\n            this.items.first &&\n            !this.state.dropdownState.selectedItem) {\n            this.state.dropdownState.select(this.items.first, false);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    Ng2DropdownMenu.prototype.ngOnDestroy = /**\n     * @return {?}\n     */\n    function () {\n        var /** @type {?} */ elem = this.element.nativeElement;\n        elem.parentNode.removeChild(elem);\n        if (this.listeners.handleKeypress) {\n            this.listeners.handleKeypress();\n        }\n    };\n    Ng2DropdownMenu.decorators = [\n        { type: Component, args: [{\n                    selector: 'ng2-dropdown-menu',\n                    styles: [\":host{display:block}.ng2-dropdown-menu{overflow-y:auto;box-shadow:0 1px 2px 0 rgba(0,0,0,.3);position:absolute;padding:.5em 0;background:#fff;border-radius:1px;max-height:400px;width:260px;min-height:0;display:block}.ng2-dropdown-menu.ng2-dropdown-menu--inside-element{position:fixed}.ng2-dropdown-menu.ng2-dropdown-menu--width--2{width:200px}.ng2-dropdown-menu.ng2-dropdown-menu--width--4{width:260px}.ng2-dropdown-menu.ng2-dropdown-menu--width--6{width:320px}.ng2-dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;z-index:1;overflow:hidden}:host /deep/ .ng2-menu-divider{height:1px;min-height:1px;max-height:1px;width:100%;display:block;background:#f9f9f9}\"],\n                    template: \"<!-- MENU -->\\n<div class='ng2-dropdown-menu ng2-dropdown-menu---width--{{ width }}'\\n     [class.ng2-dropdown-menu--inside-element]=\\\"!appendToBody\\\"\\n     [class.ng2-dropdown-menu--open]=\\\"state.menuState.isVisible\\\"\\n     [style.z-index]=\\\"zIndex\\\"\\n     [@fade]=\\\"state.menuState.toString()\\\">\\n        <div class=\\\"ng2-dropdown-menu__options-container\\\"\\n             [@opacity]=\\\"state.menuState.toString()\\\">\\n            <ng-content></ng-content>\\n        </div>\\n</div>\\n\\n<!-- BACKDROP -->\\n<div class=\\\"ng2-dropdown-backdrop\\\" *ngIf=\\\"state.menuState.isVisible\\\" (click)=\\\"hide()\\\"></div>\\n\",\n                    animations: [\n                        trigger('fade', [\n                            state('visible', style({ display: 'block', opacity: 1, height: '*', width: '*' })),\n                            state('hidden', style({ display: 'none', opacity: 0, overflow: 'hidden', height: 0, width: 0 })),\n                            transition('hidden => visible', [\n                                animate('250ms ease-in', style({ opacity: 1, height: '*', width: '*' }))\n                            ]),\n                            transition('visible => hidden', [\n                                animate('350ms ease-out', style({ opacity: 0, width: 0, height: 0 }))\n                            ])\n                        ]),\n                        trigger('opacity', [\n                            transition('hidden => visible', [\n                                animate('450ms ease-in', keyframes([\n                                    style({ opacity: 0, offset: 0 }),\n                                    style({ opacity: 1, offset: 1 }),\n                                ]))\n                            ]),\n                            transition('visible => hidden', [\n                                animate('250ms ease-out', keyframes([\n                                    style({ opacity: 1, offset: 0 }),\n                                    style({ opacity: 0.5, offset: 0.3 }),\n                                    style({ opacity: 0, offset: 1 }),\n                                ]))\n                            ])\n                        ])\n                    ]\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2DropdownMenu.ctorParameters = function () { return [\n        { type: DropdownStateService, },\n        { type: ElementRef, },\n        { type: Renderer, },\n    ]; };\n    Ng2DropdownMenu.propDecorators = {\n        \"width\": [{ type: Input },],\n        \"focusFirstElement\": [{ type: Input },],\n        \"offset\": [{ type: Input },],\n        \"appendToBody\": [{ type: Input },],\n        \"zIndex\": [{ type: Input },],\n        \"items\": [{ type: ContentChildren, args: [Ng2MenuItem,] },],\n    };\n    return Ng2DropdownMenu;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2Dropdown = /** @class */ (function () {\n    function Ng2Dropdown(state$$1) {\n        this.state = state$$1;\n        this.dynamicUpdate = true;\n        // outputs\n        this.onItemClicked = new EventEmitter();\n        this.onItemSelected = new EventEmitter();\n        this.onShow = new EventEmitter();\n        this.onHide = new EventEmitter();\n    }\n    /**\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.ngOnInit = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        this.state.dropdownState.onItemClicked.subscribe(function (item) {\n            _this.onItemClicked.emit(item);\n            if (item.preventClose) {\n                return;\n            }\n            _this.hide.call(_this);\n        });\n        if (this.button) {\n            this.button.onMenuToggled.subscribe(function () {\n                _this.toggleMenu();\n            });\n        }\n        this.state.dropdownState.onItemSelected.subscribe(function (item) {\n            _this.onItemSelected.emit(item);\n        });\n        this.state.dropdownState.onItemDestroyed.subscribe(function (item) {\n            var /** @type {?} */ newSelectedItem;\n            var /** @type {?} */ items = _this.menu.items.toArray();\n            if (item !== _this.state.dropdownState.selectedItem) {\n                return;\n            }\n            if (_this.menu.focusFirstElement) {\n                newSelectedItem = item === items[0] && items.length > 1 ? items[1] : items[0];\n            }\n            _this.state.dropdownState.select(newSelectedItem);\n        });\n    };\n    /**\n     * \\@name toggleMenu\n     * @desc toggles menu visibility\n     * @param {?=} position\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.toggleMenu = /**\n     * \\@name toggleMenu\n     * @desc toggles menu visibility\n     * @param {?=} position\n     * @return {?}\n     */\n    function (position) {\n        if (position === void 0) { position = this.button.getPosition(); }\n        this.state.menuState.isVisible ? this.hide() : this.show(position);\n    };\n    /**\n     * - hides dropdown\n     * \\@name hide\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.hide = /**\n     * - hides dropdown\n     * \\@name hide\n     * @return {?}\n     */\n    function () {\n        this.menu.hide();\n        this.onHide.emit(this);\n    };\n    /**\n     * - shows dropdown\n     * \\@name show\n     * @param {?=} position\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.show = /**\n     * - shows dropdown\n     * \\@name show\n     * @param {?=} position\n     * @return {?}\n     */\n    function (position) {\n        if (position === void 0) { position = this.button.getPosition(); }\n        this.menu.show(position, this.dynamicUpdate);\n        this.onShow.emit(this);\n    };\n    /**\n     * \\@name scrollListener\n     * @return {?}\n     */\n    Ng2Dropdown.prototype.scrollListener = /**\n     * \\@name scrollListener\n     * @return {?}\n     */\n    function () {\n        if (this.button && this.dynamicUpdate) {\n            this.menu.updatePosition(this.button.getPosition(), true);\n        }\n    };\n    Ng2Dropdown.decorators = [\n        { type: Component, args: [{\n                    selector: 'ng2-dropdown',\n                    template: \"<div class=\\\"ng2-dropdown-container\\\">\\n    <ng-content select=\\\"ng2-dropdown-button\\\"></ng-content>\\n    <ng-content select=\\\"ng2-dropdown-menu\\\"></ng-content>\\n</div>\\n\",\n                    providers: [DropdownStateService]\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2Dropdown.ctorParameters = function () { return [\n        { type: DropdownStateService, },\n    ]; };\n    Ng2Dropdown.propDecorators = {\n        \"button\": [{ type: ContentChild, args: [Ng2DropdownButton,] },],\n        \"menu\": [{ type: ContentChild, args: [Ng2DropdownMenu,] },],\n        \"dynamicUpdate\": [{ type: Input },],\n        \"onItemClicked\": [{ type: Output },],\n        \"onItemSelected\": [{ type: Output },],\n        \"onShow\": [{ type: Output },],\n        \"onHide\": [{ type: Output },],\n        \"scrollListener\": [{ type: HostListener, args: ['window:scroll',] },],\n    };\n    return Ng2Dropdown;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Ng2DropdownModule = /** @class */ (function () {\n    function Ng2DropdownModule() {\n    }\n    Ng2DropdownModule.decorators = [\n        { type: NgModule, args: [{\n                    exports: [\n                        Ng2MenuItem,\n                        Ng2DropdownButton,\n                        Ng2DropdownMenu,\n                        Ng2Dropdown\n                    ],\n                    declarations: [\n                        Ng2Dropdown,\n                        Ng2MenuItem,\n                        Ng2DropdownButton,\n                        Ng2DropdownMenu,\n                    ],\n                    imports: [\n                        CommonModule\n                    ]\n                },] },\n    ];\n    return Ng2DropdownModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\nexport { Ng2Dropdown, Ng2DropdownMenu, Ng2MenuItem, Ng2DropdownButton, Ng2DropdownModule, DropdownStateService };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyLW1hdGVyaWFsLWRyb3Bkb3duLmpzLm1hcCIsInNvdXJjZXMiOlsibmc6Ly9uZzItbWF0ZXJpYWwtZHJvcGRvd24vc3JjL21vZHVsZXMvY29tcG9uZW50cy9idXR0b24vbmcyLWRyb3Bkb3duLWJ1dHRvbi50cyIsIm5nOi8vbmcyLW1hdGVyaWFsLWRyb3Bkb3duL3NyYy9tb2R1bGVzL2NvbXBvbmVudHMvbWVudS9hY3Rpb25zLnRzIiwibmc6Ly9uZzItbWF0ZXJpYWwtZHJvcGRvd24vc3JjL21vZHVsZXMvc2VydmljZXMvbmcyLWRyb3Bkb3duLXN0YXRlLnRzIiwibmc6Ly9uZzItbWF0ZXJpYWwtZHJvcGRvd24vc3JjL21vZHVsZXMvc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZS50cyIsIm5nOi8vbmcyLW1hdGVyaWFsLWRyb3Bkb3duL3NyYy9tb2R1bGVzL2NvbXBvbmVudHMvbWVudS1pdGVtL25nMi1tZW51LWl0ZW0udHMiLCJuZzovL25nMi1tYXRlcmlhbC1kcm9wZG93bi9zcmMvbW9kdWxlcy9jb21wb25lbnRzL21lbnUvbmcyLWRyb3Bkb3duLW1lbnUudHMiLCJuZzovL25nMi1tYXRlcmlhbC1kcm9wZG93bi9zcmMvbW9kdWxlcy9jb21wb25lbnRzL2Ryb3Bkb3duL25nMi1kcm9wZG93bi50cyIsIm5nOi8vbmcyLW1hdGVyaWFsLWRyb3Bkb3duL3NyYy9tb2R1bGVzL25nMi1kcm9wZG93bi5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT3V0cHV0LFxuICAgIElucHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nMi1kcm9wZG93bi1idXR0b24nLFxuICAgIHN0eWxlczogW2AubmcyLWRyb3Bkb3duLWJ1dHRvbntmb250LWZhbWlseTpSb2JvdG8sXCJIZWx2ZXRpY2EgTmV1ZVwiLEhlbHZldGljYSxBcmlhbDtiYWNrZ3JvdW5kOiNmZmY7cGFkZGluZzouNDVyZW0gLjI1cmVtO2ZvbnQtc2l6ZToxNHB4O2xldHRlci1zcGFjaW5nOi4wOHJlbTtjb2xvcjojNDQ0O291dGxpbmU6MDtjdXJzb3I6cG9pbnRlcjtmb250LXdlaWdodDo0MDA7Ym9yZGVyOm5vbmU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2VmZWZlZjt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOjEwMHB4O3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzttYXgtd2lkdGg6MTUwcHh9Lm5nMi1kcm9wZG93bi1idXR0b246aG92ZXJ7Y29sb3I6IzIyMn0ubmcyLWRyb3Bkb3duLWJ1dHRvbjphY3RpdmUsLm5nMi1kcm9wZG93bi1idXR0b246Zm9jdXN7Y29sb3I6IzIyMjtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjMjE5NmYzfS5uZzItZHJvcGRvd24tYnV0dG9uX19sYWJlbHtmbGV4OjEgMSA5NSV9Lm5nMi1kcm9wZG93bi1idXR0b25fX2NhcmV0e3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIDYlfTpob3N0LWNvbnRleHQoLm5nMi1kcm9wZG93bi1idXR0b24tLWljb24pIC5uZzItZHJvcGRvd24tYnV0dG9ue2JvcmRlcjpub25lO21pbi13aWR0aDo0MHB4O3dpZHRoOjQwcHg7Ym9yZGVyLXJhZGl1czoxMDAlO3RyYW5zaXRpb246YWxsIC4yczt0ZXh0LWFsaWduOmNlbnRlcjtoZWlnaHQ6NDBweDtwYWRkaW5nOi41ZW19Omhvc3QtY29udGV4dCgubmcyLWRyb3Bkb3duLWJ1dHRvbi0taWNvbikgLm5nMi1kcm9wZG93bi1idXR0b246YWN0aXZle2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMil9YF0sXG4gICAgdGVtcGxhdGU6IGA8YnV0dG9uIGNsYXNzPSduZzItZHJvcGRvd24tYnV0dG9uJyB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiIHRhYmluZGV4PVwiMHNcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm5nMi1kcm9wZG93bi1idXR0b25fX2xhYmVsXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3NwYW4+XG5cbiAgICA8c3BhbiBjbGFzcz1cIm5nMi1kcm9wZG93bi1idXR0b25fX2NhcmV0XCIgKm5nSWY9XCJzaG93Q2FyZXRcIj5cbiAgICAgICAgPHN2ZyBlbmFibGUtYmFja2dyb3VuZD1cIm5ldyAwIDAgMzIgMzJcIiBoZWlnaHQ9XCIxNnB4XCIgaWQ9XCLDkMKhw5DCu8OQwr7DkMK5XzFcIiB2ZXJzaW9uPVwiMS4xXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIHdpZHRoPVwiMTZweFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPjxwYXRoIGQ9XCJNMjQuMjg1LDExLjI4NEwxNiwxOS41NzFsLTguMjg1LTguMjg4Yy0wLjM5NS0wLjM5NS0xLjAzNC0wLjM5NS0xLjQyOSwwICBjLTAuMzk0LDAuMzk1LTAuMzk0LDEuMDM1LDAsMS40M2w4Ljk5OSw5LjAwMmwwLDBsMCwwYzAuMzk0LDAuMzk1LDEuMDM0LDAuMzk1LDEuNDI4LDBsOC45OTktOS4wMDIgIGMwLjM5NC0wLjM5NSwwLjM5NC0xLjAzNiwwLTEuNDMxQzI1LjMxOSwxMC44ODksMjQuNjc5LDEwLjg4OSwyNC4yODUsMTEuMjg0elwiIGZpbGw9XCIjMTIxMzEzXCIgaWQ9XCJFeHBhbmRfTW9yZVwiLz48Zy8+PGcvPjxnLz48Zy8+PGcvPjxnLz48L3N2Zz5cbiAgICA8L3NwYW4+XG48L2J1dHRvbj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgTmcyRHJvcGRvd25CdXR0b24ge1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25NZW51VG9nZ2xlZDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzaG93Q2FyZXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmKSB7fVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgdG9nZ2xlTWVudVxuICAgICAqIEBkZXNjIGVtaXRzIGV2ZW50IHRvIHRvZ2dsZSBtZW51XG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZU1lbnUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25NZW51VG9nZ2xlZC5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIGdldFBvc2l0aW9uXG4gICAgICogQGRlc2MgcmV0dXJucyBwb3NpdGlvbiBvZiB0aGUgYnV0dG9uXG4gICAgICovXG4gICAgcHVibGljIGdldFBvc2l0aW9uKCk6IENsaWVudFJlY3Qge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IE5nMk1lbnVJdGVtIH0gZnJvbSAnLi4vbWVudS1pdGVtL25nMi1tZW51LWl0ZW0nO1xuaW1wb3J0IHsgTmcyRHJvcGRvd25NZW51IH0gZnJvbSAnLi9uZzItZHJvcGRvd24tbWVudSc7XG5pbXBvcnQgeyBOZzJEcm9wZG93blN0YXRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmcyLWRyb3Bkb3duLXN0YXRlJztcblxuY29uc3QgS0VZUyA9IHtcbiAgICBCQUNLU1BBQ0U6IDksXG4gICAgUFJFVjogMzgsXG4gICAgTkVYVDogNDAsXG4gICAgRU5URVI6IDEzLFxuICAgIEVTQ0FQRTogMjdcbn07XG5cbi8qKlxuICogQG5hbWUgb25Td2l0Y2hOZXh0XG4gKiBAcGFyYW0gaW5kZXhcbiAqIEBwYXJhbSBpdGVtc1xuICogQHBhcmFtIHN0YXRlXG4gKi9cbmNvbnN0IG9uU3dpdGNoTmV4dCA9IChpbmRleDogbnVtYmVyLCBpdGVtczogTmcyTWVudUl0ZW1bXSwgc3RhdGU6IE5nMkRyb3Bkb3duU3RhdGUpID0+IHtcbiAgICBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdChpdGVtc1tpbmRleCArIDFdLCB0cnVlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIEBuYW1lIG9uU3dpdGNoUHJldlxuICogQHBhcmFtIGluZGV4XG4gKiBAcGFyYW0gaXRlbXNcbiAqIEBwYXJhbSBzdGF0ZVxuICovXG5jb25zdCBvblN3aXRjaFByZXYgPSAoaW5kZXg6IG51bWJlciwgaXRlbXM6IE5nMk1lbnVJdGVtW10sIHN0YXRlOiBOZzJEcm9wZG93blN0YXRlKSA9PiB7XG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBzdGF0ZS5zZWxlY3QoaXRlbXNbaW5kZXggLSAxXSwgdHJ1ZSk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBAbmFtZSBvbkJhY2tzcGFjZVxuICogQHBhcmFtIGluZGV4XG4gKiBAcGFyYW0gaXRlbXNcbiAqIEBwYXJhbSBzdGF0ZVxuICovXG5jb25zdCBvbkJhY2tzcGFjZSA9IChpbmRleDogbnVtYmVyLCBpdGVtczogTmcyTWVudUl0ZW1bXSwgc3RhdGU6IE5nMkRyb3Bkb3duU3RhdGUpID0+IHtcbiAgICBpZiAoaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHN0YXRlLnNlbGVjdChpdGVtc1tpbmRleCArIDFdLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5zZWxlY3QoaXRlbXNbMF0sIHRydWUpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIG9uRXNjYXBlKHRoaXM6IE5nMkRyb3Bkb3duTWVudSkge1xuICAgIHRoaXMuaGlkZSgpO1xufTtcblxuLyoqXG4gKiBAbmFtZSBvbkl0ZW1DbGlja2VkXG4gKiBAcGFyYW0gaW5kZXhcbiAqIEBwYXJhbSBpdGVtc1xuICogQHBhcmFtIHN0YXRlXG4gKi9cbmNvbnN0IG9uSXRlbUNsaWNrZWQgPSAoaW5kZXg6IG51bWJlciwgaXRlbXM6IE5nMk1lbnVJdGVtW10sIHN0YXRlOiBOZzJEcm9wZG93blN0YXRlKSA9PiB7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkSXRlbSA/IHN0YXRlLnNlbGVjdGVkSXRlbS5jbGljaygpIDogdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IEFDVElPTlMgPSB7XG4gICAgW0tFWVMuQkFDS1NQQUNFXTogb25CYWNrc3BhY2UsXG4gICAgW0tFWVMuUFJFVl06IG9uU3dpdGNoUHJldixcbiAgICBbS0VZUy5ORVhUXTogb25Td2l0Y2hOZXh0LFxuICAgIFtLRVlTLkVOVEVSXTogb25JdGVtQ2xpY2tlZCxcbiAgICBbS0VZUy5FU0NBUEVdOiBvbkVzY2FwZVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFycm93S2V5c0hhbmRsZXIoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoWzM4LCA0MF0uaW5kZXhPZihldmVudC5rZXlDb2RlKSA+IC0xKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZzJNZW51SXRlbSB9IGZyb20gJy4uL2NvbXBvbmVudHMvbWVudS1pdGVtL25nMi1tZW51LWl0ZW0nO1xuZXhwb3J0IGNsYXNzIE5nMkRyb3Bkb3duU3RhdGUge1xuICAgIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZDogRXZlbnRFbWl0dGVyPE5nMk1lbnVJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8TmcyTWVudUl0ZW0+KCk7XG4gICAgcHVibGljIG9uSXRlbUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxOZzJNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE5nMk1lbnVJdGVtPigpO1xuICAgIHB1YmxpYyBvbkl0ZW1EZXN0cm95ZWQ6IEV2ZW50RW1pdHRlcjxOZzJNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPE5nMk1lbnVJdGVtPigpO1xuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtOiBOZzJNZW51SXRlbTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHNlbGVjdGVkSXRlbVxuICAgICAqIEBkZXNjIGdldHRlciBmb3IgX3NlbGVjdGVkSXRlbVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtKCk6IE5nMk1lbnVJdGVtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBzZWxlY3RzIGEgbWVudSBpdGVtIGFuZCBlbWl0cyBldmVudFxuICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdChpdGVtOiBOZzJNZW51SXRlbSB8IHVuZGVmaW5lZCwgZGlzcGF0Y2hFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtID0gaXRlbTtcblxuICAgICAgICBpZiAoIWRpc3BhdGNoRXZlbnQgfHwgIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW0uZm9jdXMoKTtcblxuICAgICAgICB0aGlzLm9uSXRlbVNlbGVjdGVkLmVtaXQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgdW5zZWxlY3RcbiAgICAgKiBAZGVzYyBzZXRzIF9zZWxlY3RlZEl0ZW0gYXMgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcHVibGljIHVuc2VsZWN0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEl0ZW0gPSB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmcyRHJvcGRvd25TdGF0ZSB9IGZyb20gJy4vbmcyLWRyb3Bkb3duLXN0YXRlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duU3RhdGVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgbWVudVN0YXRlID0ge1xuICAgICAgICBpc1Zpc2libGU6IDxib29sZWFuPmZhbHNlLFxuICAgICAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWaXNpYmxlID09PSB0cnVlID8gJ3Zpc2libGUnIDogJ2hpZGRlbic7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIGRyb3Bkb3duU3RhdGU6IE5nMkRyb3Bkb3duU3RhdGUgPSBuZXcgTmcyRHJvcGRvd25TdGF0ZSgpO1xufVxuIiwiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgUmVuZGVyZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERyb3Bkb3duU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmcyLW1lbnUtaXRlbScsXG4gICAgc3R5bGVzOiBbYC5uZzItbWVudS1pdGVte2ZvbnQtZmFtaWx5OlJvYm90byxcIkhlbHZldGljYSBOZXVlXCIsSGVsdmV0aWNhLEFyaWFsO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjpyZ2JhKDAsMCwwLC44Nyk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOi45ZW07dGV4dC10cmFuc2Zvcm06bm9uZTtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07aGVpZ2h0OjQ4cHg7bGluZS1oZWlnaHQ6NDhweDtwYWRkaW5nOi4zZW0gMS4yNXJlbTt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC4yNXN9Lm5nMi1tZW51LWl0ZW0tLXNlbGVjdGVke2JhY2tncm91bmQ6cmdiYSgxNTgsMTU4LDE1OCwuMik7b3V0bGluZTowfS5uZzItbWVudS1pdGVtOmZvY3Vze291dGxpbmU6MH0ubmcyLW1lbnUtaXRlbTphY3RpdmV7YmFja2dyb3VuZDpyZ2JhKDE1OCwxNTgsMTU4LC40KX06aG9zdChuZzItbWVudS1pdGVtKSAvZGVlcC8gW25nMi1tZW51LWl0ZW0taWNvbl17dmVydGljYWwtYWxpZ246bWlkZGxlO2ZvbnQtc2l6ZToyOHB4O3dpZHRoOjEuNWVtO2hlaWdodDozMHB4O2NvbG9yOnJnYmEoMCwwLDAsLjQ0KX1gXSxcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9J25nMi1tZW51LWl0ZW0nXG4gICAgIHJvbGU9XCJidXR0b25cIlxuICAgICB0YWJpbmRleD1cIjBcIlxuICAgICBbY2xhc3MubmcyLW1lbnUtaXRlbS0tc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZFwiXG4gICAgIChrZXlkb3duLmVudGVyKT1cImNsaWNrKClcIlxuICAgICAoY2xpY2spPVwiY2xpY2soKVwiXG4gICAgIChtb3VzZW92ZXIpPVwic2VsZWN0KClcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5gXG59KVxuZXhwb3J0IGNsYXNzIE5nMk1lbnVJdGVtIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAcHJldmVudENsb3NlXG4gICAgICogQGRlc2MgaWYgdHJ1ZSwgY2xpY2tpbmcgb24gdGhlIGl0ZW0gd29uJ3QgY2xvc2UgdGhlIGRyb3Bkb3duXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHByZXZlbnRDbG9zZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgdmFsdWVcbiAgICAgKiBAZGVzYyBhbnkgdmFsdWUgYXNzb2NpYXRlZCB0byB0aGUgaXRlbVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdGF0ZTogRHJvcGRvd25TdGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyKSB7fVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUub25JdGVtRGVzdHJveWVkLmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgaXNTZWxlY3RlZFxuICAgICAqIEBkZXNjIHJldHVybnMgY3VycmVudCBzZWxlY3RlZCBpdGVtXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcyA9PT0gdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdGVkSXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBjbGlja1xuICAgICAqIEBkZXNjIGVtaXRzIHNlbGVjdCBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QoJGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUuc2VsZWN0KHRoaXMsIHRydWUpO1xuXG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgY2xpY2tcbiAgICAgKiBAZGVzYyBlbWl0cyBjbGljayBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBjbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLm9uSXRlbUNsaWNrZWQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBmb2N1c1xuICAgICAqL1xuICAgIHB1YmxpYyBmb2N1cygpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLCAnZm9jdXMnKTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIFJlbmRlcmVyLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgdHJpZ2dlcixcbiAgICBzdHlsZSxcbiAgICB0cmFuc2l0aW9uLFxuICAgIGFuaW1hdGUsXG4gICAga2V5ZnJhbWVzLFxuICAgIHN0YXRlXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5pbXBvcnQgeyBBQ1RJT05TLCBhcnJvd0tleXNIYW5kbGVyIH0gZnJvbSAnLi9hY3Rpb25zJztcblxuaW1wb3J0IHsgTmcyTWVudUl0ZW0gfSBmcm9tICcuLi9tZW51LWl0ZW0vbmcyLW1lbnUtaXRlbSc7XG5pbXBvcnQgeyBEcm9wZG93blN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Ryb3Bkb3duLXN0YXRlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25nMi1kcm9wZG93bi1tZW51JyxcbiAgICBzdHlsZXM6IFtgOmhvc3R7ZGlzcGxheTpibG9ja30ubmcyLWRyb3Bkb3duLW1lbnV7b3ZlcmZsb3cteTphdXRvO2JveC1zaGFkb3c6MCAxcHggMnB4IDAgcmdiYSgwLDAsMCwuMyk7cG9zaXRpb246YWJzb2x1dGU7cGFkZGluZzouNWVtIDA7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MXB4O21heC1oZWlnaHQ6NDAwcHg7d2lkdGg6MjYwcHg7bWluLWhlaWdodDowO2Rpc3BsYXk6YmxvY2t9Lm5nMi1kcm9wZG93bi1tZW51Lm5nMi1kcm9wZG93bi1tZW51LS1pbnNpZGUtZWxlbWVudHtwb3NpdGlvbjpmaXhlZH0ubmcyLWRyb3Bkb3duLW1lbnUubmcyLWRyb3Bkb3duLW1lbnUtLXdpZHRoLS0ye3dpZHRoOjIwMHB4fS5uZzItZHJvcGRvd24tbWVudS5uZzItZHJvcGRvd24tbWVudS0td2lkdGgtLTR7d2lkdGg6MjYwcHh9Lm5nMi1kcm9wZG93bi1tZW51Lm5nMi1kcm9wZG93bi1tZW51LS13aWR0aC0tNnt3aWR0aDozMjBweH0ubmcyLWRyb3Bkb3duLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6MTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgL2RlZXAvIC5uZzItbWVudS1kaXZpZGVye2hlaWdodDoxcHg7bWluLWhlaWdodDoxcHg7bWF4LWhlaWdodDoxcHg7d2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6I2Y5ZjlmOX1gXSxcbiAgICB0ZW1wbGF0ZTogYDwhLS0gTUVOVSAtLT5cbjxkaXYgY2xhc3M9J25nMi1kcm9wZG93bi1tZW51IG5nMi1kcm9wZG93bi1tZW51LS0td2lkdGgtLXt7IHdpZHRoIH19J1xuICAgICBbY2xhc3MubmcyLWRyb3Bkb3duLW1lbnUtLWluc2lkZS1lbGVtZW50XT1cIiFhcHBlbmRUb0JvZHlcIlxuICAgICBbY2xhc3MubmcyLWRyb3Bkb3duLW1lbnUtLW9wZW5dPVwic3RhdGUubWVudVN0YXRlLmlzVmlzaWJsZVwiXG4gICAgIFtzdHlsZS56LWluZGV4XT1cInpJbmRleFwiXG4gICAgIFtAZmFkZV09XCJzdGF0ZS5tZW51U3RhdGUudG9TdHJpbmcoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmcyLWRyb3Bkb3duLW1lbnVfX29wdGlvbnMtY29udGFpbmVyXCJcbiAgICAgICAgICAgICBbQG9wYWNpdHldPVwic3RhdGUubWVudVN0YXRlLnRvU3RyaW5nKClcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBCQUNLRFJPUCAtLT5cbjxkaXYgY2xhc3M9XCJuZzItZHJvcGRvd24tYmFja2Ryb3BcIiAqbmdJZj1cInN0YXRlLm1lbnVTdGF0ZS5pc1Zpc2libGVcIiAoY2xpY2spPVwiaGlkZSgpXCI+PC9kaXY+XG5gLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignZmFkZScsIFtcbiAgICAgICAgICAgIHN0YXRlKCd2aXNpYmxlJywgc3R5bGUoXG4gICAgICAgICAgICAgICAge2Rpc3BsYXk6ICdibG9jaycsIG9wYWNpdHk6IDEsIGhlaWdodDogJyonLCB3aWR0aDogJyonfVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBzdGF0ZSgnaGlkZGVuJywgc3R5bGUoXG4gICAgICAgICAgICAgICAge2Rpc3BsYXk6ICdub25lJywgb3BhY2l0eTogMCwgb3ZlcmZsb3c6ICdoaWRkZW4nLCBoZWlnaHQ6IDAsIHdpZHRoOiAwfVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdoaWRkZW4gPT4gdmlzaWJsZScsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLWluJyxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDEsIGhlaWdodDogJyonLCB3aWR0aDogJyonfSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gaGlkZGVuJywgW1xuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzM1MG1zIGVhc2Utb3V0JyxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDB9KVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdvcGFjaXR5JywgW1xuICAgICAgICAgICAgdHJhbnNpdGlvbignaGlkZGVuID0+IHZpc2libGUnLCBbXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnNDUwbXMgZWFzZS1pbicsIGtleWZyYW1lcyhbXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlKHtvcGFjaXR5OiAwLCBvZmZzZXQ6IDB9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDEsIG9mZnNldDogMX0pLFxuICAgICAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlID0+IGhpZGRlbicsIFtcbiAgICAgICAgICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLW91dCcsIGtleWZyYW1lcyhbXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlKHtvcGFjaXR5OiAxLCBvZmZzZXQ6IDB9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDAuNSwgb2Zmc2V0OiAwLjN9KSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoe29wYWNpdHk6IDAsIG9mZnNldDogMX0pLFxuICAgICAgICAgICAgICAgIF0pKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5nMkRyb3Bkb3duTWVudSB7XG4gICAgLyoqXG4gICAgICogQG5hbWUgd2lkdGhcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgd2lkdGg6IG51bWJlciA9IDQ7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gaWYgc2V0IHRvIHRydWUsIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBkcm9wZG93biB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZFxuICAgICAqIEBuYW1lIGZvY3VzRmlyc3RFbGVtZW50XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGZvY3VzRmlyc3RFbGVtZW50OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBzZXRzIGRyb3Bkb3duIG9mZnNldCBmcm9tIHRoZSBidXR0b25cbiAgICAgKiBAbmFtZSBvZmZzZXQge3N0cmluZ30gZm9sbG93IGZvcm1hdCAnPG51bWJlcj4gPG51bWJlcj4nIGV4LiAnMCAyMCdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgb2Zmc2V0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBhcHBlbmRUb0JvZHlcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYXBwZW5kVG9Cb2R5OiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHpJbmRleFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyB6SW5kZXggPSAxMDAwO1xuXG4gICAgLyoqXG4gICAgICogQG5hbWUgaXRlbXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKE5nMk1lbnVJdGVtKSBwdWJsaWMgaXRlbXM6IFF1ZXJ5TGlzdDxOZzJNZW51SXRlbT47XG5cbiAgICBwcml2YXRlIHBvc2l0aW9uOiBDbGllbnRSZWN0O1xuXG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnMgPSB7XG4gICAgICAgIGFycm93SGFuZGxlcjogdW5kZWZpbmVkLFxuICAgICAgICBoYW5kbGVLZXlwcmVzczogdW5kZWZpbmVkXG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGF0ZTogRHJvcGRvd25TdGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyKSB7fVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgc2hvd1xuICAgICAqIEBzaG93cyBtZW51IGFuZCBzZWxlY3RzIGZpcnN0IGl0ZW1cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdyhwb3NpdGlvbj86IENsaWVudFJlY3QsIGR5bmFtaWMgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRjID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB3ZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5tZW51U3RhdGUuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICAvLyBzZXR0aW5nIGhhbmRsZXJzXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5oYW5kbGVLZXlwcmVzcyA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGRjLmJvZHksICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlwcmVzcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLmFycm93SGFuZGxlciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHdkLCAna2V5ZG93bicsIGFycm93S2V5c0hhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIHN0YXRlXG4gICAgICAgIHRoaXMuc3RhdGUubWVudVN0YXRlLmlzVmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uLCBkeW5hbWljKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIGhpZGVcbiAgICAgKiBAZGVzYyBoaWRlcyBtZW51XG4gICAgICovXG4gICAgcHVibGljIGhpZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhdGUubWVudVN0YXRlLmlzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIHJlc2V0IHNlbGVjdGVkIGl0ZW0gc3RhdGVcbiAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnVuc2VsZWN0KCk7XG5cbiAgICAgICAgLy8gY2FsbCBmdW5jdGlvbiB0byB1bmxpc3RlblxuICAgICAgICB0aGlzLmxpc3RlbmVycy5hcnJvd0hhbmRsZXIgPyB0aGlzLmxpc3RlbmVycy5hcnJvd0hhbmRsZXIoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMuaGFuZGxlS2V5cHJlc3MgPyB0aGlzLmxpc3RlbmVycy5oYW5kbGVLZXlwcmVzcygpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHVwZGF0ZVBvc2l0aW9uXG4gICAgICogQGRlc2MgdXBkYXRlcyB0aGUgbWVudSBwb3NpdGlvbiBldmVyeSB0aW1lIGl0IGlzIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0gcG9zaXRpb24ge0NsaWVudFJlY3R9XG4gICAgICogQHBhcmFtIGR5bmFtaWMge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVBvc2l0aW9uKHBvc2l0aW9uOiBDbGllbnRSZWN0LCBkeW5hbWljOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgdGhpcy51cGRhdGVPbkNoYW5nZShkeW5hbWljKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBoYW5kbGVLZXlwcmVzc1xuICAgICAqIEBkZXNjIGV4ZWN1dGVzIGZ1bmN0aW9ucyBvbiBrZXlQcmVzcyBiYXNlZCBvbiB0aGUga2V5IHByZXNzZWRcbiAgICAgKiBAcGFyYW0gJGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIGhhbmRsZUtleXByZXNzKCRldmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSAkZXZlbnQua2V5Q29kZTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtcy5pbmRleE9mKHRoaXMuc3RhdGUuZHJvcGRvd25TdGF0ZS5zZWxlY3RlZEl0ZW0pO1xuXG4gICAgICAgIGlmICghQUNUSU9OUy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBBQ1RJT05TW2tleV0uY2FsbCh0aGlzLCBpbmRleCwgaXRlbXMsIHRoaXMuc3RhdGUuZHJvcGRvd25TdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgZ2V0TWVudUVsZW1lbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1lbnVFbGVtZW50KCk6IEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG5hbWUgY2FsY1Bvc2l0aW9uT2Zmc2V0XG4gICAgICogQHBhcmFtIHBvc2l0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYWxjUG9zaXRpb25PZmZzZXQocG9zaXRpb24pOiB7IHRvcDogc3RyaW5nLCBsZWZ0OiBzdHJpbmcgfSB7XG4gICAgICAgIGNvbnN0IHdkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGRjID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICghd2QgfHwgIWRjIHx8ICFwb3NpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZ2V0TWVudUVsZW1lbnQoKTtcbiAgICAgICAgY29uc3Qgc3VwcG9ydFBhZ2VPZmZzZXQgPSB3ZC5wYWdlWE9mZnNldCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBpc0NTUzFDb21wYXQgPSAoKGRjLmNvbXBhdE1vZGUgfHwgJycpID09PSAnQ1NTMUNvbXBhdCcpO1xuXG4gICAgICAgIGNvbnN0IHggPSBzdXBwb3J0UGFnZU9mZnNldCA/IHdkLnBhZ2VYT2Zmc2V0IDogaXNDU1MxQ29tcGF0ID9cbiAgICAgICAgICAgIGRjLmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IDogZGMuYm9keS5zY3JvbGxMZWZ0O1xuXG4gICAgICAgIGNvbnN0IHkgPSBzdXBwb3J0UGFnZU9mZnNldCA/IHdkLnBhZ2VZT2Zmc2V0IDogaXNDU1MxQ29tcGF0ID9cbiAgICAgICAgICAgIGRjLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgOiBkYy5ib2R5LnNjcm9sbFRvcDtcblxuICAgICAgICBsZXQgeyB0b3AsIGxlZnQgfSA9IHRoaXMuYXBwbHlPZmZzZXQoXG4gICAgICAgICAgICBgJHtwb3NpdGlvbi50b3AgKyAodGhpcy5hcHBlbmRUb0JvZHkgPyB5IC0gMTUgOiAwKX1weGAsXG4gICAgICAgICAgICBgJHtwb3NpdGlvbi5sZWZ0ICsgeCAtIDV9cHhgXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgY2xpZW50V2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBjbGllbnRIZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgICBjb25zdCBtYXJnaW5Gcm9tQm90dG9tID0gcGFyc2VJbnQodG9wKSArIGNsaWVudEhlaWdodCArICh0aGlzLmFwcGVuZFRvQm9keSA/IDAgOiB5IC0gMTUpO1xuICAgICAgICBjb25zdCBtYXJnaW5Gcm9tUmlnaHQgPSBwYXJzZUludChsZWZ0KSArIGNsaWVudFdpZHRoO1xuXG4gICAgICAgIGNvbnN0IHdpbmRvd1Njcm9sbEhlaWdodCA9IHdkLmlubmVySGVpZ2h0ICsgd2Quc2Nyb2xsWTtcbiAgICAgICAgY29uc3Qgd2luZG93U2Nyb2xsV2lkdGggPSB3ZC5pbm5lcldpZHRoICsgd2Quc2Nyb2xsWDtcblxuICAgICAgICBpZiAobWFyZ2luRnJvbUJvdHRvbSA+PSB3aW5kb3dTY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgICAgIHRvcCA9IGAke3BhcnNlSW50KHRvcC5yZXBsYWNlKCdweCcsICcnKSkgLSBjbGllbnRIZWlnaHR9cHhgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hcmdpbkZyb21SaWdodCA+PSB3aW5kb3dTY3JvbGxXaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luUmlnaHQgPSBtYXJnaW5Gcm9tUmlnaHQgLSB3aW5kb3dTY3JvbGxXaWR0aCArIDMwO1xuICAgICAgICAgICAgbGVmdCA9IGAke3BhcnNlSW50KGxlZnQucmVwbGFjZSgncHgnLCAnJykpIC0gbWFyZ2luUmlnaHR9cHhgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgdG9wLCBsZWZ0IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseU9mZnNldCh0b3A6IHN0cmluZywgbGVmdDogc3RyaW5nKTogeyB0b3A6IHN0cmluZywgbGVmdDogc3RyaW5nIH0ge1xuICAgICAgICBpZiAoIXRoaXMub2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4geyB0b3AsIGxlZnQgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMub2Zmc2V0LnNwbGl0KCcgJyk7XG5cbiAgICAgICAgaWYgKCFvZmZzZXRbMV0pIHtcbiAgICAgICAgICAgIG9mZnNldFsxXSA9ICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRvcCA9IGAke3BhcnNlSW50KHRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUludChvZmZzZXRbMF0pfXB4YDtcbiAgICAgICAgbGVmdCA9IGAke3BhcnNlSW50KGxlZnQucmVwbGFjZSgncHgnLCAnJykpICsgcGFyc2VJbnQob2Zmc2V0WzFdKX1weGA7XG5cbiAgICAgICAgcmV0dXJuIHsgdG9wLCBsZWZ0IH07XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBkYyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5KSB7XG4gICAgICAgICAgICAvLyBhcHBlbmQgbWVudSBlbGVtZW50IHRvIHRoZSBib2R5XG4gICAgICAgICAgICBkYy5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVPbkNoYW5nZShkeW5hbWljID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5nZXRNZW51RWxlbWVudCgpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuY2FsY1Bvc2l0aW9uT2Zmc2V0KHRoaXMucG9zaXRpb24pO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50U3R5bGUoZWxlbWVudCwgJ3RvcCcsIHBvc2l0aW9uLnRvcC50b1N0cmluZygpKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudFN0eWxlKGVsZW1lbnQsICdsZWZ0JywgcG9zaXRpb24ubGVmdC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNlbGVjdCBmaXJzdCBpdGVtIHVubGVzcyB1c2VyIGRpc2FibGVkIHRoaXMgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLmZvY3VzRmlyc3RFbGVtZW50ICYmXG4gICAgICAgICAgICB0aGlzLml0ZW1zLmZpcnN0ICYmXG4gICAgICAgICAgICAhdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdCh0aGlzLml0ZW1zLmZpcnN0LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW0pO1xuXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVycy5oYW5kbGVLZXlwcmVzcykge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuaGFuZGxlS2V5cHJlc3MoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgSG9zdExpc3RlbmVyLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTmcyRHJvcGRvd25CdXR0b24gfSBmcm9tICcuLi9idXR0b24vbmcyLWRyb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBOZzJEcm9wZG93bk1lbnUgfSBmcm9tICcuLi9tZW51L25nMi1kcm9wZG93bi1tZW51JztcbmltcG9ydCB7IERyb3Bkb3duU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBOZzJNZW51SXRlbSB9IGZyb20gJy4uL21lbnUtaXRlbS9uZzItbWVudS1pdGVtJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZzItZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cIm5nMi1kcm9wZG93bi1jb250YWluZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJuZzItZHJvcGRvd24tYnV0dG9uXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm5nMi1kcm9wZG93bi1tZW51XCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5gLFxuICAgIHByb3ZpZGVyczogWyBEcm9wZG93blN0YXRlU2VydmljZSBdXG59KVxuZXhwb3J0IGNsYXNzIE5nMkRyb3Bkb3duIHtcbiAgICAvLyBnZXQgY2hpbGRyZW4gY29tcG9uZW50c1xuICAgIEBDb250ZW50Q2hpbGQoTmcyRHJvcGRvd25CdXR0b24pIHB1YmxpYyBidXR0b246IE5nMkRyb3Bkb3duQnV0dG9uO1xuICAgIEBDb250ZW50Q2hpbGQoTmcyRHJvcGRvd25NZW51KSBwdWJsaWMgbWVudTogTmcyRHJvcGRvd25NZW51O1xuXG4gICAgQElucHV0KCkgcHVibGljIGR5bmFtaWNVcGRhdGUgPSB0cnVlO1xuXG4gICAgLy8gb3V0cHV0c1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25JdGVtQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uSXRlbVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25TaG93OiBFdmVudEVtaXR0ZXI8TmcyRHJvcGRvd24+ID0gbmV3IEV2ZW50RW1pdHRlcjxOZzJEcm9wZG93bj4oKTtcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uSGlkZTogRXZlbnRFbWl0dGVyPE5nMkRyb3Bkb3duPiA9IG5ldyBFdmVudEVtaXR0ZXI8TmcyRHJvcGRvd24+KCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0YXRlOiBEcm9wZG93blN0YXRlU2VydmljZSkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLm9uSXRlbUNsaWNrZWQuc3Vic2NyaWJlKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkl0ZW1DbGlja2VkLmVtaXQoaXRlbSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLnByZXZlbnRDbG9zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5oaWRlLmNhbGwodGhpcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5idXR0b24ub25NZW51VG9nZ2xlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTWVudSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUub25JdGVtU2VsZWN0ZWQuc3Vic2NyaWJlKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkl0ZW1TZWxlY3RlZC5lbWl0KGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUub25JdGVtRGVzdHJveWVkLnN1YnNjcmliZSgoaXRlbTogTmcyTWVudUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdTZWxlY3RlZEl0ZW06IE5nMk1lbnVJdGVtIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLm1lbnUuaXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgICAgICBpZiAoaXRlbSAhPT0gdGhpcy5zdGF0ZS5kcm9wZG93blN0YXRlLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMubWVudS5mb2N1c0ZpcnN0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkSXRlbSA9IGl0ZW0gPT09IGl0ZW1zWzBdICYmIGl0ZW1zLmxlbmd0aCA+IDEgPyBpdGVtc1sxXSA6IGl0ZW1zWzBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmRyb3Bkb3duU3RhdGUuc2VsZWN0KG5ld1NlbGVjdGVkSXRlbSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBuYW1lIHRvZ2dsZU1lbnVcbiAgICAgKiBAZGVzYyB0b2dnbGVzIG1lbnUgdmlzaWJpbGl0eVxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVNZW51KHBvc2l0aW9uID0gdGhpcy5idXR0b24uZ2V0UG9zaXRpb24oKSk6IHZvaWQge1xuICAgICAgICB0aGlzLnN0YXRlLm1lbnVTdGF0ZS5pc1Zpc2libGUgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogLSBoaWRlcyBkcm9wZG93blxuICAgICAqIEBuYW1lIGhpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZW51LmhpZGUoKTtcbiAgICAgICAgdGhpcy5vbkhpZGUuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAtIHNob3dzIGRyb3Bkb3duXG4gICAgICogQG5hbWUgc2hvd1xuICAgICAqIEBwYXJhbSBwb3NpdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93KHBvc2l0aW9uID0gdGhpcy5idXR0b24uZ2V0UG9zaXRpb24oKSk6IHZvaWQge1xuICAgICAgICB0aGlzLm1lbnUuc2hvdyhwb3NpdGlvbiwgdGhpcy5keW5hbWljVXBkYXRlKTtcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbmFtZSBzY3JvbGxMaXN0ZW5lclxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnKVxuICAgIHB1YmxpYyBzY3JvbGxMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uICYmIHRoaXMuZHluYW1pY1VwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5tZW51LnVwZGF0ZVBvc2l0aW9uKHRoaXMuYnV0dG9uLmdldFBvc2l0aW9uKCksIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgTmcyRHJvcGRvd24gfSBmcm9tICcuL2NvbXBvbmVudHMvZHJvcGRvd24vbmcyLWRyb3Bkb3duJztcbmltcG9ydCB7IE5nMkRyb3Bkb3duTWVudSB9IGZyb20gJy4vY29tcG9uZW50cy9tZW51L25nMi1kcm9wZG93bi1tZW51JztcbmltcG9ydCB7IE5nMkRyb3Bkb3duQnV0dG9uIH0gZnJvbSAnLi9jb21wb25lbnRzL2J1dHRvbi9uZzItZHJvcGRvd24tYnV0dG9uJztcbmltcG9ydCB7IE5nMk1lbnVJdGVtIH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnUtaXRlbS9uZzItbWVudS1pdGVtJztcblxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEcm9wZG93blN0YXRlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZHJvcGRvd24tc3RhdGUuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZXhwb3J0czogW1xuICAgICAgICBOZzJNZW51SXRlbSxcbiAgICAgICAgTmcyRHJvcGRvd25CdXR0b24sXG4gICAgICAgIE5nMkRyb3Bkb3duTWVudSxcbiAgICAgICAgTmcyRHJvcGRvd25cbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBOZzJEcm9wZG93bixcbiAgICAgICAgTmcyTWVudUl0ZW0sXG4gICAgICAgIE5nMkRyb3Bkb3duQnV0dG9uLFxuICAgICAgICBOZzJEcm9wZG93bk1lbnUsXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmcyRHJvcGRvd25Nb2R1bGUge31cblxuZXhwb3J0IHtcbiAgICBOZzJEcm9wZG93bixcbiAgICBOZzJEcm9wZG93bk1lbnUsXG4gICAgTmcyTWVudUl0ZW0sXG4gICAgTmcyRHJvcGRvd25CdXR0b24sXG4gICAgRHJvcGRvd25TdGF0ZVNlcnZpY2Vcbn1cbiJdLCJuYW1lcyI6WyJzdGF0ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtJQTBCSSwyQkFBb0IsT0FBbUI7UUFBbkIsWUFBTyxHQUFQ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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-material-dropdown/fesm5/ng2-material-dropdown.js\n// module id = null\n// module chunks = ","import { __awaiter, __generator, __extends, __spread } from 'tslib';\nimport { Pipe, Injectable, Input, Component, EventEmitter, Output, ViewChild, ContentChildren, forwardRef, HostListener, Injector, TemplateRef, ElementRef, HostBinding, ChangeDetectorRef, Renderer2, ViewChildren, ContentChild, NgModule } from '@angular/core';\nimport { FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule, COMPOSITION_BUFFER_MODE } from '@angular/forms';\nimport { filter, first, debounceTime, map } from 'rxjs/operators';\nimport { Ng2Dropdown, Ng2DropdownModule } from 'ng2-material-dropdown';\nimport { animate, trigger, style, transition, keyframes, state } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\n\nvar escape = function (s) { return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'); };\nvar HighlightPipe = /** @class */ (function () {\n    function HighlightPipe() {\n    }\n    HighlightPipe.prototype.transform = function (value, arg) {\n        if (!arg.trim()) {\n            return value;\n        }\n        try {\n            var regex = new RegExp(\"(\" + escape(arg) + \")\", 'i');\n            return value.replace(regex, '<b>$1</b>');\n        }\n        catch (e) {\n            return value;\n        }\n    };\n    return HighlightPipe;\n}());\nHighlightPipe.decorators = [\n    { type: Pipe, args: [{\n                name: 'highlight'\n            },] },\n];\nvar PLACEHOLDER = '+ Tag';\nvar SECONDARY_PLACEHOLDER = 'Enter a new tag';\nvar KEYDOWN = 'keydown';\nvar KEYUP = 'keyup';\nvar MAX_ITEMS_WARNING = 'The number of items specified was greater than the property max-items.';\nvar ACTIONS_KEYS = {\n    DELETE: 'DELETE',\n    SWITCH_PREV: 'SWITCH_PREV',\n    SWITCH_NEXT: 'SWITCH_NEXT',\n    TAB: 'TAB'\n};\nvar KEY_PRESS_ACTIONS = {\n    8: ACTIONS_KEYS.DELETE,\n    37: ACTIONS_KEYS.SWITCH_PREV,\n    39: ACTIONS_KEYS.SWITCH_NEXT,\n    9: ACTIONS_KEYS.TAB\n};\nvar DRAG_AND_DROP_KEY = 'Text';\nvar NEXT = 'NEXT';\nvar PREV = 'PREV';\nvar DragProvider = /** @class */ (function () {\n    function DragProvider() {\n        this.state = {\n            dragging: false,\n            dropping: false,\n            index: undefined\n        };\n    }\n    DragProvider.prototype.setDraggedItem = function (event, tag) {\n        event.dataTransfer.setData(DRAG_AND_DROP_KEY, JSON.stringify(tag));\n    };\n    DragProvider.prototype.getDraggedItem = function (event) {\n        var data = event.dataTransfer.getData(DRAG_AND_DROP_KEY);\n        try {\n            return (JSON.parse(data));\n        }\n        catch (_a) {\n            return;\n        }\n    };\n    DragProvider.prototype.setSender = function (sender) {\n        this.sender = sender;\n    };\n    DragProvider.prototype.setReceiver = function (receiver) {\n        this.receiver = receiver;\n    };\n    DragProvider.prototype.onTagDropped = function (tag, indexDragged, indexDropped) {\n        this.onDragEnd();\n        this.sender.onRemoveRequested(tag, indexDragged);\n        this.receiver.onAddingRequested(false, tag, indexDropped);\n    };\n    DragProvider.prototype.setState = function (state$$1) {\n        this.state = Object.assign({}, this.state, state$$1);\n    };\n    DragProvider.prototype.getState = function (key) {\n        return key ? this.state[key] : this.state;\n    };\n    DragProvider.prototype.onDragEnd = function () {\n        this.setState({\n            dragging: false,\n            dropping: false,\n            index: undefined\n        });\n    };\n    return DragProvider;\n}());\nDragProvider.decorators = [\n    { type: Injectable },\n];\nvar defaults = {\n    tagInput: ({\n        separatorKeys: [],\n        separatorKeyCodes: [],\n        maxItems: Infinity,\n        placeholder: PLACEHOLDER,\n        secondaryPlaceholder: SECONDARY_PLACEHOLDER,\n        validators: [],\n        asyncValidators: [],\n        onlyFromAutocomplete: false,\n        errorMessages: {},\n        theme: '',\n        onTextChangeDebounce: 250,\n        inputId: null,\n        inputClass: '',\n        clearOnBlur: false,\n        hideForm: false,\n        addOnBlur: false,\n        addOnPaste: false,\n        pasteSplitPattern: ',',\n        blinkIfDupe: true,\n        removable: true,\n        editable: false,\n        allowDupes: false,\n        modelAsStrings: false,\n        trimTags: true,\n        ripple: true,\n        tabIndex: '',\n        disable: false,\n        dragZone: '',\n        onRemoving: undefined,\n        onAdding: undefined,\n        displayBy: 'display',\n        identifyBy: 'value',\n        animationDuration: {\n            enter: '250ms',\n            leave: '150ms'\n        }\n    }),\n    dropdown: ({\n        displayBy: 'display',\n        identifyBy: 'value',\n        appendToBody: true,\n        offset: '50 0',\n        focusFirstElement: false,\n        showDropdownIfEmpty: false,\n        minimumTextLength: 1,\n        limitItemsTo: Infinity,\n        keepOpen: true,\n        dynamicUpdate: true,\n        zIndex: 1000,\n        matchingFn: matchingFn\n    })\n};\nfunction matchingFn(value, target) {\n    var targetValue = target[this.displayBy].toString();\n    return targetValue && targetValue\n        .toLowerCase()\n        .indexOf(value.toLowerCase()) >= 0;\n}\nvar OptionsProvider = /** @class */ (function () {\n    function OptionsProvider() {\n    }\n    OptionsProvider.prototype.setOptions = function (options) {\n        OptionsProvider.defaults.tagInput = Object.assign({}, defaults.tagInput, options.tagInput);\n        OptionsProvider.defaults.dropdown = Object.assign({}, defaults.dropdown, options.dropdown);\n    };\n    return OptionsProvider;\n}());\nOptionsProvider.defaults = defaults;\nfunction isObject(obj) {\n    return obj === Object(obj);\n}\nvar TagInputAccessor = /** @class */ (function () {\n    function TagInputAccessor() {\n        this._items = [];\n        this.displayBy = OptionsProvider.defaults.tagInput.displayBy;\n        this.identifyBy = OptionsProvider.defaults.tagInput.identifyBy;\n    }\n    Object.defineProperty(TagInputAccessor.prototype, \"items\", {\n        get: function () {\n            return this._items;\n        },\n        set: function (items) {\n            this._items = items;\n            this._onChangeCallback(this._items);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputAccessor.prototype.onTouched = function () {\n        this._onTouchedCallback();\n    };\n    TagInputAccessor.prototype.writeValue = function (items) {\n        this._items = items || [];\n    };\n    TagInputAccessor.prototype.registerOnChange = function (fn) {\n        this._onChangeCallback = fn;\n    };\n    TagInputAccessor.prototype.registerOnTouched = function (fn) {\n        this._onTouchedCallback = fn;\n    };\n    TagInputAccessor.prototype.getItemValue = function (item, fromDropdown) {\n        if (fromDropdown === void 0) { fromDropdown = false; }\n        var property = fromDropdown && this.dropdown ? this.dropdown.identifyBy : this.identifyBy;\n        return isObject(item) ? item[property] : item;\n    };\n    TagInputAccessor.prototype.getItemDisplay = function (item, fromDropdown) {\n        if (fromDropdown === void 0) { fromDropdown = false; }\n        var property = fromDropdown && this.dropdown ? this.dropdown.displayBy : this.displayBy;\n        return isObject(item) ? item[property] : item;\n    };\n    TagInputAccessor.prototype.getItemsWithout = function (index) {\n        return this.items.filter(function (item, position) { return position !== index; });\n    };\n    return TagInputAccessor;\n}());\nTagInputAccessor.propDecorators = {\n    \"displayBy\": [{ type: Input },],\n    \"identifyBy\": [{ type: Input },],\n};\nfunction listen(listenerType, action, condition) {\n    if (condition === void 0) { condition = true; }\n    if (!this.listeners.hasOwnProperty(listenerType)) {\n        throw new Error('The event entered may be wrong');\n    }\n    if (!condition) {\n        return;\n    }\n    this.listeners[listenerType].push(action);\n}\nvar TagInputForm = /** @class */ (function () {\n    function TagInputForm() {\n        this.onSubmit = new EventEmitter();\n        this.onBlur = new EventEmitter();\n        this.onFocus = new EventEmitter();\n        this.onKeyup = new EventEmitter();\n        this.onKeydown = new EventEmitter();\n        this.inputTextChange = new EventEmitter();\n        this.validators = [];\n        this.asyncValidators = [];\n        this.tabindex = '';\n        this.disabled = false;\n        this.item = new FormControl({ value: '', disabled: this.disabled });\n    }\n    Object.defineProperty(TagInputForm.prototype, \"inputText\", {\n        get: function () {\n            return this.item.value;\n        },\n        set: function (text) {\n            this.item.setValue(text);\n            this.inputTextChange.emit(text);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputForm.prototype.ngOnInit = function () {\n        this.item.setValidators(this.validators);\n        this.item.setAsyncValidators(this.asyncValidators);\n        this.form = new FormGroup({\n            item: this.item\n        });\n    };\n    TagInputForm.prototype.ngOnChanges = function (changes) {\n        if (changes[\"disabled\"] && !changes[\"disabled\"].firstChange) {\n            if (changes[\"disabled\"].currentValue) {\n                this.form.controls['item'].disable();\n            }\n            else {\n                this.form.controls['item'].enable();\n            }\n        }\n    };\n    Object.defineProperty(TagInputForm.prototype, \"value\", {\n        get: function () {\n            return (this.form.get('item'));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputForm.prototype.isInputFocused = function () {\n        var doc = typeof document !== 'undefined' ? document : undefined;\n        return doc ? doc.activeElement === this.input.nativeElement : false;\n    };\n    TagInputForm.prototype.getErrorMessages = function (messages) {\n        var _this = this;\n        return Object.keys(messages)\n            .filter(function (err) { return _this.value.hasError(err); })\n            .map(function (err) { return messages[err]; });\n    };\n    TagInputForm.prototype.hasErrors = function () {\n        var _b = this.form, dirty = _b.dirty, value = _b.value, valid = _b.valid;\n        return dirty && value.item && !valid;\n    };\n    TagInputForm.prototype.focus = function () {\n        this.input.nativeElement.focus();\n    };\n    TagInputForm.prototype.blur = function () {\n        this.input.nativeElement.blur();\n    };\n    TagInputForm.prototype.getElementPosition = function () {\n        return this.input.nativeElement.getBoundingClientRect();\n    };\n    TagInputForm.prototype.destroy = function () {\n        var input = this.input.nativeElement;\n        input.parentElement.removeChild(input);\n    };\n    TagInputForm.prototype.onKeyDown = function ($event) {\n        this.inputText = this.value.value;\n        if ($event.key === 'Enter') {\n            this.submit($event);\n            this.inputText = '';\n        }\n        return this.onKeydown.emit($event);\n    };\n    TagInputForm.prototype.onKeyUp = function ($event) {\n        this.inputText = this.value.value;\n        return this.onKeyup.emit($event);\n    };\n    TagInputForm.prototype.submit = function ($event) {\n        $event.preventDefault();\n        if (this.form.valid) {\n            this.onSubmit.emit($event);\n        }\n    };\n    return TagInputForm;\n}());\nTagInputForm.decorators = [\n    { type: Component, args: [{\n                selector: 'tag-input-form',\n                styles: [\".dark tag:focus{-webkit-box-shadow:0 0 0 1px #323232;box-shadow:0 0 0 1px #323232}.ng2-tag-input.bootstrap3-info{background-color:#fff;display:inline-block;color:#555;vertical-align:middle;max-width:100%;height:42px;line-height:44px}.ng2-tag-input.bootstrap3-info input{border:none;-webkit-box-shadow:none;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder{color:#777;opacity:1}.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info input:focus{border:none;-webkit-box-shadow:none;box-shadow:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.4);box-shadow:inset 0 1px 1px rgba(0,0,0,.4);border:1px solid #ccc}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{-webkit-box-shadow:inset 0 1px 1px #d9534f;box-shadow:inset 0 1px 1px #d9534f}.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;-webkit-transition:all .25s;transition:all .25s;padding:.25rem 0;min-height:32px;cursor:text;border-bottom:2px solid #efefef}.ng2-tag-input:focus{outline:0}.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #2196f3}.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #f44336}.ng2-tag-input.ng2-tag-input--loading{border:none}.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.ng2-tag-input form{margin:.1em 0}.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.minimal.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:1px solid transparent}.minimal.ng2-tag-input:focus{outline:0}.minimal.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.minimal.ng2-tag-input.ng2-tag-input--loading{border:none}.minimal.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.minimal.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.dark.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #444}.dark.ng2-tag-input:focus{outline:0}.dark.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.dark.ng2-tag-input.ng2-tag-input--loading{border:none}.dark.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.dark.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #efefef}.bootstrap.ng2-tag-input:focus{outline:0}.bootstrap.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #0275d8}.bootstrap.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #d9534f}.bootstrap.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap3-info.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:4px;cursor:text;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-radius:4px}.bootstrap3-info.ng2-tag-input:focus{outline:0}.bootstrap3-info.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d9534f}.bootstrap3-info.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap3-info.ng2-tag-input form{margin:.1em 0}.bootstrap3-info.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.error-message{font-size:.8em;color:#f44336;margin:.5em 0 0}.bootstrap .error-message{color:#d9534f}.ng2-tag-input__text-input{display:inline;vertical-align:middle;border:none;padding:0 .5rem;height:38px;font-size:1em;font-family:Roboto,\\\"Helvetica Neue\\\",sans-serif}.ng2-tag-input__text-input:focus{outline:0}.ng2-tag-input__text-input[disabled=true]{opacity:.5;background:#fff}\"],\n                template: \"<!-- form -->\\n<form (ngSubmit)=\\\"submit($event)\\\" [formGroup]=\\\"form\\\">\\n    <input #input\\n\\n           type=\\\"text\\\"\\n           class=\\\"ng2-tag-input__text-input\\\"\\n           autocomplete=\\\"off\\\"\\n           tabindex=\\\"{{ disabled ? -1 : tabindex ? tabindex : 0 }}\\\"\\n           minlength=\\\"1\\\"\\n           formControlName=\\\"item\\\"\\n\\n           [ngClass]=\\\"inputClass\\\"\\n           [attr.id]=\\\"inputId\\\"\\n           [attr.placeholder]=\\\"placeholder\\\"\\n           [attr.aria-label]=\\\"placeholder\\\"\\n           [attr.tabindex]=\\\"tabindex\\\"\\n           [attr.disabled]=\\\"disabled ? disabled : null\\\"\\n\\n           (focus)=\\\"onFocus.emit($event)\\\"\\n           (blur)=\\\"onBlur.emit($event)\\\"\\n           (keydown)=\\\"onKeyDown($event)\\\"\\n           (keyup)=\\\"onKeyUp($event)\\\"\\n    />\\n</form>\\n\"\n            },] },\n];\nTagInputForm.propDecorators = {\n    \"onSubmit\": [{ type: Output },],\n    \"onBlur\": [{ type: Output },],\n    \"onFocus\": [{ type: Output },],\n    \"onKeyup\": [{ type: Output },],\n    \"onKeydown\": [{ type: Output },],\n    \"inputTextChange\": [{ type: Output },],\n    \"placeholder\": [{ type: Input },],\n    \"validators\": [{ type: Input },],\n    \"asyncValidators\": [{ type: Input },],\n    \"inputId\": [{ type: Input },],\n    \"inputClass\": [{ type: Input },],\n    \"tabindex\": [{ type: Input },],\n    \"disabled\": [{ type: Input },],\n    \"input\": [{ type: ViewChild, args: ['input',] },],\n    \"inputText\": [{ type: Input },],\n};\nvar defaults$1 = forwardRef(function () { return OptionsProvider.defaults.dropdown; });\nvar TagInputDropdown = /** @class */ (function () {\n    function TagInputDropdown(injector) {\n        var _this = this;\n        this.injector = injector;\n        this.offset = new defaults$1().offset;\n        this.focusFirstElement = new defaults$1().focusFirstElement;\n        this.showDropdownIfEmpty = new defaults$1().showDropdownIfEmpty;\n        this.minimumTextLength = new defaults$1().minimumTextLength;\n        this.limitItemsTo = new defaults$1().limitItemsTo;\n        this.displayBy = new defaults$1().displayBy;\n        this.identifyBy = new defaults$1().identifyBy;\n        this.matchingFn = new defaults$1().matchingFn;\n        this.appendToBody = new defaults$1().appendToBody;\n        this.keepOpen = new defaults$1().keepOpen;\n        this.dynamicUpdate = new defaults$1().dynamicUpdate;\n        this.zIndex = new defaults$1().zIndex;\n        this.items = [];\n        this.tagInput = this.injector.get(TagInputComponent);\n        this._autocompleteItems = [];\n        this.show = function () {\n            var maxItemsReached = _this.tagInput.items.length === _this.tagInput.maxItems;\n            var value = _this.getFormValue();\n            var hasMinimumText = value.trim().length >= _this.minimumTextLength;\n            var position = _this.calculatePosition();\n            var items = _this.getMatchingItems(value);\n            var hasItems = items.length > 0;\n            var isHidden = _this.isVisible === false;\n            var showDropdownIfEmpty = _this.showDropdownIfEmpty && hasItems && !value;\n            var isDisabled = _this.tagInput.disable;\n            var shouldShow = isHidden && ((hasItems && hasMinimumText) || showDropdownIfEmpty);\n            var shouldHide = _this.isVisible && !hasItems;\n            if (_this.autocompleteObservable && hasMinimumText) {\n                return _this.getItemsFromObservable(value);\n            }\n            if ((!_this.showDropdownIfEmpty && !value) || maxItemsReached || isDisabled) {\n                return _this.dropdown.hide();\n            }\n            _this.setItems(items);\n            if (shouldShow) {\n                _this.dropdown.show(position);\n            }\n            else if (shouldHide) {\n                _this.hide();\n            }\n        };\n        this.requestAdding = function (item) { return __awaiter(_this, void 0, void 0, function () {\n            var tag;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        tag = this.createTagModel(item);\n                        return [4 /*yield*/, this.tagInput.onAddingRequested(true, tag).catch(function () { })];\n                    case 1:\n                        _b.sent();\n                        return [2 /*return*/];\n                }\n            });\n        }); };\n        this.resetItems = function () {\n            _this.items = [];\n        };\n        this.getItemsFromObservable = function (text) {\n            _this.setLoadingState(true);\n            var subscribeFn = function (data) {\n                _this.setLoadingState(false)\n                    .populateItems(data);\n                _this.setItems(_this.getMatchingItems(text));\n                if (_this.items.length) {\n                    _this.dropdown.show(_this.calculatePosition());\n                }\n                else {\n                    _this.dropdown.hide();\n                }\n            };\n            _this.autocompleteObservable(text)\n                .pipe(first())\n                .subscribe(subscribeFn, function () { return _this.setLoadingState(false); });\n        };\n    }\n    Object.defineProperty(TagInputDropdown.prototype, \"autocompleteItems\", {\n        get: function () {\n            var _this = this;\n            var items = this._autocompleteItems;\n            if (!items) {\n                return [];\n            }\n            return items.map(function (item) {\n                return typeof item === 'string' ? (_b = {}, _b[_this.displayBy] = item, _b[_this.identifyBy] = item, _b) : item;\n                var _b;\n            });\n        },\n        set: function (items) {\n            this._autocompleteItems = items;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputDropdown.prototype.ngOnInit = function () {\n        var _this = this;\n        this.onItemClicked().subscribe(function (item) {\n            _this.requestAdding(item);\n        });\n        this.onHide().subscribe(this.resetItems);\n        var DEBOUNCE_TIME = 200;\n        var KEEP_OPEN = this.keepOpen;\n        this.tagInput\n            .onTextChange\n            .asObservable()\n            .pipe(debounceTime(DEBOUNCE_TIME), filter(function (value) {\n            if (KEEP_OPEN === false) {\n                return value.length > 0;\n            }\n            return true;\n        }))\n            .subscribe(this.show);\n    };\n    TagInputDropdown.prototype.updatePosition = function () {\n        var position = this.tagInput.inputForm.getElementPosition();\n        this.dropdown.menu.updatePosition(position, this.dynamicUpdate);\n    };\n    Object.defineProperty(TagInputDropdown.prototype, \"isVisible\", {\n        get: function () {\n            return this.dropdown.menu.state.menuState.isVisible;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputDropdown.prototype.onHide = function () {\n        return this.dropdown.onHide;\n    };\n    TagInputDropdown.prototype.onItemClicked = function () {\n        return this.dropdown.onItemClicked;\n    };\n    Object.defineProperty(TagInputDropdown.prototype, \"selectedItem\", {\n        get: function () {\n            return this.dropdown.menu.state.dropdownState.selectedItem;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(TagInputDropdown.prototype, \"state\", {\n        get: function () {\n            return this.dropdown.menu.state;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputDropdown.prototype.hide = function () {\n        this.resetItems();\n        this.dropdown.hide();\n    };\n    TagInputDropdown.prototype.scrollListener = function () {\n        if (!this.isVisible || !this.dynamicUpdate) {\n            return;\n        }\n        this.updatePosition();\n    };\n    TagInputDropdown.prototype.onWindowBlur = function () {\n        this.dropdown.hide();\n    };\n    TagInputDropdown.prototype.getFormValue = function () {\n        var formValue = this.tagInput.formValue;\n        return formValue ? formValue.toString().trim() : '';\n    };\n    TagInputDropdown.prototype.calculatePosition = function () {\n        return this.tagInput.inputForm.getElementPosition();\n    };\n    TagInputDropdown.prototype.createTagModel = function (item) {\n        var display = typeof item.value === 'string' ? item.value : item.value[this.displayBy];\n        var value = typeof item.value === 'string' ? item.value : item.value[this.identifyBy];\n        return Object.assign({}, item.value, (_b = {}, _b[this.tagInput.displayBy] = display, _b[this.tagInput.identifyBy] = value, _b));\n        var _b;\n    };\n    TagInputDropdown.prototype.getMatchingItems = function (value) {\n        var _this = this;\n        if (!value && !this.showDropdownIfEmpty) {\n            return [];\n        }\n        var dupesAllowed = this.tagInput.allowDupes;\n        return this.autocompleteItems.filter(function (item) {\n            var hasValue = dupesAllowed ? false : _this.tagInput.tags.some(function (tag) {\n                var identifyBy = _this.tagInput.identifyBy;\n                var model = typeof tag.model === 'string' ? tag.model : tag.model[identifyBy];\n                return model === item[_this.identifyBy];\n            });\n            return _this.matchingFn(value, item) && (hasValue === false);\n        });\n    };\n    TagInputDropdown.prototype.setItems = function (items) {\n        this.items = items.slice(0, this.limitItemsTo || items.length);\n    };\n    TagInputDropdown.prototype.populateItems = function (data) {\n        var _this = this;\n        this.autocompleteItems = data.map(function (item) {\n            return typeof item === 'string' ? (_b = {}, _b[_this.displayBy] = item, _b[_this.identifyBy] = item, _b) : item;\n            var _b;\n        });\n        return this;\n    };\n    TagInputDropdown.prototype.setLoadingState = function (state$$1) {\n        this.tagInput.isLoading = state$$1;\n        return this;\n    };\n    return TagInputDropdown;\n}());\nTagInputDropdown.decorators = [\n    { type: Component, args: [{\n                selector: 'tag-input-dropdown',\n                template: \"<ng2-dropdown [dynamicUpdate]=\\\"dynamicUpdate\\\">\\n    <ng2-dropdown-menu [focusFirstElement]=\\\"focusFirstElement\\\"\\n                       [zIndex]=\\\"zIndex\\\"\\n                       [appendToBody]=\\\"appendToBody\\\"\\n                       [offset]=\\\"offset\\\">\\n        <ng2-menu-item *ngFor=\\\"let item of items; let index = index; let last = last\\\"\\n                       [value]=\\\"item\\\"\\n                       [ngSwitch]=\\\"!!templates.length\\\">\\n\\n            <span *ngSwitchCase=\\\"false\\\"\\n                  [innerHTML]=\\\"item[displayBy] | highlight : tagInput.inputForm.value.value\\\">\\n            </span>\\n\\n            <ng-template *ngSwitchDefault\\n                      [ngTemplateOutlet]=\\\"templates.first\\\"\\n                      [ngTemplateOutletContext]=\\\"{ item: item, index: index, last: last }\\\">\\n            </ng-template>\\n        </ng2-menu-item>\\n    </ng2-dropdown-menu>\\n</ng2-dropdown>\\n\"\n            },] },\n];\nTagInputDropdown.ctorParameters = function () { return [\n    { type: Injector, },\n]; };\nTagInputDropdown.propDecorators = {\n    \"dropdown\": [{ type: ViewChild, args: [Ng2Dropdown,] },],\n    \"templates\": [{ type: ContentChildren, args: [TemplateRef,] },],\n    \"offset\": [{ type: Input },],\n    \"focusFirstElement\": [{ type: Input },],\n    \"showDropdownIfEmpty\": [{ type: Input },],\n    \"autocompleteObservable\": [{ type: Input },],\n    \"minimumTextLength\": [{ type: Input },],\n    \"limitItemsTo\": [{ type: Input },],\n    \"displayBy\": [{ type: Input },],\n    \"identifyBy\": [{ type: Input },],\n    \"matchingFn\": [{ type: Input },],\n    \"appendToBody\": [{ type: Input },],\n    \"keepOpen\": [{ type: Input },],\n    \"dynamicUpdate\": [{ type: Input },],\n    \"zIndex\": [{ type: Input },],\n    \"autocompleteItems\": [{ type: Input },],\n    \"scrollListener\": [{ type: HostListener, args: ['window:scroll',] },],\n    \"onWindowBlur\": [{ type: HostListener, args: ['window:blur',] },],\n};\nvar TagRipple = /** @class */ (function () {\n    function TagRipple() {\n        this.state = 'none';\n    }\n    return TagRipple;\n}());\nTagRipple.decorators = [\n    { type: Component, args: [{\n                selector: 'tag-ripple',\n                styles: [\"\\n        :host {\\n            width: 100%;\\n            height: 100%;\\n            left: 0;\\n            overflow: hidden;\\n            position: absolute;\\n        }\\n        \\n        .tag-ripple {\\n            background: rgba(0, 0, 0, 0.1);\\n            top: 50%;\\n            left: 50%;\\n            height: 100%;\\n            transform: translate(-50%, -50%);\\n            position: absolute;\\n        }\\n    \"],\n                template: \"\\n        <div class=\\\"tag-ripple\\\" [@ink]=\\\"state\\\"></div>\\n    \",\n                animations: [\n                    trigger('ink', [\n                        state('none', style({ width: 0, opacity: 0 })),\n                        transition('none => clicked', [\n                            animate(300, keyframes([\n                                style({ opacity: 1, offset: 0, width: '30%', borderRadius: '100%' }),\n                                style({ opacity: 1, offset: 0.5, width: '50%' }),\n                                style({ opacity: 0.5, offset: 1, width: '100%', borderRadius: '16px' })\n                            ]))\n                        ])\n                    ])\n                ]\n            },] },\n];\nTagRipple.propDecorators = {\n    \"state\": [{ type: Input },],\n};\nvar navigator = typeof window !== 'undefined' ? window.navigator : {\n    userAgent: 'Chrome',\n    vendor: 'Google Inc'\n};\nvar isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\nvar TagComponent = /** @class */ (function () {\n    function TagComponent(element, renderer, cdRef) {\n        this.element = element;\n        this.renderer = renderer;\n        this.cdRef = cdRef;\n        this.disabled = false;\n        this.onSelect = new EventEmitter();\n        this.onRemove = new EventEmitter();\n        this.onBlur = new EventEmitter();\n        this.onKeyDown = new EventEmitter();\n        this.onTagEdited = new EventEmitter();\n        this.editing = false;\n        this.rippleState = \"none\";\n    }\n    Object.defineProperty(TagComponent.prototype, \"readonly\", {\n        get: function () {\n            return typeof this.model !== \"string\" && this.model[\"readonly\"] === true;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagComponent.prototype.select = function ($event) {\n        if (this.readonly || this.disabled) {\n            return;\n        }\n        if ($event) {\n            $event.stopPropagation();\n        }\n        this.focus();\n        this.onSelect.emit(this.model);\n    };\n    TagComponent.prototype.remove = function ($event) {\n        $event.stopPropagation();\n        this.onRemove.emit(this);\n    };\n    TagComponent.prototype.focus = function () {\n        this.element.nativeElement.focus();\n    };\n    TagComponent.prototype.move = function () {\n        this.moving = true;\n    };\n    TagComponent.prototype.keydown = function (event) {\n        if (this.editing) {\n            if (event.keyCode === 13) {\n                return this.disableEditMode(event);\n            }\n        }\n        else {\n            this.onKeyDown.emit({ event: event, model: this.model });\n        }\n    };\n    TagComponent.prototype.blink = function () {\n        var classList = this.element.nativeElement.classList;\n        classList.add(\"blink\");\n        setTimeout(function () { return classList.remove(\"blink\"); }, 50);\n    };\n    TagComponent.prototype.toggleEditMode = function () {\n        if (this.editable) {\n            return this.editing ? undefined : this.activateEditMode();\n        }\n    };\n    TagComponent.prototype.onBlurred = function (event) {\n        if (!this.editable) {\n            return;\n        }\n        this.disableEditMode();\n        var value = event.target.innerText;\n        var result = typeof this.model === \"string\"\n            ? value\n            : Object.assign({}, this.model, (_b = {}, _b[this.displayBy] = value, _b));\n        this.onBlur.emit(result);\n        var _b;\n    };\n    TagComponent.prototype.getDisplayValue = function (item) {\n        return typeof item === \"string\" ? item : item[this.displayBy];\n    };\n    Object.defineProperty(TagComponent.prototype, \"isRippleVisible\", {\n        get: function () {\n            return !this.readonly && !this.editing && isChrome && this.hasRipple;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagComponent.prototype.disableEditMode = function ($event) {\n        var classList = this.element.nativeElement.classList;\n        var input = this.getContentEditableText();\n        this.editing = false;\n        classList.remove(\"tag--editing\");\n        if (!input) {\n            this.setContentEditableText(this.model);\n            return;\n        }\n        this.storeNewValue(input);\n        this.cdRef.detectChanges();\n        if ($event) {\n            $event.preventDefault();\n        }\n    };\n    TagComponent.prototype.isDeleteIconVisible = function () {\n        return (!this.readonly && !this.disabled && this.removable && !this.editing);\n    };\n    TagComponent.prototype.getContentEditableText = function () {\n        var input = this.getContentEditable();\n        return input ? input.innerText.trim() : \"\";\n    };\n    TagComponent.prototype.setContentEditableText = function (model) {\n        var input = this.getContentEditable();\n        var value = this.getDisplayValue(model);\n        input.innerText = value;\n    };\n    TagComponent.prototype.activateEditMode = function () {\n        var classList = this.element.nativeElement.classList;\n        classList.add('tag--editing');\n        this.editing = true;\n    };\n    TagComponent.prototype.storeNewValue = function (input) {\n        var _this = this;\n        var exists = function (tag) {\n            return typeof tag === 'string'\n                ? tag === input\n                : tag[_this.displayBy] === input;\n        };\n        var hasId = function () {\n            return _this.model[_this.identifyBy] !== _this.model[_this.displayBy];\n        };\n        if (exists(this.model)) {\n            return;\n        }\n        var model = typeof this.model === 'string'\n            ? input\n            : (_b = {\n                    index: this.index\n                }, _b[this.identifyBy] = hasId()\n                    ? this.model[this.identifyBy]\n                    : input, _b[this.displayBy] = input, _b);\n        if (this.canAddTag(model)) {\n            this.onTagEdited.emit({ tag: model, index: this.index });\n        }\n        else {\n            this.setContentEditableText(this.model);\n        }\n        var _b;\n    };\n    TagComponent.prototype.getContentEditable = function () {\n        return this.element.nativeElement.querySelector('[contenteditable]');\n    };\n    return TagComponent;\n}());\nTagComponent.decorators = [\n    { type: Component, args: [{\n                selector: \"tag\",\n                template: \"<div (click)=\\\"select($event)\\\"\\n     (dblclick)=\\\"toggleEditMode()\\\"\\n     (mousedown)=\\\"rippleState='clicked'\\\"\\n     (mouseup)=\\\"rippleState='none'\\\"\\n     [ngSwitch]=\\\"!!template\\\"\\n     [class.disabled]=\\\"disabled\\\"\\n     [attr.tabindex]=\\\"-1\\\"\\n     [attr.aria-label]=\\\"getDisplayValue(model)\\\">\\n\\n    <div *ngSwitchCase=\\\"true\\\" [attr.contenteditable]=\\\"editing\\\">\\n        <!-- CUSTOM TEMPLATE -->\\n        <ng-template\\n            [ngTemplateOutletContext]=\\\"{ item: model, index: index }\\\"\\n            [ngTemplateOutlet]=\\\"template\\\">\\n        </ng-template>\\n    </div>\\n\\n    <div *ngSwitchCase=\\\"false\\\" class=\\\"tag-wrapper\\\">\\n        <!-- TAG NAME -->\\n        <div [attr.contenteditable]=\\\"editing\\\"\\n             [attr.title]=\\\"getDisplayValue(model)\\\"\\n             class=\\\"tag__text inline\\\"\\n             spellcheck=\\\"false\\\"\\n             (keydown.enter)=\\\"disableEditMode($event)\\\"\\n             (keydown.escape)=\\\"disableEditMode($event)\\\"\\n             (click)=\\\"editing ? $event.stopPropagation() : undefined\\\"\\n             (blur)=\\\"onBlurred($event)\\\">\\n            {{ getDisplayValue(model) }}\\n        </div>\\n\\n        <!-- 'X' BUTTON -->\\n        <delete-icon\\n            aria-label=\\\"Remove tag\\\"\\n            role=\\\"button\\\"\\n            (click)=\\\"remove($event)\\\"\\n            *ngIf=\\\"isDeleteIconVisible()\\\">\\n        </delete-icon>\\n    </div>\\n</div>\\n\\n<tag-ripple [state]=\\\"rippleState\\\"\\n            [attr.tabindex]=\\\"-1\\\"\\n            *ngIf=\\\"isRippleVisible\\\">\\n</tag-ripple>\\n\",\n                styles: [\":host,:host>div,:host>div:focus{outline:0;overflow:hidden;-webkit-transition:opacity 1s;transition:opacity 1s;z-index:1}:host{max-width:400px}:host.blink{-webkit-animation:.3s ease-in-out forwards blink;animation:.3s ease-in-out forwards blink}@-webkit-keyframes blink{0%{opacity:.3}}@keyframes blink{0%{opacity:.3}}:host .disabled{cursor:not-allowed}:host [contenteditable=true]{outline:0}.tag-wrapper{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;display:-webkit-box;display:-ms-flexbox;display:flex}.tag__text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\"]\n            },] },\n];\nTagComponent.ctorParameters = function () { return [\n    { type: ElementRef, },\n    { type: Renderer2, },\n    { type: ChangeDetectorRef, },\n]; };\nTagComponent.propDecorators = {\n    \"model\": [{ type: Input },],\n    \"removable\": [{ type: Input },],\n    \"editable\": [{ type: Input },],\n    \"template\": [{ type: Input },],\n    \"displayBy\": [{ type: Input },],\n    \"identifyBy\": [{ type: Input },],\n    \"index\": [{ type: Input },],\n    \"hasRipple\": [{ type: Input },],\n    \"disabled\": [{ type: Input },],\n    \"canAddTag\": [{ type: Input },],\n    \"onSelect\": [{ type: Output },],\n    \"onRemove\": [{ type: Output },],\n    \"onBlur\": [{ type: Output },],\n    \"onKeyDown\": [{ type: Output },],\n    \"onTagEdited\": [{ type: Output },],\n    \"moving\": [{ type: HostBinding, args: [\"class.moving\",] },],\n    \"ripple\": [{ type: ViewChild, args: [TagRipple,] },],\n    \"keydown\": [{ type: HostListener, args: [\"keydown\", [\"$event\"],] },],\n};\nvar animations = [\n    trigger('animation', [\n        state('in', style({\n            opacity: 1\n        })),\n        state('out', style({\n            opacity: 0\n        })),\n        transition(':enter', [\n            animate(\"{{ enter }}\", keyframes([\n                style({ opacity: 0, offset: 0, transform: 'translate(0px, 20px)' }),\n                style({ opacity: 0.3, offset: 0.3, transform: 'translate(0px, -10px)' }),\n                style({ opacity: 0.5, offset: 0.5, transform: 'translate(0px, 0px)' }),\n                style({ opacity: 0.75, offset: 0.75, transform: 'translate(0px, 5px)' }),\n                style({ opacity: 1, offset: 1, transform: 'translate(0px, 0px)' })\n            ]))\n        ]),\n        transition(':leave', [\n            animate(\"{{ leave }}\", keyframes([\n                style({ opacity: 1, transform: 'translateX(0)', offset: 0 }),\n                style({ opacity: 1, transform: 'translateX(-15px)', offset: 0.7 }),\n                style({ opacity: 0, transform: 'translateX(100%)', offset: 1.0 })\n            ]))\n        ])\n    ])\n];\nvar DragEvent = ((window)).DragEvent;\nvar CUSTOM_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(function () { return TagInputComponent; }),\n    multi: true\n};\nvar defaults$2 = forwardRef(function () { return OptionsProvider.defaults.tagInput; });\nvar TagInputComponent = /** @class */ (function (_super) {\n    __extends(TagInputComponent, _super);\n    function TagInputComponent(renderer, dragProvider) {\n        var _this = _super.call(this) || this;\n        _this.renderer = renderer;\n        _this.dragProvider = dragProvider;\n        _this.separatorKeys = new defaults$2().separatorKeys;\n        _this.separatorKeyCodes = new defaults$2().separatorKeyCodes;\n        _this.placeholder = new defaults$2().placeholder;\n        _this.secondaryPlaceholder = new defaults$2().secondaryPlaceholder;\n        _this.maxItems = new defaults$2().maxItems;\n        _this.validators = new defaults$2().validators;\n        _this.asyncValidators = new defaults$2().asyncValidators;\n        _this.onlyFromAutocomplete = new defaults$2().onlyFromAutocomplete;\n        _this.errorMessages = new defaults$2().errorMessages;\n        _this.theme = new defaults$2().theme;\n        _this.onTextChangeDebounce = new defaults$2().onTextChangeDebounce;\n        _this.inputId = new defaults$2().inputId;\n        _this.inputClass = new defaults$2().inputClass;\n        _this.clearOnBlur = new defaults$2().clearOnBlur;\n        _this.hideForm = new defaults$2().hideForm;\n        _this.addOnBlur = new defaults$2().addOnBlur;\n        _this.addOnPaste = new defaults$2().addOnPaste;\n        _this.pasteSplitPattern = new defaults$2().pasteSplitPattern;\n        _this.blinkIfDupe = new defaults$2().blinkIfDupe;\n        _this.removable = new defaults$2().removable;\n        _this.editable = new defaults$2().editable;\n        _this.allowDupes = new defaults$2().allowDupes;\n        _this.modelAsStrings = new defaults$2().modelAsStrings;\n        _this.trimTags = new defaults$2().trimTags;\n        _this.ripple = new defaults$2().ripple;\n        _this.tabindex = new defaults$2().tabIndex;\n        _this.disable = new defaults$2().disable;\n        _this.dragZone = new defaults$2().dragZone;\n        _this.onRemoving = new defaults$2().onRemoving;\n        _this.onAdding = new defaults$2().onAdding;\n        _this.animationDuration = new defaults$2().animationDuration;\n        _this.onAdd = new EventEmitter();\n        _this.onRemove = new EventEmitter();\n        _this.onSelect = new EventEmitter();\n        _this.onFocus = new EventEmitter();\n        _this.onBlur = new EventEmitter();\n        _this.onTextChange = new EventEmitter();\n        _this.onPaste = new EventEmitter();\n        _this.onValidationError = new EventEmitter();\n        _this.onTagEdited = new EventEmitter();\n        _this.isLoading = false;\n        _this.listeners = (_b = {}, _b[KEYDOWN] = ([]), _b[KEYUP] = ([]), _b);\n        _this.inputTextChange = new EventEmitter();\n        _this.inputTextValue = '';\n        _this.errors = [];\n        _this.appendTag = function (tag, index) {\n            if (index === void 0) { index = _this.items.length; }\n            var items = _this.items;\n            var model = _this.modelAsStrings ? tag[_this.identifyBy] : tag;\n            _this.items = __spread(items.slice(0, index), [\n                model\n            ], items.slice(index, items.length));\n        };\n        _this.createTag = function (model) {\n            var trim = function (val, key) {\n                return typeof val === 'string' ? val.trim() : val[key];\n            };\n            return Object.assign({}, typeof model !== 'string' ? model : {}, (_b = {}, _b[_this.displayBy] = _this.trimTags ? trim(model, _this.displayBy) : model, _b[_this.identifyBy] = _this.trimTags ? trim(model, _this.identifyBy) : model, _b));\n            var _b;\n        };\n        _this.isTagValid = function (tag, fromAutocomplete) {\n            if (fromAutocomplete === void 0) { fromAutocomplete = false; }\n            var selectedItem = _this.dropdown ? _this.dropdown.selectedItem : undefined;\n            var value = _this.getItemDisplay(tag).trim();\n            if (selectedItem && !fromAutocomplete || !value) {\n                return false;\n            }\n            var dupe = _this.findDupe(tag, fromAutocomplete);\n            if (!_this.allowDupes && dupe && _this.blinkIfDupe) {\n                var model = _this.tags.find(function (item) {\n                    return _this.getItemValue(item.model) === _this.getItemValue(dupe);\n                });\n                if (model) {\n                    model.blink();\n                }\n            }\n            var isFromAutocomplete = fromAutocomplete && _this.onlyFromAutocomplete;\n            var assertions = [\n                !dupe || _this.allowDupes,\n                !_this.maxItemsReached,\n                ((isFromAutocomplete) || !_this.onlyFromAutocomplete)\n            ];\n            return assertions.filter(Boolean).length === assertions.length;\n        };\n        _this.onPasteCallback = function (data) { return __awaiter(_this, void 0, void 0, function () {\n            var _this = this;\n            var getText, text, requests, resetInput;\n            return __generator(this, function (_b) {\n                getText = function () {\n                    var isIE = Boolean(((window)).clipboardData);\n                    var clipboardData = isIE ? (((window)).clipboardData) : data.clipboardData;\n                    var type = isIE ? 'Text' : 'text/plain';\n                    return clipboardData.getData(type) || '';\n                };\n                text = getText();\n                requests = text\n                    .split(this.pasteSplitPattern)\n                    .map(function (item) {\n                    var tag = _this.createTag(item);\n                    _this.setInputValue(tag[_this.displayBy]);\n                    return _this.onAddingRequested(false, tag);\n                });\n                resetInput = function () { return setTimeout(function () { return _this.setInputValue(''); }, 50); };\n                Promise.all(requests).then(function () {\n                    _this.onPaste.emit(text);\n                    resetInput();\n                })\n                    .catch(resetInput);\n                return [2 /*return*/];\n            });\n        }); };\n        return _this;\n        var _b;\n    }\n    Object.defineProperty(TagInputComponent.prototype, \"inputText\", {\n        get: function () {\n            return this.inputTextValue;\n        },\n        set: function (text) {\n            this.inputTextValue = text;\n            this.inputTextChange.emit(text);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(TagInputComponent.prototype, \"tabindexAttr\", {\n        get: function () {\n            return this.tabindex !== '' ? '-1' : '';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputComponent.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.setUpKeypressListeners();\n        this.setupSeparatorKeysListener();\n        this.setUpInputKeydownListeners();\n        if (this.onTextChange.observers.length) {\n            this.setUpTextChangeSubscriber();\n        }\n        if (this.clearOnBlur || this.addOnBlur) {\n            this.setUpOnBlurSubscriber();\n        }\n        if (this.addOnPaste) {\n            this.setUpOnPasteListener();\n        }\n        var statusChanges$ = this.inputForm.form.statusChanges;\n        statusChanges$.pipe(filter(function (status) { return status !== 'PENDING'; })).subscribe(function () {\n            _this.errors = _this.inputForm.getErrorMessages(_this.errorMessages);\n        });\n        this.isProgressBarVisible$ = statusChanges$.pipe(map(function (status) {\n            return status === 'PENDING' || _this.isLoading;\n        }));\n        if (this.hideForm) {\n            this.inputForm.destroy();\n        }\n    };\n    TagInputComponent.prototype.ngOnInit = function () {\n        var hasReachedMaxItems = this.maxItems !== undefined &&\n            this.items &&\n            this.items.length > this.maxItems;\n        if (hasReachedMaxItems) {\n            this.maxItems = this.items.length;\n            console.warn(MAX_ITEMS_WARNING);\n        }\n        this.editable = this.onlyFromAutocomplete ? false : this.editable;\n        this.setAnimationMetadata();\n    };\n    TagInputComponent.prototype.onRemoveRequested = function (tag, index) {\n        var _this = this;\n        return new Promise(function (resolve) {\n            var subscribeFn = function (model) {\n                _this.removeItem(model, index);\n                resolve(tag);\n            };\n            _this.onRemoving ?\n                _this.onRemoving(tag)\n                    .pipe(first())\n                    .subscribe(subscribeFn) : subscribeFn(tag);\n        });\n    };\n    TagInputComponent.prototype.onAddingRequested = function (fromAutocomplete, tag, index, giveupFocus) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            var subscribeFn = function (model) {\n                return _this\n                    .addItem(fromAutocomplete, model, index, giveupFocus)\n                    .then(resolve)\n                    .catch(reject);\n            };\n            return _this.onAdding ?\n                _this.onAdding(tag)\n                    .pipe(first())\n                    .subscribe(subscribeFn, reject) : subscribeFn(tag);\n        });\n    };\n    TagInputComponent.prototype.selectItem = function (item, emit) {\n        if (emit === void 0) { emit = true; }\n        var isReadonly = item && typeof item !== 'string' && item[\"readonly\"];\n        if (isReadonly || this.selectedTag === item) {\n            return;\n        }\n        this.selectedTag = item;\n        if (emit) {\n            this.onSelect.emit(item);\n        }\n    };\n    TagInputComponent.prototype.fireEvents = function (eventName, $event) {\n        var _this = this;\n        this.listeners[eventName].forEach(function (listener) { return listener.call(_this, $event); });\n    };\n    TagInputComponent.prototype.handleKeydown = function (data) {\n        var event = data.event;\n        var key = event.keyCode || event.which;\n        var shiftKey = event.shiftKey || false;\n        switch (KEY_PRESS_ACTIONS[key]) {\n            case ACTIONS_KEYS.DELETE:\n                if (this.selectedTag && this.removable) {\n                    var index = this.items.indexOf(this.selectedTag);\n                    this.onRemoveRequested(this.selectedTag, index);\n                }\n                break;\n            case ACTIONS_KEYS.SWITCH_PREV:\n                this.moveToTag(data.model, PREV);\n                break;\n            case ACTIONS_KEYS.SWITCH_NEXT:\n                this.moveToTag(data.model, NEXT);\n                break;\n            case ACTIONS_KEYS.TAB:\n                if (shiftKey) {\n                    if (this.isFirstTag(data.model)) {\n                        return;\n                    }\n                    this.moveToTag(data.model, PREV);\n                }\n                else {\n                    if (this.isLastTag(data.model) && (this.disable || this.maxItemsReached)) {\n                        return;\n                    }\n                    this.moveToTag(data.model, NEXT);\n                }\n                break;\n            default:\n                return;\n        }\n        event.preventDefault();\n    };\n    TagInputComponent.prototype.onFormSubmit = function () {\n        return __awaiter(this, void 0, void 0, function () {\n            var _a_1;\n            return __generator(this, function (_b) {\n                switch (_b.label) {\n                    case 0:\n                        _b.trys.push([0, 2, , 3]);\n                        return [4 /*yield*/, this.onAddingRequested(false, this.formValue)];\n                    case 1:\n                        _b.sent();\n                        return [3 /*break*/, 3];\n                    case 2:\n                        _a_1 = _b.sent();\n                        return [2 /*return*/];\n                    case 3: return [2 /*return*/];\n                }\n            });\n        });\n    };\n    TagInputComponent.prototype.setInputValue = function (value, emitEvent) {\n        if (emitEvent === void 0) { emitEvent = true; }\n        var control = this.getControl();\n        control.setValue(value, { emitEvent: emitEvent });\n    };\n    TagInputComponent.prototype.getControl = function () {\n        return (this.inputForm.value);\n    };\n    TagInputComponent.prototype.focus = function (applyFocus, displayAutocomplete) {\n        if (applyFocus === void 0) { applyFocus = false; }\n        if (displayAutocomplete === void 0) { displayAutocomplete = false; }\n        if (this.dragProvider.getState('dragging')) {\n            return;\n        }\n        this.selectItem(undefined, false);\n        if (applyFocus) {\n            this.inputForm.focus();\n            this.onFocus.emit(this.formValue);\n        }\n    };\n    TagInputComponent.prototype.blur = function () {\n        this.onTouched();\n        this.onBlur.emit(this.formValue);\n    };\n    TagInputComponent.prototype.hasErrors = function () {\n        return this.inputForm && this.inputForm.hasErrors();\n    };\n    TagInputComponent.prototype.isInputFocused = function () {\n        return this.inputForm && this.inputForm.isInputFocused();\n    };\n    TagInputComponent.prototype.hasCustomTemplate = function () {\n        var template = this.templates ? this.templates.first : undefined;\n        var menuTemplate = this.dropdown && this.dropdown.templates ?\n            this.dropdown.templates.first : undefined;\n        return Boolean(template && template !== menuTemplate);\n    };\n    Object.defineProperty(TagInputComponent.prototype, \"maxItemsReached\", {\n        get: function () {\n            return this.maxItems !== undefined &&\n                this.items.length >= this.maxItems;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(TagInputComponent.prototype, \"formValue\", {\n        get: function () {\n            var form = this.inputForm.value;\n            return form ? form.value : '';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TagInputComponent.prototype.onDragStarted = function (event, tag, index) {\n        event.stopPropagation();\n        var item = ({ zone: this.dragZone, tag: tag, index: index });\n        this.dragProvider.setSender(this);\n        this.dragProvider.setDraggedItem(event, item);\n        this.dragProvider.setState({ dragging: true, index: index });\n    };\n    TagInputComponent.prototype.onDragOver = function (event, index) {\n        this.dragProvider.setState({ dropping: true });\n        this.dragProvider.setReceiver(this);\n        event.preventDefault();\n    };\n    TagInputComponent.prototype.onTagDropped = function (event, index) {\n        var item = this.dragProvider.getDraggedItem(event);\n        if (!item || item.zone !== this.dragZone) {\n            return;\n        }\n        this.dragProvider.onTagDropped(item.tag, item.index, index);\n        event.preventDefault();\n        event.stopPropagation();\n    };\n    TagInputComponent.prototype.isDropping = function () {\n        var isReceiver = this.dragProvider.receiver === this;\n        var isDropping = this.dragProvider.getState('dropping');\n        return Boolean(isReceiver && isDropping);\n    };\n    TagInputComponent.prototype.onTagBlurred = function (changedElement, index) {\n        this.items[index] = changedElement;\n        this.blur();\n    };\n    TagInputComponent.prototype.trackBy = function (index, item) {\n        return item[this.identifyBy];\n    };\n    TagInputComponent.prototype.updateEditedTag = function (_b) {\n        var tag = _b.tag, index = _b.index;\n        this.onTagEdited.emit(tag);\n    };\n    TagInputComponent.prototype.moveToTag = function (item, direction) {\n        var isLast = this.isLastTag(item);\n        var isFirst = this.isFirstTag(item);\n        var stopSwitch = (direction === NEXT && isLast) ||\n            (direction === PREV && isFirst);\n        if (stopSwitch) {\n            this.focus(true);\n            return;\n        }\n        var offset = direction === NEXT ? 1 : -1;\n        var index = this.getTagIndex(item) + offset;\n        var tag = this.getTagAtIndex(index);\n        return tag.select.call(tag);\n    };\n    TagInputComponent.prototype.isFirstTag = function (item) {\n        return this.tags.first.model === item;\n    };\n    TagInputComponent.prototype.isLastTag = function (item) {\n        return this.tags.last.model === item;\n    };\n    TagInputComponent.prototype.getTagIndex = function (item) {\n        var tags = this.tags.toArray();\n        return tags.findIndex(function (tag) { return tag.model === item; });\n    };\n    TagInputComponent.prototype.getTagAtIndex = function (index) {\n        var tags = this.tags.toArray();\n        return tags[index];\n    };\n    TagInputComponent.prototype.removeItem = function (tag, index) {\n        this.items = this.getItemsWithout(index);\n        if (this.selectedTag === tag) {\n            this.selectItem(undefined, false);\n        }\n        this.focus(true, false);\n        this.onRemove.emit(tag);\n    };\n    TagInputComponent.prototype.addItem = function (fromAutocomplete, item, index, giveupFocus) {\n        var _this = this;\n        if (fromAutocomplete === void 0) { fromAutocomplete = false; }\n        var display = this.getItemDisplay(item);\n        var tag = this.createTag(item);\n        if (fromAutocomplete) {\n            this.setInputValue(this.getItemValue(item, true));\n        }\n        return new Promise(function (resolve, reject) {\n            var reset = function () {\n                _this.setInputValue('');\n                if (giveupFocus) {\n                    _this.focus(false, false);\n                }\n                else {\n                    _this.focus(true, false);\n                }\n                resolve(display);\n            };\n            var appendItem = function () {\n                _this.appendTag(tag, index);\n                _this.onAdd.emit(tag);\n                if (!_this.dropdown) {\n                    return;\n                }\n                _this.dropdown.hide();\n                if (_this.dropdown.showDropdownIfEmpty) {\n                    _this.dropdown.show();\n                }\n            };\n            var status = _this.inputForm.form.status;\n            var isTagValid = _this.isTagValid(tag, fromAutocomplete);\n            var onValidationError = function () {\n                _this.onValidationError.emit(tag);\n                return reject();\n            };\n            if (status === 'VALID' && isTagValid) {\n                appendItem();\n                return reset();\n            }\n            if (status === 'INVALID' || !isTagValid) {\n                reset();\n                return onValidationError();\n            }\n            if (status === 'PENDING') {\n                var statusUpdate$ = _this.inputForm.form.statusChanges;\n                return statusUpdate$\n                    .pipe(filter(function (statusUpdate) { return statusUpdate !== 'PENDING'; }), first())\n                    .subscribe(function (statusUpdate) {\n                    if (statusUpdate === 'VALID' && isTagValid) {\n                        appendItem();\n                        resolve();\n                    }\n                    else {\n                        onValidationError();\n                    }\n                });\n            }\n        });\n    };\n    TagInputComponent.prototype.setupSeparatorKeysListener = function () {\n        var _this = this;\n        var useSeparatorKeys = this.separatorKeyCodes.length > 0 || this.separatorKeys.length > 0;\n        var listener = function ($event) {\n            var hasKeyCode = _this.separatorKeyCodes.indexOf($event.keyCode) >= 0;\n            var hasKey = _this.separatorKeys.indexOf($event.key) >= 0;\n            var isIMEProcessing = $event.keyCode === 229;\n            if (hasKeyCode || (hasKey && !isIMEProcessing)) {\n                $event.preventDefault();\n                _this.onAddingRequested(false, _this.formValue)\n                    .catch(function () { });\n            }\n        };\n        listen.call(this, KEYDOWN, listener, useSeparatorKeys);\n    };\n    TagInputComponent.prototype.setUpKeypressListeners = function () {\n        var _this = this;\n        var listener = function ($event) {\n            var isCorrectKey = $event.keyCode === 37 || $event.keyCode === 8;\n            if (isCorrectKey &&\n                !_this.formValue &&\n                _this.items.length) {\n                _this.tags.last.select.call(_this.tags.last);\n            }\n        };\n        listen.call(this, KEYDOWN, listener);\n    };\n    TagInputComponent.prototype.setUpInputKeydownListeners = function () {\n        var _this = this;\n        this.inputForm.onKeydown.subscribe(function (event) {\n            _this.fireEvents('keydown', event);\n            if (event.key === 'Backspace' && _this.formValue.trim() === '') {\n                event.preventDefault();\n            }\n        });\n    };\n    TagInputComponent.prototype.setUpOnPasteListener = function () {\n        var _this = this;\n        var input = this.inputForm.input.nativeElement;\n        this.renderer.listen(input, 'paste', function (event) {\n            _this.onPasteCallback(event);\n            event.preventDefault();\n            return true;\n        });\n    };\n    TagInputComponent.prototype.setUpTextChangeSubscriber = function () {\n        var _this = this;\n        this.inputForm.form\n            .valueChanges\n            .pipe(debounceTime(this.onTextChangeDebounce))\n            .subscribe(function (value) {\n            _this.onTextChange.emit(value.item);\n        });\n    };\n    TagInputComponent.prototype.setUpOnBlurSubscriber = function () {\n        var _this = this;\n        var filterFn = function () {\n            var isVisible = _this.dropdown && _this.dropdown.isVisible;\n            return !isVisible && !!_this.formValue;\n        };\n        this.inputForm\n            .onBlur\n            .pipe(debounceTime(100), filter(filterFn))\n            .subscribe(function () {\n            var reset = function () { return _this.setInputValue(''); };\n            if (_this.addOnBlur) {\n                return _this\n                    .onAddingRequested(false, _this.formValue, undefined, true)\n                    .then(reset)\n                    .catch(reset);\n            }\n            reset();\n        });\n    };\n    TagInputComponent.prototype.findDupe = function (tag, isFromAutocomplete) {\n        var _this = this;\n        var identifyBy = isFromAutocomplete ? this.dropdown.identifyBy : this.identifyBy;\n        var id = tag[identifyBy];\n        return this.items.find(function (item) { return _this.getItemValue(item) === id; });\n    };\n    TagInputComponent.prototype.setAnimationMetadata = function () {\n        this.animationMetadata = {\n            value: 'in',\n            params: Object.assign({}, this.animationDuration)\n        };\n    };\n    return TagInputComponent;\n}(TagInputAccessor));\nTagInputComponent.decorators = [\n    { type: Component, args: [{\n                selector: 'tag-input',\n                providers: [CUSTOM_ACCESSOR],\n                styles: [\".dark tag:focus{-webkit-box-shadow:0 0 0 1px #323232;box-shadow:0 0 0 1px #323232}.ng2-tag-input.bootstrap3-info{background-color:#fff;display:inline-block;color:#555;vertical-align:middle;max-width:100%;height:42px;line-height:44px}.ng2-tag-input.bootstrap3-info input{border:none;-webkit-box-shadow:none;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder{color:#777;opacity:1}.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info input:focus{border:none;-webkit-box-shadow:none;box-shadow:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.4);box-shadow:inset 0 1px 1px rgba(0,0,0,.4);border:1px solid #ccc}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{-webkit-box-shadow:inset 0 1px 1px #d9534f;box-shadow:inset 0 1px 1px #d9534f}.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;-webkit-transition:all .25s;transition:all .25s;padding:.25rem 0;min-height:32px;cursor:text;border-bottom:2px solid #efefef}.ng2-tag-input:focus{outline:0}.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #2196f3}.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #f44336}.ng2-tag-input.ng2-tag-input--loading{border:none}.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.ng2-tag-input form{margin:.1em 0}.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.minimal.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:1px solid transparent}.minimal.ng2-tag-input:focus{outline:0}.minimal.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.minimal.ng2-tag-input.ng2-tag-input--loading{border:none}.minimal.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.minimal.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.dark.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #444}.dark.ng2-tag-input:focus{outline:0}.dark.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.dark.ng2-tag-input.ng2-tag-input--loading{border:none}.dark.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.dark.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #efefef}.bootstrap.ng2-tag-input:focus{outline:0}.bootstrap.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #0275d8}.bootstrap.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #d9534f}.bootstrap.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap3-info.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:4px;cursor:text;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-radius:4px}.bootstrap3-info.ng2-tag-input:focus{outline:0}.bootstrap3-info.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d9534f}.bootstrap3-info.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap3-info.ng2-tag-input form{margin:.1em 0}.bootstrap3-info.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.error-message{font-size:.8em;color:#f44336;margin:.5em 0 0}.bootstrap .error-message{color:#d9534f}.progress-bar,.progress-bar:before{height:2px;width:100%;margin:0}.progress-bar{background-color:#2196f3;display:-webkit-box;display:-ms-flexbox;display:flex;position:absolute;bottom:0}.progress-bar:before{background-color:#82c4f8;content:'';-webkit-animation:2s cubic-bezier(.4,0,.2,1) infinite running-progress;animation:2s cubic-bezier(.4,0,.2,1) infinite running-progress}@-webkit-keyframes running-progress{0%{margin-left:0;margin-right:100%}50%{margin-left:25%;margin-right:0}100%{margin-left:100%;margin-right:0}}@keyframes running-progress{0%{margin-left:0;margin-right:100%}50%{margin-left:25%;margin-right:0}100%{margin-left:100%;margin-right:0}}tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;font-family:Roboto,\\\"Helvetica Neue\\\",sans-serif;font-weight:400;font-size:1em;letter-spacing:.05rem;color:#444;border-radius:16px;-webkit-transition:all .3s;transition:all .3s;margin:.1rem .3rem .1rem 0;padding:.08rem .45rem;height:32px;line-height:34px;background:#efefef;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}tag:not(.readonly):not(.tag--editing):focus{background:#2196f3;color:#fff;-webkit-box-shadow:0 2px 3px 1px #d4d1d1;box-shadow:0 2px 3px 1px #d4d1d1}tag:not(.readonly):not(.tag--editing):active{background:#0d8aee;color:#fff;-webkit-box-shadow:0 2px 3px 1px #d4d1d1;box-shadow:0 2px 3px 1px #d4d1d1}tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#e2e2e2;color:initial;-webkit-box-shadow:0 2px 3px 1px #d4d1d1;box-shadow:0 2px 3px 1px #d4d1d1}tag.readonly{cursor:default}tag.readonly:focus,tag:focus{outline:0}tag.tag--editing{background-color:#fff;border:1px solid #ccc;cursor:text}.minimal tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;border-radius:0;background:#f9f9f9;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}.minimal tag:not(.readonly):not(.tag--editing):active,.minimal tag:not(.readonly):not(.tag--editing):focus{background:#d0d0d0;color:initial}.minimal tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#ececec}.minimal tag.readonly{cursor:default}.minimal tag.readonly:focus,.minimal tag:focus{outline:0}.minimal tag.tag--editing{cursor:text}.dark tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;color:#f9f9f9;border-radius:3px;background:#444;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}.dark tag:not(.readonly):not(.tag--editing):focus{background:#efefef;color:#444}.dark tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#2b2b2b;color:#f9f9f9}.dark tag.readonly{cursor:default}.dark tag.readonly:focus,.dark tag:focus{outline:0}.dark tag.tag--editing{cursor:text}.bootstrap tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;color:#f9f9f9;border-radius:.25rem;background:#0275d8;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative}.bootstrap tag:not(.readonly):not(.tag--editing):active,.bootstrap tag:not(.readonly):not(.tag--editing):focus{background:#025aa5}.bootstrap tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#0267bf;color:#f9f9f9}.bootstrap tag.readonly{cursor:default}.bootstrap tag.readonly:focus,.bootstrap tag:focus{outline:0}.bootstrap tag.tag--editing{cursor:text}.bootstrap3-info tag{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;font-family:inherit;font-weight:400;font-size:95%;color:#fff;border-radius:.25em;background:#5bc0de;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;outline:0;cursor:pointer;position:relative;padding:.25em .6em;text-align:center;white-space:nowrap}.bootstrap3-info tag:not(.readonly):not(.tag--editing):active,.bootstrap3-info tag:not(.readonly):not(.tag--editing):focus{background:#28a1c5}.bootstrap3-info tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:#46b8da;color:#fff}.bootstrap3-info tag.readonly{cursor:default}.bootstrap3-info tag.readonly:focus,.bootstrap3-info tag:focus{outline:0}.bootstrap3-info tag.tag--editing{cursor:text}:host{display:block}\"],\n                template: \"<!-- CONTAINER -->\\n\\n<div ngClass=\\\"ng2-tag-input {{ theme || '' }}\\\"\\n     (click)=\\\"focus(true, false)\\\"\\n     [attr.tabindex]=\\\"-1\\\"\\n\\n     (drop)=\\\"dragZone ? onTagDropped($event, undefined) : undefined\\\"\\n     (dragenter)=\\\"dragZone ? onDragOver($event) : undefined\\\"\\n     (dragover)=\\\"dragZone ? onDragOver($event) : undefined\\\"\\n     (dragend)=\\\"dragZone ? dragProvider.onDragEnd() : undefined\\\"\\n\\n     [class.ng2-tag-input--dropping]=\\\"isDropping()\\\"\\n     [class.ng2-tag-input--disabled]=\\\"disable\\\"\\n     [class.ng2-tag-input--loading]=\\\"isLoading\\\"\\n     [class.ng2-tag-input--invalid]=\\\"hasErrors()\\\"\\n     [class.ng2-tag-input--focused]=\\\"isInputFocused()\\\">\\n\\n    <!-- TAGS -->\\n    <div class=\\\"ng2-tags-container\\\">\\n        <tag *ngFor=\\\"let item of items; let i = index; trackBy: trackBy\\\"\\n\\n             (onSelect)=\\\"selectItem(item)\\\"\\n             (onRemove)=\\\"onRemoveRequested(item, i)\\\"\\n             (onKeyDown)=\\\"handleKeydown($event)\\\"\\n             (onTagEdited)=\\\"updateEditedTag($event)\\\"\\n             (onBlur)=\\\"onTagBlurred($event, i)\\\"\\n             draggable=\\\"{{ editable }}\\\"\\n\\n             (dragstart)=\\\"dragZone ? onDragStarted($event, item, i) : undefined\\\"\\n             (drop)=\\\"dragZone ? onTagDropped($event, i) : undefined\\\"\\n             (dragenter)=\\\"dragZone ? onDragOver($event) : undefined\\\"\\n             (dragover)=\\\"dragZone ? onDragOver($event, i) : undefined\\\"\\n             (dragleave)=\\\"dragZone ? dragProvider.onDragEnd() : undefined\\\"\\n\\n             [canAddTag]=\\\"isTagValid\\\"\\n             [attr.tabindex]=\\\"0\\\"\\n             [disabled]=\\\"disable\\\"\\n             [@animation]=\\\"animationMetadata\\\"\\n             [hasRipple]=\\\"ripple\\\"\\n             [index]=\\\"i\\\"\\n             [removable]=\\\"removable\\\"\\n             [editable]=\\\"editable\\\"\\n             [displayBy]=\\\"displayBy\\\"\\n             [identifyBy]=\\\"identifyBy\\\"\\n             [template]=\\\"!!hasCustomTemplate() ? templates.first : undefined\\\"\\n             [draggable]=\\\"dragZone\\\"\\n             [model]=\\\"item\\\">\\n        </tag>\\n\\n        <tag-input-form\\n            (onSubmit)=\\\"onFormSubmit()\\\"\\n            (onBlur)=\\\"blur()\\\"\\n            (click)=\\\"dropdown ? dropdown.show() : undefined\\\"\\n            (onKeydown)=\\\"fireEvents('keydown', $event)\\\"\\n            (onKeyup)=\\\"fireEvents('keyup', $event)\\\"\\n\\n            [(inputText)]=\\\"inputText\\\"\\n            [disabled]=\\\"disable\\\"\\n            [validators]=\\\"validators\\\"\\n            [asyncValidators]=\\\"asyncValidators\\\"\\n            [hidden]=\\\"maxItemsReached\\\"\\n            [placeholder]=\\\"items.length ? placeholder : secondaryPlaceholder\\\"\\n            [inputClass]=\\\"inputClass\\\"\\n            [inputId]=\\\"inputId\\\"\\n            [tabindex]=\\\"tabindex\\\">\\n        </tag-input-form>\\n    </div>\\n\\n    <div class=\\\"progress-bar\\\" *ngIf=\\\"isProgressBarVisible$ | async\\\"></div>\\n</div>\\n\\n<!-- ERRORS -->\\n<div *ngIf=\\\"hasErrors()\\\" class=\\\"error-messages {{ theme || '' }}\\\">\\n    <p *ngFor=\\\"let error of errors\\\" class=\\\"error-message\\\">\\n        <span>{{ error }}</span>\\n    </p>\\n</div>\\n\\n<ng-content></ng-content>\\n\",\n                animations: animations\n            },] },\n];\nTagInputComponent.ctorParameters = function () { return [\n    { type: Renderer2, },\n    { type: DragProvider, },\n]; };\nTagInputComponent.propDecorators = {\n    \"separatorKeys\": [{ type: Input },],\n    \"separatorKeyCodes\": [{ type: Input },],\n    \"placeholder\": [{ type: Input },],\n    \"secondaryPlaceholder\": [{ type: Input },],\n    \"maxItems\": [{ type: Input },],\n    \"validators\": [{ type: Input },],\n    \"asyncValidators\": [{ type: Input },],\n    \"onlyFromAutocomplete\": [{ type: Input },],\n    \"errorMessages\": [{ type: Input },],\n    \"theme\": [{ type: Input },],\n    \"onTextChangeDebounce\": [{ type: Input },],\n    \"inputId\": [{ type: Input },],\n    \"inputClass\": [{ type: Input },],\n    \"clearOnBlur\": [{ type: Input },],\n    \"hideForm\": [{ type: Input },],\n    \"addOnBlur\": [{ type: Input },],\n    \"addOnPaste\": [{ type: Input },],\n    \"pasteSplitPattern\": [{ type: Input },],\n    \"blinkIfDupe\": [{ type: Input },],\n    \"removable\": [{ type: Input },],\n    \"editable\": [{ type: Input },],\n    \"allowDupes\": [{ type: Input },],\n    \"modelAsStrings\": [{ type: Input },],\n    \"trimTags\": [{ type: Input },],\n    \"inputText\": [{ type: Input },],\n    \"ripple\": [{ type: Input },],\n    \"tabindex\": [{ type: Input },],\n    \"disable\": [{ type: Input },],\n    \"dragZone\": [{ type: Input },],\n    \"onRemoving\": [{ type: Input },],\n    \"onAdding\": [{ type: Input },],\n    \"animationDuration\": [{ type: Input },],\n    \"onAdd\": [{ type: Output },],\n    \"onRemove\": [{ type: Output },],\n    \"onSelect\": [{ type: Output },],\n    \"onFocus\": [{ type: Output },],\n    \"onBlur\": [{ type: Output },],\n    \"onTextChange\": [{ type: Output },],\n    \"onPaste\": [{ type: Output },],\n    \"onValidationError\": [{ type: Output },],\n    \"onTagEdited\": [{ type: Output },],\n    \"dropdown\": [{ type: ContentChild, args: [TagInputDropdown,] },],\n    \"templates\": [{ type: ContentChildren, args: [TemplateRef, { descendants: false },] },],\n    \"inputForm\": [{ type: ViewChild, args: [TagInputForm,] },],\n    \"tags\": [{ type: ViewChildren, args: [TagComponent,] },],\n    \"inputTextChange\": [{ type: Output },],\n    \"tabindexAttr\": [{ type: HostBinding, args: ['attr.tabindex',] },],\n};\nvar DeleteIconComponent = /** @class */ (function () {\n    function DeleteIconComponent() {\n    }\n    return DeleteIconComponent;\n}());\nDeleteIconComponent.decorators = [\n    { type: Component, args: [{\n                selector: 'delete-icon',\n                template: \"<span>\\n    <svg height=\\\"16px\\\" viewBox=\\\"0 0 32 32\\\" width=\\\"16px\\\">\\n        <path d=\\\"M17.459,16.014l8.239-8.194c0.395-0.391,0.395-1.024,0-1.414c-0.394-0.391-1.034-0.391-1.428,0  l-8.232,8.187L7.73,6.284c-0.394-0.395-1.034-0.395-1.428,0c-0.394,0.396-0.394,1.037,0,1.432l8.302,8.303l-8.332,8.286  c-0.394,0.391-0.394,1.024,0,1.414c0.394,0.391,1.034,0.391,1.428,0l8.325-8.279l8.275,8.276c0.394,0.395,1.034,0.395,1.428,0  c0.394-0.396,0.394-1.037,0-1.432L17.459,16.014z\\\"\\n              fill=\\\"#121313\\\" />\\n    </svg>\\n</span>\\n\",\n                styles: [\".dark tag:focus{-webkit-box-shadow:0 0 0 1px #323232;box-shadow:0 0 0 1px #323232}.ng2-tag-input.bootstrap3-info{background-color:#fff;display:inline-block;color:#555;vertical-align:middle;max-width:100%;height:42px;line-height:44px}.ng2-tag-input.bootstrap3-info input{border:none;-webkit-box-shadow:none;box-shadow:none;outline:0;background-color:transparent;padding:0 6px;margin:0;width:auto;max-width:inherit}.ng2-tag-input.bootstrap3-info .form-control input::-moz-placeholder{color:#777;opacity:1}.ng2-tag-input.bootstrap3-info .form-control input:-ms-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info .form-control input::-webkit-input-placeholder{color:#777}.ng2-tag-input.bootstrap3-info input:focus{border:none;-webkit-box-shadow:none;box-shadow:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--focused{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.4);box-shadow:inset 0 1px 1px rgba(0,0,0,.4);border:1px solid #ccc}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{-webkit-box-shadow:inset 0 1px 1px #d9534f;box-shadow:inset 0 1px 1px #d9534f}.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;-webkit-transition:all .25s;transition:all .25s;padding:.25rem 0;min-height:32px;cursor:text;border-bottom:2px solid #efefef}.ng2-tag-input:focus{outline:0}.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #2196f3}.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #f44336}.ng2-tag-input.ng2-tag-input--loading{border:none}.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.ng2-tag-input form{margin:.1em 0}.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.minimal.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:1px solid transparent}.minimal.ng2-tag-input:focus{outline:0}.minimal.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.minimal.ng2-tag-input.ng2-tag-input--loading{border:none}.minimal.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.minimal.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.dark.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #444}.dark.ng2-tag-input:focus{outline:0}.dark.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.dark.ng2-tag-input.ng2-tag-input--loading{border:none}.dark.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.dark.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;cursor:text;border-bottom:2px solid #efefef}.bootstrap.ng2-tag-input:focus{outline:0}.bootstrap.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap.ng2-tag-input.ng2-tag-input--focused{border-bottom:2px solid #0275d8}.bootstrap.ng2-tag-input.ng2-tag-input--invalid{border-bottom:2px solid #d9534f}.bootstrap.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.bootstrap3-info.ng2-tag-input{display:block;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;padding:4px;cursor:text;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-radius:4px}.bootstrap3-info.ng2-tag-input:focus{outline:0}.bootstrap3-info.ng2-tag-input.ng2-tag-input--dropping{opacity:.7}.bootstrap3-info.ng2-tag-input.ng2-tag-input--invalid{border-bottom:1px solid #d9534f}.bootstrap3-info.ng2-tag-input.ng2-tag-input--loading{border:none}.bootstrap3-info.ng2-tag-input.ng2-tag-input--disabled{opacity:.5;cursor:not-allowed}.bootstrap3-info.ng2-tag-input form{margin:.1em 0}.bootstrap3-info.ng2-tag-input .ng2-tags-container{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-webkit-box;display:-ms-flexbox;display:flex}.error-message{font-size:.8em;color:#f44336;margin:.5em 0 0}.bootstrap .error-message{color:#d9534f}:host(delete-icon){width:20px;height:16px;-webkit-transition:all .15s;transition:all .15s;display:inline-block;text-align:right}:host(delete-icon) path{fill:#444}:host(delete-icon) svg{vertical-align:bottom;height:34px}:host(delete-icon):hover{-webkit-transform:scale(1.5) translateY(-3px);transform:scale(1.5) translateY(-3px)}:host-context(.dark){text-align:right}:host-context(.dark) path{fill:#fff}:host-context(.dark) svg{vertical-align:bottom;height:34px}:host-context(.minimal){text-align:right}:host-context(.minimal) path{fill:#444}:host-context(.minimal) svg{vertical-align:bottom;height:34px}:host-context(.bootstrap){text-align:right}:host-context(.bootstrap) path{fill:#fff}:host-context(.bootstrap) svg{vertical-align:bottom;height:34px}:host-context(tag:active) path,:host-context(tag:focus) path{fill:#fff}:host-context(.darktag:active) path,:host-context(.darktag:focus) path{fill:#000}:host-context(.minimaltag:active) path,:host-context(.minimaltag:focus) path{fill:#000}:host-context(.bootstraptag:active) path,:host-context(.bootstraptag:focus) path{fill:#fff}:host-context(.bootstrap3-info){height:inherit}:host-context(.bootstrap3-info) path{fill:#fff}\"]\n            },] },\n];\nvar optionsProvider = new OptionsProvider();\nvar TagInputModule = /** @class */ (function () {\n    function TagInputModule() {\n    }\n    TagInputModule.withDefaults = function (options) {\n        optionsProvider.setOptions(options);\n    };\n    return TagInputModule;\n}());\nTagInputModule.decorators = [\n    { type: NgModule, args: [{\n                imports: [\n                    CommonModule,\n                    ReactiveFormsModule,\n                    FormsModule,\n                    Ng2DropdownModule\n                ],\n                declarations: [\n                    TagInputComponent,\n                    DeleteIconComponent,\n                    TagInputForm,\n                    TagComponent,\n                    HighlightPipe,\n                    TagInputDropdown,\n                    TagRipple\n                ],\n                exports: [\n                    TagInputComponent,\n                    DeleteIconComponent,\n                    TagInputForm,\n                    TagComponent,\n                    HighlightPipe,\n                    TagInputDropdown,\n                    TagRipple\n                ],\n                providers: [\n                    DragProvider,\n                    { provide: COMPOSITION_BUFFER_MODE, useValue: false },\n                ]\n            },] },\n];\n\nexport { TagInputModule, TagInputDropdown, DeleteIconComponent, TagInputForm, TagRipple, TagComponent, TagInputComponent, animations as ɵb, TagInputAccessor as ɵa, HighlightPipe as ɵd, DragProvider as ɵc };\n//# sourceMappingURL=ngx-chips.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ngx-chips/esm5/ngx-chips.js\n// module id = null\n// module chunks = ","import { GeoCountryItem, GeoListItem, GeoRegionItem } from \"./sampled-traffc.model\";\n\nexport function isGeoCountryItem(v: GeoListItem): v is GeoCountryItem { return !!v && 'countryCode' in v; }\nexport function isGeoRegionItem(v: GeoListItem): v is GeoRegionItem { return !!v && 'countryCode' in v && 'regionId' in v && 'subdivCode' in v; }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/model/sampled-traffc.model.util.ts","var isObject = function (obj) { return obj && typeof obj === 'object'; };\nexport function mergeDeep(target, source) {\n    if (!isObject(target) || !isObject(source))\n        return source;\n    Object.keys(source)\n        .forEach(function (k) {\n        var key = k;\n        var sourceValue = source[key];\n        var targetValue = target[key];\n        if (Array.isArray(targetValue) && Array.isArray(sourceValue))\n            target[key] = targetValue.concat(sourceValue);\n        else if (isObject(targetValue) && isObject(sourceValue))\n            target[key] = mergeDeep(Object.assign(Object.create(null), targetValue), sourceValue);\n        else\n            target[key] = sourceValue;\n    });\n    return target;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@bradmax/player-util/dist/es/config/merger.js\n// module id = null\n// module chunks = ","/** Coerces a data-bound value (typically a string) to a number. */\nexport function coerceNumberProperty(value: any): number;\nexport function coerceNumberProperty<D>(value: any, fallback: D): number | D;\nexport function coerceNumberProperty(value: any, fallbackValue = 0) {\n\treturn _isNumberValue(value) ? Number(value) : fallbackValue;\n}\n\nexport function _isNumberValue(value: any): boolean {\n\t// parseFloat(value) handles most of the cases we're interested in (it treats null, empty string,\n\t// and other non-number values as NaN, where Number just uses 0) but it considers the string\n\t// '123hello' to be a valid number. Therefore we also check if Number(value) is NaN.\n\treturn !isNaN(parseFloat(value as any)) && !isNaN(Number(value));\n}\n\n/** Coerces a data-bound value (typically a string) to a boolean. */\nexport type BooleanInput = string | boolean | null | undefined;\nexport function coerceBooleanProperty(value: any): boolean {\n\treturn value != null && `${value}` !== 'false';\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/util/coercion.ts","import { Inject, Injectable } from '@angular/core';\nimport { LocaleService, TranslationService } from 'angular-l10n';\nimport moment from 'moment';\n\nimport { UrlService } from './../service/url.service';\nimport { AppConfig } from './app.config';\nimport { AppConfigModel } from './app.model';\n\n\n// AoT compilation requires a reference to an exported function.\nexport function initLocalization(localizationConfig: LocalizationConfig): Function {\n\treturn () => localizationConfig.load();\n}\n\n// Advanced initialization.\n@Injectable()\nexport class LocalizationConfig {\n\n\tprivate langs = [`en`, `pl`];\n\tprivate jsonCtx = require.context('./../../assets/i18n', true, /(pl|en)\\.json/);\n\n\tconstructor(\n\t\t@Inject(AppConfig) private config: AppConfigModel,\n\t\tprivate url: UrlService,\n\t\tprivate locale: LocaleService,\n\t\tprivate translation: TranslationService) { }\n\n\tload(): Promise<any> {\n\t\t/// localization\n\t\tthis.locale.addConfiguration()\n\t\t\t.addLanguages(this.config.languages)\n\t\t\t.setCookieExpiration(30)\n\t\t\t.defineDefaultLocale(this.config.default.language, this.config.default.country);\n\t\tthis.locale.init();\n\n\t\t/// translation\n\t\tvar availableTranslations = {};\n\t\tthis.jsonCtx.keys().forEach(k => {\n\t\t\tavailableTranslations[k] = k\n\t\t});\n\n\t\tvar tc = this.translation.addConfiguration();\n\t\tthis.config.providers.forEach(\n\t\t\tproviderName => this.langs.forEach(\n\t\t\t\tlang => {\n\t\t\t\t\tlet filename = './' + providerName.replace(/^i18n\\//, '') + lang + '.json';\n\t\t\t\t\tif(filename in availableTranslations) {\n\t\t\t\t\t\tlet trans = this.jsonCtx(filename);\n\t\t\t\t\t\ttc.addTranslation(lang, trans);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t);\n\n\t\tlet promise: Promise<any> = new Promise((resolve: any) => this.translation.translationChanged.subscribe(() => {\n\n\t\t\t// setup locale from config\n\t\t\tthis.locale.setDefaultLocale(this.config.default.language, this.config.default.country);\n\n\t\t\t// setup moment locale globally\n\t\t\tmoment.locale(this.locale.getDefaultLocale());\n\n\t\t\tresolve(true);\n\t\t}));\n\t\tthis.translation.init();\n\n\t\treturn promise;\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/app/app.localization.ts","/**\n * Created by mthk on 17/09/16.\n */\n\nexport enum DropdownListDirection { down , up }\n\nexport type DropdownModel = {\n\tvalue: any;\n\tlabel: string;\n\tcolor?: string;\n\ttextColor?: string;\n\ticon?: string;\n\tselected?: boolean;\n\tmarkSelected?:boolean; // for multiple selection\n\thasSeparatorBelow?:boolean; // for organizing items in groups.\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/dropdown/dropdown.model.ts","/**\n * Created by mthk on 25/05/16.\n */\nimport {Component, ChangeDetectionStrategy} from '@angular/core';\n\n@Component({\n    selector: 'view-to-top',\n\thost: {\n\t\t'data-click': 'scroll-top',\n\t\t'class': 'btn btn-icon btn-circle btn-success btn-scroll-to-top fade'\n\t},\n    template: '<i class=\"fa fa-angle-up\"></i>',\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class ViewToTop {}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/components/to.top.component.ts","/**\n * Created by mthk on 05/10/16.\n */\nimport {ViewToTop} from './to.top.component';\n\nexport const VIEW_COMPONENTS = [\n\tViewToTop\n];\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/components/index.ts","/**\n * Created by mthk on 05/08/16.\n */\nimport {Injectable} from '@angular/core';\nimport {CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport {AuthService} from './auth.service';\n\n@Injectable()\nexport class AuthGuard implements CanActivate {\n\t//\n\tconstructor(private auth: AuthService, private router: Router) {}\n\t//\n\tcanActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n\t\t//console.info('AuthGuard: can Activate ?', this.auth.logged);\n\t\tif (this.auth.logged)\n\t\t\treturn true;\n\t\tthis.auth.redirectUrl = state.url;\n\t\tconsole.warn('AuthGuard: do login first, and then redirect to ' + this.auth.redirectUrl + ' !');\n\t\tthis.router.navigate(['login']);\n\t\treturn false;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/auth.guard.service.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\n\nconst SHARED_MODULES: any[] = [\n\tHttpModule,\n\tCommonModule,\n\tFormsModule,\n];\n\n@NgModule({\n\timports: [SHARED_MODULES],\n\texports: [SHARED_MODULES]\n})\n\nexport class SharedModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/app/shared/shared.module.ts","import { Component, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { Router, Route, ActivatedRoute, UrlSegment } from '@angular/router';\nimport { Localization, LocaleService, TranslationService } from 'angular-l10n';\nimport { TabService } from '../../service/tab.service';\nimport { SharedModule } from '../../app/shared/shared.module';\n\nexport interface Tab {\n    id: number;\n    active: boolean;\n    title: string;\n    route: any;\n}\n\n@Component({\n    selector: 'account-view',\n    template: require('./account.view.html'),\n    styles: [require('./account.view.scss')],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AccountView extends Localization {\n    tabs: Tab[];\n    private currentTabIndex: number;\n    //\n    constructor(private router: Router,\n        private cdr: ChangeDetectorRef,\n        public tabService: TabService,\n        public locale: LocaleService,\n        public translation: TranslationService) {\n        super(locale, translation);\n        this.configureTabs();\n        this.tabService.onNavigatedTo$.subscribe((tabId: number) => this.selectTab(tabId));\n        this.selectTab(0);\n    }\n\n    private selectTab(tabId: number) {\n        this.tabs.forEach((tab: Tab, index: number) => {\n            if (tab.id == tabId) {\n                tab.active = true;\n                this.currentTabIndex = index;\n            }\n            else\n                tab.active = false;\n        });\n        this.cdr.markForCheck();\n    }\n    \n    private configureTabs(): void {\n        let subscriptionTab: Tab = {\n            id: 0,\n            active: false,\n            title: this.translation.translate('ACCOUNT.SUBSCRIPTIONS.TITLE'),\n            route: ['admin', 'account', 'subscriptions']\n        };\n        let detailsTab: Tab = {\n            id: 1,\n            active: false,\n            title: this.translation.translate('ACCOUNT.DETAILS.TITLE'),\n            route: ['admin', 'account', 'details']\n        };\n        let receiptsTab: Tab = {\n            id: 2,\n            active: false,\n            title: this.translation.translate('ACCOUNT.INVOICES.TITLE'),\n            route: ['admin', 'account', 'invoices']\n        };\n        let paymentsTab: Tab = {\n            id: 3,\n            active: false,\n            title: this.translation.translate('ACCOUNT.PAYMENTS.TITLE'),\n            route: ['admin', 'account', 'payments']\n        };\n        this.tabs = [detailsTab, subscriptionTab, receiptsTab, paymentsTab];\n    }\n    \n    private onTabClick(tabIndex: number): void {\n        if (this.currentTabIndex == tabIndex)\n            return;\n        this.currentTabIndex = tabIndex;\n        this.tabs.forEach((tab: Tab) => {\n            tab.active = false;\n        });\n        this.tabs[tabIndex].active = true;\n        this.router.navigate(this.tabs[tabIndex].route);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/account.view.ts","import { Observable } from 'rxjs/Observable';\nimport { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { BradmaxApi } from './api.service';\nimport { BtClientToken } from '../model/api.model';\nimport { UrlService } from './url.service';\n\n@Injectable()\nexport class BraintreeService extends BradmaxApi {\n\n    constructor(\n        protected auth: AuthService,\n        protected http: Http,\n        protected exception: ExceptionService,\n        protected router: Router,\n        protected url: UrlService) {\n        super(auth, http, exception, router, url);\n    }\n\n    getClientToken(accountId: number): Observable<BtClientToken> {\n        return super.read('accounts/' + accountId + '/bt-client-token');\n    }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/braintree.service.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\n\nimport { AccountService } from '../../../service/account.service';\nimport { BraintreeService } from '../../../service/braintree.service';\nimport { PaymentsService } from '../../../service/payments.service';\nimport { UserService } from '../../../service/user.service';\nimport { ProductService } from '../../../service/product.service';\nimport { AccountSubscriptionsView } from './account.subscriptions.view';\n\n@Injectable()\nexport class AccountSubscriptionsResolver implements Resolve<AccountSubscriptionsView> {\n\n    constructor(private account: AccountService, \n        private user: UserService, \n        private products: ProductService, \n        private paymentsService: PaymentsService, \n        private bt: BraintreeService) { }\n\n    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {\n        //console.log('> AccountSubscriptionsResolver.resolved');\n        // Perform request for account details. And after taking response return 4 items:\n        // - accountResponse\n        // - products list\n        // - payments list\n        // - bt_client_token or null (do not ask for bt_client_token, when user has no defined account details)\n        if (this.user.accountId == null)\n             return;\n        \n        return this.account.get(this.user.accountId).flatMap(accountResponse => {\n            // Prepare btClientToken - Observable holding null or existing object.\n            let btClientToken: Observable<any> = Observable.of(null);\n\n            if (this.user.accountId == null)\n                return btClientToken;\n\n            if (accountResponse.details) {\n                btClientToken = this.bt.getClientToken(this.user.accountId);\n            }\n\n            // Continue chain - return 4 items after joining responses.\n            return Observable.forkJoin(\n                // Pass account.\n                Observable.of(accountResponse),\n                // Perform requests.\n                this.products.getProductsForAccount(this.user.accountId, 1),\n                this.paymentsService.getPaymentMethods(this.user.accountId),\n                // Pass account or null object depending on account.details.\n                btClientToken);\n        });\n    }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/subscriptions/account.subscriptions.resolver.ts","import {\n    Component, OnInit, AfterViewInit, ChangeDetectionStrategy,\n    ChangeDetectorRef, EventEmitter, ViewChild, ViewContainerRef, SimpleChanges\n} from '@angular/core';\n\nlet HTML = `\n                <div class=\"content\">\n                    <div class=\"pm-modal\">\n                        <div type=\"button\" class=\"fa fa-times close-btn\" (click)=\"close()\"></div>\n                        <h4>{{'ACCOUNT_SUBS.PM_MODAL.TITLE' | translate:lang}}</h4>\n                        <form #paymentForm=\"ngForm\" id=\"paymentForm\" method=\"post\" class=\"well\">\n                            <div id=\"payment-container\"></div>    \n                        </form>\n                        <button *ngIf=\"braintreeDropInReady\" class=\"btn btn-success fadeIn\" type=\"submit\" form=\"paymentForm\"><i class=\"fa fa-check\"></i> {{'ACCOUNT_SUBS.PM_MODAL.SUBMIT_BUTTON' | translate:lang}}</button>\n                        <button type=\"button\" class=\"btn btn-danger\" (click)=\"close()\"><i class=\"fa fa-times\"></i> {{'ACCOUNT_SUBS.PM_MODAL.CANCEL' | translate:lang}}</button>\n                    </div>\n                </div>`;\n\nlet STYLES = [\n    ':host{display: none;position: fixed;top: 0;bottom: 0;left: 0;right: 0;width: 100%;height: 100%;'\n    + 'z-index: 9998;background: rgba(0, 0, 0, 0.5);}',\n    ':host.active {display: table;}',\n    ':host .content {position: relative;display: table-cell;vertical-align: middle;margin: auto; background:rgba(0, 0, 0, 0.5);}',\n    ':host .close {position: absolute;top: 5px;left: 5px;}',\n    ':host .pm-modal {max-width:400px;max-height:300px; background:#fff;margin: auto;text-align: center;padding: 20px;}',\n    ':host .close-btn {float: right;cursor: pointer;opacity: 0.75;margin-top:-10px;margin-right:-10px;}',\n    ':host .close-btn:hover {opacity: 1;}',\n    ':host .well {padding:0}'\n];\n\n@Component({\n    selector: 'pmModal',\n    host: { '[class.active]': 'active', '(click)': 'click($event.target)' },\n    template: HTML,\n    styles: STYLES,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    inputs: ['btClientToken', 'active'],\n    outputs: ['onPaymentNonceReceived', 'onCloseModal'],\n})\nexport class PaymentMethodsPickerModal {\n    onPaymentNonceReceived = new EventEmitter<string>();\n    onCloseModal = new EventEmitter();\n    active = false;\n    braintreeDropInReady = false;\n    constructor(public cdr: ChangeDetectorRef) { }\n    //\n    click(e: Element) {\n        if (this.active == true && e.className.indexOf('content') > -1)\n            this.close();\n    }\n    //\n    private close() {\n        if (this.active == true) {\n            this.active = false;\n            this.onCloseModal.emit();\n            this.cdr.markForCheck();\n        }\n    }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/subscriptions/paymentPicker.modal.ts","import { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { Subscription } from 'rxjs/Subscription';\nimport { Injectable } from '@angular/core';\nimport { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { AccountInvoicesView } from './account.invoices.view';\nimport { UserService } from '../../../service/user.service';\nimport { PaymentsService } from '../../../service/payments.service';\n\n@Injectable()\nexport class AccountInvoicesResolver implements Resolve<AccountInvoicesView> {\n\n    constructor(private user: UserService, private payments: PaymentsService) { }\n\n    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {\n        if (this.user.accountId == null)\n            return;\n        //console.log('> AccountReceiptsResolver.resolved');\n        return this.payments.getPaymentTransactions(this.user.accountId);\n\n    }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/invoices/account.invoices.resolver.ts","import { Observable } from 'rxjs/Observable';\nimport { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs/Subject';\n\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { BradmaxApi } from './api.service';\nimport { Country } from '../model/api.model';\nimport { UrlService } from './url.service';\n\n@Injectable()\nexport class CountryService extends BradmaxApi {\n    countries: Array<Country>;\n    //\n    private resolveSource: Subject<Array<Country>>;\n    //\n    constructor(\n        protected auth: AuthService,\n        protected http: Http,\n        protected exception: ExceptionService,\n        protected router: Router,\n        protected url: UrlService) {\n        super(auth, http, exception, router, url);\n    }\n    //\n    getCountries(): Observable<Array<Country>> {\n        this.resolveSource = new Subject<Array<Country>>();\n        super.read('countries').subscribe(\n            (response: Array<Country>) => {\n                this.countries = response;\n                this.resolveSource.next(response);\n            },\n            (error) => this.resolveSource.error(error),\n            () => this.resolveSource.complete()\n        );\n        return this.resolveSource.asObservable();\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/country.service.ts","export class RegexExpressions {\n\n    static emailRegex(): RegExp {\n        return /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/util/regex.util.ts","/**\n * Simple service to hold the validators used thru the app\n */\nimport { RegexExpressions } from '../util/regex.util';\n\nexport class ValidationService {\n    static isValidEmail(value: string): boolean {\n        return RegexExpressions.emailRegex().test(value) ? true : false;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/validation.service.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { FlashMessagesService } from 'angular2-flash-messages';\nimport { Subscription } from 'rxjs';\n\nimport { AccountDetails, SubscriptionOrderResponse, UserRequest, UserResponse } from '../../../model/api.model';\nimport { AccountService } from '../../../service/account.service';\nimport { CountryService } from '../../../service/country.service';\nimport { SubscriptionService } from '../../../service/subscription.service';\nimport { TabService } from '../../../service/tab.service';\nimport { UserService } from '../../../service/user.service';\nimport { ValidationService } from '../../../service/validation.service';\nimport { ViewService } from '../../../service/view.service';\nimport { ModalService } from './../../modal/modal.service';\n\n@Component({\n\tselector: 'account-details',\n\ttemplate: require('./account.details.view.html'),\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tstyles: [\n\t\t':host .form-check-input{width:32px;position:relative;top:-5px;}'\n\t],\n\tinputs: ['showUserForm', 'showCompanyForm', 'userFormEditMode', 'detailsFormEditMode']\n})\nexport class AccountDetailsView extends Localization implements OnInit {\n\n\tuserLoading = false;\n\tcompanyDetailsLoading = false;\n\n\tshowUserForm = true;\n\tshowCompanyForm = true;\n\n\taccountUserForm: FormGroup;\n\taccountDetailsForm: FormGroup;\n\t//set this flag to false if the validation should only be done\n\t//onSubmit and not in the first time the form is created\n\tcanValidate: boolean = true;\n\t//remote errors\n\t//validation errors returned from the server that will be shown in the input controls\n\tuserFormRemoteErrors: UserRequest | null;\n\tdetailsFormRemoteErrors: AccountDetails | null;\n\t//global errors - not specific to a input but something else, returned in the api response\n\t//this can probably be removed, since this errors will be handled somewhere else outside\n\tglobalErrors: Array<string>;\n\n\t//custom errors\n\t//the properties inside this object should have the same name has the validator for the input.component to use it\n\temailErr: any = {\n\t\tvalidateEmail:\n\t\t\tthis.translation.translate('ACCOUNT_DETAILS.FORM.VALIDATION_ERROR.INVALID_FIELD', { field: 'email' })\n\t};\n\n\tuserFormEditMode: boolean = false;\n\tdetailsFormEditMode: boolean = false;\n\t//query parameter sent when navigation was from products.view because the account.details are not valid for billing\n\tplanId: number = NaN;\n\tprivate subscription: Subscription;\n\n\tconstructor(private formBuilder: FormBuilder,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate view: ViewService,\n\t\t// private chat: ChatService,\n\t\tprivate flashMessagesService: FlashMessagesService,\n\t\tprivate modal: ModalService,\n\t\tprivate router: Router,\n\t\tprivate subscriptionService: SubscriptionService,\n\t\tpublic countries: CountryService,\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic user: UserService,\n\t\tpublic account: AccountService,\n\t\tpublic tabService: TabService) {\n\t\tsuper(locale, translation, cdr);\n\n\t\tthis.setAccountUserForm();\n\t\tthis.setAccountDetailsForm();\n\n\t\tthis.clearUserRemoteErrors();\n\t\tthis.clearDetailsRemoteErrors();\n\t}\n\n\tngOnInit() {\n\t\tthis.tabService.onNavigatedTo(1);\n\t\t//If the user navigated here from the products page after selecting a product,\n\t\t//it's because his account details are not valid for invoicing so the planId is passed has a query parameter\n\n\t\tif (!this.userFormEditMode)\n\t\t\tthis.accountUserForm.disable();\n\t\tif (!this.detailsFormEditMode)\n\t\t\tthis.accountDetailsForm.disable();\n\t\tthis.subscription = this.route.params.subscribe((params: any) => {\n\t\t\tthis.planId = +params['plan'];\n\t\t\t//submit the account details form so it shows with the validation errors\n\t\t\tif (this.planId) {\n\t\t\t\tthis.accountDetailsForm.disable();\n\t\t\t\tthis.updateAccountDetails();\n\t\t\t}\n\t\t});\n\t}\n\n\tonUserEditModeChange(start: boolean): void {\n\t\tif (start) {\n\t\t\tthis.accountUserForm.enable();\n\t\t}\n\t\telse {\n\t\t\t//disable form, reset errors and set input values to original values\n\t\t\tthis.accountUserForm.disable();\n\t\t\tthis.clearUserRemoteErrors();\n\t\t\tthis.setAccountUserForm();\n\t\t}\n\t}\n\n\tonDetailsEditModeChange(start: boolean): void {\n\t\tif (start) {\n\t\t\tthis.accountDetailsForm.enable();\n\t\t}\n\t\telse {\n\t\t\t//disable form, reset errors and set input values to original values\n\t\t\tthis.accountDetailsForm.disable();\n\t\t\tthis.clearDetailsRemoteErrors();\n\t\t\tthis.setAccountDetailsForm();\n\t\t}\n\t}\n\n\tonUserFormSubmit() {\n\t\t//clean remote errors\n\t\tthis.clearUserRemoteErrors();\n\t\tthis.canValidate = true;\n\t\tif (this.accountUserForm.valid) {\n\t\t\tthis.userLoading = true;\n\t\t\tthis.accountUserForm.disable();\n\t\t\tthis.updatedUserDetails();\n\t\t}\n\t}\n\n\tonAccountDetailsFormSubmit() {\n\t\t//clean remote errors\n\t\tthis.clearDetailsRemoteErrors();\n\t\tthis.canValidate = true;\n\t\tif (this.accountDetailsForm.valid) {\n\t\t\tthis.companyDetailsLoading = true;\n\t\t\tthis.accountDetailsForm.disable();\n\t\t\tthis.updateAccountDetails();\n\t\t}\n\t}\n\n\tprivate updatedUserDetails(): void {\n\t\tlet userRequest: UserRequest = {\n\t\t\tfirst_name: this.accountUserForm.controls['first_name'].value,\n\t\t\tlast_name: this.accountUserForm.controls['last_name'].value,\n\t\t\temail: this.accountUserForm.controls['email'].value,\n\t\t\thas_gdpr_info_shown: this.user.hasGdprInfoShown,\n\t\t\thas_agree_for_newsletter: this.accountUserForm.controls['has_agree_for_newsletter'].value\n\t\t};\n\t\tthis.user.updateUser(userRequest).subscribe(\n\t\t\t(response: UserResponse) => {\n\t\t\t\t//Update chat name and email\n\t\t\t\tthis.flashMessagesService.show(\n\t\t\t\t\tthis.translation.translate('ACCOUNT_DETAILS.FORM.SUBMIT_SUCCESS'),\n\t\t\t\t\t{ cssClass: 'alert-success', timeout: 3000 }\n\t\t\t\t);\n\t\t\t},\n\t\t\t(error: any) => {\n\t\t\t\tif (error.errors) {\n\t\t\t\t\t//set remote validation errors\n\t\t\t\t\tthis.mapUserRemoteErrors(error.errors);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t//TODO - in case of server errors(not validation errors) show notification popup/window\n\t\t\t\t}\n\t\t\t\tthis.accountUserForm.enable();\n\t\t\t\tthis.userLoading = false;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.userLoading = false;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate updateAccountDetails(): void {\n\t\tlet accountRequest: AccountDetails = {\n\t\t\taddress: this.accountDetailsForm.controls['address'].value,\n\t\t\tcity: this.accountDetailsForm.controls['city'].value,\n\t\t\tcompany_name: this.accountDetailsForm.controls['company_name'].value,\n\t\t\ttax_no: this.accountDetailsForm.controls['tax_no'].value,\n\t\t\t//the country select control has a default value with 'default' that is not valid\n\t\t\t//- if selected means the user didn't pick a country\n\t\t\tcountry: this.accountDetailsForm.controls['country'].value != 'default'\n\t\t\t\t? this.accountDetailsForm.controls['country'].value : null,\n\t\t\tphone_number: this.accountDetailsForm.controls['phone_number'].value,\n\t\t\tpostal_code: this.accountDetailsForm.controls['postal_code'].value,\n\t\t\tstate: this.accountDetailsForm.controls['state'].value\n\t\t};\n\t\tif (this.user.accountId)\n\t\t\tthis.account.updateAccount(this.user.accountId, accountRequest).subscribe(\n\t\t\t\t(response: AccountDetails) => {\n\t\t\t\t\t//Show success flash message\n\t\t\t\t\tthis.flashMessagesService.show(\n\t\t\t\t\t\tthis.translation.translate('ACCOUNT_DETAILS.FORM.SUBMIT_SUCCESS'),\n\t\t\t\t\t\t{ cssClass: 'alert-success', timeout: 3000 }\n\t\t\t\t\t);\n\t\t\t\t\t//If there is a plan query parameter, show popup to navigate to subscription page after successfull\n\t\t\t\t\t// account details post\n\t\t\t\t\tif (this.planId && this.planId > 0) {\n\t\t\t\t\t\tthis.modal.prompt(this.translation.translate('ACCOUNT_DETAILS.MESSAGE.ACCOUNT_READY'), [{\n\t\t\t\t\t\t\tlabel: this.translation.translate('ACCOUNT_DETAILS.BUTTON.CONTINUE'),\n\t\t\t\t\t\t\tfa: 'check', classes: ['test-css-class'],\n\t\t\t\t\t\t\tclose: true, click: () => {\n\t\t\t\t\t\t\t\t//Navigate to account details view\n\t\t\t\t\t\t\t\t//this.router.navigate(['admin', 'subscription', this.planId]);\n\t\t\t\t\t\t\t\tthis.createSubscriptionOrderAction(this.planId);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: this.translation.translate('ACCOUNT_DETAILS.BUTTON.CLOSE'),\n\t\t\t\t\t\t\tfa: 'ban', classes: ['test-css-class'], close: true, click: () => {\n\t\t\t\t\t\t\t\tthis.planId = NaN;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t(error: any) => {\n\t\t\t\t\tthis.companyDetailsLoading = false;\n\t\t\t\t\tif (error.errors) {\n\t\t\t\t\t\t//set remote validation errors\n\t\t\t\t\t\tthis.mapDetailsRemoteErrors(error.errors);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t//TODO - in case of server errors(not validation errors) show notification popup/window\n\t\t\t\t\t}\n\t\t\t\t\tthis.accountDetailsForm.enable();\n\t\t\t\t\t//this.view.spinner(false);\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t},\n\t\t\t\t//COMPLETE\n\t\t\t\t() => {\n\t\t\t\t\tthis.companyDetailsLoading = false;\n\t\t\t\t\t//this.view.spinner(false);\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t);\n\t}\n\t//\n\tprivate createSubscriptionOrderAction(planId: number) {\n\t\tif (this.user.accountId) {\n\t\t\tthis.view.spinner(true);\n\t\t\tthis.subscriptionService.createSubscriptionOrder(this.user.accountId, planId).subscribe(\n\t\t\t\t(data: SubscriptionOrderResponse) => {\n\t\t\t\t\tthis.view.spinner(false);\n\t\t\t\t\tthis.router.navigate(['admin', 'subscription', data.id]);\n\n\t\t\t\t},\n\t\t\t\t(error) => {\n\t\t\t\t\tconsole.error('POST.SubscriptionOder ERROR', error);\n\t\t\t\t\tthis.view.spinner(false);\n\t\t\t\t\t//this.flashMessagesService\n\t\t\t\t\t//.show('An error occurred. Please try again.', { cssClass: 'alert-warning' });\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\t//\n\tprivate setAccountUserForm() {\n\t\tthis.accountUserForm = this.formBuilder.group({\n\t\t\tfirst_name: [this.user.firstName/*, Validators.required*/],\n\t\t\tlast_name: [this.user.lastName],\n\t\t\temail: [this.user.email, Validators.compose([\n\t\t\t\t/*Validators.required,*/\n\t\t\t\tthis.validateEmail\n\t\t\t])],\n\t\t\thas_agree_for_newsletter: [this.user.hasAgreeForNewsletter]\n\t\t});\n\t\tthis.accountUserForm.statusChanges.subscribe(\n\t\t\t() => {\n\t\t\t\tthis.userFormEditMode = this.accountUserForm.status !== 'DISABLED' ? true : false;\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate setAccountDetailsForm() {\n\t\tif (this.account.account)\n\t\t\tthis.accountDetailsForm = this.formBuilder.group({\n\t\t\t\tcompany_name: [this.account.companyName],\n\t\t\t\ttax_no: [this.account.account.details ? this.account.account.details.tax_no : null],\n\t\t\t\tcountry: [this.account.account.details ? this.account.account.details.country : 'default'],\n\t\t\t\tcity: [this.account.account.details ? this.account.account.details.city : null],\n\t\t\t\tstate: this.account.account.details ? this.account.account.details.state : null,\n\t\t\t\taddress: [this.account.account.details ? this.account.account.details.address : null],\n\t\t\t\tphone_number: this.account.account.details ? this.account.account.details.phone_number : null,\n\t\t\t\tpostal_code: [this.account.account.details ? this.account.account.details.postal_code : null]\n\t\t\t});\n\t\tthis.accountDetailsForm.statusChanges.subscribe(() => {\n\t\t\tthis.detailsFormEditMode = this.accountDetailsForm.status !== 'DISABLED' ? true : false;\n\t\t});\n\t}\n\n\tprivate mapUserRemoteErrors(res: any) {\n\t\t//Iterates over the error keys and checks if that key exists as a property of the UserAccountFormModel\n\t\t//if the key does not exist in the UserAccountFormModel object than add the error to the globalErrors\n\t\tif (res) {\n\t\t\tthis.clearUserRemoteErrors();\n\t\t\tthis.globalErrors = new Array<string>();\n\t\t\tObject.keys(res).forEach(key => {\n\t\t\t\tif (this.userFormRemoteErrors && this.userFormRemoteErrors.hasOwnProperty(key)) {\n\t\t\t\t\tif (Array.isArray(res[key]))\n\t\t\t\t\t\tres[key].forEach((err: string) => {\n\t\t\t\t\t\t\tif (this.userFormRemoteErrors) {\n\t\t\t\t\t\t\t\t//add line break between error\n\t\t\t\t\t\t\t\tif (this.userFormRemoteErrors[key])\n\t\t\t\t\t\t\t\t\tthis.userFormRemoteErrors[key] = this.userFormRemoteErrors[key]\n\t\t\t\t\t\t\t\t\t\t+ '&#013;&#010;' + err;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tthis.userFormRemoteErrors[key] = err;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.userFormRemoteErrors[key] = res[key];\n\t\t\t\t}\n\t\t\t\t//Errors to show in an additional area above the form or on the notification popup/message\n\t\t\t\telse this.globalErrors.push(res[key]);\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate mapDetailsRemoteErrors(res: any) {\n\t\t//Iterates over the error keys and checks if that key exists as a property of the UserAccountFormModel\n\t\t//if the key does not exist in the UserAccountFormModel object than add the error to the globalErrors\n\t\tif (res) {\n\t\t\tthis.clearDetailsRemoteErrors();\n\t\t\tthis.globalErrors = new Array<string>();\n\t\t\tObject.keys(res).forEach(key => {\n\t\t\t\tif (this.detailsFormRemoteErrors && this.detailsFormRemoteErrors.hasOwnProperty(key)) {\n\t\t\t\t\tif (Array.isArray(res[key]))\n\t\t\t\t\t\tres[key].forEach((err: string) => {\n\t\t\t\t\t\t\tif (this.detailsFormRemoteErrors) {\n\t\t\t\t\t\t\t\t//add line break between error\n\t\t\t\t\t\t\t\tif (this.detailsFormRemoteErrors[key])\n\t\t\t\t\t\t\t\t\tthis.detailsFormRemoteErrors[key] =\n\t\t\t\t\t\t\t\t\t\tthis.detailsFormRemoteErrors[key] + '&#013;&#010;' + err;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tthis.detailsFormRemoteErrors[key] = err;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.detailsFormRemoteErrors[key] = res[key];\n\t\t\t\t}\n\t\t\t\t//Errors to show in an additional area above the form or on the notification popup/message\n\t\t\t\telse this.globalErrors.push(res[key]);\n\t\t\t});\n\t\t}\n\t}\n\t//VALIDATORS\n\tprivate validateEmail(c: FormControl) {\n\t\treturn ValidationService.isValidEmail(c.value) ? null : { validateEmail: { valid: false } };\n\t}\n\n\tprivate clearUserRemoteErrors(): void {\n\t\tthis.userFormRemoteErrors = {\n\t\t\temail: null,\n\t\t\tfirst_name: null,\n\t\t\tlast_name: null,\n\t\t\thas_gdpr_info_shown: null,\n\t\t\thas_agree_for_newsletter: null\n\t\t};\n\t}\n\n\tprivate clearDetailsRemoteErrors(): void {\n\t\tthis.detailsFormRemoteErrors = {\n\t\t\taddress: null,\n\t\t\tcity: null,\n\t\t\tcompany_name: null,\n\t\t\tcountry: null,\n\t\t\tphone_number: null,\n\t\t\tpostal_code: null,\n\t\t\tstate: null,\n\t\t\ttax_no: null\n\t\t};\n\t}\n\n\tprivate onPasswordChangeClick(): void {\n\t\tthis.modal.passwordChange();\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/details/account.details.view.ts","import { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { Subscription } from 'rxjs/Subscription';\nimport { Injectable } from '@angular/core';\nimport { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { AccountDetailsView } from './account.details.view';\nimport { UserService } from '../../../service/user.service';\nimport { AccountService } from '../../../service/account.service';\nimport { CountryService } from '../../../service/country.service';\n\n@Injectable()\nexport class AccountDetailsResolver implements Resolve<AccountDetailsView> {\n\n    constructor(private account: AccountService, private user: UserService, private countries: CountryService) { }\n\n    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {\n        if (this.user.accountId == null)\n            return;\n        //console.log('> AccountResolver.resolved');\n        return Observable.forkJoin(\n            this.account.get(this.user.accountId),\n            this.countries.getCountries());\n    }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/details/account.details.resolver.ts","import { Component, Input, OnChanges } from '@angular/core';\nimport { TranslationService } from 'angular-l10n';\n\n@Component({\n    selector: 'extended-input',\n    template: `<div class=\"form-group\" [ngClass]=\"{'has-error':errorMessageToDisplay}\"> \n                    <label class=\"col-md-2 control-label\"> {{labelText}} \n                        <i *ngIf=\"toolText\" class=\"fa fa-info-circle\" rel=\"tooltip\" [title]=\"toolText\"></i>\n                    </label>\n                    \n                    <div class=\"col-md-10\">\n                        <ng-content></ng-content>\n                        <span class=\"help-block\" *ngIf=\"errorMessageToDisplay\"> {{errorMessageToDisplay}} </span>\n                    </div>\n               </div>\n              `\n})\nexport class ExtendedInput implements OnChanges {\n    @Input()\n    labelText: string = '';\n    @Input()\n    inputErrors: any;\n    @Input()\n    canValidate: boolean;\n    @Input()\n    customError: any;\n    @Input()\n    remoteError: string;\n    @Input()\n    toolText: string;\n\n    errorMessageToDisplay: string;\n    genericErrorMessages: any = {\n        required: this.translation.translate('ACCOUNT.FORM.VALIDATION_ERROR.REQUIRED'),\n        pattern: this.translation.translate('ACCOUNT.FORM.VALIDATION_ERROR.INVALID'),\n        unknown: this.translation.translate('ACCOUNT.FORM.VALIDATION_ERROR.INVALID')\n    };\n\n    constructor(private translation: TranslationService) { }\n\n    ngOnChanges(changes: any): void {\n        this.errorMessageToDisplay = '';\n        //If canValidate is false dont show error messages\n        if (!this.canValidate)\n            return;\n\n        if (this.remoteError) {\n            this.errorMessageToDisplay = this.remoteError;\n            return;\n        }\n\n        let errors: any = this.inputErrors;\n        if (errors) {\n            Object.keys(errors).some(key => {\n                //Search custom error messages first\n                if (this.customError && this.customError[key]) {\n                    this.errorMessageToDisplay = this.customError[key];\n                    return true;\n                }\n                //Search generic error messages if no custom was found\n                if (this.genericErrorMessages[key]) {\n                    this.errorMessageToDisplay = this.genericErrorMessages[key];\n                    return true;\n                }\n                return false;\n            });\n\n            //If no error message was found in custom or generic, display invalid message\n            if (!this.errorMessageToDisplay || this.errorMessageToDisplay === '') {\n                this.errorMessageToDisplay = this.genericErrorMessages['unknown'];\n            }\n        }\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/details/input.component.ts","import { Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Localization, LocaleService, TranslationService } from 'angular-l10n';\nimport { TabService } from '../../../service/tab.service';\nimport { PaymentsService } from '../../../service/payments.service';\nimport { UserService } from '../../../service/user.service';\nimport { PaymentMethodsList, PaymentMethod } from '../../../model/api.model';\nimport { FlashMessagesService } from 'angular2-flash-messages';\nimport { ModalService } from './../../modal/modal.service';\nimport { ViewService } from '../../../service/view.service';\n\ninterface PaymentMethodForEdit extends PaymentMethod {\n    serverValidation: {\n        cvv: boolean;\n        expiration_date: boolean;\n        other: string | null;\n    };\n    loading: boolean;\n    make_default: boolean;\n}\n\n@Component({\n    selector: 'account-payments',\n    template: require('./account.payments.view.html')\n})\nexport class AccountPaymentsView extends Localization implements OnInit {\n    paymentMethods: PaymentMethodsList;\n    paymentOnEdit: PaymentMethodForEdit | null;\n    braintreeOnTeardown = false;\n    braintreeClientToken: string;\n    constructor(\n        private route: ActivatedRoute,\n        private tabService: TabService,\n        private paymentsService: PaymentsService,\n        private userService: UserService,\n        private modal: ModalService,\n        private view: ViewService,\n        private flashMessagesService: FlashMessagesService,\n        public locale: LocaleService,\n        public translation: TranslationService,\n        public cdr: ChangeDetectorRef) {\n        super(locale, translation);\n        //get data from PaymentsResolver\n        this.route.data.subscribe((data: any) => {\n            if (data && data.account) {\n                this.paymentMethods = data.account[1];\n                if (data.account[2])\n                    this.braintreeClientToken = data.account[2].bt_client_token;\n            }\n        });\n    }\n    //\n    ngOnInit() {\n        this.tabService.onNavigatedTo(3);\n    }\n    onCardEditSubmit(): void {\n        if (this.paymentOnEdit) {\n            this.paymentOnEdit.loading = true;\n            this.cdr.detectChanges();\n        }\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/payments/account.payments.view.ts","import { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { Subscription } from 'rxjs/Subscription';\nimport { Injectable } from '@angular/core';\nimport { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { AccountPaymentsView } from './account.payments.view';\nimport { AccountService } from '../../../service/account.service';\nimport { UserService } from '../../../service/user.service';\nimport { PaymentsService } from '../../../service/payments.service';\nimport { BraintreeService } from '../../../service/braintree.service';\n\n@Injectable()\nexport class AccountPaymentsResolver implements Resolve<AccountPaymentsView> {\n\n    constructor(private account: AccountService, \n        private user: UserService, \n        private payments: PaymentsService,\n         private bt: BraintreeService) { }\n\n    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {\n        //console.log('> AccountPaymentsResolver.resolved');\n        if (this.user.accountId == null)\n            return;\n        // Perform request for account details. And after taking response return 3 items:\n        // - accountResponse\n        // - payment methods list\n        // - bt_client_token or null (do not ask for bt_client_token, when user has no defined account details)\n        return this.account.get(this.user.accountId).flatMap(accountResponse => {\n            // Prepare btClientToken - Observable holding null or existing object.\n            let btClientToken: Observable<any> = Observable.of(null);\n\n            if (this.user.accountId == null)\n                return btClientToken;\n            \n            if (accountResponse.details) {\n                btClientToken = this.bt.getClientToken(this.user.accountId);\n            }\n\n            // Continue chain - return 3 items after joining responses.\n            return Observable.forkJoin(\n                // Pass account.\n                Observable.of(accountResponse),\n                // Perform requests.\n                this.payments.getPaymentMethods(this.user.accountId),\n                // Pass account or null object depending on account.details.\n                btClientToken);\n        });\n    }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/payments/account.payments.resolver.ts","import { Injectable } from '@angular/core';\nimport { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\nimport { AccountPaymentsView } from './account.payments.view';\n\n@Injectable()\nexport class AccountPaymentsGuard implements CanDeactivate<AccountPaymentsView> {\n\n    constructor() { }\n\n    canDeactivate(component: AccountPaymentsView, route: ActivatedRouteSnapshot, state: RouterStateSnapshot):\n        Observable<boolean> | Promise<boolean> | boolean {\n        //console.log('AccountPaymentsView.CanDeactivate');\n        return true;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/payments/account.payments.guard.ts","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { SharedModule } from '../../app/shared/shared.module';\nimport { PaymentsService } from '../../service/payments.service';\nimport { SubscriptionService } from '../../service/subscription.service';\nimport { ProductService } from '../../service/product.service';\nimport { TabService } from '../../service/tab.service';\nimport {\n\tAccountDetailsResolver,\n\tAccountDetailsView,\n\tAccountInvoicesResolver,\n\tAccountInvoicesView,\n\tAccountPaymentsGuard,\n\tAccountPaymentsResolver,\n\tAccountPaymentsView,\n\tAccountSubscriptionsResolver,\n\tAccountSubscriptionsView,\n\tAccountView,\n\tPaymentMethodsPickerModal,\n} from './';\nimport { ExtendedInput } from './details/input.component';\n\n//Services\nexport const AccountRoutes: Routes = [\n\t{ path: 'subscriptions', component: AccountSubscriptionsView, resolve: { account: AccountSubscriptionsResolver } },\n\t{ path: 'details', component: AccountDetailsView, resolve: { account: AccountDetailsResolver } },\n\t{ path: 'invoices', component: AccountInvoicesView, resolve: { account: AccountInvoicesResolver } },\n\t{\n\t\tpath: 'payments',\n\t\tcomponent: AccountPaymentsView,\n\t\tresolve: { account: AccountPaymentsResolver },\n\t\tcanDeactivate: [AccountPaymentsGuard]\n\t},\n\t{ path: 'invoices', component: AccountInvoicesView, resolve: { account: AccountInvoicesResolver } },\n\t// @FIX: Temporary fix. Disabling subscription page as default page, because braintree payments are temporary no available.\n\t{ path: '', redirectTo: 'details', pathMatch: 'full' },\n\t{ path: '**', redirectTo: 'details' }\n];\n\nlet LOCAL_PROVIDERS = [\n\tAccountSubscriptionsResolver,\n\tAccountDetailsResolver,\n\tAccountInvoicesResolver,\n\tAccountPaymentsResolver,\n\tTabService,\n\tPaymentsService,\n\tAccountPaymentsGuard,\n\tSubscriptionService,\n\tProductService,\n];\n\nlet COMP: any = [\n\tAccountView,\n\tAccountDetailsView,\n\tAccountInvoicesView,\n\tAccountPaymentsView,\n\tAccountSubscriptionsView,\n\tExtendedInput,\n\tPaymentMethodsPickerModal\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tReactiveFormsModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(AccountRoutes)\n\t],\n\tdeclarations: COMP,\n\tentryComponents: COMP,\n\tproviders: [\n\t\t// ...GLOBAL_PROVIDERS,\n\t\t...LOCAL_PROVIDERS\n\t],\n\texports: COMP,\n\tbootstrap: [AccountView]\n})\nexport class AccountModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/account/account.module.ts","import { InjectionToken } from '@angular/core';\nimport { ChartConfigModel } from './chart.model';\n\nexport const ChartConfig = new InjectionToken('CHART_CONFIG');\n\nexport const ChartConfigData: ChartConfigModel = {\n\tdatasetColors: [\n\t\t[31, 47, 193],\n\t\t[23, 23, 23],\n\t\t[249, 213, 0],\n\t\t[247, 92, 3],\n\t\t[157, 141, 241],\n\t\t[7, 160, 112],\n\t\t[38, 219, 192],\n\t\t[130, 2, 99],\n\t\t[25, 114, 244],\n\t\t[255, 99, 146],\n\t\t[198, 216, 96],\n\t]\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/charts/chart.component.config.ts","import { Injectable } from '@angular/core';\nimport moment from 'moment';\n\nimport { GranularityType } from './chart.model';\n\n@Injectable()\nexport class ChartScaleHelper {\n\n\tgetScaleStep(start: moment.Moment, end: moment.Moment, scaleUnit: chartjs.TimeUnit): number {\n\t\tlet dateDiff: number;\n\t\tlet startDate: moment.Moment = start.clone();\n\t\tlet endDate: moment.Moment = end.clone();\n\t\tswitch (scaleUnit) {\n\t\t\tcase 'minute':\n\t\t\t\t// Special case for engagement rate charts for few hours period.\n\t\t\t\tdateDiff = endDate.diff(startDate, 'minutes') / 2;\n\t\t\t\tbreak;\n\t\t\tcase 'hour':\n\t\t\t\tdateDiff = endDate.endOf('day').diff(startDate.startOf('day'), 'hours');\n\t\t\t\tbreak;\n\t\t\tcase 'month':\n\t\t\t\tdateDiff = endDate.endOf('day').diff(startDate.startOf('day'), 'months');\n\t\t\t\tbreak;\n\t\t\tcase 'year':\n\t\t\t\tdateDiff = endDate.endOf('day').diff(startDate.startOf('day'), 'years');\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tdateDiff = endDate.endOf('day').diff(startDate.startOf('day'), 'days');\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn Math.round(dateDiff / 4);\n\t}\n\n\tgetScaleStepAlt(dataLength: number): number {\n\t\treturn Math.round(dataLength / 4);\n\t}\n\n\tgetTimeScaleUnit(start: moment.Moment, end: moment.Moment, granularity: GranularityType): chartjs.TimeUnit {\n\t\t// Special case for engagement rate charts for few hours period.\n\t\tif(end.diff(start, 'hours') < 24)\n\t\t\treturn 'minute';\n\n\t\tlet startDay: moment.Moment = start.clone().startOf('day');\n\t\tlet endDay: moment.Moment = end.clone().endOf('day');\n\n\t\tif (endDay.diff(startDay, 'months') > 24)\n\t\t\treturn 'year';\n\n\t\tif (endDay.diff(startDay, 'months') > 12)\n\t\t\treturn 'month';\n\n\t\tif (granularity === 'hour' && endDay.diff(startDay.startOf('day'), 'days') <= 3)\n\t\t\treturn 'hour';\n\n\t\treturn 'day';\n\t}\n\n\tgetDateFormatForScaleUnit(unit: chartjs.TimeUnit): string {\n\t\tswitch (unit) {\n\t\t\tcase 'minute':\n\t\t\t\treturn 'HH:mm:ss';\n\t\t\tcase 'hour':\n\t\t\t\treturn 'HH:mm';\n\t\t\tcase 'day':\n\t\t\t\treturn 'DD MMM';\n\t\t\tcase 'week':\n\t\t\t\treturn 'DD MMM';\n\t\t\tcase 'month':\n\t\t\t\treturn 'MMM YYYY';\n\t\t\tcase 'year':\n\t\t\t\treturn 'YYYY';\n\t\t\tdefault:\n\t\t\t\treturn 'DD MMM';\n\t\t}\n\t}\n\n\t// Simple formatting: 2 cases and only in \"heavy\" data point size is reduced.\n\tgetPointThickness(pointsAmount: number): number {\n\t\tif (pointsAmount > 48)\n\t\t\treturn 0;\n\t\treturn 1;\n\t}\n\n\t// Simple formatting: 2 cases and only in \"heavy\" data line thickness is reduced.\n\tgetLineThickness(pointsAmount: number): number {\n\t\tif (pointsAmount > 48)\n\t\t\treturn 1;\n\t\treturn 2;\n\t}\n\n\t//formats the tooltips shown onHover over the data points with the full date and time\n\tformatTooltipDateLabel(labelToFormat: string, start: moment.Moment, end: moment.Moment, granularity: GranularityType): string {\n\t\tlet m = moment(labelToFormat);\n\t\tif (!m.isValid())\n\t\t\treturn labelToFormat;\n\n\t\tif(start && end && (end.diff(start, 'hours') < 24))\n\t\t\treturn m.format('ll HH:mm:ss');\n\n\t\tlet toDate: string;\n\t\tswitch (granularity) {\n\t\t\tcase 'hour':\n\t\t\t\treturn m.format('llll');\n\t\t\tcase 'day':\n\t\t\t\treturn m.format('ll');\n\t\t\tcase 'week':\n\t\t\t\ttoDate = m.clone().endOf('week').isAfter(end, 'day') ?\n\t\t\t\t\tend.format('ll') : m.clone().endOf('week').format('ll');\n\t\t\t\treturn m.format('ll') + ' - ' + toDate;\n\t\t\tcase 'month':\n\t\t\t\ttoDate = m.clone().endOf('month').isAfter(end, 'day') ?\n\t\t\t\t\tend.format('ll') : m.clone().endOf('month').format('ll');\n\t\t\t\treturn m.format('ll') + ' - ' + toDate;\n\t\t\tcase 'year':\n\t\t\t\ttoDate = m.clone().endOf('year').isAfter(end, 'day') ?\n\t\t\t\t\tend.format('ll') : m.clone().endOf('year').format('ll');\n\t\t\t\treturn m.format('ll') + ' - ' + toDate;\n\t\t\tdefault: return labelToFormat;\n\t\t}\n\t}\n\n\tformatScaleDateLabel(label: string, dateFormat: string, index: number, labels: Array<string>): string | null {\n\t\tlet m = moment(label);\n\t\tif (!m.isValid())\n\t\t\treturn label;\n\n\t\tlet step: number = this.getScaleStepAlt(labels.length);\n\t\tif (index > 0 && index < labels.length - 1) {\n\t\t\tif (labels.length > 6 && index % step > 0)\n\t\t\t\treturn null;\n\t\t}\n\t\telse\n\t\t\tif (labels.length > 3)\n\t\t\t\treturn null;\n\t\tlet formattedDate = m.format(dateFormat);\n\t\treturn formattedDate;\n\t}\n\n\tremoveFirstAndLastDate(scale: any): void {\n\t\tif (scale.ticks.length > 3) {\n\t\t\tscale.ticks[0] = null;\n\t\t\tscale.ticks[scale.ticks.length - 1] = null;\n\t\t}\n\t}\n\n\t// Creates callback for selected element nominal with, for sampling labels to available space.\n\t// Returns function / callback with arguments and type\n\t//   (label: any, index: number, labels: Array<string>): string\n\t// Method for use in chartjs axes tick configuration with (autoSkip: false) option.\n\tmakeTickLabelSamplingCallback(singleElementWidth: number): any {\n\t\tlet result = function(label: any, index: number, labels: Array<string>): string {\n\t\t\t// Number of samples.\n\t\t\tlet samplesNum = Math.ceil(this.width / singleElementWidth);\n\n\t\t\t// Sample labels.\n\t\t\tlet scale =  (labels && (labels.length > 1)) ? (samplesNum / (labels.length - 1)) : 1;\n\n\t\t\t// When scale is about 0.3 then often gaps looks 2,3,2,3 or 1,2,1,2 etc.\n\t\t\t// For small numbers it looks bad, so for such case show all labels - looks better.\n\t\t\tif(scale > 0.3) {\n\t\t\t\tscale = 1;\n\t\t\t}\n\t\t\tlet labelSegment = Math.floor(index * scale);\n\t\t\tlet prevLabelSegment = Math.floor((index - 1) * scale);\n\t\t\tif(labelSegment != prevLabelSegment) {\n\t\t\t\treturn label;\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/charts/chart.scale.helper.ts","import {\n\tAfterViewInit,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInject,\n\tInput,\n\tOnChanges,\n\tOnDestroy,\n\tOutput,\n\tSimpleChanges,\n\tViewChild,\n} from '@angular/core';\nimport moment from 'moment';\n\nimport { ChartConfig, ChartConfigData } from './chart.component.config';\nimport { ChartConfigModel, ChartType, GranularityType } from './chart.model';\nimport { ChartScaleHelper } from './chart.scale.helper';\n\n@Component({\n\tselector: 'chart',\n\ttemplate: `<div class=\"canvas-wrapper\" [style.height]=\"chartHeight\" [hidden]=\"chartData == null\"><canvas #canvas></canvas></div><div class=\"loading-container\" [hidden]=\"chartData != null\" [style.height]=\"chartHeight\"><span class=\"spinner-small\"></span></div>`,\n\tproviders: [{ provide: ChartConfig, useValue: ChartConfigData }, ChartScaleHelper]\n})\nexport class ChartComponent implements AfterViewInit, OnChanges, OnDestroy {\n\t//Inputs\n\t@Input() pointRadius  = 1;\n\t@Input() chartData: Array<chartjs.BaseDataset>;\n\t@Input() chartLabels: Array<any>;\n\t@Input() chartType: ChartType;\n\t@Input() chartHeight: string = '300px';\n\t//needed to calculate the scale settings\n\t@Input() startDate: moment.Moment | null;\n\t@Input() endDate: moment.Moment | null;\n\t@Input() granularity: GranularityType;\n\t@Input() chartStacked: boolean | false;\n\t@Input() fontColor: any = null;\n\t@Input() gridColor: string = 'rgba(0, 0, 0, 0.1)';\n\t@Input() datasetColors: [number, number, number][] = null;\n\t//Outputs\n\t@Output() onChartClicked: EventEmitter<{ event: chartjs.Event, elements: Array<any> }> = new EventEmitter<{ event: chartjs.Event, elements: Array<any> }>();\n\t@Output() onChartHovered: EventEmitter<Array<any>> = new EventEmitter<Array<any>>();\n\n\t@ViewChild('canvas', { read: ElementRef }) canvasElement: ElementRef;\n\n\tprivate chartOptions: chartjs.BaseOptions | chartjs.BaseOptions;\n\tprivate chartInstance: chartjs.Chart;\n\tprivate isAfterViewInit: boolean = false;\n\n\tconstructor(private cdr: ChangeDetectorRef,\n\t\tprivate timeScaleHelper: ChartScaleHelper,\n\t\t@Inject(ChartConfig) private config: ChartConfigModel) {\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.isAfterViewInit = true;\n\t\tthis.createChart();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.isAfterViewInit)\n\t\t\tif ((changes['chartData'] && changes['chartData'] != undefined && changes['chartData'] != null) ||\n\t\t\t\t(changes['chartType'] && changes['chartType'] != undefined && changes['chartType'] != null\n\t\t\t\t\t&& this.chartData)) {\n\t\t\t\tthis.createChart();\n\t\t\t}\n\t}\n\n\tngOnDestroy() {\n\t\tthis.destroyChart();\n\t}\n\n\tdestroyChart() {\n\t\t//destroy chart.js instance to load again correctly\n\t\tif (this.chartInstance) {\n\t\t\tthis.chartInstance.destroy();\n\t\t\t// this.chartInstance.options = null;\n\t\t}\n\t}\n\n\tcreateChart() {\n\t\tif (!this.chartData)\n\t\t\treturn;\n\n\t\tthis.destroyChart();\n\t\t//default dataset settings\n\t\tthis.setChartSettingsAndOptions();\n\n\t\t// create chart.js configuration object\n\t\tlet conf = {\n\t\t\ttype: (this.chartType == 'lineTime' ? 'line' : this.chartType),\n\t\t\toptions: this.chartOptions,\n\t\t\tdata: {\n\t\t\t\tlabels: this.chartLabels,\n\t\t\t\tdatasets: this.chartData\n\t\t\t}\n\t\t};\n\n\t\t//create and initialize chart.js instance\n\t\tthis.chartInstance = new Chart(this.canvasElement.nativeElement.getContext('2d'), conf);\n\t}\n\n\tonChartTypeChange(chartType: ChartType): void {\n\t\tthis.chartType = chartType;\n\t\tthis.createChart();\n\t}\n\t//\n\tprivate setChartSettingsAndOptions(): void {\n\t\t//defaults to line chart\n\t\tswitch (this.chartType) {\n\t\t\tcase 'line':\n\t\t\t\tthis.setLineChartOptions();\n\t\t\t\tthis.setLineChartSettings();\n\t\t\t\tbreak;\n\t\t\tcase 'lineTime':\n\t\t\t\tthis.setLineTimeChartOptions();\n\t\t\t\tthis.setLineTimeChartSettings();\n\t\t\t\tbreak;\n\t\t\tcase 'bar':\n\t\t\t\tthis.setBarChartOptions();\n\t\t\t\tthis.setBarChartSettings();\n\t\t\t\tbreak;\n\t\t\tcase 'horizontalBar':\n\t\t\t\tthis.setHorizontalBarChartOptions();\n\t\t\t\tthis.setBarChartSettings();\n\t\t\t\tbreak;\n\t\t\t// case 'pie':\n\t\t\t//\tthis.setPieChartOptions();\n\t\t\t//\tthis.setPieChartSettings();\n\t\t\t//\tbreak;\n\t\t\tcase 'doughnut':\n\t\t\t\tthis.setPieChartOptions();\n\t\t\t\tthis.setPieChartSettings();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn('ChartComponent -> ChartType not defined or invalid!');\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate getColor(i: number) {\n\t\tif (this.datasetColors)\n\t\t\treturn this.datasetColors[i % this.datasetColors.length];\n\t\treturn this.config.datasetColors[i % this.config.datasetColors.length];\n\t}\n\n\tprivate setLineChartSettings(): void {\n\t\tthis.setLineTimeChartSettings();\n\t}\n\n\tprivate setLineTimeChartSettings(): void {\n\t\tlet dataAmount = this.getDataLength();\n\t\tthis.chartData.forEach((item, index) => {\n\t\t\t//colors\n\t\t\tlet colors = this.getColor(index);\n\t\t\tlet chartItem = <chartjs.LineChartDataset>item;\n\t\t\t// Check if point color already defined.\n\t\t\tif((typeof chartItem.pointBorderColor === \"string\") && (chartItem.pointBorderColor.indexOf('rgba(') == 0)) {\n\t\t\t\tcolors = this.parseRgbaStr(chartItem.pointBorderColor).slice(0,3);\n\t\t\t}\n\t\t\tchartItem.backgroundColor = this.rgba(colors, 0.5);\n\t\t\tchartItem.borderColor = this.rgba(colors, 1);\n\t\t\tchartItem.pointBackgroundColor = '#fff';\n\t\t\tchartItem.pointBorderColor = this.rgba(colors, 1);\n\t\t\tchartItem.pointHoverBackgroundColor = this.rgba(colors, 1);\n\t\t\tchartItem.pointHoverBorderColor = this.rgba(colors, 0.8);\n\t\t\t//settings\n\t\t\t//Background fill color below the line\n\t\t\tif(typeof chartItem.fill === 'undefined') {\n\t\t\t\tchartItem.fill = index > 0 ? false : true;\n\t\t\t}\n\t\t\tchartItem.cubicInterpolationMode = 'monotone';\n\t\t\tchartItem.lineTension = 0;\n\t\t\tchartItem.pointHoverRadius = 5;\n\t\t\tchartItem.pointBorderWidth = 3;\n\t\t\t//Line thickness\n\t\t\tchartItem.borderWidth = this.timeScaleHelper.getLineThickness(dataAmount);\n\t\t\t//Point thickness\n\t\t\tchartItem.pointRadius = this.timeScaleHelper.getPointThickness(dataAmount);\n\t\t\tchartItem.pointRadius = this.pointRadius;\n\n\t\t});\n\t}\n\n\tprivate setBarChartSettings(): void {\n\t\tthis.chartData.forEach((item, index) => {\n\t\t\t//colors\n\t\t\tlet colors = this.getColor(index);\n\t\t\tlet chartItem = <chartjs.BarChartDataset>item;\n\t\t\tchartItem.backgroundColor = this.rgba(colors, 0.6);\n\t\t\tchartItem.borderColor = this.rgba(colors, 1);\n\t\t\tchartItem.hoverBackgroundColor = this.rgba(colors, 0.8);\n\t\t\tchartItem.hoverBorderColor = this.rgba(colors, 1);\n\t\t\t//settings\n\t\t\tchartItem.borderWidth = 2;\n\t\t});\n\t}\n\n\tprivate setPieChartSettings(): void {\n\t    if(this.chartData == null || this.chartData.length == 0) {\n\t        return;\n\t    }\n        let chartItem = <chartjs.PieChartDataset>this.chartData[0];\n        chartItem.backgroundColor = [];\n        chartItem.borderColor = [];\n        chartItem.hoverBackgroundColor = [];\n        chartItem.hoverBorderColor = [];\n        chartItem.borderWidth = [2];\n\t\tthis.chartData[0].data.forEach((item, index) => {\n\t\t\tlet colors = this.getColor(index);\n\t\t\tchartItem.backgroundColor.push(this.rgba(colors, 0.6));\n\t\t\tchartItem.borderColor.push(this.rgba(colors, 1.0))\n\t\t\tchartItem.hoverBackgroundColor.push(this.rgba(colors, 0.8))\n\t\t\tchartItem.hoverBorderColor.push(this.rgba(colors, 1.0))\n\t\t});\n\t}\n\n\tprivate setLineChartOptions(): void {\n\t\tlet optionsSettings: chartjs.LineChartOptions = {\n\t\t\tmaintainAspectRatio: false,\n\t\t\thover: {\n\t\t\t\tmode: 'x-axis'\n\t\t\t},\n\t\t\tscales: {\n\t\t\t\txAxes: [{\n\t\t\t\t\tticks: { suggestedMin: 0 },\n\t\t\t\t\tgridLines: {\n\t\t\t\t\t\tdisplay: false\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tyAxes: [{\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tticks: { suggestedMin: 0 }\n\t\t\t\t}]\n\t\t\t},\n\t\t\ttooltips: {\n\t\t\t\tmode: 'x-axis',\n\t\t\t\tdisplayColors: true,\n\t\t\t\tbodySpacing: 6,\n\t\t\t\tcallbacks: {\n\t\t\t\t\t// Return no title.\n\t\t\t\t\ttitle: (tooltip: Array<chartjs.TooltipItem>, data: any): string | string[] => {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t},\n\t\t\t\t\t// Return \"<Serie title>: <value rounded to 2 decimals>.\n\t\t\t\t\tlabel: (tooltip: chartjs.TooltipItem, data: any): string | Array<string> => {\n\t\t\t\t\t\tlet result = ' ' + data.datasets[tooltip.datasetIndex].label + ': ';\n\t\t\t\t\t\tif(tooltip.yLabel && (typeof tooltip.yLabel === 'number')) {\n\t\t\t\t\t\t\tlet val: number = <number> tooltip.yLabel;\n\t\t\t\t\t\t\tresult += val.toFixed(2);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult += tooltip.yLabel;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tposition: 'bottom',\n\t\t\t\tlabels: {}\n\t\t\t}\n\t\t};\n\n\t\tif (this.fontColor != null) {\n\t\t\toptionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n\t\t\toptionsSettings.scales.xAxes[0].ticks.fontColor = this.fontColor;\n\t\t\toptionsSettings.legend.labels.fontColor = this.fontColor;\n\t\t}\n\n\t\tthis.chartOptions = optionsSettings;\n\t}\n\n\tprivate setLineTimeChartOptions(): void {\n\t\tif (this.startDate == null || this.endDate == null)\n\t\t\treturn;\n\n\t\tlet scaleUnit = this.timeScaleHelper.getTimeScaleUnit(this.startDate, this.endDate, this.granularity);\n\t\tlet scaleStep = this.timeScaleHelper.getScaleStep(this.startDate, this.endDate, scaleUnit);\n\t\tlet dateFormat = this.timeScaleHelper.getDateFormatForScaleUnit(scaleUnit);\n\n\t\tlet optionsSettings: chartjs.LineChartOptions = {\n\t\t\tmaintainAspectRatio: false,\n\t\t\thover: {\n\t\t\t\tmode: 'x-axis'\n\t\t\t},\n\t\t\ttooltips: {\n\t\t\t\tmode: 'x-axis',\n\t\t\t\tdisplayColors: true,\n\t\t\t\tbodySpacing: 6,\n\t\t\t\tcallbacks: {\n\t\t\t\t\ttitle: (tooltip: Array<chartjs.TooltipItem>, data: any): string | string[] => {\n\t\t\t\t\t\tif (this.endDate)\n\t\t\t\t\t\t\treturn this.timeScaleHelper.formatTooltipDateLabel(tooltip[0].xLabel, this.startDate, this.endDate, this.granularity);\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t},\n\t\t\t\t\tlabel: (tooltip: chartjs.TooltipItem, data: any): string | Array<string> => {\n\t\t\t\t\t\t//dirty fix for the missing left padding between the tooltip color squares and the text\n\t\t\t\t\t\t//simply add a space before the text, no need to create a custom tooltip just for this\n\t\t\t\t\t\treturn ' ' + data.datasets[tooltip.datasetIndex].label + ': ' + tooltip.yLabel;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tscales: {\n\t\t\t\txAxes: [{\n\t\t\t\t\ttype: 'time',\n\t\t\t\t\tgridLines: {\n\t\t\t\t\t\tdisplay: false\n\t\t\t\t\t},\n\t\t\t\t\ttime: {\n\t\t\t\t\t\t// Note: Do not use \"min\" parameter with startDate, because in some cases startDate\n\t\t\t\t\t\t// is rounded to whole unit (eg. to first day of month and start date can be not feasible).\n\t\t\t\t\t\t// This cause that chart is starting outside chart area (on left side).\n\t\t\t\t\t\tdisplayFormats: {\n\t\t\t\t\t\t\tminute: dateFormat,\n\t\t\t\t\t\t\thour: dateFormat,\n\t\t\t\t\t\t\tday: dateFormat,\n\t\t\t\t\t\t\tmonth: dateFormat,\n\t\t\t\t\t\t\tyear: dateFormat\n\t\t\t\t\t\t},\n\t\t\t\t\t\tunit: scaleUnit,\n\t\t\t\t\t\tunitStepSize: scaleStep\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tyAxes: [{\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tticks: { suggestedMin: 0 }\n\t\t\t\t}]\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tposition: 'bottom'\n\t\t\t}\n\t\t};\n\t\tif (this.gridColor != null) {\n\t\t\toptionsSettings.scales.xAxes[0].gridLines.color = this.gridColor;\n\t\t\toptionsSettings.scales.yAxes[0].gridLines = { color: this.gridColor };\n\t\t}\n\t\tif (this.fontColor != null) {\n\t\t\toptionsSettings.scales.xAxes[0].ticks = { fontColor: this.fontColor };\n\t\t\toptionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n\t\t\toptionsSettings.legend.labels = { fontColor: this.fontColor };\n\t\t}\n\t\tthis.attachWeekends(optionsSettings);\n\t\tthis.chartOptions = optionsSettings;\n\t}\n\n\tprivate setBarChartOptions(): void {\n\t\tif (this.startDate == null || this.endDate == null)\n\t\t\treturn;\n\n\t\tlet scaleUnit = this.timeScaleHelper.getTimeScaleUnit(this.startDate, this.endDate, this.granularity);\n\t\tlet dateFormat = this.timeScaleHelper.getDateFormatForScaleUnit(scaleUnit);\n\t\tlet scaleStep = this.timeScaleHelper.getScaleStepAlt(this.getDataLength());\n\n\t\tlet optionsSettings: chartjs.BarChartOptions = {\n\t\t\tmaintainAspectRatio: false,\n\t\t\ttooltips: {\n\t\t\t\tmode: 'x-axis',\n\t\t\t\tdisplayColors: true,\n\t\t\t\tbodySpacing: 6,\n\t\t\t\tcallbacks: {\n\t\t\t\t\ttitle: (tooltip: Array<chartjs.TooltipItem>, data: any): string | string[] => {\n\t\t\t\t\t\tif (this.endDate)\n\t\t\t\t\t\t\treturn this.timeScaleHelper\n\t\t\t\t\t\t\t\t.formatTooltipDateLabel(data.labels[tooltip[0].index], this.startDate, this.endDate, this.granularity);\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tscales: {\n\t\t\t\txAxes: [{\n\t\t\t\t\tstacked: (this.chartData[0].data.length > 10 || this.chartStacked) ? true : false,\n\t\t\t\t\tgridLines: { display: false },\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tautoSkip: false,\n\t\t\t\t\t\tcallback: (label: any, index: number, labels: Array<string>): string | null => {\n\t\t\t\t\t\t\treturn this.timeScaleHelper.formatScaleDateLabel(label, dateFormat, index, labels);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tyAxes: [{\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tticks: { suggestedMin: 0 }\n\t\t\t\t}]\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tposition: 'bottom'\n\t\t\t}\n\t\t};\n\t\tthis.attachWeekends(optionsSettings);\n\n\t\tif (this.fontColor != null) {\n\t\t\toptionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n\t\t\toptionsSettings.scales.xAxes[0].ticks.fontColor = this.fontColor;\n\t\t\toptionsSettings.legend.labels.fontColor = this.fontColor;\n\t\t}\n\n\t\tthis.chartOptions = optionsSettings;\n\t}\n\n\tprivate setHorizontalBarChartOptions(): void {\n\t\tlet optionsSettings: chartjs.BarChartOptions = {\n\t\t\tmaintainAspectRatio: false,\n\t\t\ttooltips: {\n\t\t\t\tmode: 'x-axis',\n\t\t\t\tdisplayColors: true,\n\t\t\t\tbodySpacing: 6\n\t\t\t},\n\t\t\tscales: {\n\t\t\t\txAxes: [{\n\t\t\t\t\tstacked: (this.chartData[0].data.length > 10 || this.chartStacked) ? true : false,\n\t\t\t\t\tgridLines: { display: false },\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tautoSkip: false\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tyAxes: [{\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tticks: { suggestedMin: 0 }\n\t\t\t\t}]\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tposition: 'bottom'\n\t\t\t}\n\t\t};\n\n\t\tif (this.fontColor != null) {\n\t\t\toptionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n\t\t\toptionsSettings.scales.xAxes[0].ticks.fontColor = this.fontColor;\n\t\t\toptionsSettings.legend.labels.fontColor = this.fontColor;\n\t\t}\n\n\t\tthis.chartOptions = optionsSettings;\n\t}\n\n\tprivate setPieChartOptions(): void {\n\t\tlet options: chartjs.BaseOptions = {\n\t\t\tmaintainAspectRatio: false,\n\t\t\ttooltips: {\n\t\t\t\tdisplayColors: true,\n\t\t\t\tbodySpacing: 6,\n\t\t\t\tcallbacks: {\n\t\t\t\t\tlabel: (tooltip: chartjs.TooltipItem, data: any): string | string[] => {\n\t\t\t\t\t\tlet dataset = data.datasets[tooltip.datasetIndex];\n\t\t\t\t\t\tlet meta = dataset._meta[Object.keys(dataset._meta)[0]];\n\t\t\t\t\t\tlet total = meta.total;\n\t\t\t\t\t\tlet currentValue = dataset.data[tooltip.index];\n\t\t\t\t\t\tlet percentage = parseFloat((currentValue/total*100).toFixed(1));\n\t\t\t\t\t\treturn currentValue + ' (' + percentage + '%)';\n\t\t\t\t\t},\n\t\t\t\t\ttitle: function(tooltip: Array<chartjs.TooltipItem>, data) {\n\t\t\t\t\t\treturn data.labels[tooltip[0].index];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tposition: 'bottom',\n\t\t\t}\n\t\t};\n\n\t\tif (this.fontColor != null) {\n\t\t\toptions.legend.labels = { fontColor: this.fontColor};\n\t\t}\n\t\tthis.chartOptions = options;\n\t}\n\n\tprivate getDataLength(): number {\n\t\tif (!this.chartData || this.chartData === null || this.chartData === undefined || this.chartData.length <= 0\n\t\t\t|| !this.chartData[0].data || this.chartData[0] === null || this.chartData[0] === undefined)\n\t\t\treturn 0;\n\t\treturn this.chartData[0].data.length;\n\t}\n\n\tprivate rgba(colour: Array<number>, alpha: number) {\n\t\treturn 'rgba(' + colour.concat(alpha).join(',') + ')';\n\t}\n\n\tprivate parseRgbaStr(s: string): Array<number> {\n\t\ts = s.replace(/[^0-9,]+/g,'');\n\t\treturn s.split(',').map(parseFloat);\n\t}\n\n\tprivate attachWeekends(optionsSettings: chartjs.LineChartOptions) {\n\t\tif (this.startDate && this.endDate && (this.granularity == 'hour' || this.granularity == 'day')) {\n\t\t\tlet weekends = [], current = this.startDate.clone();\n\t\t\twhile (current.day(7).isBefore(this.endDate))\n\t\t\t\tweekends.push(current.clone().day(-1));\n\t\t\tlet annotations = [];\n\t\t\tfor (let i = 0; i < weekends.length; i++)\n\t\t\t\tif (this.chartType == 'lineTime')\n\t\t\t\t\tannotations.push(this.formatWeekendAnnotation(\n\t\t\t\t\t\tweekends[i].clone().startOf('day'),\n\t\t\t\t\t\tthis.granularity == 'day'\n\t\t\t\t\t\t\t? weekends[i].add(1, 'd').startOf('day')\n\t\t\t\t\t\t\t: weekends[i].add(1, 'd').endOf('day')\n\t\t\t\t\t));\n\t\t\t\telse if (this.chartType == 'bar')\n\t\t\t\t\tannotations.push(this.formatWeekendAnnotation(\n\t\t\t\t\t\tweekends[i].clone().startOf('day').toISOString(),\n\t\t\t\t\t\tweekends[i].add(2, 'd').startOf('day').toISOString()\n\t\t\t\t\t));\n\t\t\toptionsSettings.annotation = { drawTime: 'beforeDatasetsDraw', annotations: annotations };\n\t\t}\n\t}\n\n\tprivate formatWeekendAnnotation(xMin: any, xMax: any) {\n\t\treturn { xMin: xMin, xMax: xMax, type: 'box', xScaleID: 'x-axis-0', backgroundColor: this.gridColor };\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/charts/chart.component.ts","import {\n\tAfterViewInit,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInject,\n\tInput,\n\tOnChanges,\n\tOnDestroy,\n\tOutput,\n\tSimpleChanges,\n\tViewChild,\n} from '@angular/core';\nimport moment from 'moment';\n\nimport { ChartConfig, ChartConfigData } from './chart.component.config';\nimport { ChartConfigModel, ChartType, GranularityType } from './chart.model';\nimport { ChartScaleHelper } from './chart.scale.helper';\n\n@Component({\n\tselector: 'chart-realtime',\n\ttemplate: `<div [style.height]=\"chartHeight\" [hidden]=\"chartData == null\"><canvas #canvas></canvas></div><div class=\"loading-container\" [hidden]=\"chartData != null\" [style.height]=\"chartHeight\"><span class=\"spinner-small\"></span></div>`,\n\tproviders: [{ provide: ChartConfig, useValue: ChartConfigData }, ChartScaleHelper]\n})\nexport class ChartRealtimeComponent implements AfterViewInit, OnChanges, OnDestroy {\n\t//Inputs\n\t@Input() pointRadius  = 1;\n\t@Input() chartData: Array<chartjs.BaseDataset>;\n\t@Input() chartLabels: Array<any>;\n\t@Input() chartType: ChartType = 'line';\n\t@Input() fontColor: any = null;\n\t@Input() gridColor: any = null;\n\t@Input() chartHeight: string = '300px';\n\t//needed to calculate the scale settings\n\t//Outputs\n\t@Output() onChartClicked: EventEmitter<{ event: chartjs.Event, elements: Array<any> }> =\n\tnew EventEmitter<{ event: chartjs.Event, elements: Array<any> }>();\n\t@Output() onChartHovered: EventEmitter<Array<any>> = new EventEmitter<Array<any>>();\n\n\t@ViewChild('canvas', { read: ElementRef }) canvasElement: ElementRef;\n\n\tprivate chartOptions: chartjs.BaseOptions | chartjs.BaseOptions;\n\tprivate chartInstance: chartjs.Chart;\n\tprivate isAfterViewInit: boolean = false;\n\n\tconstructor(private cdr: ChangeDetectorRef,\n\t\tprivate chartScaleHelper: ChartScaleHelper,\n\t\t@Inject(ChartConfig) private config: ChartConfigModel) {\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.isAfterViewInit = true;\n\t\tthis.createChart();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.isAfterViewInit)\n\t\t\tif ((changes['chartData'] && changes['chartData'] != undefined && changes['chartData'] != null) ||\n\t\t\t\t(changes['chartType'] && changes['chartType'] != undefined && changes['chartType'] != null\n\t\t\t\t\t&& this.chartData)) {\n\t\t\t\tthis.createChart();\n\t\t\t}\n\t}\n\n\tngOnDestroy() {\n\t\tthis.destroyChart();\n\t}\n\n\tdestroyChart() {\n\t\t//destroy chart.js instance to load again correctly\n\t\tif (this.chartInstance) {\n\t\t\tthis.chartInstance.destroy();\n\t\t\t// this.chartInstance.options = null;\n\t\t}\n\t}\n\n\tcreateChart() {\n\t\tif (!this.chartData)\n\t\t\treturn;\n\n\t\tthis.destroyChart();\n\t\t//default dataset settings\n\t\tthis.setChartSettingsAndOptions();\n\n\t\t// create chart.js configuration object\n\t\tlet conf = {\n\t\t\ttype: (this.chartType == 'lineTime' ? 'line' : this.chartType),\n\t\t\toptions: this.chartOptions,\n\t\t\tdata: {\n\t\t\t\tlabels: this.chartLabels,\n\t\t\t\tdatasets: this.chartData\n\t\t\t}\n\t\t};\n\n\t\t//create and initialize chart.js instance\n\t\tthis.chartInstance = new Chart(this.canvasElement.nativeElement.getContext('2d'), conf);\n\t}\n\n\tonChartTypeChange(chartType: ChartType): void {\n\t\tthis.chartType = chartType;\n\t\tthis.createChart();\n\t}\n\t//\n\tprivate setChartSettingsAndOptions(): void {\n\t\t//defaults to line chart\n\t\tswitch (this.chartType) {\n\t\t\tcase 'line':\n\t\t\t\tthis.setLineChartOptions();\n\t\t\t\tthis.setLineChartSettings();\n\t\t\t\tbreak;\n\t\t\tcase 'bar':\n\t\t\t\tthis.setBarChartOptions();\n\t\t\t\tthis.setBarChartSettings();\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn('ChartComponent -> ChartType not defined or invalid!');\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\n\n\tprivate setLineChartSettings(): void {\n\t\tthis.chartData.forEach((item, index) => {\n\t\t\t//colors\n\t\t\tlet colors = this.config.datasetColors[index];\n\t\t\tlet chartItem = <chartjs.LineChartDataset>item;\n\t\t\tchartItem.backgroundColor = this.rgba(colors, 0.6);\n\t\t\tchartItem.borderColor = this.rgba(colors, 1);\n\t\t\tchartItem.hoverBackgroundColor = this.rgba(colors, 0.8);\n\t\t\tchartItem.hoverBorderColor = this.rgba(colors, 1);\n\t\t\t//settings\n\t\t\tchartItem.borderWidth = 2;\n\t\t\tchartItem.pointRadius = this.pointRadius;\n\t\t});\n\t}\n\n\tprivate setBarChartSettings(): void {\n\t\tthis.chartData.forEach((item, index) => {\n\t\t\t//colors\n\t\t\tlet colors = this.config.datasetColors[index];\n\t\t\tlet chartItem = <chartjs.BarChartDataset>item;\n\t\t\tchartItem.backgroundColor = this.rgba(colors, 0.6);\n\t\t\tchartItem.borderColor = this.rgba(colors, 1);\n\t\t\tchartItem.hoverBackgroundColor = this.rgba(colors, 0.8);\n\t\t\tchartItem.hoverBorderColor = this.rgba(colors, 1);\n\t\t\t//settings\n\t\t\tchartItem.borderWidth = 2;\n\t\t});\n\t}\n\n\tprivate setLineChartOptions(): void {\n\t\tlet optionsSettings: chartjs.LineChartOptions = {\n\t\t\tmaintainAspectRatio: false,\n\t\t\tanimation: false,\n\t\t\thover: {\n\t\t\t\tmode: 'x-axis'\n\t\t\t},\n\t\t\tscales: {\n\t\t\t\txAxes: [{\n\t\t\t\t\tgridLines: {\n\t\t\t\t\t\tdisplay: false\n\t\t\t\t\t},\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tautoSkip: false,\n\t\t\t\t\t\tcallback: this.chartScaleHelper.makeTickLabelSamplingCallback(40)\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tyAxes: [{\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tticks: { suggestedMin: 0}\n\t\t\t\t}]\n\t\t\t},\n\t\t\ttooltips: {\n\t\t\t\tmode: 'x-axis',\n\t\t\t\tdisplayColors: true,\n\t\t\t\tbodySpacing: 6\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tdisplay: false\n\t\t\t}\n\t\t};\n\n\t\tif (this.fontColor != null) {\n\t\t\toptionsSettings.scales.yAxes[0].ticks.fontColor = this.fontColor;\n\t\t\toptionsSettings.scales.xAxes[0].ticks.fontColor = this.fontColor;\n\t\t}\n\t\tif (this.gridColor != null) {\n\t\t\toptionsSettings.scales.xAxes[0].gridLines.color = this.gridColor;\n\t\t}\n\n\t\tthis.chartOptions = optionsSettings;\n\t}\n\n\tprivate setBarChartOptions(): void {\n\t\tlet optionsSettings: chartjs.BarChartOptions = {\n\t\t\tmaintainAspectRatio: false,\n\t\t\tanimation: false,\n\t\t\ttooltips: {\n\t\t\t\tmode: 'x-axis',\n\t\t\t\tdisplayColors: true,\n\t\t\t\tbodySpacing: 6,\n\t\t\t\tcallbacks: {\n\t\t\t\t\ttitle: (tooltip: Array<chartjs.TooltipItem>, data: any): string | string[] => {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tscales: {\n\t\t\t\txAxes: [{\n\t\t\t\t\tstacked: (this.chartData[0].data.length > 10) ? true : false,\n\t\t\t\t\tgridLines: { display: false },\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tautoSkip: false\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tyAxes: [{\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tticks: { suggestedMin: 0 }\n\t\t\t\t}]\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tdisplay: false\n\t\t\t}\n\t\t};\n\t\tthis.chartOptions = optionsSettings;\n\t}\n\n\tprivate getDataLength(): number {\n\t\tif (!this.chartData || this.chartData === null || this.chartData === undefined || this.chartData.length <= 0\n\t\t\t|| !this.chartData[0].data || this.chartData[0] === null || this.chartData[0] === undefined)\n\t\t\treturn 0;\n\t\treturn this.chartData[0].data.length;\n\t}\n\n\tprivate rgba(colour: Array<number>, alpha: number) {\n\t\treturn 'rgba(' + colour.concat(alpha).join(',') + ')';\n\t}\n\n\tprivate parseRgbaStr(s: string): Array<number> {\n\t\ts = s.replace(/[^0-9,]+/g,'');\n\t\treturn s.split(',').map(parseFloat);\n\t}\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/charts/chart.realtime.component.ts","import { Component, OnInit, OnChanges, SimpleChanges, Input, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';\nimport { GranularityType, ControlSize } from './chart.model';\n\n@Component({\n\tselector: 'chart-granularity',\n\ttemplate: `\n\t\t<div *ngIf=\"enable\" [ngClass]=\"{'btn-group':true, 'btn-group-lg':btnSize==='lg','btn-group-md':btnSize==='md','btn-group-sm':btnSize==='sm','btn-group-xs':btnSize==='xs'}\" role=\"group\" aria-label=\"granularity selector\">\n\t\t\t<button *ngIf=\"hourOption\" (click)=\"onGranularityTypeChange('hour')\" \n\t\t\t\t[ngClass]=\"{'btn btn-white':true, active: activeType === 'hour'}\" [disabled]=\"!hourEnable\">\n\t\t\t\t{{ 'ANALYTICS_AUDIENCE.WORD.HOUR' | translate:lang }}\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"dayOption\" (click)=\"onGranularityTypeChange('day')\"\n\t\t\t\t[ngClass]=\"{'btn btn-white':true, active: activeType === 'day'}\" [disabled]=\"!dayEnable\">\n\t\t\t\t{{ 'ANALYTICS_AUDIENCE.WORD.DAY' | translate:lang }}\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"weekOption\" (click)=\"onGranularityTypeChange('week')\"\n\t\t\t\t[ngClass]=\"{'btn btn-white':true, active: activeType === 'week'}\" [disabled]=\"!weekEnable\">\n\t\t\t\t{{ 'ANALYTICS_AUDIENCE.WORD.WEEK' | translate:lang }}\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"monthOption\" (click)=\"onGranularityTypeChange('month')\"\n\t\t\t\t[ngClass]=\"{'btn btn-white':true, active: activeType === 'month'}\" [disabled]=\"!monthEnable\">\n\t\t\t\t{{ 'ANALYTICS_AUDIENCE.WORD.MONTH' | translate:lang }}\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"yearOption\" (click)=\"onGranularityTypeChange('year')\"\n\t\t\t\t[ngClass]=\"{'btn btn-white':true, active: activeType === 'year'}\" [disabled]=\"!yearEnable\">\n\t\t\t\t{{ 'ANALYTICS_AUDIENCE.WORD.YEAR' | translate:lang }}\n\t\t\t</button>\n\t\t</div>\n\t\t`,\n\tstyles: [\n\t\t'@media (max-width: 600px) { :host {display:none;} }'\n\t],\n})\nexport class ChartGranularityComponent implements OnChanges {\n\t//By default this component is enabled\n\t@Input() enable: boolean = true;\n\t@Input() types: Array<GranularityType>;\n\t@Input() disabledTypes: Array<GranularityType>;\n\t@Input() activeType: GranularityType;\n\t@Input('size') btnSize: ControlSize = 'md';\n\n\t@Output() onTypeChange: EventEmitter<GranularityType> = new EventEmitter<GranularityType>();\n\n\thourOption: boolean = false;\n\tdayOption: boolean = false;\n\tweekOption: boolean = false;\n\tmonthOption: boolean = false;\n\tyearOption: boolean = false;\n\n\thourEnable: boolean = true;\n\tdayEnable: boolean = true;\n\tweekEnable: boolean = true;\n\tmonthEnable: boolean = true;\n\tyearEnable: boolean = true;\n\n\tconstructor(private cdr: ChangeDetectorRef) { }\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tthis.setAvailableTypes();\n\t\tthis.setStates();\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tonGranularityTypeChange(type: GranularityType): void {\n\t\tif (this.activeType !== type) {\n\t\t\tthis.activeType = type;\n\t\t\tif (this.onTypeChange)\n\t\t\t\tthis.onTypeChange.emit(this.activeType);\n\t\t}\n\t}\n\n\t//If 'all' is present, all granularity types will be shown\n\tprivate setAvailableTypes(): void {\n\t\tthis.hideAllOptions();\n\t\tif (this.types) {\n\t\t\tthis.types.every((ele: GranularityType) => {\n\t\t\t\tswitch (ele) {\n\t\t\t\t\tcase 'all':\n\t\t\t\t\t\tthis.showAllOptions();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tcase 'hour':\n\t\t\t\t\t\tthis.hourOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'day':\n\t\t\t\t\t\tthis.dayOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'week':\n\t\t\t\t\t\tthis.weekOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'month':\n\t\t\t\t\t\tthis.monthOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'year':\n\t\t\t\t\t\tthis.yearOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate setStates(): void {\n\t\tthis.enableAllOptions();\n\t\tif (this.disabledTypes) {\n\t\t\tthis.disabledTypes.every((ele: GranularityType) => {\n\t\t\t\tswitch (ele) {\n\t\t\t\t\tcase 'all':\n\t\t\t\t\t\tthis.disableAllOptions();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tcase 'hour':\n\t\t\t\t\t\tthis.hourEnable = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'day':\n\t\t\t\t\t\tthis.dayEnable = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'week':\n\t\t\t\t\t\tthis.weekEnable = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'month':\n\t\t\t\t\t\tthis.monthEnable = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'year':\n\t\t\t\t\t\tthis.yearEnable = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate hideAllOptions(): void {\n\t\tthis.hourOption = false;\n\t\tthis.dayOption = false;\n\t\tthis.weekOption = false;\n\t\tthis.monthOption = false;\n\t\tthis.yearOption = false;\n\t}\n\n\tprivate showAllOptions(): void {\n\t\tthis.hourOption = true;\n\t\tthis.dayOption = true;\n\t\tthis.weekOption = true;\n\t\tthis.monthOption = true;\n\t\tthis.yearOption = true;\n\t}\n\n\tprivate disableAllOptions(): void {\n\t\tthis.hourEnable = false;\n\t\tthis.dayEnable = false;\n\t\tthis.weekEnable = false;\n\t\tthis.monthEnable = false;\n\t\tthis.yearEnable = false;\n\t}\n\n\tprivate enableAllOptions(): void {\n\t\tthis.hourEnable = true;\n\t\tthis.dayEnable = true;\n\t\tthis.weekEnable = true;\n\t\tthis.monthEnable = true;\n\t\tthis.yearEnable = true;\n\t}\n\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/charts/chart.granularity.component.ts","import {\n\tAfterViewInit,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInject,\n\tInput,\n\tOnChanges,\n\tOnDestroy,\n\tOutput,\n\tSimpleChanges,\n\tViewChild,\n} from '@angular/core';\nimport moment from 'moment';\n\nimport { ChartConfig, ChartConfigData } from './chart.component.config';\nimport { ChartConfigModel, ChartType, GranularityType } from './chart.model';\nimport { ChartScaleHelper } from './chart.scale.helper';\n\n@Component({\n\tselector: 'chart-categories',\n\ttemplate: `<div [style.height]=\"chartHeight\" [hidden]=\"chartData == null\"><canvas #canvas></canvas></div><div class=\"loading-container\" [hidden]=\"chartData != null\" [style.height]=\"chartHeight\"><span class=\"spinner-small\"></span></div>`,\n\tproviders: [{ provide: ChartConfig, useValue: ChartConfigData }, ChartScaleHelper]\n})\nexport class ChartCategoriesComponent implements AfterViewInit, OnChanges, OnDestroy {\n\t//Inputs\n\t@Input() pointRadius  = 1;\n\t@Input() chartData: Array<chartjs.BaseDataset>;\n\t@Input() chartLabels: Array<any>;\n\t@Input() fontColor: any = null;\n\t@Input() gridColor: any = null;\n\t@Input() chartHeight: string = '300px';\n\t//needed to calculate the scale settings\n\t//Outputs\n\t@Output() onChartClicked: EventEmitter<{ event: chartjs.Event, elements: Array<any> }> =\n\tnew EventEmitter<{ event: chartjs.Event, elements: Array<any> }>();\n\t@Output() onChartHovered: EventEmitter<Array<any>> = new EventEmitter<Array<any>>();\n\n\t@ViewChild('canvas', { read: ElementRef }) canvasElement: ElementRef;\n\n\tprivate chartOptions: chartjs.BaseOptions | chartjs.BaseOptions;\n\tprivate chartInstance: chartjs.Chart;\n\tprivate isAfterViewInit: boolean = false;\n\n\tconstructor(private cdr: ChangeDetectorRef,\n\t\tprivate chartScaleHelper: ChartScaleHelper,\n\t\t@Inject(ChartConfig) private config: ChartConfigModel) {\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.isAfterViewInit = true;\n\t\tthis.createChart();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.isAfterViewInit)\n\t\t\tif ((changes['chartData'] && changes['chartData'] != undefined && changes['chartData'] != null) ||\n\t\t\t\tthis.chartData) {\n\t\t\t\tthis.createChart();\n\t\t\t}\n\t}\n\n\tngOnDestroy() {\n\t\tthis.destroyChart();\n\t}\n\n\tdestroyChart() {\n\t\t//destroy chart.js instance to load again correctly\n\t\tif (this.chartInstance) {\n\t\t\tthis.chartInstance.destroy();\n\t\t\t// this.chartInstance.options = null;\n\t\t}\n\t}\n\n\tcreateChart() {\n\t\tif (!this.chartData)\n\t\t\treturn;\n\n\t\tthis.destroyChart();\n\t\t//default dataset settings\n\t\tthis.setChartSettingsAndOptions();\n\n\t\t// create chart.js configuration object\n\t\tlet conf = {\n\t\t\ttype: 'bar',\n\t\t\toptions: this.chartOptions,\n\t\t\tdata: {\n\t\t\t\tlabels: this.chartLabels,\n\t\t\t\tdatasets: this.chartData\n\t\t\t}\n\t\t};\n\n\t\t//create and initialize chart.js instance\n\t\tthis.chartInstance = new Chart(this.canvasElement.nativeElement.getContext('2d'), conf);\n\t}\n\n\t//\n\tprivate setChartSettingsAndOptions(): void {\n\t\tthis.setBarChartOptions();\n\t\tthis.setBarChartSettings();\n\t}\n\n\tprivate setBarChartSettings(): void {\n\t\tthis.chartData.forEach((item, index) => {\n\t\t\t//colors\n\t\t\tlet colors = this.config.datasetColors[index];\n\t\t\tlet chartItem = <chartjs.BarChartDataset>item;\n\t\t\tchartItem.backgroundColor = this.rgba(colors, 0.6);\n\t\t\tchartItem.borderColor = this.rgba(colors, 1);\n\t\t\tchartItem.hoverBackgroundColor = this.rgba(colors, 0.8);\n\t\t\tchartItem.hoverBorderColor = this.rgba(colors, 1);\n\t\t\t//settings\n\t\t\tchartItem.borderWidth = 2;\n\t\t});\n\t}\n\n\tprivate setBarChartOptions(): void {\n\t\tlet optionsSettings: chartjs.BarChartOptions = {\n\t\t\tmaintainAspectRatio: false,\n\t\t\tanimation: false,\n\t\t\ttooltips: {\n\t\t\t\tmode: 'x-axis',\n\t\t\t\tdisplayColors: true,\n\t\t\t\tbodySpacing: 6,\n\t\t\t\tcallbacks: {\n\t\t\t\t\ttitle: (tooltip: Array<chartjs.TooltipItem>, data: any): string | string[] => {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tscales: {\n\t\t\t\txAxes: [{\n\t\t\t\t\tstacked: (this.chartData[0].data.length > 10) ? true : false,\n\t\t\t\t\tgridLines: { display: false },\n\t\t\t\t\tticks: {\n\t\t\t\t\t\tautoSkip: false\n\t\t\t\t\t}\n\t\t\t\t}],\n\t\t\t\tyAxes: [{\n\t\t\t\t\tdisplay: true,\n\t\t\t\t\tticks: { suggestedMin: 0 }\n\t\t\t\t}]\n\t\t\t},\n\t\t\tlegend: {\n\t\t\t\tdisplay: true\n\t\t\t}\n\t\t};\n\t\tthis.chartOptions = optionsSettings;\n\t}\n\n\tprivate getDataLength(): number {\n\t\tif (!this.chartData || this.chartData === null || this.chartData === undefined || this.chartData.length <= 0\n\t\t\t|| !this.chartData[0].data || this.chartData[0] === null || this.chartData[0] === undefined)\n\t\t\treturn 0;\n\t\treturn this.chartData[0].data.length;\n\t}\n\n\tprivate rgba(colour: Array<number>, alpha: number) {\n\t\treturn 'rgba(' + colour.concat(alpha).join(',') + ')';\n\t}\n\n\tprivate parseRgbaStr(s: string): Array<number> {\n\t\ts = s.replace(/[^0-9,]+/g,'');\n\t\treturn s.split(',').map(parseFloat);\n\t}\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/charts/chart.categories.component.ts","import {\n\tChangeDetectorRef,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnChanges,\n\tOutput,\n\tSimpleChanges,\n} from '@angular/core';\n\nimport { ChartType, ControlSize } from './chart.model';\n\n@Component({\n\tselector: 'chart-picker',\n\ttemplate: `\n\t\t<div *ngIf=\"enable\" role=\"group\" aria-label=\"chart type selector\" [ngClass]=\"{\n\t\t\t'btn-group':true, \n\t\t\t'btn-group-lg':size==='lg',\n\t\t\t'btn-group-md':size==='md',\n\t\t\t'btn-group-sm':size==='sm',\n\t\t\t'btn-group-xs':size==='xs'}\">\n\t\t\t<button *ngIf=\"lineOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'line'\" (click)=\"onChartTypeChange('line')\">\n\t\t\t\t<span class=\"fa fa-line-chart\" aria-hidden=\"true\"></span>\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"lineTimeOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'lineTime'\" (click)=\"onChartTypeChange('lineTime')\">\n\t\t\t\t<span class=\"fa fa-line-chart\" aria-hidden=\"true\"></span>\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"barOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'bar'\" (click)=\"onChartTypeChange('bar')\">\n\t\t\t\t<span class=\"fa fa-bar-chart\" aria-hidden=\"true\"></span>\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"pieOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'pie'\" (click)=\"onChartTypeChange('pie')\">\n\t\t\t\t<span class=\"fa fa-pie-chart\" aria-hidden=\"true\"></span>\n\t\t\t</button>\n\n\t\t\t <button *ngIf=\"doughnutOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'doughnut'\" (click)=\"onChartTypeChange('doughnut')\">\n\t\t\t\t<span class=\"fa fa-pie-chart\" aria-hidden=\"true\"></span>\n\t\t\t</button>\n\t\t</div>`,\n\tstyles: [\n\t\t'@media (max-width: 600px) { :host {display:none;} }'\n\t],\n})\nexport class ChartPickerComponent implements OnChanges {\n\t@Input() enable: boolean = true;\n\t@Input() chartTypes: Array<ChartType>;\n\t@Input() activeType: ChartType;\n\t@Input() size: ControlSize = 'md';\n\n\t@Output() chartTypeChanged: EventEmitter<ChartType> = new EventEmitter<ChartType>();\n\n\tlineOption: boolean = false;\n\tlineTimeOption: boolean = false;\n\tbarOption: boolean = false;\n\tpieOption: boolean = false;\n\tdoughnutOption: boolean = false;\n\n\t//\n\tconstructor(private cdr: ChangeDetectorRef) {}\n\t//\n\tngOnChanges(changes: SimpleChanges) {\n\t\tthis.setActiveChartTypes();\n\t\tthis.cdr.markForCheck();\n\t}\n\t//\n\tonChartTypeChange(chartType: ChartType): void {\n\t\tif (chartType != this.activeType && this.chartTypeChanged) {\n\t\t\tthis.activeType = chartType;\n\t\t\tthis.chartTypeChanged.emit(chartType);\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\t//\n\tprivate setActiveChartTypes(): void {\n\t\tthis.lineOption = false;\n\t\tthis.lineTimeOption = false;\n\t\tthis.barOption = false;\n\t\tthis.pieOption = false;\n\t\tthis.doughnutOption = false;\n\n\t\tif (this.chartTypes)\n\t\t\tthis.chartTypes.every((value: any) => {\n\t\t\t\tswitch (value) {\n\t\t\t\t\tcase 'all':\n\t\t\t\t\t\tthis.lineOption = true;\n\t\t\t\t\t\tthis.barOption = true;\n\t\t\t\t\t\tthis.pieOption = true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tcase 'line':\n\t\t\t\t\t\tthis.lineOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'lineTime':\n\t\t\t\t\t\tthis.lineTimeOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bar':\n\t\t\t\t\t\tthis.barOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pie':\n\t\t\t\t\t\tthis.pieOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'doughnut':\n\t\t\t\t\t\tthis.pieOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\tthis.cdr.markForCheck();\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/charts/chart.picker.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { ChartComponent } from './chart.component';\nimport { ChartRealtimeComponent } from './chart.realtime.component';\nimport { ChartGranularityComponent } from './chart.granularity.component';\nimport { ChartCategoriesComponent } from './chart.categories.component';\nimport { ChartPickerComponent } from './chart.picker.component';\nimport { DateRangePickerComponent } from '../date-range-picker/daterangepicker.component';\n\n\nlet COMP = [\n\tChartComponent,\n\tChartRealtimeComponent,\n\tChartGranularityComponent,\n\tChartCategoriesComponent,\n\tChartPickerComponent,\n\tDateRangePickerComponent\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tFormsModule,\n\t],\n\tdeclarations: COMP,\n\texports: COMP\n})\nexport class ChartModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/charts/chart.module.ts","import { ChangeDetectionStrategy, Component, EventEmitter } from '@angular/core';\n\n@Component({\n\tselector: 'check-buttons',\n\tinputs: ['name', 'model', 'value', 'iconMap'],\n\toutputs: ['valueChange'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: require('./check.buttons.component.html'),\n\tstyles: [require('./check.buttons.component.scss')]\n})\n\nexport class CheckButtonsComponent {\n\n\tname: string;\n\tmodel: string[];\n\ticonMap: { [key: string]: string; };\n\ticonMapKeys: string[];\n\tvalue: string[];\n\tvalueChange = new EventEmitter<string[]>();\n\n\tconstructor() { }\n\n\ticon(item: string): { [key: string]: boolean; } | null {\n\t\tlet val: { [key: string]: boolean; } | null = null;\n\t\tif (this.iconMapKeys == null)\n\t\t\tthis.iconMapKeys = Object.keys(this.iconMap);\n\t\tlet idx = this.iconMapKeys.indexOf(item);\n\t\tif (idx > -1)\n\t\t\tval = { [this.iconMap[this.iconMapKeys[idx]]]: true };\n\t\treturn val;\n\t}\n\n\tclick(item: string) {\n\t\tif (this.value != null) {\n\t\t\tlet idx = this.value.indexOf(item);\n\n\t\t\tif (idx > -1)\n\t\t\t\tthis.value.splice(idx, 1);\n\t\t\telse\n\t\t\t\tthis.value.push(item);\n\n\t\t\tthis.valueChange.emit(this.value);\n\t\t}\n\t}\n\n\tisActive(item: string): boolean {\n\t\treturn this.value.indexOf(item) > - 1;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/check/check.buttons.component.ts","import { Directive, Input } from '@angular/core';\n\n@Directive({\n\tselector: '[ngModel][floatonly]',\n\thost: {\n\t\t'(keypress)': 'onlyDecimalNumberKey($event)'\n\t}\n})\nexport class InputFloatOnlyDirective {\n\n\t@Input() floatonly = true;\n\n\tconstructor() { }\n\n\tonlyDecimalNumberKey(event: KeyboardEvent) {\n\t\tif (!this.floatonly)\n\t\t\treturn true;\n\t\tlet charCode = (event.which) ? event.which : event.keyCode;\n\t\tif (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))\n\t\t\treturn false;\n\t\treturn true;\n\t}\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/directive/floatOnly.directive.ts","import { Directive, Input } from '@angular/core';\n\n@Directive({\n\tselector: '[ngModel][integeronly]',\n\thost: {\n\t\t'(keypress)': 'onlyNumberKey($event)'\n\t}\n})\nexport class InputIntegerOnlyDirective {\n\n\t@Input() integeronly = true;\n\n\tconstructor() { }\n\n\tonlyNumberKey(event: KeyboardEvent) {\n\t\tif (!this.integeronly)\n\t\t\treturn true;\n\t\treturn (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57;\n\t}\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/directive/integerOnly.directive.ts","/**\n * Created by mthk on 22/06/16.\n */\nimport {Observable} from 'rxjs/Observable';\nimport {Subscription} from 'rxjs/Subscription';\nimport {Component, EventEmitter, Renderer2, ElementRef, ViewChild, SimpleChanges,\n\tOnChanges, OnDestroy} from '@angular/core';\nimport {DOMUtil} from '../../../util/dom.util';\n\nexport enum SearchComponentMode { INPUT, SEARCH, LIVE_SEARCH }\nexport enum SearchComponentState { NORMAL_STATE, CHOOSE_STATE }\n\nlet HTML = ''\n+ '<div class=\"input-group input-group-sm\" [ngClass]=\"ngStateClass()\">'\n\t+ '<div style=\"position: relative;\" class=\"input-group-sm\" '\n\t+ '[class.with-icon]=\"icon!=null\" [class.with-clear]=\"showClear && model!=null && model!=\\'\\'\">'\n\t\t+ '<i *ngIf=\"icon!=null\" class=\"fa input-icon\" [ngClass]=\"ngIcon()\"></i>'\n\t\t+ '<input #input type=\"text\" class=\"form-control\" [autofocus]=\"autofocus\" '\n\t\t+ '[attr.placeholder]=\"placeholder\" [attr.aria-label]=\"label\" [attr.tabindex]=\"tabindex\" '\n\t\t+ '[ngModel]=\"model\" (ngModelChange)=\"ngChange($event)\" '\n\t\t+ '(keyup.arrowup)=\"ngArrowUp($event)\" (keyup.arrowdown)=\"ngArrowDown($event)\" (keyup.enter)=\"ngEnter($event)\" '\n\t\t+ '(blur)=\"ngBlur($event)\">'\n\t\t+ '<a *ngIf=\"showClear && model!=null && model!=\\'\\'\" href=\"javascript:;\" (click)=\"clear()\" '\n\t\t\t+ 'class=\"fa fa-times input-clear\"></a>'\n\t+ '</div>'\n+ '</div>'\n+ '<ul #list *ngIf=\"isOpen==true\" class=\"dropdown-menu\">'\n\t+ '<li *ngIf=\"preloader\" class=\"dropdown-item\">'\n\t\t+ '<i class=\"fa fa-fw fa-spinner fa-spin\"></i>'\n\t\t+ '<small>szukanie</small><small><i> {{searchPhrase}} </i></small>'\n\t+ '</li>'\n\t+ '<li *ngIf=\"notfound\" class=\"dropdown-item\">'\n\t\t+ '<i class=\"fa fa-fw fa-exclamation\"></i><small> nie odnaleziono </small>'\n\t+ '</li>'\n\t+ '<li *ngFor=\"let result of results; let i = index\" class=\"dropdown-item\" [class.selected]=\"i==selectedResult\">'\n\t\t+ '<a href=\"javascript:;\" (click)=\"ngChoose(result)\" class=\"m-0\">{{formatResult(result)}}</a>'\n\t+ '</li>'\n+ '</ul>';\n\nlet STYLE = ':host {}'\n\t+ '.dropdown-menu{z-index: 10000;width: 100%;text-align: center;}'\n\t+ '.dropdown-menu .dropdown-item {width: inherit;overflow: hidden;white-space: nowrap;height: 24px;'\n\t\t+ 'line-height: 24px;text-align: center;}'\n\t+ '.dropdown-menu .dropdown-item.selected a{ background: #edf0f5; }'\n\t+ 'input{border-top-color: #FFF !important;border-left-color: #FFF !important;border-right-color: #FFF !important;'\n\t\t+ 'border-radius: 0 !important;}'\n\t+ '.CHOOSE_STATE input{border-bottom-color: #455a64 !important; }.CHOOSE_STATE .input-icon{color: #455a64; }'\n\t+ '.NORMAL_STATE input{border-bottom-color: #e2e7eb; !important; }.NORMAL_STATE .input-icon{color: #e2e7eb; }'\n\t+ '.with-icon input{padding-left: 30px;}'\n\t+ '.with-clear input {padding-right: 25px;}'\n\t+ '.input-icon, .input-clear{position: absolute;top: 0;z-index: 4;display: block;width: 30px;'\n\t\t\t+ 'height: 30px;line-height: 30px;text-align: center;}'\n\t+ '.input-icon{left:0;}.input-clear{right: 0;}'\n\t+ '.input-clear:hover, .input-clear:focus { text-decoration: none !important; }';\n\n@Component({\n    selector: 'search-component',\n    host: {'[class.dropup]': 'up', '[class.dropdown]': '!up', '[class.open]': 'open', '(document:scroll)': 'scroll()'},\n    template: HTML, styles: [STYLE],\n\tinputs: ['formatResult', 'icon', 'label', 'placeholder', 'showClear', 'mode', 'state', 'model',\n\t\t'tabindex', 'autofocus'],\n\toutputs: ['modelChange', 'onEnter', 'onBlur', 'onChoose']\n})\n\nexport class SearchComponent implements OnChanges, OnDestroy {\n\t\n\ticon: string;\n\tlabel: string;\n\tplaceholder: string;\n\tmodel: string | undefined;\n\tstate: SearchComponentState;\n\tmode: SearchComponentMode;\n\tformatResult: (result: any) => string;\n\tshowClear = true;\n\ttabindex = -1;\n\tautofocus = false;\n\tup: boolean;\n\tisOpen: boolean;\n\topen = false;\n\t@ViewChild('input') input: ElementRef;\n\t\n\t@ViewChild('list') list: ElementRef;\n\t\n\tmodelChange = new EventEmitter<string>();\n\tonChoose = new EventEmitter<any>();\n\tonEnter = new EventEmitter<string>();\n\tprivate onBlur = new EventEmitter<string>();\n\tprivate modes = SearchComponentMode;\n\tprivate firstModel: string | undefined;\n\tprivate results: string[] | null;\n\tprivate searchTimer: Subscription | null;\n\tprivate clearTimer: Subscription | null;\n\tprivate scrollTickId: number;\n\tprivate preloader = false;\n\tprivate notfound = false;\n\tprivate dropdownFocus = false;\n\tprivate selectedResult = 0;\n\t\n    constructor(public element: ElementRef,\n\t\t\t\tprivate renderer: Renderer2) {\n    \tthis.state = SearchComponentState.NORMAL_STATE;\n    \tthis.mode = this.modes.INPUT;\n\t}\n\t//\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.hasOwnProperty('model')) {\n\t\t\tif (changes['model'].isFirstChange())\n\t\t\t\tthis.firstModel = this.model;\n\t\t\tif (changes['model'].currentValue == null || changes['model'].currentValue == '') {\n\t\t\t\tif (this.state != SearchComponentState.NORMAL_STATE)\n\t\t\t\t\tthis.state = SearchComponentState.NORMAL_STATE;\n\t\t\t} else {\n\t\t\t\tif (this.state != SearchComponentState.CHOOSE_STATE)\n\t\t\t\t\tthis.state = SearchComponentState.CHOOSE_STATE;\n\t\t\t}\n\t\t}\n\t}\n    //\n    ngOnDestroy() {\n\t\tthis.close();\n\t\tthis.searchKill();\n\t\tthis.blurKill();\n\t\tif (!isNaN(this.scrollTickId))\n\t\t\twindow.cancelAnimationFrame(this.scrollTickId);\n\t\tthis.scrollTickId = NaN;\n    }\n    //\n\tonSearchNotFound() {\n\t\tthis.selectedResult = -1;\n\t\tthis.notfound = true;\n\t\tthis.results = null;\n\t}\n\t//\n\tonSearchFound(data: any) {\n\t\tthis.notfound = false;\n\t\tthis.results = data;\n\t}\n\t//\n\tonSearchSuccess() {\n\t\tthis.selectedResult = 0;\n\t\tthis.preloader = false;\n\t\tthis.scroll();\n\t}\n\t//\n\tonSearchFail() {\n\t\tthis.close();\n\t}\n\t//\n\tngStateClass() { return { [SearchComponentState[this.state]] : true }; }\n\tngIcon() { return {[this.icon]: true}; }\n\tscroll() {\n\t\tif (this.isOpen == true) {\n\t\t\tif (isNaN(this.scrollTickId)) {\n\t\t\t\tthis.scrollTickId = window.requestAnimationFrame(() => {\n\t\t\t\t\twindow.cancelAnimationFrame(this.scrollTickId);\n\t\t\t\t\tthis.scrollTickId = NaN;\n\t\t\t\t\tthis.checkUp();\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tngChange(value: string) {\n\t\tif (this.model != value) {\n\t\t\tthis.model = value;\n\t\t\tif (this.mode == SearchComponentMode.INPUT) {\n\t\t\t\tthis.open = false;\n\t\t\t\t// this.isOpen = false;\n\t\t\t\tthis.modelChange.emit(this.model);\n\t\t\t} else if (this.mode == SearchComponentMode.SEARCH || this.mode == SearchComponentMode.LIVE_SEARCH) {\n\t\t\t\tthis.searchKill();\n\t\t\t\tthis.searchStart();\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tngBlur(e: FocusEvent) {\n\t\tDOMUtil.stopPropagation(e);\n\t\t////\n\t\tthis.onBlur.emit(this.model);\n\t\t////\n\t\tif (this.firstModel == null && this.model == null)\n\t\t\treturn;\n\t\t////\n\t\tthis.blurKill();\n\t\tif (this.open == true) {\n\t\t\tthis.clearTimer = Observable.timer(250).subscribe(() => {\n\t\t\t\tthis.blurKill();\n\t\t\t\tif (!this.dropdownFocus)\n\t\t\t\t\tthis.clear();\n\t\t\t\tthis.dropdownFocus = false;\n\t\t\t});\n\t\t}\n\t}\n\t\n\tngEnter(e: KeyboardEvent) {\n\t\tDOMUtil.stopPropagation(e);\n\t\tif (this.selectedResult > -1 && this.isOpen == true && this.results) {\n\t\t\tthis.ngChoose(this.results[this.selectedResult]);\n\t\t} else {\n\t\t\tthis.onEnter.emit(this.model);\n\t\t}\n\t}\n\t\n\tngArrowUp(e: KeyboardEvent) {\n\t\tif (this.list != null && this.selectedResult != null && this.results != null && this.results.length > 0) {\n\t\t\tDOMUtil.stopPropagation(e);\n\t\t\t//\n\t\t\tif (this.selectedResult > 0)\n\t\t\t\tthis.selectedResult--;\n\t\t\t//\n\t\t\tthis.renderer.setProperty(this.list.nativeElement,\n\t\t\t\t'scrollTop', this.list.nativeElement.scrollTop -= 30);\n\t\t}\n\t}\n\t\n\tngArrowDown(e: KeyboardEvent) {\n\t\tif (this.list != null && this.selectedResult != null && this.results != null && this.results.length > 0) {\n\t\t\tDOMUtil.stopPropagation(e);\n\t\t\t//\n\t\t\tif (this.selectedResult < this.results.length - 1)\n\t\t\t\tthis.selectedResult++;\n\t\t\t//\n\t\t\tthis.renderer.setProperty(this.list.nativeElement,\n\t\t\t\t'scrollTop', this.list.nativeElement.scrollTop += 30);\n\t\t}\n\t}\n\t\n\tprivate searchStart() {\n\t\tthis.searchTimer = Observable.timer(250).subscribe(() => {\n\t\t\tthis.searchKill();\n\t\t\tthis.notfound = false;\n\t\t\tthis.open = this.preloader = (this.mode == this.modes.LIVE_SEARCH);\n\t\t\t//this.isOpen = this.mode == this.modes.LIVE_SEARCH && this.open == true;\n\t\t\tthis.modelChange.emit(this.model);\n\t\t});\n\t}\n\t//\n\tprivate searchKill() {\n\t\tif (this.searchTimer != null && !this.searchTimer.closed)\n\t\t\tthis.searchTimer.unsubscribe();\n\t\tthis.searchTimer = null;\n\t}\n\t//\n    private blurKill() {\n\t\tif (this.clearTimer != null && !this.clearTimer.closed)\n\t\t\tthis.clearTimer.unsubscribe();\n\t\tthis.clearTimer = null;\n\t}\n    //\n    private ngChoose(item: any) {\n\t\tif (item != null) {\n\t\t\tif (this.formatResult != null)\n\t\t\t\tthis.model = this.formatResult(item);\n\t\t\tthis.onChoose.emit(item);\n\t\t}\n\t\tthis.close();\n\t\tthis.dropdownFocus = true;\n    }\n\t//\n\tprivate clear() {\n\t\tthis.state = SearchComponentState.NORMAL_STATE;\n\t\tthis.model = undefined;\n\t\tthis.modelChange.emit(this.model);\n\t\tthis.onChoose.emit(this.model);\n\t\tthis.close();\n\t}\n\t//\n\tprivate close() {\n\t\tif (this.open != false) {\n\t\t\tthis.dropdownFocus = false;\n\t\t\tthis.open = false;\n\t\t\tthis.isOpen = false;\n\t\t\tthis.preloader = false;\n\t\t\tthis.notfound = false;\n\t\t\tthis.results = null;\n\t\t\tthis.firstModel = undefined;\n\t\t}\n\t}\n\t\n\tprivate checkUp() {\n\t\tlet bcr = this.element.nativeElement.getBoundingClientRect();\n\t\tlet vph = document.body.clientHeight;\n\t\tthis.up = bcr.bottom + (bcr.height >> 1) > (vph >> 1);\n\t}\n\t\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/search/search.component.ts","import {Pipe, PipeTransform} from '@angular/core';\nimport {DropdownModel} from '../dropdown.model';\n\n@Pipe({name: 'dropdownListPipe'})\n\nexport class DropdownListPipe implements PipeTransform {\n\ttransform(value: DropdownModel[], selected?: DropdownModel): DropdownModel[] {\n\t\tif (selected == null)\n\t\t\treturn value;\n\t\treturn value.filter((i: DropdownModel) => { return i.value != selected.value; });\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/dropdown/list/dropdown.list.pipe.ts","/**\n * Created by mthk on 29/10/16.\n */\nimport {trigger, state, style, transition, animate} from '@angular/core';\n\nexport const ShadowAnimation = trigger('ShadowAnimation', [\n\tstate('active', style({ boxShadow: '0px 2px 2px 0px rgba(0, 0, 0, 0.25)'})),\n\tstate('inactive',   style({ boxShadow: 'none' })),\n\ttransition('inactive => active', animate('100ms ease-in')),\n\ttransition('active => inactive', animate('100ms ease-out'))\n]);\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/dropdown/dropdown.animation.ts","/**\n * Created by mthk on 17/09/16.\n */\nimport {Component, EventEmitter, ElementRef, SimpleChanges, OnChanges, ChangeDetectionStrategy} from '@angular/core';\nimport {DropdownModel, DropdownListDirection} from './dropdown.model';\nimport {DOMUtil} from '../../../util/dom.util';\nimport {DropdownListPipe} from './list/dropdown.list.pipe';\nimport {ShadowAnimation} from './dropdown.animation';\n\n@Component({\n\tselector: 'dropdown',\n\thost: {\n\t\t'[class.active]': 'active',\n\t\t'[class.up]': 'direction==dirValue.up',\n\t\t'[class.down]': 'direction==dirValue.down',\n\t\t'(document:click)': 'documentClick($event)',\n\t\t'(document:scroll)': 'documentScroll()'\n\t},\n\tinputs: [\n\t\t'direction',\n\t\t'model',\n\t\t'value',\n\t\t'label',\n\t\t'disabled'\n\t],\n\toutputs: ['onSelect', 'valueChange'],\n\ttemplate: require('./dropdown.component.html'),\n\tstyles: [require('./dropdown.component.scss')],\n\tanimations: [ShadowAnimation],\n\tviewProviders: [DropdownListPipe],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class DropdownComponent implements OnChanges {\n\n\tmodel: DropdownModel[];\n\tlabel: string;\n\tactive = false;\n\tdisabled: boolean;\n\tselectedItem: DropdownModel;\n\tvalue: any;\n\tdirValue =  DropdownListDirection;\n\tdirection =  DropdownListDirection.down;\n\tonSelect = new EventEmitter<DropdownModel>();\n\tvalueChange = new EventEmitter<any>();\n\t\n\tprivate selected = 0;\n\t\n\tconstructor(private element: ElementRef) {}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.hasOwnProperty('model') && this.model.length > 0) {\n\t\t\tthis.disabled = this.model.length < 2;\n\t\t\tthis.selectedItem = this.model[this.selected];\n\t\t}\n\t\t\n\t\tif (changes.hasOwnProperty('value') && (this.value !== null) && (this.model !== null)) {\n\t\t\tthis.selected = 0;\n\t\t\tfor (let i = 0, t = this.model.length; i < t; i++) {\n\t\t\t\tif (this.value.value === this.model[i].value) {\n\t\t\t\t\tthis.selected = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.selectedItem = this.model[this.selected];\n\t\t}\n\t}\n\t/** direction class name */\n\t//directionClass(): BoolMap { return { ['direction-' + DropdownListDirection[this.direction]]: true }; }\n\t/** document click handler */\n\tdocumentClick(e: MouseEvent) {\n\t\tif (this.active == true && e != null && e.target != null && e.target instanceof Node\n\t\t\t&& !DOMUtil.isDescendant(this.element.nativeElement, <Node>e.target)) {\n\t\t\tDOMUtil.stopPropagation(e);\n\t\t\tthis.active = false;\n\t\t}\n\t}\n\t/** document scroll handler */\n\tdocumentScroll() {\n\t\tif (this.active == true)\n\t\t\tthis.active = false;\n\t}\n\t\n\tgetIcoCssClasses(o: any) {\n\t\treturn { [o.icon]: true };\n\t}\n\t\n\tonToggle() {\n\t\tthis.active = this.disabled ? false : !this.active;\n\t}\n\t\n\tselect(listItem: DropdownModel) {\n\t\tthis.selectedItem = listItem;\n\t\tthis.active = false;\n\t\tthis.valueChange.emit(listItem.value);\n\t\tthis.onSelect.emit(this.selectedItem);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/dropdown/dropdown.component.ts","/**\n * Created by mthk on 17/09/16.\n */\nimport {\n\tComponent, EventEmitter, ElementRef, ViewChild, OnDestroy, ChangeDetectionStrategy, Renderer2\n} from '@angular/core';\nimport {Subscription} from 'rxjs/Subscription';\nimport {DropdownListPipe} from './dropdown.list.pipe';\nimport {DropdownModel, DropdownListDirection} from '../dropdown.model';\nimport {DOMUtil} from '../../../../util/dom.util';\nimport {ShadowAnimation} from '../dropdown.animation';\n\n@Component({\n\tselector: 'dropdown-list',\n\thost: {'(document:keydown)': 'documentKeyDown($event)'},\n\tinputs: ['direction', 'model', 'selected'],\n\toutputs: ['onSelect'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: require('./dropdown.list.component.html'),\n\tstyles: [require('./dropdown.list.component.scss')],\n\tanimations: [ShadowAnimation]\n})\n\nexport class DropdownListComponent implements OnDestroy {\n\t\n\tmodel: DropdownModel[];\n\tselected: DropdownModel;\n\tdirection: DropdownListDirection;\n\tselectedListIdx = -1;\n\tonSelect = new EventEmitter<DropdownModel>();\n\t@ViewChild('list') list: ElementRef;\n\tprivate initTimer: Subscription | null;\n\t\n\t/** constructor */\n\t\n\tconstructor(private pipe: DropdownListPipe, private renderer: Renderer2) { }\n\tngAfterViewInit() {\n\t\tif (this.direction == DropdownListDirection.up)\n\t\t\tthis.renderer.setStyle(this.list.nativeElement,\n\t\t\t\t'top', (-(this.list.nativeElement.getBoundingClientRect().height)) + 'px');\n\t\telse\n\t\t\tthis.renderer.setStyle(this.list.nativeElement, 'top', 'initial');\n\t}\n\t\n\tngOnDestroy() {\n\t\tif (this.initTimer != null)\n\t\t\tthis.initTimer.unsubscribe();\n\t\tthis.initTimer = null;\n\t}\n\t/** direction class name */\n\t//directionClass(): BoolMap { return { ['direction-' + DropdownListDirection[this.direction]]: true }; }\n\t/** click select handler */\n\tselect(item: DropdownModel) {\n\t\tthis.selected = item;\n\t\tthis.onSelect.emit(this.selected);\n\t}\n\t/** template icon */\n\ticonClasses(o: any) { return { [o.icon]: true }; }\n\t/** document kye down handler */\n\tdocumentKeyDown(e: KeyboardEvent) {\n\t\tDOMUtil.stopPropagation(e);\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowUp':\n\t\t\t\tthis.arrowUp();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tthis.arrowDown();\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\t\tthis.enter();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t\treturn;\n\t}\n\t/** keyboard arrow up handler */\n\tprivate arrowUp() {\n\t\tif (this.selectedListIdx > 0)\n\t\t\tthis.selectedListIdx--;\n\t\telse\n\t\t\tthis.selectedListIdx =  this.model.length - 2;\n\t}\n\t/** keyboard arrow down handler */\n\tprivate arrowDown() {\n\t\tif (this.selectedListIdx < this.model.length - 2)\n\t\t\tthis.selectedListIdx++;\n\t\telse\n\t\t\tthis.selectedListIdx = 0;\n\t}\n\t/** keyboard enter handler */\n\tprivate enter() {\n\t\tif (this.model != null && this.selected != null && this.selectedListIdx > -1) {\n\t\t\tlet items = this.pipe.transform(this.model, this.selected);\n\t\t\tthis.select(items[this.selectedListIdx]);\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/dropdown/list/dropdown.list.component.ts","/**\n * Created by mthk on 07/08/16.\n */\nimport { ChangeDetectionStrategy, Component, EventEmitter } from '@angular/core';\n\n@Component({\n\tselector: 'image-grid',\n\ttemplate: require('./image.grid.component.html'),\n\tstyles: [require('./image.grid.component.scss')],\n\tinputs: [\n        'name',\n\t\t'value',\n\t\t'values',\n\t\t'urlParser',\n\t\t'placeholder'\n\t],\n\toutputs: [\n\t\t'valueChange'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class ImageGridComponent {\n\t\n\tname: string;\n\tplaceholder: string;\n    urlParser: (v: string) => string;\n    values: any[];\n    value = '';\n\tvalueChange = new EventEmitter<string>();\n\n\tgetImageClass(value: string) {\n        return {\n            [this.name + '-' + value]: true,\n            'active': this.value == value\n        };\n    }\n\n    onClick(val: string) {\n        this.value = val;\n        this.valueChange.emit(this.value);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/grid/image/image.grid.component.ts","/**\n * Created by mthk on 07/08/16.\n */\nimport {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tRenderer2,\n\tSimpleChanges,\n\tViewChild,\n} from '@angular/core';\n\nexport interface EditableFieldsetComponentEvent { value: any | boolean; source: any; }\n\n@Component({\n\tselector: 'editable-input',\n\thost: {\n\t\t'[class.on]': 'active',\n\t\t'[class.off]': '!active',\n\t\t'[class.over]': 'isOver'\n\t},\n\ttemplate: '' +\n\t\t'<input #input [attr.name]=\"name\" [attr.type]=\"type\" [attr.autocomplete]=\"autocomplete\" [attr.size]=\"size\" ' +\n\t\t' [(ngModel)]=\"value\" [attr.placeholder]=\"placeholder\" [attr.required]=\"required\"' +\n\t\t' [floatonly]=\"floatOnly\" [integeronly]=\"integerOnly\" [attr.minlength]=\"minlength\" [attr.maxlength]=\"maxlength\"' +\n\t\t' (change)=\"change()\" (focus)=\"focus($event)\" (blur)=\"blur($event)\"' +\n\t\t' (mouseover)=\"over()\" (mouseout)=\"out()\"' +\n\t\t' (keyup.enter)=\"keyupEnter($event)\" (keyup.escape)=\"keyupEscape($event)\" (keyup)=\"keyup($event)\">' +\n\t\t'<i *ngIf=\"isOver || active\" class=\"fa edit-ico fa-pencil\"></i>',\n\tstyles: [require('./editable.input.component.scss')],\n\tinputs: [\n\t\t'active',\n\t\t'type',\n\t\t'value',\n\t\t'name',\n\t\t'placeholder',\n\t\t'required',\n\t\t'autocomplete',\n\t\t'floatOnly',\n\t\t'integerOnly',\n\t\t'minlength',\n\t\t'maxlength'\n\t],\n\toutputs: [\n\t\t'activeChange',\n\t\t'focusChange',\n\t\t'blurChange',\n\t\t'keyupChange',\n\t\t'enterUpChange',\n\t\t'escapeUpChange',\n\t\t'valueChange'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class EditableInputComponent {\n\n\t@ViewChild('input') input: ElementRef;\n\tactive = false;\n\ttype: 'text' | 'password' | 'email' | 'search' | 'tel' | 'url' = 'text';\n\tvalue: any = '';\n\tname: string;\n\tplaceholder: string;\n\trequired: boolean;\n\tautocomplete: 'on' | 'off';\n\tfloatOnly = false;\n\tintegerOnly = false;\n\tminlength: number | null = null;\n\tmaxlength: number | null = null;\n\tisOver = false;\n\tsize: number;\n\tvalueChange = new EventEmitter<any>();\n\tprivate activeChange = new EventEmitter<boolean>();\n\tprivate focusChange = new EventEmitter<EditableFieldsetComponentEvent>();\n\tprivate blurChange = new EventEmitter<EditableFieldsetComponentEvent>();\n\tprivate keyupChange = new EventEmitter<EditableFieldsetComponentEvent>();\n\tprivate enterUpChange = new EventEmitter<EditableFieldsetComponentEvent>();\n\tprivate escapeUpChange = new EventEmitter<EditableFieldsetComponentEvent>();\n\tprivate minSize = 32;\n\n\n\tconstructor(private renderer: Renderer2, private cdr: ChangeDetectorRef) { }\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.hasOwnProperty('value') || changes.hasOwnProperty('placeholder')) {\n\t\t\tlet s = this.value ? (this.value + '').length + 2\n\t\t\t\t: this.placeholder ? this.placeholder.length + 2 : null;\n\n\t\t\tif (s && s != this.size)\n\t\t\t\tthis.size = s > this.minSize ? s : this.minSize;\n\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\n\topen() {\n\t\tthis.input.nativeElement.focus();\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tfocus(e: FocusEvent) {\n\t\tif (this.active == false) {\n\t\t\tthis.active = true;\n\t\t\tthis.cdr.markForCheck();\n\t\t\t// this.tooltip.hide();\n\t\t\tthis.activeChange.emit(this.active);\n\t\t\tthis.focusChange.emit({ value: this.value, source: e });\n\t\t}\n\t}\n\n\tblur(e: FocusEvent) {\n\t\tif (this.active == true) {\n\t\t\tthis.active = false;\n\t\t\tthis.cdr.markForCheck();\n\t\t\tthis.activeChange.emit(this.active);\n\t\t\tthis.blurChange.emit({ value: this.value, source: e });\n\t\t}\n\t}\n\n\tkeyup(e: KeyboardEvent) {\n\t\tthis.keyupChange.emit({ value: this.value, source: e });\n\t}\n\n\tkeyupEnter(e: KeyboardEvent) {\n\t\tthis.enterUpChange.emit({ value: this.value, source: e });\n\t}\n\n\tkeyupEscape(e: KeyboardEvent) {\n\t\tthis.escapeUpChange.emit({ value: this.value, source: e });\n\t}\n\n\tchange() {\n\t\tthis.valueChange.emit(this.value);\n\t}\n\n\tclose() {\n\t\tthis.input.nativeElement.blur();\n\t}\n\n\tover() {\n\t\tif (this.isOver != true)\n\t\t\tthis.isOver = true;\n\t}\n\n\tout() {\n\t\tif (this.isOver != false)\n\t\t\tthis.isOver = false;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/input/editable.input.component.ts","/**\n * Created by tkwiatek on 4/13/16.\n */\nimport {Component, ElementRef, EventEmitter, ViewChild} from '@angular/core';\nimport {DOMUtil} from '../../../../util/dom.util';\n\n@Component({\n    selector: 'data-list',\n    host: {\n\t\t// '(document:click)': 'documentClick($event)',\n\t\t// '(mouseover)': 'over=true;', '(mouseout)': 'over=false;',\n\t\t// '[class.empty]': 'value?.length==0',\n\t\t// '[class.active]': 'active',\n\t\t// '[class.on]': 'over',\n\t\t// '[class.off]': '!over'\n    },\n    template: require('./data.list.component.html'),\n\t// compiled from scss\n\tstyles: [require('./data.list.component.scss')],\n    inputs: [\n\t\t// 'active', 'name', 'placeholder', \n\t\t'value'\n\t],\n    outputs: [\n\t\t// 'search', \n\t\t'valueChange',\n\t\t//  'tagsChange'\n\t]\n})\n\nexport class DataListComponent {\n\t//\n\t// @ViewChild(SearchComponent) input: SearchComponent;\n    //@Input()\n    // active: boolean;\n    // name: string;\n    // placeholder: string;\n\tcolumns: string[];\n\tover = false;\n\tprivate _value: any[];\n\tset value(val: any[]) {\n\t\tif (val != null && val.length > 0)\n\t\t\tthis.columns = Object.keys(val[0]);\n\t\tthis._value = val;\n\t}\n\tget value(): any[] {\n\t\treturn this._value;\n\t}\n    // private tags: string[];\n    //@Output()\n    // private tagsChange = new EventEmitter<string[]>();\n    private valueChange = new EventEmitter<any[]>();\n    // private search = new EventEmitter<string>();\n    // private cantClose: boolean;\n\t//\n\t// private model: string;\n\t// private mode: SearchComponentMode;\n\t//\n    constructor(private element: ElementRef) {\n\t\t// this.mode = SearchComponentMode.LIVE_SEARCH;\n\t}\n    //\n\t// onSearchNotFound() {\n\t\t// if (this.input != null)\n\t\t\t// this.input.onSearchNotFound();\n\t// }\n\t// onSearchFound(data: any) {\n\t\t// if (this.input != null)\n\t\t\t// this.input.onSearchFound(data);\n\t// }\n\t//\n\t// onSearchSuccess() {\n\t// \tif (this.input != null)\n\t// \t\tthis.input.onSearchSuccess();\n\t// }\n\t// onSearchFail() {\n\t// \tif (this.input != null)\n\t// \t\tthis.input.onSearchFail();\n\t// }\n\t//\n\tdocumentClick(e: MouseEvent) {\n\t\tif (e != null && e.target != null && e.target instanceof Node) {\n\t\t\tif (DOMUtil.isDescendant(this.element.nativeElement, <Node>e.target))\n\t\t\t\tthis.open();\n\t\t\telse\n\t\t\t\tthis.close();\n\t\t}\n\t}\n\t//\n\t// onRemove(i: number) {\n\t// \tif (i < this.value.length) {\n\t// \t\tthis.cantClose = true;\n\t// \t\tthis.value.splice(i , 1);\n\t// \t\tthis.valueChange.emit(this.value);\n\t// \t}\n\t// }\n\t//\n\t// onNew(tag: string) {\n\t// \tif (tag != null || tag != '') {\n\t// \t\tthis.cantClose = true;\n\t// \t\tthis.addValue(tag);\n\t// \t\tthis.model = null;\n\t// \t}\n\t// }\n\t//\n\t// onChange(e: any) {\n\t// \tif (e != null && e.hasOwnProperty('key')) {\n\t// \t\tthis.cantClose = true;\n\t// \t\tthis.addValue(e.key);\n\t// \t\tthis.model = null;\n\t// \t}\n\t// }\n\t//\n\tprivate open() {\n\t\t// if (this.active != true) {\n\t\t// \tthis.active = true;\n\t\t// \tthis.over = true;\n\t\t// }\n\t}\n\t//\n\tprivate close() {\n\t\t// if (this.active != false) {\n\t\t// \tif (this.input != null) {\n\t\t// \t\tif (this.cantClose == false) {\n\t\t// \t\t\tthis.active = false;\n\t\t// \t\t\tthis.over = false;\n\t\t// \t\t}\n\t\t// \t\tthis.cantClose = false;\n\t\t// \t} else {\n\t\t// \t\tthis.active = false;\n\t\t// \t\tthis.over = false;\n\t\t// \t}\n\t\t// }\n\t}\n\t//\n\tprivate addValue(v: string) {\n\t\t// if (this.value != null && this.value.indexOf(v) < 0) {\n\t\t// \tthis.value.push(v);\n\t\t// \tthis.valueChange.emit(this.value);\n\t\t// }\n\t}\n\t//\n\tprivate formatResult(result: any) {\n\t\t// if (result != null && result.hasOwnProperty('key'))\n\t\t// \treturn result.key;\n\t};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/list/data/data.list.component.ts","/**\n * Created by mthk on 02/08/16.\n */\nexport class MathUtil {\n\tstatic truncUp(float: number): number {\n\t\treturn (float % 1 !== 0) ? ~~(float + 1) : float;\n\t}\n\tstatic trunc(float: number): number {\n\t\treturn ~~(float);\n\t}\n\tstatic min(v1: number, v2: number): number {\n\t\treturn v1 < v2 ? v1 : v2;\n\t}\n\tstatic max(v1: number, v2: number): number {\n\t\treturn v1 > v2 ? v1 : v2;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/util/math.util.ts","/**\n * Created by mthk on 01/10/16.\n */\nimport {Subject} from 'rxjs/Subject';\nimport {Observable} from 'rxjs/Observable';\nimport {Injectable} from '@angular/core';\nimport {PaginationModel} from './pagination.model';\n\n@Injectable()\nexport class PaginationService {\n\t//\n\tmodel: PaginationModel;\n\t//\n\tshowStream$: Observable<PaginationModel>;\n\temitStream$: Observable<PaginationModel>;\n\tresetStream$: Observable<any>;\n\t//\n\tshowSubject = new Subject<PaginationModel>();\n\temitSubject = new Subject<PaginationModel>();\n\tresetSubject = new Subject<any>();\n\t//\n\tconstructor() {\n\t\tthis.showStream$ = this.showSubject.asObservable();\n\t\tthis.emitStream$ = this.emitSubject.asObservable();\n\t\tthis.resetStream$ = this.resetSubject.asObservable();\n\t}\n\tshow(data: PaginationModel) {\n\t\tthis.model = data;\n\t\tconsole.warn('[>]PAG.show', data);\n\t\tthis.showSubject.next(this.model);\n\t}\n\temit() {\n\t\tif (this.model != null) {\n\t\t\tconsole.warn('[>]PAG.emit', this.model);\n\t\t\tthis.emitSubject.next(this.model);\n\t\t}\n\t}\n\treset() {\n\t\tif (this.model != null) {\n\t\t\tthis.model.actual = 1;\n\t\t\tconsole.warn('[>]PAG.reset');\n\t\t\tthis.resetSubject.next({});\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/pagination/pagination.service.ts","/**\n * Created by mthk on 24/03/16.\n */\nimport  {Component, ChangeDetectorRef, ChangeDetectionStrategy, ElementRef, HostListener, OnDestroy,\n\tOnInit, AfterViewChecked, ViewChildren, QueryList} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {Subscription} from 'rxjs/Subscription';\nimport {MathUtil} from '../../../../util/math.util';\nimport {DropdownModel} from '../../dropdown/dropdown.model';\nimport {PaginationService} from '../pagination.service';\n\n\n@Component({\n    selector: 'pagination-btns',\n\thost: { '[class.dropdownMode]': 'dropdownMode' },\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n    template: require('./pagination.buttons.component.html'),\n\tstyles: [require('./pagination.buttons.component.scss')]\n})\n\nexport class PaginationButtonsComponent implements OnInit, AfterViewChecked, OnDestroy {\n\t\n\tdropdownMode = false;\n\t@ViewChildren('button') btns: QueryList<ElementRef>;\n\t//\n    private visible = false;\n    private pagesData: number[];\n\t//\n\tprivate showPrevBtn = false;\n\tprivate showNextBtn = false;\n\tprivate showPrevPortionBtn = false;\n\tprivate showNextPortionBtn = false;\n\t//\n\t\n\tprivate dropdownModel: DropdownModel[];\n\tprivate beforeDropdownWidth: number;\n\t//\n\tprivate initTimer: Subscription | null;\n\t//\n\tconstructor(private element: ElementRef, private cdr: ChangeDetectorRef, private service: PaginationService) {}\n    //\n\tngOnInit() {\n\t\tthis.collectPageData();\n\t\tthis.checkButtons();\n\t\tif (this.initTimer != null)\n\t\t\tthis.initTimer.unsubscribe();\n\t\tthis.initTimer = Observable.timer(1).take(1).subscribe(() => this.checkSize());\n\t}\n\tngAfterViewChecked() {\n\t\tif (this.initTimer != null)\n\t\t\tthis.initTimer.unsubscribe();\n\t\tthis.initTimer = Observable.timer(1).take(1).subscribe(() => this.checkSize());\n\t}\n\tngOnDestroy() {\n\t\tif (this.initTimer != null)\n\t\t\tthis.initTimer.unsubscribe();\n\t\tthis.initTimer = null;\n\t}\n\t//\n\treset() {\n\t\tif (this.service.model) {\n\t\t\tthis.service.model.portion.start = 0;\n\t\t\tthis.service.model.portion.actual = 0;\n\t\t}\n\t\tthis.collectPageData();\n\t\tthis.checkButtons();\n\t\tthis.checkSize();\n\t\tthis.cdr.markForCheck();\n\t}\n\t//\n\t@HostListener('window:resize') checkSize() {\n\t\tif (this.btns != null) {\n\t\t\tlet hostW = (<Element>this.element.nativeElement).getBoundingClientRect().width, total = 0;\n\t\t\tthis.btns.forEach((b: ElementRef) => total += b.nativeElement.getBoundingClientRect().width);\n\t\t\tif (total > hostW)\n\t\t\t\tthis.dropdownOn(total);\n\t\t\telse if (hostW > this.beforeDropdownWidth)\n\t\t\t\tthis.dropdownOff();\n\t\t}\n\t\tthis.visible = true;\n\t\tthis.cdr.markForCheck();\n\t}\n\t//\n\tprivate dropdownOn(total: number) {\n\t\tthis.dropdownMode = true;\n\t\tthis.beforeDropdownWidth = total;\n\t\tthis.dropdownModel = [];\n\t\tif (this.service.model != null) {\n\t\t\tfor (let i = 0; i < this.service.model.portion.total; i++)\n\t\t\t\tthis.dropdownModel.push({value: i + 1, label: 'strona #' + (i + 1)});\n\t\t}\n\t}\n\tprivate dropdownOff() {\n\t\tthis.dropdownMode = false;\n\t\tthis.beforeDropdownWidth = NaN;\n\t\tthis.dropdownModel = [];\n\t}\n\tprivate dropdownSelectPage(page: DropdownModel) {\n\t\tif (this.service.model) {\n\t\t\tif (this.service.model.actual != page.value) {\n\t\t\t\tthis.service.model.actual = page.value;\n\t\t\t\tthis.service.emit();\n\t\t\t\tthis.checkButtons();\n\t\t\t}\n\t\t}\n\t}\n\t\t//\n\tprivate prevPage() {\n\t\tif (this.service.model) {\n\t\t\tlet newActive = this.service.model.actual - 1;\n\t\t\tif (newActive <= this.service.model.portion.start)\n\t\t\t\tthis.prevPortion();\n\t\t\tif (this.service.model.actual != newActive) {\n\t\t\t\tthis.service.model.actual = newActive;\n\t\t\t\tthis.service.emit();\n\t\t\t\tthis.checkButtons();\n\t\t\t}\n\t\t}\n\t}\n\t//\n\tprivate nextPage() {\n\t\tif (this.service.model) {\n\t\t\tlet newActive = this.service.model.actual + 1;\n\t\t\tif (newActive > this.service.model.portion.total)\n\t\t\t\tthis.nextPortion();\n\t\t\tif (this.service.model.actual != newActive) {\n\t\t\t\tthis.service.model.actual = newActive;\n\t\t\t\tthis.service.emit();\n\t\t\t\tthis.checkButtons();\n\t\t\t}\n\t\t}\n\t}\n\t//\n\tprivate prevPortion() {\n\t\tif (this.service.model != null) {\n\t\t\tthis.service.model.portion.actual--;\n\t\t\tthis.service.model.portion.start = this.service.model.portion.start - this.service.model.portion.size;\n\t\t\tthis.collectPageData();\n\t\t\tthis.checkButtons();\n\t\t\tthis.click(this.pagesData[0]);\n\t\t}\n\t}\n\tprivate nextPortion() {\n\t\tif (this.service.model != null) {\n\t\t\tthis.service.model.portion.actual++;\n\t\t\tthis.service.model.portion.start = this.service.model.portion.start + this.service.model.portion.size;\n\t\t\tthis.collectPageData();\n\t\t\tthis.checkButtons();\n\t\t\tthis.click(this.pagesData[0]);\n\t\t}\n\t}\n\t//\n\tprivate click(page: number) {\n\t\tif (this.service.model) {\n\t\t\tif (page != null) {\n\t\t\t\tthis.service.model.actual = page;\n\t\t\t\tthis.service.emit();\n\t\t\t\tthis.checkButtons();\n\t\t\t}\n\t\t}\n\t}\n\t//\n\tprivate collectPageData() {\n\t\tif (this.service.model) {\n\t\t\tthis.pagesData = [];\n\t\t\tthis.service.model.portion.size = MathUtil.min(this.service.model.size, this.service.model.max);\n\t\t\tthis.service.model.portion.length = MathUtil.truncUp(this.service.model.total / this.service.model.size);\n\t\t\tthis.service.model.portion.total =\n\t\t\t\tMathUtil.min(this.service.model.portion.size + this.service.model.portion.start,\n\t\t\t\t\tthis.service.model.portion.length);\n\t\t\tfor (let i = this.service.model.portion.start; i < this.service.model.portion.total; i++)\n\t\t\t\tthis.pagesData.push((i + 1));\n\t\t}\n\t}\n\t//\n\tprivate checkButtons() {\n\t\t//\n\t\tif (this.service.model) {\n\t\t\tlet changed = false;\n\t\t\t// <\n\t\t\tlet pb = this.service.model.actual > 1;\n\t\t\tif (this.showPrevBtn != pb) {\n\t\t\t\tthis.showPrevBtn = pb;\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\t// <<<\n\t\t\tlet ppb = this.service.model.portion.actual > 0;\n\t\t\tif (this.showPrevPortionBtn != ppb) {\n\t\t\t\tthis.showPrevPortionBtn = ppb;\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\t// >>>\n\t\t\tlet npb =\n\t\t\t\tthis.service.model.portion.start + this.service.model.portion.size < this.service.model.portion.length;\n\t\t\tif (this.showNextPortionBtn != npb) {\n\t\t\t\tthis.showNextPortionBtn = npb;\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\t// >\n\t\t\tlet nb = this.service.model.actual < this.service.model.portion.length;\n\t\t\tif (this.showNextBtn != nb) {\n\t\t\t\tthis.showNextBtn = nb;\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t\t//\n\t\t\tif (changed)\n\t\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/pagination/buttons/pagination.buttons.component.ts","/**\n * Created by mthk on 30/08/16.\n */\nimport {Component, ChangeDetectorRef, ChangeDetectionStrategy, ViewChild} from '@angular/core';\nimport {MathUtil} from '../../../../util/math.util';\nimport {PaginationService} from '../pagination.service';\nimport {PaginationButtonsComponent} from '../buttons/pagination.buttons.component';\n\n@Component({\n\tselector: 'pagination-bar',\n\ttemplate: require('./pagination.bar.component.html'),\n\tstyles: [require('./pagination.bar.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PaginationBarComponent {\n\t\n\t@ViewChild(PaginationButtonsComponent) buttons: PaginationButtonsComponent;\n\t\n\tconstructor(\n\t\tpublic service: PaginationService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tthis.service.showStream$.subscribe(() => {\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t\tthis.service.resetStream$.subscribe(() => {\n\t\t\t\n\t\t\tif (this.buttons != null)\n\t\t\t\tthis.buttons.reset();\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\t\n\tget formatActivePage() {\n\t\treturn (this.service.model.actual - 1) * this.service.model.size;\n\t}\n\t\n\tget formatPageMax() {\n\t\tlet v = this.formatActivePage + this.service.model.size;\n\t\treturn v < this.service.model.total ? v : this.service.model.total;\n\t}\n\t\n\tget formatTotalPages() {\n\t\treturn MathUtil.truncUp(this.service.model.total / this.service.model.size);\n\t}\n\t\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/pagination/bar/pagination.bar.component.ts","/**\n * Created by mthk on 30/08/16.\n */\nimport {Component, ChangeDetectionStrategy} from '@angular/core';\nimport {DropdownModel, DropdownListDirection} from '../../dropdown/dropdown.model';\nimport {PaginationService} from '../pagination.service';\n\n@Component({\n\tselector: 'pagination-size',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: '<dropdown [model]=\"model\" [direction]=\"dir\" (onSelect)=\"onChange($event)\"></dropdown>',\n\tstyles: [\n\t\t+ ':host /deep/ dropdown button,'\n\t\t+ ':host /deep/ dropdown button.active,'\n\t\t+ ':host /deep/ dropdown button:active,'\n\t\t+ ':host /deep/ dropdown button:hover,'\n\t\t+ ':host /deep/ dropdown button:focus'\n\t\t+ ' { background: #fff !important; border-radius: 3px !important; box-shadow: none !important; outline: none !important;}'\n\t\t+ ':host /deep/ dropdown button:not(.active) {border-color: transparent;}'\n\t]\n})\n\nexport class PaginationSizeComponent {\n\t//\n\tdir = DropdownListDirection.up;\n\t//\n\tmodel: any[];\n\t//\n\tconstructor(private service: PaginationService) {\n\t\tthis.model = [\n\t\t\t{ value: 10, label: '10 na stronę' },\n\t\t\t{ value: 25, label: '25 na stronę' },\n\t\t\t{ value: 50, label: '50 na stronę' },\n\t\t\t{ value: 100, label: '100 na stronę' }\n\t\t];\n\t}\n\t//\n\tonChange(i: DropdownModel) {\n\t\tif (this.service.model != null) {\n\t\t\tthis.service.model.size = parseInt(i.value);\n\t\t\tthis.service.reset();\n\t\t\tthis.service.emit();\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/pagination/size/pagination.size.component.ts","import {Component, ChangeDetectionStrategy, EventEmitter, ViewChild, ElementRef, HostBinding} from '@angular/core';\n\n@Component({\n\tselector: 'rangeslider',\n\tinputs: ['value', 'min', 'max', 'step', 'showLabels', 'disabled'],\n\toutputs: ['valueChange', 'onBlur', 'onMouseUp'],\n\ttemplate: ''\n\t+ '<input #input type=\"range\" [(ngModel)]=\"value\" [attr.step]=\"step\" [attr.min]=\"min\" [attr.max]=\"max\" [disabled]=\"disabled\" '\n\t\t+ ' (input)=\"ngChange(input.value)\" (blur)=\"ngBlur(input.value)\" (mouseup)=\"ngMouseUp(input.value)\">'\n\t+ '<p *ngIf=\"showLabels\" class=\"text-center\">'\n\t\t+ '<small class=\"pull-left\"> {{min}} </small>'\n\t\t+ '<strong> {{value}} </strong>'\n\t\t+ '<small class=\"pull-right\"> {{max}} </small>'\n\t+ '</p>',\n\t// compiled from scss\n\tstyles: [require('./rangeslider.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class RangesliderComponent {\n\t\n\t@ViewChild('input') input: ElementRef;\n\tshowLabels = true;\n\t@HostBinding('class.disabled') disabled = false;\n\tvalue: number;\n\tmin: number;\n\tmax: number;\n\tstep: number;\n\tvalueChange = new EventEmitter<number>();\n\tonBlur = new EventEmitter<number>();\n\tonMouseUp = new EventEmitter<number>();\n\t\n\tconstructor() {}\n\t\n\tngChange(value: number) {\n\t\tthis.value = value;\n\t\tthis.valueChange.next(this.value);\n\t}\n\n\tngBlur(value: number) {\n\t\tthis.value = value;\n\t\tthis.onBlur.emit(this.value);\n\t}\n\n\tngMouseUp(value: number) {\n\t\tthis.value = value;\n\t\tthis.onMouseUp.emit(this.value);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/rangeslider/rangeslider.component.ts","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\n\n@Component({\n\tselector: 'singlechoice-input',\n\ttemplate: require('./singlechoice.input.component.html'),\n\tstyles: [require('./singlechoice.input.component.scss')],\n})\n\nexport class SinglechoiceInputComponent {\n\n\t@Input() name: string;\n\t@Input() model: string;\n\t@Input() value: string | null;\n\t@Output() valueChange = new EventEmitter<string | null>();\n\t\n\tconstructor() { }\n\n\tisItemChecked(item: string): boolean {\n\t\treturn this.value == item;\n\t}\n\n\tonChange(item: string, enable: boolean) {\n\t\tthis.value = (enable) ? item : null;\n\t\tthis.valueChange.emit(this.value);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/singlechoice/singlechoice.input.component.ts","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tEventEmitter,\n\tOnChanges,\n\tSimpleChanges\n} from '@angular/core';\n\nexport type SwitchLabel = { on: string; off: string; };\n\nlet HTML = ''\n\t+ '<span *ngIf=\"labelLeft\" class=\"switch-label left m-r-5\">{{labelLeft[checked?\\'on\\':\\'off\\']}}</span>'\n\t+ '<span class=\"switch\"><small></small></span>'\n\t+ '<span *ngIf=\"labelRight\" class=\"switch-label right m-l-5\">{{labelRight[checked?\\'on\\':\\'off\\']}}</span>';\n\nlet STYLE = '' +\n\t':host {cursor: pointer;}' +\n\t':host span {vertical-align: top;}' +\n\t':host .switch-label {font-size:inherit;color: inherit;white-space: nowrap;padding:0;}' +\n\t':host .switch {display: inline-block;position: relative;background: #fff;border: 1px solid #dfdfdf;' +\n\t'box-sizing: content-box;overflow: visible;padding: 0;margin: 0;box-shadow: rgb(223, 223, 223) 0 0 0 0 inset;' +\n\t'transition: 0.3s ease-out all;-webkit-transition: 0.3s ease-out all;}' +\n\t':host .switch small {background: #fff;border-radius: 100%;box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);' +\n\t'position: absolute;top: 0;left: 0;transition: 0.3s ease-out all;-webkit-transition: 0.3s ease-out all;}' +\n\n\t':host.large .switch-label {height: 42px;line-height: 42px;}' +\n\t':host.large .switch {width: 66px;height: 40px;line-height: 40px;border-radius: 40px;}' +\n\t':host.large .switch small {width: 40px;height: inherit;}' +\n\n\t':host.medium .switch-label {height: 32px;line-height: 32px;}' +\n\t':host.medium .switch {width: 50px;height: 30px;line-height: 30px;border-radius: 30px;}' +\n\t':host.medium .switch small {width: 30px;height: inherit;}' +\n\n\t':host.small .switch-label {height: 22px;line-height: 22px;}' +\n\t':host.small .switch {width: 33px;height: 20px;line-height: 20px;border-radius: 20px;}' +\n\t':host.small .switch small {width: 20px;height: inherit;}' +\n\n\t':host.xsmall .switch-label {height: 14px;line-height: 14px;}' +\n\t':host.xsmall .switch {width: 25px;height: 12px;line-height: 12px;border-radius: 12px;}' +\n\t':host.xsmall .switch small {width: 12px;height: inherit;}' +\n\n\t':host.checked .switch {background: #FAD600;border-color: #FAD600;}' +\n\t':host.large.checked .switch small {left: 26px;}' +\n\t':host.medium.checked .switch small {left: 20px;}' +\n\t':host.small.checked .switch small {left: 13px;}' +\n\t':host.xsmall.checked .switch small {left: 12px;}' +\n\t':host.disabled {opacity: .50;cursor: not-allowed;}';\n\n@Component({\n\tselector: 'switch',\n\thost: {\n\t\t'(click)': 'onToggle()',\n\t\t'[class.disabled]': 'disabled',\n\t\t'[class.checked]': 'checked',\n\t\t'[class.large]': 'size === \"large\"',\n\t\t'[class.medium]': 'size === \"medium\"',\n\t\t'[class.small]': 'size === \"small\"',\n\t\t'[class.xsmall]': 'size === \"xsmall\"'\n\t},\n\ttemplate: HTML,\n\tstyles: [STYLE],\n\tinputs: ['checked', 'disabled', 'size', 'labelLeft', 'labelRight'],\n\toutputs: ['checkedChange'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SwitchComponent implements OnChanges {\n\n\tchecked: boolean;\n\tdisabled: boolean;\n\tsize: 'large' | 'medium' | 'small' | 'xsmall' = 'medium';\n\tlabelLeft: SwitchLabel | null;\n\tlabelRight: SwitchLabel | null;\n\tcheckedChange = new EventEmitter<boolean>();\n\n\tconstructor(private cdr: ChangeDetectorRef) { }\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (\n\t\t\tchanges.hasOwnProperty('checked')\n\t\t\t|| changes.hasOwnProperty('disabled')\n\t\t\t|| changes.hasOwnProperty('size')\n\t\t\t|| changes.hasOwnProperty('labelLeft')\n\t\t\t|| changes.hasOwnProperty('labelRight')\n\t\t) {\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\n\tonToggle() {\n\t\tif (this.disabled)\n\t\t\treturn;\n\t\t// this.checked = !this.checked;\n\t\tthis.checkedChange.emit(!this.checked);\n\t\tthis.cdr.markForCheck();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/switch/switch.component.ts","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\n\n/**\n * Created by mthk on 05/11/16.\n */\n@Injectable()\nexport class UploadFileService {\n\n\tprivate file: File | null;\n\tprivate data: string | null;\n\tprivate reader: FileReader | null;\n\tprivate readSubject: Subject<any> | null;\n\tprivate readStream$: Observable<any> | null;\n\n\tconstructor() { }\n\n\taddFile(f: File, onComplete: (data: any) => void) {\n\t\tthis.destroy();\n\t\tthis.readSubject = new Subject<any>();\n\t\tthis.readStream$ = this.readSubject.asObservable();\n\t\tthis.readStream$.subscribe((data: any) => onComplete(data));\n\t\tthis.file = f;\n\t\tthis.readFile();\n\t}\n\n\treadFile() {\n\t\tif (this.file) {\n\t\t\tthis.reader = new FileReader();\n\t\t\tthis.reader.addEventListener('load', this.loadedFile, false);\n\t\t\tthis.reader.readAsDataURL(this.file);\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tif (this.readSubject != null)\n\t\t\tthis.readSubject.unsubscribe();\n\t\tthis.readSubject = null;\n\t\tthis.readStream$ = null;\n\t\tthis.file = null;\n\t\tthis.data = null;\n\t\tif (this.reader != null) {\n\t\t\tthis.reader.abort();\n\t\t\tthis.reader.removeEventListener('load', this.loadedFile);\n\t\t}\n\t}\n\n\tprivate loadedFile = () => {\n\t\tif (this.reader) {\n\t\t\tthis.data = this.reader.result;\n\t\t\tif (this.readSubject)\n\t\t\t\tthis.readSubject.next(this.data);\n\t\t\tthis.reader = null;\n\t\t}\n\t}\n\n\t/**\n\tresize (img: any, MAX_WIDTH:number = 900, MAX_HEIGHT:number = 900) {\n\t\tlet canvas = document.createElement(\"canvas\");\n\t\tconsole.log(\"Size Before: \" + img.src.length + \" bytes\");\n\t\tlet width = img.width;\n\t\tlet height = img.height;\n\t\tif (width > height) {\n\t\t\tif (width > MAX_WIDTH) {\n\t\t\t\theight *= MAX_WIDTH / width;\n\t\t\t\twidth = MAX_WIDTH;\n\t\t\t}\n\t\t} else {\n\t\t\tif (height > MAX_HEIGHT) {\n\t\t\t\twidth *= MAX_HEIGHT / height;\n\t\t\t\theight = MAX_HEIGHT;\n\t\t\t}\n\t\t}\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\t\tlet ctx = canvas.getContext(\"2d\");\n\t\t\n\t\tctx.drawImage(img, 0, 0, width, height);\n\t\t\n\t\tlet dataUrl = canvas.toDataURL('image/jpeg');\n\t\t// IMPORTANT: 'jpeg' NOT 'jpg'\n\t\tconsole.log(\"Size After:  \" + dataUrl.length  + \" bytes\");\n\t\treturn dataUrl\n\t}\n\t*/\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/upload/file/upload.file.service.ts","/**\n * Created by tkwiatek on 4/13/16.\n */\nimport {Component, ViewChild, ElementRef, Renderer2, OnDestroy, ChangeDetectorRef, EventEmitter} from '@angular/core';\nimport {DOMUtil} from '../../../../util/dom.util';\nimport {UploadFileService} from './upload.file.service';\n\n@Component({\n    selector: 'upload-file',\n    host: {\n\t\t'[class.hover]': 'isDragOver',\n    \t'(dragover)': 'onDragOver($event)',\n    \t'(dragleave)': 'onDragLeave($event)',\n    \t'(drop)': 'onDrop($event)'\n\t},\n\toutputs: ['fileChange'],\n\tviewProviders: [UploadFileService],\n    template: require('./upload.file.component.html'),\n\t// compiled from scss\n    styles: [require('./upload.file.component.scss')]\n})\n\nexport class UploadFileComponent implements OnDestroy {\n\t\n\tfileChange: EventEmitter<any | null> = new EventEmitter<any | null>();\n\tfileData: any | null;\n\tfileMessage: string | null;\n\tisDragOver = false;\n\t@ViewChild('browse') browse: ElementRef;\n\t@ViewChild('preview') preview: ElementRef;\n\t\n\t\n    constructor(private renderer: Renderer2, private service: UploadFileService, private cdr: ChangeDetectorRef) {}\n    ngOnDestroy() {\n    \tthis.service.destroy();\n\t}\n\t\n\tonDragOver(e: DragEvent): boolean {\n\t\tDOMUtil.stopPropagation(e);\n\t\tthis.isDragOver = true;\n\t\treturn false;\n\t}\n\t\n\tonDragLeave(e: DragEvent): boolean {\n\t\tDOMUtil.stopPropagation(e);\n\t\tthis.isDragOver = false;\n\t\treturn false;\n\t}\n\t\n\tonDrop(e: DragEvent): boolean {\n\t\tDOMUtil.stopPropagation(e);\n\t\tif (e && e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0)\n\t\t\tthis.addFile(e.dataTransfer.files.item(0));\n\t\treturn false;\n\t}\n\t\n\tonBrowse(e: MouseEvent): boolean {\n\t\tDOMUtil.stopPropagation(e);\n\t\tif (this.browse)\n\t\t\tthis.browse.nativeElement.click();\n\t\telse\n\t\t\tthrow new Error('No `browse` element in upload.image.component');\n\t\treturn false;\n\t}\n\t\n\tonFileBrowse() {\n\t\tif (this.browse && this.browse.nativeElement && this.browse.nativeElement.files\n\t\t\t&& this.browse.nativeElement.files.length > 0)\n\t\t\tthis.addFile(this.browse.nativeElement.files.item(0));\n\t}\n\t\n\tonRemove() {\n\t\tif (this.browse && this.browse.nativeElement)\n\t\t\tthis.renderer.setProperty(this.browse.nativeElement, 'value', null);\n\t\tthis.service.destroy();\n\t\tthis.previewData(null);\n\t}\n\t\n\tprivate addFile(file: File) {\n\t\tthis.service.addFile(file, (data: string) => this.previewData(data));\n\t}\n\t\n\tprivate previewData(data: any | null) {\n\t\tthis.fileData = data;\n\t\tif (this.fileData != null)\n\t\t\tthis.renderer.addClass(this.preview.nativeElement, 'visible');\n\t\telse\n\t\t\tthis.renderer.removeClass(this.preview.nativeElement, 'visible');\n\t\tthis.fileMessage = 'fileMessage';\n\t\tthis.cdr.markForCheck();\n\t\tthis.fileChange.emit(data);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/upload/file/upload.file.component.ts","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\n\n/**\n * Created by mthk on 05/11/16.\n */\n@Injectable()\nexport class UploadImageService {\n\n\tprivate file: File | null;\n\tprivate data: string | null;\n\tprivate reader: FileReader | null;\n\tprivate readSubject: Subject<any> | null;\n\tprivate readStream$: Observable<any> | null;\n\tprivate resampleSubject: Subject<string> | null;\n\tprivate resampleStream$: Observable<string> | null;\n\n\tconstructor() { }\n\n\taddBase64(base64: string, onComplete: (data: any) => void) {\n\t\tthis.destroy();\n\t\tthis.readSubject = new Subject<any>();\n\t\tthis.readStream$ = this.readSubject.asObservable();\n\t\tthis.readStream$.subscribe((data: any) => onComplete(data));\n\t\tthis.data = base64;\n\t\tthis.readSubject.next(this.data);\n\t\tthis.reader = null;\n\t}\n\n\taddFile(f: File, onComplete: (data: any) => void) {\n\t\tthis.destroy();\n\t\tthis.readSubject = new Subject<any>();\n\t\tthis.readStream$ = this.readSubject.asObservable();\n\t\tthis.readStream$.subscribe((data: any) => onComplete(data));\n\t\tthis.file = f;\n\t\tthis.readFile();\n\t}\n\n\treadFile() {\n\t\tif (this.file) {\n\t\t\tthis.reader = new FileReader();\n\t\t\tthis.reader.addEventListener('load', this.loadedFile, false);\n\t\t\tthis.reader.readAsDataURL(this.file);\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tif (this.readSubject != null)\n\t\t\tthis.readSubject.unsubscribe();\n\t\tthis.readSubject = null;\n\t\tthis.readStream$ = null;\n\t\tif (this.resampleSubject != null)\n\t\t\tthis.resampleSubject.unsubscribe();\n\t\tthis.resampleSubject = null;\n\t\tthis.resampleStream$ = null;\n\t\tthis.file = null;\n\t\tthis.data = null;\n\t\tif (this.reader != null) {\n\t\t\tthis.reader.abort();\n\t\t\tthis.reader.removeEventListener('load', this.loadedFile);\n\t\t}\n\t\tthis.reader = null;\n\t}\n\n\tresample(imageData: string, percentValue: number = 1, minWidth?: number, minHeight?: number) {\n\t\tif (this.resampleSubject != null)\n\t\t\tthis.resampleSubject.unsubscribe();\n\t\tthis.resampleSubject = new Subject<string>();\n\t\tthis.resampleStream$ = this.resampleSubject.asObservable();\n\t\tlet image: HTMLImageElement = document.createElement('img');\n\t\timage.onload = (e: Event) => {\n\t\t\t// console.time('resample');\n\t\t\tlet canvas = document.createElement('canvas');\n\t\t\tlet percent = percentValue / 100;\n\t\t\tlet newW = (image.width * percent) | 0;\n\t\t\tlet newH = (image.width * percent) | 0;\n\t\t\tif (minWidth != null)\n\t\t\t\tnewW = newW < minWidth ? minWidth : newW;\n\t\t\tif (minHeight != null)\n\t\t\t\tnewH = newH < minHeight ? minHeight : newH;\n\n\t\t\tif (image.width > image.height) {\n\t\t\t\tif (image.width > newW) {\n\t\t\t\t\timage.height *= newW / image.width;\n\t\t\t\t\timage.width = newW;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (image.height > newH) {\n\t\t\t\t\timage.width *= newH / image.height;\n\t\t\t\t\timage.height = newH;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\t\t\tlet ctx = canvas.getContext('2d');\n\t\t\tif (ctx)\n\t\t\t\tctx.drawImage(image, 0, 0, image.width, image.height);\n\t\t\tlet data = canvas.toDataURL();\n\t\t\tif (this.resampleSubject)\n\t\t\t\tthis.resampleSubject.next(data);\n\t\t\t// console.timeEnd('resample');\n\t\t};\n\t\timage.src = imageData;\n\t\treturn this.resampleStream$;\n\t}\n\n\tprivate loadedFile = () => {\n\t\tif (this.reader) {\n\t\t\tthis.data = this.reader.result;\n\t\t\tif (this.readSubject)\n\t\t\t\tthis.readSubject.next(this.data);\n\t\t\tthis.reader = null;\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/upload/image/upload.image.service.ts","/**\n * Created by tkwiatek on 4/13/16.\n */\nimport {Component, ViewChild, ElementRef, Renderer2, OnDestroy, ChangeDetectorRef, EventEmitter,\n\t\tSimpleChanges} from '@angular/core';\nimport {DOMUtil} from '../../../../util/dom.util';\nimport {UploadImageService} from './upload.image.service';\n\n@Component({\n\tselector: 'upload-image',\n\thost: {\n\t\t'[class.hover]': 'isDragOver',\n\t\t'(dragover)': 'onDragOver($event)',\n\t\t'(dragleave)': 'onDragLeave($event)',\n\t\t'(drop)': 'onDrop($event)'\n\t},\n\tinputs: ['imageData', 'resample', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'maxFileSize'],\n\toutputs: ['imageChange', 'maxSizeCallback'],\n\tviewProviders: [UploadImageService],\n\ttemplate: require('./upload.image.component.html'),\n\tstyles: [require('./upload.image.component.scss')]\n})\n\nexport class UploadImageComponent implements OnDestroy {\n\n\timageChange: EventEmitter<any | null> = new EventEmitter<any | null>();\n\toriginalImageData: any | null;\n\toriginalImageWidth: number | null;\n\timageData: any | null;\n\tisDragOver = false;\n\tresample = false;\n\tresampleSizeValue = 100;\n\tminWidth: number | null;\n\tminHeight: number | null;\n\tmaxWidth: number | null;\n\tmaxHeight: number | null;\n\tmaxFileSize: number | null;\n\tmaxSizeCallback: EventEmitter<any> = new EventEmitter<any>();\n\n\t@ViewChild('browse') browse: ElementRef;\n\t@ViewChild('preview') preview: ElementRef;\n\n\tconstructor(private renderer: Renderer2, private service: UploadImageService, private cdr: ChangeDetectorRef) {}\n\n\tngAfterViewInit() {\n\t\tif (this.imageData != null)\n\t\t\tthis.service.addBase64(this.imageData, (data: string) => this.previewData(data));\n\t}\n\n\tngOnDestroy() {\n\t\tthis.service.destroy();\n\t}\n\n\tonDragOver(e: DragEvent): boolean {\n\t\tDOMUtil.stopPropagation(e);\n\t\tthis.isDragOver = true;\n\t\treturn false;\n\t}\n\n\tonDragLeave(e: DragEvent): boolean {\n\t\tDOMUtil.stopPropagation(e);\n\t\tthis.isDragOver = false;\n\t\treturn false;\n\t}\n\n\tonDrop(e: DragEvent): boolean {\n\t\tDOMUtil.stopPropagation(e);\n\t\tif (e && e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0)\n\t\t\tthis.addFile(e.dataTransfer.files.item(0));\n\t\treturn false;\n\t}\n\n\tonChange(e: MouseEvent): boolean {\n\t\tthis.originalImageData = null;\n\t\tthis.originalImageWidth = null;\n\t\tthis.resampleSizeValue = 100;\n\t\tthis.onBrowse(e);\n\t\treturn false;\n\t}\n\n\tonBrowse(e: MouseEvent): boolean {\n\t\tDOMUtil.stopPropagation(e);\n\t\tif (this.browse)\n\t\t\tthis.browse.nativeElement.click();\n\t\telse\n\t\t\tthrow new Error('No `browse` element in upload.image.component');\n\t\treturn false;\n\t}\n\n\tonFileBrowse() {\n\t\tif (this.browse && this.browse.nativeElement && this.browse.nativeElement.files\n\t\t\t&& this.browse.nativeElement.files.length > 0) {\n\t\t\tthis.addFile(this.browse.nativeElement.files.item(0));\n\t\t}\n\t}\n\n\tonRemove() {\n\t\tthis.imageData = null;\n\t\tthis.originalImageData = null;\n\t\tthis.originalImageWidth = null;\n\t\tthis.resampleSizeValue = 100;\n\t\tif (this.browse && this.browse.nativeElement)\n\t\t\tthis.renderer.setProperty(this.browse.nativeElement, 'value', null);\n\t\tthis.service.destroy();\n\t\tthis.previewData(null);\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tonResampleImage(percentValue: number) {\n\t\tthis.resampleSizeValue = percentValue;\n\t\tif (this.minWidth && this.minHeight)\n\t\t\tthis.service.resample(this.originalImageData, this.resampleSizeValue, this.minWidth, this.minHeight)\n\t\t\t\t.subscribe((data: string) => this.previewData(data));\n\t}\n\n\tonResamplePreview(percentValue: number) {\n\t\tthis.resampleSizeValue = percentValue;\n\t\tlet p = percentValue / 100;\n\t\tif (this.originalImageWidth != null && this.minWidth) {\n\t\t\tlet w = (this.originalImageWidth * p) | 0;\n\t\t\tthis.renderer.setStyle(this.preview.nativeElement, 'width', (w < this.minWidth ? this.minWidth : w) + 'px');\n\t\t} else {\n\t\t\tthis.renderer.setStyle(this.preview.nativeElement, 'width', 'null');\n\t\t}\n\t}\n\n\tprivate addFile(file: File) {\n\t\tthis.service.addFile(file, (data: string) => this.previewData(data));\n\t}\n\n\tprivate previewData(data: any | null) {\n\t\tlet imageFileSize = this.getImageFileSize(data);\n\t\tlet removeOnImageLoadListener:any = null;\n\n\t\tthis.renderer.removeClass(this.preview.nativeElement, 'visible');\n\t\tif (data != null) {\n\t\t\tremoveOnImageLoadListener = this.renderer.listen(this.preview.nativeElement, 'load', () => {\n\t\t\t\t// Detach listener after image load. In other case the same loaded with old data scope will be used.\n\t\t\t\tremoveOnImageLoadListener();\n\n\t\t\t\tif (this.originalImageWidth == null)\n\t\t\t\t\tthis.originalImageWidth = this.preview.nativeElement.naturalWidth;\n\t\t\t\tlet sizeExceed = false;\n\t\t\t\tif (this.maxWidth && (this.preview.nativeElement.naturalWidth > this.maxWidth)) {\n\t\t\t\t\tsizeExceed = true;\n\t\t\t\t}\n\t\t\t\tif (this.maxHeight && (this.preview.nativeElement.naturalHeight > this.maxHeight)) {\n\t\t\t\t\tsizeExceed = true;\n\t\t\t\t}\n\t\t\t\tif (this.maxFileSize && (imageFileSize > this.maxFileSize)) {\n\t\t\t\t\tsizeExceed = true;\n\t\t\t\t}\n\t\t\t\tif(sizeExceed) {\n\t\t\t\t\tthis.onRemove();\n\t\t\t\t\tthis.maxSizeCallback.emit({maxWidth: this.maxWidth, maxHeight: this.maxHeight, maxFileSize: this.maxFileSize});\n\t\t\t\t} else {\n\t\t\t\t\tif (this.imageData != null)\n\t\t\t\t\t\tthis.renderer.addClass(this.preview.nativeElement, 'visible');\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.renderer.removeClass(this.preview.nativeElement, 'visible');\n\t\t\t\t\tthis.onResamplePreview(this.resampleSizeValue);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.renderer.setAttribute(this.preview.nativeElement, 'src', data);\n\t\tthis.imageData = data;\n\t\tif (this.originalImageData == null)\n\t\t\tthis.originalImageData = data;\n\t\tthis.imageChange.emit(data);\n\t}\n\n\tprivate getImageFileSize(data: any | null): number {\n\t\tlet result = 0;\n\t\tlet dataStr: string = data as string;\n\t\tif(dataStr == null) {\n\t\t\treturn result;\n\t\t}\n\n\t\tlet pattern = ';base64,';\n\t\tlet pos = dataStr.indexOf(pattern);\n\t\tif(pos == -1) {\n\t\t\treturn result;\n\t\t}\n\n\t\treturn Math.ceil((dataStr.length - (pos + pattern.length)) * 0.75);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/upload/image/upload.image.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { CheckButtonsComponent } from './check/check.buttons.component';\nimport { InputFloatOnlyDirective } from './directive/floatOnly.directive';\nimport { InputIntegerOnlyDirective } from './directive/integerOnly.directive';\nimport { DropdownComponent, DropdownListComponent, DropdownListPipe } from './dropdown';\nimport { ImageGridComponent } from './grid/image/image.grid.component';\nimport { EditableInputComponent } from './input/editable.input.component';\nimport { DataListComponent } from './list/data/data.list.component';\nimport { PaginationBarComponent } from './pagination/bar/pagination.bar.component';\nimport { PaginationButtonsComponent } from './pagination/buttons/pagination.buttons.component';\nimport { PaginationService } from './pagination/pagination.service';\nimport { PaginationSizeComponent } from './pagination/size/pagination.size.component';\nimport { RangesliderComponent } from './rangeslider/rangeslider.component';\nimport { SearchComponent } from './search/search.component';\nimport { SinglechoiceInputComponent } from './singlechoice/singlechoice.input.component';\nimport { SwitchComponent } from './switch/switch.component';\nimport { UploadFileComponent } from './upload/file/upload.file.component';\nimport { UploadImageComponent } from './upload/image/upload.image.component';\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t],\n\tproviders: [PaginationService],\n\tdeclarations: [\n\t\tInputIntegerOnlyDirective, InputFloatOnlyDirective,\n\t\tDropdownComponent, DropdownListComponent, DropdownListPipe,\n\t\tSwitchComponent,\n\t\tEditableInputComponent,\n\t\tRangesliderComponent,\n\t\tSearchComponent,\n\t\tPaginationBarComponent,\n\t\tPaginationButtonsComponent,\n\t\tPaginationSizeComponent,\n\t\tCheckButtonsComponent,\n\t\tUploadImageComponent, UploadFileComponent,\n\t\tDataListComponent,\n\t\tImageGridComponent,\n\t\tSinglechoiceInputComponent\n\t],\n\tentryComponents: [\n\t\tSwitchComponent,\n\t\tDropdownComponent, DropdownListComponent,\n\t\tEditableInputComponent,\n\t\tRangesliderComponent,\n\t\tSearchComponent,\n\t\tPaginationBarComponent,\n\t\tPaginationButtonsComponent,\n\t\tPaginationSizeComponent,\n\t\tCheckButtonsComponent,\n\t\tUploadImageComponent, UploadFileComponent,\n\t\tDataListComponent,\n\t\tImageGridComponent\n\t],\n\texports: [\n\t\tInputIntegerOnlyDirective, InputFloatOnlyDirective,\n\t\tSwitchComponent,\n\t\tDropdownComponent,\n\t\tEditableInputComponent,\n\t\tRangesliderComponent,\n\t\tSearchComponent,\n\t\tPaginationBarComponent,\n\t\tCheckButtonsComponent,\n\t\tUploadImageComponent, UploadFileComponent,\n\t\tDataListComponent,\n\t\tImageGridComponent,\n\t\tSinglechoiceInputComponent\n\t]\n})\nexport class FormComponentsModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/form/form.module.ts","import { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport moment from 'moment';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { GranularityType } from '../../module/analytics/component/charts/chart.model';\nimport { BradmaxApi } from '../api.service';\nimport { AuthService } from '../auth.service';\nimport { ExceptionService } from '../exception.service';\nimport { UrlService } from '../url.service';\nimport { UserService } from '../user.service';\n\nexport interface DateRange {\n\tstartDate: moment.Moment;\n\tendDate: moment.Moment;\n}\n\n@Injectable()\nexport class BaseService extends BradmaxApi {\n\n\t//default\n\tgranularity: GranularityType = 'day';\n\n\tconstructor(\n\t\tprotected auth: AuthService,\n\t\tprotected http: Http,\n\t\tprotected exception: ExceptionService,\n\t\tprotected router: Router,\n\t\tprotected urlService: UrlService,\n\t\tprotected user: UserService) {\n\t\tsuper(auth, http, exception, router, urlService);\n\t}\n\n\tprotected initDateRange(range: DateRange): DateRange {\n\t\tlet result = {\n\t\t\t\tstartDate: range.startDate.clone(),\n\t\t\t\tendDate: range.endDate.clone()\n\t\t};\n\n\t\t// Add one 'day' to endDate, because for statistics module endDate is not counted into result statistics.\n\t\tresult.endDate = result.endDate.add(1, 'd');\n\n\t\treturn result;\n\t}\n\n\tprotected alignPeriodRange(startDate: moment.Moment, endDate: moment.Moment, granularity: any) {\n\t\tif ((granularity == 'hour') || (granularity == 'day')) {\n\t\t\t// Round dates into \"days\" for hour & day granularity.\n\t\t\tstartDate = startDate.startOf('day');\n\t\t\tendDate = endDate.startOf('day');\n\n\t\t\t// Add one 'day' to endDate, because for statistics module endDate is not counted into result statistics.\n\t\t\tendDate = endDate.add(1, 'd');\n\t\t} else {\n\t\t\t// Casting granularity to \"any\" type for suppressing incorrect TypeScript type validation error:\n\t\t\t// \"Argument of type '1' is not assignable to parameter of type 'string'\".\n\t\t\tlet granularityAny: any = granularity;\n\n\t\t\t// Round to first time unit for selected granularity.\n\t\t\tstartDate = startDate.startOf(granularityAny);\n\t\t\tendDate = endDate.startOf(granularityAny);\n\n\t\t\t// Add one unit to endDate, because for statistics module end of period is not counted into result statistics.\n\t\t\tendDate = endDate.add(1, granularityAny);\n\t\t}\n\t}\n\n\tprotected prepareTsperiodParams(startDate: moment.Moment, endDate: moment.Moment,\n\t\tgranularity: any): Array<string> {\n\n\t\t// Make copy of dates, so operation on them will not modify original instances.\n\t\tstartDate = startDate.clone();\n\t\tendDate = endDate.clone();\n\n\t\tthis.alignPeriodRange(startDate, endDate, granularity);\n\n\t\t// Prepare timestamp ranges for request.\n\t\tlet ranges = new Array<any>();\n\t\tlet iter: moment.Moment = startDate;\n\t\twhile (iter.isBefore(endDate)) {\n\t\t\t// Casting Moment to \"any\" type for suppressing false error that granularity variable is not a string type\n\t\t\t// for method Moment.add(number, string).\n\t\t\tlet nextDate: any = iter.clone();\n\t\t\tnextDate.add(1, granularity);\n\n\t\t\tranges.push([iter.unix(), nextDate.unix()]);\n\t\t\titer = nextDate;\n\t\t}\n\n\t\t// Convert timestamp ranges (tsrange[]=<from_ts>,<to_ts>) into compact form of timestamp periods\n\t\t// (tsperiod[]=<first_ts>,<last_ts>,<step>).\n\t\tlet tsPeriods = this.convertTimestampRangesIntoTimestampPeriods(ranges);\n\n\t\t// Prepare request params.\n\t\tlet params = new Array<string>();\n\t\tfor (let tsperiod of tsPeriods) {\n\t\t\tparams.push('tsperiod[]=' + tsperiod.first + ',' + tsperiod.last + ',' + tsperiod.step);\n\t\t}\n\n\t\treturn params;\n\t}\n\n\tprotected convertTimestampRangesIntoTimestampPeriods(ranges: Array<Array<number>>): Array<any> {\n\t\tlet result = [];\n\t\tlet currPeriod: any = null;\n\t\tfor (let pos = 0; pos < ranges.length; pos++) {\n\t\t\tvar diff = ranges[pos][1] - ranges[pos][0];\n\t\t\tif (currPeriod === null) {\n\t\t\t\tcurrPeriod = {\n\t\t\t\t\tfirst: ranges[pos][0],\n\t\t\t\t\tlast: ranges[pos][0],\n\t\t\t\t\tstep: diff\n\t\t\t\t};\n\t\t\t\tresult.push(currPeriod);\n\t\t\t} else if (currPeriod.step != diff) {\n\t\t\t\tcurrPeriod = {\n\t\t\t\t\tfirst: ranges[pos][0],\n\t\t\t\t\tlast: ranges[pos][0],\n\t\t\t\t\tstep: diff\n\t\t\t\t};\n\t\t\t\tresult.push(currPeriod);\n\t\t\t} else {\n\t\t\t\tcurrPeriod.last = ranges[pos][0];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\t// Django automatically decodes encoded '/' from '%2F', which breaks routing. For that case '/' is encoded as '!+' and single '!' as '!!'.\n\t// See: https://code.djangoproject.com/ticket/15718\n\tprotected safeEncodeUriComponentForDjango(str: string): string {\n\t\tstr = str + '';\n\t\treturn encodeURIComponent(str.replace(/\\!/g, '!!').replace(/\\//g, '!+'));\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/analytics/base.service.ts","import { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport moment from 'moment';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\n\nimport {\n\tAnalyticsAudienceHistoryResponse,\n\tAnalyticsAudienceHistoryResponseItem,\n\tAccountTechStatsReport,\n\tMediaMetadata,\n\tMediaMetadataListResponse,\n\tMediaStatsHistoryViewsRec,\n\tTopViewedMediaMetadataListResponse,\n\tTopViewedMediaRecord,\n\tTopStreamedMediaMetadataListResponse,\n\tTopStreamedMediaRecord,\n\tViewersNumResponse,\n\tGeoCountryStatsRec,\n\tGeoRegionStatsRec,\n\tGeoCityStatsRec\n} from '../model/api.model';\nimport { GranularityType } from '../module/analytics/component/charts/chart.model';\nimport { BaseService } from './analytics/base.service';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { UrlService } from './url.service';\nimport { UserService } from './user.service';\n\n// TODO - refactor: split AnalyticsService class into group of smaller services and move into analytics directory.\n@Injectable()\nexport class AnalyticsService extends BaseService {\n\n\tgetDashboardData(accountId?: number | null): Observable<any> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\tlet today = moment().startOf('day')\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/dashboard?todayts=' + today.unix();\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: any) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetAudienceHistoryForRange(startDate: moment.Moment,\n\t\tendDate: moment.Moment,\n\t\tgranularity?: GranularityType | null,\n\t\taccountId?: number | null): Observable<AnalyticsAudienceHistoryResponse> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\tif (!granularity) {\n\t\t\tgranularity = this.granularity;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet params = this.prepareTsperiodParams(startDate, endDate, granularity);\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/audience-history?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: AnalyticsAudienceHistoryResponse) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetAudienceSummaryForRange(startDate: moment.Moment,\n\t\tendDate: moment.Moment,\n\t\tgranularityForHistory?: GranularityType | null,\n\t\taccountId?: number | null): Observable<AnalyticsAudienceHistoryResponseItem> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\tstartDate = startDate.clone();\n\t\tendDate = endDate.clone();\n\t\tif (granularityForHistory) {\n\t\t\tthis.alignPeriodRange(startDate, endDate, granularityForHistory);\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet fields = 'views,users';\n\t\tif (this.user.isEngagementRateEnabled()) {\n\t\t\tfields += ',watching_time';\n\t\t}\n\t\tlet url = 'accounts/' + accountId + '/analytics/audience-history?fields=' + fields + '&tsrange[]=' + startDate.unix() + ',' + endDate.unix()\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: AnalyticsAudienceHistoryResponse) => {\n\t\t\t\tif (response && (response.length > 0)) {\n\t\t\t\t\tresolveSource.next(response[0]);\n\t\t\t\t} else {\n\t\t\t\t\tresolveSource.next(null);\n\t\t\t\t}\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetTechnologyStatsForRange(startDate: moment.Moment, endDate: moment.Moment,\n\t\tgranularity: GranularityType, accountId?: number | null): Observable<AccountTechStatsReport> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet params = this.prepareTsperiodParams(startDate, endDate, granularity);\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/technology-statistics?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: AccountTechStatsReport) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetTechnologyStatsFor24h(startDate: moment.Moment, accountId?: number | null): Observable<AccountTechStatsReport> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/technology-statistics?tsperiod[]='+startDate.unix().toString()+','+(startDate.unix()+23*3600).toString()+',3600';\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: AccountTechStatsReport) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetUsersAndViews(startDate: moment.Moment, endDate: moment.Moment, granularity: GranularityType, accountId?: number):\n\t\tObservable<Array<{ data: chartjs.LineChartDataset, labels: Array<string> }>> {\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tthis.getAudienceHistoryForRange(startDate, endDate, granularity, accountId)\n\t\t\t.subscribe((data: AnalyticsAudienceHistoryResponse) => {\n\t\t\t\tlet usersData: chartjs.LineChartDataset = { data: [], label: 'Users' };\n\t\t\t\tlet usersLabels: Array<string> = [];\n\t\t\t\tlet viewsData: chartjs.LineChartDataset = { data: [], label: 'Views' };\n\t\t\t\tlet viewsLabels: Array<string> = [];\n\n\t\t\t\tfor (let rec of data) {\n\t\t\t\t\tusersData.data.push(parseFloat(rec.users));\n\t\t\t\t\tviewsData.data.push(parseFloat(rec.views));\n\t\t\t\t\tusersLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t\tviewsLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t}\n\n\t\t\t\tlet usersChartData = { data: usersData, labels: usersLabels };\n\t\t\t\tlet viewsChartData = { data: viewsData, labels: viewsLabels };\n\n\t\t\t\tresolveSource.next([usersChartData, viewsChartData]);\n\t\t\t},\n\t\t\t\t(error) => resolveSource.error(error),\n\t\t\t\t() => resolveSource.complete());\n\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetGeoCountriesStats(startDate: moment.Moment, endDate: moment.Moment, accountId?: number | null): Observable<Array<GeoCountryStatsRec>> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Make copy of dates, so operation on them will not modify original instances.\n\t\tstartDate = startDate.clone().startOf('day');\n\t\tendDate = endDate.clone().startOf('day');\n\n\t\t// Add one 'day' to endDate, because for statistics module endDate is not counted into result statistics.\n\t\tendDate = endDate.add(1, 'd');\n\n\t\t// Prepare request params.\n\t\tlet params = [];\n\t\tparams.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/geo/country?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: Array<GeoCountryStatsRec>) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetGeoRegionsStats(startDate: moment.Moment, endDate: moment.Moment, countryCode: string, accountId?: number | null): Observable<Array<GeoRegionStatsRec>> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Make copy of dates, so operation on them will not modify original instances.\n\t\tstartDate = startDate.clone().startOf('day');\n\t\tendDate = endDate.clone().startOf('day');\n\n\t\t// Add one 'day' to endDate, because for statistics module endDate is not counted into result statistics.\n\t\tendDate = endDate.add(1, 'd');\n\n\t\t// Prepare request params.\n\t\tlet params = [];\n\t\tparams.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/geo/country/' + countryCode + '/region?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: Array<GeoRegionStatsRec>) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetGeoCitiesStats(startDate: moment.Moment, endDate: moment.Moment, countryCode: string, accountId?: number | null): Observable<Array<GeoCityStatsRec>> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Make copy of dates, so operation on them will not modify original instances.\n\t\tstartDate = startDate.clone().startOf('day');\n\t\tendDate = endDate.clone().startOf('day');\n\n\t\t// Add one 'day' to endDate, because for statistics module endDate is not counted into result statistics.\n\t\tendDate = endDate.add(1, 'd');\n\n\t\t// Prepare request params.\n\t\tlet params = [];\n\t\tparams.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/geo/country/' + countryCode + '/city?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: Array<GeoCityStatsRec>) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetRealtimeTopViewedMediaMetadataList(pagingOptions: any, accountId?: number | null): Observable<TopStreamedMediaMetadataListResponse> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet params = [];\n\t\tfor (let key in pagingOptions) {\n\t\t\tlet val = pagingOptions[key];\n\t\t\tif ((val !== null) && (val !== '')) {\n\t\t\t\tparams.push(key + '=' + encodeURIComponent(val));\n\t\t\t}\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/realtime/top-viewed-media?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: TopStreamedMediaMetadataListResponse) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetRealtimeAccountViewersNum(accountId?: number | null): Observable<ViewersNumResponse> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/realtime/viewers-num';\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: ViewersNumResponse) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetRealtimeMediaViewersNum(mediaMaterialId: string, accountId?: number | null): Observable<ViewersNumResponse> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/realtime/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/viewers-num';\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: ViewersNumResponse) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetGoogleMapsApiKey(): string {\n\t\treturn 'AIzaSyAFWd3IeJ83WwKdNSqs1NNTIyKniUREGjo';\n\t}\n\n\tgetClientToken(accountId?: number | null): Observable<string> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/client-token';\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: any) => {\n\t\t\t\tresolveSource.next(response.client_token);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/analytics.service.ts","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ExportService {\n\n\tconstructor() {\n\t\t\n\t}\n\n\tprivate removeOldExportLinksFromDocument(): void {\n\t\tlet linksToRemove = [];\n\t\tfor(let i=0; i < document.body.children.length; i++) {\n\t\t\tvar n = document.body.children[i];\n\t\t\tif((n.tagName == 'A') && (n.getAttribute('data-export-link') == '1')) {\n\t\t\t\tlinksToRemove.push(n);\n\t\t\t}\n\t\t}\n\t\tfor(let i=0; i < linksToRemove.length; i++) {\n\t\t\tdocument.body.removeChild(linksToRemove[i]);\n\t\t}\n\t}\n\n\texportFileFromJs(exportFileName:string, strData:string): void {\n\t\tthis.removeOldExportLinksFromDocument();\n\t\t\n\t\t// Create new link and trigger click.\n\t\t// - Create link.\n\t\tlet exportLink = document.createElement('a');\n\t\texportLink.style.opacity='0';\n\t\texportLink.style.display='none';\n\t\texportLink.style.position='absolute';\n\t\texportLink.setAttribute('href', 'data:text/csv;base64,' + window.btoa(strData));\n\t\texportLink.setAttribute('download', exportFileName);\n\t\texportLink.setAttribute('data-export-link', '1');\n\t\texportLink.innerHTML = exportFileName;\n\t\tdocument.body.appendChild(exportLink);\n\n\t\t// - Trigger click.\n\t\texportLink.click();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/export.service.ts","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport moment from 'moment';\n\n@Injectable()\nexport class UsersAndViewsVsTimeService {\n\n\t//Chart\n\tchartDataChange: Subject<any>;\n\tchartData: Array<chartjs.BaseDataset>;\n\tchartLabels: Array<string>;\n\tchartOptions: chartjs.BaseOptions | null = null;\n\t//Chart Picker\n\tchartTypes: Array<ChartType> = ['lineTime', 'bar'];\n\tactiveChartType: ChartType = 'lineTime';\n\t//Granularity\n\tgranularityTypes: Array<GranularityType> = ['all'];\n\tactiveGranularity: GranularityType = 'day';\n\t//Date Range Picker\n\tstartDate: moment.Moment;\n\tendDate: moment.Moment;\n\n\tconstructor(private service: AnalyticsService) {\n\t\tthis.chartDataChange = new Subject<any>();\n\t}\n\n\tloadData(): void {\n\t\tthis.chartData = null;\n\t\tthis.service.getUsersAndViews(this.startDate, this.endDate, this.activeGranularity).subscribe(\n\t\t\t(data) => {\n\t\t\t\tthis.chartData = new Array<chartjs.BaseDataset>();\n\t\t\t\tthis.chartData.push(data[0].data);\n\t\t\t\tthis.chartData.push(data[1].data);\n\t\t\t\tthis.chartLabels = data[0].labels;\n\n\t\t\t\tthis.chartDataChange.next(this.chartData);\n\t\t\t},\n\t\t\t(error) => {\n\t\t\t\tconsole.error('UsersAndViews Service ERROR', error);\n\t\t\t}\n\t\t);\n\t}\n\n\tgetChartDataChanges(): Observable<any> {\n\t\treturn this.chartDataChange.asObservable();\n\t}\n\n\tonChartTypeChange(type: ChartType): void {\n\t\tthis.activeChartType = type;\n\t}\n\n\tonDateRangeChange(range: [moment.Moment, moment.Moment]): void {\n\t\tthis.startDate = range[0];\n\t\tthis.endDate = range[1];\n\n\t\t// Round dates to whole days.\n\t\tthis.startDate.startOf('day');\n\t\tthis.endDate.startOf('day');\n\t\tif(this.startDate && this.endDate && (this.startDate.unix() == this.endDate.unix())) {\n\t\t    this.activeGranularity = 'hour';\n\t\t}\n\t\tthis.loadData();\n\t}\n\n\tonGranularityChange(granularity: GranularityType): void {\n\t\tthis.activeGranularity = granularity;\n\t\tthis.loadData();\n\t}\n\n\texportDataToCsv(): string {\n\t\tlet linesNum = this.chartLabels ? this.chartLabels.length : 0;\n\t\tlet result = '';\n\t\tlet line = '';\n\t\tlet dateFormat = 'YYYY-MM-DD HH:mm';\n\t\tif((this.activeGranularity == 'day') || (this.activeGranularity == 'week')) {\n\t\t\tdateFormat = 'YYYY-MM-DD';\n\t\t} else if(this.activeGranularity == 'month') {\n\t\t\tdateFormat = 'YYYY-MM';\n\t\t}  else if(this.activeGranularity == 'year') {\n\t\t\tdateFormat = 'YYYY';\n\t\t}\n\n\t\t// Write header.\n\t\tresult += \"Date,Users,Views\\r\\n\";\n\n\t\t// Write data.\n\t\tfor(let i=0; i < linesNum; i++) {\n\t\t\tline = '\"'+moment(this.chartLabels[i]).format(dateFormat) + '\",';\n\t\t\tline += (this.chartData[0].data[i] + ',');\n\t\t\tline += (this.chartData[1].data[i] + \"\\r\\n\");\n\n\t\t\tresult += line;\n\t\t}\n\t\treturn result;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/service/usersAndViewsVSTime.service.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport moment from 'moment';\n\nimport {\n\tAccountProductsListResponse,\n\tAnalyticsAudienceHistoryResponse,\n\tAnalyticsAudienceHistoryResponseItem } from '../../../model/api.model';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { UserService } from '../../../service/user.service';\nimport { ExportService } from '../../../service/export.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { ProductService } from '../../../service/product.service';\n\n@Component({\n\tselector: 'analytics-audience-view',\n\ttemplate: require('./audience.view.component.html'),\n\tstyles: [\n\t\t':host .table-loader {height:330px;position:relative;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsAudienceView extends Localization implements OnInit {\n\n\tmonthlyStats: Array<any>;\n\n\t// TODO: refactor - put currentAccounting* fields into single object.\n\tcurrentAccountingBaseViewsSize: number;\n\tcurrentAccountingPeriodViews: number;\n\tcurrentAccountingPeriodFromDate: any;\n\tcurrentAccountingPeriodToDate: any;\n\n\t// TODO: refactor - put lastAccounting* fields into single object.\n\tlastAccountingBaseViewsSize: number;\n\tlastAccountingPeriodViews: number;\n\tlastAccountingPeriodFromDate: any;\n\tlastAccountingPeriodToDate: any;\n\n\tsummary: any;\n\n\n\n\tconstructor(public chartService: UsersAndViewsVsTimeService,\n\t\tpublic analyticsService: AnalyticsService,\n\t\tpublic productService: ProductService,\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic user: UserService,\n\t\tprivate exportService: ExportService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tlet range = this.user.getDateRangeSelection();\n\t\tthis.chartService.startDate = range.startDate;\n\t\tthis.chartService.endDate = range.endDate;\n\t\tthis.monthlyStats = [];\n\n\t\t// Init summary object.\n\t\tthis.summary = {\n\t\t\tviews: 0,\n\t\t\tusers: 0,\n\t\t\tviewsPerUser: null,\n\t\t\tavgWatchingTime: null\n\t\t};\n\n\t\t// When new data is loaded mark them, so they will be detected by change detector.\n\t\t// This solves problems with \"refreshing charts\".\n\t\tthis.chartService.getChartDataChanges().subscribe((data) => this.cdr.markForCheck());\n\t}\n\n\tngOnInit() {\n\t\t// Load general statistics for last 12 months.\n\t\tthis.loadMonthlyStats();\n\t\tthis.loadLastAccountingPeriodsStats();\n\t\tthis.chartService.loadData();\n\t\tthis.loadSummaryStats();\n\t\tthis.cdr.markForCheck();\n\t}\n\n\n\n\tonDateRangeChanged(range: [moment.Moment, moment.Moment]): void {\n\t\tthis.chartService.onDateRangeChange(range);\n\t\tthis.user.setDateRangeSelection(range[0].startOf('day'), range[1].startOf('day'));\n\t\tthis.loadSummaryStats();\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tcalcViewsUsagePercent(viewsMade: number, viewsSize: number): number {\n\t\tlet result = 0;\n\t\t// Count share if it is possible.\n\t\tif (viewsSize > 0) {\n\t\t\tresult = 100 * viewsMade / viewsSize;\n\t\t}\n\t\t// Result has upper boundary '100'. Limit to it if it is bigger.\n\t\tif (result > 100) {\n\t\t\tresult = 100;\n\t\t}\n\t\treturn result;\n\t}\n\n\tchartDataExportCsv(): void {\n\t\tlet data = this.chartService.exportDataToCsv();\n\t\tlet exportFileName = 'bradmax_audience_' + this.chartService.startDate.format('YYYYMMDD')\n\t\t\t+ '_' + this.chartService.endDate.format('YYYYMMDD') + '_by' + this.chartService.activeGranularity + '.csv';\n\n\t\t// Create new link and trigger click.\n\t\tthis.exportService.exportFileFromJs(exportFileName, data);\n\t}\n\n\tmonthlyStatsExportCsv(): void {\n\t\tif(!this.monthlyStats || this.monthlyStats.length < 2) {\n\t\t\tthrow \"Cannot export monthly stats. No stats available yet.\";\n\t\t}\n\t\tlet exportFileName = 'bradmax_audience_' + this.monthlyStats[this.monthlyStats.length-1].date.format('YYYYMMDD')\n\t\t\t+ '_' + this.monthlyStats[0].date.format('YYYYMMDD') + '_bymonth.csv';\n\n\t\t// Prepare data.\n\t\tlet data = \"Date,Users,Views\\r\\n\";\n\t\tfor(let i=0; i < this.monthlyStats.length; i++) {\n\t\t\tlet rec = this.monthlyStats[i];\n\t\t\tlet line = '\"'+rec.date.format('YYYY-MM-DD') + '\",';\n\t\t\tline += (rec.users + ',');\n\t\t\tline += (rec.views + \"\\r\\n\");\n\n\t\t\tdata += line;\n\t\t}\n\n\t\t// Create new link and trigger click.\n\t\tthis.exportService.exportFileFromJs(exportFileName, data);\n\t}\n\n\tprivate loadSummaryStats(): void {\n\t\tthis.analyticsService.getAudienceSummaryForRange(\n\t\t\tthis.chartService.startDate, this.chartService.endDate, this.chartService.activeGranularity).subscribe(\n\t\t\t(data: AnalyticsAudienceHistoryResponseItem) => {\n\t\t\t\tthis.summary.views = parseFloat(data.views);\n\t\t\t\tthis.summary.users = parseFloat(data.users);\n\t\t\t\tthis.summary.viewsPerUser = null;\n\t\t\t\tif(this.summary.users > 0) {\n\t\t\t\t\tthis.summary.viewsPerUser = this.summary.views / this.summary.users;\n\n\t\t\t\t\tif(this.user.isEngagementRateEnabled()) {\n\t\t\t\t\t\tthis.summary.avgWatchingTime = parseFloat(data.watching_time) / this.summary.users;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tprivate loadMonthlyStats(): void {\n\t\tlet currMonthStartDate = moment().startOf('month');\n\t\tlet tableStartDate = currMonthStartDate.clone().subtract(12, 'month');\n\t\tthis.analyticsService.getAudienceHistoryForRange(tableStartDate, currMonthStartDate, 'month').subscribe(\n\t\t\t(data: AnalyticsAudienceHistoryResponse) => {\n\t\t\t\t// Reverse data - newest first oldest last.\n\t\t\t\tdata.reverse();\n\t\t\t\tlet newMonthlyStats = [];\n\t\t\t\tfor (let rec of data) {\n\t\t\t\t\tnewMonthlyStats.push({\n\t\t\t\t\t\tdate: moment.unix(rec.from),\n\t\t\t\t\t\tusers: rec.users,\n\t\t\t\t\t\tviews: rec.views\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.monthlyStats = newMonthlyStats;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\t}\n\n\tprivate loadLastAccountingPeriodsStats(): void {\n\t\tlet lastStatsInResponseNum = 2;\n\t\tif (this.user.accountId != null)\n\t\t\tthis.productService.getProductsForAccount(this.user.accountId, lastStatsInResponseNum)\n\t\t\t\t.subscribe((data: AccountProductsListResponse) => {\n\t\t\t\t\tfor (let rec of data.results) {\n\t\t\t\t\t\tif ((rec.product.id != 1) || !rec.usage_stats) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rec.usage_stats.length > 0) {\n\t\t\t\t\t\t\tthis.currentAccountingBaseViewsSize = rec.base_views_size;\n\t\t\t\t\t\t\tthis.currentAccountingPeriodViews = rec.usage_stats[0].views;\n\t\t\t\t\t\t\tthis.currentAccountingPeriodFromDate = moment.unix(rec.usage_stats[0].from);\n\t\t\t\t\t\t\tthis.currentAccountingPeriodToDate = moment.unix(rec.usage_stats[0].to);\n\t\t\t\t\t\t\t// Last day is not counting to charging period, so for not overwhelming user with too many details\n\t\t\t\t\t\t\t// do not show accurate range 2017-08-30 02:00 - 2017-09-30 01:59, but just shorter and clear enough\n\t\t\t\t\t\t\t// 2017-08-30 - 2017-09-29. It is less confusing for quick statistic. For that subtract last day from range.\n\t\t\t\t\t\t\tthis.currentAccountingPeriodToDate.subtract(1, 'day');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (rec.usage_stats.length > 1) {\n\t\t\t\t\t\t\tthis.lastAccountingBaseViewsSize = rec.base_views_size;\n\t\t\t\t\t\t\tthis.lastAccountingPeriodViews = rec.usage_stats[1].views;\n\t\t\t\t\t\t\tthis.lastAccountingPeriodFromDate = moment.unix(rec.usage_stats[1].from);\n\t\t\t\t\t\t\tthis.lastAccountingPeriodToDate = moment.unix(rec.usage_stats[1].to);\n\t\t\t\t\t\t\t// Last day is not counting to charging period, so for not overwhelming user with too many details\n\t\t\t\t\t\t\t// do not show accurate range 2017-08-30 02:00 - 2017-09-30 01:59, but just shorter and clear enough\n\t\t\t\t\t\t\t// 2017-08-30 - 2017-09-29. It is less confusing for quick statistic. For that subtract last day from range.\n\t\t\t\t\t\t\tthis.lastAccountingPeriodToDate.subtract(1, 'day');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/audience/audience.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { ChartModule } from '../component/charts/chart.module';\nimport { FormComponentsModule }from '../../form/form.module';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { AnalyticsAudienceView } from '../audience/audience.view.component';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { ProductService } from '../../../service/product.service';\nimport { AnalyticsService } from '../../../service/analytics.service';\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsAudienceView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule\n\t],\n\tdeclarations: [\n\t\tAnalyticsAudienceView\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tUsersAndViewsVsTimeService,\n\t\tProductService\n\t]\n})\nexport class AnalyticsAudienceModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/audience/audience.module.ts","\nexport enum VirtualDropdownListDirection { down, up }\n\nexport interface VirtualDropdownFetch {\n\tpage: number;\n\tloading: boolean;\n};\n\nexport interface VirtualDropdownModel {\n\tuid: number;\n\tvalue: any;\n\tlabel: string;\n\tcolor?: string;\n\ttextColor?: string;\n\ticon?: string;\n\tselected?: boolean;\n\tmarkSelected?: boolean; // for multiple selection\n\thasSeparatorBelow?: boolean; // for organizing items in groups.\n\tfetch?: VirtualDropdownFetch;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/virtual/dropdown/model/virtual.dropdown.model.ts","import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n'\n\n@Component({\n\tselector: 'pager',\n\ttemplate: `\n\t\t<ul class=\"pagination m-t-0 m-b-10\">\n\t\t\t<li [ngClass]=\"((1 === page) ? 'disabled': '')\">\n\t\t\t\t<a (click)=\"onPageChange(1)\">«</a>\n\t\t\t</li>\n\t\t\t<li *ngFor=\"let pageIter of pagesVisibleRange\" [ngClass]=\"((pageIter === page) ? 'active': '')\">\n\t\t\t\t<a (click)=\"onPageChange(pageIter)\">{{pageIter}}</a>\n\t\t\t</li>\n\t\t\t<li [ngClass]=\"((lastPage === page) ? 'disabled': '')\">\n\t\t\t\t<a (click)=\"onPageChange(lastPage)\">»</a>\n\t\t\t</li>\n\t\t</ul>`,\n\tstyles: [\n\t\t':host {display:block;text-align:center;}',\n\t\t':host a {cursor:pointer;}'\n\t]\n})\nexport class PagerComponent extends Localization implements OnChanges {\n\t@Input() page: number;\n\t@Input() pageSize: number;\n\t@Input() totalItems: number;\n\t@Input() pagesVisibleNum: number;\n\t@Output() pageChanged = new EventEmitter<number>();\n\tlastPage: number;\n\tpagesVisibleLow: number;\n\tpagesVisibleHigh: number;\n\tpagesVisibleRange: Array<number>;\n\n\tconstructor(public locale: LocaleService, public translation: TranslationService) {\n\t\tsuper(locale, translation);\n\t\tthis.lastPage = 1;\n\t\tthis.pagesVisibleLow = 1;\n\t\tthis.pagesVisibleHigh = 1;\n\t}\n\n\tngOnChanges() {\n\t\t// Set default value for pagesVisibleNum if not defined.\n\t\tif(!this.pagesVisibleNum || (this.pagesVisibleNum < 1)) {\n\t\t\tthis.pagesVisibleNum = 5;\n\t\t}\n\n\t\t// Set last page.\n\t\tthis.lastPage = Math.ceil(this.totalItems / this.pageSize);\n\n\t\t// Set pages visible range.\n\t\tthis.pagesVisibleLow = this.page - Math.floor(this.pagesVisibleNum / 2);\n\t\tthis.pagesVisibleHigh = this.page + Math.floor(this.pagesVisibleNum / 2);\n\t\tif(this.pagesVisibleLow < 1) {\n\t\t\tthis.pagesVisibleLow = 1;\n\t\t\tthis.pagesVisibleHigh = Math.min(this.lastPage, this.pagesVisibleNum);\n\t\t}\n\t\tif(this.pagesVisibleHigh > this.lastPage) {\n\t\t\tthis.pagesVisibleHigh = this.lastPage;\n\t\t\tthis.pagesVisibleLow = Math.max(1, this.lastPage - this.pagesVisibleNum + 1);\n\t\t}\n\n\t\tthis.pagesVisibleRange = new Array<number>();\n\t\tfor(let p=this.pagesVisibleLow; p <= this.pagesVisibleHigh; p++) {\n\t\t\tthis.pagesVisibleRange.push(p);\n\t\t}\n\t}\n\n\tonPageChange(page: number): void {\n\t\tthis.pageChanged.emit(page);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/pager/pager.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HttpModule } from '@angular/http';\nimport { LocalizationModule } from 'angular-l10n';\nimport { FormsModule } from '@angular/forms';\n\nimport { PagerComponent } from './pager.component';\n\nlet COMP = [\n\tPagerComponent,\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tFormsModule,\n\t],\n\tdeclarations: COMP,\n\texports: COMP\n})\nexport class PagerModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/pager/pager.module.ts","import { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport moment from 'moment';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\n\nimport {\n\tAnalyticsAudienceHistoryResponse,\n\tAnalyticsAudienceHistoryResponseItem,\n\tAccountTechStatsReport,\n\tMediaMetadata,\n\tMediaMetadataListResponse,\n\tMediaStatsHistoryViewsRec,\n\tTopViewedMediaMetadataListResponse,\n\tTopViewedMediaRecord,\n\tTopStreamedMediaMetadataListResponse,\n\tTopStreamedMediaRecord,\n\tViewersNumResponse,\n\tGeoCountryStatsRec,\n\tGeoRegionStatsRec,\n\tGeoCityStatsRec\n} from '../../model/api.model';\nimport { BaseService } from './base.service';\nimport { GranularityType } from '../../module/analytics/component/charts/chart.model';\nimport { AuthService } from '../auth.service';\nimport { ExceptionService } from '../exception.service';\nimport { UrlService } from '../url.service';\nimport { UserService } from '../user.service';\n\n@Injectable()\nexport class MediaService extends BaseService {\n\tgetMediaMetadataList(searchOptions: any, accountId?: number | null): Observable<MediaMetadataListResponse> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet params = [];\n\t\tfor (let key in searchOptions) {\n\t\t\tlet val = searchOptions[key];\n\t\t\tif ((val !== null) && (val !== '')) {\n\t\t\t\tparams.push(key + '=' + encodeURIComponent(val));\n\t\t\t}\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/media?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: MediaMetadataListResponse) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetTopViewedMediaMetadataList(startDate: moment.Moment, endDate: moment.Moment, pagingOptions: any, accountId?: number | null): Observable<TopViewedMediaMetadataListResponse> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Skip date range rounding if period is shorter than 12h.\n\t\tconst duration12h = 3600 * 12;\n\t\tif(endDate.unix() - startDate.unix() >= duration12h) {\n\t\t\t// Make copy of dates, so operation on them will not modify original instances.\n\t\t\tstartDate = startDate.clone().startOf('day');\n\t\t\tendDate = endDate.clone().startOf('day');\n\n\t\t\t// Add one 'day' to endDate, because for statistics module endDate is not counted into result statistics.\n\t\t\tendDate = endDate.add(1, 'd');\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet params = [];\n\t\tparams.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n\n\t\tfor (let key in pagingOptions) {\n\t\t\tlet val = pagingOptions[key];\n\t\t\tif ((val !== null) && (val !== '')) {\n\t\t\t\tparams.push(key + '=' + encodeURIComponent(val));\n\t\t\t}\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/media-top-viewed?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: TopViewedMediaMetadataListResponse) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetMediaViewsHistory(mediaMaterialId: string, startDate: moment.Moment, endDate: moment.Moment, granularity: GranularityType, accountId?: number):\n\t\tObservable<{ data: chartjs.LineChartDataset, labels: Array<string> }> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet params = this.prepareTsperiodParams(startDate, endDate, granularity);\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/history?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: Array<MediaStatsHistoryViewsRec>) => {\n\t\t\t\tlet viewsData: chartjs.LineChartDataset = { data: [], label: 'Views' };\n\t\t\t\tlet viewsLabels: Array<string> = [];\n\n\t\t\t\tfor (let rec of response) {\n\t\t\t\t\tviewsData.data.push(parseFloat(rec.views));\n\t\t\t\t\tviewsLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t}\n\n\t\t\t\tresolveSource.next({ data: viewsData, labels: viewsLabels });\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetMediaStatsHistory(mediaMaterialId: string, startDate: moment.Moment, endDate: moment.Moment, granularity: GranularityType, accountId?: number):\n\t\tObservable<{ series: Array<chartjs.LineChartDataset>, labels: Array<string> }> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet params = this.prepareTsperiodParams(startDate, endDate, granularity);\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/history?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: Array<MediaStatsHistoryViewsRec>) => {\n\t\t\t\tlet viewsData: chartjs.LineChartDataset = { data: [], label: 'Views' };\n\t\t\t\tlet usersData: chartjs.LineChartDataset = { data: [], label: 'Users' };\n\t\t\t\tlet viewsLabels: Array<string> = [];\n\t\t\t\tlet hasNotEmptyUsersStats = false;\n\t\t\t\tlet val: number = 0;\n\n\t\t\t\tfor (let rec of response) {\n\t\t\t\t\tviewsData.data.push(parseFloat(rec.views));\n\t\t\t\t\tif('users' in rec) {\n\t\t\t\t\t\tval = parseFloat(rec.users);\n\t\t\t\t\t\tusersData.data.push(val);\n\t\t\t\t\t\tif(val > 0) {\n\t\t\t\t\t\t\thasNotEmptyUsersStats = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tusersData.data.push(null);\n\t\t\t\t\t}\n\t\t\t\t\tviewsLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t}\n\n\t\t\t\tlet series = hasNotEmptyUsersStats ? [usersData, viewsData] : [viewsData];\n\t\t\t\tresolveSource.next({ series: series, labels: viewsLabels });\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetMediaStatsSummaryForRange(mediaMaterialId: string, startDate: moment.Moment, endDate: moment.Moment, granularityForHistory?: GranularityType | null, accountId?: number | null):\n\t\tObservable<any> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\tstartDate = startDate.clone();\n\t\tendDate = endDate.clone();\n\t\tif (granularityForHistory) {\n\t\t\tthis.alignPeriodRange(startDate, endDate, granularityForHistory);\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/history?tsrange[]=' + startDate.unix() + ',' + endDate.unix();\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: AnalyticsAudienceHistoryResponse) => {\n\t\t\t\tif (response && (response.length > 0)) {\n\t\t\t\t\tresolveSource.next(response[0]);\n\t\t\t\t} else {\n\t\t\t\t\tresolveSource.next(null);\n\t\t\t\t}\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetMediaMetadata(mediaMetadataMaterialId: string, accountId?: number | null): Observable<MediaMetadata> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMetadataMaterialId);\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: MediaMetadata) => {\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetMediaEngagementRate(mediaMaterialId: string, startDate: moment.Moment, endDate: moment.Moment, accountId?: number, liveStreamClockType?: string):\n\t\tObservable<{ data: chartjs.LineChartDataset, labels: Array<string>, response: any }> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Align date range to days.\n\t\tstartDate = startDate.clone();\n\t\tendDate = endDate.clone();\n\t\tthis.alignPeriodRange(startDate, endDate, 'day');\n\n\t\t// Prepare request params.\n\t\tlet params = [];\n\t\tparams.push('tsrange=' + startDate.unix() + ',' + endDate.unix());\n\t\tif (liveStreamClockType) {\n\t\t\tparams.push('type=' + liveStreamClockType);\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/media/' + this.safeEncodeUriComponentForDjango(mediaMaterialId) + '/engagement-rate?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: any) => {\n\t\t\t\tlet viewsData: chartjs.LineChartDataset = { data: [], label: 'Engagement rate (views)' };\n\t\t\t\tlet viewsLabels: Array<string> = [];\n\t\t\t\tlet chartType = 'line';\n\t\t\t\tlet granularity = 'hour';\n\n\t\t\t\t// Return null if empty data.\n\t\t\t\tif (!response.views) {\n\t\t\t\t\tresolveSource.next(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (response.meta.is_live_stream\n\t\t\t\t\t&& response.views_timestamps\n\t\t\t\t\t&& (response.views_timestamps.length > 0)\n\t\t\t\t\t&& (response.views_timestamps.length == response.views.length)) {\n\t\t\t\t\t// LIVE streaming engagement rate.\n\t\t\t\t\tlet rangeFrom = moment.unix(response.views_timestamps[0]);\n\t\t\t\t\tlet rangeTo = moment.unix(response.views_timestamps[response.views_timestamps.length - 1]);\n\n\t\t\t\t\t// Additional data for direct pass to chart component.\n\t\t\t\t\t// Update startDate/endDate for live streams, because it is automatically trimmed from empty data\n\t\t\t\t\t// and can be shorter than requested time window.\n\t\t\t\t\tchartType = 'lineTime';\n\t\t\t\t\tstartDate = rangeFrom;\n\t\t\t\t\tendDate = rangeTo;\n\n\t\t\t\t\tfor (let pos = 0; pos < response.views.length; pos++) {\n\t\t\t\t\t\tviewsData.data.push(parseFloat(response.views[pos]));\n\t\t\t\t\t\tviewsLabels.push(moment.unix(response.views_timestamps[pos]).toISOString());\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// VOD engagement rate.\n\t\t\t\t\tlet duration = response.meta.duration;\n\t\t\t\t\tfor (let pos = 0; pos < response.views.length; pos++) {\n\t\t\t\t\t\tlet val = parseFloat(response.views[pos]);\n\t\t\t\t\t\tviewsData.data.push(val);\n\n\t\t\t\t\t\tlet label = Math.floor(pos * duration / response.views.length) + 's';\n\t\t\t\t\t\tviewsLabels.push(label);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresolveSource.next({\n\t\t\t\t\tdata: [viewsData], labels: viewsLabels,\n\t\t\t\t\tstartDate: startDate, endDate: endDate,\n\t\t\t\t\tchartType: chartType, granularity: granularity,\n\t\t\t\t\tresponse: response\n\t\t\t\t});\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/analytics/media.service.ts","import { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\nimport { BaseService } from './base.service';\nimport { AuthService } from '../auth.service';\nimport { ExceptionService } from '../exception.service';\nimport { UrlService } from '../url.service';\nimport { Subject } from 'rxjs/Subject';\nimport { UserService } from '../user.service';\nimport { GranularityType } from '../../module/analytics/component/charts/chart.model';\nimport moment from 'moment';\n\n@Injectable()\nexport class AlbumService extends BaseService {\n\n\tgetTopViewedForRange(range:any, filters: AlbumReportsFilters, pagingOptions?: any | null, accountId?: number | null) : Observable<any> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\t\tlet params = this.prepareParamsForTopList(range, filters, pagingOptions);\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId.toString() + '/analytics/album/top-viewed-for-range?' + params.join('&');\n\t\treturn super.read(url);\n\t}\n\n\tgetTopCompletlyViewedForRange(range:any, filters: AlbumReportsFilters, pagingOptions?: any | null, accountId?: number | null) : Observable<any> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\t\tlet params = this.prepareParamsForTopList(range, filters, pagingOptions);\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId.toString() + '/analytics/album/top-completly-viewed-for-range?' + params.join('&');\n\t\treturn super.read(url);\n\t}\n\n\tprivate prepareParamsForTopList(range: any, filters: AlbumReportsFilters, pagingOptions: any | null): Array<string> {\n\t\tlet r = this.initDateRange(range);\n\n\t\tlet params = new Array<string>();\n\t\tparams.push('tsrange=' + r.startDate.unix().toString() + ','+r.endDate.unix().toString());\n\t\tparams = params.concat(filters.getQueryParamsList());\n\t\tif(pagingOptions !== null) {\n\t\t\tparams.push('page=' + pagingOptions.page);\n\t\t\tparams.push('page_size=' + pagingOptions.page_size);\n\t\t}\n\t\treturn params;\n\t}\n\n\tgetAlbumStatsHistory(collectionId: string, startDate: moment.Moment, endDate: moment.Moment, granularity: GranularityType, accountId?: number):\n\t\tObservable<{ series: Array<chartjs.LineChartDataset>, labels: Array<string> }> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet params = this.prepareTsperiodParams(startDate, endDate, granularity);\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/album/' + this.safeEncodeUriComponentForDjango(collectionId) + '/stats-history?' + params.join('&');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: Array<any>) => {\n\t\t\t\tlet completeViewsData: chartjs.LineChartDataset = { data: [], label: 'Album listening' };\n\t\t\t\tlet viewsData: chartjs.LineChartDataset = { data: [], label: 'Songs listenings' };\n\t\t\t\tlet usersData: chartjs.LineChartDataset = { data: [], label: 'Users' };\n\t\t\t\tlet commonLabels: Array<string> = [];\n\t\t\t\tlet hasNotEmptyUsersStats = false;\n\t\t\t\tlet val: number = 0;\n\n\t\t\t\tfor (let rec of response) {\n\t\t\t\t\tcompleteViewsData.data.push(parseFloat(rec.complete_views));\n\t\t\t\t\tviewsData.data.push(parseFloat(rec.views));\n\t\t\t\t\tif('users' in rec) {\n\t\t\t\t\t\tval = parseFloat(rec.users);\n\t\t\t\t\t\tusersData.data.push(val);\n\t\t\t\t\t\tif(val > 0) {\n\t\t\t\t\t\t\thasNotEmptyUsersStats = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tusersData.data.push(null);\n\t\t\t\t\t}\n\t\t\t\t\tcommonLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t}\n\n\t\t\t\tlet series = hasNotEmptyUsersStats ? [usersData, viewsData, completeViewsData] : [viewsData, completeViewsData];\n\t\t\t\tresolveSource.next({ series: series, labels: commonLabels });\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetAlbumStatsSummary(collectionId: string, startDate: moment.Moment, endDate: moment.Moment, granularityForHistory?: GranularityType, fields?: Array<string>, accountId?: number):\n\t\tObservable<{ series: Array<chartjs.LineChartDataset>, labels: Array<string> }> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\tif (granularityForHistory) {\n\t\t\tthis.alignPeriodRange(startDate, endDate, granularityForHistory);\n\t\t}\n\t\tif (!fields) {\n\t\t\tfields = ['views','users','complete_views'];\n\t\t}\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/album/' + this.safeEncodeUriComponentForDjango(collectionId) +\n\t\t\t'/stats-history?tsrange[]=' + startDate.unix() + ',' + endDate.unix() +\n\t\t\t'&fields=' + fields.join(',');\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: Array<any>) => {\n\t\t\t\tresolveSource.next(response[0]);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetAlbumItemsReport(collectionId: string, startDate: moment.Moment, endDate: moment.Moment, accountId?: number): Observable<any> {\n\t\tif (!accountId) {\n\t\t\taccountId = this.user.accountId;\n\t\t}\n\n\t\t// Prepare request params.\n\t\tlet r = this.initDateRange({startDate: startDate, endDate: endDate});\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tlet url = 'accounts/' + accountId + '/analytics/album/' + this.safeEncodeUriComponentForDjango(collectionId) + '/items-report?tsrange='\n\t\t\t+ r.startDate.unix().toString() + ','+r.endDate.unix().toString();\n\t\treturn super.read(url);\n\t}\n}\n\nexport class AlbumReportsFilters {\n\tpublic text: string;\n\tpublic tags: string[] | null;\n\n\tpublic getQueryParamsList(): string[] {\n\t\tlet result:string[] = [];\n\n\t\tif((this.text !== null) && (this.text != '')) {\n\t\t\tresult.push(encodeURIComponent('filter[text]') + '=' + encodeURIComponent(this.text));\n\t\t}\n\t\tif(this.tags && (this.tags.length > 0)) {\n\t\t\tresult.push(encodeURIComponent('filter[tags]') + '=' + encodeURIComponent(this.tags.join(',')));\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/analytics/album.service.ts","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { map } from 'rxjs/operators';\nimport { BaseService } from './base.service';\n\nexport interface TagRecord {\n\tid: number;\n\ttag: string;\n}\nexport interface TagRecords {\n\ttotal_records: number;\n\tpage: number;\n\tpage_size: number;\n\trecords: TagRecord[];\n\tprefix: string;\n}\ninterface PrefixedTags {\n\tprefix: string;\n\ttotal: number;\n\tvalues: TagRecord[];\n}\n\n@Injectable()\nexport class TagService extends BaseService {\n\n\tfindTags(accountId: number, text: string): Observable<string[]> {\n\t\treturn super.read(`accounts/${accountId}/analytics/tag?text=${this.safeEncodeUriComponentForDjango(text)}`);\n\t}\n\n\tlist(accountId: number, search: { text: string; } | { ids: number[]; }, page: number = null, page_size: number = null): Observable<TagRecords> {\n\t\tconst args = [];\n\t\tif (page != null && !isNaN(page))\n\t\t\targs.push(`page=${page}`);\n\t\tif (page_size != null && !isNaN(page_size))\n\t\t\targs.push(`page_size=${page_size}`);\n\t\tif (`text` in search && !!search.text)\n\t\t\targs.push(`text=${this.safeEncodeUriComponentForDjango(search.text)}`);\n\t\tif (`ids` in search && !!search.ids)\n\t\t\targs.push(`ids=${search.ids.join(',')}`);\n\n\t\treturn super.read(`accounts/${accountId}/analytics/tag-list?${args.join(`&`)}`)\n\t\t\t.pipe(map((tags: TagRecords) => {\n\t\t\t\tconst prefix = !!tags && !!tags.records && tags.records.length > 0 && !!tags.records[0].tag && tags.records[0].tag.indexOf(':') > -1\n\t\t\t\t\t? tags.records[0].tag.split(':')[0]\n\t\t\t\t\t: null;\n\t\t\t\treturn { ...tags, prefix };\n\t\t\t}));\n\t}\n\n\tprefixes(accountId: number, page = 1, page_size = 10): Observable<TagRecords[]> {\n\t\treturn super.read(`accounts/${accountId}/analytics/tag-prefixes`)\n\t\t\t.pipe(map((tags: PrefixedTags[]) => tags.map(t => ({ page, page_size, records: t.values, total_records: t.total, prefix: t.prefix }))));\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/analytics/tag.service.ts","import { EventEmitter, Injectable } from '@angular/core';\nimport { TranslationService } from 'angular-l10n';\nimport { FlashMessagesService } from 'angular2-flash-messages';\nimport { Observable } from 'rxjs/Observable';\nimport { finalize, tap } from 'rxjs/operators';\nimport { UserService } from '../user.service';\nimport { TagService } from './tag.service';\n\n@Injectable()\nexport class ExistingTagSelectorService {\n\n\tselectedTagsList: string[] = [];\n\tchangeDetectionEmitter = new EventEmitter<void>();\n\tloadingEmitter = new EventEmitter<boolean>();\n\n\t// these methods are directly injected to `<tag-input>` and `<tag-input-dropdown>`\n\t// to avoid errors with invalid 'this' contaxt 'bind' these methods.\n\treadonly onTagSearch = this.search.bind(this);\n\treadonly onTagAdding = this.add.bind(this);\n\n\tprivate tagSelectorAvailableItems: null | Array<string>;\n\n\tconstructor(\n\t\tprivate user: UserService,\n\t\tprivate tagService: TagService,\n\t\tprivate translation: TranslationService,\n\t\tprivate flashMessagesService: FlashMessagesService) {\n\t\tthis.reset();\n\t}\n\n\tprivate search(text: string): Observable<any> {\n\t\tthis.loadingEmitter.emit(true);\n\t\treturn this.tagService.findTags(this.user.accountId, text)\n\t\t\t.pipe(\n\t\t\t\ttap((data: string[]) => this.tagSelectorAvailableItems = data),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tthis.loadingEmitter.emit(false);\n\t\t\t\t\tthis.changeDetectionEmitter.emit();\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tprivate add(tag: any): Observable<any> {\n\t\t// Tag was selected from auto complete drop down. In such case tag is and object. Just pass through.\n\t\tif (tag && tag.value) {\n\t\t\treturn Observable.of(tag);\n\t\t}\n\n\t\t// Tag empty - just ignore without any notification. Accidental user action.\n\t\tif (!tag) {\n\t\t\treturn Observable.of(null);\n\t\t}\n\n\t\t// Tag is a string. Check it if is on auto complete list.\n\t\tlet tagNorm = tag.toLowerCase();\n\t\t// Check if tag is on search list. If so then return it.\n\t\tif (this.tagSelectorAvailableItems) {\n\t\t\tfor (let t of this.tagSelectorAvailableItems) {\n\t\t\t\tif (t.toLowerCase() == tagNorm) {\n\t\t\t\t\treturn Observable.of(t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If not present return null for skipping it. Only existing tags can be chosen.\n\t\tthis.flashMessagesService.show(this.translation.translate('ANALYTICS_TAG_SERVICE.SELECT_EXISTING_TIP'), { cssClass: 'alert-warning', timeout: 5000 });\n\t\treturn Observable.of(null);\n\t}\n\n\treset() {\n\t\tthis.selectedTagsList = [];\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/analytics/existing.tag.selector.service.ts","/**\n * Created by tkwiatek on 5/20/16.\n */\nimport moment from 'moment';\n\nexport class DateUtil {\n    static unixDay = 86400;\n    static unixToDate(unix: number): Date { return new Date(unix * 1000); }\n    static dateToUnix(date: Date): number { return Math.floor(date.getTime() / 1000); }\n    static dmyObject(date: Date): { day: string; month: string; year: string; } {\n        return {\n            day: DateUtil.addLeadZeroes(date.getDate().toString()),\n            month: DateUtil.addLeadZeroes((date.getMonth() + 1).toString()),\n            year: DateUtil.addLeadZeroes(date.getFullYear().toString())\n        };\n    }\n\n    static unixToTimeString(timestamp: number): string {\n        return moment.unix(timestamp).format('LTS');\n    }\n\n    static unixToDateString(timestamp: number): string {\n        return moment.unix(timestamp).format('L');\n    }\n\n    // TODO Check if default separator can be changed from '-' to ':'.\n    // static hhmmss(d: Date, separator = '-'): string {\n    //     return DateUtil.addLeadZeroes(d.getHours().toString())\n    //         + separator + DateUtil.addLeadZeroes((d.getMinutes()).toString())\n    //         + separator + DateUtil.addLeadZeroes((d.getSeconds()).toString());\n    // }\n    // static ddmmyyyy(d: Date, separator = '-'): string {\n    //     return DateUtil.addLeadZeroes(d.getDate().toString())\n    //         + separator + DateUtil.addLeadZeroes((d.getMonth() + 1).toString())\n    //         + separator + d.getFullYear();\n    // }\n\n    static addLeadZeroes(str: string, zeroesCount: number = 2): string {\n        while (str.length < zeroesCount) str = '0' + str; return str;\n    }\n    /**\n     * Function calculates rounded to days difference between two selected unix time stamps.\n     * Important: Be careful this method use Math.round() for dates calculation.\n     */\n    static unixDiffInDays(unix1: number, unix2: number): number {\n        return Math.round((unix1 - unix2) / DateUtil.unixDay);\n    }\n    /**\n     * Function add number of defined days to date defined in unix timestamp.\n     * Days are counting in local timezone.\n     */\n    static unixAddDays(unix: number, days: number) {\n        let result = new Date(unix * 1000);\n        result.setDate(result.getDate() + days);\n        return DateUtil.dateToUnix(result);\n    }\n    static unixSubtractDays(unix: number, days: number): number { return unix - DateUtil.daysInUnix(days); }\n    static daysInUnix(days: number): number { return (days * DateUtil.unixDay); }\n    static weeksInUnix(weeks: number): number { return ((weeks * 7) * DateUtil.unixDay); }\n    static unixIsBetweenDates(unix: number, rangeMin: any, rangeMax: any): boolean {\n        if (unix < DateUtil.dateToUnix(rangeMin)) return false;\n        if (unix > DateUtil.dateToUnix(rangeMax)) return false;\n        return true;\n    }\n    static unixDayOfWeek(unix: number): number {\n        let dow = DateUtil.unixToDate(unix).getDay();\n        return dow == 0 ? 7 : dow;\n    }\n    /**\n     * Function return number of days for selected in year month.\n     * Important: month numbering starts from 1.\n     */\n    static daysInMonth(year: number, month: number): number { return new Date(year, month, 0).getDate(); }\n    static setDateStartOfDay(date: Date): Date { date.setHours(0, 0, 0, 0); return date; }\n    static formatDuration(totalSeconds: number): string {\n        if(typeof totalSeconds !== 'number') {\n            return '-';\n        }\n\n        totalSeconds = Math.floor(totalSeconds);\n        let hours = Math.floor(totalSeconds / 3600);\n        let minutes = Math.floor((totalSeconds % 3600) / 60);\n        let seconds = totalSeconds % 60;\n\n        if(hours > 0) {\n            return hours + 'h ' + minutes + 'm';\n        }\n        if(minutes > 0) {\n            return minutes + 'm ' + seconds + 's';\n        }\n        return seconds + 's';\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/util/date.util.ts","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UserService } from '../../../service/user.service';\nimport { AlbumService, AlbumReportsFilters } from '../../../service/analytics/album.service';\nimport { TagService } from '../../../service/analytics/tag.service';\nimport { ExistingTagSelectorService } from '../../../service/analytics/existing.tag.selector.service';\nimport { DateUtil } from '../../../util/date.util';\nimport { MediaMetadata, MediaMetadataListResponse, MediaStatsHistoryViewsRec } from '../../../model/api.model';\nimport { GranularityType, ChartType, ChartTimeSeriesModel } from '../component/charts/chart.model';\nimport { TagInputModule } from 'ngx-chips';\nimport moment from 'moment';\n\n@Component({\n\tselector: 'analytics-albums-view',\n\ttemplate: require('./albums.view.component.html'),\n\tviewProviders: [],\n\tstyles: [\n\t\t'#albums-list th.sortable{cursor:pointer;}',\n\t\t'#albums-list td{cursor:pointer;word-break: break-word;}',\n\t\t':host .chart-loader {height:200px;position:relative;}',\n\t\t':host .media-list-loader {height:752px;}',\n\t\t':host .collection-items-list-loader {height:608px;position:relative;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsAlbumsView extends Localization implements OnInit {\n\tMEDIA_PREVIEW_VIEWS_HISTORY_DAYS: number = 30;\n\tTOP_LIST_TYPE_ITEM_VIEWS: string = 'item_views';\n\tTOP_LIST_TYPE_COMPLETE_VIEWS: string = 'complete_views';\n\n\tselectedCollectionMetadata: any;\n\tselectedCollectionItemsPaging: any;\n\tcollectionMetadataList: Array<any> | null;\n\thasCollectionMetadataListUsersStats: boolean;\n\tcollectionMetadataTotalNum: number;\n\tcollectionMetadataByCollectionId: Map<string, any>;\n\tdateUtil: DateUtil;\n\ttopListPagingOptions: any;\n\tfilters: any;\n\ttopListType: string;\n\tpreviewHistoryStats: ChartTimeSeriesModel;\n\ttagsSelectedList: Array<string>;\n\tcollectionItemsStats: Array<any>;\n\thasUsersInCollectionItemsStats: boolean;\n\n\tconstructor(public locale: LocaleService,\n\t\t\t\tpublic translation: TranslationService,\n\t\t\t\tpublic mediaAnalyticsService: MediaService,\n\t\t\t\tpublic albumService: AlbumService,\n\t\t\t\tpublic tagService: TagService,\n\t\t\t\tpublic user: UserService,\n\t\t\t\tprivate cdr: ChangeDetectorRef,\n\t\t\t\tprivate existingTagSelector: ExistingTagSelectorService) {\n\t\tsuper(locale, translation);\n\n\t\tthis.selectedCollectionItemsPaging = {\n\t\t\tpage: 1,\n\t\t\tpage_size: 8,\n\t\t\titems: [],\n\t\t\tareUsersInItems: false\n\t\t};\n\t\tthis.collectionMetadataList = null;\n\t\tthis.hasCollectionMetadataListUsersStats = false;\n\t\tthis.collectionMetadataByCollectionId = new Map<string, any>();\n\t\tthis.collectionMetadataTotalNum = 0;\n\t\tthis.topListPagingOptions = {\n\t\t\tpage: 1,\n\t\t\tpage_size: 16\n\t\t};\n\t\tthis.filters = {\n\t\t\ttext: null,\n\t\t};\n\t\tthis.topListType = this.TOP_LIST_TYPE_ITEM_VIEWS;\n\n\t\tthis.selectedCollectionMetadata = null;\n\t\tthis.collectionItemsStats = null;\n\t\tthis.hasUsersInCollectionItemsStats = false;\n\n\t\t// Making alias for view.\n\t\tthis.dateUtil = DateUtil;\n\n\t\t// Call crd on data change in existingTagSelector. Needed for correct data refresh on tags load.\n\t\tthis.existingTagSelector.changeDetectionEmitter.subscribe(() => this.cdr.markForCheck());\n\t\tthis.existingTagSelector.reset();\n\t}\n\n\tngOnInit() {\n\t\tthis.loadData();\n\t}\n\n\tselectMediaMetadata(collectionId: string): void {\n\t\tif(this.selectedCollectionMetadata && (this.selectedCollectionMetadata.collection_id == collectionId)) {\n\t\t\t// Skip selection if collectionMetadata was not updated.\n\t\t\treturn;\n\t\t}\n\n\t\t// Select new data.\n\t\tthis.selectedCollectionMetadata = this.collectionMetadataByCollectionId.get(collectionId);\n\t\tthis.loadHistoryStatsForSelectedCollection();\n\t\tthis.loadItemsStatsForSelectedCollection();\n\t}\n\n\tprivate loadHistoryStatsForSelectedCollection(): void {\n\t\tlet endDate = moment().startOf('day');\n\t\tlet startDate = endDate.clone().subtract(this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS, 'days');\n\t\tlet granularity: GranularityType = 'day';\n\n\t\t// Mark previewHistoryStats as null. This will show loader.\n\t\tthis.previewHistoryStats = null;\n\n\t\tthis.albumService.getAlbumStatsHistory(this.selectedCollectionMetadata.collection_id, startDate, endDate, granularity)\n\t\t\t.subscribe((data: { series: Array<chartjs.LineChartDataset>, labels: Array<string> }) => {\n\t\t\t\tthis.previewHistoryStats = {\n\t\t\t\t\tdata: data.series,\n\t\t\t\t\tlabels: data.labels,\n\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\tendDate: endDate,\n\t\t\t\t\tchartType: 'lineTime',\n\t\t\t\t\tgranularity: granularity\n\t\t\t\t};\n\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\t}\n\n\tprivate loadItemsStatsForSelectedCollection() {\n\t\tthis.collectionItemsStats = null;\n\n\t\tlet endDate = moment().startOf('day');\n\t\tlet startDate = endDate.clone().subtract(this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS, 'days');\n\t\tthis.selectedCollectionItemsPaging.page = 1;\n\t\tthis.selectedCollectionItemsPaging.items = [];\n\t\tthis.albumService.getAlbumItemsReport(this.selectedCollectionMetadata.collection_id, startDate, endDate)\n\t\t\t.subscribe((data: any) => {\n\t\t\t\tthis.hasUsersInCollectionItemsStats = false;\n\t\t\t\tlet items = [];\n\t\t\t\tlet position = 1;\n\t\t\t\tlet watchingTime = null;\n\t\t\t\tlet avgWatchingTime = null;\n\t\t\t\tlet views = null;\n\t\t\t\tlet users = null;\n\t\t\t\tfor(let rec of data.stats) {\n\t\t\t\t\tviews = parseFloat(rec.views);\n\t\t\t\t\twatchingTime = parseFloat(rec.watching_time);\n\t\t\t\t\tavgWatchingTime = (views > 0) ? watchingTime / views : null;\n\t\t\t\t\tusers = parseFloat(rec.users);\n\t\t\t\t\tif(users > 0) {\n\t\t\t\t\t\tthis.hasUsersInCollectionItemsStats = true;\n\t\t\t\t\t}\n\n\t\t\t\t\titems.push({\n\t\t\t\t\t\tpos: position,\n\t\t\t\t\t\tmaterial_id: rec.material_id,\n\t\t\t\t\t\ttitle: rec.title,\n\t\t\t\t\t\tduration: rec.duration,\n\t\t\t\t\t\tviews: views,\n\t\t\t\t\t\tusers: users,\n\t\t\t\t\t\ttime: watchingTime,\n\t\t\t\t\t\tavgtime: avgWatchingTime\n\t\t\t\t\t});\n\t\t\t\t\tposition++;\n\t\t\t\t}\n\n\t\t\t\tthis.selectedCollectionItemsPaging.items = items;\n\t\t\t\tthis.collectionItemsStats = items.slice(0, this.selectedCollectionItemsPaging.page_size);\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\t}\n\n\t// Get time from account creation to last hour.\n\t// As end for range get last hour, for not updating\n\t// top list too frequently - for consistient paging.\n\tprivate prepareDateRangeForTopLists(): any {\n\t\treturn {\n\t\t\tstartDate: moment.unix(this.user.accountCreatedAtTs),\n\t\t\tendDate: moment().startOf('hour')\n\t\t};\n\t}\n\n\tprivate getPageReportFilters() {\n\t\tlet result = new AlbumReportsFilters();\n\t\tresult.text = this.filters.text;\n\t\tresult.tags = this.existingTagSelector.selectedTagsList;\n\t\treturn result;\n\t}\n\n\tprivate onTopListData(data: any) {\n\t\tlet records = [];\n\t\tlet hasUsersStats = false;\n\t\tfor(let mcm of data.records) {\n\t\t\tlet rec = {\n\t\t\t\tcollection_id: mcm.collection.collection_id,\n\t\t\t\ttitle: mcm.collection.title,\n\t\t\t\titemsNum: mcm.collection_items_num,\n\t\t\t\tmediaViews: parseFloat(mcm.views),\n\t\t\t\tcollectionViews: parseFloat(mcm.complete_views),\n\t\t\t\tcollectionUsers: parseFloat(mcm.users)\n\t\t\t};\n\t\t\trecords.push(rec);\n\t\t\tif(rec.collectionUsers > 0) {\n\t\t\t\thasUsersStats = true;\n\t\t\t}\n\t\t}\n\n\t\tthis.hasCollectionMetadataListUsersStats = hasUsersStats;\n\t\tthis.collectionMetadataList = records;\n\t\tthis.collectionMetadataTotalNum = data.total_records;\n\t\tthis.collectionMetadataByCollectionId = new Map<string, any>();\n\t\tfor(let mm of records) {\n\t\t\tthis.collectionMetadataByCollectionId.set(mm.collection_id, mm);\n\t\t}\n\n\t\tthis.cdr.markForCheck();\n\n\t\t// Preselect first element if data any is available and there is no selected item.\n\t\tif((this.selectedCollectionMetadata == null) && (this.collectionMetadataList != null) && (this.collectionMetadataList.length > 0)) {\n\t\t\tthis.selectMediaMetadata(this.collectionMetadataList[0].collection_id);\n\t\t}\n\t}\n\n\tprivate loadData() {\n\t\t// Show loader by setting collectionMetadataList = null;\n\t\tthis.collectionMetadataList = null;\n\n\t\t// Load data.\n\t\tlet range = this.prepareDateRangeForTopLists();\n\t\tlet filters = this.getPageReportFilters();\n\n\t\tif(this.topListType == this.TOP_LIST_TYPE_ITEM_VIEWS) {\n\t\t\tthis.albumService.getTopViewedForRange(range, filters, this.topListPagingOptions).subscribe((data: any) => {\n\t\t\t\tthis.onTopListData(data);\n\t\t\t});\n\t\t} else {\n\t\t\tthis.albumService.getTopCompletlyViewedForRange(range, filters, this.topListPagingOptions).subscribe((data: any) => {\n\t\t\t\tthis.onTopListData(data);\n\t\t\t});\n\t\t}\n\n\t}\n\n\tisMediaMetadataSelected(collection_id?: number): boolean {\n\t\treturn collection_id && this.selectedCollectionMetadata &&  (this.selectedCollectionMetadata.collection_id == collection_id);\n\t}\n\n\tonSearchKeyPress(e: any): void {\n\t\tlet code: number = e.keyCode || e.which;\n\t\tif(code == 13) {\n\t\t\t// Enter pressed - perform search.\n\t\t\tthis.topListPagingOptions.page = 1;\n\t\t\tthis.loadData();\n\t\t}\n\t}\n\n\tonColumnHeaderClick(selectedTopListType: string): void {\n\t\tthis.topListType = selectedTopListType;\n\t\tthis.topListPagingOptions.page = 1;\n\t\tthis.loadData();\n\t}\n\n\tonTopListPageChanged(page: number): void {\n\t\tthis.topListPagingOptions.page = page;\n\t\tthis.loadData();\n\t}\n\n\tonTagAdd(_event: any) {\n\t\tthis.loadData();\n\t}\n\n\tonTagRemove(_event: any) {\n\t\tthis.loadData();\n\t}\n\n\tonSelectedCollectionItemsListPageChanged(page: number): void {\n\t\tthis.selectedCollectionItemsPaging.page = page;\n\t\tlet fromPos = (page - 1) * this.selectedCollectionItemsPaging.page_size;\n\t\tlet toPos = fromPos + this.selectedCollectionItemsPaging.page_size;\n\t\tthis.collectionItemsStats = this.selectedCollectionItemsPaging.items.slice(fromPos, toPos);\n\t\tthis.cdr.markForCheck();\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/albums/albums.view.component.ts","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UserService } from '../../../service/user.service';\nimport { AlbumService } from '../../../service/analytics/album.service';\nimport { ExportService } from '../../../service/export.service';\nimport { AnalyticsAlbumDetailsResolver } from './album.details.resolver';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport { GranularityType, ChartType, ChartTimeSeriesModel } from '../component/charts/chart.model';\nimport { Subscription } from 'rxjs/Subscription';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport moment from 'moment';\n\n@Component({\n\tselector: 'analytics-album-details-view',\n\ttemplate: require('./album.details.view.component.html'),\n\tviewProviders: [],\n\tstyles: [\n\t\t':host .chart-loader {height:300px;position:relative;}',\n\t\t':host .dl-horizontal dt {width:80px;}',\n\t\t':host .dl-horizontal dd {margin-left:90px;}',\n\t\t':host .widget-stats .stats-number {line-height: 65px;}',\n\t\t'#songs-list td{cursor:pointer;word-break: break-word;}',\n\t\t'@media (max-width:1599px){:host .hidden-xlg-below{display:none!important}}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsAlbumDetailsView extends Localization implements OnInit, OnDestroy {\n\trouteSubscription: Subscription;\n\tcollectionMetadata: any;\n\tcollectionId: string;\n\tdateUtil: DateUtil;\n\n\t// Chart fields.\n\thistoryStats: ChartTimeSeriesModel;\n\tchartTypes: Array<ChartType> = ['lineTime', 'bar'];\n\tgranularityTypes: Array<GranularityType> = ['all'];\n\tengagementRateStats: any;\n\ttotalMediaViewsInRange: number;\n\ttotalCollectionViewsInRange: number;\n\ttotalCollectionUsersInRange: number;\n\ttotalAvgWatchingTime: number;\n\tcollectionItemStats: Array<any> | null;\n\tmediaStatsList: Array<any> | null;\n\tmediaStatsByMaterialId: Map<string, any>;\n\tpreviewHistoryStats: ChartTimeSeriesModel;\n\tselectedMediaStats: any;\n\tpagingOptions: any;\n\thasUsersInCollectionItemStats: boolean;\n\n\tconstructor(private route: ActivatedRoute,\n\t\t\t\tpublic locale: LocaleService,\n\t\t\t\tpublic translation: TranslationService,\n\t\t\t\tpublic mediaAnalyticsService: MediaService,\n\t\t\t\tpublic albumService: AlbumService,\n\t\t\t\tpublic user: UserService,\n\t\t\t\tprivate exportService: ExportService,\n\t\t\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\t// Init chart model. When data === null, then loaded is displayed.\n\t\tlet range = this.user.getDateRangeSelection();\n\t\tlet endDate = range.endDate;\n\t\tlet startDate = range.startDate;\n\t\tlet granularity: GranularityType = 'day';\n\n\t\tthis.historyStats = {\n\t\t\tdata: null,\n\t\t\tlabels: null,\n\t\t\tstartDate: startDate,\n\t\t\tendDate: endDate,\n\t\t\tchartType: 'lineTime',\n\t\t\tgranularity: granularity\n\t\t};\n\n\t\tthis.totalMediaViewsInRange = null;\n\t\tthis.totalCollectionViewsInRange = null;\n\t\tthis.totalCollectionUsersInRange = null;\n\t\tthis.totalAvgWatchingTime = null;\n\t\tthis.selectedMediaStats = null;\n\t\tthis.hasUsersInCollectionItemStats = false;\n\n\t\tthis.collectionItemStats = null;\n\t\tthis.pagingOptions = {\n\t\t\tpage: 1,\n\t\t\tpage_size: 15\n\t\t};\n\n\t\t// Alias.\n\t\tthis.dateUtil = DateUtil;\n\n\t\tthis.routeSubscription = this.route.data.subscribe((data: any) => this.onInitialAlbumItemsReportLoad(data.account));\n\t}\n\n\tngOnDestroy(): void {\n\t\tif(this.routeSubscription)\n\t\t\tthis.routeSubscription.unsubscribe();\n\t}\n\n\tngOnInit(): void {\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate onAlbumItemsReport(data: any) {\n\t\tthis.collectionMetadata = data.collection;\n\t\tthis.collectionId = data.collection.collection_id;\n\n\t\tthis.hasUsersInCollectionItemStats = false;\n\t\tlet itemStats = new Array<any>();\n\t\tlet pos = 1;\n\t\tfor(let rec of data.stats) {\n\t\t\tlet views = parseFloat(rec.views);\n\t\t\tlet users = parseFloat(rec.users);\n\t\t\tlet watchingTime = parseFloat(rec.watching_time);\n\t\t\tlet avgWatchingTime = (views > 0) ? watchingTime / views : null;\n\t\t\tif(users > 0) {\n\t\t\t\tthis.hasUsersInCollectionItemStats = true;\n\t\t\t}\n\n\t\t\titemStats.push({\n\t\t\t\t\tpos: pos,\n\t\t\t\t\tmaterial_id: rec.material_id,\n\t\t\t\t\ttitle: rec.title,\n\t\t\t\t\tduration: rec.duration,\n\t\t\t\t\tviews: views,\n\t\t\t\t\tusers: users,\n\t\t\t\t\ttime: watchingTime,\n\t\t\t\t\tavgtime: avgWatchingTime\n\t\t\t});\n\t\t\tpos++;\n\t\t}\n\n\t\tthis.collectionItemStats = itemStats;\n\t\tthis.mediaStatsList = itemStats.slice(0, this.pagingOptions.page_size);\n\n\t\t// Init media index.\n\t\tthis.mediaStatsByMaterialId = new Map<string, any>();\n\t\tfor(let mm of this.collectionItemStats) {\n\t\t\tthis.mediaStatsByMaterialId.set(mm.material_id, mm);\n\t\t}\n\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate onInitialAlbumItemsReportLoad(data: any) {\n\t\tthis.onAlbumItemsReport(data);\n\t\tthis.loadData();\n\t}\n\n\tprivate loadAlbumItemsReport() {\n\t\tlet range = this.user.getDateRangeSelection();\n\t\tlet endDate = range.endDate;\n\t\tlet startDate = range.startDate;\n\t\tthis.albumService.getAlbumItemsReport(this.collectionId, startDate, endDate)\n\t\t\t.subscribe((data: any) => {\n\t\t\t\tthis.onAlbumItemsReport(data)\n\t\t\t});\n\t}\n\n\tprivate loadData() {\n\t\t// Set this.historyStats.data for marking that data is loading.\n\t\tthis.historyStats.data = null;\n\n\t\t// Load history stats for chart.\n\t\tthis.albumService.getAlbumStatsHistory(this.collectionMetadata.collection_id, this.historyStats.startDate,\n\t\t\tthis.historyStats.endDate, this.historyStats.granularity).subscribe((data: any) => {\n\t\t\t\tthis.historyStats.data = data.series;\n\t\t\t\tthis.historyStats.labels = data.labels;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\n\t\t// Load summary stats for boxes.\n\t\tlet fieldsForSummary = ['views', 'users', 'complete_views', 'watching_time'];\n\t\tthis.albumService.getAlbumStatsSummary(this.collectionMetadata.collection_id, this.historyStats.startDate,\n\t\t\tthis.historyStats.endDate, this.historyStats.granularity, fieldsForSummary).subscribe((data: any) => {\n\t\t\t\tthis.totalMediaViewsInRange = parseFloat(data.views);\n\t\t\t\tthis.totalCollectionViewsInRange = parseFloat(data.complete_views);\n\t\t\t\tthis.totalCollectionUsersInRange = (data.users) ? parseFloat(data.users) : null;\n\t\t\t\tthis.totalAvgWatchingTime = (this.totalCollectionViewsInRange > 0) ? parseFloat(data.watching_time) / this.totalCollectionViewsInRange : null;\n\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\n\t}\n\n\tselectMediaStats(materialId: string): void {\n\t\tif(this.selectedMediaStats && (this.selectedMediaStats.material_id == materialId)) {\n\t\t\t// Skip selection if mediaStats was not updated.\n\t\t\treturn;\n\t\t}\n\n\t\t// Select new data.\n\t\tthis.selectedMediaStats = this.mediaStatsByMaterialId.get(materialId);\n\t\tthis.loadHistoryStatsForSelectedMedia();\n\t}\n\n\tisMediaStatsSelected(material_id?: number): boolean {\n\t\treturn material_id && this.selectedMediaStats &&  (this.selectedMediaStats.material_id == material_id);\n\t}\n\n\tprivate loadHistoryStatsForSelectedMedia(): void {\n\t\t// Skip load if not selected any media.\n\t\tif(!this.selectedMediaStats) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet range = this.user.getDateRangeSelection();\n\t\tlet endDate = range.endDate;\n\t\tlet startDate = range.startDate;\n\t\tlet granularity: GranularityType = this.historyStats ? this.historyStats.granularity : 'day';\n\n\t\t// Mark previewHistoryStats as null. This will show loader.\n\t\tthis.previewHistoryStats = null;\n\n\t\tthis.mediaAnalyticsService.getMediaStatsHistory(\n\t\t\tthis.selectedMediaStats.material_id, startDate, endDate, granularity)\n\t\t\t\t.subscribe((data: any) => {\n\t\t\t\tthis.previewHistoryStats = {\n\t\t\t\t\tdata: data.series,\n\t\t\t\t\tlabels: data.labels,\n\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\tendDate: endDate,\n\t\t\t\t\tchartType: 'lineTime',\n\t\t\t\t\tgranularity: granularity\n\t\t\t\t};\n\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\n\t\tif(this.user.isEngagementRateEnabled()) {\n\t\t\t// Set null for showing loader.\n\t\t\tthis.engagementRateStats = null;\n\n\t\t\tthis.mediaAnalyticsService.getMediaEngagementRate(\n\t\t\t\tthis.selectedMediaStats.material_id, startDate, endDate)\n\t\t\t\t\t.subscribe((data: any) => {\n\n\t\t\t\t\tthis.engagementRateStats = data;\n\t\t\t\t\t// When there is no data set empty object for marking that engagement rate\n\t\t\t\t\t// was loading, but no data were found.\n\t\t\t\t\tif(!this.engagementRateStats) {\n\t\t\t\t\t\tthis.engagementRateStats = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\t\t}\n\t}\n\n\tpublic onGranularityChange(granularity: GranularityType): void {\n\t\tthis.historyStats.granularity = granularity;\n\t\tthis.loadData();\n\t\tthis.loadHistoryStatsForSelectedMedia();\n\t}\n\n\tpublic onChartTypeChange(chartType: ChartType): void {\n\t\tthis.historyStats.chartType = chartType;\n\t\tthis.loadData();\n\t}\n\n\tpublic onDateRangeChanged(range: Array<moment.Moment>): void {\n\t\tthis.historyStats.startDate = range[0];\n\t\tthis.historyStats.endDate = range[1];\n\t\tthis.user.setDateRangeSelection(range[0].startOf('day'), range[1].startOf('day'));\n\t\tthis.loadData();\n\t\tthis.loadHistoryStatsForSelectedMedia();\n\t\tthis.loadAlbumItemsReport();\n\t}\n\n\tpublic chartDataExportCsv(): void {\n\t\tlet data = this.exportDataToCsv();\n\t\tlet exportFileName = 'bradmax_album_' + this.collectionMetadata.collection_id + '_' + this.historyStats.startDate.format('YYYYMMDD')\n\t\t\t+ '_' + this.historyStats.endDate.format('YYYYMMDD') + '_by' + this.historyStats.granularity + '.csv';\n\n\t\tthis.exportService.exportFileFromJs(exportFileName, data);\n\t}\n\n\tprivate exportDataToCsv(): string {\n\t\tlet linesNum = this.historyStats.labels ? this.historyStats.labels.length : 0;\n\t\tlet result = '';\n\t\tlet line = '';\n\t\tlet dateFormat = 'YYYY-MM-DD HH:mm';\n\t\tif((this.historyStats.granularity == 'day') || (this.historyStats.granularity == 'week')) {\n\t\t\tdateFormat = 'YYYY-MM-DD';\n\t\t} else if(this.historyStats.granularity == 'month') {\n\t\t\tdateFormat = 'YYYY-MM';\n\t\t}  else if(this.historyStats.granularity == 'year') {\n\t\t\tdateFormat = 'YYYY';\n\t\t}\n\n\t\t// Write header.\n\t\tlet columns = new Array<string>();\n\t\tcolumns.push('Date');\n\t\tfor(let col of this.historyStats.data) {\n\t\t\tcolumns.push(col.label);\n\t\t}\n\t\tresult += (columns.join(',') + \"\\r\\n\");\n\n\t\t// Write data.\n\t\tfor(let i=0; i < linesNum; i++) {\n\t\t\tline = '\"'+moment(this.historyStats.labels[i]).format(dateFormat) + '\"';\n\t\t\tfor(let col of this.historyStats.data) {\n\t\t\t\tline += (',' + col.data[i]);\n\t\t\t}\n\t\t\tline += \"\\r\\n\";\n\n\t\t\tresult += line;\n\t\t}\n\t\treturn result;\n\t}\n\n\tonPageChanged(page: number): void {\n\t\tthis.pagingOptions.page = page;\n\t\tlet fromPos = (page - 1) * this.pagingOptions.page_size;\n\t\tlet toPos = fromPos + this.pagingOptions.page_size;\n\t\tthis.mediaStatsList = this.collectionItemStats.slice(fromPos, toPos);\n\t\tthis.cdr.markForCheck();\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/albums/album.details.view.component.ts","import { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { Subscription } from 'rxjs/Subscription';\nimport { Injectable } from '@angular/core';\nimport { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { AnalyticsAlbumDetailsView } from './album.details.view.component';\nimport { AccountService } from '../../../service/account.service';\nimport { AlbumService } from '../../../service/analytics/album.service';\nimport { UserService } from '../../../service/user.service';\nimport moment from 'moment';\n\n@Injectable()\nexport class AnalyticsAlbumDetailsResolver implements Resolve<AnalyticsAlbumDetailsView> {\n\n\tDEFAULT_RANDE_FOR_ITEMS_REPORT: number = 30;\n\n\tconstructor(private albumService: AlbumService,\n\t\tpublic user: UserService) { }\n\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {\n\t\t//route parameters\n\t\tlet collectionId: string = route.params['collectionId'];\n\t\tif (!collectionId)\n\t\t\treturn false;\n\n\t\tif (this.user.accountId == null)\n\t\t\treturn false;\n\n\t\tlet range = this.user.getDateRangeSelection();\n\t\tlet endDate = null;\n\t\tlet startDate = null;\n\t\tif(range != null) {\n\t\t\tendDate = range.endDate;\n\t\t\tstartDate = range.startDate;\n\t\t} else {\n\t\t\tendDate = moment().startOf('day');\n\t\t\tstartDate = endDate.clone().subtract(this.DEFAULT_RANDE_FOR_ITEMS_REPORT, 'days');\n\t\t}\n\n\t\treturn this.albumService.getAlbumItemsReport(collectionId, startDate, endDate);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/albums/album.details.resolver.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { TagInputModule } from 'ngx-chips';\n\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\n\nimport { AnalyticsAlbumsView } from './albums.view.component';\nimport { AnalyticsAlbumDetailsView } from './album.details.view.component';\nimport { AnalyticsAlbumDetailsResolver } from './album.details.resolver';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { AlbumService } from '../../../service/analytics/album.service';\nimport { TagService } from '../../../service/analytics/tag.service';\nimport { ExistingTagSelectorService } from '../../../service/analytics/existing.tag.selector.service';\nimport { MediaService } from '../../../service/analytics/media.service';\n\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsAlbumsView },\n\t{ path: ':collectionId', component: AnalyticsAlbumDetailsView, resolve: { account: AnalyticsAlbumDetailsResolver } },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule,\n\t\tTagInputModule,\n\t\tPagerModule\n\t],\n\tdeclarations: [\n\t\tAnalyticsAlbumsView,\n\t\tAnalyticsAlbumDetailsView\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tMediaService,\n\t\tAlbumService,\n\t\tTagService,\n\t\tExistingTagSelectorService,\n\t]\n})\nexport class AnalyticsAlbumsModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/albums/albums.module.ts","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UserService } from '../../../service/user.service';\nimport { DateUtil } from '../../../util/date.util';\nimport { MediaMetadata, MediaMetadataListResponse, MediaStatsHistoryViewsRec } from '../../../model/api.model';\nimport { GranularityType, ChartType, ChartTimeSeriesModel } from '../component/charts/chart.model';\nimport moment from 'moment';\n\n@Component({\n\tselector: 'analytics-content-view',\n\ttemplate: require('./content.view.component.html'),\n\tviewProviders: [],\n\tstyles: [\n\t\t'#content-list th{cursor:pointer;}',\n\t\t'#content-list td{cursor:pointer;word-break: break-word;}',\n\t\t':host .chart-loader {height:200px;position:relative;}',\n\t\t':host .media-list-loader {height:300px;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsContentView extends Localization implements OnInit {\n\tMEDIA_PREVIEW_VIEWS_HISTORY_DAYS: number = 30;\n\n\tselectedMediaMetadata: any;\n\tmediaMetadataList: Array<any> | null;\n\tmediaMetadataTotalNum: number;\n\tmediaMetadataByMaterialId: Map<string, any>;\n\tdateUtil: DateUtil;\n\tsearchOptions: any;\n\tpreviewHistoryStats: ChartTimeSeriesModel;\n\tengagementRateStats: any;\n\n\tconstructor(public locale: LocaleService,\n\t\t\t\tpublic translation: TranslationService,\n\t\t\t\tpublic mediaAnalyticsService: MediaService,\n\t\t\t\tpublic user: UserService,\n\t\t\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tthis.mediaMetadataList = null;\n\t\tthis.mediaMetadataByMaterialId = new Map<string, any>();\n\t\tthis.mediaMetadataTotalNum = 0;\n\t\tthis.searchOptions = {\n\t\t\ttext: null,\n\t\t\tsort_by: null,\n\t\t\tsort_dir: 'asc',\n\t\t\tpage: 1,\n\t\t\tpage_size: 10\n\t\t};\n\n\t\tthis.selectedMediaMetadata = null;\n\n\t\t// Making alias for view.\n\t\tthis.dateUtil = DateUtil;\n\t}\n\n\tngOnInit() {\n\t\tthis.loadData();\n\t}\n\n\tselectMediaMetadata(materialId: string): void {\n\t\tif(this.selectedMediaMetadata && (this.selectedMediaMetadata.material_id == materialId)) {\n\t\t\t// Skip selection if mediaMetadata was not updated.\n\t\t\treturn;\n\t\t}\n\n\t\t// Select new data.\n\t\tthis.selectedMediaMetadata = this.mediaMetadataByMaterialId.get(materialId);\n\t\tthis.loadHistoryStatsForSelectedMedia();\n\t}\n\n\tprivate loadHistoryStatsForSelectedMedia(): void {\n\t\tlet endDate = moment().startOf('day');\n\t\tlet startDate = endDate.clone().subtract(this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS, 'days');\n\t\tlet granularity: GranularityType = 'day';\n\n\t\t// Mark previewHistoryStats as null. This will show loader.\n\t\tthis.previewHistoryStats = null;\n\n\t\tthis.mediaAnalyticsService.getMediaStatsHistory(\n\t\t\tthis.selectedMediaMetadata.material_id, startDate, endDate, granularity)\n\t\t\t\t.subscribe((data: any) => {\n\t\t\t\tthis.previewHistoryStats = {\n\t\t\t\t\tdata: data.series,\n\t\t\t\t\tlabels: data.labels,\n\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\tendDate: endDate,\n\t\t\t\t\tchartType: 'lineTime',\n\t\t\t\t\tgranularity: granularity\n\t\t\t\t};\n\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\n\t\tif(this.user.isEngagementRateEnabled()) {\n\t\t\t// Set null for showing loader.\n\t\t\tthis.engagementRateStats = null;\n\n\t\t\tthis.mediaAnalyticsService.getMediaEngagementRate(\n\t\t\t\tthis.selectedMediaMetadata.material_id, startDate, endDate)\n\t\t\t\t\t.subscribe((data: any) => {\n\n\t\t\t\t\tthis.engagementRateStats = data;\n\t\t\t\t\t// When there is no data set empty object for marking that engagement rate\n\t\t\t\t\t// was loading, but no data were found.\n\t\t\t\t\tif(!this.engagementRateStats) {\n\t\t\t\t\t\tthis.engagementRateStats = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate loadData() {\n\t\t// Load data.\n\t\t// Set mediaMetadataList as null. This will show the loader.\n\t\tthis.mediaMetadataList = null;\n\t\tthis.mediaAnalyticsService.getMediaMetadataList(this.searchOptions).subscribe((data: MediaMetadataListResponse) => {\n\t\t\tthis.mediaMetadataList = data.records;\n\t\t\tthis.mediaMetadataTotalNum = data.total_records;\n\t\t\tthis.mediaMetadataByMaterialId = new Map<string, any>();\n\t\t\tfor(let mm of data.records) {\n\t\t\t\tthis.mediaMetadataByMaterialId.set(mm.material_id, mm);\n\t\t\t}\n\n\t\t\tthis.cdr.markForCheck();\n\n\t\t\t// Preselect first element if data any is available and there is no selected item.\n\t\t\tif((this.selectedMediaMetadata == null) && (this.mediaMetadataList != null) && (this.mediaMetadataList.length > 0)) {\n\t\t\t\tthis.selectMediaMetadata(this.mediaMetadataList[0].material_id);\n\t\t\t}\n\t\t});\n\t}\n\n\tisMediaMetadataSelected(material_id?: number): boolean {\n\t\treturn material_id && this.selectedMediaMetadata &&  (this.selectedMediaMetadata.material_id == material_id);\n\t}\n\n\tonSearchKeyPress(e: any): void {\n\t\tlet code: number = e.keyCode || e.which;\n\t\tif(code == 13) {\n\t\t\t// Enter pressed - perform search.\n\t\t\tthis.searchOptions.page = 1;\n\t\t\tthis.loadData();\n\t\t}\n\t}\n\n\tonColumnHeaderClick(columnName: string): void {\n\t\tif(this.searchOptions.sort_by == columnName) {\n\t\t\t// Toggle sort direction.\n\t\t\tthis.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n\t\t} else {\n\t\t\t// Change sort column.\n\t\t\tthis.searchOptions.sort_by = columnName;\n\t\t\tthis.searchOptions.sort_dir = 'asc';\n\t\t}\n\n\t\tthis.searchOptions.page = 1;\n\t\tthis.loadData();\n\t}\n\n\tonPageChanged(page: number): void {\n\t\tthis.searchOptions.page = page;\n\t\tthis.loadData();\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/content/content.view.component.ts","/**\n * tRobakowski 11 feb 2019\n */\nimport { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\nimport moment from 'moment';\nimport { TranslationService } from 'angular-l10n';\n\n\nimport {\n\tPlayerBuildResponse,\n\tPlayerConfiguratorResponse,\n\tPlayerCreateRequest,\n\tPlayerReadResponse\n} from '../../model/api.model';\nimport { BaseService } from './base.service';\nimport { AuthService } from '../auth.service';\nimport { ExceptionService } from '../exception.service';\nimport { UrlService } from '../url.service';\nimport { Subject } from 'rxjs/Subject';\nimport { UserService } from '../user.service';\n\n@Injectable()\nexport class PagesService extends BaseService {\n\n\tconstructor(\n\t\tprotected auth: AuthService,\n\t\tprotected http: Http,\n\t\tprotected exception: ExceptionService,\n\t\tprotected router: Router,\n\t\tprotected urlService: UrlService,\n\t\tprotected user: UserService,\n\t\tprotected translation: TranslationService) {\n\t\tsuper(auth, http, exception, router, urlService, user);\n\t}\n\n// pages referrer\n\n\tgetReferrerHistoryForRange(accountId: number, range: any, path: string): Observable<any> {\n\t\tlet r = this.initDateRange(range);\n\t\tlet url = 'accounts/' +\n\t\t\t\taccountId.toString() +\n\t\t\t\t'/analytics/page/referer/history?tsrange[]=' +\n\t\t\t\tr.startDate.unix().toString() + ','+r.endDate.unix().toString() + ','+\n\t\t\t\t'&path=' + path;\n\t\treturn this.listOfItems(url);\n\t}\n\n\tgetReferrerHistoryForPeriod(accountId: number, period: any, unit: string, path: string): Observable<any> {\n\t\tlet params = this.prepareTsperiodParams(period.startDate, period.endDate, unit);\n\t\tparams.push('source_domain=' + encodeURIComponent(path));\n\n\t\tlet url = 'accounts/' +\n\t\t\t\taccountId.toString() +\n\t\t\t\t'/analytics/page/referer/history?' + params.join('&');\n\t\treturn this.listOfItems(url);\n\t}\n\n\tgetReferrerUsersAndViews(accountId: number, range: any, unit: string, path: string):\n\tObservable<Array<{ data: chartjs.LineChartDataset, labels: Array<string> }>> {\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tthis.getReferrerHistoryForPeriod(accountId, range, unit, path)\n\t\t\t.subscribe((data: any) => {\n\n\t\t\t\tlet usersData: chartjs.LineChartDataset = { data: [], label: this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['USERS'] };\n\t\t\t\tlet usersLabels: Array<string> = [];\n\t\t\t\tlet viewsData: chartjs.LineChartDataset = { data: [], label: this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['VIEWS'] };\n\t\t\t\tlet viewsLabels: Array<string> = [];\n\n\t\t\t\tfor (let rec of data) {\n\t\t\t\t\tusersData.data.push(parseFloat(rec.users));\n\t\t\t\t\tviewsData.data.push(parseFloat(rec.views));\n\t\t\t\t\tusersLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t\tviewsLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t}\n\n\t\t\t\tlet usersChartData = { data: usersData, labels: usersLabels };\n\t\t\t\tlet viewsChartData = { data: viewsData, labels: viewsLabels };\n\n\t\t\t\tresolveSource.next([usersChartData, viewsChartData]);\n\t\t\t},\n\t\t\t\t(error) => resolveSource.error(error),\n\t\t\t\t() => resolveSource.complete());\n\n\t\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetTopSources(accountId: number, range: any, path: string, page: number, page_size: number): Observable<any> {\n\t\tlet r = this.initDateRange(range);\n\t\tlet url ='accounts/' +\n\t\t\t\t\taccountId.toString() +\n\t\t\t\t\t'/analytics/page/referer/top-sources?tsrange=' +\n\t\t\t\t\tr.startDate.unix().toString() + ',' + r.endDate.unix().toString() +\n\t\t\t\t\t'&source_domain=' + path +\n\t\t\t\t\t'&page=' + page.toString() +\n\t\t\t\t\t'&page_size=' + page_size.toString();\n\t\treturn this.listOfItems(url);\n\t}\n\n// pages audience\n\n\tgetTopSubpages(accountId: number, range: any, path: string, page: number, page_size: number): Observable<any> {\n\t\tlet r = this.initDateRange(range);\n\t\tlet url = 'accounts/' +\n\t\t\t\t\taccountId.toString() +\n\t\t\t\t\t'/analytics/page/audience/top-subpages?tsrange=' +\n\t\t\t\t\tr.startDate.unix().toString() + ',' + r.endDate.unix().toString() +\n\t\t\t\t\t'&path=' + path +\n\t\t\t\t\t'&page=' + page.toString() +\n\t\t\t\t\t'&page_size=' + page_size.toString();\n\t\treturn this.listOfItems(url);\n\t}\n\n\tgetAudienceHistoryForRange(accountId: number, range: any, path: string): Observable<any> {\n\t\tlet r = this.initDateRange(range);\n\t\tlet url = 'accounts/' +\n\t\t\t\taccountId.toString() +\n\t\t\t\t'/analytics/page/audience/history?tsrange[]=' +\n\t\t\t\tr.startDate.unix().toString() + ','+ r.endDate.unix().toString() + ','+\n\t\t\t\t'&path=' + path;\n\t\treturn this.listOfItems(url);\n\t}\n\n\tgetAudienceHistoryForPeriod(accountId: number, period: any, unit: string, path: string): Observable<any> {\n\t\tlet params = this.prepareTsperiodParams(period.startDate, period.endDate, unit);\n\t\tparams.push('path=' + encodeURIComponent(path));\n\t\tlet url = 'accounts/' +\n\t\t\t\taccountId.toString() +\n\t\t\t\t'/analytics/page/audience/history?' + params.join('&');\n\t\treturn this.listOfItems(url);\n\t}\n\n\tgetUsersAndViews(accountId: number, range: any, unit: string, path: string):\n\tObservable<Array<{ data: chartjs.LineChartDataset, labels: Array<string> }>> {\n\n\t\tlet resolveSource = new Subject<any>();\n\t\tthis.getAudienceHistoryForPeriod(accountId, range, unit, path)\n\t\t\t.subscribe((data: any) => {\n\t\t\t\tlet usersData: chartjs.LineChartDataset = { data: [], label: this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['USERS'] };\n\t\t\t\tlet usersLabels: Array<string> = [];\n\t\t\t\tlet viewsData: chartjs.LineChartDataset = { data: [], label: this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['VIEWS'] };\n\t\t\t\tlet viewsLabels: Array<string> = [];\n\n\t\t\t\tfor (let rec of data) {\n\t\t\t\t\tusersData.data.push(parseFloat(rec.users));\n\t\t\t\t\tviewsData.data.push(parseFloat(rec.views));\n\t\t\t\t\tusersLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t\tviewsLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t}\n\n\t\t\t\tlet usersChartData = { data: usersData, labels: usersLabels };\n\t\t\t\tlet viewsChartData = { data: viewsData, labels: viewsLabels };\n\n\t\t\t\tresolveSource.next([usersChartData, viewsChartData]);\n\t\t\t},\n\t\t\t\t(error) => resolveSource.error(error),\n\t\t\t\t() => resolveSource.complete());\n\n\t\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetUsersAndViewsHistoryReport(accountId: number, range: any, unit: string, filters: PageReportFilters):\n\t\tObservable<Array<{ data: chartjs.LineChartDataset, labels: Array<string> }>> {\n\n\t\t\tlet params = this.prepareTsperiodParams(range.startDate, range.endDate, unit);\n\t\t\tparams = params.concat(filters.getQueryParamsList());\n\n\t\t\tlet url = 'accounts/' +\n\t\t\t\t\taccountId.toString() +\n\t\t\t\t\t'/analytics/page/report/history?' + params.join('&');\n\n\t\t\tlet resolveSource = new Subject<any>();\n\t\t\tthis.listOfItems(url).subscribe((data: any) => {\n\t\t\t\t\tlet usersData: chartjs.LineChartDataset = { data: [], label: this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['USERS'] };\n\t\t\t\t\tlet usersLabels: Array<string> = [];\n\t\t\t\t\tlet viewsData: chartjs.LineChartDataset = { data: [], label: this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['VIEWS'] };\n\t\t\t\t\tlet viewsLabels: Array<string> = [];\n\n\t\t\t\t\tfor (let rec of data) {\n\t\t\t\t\t\tusersData.data.push(parseFloat(rec.users));\n\t\t\t\t\t\tviewsData.data.push(parseFloat(rec.views));\n\t\t\t\t\t\tusersLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t\t\tviewsLabels.push(moment.unix(rec.from).toISOString());\n\t\t\t\t\t}\n\n\t\t\t\t\tlet usersChartData = { data: usersData, labels: usersLabels };\n\t\t\t\t\tlet viewsChartData = { data: viewsData, labels: viewsLabels };\n\n\t\t\t\t\tresolveSource.next([usersChartData, viewsChartData]);\n\t\t\t\t},\n\t\t\t\t(error) => resolveSource.error(error),\n\t\t\t\t() => resolveSource.complete());\n\n\t\t\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetUsersAndViewsSummaryReport(accountId: number, range: any, filters: PageReportFilters): Observable<any> {\n\t\t\tlet r = this.initDateRange(range);\n\t\t\tlet tsRangeParam = 'tsrange[]=' + r.startDate.unix() + ',' + r.endDate.unix();\n\t\t\tlet params = [tsRangeParam];\n\t\t\tparams = params.concat(filters.getQueryParamsList());\n\n\t\t\tlet url = 'accounts/' +\n\t\t\t\t\taccountId.toString() +\n\t\t\t\t\t'/analytics/page/report/history?' + params.join('&');\n\n\t\t\tlet resolveSource = new Subject<any>();\n\t\t\tthis.listOfItems(url).subscribe((data: any) => {\n\t\t\t\t\tlet users = 0;\n\t\t\t\t\tlet views = 0;\n\t\t\t\t\tif(data && data.length) {\n\t\t\t\t\t\tusers = parseFloat(data[0].users);\n\t\t\t\t\t\tviews = parseFloat(data[0].views);\n\t\t\t\t\t}\n\n\t\t\t\t\tresolveSource.next({\n\t\t\t\t\t\tusers: users,\n\t\t\t\t\t\tviews: views\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t(error) => resolveSource.error(error),\n\t\t\t\t() => resolveSource.complete());\n\n\t\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetGeoReport(accountId: number, range: any, filters: PageReportFilters): Observable<any> {\n\t\tlet r = this.initDateRange(range);\n\t\tlet tsRangeParam = 'tsrange=' + r.startDate.unix() + ',' + r.endDate.unix();\n\t\tlet params = [tsRangeParam];\n\t\tparams = params.concat(filters.getQueryParamsList());\n\n\t\tlet url = 'accounts/' + accountId.toString() + '/analytics/page/report/geo?' + params.join('&');\n\t\tlet resolveSource = new Subject<any>();\n\t\tthis.listOfItems(url).subscribe(\n\t\t\t(data: any) => {\n\t\t\t\tresolveSource.next(data);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete()\n\t\t);\n\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tlistOfCountries(): Observable<any> {\n\t\tlet url = 'analytics/geo/country';\n\t\treturn this.listOfItems(url);\n\t}\n\n\tlistOfRegions(countryCode: string): Observable<any> {\n\t\tlet url = 'analytics/geo/country/'+countryCode+'/region';\n\t\treturn this.listOfItems(url);\n\t}\n\n\tlistOfCities(regionCode: string): Observable<any> {\n\t\tlet url = 'analytics/geo/region/'+regionCode+'/city';\n\t\treturn this.listOfItems(url);\n\t}\n\n\tgetDemSexReport(accountId: number, range: any, filters: PageReportFilters): Observable<any> {\n\t\tlet r = this.initDateRange(range);\n\t\tlet tsRangeParam = 'tsrange=' + r.startDate.unix() + ',' + r.endDate.unix();\n\t\tlet params = [tsRangeParam];\n\t\tparams = params.concat(filters.getQueryParamsList());\n\n\t\tlet url = 'accounts/' + accountId.toString() + '/analytics/page/report/dem/sex?' + params.join('&');\n\t\tlet resolveSource = new Subject<any>();\n\t\tthis.listOfItems(url).subscribe(\n\t\t\t(data: any) => {\n\t\t\t\tresolveSource.next(data);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete()\n\t\t);\n\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetDemAgeReport(accountId: number, range: any, filters: PageReportFilters): Observable<any> {\n\t\tlet r = this.initDateRange(range);\n\t\tlet tsRangeParam = 'tsrange=' + r.startDate.unix() + ',' + r.endDate.unix();\n\t\tlet params = [tsRangeParam];\n\t\tparams = params.concat(filters.getQueryParamsList());\n\n\t\tlet url = 'accounts/' + accountId.toString() + '/analytics/page/report/dem/age?' + params.join('&');\n\t\tlet resolveSource = new Subject<any>();\n\t\tthis.listOfItems(url).subscribe(\n\t\t\t(data: any) => {\n\t\t\t\tresolveSource.next(data);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete()\n\t\t);\n\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tgetTopViewedTagsReport(accountId: number, range: any, filters: PageReportFilters, tagsMaxNum: number): Observable<any> {\n\t\tlet r = this.initDateRange(range);\n\t\tlet tsRangeParam = 'tsrange=' + r.startDate.unix() + ',' + r.endDate.unix();\n\t\tlet params = [tsRangeParam];\n\t\tparams.push('page_size=' + tagsMaxNum);\n\t\tparams = params.concat(filters.getQueryParamsList());\n\n\t\tlet url = 'accounts/' + accountId.toString() + '/analytics/page/report/top-viewed-tags?' + params.join('&');\n\t\tlet resolveSource = new Subject<any>();\n\t\tthis.listOfItems(url).subscribe(\n\t\t\t(data: any) => {\n\t\t\t\tresolveSource.next(data);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete()\n\t\t);\n\n\t\treturn resolveSource.asObservable();\n\t}\n\n\tlistOfItems(url: string) : Observable<any> {\n\t\tlet req = null;\n\t\tlet resolveSource = new Subject<PlayerReadResponse>();\n\t\tsuper.read(url, req).subscribe(\n\t\t\t(response: any) => {\n\t\t\t\tif(response && response.results) {\n\t\t\t\t\tlet nowTs = (new Date()).getTime() / 1000.0;\n\t\t\t\t\tfor(let entry of response.results) {\n\t\t\t\t\t\tentry.loaded_at = nowTs;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n}\n\nexport class PageReportFilters {\n\tpublic geoCountryCode: string | null;\n\tpublic geoRegionId: number | null;\n\tpublic tags: string[] | null;\n\tpublic demSex: number | null;\n\tpublic demAgeFrom: number | null;\n\tpublic demAgeTo: number | null;\n\n\tpublic getQueryParamsList(): string[] {\n\t\tlet result:string[] = [];\n\n\t\tif((this.geoCountryCode !== null) && (this.geoCountryCode != '') && (typeof this.geoCountryCode !== 'undefined')) {\n\t\t\tresult.push(encodeURIComponent('filter[geoCountryCode]') + '=' + encodeURIComponent(this.geoCountryCode));\n\t\t}\n\t\tif(this.geoRegionId > 0) {\n\t\t\tresult.push(encodeURIComponent('filter[geoRegionId]') + '=' + this.geoRegionId);\n\t\t}\n\t\tif((this.tags !== null) && (this.tags.length > 0)) {\n\t\t\tresult.push(encodeURIComponent('filter[tags]') + '=' + encodeURIComponent(this.tags.join(',')));\n\t\t}\n\t\tif(this.demSex > 0) {\n\t\t\tresult.push(encodeURIComponent('filter[demSex]') + '=' + this.demSex);\n\t\t}\n\t\tif(this.demAgeFrom !== null) {\n\t\t\tresult.push(encodeURIComponent('filter[demAgeFrom]') + '=' + this.demAgeFrom);\n\t\t}\n\t\tif(this.demAgeTo !== null) {\n\t\t\tresult.push(encodeURIComponent('filter[demAgeTo]') + '=' + this.demAgeTo);\n\t\t}\n\n\t\treturn result;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/analytics/pages.service.ts","import { PageReportFilters } from \"../../../../service/analytics/pages.service\";\nimport { HistoryGranularity, UnixDateRange } from \"./sampled-traffc.model\";\n\ninterface SampledTrafficFiltersPattern<T> {\n\tdateRange: T;\n\tgranularity: T;\n\tgeoCountryCode: T;\n\tgeoRegionId: T;\n\t// geoCityId: T;\n\ttags: T;\n}\n\nexport class SampledTrafficFilters extends PageReportFilters implements SampledTrafficFiltersPattern<any> {\n\t// specific /////////////\n\t// dateRange: MomentDateRange;\n\tdateRange: UnixDateRange;\n\tgranularity: HistoryGranularity;\n\t// geoCityId: number | null = null;\n\t// override /////////////\n\t// geoCountryCode: string | null;\n\t// geoRegionId: number | null;\n\ttags: string[] | null;\n\tdemSex: number | null = null;\n\tdemAgeFrom: number | null = null;\n\tdemAgeTo: number | null = null;\n\n\tdiff(other?: SampledTrafficFilters): SampledTrafficFiltersPattern<boolean> {\n\t\treturn !other\n\t\t\t? { dateRange: true, granularity: true, geoCountryCode: true, geoRegionId: true, /* geoCityId: true, */ tags: true, }\n\t\t\t: {\n\t\t\t\tdateRange: this.dateRange.length != other.dateRange.length || this.dateRange[0] != other.dateRange[0] || this.dateRange[1] != other.dateRange[1],\n\t\t\t\tgranularity: this.granularity != other.granularity,\n\t\t\t\tgeoCountryCode: this.geoCountryCode != other.geoCountryCode,\n\t\t\t\tgeoRegionId: this.geoRegionId != other.geoRegionId,\n\t\t\t\t// geoCityId: this.geoCityId != other.geoCityId,\n\t\t\t\ttags: this.tags.length != other.tags.length || this.tags.filter(t => other.tags.indexOf(t) === -1).length !== 0,\n\t\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/model/sampled-traffic.filters.ts","import { Injectable } from \"@angular/core\";\nimport { GoogleGeoChartTableData, GoogleGeoChartTableItem, GeoRegionRecord } from \"../model/sampled-traffc.model\";\n//@ts-ignore\nimport { reducingMappings, sharingMapping, skippingSet } from './../../geo/geo.country.view.regions.fix.json';\n\n@Injectable()\nexport class GoogleGeoRegionsFixService {\n\n\tregions(countryCode: string, data: GeoRegionRecord[]): GoogleGeoChartTableData {\n\t\tlet result: GoogleGeoChartTableData = [];\n\t\tif (countryCode in reducingMappings) {\n\t\t\tresult = this.reduceRegions(countryCode, data);\n\t\t} else if (countryCode in sharingMapping) {\n\t\t\tresult = this.sharedRegions(countryCode, data);\n\t\t} else if (countryCode in skippingSet) {\n\t\t\tlet totalViews = 0;\n\t\t\tfor (const rec of data) {\n\t\t\t\ttotalViews += parseInt(rec.views);\n\t\t\t}\n\t\t\tresult.push([countryCode, totalViews]);\n\t\t} else {\n\t\t\tfor (const rec of data) {\n\t\t\t\tconst regName = rec.region.subdiv_code ? rec.region.subdiv_code : rec.region.name;\n\t\t\t\tresult.push([regName, parseInt(rec.views)]);\n\t\t\t}\n\t\t}\n\t\tresult.unshift(['Region', 'Views']);\n\t\treturn result;\n\t}\n\n\tprivate sharedRegions(countryCode: string, data: GeoRegionRecord[]): GoogleGeoChartTableData {\n\t\tconst result: GoogleGeoChartTableData = [];\n\t\tfor (const rec of data) {\n\t\t\tconst codeSrc = rec.region.subdiv_code;\n\t\t\tif (!(codeSrc in sharingMapping[countryCode])) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst codesTrg = sharingMapping[countryCode][codeSrc];\n\t\t\tfor (const code of codesTrg) {\n\t\t\t\tresult.push([code, Math.floor(parseInt(rec.views) / codesTrg.length)]);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate reduceRegions(countryCode: string, data: GeoRegionRecord[]): GoogleGeoChartTableData {\n\t\tconst m = {};\n\t\tfor (const rec of data) {\n\t\t\tconst codeSrc = rec.region.subdiv_code;\n\t\t\tconst codeTrg = (codeSrc in reducingMappings[countryCode]) ? reducingMappings[countryCode][codeSrc] : codeSrc;\n\t\t\tif (!(codeTrg in m)) {\n\t\t\t\tm[codeTrg] = 0;\n\t\t\t}\n\t\t\tm[codeTrg] = m[codeTrg] + parseInt(rec.views);\n\t\t}\n\t\tconst result: GoogleGeoChartTableData = [];\n\t\tfor (const code in m) {\n\t\t\tresult.push([code, m[code]]);\n\t\t}\n\t\treturn result;\n\t}\n\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/service/google.geo.regions.fix.service.ts","import { Injectable } from \"@angular/core\";\nimport { Http } from \"@angular/http\";\nimport { Router } from \"@angular/router\";\nimport moment from \"moment\";\nimport { Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators/map\";\nimport { BaseService } from \"../../../../service/analytics/base.service\";\nimport { AuthService } from \"../../../../service/auth.service\";\nimport { ExceptionService } from \"../../../../service/exception.service\";\nimport { UrlService } from \"../../../../service/url.service\";\nimport { UserService } from \"../../../../service/user.service\";\nimport { GeoCountryItem, GeoData, GeoRecord, GeoRegionItem, GoogleGeoChartTableData, HistoryChart, HistoryRecord, SummaryData, TopViewedTagsData, TopViewedTagsRecord } from \"../model/sampled-traffc.model\";\nimport { SampledTrafficFilters } from \"../model/sampled-traffic.filters\";\nimport { GoogleGeoRegionsFixService } from \"./google.geo.regions.fix.service\";\n\n@Injectable()\nexport class SampledTrafficApiService extends BaseService {\n\n\tconstructor(\n\t\tprotected auth: AuthService,\n\t\tprotected http: Http,\n\t\tprotected exception: ExceptionService,\n\t\tprotected router: Router,\n\t\tprotected urlService: UrlService,\n\t\tprotected user: UserService,\n\t\tprivate fix: GoogleGeoRegionsFixService,\n\t) {\n\t\tsuper(auth, http, exception, router, urlService, user);\n\t}\n\n\tusersAndViewsHistory(filters: SampledTrafficFilters): Observable<HistoryChart> {\n\t\tconst params = this.prepareTsperiodParams(moment.unix(filters.dateRange[0]), moment.unix(filters.dateRange[1]), filters.granularity).concat(filters.getQueryParamsList());\n\t\treturn super.read<HistoryRecord[]>(`accounts/${this.user.accountId}/analytics/page/report/history?${params.join('&')}`)\n\t\t\t.pipe(\n\t\t\t\tmap(response => this.parseUsersAndViewsHistory(filters, response))\n\t\t\t)\n\t}\n\n\tprivate parseUsersAndViewsHistory(filters: SampledTrafficFilters, response: HistoryRecord[]): HistoryChart {\n\t\tconst usersData: chartjs.LineChartDataset = { data: [], label: 'Users' /* this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['USERS'] */ };\n\t\tconst usersLabels: Array<string> = [];\n\t\tconst viewsData: chartjs.LineChartDataset = { data: [], label: 'Views' /* this.translation['translationData']['en']['ANALYTICS_AUDIENCE']['SUMMARY']['VIEWS'] */ };\n\t\tconst viewsLabels: Array<string> = [];\n\t\tfor (let rec of response) {\n\t\t\tusersData.data.push(parseFloat(rec.users));\n\t\t\tviewsData.data.push(parseFloat(rec.views));\n\t\t\tusersLabels.push(moment.unix(rec.from).toISOString());\n\t\t\tviewsLabels.push(moment.unix(rec.from).toISOString());\n\t\t}\n\t\tconst usersChartData = { data: usersData, labels: usersLabels };\n\t\tconst viewsChartData = { data: viewsData, labels: viewsLabels };\n\t\t///////\n\t\tconst data = [usersChartData, viewsChartData];\n\t\t///////\n\t\tconst datasets: chartjs.LineChartDataset[] = [];\n\t\tfor (let _i = 0; _i < data.length; _i++)\n\t\t\tdatasets.push(data[_i].data);\n\t\tconst labels = data[0].labels;\n\t\tconst granularity = filters.granularity;\n\t\tconst startDate = moment.unix(filters.dateRange[0]);\n\t\tconst endDate = moment.unix(filters.dateRange[1]);\n\t\t////////\n\t\treturn { granularity, startDate, endDate, data, labels, datasets };\n\t}\n\n\n\tusersAndViewsSummary(filters: SampledTrafficFilters): Observable<SummaryData> {\n\t\tconst params = [`tsrange[]=${filters.dateRange[0]},${filters.dateRange[1]}`].concat(filters.getQueryParamsList());\n\t\t// const params = [`tsrange[]=${filters.dateRange[0].unix()},${filters.dateRange[1].unix()}`].concat(filters.getQueryParamsList());\n\t\treturn super.read<HistoryRecord[]>(`accounts/${this.user.accountId}/analytics/page/report/history?${params.join('&')}`)\n\t\t\t.pipe(\n\t\t\t\tmap(response => this.parseUsersAndViewsSummary(response))\n\t\t\t);\n\t}\n\n\tprivate parseUsersAndViewsSummary(response: HistoryRecord[]): SummaryData {\n\t\tif (response && response.length) {\n\t\t\tconst users = parseFloat(response[0].users);\n\t\t\tconst views = parseFloat(response[0].views);\n\t\t\treturn { users, views, viewsPerUser: views / users };\n\t\t}\n\t\treturn { users: 0, views: 0, viewsPerUser: 0 };\n\t}\n\n\n\tgeoReport(filters: SampledTrafficFilters): Observable<GeoData> {\n\t\tconst range = this.initDateRange(this.user.getDateRangeSelection());\n\t\tconst params = [`tsrange=${range.startDate.unix()},${range.endDate.unix()}`].concat(filters.getQueryParamsList());\n\t\treturn super.read<GeoRecord>(`accounts/${this.user.accountId}/analytics/page/report/geo?${params.join('&')}`)\n\t\t\t.pipe(\n\t\t\t\tmap(response => this.parseGeoRecord(response, filters)),\n\t\t\t);\n\t}\n\n\tprivate parseGeoRecord(response: GeoRecord, filters: SampledTrafficFilters): GeoData | null {\n\t\tconst summary_users = parseFloat(response.summary.users);\n\t\tconst summary_views = parseFloat(response.summary.views);\n\t\tconst viewsPerUser = summary_users > 0 ? summary_views / summary_users : null;\n\t\tconst summary = { users: summary_users, views: summary_views, viewsPerUser };\n\n\t\tconst mapItems: GoogleGeoChartTableData = [[\"Country\", \"Views\"]];\n\t\t// COUNTRIES\n\t\tif (response.countries /* && response.countries.length > 0 */) {\n\t\t\tconst listItems: GeoCountryItem[] = [];\n\t\t\tfor (const country of response.countries) {\n\t\t\t\tconst country_views = parseFloat(country.views);\n\t\t\t\tconst country_users = parseFloat(country.users);\n\t\t\t\tmapItems.push([country.country.country_code, country_views]);\n\t\t\t\tlistItems.push({\n\t\t\t\t\tindex: listItems.length + 1,\n\t\t\t\t\tlabel: country.country.name,\n\t\t\t\t\tviews: country_views,\n\t\t\t\t\tusers: country_users,\n\t\t\t\t\tcountryCode: country.country.country_code,\n\t\t\t\t\tviewsShare: (country_views / summary_views) * 100,\n\t\t\t\t\tusersShare: (country_users / summary_users) * 100,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn { resolution: 'countries', region: null, summary, mapItems, listItems }\n\t\t}\n\n\t\t// REGIONS\n\t\tif (response.regions /* && response.regions.length > 0 */) {\n\t\t\tconst listItems: GeoRegionItem[] = [];\n\t\t\tfor (const region of response.regions) {\n\t\t\t\tconst region_views = parseFloat(region.views);\n\t\t\t\tconst region_users = parseFloat(region.users);\n\t\t\t\tlistItems.push({\n\t\t\t\t\tindex: listItems.length + 1,\n\t\t\t\t\tlabel: region.region.name,\n\t\t\t\t\tviews: region_views,\n\t\t\t\t\tusers: region_users,\n\t\t\t\t\tcountryCode: filters.geoCountryCode,\n\t\t\t\t\tregionId: region.region.id,\n\t\t\t\t\tsubdivCode: region.region.subdiv_code ? region.region.subdiv_code : region.region.name,\n\t\t\t\t\tviewsShare: (region_views / summary_views) * 100,\n\t\t\t\t\tusersShare: (region_users / summary_users) * 100,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn { resolution: 'provinces', region: filters.geoCountryCode, summary, mapItems: this.fix.regions(filters.geoCountryCode, response.regions), listItems }\n\t\t}\n\n\t\t// NO DATA\n\t\treturn { resolution: 'countries', region: null, summary, mapItems, listItems: [] };\n\t}\n\n\n\ttopViewedTags(filters: SampledTrafficFilters, page: number, pageSize: number): Observable<TopViewedTagsData> {\n\t\tconst range = this.initDateRange(this.user.getDateRangeSelection());\n\t\tconst params = [`tsrange=${range.startDate.unix()},${range.endDate.unix()}`, `page=${page}`, `page_size=${pageSize}`].concat(filters.getQueryParamsList());\n\t\treturn super.read<TopViewedTagsRecord>(`accounts/${this.user.accountId}/analytics/page/report/top-viewed-tags?${params.join('&')}`)\n\t\t\t.pipe(\n\t\t\t\tmap(response => this.parseTopViewedTags(response))\n\t\t\t);\n\t}\n\n\tprivate parseTopViewedTags(response: TopViewedTagsRecord): TopViewedTagsData | null {\n\t\treturn {\n\t\t\tpage: response.page,\n\t\t\tpage_size: response.page_size,\n\t\t\trecords: response.records.map(r => {\n\t\t\t\tconst _prefixAndValue = r.tag.split(':');\n\t\t\t\tconst _isPrefixed = _prefixAndValue.length === 2;\n\t\t\t\treturn {\n\t\t\t\t\tposition: r.position,\n\t\t\t\t\tprefix: _isPrefixed ? _prefixAndValue[0] : null,\n\t\t\t\t\tvalue: _isPrefixed ? _prefixAndValue[1] : r.tag,\n\t\t\t\t\ttag: r.tag,\n\t\t\t\t\tviews: parseInt(r.views),\n\t\t\t\t\tviewsShare: NaN,\n\t\t\t\t};\n\t\t\t}),\n\t\t\ttotal_records: response.total_records,\n\t\t};\n\t}\n\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/service/sampled-traffic.api.service.ts","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { ActivatedRoute } from '@angular/router';\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UserService } from '../../../service/user.service';\nimport { ExportService } from '../../../service/export.service';\nimport { DateUtil } from '../../../util/date.util';\nimport { GranularityType, ChartType, ChartTimeSeriesModel } from '../component/charts/chart.model';\nimport { MediaMetadata } from '../../../model/api.model';\nimport { Subscription } from 'rxjs/Subscription';\nimport { SampledTrafficFilters } from '../sampled-traffic/model/sampled-traffic.filters';\nimport { GoogleGeoRegionsFixService } from '../sampled-traffic/service/google.geo.regions.fix.service';\nimport { SampledTrafficApiService } from '../sampled-traffic/service/sampled-traffic.api.service';\nimport { Observable } from 'rxjs/Observable';\nimport moment from 'moment';\n\ninterface TagGroup {\n\tprefix: string;\n\tsufix: string;\n\tfrequency: number;\n}\n\n@Component({\n\tselector: 'analytics-content-details-view',\n\ttemplate: require('./content.details.view.component.html'),\n\tviewProviders: [],\n\tstyles: [\n\t\t':host .chart-loader {height:300px;position:relative;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\tGoogleGeoRegionsFixService,\n\t\tSampledTrafficApiService,\n\t],\n})\nexport class AnalyticsContentDetailsView extends Localization implements OnInit, OnDestroy {\n\trouteSubscription: Subscription;\n\tmediaMetadata: MediaMetadata;\n\thasTvMetrics: Boolean;\n\tdateUtil: DateUtil;\n\n\tprivate readonly MAX_TOP_TAGS_FOR_MEDIA = 100;\n\n\t// Chart fields.\n\thistoryStats: ChartTimeSeriesModel;\n\tchartTypes: Array<ChartType> = ['lineTime', 'bar'];\n\tgranularityTypes: Array<GranularityType> = ['all'];\n\tengagementRateStats: any;\n\tengagementRateLiveStreamClockType: string; // values ['wall', 'content'], default: 'wall'\n\tengagementRateSummary: any;\n\ttotalViewsInRange: number;\n\ttotalUsersInRange: number;\n\ttvStatsAmr: any;\n\ttvStatsAvgReach: any;\n\ttvStatsCumReach: any;\n\ttvStatsLoading: boolean;\n\ttagGroups: Array<TagGroup>;\n\n\tconstructor(private route: ActivatedRoute,\n\t\t\t\tpublic locale: LocaleService,\n\t\t\t\tpublic translation: TranslationService,\n\t\t\t\tpublic mediaAnalyticsService: MediaService,\n\t\t\t\tpublic user: UserService,\n\t\t\t\tprivate sampledTrafficApi: SampledTrafficApiService,\n\t\t\t\tprivate exportService: ExportService,\n\t\t\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\t// Init chart model. When data === null, then loaded is displayed.\n\t\tlet range = this.user.getDateRangeSelection();\n\t\tlet endDate = range.endDate;\n\t\tlet startDate = range.startDate;\n\t\tlet granularity: GranularityType = startDate.unix() == endDate.unix() ? 'hour': 'day';\n\t\tthis.hasTvMetrics = false;\n\t\tthis.tvStatsLoading = false;\n\n\t\tthis.historyStats = {\n\t\t\tdata: null,\n\t\t\tlabels: null,\n\t\t\tstartDate: startDate,\n\t\t\tendDate: endDate,\n\t\t\tchartType: 'lineTime',\n\t\t\tgranularity: granularity\n\t\t};\n\n\t\tthis.engagementRateSummary = {\n\t\t\ttopViews: null,\n\t\t\ttotalWatchingTime: null\n\t\t};\n\n\t\tthis.totalViewsInRange = null;\n\t\tthis.totalUsersInRange = null;\n\n\t\t// Init clock type for presentation for live streaming engagement rate.\n\t\tthis.engagementRateLiveStreamClockType = 'wall';\n\n\t\t// Alias.\n\t\tthis.dateUtil = DateUtil;\n\n\t\tthis.routeSubscription = this.route.data.subscribe((data: any) => {\n\t\t\tthis.mediaMetadata = data.account[0];\n\t\t\tif(this.mediaMetadata.is_live_stream && this.user.isEngagementRateEnabled()) {\n\t\t\t\tthis.hasTvMetrics = true;\n\t\t\t}\n\t\t\tthis.loadData();\n\t\t\tthis.loadTagsGroups();\n\t\t});\n\t}\n\n\tprivate loadTagsGroups() {\n\t\t// Find tags for selected media and date range.\n\t\tlet filter = new SampledTrafficFilters();\n\t\tfilter.tags = ['mid:' + this.mediaMetadata.material_id];\n\t\tfilter.dateRange = [this.historyStats.startDate.unix(), this.historyStats.endDate.unix()];\n\n\t\tvar topViewedTagsSub = this.sampledTrafficApi.topViewedTags(filter, 1, this.MAX_TOP_TAGS_FOR_MEDIA).subscribe({\n\t\t\tnext: (resp) => {\n\t\t\t\t// Preprocess.\n\t\t\t\tlet tagsByPrefix = new Map<string, Array<string>>();\n\t\t\t\tlet viewsPerTag = new Map<string, number>();\n\t\t\t\tlet viewsPerPrefix = new Map<string, number>();\n\t\t\t\tfor(let rec of resp.records) {\n\t\t\t\t\tconst parts = rec.tag.split(':');\n\t\t\t\t\tlet prefix = parts[0];\n\t\t\t\t\tlet sufix = '';\n\t\t\t\t\tif(parts.length > 1) {\n\t\t\t\t\t\tsufix = parts[1];\n\t\t\t\t\t}\n\t\t\t\t\tif(!tagsByPrefix.has(prefix)) {\n\t\t\t\t\t\ttagsByPrefix.set(prefix, []);\n\t\t\t\t\t\tviewsPerPrefix.set(prefix, 0);\n\t\t\t\t\t}\n\t\t\t\t\ttagsByPrefix.get(prefix).push(sufix);\n\t\t\t\t\tviewsPerPrefix.set(prefix, viewsPerPrefix.get(prefix) + rec.views);\n\t\t\t\t\tviewsPerTag.set(rec.tag, rec.views);\n\t\t\t\t}\n\n\t\t\t\t// Build gruops with frequencies.\n\t\t\t\tlet tagGroups = new Array<TagGroup>();\n\t\t\t\ttagsByPrefix.forEach((sufixes, prefix) => {\n\t\t\t\t\tif(sufixes.length > 1) {\n\t\t\t\t\t\tfor(const sufix of sufixes) {\n\t\t\t\t\t\t\tconst freq = 100.0 * viewsPerTag.get(prefix+\":\"+sufix) / viewsPerPrefix.get(prefix);\n\t\t\t\t\t\t\ttagGroups.push({\n\t\t\t\t\t\t\t\tprefix: prefix,\n\t\t\t\t\t\t\t\tsufix: sufix,\n\t\t\t\t\t\t\t\tfrequency: freq\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthis.tagGroups = tagGroups;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\ttopViewedTagsSub.unsubscribe();\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tif(this.routeSubscription)\n\t\t\tthis.routeSubscription.unsubscribe();\n\t}\n\n\tngOnInit(): void {\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate loadData() {\n\t\tthis.historyStats.data = null;\n\n\t\tthis.mediaAnalyticsService.getMediaStatsHistory(\n\t\t\tthis.mediaMetadata.material_id, this.historyStats.startDate, this.historyStats.endDate, this.historyStats.granularity)\n\t\t\t\t.subscribe((data: any) => {\n\t\t\t\t\tthis.historyStats.data = data.series;\n\t\t\t\t\tthis.historyStats.labels = data.labels;\n\n\t\t\t\t\t// Count views.\n\t\t\t\t\tlet totalViews = 0;\n\t\t\t\t\tfor(let serie of data.series) {\n\t\t\t\t\t\tif(serie.label != 'Views') {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(let v of serie.data) {\n\t\t\t\t\t\t\ttotalViews += v;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.totalViewsInRange = totalViews;\n\n\t\t\t\t\tif(data.series.length > 1) {\n\t\t\t\t\t\t// Users info is available - load summary for users.\n\t\t\t\t\t\tthis.loadTotalUsersInRange();\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\n\t\tif(this.user.isEngagementRateEnabled()) {\n\t\t\tthis.loadEngRateData();\n\t\t}\n\t}\n\n\tprivate fixUsersRoundingTotal() {\n\t\t// Solving problem with rounded up number of users by HyperLogLog on backend side (HLL has ~0.6% of accuracy).\n\t\t// If views are less than number of users then make them equal with users number. It is less confusing for users.\n\t\tif(this.totalViewsInRange < this.totalUsersInRange) {\n\t\t\tthis.totalViewsInRange = this.totalUsersInRange;\n\t\t}\n\t}\n\n\tprivate loadEngRateData() {\n\t\t// Set null for showing loader.\n\t\tthis.engagementRateStats = null;\n\n\t\tthis.mediaAnalyticsService.getMediaEngagementRate(\n\t\t\tthis.mediaMetadata.material_id, this.historyStats.startDate, this.historyStats.endDate, null, this.engagementRateLiveStreamClockType)\n\t\t\t\t.subscribe((data: any) => {\n\t\t\t\t\tthis.onEngRateStatsData(data);\n\t\t\t\t\tif(this.hasTvMetrics) {\n\t\t\t\t\t\tthis.updateTvStatisticsFromEngRate();\n\t\t\t\t\t}\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tprivate loadTotalUsersInRange(): void {\n\t\tthis.mediaAnalyticsService.getMediaStatsSummaryForRange(\n\t\t\t\tthis.mediaMetadata.material_id, this.historyStats.startDate, this.historyStats.endDate, this.historyStats.granularity).subscribe(\n\t\t\t(data: any) => {\n\t\t\t\tthis.totalUsersInRange = parseFloat(data.users);\n\t\t\t\tthis.fixUsersRoundingTotal();\n\t\t\t\tif(this.hasTvMetrics) {\n\t\t\t\t\tthis.updateTvStatisticsFromEngRate();\n\t\t\t\t}\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tprivate onEngRateStatsData(data: any) {\n\t\tthis.engagementRateStats = data;\n\t\t// When there is no data set empty object for marking that engagement rate\n\t\t// was loading, but no data were found.\n\t\tif(!this.engagementRateStats) {\n\t\t\tthis.engagementRateStats = {};\n\n\t\t\t// Update summary.\n\t\t\tthis.engagementRateSummary.topViews = null;\n\t\t\tthis.engagementRateSummary.totalWatchingTime = null;\n\t\t} else {\n\t\t\t// Update summary.\n\t\t\t// - Update top views.\n\t\t\tthis.engagementRateSummary.topViews = null;\n\t\t\tfor(let v of data.response.views) {\n\t\t\t\tv = parseFloat(v);\n\t\t\t\tif((this.engagementRateSummary.topViews == null) || (this.engagementRateSummary.topViews < v)) {\n\t\t\t\t\tthis.engagementRateSummary.topViews = v;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// - Update total watched time.\n\t\t\tlet unitLen = 0;\n\t\t\tthis.engagementRateSummary.totalWatchingTime = 0;\n\n\t\t\tif(this.mediaMetadata.is_live_stream && data.response.views_timestamps && (data.response.views_timestamps.length > 1)) {\n\t\t\t\t// - Get time for live streams.\n\t\t\t\tunitLen = data.response.views_timestamps[1] - data.response.views_timestamps[0];\n\t\t\t} else if((this.mediaMetadata.duration > 0) && (data.response.views.length > 1)) {\n\t\t\t\t// - Get time for VOD streams.\n\t\t\t\tunitLen = this.mediaMetadata.duration / (data.response.views.length - 1);\n\t\t\t}\n\n\t\t\tif(unitLen > 0) {\n\t\t\t\t// Count spend time for each time segment. Do not count last sample - it is segment boundary not segment.\n\t\t\t\tfor(let pos = 0; pos < data.response.views.length - 1; pos++) {\n\t\t\t\t\tlet v = parseFloat(data.response.views[pos]);\n\t\t\t\t\tthis.engagementRateSummary.totalWatchingTime += (v * unitLen);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate updateTvStatisticsFromEngRate() {\n\t\tif(!this.engagementRateStats || !this.engagementRateStats.data || !this.engagementRateStats.data[0] || !this.engagementRateStats.data[0].data) {\n\t\t\treturn;\n\t\t}\n\t\tthis.updateTvMetrics(this.engagementRateStats.data[0].data, this.engagementRateStats.startDate, this.engagementRateStats.endDate);\n\t}\n\n\tprivate updateTvMetrics(values: Array<number>, startDate: moment.Moment, endDate: moment.Moment ) {\n\t\tlet [newValues, newLabels] = this.groupInto15minPeriods(values, startDate, endDate);\n\n\t\t// AMR - average minuter rate (divide by 15 min period)\n\t\tlet tvStatsAmrChart = [\n\t\t\t\t{\n\t\t\t\t\tdata: newValues.map((v:number) => v / 15),\n\t\t\t\t\tlabel: 'Average Minute Rating'\n\t\t\t\t}\n\t\t];\n\n\t\t// AvgReach - number users in period\n\t\tlet totalEngPoints = newValues.reduce((a:number, b:number) => a+b , 0);\n\t\tlet usersPerEngPoing = totalEngPoints > 0 ? this.totalUsersInRange / totalEngPoints : 1;\n\t\tlet tvStatsAvgReachChart = [\n\t\t\t\t{\n\t\t\t\t\tdata: newValues.map((v:number) => Math.round(v * usersPerEngPoing)),\n\t\t\t\t\tlabel: 'Average Reach'\n\t\t\t\t}\n\t\t];\n\n\t\t// CumReach - total number of users and in past period\n\t\tvar totalReach = 0;\n\t\t\tlet tvStatsCumReachChart  = [\n\t\t\t\t\t{\n\t\t\t\t\tdata: newValues.map((v:number) =>{\n\t\t\t\t\t\ttotalReach += Math.round(v * usersPerEngPoing);\n\t\t\t\t\t\treturn totalReach;\n\t\t\t\t\t}),\n\t\t\t\t\tlabel: 'Cumulative Reach'\n\t\t\t\t}\n\t\t];\n\n\t\tthis.tvStatsAmr = {\n\t\t\t\tdata:tvStatsAmrChart,\n\t\t\t\tlabels: newLabels,\n\t\t\t\tchartType: 'lineTime',\n\t\t\t\tgranularity: 'hour',\n\t\t\t\tstartDate: startDate,\n\t\t\t\tendDate: endDate,\n\t\t}\n\t\tthis.tvStatsAvgReach = {\n\t\t\t\tdata:tvStatsAvgReachChart,\n\t\t\t\tlabels: newLabels,\n\t\t\t\tchartType: 'lineTime',\n\t\t\t\tgranularity:  'hour',\n\t\t\t\tstartDate: startDate,\n\t\t\t\tendDate: endDate,\n\t\t}\n\t\tthis.tvStatsCumReach = {\n\t\t\t\tdata:tvStatsCumReachChart,\n\t\t\t\tlabels: newLabels,\n\t\t\t\tchartType: 'lineTime',\n\t\t\t\tgranularity:  'hour',\n\t\t\t\tstartDate: startDate,\n\t\t\t\tendDate: endDate,\n\t\t}\n\t}\n\n\tprivate groupInto15minPeriods(values: Array<number>, startDate: moment.Moment, endDate: moment.Moment ): any {\n\t\tlet newVals:Array<number> = [], newLabels: Array<String> = [];\n\t\tlet periodInSec = endDate.unix() - startDate.unix();\n\t\tlet unitInSec = values.length ? periodInSec / values.length : null;\n\t\tlet period15Min = 900;\n\n\t\tif(unitInSec > period15Min) {\n\t\t\treturn [newVals, newLabels];\n\t\t}\n\n\t\tlet unitRemainter = 0;\n\t\tlet nextVal = 0;\n\t\tlet timeIter = startDate.clone();\n\t\tfor(let p=0; p < values.length; p++) {\n\t\t\tnextVal += values[p];\n\t\t\tunitRemainter += unitInSec;\n\t\t\twhile(unitRemainter >= period15Min) {\n\t\t\t\tunitRemainter -= period15Min;\n\t\t\t\tnewVals.push(nextVal);\n\t\t\t\tnextVal = 0;\n\t\t\t\tnewLabels.push(timeIter.toISOString());\n\t\t\t\ttimeIter.add(15, 'minutes');\n\t\t\t}\n\t\t}\n\t\tif(unitRemainter > 0) {\n\t\t\tnewVals.push(nextVal);\n\t\t\tnewLabels.push(timeIter.toISOString());\n\t\t}\n\t\treturn [newVals, newLabels];\n\t}\n\n\tpublic onGranularityChange(granularity: GranularityType): void {\n\t\tthis.historyStats.granularity = granularity;\n\t\tthis.loadData();\n\t}\n\n\tpublic onChartTypeChange(chartType: ChartType): void {\n\t\tthis.historyStats.chartType = chartType;\n\t\tthis.loadData();\n\t}\n\n\tpublic onDateRangeChanged(range: Array<moment.Moment>): void {\n\t\tthis.historyStats.startDate = range[0];\n\t\tthis.historyStats.endDate = range[1];\n\t\tthis.user.setDateRangeSelection(range[0].startOf('day'), range[1].startOf('day'));\n\t\tif(this.historyStats.startDate && this.historyStats.endDate && (this.historyStats.startDate.unix() == this.historyStats.endDate.unix())) {\n\t\t\tthis.historyStats.granularity = 'hour';\n\t\t}\n\t\tthis.loadData();\n\t\tthis.loadTagsGroups();\n\t}\n\n\tpublic chartDataExportCsv(): void {\n\t\tlet data = this.exportDataToCsv();\n\t\tlet exportFileName = 'bradmax_media_' + this.mediaMetadata.material_id + '_' + this.historyStats.startDate.format('YYYYMMDD')\n\t\t\t+ '_' + this.historyStats.endDate.format('YYYYMMDD') + '_by' + this.historyStats.granularity + '.csv';\n\n\t\tthis.exportService.exportFileFromJs(exportFileName, data);\n\t}\n\n\tprivate exportDataToCsv(): string {\n\t\tlet linesNum = this.historyStats.labels ? this.historyStats.labels.length : 0;\n\t\tlet result = '';\n\t\tlet line = '';\n\t\tlet dateFormat = 'YYYY-MM-DD HH:mm';\n\t\tif((this.historyStats.granularity == 'day') || (this.historyStats.granularity == 'week')) {\n\t\t\tdateFormat = 'YYYY-MM-DD';\n\t\t} else if(this.historyStats.granularity == 'month') {\n\t\t\tdateFormat = 'YYYY-MM';\n\t\t}  else if(this.historyStats.granularity == 'year') {\n\t\t\tdateFormat = 'YYYY';\n\t\t}\n\n\t\t// Write header.\n\t\tresult += \"Date,Views\\r\\n\";\n\n\t\t// Write data.\n\t\tfor(let i=0; i < linesNum; i++) {\n\t\t\tline = '\"'+moment(this.historyStats.labels[i]).format(dateFormat) + '\",';\n\t\t\tline += (this.historyStats.data[0].data[i] + \"\\r\\n\");\n\n\t\t\tresult += line;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate loadTvMetrics() {\n\t\tthis.tvStatsLoading = true;\n\t\tthis.cdr.markForCheck();\n\n\t\tlet endDate = this.historyStats.endDate;\n\t\tlet dateIter = this.historyStats.startDate.clone();\n\t\tlet engDataObs = [];\n\n\t\twhile(dateIter.unix() < endDate.unix()) {\n\t\t\tlet periodEnd = dateIter.clone().add('days', 4);\n\t\t\tif(periodEnd.unix() > endDate.unix()) {\n\t\t\t\tperiodEnd = endDate.clone();\n\t\t\t}\n\t\t\tlet obs = this.mediaAnalyticsService.getMediaEngagementRate(\n\t\t\t\t\t\tthis.mediaMetadata.material_id,\n\t\t\t\t\t\tdateIter,\n\t\t\t\t\t\tperiodEnd,\n\t\t\t\t\t\tnull, 'wall').first();\n\t\t\tengDataObs.push(obs);\n\t\t\tdateIter = periodEnd.clone();\n\t\t}\n\t\tObservable.forkJoin(...engDataObs).first().subscribe((resps) => {\n\t\t\tvar result = [];\n\t\t\tfor(let i=0; i < resps.length;i++) {\n\t\t\t\tfor(let v of resps[i].data[0].data) {\n\t\t\t\t\tresult.push(v);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.tvStatsLoading = false;\n\t\t\tthis.updateTvMetrics(result, this.historyStats.startDate, this.historyStats.endDate);\n\t\t\tthis.cdr.markForCheck();\n\t\t})\n\t}\n\n\tprivate exportTvMetricsToCsv() {\n\t\tlet result = '';\n\t\tlet line = '';\n\t\tlet dateFormat = 'YYYY-MM-DD HH:mm';\n\n\t\t// Write header.\n\t\tresult += \"Date,AMR,AvgReach,CumulReach\\r\\n\";\n\n\t\t// Write data.\n\t\tlet dates = this.tvStatsAmr.labels;\n\t\tlet amr = this.tvStatsAmr.data[0].data;\n\t\tlet avgReach = this.tvStatsAvgReach.data[0].data;\n\t\tlet cumReach = this.tvStatsCumReach.data[0].data;\n\t\tfor(let i=0; i < dates.length; i++) {\n\t\t\tline = '\"'+moment(dates[i]).format(dateFormat) + '\",';\n\t\t\tline += (amr[i].toFixed(2) + \",\");\n\t\t\tline += (Math.round(avgReach[i]) + \",\");\n\t\t\tline += (Math.round(cumReach[i]) + \"\\r\\n\");\n\n\t\t\tresult += line;\n\t\t}\n\n\t\tlet exportFileName = 'bradmax_media_tv_metrics_' + this.mediaMetadata.material_id  + '_' + this.historyStats.startDate.format('YYYYMMDD') +  '.csv';\n\t\tthis.exportService.exportFileFromJs(exportFileName, result);\n\t}\n\n\tpublic changeEngRateLiveStreamClockType(clockType: string) {\n\t\tthis.engagementRateLiveStreamClockType = clockType;\n\t\tthis.loadEngRateData();\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/content/content.details.view.component.ts","import { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { Subscription } from 'rxjs/Subscription';\nimport { Injectable } from '@angular/core';\nimport { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { AnalyticsContentDetailsView } from './content.details.view.component';\nimport { AccountService } from '../../../service/account.service';\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UserService } from '../../../service/user.service';\n\n@Injectable()\nexport class AnalyticsContentDetailsResolver implements Resolve<AnalyticsContentDetailsView> {\n\n\tconstructor(private mediaAnalyticsService: MediaService,\n\t\tpublic user: UserService) { }\n\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {\n\t\t//route parameters\n\t\tlet materialId: string = route.params['materialId'];\n\t\tif (!materialId)\n\t\t\treturn false;\n\n\t\tif (this.user.accountId == null)\n\t\t\treturn false;\n\n\t\treturn Observable.forkJoin(\n\t\t\tthis.mediaAnalyticsService.getMediaMetadata(materialId)\n\t\t);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/content/content.details.resolver.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\nimport { AnalyticsContentView } from './content.view.component';\nimport { AnalyticsContentDetailsView } from './content.details.view.component';\nimport { AnalyticsContentDetailsResolver } from './content.details.resolver';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { MediaService } from '../../../service/analytics/media.service';\n\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsContentView },\n\t{ path: ':materialId', component: AnalyticsContentDetailsView, resolve: { account: AnalyticsContentDetailsResolver } },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule,\n\t\tPagerModule\n\t],\n\tdeclarations: [\n\t\tAnalyticsContentView,\n\t\tAnalyticsContentDetailsView\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tMediaService,\n\t\tAnalyticsContentDetailsResolver\n\t]\n})\nexport class AnalyticsContentModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/content/content.module.ts","/**\n * Created by tkwiatek on 4/22/16.\n */\nimport { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\n\nimport {\n\tPlayerBuildResponse,\n\tPlayerConfiguratorResponse,\n\tPlayerCreateRequest,\n\tPlayerListResponse,\n\tPlayerReadResponse,\n\tPlayerReadResponseV2\n} from '../model/api.model';\nimport { BradmaxApi } from './api.service';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { UrlService } from './url.service';\nimport { Subject } from 'rxjs/Subject';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable()\nexport class PlayerService extends BradmaxApi {\n\n\tget readPlayer$() { return this.readPlayerSubject.asObservable(); }\n\tget readedPlayer() { return this.readPlayerSubject.getValue(); }\n\tprivate readPlayerSubject = new BehaviorSubject<PlayerReadResponse | PlayerReadResponseV2 | null | undefined>(undefined);\n\n\tconstructor(\n\t\tprotected router: Router,\n\t\tprotected auth: AuthService,\n\t\tprotected http: Http,\n\t\tprotected exception: ExceptionService,\n\t\tprotected url: UrlService) {\n\t\tsuper(auth, http, exception, router, url);\n\t}\n\n\treadPlayer(accountId: number, playerId: number): Observable<PlayerReadResponse | PlayerReadResponseV2> {\n\t\tlet resolveSource = new Subject<PlayerReadResponse>();\n\t\tlet url = 'accounts/' + accountId + '/players/' + playerId;\n\t\tsuper.read(url).subscribe(\n\t\t\t(response: any) => {\n\t\t\t\t// Add info about load time for player - for cache clear.\n\t\t\t\tif (response) {\n\t\t\t\t\tresponse.loaded_at = (new Date()).getTime() / 1000.0;\n\t\t\t\t}\n\t\t\t\tthis.readPlayerSubject.next(response);\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\tcreatePlayer(accountId: number, req: PlayerCreateRequest) {\n\t\treturn super.create('accounts/' + accountId + '/players', req);\n\t}\n\tupdatePlayer<R extends PlayerCreateRequest>(accountId: number, playerId: string, req: R) {\n\t\treturn super.update('accounts/' + accountId + '/players/' + playerId, req);\n\t}\n\tdeletePlayer(accountId: number, playerId: string) {\n\t\treturn super.delete('accounts/' + accountId + '/players/' + playerId);\n\t}\n\n\tdefaultPlayer(): Observable<PlayerConfiguratorResponse> {\n\t\treturn super.read('player-configurator/all-defaults');\n\t}\n\tlistPlayers(accountId: number): Observable<PlayerListResponse> {\n\t\tlet req = { 'detailed': '1' };\n\t\tlet resolveSource = new Subject<PlayerListResponse>();\n\t\tlet url = 'accounts/' + accountId + '/players';\n\t\tsuper.read(url, req).subscribe(\n\t\t\t(response: PlayerListResponse) => {\n\t\t\t\t// Add info about load time for player - for cache clear.\n\t\t\t\tif (response && response.results) {\n\t\t\t\t\tlet nowTs = (new Date()).getTime() / 1000.0;\n\t\t\t\t\tfor (let entry of response.results) {\n\t\t\t\t\t\tentry.loaded_at = nowTs;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => resolveSource.error(error),\n\t\t\t() => resolveSource.complete());\n\t\treturn resolveSource.asObservable();\n\t}\n\tlistBuilds(accountId: number, playerId: string): Observable<PlayerBuildResponse> {\n\t\treturn super.read('accounts/' + accountId + '/players/' + playerId + '/web-builds');\n\t}\n\tgenerateBuild(accountId: number, playerId: string) {\n\t\treturn super.create('accounts/' + accountId + '/players/' + playerId + '/generate-web-build');\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/player.service.ts","import {Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit} from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { Subscription } from 'rxjs';\nimport { Router } from '@angular/router';\nimport moment from 'moment';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { ViewService } from '../../../service/view.service';\nimport { ModalService } from '../../modal/modal.service';\nimport { PlayerService } from '../../../service/player.service';\nimport { UserService } from '../../../service/user.service';\nimport { Summary, SummaryDevices } from './dashboard.view.model';\nimport { ChartTimeSeriesModel } from '../component/charts/chart.model';\nimport { PlayerCreateRequest, PlayerReadResponse } from '../../../model/api.model';\n\nimport { GranularityType } from '../component/charts/chart.model';\n\n\n@Component({\n\tselector: 'analytics-dashboard-view',\n\ttemplate: require('./dashboard.view.component.html'),\n\tstyles: [\n\t\t':host .chart-loader {height:260px;position:relative;}',\n\t\t':host .table-loader {height:440px;position:relative;}',\n\t\t':host .table td {word-break:break-word;}',\n\t\t':host .panel-heading h4 {color:floralwhite;}',\n\t\t':host .panel-heading h4 small {color:#bbbbbb;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsDashboardView extends Localization implements OnInit {\n\tHEATMAP_DEFAULT_RANGE_SCOPE = 0; // last 7 days\n\n\t// -begin- heatmap vaiables\n\theatMapGranularity: GranularityType;\n\theatMapUsersData: any;\n\theatMapViewsData: any;\n\theatMapHeaders: string[];\n\theatMapRowDescriptors: string[];\n\thpicersize = 'sm';\n\tshowButtons: boolean | false;\n\tdropdownHeatMap: any;\n\tdropdownHeatMapSelectedValue: number | null;\n\tfirstDay: {day: number, month: number, year: number};\n\t// -end-\n\n\tprivate addNewSub: Subscription;\n\n\tloadingData: boolean;\n\tshowWelcomeBox: boolean;\n\tsummary: Summary;\n\taudienceHistory30d: ChartTimeSeriesModel;\n\taudienceHistory48h: ChartTimeSeriesModel;\n\ttopMedia30d: Array<any>;\n\ttopMedia24h: Array<any>;\n\n\tconstructor(public locale: LocaleService,\n\t\t\t\tpublic translation: TranslationService,\n\t\t\t\tprivate user: UserService,\n\t\t\t\tprivate analyticsService: AnalyticsService,\n\t\t\t\tprivate viewService: ViewService,\n\t\t\t\tprivate router: Router,\n\t\t\t\tprivate modal: ModalService,\n\t\t\t\tprivate playerService: PlayerService,\n\t\t\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tthis.showButtons = false;\n\t\tthis.showWelcomeBox = false;\n\t\tthis.dropdownHeatMap = new Array (0)\n\t\tthis.dropdownHeatMap.push({value: -1, label: 'current week'});\n\t\tthis.dropdownHeatMap.push({value: 0, label: 'last 7 days'});\n\t\tthis.dropdownHeatMap.push({value: 1, label: 'last 1 week'});\n\t\tthis.dropdownHeatMap.push({value: 20, label: 'last 20 weeks'});\n\t\tthis.dropdownHeatMap.push({value: 30, label: 'last 30 weeks'});\n\t\tthis.dropdownHeatMap.push({value: 40, label: 'last 40 weeks'});\n\t\tthis.dropdownHeatMap.push({value: 52, label: 'last 52 weeks'});\n\n\t\t// Init summary structure.\n\t\tthis.summary = {\n\t\t\tdevices: {\n\t\t\t\tdesktopPerc: null,\n\t\t\t\totherPerc: null,\n\t\t\t},\n\t\t\tlast30d: {\n\t\t\t\tviews: null,\n\t\t\t\tusers: null\n\t\t\t}\n\t\t};\n\n\t\t// Init chart data support structures.\n\t\tthis.audienceHistory30d = {\n\t\t\tdata: null,\n\t\t\tlabels: null,\n\t\t\tstartDate: null,\n\t\t\tendDate: null,\n\t\t\tchartType: 'lineTime',\n\t\t\tgranularity: 'day'\n\t\t};\n\n\t\tthis.audienceHistory48h = {\n\t\t\tdata: null,\n\t\t\tlabels: null,\n\t\t\tstartDate: null,\n\t\t\tendDate: null,\n\t\t\tchartType: 'lineTime',\n\t\t\tgranularity: 'hour'\n\t\t};\n\t}\n\n\tngOnInit() {\n\t\tthis.loadData();\n\t\tthis.loadHeatMap(this.HEATMAP_DEFAULT_RANGE_SCOPE);\n\t}\n\n\tprivate loadData() {\n\t\tthis.loadingData = true;\n\n\t\tthis.playerService.listPlayers(this.user.accountId).subscribe((data: any) => {\n\t\t\tthis.showWelcomeBox = (data.count == 0) && !this.viewService.checkIfAppInIframe();\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\n\t\tthis.analyticsService.getDashboardData().subscribe((data: any) => {\n\t\t\tthis.summary.devices = this.loadDataProcessDeviceTypes(data.summary.device_types);\n\t\t\tthis.summary.last30d.views = parseFloat(data.summary.last_30d.views);\n\t\t\tthis.summary.last30d.users = parseFloat(data.summary.last_30d.users);\n\n\t\t\tthis.audienceHistory30d = this.loadDataProcessAudienceHistory30d(data.audience_history.last_30d);\n\t\t\tthis.audienceHistory48h = this.loadDataProcessAudienceHistory48h(data.audience_history.last_48h);\n\n\t\t\tthis.topMedia30d = data.top_media.last_30d.records;\n\t\t\tthis.topMedia24h = data.top_media.last_24h.records;\n\n\t\t\tthis.loadingData = false;\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tprivate loadDataProcessDeviceTypes(deviceTypes: any): SummaryDevices {\n\t\tlet result: SummaryDevices = {\n\t\t\totherPerc: null,\n\t\t\tdesktopPerc: null\n\t\t};\n\n\t\tlet totalViews = 0;\n\t\tlet desktopViews = 0;\n\t\tlet DESKTOP_DEVICE_TYPE = 1;\n\t\tfor(let rec of deviceTypes) {\n\t\t\ttotalViews += parseFloat(rec.views);\n\t\t\tif(rec.device_type === DESKTOP_DEVICE_TYPE) {\n\t\t\t\tdesktopViews = parseFloat(rec.views);\n\t\t\t}\n\t\t}\n\n\t\tif(totalViews > 0) {\n\t\t\tresult.desktopPerc = 100.0 * desktopViews / totalViews;\n\t\t\t// This is not full true that otherPerc + desktopPerc = 100%, because of consoles, smart TV, etc. ,\n\t\t\t// but this is general simplification for showing overall difference between PC and other devices.\n\t\t\tresult.otherPerc = 100.0 - result.desktopPerc;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate loadDataProcessAudienceHistory30d(records: Array<any>): ChartTimeSeriesModel {\n\t\tlet result: ChartTimeSeriesModel = {\n\t\t\tdata: null,\n\t\t\tlabels: null,\n\t\t\tstartDate: null,\n\t\t\tendDate: null,\n\t\t\tchartType: 'lineTime',\n\t\t\tgranularity: 'day'\n\t\t};\n\n\t\t// There must be at last one record for processing.\n\t\tif(records.length == 0) {\n\t\t\tresult.data = [];\n\t\t\tresult.labels = [];\n\t\t\treturn result;\n\t\t}\n\n\t\tlet usersData: chartjs.LineChartDataset = { data: [], label: 'Users'  };\n\t\tlet viewsData: chartjs.LineChartDataset = { data: [], label: 'Views' };\n\t\tlet labels: Array<string> = [];\n\n\t\tfor (let rec of records) {\n\t\t\tusersData.data.push(parseFloat(rec.users));\n\t\t\tviewsData.data.push(parseFloat(rec.views));\n\t\t\tlabels.push(moment.unix(rec.from).toISOString());\n\t\t}\n\n\t\tresult.data = [usersData, viewsData];\n\t\tresult.labels = labels;\n\t\tresult.startDate = moment.unix(records[0].from)\n\t\tresult.endDate = moment.unix(records[records.length - 1].from)\n\n\t\treturn result;\n\t}\n\n\tprivate loadDataProcessAudienceHistory48h(records: Array<any>): ChartTimeSeriesModel {\n\t\tlet result: ChartTimeSeriesModel = {\n\t\t\tdata: null,\n\t\t\tlabels: null,\n\t\t\tstartDate: null,\n\t\t\tendDate: null,\n\t\t\tchartType: 'lineTime',\n\t\t\tgranularity: 'hour'\n\t\t};\n\n\t\t// There must be exactly 48 records.\n\t\tif(records.length != 48) {\n\t\t\tresult.data = [];\n\t\t\tresult.labels = [];\n\t\t\treturn result;\n\t\t}\n\n\t\tlet yesterdayData: chartjs.LineChartDataset = {\n\t\t\tdata: [],\n\t\t\tlabel: 'Yesterday views',\n\t\t\tfill: false,\n\t\t\tpointBorderColor: 'rgb(255, 227, 46)'\n\t\t};\n\t\tlet yesterdayRecords = records.slice(0, 24);\n\t\tfor (let rec of yesterdayRecords) {\n\t\t\tyesterdayData.data.push(parseFloat(rec.views));\n\t\t}\n\n\t\tlet todayRecords = records.slice(24);\n\t\tlet todayData: chartjs.LineChartDataset = {\n\t\t\tdata: [],\n\t\t\tlabel: 'Today views',\n\t\t\tfill: false,\n\t\t\tpointBorderColor: 'rgb(56, 102, 255)'\n\t\t};\n\n\t\t// Show today data for 0:00 to previous hour from now.\n\t\t// For next points set \"null\".\n\t\tlet validDataTs = (new Date()).getTime() / 1000.0 - 3600.0;\n\t\tlet labels: Array<string> = [];\n\t\tfor (let rec of todayRecords) {\n\t\t\tlet val = (rec.from < validDataTs) ? parseFloat(rec.views) : null;\n\t\t\ttodayData.data.push(val);\n\t\t\tlabels.push(moment.unix(rec.from).toISOString());\n\t\t}\n\n\t\tresult.data = [todayData, yesterdayData];\n\t\tresult.labels = labels;\n\t\tresult.startDate = moment.unix(todayRecords[0].from)\n\t\tresult.endDate = moment.unix(todayRecords[todayRecords.length - 1].from)\n\n\t\treturn result;\n\t}\n\n\tloadHeatMap(_opt: number){\n\t\tlet m = moment();\n\t\tlet sod = m.clone().startOf('day');\n\t\tlet sow = m.clone().startOf('week');\n\t\tlet _range: [moment.Moment, moment.Moment];\n\n\t\t// Mark selected value on dropdown list.\n\t\tthis.dropdownHeatMapSelectedValue = _opt;\n\n\t\t_range = [sow, sod]; // current week\n\t\tif (_opt > -1){\n\t\t\tswitch (_opt) {\n\t\t\t\tcase 0:\t\t// last7days\n\t\t\t\t\t_range = [sod.clone().subtract(6, 'days'),m];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t// last (_opt) weeks\n\t\t\t\t\t_range = [sod.clone().subtract(_opt,'week').startOf('week'), m.clone().subtract(1,'week').endOf('week')];\n\t\t\t}\n\t\t}\n\n\t\tthis.onDateHeatMapRangeChanged(_range);\n\t}\n\n\tdropdownHeatMapSelect(_e: any) {\n\t\tthis.loadHeatMap(_e.value);\n\t}\n\n\tonChangeRange(_opt: number):void {\n\t\tthis.loadHeatMap(_opt);\n\t}\n\n\tonDateHeatMapRangeChanged(range: [moment.Moment, moment.Moment]): void {\n\t\tconst monthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\t\tlet startDate =  new Date(range[0]['_d']);\n\t\tlet day = startDate.getDay();\n\t\tlet monthDay = startDate.getUTCDate()+1;\n\t\tlet month = startDate.getUTCMonth()+1;\n\t\tlet year = startDate.getFullYear();\n\t\tlet daysInMonth = new Date(year, month, 0).getDate();\n\t\tlet curDate = new Date(startDate);\n\t\tcurDate.setDate(startDate.getDate());\n\n\t\tthis.firstDay = {day: startDate.getUTCDate()+1, month: startDate.getUTCMonth(), year: startDate.getFullYear()};\n\n\t\tlet dayNames = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];\n\t\tthis.heatMapGranularity = 'day';\n\t\tthis.heatMapHeaders = null;\n\t\tlet weeksViewsArray: any[]\n\t\tlet weeksUsersArray: any[]\n\n\t\tthis.heatMapRowDescriptors = new Array(0);\n\t\tfor (let _i = 0; _i < 7; _i++ ){\n\t\t\tthis.heatMapRowDescriptors.push(dayNames[day]);\n\t\t\tday++;\n\t\t\tif (day > 6) day = 0;\n\t\t}\n\n\t\tif ( range[1]['_d']-range[0]['_d'] <= 604799999) { // hour granularity for data shorter or equal 1 week\n\t\t\tthis.heatMapGranularity = 'hour';\n\t\t\tthis.heatMapHeaders = new Array(0);\n\t\t\tfor (let _i = 0; _i < 24; _i++) {\n\t\t\t\tthis.heatMapHeaders.push(_i.toString()+':00');\n\t\t\t}\n\t\t}\n\n\t\tthis.analyticsService.getUsersAndViews(range[0].startOf('day'), range[1].startOf('day'),this.heatMapGranularity).subscribe(\n\t\t\t(data) => {\n\t\t\t\t// pobranie danych z serwisu\n\t\t\t\tlet _viewsData = data[1].data.data;; // views\n\t\t\t\tlet _usersData = data[0].data.data;  // users\n\t\t\t\t// pomocnicza tablica skladajaca sie z 7 tablic\n\t\t\t\t// glowna tablica danych pobranych z serwisu jest rozbijana 7 podtablic\n\t\t\t\t// dla kazdego dnia tygodnia, pierwszy wiersz nalezy do dnia tygodnia od ktorego zaczynaja sie dane\n\t\t\t\t// tak wiec jesli pierwszy element jest z czwatku, to na osi Y pierwsy w kolejnosci bedzie czwartek\n\t\t\t\tlet dayInd = 0;\n\t\t\t\t// inicjowanie pustych tablic dla Users i Views\n\t\t\t\tweeksViewsArray = new Array(0)\n\t\t\t\tweeksUsersArray = new Array(0)\n\t\t\t\tfor (let _i = 0; _i < 7; _i++) {\n\t\t\t\t\tweeksViewsArray.push(new Array(0));\n\t\t\t\t\tweeksUsersArray.push(new Array(0));\n\t\t\t\t}\n\n\t\t\t\tlet monthLabel = -1 ;\n\t\t\t\tlet headerLabel = '';\n\t\t\t\tif (this.heatMapGranularity == 'day') {\n\t\t\t\t\t// zasilenie danych pomocniczych danymi z danych pobranych z serwisu\n\t\t\t\t\tfor (let _i = 0; _i < _viewsData.length; _i++){\n\n\t\t\t\t\t\tcurDate = new Date(startDate);\n\t\t\t\t\t\tcurDate.setDate(curDate.getDate()+_i);\n\t\t\t\t\t\tif (dayInd > 6) dayInd = 0;\n\n\t\t\t\t\t\tmonthDay = curDate.getUTCDate();\n\t\t\t\t\t\tif (dayInd == 0) {\n\t\t\t\t\t\t\tif (monthLabel != curDate.getUTCMonth()+1) {\n\t\t\t\t\t\t\t\tmonthLabel = curDate.getUTCMonth()+1;\n\t\t\t\t\t\t\t\theaderLabel = curDate.getUTCDay().toString()+' '+ monthNames[curDate.getUTCMonth()]+' '+curDate.getFullYear().toString();\n\t\t\t\t\t\t\t\theaderLabel = monthNames[curDate.getUTCMonth()]+' '+curDate.getFullYear().toString();\n\t\t\t\t\t\t\t} else {headerLabel = ''}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// kazda petla to kolejny dzien tyogdnia, w kolejnych obrotach petli zasilana jest\n\t\t\t\t\t\t// tablica wewnetrzna glownej tablicy odpowiednio dla users i views\n\t\t\t\t\t\tweeksViewsArray[dayInd].push({day: headerLabel, value: _viewsData[_i]});\n\t\t\t\t\t\tweeksUsersArray[dayInd].push({day: headerLabel, value: _usersData[_i]});\n\t\t\t\t\t\tdayInd++;\n\n\t\t\t\t\t}\n\t\t\t\t\tthis.heatMapHeaders = new Array(0);\n\n\t\t\t\t\t_viewsData = new Array(0);\n\t\t\t\t\t_usersData = new Array(0);\n\t\t\t\t\t// ustalenie wartosci naglowkow dla danych, oraz przepisanie danych tablicowych do tablicy jednowymiarowej\n\t\t\t\t\t// dane w tablicy jedno wymiarowej charaktyryzuja sie tym ze sa pogrupowane dniami tygodnia\n\t\t\t\t\t// czyli jesli danych pobranych  z serwisu jest 70 i zaczynaja sie od czwartku to\n\t\t\t\t\t// pierwsze 10 danych to dane czwartkowe, kolejne 10 to piątek itd, dane te sa przepisywane do zmiennej globalnej\n\t\t\t\t\t// widzanej przez template\n\t\t\t\t\tfor (let _i = 0; _i < weeksViewsArray.length; _i++){\n\t\t\t\t\t\tfor (let _j = 0; _j < weeksViewsArray[_i].length; _j++ ) {\n\t\t\t\t\t\t\tif (_i == 0) this.heatMapHeaders.push(weeksViewsArray[_i][_j].day);\n\n\t\t\t\t\t\t\t_viewsData.push(weeksViewsArray[_i][_j].value);\n\t\t\t\t\t\t\t_usersData.push(weeksUsersArray[_i][_j].value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.heatMapViewsData = _viewsData;\n\t\t\t\tthis.heatMapUsersData = _usersData;\n\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t);\n\n\t}\n\n\taskForNewPlayer() {\n\t\t\tthis.modal.input(this.translation.translate('PLAYER.LIST.MODAL.ADD.HEADER'),\n\t\t\t\tthis.translation.translate('PLAYER.LIST.MODAL.ADD.INPUT'),\n\t\t\t\t[{\n\t\t\t\t\tlabel: this.translation.translate('PLAYER.LIST.MODAL.ADD.ADD'), fa: 'check', close: true,\n\t\t\t\t\tclick: (name: string) => this.addNewPlayer(name)\n\t\t\t\t},\n\t\t\t\t{ label: this.translation.translate('PLAYER.LIST.MODAL.ADD.CANCEL'), fa: 'ban', close: true }\n\t\t\t\t],\n\t\t\t\t\"MyFirstPlayer\");\n\t\t}\n\n\t\tprivate addNewPlayer(name: string) {\n\t\t\tif (this.user.accountId != null) {\n\t\t\t\tconst request: PlayerCreateRequest = { name: name, conf_json: '{}', api_version: '2' };\n\t\t\t\tthis.addNewSub = this.playerService\n\t\t\t\t\t.createPlayer(this.user.accountId, request)\n\t\t\t\t\t.subscribe((p: PlayerReadResponse) => this.gotoConfigurator(p.id));\n\t\t\t}\n\t\t}\n\n\t\tgotoConfigurator(playerId: number, e?: MouseEvent) {\n\t\t\tif (e && !e.defaultPrevented) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\tthis.router.navigate(['admin', 'player', playerId]);\n\t\t\treturn;\n\t\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/dashboard/dashboard.view.component.ts","import { Component, OnInit, Input, OnChanges, HostListener, ElementRef } from '@angular/core';\nimport { NgLocaleLocalization } from '@angular/common';\n\n@Component({\n\tselector: 'heat-map',\n\tstyles: [\n\t\t ':host {display:block;padding:0 10px;}',\n\t],\n\ttemplate: `\n\t<style type=\"text/css\">\n\n\t\t.square\n\t\t{\n\t\t\tdisplay: inline-block;\n\t\t\twidth: 18px;\n\t\t\theight: 18px;\n\t\t\tborder-radius: 3px;\n\t\t\t-moz-border-radius: 3px;\n\t\t\tmargin: 1px 1px 0px 0px;\n\t\t\tpadding: 0;\n\t\t\tfont-family: inherit;\n\t\t\tvertical-align: middle;\n\t\t\twhite-space: nowrap;\n\t\t}\n\n\t\t.square.row-title\n\t\t{\n\t\t\tborder: 0px;\n\t\t\twidth : 30px;\n\t\t\tcolor: #333333;\n\t\t\ttext-align:right;\n\t\t\tline-height:18px;\n\t\t\tfont-size:12px;\n\t\t}\n\n\t\t.square.col-title\n\t\t{\n\t\t\tvertical-align: top;\n\t\t\ttext-align: center;\n\t\t\tcolor: #333333;\n\t\t\tline-height:18px;\n\t\t\tfont-size:12px;\n\t\t}\n\n\t\t.rotate\n\t\t{\n\t\t\tbackground-color: rgba(0, 0, 0, 0.0);\n\t\t\tborder: 0px;\n\n\n\t\t\t/* Safari */\n\t\t\t-webkit-transform: translate(-6px,9px) rotate(-45deg);\n\t\t\t-webkit-transform-origin: 0 0;\n\n\t\t\t/* Firefox */\n\t\t\t-moz-transform: translate(-6px,9px) rotate(-45deg);\n\t\t\t-moz-transform-origin: 0 0;\n\n\t\t\t/* IE */\n\t\t\t-ms-transform: translate(-6px,9px) rotate(-45deg);\n\t\t\t-ms-transform-origin: 0 0;\n\n\t\t\t/* Opera */\n\t\t\t-o-transform: translate(-6px,9px) rotate(-45deg);\n\t\t\t-o-transform-origin: 0 0;\n\t\t}\n\n\t\t.ownTooltip {\n\t\t\tposition: relative;\n\t\t\tdisplay: inline-block;\n\t\t\tborder-bottom: 0px dotted black;\n\t\t  }\n\t\t  \n\t\t  .ownTooltip .tooltiptext {\n\t\t\tvisibility: hidden;\n\t\t\twidth: 120px;\n\t\t\tbackground-color: #555;\n\t\t\tcolor: #fff;\n\t\t\ttext-align: center;\n\t\t\tborder-radius: 6px;\n\t\t\tpadding: 5px 0;\n\t\t\tposition: absolute;\n\t\t\tz-index: 1;\n\t\t\tbottom: 125%;\n\t\t\tleft: 50%;\n\t\t\tmargin-left: -60px;\n\t\t\topacity: 0;\n\t\t\ttransition: opacity 0.3s;\n\t\t  }\n\t\t  \n\t\t  .ownTooltip .tooltiptext::after {\n\t\t\tcontent: \"\";\n\t\t\tposition: absolute;\n\t\t\ttop: 100%;\n\t\t\tleft: 50%;\n\t\t\tmargin-left: -5px;\n\t\t\tborder-width: 5px;\n\t\t\tborder-style: solid;\n\t\t\tborder-color: #555 transparent transparent transparent;\n\t\t  }\n\t\t  \n\t\t  .ownTooltip:hover .tooltiptext {\n\t\t\tvisibility: visible;\n\t\t\topacity: 0.8;\n\t\t  }\n\n\t</style>\n\t<div *ngIf=\"rowsForDisplay.length>0\" class= \"row\" >\n\n\t\t<span *ngIf=\"Rows\" [ngClass]=\"{ 'square': true }\" [ngStyle]=\" {'border': '0px', 'width' : DEFAULT_ROW_TITLE_WIDTH + 'px', 'opacity':'0' }\">\n\t\t</span>\n\n\t\t<span align = \"center\" *ngFor=\"let header of Headers\"\n\t\t\t\tclass=\"square rotate col-title\"\n\t\t\t\t[ngStyle]=\" {'width': squareWidth+'px'}\">\n\t\t\t\t{{header}}\n\t\t</span>\n\t</div>\n\n\t<div *ngFor=\"let row of rowsForDisplay; let i = index\" class=\"row\">\n\t\t<span *ngIf=\"Rows\" class=\"square row-title\">\n\t\t{{Rows[i]}}\n\t\t</span>\n\t\t<span  *ngFor=\"let data of row; let j = index\" class=\"ownTooltip\">\n\t\t\t<span class=\"tooltiptext\">{{incDate(7*j+i+1)}}{{data.info}}</span>\n\t\t\t<span \n\t\t\t\tclass=\"square\"\n\t\t\t\t[ngStyle]=\" {'background-color': ColorSchema,\n\t\t\t\t\t\t\t 'opacity': data.value,\n\t\t\t\t\t\t\t 'border': borderWidth,\n\t\t\t\t\t\t\t 'width': squareWidth+'px' }\" >\n\t\t\t</span>\n\t\t</span>\t\n\t</div>\n\n\t<span>{{minVal}}</span>\n\t<span class=\"square\" \n\t\t\t\t[ngStyle]=\" {\n\t\t\t\t 'background-color': 'red',\n\t\t\t\t 'border': '2px',\n\t\t\t\t 'width': '200px',\n\t\t\t\t 'margin-top' : '20px',\n\t\t\t\t 'margin-bottom': '20px', \n\t\t\t\t 'background-image': 'linear-gradient(to right, #FFFFFF , '+ColorSchema+')' }\" >\n\t</span>\n\t<span>{{maxVal}}</span>\n\n\t`\n})\nexport class HeatmapComponent implements OnInit, OnChanges {\n\tDEFAULT_ROW_TITLE_WIDTH:number = 30;\n\tDEFAULT_ROW_SPACING: number = 60;\n\tminVal = \"0\";\n\tmaxVal = \"0\";\n\tfirstDay: any;\n\n\t/*\n\t\t<heat-map\n\t\t\t[Granularity] = \"heatMapGranularity\"   // string: 'day' or 'hour' - required,\n\t\t\t[Data] = \"heatMapViewsData\"\t\t\t// number[]: values for heat map, one dimension\n\t\t\t[ColorSchema] = \"'#ffffff'\"\t\t\t// string: '#000000' (default), \n\t\t\t[ShowBorder] = \"true\"\t\t\t\t  // boolean: true as default, display borders for heat fields\n\t\t\t[Rows] = \"heatMapRowDescriptors\"\t   // string[]: headers for columns for 'day' granularity, for hours fixed descriptions ['1','2'.'3'..'23','00']\n\t\t\t[Headers] = \"heatMapHeaders\"\t\t   // string[]: descriptors for rows for 'day' granulartiy,\n\t\t></heat-map>\n\t*/\n\n\t@Input()\n\tHeaders: string[];\n\n\t@Input()\n\tRows: string[];\n\n\t@Input()\n\tGranularity: string; // ['day', 'hour']\n\n\t@Input()\n\tData: number[];\n\n\t@Input()\n\tColorSchema: string | \"#000000\";\n\n\t@Input()\n\tShowBorder: boolean | true;\n\n\t@Input()\n\tbeginDate: {day: number, month: number, year: number};\n\n\t@HostListener('window:resize', ['$event'])\n\tonResize(event? : Event) {\n\t\tthis.squareResize();\n\t}\n\n\trowsForDisplay: any[]\n\tborderWidth: string;\n\tcomponentWidth : any;\n\tsquareWidth: any;\n\n\tconstructor(private el:ElementRef) {\n\n\t}\n\n\tngOnInit() {\n\n\t}\n\n\tincDate(_i: number): string {\n\t\tlet _res = new Date(this.firstDay);\n\t\t_res.setDate(_res.getDate()+_i);\n\t\n\t\tif (this.Granularity == \"day\"){\n\t\t\treturn _res.getUTCDate().toString() +\n\t\t\t'-' + (_res.getUTCMonth()+1).toString() +\n\t\t\t'-' + _res.getFullYear().toString() + ': ';\n\t\t} else return '';\n\t}\n\n\tngOnChanges() {\n\t\tthis.firstDay = new Date(this.beginDate.year,this.beginDate.month, this.beginDate.day);\n\t\tlet dataField: {value: number, info: string};\n\t\tlet dataRow: any[];\n\t\tlet nlCounter = 0;\n\t\tlet _rowCounter = 0;\n\n\t\tthis.rowsForDisplay = new Array(0);\n\n\t\tthis.borderWidth = \"1px solid \"+this.ColorSchema;\n\t\tif (!this.ShowBorder) this.borderWidth = \"0px\";\n\n\t\tif (this.Granularity == 'hour') {\n\t\t\tnlCounter = 24;\n\t\t} else if (this.Granularity == 'day') {\n\t\t\t// nlCounter = this.Data.length;\n\t\t\tif(this.Data != null) {\n\t\t\t\tnlCounter = this.Data.length/7;\n\t\t\t} else {\n\t\t\t\tnlCounter = 1;\n\t\t\t}\n\t\t};\n\n\t\tlet _maxValue = Math.max(...this.Data);\n\t\tthis.maxVal = _maxValue.toString();\n\n\t\t// let value: number;\n\t\tlet colCounter = 0;\n\t\tif (this.Data != null){\n\t\t\tfor (let _i = 0 ; _i < this.Data.length ; _i++){\n\n\t\t\t\tif (colCounter == 0) {\n\t\t\t\t\tdataRow = new Array(0);\n\t\t\t\t}\n\n\t\t\t\tdataField = { value: this.Data[_i]/_maxValue, info: this.Data[_i].toString() };\n\n\t\t\t\tdataRow.push(dataField);\n\n\t\t\t\tcolCounter++;\n\t\t\t\tif (colCounter > nlCounter - 1) {\n\t\t\t\t\tcolCounter = 0;\n\t\t\t\t\tthis.rowsForDisplay.push(dataRow);\n\t\t\t\t\t_rowCounter++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.squareResize();\n\t}\n\n\tsquareResize() {\n\t\t// Skip resize if no right data.\n\t\tif ((this.rowsForDisplay == null) || (this.rowsForDisplay.length == 0) || (this.rowsForDisplay[0].length == 0)) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tthis.componentWidth = this.el.nativeElement.getBoundingClientRect().width;\n\t\t\tlet itemsNum = this.rowsForDisplay[0].length;\n\t\t\tlet spacing = this.DEFAULT_ROW_TITLE_WIDTH  + this.DEFAULT_ROW_SPACING;\n\t\t\tthis.squareWidth = (this.componentWidth - spacing) / itemsNum;\n\t\t} catch (e) {\n\t\t\t//console.error(e);\n\t\t}\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/heatmap/heatmap.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { PlayerService } from '../../../service/player.service';\nimport { AnalyticsDashboardView } from './dashboard.view.component';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { HeatmapComponent } from '../component/heatmap/heatmap.component';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsDashboardView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule\n\t],\n\tdeclarations: [\n\t\tAnalyticsDashboardView,\n\t\tHeatmapComponent,\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tPlayerService,\n\t]\n})\nexport class AnalyticsDashboardModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/dashboard/dashboard.module.ts","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UserService } from '../../../service/user.service';\nimport { DateUtil } from '../../../util/date.util';\nimport { MediaMetadata, TopViewedMediaMetadataListResponse, TopViewedMediaRecord, MediaStatsHistoryViewsRec } from '../../../model/api.model';\nimport { GranularityType, ChartType, ChartTimeSeriesModel } from '../component/charts/chart.model';\nimport moment from 'moment';\n\n@Component({\n\tselector: 'analytics-top-content-view',\n\ttemplate: require('./top-content.view.component.html'),\n\tviewProviders: [],\n\tstyles: [\n\t\t':host .chart-loader {height:200px;position:relative;}',\n\t\t':host #top-content-list td{cursor:pointer;word-break: break-word;}',\n\t\t':host .media-list-loader {height:400px;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsTopContentView extends Localization implements OnInit {\n\tMEDIA_PREVIEW_VIEWS_HISTORY_DAYS: number = 30;\n\tLAST_HOURS_SELECTED_FOR_SCOPE_DEFAULT_VALUE: number = 720; // in [h] - 720 last 30 days\n\tPAST_TIMESTAMP: number = 946684800; // Timestamp for defining \"all time\" time window beginning. \"946684800\" is 2000-01-01 00:00:00 UTC.\n\n\tselectedMediaMetadata: any;\n\ttopMediaList: Array<any> | null;\n\ttopMediaListTotalLength: number;\n\ttopMediaListHasUsersStats: boolean;\n\tmediaMetadataByMaterialId: Map<string, any>;\n\tdateUtil: DateUtil;\n\tlastHoursSelectedForScope: number;\n\tpagingOptions: any;\n\tpreviewHistoryStats: ChartTimeSeriesModel;\n\tengagementRateStats: any;\n\n\tconstructor(public locale: LocaleService,\n\t\t\t\tpublic translation: TranslationService,\n\t\t\t\tprivate mediaAnalyticsService: MediaService,\n\t\t\t\tpublic user: UserService,\n\t\t\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tthis.topMediaList = null;\n\t\tthis.mediaMetadataByMaterialId = new Map<string, any>();\n\t\tthis.topMediaListTotalLength = 0;\n\t\tthis.topMediaListHasUsersStats = false;\n\t\tthis.pagingOptions = {\n\t\t\tpage: 1,\n\t\t\tpage_size: 10\n\t\t};\n\t\tthis.lastHoursSelectedForScope = this.LAST_HOURS_SELECTED_FOR_SCOPE_DEFAULT_VALUE;\n\n\t\tthis.selectedMediaMetadata = null;\n\n\t\t// Making alias for view.\n\t\tthis.dateUtil = DateUtil;\n\t}\n\n\tngOnInit() {\n\t\tthis.loadData();\n\t}\n\n\tselectMediaMetadata(materialId: string): void {\n\t\tif(this.selectedMediaMetadata && (this.selectedMediaMetadata.material_id == materialId)) {\n\t\t\t// Skip selection if mediaMetadata was not updated.\n\t\t\treturn;\n\t\t}\n\n\t\t// Select new data.\n\t\tthis.selectedMediaMetadata = this.mediaMetadataByMaterialId.get(materialId);\n\t\tthis.loadHistoryStatsForSelectedMedia();\n\t}\n\n\tprivate loadHistoryStatsForSelectedMedia(): void {\n\t\tlet endDate = moment().startOf('day');\n\t\tlet startDate = endDate.clone().subtract(this.MEDIA_PREVIEW_VIEWS_HISTORY_DAYS, 'days');\n\t\tlet granularity: GranularityType = 'day';\n\n\t\t// Set null for showing loader.\n\t\tthis.previewHistoryStats = null;\n\n\t\tthis.mediaAnalyticsService.getMediaStatsHistory(\n\t\t\tthis.selectedMediaMetadata.material_id, startDate, endDate, granularity)\n\t\t\t\t.subscribe((data: any) => {\n\t\t\t\tthis.previewHistoryStats = {\n\t\t\t\t\tdata: data.series,\n\t\t\t\t\tlabels: data.labels,\n\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\tendDate: endDate,\n\t\t\t\t\tchartType: 'lineTime',\n\t\t\t\t\tgranularity: granularity\n\t\t\t\t};\n\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\n\t\tif(this.user.isEngagementRateEnabled()) {\n\t\t\t// Set null for showing loader.\n\t\t\tthis.engagementRateStats = null;\n\n\t\t\tthis.mediaAnalyticsService.getMediaEngagementRate(\n\t\t\t\tthis.selectedMediaMetadata.material_id, startDate, endDate)\n\t\t\t\t\t.subscribe((data: any) => {\n\n\t\t\t\t\tthis.engagementRateStats = data;\n\t\t\t\t\t// When there is no data set empty object for marking that engagement rate\n\t\t\t\t\t// was loading, but no data were found.\n\t\t\t\t\tif(!this.engagementRateStats) {\n\t\t\t\t\t\tthis.engagementRateStats = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate loadData() {\n\t\t// For more than hour use start of this day as end date. Results will be consistent,\n\t\t// when user click again on same \"long\" range. For hour use real last hour data.\n\t\tlet endDate = (this.lastHoursSelectedForScope > 1) ? moment().startOf('day') : moment();\n\t\tlet startDate = null;\n\t\tif(this.lastHoursSelectedForScope > 0) {\n\t\t\tstartDate = endDate.clone().subtract(this.lastHoursSelectedForScope, 'hours');\n\t\t} else {\n\t\t\tstartDate = moment.unix(this.PAST_TIMESTAMP);\n\t\t}\n\n\t\t// Load data.\n\t\t// Set topMediaList null - this will show the loader.\n\t\tthis.topMediaList = null;\n\t\tthis.mediaAnalyticsService.getTopViewedMediaMetadataList(startDate, endDate, this.pagingOptions).subscribe((data: TopViewedMediaMetadataListResponse) => {\n\t\t\tthis.topMediaList = data.records;\n\t\t\tthis.topMediaListTotalLength = data.total_records;\n\t\t\tthis.topMediaListHasUsersStats = true; //this.hasTopMediaListUsersStats(this.topMediaList);\n\t\t\tthis.mediaMetadataByMaterialId = new Map<string, any>();\n\t\t\tfor(let mm of data.records) {\n\t\t\t\tthis.mediaMetadataByMaterialId.set(mm.media.material_id, mm.media);\n\t\t\t}\n\n\t\t\tthis.cdr.markForCheck();\n\n\t\t\t// Preselect first element if data any is available and there is no selected item.\n\t\t\tif((this.selectedMediaMetadata == null) && (this.topMediaList != null) && (this.topMediaList.length > 0)) {\n\t\t\t\tthis.selectMediaMetadata(this.topMediaList[0].media.material_id);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate hasTopMediaListUsersStats(topMediaList: Array<any>): boolean {\n\t\tlet result = false;\n\t\tif(topMediaList) {\n\t\t\tfor(let rec of topMediaList) {\n\t\t\t\tif(('users' in rec) && (rec.users > 0)) {\n\t\t\t\t\tresult = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tisMediaMetadataSelected(material_id?: number): boolean {\n\t\treturn material_id && this.selectedMediaMetadata &&  (this.selectedMediaMetadata.material_id == material_id);\n\t}\n\n\tonLastHoursSelectedChange(hours: number): void {\n\t\tif(hours != this.lastHoursSelectedForScope) {\n\t\t\tthis.lastHoursSelectedForScope = hours;\n\t\t\tthis.pagingOptions.page = 1;\n\t\t\tthis.loadData();\n\t\t}\n\t}\n\n\tonPageChanged(page: number): void {\n\t\tthis.pagingOptions.page = page;\n\t\tthis.loadData();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/top-content/top-content.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { AnalyticsTopContentView } from './top-content.view.component';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { ChartComponent } from '../component/charts/chart.component';\nimport { ChartRealtimeComponent } from '../component/charts/chart.realtime.component';\nimport { ChartGranularityComponent } from '../component/charts/chart.granularity.component';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\nimport { MediaService } from '../../../service/analytics/media.service';\n\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsTopContentView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule,\n\t\tPagerModule\n\t],\n\tdeclarations: [\n\t\tAnalyticsTopContentView,\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tMediaService,\n\t]\n})\nexport class AnalyticsTopContentModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/top-content/top-content.module.ts","import { Injectable, EventEmitter, LOCALE_ID, Inject } from '@angular/core';\nvar GoogleChartsLoaderService = /** @class */ (function () {\n    function GoogleChartsLoaderService(localeId) {\n        this.chartPackage = {\n            AnnotationChart: 'annotationchart',\n            AreaChart: 'corechart',\n            Bar: 'bar',\n            BarChart: 'corechart',\n            BubbleChart: 'corechart',\n            Calendar: 'calendar',\n            CandlestickChart: 'corechart',\n            ColumnChart: 'corechart',\n            ComboChart: 'corechart',\n            PieChart: 'corechart',\n            Gantt: 'gantt',\n            Gauge: 'gauge',\n            GeoChart: 'geochart',\n            Histogram: 'corechart',\n            Line: 'line',\n            LineChart: 'corechart',\n            Map: 'map',\n            OrgChart: 'orgchart',\n            Sankey: 'sankey',\n            Scatter: 'scatter',\n            ScatterChart: 'corechart',\n            SteppedAreaChart: 'corechart',\n            Table: 'table',\n            Timeline: 'timeline',\n            TreeMap: 'treemap',\n            WordTree: 'wordtree'\n        };\n        this.googleScriptLoadingNotifier = new EventEmitter();\n        this.googleScriptIsLoading = false;\n        this.localeId = localeId;\n    }\n    GoogleChartsLoaderService.prototype.load = function (chartType, apiKey) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            if (resolve === void 0) { resolve = Function.prototype; }\n            if (reject === void 0) { reject = Function.prototype; }\n            _this.loadGoogleChartsScript().then(function () {\n                var initializer = {\n                    packages: [_this.chartPackage[chartType]],\n                    language: _this.localeId,\n                    callback: resolve\n                };\n                if (apiKey) {\n                    initializer.mapsApiKey = apiKey;\n                }\n                google.charts.load('45.2', initializer);\n            }).catch(function (err) { return reject(); });\n        });\n    };\n    GoogleChartsLoaderService.prototype.loadGoogleChartsScript = function () {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            if (resolve === void 0) { resolve = Function.prototype; }\n            if (reject === void 0) { reject = Function.prototype; }\n            if (typeof google !== 'undefined' && google.charts) {\n                resolve();\n            }\n            else if (!_this.googleScriptIsLoading) {\n                _this.googleScriptIsLoading = true;\n                var script = document.createElement('script');\n                script.type = 'text/javascript';\n                script.src = 'https://www.gstatic.com/charts/loader.js';\n                script.async = true;\n                script.defer = true;\n                script.onload = function () {\n                    _this.googleScriptIsLoading = false;\n                    _this.googleScriptLoadingNotifier.emit(true);\n                    resolve();\n                };\n                script.onerror = function () {\n                    _this.googleScriptIsLoading = false;\n                    _this.googleScriptLoadingNotifier.emit(false);\n                    reject();\n                };\n                document.getElementsByTagName('head')[0].appendChild(script);\n            }\n            else {\n                _this.googleScriptLoadingNotifier.subscribe(function (loaded) {\n                    if (loaded) {\n                        resolve();\n                    }\n                    else {\n                        reject();\n                    }\n                });\n            }\n        });\n    };\n    GoogleChartsLoaderService.decorators = [\n        { type: Injectable },\n    ];\n    /** @nocollapse */\n    GoogleChartsLoaderService.ctorParameters = function () { return [\n        { type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID,] },] },\n    ]; };\n    return GoogleChartsLoaderService;\n}());\nexport { GoogleChartsLoaderService };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-google-charts/google-charts-loader.service.js\n// module id = null\n// module chunks = ","var ChartHTMLTooltip = /** @class */ (function () {\n    function ChartHTMLTooltip(el) {\n        this.tooltipDOMElement = el;\n    }\n    ChartHTMLTooltip.prototype.setPosition = function (x, y) {\n        this.tooltipDOMElement.nativeElement.style.left = x + ChartHTMLTooltip.PIXELS;\n        this.tooltipDOMElement.nativeElement.style.top = y + ChartHTMLTooltip.PIXELS;\n    };\n    ChartHTMLTooltip.prototype.getDOMElement = function () {\n        return this.tooltipDOMElement;\n    };\n    ChartHTMLTooltip.PIXELS = 'px';\n    return ChartHTMLTooltip;\n}());\nexport { ChartHTMLTooltip };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-google-charts/google-chart/chart-html-tooltip.js\n// module id = null\n// module chunks = ","import { Component, ElementRef, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core';\nimport { GoogleChartsLoaderService } from '../google-charts-loader.service';\nimport { ChartHTMLTooltip } from './chart-html-tooltip';\nvar GoogleChartComponent = /** @class */ (function () {\n    function GoogleChartComponent(el, loaderService) {\n        this.el = el;\n        this.loaderService = loaderService;\n        this.chartSelect = new EventEmitter();\n        this.chartReady = new EventEmitter();\n        this.chartError = new EventEmitter();\n        this.mouseOver = new EventEmitter();\n        this.mouseOut = new EventEmitter();\n    }\n    GoogleChartComponent.prototype.ngOnChanges = function (changes) {\n        var _this = this;\n        var key = 'data';\n        if (changes[key]) {\n            if (!this.data) {\n                return;\n            }\n            this.options = this.data.options;\n            this.loaderService.load(this.data.chartType, this.data.apiKey).then(function () {\n                if (_this.wrapper === undefined || _this.wrapper.getChartType() !== _this.data.chartType) {\n                    _this.wrapper = new google.visualization.ChartWrapper(_this.data);\n                }\n                else {\n                    _this.unregisterChartEvents();\n                    _this.wrapper.setDataTable(_this.data.dataTable);\n                    _this.wrapper.setOptions(_this.options);\n                }\n                _this.registerChartWrapperEvents();\n                _this.reformat();\n                _this.redraw();\n            });\n        }\n    };\n    GoogleChartComponent.prototype.redraw = function () {\n        this.reformat();\n        this.wrapper.draw(this.el.nativeElement.querySelector('div'));\n    };\n    /**\n     * Applies formatters to data columns, if defined\n     */\n    /**\n       * Applies formatters to data columns, if defined\n       */\n    GoogleChartComponent.prototype.reformat = /**\n       * Applies formatters to data columns, if defined\n       */\n    function () {\n        if (!this.data) {\n            return;\n        }\n        if (this.data.formatters !== undefined) {\n            for (var _i = 0, _a = this.data.formatters; _i < _a.length; _i++) {\n                var formatterConfig = _a[_i];\n                var formatterConstructor = google.visualization[formatterConfig.type];\n                var formatterOptions = formatterConfig.options;\n                var formatter = new formatterConstructor(formatterOptions);\n                for (var _b = 0, _c = formatterConfig.columns; _b < _c.length; _b++) {\n                    var col = _c[_b];\n                    formatter.format(this.wrapper.getDataTable(), col);\n                }\n            }\n        }\n    };\n    GoogleChartComponent.prototype.getSelectorBySeriesType = function (seriesType) {\n        var selectors = {\n            bars: 'bar#%s#%r',\n            haxis: 'hAxis#0#label',\n            line: 'point#%s#%r',\n            legend: 'legendentry#%s',\n            area: 'point#%s#%r'\n        };\n        var selector = selectors[seriesType];\n        return selector;\n    };\n    /**\n     * Given a column number, counts how many\n     * columns have rol==\"data\". Those are mapped\n     * one-to-one to the series array. When rol is not defined\n     * a column of type number means a series column.\n     * @param column to inspect\n     */\n    /**\n      * Given a column number, counts how many\n      * columns have rol==\"data\". Those are mapped\n      * one-to-one to the series array. When rol is not defined\n      * a column of type number means a series column.\n      * @param column to inspect\n      */\n    GoogleChartComponent.prototype.getSeriesByColumn = /**\n      * Given a column number, counts how many\n      * columns have rol==\"data\". Those are mapped\n      * one-to-one to the series array. When rol is not defined\n      * a column of type number means a series column.\n      * @param column to inspect\n      */\n    function (column) {\n        var series = 0;\n        var dataTable = this.wrapper.getDataTable();\n        for (var i = column - 1; i >= 0; i--) {\n            var role = dataTable.getColumnRole(i);\n            var type = dataTable.getColumnType(i);\n            if (role === 'data' || type === 'number') {\n                series++;\n            }\n        }\n        return series;\n    };\n    GoogleChartComponent.prototype.getBoundingBoxForItem = function (item) {\n        var boundingBox = { top: 0, left: 0, width: 0, height: 0 };\n        if (this.cli) {\n            var column = item.column;\n            var series = this.getSeriesByColumn(column);\n            var bar = item.row;\n            var row = item.row;\n            var seriesType = this.options.seriesType;\n            if (this.options.series && this.options.series[series] && this.options.series[series].type) {\n                seriesType = this.options.series[series].type;\n            }\n            if (seriesType) {\n                var selector = this.getSelectorBySeriesType(seriesType);\n                if (selector) {\n                    selector = selector.replace('%s', series + '').replace('%c', column + '').replace('%r', row + '');\n                    var box = this.cli.getBoundingBox(selector);\n                    if (box) {\n                        boundingBox = box;\n                    }\n                }\n            }\n        }\n        return boundingBox;\n    };\n    GoogleChartComponent.prototype.getValueAtPosition = function (position) {\n        if (position.row === null) {\n            return null;\n        }\n        var dataTable = this.wrapper.getDataTable();\n        var value = dataTable.getValue(position.row, position.column);\n        return value;\n    };\n    GoogleChartComponent.prototype.getColumnTypeAtPosition = function (position) {\n        var dataTable = this.wrapper.getDataTable();\n        var type = dataTable.getColumnType(position.column) || '';\n        return type;\n    };\n    GoogleChartComponent.prototype.getColumnLabelAtPosition = function (position) {\n        var dataTable = this.wrapper.getDataTable();\n        var type = dataTable.getColumnLabel(position.column) || '';\n        return type;\n    };\n    GoogleChartComponent.prototype.getHTMLTooltip = function () {\n        var tooltipER = new ElementRef(this.el.nativeElement.querySelector('.google-visualization-tooltip'));\n        return new ChartHTMLTooltip(tooltipER);\n    };\n    GoogleChartComponent.prototype.parseMouseEvent = function (item) {\n        var event = {\n            position: item,\n            boundingBox: this.getBoundingBoxForItem(item),\n            value: this.getValueAtPosition(item),\n            columnType: this.getColumnTypeAtPosition(item),\n            columnLabel: this.getColumnLabelAtPosition(item)\n        };\n        return event;\n    };\n    GoogleChartComponent.prototype.unregisterChartEvents = function () {\n        google.visualization.events.removeAllListeners(this.wrapper);\n    };\n    GoogleChartComponent.prototype.registerChartEvents = function () {\n        var _this = this;\n        if (this.mouseOver.observers.length > 0) {\n            var chart = this.wrapper.getChart();\n            this.cli = chart.getChartLayoutInterface();\n            google.visualization.events.addListener(chart, 'onmouseover', function (item) {\n                var event = _this.parseMouseEvent(item);\n                event.tooltip = _this.getHTMLTooltip();\n                _this.mouseOver.emit(event);\n            });\n        }\n        if (this.mouseOut.observers.length > 0) {\n            var chart = this.wrapper.getChart();\n            this.cli = chart.getChartLayoutInterface();\n            google.visualization.events.addListener(chart, 'onmouseout', function (item) {\n                var event = _this.parseMouseEvent(item);\n                _this.mouseOut.emit(event);\n            });\n        }\n    };\n    GoogleChartComponent.prototype.registerChartWrapperEvents = function () {\n        var _this = this;\n        google.visualization.events.addListener(this.wrapper, 'ready', function () {\n            _this.chartReady.emit({ message: 'Chart ready' });\n            _this.registerChartEvents();\n        });\n        google.visualization.events.addListener(this.wrapper, 'error', function (error) {\n            _this.chartError.emit(error);\n        });\n        google.visualization.events.addListener(this.wrapper, 'select', function () {\n            var event;\n            var selection = _this.wrapper.visualization.getSelection()[0];\n            if (selection !== undefined) {\n                var selectedRowValues = [];\n                var selectedRowFormattedValues = [];\n                if (selection.row !== null) {\n                    var dataTable = _this.wrapper.getDataTable();\n                    var numberOfColumns = dataTable.getNumberOfColumns();\n                    for (var i = 0; i < numberOfColumns; i++) {\n                        selectedRowValues.push(dataTable.getValue(selection.row, i));\n                        selectedRowFormattedValues.push(dataTable.getFormattedValue(selection.row, i));\n                    }\n                }\n                event = (_a = {\n                        message: 'select',\n                        row: selection.row,\n                        column: selection.column\n                    },\n                    _a['selectedRowValues'] = selectedRowValues,\n                    _a['selectedRowFormattedValues'] = selectedRowFormattedValues,\n                    _a);\n            }\n            else {\n                event = {\n                    message: 'deselect',\n                    row: null,\n                    column: null,\n                    selectedRowValues: [],\n                    selectedRowFormattedValues: []\n                };\n            }\n            _this.chartSelect.emit(event);\n            var _a;\n        });\n    };\n    GoogleChartComponent.decorators = [\n        { type: Component, args: [{\n                    selector: 'google-chart',\n                    template: '<div></div>',\n                    changeDetection: ChangeDetectionStrategy.OnPush\n                },] },\n    ];\n    /** @nocollapse */\n    GoogleChartComponent.ctorParameters = function () { return [\n        { type: ElementRef, },\n        { type: GoogleChartsLoaderService, },\n    ]; };\n    GoogleChartComponent.propDecorators = {\n        \"data\": [{ type: Input },],\n        \"chartReady\": [{ type: Output },],\n        \"chartError\": [{ type: Output },],\n        \"chartSelect\": [{ type: Output },],\n        \"mouseOver\": [{ type: Output },],\n        \"mouseOut\": [{ type: Output },],\n    };\n    return GoogleChartComponent;\n}());\nexport { GoogleChartComponent };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-google-charts/google-chart/google-chart.component.js\n// module id = null\n// module chunks = ","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar ChartMouseEvent = /** @class */ (function () {\n    function ChartMouseEvent() {\n    }\n    return ChartMouseEvent;\n}());\nexport { ChartMouseEvent };\n/**\n * @deprecated Use ChartMouseOverEvent instead\n */\nvar /**\n * @deprecated Use ChartMouseOverEvent instead\n */\nMouseOverEvent = /** @class */ (function (_super) {\n    __extends(MouseOverEvent, _super);\n    function MouseOverEvent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return MouseOverEvent;\n}(ChartMouseEvent));\n/**\n * @deprecated Use ChartMouseOverEvent instead\n */\nexport { MouseOverEvent };\nvar ChartMouseOverEvent = /** @class */ (function (_super) {\n    __extends(ChartMouseOverEvent, _super);\n    function ChartMouseOverEvent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return ChartMouseOverEvent;\n}(ChartMouseEvent));\nexport { ChartMouseOverEvent };\nvar ChartMouseOutEvent = /** @class */ (function (_super) {\n    __extends(ChartMouseOutEvent, _super);\n    function ChartMouseOutEvent() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return ChartMouseOutEvent;\n}(ChartMouseEvent));\nexport { ChartMouseOutEvent };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-google-charts/google-chart/chart-mouse-event.js\n// module id = null\n// module chunks = ","import { NgModule } from '@angular/core';\nimport { GoogleChartComponent } from './google-chart/google-chart.component';\nimport { GoogleChartsLoaderService } from './google-charts-loader.service';\nvar Ng2GoogleChartsModule = /** @class */ (function () {\n    function Ng2GoogleChartsModule() {\n    }\n    Ng2GoogleChartsModule.decorators = [\n        { type: NgModule, args: [{\n                    declarations: [\n                        GoogleChartComponent\n                    ],\n                    providers: [\n                        GoogleChartsLoaderService\n                    ],\n                    exports: [\n                        GoogleChartComponent\n                    ]\n                },] },\n    ];\n    /** @nocollapse */\n    Ng2GoogleChartsModule.ctorParameters = function () { return []; };\n    return Ng2GoogleChartsModule;\n}());\nexport { Ng2GoogleChartsModule };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-google-charts/google-charts.module.js\n// module id = null\n// module chunks = ","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit } from '@angular/core';\nimport { Localization, LocaleService, TranslationService } from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\nimport { Router } from '@angular/router';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { UrlService } from '../../../service/url.service';\nimport { UserService } from '../../../service/user.service';\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { GeoCountryStatsRec,\n\tGeoRegionStatsRec,\n\tGeoCityStatsRec } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n\tselector: 'analytics-geo-view',\n\ttemplate: require('./geo.view.component.html'),\n\tstyles: [\n\t\t':host .chart-loader {height:300px;position:relative;}',\n\t\t':host .table-loader {height:300px;position:relative;}',\n\t\t':host .table .flag-icon {position:relative;top:-1px;margin-right:10px;}',\n\t\t':host .table tbody tr {cursor:pointer;}',\n\t\t':host .analytics-geo-map {padding:0px 200px 20px 200px; max-width: 1200px; margin-left: auto; margin-right: auto;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsGeoView extends Localization implements OnInit {\n\n\t// Date range selector.\n\tstartDate: moment.Moment;\n\tendDate: moment.Moment;\n\tactiveGranularity: GranularityType = 'day';\n\tgranularityTypes: Array<GranularityType> = ['all'];\n\tchartType: string = 'lineTime';\n\n\tgeoStats: any;\n\tgeoStatsForPage: any;\n\tloadingData: boolean;\n\tpagingOptions: any;\n\n\tmapChartData: any;\n\n\tconstructor(public locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate url: UrlService,\n\t\tprivate router: Router,\n\t\tprivate user: UserService,\n\t\tprivate analyticsService: AnalyticsService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tlet range = this.user.getDateRangeSelection();\n\t\tthis.startDate = range.startDate;\n\t\tthis.endDate = range.endDate;\n\n\t\tthis.loadingData = true;\n\t\tthis.pagingOptions = {\n\t\t\tpage: 1,\n\t\t\tpage_size: 10,\n\t\t\ttotal_items: 0\n\t\t};\n\t}\n\n\tngOnInit() {\n\t\tthis.loadData();\n\t}\n\n\tprivate loadData() {\n\t\tthis.loadingData = true;\n\n\t\t// Load data.\n\t\tthis.analyticsService.getGeoCountriesStats(this.startDate, this.endDate).subscribe((data: Array<GeoCountryStatsRec>) => {\n\t\t\t// Count total views for range.\n\t\t\tlet viewsTotal = 0;\n\t\t\tfor(let rec of data) {\n\t\t\t\tviewsTotal += parseInt(rec.views);\n\t\t\t}\n\n\t\t\t// Prepare data for table.\n\t\t\tlet geoStats = [];\n\t\t\tlet pos = 0;\n\t\t\tfor(let rec of data) {\n\t\t\t\tlet views = parseInt(rec.views);\n\t\t\t\tpos += 1;\n\n\t\t\t\tgeoStats.push({\n\t\t\t\t\tpos: pos,\n\t\t\t\t\tviews: views,\n\t\t\t\t\tviews_share: (100.0 * views / viewsTotal),\n\t\t\t\t\tcountry: rec.country\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Update model.\n\t\t\tthis.geoStats = geoStats;\n\t\t\tthis.geoStatsForPage = geoStats.slice(0, this.pagingOptions.page_size);\n\t\t\tthis.pagingOptions.page = 1;\n\t\t\tthis.pagingOptions.total_items = geoStats.length;\n\n\t\t\t// Update charts data.\n\t\t\tlet chartData = {\n\t\t\t\tchartType: 'GeoChart',\n\t\t\t\tdataTable: new Array<any>(),\n\t\t\t\tapiKey: this.analyticsService.getGoogleMapsApiKey(),\n\t\t\t\toptions: {colorAxis: {colors: ['#d9ebfb', '#348fe2']}}\n\t\t\t};\n\t\t\tchartData.dataTable.push(['Country', 'Views']);\n\n\t\t\tfor(let rec of data) {\n\t\t\t\tchartData.dataTable.push([rec.country.country_code, parseInt(rec.views)]);\n\t\t\t}\n\t\t\tthis.mapChartData = chartData;\n\t\t\tthis.loadingData = false;\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tpublic onDateRangeChanged(dateRange: Array<moment.Moment>) {\n\t\t// Skip data load if no change.\n\t\tif((this.startDate.unix() == dateRange[0].unix()) && (this.endDate.unix() == dateRange[1].unix())) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.startDate = dateRange[0].startOf('day');\n\t\tthis.endDate = dateRange[1].startOf('day');\n\t\tthis.user.setDateRangeSelection(this.startDate, this.endDate);\n\t\tthis.loadData();\n\t}\n\n\tonPageChanged(page: number): void {\n\t\tthis.pagingOptions.page = page;\n\t\tlet itemsFrom = (page - 1) * this.pagingOptions.page_size;\n\t\tlet itemsTo = itemsFrom + this.pagingOptions.page_size;\n\t\tthis.geoStatsForPage = this.geoStats.slice(itemsFrom, itemsTo);\n\t}\n\n\tonMapRegionClick(e: any): void {\n\t\tif(e.selectedRowValues && e.selectedRowValues.length > 0) {\n\t\t\tlet selectedCountryCode = e.selectedRowValues[0].toLowerCase();\n\t\t\tthis.router.navigate(['admin', 'analytics', 'geo', selectedCountryCode]);\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/geo/geo.view.component.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit } from '@angular/core';\nimport { Localization, LocaleService, TranslationService } from 'angular-l10n';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { DecimalPipe } from '@angular/common';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { UrlService } from '../../../service/url.service';\nimport { UserService } from '../../../service/user.service';\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { GeoCountryStatsRec,\n\tGeoRegionStatsRec,\n\tGeoCityStatsRec } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n\tselector: 'analytics-geo-view',\n\ttemplate: require('./geo.country.view.component.html'),\n\tstyles: [\n\t\t':host .chart-loader {height:300px;position:relative;}',\n\t\t':host .table-loader {height:300px;position:relative;}',\n\t\t':host .table .flag-icon {position:relative;top:-1px;margin-right:10px;}',\n\t\t':host .analytics-geo-map {padding:0px 200px 20px 200px; max-width: 1200px; margin-left: auto; margin-right: auto;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsGeoCountryView extends Localization implements OnInit {\n\n\t// Constants.\n\tSCOPE_TYPE_REGIONS:string = 'regions';\n\tSCOPE_TYPE_CITIES:string = 'cities';\n\tMAX_CITIES_ON_MAP:number = 20;\n\n\t// Date range selector.\n\tstartDate: moment.Moment;\n\tendDate: moment.Moment;\n\tactiveGranularity: GranularityType = 'day';\n\tgranularityTypes: Array<GranularityType> = ['all'];\n\tchartType: string = 'lineTime';\n\n\tgeoStats: any;\n\tgeoStatsForPage: any;\n\tloadingData: boolean;\n\tpagingOptions: any;\n\tcountryCode: string;\n\tscopeType: string;\n\n\tmapChartData: any;\n\tmapColorRange: Array<string>;\n\tmapChartRegionsReducingMappings: any;\n\tmapChartRegionsSharingSet: any;\n\tmapChartRegionsSkippingsSet: any;\n\n\tconstructor(public locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate url: UrlService,\n\t\tprivate user: UserService,\n\t\tprivate analyticsService: AnalyticsService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tlet range = this.user.getDateRangeSelection();\n\t\tthis.startDate = range.startDate;\n\t\tthis.endDate = range.endDate;\n\n\t\tthis.loadingData = true;\n\t\tthis.pagingOptions = {\n\t\t\tpage: 1,\n\t\t\tpage_size: 10,\n\t\t\ttotal_items: 0\n\t\t};\n\t\tthis.scopeType = this.SCOPE_TYPE_REGIONS;\n\t\tthis.mapColorRange = ['#d9ebfb', '#348fe2'];\n\n\t\tthis.route.params.subscribe((rec) => {\n\t\t\tthis.countryCode = rec.countryCode;\n\n\t\t\tthis.initialLoadData();\n\t\t});\n\n\t\t// Loading custom fix for Google GeoCharts regions.\n\t\tlet regionsMapChartFix = require('./geo.country.view.regions.fix.json');\n\t\tthis.mapChartRegionsReducingMappings = regionsMapChartFix.reducingMappings;\n\t\tthis.mapChartRegionsSharingSet = regionsMapChartFix.sharingMapping;\n\t\tthis.mapChartRegionsSkippingsSet = regionsMapChartFix.skippingSet;\n\t}\n\n\tngOnInit() {\n\t\tthis.initialLoadData();\n\t}\n\n\tprivate initialLoadData() {\n\t\t// Initial load process can start by ngOnInit of from router subscription.\n\t\t// Do not load double the same data if already loaded.\n\t\tif(this.geoStats == null) {\n\t\t\t// Set getStats as empty array so initialLoadData() will be not able to call twice.\n\t\t\tthis.geoStats = [];\n\t\t\tthis.loadData();\n\t\t}\n\t}\n\n\tprivate loadData() {\n\t\tthis.loadingData = true;\n\n\t\t// View is still loading. Wait for countryCode value. Skip data loading for now.\n\t\tif(!this.countryCode) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Load data.\n\t\tif(this.scopeType == this.SCOPE_TYPE_REGIONS) {\n\t\t\tthis.loadDataForRegions();\n\t\t} else {\n\t\t\tthis.loadDataForCities();\n\t\t}\n\t}\n\n\tprivate makeRegionDataForMapChart(selectedCountryCode: string, data: Array<GeoRegionStatsRec>): Array<any> {\n\t\tlet result = new Array<any>();\n\n\t\tif(selectedCountryCode in this.mapChartRegionsReducingMappings) {\n\t\t\tresult = this.reduceRegionsForMapChart(selectedCountryCode, data);\n\t\t} else if(selectedCountryCode in this.mapChartRegionsSharingSet) {\n\t\t\tresult = this.makeSharedRegionsDataForMapChart(selectedCountryCode, data);\n\t\t} else if(selectedCountryCode in this.mapChartRegionsSkippingsSet) {\n\t\t\tlet totalViews = 0;\n\t\t\tfor(let rec of data) {\n\t\t\t\ttotalViews += parseInt(rec.views);\n\t\t\t}\n\t\t\tresult.push([selectedCountryCode, totalViews]);\n\t\t} else {\n\t\t\tfor(let rec of data) {\n\t\t\t\tlet regName = rec.region.subdiv_code ? rec.region.subdiv_code : rec.region.name;\n\t\t\t\tresult.push([regName, parseInt(rec.views)]);\n\t\t\t}\n\t\t}\n\n\t\tresult.unshift(['Region', 'Views']);\n\n\t\treturn result;\n\t}\n\n\tprivate makeSharedRegionsDataForMapChart(selectedCountryCode: string, data: Array<GeoRegionStatsRec>): Array<any> {\n\t\tlet result = new Array<any>();\n\t\tfor(let rec of data) {\n\t\t\tlet codeSrc = rec.region.subdiv_code;\n\t\t\tif(!(codeSrc in this.mapChartRegionsSharingSet[selectedCountryCode])) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tlet codesTrg = this.mapChartRegionsSharingSet[selectedCountryCode][codeSrc];\n\t\t\tfor(let code of codesTrg) {\n\t\t\t\tresult.push([code, Math.floor(parseInt(rec.views) / codesTrg.length)]);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate reduceRegionsForMapChart(selectedCountryCode: string, data: Array<GeoRegionStatsRec>): Array<any> {\n\t\tlet m = {};\n\t\tfor(let rec of data) {\n\t\t\tlet codeSrc = rec.region.subdiv_code;\n\t\t\tlet codeTrg = (codeSrc in this.mapChartRegionsReducingMappings[selectedCountryCode]) ? this.mapChartRegionsReducingMappings[selectedCountryCode][codeSrc]: codeSrc;\n\t\t\tif(!(codeTrg in m)) {\n\t\t\t\tm[codeTrg] = 0;\n\t\t\t}\n\t\t\tm[codeTrg] = m[codeTrg] + parseInt(rec.views);\n\t\t}\n\n\t\tlet result = new Array<any>();\n\t\tfor(let code in m) {\n\t\t\tresult.push([code, m[code]]);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate loadDataForRegions() {\n\t\tthis.analyticsService.getGeoRegionsStats(this.startDate, this.endDate, this.countryCode).subscribe((data: Array<GeoRegionStatsRec>) => {\n\t\t\tlet selectedCountryCode = this.countryCode.toUpperCase();\n\n\t\t\t// Count total views for range.\n\t\t\tlet viewsTotal = 0;\n\t\t\tfor(let rec of data) {\n\t\t\t\tviewsTotal += parseInt(rec.views);\n\t\t\t}\n\n\t\t\t// Prepare data for table.\n\t\t\tlet geoStats = [];\n\t\t\tlet pos = 0;\n\t\t\tfor(let rec of data) {\n\t\t\t\tlet views = parseInt(rec.views);\n\t\t\t\tpos += 1;\n\n\t\t\t\tgeoStats.push({\n\t\t\t\t\tpos: pos,\n\t\t\t\t\tviews: views,\n\t\t\t\t\tviews_share: (100.0 * views / viewsTotal),\n\t\t\t\t\tname: rec.region.name\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Update charts data.\n\t\t\t// - If country marked that we have no valid regions info for chart map, then select whole country.\n\t\t\tlet mapChartResolution = (selectedCountryCode in this.mapChartRegionsSkippingsSet) ? 'countries': 'provinces';\n\n\t\t\t// - Prepare settings.\n\t\t\tthis.mapChartData = {\n\t\t\t\tchartType: 'GeoChart',\n\t\t\t\tdataTable: this.makeRegionDataForMapChart(selectedCountryCode, data),\n\t\t\t\tapiKey: this.analyticsService.getGoogleMapsApiKey(),\n\t\t\t\toptions: {\n\t\t\t\t\tcolorAxis: {colors: this.mapColorRange},\n\t\t\t\t\tresolution: mapChartResolution,\n\t\t\t\t\tregion: selectedCountryCode\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tthis.loadDataUpdateModelOnDataLoad(geoStats);\n\t\t});\n\t}\n\n\tprivate loadDataForCities() {\n\t\tthis.analyticsService.getGeoCitiesStats(this.startDate, this.endDate, this.countryCode).subscribe((data: Array<GeoCityStatsRec>) => {\n\t\t\t// Count total views for range.\n\t\t\tlet viewsTotal = 0;\n\t\t\tfor(let rec of data) {\n\t\t\t\tviewsTotal += parseInt(rec.views);\n\t\t\t}\n\n\t\t\t// Prepare data for table.\n\t\t\tlet geoStats = [];\n\t\t\tlet pos = 0;\n\t\t\tfor(let rec of data) {\n\t\t\t\tlet views = parseInt(rec.views);\n\t\t\t\tpos += 1;\n\n\t\t\t\tgeoStats.push({\n\t\t\t\t\tpos: pos,\n\t\t\t\t\tviews: views,\n\t\t\t\t\tviews_share: (100.0 * views / viewsTotal),\n\t\t\t\t\tname: rec.city.name\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Update charts data.\n\t\t\tlet chartData = {\n\t\t\t\tchartType: 'GeoChart',\n\t\t\t\tdataTable: new Array<any>(),\n\t\t\t\tapiKey: this.analyticsService.getGoogleMapsApiKey(),\n\t\t\t\toptions: {\n\t\t\t\t\tcolorAxis: {colors: this.mapColorRange},\n\t\t\t\t\tdisplayMode: 'markers',\n\t\t\t\t\tregion: this.countryCode.toUpperCase()\n\t\t\t\t}\n\t\t\t};\n\t\t\tchartData.dataTable.push(['City', 'Views']);\n\n\t\t\tfor(let rec of data.slice(0, this.MAX_CITIES_ON_MAP)) {\n\t\t\t\tchartData.dataTable.push([rec.city.name, parseInt(rec.views)]);\n\t\t\t}\n\t\t\tthis.mapChartData = chartData;\n\t\t\tthis.loadDataUpdateModelOnDataLoad(geoStats);\n\t\t});\n\t}\n\n\tprivate loadDataUpdateModelOnDataLoad(geoStats: Array<any>) {\n\t\tthis.geoStats = geoStats;\n\t\tthis.geoStatsForPage = geoStats.slice(0, this.pagingOptions.page_size);\n\t\tthis.pagingOptions.page = 1;\n\t\tthis.pagingOptions.total_items = geoStats.length;\n\n\t\tthis.loadingData = false;\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tpublic onDateRangeChanged(dateRange: Array<moment.Moment>) {\n\t\t// Skip data load if no change.\n\t\tif((this.startDate.unix() == dateRange[0].unix()) && (this.endDate.unix() == dateRange[1].unix())) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.startDate = dateRange[0].startOf('day');\n\t\tthis.endDate = dateRange[1].startOf('day');\n\t\tthis.user.setDateRangeSelection(this.startDate, this.endDate);\n\t\tthis.loadData();\n\t}\n\n\tonScopeTypeChange(t: string) {\n\t\tthis.scopeType = t;\n\t\tthis.loadData();\n\t}\n\n\tonPageChanged(page: number): void {\n\t\tthis.pagingOptions.page = page;\n\t\tlet itemsFrom = (page - 1) * this.pagingOptions.page_size;\n\t\tlet itemsTo = itemsFrom + this.pagingOptions.page_size;\n\t\tthis.geoStatsForPage = this.geoStats.slice(itemsFrom, itemsTo);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/geo/geo.country.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { TagInputModule } from 'ngx-chips';\nimport { Ng2GoogleChartsModule } from 'ng2-google-charts';\n\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { AnalyticsGeoView } from './geo.view.component';\nimport { AnalyticsGeoCountryView } from './geo.country.view.component';\nimport { ChartComponent } from '../component/charts/chart.component';\nimport { ChartRealtimeComponent } from '../component/charts/chart.realtime.component';\nimport { ChartGranularityComponent } from '../component/charts/chart.granularity.component';\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsGeoView },\n\t{ path: ':countryCode', component: AnalyticsGeoCountryView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule,\n\t\tTagInputModule,\n\t\tPagerModule,\n\t\tNg2GoogleChartsModule,\n\t],\n\tdeclarations: [\n\t\tAnalyticsGeoView,\n\t\tAnalyticsGeoCountryView\n\t],\n\tproviders: [\n\t\tAnalyticsService\n\t]\n})\nexport class AnalyticsGeoModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/geo/geo.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { AccountTechStatsHistoryViewsRec,\n\tAccountTechStatsBrowserFamilySummaryRec,\n\tAccountTechStatsBrowserFamilyTopHistoryRec,\n\tAccountTechStatsBrowserFamilyReport,\n\tAccountTechStatsOsFamilySummaryRec,\n\tAccountTechStatsOsFamilyTopHistoryRec,\n\tAccountTechStatsOsFamilyReport,\n\tAccountTechStatsDeviceTypeSummaryRec,\n\tAccountTechStatsDeviceTypeTopHistoryRec,\n\tAccountTechStatsDeviceTypeReport,\n\tAccountTechStatsReport } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n\tselector: 'analytics-technology-view',\n\ttemplate: require('./technology.view.component.html'),\n\tstyles: [\n\t\t':host .chart-loader {height:300px;position:relative;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsTechnologyView extends Localization implements OnInit {\n\n\t// Support fields.\n\ticonClassForDeviceType: any;\n\n\t// Date range selector.\n\tstartDate: moment.Moment;\n\tendDate: moment.Moment;\n\tactiveGranularity: GranularityType = 'day';\n\tgranularityTypes: Array<GranularityType> = ['all'];\n\tchartType: string = 'lineTime';\n\n\t// Charts for top devices, browsers, OS.\n\ttopDeviceChartData: Array<chartjs.BaseDataset>;\n\ttopDeviceChartLabels: Array<string>;\n\ttopBrowserChartData: Array<chartjs.BaseDataset>;\n\ttopBrowserChartLabels: Array<string>;\n\ttopOsChartData: Array<chartjs.BaseDataset>;\n\ttopOsChartLabels: Array<string>;\n\tloadingData: boolean;\n\n\t// Stats tables.\n\tosTableStats: any;\n\tbrowserTableStats: any;\n\tdeviceTableStats: Array<any>;\n\n\tconstructor(public locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic analyticsService: AnalyticsService,\n\t\tprivate user: UserService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tlet range = this.user.getDateRangeSelection();\n\t\tthis.startDate = range.startDate;\n\t\tthis.endDate = range.endDate;\n\n\t\tthis.deviceTableStats = [];\n\t\tthis.osTableStats = [];\n\t\tthis.browserTableStats = [];\n\n\t\tthis.topDeviceChartData = [];\n\t\tthis.topDeviceChartLabels = [];\n\t\tthis.topBrowserChartData = [];\n\t\tthis.topBrowserChartLabels = [];\n\t\tthis.topOsChartData = [];\n\t\tthis.topOsChartLabels = [];\n\t\tthis.loadingData = true;\n\n\t\tthis.iconClassForDeviceType = {\n\t\t\t'0': 'fa-question',\n\t\t\t'1': 'fa-desktop',\n\t\t\t'2': 'fa-mobile',\n\t\t\t'3': 'fa-tablet',\n\t\t\t'4': 'fa-gamepad',\n\t\t\t'5': 'fa-television',\n\t\t\t'6': 'fa-car',\n\t\t\t'7': 'fa-picture-o',\n\t\t\t'8': 'fa-camera',\n\t\t\t'9': 'fa-headphones'\n\t\t};\n\t}\n\n\tngOnInit() {\n\t\tthis.loadData();\n\t}\n\n\tprivate makeHiddenSeriesMapForQuickSearch(series: Array<chartjs.BaseDataset>): any {\n\t\tlet result = {};\n\t\tfor(let rec of series) {\n\t\t\tlet recObj: any = rec;\n\t\t\tlet shouldBeHidden = false;\n\n\t\t\t// Hide serie if 'hidden' field defined and active in serie.\n\t\t\tif(recObj.hidden) {\n\t\t\t\tshouldBeHidden = true;\n\t\t\t}\n\n\t\t\t// Check if info about visibility is defined in serie metadata.\n\t\t\t// If present, then it represent last user selection.\n\t\t\tif(recObj._meta) {\n\t\t\t\t// 'hidden' record in _meta (if defined) overrides hidden flag value defined directly in data.\n\t\t\t\tfor(let k in recObj._meta) {\n\t\t\t\t\tif((typeof recObj._meta[k].hidden !== 'undefined') && (recObj._meta[k].hidden !== null)) {\n\t\t\t\t\t\tshouldBeHidden = recObj._meta[k].hidden;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(shouldBeHidden) {\n\t\t\t\tresult[rec.label] = true;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate loadData(onUserAction: boolean = false) {\n\t\t// Support fields for keeping user selection, which chart series should be visible on chart.\n\t\tlet hiddenChartSeriesForDeviceTypeLabels: any = null;\n\t\tlet hiddenChartSeriesForBrowserFamilyLabels: any = null;\n\t\tlet hiddenChartSeriesForOsFamilyLabels: any = null;\n\t\tthis.loadingData = true;\n\n\t\tif(onUserAction) {\n\t\t\t// If user has update chart selection (data load not ngOnInit), then store information,\n\t\t\t// what series should be hidden after data load.\n\t\t\thiddenChartSeriesForDeviceTypeLabels = this.makeHiddenSeriesMapForQuickSearch(this.topDeviceChartData);\n\t\t\thiddenChartSeriesForBrowserFamilyLabels = this.makeHiddenSeriesMapForQuickSearch(this.topBrowserChartData);\n\t\t\thiddenChartSeriesForOsFamilyLabels = this.makeHiddenSeriesMapForQuickSearch(this.topOsChartData);\n\t\t}\n\n\t\t// Load data.\n\t\tthis.analyticsService.getTechnologyStatsForRange(this.startDate, this.endDate, this.activeGranularity).subscribe((data: AccountTechStatsReport) => {\n\t\t\t// Load summary statistics into tables.\n\t\t\tthis.deviceTableStats = this.processDeviceTypeData(data.device_type.summary);\n\t\t\tthis.osTableStats = this.processOsFamilyData(data.os_family.summary);\n\t\t\tthis.browserTableStats = this.processBrowserFamilyData(data.browser_family.summary);\n\n\t\t\t// Load history statistics into charts.\n\t\t\tlet topDeviceChartData = this.processDeviceTypeDataForCharts(data.account_history, data.device_type.top_history);\n\t\t\tlet topBrowserFamilyChartData = this.processBrowserFamilyDataForCharts(data.account_history, data.browser_family.top_history);\n\t\t\tlet topOsFamilyChartData = this.processOsFamilyDataForCharts(data.account_history, data.os_family.top_history);\n\n\t\t\tif(onUserAction) {\n\t\t\t\tfor(let rec of topDeviceChartData.data) {\n\t\t\t\t\trec.hidden = (rec.label && (rec.label in hiddenChartSeriesForDeviceTypeLabels));\n\t\t\t\t}\n\t\t\t\tfor(let rec of topBrowserFamilyChartData.data) {\n\t\t\t\t\trec.hidden = (rec.label && (rec.label in hiddenChartSeriesForBrowserFamilyLabels));\n\t\t\t\t}\n\t\t\t\tfor(let rec of topOsFamilyChartData.data) {\n\t\t\t\t\trec.hidden = (rec.label && (rec.label in hiddenChartSeriesForOsFamilyLabels));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// - Update data & labels for charts.\n\t\t\tthis.topDeviceChartData = topDeviceChartData.data;\n\t\t\tthis.topDeviceChartLabels = topDeviceChartData.labels;\n\n\t\t\tthis.topBrowserChartData = topBrowserFamilyChartData.data;\n\t\t\tthis.topBrowserChartLabels = topBrowserFamilyChartData.labels;\n\n\t\t\tthis.topOsChartData = topOsFamilyChartData.data;\n\t\t\tthis.topOsChartLabels = topOsFamilyChartData.labels;\n\n\t\t\tthis.loadingData = false;\n\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tprivate processDeviceTypeData(deviceType: Array<AccountTechStatsDeviceTypeSummaryRec>): Array<any> {\n\t\t// Update device stats.\n\t\tlet result = [];\n\n\t\t// Map response object into custom record.\n\t\tlet totalViews = 0;\n\t\tfor(let rec of deviceType) {\n\t\t\tlet views = parseInt(rec.views, 10)\n\t\t\ttotalViews += views;\n\t\t\tlet iconClass = this.iconClassForDeviceType[rec.device_type];\n\n\t\t\tresult.push({\n\t\t\t\tname: rec.device_type_name,\n\t\t\t\tviews: views,\n\t\t\t\ticonClass: iconClass ? iconClass : '',\n\t\t\t\tbgColorHex: '',\n\t\t\t\tviews_share: 0\n\t\t\t});\n\t\t}\n\n\t\t// Update shares if possible.\n\t\tif(totalViews > 0) {\n\t\t\tfor(let rec of result) {\n\t\t\t\trec.views_share = 100.0 * rec.views / totalViews;\n\t\t\t}\n\t\t}\n\n\t\t// Sort descending by number of views.\n\t\tresult.sort(function(a, b){\n\t\t\treturn b.views - a.views;\n\t\t});\n\n\t\t// Add hex colors from ordered ChartConfigData.\n\t\t// Top 5 devices will use the same list in the same order (starting from top device).\n\t\tfor(let i=0; i < result.length; i++) {\n\t\t\tlet rgbArr = ChartConfigData.datasetColors[(i+1) % ChartConfigData.datasetColors.length];\n\t\t\tresult[i].bgColorHex = '#' + this.toHex(rgbArr[0], 2) + this.toHex(rgbArr[1], 2) + this.toHex(rgbArr[2], 2);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate toHex(i:number, minPos:number): string {\n\t\tlet result = '';\n\t\tif(i) {\n\t\t\tresult = i.toString(16);\n\t\t}\n\t\twhile(result.length < minPos) {\n\t\t\tresult = '0' + result;\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate processOsFamilyData(osFamily: Array<AccountTechStatsOsFamilySummaryRec>): Array<any> {\n\t\t// Update device stats.\n\t\tlet result = [];\n\n\t\t// Map response object into custom record.\n\t\tlet totalViews = 0;\n\t\tfor(let rec of osFamily) {\n\t\t\tlet views = parseInt(rec.views, 10)\n\t\t\ttotalViews += views;\n\n\t\t\tresult.push({\n\t\t\t\tname: rec.os_family_name,\n\t\t\t\tviews: views,\n\t\t\t\tviews_share: 0\n\t\t\t});\n\t\t}\n\n\t\t// Update shares if possible.\n\t\tif(totalViews > 0) {\n\t\t\tfor(let rec of result) {\n\t\t\t\trec.views_share = 100.0 * rec.views / totalViews;\n\t\t\t}\n\t\t}\n\n\t\t// Sort descending by number of views.\n\t\tresult.sort(function(a, b){\n\t\t\treturn b.views - a.views;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tprivate processBrowserFamilyData(browserFamily: Array<AccountTechStatsBrowserFamilySummaryRec>): Array<any> {\n\t\t// Update device stats.\n\t\tlet result = [];\n\n\t\t// Map response object into custom record.\n\t\tlet totalViews = 0;\n\t\tfor(let rec of browserFamily) {\n\t\t\tlet views = parseInt(rec.views, 10)\n\t\t\ttotalViews += views;\n\n\t\t\tresult.push({\n\t\t\t\tname: rec.browser_family_name,\n\t\t\t\tviews: views,\n\t\t\t\tviews_share: 0\n\t\t\t});\n\t\t}\n\n\t\t// Update shares if possible.\n\t\tif(totalViews > 0) {\n\t\t\tfor(let rec of result) {\n\t\t\t\trec.views_share = 100.0 * rec.views / totalViews;\n\t\t\t}\n\t\t}\n\n\t\t// Sort descending by number of views.\n\t\tresult.sort(function(a, b){\n\t\t\treturn b.views - a.views;\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tprivate buildDataStructForChartAndInitWithAccountHistory(accountHistory: Array<AccountTechStatsHistoryViewsRec>): any {\n\t\tlet result = {\n\t\t\tdata: new Array<any>(),\n\t\t\tlabels: new Array<string>()\n\t\t};\n\n\t\t// Add whole account data history.\n\t\tlet accountData = {\n\t\t\tdata: new Array<number>(),\n\t\t\tlabel: this.translation.translate('ANALYTICS_TECHNOLOGY.LABEL_TOTAL_VIEWS'),\n\t\t\tfill: false,\n\t\t\thidden: true\n\t\t};\n\t\tfor(let rec of accountHistory) {\n\t\t\taccountData.data.push(parseInt(rec.views, 10));\n\t\t\tresult.labels.push(moment.unix(rec.from).toISOString());\n\t\t}\n\t\tresult.data.push(accountData);\n\n\t\treturn result;\n\t}\n\n\tprivate processDeviceTypeDataForCharts(accountHistory: Array<AccountTechStatsHistoryViewsRec>,\n\t\ttopHistory: Array<AccountTechStatsDeviceTypeTopHistoryRec>): any {\n\t\tlet result = this.buildDataStructForChartAndInitWithAccountHistory(accountHistory);\n\n\t\t// Add top items history.\n\t\tfor(let itemHistory of topHistory) {\n\t\t\tlet itemData = {\n\t\t\t\tdata: new Array<number>(),\n\t\t\t\tlabel: itemHistory.device_type_name\n\t\t\t};\n\n\t\t\tfor(let rec of itemHistory.history) {\n\t\t\t\titemData.data.push(parseInt(rec.views, 10));\n\t\t\t}\n\n\t\t\tresult.data.push(itemData);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate processBrowserFamilyDataForCharts(accountHistory: Array<AccountTechStatsHistoryViewsRec>,\n\t\ttopHistory: Array<AccountTechStatsBrowserFamilyTopHistoryRec>): any {\n\t\tlet result = this.buildDataStructForChartAndInitWithAccountHistory(accountHistory);\n\n\t\t// Add top items history.\n\t\tfor(let itemHistory of topHistory) {\n\t\t\tlet itemData = {\n\t\t\t\tdata: new Array<number>(),\n\t\t\t\tlabel: itemHistory.browser_family_name\n\t\t\t};\n\n\t\t\tfor(let rec of itemHistory.history) {\n\t\t\t\titemData.data.push(parseInt(rec.views, 10));\n\t\t\t}\n\n\t\t\tresult.data.push(itemData);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprivate processOsFamilyDataForCharts(accountHistory: Array<AccountTechStatsHistoryViewsRec>,\n\t\ttopHistory: Array<AccountTechStatsOsFamilyTopHistoryRec>): any {\n\t\tlet result = this.buildDataStructForChartAndInitWithAccountHistory(accountHistory);\n\n\t\t// Add top items history.\n\t\tfor(let itemHistory of topHistory) {\n\t\t\tlet itemData = {\n\t\t\t\tdata: new Array<number>(),\n\t\t\t\tlabel: itemHistory.os_family_name\n\t\t\t};\n\n\t\t\tfor(let rec of itemHistory.history) {\n\t\t\t\titemData.data.push(parseInt(rec.views, 10));\n\t\t\t}\n\n\t\t\tresult.data.push(itemData);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic onDateRangeChanged(dateRange: Array<moment.Moment>) {\n\t\t// Skip data load if no change.\n\t\tif((this.startDate.unix() == dateRange[0].unix()) && (this.endDate.unix() == dateRange[1].unix())) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.startDate = dateRange[0].startOf('day');\n\t\tthis.endDate = dateRange[1].startOf('day');\n\t\tthis.user.setDateRangeSelection(this.startDate, this.endDate);\n\t\tthis.loadData(true);\n\t}\n\n\tpublic onGranularityChange(granularity: GranularityType) {\n\t\t// Skip data load if no change.\n\t\tif(this.activeGranularity == granularity) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.activeGranularity = granularity;\n\t\tthis.loadData(true);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/technology/technology.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { AnalyticsTechnologyView } from './technology.view.component';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\n\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsTechnologyView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule,\n\t],\n\tdeclarations: [\n\t\tAnalyticsTechnologyView,\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t]\n})\nexport class AnalyticsTechnologyModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/technology/technology.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport {\n\tMediaMetadata,\n\tTopStreamedMediaMetadataListResponse,\n\tTopStreamedMediaRecord,\n\tViewersNumResponse } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n\tselector: 'analytics-realtime-view',\n\ttemplate: require('./realtime.view.component.html'),\n\tstyles: [\n\t\t':host .chart-loader {height:300px;position:relative;}',\n\t\t':host .chart-tile {font-size: 1.5rem;font-weight: 400;padding-bottom: 10px;text-align:center;}',\n\t\t':host .media-list-loader {height:400px;}',\n\t\t':host #top-content-list.loading tbody tr td:last-child {opacity:0.5}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsRealtimeView extends Localization implements OnInit, OnDestroy {\n\tREFRESH_DATA_PERIOD = 1000;\n\tPAST_TIMESTAMP: number = 946684800; // Timestamp for defining \"all time\" time window beginning. \"946684800\" is 2000-01-01 00:00:00 UTC.\n\n\taudienceMinutesChart: any\n\taudienceSecondsChart: any;\n\taudienceWatchingUsersNum: number;\n\n\ttopMediaList: Array<any> | null;\n\ttopMediaListTotalLength: number | null;\n\ttopMediaListLoading: boolean;\n\tmediaMetadataByMaterialId: Map<string, any>;\n\ttopMediaListPagingOptions: any;\n\n\tselectedMediaMinutesChart: any;\n\tselectedMediaSecondsChart: any;\n\tselectedMediaMetadata: any;\n\n\tupdateDataTimer: any;\n\tupdateNum: number;\n\tdateUtil: DateUtil;\n\n\tconstructor(public locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic analyticsService: AnalyticsService,\n\t\tprivate user: UserService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tthis.audienceMinutesChart = { data:[], labels:[] };\n\t\tthis.audienceSecondsChart = { data:[], labels:[] };\n\t\tthis.audienceWatchingUsersNum = 0;\n\n\t\tthis.topMediaList = null;\n\t\tthis.topMediaListTotalLength = null;\n\t\tthis.topMediaListLoading = false;\n\t\tthis.mediaMetadataByMaterialId = new Map<string, any>();\n\t\tthis.topMediaListPagingOptions = {\n\t\t\tpage: 1,\n\t\t\tpage_size: 10\n\t\t};\n\n\t\tthis.selectedMediaMinutesChart = { data:[], labels:[] };\n\t\tthis.selectedMediaSecondsChart = { data:[], labels:[] };\n\t\tthis.selectedMediaMetadata = null;\n\n\t\tthis.updateNum = 0;\n\t\tthis.updateDataTimer = setInterval(() => this.updateData(), this.REFRESH_DATA_PERIOD);\n\t\tthis.dateUtil = DateUtil;\n\t}\n\n\tngOnInit() {\n\t\tthis.loadData();\n\t}\n\n\tngOnDestroy() {\n\t\tif(this.updateDataTimer) {\n\t\t\tclearInterval(this.updateDataTimer);\n\t\t\tthis.updateDataTimer = null;\n\t\t}\n\t}\n\n\tprivate loadData() {\n\t\tthis.audienceMinutesChart = {data:[], labels:[]};\n\t\tthis.audienceSecondsChart = {data:[], labels:[]};\n\n\t\tfor(let i=0; i < 60; i++) {\n\t\t\tthis.audienceMinutesChart.labels.push('- ' + (60 - i) + ' min');\n\t\t\tthis.audienceSecondsChart.labels.push('- ' + (60 - i) + ' sec');\n\t\t}\n\n\t\tthis.audienceMinutesChart.data.push({\n\t\t\tdata: this.generateInitialData(60),\n\t\t\tlabel: 'Watching users'\n\t\t});\n\n\t\tlet dataForSeconds = this.generateInitialData(60);\n\t\tthis.audienceSecondsChart.data.push({\n\t\t\tdata: dataForSeconds,\n\t\t\tlabel: 'Watching users'\n\t\t});\n\n\t\tthis.loadTopMediaList();\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate updateData() {\n\t\tthis.updateNum++;\n\t\tthis.updateAudienceData();\n\t\tif(this.updateNum % 10 == 0) {\n\t\t\tthis.loadTopMediaList();\n\t\t}\n\t\tthis.updateSelectedMediaStats();\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate updateAudienceData() {\n\t\tif(!this.audienceMinutesChart\n\t\t\t|| !this.audienceMinutesChart.data\n\t\t\t|| (this.audienceMinutesChart.data.length == 0)\n\t\t\t|| (this.audienceMinutesChart.data[0].data.length == 0)\n\t\t\t|| (this.audienceSecondsChart.data.length == 0)\n\t\t\t|| (this.audienceSecondsChart.data[0].data.length == 0)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.analyticsService.getRealtimeAccountViewersNum().subscribe((data: ViewersNumResponse) => {\n\t\t\tif(this.updateNum % 60 == 0) {\n\t\t\t\t// Update audienceMinutes.\n\t\t\t\tlet samples = this.audienceSecondsChart.data[0].data.slice();\n\t\t\t\tlet lastMinuteSum = 0;\n\t\t\t\tfor(let v of samples) {\n\t\t\t\t\tlastMinuteSum += v;\n\t\t\t\t}\n\t\t\t\tthis.chartPushValue(this.audienceMinutesChart, Math.ceil(lastMinuteSum / 60));\n\t\t\t}\n\n\t\t\tthis.audienceWatchingUsersNum = data.viewers_num > 0 ? data.viewers_num : 0;\n\t\t\tthis.chartPushValue(this.audienceSecondsChart, this.audienceWatchingUsersNum);\n\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tprivate updateSelectedMediaStats() {\n\t\tif(!this.selectedMediaMinutesChart\n\t\t\t|| !this.selectedMediaMetadata\n\t\t\t|| !this.selectedMediaMinutesChart.data\n\t\t\t|| (this.selectedMediaMinutesChart.data.length == 0)\n\t\t\t|| (this.selectedMediaMinutesChart.data[0].data.length == 0)\n\t\t\t|| (this.selectedMediaSecondsChart.data.length == 0)\n\t\t\t|| (this.selectedMediaSecondsChart.data[0].data.length == 0)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.analyticsService.getRealtimeMediaViewersNum(this.selectedMediaMetadata.material_id).subscribe((data: ViewersNumResponse) => {\n\t\t\tif(this.updateNum % 60 == 0) {\n\t\t\t\t// Update selected media minutes.\n\t\t\t\tlet samples = this.selectedMediaSecondsChart.data[0].data.slice();\n\t\t\t\tlet lastMinuteSum = 0;\n\t\t\t\tfor(let v of samples) {\n\t\t\t\t\tlastMinuteSum += v;\n\t\t\t\t}\n\t\t\t\tthis.chartPushValue(this.selectedMediaMinutesChart, Math.ceil(lastMinuteSum / 60));\n\t\t\t}\n\n\t\t\tlet watchingUsers = data.viewers_num > 0 ? data.viewers_num : 0;\n\t\t\tthis.chartPushValue(this.selectedMediaSecondsChart, watchingUsers);\n\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tprivate loadSelectedMediaStats() {\n\t\tthis.selectedMediaMinutesChart = {data:[], labels:[]};\n\t\tthis.selectedMediaSecondsChart = {data:[], labels:[]};\n\n\t\tfor(let i=0; i < 60; i++) {\n\t\t\tthis.selectedMediaMinutesChart.labels.push('- ' + (60 - i) + ' min');\n\t\t\tthis.selectedMediaSecondsChart.labels.push('- ' + (60 - i) + ' sec');\n\t\t}\n\n\t\tthis.selectedMediaMinutesChart.data.push({\n\t\t\tdata: this.generateInitialData(60),\n\t\t\tlabel: 'Watching users'\n\t\t});\n\n\t\tlet dataForSeconds = this.generateInitialData(60);\n\t\tthis.selectedMediaSecondsChart.data.push({\n\t\t\tdata: dataForSeconds,\n\t\t\tlabel: 'Watching users'\n\t\t});\n\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate chartPushValue(chart: any, val: number) {\n\t\tlet samples = chart.data[0].data;\n\t\tsamples.shift();\n\t\tsamples.push(val);\n\t\tchart.data =  [{\n\t\t\t\tdata: samples,\n\t\t\t\tlabel: 'Watching users'\n\t\t}];\n\t}\n\n\tprivate loadTopMediaList() {\n\t\tthis.topMediaListLoading = true;\n\n\t\tthis.analyticsService.getRealtimeTopViewedMediaMetadataList(this.topMediaListPagingOptions).subscribe((data: TopStreamedMediaMetadataListResponse) => {\n\t\t\tthis.topMediaList = data.records;\n\t\t\tthis.topMediaListTotalLength = data.total_records;\n\t\t\tthis.mediaMetadataByMaterialId = new Map<string, any>();\n\t\t\tfor(let mm of data.records) {\n\t\t\t\tthis.mediaMetadataByMaterialId.set(mm.media.material_id, mm.media);\n\t\t\t}\n\n\t\t\t// Preselect first element if data any is available and there is no selected item.\n\t\t\tif((this.selectedMediaMetadata == null) && (this.topMediaList != null) && (this.topMediaList.length > 0)) {\n\t\t\t\tthis.selectMediaMetadata(this.topMediaList[0].media.material_id);\n\t\t\t}\n\n\t\t\tthis.topMediaListLoading = false;\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tonTopMediaListPageChange(page: number): void {\n\t\tthis.topMediaListPagingOptions.page = page;\n\t\tthis.loadTopMediaList();\n\t}\n\n\tprivate isMediaMetadataSelected(material_id?: number): boolean {\n\t\treturn material_id && this.selectedMediaMetadata &&  (this.selectedMediaMetadata.material_id == material_id);\n\t}\n\n\tprivate selectMediaMetadata(materialId: string): void {\n\t\tif(this.selectedMediaMetadata && (this.selectedMediaMetadata.material_id == materialId)) {\n\t\t\t// Skip selection if mediaMetadata was not updated.\n\t\t\treturn;\n\t\t}\n\n\t\t// Select new data.\n\t\tthis.selectedMediaMetadata = this.mediaMetadataByMaterialId.get(materialId);\n\t\tthis.loadSelectedMediaStats();\n\t}\n\n\tprivate lastVal(arr: Array<number>): number {\n\t\tif(!arr || (arr.length == 0)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn arr[arr.length - 1];\n\t}\n\n\tprivate generateInitialData(len: number ): Array<any> {\n\t\tlet result = [];\n\t\tfor(let i=0; i < len; i++) {\n\t\t\tresult.push(0);\n\t\t}\n\t\treturn result;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/realtime/realtime.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { AnalyticsRealtimeView } from './realtime.view.component';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\n\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsRealtimeView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPagerModule,\n\t\tChartModule,\n\t],\n\tdeclarations: [\n\t\tAnalyticsRealtimeView,\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t]\n})\nexport class AnalyticsRealtimeModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/realtime/realtime.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\n\n\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport {\n\tMediaMetadata,\n\tTopStreamedMediaMetadataListResponse,\n\tTopStreamedMediaRecord,\n\tViewersNumResponse } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n\tselector: 'qos-view',\n\ttemplate: require('./QOS.view.component.html'),\n\tstyles: [\n\t\t':host .chart-loader {height:300px;position:relative;}',\n\t\t':host .chart-tile {font-size: 1.5rem;font-weight: 400;padding-bottom: 10px;text-align:center;}',\n\t\t':host .media-list-loader {height:400px;}',\n\t\t':host #top-content-list.loading tbody tr td:last-child {opacity:0.5}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QOSView extends Localization implements OnInit, OnDestroy {\n\n\txLabels : string[];\n\tstackedData: any;\n\n\tcharts: any[];\n\n\tpreviewHistoryStats: any;\n\tpreviewFilledStats: any;\n\n\tconstructor(\n\t\tpublic chartService: UsersAndViewsVsTimeService,\n\t\tpublic mediaAnalyticsService: MediaService,\n\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate user: UserService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\t\t/*\n\t\tdatasetColors: [\n\t\t\t[52, 152, 219],\n\t\t\t[46, 204, 103],\n\t\t\t[230, 126, 34],\n\t\t\t[155, 89, 18],\n\t\t\t[231, 76, 60],\n\t\t\t[182, 132, 209],\n\t\t\t[56, 104, 123],\n\t\t\t[200, 166, 44],\n\t\t\t[115, 109, 48],\n\t\t\t[241, 86, 70]\n\t\t\t]\n\t\t */\n\t\tthis.stackedData = {\n\t\t\tsum: 62, data: [\n\t\t\t\t{ value: 10, color: 'rgb(157, 141, 241)', key: 'Startup time'},\n\t\t\t\t{ value: 15, color: 'rgb(7, 160, 112)', key: 'Rebuffering'},\n\t\t\t\t{ value: 7, color: 'rgb(130, 2, 99)', key: 'Advertisment'},\n\t\t\t\t{ value: 30, color: 'rgb(255, 99, 146)', key: 'Playing'}\n\t\t\t]\n\t\t};\n\n\t\tthis.previewHistoryStats = null;\n\t\tthis.previewFilledStats = null;\n\n\t\tthis.charts = [\n\t\t\t{topic:'Failrue'},\n\t\t\t{topic:'Startup'},\n\t\t\t{topic:'Rebuffer'},\n\t\t\t{topic:'Quality'}\n\t\t];\n\t}\n\n\tngOnInit() {\n\t\tthis.loadMockData()\n\t}\n\n\tngOnDestroy() {\n\t}\n\n\tloadMockData(){\n\t\tlet endDate = moment().startOf('day');\n\t\tlet startDate = endDate.clone().subtract(30, 'days');\n\n\t\tthis.mediaAnalyticsService.getMediaViewsHistory(\n\t\t\t'MEDIA_ID_1', startDate, endDate, 'day')\n\t\t\t\t.subscribe((data: any) => {\n\t\t\t\tdata.data.label = 'label';\n\t\t\t\tdata.data.fill = false;\n\n\t\t\t\tthis.previewHistoryStats = {\n\t\t\t\t\tdata: [data.data],\n\t\t\t\t\tlabels: data.labels,\n\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\tendDate: endDate,\n\t\t\t\t\tchartType: 'lineTime',\n\t\t\t\t\tgranularity: 'day'\n\t\t\t\t};\n\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/QOS/QOS.view.component.ts","import { Component, OnInit, Input } from '@angular/core';\n\n\n@Component({\n\tselector: 'horizontal-stacked-chart',\n\ttemplate: `\n\t<style type=\"text/css\">\n\n\t\tspan.bar {\n\t\t  display: inline-block;\n\t\t  height: 200px;\n\t\t  border-radius: 0px;\n\t\t  border: 0px;\n\t\t  -moz-border-radius: 0px;\n\t\t  margin-left: -3px;\n\t\t  margin-right: 0px;\n\t\t  padding: 0;\n\t\t  text-align: right;\n\t\t  color: #555555;\n\t\t  font-family: inherit;\n\t\t  vertical-align: bottom;\n\t\t  white-space: nowrap;\n\t\t}\n\t\t\n\t\t.line{\n\t\t  display: inline-block;\n\t\t  width: 100%;\n\t\t  height: 10px;\n\t\t  border-top: 1px solid black;\n\t\t  position: relative;\n\t\t  padding: 0;\n\t\t  margin-left: -3px;\n\t\t  margin-right: 0px;\n\t\t  }\n\n\t\t.minor {\n\t\t  display: inline-block;\n\t\t  width: 1px;\n\t\t  height: 5px;\n\t\t  border-left: 1px solid black;\n\t\t  position: relative;\n\t\t  margin-left: -3px;\n\t\t  margin-right: 0px;\n\t\t  padding: 0;\n\t\t  vertical-align: top;\n\n\t\t  }\n\t\t\n\t\t\n\t\t.key{\n\t\t  display: inline-block;\n\t\t  width: 40px;\n\t\t  height: 20px;\n\t\t  border-radius: 3px;\n\t\t  -moz-border-radius: 3px;\n\t\t  margin: 0px 0px 0px 0px;\n\t\t  padding: 0;\n\t\t  vertical-align: middle;\n\t\t}\n\n\t</style>\n\n\t<!-- bars -->\n\t<div>\n\t\t<span *ngFor=\"let data of dataset.data\">\n\t\t  <span class=\"bar\" [ngStyle]=\"{'width' : data.value/dataset.sum *100 + '%', 'background' : data.color }\" > </span>\n\t\t</span>\n\t</div>\n\n\t<!-- value display -->\n\t<div>\n\t\t<span *ngFor=\"let data of dataset.data\">\n\t\t  <span class=\"bar\" [ngStyle]=\"{'width' : data.value/dataset.sum *100 + '%', 'background' : 'white', 'height' : '20px' }\"> \n\t\t\t{{data.value/dataset.sum *100 | number:'1.0-0' }} % \n\t\t  </span>\n\t\t</span>\n\t</div>\n\n\t<!-- xAxis -->\n\t<div class=\"minor\"></div>\n\t<span *ngFor=\"let label of xLabels\">\n\t  <div class=\"line\" style=\"width:10%\"></div>\n\t  <div class=\"minor\"></div>\n\t</span>\t\n\t<div class=\"line\" style=\"width:10px\"></div>\n\n\n\t<!-- key -->\n\t<div>\n\t  <span *ngFor=\"let data of dataset.data\">\n\t\t<span class = \"key\" [ngStyle]=\"{'background': data.color}\"></span>\n\t\t  <span> {{data.key}} ({{data.value/dataset.sum *100 | number:'1.0-2' }} %)</span>\n\t  </span>\n\t</div>\n  `\n})\nexport class HorizontalStackedChartComponent implements OnInit {\n\t/*@Input()*/ xLabels: any;\n\t@Input() dataset: any;\n\n\n\tconstructor() {\n\t  this.xLabels = ['10%','20%','30%','40%','50%','60%','70%','80%','90%'];\n\t }\n\n\tngOnInit() { }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/component/charts/stackedhorizontalchart.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { QOSView } from './QOS.view.component';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\nimport { HorizontalStackedChartComponent } from '../component/charts/stackedhorizontalchart.component';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { MediaService } from '../../../service/analytics/media.service';\n\nexport const routes: Routes = [\n\t{ path: '', component: QOSView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPagerModule,\n\t\tChartModule,\n\t],\n\tdeclarations: [\n\t\tQOSView,\n\t\tHorizontalStackedChartComponent\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tUsersAndViewsVsTimeService,\n\t\tMediaService\n\t]\n})\nexport class AnalyticsQOSModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/QOS/QOS.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\n\n\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport {\n    MediaMetadata,\n    TopStreamedMediaMetadataListResponse,\n    TopStreamedMediaRecord,\n    ViewersNumResponse } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n    selector: 'playback-experience-list-view',\n    template: require('./playback-experience.list.view.component.html'),\n    styles: [\n        ':host .chart-loader {height:300px;position:relative;}',\n        ':host .chart-tile {font-size: 1.5rem;font-weight: 400;padding-bottom: 10px;text-align:center;}',\n        ':host .media-list-loader {height:400px;}',\n        ':host #top-content-list.loading tbody tr td:last-child {opacity:0.5}',\n        ':host .uuid {overflow: hidden;width: 100px;text-overflow: ellipsis;white-space: nowrap;display: inline-block;}',\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaybackExperienceListView extends Localization {\n\n    searchOptions: any;\n    columnsAverage: any;\n    playbacks: any[];\n    playbacksDb: any[];\n    dateUtil: DateUtil;\n\n    constructor(\n        public chartService: UsersAndViewsVsTimeService,\n        public mediaAnalyticsService: MediaService,\n\n        public locale: LocaleService,\n        public translation: TranslationService,\n        private user: UserService,\n        private cdr: ChangeDetectorRef) {\n        super(locale, translation);\n\n        // Making alias for view.\n        this.dateUtil = DateUtil;\n\n        this.playbacksDb = this.generateMockData();\n        this.searchOptions = {\n                text: null,\n                sort_by: null,\n                sort_dir: 'asc',\n                page: 1,\n                page_size: 20,\n                total: this.playbacksDb.length,\n            };\n        this.columnsAverage = {\n                duration: null,\n                media_duration: null,\n                playback_coverage: null\n        };\n        this.loadMockData();\n    }\n\n    generateMockData() {\n        let mediaList = [\n            {type:\"live\", id:\"4091451\", title:\"TV 2\", duration: null},\n            {type:\"live\", id:\"5366309\", title:\"TV6\", duration: null},\n            {type:\"live\", id:\"4091449\", title:\"TV4 HD\", duration: null},\n            {type:\"live\", id:\"4091452\", title:\"TV 2\", duration: null},\n            {type:\"live\", id:\"5366278\", title:\"TV3\", duration: null},\n            {type:\"live\", id:\"4158956\", title:\"NRK1\", duration: null},\n            {type:\"live\", id:\"4091441\", title:\"SVT1 HD\", duration: null},\n            {type:\"live\", id:\"4091423\", title:\"DR1\", duration: null},\n            {type:\"vod\", id:\"8249858\", title:\"Infinite\", duration: 6116.72021484375},\n            {type:\"vod\", id:\"8418807\", title:\"Yellowstone S04/E01\", duration: 3327.15991210938},\n            {type:\"vod\", id:\"8525981\", title:\"1883 S01/E01\", duration: 3843.43994140625},\n            {type:\"vod\", id:\"8442655\", title:\"Yellowstone S04/E05\", duration: 2637.43994140625},\n            {type:\"vod\", id:\"8418809\", title:\"Yellowstone S04/E02\", duration: 2850.32006835938},\n            {type:\"vod\", id:\"8429791\", title:\"Yellowstone S04/E04\", duration: 2865.80004882812},\n            {type:\"vod\", id:\"8418810\", title:\"Yellowstone S04/E03\", duration: 2740.60009765625},\n            {type:\"vod\", id:\"8507248\", title:\"Yellowstone S04/E10\", duration: 4379.2001953125},\n            {type:\"vod\", id:\"8466254\", title:\"Yellowstone S04/E09\", duration: 3293.0400390625},\n            {type:\"vod\", id:\"8442656\", title:\"Yellowstone S04/E06\", duration: 2819.36010742188},\n            {type:\"vod\", id:\"8466253\", title:\"Yellowstone S04/E07\", duration: 3189.39990234375},\n            {type:\"vod\", id:\"8525978\", title:\"1883 S01/E02\", duration: 3396.23999023438},\n            {type:\"vod\", id:\"8496715\", title:\"Yellowstone S04/E08\", duration: 2627.0400390625},\n            {type:\"vod\", id:\"8549832\", title:\"Beck - Rage Room (44)\", duration: 5387.1201171875},\n            {type:\"vod\", id:\"8547415\", title:\"1883 S01/E04\", duration: 3140.23999023438},\n            {type:\"vod\", id:\"8525979\", title:\"1883 S01/E03\", duration: 2491.15991210938},\n            {type:\"vod\", id:\"5977031\", title:\"Jack Reacher: Never Go Back\", duration: 6775.759765625},\n            {type:\"vod\", id:\"8354842\", title:\"Suedi\", duration: 5377.9599609375},\n            {type:\"vod\", id:\"8347434\", title:\"Furia S01/E01\", duration: 2969.0400390625},\n            {type:\"vod\", id:\"8418806\", title:\"Dexter: New Blood S01/E01\", duration: 3296.80004882812},\n            {type:\"vod\", id:\"8459016\", title:\"Final Target\", duration: 5573.27978515625},\n            {type:\"vod\", id:\"8426043\", title:\"Knutby S01/E03\", duration: 2587.1201171875},\n            {type:\"vod\", id:\"8413500\", title:\"Dune (2020)\", duration: 8939.9599609375},\n            {type:\"vod\", id:\"8161235\", title:\"Hummingbird\", duration: 5757.39990234375},\n            {type:\"vod\", id:\"8305424\", title:\"Threesome S01/E01\", duration: 1476.23999023438},\n            {type:\"vod\", id:\"7722746\", title:\"Yellowstone S03/E10\", duration: 2744.56005859375},\n            {type:\"vod\", id:\"8186292\", title:\"13 Hours: The Secret Soldiers of Benghazi\", duration: 8310.16015625},\n            {type:\"vod\", id:\"8381809\", title:\"Solsidan - onnea onkimassa S07/E01\", duration: 1330.11999511719},\n            {type:\"vod\", id:\"8409850\", title:\"Knutby S01/E01\", duration: 2522.080078125},\n            {type:\"vod\", id:\"8356620\", title:\"The Operative\", duration: 6717.1201171875},\n            {type:\"vod\", id:\"7214745\", title:\"Avengement\", duration: 5052.43994140625},\n            {type:\"vod\", id:\"8291007\", title:\"A Quiet Place Part II\", duration: 5585.60009765625},\n            {type:\"vod\", id:\"8291006\", title:\"The Gentlemen\", duration: 6510.64013671875},\n            {type:\"vod\", id:\"8325351\", title:\"American Rust S01/E01\", duration: 3635.8798828125},\n            {type:\"vod\", id:\"8163060\", title:\"Parker\", duration: 6828.080078125},\n        ];\n\n        let usersUuids = [];\n        for(let i=0; i < 479; i++) {\n            usersUuids.push(this.generateUuid());\n        }\n\n       let envs = this.generateEnvs();\n\n        let startTime = Math.floor((new Date()).getTime() / 1000.0);\n        let result = [];\n        for(let i=0; i < 7177; i++) {\n            let userPos = (i * 5701) % usersUuids.length;\n            let env =envs[userPos % envs.length];\n            let playbackRatio = (env.device_type == 'PC') ? 1.0 : 0.67;\n            let media = mediaList[ (i * 113) % mediaList.length];\n            let watchDuration = playbackRatio * (Math.random() * 1000 + Math.random() * 100 + Math.random() * 40);\n            let coverageStr = '-';\n            if(media.duration > 0) {\n                let coverage = playbackRatio * Math.random()\n                watchDuration =  coverage * media.duration;\n                coverageStr = (coverage * 100.0).toFixed(2)\n            }\n            result.push({\n                playback_id: this.generateUuid(),\n                user_id: usersUuids[userPos],\n                start_time: startTime,\n                duration: watchDuration,\n                media_type: media.type,\n                media_id: media.id,\n                media_title: media.title,\n                media_duration: media.duration,\n                playback_coverage: coverageStr,\n                device_type: env.device_type,\n                device_browser: env.device_browser,\n                device_os: env.device_os,\n                isp: env.isp,\n                cdn: env.cdn,\n            });\n\n            startTime -= Math.floor(100 * Math.random());\n        }\n        return result;\n    }\n\n    generateEnvs() {\n        let envs = [];\n        envs.push({device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 11', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'INEA', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 11', isp: 'INEA', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-2'});\n        envs.push({device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-2'});\n        envs.push({device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 11', isp: 'Netia', cdn: 'AWS-2'});\n        envs.push({device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'INEA', cdn: 'AWS-2'});\n\n        envs.push({device_type: 'PC', device_browser: 'Safari', device_os: 'MacOS', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Safari', device_os: 'MacOS', isp: 'INEA', cdn: 'AWS-2'});\n\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Play', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 10', isp: 'Play', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'Play', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Play', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Play', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Play', cdn: 'AWS-1'});\n\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Orange', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 11', isp: 'Orange', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'Orange', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Orange', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Orange', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Orange', cdn: 'AWS-1'});\n\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'T-Mobile', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 11', isp: 'T-Mobile', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'T-Mobile', cdn: 'AWS-1'});\n\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 10', isp: 'Netia', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'INEA', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Vectra', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Vectra', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Netia', cdn: 'AWS-1'});\n        return envs;\n    }\n\n    generateUuid() {\n        return 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function(c) {\n            return Math.floor(Math.random() * 16).toString(16);\n        });\n    }\n\n    loadMockData(){\n        // Filtering\n        let res =  this.playbacksDb.slice();\n        if(this.searchOptions.text) {\n            let text = this.searchOptions.text.toLowerCase();\n            res = [];\n            for(var pos=0; pos < this.playbacksDb.length; pos++) {\n                let rec = this.playbacksDb[pos];\n                for(var k in rec) {\n                    if((rec[k]+'').toLowerCase().indexOf(text) !== -1) {\n                        res.push(rec);\n                    }\n                }\n            }\n        }\n        this.searchOptions.total = res.length;\n\n        // Update averages\n        let duration_total = 0;\n        let duration_count = 0;\n        let media_duration_total = 0;\n        let media_duration_count = 0;\n        let playback_coverage_total = 0;\n        let playback_coverage_count = 0;\n        for(var pos=0; pos < res.length; pos++) {\n            let rec = res[pos];\n            if(rec.duration) {\n                duration_total += rec.duration;\n                duration_count += 1;\n            }\n            if(rec.media_duration) {\n                media_duration_total += rec.media_duration;\n                media_duration_count += 1;\n            }\n            if(rec.playback_coverage && parseFloat(rec.playback_coverage)) {\n                playback_coverage_total += parseFloat(rec.playback_coverage);\n                playback_coverage_count += 1;\n            }\n        }\n        this.columnsAverage = {\n                duration: (duration_count ? duration_total/duration_count : null),\n                media_duration: (media_duration_count ? media_duration_total / media_duration_count : null),\n                playback_coverage: (playback_coverage_count ? (playback_coverage_total / playback_coverage_count).toFixed(2) : '-')\n        };\n\n        // Sorting\n        if(this.searchOptions.sort_by) {\n            var sort_by = this.searchOptions.sort_by;\n            let cmp = function(a:any, b:any) {\n                if(a[sort_by] < b[sort_by]) {\n                    return -1;\n                } else if(a[sort_by] > b[sort_by]) {\n                    return 1;\n                }\n                return 0;\n            };\n            if(this.searchOptions.sort_dir != 'asc') {\n                cmp = function(a:any, b:any) {\n                    if(a[sort_by] < b[sort_by]) {\n                        return 1;\n                    } else if(a[sort_by] > b[sort_by]) {\n                        return -1;\n                    }\n                    return 0;\n                };\n            }\n            res.sort(cmp);\n        }\n\n        // Paging\n        let pageSize = this.searchOptions.page_size;\n        let pageIdx = (this.searchOptions .page - 1) * pageSize;\n        this.playbacks = res.slice(pageIdx, pageIdx + pageSize);\n    }\n\n    onSearchKeyPress(e: any): void {\n        let code: number = e.keyCode || e.which;\n        if(code == 13) {\n            // Enter pressed - perform search.\n            this.searchOptions.page = 1;\n            this.loadMockData();\n        }\n    }\n\n    onColumnHeaderClick(columnName: string): void {\n        if(this.searchOptions.sort_by == columnName) {\n            // Toggle sort direction.\n            this.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n        } else {\n            // Change sort column.\n            this.searchOptions.sort_by = columnName;\n            this.searchOptions.sort_dir = 'asc';\n        }\n\n        this.searchOptions.page = 1;\n        this.loadMockData();\n    }\n\n    onPageChanged(page: number): void {\n        this.searchOptions.page = page;\n        this.loadMockData();\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/playback-experience/playback-experience.list.view.component.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\n\n\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport {\n    MediaMetadata,\n    TopStreamedMediaMetadataListResponse,\n    TopStreamedMediaRecord,\n    ViewersNumResponse } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n    selector: 'playback-experience-details-view',\n    template: require('./playback-experience.details.view.component.html'),\n    styles: [\n        ':host .chart-loader {height:200px;position:relative;}',\n        ':host .chart-tile {font-size: 1.5rem;font-weight: 400;padding-bottom: 10px;text-align:center;}',\n        ':host #top-content-list.loading tbody tr td:last-child {opacity:0.5}',\n        ':host .playback-history .activity {display:inline-block;width:30%;}',\n        ':host .playback-history .vt {display:inline-block;width:10%;}',\n        ':host .playback-history .wt {display:inline-block;width:15%;}',\n        ':host .playback-history .d {display:inline-block;width:15%;}',\n        ':host .playback-history .kbps {display:inline-block;width:20%;}',\n        ':host .playback-history .header {font-weight:bold;background-color:#242a30;color:#fff;}',\n        ':host .playback-history .items {height:420px;overflow-y:scroll;}',\n        ':host .playback-history .item {color:#fff;border-top:solid 1px #e2e7eb;border-left:solid 1px #e2e7eb;border-right:solid 1px #e2e7eb;text-align:center;line-height:30px;}',\n        ':host .playback-history .item:last-child {border-bottom:solid 1px #e2e7eb;}',\n        ':host ::ng-deep .bitrate-histogram .canvas-wrapper {max-width:400px;margin-left: auto;margin-right: auto;}',\n    ],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlaybackExperienceDetailsView extends Localization implements OnInit, OnDestroy {\n\n    bitrateHistogramData: any;\n    bitrateHistogramLabels: any;\n    playbackHistory: any;\n    dateUtil: DateUtil;\n    playbackStartDate: Date;\n\n    constructor(\n        public chartService: UsersAndViewsVsTimeService,\n        public mediaAnalyticsService: MediaService,\n\n        public locale: LocaleService,\n        public translation: TranslationService,\n        private user: UserService,\n        private cdr: ChangeDetectorRef) {\n        super(locale, translation);\n\n        // Making alias for view.\n        this.dateUtil = DateUtil;\n        this.playbackStartDate = new Date(1643819651000); // 2022-02-02 17:34:11\n\n        this.bitrateHistogramLabels = ['493 kbps', '762 kbps', '1154 kbps', '1532 kbps', '2127 kbps', '2873 kbps', '3841 kbps'];\n        this.bitrateHistogramData = [{label:'Played bitrate [%]', data: [3.57, 7.14, 10.71, 10.71, 42.85, 21.42,3.57 ]}];\n        this.playbackHistory = [\n             {type: 'Initial buffering', vt: '00:00.0', d: 3.6, avgkbps: 912, class:'bg-grey', icon:'fa-spinner'},\n             {type: 'Playing', vt: '00:00.0', d: 4.5, avgkbps: 1718, class:'bg-green', icon:'fa-play-circle'},\n             {type: 'Seeking', vt: '00:04.5', d: 2.2, avgkbps: 879, class:'bg-grey', icon:'fa-spinner'},\n             {type: 'Playing', vt: '00:40.1', d: 1.2, avgkbps: 1663, class:'bg-green', icon:'fa-play-circle'},\n             {type: 'Seeking', vt: '00:41.3', d: 1.6, avgkbps: 945, class:'bg-grey', icon:'fa-spinner'},\n             {type: 'Playing', vt: '01:14.7', d: 646.5, avgkbps: 2214, class:'bg-green', icon:'fa-play-circle'},\n             {type: 'Paused', vt: '12:01.2', d: 67.1, avgkbps: 2214, class:'bg-blue', icon:'fa-pause-circle'},\n             {type: 'Playing', vt: '12:01.2', d: 1.3, avgkbps: 1760, class:'bg-green', icon:'fa-play-circle'},\n             {type: 'Seeking', vt: '12:02.7', d: 2.6, avgkbps:873, class:'bg-grey', icon:'fa-spinner'},\n             {type: 'Playing', vt: '11:32.7', d: 1419.3, avgkbps: 2311, class:'bg-green', icon:'fa-play-circle'},\n             {type: 'End', vt: '35:23.7', d: 0, avgkbps: 0, class:'bg-black', icon:'fa-stop-circle'},\n        ];\n        let walltime = 0;\n        for(let item of this.playbackHistory) {\n            walltime += item.d;\n            item.wt = this.formatWallTime(new Date(this.playbackStartDate.getTime() + walltime * 1000.0));\n        }\n    }\n\n    formatWallTime(wt: Date) {\n        return DateUtil.addLeadZeroes(''+wt.getHours()) + ':' + DateUtil.addLeadZeroes(''+wt.getMinutes()) + ':' + DateUtil.addLeadZeroes(''+wt.getSeconds()) + '.' + Math.floor(wt.getMilliseconds() / 100);\n    }\n\n\n    ngOnInit() {\n    }\n\n    ngOnDestroy() {\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/playback-experience/playback-experience.details.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { PlaybackExperienceListView } from './playback-experience.list.view.component';\nimport { PlaybackExperienceDetailsView } from './playback-experience.details.view.component';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { MediaService } from '../../../service/analytics/media.service';\n\nexport const routes: Routes = [\n\t{ path: '', component: PlaybackExperienceListView },\n\t{ path: 'playback', component: PlaybackExperienceDetailsView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPagerModule,\n\t\tChartModule,\n\t],\n\tdeclarations: [\n\t\tPlaybackExperienceListView,\n\t\tPlaybackExperienceDetailsView\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tUsersAndViewsVsTimeService,\n\t\tMediaService\n\t]\n})\nexport class AnalyticsPlaybackExperienceModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/playback-experience/playback-experience.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\n\n\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport {\n    MediaMetadata,\n    TopStreamedMediaMetadataListResponse,\n    TopStreamedMediaRecord,\n    ViewersNumResponse } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n    selector: 'errors-view',\n    template: require('./errors.view.component.html'),\n    styles: [require('./errors.view.component.scss')],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ErrorsView extends Localization {\n\n    searchOptions: any;\n    errors: any[];\n    errorsDb: any[];\n    dateUtil: DateUtil;\n    errorsHistoryData: any[];\n    errorsHistoryLabels: any[];\n    errorsGroupedData: any[];\n    errorsGroupedLabels: any[];\n    groupedByDropdown: any[];\n    selectedError: any;\n\n    filterDropdownOs: Array<any>;\n    filterDropdownBrowser: Array<any>;\n    filterDropdownDevice: Array<any>;\n    filterDropdownTags: Array<any>;\n    filterDropdownAppVersion: Array<any>;\n    filterDropdownPlayer: Array<any>;\n\n    filterDropdownIsp: Array<any>;\n    filterDropdownCdn: Array<any>;\n\n    constructor(\n        public chartService: UsersAndViewsVsTimeService,\n        public mediaAnalyticsService: MediaService,\n\n        public locale: LocaleService,\n        public translation: TranslationService,\n        private user: UserService,\n        private cdr: ChangeDetectorRef) {\n        super(locale, translation);\n\n        // Making alias for view.\n        this.dateUtil = DateUtil;\n\n        // Filters\n        this.filterDropdownOs = [{value: 0, label: 'Windows, MacOS'}, {value: 1, label: 'Windows', markSelected:true}, {value: 2, label: 'Android'}, {value: 3, label: 'iOS'}, {value: 4, label: 'MacOS', markSelected:true},{value: 5, label: 'Linux'}, {value: 6, label: 'Windows Phone'}, {value: 7, label: 'Chrome OS'}, {value: 8, label: 'BlackBerry'}];\n        this.filterDropdownBrowser = [{value: 0, label: 'Chrome, Firefox'}, {value: 1, label: 'Chrome', markSelected:true},{value: 2, label: 'Firefox', markSelected:true},{value: 3, label: 'Safari'},{value: 4, label: 'IE'},{value: 5, label: 'Samsung Internet'},{value: 6, label: 'Opera'},{value: 7, label: 'Edge'},{value: 8, label: '(unknown)'},{value: 9, label: 'Vivaldi'},{value: 10, label: 'Chromium'},{value: 11, label: 'Android'},{value: 12, label: 'Maxthon'},{value: 13, label: 'Pale Moon'},{value: 14, label: 'Puffin'},{value: 15, label: 'BlackBerry'},{value: 16, label: 'UC Browser'},{value: 17, label: 'Nokia'}];\n        this.filterDropdownDevice = [{value: 0, label: 'Desktop'}, {value: 1, label: 'Desktop', markSelected:true}, {value: 2, label: 'Mobile'}];\n        this.filterDropdownTags = [{value: 0, label: 'technology, entertainment'}, {value:1, label:'technology', markSelected:true}, {value:2, label:'science'}, {value:3, label:'global issues'}, {value:4, label:'design'}, {value:5, label:'business'}, {value:6, label:'culture'}, {value:7, label:'entertainment', markSelected:true}, {value:8, label:'health'}, {value:9, label:'biology'}, {value:10, label:'creativity'}, {value:11, label:'environment'}, {value:12, label:'art'}, {value:13, label:'TEDx'}, {value:14, label:'music'}, {value:15, label:'medicine'}, {value:16, label:'economics'}, {value:17, label:'politics'}, {value:18, label:'performance'}, {value:19, label:'psychology'}, {value:20, label:'life'}];\n        this.filterDropdownAppVersion = [{value: 0, label: '1.12.11'}, {value: 1, label: '1.12.11', markSelected:true}, {value: 2, label: '1.0.1'}, {value: 3, label: '1.1.9'}, {value: 4, label: '1.7.11'}];\n        this.filterDropdownPlayer = [{value: 0, label: 'Video.js'}, {value: 1, label: 'Video.js', markSelected:true},{value: 2, label: 'ExoPlayer'},{value: 3, label: 'Bradmax iOS'}];\n        this.filterDropdownIsp = [{value: 0, label: 'UPC Polska'}, {value: 1, label: 'UPC Polska', markSelected:true}, {value: 2, label: 'Vectra Broadband'}, {value: 3, label: 'Multimedia Polska S.A.'}, {value: 4, label: 'Orange Polska'}, {value: 5, label: 'T-mobile Polska'}, {value: 6, label: 'Orange Mobile'}, {value: 7, label: 'Netia SA'}, {value: 8, label: 'Play'}, {value: 9, label: 'Plus'}, {value: 10, label: 'Cyfrowy Polsat'}];\n        this.filterDropdownCdn = [{value: 0, label: 'AWS, Akamai'},{value: 1, label: 'AWS', markSelected:true}, {value: 2, label: 'Akamai', markSelected:true}, {value: 3, label: 'CDN77'}, , {value: 4, label: 'Azure'}];\n\n        // Errors history\n        this.errorsHistoryData = [\n              {data: [], label: 'Errors'}\n         ];\n        this.errorsHistoryLabels = [];\n        // Round now to hour\n        let now = new Date();\n        now.setMinutes(0);\n        now.setSeconds(0);\n        now.setMilliseconds(0);\n        let startDate = new Date(now.getTime() - 3*24*3600*1000)\n        let errors72hNorm = [12, 6, 4, 3, 3, 4, 7, 10, 12, 13, 12, 13, 16, 21, 20, 18, 23, 32, 44, 52, 54, 52, 41, 26, 12, 6, 4, 3, 3, 4, 7, 11, 16, 19, 23, 20, 18, 21, 21, 21, 25, 32, 44, 51, 54, 54, 44, 24, 13, 6, 4, 3, 3, 6, 9, 12, 15, 17, 16, 17, 28, 33, 28, 29, 29, 35, 43, 51, 52, 59, 47, 33];\n        for(let i=0; i < errors72hNorm.length; i++) {\n            let posWithOffset = (i + (startDate.getHours() - 1)) % errors72hNorm.length;\n            this.errorsHistoryData[0].data.push(errors72hNorm[posWithOffset]);\n            let d = new Date(startDate.getTime() + i * 3600 * 1000);\n            this.errorsHistoryLabels.push(d.toISOString());\n        }\n\n        // Errors grouped.\n        this.errorsGroupedData = [\n              {data: [40.0, 32.0, 28.00], label: 'By CDN'}\n        ];\n        this.errorsGroupedLabels = [\n                'AWS-1', 'AWS-2', 'CDN77'\n        ];\n        this.groupedByDropdown =  [{value: 0, label: 'CDN', markSelected:true}, {value: 1, label: 'OS'}, {value: 2, label: 'Browser'}, {value: 3, label: 'Device'}, {value: 4, label: 'AppVersion'}, {value: 5, label: 'Player' },{value: 6, label: 'IPS'}];\n\n        this.errorsDb = this.generateMockData();\n        this.searchOptions = {\n                text: null,\n                sort_by: null,\n                sort_dir: 'asc',\n                page: 1,\n                page_size: 20,\n                total: this.errorsDb.length,\n                startDate: moment(startDate),\n                endDate: moment(now)\n            };\n        this.loadMockData();\n    }\n\n    generateMockData() {\n        let mediaList = [\n            {type:\"live\", id:\"4091451\", title:\"TV 2\", duration: null},\n            {type:\"live\", id:\"5366309\", title:\"TV6\", duration: null},\n            {type:\"live\", id:\"4091449\", title:\"TV4 HD\", duration: null},\n            {type:\"live\", id:\"4091452\", title:\"TV 2\", duration: null},\n            {type:\"live\", id:\"5366278\", title:\"TV3\", duration: null},\n            {type:\"live\", id:\"4158956\", title:\"NRK1\", duration: null},\n            {type:\"live\", id:\"4091441\", title:\"SVT1 HD\", duration: null},\n            {type:\"live\", id:\"4091423\", title:\"DR1\", duration: null},\n            {type:\"vod\", id:\"8249858\", title:\"Infinite\", duration: 6116.72021484375},\n            {type:\"vod\", id:\"8418807\", title:\"Yellowstone S04/E01\", duration: 3327.15991210938},\n            {type:\"vod\", id:\"8525981\", title:\"1883 S01/E01\", duration: 3843.43994140625},\n            {type:\"vod\", id:\"8442655\", title:\"Yellowstone S04/E05\", duration: 2637.43994140625},\n            {type:\"vod\", id:\"8418809\", title:\"Yellowstone S04/E02\", duration: 2850.32006835938},\n            {type:\"vod\", id:\"8429791\", title:\"Yellowstone S04/E04\", duration: 2865.80004882812},\n            {type:\"vod\", id:\"8418810\", title:\"Yellowstone S04/E03\", duration: 2740.60009765625},\n            {type:\"vod\", id:\"8507248\", title:\"Yellowstone S04/E10\", duration: 4379.2001953125},\n            {type:\"vod\", id:\"8466254\", title:\"Yellowstone S04/E09\", duration: 3293.0400390625},\n            {type:\"vod\", id:\"8442656\", title:\"Yellowstone S04/E06\", duration: 2819.36010742188},\n            {type:\"vod\", id:\"8466253\", title:\"Yellowstone S04/E07\", duration: 3189.39990234375},\n            {type:\"vod\", id:\"8525978\", title:\"1883 S01/E02\", duration: 3396.23999023438},\n            {type:\"vod\", id:\"8496715\", title:\"Yellowstone S04/E08\", duration: 2627.0400390625},\n            {type:\"vod\", id:\"8549832\", title:\"Beck - Rage Room (44)\", duration: 5387.1201171875},\n            {type:\"vod\", id:\"8547415\", title:\"1883 S01/E04\", duration: 3140.23999023438},\n            {type:\"vod\", id:\"8525979\", title:\"1883 S01/E03\", duration: 2491.15991210938},\n            {type:\"vod\", id:\"5977031\", title:\"Jack Reacher: Never Go Back\", duration: 6775.759765625},\n            {type:\"vod\", id:\"8354842\", title:\"Suedi\", duration: 5377.9599609375},\n            {type:\"vod\", id:\"8347434\", title:\"Furia S01/E01\", duration: 2969.0400390625},\n            {type:\"vod\", id:\"8418806\", title:\"Dexter: New Blood S01/E01\", duration: 3296.80004882812},\n            {type:\"vod\", id:\"8459016\", title:\"Final Target\", duration: 5573.27978515625},\n            {type:\"vod\", id:\"8426043\", title:\"Knutby S01/E03\", duration: 2587.1201171875},\n            {type:\"vod\", id:\"8413500\", title:\"Dune (2020)\", duration: 8939.9599609375},\n            {type:\"vod\", id:\"8161235\", title:\"Hummingbird\", duration: 5757.39990234375},\n            {type:\"vod\", id:\"8305424\", title:\"Threesome S01/E01\", duration: 1476.23999023438},\n            {type:\"vod\", id:\"7722746\", title:\"Yellowstone S03/E10\", duration: 2744.56005859375},\n            {type:\"vod\", id:\"8186292\", title:\"13 Hours: The Secret Soldiers of Benghazi\", duration: 8310.16015625},\n            {type:\"vod\", id:\"8381809\", title:\"Solsidan - onnea onkimassa S07/E01\", duration: 1330.11999511719},\n            {type:\"vod\", id:\"8409850\", title:\"Knutby S01/E01\", duration: 2522.080078125},\n            {type:\"vod\", id:\"8356620\", title:\"The Operative\", duration: 6717.1201171875},\n            {type:\"vod\", id:\"7214745\", title:\"Avengement\", duration: 5052.43994140625},\n            {type:\"vod\", id:\"8291007\", title:\"A Quiet Place Part II\", duration: 5585.60009765625},\n            {type:\"vod\", id:\"8291006\", title:\"The Gentlemen\", duration: 6510.64013671875},\n            {type:\"vod\", id:\"8325351\", title:\"American Rust S01/E01\", duration: 3635.8798828125},\n            {type:\"vod\", id:\"8163060\", title:\"Parker\", duration: 6828.080078125},\n        ];\n\n        let usersUuids = [];\n        for(let i=0; i < 479; i++) {\n            usersUuids.push(this.generateUuid());\n        }\n\n       let envs = this.generateEnvs();\n\n        let startTime = Math.floor((new Date()).getTime() / 1000.0);\n        let result = [];\n        for(let i=0; i < 7177; i++) {\n            let userPos = (i * 5701) % usersUuids.length;\n            let env =envs[userPos % envs.length];\n            let media = mediaList[ (i * 113) % mediaList.length];\n            result.push({\n                error_id: this.generateUuid(),\n                user_id: usersUuids[userPos],\n                time: startTime,\n                media_type: media.type,\n                media_id_title: media.title + ' [' + media.id + ']',\n                media_duration: media.duration,\n                device_type: env.device_type,\n                device_browser: env.device_browser,\n                device_os: env.device_os,\n                isp: env.isp,\n                cdn: env.cdn,\n            });\n\n            startTime -= Math.floor(100 * Math.random());\n        }\n        return result;\n    }\n\n    generateEnvs() {\n        let envs = [];\n        envs.push({device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 10', isp: 'Netia', cdn: 'CDN77'});\n        envs.push({device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 11', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'INEA', cdn: 'CDN77'});\n        envs.push({device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 11', isp: 'INEA', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'Netia', cdn: 'CDN77'});\n        envs.push({device_type: 'PC', device_browser: 'Firefox', device_os: 'Windows 10', isp: 'Netia', cdn: 'AWS-2'});\n        envs.push({device_type: 'PC', device_browser: 'Edge', device_os: 'Windows 11', isp: 'Netia', cdn: 'AWS-2'});\n        envs.push({device_type: 'PC', device_browser: 'Chrome', device_os: 'Windows 10', isp: 'INEA', cdn: 'AWS-2'});\n\n        envs.push({device_type: 'PC', device_browser: 'Safari', device_os: 'MacOS', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'PC', device_browser: 'Safari', device_os: 'MacOS', isp: 'INEA', cdn: 'ACDN77'});\n\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Play', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 10', isp: 'Play', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'Play', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Play', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Play', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Play', cdn: 'AWS-1'});\n\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Orange', cdn: 'CDN77'});\n        envs.push({device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 11', isp: 'Orange', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'Orange', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Orange', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Orange', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Orange', cdn: 'AWS-1'});\n\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'T-Mobile', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 11', isp: 'T-Mobile', cdn: 'CDN77'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'T-Mobile', cdn: 'AWS-1'});\n\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 10', isp: 'Netia', cdn: 'AWS-1'});\n        envs.push({device_type: 'mobile', device_browser: 'FireFox', device_os: 'Android 10', isp: 'Netia', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 12', isp: 'INEA', cdn: 'CDN77'});\n        envs.push({device_type: 'mobile', device_browser: 'Chrome', device_os: 'Android 8', isp: 'Vectra', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 13', isp: 'Vectra', cdn: 'AWS-2'});\n        envs.push({device_type: 'mobile', device_browser: 'Safari', device_os: 'iOS 14', isp: 'Netia', cdn: 'AWS-1'});\n        return envs;\n    }\n\n    generateUuid() {\n        return 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'.replace(/[x]/g, function(c) {\n            return Math.floor(Math.random() * 16).toString(16);\n        });\n    }\n\n    loadMockData(){\n        // Filtering\n        let res =  this.errorsDb.slice();\n        if(this.searchOptions.text) {\n            let text = this.searchOptions.text.toLowerCase();\n            res = [];\n            for(var pos=0; pos < this.errorsDb.length; pos++) {\n                let rec = this.errorsDb[pos];\n                for(var k in rec) {\n                    if((rec[k]+'').toLowerCase().indexOf(text) !== -1) {\n                        res.push(rec);\n                    }\n                }\n            }\n        }\n        this.searchOptions.total = res.length;\n\n        // Sorting\n        if(this.searchOptions.sort_by) {\n            var sort_by = this.searchOptions.sort_by;\n            let cmp = function(a:any, b:any) {\n                if(a[sort_by] < b[sort_by]) {\n                    return -1;\n                } else if(a[sort_by] > b[sort_by]) {\n                    return 1;\n                }\n                return 0;\n            };\n            if(this.searchOptions.sort_dir != 'asc') {\n                cmp = function(a:any, b:any) {\n                    if(a[sort_by] < b[sort_by]) {\n                        return 1;\n                    } else if(a[sort_by] > b[sort_by]) {\n                        return -1;\n                    }\n                    return 0;\n                };\n            }\n            res.sort(cmp);\n        }\n\n        // Paging\n        let pageSize = this.searchOptions.page_size;\n        let pageIdx = (this.searchOptions .page - 1) * pageSize;\n        this.errors = res.slice(pageIdx, pageIdx + pageSize);\n    }\n\n    onSearchKeyPress(e: any): void {\n        let code: number = e.keyCode || e.which;\n        if(code == 13) {\n            // Enter pressed - perform search.\n            this.searchOptions.page = 1;\n            this.loadMockData();\n        }\n    }\n\n    onColumnHeaderClick(columnName: string): void {\n        if(this.searchOptions.sort_by == columnName) {\n            // Toggle sort direction.\n            this.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n        } else {\n            // Change sort column.\n            this.searchOptions.sort_by = columnName;\n            this.searchOptions.sort_dir = 'asc';\n        }\n\n        this.searchOptions.page = 1;\n        this.loadMockData();\n    }\n\n    onPageChanged(page: number): void {\n        this.searchOptions.page = page;\n        this.loadMockData();\n    }\n\n    onErrorItemClick(item: any): void {\n        this.selectedError = item;\n    }\n\n    isErrorSelected(mm: any) {\n        return (mm != null) && (this.selectedError != null) && (mm.error_id == this.selectedError.error_id);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/errors/errors.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { ErrorsView } from './errors.view.component';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { MediaService } from '../../../service/analytics/media.service';\n\nexport const routes: Routes = [\n\t{ path: '', component: ErrorsView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPagerModule,\n\t\tChartModule,\n\t],\n\tdeclarations: [\n\t\tErrorsView\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tUsersAndViewsVsTimeService,\n\t\tMediaService\n\t]\n})\nexport class AnalyticsErrorsModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/errors/errors.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\n\n\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport {\n    MediaMetadata,\n    TopStreamedMediaMetadataListResponse,\n    TopStreamedMediaRecord,\n    ViewersNumResponse } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n    selector: 'real-time-marketing-view',\n    template: require('./real-time-marketing.view.component.html'),\n    styles: [require('./real-time-marketing.view.component.scss')],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RealTimeMarketingView extends Localization {\n\n    searchOptions: any;\n    contents: any[];\n    contentsDb: any[];\n    dateUtil: DateUtil;\n    campaigns: any[];\n\n    constructor(\n        public chartService: UsersAndViewsVsTimeService,\n        public mediaAnalyticsService: MediaService,\n\n        public locale: LocaleService,\n        public translation: TranslationService,\n        private user: UserService,\n        private cdr: ChangeDetectorRef) {\n        super(locale, translation);\n\n        // Making alias for view.\n        this.dateUtil = DateUtil;\n\n        // Campaigns\n        this.campaigns = [];\n        let skiJumpsData = [9,12,23,31,33,36,32,35,44,53,50,46,56,73,97,113,118,107,78,48,25,14,9,8,7,10,17,26,35,44,48,41,36,41,40,43,49,60,82,94,88,85,62,37,21,11,8,5,4,9,15,21,27,27,26,28,49,60,44,42,42,49,58,67,69,72,52,39,19,12,9,7,5,7,11,23,71,66,55,48,38,39,42,45,47,50,57,57,57,52,39,28,15,8,8,7,7,7,9,27,46,42,40,37,36,39,34,38,45,44,44,47,49,50,35,18,9,5,6,5,6,9,17,44,65,54,81,34,30,12];\n        this.campaigns.push({\n            name: 'Ski Jumps',\n            time: 1644146658,\n            totalViews: 4933,\n            totalUsers: 4094,\n            contents: ['Take Off (2009) [51820123]', ' Eddie the Eagle (2015) [64392197]'],\n            history: {\n                startDate: moment(1644146658000),\n                endDate: moment(1644146658000).add(skiJumpsData.length, 'hours'),\n                data:[{label: 'Views', data: skiJumpsData}],\n                labels: this.generateDatesForChart(moment(1643973858000),  skiJumpsData.length)\n            }\n        });\n\n        let winterOlympicsData = [13,13,20,36,46,55,52,49,62,65,69,70,76,94,137,238,203,211,201,150,95,46,22,15,13,12,16,27,36,43,48,43,44,56,72,67,60,77,104,143,168,172,165,129,79,37,19,11,10,8,12,21,31,46,53,63,55,48,57,55,56,65,83,112,130,135,135,109,59,31,15,10,6,6,13,19,27,34,37,35,37,59,70,58,61,59,71,87,101,103,116,91,63,33,20,13,9,7,10,15,32,85,85,68,72,55,56,62,69,74,74,86,88,89,90,64,45,24,13,12,11,11,10,13,34,54,56,55,52,49,53,51,60,67,67,67,69,75,80,53,30,14,8,8,7,8,10,21,50,73,64,88,42,35,12];\n        this.campaigns.push({\n            name: 'Winter Olympics',\n            time: 1643973858,\n            totalViews: 9038,\n            totalUsers: 7543,\n            contents: ['Icarus (2017) [78131237]', 'Winter Olympics Opening Ceremony (TV) [891131441]', 'Nerves of Steel (2006) [651231993]'],\n            history: {\n                startDate: moment(1643973858000),\n                endDate: moment(1643973858000).add(winterOlympicsData.length, 'hours'),\n                data:[{label: 'Views', data: winterOlympicsData}],\n                labels: this.generateDatesForChart(moment(1643973858000),  winterOlympicsData.length)\n            }\n        });\n\n        // Contents\n        this.contentsDb = this.generateMockData();\n        this.searchOptions = {\n                text: null,\n                sort_by: null,\n                sort_dir: 'asc',\n                page: 1,\n                page_size: 5,\n                total: this.contentsDb.length,\n            };\n        this.loadMockData();\n    }\n\n    generateDatesForChart(momentStartTime: any, hoursNum: number): string[] {\n            let result = [];\n            let startTs = momentStartTime.unix() * 1000;\n            for(let h=0; h < hoursNum; h++) {\n                let hm = moment(startTs);\n                result.push(hm.add(h, 'hours').toISOString());\n            }\n            return result;\n    }\n\n    generateMockData() {\n        let result = [\n            { title: \"2022 Winter Olympics opening ceremony\", year: 2022, duration: 120*60, tags: \"winter olympics, tv, document, transmission\" },\n            { title: \"Top Gear: Winter Olympics\", year: 2006, duration: 60*60, tags: \"englishman abroad, motor vehicle, suv, briton in norway, vehicle, citroen c1, sport utility vehicle, car, briton abroad, audi motor vehicle\" },\n            { title: \"Cool Runnings\", year: 1993, duration: 98*60, tags: \"american played by canadian, canada, runner, beard, track, stumble, dream, olympic committee, \" },\n            { title: \"Eddie the Eagle\", year: 2015, duration: 104*60, tags: \"ski jumper, coach, 1988 winter olympics, winter olympics, athletic training, winter sports, athlete, ski jumping, based on true story, based\" },\n            {title: \"Take Off\", year: 2009, duration: 137*60, tags:\"winter sports sport, ski jumping, winter sports, winter, ski jumper, ski jump\"},\n            {title:\"Olympic Dreams\", year: 2019, duration: 85*60, tags: \"olympics, winter olympics, gay athlete, dining, away from home, age difference, older man younger girl, dining out, cross country skiing\"}\n        ];\n\n        return result;\n    }\n\n    loadMockData(){\n        // Filtering\n        let res =  this.contentsDb.slice();\n        if(this.searchOptions.text) {\n            let text = this.searchOptions.text.toLowerCase();\n            res = [];\n            for(var pos=0; pos < this.contentsDb.length; pos++) {\n                let rec = this.contentsDb[pos];\n                for(var k in rec) {\n                    if((rec[k]+'').toLowerCase().indexOf(text) !== -1) {\n                        res.push(rec);\n                    }\n                }\n            }\n        }\n        this.searchOptions.total = res.length;\n\n        // Sorting\n        if(this.searchOptions.sort_by) {\n            var sort_by = this.searchOptions.sort_by;\n            let cmp = function(a:any, b:any) {\n                if(a[sort_by] < b[sort_by]) {\n                    return -1;\n                } else if(a[sort_by] > b[sort_by]) {\n                    return 1;\n                }\n                return 0;\n            };\n            if(this.searchOptions.sort_dir != 'asc') {\n                cmp = function(a:any, b:any) {\n                    if(a[sort_by] < b[sort_by]) {\n                        return 1;\n                    } else if(a[sort_by] > b[sort_by]) {\n                        return -1;\n                    }\n                    return 0;\n                };\n            }\n            res.sort(cmp);\n        }\n\n        // Paging\n        let pageSize = this.searchOptions.page_size;\n        let pageIdx = (this.searchOptions .page - 1) * pageSize;\n        this.contents = res.slice(pageIdx, pageIdx + pageSize);\n    }\n\n    onSearchKeyPress(e: any): void {\n        let code: number = e.keyCode || e.which;\n        if(code == 13) {\n            // Enter pressed - perform search.\n            this.searchOptions.page = 1;\n            this.loadMockData();\n        }\n    }\n\n    onColumnHeaderClick(columnName: string): void {\n        if(this.searchOptions.sort_by == columnName) {\n            // Toggle sort direction.\n            this.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n        } else {\n            // Change sort column.\n            this.searchOptions.sort_by = columnName;\n            this.searchOptions.sort_dir = 'asc';\n        }\n\n        this.searchOptions.page = 1;\n        this.loadMockData();\n    }\n\n    onPageChanged(page: number): void {\n        this.searchOptions.page = page;\n        this.loadMockData();\n    }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/real-time-marketing/real-time-marketing.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { RealTimeMarketingView } from './real-time-marketing.view.component';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { MediaService } from '../../../service/analytics/media.service';\n\nexport const routes: Routes = [\n\t{ path: '', component: RealTimeMarketingView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPagerModule,\n\t\tChartModule,\n\t],\n\tdeclarations: [\n\t\tRealTimeMarketingView\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tUsersAndViewsVsTimeService,\n\t\tMediaService\n\t]\n})\nexport class AnalyticsRealTimeMarketingModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/real-time-marketing/real-time-marketing.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\n\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport {\n    MediaMetadata,\n    TopStreamedMediaMetadataListResponse,\n    TopStreamedMediaRecord,\n    ViewersNumResponse } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n    selector: 'content-insights-view',\n    template: require('./content-insights.view.component.html'),\n    styles: [require('./content-insights.view.component.scss')],\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContentInsightsView extends Localization {\n\n    searchOptions: any;\n    contents: any[];\n    contentsDb: any[];\n    dateUtil: DateUtil;\n    campaigns: any[];\n    viewsByMediaTypeData: any[];\n    viewsByMediaTypeLabels: any[];\n    vodViewsByGenresData: any[];\n    vodViewsByGenresLabels: any[];\n    tvViewsByGenresData: any[];\n    tvViewsByGenresLabels: any[];\n    timeRangeDropdown: any[];\n\n    constructor(\n        public chartService: UsersAndViewsVsTimeService,\n        public mediaAnalyticsService: MediaService,\n\n        public locale: LocaleService,\n        public translation: TranslationService,\n        private user: UserService,\n        private cdr: ChangeDetectorRef) {\n        super(locale, translation);\n\n        // Making alias for view.\n        this.dateUtil = DateUtil;\n\n        this.viewsByMediaTypeData = [\n              {data: [45.0, 32.0, 18.00], label: 'By Type'}\n        ];\n        this.viewsByMediaTypeLabels = [\n                'TV', 'Series', 'VOD'\n        ];\n        this.vodViewsByGenresData = [\n              {data: [91, 89, 89, 86, 84, 83, 83, 77, 77, 75, 71, 70, 64, 62, 47], label: 'By genres'}\n        ];\n        this.vodViewsByGenresLabels = [\n             'Comedy', 'Adventure', 'Drama', 'Action', 'Crime', 'Mystery', 'Thriller', 'Documentary', 'Romance', 'Animation', 'War', 'Fantasy', 'Music', 'Sci-Fi ', 'Horror'\n        ];\n        this.tvViewsByGenresData = [\n              {data: [107, 102, 96, 98, 101, 103, 91, 90, 84, 86, 72, 78, 84, 63, 55], label: 'By genres'}\n        ];\n        this.tvViewsByGenresLabels = [\n              'News programming', 'Talk shows', 'Game shows', 'Variety shows', 'Sketch comedy', 'Sports', 'Sitcoms', 'Romantic comedies', 'Teen dramas', 'Docudramas', 'Police procedurals', 'Sci-fi and fantasy', 'Anime', 'Soap operas', 'Reality TV',\n        ];\n\n        this.timeRangeDropdown =  [{value: 0, label: 'All time', markSelected:true}, {value: 1, label: 'Last year'}, {value: 2, label: 'Last month'}, {value: 3, label: 'Last week'}, {value: 4, label: 'Last day'}];\n\n        // Contents\n        this.contentsDb = this.generateMockData();\n        this.searchOptions = {\n                text: null,\n                sort_by: null,\n                sort_dir: 'asc',\n                page: 1,\n                page_size: 10,\n                total: this.contentsDb.length,\n            };\n        this.loadMockData();\n    }\n\n    generateMockData() {\n        let result = [\n            {id:7019511, title:\"Arrival (2016)\", duration:113*60, addedIntoSystem:'2016-11-24', views: 12011, users: 10198 },\n            {id:5928123, title:\"Interstellar (2014)\", duration:169*60, addedIntoSystem:'2015-02-03', views: 25012, users: 22748 },\n            {id:7512391, title:\"Blade Runner 2049 (2017)\", duration:164*60, addedIntoSystem:'2018-04-01', views: 15109, users: 12871 },\n            {id:6204154, title:\"Mad Max: Fury Road (2015)\", duration:120*60, addedIntoSystem:'2016-06-04', views: 18914, users: 16912 },\n            {id:8912319, title:\"Ad Astra (2019)\", duration:123*60, addedIntoSystem:'2020-04-03', views: 19941, users: 18091 },\n            {id:3781205, title:\"Terminator: Salvation (2009)\", duration:115*60, addedIntoSystem:'2010-09-08', views: 7129, users: 6681 },\n            {id:3981214, title:\"Avatar (2009)\", duration:162*60, addedIntoSystem:'2011-03-01', views: 34193, users: 29810 },\n            {id:3221233, title:\"Star Trek (2009)\", duration:127*60, addedIntoSystem:'2010-10-10', views: 6619, users: 5518 },\n            {id:5120412, title:\"Star Trek: Into Darkness (2013)\", duration:132*60, addedIntoSystem:'2014-02-19', views: 8712, users: 7901 },\n            {id:4412551, title:\"Prometheus (2012)\", duration:124*60, addedIntoSystem:'2013-06-07', views: 15129, users: 14098 },\n            {id:6129818, title:\"Tomorrowland (2015)\", duration:130*60, addedIntoSystem:'2016-05-01', views: 16991, users: 16017 },\n        ];\n\n        return result;\n    }\n\n    loadMockData(){\n        // Filtering\n        let res =  this.contentsDb.slice();\n        if(this.searchOptions.text) {\n            let text = this.searchOptions.text.toLowerCase();\n            res = [];\n            for(var pos=0; pos < this.contentsDb.length; pos++) {\n                let rec = this.contentsDb[pos];\n                for(var k in rec) {\n                    if((rec[k]+'').toLowerCase().indexOf(text) !== -1) {\n                        res.push(rec);\n                    }\n                }\n            }\n        }\n        this.searchOptions.total = res.length;\n\n        // Sorting\n        if(this.searchOptions.sort_by) {\n            var sort_by = this.searchOptions.sort_by;\n            let cmp = function(a:any, b:any) {\n                if(a[sort_by] < b[sort_by]) {\n                    return -1;\n                } else if(a[sort_by] > b[sort_by]) {\n                    return 1;\n                }\n                return 0;\n            };\n            if(this.searchOptions.sort_dir != 'asc') {\n                cmp = function(a:any, b:any) {\n                    if(a[sort_by] < b[sort_by]) {\n                        return 1;\n                    } else if(a[sort_by] > b[sort_by]) {\n                        return -1;\n                    }\n                    return 0;\n                };\n            }\n            res.sort(cmp);\n        }\n\n        // Paging\n        let pageSize = this.searchOptions.page_size;\n        let pageIdx = (this.searchOptions .page - 1) * pageSize;\n        this.contents = res.slice(pageIdx, pageIdx + pageSize);\n    }\n\n    onSearchKeyPress(e: any): void {\n        let code: number = e.keyCode || e.which;\n        if(code == 13) {\n            // Enter pressed - perform search.\n            this.searchOptions.page = 1;\n            this.loadMockData();\n        }\n    }\n\n    onColumnHeaderClick(columnName: string): void {\n        if(this.searchOptions.sort_by == columnName) {\n            // Toggle sort direction.\n            this.searchOptions.sort_dir = (this.searchOptions.sort_dir == 'desc') ? 'asc' : 'desc';\n        } else {\n            // Change sort column.\n            this.searchOptions.sort_by = columnName;\n            this.searchOptions.sort_dir = 'asc';\n        }\n\n        this.searchOptions.page = 1;\n        this.loadMockData();\n    }\n\n    onPageChanged(page: number): void {\n        this.searchOptions.page = page;\n        this.loadMockData();\n    }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/content-insights/content-insights.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport {ContentInsightsView } from './content-insights.view.component';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { MediaService } from '../../../service/analytics/media.service';\n\nexport const routes: Routes = [\n\t{ path: '', component: ContentInsightsView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPagerModule,\n\t\tChartModule,\n\t],\n\tdeclarations: [\n\t\tContentInsightsView\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tUsersAndViewsVsTimeService,\n\t\tMediaService\n\t]\n})\nexport class AnalyticsContentInsightsModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/content-insights/content-insights.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\n\n\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport {\n\tMediaMetadata,\n\tTopStreamedMediaMetadataListResponse,\n\tTopStreamedMediaRecord,\n\tViewersNumResponse } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n\tselector: 'flexmodel-view',\n\ttemplate: require('./flexmodel.view.component.html'),\n\tstyles: [require('./flexmodel.view.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlexModelView extends Localization implements OnInit, OnDestroy {\n\n\tcharts: any[];\n\tfilterDropdownTimeScope: Array<any>;\n\n\tfilterDropdownOs: Array<any>;\n\tfilterDropdownBrowser: Array<any>;\n\tfilterDropdownDevice: Array<any>;\n\tfilterDropdownTags: Array<any>;\n\tfilterDropdownAppVersion: Array<any>;\n\tfilterDropdownPlayer: Array<any>;\n\n\tfilterDropdownIsp: Array<any>;\n\tfilterDropdownCdn: Array<any>;\n\n\tfilterDropdownGeoCountry: Array<any>;\n\tfilterDropdownGeoRegion: Array<any>;\n\tfilterDropdownGeoCity: Array<any>;\n\n\tfilterDropdownDemographyAgeFrom: Array<any>;\n\tfilterDropdownDemographyAgeTo: Array<any>;\n\tfilterDropdownDemographySex: Array<any>;\n\n\tisPanelOpen: any;\n\ttimeSeries: any;\n\tmetricDropdown: Array<any>;\n\tmetricsDropdown: Array<any>;\n\ttableDimDropdown: Array<any>;\n\ttableCols: Array<String>;\n\ttableRows: Array<String>;\n\ttableData: Array< Array<number> >;\n\ttableMetricsDropdown: Array<any>;\n\n\tcategoriesSeries: any;\n\tcategoriesDimDropdown: Array<any>;\n\tmapChartData: any;\n\n\tconstructor(\n\t\tpublic chartService: UsersAndViewsVsTimeService,\n\t\tpublic mediaAnalyticsService: MediaService,\n\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate user: UserService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tthis.filterDropdownTimeScope = [{value: 0, label: 'Fixed dates'}, {value: 1, label: 'Fixed dates', markSelected:true, hasSeparatorBelow:true}, {value: 2, label: 'Now', hasSeparatorBelow:true}, {value: 3, label: 'Last 24h'}, {value: 4, label: 'Last 48h'},{value: 5, label: 'Last 7d'}, {value: 6, label: 'Last 30d'}, {value: 7, label: 'Last 90d'}, {value: 8, label: 'Last 180d'}];\n\n\t\tthis.filterDropdownOs = [{value: 0, label: 'Windows, MacOS'}, {value: 1, label: 'Windows', markSelected:true}, {value: 2, label: 'Android'}, {value: 3, label: 'iOS'}, {value: 4, label: 'MacOS', markSelected:true},{value: 5, label: 'Linux'}, {value: 6, label: 'Windows Phone'}, {value: 7, label: 'Chrome OS'}, {value: 8, label: 'BlackBerry'}];\n\t\tthis.filterDropdownBrowser = [{value: 0, label: 'Chrome, Firefox'}, {value: 1, label: 'Chrome', markSelected:true},{value: 2, label: 'Firefox', markSelected:true},{value: 3, label: 'Safari'},{value: 4, label: 'IE'},{value: 5, label: 'Samsung Internet'},{value: 6, label: 'Opera'},{value: 7, label: 'Edge'},{value: 8, label: '(unknown)'},{value: 9, label: 'Vivaldi'},{value: 10, label: 'Chromium'},{value: 11, label: 'Android'},{value: 12, label: 'Maxthon'},{value: 13, label: 'Pale Moon'},{value: 14, label: 'Puffin'},{value: 15, label: 'BlackBerry'},{value: 16, label: 'UC Browser'},{value: 17, label: 'Nokia'}];\n\t\tthis.filterDropdownDevice = [{value: 0, label: 'Desktop'}, {value: 1, label: 'Desktop', markSelected:true}, {value: 2, label: 'Mobile'}];\n\t\tthis.filterDropdownTags = [{value: 0, label: 'technology, entertainment'}, {value:1, label:'technology', markSelected:true}, {value:2, label:'science'}, {value:3, label:'global issues'}, {value:4, label:'design'}, {value:5, label:'business'}, {value:6, label:'culture'}, {value:7, label:'entertainment', markSelected:true}, {value:8, label:'health'}, {value:9, label:'biology'}, {value:10, label:'creativity'}, {value:11, label:'environment'}, {value:12, label:'art'}, {value:13, label:'TEDx'}, {value:14, label:'music'}, {value:15, label:'medicine'}, {value:16, label:'economics'}, {value:17, label:'politics'}, {value:18, label:'performance'}, {value:19, label:'psychology'}, {value:20, label:'life'}];\n\t\tthis.filterDropdownAppVersion = [{value: 0, label: '1.12.11'}, {value: 1, label: '1.12.11', markSelected:true}, {value: 2, label: '1.0.1'}, {value: 3, label: '1.1.9'}, {value: 4, label: '1.7.11'}];\n\t\tthis.filterDropdownPlayer = [{value: 0, label: 'Video.js'}, {value: 1, label: 'Video.js', markSelected:true},{value: 2, label: 'ExoPlayer'},{value: 3, label: 'Bradmax iOS'}];\n\n\t\tthis.filterDropdownIsp = [{value: 0, label: 'UPC Polska'}, {value: 1, label: 'UPC Polska', markSelected:true}, {value: 2, label: 'Vectra Broadband'}, {value: 3, label: 'Multimedia Polska S.A.'}, {value: 4, label: 'Orange Polska'}, {value: 5, label: 'T-mobile Polska'}, {value: 6, label: 'Orange Mobile'}, {value: 7, label: 'Netia SA'}, {value: 8, label: 'Play'}, {value: 9, label: 'Plus'}, {value: 10, label: 'Cyfrowy Polsat'}];\n\t\tthis.filterDropdownCdn = [{value: 0, label: 'AWS, Akamai'},{value: 1, label: 'AWS', markSelected:true}, {value: 2, label: 'Akamai', markSelected:true}, {value: 3, label: 'CDN77'}, , {value: 4, label: 'Azure'}];\n\n\t\tthis.filterDropdownGeoCountry = [{value:0, label:'All'}, {value:1, label:' United States', markSelected:true}, {value:2, label:' China'}, {value:3, label:' Japan'}, {value:4, label:' Canada'}, {value:5, label:' Brazil'}, {value:6, label:' Germany'}, {value:7, label:' United Kingdom'}, {value:8, label:' France'}, {value:9, label:' Republic of Korea'}, {value:10, label:' Netherlands'}, {value:11, label:' Russia'}, {value:12, label:' Italy'}, {value:13, label:' India'}, {value:14, label:' Australia'}, {value:15, label:' Spain'}, {value:16, label:' Taiwan'}, {value:17, label:' Mexico'}, {value:18, label:' South Africa'}, {value:19, label:' Vietnam'}, {value:20, label:' Indonesia'}];\n\t\tthis.filterDropdownGeoRegion = [{value:0, label:'All'}];\n\t\tthis.filterDropdownGeoCity = [{value:0, label:'All'}];\n\n\t\tthis.filterDropdownDemographyAgeFrom = [{value:-1, label:'0'}, {value:0, label:'0', markSelected:true}, {value:3, label:'3'}, {value:6, label:'6'}, {value:9, label:'9'}, {value:12, label:'12'}, {value:15, label:'15'}, {value:18, label:'18'}, {value:21, label:'21'}, {value:24, label:'24'}, {value:27, label:'27'}, {value:30, label:'30'}, {value:33, label:'33'}, {value:36, label:'36'}, {value:39, label:'39'}, {value:42, label:'42'}, {value:45, label:'45'}, {value:48, label:'48'}, {value:51, label:'51'}, {value:54, label:'54'}, {value:57, label:'57'}, {value:60, label:'60'}, {value:63, label:'63'}, {value:66, label:'66'}, {value:69, label:'69'}, {value:72, label:'72'}, {value:75, label:'75'}, {value:78, label:'78'}, {value:81, label:'81'}, {value:84, label:'84'}, {value:87, label:'87'}, {value:90, label:'90'}, {value:93, label:'93'}, {value:96, label:'96'}, {value:99, label:'99'}];\n\t\tthis.filterDropdownDemographyAgeTo = [{value:-1, label:'99'}, {value:0, label:'0'}, {value:3, label:'3'}, {value:6, label:'6'}, {value:9, label:'9'}, {value:12, label:'12'}, {value:15, label:'15'}, {value:18, label:'18'}, {value:21, label:'21'}, {value:24, label:'24'}, {value:27, label:'27'}, {value:30, label:'30'}, {value:33, label:'33'}, {value:36, label:'36'}, {value:39, label:'39'}, {value:42, label:'42'}, {value:45, label:'45'}, {value:48, label:'48'}, {value:51, label:'51'}, {value:54, label:'54'}, {value:57, label:'57'}, {value:60, label:'60'}, {value:63, label:'63'}, {value:66, label:'66'}, {value:69, label:'69'}, {value:72, label:'72'}, {value:75, label:'75'}, {value:78, label:'78'}, {value:81, label:'81'}, {value:84, label:'84'}, {value:87, label:'87'}, {value:90, label:'90'}, {value:93, label:'93'}, {value:96, label:'96'}, {value:99, label:'99', markSelected:true}];\n\t\tthis.filterDropdownDemographySex = [{value:0, label:'Male'}, {value:1, label:'Male', markSelected:true}, {value:2, label:'Feale'}]\n\n\t\tthis.isPanelOpen = {};\n\t\tfor(let panelId=1; panelId < 9; panelId++) {\n\t\t\tthis.isPanelOpen[panelId] = true;\n\t\t}\n\n\t\tthis.timeSeries = {\n\t\t\t\"data\":[\n\t\t\t\t{\"data\":[1318,1280,1310,1208,799,1071,1513,1275,1372,1293,1131,756,1067,1417,1324,1278,1058,818,868,1173,1569,1389,1448,1311,1119,953,1003,1139,1040,1381,837],\"label\":\"Users\"},\n\t\t\t\t{\"data\":[4276,4197,4339,4108,2470,3422,4804,4439,4328,4154,3479,2377,3181,4503,4319,4006,3448,2635,2818,3732,5330,4960,4388,4376,3573,2847,3307,3709,2473,4296,2611],\"label\":\"Views\"}\n\t\t\t],\n\t\t\t\"labels\":[\"2019-10-14T22:00:00.000Z\",\"2019-10-15T22:00:00.000Z\",\"2019-10-16T22:00:00.000Z\",\"2019-10-17T22:00:00.000Z\",\"2019-10-18T22:00:00.000Z\",\"2019-10-19T22:00:00.000Z\",\"2019-10-20T22:00:00.000Z\",\"2019-10-21T22:00:00.000Z\",\"2019-10-22T22:00:00.000Z\",\"2019-10-23T22:00:00.000Z\",\"2019-10-24T22:00:00.000Z\",\"2019-10-25T22:00:00.000Z\",\"2019-10-26T22:00:00.000Z\",\"2019-10-27T23:00:00.000Z\",\"2019-10-28T23:00:00.000Z\",\"2019-10-29T23:00:00.000Z\",\"2019-10-30T23:00:00.000Z\",\"2019-10-31T23:00:00.000Z\",\"2019-11-01T23:00:00.000Z\",\"2019-11-02T23:00:00.000Z\",\"2019-11-03T23:00:00.000Z\",\"2019-11-04T23:00:00.000Z\",\"2019-11-05T23:00:00.000Z\",\"2019-11-06T23:00:00.000Z\",\"2019-11-07T23:00:00.000Z\",\"2019-11-08T23:00:00.000Z\",\"2019-11-09T23:00:00.000Z\",\"2019-11-10T23:00:00.000Z\",\"2019-11-11T23:00:00.000Z\",\"2019-11-12T23:00:00.000Z\",\"2019-11-13T23:00:00.000Z\"],\n\t\t\t\"startDate\":moment([2019, 10, 14]),\n\t\t\t\"endDate\":moment([2019,11,13]),\n\t\t\t\"chartType\":\"lineTime\",\n\t\t\t\"granularity\":\"day\"\n\t\t};\n\n\t\tthis.metricsDropdown = [{value: 0, label: 'Select metrics for next chart'}, {value: 1, label: 'Users'}, {value: 2, label: 'Views'}, {value: 3, label: 'Avg watching time'}, {value: 4, label: 'Views/User'}, {value: 5, label: 'Stream start time'}, {value: 6, label: 'Player start time'}, {value: 7, label: 'Rebuffer duration'}, {value: 8, label: 'Rebuffer percentage'}, {value: 9, label: 'Avg bitrate'}, {value: 10, label: 'Quit time'}, {value: 11, label: 'Quit ratio'}, {value: 12, label: 'Error ratio'}];\n\t\tthis.metricDropdown = [{value: 0, label: 'Select metric for next chart'}, {value: 1, label: 'Users'}, {value: 2, label: 'Views'}, {value: 3, label: 'Avg watching time'}, {value: 4, label: 'Views/User'}, {value: 5, label: 'Stream start time'}, {value: 6, label: 'Player start time'}, {value: 7, label: 'Rebuffer duration'}, {value: 8, label: 'Rebuffer percentage'}, {value: 9, label: 'Avg bitrate'}, {value: 10, label: 'Quit time'}, {value: 11, label: 'Quit ratio'}, {value: 12, label: 'Error ratio'}];\n\t\tthis.tableDimDropdown = [{value: 0, label: 'Dimension'}, {value: 1, label: 'OS'}, {value: 2, label: 'Browser'}, {value: 3, label: 'ISP'}, {value: 4, label: 'CDN'} , {value: 5, label: 'Player'}, {value: 6, label: 'App version'}, {value: 7, label: 'Demography/Sex'}];\n\t\tthis.tableCols = ['UPC Polska', 'Vectra Broadband', 'Multimedia Polska S.A.', 'Orange Polska', 'T-mobile Polska', 'Orange Mobile', 'Netia SA', 'Play', 'Plus', 'Cyfrowy Polsat'];\n\t\tthis.tableRows = ['AWS', 'Akamai', 'CDN77', 'Azure'];\n\t\tthis.tableData = [\n\t\t\t[0.880,1.157,1.482,1.627,1.268,1.961,1.542,1.523,1.628,2.043],\n\t\t\t[1.015,1.084,1.583,1.372,1.583,1.521,1.298,1.724,2.282,1.504],\n\t\t\t[0.923,1.219,1.306,0.982,1.655,1.767,1.663,1.666,1.801,2.000],\n\t\t\t[0.719,1.055,1.449,1.326,1.575,1.858,1.465,2.071,1.770,1.546]\n\t\t];\n\t\tthis.tableMetricsDropdown = [{value: 0, label: 'Select metric for next table'}, {value: 1, label: 'Users'}, {value: 2, label: 'Views'}, {value: 3, label: 'Avg watching time'}, {value: 4, label: 'Views/User'}, {value: 5, label: 'Stream start time'}, {value: 6, label: 'Player start time'}, {value: 7, label: 'Rebuffer duration'}, {value: 8, label: 'Rebuffer percentage'}, {value: 9, label: 'Avg bitrate'}, {value: 10, label: 'Quit time'}, {value: 11, label: 'Quit ratio'}, {value: 12, label: 'Error ratio'}];\n\n\t\tthis.categoriesSeries = {\n\t\t\t\"data\":[\n\t\t\t\t\t{\"label\":\"Stream start time [sec]\", \"data\":[0.884, 1.128, 1.455, 1.326, 1.52, 1.776, 1.492, 1.746, 1.87, 1.773]},\n\t\t\t\t\t{\"label\":\"Player start time [sec]\", \"data\":[0.645, 0.639, 0.689, 0.672, 0.726, 0.740, 0.737, 0.788, 0.777, 0.895]},\n\t\t\t\t\t{\"label\":\"Rebuffering time [sec]\", \"data\":[1.648, 2.344, 2.296, 2.337, 2.201, 2.450, 2.461, 2.687, 2.754, 2.809]},\n\t\t\t\t],\n\t\t\t\"labels\":['UPC Polska', 'Vectra Broadband', 'Multimedia Polska S.A.', 'Orange Polska', 'T-mobile Polska', 'Orange Mobile', 'Netia SA', 'Play', 'Plus', 'Cyfrowy Polsat']\n\t\t};\n\t\tthis.categoriesDimDropdown = [{value: 0, label: 'Select dimension'}, {value: 1, label: 'OS'}, {value: 2, label: 'Browser'}, {value: 3, label: 'ISP'}, {value: 4, label: 'CDN'} , {value: 5, label: 'Player'}, {value: 6, label: 'App version'}, {value: 7, label: 'Demography/Sex'}];\n\n\t\tthis.mapChartData = {\n\t\t\t\"chartType\": \"GeoChart\",\n\t\t\t\"dataTable\": [\n\t\t\t\t[\"Country\", \"Stream start time\"],\n\t\t\t\t[\"PL\", 1.522], [\"SE\", 1.268], [\"NO\", 1.216], [\"US\", 1.258], [\"GB\", 1.260], [\"DE\", 1.538], [\"DK\", 1.375], [\"SL\", 1.504], [\"ES\", 1.359], [\"NL\", 1.233],\n\t\t\t\t[\"CN\", 1.240], [\"FI\", 1.451], [\"BB\", 1.430], [\"FR\", 1.555], [\"BE\", 1.555], [\"MT\", 1.358], [\"AU\", 1.533], [\"AT\", 1.458], [\"RW\", 1.492], [\"PT\", 1.643],\n\t\t\t\t[\"IT\", 1.311], [\"CA\", 1.450], [\"RS\", 1.662], [\"JP\", 1.906], [\"CH\", 1.982], [\"UA\", 2.031], [\"GR\", 2.254], [\"HR\", 2.480], [\"AE\", 2.528], [\"SA\", 3.146],\n\t\t\t\t[\"CZ\", 3.141], [\"MA\", 3.463], [\"BA\", 3.372], [\"TR\", 3.855], [\"KW\", 3.962], [\"IE\", 3.908], [\"RU\", 4.226], [\"GW\", 4.364], [\"CY\", 4.507], [\"IN\", 4.429],\n\t\t\t\t[\"EE\", 4.731], [\"TH\", 5.278], [\"AZ\", 5.346], [\"ET\", 5.408], [\"LR\", 5.427], [\"BR\", 5.733], [\"BY\", 5.876], [\"HU\", 5.700], [\"BG\", 5.889], [\"LV\", 6.046],\n\t\t\t\t[\"IS\", 5.977], [\"MX\", 5.836], [\"HK\", 6.303], [\"QA\", 6.512], [\"RO\", 6.256], [\"ZA\", 6.521], [\"MK\", 6.507], [\"NG\", 6.732], [\"SI\", 6.628], [\"CO\", 6.704],\n\t\t\t\t[\"ID\", 6.663], [\"GH\", 6.729], [\"ME\", 6.664], [\"SK\", 6.997], [\"SG\", 7.075], [\"IR\", 6.982], [\"CV\", 7.055], [\"TZ\", 7.387], [\"EG\", 7.103], [\"PK\", 7.227],\n\t\t\t\t[\"CI\", 7.095], [\"CL\", 7.456], [\"KE\", 7.347], [\"LT\", 7.342], [\"BD\", 7.443], [\"VN\", 7.294], [\"BM\", 7.295], [\"SV\", 7.663], [\"CD\", 7.553], [\"KH\", 7.745],\n\t\t\t\t[\"KR\", 7.645], [\"LU\", 7.644], [\"TT\", 7.485], [\"DM\", 7.623], [\"VC\", 7.827], [\"HN\", 7.674], [\"AO\", 7.894], [\"IL\", 7.802], [\"OM\", 7.864], [\"MD\", 7.869],\n\t\t\t\t[\"LS\", 7.979], [\"MU\", 7.795], [\"MY\", 7.894], [\"MM\", 8.032], [\"GN\", 8.054], [\"NE\", 7.912], [\"SJ\", 7.821], [\"AR\", 7.762], [\"BS\", 7.991], [\"LC\", 8.080],\n\t\t\t\t[\"NI\", 7.828], [\"EC\", 7.901], [\"BO\", 7.706],\n\t\t\t],\n\t\t\t\"apiKey\": \"AIzaSyAFWd3IeJ83WwKdNSqs1NNTIyKniUREGjo\",\n\t\t\t\"options\": {\n\t\t\t\t\"colorAxis\": {\n\t\t\t\t\t\"colors\": [\"#d9ebfb\", \"#348fe2\"]\n\t\t\t\t},\n\t\t\t\t\"defaultColor\": \"#348fe2\",\n\t\t\t\t\"datalessRegionColor\": \"#348fe2\"\n\t\t\t}\n\t\t};\n\t}\n\n\tngOnInit() {\n\n\t}\n\n\tngOnDestroy() {\n\t}\n\n\tonTogglePanel(panelId: number) {\n\t\tthis.isPanelOpen[panelId] = !this.isPanelOpen[panelId]\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/flexmodel/flexmodel.view.component.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\nimport { ExportService } from '../../../service/export.service';\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { DateUtil } from '../../../util/date.util';\nimport {\n\tMediaMetadata,\n\tTopStreamedMediaMetadataListResponse,\n\tTopStreamedMediaRecord,\n\tViewersNumResponse } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n\tselector: 'flexmodelsetup-view',\n\ttemplate: require('./flexmodelsetup.view.component.html'),\n\tstyles: [require('./flexmodelsetup.view.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlexModelSetupView extends Localization {\n\n\tfieldTypeDropdown: Array<any>;\n\taddFieldDropdown: Array<any>;\n\tmodel: any;\n\tmodelAsJson: string;\n\tdimensions: Array<string>;\n\tmetricsByType: any;\n\n\tconstructor(\n\t\tpublic chartService: UsersAndViewsVsTimeService,\n\t\tpublic mediaAnalyticsService: MediaService,\n\t\tprivate exportService: ExportService,\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate user: UserService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tthis.fieldTypeDropdown = [\n\t\t\t{value: 'string', label: 'string'},\n\t\t\t{value: 'int', label: 'int'},\n\t\t\t{value: 'float', label: 'float'},\n\t\t\t{value: 'bool', label: 'bool'},\n\t\t\t{value: 'date', label: 'date'},\n\t\t\t{value: 'time', label: 'time'},\n\t\t\t{value: 'type', label: 'type'},\n\t\t\t{value: 'array.string', label: 'array.string'},\n\t\t\t{value: 'array.type', label: 'array.type'},\n\t\t];\n\t\tthis.addFieldDropdown = [\n\t\t\t{value: 0, label: 'Add basic field'},\n\t\t\t{value: 1, label: 'Add type field'}\n\t\t];\n\n\t\tthis.loadPredefinedJson('qoe');\n\t}\n\n\tpublic loadPredefinedJson(name: string) {\n\t\t// Do not reference data. Use copy of JSON.\n\t\tthis.model = JSON.parse(JSON.stringify(require('./data/'+name+'.json')));\n\t\tthis.modelAsJson = JSON.stringify(this.model, null, 2);\n\t\tthis.addParentsToModel(this.model);\n\t\tthis.dimensions = this.loadDimensions(this.model);\n\t\tthis.metricsByType = this.loadMetrics(this.model);\n\t\tthis.cdr.markForCheck();\n\t}\n\n\taddParentsToModel(model: any) {\n\t\tlet root = {\n\t\t\ttype: 'datapoint',\n\t\t\tfields: model\n\t\t};\n\t\tlet queue = [root];\n\t\twhile(queue.length) {\n\t\t\tlet n:any = queue.shift();\n\t\t\tif(n.fields) {\n\t\t\t\tfor(let nn of n.fields) {\n\t\t\t\t\tnn.parent = n;\n\t\t\t\t\tqueue.push(nn);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tloadDimensions(model: any): Array<string> {\n\t\tlet dims = {\n\t\t\t'Date range': true\n\t\t};\n\t\tlet root = {\n\t\t\ttype: 'datapoint',\n\t\t\tfields: model\n\t\t};\n\t\tlet queue = [root];\n\t\twhile(queue.length) {\n\t\t\tlet n:any = queue.shift();\n\t\t\tif(n.fields) {\n\t\t\t\tfor(let f of n.fields) {\n\t\t\t\t\tqueue.push(f);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(n.name && (n.type != 'type') && (n.type != 'array.type') && (n.type != 'datapoint') && !n.aggregable) {\n\t\t\t\tlet name = n.name;\n\t\t\t\tif(n.parent && n.parent.typeName) {\n\t\t\t\t\tname = n.parent.typeName + '.' + name;\n\t\t\t\t}\n\t\t\t\tdims[name] = true;\n\t\t\t}\n\t\t}\n\t\tlet result = Object.keys(dims);\n\t\tresult.sort();\n\t\treturn result;\n\t}\n\n\tloadMetrics(model: any): any {\n\t\tlet aggrMetrics:any = {};\n\t\tlet datapointCountMetrics = [];\n\t\tlet countMetrics: any = {};\n\n\t\tlet root = {\n\t\t\ttype: 'datapoint',\n\t\t\tfields: model\n\t\t};\n\t\tlet queue = [root];\n\t\twhile(queue.length) {\n\t\t\tlet n:any = queue.shift();\n\t\t\tif(n.fields) {\n\t\t\t\tfor(let f of n.fields) {\n\t\t\t\t\tqueue.push(f);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(n.name && n.type == 'datapoint') {\n\t\t\t\tdatapointCountMetrics.push(n.name);\n\t\t\t}\n\t\t\tif(n.name && (n.type != 'type') && (n.type != 'array.type') && (n.type != 'datapoint') && !n.aggregable) {\n\t\t\t\tlet name = n.name;\n\t\t\t\tif(n.parent && n.parent.typeName) {\n\t\t\t\t\tname = n.parent.typeName + '.' + name;\n\t\t\t\t}\n\t\t\t\tcountMetrics[name] = true;\n\t\t\t}\n\t\t\tif(n.name && n.aggregable) {\n\t\t\t\tlet name = n.name;\n\t\t\t\tif(n.parent && n.parent.typeName) {\n\t\t\t\t\tname = n.parent.typeName + '.' + name;\n\t\t\t\t}\n\t\t\t\taggrMetrics[name] = true;\n\t\t\t}\n\t\t}\n\n\t\tlet aggrMetricsList = Object.keys(aggrMetrics);\n\t\taggrMetricsList.sort();\n\n\t\tlet countMetricsList = Object.keys(countMetrics);\n\t\tcountMetricsList.sort();\n\n\t\tdatapointCountMetrics.sort();\n\n\t\tlet result = {\n\t\t\t'aggr': aggrMetricsList,\n\t\t\t'count': countMetricsList,\n\t\t\t'datapoint': datapointCountMetrics,\n\t\t};\n\t\treturn result;\n\t}\n\n\tpublic exportToJson(): void {\n\t\tlet exportFileName = 'bradmax_flex_model.json';\n\t\tthis.exportService.exportFileFromJs(exportFileName, this.modelAsJson);\n\t}\n\n\n\tpublic loadJsonClick(): void {\n\t\tdocument.getElementById('flex_model_json_upload').click();\n\t}\n\n\tpublic handleJsonInput(files: Array<any>) {\n\t\t//Get the file object\n\t\tvar fileTobeRead = files[0];\n\n\t\t//Initialize the FileReader object to read the 2file\n\t\tvar fileReader = new FileReader();\n\t\tfileReader.onload = (e) => {\n\t\t\tthis.loadJson(fileReader.result)\n\t\t};\n\t\tfileReader.readAsText(fileTobeRead);\n\t}\n\n\tpublic loadJson(modelJson: string) {\n\t\ttry {\n\t\t\tthis.model = JSON.parse(modelJson);\n\t\t} catch(e) {\n\t\t\talert(\"Cannot parse JSON file. \" + e);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.modelAsJson = modelJson;\n\t\tthis.addParentsToModel(this.model);\n\t\tthis.dimensions = this.loadDimensions(this.model);\n\t\tthis.metricsByType = this.loadMetrics(this.model);\n\t\tthis.cdr.markForCheck();\n\t}\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/flexmodel/flexmodelsetup.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { TagInputModule } from 'ngx-chips';\nimport { Ng2GoogleChartsModule } from 'ng2-google-charts';\n\nimport { PagerModule } from '../component/pager/pager.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { FlexModelView } from './flexmodel.view.component';\nimport { FlexModelSetupView } from './flexmodelsetup.view.component';\nimport { ChartComponent } from '../component/charts/chart.component';\nimport { ChartRealtimeComponent } from '../component/charts/chart.realtime.component';\nimport { ChartGranularityComponent } from '../component/charts/chart.granularity.component';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { MediaService } from '../../../service/analytics/media.service';\n\nexport const routes: Routes = [\n\t{ path: '', component: FlexModelView },\n\t{ path: 'setup', component: FlexModelSetupView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule,\n\t\tTagInputModule,\n\t\tPagerModule,\n\t\tNg2GoogleChartsModule,\n\t],\n\tdeclarations: [\n\t\tFlexModelView,\n\t\tFlexModelSetupView\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tUsersAndViewsVsTimeService,\n\t\tMediaService,\n\t]\n})\nexport class AnalyticsFlexmodelModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/flexmodel/flexmodel.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport { Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { SidebarService } from '../../../service/sidebar.service';\nimport { Router } from '@angular/router'\nimport { ViewService } from '../../../service/view.service';\n\n\n@Component({\n\tselector: 'heartbeat-view',\n\ttemplate: require('./heartbeat.view.component.html'),\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HeartbeatViewComponent extends Localization {\n\n\tconstructor(\n\t\tpublic router: Router,\n\t\tpublic sidebar: SidebarService,\n\t\tpublic view: ViewService,\n\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\t}\n\n\tonShow(_option: any) {\n\t\tthis.router.navigate(['admin', 'analytics', 'heartbeat', _option]);\n\t\tthis.view.setHeartBeatMode(true);\n\t\tthis.sidebar.close();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/heartbeat/heartbeat.view.component.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy, ViewChild, AfterViewInit } from '@angular/core';\nimport { Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { HostListener } from \"@angular/core\";\n\nimport { SidebarService } from '../../../service/sidebar.service';\nimport { Router } from '@angular/router'\nimport { ViewService } from '../../../service/view.service';\nimport moment from 'moment';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { GeoGranularityType } from '../st/component/geo-picker/geo.model';\nimport { DropdownModel } from '../../form/dropdown/dropdown.model';\nimport { PagesService } from '../../../service/analytics/pages.service';\n\n\n@Component({\n\tselector: 'panic-dashboard-view',\n\ttemplate: require('./panicdashboard.view.component.html'),\n\tstyles: [\n\t\t``\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PanicDashboardViewComponent extends Localization implements OnInit, OnDestroy, AfterViewInit {\n\tbrowser24hErrorRate: any;\n\tOS24hErrorRate: any;\n\tall24hErrorRate: any;\n\tleftChartHeight = '0px';\n\trightPanelHeight = '0px';\n\n\tmapChartData: any;\n\tmapChartRegionsSkippingsSet: any;\n\tgeoData: any;\n\t// mapColorRange = ['#d9ebfb', '#348fe2'];\n\tmapColorRange = ['#AABBFF', '#348fe2'];\n\tmaterial_error_rate: any;\n\tos_error_rate: any;\n\tbrowser_error_rate: any;\n\n\tprivate countriesList: DropdownModel[];\n\n\tprivate activeGeoType: GeoGranularityType = 'region' ;\n\n\tprivate selectedCountry = 'All';\n\n\t@ViewChild('divBrowserERTable') divBrowserERTable: any;\n\t@ViewChild('divOSERTable') divOSERTable: any;\n\t@ViewChild('divGeoTable') divGeoTable: any;\n\n\t@HostListener('window:resize')\n\tgetScreenSize() {\n\t\t/*this.techChartHeight = Math.floor((window.innerHeight - 170)/3).toString()+'px';\n\t\tthis.topMatChartHeight = Math.floor((window.innerHeight - (80 + this.NUMBER_OF_TOP_MATERIAL_CHARTS * 15))/this.NUMBER_OF_TOP_MATERIAL_CHARTS).toString()+'px';\n\t\tthis.leftChartHeight = Math.floor((window.innerHeight - (95))/4).toString()+'px';*/\n\t\t\n\t\t// console.log('os:',this.divOSERTable.nativeElement.scrollHeight);\n\t\t// console.log('browser: ',this.divBrowserERTable.nativeElement.scrollHeight);\n\t\tthis.leftChartHeight =   ((window.innerHeight- ( this.divOSERTable.nativeElement.scrollHeight +\n\t\t\t\t\t\t\t\t\t\t\t\t\t   this.divBrowserERTable.nativeElement.scrollHeight +30))/3 - 20).toString()+'px';\n\t\tthis.rightPanelHeight = (window.innerHeight - 20).toString()+'px';\n\t\tsetTimeout(() => { this.loadMapData();},50);\n\t\tsetTimeout(() => { this.cdr.markForCheck();},20);\n\t}\n\tconstructor(\n\t\tpublic pagesService: PagesService,\n\t\tpublic analyticsService: AnalyticsService,\n\t\tpublic mediaAnalyticsService: MediaService,\n\t\tpublic router: Router,\n\t\tpublic sidebar: SidebarService,\n\t\tpublic view: ViewService,\n\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\t}\n\t\n\tngAfterViewInit() {\n\t\tthis.getScreenSize();\n\t}\n\n\tngOnInit() {\n\t\tthis.loadMockData();\n\t\t// this.loadMapData();\n\t\tthis.loadCountriesList();\n\t\tthis.loadMaterialER();\n\t\tthis.loadOSER();\n\t\tthis.lodadBrowserER();\n\t}\n\n\tloadMaterialER() {\n\t\tthis.material_error_rate = new Array(0);\n\t\tfor (let _i = 0; _i< 26; _i ++){\n\t\t\tthis.material_error_rate.push(\n\t\t\t\t{id: (_i*2+1).toString(),\n\t\t\t\t title: 'Material#'+Math.floor(Math.random()*100).toString(),\n\t\t\t\t error_rate: _i*10});\n\t\t}\n\t}\n\n\tloadOSER(){\n\t\tthis.os_error_rate = new Array(0);\n\t\tfor (let _i = 0; _i< 5; _i ++){\n\t\t\tthis.os_error_rate.push(\n\t\t\t\t{os: \"opSys\"+(_i*2).toString(),\n\t\t\t\t error_rate: Math.floor(Math.random()*100).toString()+\"%\"});\n\t\t}\n\t}\n\n\tlodadBrowserER() {\n\t\tthis.browser_error_rate = new Array(0);\n\t\tfor (let _i = 0; _i< 5; _i ++){\n\t\t\tthis.browser_error_rate.push(\n\t\t\t\t{browser: \"browser\"+(_i*2).toString(),\n\t\t\t\t error_rate: Math.floor(Math.random()*100).toString()+\"%\"});\n\t\t}\n\t}\n\n\tloadCountriesList() {\n\t\tthis.countriesList = null;\n\n\t\tthis.pagesService.listOfCountries().subscribe((data: any) => {\n\t\t\tthis.countriesList = this.parseGeoData(data);\n\t\t\t// this.isCountrySelectorVisible = true; \n\t\t\t// console.log('countries',this.countriesList);\n\t\t\tsetTimeout(() => { this.cdr.markForCheck();},20);\n\t\t\tthis.loadMapData();\n\t\t\t// console.log(data);\n\t\t});\n\t}\n\n\tloadMapData() {\n\n\n\t\tlet selectedCountryCode =\"PL\";//this.countryCode.toUpperCase();\n\t\tlet regionsMapChartFix = require('../geo/geo.country.view.regions.fix.json');\n\n\t\tthis.mapChartRegionsSkippingsSet = regionsMapChartFix.skippingSet;\n\n\t\tlet mapChartResolution = (selectedCountryCode in this.mapChartRegionsSkippingsSet) ? 'countries': 'provinces';\n\n\t\tthis.geoData = new Array(0);\n\t\tlet geoDataTable = new Array(0);\n\t\tgeoDataTable.push([\"Region\",\"Value\"]);\n\t\tlet statValue = 0;\n\n\t\ttry {\n\t\t\t\t// zaladowanie danych na poziome country\n\t\t\t\tfor (let _i = 1; _i < this.countriesList.length; _i++ ) {\n\t\t\t\t\tstatValue = Math.round(Math.random()*10000);\n\t\t\t\t\tgeoDataTable.push([ this.countriesList[_i].value, statValue ]);\n\t\t\t\t\tthis.geoData.push({ country: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname: this.countriesList[_i].label, \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcode: this.countriesList[_i].value \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}, \n\t\t\t\t\t\t\t\t\t\t\t\t\t\tflag: \"flag-icon flag-icon-\"+this.countriesList[_i].value.toLowerCase(),\n\t\t\t\t\t\t\t\t\t\t\t\t\t  views: statValue });\n\t\t\t\t}\t\n\t\t\t\t// this.pagingOptions.total_items = this.countriesList.length;\n\n\t\t\t\tif (this.selectedCountry != 'All') {\n\t\t\t\t\tthis.geoData = new Array(0);\n\t\t\t\t\t// this.pagingOptions.page = 1;\n\t\t\t\t\t// this.pagingOptions.total_items = 100;\n\t\t\t\t\tfor (let _i = 1; _i < 100; _i++ ) {\n\t\t\t\t\t\tstatValue = Math.round(Math.random()*10000);\n\t\t\t\t\t\tthis.geoData.push({ country: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tname: \"Region # \"+_i.toString(), \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcode: _i.toString() \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}, \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tflag: \"flag-icon\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tviews: statValue });\n\t\t\t\t\t}\t\n\t\t\t\t\t// console.log(this.geoData);\n\t\t\t\t}\n\t\t} catch(_e) { /*console.log(_e) */}\n\n\t\tthis.mapChartData = {\n\t\t\tchartType: 'GeoChart',\n\t\t\t// dataTable: this.makeRegionDataForMapChart(selectedCountryCode, data),\n\t\t\tapiKey: this.analyticsService.getGoogleMapsApiKey(),\n\t\t\tdataTable: geoDataTable,\n\t\t\toptions: {\n\t\t\t\tbackgroundColor:  '#575d63',\n\t\t\t\tcolorAxis: {colors: this.mapColorRange}\n\t\t\t}\n\t\t};\n\n\t\tif (this.selectedCountry != 'All') {\n\t\t\tthis.mapChartData.options.resolution = mapChartResolution;\n\t\t\tthis.mapChartData.options.region = this.selectedCountry;\n\t\t\tif (this.activeGeoType == \"city\") {\n\t\t\t\tthis.mapChartData.options.displayMode = 'markers';\n\t\t\t} \n\t\t}\n\t\t// console.log('this.mapChartData', this.mapChartData);\n\t}\n\n\tloadMockData(){\n\n\t\tlet endDate = moment().startOf('day');\n\t\tlet startDate = endDate.clone().subtract(30, 'days');\n\t\tlet labels = new Array(0);\n\t\tlet datadata = new Array(0);\n\t\tfor (let _i = 0; _i< 6; _i++) {\n\t\t\tdatadata.push(new Array(0));\n\t\t}\n\n\t\tthis.mediaAnalyticsService.getMediaViewsHistory(\n\t\t\t'MEDIA_ID_1', startDate, endDate, 'day')\n\t\t\t\t.subscribe((data: any) => {\n\t\t\t\tdata.data.label = 'label';\n\t\t\t\t// data.data.fill = false;\n\n\n\t\t\t\tfor (let _i = 0; _i< data.labels.length; _i++) {\n\t\t\t\t\tlabels.push (_i.toString())\n\t\t\t\t\tfor (let _i = 0; _i< 5; _i++) {\n\t\t\t\t\t\tdatadata[_i].push(Math.floor(Math.random()*100));\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\tlet data0 = Object.assign([],data.data);\n\t\t\t\tlet data1 = Object.assign([],data.data);\n\t\t\t\tlet data2 = Object.assign([],data.data);\n\t\t\t\tlet data3 = Object.assign([],data.data);\n\t\t\t\tlet data4 = Object.assign([],data.data);\n\t\t\t\tlet data5 = Object.assign([],data.data);\n\t\t\t\tdata1.data = datadata[0];\n\t\t\t\tdata2.data = datadata[1];\n\t\t\t\tdata3.data = datadata[2];\n\t\t\t\tdata4.data = datadata[3];\n\t\t\t\tdata5.data = datadata[4];\n\t\t\t\tdata1.fill = true;\n\t\t\t\t// avg\n\t\t\t\tlet values = new Array(0);\n\t\t\t\tvalues = Object.assign([],datadata[0]);\t\t\t\t\n\t\t\t\tlet sum = values.reduce((previous, current) => current += previous);\n\t\t\t\tlet avg = sum / values.length;\n\t\t\t\tfor (let _i = 0; _i< data.labels.length; _i++) {\n\t\t\t\t\tdatadata[5].push(avg);\n\t\t\t\t}\n\n\t\t\t\tdata0.data = datadata[5];\n\n\t\t\t\tthis.all24hErrorRate = {\n\t\t\t\t\tdata: [data1, data0],\n\t\t\t\t\t// data:  datadata,\n\t\t\t\t\tlabels: labels,\n\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\tendDate: endDate,\n\t\t\t\t\t// chartType: 'lineTime',\n\t\t\t\t\tchartType: 'line',\n\t\t\t\t\tgranularity: 'day'\n\t\t\t\t};\n\t\t\t\t//let d2 =data.data.\n\t\t\t\tthis.browser24hErrorRate = {\n\t\t\t\t\tdata: [data5, data2, data3],\n\t\t\t\t\tlabels: labels,\n\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\tendDate: endDate,\n\t\t\t\t\t// chartType: 'lineTime',\n\t\t\t\t\tchartType: 'line',\n\t\t\t\t\tgranularity: 'day'\n\t\t\t\t}\n\n\t\t\t\tthis.OS24hErrorRate = {\n\t\t\t\t\tdata: [data5, data4, data3],\n\t\t\t\t\tlabels: labels,\n\t\t\t\t\tstartDate: startDate,\n\t\t\t\t\tendDate: endDate,\n\t\t\t\t\t// chartType: 'lineTime',\n\t\t\t\t\tchartType: 'line',\n\t\t\t\t\tgranularity: 'day'\n\t\t\t\t}\n\t\t\t\t// this.browser24hErrorRate.data[1].data = datadata[1];\n\t\t\t\t// console.log(this.browser24hErrorRate.data);\n\t\t\t\t// this.previewFilledStats = this.all24hErrorRate;\n\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\n\t// this.chartService.onDateRangeChange([startDate,endDate]);\n\t// this.chartService.loadData();\n\t// this.cdr.markForCheck();\n\n\t}\n\n\tngOnDestroy() {\n\n\t}\n\n\n\tonShowHeartbeat() {\n\t\tthis.router.navigate(['admin', 'analytics', 'heartbeat']);\n\t\tthis.view.setHeartBeatMode(false);\n\t\tthis.sidebar.openDefault();\n\t}\n\t\n\tparseGeoData(_data: any): DropdownModel[] {\n\t\tlet result: DropdownModel[];\n\t\tif (_data.length == 0) {\n\t\t\treturn [{ value: '', label: ''}];\n\t\t}\n\t\tresult = new Array(0);\n\t\tresult.push( { value: 'All', label: 'All' } );\n\t\tfor (let _i = 0; _i < _data.length; _i++ ){\n\t\t\tif (!(_data[_i].code == null)) {\n\t\t\t\t// when filed CODE comes -> country data\n\t\t\t\tresult.push( { value: _data[_i].code, label: _data[_i].name } );\n\t\t\t} else if (!(_data[_i].id == null)) {\n\t\t\t\t// when CODE field not comes, filed ID is expected, -> city and regione data comes\n\t\t\t\tresult.push( { value: _data[_i].id, label: _data[_i].name } );\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/heartbeat/panicdashboard.view.component.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit, OnDestroy } from '@angular/core';\nimport { Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { SidebarService } from '../../../service/sidebar.service';\nimport { Router } from '@angular/router'\nimport { ViewService } from '../../../service/view.service';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport {\n\t// MediaMetadata,\n\tTopStreamedMediaMetadataListResponse,\n\t// TopStreamedMediaRecord,\n\tViewersNumResponse } from '../../../model/api.model';\n\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport moment from 'moment';\nimport { stringify } from 'querystring';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { HostListener } from \"@angular/core\";\n\n@Component({\n\tselector: 'war-room-view',\n\ttemplate: require('./warroom.view.component.html'),\n\tstyles: [\n\t\t``\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class WarroomViewComponent extends Localization implements OnInit, OnDestroy {\n\tNUMBER_OF_TOP_MATERIAL_CHARTS = 10;\n\tLENGTH_OF_TOP_METERIAL_BUFFER = 20;\n\t\n\tSEC = 's';\n\tMIN = 'm'\n\t\n\tREFRESH_DATA_PERIOD = 1000;\n\tREFRESH_24_DATA_PERIOD = 60000;\n\ttechChartHeight = '100px';\n\ttopMatChartHeight = '50px';\n\tleftChartHeight = '200px';\n\n\tchartDataDevice: any;\n\tchartLabelsDevice: any;\t\n\tchartDataBrowser: any;\n\tchartLabelsBrowser: any;\n\tchartDataOs: any;\n\tchartLabelsOs: any;\n\n\n\t@HostListener('window:resize')\n\tgetScreenSize() {\n\t\tthis.techChartHeight = Math.floor((window.innerHeight - 170)/3).toString()+'px';\n\t\tthis.topMatChartHeight = Math.floor((window.innerHeight - (80 + this.NUMBER_OF_TOP_MATERIAL_CHARTS * 15))/this.NUMBER_OF_TOP_MATERIAL_CHARTS).toString()+'px';\n\t\tthis.leftChartHeight = Math.floor((window.innerHeight - (95))/4).toString()+'px';\n\t}\n\t\n\taudienceWatchingUsersNum: number;\n\taudienceMinutesChart: any;\n\taudienceSecondsChart: any;\n\n\tselectedMediaMinutesChart: any;\n\tselectedMediaSecondsChart: any;\n\tselectedMediaMetadata: any;\n\n\ttodaysViews: string = '0';\n\ttodaysUsers: string = '0';\n\tyesterdayUsers: string = '0';\n\tyesterdayViews: string = '0';\n\tviewsPerUsers24: string = '0';\n\tavgWatchingTime24: string = '0';\n\n\tchartData: Array<chartjs.BaseDataset>;\n\tchartLabels: Array<string>;\n\tupdateNum: number;\n\tupdateDataTimer: any;\n\n\ttopMediaListTotalLength: number | null;\n\ttopMediaListLoading: boolean;\n\ttopMediaListPagingOptions: any;\n\ttopMediaList: Array<any> | null;\n\tmediaMetadataByMaterialId: Map<string, any>;\n\n\trange: [moment.Moment, moment.Moment];\n\n\tconstructor(\n\t\tpublic chartService: UsersAndViewsVsTimeService,\n\t\tpublic router: Router,\n\t\tpublic sidebar: SidebarService,\n\t\tpublic view: ViewService,\n\t\tpublic analyticsService: AnalyticsService,\n\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\n\t\tthis.audienceWatchingUsersNum = 0;\n\t\tthis.audienceMinutesChart = { data:[], labels:[] };\n\t\tthis.audienceSecondsChart = { data:[], labels:[] };\n\n\t\t/*\n\t\tthis.selectedMediaMinutesChart = { data:[], labels:[] };\n\t\tthis.selectedMediaSecondsChart = { data:[], labels:[] };\n\t\tthis.selectedMediaMetadata = null;\n\t\t*/\n\t\tthis.selectedMediaMinutesChart = new Array(0); // { data:[], labels:[] };\n\t\tthis.selectedMediaSecondsChart = new Array(0); // { data:[], labels:[] };\n\t\tthis.selectedMediaMetadata = new Array(0); // null;\n\n\n\t\tthis.mediaMetadataByMaterialId = new Map<string, any>();\n\t\tthis.topMediaListTotalLength = null;\n\t\tthis.topMediaList = null;\n\t\tthis.topMediaListLoading = false;\n\t\tthis.topMediaListPagingOptions = {\n\t\t\tpage: 1,\n\t\t\tpage_size: this.LENGTH_OF_TOP_METERIAL_BUFFER\n\t\t};\n\n\t\tthis.updateNum = 0;\n\t\tthis.updateDataTimer = setInterval(() => this.updateData(), this.REFRESH_DATA_PERIOD);\n\n\t\tthis.chartService.getChartDataChanges().subscribe((data) => this.cdr.markForCheck());\n\t}\n\n\tngOnInit() {\n\t\tthis.techChartHeight = Math.floor((window.innerHeight - 170)/3).toString()+'px';\n\t\tthis.topMatChartHeight = Math.floor((window.innerHeight - (40 + 40 + this.NUMBER_OF_TOP_MATERIAL_CHARTS * 15 ))/this.NUMBER_OF_TOP_MATERIAL_CHARTS).toString()+'px';\n\t\tthis.leftChartHeight = Math.floor((window.innerHeight - (95))/4).toString()+'px';\n\n\t\tthis.loadData();\n\t\tthis.loadStats();\n\t}\n\n\tngOnDestroy() {\n\t\tif(this.updateDataTimer) {\n\t\t\tclearInterval(this.updateDataTimer);\n\t\t\tthis.updateDataTimer = null;\n\t\t}\n\t}\n\n\tprivate loadData() {\n\t\tthis.audienceMinutesChart = {data:[], labels:[]};\n\t\tthis.audienceSecondsChart = {data:[], labels:[]};\n\n\t\tfor(let i=0; i < 60; i++) {\n\t\t\tthis.audienceMinutesChart.labels.push('- ' + (60 - i) + this.MIN);\n\t\t\tthis.audienceSecondsChart.labels.push('- ' + (60 - i) + this.SEC);\n\t\t}\n\n\t\tthis.audienceMinutesChart.data.push({\n\t\t\tdata: this.generateInitialData(60),\n\t\t\tlabel: 'Watching users'\n\t\t});\n\n\t\tlet dataForSeconds = this.generateInitialData(60);\n\t\tthis.audienceSecondsChart.data.push({\n\t\t\tdata: dataForSeconds,\n\t\t\tlabel: 'Watching users'\n\t\t});\n\n\t\tthis.loadTopMediaList();\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate loadStats(): void {\n\t\tlet endDate = moment().startOf('day');\n\t\tlet startDate = endDate.clone().subtract(1, 'day');\n\n\t\tthis.analyticsService.getAudienceHistoryForRange(startDate, endDate, 'day').subscribe(\n\t\t\t(data) => {\n\t\t\t\ttry{\n\t\t\t\t\tthis.todaysUsers = data[0].users;\n\t\t\t\t\tthis.todaysViews = data[0].views;\n\t\t\t\t\tthis.yesterdayUsers = data[1].users;\n\t\t\t\t\tthis.yesterdayViews = data[1].views;\n\t\t\t\t} catch { }\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\n\t\t\tthis.analyticsService.getAudienceHistoryForRange(startDate, endDate, 'hour').subscribe(\n\t\t\t\t(data) => {\n\t\t\t\t\tlet todayData = new Array(0);\n\t\t\t\t\tlet yesterdayData = new Array(0);\n\t\t\t\t\tthis.chartLabels = new Array<string>(0);\n\t\t\t\t\tthis.chartData = new Array<chartjs.BaseDataset>();\n\t\t\t\t\tfor (let _i = 0; _i< data.length/2; _i++) {\n\t\t\t\t\t\ttodayData.push(data[_i].views);\n\t\t\t\t\t\tyesterdayData.push(data[_i+data.length/2].views);\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (_i % 2 == 0 ) {\n\t\t\t\t\t\t\tthis.chartLabels.push((-data.length/2+_i).toString()+'h');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.chartLabels.push(' ');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.chartData.push({data: todayData, label:'Today'});\n\t\t\t\t\tthis.chartData.push({data: yesterdayData, label: 'Yesterday'});\n\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t});\n\n\n\t\tlet endMoment = moment().startOf('hour');\n\t\tlet beginMoment = endMoment.clone().subtract(24, 'hour');\t\n\t\tthis.analyticsService.getAudienceSummaryForRange(beginMoment, endMoment, 'hour').subscribe(\n\t\t\t(data) => {\n\t\t\t\tthis.viewsPerUsers24 = Number(parseFloat(data.views) / parseFloat(data.users)).toString();\n\t\t\t\tthis.avgWatchingTime24 = Number(parseFloat(data.watching_time) / parseFloat(data.users)).toString() ;\n\t\t\t}\n\t\t);\n\n\n\t\tlet colors = ChartConfigData.datasetColors;\n\t\tthis.chartDataDevice = new Array<chartjs.BaseDataset>();\n\t\tthis.chartLabelsDevice = new Array(0);\t\n\t\tthis.chartDataBrowser = new Array<chartjs.BaseDataset>();\n\t\tthis.chartLabelsBrowser = new Array(0);\n\t\tthis.chartDataOs = new Array<chartjs.BaseDataset>();\n\t\tthis.chartLabelsOs = new Array(0);\n\n\t\tthis.analyticsService.getTechnologyStatsFor24h(beginMoment).subscribe((data) => {\n\n\t\t\tlet chartbgcolor: any;\n\t\t\tlet chartlbcolor: any;\n\t\t\tlet chdata: any;\n\t\t\t\t// device\n\t\t\t\tchartbgcolor = new Array(0);\n\t\t\t\tchartlbcolor = new Array(0);\n\t\t\t\tchdata = new Array(0);\n\n\t\t\t\tfor (let _i = 0; _i < data.device_type.summary.length; _i++) {\n\t\t\t\t// for (let _i = data.device_type.summary.length - 24; _i < data.device_type.summary.length; _i++) {\n\t\t\t\t\tchartbgcolor.push('rgba('+colors[_i % colors.length][0]+','+colors[_i % colors.length][1]+','+colors[_i % colors.length][2]+',0.8)');\n\t\t\t\t\tchartlbcolor.push('rgba('+colors[_i % colors.length][0]+','+colors[_i % colors.length][1]+','+colors[_i % colors.length][2]+',1)');\n\t\t\t\t\tchdata.push(data.device_type.summary[_i].views);\n\t\t\t\t\tthis.chartLabelsDevice.push(data.device_type.summary[_i].device_type_name);\n\t\t\t\t}\n\t\t\t\tthis.chartDataDevice = new Array<chartjs.BaseDataset>();\n\t\t\t\t\n\t\t\t\tthis.chartDataDevice.push({\n\t\t\t\t\tbackgroundColor : chartbgcolor,\n\t\t\t\t\tborderColor : chartlbcolor,\n\t\t\t\t\tdata : chdata\n\t\t\t\t});\n\n\t\t\t\t// browser\n\t\t\t\tchartbgcolor = new Array(0);\n\t\t\t\tchartlbcolor = new Array(0);\n\t\t\t\tchdata = new Array(0);\n\n\t\t\t\tfor (let _i = 0; _i < data.browser_family.summary.length; _i++) {\n\t\t\t\t\tchartbgcolor.push(this.colorArrToRgbaStr(colors[_i % colors.length], 0.8));\n\t\t\t\t\tchartlbcolor.push(this.colorArrToRgbaStr(colors[_i % colors.length], 1.0));\n\t\t\t\t\tchdata.push(data.browser_family.summary[_i].views);\n\t\t\t\t\tthis.chartLabelsBrowser.push(data.browser_family.summary[_i].browser_family_name);\n\t\t\t\t}\n\n\t\t\t\tthis.chartDataBrowser = new Array<chartjs.BaseDataset>();\n\t\t\t\tthis.chartDataBrowser.push({\n\t\t\t\t\tbackgroundColor : chartbgcolor,\n\t\t\t\t\tborderColor : chartlbcolor,\n\t\t\t\t\tdata : chdata\n\t\t\t\t});\n\n\t\t\t\t//os\n\t\t\t\tchartbgcolor = new Array(0);\n\t\t\t\tchartlbcolor = new Array(0);\n\t\t\t\tchdata = new Array(0);\n\n\t\t\t\tfor (let _i = 0; _i < data.os_family.summary.length; _i++) {\n\t\t\t\t\tchartbgcolor.push(this.colorArrToRgbaStr(colors[_i % colors.length], 0.8));\n\t\t\t\t\tchartlbcolor.push(this.colorArrToRgbaStr(colors[_i % colors.length], 1.0));\n\t\t\t\t\tchdata.push(data.os_family.summary[_i].views);\n\t\t\t\t\tthis.chartLabelsOs.push(data.os_family.summary[_i].os_family_name);\n\t\t\t\t}\n\n\t\t\t\tthis.chartDataOs = new Array<chartjs.BaseDataset>();\n\t\t\t\tthis.chartDataOs.push({\n\t\t\t\t\tbackgroundColor : chartbgcolor,\n\t\t\t\t\tborderColor : chartlbcolor,\n\t\t\t\t\tdata : chdata\n\t\t\t\t});\n\n\t\t\tthis.cdr.markForCheck();\n\n\t\t});\t\n\t}\n\t\n\tprivate colorArrToRgbaStr(colorArr: Array<number>, alpha: number) {\n\t\treturn 'rgba('+colorArr[0]+','+colorArr[1]+','+colorArr[2]+',' + alpha + ')';\n\t}\n\n\tprivate updateData() {\n\t\tthis.updateNum++;\n\t\tthis.updateAudienceData();\n\t\tif(this.updateNum % 10 == 0) {\n\t\t\tthis.loadTopMediaList();\t\n\t\t}\n\t\tif(this.updateNum % 300 == 0) {\n\t\t\tthis.loadStats();\n\t\t}\n\n\t\tfor (let _i = 0; _i < this.topMediaList.length; _i++){\n\t\t\t//this.updateSelectedMediaStats(_i);\n\t\t\tthis.updateSelectedMediaStats(this.topMediaList[_i].media.material_id);\n\t\t\t\n\t\t}\n\t\tthis.cdr.markForCheck();\n\t}\n\n\n\n\tprivate updateAudienceData() {\n\t\tif(!this.audienceMinutesChart\n\t\t\t|| !this.audienceMinutesChart.data\n\t\t\t|| (this.audienceMinutesChart.data.length == 0)\n\t\t\t|| (this.audienceMinutesChart.data[0].data.length == 0)\n\t\t\t|| (this.audienceSecondsChart.data.length == 0)\n\t\t\t|| (this.audienceSecondsChart.data[0].data.length == 0)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.analyticsService.getRealtimeAccountViewersNum().subscribe((data: ViewersNumResponse) => {\n\t\t\tif(this.updateNum % 60 == 0) {\n\n\t\t\t\t// Update audienceMinutes.\n\t\t\t\tlet samples = this.audienceSecondsChart.data[0].data.slice();\n\t\t\t\tlet lastMinuteSum = 0;\n\t\t\t\tfor(let v of samples) {\n\t\t\t\t\tlastMinuteSum += v;\n\t\t\t\t}\n\t\t\t\tthis.chartPushValue(this.audienceMinutesChart, Math.ceil(lastMinuteSum / 60));\n\t\t\t}\n\n\t\t\tthis.audienceWatchingUsersNum = data.viewers_num > 0 ? data.viewers_num : 0;\n\t\t\tthis.chartPushValue(this.audienceSecondsChart, this.audienceWatchingUsersNum);\n\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tprivate updateSelectedMediaStats(_i: any) {\n\t\tif(!this.selectedMediaMinutesChart[_i]\n\t\t\t|| !this.selectedMediaMetadata[_i]\n\t\t\t|| !this.selectedMediaMinutesChart[_i].data\n\t\t\t|| (this.selectedMediaMinutesChart[_i].data.length == 0)\n\t\t\t|| (this.selectedMediaMinutesChart[_i].data[0].data.length == 0)\n\t\t\t|| (this.selectedMediaSecondsChart[_i].data.length == 0)\n\t\t\t|| (this.selectedMediaSecondsChart[_i].data[0].data.length == 0)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.analyticsService.getRealtimeMediaViewersNum(this.selectedMediaMetadata[_i].material_id).subscribe((data: ViewersNumResponse) => {\n\t\t\tif(this.updateNum % 60 == 0) {\n\t\t\t\t// Update selected media minutes.\n\t\t\t\tlet samples = this.selectedMediaSecondsChart[_i].data[0].data.slice();\n\t\t\t\tlet lastMinuteSum = 0;\n\t\t\t\tfor(let v of samples) {\n\t\t\t\t\tlastMinuteSum += v;\n\t\t\t\t}\n\t\t\t\t//this.selectedMediaMinutesChart.data[0].pointRadius = 0;\n\t\t\t\tthis.chartPushValue(this.selectedMediaMinutesChart[_i], Math.ceil(lastMinuteSum / 60));\n\t\t\t}\n\n\t\t\tlet watchingUsers = data.viewers_num > 0 ? data.viewers_num : 0;\n\t\t\tthis.chartPushValue(this.selectedMediaSecondsChart[_i], watchingUsers);\n\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\t\n\n\tprivate loadTopMediaList() {\n\t\tthis.topMediaListLoading = true;\n\n\t\tthis.analyticsService.getRealtimeTopViewedMediaMetadataList(this.topMediaListPagingOptions).subscribe((data: TopStreamedMediaMetadataListResponse) => {\n\t\t\tthis.topMediaList = data.records;\n\t\t\tthis.topMediaListTotalLength = data.total_records;\n\t\t\tthis.mediaMetadataByMaterialId = new Map<string, any>();\n\t\t\tfor(let mm of data.records) {\n\t\t\t\tthis.mediaMetadataByMaterialId.set(mm.media.material_id, mm.media);\n\t\t\t}\n\n\t\t\t// Preselect first element if data any is available and there is no selected item.\n\t\t\t/*if((this.selectedMediaMetadata == null) && (this.topMediaList != null) && (this.topMediaList.length > 0)) {\n\t\t\t\tthis.selectMediaMetadata(this.topMediaList[0].media.material_id);\n\t\t\t}*/\n\n\t\t\t// this.selectedMediaMetadata = new Array(this.topMediaList.length);\n\t\t\t// this.selectedMediaMinutesChart = new Array(this.topMediaList.length);\n\t\t\t// this.selectedMediaSecondsChart = new Array(this.topMediaList.length);\n\t\t\tfor (let _i = 0; _i < this.topMediaList.length; _i++){\n\t\t\t\tthis.selectMediaMetadata(_i,this.topMediaList[_i].media.material_id);\n\t\t\t}\n\n\t\t\tthis.topMediaListLoading = false;\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\t\n\n\tprivate selectMediaMetadata(_i: number, materialId: string): void {\n\t\tif(this.selectedMediaMetadata[materialId] && (this.selectedMediaMetadata[materialId].material_id == materialId)) {\n\t\t\t// Skip selection if mediaMetadata was not updated.\n\t\t\treturn;\n\t\t}\n\n\t\t// Select new data.\n\t\tthis.selectedMediaMetadata[materialId] = this.mediaMetadataByMaterialId.get(materialId);\n\t\tfor (let _i = 0; _i < this.topMediaList.length; _i++){\n\t\t\tthis.loadSelectedMediaStats(this.topMediaList[_i].media.material_id);\n\t\t}\n\t}\n\n\tprivate loadSelectedMediaStats(_i: any) {\n\t\tthis.selectedMediaMinutesChart[_i] = {data:[], labels:[]};\n\t\tthis.selectedMediaSecondsChart[_i] = {data:[], labels:[]};\n\n\t\tfor(let i=0; i < 60; i++) {\n\t\t\tthis.selectedMediaMinutesChart[_i].labels.push('- ' + (60 - i) + this.MIN);\n\t\t\tthis.selectedMediaSecondsChart[_i].labels.push('- ' + (60 - i) + this.SEC);\n\t\t}\n\n\t\tthis.selectedMediaMinutesChart[_i].data.push({\n\t\t\tdata: this.generateInitialData(60),\n\t\t\tlabel: 'Watching users'\n\t\t});\n\n\t\tlet dataForSeconds = this.generateInitialData(60);\n\t\tthis.selectedMediaSecondsChart[_i].data.push({\n\t\t\tdata: dataForSeconds,\n\t\t\tlabel: 'Watching users'\n\t\t});\n\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate chartPushValue(chart: any, val: number) {\n\t\tlet samples = chart.data[0].data;\n\t\tsamples.shift();\n\t\tsamples.push(val);\n\t\tchart.data =  [{\n\t\t\t\tdata: samples,\n\t\t\t\tlabel: 'Watching users'\n\t\t}];\n\t}\n\n\tprivate generateInitialData(len: number ): Array<any> {\n\t\tlet result = [];\n\t\tfor(let i=0; i < len; i++) {\n\t\t\tresult.push(0);\n\t\t}\n\t\treturn result;\n\t}\n\n\tonShowHeartbeat() {\n\t\tthis.router.navigate(['admin', 'analytics', 'heartbeat']);\n\t\tthis.view.setHeartBeatMode(false);\n\t\tthis.sidebar.openDefault();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/heartbeat/warroom.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { Ng2GoogleChartsModule } from 'ng2-google-charts';\n\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { HeartbeatViewComponent } from './heartbeat.view.component';\nimport { HeatmapComponent } from '../component/heatmap/heatmap.component';\nimport { PanicDashboardViewComponent } from './panicdashboard.view.component';\nimport { WarroomViewComponent } from './warroom.view.component'\nimport { PagesService } from '../../../service/analytics/pages.service';\nimport { MediaService } from '../../../service/analytics/media.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\n\nexport const routes: Routes = [\n\t{ path: '', component: HeartbeatViewComponent },\n\t{ path: 'panicdashboard', component: PanicDashboardViewComponent },\n\t{ path: 'warroom', component: WarroomViewComponent },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule,\n\t\tNg2GoogleChartsModule\n\t],\n\tdeclarations: [\n\t\tHeartbeatViewComponent,\n\t\tPanicDashboardViewComponent,\n\t\tWarroomViewComponent,\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tPagesService,\n\t\tMediaService,\n\t\tUsersAndViewsVsTimeService,\n\t]\n})\nexport class AnalyticsHeartbeatModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/heartbeat/heartbeat.module.ts","import { Component, ChangeDetectorRef, ChangeDetectionStrategy, OnInit } from '@angular/core';\nimport {Localization, LocaleService, TranslationService} from 'angular-l10n';\nimport { DecimalPipe } from '@angular/common';\n\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { UrlService } from '../../../service/url.service';\nimport { GranularityType, ChartType } from '../component/charts/chart.model';\nimport { UserService } from '../../../service/user.service';\nimport { ChartConfigData } from '../component/charts/chart.component.config';\nimport { AccountTechStatsHistoryViewsRec,\n\tAccountTechStatsBrowserFamilySummaryRec,\n\tAccountTechStatsBrowserFamilyTopHistoryRec,\n\tAccountTechStatsBrowserFamilyReport,\n\tAccountTechStatsOsFamilySummaryRec,\n\tAccountTechStatsOsFamilyTopHistoryRec,\n\tAccountTechStatsOsFamilyReport,\n\tAccountTechStatsDeviceTypeSummaryRec,\n\tAccountTechStatsDeviceTypeTopHistoryRec,\n\tAccountTechStatsDeviceTypeReport,\n\tAccountTechStatsReport } from '../../../model/api.model';\n\nimport moment from 'moment';\n\n@Component({\n\tselector: 'analytics-info-view',\n\ttemplate: require('./info.view.component.html'),\n\tstyles: [\n\t\t':host .note {border-color: #b6c2c9;background: #e9edef;color: #5b6165;}',\n\t\t':host .client-token {margin: 50px 10px;text-align: center;font-size: 1.5rem;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsInfoView extends Localization implements OnInit {\n\tclientToken: string;\n\n\tconstructor(public locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic analyticsService: AnalyticsService,\n\t\tpublic urlService: UrlService,\n\t\tprivate user: UserService,\n\t\tprivate cdr: ChangeDetectorRef) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit() {\n\t\tthis.loadData();\n\t}\n\n\tprivate loadData() {\n\t\tthis.analyticsService.getClientToken().subscribe((data: string) => {\n\t\t\tthis.clientToken = data;\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/info/info.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { FormComponentsModule }from '../../form/form.module';\nimport { AnalyticsInfoView } from './info.view.component';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { ProductService } from '../../../service/product.service';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsInfoView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t],\n\tdeclarations: [\nAnalyticsInfoView\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tUsersAndViewsVsTimeService,\n\t\tProductService\n\t]\n})\nexport class AnalyticsInfoModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/info/info.module.ts","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, HostListener, Input, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\nimport { ChangeEvent, VirtualScrollerComponent } from 'ngx-virtual-scroller';\nimport { DOMUtil } from '../../../../../util/dom.util';\nimport { VirtualDropdownModel } from '../../model/virtual.dropdown.model';\n\nconst selector = `virtual-dropdown-popup`;\n@Component({\n\tselector,\n\ttemplate: require('./virtual.dropdown.popup.component.html'),\n\tstyles: [require('./virtual.dropdown.popup.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VirtualDropdownPopupComponent implements AfterViewInit {\n\n\t@HostBinding(`class`) readonly selector = selector;\n\t@Output() readonly scrolledToEnd = new EventEmitter<ChangeEvent>();\n\t@Output() readonly selected = new EventEmitter<VirtualDropdownModel>();\n\treadonly selectFromTemplate = this.emitSelected.bind(this);\n\n\t@Input() debug: string = null;\n\t@Input() itemHeigth = 30;\n\t@Input() itemTemplate: TemplateRef<{ item: VirtualDropdownModel; select: (item: VirtualDropdownModel) => void; }>;\n\t@Input() items: VirtualDropdownModel[];\n\n\t@Input() selectedItem: any; // VirtualDropdownModel | null;\n\n\tviewportItems: VirtualDropdownModel[];\n\tget listHeight() { if (!this.items) return 0; return Math.max(0, this.items.length * this.itemHeigth); }\n\n\t@ViewChild(VirtualScrollerComponent) private virtualScroller: VirtualScrollerComponent;\n\tprivate preSelectedItem: VirtualDropdownModel | null;\n\n\tconstructor(\n\t\tpublic cdr: ChangeDetectorRef,\n\t) { }\n\n\tngAfterViewInit() {\n\t\tif (!this.virtualScroller || !this.selectedItem)\n\t\t\treturn;\n\t\tthis.virtualScroller.scrollInto(this.selectedItem, true, -(this.itemHeigth / 2), 0);\n\t}\n\n\t@HostListener('document:keydown', ['$event'])\n\tdocumentKeyDown(e: KeyboardEvent) {\n\t\tif (!this.items || !this.virtualScroller) {\n\t\t\treturn;\n\t\t}\n\t\tswitch (e.key) {\n\t\t\tcase 'ArrowUp':\n\t\t\t\tDOMUtil.stopPropagation(e);\n\t\t\t\tconst preSelectedUpIndex = this.findPreSelectedIndex();\n\t\t\t\tif (preSelectedUpIndex === 0)\n\t\t\t\t\treturn;\n\t\t\t\tthis.preSelectedItem = this.items[preSelectedUpIndex - 1];\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\tthis.virtualScroller.scrollInto(this.preSelectedItem, true, -(this.itemHeigth / 2));\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowDown':\n\t\t\t\tDOMUtil.stopPropagation(e);\n\t\t\t\tconst preSelectedDownIndex = this.findPreSelectedIndex();\n\t\t\t\tif (preSelectedDownIndex === this.items.length - 1)\n\t\t\t\t\treturn;\n\t\t\t\tthis.preSelectedItem = this.items[preSelectedDownIndex + 1];\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\tthis.virtualScroller.scrollInto(this.preSelectedItem, true, -(this.itemHeigth / 2));\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\t\tDOMUtil.stopPropagation(e);\n\t\t\t\tif (!this.compareItems(this.preSelectedItem, this.selectedItem))\n\t\t\t\t\tthis.selected.emit(this.preSelectedItem);\n\t\t\t\tthis.preSelectedItem = null\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\tresetScroll() {\n\t\tif (!this.virtualScroller) return;\n\t\tthis.virtualScroller.scrollToIndex(0, true, 0, 0);\n\t}\n\n\temitSelected(item: VirtualDropdownModel) {\n\t\tif (!this.compareItems(item, this.selectedItem))\n\t\t\tthis.selected.emit(item);\n\t}\n\n\temitScrolledToEnd(v: ChangeEvent) { this.scrolledToEnd.emit(v); }\n\n\ttrackGeoListItem(_index: number, item: VirtualDropdownModel) { return item.uid; }\n\tcompareItems(a: VirtualDropdownModel, b: VirtualDropdownModel) { return a.uid === b.uid; }\n\n\ticonNgClass(o: VirtualDropdownModel) { return 'icon' in o && !!o.icon ? { [o.icon]: true } : null; }\n\n\titemNgClass(item: VirtualDropdownModel) {\n\t\treturn !item ? null : {\n\t\t\tdisabled: 'fetch' in item && !!item.fetch && !!item.fetch.loading,\n\t\t\tselected: (!!item && !!this.selectedItem ? item.uid === this.selectedItem.uid : false) || ('markSelected' in item && item.markSelected),\n\t\t\t[`pre-selected`]: (!!item && !!this.preSelectedItem ? item.uid === this.preSelectedItem.uid : false),\n\t\t\t[`separator-below`]: 'hasSeparatorBelow' in item && !!item.hasSeparatorBelow,\n\t\t};\n\t}\n\n\tupdateVieportItems(items: VirtualDropdownModel[]) {\n\t\tthis.viewportItems = items;\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate findPreSelectedIndex() {\n\t\tlet v = 0;\n\t\tif (!!this.preSelectedItem) {\n\t\t\tv = this.items.findIndex(i => i.uid === this.preSelectedItem.uid);\n\t\t} else if (!!this.selectedItem) {\n\t\t\tv = this.items.findIndex(i => i.uid === this.selectedItem.uid);\n\t\t}\n\t\treturn v;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/virtual/dropdown/component/popup/virtual.dropdown.popup.component.ts","/**\n * Created by mthk on 29/10/16.\n */\nexport class ColorpickerHsva {\n\tconstructor(public h: number, public s: number, public v: number, public a: number) { }\n}\nexport class ColorpickerHsla {\n\tconstructor(public h: number, public s: number, public l: number, public a: number) { }\n}\nexport class ColorpickerRgba {\n\tconstructor(public r: number, public g: number, public b: number, public a: number) { }\n}\nexport class ColorpickerSliderPosition {\n\tconstructor(public h: number, public s: number, public v: number, public a: number) { }\n}\nexport class ColorpickerSliderDimension {\n\tconstructor(public h: number, public s: number, public v: number, public a: number) { }\n}\n\nexport enum ColorpickerPosition { right, left, top, bottom, center }\nexport enum ColorpickerFormat { hex, rgba, hsla }\n\nexport type ColorpickerDialogConfig = {\n\theight?: number;\n\tposition?: ColorpickerPosition;\n\tpositionOffset?: number;\n\toutputFormat?: ColorpickerFormat;\n\tpositionRelativeToArrow?: boolean;\n};\n\nexport type ColorpickerUpdate = {\n\tformat: ColorpickerFormat;\n\tcolor: string;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/colorpicker.model.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\nimport { ChangeEvent } from 'ngx-virtual-scroller';\nimport { BehaviorSubject, Subscription } from 'rxjs';\nimport { DOMUtil } from '../../../../util/dom.util';\nimport { VirtualDropdownListDirection, VirtualDropdownModel } from '../model/virtual.dropdown.model';\nimport { VirtualDropdownPopupComponent } from './popup/virtual.dropdown.popup.component';\n\nconst selector = `virtual-dropdown`;\n@Component({\n\tselector,\n\ttemplate: require('./virtual.dropdown.component.html'),\n\tstyles: [require('./virtual.dropdown.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VirtualDropdownComponent implements OnInit, OnChanges, OnDestroy {\n\t@HostBinding(`class`) readonly selector = selector;\n\t@Output() readonly valueChange = new EventEmitter<any>();\n\t@Output() readonly selected = new EventEmitter<VirtualDropdownModel>();\n\t@Output() readonly scrolledToEnd = new EventEmitter<ChangeEvent>();\n\t@Output() readonly searchValueChange = new EventEmitter<string>();\n\t@Output() readonly filterValueChange = new EventEmitter<string>();\n\n\t@Input() debug: string = null;\n\n\t@Input() $: BehaviorSubject<VirtualDropdownModel[]>;\n\t@Input() value: any | null = null;\n\t@Input() searchValue: string | null = null;\n\t@Input() filterValue: string | null = null;\n\n\t@Input() itemHeigth = 30;\n\t@Input() itemTemplate: TemplateRef<{ item: VirtualDropdownModel; select: (item: VirtualDropdownModel) => void; }>;\n\t@Input() direction = VirtualDropdownListDirection.down;\n\n\t@HostBinding('class.with-search') @Input() withSearch = false;\n\t@Input() searchPlaceholder = 'search values';\n\n\t@Input() removeSelectedFromList = false;\n\t@HostBinding('class.with-filter') @Input() withFilter = false;\n\t@Input() filterPlaceholder = 'filter values';\n\t@Input() filterByKey: keyof VirtualDropdownModel = 'label';\n\n\t@HostBinding('class.disabled') @Input() disabled = false;\n\t@HostBinding('class.active') active = false;\n\t@HostBinding('class.up') get isDirUp() { return this.direction === VirtualDropdownListDirection.up; }\n\t@HostBinding('class.down') get isDirDown() { return this.direction === VirtualDropdownListDirection.down; }\n\n\tselectedItem: VirtualDropdownModel | undefined;\n\tdisplayedItems: VirtualDropdownModel[] | undefined;\n\titems: VirtualDropdownModel[];\n\n\t@ViewChild(VirtualDropdownPopupComponent) private popup: VirtualDropdownPopupComponent;\n\n\tprivate $ub: Subscription;\n\n\tconstructor(\n\t\tpublic cdr: ChangeDetectorRef,\n\t\tprivate element: ElementRef,\n\t) { }\n\n\tngOnInit(): void {\n\t\tif (this.$ && this.$.closed === false)\n\t\t\tthis.$ub = this.$.asObservable()\n\t\t\t\t.subscribe({\n\t\t\t\t\tnext: (items) => {\n\t\t\t\t\t\t// console.log(`%c dropdown`, `color:#bada55;`, { items });\n\t\t\t\t\t\tthis.items = items;\n\t\t\t\t\t\tthis.findSelectedByValue(`$`);\n\t\t\t\t\t\tif (!!this.items && this.items.length > 0) {\n\t\t\t\t\t\t\tthis.disabled = this.items.length < 2;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.disabled = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!!this.popup) {\n\t\t\t\t\t\t\tthis.popup.cdr.markForCheck();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\t}\n\t\t\t\t});\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.items !== null && ('value' in changes || 'items' in changes)) {\n\t\t\tthis.findSelectedByValue(`ngOnChanges`);\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tif (this.$ub != null && this.$ub.closed == false)\n\t\t\tthis.$ub.unsubscribe();\n\t\tthis.$ub = null;\n\t\t// if (this._$ != null && this._$.closed == false)\n\t\t// \tthis._$.unsubscribe();\n\t\t// this._$ = null;\n\t}\n\n\t@HostListener('document:click', ['$event'])\n\tdocumentClick(e: MouseEvent) {\n\t\tif (this.active == true && e != null && e.target != null && e.target instanceof Node\n\t\t\t&& !DOMUtil.isDescendant(this.element.nativeElement, <Node>e.target)) {\n\t\t\t// DOMUtil.stopPropagation(e);\n\t\t\tthis.active = false;\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\n\t@HostListener('document:scroll')\n\tdocumentScroll() {\n\t\tif (this.active == true) {\n\t\t\tthis.active = false;\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\n\ttoggle() {\n\t\tconst a = this.disabled ? false : !this.active;\n\t\tif (this.active !== a) {\n\t\t\tthis.active = a;\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\n\tselect(item: VirtualDropdownModel) {\n\t\t////\n\t\t// this.selectedItem = item;\n\t\t// this.value = !!this.selectedItem ? this.selectedItem.value : null;\n\t\t////\n\t\tthis.active = false;\n\t\tthis.filterValue = null;\n\t\tthis.cdr.markForCheck();\n\t\t// this.valueChange.emit(this.value);\n\t\t// this.selected.emit(this.selectedItem);\n\t\tthis.valueChange.emit(!!item ? item.value : null);\n\t\tthis.selected.emit(item);\n\t}\n\n\t// emitSearchValueChange(v: string) {\n\temitSearchValueChange(e: Event) {\n\t\tconst el = e.target as HTMLInputElement;\n\t\tconst v = el ? el.value : null;\n\t\tif (!v || this.searchValue == v)\n\t\t\treturn;\n\t\tthis.searchValueChange.emit(v);\n\t\tif (!!this.popup) {\n\t\t\tthis.popup.resetScroll();\n\t\t}\n\t}\n\temitScrolledToEnd(v: ChangeEvent) { this.scrolledToEnd.emit(v); }\n\n\t// handleFilterValueChange(v: string) {\n\thandleFilterValueChange(e: Event) {\n\t\tconst el = e.target as HTMLInputElement;\n\t\tconst v = el ? el.value : null;\n\t\tif (!v || this.filterValue == v)\n\t\t\treturn;\n\t\tthis.filterValue = v;\n\t\tthis.cdr.markForCheck();\n\t\tif (!!this.popup) {\n\t\t\tthis.popup.resetScroll();\n\t\t}\n\t}\n\n\tprivate findSelectedByValue(_from: string) {\n\t\tif (!this.items)\n\t\t\treturn;\n\t\tfor (let i = 0, t = this.items.length; i < t; i++) {\n\t\t\tif (this.value === this.items[i].value) {\n\t\t\t\tthis.selectedItem = this.items[i];\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/virtual/dropdown/component/virtual.dropdown.component.ts","import { Pipe, PipeTransform } from '@angular/core';\nimport { VirtualDropdownModel } from '../model/virtual.dropdown.model';\n\n@Pipe({ name: 'virtualDropdownFilter' })\n\nexport class VirtualDropdownFilterPipe implements PipeTransform {\n\ttransform(input: VirtualDropdownModel[], key: keyof VirtualDropdownModel, value: any): VirtualDropdownModel[] {\n\n\t\tif (!input || input.length < 1 || !key || !value)\n\t\t\treturn input;\n\n\t\tvalue = typeof value === 'string' ? value.toLowerCase() : value;\n\n\t\tconst output = input.filter((i: VirtualDropdownModel) => {\n\t\t\tif (!(key in i))\n\t\t\t\treturn false;\n\t\t\treturn (typeof i[key] === 'string' ? i[key].toLowerCase() : i[key]).indexOf(value) > -1;\n\t\t});\n\n\t\treturn output;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/virtual/dropdown/pipe/virtual.dropdown.filter.pipe.ts","import { Pipe, PipeTransform } from '@angular/core';\nimport { VirtualDropdownModel } from '../model/virtual.dropdown.model';\n\n@Pipe({ name: 'virtualDropdownRemoveSelected' })\n\nexport class VirtualDropdownRemoveSelectedPipe implements PipeTransform {\n\ttransform(value: VirtualDropdownModel[], selected?: VirtualDropdownModel, disabled = false): VirtualDropdownModel[] {\n\t\tif (!!disabled || selected == null)\n\t\t\treturn value;\n\t\treturn value.filter((i: VirtualDropdownModel) => { return i.value != selected.value; });\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/virtual/dropdown/pipe/virtual.dropdown.list.pipe.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { VirtualScrollerModule } from 'ngx-virtual-scroller';\nimport { VirtualDropdownPopupComponent } from './component/popup/virtual.dropdown.popup.component';\nimport { VirtualDropdownComponent } from './component/virtual.dropdown.component';\nimport { VirtualDropdownFilterPipe } from './pipe/virtual.dropdown.filter.pipe';\nimport { VirtualDropdownRemoveSelectedPipe } from './pipe/virtual.dropdown.list.pipe';\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tVirtualScrollerModule,\n\t],\n\tproviders: [\n\n\t],\n\tdeclarations: [\n\t\tVirtualDropdownComponent,\n\t\tVirtualDropdownPopupComponent,\n\t\tVirtualDropdownRemoveSelectedPipe,\n\t\tVirtualDropdownFilterPipe,\n\t],\n\texports: [\n\t\tVirtualDropdownComponent,\n\t],\n\tentryComponents: [\n\t\tVirtualDropdownComponent,\n\t],\n})\nexport class VirtualDropdownModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/virtual/dropdown/virtual.dropdown.module.ts","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'camelCaseToSpace' })\nexport class CamelCaseToSpacePipe implements PipeTransform {\n\tprivate readonly REGEXP = /([A-Z])/g;\n\n\ttransform(input: string): string {\n\t\treturn input.replace(this.REGEXP, (match) => ` ${match}`);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/camelCaseToSpace/camelCaseToSpace.pipe.ts","import { NgModule } from \"@angular/core\";\nimport { CamelCaseToSpacePipe } from \"./camelCaseToSpace.pipe\";\n\n@NgModule({\n\tdeclarations: [CamelCaseToSpacePipe],\n\texports: [CamelCaseToSpacePipe],\n})\nexport class CamelCaseToSpaceModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/camelCaseToSpace/camelCaseToSpace.module.ts","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({name: 'capitalizeFirst'})\n\nexport class CapitalizeFirstPipe implements PipeTransform {\n\ttransform(value: any, _exponent?: any): any {\n\t\tif (value)\n\t\t\treturn value.charAt(0).toUpperCase() + value.slice(1);\n\t\treturn value;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/capitalizeFirst/capitalize.first.pipe.ts","import { NgModule } from \"@angular/core\";\nimport { CapitalizeFirstPipe } from \"./capitalize.first.pipe\";\n\n@NgModule({\n\tdeclarations: [CapitalizeFirstPipe],\n\texports: [CapitalizeFirstPipe],\n})\nexport class CapitalizeFirstModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/capitalizeFirst/capitalize.first.module.ts","import {\n\tChangeDetectorRef,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnChanges,\n\tOutput,\n\tSimpleChanges\n} from '@angular/core';\n\nimport { GeoGranularityType, ControlSize } from './geo.model';\n\n@Component({\n\tselector: 'geo-picker',\n\ttemplate: ` \n\t\t<div *ngIf=\"!hidden\" role=\"group\" aria-label=\"chart type selector\" [ngClass]=\"{\n\t\t\t'btn-group':true, \n\t\t\t'btn-group-lg':size==='lg',\n\t\t\t'btn-group-md':size==='md',\n\t\t\t'btn-group-sm':size==='sm',\n\t\t\t'btn-group-xs':size==='xs'}\">\n\t\t\t<button *ngIf=\"regionOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'region'\" (click)=\"onGeoGranularityTypeChange('region')\">\n\t\t\t\t<span  aria-hidden=\"true\">{{'ANALYTICS_ST_RAPORT.GEO_GRANULARITY.REGION' | translate:lang }}</span>\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"cityOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'city'\" (click)=\"onGeoGranularityTypeChange('city')\">\n\t\t\t\t<span  aria-hidden=\"true\">{{'ANALYTICS_ST_RAPORT.GEO_GRANULARITY.CITY' | translate:lang }}</span>\n\t\t\t</button>\n\t\t</div>`,\n\tstyles: []\n})\nexport class GeoPickerComponent implements OnChanges  {\n\t@Input() enable: boolean = true;\n\t@Input() disabled: boolean = false;\n\t@Input() hidden: boolean = false;\n\t@Input() granularityTypes: Array<GeoGranularityType> = ['city','region'];\n\t@Input() activeType: GeoGranularityType = 'region' ;\n\t@Input() size: ControlSize = 'md';\n\n\t@Output() geoTypeChanged: EventEmitter<GeoGranularityType> = new EventEmitter<GeoGranularityType>();\n\n\tregionOption: boolean = false;\n\tcityOption: boolean = false;\n\n\n\t//\n\tconstructor(private cdr: ChangeDetectorRef) {\n\t}\n\n\t//\n\tngOnChanges(changes: SimpleChanges) {\n\t\tthis.setActiveGeoGranularityTypes();\n\t\tthis.cdr.markForCheck();\n\t}\n\t//\n\tonGeoGranularityTypeChange(reportType: GeoGranularityType): void {\n\t\tif (reportType != this.activeType && this.geoTypeChanged) {\n\t\t\tthis.activeType = reportType;\n\t\t\tthis.geoTypeChanged.emit(reportType);\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\t//\n\tprivate setActiveGeoGranularityTypes(): void {\n\t\tthis.regionOption = false;\n\t\tthis.cityOption = false;\n\n\t\tif (this.granularityTypes)\n\t\t\tthis.granularityTypes.every((value: any) => {\n\t\t\t\tswitch (value) {\n\n\t\t\t\t\tcase 'region':\n\t\t\t\t\t\tthis.regionOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'city':\n\t\t\t\t\t\tthis.cityOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\tthis.cdr.markForCheck();\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/st/component/geo-picker/geo.picker.component.ts","import {\n\tChangeDetectorRef,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnChanges,\n\tOutput,\n\tSimpleChanges\n} from '@angular/core';\n\nimport { ReportType, ControlSize } from './report.model';\n\n@Component({\n\tselector: 'report-type-picker',\n\ttemplate: `\n\t\t<div *ngIf=\"enable\" role=\"group\" aria-label=\"chart type selector\" [ngClass]=\"{\n\t\t\t'btn-group':true, \n\t\t\t'btn-group-lg':size==='lg',\n\t\t\t'btn-group-md':size==='md',\n\t\t\t'btn-group-sm':size==='sm',\n\t\t\t'btn-group-xs':size==='xs'}\">\n\t\t\t<button *ngIf=\"reportOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'report'\" (click)=\"onReportTypeChange('report')\">\n\t\t\t\t<span  aria-hidden=\"true\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.REPORT' | translate:lang }}</span>\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"geolocationOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'geolocation'\" (click)=\"onReportTypeChange('geolocation')\">\n\t\t\t\t<span  aria-hidden=\"true\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.GEOLOCATION' | translate:lang }}</span>\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"tagOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'tags'\" (click)=\"onReportTypeChange('tags')\">\n\t\t\t\t<span  aria-hidden=\"true\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.TAGS' | translate:lang }}</span>\n\t\t\t</button>\n\n\t\t\t<button *ngIf=\"genderOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'gender'\" (click)=\"onReportTypeChange('gender')\">\n\t\t\t\t<span aria-hidden=\"true\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.GENDER' | translate:lang }}</span>\n\t\t\t</button>\n\n\t\t\t <button *ngIf=\"ageOption\" class=\"btn btn-white\" \n\t\t\t\t\t[class.active]=\"activeType == 'age'\" (click)=\"onReportTypeChange('age')\">\n\t\t\t\t<span  aria-hidden=\"true\">{{'ANALYTICS_ST_RAPORT.REPORT_TYPE.AGE' | translate:lang }}</span>\n\t\t\t</button>\n\t\t</div>`,\n\tstyles: []\n})\nexport class ReportPickerComponent implements OnChanges  {\n\t@Input() enable: boolean = true;\n\t@Input() reportTypes: Array<ReportType>;\n\t@Input() activeType: ReportType;\n\t@Input() size: ControlSize = 'md';\n\n\t@Output() reportTypeChanged: EventEmitter<ReportType> = new EventEmitter<ReportType>();\n\n\treportOption: boolean = false;\n\tgeolocationOption: boolean = false;\n\ttagOption: boolean = false;\n\tgenderOption: boolean = false;\n\tageOption: boolean = false;\n\n\t//\n\tconstructor(private cdr: ChangeDetectorRef) {\n\t}\n\n\t//\n\tngOnChanges(changes: SimpleChanges) {\n\t\tthis.setActiveReportTypes();\n\t\tthis.cdr.markForCheck();\n\t}\n\t//\n\tonReportTypeChange(reportType: ReportType): void {\n\t\tif (reportType != this.activeType && this.reportTypeChanged) {\n\t\t\tthis.activeType = reportType;\n\t\t\tthis.reportTypeChanged.emit(reportType);\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\t//\n\tprivate setActiveReportTypes(): void {\n\t\tthis.reportOption = false;\n\t\tthis.geolocationOption = false;\n\t\tthis.tagOption = false;\n\t\tthis.genderOption = false;\n\t\tthis.ageOption = false;\n\n\t\tif (this.reportTypes)\n\t\t\tthis.reportTypes.every((value: any) => {\n\t\t\t\tswitch (value) {\n\t\t\t\t\t/*case 'all':\n\t\t\t\t\t\tthis.reportOption = true;\n\t\t\t\t\t\tthis.tagOption = true;\n\t\t\t\t\t\tthis.genderOption = true;\n\t\t\t\t\t\treturn false;*/\n\t\t\t\t\tcase 'report':\n\t\t\t\t\t\tthis.reportOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'geolocation':\n\t\t\t\t\t\tthis.geolocationOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'gender':\n\t\t\t\t\t\tthis.genderOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'age':\n\t\t\t\t\t\tthis.ageOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tags':\n\t\t\t\t\t\tthis.tagOption = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\tthis.cdr.markForCheck();\n\t}\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/st/component/report-type-picker/report.picker.component.ts","import { ChangeDetectorRef, Injectable } from \"@angular/core\";\nimport { BehaviorSubject, Subscription } from \"rxjs\";\nimport { forkJoin } from \"rxjs/observable/forkJoin\";\nimport { of } from \"rxjs/observable/of\";\nimport { catchError, debounceTime, filter, map, switchMap, tap } from 'rxjs/operators';\nimport { VirtualDropdownModel } from \"../../../virtual/dropdown/model/virtual.dropdown.model\";\nimport { TagRecord, TagRecords, TagService } from \"../../../../service/analytics/tag.service\";\n\nexport interface PrefixedTagData {\n\tprefix: string;\n\ttotal: number;\n\tloading: boolean;\n\tselected: VirtualDropdownModel;\n\t$: BehaviorSubject<VirtualDropdownModel[]>;\n\tmodel: VirtualDropdownModel[];\n\tsearch: {\n\t\ttext: string;\n\t\tmodel: VirtualDropdownModel[];\n\t}\n}\n\nexport interface PrefixedTagPage {\n\tprefix: string;\n\tpages: Array<number>;\n\tsearch: string | undefined;\n}\n\n@Injectable()\nexport class PrefixedTagsService {\n\n\treadonly PAGE_SIZE = 20;\n\n\tget hasData() { return !!this.data; }\n\tget selectedTagsList(): string[] {\n\t\tconst tags: Array<string> = [];\n\t\tthis.selectedTags.forEach(v => tags.push(v));\n\t\treturn tags;\n\t}\n\n\tprivate readonly ALL_LABEL = 'All';\n\tprivate readonly LOADING_LABEL = 'loading...';\n\tprivate readonly EMPTY_LABEL = '...';\n\tprivate readonly PREFIX_SEPARATOR = ':';\n\n\tprivate data: Map<string, PrefixedTagData>;\n\tprivate data$ub: Subscription;\n\n\tprivate fetch$: BehaviorSubject<PrefixedTagPage>;\n\tprivate fetch$ub: Subscription;\n\n\tprivate selectedTags = new Map<string, string>();\n\n\tconstructor(\n\t\tprivate tagService: TagService,\n\t) { }\n\n\tselect(prefix: string, search: string) {\n\t\tif (!!search && search.length > 0)\n\t\t\tthis.selectedTags.set(prefix, search);\n\t\telse\n\t\t\tthis.selectedTags.delete(prefix);\n\t}\n\n\tprefixes(): IterableIterator<keyof PrefixedTagData> { return (this.data ? this.data.keys() : []) as IterableIterator<keyof PrefixedTagData>; }\n\n\tvalue(prefix: string): PrefixedTagData | null { return this.data ? this.data.get(prefix) : null; }\n\n\tfetch(prefix: string, pages: Array<number>, search: string) { this.fetch$.next({ prefix, pages, search }); }\n\n\tinit(accountId: number, cdr: ChangeDetectorRef) {\n\t\tthis.data$ub = this.tagService.prefixes(accountId)\n\t\t\t.pipe(debounceTime(100))\n\t\t\t.subscribe({\n\t\t\t\tnext: tags => this.data = this.parseData(tags),\n\t\t\t\terror: (error: any) => console.error(error),\n\t\t\t\tcomplete: () => cdr.markForCheck(),\n\t\t\t});\n\t\tif (!this.fetch$) {\n\t\t\tthis.fetch$ = new BehaviorSubject<PrefixedTagPage>(null);\n\t\t}\n\t\tthis.fetch$ub = this.fetch$.asObservable()\n\t\t\t.pipe(\n\t\t\t\tfilter(v => !!v && !!this.data && this.data.has(v.prefix)),\n\t\t\t\tdebounceTime(250),\n\t\t\t\tswitchMap(req => {\n\t\t\t\t\tconsole.debug(` >> fetch$ >> `, req.prefix, { req });\n\t\t\t\t\tthis.data.get(req.prefix).loading = true;\n\t\t\t\t\tcdr.markForCheck();\n\t\t\t\t\treturn forkJoin(req.pages.map(page => this.fetchList(accountId, page, req)))\n\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\tthis.data.get(req.prefix).loading = false;\n\t\t\t\t\t\t\t\tcdr.markForCheck();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: v => console.debug(`fetch$ub.next`, v),\n\t\t\t\terror: e => console.error(e),\n\t\t\t\tcomplete: () => cdr.markForCheck(),\n\t\t\t});\n\t}\n\n\tdestroy() {\n\t\tif (this.data$ub != null && this.data$ub.closed == false)\n\t\t\tthis.data$ub.unsubscribe();\n\t\tthis.data$ub = null;\n\n\t\tif (this.fetch$ub != null && this.fetch$ub.closed == false)\n\t\t\tthis.fetch$ub.unsubscribe();\n\t\tthis.fetch$ub = null;\n\n\t\tif (this.fetch$ != null && this.fetch$.closed == false)\n\t\t\tthis.fetch$.unsubscribe();\n\t\tthis.fetch$ = null;\n\t}\n\n\tprivate parseData(recList: TagRecords[]): Map<string, PrefixedTagData> {\n\t\tconst prefixes = new Map<string, PrefixedTagData>();\n\t\tlet model: VirtualDropdownModel[];\n\t\tfor (const rec of recList) {\n\t\t\tconst { prefix, total_records, records } = rec;\n\t\t\tmodel = this.initDropdownModel();\n\t\t\tconst fullprefix = `${prefix}${this.PREFIX_SEPARATOR}`;\n\t\t\tif (total_records > records.length) {\n\t\t\t\t// to fetch\n\t\t\t\tfor (let index = 0; index < total_records; index++) {\n\t\t\t\t\tmodel.push(this.emptyDropdownItem(fullprefix, index));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// from data\n\t\t\t\tfor (let index = 0; index < total_records; index++) {\n\t\t\t\t\tmodel.push(this.dropdownItem(fullprefix, records[index].id, records[index].tag));\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst $ = new BehaviorSubject(model);\n\t\t\tconst selected = model[0];\n\t\t\tprefixes.set(prefix, { prefix, total: total_records, $, model, selected, search: { text: ``, model: null }, loading: false });\n\t\t}\n\t\treturn prefixes;\n\t}\n\n\tprivate fetchList(accountId: number, page: number, req: PrefixedTagPage) {\n\t\tconst prefix = req.prefix;\n\t\tconst fullprefix = `${prefix}${this.PREFIX_SEPARATOR}`;\n\t\tconst tagData = this.data.get(prefix);\n\t\tconst searchtext = req.search;\n\t\tconst tagModel = searchtext.length > 0 ? tagData.search.model : tagData.model;\n\t\tconst startIdx = Math.max(0, Math.min(tagData.total, page * this.PAGE_SIZE));\n\n\t\treturn this.markDropdownModel(tagData, startIdx, true)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(() => this.tagService.list(accountId, { text: `${fullprefix}*${searchtext}` }, page + 1, this.PAGE_SIZE)),\n\t\t\t\tcatchError(_e => this.markDropdownModel(tagData, startIdx, false)),\n\t\t\t\tmap((recs: TagRecords) => {\n\t\t\t\t\tif (!!recs && recs.records.length > 0) {\n\t\t\t\t\t\tconst { emit, model } = this.updateDropdownModel(recs, tagModel, startIdx, fullprefix);\n\t\t\t\t\t\tif (emit) {\n\t\t\t\t\t\t\tif (searchtext.length > 0) {\n\t\t\t\t\t\t\t\ttagData.search.text = searchtext;\n\t\t\t\t\t\t\t\ttagData.search.model = model;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttagData.search.text = ``;\n\t\t\t\t\t\t\t\ttagData.search.model = null;\n\t\t\t\t\t\t\t\ttagData.model = model;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttagData.$.next(model);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn recs;\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n\tprivate updateDropdownModel(data: TagRecords, model: VirtualDropdownModel[] | null, startIdx: number, fullprefix: string): { emit: boolean; model: VirtualDropdownModel[]; } {\n\t\tconst { prefix, total_records, records } = data;\n\t\tlet emit = false;\n\n\t\tif (model == null || data.page === 1) {\n\t\t\tmodel = this.initDropdownModel();\n\t\t\tfor (let index = 0; index < total_records; index++) {\n\t\t\t\tif (index in records) {\n\t\t\t\t\tmodel.push(this.dropdownItem(fullprefix, records[index].id, records[index].tag));\n\t\t\t\t} else {\n\t\t\t\t\tmodel.push(this.emptyDropdownItem(fullprefix, index));\n\t\t\t\t}\n\t\t\t}\n\t\t\temit = true;\n\t\t}\n\n\t\tlet modelIndex: number;\n\t\tlet newItem: VirtualDropdownModel\n\t\tlet record: TagRecord;\n\t\tfor (let recordIndex = 0; recordIndex < records.length; recordIndex++) {\n\t\t\tmodelIndex = recordIndex + startIdx + 1;\n\t\t\tif (!!model && modelIndex in model) {\n\t\t\t\tif (!!model[modelIndex]\n\t\t\t\t\t&& 'fetch' in model[modelIndex]\n\t\t\t\t\t&& !!model[modelIndex].fetch\n\t\t\t\t\t&& !!model[modelIndex].fetch.loading\n\t\t\t\t) {\n\t\t\t\t\tmodel[modelIndex].fetch.loading = false;\n\t\t\t\t\tmodel[modelIndex].fetch = null;\n\t\t\t\t\tdelete model[modelIndex].fetch;\n\t\t\t\t\trecord = data.records[recordIndex];\n\t\t\t\t\tnewItem = this.dropdownItem(fullprefix, record.id, record.tag);\n\t\t\t\t\tmodel[modelIndex].uid = newItem.uid;\n\t\t\t\t\tmodel[modelIndex].label = newItem.label;\n\t\t\t\t\tmodel[modelIndex].value = newItem.value;\n\t\t\t\t\tnewItem = null;\n\t\t\t\t\trecord = null;\n\t\t\t\t\temit = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { emit, model };\n\t}\n\n\tprivate markDropdownModel(tagData: PrefixedTagData, startIdx: number, loading: boolean) {\n\t\tconst searchtext = tagData.search.text;\n\t\tconst model = searchtext.length > 0 ? tagData.search.model : tagData.model;\n\t\tconst stopIdx = Math.min(tagData.total, startIdx + this.PAGE_SIZE);\n\t\tlet emit = false;\n\t\tfor (let modelIndex = startIdx + 1; modelIndex <= stopIdx; modelIndex++) {\n\t\t\tif (!!model[modelIndex] && 'fetch' in model[modelIndex] && !!model[modelIndex].fetch && !model[modelIndex].fetch.loading) {\n\t\t\t\tmodel[modelIndex].fetch.loading = loading;\n\t\t\t\tmodel[modelIndex].label = loading ? this.LOADING_LABEL : this.EMPTY_LABEL;\n\t\t\t\temit = true;\n\t\t\t}\n\t\t}\n\t\tif (emit) {\n\t\t\tif (searchtext.length > 0) {\n\t\t\t\ttagData.search.model = model;\n\t\t\t} else {\n\t\t\t\ttagData.model = model;\n\t\t\t}\n\t\t\ttagData.$.next(model);\n\t\t}\n\t\treturn of(null);\n\t}\n\n\tprivate dropdownItem(fullprefix: string, uid: number, tag: string, partial?: Partial<VirtualDropdownModel>): VirtualDropdownModel {\n\t\tconst hasSuffix = !tag ? false : tag.indexOf(fullprefix) === 0;\n\t\tconst val = { uid, label: tag, value: tag, ...partial };\n\t\tif (hasSuffix) {\n\t\t\tif (!!val.label)\n\t\t\t\tval.label = val.label.slice(fullprefix.length);\n\t\t\tval.value = tag;\n\t\t} else {\n\t\t\tval.value = `${fullprefix}${tag}`;\n\t\t};\n\t\treturn val;\n\t}\n\n\tprivate emptyDropdownItem(fullprefix: string, index: number) {\n\t\treturn this.dropdownItem(fullprefix, index, null, {\n\t\t\tlabel: this.EMPTY_LABEL,\n\t\t\tfetch: { loading: false, page: Math.floor(index / this.PAGE_SIZE) }\n\t\t})\n\t}\n\n\tprivate initDropdownModel(): VirtualDropdownModel[] {\n\t\treturn [{ uid: -1, label: this.ALL_LABEL, value: null }];\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/st/service/prefixed.tags.service.ts","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tOnDestroy,\n\tOnInit\n} from '@angular/core';\nimport { Event } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport moment from 'moment';\nimport { ChangeEvent } from 'ngx-virtual-scroller';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { forkJoin } from 'rxjs/observable/forkJoin';\nimport { debounceTime, tap } from 'rxjs/operators';\nimport { AnalyticsService } from '../../../../../service/analytics.service';\nimport { ExistingTagSelectorService } from '../../../../../service/analytics/existing.tag.selector.service';\nimport { PageReportFilters, PagesService } from '../../../../../service/analytics/pages.service';\nimport { TagService } from '../../../../../service/analytics/tag.service';\nimport { ExportService } from '../../../../../service/export.service';\nimport { UserService } from '../../../../../service/user.service';\nimport { VirtualDropdownModel } from '../../../../virtual/dropdown/model/virtual.dropdown.model';\nimport { GranularityType } from '../../../component/charts/chart.model';\nimport { PrefixedTagData, PrefixedTagsService } from '../../service/prefixed.tags.service';\nimport { GeoGranularityType } from '../geo-picker/geo.model';\nimport { ReportType } from '../report-type-picker/report.model';\n\n@Component({\n\tselector: 'analytics-st-view',\n\ttemplate: require('./st.view.component.html'),\n\tstyles: [require('./st.view.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsSTView extends Localization implements OnInit, OnDestroy {\n\n\treadonly MAP_REGIONS_SKIP_SET: { [code: string]: true; } | null = require('../../../geo/geo.country.view.regions.fix.json').skippingSet;\n\treadonly MAP_COLOR_RANGE = ['#d9ebfb', '#348fe2'];\n\treadonly PAGER = { page: 1, page_size: 10, total_items: 0 };;\n\n\treadonly GEO_GRANULARITY_TYPES: Array<GeoGranularityType> = ['city', 'region'];\n\treadonly GRANULARITY_TYPES: Array<GranularityType> = ['all'];\n\n\treadonly REPORT_TYPE_REPORT: ReportType = 'report';\n\treadonly REPORT_TYPE_GEO: ReportType = 'geolocation';\n\treadonly REPORT_TYPE_TAGS: ReportType = 'tags';\n\treadonly REPORT_TYPES = [this.REPORT_TYPE_REPORT, this.REPORT_TYPE_GEO, this.REPORT_TYPE_TAGS];\n\n\tactiveReportType = this.REPORT_TYPE_REPORT;\n\tactiveGeoType: GeoGranularityType = 'region';\n\tactiveGranularity: GranularityType = 'day';\n\n\treadonly countries$ = new BehaviorSubject<VirtualDropdownModel[]>(this.initDropdownModel());\n\treadonly regions$ = new BehaviorSubject<VirtualDropdownModel[]>(this.initDropdownModel());\n\treadonly cities$ = new BehaviorSubject<VirtualDropdownModel[]>(this.initDropdownModel());\n\n\tselectedCountry: VirtualDropdownModel | null = null;\n\tselectedCountryCode: string | null = null;\n\tselectedRegion: string | null = null;\n\tselectedCity: string | null = null;\n\n\tisCountrySelectorVisible = true;\n\tisRegionSelectorVisible = false;\n\tisCitySelectorVisible = false;\n\n\tisLoadingCountry = false;\n\tisLoadingRegion = false;\n\tisLoadingCity = false;\n\n\traportItems: any;\n\tdateRange: any;\n\n\tchartUsersViewsHistory: Array<chartjs.BaseDataset>;\n\tchartLabelsReport: Array<string>;\n\n\tmapChartData: any;\n\tgeoDataTable: any;\n\ttagsDataTable: any;\n\n\tisSearchingTags = false;\n\n\tprivate listOfCountries$ub: Subscription;\n\tprivate listOfRegions$ub: Subscription;\n\tprivate listOfCities$ub: Subscription;\n\tprivate loadingTags$ub: Subscription;\n\tprivate report$ub: Subscription;\n\tprivate fetchPages = new Set<number>();\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic pagesService: PagesService,\n\t\tpublic tagService: TagService,\n\t\tpublic prefixedTagsService: PrefixedTagsService,\n\t\tprivate user: UserService,\n\t\tprivate analyticsService: AnalyticsService,\n\t\tprivate existingTagSelector: ExistingTagSelectorService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate exportService: ExportService,\n\t) {\n\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit() {\n\t\tthis.loadingTags$ub = this.existingTagSelector.loadingEmitter\n\t\t\t.subscribe((v: boolean) => {\n\t\t\t\tthis.isSearchingTags = v;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\n\t\tthis.isLoadingCountry = true;\n\t\tthis.listOfCountries$ub = this.pagesService.listOfCountries()\n\t\t\t.subscribe((data: any) => {\n\t\t\t\tthis.isLoadingCountry = false;\n\t\t\t\tconst countries = this.formatGeoDropdown(data);\n\t\t\t\tthis.selectedCountry = (countries && countries.length) ? countries[0] : null;\n\t\t\t\tthis.isCountrySelectorVisible = true;\n\t\t\t\tthis.countries$.next(countries);\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\n\t\tthis.prefixedTagsService.init(this.user.accountId, this.cdr);\n\n\t\tthis.dateRange = this.user.getDateRangeSelection();\n\t\tthis.onDateRangeChanged([this.dateRange.startDate, this.dateRange.endDate]);\n\n\t\tthis.existingTagSelector.reset();\n\t}\n\n\tngOnDestroy() {\n\t\tthis.prefixedTagsService.destroy();\n\t\tif (this.listOfCountries$ub != null && this.listOfCountries$ub.closed == false) this.listOfCountries$ub.unsubscribe(); this.listOfCountries$ub = null;\n\t\tif (this.listOfRegions$ub != null && this.listOfRegions$ub.closed == false) this.listOfRegions$ub.unsubscribe(); this.listOfRegions$ub = null;\n\t\tif (this.listOfCities$ub != null && this.listOfCities$ub.closed == false) this.listOfCities$ub.unsubscribe(); this.listOfCities$ub = null;\n\t\tif (this.loadingTags$ub != null && this.loadingTags$ub.closed == false) this.loadingTags$ub.unsubscribe(); this.loadingTags$ub = null;\n\t\tif (this.report$ub != null && this.report$ub.closed == false) this.report$ub.unsubscribe(); this.report$ub = null;\n\t}\n\n\tonGranularityChange(granularity: GranularityType): void {\n\t\tthis.activeGranularity = granularity;\n\t\tthis.fetchData();\n\t}\n\n\tonGranularitySelect(item: VirtualDropdownModel): void {\n\t\tthis.activeGranularity = item.value;\n\t\tthis.fetchData();\n\t}\n\n\tonReportTypeChange(_activeReportType: ReportType) {\n\t\tthis.activeReportType = _activeReportType;\n\t\tif (this.activeReportType == this.REPORT_TYPE_TAGS) {\n\t\t\tthis.existingTagSelector.reset();\n\t\t}\n\t\tthis.fetchData();\n\t}\n\n\tonGeoTypeChanged(_geoType: GeoGranularityType) {\n\t\tthis.activeGeoType = _geoType;\n\t\tthis.fetchData();\n\t}\n\n\tprefixedTagSelect(data: PrefixedTagData, item: VirtualDropdownModel) {\n\t\tdata.selected = item;\n\t\tthis.prefixedTagsService.select(data.prefix, item.value);\n\t\tthis.fetchData();\n\t}\n\n\tprefixedTagReset(data: PrefixedTagData) {\n\t\tconst model = !!data.search.model ? data.search.model : data.model;\n\t\tdata.search.text = ``;\n\t\tdata.selected = !!model && 0 in model ? model[0] : null;\n\t\tthis.prefixedTagsService.select(data.prefix, null);\n\t\tthis.fetchData();\n\t}\n\n\tprefixedScrollEnd(data: PrefixedTagData, event: ChangeEvent) {\n\t\tconst { start, end } = event;\n\t\tconst model = !!data.search.model ? data.search.model : data.model;\n\t\tif (this.fetchPages.size > 0)\n\t\t\tthis.fetchPages.clear();\n\t\tlet m;\n\t\tfor (let i = start; i <= end; i++) {\n\t\t\tm = model[i];\n\t\t\tif (!!m.fetch && m.fetch.loading === false) {\n\t\t\t\tthis.fetchPages.add(m.fetch.page);\n\t\t\t}\n\t\t}\n\t\tif (this.fetchPages.size > 0) {\n\t\t\tconst pages: Array<number> = [];\n\t\t\tthis.fetchPages.forEach(p => pages.push(p));\n\t\t\tthis.fetchPages.clear();\n\t\t\tthis.prefixedTagsService.fetch(data.prefix, pages, data.search.text);\n\t\t}\n\t}\n\n\tprefixedSearch(data: PrefixedTagData, text: string) {\n\t\tthis.prefixedTagsService.fetch(data.prefix, [0], text);\n\t}\n\n\tonValueChangeTag(_event: Event) {\n\t\tthis.fetchData();\n\t}\n\n\tonSelectCountry(item: VirtualDropdownModel) {\n\t\tthis.selectedCountryCode = item.value;\n\t\tthis.selectedRegion = null;\n\t\tthis.isRegionSelectorVisible = (this.selectedCountryCode !== null);\n\t\tthis.isCitySelectorVisible = this.isRegionSelectorVisible && (this.selectedRegion !== null);\n\t\tthis.regions$.next(this.initDropdownModel());\n\t\tthis.cities$.next(this.initDropdownModel());\n\t\tthis.cdr.markForCheck();\n\t\tif (this.selectedCountryCode !== null) {\n\t\t\tthis.isLoadingRegion = true;\n\t\t\tthis.cdr.markForCheck();\n\t\t\tif (this.listOfRegions$ub != null && !this.listOfRegions$ub.closed) this.listOfRegions$ub.unsubscribe();\n\t\t\tthis.listOfRegions$ub = this.pagesService.listOfRegions(item.value)\n\t\t\t\t.subscribe((data: any) => {\n\t\t\t\t\tthis.regions$.next(this.formatGeoDropdown(data));\n\t\t\t\t\tthis.isLoadingRegion = false;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t});\n\t\t}\n\t\tthis.fetchData();\n\t}\n\n\tonSelectRegion(item: VirtualDropdownModel) {\n\t\tthis.selectedRegion = item.value;\n\t\tthis.isCitySelectorVisible = (this.selectedRegion !== null);\n\t\tthis.selectedCity = null;\n\t\tthis.cities$.next(this.initDropdownModel());\n\t\tthis.cdr.markForCheck();\n\t\tif (this.selectedRegion !== null) {\n\t\t\tthis.isLoadingCity = true;\n\t\t\tthis.cdr.markForCheck();\n\t\t\tif (this.listOfCities$ub != null && !this.listOfCities$ub.closed) this.listOfCities$ub.unsubscribe();\n\t\t\tthis.listOfCities$ub = this.pagesService.listOfCities(this.selectedRegion)\n\t\t\t\t.subscribe((data: any) => {\n\t\t\t\t\tthis.cities$.next(this.formatGeoDropdown(data));\n\t\t\t\t\tthis.isLoadingCity = false;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t});\n\t\t}\n\t\tthis.fetchData();\n\t}\n\n\tonSelectCity(item: VirtualDropdownModel) {\n\t\tthis.selectedCity = item.value;\n\t\tthis.cdr.markForCheck();\n\t\tthis.fetchData();\n\t}\n\n\tonResetCountry() {\n\t\tthis.selectedCountry = null;\n\t\tthis.selectedCountryCode = null;\n\t\tthis.selectedRegion = null;\n\t\tthis.selectedCity = null;\n\t\tthis.isRegionSelectorVisible = (this.selectedCountryCode !== null);\n\t\tthis.isCitySelectorVisible = this.isRegionSelectorVisible && (this.selectedRegion !== null);\n\t\tthis.regions$.next(this.initDropdownModel());\n\t\tthis.cities$.next(this.initDropdownModel());\n\t\tthis.cdr.markForCheck();\n\t\tthis.fetchData();\n\t}\n\n\tonResetRegion() {\n\t\tthis.selectedRegion = null;\n\t\tthis.selectedCity = null;\n\t\tthis.isCitySelectorVisible = false;\n\t\tthis.cities$.next(this.initDropdownModel());\n\t\tthis.cdr.markForCheck();\n\t\tthis.fetchData();\n\t}\n\n\tonResetCity() {\n\t\tthis.selectedCity = null;\n\t\tthis.cdr.markForCheck();\n\t\tthis.fetchData();\n\t}\n\n\tonDateRangeChanged(_event: any) {\n\t\tthis.user.setDateRangeSelection(_event[0], _event[1])\n\t\tthis.dateRange = this.user.getDateRangeSelection();\n\t\tthis.fetchData();\n\t}\n\n\tonPageChanged(_page: number) {\n\t\tthis.PAGER.page = _page;\n\t}\n\n\tonCountryTableRowClick(rec: any) {\n\t\tif ((rec !== null) && ('countryCode' in rec)) {\n\t\t\tthis.selectCountryByCode(rec.countryCode);\n\t\t}\n\t}\n\n\tonMapRegionClick(_data: any) {\n\t\tif (this.selectedCountryCode === null) {\n\t\t\t// Add possibility to choose only country on world map. World map is shown when this.selectedCountryCode === null.\n\t\t\tthis.selectCountryByCode(_data.selectedRowValues[0]);\n\t\t}\n\t}\n\n\tonTagAdd(_event: any) {\n\t\tthis.fetchData();\n\t}\n\n\tonTagRemove(_event: any) {\n\t\tthis.fetchData();\n\t}\n\n\texportCsv(): void {\n\t\tthis.exportService.exportFileFromJs(this.csvFilename, this.csvData);\n\t}\n\n\tprivate initDropdownModel(): VirtualDropdownModel[] {\n\t\treturn [{ uid: -1, label: 'All', value: null }];\n\t}\n\n\tprivate getPageReportFilters(): PageReportFilters {\n\t\tconst result = new PageReportFilters();\n\t\tresult.geoCountryCode = this.selectedCountryCode;\n\t\tif (this.selectedRegion !== null)\n\t\t\tresult.geoRegionId = parseInt(this.selectedRegion);\n\t\tresult.tags = this.prefixedTagsService.selectedTagsList.concat(this.existingTagSelector.selectedTagsList);\n\t\tresult.demSex = null;\n\t\tresult.demAgeFrom = null;\n\t\tresult.demAgeTo = null;\n\t\treturn result;\n\t}\n\n\tprivate selectCountryByCode(countryCode: string) {\n\t\tconst countries = this.countries$.getValue();\n\t\tif (countries !== null) {\n\t\t\tfor (let country of countries) {\n\t\t\t\tif (country.value === countryCode) {\n\t\t\t\t\tthis.selectedCountry = country;\n\t\t\t\t\tthis.onSelectCountry(country);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate formatGeoDropdown(_data: any): VirtualDropdownModel[] {\n\t\tconst result: VirtualDropdownModel[] = this.initDropdownModel();\n\t\tif (_data.length == 0) {\n\t\t\treturn result;\n\t\t}\n\t\tfor (let _i = 0; _i < _data.length; _i++) {\n\t\t\tif (!(_data[_i].code == null)) {\n\t\t\t\t// when filed CODE comes -> country data\n\t\t\t\tresult.push({ uid: _i, value: _data[_i].code, label: _data[_i].name });\n\t\t\t} else if (!(_data[_i].id == null)) {\n\t\t\t\t// when CODE field not comes, filed ID is expected, -> city and regione data comes\n\t\t\t\tresult.push({ uid: _i, value: _data[_i].id, label: _data[_i].name });\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate fetchData() {\n\t\tconst tasks: Observable<any>[] = [];\n\t\tif (this.activeReportType == this.REPORT_TYPE_REPORT) {\n\t\t\ttasks.push(this.loadUsersAndViewsHistoryReport());\n\t\t\ttasks.push(this.loadSummaryData());\n\t\t} else if (this.activeReportType == this.REPORT_TYPE_GEO) {\n\t\t\ttasks.push(this.loadGeolocationData());\n\t\t}\n\t\telse {\n\t\t\ttasks.push(this.loadUsersAndViewsHistoryReport());\n\t\t\ttasks.push(this.loadSummaryData());\n\t\t\ttasks.push(this.loadTopViewedTagsReport());\n\t\t}\n\n\t\tif (this.report$ub != null && this.report$ub.closed == false)\n\t\t\tthis.report$ub.unsubscribe();\n\n\t\tthis.report$ub = forkJoin(tasks)\n\t\t\t.pipe(debounceTime(500))\n\t\t\t.subscribe(() => this.cdr.markForCheck());\n\t}\n\n\tprivate loadGeolocationData() {\n\t\t// Request data load from service.\n\t\treturn this.pagesService.getGeoReport(this.user.accountId, this.dateRange, this.getPageReportFilters())\n\t\t\t.pipe(\n\t\t\t\ttap(data => this.updateGeolocationData(data))\n\t\t\t);\n\t}\n\n\tprivate updateGeolocationData(data: any) {\n\t\tthis.geoDataTable = new Array(0);\n\t\tlet mapDataTable = [[\"Region\", \"Value\"]];\n\n\t\tif (this.selectedCountryCode === null) {\n\t\t\tlet countries: Array<any> = data.countries;\n\t\t\tthis.PAGER.page = 1;\n\t\t\tthis.PAGER.total_items = countries.length;\n\t\t\tfor (let rec of countries) {\n\t\t\t\tlet views = parseFloat(rec.views);\n\t\t\t\tlet users = parseFloat(rec.users);\n\t\t\t\tmapDataTable.push([rec.country.country_code, views]);\n\t\t\t\tthis.geoDataTable.push({\n\t\t\t\t\tlabel: rec.country.name,\n\t\t\t\t\tcountryCode: rec.country.country_code,\n\t\t\t\t\tflag: \"flag-icon flag-icon-\" + rec.country.country_code.toLowerCase(),\n\t\t\t\t\tviews: views,\n\t\t\t\t\tusers: users\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tlet regions: Array<any> = data.regions;\n\t\t\tthis.PAGER.page = 1;\n\t\t\tthis.PAGER.total_items = regions.length;\n\t\t\tfor (let rec of regions) {\n\t\t\t\tlet views = parseFloat(rec.views);\n\t\t\t\tlet users = parseFloat(rec.users);\n\t\t\t\tmapDataTable.push([rec.region.subdiv_code, views]);\n\t\t\t\tthis.geoDataTable.push({\n\t\t\t\t\tlabel: rec.region.name,\n\t\t\t\t\tflag: \"flag-icon\",\n\t\t\t\t\tviews: views,\n\t\t\t\t\tusers: users\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tthis.updateSummaryData(parseFloat(data.summary.views), parseFloat(data.summary.users));\n\n\t\tthis.mapChartData = {\n\t\t\tchartType: 'GeoChart',\n\t\t\t// dataTable: this.makeRegionDataForMapChart(selectedCountryCode, data),\n\t\t\tapiKey: this.analyticsService.getGoogleMapsApiKey(),\n\t\t\tdataTable: mapDataTable,\n\t\t\toptions: {\n\t\t\t\tcolorAxis: { colors: this.MAP_COLOR_RANGE }\n\t\t\t}\n\t\t};\n\n\t\tif (this.selectedCountryCode !== null) {\n\t\t\tthis.mapChartData.options.resolution = (this.selectedCountryCode in this.MAP_REGIONS_SKIP_SET) ? 'countries' : 'provinces';\n\t\t\tthis.mapChartData.options.region = this.selectedCountryCode;\n\t\t\tif (this.activeGeoType == \"city\") {\n\t\t\t\tthis.mapChartData.options.displayMode = 'markers';\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate loadUsersAndViewsHistoryReport() {\n\t\treturn this.pagesService.getUsersAndViewsHistoryReport(this.user.accountId, this.dateRange, this.activeGranularity, this.getPageReportFilters())\n\t\t\t.pipe(\n\t\t\t\ttap((data: any) => {\n\t\t\t\t\tthis.chartUsersViewsHistory = new Array<chartjs.BaseDataset>();\n\t\t\t\t\tfor (let _i = 0; _i < data.length; _i++)\n\t\t\t\t\t\tthis.chartUsersViewsHistory.push(data[_i].data);\n\t\t\t\t\tthis.chartLabelsReport = data[0].labels;\n\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tprivate loadTopViewedTagsReport() {\n\t\tconst MAX_TOP_TAGS = 200;\n\t\treturn this.pagesService.getTopViewedTagsReport(this.user.accountId, this.dateRange, this.getPageReportFilters(), MAX_TOP_TAGS)\n\t\t\t.pipe(\n\t\t\t\ttap((data: any) => {\n\t\t\t\t\tthis.tagsDataTable = data.records;\n\t\t\t\t\tthis.PAGER.page = 1;\n\t\t\t\t\tthis.PAGER.total_items = data.records.length;\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tprivate loadSummaryData() {\n\t\treturn this.pagesService.getUsersAndViewsSummaryReport(this.user.accountId, this.dateRange, this.getPageReportFilters())\n\t\t\t.pipe(\n\t\t\t\ttap((data: any) => this.updateSummaryData(data.views, data.users))\n\t\t\t);\n\t}\n\n\tprivate updateSummaryData(views: number, users: number) {\n\t\tconst viewsPerUser = (users > 0) ? views / users : null;\n\t\tthis.raportItems = [\n\t\t\t{ title: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.USERS'), desc: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.SELECTED_CRITERIA'), value: users, icon: 'fa fa-users fa-fw', color: 'widget widget-stats bg-blue' },\n\t\t\t{ title: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.VIEWS'), desc: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.SELECTED_CRITERIA'), value: views, icon: 'fa fa-play-circle fa-fw', color: 'widget widget-stats bg-black' },\n\t\t\t{ title: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.VIEWS_PER_USER'), desc: this.translation.translate('ANALYTICS_ST_RAPORT.SUMMARY.SELECTED_CRITERIA'), value: viewsPerUser, icon: 'fa fa-eye fa-fw', color: 'widget widget-stats bg-yellow' },\n\t\t];\n\t}\n\n\tprivate get csvFilename(): string {\n\t\tconst start = this.dateRange.startDate.format('YYYYMMDD');\n\t\tconst end = this.dateRange.endDate.format('YYYYMMDD');\n\t\treturn `bradmax_st_${this.activeReportType}_${start}_${end}_by_${this.activeGranularity}.csv`;\n\t}\n\n\tprivate get csvData(): string {\n\t\tlet linesNum = this.chartLabelsReport ? this.chartLabelsReport.length : 0;\n\t\tlet result = '';\n\t\tlet line = '';\n\t\tlet dateFormat = 'YYYY-MM-DD HH:mm';\n\t\tif ((this.activeGranularity == 'day') || (this.activeGranularity == 'week')) {\n\t\t\tdateFormat = 'YYYY-MM-DD';\n\t\t} else if (this.activeGranularity == 'month') {\n\t\t\tdateFormat = 'YYYY-MM';\n\t\t} else if (this.activeGranularity == 'year') {\n\t\t\tdateFormat = 'YYYY';\n\t\t}\n\t\t// Write header.\n\t\tlet columns = new Array<string>();\n\t\tcolumns.push('Date');\n\t\tfor (let col of this.chartUsersViewsHistory) {\n\t\t\tcolumns.push(col.label);\n\t\t}\n\t\tresult += (columns.join(',') + \"\\r\\n\");\n\t\t// Write data.\n\t\tfor (let i = 0; i < linesNum; i++) {\n\t\t\tline = '\"' + moment(this.chartLabelsReport[i]).format(dateFormat) + '\"';\n\t\t\tfor (let col of this.chartUsersViewsHistory) {\n\t\t\t\tline += (',' + col.data[i]);\n\t\t\t}\n\t\t\tline += \"\\r\\n\";\n\t\t\tresult += line;\n\t\t}\n\t\treturn result;\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/st/component/view/st.view.component.ts","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tOnInit\n} from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { DropdownModel } from '../../../form/dropdown/dropdown.model';\nimport { PagesService, PageReportFilters } from '../../../../service/analytics/pages.service';\nimport { TagService } from '../../../../service/analytics/tag.service';\nimport { ExistingTagSelectorService } from '../../../../service/analytics/existing.tag.selector.service';\nimport { GranularityType } from '../../component/charts/chart.model';\nimport { ReportType} from '../component/report-type-picker/report.model';\nimport { GeoGranularityType } from '../component/geo-picker/geo.model';\nimport moment from 'moment';\n\nimport {\n\tAccountProductsListResponse,\n\tAnalyticsAudienceHistoryResponse,\n\tAnalyticsAudienceHistoryResponseItem\n} from '../../../../model/api.model';\nimport { AnalyticsService } from '../../../../service/analytics.service';\nimport { UserService } from '../../../../service/user.service';\nimport { ExportService } from '../../../../service/export.service';\nimport { UsersAndViewsVsTimeService } from '../../service/usersAndViewsVSTime.service';\nimport { ProductService } from '../../../../service/product.service';\nimport { isNumeric } from '@angular/common/src/pipes/number_pipe';\nimport { isNumber } from 'util';\nimport { Event } from '@angular/router';\nimport { TagInputModule } from 'ngx-chips';\nimport { ViewService } from '../../../../service/view.service';\n\n@Component({\n\tselector: 'analytics-st-raport-view',\n\ttemplate: require('./stRaport.view.component.html'),\n\tstyles: [\n\t\t':host .table-loader {height:330px;position:relative;}',\n\t\t':host .report-criteria tags {background-color:#fafafa;border-left:solid 1px #fafafa;border-right:solid 1px #fafafa;}',\n\t\t':host .report-criteria label {line-height:30px;}',\n\t\t':host .report .widget {marging-bottom:0;}',\n\t\t':host .analytics-geo-table .clickable {cursor:pointer;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AnalyticsSTRaportView extends Localization implements OnInit {\n\tprivate countriesList: DropdownModel[];\n\tprivate regionsList: DropdownModel[];\n\tprivate citiesList: DropdownModel[];\n\tprivate selectedCountryCode: string | null;\n\tprivate selectedCountry: DropdownModel | null;\n\tprivate selectedRegion: string | null;\n\tprivate selectedCity: string | null;\n\n\tprivate isCountrySelectorVisible: boolean;\n\tprivate isRegionSelectorVisible: boolean;\n\tprivate isCitySelectorVisible: boolean;\n\n\tprivate demographyAgeFrom: DropdownModel[];\n\tprivate demographyAgeTo: DropdownModel[];\n\tprivate demographySexList: DropdownModel[];\n\tprivate demographySexToChartMetaMap: any;\n\n\tpublic selectedAgeFrom: DropdownModel;\n\tpublic selectedAgeTo: DropdownModel;\n\tpublic selectedSex: DropdownModel;\n\n\tprivate raportItems: any;\n\tprivate reportTypes: Array<ReportType> = ['report', 'geolocation', 'tags', /*'gender', 'age'*/];\n\tprivate activeReportType: ReportType = 'report';\n\tprivate dateRange: any;\n\tchartUsersViewsHistory: any;\n\tchartLabelsReport: Array<string>;\n\tchartDemSex: any;\n\tchartDemAge: any;\n\n\tmapColorRange: any;\n\tmapChartRegionsSkippingsSet: any;\n\tmapChartData: any;\n\tgeoDataTable: any;\n\tpagingOptions : any;\n\ttagsDataTable: any;\n\n\tprivate geoGranularityTypes: Array<GeoGranularityType> = ['city','region'];\n\tprivate activeGeoType: GeoGranularityType = 'region' ;\n\n\tgranularityTypes: Array<GranularityType> = ['all'];\n\tactiveGranularity: GranularityType = 'day';\n\n\tisBetaMode = false;\n\t\tconstructor( public pagesService: PagesService,\n\t\t\t\t\t\t\t\t\tpublic tagService: TagService,\n\t\t\t\t\t\t\t\t\tprivate user: UserService,\n\t\t\t\t\t\t\t\t\tpublic locale: LocaleService,\n\t\t\t\t\t\t\t\t\tpublic translation: TranslationService,\n\t\t\t\t\t\t\t\t\tprivate analyticsService: AnalyticsService,\n\t\t\t\t\t\t\t\t\tprivate existingTagSelector: ExistingTagSelectorService,\n\t\t\t\t\t\t\t\t\tprivate cdr: ChangeDetectorRef,\n\t\t\t\t\t\t\t\t\tprivate view: ViewService,\n\t\t\t\t\t\t\t\t){\n\t\tsuper(locale, translation);\n\n\t\tthis.isBetaMode = this.view.checkIfBetaMode();\n\t\tthis.pagingOptions = {\n\t\t\tpage: 1,\n\t\t\tpage_size: 10,\n\t\t\ttotal_items: 0\n\t\t};\n\n\t\t// Init chart data containers.\n\t\tthis.chartDemSex = {\n\t\t\tdata: null,\n\t\t\tlabels: new Array<string>()\n\t\t};\n\t\tthis.chartDemAge = {\n\t\t\tdata: null,\n\t\t\tlabels: new Array<string>()\n\t\t};\n\n\t\tthis.countriesList = null;\n\t\tthis.regionsList =  [{ label: 'All', value: null}];\n\t\tthis.citiesList =  [{ label: 'All', value: null}];\n\t\tthis.selectedCountryCode = null;\n\t\tthis.selectedCountry = null;\n\t\tthis.selectedRegion = null;\n\t\tthis.selectedCity = null;\n\t\tthis.isRegionSelectorVisible = false;\n\t\tthis.isCitySelectorVisible = false;\n\t\tthis.isCountrySelectorVisible = true;\n\t\tthis.mapColorRange = ['#d9ebfb', '#348fe2'];\n\t\tthis.mapChartRegionsSkippingsSet = null;\n\n\t\tthis.dateRange = this.user.getDateRangeSelection();\n\n\t\tthis.demographyAgeFrom = [];\n\t\tthis.demographyAgeTo = [];\n\t\tfor(let age=0; age <= 100; age++) {\n\t\t\tlet ageStr = age + '';\n\t\t\tthis.demographyAgeFrom.push({label: ageStr, value: age});\n\t\t\tthis.demographyAgeTo.push({label: ageStr, value: age});\n\t\t}\n\t\tthis.demographyAgeFrom[0].selected = true;\n\t\tthis.demographyAgeTo[100].selected = true;\n\t\tthis.selectedAgeFrom = this.demographyAgeFrom[0];\n\t\tthis.selectedAgeTo = this.demographyAgeTo[100];\n\n\t\tthis.demographySexList = [];\n\t\tthis.demographySexList.push({label: 'All', value: 0});\n\t\tthis.demographySexList.push({label: this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['MALE'], value: 1});\n\t\tthis.demographySexList.push({label: this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['FEMALE'], value: 2});\n\t\tthis.demographySexList.push({label: this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['OTHER'], value: 3});\n\t\tthis.selectedSex = this.demographySexList[0];\n\n\t\tthis.demographySexToChartMetaMap = {\n\t\t\t'm': {\n\t\t\t\tlabel: this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['MALE'],\n\t\t\t\tbackgroundColor: \"rgba(52,152,219,0.8)\",\n\t\t\t\tborderColor: \"rgba(52,152,219,1)\"\n\t\t\t},\n\t\t\t'f': {\n\t\t\t\tlabel: this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['FEMALE'],\n\t\t\t\tbackgroundColor: \"rgba(46, 204, 103,0.8)\",\n\t\t\t\tborderColor: \"rgba(46, 204, 103,1)\"\n\t\t\t},\n\t\t\t'o': {\n\t\t\t\tlabel: this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['OTHER'],\n\t\t\t\tbackgroundColor: \"rgba(230, 126, 34,0.8)\",\n\t\t\t\tborderColor: \"rgba(230, 126, 34,1)\"\n\t\t\t},\n\t\t\t'': {\n\t\t\t\tlabel: this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['WORD']['UNDEFINED'],\n\t\t\t\tbackgroundColor: \"rgba(153,153,153,0.8)\",\n\t\t\t\tborderColor: \"rgba(153,153,153,1)\"\n\t\t\t}\n\t\t};\n\n\t\tthis.tagsDataTable = null;\n\n\t\tthis.pagesService.listOfCountries().subscribe((data: any) => {\n\t\t\tthis.countriesList = this.buildDropdownList(data);\n\t\t\tthis.selectedCountry = (this.countriesList && this.countriesList.length) ? this.countriesList[0] : null;\n\t\t\tthis.isCountrySelectorVisible = true;\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\n\t\t// Call crd on data change in existingTagSelector. Needed for correct data refresh on tags load.\n\t\tthis.existingTagSelector.changeDetectionEmitter.subscribe(() => this.cdr.markForCheck());\n\t\tthis.existingTagSelector.reset();\n\t}\n\n\tngOnInit() {\n\t\tthis.onDateRangeChanged([this.dateRange.startDate, this.dateRange.endDate]);\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tgetPageReportFilters() {\n\t\tlet result = new PageReportFilters();\n\n\t\tresult.geoCountryCode = this.selectedCountryCode;\n\t\tif(this.selectedRegion !== null) {\n\t\t\tresult.geoRegionId = parseInt(this.selectedRegion);\n\t\t}\n\t\tresult.tags = this.existingTagSelector.selectedTagsList;\n\t\tresult.demSex = this.selectedSex.value;\n\t\tresult.demAgeFrom = this.selectedAgeFrom.value;\n\t\tresult.demAgeTo = this.selectedAgeTo.value;\n\n\t\treturn result;\n\t}\n\n\tonGranularityChange(granularity: GranularityType): void {\n\t\tthis.activeGranularity = granularity;\n\t\tthis.loadDataForReport();\n\t}\n\n\tonReportTypeChange(_activeReportType : ReportType) {\n\t\tthis.activeReportType = _activeReportType;\n\t\t/* if(this.activeReportType == 'age') {\n\t\t\t// Reset age filter.\n\t\t\tthis.selectedAgeFrom = this.demographyAgeFrom[0];\n\t\t\tthis.selectedAgeTo = this.demographyAgeTo[100];\n\t\t} else if(this.activeReportType == 'gender') {\n\t\t\t// Reset sex filter.\n\t\t\tthis.selectedSex = this.demographySexList[0];\n\t\t} else  */if(this.activeReportType == 'tags') {\n\t\t\t// Reset tags filter.\n\t\t\tthis.existingTagSelector.reset();\n\t\t}\n\t\tthis.loadDataForReport();\n\t}\n\n\tonGeoTypeChanged(_geoType: GeoGranularityType){\n\t\tthis.activeGeoType = _geoType;\n\t\tthis.loadDataForReport();\n\t}\n\n\tonValueChangeTag(_event: Event) {\n\t\tthis.loadDataForReport();\n\t}\n\n\tonSelectCountry(selectedCountryItem: any) {\n\t\tthis.selectedCountryCode = selectedCountryItem.value;\n\t\tthis.selectedRegion = null;\n\t\tthis.isRegionSelectorVisible = (this.selectedCountryCode !== null);\n\t\tthis.isCitySelectorVisible = this.isRegionSelectorVisible && (this.selectedRegion !== null);\n\n\t\tif (this.selectedCountryCode !== null){\n\t\t\tthis.pagesService.listOfRegions(selectedCountryItem.value).subscribe((data: any) => {\n\t\t\t\tthis.selectedRegion = null;\n\t\t\t\tthis.regionsList = this.buildDropdownList(data);\n\t\t\t\tsetTimeout(() => { this.cdr.markForCheck();},20);\n\t\t\t});\n\t\t} else {\n\t\t\tthis.selectedRegion = null;\n\t\t\tthis.regionsList =  [{ label: 'All', value: null}];\n\t\t\tthis.citiesList =  [{ label: 'All', value: null}];\n\t\t}\n\n\t\tthis.loadDataForReport();\n\t}\n\n\tonSelectRegion(_event: Event) {\n\t\tthis.selectedRegion = _event['value'];\n\t\tthis.isCitySelectorVisible = (this.selectedRegion !== null);\n\t\tif (_event['value'] !== null){\n\t\t\tthis.pagesService.listOfCities(_event['value']).subscribe((data: any) => {\n\t\t\t\tthis.citiesList = this.buildDropdownList(data);\n\t\t\t\tthis.selectedCity = null;\n\t\t\t\tsetTimeout(() => { this.cdr.markForCheck();},20);\n\t\t\t});\n\t\t} else {\n\t\t\tthis.citiesList =  [{ label: 'All', value: null}];\n\t\t\tthis.selectedCity = null;\n\t\t}\n\t\tthis.loadDataForReport();\n\t}\n\n\tonDropdownSelectAgeFrom(rec: any) {\n\t\tif(rec) {\n\t\t\tthis.selectedAgeFrom = rec;\n\t\t\tthis.loadDataForReport();\n\t\t}\n\t}\n\n\tonDropdownSelectAgeTo(rec: any) {\n\t\tif(rec) {\n\t\t\tthis.selectedAgeTo = rec;\n\t\t\tthis.loadDataForReport();\n\t\t}\n\t}\n\n\tonDropdownSelectSex(rec: any) {\n\t\tif(rec) {\n\t\t\tthis.selectedSex = rec;\n\t\t\tthis.loadDataForReport();\n\t\t}\n\t}\n\n\tonSelectCity(_event: Event) {\n\t\tthis.loadDataForReport();\n\t}\n\n\tonDateRangeChanged(_event: any) {\n\t\tthis.user.setDateRangeSelection(_event[0], _event[1])\n\t\tthis.dateRange = this.user.getDateRangeSelection();\n\t\tthis.loadDataForReport();\n\t}\n\n\tonPageChanged(_page: number) {\n\t\tthis.pagingOptions.page = _page;\n\t}\n\n\tonCountryTableRowClick(rec: any) {\n\t\tif((rec !== null) && ('countryCode' in rec)) {\n\t\t\tthis.selectCountryByCode(rec.countryCode);\n\t\t}\n\t}\n\n\tonMapRegionClick(_data: any) {\n\t\tif(this.selectedCountryCode === null) {\n\t\t\t// Add possibility to choose only country on world map.\n\t\t\t// World map is shown when this.selectedCountryCode === null.\n\t\t\tthis.selectCountryByCode(_data.selectedRowValues[0]);\n\t\t}\n\t}\n\n\tonTagAdd(_event: any) {\n\t\tthis.loadDataForReport();\n\t}\n\n\tonTagRemove(_event: any) {\n\t\tthis.loadDataForReport();\n\t}\n\n\tselectCountryByCode(countryCode: string) {\n\t\tif(this.countriesList !== null) {\n\t\t\tfor(let rec of this.countriesList) {\n\t\t\t\tif(rec.value === countryCode) {\n\t\t\t\t\tthis.selectedCountry = rec;\n\t\t\t\t\tthis.onSelectCountry(rec);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tbuildDropdownList(_data: any): DropdownModel[] {\n\t\tlet result: DropdownModel[];\n\t\tif (_data.length == 0) {\n\t\t\treturn [{ value: '', label: ''}];\n\t\t}\n\t\tresult = new Array(0);\n\t\tresult.push( { label: 'All', value: null } );\n\t\tfor (let _i = 0; _i < _data.length; _i++ ){\n\t\t\tif (!(_data[_i].code == null)) {\n\t\t\t\t// when filed CODE comes -> country data\n\t\t\t\tresult.push( { value: _data[_i].code, label: _data[_i].name } );\n\t\t\t} else if (!(_data[_i].id == null)) {\n\t\t\t\t// when CODE field not comes, filed ID is expected, -> city and regione data comes\n\t\t\t\tresult.push( { value: _data[_i].id, label: _data[_i].name } );\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tloadDataForGeolocation() {\n\t\t// Lazy load for this.mapChartRegionsSkippingsSet = this.geoRegionsMapChartFix.skippingSet;\n\t\tif(this.mapChartRegionsSkippingsSet === null) {\n\t\t\tlet geoRegionsMapChartFix = require('../../geo/geo.country.view.regions.fix.json');\n\t\t\tthis.mapChartRegionsSkippingsSet = geoRegionsMapChartFix.skippingSet;\n\t\t}\n\n\t\t// Request data load from service.\n\t\tthis.pagesService.getGeoReport(this.user.accountId, this.dateRange, this.getPageReportFilters()).subscribe (\n\t\t\t\t(data: any) => {\n\n\t\t\tthis.geoDataTable = new Array(0);\n\t\t\tlet mapDataTable = [[\"Region\",\"Value\"]];\n\n\t\t\tif (this.selectedCountryCode === null) {\n\t\t\t\tlet countries: Array<any> = data.countries;\n\t\t\t\tthis.pagingOptions.page = 1;\n\t\t\t\tthis.pagingOptions.total_items = countries.length;\n\t\t\t\tfor (let rec of countries) {\n\t\t\t\t\tlet views = parseFloat(rec.views);\n\t\t\t\t\tlet users = parseFloat(rec.users);\n\t\t\t\t\tmapDataTable.push([ rec.country.country_code, views ]);\n\t\t\t\t\tthis.geoDataTable.push({\n\t\t\t\t\t\tlabel: rec.country.name,\n\t\t\t\t\t\tcountryCode: rec.country.country_code,\n\t\t\t\t\t\tflag: \"flag-icon flag-icon-\"+rec.country.country_code.toLowerCase(),\n\t\t\t\t\t\tviews: views,\n\t\t\t\t\t\tusers: users\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet regions: Array<any> = data.regions;\n\t\t\t\tthis.pagingOptions.page = 1;\n\t\t\t\tthis.pagingOptions.total_items = regions.length;\n\t\t\t\tfor(let rec of regions) {\n\t\t\t\t\tlet views = parseFloat(rec.views);\n\t\t\t\t\tlet users = parseFloat(rec.users);\n\t\t\t\t\tmapDataTable.push([ rec.region.subdiv_code, views ]);\n\t\t\t\t\tthis.geoDataTable.push({\n\t\t\t\t\t\tlabel:  rec.region.name,\n\t\t\t\t\t\tflag: \"flag-icon\",\n\t\t\t\t\t\tviews: views,\n\t\t\t\t\t\tusers: users\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.updateSummaryData(parseFloat(data.summary.views), parseFloat(data.summary.users));\n\n\t\t\tthis.mapChartData = {\n\t\t\t\tchartType: 'GeoChart',\n\t\t\t\t// dataTable: this.makeRegionDataForMapChart(selectedCountryCode, data),\n\t\t\t\tapiKey: this.analyticsService.getGoogleMapsApiKey(),\n\t\t\t\tdataTable: mapDataTable,\n\t\t\t\toptions: {\n\t\t\t\t\tcolorAxis: {colors: this.mapColorRange}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (this.selectedCountryCode !== null) {\n\t\t\t\tthis.mapChartData.options.resolution = (this.selectedCountryCode in this.mapChartRegionsSkippingsSet) ? 'countries': 'provinces';\n\t\t\t\tthis.mapChartData.options.region = this.selectedCountryCode;\n\t\t\t\tif (this.activeGeoType == \"city\") {\n\t\t\t\t\tthis.mapChartData.options.displayMode = 'markers';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tloadUsersAndViewsHistoryReport() {\n\t\tthis.pagesService.getUsersAndViewsHistoryReport(this.user.accountId, this.dateRange, this.activeGranularity, this.getPageReportFilters()).subscribe (\n\t\t\t(data: any) => {\n\t\t\t\tthis.chartUsersViewsHistory = new Array<chartjs.BaseDataset>();\n\t\t\t\tfor (let _i = 0; _i < data.length; _i++){\n\t\t\t\t\tthis.chartUsersViewsHistory.push(data[_i].data);\n\t\t\t\t}\n\t\t\t\tthis.chartLabelsReport = data[0].labels;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t);\n\t}\n\n\tloadDemSexReport() {\n\t\tthis.pagesService.getDemSexReport(this.user.accountId, this.dateRange, this.getPageReportFilters()).subscribe (\n\t\t\t(data: any) => {\n\t\t\t\tthis.chartDemSex.labels = new Array<string>();\n\t\t\t\tlet demographySexStats = {\n\t\t\t\t\tbackgroundColor: new Array<string>(),\n\t\t\t\t\tborderColor: new Array<string>(),\n\t\t\t\t\tdata: new Array<number>()\n\t\t\t\t};\n\t\t\t\tfor(let rec of data.sex_stats) {\n\t\t\t\t\tlet sexChartInfo = this.mapSexStrToChartInfo(rec.sex);\n\t\t\t\t\tdemographySexStats.backgroundColor.push(sexChartInfo.backgroundColor);\n\t\t\t\t\tdemographySexStats.borderColor.push(sexChartInfo.borderColor);\n\t\t\t\t\tdemographySexStats.data.push(parseFloat(rec.views));\n\t\t\t\t\tthis.chartDemSex.labels.push(sexChartInfo.label);\n\t\t\t\t}\n\n\t\t\t\tthis.chartDemSex.data = new Array<chartjs.BaseDataset>();\n\t\t\t\tthis.chartDemSex.data.push(demographySexStats);\n\t\t\t\tthis.updateSummaryData(parseFloat(data.summary.views), parseFloat(data.summary.users));\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tloadDemAgeReport() {\n\t\tthis.pagesService.getDemAgeReport(this.user.accountId, this.dateRange, this.getPageReportFilters()).subscribe (\n\t\t\t(data: any) => {\n\t\t\t\tthis.chartDemAge.data = new Array<chartjs.BaseDataset>();\n\t\t\t\tthis.chartDemAge.labels = new Array<string>();\n\t\t\t\tlet demographyAgeStats = {\n\t\t\t\t\tbackgroundColor: \"‎#0000FF\",\n\t\t\t\t\tbarThickness: 40,\n\t\t\t\t\tdata: new Array<number>(),\n\t\t\t\t\tlabel: this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['SUBPAGES']['VIEWS']\n\t\t\t\t};\n\t\t\t\tfor(let rec of data.age_stats) {\n\t\t\t\t\tdemographyAgeStats.data.push(parseFloat(rec.views));\n\t\t\t\t\tthis.chartDemAge.labels.push(rec.age_from+'..'+rec.age_to);\n\t\t\t\t}\n\t\t\t\tthis.chartDemAge.data.push(demographyAgeStats);\n\t\t\t\tthis.updateSummaryData(parseFloat(data.summary.views), parseFloat(data.summary.users));\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tloadTopViewedTagsReport() {\n\t\tconst MAX_TOP_TAGS = 200;\n\t\tthis.pagesService.getTopViewedTagsReport(this.user.accountId, this.dateRange, this.getPageReportFilters(), MAX_TOP_TAGS).subscribe (\n\t\t\t(data: any) => {\n\t\t\t\tthis.tagsDataTable = data.records;\n\t\t\t\tthis.pagingOptions.page = 1;\n\t\t\t\tthis.pagingOptions.total_items = data.records.length;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\n\tloadDataForReport() {\n\t\tif(this.activeReportType == 'report') {\n\t\t\tthis.loadUsersAndViewsHistoryReport();\n\t\t\tthis.loadSummaryData();\n\t\t} else if (this.activeReportType == 'geolocation') {\n\t\t\tthis.loadDataForGeolocation();\n\t\t} /* else if (this.activeReportType == 'gender') {\n\t\t\tthis.loadUsersAndViewsHistoryReport();\n\t\t\tthis.loadDemSexReport();\n\t\t} else if (this.activeReportType == 'age') {\n\t\t\tthis.loadUsersAndViewsHistoryReport();\n\t\t\tthis.loadDemAgeReport();\n\t\t} */ else {\n\t\t\t// tags report.\n\t\t\tthis.loadUsersAndViewsHistoryReport();\n\t\t\tthis.loadSummaryData();\n\t\t\tthis.loadTopViewedTagsReport();\n\t\t}\n\t}\n\n\tmapSexStrToChartInfo(sexStr:string): any {\n\t\tif(sexStr in this.demographySexToChartMetaMap) {\n\t\t\treturn this.demographySexToChartMetaMap[sexStr];\n\t\t}\n\t\treturn this.demographySexToChartMetaMap[''];\n\t}\n\n\tloadSummaryData() {\n\t\tthis.pagesService.getUsersAndViewsSummaryReport(this.user.accountId, this.dateRange, this.getPageReportFilters()).subscribe (\n\t\t\t(data: any) => {\n\t\t\t\tthis.updateSummaryData(data.views, data.users);\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t);\n\t}\n\n\tupdateSummaryData(views: number, users: number) {\n\t\tconst sumItemTitles = this.translation['translationData']['en']['ANALYTICS_ST_RAPORT']['SUMMARY'];\n\t\tlet viewsPerUser = (users > 0) ? views / users : null;\n\n\t\tthis.raportItems = [\n\t\t\t{title: sumItemTitles['USERS'], value: users, desc: sumItemTitles['SELECTED_CRITERIA'], icon: 'fa fa-users fa-fw', color: 'widget widget-stats bg-blue' },\n\t\t\t{title: sumItemTitles['VIEWS'], value: views, desc: sumItemTitles['SELECTED_CRITERIA'], icon: 'fa fa-play-circle fa-fw', color: 'widget widget-stats bg-black'},\n\t\t\t{title: sumItemTitles['VIEWS_PER_USER'], value: viewsPerUser, desc: sumItemTitles['SELECTED_CRITERIA'], icon: 'fa fa-eye fa-fw', color: 'widget widget-stats bg-yellow'},\n\t\t];\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/st/raport/stRaport.view.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { Ng2GoogleChartsModule } from 'ng2-google-charts';\nimport { TagInputModule } from 'ngx-chips';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { AnalyticsService } from '../../../service/analytics.service';\nimport { ExistingTagSelectorService } from '../../../service/analytics/existing.tag.selector.service';\nimport { PagesService } from '../../../service/analytics/pages.service';\nimport { TagService } from '../../../service/analytics/tag.service';\nimport { VirtualDropdownModule } from '../../virtual/dropdown/virtual.dropdown.module';\nimport { FormComponentsModule } from '../../form/form.module';\nimport { CamelCaseToSpaceModule } from '../../pipe/camelCaseToSpace/camelCaseToSpace.module';\nimport { CapitalizeFirstModule } from '../../pipe/capitalizeFirst/capitalize.first.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { PagerModule } from '../component/pager/pager.module';\nimport { UsersAndViewsVsTimeService } from '../service/usersAndViewsVSTime.service';\nimport { GeoPickerComponent } from './component/geo-picker/geo.picker.component';\nimport { ReportPickerComponent } from './component/report-type-picker/report.picker.component';\nimport { AnalyticsSTView } from './component/view/st.view.component';\nimport { PrefixedTagsService } from './service/prefixed.tags.service';\nimport { AnalyticsSTRaportView } from './raport/stRaport.view.component';\n\nexport const routes: Routes = [\n\t{ path: '', component: AnalyticsSTRaportView },\n\t{ path: 'beta', component: AnalyticsSTView },\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tChartModule,\n\t\tTagInputModule,\n\t\tPagerModule,\n\t\tNg2GoogleChartsModule,\n\t\tCamelCaseToSpaceModule,\n\t\tCapitalizeFirstModule,\n\t\tVirtualDropdownModule,\n\t],\n\tdeclarations: [\n\t\tAnalyticsSTRaportView,\n\t\tAnalyticsSTView,\n\t\t// ClientBreadcrumbsComponent,\n\t\tReportPickerComponent,\n\t\tGeoPickerComponent\n\t],\n\tproviders: [\n\t\tAnalyticsService,\n\t\tPagesService,\n\t\t// ProductService,\n\t\tUsersAndViewsVsTimeService,\n\t\tExistingTagSelectorService,\n\t\tTagService,\n\t\tPrefixedTagsService,\n\t]\n})\nexport class AnalyticsSTModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/st/st.module.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Input, Output, TemplateRef } from '@angular/core';\nimport { ChangeEvent } from 'ngx-virtual-scroller';\n\nconst selector = `virtual-list`;\n@Component({\n\tselector,\n\ttemplate: require('./virtual.list.component.html'),\n\tstyles: [require('./virtual.list.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class VirtualListComponent {\n\t@HostBinding(`class`) readonly selector = selector;\n\n\t@Output() readonly scrollerStart = new EventEmitter<ChangeEvent>();\n\t@Output() readonly scrollerEnd = new EventEmitter<ChangeEvent>();\n\t@Output() readonly scrollerChange = new EventEmitter<ChangeEvent>();\n\t@Output() readonly scrollerUpdate = new EventEmitter<any[]>();\n\n\t@Input() itemTemplate: TemplateRef<{ item: any; }>;\n\t@Input() listHeight = 30;\n\t@Input() itemHeight = 30;\n\t@Input() items: any[];\n\t@Input() compareItems: (a: any, b: any) => boolean;\n\t@Input() trackItem: (index: number, item: any) => string;\n\n\t@HostBinding('class.top-gradient') showTopGradient = false;\n\n\tlistViewportItems: any[];\n\n\tconstructor(\n\t\tpublic cdr: ChangeDetectorRef,\n\t) { }\n\n\thandleListVieportUpdate(items: any[]) {\n\t\tthis.listViewportItems = items;\n\t\tthis.scrollerUpdate.emit(this.listViewportItems);\n\t\tthis.cdr.markForCheck();\n\t}\n\n\thandleListVieportChange(event: ChangeEvent) {\n\t\tconst topGrad = event.scrollStartPosition > 0;\n\t\tif (this.showTopGradient != topGrad) {\n\t\t\tthis.showTopGradient = topGrad;\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t\tthis.scrollerChange.emit(event);\n\t}\n\n\thandleListVieportStart(event: ChangeEvent) { this.scrollerStart.emit(event); }\n\thandleListVieportEnd(event: ChangeEvent) { this.scrollerEnd.emit(event); }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/virtual/list/component/virtual.list.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { VirtualScrollerModule } from 'ngx-virtual-scroller';\nimport { VirtualListComponent } from './component/virtual.list.component';\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tVirtualScrollerModule,\n\t],\n\tproviders: [\n\n\t],\n\tdeclarations: [\n\t\tVirtualListComponent,\n\t\t// VirtualDropdownPopupComponent,\n\t\t// VirtualDropdownFilterPipe,\n\t],\n\texports: [\n\t\tVirtualListComponent,\n\t],\n\tentryComponents: [\n\t\tVirtualListComponent,\n\t],\n})\nexport class VirtualListModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/virtual/list/virtual.list.module.ts","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { of } from 'rxjs/observable/of';\nimport { tap, filter } from 'rxjs/operators';\nimport { PagesService } from '../../../../service/analytics/pages.service';\nimport { CityRecord, CountryRecord, RegionRecord } from '../model/sampled-traffc.model';\n\n// interface AnalyticsSampledTrafficGeoCountry {\n// \tregions: {}[];\n// }\n\n@Injectable()\nexport class AnalyticsSampledTrafficGeoService {\n\n\tprivate readonly regions: Map<string, RegionRecord[]> = new Map<string, RegionRecord[]>();\n\t// private readonly cities: Map<string, CityRecord[]> = new Map<string, CityRecord[]>();\n\tprivate _countries: CountryRecord[];\n\tprivate _countryCodes: string[];\n\n\tconstructor(\n\t\tprivate pages: PagesService,\n\t) { }\n\n\tisValidCountryCode(countryCode: string) { return this._countryCodes.indexOf(countryCode) > -1; }\n\tcountryNameByCode(countryCode: string): string | null {\n\t\tconst country = this._countries.find(c => c.code === countryCode);\n\t\tif (country)\n\t\t\treturn country.name;\n\t\treturn null;\n\t}\n\n\tregionNameById(countryCode: string, regionId: number): string | null {\n\t\tconst regions = this.regions.has(countryCode) ? this.regions.get(countryCode) : null;\n\t\tif (!regions)\n\t\t\treturn null;\n\t\tconst region = regions.find(c => c.id === regionId);\n\t\tif (!!region)\n\t\t\treturn region.name;\n\t\treturn null;\n\t}\n\n\tregionCodeById(countryCode: string, regionId: number): string | null {\n\t\tconst regions = this.regions.has(countryCode) ? this.regions.get(countryCode) : null;\n\t\tif (!regions)\n\t\t\treturn null;\n\t\tconst region = regions.find(c => c.id === regionId);\n\t\tconsole.log(region);\n\t\tif (!!region)\n\t\t\treturn region.name;\n\t\treturn null;\n\t}\n\n\tcountries$(): Observable<CountryRecord[]> {\n\t\tif (this._countries)\n\t\t\treturn of(this._countries);\n\t\treturn this.pages.listOfCountries()\n\t\t\t.pipe(\n\t\t\t\tfilter(v => !!v),\n\t\t\t\ttap(countries => {\n\t\t\t\t\tthis._countries = countries;\n\t\t\t\t\tthis._countryCodes = this._countries.map(c => c.code.toUpperCase());\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tregions$(countryCode: string): Observable<RegionRecord[]> {\n\t\tif (this.regions.has(countryCode)) {\n\t\t\tconst cached = this.regions.get(countryCode);\n\t\t\tif (!!cached)\n\t\t\t\treturn of(cached);\n\t\t}\n\t\treturn this.pages.listOfRegions(countryCode)\n\t\t\t.pipe(\n\t\t\t\ttap(regions => this.regions.set(countryCode, regions))\n\t\t\t);\n\t}\n\n\t// cities$(countryCode: string, regionId: number): Observable<CityRecord[]> {\n\t// \tconst key = `${countryCode}-${regionId}`;\n\t// \tif (this.cities.has(key)) {\n\t// \t\tconst cached = this.cities.get(key);\n\t// \t\tif (!!cached)\n\t// \t\t\treturn of(cached)\n\t// \t}\n\t// \treturn this.pages.listOfCities(`${regionId}`)\n\t// \t\t.pipe(\n\t// \t\t\ttap(cities => this.cities.set(key, cities))\n\t// \t\t);\n\t// }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/service/sampled-traffic.geo.service.ts","import { LowerCasePipe } from '@angular/common';\nimport { Pipe, PipeTransform } from '@angular/core';\nimport { CamelCaseToSpacePipe } from '../../../pipe/camelCaseToSpace/camelCaseToSpace.pipe';\nimport { CapitalizeFirstPipe } from '../../../pipe/capitalizeFirst/capitalize.first.pipe';\n\n@Pipe({ name: 'tagPrefix' })\n\nexport class TagPrefixPipe implements PipeTransform {\n\n\tconstructor(\n\t\tprivate lowercase: LowerCasePipe,\n\t\tprivate capitalizeFirst: CapitalizeFirstPipe,\n\t\tprivate camelCaseToSpace: CamelCaseToSpacePipe,\n\t) { }\n\n\ttransform(input: string): string {\n\t\tif (!input || typeof input !== 'string' || input.length < 1)\n\t\t\treturn input;\n\t\tswitch (input) {\n\t\t\tcase 'mid':\n\t\t\t\treturn `Media id`;\n\t\t\tdefault:\n\t\t\t\treturn this.capitalizeFirst.transform(this.lowercase.transform(this.camelCaseToSpace.transform(input)));\n\t\t}\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/pipe/tag.prefix.pipe.ts","import { Injectable } from '@angular/core';\nimport { ParamMap, Params, Router } from '@angular/router';\nimport { QueryParamsHandling } from '@angular/router/src/config';\nimport moment from 'moment';\nimport { Observable } from 'rxjs';\nimport { of } from 'rxjs/observable/of';\nimport { switchMap } from 'rxjs/operators';\nimport { UserService } from '../../../../service/user.service';\nimport { HistoryGranularity, UnixDateRange } from '../model/sampled-traffc.model';\nimport { analyticsSampledTrafficRoute } from '../sampled-traffic.module';\nimport { AnalyticsSampledTrafficGeoService } from './sampled-traffic.geo.service';\n\nconst PARAM_RANGE = `r`; // `range`;\nconst PARAM_GRANULARITY = `b`; // `granularity`;\nconst PARAM_GEO = `g`; // `geo`;\nconst PARAM_TAGS = `t`; // `tags`;\n\nexport interface SampledTrafficParams extends Params {\n\t[PARAM_RANGE]: string;\n\t[PARAM_GRANULARITY]: HistoryGranularity;\n\t[PARAM_GEO]: string;\n\t[PARAM_TAGS]: string;\n}\n\n@Injectable()\nexport class AnalyticsSampledTrafficParamsService {\n\n\treadonly defaultGranularity: HistoryGranularity = 'day';\n\n\tprivate redirectCounter = 0;\n\n\tconstructor(\n\t\tprivate router: Router,\n\t\tprivate user: UserService,\n\t\tprivate geo: AnalyticsSampledTrafficGeoService,\n\t) { }\n\n\tnavigate(queryParams: Partial<SampledTrafficParams>, queryParamsHandling: QueryParamsHandling = 'merge') {\n\t\treturn this.router.navigate(analyticsSampledTrafficRoute, { queryParams, queryParamsHandling, replaceUrl: true });\n\t}\n\n\tisRangeKey(k: string) { return PARAM_RANGE === k; }\n\tisGranularityKey(k: string) { return PARAM_GRANULARITY === k; }\n\tisGeolocationKey(k: string) { return PARAM_GEO === k; }\n\tisTagsKey(k: string) { return PARAM_TAGS === k; }\n\tisKey(k: string) { return this.isRangeKey(k) || this.isGranularityKey(k) || this.isGeolocationKey(k) || this.isTagsKey(k); }\n\n\tformatUserDateRange(): Partial<SampledTrafficParams> {\n\t\tconst dateRange = this.user.getDateRangeSelection();\n\t\treturn { [PARAM_RANGE]: `${dateRange.startDate.unix()}:${dateRange.endDate.unix()}` };\n\t}\n\n\tformatGeolocation(countryCode?: string, regionId?: number/* , cityId?: number */): Partial<SampledTrafficParams> {\n\t\t// if (!!countryCode && !!regionId && !!cityId)\n\t\t// \treturn { [PARAM_GEO]: `${countryCode}:${regionId}:${cityId}` };\n\t\tif (!!countryCode && !!regionId)\n\t\t\treturn { [PARAM_GEO]: `${countryCode}:${regionId}` };\n\t\tif (!!countryCode)\n\t\t\treturn { [PARAM_GEO]: `${countryCode}` };\n\t\treturn { [PARAM_GEO]: '' };\n\t}\n\n\tformatGranularity(granularity: HistoryGranularity): Partial<SampledTrafficParams> {\n\t\treturn { [PARAM_GRANULARITY]: granularity };\n\t}\n\n\tformatTags(tags?: number[]): Partial<SampledTrafficParams> {\n\t\tif (!!tags)\n\t\t\treturn { [PARAM_TAGS]: tags.join(`,`) };\n\t\treturn { [PARAM_TAGS]: `` };\n\t}\n\n\tparseDateRange(map: ParamMap): UnixDateRange | null {\n\t\tif (!map.has(PARAM_RANGE)) {\n\t\t\t// console.log(`%c parseDateRange NO PARAM_RANGE`, `color:red;`, { map, PARAM_RANGE });\n\t\t\treturn null;\n\t\t}\n\t\tconst raw_range = map.get(PARAM_RANGE);\n\t\tif (typeof raw_range !== 'string' || raw_range.length < 1) {\n\t\t\t// console.log(`%c parseDateRange INVALID raw_range`, `color:red;`, { raw_range });\n\t\t\treturn null;\n\t\t}\n\t\tconst raw_range_array = raw_range.split(`:`);\n\t\tif (raw_range_array.length !== 2) {\n\t\t\t// console.log(`%c parseDateRange INVALID raw_range_array`, `color:red;`, { raw_range_array });\n\t\t\treturn null;\n\t\t}\n\t\tlet unix_range_array: [number, number];\n\t\ttry {\n\t\t\tunix_range_array = [parseInt(raw_range_array[0]), parseInt(raw_range_array[1])];\n\t\t} catch (error) {\n\t\t\t// console.log(`%c parseDateRange ERROR parseInt`, `color:red;`, { error });\n\t\t\treturn null;\n\t\t}\n\t\tif (unix_range_array[0] > unix_range_array[1]) {\n\t\t\t// console.log(`%c parseDateRange start > end`, `color:red;`, { unix_range_array });\n\t\t\treturn null;\n\t\t}\n\t\tlet moment_range_array: [moment.Moment, moment.Moment];\n\t\ttry {\n\t\t\tmoment_range_array = [moment.unix(unix_range_array[0]), moment.unix(unix_range_array[1])];\n\t\t} catch (error) {\n\t\t\t// console.log(`%c parseDateRange ERROR moment.unix`, `color:red;`, { error });\n\t\t\treturn null;\n\t\t}\n\t\tif (!moment_range_array[0].isValid() || !moment_range_array[1].isValid()) {\n\t\t\t// console.log(`%c parseDateRange invalid moment`, `color:red;`, { moment_range_array });\n\t\t\treturn null;\n\t\t}\n\t\tif (moment_range_array[0].isSameOrAfter(moment_range_array[1])) {\n\t\t\t// console.log(`%c parseDateRange start isSameOrAfter end`, `color:red;`, { moment_range_array });\n\t\t\treturn null;\n\t\t}\n\t\tthis.user.setDateRangeSelection(moment_range_array[0], moment_range_array[1]);\n\n\t\treturn unix_range_array;\n\t}\n\n\tparseGranularity(map: ParamMap): HistoryGranularity | null {\n\t\tswitch (map.get(PARAM_GRANULARITY)) {\n\t\t\tcase 'hour': return 'hour';\n\t\t\tcase 'day': return 'day';\n\t\t\tcase 'week': return 'week';\n\t\t\tcase 'month': return 'month';\n\t\t\tcase 'year': return 'year';\n\t\t\tdefault: return null;\n\t\t}\n\t}\n\n\tparseGeo(map: ParamMap) {\n\t\tif (!map.has(PARAM_GEO)) {\n\t\t\t// console.log(`%c parseGeo NO PARAM_GEO`, `color:red;`, { map, PARAM_GEO });\n\t\t\treturn null;\n\t\t}\n\t\tconst raw_geo = map.get(PARAM_GEO);\n\t\tif (typeof raw_geo !== 'string') {\n\t\t\t// console.log(`%c parseGeo INVALID raw_geo`, `color:red;`, { raw_geo });\n\t\t\treturn null;\n\t\t}\n\t\tconst raw_geo_array = raw_geo.split(`:`);\n\t\tconst countryCode = raw_geo_array[0].length > 0 ? raw_geo_array[0] : null;\n\t\tconst _regionId = raw_geo_array.length > 1 ? raw_geo_array[1] : null;\n\t\treturn !!_regionId\n\t\t\t? { countryCode, regionId: parseInt(_regionId) }\n\t\t\t: { countryCode };\n\t\t// const _cityId = raw_geo_array.length > 2 ? raw_geo_array[2] : null;\n\t\t// console.log(`%c parseGeo PARSED`, `color:blue;`, { countryCode, _regionId, _cityId });\n\t\t// return !!_cityId && !!_regionId\n\t\t// \t? { countryCode, regionId: parseInt(_regionId), cityId: parseInt(_cityId) }\n\t\t// \t: !!_regionId\n\t\t// \t\t? { countryCode, regionId: parseInt(_regionId) }\n\t\t// \t\t: { countryCode };\n\t}\n\n\tparseTagIds(map: ParamMap): null | number[] {\n\t\tif (!map.has(PARAM_TAGS)) {\n\t\t\t// console.log(`%c parseGeo NO PARAM_TAGS`, `color:red;`, { map, PARAM_TAGS });\n\t\t\treturn null;\n\t\t}\n\t\tconst raw_tags = map.get(PARAM_TAGS);\n\t\tif (typeof raw_tags !== 'string') {\n\t\t\t// console.log(`%c parseDateRange INVALID raw_tags`, `color:red;`, { raw_tags });\n\t\t\treturn null;\n\t\t}\n\t\tconst raw_tags_array = raw_tags.split(`,`);\n\t\tif (raw_tags_array.length == 0) {\n\t\t\t// console.log(`%c parseDateRange EMPTY raw_tags_array`, `color:red;`, { raw_tags_array });\n\t\t\treturn null;\n\t\t}\n\t\treturn raw_tags_array.map(t => parseInt(t)).filter(i => isFinite(i) && i > 0);\n\t}\n\n\tredirectIfNeeded(queryParamMap: ParamMap): Observable<boolean> | boolean {\n\t\treturn this.geo.countries$()\n\t\t\t.pipe(\n\t\t\t\tswitchMap(() => {\n\t\t\t\t\t// console.groupCollapsed(`%c GUARD.redirectIfNeeded(redirectCounter:${this.redirectCounter})`, `color:gray;`);\n\t\t\t\t\tlet needRedirect = false;\n\t\t\t\t\t/// unhandled params\n\t\t\t\t\t// const unhandled = queryParamMap.keys.filter(k => !this.isKey(k))\n\t\t\t\t\t// if (unhandled.length > 0) {\n\t\t\t\t\t// \tconsole.log(`%c FIX: unhandled params`, `color:orangered;`, { unhandled });\n\t\t\t\t\t// \tneedRedirect = true;\n\t\t\t\t\t// }\n\t\t\t\t\t/// fixed params\n\t\t\t\t\tlet fixedParams: Partial<SampledTrafficParams> = {};\n\t\t\t\t\tfor (const key of queryParamMap.keys) {\n\t\t\t\t\t\tif (this.isKey(key))\n\t\t\t\t\t\t\tfixedParams[key] = queryParamMap.get(key);\n\t\t\t\t\t}\n\t\t\t\t\t/// range\n\t\t\t\t\tconst range = this.parseDateRange(queryParamMap);\n\t\t\t\t\tif (!range) {\n\t\t\t\t\t\tfixedParams = { ...fixedParams, ...this.formatUserDateRange() };\n\t\t\t\t\t\t// console.log(`%c date range FIX: with user data`, `color:orangered;`, { range });\n\t\t\t\t\t\tneedRedirect = true;\n\t\t\t\t\t}\n\t\t\t\t\t// else { console.log(`%c range OK`, `color:green;`, { range }); }\n\t\t\t\t\t/// granularity\n\t\t\t\t\tconst granularity = this.parseGranularity(queryParamMap);\n\t\t\t\t\tif (!granularity) {\n\t\t\t\t\t\tfixedParams = { ...fixedParams, ...this.formatGranularity(this.defaultGranularity) };\n\t\t\t\t\t\t// console.log(`%c granularity FIX: no data`, `color:orangered;`, { granularity });\n\t\t\t\t\t\tneedRedirect = true;\n\t\t\t\t\t}\n\t\t\t\t\t// else { console.log(`%c granularity OK`, `color:green;`, { granularity }); }\n\t\t\t\t\t/// geolocation\n\t\t\t\t\tconst geolocation = this.parseGeo(queryParamMap);\n\t\t\t\t\tif (!geolocation) {\n\t\t\t\t\t\tfixedParams = { ...fixedParams, ...this.formatGeolocation(null) };\n\t\t\t\t\t\t// console.log(`%c geolocation FIX: no data`, `color:orangered;`, { geolocation });\n\t\t\t\t\t\tneedRedirect = true;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!!geolocation.countryCode && geolocation.countryCode !== '') {\n\t\t\t\t\t\tconst countryCode = `${geolocation.countryCode}`.toUpperCase();\n\t\t\t\t\t\tconst found = this.geo.isValidCountryCode(countryCode);\n\t\t\t\t\t\tif (!found) {\n\t\t\t\t\t\t\t// console.log(`%c geolocation countryCode FIX: NOT FOUND`, `color:orangered;`, { countryCode });\n\t\t\t\t\t\t\tfixedParams = { ...fixedParams, ...this.formatGeolocation(null) };\n\t\t\t\t\t\t\tneedRedirect = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// else { console.log(`%c geolocation OK: valid countryCode`, `color:green;`, { countryCode }); }\n\t\t\t\t\t}\n\t\t\t\t\t// else { console.log(`%c geolocation OK: empty`, `color:green;`, { geolocation }); }\n\t\t\t\t\t/// tags\n\t\t\t\t\tconst tags = this.parseTagIds(queryParamMap);\n\t\t\t\t\tif (!tags) {\n\t\t\t\t\t\tfixedParams = { ...fixedParams, ...this.formatTags(null) };\n\t\t\t\t\t\t// console.log(`%c tags FIX: no data`, `color:orangered;`, { tags });\n\t\t\t\t\t\tneedRedirect = true;\n\t\t\t\t\t}\n\t\t\t\t\t// else if (tags.length > 0) { console.log(`%c tags PASS for VALIDATION`, `color:white;`, { tags }); }\n\t\t\t\t\t// else { console.log(`%c tags OK: empty`, `color:green;`, { tags }); }\n\t\t\t\t\t/////////////////\n\t\t\t\t\t/// REDIRECT ////\n\t\t\t\t\tif (!!needRedirect) {\n\t\t\t\t\t\tif (this.redirectCounter < 10) {\n\t\t\t\t\t\t\t// console.log(`%c REDIRECT !!! `, `color:red;`, { queryParamMap, fixedParams });\n\t\t\t\t\t\t\tthis.navigate(fixedParams, '');\n\t\t\t\t\t\t\tthis.redirectCounter++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.error(`AnalyticsSampledTrafficParamsService tries to redirect 10 times in row`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// console.groupEnd();\n\t\t\t\t\t\treturn of(false);\n\t\t\t\t\t}\n\t\t\t\t\t// console.log(`%c PASS `, `color:green;`, { queryParamMap });\n\t\t\t\t\t// console.groupEnd();\n\t\t\t\t\tthis.redirectCounter = 0;\n\t\t\t\t\treturn of(true);\n\t\t\t\t})\n\t\t\t);\n\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/service/sampled-traffic.params.service.ts","import { EventEmitter, Injectable } from \"@angular/core\";\nimport { ParamMap } from \"@angular/router\";\nimport { BehaviorSubject, Observable, Subscription } from \"rxjs\";\nimport { forkJoin } from \"rxjs/observable/forkJoin\";\nimport { of } from \"rxjs/observable/of\";\nimport { catchError, debounceTime, filter, finalize, map, switchMap, tap } from 'rxjs/operators';\nimport { TagRecord, TagRecords, TagService } from \"../../../../service/analytics/tag.service\";\nimport { UserService } from \"../../../../service/user.service\";\nimport { VirtualDropdownModel } from \"../../../virtual/dropdown/model/virtual.dropdown.model\";\nimport { TagPrefixPipe } from \"../pipe/tag.prefix.pipe\";\nimport { AnalyticsSampledTrafficParamsService, SampledTrafficParams } from \"./sampled-traffic.params.service\";\n\n// https://github.com/Gbuomprisco/ngx-chips\nexport interface NgxChipsTagModel extends TagRecord {\n\tdisplay: string;\n\tvalue: number;\n}\n\nexport interface PrefixedTagData {\n\tprefix: string;\n\ttotal: number;\n\tloading: boolean;\n\tselected: VirtualDropdownModel;\n\t$: BehaviorSubject<VirtualDropdownModel[]>;\n\tmodel: VirtualDropdownModel[];\n\tsearch: {\n\t\ttext: string;\n\t\tmodel: VirtualDropdownModel[];\n\t}\n}\n\nexport interface PrefixedTagPage {\n\tprefix: string;\n\tpages: Array<number>;\n\tsearch: string | undefined;\n}\n\n@Injectable()\nexport class AnalyticsSampledTrafficTagsService {\n\n\treadonly PAGE_SIZE = 20;\n\treadonly change = new EventEmitter<void>();\n\n\t// these methods are directly injected to `<tag-input>` and `<tag-input-dropdown>`\n\t// to avoid errors with invalid 'this' contaxt 'bind' these methods.\n\treadonly handleTagSearch = this.searchChipsByText.bind(this);\n\t// readonly handleTagAdding = this.addChip.bind(this);\n\n\tselectedChips: NgxChipsTagModel[] = [];\n\tisSearchingTags = false;\n\t// private foundTags: string[];\n\t// private foundChipsTags: TagRecords;\n\n\tget selectedTagRecords(): TagRecord[] { return [].concat(this.selectedChips.map(c => ({ id: c.id, tag: c.tag }))); }\n\n\tget hasPrefixedTagData() { return !!this.prefixedTagsData; }\n\n\treadonly PREFIX_SEPARATOR = ':';\n\tprivate readonly LOADING_LABEL = 'loading...';\n\tprivate readonly EMPTY_LABEL = '...';\n\n\tprivate prefixedTagsData: Map<string, PrefixedTagData>;\n\tprivate prefixedTagsData$ub: Subscription;\n\n\tprivate fetchPrefixedTags$: BehaviorSubject<PrefixedTagPage>;\n\tprivate fetchPrefixedTags$ub: Subscription;\n\n\tconstructor(\n\t\tprivate user: UserService,\n\t\tprivate tagService: TagService,\n\t\tprivate tagPrefix: TagPrefixPipe,\n\t\tprivate params: AnalyticsSampledTrafficParamsService,\n\t) { }\n\n\tinit() {\n\t\tthis.prefixedTagsData$ub = this.tagService.prefixes(this.user.accountId)\n\t\t\t.pipe(debounceTime(100))\n\t\t\t.subscribe({\n\t\t\t\tnext: tags => this.prefixedTagsData = this.parsePrefixedTagsData(tags),\n\t\t\t\terror: (error: any) => console.error(error),\n\t\t\t\tcomplete: () => this.change.emit(),\n\t\t\t});\n\n\t\tif (!this.fetchPrefixedTags$) {\n\t\t\tthis.fetchPrefixedTags$ = new BehaviorSubject<PrefixedTagPage>(null);\n\t\t}\n\n\t\tthis.fetchPrefixedTags$ub = this.fetchPrefixedTags$.asObservable()\n\t\t\t.pipe(\n\t\t\t\tfilter(v => !!v && !!this.prefixedTagsData && this.prefixedTagsData.has(v.prefix)),\n\t\t\t\tdebounceTime(250),\n\t\t\t\tswitchMap(req => {\n\t\t\t\t\t// console.debug(` >> fetch$ >> `, req.prefix, { req });\n\t\t\t\t\tthis.prefixedTagsData.get(req.prefix).loading = true;\n\t\t\t\t\tthis.change.emit();\n\t\t\t\t\treturn forkJoin(req.pages.map(page => this.fetchPrefixedTagsList(page, req)))\n\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\tthis.prefixedTagsData.get(req.prefix).loading = false;\n\t\t\t\t\t\t\t\tthis.change.emit();\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\t// next: v => console.debug(`fetch$ub.next`, v),\n\t\t\t\terror: e => console.error(e),\n\t\t\t\tcomplete: () => this.change.emit(),\n\t\t\t});\n\t\treturn this.change;\n\t}\n\n\tdestroy() {\n\t\tif (this.prefixedTagsData$ub != null && this.prefixedTagsData$ub.closed == false)\n\t\t\tthis.prefixedTagsData$ub.unsubscribe();\n\t\tthis.prefixedTagsData$ub = null;\n\n\t\tif (this.fetchPrefixedTags$ub != null && this.fetchPrefixedTags$ub.closed == false)\n\t\t\tthis.fetchPrefixedTags$ub.unsubscribe();\n\t\tthis.fetchPrefixedTags$ub = null;\n\n\t\tif (this.fetchPrefixedTags$ != null && this.fetchPrefixedTags$.closed == false)\n\t\t\tthis.fetchPrefixedTags$.unsubscribe();\n\t\tthis.fetchPrefixedTags$ = null;\n\t}\n\n\treset() {\n\t\tthis.selectedChips = [];\n\t}\n\n\tidsToValues(ids: number[]): string[] {\n\t\tif (!ids || ids.length === 0 || !this.selectedChips || this.selectedChips.length === 0)\n\t\t\treturn [];\n\t\treturn this.selectedChips.filter(c => ids.indexOf(c.id) > -1).map(c => c.tag);\n\t}\n\n\tformatChip(display: string, value: number, id: number, tag: string): NgxChipsTagModel {\n\t\tconst arr = display.split(this.PREFIX_SEPARATOR);\n\t\tif (arr && arr.length > 1) {\n\t\t\treturn { display: `${this.tagPrefix.transform(arr[0])}${this.PREFIX_SEPARATOR}${arr[1]}`, value, id, tag };\n\t\t}\n\t\treturn { display: this.tagPrefix.transform(display), value, id, tag };\n\t}\n\t////\n\tresolveFromQueryParams(queryParamMap: ParamMap) {\n\t\t// console.groupCollapsed(`%c TAGS.resolveByIds`, `color:gray;`);\n\t\tconst tags = this.params.parseTagIds(queryParamMap);\n\t\t// console.log(`%c tags`, `color:white;`, { tags });\n\t\tif (!tags) {\n\t\t\t// console.groupEnd();\n\t\t\treturn null;\n\t\t}\n\t\tconst needFetch = [];\n\t\tconst alreadySelected = [];\n\t\tif (!!this.selectedChips && this.selectedChips.length > 0) {\n\t\t\tfor (const tid of tags) {\n\t\t\t\t// console.log(`%c tags check`, `color:white;`, this.selectedChips, { tid });\n\t\t\t\tif (this.selectedChips.find(c => c.value === tid)) {\n\t\t\t\t\talreadySelected.push(tid);\n\t\t\t\t} else {\n\t\t\t\t\tneedFetch.push(tid);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const tid of tags)\n\t\t\t\tneedFetch.push(tid);\n\t\t}\n\t\t// console.log(`%c tags needFetch`, `color:bluevelvet;`, { needFetch });\n\t\t// console.log(`%c tags alreadySelected`, `color:bluevelvet;`, { alreadySelected });\n\t\tif (needFetch.length < 1)\n\t\t\treturn null;\n\t\t// console.log(`%c tags SEARCH`, `color:bluevelvet;`, { needFetch });\n\t\treturn this.searchTagsByIds(needFetch)\n\t\t\t.pipe(\n\t\t\t\tmap(resp => {\n\t\t\t\t\t// console.log(`%c tags resp`, `color:bluevelvet;`, { tags, resp });\n\t\t\t\t\tconst rec = resp.records;\n\t\t\t\t\tconst rec_ids = rec.map(r => r.id);\n\t\t\t\t\tconst tagsToRemove = tags.filter(tid => rec_ids.indexOf(tid) === -1);\n\t\t\t\t\t// console.log(`%c tags tagsToRemove`, `color:bluevelvet;`, { tagsToRemove });\n\t\t\t\t\t// console.groupEnd();\n\t\t\t\t\tif (tagsToRemove.length > 0) {\n\t\t\t\t\t\tconst queryParams: Partial<SampledTrafficParams> = {};\n\t\t\t\t\t\tfor (const key of queryParamMap.keys) {\n\t\t\t\t\t\t\tif (this.params.isKey(key))\n\t\t\t\t\t\t\t\tqueryParams[key] = queryParamMap.get(key);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.params.navigate({ ...queryParams, ...this.params.formatTags(rec_ids) });\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tthis.selectedChips = this.selectedChips.concat(resp.records.map(t => this.tagToChip(t)));\n\t\t\t\t\treturn null;\n\t\t\t\t})\n\t\t\t);\n\t}\n\t////\n\n\tprefixes(): IterableIterator<keyof PrefixedTagData> { return (this.prefixedTagsData ? this.prefixedTagsData.keys() : []) as IterableIterator<keyof PrefixedTagData>; }\n\n\tprefixedTagData(prefix: string): PrefixedTagData | null { return this.prefixedTagsData ? this.prefixedTagsData.get(prefix) : null; }\n\n\tfetchPrefixedTags(prefix: string, pages: Array<number>, search: string) { this.fetchPrefixedTags$.next({ prefix, pages, search }); }\n\n\t////\n\n\tprivate parsePrefixedTagsData(recList: TagRecords[]): Map<string, PrefixedTagData> {\n\t\tconst prefixes = new Map<string, PrefixedTagData>();\n\t\tlet model: VirtualDropdownModel[];\n\t\tfor (const rec of recList) {\n\t\t\tconst { prefix, total_records, records } = rec;\n\t\t\tmodel = this.initVirtualDropdownModel(prefix);\n\t\t\tconst fullprefix = `${prefix}${this.PREFIX_SEPARATOR}`;\n\t\t\tif (total_records > records.length) {\n\t\t\t\t// to fetch\n\t\t\t\tfor (let index = 0; index < total_records; index++) {\n\t\t\t\t\tmodel.push(this.emptyVirtualDropdownItem(fullprefix, index));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// from data\n\t\t\t\tfor (let index = 0; index < total_records; index++) {\n\t\t\t\t\tmodel.push(this.virtualDropdownItem(fullprefix, records[index].id, records[index].id, records[index].tag));\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst $ = new BehaviorSubject(model);\n\t\t\tconst selected = model[0];\n\t\t\tprefixes.set(prefix, { prefix, total: total_records, $, model, selected, search: { text: ``, model: null }, loading: false });\n\t\t}\n\t\treturn prefixes;\n\t}\n\n\tprivate fetchPrefixedTagsList(/* accountId: number, */ page: number, req: PrefixedTagPage) {\n\t\tconst prefix = req.prefix;\n\t\tconst fullprefix = `${prefix}${this.PREFIX_SEPARATOR}`;\n\t\tconst tagData = this.prefixedTagsData.get(prefix);\n\t\tconst searchtext = req.search;\n\t\tconst tagModel = searchtext.length > 0 ? tagData.search.model : tagData.model;\n\t\tconst startIdx = Math.max(0, Math.min(tagData.total, page * this.PAGE_SIZE));\n\n\t\treturn this.markVirtualDropdownModel(tagData, startIdx, true)\n\t\t\t.pipe(\n\t\t\t\tswitchMap(() => this.tagService.list(this.user.accountId, { text: `${fullprefix}*${searchtext}` }, page + 1, this.PAGE_SIZE)),\n\t\t\t\tcatchError(_e => this.markVirtualDropdownModel(tagData, startIdx, false)),\n\t\t\t\tmap((recs: TagRecords) => {\n\t\t\t\t\tif (!!recs && recs.records.length > 0) {\n\t\t\t\t\t\tconst { emit, model } = this.updateVirtualDropdownModel(recs, tagModel, startIdx, fullprefix);\n\t\t\t\t\t\tif (emit) {\n\t\t\t\t\t\t\tif (searchtext.length > 0) {\n\t\t\t\t\t\t\t\ttagData.search.text = searchtext;\n\t\t\t\t\t\t\t\ttagData.search.model = model;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttagData.search.text = ``;\n\t\t\t\t\t\t\t\ttagData.search.model = null;\n\t\t\t\t\t\t\t\ttagData.model = model;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttagData.$.next(model);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn recs;\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n\tprivate updateVirtualDropdownModel(data: TagRecords, model: VirtualDropdownModel[] | null, startIdx: number, fullprefix: string): { emit: boolean; model: VirtualDropdownModel[]; } {\n\t\tconst { prefix, total_records, records } = data;\n\t\tlet emit = false;\n\n\t\tif (model == null || data.page === 1) {\n\t\t\tmodel = this.initVirtualDropdownModel(prefix);\n\t\t\tfor (let index = 0; index < total_records; index++) {\n\t\t\t\tif (index in records) {\n\t\t\t\t\tmodel.push(this.virtualDropdownItem(fullprefix, records[index].id, records[index].id, records[index].tag));\n\t\t\t\t} else {\n\t\t\t\t\tmodel.push(this.emptyVirtualDropdownItem(fullprefix, index));\n\t\t\t\t}\n\t\t\t}\n\t\t\temit = true;\n\t\t}\n\n\t\tlet modelIndex: number;\n\t\tlet newItem: VirtualDropdownModel\n\t\tlet record: TagRecord;\n\t\tfor (let recordIndex = 0; recordIndex < records.length; recordIndex++) {\n\t\t\tmodelIndex = recordIndex + startIdx + 1;\n\t\t\tif (!!model && modelIndex in model) {\n\t\t\t\tif (!!model[modelIndex]\n\t\t\t\t\t&& 'fetch' in model[modelIndex]\n\t\t\t\t\t&& !!model[modelIndex].fetch\n\t\t\t\t\t&& !!model[modelIndex].fetch.loading\n\t\t\t\t) {\n\t\t\t\t\tmodel[modelIndex].fetch.loading = false;\n\t\t\t\t\tmodel[modelIndex].fetch = null;\n\t\t\t\t\tdelete model[modelIndex].fetch;\n\t\t\t\t\trecord = data.records[recordIndex];\n\t\t\t\t\tnewItem = this.virtualDropdownItem(fullprefix, record.id, record.id, record.tag);\n\t\t\t\t\tmodel[modelIndex].uid = newItem.uid;\n\t\t\t\t\tmodel[modelIndex].label = newItem.label;\n\t\t\t\t\tmodel[modelIndex].value = newItem.value;\n\t\t\t\t\tnewItem = null;\n\t\t\t\t\trecord = null;\n\t\t\t\t\temit = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { emit, model };\n\t}\n\n\tprivate markVirtualDropdownModel(tagData: PrefixedTagData, startIdx: number, loading: boolean) {\n\t\tconst searchtext = tagData.search.text;\n\t\tconst model = searchtext.length > 0 ? tagData.search.model : tagData.model;\n\t\tconst stopIdx = Math.min(tagData.total, startIdx + this.PAGE_SIZE);\n\t\tlet emit = false;\n\t\tfor (let modelIndex = startIdx + 1; modelIndex <= stopIdx; modelIndex++) {\n\t\t\tif (!!model[modelIndex] && 'fetch' in model[modelIndex] && !!model[modelIndex].fetch && !model[modelIndex].fetch.loading) {\n\t\t\t\tmodel[modelIndex].fetch.loading = loading;\n\t\t\t\tmodel[modelIndex].label = loading ? this.LOADING_LABEL : this.EMPTY_LABEL;\n\t\t\t\temit = true;\n\t\t\t}\n\t\t}\n\t\tif (emit) {\n\t\t\tif (searchtext.length > 0) {\n\t\t\t\ttagData.search.model = model;\n\t\t\t} else {\n\t\t\t\ttagData.model = model;\n\t\t\t}\n\t\t\ttagData.$.next(model);\n\t\t}\n\t\treturn of(null);\n\t}\n\n\tprivate virtualDropdownItem(fullprefix: string, uid: number, id: number, tag: string, partial?: Partial<VirtualDropdownModel>): VirtualDropdownModel {\n\t\tconst hasPrefix = !tag ? false : tag.indexOf(fullprefix) === 0;\n\t\tconst val = { uid, label: tag, value: id, ...partial };\n\t\t// const val = { uid, label: tag, value: tag, ...partial };\n\t\tif (hasPrefix) {\n\t\t\tif (!!val.label)\n\t\t\t\tval.label = val.label.slice(fullprefix.length);\n\t\t\t// val.label = this.tagPrefix.transform(val.label.slice(fullprefix.length));\n\t\t\tval.value = id;// tag;\n\t\t} else {\n\t\t\tval.value = id;//`${fullprefix}${tag}`;\n\t\t};\n\t\treturn val;\n\t}\n\n\tprivate emptyVirtualDropdownItem(fullprefix: string, index: number) {\n\t\treturn this.virtualDropdownItem(fullprefix, index, NaN, null, {\n\t\t\tlabel: this.EMPTY_LABEL,\n\t\t\tfetch: { loading: false, page: Math.floor(index / this.PAGE_SIZE) }\n\t\t})\n\t}\n\n\tprivate initVirtualDropdownModel(label: string): VirtualDropdownModel[] { return [{ uid: -1, label: this.tagPrefix.transform(label), value: null }]; }\n\t////\n\n\tprivate searchTagsByIds(ids: number[]): Observable<TagRecords> { return this.tagService.list(this.user.accountId, { ids }, 1, ids.length); }\n\n\tprivate tagToChip(tag: TagRecord): NgxChipsTagModel { return this.formatChip(tag.tag, tag.id, tag.id, tag.tag); }\n\n\tprivate searchChipsByText(text: string): Observable<NgxChipsTagModel[]> {\n\t\tthis.isSearchingTags = true;\n\t\tthis.change.emit();\n\t\treturn this.tagService.list(this.user.accountId, { text })\n\t\t\t.pipe(\n\t\t\t\t// tap((data: TagRecords) => this.foundChipsTags = data),\n\t\t\t\tmap((data: TagRecords) => data.records.map(t => this.tagToChip(t))),\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tthis.isSearchingTags = false;\n\t\t\t\t\tthis.change.emit();\n\t\t\t\t})\n\t\t\t);\n\n\t}\n\n\t// private addChip(tag: NgxChipsTagModel): Observable<NgxChipsTagModel> {\n\t// \tconsole.log(`%c ---->>>> ADD tag`, `color:#bada55;`, { tag });\n\n\t// \t// // Tag was selected from auto complete drop down. In such case tag is and object. Just pass through.\n\t// \t// if (tag && tag.value) {\n\t// \t// \treturn of(tag);\n\t// \t// }\n\n\t// \t// // Tag empty - just ignore without any notification. Accidental user action.\n\t// \tif (!tag) {\n\t// \t\treturn of(null);\n\t// \t}\n\t// \treturn of(tag);\n\t// \t// // Tag is a string. Check it if is on auto complete list.\n\t// \t// const tagNorm = `${tag.value}`.toLowerCase();\n\t// \t// // Check if tag is on search list. If so then return it.\n\t// \t// if (this.foundTags) {\n\t// \t// \tfor (const t of this.foundTags) {\n\t// \t// \t\tif (t.toLowerCase() == tagNorm) {\n\t// \t// \t\t\treturn of(tag);\n\t// \t// \t\t}\n\t// \t// \t}\n\t// \t// }\n\n\t// \t// // If not present return null for skipping it. Only existing tags can be chosen.\n\t// \t// // this.flashMessagesService.show(this.translation.translate('ANALYTICS_TAG_SERVICE.SELECT_EXISTING_TIP'), { cssClass: 'alert-warning', timeout: 5000 });\n\t// \t// return of(null);\n\t// }\n\n\n\t////\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/service/sampled-traffic.tags.service.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, OnInit, Output } from \"@angular/core\";\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport moment from \"moment\";\nimport { ChangeEvent } from \"ngx-virtual-scroller\";\nimport { BehaviorSubject, Subscription } from \"rxjs\";\nimport { TagRecord } from \"../../../../../service/analytics/tag.service\";\nimport { VirtualDropdownModel } from \"../../../../virtual/dropdown/model/virtual.dropdown.model\";\nimport { GeoCountryRecord, MomentDateRange, UnixDateRange } from \"../../model/sampled-traffc.model\";\nimport { AnalyticsSampledTrafficGeoService } from \"../../service/sampled-traffic.geo.service\";\nimport { AnalyticsSampledTrafficTagsService, PrefixedTagData } from \"../../service/sampled-traffic.tags.service\";\n\ntype PickerOptions = { opens: 'right', startDate: moment.Moment; endDate: moment.Moment; };\n\nexport interface GeolocationEvent { countryCode: string; regionId: number; };\n\n@Component({\n\tselector: 'sampled-traffic-criteria',\n\ttemplate: require('./sampled-traffic.criteria.component.html'),\n\tstyles: [require('./sampled-traffic.criteria.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnalyticsSampledTrafficCriteriaComponent extends Localization implements OnInit, OnDestroy {\n\n\treadonly RANGE_PICKER_OPTIONS: PickerOptions = { opens: 'right', startDate: null, endDate: null };\n\n\t@Output() readonly dateRangeChange = new EventEmitter<MomentDateRange>();\n\t@Output() readonly geolocationChange = new EventEmitter<GeolocationEvent>();\n\t@Output() readonly tagsChange = new EventEmitter<TagRecord[]>();\n\n\treadonly countriesDropdown$ = new BehaviorSubject<VirtualDropdownModel[]>(this.initDropdownModel());\n\treadonly regionsDropdown$ = new BehaviorSubject<VirtualDropdownModel[]>(this.initDropdownModel());\n\treadonly citiesDropdown$ = new BehaviorSubject<VirtualDropdownModel[]>(this.initDropdownModel());\n\n\n\t@Input() itemHeight = 32;\n\t@Input() set dateRange(range: UnixDateRange) {\n\t\tif (!range) return;\n\t\tthis.RANGE_PICKER_OPTIONS.startDate = moment.unix(range[0]);\n\t\tthis.RANGE_PICKER_OPTIONS.endDate = moment.unix(range[1]);\n\t\tthis.cdr.markForCheck();\n\t}\n\n\t@Input()\n\tset countryCode(v: string | null) { this._countryCode = v; this.fetchRegions(); }\n\tget countryCode() { return this._countryCode; }\n\n\t@Input()\n\tset regionId(v: number | null) { this._regionId = v; this.cdr.markForCheck(); }\n\tget regionId() { return this._regionId; }\n\n\n\tisLoadingRegion = false;\n\tisLoadingCity = false;\n\n\tprivate _countryCode: string | null = null;\n\tprivate _regionId: number | null = null;\n\n\tprivate countries$ub: Subscription;\n\tprivate regions$ub: Subscription;\n\tprivate tag$ub: Subscription;\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic tag: AnalyticsSampledTrafficTagsService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate geo: AnalyticsSampledTrafficGeoService,\n\t) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit() {\n\t\tthis.countries$ub = this.geo.countries$()\n\t\t\t.subscribe({ next: countries => this.countriesDropdown$.next(this.formatGeoDropdown(countries)), });\n\t\tthis.tag$ub = this.tag.init()\n\t\t\t.subscribe({ next: () => this.cdr.markForCheck() });\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.tag$ub != null && this.tag$ub.closed == false) this.tag$ub.unsubscribe(); this.tag$ub = null;\n\t\tthis.tag.destroy();\n\t\tif (this.countries$ub != null && this.countries$ub.closed == false) this.countries$ub.unsubscribe(); this.countries$ub = null;\n\t\tif (this.regions$ub != null && this.regions$ub.closed == false) this.regions$ub.unsubscribe(); this.regions$ub = null;\n\t}\n\n\thandleDateRangeChanged(event: MomentDateRange) { this.dateRangeChange.emit(event); }\n\n\thandleSelectCountry(item: VirtualDropdownModel) {\n\t\tthis.countryCode = item.value;\n\t\tthis.regionId = null;\n\t\tthis.regionsDropdown$.next(this.initDropdownModel());\n\t\tthis.citiesDropdown$.next(this.initDropdownModel());\n\t\tthis.cdr.markForCheck();\n\t\tthis.emitGeolocation();\n\t\tthis.fetchRegions();\n\t}\n\n\thandleSelectRegion(item: VirtualDropdownModel) {\n\t\tthis.regionId = item.value;\n\t\tthis.citiesDropdown$.next(this.initDropdownModel());\n\t\tthis.cdr.markForCheck();\n\t\tthis.emitGeolocation();\n\t}\n\n\thandleResetCountry() {\n\t\tthis.countryCode = null;\n\t\tthis.regionId = null;\n\t\tthis.regionsDropdown$.next(this.initDropdownModel());\n\t\tthis.citiesDropdown$.next(this.initDropdownModel());\n\t\tthis.cdr.markForCheck();\n\t\tthis.emitGeolocation();\n\t}\n\n\thandleResetRegion() {\n\t\tthis.regionId = null;\n\t\tthis.citiesDropdown$.next(this.initDropdownModel());\n\t\tthis.cdr.markForCheck();\n\t\tthis.emitGeolocation();\n\t}\n\n\t///////////////\n\n\thandleTagAdd(_item: { display: string; value: string; }) {\n\t\tthis.tagsChange.emit(this.tag.selectedTagRecords);\n\t}\n\n\thandleTagRemove(_tag: string) {\n\t\tthis.tagsChange.emit(this.tag.selectedTagRecords);\n\t}\n\n\t///////////////\n\n\n\thandlePrefixedTagSelect(data: PrefixedTagData, item: VirtualDropdownModel) {\n\t\tdata.selected = !!data.model && 0 in data.model ? data.model[0] : null;\n\t\tif (this.tag.selectedChips.indexOf(item.value) === -1) {\n\t\t\tconst tag = (!!data.prefix ? `${data.prefix}${this.tag.PREFIX_SEPARATOR}` : '') + item.label;\n\t\t\tthis.tag.selectedChips.push(this.tag.formatChip(tag, item.value, item.value, tag));\n\t\t\tthis.tagsChange.emit(this.tag.selectedTagRecords);\n\t\t}\n\t}\n\n\thandlePrefixedTagScrollEnd(data: PrefixedTagData, event: ChangeEvent) {\n\t\tconst { start, end } = event;\n\t\tconst model = !!data.search.model ? data.search.model : data.model;\n\t\tconst fetchPages = new Set<number>();\n\t\tlet m;\n\t\tfor (let i = start; i <= end; i++) {\n\t\t\tm = model[i];\n\t\t\tif (!!m.fetch && m.fetch.loading === false) {\n\t\t\t\tfetchPages.add(m.fetch.page);\n\t\t\t}\n\t\t}\n\t\tif (fetchPages.size > 0) {\n\t\t\tconst pages: Array<number> = [];\n\t\t\tfetchPages.forEach(p => pages.push(p));\n\t\t\tfetchPages.clear();\n\t\t\tthis.tag.fetchPrefixedTags(data.prefix, pages, data.search.text);\n\t\t}\n\t}\n\n\thandlePrefixedTagSearch(data: PrefixedTagData, text: string) { this.tag.fetchPrefixedTags(data.prefix, [0], text); }\n\n\t///////////////\n\n\tprivate emitGeolocation() { this.geolocationChange.emit({ countryCode: this.countryCode, regionId: this.regionId }); }\n\n\tprivate fetchRegions() {\n\t\tif (!this.countryCode) {\n\t\t\treturn;\n\t\t}\n\t\tthis.isLoadingRegion = true;\n\t\tthis.cdr.markForCheck();\n\t\tif (this.regions$ub != null && !this.regions$ub.closed) this.regions$ub.unsubscribe();\n\t\tthis.regions$ub = this.geo.regions$(this.countryCode)\n\t\t\t.subscribe((data: any) => {\n\t\t\t\tthis.regionsDropdown$.next(this.formatGeoDropdown(data));\n\t\t\t\tthis.isLoadingRegion = false;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t});\n\t}\n\n\tprivate formatGeoDropdown(_data: GeoCountryRecord[] | any[]): VirtualDropdownModel[] {\n\t\tconst result: VirtualDropdownModel[] = this.initDropdownModel();\n\t\tif (_data.length == 0) {\n\t\t\treturn result;\n\t\t}\n\t\tfor (let _i = 0; _i < _data.length; _i++) {\n\t\t\tif ('code' in _data[_i] && !!_data[_i].code) {\n\t\t\t\t// when filed CODE comes -> country data\n\t\t\t\tresult.push({ uid: _i, value: _data[_i].code, label: _data[_i].name });\n\t\t\t} else if ('id' in _data[_i] && !!_data[_i].id) {\n\t\t\t\t// when CODE field not comes, filed ID is expected, -> city and regione data comes\n\t\t\t\tresult.push({ uid: _i, value: _data[_i].id, label: _data[_i].name });\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate initDropdownModel(): VirtualDropdownModel[] { return [{ uid: -1, label: 'All', value: null }]; }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/component/criteria/sampled-traffic.criteria.component.ts","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnChanges, OnDestroy, Output, SimpleChanges, ViewChild } from \"@angular/core\";\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { ChartErrorEvent, ChartReadyEvent, ChartSelectEvent, GoogleChartComponent } from \"ng2-google-charts\";\nimport { ChangeEvent } from \"ngx-virtual-scroller\";\nimport { AnalyticsService } from \"../../../../../service/analytics.service\";\nimport { GeoData, GeoListData, GeoListItem, GeoRegionItem, GoogleGeoChartData, GoogleGeoChartOptions, GoogleGeoChartResolution, GoogleGeoChartTextStyle, UnixDateRange } from \"../../model/sampled-traffc.model\";\nimport { isGeoRegionItem } from '../../model/sampled-traffc.model.util';\nimport { AnalyticsSampledTrafficGeoService } from \"../../service/sampled-traffic.geo.service\";\n\n@Component({\n\tselector: 'sampled-traffic-geo',\n\ttemplate: require('./sampled-traffic.geo.component.html'),\n\tstyles: [require('./sampled-traffic.geo.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\tAnalyticsService,\n\t],\n})\nexport class AnalyticsSampledTrafficGeoComponent extends Localization implements AfterViewInit, OnChanges, OnDestroy {\n\n\treadonly LIST_MIN_WIDTH_PX = 300;\n\n\tprivate readonly CHART_ASPECT_RATIO = 0.625/* 5 / 8 */;\n\tprivate readonly CHART_TEXT_STYLE: GoogleGeoChartTextStyle = { fontName: 'Space Grotesk', fontSize: 12 }\n\tprivate readonly CHART_OPTIONS: GoogleGeoChartOptions = {\n\t\tkeepAspectRatio: false,\n\t\tcolorAxis: { colors: ['#7a6900', '#ffdb00'] }/* { colors: ['#d9ebfb', '#348fe2'] } */,\n\t\tbackgroundColor: 'transparent',\n\t\tdatalessRegionColor: '#2d353c',\n\t\tdefaultColor: 'transparent',\n\t\tlegend: { textStyle: { ...this.CHART_TEXT_STYLE, color: '#fff', } },\n\t\ttooltip: { textStyle: { ...this.CHART_TEXT_STYLE, color: '#222', } },\n\t};\n\n\t@Output() readonly selected = new EventEmitter<GeoListItem>();\n\t@Output() readonly chartError = new EventEmitter<ChartErrorEvent>();\n\n\t@Input() itemHeight = 32;\n\t@Input() dateRange: UnixDateRange;\n\t@Input() countryCode: string | null = null;\n\t@Input() regionId: number | null = null;\n\t@Input() data: GeoData;\n\n\t@HostBinding('class.selectable') selectable = true;\n\n\tchartData: GoogleGeoChartData\n\tlistItems: GeoListData;\n\tlistViewportItems: GeoListData;\n\tshowListTopGradient = false;\n\tresolution: GoogleGeoChartResolution;\n\n\t@ViewChild(GoogleChartComponent) private chart: GoogleChartComponent;\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate el: ElementRef,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate analytics: AnalyticsService,\n\t\tprivate geo: AnalyticsSampledTrafficGeoService,\n\t) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngAfterViewInit() { this.updateSizes(); }\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.data !== null && ('data' in changes || 'regionId' in changes)) {\n\t\t\tthis.updateData();\n\t\t}\n\t}\n\n\tngOnDestroy() {\n\t\tthis.chartData = null\n\t\tthis.listItems = null;\n\t\tthis.listViewportItems = null;\n\t\tthis.showListTopGradient = false;\n\t\tthis.resolution = null;\n\t}\n\n\t@HostListener(`window:resize`)\n\tupdateSizes() {\n\t\tif (!!this.el && !!this.el.nativeElement) {\n\t\t\tconst rect = (this.el.nativeElement as HTMLElement).getBoundingClientRect();\n\t\t\tconst width = rect ? rect.width : NaN;\n\t\t\tif (!!width && !isNaN(width)) {\n\t\t\t\tif (this.updateChartSize(width)) {\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\tthis.redrawChart();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//////////////\n\tcountryNameByCode(countryCode: string) { return this.geo.countryNameByCode(countryCode); }\n\tregionNameById(countryCode: string, regionId: number) { return this.geo.regionNameById(countryCode, regionId); }\n\t//////////////\n\thandleGoogleChartReady(_event: ChartReadyEvent) {\n\t\tthis.updateSizes();\n\t\tthis.cdr.markForCheck();\n\t}\n\n\thandleGoogleChartError(event: ChartErrorEvent) { this.chartError.emit(event); }\n\n\thandleGoogleChartSelect(event: ChartSelectEvent) {\n\t\tif (event.message !== 'select')\n\t\t\treturn;\n\t\tconst value = event.selectedRowValues[0];\n\t\tif (this.countryCode === value || this.regionId === value)\n\t\t\treturn;\n\t\tconst item = this.listItems.find(v => isGeoRegionItem(v) ? v.subdivCode === value : v.countryCode === value);\n\t\tthis.selected.emit(item);\n\t}\n\n\t//////////////\n\n\tcompareListItems(a: GeoListItem, b: GeoListItem) { return a.label === b.label; }\n\n\ttrackListItem(_index: number, item: GeoListItem) { return item.label; }\n\n\thandleListVieportUpdate(items: GeoListData) {\n\t\tthis.listViewportItems = items;\n\t\tthis.cdr.markForCheck();\n\t}\n\n\thandleListVieportChange(event: ChangeEvent) {\n\t\tconst topGrad = event.scrollStartPosition > 0;\n\t\tif (this.showListTopGradient != topGrad) {\n\t\t\tthis.showListTopGradient = topGrad;\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n\n\thandleSelectListItem(item: GeoListItem) {\n\t\tthis.selected.emit(item);\n\t}\n\n\thandleBackClick() {\n\t\tthis.selected.emit(null);\n\t}\n\n\t//////////////\n\n\tprivate updateData() {\n\t\tthis.selectable = this.regionId == null;\n\t\tthis.resolution = this.data.resolution;\n\t\tlet dataTable = this.data.mapItems;\n\t\tlet listItems = this.data.listItems;\n\n\t\tif (!!this.countryCode && !!this.regionId) {\n\t\t\tconst region: GeoRegionItem = !!this.data.listItems\n\t\t\t\t? this.data.listItems.find(i => isGeoRegionItem(i) && i.countryCode === this.countryCode && i.regionId === this.regionId) as GeoRegionItem\n\t\t\t\t: null;\n\t\t\tif (!!region && !!this.data.mapItems) {\n\t\t\t\tdataTable = this.data.mapItems.filter((item, index) => index === 0 || item[0] === region.subdivCode);\n\t\t\t} else {\n\t\t\t\tdataTable = [dataTable[0]];\n\t\t\t}\n\t\t\tif (!!this.data.listItems) {\n\t\t\t\tlistItems = this.data.listItems.filter(i => isGeoRegionItem(i) && i.countryCode === this.countryCode && i.regionId === this.regionId);\n\t\t\t} else {\n\t\t\t\tlistItems = [];\n\t\t\t}\n\t\t}\n\n\t\tthis.chartData = {\n\t\t\tchartType: 'GeoChart',\n\t\t\tapiKey: this.analytics.getGoogleMapsApiKey(),\n\t\t\tdataTable,\n\t\t\toptions: { ...this.CHART_OPTIONS, resolution: this.resolution }\n\t\t}\n\t\tif (this.data.region) {\n\t\t\tthis.chartData.options.region = this.data.region;\n\t\t}\n\t\tthis.listItems = listItems;\n\t\tthis.cdr.markForCheck();\n\t\tthis.redrawChart();\n\t}\n\n\tprivate updateChartSize(width: number) {\n\t\tconst chartWidthRatio = Math.floor(width * 0.333) < this.LIST_MIN_WIDTH_PX ? 1 : 0.666;\n\t\tconst chartWidth = Math.floor(width * chartWidthRatio)\n\t\tif (this.chartData.options.width != chartWidth) {\n\t\t\tthis.chartData.options.width = chartWidth;\n\t\t\tthis.chartData.options.height = Math.floor(chartWidth * this.CHART_ASPECT_RATIO);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate redrawChart() {\n\t\tif (!!this.chart && !!this.chart.wrapper) {\n\t\t\tthis.chart.redraw();\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/component/geo/sampled-traffic.geo.component.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport moment from \"moment\";\nimport { ExportService } from \"../../../../../service/export.service\";\nimport { HistoryChart, HistoryGranularity } from \"../../model/sampled-traffc.model\";\nimport { AnalyticsSampledTrafficGeoService } from \"../../service/sampled-traffic.geo.service\";\n\ntype GranularityDataValues = [HistoryGranularity, HistoryGranularity, HistoryGranularity, HistoryGranularity, HistoryGranularity];\n\n@Component({\n\tselector: 'sampled-traffic-history',\n\ttemplate: require('./sampled-traffic.history.component.html'),\n\tstyles: [require('./sampled-traffic.history.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnalyticsSampledTrafficHistoryComponent extends Localization {\n\n\treadonly GRANULARITY_DATA: GranularityDataValues = ['hour', 'day', 'week', 'month', 'year'];\n\treadonly CHART_GRID_COLOR = 'rgba(255, 255, 255, 0.1)';\n\treadonly CHART_FONT_COLOR = 'rgba(255, 255, 255, 1)';\n\treadonly CHART_DATA_COLORS = [[255, 255, 255], [244, 213, 20]];\n\n\t@Output() readonly granularity = new EventEmitter<HistoryGranularity>();\n\n\t@Input() itemHeight = 32;\n\t@Input() countryCode: string | null = null;\n\t@Input() regionId: number | null = null;\n\t@Input()\n\tset data(d: HistoryChart) {\n\t\tthis._data = d;\n\t\tthis.granularityData = [];\n\t\tif (!!this._data) {\n\t\t\t// console.log(`CHART`, this._data.startDate.toDate(), this._data.endDate.toDate());\n\t\t\tfor (const g of this.GRANULARITY_DATA) {\n\t\t\t\tconst diff = this._data.endDate.diff(this._data.startDate, g, true)\n\t\t\t\t// console.log(g, diff);\n\t\t\t\tif (diff >= 1)\n\t\t\t\t\tthis.granularityData.push(g);\n\t\t\t}\n\t\t}\n\t\tthis.cdr.markForCheck();\n\t}\n\tget data(): HistoryChart { return this._data; }\n\n\tgranularityData: HistoryGranularity[] = [];\n\n\tprivate _data: HistoryChart;\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate geo: AnalyticsSampledTrafficGeoService,\n\t\tprivate save: ExportService,\n\t) {\n\t\tsuper(locale, translation);\n\t}\n\n\ttrackHistoryGranularity(_index: number, item: HistoryGranularity) { return _index + item; }\n\n\thandleGranularityChange(granularity: HistoryGranularity) { this.granularity.emit(granularity); }\n\n\texportCsv(): void {\n\t\tthis.save.exportFileFromJs(this.csvFilename, this.csvData);\n\t}\n\n\tget csvFilename(): string {\n\t\tconst start = this.data.startDate.format('YYYYMMDD');\n\t\tconst end = this.data.endDate.format('YYYYMMDD');\n\t\tconst geoName = (!!this.countryCode && !!this.regionId\n\t\t\t? `${this.geo.countryNameByCode(this.countryCode)}_${this.geo.regionNameById(this.countryCode, this.regionId)}`\n\t\t\t: !!this.countryCode\n\t\t\t\t? this.geo.countryNameByCode(this.countryCode)\n\t\t\t\t: 'global').split(' ').join('_');\n\t\treturn `bradmax_sampled_traffic_${start}_${end}_${geoName}_by_${this.data.granularity}.csv`;\n\t}\n\n\tprivate get csvData(): string {\n\t\tlet linesNum = this.data.labels ? this.data.labels.length : 0;\n\t\tlet result = '';\n\t\tlet line = '';\n\t\tlet dateFormat = 'YYYY-MM-DD HH:mm';\n\t\tif ((this.data.granularity == 'day') || (this.data.granularity == 'week')) {\n\t\t\tdateFormat = 'YYYY-MM-DD';\n\t\t} else if (this.data.granularity == 'month') {\n\t\t\tdateFormat = 'YYYY-MM';\n\t\t} else if (this.data.granularity == 'year') {\n\t\t\tdateFormat = 'YYYY';\n\t\t}\n\t\t// Write header.\n\t\tlet columns = new Array<string>();\n\t\tcolumns.push('Date');\n\t\tfor (let col of this.data.datasets) {\n\t\t\tcolumns.push(col.label);\n\t\t}\n\t\tresult += (columns.join(',') + \"\\r\\n\");\n\t\t// Write data.\n\t\tfor (let i = 0; i < linesNum; i++) {\n\t\t\tline = '\"' + moment(this.data.labels[i]).format(dateFormat) + '\"';\n\t\t\tfor (let col of this.data.datasets) {\n\t\t\t\tline += (',' + col.data[i]);\n\t\t\t}\n\t\t\tline += \"\\r\\n\";\n\t\t\tresult += line;\n\t\t}\n\t\treturn result;\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/component/history/sampled-traffic.history.component.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input } from \"@angular/core\";\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { SummaryData } from \"../../model/sampled-traffc.model\";\n\ninterface SummaryItem { key: keyof SummaryData; value: number; i10n: string; fa: string; }\n\n@Component({\n\tselector: 'sampled-traffic-summary',\n\ttemplate: require('./sampled-traffic.summary.component.html'),\n\tstyles: [require('./sampled-traffic.summary.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnalyticsSampledTrafficSummaryComponent extends Localization {\n\n\treadonly SUMMARY_ITEMS: SummaryItem[] = [\n\t\t{ key: 'views', i10n: 'VIEWS', value: 0, fa: 'play-circle' },\n\t\t{ key: 'users', i10n: 'USERS', value: 0, fa: 'users' },\n\t\t{ key: 'viewsPerUser', i10n: 'VIEWS_PER_USER', value: 0, fa: 'eye' }\n\t];\n\n\t@HostBinding('style.flexDirection') layoutDirection: 'row' | 'column' = 'column';\n\n\t@Input() set data(d: SummaryData) {\n\t\tfor (const i of this.SUMMARY_ITEMS) {\n\t\t\tif (i.key in d) i.value = d[i.key];\n\t\t}\n\t\tthis.updateLayoutToSize();\n\t}\n\n\tshow = false;\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate el: ElementRef,\n\t\tprivate cdr: ChangeDetectorRef,\n\t) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.updateLayoutToSize();\n\t}\n\n\t@HostListener(`window:resize`)\n\tupdateLayoutToSize() {\n\n\t\tconst nativeElement = this.el.nativeElement as HTMLElement;\n\t\tif (!nativeElement)\n\t\t\treturn;\n\n\t\tif (this.show != false) {\n\t\t\tthis.show = false;\n\t\t\tthis.cdr.detectChanges();\n\t\t}\n\n\t\tconst rect = nativeElement.getBoundingClientRect();\n\t\tthis.layoutDirection = rect.width > (rect.height * 2) ? 'row' : 'column';\n\t\t// console.log(`updateLayoutToSize`, this.layoutDirection, rect);\n\t\tthis.show = true;\n\t\tthis.cdr.markForCheck();\n\t}\n\n\ttrackSummaryItem(_index: number, item: SummaryItem) { return _index + item.i10n; }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/component/summary/sampled-traffic.summary.component.ts","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from \"@angular/core\";\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { ChangeEvent } from \"ngx-virtual-scroller\";\nimport { TopViewedTagRecord, TopViewedTagsRecord, UnixDateRange } from \"../../model/sampled-traffc.model\";\n\n@Component({\n\tselector: 'sampled-traffic-tags',\n\ttemplate: require('./sampled-traffic.tags.component.html'),\n\tstyles: [require('./sampled-traffic.tags.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnalyticsSampledTrafficTagsComponent extends Localization {\n\n\t@Output() readonly fetchMore = new EventEmitter<ChangeEvent>();\n\n\t@Input() itemHeight = 32;\n\t@Input() data: TopViewedTagsRecord;\n\t@Input() isFetching = false;\n\t@Input() dateRange: UnixDateRange;\n\n\tlistViewportItems: TopViewedTagRecord[];\n\n\tget listHeight() { return this.itemHeight * (Math.min(10, this.data.records.length) + 0.5); }\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t) {\n\t\tsuper(locale, translation);\n\t}\n\n\thandleListVieportEnd(event: ChangeEvent) { this.fetchMore.next(event); }\n\n\tcompareListItems(a: TopViewedTagRecord, b: TopViewedTagRecord) { return a.tag === b.tag; }\n\n\ttrackListItem(_index: number, item: TopViewedTagRecord) { return item.tag; }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/component/tags/sampled-traffic.tags.component.ts","import { Injectable } from \"@angular/core\";\nimport { ParamMap } from \"@angular/router\";\nimport { UserService } from \"../../../../service/user.service\";\nimport { SampledTrafficFilters } from \"../model/sampled-traffic.filters\";\nimport { AnalyticsSampledTrafficParamsService } from \"./sampled-traffic.params.service\";\nimport { AnalyticsSampledTrafficTagsService } from \"./sampled-traffic.tags.service\";\n\n@Injectable()\nexport class AnalyticsSampledTrafficApiFiltersService {\n\n\tconstructor(\n\t\tprivate user: UserService,\n\t\tprivate params: AnalyticsSampledTrafficParamsService,\n\t\tprivate tag: AnalyticsSampledTrafficTagsService,\n\t) { }\n\n\tparseQueryParams(map: ParamMap): SampledTrafficFilters {\n\t\tconst filters = new SampledTrafficFilters();\n\t\t/// DATE RANGE /////\n\t\tconst parsedRange = this.params.parseDateRange(map);\n\t\tif (!!parsedRange) {\n\t\t\tfilters.dateRange = parsedRange;\n\t\t\tthis.user.setUnixDateRangeSelection(parsedRange[0], parsedRange[1]);\n\t\t} else {\n\t\t\tconst range = this.user.getUnixDateRangeSelection();\n\t\t\tfilters.dateRange = [range.startDate, range.endDate];\n\t\t}\n\t\t/// GRANULARITY /////\n\t\tconst parsedGranularity = this.params.parseGranularity(map);\n\t\tfilters.granularity = !!parsedGranularity ? parsedGranularity : this.params.defaultGranularity;// this.parseGranularity(map);\n\t\t/// GEO /////\n\t\tconst parsedGeo = this.params.parseGeo(map);\n\t\tif (!!parsedGeo) {\n\t\t\tfilters.geoCountryCode = parsedGeo.countryCode;\n\t\t\tif (!!parsedGeo.regionId) {\n\t\t\t\tfilters.geoRegionId = parsedGeo.regionId;\n\t\t\t\t// if (!!parsedGeo.cityId) {\n\t\t\t\t// \tfilters.geoCityId = parsedGeo.cityId;\n\t\t\t\t// } else {\n\t\t\t\t// \tfilters.geoCityId = null;\n\t\t\t\t// }\n\t\t\t} else {\n\t\t\t\tfilters.geoRegionId = null;\n\t\t\t}\n\t\t} else {\n\t\t\tfilters.geoCountryCode = null;\n\t\t}\n\t\t/// TAGS /////\n\t\tfilters.tags = [];\n\t\tconst parsedTagIds = this.params.parseTagIds(map);\n\t\tif (!!parsedTagIds) {\n\t\t\tconst parsedTags = this.tag.idsToValues(parsedTagIds);\n\t\t\tfilters.tags = parsedTags ? parsedTags.map(t => t.toString()) : [];\n\t\t}\n\t\t////////\n\t\t// filters.demSex = null;\n\t\t// filters.demAgeFrom = null;\n\t\t// filters.demAgeTo = null;\n\t\treturn filters;\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/service/sampled-traffic.api.filters.service.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { ChartErrorEvent } from 'ng2-google-charts';\nimport { ChangeEvent } from 'ngx-virtual-scroller';\nimport { Subscription } from 'rxjs';\nimport { forkJoin } from 'rxjs/observable/forkJoin';\nimport { of } from 'rxjs/observable/of';\nimport { debounceTime, filter, map, switchMap } from 'rxjs/operators';\nimport { TagRecord } from '../../../../../service/analytics/tag.service';\nimport { UserService } from '../../../../../service/user.service';\nimport { GeoData, GeoListItem, HistoryChart, HistoryGranularity, MomentDateRange, SummaryData, TopViewedTagItem, TopViewedTagsData } from '../../model/sampled-traffc.model';\nimport { isGeoCountryItem, isGeoRegionItem } from '../../model/sampled-traffc.model.util';\nimport { SampledTrafficFilters } from '../../model/sampled-traffic.filters';\nimport { GoogleGeoRegionsFixService } from '../../service/google.geo.regions.fix.service';\nimport { AnalyticsSampledTrafficApiFiltersService } from '../../service/sampled-traffic.api.filters.service';\nimport { SampledTrafficApiService } from '../../service/sampled-traffic.api.service';\nimport { AnalyticsSampledTrafficParamsService } from '../../service/sampled-traffic.params.service';\nimport { GeolocationEvent } from '../criteria/sampled-traffic.criteria.component';\n\n@Component({\n\tselector: 'sampled-traffic-view',\n\ttemplate: require('./sampled-traffic.view.component.html'),\n\tstyles: [require('./sampled-traffic.view.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\tGoogleGeoRegionsFixService,\n\t\tSampledTrafficApiService,\n\t\tAnalyticsSampledTrafficApiFiltersService,\n\t],\n})\nexport class AnalyticsSampledTrafficViewComponent extends Localization implements OnInit, OnDestroy {\n\n\treadonly LIST_ITEM_HEIGHT_PX = 32;\n\n\tprivate readonly MAX_TOP_TAGS = 20;\n\n\tisLoadingCriteria = true;\n\tisLoadingSummary = true;\n\tisLoadingTags = true;\n\tisLoadingHistory = true;\n\tisLoadingGeo = true;\n\n\tfilters: SampledTrafficFilters;\n\tsummaryData: SummaryData;\n\thistoryChart: HistoryChart;\n\tgeoData: GeoData;\n\ttagsData: TopViewedTagsData;\n\n\tisFetchingTags = false;\n\n\t@HostBinding('class.is-loading')\n\tget isLoading() { return this.isLoadingCriteria || this.isLoadingSummary || this.isLoadingTags || this.isLoadingHistory || this.isLoadingGeo; };\n\n\tprivate data$ub: Subscription;\n\tprivate moreTags$ub: Subscription;\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate api: SampledTrafficApiService,\n\t\tprivate user: UserService,\n\t\tprivate params: AnalyticsSampledTrafficParamsService,\n\t\tprivate filter: AnalyticsSampledTrafficApiFiltersService,\n\t) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit() {\n\t\tthis.data$ub = this.route.queryParamMap\n\t\t\t.pipe(\n\t\t\t\t// tap((paramMap) => console.log(`%c VIEW.queryParams.paramMap`, `color:orangered;`, paramMap)),\n\t\t\t\tmap(paramMap => this.filter.parseQueryParams(paramMap)),\n\t\t\t\tfilter(f => !!f),\n\t\t\t\tdebounceTime(100),\n\t\t\t\tswitchMap((filters) => {\n\t\t\t\t\tconst diff = filters.diff(this.filters);\n\t\t\t\t\tconst reloadDateCountryTags = diff.dateRange || diff.geoCountryCode || diff.tags;\n\t\t\t\t\tthis.isLoadingCriteria = reloadDateCountryTags;\n\t\t\t\t\tthis.isLoadingSummary = reloadDateCountryTags || diff.granularity || diff.geoRegionId;\n\t\t\t\t\tthis.isLoadingTags = reloadDateCountryTags;\n\t\t\t\t\tthis.isLoadingHistory = reloadDateCountryTags || diff.granularity || diff.geoRegionId;\n\t\t\t\t\tthis.isLoadingGeo = reloadDateCountryTags;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\treturn forkJoin(\n\t\t\t\t\t\tof(filters),\n\t\t\t\t\t\tthis.isLoadingHistory ? this.api.usersAndViewsHistory(filters) : of(this.historyChart),\n\t\t\t\t\t\tthis.isLoadingSummary ? this.api.usersAndViewsSummary(filters) : of(this.summaryData),\n\t\t\t\t\t\tthis.isLoadingGeo ? this.api.geoReport(filters) : of(this.geoData),\n\t\t\t\t\t\tthis.isLoadingTags ? this.api.topViewedTags(filters, 1, this.MAX_TOP_TAGS) : of(this.tagsData)\n\t\t\t\t\t)\n\t\t\t\t\t\t.pipe(map(responses => ({ filters: responses[0], historyChart: responses[1], summaryData: responses[2], geoData: responses[3], tagsData: responses[4] })),);\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe({\n\t\t\t\tnext: ({ filters, historyChart, summaryData, geoData, tagsData }) => {\n\t\t\t\t\t// console.log(`%c VIEW.queryParams.api.responses`, `color:orangered;`, { filters, historyChart, summaryData, geoData, tagsData });\n\t\t\t\t\tthis.filters = filters;\n\t\t\t\t\tthis.summaryData = summaryData;\n\t\t\t\t\tthis.historyChart = historyChart;\n\t\t\t\t\tthis.geoData = geoData;\n\t\t\t\t\ttagsData.records = this.parseTagRecords(tagsData.records, this.summaryData.views);\n\t\t\t\t\tthis.tagsData = tagsData;\n\t\t\t\t\tthis.isLoadingCriteria = false;\n\t\t\t\t\tthis.isLoadingSummary = false;\n\t\t\t\t\tthis.isLoadingTags = false;\n\t\t\t\t\tthis.isLoadingHistory = false;\n\t\t\t\t\tthis.isLoadingGeo = false;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.data$ub != null && this.data$ub.closed == false) this.data$ub.unsubscribe(); this.data$ub = null;\n\t\tif (this.moreTags$ub != null && this.moreTags$ub.closed == false) this.moreTags$ub.unsubscribe(); this.moreTags$ub = null;\n\n\t\tthis.filters = null;\n\t\tthis.summaryData = null;\n\t\tthis.historyChart = null;\n\t\tthis.geoData = null;\n\t\tthis.tagsData = null;\n\n\t\tthis.isLoadingCriteria = false;\n\t\tthis.isLoadingSummary = false;\n\t\tthis.isLoadingTags = false;\n\t\tthis.isLoadingHistory = false;\n\t\tthis.isLoadingGeo = false;\n\n\t\tthis.isFetchingTags = false;\n\t}\n\n\thandleDateRangeChange(event: MomentDateRange) {\n\t\tthis.user.setDateRangeSelection(event[0], event[1]);\n\t\tthis.params.navigate(this.params.formatUserDateRange());\n\t}\n\n\thandleGeolocationChange(e: GeolocationEvent) {\n\t\tthis.params.navigate(this.params.formatGeolocation(e.countryCode, e.regionId));\n\t}\n\n\thandleGranularityChange(granularity: HistoryGranularity) {\n\t\tthis.isLoadingHistory = true;\n\t\tthis.cdr.markForCheck();\n\t\tthis.params.navigate(this.params.formatGranularity(granularity));\n\t}\n\n\thandleTagsChange(tags: TagRecord[]) {\n\t\tthis.params.navigate(this.params.formatTags(tags.map(t => t.id)));\n\t}\n\n\thandleGeoSelect(item: GeoListItem) {\n\t\tif (isGeoRegionItem(item)) {\n\t\t\tthis.params.navigate(this.params.formatGeolocation(item.countryCode, item.regionId));\n\t\t} else if (isGeoCountryItem(item)) {\n\t\t\tthis.params.navigate(this.params.formatGeolocation(item.countryCode, null));\n\t\t} else {\n\t\t\tif (!!this.filters.geoCountryCode && !!this.filters.geoRegionId)\n\t\t\t\tthis.params.navigate(this.params.formatGeolocation(this.filters.geoCountryCode, null));\n\t\t\telse\n\t\t\t\tthis.params.navigate(this.params.formatGeolocation(null, null));\n\t\t}\n\t}\n\n\thandleGeoChartError(error: ChartErrorEvent) {\n\t\tconsole.error(error);\n\t}\n\n\thandleFetchTags(event: ChangeEvent) {\n\t\tif (this.isFetchingTags\n\t\t\t|| event.endIndex === - 1\n\t\t\t|| event.endIndex !== this.tagsData.records.length - 1\n\t\t\t|| event.endIndex >= this.tagsData.total_records)\n\t\t\treturn;\n\t\tconst fromIndex = this.tagsData.records.length;\n\t\tconst fromPage = Math.floor(fromIndex / this.MAX_TOP_TAGS) + 1;\n\t\t// console.log(`%c handleFetchTags`, `color:orangered;`, { fromIndex, fromPage, event });\n\t\tthis.isFetchingTags = true;\n\t\tthis.cdr.markForCheck();\n\t\tif (this.moreTags$ub != null && this.moreTags$ub.closed == false)\n\t\t\tthis.moreTags$ub.unsubscribe();\n\t\tthis.moreTags$ub = this.api.topViewedTags(this.filters, fromPage, this.MAX_TOP_TAGS)\n\t\t\t.subscribe({\n\t\t\t\tnext: (resp) => {\n\t\t\t\t\tthis.tagsData.records = this.tagsData.records.concat(this.parseTagRecords(resp.records, this.summaryData.views));\n\t\t\t\t\tthis.isFetchingTags = false;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tprivate parseTagRecords(records: TopViewedTagItem[], summaryViews: number): TopViewedTagItem[] { return records.map(r => ({ ...r, viewsShare: (r.views / summaryViews) * 100 })); }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/component/view/sampled-traffic.view.component.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { AnalyticsSampledTrafficParamsService } from './sampled-traffic.params.service';\n\n@Injectable()\nexport class AnalyticsSampledTrafficDefaultParamsGuard implements CanActivate {\n\n\tconstructor(\n\t\tprivate params: AnalyticsSampledTrafficParamsService,\n\t) { }\n\n\tcanActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<boolean> | boolean {\n\t\treturn this.params.redirectIfNeeded(route.queryParamMap);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/service/sampled-traffic.default.params.guard.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { RegionRecord } from '../model/sampled-traffc.model';\nimport { AnalyticsSampledTrafficGeoService } from './sampled-traffic.geo.service';\nimport { AnalyticsSampledTrafficParamsService } from './sampled-traffic.params.service';\n\n@Injectable()\nexport class AnalyticsSampledTrafficResolveQueryRegionService implements Resolve<RegionRecord[] | null> {\n\n\tconstructor(\n\t\tprivate params: AnalyticsSampledTrafficParamsService,\n\t\tprivate geo: AnalyticsSampledTrafficGeoService,\n\t) { }\n\n\tresolve(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<RegionRecord[]> | null {\n\t\tconst geo = this.params.parseGeo(route.queryParamMap);\n\t\treturn !!geo && !!geo.countryCode\n\t\t\t? this.geo.regions$(geo.countryCode)\n\t\t\t: null;\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/service/sampled-traffic.resolve.query.region.service.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { TagRecord } from '../../../../service/analytics/tag.service';\nimport { AnalyticsSampledTrafficTagsService } from './sampled-traffic.tags.service';\n\n@Injectable()\nexport class AnalyticsSampledTrafficResolveQueryTagsService implements Resolve<TagRecord[] | null> {\n\n\tconstructor(\n\t\tprivate tag: AnalyticsSampledTrafficTagsService,\n\t) { }\n\n\tresolve(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<TagRecord[]> | null {\n\t\treturn this.tag.resolveFromQueryParams(route.queryParamMap);\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/service/sampled-traffic.resolve.query.tags.service.ts","import { CommonModule, LowerCasePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { Ng2GoogleChartsModule } from 'ng2-google-charts';\nimport { TagInputModule } from 'ngx-chips';\nimport { VirtualScrollerModule } from 'ngx-virtual-scroller';\nimport { SharedModule } from '../../../app/shared/shared.module';\nimport { PagesService } from '../../../service/analytics/pages.service';\nimport { TagService } from '../../../service/analytics/tag.service';\nimport { CamelCaseToSpaceModule } from '../../pipe/camelCaseToSpace/camelCaseToSpace.module';\nimport { CamelCaseToSpacePipe } from '../../pipe/camelCaseToSpace/camelCaseToSpace.pipe';\nimport { CapitalizeFirstModule } from '../../pipe/capitalizeFirst/capitalize.first.module';\nimport { CapitalizeFirstPipe } from '../../pipe/capitalizeFirst/capitalize.first.pipe';\nimport { VirtualDropdownModule } from '../../virtual/dropdown/virtual.dropdown.module';\nimport { VirtualListModule } from '../../virtual/list/virtual.list.module';\nimport { ChartModule } from '../component/charts/chart.module';\nimport { AnalyticsSampledTrafficCriteriaComponent } from './component/criteria/sampled-traffic.criteria.component';\nimport { AnalyticsSampledTrafficGeoComponent } from './component/geo/sampled-traffic.geo.component';\nimport { AnalyticsSampledTrafficHistoryComponent } from './component/history/sampled-traffic.history.component';\nimport { AnalyticsSampledTrafficSummaryComponent } from './component/summary/sampled-traffic.summary.component';\nimport { AnalyticsSampledTrafficTagsComponent } from './component/tags/sampled-traffic.tags.component';\nimport { AnalyticsSampledTrafficViewComponent } from './component/view/sampled-traffic.view.component';\nimport { TagPrefixPipe } from './pipe/tag.prefix.pipe';\nimport { AnalyticsSampledTrafficDefaultParamsGuard } from './service/sampled-traffic.default.params.guard';\nimport { AnalyticsSampledTrafficGeoService } from './service/sampled-traffic.geo.service';\nimport { AnalyticsSampledTrafficParamsService } from './service/sampled-traffic.params.service';\nimport { AnalyticsSampledTrafficResolveQueryRegionService } from './service/sampled-traffic.resolve.query.region.service';\nimport { AnalyticsSampledTrafficResolveQueryTagsService } from './service/sampled-traffic.resolve.query.tags.service';\nimport { AnalyticsSampledTrafficTagsService } from './service/sampled-traffic.tags.service';\n\nexport const analyticsSampledTrafficRoute = ['admin', 'analytics', 'sampled-traffic'];\nexport const routes: Routes = [\n\t{\n\t\tpath: '',\n\t\tcomponent: AnalyticsSampledTrafficViewComponent,\n\t\tcanActivate: [AnalyticsSampledTrafficDefaultParamsGuard],\n\t\tresolve: {\n\t\t\t_region: AnalyticsSampledTrafficResolveQueryRegionService,\n\t\t\t_tags: AnalyticsSampledTrafficResolveQueryTagsService,\n\t\t},\n\t\trunGuardsAndResolvers: 'paramsOrQueryParamsChange',\n\t},\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tSharedModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes),\n\t\tChartModule,\n\t\tTagInputModule,\n\t\tNg2GoogleChartsModule,\n\t\tCamelCaseToSpaceModule,\n\t\tCapitalizeFirstModule,\n\t\tVirtualListModule,\n\t\tVirtualScrollerModule,\n\t\tVirtualDropdownModule,\n\t],\n\tdeclarations: [\n\t\tTagPrefixPipe,\n\t\tAnalyticsSampledTrafficViewComponent,\n\t\tAnalyticsSampledTrafficCriteriaComponent,\n\t\tAnalyticsSampledTrafficSummaryComponent,\n\t\tAnalyticsSampledTrafficTagsComponent,\n\t\tAnalyticsSampledTrafficHistoryComponent,\n\t\tAnalyticsSampledTrafficGeoComponent,\n\t],\n\tproviders: [\n\t\tLowerCasePipe,\n\t\tCapitalizeFirstPipe,\n\t\tCamelCaseToSpacePipe,\n\t\tTagPrefixPipe,\n\t\tPagesService,\n\t\tTagService,\n\t\tAnalyticsSampledTrafficTagsService,\n\t\tAnalyticsSampledTrafficGeoService,\n\t\tAnalyticsSampledTrafficParamsService,\n\t\tAnalyticsSampledTrafficDefaultParamsGuard,\n\t\tAnalyticsSampledTrafficResolveQueryRegionService,\n\t\tAnalyticsSampledTrafficResolveQueryTagsService,\n\t]\n})\nexport class AnalyticsSampledTrafficModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/sampled-traffic/sampled-traffic.module.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { TagInputModule } from 'ngx-chips';\n\nimport { AnalyticsAudienceModule } from './audience/audience.module';\nimport { AnalyticsAlbumsModule } from './albums/albums.module';\nimport { AnalyticsContentModule } from './content/content.module';\nimport { AnalyticsDashboardModule } from './dashboard/dashboard.module';\nimport { AnalyticsTopContentModule } from './top-content/top-content.module';\nimport { AnalyticsGeoModule } from './geo/geo.module';\nimport { AnalyticsTechnologyModule } from './technology/technology.module';\nimport { AnalyticsRealtimeModule } from './realtime/realtime.module';\nimport { AnalyticsQOSModule } from './QOS/QOS.module';\nimport { AnalyticsPlaybackExperienceModule } from './playback-experience/playback-experience.module';\nimport { AnalyticsErrorsModule } from './errors/errors.module';\nimport { AnalyticsRealTimeMarketingModule } from './real-time-marketing/real-time-marketing.module';\nimport { AnalyticsContentInsightsModule } from './content-insights/content-insights.module';\nimport { AnalyticsFlexmodelModule } from './flexmodel/flexmodel.module';\nimport { AnalyticsHeartbeatModule } from './heartbeat/heartbeat.module';\nimport { AnalyticsInfoModule } from './info/info.module';\nimport { AnalyticsSTModule } from './st/st.module';\nimport { AnalyticsSampledTrafficModule } from './sampled-traffic/sampled-traffic.module';\n\n\nexport const AnalyticsRoutes: Routes = [\n\t{ path: 'audience', loadChildren: () => AnalyticsAudienceModule },\n\t{ path: 'albums', loadChildren: () => AnalyticsAlbumsModule },\n\t{ path: 'content', loadChildren: () => AnalyticsContentModule },\n\t{ path: 'dashboard', loadChildren: () => AnalyticsDashboardModule },\n\t{ path: 'top-content', loadChildren: () => AnalyticsTopContentModule },\n\t{ path: 'geo', loadChildren: () => AnalyticsGeoModule },\n\t{ path: 'technology', loadChildren: () => AnalyticsTechnologyModule },\n\t{ path: 'realtime', loadChildren: () => AnalyticsRealtimeModule },\n\t{ path: 'qos', loadChildren: () => AnalyticsQOSModule },\n\t{ path: 'playback-experience', loadChildren: () => AnalyticsPlaybackExperienceModule },\n\t{ path: 'errors', loadChildren: () => AnalyticsErrorsModule },\n\t{ path: 'real-time-marketing', loadChildren: () => AnalyticsRealTimeMarketingModule },\n\t{ path: 'content-insights', loadChildren: () => AnalyticsContentInsightsModule },\n\t{ path: 'flexmodel', loadChildren: () => AnalyticsFlexmodelModule },\n\t{ path: 'info', loadChildren: () => AnalyticsInfoModule },\n\t{ path: 'st-report', loadChildren: () => AnalyticsSTModule },\n\t{ path: 'heartbeat', loadChildren: () => AnalyticsHeartbeatModule },\n\t{ path: 'sampled-traffic', loadChildren: () => AnalyticsSampledTrafficModule },\n\t{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },\n\t{ path: '**', redirectTo: 'dashboard' }\n];\n\n@NgModule({\n\timports: [\n\t\tRouterModule.forChild(AnalyticsRoutes),\n\t],\n})\nexport class AnalyticsModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/analytics/analytics.module.ts","import {Component, ChangeDetectionStrategy} from '@angular/core';\nimport {ModalService} from './modal.service';\n\nlet STYLES = [\n\t':host{padding: 10px;float: right;cursor: pointer;opacity: 0.75;}',\n\t':host:hover {opacity: 1;}'\n];\n\n@Component({\n\tselector: 'close-modal-button',\n\thost: {'class': 'fa fa-times', '(click)': 'service.close()'},\n\ttemplate: '',\n\tstyles: STYLES,\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class ModalCloseButtonComponent {\n\tconstructor(public service: ModalService) {}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/close.modal.button.component.ts","import { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { Injectable } from '@angular/core';\nimport { Http, Headers, Response, URLSearchParams } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { UrlService } from './url.service';\nimport { BradmaxApi } from './api.service';\n\n@Injectable()\nexport class PasswordChangeService extends BradmaxApi {\n    private resolveSource: Subject<any>;\n\n    constructor(protected auth: AuthService,\n        protected http: Http,\n        protected exception: ExceptionService,\n        protected router: Router,\n        protected url: UrlService) {\n        super(auth, http, exception, router, url);\n    }\n\n    passwordChange(oldPassword: string, newPassword: string): Observable<any> {\n        let data: any = { old_password: oldPassword, new_password: newPassword };\n        return this.create('user/password', data);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/password-change.service.ts","import { Component, ChangeDetectionStrategy, ChangeDetectorRef, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Subscription } from 'rxjs/Subscription';\nimport { PasswordChangeService } from '../../service/password-change.service';\nimport { UserService } from '../../service/user.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { FlashMessagesService } from 'angular2-flash-messages';\nimport { Localization, LocaleService, TranslationService } from 'angular-l10n';\n\n@Component({\n\tselector: 'password-change-view',\n\ttemplate: require('./password-change.view.html'),\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\toutputs: ['onSuccess'],\n})\nexport class PasswordChangeView implements OnInit {\n\tprivate passwordChangeError = false;\n\tprivate loading = false;\n\tprivate form: FormGroup;\n\tprivate remoteErrorsOldPassword: Array<string>;\n\tprivate remoteErrorsNewPassword: Array<string>;\n\tpublic onSuccess = new EventEmitter();\n\t//\n\tconstructor(private formBuilder: FormBuilder,\n\t\tprivate passwordChange: PasswordChangeService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate user: UserService,\n\t\tprivate flashMessagesService: FlashMessagesService,\n\t\tpublic translation: TranslationService,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate router: Router,\n\t\tpublic sanitizer: DomSanitizer) {\n\t\tthis.clearRemoteErrors();\n\t}\n\tclearRemoteErrors() {\n\t\tthis.remoteErrorsOldPassword = [];\n\t\tthis.remoteErrorsNewPassword = [];\n\t}\n\t//\n\tngOnInit() {\n\t\tthis.form = this.formBuilder.group({\n\t\t\toldPassword: [\"\", Validators.required],\n\t\t\tnewPassword: [\"\", Validators.compose([Validators.required, Validators.minLength(8)])],\n\t\t\tnewPasswordRepeat: [\"\", Validators.compose([Validators.required, Validators.minLength(8)])]\n\t\t}, {\n\t\t\tvalidator: this.matchingPasswords('newPassword', 'newPasswordRepeat')\n\t\t});\n\t}\n\tmatchingPasswords(passwordKey: string, passwordConfirmationKey: string) {\n\t\treturn (group: FormGroup) => {\n\t\t\tlet passwordInput = group.controls[passwordKey];\n\t\t\tlet passwordConfirmationInput = group.controls[passwordConfirmationKey];\n\t\t\tif (passwordInput.value !== passwordConfirmationInput.value) {\n\t\t\t\treturn passwordConfirmationInput.setErrors({notEquivalent: true})\n\t\t\t}\n\t\t}\n\t}\n\t//\n\tonPasswordChangeFormSubmit() {\n\t\tthis.loading = true;\n\t\tlet fields = this.form.value;\n\n\t\t// Clear errors.\n\t\tthis.clearRemoteErrors();\n\n\t\tthis.cdr.markForCheck();\n\n\t\tthis.passwordChange.passwordChange(fields.oldPassword, fields.newPassword).subscribe(\n\t\t\t(success: any) => {\n\t\t\t\tthis.loading = false;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\tthis.onSuccess.emit();\n\t\t\t\tthis.flashMessagesService.show(\n\t\t\t\t\tthis.translation.translate('PASSWORD_CHANGE.MESSAGE.SUCCESS'),\n\t\t\t\t\t{ cssClass: 'alert-success', timeout: 3000 }\n\t\t\t\t);\n\t\t\t},\n\t\t\t(error: any) => {\n\t\t\t\tthis.loading = false;\n\t\t\t\tif(error.errors && error.errors.old_password && error.errors.old_password.length) {\n\t\t\t\t\tthis.remoteErrorsOldPassword = error.errors.old_password;\n\t\t\t\t}\n\t\t\t\tif(error.errors && error.errors.new_password && error.errors.new_password.length) {\n\t\t\t\t\tthis.remoteErrorsNewPassword = error.errors.new_password;\n\t\t\t\t}\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/password-change/password-change.view.ts","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedModule } from '../../app/shared/shared.module';\nimport { LocalizationModule } from 'angular-l10n';\nimport { PasswordChangeView } from './password-change.view';\nimport { PasswordChangeService } from '../../service/password-change.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n@NgModule({\n    imports: [\n        SharedModule,\n        LocalizationModule,\n        RouterModule,\n        FormsModule,\n        ReactiveFormsModule],\n    declarations: [PasswordChangeView],\n    entryComponents: [PasswordChangeView],\n    providers: [PasswordChangeService],\n    exports: [PasswordChangeView]\n})\nexport class PasswordChangeModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/password-change/password-change.module.ts","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { ModalService } from './modal.service';\nimport { ModalComponent } from './modal.component';\nimport { AlertModalComponent } from './alert.modal.component';\nimport { ModalCloseButtonComponent } from './close.modal.button.component';\nimport { PromptModalComponent } from './prompt.modal.component';\nimport { InputModalComponent } from './input.modal.component';\n//import { AccountDetailsModal } from './account.details.modal';\n//import { ContactModalComponent } from './contact.modal.component';\nimport { PasswordChangeModalComponent } from './password-change.modal.component';\nimport { GdprInfoModalComponent } from './gdpr.info.modal.component';\nimport { TermsModalComponent } from './terms.modal.component';\n//import { AccountModule } from '../account/account.module';\n//import { ContactModule } from '../contact';\nimport { PasswordChangeModule } from '../password-change';\n\n@NgModule({\n\timports: [FormsModule, CommonModule, PasswordChangeModule],\n\tdeclarations: [\n\t\tModalComponent,\n\t\tModalCloseButtonComponent,\n\t\tAlertModalComponent,\n\t\tPromptModalComponent,\n\t\tInputModalComponent,\n\t\t//AccountDetailsModal,\n\t\t//ContactModalComponent,\n\t\tPasswordChangeModalComponent,\n\t\tGdprInfoModalComponent,\n\t\tTermsModalComponent\n\t],\n\tentryComponents: [\n\t\tModalComponent,\n\t\tModalCloseButtonComponent,\n\t\tAlertModalComponent,\n\t\tPromptModalComponent,\n\t\tInputModalComponent,\n\t\t//AccountDetailsModal,\n\t\t//ContactModalComponent,\n\t\tPasswordChangeModalComponent,\n\t\tGdprInfoModalComponent,\n\t\tTermsModalComponent\n\t],\n\tproviders: [ModalService],\n\texports: [ModalComponent]\n})\nexport class ModalModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/modal.module.ts","\n/////////\nexport enum PlayerBuilderRouteGroup {\n\tcore = 'core',\n\tvideo = 'video',\n\tskin = 'skin',\n}\n\nexport enum PlayerBuilderRoute {\n\tgeneral = 'general',\n\tplayback = 'playback',\n\ttheme = 'theme',\n\ticons = 'icons',\n\tfeatures = 'features',\n\tbranding = 'branding',\n\tendsplash = 'endsplash',\n\t// editor = 'editor',\n}\n\nexport enum PlayerBuilderRouteData {\n\tbxplayer = 'bxplayer',\n\tdocksLink = 'docksLink',\n\tdataProvider = 'dataProvider',\n\tseek = 'seek',\n}\n\nexport enum PlayerBuilderCanLeaveModalAnswer {\n\tsave = 'save',\n\treset = 'reset',\n\tabort = 'abort',\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/model/player.builder.model.ts","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { ColorpickerHsla, ColorpickerHsva, ColorpickerRgba } from '../colorpicker.model';\n\n@Injectable()\nexport class ColorpickerService {\n\n\tcloseStream$: Observable<any>;\n\tprivate closeSubject = new Subject<any>();\n\n\tconstructor() {\n\t\tthis.closeStream$ = this.closeSubject.asObservable();\n\t}\n\n\tclose() {\n\t\tthis.closeSubject.next(null);\n\t}\n\n\thsla2hsva(hsla: ColorpickerHsla) {\n\t\tvar h = Math.min(hsla.h, 1), s = Math.min(hsla.s, 1), l = Math.min(hsla.l, 1), a = Math.min(hsla.a, 1);\n\t\tif (l === 0) {\n\t\t\treturn { h: h, s: 0, v: 0, a: a };\n\t\t} else {\n\t\t\tvar v = l + s * (1 - Math.abs(2 * l - 1)) / 2;\n\t\t\treturn { h: h, s: 2 * (v - l) / v, v: v, a: a };\n\t\t}\n\t}\n\n\thsva2hsla(hsva: ColorpickerHsva): ColorpickerHsla {\n\t\tvar h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a;\n\t\tif (v === 0) {\n\t\t\treturn new ColorpickerHsla(h, 0, 0, a);\n\t\t} else if (s === 0 && v === 1) {\n\t\t\treturn new ColorpickerHsla(h, 1, 1, a);\n\t\t} else {\n\t\t\tvar l = v * (2 - s) / 2;\n\t\t\treturn new ColorpickerHsla(h, v * s / (1 - Math.abs(2 * l - 1)), l, a);\n\t\t}\n\t}\n\n\trgbaToHsva(rgba: ColorpickerRgba) {\n\t\tvar r = Math.min(rgba.r, 1), g = Math.min(rgba.g, 1), b = Math.min(rgba.b, 1), a = Math.min(rgba.a, 1);\n\t\tvar max = Math.max(r, g, b), min = Math.min(r, g, b);\n\t\tvar h: number = NaN, s: number, v = max;\n\n\t\tvar d = max - min;\n\t\ts = max === 0 ? 0 : d / max;\n\n\t\tif (max === min) {\n\t\t\th = 0;\n\t\t} else {\n\t\t\tswitch (max) {\n\t\t\t\tcase r:\n\t\t\t\t\th = (g - b) / d + (g < b ? 6 : 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase g:\n\t\t\t\t\th = (b - r) / d + 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase b:\n\t\t\t\t\th = (r - g) / d + 4;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\th /= 6;\n\t\t}\n\n\t\treturn new ColorpickerHsva(h, s, v, a);\n\t}\n\n\thsvaToRgba(hsva: ColorpickerHsva) {\n\t\tvar h = hsva.h, s = hsva.s, v = hsva.v, a = hsva.a;\n\t\tvar r: number = NaN, g: number = NaN, b: number = NaN;\n\n\t\tvar i = Math.floor(h * 6);\n\t\tvar f = h * 6 - i;\n\t\tvar p = v * (1 - s);\n\t\tvar q = v * (1 - f * s);\n\t\tvar t = v * (1 - (1 - f) * s);\n\n\t\tswitch (i % 6) {\n\t\t\tcase 0: r = v; g = t; b = p; break;\n\t\t\tcase 1: r = q; g = v; b = p; break;\n\t\t\tcase 2: r = p; g = v; b = t; break;\n\t\t\tcase 3: r = p; g = q; b = v; break;\n\t\t\tcase 4: r = t; g = p; b = v; break;\n\t\t\tcase 5: r = v; g = p; b = q; break;\n\t\t}\n\n\t\treturn new ColorpickerRgba(r, g, b, a);\n\t}\n\n\tstringToHsva(colorString: string) {\n\t\tvar stringParsers = [\n\t\t\t{\n\t\t\t\tre: /(rgb)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*%?,\\s*(\\d{1,3})\\s*%?(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\t\tparse: (execResult: any[]) => {\n\t\t\t\t\treturn new ColorpickerRgba(parseInt(execResult[2]) / 255,\n\t\t\t\t\t\tparseInt(execResult[3]) / 255,\n\t\t\t\t\t\tparseInt(execResult[4]) / 255,\n\t\t\t\t\t\tisNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5]));\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tre: /(hsl)a?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})%\\s*,\\s*(\\d{1,3})%\\s*(?:,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\t\tparse: (execResult: any[]) => {\n\t\t\t\t\treturn new ColorpickerHsla(parseInt(execResult[2]) / 360,\n\t\t\t\t\t\tparseInt(execResult[3]) / 100,\n\t\t\t\t\t\tparseInt(execResult[4]) / 100,\n\t\t\t\t\t\tisNaN(parseFloat(execResult[5])) ? 1 : parseFloat(execResult[5]));\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tre: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/,\n\t\t\t\tparse: (execResult: any[]) => {\n\t\t\t\t\treturn new ColorpickerRgba(parseInt(execResult[1], 16) / 255,\n\t\t\t\t\t\tparseInt(execResult[2], 16) / 255,\n\t\t\t\t\t\tparseInt(execResult[3], 16) / 255,\n\t\t\t\t\t\t1);\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tre: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/,\n\t\t\t\tparse: (execResult: any[]) => {\n\t\t\t\t\treturn new ColorpickerRgba(parseInt(execResult[1] + execResult[1], 16) / 255,\n\t\t\t\t\t\tparseInt(execResult[2] + execResult[2], 16) / 255,\n\t\t\t\t\t\tparseInt(execResult[3] + execResult[3], 16) / 255,\n\t\t\t\t\t\t1);\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\t\tcolorString = colorString.toLowerCase();\n\t\tvar hsva: any | null = null;\n\t\tfor (var key in stringParsers) {\n\t\t\tif (stringParsers.hasOwnProperty(key)) {\n\t\t\t\tvar parser = stringParsers[key];\n\t\t\t\tvar match = parser.re.exec(colorString), color = match && parser.parse(match);\n\t\t\t\tif (color) {\n\t\t\t\t\tif (color instanceof ColorpickerRgba) {\n\t\t\t\t\t\thsva = this.rgbaToHsva(color);\n\t\t\t\t\t} else if (color instanceof ColorpickerHsla) {\n\t\t\t\t\t\thsva = this.hsla2hsva(color);\n\t\t\t\t\t}\n\t\t\t\t\treturn hsva;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn hsva;\n\t}\n\n\toutputFormat(hsva: ColorpickerHsva, outputFormat: string) {\n\t\tif (hsva.a < 1) {\n\t\t\tswitch (outputFormat) {\n\t\t\t\tcase 'hsla':\n\t\t\t\t\tlet hsla = this.hsva2hsla(hsva);\n\t\t\t\t\tlet hslaText = new ColorpickerHsla(Math.round((hsla.h) * 360),\n\t\t\t\t\t\tMath.round(hsla.s * 100), Math.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\n\t\t\t\t\treturn 'hsla(' + hslaText.h + ',' + hslaText.s + '%,' + hslaText.l + '%,' + hslaText.a + ')';\n\t\t\t\tdefault:\n\t\t\t\t\tlet rgba = this.denormalizeRGBA(this.hsvaToRgba(hsva));\n\t\t\t\t\treturn 'rgba(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ',' + Math.round(rgba.a * 100) / 100 + ')';\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (outputFormat) {\n\t\t\t\tcase 'hsla':\n\t\t\t\t\tlet hsla = this.hsva2hsla(hsva);\n\t\t\t\t\tlet hslaText = new ColorpickerHsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100),\n\t\t\t\t\t\tMath.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\n\t\t\t\t\treturn 'hsl(' + hslaText.h + ',' + hslaText.s + '%,' + hslaText.l + '%)';\n\t\t\t\tcase 'rgba':\n\t\t\t\t\tlet rgba = this.denormalizeRGBA(this.hsvaToRgba(hsva));\n\t\t\t\t\treturn 'rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')';\n\t\t\t\tdefault:\n\t\t\t\t\treturn this.hexText(this.denormalizeRGBA(this.hsvaToRgba(hsva)));\n\t\t\t}\n\t\t}\n\t}\n\n\thexText(rgba: ColorpickerRgba, shorten = false) {\n\t\tlet hexText = '#' + ((1 << 24) | (rgba.r << 16) | (rgba.g << 8) | rgba.b).toString(16).substr(1);\n\t\t// if shorten == true; then: #000000 -> #000\n\t\tif (shorten && hexText[1] === hexText[2] && hexText[3] === hexText[4] && hexText[5] === hexText[6])\n\t\t\thexText = '#' + hexText[1] + hexText[3] + hexText[5];\n\t\treturn hexText.toLowerCase();\n\t}\n\n\tdenormalizeRGBA(rgba: ColorpickerRgba): ColorpickerRgba {\n\t\treturn new ColorpickerRgba(Math.round(rgba.r * 255),\n\t\t\tMath.round(rgba.g * 255),\n\t\t\tMath.round(rgba.b * 255), rgba.a);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/service/colorpicker.service.ts","/**\n * Created by mthk on 30/10/16.\n */\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport {\n\tColorpickerFormat,\n\tColorpickerHsla,\n\tColorpickerHsva,\n\tColorpickerRgba,\n\tColorpickerSliderDimension,\n\tColorpickerSliderPosition,\n\tColorpickerUpdate,\n} from '../colorpicker.model';\nimport { ColorpickerService } from './colorpicker.service';\n\n@Injectable()\nexport class ColorpickerDataService {\n\n\tcolorCache: string;\n\tcolor: string;\n\tformat: ColorpickerFormat;\n\tformatValue = ColorpickerFormat;\n\thsva: ColorpickerHsva;\n\trgbaText: ColorpickerRgba;\n\thslaText: ColorpickerHsla;\n\thexText: string;\n\talphaSliderColor: string;\n\thueSliderColor: string;\n\tslider: ColorpickerSliderPosition;\n\tsliderDimMax: ColorpickerSliderDimension;\n\tupdateStream$: Observable<ColorpickerUpdate>;\n\tinitialized = false;\n\tprivate updateSubject: Subject<ColorpickerUpdate>;\n\n\tconstructor(public service: ColorpickerService) {\n\t\tthis.updateSubject = new Subject<any>();\n\t\tthis.updateStream$ = this.updateSubject.asObservable();\n\t}\n\n\tinit(color: string, format: ColorpickerFormat) {\n\t\tif (this.initialized != true) {\n\n\t\t\tthis.color = color;\n\t\t\tthis.colorCache = color + '';\n\t\t\tthis.format = format;\n\n\t\t\tlet hsva = this.service.stringToHsva(color);\n\t\t\tif (hsva !== null)\n\t\t\t\tthis.hsva = hsva;\n\t\t\telse\n\t\t\t\tthis.hsva = new ColorpickerHsva(0, 1, 1, 1);\n\n\t\t\tthis.sliderDimMax = new ColorpickerSliderDimension(150, 230, 130, 150);\n\t\t\tthis.slider = new ColorpickerSliderPosition(0, 0, 0, 0);\n\n\t\t\tthis.update();\n\n\t\t\tthis.initialized = true;\n\t\t}\n\t}\n\n\tsetSaturation(val: { v: number, rg: number }) {\n\t\tlet hsla = this.service.hsva2hsla(this.hsva);\n\t\thsla.s = val.v / val.rg;\n\t\tthis.hsva = this.service.hsla2hsva(hsla);\n\t\tthis.update();\n\t}\n\n\tsetLightness(val: { v: number, rg: number }) {\n\t\tlet hsla = this.service.hsva2hsla(this.hsva);\n\t\thsla.l = val.v / val.rg;\n\t\tthis.hsva = this.service.hsla2hsva(hsla);\n\t\tthis.update();\n\t}\n\n\tsetHue(val: { v: number, rg: number }) {\n\t\tthis.hsva.h = val.v / val.rg;\n\t\tthis.update();\n\t}\n\n\tsetAlpha(val: { v: number, rg: number }) {\n\t\tthis.hsva.a = val.v / val.rg;\n\t\tthis.update();\n\t}\n\n\tsetR(val: { v: number, rg: number }) {\n\t\tlet rgba = this.service.hsvaToRgba(this.hsva);\n\t\trgba.r = val.v / val.rg;\n\t\tthis.hsva = this.service.rgbaToHsva(rgba);\n\t\tthis.update();\n\t}\n\n\tsetG(val: { v: number, rg: number }) {\n\t\tlet rgba = this.service.hsvaToRgba(this.hsva);\n\t\trgba.g = val.v / val.rg;\n\t\tthis.hsva = this.service.rgbaToHsva(rgba);\n\t\tthis.update();\n\t}\n\n\tsetB(val: { v: number, rg: number }) {\n\t\tlet rgba = this.service.hsvaToRgba(this.hsva);\n\t\trgba.b = val.v / val.rg;\n\t\tthis.hsva = this.service.rgbaToHsva(rgba);\n\t\tthis.update();\n\t}\n\n\tsetSaturationAndBrightness(val: { s: number, v: number, rgX: number, rgY: number }) {\n\t\tthis.hsva.s = val.s / val.rgX;\n\t\tthis.hsva.v = val.v / val.rgY;\n\t\tthis.update();\n\t}\n\n\tsetColorFromString(value: string) {\n\t\tlet hsva = this.service.stringToHsva(value);\n\t\tif (hsva !== null)\n\t\t\tthis.hsva = hsva;\n\t\tthis.update();\n\t}\n\n\tresetColor() {\n\t\tthis.setColorFromString(this.colorCache);\n\t}\n\n\tupdate() {\n\t\tlet hsla: ColorpickerHsla = this.service.hsva2hsla(this.hsva);\n\t\tlet rgba: ColorpickerRgba = this.service.denormalizeRGBA(this.service.hsvaToRgba(this.hsva));\n\t\tlet hueRgba: ColorpickerRgba\n\t\t\t= this.service.denormalizeRGBA(this.service.hsvaToRgba(new ColorpickerHsva(this.hsva.h, 1, 1, 1)));\n\n\t\tthis.hslaText = new ColorpickerHsla(Math.round((hsla.h) * 360), Math.round(hsla.s * 100),\n\t\t\tMath.round(hsla.l * 100), Math.round(hsla.a * 100) / 100);\n\t\tthis.rgbaText = new ColorpickerRgba(rgba.r, rgba.g, rgba.b, Math.round(rgba.a * 100) / 100);\n\t\tthis.hexText = this.service.hexText(rgba);\n\n\t\tthis.alphaSliderColor = 'rgb(' + rgba.r + ',' + rgba.g + ',' + rgba.b + ')';\n\t\tthis.hueSliderColor = 'rgb(' + hueRgba.r + ',' + hueRgba.g + ',' + hueRgba.b + ')';\n\n\t\tif (this.format === 0 && this.hsva.a < 1)\n\t\t\tthis.format++;\n\n\t\tthis.color = this.service.outputFormat(this.hsva, this.formatValue[this.format]);\n\n\t\tthis.slider = new ColorpickerSliderPosition((this.hsva.h) * this.sliderDimMax.h - 8,\n\t\t\tthis.hsva.s * this.sliderDimMax.s - 8, (1 - this.hsva.v) * this.sliderDimMax.v - 8,\n\t\t\tthis.hsva.a * this.sliderDimMax.a - 8);\n\n\t\tthis.updateSubject.next({ format: this.format, color: this.color });\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/service/colorpicker.data.service.ts","import { ChangeDetectionStrategy, Component, EventEmitter } from '@angular/core';\n\nimport { ColorpickerFormat, ColorpickerUpdate } from '../colorpicker.model';\nimport { ColorpickerDataService } from '../service/colorpicker.data.service';\n\n@Component({\n\tselector: 'color-picker',\n\thost: { 'class': 'form-inline' },\n\tinputs: ['value'],\n\toutputs: ['valueChange'],\n\ttemplate: require('./colorpicker.component.html'),\n\tstyles: [require('./colorpicker.component.scss')],\n\tviewProviders: [ColorpickerDataService],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class ColorpickerComponent {\n\n\tset value(v: string) {\n\t\tif (v == null)\n\t\t\treturn;\n\t\tlet format = ColorpickerFormat.hex;\n\t\tif (v.startsWith('#'))\n\t\t\tformat = ColorpickerFormat.hex;\n\t\telse if (v.startsWith('hsl'))\n\t\t\tformat = ColorpickerFormat.hsla;\n\t\telse if (v.startsWith('rgb'))\n\t\t\tformat = ColorpickerFormat.rgba;\n\t\t// console.debug(`[ColorPicker].format`, ColorpickerFormat[format]);\n\n\t\tif (this.data.format != format) {\n\t\t\tthis.data.format = format;\n\t\t\t// console.debug(`[ColorPicker].format`, ColorpickerFormat[this.data.format]);\n\t\t}\n\n\t\tif (!this.data.initialized) {\n\t\t\t// console.debug(`[ColorPicker].init`, `\"${v}\"`, ColorpickerFormat[this.data.format]);\n\t\t\tthis.data.init(v, this.data.format);\n\t\t} else {\n\t\t\t// console.debug(`[ColorPicker].setColorFromString`, `\"${v}\"`, ColorpickerFormat[this.data.format]);\n\t\t\tthis.data.setColorFromString(v);\n\t\t}\n\t}\n\n\tvalueChange = new EventEmitter<string>();\n\n\tconstructor(private data: ColorpickerDataService) {\n\t\tthis.data.updateStream$.subscribe((update: ColorpickerUpdate) => this.valueChange.emit(update.color));\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/component/colorpicker.component.ts","import { ChangeDetectorRef, Component, ElementRef, OnInit } from '@angular/core';\n\nimport { DOMUtil } from '../../../../util/dom.util';\nimport { ColorpickerDialogConfig, ColorpickerFormat, ColorpickerPosition } from '../../colorpicker.model';\nimport { ColorpickerDirective } from '../../directive/colorpicker.dialog.directive';\nimport { ColorpickerDataService } from '../../service/colorpicker.data.service';\n\n\n@Component({\n\tselector: 'color-picker-dialog',\n\thost: {\n\t\t'[style.top.px]': 'style.top',\n\t\t'[style.left.px]': 'style.left',\n\t\t'[style.width.px]': 'style.width',\n\t\t'[style.height.px]': 'style.height',\n\t\t'(window:resize)': 'onResize()',\n\t\t'(window:scroll)': 'onScroll()',\n\t\t'(document:mousedown)': 'onDocumentMouseDown($event)'\n\t},\n\ttemplate: require('./colorpicker.dialog.component.html'),\n\t/** compiled from colorpicker.dialog.component.scss */\n\tstyles: [require('./colorpicker.dialog.component.scss')]\n})\nexport class ColorpickerDialogComponent implements OnInit {\n\n\tshow: boolean;\n\tstyle = { top: 0, left: 0, width: 232, height: 290, position: 'fixed', arrowTop: 0 };\n\tpositionValue = ColorpickerPosition;\n\tconfig: ColorpickerDialogConfig;\n\n\tprivate dialogArrowSize: number = 10;\n\tprivate dialogArrowOffset: number = 15;\n\tprivate directiveElementRef: ElementRef;\n\tprivate directiveInstance: ColorpickerDirective;\n\n\tconstructor(public data: ColorpickerDataService,\n\t\tpublic cdr: ChangeDetectorRef,\n\t\tprivate element: ElementRef) {\n\t\tthis.data.updateStream$.subscribe(() => this.cdr.markForCheck());\n\t}\n\n\tngOnInit() {\n\t\tthis.openColorPicker();\n\t}\n\n\tonScroll() {\n\t\tthis.closeColorPicker();\n\t}\n\n\tonDocumentMouseDown(event: MouseEvent) {\n\t\tconst trg: Node = ('toElement' in event && !!event.toElement ? event.toElement : event.target) as Node;\n\t\tif (!DOMUtil.isDescendant(this.element.nativeElement, trg)\n\t\t\t&& event.target != this.directiveElementRef.nativeElement) {\n\t\t\tthis.closeColorPicker();\n\t\t}\n\t}\n\n\tonResize() {\n\t\tif (this.style.position === 'fixed')\n\t\t\tthis.setDialogPosition();\n\t}\n\n\tsetDialog(instance: ColorpickerDirective, config?: ColorpickerDialogConfig) {\n\t\tthis.directiveInstance = instance;\n\t\tthis.directiveElementRef = instance.element;\n\n\t\tthis.config = {\n\t\t\tposition: ColorpickerPosition.center,\n\t\t\tpositionOffset: 0,\n\t\t\toutputFormat: ColorpickerFormat.hex,\n\t\t\tpositionRelativeToArrow: false\n\t\t};\n\n\t\tif (config != null) {\n\t\t\tif (config.height != null) {\n\t\t\t\tthis.style.height = config.height;\n\t\t\t}\n\t\t\tif (config.position != null)\n\t\t\t\tthis.config.position = config.position;\n\t\t\tif (config.positionOffset != null)\n\t\t\t\tthis.config.positionOffset = config.positionOffset;\n\t\t\tif (config.outputFormat != null)\n\t\t\t\tthis.config.outputFormat = config.outputFormat;\n\t\t\tif (config.positionRelativeToArrow != null)\n\t\t\t\tthis.config.positionRelativeToArrow = config.positionRelativeToArrow;\n\t\t}\n\n\t\tif (!this.config.positionRelativeToArrow)\n\t\t\tthis.dialogArrowOffset = 0;\n\t}\n\n\topenColorPicker() {\n\t\tif (!this.show) {\n\t\t\tthis.show = true;\n\t\t\tthis.setDialogPosition();\n\t\t}\n\t}\n\n\tcloseColorPicker() {\n\t\tthis.show = false;\n\t\tthis.data.service.close();\n\t}\n\n\tsetDialogPosition() {\n\t\tvar node = this.directiveElementRef.nativeElement, position = 'static';\n\t\tlet parentNode: any | null = null;\n\t\twhile (node !== null && node.tagName !== 'HTML') {\n\t\t\tposition = window.getComputedStyle(node).getPropertyValue('position');\n\t\t\tif (position !== 'static' && parentNode === null)\n\t\t\t\tparentNode = node;\n\t\t\tif (position === 'fixed')\n\t\t\t\tbreak;\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\tlet boxDirective = null;\n\t\tif (position !== 'fixed') {\n\t\t\tboxDirective = this.createBox(this.directiveElementRef.nativeElement, true);\n\t\t\tif (parentNode === null)\n\t\t\t\tparentNode = node;\n\n\t\t\tlet boxParent = this.createBox(parentNode, true);\n\t\t\tthis.style.top = boxDirective.top - boxParent.top;\n\t\t\tthis.style.left = boxDirective.left - boxParent.left;\n\t\t} else {\n\t\t\tboxDirective = this.createBox(this.directiveElementRef.nativeElement, false);\n\t\t\tthis.style.top = boxDirective.top;\n\t\t\tthis.style.left = boxDirective.left;\n\t\t\tthis.style.position = 'fixed';\n\t\t}\n\t\t// left\n\t\tif (this.config.position == ColorpickerPosition.left && this.config.positionOffset) {\n\t\t\tthis.style.top += boxDirective.height * this.config.positionOffset / 100 - this.dialogArrowOffset;\n\t\t\tthis.style.left -= this.style.width + this.dialogArrowSize;\n\t\t}\n\t\t// top\n\t\telse if (this.config.position == ColorpickerPosition.top && this.config.positionOffset) {\n\t\t\tthis.style.top -= this.style.height + this.dialogArrowSize;\n\t\t\tthis.style.left += this.config.positionOffset / 100 * boxDirective.width - this.dialogArrowOffset;\n\t\t\tthis.style.arrowTop = this.style.height - 1;\n\t\t}\n\t\t// bottom\n\t\telse if (this.config.position == ColorpickerPosition.bottom && this.config.positionOffset) {\n\t\t\tthis.style.top += boxDirective.height + this.dialogArrowSize;\n\t\t\tthis.style.left += this.config.positionOffset / 100 * boxDirective.width - this.dialogArrowOffset;\n\t\t\tthis.style.arrowTop = this.style.height - 1;\n\t\t}\n\t\t// center\n\t\telse if (this.config.position == ColorpickerPosition.center) {\n\t\t\tthis.style.top = -143;\n\t\t\tthis.style.left = 4;//-16;\n\t\t}\n\t\t// default / right\n\t\telse if (this.config.positionOffset) {\n\t\t\tthis.style.top += boxDirective.height * this.config.positionOffset / 100 - this.dialogArrowOffset;\n\t\t\tthis.style.left += boxDirective.width + this.dialogArrowSize;\n\t\t}\n\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tresetColor() {\n\t\tthis.data.resetColor();\n\t\tthis.closeColorPicker();\n\t}\n\n\tcreateBox(element: HTMLElement, offset: boolean) {\n\t\treturn {\n\t\t\ttop: element.getBoundingClientRect().top + (offset ? window.pageYOffset : 0),\n\t\t\tleft: element.getBoundingClientRect().left + (offset ? window.pageXOffset : 0),\n\t\t\twidth: element.offsetWidth,\n\t\t\theight: element.offsetHeight\n\t\t};\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/component/dialog/colorpicker.dialog.component.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';\n\nimport { ColorpickerDataService } from '../../service/colorpicker.data.service';\n\n@Component({\n\tselector: 'colorpicker-sample',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: require('./colorpicker.sample.component.html'),\n\tstyles: [require('./colorpicker.sample.component.scss')]\n})\n\nexport class ColorpickerSampleComponent {\n\n\tconstructor(public data: ColorpickerDataService, private cdr: ChangeDetectorRef) {\n\t\tthis.data.updateStream$.subscribe(() => this.cdr.markForCheck());\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/component/sample/colorpicker.sample.component.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from '@angular/core';\n\nimport { ColorpickerDataService } from '../../service/colorpicker.data.service';\n\n@Component({\n\tselector: 'colorpicker-text',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: require('./colorpicker.text.component.html'),\n\tstyles: [require('./colorpicker.text.component.scss')]\n})\n\nexport class ColorpickerTextComponent {\n\n\tconstructor(public data: ColorpickerDataService, public cdr: ChangeDetectorRef) {\n\t\tthis.data.updateStream$.subscribe(() => this.cdr.markForCheck());\n\t}\n\n\tformatPolicy() {\n\t\tthis.data.format = (this.data.format + 1) % 3;\n\t\tif (this.data.format === 0 && this.data.hsva.a < 1)\n\t\t\tthis.data.format++;\n\t\treturn this.data.format;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/component/text/colorpicker.text.component.ts","import { ComponentFactoryResolver, Directive, ElementRef, ViewContainerRef } from '@angular/core';\n\nimport { ColorpickerFormat, ColorpickerPosition } from '../colorpicker.model';\nimport { ColorpickerDialogComponent } from '../component/dialog/colorpicker.dialog.component';\nimport { ColorpickerDataService } from '../service/colorpicker.data.service';\n\n@Directive({ selector: '[colorpicker]', host: { '(click)': 'onClick()' } })\n\nexport class ColorpickerDirective {\n\n\tprivate dialog: ColorpickerDialogComponent;\n\tprivate created: boolean;\n\n\tconstructor(public element: ElementRef,\n\t\tprivate data: ColorpickerDataService,\n\t\tprivate resolver: ComponentFactoryResolver,\n\t\tprivate viewRef: ViewContainerRef) {\n\t\tthis.created = false;\n\t\tthis.data.service.closeStream$.subscribe(() => this.close());\n\t}\n\n\tngOnDestroy() {\n\t\tthis.close();\n\t}\n\n\tonClick() {\n\t\tif (!this.created) {\n\t\t\tthis.dialog = this.viewRef\n\t\t\t\t.createComponent(this.resolver.resolveComponentFactory(ColorpickerDialogComponent))\n\t\t\t\t.instance;\n\t\t\tif (this.dialog != null) {\n\t\t\t\tthis.dialog.setDialog(this, { position: ColorpickerPosition.center, outputFormat: ColorpickerFormat.hex });\n\t\t\t\tthis.created = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate close() {\n\t\tif (this.created != false)\n\t\t\tthis.viewRef.remove();\n\t\tthis.created = false;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/directive/colorpicker.dialog.directive.ts","/**\n * Created by mthk on 25/10/16.\n */\nimport { Directive, ElementRef, EventEmitter } from '@angular/core';\n\n@Directive({\n\tselector: '[slider]',\n\thost: {\n\t\t'(mousedown)': 'start($event)',\n\t\t'(touchstart)': 'start($event)'\n\t},\n\tinputs: ['slider', 'rgX', 'rgY'],\n\toutputs: ['newValue']\n})\n\nexport class ColorpickerSliderDirective {\n\n\tslider: string;\n\trgX: number;\n\trgY: number;\n\tnewValue = new EventEmitter<{ s?: number; v: number; rg?: number; rgX?: number; rgY?: number; }>();\n\n\tprivate listenerMove: (event: MouseEvent) => void;\n\tprivate listenerStop: () => void;\n\n\tconstructor(private el: ElementRef) {\n\t\tthis.listenerMove = (event: MouseEvent) => this.move(event);\n\t\tthis.listenerStop = () => this.stop();\n\t}\n\n\tsetCursor(event: MouseEvent) {\n\t\tlet height = this.el.nativeElement.offsetHeight;\n\t\tlet width = this.el.nativeElement.offsetWidth;\n\t\tlet x = Math.max(0, Math.min(this.getX(event), width));\n\t\tlet y = Math.max(0, Math.min(this.getY(event), height));\n\n\t\tif (this.rgX !== undefined && this.rgY !== undefined)\n\t\t\tthis.newValue.emit({ s: x / width, v: (1 - y / height), rgX: this.rgX, rgY: this.rgY });\n\t\telse if (this.rgX === undefined && this.rgY !== undefined)\n\t\t\tthis.newValue.emit({ v: y / height, rg: this.rgY });\n\t\telse\n\t\t\tthis.newValue.emit({ v: x / width, rg: this.rgX });\n\t}\n\n\tmove(event: MouseEvent) {\n\t\tevent.preventDefault();\n\t\tthis.setCursor(event);\n\t}\n\n\tstart(event: any) {\n\t\tthis.setCursor(event);\n\t\tdocument.addEventListener('mousemove', this.listenerMove);\n\t\tdocument.addEventListener('touchmove', this.listenerMove);\n\t\tdocument.addEventListener('mouseup', this.listenerStop);\n\t\tdocument.addEventListener('touchend', this.listenerStop);\n\t}\n\n\tstop() {\n\t\tdocument.removeEventListener('mousemove', this.listenerMove);\n\t\tdocument.removeEventListener('touchmove', this.listenerMove);\n\t\tdocument.removeEventListener('mouseup', this.listenerStop);\n\t\tdocument.removeEventListener('touchend', this.listenerStop);\n\t}\n\n\tgetX(event: any) {\n\t\treturn (event.pageX !== undefined ? event.pageX : event.touches[0].pageX)\n\t\t\t- this.el.nativeElement.getBoundingClientRect().left - window.pageXOffset;\n\t}\n\n\tgetY(event: any) {\n\t\treturn (event.pageY !== undefined ? event.pageY : event.touches[0].pageY)\n\t\t\t- this.el.nativeElement.getBoundingClientRect().top - window.pageYOffset;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/directive/colorpicker.slider.directive.ts","/**\n * Created by mthk on 25/10/16.\n */\nimport { Directive, EventEmitter } from '@angular/core';\n\n@Directive({\n\tselector: '[text]',\n\thost: { '(input)': 'changeInput($event.target.value)' },\n\tinputs: ['text', 'rg'],\n\toutputs: ['newValue']\n})\nexport class ColorpickerTextDirective {\n\n\ttext: any;\n\trg: number;\n\tnewValue = new EventEmitter<{ v: number; rg: number; } | string>();\n\n\tchangeInput(value: string) {\n\t\tif (this.rg === undefined) {\n\t\t\tthis.newValue.emit(value);\n\t\t} else {\n\t\t\tlet numeric = parseFloat(value);\n\t\t\tif (!isNaN(numeric) && numeric >= 0 && numeric <= this.rg) {\n\t\t\t\tthis.newValue.emit({ v: numeric, rg: this.rg });\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/directive/colorpicker.text.directive.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ColorpickerComponent } from './component/colorpicker.component';\nimport { ColorpickerDialogComponent } from './component/dialog/colorpicker.dialog.component';\nimport { ColorpickerSampleComponent } from './component/sample/colorpicker.sample.component';\nimport { ColorpickerTextComponent } from './component/text/colorpicker.text.component';\nimport { ColorpickerDirective } from './directive/colorpicker.dialog.directive';\nimport { ColorpickerSliderDirective } from './directive/colorpicker.slider.directive';\nimport { ColorpickerTextDirective } from './directive/colorpicker.text.directive';\nimport { ColorpickerService } from './service/colorpicker.service';\n\n@NgModule({\n\timports: [\n\t\tCommonModule\n\t],\n\tproviders: [\n\t\tColorpickerService\n\t],\n\tentryComponents: [\n\t\tColorpickerComponent,\n\t\tColorpickerDialogComponent\n\t],\n\tdeclarations: [\n\t\tColorpickerComponent,\n\t\tColorpickerDialogComponent,\n\t\tColorpickerDirective,\n\t\tColorpickerTextDirective,\n\t\tColorpickerSliderDirective,\n\t\tColorpickerTextComponent,\n\t\tColorpickerSampleComponent\n\t],\n\texports: [\n\t\tColorpickerComponent\n\t]\n})\nexport class ColorpickerModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/colorpicker/colorpicker.module.ts","import { Injectable } from \"@angular/core\";\n\nenum DiffType {\n\tcreated = 'created',\n\tupdated = 'updated',\n\tdeleted = 'deleted',\n\tunchanged = 'unchanged',\n}\n\ninterface DiffData<T> extends Object {\n\ttype: DiffType;\n\tdata: T;\n\t[key: string]: any;\n}\n\n@Injectable()\nexport class PlayerBuilderDataDiffService {\n\n\tisFunction(x: any): x is Function { return Object.prototype.toString.call(x) === '[object Function]'; }\n\tisArray<T>(x: any): x is Array<T> { return Object.prototype.toString.call(x) === '[object Array]'; }\n\tisDate(x: any): x is Date { return Object.prototype.toString.call(x) === '[object Date]'; }\n\tisObject(x: any): x is Object { return Object.prototype.toString.call(x) === '[object Object]'; }\n\tisValue(x: any): x is string | number | boolean | symbol { return !this.isObject(x) && !this.isArray(x); }\n\n\tmap<T extends any>(obj1: Partial<T>, obj2: Partial<T>) {\n\n\t\tif (this.isFunction(obj1) || this.isFunction(obj2)) {\n\t\t\tthrow 'Invalid argument. Function given, object expected.';\n\t\t}\n\n\t\tif (this.isValue(obj1) || this.isValue(obj2)) {\n\t\t\treturn {\n\t\t\t\ttype: this.compareValues(obj1, obj2),\n\t\t\t\tdata: obj1 === undefined ? obj2 : obj1,\n\t\t\t};\n\t\t}\n\n\t\tlet diff: any | undefined | null;\n\t\tfor (const key in obj1) {\n\t\t\tif (this.isFunction(obj1[key])) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar value2 = undefined;\n\t\t\tif (obj2[key] !== undefined) {\n\t\t\t\tvalue2 = obj2[key];\n\t\t\t}\n\t\t\tif (!diff) { diff = {}; }\n\t\t\tdiff[key] = this.map(obj1[key], value2);\n\t\t}\n\t\tfor (const key in obj2) {\n\t\t\tif (this.isFunction(obj2[key]) || diff[key] !== undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!diff) { diff = {}; }\n\t\t\tdiff[key] = this.map(undefined, obj2[key]);\n\t\t}\n\t\treturn diff;\n\t}\n\n\tcompare<T extends any>(obj1: Partial<T>, obj2: Partial<T>) {\n\t\treturn this.filterChanged(this.map(obj1, obj2));\n\t}\n\n\tprivate filterChanged<T extends any>(o?: DiffData<T>): Partial<T> {\n\t\tlet filtered: Partial<T> | undefined = undefined;\n\t\tfor (const okey in o) {\n\t\t\tconst oval = o[okey];\n\t\t\tconst { type, data } = oval;\n\t\t\tconst key = okey as keyof T;\n\t\t\tswitch (type) {\n\t\t\t\tcase DiffType.created:\n\t\t\t\t\tif (!filtered) filtered = {};\n\t\t\t\t\tfiltered[key] = data;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DiffType.updated:\n\t\t\t\t\tif (!filtered) filtered = {};\n\t\t\t\t\tfiltered[key] = data;\n\t\t\t\t\tbreak;\n\t\t\t\tcase DiffType.deleted:\n\t\t\t\t\tbreak;\n\t\t\t\tcase DiffType.unchanged:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (!filtered) filtered = {};\n\t\t\t\t\tconst filteredObj = this.filterChanged<T[keyof T]>(oval);\n\t\t\t\t\tif (filteredObj != undefined) {\n\t\t\t\t\t\tconst keys = Object.keys(filteredObj);\n\t\t\t\t\t\tif (keys.length > 0) {\n\t\t\t\t\t\t\tif (typeof filteredObj === 'object') {\n\t\t\t\t\t\t\t\tif (keys[0] === '0') {\n\t\t\t\t\t\t\t\t\tfiltered[key] = keys.map(k => filteredObj[k as keyof Partial<T[keyof T]>]) as T[keyof T];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfiltered[key] = filteredObj as T[keyof T];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn filtered;\n\t};\n\n\tprivate compareValues(value1: any, value2: any): DiffType {\n\t\tif (value1 === value2) {\n\t\t\treturn DiffType.unchanged;\n\t\t}\n\t\tif (this.isDate(value1) && this.isDate(value2) && value1.getTime() === value2.getTime()) {\n\t\t\treturn DiffType.unchanged;\n\t\t}\n\t\tif (value1 === undefined) {\n\t\t\treturn DiffType.deleted;\n\t\t}\n\t\tif (value2 === undefined) {\n\t\t\treturn DiffType.created;\n\t\t}\n\t\treturn DiffType.updated;\n\t}\n\n\n\t// IMPORTAMT: must be same mergrDeep fnk as in lambda !\n\tmergeDeep(target: any, source: any) {\n\t\tconst isObject = (obj: any) => obj && typeof obj === 'object';\n\t\tif (!isObject(target) || !isObject(source)) return source;\n\t\tObject.keys(source).forEach((key) => {\n\t\t\tconst sourceValue = source[key];\n\t\t\tconst targetValue = target[key];\n\t\t\tif (Array.isArray(targetValue) && Array.isArray(sourceValue))\n\t\t\t\ttarget[key] = targetValue.concat(sourceValue) as any;\n\t\t\telse if (isObject(targetValue) && isObject(sourceValue))\n\t\t\t\ttarget[key] = this.mergeDeep(Object.assign(Object.create(null), targetValue), sourceValue);\n\t\t\telse\n\t\t\t\ttarget[key] = sourceValue;\n\t\t});\n\t\treturn target;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/data/player.builder.data.diff.service.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ColorpickerModule } from '../../../colorpicker/colorpicker.module';\nimport { FormComponentsModule } from '../../../form/form.module';\nimport { AbstractPlayerBuilderDataComponent } from './component/@core/abstract.player.builder.data.component';\nimport { PlayerBuilderPlayerComponent } from './component/player/player.builder.player.component';\nimport { PlayerBuilderViewComponent } from './component/view/player.builder.view.component';\nimport { PlayerBuilderRoute, PlayerBuilderRouteData } from './model/player.builder.model';\nimport { PLAYER_CDN_URL, PLAYER_DOCS_LINKS_URL, PLAYER_DOCS_URL, PLAYER_JS_SRC, PLAYER_SKIN_MEDIA_URL } from './model/player.builder.tokens';\nimport { PlayerBuilderDocsModule } from './modules/@common/docs/player.builder.docs.module';\nimport { PlayerBuilderBrandingModule } from './modules/branding/player.builder.branding.module';\nimport { PlayerBuilderEndSplashModule } from './modules/end-splash/player.builder.end-splash.module';\nimport { PlayerBuilderFeaturesModule } from './modules/features/player.builder.features.module';\nimport { PlayerBuilderGeneralModule } from './modules/general/player.builder.general.module';\nimport { PlayerBuilderIconsModule } from './modules/icons/player.builder.icons.module';\nimport { PlayerBuilderPlaybackModule } from './modules/playback/player.builder.playback.module';\nimport { PlayerBuilderThemeModule } from './modules/theme/player.builder.theme.module';\nimport { PlayerBuilderDataDiffService } from './service/data/player.builder.data.diff.service';\nimport { PlayerBuilderActivateGuard } from './service/guard/player.builder.activate.guard';\nimport { PlayerBuilderDeactivateGuard } from './service/guard/player.builder.deactivate.guard';\nimport { PlayerBuilderDataService } from './service/player.builder.data.service';\nimport { PlayerBuilderDocsService } from './service/player.builder.docs.service';\nimport { PlayerBuilderModalService } from './service/player.builder.modal.service';\nimport { PlayerBuilderVideoService } from './service/player.builder.video.service';\nimport { PlayerBuilderDocksLinksResolveService } from './service/resolve/http/player.builder.docs.links.resolve.service';\nimport { PlayerBuilderMediaResolveService } from './service/resolve/http/player.builder.media.resolve.service';\nimport { PlayerBuilderJsResolveService } from './service/resolve/js/player.builder.js.resolve.service';\n\nconst LOCAL_PROVIDERS = [\n\t{ provide: PLAYER_CDN_URL, useValue: 'https://bradm.ax/build/000000/00/builder' },\n\t// { provide: PLAYER_CDN_URL, useValue: ENV == 'development' ? 'http://localhost:9000/bin/modular' : 'https://bradm.ax/build/000000/00/builder' },\n\t{ provide: PLAYER_JS_SRC, useValue: 'player.js' },\n\t{ provide: PLAYER_DOCS_URL, useValue: 'https://bradmax.com/static/player-doc' },\n\t{ provide: PLAYER_DOCS_LINKS_URL, useValue: 'data/builder/docs.links.json' },\n\t{ provide: PLAYER_SKIN_MEDIA_URL, useValue: 'data/builder/media.json' },\n\t//\n\tPlayerBuilderActivateGuard,\n\tPlayerBuilderDeactivateGuard,\n\t//\n\tPlayerBuilderJsResolveService,\n\tPlayerBuilderDocksLinksResolveService,\n\tPlayerBuilderMediaResolveService,\n\t//\n\tPlayerBuilderDataDiffService,\n\tPlayerBuilderDataService,\n\tPlayerBuilderModalService,\n\tPlayerBuilderVideoService,\n\tPlayerBuilderDocsService,\n\t//\n];\n\nconst COMP: any = [\n\tPlayerBuilderViewComponent,\n\tPlayerBuilderPlayerComponent,\n];\n\nconst PlayerBuilderRoutes: Routes = [\n\t{\n\t\tpath: '',\n\t\tcanActivate: [PlayerBuilderActivateGuard],\n\t\tcanDeactivate: [PlayerBuilderDeactivateGuard],\n\t\tresolve: {\n\t\t\t[PlayerBuilderRouteData.bxplayer]: PlayerBuilderJsResolveService,\n\t\t\t[PlayerBuilderRouteData.docksLink]: PlayerBuilderDocksLinksResolveService,\n\t\t\t[PlayerBuilderRouteData.dataProvider]: PlayerBuilderMediaResolveService,\n\t\t},\n\t\tcomponent: PlayerBuilderViewComponent,\n\t\tchildren: [\n\t\t\t{ path: PlayerBuilderRoute.general, loadChildren: () => PlayerBuilderGeneralModule, data: { [PlayerBuilderRouteData.seek]: 'start' }, },\n\t\t\t{ path: PlayerBuilderRoute.playback, loadChildren: () => PlayerBuilderPlaybackModule, data: { [PlayerBuilderRouteData.seek]: 'start' }, },\n\t\t\t{ path: PlayerBuilderRoute.theme, loadChildren: () => PlayerBuilderThemeModule, data: { [PlayerBuilderRouteData.seek]: 'start' }, },\n\t\t\t{ path: PlayerBuilderRoute.icons, loadChildren: () => PlayerBuilderIconsModule, data: { [PlayerBuilderRouteData.seek]: 'start' }, },\n\t\t\t{ path: PlayerBuilderRoute.features, loadChildren: () => PlayerBuilderFeaturesModule, data: { [PlayerBuilderRouteData.seek]: 'start' }, },\n\t\t\t{ path: PlayerBuilderRoute.branding, loadChildren: () => PlayerBuilderBrandingModule, data: { [PlayerBuilderRouteData.seek]: 'start' }, },\n\t\t\t{ path: PlayerBuilderRoute.endsplash, loadChildren: () => PlayerBuilderEndSplashModule, data: { [PlayerBuilderRouteData.seek]: 'end' }, },\n\t\t\t// { path: PlayerBuilderRoute.editor, loadChildren: () => PlayerBuilderEditorModule, data: { [PlayerBuilderRouteData.seek]: 'start' }, },\n\t\t\t//\n\t\t\t{ path: '', redirectTo: PlayerBuilderRoute.general, pathMatch: 'full' },\n\t\t\t{ path: '**', redirectTo: PlayerBuilderRoute.general }\n\t\t]\n\t},\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerBuilderRoutes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPlayerBuilderDocsModule,\n\t\tColorpickerModule\n\t],\n\tproviders: [\n\t\t...LOCAL_PROVIDERS,\n\t],\n\tdeclarations: [\n\t\tAbstractPlayerBuilderDataComponent,\n\t\t...COMP,\n\t],\n\tentryComponents: COMP,\n\texports: COMP\n})\nexport class PlayerBuilderModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/player.builder.module.ts","import { Location } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { Subscription } from 'rxjs';\n\nimport { zip } from 'rxjs/observable/zip';\nimport { PlayerModel, PlayerReadResponse } from '../../../../../model/api.model';\nimport { SidebarService } from '../../../../../service/sidebar.service';\nimport { UserService } from '../../../../../service/user.service';\nimport { ViewService } from '../../../../../service/view.service';\nimport { DropdownModel } from '../../../../form/dropdown/dropdown.model';\nimport { PlayerRoute, PlayerRouteData, PlayerRouteParam } from '../../../model/player.model';\nimport { PlayerEmbederFormModel } from '../model/player.embeder.model';\nimport { PlayerEmbederService } from '../service/player.embeder.service';\nimport { PlayerListDataService } from '../../../service/player.list.data.service';\n\nenum EmbedCodeType {\n\tIFRAME = 0,\n\tDYNAMIC = 1\n}\n\n@Component({\n\tselector: 'player-embeder-view',\n\ttemplate: require('./player.embeder.view.component.html'),\n\tstyles: [require('./player.embeder.view.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerEmbederView extends Localization implements OnInit, OnDestroy {\n\n\tshowOptional = true;\n\tmodelMandatoryNames = ['width', 'height', 'mediaUrl'];\n\tmodelOptionalNames = ['mediaUrl2', 'title', 'duration', 'id', 'splashImageUrl'];\n\tmodelAdsFieldsNames = ['adsVmapUrl', 'adsPrerollVastUrl'];\n\tmodelFieldsCellWidth = {\n\t\t'width': 6,\n\t\t'height': 6,\n\t\t'mediaUrl': 12,\n\t\t'mediaUrl2': 12,\n\t\t'title': 12,\n\t\t'duration': 6,\n\t\t'splashImageUrl': 12,\n\t\t'id': 6,\n\t\t'adsVmapUrl': 12,\n\t\t'adsPrerollVastUrl': 12\n\t};\n\n\tmodel: PlayerEmbederFormModel = {\n\t\twidth: 600,\n\t\theight: 400,\n\t\tmediaUrl: 'https://bradmax.com/static/video/tears_of_steel.mp4',\n\t\ttitle: 'Tears of steel',\n\t\tduration: 734.097415,\n\t\tsplashImageUrl: 'https://bradmax.com/static/images/startsplash.jpg',\n\t\tid: null,\n\t\tadsVmapUrl: null,\n\t\tadsPrerollVastUrl: null\n\t};\n\tmodelCache: String;\n\n\tselectedType: EmbedCodeType = EmbedCodeType.IFRAME;\n\tembedCodeType = EmbedCodeType;\n\tdropdownModel: DropdownModel[];\n\n\tcodemirrorConfig = {\n\t\treadOnly: true,\n\t\tmode: 'htmlmixed',\n\t\ttheme: 'blackboard',\n\t\tlineWrapping: true,\n\t\tlineNumbers: true,\n\t\tlineWiseCopyCut: true,\n\t\tindentUnit: 1,\n\t\tautofocus: false\n\t};\n\tembedCodeString = '';\n\tembedCodeHtml: SafeHtml;\n\n\tprivate routeSub: Subscription;\n\n\tconstructor(\n\t\tpublic view: ViewService,\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic service: PlayerEmbederService,\n\t\tpublic user: UserService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate list: PlayerListDataService,\n\t\tprivate sidebar: SidebarService,\n\t\tprivate location: Location,\n\t\tprivate sanitizer: DomSanitizer\n\t) {\n\t\tsuper(locale, translation);\n\t\tthis.translation.translationChanged.subscribe(() => this.onTranslationChanged());\n\t\t// this.view.spinner(true);\n\t\tthis.view.resizeStream$.subscribe(() => this.redraw());\n\t\tthis.route.data.subscribe((data: any) => this.parse(data));\n\n\t\tfor (let prod of this.user.products) {\n\t\t\tif (prod.has_ads_support) {\n\t\t\t\t// When ads are supported and ads fields to optional names.\n\t\t\t\tthis.modelOptionalNames = this.modelOptionalNames.concat(this.modelAdsFieldsNames);\n\t\t\t}\n\t\t}\n\t}\n\n\tngOnInit() {\n\t\tthis.onTranslationChanged();\n\t\tthis.updateModelCache();\n\t\tthis.routeSub = zip(this.list.$, this.route.params)\n\t\t\t.subscribe(r => {\n\t\t\t\tconst [players, params] = r;\n\t\t\t\tif (PlayerRouteParam.id in params && players) {\n\t\t\t\t\tthis.sidebar.showPlayersMenu(players, parseInt(params[PlayerRouteParam.id]));\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t// ngAfterViewInit() {\n\t// this.view.spinner(false);\n\t// this.sidebar.update();\n\t// }\n\n\tngOnDestroy() {\n\t\tthis.routeSub.unsubscribe();\n\t}\n\n\tonTranslationChanged() {\n\t\tthis.dropdownModel = [\n\t\t\t{ value: EmbedCodeType.IFRAME, label: this.translation.translate('PLAYER.EMBEDER.INPUT.TYPE.VALUE.0'), icon: 'fa-window-maximize' },\n\t\t\t{ value: EmbedCodeType.DYNAMIC, label: this.translation.translate('PLAYER.EMBEDER.INPUT.TYPE.VALUE.1'), icon: 'fa-code' }\n\t\t];\n\t}\n\n\tredraw() {\n\t\tthis.cdr.markForCheck()\n\t}\n\n\tonDropdownSelect(data: DropdownModel) {\n\t\tthis.clearModelCache();\n\t\tthis.generate();\n\t}\n\n\tonChange() {\n\t\tthis.generate();\n\t}\n\n\ttoggleOptional() {\n\t\tthis.showOptional = !this.showOptional;\n\t\tthis.clearModelCache();\n\t\tthis.generate();\n\t}\n\n\tpreviewDynamic() {\n\t\tlet previewWindow = window.open(\"\", `Preview ${this.formatTypeLabel()}`, `width=${this.model.width},height=${this.model.height + 22}`);\n\t\tpreviewWindow.document.write('<style>body {margin:0;padding:0;}</style>' + this.embedCodeString);\n\t}\n\n\tformatTypeIconNgClass() {\n\t\tif (!this.dropdownModel)\n\t\t\treturn null;\n\t\tif (this.selectedType == EmbedCodeType.IFRAME)\n\t\t\treturn { [this.dropdownModel[0].icon]: true };\n\t\telse if (this.selectedType == EmbedCodeType.DYNAMIC)\n\t\t\treturn { [this.dropdownModel[1].icon]: true };\n\t\treturn null;\n\t}\n\n\tformatTypeLabel() {\n\t\tif (!this.dropdownModel)\n\t\t\treturn null;\n\t\tif (this.selectedType == EmbedCodeType.IFRAME)\n\t\t\treturn this.dropdownModel[0].label;\n\t\telse if (this.selectedType == EmbedCodeType.DYNAMIC)\n\t\t\treturn this.dropdownModel[1].label;\n\t\treturn null;\n\t}\n\n\tcopyToClipboard() {\n\t\tlet textArea = document.createElement(\"textarea\");\n\t\ttextArea.value = this.embedCodeString;\n\t\tdocument.body.appendChild(textArea);\n\t\ttextArea.focus();\n\t\ttextArea.select();\n\t\ttry {\n\t\t\tlet successful = document.execCommand('copy');\n\t\t\tlet msg = successful ? 'successful' : 'unsuccessful';\n\t\t} catch (err) {\n\t\t\tconsole.error('Oops, unable to copy', err);\n\t\t}\n\t\tdocument.body.removeChild(textArea);\n\t}\n\n\tprivate generate() {\n\t\tif (this.modelCache == JSON.stringify(this.model))\n\t\t\treturn;\n\n\t\tif (this.selectedType == EmbedCodeType.IFRAME)\n\t\t\tthis.generateIframeEmbedCode();\n\t\tif (this.selectedType == EmbedCodeType.DYNAMIC)\n\t\t\tthis.generateDynamicEmbedCode();\n\t}\n\n\tprivate generateIframeEmbedCode() {\n\t\tlet URL = `${this.service.playerModel.embed_player_page_url}?mediaUrl=${encodeURIComponent(this.model.mediaUrl)}`;\n\t\tif (this.showOptional) {\n\t\t\tif (this.model.mediaUrl2)\n\t\t\t\tURL += `&mediaUrl2=${encodeURIComponent(this.model.mediaUrl2)}`;\n\t\t\tif (this.model.title)\n\t\t\t\tURL += `&title=${encodeURIComponent(this.model.title)}`;\n\t\t\tif (this.model.duration)\n\t\t\t\tURL += `&duration=${this.model.duration}`;\n\t\t\tif (this.model.splashImageUrl)\n\t\t\t\tURL += `&splashImgUrl=${encodeURIComponent(this.model.splashImageUrl)}`;\n\t\t\tif (this.model.id)\n\t\t\t\tURL += `&id=${encodeURIComponent(this.model.id)}`;\n\t\t\tif (this.model.adsVmapUrl) {\n\t\t\t\tURL += `&a.vmap=${encodeURIComponent(this.model.adsVmapUrl)}`;\n\t\t\t}\n\t\t\tif (this.model.adsPrerollVastUrl) {\n\t\t\t\tURL += `&a.pre.vast=${encodeURIComponent(this.model.adsPrerollVastUrl)}`;\n\t\t\t}\n\t\t}\n\t\tthis.embedCodeString = `<iframe src=\"${URL}\" width=\"${this.model.width}\" height=\"${this.model.height}\" frameBorder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen></iframe>`;\n\t\tthis.embedCodeHtml = this.sanitizer.bypassSecurityTrustHtml(this.embedCodeString);\n\t}\n\n\tprivate generateDynamicEmbedCode() {\n\t\tlet cfg = { dataProvider: { source: [{ url: this.model.mediaUrl }] } };\n\t\tif (this.showOptional) {\n\t\t\tif (this.model.mediaUrl2)\n\t\t\t\tcfg.dataProvider.source.push({ url: this.model.mediaUrl2 });\n\t\t\tif (this.model.title)\n\t\t\t\tcfg.dataProvider['title'] = this.model.title;\n\t\t\tif (this.model.duration)\n\t\t\t\tcfg.dataProvider['duration'] = this.model.duration;\n\t\t\tif (this.model.splashImageUrl)\n\t\t\t\tcfg.dataProvider['splashImages'] = [{ url: this.model.splashImageUrl }];\n\t\t\tif (this.model.id)\n\t\t\t\tcfg.dataProvider['id'] = this.model.id;\n\t\t\tif (this.model.adsVmapUrl) {\n\t\t\t\tif (!('advertisement' in cfg)) {\n\t\t\t\t\tcfg['advertisement'] = {};\n\t\t\t\t}\n\t\t\t\tcfg['advertisement']['vmap'] = this.model.adsVmapUrl;\n\t\t\t}\n\t\t\tif (this.model.adsPrerollVastUrl) {\n\t\t\t\tif (!('advertisement' in cfg)) {\n\t\t\t\t\tcfg['advertisement'] = {};\n\t\t\t\t}\n\t\t\t\tcfg['advertisement']['breaks'] = [{ \"timeOffset\": \"start\", \"vast\": this.model.adsPrerollVastUrl }];\n\t\t\t}\n\t\t}\n\t\tlet JSON_ESCAPED_CONFIG = btoa(JSON.stringify(cfg));\n\t\tthis.embedCodeString = `<div id=\"player\" style=\"width: ${this.model.width}px; height: ${this.model.height}px;\"></div>\n<script src=\"${this.service.playerModel.latest_webbuild.player_js_url}\" type=\"text/javascript\" data-bs-parent-id=\"player\" data-bs-variables=\"${JSON_ESCAPED_CONFIG}\"></script>`;\n\t\tthis.embedCodeHtml = null;\n\t}\n\n\tprivate parse(data: { playerModel: PlayerReadResponse | PlayerModel }) {\n\t\tthis.view.spinner(false);\n\t\tif (data != null && data.playerModel != null)\n\t\t\tthis.service.playerModel = data.playerModel as PlayerModel;\n\t\telse if (ENV != 'test')\n\t\t\tthrow new Error('EMPTY RESOLVER DATA');\n\t\tthis.generate();\n\t}\n\n\tprivate updateModelCache() {\n\t\tthis.modelCache = JSON.stringify(this.model);\n\t}\n\n\tprivate clearModelCache() {\n\t\tthis.modelCache = null;\n\t}\n\n\tnavigationBack() {\n\t\tthis.location.back();\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/embeder/component/player.embeder.view.component.ts","import { Injectable, NgZone } from \"@angular/core\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\n\n@Injectable()\nexport class PlayerBuilderVideoService {\n\n\tprivate get api(): bradmax.player.PlayerJavascriptApi | null {\n\t\tif (!!this.$player.value && !!this.$player.value.modules && !!this.$player.value.modules.JavascriptApi)\n\t\t\treturn this.$player.value.modules.JavascriptApi;\n\t\telse\n\t\t\treturn null;\n\t};\n\tprivate get skin(): bradmax.player.PlayerHtmlSkin | null {\n\t\tif (!!this.$player.value && !!this.$player.value.modules && !!this.$player.value.modules.HtmlSkin)\n\t\t\treturn this.$player.value.modules.HtmlSkin;\n\t\telse\n\t\t\treturn null;\n\t};\n\tget isEndSplashVisible(): boolean { return !!this.skin ? !!this.skin.state.splash.show.end : false; }\n\n\tset config(c: bradmax.player.Configuration) { this._config = { ...this._config, ...c }; };\n\tget config(): bradmax.player.Configuration {\n\t\tif ('qualitySelectionEnabled' in this._config && this._config.qualitySelectionEnabled === false)\n\t\t\tdelete this._config.qualitySelectionEnabled;\n\t\treturn this._config;\n\t};\n\tprivate _config: bradmax.player.Configuration = {};\n\n\tset container(c: HTMLElement) { this._container = c; };\n\tget container(): HTMLElement { return this._container; };\n\n\tprivate _container: HTMLElement;\n\n\tprivate seekValue: 'start' | 'end' | null = null;\n\tprivate currentDuration = NaN;\n\n\tprivate $player = new BehaviorSubject<bradmax.player.Player | null>(null);\n\tprivate $event = new BehaviorSubject<bradmax.player.Event | null>(null);\n\tget player$(): Observable<bradmax.player.Player | null> { return this.$player.asObservable(); }\n\tget event$(): Observable<bradmax.player.Event | null> { return this.$event.asObservable(); }\n\n\tget playerVer(): string | undefined { return this.api ? this.api.getVersion() : undefined; }\n\n\tconstructor(\n\t\tprivate zone: NgZone\n\t) { }\n\n\tcreate(): void {\n\t\tthis.destroy();\n\t\tif (!this.container || !this.config || !bradmax.player.create) {\n\t\t\treturn;\n\t\t}\n\t\tthis.zone.runOutsideAngular(() => {\n\t\t\ttry {\n\t\t\t\tdelete this.config.showSkinOnInit;\n\t\t\t\tconst player = bradmax.player.create(this.container, this.config);\n\t\t\t\tthis.$player.next(player);\n\t\t\t\tthis.api.add(\"VideoEvent.playing\", e => this.$event.next(e));\n\t\t\t\tthis.api.add(\"VideoEvent.paused\", e => this.$event.next(e));\n\t\t\t\tthis.api.add(\"VideoEvent.stopped\", e => this.$event.next(e));\n\t\t\t\tthis.api.add(\"VideoEvent.durationChange\", e => { this.currentDuration = e.data.duration; this.$event.next(e); });\n\t\t\t\tthis.api.add(\"VideoEvent.currentTimeChange\", e => this.$event.next(e));\n\t\t\t\tthis.api.add(\"VideoEvent.complete\", e => this.$event.next(e));\n\t\t\t\tthis.api.add(\"VideoEvent.bufferingStart\", e => this.$event.next(e));\n\t\t\t\tthis.api.add(\"VideoEvent.bufferingEnd\", e => this.$event.next(e));\n\t\t\t\tthis.api.add(\"VideoEvent.seekingStart\", e => this.$event.next(e));\n\t\t\t\tthis.api.add(\"VideoEvent.seekingEnd\", e => this.$event.next(e));\n\t\t\t\tswitch (this.seekValue) {\n\t\t\t\t\tcase 'end':\n\t\t\t\t\t\tthis.seekEnd();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'start':\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthis.seekStart();\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(`[VideoService].create.ERROR`, e);\n\t\t\t\tconsole.debug('[VideoService].create.config', this.config);\n\t\t\t\tconsole.debug('[VideoService].HtmlSkin.plugin', this.skin);\n\t\t\t}\n\t\t});\n\t}\n\n\tdestroy(): void {\n\t\tthis.currentDuration = NaN;\n\t\tif (this.$player.value != null || !bradmax.player.destroy) {\n\t\t\tthis.zone.runOutsideAngular(() => {\n\t\t\t\ttry {\n\t\t\t\t\tbradmax.player.destroy(this.$player.value);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(`[VideoService].destroy.ERROR`, e);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis.$player.next(null);\n\t}\n\n\tseek(t: 'start' | 'end') {\n\t\tif (this.seekValue === t)\n\t\t\treturn;\n\t\tthis.seekValue = t;\n\t\tif (!!this.api) {\n\t\t\tthis.zone.runOutsideAngular(() => {\n\t\t\t\tswitch (this.seekValue) {\n\t\t\t\t\tcase 'end':\n\t\t\t\t\t\tthis.seekEnd();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'start':\n\t\t\t\t\t\tthis.seekStart();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate seekStart() {\n\t\tif (!this.api)\n\t\t\treturn;\n\t\tthis.api.seek(0);\n\t\tthis.api.addOnce(\"VideoEvent.seekingEnd\", (_) => this.api.pause());\n\t}\n\n\tprivate seekEnd() {\n\t\tif (!this.api || isNaN(this.currentDuration))\n\t\t\treturn;\n\t\tthis.api.seek(this.currentDuration);\n\t\tthis.api.addOnce(\"VideoEvent.seekingEnd\", (_) => this.api.play());\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/player.builder.video.service.ts","import { Injectable } from \"@angular/core\";\nimport { mergeDeep } from \"@bradmax/player-util\";\nimport { BehaviorSubject, Observable, Subscription } from \"rxjs\";\nimport { PlayerCreateRequestV2, PlayerReadResponseV2 } from \"../../../../../model/api.model\";\nimport { PlayerService } from \"../../../../../service/player.service\";\nimport { UserService } from \"../../../../../service/user.service\";\nimport { coerceBooleanProperty, coerceNumberProperty } from \"../../../../../util/coercion\";\nimport { ColorpickerService } from \"../../../../colorpicker/service/colorpicker.service\";\nimport { PlayerBuilderDataDiffService } from \"./data/player.builder.data.diff.service\";\nimport { PlayerBuilderVideoService } from \"./player.builder.video.service\";\n\n@Injectable()\nexport class PlayerBuilderDataService {\n\tcreatedAt: number | undefined;\n\tupdatedAt: number | undefined;\n\tpublishedAt: number | undefined;\n\taccountId: number | undefined;\n\tbuildId: number | undefined;\n\tbuildName: string | undefined;\n\tsavedBuildName: string | undefined;\n\tskinIconFontVariationSettings: string | null = null;\n\t//\n\tprivate formSub: BehaviorSubject<Required<bradmax.builder.ConfJson>>;\n\tprivate formCache: string;\n\tprivate savedData: bradmax.builder.ConfJson;\n\tprivate videoPlayerSub: Subscription;\n\tprivate videoPlayerSkin: bradmax.player.PlayerHtmlSkin | null;\n\tprivate videoPlayerJsApi: bradmax.player.PlayerJavascriptApi | null;\n\n\tconstructor(\n\t\tprivate user: UserService,\n\t\tprivate video: PlayerBuilderVideoService,\n\t\tprivate diff: PlayerBuilderDataDiffService,\n\t\tprivate cp: ColorpickerService,\n\t\tprivate api: PlayerService,\n\t) { }\n\n\tget userAdsSupportEnabled() { return this.user.hasAdsSupport(); }\n\n\tget isDirty(): boolean { return this.buildName != this.savedBuildName || this.formCache !== JSON.stringify(this.formData); }\n\tget $(): Observable<Readonly<Required<bradmax.builder.ConfJson>>> { return this.formSub.asObservable(); }\n\tget videoPlayer$(): Observable<bradmax.player.Player | null> { return this.video.player$; }\n\tget videoEvent$(): Observable<bradmax.player.Event | null> { return this.video.event$; }\n\tget RESOURCE(): Readonly<bradmax.builder.Resource> { return bradmax.builder.resource; }\n\tprivate get DEFAULT(): Readonly<Required<bradmax.builder.ConfJson>> { return this.RESOURCE.defaultSettings; }\n\tget VERSION() { return bradmax.builder.resource.version; }\n\n\tplayerLocales: string[];\n\n\tvideoSeek(t: 'start' | 'end') { this.video.seek(t); }\n\n\tinit(): void {\n\t\tthis.formSub = new BehaviorSubject<Required<bradmax.builder.ConfJson>>(this.DEFAULT);\n\t\tthis.video.config = this.DEFAULT.variable;\n\t\tif (!!this.videoPlayerSub && !this.videoPlayerSub.closed)\n\t\t\tthis.videoPlayerSub.unsubscribe();\n\t\tthis.videoPlayerSub = this.videoPlayer$\n\t\t\t.subscribe(p => {\n\t\t\t\tthis.videoPlayerSkin = p && p.modules && p.modules.HtmlSkin ? p.modules.HtmlSkin : null;\n\t\t\t\tthis.videoPlayerJsApi = p && p.modules && p.modules.JavascriptApi ? p.modules.JavascriptApi : null;\n\t\t\t\tif (this.videoPlayerSkin) {\n\t\t\t\t\tthis.playerLocales = this.videoPlayerSkin.builder.locales();\n\t\t\t\t\tif (this.skinless) {\n\t\t\t\t\t\tthis.videoPlayerSkin.skinElement.classList.add('hide');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tdestroy(): void {\n\t\tif (!!this.videoPlayerSub && !this.videoPlayerSub.closed)\n\t\t\tthis.videoPlayerSub.unsubscribe();\n\t\tthis.videoPlayerSub = null;\n\t\tthis.video.destroy();\n\t\tthis.createdAt = undefined;\n\t\tthis.updatedAt = undefined;\n\t\tthis.publishedAt = undefined;\n\t\tthis.accountId = undefined;\n\t\tthis.buildId = undefined;\n\t\tthis.buildName = undefined;\n\t\tthis.savedBuildName = undefined;\n\t\tthis.formSub = null;\n\t\tthis.formCache = null\n\t\tthis.savedData = null\n\t\tthis.videoPlayerSkin = null\n\t\tthis.videoPlayerJsApi = null\n\t\tthis.skinIconFontVariationSettings = null\n\t}\n\n\tparseResponseData(resp: PlayerReadResponseV2): void {\n\t\tthis.accountId = resp.account;\n\t\tthis.buildId = resp.id;\n\t\tthis.createdAt = resp.created_at;\n\t\tthis.updatedAt = resp.updated_at;\n\n\t\tthis.buildName = resp.name;\n\t\tthis.savedBuildName = resp.name;\n\n\t\tconst conf_json: bradmax.builder.ConfJson = JSON.parse(resp.conf_json);\n\t\tthis.publishedAt = resp.latest_webbuild ? resp.latest_webbuild.created_at : null;\n\n\t\tthis.savedData = {};\n\n\t\tconst typeKey: keyof bradmax.builder.ConfJson = 'type';\n\t\tif (typeKey in conf_json)\n\t\t\tthis.savedData.type = conf_json.type;\n\n\t\tconst versionKey: keyof bradmax.builder.ConfJson = 'version';\n\t\tif (versionKey in conf_json)\n\t\t\tthis.savedData.version = conf_json.version;\n\n\t\tconst themeKey: keyof bradmax.builder.ConfJson = 'theme';\n\t\tif (themeKey in conf_json)\n\t\t\tthis.savedData.theme = conf_json.theme;\n\n\t\tconst variableKey: keyof bradmax.builder.ConfJson = 'variable';\n\t\tif (variableKey in conf_json)\n\t\t\tthis.savedData.variable = conf_json.variable;\n\n\t\tconst pluginKey: keyof bradmax.builder.ConfJson = 'plugin';\n\t\tif (pluginKey in conf_json)\n\t\t\tthis.savedData.plugin = conf_json.plugin;\n\n\t\tconst theme = this.savedData.theme ? this.savedData.theme : this.DEFAULT.theme;\n\n\t\tconst skinDefault = { ...this.RESOURCE.themes[theme] };\n\t\tlet icon: bradmax.player.SkinFonts | bradmax.player.SkinSvgs = { ...skinDefault.icon };\n\n\t\tconst savedSkin = this.savedData.variable && this.savedData.variable.skin ? this.savedData.variable.skin : null;\n\t\tif (!!savedSkin) {\n\t\t\tif (!!savedSkin.icon) {\n\t\t\t\t// default and saved are svg\n\t\t\t\tif (this.isSkinSvg(skinDefault.icon) && this.isSkinSvg(savedSkin.icon)) {\n\t\t\t\t\ticon = { svg: { ...skinDefault.icon.svg, ...savedSkin.icon.svg } };\n\t\t\t\t} // default and saved are font\n\t\t\t\telse if (this.isSkinFont(skinDefault.icon) && this.isSkinFont(savedSkin.icon)) {\n\t\t\t\t\ticon = { font: { ...skinDefault.icon.font, ...savedSkin.icon.font } };\n\t\t\t\t}\n\t\t\t\telse { icon = { ...savedSkin.icon }; }\n\t\t\t}\n\t\t}\n\t\tconst skin: bradmax.player.Skin = savedSkin\n\t\t\t? { ...mergeDeep(skinDefault, savedSkin), icon, }\n\t\t\t: { ...skinDefault };\n\t\tconst variable: bradmax.player.Configuration = this.savedData.variable\n\t\t\t? { ...mergeDeep({ ...this.DEFAULT.variable }, this.savedData.variable), skin }\n\t\t\t: { ...this.DEFAULT.variable, skin };\n\n\t\tconst formData: Required<bradmax.builder.ConfJson> = {\n\t\t\tversion: this.savedData.version ? this.savedData.version : this.DEFAULT.version,\n\t\t\ttype: this.savedData.type ? this.savedData.type : this.DEFAULT.type,\n\t\t\ttheme,\n\t\t\tvariable,\n\t\t\tplugin: this.savedData.plugin ? this.savedData.plugin : this.DEFAULT.plugin,\n\t\t}\n\t\tthis.formCache = JSON.stringify(formData);\n\t\tthis.formData = formData;\n\t\tthis.resetPlayer();\n\t}\n\n\treset(): void {\n\t\tif (!this.isDirty)\n\t\t\treturn;\n\t\tthis.formData = JSON.parse(this.formCache);\n\t\tthis.resetPlayer();\n\t}\n\n\tprivate resetPlayer(): void {\n\t\tthis.video.config = this.formData.variable;\n\t\tif (this.videoPlayerJsApi) {\n\t\t\tthis.videoPlayerJsApi.setMute(this.mute);\n\t\t\tthis.videoPlayerJsApi.setVolume(this.volume);\n\t\t}\n\t\tif (this.videoPlayerSkin) {\n\t\t\tthis.videoPlayerSkin.skinElement.classList.remove('hide');\n\t\t\tthis.videoPlayerSkin.builder.pip(this.pictureInPictureButtonVisible);\n\t\t\tthis.videoPlayerSkin.builder.casting(this.videoCastEnabled);\n\t\t\tthis.videoPlayerSkin.builder.fullscreen(this.fullscreenEnabled);\n\t\t\tthis.videoPlayerSkin.builder.playbackRate(this.playbackRateEnabled);\n\t\t\tthis.videoPlayerSkin.builder.contextmenu(this.contextMenuDisabled);\n\t\t\tthis.videoPlayerSkin.builder.quality(this.qualitySelectionEnabled);\n\t\t\tthis.videoPlayerSkin.builder.endSplash(this.endSplash);\n\t\t\tthis.videoPlayerSkin.set_color(this.skinColor);\n\t\t}\n\t\tthis.updateBrand();\n\t\tthis.updateSkinIconFontVariationSettings();\n\t\tthis.video.create();\n\t}\n\n\tsave$(): Observable<PlayerReadResponseV2> {\n\t\treturn this.api.updatePlayer<PlayerCreateRequestV2>(this.accountId, `${this.buildId}`, {\n\t\t\tapi_version: '2',\n\t\t\tname: this.buildName,\n\t\t\tconf_json: this.formatDataToSave()\n\t\t})\n\t}\n\n\tpublish$(): Observable<PlayerReadResponseV2> { return this.api.generateBuild(this.accountId, `${this.buildId}`); }\n\n\tprivate formatDataToSave(): string {\n\t\tconst value = this.formData;\n\t\t//////\n\t\tif (this.userAdsSupportEnabled == false) {\n\t\t\tvalue.plugin.AdvertisementDataProvider = false;\n\t\t\tvalue.plugin.FreeWheel = false;\n\t\t}\n\t\t//////\n\t\t// [1] format conf_json variable field\n\t\tconst formVariable = value.variable;\n\t\tconst compareWithVariable: bradmax.player.Configuration = {\n\t\t\t...this.DEFAULT.variable,\n\t\t\tskin: {\n\t\t\t\t...this.RESOURCE.themes[this.skinName],\n\t\t\t}\n\t\t}\n\t\tconst variable = this.diff.compare(formVariable, compareWithVariable);\n\t\t//////\n\t\t// [2] format conf_json\n\t\tconst data: Required<bradmax.builder.ConfJson> = {\n\t\t\tversion: this.DEFAULT.version,\n\t\t\ttype: this.DEFAULT.type,\n\t\t\ttheme: this.skinName,\n\t\t\tvariable,\n\t\t\tplugin: value.plugin,\n\t\t};\n\t\t//////\n\t\t// [3] stringify and remove null values\n\t\tconst formatted = JSON.stringify(data, (_key: string, value: any) => {\n\t\t\tif (value == null)\n\t\t\t\treturn undefined;\n\t\t\tif (!!value && typeof value === 'string' && value.length > 0)\n\t\t\t\treturn value.trim();\n\t\t\treturn value;\n\t\t});\n\t\treturn formatted;\n\t}\n\n\tprivate isSkinSvg(v: bradmax.player.SkinFonts | bradmax.player.SkinSvgs): v is bradmax.player.SkinSvgs { return 'svg' in v; }\n\tprivate isSkinFont(v: bradmax.player.SkinFonts | bradmax.player.SkinSvgs): v is bradmax.player.SkinFonts { return 'font' in v; }\n\t////////////////\n\tprivate updateSkinIconFontVariationSettings(variation?: { [name: string]: bradmax.player.SkinFontVariation; }) {\n\t\tif (variation == null) {\n\t\t\tconst fnt = this.player.skin && this.player.skin.icon && 'font' in this.player.skin.icon\n\t\t\t\t? this.player.skin.icon.font\n\t\t\t\t: null;\n\t\t\tvariation = fnt && fnt.variation ? fnt.variation : null\n\t\t}\n\t\tconst keys = variation ? Object.keys(variation) : [];\n\t\tif (keys.length > 0)\n\t\t\tthis.skinIconFontVariationSettings = keys\n\t\t\t\t.map(k => `\"${k}\" ${variation[k]}`)\n\t\t\t\t.join(`, `);\n\t\telse\n\t\t\tthis.skinIconFontVariationSettings = null;\n\t}\n\t////////////////\n\tprivate set formData(data: Required<bradmax.builder.ConfJson>) { this.formSub.next(data); }\n\tprivate get formData(): Required<bradmax.builder.ConfJson> { return this.formSub && this.formSub.value ? this.formSub.value : this.DEFAULT; }\n\t// player/\n\tprivate set player(cfg: bradmax.player.Configuration) {\n\t\tif (this.video)\n\t\t\tthis.video.config = cfg;\n\t\t/////\n\t\tconst value = this.formData;\n\t\tif (!value)\n\t\t\treturn;\n\t\tthis.formData = { ...value, variable: { ...value.variable, ...cfg } };\n\t}\n\tprivate get player(): bradmax.player.Configuration { return this.formData ? this.formData.variable : null; }\n\tprivate readPlayer(key: keyof bradmax.player.Configuration) { return !!this.player && key in this.player ? this.player[key] : this.DEFAULT.variable[key]; }\n\t// plugins/\n\tprivate set plugins(cfg: bradmax.builder.Plugins) {\n\t\tconst value = this.formData;\n\t\tif (!value)\n\t\t\treturn;\n\t\tthis.formData = { ...value, plugin: { ...value.plugin, ...cfg } };\n\t}\n\tprivate get plugins(): bradmax.builder.Plugins { return this.formData ? this.formData.plugin : null; }\n\tprivate readPlugins(key: keyof bradmax.builder.Plugins) { return !!this.plugins && key in this.plugins ? this.plugins[key] : false; }\n\t///////////////\n\tprivate writePlayer<T = any>(key: keyof bradmax.player.Configuration, value?: T) { this.player = { [key]: value }; }\n\tprivate writePlugin(key: keyof bradmax.builder.Plugins, value?: boolean) { this.plugins = { [key]: value }; }\n\tprivate deletePlugin(key: keyof bradmax.builder.Plugins) { delete this.plugins[key]; }\n\t///////////////\n\t////////////////////////////\n\t// PLAYER\n\t////////////////////////////\n\t// autoplay/\n\tset autoplay(v: boolean) { this.writePlayer('autoplay', v); if (!!v && this.mute !== true) this.mute = true; }\n\tget autoplay(): boolean { return this.readPlayer('autoplay'); }\n\t////////////////////////////\n\t// mute /\n\tset mute(v: boolean) { this.writePlayer('mute', v); if (this.videoPlayerJsApi) this.videoPlayerJsApi.setMute(v); }\n\tget mute(): boolean { return this.readPlayer('mute'); }\n\t// volume /\n\tset volume(v: number) { this.writePlayer('volume', v); if (this.videoPlayerJsApi) this.videoPlayerJsApi.setVolume(v); }\n\tget volume(): number { return this.readPlayer('volume'); }\n\t////////////////////////////\n\t// locale /\n\tset locale(v: string) { this.writePlayer('locale', v); this.video.create(); }\n\tget locale(): string | null { return this.readPlayer('locale'); }\n\t// audio /\n\tset audio(v: string) { this.writePlayer('audio', v); this.video.create(); }\n\tget audio(): string | null { return this.readPlayer('audio'); }\n\t// subtitles /\n\tset subtitles(v: string) { this.writePlayer('subtitles', v); this.video.create(); }\n\tget subtitles(): string | null { return this.readPlayer('subtitles'); }\n\t////////////////////////////\n\t// showSkinOnInit /\n\tset showSkinOnInit(v: boolean) { this.writePlayer('showSkinOnInit', coerceBooleanProperty(v)); this.video.create(); }\n\tget showSkinOnInit(): boolean { return this.readPlayer('showSkinOnInit'); }\n\t////////////////////////////\n\t//TODO: pictureInPictureButtonVisible / rename to pictureInPictureEnabled\n\tset pictureInPictureButtonVisible(v: boolean) {\n\t\tthis.writePlugin('PictureInPicture', coerceBooleanProperty(v));\n\t\tthis.writePlayer('pictureInPictureButtonVisible', coerceBooleanProperty(v));\n\t\tif (this.videoPlayerSkin) this.videoPlayerSkin.builder.pip(v);\n\t}\n\tget pictureInPictureButtonVisible(): boolean { return this.readPlayer('pictureInPictureButtonVisible'); }\n\t////////////////////////////\n\t// videoCastEnabled /\n\tset videoCastEnabled(v: boolean) {\n\t\tthis.writePlugin('AirPlay', coerceBooleanProperty(v));\n\t\tthis.writePlugin('Chromecast', coerceBooleanProperty(v));\n\t\tthis.writePlayer('videoCastEnabled', coerceBooleanProperty(v));\n\t\tif (this.videoPlayerSkin) this.videoPlayerSkin.builder.casting(v);\n\t}\n\tget videoCastEnabled(): boolean { return this.readPlayer('videoCastEnabled'); }\n\t////////////////////////////\n\t// TODO: fullscreenEnabled / add to player and docs\n\tset fullscreenEnabled(v: boolean) { this.writePlayer('fullscreenEnabled', coerceBooleanProperty(v)); if (this.videoPlayerSkin) this.videoPlayerSkin.builder.fullscreen(v); }\n\tget fullscreenEnabled(): boolean { return this.readPlayer('fullscreenEnabled'); }\n\t////////////////////////////\n\t// TODO: contextMenuDisabled / add to player and docs\n\tset contextMenuDisabled(v: boolean) { this.writePlayer('contextMenuDisabled', !coerceBooleanProperty(v)); if (this.videoPlayerSkin) this.videoPlayerSkin.builder.contextmenu(!v); }\n\tget contextMenuDisabled(): boolean { return !this.readPlayer('contextMenuDisabled'); }\n\t// TODO: playbackRateEnabled / add to player and docs\n\tset playbackRateEnabled(v: boolean) { this.writePlayer('playbackRateEnabled', coerceBooleanProperty(v)); if (this.videoPlayerSkin) this.videoPlayerSkin.builder.playbackRate(v); }\n\tget playbackRateEnabled(): boolean { return this.readPlayer('playbackRateEnabled'); }\n\t////////////////////////////\n\t// qualitySelectionEnabled /\n\tset qualitySelectionEnabled(v: boolean) { this.writePlayer('qualitySelectionEnabled', coerceBooleanProperty(v)); if (this.videoPlayerSkin) this.videoPlayerSkin.builder.quality(v); }\n\tget qualitySelectionEnabled(): boolean { return this.readPlayer('qualitySelectionEnabled'); }\n\t// qualityLabelType /\n\tset qualityLabelType(v: bradmax.player.QualityLabelType) { this.writePlayer('qualityLabelType', v); this.video.create(); }\n\tget qualityLabelType(): bradmax.player.QualityLabelType { return this.readPlayer('qualityLabelType'); }\n\t// qualityInitialBandwidthKbs /\n\tset qualityInitialBandwidthKbs(v: number) { this.writePlayer('qualityInitialBandwidthKbs', coerceNumberProperty(v)); this.video.create(); }\n\tget qualityInitialBandwidthKbs(): number { return this.readPlayer('qualityInitialBandwidthKbs'); }\n\t////////////////////////////\n\t// endSplash /\n\tset endSplash(v: string) { this.writePlayer('endSplash', v); if (this.videoPlayerSkin) this.videoPlayerSkin.builder.endSplash(v); }\n\tget endSplash(): string | null { return this.readPlayer('endSplash'); }\n\t////////////////////////////\n\t// logoFile /\n\tset logoFile(v: string) { this.writePlayer('logoFile', v); this.updateBrand(); }\n\tget logoFile(): string { return this.readPlayer('logoFile'); }\n\t// logoLink /\n\tset logoLink(v: string) { this.writePlayer('logoLink', v); this.updateBrand(); }\n\tget logoLink(): string { return this.readPlayer('logoLink'); }\n\t// logoLinkTarget  /\n\tset logoLinkTarget(v: string) { this.writePlayer('logoLinkTarget', v); this.updateBrand(); }\n\tget logoLinkTarget(): string { return this.readPlayer('logoLinkTarget'); }\n\t// logoAutohide /\n\tset logoAutohide(v: boolean) { this.writePlayer('logoAutohide', coerceBooleanProperty(v)); this.updateBrand(); }\n\tget logoAutohide(): boolean { return this.readPlayer('logoAutohide'); }\n\t// logoXPosition  /\n\tset logoXPosition(v: \"left\" | \"right\") { this.writePlayer('logoXPosition', v); this.updateBrand(); }\n\tget logoXPosition(): \"left\" | \"right\" { return this.readPlayer('logoXPosition'); }\n\t// logoYPosition  /\n\tset logoYPosition(v: \"top\" | \"bottom\") { this.writePlayer('logoYPosition', v); this.updateBrand(); }\n\tget logoYPosition(): \"top\" | \"bottom\" { return this.readPlayer('logoYPosition'); }\n\t// logoVisibleDuringAdPlayback  /\n\tset logoVisibleDuringAdPlayback(v: boolean) { this.writePlayer('logoVisibleDuringAdPlayback', coerceBooleanProperty(v)); this.updateBrand(); }\n\tget logoVisibleDuringAdPlayback(): boolean { return this.readPlayer('logoVisibleDuringAdPlayback'); }\n\tprivate updateBrand() {\n\t\tconst brand: Required<bradmax.player.ConfigurationBrandPartial> = {\n\t\t\tlogoFile: this.logoFile,\n\t\t\tlogoLink: this.logoLink,\n\t\t\tlogoLinkTarget: this.logoLinkTarget,\n\t\t\tlogoAutohide: this.logoAutohide,\n\t\t\tlogoXPosition: this.logoXPosition,\n\t\t\tlogoYPosition: this.logoYPosition,\n\t\t\tlogoVisibleDuringAdPlayback: this.logoVisibleDuringAdPlayback,\n\t\t};\n\t\tif (this.videoPlayerSkin) this.videoPlayerSkin.builder.brand(brand);\n\t}\n\t////////////////\n\t// SKIN\n\tset skin(v: bradmax.player.Skin) {\n\t\tconst activeColor = this.skinCssVarColor;\n\t\tconst oldThemeColor = this.skinThemeDefaultColor;\n\t\tvar userColor = null;\n\t\tif (!this.compareColors(activeColor, oldThemeColor))\n\t\t\tuserColor = activeColor;\n\t\tthis.writePlayer('skin', { ...this.skin, ...v });\n\t\tif (!!userColor)\n\t\t\tthis.skinColor = userColor;\n\t\tthis.updateSkinIconFontVariationSettings();\n\t\tthis.video.create();\n\t}\n\tget skin(): bradmax.player.Skin { return this.readPlayer('skin'); }\n\tget skinName(): bradmax.player.SkinThemeName | null { return this.skin ? this.skin.name : this.DEFAULT.variable.skin.name; }\n\tget skinCssVarColor() {\n\t\tif (this.videoPlayerSkin) return this.videoPlayerSkin.builder.cssMainColor(); return null;\n\t}\n\tget skinThemeDefaultColor() {\n\t\treturn this.RESOURCE.themes[this.skinName].color;\n\t}\n\tset skinColor(v: string) {\n\t\tif (this.compareColors(v, this.skinThemeDefaultColor))\n\t\t\treturn;\n\t\tthis.writeSkinColor(v);\n\t}\n\tget skinColor(): string | null { return this.skin && this.skin.color ? this.skin.color : this.skinCssVarColor; }\n\tresetColorToThemeDefault() { this.writeSkinColor(this.skinThemeDefaultColor); }\n\tprivate writeSkinColor(color: string) {\n\t\tthis.writePlayer('skin', { ...this.skin, color });\n\t\tif (this.videoPlayerSkin) this.videoPlayerSkin.set_color(color);\n\t}\n\t// FONT\n\tset skinFont(font: bradmax.player.SkinFont | null) { this.skin = { ...this.skin, font }; }\n\tget skinFont(): bradmax.player.SkinFont | null { return this.skin && !!this.skin.font ? this.skin.font : this.DEFAULT.variable.skin.font; }\n\tset skinFontFetch(v: boolean) { this.skinFont = { ...this.skinFont, fetch: v }; }\n\tget skinFontFetch(): boolean { return this.skinFont != null && this.skinFont.fetch; }\n\tget skinFontSrcToFetch() { return this.RESOURCE.themes[this.skinName].font.src; }\n\t// ICON\n\tget skinState() { return this.videoPlayerSkin ? this.videoPlayerSkin.state : null; }\n\tget skinStatePrefix(): string { return this.skinState.prefix; }\n\tget skinStateIcoPrefix(): string { return this.videoPlayerSkin.skinIcoPrefix; }\n\tget skinStateIcon(): bradmax.player.PlayerHtmlSkinIconState { return this.skinState.icon; }\n\n\tget skinStateIconType() { return this.skinStateIcon.type; }\n\tget skinStateIconMap() { return this.mapStateIconIdsToArray(this.skinStateIcon); }\n\t//\n\tget skinIconIsFont(): boolean { return !!this.skin && !!this.skin.icon ? this.isSkinFont(this.skin.icon) : false; }\n\tset skinIcon(icon: bradmax.player.SkinFonts | bradmax.player.SkinSvgs) { this.skin = { ...this.skin, icon }; }\n\tget skinIcon(): bradmax.player.SkinFonts | bradmax.player.SkinSvgs { return this.skin.icon; }\n\t// font\n\tget skinIconFont(): bradmax.player.SkinFont | null {\n\t\treturn !!this.skin && !!this.skin.icon && 'font' in this.skin.icon\n\t\t\t? this.skin.icon.font\n\t\t\t: 'font' in this.DEFAULT.variable.skin.icon\n\t\t\t\t? this.DEFAULT.variable.skin.icon.font\n\t\t\t\t: null;\n\t}\n\tset skinIconFontFetch(v: boolean) {\n\t\tif (!this.skinIconFont) return;\n\t\tthis.skinIcon = { font: { ...this.skinIconFont, fetch: v } };\n\t}\n\tget skinIconFontFetch(): boolean { return this.skinIconFont != null && this.skinIconFont.fetch; }\n\tget skinIconFontSrcToFetch() {\n\t\tconst skinDefault = this.RESOURCE.themes[this.skinName];\n\t\treturn this.isSkinFont(skinDefault.icon) ? skinDefault.icon.font.src : null;\n\t}\n\tset skinIconFontVariation(variation: { [name: string]: bradmax.player.SkinFontVariation }) {\n\t\tconst icon = { font: { ...this.skinIconFont, variation: { ...this.skinIconFont.variation, ...variation } } };\n\t\tthis.skin = { ...this.skin, icon };\n\t\tthis.updateSkinIconFontVariationSettings(icon.font.variation);\n\t}\n\tget skinIconFontVariation(): { [name: string]: bradmax.player.SkinFontVariation } | null {\n\t\treturn !!this.skinIconFont && !!this.skinIconFont.variation\n\t\t\t? this.skinIconFont.variation\n\t\t\t: 'font' in this.DEFAULT.variable.skin.icon\n\t\t\t\t? this.DEFAULT.variable.skin.icon.font.variation\n\t\t\t\t: null;\n\t}\n\t/// PLUGINS\n\n\t//TODO: advertisement plugin\n\tset advertisement(v: boolean) {\n\t\tthis.writePlugin('AdvertisementDataProvider', coerceBooleanProperty(v));\n\t\tthis.writePlugin('FreeWheel', coerceBooleanProperty(v));\n\t}\n\tget advertisement(): boolean { return this.readPlugins('AdvertisementDataProvider') && this.readPlugins('FreeWheel'); }\n\n\t// jsapi plugin\n\tset jsapi(v: boolean) { this.writePlugin('JavascriptApi', coerceBooleanProperty(v)); }\n\tget jsapi(): boolean { return this.readPlugins('JavascriptApi'); }\n\n\t// video360 plugin\n\tset video360(v: boolean) { this.writePlugin('Video360', coerceBooleanProperty(v)); }\n\tget video360(): boolean { return this.readPlugins('Video360'); }\n\n\t// keyboard plugin\n\tset keyboard(v: boolean) { this.writePlugin('KeyboardSupport', coerceBooleanProperty(v)); }\n\tget keyboard(): boolean { return this.readPlugins('KeyboardSupport'); }\n\n\t// skinless\n\tset skinless(v: boolean) {\n\t\tthis.writePlugin('HtmlSkin', !coerceBooleanProperty(v));\n\t\tif (!!v)\n\t\t\tthis.videoPlayerSkin.skinElement.classList.add('hide');\n\t\telse\n\t\t\tthis.videoPlayerSkin.skinElement.classList.remove('hide');\n\t}\n\tget skinless(): boolean { return !this.readPlugins('HtmlSkin'); }\n\n\t// quanteec plugin\n\tset quanteec(v: boolean) { if (v) this.writePlugin('QuanteecPlugin', coerceBooleanProperty(v)); else this.deletePlugin('QuanteecPlugin'); this.quanteecStreamboost = v; }\n\tget quanteec(): boolean { return this.readPlugins('QuanteecPlugin'); }\n\n\tset quanteecStreamboost(v: boolean) { if (v) this.writePlugin('QuanteecStreamboost', coerceBooleanProperty(v)); else this.deletePlugin('QuanteecStreamboost'); }\n\tget quanteecStreamboost(): boolean { return this.readPlugins('QuanteecStreamboost'); }\n\n\t// system73\n\tset system73(v: boolean) { if (v) this.writePlugin('System73Plugin', coerceBooleanProperty(v)); else this.deletePlugin('System73Plugin'); }\n\tget system73(): boolean { return this.readPlugins('System73Plugin'); }\n\n\t////////////////\n\tprivate compareColors(firstColor: string, secondColor: string) {\n\t\tconst c1 = this.cp.stringToHsva(firstColor);\n\t\tconst c2 = this.cp.stringToHsva(secondColor);\n\t\treturn c1.h === c2.h && c1.s === c2.s && c1.v === c2.v && c1.a === c2.a;\n\t}\n\t////////////////\n\tprivate mapStateIconIdsToArray(input: { [key: string]: any; }) {\n\t\tlet v: Array<string> = []\n\t\tlet item: any;\n\t\tfor (const key in input) {\n\t\t\tif (key == 'type')\n\t\t\t\tcontinue;\n\t\t\titem = input[key];\n\t\t\tif ('id' in item)\n\t\t\t\tv.push(item.id);\n\t\t\telse\n\t\t\t\tv = v.concat(this.mapStateIconIdsToArray(item));\n\t\t}\n\t\treturn v;\n\t}\n\t////////////////\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/player.builder.data.service.ts","import { ChangeDetectorRef, Directive, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Data } from \"@angular/router\";\nimport { Subscription } from \"rxjs\";\nimport { debounceTime } from \"rxjs/operators\";\nimport { PlayerBuilderRouteData } from \"../../model/player.builder.model\";\nimport { PlayerBuilderDataService } from \"../../service/player.builder.data.service\";\n\n@Directive({ selector: 'abstract-player-builder-data' })\nexport abstract class AbstractPlayerBuilderDataComponent implements OnInit, OnDestroy {\n\n\tpublic SWITCH_LABEL_ENABLED = { on: 'enabled', off: 'disabled' };\n\tpublic SWITCH_LABEL_INJECT_LEFT = { on: 'inject', off: 'inject' };\n\tpublic SWITCH_LABEL_INJECT_RIGHT = { on: 'with player', off: 'manually' };\n\tpublic SWITCH_LABEL_SHOW = { on: 'visible', off: 'hidden' };\n\tpublic SWITCH_LABEL_ON = { on: 'on', off: 'off' };\n\tpublic SWITCH_LABEL_SIZE = 'xsmall';\n\tpublic SWITCH_SIZE = 'small';\n\n\tpublic player: bradmax.player.Player | null;\n\n\tprivate dataSub: Subscription;\n\tprivate routeSub: Subscription;\n\tprivate videoPlayerSub: Subscription;\n\tprivate videoEventSub: Subscription;\n\n\tconstructor(\n\t\tpublic data: PlayerBuilderDataService,\n\t\tprotected cdr: ChangeDetectorRef,\n\t\tprotected route: ActivatedRoute,\n\t) { }\n\n\tngOnInit() {\n\t\tthis.routeSub = this.route.data\n\t\t\t.subscribe(d => this.onRouteDataChange(d));\n\t\tthis.dataSub = this.data.$\n\t\t\t.pipe(debounceTime(100))\n\t\t\t.subscribe(d => this.onUserBuildChange(d));\n\t\tthis.videoPlayerSub = this.data.videoPlayer$\n\t\t\t.pipe(debounceTime(100))\n\t\t\t.subscribe(d => this.onVideoPlayer(d));\n\t\tthis.videoEventSub = this.data.videoEvent$\n\t\t\t.pipe(debounceTime(100))\n\t\t\t.subscribe(d => this.onVideoEvent(d));\n\t}\n\n\tngOnDestroy() {\n\t\tthis.routeSub.unsubscribe();\n\t\tthis.dataSub.unsubscribe();\n\t\tthis.videoPlayerSub.unsubscribe();\n\t\tthis.videoEventSub.unsubscribe();\n\t}\n\n\tprotected onRouteDataChange(d: Data) {\n\t\tif (PlayerBuilderRouteData.seek in d) {\n\t\t\tthis.data.videoSeek(d[PlayerBuilderRouteData.seek]);\n\t\t}\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprotected onUserBuildChange(_: bradmax.builder.ConfJson) { this.cdr.markForCheck(); }\n\n\tprotected onVideoPlayer(player: bradmax.player.Player) {\n\t\tthis.player = player;\n\t\t// console.log('onVideoPlayer', this.player);\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprotected onVideoEvent(event: bradmax.player.Event) {\n\t\tif (!event || !('type' in event)) return;\n\t\tswitch (event.type) {\n\t\t\tcase 'currentTimeChange': break;\n\t\t\tcase 'complete': this.cdr.detectChanges(); break;\n\t\t\tdefault: this.cdr.markForCheck(); break;\n\t\t}\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/component/@core/abstract.player.builder.data.component.ts","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, ViewChild } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { PlayerBuilderRouteData } from \"../../model/player.builder.model\";\nimport { PlayerBuilderVideoService } from \"../../service/player.builder.video.service\";\n\n@Component({\n\tselector: 'player-builder-player',\n\ttemplate: require('./player.builder.player.component.html'),\n\tstyles: [require('./player.builder.player.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderPlayerComponent implements OnInit, AfterViewInit, OnDestroy {\n\n\t@ViewChild('player') player: ElementRef;\n\n\tget height() { return this.elementRef.nativeElement.getBoundingClientRect().height; }\n\n\tconstructor(\n\t\tprivate elementRef: ElementRef,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate video: PlayerBuilderVideoService\n\t) {\n\t}\n\n\tngOnInit() {\n\t\tthis.route.data\n\t\t\t.subscribe(d => {\n\t\t\t\tif (PlayerBuilderRouteData.dataProvider in d) {\n\t\t\t\t\tthis.video.config = {\n\t\t\t\t\t\tdataProvider: d[PlayerBuilderRouteData.dataProvider]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.video.container = this.player.nativeElement;\n\t\tthis.video.create();\n\t}\n\n\tngOnDestroy() {\n\t\tthis.video.destroy();\n\t}\n\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/component/player/player.builder.player.component.ts","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { of } from 'rxjs/observable/of';\nimport { tap } from 'rxjs/operators';\nimport { PlayerListResponse } from '../../../model/api.model';\nimport { PlayerService } from '../../../service/player.service';\nimport { UserService } from '../../../service/user.service';\n\n@Injectable()\nexport class PlayerListDataService {\n\n\tprivate stream = new BehaviorSubject<PlayerListResponse>(null);\n\n\tconstructor(\n\t\tprivate service: PlayerService,\n\t\tprivate user: UserService\n\t) { }\n\n\tfetch(): Observable<PlayerListResponse> {\n\t\tif (this.user.accountId == null)\n\t\t\treturn of(null);\n\t\treturn this.service.listPlayers(this.user.accountId)\n\t\t\t.pipe(\n\t\t\t\ttap(r => this.stream.next(r))\n\t\t\t);\n\t}\n\n\t// updatePlayer(player: PlayerReadResponse) {\n\t// \tconst players = this.stream.getValue();\n\t// \tplayers.results = players.results.map(p => p.id == player.id ? player as PlayerModel : p);\n\t// \tthis.stream.next(players);\n\t// \treturn players;\n\t// }\n\n\tget $(): Observable<PlayerListResponse> {\n\t\treturn this.stream.asObservable();\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/service/player.list.data.service.ts","import { Injectable } from \"@angular/core\";\nimport { TranslationService } from \"angular-l10n\";\nimport { Observable } from \"rxjs\";\nimport { ModalService } from \"../../../../modal/modal.service\";\nimport { PlayerBuilderCanLeaveModalAnswer } from \"../model/player.builder.model\";\n\n@Injectable()\nexport class PlayerBuilderModalService {\n\n\tconstructor(\n\t\tprivate translation: TranslationService,\n\t\tprivate modal: ModalService,\n\t) { }\n\n\taskToPublish() {\n\t\treturn new Observable<boolean>(o => {\n\t\t\tfunction click(a: boolean) {\n\t\t\t\to.next(a);\n\t\t\t\to.complete();\n\t\t\t}\n\t\t\tthis.modal.prompt(this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.TEXT'), [{\n\t\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.YES'),\n\t\t\t\tfa: 'paper-plane', close: true, click: () => click(true)\n\t\t\t}, {\n\t\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.NO'),\n\t\t\t\tfa: 'ban', close: true, click: () => click(false)\n\t\t\t}]);\n\t\t\treturn {\n\t\t\t\tunsubscribe: () => {\n\t\t\t\t\tthis.modal.close();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\taskToSave() {\n\t\treturn new Observable<PlayerBuilderCanLeaveModalAnswer>(o => {\n\t\t\tfunction click(a: PlayerBuilderCanLeaveModalAnswer) {\n\t\t\t\to.next(a);\n\t\t\t\to.complete();\n\t\t\t}\n\t\t\tthis.modal.prompt(this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.TEXT'), [\n\t\t\t\t{\n\t\t\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.SAVE'),\n\t\t\t\t\tfa: 'save', close: true,\n\t\t\t\t\tclick: () => click(PlayerBuilderCanLeaveModalAnswer.save)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.DONT_SAVE'),\n\t\t\t\t\tfa: 'trash', close: true,\n\t\t\t\t\tclick: () => click(PlayerBuilderCanLeaveModalAnswer.reset)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.CANCEL'),\n\t\t\t\t\tfa: 'ban', close: true,\n\t\t\t\t\tclick: () => o.next(PlayerBuilderCanLeaveModalAnswer.abort)\n\t\t\t\t}\n\t\t\t]);\n\t\t\treturn {\n\t\t\t\tunsubscribe: () => {\n\t\t\t\t\tthis.modal.close();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/player.builder.modal.service.ts","import { DOCUMENT } from \"@angular/common\";\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, HostListener, Inject, OnDestroy, OnInit, ViewChild } from \"@angular/core\";\nimport { FlashMessagesService } from \"angular2-flash-messages\";\nimport { Observable, Subscription } from \"rxjs\";\nimport { of } from \"rxjs/observable/of\";\nimport { map, switchMap, tap } from \"rxjs/operators\";\nimport { isPlayerReadResponseV2 } from \"../../../../../../model/api.model\";\nimport { PlayerService } from \"../../../../../../service/player.service\";\nimport { SidebarService } from \"../../../../../../service/sidebar.service\";\nimport { ViewService } from \"../../../../../../service/view.service\";\nimport { DateUtil } from \"../../../../../../util/date.util\";\nimport { PlayerRoute } from \"../../../../model/player.model\";\nimport { PlayerListDataService } from \"../../../../service/player.list.data.service\";\nimport { PlayerBuilderCanLeaveModalAnswer, PlayerBuilderRoute, PlayerBuilderRouteGroup } from \"../../model/player.builder.model\";\nimport { PlayerBuilderDataService } from \"../../service/player.builder.data.service\";\nimport { PlayerBuilderModalService } from \"../../service/player.builder.modal.service\";\nimport { PlayerBuilderPlayerComponent } from \"../player/player.builder.player.component\";\n\n@Component({\n\tselector: 'player-builder-view',\n\ttemplate: require('./player.builder.view.component.html'),\n\tstyles: [require('./player.builder.view.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderViewComponent implements OnInit, OnDestroy {\n\n\tTABS = [\n\t\t{ route: PlayerBuilderRoute.general, text: 'general', disabled: false, group: [PlayerBuilderRouteGroup.core], },\n\t\t{ route: PlayerBuilderRoute.playback, text: 'playback', disabled: false, group: [PlayerBuilderRouteGroup.video], },\n\t\t{ route: PlayerBuilderRoute.theme, text: 'theme', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n\t\t{ route: PlayerBuilderRoute.icons, text: 'icons', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n\t\t{ route: PlayerBuilderRoute.features, text: 'features', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n\t\t{ route: PlayerBuilderRoute.branding, text: 'branding', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n\t\t{ route: PlayerBuilderRoute.endsplash, text: 'end splash', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n\t\t// { route: PlayerBuilderRoute.editor, text: 'editor', disabled: false, group: [PlayerBuilderRouteGroup.skin], },\n\t];\n\n\tSUCCESS_FLASH_CONFIG = { cssClass: 'alert-success', timeout: 2000 };\n\tWARN_FLASH_CONFIG = { cssClass: 'alert-warning', timeout: 2000 };\n\n\tRATIO_CLASSES = [\n\t\t{ value: 'ratio21x9', label: '21:9' },\n\t\t{ value: 'ratio16x9', label: '16:9' },\n\t\t{ value: 'ratio4x3', label: '4:3' },\n\t\t{ value: 'ratio3x2', label: '3:2' },\n\t\t{ value: 'ratio2x1', label: '2:1' },\n\t\t{ value: 'ratio1x1', label: '1:1' },\n\t];\n\n\t@HostBinding('class.with-header')\n\twithHeader = true;\n\n\tpreviewHeight: string | number = null;\n\tpreviewCss: string = null;\n\n\t@ViewChild(PlayerBuilderPlayerComponent) private previewComponent: PlayerBuilderPlayerComponent;\n\tprivate dataSub: Subscription;\n\tprivate playerDataSub: Subscription;\n\tprivate saveSub: Subscription;\n\n\tconstructor(\n\t\tpublic data: PlayerBuilderDataService,\n\t\t@Inject(DOCUMENT) private doc: Document,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate api: PlayerService,\n\t\tprivate list: PlayerListDataService,\n\t\tprivate view: ViewService,\n\t\tprivate modal: PlayerBuilderModalService,\n\t\tprivate flash: FlashMessagesService,\n\t\tprivate sidebar: SidebarService,\n\t) {\n\t\tthis.withHeader = !this.view.checkIfAppInIframe();\n\t}\n\n\tngOnInit() {\n\t\tthis.data.init();\n\t\tthis.doc.body.classList.add('no-overflow');\n\t\tthis.dataSub = this.data.$\n\t\t\t.subscribe(d => this.onDataChange(d));\n\t\tthis.playerDataSub = this.api.readPlayer$\n\t\t\t.pipe(\n\t\t\t\ttap(data => {\n\t\t\t\t\tif (isPlayerReadResponseV2(data))\n\t\t\t\t\t\tthis.data.parseResponseData(data);\n\t\t\t\t}),\n\t\t\t\tswitchMap(() => this.list.$)\n\t\t\t)\n\t\t\t.subscribe(players => {\n\t\t\t\tthis.sidebar.showPlayersMenu(players, this.data.buildId, PlayerRoute.builder);\n\t\t\t});\n\t}\n\n\tngOnDestroy() {\n\t\tthis.data.destroy();\n\t\tthis.dataSub.unsubscribe();\n\t\tthis.playerDataSub.unsubscribe();\n\t\tif (!!this.saveSub && !this.saveSub.closed) this.saveSub.unsubscribe();\n\t\tthis.doc.body.classList.remove('no-overflow');\n\t}\n\n\tformatDate(uts: number): string { return DateUtil.unixToDateString(uts); }\n\tformatTime(uts: number): string { return DateUtil.unixToTimeString(uts); }\n\n\tcanLeave$(): Observable<boolean> {\n\t\tif (!this.data.isDirty)\n\t\t\treturn of(true);\n\t\tthis.view.spinner(false);\n\t\treturn this.modal.askToSave()\n\t\t\t.pipe(\n\t\t\t\tswitchMap(answer => {\n\t\t\t\t\tswitch (answer) {\n\t\t\t\t\t\tcase PlayerBuilderCanLeaveModalAnswer.save:\n\t\t\t\t\t\t\treturn this.save$();\n\t\t\t\t\t\tcase PlayerBuilderCanLeaveModalAnswer.reset:\n\t\t\t\t\t\t\tthis.data.reset();\n\t\t\t\t\t\t\treturn of(true);\n\t\t\t\t\t\tcase PlayerBuilderCanLeaveModalAnswer.abort:\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn of(false);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tclickSave() {\n\t\tif (!!this.saveSub && !this.saveSub.closed)\n\t\t\tthis.saveSub.unsubscribe();\n\t\tthis.saveSub = this.save$()\n\t\t\t.subscribe(() => this.cdr.markForCheck());\n\t}\n\n\tprivate save$() {\n\t\tthis.view.spinner(true);\n\t\treturn this.data.save$()\n\t\t\t.pipe(\n\t\t\t\tswitchMap(saved => {\n\t\t\t\t\tthis.view.spinner(false);\n\t\t\t\t\tif (!!saved) {\n\t\t\t\t\t\tthis.flash.show(('build saved'), this.SUCCESS_FLASH_CONFIG);\n\t\t\t\t\t\treturn this.modal.askToPublish()\n\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\tswitchMap(publish => {\n\t\t\t\t\t\t\t\t\tif (publish)\n\t\t\t\t\t\t\t\t\t\treturn this.publish$()\n\t\t\t\t\t\t\t\t\t\t\t.pipe(switchMap(() => {\n\t\t\t\t\t\t\t\t\t\t\t\tthis.view.spinner(true);\n\t\t\t\t\t\t\t\t\t\t\t\treturn this.list.fetch();\n\t\t\t\t\t\t\t\t\t\t\t}));\n\t\t\t\t\t\t\t\t\tthis.view.spinner(true);\n\t\t\t\t\t\t\t\t\treturn this.list.fetch();\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tmap(list => {\n\t\t\t\t\t\t\t\t\tthis.sidebar.showPlayersMenu(list, this.data.buildId, PlayerRoute.builder);\n\t\t\t\t\t\t\t\t\tthis.view.spinner(false);\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\tthis.flash.show(('build fail to save'), this.WARN_FLASH_CONFIG);\n\t\t\t\t\treturn of(false);\n\t\t\t\t}),\n\t\t\t\tswitchMap(v => this.api.readPlayer(this.data.accountId, this.data.buildId).pipe(map(_ => v))),\n\t\t\t);\n\t}\n\n\tprivate publish$() {\n\t\tthis.view.spinner(true);\n\t\treturn this.data.publish$()\n\t\t\t.pipe(\n\t\t\t\tswitchMap(published => {\n\t\t\t\t\tthis.view.spinner(false);\n\t\t\t\t\tif (published) {\n\t\t\t\t\t\tthis.flash.show(('build published'), this.SUCCESS_FLASH_CONFIG);\n\t\t\t\t\t\treturn of(true);\n\t\t\t\t\t}\n\t\t\t\t\tthis.flash.show(('build fail to publish'), this.WARN_FLASH_CONFIG);\n\t\t\t\t\treturn of(false);\n\t\t\t\t})\n\t\t\t)\n\t}\n\n\tprivate onDataChange(cnf: bradmax.builder.ConfJson) {\n\t\tconst skinDisabled = !!cnf && !!cnf.plugin && 'HtmlSkin' in cnf.plugin ? !cnf.plugin.HtmlSkin : false;\n\t\tfor (let index = 0; index < this.TABS.length; index++) {\n\t\t\tif (this.TABS[index].group.indexOf(PlayerBuilderRouteGroup.skin) > -1) {\n\t\t\t\tif (this.TABS[index].disabled != skinDisabled) {\n\t\t\t\t\tthis.TABS[index].disabled = skinDisabled;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t///////////\n\tprivate previewResizeActive = false;\n\tprivate previewResizeY = NaN;\n\tprivate previewResizeH = 0;\n\t//\n\t@HostListener('mousemove', ['$event'])\n\t@HostListener('mouseup', ['$event'])\n\thandlePreviewResize(event: PointerEvent) {\n\t\tswitch (event.type) {\n\t\t\tcase 'mousedown':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.previewResizeActive = true;\n\t\t\t\tthis.previewResizeY = event.clientY;\n\t\t\t\tthis.previewResizeH = this.previewComponent.height;\n\t\t\t\tbreak;\n\t\t\tcase 'mousemove':\n\t\t\t\tif (!this.previewResizeActive)\n\t\t\t\t\treturn;\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.previewHeight = `${this.previewResizeH + (event.clientY - this.previewResizeY)}px`;\n\t\t\t\tthis.previewCss = null;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\tbreak;\n\t\t\tcase 'mouseup':\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.previewResizeActive = false;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t};\n\t}\n\n\thandlePreviewAspect(aspect: string) {\n\t\tthis.previewHeight = null;\n\t\tthis.previewCss = `${aspect}`;\n\t\tthis.cdr.markForCheck();\n\t}\n\t///////////\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/component/view/player.builder.view.component.ts","import { InjectionToken } from \"@angular/core\";\n\nexport const PLAYER_JS_SRC = new InjectionToken<string>('PLAYER_JS_SRC');\nexport const PLAYER_CDN_URL = new InjectionToken<string>('PLAYER_CDN_URL');\nexport const PLAYER_DOCS_URL = new InjectionToken<string>('PLAYER_DOCS_URL');\nexport const PLAYER_DOCS_LINKS_URL = new InjectionToken<string>('PLAYER_DOCS_LINKS_URL');\nexport const PLAYER_SKIN_MEDIA_URL = new InjectionToken<string>('PLAYER_SKIN_MEDIA_URL');\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/model/player.builder.tokens.ts","import { Injectable } from \"@angular/core\";\n\nexport interface PlayerBuilderDocs {\n\t[key: string]: string;\n}\n\n@Injectable()\nexport class PlayerBuilderDocsService {\n\tLINKS: PlayerBuilderDocs = {};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/player.builder.docs.service.ts","import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { PLAYER_DOCS_URL } from '../../../../model/player.builder.tokens';\nimport { PlayerBuilderDocsService } from '../../../../service/player.builder.docs.service';\n\n@Component({\n\tselector: 'player-builder-docs',\n\ttemplate: require('./player.builder.docs.component.html'),\n\tstyles: [require('./player.builder.docs.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderDocsComponent extends Localization {\n\n\t@Input() key: string;\n\n\tget link() {\n\t\tif (this.key in this.docs.LINKS)\n\t\t\treturn this.docs.LINKS[this.key];\n\t\treturn this.key;\n\t}\n\n\tconstructor(\n\t\t@Inject(PLAYER_DOCS_URL) public BASE: string,\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\t// private cdr: ChangeDetectorRef,\n\t\tpublic docs: PlayerBuilderDocsService,\n\t) {\n\t\tsuper(locale, translation);\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/@common/docs/component/player.builder.docs.component.ts","\n\n\n// const LOCAL_PROVIDERS = [];\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { LocalizationModule } from \"angular-l10n\";\nimport { PlayerBuilderDocsComponent } from \"./component/player.builder.docs.component\";\n\nconst COMP: any = [\n\tPlayerBuilderDocsComponent\n];\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t],\n\tdeclarations: [\n\t\t...COMP\n\t],\n\tentryComponents: COMP,\n\texports: COMP\n})\nexport class PlayerBuilderDocsModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/@common/docs/player.builder.docs.module.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { TranslationService } from \"angular-l10n\";\nimport { ModalService } from \"../../../../../../modal/modal.service\";\nimport { AbstractPlayerBuilderDataComponent } from \"../../../component/@core/abstract.player.builder.data.component\";\nimport { PlayerBuilderDataService } from \"../../../service/player.builder.data.service\";\n\n@Component({\n\tselector: 'player-builder-branding',\n\ttemplate: require('./player.builder.branding.component.html'),\n\tstyles: [\n\t\trequire('../../../scss/player.builder.form.group.scss'),\n\t\trequire('./player.builder.branding.component.scss')\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderBrandingComponent extends AbstractPlayerBuilderDataComponent {\n\n\tconstructor(\n\t\tpublic data: PlayerBuilderDataService,\n\t\tprotected cdr: ChangeDetectorRef,\n\t\tprotected route: ActivatedRoute,\n\t\tprivate translation: TranslationService,\n\t\tpublic modal: ModalService,\n\t) {\n\t\tsuper(data, cdr, route);\n\t}\n\n\tonTooBigLogo(data: any) {\n\t\t//todo: change modal type from prompt to info\n\t\tthis.modal.prompt(this.translation.translate('PLAYER.CONFIG.TOO_BIG_LOGO', {\n\t\t\tlimitWidth: data.maxWidth,\n\t\t\tlimitHeight: data.maxHeight,\n\t\t\tlimitFileSize: data.maxFileSize\n\t\t}), []);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/branding/component/player.builder.branding.component.ts","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { FormComponentsModule } from \"../../../../../form/form.module\";\nimport { PlayerBuilderDocsModule } from \"../@common/docs/player.builder.docs.module\";\nimport { PlayerBuilderBrandingComponent } from \"./component/player.builder.branding.component\";\n\nconst PlayerBuilderBrandingRoutes: Routes = [\n\t{ path: '', component: PlayerBuilderBrandingComponent, },\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\n\nconst COMP = PlayerBuilderBrandingRoutes.filter(r => !!r.component).map(r => r.component);\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerBuilderBrandingRoutes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPlayerBuilderDocsModule,\n\t],\n\tdeclarations: [\n\t\t...COMP\n\t],\n\tentryComponents: COMP,\n})\nexport class PlayerBuilderBrandingModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/branding/player.builder.branding.module.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { PlayerRoute } from \"../../../../../model/player.model\";\nimport { AbstractPlayerBuilderDataComponent } from \"../../../component/@core/abstract.player.builder.data.component\";\nimport { PlayerBuilderDataService } from \"../../../service/player.builder.data.service\";\nimport { UrlService } from '../../../../../../../service/url.service';\n\n@Component({\n\tselector: 'player-builder-end-splash',\n\ttemplate: require('./player.builder.end-splash.component.html'),\n\tstyles: [\n\t\trequire('../../../scss/player.builder.form.group.scss'),\n\t\t// require('./player.builder.skin.end-splash.component.scss')\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderEndSplashComponent extends AbstractPlayerBuilderDataComponent {\n\n\tENDSPLASHED = ['standard', 'countdown', 'tiles'];\n\n\tconstructor(\n\t\tpublic data: PlayerBuilderDataService,\n\t\tprotected cdr: ChangeDetectorRef,\n\t\tprotected route: ActivatedRoute,\n\t\tprotected sanitizer: DomSanitizer,\n\t\tprivate urlService: UrlService,\n\t) {\n\t\tsuper(data, cdr, route);\n\t}\n\n\tformatImageSrc(endsplash: string) {\n\t\treturn this.sanitizer.bypassSecurityTrustUrl(this.urlService.file(`img/builder/screenshots/end/${this.data.skinName}.${endsplash}.jpg`));\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/end-splash/component/player.builder.end-splash.component.ts","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { FormComponentsModule } from \"../../../../../form/form.module\";\nimport { PlayerBuilderDocsModule } from \"../@common/docs/player.builder.docs.module\";\nimport { PlayerBuilderEndSplashComponent } from \"./component/player.builder.end-splash.component\";\n\nconst PlayerBuilderEndSplashRoutes: Routes = [\n\t{ path: '', component: PlayerBuilderEndSplashComponent, },\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nconst COMP = PlayerBuilderEndSplashRoutes.filter(r => !!r.component).map(r => r.component);\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerBuilderEndSplashRoutes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPlayerBuilderDocsModule,\n\t],\n\tdeclarations: [\n\t\t...COMP\n\t],\n\tentryComponents: COMP,\n})\nexport class PlayerBuilderEndSplashModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/end-splash/player.builder.end-splash.module.ts","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\nimport { AbstractPlayerBuilderDataComponent } from \"../../../component/@core/abstract.player.builder.data.component\";\n\n@Component({\n\tselector: 'player-builder-features-view',\n\ttemplate: require('./player.builder.features.component.html'),\n\tstyles: [\n\t\trequire('../../../scss/player.builder.form.group.scss'),\n\t\t// require('./player.builder.features.component.scss')\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderFeaturesComponent extends AbstractPlayerBuilderDataComponent { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/features/component/player.builder.features.component.ts","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { FormComponentsModule } from \"../../../../../form/form.module\";\nimport { PlayerBuilderDocsModule } from \"../@common/docs/player.builder.docs.module\";\nimport { PlayerBuilderFeaturesComponent } from \"./component/player.builder.features.component\";\n\nconst PlayerBuilderGeneralRoutes: Routes = [\n\t{\t\tpath: '',\t\tcomponent:PlayerBuilderFeaturesComponent,\t},\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nconst COMP = PlayerBuilderGeneralRoutes.filter(r => !!r.component).map(r => r.component);\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerBuilderGeneralRoutes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPlayerBuilderDocsModule,\n\t],\n\tdeclarations: [\n\t\t...COMP\n\t],\n\tentryComponents: COMP,\n})\nexport class PlayerBuilderFeaturesModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/features/player.builder.features.module.ts","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'localeName', pure: true })\n\nexport class PlayerBuilderLocalesNamePipe implements PipeTransform {\n\n\ttransform(code: string): string {\n\t\tswitch (code) {\n\t\t\tcase 'en': return 'english';\n\t\t\tcase 'da': return 'danish';\n\t\t\tcase 'fi': return 'finnish';\n\t\t\tcase 'pl': return 'polish';\n\t\t\tcase 'no': return 'norwegian';\n\t\t\tcase 'sv': return 'swedish';\n\t\t\tdefault:\n\t\t\t\treturn code;\n\t\t};\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/@common/locales/pipe/player.builder.locales.name.pipe.ts","import { NgModule } from \"@angular/core\";\nimport { PlayerBuilderLocalesNamePipe } from \"./player.builder.locales.name.pipe\";\n\nconst PIPES = [\n\tPlayerBuilderLocalesNamePipe,\n];\n\n@NgModule({\n\tdeclarations: [...PIPES],\n\texports: [...PIPES],\n})\nexport class PlayerBuilderLocalesPipeModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/@common/locales/pipe/player.builder.locales.pipe.module.ts","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\nimport { AbstractPlayerBuilderDataComponent } from \"../../../component/@core/abstract.player.builder.data.component\";\n\n@Component({\n\tselector: 'player-builder-general',\n\ttemplate: require('./player.builder.general.component.html'),\n\tstyles: [\n\t\trequire('../../../scss/player.builder.form.group.scss'),\n\t\t// require('./player.builder.general.component.scss')\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderGeneralComponent extends AbstractPlayerBuilderDataComponent { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/general/component/player.builder.general.component.ts","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { FormComponentsModule } from \"../../../../../form/form.module\";\nimport { PlayerBuilderDocsModule } from \"../@common/docs/player.builder.docs.module\";\nimport { PlayerBuilderLocalesPipeModule } from \"../@common/locales/pipe/player.builder.locales.pipe.module\";\nimport { PlayerBuilderGeneralComponent } from \"./component/player.builder.general.component\";\n\nconst PlayerBuilderGeneralRoutes: Routes = [\n\t{ path: '', component: PlayerBuilderGeneralComponent, },\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nconst COMP = PlayerBuilderGeneralRoutes.filter(r => !!r.component).map(r => r.component);\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerBuilderGeneralRoutes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPlayerBuilderDocsModule,\n\t\t//\n\t\tPlayerBuilderLocalesPipeModule,\n\t],\n\tdeclarations: [\n\t\t...COMP\n\t],\n\tentryComponents: COMP,\n\texports: COMP\n})\nexport class PlayerBuilderGeneralModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/general/player.builder.general.module.ts","import { DOCUMENT } from \"@angular/common\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { FlashMessagesService } from \"angular2-flash-messages\";\nimport { Observable } from \"rxjs\";\n\n@Injectable()\nexport class ClipboardService {\n\n\tprivate SUCCESS_FLASH_CONFIG = { cssClass: 'alert-success', timeout: 2000 };\n\tprivate WARN_FLASH_CONFIG = { cssClass: 'alert-warning', timeout: 2000 };\n\n\tconstructor(\n\t\t@Inject(DOCUMENT) private doc: Document,\n\t\tprivate flash: FlashMessagesService,\n\t) { }\n\n\tcopy(textOrTextarea: any): Observable<boolean> {\n\t\treturn new Observable(o => {\n\t\t\tconst asText = typeof textOrTextarea === 'string';\n\t\t\tconst asTextArea = textOrTextarea instanceof HTMLTextAreaElement;\n\t\t\t// console.debug(`copy.asText`, asText);\n\t\t\t// console.debug(`copy.asTextArea`, asTextArea);\n\t\t\tlet textArea: HTMLTextAreaElement;\n\t\t\tif (asText) {\n\t\t\t\ttextArea = this.doc.createElement(\"textarea\");\n\t\t\t\ttextArea.style.position = 'absolute';\n\t\t\t\ttextArea.style.zIndex = '0';\n\t\t\t\ttextArea.value = textOrTextarea;\n\t\t\t\tthis.doc.body.appendChild(textArea);\n\t\t\t}\n\t\t\tif (asTextArea) {\n\t\t\t\ttextArea = textOrTextarea;\n\t\t\t}\n\t\t\tlet success = false;\n\t\t\tif (!!textArea) {\n\t\t\t\ttextArea.focus();\n\t\t\t\ttextArea.select();\n\t\t\t\ttry { success = this.doc.execCommand('copy'); }\n\t\t\t\tcatch (err) { console.error('Oops, unable to copy', err); }\n\t\t\t}\n\t\t\tif (success)\n\t\t\t\tthis.flash.show('Copied to clipboard', this.SUCCESS_FLASH_CONFIG);\n\t\t\telse\n\t\t\t\tthis.flash.show('Oops, unable to copy', this.WARN_FLASH_CONFIG);\n\n\t\t\tif (asText) {\n\t\t\t\tthis.doc.body.removeChild(textArea);\n\t\t\t}\n\t\t\to.next(success);\n\t\t\to.complete();\n\t\t\treturn function copyToClipboardUnsubscribe() {\n\t\t\t\t// console.debug(this);\n\t\t\t}\n\t\t});\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/clipboard/clipboard.service.ts","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'charCode' })\n\nexport class CharCodePipe implements PipeTransform {\n\ttransform(code: string): string {\n\t\treturn String.fromCharCode(parseInt(code, 16));\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/charCode/char.code.pipe.ts","import { NgModule } from \"@angular/core\";\nimport { CharCodePipe } from \"./char.code.pipe\";\n\n@NgModule({\n\tdeclarations: [CharCodePipe],\n\texports: [CharCodePipe],\n})\nexport class CharCodePipeModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/charCode/char.code.module.ts","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'keys' })\n\nexport class ObjectKeysPipe implements PipeTransform {\n\ttransform<T>(value: T): (keyof T | string)[] {\n\t\treturn Object.keys(value);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/objectKeys/object.keys.pipe.ts","import { NgModule } from \"@angular/core\";\nimport { ObjectKeysPipe } from \"./object.keys.pipe\";\n\n@NgModule({\n\tdeclarations: [ObjectKeysPipe],\n\texports: [ObjectKeysPipe],\n})\nexport class ObjectKeysPipeModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/objectKeys/object.keys.module.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, HostBinding, Input, Output } from \"@angular/core\";\n\n@Component({\n\tselector: 'player-builder-icon-select',\n\ttemplate: require('./player.builder.icon.select.component.html'),\n\tstyles: [\n\t\trequire('../../../../../scss/player.builder.form.group.scss'),\n\t\t// require('./player.builder.fonts.component.scss')\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderIconSelectComponent {\n\n\t@Input()\n\tset OPTIONS(v: (bradmax.builder.ResourceFont | bradmax.builder.ResourceSvgIconset)[]) {\n\t\tthis._OPTIONS = v;\n\t\tthis.cdr.markForCheck();\n\t}\n\tget OPTIONS(): (bradmax.builder.ResourceFont | bradmax.builder.ResourceSvgIconset)[] { return this._OPTIONS; }\n\n\t@Input()\n\tset label(v: string) { this._label = v; this.cdr.markForCheck(); }\n\tget label(): string { return this._label; }\n\n\t@Input()\n\tset disabled(v: boolean) { this._disabled = v; this.cdr.markForCheck(); }\n\tget disabled(): boolean { return this._disabled; }\n\n\t@Input()\n\tset value(v: bradmax.player.SkinFonts | bradmax.player.SkinSvgs) {\n\t\tthis._value = v;\n\t\tthis.cdr.markForCheck();\n\t}\n\tget value(): bradmax.player.SkinFonts | bradmax.player.SkinSvgs { return this._value; }\n\n\tget valueId(): string {\n\t\tif (this._value && 'font' in this._value)\n\t\t\treturn this._value.font.id;\n\t\tif (this._value && 'svg' in this._value)\n\t\t\treturn this._value.svg.id;\n\t\treturn null;\n\t}\n\tget isValueFont(): boolean { return 'font' in this._value; }\n\tget isValueSvg(): boolean { return 'svg' in this._value; }\n\n\t@Output() valueChange = new EventEmitter<bradmax.player.SkinFonts | bradmax.player.SkinSvgs>();\n\n\t@HostBinding('class.disabled')\n\tprivate _disabled: boolean;\n\tprivate _value: bradmax.player.SkinFonts | bradmax.player.SkinSvgs;\n\tprivate _label: string = \"\";\n\tprivate _OPTIONS: (bradmax.builder.ResourceFont | bradmax.builder.ResourceSvgIconset)[] = [];\n\n\tconstructor(\n\t\tprivate cdr: ChangeDetectorRef,\n\t) { }\n\n\tformatText(fontOrIcon: bradmax.builder.ResourceFont | bradmax.builder.ResourceSvgIconset) {\n\t\tif ('family' in fontOrIcon)\n\t\t\treturn `font | ${fontOrIcon.name}`;\n\t\tif ('iconset' in fontOrIcon)\n\t\t\treturn ` svg | ${fontOrIcon.name}`;\n\t\treturn `${fontOrIcon.name}`;\n\t}\n\n\temitOptionById(id: string) {\n\t\tconst item = this.optionById(id);\n\t\tif ('family' in item)\n\t\t\tthis.valueChange.emit({ font: item })\n\t\tif ('iconset' in item)\n\t\t\tthis.valueChange.emit({ svg: item })\n\t}\n\n\tprivate optionById(id: string) {\n\t\treturn this.OPTIONS.find(f => f.id === id);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/@common/icon/component/select/player.builder.icon.select.component.ts","import { DOCUMENT } from '@angular/common';\nimport { Inject, Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'iconSvgHref' })\n\nexport class PlayerBuilderIconSvgHrefPipe implements PipeTransform {\n\n\tconstructor(\n\t\t@Inject(DOCUMENT) private doc: Document,\n\t) { }\n\n\ttransform(value: string, skinStateIcoPrefix: string): string {\n\t\tif (!!this.doc.location.hash && this.doc.location.hash.length > 0) {\n\t\t\treturn this.doc.location.href.split(this.doc.location.hash).join(`#${skinStateIcoPrefix}${value}`);\n\t\t}\n\t\treturn `${this.doc.location.href}#${skinStateIcoPrefix}${value}`;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/@common/icon/pipe/player.builder.icon.svg.href.pipe.ts","import { DOCUMENT } from '@angular/common';\nimport { Inject, Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'iconFontLink' })\n\nexport class PlayerBuilderIconFontLinkPipe implements PipeTransform {\n\n\tconstructor(\n\t\t@Inject(DOCUMENT) private doc: Document,\n\t) { }\n\n\ttransform(href?: string, version?: string): string {\n\t\tif (!!href && !!version)\n\t\t\treturn `<link href=\"${href.split('VERSION').join(version)}\" rel=\"stylesheet\">`\n\t\treturn `<link href=\"${href}\" rel=\"stylesheet\">`\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/@common/icon/pipe/player.builder.icon.font.link.pipe.ts","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { PlayerBuilderIconSelectComponent } from \"./component/select/player.builder.icon.select.component\";\nimport { PlayerBuilderIconSvgHrefPipe } from \"./pipe/player.builder.icon.svg.href.pipe\";\nimport { PlayerBuilderIconFontLinkPipe } from \"./pipe/player.builder.icon.font.link.pipe\";\n\nconst COMP: any = [\n\tPlayerBuilderIconSelectComponent,\n];\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t],\n\tdeclarations: [\n\t\tPlayerBuilderIconSvgHrefPipe,\n\t\tPlayerBuilderIconFontLinkPipe,\n\t\t...COMP\n\t],\n\tentryComponents: COMP,\n\texports: [\n\t\tPlayerBuilderIconSvgHrefPipe,\n\t\tPlayerBuilderIconFontLinkPipe,\n\t\tCOMP,\n\t]\n})\nexport class PlayerBuilderIconModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/@common/icon/player.builder.icon.module.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { ClipboardService } from \"../../../../../../clipboard/clipboard.service\";\nimport { AbstractPlayerBuilderDataComponent } from \"../../../component/@core/abstract.player.builder.data.component\";\nimport { PlayerBuilderDataService } from \"../../../service/player.builder.data.service\";\n\n@Component({\n\tselector: 'player-builder-icons',\n\ttemplate: require('./player.builder.icons.component.html'),\n\tstyles: [\n\t\trequire('../../../scss/player.builder.form.group.scss'),\n\t\t// require('./player.builder.icons.component.scss')\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderIconsComponent extends AbstractPlayerBuilderDataComponent implements OnInit, OnDestroy {\n\n\tOPTIONS: (bradmax.builder.ResourceFont | bradmax.builder.ResourceSvgIconset)[] = this.data.RESOURCE.icon\n\t\t? (this.data.RESOURCE.icon.fonts as (bradmax.builder.ResourceFont | bradmax.builder.ResourceSvgIconset)[]).concat(this.data.RESOURCE.icon.svgs)\n\t\t: [];\n\n\tget activeIconFont() { return this.data.skinIconFont ? this.OPTIONS.find(f => f.id === this.data.skinIconFont.id) : null; }\n\tget activeIconFontForm() { return 'form' in this.activeIconFont ? this.activeIconFont.form : null; }\n\n\tconstructor(\n\t\tpublic data: PlayerBuilderDataService,\n\t\tprotected cdr: ChangeDetectorRef,\n\t\tprotected route: ActivatedRoute,\n\t\tprivate clipboard: ClipboardService,\n\t) {\n\t\tsuper(data, cdr, route);\n\t}\n\n\temitVariation(key: string, value: bradmax.player.SkinFontVariation) {\n\t\tthis.data.skinIconFontVariation = { ...this.data.skinIconFontVariation, [key]: value };\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tcopyLink(element: HTMLTextAreaElement) { this.clipboard.copy(element).subscribe(); }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/icons/component/player.builder.icons.component.ts","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { ClipboardService } from \"../../../../../clipboard/clipboard.service\";\nimport { ColorpickerModule } from \"../../../../../colorpicker/colorpicker.module\";\nimport { FormComponentsModule } from \"../../../../../form/form.module\";\nimport { CharCodePipeModule } from \"../../../../../pipe/charCode/char.code.module\";\nimport { ObjectKeysPipeModule } from \"../../../../../pipe/objectKeys/object.keys.module\";\nimport { PlayerBuilderDocsModule } from \"../@common/docs/player.builder.docs.module\";\nimport { PlayerBuilderIconModule } from \"../@common/icon/player.builder.icon.module\";\nimport { PlayerBuilderIconsComponent } from \"./component/player.builder.icons.component\";\n\nconst PlayerBuilderThemeRoutes: Routes = [\n\t{ path: '', component: PlayerBuilderIconsComponent, },\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nconst COMP = PlayerBuilderThemeRoutes.filter(r => !!r.component).map(r => r.component);\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerBuilderThemeRoutes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tColorpickerModule,\n\t\tPlayerBuilderDocsModule,\n\t\tPlayerBuilderIconModule,\n\t\tObjectKeysPipeModule,\n\t\tCharCodePipeModule,\n\t],\n\tproviders: [ClipboardService],\n\tdeclarations: [\n\t\t...COMP\n\t],\n\tentryComponents: COMP,\n})\nexport class PlayerBuilderIconsModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/icons/player.builder.icons.module.ts","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\nimport { AbstractPlayerBuilderDataComponent } from \"../../../component/@core/abstract.player.builder.data.component\";\n\n@Component({\n\tselector: 'player-builder-playback',\n\ttemplate: require('./player.builder.playback.component.html'),\n\tstyles: [\n\t\trequire('../../../scss/player.builder.form.group.scss'),\n\t\t// require('./player.builder.playback.component.scss')\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderPlaybackComponent extends AbstractPlayerBuilderDataComponent { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/playback/component/player.builder.playback.component.ts","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { FormComponentsModule } from \"../../../../../form/form.module\";\nimport { PlayerBuilderDocsModule } from \"../@common/docs/player.builder.docs.module\";\nimport { PlayerBuilderPlaybackComponent } from \"./component/player.builder.playback.component\";\n\nconst PlayerBuilderPlaybackRoutes: Routes = [\n\t{ path: '', component: PlayerBuilderPlaybackComponent, },\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\nconst COMP = PlayerBuilderPlaybackRoutes.filter(r => !!r.component).map(r => r.component);\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerBuilderPlaybackRoutes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tPlayerBuilderDocsModule,\n\t],\n\tdeclarations: [\n\t\t...COMP\n\t],\n\tentryComponents: COMP,\n})\nexport class PlayerBuilderPlaybackModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/playback/player.builder.playback.module.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from \"@angular/core\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { ClipboardService } from \"../../../../../../clipboard/clipboard.service\";\nimport { AbstractPlayerBuilderDataComponent } from \"../../../component/@core/abstract.player.builder.data.component\";\nimport { PlayerBuilderDataService } from \"../../../service/player.builder.data.service\";\nimport { UrlService } from '../../../../../../../service/url.service';\n\n@Component({\n\tselector: 'player-builder-theme',\n\ttemplate: require('./player.builder.theme.component.html'),\n\tstyles: [\n\t\trequire('../../../scss/player.builder.form.group.scss'),\n\t\t// require('./player.builder.theme.component.scss')\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderThemeComponent extends AbstractPlayerBuilderDataComponent implements OnInit, OnDestroy {\n\n\tTEXT_FONTS: bradmax.builder.ResourceFont[] = this.data.RESOURCE.fonts;\n\tSKIN_THEMES: bradmax.player.SkinThemes = this.data.RESOURCE.themes;\n\n\tconstructor(\n\t\tpublic data: PlayerBuilderDataService,\n\t\tprotected cdr: ChangeDetectorRef,\n\t\tprotected route: ActivatedRoute,\n\t\tprotected sanitizer: DomSanitizer,\n\t\tprivate urlService: UrlService,\n\t\tprivate clipboard: ClipboardService,\n\t) {\n\t\tsuper(data, cdr, route);\n\t}\n\n\tformatImageSrc(theme: string) { return this.sanitizer.bypassSecurityTrustUrl(this.urlService.file(`img/builder/screenshots/theme/${theme}.jpg`)); }\n\n\tfontById(id: string) { return this.TEXT_FONTS.find(f => f.id === id); }\n\n\tcopyLink(element: HTMLTextAreaElement) { this.clipboard.copy(element).subscribe(); }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/theme/component/player.builder.theme.component.ts","\n\n\n\nimport { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { ClipboardService } from \"../../../../../clipboard/clipboard.service\";\nimport { ColorpickerModule } from \"../../../../../colorpicker/colorpicker.module\";\nimport { FormComponentsModule } from \"../../../../../form/form.module\";\nimport { ObjectKeysPipeModule } from \"../../../../../pipe/objectKeys/object.keys.module\";\nimport { PlayerBuilderDocsModule } from \"../@common/docs/player.builder.docs.module\";\nimport { PlayerBuilderIconModule } from \"../@common/icon/player.builder.icon.module\";\nimport { PlayerBuilderThemeComponent } from \"./component/player.builder.theme.component\";\n\nconst PlayerBuilderThemeRoutes: Routes = [\n\t{\n\t\tpath: '',\n\t\tcomponent: PlayerBuilderThemeComponent,\n\t},\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nconst COMP = PlayerBuilderThemeRoutes.filter(r => !!r.component).map(r => r.component);\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerBuilderThemeRoutes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tColorpickerModule,\n\t\tPlayerBuilderDocsModule,\n\t\tObjectKeysPipeModule,\n\t\tPlayerBuilderIconModule,\n\t],\n\tproviders: [ClipboardService],\n\tdeclarations: [\n\t\t...COMP\n\t],\n\tentryComponents: COMP,\n})\nexport class PlayerBuilderThemeModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/modules/theme/player.builder.theme.module.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { isPlayerV2 } from '../../../../../../model/api.model';\nimport { PlayerService } from '../../../../../../service/player.service';\nimport { UserService } from '../../../../../../service/user.service';\nimport { PlayerRoute } from '../../../../model/player.model';\n\n@Injectable()\nexport class PlayerBuilderActivateGuard implements CanActivate {\n\n\tconstructor(\n\t\tprivate router: Router,\n\t\tprivate service: PlayerService,\n\t\tprivate user: UserService,\n\t) { }\n\n\tcanActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {\n\t\tconst buildId = route.params['id'];\n\t\tif (buildId == null || this.user.accountId == null)\n\t\t\treturn this.gotoPlayers();\n\t\treturn this.service.readPlayer(this.user.accountId, buildId)\n\t\t\t.pipe(\n\t\t\t\tmap(resp => {\n\t\t\t\t\tif (!resp || !resp.conf_json)\n\t\t\t\t\t\treturn this.gotoPlayers();\n\t\t\t\t\tif (isPlayerV2(resp))\n\t\t\t\t\t\treturn true;\n\t\t\t\t\treturn this.gotoConfigurator(buildId);\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tprivate gotoPlayers() {\n\t\tthis.router.navigate(['admin', 'player']);\n\t\treturn false;\n\t}\n\n\tprivate gotoConfigurator(buildId: number) {\n\t\tthis.router.navigate(['admin', 'player', buildId, PlayerRoute.configurator]);\n\t\treturn false;\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/guard/player.builder.activate.guard.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { PlayerBuilderViewComponent } from '../../component/view/player.builder.view.component';\n\n@Injectable()\nexport class PlayerBuilderDeactivateGuard implements CanDeactivate<PlayerBuilderViewComponent> {\n\n\tcanDeactivate(component: PlayerBuilderViewComponent, _currentRoute: ActivatedRouteSnapshot, _currentState: RouterStateSnapshot, _nextState: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {\n\t\treturn component.canLeave$();\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/guard/player.builder.deactivate.guard.ts","import { Inject, Injectable } from \"@angular/core\";\nimport { Http } from \"@angular/http\";\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport { PLAYER_DOCS_LINKS_URL } from \"../../../model/player.builder.tokens\";\nimport { PlayerBuilderDocs, PlayerBuilderDocsService } from \"../../player.builder.docs.service\";\nimport { UrlService } from '../../../../../../../service/url.service';\n\n@Injectable()\nexport class PlayerBuilderDocksLinksResolveService implements Resolve<PlayerBuilderDocs | null> {\n\n\tconstructor(\n\t\tprivate http: Http,\n\t\tprivate docks: PlayerBuilderDocsService,\n\t\tprivate urlService: UrlService,\n\t\t@Inject(PLAYER_DOCS_LINKS_URL) private url: string,\n\t) { }\n\n\tresolve(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<PlayerBuilderDocs | null> {\n\t\treturn this.http.get(this.urlService.file(this.url))\n\t\t\t.pipe(\n\t\t\t\tmap(response => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.docks.LINKS = response.json();\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\treturn this.docks.LINKS;\n\t\t\t\t\t}\n\t\t\t\t\treturn this.docks.LINKS;\n\t\t\t\t}),\n\t\t\t);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/resolve/http/player.builder.docs.links.resolve.service.ts","import { Inject, Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { PLAYER_SKIN_MEDIA_URL } from '../../../model/player.builder.tokens';\nimport { UrlService } from '../../../../../../../service/url.service';\n\n@Injectable()\nexport class PlayerBuilderMediaResolveService implements Resolve<any | null> {\n\n\tconstructor(\n\t\tprivate http: Http,\n\t\tprivate urlService: UrlService,\n\t\t@Inject(PLAYER_SKIN_MEDIA_URL) private url: string,\n\t) { }\n\n\tresolve(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<any | null> {\n\t\treturn this.http.get(this.urlService.file(this.url))\n\t\t\t.pipe(\n\t\t\t\tmap(response => {\n\t\t\t\t\tlet media: any = null;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst r = response.json();\n\t\t\t\t\t\tmedia = r.dataProvider;\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tconsole.error(e);\n\t\t\t\t\t\treturn media;\n\t\t\t\t\t}\n\t\t\t\t\treturn media;\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/resolve/http/player.builder.media.resolve.service.ts","\n\nexport class UrlUtil {\n\n\tpublic static format(base: string, url: string): string {\n\t\t// return new URL(url.startsWith('/') ? url : `/${url}`, base.endsWith('/') ? base.slice(-1) : base).toString();\n\t\treturn (base.endsWith('/') ? base.slice(-1) : base) + (url.startsWith('/') ? url : `/${url}`)\n\t}\n\n\tpublic static map(base: string, urls: string[]): string[] {\n\t\treturn urls.map(u => UrlUtil.format(base, u));\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/util/url.util.ts","import { DOCUMENT } from \"@angular/common\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from \"rxjs\";\nimport { UrlUtil } from \"../../../../../../../util/url.util\";\nimport { PLAYER_CDN_URL, PLAYER_JS_SRC } from \"../../../model/player.builder.tokens\";\n\n@Injectable()\nexport class PlayerBuilderJsResolveService implements Resolve<Observable<boolean> | boolean | null> {\n\n\tprivate src: string;\n\n\tconstructor(\n\t\t@Inject(DOCUMENT) private doc: Document,\n\t\t@Inject(PLAYER_CDN_URL) private PLAYER_CDN_URL: string,\n\t\t@Inject(PLAYER_JS_SRC) private PLAYER_JS_SRC: string,\n\t) {\n\t\tthis.src = UrlUtil.format(this.PLAYER_CDN_URL, this.PLAYER_JS_SRC);\n\t\t// console.debug(`[JS.Resolve].src`, this.PLAYER_CDN_URL, this.PLAYER_JS_SRC, this.src);\n\t}\n\n\tresolve(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<boolean> | boolean | null {\n\t\tconst head = this.doc.getElementsByTagName('head')[0];\n\t\tconst headScripts = head.getElementsByTagName('script');\n\t\tfor (let index = 0; index < headScripts.length; index++) {\n\t\t\tconst element = headScripts.item(index);\n\t\t\tif (element && 'src' in element && element.src === this.src) {\n\t\t\t\t// console.debug(`[JS.Resolve].present`);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// console.debug(`[JS.Resolve].load`);\n\t\treturn new Observable<boolean>(s => {\n\n\t\t\tconst script = document.createElement('script');\n\t\t\tscript.type = 'text/javascript';\n\t\t\tscript.async = true;\n\t\t\tscript.defer = true;\n\t\t\tscript.charset = 'utf-8';\n\t\t\tscript.addEventListener('error', e => s.error(e), false);\n\t\t\tscript.addEventListener('load', () => {\n\t\t\t\t// console.debug(`[JS.Resolve].loaded`);\n\t\t\t\ts.next(true);\n\t\t\t\ts.complete();\n\t\t\t}, false);\n\t\t\tscript.src = this.src;\n\t\t\t// script.src = `${this.src}?${Date.now()}`;\n\t\t\thead.appendChild(script);\n\t\t\t// const wrapper = document.createElement('script');\n\t\t\t// wrapper.type = 'text/javascript';\n\t\t\t// wrapper.async = true;\n\t\t\t// wrapper.defer = true;\n\t\t\t// wrapper.innerText = 'window.bradmax_player_create = function(elmt,cfg,name){return bradmax.player.create(elmt,cfg,name);}';\n\t\t\t// head.appendChild(wrapper);\n\t\t});\n\n\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/builder/service/resolve/js/player.builder.js.resolve.service.ts","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({ name: 'safeHtml' })\n\nexport class SanitizeHtmlPipe implements PipeTransform {\n\n\tconstructor(private sanitizer: DomSanitizer) { }\n\n\ttransform(value: string): SafeHtml {\n\t\treturn this.sanitizer.bypassSecurityTrustHtml(value);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/sanitize/sanitize.html.pipe.ts","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({ name: 'safeSrc' })\n\nexport class SanitizeSrcPipe implements PipeTransform {\n\n\tconstructor(private sanitizer: DomSanitizer) { }\n\n\ttransform(value: string): SafeHtml {\n\t\treturn this.sanitizer.bypassSecurityTrustResourceUrl(value);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/sanitize/sanitize.src.pipe.ts","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\n\n@Pipe({ name: 'safeStyle' })\n\nexport class SanitizeStylePipe implements PipeTransform {\n\n\tconstructor(private sanitizer: DomSanitizer) { }\n\n\ttransform(value: string): SafeStyle {\n\t\treturn this.sanitizer.bypassSecurityTrustStyle(value);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/sanitize/sanitize.style.pipe.ts","import { NgModule } from \"@angular/core\";\nimport { SanitizeHtmlPipe } from \"./sanitize.html.pipe\";\nimport { SanitizeSrcPipe } from \"./sanitize.src.pipe\";\nimport { SanitizeStylePipe } from \"./sanitize.style.pipe\";\n\nconst PIPES = [\n\tSanitizeSrcPipe,\n\tSanitizeHtmlPipe,\n\tSanitizeStylePipe\n];\n\n@NgModule({\n\tdeclarations: [...PIPES],\n\texports: [...PIPES],\n})\nexport class SanitizePipeModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/pipe/sanitize/sanitize.pipe.module.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component } from \"@angular/core\";\nimport { ActivatedRoute } from \"@angular/router\";\nimport { Subscription } from \"rxjs\";\nimport { zip } from \"rxjs/observable/zip\";\nimport { PlayerModel } from \"../../../../../model/api.model\";\nimport { SidebarService } from \"../../../../../service/sidebar.service\";\nimport { UrlService } from \"../../../../../service/url.service\";\nimport { ClipboardService } from \"../../../../clipboard/clipboard.service\";\nimport { PlayerRoute, PlayerRouteParam } from \"../../../model/player.model\";\nimport { PlayerListDataService } from \"../../../service/player.list.data.service\";\n\ninterface PlayerEmbedCodeModel {\n\twidth: string;\n\theight: string;\n\tmediaUrls: string[];\n\ttitle?: string | null;\n\tduration?: number | null;\n\tsplashImageUrl?: string | null;\n\tid?: string | null;\n\tadsVmapUrl?: string | null;\n\tadsPrerollVastUrl?: string | null;\n}\n\n@Component({\n\tselector: 'player-embed-code',\n\ttemplate: require('./player.embed.code.component.html'),\n\tstyles: [\n\t\t// require('../../../scss/common.player.form.group.scss'),\n\t\trequire('./player.embed.code.component.scss')\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerBuilderEmbedCodeComponent {\n\n\tCODEMIRROR_CONFIG = {\n\t\treadOnly: true,\n\t\tmode: 'htmlmixed',\n\t\ttheme: 'blackboard',\n\t\tlineWrapping: true,\n\t\tlineNumbers: true,\n\t\tlineWiseCopyCut: true,\n\t\tindentUnit: 1,\n\t\tautofocus: false\n\t}\n\n\tmethod: 'iframe' | 'script' = 'iframe';\n\tpreviewScale = 1;\n\tplayerData: PlayerModel | null = null;\n\n\tprivate data: PlayerEmbedCodeModel = {\n\t\twidth: '600px',\n\t\theight: '400px',\n\t\tmediaUrls: ['https://bradmax.com/static/video/tears_of_steel.mp4'],\n\t\ttitle: 'Tears of steel',\n\t\tduration: 734.097415,\n\t\tsplashImageUrl: 'https://bradmax.com/static/images/startsplash.jpg',\n\t\tid: null,\n\t\tadsVmapUrl: null,\n\t\tadsPrerollVastUrl: null\n\t};\n\tprivate jsFrameCachBuster = `${Date.now()}`;\n\tprivate routeSub: Subscription;\n\tprivate playerIframeUrl: string | null = null;\n\tprivate playerScriptUrl: string | null = null;\n\n\tconstructor(\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate url: UrlService,\n\t\tprivate list: PlayerListDataService,\n\t\tprivate sidebar: SidebarService,\n\t\tprivate clipboard: ClipboardService,\n\t) { }\n\n\tngOnInit() {\n\t\tthis.routeSub = zip(this.list.$, this.route.params)\n\t\t\t.subscribe(r => {\n\t\t\t\tconst [players, params] = r;\n\t\t\t\tif (players && PlayerRouteParam.id in params) {\n\t\t\t\t\tconst playerId = parseInt(params[PlayerRouteParam.id]);\n\t\t\t\t\tthis.sidebar.showPlayersMenu(players, playerId, PlayerRoute.embedcode);\n\t\t\t\t\tif (players && players.count > 0 && players.results.length > 0) {\n\t\t\t\t\t\tthis.playerData = players.results\n\t\t\t\t\t\t\t.filter(player => player.id === playerId)\n\t\t\t\t\t\t\t.pop();\n\t\t\t\t\t\t// const conf_json = JSON.parse(this.playerData.conf_json);\n\t\t\t\t\t\tthis.playerIframeUrl = this.playerData.embed_player_page_url;//conf_json.urls.html;\n\t\t\t\t\t\tthis.playerScriptUrl = this.playerData.latest_webbuild.player_js_url; // conf_json.urls.js;\n\t\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tngOnDestroy() {\n\t\tthis.routeSub.unsubscribe();\n\t}\n\n\t//// IFRAME\n\tget iframeSrc() {\n\t\tconst params = [`mediaUrl=${encodeURIComponent(this.data.mediaUrls[0])}`];\n\t\tif (this.data.mediaUrls.length === 2 && !!this.data.mediaUrls[1])\n\t\t\tparams.push(`mediaUrl2=${encodeURIComponent(this.data.mediaUrls[1])}`);\n\t\tif (this.data.title)\n\t\t\tparams.push(`title=${encodeURIComponent(this.data.title)}`);\n\t\tif (this.data.duration)\n\t\t\tparams.push(`duration=${this.data.duration}`);\n\t\tif (this.data.splashImageUrl)\n\t\t\tparams.push(`splashImgUrl=${encodeURIComponent(this.data.splashImageUrl)}`);\n\t\tif (this.data.id)\n\t\t\tparams.push(`id=${encodeURIComponent(this.data.id)}`);\n\t\tif (this.data.adsVmapUrl)\n\t\t\tparams.push(`a.vmap=${encodeURIComponent(this.data.adsVmapUrl)}`);\n\t\tif (this.data.adsPrerollVastUrl)\n\t\t\tparams.push(`a.pre.vast=${encodeURIComponent(this.data.adsPrerollVastUrl)}`);\n\t\treturn `${this.playerIframeUrl}?${params.join(`&`)}`;\n\t}\n\tprivate get iframeEmbedCode() { return `<iframe src=\"${this.iframeSrc}\" width=\"${this.data.width}\" height=\"${this.data.height}\" frameBorder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen></iframe>`; }\n\t///// SCRIPT\n\tget scriptFrameSrc() { return this.url.file(`html/embed.code.script.frame.html?${this.jsFrameCachBuster}`); }\n\thandleScriptFrameLoad(jsFrame: HTMLIFrameElement) {\n\t\tif ('createplayer' in jsFrame.contentWindow)\n\t\t\t(jsFrame.contentWindow as any)\n\t\t\t\t.createplayer(this.playerScriptUrl, 'player', this.scriptConfig, this.data.width, this.data.height);\n\t}\n\tprivate get scriptConfig() {\n\t\tconst cfg = { dataProvider: { source: [{ url: this.data.mediaUrls[0] }] } };\n\t\tif (this.data.mediaUrls.length === 2 && !!this.data.mediaUrls[1])\n\t\t\tcfg.dataProvider.source.push({ url: this.data.mediaUrls[1] });\n\t\tif (this.data.title)\n\t\t\tcfg.dataProvider['title'] = this.data.title;\n\t\tif (this.data.duration)\n\t\t\tcfg.dataProvider['duration'] = this.data.duration;\n\t\tif (this.data.splashImageUrl)\n\t\t\tcfg.dataProvider['splashImages'] = [{ url: this.data.splashImageUrl }];\n\t\tif (this.data.id)\n\t\t\tcfg.dataProvider['id'] = this.data.id;\n\t\tif (this.data.adsVmapUrl) {\n\t\t\tif (!('advertisement' in cfg))\n\t\t\t\tcfg['advertisement'] = {};\n\t\t\tcfg['advertisement']['vmap'] = this.data.adsVmapUrl;\n\t\t}\n\t\tif (this.data.adsPrerollVastUrl) {\n\t\t\tif (!('advertisement' in cfg))\n\t\t\t\tcfg['advertisement'] = {};\n\t\t\tcfg['advertisement']['breaks'] = [{ \"timeOffset\": \"start\", \"vast\": this.data.adsPrerollVastUrl }];\n\t\t}\n\t\treturn btoa(JSON.stringify(cfg));\n\t}\n\tprivate get scriptEmbedCodeDiv() { return `<div id=\"player\" style=\"width: ${this.data.width};height: ${this.data.height};\"></div>`; }\n\tprivate get scriptEmbedCodeScript() { return `<script src=\"${this.playerScriptUrl}\" type=\"text/javascript\" data-bs-parent-id=\"player\" data-bs-variables=\"${this.scriptConfig}\"></script>`; }\n\t///// CODE\n\tget codemirror() { return this.codeToString('\\n'); }\n\tget copyString() { return this.codeToString(''); }\n\n\tcopyToClipboard(element: HTMLTextAreaElement) { this.clipboard.copy(element).subscribe(); }\n\n\tprivate codeToString(lineSeparator = '') {\n\t\treturn this.method === 'iframe'\n\t\t\t? this.iframeEmbedCode\n\t\t\t: this.method === 'script'\n\t\t\t\t? `${this.scriptEmbedCodeDiv}${lineSeparator}${this.scriptEmbedCodeScript}`\n\t\t\t\t: '';\n\t}\n\t///// FORM\n\tset formWidth(v: string) { this.data.width = v; this.updateJsFrameCachBuster(); }\n\tget formWidth() { return this.data.width; }\n\tset formHeight(v: string) { this.data.height = v; this.updateJsFrameCachBuster(); }\n\tget formHeight() { return this.data.height; }\n\tset formMediaUrls(v: string[]) { this.data.mediaUrls = v; this.updateJsFrameCachBuster(); }\n\tget formMediaUrls() { return this.data.mediaUrls; }\n\tset formTitle(v: string) { this.data.title = v; this.updateJsFrameCachBuster(); }\n\tget formTitle() { return this.data.title; }\n\tset formDuration(v: number | null) { this.data.duration = v; this.updateJsFrameCachBuster(); }\n\tget formDuration() { return this.data.duration; }\n\tset formSplashImageUrl(v: string | null) { this.data.splashImageUrl = v; this.updateJsFrameCachBuster(); }\n\tget formSplashImageUrl() { return this.data.splashImageUrl; }\n\tset formId(v: string | null) { this.data.id = v; this.updateJsFrameCachBuster(); }\n\tget formId() { return this.data.id; }\n\tset formAdsVmapUrl(v: string | null) { this.data.adsVmapUrl = v; this.updateJsFrameCachBuster(); }\n\tget formAdsVmapUrl() { return this.data.adsVmapUrl; }\n\tset formAdsPrerollVastUrl(v: string | null) { this.data.adsPrerollVastUrl = v; this.updateJsFrameCachBuster(); }\n\tget formAdsPrerollVastUrl() { return this.data.adsPrerollVastUrl; }\n\tformMediaUrlsChange(idx: number, v: string) {\n\t\tthis.data.mediaUrls[idx] = v;\n\t\tthis.updateJsFrameCachBuster();\n\t}\n\tprivate updateJsFrameCachBuster() {\n\t\tif (this.method == \"script\")\n\t\t\tthis.jsFrameCachBuster = `${Date.now()}`;\n\t\tthis.cdr.markForCheck();\n\t}\n\t/////////\n\taddMedia() {\n\t\tif (!this.canAddMedia)\n\t\t\treturn;\n\t\tthis.formMediaUrls.push(null);\n\t\tthis.cdr.markForCheck();\n\t}\n\tremoveMedia() {\n\t\tif (this.formMediaUrls.length === 0)\n\t\t\treturn;\n\t\tthis.formMediaUrls.pop();\n\t\tthis.cdr.markForCheck();\n\t}\n\tget canAddMedia() {\n\t\tconst last = this.formMediaUrls.length > 0\n\t\t\t? this.formMediaUrls[this.formMediaUrls.length - 1]\n\t\t\t: '';\n\t\treturn (!last || last.trim() === '') ? false : true;\n\t}\n\t/////////\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/embedcode/component/player.embed.code.component.ts","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { RouterModule, Routes } from \"@angular/router\";\nimport { CodemirrorModule } from \"ng2-codemirror\";\nimport { ClipboardService } from \"../../../clipboard/clipboard.service\";\nimport { FormComponentsModule } from \"../../../form\";\nimport { SanitizePipeModule } from \"../../../pipe/sanitize/sanitize.pipe.module\";\nimport { PlayerBuilderEmbedCodeComponent } from \"./component/player.embed.code.component\";\n\nconst PlayerEmbedCodeRoutes: Routes = [\n\t{\n\t\tpath: '',\n\t\t// canActivate: [PlayerBuilderEmbedCodeActivateGuard],\n\t\tcomponent: PlayerBuilderEmbedCodeComponent,\n\t},\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n]\n\nconst COMP = PlayerEmbedCodeRoutes.filter(r => !!r.component).map(r => r.component);\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerEmbedCodeRoutes),\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tCodemirrorModule,\n\t\tSanitizePipeModule,\n\t],\n\tproviders: [ClipboardService],\n\tdeclarations: [\n\t\t...COMP,\n\t],\n\tentryComponents: COMP,\n\texports: COMP\n})\nexport class PlayerEmbedCodeModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/embedcode/player.embed.code.module.ts","import { Injectable } from '@angular/core';\n\nimport { PlayerModel } from '../../../../../model/api.model';\n\n@Injectable()\nexport class PlayerEmbederService {\n\n\tpublic playerModel: PlayerModel;\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/embeder/service/player.embeder.service.ts","/**\n * Created by mthk on 18/10/16.\n */\nimport { PlayerConfiguratorPlugin, PlayerReadResponse } from '../../../../../../model/api.model';\n\nexport type BsplayerColorScheme = { [name: string]: string; };\n\nexport type ConfiguratorUserSetup = {\n\tbs?: {\n\t\tplayer?: {\n\t\t\tconfig?: {\n\t\t\t\tAdPluginsConfig?: any;\n\t\t\t\tBrandingAndShareButtons?: any;\n\t\t\t\tPlayerConfig?: any;\n\t\t\t\tSkinAndColor?: any;\n\t\t\t\tStartEndSplash?: any;\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport enum BsplayerName {\n\tgorilla, mole, snake, zebra\n}\n\nexport enum HaxeTypes {\n\tBool, Float, Int, String, RGB, Tags, Link, TextArea, ImgFile, P12File, List\n}\n\nexport type PlayerConfiguratorResolvedModel = {\n\tplayerConfig: PlayerReadResponse;\n\tplayerDefaults: PlayerConfiguratorPlugin[];\n};\n\nexport type PlayerConfiguratorGroupModel = {\n\tname: string;\n\tcollapsed: boolean;\n\titems: PlayerConfiguratorPlugin[];\n\tisAdvance: boolean;\n\tadvanceValue: boolean;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/model/player.configurator.model.ts","/**\n * Created by mthk on 14/10/16.\n */\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\n\nimport { PlayerModel, PlayerReadResponse } from '../../../../../model/api.model';\nimport { PlayerService } from '../../../../../service/player.service';\nimport { UserService } from '../../../../../service/user.service';\nimport { PlayerEmbederService } from './player.embeder.service';\n\n\n@Injectable()\nexport class PlayerEmbederResolver implements Resolve<PlayerReadResponse | PlayerModel> {\n\tstatic PLAYER_MODEL_CACHE_LIVETIME = 20; // in [sec]\n\n\tconstructor(private player: PlayerService, private embeder: PlayerEmbederService, private user: UserService) { }\n\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<PlayerReadResponse | PlayerModel> | null {\n\t\tif (this.embeder.playerModel && (this.embeder.playerModel.id == parseInt(route.params['id']))) {\n\t\t\tlet nowTs = (new Date()).getTime() / 1000.0;\n\t\t\tlet loadedAt = this.embeder.playerModel.loaded_at || 0;\n\t\t\tlet liveTime = nowTs - loadedAt;\n\t\t\tif(liveTime < PlayerEmbederResolver.PLAYER_MODEL_CACHE_LIVETIME) {\n\t\t\t\treturn Observable.of(this.embeder.playerModel);\n\t\t\t}\n\t\t}\n\t\treturn this.player.readPlayer(this.user.accountId, route.params['id']);\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/embeder/service/player.embeder.resolver.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { CodemirrorModule } from 'ng2-codemirror';\nimport { FormComponentsModule } from '../../../form/form.module';\nimport { PlayerEmbederView } from './component/player.embeder.view.component';\nimport { PlayerEmbederResolver } from './service/player.embeder.resolver';\n\n/* export */ const PlayerEmbederRoutes: Routes = [\n\t{\n\t\tpath: '',\n\t\tcomponent: PlayerEmbederView,\n\t\tresolve: { playerModel: PlayerEmbederResolver }\n\t},\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nlet LOCAL_PROVIDERS = [\n\tPlayerEmbederResolver,\n\t// PlayerEmbederService\n];\n\nlet COMP: any = [\n\tPlayerEmbederView,\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tFormComponentsModule,\n\t\tRouterModule.forChild(PlayerEmbederRoutes),\n\t\tLocalizationModule,\n\t\tCodemirrorModule,\n\t],\n\tproviders: [\n\t\t// ...GLOBAL_PROVIDERS,\n\t\t...LOCAL_PROVIDERS,\n\t],\n\tdeclarations: [\n\t\t...COMP,\n\t],\n\tentryComponents: COMP,\n\texports: COMP\n})\nexport class PlayerEmbederModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/embeder/player.embeder.module.ts","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\nimport { PlayerConfiguratorPlugin } from '../../../../../../../../model/api.model';\nimport { BRADMAX_PLAYER_VERSION } from '../../../../../../PLAYER_VERSION';\nimport { BsplayerColorScheme, BsplayerName } from '../../../model/player.configurator.model';\nimport { PlayerConfiguratorParser } from '../../../model/player.configurator.parser';\n\n/**\n * Created by mthk on 18/10/16.\n */\nexport enum PlayerConfiguratorPreviewState {\n\tstart,\n\tmiddle,\n\tend\n}\n\n@Injectable()\nexport class PlayerConfiguratorPreviewVideoService {\n\n\tinitialized: boolean;\n\tname: BsplayerName | null;\n\tcontainer: HTMLElement;\n\tplayer: bradmax.player.Player | null;\n\tapi: bradmax.player.PlayerJavascriptApi | null;\n\tconfig = require('./player.configurator.preview.video.provider.json');\n\tcolorScheme: BsplayerColorScheme | null;\n\tdefaultColorSchemeCache: string;\n\tenableSkinAutohide = false;\n\tplayerStates = PlayerConfiguratorPreviewState;\n\tplayerStateStream$: Observable<PlayerConfiguratorPreviewState>;\n\tplayerStateSource = new Subject<PlayerConfiguratorPreviewState>();\n\n\tprivate logoImage: string | null;\n\tprivate logoLink: string | null;\n\tprivate logoTarget: string | null;\n\tprivate logoXPosition: string | null;\n\tprivate logoYPosition: string | null;\n\tprivate logoAutohide: boolean | null;\n\n\tprivate mediaDuration = -1;\n\tprivate mediaPlayed = false;\n\tprivate shareButtons: string | null;\n\tprivate pictureInPictureButtonVisible: boolean = false;\n\tprivate videoCastEnabled: boolean = false;\n\tprivate endSplashName: string | null;\n\tprivate playerState: PlayerConfiguratorPreviewState;\n\n\tconstructor(private parser: PlayerConfiguratorParser) {\n\t\tthis.initialized = false;\n\t\tthis.playerStateStream$ = this.playerStateSource.asObservable();\n\t}\n\n\tonRoutingChange(config: PlayerConfiguratorPlugin[] | null = null): void {\n\t\tif (config) {\n\t\t\t// Reload shareButtons, because after changing dynamically URL, url paths to SVG can be broken\n\t\t\t// and icons can be not displayed - race condition.\n\t\t\tlet sb = this.findConfigValueByName(config, 'shareButtons');\n\t\t\tif (sb == null)\n\t\t\t\tsb = '';\n\t\t\tthis.changeShareButtons(sb.split(','));\n\t\t}\n\t}\n\n\tsetup(con: HTMLElement): void {\n\t\tthis.container = con;\n\t}\n\n\tdestroy(): void {\n\t\tthis.initialized = false;\n\n\t\tif (this.api != null) {\n\t\t\tthis.api.remove('VideoEvent.currentTimeChange', this.onVideoCurrentTimeChange);\n\t\t\tthis.api.remove('VideoEvent.playing', this.onVideoPlaying);\n\t\t\tthis.api.remove('VideoEvent.complete', this.onVideoComplete);\n\t\t}\n\t\tthis.api = null;\n\n\t\tif (this.player != null)\n\t\t\tbradmax.player.destroy(this.player);\n\t\tthis.player = null;\n\n\t\tthis.name = null;\n\t\tthis.colorScheme = null;\n\t\tthis.defaultColorSchemeCache = null;\n\t}\n\n\t// Keep default skin in consistency with bsplayer/configurator/src/bs/player/config/SkinConfig.hx::skin\n\tcreate(name = BsplayerName.zebra): void {\n\t\tif (this.name == name)\n\t\t\treturn;\n\n\t\tthis.destroy();\n\n\t\tthis.name = name;\n\t\ttry {\n\t\t\tthis.player = bradmax.player.create(this.container, this.config, this.playerName);\n\t\t\tthis.api = this.player.modules.JavascriptApi;\n\n\t\t\tthis.updateColorScheme();\n\t\t\tthis.defaultColorSchemeCache = JSON.stringify(this.colorScheme);\n\n\t\t\t// Use state \"middle\" as initial state. It's showing better progress bar colors\n\t\t\t// and there is no problem with start splash screen, which sometimes is loading\n\t\t\t// incorrectly, when loaded dynamically in view.\n\t\t\tthis.changePlayerState(this.playerStates.middle);\n\t\t\tthis.changeSkinAutohide(this.enableSkinAutohide);\n\n\t\t\tthis.api.add('VideoEvent.currentTimeChange', this.onVideoCurrentTimeChange);\n\t\t\tthis.api.add('VideoEvent.playing', this.onVideoPlaying);\n\t\t\tthis.api.add('VideoEvent.complete', this.onVideoComplete);\n\t\t} catch(e) {\n\t\t\tconsole.error(\"Exception during player creation by PlayerConfiguratorPreviewVideoService: \");\n\t\t\tconsole.error(e);\n\t\t}\n\n\t\tthis.initialized = true;\n\t}\n\n\tfindConfigValueByName(config: PlayerConfiguratorPlugin[], searchName: string): any | null {\n\t\tvar value: any;\n\t\tfor (let plugin of config) {\n\t\t\tif (plugin.name == searchName) {\n\t\t\t\tvalue = plugin.value;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (plugin.children != null && plugin.children.length > 0) {\n\t\t\t\tvalue = this.findConfigValueByName(plugin.children, searchName);\n\t\t\t\tif (value != null)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\n\tupdateColorScheme() {\n\t\tif (this.api)\n\t\t\tthis.colorScheme = this.api.skinConfig_getColorScheme();\n\t\tif (this.colorScheme)\n\t\t\tfor (const color in this.colorScheme)\n\t\t\t\tthis.colorScheme[color] = this.colorScheme[color].toLowerCase();\n\t}\n\n\tchangeColor(config: PlayerConfiguratorPlugin[], name: string, value: string, force = false): void {\n\t\tif (this.api && this.colorScheme && (force || this.colorScheme[name] != value)) {\n\t\t\tthis.colorScheme[name] = value;\n\t\t\tif (name == 'COLORS_SHADE_MAP_BASE') {\n\t\t\t\tthis.api.skinConfig_updateColorBase(value);\n\t\t\t\tthis.updateColorScheme();\n\t\t\t\tthis.parser.updateConfigWithColorScheme(config, this.colorScheme, false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.api.skinConfig_updateColorScheme(this.colorScheme);\n\t\t}\n\t}\n\n\tchangePlayerState(state: PlayerConfiguratorPreviewState): void {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.playerState = state;\n\t\tthis.playerStateSource.next(state);\n\t\tthis.api.skinConfig_setPlayerState(this.playerStates[state]);\n\t}\n\n\tchangeSkinAutohide(value: boolean): void {\n\t\tthis.enableSkinAutohide = value;\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.api.skinConfig_disableAutohide(!value);\n\t}\n\n\tchangeShareButtons(buttons: string[]): void {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.api.skinConfig_editShareButtons(buttons);\n\t\tif (this.endSplashName == 'social'\n\t\t\t&& this.playerState == this.playerStates.end\n\t\t\t&& this.shareButtons.length == 0\n\t\t\t&& buttons.length > 0) {\n\t\t\tthis.api.skinConfig_editEndSplash(this.endSplashName);\n\t\t}\n\t\tthis.shareButtons = buttons ? buttons.join(',') : '';\n\t}\n\n\tchangeVolume(value: number): void {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.api.setVolume(value);\n\t}\n\n\tchangeSkin(config: PlayerConfiguratorPlugin[], skinName: string, updateColorScheme: boolean) {\n\t\tconst name = BsplayerName[skinName];\n\t\tif (this.colorScheme && name != null) {\n\t\t\tthis.create(name);\n\t\t\tif (updateColorScheme)\n\t\t\t\tthis.parser.updateConfigWithColorScheme(config, this.colorScheme, true);\n\t\t\tthis.update(config, false);\n\t\t}\n\t}\n\n\tchangeLogoFile(logo: string) {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.logoImage = logo;\n\t\tthis.dispatchSkinConfigEditLogoEvent();\n\t}\n\n\tchangeLogoLink(link: string) {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.logoLink = link;\n\t\tthis.dispatchSkinConfigEditLogoEvent();\n\t}\n\n\tchangeLogoTarget(target: string) {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.logoTarget = target;\n\t\tthis.dispatchSkinConfigEditLogoEvent();\n\t}\n\n\tchangeLogoXPosition(xPos: string) {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.logoXPosition = xPos;\n\t\tthis.dispatchSkinConfigEditLogoEvent();\n\t}\n\n\tchangeLogoYPosition(yPos: string) {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.logoYPosition = yPos;\n\t\tthis.dispatchSkinConfigEditLogoEvent();\n\t}\n\n\tchangeLogoAutohide(autohide: boolean) {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.logoAutohide = autohide;\n\t\tthis.dispatchSkinConfigEditLogoEvent();\n\t}\n\n\tchangeEndSplash(splash: string) {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.endSplashName = splash;\n\t\tthis.changePlayerState(this.playerStates.middle);\n\t\tthis.api.skinConfig_editEndSplash(splash);\n\t\tthis.changePlayerState(this.playerStates.end);\n\t}\n\n\tget playerName(): string {\n\t\tif (this.name == null)\n\t\t\treturn '';\n\t\treturn BsplayerName[this.name] + '_' + BRADMAX_PLAYER_VERSION;\n\t}\n\n\tget resetColor() {\n\t\tif (this.defaultColorSchemeCache == null)\n\t\t\treturn;\n\t\tconst scheme = JSON.parse(this.defaultColorSchemeCache);\n\t\tif (scheme == null)\n\t\t\treturn;\n\t\treturn scheme['COLORS_SHADE_MAP_BASE'];\n\t}\n\n\tprivate update(config: PlayerConfiguratorPlugin[], withColors: boolean) {\n\t\t// shareButtons\n\t\tthis.shareButtons = this.findConfigValueByName(config, 'shareButtons');\n\t\tif (this.shareButtons == null)\n\t\t\tthis.shareButtons = '';\n\t\tthis.changeShareButtons(this.shareButtons.split(','));\n\n\t\t// PIP\n\t\tthis.pictureInPictureButtonVisible = this.findConfigValueByName(config, 'pictureInPictureButtonVisible');\n\t\tif (this.pictureInPictureButtonVisible == null)\n\t\t\tthis.pictureInPictureButtonVisible = false;\n\t\tthis.changePictureInPictureButtonVisibility(this.pictureInPictureButtonVisible);\n\n\t\t// Video casting\n\t\tthis.videoCastEnabled = this.findConfigValueByName(config, 'videoCastEnabled');\n\t\tif (this.videoCastEnabled == null)\n\t\t\tthis.videoCastEnabled = false;\n\t\tthis.changeVideoCastEnabled(this.videoCastEnabled);\n\n\t\t// skin colors\n\t\tif (this.colorScheme && withColors)\n\t\t\tObject.keys(this.colorScheme).forEach((name: string) => this.changeColor(config, name, this.colorScheme[name]));\n\n\t\t// volume\n\t\tconst vol = this.findConfigValueByName(config, 'volume');\n\t\tif (vol != null)\n\t\t\tthis.changeVolume(vol);\n\n\t\t// endSplash\n\t\tthis.endSplashName = this.findConfigValueByName(config, 'endSplash');\n\n\t\t// logo\n\t\tthis.logoImage = this.findConfigValueByName(config, 'logoFile');\n\t\tthis.logoLink = this.findConfigValueByName(config, 'logoLink');\n\t\tthis.logoTarget = this.findConfigValueByName(config, 'logoLinkTarget');\n\t\tthis.logoXPosition = this.findConfigValueByName(config, 'logoXPosition');\n\t\tthis.logoYPosition = this.findConfigValueByName(config, 'logoYPosition');\n\t\tthis.logoAutohide = this.findConfigValueByName(config, 'logoAutohide');\n\t\tif (this.api && (\n\t\t\tthis.logoImage != null\n\t\t\t|| this.logoLink != null\n\t\t\t|| this.logoTarget != null\n\t\t\t|| this.logoXPosition != null\n\t\t\t|| this.logoYPosition != null\n\t\t\t|| this.logoAutohide != null\n\t\t))\n\t\t\tsetTimeout(() => this.dispatchSkinConfigEditLogoEvent(), 50);\n\t}\n\n\tchangePictureInPictureButtonVisibility(isVisible: boolean) {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.api.skinConfig_updatePictureInPictureButtonVisible(isVisible);\n\t\tthis.pictureInPictureButtonVisible = isVisible;\n\t}\n\n\tchangeVideoCastEnabled(isVisible: boolean) {\n\t\tif (this.api == null)\n\t\t\treturn;\n\t\tthis.api.skinConfig_updateVideoCastEnabled(isVisible);\n\t\tthis.videoCastEnabled = isVisible;\n\t}\n\n\tprivate onVideoCurrentTimeChange = (e: any) => {\n\t\tif (e.data.currentTime <= 0) {\n\t\t\tthis.playerState = this.playerStates.start;\n\t\t\tthis.playerStateSource.next(this.playerState);\n\t\t}\n\t}\n\n\tprivate onVideoPlaying = (e: any) => {\n\t\tthis.playerState = this.playerStates.middle;\n\t\tthis.playerStateSource.next(this.playerState);\n\t}\n\n\tprivate onVideoComplete = (e: any) => {\n\t\tthis.playerState = this.playerStates.end;\n\t\tthis.playerStateSource.next(this.playerState);\n\t}\n\n\tprivate dispatchSkinConfigEditLogoEvent() {\n\t\tthis.api.skinConfig_editLogo(this.logoImage, this.logoLink, this.logoTarget, this.logoXPosition, this.logoYPosition, this.logoAutohide);\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/component/preview/video/player.configurator.preview.video.service.ts","\nimport { PlayerConfiguratorPlugin } from '../../../../../../model/api.model';\nimport {\n\tBsplayerColorScheme,\n\tConfiguratorUserSetup,\n\tHaxeTypes,\n\tPlayerConfiguratorGroupModel\n} from './player.configurator.model';\n\n/**\n * Created by mthk on 17/10/16.\n */\n\ntype NameMap = { [group: string]: NameMapItem; };\n\ntype NameMapItem = { plugins: PlayerConfiguratorPlugin[]; isAdvanceGroup: boolean; };\n\nexport class PlayerConfiguratorParser {\n\n\tconstructor() { }\n\n\tupdateConfigWithColorScheme(config: PlayerConfiguratorPlugin[], colorScheme: BsplayerColorScheme, withDefault: boolean) {\n\t\tconst schemeNames = Object.keys(colorScheme);\n\t\tfor (const c of this.findRGB(config))\n\t\t\tif (c.name) {\n\t\t\t\tconst isHidden = schemeNames.indexOf(c.name) < 0;\n\t\t\t\tif (!isHidden) {\n\t\t\t\t\tconst val = colorScheme[c.name];\n\t\t\t\t\tif (c.defaultValue == null && withDefault == true)\n\t\t\t\t\t\tc.defaultValue = val;\n\t\t\t\t\tc.value = val;\n\t\t\t\t}\n\t\t\t}\n\t}\n\n\tfixForSkinMainColorBackwardCompatibility(data: ConfiguratorUserSetup) {\n\t\tif (data.bs == null\n\t\t\t|| data.bs.player == null\n\t\t\t|| data.bs.player.config == null\n\t\t\t|| data.bs.player.config.SkinAndColor == null)\n\t\t\treturn;\n\t\tif (typeof data.bs.player.config.SkinAndColor.advance === 'undefined')\n\t\t\tdata.bs.player.config.SkinAndColor.advance = true;\n\t}\n\n\tpopulateConfigWithPlayerData(config: PlayerConfiguratorPlugin[], data: any) {\n\t\tlet flat = {};\n\t\tthis.flattenObject(data, '', flat);\n\t\tfor (var flatKey in flat)\n\t\t\tthis.updateConfigByPath(config, flatKey, flat[flatKey]);\n\t}\n\n\taddValueAttribute(config: PlayerConfiguratorPlugin[]) {\n\t\tfor (let plugin of config) {\n\t\t\tif (plugin.children != null && plugin.children.length > 0) {\n\t\t\t\tthis.addValueAttribute(plugin.children);\n\t\t\t} else {\n\t\t\t\tif ((typeof plugin.value == undefined || plugin.value == null) && plugin.defaultValue != null)\n\t\t\t\t\tplugin.value = plugin.defaultValue;\n\t\t\t}\n\t\t}\n\t}\n\n\tmapGroups(config: PlayerConfiguratorPlugin[]): PlayerConfiguratorGroupModel[] {\n\t\tif (config == null)\n\t\t\treturn [];\n\t\tlet map: PlayerConfiguratorGroupModel[] = [], g = '';\n\t\tlet nameMap: NameMap = {};\n\n\t\tconfig.forEach((p: PlayerConfiguratorPlugin) => {\n\t\t\tif (p.group) {\n\t\t\t\tg = p.group[0];\n\t\t\t\tif (!nameMap.hasOwnProperty(g))\n\t\t\t\t\tnameMap[g] = { plugins: [], isAdvanceGroup: false };\n\t\t\t\tnameMap[g].plugins.push(p);\n\t\t\t\tnameMap[g].isAdvanceGroup = this.checkIfIsAdvanceGroup(p.group) && !nameMap[g].hasOwnProperty('advance');\n\t\t\t}\n\t\t});\n\n\t\tObject.keys(nameMap).forEach((k: string) => map.push({\n\t\t\tname: k,\n\t\t\titems: nameMap[k].plugins,\n\t\t\tcollapsed: false,\n\t\t\tisAdvance: nameMap[k].isAdvanceGroup,\n\t\t\tadvanceValue: this.getGroupAdvanceValue(nameMap[k])\n\t\t}));\n\n\t\treturn map;\n\t}\n\n\tisFormGroups(p: PlayerConfiguratorPlugin): boolean { return !this.hasGrandChild(p); }\n\n\tisForm(p: PlayerConfiguratorPlugin): boolean { return this.hasGrandChild(p); }\n\n\tparseOutput(config: PlayerConfiguratorPlugin[], output: any = {}, $lvl = 0): any {\n\t\tthis.resolveDependencies(config);\n\t\tfor (let plugin of config) {\n\t\t\tif (plugin.multichoice && !plugin.checked) {\n\t\t\t\t// For \"multichoice\" groups (groups which can be enabled disabled)\n\t\t\t\t// do not add configuration when it is disabled (not checked).\n\t\t\t\tcontinue;\n\t\t\t} else if (plugin.children != null && plugin.children.length > 0)\n\t\t\t\tthis.parseOutput(plugin.children, output);\n\t\t\telse\n\t\t\t\tthis.setKeyVal(output, (plugin.path + '.' + plugin.name).split('.'), plugin.value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tresolveDependencies(mainConfig: PlayerConfiguratorPlugin[],\n\t\tresolveConfig: PlayerConfiguratorPlugin[] | null = null): void {\n\t\tlet config = mainConfig;\n\t\tif (resolveConfig != null)\n\t\t\tconfig = resolveConfig;\n\t\tfor (let plugin of config) {\n\t\t\tif (plugin.children != null && plugin.children.length > 0)\n\t\t\t\tthis.resolveDependencies(mainConfig, plugin.children);\n\t\t\telse\n\t\t\t\tthis.resolveDependency(mainConfig, '::' + plugin.name + '::', plugin.value);\n\t\t}\n\t}\n\n\tcheckIfIsAdvanceGroup(group: string[] | null): boolean | null {\n\t\tif (group == null || group[1] == null)\n\t\t\treturn null;\n\t\treturn group[1].indexOf('advance') > -1;\n\t}\n\n\tgetAdvanceGroupValue(group: string[] | null): boolean | null {\n\t\tif (group == null || group[1] == null)\n\t\t\treturn null;\n\t\tlet stringVal = group[1].split(':')[1];\n\t\treturn stringVal == 'true';\n\t}\n\n\tupdateAdvanceValue(group: PlayerConfiguratorGroupModel) {\n\t\tfor (let i of group.items) {\n\t\t\tif (i.name == 'advance') {\n\t\t\t\ti.value = group.advanceValue ? group.advanceValue : i.defaultValue;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tfindRGB(config: PlayerConfiguratorPlugin[]): PlayerConfiguratorPlugin[] {\n\t\tlet rgbs: PlayerConfiguratorPlugin[] = [];\n\t\tfor (let conf of config)\n\t\t\tif (conf.children != null && conf.children.length > 0)\n\t\t\t\trgbs = rgbs.concat(this.findRGB(conf.children));\n\t\t\telse if (conf.type == 'RGB')\n\t\t\t\trgbs.push(conf);\n\t\treturn rgbs;\n\t}\n\n\tfindPluginByName(name: string, data: PlayerConfiguratorPlugin[]): PlayerConfiguratorPlugin | null {\n\t\tfor (let i = 0, t = data.length; i < t; i++)\n\t\t\tif (data[i].name == name)\n\t\t\t\treturn data[i];\n\n\t\tfor (let i = 0, t = data.length; i < t; i++)\n\t\t\tif (data[i].children) {\n\t\t\t\tconst val = this.findPluginByName(name, data[i].children);\n\t\t\t\tif (val != null)\n\t\t\t\t\treturn val;\n\t\t\t}\n\n\t\treturn null;\n\t}\n\n\tfindConfigByName(name: string, data: PlayerConfiguratorPlugin[]): PlayerConfiguratorPlugin | null {\n\t\tlet val: PlayerConfiguratorPlugin | null = null;\n\t\tfor (let i = 0, t = data.length; i < t; i++)\n\t\t\tif (data[i].name == name) {\n\t\t\t\tval = data[i];\n\t\t\t\tbreak;\n\t\t\t}\n\t\treturn val;\n\t}\n\n\tprivate updateConfigByPath(config: PlayerConfiguratorPlugin[], searchPath: string, value: any, parent: any = null) {\n\t\tfor (let plugin of config) {\n\t\t\tif (plugin.children != null && plugin.children.length > 0) {\n\t\t\t\tthis.updateConfigByPath(plugin.children, searchPath, value, plugin);\n\t\t\t} else {\n\t\t\t\tif (plugin.path + '.' + plugin.name == searchPath) {\n\t\t\t\t\tplugin.value = value;\n\t\t\t\t\t// When it is multichoice group (optional settings group, which can be enabled/disabled for\n\t\t\t\t\t// additional features) and when we have value for such group when it mean we should it enable.\n\t\t\t\t\t// Disabled features are not present at all in conf_json object.\n\t\t\t\t\tif (parent && parent.multichoice) {\n\t\t\t\t\t\tparent.checked = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (plugin.defaultValue != null\n\t\t\t\t\t\t&& typeof plugin.defaultValue == 'string'\n\t\t\t\t\t\t&& plugin.defaultValue.indexOf('::') < 0) {\n\t\t\t\t\t\tplugin.defaultValue = plugin.value;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate resolveDependency(mainConfig: PlayerConfiguratorPlugin[], pattern: string, value: string): void {\n\t\tfor (let plugin of mainConfig) {\n\t\t\tif (plugin.children != null && plugin.children.length > 0)\n\t\t\t\tthis.resolveDependency(plugin.children, pattern, value);\n\t\t\telse\n\t\t\t\tif (plugin.defaultValue != null\n\t\t\t\t\t&& typeof plugin.defaultValue == 'string'\n\t\t\t\t\t&& plugin.defaultValue.indexOf(pattern) > -1) {\n\t\t\t\t\tplugin.value = plugin.defaultValue.split(pattern).join(value);\n\t\t\t\t}\n\t\t}\n\t}\n\n\tprivate setKeyVal(o: any, path: string[], value: any): void {\n\t\tvar k = path[0];\n\t\tif (path.length == 1) {\n\t\t\tif (value != null)\n\t\t\t\tif (o[k] == null)\n\t\t\t\t\to[k] = value;\n\t\t\t\telse\n\t\t\t\t\to[k] = [value].concat(o[path[0]]);\n\t\t} else {\n\t\t\tif (o[k] == null)\n\t\t\t\to[k] = {};\n\t\t\tpath.shift();\n\t\t\tthis.setKeyVal(o[k], path, value);\n\t\t}\n\t}\n\n\tprivate hasGrandChild(p: PlayerConfiguratorPlugin) {\n\t\treturn (p.children == null) ? false :\n\t\t\t(p.children.length == 0) ? false :\n\t\t\t\t(p.children[0] == null) ? false :\n\t\t\t\t\t(p.children[0].children != null);\n\t}\n\n\tprivate flattenObject(values: any, objectPath: string, ret: any) {\n\t\tlet keys = Object.keys(values);\n\t\tlet key = keys[0];\n\t\tlet value = values[key];\n\t\tif (keys.length == 1) {\n\t\t\tobjectPath += key + '.';\n\t\t\tthis.flattenObject(value, objectPath, ret);\n\t\t} else\n\t\t\tfor (let k of keys) {\n\t\t\t\tvalue = values[k];\n\t\t\t\tfor (key in value)\n\t\t\t\t\tret[objectPath + k + '.' + key] = value[key];\n\t\t\t}\n\t}\n\n\tprivate getGroupAdvanceValue(item: NameMapItem): boolean | null {\n\t\tfor (let p of item.plugins)\n\t\t\tif (p.name == 'advance' && p.type == HaxeTypes[HaxeTypes.Bool])\n\t\t\t\treturn typeof p.value != undefined ? p.value : p.defaultValue;\n\t\treturn null;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/model/player.configurator.parser.ts","import { NgModule } from '@angular/core';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { PlayerService } from '../../service/player.service';\nimport { PlayerRoute, PlayerRouteData, PlayerRouteParam } from './model/player.model';\nimport { PlayerBuilderModule } from './modules/builder/player.builder.module';\nimport { PlayerEmbedCodeModule } from './modules/embedcode/player.embed.code.module';\nimport { PlayerEmbederModule } from './modules/embeder/player.embeder.module';\nimport { PlayerEmbederService } from './modules/embeder/service/player.embeder.service';\nimport { PlayerConfiguratorModule } from './modules/legacy/configurator/player.configurator.module';\nimport { PlayerListModule } from './modules/list/player.list.module';\nimport { PlayerVersionsModule } from './modules/versions/player.versions.module';\nimport { PlayerListResolveService } from './service/player.list.resolve.service';\nimport { PlayerListDataService } from './service/player.list.data.service';\n\nexport const PlayerRoutes: Routes = [\n\t{\n\t\tpath: '',\n\t\tresolve: {\n\t\t\t[PlayerRouteData.playersList]: PlayerListResolveService\n\t\t},\n\t\tchildren: [\n\t\t\t{ path: PlayerRoute.list, loadChildren: () => PlayerListModule },\n\t\t\t{\n\t\t\t\tpath: `:${PlayerRouteParam.id}`,\n\t\t\t\tchildren: [\n\t\t\t\t\t{ path: PlayerRoute.builder, loadChildren: () => PlayerBuilderModule },\n\t\t\t\t\t{ path: PlayerRoute.configurator, loadChildren: () => PlayerConfiguratorModule },\n\t\t\t\t\t{ path: PlayerRoute.embedcode, loadChildren: () => PlayerEmbedCodeModule },\n\t\t\t\t\t{ path: PlayerRoute.embeder, loadChildren: () => PlayerEmbederModule },\n\t\t\t\t\t{ path: PlayerRoute.versions, loadChildren: () => PlayerVersionsModule },\n\t\t\t\t\t{ path: '', redirectTo: PlayerRoute.builder, pathMatch: 'full' },\n\t\t\t\t\t{ path: '**', redirectTo: PlayerRoute.builder }\n\t\t\t\t]\n\t\t\t},\n\t\t\t{ path: '', redirectTo: PlayerRoute.list, pathMatch: 'full' },\n\t\t\t{ path: '**', redirectTo: PlayerRoute.list }\n\t\t]\n\t},\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nlet LOCAL_PROVIDERS = [\n\tPlayerService,\n\tPlayerEmbederService,\n\tPlayerListResolveService,\n\tPlayerListDataService,\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tRouterModule.forChild(PlayerRoutes),\n\t],\n\tproviders: [\n\t\t...LOCAL_PROVIDERS,\n\t],\n})\nexport class PlayerModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/player.module.ts","import { Injectable } from '@angular/core';\nimport { TranslationService } from 'angular-l10n';\nimport { Observable, Subject, Subscription } from 'rxjs';\n\nimport { PlayerConfiguratorPlugin } from '../../../../../../model/api.model';\nimport { ViewService } from '../../../../../../service/view.service';\nimport { ModalService } from '../../../../../modal';\nimport { PlayerConfiguratorPreviewVideoService } from '../component/preview/video/player.configurator.preview.video.service';\nimport {\n\tBsplayerColorScheme,\n\tPlayerConfiguratorGroupModel,\n\tPlayerConfiguratorResolvedModel\n} from '../model/player.configurator.model';\nimport { PlayerConfiguratorParser } from '../model/player.configurator.parser';\n\n/**\n * Created by mthk on 18/10/16.\n */\n@Injectable()\nexport class PlayerConfiguratorViewService {\n\tid: number | null;\n\tname: string | null;\n\tupdateAt: number | undefined;\n\tcreatedAt: number | undefined;\n\tconfig: PlayerConfiguratorPlugin[] | undefined;\n\tconfigCache: string;\n\tplayerConfig: any;\n\tconfigCacheSubscription: Subscription | null;\n\tpreviewInput: HTMLInputElement;\n\tpreviewForm: HTMLFormElement;\n\tpreviewWindow: Window;\n\ttickSubject: Subject<any>;\n\ttickStream$: Observable<any>;\n\tprivate askSkinColorResetCloseSubscription: Subscription | null;\n\n\tconstructor(public video: PlayerConfiguratorPreviewVideoService,\n\t\tprivate parser: PlayerConfiguratorParser,\n\t\tprivate view: ViewService,\n\t\tprivate translation: TranslationService,\n\t\tprivate modal: ModalService) {\n\t\tthis.tickSubject = new Subject<any>();\n\t\tthis.tickStream$ = this.tickSubject.asObservable();\n\t}\n\n\tonRoutingChange(): void {\n\t\tthis.video.onRoutingChange(this.config);\n\t}\n\n\tdestroy() {\n\t\tthis.id = null;\n\t\tthis.name = null;\n\t\tthis.updateAt = undefined;\n\t\tthis.createdAt = undefined;\n\t\tthis.config = undefined;\n\t\tthis.playerConfig = null;\n\t\tthis.configCacheSub = null;\n\t}\n\n\ttick() {\n\t\tthis.tickSubject.next(null);\n\t}\n\n\tparse(data: PlayerConfiguratorResolvedModel) {\n\t\tthis.id = data.playerConfig.id;\n\t\tthis.name = data.playerConfig.name;\n\t\tthis.updateAt = data.playerConfig.updated_at;\n\t\tthis.createdAt = data.playerConfig.created_at;\n\t\tthis.config = data.playerDefaults;\n\t\tthis.playerConfig = JSON.parse(data.playerConfig.conf_json);\n\t\tthis.parser.fixForSkinMainColorBackwardCompatibility(this.playerConfig);\n\t\tthis.configCacheSub = Observable.timer(250).subscribe(() => this.updateCaches());\n\t}\n\n\tupdateCaches() {\n\t\tthis.configCache = JSON.stringify(this.config);\n\t\tthis.checkSkinColorReset();\n\t}\n\n\tcheckSkinColorReset() {\n\t\tlet reset = this.parser.findPluginByName('resetColorScheme', this.config);\n\t\tif (reset != null) {\n\t\t\treset.hidden = JSON.stringify(this.video.colorScheme) === this.video.defaultColorSchemeCache;\n\t\t\tthis.tick();\n\t\t}\n\t}\n\n\tresetColorScheme() {\n\t\tconst scheme = JSON.parse(this.video.defaultColorSchemeCache);\n\t\tthis.parser.updateConfigWithColorScheme(this.config, scheme, true);\n\t\tthis.video.colorScheme = scheme;\n\t\tthis.checkSkinColorReset();\n\t\tthis.updatePlayerWithColorScheme(this.config);\n\t}\n\n\tupdateConfig(colorScheme: BsplayerColorScheme) {\n\t\tif (this.config == null)\n\t\t\treturn;\n\t\tthis.parser.updateConfigWithColorScheme(this.config, colorScheme, true);\n\t\tthis.parser.addValueAttribute(this.config);\n\t\tthis.parser.populateConfigWithPlayerData(this.config, this.playerConfig);\n\t\tthis.parser.resolveDependencies(this.config);\n\t\tthis.updatePreview();\n\t}\n\n\tupdateAdvanceGroupHidden(group: PlayerConfiguratorGroupModel) {\n\t\tthis.parser.updateAdvanceValue(group);\n\t\tfor (let p of group.items) {\n\t\t\tif (this.parser.checkIfIsAdvanceGroup(p.group)) {\n\t\t\t\tp.hidden = group.advanceValue\n\t\t\t\t\t? group.advanceValue != this.parser.getAdvanceGroupValue(p.group)\n\t\t\t\t\t: this.parser.getAdvanceGroupValue(p.group);\n\t\t\t}\n\t\t}\n\t}\n\n\tparseOutput() {\n\t\tif (this.config == null)\n\t\t\treturn;\n\t\treturn this.parser.parseOutput(this.config);\n\t}\n\n\tfindConfigByPath(path: string[]): PlayerConfiguratorPlugin | null {\n\t\tlet children = this.config, val: any = {};\n\t\twhile (path.length > 0) {\n\t\t\tlet p = path.shift();\n\t\t\tif (p && children) {\n\t\t\t\tval = this.parser.findConfigByName(p, children);\n\t\t\t\tchildren = val.children;\n\t\t\t}\n\t\t}\n\t\treturn val;\n\t}\n\n\taskSkinColorReset(value: string, type: 'BASE' | 'COLOR'): Observable<boolean> {\n\t\tlet answer = new Subject<boolean>();\n\t\tthis.modal.prompt(`${this.translation.translate('PLAYER.CONFIG.MODAL.COLOR_RESET.' + type, { color: value })}<p class=\"color-sample\"><span style=\"background-color:${value}\"></span></p>`, [{\n\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.COLOR_RESET.YES'),\n\t\t\tfa: 'check', close: true, click: () => { this.askSkinColorResetCloseSub = null; answer.next(true); }\n\t\t}, {\n\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.COLOR_RESET.NO'),\n\t\t\tfa: 'ban', close: true, click: () => { this.askSkinColorResetCloseSub = null; answer.next(false); }\n\t\t}]);\n\t\tthis.askSkinColorResetCloseSub = this.modal.closeStream$.subscribe(() => { this.askSkinColorResetCloseSub = null; answer.next(false); });\n\t\treturn answer.asObservable();\n\t}\n\n\tget hasChanged() {\n\t\treturn JSON.stringify(this.config) !== this.configCache;\n\t}\n\n\tprivate set configCacheSub(s: Subscription | null) {\n\t\tif (this.configCacheSubscription != null)\n\t\t\tthis.configCacheSubscription.unsubscribe();\n\t\tthis.configCacheSubscription = s;\n\t}\n\n\tprivate set askSkinColorResetCloseSub(s: Subscription | null) {\n\t\tif (this.askSkinColorResetCloseSubscription != null)\n\t\t\tthis.askSkinColorResetCloseSubscription.unsubscribe();\n\t\tthis.askSkinColorResetCloseSubscription = s;\n\t}\n\n\tprivate updatePreview(conf?: PlayerConfiguratorPlugin[]) {\n\t\tconst c = conf == null ? this.config : conf;\n\n\t\tif (c == null)\n\t\t\treturn;\n\n\t\tfor (let plugin of c) {\n\n\t\t\tif (plugin.children != null && plugin.children.length > 0) {\n\t\t\t\tthis.updatePreview(plugin.children);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* skin */\n\t\t\tif (plugin.name == 'skin' && this.config != null) {\n\t\t\t\tthis.video.changeSkin(this.config, plugin.value, false);\n\t\t\t\tthis.parser.resolveDependencies(this.config);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* color */\n\t\t\tif (plugin.group[0] == 'color' && plugin.name == 'advance') {\n\t\t\t\tif (plugin.value == true)\n\t\t\t\t\tthis.updatePlayerWithColorScheme(c);\n\t\t\t\telse\n\t\t\t\t\tthis.updatePlayerWithBaseColor(c);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t/* endSplash */\n\t\t\tif (plugin.name == 'endSplash' && this.video.api) {\n\t\t\t\tthis.video.api.skinConfig_editEndSplash(plugin.value);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate updatePlayerWithColorScheme(c: PlayerConfiguratorPlugin[]) {\n\t\tlet configColorScheme: { [name: string]: string } | null = null;\n\t\tfor (const color of this.parser.findRGB(c)) {\n\t\t\tif (color.name == 'COLORS_SHADE_MAP_BASE') {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tif (configColorScheme == null)\n\t\t\t\t\tconfigColorScheme = {};\n\t\t\t\tconfigColorScheme[color.name] = color.value;\n\t\t\t}\n\t\t}\n\t\tif (configColorScheme != null)\n\t\t\tthis.video.api.skinConfig_updateColorScheme(configColorScheme);\n\t}\n\n\tprivate updatePlayerWithBaseColor(c: PlayerConfiguratorPlugin[]) {\n\t\tfor (const color of this.parser.findRGB(c)) {\n\t\t\tif (color.name == 'COLORS_SHADE_MAP_BASE') {\n\t\t\t\tthis.video.api.skinConfig_updateColorBase(color.value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/service/player.configurator.service.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslationService } from 'angular-l10n';\nimport { PlayerConfiguratorPlugin } from '../../../../../../../../model/api.model';\nimport { SidebarService } from '../../../../../../../../service/sidebar.service';\nimport { PlayerConfiguratorGroupModel } from '../../../model/player.configurator.model';\nimport { PlayerConfiguratorParser } from '../../../model/player.configurator.parser';\nimport { PlayerConfiguratorViewService } from '../../../service/player.configurator.service';\n\n/**\n * Created by mthk on 21/10/16.\n */\n@Component({\n\tselector: 'player-configurator-form-groups',\n\ttemplate: require('./player.configurator.form.groups.html'),\n\tstyles: [require('./player.configurator.form.groups.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerConfiguratorFormGroups implements OnInit {\n\n\tpath: string[];\n\tconfig: PlayerConfiguratorPlugin | null;\n\tgroups: PlayerConfiguratorGroupModel[] | null;\n\tactivateSwitchModel: any | null;\n\n\tconstructor(public service: PlayerConfiguratorViewService,\n\t\tpublic translation: TranslationService,\n\t\tprivate sidebar: SidebarService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate parser: PlayerConfiguratorParser,\n\t\tprivate router: Router) {\n\t\tthis.service.tickStream$.subscribe(() => this.cdr.markForCheck());\n\t\tthis.parse();\n\t}\n\n\tngOnInit() {\n\t\tif (this.groups)\n\t\t\tfor (let g of this.groups)\n\t\t\t\tthis.service.updateAdvanceGroupHidden(g);\n\t}\n\n\tcheckedChange() {\n\t\tif (this.config) {\n\t\t\tthis.config.checked = !this.config.checked;\n\t\t\tthis.service.tick();\n\t\t\tthis.sidebar.update();\n\t\t}\n\t}\n\n\tadvanceChange(group: PlayerConfiguratorGroupModel, value: boolean) {\n\t\tif (this.config == null || group.advanceValue == value)\n\t\t\treturn;\n\t\tfor (let p of group.items)\n\t\t\tif (this.parser.checkIfIsAdvanceGroup(p.group))\n\t\t\t\tif (p.name === 'COLORS_SHADE_MAP_BASE') {\n\t\t\t\t\tif (!value)\n\t\t\t\t\t\tthis.service.askSkinColorReset(p.value, 'BASE')\n\t\t\t\t\t\t\t.subscribe(ok => this.updateAdvanceChange(group, p, !ok));\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.updateAdvanceChange(group, p, value);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t}\n\n\tgetInputNgClass(data: PlayerConfiguratorPlugin) {\n\t\tif (data.group == undefined)\n\t\t\treturn null;\n\t\tlet name = data.group[0].split(' ').join('_').toLowerCase();\n\t\treturn { [name]: true };\n\t}\n\n\tprivate updateAdvanceChange(group: PlayerConfiguratorGroupModel, p: PlayerConfiguratorPlugin, value: boolean) {\n\t\tgroup.advanceValue = value;\n\t\tthis.service.updateAdvanceGroupHidden(group);\n\n\t\t// HACK: for updating player colors after change from advance color edit to basic\n\t\tif (value === false)\n\t\t\tthis.service.video.changeColor(this.service.config, p.name, p.value, true);\n\n\t\tthis.service.tick();\n\t}\n\n\tprivate parse() {\n\t\tif (this.router.url != '/') {\n\t\t\tlet tree = this.router.url.split('/').reverse();\n\t\t\tthis.path = [];\n\t\t\tfor (let i = 0, t = tree.length; i < t; i++) {\n\t\t\t\tif (tree[i] == 'configurator')\n\t\t\t\t\tbreak;\n\t\t\t\tthis.path.push(tree[i]);\n\t\t\t}\n\t\t\tif (this.path.length > 0) {\n\t\t\t\tthis.path = this.path.reverse();\n\t\t\t\tthis.config = this.service.findConfigByPath(this.path.slice(0));\n\t\t\t}\n\t\t\tif (this.config != null && this.config.children) {\n\t\t\t\tthis.groups = this.parser.mapGroups(this.config.children);\n\t\t\t\tif (this.config.title == null || this.config.title[0] == null)\n\t\t\t\t\treturn;\n\t\t\t\tthis.activateSwitchModel = {\n\t\t\t\t\tleft: { on: this.config.title[0], off: this.config.title[0] },\n\t\t\t\t\tright: { on: 'is active', off: 'is deactivated' }\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/component/form/groups/player.configurator.form.groups.ts","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Localization, LocaleService, TranslationService } from 'angular-l10n';\n\n@Component({\n\tselector: 'docs-link',\n\ttemplate: require('./docsLink.component.html'),\n\tstyles: [require('./docsLink.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DocsLinkComponent extends Localization {\n\t@Input() link: string;\n\tconstructor(public locale: LocaleService,\tpublic translation: TranslationService) {\n\t\tsuper(locale, translation);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/component/form/inputs/docsLink/docsLink.component.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { LocaleService, TranslationService } from 'angular-l10n';\nimport { Subscription } from 'rxjs';\n\nimport { PlayerConfiguratorPlugin } from '../../../../../../../../model/api.model';\nimport { UrlService } from '../../../../../../../../service/url.service';\nimport { ViewService } from '../../../../../../../../service/view.service';\nimport { DropdownModel } from '../../../../../../../form/dropdown/dropdown.model';\nimport { ModalService } from '../../../../../../../modal/modal.service';\nimport { HaxeTypes } from '../../../model/player.configurator.model';\nimport { PlayerConfiguratorParser } from '../../../model/player.configurator.parser';\nimport { PlayerConfiguratorViewService } from '../../../service/player.configurator.service';\n\n/**\n * Created by mthk on 21/10/16.\n */\n@Component({\n\tselector: 'player-config-form-inputs',\n\thost: {\n\t\t'[class.form-group-inputs-full]': 'isFull(data)',\n\t\t'[class.form-group-inputs-small]': 'isSmall(data)',\n\t\t'[class.hidden]': 'isHidden',\n\t\t// '[class.reset]': 'isResetBtn'\n\t},\n\ttemplate: require('./player.configurator.form.inputs.html'),\n\tstyles: [require('./player.configurator.form.inputs.scss')],\n\tinputs: ['data', 'dataDelimiter'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerConfiguratorFormInputs implements OnInit, OnDestroy {\n\n\tdata: PlayerConfiguratorPlugin | null;\n\tdataDelimiter = ',';\n\thxType = HaxeTypes;\n\tcodemirrorConfig = {\n\t\tmode: { name: 'javascript', json: true },\n\t\tshowCursorWhenSelecting: true,\n\t\tmatchBrackets: true,\n\t\tmatchTags: true,\n\t\tshowTrailingSpace: true,\n\t\tautoCloseBrackets: true,\n\t\tautoCloseTags: true,\n\t\tlineNumbers: true,\n\t\tgutters: ['CodeMirror-lint-markers'],\n\t\tlint: true,\n\t\tindentUnit: 1,\n\t\tautofocus: false\n\t};\n\n\tprivate tickSubscription: Subscription;\n\tprivate resizeSubscription: Subscription;\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate service: PlayerConfiguratorViewService,\n\t\tprivate parser: PlayerConfiguratorParser,\n\t\tprivate modal: ModalService,\n\t\tprivate url: UrlService,\n\t\tprivate view: ViewService,\n\t\tprivate cdr: ChangeDetectorRef) { }\n\n\tngOnInit() {\n\t\tthis.resizeSubscription = this.view.resizeStream$.subscribe(() => this.cdr.markForCheck());\n\t\tthis.tickSubscription = this.service.tickStream$.subscribe(() => this.cdr.markForCheck());\n\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.resizeSubscription != null) this.resizeSubscription.unsubscribe();\n\t\tif (this.tickSubscription != null) this.tickSubscription.unsubscribe();\n\t}\n\n\tonResetData(data: PlayerConfiguratorPlugin, value: any) {\n\t\tthis.service.askSkinColorReset(value, data.name == 'COLORS_SHADE_MAP_BASE' ? 'BASE' : 'COLOR').subscribe(ok => {\n\t\t\tif (ok) {\n\t\t\t\tthis.onChangeData(data, value);\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t});\n\t}\n\n\tonChangeData(data: PlayerConfiguratorPlugin, value: any) {\n\t\t/*\n\t\t\tBecause changing COLORS_SHADE_MAP_BASE overrides other skin colours due to COLORS_SHADE_MAP values,\n\t\t\tso calling changeColor need to be disabled if value didn't change, because on initialization,\n\t\t\tit overrides value for other colours\n\t\t*/\n\t\tif (data.type == HaxeTypes[HaxeTypes.RGB] && data.name) {\n\t\t\tif (data.name == 'COLORS_SHADE_MAP_BASE' && data.value === value)\n\t\t\t\treturn;\n\t\t\tdata.value = value;\n\t\t\tthis.service.video.changeColor(this.service.config, data.name, data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tdata.value = value;\n\n\t\tif (data.name == 'shareButtons') {\n\t\t\tthis.service.video.changeShareButtons(data.value.split(','));\n\t\t\treturn;\n\t\t}\n\n\t\tif(data.name == 'pictureInPictureButtonVisible') {\n\t\t\tthis.service.video.changePictureInPictureButtonVisibility(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif(data.name == 'videoCastEnabled') {\n\t\t\tthis.service.video.changeVideoCastEnabled(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'skin' && this.service.config) {\n\t\t\tconst baseColorPlugin = this.parser.findPluginByName('COLORS_SHADE_MAP_BASE', this.service.config);\n\t\t\tconst baseColorValue = baseColorPlugin ? baseColorPlugin.value : null;\n\t\t\tthis.service.video.changeSkin(this.service.config, data.value, true);\n\t\t\tthis.parser.resolveDependencies(this.service.config);\n\t\t\tif (baseColorValue)\n\t\t\t\tthis.service.video.changeColor(this.service.config, 'COLORS_SHADE_MAP_BASE', baseColorValue);\n\t\t\tthis.service.checkSkinColorReset();\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'logoFile') {\n\t\t\tthis.service.video.changeLogoFile(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'logoLink') {\n\t\t\tthis.service.video.changeLogoLink(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'logoLinkTarget') {\n\t\t\tthis.service.video.changeLogoTarget(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'logoXPosition') {\n\t\t\tthis.service.video.changeLogoXPosition(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'logoYPosition') {\n\t\t\tthis.service.video.changeLogoYPosition(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'logoAutohide') {\n\t\t\tthis.service.video.changeLogoAutohide(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'endSplash') {\n\t\t\tthis.service.video.changeEndSplash(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'volume') {\n\t\t\tthis.service.video.changeVolume(data.value);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.name == 'resetColorScheme') {\n\t\t\tthis.service.askSkinColorReset(this.service.video.resetColor, 'BASE').subscribe(ok => {\n\t\t\t\tif (ok)\n\t\t\t\t\tthis.service.resetColorScheme();\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t}\n\n\tformatCodeValue(input: string, pretty: boolean): string {\n\t\tlet output = input + '';\n\t\ttry {\n\t\t\tlet json = JSON.parse(input);\n\t\t\toutput = JSON.stringify(json, null, pretty ? '\\t' : undefined);\n\t\t} catch (e) { }\n\t\treturn output;\n\t}\n\n\tgetDropdownModel(data: PlayerConfiguratorPlugin): DropdownModel[] {\n\t\tlet model: DropdownModel[] = [];\n\t\tfor (let i = 0; i < data.values.length; i++)\n\t\t\tmodel.push({ value: data.values[i], label: data.values[i] });\n\t\treturn model;\n\t}\n\n\tstringToArray(data: string | null): string[] | null {\n\t\tif (data == null)\n\t\t\treturn null;\n\t\treturn data.split(this.dataDelimiter);\n\t}\n\n\tgetRadioIconMap(): any {\n\t\treturn {\n\t\t\t'embed': 'fa-code',\n\t\t\t'mail': 'fa-at',\n\t\t\t'facebook': 'fa-facebook-official',\n\t\t\t'twitter': 'fa-twitter',\n\t\t\t'linkedin': 'fa-linkedin'\n\t\t};\n\t}\n\n\tisFull(config: PlayerConfiguratorPlugin): boolean {\n\t\treturn !this.isSmall(config);\n\t}\n\n\tisSmall(config: PlayerConfiguratorPlugin): boolean {\n\t\treturn this.view.width > 1600 && (\n\t\t\t(config.type == HaxeTypes[HaxeTypes.RGB] && config.name != 'COLORS_SHADE_MAP_BASE')\n\t\t\t ||\n\t\t\t(config.name == 'logoLinkTarget' || config.name == 'logoAutohide' || config.name == 'logoXPosition' || config.name == 'logoYPosition')\n\t\t);\n\t}\n\n\tget isResetBtn(): boolean {\n\t\treturn this.data.type == HaxeTypes[HaxeTypes.String] && this.data.value != null && this.data.value.indexOf('reset') > -1;\n\t}\n\n\tget isHidden(): boolean {\n\t\treturn this.data.hidden;\n\t}\n\n\tarrayToString(data: string[] | null): string {\n\t\tif (data == null)\n\t\t\treturn '';\n\t\tdata = data.filter((s: string) => { return s != null && s != '' && typeof s != 'undefined'; });\n\t\tif (data.length > 0)\n\t\t\treturn data.join(this.dataDelimiter);\n\t\telse return '';\n\t}\n\n\tgetImageGridUrlParser(name: string): (v: string) => string | null {\n\t\tif (name == 'skin') return (v: string) => this.url.file('img/skins/' + v + '/screenshot.png');\n\t\tif (name == 'endSplash') return (v: string) => this.url.file('img/endsplash/' + v + '.png');\n\t\treturn (v: string) => { return null; };\n\t}\n\n\tonTooBigLogo(data: any) {\n\t\t//todo: change modal type from prompt to info\n\t\tthis.modal.prompt(this.translation.translate('PLAYER.CONFIG.TOO_BIG_LOGO', {\n\t\t\tlimitWidth: data.maxWidth,\n\t\t\tlimitHeight: data.maxHeight,\n\t\t\tlimitFileSize: data.maxFileSize\n\t\t}), []);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/component/form/inputs/player.configurator.form.inputs.ts","/**\n * Created by mthk on 21/10/16.\n */\nimport { ChangeDetectionStrategy, Component, ElementRef, ViewChild } from '@angular/core';\nimport { ActivatedRoute, UrlSegment } from '@angular/router';\n\nimport { PlayerConfiguratorPlugin } from '../../../../../../../model/api.model';\nimport { PlayerConfiguratorViewService } from '../../service/player.configurator.service';\n\n@Component({\n\tselector: 'player-configurator-form',\n\ttemplate: require('./player.configurator.form.html'),\n\tstyles: [require('./player.configurator.form.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerConfiguratorForm {\n\n\t@ViewChild('outletContainer') outlet: ElementRef;\n\n\tchildren: PlayerConfiguratorPlugin[] | undefined;\n\n\tconstructor(public service: PlayerConfiguratorViewService,\n\t\tprivate route: ActivatedRoute) {\n\t\tthis.route.url.subscribe((u: UrlSegment[]) => this.parse(u.toString()));\n\t}\n\n\tprivate parse(path: string) {\n\t\t// console.debug(`[FORM].parse`, path);\n\t\tif (path == 'configurator') {\n\t\t\tthis.children = this.service.config;\n\t\t\t// console.debug(`[FORM].parse.children`, this.children);\n\t\t} else if (path != '') {\n\t\t\tlet config = this.service.findConfigByPath([path]);\n\t\t\t// console.debug(`[FORM].parse.findConfigByPath`, config);\n\t\t\tif (config != null) {\n\t\t\t\tthis.children = config.children;\n\t\t\t\t// console.debug(`[FORM].parse.children`, this.children);\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/component/form/player.configurator.form.ts","import { Injectable } from '@angular/core';\nimport { TranslationService } from 'angular-l10n';\nimport { FlashMessagesService } from 'angular2-flash-messages';\nimport { Observable, Subject } from 'rxjs';\n\nimport { PlayerService } from '../../../../../../service/player.service';\nimport { UserService } from '../../../../../../service/user.service';\nimport { ViewService } from '../../../../../../service/view.service';\nimport { ModalService } from '../../../../../modal';\nimport { PlayerConfiguratorViewService } from './player.configurator.service';\n\n@Injectable()\nexport class PlayerConfiguratorSaveService {\n\n\tprivate savedSub: Subject<boolean>;\n\tconstructor(\n\t\tpublic view: ViewService,\n\t\tpublic configService: PlayerConfiguratorViewService,\n\t\tpublic translation: TranslationService,\n\t\tprivate playerService: PlayerService,\n\t\tprivate user: UserService,\n\t\tprivate modal: ModalService,\n\t\tprivate flash: FlashMessagesService\n\t) { }\n\n\task(): Observable<boolean> {\n\t\tthis.view.spinner(false);\n\t\tlet answer = new Subject<boolean>();\n\t\tthis.modal.prompt(this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.TEXT'), [\n\t\t\t{ label: this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.SAVE'), fa: 'save', close: true, click: () => this.save().subscribe(ok => answer.next(ok)) },\n\t\t\t{ label: this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.DONT_SAVE'), fa: 'trash', close: true, click: () => answer.next(true) },\n\t\t\t{ label: this.translation.translate('PLAYER.CONFIG.MODAL.SAVE_CHANGES.CANCEL'), fa: 'ban', close: true, click: () => answer.next(false) }\n\t\t]);\n\t\treturn answer.asObservable();\n\t}\n\n\tsave(): Observable<boolean> {\n\t\tthis.savedSub = new Subject<boolean>();\n\t\tthis.view.spinner(true);\n\t\tconst conf = this.configService.parseOutput();\n\t\t//// delete conf.bs.player.config.SkinAndColor.COLORS_SHADE_MAP_BASE;\n\t\t//// delete conf.bs.player.config.SkinAndColor.advance;\n\t\tthis.playerService.updatePlayer(this.user.accountId, this.configService.id.toString(), {\n\t\t\tname: this.configService.name ? this.configService.name : 'new player',\n\t\t\tconf_json: JSON.stringify(conf)\n\t\t}).subscribe(null, e => this.showError(e, () => this.save()), () => {\n\t\t\tthis.flash.show(this.translation.translate('PLAYER.VERSIONS.CHANGES_SAVED_NOTIFICATION'), { cssClass: 'alert-success', timeout: 2000 });\n\t\t\tthis.view.spinner(false);\n\t\t\tthis.askPublish();\n\t\t});\n\t\treturn this.savedSub.asObservable();\n\t}\n\n\taskPublish() {\n\t\tthis.modal.prompt(this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.TEXT'), [{\n\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.YES'),\n\t\t\tfa: 'paper-plane', close: true, click: () => this.publish()\n\t\t}, {\n\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.PUBLISH.NO'),\n\t\t\tfa: 'ban', close: true, click: () => this.savedSub.next(true)\n\t\t}]);\n\t}\n\n\tpublish() {\n\t\tthis.view.spinner(true);\n\t\tthis.playerService.generateBuild(this.user.accountId, this.configService.id.toString()).subscribe(\n\t\t\t() => this.configService.updateCaches(),\n\t\t\te => this.showError(e, () => this.publish()),\n\t\t\t() => this.savedSub.next(true));\n\t}\n\n\tprivate showError(e: any, onYes: () => void) {\n\t\tthis.view.spinner(false);\n\t\tthis.savedSub.next(false);\n\t\tthis.modal.prompt(this.translation.translate('PLAYER.CONFIG.MODAL.ERROR.SAVE.TEXT'), [{\n\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.ERROR.SAVE.YES'),\n\t\t\tfa: 'retweet', close: true, click: () => onYes()\n\t\t}, {\n\t\t\tlabel: this.translation.translate('PLAYER.CONFIG.MODAL.ERROR.SAVE.NO'),\n\t\t\tfa: 'ban', close: true\n\t\t}]);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/service/player.configurator.save.service.ts","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\n\nimport { PlayerConfiguratorViewService } from '../../../service/player.configurator.service';\n\n@Component({\n\tselector: 'player-configurator-preview-video',\n\ttemplate: '<div #player></div>',\n\tstyles: [':host{position: absolute;top: 0;left: 10px;right: 10px;bottom: 0;}:host > div{width: 100%;height: 100%;}'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerConfiguratorPreviewVideo implements OnInit, AfterViewInit, OnDestroy {\n\n\t@ViewChild('player') player: ElementRef;\n\n\tconstructor(private service: PlayerConfiguratorViewService) { }\n\n\tngOnInit() {\n\t\tthis.service.video.setup(this.player.nativeElement);\n\t\tthis.service.video.create();\n\t}\n\n\tngAfterViewInit() {\n\t\tif (this.service.video.colorScheme)\n\t\t\tthis.service.updateConfig(this.service.video.colorScheme);\n\t}\n\n\tngOnDestroy() {\n\t\tthis.service.video.destroy();\n\t\tthis.service.destroy();\n\t}\n\n\tresize(rect: ClientRect) {\n\t\t// let w = rect.width, h = rect.height, o = 20, aspect =\n\t\t// \t(this.service.ratio == PlayerConfiguratorPreviewRatio._4by3) ? 4 / 3 :\n\t\t// \t\t(this.service.ratio == PlayerConfiguratorPreviewRatio._16by10) ? 16 / 10 :\n\t\t// \t\t\t(this.service.ratio == PlayerConfiguratorPreviewRatio._16by9) ? 16 / 9 : 0;\n\t\t// if (w > h)\n\t\t// \tw = h * aspect;\n\t\t// else\n\t\t// \th = w * aspect;\n\t\t// this.renderer.setElementStyle(this.player.nativeElement, 'width', (w - o) + 'px');\n\t\t// this.renderer.setElementStyle(this.player.nativeElement, 'height', (h - o) + 'px');\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/component/preview/video/player.configurator.preview.video.ts","import {\n\tAfterViewChecked,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tOnInit,\n\tRenderer2,\n\tViewChild\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\n\nimport { ViewService } from '../../../../../../../service/view.service';\nimport { PlayerConfiguratorSaveService } from '../../service/player.configurator.save.service';\nimport { PlayerConfiguratorViewService } from '../../service/player.configurator.service';\nimport { PlayerConfiguratorPreviewVideo } from './video/player.configurator.preview.video';\nimport { PlayerConfiguratorPreviewState } from './video/player.configurator.preview.video.service';\n\n@Component({\n\tselector: 'player-configurator-preview',\n\ttemplate: require('./player.configurator.preview.html'),\n\tstyles: [require('./player.configurator.preview.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerConfiguratorPreview extends Localization implements OnInit, AfterViewChecked {\n\n\t@ViewChild('configuratorPreviewFormHead') head: ElementRef;\n\t@ViewChild('configuratorPreviewFormBody') body: ElementRef;\n\t@ViewChild('configuratorPreviewFormFoot') foot: ElementRef;\n\t@ViewChild(PlayerConfiguratorPreviewVideo) video: PlayerConfiguratorPreviewVideo;\n\tstate: PlayerConfiguratorPreviewState;\n\n\tconstructor(public view: ViewService,\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic configService: PlayerConfiguratorViewService,\n\t\tprivate renderer: Renderer2,\n\t\tprivate router: Router,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate save: PlayerConfiguratorSaveService) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit() {\n\t\tthis.view.resizeStream$.subscribe(() => this.resize());\n\t\tthis.configService.video.playerStateStream$\n\t\t\t.subscribe((s: PlayerConfiguratorPreviewState) => this.handlePlayerState(s));\n\t}\n\n\tngAfterViewChecked() {\n\t\tthis.resize();\n\t}\n\n\tresize() {\n\t\tif (this.head != null && this.body != null && this.foot != null && this.video != null) {\n\t\t\tlet head = this.head.nativeElement.getBoundingClientRect(),\n\t\t\t\tfoot = this.foot.nativeElement.getBoundingClientRect(),\n\t\t\t\ttop = (head.bottom - head.top),\n\t\t\t\tbottom = (foot.bottom - foot.top);\n\t\t\tthis.renderer.setStyle(this.body.nativeElement, 'top', top + 'px');\n\t\t\tthis.renderer.setStyle(this.body.nativeElement, 'bottom', bottom + 'px');\n\t\t\tlet bodySize = this.body.nativeElement.getBoundingClientRect();\n\t\t\tthis.video.resize(bodySize);\n\t\t}\n\t}\n\n\tsaveChanges() {\n\t\talert('Sorry updates of this player version are no longer supported. This player is read-only now. Please create new player from players list for applying changes.');\n\t    /*this.save.save().subscribe(success => {\n\t\t\tif (success) {\n\t\t\t\tthis.configService.updateCaches();\n\t\t\t\tthis.router.navigate(['../versions'], { relativeTo: this.route });\n\t\t\t}\n\t\t});*/\n\t}\n\n\tsetPlayerState(state: PlayerConfiguratorPreviewState) {\n\t\tthis.configService.video.changePlayerState(state);\n\t\tthis.configService.video.changeSkinAutohide(this.configService.video.enableSkinAutohide);\n\t\tthis.configService.tick();\n\t}\n\n\tchangeSkinAutohide(v: boolean) {\n\t\tthis.configService.video.changeSkinAutohide(v);\n\t}\n\n\tprivate handlePlayerState(s: PlayerConfiguratorPreviewState) {\n\t\t// console.debug(`[PREVIEW].handlePlayerState`, PlayerConfiguratorPreviewState[s]);\n\t\tif (this.state != s) {\n\t\t\tthis.state = s;\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/component/preview/player.configurator.preview.ts","import { ChangeDetectionStrategy, Component, OnDestroy, Renderer2, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Params, Router, Routes } from '@angular/router';\nimport { TranslationService } from 'angular-l10n';\n\nimport { PlayerConfiguratorPlugin } from '../../../../../../../model/api.model';\nimport { SidebarItem } from '../../../../../../../service/sidebar.model';\nimport { SidebarService } from '../../../../../../../service/sidebar.service';\nimport { UserService } from '../../../../../../../service/user.service';\nimport { ViewService } from '../../../../../../../service/view.service';\nimport { ModalService } from '../../../../../../modal';\nimport { ColorpickerService } from '../../../../../../colorpicker/service/colorpicker.service';\nimport { PlayerConfiguratorResolvedModel } from '../../model/player.configurator.model';\nimport { PlayerConfiguratorParser } from '../../model/player.configurator.parser';\nimport { PlayerConfiguratorSaveService } from '../../service/player.configurator.save.service';\nimport { PlayerConfiguratorViewService } from '../../service/player.configurator.service';\nimport { PlayerConfiguratorFormGroups } from '../form/groups/player.configurator.form.groups';\nimport { PlayerConfiguratorForm } from '../form/player.configurator.form';\n\n@Component({\n\tselector: 'player-configurator-view',\n\ttemplate: require('./player.configurator.view.html'),\n\tstyles: [require('./player.configurator.view.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerConfiguratorViewComponent implements OnDestroy {\n\n\tid: number;\n\tisAppInIframe: boolean = false;\n\t@ViewChild(PlayerConfiguratorForm) form: PlayerConfiguratorForm;\n\tprivate data: PlayerConfiguratorResolvedModel;\n\n\tconstructor(\n\t\tpublic service: PlayerConfiguratorViewService,\n\t\tpublic view: ViewService,\n\t\tpublic translation: TranslationService,\n\t\tpublic save: PlayerConfiguratorSaveService,\n\t\tprivate colorpickers: ColorpickerService,\n\t\tprivate sidebar: SidebarService,\n\t\tprivate renderer: Renderer2,\n\t\tprivate router: Router,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate parser: PlayerConfiguratorParser,\n\t\tprivate user: UserService,\n\t\tprivate modal: ModalService) {\n\t\tthis.isAppInIframe = this.view.checkIfAppInIframe();\n\t}\n\n\tngOnInit() {\n\t\tthis.view.spinner(true);\n\t\tthis.service.tickStream$.subscribe(() => this.parseSidebar());\n\t\tthis.route.params.subscribe((params: Params) => this.id = params['id']);\n\t\tthis.route.data.subscribe(d => this.parse(d as PlayerConfiguratorResolvedModel));\n\t\tthis.router.events.subscribe(e => this.service.onRoutingChange());\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.renderer.listen(this.form.outlet.nativeElement, 'scroll', () => this.colorpickers.close());\n\t\tthis.view.spinner(false);\n\t}\n\n\tngOnDestroy() {\n\t\tthis.sidebar.openDefault();\n\t}\n\n\tprivate parse(data: PlayerConfiguratorResolvedModel) {\n\t\tthis.data = data;\n\t\tif (this.data != null) {\n\t\t\tif (this.data.playerConfig != null && this.data.playerDefaults != null) {\n\t\t\t\tthis.parseRoutes();\n\t\t\t\tthis.parseSidebar();\n\t\t\t\tthis.service.parse(this.data);\n\t\t\t} else if (ENV != 'test')\n\t\t\t\tthrow new Error('EMPTY RESOLVER DATA');\n\t\t}\n\t}\n\n\tprivate parseRoutes() {\n\t\tif (this.route.routeConfig) {\n\t\t\tthis.route.routeConfig.children = this.mapRoutes(this.data.playerDefaults);\n\t\t\tthis.router.initialNavigation();\n\t\t\t// after @angular update  from 3.1.2 to 3.4.1, I need to force initial navigation // don't know why\n\t\t\tthis.router.navigateByUrl(this.router.url + '/' + this.route.routeConfig.children[0].path);\n\t\t}\n\t}\n\n\tprivate mapRoutes(config: PlayerConfiguratorPlugin[]): Routes {\n\t\tlet routes: Routes = [], redirectTo = config[0].name;\n\t\tconfig.forEach((p: PlayerConfiguratorPlugin) => {\n\t\t\tif (this.parser.isForm(p) && p.children != undefined)\n\t\t\t\troutes.push({ path: p.name, component: PlayerConfiguratorForm, children: this.mapRoutes(p.children) });\n\t\t\telse if (this.parser.isFormGroups(p))\n\t\t\t\troutes.push({ path: p.name, component: PlayerConfiguratorFormGroups });\n\t\t});\n\t\troutes.push({ path: '', redirectTo: redirectTo, pathMatch: 'full' });\n\t\troutes.push({ path: '**', redirectTo: redirectTo });\n\t\treturn routes;\n\t}\n\n\tprivate parseSidebar() {\n\t\tlet items = this.mapSidebar(['admin', 'player', this.id, 'configurator'], this.data.playerDefaults);\n\t\titems.push({ name: 'back', icon: 'fa-arrow-left', route: ['admin', 'player', 'list'], noHoverIcon: true });\n\t\tthis.sidebar.open({\n\t\t\trenderAt: Date.now(),\n\t\t\tname: 'configuration options',\n\t\t\titems: items\n\t\t});\n\t\t//this.sidebar.update();\n\t}\n\n\tprivate mapSidebar(route: (string | number)[], config: PlayerConfiguratorPlugin[]): SidebarItem[] {\n\t\tlet items: SidebarItem[] = [];\n\t\tfor (let p of config) {\n\t\t\tif (p.name == 'advertisements' && !this.user.hasAdsSupport())\n\t\t\t\tcontinue;\n\t\t\tif (p.title && p.name) {\n\t\t\t\tif (this.parser.isForm(p) && p.children) {\n\t\t\t\t\titems.push({\n\t\t\t\t\t\tname: p.title[0] != undefined ? this.mapSidebarName(p.title[0]) : 'undefined',\n\t\t\t\t\t\ticon: this.mapSidebarIcon(p),\n\t\t\t\t\t\troute: route.concat([p.name]),\n\t\t\t\t\t\tdata: this.mapSidebar(route.concat([p.name]), p.children)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse if (this.parser.isFormGroups(p)) {\n\t\t\t\t\titems.push({\n\t\t\t\t\t\tname: p.title[0] ? this.mapSidebarName(p.title[0]) : 'undefined',\n\t\t\t\t\t\ticon: this.mapSidebarIcon(p),\n\t\t\t\t\t\troute: route.concat([p.name]),\n\t\t\t\t\t\tchecked: p.checked\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t}\n\n\tprivate mapSidebarIcon(p: PlayerConfiguratorPlugin): string | undefined {\n\t\tlet icon: string | undefined;\n\t\tswitch (p.name) {\n\t\t\tcase 'player': icon = 'fa-play-circle'; break;\n\t\t\tcase 'skin': icon = 'fa-sliders'; break;\n\t\t\tcase 'advertisements': icon = 'fa-bullhorn'; break;\n\t\t\tcase 'statistics': icon = 'fa-pie-chart'; break;\n\t\t\t// Note: Youtube/Vimeo wrappers has been disabled (Chrome 72+ is blocking video.play() action in iframe - click and play has to be in same domain).'\n\t\t\tcase 'wrappers': icon = 'fa-television'; break;\n\t\t\tdefault: icon = undefined;\n\t\t}\n\t\treturn icon;\n\t}\n\n\tprivate mapSidebarName(name: string): string {\n\t\tswitch (name) {\n\t\t\tcase 'Advertisement plugins': return 'Advertisement';\n\t\t\tcase 'Player configuration': return 'Playback';\n\t\t\tcase 'Skin configuration': return 'Display';\n\t\t\tcase 'Terms and Conditions': return 'Terms';\n\t\t\tdefault: return name;\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/component/view/player.configurator.view.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanDeactivate, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { PlayerConfiguratorViewComponent } from '../../component/view/player.configurator.view';\nimport { PlayerConfiguratorViewService } from '../player.configurator.service';\n\n@Injectable()\nexport class PlayerConfiguratorCanDeactivateService implements CanDeactivate<PlayerConfiguratorViewComponent> {\n\n\tconstructor(private service: PlayerConfiguratorViewService) { }\n\n\tcanDeactivate(component: PlayerConfiguratorViewComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {\n\t\t// Disabling changes detection. Always allow redirection.\n\t\treturn true;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/service/guard/player.configurator.deactivate.guard.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { PlayerReadResponse } from '../../../../../../../model/api.model';\nimport { PlayerService } from '../../../../../../../service/player.service';\n\n@Injectable()\nexport class PlayerConfiguratorResolveConfig implements Resolve<PlayerReadResponse | null> {\n\n\t// constructor(private service: PlayerService, private user: UserService, private view: ViewService) { }\n\t// resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<PlayerReadResponse> | null {\n\t// \tif (this.user.accountId == null)\n\t// \t\treturn null;\n\t// \tthis.view.spinner(true);\n\t// \treturn this.service.readPlayer(this.user.accountId, route.params['id']);\n\t// }\n\tconstructor(private service: PlayerService) { }\n\tresolve(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): PlayerReadResponse | null {\n\t\treturn this.service.readedPlayer;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/service/resolve/player.configurator.resolve.config.ts","/**\n * Created by mthk on 14/10/16.\n */\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\n\nimport { PlayerConfiguratorResponse } from '../../../../../../../model/api.model';\nimport { PlayerService } from '../../../../../../../service/player.service';\nimport { ViewService } from '../../../../../../../service/view.service';\n\n@Injectable()\nexport class PlayerConfiguratorResolveDefaults implements Resolve<PlayerConfiguratorResponse> {\n\n\tconstructor(private service: PlayerService, private view: ViewService) { }\n\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<PlayerConfiguratorResponse> {\n\t\tthis.view.spinner(true);\n\t\treturn this.service.defaultPlayer();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/service/resolve/player.configurator.resolve.defaults.ts","/**\n * Created by mthk on 14/10/16.\n */\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\n\nimport { PlayerService } from '../../../../../../../service/player.service';\nimport { UrlService } from '../../../../../../../service/url.service';\nimport { UserService } from '../../../../../../../service/user.service';\nimport { ViewService } from '../../../../../../../service/view.service';\n\n@Injectable()\nexport class PlayerConfiguratorResolveSources implements Resolve<Boolean> {\n\n\tprivate playersPath = 'players/'; //'http://localhost:8888/bs-player/';\n\tprivate playersExtension = '.js.min'; //'.js';\n\tprivate actualPlayer = -1;\n\tprivate players = ['zebra', 'gorilla', 'mole', 'snake'];\n\tprivate subject = new Subject<Boolean>();\n\tprivate head: HTMLHeadElement;\n\n\tconstructor(\n\t\tprivate service: PlayerService,\n\t\tprivate user: UserService,\n\t\tprivate view: ViewService,\n\t\tprivate url: UrlService) { }\n\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<Boolean> {\n\t\tthis.head = document.getElementsByTagName('head')[0];\n\t\tthis.view.spinner(true);\n\t\tthis.loadNext();\n\t\treturn this.subject.asObservable();\n\t}\n\n\tprivate loadNext() {\n\t\tif (this.actualPlayer < this.players.length - 1) {\n\t\t\tthis.actualPlayer++;\n\t\t\tthis.loadScript(this.players[this.actualPlayer]);\n\t\t} else {\n\t\t\tthis.subject.complete();\n\t\t}\n\t}\n\n\tprivate loadScript(name: string) {\n\t\tlet cacheBuster = '?r=' + Math.floor(1000000000 * Math.random());\n\t\tlet src = this.url.file(this.playersPath + name + this.playersExtension + cacheBuster);\n\t\tlet exist = false;\n\t\tlet children = this.head.getElementsByTagName('script');\n\t\tfor (let i = 0, t = children.length, s: HTMLScriptElement; i < t; i++) {\n\t\t\ts = children.item(i);\n\t\t\tif (s.getAttribute('src') == src) {\n\t\t\t\texist = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (exist) {\n\t\t\tthis.loadNext();\n\t\t} else {\n\t\t\tlet script = document.createElement('script');\n\t\t\tscript.type = 'text/javascript';\n\t\t\tscript.async = true;\n\t\t\tscript.defer = true;\n\t\t\tscript.charset = 'utf-8';\n\t\t\tscript.addEventListener('error', (e: any) => this.subject.error(e), false);\n\t\t\tscript.addEventListener('load', () => this.loadNext(), false);\n\t\t\tscript.src = src;\n\t\t\tthis.head.appendChild(script);\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/service/resolve/player.configurator.resolve.sources.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { PlayerService } from '../../../../../../../service/player.service';\nimport { UserService } from '../../../../../../../service/user.service';\nimport { PlayerRoute } from '../../../../../model/player.model';\n\n@Injectable()\nexport class PlayerConfiguratorActivateGuard implements CanActivate {\n\n\tconstructor(\n\t\tprivate router: Router,\n\t\tprivate service: PlayerService,\n\t\tprivate user: UserService,\n\t) { }\n\n\tcanActivate(route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {\n\t\tconst buildId = route.params['id'];\n\t\tif (buildId == null || this.user.accountId == null)\n\t\t\treturn this.gotoPlayers();\n\t\treturn this.service.readPlayer(this.user.accountId, buildId)\n\t\t\t.pipe(\n\t\t\t\tmap(resp => {\n\t\t\t\t\tif (!resp || !resp.conf_json)\n\t\t\t\t\t\treturn this.gotoPlayers();\n\t\t\t\t\tlet conf = {};\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconf = JSON.parse(resp.conf_json);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.error(error);\n\t\t\t\t\t\treturn this.gotoPlayers();\n\t\t\t\t\t}\n\t\t\t\t\tconst keys = Object.keys(conf);\n\t\t\t\t\tif (keys.length === 1 && keys[0] === 'bs')\n\t\t\t\t\t\treturn true;\n\t\t\t\t\treturn this.gotoBuilder(buildId);\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tprivate gotoPlayers() {\n\t\tthis.router.navigate(['admin', 'player']);\n\t\treturn false;\n\t}\n\n\tprivate gotoBuilder(buildId: number) {\n\t\tthis.router.navigate(['admin', 'player', buildId, PlayerRoute.builder]);\n\t\treturn false;\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/service/guard/player.configurator.activate.guard.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { CodemirrorModule } from 'ng2-codemirror';\nimport { FormComponentsModule } from '../../../../form/form.module';\nimport { CapitalizeFirstModule } from '../../../../pipe/capitalizeFirst/capitalize.first.module';\nimport { SidebarModule } from '../../../../sidebar/sidebar.module';\nimport { ColorpickerModule } from '../../../../colorpicker/colorpicker.module';\nimport { PlayerConfiguratorFormGroups } from './component/form/groups/player.configurator.form.groups';\nimport { DocsLinkComponent } from './component/form/inputs/docsLink/docsLink.component';\nimport { PlayerConfiguratorFormInputs } from './component/form/inputs/player.configurator.form.inputs';\nimport { PlayerConfiguratorForm } from './component/form/player.configurator.form';\nimport { PlayerConfiguratorPreview } from './component/preview/player.configurator.preview';\nimport { PlayerConfiguratorPreviewVideo } from './component/preview/video/player.configurator.preview.video';\nimport { PlayerConfiguratorPreviewVideoService } from './component/preview/video/player.configurator.preview.video.service';\nimport { PlayerConfiguratorViewComponent } from './component/view/player.configurator.view';\nimport { PlayerConfiguratorParser } from './model/player.configurator.parser';\nimport { PlayerConfiguratorCanDeactivateService } from './service/guard/player.configurator.deactivate.guard';\nimport { PlayerConfiguratorSaveService } from './service/player.configurator.save.service';\nimport { PlayerConfiguratorViewService } from './service/player.configurator.service';\nimport { PlayerConfiguratorResolveConfig } from './service/resolve/player.configurator.resolve.config';\nimport { PlayerConfiguratorResolveDefaults } from './service/resolve/player.configurator.resolve.defaults';\nimport { PlayerConfiguratorResolveSources } from './service/resolve/player.configurator.resolve.sources';\nimport { PlayerConfiguratorActivateGuard } from './service/guard/player.configurator.activate.guard';\n\nconst PlayerConfiguratorRoutes: Routes = [\n\t{\n\t\tpath: '',\n\t\tcanActivate: [PlayerConfiguratorActivateGuard],\n\t\tcanDeactivate: [PlayerConfiguratorCanDeactivateService],\n\t\tresolve: {\n\t\t\tplayerSources: PlayerConfiguratorResolveSources,\n\t\t\tplayerConfig: PlayerConfiguratorResolveConfig,\n\t\t\tplayerDefaults: PlayerConfiguratorResolveDefaults\n\t\t},\n\t\tcomponent: PlayerConfiguratorViewComponent\n\t},\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nlet LOCAL_PROVIDERS = [\n\tPlayerConfiguratorResolveSources,\n\tPlayerConfiguratorResolveConfig,\n\tPlayerConfiguratorResolveDefaults,\n\tPlayerConfiguratorViewService,\n\tPlayerConfiguratorPreviewVideoService,\n\tPlayerConfiguratorParser,\n\tPlayerConfiguratorSaveService,\n\tPlayerConfiguratorActivateGuard,\n\tPlayerConfiguratorCanDeactivateService,\n];\n\nlet COMP: any = [\n\tPlayerConfiguratorViewComponent,\n\tPlayerConfiguratorPreview,\n\tPlayerConfiguratorPreviewVideo,\n\tPlayerConfiguratorForm,\n\tPlayerConfiguratorFormGroups,\n\tPlayerConfiguratorFormInputs,\n\tDocsLinkComponent\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tRouterModule.forChild(PlayerConfiguratorRoutes),\n\t\tFormComponentsModule,\n\t\tSidebarModule,\n\t\tCodemirrorModule,\n\t\tLocalizationModule,\n\t\tColorpickerModule,\n\t\tCapitalizeFirstModule,\n\t],\n\tproviders: [\n\t\t...LOCAL_PROVIDERS,\n\t],\n\tdeclarations: [...COMP],\n\tentryComponents: COMP,\n\texports: COMP\n})\nexport class PlayerConfiguratorModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/legacy/configurator/player.configurator.module.ts","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { PlayerModel } from '../../../../../model/api.model';\nimport { PlayerListSortModel } from '../model/player.list.model';\n\n@Pipe({ name: 'sortPlayerListPipe' })\nexport class SortPlayerListPipe implements PipeTransform {\n\n\ttransform(list: PlayerModel[], model: PlayerListSortModel) {\n\t\treturn list.sort((a, b) => {\n\t\t\tlet aa = parseInt(a[model.by] + '');\n\t\t\tlet bb = parseInt(b[model.by] + '');\n\t\t\tif (model.type == 'desc')\n\t\t\t\treturn bb - aa;\n\t\t\tif (model.type == 'asc')\n\t\t\t\treturn aa - bb;\n\t\t\treturn 0;\n\t\t});\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/list/pipe/player.list.sort.pipe.ts","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { Subscription } from 'rxjs';\nimport { concat } from 'rxjs/observable/concat';\nimport { map, switchMap } from 'rxjs/operators';\nimport { PlayerCreateRequest, PlayerModel, PlayerReadResponse, isPlayerV2 } from '../../../../../model/api.model';\nimport { PlayerService } from '../../../../../service/player.service';\nimport { SidebarService } from '../../../../../service/sidebar.service';\nimport { UserService } from '../../../../../service/user.service';\nimport { ViewService } from '../../../../../service/view.service';\nimport { DateUtil } from '../../../../../util/date.util';\nimport { ModalService } from '../../../../modal/modal.service';\nimport { PlayerListDataService } from '../../../service/player.list.data.service';\nimport { PlayerEmbederService } from '../../embeder/service/player.embeder.service';\nimport { PlayerListSortModel, PlayerListSortModelBy } from '../model/player.list.model';\nimport { SortPlayerListPipe } from '../pipe/player.list.sort.pipe';\n\n@Component({\n\tselector: 'player-list-view',\n\ttemplate: require('./player.list.view.component.html'),\n\tstyles: [require('./player.list.view.component.scss')],\n\tviewProviders: [SortPlayerListPipe],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerListViewComponent extends Localization implements OnInit, AfterViewInit, OnDestroy {\n\n\treadonly isV2 = isPlayerV2;\n\tsortModel: PlayerListSortModel = {\n\t\tby: 'updated_at',\n\t\ttype: 'asc',\n\t};\n\n\tcount = 0;\n\tmodel: PlayerModel[];\n\tcellClass = {\n\t\tname: {\n\t\t\t'col-lg-5': true, 'col-md-4': true, 'col-sm-4': true, 'col-xs-12': true, 'cell': true, 'cell-name': true\n\t\t},\n\t\tcreated: {\n\t\t\t'col-lg-1': true, 'col-md-4': true, 'col-sm-4': true, 'col-xs-6': true, 'cell': true, 'cell-created': true\n\t\t},\n\t\tupdated: {\n\t\t\t'col-lg-1': true, 'col-md-4': true, 'col-sm-4': true, 'col-xs-6': true, 'cell': true, 'cell-updated': true\n\t\t},\n\t\tbuttons: {\n\t\t\t'col-lg-5': true, 'col-md-12': true, 'col-sm-12': true, 'col-xs-12': true, 'cell': true, 'cell-buttons': true\n\t\t}\n\t};\n\tisAnyItemSelected = false;\n\tselectedItemCount = 0;\n\tselectedItems: PlayerModel[] | null = [];\n\n\tprivate resizeSub: Subscription;\n\tprivate listSub: Subscription;\n\tprivate addNewSub: Subscription;\n\tprivate cloneSub: Subscription;\n\tprivate deleteSub: Subscription;\n\n\tconstructor(\n\t\tpublic view: ViewService,\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate router: Router,\n\t\tprivate list: PlayerListDataService,\n\t\tprivate sidebar: SidebarService,\n\t\tprivate modal: ModalService,\n\t\tprivate user: UserService,\n\t\tprivate playerService: PlayerService,\n\t\tprivate embederService: PlayerEmbederService,\n\t\tprivate pipe: SortPlayerListPipe\n\t) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit() {\n\t\tthis.resizeSub = this.view.resizeStream$.subscribe(() => this.cdr.markForCheck());\n\t\tthis.listSub = this.list.$\n\t\t\t.subscribe(players => {\n\t\t\t\tif (players != null) {\n\t\t\t\t\tthis.count = players.count;\n\t\t\t\t\tthis.model = players.results;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\t// comment out to hide players list submenu\n\t\t\t\t\tthis.sidebar.showPlayersMenu(players);\n\t\t\t\t\t//\n\t\t\t\t} else if (ENV != 'test')\n\t\t\t\t\tthrow new Error('EMPTY RESOLVER DATA');\n\t\t\t});\n\t\t// TODO: remove after dev\n\t\t// this.gotoConfigurator(1014);\n\t\t// this.gotoConfigurator(1112);\n\t\t// this.gotoConfigurator(1318);\n\t\t// this.gotoConfigurator(1319);\n\t\t// this.gotoConfigurator(1320);\n\n\n\t\t// TODO: FIXME: remove after dev\n\t\t// this.router.navigate(['admin', 'player', 13551]);\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.view.spinner(false);\n\t\tthis.sidebar.update();\n\t}\n\n\tngOnDestroy() {\n\t\tthis.resizeSub.unsubscribe();\n\t\tthis.listSub.unsubscribe();\n\t\tif (this.addNewSub != null && !this.addNewSub.closed)\n\t\t\tthis.addNewSub.unsubscribe();\n\t\tthis.addNewSub = null\n\t\tif (this.cloneSub != null && !this.cloneSub.closed)\n\t\t\tthis.cloneSub.unsubscribe();\n\t\tthis.cloneSub = null\n\t\tif (this.deleteSub != null && !this.deleteSub.closed)\n\t\t\tthis.deleteSub.unsubscribe();\n\t\tthis.deleteSub = null\n\t}\n\n\tonItemClickSelect(item: PlayerModel, e?: MouseEvent) {\n\t\tif (e && !e.defaultPrevented) {\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t}\n\t\titem.selected = !item.selected;\n\t\tlet isAnySelected = false;\n\t\tlet selectedCount = 0;\n\t\tfor (let mod of this.model) {\n\t\t\tif (mod.selected) {\n\t\t\t\tselectedCount++;\n\t\t\t\tisAnySelected = true;\n\t\t\t}\n\t\t}\n\t\tthis.isAnyItemSelected = isAnySelected;\n\t\tthis.selectedItemCount = selectedCount;\n\t}\n\n\tformatSortIconObject(by: PlayerListSortModelBy) {\n\t\tif (this.sortModel.by != by)\n\t\t\treturn { 'fa-sort': true };\n\t\treturn { ['fa-sort-' + this.sortModel.type]: true, 'active': true };\n\t}\n\n\tsort(by: PlayerListSortModelBy) {\n\t\tif (this.sortModel.type == 'asc')\n\t\t\tthis.sortModel.type = 'desc';\n\t\telse\n\t\t\tthis.sortModel.type = 'asc';\n\t\tthis.sortModel.by = by;\n\t\tthis.model = this.pipe.transform(this.model, this.sortModel);\n\t\tthis.cdr.markForCheck();\n\t}\n\n\taskClone() {\n\t\tthis.updateSelectedItems();\n\t\tthis.modal.prompt(this.translation.translate('PLAYER.LIST.MODAL.DUPLICATE.HEADER'),\n\t\t\t[{\n\t\t\t\tlabel: this.translation.translate('PLAYER.LIST.MODAL.DUPLICATE.YES'),\n\t\t\t\tfa: 'trash', classes: ['test-css-class'], close: true, click: () => this.cloneSelected()\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: this.translation.translate('PLAYER.LIST.MODAL.DUPLICATE.NO'),\n\t\t\t\tfa: 'ban', classes: ['test-css-class'], close: true\n\t\t\t}\n\t\t\t]);\n\t}\n\n\tcloneSelected() {\n\t\tif (this.user.accountId === null || this.selectedItems === null || this.selectedItems.length === 0)\n\t\t\treturn;\n\t\tthis.view.spinner(true);\n\t\tthis.cloneSub = this.playerService.readPlayer(this.user.accountId, this.selectedItems[0].id)\n\t\t\t.pipe(\n\t\t\t\tmap(r => ({ name: r.name, conf_json: r.conf_json, api_version: r.api_version })),\n\t\t\t\tswitchMap(clonned => this.playerService.createPlayer(this.user.accountId, clonned)),\n\t\t\t\tthis.fetchPlayersPipe()\n\t\t\t)\n\t\t\t.subscribe(() => this.view.spinner(false));\n\t}\n\n\taskDelete() {\n\t\tthis.updateSelectedItems();\n\t\tthis.modal.prompt(this.translation.translate('PLAYER.LIST.MODAL.DELETE.HEADER'),\n\t\t\t[{\n\t\t\t\tlabel: this.translation.translate('PLAYER.LIST.MODAL.DELETE.YES'),\n\t\t\t\tfa: 'trash', classes: ['test-css-class'], close: true, click: () => this.deleteSelected()\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: this.translation.translate('PLAYER.LIST.MODAL.DELETE.NO'),\n\t\t\t\tfa: 'ban', classes: ['test-css-class'], close: true\n\t\t\t}\n\t\t\t]);\n\t}\n\n\tdeleteSelected() {\n\t\tif (this.user.accountId === null || this.selectedItems === null || this.selectedItems.length === 0)\n\t\t\treturn;\n\t\tthis.view.spinner(true);\n\t\tthis.deleteSub = concat(...this.selectedItems.map(item => this.playerService.deletePlayer(this.user.accountId, item.id.toString())))\n\t\t\t.pipe(\n\t\t\t\tthis.fetchPlayersPipe()\n\t\t\t)\n\t\t\t.subscribe(() => {\n\t\t\t\tthis.selectedItems = [];\n\t\t\t\tthis.selectedItemCount = 0;\n\t\t\t\tthis.isAnyItemSelected = false;\n\t\t\t\tthis.view.spinner(false);\n\t\t\t});\n\t}\n\n\taskNew() {\n\t\tthis.modal.input(this.translation.translate('PLAYER.LIST.MODAL.ADD.HEADER'),\n\t\t\tthis.translation.translate('PLAYER.LIST.MODAL.ADD.INPUT'),\n\t\t\t[{\n\t\t\t\tlabel: this.translation.translate('PLAYER.LIST.MODAL.ADD.ADD'), fa: 'check', close: true,\n\t\t\t\tclick: (name: string) => this.addNew(name)\n\t\t\t},\n\t\t\t{ label: this.translation.translate('PLAYER.LIST.MODAL.ADD.CANCEL'), fa: 'ban', close: true }\n\t\t\t],\n\t\t\t\"MyPlayer\");\n\t}\n\n\tgotoConfigurator(playerId: number, e?: MouseEvent) {\n\t\tif (e && !e.defaultPrevented) {\n\t\t\te.preventDefault();\n\t\t\te.stopImmediatePropagation();\n\t\t\te.stopPropagation();\n\t\t}\n\t\tthis.router.navigate(['admin', 'player', playerId]);\n\t\treturn;\n\t}\n\n\tsetUpEmbeder(item: PlayerModel) {\n\t\tthis.embederService.playerModel = item;\n\t}\n\n\tformatDate(uts: number): string {\n\t\treturn DateUtil.unixToDateString(uts);\n\t}\n\n\tprivate updateSelectedItems() {\n\t\tthis.selectedItems = [];\n\t\tfor (let mod of this.model)\n\t\t\tif (mod.selected)\n\t\t\t\tthis.selectedItems.push(mod);\n\t\tthis.selectedItemCount = this.selectedItems.length;\n\t}\n\n\tprivate addNew(name: string) {\n\t\tif (this.user.accountId != null) {\n\t\t\tconst request: PlayerCreateRequest = { name: name, conf_json: '{}', api_version: '2' };\n\t\t\tthis.addNewSub = this.playerService\n\t\t\t\t.createPlayer(this.user.accountId, request)\n\t\t\t\t.pipe(this.fetchPlayersPipe())\n\t\t\t\t.subscribe((p: PlayerReadResponse) => this.gotoConfigurator(p.id));\n\t\t}\n\t}\n\n\tprivate fetchPlayersPipe() {\n\t\treturn switchMap(r => this.list.fetch().pipe(map(_ => r)));\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/list/component/player.list.view.component.ts","import { ChangeDetectorRef, Directive, ElementRef, HostBinding, HostListener, Input } from \"@angular/core\";\nimport { Http, ResponseContentType } from \"@angular/http\";\nimport { DomSanitizer, SafeUrl } from \"@angular/platform-browser\";\nimport { Subscription } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\n@Directive({\n\tselector: `[download-player-js]`,\n\texportAs: \"downloadPlayerJsV2\"\n})\nexport class DownloadPlayerJsV2Directive {\n\n\t@Input('download-player-js') url: string;\n\t@HostBinding('href') href: SafeUrl | string | undefined;\n\t@HostBinding('type') mime: string | undefined = 'text/javascript';\n\n\tworking = false;\n\n\tprivate blobUrl: string;\n\tprivate fetchSub: Subscription;\n\n\tconstructor(\n\t\tprivate http: Http,\n\t\tprivate sanitizer: DomSanitizer,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate elementRef: ElementRef,\n\t) { }\n\n\tngOnDestroy() {\n\t\tif (!!this.fetchSub)\n\t\t\tthis.fetchSub.unsubscribe();\n\t\tthis.fetchSub = null;\n\t\tif (!!this.blobUrl)\n\t\t\tURL.revokeObjectURL(this.blobUrl);\n\t}\n\n\t@HostListener('click', ['$event'])\n\tclick(e: PointerEvent) {\n\t\tif (!this.href) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\te.stopImmediatePropagation();\n\t\t\tthis.fetch();\n\t\t}\n\t}\n\n\tprivate fetch() {\n\t\tif (!!this.fetchSub)\n\t\t\tthis.fetchSub.unsubscribe();\n\t\tthis.working = true;\n\t\tthis.cdr.markForCheck();\n\t\tthis.fetchSub = this.http.get(this.url, { responseType: ResponseContentType.Blob })\n\t\t\t.pipe(\n\t\t\t\tmap(response => new Blob([response.blob()], { type: this.mime })),\n\t\t\t)\n\t\t\t.subscribe(\n\t\t\t\tblob => {\n\t\t\t\t\tthis.blobUrl = URL.createObjectURL(blob);\n\t\t\t\t\tthis.href = this.sanitizer.bypassSecurityTrustUrl(this.blobUrl);\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t},\n\t\t\t\terror => {\n\t\t\t\t\tconsole.error(error);\n\t\t\t\t\tthis.working = false;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t},\n\t\t\t\t() => requestAnimationFrame(() => {\n\t\t\t\t\tthis.reclick(this.elementRef.nativeElement);\n\t\t\t\t\tthis.working = false;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t})\n\t\t\t);\n\t}\n\n\tprivate reclick(element: HTMLElement) {\n\t\ttry {\n\t\t\telement.dispatchEvent(new MouseEvent('click'));\n\t\t} catch (e1) {\n\t\t\ttry {\n\t\t\t\tconsole.error(e1);\n\t\t\t\tconst evt = document.createEvent('MouseEvents');\n\t\t\t\tevt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);\n\t\t\t\telement.dispatchEvent(evt);\n\t\t\t} catch (e2) {\n\t\t\t\tconsole.error(e2);\n\t\t\t\telement.click();\n\t\t\t}\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/list/directive/download.player.js.v2.directive.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { PlayerListViewComponent } from './component/player.list.view.component';\nimport { DownloadPlayerJsV2Directive } from './directive/download.player.js.v2.directive';\nimport { SortPlayerListPipe } from './pipe/player.list.sort.pipe';\n\nconst PlayerListRoutes: Routes = [\n\t{\n\t\tpath: '', component: PlayerListViewComponent,\n\t},\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nlet COMP: any = [\n\tPlayerListViewComponent,\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tCommonModule,\n\t\tRouterModule.forChild(PlayerListRoutes),\n\t\tLocalizationModule,\n\t],\n\tdeclarations: [\n\t\t...COMP,\n\t\tSortPlayerListPipe,\n\t\tDownloadPlayerJsV2Directive,\n\t],\n\tentryComponents: COMP,\n\texports: COMP\n})\nexport class PlayerListModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/list/player.list.module.ts","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { Subscription } from 'rxjs';\nimport { zip } from 'rxjs/observable/zip';\nimport { PlayerBuild, PlayerBuildResponse } from '../../../../../model/api.model';\nimport { SidebarService } from '../../../../../service/sidebar.service';\nimport { ViewService } from '../../../../../service/view.service';\nimport { DateUtil } from '../../../../../util/date.util';\nimport { PlayerRoute, PlayerRouteData, PlayerRouteParam } from '../../../model/player.model';\nimport { PlayerListDataService } from '../../../service/player.list.data.service';\n\n@Component({\n\tselector: 'player-versions-view',\n\ttemplate: require('./player.versions.view.component.html'),\n\tstyles: [require('./player.versions.view.component.scss')],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PlayerVersionsView extends Localization implements OnInit, AfterViewInit, OnDestroy {\n\n\tEMBED_CODE_LINK: any[];\n\n\tcount = 0;\n\tmodel: PlayerBuild[];\n\n\tprivate routeSub: Subscription;\n\n\tconstructor(public view: ViewService,\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate list: PlayerListDataService,\n\t\tprivate sidebar: SidebarService,\n\t) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit() {\n\t\tthis.view.spinner(true);\n\t\tthis.routeSub = zip(this.route.data, this.route.params, this.list.$)\n\t\t\t.subscribe(r => {\n\t\t\t\tconst [data, params, players] = r;\n\t\t\t\tthis.parse(data as PlayerBuildResponse);\n\t\t\t\tif (PlayerRouteParam.id in params) {\n\t\t\t\t\tthis.EMBED_CODE_LINK = ['/', 'admin', 'player', params[PlayerRouteParam.id], PlayerRoute.embeder];\n\t\t\t\t}\n\t\t\t\tif (players) {\n\t\t\t\t\tthis.sidebar.showPlayersMenu(players, parseInt(params[PlayerRouteParam.id]));\n\t\t\t\t}\n\t\t\t});\n\t\tthis.view.resizeStream$.subscribe(() => this.cdr.markForCheck());\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.view.spinner(false);\n\t\t// this.sidebar.update();\n\t}\n\n\tngOnDestroy() {\n\t\tthis.routeSub.unsubscribe();\n\t}\n\n\tformatDate(unixMs: number): string {\n\t\treturn DateUtil.unixToDateString(unixMs);\n\t}\n\n\tformatDaysAgo(unixMs: number): string {\n\t\tvar daysAgo = DateUtil.unixDiffInDays(unixMs, DateUtil.dateToUnix(new Date()));\n\t\tdaysAgo = Math.abs(daysAgo);\n\t\treturn (daysAgo == 0) ? 'today' : daysAgo + ' days ago';\n\t}\n\n\tformatTime(unixMs: number): string {\n\t\treturn DateUtil.unixToTimeString(unixMs);\n\t}\n\n\tformatAttr(build: PlayerBuild): string {\n\t\treturn build.active == true\n\t\t\t? 'Active version.'\n\t\t\t: 'build @' + this.formatTime(build.created_at) + ' ' + this.formatDate(build.created_at);\n\t}\n\n\tprivate parse(data: PlayerBuildResponse) {\n\t\tif (data != null && data.playerVersions != null) {\n\t\t\tthis.count = data.playerVersions.count;\n\t\t\tthis.model = data.playerVersions.results.sort((a: PlayerBuild, b: PlayerBuild): number => {\n\t\t\t\treturn a.created_at < b.created_at ? 1 : a.created_at > b.created_at ? -1 : 0;\n\t\t\t});\n\t\t\tif (this.model.length > 0)\n\t\t\t\tthis.model[0].active = true;\n\t\t} else if (ENV != 'test')\n\t\t\tthrow new Error('EMPTY RESOLVER DATA');\n\n\t\tthis.view.spinner(false);\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/versions/component/player.versions.view.component.ts","/**\n * Created by mthk on 14/10/16.\n */\nimport { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { PlayerService } from '../../../../../service/player.service';\nimport { UserService } from '../../../../../service/user.service';\nimport { PlayerVersionsView } from '../component/player.versions.view.component';\n\n@Injectable()\nexport class PlayerVersionsResolver implements Resolve<PlayerVersionsView> {\n\n\tconstructor(private service: PlayerService, private user: UserService) {}\n\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {\n\t\tif (this.user.accountId == null)\n\t\t\treturn;\n\t\treturn this.service.listBuilds(this.user.accountId, route.params['id']);\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/versions/service/player.versions.resolver.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\nimport { PlayerVersionsView } from './component/player.versions.view.component';\nimport { PlayerVersionsResolver } from './service/player.versions.resolver';\n\n/* export */ const PlayerVersionsRoutes: Routes = [\n\t{\n\t\tpath: '',\n\t\tcomponent: PlayerVersionsView,\n\t\tresolve: { playerVersions: PlayerVersionsResolver }\n\t},\n\t// { path: '', redirectTo: '', pathMatch: 'full' },\n\t{ path: '**', redirectTo: '' }\n];\n\nlet LOCAL_PROVIDERS = [\n\tPlayerVersionsResolver,\n];\n\nlet COMP: any = [\n\tPlayerVersionsView,\n];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tCommonModule,\n\t\t// FormsModule,\n\t\tRouterModule.forChild(PlayerVersionsRoutes),\n\t\t// FormComponentsModule,\n\t\tLocalizationModule,\n\t],\n\tproviders: [\n\t\t// ...GLOBAL_PROVIDERS,\n\t\t...LOCAL_PROVIDERS,\n\t],\n\tdeclarations: [\n\t\t...COMP,\n\t\t// SortPlayerListPipe\n\t],\n\tentryComponents: COMP,\n\texports: COMP\n})\nexport class PlayerVersionsModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/modules/versions/player.versions.module.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { PlayerListResponse } from '../../../model/api.model';\nimport { PlayerListDataService } from './player.list.data.service';\n\n@Injectable()\nexport class PlayerListResolveService implements Resolve<PlayerListResponse> {\n\n\tconstructor(\n\t\tprivate list: PlayerListDataService,\n\t) { }\n\n\tresolve(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot): Observable<PlayerListResponse> | null {\n\t\treturn this.list.fetch();\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/service/player.list.resolve.service.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\n\nimport { UserService } from '../../../service/user.service';\nimport { ProductService } from '../../../service/product.service';\n\n@Injectable()\nexport class AccountProductsResolverService implements Resolve<any> {\n\n\tconstructor(private products: ProductService, private user: UserService) { }\n\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {\n\t\treturn this.products.getProductsForAccount(this.user.accountId);\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/products/service/account.products.resolver.service.ts","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\n\nimport { ProductService } from '../../../service/product.service';\n\n@Injectable()\nexport class ProductsResolverService implements Resolve<any> {\n\n\tconstructor(private products: ProductService) { }\n\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> {\n\t\treturn this.products.getProducts();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/products/service/products.resolver.service.ts","import { NgModule } from '@angular/core';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { RouterModule, Routes } from '@angular/router';\nimport { SharedModule } from '../../app/shared/shared.module';\nimport { AccountProductsResolverService } from './service/account.products.resolver.service';\nimport { ProductService } from '../../service/product.service';\nimport { ProductsResolverService } from './service/products.resolver.service';\nimport { SubscriptionService } from '../../service/subscription.service';\nimport { ProductsView } from './view/products.view.component';\n\nexport const routes: Routes = [\n\t{\n\t\tpath: '',\n\t\tcomponent: ProductsView,\n\t\tresolve: {\n\t\t\tproducts: ProductsResolverService,\n\t\t\taccountProducts: AccountProductsResolverService\n\t\t}\n\t}\n];\n\n@NgModule({\n\timports: [\n\t\tSharedModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes)\n\t],\n\tproviders: [\n\t\tProductsResolverService,\n\t\tAccountProductsResolverService,\n\t\tProductService,\n\t\tSubscriptionService\n\t],\n\tdeclarations: [ProductsView]\n})\nexport class ProductsModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/products/products.module.ts","import { Injectable } from '@angular/core';\nimport { CanActivate, CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\nimport { UserService } from '../../service/user.service';\nimport { AccountService } from '../../service/account.service';\nimport { SubscriptionService } from '../../service/subscription.service';\nimport { Router } from '@angular/router';\nimport { SubscriptionView } from './subscription.view.component';\nimport { SubscriptionOrdersResponse, SubscriptionOrderResponse, } from '../../model/api.model';\nimport { ProductService } from '../../service/product.service';\n\n@Injectable()\nexport class SubscriptionGuard implements CanActivate, CanDeactivate<SubscriptionView> {\n\n    constructor(\n        private products: ProductService,\n        private user: UserService,\n        private account: AccountService,\n        private subscription: SubscriptionService,\n        private router: Router) { }\n    /*\n        Subscription view should only be navigated when all the necessary information is present and valid\n            -> user details are valid for billing;\n            -> the and plan id's the in the url parameters are valid;\n            -> the user does not already has the product-plan set;\n    */\n    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):\n        Observable<boolean> | Promise<boolean> | boolean {\n        //console.log('SubscriptionView.CanActivate');\n        let subscriptionId: number = +route.params['id'];\n\n        if (this.user.accountId == null)\n            return false;\n        \n        return this.subscription.getSubscriptionOrders(this.user.accountId).map(\n            (res: SubscriptionOrdersResponse) => {\n                let found = false;\n                if (res && res.count && res.count > 0) {\n                    res.results.some((sub) => {\n                        if (sub.id === subscriptionId) {\n                            found = true;\n                            return true;\n                        }\n                        return false;\n                    });\n                }\n                return found;\n            },\n            (error: any) => {\n                this.router.navigate(['admin', '']);\n                return false;\n            }\n        ).catch(error => {\n            console.error('Subscription.Guard ERROR');\n            this.router.navigate(['admin', '']);\n            return Observable.of(false);\n        });\n    }\n\n    canDeactivate(component: SubscriptionView, route: ActivatedRouteSnapshot, state: RouterStateSnapshot):\n        Observable<boolean> | Promise<boolean> | boolean {\n        //console.log('SubscriptionView.CanDeactivate');\n        return new Promise(function (resolve, reject) {\n            if (component.braintreeIntegration)\n                component.braintreeIntegration.teardown(function () {\n                    //console.log('SubscriptionView.Braintree.teardown');\n                    component.braintreeIntegration = null;\n                    resolve(true);\n                });\n            else\n                resolve(true);\n        });\n    }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/subscription/subscription.guard.ts","import {\n\tApplicationRef,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tOnDestroy,\n\tOnInit\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { Subscription } from 'rxjs/Subscription';\n\nimport { SubOrderNonce, SubscriptionOrderResponse } from '../../model/api.model';\nimport { AccountService } from '../../service/account.service';\nimport { BuyCookieService } from '../../service/buyCookie.service';\nimport { SubscriptionService } from '../../service/subscription.service';\nimport { UserService } from '../../service/user.service';\nimport { ViewService } from '../../service/view.service';\nimport { ModalService } from './../modal/modal.service';\n\n@Component({\n\tselector: 'subscription-view',\n\ttemplate: require('./subscription.view.component.html'),\n\tstyles: [\n\t\t':host .plan-list {padding-left:0;padding-top:20px;}',\n\t\t':host .plan-list li {list-style: none;font-size:16px;margin-top:16px;}'\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SubscriptionView extends Localization implements OnInit, OnDestroy {\n\n\t//braintree\n\tprivate static braintree: any;\n\tbraintreeIntegration: any;\n\tbraintreeIsReady = false;\n\tbraintreeClientToken: string;\n\tbraintreeNonce: string;\n\t//errors\n\tpaymentError: boolean = false;\n\tpaymentErrorMessage: string | null;\n\tsubscriptionError: string | null = null;\n\n\tcurrentStep: number = 1;\n\tsubscriptionOrder: SubscriptionOrderResponse;\n\ttoday = Date.now();\n\tsubscriptionFinished = false;\n\ttermsAccepted = false;\n\n\tprivate resolverSubscription: Subscription;\n\tprivate paramsSubscription: Subscription;\n\tprivate modalSubscription: Subscription;\n\tprivate planId: number;\n\tprivate isPaidPlan: Boolean;\n\n\tconstructor(\n\t\tpublic cdr: ChangeDetectorRef,\n\t\tpublic account: AccountService,\n\t\tpublic user: UserService,\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tprivate route: ActivatedRoute,\n\t\tprivate subscriptionService: SubscriptionService,\n\t\tprivate view: ViewService,\n\t\tprivate router: Router,\n\t\tprivate modal: ModalService,\n\t\tprivate ref: ApplicationRef,\n\t\tprivate buyCookie: BuyCookieService) {\n\t\tsuper(locale, translation);\n\t}\n\n\tngOnInit(): void {\n\t\t//get data from SubscriptionResolver\n\t\tthis.resolverSubscription = this.route.data.subscribe((data: any) => {\n\t\t\tthis.isPaidPlan = false;\n\t\t\tif (data.account && data.account.length >= 4) {\n\t\t\t\tthis.subscriptionOrder = data.account[1];\n\t\t\t\tif(this.subscriptionOrder.product_plan && this.subscriptionOrder.product_plan.base_price.gross > 0) {\n\t\t\t\t\tthis.braintreeClientToken = data.account[3].bt_client_token;\n\t\t\t\t\tthis.isPaidPlan = true;\n\t\t\t\t\tif (!SubscriptionView.braintree) {\n\t\t\t\t\t\tSubscriptionView.braintree = require('braintree-web-drop-in');\n\t\t\t\t\t}\n\t\t\t\t\tthis.setupBrainTree();\n\t\t\t\t} else {\n\t\t\t\t\tthis.braintreeIsReady = true;\n\t\t\t\t}\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t});\n\t\t//Get planId from route parameters\n\t\tthis.paramsSubscription = this.route.params.subscribe(params => { this.planId = +params['id']; });\n\t\t//Subscribe close event of modal windows to update content\n\t\tthis.modalSubscription = this.modal.closeStream$.subscribe(closed => this.cdr.markForCheck());\n\t}\n\n\tngOnDestroy(): void {\n\t\tif (this.resolverSubscription)\n\t\t\tthis.resolverSubscription.unsubscribe();\n\t\tif (this.paramsSubscription)\n\t\t\tthis.paramsSubscription.unsubscribe();\n\t\tif (this.resolverSubscription)\n\t\t\tthis.resolverSubscription.unsubscribe();\n\t}\n\n\tgoToProductsView(): void {\n\t\tthis.router.navigate(['admin', 'products']);\n\t}\n\n\tgoToAccountView(): void {\n\t\t//this.modal.accountDetails();\n\t\tthis.router.navigate(['admin', 'account', 'details']);\n\t}\n\n\tgoToPlayerView(): void {\n\t\tthis.router.navigate(['admin', 'player']);\n\t}\n\n\tgoToStep(stepId: number) {\n\t\tif (stepId > 0 && stepId <= 2 && this.currentStep != stepId) {\n\t\t\tthis.currentStep = stepId;\n\t\t}\n\t}\n\n\tshowTermsAndConditions(): void {\n\t\tthis.modal.terms(\n\t\t\tthis.translation.translate('SUBSCRIPTION.TERMS_AND_CONDITIONS.TITLE'),\n\t\t\tthis.translation.translate('SUBSCRIPTION.TERMS_AND_CONDITIONS.BODY'), [{\n\t\t\t\tlabel: this.translation.translate('SUBSCRIPTION.BUTTON.ACCEPT'),\n\t\t\t\tfa: 'check',\n\t\t\t\tclasses: ['btn', 'btn-success'],\n\t\t\t\tclose: true,\n\t\t\t\tclick: () => {\n\t\t\t\t\tthis.termsAccepted = true;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tlabel: this.translation.translate('SUBSCRIPTION.BUTTON.NOT_ACCEPT'),\n\t\t\t\tfa: 'times',\n\t\t\t\tclasses: ['btn', 'btn-danger'],\n\t\t\t\tclose: true, click: () => {\n\t\t\t\t\tthis.termsAccepted = false;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t}]);\n\t}\n\n\tonPaymentFormSubmit(): void {\n\t\tif(this.braintreeIntegration) {\n\t\t\t// Prepare 3D Secure params for Card payment.Braintree will use it if Card payment is used.\n\t\t\tvar threeDSecureParameters = {\n\t\t\t\tthreeDSecure: {\n\t\t\t\t\tamount: this.subscriptionOrder.product_plan.base_price.gross,\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.braintreeIntegration.requestPaymentMethod( threeDSecureParameters,\n\t\t\t\t\t(err:any, payload:any) => {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\t// Handle errors in requesting payment method\n\t\t\t\t\t\t//console.error(err);\n\t\t\t\t\t\tthis.view.spinner(false);\n\t\t\t\t\t\tthis.paymentError = true;\n\t\t\t\t\t\tthis.paymentErrorMessage = err.message;\n\t\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\t\tthis.ref.tick();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Send payload.nonce to your server\n\t\t\t\t\tthis.braintreeNonce = payload.nonce;\n\t\t\t\t\tthis.finishSubscription(payload.nonce);\n\t\t\t });\n\n\t\t\tif (this.braintreeIsReady) {\n\t\t\t\tthis.view.spinner(true);\n\t\t\t\tthis.paymentError = false;\n\t\t\t\tthis.paymentErrorMessage = null;\n\t\t\t\tthis.subscriptionError = null;\n\t\t\t\tthis.cdr.detectChanges();\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t} else if(!this.isPaidPlan) {\n\t\t\tthis.braintreeNonce = '';\n\t\t\tthis.finishSubscription('');\n\t\t}\n\t}\n\n\tprivate finishSubscription(nonce: string): void {\n\t\tif (!this.termsAccepted) {\n\t\t\tthis.view.spinner(false);\n\t\t\tthis.cdr.markForCheck();\n\t\t\tthis.ref.tick();\n\t\t\treturn;\n\t\t}\n\n\t\tlet body: SubOrderNonce = {\n\t\t\taccept: true,\n\t\t\tbt_payment_method_nonce: nonce\n\t\t};\n\t\tif (this.user.accountId != null)\n\t\t\tthis.subscriptionService.finishSubscriptionOrder(this.user.accountId, this.subscriptionOrder.id, body)\n\t\t\t\t.subscribe((response) => {\n\t\t\t\t\tif (this.braintreeIntegration != null) {\n\t\t\t\t\t\t//Remove braintree dropin\n\t\t\t\t\t\tthis.braintreeIntegration.teardown(() => { this.braintreeIntegration = null; });\n\t\t\t\t\t}\n\t\t\t\t\tthis.showThanks();\n\t\t\t\t},\n\t\t\t\t(error) => {\n\t\t\t\t\t//show error message to the user\n\t\t\t\t\tthis.subscriptionError = error;\n\t\t\t\t\tthis.view.spinner(false);\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t\tthis.ref.tick();\n\t\t\t\t});\n\t}\n\n\tprivate showThanks(): void {\n\t\tthis.buyCookie.erase();\n\t\tthis.user.refresh();\n\t\tthis.view.spinner(false);\n\t\tthis.subscriptionFinished = true;\n\t\tthis.cdr.markForCheck();\n\t\tthis.ref.tick();\n\t}\n\n\tprivate setupBrainTree(): void {\n\t\tif (SubscriptionView.braintree ) {\n\t\t\tSubscriptionView.braintree.create( {\n\t\t\t\tauthorization: this.braintreeClientToken,\n\t\t\t\tselector: '#payment-container',\n\t\t\t\tgatewayConfiguration: {paypalEnabled:true},\n\t\t\t\tpaypal: {flow: 'vault'},\n\t\t\t\tpaypalCredit: {flow: 'vault'},\n\t\t\t\tthreeDSecure: true,\n\t\t},  (err:any, dropinInstance:any) => {\n\t\t\tif (err) {\n\t\t\t\t// Handle any errors that might've occurred when creating Drop-in\n\t\t\t\tthis.view.spinner(false);\n\t\t\t\tthis.paymentError = true;\n\t\t\t\tthis.paymentErrorMessage = err.message;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\tthis.ref.tick();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.braintreeIntegration = dropinInstance;\n\t\t\tthis.braintreeIsReady = true;\n\t\t\tthis.cdr.markForCheck();\n\t\t\tthis.cdr.detectChanges();\n\t\t});\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/subscription/subscription.view.component.ts","import { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { Subscription } from 'rxjs/Subscription';\nimport { Injectable } from '@angular/core';\nimport { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { SubscriptionView } from './subscription.view.component';\nimport { UserService } from '../../service/user.service';\nimport { AccountService } from '../../service/account.service';\nimport { SubscriptionService } from '../../service/subscription.service';\nimport { PaymentsService } from '../../service/payments.service';\nimport { CountryService } from '../../service/country.service';\n\n@Injectable()\nexport class SubscriptionResolver implements Resolve<SubscriptionView> {\n\n    constructor(\n        private subscription: SubscriptionService,\n        private payments: PaymentsService,\n        private user: UserService,\n        private account: AccountService,\n        private countries: CountryService) { }\n\n    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {\n        //console.log('> SubscriptionResolver.resolved');\n        //route parameters\n        let subscriptionOrderId: number = route.params['id'];\n        if (!subscriptionOrderId)\n            return false;\n        \n        if (this.user.accountId == null)\n            return false;\n\n        return Observable.forkJoin(\n            this.account.get(this.user.accountId),\n            this.subscription.getSubscriptionOrder(this.user.accountId, subscriptionOrderId),\n            this.countries.getCountries(),\n            this.payments.getBraintreeClientToken(this.user.accountId)\n        );\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/subscription/subscription.resolver.ts","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { SharedModule } from '../../app/shared/shared.module';\nimport { SubscriptionService } from '../../service/subscription.service';\nimport { ProductService } from '../../service/product.service';\nimport { PaymentsService } from '../../service/payments.service';\nimport { ValidationService } from '../../service/validation.service';\nimport { SubscriptionGuard } from './subscription.guard';\nimport { SubscriptionResolver, SubscriptionView } from './';\n\nexport const routes: Routes = [\n    {\n        path: ':id',\n        component: SubscriptionView,\n        canActivate: [SubscriptionGuard],\n        resolve: { account: SubscriptionResolver }\n    }\n];\n\n@NgModule({\n\timports: [\n\t\tSharedModule,\n\t\tReactiveFormsModule,\n\t\tLocalizationModule,\n\t\tRouterModule.forChild(routes)\n\t],\n\tdeclarations: [SubscriptionView],\n\tentryComponents: [SubscriptionView],\n\tproviders: [\n\t\tSubscriptionResolver,\n\t\tSubscriptionService,\n\t\tSubscriptionGuard,\n\t\tValidationService,\n\t\tProductService,\n\t\tPaymentsService,\n\t],\n\texports: [SubscriptionView]\n})\nexport class SubscriptionModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/subscription/subscription.module.ts","import { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { TranslationService } from 'angular-l10n';\n\nimport { ErrorResponse, LoginRequest, LoginResponse } from '../model/api.model';\nimport { ModalService } from '../module/modal/modal.service';\nimport { BradmaxApi } from './api.service';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { UrlService } from './url.service';\nimport { UserService } from './user.service';\n\n/**\n * Created by tkwiatek on 4/22/16.\n */\n@Injectable()\nexport class LoginService extends BradmaxApi {\n\n\tconstructor(\n\t\tprotected router: Router,\n\t\tprotected auth: AuthService,\n\t\tprotected http: Http,\n\t\tprotected exception: ExceptionService,\n\t\tprotected url: UrlService,\n\t\tprivate user: UserService,\n\t\tprivate modal: ModalService,\n\t\tprivate translation: TranslationService) {\n\t\tsuper(auth, http, exception, router, url);\n\t}\n\n\tlogin(success?: () => void, fail?: (msg: string) => void) {\n\t\tif (this.auth.user != null && this.auth.password != null) {\n\t\t\tlet req: LoginRequest = { email: this.auth.user, password: this.auth.password };\n\t\t\tsuper\n\t\t\t\t.create(this.urlPath(false), req)\n\t\t\t\t.subscribe((response: LoginResponse) => {\n\t\t\t\t\tthis.auth.token = response.access_token;\n\t\t\t\t},\n\t\t\t\t(error: ErrorResponse) => {\n\t\t\t\t\tthis.auth.password = null;\n\t\t\t\t\tif (fail != null)\n\t\t\t\t\t\tfail(error.detail);\n\t\t\t\t}, () => {\n\t\t\t\t\tif (success != null)\n\t\t\t\t\t\tsuccess();\n\t\t\t\t});\n\t\t}\n\t}\n\n\tlogout(success?: () => void) {\n\t\tthis.modal.prompt(this.translation.translate('MODAL.LOGOUT.ASK'), [{\n\t\t\tlabel: this.translation.translate('MODAL.LOGOUT.YES'), fa: 'sign-out', classes: ['test-css-class'],\n\t\t\tclose: true, click: () => {\n\t\t\t\tsuper\n\t\t\t\t\t.create(this.urlPath(true), { 'access_token': this.auth.token })\n\t\t\t\t\t.subscribe(undefined, () => this.logoutSuccess(success), () => this.logoutSuccess(success));\n\t\t\t}\n\t\t},\n\t\t{ label: this.translation.translate('MODAL.LOGOUT.NO'), fa: 'ban', classes: ['test-css-class'], close: true }\n\t\t]);\n\t}\n\n\tprivate logoutSuccess(success?: () => void) {\n\t\tthis.user.clear();\n\t\tthis.auth.clear();\n\t\tif (success != null)\n\t\t\tsuccess();\n\t}\n\n\tprivate urlPath(out: boolean) {\n\t\treturn 'auth/log' + (out == true ? 'out' : 'in');\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/login.service.ts","/**\n * Created by mthk on 07/10/16.\n */\nimport {InjectionToken} from '@angular/core';\nimport {ContentConfigModel} from './content.model';\n\nlet isMobile: boolean = ( !!navigator.userAgent.match(/Android/i)\n\t\t|| !!navigator.userAgent.match(/webOS/i)\n\t\t|| !!navigator.userAgent.match(/iPhone/i)\n\t\t|| !!navigator.userAgent.match(/iPad/i)\n\t\t|| !!navigator.userAgent.match(/iPod/i)\n\t\t|| !!navigator.userAgent.match(/BlackBerry/i)\n\t\t|| !!navigator.userAgent.match(/Windows Phone/i) );\n\nexport const ContentConfig = new InjectionToken('CONTENT_CONFIG');\n\nexport const ContentConfigTestData: ContentConfigModel = {\n\tmobile: false,\n\tlogo: {\n\t\tsrc: '',\n\t\t// src: {\n\t\t// \tsmall: '',\n\t\t// \tdefault: ''\n\t\t// },\n\t\talt: '',\n\t\ttitle: ''\n\t}\n};\n\nexport const ContentConfigData: ContentConfigModel = {\n\tmobile: isMobile,\n\tlogo: {\n\t\tsrc: 'https://bradmax.com/static/sales_v2/img/bradmax/2025/full.black.yellow.svg',\n\t\t// src: {\n\t\t// \tsmall: 'img/logo/small_logo_bradmax_color.svg',\n\t\t// \tdefault: 'img/logo/logo_bradmax_color.svg'\n\t\t// },\n\t\talt: 'Bradmax Admin',\n\t\ttitle: 'Bradmax Admin'\n\t}\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/content/content.config.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslationService } from 'angular-l10n';\n\nimport { HeaderService } from '../../module/header/header.service';\nimport { SidebarItem } from '../../service/sidebar.model';\nimport { SidebarService } from '../../service/sidebar.service';\nimport { LoginService } from '../../service/login.service';\nimport { UrlService } from '../../service/url.service';\nimport { UserService } from '../../service/user.service';\nimport { ViewService } from '../../service/view.service';\nimport { analyticsSampledTrafficRoute } from '../analytics/sampled-traffic/sampled-traffic.module';\nimport { ContentConfig } from './content.config';\nimport { ContentConfigModel } from './content.model';\nimport { ModalService } from './../modal/modal.service';\n\n@Component({\n\tselector: 'content',\n\ttemplate: require('./content.component.html'),\n\tstyles: [\n\t\t':host{display: block;}'\n\t\t+ ':host.with-header{padding-top: 54px;}'\n\t\t+ ':host .content{margin-left: 0 !important;}'\n\t\t+ ':host .content.with-sidebar{margin-left: 200px !important;}'\n\t],\n\thost: {\n\t\t'class': 'fade',\n\t\t'[class.out]': '!active',\n\t\t'[class.in]': 'active',\n\t\t'[class.with-header]': '!isAppInIframe'\n\t},\n\tviewProviders: [LoginService],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContentComponent implements OnInit {\n\n\tactive: boolean;\n\tisAppInIframe: boolean;\n\tisHeartBeatMode: boolean;\n\tisBetaMode: boolean;\n\n\tconstructor(@Inject(ContentConfig) public config: ContentConfigModel,\n\t\tpublic view: ViewService,\n\t\tpublic sidebar: SidebarService,\n\t\tpublic url: UrlService,\n\t\tprivate translation: TranslationService,\n\t\tprivate header: HeaderService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate router: Router,\n\t\tprivate login: LoginService,\n\t\tprivate user: UserService,\n\t\tprivate modal: ModalService\n\t) {\n\t\tthis.view.spinner(true);\n\t\tthis.active = false;\n\t\tthis.isAppInIframe = this.view.checkIfAppInIframe();\n\t\tthis.isBetaMode = this.view.checkIfBetaMode();\n\n\t\tthis.router.events.subscribe(() => {\n\t\t\t// Close sidebar on route change for mobile devices.\n\t\t\tif(this.config.mobile) {\n\t\t\t\tthis.sidebar.close();\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnInit() {\n\t\t//console.log('CONTENT.COMPONENT ->> ON VIEW INIT');\n\t\tthis.setHeaderLabel();\n\n\t\t// Build analytics menu using user statsModules settings (enabled modules for account).\n\t\tlet analyticsMenu = new Array<SidebarItem>();\n\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.DASHBOARD'),\n\t\t\troute: ['admin', 'analytics', 'dashboard']\n\t\t});\n\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.AUDIENCE'),\n\t\t\troute: ['admin', 'analytics', 'audience']\n\t\t});\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.REALTIME'),\n\t\t\troute: ['admin', 'analytics', 'realtime'],\n\t\t\tisAvailableInDifferentPlan: !this.hasStatsModule('realtime')\n\t\t});\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.TOP_CONTENT'),\n\t\t\troute: ['admin', 'analytics', 'top-content'],\n\t\t\tisAvailableInDifferentPlan: !this.hasStatsModule('media')\n\t\t});\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.CONTENT'),\n\t\t\troute: ['admin', 'analytics', 'content'],\n\t\t\tisAvailableInDifferentPlan: !this.hasStatsModule('media')\n\t\t});\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.SELECTED_CONTENT'),\n\t\t\tisHiddenWhenNotActive: true,\n\t\t\troute: ['admin', 'analytics', 'content', ':materialId'],\n\t\t\tisAvailableInDifferentPlan: !this.hasStatsModule('media')\n\t\t});\n\t\tif(this.hasStatsModule('st')) {\n\t\t\tanalyticsMenu.push({\n\t\t\tname: 'Content Reports',\n\t\t\troute: ['admin', 'analytics', 'st-report'],\n\t\t\t});\n\t\t\tif (this.isBetaMode)\n\t\t\t\tanalyticsMenu.push({\n\t\t\t\t\tname: 'Sampled Traffic',\n\t\t\t\t\troute: analyticsSampledTrafficRoute,\n\t\t\t\t});\n\t\t}\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.GEO'),\n\t\t\troute: ['admin', 'analytics', 'geo'],\n\t\t\tisAvailableInDifferentPlan: !this.hasStatsModule('geo')\n\t\t});\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.GEO_COUNTRY'),\n\t\t\tisHiddenWhenNotActive: true,\n\t\t\troute: ['admin', 'analytics', 'geo', ':countryCode'],\n\t\t\tisAvailableInDifferentPlan: !this.hasStatsModule('geo')\n\t\t});\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.TECHNOLOGY'),\n\t\t\troute: ['admin', 'analytics', 'technology'],\n\t\t\tisAvailableInDifferentPlan: !this.hasStatsModule('tech')\n\t\t});\n\n\t\t// Hiding mocked features.\n\t\tif(this.isBetaMode) {\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: 'Playback exp.',\n\t\t\t\troute: ['admin', 'analytics', 'playback-experience'],\n\t\t\t\tisBeta: true,\n\t\t\t});\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: 'Selected playback',\n\t\t\t\tisHiddenWhenNotActive: true,\n\t\t\t\troute: ['admin', 'analytics', 'playback-experience', 'playback'],\n\t\t\t\tisBeta: true,\n\t\t\t});\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: 'Errors & Failures',\n\t\t\t\troute: ['admin', 'analytics', 'errors'],\n\t\t\t\tisBeta: true,\n\t\t\t});\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: 'RT Marketing',\n\t\t\t\troute: ['admin', 'analytics', 'real-time-marketing'],\n\t\t\t\tisBeta: true,\n\t\t\t});\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: 'Content Insights',\n\t\t\t\troute: ['admin', 'analytics', 'content-insights'],\n\t\t\t\tisBeta: true,\n\t\t\t});\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.QOS'),\n\t\t\t\troute: ['admin', 'analytics', 'qos']\n\t\t\t});\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: 'Flex Model',\n\t\t\t\troute: ['admin', 'analytics', 'flexmodel']\n\t\t\t});\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: 'New model',\n\t\t\t\tisHiddenWhenNotActive: true,\n\t\t\t\troute: ['admin', 'analytics', 'flexmodel', 'setup']\n\t\t\t});\n\t\t}\n\n\t\t// Hiding mocked features.\n\t\tif(this.isBetaMode) {\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.ALBUMS'),\n\t\t\t\troute: ['admin', 'analytics', 'albums']\n\t\t\t});\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: 'Selected album',\n\t\t\t\tisHiddenWhenNotActive: true,\n\t\t\t\troute: ['admin', 'analytics', 'albums', ':collectionId']\n\t\t\t});\n\t\t}\n\t\tif(this.isBetaMode) {\n\t\t\tanalyticsMenu.push({\n\t\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.HEARTBEAT'),\n\t\t\t\troute: ['admin', 'analytics', 'heartbeat']\n\t\t\t});\n\t\t}\n\n\t\tanalyticsMenu.push({\n\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.INFO'),\n\t\t\troute: ['admin', 'analytics', 'info']\n\t\t});\n\n\t\tlet menu = [\n\t\t\t{\n\t\t\t\tname: this.translation.translate('MENU.MAIN.PRODUCTS'),\n\t\t\t\ticon: 'fa-shopping-basket',\n\t\t\t\troute: ['admin', 'products']\n\t\t\t}, {\n\t\t\t\tname: this.translation.translate('MENU.MAIN.ANALYTICS.NAME'),\n\t\t\t\ticon: 'fa-area-chart',\n\t\t\t\topenIcon: 'fa-area-chart',\n\t\t\t\troute: ['admin', 'analytics'],\n\t\t\t\tdata: analyticsMenu\n\t\t\t}, {\n\t\t\t\tname: this.translation.translate('MENU.MAIN.PLAYER_CONFIG'),\n\t\t\t\ticon: 'fa-play-circle',\n\t\t\t\troute: ['admin', 'player'],\n\t\t\t\tdata: new Array<any>()\n\t\t\t}\n\t\t\t/*{\n\t\t\t\tname: this.translation.translate('MENU.MAIN.UPLOAD'), icon: 'fa-upload', route: ['admin', 'upload']\n\t\t\t}, {\n\t\t\t\tname: this.translation.translate('MENU.MAIN.MEDIA'), icon: 'fa-film', route: ['admin', 'media']\n\t\t\t}, {\n\t\t\t\tname: this.translation.translate('MENU.MAIN.SETTINGS'), icon: 'fa fa-cogs', route: ['admin', 'settings']\n\t\t\t}, {\n\t\t\t\tname: this.translation.translate('MENU.MAIN.CHANGELOG'), icon: 'fa fa-book', route: ['admin', 'changelog']\n\t\t\t}*/\n\t\t];\n\n\t\tthis.sidebar.setupDefault({\n\t\t\trenderAt: Date.now(),\n\t\t\tname: this.translation.translate('MENU.MAIN.NAME'),\n\t\t\titems: menu\n\t\t});\n\n\t\tif(!this.config.mobile) {\n\t\t\tthis.sidebar.openDefault();\n\t\t}\n\n\t\t//listen for changes in the user service and update the header label accordingly\n\t\tthis.user.userDataChanged.subscribe(() => this.setHeaderLabel());\n\n\t\tthis.active = true;\n\t\tthis.cdr.markForCheck();\n\t\tthis.view.spinner(false);\n\n\t\tif (!this.user.hasGdprInfoShown) {\n\t\t\tthis.user.hasGdprInfoShown = true;\n\t\t\tthis.user.updateUser({\n\t\t\t\temail: this.user.email,\n\t\t\t\tfirst_name: this.user.firstName,\n\t\t\t\tlast_name: this.user.lastName,\n\t\t\t\thas_gdpr_info_shown: true,\n\t\t\t\thas_agree_for_newsletter: this.user.hasAgreeForNewsletter\n\t\t\t});\n\t\t\tthis.showGdprInfo();\n\t\t}\n\t}\n\n\tpublic showGdprInfo(): void {\n\t\tthis.modal.gdprInfo(this.translation.translate('MODAL.GDPR_INFO'));\n\t}\n\n\tprivate setHeaderLabel(): void {\n\t\tthis.header.menu([{\n\t\t\tlabel: this.user.firstName + ' ' + this.user.lastName,\n\t\t\timage: this.url.file('img/user/account.svg'),\n\t\t\tmenu: [{\n\t\t\t\tlabel: this.translation.translate('MENU.USER.ACCOUNT'),\n\t\t\t\tclick: () => this.router.navigate(['admin', 'account'])\n\t\t\t}, {\n\t\t\t\tlabel: this.translation.translate('MENU.USER.LOGOUT'),\n\t\t\t\tclick: () => this.login.logout(() => {\n\t\t\t\t\t//console.log('GO TO LOGIN PAGE');\n\t\t\t\t\tthis.router.initialNavigation();\n\t\t\t\t\tthis.router.navigate(['login']);\n\t\t\t\t})\n\t\t\t}]\n\t\t}]);\n\t}\n\n\tprivate hasStatsModule(moduleName: string): boolean {\n\t\treturn (this.user.statsModules != null) && (this.user.statsModules.indexOf(moduleName) != -1);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/content/content.component.ts","/**\n * Created by mthk on 14/10/16.\n */\nimport {Observable} from 'rxjs/Observable';\nimport {Injectable} from '@angular/core';\nimport {Resolve, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';\nimport {ContentComponent} from './content.component';\nimport {UserService} from '../../service/user.service';\n\n@Injectable()\nexport class ContentResolver implements Resolve<ContentComponent> {\n\n\tconstructor(private user: UserService) {}\n\t\n\tresolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | Promise<any> | any {\n\t\treturn this.user.get();\n\t}\n\t\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/content/content.resolver.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { VIEW_COMPONENTS } from '../../components/index';\nimport { AuthGuard } from '../../service/auth.guard.service';\nimport { AccountModule } from '../account/account.module';\nimport { AnalyticsModule, AnalyticsRoutes } from '../analytics/analytics.module';\nimport { HeaderModule } from '../header/header.module';\nimport { ModalModule } from '../modal/modal.module';\nimport { PlayerModule } from '../player/player.module';\nimport { ProductsModule } from '../products/products.module';\nimport { SidebarModule } from '../sidebar/sidebar.module';\nimport { SubscriptionModule } from '../subscription/subscription.module';\nimport { ContentComponent } from './content.component';\nimport { ContentConfig, ContentConfigData } from './content.config';\nimport { ContentResolver } from './content.resolver';\n\nconst routes: Routes = [\n\t{\n\t\tpath: 'admin',\n\t\tcomponent: ContentComponent,\n\t\tcanActivate: [AuthGuard],\n\t\tresolve: { content: ContentResolver },\n\t\tchildren: [\n\t\t\t{ path: 'account', loadChildren:() => AccountModule },\n\t\t\t{ path: 'analytics', loadChildren: () => AnalyticsModule },\n\t\t\t{ path: 'player', loadChildren: () => PlayerModule },\n\t\t\t{ path: 'products', loadChildren: () => ProductsModule},\n\t\t\t{ path: 'subscription', loadChildren: () => SubscriptionModule },\n\t\t\t{ path: '', redirectTo: 'analytics', pathMatch: 'full' },\n\t\t\t{ path: '**', redirectTo: 'analytics' }\n\t\t]\n\t},\n\t{ path: '', redirectTo: 'admin', pathMatch: 'full' },\n\t{ path: '**', redirectTo: 'admin' }\n];\n\n@NgModule({\n\timports: [\n\t\t// ng2 modules\n\t\tRouterModule.forChild(routes),\n\t\tHttpModule,\n\t\tCommonModule,\n\t\tLocalizationModule,\n\t\t// global modules\n\t\tHeaderModule,\n\t\tSidebarModule,\n\t\tModalModule,\n\t],\n\tproviders: [\n\t\tAuthGuard,\n\t\tContentResolver,\n\t\t{ provide: ContentConfig, useValue: ContentConfigData }\n\t],\n\tdeclarations: [...VIEW_COMPONENTS, ContentComponent],\n\tentryComponents: [...VIEW_COMPONENTS, ContentComponent],\n\texports: [RouterModule, ...VIEW_COMPONENTS, ContentComponent]\n})\nexport class ContentModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/content/content.module.ts","/**\n* Author:  Tiago Cruz\n* Date:\t3/10/2016 </date>\n* Summary: Login Component\n*/\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, OnDestroy, OnInit, Renderer2, ViewChild } from '@angular/core';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { LocaleService, Localization, TranslationService } from 'angular-l10n';\nimport { Observable } from 'rxjs/Observable';\nimport { Subscription } from 'rxjs/Subscription';\nimport { AuthService } from '../../service/auth.service';\nimport { LoginService } from '../../service/login.service';\nimport { ValidationService } from '../../service/validation.service';\nimport { ViewService } from '../../service/view.service';\nimport { SwitchLabel } from '../form/switch/switch.component';\nimport { UrlService } from './../../service/url.service';\n\n@Component({\n\tselector: 'login',\n\ttemplate: require('./login.view.html'),\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LoginView extends Localization implements OnInit, OnDestroy {\n\n\t@ViewChild('form') form: ElementRef;\n\tactive: boolean;\n\tautocomplete: 'on' | 'off';\n\n\trememberMe = true;\n\trememberMeLabel: SwitchLabel;\n\terror = '';\n\tcurrentYear = new Date().getFullYear();\n\tsignInUrl: string;\n\tpasswordResetUrl: string;\n\n\tprivate initTimer: Subscription | null;\n\tprivate initAfterBackRedirectionComplete: Subscription | null;\n\n\tconstructor(\n\t\tpublic locale: LocaleService,\n\t\tpublic translation: TranslationService,\n\t\tpublic auth: AuthService,\n\t\tprivate service: LoginService,\n\t\tprivate view: ViewService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate router: Router,\n\t\tprivate renderer: Renderer2,\n\t\tprivate url: UrlService,\n\t) {\n\t\tsuper(locale, translation);\n\t\tthis.view.spinner(true);\n\t\tthis.active = false;\n\t\tthis.signInUrl = this.url.getSignUpPage();\n\t\tthis.passwordResetUrl = this.url.getPasswordResetPage();\n\t}\n\n\t//LIFE CYCLE EVENTS\n\tngOnInit() {\n\t\t// Check if accessToken parameter available in query string in URL.\n\t\t// If so perform auto-login.\n\t\tlet accessTokenMatch = window.location.href.match(/[&\\?]accessToken=([a-zA-Z0-9]+)/);\n\t\tif (accessTokenMatch) {\n\t\t\tlet redirectUrl = null;\n\t\t\tlet redirectUrlMatch = window.location.href.match(/[&\\?]redirectUrl=([a-zA-Z0-9/_\\-%]+)/);\n\t\t\tif (redirectUrlMatch) {\n\t\t\t\tredirectUrl = decodeURIComponent(redirectUrlMatch[1]);\n\t\t\t}\n\n\t\t\t// Subscribe initialization on routing finish. Redirection will start in autologinWithAccessTokenFromUrl.\n\t\t\t// If access token is invalid / outdated, then user will be redirected on login page. Then initialization\n\t\t\t// should be performed. If access token is valid, then LoginView will be destroyed and init() will be not called.\n\t\t\tif (!this.initAfterBackRedirectionComplete) {\n\t\t\t\tthis.initAfterBackRedirectionComplete = this.router.events.subscribe((e: any) => {\n\t\t\t\t\t// If it is a NavigationEnd event re-initalise the component\n\t\t\t\t\tif (e instanceof NavigationEnd) {\n\t\t\t\t\t\tthis.initWithDebouncer();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.autologinWithAccessTokenFromUrl(accessTokenMatch[1], redirectUrl);\n\t\t} else {\n\t\t\tthis.initWithDebouncer();\n\t\t}\n\t}\n\tngOnDestroy() {\n\t\tif (this.initTimer != null)\n\t\t\tthis.initTimer.unsubscribe();\n\t\tif (this.initAfterBackRedirectionComplete != null)\n\t\t\tthis.initAfterBackRedirectionComplete.unsubscribe();\n\t}\n\n\t//FUNCTIONS\n\t@HostListener('window:keydown.enter', ['$event'])\n\tlogin() {\n\t\tif (!('user' in this.auth) || this.auth.user == null || !ValidationService.isValidEmail(this.auth.user)) {\n\t\t\tthis.error = this.translation.translate('LOGIN.INVALID.USER');\n\t\t\tthis.cdr.markForCheck();\n\t\t\treturn;\n\t\t} else if (!('password' in this.auth) || this.auth.password == null) {\n\t\t\tthis.error = this.translation.translate('LOGIN.INVALID.PASSWORD');\n\t\t\tthis.cdr.markForCheck();\n\t\t\treturn;\n\t\t}\n\t\t//\n\t\tthis.error = '';\n\t\tthis.cdr.markForCheck();\n\t\tthis.view.spinner(true);\n\t\tthis.service.login(() => this.loginSucceed(), (msg: string) => this.loginFail(msg));\n\t}\n\n\tautologinWithAccessTokenFromUrl(accessToken: string, redirectUrl?: string) {\n\t\t// Set access token from URL directly into authService. It will be stored in cookie for future use.\n\t\tthis.auth.token = accessToken;\n\n\t\tif (redirectUrl) {\n\t\t\tthis.auth.redirectUrl = redirectUrl;\n\t\t}\n\n\t\t// Handle as user would be already logged. Go to defined landing page.\n\t\tthis.loginSucceed();\n\t}\n\n\trememberMeChange(value: boolean) {\n\t\tthis.rememberMe = value;\n\t\tthis.checkAutocomplete();\n\t\tthis.cdr.markForCheck();\n\t}\n\n\tprivate init() {\n\t\tthis.checkAutocomplete();\n\t\tthis.rememberMeLabel = {\n\t\t\ton: this.translation.translate('LOGIN.LABEL.REMEMBER_ME.ON'),\n\t\t\toff: this.translation.translate('LOGIN.LABEL.REMEMBER_ME.OFF')\n\t\t};\n\t\tthis.active = true;\n\t\tthis.cdr.markForCheck();\n\t\tthis.view.spinner(false);\n\t}\n\n\tprivate initWithDebouncer() {\n\t\tif (this.initTimer != null)\n\t\t\tthis.initTimer.unsubscribe();\n\t\tthis.initTimer = Observable.timer(250).subscribe(() => this.init());\n\t}\n\n\tprivate checkAutocomplete() {\n\t\tlet val: 'on' | 'off' = this.rememberMe == true ? 'on' : 'off';\n\t\tif (this.autocomplete != val)\n\t\t\tthis.autocomplete = val;\n\t}\n\n\tprivate loginSucceed() {\n\t\tif (this.auth.logged) {\n\t\t\tif (!this.view.checkIfAppInIframe() && (this.rememberMe == true)) {\n\t\t\t\t// Force to submit form for autocomplete purpose.\n\t\t\t\t// Do not perform it, when embeded in ifame - authentication by external access token.\n\t\t\t\tthis.form.nativeElement.submit();\n\t\t\t}\n\n\t\t\tlet redirectTo = this.auth.redirectUrl ? this.auth.redirectUrl : this.auth.defaultUrl;\n\t\t\tif (redirectTo == this.auth.sanitizeUrl(this.router.url))\n\t\t\t\tredirectTo = this.auth.defaultUrl;\n\t\t\tthis.router.navigate([redirectTo]);\n\t\t}\n\t\tthis.auth.redirectUrl = null;\n\t}\n\n\tprivate loginFail(msg: string) {\n\t\tthis.view.spinner(false);\n\t\tthis.error = msg;\n\t\tthis.cdr.markForCheck();\n\t\tthis.view.spinner(false);\n\t}\n\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/login/login.view.ts","import { DOCUMENT } from \"@angular/common\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from \"@angular/router\";\nimport { Observable } from \"rxjs\";\n\n@Injectable()\nexport class CanActivateLogin implements CanActivate {\n\n\tconstructor(@Inject(DOCUMENT) private doc: Document) { }\n\n\tcanActivate(_route: ActivatedRouteSnapshot, _state: RouterStateSnapshot) {\n\t\tconst query = this.doc.querySelectorAll<HTMLLinkElement>(`link#bradmax-kit-css`);\n\t\tif (query.length < 1) {\n\t\t\treturn new Observable<boolean>(s => {\n\t\t\t\tconst link = this.doc.createElement('link');\n\t\t\t\tlink.id = 'bradmax-kit-css';\n\t\t\t\tlink.rel = 'stylesheet';\n\t\t\t\tlink.href = (process.env.NODE_ENV == 'development'\n\t\t\t\t\t? 'cdn'\n\t\t\t\t\t: 'https://bradmax.com/static/sales_v2'\n\t\t\t\t) + '/css/theme.bundle.css';\n\t\t\t\tlink.onerror = e => s.error(e);\n\t\t\t\tlink.onload = () => { s.next(true); s.complete(); }\n\t\t\t\tthis.doc.head.appendChild(link);\n\t\t\t});\n\t\t}\n\t\treturn true;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/login/service/can.activete.login.guard.ts","import { DOCUMENT } from \"@angular/common\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot } from \"@angular/router\";\nimport { LoginView } from \"../login.view\";\n\n@Injectable()\nexport class CanDeactivateLogin implements CanDeactivate<LoginView> {\n\n\tconstructor(@Inject(DOCUMENT) private doc: Document) { }\n\n\tcanDeactivate(_component: LoginView, _currentRoute: ActivatedRouteSnapshot, _currentState: RouterStateSnapshot, _nextState: RouterStateSnapshot) {\n\t\tconst query = this.doc.querySelectorAll<HTMLLinkElement>(`link#bradmax-kit-css`);\n\t\tif (query.length > 0)\n\t\t\tfor (let i = 0; i < query.length; i++) {\n\t\t\t\tconst link = query.item(i);\n\t\t\t\tlink.parentElement.removeChild(link);\n\t\t\t}\n\t\treturn true;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/login/service/can.deactivete.login.guard.ts","/**\n* Author:  Tiago Cruz\n* Date:    3/10/2016 </date>\n* Summary: Login functionality was created as a module to make it easier for future reuse in other projects\n*/\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule, Routes } from '@angular/router';\nimport { LocalizationModule } from 'angular-l10n';\n\nimport { LoginService } from '../../service/login.service';\nimport { ValidationService } from '../../service/validation.service';\nimport { FormComponentsModule } from '../form/form.module';\nimport { ModalModule } from '../modal/modal.module';\nimport { LoginView } from './login.view';\nimport { CanActivateLogin } from './service/can.activete.login.guard';\nimport { CanDeactivateLogin } from './service/can.deactivete.login.guard';\n\nconst routes: Routes = [{\n\tpath: 'login', component: LoginView,\n\tcanActivate: [CanActivateLogin],\n\tcanDeactivate: [CanDeactivateLogin]\n}];\n\n@NgModule({\n\timports: [\n\t\tHttpModule,\n\t\tFormsModule,\n\t\tCommonModule,\n\t\tRouterModule.forChild(routes),\n\t\tLocalizationModule,\n\t\tModalModule, FormComponentsModule\n\t],\n\tproviders: [\n\t\tLoginService, ValidationService,\n\t\t// { provide: LoginConfig, useValue: LoginConfigData }\n\t\tCanActivateLogin,\n\t\tCanDeactivateLogin,\n\t],\n\tdeclarations: [LoginView],\n\tentryComponents: [LoginView],\n\texports: [RouterModule, LoginView]\n})\nexport class LoginModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/login/login.module.ts","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { ViewService } from \"../../../service/view.service\";\n\n@Component({\n\tselector: 'spinner',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: require('./spinner.component.html'),\n\tstyles: [require('./spinner.component.scss')],\n})\nexport class SpinnerComponent implements OnInit, OnDestroy {\n\n\t@HostBinding(`class.active`) active = true;\n\n\terrorInfo: String | null | undefined;\n\n\tprivate bodySpinnerSub: Subscription;\n\n\tconstructor(\n\t\tprivate view: ViewService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t) { }\n\n\n\tngOnInit() {\n\t\tthis.bodySpinnerSub = this.view.bodySpinnerStream$\n\t\t\t.subscribe(spinnerData => {\n\t\t\t\tif (this.active != spinnerData.show || this.errorInfo != spinnerData.error) {\n\t\t\t\t\tthis.active = spinnerData.show;\n\t\t\t\t\tthis.errorInfo = spinnerData.error;\n\t\t\t\t\tthis.cdr.markForCheck();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\tngOnDestroy() {\n\t\tthis.active = false;\n\t\tif (this.bodySpinnerSub)\n\t\t\tthis.bodySpinnerSub.unsubscribe();\n\t}\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/spinner/component/spinner.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SpinnerComponent } from './component/spinner.component';\n\n@NgModule({\n\timports: [\n\t\tCommonModule\n\t],\n\tproviders: [\n\t],\n\tentryComponents: [\n\t\tSpinnerComponent,\n\t],\n\tdeclarations: [\n\t\tSpinnerComponent,\n\t],\n\texports: [\n\t\tSpinnerComponent\n\t]\n})\nexport class SpinnerModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/spinner/spinner.module.ts","import { ApplicationRef, APP_INITIALIZER, ErrorHandler, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { createInputTransfer, createNewHosts, removeNgStyles } from '@angularclass/hmr';\nimport { LocalizationModule } from 'angular-l10n';\nimport { FlashMessagesModule } from 'angular2-flash-messages';\nimport { ContentModule } from '../module/content/content.module';\nimport { LoginModule } from '../module/login/login.module';\nimport { ModalModule } from '../module/modal/modal.module';\nimport { SpinnerModule } from '../module/spinner/spinner.module';\nimport { AccountService } from '../service/account.service';\nimport { BradmaxApi } from '../service/api.service';\nimport { AuthService } from '../service/auth.service';\nimport { BraintreeService } from '../service/braintree.service';\nimport { BuyCookieService, initBuyCookieService } from '../service/buyCookie.service';\nimport { CookieService } from '../service/cookie.service';\nimport { CountryService } from '../service/country.service';\nimport { ExceptionService } from '../service/exception.service';\nimport { ExportService } from '../service/export.service';\nimport { LocalStorageService } from '../service/localstorage.service';\nimport { SidebarService } from '../service/sidebar.service';\nimport { UserService } from '../service/user.service';\nimport { initViewService, ViewService } from '../service/view.service';\nimport { AppComponent } from './';\nimport { UrlService } from './../service/url.service';\nimport { AppConfig, AppConfigData } from './app.config';\nimport { initLocalization, LocalizationConfig } from './app.localization';\n\ntype StoreType = {\n\tstate: any,\n\trestoreInputValues: () => void,\n\tdisposeOldHosts: () => void\n};\n\n@NgModule({\n\timports: [\n\t\t// ng2 modules\n\t\tRouterModule.forRoot([], {\n\t\t\tenableTracing: false,\n\t\t\tinitialNavigation: true\n\t\t}),\n\t\tHttpModule,\n\t\tBrowserModule,\n\t\tBrowserAnimationsModule,\n\t\tFormsModule,\n\t\tReactiveFormsModule,\n\t\t// global modules\n\t\tLocalizationModule.forRoot(),\n\t\tModalModule,\n\t\t// app modules\n\t\tSpinnerModule,\n\t\tLoginModule,\n\t\tContentModule,\n\t\tFlashMessagesModule\n\t],\n\tdeclarations: [\n\t\tAppComponent,\n\t],\n\tproviders: [\n\t\tCookieService,\n\t\tLocalStorageService,\n\t\tBuyCookieService,\n\t\t{\n\t\t\tprovide: APP_INITIALIZER,\n\t\t\tuseFactory: initBuyCookieService,\n\t\t\tdeps: [BuyCookieService, CookieService],\n\t\t\tmulti: true\n\t\t},\n\t\tViewService,\n\t\t{\n\t\t\tprovide: APP_INITIALIZER,\n\t\t\tuseFactory: initViewService,\n\t\t\tdeps: [ViewService],\n\t\t\tmulti: true\n\t\t},\n\t\tLocalizationConfig,\n\t\t{\n\t\t\tprovide: APP_INITIALIZER,\n\t\t\tuseFactory: initLocalization,\n\t\t\tdeps: [LocalizationConfig, UrlService],\n\t\t\tmulti: true\n\t\t},\n\t\t// OVERRIDES\n\t\t{ provide: AppConfig, useValue: AppConfigData },\n\t\t{ provide: ErrorHandler, useClass: ExceptionService },\n\t\t// GLOBAL SERVICES,\n\t\tAuthService,\n\t\tBradmaxApi,\n\t\tExceptionService,\n\t\tCountryService,\n\t\tAccountService,\n\t\tUrlService,\n\t\tBraintreeService,\n\t\tSidebarService,\n\t\tUserService,\n\t\tExportService,\n\t],\n\tbootstrap: [AppComponent]\n})\nexport class AppModule {\n\n\tconstructor(public appRef: ApplicationRef) { }\n\n\thmrOnInit(store: StoreType) {\n\t\tif (!store || !store.state) return;\n\t\t//console.log('HMR store', store);\n\t\t//console.log('store.state.data:', store.state.data);\n\t\t// inject AppStore here and update it\n\t\t// this.AppStore.update(store.state)\n\t\tif ('restoreInputValues' in store) {\n\t\t\tstore.restoreInputValues();\n\t\t}\n\t\t// change detection\n\t\tthis.appRef.tick();\n\t\tdelete store.state;\n\t\tdelete store.restoreInputValues;\n\t}\n\thmrOnDestroy(store: StoreType) {\n\n\t\tconsole.clear();\n\t\tvar cmpLocation = this.appRef.components.map(cmp => cmp.location.nativeElement);\n\t\t// recreate elements\n\t\tstore.disposeOldHosts = createNewHosts(cmpLocation);\n\t\t// inject your AppStore and grab state then set it on store\n\t\t// var appState = this.AppStore.get()\n\t\t// store.state = {data: 'sample data'};\n\t\t// store.state = Object.assign({}, appState)\n\t\t// save input values\n\t\tstore.restoreInputValues = createInputTransfer();\n\t\t// remove styles\n\t\tremoveNgStyles();\n\t}\n\n\thmrAfterDestroy(store: StoreType) {\n\t\t// display new elements\n\t\tstore.disposeOldHosts();\n\t\tdelete store.disposeOldHosts;\n\t\t// anything you need done the component is removed\n\t}\n\n}\n\n\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/app/app.module.ts","import { Injectable } from '@angular/core';\n\n@Injectable()\nexport class LocalStorageService {\n\n\twrite(name: string, value: string | null) {\n\t\twindow.localStorage.setItem(name, value);\n\t}\n\n\tread(name: string) {\n\t\treturn window.localStorage.getItem(name);\n\t}\n\n\terase(name: string) {\n\t\twindow.localStorage.removeItem(name);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/localstorage.service.ts","import {Component, ChangeDetectionStrategy} from '@angular/core';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {AbstractModalComponent} from './abstract.modal.component';\nimport {ModalButton} from './modal.model';\n\nlet HTML = ''\n    + '<h4 class=\"title\" *ngIf=\"title\">{{title}}</h4>'\n\t+ '<div class=\"prompt-message\" [innerHtml]=\"sanitizer.bypassSecurityTrustHtml(html)\"></div>'\n\t+ '<div class=\"prompt-buttons\">'\n\t\t+ '<button *ngFor=\"let btn of buttons\" [ngClass]=\"formatNgClass(btn)\" (click)=\"click(btn)\">'\n\t\t\t+ '<i *ngIf=\"btn.fa!=null\" class=\"fa fa-{{btn.fa}}\"></i>'\n\t\t\t+ '<span> {{btn.label}}</span>'\n\t\t+ '</button>'\n\t+ '</div>'\n+ '';\n\nlet STYLE = `\n:host{display: block;margin: auto;font-weight: 200;background: #fff;max-width: 800px;min-width: 200px; max-height:600px;overflow:auto;}\n:host .title { padding: 16px 16px 16px 16px; text-align: center; }\n:host .prompt-message { padding: 0px 16px 16px 16px; text-align: left; white-space: pre-wrap;}\n:host .prompt-buttons { padding: 2px 16px 16px 16px; text-align: center; }\n:host .prompt-buttons button {\n    display: inline-block;\n    text-align: center;\n    vertical-align: middle;\n    touch-action: manipulation;\n    cursor: pointer;\n    //background: #FFFFFF;\n    //border: 1px solid transparent;\n    white-space: nowrap;\n    padding: 4px 10px;\n    margin: 2px 6px;\n    font-size: inherit;\n    line-height: 1em;\n    border-radius: 30;\n    user-select: none;\n}`;\n\n@Component({\n\tselector: 'prompt-modal-component',\n\ttemplate: HTML, styles: [STYLE],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TermsModalComponent extends AbstractModalComponent {\n\t//\n\tconstructor(public sanitizer: DomSanitizer) {\n\t\tsuper();\n\t}\n\t//\n\tformatNgClass(btn: ModalButton) {\n\t\tlet classes: { [name: string]: boolean } = {};\n\t\tif (btn.classes != null)\n\t\t\tfor (let i = 0; i < btn.classes.length; i++)\n\t\t\t\tclasses[btn.classes[i]] = true;\n\t\treturn classes;\n\t}\n\t//\n\tclick(btn: ModalButton) {\n\t\tif (btn.click != null)\n\t\t\tbtn.click();\n\t\tif (btn.close && btn.close == true)\n\t\t\tthis.close();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/terms.modal.component.ts","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\nimport { SidebarModule } from '../sidebar/sidebar.module';\nimport { HeaderComponent, HeaderService } from './';\nimport { BurgerComponent } from './header.burger.component';\nimport { HeaderMenuComponent } from './header.menu.component';\n\n@NgModule({\n\timports: [RouterModule, CommonModule, SidebarModule],\n\tdeclarations: [HeaderComponent, BurgerComponent, HeaderMenuComponent],\n\tproviders: [HeaderService],\n\texports: [HeaderComponent]\n})\nexport class HeaderModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/header/header.module.ts","/**\n * Created by mthk on 09/10/16.\n */\nimport {Component, ChangeDetectionStrategy, ChangeDetectorRef, ElementRef} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {ViewService} from '../../service/view.service';\nimport {HeaderMenuModel, HeaderMenuItem} from './header.model';\nimport {HeaderService} from './header.service';\nimport {DOMUtil} from '../../util/dom.util';\n\nlet HTML = '<ng-template [ngIf]=\"model!=null\">'\n+ '<span *ngFor=\"let menu of model\" [class.active]=\"menu.active\">'\n\t+ '<a (click)=\"toggle(menu)\">'\n\t+ '<img *ngIf=\"menu.image\" [src]=\"menu.image\" />'\n\t+ '<span *ngIf=\"menu.label\">{{menu.label}}</span> <b class=\"caret\"></b>'\n\t+ '</a>'\n\t+ '<ul *ngIf=\"menu.active && menu.menu\">'\n\t\t+ '<li *ngFor=\"let item of menu.menu\"><a (click)=\"click(item)\" >{{item.label}}</a></li>'\n\t+ '</ul>'\n+ '</span>'\n+ '</ng-template>';\n\nlet STYLE = ''\n\t+ ':host {display: block;float: right;height: 56px;line-height: 56px;}'\n\t+ ':host > span {display: inline-block;position: relative;border: none;float: left;'\n\t\t+ 'border-left: 1px solid #efefef;min-width: 80px;text-align: right;overflow: hidden;}'\n\t+ ':host > span.active {box-shadow: 0px 0px 3px 0px #888;z-index: 1;}'\n\t+ ':host > span a {display: inline-block;cursor: pointer;border: none;width: 100%;margin: 0;padding: 0 10px;'\n\t\t+ 'text-decoration: none !important;color: inherit;}'\n\t+ ':host > span > a:hover, :host > span.active > a {background: #fafafa;}'\n\t+ ':host > span > a > img {width: 30px;height: 30px;margin-right: 5px;border-radius: 30px;}'\n\t+ ':host > span > ul {background: #fafafa;padding: 0;margin: 0;border-radius: 0;}'\n\t+ ':host > span > ul > li {list-style: none;line-height: 32px;text-align: center;}'\n\t+ ':host > span > ul > li > a {text-align: center;}'\n\t+ ':host > span > ul > li > a:hover {background: #fefefe;}';\n\n@Component({\n\tselector: 'header-menu', template: HTML, styles: [STYLE],\n\thost: { '(document:click)': 'onDocumentClick($event)'},\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class HeaderMenuComponent {\n\t\n\tactive: boolean;\n\tmodel: HeaderMenuModel[];\n\t\n\tconstructor(public view: ViewService,\n\t\t\t\tprivate element: ElementRef,\n\t\t\t\tprivate cdr: ChangeDetectorRef,\n\t\t\t\tprivate router: Router,\n\t\t\t\tprivate service: HeaderService) {\n\t\tthis.active = false;\n\t\tthis.view.resizeStream$.subscribe(() => this.cdr.markForCheck());\n\t\tthis.router.events.subscribe(() => this.closeAll());\n\n\t\t// If there is any data then load it.\n\t\tif(this.service.lastMenuData) {\n\t\t\tthis.model = this.service.lastMenuData;\n\t\t}\n\t\t// Listen for model changes.\n\t\tthis.service.menuStream$.subscribe((data: HeaderMenuModel[]) => {\n\t\t\tthis.model = data;\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\t}\n\t\n\ttoggle(m: HeaderMenuModel) {\n\t\tm.active = !m.active;\n\t\tif (m.active)\n\t\t\tthis.active = true;\n\t}\n\t\n\tclick(i: HeaderMenuItem) {\n\t\tthis.closeAll();\n\t\tif (i.click != null)\n\t\t\ti.click();\n\t}\n\t\n\tonDocumentClick(e: MouseEvent) {\n\t\tif (this.active == true && !DOMUtil.isDescendant(this.element.nativeElement, e.target as Node))\n\t\t\tthis.closeAll();\n\t}\n\t\n\tprivate closeAll() {\n\t\tif (this.active == true && this.model != null && this.model.length > 0) {\n\t\t\tthis.active = false;\n\t\t\tthis.model.forEach((m: HeaderMenuModel) => m.active = false);\n\t\t\tthis.cdr.markForCheck();\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/header/header.menu.component.ts","/**\n * Created by mthk on 09/10/16.\n */\nimport {Component, ChangeDetectionStrategy, ChangeDetectorRef, EventEmitter} from '@angular/core';\nimport {Router} from '@angular/router';\n\nlet HTML = '<span></span><span></span><span></span><span></span><span></span><span></span>';\n\nlet STYLE = `* {margin: 0;padding: 0;}\n:host {display:block;width: 32px;height: 24px;position: relative;margin: 16px 10px; float: right;\n    transform: rotate(0deg);transition: .5s ease-in-out;cursor: pointer;}\n:host span {display: block;position: absolute;height: 4px;width: 50%;opacity: 1;transition: .25s ease-in-out;\n    -webkit-transform: rotate(0deg);-moz-transform: rotate(0deg);-o-transform: rotate(0deg);transform: rotate(0deg);\n    -webkit-transition: .25s ease-in-out;-moz-transition: .25s ease-in-out;-o-transition: .25s ease-in-out;}\n:host span:nth-child(even) {left: 50%;border-radius: 0;}\n:host span:nth-child(odd) {left: 0;border-radius: 0;  }\n:host span:nth-child(1),:host span:nth-child(2) {top: 0;}\n:host span:nth-child(3),:host span:nth-child(4) {top: 10px;}\n:host span:nth-child(5),:host span:nth-child(6) {top: 20px;}\n:host.active span:nth-child(1),\n:host.active span:nth-child(6) {-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);\n\t-o-transform: rotate(45deg);transform: rotate(45deg);}\n:host.active span:nth-child(2),\n:host.active span:nth-child(5) {\n    -webkit-transform: rotate(-45deg);-moz-transform: rotate(-45deg);-o-transform: rotate(-45deg);\n    transform: rotate(-45deg);}\n:host.active span:nth-child(1) {left: 4px; top: 4px; }\n:host.active span:nth-child(2) {left: calc(50% - 1px);top: 4px; }\n:host.active span:nth-child(3) {left: -50%;opacity: 0; }\n:host.active span:nth-child(4) {left: 100%;opacity: 0; }\n:host.active span:nth-child(5) {left: 4px;top: 15px; }\n:host.active span:nth-child(6) {left: calc(50% - 1px);top: 15px; }`;\n\n@Component({\n\tselector: 'burger', template: HTML, styles: [STYLE],\n\thost: { '(click)': 'onClick()', '[class.active]': 'active' },\n\toutputs: ['change'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class BurgerComponent {\n\t//\n\tactive = false;\n\t//\n\tchange = new EventEmitter<boolean>();\n\t//\n\tconstructor(private router: Router, private cdr: ChangeDetectorRef) {\n\t\tthis.router.events.subscribe(() => {\n\t\t\tif (this.active != false) {\n\t\t\t\tthis.active = false;\n\t\t\t\tthis.cdr.markForCheck();\n\t\t\t}\n\t\t});\n\t}\n\t//\n\tonClick() {\n\t\tthis.active = !this.active;\n\t\tthis.change.emit(this.active);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/header/header.burger.component.ts","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tComponentFactoryResolver,\n\tViewChild,\n\tViewContainerRef,\n} from '@angular/core';\n\nimport { AbstractModalComponent } from './abstract.modal.component';\nimport { ModalModel, ModalType } from './modal.model';\nimport { ModalService } from './modal.service';\n\nlet STYLES = [\n\t':host{display: none;position: fixed;top: 0;bottom: 0;left: 0;right: 0;width: 100%;height: 100%;'\n\t+ 'z-index: 9998;background: rgba(0, 0, 0, 0.5);}',\n\t':host.active {display: table;}',\n\t':host .content {position: relative;display: table-cell;vertical-align: middle;margin: auto;}',\n\t':host .close {position: absolute;top: 5px;left: 5px;}'\n];\n\n@Component({\n\tselector: 'modal',\n\thost: { '[class.active]': 'active', '(click)': 'click($event.target)' },\n\ttemplate: ''\n\t+ '<div class=\"content\">'\n\t+ '<ng-template #placeholder></ng-template>'\n\t+ '</div>',\n\tstyles: STYLES,\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\n\nexport class ModalComponent {\n\n\t@ViewChild('placeholder', { read: ViewContainerRef }) placeholder: ViewContainerRef;\n\n\tcloseOnBackdropClick = true;\n\tactive = false;\n\n\tconstructor(private service: ModalService,\n\t\tprivate cdr: ChangeDetectorRef,\n\t\tprivate resolver: ComponentFactoryResolver) {\n\n\t\tthis.service.createStream$.subscribe((data: ModalModel) => {\n\n\t\t\tthis.closeOnBackdropClick = data.closeOnBackdropClick == null ? true : data.closeOnBackdropClick;\n\t\t\tthis.active = true;\n\t\t\tthis.placeholder.clear();\n\t\t\tlet modal = this.placeholder.createComponent(this.resolver.resolveComponentFactory(data.component));\n\t\t\tif ((data.type == ModalType.alert || ModalType.prompt)\n\t\t\t\t&& modal.instance instanceof AbstractModalComponent) {\n\t\t\t\tlet inst: AbstractModalComponent = modal.instance;\n\t\t\t\tinst.title = data.title ? data.title : null;\n\t\t\t\tinst.html = data.html ? data.html : null;\n\t\t\t\tinst.inputLabel = data.inputLabel ? data.inputLabel : null;\n\t\t\t\tinst.inputDefaultValue = data.inputDefaultValue ? data.inputDefaultValue : null;\n\t\t\t\tinst.buttons = data.buttons ? data.buttons : [];\n\t\t\t\tinst.close = () => this.close();\n\t\t\t}\n\t\t\t$('body').addClass('modal-open');\n\n\t\t\tthis.cdr.markForCheck();\n\t\t});\n\n\t\tthis.service.closeStream$.subscribe(() => this.close());\n\t}\n\n\tclick(e: Element) {\n\t\tif (this.active == true && this.closeOnBackdropClick == true && e.className.indexOf('content') > -1)\n\t\t\tthis.close();\n\t}\n\n\tprivate close() {\n\t\t$('body').removeClass('modal-open');\n\t\tif (this.active == true) {\n\t\t\tthis.active = false;\n\t\t\tthis.placeholder.clear();\n\t\t\tthis.cdr.markForCheck();\n\t\t\tthis.service.closedSource.next(null);\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/modal.component.ts","/**\n * Created by mthk on 01/07/16.\n */\nimport 'rxjs/add/operator/map';\nimport {Injectable, ErrorHandler} from '@angular/core';\nimport {Http, Headers} from '@angular/http';\nimport {AuthService} from './auth.service';\nimport {ViewService} from './view.service';\n\n@Injectable()\nexport class ExceptionService implements ErrorHandler {\n\t//\n    private isSendingReport: boolean;\n\t//\n    constructor(protected view: ViewService, protected access: AuthService, protected http: Http) {\n        this.isSendingReport = false;\n    }\n    //\n\thandleError(error: any): void {\n\t\tconsole.groupCollapsed('================= ExceptionService.handleError =================');\n\t\tthis.print(error);\n\t\tconsole.groupEnd();\n\t\tthis.view.error(error.message);\n\t\t// this.send(error);\n\t}\n    //\n    // call(error: any, stackTrace: any = null, reason: any = null) {\n\t// \tconsole.groupCollapsed('================= ExceptionService.call =================');\n\t// \tthis.print(error, stackTrace);\n\t// \tconsole.groupEnd();\n\t// \tthis.view.error(error.message);\n\t// \t// this.send(error, stackTrace);\n    // }\n    //\n\tprivate print(error: any, stackTrace: any = null) {\n\n\t\t// console.log(error.message);\n\t\t// console.log(error.stack);\n\t\tconsole.error(error);\n\t\tconsole.log(error.stack);\n\t\tconsole.log(error.message);\n\t}\n    //\n\t// private send(error: any, stackTrace: any = null) {\n\t\t// if (this.isSendingReport) {\n\t\t// \tconsole.debug('Report is already sending. Skipping report for this error.');\n\t\t// \treturn;\n\t\t// }\n\t\t// this.isSendingReport = true;\n\t\t// /////////////////////\n\t\t// // - Prepare message.\n\t\t// // let errorMsg: any | null = null;\n\t\t// // if (error && (typeof error === 'object')\n\t\t// // \t&& error.rejection && error.rejection.originalException && error.rejection.originalException.message) {\n\t\t// // \terrorMsg = error.rejection.originalException.message;\n\t\t// // } else {\n\t\t// // \terrorMsg = error + '';\n\t\t// // }\n\t\t// /////////////////////\n\t\t// // - Prepare report.\n\t\t// let data = {\n\t\t// \t'message': (error.hasOwnProperty('message')) ? error.message + '' : '',\n\t\t// \t'stackTrace': (error.hasOwnProperty('stack')) ? error.stack + '' : '',\n\t\t// \t'platform': 'web',\n\t\t// \t'appVersion': 'Build stamp:' + BUILD_STAMP.toString(),\n\t\t// };\n\t\t// // - Send report.\n\t\t// let options = { headers: new Headers(), body: JSON.stringify(data) };\n\t\t// options.headers.append('Accept', 'application/json');\n\t\t// options.headers.append('Content-Type', 'application/json');\n\t\t// options.headers.append('AccessToken', this.access.token);\n\t\t// //\n\t\t// this.http.post(API_URL + '/app-error-report', options.body, options)\n\t\t// \t.subscribe((data: any) => {}, (error: any) => {\n\t\t// \t\tconsole.error('Error occurred during sending error report to system.');\n\t\t// \t}, () => {\n\t\t// \t\tthis.isSendingReport = false;\n\t\t// \t\tconsole.debug('Error sending success');\n\t\t// \t});\n\t// }\n\t//\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/exception.service.ts","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Imports\nvar core_1 = require(\"@angular/core\");\nvar forms_1 = require(\"@angular/forms\");\nvar CodeMirror = require(\"codemirror\");\n/**\n * CodeMirror component\n * Usage :\n * <codemirror [(ngModel)]=\"data\" [config]=\"{...}\"></codemirror>\n */\nvar CodemirrorComponent = (function () {\n    /**\n     * Constructor\n     */\n    function CodemirrorComponent() {\n        this.change = new core_1.EventEmitter();\n        this.focus = new core_1.EventEmitter();\n        this.blur = new core_1.EventEmitter();\n        this.cursorActivity = new core_1.EventEmitter();\n        this.instance = null;\n        this._value = '';\n    }\n    Object.defineProperty(CodemirrorComponent.prototype, \"value\", {\n        get: function () { return this._value; },\n        set: function (v) {\n            if (v !== this._value) {\n                this._value = v;\n                this.onChange(v);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * On component destroy\n     */\n    CodemirrorComponent.prototype.ngOnDestroy = function () {\n    };\n    /**\n     * On component view init\n     */\n    CodemirrorComponent.prototype.ngAfterViewInit = function () {\n        this.config = this.config || {};\n        this.codemirrorInit(this.config);\n    };\n    /**\n     * Initialize codemirror\n     */\n    CodemirrorComponent.prototype.codemirrorInit = function (config) {\n        var _this = this;\n        this.instance = CodeMirror.fromTextArea(this.host.nativeElement, config);\n        this.instance.setValue(this._value);\n        this.instance.on('change', function () {\n            _this.updateValue(_this.instance.getValue());\n        });\n        this.instance.on('focus', function (instance, event) {\n            _this.focus.emit({ instance: instance, event: event });\n        });\n        this.instance.on('cursorActivity', function (instance) {\n            _this.cursorActivity.emit({ instance: instance });\n        });\n        this.instance.on('blur', function (instance, event) {\n            _this.blur.emit({ instance: instance, event: event });\n        });\n    };\n    /**\n     * Value update process\n     */\n    CodemirrorComponent.prototype.updateValue = function (value) {\n        this.value = value;\n        this.onTouched();\n        this.change.emit(value);\n    };\n    /**\n     * Implements ControlValueAccessor\n     */\n    CodemirrorComponent.prototype.writeValue = function (value) {\n        this._value = value || '';\n        if (this.instance) {\n            this.instance.setValue(this._value);\n        }\n    };\n    CodemirrorComponent.prototype.onChange = function (_) { };\n    CodemirrorComponent.prototype.onTouched = function () { };\n    CodemirrorComponent.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n    CodemirrorComponent.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    return CodemirrorComponent;\n}());\nCodemirrorComponent.decorators = [\n    { type: core_1.Component, args: [{\n                selector: 'codemirror',\n                providers: [\n                    {\n                        provide: forms_1.NG_VALUE_ACCESSOR,\n                        useExisting: core_1.forwardRef(function () { return CodemirrorComponent; }),\n                        multi: true\n                    }\n                ],\n                template: \"<textarea #host></textarea>\",\n            },] },\n];\n/** @nocollapse */\nCodemirrorComponent.ctorParameters = function () { return []; };\nCodemirrorComponent.propDecorators = {\n    'config': [{ type: core_1.Input },],\n    'change': [{ type: core_1.Output },],\n    'focus': [{ type: core_1.Output },],\n    'blur': [{ type: core_1.Output },],\n    'cursorActivity': [{ type: core_1.Output },],\n    'host': [{ type: core_1.ViewChild, args: ['host',] },],\n    'instance': [{ type: core_1.Output },],\n    'value': [{ type: core_1.Input },],\n};\nexports.CodemirrorComponent = CodemirrorComponent;\n//# sourceMappingURL=codemirror.component.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/ng2-codemirror/lib/codemirror.component.js\n// module id = 350\n// module chunks = 1","/**\n * Created by mthk on 19/07/16.\n */\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nimport { PlayerListResponse, isPlayerV2 } from '../model/api.model';\nimport { PlayerRoute } from '../module/player/model/player.model';\nimport { SidebarModel } from './sidebar.model';\nimport { ViewService } from './view.service';\n\n@Injectable()\nexport class SidebarService {\n\n\tisOpen: boolean;\n\tcache: string;\n\topenStream$: Observable<SidebarModel>;\n\tupdateStream$: Observable<SidebarModel | null>;\n\tcloseStream$: Observable<null>;\n\tprivate playersMenuData: SidebarModel;\n\n\tprotected openSubject = new Subject<SidebarModel>();\n\tprotected updateSubject = new Subject<null>();\n\tprotected closeSubject = new Subject<null>();\n\n\tconstructor(private viewService: ViewService) {\n\t\tthis.openStream$ = this.openSubject.asObservable();\n\t\tthis.updateStream$ = this.openSubject.asObservable();\n\t\tthis.closeStream$ = this.closeSubject.asObservable();\n\t}\n\n\tsetupDefault(data: SidebarModel) {\n\t\tthis.cache = JSON.stringify(data);\n\t}\n\n\topenDefault() {\n\t\tif (this.cache != null)\n\t\t\tthis.open(JSON.parse(this.cache));\n\t\tthis.playersMenuData = null;\n\t}\n\n\tshowPlayersMenu(playersList: PlayerListResponse, playerId?: number, route = PlayerRoute.configurator) {\n\t\tif (!this.cache)\n\t\t\treturn;\n\t\tconst data: SidebarModel = JSON.parse(this.cache);\n\t\tconst playerListRoute = ['admin', 'player'];\n\t\tif (playersList && playersList.count > 0 && playersList.results.length > 0) {\n\t\t\tplayersList.results\n\t\t\t\t.forEach((player, i) => {\n\t\t\t\t\tconst v2 = isPlayerV2(player);\n\t\t\t\t\tconst v1plublished = !v2 && !!player.latest_webbuild && !!player.latest_webbuild.zip_url;\n\t\t\t\t\tconst v2plublished = v2 && !!player.latest_webbuild && !!player.latest_webbuild.player_js_url;\n\t\t\t\t\tconst item = {\n\t\t\t\t\t\tname: `'${player.name}'`,\n\t\t\t\t\t\troute: playerListRoute.concat([`${player.id}`]),\n\t\t\t\t\t\tdata: player.id === playerId\n\t\t\t\t\t\t\t? [{\n\t\t\t\t\t\t\t\tname: v2 ? PlayerRoute[PlayerRoute.builder] : route as string,\n\t\t\t\t\t\t\t\troute: playerListRoute.concat([`${player.id}`, v2 ? PlayerRoute.builder : route])\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\t\t.concat(v2\n\t\t\t\t\t\t\t\t\t? v2plublished\n\t\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t{ name: `embedcode`, route: playerListRoute.concat([`${player.id}`, PlayerRoute.embedcode]) }\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t: []\n\t\t\t\t\t\t\t\t\t: v1plublished\n\t\t\t\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t\t\t{ name: `embedcode`, route: playerListRoute.concat([`${player.id}`, PlayerRoute.embeder]) },\n\t\t\t\t\t\t\t\t\t\t\t{ name: `history`, route: playerListRoute.concat([`${player.id}`, PlayerRoute.versions]) },\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t: [])\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t};\n\t\t\t\t\tdata.items[2].data.push(item);\n\t\t\t\t});\n\t\t}\n\t\tdata.renderAt = Date.now();\n\t\tthis.playersMenuData = data;\n\t\tthis.open(this.playersMenuData);\n\t}\n\n\tupdate() {\n\t\tthis.updateSubject.next();\n\t}\n\n\topen(data: SidebarModel) {\n\t\tconst isPlayerConfigurator: boolean = data && data.items && (data.items.length > 0) &&\n\t\t\tdata.items[0] && data.items[0].route && (data.items[0].route.length > 1) &&\n\t\t\t(data.items[0].route[0] == 'admin') && (data.items[0].route[1] == 'player');\n\n\t\t// Show navigation, when app is not \"iframed\" or it is player configurator.\n\t\tif (isPlayerConfigurator || !this.viewService.checkIfAppInIframe()) {\n\t\t\t// Open sidebar.\n\t\t\tthis.isOpen = true;\n\t\t\tthis.openSubject.next(data);\n\t\t} else {\n\t\t\t// Hide sidebar or keep it in that state.\n\t\t\tthis.isOpen = false;\n\t\t\tthis.closeSubject.next();\n\t\t}\n\t}\n\n\tclose() {\n\t\tthis.isOpen = false;\n\t\tthis.closeSubject.next();\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/sidebar.service.ts","/**\n * Created by mthk on 04/10/16.\n */\nimport {Injectable} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {Observable} from 'rxjs/Observable';\nimport {Subject} from 'rxjs/Subject';\nimport {Http, Headers, Response} from '@angular/http';\nimport {AuthService} from './auth.service';\nimport {ExceptionService} from './exception.service';\nimport {UrlService} from './url.service';\nimport 'rxjs/add/operator/catch';\n\n@Injectable()\nexport class BradmaxApi {\n\t\n\tconstructor(\n\t\tprotected auth: AuthService,\n\t\tprotected http: Http,\n\t\tprotected exception: ExceptionService,\n\t\tprotected router: Router,\n\t\tprotected urlService: UrlService) { }\n\t\n\tcreate(url: string, body?: any): Observable<any> {\n\t\tbody = body == null ? null : JSON.stringify(body);\n\t\treturn this.http\n\t\t\t.post(this.formatUrl(url), body, this.options(body))\n\t\t\t.map((res: Response) => this.response(res))\n\t\t\t.catch((e: Response) => this.handleError(e));\n\t}\n\t\n\tupdate(url: string, body?: any): Observable<any> {\n\t\tbody = body == null ? null : JSON.stringify(body);\n\t\treturn this.http\n\t\t\t.put(this.formatUrl(url), body, this.options(body))\n\t\t\t.map((res: Response) => this.response(res))\n\t\t\t.catch((e: Response) => this.handleError(e));\n\t}\n\t\n\tread<T extends any>(url: string, data?: { [key: string]: string; }): Observable<T> {\n\t\tlet params: Array<String> = [];\n\t\tif (data != null)\n\t\t\tfor (let key in data)\n\t\t\t\tparams.push(key + '=' + data[key]);\n\t\tlet address = null;\n\t\tif(params.length == 0) {\n\t\t\t// No changes needed - passthrou.\n\t\t\taddress = this.formatUrl(url);\n\t\t} else if(url.indexOf('?') != -1) {\n\t\t\t// Merge query params from url with provided params.\n\t\t\tlet parts = url.split('?');\n\t\t\tlet urlWithoutQuery = parts[0];\n\t\t\tlet paramsFromQuery:Array<String> = (parts[1] != '') ? parts[1].split('&'): [];\n\t\t\tlet concatParams:Array<String> = paramsFromQuery.concat(params);\n\t\t\taddress = this.formatUrl(urlWithoutQuery + (concatParams.length > 0 ? '?' + concatParams.join('&') : ''));\n\t\t} else {\n\t\t\t// Simply append params to url (params not empty).\n\t\t\taddress = this.formatUrl(url + '?' + params.join('&'));\n\t\t}\n\t\treturn this.http.get(address, this.options())\n\t\t\t.map((res: Response) => this.response<T>(res))\n\t\t\t.catch((e: Response) => this.handleError(e));\n\t}\n\t\n\tdelete(url: string): Observable<any> {\n\t\treturn this.http\n\t\t\t.delete(this.formatUrl(url), this.options())\n\t\t\t.map((res: Response) => this.response(res))\n\t\t\t.catch((e: Response) => this.handleError(e));\n\t}\n\t\n\tprotected formatUrl(url: string) {\n\t\treturn this.urlService.api(url);\n\t}\n\n\t/** handlers */\n\tprotected response<T extends any>(response: Response): T {\n\t\tlet r: any;\n\t\ttry { r = response.json(); } catch (e) {\n\t\t\ttry { r = response.text(); } catch (e) {\n\t\t\t\tconsole.warn('response UNKNOWN FORMAT', response);\n\t\t\t\tr = response;\n\t\t\t}\n\t\t}\n\t\treturn r;\n\t}\n\t//\n\tprotected options(body = '', contentType = 'application/json'): { headers: Headers; } {\n\t\tlet o = { body: body, headers: new Headers() };\n\t\to.headers.append('Accept', contentType);\n\t\to.headers.append('Content-Type', contentType);\n\t\to.headers.append('AccessToken', this.auth && this.auth.token ? this.auth.token : '');\n\t\treturn o;\n\t}\n\t//\n\tprivate handleError(error: Response) {\n\t\tif (error.status == 403) {\n\t\t\tthis.auth.redirectUrl = this.router.url;\n\t\t\tconsole.warn('navigate to login page and back to : ' + this.auth.redirectUrl);\n\t\t\tthis.router.navigate(['login']);\n\t\t}\n\t\t//try to parse the error to json\n\t\t//if not possible return it as it is\n\t\tlet parsedError: any;\n\t\ttry {\n\t\t\tparsedError = error.json();\n\t\t} catch (e) {\n\t\t\tparsedError = error;\n\t\t}\n\n\t\treturn Observable.throw(parsedError);\n\t\t// In a real world app, we might use a remote logging infrastructure\n\t\t// let errMsg: string;\n\t\t// if (error instanceof Response) {\n\t\t// \tconst body = error.json() || '';\n\t\t// \tconst err = body.error || JSON.stringify(body);\n\t\t// \terrMsg = `${error.status} - ${error.statusText || ''} ${err}`;\n\t\t// } else {\n\t\t// \terrMsg = error.message ? error.message : error.toString();\n\t\t// }\n\t\t// console.error(errMsg);\n\t\t// console.warn(error);\n\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/api.service.ts","\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./module/index\"));\n//# sourceMappingURL=index.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/angular2-flash-messages/index.js\n// module id = 45\n// module chunks = 1","import { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\n\nimport { AccountProduct, AccountProductsListResponse, ProductsListResponse } from '../model/api.model';\nimport { BradmaxApi } from './api.service';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { UrlService } from './url.service';\n\n\n@Injectable()\nexport class ProductService extends BradmaxApi {\n\n\tconstructor(protected auth: AuthService, protected http: Http,\n\t\tprotected exception: ExceptionService, protected router: Router,\n\t\tprotected url: UrlService) {\n\t\tsuper(auth, http, exception, router, url);\n\t}\n\n\tgetProducts(): Observable<ProductsListResponse> {\n\t\treturn super.read('products');\n\t}\n\n\tgetProductsForAccount(accountId: number, lastUsageStats?: number): Observable<AccountProductsListResponse> {\n\t\tif (lastUsageStats && lastUsageStats > 0) {\n\t\t\treturn super.read('accounts/' + accountId + '/products?last-usage-stats=' + lastUsageStats);\n\t\t} else {\n\t\t\treturn super.read('accounts/' + accountId + '/products');\n\t\t}\n\t}\n\n\tupdateProductPlanPaymentMethod(\n\t\taccountId: number,\n\t\tproductPlanId: string,\n\t\tpaymentMethodNonce: string): Observable<AccountProduct> {\n\t\tlet body = { client_plan_id: productPlanId, bt_pm_nonce: paymentMethodNonce };\n\t\treturn super.update('accounts/' + accountId + '/subscription', body);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/product.service.ts","/**\n * Created by mthk on 28/06/16.\n */\nexport class DOMUtil {\n\t//\n\tstatic isDescendant(parent: Node, child: Node) {\n\t\tlet node: Node | null = child;\n\t\t// node can be null or undefined. For covering undefined check node != null instead of node !== null .\n\t\twhile (node != null) {\n\t\t\tif (node === parent) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tnode = node.parentNode;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\t//\n\tstatic stopPropagation(event: Event) {\n\t\tif (event != null) {\n\t\t\tif (!event.defaultPrevented)\n\t\t\t\tevent.preventDefault();\n\t\t\tevent.stopImmediatePropagation();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/util/dom.util.ts","/**\n * Created by tkwiatek on 4/22/16.\n */\nimport { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { BehaviorSubject } from 'rxjs/BehaviorSubject';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\n\nimport { AccountProduct, UserRequest, UserResponse } from './../model/api.model';\nimport { BradmaxApi } from './api.service';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { UrlService } from './url.service';\n\nimport moment from 'moment';\n\n@Injectable()\nexport class UserService extends BradmaxApi {\n\n\temail: string | null;\n\tfirstName: string | null;\n\tlastName: string | null;\n\taccountId: number | null;\n\taccountCreatedAtTs: number | null;\n\tcompany: string | null;\n\tproducts: AccountProduct[] | null;\n\tstatsModules: string[];\n\tprivate dateRangeSelection: any;\n\thasGdprInfoShown: boolean;\n\thasAgreeForNewsletter: boolean;\n\n\t// Support fields.\n\tstatsModulesByKeys: any;\n\n\t//notify components using this service that the user data has changed\n\tuserDataChanged = new BehaviorSubject<boolean>(false);\n\n\tprivate resolveSource: Subject<UserResponse>;\n\n\tconstructor(\n\t\tprotected router: Router,\n\t\tprotected auth: AuthService,\n\t\tprotected http: Http,\n\t\tprotected exception: ExceptionService,\n\t\tprotected url: UrlService) {\n\t\tsuper(auth, http, exception, router, url);\n\n\t\t// Set initial date range for the last 30 days without today.\n\t\tlet endDate = moment().startOf('day');\n\t\tlet startDate = endDate.clone().subtract(30, 'days');\n\t\tthis.dateRangeSelection = {\n\t\t\tstartDateTs: startDate.unix(),\n\t\t\tendDateTs: endDate.unix()\n\t\t};\n\t}\n\n\tget(): Observable<UserResponse> {\n\t\tthis.resolveSource = new Subject<UserResponse>();\n\t\tsuper.read('user').subscribe(\n\t\t\t(response: UserResponse) => {\n\t\t\t\tthis.mapUserResponseToUser(response);\n\t\t\t\tthis.notifyUserDataChanged();\n\t\t\t\tthis.resolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => this.resolveSource.error(error),\n\t\t\t() => this.resolveSource.complete());\n\t\treturn this.resolveSource.asObservable();\n\t}\n\n\trefresh() {\n\t\tsuper.read('user').subscribe(\n\t\t\t(response: UserResponse) => this.mapUserResponseToUser(response),\n\t\t\t(error) => this.resolveSource.error(error),\n\t\t\t() => this.notifyUserDataChanged());\n\t}\n\n\tupdateUser(data: UserRequest): Observable<UserResponse> {\n\t\tthis.resolveSource = new Subject<UserResponse>();\n\t\tsuper.update('user', data).subscribe(\n\t\t\t(response: UserResponse) => {\n\t\t\t\tthis.mapUserResponseToUser(response);\n\t\t\t\tthis.notifyUserDataChanged();\n\t\t\t\tthis.resolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => this.resolveSource.error(error),\n\t\t\t() => this.resolveSource.complete());\n\t\treturn this.resolveSource.asObservable();\n\t}\n\n\tclear() {\n\t\tthis.email = null;\n\t\tthis.firstName = null;\n\t\tthis.lastName = null;\n\t\tthis.accountId = null;\n\t\tthis.accountCreatedAtTs = null;\n\t\tthis.company = null;\n\t\tthis.products = null;\n\t\tthis.statsModules = null;\n\t\tthis.statsModulesByKeys = null;\n\t\tthis.notifyUserDataChanged();\n\t}\n\n\thasAdsSupport(): boolean {\n\t\tif (this.products == null || this.products.length < 1)\n\t\t\treturn false;\n\t\treturn this.products[0].has_ads_support;\n\t}\n\n\tprivate mapUserResponseToUser(userResponse: UserResponse): void {\n\t\tthis.accountId = userResponse.default_account.id;\n\t\tthis.accountCreatedAtTs = userResponse.default_account.created_at;\n\t\tthis.email = userResponse.email;\n\t\tthis.firstName = userResponse.first_name;\n\t\tthis.lastName = userResponse.last_name;\n\t\tthis.company = userResponse.company_name_cache;\n\t\tthis.products = userResponse.default_account.products;\n\t\tthis.statsModules = userResponse.default_account.stats_modules;\n\t\tthis.hasGdprInfoShown = userResponse.has_gdpr_info_shown;\n\t\tthis.hasAgreeForNewsletter = userResponse.has_agree_for_newsletter;\n\n\t\t// Update support structure, which is used for quick check if\n\t\t// selected statistic is enabled (key present)\n\t\tif(this.statsModules) {\n\t\t\tthis.statsModulesByKeys = {};\n\t\t\tfor(let k of this.statsModules) {\n\t\t\t\tthis.statsModulesByKeys[k] = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate notifyUserDataChanged() {\n\t\tthis.userDataChanged.next(true);\n\t}\n\n\tgetDateRangeSelection(): { startDate: moment.Moment; endDate: moment.Moment; } {\n\t\treturn { startDate: moment.unix(this.dateRangeSelection.startDateTs), endDate: moment.unix(this.dateRangeSelection.endDateTs) };\n\t}\n\n\tsetDateRangeSelection(startDate: moment.Moment, endDate: moment.Moment) {\n\t\tthis.dateRangeSelection.startDateTs = startDate.unix();\n\t\tthis.dateRangeSelection.endDateTs = endDate.unix();\n\t}\n\n\tgetUnixDateRangeSelection(): { startDate: number; endDate: number; } {\n\t\treturn { startDate: this.dateRangeSelection.startDateTs, endDate: this.dateRangeSelection.endDateTs };\n\t}\n\n\tsetUnixDateRangeSelection(startDate: number, endDate: number) {\n\t\tthis.dateRangeSelection.startDateTs = startDate;\n\t\tthis.dateRangeSelection.endDateTs = endDate;\n\t}\n\n\tisEngagementRateEnabled(): boolean {\n\t\tif(!this.statsModulesByKeys) {\n\t\t\treturn false;\n\t\t}\n\t\treturn ('engagement' in this.statsModulesByKeys);\n\t}\n\n\tareTechStatsEnabled(): boolean {\n\t\tif(!this.statsModulesByKeys) {\n\t\t\treturn false;\n\t\t}\n\t\treturn ('tech' in this.statsModulesByKeys);\n\t}\n\n\tareMediaStatsEnabled(): boolean {\n\t\tif(!this.statsModulesByKeys) {\n\t\t\treturn false;\n\t\t}\n\t\treturn ('media' in this.statsModulesByKeys);\n\t}\n\n\tareAdsStatsEnabled(): boolean {\n\t\tif(!this.statsModulesByKeys) {\n\t\t\treturn false;\n\t\t}\n\t\treturn ('ads' in this.statsModulesByKeys);\n\t}\n\n\tareGeoStatsEnabled(): boolean {\n\t\tif(!this.statsModulesByKeys) {\n\t\t\treturn false;\n\t\t}\n\t\treturn ('geo' in this.statsModulesByKeys);\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/user.service.ts","import { Observable } from 'rxjs/Observable';\nimport { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { BradmaxApi } from './api.service';\nimport {\n    PaymentTransactionsList, PaymentTransaction, PaymentMethodsList,\n    PaymentMethodUpdateBody, Invoice, ClientToken\n} from '../model/api.model';\nimport { UrlService } from './url.service';\n\n@Injectable()\nexport class PaymentsService extends BradmaxApi {\n\n    constructor(\n        protected auth: AuthService,\n        protected http: Http,\n        protected exception: ExceptionService,\n        protected router: Router,\n        protected url: UrlService) {\n        super(auth, http, exception, router, url);\n    }\n\n    /** Returns a list of Payment Transactions for the accountId provided. */\n    getPaymentTransactions(accountId: number): Observable<PaymentTransactionsList> {\n        return super.read('accounts/' + accountId + '/payment-transactions');\n    }\n    /**Returns a list of Payment Methods used by the accountId provided. */\n    getPaymentMethods(accountId: number): Observable<PaymentMethodsList> {\n        return super.read('accounts/' + accountId + '/payment-methods');\n    }\n\n    updateInvoice(accountId: number, invoice: Invoice): Observable<Invoice> {\n        return super.update('accounts/' + accountId + '/invoices/' + invoice.id, invoice);\n    }\n\n    updatePaymentMethod(accountId: number, body: PaymentMethodUpdateBody): Observable<PaymentMethodsList> {\n        return super.update('accounts/' + accountId + '/payment-methods', body);\n    }\n\n    deletePaymentMethod(accountId: number, paymentToken: string): Observable<any> {\n        return super.delete('accounts/' + accountId + '/payment-methods/' + paymentToken);\n    }\n\n    getBraintreeClientToken(accountId: number): Observable<ClientToken> {\n        return super.read('accounts/' + accountId + '/bt-client-token');\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/payments.service.ts","import { Observable } from 'rxjs/Observable';\nimport { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { BradmaxApi } from './api.service';\nimport {\n    SubscriptionOrdersResponse, SubscriptionOrderResponse,\n    SubscriptionOrderCreateRequest, SubOrderNonce, SubOrderPaymentMethod\n} from '../model/api.model';\nimport { UrlService } from './url.service';\n\n@Injectable()\nexport class SubscriptionService extends BradmaxApi {\n\n    constructor(\n        protected auth: AuthService,\n        protected http: Http,\n        protected exception: ExceptionService,\n        protected router: Router,\n        protected url: UrlService) {\n        super(auth, http, exception, router, url);\n    }\n\n    /** Gets a list of SubscriptionOrders for the accountId provided.--only the active orders are listed **/\n    getSubscriptionOrders(accountId: number): Observable<SubscriptionOrdersResponse> {\n        return super.read('accounts/' + accountId + '/subscription-orders');\n    }\n    /** Gets the details for a specific SubscriptionOrderId **/\n    getSubscriptionOrder(accountId: number, subscriptionOrderId: number, ): Observable<SubscriptionOrderResponse> {\n        return super.read('accounts/' + accountId + '/subscription-orders/' + subscriptionOrderId);\n    }\n    /** Creates a new SubscriptionOrder for the accountId with the planId provided **/\n    createSubscriptionOrder(accountId: number, planId: number): Observable<SubscriptionOrderResponse> {\n        let body: SubscriptionOrderCreateRequest = { product_plan: planId };\n        return super.create('accounts/' + accountId + '/subscription-orders', body);\n    }\n    /** Finishes a SubscriptionOrder process **/\n    finishSubscriptionOrder(accountId: number,\n        subscriptionOrderId: number, body: SubOrderNonce): Observable<SubscriptionOrderResponse> {\n        return super.update('accounts/' + accountId + '/subscription-orders/' + subscriptionOrderId, body);\n    }\n\n    cancelSubscriptionOrder(accountId: number, subscriptionOrderId: number): Observable<SubscriptionOrderResponse> {\n        let body = { cancel: true };\n        return super.update('accounts/' + accountId + '/subscription-orders/' + subscriptionOrderId, body);\n    }\n}\n\nexport enum SubscriptionStatuses {\n    'Init' = 0,\n    'Waiting for acceptance' = 10,\n    'Creating subscription' = 20,\n    'Finalized' = 30,\n    'Fail' = 40,\n    'Rejected by user' = 41,\n    'Error from Braintree' = 42,\n    'Operation timeout' = 43\n} \n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/subscription.service.ts","import { Injectable } from '@angular/core';\nimport { Http } from '@angular/http';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\n\nimport { AccountDetails, AccountResponse } from '../model/api.model';\nimport { BradmaxApi } from './api.service';\nimport { AuthService } from './auth.service';\nimport { ExceptionService } from './exception.service';\nimport { UrlService } from './url.service';\n\n@Injectable()\nexport class AccountService extends BradmaxApi {\n\n\taccount: AccountResponse | null;\n\tprivate resolveSource: any;\n\n\tconstructor(\n\t\tprotected auth: AuthService,\n\t\tprotected http: Http,\n\t\tprotected exception: ExceptionService,\n\t\tprotected router: Router,\n\t\tprotected url: UrlService) {\n\t\tsuper(auth, http, exception, router, url);\n\t}\n\n\tget(accountId: number): Observable<AccountResponse> {\n\t\tthis.resolveSource = new Subject<AccountResponse>();\n\t\tsuper.read('accounts/' + accountId).subscribe(\n\t\t\t(response: AccountResponse) => {\n\t\t\t\tthis.account = response;\n\t\t\t\tthis.resolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => this.resolveSource.error(error),\n\t\t\t() => this.resolveSource.complete());\n\t\treturn this.resolveSource.asObservable();\n\t}\n\n\tupdateAccount(accountId: number, accountDetails: AccountDetails): Observable<AccountDetails> {\n\t\tthis.resolveSource = new Subject<AccountDetails>();\n\t\tsuper.update('accounts/' + accountId + '/details', accountDetails)\n\t\t\t.subscribe(\n\t\t\t(response: AccountDetails) => {\n\t\t\t\tif (this.account != null)\n\t\t\t\t\tthis.account.details = response;\n\t\t\t\tthis.resolveSource.next(response);\n\t\t\t},\n\t\t\t(error) => this.resolveSource.error(error),\n\t\t\t() => this.resolveSource.complete());\n\t\treturn this.resolveSource.asObservable();\n\t}\n\n\tclear() {\n\t\tthis.account = null;\n\t}\n\n\tisAccountDetailsValidForPayments(): boolean {\n\t\tif (this.account && this.account.details && this.account.details.company_name)\n\t\t\treturn true;\n\t\treturn false;\n\t}\n\n\tget companyName() {\n\t\t// Company name value order:\n\t\t// - top: use defined from details\n\t\t// - middle: use from account.owner.company_name_cache if defined (can be defined during sign-up process).\n\t\t// - bottom: null\n\t\tif (this.account.details && this.account.details.company_name)\n\t\t\treturn this.account.details.company_name;\n\t\telse if (this.account.owner && this.account.owner.company_name_cache)\n\t\t\treturn this.account.owner.company_name_cache;\n\t\treturn null;\n\t}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/account.service.ts","import {ModalButton} from './modal.model';\n/**\n * Created by mthk on 11/10/16.\n */\nexport class AbstractModalComponent {\n\thtml: string | null;\n\ttitle: string | null;\n\tinputLabel: string | null;\n\tinputDefaultValue: string | null;\n\tbuttons: ModalButton[];\n\tclose: () => void;\n\tconstructor() {}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/modal/abstract.modal.component.ts","/**\n * Created by mthk on 07/10/16.\n */\n\n// export type PlayerConfigModel = {};\n\nexport enum PlayerRoute {\n\tlist = 'list',\n\t// HtmlSkin\n\tbuilder = 'builder',\n\tembedcode = 'embedcode',\n\t// BasicSkin\n\tconfigurator = 'configurator',\n\tembeder = 'embed-code',\n\tversions = 'versions',\n}\n\nexport enum PlayerRouteParam {\n\tid = 'id',\n}\n\nexport enum PlayerRouteData {\n\tplayersList = 'playersList',\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/module/player/model/player.model.ts","import * as tslib_1 from \"tslib\";\n/**\n * @license Angular v4.4.7\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { Directive, ElementRef, EventEmitter, Host, Inject, Injectable, InjectionToken, Injector, Input, NgModule, Optional, Output, Renderer2, Self, SkipSelf, Version, forwardRef, ɵisObservable, ɵisPromise, ɵlooseIdentical } from '@angular/core';\nimport { forkJoin } from 'rxjs/observable/forkJoin';\nimport { fromPromise } from 'rxjs/observable/fromPromise';\nimport { map } from 'rxjs/operator/map';\nimport { ɵgetDOM } from '@angular/platform-browser';\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 * Base class for control directives.\n *\n * Only used internally in the forms module.\n *\n * \\@stable\n * @abstract\n */\nvar AbstractControlDirective = (function () {\n    function AbstractControlDirective() {\n    }\n    /**\n     * The {\\@link FormControl}, {\\@link FormGroup}, or {\\@link FormArray}\n     * that backs this directive. Most properties fall through to that\n     * instance.\n     * @abstract\n     * @return {?}\n     */\n    AbstractControlDirective.prototype.control = function () { };\n    Object.defineProperty(AbstractControlDirective.prototype, \"value\", {\n        /**\n         * The value of the control.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.value : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"valid\", {\n        /**\n         * A control is `valid` when its `status === VALID`.\n         *\n         * In order to have this status, the control must have passed all its\n         * validation checks.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.valid : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"invalid\", {\n        /**\n         * A control is `invalid` when its `status === INVALID`.\n         *\n         * In order to have this status, the control must have failed\n         * at least one of its validation checks.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.invalid : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"pending\", {\n        /**\n         * A control is `pending` when its `status === PENDING`.\n         *\n         * In order to have this status, the control must be in the\n         * middle of conducting a validation check.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.pending : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"disabled\", {\n        /**\n         * A control is `disabled` when its `status === DISABLED`.\n         *\n         * Disabled controls are exempt from validation checks and\n         * are not included in the aggregate value of their ancestor\n         * controls.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.disabled : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"enabled\", {\n        /**\n         * A control is `enabled` as long as its `status !== DISABLED`.\n         *\n         * In other words, it has a status of `VALID`, `INVALID`, or\n         * `PENDING`.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.enabled : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"errors\", {\n        /**\n         * Returns any errors generated by failing validation. If there\n         * are no errors, it will return null.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.errors : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"pristine\", {\n        /**\n         * A control is `pristine` if the user has not yet changed\n         * the value in the UI.\n         *\n         * Note that programmatic changes to a control's value will\n         * *not* mark it dirty.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.pristine : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"dirty\", {\n        /**\n         * A control is `dirty` if the user has changed the value\n         * in the UI.\n         *\n         * Note that programmatic changes to a control's value will\n         * *not* mark it dirty.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.dirty : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"touched\", {\n        /**\n         * A control is marked `touched` once the user has triggered\n         * a `blur` event on it.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.touched : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"untouched\", {\n        /**\n         * A control is `untouched` if the user has not yet triggered\n         * a `blur` event on it.\n         * @return {?}\n         */\n        get: function () { return this.control ? this.control.untouched : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"statusChanges\", {\n        /**\n         * Emits an event every time the validation status of the control\n         * is re-calculated.\n         * @return {?}\n         */\n        get: function () {\n            return this.control ? this.control.statusChanges : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"valueChanges\", {\n        /**\n         * Emits an event every time the value of the control changes, in\n         * the UI or programmatically.\n         * @return {?}\n         */\n        get: function () {\n            return this.control ? this.control.valueChanges : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlDirective.prototype, \"path\", {\n        /**\n         * Returns an array that represents the path from the top-level form\n         * to this control. Each index is the string name of the control on\n         * that level.\n         * @return {?}\n         */\n        get: function () { return null; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Resets the form control. This means by default:\n     *\n     * * it is marked as `pristine`\n     * * it is marked as `untouched`\n     * * value is set to null\n     *\n     * For more information, see {\\@link AbstractControl}.\n     * @param {?=} value\n     * @return {?}\n     */\n    AbstractControlDirective.prototype.reset = function (value) {\n        if (value === void 0) { value = undefined; }\n        if (this.control)\n            this.control.reset(value);\n    };\n    /**\n     * Returns true if the control with the given path has the error specified. Otherwise\n     * returns false.\n     *\n     * If no path is given, it checks for the error on the present control.\n     * @param {?} errorCode\n     * @param {?=} path\n     * @return {?}\n     */\n    AbstractControlDirective.prototype.hasError = function (errorCode, path) {\n        return this.control ? this.control.hasError(errorCode, path) : false;\n    };\n    /**\n     * Returns error data if the control with the given path has the error specified. Otherwise\n     * returns null or undefined.\n     *\n     * If no path is given, it checks for the error on the present control.\n     * @param {?} errorCode\n     * @param {?=} path\n     * @return {?}\n     */\n    AbstractControlDirective.prototype.getError = function (errorCode, path) {\n        return this.control ? this.control.getError(errorCode, path) : null;\n    };\n    return AbstractControlDirective;\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 * A directive that contains multiple {\\@link NgControl}s.\n *\n * Only used by the forms module.\n *\n * \\@stable\n * @abstract\n */\nvar ControlContainer = (function (_super) {\n    tslib_1.__extends(ControlContainer, _super);\n    function ControlContainer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    Object.defineProperty(ControlContainer.prototype, \"formDirective\", {\n        /**\n         * Get the form to which this container belongs.\n         * @return {?}\n         */\n        get: function () { return null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ControlContainer.prototype, \"path\", {\n        /**\n         * Get the path to this container.\n         * @return {?}\n         */\n        get: function () { return null; },\n        enumerable: true,\n        configurable: true\n    });\n    return ControlContainer;\n}(AbstractControlDirective));\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 * @param {?} value\n * @return {?}\n */\nfunction isEmptyInputValue(value) {\n    // we don't check for string here so it also works with arrays\n    return value == null || value.length === 0;\n}\n/**\n * Providers for validators to be used for {\\@link FormControl}s in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * \\@stable\n */\nvar NG_VALIDATORS = new InjectionToken('NgValidators');\n/**\n * Providers for asynchronous validators to be used for {\\@link FormControl}s\n * in a form.\n *\n * Provide this using `multi: true` to add validators.\n *\n * See {\\@link NG_VALIDATORS} for more details.\n *\n * \\@stable\n */\nvar NG_ASYNC_VALIDATORS = new InjectionToken('NgAsyncValidators');\nvar EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;\n/**\n * Provides a set of validators used by form controls.\n *\n * A validator is a function that processes a {\\@link FormControl} or collection of\n * controls and returns a map of errors. A null map means that validation has passed.\n *\n * ### Example\n *\n * ```typescript\n * var loginControl = new FormControl(\"\", Validators.required)\n * ```\n *\n * \\@stable\n */\nvar Validators = (function () {\n    function Validators() {\n    }\n    /**\n     * Validator that requires controls to have a value greater than a number.\n     * @param {?} min\n     * @return {?}\n     */\n    Validators.min = function (min) {\n        return function (control) {\n            if (isEmptyInputValue(control.value) || isEmptyInputValue(min)) {\n                return null; // don't validate empty values to allow optional controls\n            }\n            var /** @type {?} */ value = parseFloat(control.value);\n            // Controls with NaN values after parsing should be treated as not having a\n            // minimum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-min\n            return !isNaN(value) && value < min ? { 'min': { 'min': min, 'actual': control.value } } : null;\n        };\n    };\n    /**\n     * Validator that requires controls to have a value less than a number.\n     * @param {?} max\n     * @return {?}\n     */\n    Validators.max = function (max) {\n        return function (control) {\n            if (isEmptyInputValue(control.value) || isEmptyInputValue(max)) {\n                return null; // don't validate empty values to allow optional controls\n            }\n            var /** @type {?} */ value = parseFloat(control.value);\n            // Controls with NaN values after parsing should be treated as not having a\n            // maximum, per the HTML forms spec: https://www.w3.org/TR/html5/forms.html#attr-input-max\n            return !isNaN(value) && value > max ? { 'max': { 'max': max, 'actual': control.value } } : null;\n        };\n    };\n    /**\n     * Validator that requires controls to have a non-empty value.\n     * @param {?} control\n     * @return {?}\n     */\n    Validators.required = function (control) {\n        return isEmptyInputValue(control.value) ? { 'required': true } : null;\n    };\n    /**\n     * Validator that requires control value to be true.\n     * @param {?} control\n     * @return {?}\n     */\n    Validators.requiredTrue = function (control) {\n        return control.value === true ? null : { 'required': true };\n    };\n    /**\n     * Validator that performs email validation.\n     * @param {?} control\n     * @return {?}\n     */\n    Validators.email = function (control) {\n        return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };\n    };\n    /**\n     * Validator that requires controls to have a value of a minimum length.\n     * @param {?} minLength\n     * @return {?}\n     */\n    Validators.minLength = function (minLength) {\n        return function (control) {\n            if (isEmptyInputValue(control.value)) {\n                return null; // don't validate empty values to allow optional controls\n            }\n            var /** @type {?} */ length = control.value ? control.value.length : 0;\n            return length < minLength ?\n                { 'minlength': { 'requiredLength': minLength, 'actualLength': length } } :\n                null;\n        };\n    };\n    /**\n     * Validator that requires controls to have a value of a maximum length.\n     * @param {?} maxLength\n     * @return {?}\n     */\n    Validators.maxLength = function (maxLength) {\n        return function (control) {\n            var /** @type {?} */ length = control.value ? control.value.length : 0;\n            return length > maxLength ?\n                { 'maxlength': { 'requiredLength': maxLength, 'actualLength': length } } :\n                null;\n        };\n    };\n    /**\n     * Validator that requires a control to match a regex to its value.\n     * @param {?} pattern\n     * @return {?}\n     */\n    Validators.pattern = function (pattern) {\n        if (!pattern)\n            return Validators.nullValidator;\n        var /** @type {?} */ regex;\n        var /** @type {?} */ regexStr;\n        if (typeof pattern === 'string') {\n            regexStr = \"^\" + pattern + \"$\";\n            regex = new RegExp(regexStr);\n        }\n        else {\n            regexStr = pattern.toString();\n            regex = pattern;\n        }\n        return function (control) {\n            if (isEmptyInputValue(control.value)) {\n                return null; // don't validate empty values to allow optional controls\n            }\n            var /** @type {?} */ value = control.value;\n            return regex.test(value) ? null :\n                { 'pattern': { 'requiredPattern': regexStr, 'actualValue': value } };\n        };\n    };\n    /**\n     * No-op validator.\n     * @param {?} c\n     * @return {?}\n     */\n    Validators.nullValidator = function (c) { return null; };\n    /**\n     * @param {?} validators\n     * @return {?}\n     */\n    Validators.compose = function (validators) {\n        if (!validators)\n            return null;\n        var /** @type {?} */ presentValidators = (validators.filter(isPresent));\n        if (presentValidators.length == 0)\n            return null;\n        return function (control) {\n            return _mergeErrors(_executeValidators(control, presentValidators));\n        };\n    };\n    /**\n     * @param {?} validators\n     * @return {?}\n     */\n    Validators.composeAsync = function (validators) {\n        if (!validators)\n            return null;\n        var /** @type {?} */ presentValidators = (validators.filter(isPresent));\n        if (presentValidators.length == 0)\n            return null;\n        return function (control) {\n            var /** @type {?} */ observables = _executeAsyncValidators(control, presentValidators).map(toObservable);\n            return map.call(forkJoin(observables), _mergeErrors);\n        };\n    };\n    return Validators;\n}());\n/**\n * @param {?} o\n * @return {?}\n */\nfunction isPresent(o) {\n    return o != null;\n}\n/**\n * @param {?} r\n * @return {?}\n */\nfunction toObservable(r) {\n    var /** @type {?} */ obs = ɵisPromise(r) ? fromPromise(r) : r;\n    if (!(ɵisObservable(obs))) {\n        throw new Error(\"Expected validator to return Promise or Observable.\");\n    }\n    return obs;\n}\n/**\n * @param {?} control\n * @param {?} validators\n * @return {?}\n */\nfunction _executeValidators(control, validators) {\n    return validators.map(function (v) { return v(control); });\n}\n/**\n * @param {?} control\n * @param {?} validators\n * @return {?}\n */\nfunction _executeAsyncValidators(control, validators) {\n    return validators.map(function (v) { return v(control); });\n}\n/**\n * @param {?} arrayOfErrors\n * @return {?}\n */\nfunction _mergeErrors(arrayOfErrors) {\n    var /** @type {?} */ res = arrayOfErrors.reduce(function (res, errors) {\n        return errors != null ? Object.assign({}, /** @type {?} */ ((res)), errors) : ((res));\n    }, {});\n    return Object.keys(res).length === 0 ? null : res;\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 * Used to provide a {\\@link ControlValueAccessor} for form controls.\n *\n * See {\\@link DefaultValueAccessor} for how to implement one.\n * \\@stable\n */\nvar NG_VALUE_ACCESSOR = new InjectionToken('NgValueAccessor');\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 */\nvar CHECKBOX_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(function () { return CheckboxControlValueAccessor; }),\n    multi: true,\n};\n/**\n * The accessor for writing a value and listening to changes on a checkbox input element.\n *\n *  ### Example\n *  ```\n *  <input type=\"checkbox\" name=\"rememberLogin\" ngModel>\n *  ```\n *\n *  \\@stable\n */\nvar CheckboxControlValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function CheckboxControlValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    CheckboxControlValueAccessor.prototype.writeValue = function (value) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'checked', value);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    CheckboxControlValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    CheckboxControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    CheckboxControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    return CheckboxControlValueAccessor;\n}());\nCheckboxControlValueAccessor.decorators = [\n    { type: Directive, args: [{\n                selector: 'input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]',\n                host: { '(change)': 'onChange($event.target.checked)', '(blur)': 'onTouched()' },\n                providers: [CHECKBOX_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nCheckboxControlValueAccessor.ctorParameters = function () { return [\n    { type: Renderer2, },\n    { type: ElementRef, },\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 */\nvar DEFAULT_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(function () { return DefaultValueAccessor; }),\n    multi: true\n};\n/**\n * We must check whether the agent is Android because composition events\n * behave differently between iOS and Android.\n * @return {?}\n */\nfunction _isAndroid() {\n    var /** @type {?} */ userAgent = ɵgetDOM() ? ɵgetDOM().getUserAgent() : '';\n    return /android (\\d+)/.test(userAgent.toLowerCase());\n}\n/**\n * Turn this mode on if you want form directives to buffer IME input until compositionend\n * \\@experimental\n */\nvar COMPOSITION_BUFFER_MODE = new InjectionToken('CompositionEventMode');\n/**\n * The default accessor for writing a value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n *  ### Example\n *  ```\n *  <input type=\"text\" name=\"searchQuery\" ngModel>\n *  ```\n *\n *  \\@stable\n */\nvar DefaultValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     * @param {?} _compositionMode\n     */\n    function DefaultValueAccessor(_renderer, _elementRef, _compositionMode) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this._compositionMode = _compositionMode;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n        /**\n         * Whether the user is creating a composition string (IME events).\n         */\n        this._composing = false;\n        if (this._compositionMode == null) {\n            this._compositionMode = !_isAndroid();\n        }\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype.writeValue = function (value) {\n        var /** @type {?} */ normalizedValue = value == null ? '' : value;\n        this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype.registerOnChange = function (fn) { this.onChange = fn; };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype._handleInput = function (value) {\n        if (!this._compositionMode || (this._compositionMode && !this._composing)) {\n            this.onChange(value);\n        }\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype._compositionStart = function () { this._composing = true; };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    DefaultValueAccessor.prototype._compositionEnd = function (value) {\n        this._composing = false;\n        this._compositionMode && this.onChange(value);\n    };\n    return DefaultValueAccessor;\n}());\nDefaultValueAccessor.decorators = [\n    { type: Directive, args: [{\n                selector: 'input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]',\n                // TODO: vsavkin replace the above selector with the one below it once\n                // https://github.com/angular/angular/issues/3011 is implemented\n                // selector: '[ngModel],[formControl],[formControlName]',\n                host: {\n                    '(input)': '_handleInput($event.target.value)',\n                    '(blur)': 'onTouched()',\n                    '(compositionstart)': '_compositionStart()',\n                    '(compositionend)': '_compositionEnd($event.target.value)'\n                },\n                providers: [DEFAULT_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nDefaultValueAccessor.ctorParameters = function () { return [\n    { type: Renderer2, },\n    { type: ElementRef, },\n    { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [COMPOSITION_BUFFER_MODE,] },] },\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 * @param {?} validator\n * @return {?}\n */\nfunction normalizeValidator(validator) {\n    if (((validator)).validate) {\n        return function (c) { return ((validator)).validate(c); };\n    }\n    else {\n        return (validator);\n    }\n}\n/**\n * @param {?} validator\n * @return {?}\n */\nfunction normalizeAsyncValidator(validator) {\n    if (((validator)).validate) {\n        return function (c) { return ((validator)).validate(c); };\n    }\n    else {\n        return (validator);\n    }\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 */\nvar NUMBER_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(function () { return NumberValueAccessor; }),\n    multi: true\n};\n/**\n * The accessor for writing a number value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n *  ### Example\n *  ```\n *  <input type=\"number\" [(ngModel)]=\"age\">\n *  ```\n */\nvar NumberValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function NumberValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    NumberValueAccessor.prototype.writeValue = function (value) {\n        // The value needs to be normalized for IE9, otherwise it is set to 'null' when null\n        var /** @type {?} */ normalizedValue = value == null ? '' : value;\n        this._renderer.setProperty(this._elementRef.nativeElement, 'value', normalizedValue);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NumberValueAccessor.prototype.registerOnChange = function (fn) {\n        this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    NumberValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    NumberValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    return NumberValueAccessor;\n}());\nNumberValueAccessor.decorators = [\n    { type: Directive, args: [{\n                selector: 'input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]',\n                host: {\n                    '(change)': 'onChange($event.target.value)',\n                    '(input)': 'onChange($event.target.value)',\n                    '(blur)': 'onTouched()'\n                },\n                providers: [NUMBER_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nNumberValueAccessor.ctorParameters = function () { return [\n    { type: Renderer2, },\n    { type: ElementRef, },\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 * @return {?}\n */\nfunction unimplemented() {\n    throw new Error('unimplemented');\n}\n/**\n * A base class that all control directive extend.\n * It binds a {\\@link FormControl} object to a DOM element.\n *\n * Used internally by Angular forms.\n *\n * \\@stable\n * @abstract\n */\nvar NgControl = (function (_super) {\n    tslib_1.__extends(NgControl, _super);\n    function NgControl() {\n        var _this = _super.apply(this, arguments) || this;\n        /**\n         * \\@internal\n         */\n        _this._parent = null;\n        _this.name = null;\n        _this.valueAccessor = null;\n        /**\n         * \\@internal\n         */\n        _this._rawValidators = [];\n        /**\n         * \\@internal\n         */\n        _this._rawAsyncValidators = [];\n        return _this;\n    }\n    Object.defineProperty(NgControl.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return (unimplemented()); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgControl.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return (unimplemented()); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @abstract\n     * @param {?} newValue\n     * @return {?}\n     */\n    NgControl.prototype.viewToModelUpdate = function (newValue) { };\n    return NgControl;\n}(AbstractControlDirective));\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 */\nvar RADIO_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(function () { return RadioControlValueAccessor; }),\n    multi: true\n};\n/**\n * Internal class used by Angular to uncheck radio buttons with the matching name.\n */\nvar RadioControlRegistry = (function () {\n    function RadioControlRegistry() {\n        this._accessors = [];\n    }\n    /**\n     * @param {?} control\n     * @param {?} accessor\n     * @return {?}\n     */\n    RadioControlRegistry.prototype.add = function (control, accessor) {\n        this._accessors.push([control, accessor]);\n    };\n    /**\n     * @param {?} accessor\n     * @return {?}\n     */\n    RadioControlRegistry.prototype.remove = function (accessor) {\n        for (var /** @type {?} */ i = this._accessors.length - 1; i >= 0; --i) {\n            if (this._accessors[i][1] === accessor) {\n                this._accessors.splice(i, 1);\n                return;\n            }\n        }\n    };\n    /**\n     * @param {?} accessor\n     * @return {?}\n     */\n    RadioControlRegistry.prototype.select = function (accessor) {\n        var _this = this;\n        this._accessors.forEach(function (c) {\n            if (_this._isSameGroup(c, accessor) && c[1] !== accessor) {\n                c[1].fireUncheck(accessor.value);\n            }\n        });\n    };\n    /**\n     * @param {?} controlPair\n     * @param {?} accessor\n     * @return {?}\n     */\n    RadioControlRegistry.prototype._isSameGroup = function (controlPair, accessor) {\n        if (!controlPair[0].control)\n            return false;\n        return controlPair[0]._parent === accessor._control._parent &&\n            controlPair[1].name === accessor.name;\n    };\n    return RadioControlRegistry;\n}());\nRadioControlRegistry.decorators = [\n    { type: Injectable },\n];\n/**\n * @nocollapse\n */\nRadioControlRegistry.ctorParameters = function () { return []; };\n/**\n * \\@whatItDoes Writes radio control values and listens to radio control changes.\n *\n * Used by {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName}\n * to keep the view synced with the {\\@link FormControl} model.\n *\n * \\@howToUse\n *\n * If you have imported the {\\@link FormsModule} or the {\\@link ReactiveFormsModule}, this\n * value accessor will be active on any radio control that has a form directive. You do\n * **not** need to add a special selector to activate it.\n *\n * ### How to use radio buttons with form directives\n *\n * To use radio buttons in a template-driven form, you'll want to ensure that radio buttons\n * in the same group have the same `name` attribute.  Radio buttons with different `name`\n * attributes do not affect each other.\n *\n * {\\@example forms/ts/radioButtons/radio_button_example.ts region='TemplateDriven'}\n *\n * When using radio buttons in a reactive form, radio buttons in the same group should have the\n * same `formControlName`. You can also add a `name` attribute, but it's optional.\n *\n * {\\@example forms/ts/reactiveRadioButtons/reactive_radio_button_example.ts region='Reactive'}\n *\n *  * **npm package**: `\\@angular/forms`\n *\n *  \\@stable\n */\nvar RadioControlValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     * @param {?} _registry\n     * @param {?} _injector\n     */\n    function RadioControlValueAccessor(_renderer, _elementRef, _registry, _injector) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this._registry = _registry;\n        this._injector = _injector;\n        this.onChange = function () { };\n        this.onTouched = function () { };\n    }\n    /**\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.ngOnInit = function () {\n        this._control = this._injector.get(NgControl);\n        this._checkName();\n        this._registry.add(this._control, this);\n    };\n    /**\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.ngOnDestroy = function () { this._registry.remove(this); };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.writeValue = function (value) {\n        this._state = value === this.value;\n        this._renderer.setProperty(this._elementRef.nativeElement, 'checked', this._state);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.registerOnChange = function (fn) {\n        var _this = this;\n        this._fn = fn;\n        this.onChange = function () {\n            fn(_this.value);\n            _this._registry.select(_this);\n        };\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.fireUncheck = function (value) { this.writeValue(value); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    /**\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype._checkName = function () {\n        if (this.name && this.formControlName && this.name !== this.formControlName) {\n            this._throwNameError();\n        }\n        if (!this.name && this.formControlName)\n            this.name = this.formControlName;\n    };\n    /**\n     * @return {?}\n     */\n    RadioControlValueAccessor.prototype._throwNameError = function () {\n        throw new Error(\"\\n      If you define both a name and a formControlName attribute on your radio button, their values\\n      must match. Ex: <input type=\\\"radio\\\" formControlName=\\\"food\\\" name=\\\"food\\\">\\n    \");\n    };\n    return RadioControlValueAccessor;\n}());\nRadioControlValueAccessor.decorators = [\n    { type: Directive, args: [{\n                selector: 'input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]',\n                host: { '(change)': 'onChange()', '(blur)': 'onTouched()' },\n                providers: [RADIO_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nRadioControlValueAccessor.ctorParameters = function () { return [\n    { type: Renderer2, },\n    { type: ElementRef, },\n    { type: RadioControlRegistry, },\n    { type: Injector, },\n]; };\nRadioControlValueAccessor.propDecorators = {\n    'name': [{ type: Input },],\n    'formControlName': [{ type: Input },],\n    'value': [{ type: Input },],\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 */\nvar RANGE_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(function () { return RangeValueAccessor; }),\n    multi: true\n};\n/**\n * The accessor for writing a range value and listening to changes that is used by the\n * {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName} directives.\n *\n *  ### Example\n *  ```\n *  <input type=\"range\" [(ngModel)]=\"age\" >\n *  ```\n */\nvar RangeValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function RangeValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    RangeValueAccessor.prototype.writeValue = function (value) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'value', parseFloat(value));\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RangeValueAccessor.prototype.registerOnChange = function (fn) {\n        this.onChange = function (value) { fn(value == '' ? null : parseFloat(value)); };\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RangeValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    RangeValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    return RangeValueAccessor;\n}());\nRangeValueAccessor.decorators = [\n    { type: Directive, args: [{\n                selector: 'input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]',\n                host: {\n                    '(change)': 'onChange($event.target.value)',\n                    '(input)': 'onChange($event.target.value)',\n                    '(blur)': 'onTouched()'\n                },\n                providers: [RANGE_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nRangeValueAccessor.ctorParameters = function () { return [\n    { type: Renderer2, },\n    { type: ElementRef, },\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 */\nvar SELECT_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(function () { return SelectControlValueAccessor; }),\n    multi: true\n};\n/**\n * @param {?} id\n * @param {?} value\n * @return {?}\n */\nfunction _buildValueString(id, value) {\n    if (id == null)\n        return \"\" + value;\n    if (value && typeof value === 'object')\n        value = 'Object';\n    return (id + \": \" + value).slice(0, 50);\n}\n/**\n * @param {?} valueString\n * @return {?}\n */\nfunction _extractId(valueString) {\n    return valueString.split(':')[0];\n}\n/**\n * \\@whatItDoes Writes values and listens to changes on a select element.\n *\n * Used by {\\@link NgModel}, {\\@link FormControlDirective}, and {\\@link FormControlName}\n * to keep the view synced with the {\\@link FormControl} model.\n *\n * \\@howToUse\n *\n * If you have imported the {\\@link FormsModule} or the {\\@link ReactiveFormsModule}, this\n * value accessor will be active on any select control that has a form directive. You do\n * **not** need to add a special selector to activate it.\n *\n * ### How to use select controls with form directives\n *\n * To use a select in a template-driven form, simply add an `ngModel` and a `name`\n * attribute to the main `<select>` tag.\n *\n * If your option values are simple strings, you can bind to the normal `value` property\n * on the option.  If your option values happen to be objects (and you'd like to save the\n * selection in your form as an object), use `ngValue` instead:\n *\n * {\\@example forms/ts/selectControl/select_control_example.ts region='Component'}\n *\n * In reactive forms, you'll also want to add your form directive (`formControlName` or\n * `formControl`) on the main `<select>` tag. Like in the former example, you have the\n * choice of binding to the  `value` or `ngValue` property on the select's options.\n *\n * {\\@example forms/ts/reactiveSelectControl/reactive_select_control_example.ts region='Component'}\n *\n * ### Caveat: Option selection\n *\n * Angular uses object identity to select option. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select>` supports `compareWith` input.\n * `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects option by the return value of the function.\n *\n * #### Syntax\n *\n * ```\n * <select [compareWith]=\"compareFn\"  [(ngModel)]=\"selectedCountries\">\n *     <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n *         {{country.name}}\n *     </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n *     return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * Note: We listen to the 'change' event because 'input' events aren't fired\n * for selects in Firefox and IE:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1024350\n * https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nvar SelectControlValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function SelectControlValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        /**\n         * \\@internal\n         */\n        this._optionMap = new Map();\n        /**\n         * \\@internal\n         */\n        this._idCounter = 0;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n        this._compareWith = ɵlooseIdentical;\n    }\n    Object.defineProperty(SelectControlValueAccessor.prototype, \"compareWith\", {\n        /**\n         * @param {?} fn\n         * @return {?}\n         */\n        set: function (fn) {\n            if (typeof fn !== 'function') {\n                throw new Error(\"compareWith must be a function, but received \" + JSON.stringify(fn));\n            }\n            this._compareWith = fn;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype.writeValue = function (value) {\n        this.value = value;\n        var /** @type {?} */ id = this._getOptionId(value);\n        if (id == null) {\n            this._renderer.setProperty(this._elementRef.nativeElement, 'selectedIndex', -1);\n        }\n        var /** @type {?} */ valueString = _buildValueString(id, value);\n        this._renderer.setProperty(this._elementRef.nativeElement, 'value', valueString);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype.registerOnChange = function (fn) {\n        var _this = this;\n        this.onChange = function (valueString) {\n            _this.value = _this._getOptionValue(valueString);\n            fn(_this.value);\n        };\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype._registerOption = function () { return (this._idCounter++).toString(); };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype._getOptionId = function (value) {\n        for (var _i = 0, _a = Array.from(this._optionMap.keys()); _i < _a.length; _i++) {\n            var id = _a[_i];\n            if (this._compareWith(this._optionMap.get(id), value))\n                return id;\n        }\n        return null;\n    };\n    /**\n     * \\@internal\n     * @param {?} valueString\n     * @return {?}\n     */\n    SelectControlValueAccessor.prototype._getOptionValue = function (valueString) {\n        var /** @type {?} */ id = _extractId(valueString);\n        return this._optionMap.has(id) ? this._optionMap.get(id) : valueString;\n    };\n    return SelectControlValueAccessor;\n}());\nSelectControlValueAccessor.decorators = [\n    { type: Directive, args: [{\n                selector: 'select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]',\n                host: { '(change)': 'onChange($event.target.value)', '(blur)': 'onTouched()' },\n                providers: [SELECT_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nSelectControlValueAccessor.ctorParameters = function () { return [\n    { type: Renderer2, },\n    { type: ElementRef, },\n]; };\nSelectControlValueAccessor.propDecorators = {\n    'compareWith': [{ type: Input },],\n};\n/**\n * \\@whatItDoes Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * \\@howToUse\n *\n * See docs for {\\@link SelectControlValueAccessor} for usage examples.\n *\n * \\@stable\n */\nvar NgSelectOption = (function () {\n    /**\n     * @param {?} _element\n     * @param {?} _renderer\n     * @param {?} _select\n     */\n    function NgSelectOption(_element, _renderer, _select) {\n        this._element = _element;\n        this._renderer = _renderer;\n        this._select = _select;\n        if (this._select)\n            this.id = this._select._registerOption();\n    }\n    Object.defineProperty(NgSelectOption.prototype, \"ngValue\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            if (this._select == null)\n                return;\n            this._select._optionMap.set(this.id, value);\n            this._setElementValue(_buildValueString(this.id, value));\n            this._select.writeValue(this._select.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgSelectOption.prototype, \"value\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            this._setElementValue(value);\n            if (this._select)\n                this._select.writeValue(this._select.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    NgSelectOption.prototype._setElementValue = function (value) {\n        this._renderer.setProperty(this._element.nativeElement, 'value', value);\n    };\n    /**\n     * @return {?}\n     */\n    NgSelectOption.prototype.ngOnDestroy = function () {\n        if (this._select) {\n            this._select._optionMap.delete(this.id);\n            this._select.writeValue(this._select.value);\n        }\n    };\n    return NgSelectOption;\n}());\nNgSelectOption.decorators = [\n    { type: Directive, args: [{ selector: 'option' },] },\n];\n/**\n * @nocollapse\n */\nNgSelectOption.ctorParameters = function () { return [\n    { type: ElementRef, },\n    { type: Renderer2, },\n    { type: SelectControlValueAccessor, decorators: [{ type: Optional }, { type: Host },] },\n]; };\nNgSelectOption.propDecorators = {\n    'ngValue': [{ type: Input, args: ['ngValue',] },],\n    'value': [{ type: Input, args: ['value',] },],\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 */\nvar SELECT_MULTIPLE_VALUE_ACCESSOR = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(function () { return SelectMultipleControlValueAccessor; }),\n    multi: true\n};\n/**\n * @param {?} id\n * @param {?} value\n * @return {?}\n */\nfunction _buildValueString$1(id, value) {\n    if (id == null)\n        return \"\" + value;\n    if (typeof value === 'string')\n        value = \"'\" + value + \"'\";\n    if (value && typeof value === 'object')\n        value = 'Object';\n    return (id + \": \" + value).slice(0, 50);\n}\n/**\n * @param {?} valueString\n * @return {?}\n */\nfunction _extractId$1(valueString) {\n    return valueString.split(':')[0];\n}\n/**\n * The accessor for writing a value and listening to changes on a select element.\n *\n *  ### Caveat: Options selection\n *\n * Angular uses object identity to select options. It's possible for the identities of items\n * to change while the data does not. This can happen, for example, if the items are produced\n * from an RPC to the server, and that RPC is re-run. Even if the data hasn't changed, the\n * second response will produce objects with different identities.\n *\n * To customize the default option comparison algorithm, `<select multiple>` supports `compareWith`\n * input. `compareWith` takes a **function** which has two arguments: `option1` and `option2`.\n * If `compareWith` is given, Angular selects options by the return value of the function.\n *\n * #### Syntax\n *\n * ```\n * <select multiple [compareWith]=\"compareFn\"  [(ngModel)]=\"selectedCountries\">\n *     <option *ngFor=\"let country of countries\" [ngValue]=\"country\">\n *         {{country.name}}\n *     </option>\n * </select>\n *\n * compareFn(c1: Country, c2: Country): boolean {\n *     return c1 && c2 ? c1.id === c2.id : c1 === c2;\n * }\n * ```\n *\n * \\@stable\n */\nvar SelectMultipleControlValueAccessor = (function () {\n    /**\n     * @param {?} _renderer\n     * @param {?} _elementRef\n     */\n    function SelectMultipleControlValueAccessor(_renderer, _elementRef) {\n        this._renderer = _renderer;\n        this._elementRef = _elementRef;\n        /**\n         * \\@internal\n         */\n        this._optionMap = new Map();\n        /**\n         * \\@internal\n         */\n        this._idCounter = 0;\n        this.onChange = function (_) { };\n        this.onTouched = function () { };\n        this._compareWith = ɵlooseIdentical;\n    }\n    Object.defineProperty(SelectMultipleControlValueAccessor.prototype, \"compareWith\", {\n        /**\n         * @param {?} fn\n         * @return {?}\n         */\n        set: function (fn) {\n            if (typeof fn !== 'function') {\n                throw new Error(\"compareWith must be a function, but received \" + JSON.stringify(fn));\n            }\n            this._compareWith = fn;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype.writeValue = function (value) {\n        var _this = this;\n        this.value = value;\n        var /** @type {?} */ optionSelectedStateSetter;\n        if (Array.isArray(value)) {\n            // convert values to ids\n            var /** @type {?} */ ids_1 = value.map(function (v) { return _this._getOptionId(v); });\n            optionSelectedStateSetter = function (opt, o) { opt._setSelected(ids_1.indexOf(o.toString()) > -1); };\n        }\n        else {\n            optionSelectedStateSetter = function (opt, o) { opt._setSelected(false); };\n        }\n        this._optionMap.forEach(optionSelectedStateSetter);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype.registerOnChange = function (fn) {\n        var _this = this;\n        this.onChange = function (_) {\n            var /** @type {?} */ selected = [];\n            if (_.hasOwnProperty('selectedOptions')) {\n                var /** @type {?} */ options = _.selectedOptions;\n                for (var /** @type {?} */ i = 0; i < options.length; i++) {\n                    var /** @type {?} */ opt = options.item(i);\n                    var /** @type {?} */ val = _this._getOptionValue(opt.value);\n                    selected.push(val);\n                }\n            }\n            else {\n                var /** @type {?} */ options = (_.options);\n                for (var /** @type {?} */ i = 0; i < options.length; i++) {\n                    var /** @type {?} */ opt = options.item(i);\n                    if (opt.selected) {\n                        var /** @type {?} */ val = _this._getOptionValue(opt.value);\n                        selected.push(val);\n                    }\n                }\n            }\n            _this.value = selected;\n            fn(selected);\n        };\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype.registerOnTouched = function (fn) { this.onTouched = fn; };\n    /**\n     * @param {?} isDisabled\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype.setDisabledState = function (isDisabled) {\n        this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype._registerOption = function (value) {\n        var /** @type {?} */ id = (this._idCounter++).toString();\n        this._optionMap.set(id, value);\n        return id;\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype._getOptionId = function (value) {\n        for (var _i = 0, _a = Array.from(this._optionMap.keys()); _i < _a.length; _i++) {\n            var id = _a[_i];\n            if (this._compareWith(/** @type {?} */ ((this._optionMap.get(id)))._value, value))\n                return id;\n        }\n        return null;\n    };\n    /**\n     * \\@internal\n     * @param {?} valueString\n     * @return {?}\n     */\n    SelectMultipleControlValueAccessor.prototype._getOptionValue = function (valueString) {\n        var /** @type {?} */ id = _extractId$1(valueString);\n        return this._optionMap.has(id) ? ((this._optionMap.get(id)))._value : valueString;\n    };\n    return SelectMultipleControlValueAccessor;\n}());\nSelectMultipleControlValueAccessor.decorators = [\n    { type: Directive, args: [{\n                selector: 'select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]',\n                host: { '(change)': 'onChange($event.target)', '(blur)': 'onTouched()' },\n                providers: [SELECT_MULTIPLE_VALUE_ACCESSOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nSelectMultipleControlValueAccessor.ctorParameters = function () { return [\n    { type: Renderer2, },\n    { type: ElementRef, },\n]; };\nSelectMultipleControlValueAccessor.propDecorators = {\n    'compareWith': [{ type: Input },],\n};\n/**\n * Marks `<option>` as dynamic, so Angular can be notified when options change.\n *\n * ### Example\n *\n * ```\n * <select multiple name=\"city\" ngModel>\n *   <option *ngFor=\"let c of cities\" [value]=\"c\"></option>\n * </select>\n * ```\n */\nvar NgSelectMultipleOption = (function () {\n    /**\n     * @param {?} _element\n     * @param {?} _renderer\n     * @param {?} _select\n     */\n    function NgSelectMultipleOption(_element, _renderer, _select) {\n        this._element = _element;\n        this._renderer = _renderer;\n        this._select = _select;\n        if (this._select) {\n            this.id = this._select._registerOption(this);\n        }\n    }\n    Object.defineProperty(NgSelectMultipleOption.prototype, \"ngValue\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            if (this._select == null)\n                return;\n            this._value = value;\n            this._setElementValue(_buildValueString$1(this.id, value));\n            this._select.writeValue(this._select.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgSelectMultipleOption.prototype, \"value\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            if (this._select) {\n                this._value = value;\n                this._setElementValue(_buildValueString$1(this.id, value));\n                this._select.writeValue(this._select.value);\n            }\n            else {\n                this._setElementValue(value);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    NgSelectMultipleOption.prototype._setElementValue = function (value) {\n        this._renderer.setProperty(this._element.nativeElement, 'value', value);\n    };\n    /**\n     * \\@internal\n     * @param {?} selected\n     * @return {?}\n     */\n    NgSelectMultipleOption.prototype._setSelected = function (selected) {\n        this._renderer.setProperty(this._element.nativeElement, 'selected', selected);\n    };\n    /**\n     * @return {?}\n     */\n    NgSelectMultipleOption.prototype.ngOnDestroy = function () {\n        if (this._select) {\n            this._select._optionMap.delete(this.id);\n            this._select.writeValue(this._select.value);\n        }\n    };\n    return NgSelectMultipleOption;\n}());\nNgSelectMultipleOption.decorators = [\n    { type: Directive, args: [{ selector: 'option' },] },\n];\n/**\n * @nocollapse\n */\nNgSelectMultipleOption.ctorParameters = function () { return [\n    { type: ElementRef, },\n    { type: Renderer2, },\n    { type: SelectMultipleControlValueAccessor, decorators: [{ type: Optional }, { type: Host },] },\n]; };\nNgSelectMultipleOption.propDecorators = {\n    'ngValue': [{ type: Input, args: ['ngValue',] },],\n    'value': [{ type: Input, args: ['value',] },],\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 * @param {?} name\n * @param {?} parent\n * @return {?}\n */\nfunction controlPath(name, parent) {\n    return ((parent.path)).concat([name]);\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpControl(control, dir) {\n    if (!control)\n        _throwError(dir, 'Cannot find control with');\n    if (!dir.valueAccessor)\n        _throwError(dir, 'No value accessor for form control with');\n    control.validator = Validators.compose([/** @type {?} */ ((control.validator)), dir.validator]);\n    control.asyncValidator = Validators.composeAsync([/** @type {?} */ ((control.asyncValidator)), dir.asyncValidator]); /** @type {?} */\n    ((dir.valueAccessor)).writeValue(control.value); /** @type {?} */\n    ((\n    // view -> model\n    dir.valueAccessor)).registerOnChange(function (newValue) {\n        dir.viewToModelUpdate(newValue);\n        control.markAsDirty();\n        control.setValue(newValue, { emitModelToViewChange: false });\n    }); /** @type {?} */\n    ((\n    // touched\n    dir.valueAccessor)).registerOnTouched(function () { return control.markAsTouched(); });\n    control.registerOnChange(function (newValue, emitModelEvent) {\n        ((\n        // control -> view\n        dir.valueAccessor)).writeValue(newValue);\n        // control -> ngModel\n        if (emitModelEvent)\n            dir.viewToModelUpdate(newValue);\n    });\n    if (((dir.valueAccessor)).setDisabledState) {\n        control.registerOnDisabledChange(function (isDisabled) { /** @type {?} */ ((((dir.valueAccessor)).setDisabledState))(isDisabled); });\n    }\n    // re-run validation when validator binding changes, e.g. minlength=3 -> minlength=4\n    dir._rawValidators.forEach(function (validator) {\n        if (((validator)).registerOnValidatorChange)\n            ((((validator)).registerOnValidatorChange))(function () { return control.updateValueAndValidity(); });\n    });\n    dir._rawAsyncValidators.forEach(function (validator) {\n        if (((validator)).registerOnValidatorChange)\n            ((((validator)).registerOnValidatorChange))(function () { return control.updateValueAndValidity(); });\n    });\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction cleanUpControl(control, dir) {\n    ((dir.valueAccessor)).registerOnChange(function () { return _noControlError(dir); }); /** @type {?} */\n    ((dir.valueAccessor)).registerOnTouched(function () { return _noControlError(dir); });\n    dir._rawValidators.forEach(function (validator) {\n        if (validator.registerOnValidatorChange) {\n            validator.registerOnValidatorChange(null);\n        }\n    });\n    dir._rawAsyncValidators.forEach(function (validator) {\n        if (validator.registerOnValidatorChange) {\n            validator.registerOnValidatorChange(null);\n        }\n    });\n    if (control)\n        control._clearChangeFns();\n}\n/**\n * @param {?} control\n * @param {?} dir\n * @return {?}\n */\nfunction setUpFormContainer(control, dir) {\n    if (control == null)\n        _throwError(dir, 'Cannot find control with');\n    control.validator = Validators.compose([control.validator, dir.validator]);\n    control.asyncValidator = Validators.composeAsync([control.asyncValidator, dir.asyncValidator]);\n}\n/**\n * @param {?} dir\n * @return {?}\n */\nfunction _noControlError(dir) {\n    return _throwError(dir, 'There is no FormControl instance attached to form control element with');\n}\n/**\n * @param {?} dir\n * @param {?} message\n * @return {?}\n */\nfunction _throwError(dir, message) {\n    var /** @type {?} */ messageEnd;\n    if (((dir.path)).length > 1) {\n        messageEnd = \"path: '\" + ((dir.path)).join(' -> ') + \"'\";\n    }\n    else if (((dir.path))[0]) {\n        messageEnd = \"name: '\" + dir.path + \"'\";\n    }\n    else {\n        messageEnd = 'unspecified name attribute';\n    }\n    throw new Error(message + \" \" + messageEnd);\n}\n/**\n * @param {?} validators\n * @return {?}\n */\nfunction composeValidators(validators) {\n    return validators != null ? Validators.compose(validators.map(normalizeValidator)) : null;\n}\n/**\n * @param {?} validators\n * @return {?}\n */\nfunction composeAsyncValidators(validators) {\n    return validators != null ? Validators.composeAsync(validators.map(normalizeAsyncValidator)) :\n        null;\n}\n/**\n * @param {?} changes\n * @param {?} viewModel\n * @return {?}\n */\nfunction isPropertyUpdated(changes, viewModel) {\n    if (!changes.hasOwnProperty('model'))\n        return false;\n    var /** @type {?} */ change = changes['model'];\n    if (change.isFirstChange())\n        return true;\n    return !ɵlooseIdentical(viewModel, change.currentValue);\n}\nvar BUILTIN_ACCESSORS = [\n    CheckboxControlValueAccessor,\n    RangeValueAccessor,\n    NumberValueAccessor,\n    SelectControlValueAccessor,\n    SelectMultipleControlValueAccessor,\n    RadioControlValueAccessor,\n];\n/**\n * @param {?} valueAccessor\n * @return {?}\n */\nfunction isBuiltInAccessor(valueAccessor) {\n    return BUILTIN_ACCESSORS.some(function (a) { return valueAccessor.constructor === a; });\n}\n/**\n * @param {?} dir\n * @param {?} valueAccessors\n * @return {?}\n */\nfunction selectValueAccessor(dir, valueAccessors) {\n    if (!valueAccessors)\n        return null;\n    var /** @type {?} */ defaultAccessor = undefined;\n    var /** @type {?} */ builtinAccessor = undefined;\n    var /** @type {?} */ customAccessor = undefined;\n    valueAccessors.forEach(function (v) {\n        if (v.constructor === DefaultValueAccessor) {\n            defaultAccessor = v;\n        }\n        else if (isBuiltInAccessor(v)) {\n            if (builtinAccessor)\n                _throwError(dir, 'More than one built-in value accessor matches form control with');\n            builtinAccessor = v;\n        }\n        else {\n            if (customAccessor)\n                _throwError(dir, 'More than one custom value accessor matches form control with');\n            customAccessor = v;\n        }\n    });\n    if (customAccessor)\n        return customAccessor;\n    if (builtinAccessor)\n        return builtinAccessor;\n    if (defaultAccessor)\n        return defaultAccessor;\n    _throwError(dir, 'No valid value accessor for form control with');\n    return null;\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 * This is a base class for code shared between {\\@link NgModelGroup} and {\\@link FormGroupName}.\n *\n * \\@stable\n */\nvar AbstractFormGroupDirective = (function (_super) {\n    tslib_1.__extends(AbstractFormGroupDirective, _super);\n    function AbstractFormGroupDirective() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @return {?}\n     */\n    AbstractFormGroupDirective.prototype.ngOnInit = function () {\n        this._checkParentType(); /** @type {?} */\n        ((this.formDirective)).addFormGroup(this);\n    };\n    /**\n     * @return {?}\n     */\n    AbstractFormGroupDirective.prototype.ngOnDestroy = function () {\n        if (this.formDirective) {\n            this.formDirective.removeFormGroup(this);\n        }\n    };\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"control\", {\n        /**\n         * Get the {\\@link FormGroup} backing this binding.\n         * @return {?}\n         */\n        get: function () { return ((this.formDirective)).getFormGroup(this); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"path\", {\n        /**\n         * Get the path to this control group.\n         * @return {?}\n         */\n        get: function () { return controlPath(this.name, this._parent); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"formDirective\", {\n        /**\n         * Get the {\\@link Form} to which this group belongs.\n         * @return {?}\n         */\n        get: function () { return this._parent ? this._parent.formDirective : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._validators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractFormGroupDirective.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return composeAsyncValidators(this._asyncValidators);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    AbstractFormGroupDirective.prototype._checkParentType = function () { };\n    return AbstractFormGroupDirective;\n}(ControlContainer));\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 */\nvar AbstractControlStatus = (function () {\n    /**\n     * @param {?} cd\n     */\n    function AbstractControlStatus(cd) {\n        this._cd = cd;\n    }\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassUntouched\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.untouched : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassTouched\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.touched : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassPristine\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.pristine : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassDirty\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.dirty : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassValid\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.valid : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassInvalid\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.invalid : false; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControlStatus.prototype, \"ngClassPending\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._cd.control ? this._cd.control.pending : false; },\n        enumerable: true,\n        configurable: true\n    });\n    return AbstractControlStatus;\n}());\nvar ngControlStatusHost = {\n    '[class.ng-untouched]': 'ngClassUntouched',\n    '[class.ng-touched]': 'ngClassTouched',\n    '[class.ng-pristine]': 'ngClassPristine',\n    '[class.ng-dirty]': 'ngClassDirty',\n    '[class.ng-valid]': 'ngClassValid',\n    '[class.ng-invalid]': 'ngClassInvalid',\n    '[class.ng-pending]': 'ngClassPending',\n};\n/**\n * Directive automatically applied to Angular form controls that sets CSS classes\n * based on control status. The following classes are applied as the properties\n * become true:\n *\n * * ng-valid\n * * ng-invalid\n * * ng-pending\n * * ng-pristine\n * * ng-dirty\n * * ng-untouched\n * * ng-touched\n *\n * \\@stable\n */\nvar NgControlStatus = (function (_super) {\n    tslib_1.__extends(NgControlStatus, _super);\n    /**\n     * @param {?} cd\n     */\n    function NgControlStatus(cd) {\n        return _super.call(this, cd) || this;\n    }\n    return NgControlStatus;\n}(AbstractControlStatus));\nNgControlStatus.decorators = [\n    { type: Directive, args: [{ selector: '[formControlName],[ngModel],[formControl]', host: ngControlStatusHost },] },\n];\n/**\n * @nocollapse\n */\nNgControlStatus.ctorParameters = function () { return [\n    { type: NgControl, decorators: [{ type: Self },] },\n]; };\n/**\n * Directive automatically applied to Angular form groups that sets CSS classes\n * based on control status (valid/invalid/dirty/etc).\n *\n * \\@stable\n */\nvar NgControlStatusGroup = (function (_super) {\n    tslib_1.__extends(NgControlStatusGroup, _super);\n    /**\n     * @param {?} cd\n     */\n    function NgControlStatusGroup(cd) {\n        return _super.call(this, cd) || this;\n    }\n    return NgControlStatusGroup;\n}(AbstractControlStatus));\nNgControlStatusGroup.decorators = [\n    { type: Directive, args: [{\n                selector: '[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]',\n                host: ngControlStatusHost\n            },] },\n];\n/**\n * @nocollapse\n */\nNgControlStatusGroup.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: Self },] },\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 * Indicates that a FormControl is valid, i.e. that no errors exist in the input value.\n */\nvar VALID = 'VALID';\n/**\n * Indicates that a FormControl is invalid, i.e. that an error exists in the input value.\n */\nvar INVALID = 'INVALID';\n/**\n * Indicates that a FormControl is pending, i.e. that async validation is occurring and\n * errors are not yet available for the input value.\n */\nvar PENDING = 'PENDING';\n/**\n * Indicates that a FormControl is disabled, i.e. that the control is exempt from ancestor\n * calculations of validity or value.\n */\nvar DISABLED = 'DISABLED';\n/**\n * @param {?} control\n * @param {?} path\n * @param {?} delimiter\n * @return {?}\n */\nfunction _find(control, path, delimiter) {\n    if (path == null)\n        return null;\n    if (!(path instanceof Array)) {\n        path = ((path)).split(delimiter);\n    }\n    if (path instanceof Array && (path.length === 0))\n        return null;\n    return ((path)).reduce(function (v, name) {\n        if (v instanceof FormGroup) {\n            return v.controls[name] || null;\n        }\n        if (v instanceof FormArray) {\n            return v.at(/** @type {?} */ (name)) || null;\n        }\n        return null;\n    }, control);\n}\n/**\n * @param {?=} validator\n * @return {?}\n */\nfunction coerceToValidator(validator) {\n    return Array.isArray(validator) ? composeValidators(validator) : validator || null;\n}\n/**\n * @param {?=} asyncValidator\n * @return {?}\n */\nfunction coerceToAsyncValidator(asyncValidator) {\n    return Array.isArray(asyncValidator) ? composeAsyncValidators(asyncValidator) :\n        asyncValidator || null;\n}\n/**\n * \\@whatItDoes This is the base class for {\\@link FormControl}, {\\@link FormGroup}, and\n * {\\@link FormArray}.\n *\n * It provides some of the shared behavior that all controls and groups of controls have, like\n * running validators, calculating status, and resetting state. It also defines the properties\n * that are shared between all sub-classes, like `value`, `valid`, and `dirty`. It shouldn't be\n * instantiated directly.\n *\n * \\@stable\n * @abstract\n */\nvar AbstractControl = (function () {\n    /**\n     * @param {?} validator\n     * @param {?} asyncValidator\n     */\n    function AbstractControl(validator, asyncValidator) {\n        this.validator = validator;\n        this.asyncValidator = asyncValidator;\n        /**\n         * \\@internal\n         */\n        this._onCollectionChange = function () { };\n        this._pristine = true;\n        this._touched = false;\n        /**\n         * \\@internal\n         */\n        this._onDisabledChange = [];\n    }\n    Object.defineProperty(AbstractControl.prototype, \"value\", {\n        /**\n         * The value of the control.\n         * @return {?}\n         */\n        get: function () { return this._value; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"parent\", {\n        /**\n         * The parent control.\n         * @return {?}\n         */\n        get: function () { return this._parent; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"status\", {\n        /**\n         * The validation status of the control. There are four possible\n         * validation statuses:\n         *\n         * * **VALID**:  control has passed all validation checks\n         * * **INVALID**: control has failed at least one validation check\n         * * **PENDING**: control is in the midst of conducting a validation check\n         * * **DISABLED**: control is exempt from validation checks\n         *\n         * These statuses are mutually exclusive, so a control cannot be\n         * both valid AND invalid or invalid AND disabled.\n         * @return {?}\n         */\n        get: function () { return this._status; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"valid\", {\n        /**\n         * A control is `valid` when its `status === VALID`.\n         *\n         * In order to have this status, the control must have passed all its\n         * validation checks.\n         * @return {?}\n         */\n        get: function () { return this._status === VALID; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"invalid\", {\n        /**\n         * A control is `invalid` when its `status === INVALID`.\n         *\n         * In order to have this status, the control must have failed\n         * at least one of its validation checks.\n         * @return {?}\n         */\n        get: function () { return this._status === INVALID; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"pending\", {\n        /**\n         * A control is `pending` when its `status === PENDING`.\n         *\n         * In order to have this status, the control must be in the\n         * middle of conducting a validation check.\n         * @return {?}\n         */\n        get: function () { return this._status == PENDING; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"disabled\", {\n        /**\n         * A control is `disabled` when its `status === DISABLED`.\n         *\n         * Disabled controls are exempt from validation checks and\n         * are not included in the aggregate value of their ancestor\n         * controls.\n         * @return {?}\n         */\n        get: function () { return this._status === DISABLED; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"enabled\", {\n        /**\n         * A control is `enabled` as long as its `status !== DISABLED`.\n         *\n         * In other words, it has a status of `VALID`, `INVALID`, or\n         * `PENDING`.\n         * @return {?}\n         */\n        get: function () { return this._status !== DISABLED; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"errors\", {\n        /**\n         * Returns any errors generated by failing validation. If there\n         * are no errors, it will return null.\n         * @return {?}\n         */\n        get: function () { return this._errors; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"pristine\", {\n        /**\n         * A control is `pristine` if the user has not yet changed\n         * the value in the UI.\n         *\n         * Note that programmatic changes to a control's value will\n         * *not* mark it dirty.\n         * @return {?}\n         */\n        get: function () { return this._pristine; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"dirty\", {\n        /**\n         * A control is `dirty` if the user has changed the value\n         * in the UI.\n         *\n         * Note that programmatic changes to a control's value will\n         * *not* mark it dirty.\n         * @return {?}\n         */\n        get: function () { return !this.pristine; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"touched\", {\n        /**\n         * A control is marked `touched` once the user has triggered\n         * a `blur` event on it.\n         * @return {?}\n         */\n        get: function () { return this._touched; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"untouched\", {\n        /**\n         * A control is `untouched` if the user has not yet triggered\n         * a `blur` event on it.\n         * @return {?}\n         */\n        get: function () { return !this._touched; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"valueChanges\", {\n        /**\n         * Emits an event every time the value of the control changes, in\n         * the UI or programmatically.\n         * @return {?}\n         */\n        get: function () { return this._valueChanges; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AbstractControl.prototype, \"statusChanges\", {\n        /**\n         * Emits an event every time the validation status of the control\n         * is re-calculated.\n         * @return {?}\n         */\n        get: function () { return this._statusChanges; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Sets the synchronous validators that are active on this control.  Calling\n     * this will overwrite any existing sync validators.\n     * @param {?} newValidator\n     * @return {?}\n     */\n    AbstractControl.prototype.setValidators = function (newValidator) {\n        this.validator = coerceToValidator(newValidator);\n    };\n    /**\n     * Sets the async validators that are active on this control. Calling this\n     * will overwrite any existing async validators.\n     * @param {?} newValidator\n     * @return {?}\n     */\n    AbstractControl.prototype.setAsyncValidators = function (newValidator) {\n        this.asyncValidator = coerceToAsyncValidator(newValidator);\n    };\n    /**\n     * Empties out the sync validator list.\n     * @return {?}\n     */\n    AbstractControl.prototype.clearValidators = function () { this.validator = null; };\n    /**\n     * Empties out the async validator list.\n     * @return {?}\n     */\n    AbstractControl.prototype.clearAsyncValidators = function () { this.asyncValidator = null; };\n    /**\n     * Marks the control as `touched`.\n     *\n     * This will also mark all direct ancestors as `touched` to maintain\n     * the model.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsTouched = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._touched = true;\n        if (this._parent && !opts.onlySelf) {\n            this._parent.markAsTouched(opts);\n        }\n    };\n    /**\n     * Marks the control as `untouched`.\n     *\n     * If the control has any children, it will also mark all children as `untouched`\n     * to maintain the model, and re-calculate the `touched` status of all parent\n     * controls.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsUntouched = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._touched = false;\n        this._forEachChild(function (control) { control.markAsUntouched({ onlySelf: true }); });\n        if (this._parent && !opts.onlySelf) {\n            this._parent._updateTouched(opts);\n        }\n    };\n    /**\n     * Marks the control as `dirty`.\n     *\n     * This will also mark all direct ancestors as `dirty` to maintain\n     * the model.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsDirty = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._pristine = false;\n        if (this._parent && !opts.onlySelf) {\n            this._parent.markAsDirty(opts);\n        }\n    };\n    /**\n     * Marks the control as `pristine`.\n     *\n     * If the control has any children, it will also mark all children as `pristine`\n     * to maintain the model, and re-calculate the `pristine` status of all parent\n     * controls.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsPristine = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._pristine = true;\n        this._forEachChild(function (control) { control.markAsPristine({ onlySelf: true }); });\n        if (this._parent && !opts.onlySelf) {\n            this._parent._updatePristine(opts);\n        }\n    };\n    /**\n     * Marks the control as `pending`.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.markAsPending = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._status = PENDING;\n        if (this._parent && !opts.onlySelf) {\n            this._parent.markAsPending(opts);\n        }\n    };\n    /**\n     * Disables the control. This means the control will be exempt from validation checks and\n     * excluded from the aggregate value of any parent. Its status is `DISABLED`.\n     *\n     * If the control has children, all children will be disabled to maintain the model.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.disable = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._status = DISABLED;\n        this._errors = null;\n        this._forEachChild(function (control) { control.disable({ onlySelf: true }); });\n        this._updateValue();\n        if (opts.emitEvent !== false) {\n            this._valueChanges.emit(this._value);\n            this._statusChanges.emit(this._status);\n        }\n        this._updateAncestors(!!opts.onlySelf);\n        this._onDisabledChange.forEach(function (changeFn) { return changeFn(true); });\n    };\n    /**\n     * Enables the control. This means the control will be included in validation checks and\n     * the aggregate value of its parent. Its status is re-calculated based on its value and\n     * its validators.\n     *\n     * If the control has children, all children will be enabled.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.enable = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._status = VALID;\n        this._forEachChild(function (control) { control.enable({ onlySelf: true }); });\n        this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n        this._updateAncestors(!!opts.onlySelf);\n        this._onDisabledChange.forEach(function (changeFn) { return changeFn(false); });\n    };\n    /**\n     * @param {?} onlySelf\n     * @return {?}\n     */\n    AbstractControl.prototype._updateAncestors = function (onlySelf) {\n        if (this._parent && !onlySelf) {\n            this._parent.updateValueAndValidity();\n            this._parent._updatePristine();\n            this._parent._updateTouched();\n        }\n    };\n    /**\n     * @param {?} parent\n     * @return {?}\n     */\n    AbstractControl.prototype.setParent = function (parent) { this._parent = parent; };\n    /**\n     * Sets the value of the control. Abstract method (implemented in sub-classes).\n     * @abstract\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    AbstractControl.prototype.setValue = function (value, options) { };\n    /**\n     * Patches the value of the control. Abstract method (implemented in sub-classes).\n     * @abstract\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    AbstractControl.prototype.patchValue = function (value, options) { };\n    /**\n     * Resets the control. Abstract method (implemented in sub-classes).\n     * @abstract\n     * @param {?=} value\n     * @param {?=} options\n     * @return {?}\n     */\n    AbstractControl.prototype.reset = function (value, options) { };\n    /**\n     * Re-calculates the value and validation status of the control.\n     *\n     * By default, it will also update the value and validity of its ancestors.\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.updateValueAndValidity = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._setInitialStatus();\n        this._updateValue();\n        if (this.enabled) {\n            this._cancelExistingSubscription();\n            this._errors = this._runValidator();\n            this._status = this._calculateStatus();\n            if (this._status === VALID || this._status === PENDING) {\n                this._runAsyncValidator(opts.emitEvent);\n            }\n        }\n        if (opts.emitEvent !== false) {\n            this._valueChanges.emit(this._value);\n            this._statusChanges.emit(this._status);\n        }\n        if (this._parent && !opts.onlySelf) {\n            this._parent.updateValueAndValidity(opts);\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype._updateTreeValidity = function (opts) {\n        if (opts === void 0) { opts = { emitEvent: true }; }\n        this._forEachChild(function (ctrl) { return ctrl._updateTreeValidity(opts); });\n        this.updateValueAndValidity({ onlySelf: true, emitEvent: opts.emitEvent });\n    };\n    /**\n     * @return {?}\n     */\n    AbstractControl.prototype._setInitialStatus = function () { this._status = this._allControlsDisabled() ? DISABLED : VALID; };\n    /**\n     * @return {?}\n     */\n    AbstractControl.prototype._runValidator = function () {\n        return this.validator ? this.validator(this) : null;\n    };\n    /**\n     * @param {?=} emitEvent\n     * @return {?}\n     */\n    AbstractControl.prototype._runAsyncValidator = function (emitEvent) {\n        var _this = this;\n        if (this.asyncValidator) {\n            this._status = PENDING;\n            var /** @type {?} */ obs = toObservable(this.asyncValidator(this));\n            this._asyncValidationSubscription =\n                obs.subscribe(function (errors) { return _this.setErrors(errors, { emitEvent: emitEvent }); });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AbstractControl.prototype._cancelExistingSubscription = function () {\n        if (this._asyncValidationSubscription) {\n            this._asyncValidationSubscription.unsubscribe();\n        }\n    };\n    /**\n     * Sets errors on a form control.\n     *\n     * This is used when validations are run manually by the user, rather than automatically.\n     *\n     * Calling `setErrors` will also update the validity of the parent control.\n     *\n     * ### Example\n     *\n     * ```\n     * const login = new FormControl(\"someLogin\");\n     * login.setErrors({\n     *   \"notUnique\": true\n     * });\n     *\n     * expect(login.valid).toEqual(false);\n     * expect(login.errors).toEqual({\"notUnique\": true});\n     *\n     * login.setValue(\"someOtherLogin\");\n     *\n     * expect(login.valid).toEqual(true);\n     * ```\n     * @param {?} errors\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype.setErrors = function (errors, opts) {\n        if (opts === void 0) { opts = {}; }\n        this._errors = errors;\n        this._updateControlsErrors(opts.emitEvent !== false);\n    };\n    /**\n     * Retrieves a child control given the control's name or path.\n     *\n     * Paths can be passed in as an array or a string delimited by a dot.\n     *\n     * To get a control nested within a `person` sub-group:\n     *\n     * * `this.form.get('person.name');`\n     *\n     * -OR-\n     *\n     * * `this.form.get(['person', 'name']);`\n     * @param {?} path\n     * @return {?}\n     */\n    AbstractControl.prototype.get = function (path) { return _find(this, path, '.'); };\n    /**\n     * Returns error data if the control with the given path has the error specified. Otherwise\n     * returns null or undefined.\n     *\n     * If no path is given, it checks for the error on the present control.\n     * @param {?} errorCode\n     * @param {?=} path\n     * @return {?}\n     */\n    AbstractControl.prototype.getError = function (errorCode, path) {\n        var /** @type {?} */ control = path ? this.get(path) : this;\n        return control && control._errors ? control._errors[errorCode] : null;\n    };\n    /**\n     * Returns true if the control with the given path has the error specified. Otherwise\n     * returns false.\n     *\n     * If no path is given, it checks for the error on the present control.\n     * @param {?} errorCode\n     * @param {?=} path\n     * @return {?}\n     */\n    AbstractControl.prototype.hasError = function (errorCode, path) { return !!this.getError(errorCode, path); };\n    Object.defineProperty(AbstractControl.prototype, \"root\", {\n        /**\n         * Retrieves the top-level ancestor of this control.\n         * @return {?}\n         */\n        get: function () {\n            var /** @type {?} */ x = this;\n            while (x._parent) {\n                x = x._parent;\n            }\n            return x;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@internal\n     * @param {?} emitEvent\n     * @return {?}\n     */\n    AbstractControl.prototype._updateControlsErrors = function (emitEvent) {\n        this._status = this._calculateStatus();\n        if (emitEvent) {\n            this._statusChanges.emit(this._status);\n        }\n        if (this._parent) {\n            this._parent._updateControlsErrors(emitEvent);\n        }\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    AbstractControl.prototype._initObservables = function () {\n        this._valueChanges = new EventEmitter();\n        this._statusChanges = new EventEmitter();\n    };\n    /**\n     * @return {?}\n     */\n    AbstractControl.prototype._calculateStatus = function () {\n        if (this._allControlsDisabled())\n            return DISABLED;\n        if (this._errors)\n            return INVALID;\n        if (this._anyControlsHaveStatus(PENDING))\n            return PENDING;\n        if (this._anyControlsHaveStatus(INVALID))\n            return INVALID;\n        return VALID;\n    };\n    /**\n     * \\@internal\n     * @abstract\n     * @return {?}\n     */\n    AbstractControl.prototype._updateValue = function () { };\n    /**\n     * \\@internal\n     * @abstract\n     * @param {?} cb\n     * @return {?}\n     */\n    AbstractControl.prototype._forEachChild = function (cb) { };\n    /**\n     * \\@internal\n     * @abstract\n     * @param {?} condition\n     * @return {?}\n     */\n    AbstractControl.prototype._anyControls = function (condition) { };\n    /**\n     * \\@internal\n     * @abstract\n     * @return {?}\n     */\n    AbstractControl.prototype._allControlsDisabled = function () { };\n    /**\n     * \\@internal\n     * @param {?} status\n     * @return {?}\n     */\n    AbstractControl.prototype._anyControlsHaveStatus = function (status) {\n        return this._anyControls(function (control) { return control.status === status; });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    AbstractControl.prototype._anyControlsDirty = function () {\n        return this._anyControls(function (control) { return control.dirty; });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    AbstractControl.prototype._anyControlsTouched = function () {\n        return this._anyControls(function (control) { return control.touched; });\n    };\n    /**\n     * \\@internal\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype._updatePristine = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._pristine = !this._anyControlsDirty();\n        if (this._parent && !opts.onlySelf) {\n            this._parent._updatePristine(opts);\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?=} opts\n     * @return {?}\n     */\n    AbstractControl.prototype._updateTouched = function (opts) {\n        if (opts === void 0) { opts = {}; }\n        this._touched = this._anyControlsTouched();\n        if (this._parent && !opts.onlySelf) {\n            this._parent._updateTouched(opts);\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?} formState\n     * @return {?}\n     */\n    AbstractControl.prototype._isBoxedValue = function (formState) {\n        return typeof formState === 'object' && formState !== null &&\n            Object.keys(formState).length === 2 && 'value' in formState && 'disabled' in formState;\n    };\n    /**\n     * \\@internal\n     * @param {?} fn\n     * @return {?}\n     */\n    AbstractControl.prototype._registerOnCollectionChange = function (fn) { this._onCollectionChange = fn; };\n    return AbstractControl;\n}());\n/**\n * \\@whatItDoes Tracks the value and validation status of an individual form control.\n *\n * It is one of the three fundamental building blocks of Angular forms, along with\n * {\\@link FormGroup} and {\\@link FormArray}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormControl}, you can pass in an initial value as the\n * first argument. Example:\n *\n * ```ts\n * const ctrl = new FormControl('some value');\n * console.log(ctrl.value);     // 'some value'\n * ```\n *\n * You can also initialize the control with a form state object on instantiation,\n * which includes both the value and whether or not the control is disabled.\n * You can't use the value key without the disabled key; both are required\n * to use this way of initialization.\n *\n * ```ts\n * const ctrl = new FormControl({value: 'n/a', disabled: true});\n * console.log(ctrl.value);     // 'n/a'\n * console.log(ctrl.status);   // 'DISABLED'\n * ```\n *\n * To include a sync validator (or an array of sync validators) with the control,\n * pass it in as the second argument. Async validators are also supported, but\n * have to be passed in separately as the third arg.\n *\n * ```ts\n * const ctrl = new FormControl('', Validators.required);\n * console.log(ctrl.value);     // ''\n * console.log(ctrl.status);   // 'INVALID'\n * ```\n *\n * See its superclass, {\\@link AbstractControl}, for more properties and methods.\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nvar FormControl = (function (_super) {\n    tslib_1.__extends(FormControl, _super);\n    /**\n     * @param {?=} formState\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     */\n    function FormControl(formState, validator, asyncValidator) {\n        if (formState === void 0) { formState = null; }\n        var _this = _super.call(this, coerceToValidator(validator), coerceToAsyncValidator(asyncValidator)) || this;\n        /**\n         * \\@internal\n         */\n        _this._onChange = [];\n        _this._applyFormState(formState);\n        _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n        _this._initObservables();\n        return _this;\n    }\n    /**\n     * Set the value of the form control to `value`.\n     *\n     * If `onlySelf` is `true`, this change will only affect the validation of this `FormControl`\n     * and not its parent component. This defaults to false.\n     *\n     * If `emitEvent` is `true`, this\n     * change will cause a `valueChanges` event on the `FormControl` to be emitted. This defaults\n     * to true (as it falls through to `updateValueAndValidity`).\n     *\n     * If `emitModelToViewChange` is `true`, the view will be notified about the new value\n     * via an `onChange` event. This is the default behavior if `emitModelToViewChange` is not\n     * specified.\n     *\n     * If `emitViewToModelChange` is `true`, an ngModelChange event will be fired to update the\n     * model.  This is the default behavior if `emitViewToModelChange` is not specified.\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormControl.prototype.setValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        this._value = value;\n        if (this._onChange.length && options.emitModelToViewChange !== false) {\n            this._onChange.forEach(function (changeFn) { return changeFn(_this._value, options.emitViewToModelChange !== false); });\n        }\n        this.updateValueAndValidity(options);\n    };\n    /**\n     * Patches the value of a control.\n     *\n     * This function is functionally the same as {\\@link FormControl#setValue} at this level.\n     * It exists for symmetry with {\\@link FormGroup#patchValue} on `FormGroups` and `FormArrays`,\n     * where it does behave differently.\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormControl.prototype.patchValue = function (value, options) {\n        if (options === void 0) { options = {}; }\n        this.setValue(value, options);\n    };\n    /**\n     * Resets the form control. This means by default:\n     *\n     * * it is marked as `pristine`\n     * * it is marked as `untouched`\n     * * value is set to null\n     *\n     * You can also reset to a specific form state by passing through a standalone\n     * value or a form state object that contains both a value and a disabled state\n     * (these are the only two properties that cannot be calculated).\n     *\n     * Ex:\n     *\n     * ```ts\n     * this.control.reset('Nancy');\n     *\n     * console.log(this.control.value);  // 'Nancy'\n     * ```\n     *\n     * OR\n     *\n     * ```\n     * this.control.reset({value: 'Nancy', disabled: true});\n     *\n     * console.log(this.control.value);  // 'Nancy'\n     * console.log(this.control.status);  // 'DISABLED'\n     * ```\n     * @param {?=} formState\n     * @param {?=} options\n     * @return {?}\n     */\n    FormControl.prototype.reset = function (formState, options) {\n        if (formState === void 0) { formState = null; }\n        if (options === void 0) { options = {}; }\n        this._applyFormState(formState);\n        this.markAsPristine(options);\n        this.markAsUntouched(options);\n        this.setValue(this._value, options);\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormControl.prototype._updateValue = function () { };\n    /**\n     * \\@internal\n     * @param {?} condition\n     * @return {?}\n     */\n    FormControl.prototype._anyControls = function (condition) { return false; };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormControl.prototype._allControlsDisabled = function () { return this.disabled; };\n    /**\n     * Register a listener for change events.\n     * @param {?} fn\n     * @return {?}\n     */\n    FormControl.prototype.registerOnChange = function (fn) { this._onChange.push(fn); };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormControl.prototype._clearChangeFns = function () {\n        this._onChange = [];\n        this._onDisabledChange = [];\n        this._onCollectionChange = function () { };\n    };\n    /**\n     * Register a listener for disabled events.\n     * @param {?} fn\n     * @return {?}\n     */\n    FormControl.prototype.registerOnDisabledChange = function (fn) {\n        this._onDisabledChange.push(fn);\n    };\n    /**\n     * \\@internal\n     * @param {?} cb\n     * @return {?}\n     */\n    FormControl.prototype._forEachChild = function (cb) { };\n    /**\n     * @param {?} formState\n     * @return {?}\n     */\n    FormControl.prototype._applyFormState = function (formState) {\n        if (this._isBoxedValue(formState)) {\n            this._value = formState.value;\n            formState.disabled ? this.disable({ onlySelf: true, emitEvent: false }) :\n                this.enable({ onlySelf: true, emitEvent: false });\n        }\n        else {\n            this._value = formState;\n        }\n    };\n    return FormControl;\n}(AbstractControl));\n/**\n * \\@whatItDoes Tracks the value and validity state of a group of {\\@link FormControl}\n * instances.\n *\n * A `FormGroup` aggregates the values of each child {\\@link FormControl} into one object,\n * with each control name as the key.  It calculates its status by reducing the statuses\n * of its children. For example, if one of the controls in a group is invalid, the entire\n * group becomes invalid.\n *\n * `FormGroup` is one of the three fundamental building blocks used to define forms in Angular,\n * along with {\\@link FormControl} and {\\@link FormArray}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormGroup}, pass in a collection of child controls as the first\n * argument. The key for each child will be the name under which it is registered.\n *\n * ### Example\n *\n * ```\n * const form = new FormGroup({\n *   first: new FormControl('Nancy', Validators.minLength(2)),\n *   last: new FormControl('Drew'),\n * });\n *\n * console.log(form.value);   // {first: 'Nancy', last; 'Drew'}\n * console.log(form.status);  // 'VALID'\n * ```\n *\n * You can also include group-level validators as the second arg, or group-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ### Example\n *\n * ```\n * const form = new FormGroup({\n *   password: new FormControl('', Validators.minLength(2)),\n *   passwordConfirm: new FormControl('', Validators.minLength(2)),\n * }, passwordMatchValidator);\n *\n *\n * function passwordMatchValidator(g: FormGroup) {\n *    return g.get('password').value === g.get('passwordConfirm').value\n *       ? null : {'mismatch': true};\n * }\n * ```\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nvar FormGroup = (function (_super) {\n    tslib_1.__extends(FormGroup, _super);\n    /**\n     * @param {?} controls\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     */\n    function FormGroup(controls, validator, asyncValidator) {\n        var _this = _super.call(this, validator || null, asyncValidator || null) || this;\n        _this.controls = controls;\n        _this._initObservables();\n        _this._setUpControls();\n        _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n        return _this;\n    }\n    /**\n     * Registers a control with the group's list of controls.\n     *\n     * This method does not update value or validity of the control, so for\n     * most cases you'll want to use {\\@link FormGroup#addControl} instead.\n     * @param {?} name\n     * @param {?} control\n     * @return {?}\n     */\n    FormGroup.prototype.registerControl = function (name, control) {\n        if (this.controls[name])\n            return this.controls[name];\n        this.controls[name] = control;\n        control.setParent(this);\n        control._registerOnCollectionChange(this._onCollectionChange);\n        return control;\n    };\n    /**\n     * Add a control to this group.\n     * @param {?} name\n     * @param {?} control\n     * @return {?}\n     */\n    FormGroup.prototype.addControl = function (name, control) {\n        this.registerControl(name, control);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Remove a control from this group.\n     * @param {?} name\n     * @return {?}\n     */\n    FormGroup.prototype.removeControl = function (name) {\n        if (this.controls[name])\n            this.controls[name]._registerOnCollectionChange(function () { });\n        delete (this.controls[name]);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Replace an existing control.\n     * @param {?} name\n     * @param {?} control\n     * @return {?}\n     */\n    FormGroup.prototype.setControl = function (name, control) {\n        if (this.controls[name])\n            this.controls[name]._registerOnCollectionChange(function () { });\n        delete (this.controls[name]);\n        if (control)\n            this.registerControl(name, control);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Check whether there is an enabled control with the given name in the group.\n     *\n     * It will return false for disabled controls. If you'd like to check for\n     * existence in the group only, use {\\@link AbstractControl#get} instead.\n     * @param {?} controlName\n     * @return {?}\n     */\n    FormGroup.prototype.contains = function (controlName) {\n        return this.controls.hasOwnProperty(controlName) && this.controls[controlName].enabled;\n    };\n    /**\n     *  Sets the value of the {\\@link FormGroup}. It accepts an object that matches\n     *  the structure of the group, with control names as keys.\n     *\n     * This method performs strict checks, so it will throw an error if you try\n     * to set the value of a control that doesn't exist or if you exclude the\n     * value of a control.\n     *\n     *  ### Example\n     *\n     *  ```\n     *  const form = new FormGroup({\n     *     first: new FormControl(),\n     *     last: new FormControl()\n     *  });\n     *  console.log(form.value);   // {first: null, last: null}\n     *\n     *  form.setValue({first: 'Nancy', last: 'Drew'});\n     *  console.log(form.value);   // {first: 'Nancy', last: 'Drew'}\n     *\n     *  ```\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormGroup.prototype.setValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        this._checkAllValuesPresent(value);\n        Object.keys(value).forEach(function (name) {\n            _this._throwIfControlMissing(name);\n            _this.controls[name].setValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n        });\n        this.updateValueAndValidity(options);\n    };\n    /**\n     *  Patches the value of the {\\@link FormGroup}. It accepts an object with control\n     *  names as keys, and will do its best to match the values to the correct controls\n     *  in the group.\n     *\n     *  It accepts both super-sets and sub-sets of the group without throwing an error.\n     *\n     *  ### Example\n     *\n     *  ```\n     *  const form = new FormGroup({\n     *     first: new FormControl(),\n     *     last: new FormControl()\n     *  });\n     *  console.log(form.value);   // {first: null, last: null}\n     *\n     *  form.patchValue({first: 'Nancy'});\n     *  console.log(form.value);   // {first: 'Nancy', last: null}\n     *\n     *  ```\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormGroup.prototype.patchValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        Object.keys(value).forEach(function (name) {\n            if (_this.controls[name]) {\n                _this.controls[name].patchValue(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n            }\n        });\n        this.updateValueAndValidity(options);\n    };\n    /**\n     * Resets the {\\@link FormGroup}. This means by default:\n     *\n     * * The group and all descendants are marked `pristine`\n     * * The group and all descendants are marked `untouched`\n     * * The value of all descendants will be null or null maps\n     *\n     * You can also reset to a specific form state by passing in a map of states\n     * that matches the structure of your form, with control names as keys. The state\n     * can be a standalone value or a form state object with both a value and a disabled\n     * status.\n     *\n     * ### Example\n     *\n     * ```ts\n     * this.form.reset({first: 'name', last: 'last name'});\n     *\n     * console.log(this.form.value);  // {first: 'name', last: 'last name'}\n     * ```\n     *\n     * - OR -\n     *\n     * ```\n     * this.form.reset({\n     *   first: {value: 'name', disabled: true},\n     *   last: 'last'\n     * });\n     *\n     * console.log(this.form.value);  // {first: 'name', last: 'last name'}\n     * console.log(this.form.get('first').status);  // 'DISABLED'\n     * ```\n     * @param {?=} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormGroup.prototype.reset = function (value, options) {\n        if (value === void 0) { value = {}; }\n        if (options === void 0) { options = {}; }\n        this._forEachChild(function (control, name) {\n            control.reset(value[name], { onlySelf: true, emitEvent: options.emitEvent });\n        });\n        this.updateValueAndValidity(options);\n        this._updatePristine(options);\n        this._updateTouched(options);\n    };\n    /**\n     * The aggregate value of the {\\@link FormGroup}, including any disabled controls.\n     *\n     * If you'd like to include all values regardless of disabled status, use this method.\n     * Otherwise, the `value` property is the best way to get the value of the group.\n     * @return {?}\n     */\n    FormGroup.prototype.getRawValue = function () {\n        return this._reduceChildren({}, function (acc, control, name) {\n            acc[name] = control instanceof FormControl ? control.value : ((control)).getRawValue();\n            return acc;\n        });\n    };\n    /**\n     * \\@internal\n     * @param {?} name\n     * @return {?}\n     */\n    FormGroup.prototype._throwIfControlMissing = function (name) {\n        if (!Object.keys(this.controls).length) {\n            throw new Error(\"\\n        There are no form controls registered with this group yet.  If you're using ngModel,\\n        you may want to check next tick (e.g. use setTimeout).\\n      \");\n        }\n        if (!this.controls[name]) {\n            throw new Error(\"Cannot find form control with name: \" + name + \".\");\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?} cb\n     * @return {?}\n     */\n    FormGroup.prototype._forEachChild = function (cb) {\n        var _this = this;\n        Object.keys(this.controls).forEach(function (k) { return cb(_this.controls[k], k); });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroup.prototype._setUpControls = function () {\n        var _this = this;\n        this._forEachChild(function (control) {\n            control.setParent(_this);\n            control._registerOnCollectionChange(_this._onCollectionChange);\n        });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroup.prototype._updateValue = function () { this._value = this._reduceValue(); };\n    /**\n     * \\@internal\n     * @param {?} condition\n     * @return {?}\n     */\n    FormGroup.prototype._anyControls = function (condition) {\n        var _this = this;\n        var /** @type {?} */ res = false;\n        this._forEachChild(function (control, name) {\n            res = res || (_this.contains(name) && condition(control));\n        });\n        return res;\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroup.prototype._reduceValue = function () {\n        var _this = this;\n        return this._reduceChildren({}, function (acc, control, name) {\n            if (control.enabled || _this.disabled) {\n                acc[name] = control.value;\n            }\n            return acc;\n        });\n    };\n    /**\n     * \\@internal\n     * @param {?} initValue\n     * @param {?} fn\n     * @return {?}\n     */\n    FormGroup.prototype._reduceChildren = function (initValue, fn) {\n        var /** @type {?} */ res = initValue;\n        this._forEachChild(function (control, name) { res = fn(res, control, name); });\n        return res;\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroup.prototype._allControlsDisabled = function () {\n        for (var _i = 0, _a = Object.keys(this.controls); _i < _a.length; _i++) {\n            var controlName = _a[_i];\n            if (this.controls[controlName].enabled) {\n                return false;\n            }\n        }\n        return Object.keys(this.controls).length > 0 || this.disabled;\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    FormGroup.prototype._checkAllValuesPresent = function (value) {\n        this._forEachChild(function (control, name) {\n            if (value[name] === undefined) {\n                throw new Error(\"Must supply a value for form control with name: '\" + name + \"'.\");\n            }\n        });\n    };\n    return FormGroup;\n}(AbstractControl));\n/**\n * \\@whatItDoes Tracks the value and validity state of an array of {\\@link FormControl},\n * {\\@link FormGroup} or {\\@link FormArray} instances.\n *\n * A `FormArray` aggregates the values of each child {\\@link FormControl} into an array.\n * It calculates its status by reducing the statuses of its children. For example, if one of\n * the controls in a `FormArray` is invalid, the entire array becomes invalid.\n *\n * `FormArray` is one of the three fundamental building blocks used to define forms in Angular,\n * along with {\\@link FormControl} and {\\@link FormGroup}.\n *\n * \\@howToUse\n *\n * When instantiating a {\\@link FormArray}, pass in an array of child controls as the first\n * argument.\n *\n * ### Example\n *\n * ```\n * const arr = new FormArray([\n *   new FormControl('Nancy', Validators.minLength(2)),\n *   new FormControl('Drew'),\n * ]);\n *\n * console.log(arr.value);   // ['Nancy', 'Drew']\n * console.log(arr.status);  // 'VALID'\n * ```\n *\n * You can also include array-level validators as the second arg, or array-level async\n * validators as the third arg. These come in handy when you want to perform validation\n * that considers the value of more than one child control.\n *\n * ### Adding or removing controls\n *\n * To change the controls in the array, use the `push`, `insert`, or `removeAt` methods\n * in `FormArray` itself. These methods ensure the controls are properly tracked in the\n * form's hierarchy. Do not modify the array of `AbstractControl`s used to instantiate\n * the `FormArray` directly, as that will result in strange and unexpected behavior such\n * as broken change detection.\n *\n * * **npm package**: `\\@angular/forms`\n *\n * \\@stable\n */\nvar FormArray = (function (_super) {\n    tslib_1.__extends(FormArray, _super);\n    /**\n     * @param {?} controls\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     */\n    function FormArray(controls, validator, asyncValidator) {\n        var _this = _super.call(this, validator || null, asyncValidator || null) || this;\n        _this.controls = controls;\n        _this._initObservables();\n        _this._setUpControls();\n        _this.updateValueAndValidity({ onlySelf: true, emitEvent: false });\n        return _this;\n    }\n    /**\n     * Get the {\\@link AbstractControl} at the given `index` in the array.\n     * @param {?} index\n     * @return {?}\n     */\n    FormArray.prototype.at = function (index) { return this.controls[index]; };\n    /**\n     * Insert a new {\\@link AbstractControl} at the end of the array.\n     * @param {?} control\n     * @return {?}\n     */\n    FormArray.prototype.push = function (control) {\n        this.controls.push(control);\n        this._registerControl(control);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Insert a new {\\@link AbstractControl} at the given `index` in the array.\n     * @param {?} index\n     * @param {?} control\n     * @return {?}\n     */\n    FormArray.prototype.insert = function (index, control) {\n        this.controls.splice(index, 0, control);\n        this._registerControl(control);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Remove the control at the given `index` in the array.\n     * @param {?} index\n     * @return {?}\n     */\n    FormArray.prototype.removeAt = function (index) {\n        if (this.controls[index])\n            this.controls[index]._registerOnCollectionChange(function () { });\n        this.controls.splice(index, 1);\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    /**\n     * Replace an existing control.\n     * @param {?} index\n     * @param {?} control\n     * @return {?}\n     */\n    FormArray.prototype.setControl = function (index, control) {\n        if (this.controls[index])\n            this.controls[index]._registerOnCollectionChange(function () { });\n        this.controls.splice(index, 1);\n        if (control) {\n            this.controls.splice(index, 0, control);\n            this._registerControl(control);\n        }\n        this.updateValueAndValidity();\n        this._onCollectionChange();\n    };\n    Object.defineProperty(FormArray.prototype, \"length\", {\n        /**\n         * Length of the control array.\n         * @return {?}\n         */\n        get: function () { return this.controls.length; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     *  Sets the value of the {\\@link FormArray}. It accepts an array that matches\n     *  the structure of the control.\n     *\n     * This method performs strict checks, so it will throw an error if you try\n     * to set the value of a control that doesn't exist or if you exclude the\n     * value of a control.\n     *\n     *  ### Example\n     *\n     *  ```\n     *  const arr = new FormArray([\n     *     new FormControl(),\n     *     new FormControl()\n     *  ]);\n     *  console.log(arr.value);   // [null, null]\n     *\n     *  arr.setValue(['Nancy', 'Drew']);\n     *  console.log(arr.value);   // ['Nancy', 'Drew']\n     *  ```\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormArray.prototype.setValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        this._checkAllValuesPresent(value);\n        value.forEach(function (newValue, index) {\n            _this._throwIfControlMissing(index);\n            _this.at(index).setValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n        });\n        this.updateValueAndValidity(options);\n    };\n    /**\n     *  Patches the value of the {\\@link FormArray}. It accepts an array that matches the\n     *  structure of the control, and will do its best to match the values to the correct\n     *  controls in the group.\n     *\n     *  It accepts both super-sets and sub-sets of the array without throwing an error.\n     *\n     *  ### Example\n     *\n     *  ```\n     *  const arr = new FormArray([\n     *     new FormControl(),\n     *     new FormControl()\n     *  ]);\n     *  console.log(arr.value);   // [null, null]\n     *\n     *  arr.patchValue(['Nancy']);\n     *  console.log(arr.value);   // ['Nancy', null]\n     *  ```\n     * @param {?} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormArray.prototype.patchValue = function (value, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        value.forEach(function (newValue, index) {\n            if (_this.at(index)) {\n                _this.at(index).patchValue(newValue, { onlySelf: true, emitEvent: options.emitEvent });\n            }\n        });\n        this.updateValueAndValidity(options);\n    };\n    /**\n     * Resets the {\\@link FormArray}. This means by default:\n     *\n     * * The array and all descendants are marked `pristine`\n     * * The array and all descendants are marked `untouched`\n     * * The value of all descendants will be null or null maps\n     *\n     * You can also reset to a specific form state by passing in an array of states\n     * that matches the structure of the control. The state can be a standalone value\n     * or a form state object with both a value and a disabled status.\n     *\n     * ### Example\n     *\n     * ```ts\n     * this.arr.reset(['name', 'last name']);\n     *\n     * console.log(this.arr.value);  // ['name', 'last name']\n     * ```\n     *\n     * - OR -\n     *\n     * ```\n     * this.arr.reset([\n     *   {value: 'name', disabled: true},\n     *   'last'\n     * ]);\n     *\n     * console.log(this.arr.value);  // ['name', 'last name']\n     * console.log(this.arr.get(0).status);  // 'DISABLED'\n     * ```\n     * @param {?=} value\n     * @param {?=} options\n     * @return {?}\n     */\n    FormArray.prototype.reset = function (value, options) {\n        if (value === void 0) { value = []; }\n        if (options === void 0) { options = {}; }\n        this._forEachChild(function (control, index) {\n            control.reset(value[index], { onlySelf: true, emitEvent: options.emitEvent });\n        });\n        this.updateValueAndValidity(options);\n        this._updatePristine(options);\n        this._updateTouched(options);\n    };\n    /**\n     * The aggregate value of the array, including any disabled controls.\n     *\n     * If you'd like to include all values regardless of disabled status, use this method.\n     * Otherwise, the `value` property is the best way to get the value of the array.\n     * @return {?}\n     */\n    FormArray.prototype.getRawValue = function () {\n        return this.controls.map(function (control) {\n            return control instanceof FormControl ? control.value : ((control)).getRawValue();\n        });\n    };\n    /**\n     * \\@internal\n     * @param {?} index\n     * @return {?}\n     */\n    FormArray.prototype._throwIfControlMissing = function (index) {\n        if (!this.controls.length) {\n            throw new Error(\"\\n        There are no form controls registered with this array yet.  If you're using ngModel,\\n        you may want to check next tick (e.g. use setTimeout).\\n      \");\n        }\n        if (!this.at(index)) {\n            throw new Error(\"Cannot find form control at index \" + index);\n        }\n    };\n    /**\n     * \\@internal\n     * @param {?} cb\n     * @return {?}\n     */\n    FormArray.prototype._forEachChild = function (cb) {\n        this.controls.forEach(function (control, index) { cb(control, index); });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormArray.prototype._updateValue = function () {\n        var _this = this;\n        this._value = this.controls.filter(function (control) { return control.enabled || _this.disabled; })\n            .map(function (control) { return control.value; });\n    };\n    /**\n     * \\@internal\n     * @param {?} condition\n     * @return {?}\n     */\n    FormArray.prototype._anyControls = function (condition) {\n        return this.controls.some(function (control) { return control.enabled && condition(control); });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormArray.prototype._setUpControls = function () {\n        var _this = this;\n        this._forEachChild(function (control) { return _this._registerControl(control); });\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    FormArray.prototype._checkAllValuesPresent = function (value) {\n        this._forEachChild(function (control, i) {\n            if (value[i] === undefined) {\n                throw new Error(\"Must supply a value for form control at index: \" + i + \".\");\n            }\n        });\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormArray.prototype._allControlsDisabled = function () {\n        for (var _i = 0, _a = this.controls; _i < _a.length; _i++) {\n            var control = _a[_i];\n            if (control.enabled)\n                return false;\n        }\n        return this.controls.length > 0 || this.disabled;\n    };\n    /**\n     * @param {?} control\n     * @return {?}\n     */\n    FormArray.prototype._registerControl = function (control) {\n        control.setParent(this);\n        control._registerOnCollectionChange(this._onCollectionChange);\n    };\n    return FormArray;\n}(AbstractControl));\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 */\nvar formDirectiveProvider = {\n    provide: ControlContainer,\n    useExisting: forwardRef(function () { return NgForm; })\n};\nvar resolvedPromise = Promise.resolve(null);\n/**\n * \\@whatItDoes Creates a top-level {\\@link FormGroup} instance and binds it to a form\n * to track aggregate form value and validation status.\n *\n * \\@howToUse\n *\n * As soon as you import the `FormsModule`, this directive becomes active by default on\n * all `<form>` tags.  You don't need to add a special selector.\n *\n * You can export the directive into a local template variable using `ngForm` as the key\n * (ex: `#myForm=\"ngForm\"`). This is optional, but useful.  Many properties from the underlying\n * {\\@link FormGroup} instance are duplicated on the directive itself, so a reference to it\n * will give you access to the aggregate value and validity status of the form, as well as\n * user interaction properties like `dirty` and `touched`.\n *\n * To register child controls with the form, you'll want to use {\\@link NgModel} with a\n * `name` attribute.  You can also use {\\@link NgModelGroup} if you'd like to create\n * sub-groups within the form.\n *\n * You can listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event will be emitted with the original form\n * submission event.\n *\n * In template driven forms, all `<form>` tags are automatically tagged as `NgForm`.\n * If you want to import the `FormsModule` but skip its usage in some forms,\n * for example, to use native HTML5 validation, you can add `ngNoForm` and the `<form>`\n * tags won't create an `NgForm` directive. In reactive forms, using `ngNoForm` is\n * unnecessary because the `<form>` tags are inert. In that case, you would\n * refrain from using the `formGroup` directive.\n *\n * {\\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `FormsModule`\n *\n *  \\@stable\n */\nvar NgForm = (function (_super) {\n    tslib_1.__extends(NgForm, _super);\n    /**\n     * @param {?} validators\n     * @param {?} asyncValidators\n     */\n    function NgForm(validators, asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._submitted = false;\n        _this.ngSubmit = new EventEmitter();\n        _this.form =\n            new FormGroup({}, composeValidators(validators), composeAsyncValidators(asyncValidators));\n        return _this;\n    }\n    Object.defineProperty(NgForm.prototype, \"submitted\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._submitted; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.form; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return []; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForm.prototype, \"controls\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.form.controls; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.addControl = function (dir) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ container = _this._findContainer(dir.path);\n            dir._control = (container.registerControl(dir.name, dir.control));\n            setUpControl(dir.control, dir);\n            dir.control.updateValueAndValidity({ emitEvent: false });\n        });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.getControl = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.removeControl = function (dir) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ container = _this._findContainer(dir.path);\n            if (container) {\n                container.removeControl(dir.name);\n            }\n        });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.addFormGroup = function (dir) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ container = _this._findContainer(dir.path);\n            var /** @type {?} */ group = new FormGroup({});\n            setUpFormContainer(group, dir);\n            container.registerControl(dir.name, group);\n            group.updateValueAndValidity({ emitEvent: false });\n        });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.removeFormGroup = function (dir) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ container = _this._findContainer(dir.path);\n            if (container) {\n                container.removeControl(dir.name);\n            }\n        });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    NgForm.prototype.getFormGroup = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @param {?} value\n     * @return {?}\n     */\n    NgForm.prototype.updateModel = function (dir, value) {\n        var _this = this;\n        resolvedPromise.then(function () {\n            var /** @type {?} */ ctrl = (_this.form.get(/** @type {?} */ ((dir.path))));\n            ctrl.setValue(value);\n        });\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    NgForm.prototype.setValue = function (value) { this.control.setValue(value); };\n    /**\n     * @param {?} $event\n     * @return {?}\n     */\n    NgForm.prototype.onSubmit = function ($event) {\n        this._submitted = true;\n        this.ngSubmit.emit($event);\n        return false;\n    };\n    /**\n     * @return {?}\n     */\n    NgForm.prototype.onReset = function () { this.resetForm(); };\n    /**\n     * @param {?=} value\n     * @return {?}\n     */\n    NgForm.prototype.resetForm = function (value) {\n        if (value === void 0) { value = undefined; }\n        this.form.reset(value);\n        this._submitted = false;\n    };\n    /**\n     * \\@internal\n     * @param {?} path\n     * @return {?}\n     */\n    NgForm.prototype._findContainer = function (path) {\n        path.pop();\n        return path.length ? (this.form.get(path)) : this.form;\n    };\n    return NgForm;\n}(ControlContainer));\nNgForm.decorators = [\n    { type: Directive, args: [{\n                selector: 'form:not([ngNoForm]):not([formGroup]),ngForm,[ngForm]',\n                providers: [formDirectiveProvider],\n                host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n                outputs: ['ngSubmit'],\n                exportAs: 'ngForm'\n            },] },\n];\n/**\n * @nocollapse\n */\nNgForm.ctorParameters = function () { return [\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\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 */\nvar FormErrorExamples = {\n    formControlName: \"\\n    <div [formGroup]=\\\"myGroup\\\">\\n      <input formControlName=\\\"firstName\\\">\\n    </div>\\n\\n    In your class:\\n\\n    this.myGroup = new FormGroup({\\n       firstName: new FormControl()\\n    });\",\n    formGroupName: \"\\n    <div [formGroup]=\\\"myGroup\\\">\\n       <div formGroupName=\\\"person\\\">\\n          <input formControlName=\\\"firstName\\\">\\n       </div>\\n    </div>\\n\\n    In your class:\\n\\n    this.myGroup = new FormGroup({\\n       person: new FormGroup({ firstName: new FormControl() })\\n    });\",\n    formArrayName: \"\\n    <div [formGroup]=\\\"myGroup\\\">\\n      <div formArrayName=\\\"cities\\\">\\n        <div *ngFor=\\\"let city of cityArray.controls; index as i\\\">\\n          <input [formControlName]=\\\"i\\\">\\n        </div>\\n      </div>\\n    </div>\\n\\n    In your class:\\n\\n    this.cityArray = new FormArray([new FormControl('SF')]);\\n    this.myGroup = new FormGroup({\\n      cities: this.cityArray\\n    });\",\n    ngModelGroup: \"\\n    <form>\\n       <div ngModelGroup=\\\"person\\\">\\n          <input [(ngModel)]=\\\"person.name\\\" name=\\\"firstName\\\">\\n       </div>\\n    </form>\",\n    ngModelWithFormGroup: \"\\n    <div [formGroup]=\\\"myGroup\\\">\\n       <input formControlName=\\\"firstName\\\">\\n       <input [(ngModel)]=\\\"showMoreControls\\\" [ngModelOptions]=\\\"{standalone: true}\\\">\\n    </div>\\n  \"\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 */\nvar TemplateDrivenErrors = (function () {\n    function TemplateDrivenErrors() {\n    }\n    /**\n     * @return {?}\n     */\n    TemplateDrivenErrors.modelParentException = function () {\n        throw new Error(\"\\n      ngModel cannot be used to register form controls with a parent formGroup directive.  Try using\\n      formGroup's partner directive \\\"formControlName\\\" instead.  Example:\\n\\n      \" + FormErrorExamples.formControlName + \"\\n\\n      Or, if you'd like to avoid registering this form control, indicate that it's standalone in ngModelOptions:\\n\\n      Example:\\n\\n      \" + FormErrorExamples.ngModelWithFormGroup);\n    };\n    /**\n     * @return {?}\n     */\n    TemplateDrivenErrors.formGroupNameException = function () {\n        throw new Error(\"\\n      ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.\\n\\n      Option 1: Use formControlName instead of ngModel (reactive strategy):\\n\\n      \" + FormErrorExamples.formGroupName + \"\\n\\n      Option 2:  Update ngModel's parent be ngModelGroup (template-driven strategy):\\n\\n      \" + FormErrorExamples.ngModelGroup);\n    };\n    /**\n     * @return {?}\n     */\n    TemplateDrivenErrors.missingNameException = function () {\n        throw new Error(\"If ngModel is used within a form tag, either the name attribute must be set or the form\\n      control must be defined as 'standalone' in ngModelOptions.\\n\\n      Example 1: <input [(ngModel)]=\\\"person.firstName\\\" name=\\\"first\\\">\\n      Example 2: <input [(ngModel)]=\\\"person.firstName\\\" [ngModelOptions]=\\\"{standalone: true}\\\">\");\n    };\n    /**\n     * @return {?}\n     */\n    TemplateDrivenErrors.modelGroupParentException = function () {\n        throw new Error(\"\\n      ngModelGroup cannot be used with a parent formGroup directive.\\n\\n      Option 1: Use formGroupName instead of ngModelGroup (reactive strategy):\\n\\n      \" + FormErrorExamples.formGroupName + \"\\n\\n      Option 2:  Use a regular form tag instead of the formGroup directive (template-driven strategy):\\n\\n      \" + FormErrorExamples.ngModelGroup);\n    };\n    return TemplateDrivenErrors;\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 */\nvar modelGroupProvider = {\n    provide: ControlContainer,\n    useExisting: forwardRef(function () { return NgModelGroup; })\n};\n/**\n * \\@whatItDoes Creates and binds a {\\@link FormGroup} instance to a DOM element.\n *\n * \\@howToUse\n *\n * This directive can only be used as a child of {\\@link NgForm} (or in other words,\n * within `<form>` tags).\n *\n * Use this directive if you'd like to create a sub-group within a form. This can\n * come in handy if you want to validate a sub-group of your form separately from\n * the rest of your form, or if some values in your domain model make more sense to\n * consume together in a nested object.\n *\n * Pass in the name you'd like this sub-group to have and it will become the key\n * for the sub-group in the form's full value. You can also export the directive into\n * a local template variable using `ngModelGroup` (ex: `#myGroup=\"ngModelGroup\"`).\n *\n * {\\@example forms/ts/ngModelGroup/ng_model_group_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `FormsModule`\n *\n * \\@stable\n */\nvar NgModelGroup = (function (_super) {\n    tslib_1.__extends(NgModelGroup, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     */\n    function NgModelGroup(parent, validators, asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._parent = parent;\n        _this._validators = validators;\n        _this._asyncValidators = asyncValidators;\n        return _this;\n    }\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    NgModelGroup.prototype._checkParentType = function () {\n        if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n            TemplateDrivenErrors.modelGroupParentException();\n        }\n    };\n    return NgModelGroup;\n}(AbstractFormGroupDirective));\nNgModelGroup.decorators = [\n    { type: Directive, args: [{ selector: '[ngModelGroup]', providers: [modelGroupProvider], exportAs: 'ngModelGroup' },] },\n];\n/**\n * @nocollapse\n */\nNgModelGroup.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: Host }, { type: SkipSelf },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n]; };\nNgModelGroup.propDecorators = {\n    'name': [{ type: Input, args: ['ngModelGroup',] },],\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 */\nvar formControlBinding = {\n    provide: NgControl,\n    useExisting: forwardRef(function () { return NgModel; })\n};\n/**\n * `ngModel` forces an additional change detection run when its inputs change:\n * E.g.:\n * ```\n * <div>{{myModel.valid}}</div>\n * <input [(ngModel)]=\"myValue\" #myModel=\"ngModel\">\n * ```\n * I.e. `ngModel` can export itself on the element and then be used in the template.\n * Normally, this would result in expressions before the `input` that use the exported directive\n * to have and old value as they have been\n * dirty checked before. As this is a very common case for `ngModel`, we added this second change\n * detection run.\n *\n * Notes:\n * - this is just one extra run no matter how many `ngModel` have been changed.\n * - this is a general problem when using `exportAs` for directives!\n */\nvar resolvedPromise$1 = Promise.resolve(null);\n/**\n * \\@whatItDoes Creates a {\\@link FormControl} instance from a domain model and binds it\n * to a form control element.\n *\n * The {\\@link FormControl} instance will track the value, user interaction, and\n * validation status of the control and keep the view synced with the model. If used\n * within a parent form, the directive will also register itself with the form as a child\n * control.\n *\n * \\@howToUse\n *\n * This directive can be used by itself or as part of a larger form. All you need is the\n * `ngModel` selector to activate it.\n *\n * It accepts a domain model as an optional {\\@link Input}. If you have a one-way binding\n * to `ngModel` with `[]` syntax, changing the value of the domain model in the component\n * class will set the value in the view. If you have a two-way binding with `[()]` syntax\n * (also known as 'banana-box syntax'), the value in the UI will always be synced back to\n * the domain model in your class as well.\n *\n * If you wish to inspect the properties of the associated {\\@link FormControl} (like\n * validity state), you can also export the directive into a local template variable using\n * `ngModel` as the key (ex: `#myVar=\"ngModel\"`). You can then access the control using the\n * directive's `control` property, but most properties you'll need (like `valid` and `dirty`)\n * will fall through to the control anyway, so you can access them directly. You can see a\n * full list of properties directly available in {\\@link AbstractControlDirective}.\n *\n * The following is an example of a simple standalone control using `ngModel`:\n *\n * {\\@example forms/ts/simpleNgModel/simple_ng_model_example.ts region='Component'}\n *\n * When using the `ngModel` within `<form>` tags, you'll also need to supply a `name` attribute\n * so that the control can be registered with the parent form under that name.\n *\n * It's worth noting that in the context of a parent form, you often can skip one-way or\n * two-way binding because the parent form will sync the value for you. You can access\n * its properties by exporting it into a local template variable using `ngForm` (ex:\n * `#f=\"ngForm\"`). Then you can pass it where it needs to go on submit.\n *\n * If you do need to populate initial values into your form, using a one-way binding for\n * `ngModel` tends to be sufficient as long as you use the exported form's value rather\n * than the domain model's value on submit.\n *\n * Take a look at an example of using `ngModel` within a form:\n *\n * {\\@example forms/ts/simpleForm/simple_form_example.ts region='Component'}\n *\n * To see `ngModel` examples with different form control types, see:\n *\n * * Radio buttons: {\\@link RadioControlValueAccessor}\n * * Selects: {\\@link SelectControlValueAccessor}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: `FormsModule`\n *\n *  \\@stable\n */\nvar NgModel = (function (_super) {\n    tslib_1.__extends(NgModel, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     * @param {?} valueAccessors\n     */\n    function NgModel(parent, validators, asyncValidators, valueAccessors) {\n        var _this = _super.call(this) || this;\n        /**\n         * \\@internal\n         */\n        _this._control = new FormControl();\n        /**\n         * \\@internal\n         */\n        _this._registered = false;\n        _this.update = new EventEmitter();\n        _this._parent = parent;\n        _this._rawValidators = validators || [];\n        _this._rawAsyncValidators = asyncValidators || [];\n        _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n        return _this;\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgModel.prototype.ngOnChanges = function (changes) {\n        this._checkForErrors();\n        if (!this._registered)\n            this._setUpControl();\n        if ('isDisabled' in changes) {\n            this._updateDisabled(changes);\n        }\n        if (isPropertyUpdated(changes, this.viewModel)) {\n            this._updateValue(this.model);\n            this.viewModel = this.model;\n        }\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype.ngOnDestroy = function () { this.formDirective && this.formDirective.removeControl(this); };\n    Object.defineProperty(NgModel.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._control; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return this._parent ? controlPath(this.name, this._parent) : [this.name];\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._parent ? this._parent.formDirective : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._rawValidators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgModel.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return composeAsyncValidators(this._rawAsyncValidators);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} newValue\n     * @return {?}\n     */\n    NgModel.prototype.viewToModelUpdate = function (newValue) {\n        this.viewModel = newValue;\n        this.update.emit(newValue);\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._setUpControl = function () {\n        this._isStandalone() ? this._setUpStandalone() :\n            this.formDirective.addControl(this);\n        this._registered = true;\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._isStandalone = function () {\n        return !this._parent || !!(this.options && this.options.standalone);\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._setUpStandalone = function () {\n        setUpControl(this._control, this);\n        this._control.updateValueAndValidity({ emitEvent: false });\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._checkForErrors = function () {\n        if (!this._isStandalone()) {\n            this._checkParentType();\n        }\n        this._checkName();\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._checkParentType = function () {\n        if (!(this._parent instanceof NgModelGroup) &&\n            this._parent instanceof AbstractFormGroupDirective) {\n            TemplateDrivenErrors.formGroupNameException();\n        }\n        else if (!(this._parent instanceof NgModelGroup) && !(this._parent instanceof NgForm)) {\n            TemplateDrivenErrors.modelParentException();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    NgModel.prototype._checkName = function () {\n        if (this.options && this.options.name)\n            this.name = this.options.name;\n        if (!this._isStandalone() && !this.name) {\n            TemplateDrivenErrors.missingNameException();\n        }\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    NgModel.prototype._updateValue = function (value) {\n        var _this = this;\n        resolvedPromise$1.then(function () { _this.control.setValue(value, { emitViewToModelChange: false }); });\n    };\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgModel.prototype._updateDisabled = function (changes) {\n        var _this = this;\n        var /** @type {?} */ disabledValue = changes['isDisabled'].currentValue;\n        var /** @type {?} */ isDisabled = disabledValue === '' || (disabledValue && disabledValue !== 'false');\n        resolvedPromise$1.then(function () {\n            if (isDisabled && !_this.control.disabled) {\n                _this.control.disable();\n            }\n            else if (!isDisabled && _this.control.disabled) {\n                _this.control.enable();\n            }\n        });\n    };\n    return NgModel;\n}(NgControl));\nNgModel.decorators = [\n    { type: Directive, args: [{\n                selector: '[ngModel]:not([formControlName]):not([formControl])',\n                providers: [formControlBinding],\n                exportAs: 'ngModel'\n            },] },\n];\n/**\n * @nocollapse\n */\nNgModel.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: Optional }, { type: Host },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] },] },\n]; };\nNgModel.propDecorators = {\n    'name': [{ type: Input },],\n    'isDisabled': [{ type: Input, args: ['disabled',] },],\n    'model': [{ type: Input, args: ['ngModel',] },],\n    'options': [{ type: Input, args: ['ngModelOptions',] },],\n    'update': [{ type: Output, args: ['ngModelChange',] },],\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 */\nvar ReactiveErrors = (function () {\n    function ReactiveErrors() {\n    }\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.controlParentException = function () {\n        throw new Error(\"formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup\\n       directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n      Example:\\n\\n      \" + FormErrorExamples.formControlName);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.ngModelGroupException = function () {\n        throw new Error(\"formControlName cannot be used with an ngModelGroup parent. It is only compatible with parents\\n       that also have a \\\"form\\\" prefix: formGroupName, formArrayName, or formGroup.\\n\\n       Option 1:  Update the parent to be formGroupName (reactive form strategy)\\n\\n        \" + FormErrorExamples.formGroupName + \"\\n\\n        Option 2: Use ngModel instead of formControlName (template-driven strategy)\\n\\n        \" + FormErrorExamples.ngModelGroup);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.missingFormException = function () {\n        throw new Error(\"formGroup expects a FormGroup instance. Please pass one in.\\n\\n       Example:\\n\\n       \" + FormErrorExamples.formControlName);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.groupParentException = function () {\n        throw new Error(\"formGroupName must be used with a parent formGroup directive.  You'll want to add a formGroup\\n      directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n      Example:\\n\\n      \" + FormErrorExamples.formGroupName);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.arrayParentException = function () {\n        throw new Error(\"formArrayName must be used with a parent formGroup directive.  You'll want to add a formGroup\\n       directive and pass it an existing FormGroup instance (you can create one in your class).\\n\\n        Example:\\n\\n        \" + FormErrorExamples.formArrayName);\n    };\n    /**\n     * @return {?}\n     */\n    ReactiveErrors.disabledAttrWarning = function () {\n        console.warn(\"\\n      It looks like you're using the disabled attribute with a reactive form directive. If you set disabled to true\\n      when you set up this control in your component class, the disabled attribute will actually be set in the DOM for\\n      you. We recommend using this approach to avoid 'changed after checked' errors.\\n       \\n      Example: \\n      form = new FormGroup({\\n        first: new FormControl({value: 'Nancy', disabled: true}, Validators.required),\\n        last: new FormControl('Drew', Validators.required)\\n      });\\n    \");\n    };\n    return ReactiveErrors;\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 */\nvar formControlBinding$1 = {\n    provide: NgControl,\n    useExisting: forwardRef(function () { return FormControlDirective; })\n};\n/**\n * \\@whatItDoes Syncs a standalone {\\@link FormControl} instance to a form control element.\n *\n * In other words, this directive ensures that any values written to the {\\@link FormControl}\n * instance programmatically will be written to the DOM element (model -> view). Conversely,\n * any values written to the DOM element through user input will be reflected in the\n * {\\@link FormControl} instance (view -> model).\n *\n * \\@howToUse\n *\n * Use this directive if you'd like to create and manage a {\\@link FormControl} instance directly.\n * Simply create a {\\@link FormControl}, save it to your component class, and pass it into the\n * {\\@link FormControlDirective}.\n *\n * This directive is designed to be used as a standalone control.  Unlike {\\@link FormControlName},\n * it does not require that your {\\@link FormControl} instance be part of any parent\n * {\\@link FormGroup}, and it won't be registered to any {\\@link FormGroupDirective} that\n * exists above it.\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormControl} instance. See a full list of available properties in\n * {\\@link AbstractControl}.\n *\n * **Set the value**: You can pass in an initial value when instantiating the {\\@link FormControl},\n * or you can set it programmatically later using {\\@link AbstractControl#setValue setValue} or\n * {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the control, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event.  You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * {\\@example forms/ts/simpleFormControl/simple_form_control_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n *  \\@stable\n */\nvar FormControlDirective = (function (_super) {\n    tslib_1.__extends(FormControlDirective, _super);\n    /**\n     * @param {?} validators\n     * @param {?} asyncValidators\n     * @param {?} valueAccessors\n     */\n    function FormControlDirective(validators, asyncValidators, valueAccessors) {\n        var _this = _super.call(this) || this;\n        _this.update = new EventEmitter();\n        _this._rawValidators = validators || [];\n        _this._rawAsyncValidators = asyncValidators || [];\n        _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n        return _this;\n    }\n    Object.defineProperty(FormControlDirective.prototype, \"isDisabled\", {\n        /**\n         * @param {?} isDisabled\n         * @return {?}\n         */\n        set: function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    FormControlDirective.prototype.ngOnChanges = function (changes) {\n        if (this._isControlChanged(changes)) {\n            setUpControl(this.form, this);\n            if (this.control.disabled && ((this.valueAccessor)).setDisabledState) {\n                ((((this.valueAccessor)).setDisabledState))(true);\n            }\n            this.form.updateValueAndValidity({ emitEvent: false });\n        }\n        if (isPropertyUpdated(changes, this.viewModel)) {\n            this.form.setValue(this.model);\n            this.viewModel = this.model;\n        }\n    };\n    Object.defineProperty(FormControlDirective.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return []; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlDirective.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._rawValidators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlDirective.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return composeAsyncValidators(this._rawAsyncValidators);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlDirective.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.form; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} newValue\n     * @return {?}\n     */\n    FormControlDirective.prototype.viewToModelUpdate = function (newValue) {\n        this.viewModel = newValue;\n        this.update.emit(newValue);\n    };\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    FormControlDirective.prototype._isControlChanged = function (changes) {\n        return changes.hasOwnProperty('form');\n    };\n    return FormControlDirective;\n}(NgControl));\nFormControlDirective.decorators = [\n    { type: Directive, args: [{ selector: '[formControl]', providers: [formControlBinding$1], exportAs: 'ngForm' },] },\n];\n/**\n * @nocollapse\n */\nFormControlDirective.ctorParameters = function () { return [\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] },] },\n]; };\nFormControlDirective.propDecorators = {\n    'form': [{ type: Input, args: ['formControl',] },],\n    'model': [{ type: Input, args: ['ngModel',] },],\n    'update': [{ type: Output, args: ['ngModelChange',] },],\n    'isDisabled': [{ type: Input, args: ['disabled',] },],\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 */\nvar formDirectiveProvider$1 = {\n    provide: ControlContainer,\n    useExisting: forwardRef(function () { return FormGroupDirective; })\n};\n/**\n * \\@whatItDoes Binds an existing {\\@link FormGroup} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive accepts an existing {\\@link FormGroup} instance. It will then use this\n * {\\@link FormGroup} instance to match any child {\\@link FormControl}, {\\@link FormGroup},\n * and {\\@link FormArray} instances to child {\\@link FormControlName}, {\\@link FormGroupName},\n * and {\\@link FormArrayName} directives.\n *\n * **Set value**: You can set the form's initial value when instantiating the\n * {\\@link FormGroup}, or you can set it programmatically later using the {\\@link FormGroup}'s\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}\n * methods.\n *\n * **Listen to value**: If you want to listen to changes in the value of the form, you can subscribe\n * to the {\\@link FormGroup}'s {\\@link AbstractControl#valueChanges valueChanges} event.  You can also\n * listen to its {\\@link AbstractControl#statusChanges statusChanges} event to be notified when the\n * validation status is re-calculated.\n *\n * Furthermore, you can listen to the directive's `ngSubmit` event to be notified when the user has\n * triggered a form submission. The `ngSubmit` event will be emitted with the original form\n * submission event.\n *\n * ### Example\n *\n * In this example, we create form controls for first name and last name.\n *\n * {\\@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: {\\@link ReactiveFormsModule}\n *\n *  \\@stable\n */\nvar FormGroupDirective = (function (_super) {\n    tslib_1.__extends(FormGroupDirective, _super);\n    /**\n     * @param {?} _validators\n     * @param {?} _asyncValidators\n     */\n    function FormGroupDirective(_validators, _asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._validators = _validators;\n        _this._asyncValidators = _asyncValidators;\n        _this._submitted = false;\n        _this.directives = [];\n        _this.form = ((null));\n        _this.ngSubmit = new EventEmitter();\n        return _this;\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    FormGroupDirective.prototype.ngOnChanges = function (changes) {\n        this._checkFormPresent();\n        if (changes.hasOwnProperty('form')) {\n            this._updateValidators();\n            this._updateDomValue();\n            this._updateRegistrations();\n        }\n    };\n    Object.defineProperty(FormGroupDirective.prototype, \"submitted\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._submitted; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormGroupDirective.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormGroupDirective.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.form; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormGroupDirective.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return []; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.addControl = function (dir) {\n        var /** @type {?} */ ctrl = this.form.get(dir.path);\n        setUpControl(ctrl, dir);\n        ctrl.updateValueAndValidity({ emitEvent: false });\n        this.directives.push(dir);\n        return ctrl;\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.getControl = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.removeControl = function (dir) { remove(this.directives, dir); };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.addFormGroup = function (dir) {\n        var /** @type {?} */ ctrl = this.form.get(dir.path);\n        setUpFormContainer(ctrl, dir);\n        ctrl.updateValueAndValidity({ emitEvent: false });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.removeFormGroup = function (dir) { };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.getFormGroup = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.addFormArray = function (dir) {\n        var /** @type {?} */ ctrl = this.form.get(dir.path);\n        setUpFormContainer(ctrl, dir);\n        ctrl.updateValueAndValidity({ emitEvent: false });\n    };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.removeFormArray = function (dir) { };\n    /**\n     * @param {?} dir\n     * @return {?}\n     */\n    FormGroupDirective.prototype.getFormArray = function (dir) { return (this.form.get(dir.path)); };\n    /**\n     * @param {?} dir\n     * @param {?} value\n     * @return {?}\n     */\n    FormGroupDirective.prototype.updateModel = function (dir, value) {\n        var /** @type {?} */ ctrl = (this.form.get(dir.path));\n        ctrl.setValue(value);\n    };\n    /**\n     * @param {?} $event\n     * @return {?}\n     */\n    FormGroupDirective.prototype.onSubmit = function ($event) {\n        this._submitted = true;\n        this.ngSubmit.emit($event);\n        return false;\n    };\n    /**\n     * @return {?}\n     */\n    FormGroupDirective.prototype.onReset = function () { this.resetForm(); };\n    /**\n     * @param {?=} value\n     * @return {?}\n     */\n    FormGroupDirective.prototype.resetForm = function (value) {\n        if (value === void 0) { value = undefined; }\n        this.form.reset(value);\n        this._submitted = false;\n    };\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroupDirective.prototype._updateDomValue = function () {\n        var _this = this;\n        this.directives.forEach(function (dir) {\n            var /** @type {?} */ newCtrl = _this.form.get(dir.path);\n            if (dir._control !== newCtrl) {\n                cleanUpControl(dir._control, dir);\n                if (newCtrl)\n                    setUpControl(newCtrl, dir);\n                dir._control = newCtrl;\n            }\n        });\n        this.form._updateTreeValidity({ emitEvent: false });\n    };\n    /**\n     * @return {?}\n     */\n    FormGroupDirective.prototype._updateRegistrations = function () {\n        var _this = this;\n        this.form._registerOnCollectionChange(function () { return _this._updateDomValue(); });\n        if (this._oldForm)\n            this._oldForm._registerOnCollectionChange(function () { });\n        this._oldForm = this.form;\n    };\n    /**\n     * @return {?}\n     */\n    FormGroupDirective.prototype._updateValidators = function () {\n        var /** @type {?} */ sync = composeValidators(this._validators);\n        this.form.validator = Validators.compose([/** @type {?} */ ((this.form.validator)), /** @type {?} */ ((sync))]);\n        var /** @type {?} */ async = composeAsyncValidators(this._asyncValidators);\n        this.form.asyncValidator = Validators.composeAsync([/** @type {?} */ ((this.form.asyncValidator)), /** @type {?} */ ((async))]);\n    };\n    /**\n     * @return {?}\n     */\n    FormGroupDirective.prototype._checkFormPresent = function () {\n        if (!this.form) {\n            ReactiveErrors.missingFormException();\n        }\n    };\n    return FormGroupDirective;\n}(ControlContainer));\nFormGroupDirective.decorators = [\n    { type: Directive, args: [{\n                selector: '[formGroup]',\n                providers: [formDirectiveProvider$1],\n                host: { '(submit)': 'onSubmit($event)', '(reset)': 'onReset()' },\n                exportAs: 'ngForm'\n            },] },\n];\n/**\n * @nocollapse\n */\nFormGroupDirective.ctorParameters = function () { return [\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n]; };\nFormGroupDirective.propDecorators = {\n    'form': [{ type: Input, args: ['formGroup',] },],\n    'ngSubmit': [{ type: Output },],\n};\n/**\n * @template T\n * @param {?} list\n * @param {?} el\n * @return {?}\n */\nfunction remove(list, el) {\n    var /** @type {?} */ index = list.indexOf(el);\n    if (index > -1) {\n        list.splice(index, 1);\n    }\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 */\nvar formGroupNameProvider = {\n    provide: ControlContainer,\n    useExisting: forwardRef(function () { return FormGroupName; })\n};\n/**\n * \\@whatItDoes Syncs a nested {\\@link FormGroup} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive can only be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested {\\@link FormGroup} you want to link, and\n * will look for a {\\@link FormGroup} registered with that name in the parent\n * {\\@link FormGroup} instance you passed into {\\@link FormGroupDirective}.\n *\n * Nested form groups can come in handy when you want to validate a sub-group of a\n * form separately from the rest or when you'd like to group the values of certain\n * controls into their own nested object.\n *\n * **Access the group**: You can access the associated {\\@link FormGroup} using the\n * {\\@link AbstractControl#get} method. Ex: `this.form.get('name')`.\n *\n * You can also access individual controls within the group using dot syntax.\n * Ex: `this.form.get('name.first')`\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormGroup}. See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set the value**: You can set an initial value for each child control when instantiating\n * the {\\@link FormGroup}, or you can set it programmatically later using\n * {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the group, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event.  You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * {\\@example forms/ts/nestedFormGroup/nested_form_group_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nvar FormGroupName = (function (_super) {\n    tslib_1.__extends(FormGroupName, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     */\n    function FormGroupName(parent, validators, asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._parent = parent;\n        _this._validators = validators;\n        _this._asyncValidators = asyncValidators;\n        return _this;\n    }\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    FormGroupName.prototype._checkParentType = function () {\n        if (_hasInvalidParent(this._parent)) {\n            ReactiveErrors.groupParentException();\n        }\n    };\n    return FormGroupName;\n}(AbstractFormGroupDirective));\nFormGroupName.decorators = [\n    { type: Directive, args: [{ selector: '[formGroupName]', providers: [formGroupNameProvider] },] },\n];\n/**\n * @nocollapse\n */\nFormGroupName.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n]; };\nFormGroupName.propDecorators = {\n    'name': [{ type: Input, args: ['formGroupName',] },],\n};\nvar formArrayNameProvider = {\n    provide: ControlContainer,\n    useExisting: forwardRef(function () { return FormArrayName; })\n};\n/**\n * \\@whatItDoes Syncs a nested {\\@link FormArray} to a DOM element.\n *\n * \\@howToUse\n *\n * This directive is designed to be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the nested {\\@link FormArray} you want to link, and\n * will look for a {\\@link FormArray} registered with that name in the parent\n * {\\@link FormGroup} instance you passed into {\\@link FormGroupDirective}.\n *\n * Nested form arrays can come in handy when you have a group of form controls but\n * you're not sure how many there will be. Form arrays allow you to create new\n * form controls dynamically.\n *\n * **Access the array**: You can access the associated {\\@link FormArray} using the\n * {\\@link AbstractControl#get} method on the parent {\\@link FormGroup}.\n * Ex: `this.form.get('cities')`.\n *\n * **Get the value**: the `value` property is always synced and available on the\n * {\\@link FormArray}. See a full list of available properties in {\\@link AbstractControl}.\n *\n * **Set the value**: You can set an initial value for each child control when instantiating\n * the {\\@link FormArray}, or you can set the value programmatically later using the\n * {\\@link FormArray}'s {\\@link AbstractControl#setValue} or {\\@link AbstractControl#patchValue}\n * methods.\n *\n * **Listen to value**: If you want to listen to changes in the value of the array, you can\n * subscribe to the {\\@link FormArray}'s {\\@link AbstractControl#valueChanges} event.  You can also\n * listen to its {\\@link AbstractControl#statusChanges} event to be notified when the validation\n * status is re-calculated.\n *\n * **Add new controls**: You can add new controls to the {\\@link FormArray} dynamically by\n * calling its {\\@link FormArray#push} method.\n *  Ex: `this.form.get('cities').push(new FormControl());`\n *\n * ### Example\n *\n * {\\@example forms/ts/nestedFormArray/nested_form_array_example.ts region='Component'}\n *\n * * **npm package**: `\\@angular/forms`\n *\n * * **NgModule**: `ReactiveFormsModule`\n *\n * \\@stable\n */\nvar FormArrayName = (function (_super) {\n    tslib_1.__extends(FormArrayName, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     */\n    function FormArrayName(parent, validators, asyncValidators) {\n        var _this = _super.call(this) || this;\n        _this._parent = parent;\n        _this._validators = validators;\n        _this._asyncValidators = asyncValidators;\n        return _this;\n    }\n    /**\n     * @return {?}\n     */\n    FormArrayName.prototype.ngOnInit = function () {\n        this._checkParentType(); /** @type {?} */\n        ((this.formDirective)).addFormArray(this);\n    };\n    /**\n     * @return {?}\n     */\n    FormArrayName.prototype.ngOnDestroy = function () {\n        if (this.formDirective) {\n            this.formDirective.removeFormArray(this);\n        }\n    };\n    Object.defineProperty(FormArrayName.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return ((this.formDirective)).getFormArray(this); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormArrayName.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return this._parent ? (this._parent.formDirective) : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormArrayName.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return controlPath(this.name, this._parent); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormArrayName.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._validators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormArrayName.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return composeAsyncValidators(this._asyncValidators);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    FormArrayName.prototype._checkParentType = function () {\n        if (_hasInvalidParent(this._parent)) {\n            ReactiveErrors.arrayParentException();\n        }\n    };\n    return FormArrayName;\n}(ControlContainer));\nFormArrayName.decorators = [\n    { type: Directive, args: [{ selector: '[formArrayName]', providers: [formArrayNameProvider] },] },\n];\n/**\n * @nocollapse\n */\nFormArrayName.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n]; };\nFormArrayName.propDecorators = {\n    'name': [{ type: Input, args: ['formArrayName',] },],\n};\n/**\n * @param {?} parent\n * @return {?}\n */\nfunction _hasInvalidParent(parent) {\n    return !(parent instanceof FormGroupName) && !(parent instanceof FormGroupDirective) &&\n        !(parent instanceof FormArrayName);\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 */\nvar controlNameBinding = {\n    provide: NgControl,\n    useExisting: forwardRef(function () { return FormControlName; })\n};\n/**\n * \\@whatItDoes Syncs a {\\@link FormControl} in an existing {\\@link FormGroup} to a form control\n * element by name.\n *\n * In other words, this directive ensures that any values written to the {\\@link FormControl}\n * instance programmatically will be written to the DOM element (model -> view). Conversely,\n * any values written to the DOM element through user input will be reflected in the\n * {\\@link FormControl} instance (view -> model).\n *\n * \\@howToUse\n *\n * This directive is designed to be used with a parent {\\@link FormGroupDirective} (selector:\n * `[formGroup]`).\n *\n * It accepts the string name of the {\\@link FormControl} instance you want to\n * link, and will look for a {\\@link FormControl} registered with that name in the\n * closest {\\@link FormGroup} or {\\@link FormArray} above it.\n *\n * **Access the control**: You can access the {\\@link FormControl} associated with\n * this directive by using the {\\@link AbstractControl#get get} method.\n * Ex: `this.form.get('first');`\n *\n * **Get value**: the `value` property is always synced and available on the {\\@link FormControl}.\n * See a full list of available properties in {\\@link AbstractControl}.\n *\n *  **Set value**: You can set an initial value for the control when instantiating the\n *  {\\@link FormControl}, or you can set it programmatically later using\n *  {\\@link AbstractControl#setValue setValue} or {\\@link AbstractControl#patchValue patchValue}.\n *\n * **Listen to value**: If you want to listen to changes in the value of the control, you can\n * subscribe to the {\\@link AbstractControl#valueChanges valueChanges} event.  You can also listen to\n * {\\@link AbstractControl#statusChanges statusChanges} to be notified when the validation status is\n * re-calculated.\n *\n * ### Example\n *\n * In this example, we create form controls for first name and last name.\n *\n * {\\@example forms/ts/simpleFormGroup/simple_form_group_example.ts region='Component'}\n *\n * To see `formControlName` examples with different form control types, see:\n *\n * * Radio buttons: {\\@link RadioControlValueAccessor}\n * * Selects: {\\@link SelectControlValueAccessor}\n *\n * **npm package**: `\\@angular/forms`\n *\n * **NgModule**: {\\@link ReactiveFormsModule}\n *\n *  \\@stable\n */\nvar FormControlName = (function (_super) {\n    tslib_1.__extends(FormControlName, _super);\n    /**\n     * @param {?} parent\n     * @param {?} validators\n     * @param {?} asyncValidators\n     * @param {?} valueAccessors\n     */\n    function FormControlName(parent, validators, asyncValidators, valueAccessors) {\n        var _this = _super.call(this) || this;\n        _this._added = false;\n        _this.update = new EventEmitter();\n        _this._parent = parent;\n        _this._rawValidators = validators || [];\n        _this._rawAsyncValidators = asyncValidators || [];\n        _this.valueAccessor = selectValueAccessor(_this, valueAccessors);\n        return _this;\n    }\n    Object.defineProperty(FormControlName.prototype, \"isDisabled\", {\n        /**\n         * @param {?} isDisabled\n         * @return {?}\n         */\n        set: function (isDisabled) { ReactiveErrors.disabledAttrWarning(); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    FormControlName.prototype.ngOnChanges = function (changes) {\n        if (!this._added)\n            this._setUpControl();\n        if (isPropertyUpdated(changes, this.viewModel)) {\n            this.viewModel = this.model;\n            this.formDirective.updateModel(this, this.model);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    FormControlName.prototype.ngOnDestroy = function () {\n        if (this.formDirective) {\n            this.formDirective.removeControl(this);\n        }\n    };\n    /**\n     * @param {?} newValue\n     * @return {?}\n     */\n    FormControlName.prototype.viewToModelUpdate = function (newValue) {\n        this.viewModel = newValue;\n        this.update.emit(newValue);\n    };\n    Object.defineProperty(FormControlName.prototype, \"path\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return controlPath(this.name, /** @type {?} */ ((this._parent))); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlName.prototype, \"formDirective\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._parent ? this._parent.formDirective : null; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlName.prototype, \"validator\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return composeValidators(this._rawValidators); },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlName.prototype, \"asyncValidator\", {\n        /**\n         * @return {?}\n         */\n        get: function () {\n            return ((composeAsyncValidators(this._rawAsyncValidators)));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(FormControlName.prototype, \"control\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._control; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    FormControlName.prototype._checkParentType = function () {\n        if (!(this._parent instanceof FormGroupName) &&\n            this._parent instanceof AbstractFormGroupDirective) {\n            ReactiveErrors.ngModelGroupException();\n        }\n        else if (!(this._parent instanceof FormGroupName) && !(this._parent instanceof FormGroupDirective) &&\n            !(this._parent instanceof FormArrayName)) {\n            ReactiveErrors.controlParentException();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    FormControlName.prototype._setUpControl = function () {\n        this._checkParentType();\n        this._control = this.formDirective.addControl(this);\n        if (this.control.disabled && ((this.valueAccessor)).setDisabledState) {\n            ((((this.valueAccessor)).setDisabledState))(true);\n        }\n        this._added = true;\n    };\n    return FormControlName;\n}(NgControl));\nFormControlName.decorators = [\n    { type: Directive, args: [{ selector: '[formControlName]', providers: [controlNameBinding] },] },\n];\n/**\n * @nocollapse\n */\nFormControlName.ctorParameters = function () { return [\n    { type: ControlContainer, decorators: [{ type: Optional }, { type: Host }, { type: SkipSelf },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_ASYNC_VALIDATORS,] },] },\n    { type: Array, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] },] },\n]; };\nFormControlName.propDecorators = {\n    'name': [{ type: Input, args: ['formControlName',] },],\n    'model': [{ type: Input, args: ['ngModel',] },],\n    'update': [{ type: Output, args: ['ngModelChange',] },],\n    'isDisabled': [{ type: Input, args: ['disabled',] },],\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 */\nvar REQUIRED_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(function () { return RequiredValidator; }),\n    multi: true\n};\nvar CHECKBOX_REQUIRED_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(function () { return CheckboxRequiredValidator; }),\n    multi: true\n};\n/**\n * A Directive that adds the `required` validator to any controls marked with the\n * `required` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input name=\"fullName\" ngModel required>\n * ```\n *\n * \\@stable\n */\nvar RequiredValidator = (function () {\n    function RequiredValidator() {\n    }\n    Object.defineProperty(RequiredValidator.prototype, \"required\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._required; },\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            this._required = value != null && value !== false && \"\" + value !== 'false';\n            if (this._onChange)\n                this._onChange();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    RequiredValidator.prototype.validate = function (c) {\n        return this.required ? Validators.required(c) : null;\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RequiredValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    return RequiredValidator;\n}());\nRequiredValidator.decorators = [\n    { type: Directive, args: [{\n                selector: ':not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]',\n                providers: [REQUIRED_VALIDATOR],\n                host: { '[attr.required]': 'required ? \"\" : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nRequiredValidator.ctorParameters = function () { return []; };\nRequiredValidator.propDecorators = {\n    'required': [{ type: Input },],\n};\n/**\n * A Directive that adds the `required` validator to checkbox controls marked with the\n * `required` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input type=\"checkbox\" name=\"active\" ngModel required>\n * ```\n *\n * \\@experimental\n */\nvar CheckboxRequiredValidator = (function (_super) {\n    tslib_1.__extends(CheckboxRequiredValidator, _super);\n    function CheckboxRequiredValidator() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    CheckboxRequiredValidator.prototype.validate = function (c) {\n        return this.required ? Validators.requiredTrue(c) : null;\n    };\n    return CheckboxRequiredValidator;\n}(RequiredValidator));\nCheckboxRequiredValidator.decorators = [\n    { type: Directive, args: [{\n                selector: 'input[type=checkbox][required][formControlName],input[type=checkbox][required][formControl],input[type=checkbox][required][ngModel]',\n                providers: [CHECKBOX_REQUIRED_VALIDATOR],\n                host: { '[attr.required]': 'required ? \"\" : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nCheckboxRequiredValidator.ctorParameters = function () { return []; };\n/**\n * Provider which adds {\\@link EmailValidator} to {\\@link NG_VALIDATORS}.\n */\nvar EMAIL_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(function () { return EmailValidator; }),\n    multi: true\n};\n/**\n * A Directive that adds the `email` validator to controls marked with the\n * `email` attribute, via the {\\@link NG_VALIDATORS} binding.\n *\n * ### Example\n *\n * ```\n * <input type=\"email\" name=\"email\" ngModel email>\n * <input type=\"email\" name=\"email\" ngModel email=\"true\">\n * <input type=\"email\" name=\"email\" ngModel [email]=\"true\">\n * ```\n *\n * \\@experimental\n */\nvar EmailValidator = (function () {\n    function EmailValidator() {\n    }\n    Object.defineProperty(EmailValidator.prototype, \"email\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            this._enabled = value === '' || value === true || value === 'true';\n            if (this._onChange)\n                this._onChange();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    EmailValidator.prototype.validate = function (c) {\n        return this._enabled ? Validators.email(c) : null;\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    EmailValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    return EmailValidator;\n}());\nEmailValidator.decorators = [\n    { type: Directive, args: [{\n                selector: '[email][formControlName],[email][formControl],[email][ngModel]',\n                providers: [EMAIL_VALIDATOR]\n            },] },\n];\n/**\n * @nocollapse\n */\nEmailValidator.ctorParameters = function () { return []; };\nEmailValidator.propDecorators = {\n    'email': [{ type: Input },],\n};\n/**\n * Provider which adds {\\@link MinLengthValidator} to {\\@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {\\@example common/forms/ts/validators/validators.ts region='min'}\n */\nvar MIN_LENGTH_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(function () { return MinLengthValidator; }),\n    multi: true\n};\n/**\n * A directive which installs the {\\@link MinLengthValidator} for any `formControlName`,\n * `formControl`, or control with `ngModel` that also has a `minlength` attribute.\n *\n * \\@stable\n */\nvar MinLengthValidator = (function () {\n    function MinLengthValidator() {\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    MinLengthValidator.prototype.ngOnChanges = function (changes) {\n        if ('minlength' in changes) {\n            this._createValidator();\n            if (this._onChange)\n                this._onChange();\n        }\n    };\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    MinLengthValidator.prototype.validate = function (c) {\n        return this.minlength == null ? null : this._validator(c);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    MinLengthValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    /**\n     * @return {?}\n     */\n    MinLengthValidator.prototype._createValidator = function () {\n        this._validator = Validators.minLength(parseInt(this.minlength, 10));\n    };\n    return MinLengthValidator;\n}());\nMinLengthValidator.decorators = [\n    { type: Directive, args: [{\n                selector: '[minlength][formControlName],[minlength][formControl],[minlength][ngModel]',\n                providers: [MIN_LENGTH_VALIDATOR],\n                host: { '[attr.minlength]': 'minlength ? minlength : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nMinLengthValidator.ctorParameters = function () { return []; };\nMinLengthValidator.propDecorators = {\n    'minlength': [{ type: Input },],\n};\n/**\n * Provider which adds {\\@link MaxLengthValidator} to {\\@link NG_VALIDATORS}.\n *\n * ## Example:\n *\n * {\\@example common/forms/ts/validators/validators.ts region='max'}\n */\nvar MAX_LENGTH_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(function () { return MaxLengthValidator; }),\n    multi: true\n};\n/**\n * A directive which installs the {\\@link MaxLengthValidator} for any `formControlName,\n * `formControl`,\n * or control with `ngModel` that also has a `maxlength` attribute.\n *\n * \\@stable\n */\nvar MaxLengthValidator = (function () {\n    function MaxLengthValidator() {\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    MaxLengthValidator.prototype.ngOnChanges = function (changes) {\n        if ('maxlength' in changes) {\n            this._createValidator();\n            if (this._onChange)\n                this._onChange();\n        }\n    };\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    MaxLengthValidator.prototype.validate = function (c) {\n        return this.maxlength != null ? this._validator(c) : null;\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    MaxLengthValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    /**\n     * @return {?}\n     */\n    MaxLengthValidator.prototype._createValidator = function () {\n        this._validator = Validators.maxLength(parseInt(this.maxlength, 10));\n    };\n    return MaxLengthValidator;\n}());\nMaxLengthValidator.decorators = [\n    { type: Directive, args: [{\n                selector: '[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]',\n                providers: [MAX_LENGTH_VALIDATOR],\n                host: { '[attr.maxlength]': 'maxlength ? maxlength : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nMaxLengthValidator.ctorParameters = function () { return []; };\nMaxLengthValidator.propDecorators = {\n    'maxlength': [{ type: Input },],\n};\nvar PATTERN_VALIDATOR = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(function () { return PatternValidator; }),\n    multi: true\n};\n/**\n * A Directive that adds the `pattern` validator to any controls marked with the\n * `pattern` attribute, via the {\\@link NG_VALIDATORS} binding. Uses attribute value\n * as the regex to validate Control value against.  Follows pattern attribute\n * semantics; i.e. regex must match entire Control value.\n *\n * ### Example\n *\n * ```\n * <input [name]=\"fullName\" pattern=\"[a-zA-Z ]*\" ngModel>\n * ```\n * \\@stable\n */\nvar PatternValidator = (function () {\n    function PatternValidator() {\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    PatternValidator.prototype.ngOnChanges = function (changes) {\n        if ('pattern' in changes) {\n            this._createValidator();\n            if (this._onChange)\n                this._onChange();\n        }\n    };\n    /**\n     * @param {?} c\n     * @return {?}\n     */\n    PatternValidator.prototype.validate = function (c) { return this._validator(c); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    PatternValidator.prototype.registerOnValidatorChange = function (fn) { this._onChange = fn; };\n    /**\n     * @return {?}\n     */\n    PatternValidator.prototype._createValidator = function () { this._validator = Validators.pattern(this.pattern); };\n    return PatternValidator;\n}());\nPatternValidator.decorators = [\n    { type: Directive, args: [{\n                selector: '[pattern][formControlName],[pattern][formControl],[pattern][ngModel]',\n                providers: [PATTERN_VALIDATOR],\n                host: { '[attr.pattern]': 'pattern ? pattern : null' }\n            },] },\n];\n/**\n * @nocollapse\n */\nPatternValidator.ctorParameters = function () { return []; };\nPatternValidator.propDecorators = {\n    'pattern': [{ type: Input },],\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 * \\@whatItDoes Creates an {\\@link AbstractControl} from a user-specified configuration.\n *\n * It is essentially syntactic sugar that shortens the `new FormGroup()`,\n * `new FormControl()`, and `new FormArray()` boilerplate that can build up in larger\n * forms.\n *\n * \\@howToUse\n *\n * To use, inject `FormBuilder` into your component class. You can then call its methods\n * directly.\n *\n * {\\@example forms/ts/formBuilder/form_builder_example.ts region='Component'}\n *\n *  * **npm package**: `\\@angular/forms`\n *\n *  * **NgModule**: {\\@link ReactiveFormsModule}\n *\n * \\@stable\n */\nvar FormBuilder = (function () {\n    function FormBuilder() {\n    }\n    /**\n     * Construct a new {\\@link FormGroup} with the given map of configuration.\n     * Valid keys for the `extra` parameter map are `validator` and `asyncValidator`.\n     *\n     * See the {\\@link FormGroup} constructor for more details.\n     * @param {?} controlsConfig\n     * @param {?=} extra\n     * @return {?}\n     */\n    FormBuilder.prototype.group = function (controlsConfig, extra) {\n        if (extra === void 0) { extra = null; }\n        var /** @type {?} */ controls = this._reduceControls(controlsConfig);\n        var /** @type {?} */ validator = extra != null ? extra['validator'] : null;\n        var /** @type {?} */ asyncValidator = extra != null ? extra['asyncValidator'] : null;\n        return new FormGroup(controls, validator, asyncValidator);\n    };\n    /**\n     * Construct a new {\\@link FormControl} with the given `formState`,`validator`, and\n     * `asyncValidator`.\n     *\n     * `formState` can either be a standalone value for the form control or an object\n     * that contains both a value and a disabled status.\n     *\n     * @param {?} formState\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     * @return {?}\n     */\n    FormBuilder.prototype.control = function (formState, validator, asyncValidator) {\n        return new FormControl(formState, validator, asyncValidator);\n    };\n    /**\n     * Construct a {\\@link FormArray} from the given `controlsConfig` array of\n     * configuration, with the given optional `validator` and `asyncValidator`.\n     * @param {?} controlsConfig\n     * @param {?=} validator\n     * @param {?=} asyncValidator\n     * @return {?}\n     */\n    FormBuilder.prototype.array = function (controlsConfig, validator, asyncValidator) {\n        var _this = this;\n        var /** @type {?} */ controls = controlsConfig.map(function (c) { return _this._createControl(c); });\n        return new FormArray(controls, validator, asyncValidator);\n    };\n    /**\n     * \\@internal\n     * @param {?} controlsConfig\n     * @return {?}\n     */\n    FormBuilder.prototype._reduceControls = function (controlsConfig) {\n        var _this = this;\n        var /** @type {?} */ controls = {};\n        Object.keys(controlsConfig).forEach(function (controlName) {\n            controls[controlName] = _this._createControl(controlsConfig[controlName]);\n        });\n        return controls;\n    };\n    /**\n     * \\@internal\n     * @param {?} controlConfig\n     * @return {?}\n     */\n    FormBuilder.prototype._createControl = function (controlConfig) {\n        if (controlConfig instanceof FormControl || controlConfig instanceof FormGroup ||\n            controlConfig instanceof FormArray) {\n            return controlConfig;\n        }\n        else if (Array.isArray(controlConfig)) {\n            var /** @type {?} */ value = controlConfig[0];\n            var /** @type {?} */ validator = controlConfig.length > 1 ? controlConfig[1] : null;\n            var /** @type {?} */ asyncValidator = controlConfig.length > 2 ? controlConfig[2] : null;\n            return this.control(value, validator, asyncValidator);\n        }\n        else {\n            return this.control(controlConfig);\n        }\n    };\n    return FormBuilder;\n}());\nFormBuilder.decorators = [\n    { type: Injectable },\n];\n/**\n * @nocollapse\n */\nFormBuilder.ctorParameters = function () { return []; };\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 * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n/**\n * \\@stable\n */\nvar VERSION = new Version('4.4.7');\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 * \\@whatItDoes Adds `novalidate` attribute to all forms by default.\n *\n * `novalidate` is used to disable browser's native form validation.\n *\n * If you want to use native validation with Angular forms, just add `ngNativeValidate` attribute:\n *\n * ```\n * <form ngNativeValidate></form>\n * ```\n *\n * \\@experimental\n */\nvar NgNoValidate = (function () {\n    function NgNoValidate() {\n    }\n    return NgNoValidate;\n}());\nNgNoValidate.decorators = [\n    { type: Directive, args: [{\n                selector: 'form:not([ngNoForm]):not([ngNativeValidate])',\n                host: { 'novalidate': '' },\n            },] },\n];\n/**\n * @nocollapse\n */\nNgNoValidate.ctorParameters = function () { return []; };\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 */\nvar SHARED_FORM_DIRECTIVES = [\n    NgNoValidate,\n    NgSelectOption,\n    NgSelectMultipleOption,\n    DefaultValueAccessor,\n    NumberValueAccessor,\n    RangeValueAccessor,\n    CheckboxControlValueAccessor,\n    SelectControlValueAccessor,\n    SelectMultipleControlValueAccessor,\n    RadioControlValueAccessor,\n    NgControlStatus,\n    NgControlStatusGroup,\n    RequiredValidator,\n    MinLengthValidator,\n    MaxLengthValidator,\n    PatternValidator,\n    CheckboxRequiredValidator,\n    EmailValidator,\n];\nvar TEMPLATE_DRIVEN_DIRECTIVES = [NgModel, NgModelGroup, NgForm];\nvar REACTIVE_DRIVEN_DIRECTIVES = [FormControlDirective, FormGroupDirective, FormControlName, FormGroupName, FormArrayName];\n/**\n * Internal module used for sharing directives between FormsModule and ReactiveFormsModule\n */\nvar InternalFormsSharedModule = (function () {\n    function InternalFormsSharedModule() {\n    }\n    return InternalFormsSharedModule;\n}());\nInternalFormsSharedModule.decorators = [\n    { type: NgModule, args: [{\n                declarations: SHARED_FORM_DIRECTIVES,\n                exports: SHARED_FORM_DIRECTIVES,\n            },] },\n];\n/**\n * @nocollapse\n */\nInternalFormsSharedModule.ctorParameters = function () { return []; };\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 * The ng module for forms.\n * \\@stable\n */\nvar FormsModule = (function () {\n    function FormsModule() {\n    }\n    return FormsModule;\n}());\nFormsModule.decorators = [\n    { type: NgModule, args: [{\n                declarations: TEMPLATE_DRIVEN_DIRECTIVES,\n                providers: [RadioControlRegistry],\n                exports: [InternalFormsSharedModule, TEMPLATE_DRIVEN_DIRECTIVES]\n            },] },\n];\n/**\n * @nocollapse\n */\nFormsModule.ctorParameters = function () { return []; };\n/**\n * The ng module for reactive forms.\n * \\@stable\n */\nvar ReactiveFormsModule = (function () {\n    function ReactiveFormsModule() {\n    }\n    return ReactiveFormsModule;\n}());\nReactiveFormsModule.decorators = [\n    { type: NgModule, args: [{\n                declarations: [REACTIVE_DRIVEN_DIRECTIVES],\n                providers: [FormBuilder, RadioControlRegistry],\n                exports: [InternalFormsSharedModule, REACTIVE_DRIVEN_DIRECTIVES]\n            },] },\n];\n/**\n * @nocollapse\n */\nReactiveFormsModule.ctorParameters = function () { return []; };\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 * @module\n * @description\n * This module is used for handling user input, by defining and building a {@link FormGroup} that\n * consists of {@link FormControl} objects, and mapping them onto the DOM. {@link FormControl}\n * objects can then be used to read information from the form DOM elements.\n *\n * Forms providers are not included in default providers; you must import these providers\n * explicitly.\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 * @module\n * @description\n * Entry point for all public APIs of the forms package.\n */\n// This file only reexports content of the `src` folder. Keep it that way.\n/**\n * Generated bundle index. Do not edit.\n */\nexport { AbstractControlDirective, AbstractFormGroupDirective, CheckboxControlValueAccessor, ControlContainer, NG_VALUE_ACCESSOR, COMPOSITION_BUFFER_MODE, DefaultValueAccessor, NgControl, NgControlStatus, NgControlStatusGroup, NgForm, NgModel, NgModelGroup, RadioControlValueAccessor, FormControlDirective, FormControlName, FormGroupDirective, FormArrayName, FormGroupName, NgSelectOption, SelectControlValueAccessor, SelectMultipleControlValueAccessor, CheckboxRequiredValidator, EmailValidator, MaxLengthValidator, MinLengthValidator, PatternValidator, RequiredValidator, FormBuilder, AbstractControl, FormArray, FormControl, FormGroup, NG_ASYNC_VALIDATORS, NG_VALIDATORS, Validators, VERSION, FormsModule, ReactiveFormsModule, InternalFormsSharedModule as ɵba, REACTIVE_DRIVEN_DIRECTIVES as ɵz, SHARED_FORM_DIRECTIVES as ɵx, TEMPLATE_DRIVEN_DIRECTIVES as ɵy, CHECKBOX_VALUE_ACCESSOR as ɵa, DEFAULT_VALUE_ACCESSOR as ɵb, AbstractControlStatus as ɵc, ngControlStatusHost as ɵd, formDirectiveProvider as ɵe, formControlBinding as ɵf, modelGroupProvider as ɵg, NgNoValidate as ɵbf, NUMBER_VALUE_ACCESSOR as ɵbb, NumberValueAccessor as ɵbc, RADIO_VALUE_ACCESSOR as ɵh, RadioControlRegistry as ɵi, RANGE_VALUE_ACCESSOR as ɵbd, RangeValueAccessor as ɵbe, formControlBinding$1 as ɵj, controlNameBinding as ɵk, formDirectiveProvider$1 as ɵl, formArrayNameProvider as ɵn, formGroupNameProvider as ɵm, SELECT_VALUE_ACCESSOR as ɵo, NgSelectMultipleOption as ɵq, SELECT_MULTIPLE_VALUE_ACCESSOR as ɵp, CHECKBOX_REQUIRED_VALIDATOR as ɵs, EMAIL_VALIDATOR as ɵt, MAX_LENGTH_VALIDATOR as ɵv, MIN_LENGTH_VALIDATOR as ɵu, PATTERN_VALIDATOR as ɵw, REQUIRED_VALIDATOR as ɵr };\n//# sourceMappingURL=forms.es5.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/@angular/forms/@angular/forms.es5.js\n// module id = 9\n// module chunks = 1","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs/Subject';\n\n@Injectable()\nexport class TabService {\n    private navigatedTo = new Subject<number>();\n    onNavigatedTo$ = this.navigatedTo.asObservable();\n\n    constructor() { }\n\n    onNavigatedTo(tabId: number) {\n        this.navigatedTo.next(tabId);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/angular-router-loader/src!./node_modules/angular2-template-loader!./node_modules/string-replace-loader??ref--0-3!./src/service/tab.service.ts"],"sourceRoot":""}